{
  "version": 3,
  "sources": ["/cdn/shop/t/39/assets/theme-global.js?mx=20260801-3"],
  "sourcesContent": ["MinimogTheme.pubSubEvents = {\n  cartError: \"cart-error\",\n  cartUpdate: \"cart-update\",\n  openCartDrawer: \"open-cart-drawer\",\n  openSearchPopup: \"open-search-popup\",\n  closeSearchPopup: \"close-search-popup\",\n  optionValueSelectionChange: 'option-value-selection-change',\n  variantChange: \"variant-change\",\n  quantityUpdate: 'quantity-update',\n  quantityRules: 'quantity-rules',\n  quantityBoundries: 'quantity-boundries'\n};\nconst requestDefaultConfigs = {\n  mode: \"same-origin\",\n  credentials: \"same-origin\",\n  headers: {\n    \"X-Requested-With\": \"XMLHttpRequest\",\n    \"Content-Type\": \"application/json\",\n  },\n};\n\nMinimogTheme.config = {\n  mqlMobile: false,\n  mqlTablet: false,\n  mediaQueryMobile: \"screen and (max-width: 767px)\",\n  mediaQueryTablet: \"screen and (max-width: 1023px)\",\n};\n\nMinimogTheme.initWhenVisible = function (options) {\n  const threshold = options.threshold ? options.threshold : 0;\n\n  const observer = new IntersectionObserver(\n    (entries, observer) => {\n      entries.forEach((entry) => {\n        if (entry.isIntersecting) {\n          if (typeof options.callback === \"function\") {\n            options.callback();\n            observer.unobserve(entry.target);\n          }\n        }\n      });\n    },\n    { rootMargin: `0px 0px ${threshold}px 0px` }\n  );\n\n  observer.observe(options.element);\n};\n(function () {\n  // Trigger events when going between breakpoints\n  const mql = window.matchMedia(MinimogTheme.config.mediaQueryMobile);\n  MinimogTheme.config.mqlMobile = mql.matches;\n  mql.onchange = (e) => {\n    if (e.matches) {\n      MinimogTheme.config.mqlMobile = true;\n      document.dispatchEvent(new CustomEvent(\"matchMobile\"));\n    } else {\n      MinimogTheme.config.mqlMobile = false;\n      document.dispatchEvent(new CustomEvent(\"unmatchMobile\"));\n    }\n  };\n\n  // Tablet\n  const mqltl = window.matchMedia(MinimogTheme.config.mediaQueryTablet);\n  MinimogTheme.config.mqlTablet = mqltl.matches;\n  mqltl.onchange = (e) => {\n    if (e.matches) {\n      MinimogTheme.config.mqlTablet = true;\n      document.dispatchEvent(new CustomEvent(\"matchTablet\"));\n    } else {\n      MinimogTheme.config.mqlTablet = false;\n      document.dispatchEvent(new CustomEvent(\"unmatchTablet\"));\n    }\n  };\n\n  // Page transition\n  var fader = document.querySelector(\".m-page-transition\");\n  function __fadeInPage() {\n    if (!window.AnimationEvent || !fader) return;\n\n    let ignore_beforeunload = false;\n\n    const loadingDesignMode = fader.dataset.designMode === \"true\";\n\n    document.querySelectorAll(\"a[href^=mailto], a[href^=tel]\").forEach((link) => {\n      link.addEventListener(\"click\", () => {\n        ignore_beforeunload = true;\n      });\n    });\n\n    if (loadingDesignMode && Shopify.designMode) {\n      fader.classList.add(\"m-page-transition--design-mode\");\n    } else {\n      // Page transition\n      window.addEventListener(\"beforeunload\", () => {\n        if (!ignore_beforeunload) fader.classList.add(\"fade-in\");\n      });\n      window.addEventListener(\"DOMContentLoaded\", () => {\n        document.documentElement.classList.remove(\"m:overflow-hidden\");\n        document.body.classList.remove(\"m:overflow-hidden\");\n        setScrollbarWidth();\n\n        // fader.classList.remove('fade-in')\n        setTimeout(() => {\n          fader.classList.add(\"fade-out\");\n        }, 300);\n\n        document.dispatchEvent(new CustomEvent(\"page:loaded\"));\n      });\n      window.addEventListener(\"pageshow\", (event) => {\n        // Removes unload class when returning to page via history\n        if (event.persisted) {\n          fader.classList.remove(\"fade-in\");\n          // fader.classList.add('fade-out');\n        }\n      });\n    }\n  }\n  __fadeInPage();\n})();\n\nclass HTMLUpdateUtility {\n  /**\n   * Used to swap an HTML node with a new node.\n   * The new node is inserted as a previous sibling to the old node, the old node is hidden, and then the old node is removed.\n   *\n   * The function currently uses a double buffer approach, but this should be replaced by a view transition once it is more widely supported https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API\n   */\n  static viewTransition(oldNode, newContent, preProcessCallbacks = [], postProcessCallbacks = []) {\n    if (!oldNode || !newContent) return;\n    preProcessCallbacks?.forEach((callback) => callback(newContent));\n\n    const newNodeWrapper = document.createElement('div');\n    HTMLUpdateUtility.setInnerHTML(newNodeWrapper, newContent.outerHTML);\n    const newNode = newNodeWrapper.firstChild;\n\n    // dedupe IDs\n    const uniqueKey = Date.now();\n    oldNode.querySelectorAll('[id], [form]').forEach((element) => {\n      element.id && (element.id = `${element.id}-${uniqueKey}`);\n      element.form && element.setAttribute('form', `${element.form.getAttribute('id')}-${uniqueKey}`);\n    });\n\n    oldNode.parentNode.insertBefore(newNode, oldNode);\n    oldNode.style.display = 'none';\n\n    postProcessCallbacks?.forEach((callback) => callback(newNode));\n\n    setTimeout(() => oldNode.remove(), 500);\n  }\n\n  // Sets inner HTML and reinjects the script tags to allow execution. By default, scripts are disabled when using element.innerHTML.\n  static setInnerHTML(element, html) {\n    element.innerHTML = html;\n    element.querySelectorAll('script').forEach((oldScriptTag) => {\n      const newScriptTag = document.createElement('script');\n      Array.from(oldScriptTag.attributes).forEach((attribute) => {\n        newScriptTag.setAttribute(attribute.name, attribute.value);\n      });\n      newScriptTag.appendChild(document.createTextNode(oldScriptTag.innerHTML));\n      oldScriptTag.parentNode.replaceChild(newScriptTag, oldScriptTag);\n    });\n  }\n}\n\n/* KINHANK MotionX: controlled product FAQ localization.\n * This intentionally replaces unreliable third-party theme translations for\n * shipping, specifications, and returns on both cached and fresh storefront pages.\n */\n(() => {\n  const translations = {\n    en: {\n      shipping: ['Shipping & Delivery', 'Eligible U.S. orders fulfilled from our U.S. location currently receive free Economy shipping, estimated at 5\u20138 business days. International shipping methods, prices, and estimates vary by destination and are shown after you enter your address at checkout.'],\n      specs: ['Product Specs', ['Wide-angle camera', 'AI-powered motion engine', 'Arm Cortex-A Series SoC', 'KINHANK OS', 'HDMI TV connection (cable included)', 'Wi-Fi', 'Bluetooth 5.0', 'TF card slot']],\n      policy: ['What is your return policy?', 'You can request a return within 30 days of receiving your order. If the product does not meet your expectations, contact us within that period.'],\n      conditions: ['What conditions must be met for a return?', 'The product must be in its original condition with all accessories, cables, and packaging. It must show no physical damage or misuse, and proof of purchase is required.'],\n      request: ['How do I request a return or exchange?', 'Contact our support team with your order number and the reason for the return or exchange. We will provide the instructions to complete the process.']\n    },\n    ru: {\n      shipping: ['\u0414\u043E\u0441\u0442\u0430\u0432\u043A\u0430', '\u0414\u043B\u044F \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0445 \u0442\u0440\u0435\u0431\u043E\u0432\u0430\u043D\u0438\u044F\u043C \u0437\u0430\u043A\u0430\u0437\u043E\u0432 \u043F\u043E \u0421\u0428\u0410, \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u043C\u044B\u0445 \u0441 \u043D\u0430\u0448\u0435\u0433\u043E \u0441\u043A\u043B\u0430\u0434\u0430 \u0432 \u0421\u0428\u0410, \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0431\u0435\u0441\u043F\u043B\u0430\u0442\u043D\u0430\u044F \u044D\u043A\u043E\u043D\u043E\u043C\u0438\u0447\u043D\u0430\u044F \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0430 \u0441\u043E \u0441\u0440\u043E\u043A\u043E\u043C 5\u20138 \u0440\u0430\u0431\u043E\u0447\u0438\u0445 \u0434\u043D\u0435\u0439. \u0421\u043F\u043E\u0441\u043E\u0431\u044B, \u0441\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C \u0438 \u0441\u0440\u043E\u043A\u0438 \u043C\u0435\u0436\u0434\u0443\u043D\u0430\u0440\u043E\u0434\u043D\u043E\u0439 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438 \u0437\u0430\u0432\u0438\u0441\u044F\u0442 \u043E\u0442 \u0441\u0442\u0440\u0430\u043D\u044B \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0438 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u0441\u044F \u043F\u043E\u0441\u043B\u0435 \u0432\u0432\u043E\u0434\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u043F\u0440\u0438 \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u0438 \u0437\u0430\u043A\u0430\u0437\u0430.'],\n      specs: ['\u0425\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A\u0438 \u043F\u0440\u043E\u0434\u0443\u043A\u0442\u0430', ['\u0428\u0438\u0440\u043E\u043A\u043E\u0443\u0433\u043E\u043B\u044C\u043D\u0430\u044F \u043A\u0430\u043C\u0435\u0440\u0430', '\u0421\u0438\u0441\u0442\u0435\u043C\u0430 \u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u0432\u0430\u043D\u0438\u044F \u0434\u0432\u0438\u0436\u0435\u043D\u0438\u0439 \u043D\u0430 \u0431\u0430\u0437\u0435 \u0418\u0418', '\u041E\u0434\u043D\u043E\u043A\u0440\u0438\u0441\u0442\u0430\u043B\u044C\u043D\u0430\u044F \u0441\u0438\u0441\u0442\u0435\u043C\u0430 Arm Cortex-A Series', 'KINHANK OS', '\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u043A \u0442\u0435\u043B\u0435\u0432\u0438\u0437\u043E\u0440\u0443 \u043F\u043E HDMI (\u043A\u0430\u0431\u0435\u043B\u044C \u0432 \u043A\u043E\u043C\u043F\u043B\u0435\u043A\u0442\u0435)', 'Wi-Fi', 'Bluetooth 5.0', '\u0421\u043B\u043E\u0442 \u0434\u043B\u044F \u043A\u0430\u0440\u0442\u044B TF']],\n      policy: ['\u041A\u0430\u043A\u043E\u0432\u0430 \u0432\u0430\u0448\u0430 \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0430 \u0432\u043E\u0437\u0432\u0440\u0430\u0442\u0430?', '\u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0437\u0430\u043F\u0440\u043E\u0441\u0438\u0442\u044C \u0432\u043E\u0437\u0432\u0440\u0430\u0442 \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 30 \u0434\u043D\u0435\u0439 \u0441 \u0434\u0430\u0442\u044B \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u044F \u0437\u0430\u043A\u0430\u0437\u0430. \u0415\u0441\u043B\u0438 \u0442\u043E\u0432\u0430\u0440 \u0432\u0430\u043C \u043D\u0435 \u043F\u043E\u0434\u043E\u0448\u0451\u043B, \u0441\u0432\u044F\u0436\u0438\u0442\u0435\u0441\u044C \u0441 \u043D\u0430\u043C\u0438 \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 \u044D\u0442\u043E\u0433\u043E \u0441\u0440\u043E\u043A\u0430.'],\n      conditions: ['\u041A\u0430\u043A\u0438\u0435 \u0443\u0441\u043B\u043E\u0432\u0438\u044F \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u0434\u043B\u044F \u0432\u043E\u0437\u0432\u0440\u0430\u0442\u0430?', '\u0422\u043E\u0432\u0430\u0440 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0432 \u043F\u0435\u0440\u0432\u043E\u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u043C \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0438, \u0441\u043E \u0432\u0441\u0435\u043C\u0438 \u0430\u043A\u0441\u0435\u0441\u0441\u0443\u0430\u0440\u0430\u043C\u0438, \u043A\u0430\u0431\u0435\u043B\u044F\u043C\u0438 \u0438 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u043E\u0439, \u0431\u0435\u0437 \u0441\u043B\u0435\u0434\u043E\u0432 \u043D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E\u0433\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0438\u043B\u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u043F\u043E\u0432\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0439. \u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u0435 \u043F\u043E\u043A\u0443\u043F\u043A\u0438.'],\n      request: ['\u041A\u0430\u043A \u0437\u0430\u043F\u0440\u043E\u0441\u0438\u0442\u044C \u0432\u043E\u0437\u0432\u0440\u0430\u0442 \u0438\u043B\u0438 \u043E\u0431\u043C\u0435\u043D?', '\u0421\u0432\u044F\u0436\u0438\u0442\u0435\u0441\u044C \u0441\u043E \u0441\u043B\u0443\u0436\u0431\u043E\u0439 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0438 \u0438 \u0443\u043A\u0430\u0436\u0438\u0442\u0435 \u043D\u043E\u043C\u0435\u0440 \u0437\u0430\u043A\u0430\u0437\u0430 \u0438 \u043F\u0440\u0438\u0447\u0438\u043D\u0443 \u0432\u043E\u0437\u0432\u0440\u0430\u0442\u0430 \u0438\u043B\u0438 \u043E\u0431\u043C\u0435\u043D\u0430. \u041D\u0430\u0448\u0430 \u043A\u043E\u043C\u0430\u043D\u0434\u0430 \u0441\u043E\u043E\u0431\u0449\u0438\u0442 \u0434\u0430\u043B\u044C\u043D\u0435\u0439\u0448\u0438\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u0438.']\n    },\n    ja: {\n      shipping: ['\u914D\u9001\u306B\u3064\u3044\u3066', '\u7C73\u56FD\u5185\u306E\u5BFE\u8C61\u6CE8\u6587\u306F\u7C73\u56FD\u5009\u5EAB\u304B\u3089\u767A\u9001\u3055\u308C\u3001\u30A8\u30B3\u30CE\u30DF\u30FC\u914D\u9001\u306F\u7121\u6599\u3067\u3059\u3002\u304A\u5C4A\u3051\u306E\u76EE\u5B89\u306F5\uFF5E8\u55B6\u696D\u65E5\u3067\u3059\u3002\u56FD\u969B\u914D\u9001\u306E\u65B9\u6CD5\u3001\u6599\u91D1\u3001\u6240\u8981\u65E5\u6570\u306F\u914D\u9001\u5148\u306B\u3088\u3063\u3066\u7570\u306A\u308A\u3001\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u6642\u306B\u4F4F\u6240\u3092\u5165\u529B\u3059\u308B\u3068\u8868\u793A\u3055\u308C\u307E\u3059\u3002'],\n      specs: ['\u88FD\u54C1\u4ED5\u69D8', ['\u5E83\u89D2\u30AB\u30E1\u30E9', 'AI\u30E2\u30FC\u30B7\u30E7\u30F3\u8A8D\u8B58\u30A8\u30F3\u30B8\u30F3', 'Arm Cortex-A Series SoC', 'KINHANK OS', 'HDMI\u30C6\u30EC\u30D3\u63A5\u7D9A\uFF08\u30B1\u30FC\u30D6\u30EB\u4ED8\u5C5E\uFF09', 'Wi-Fi', 'Bluetooth 5.0', 'TF\u30AB\u30FC\u30C9\u30B9\u30ED\u30C3\u30C8']],\n      policy: ['\u8FD4\u54C1\u30DD\u30EA\u30B7\u30FC\u306B\u3064\u3044\u3066\u6559\u3048\u3066\u304F\u3060\u3055\u3044\u3002', '\u5546\u54C1\u5230\u7740\u65E5\u304B\u308930\u65E5\u4EE5\u5185\u3067\u3042\u308C\u3070\u8FD4\u54C1\u3092\u7533\u8ACB\u3067\u304D\u307E\u3059\u3002\u5546\u54C1\u306B\u3054\u6E80\u8DB3\u3044\u305F\u3060\u3051\u306A\u3044\u5834\u5408\u306F\u3001\u671F\u9593\u5185\u306B\u304A\u554F\u3044\u5408\u308F\u305B\u304F\u3060\u3055\u3044\u3002'],\n      conditions: ['\u8FD4\u54C1\u306B\u306F\u3069\u306E\u3088\u3046\u306A\u6761\u4EF6\u304C\u3042\u308A\u307E\u3059\u304B\uFF1F', '\u5546\u54C1\u304C\u5143\u306E\u72B6\u614B\u3067\u3042\u308A\u3001\u4ED8\u5C5E\u54C1\u3001\u30B1\u30FC\u30D6\u30EB\u3001\u68B1\u5305\u6750\u304C\u3059\u3079\u3066\u63C3\u3063\u3066\u3044\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\u8AA4\u4F7F\u7528\u3084\u7269\u7406\u7684\u306A\u7834\u640D\u304C\u306A\u304F\u3001\u8CFC\u5165\u8A3C\u660E\u3092\u3054\u63D0\u793A\u3044\u305F\u3060\u304F\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002'],\n      request: ['\u8FD4\u54C1\u307E\u305F\u306F\u4EA4\u63DB\u3092\u7533\u8ACB\u3059\u308B\u306B\u306F\u3069\u3046\u3059\u308C\u3070\u3088\u3044\u3067\u3059\u304B\uFF1F', '\u6CE8\u6587\u756A\u53F7\u3068\u8FD4\u54C1\u307E\u305F\u306F\u4EA4\u63DB\u306E\u7406\u7531\u3092\u6DFB\u3048\u3066\u30B5\u30DD\u30FC\u30C8\u30C1\u30FC\u30E0\u306B\u3054\u9023\u7D61\u304F\u3060\u3055\u3044\u3002\u624B\u7D9A\u304D\u65B9\u6CD5\u3092\u3054\u6848\u5185\u3057\u307E\u3059\u3002']\n    },\n    es: {\n      shipping: ['Env\u00EDo y entrega', 'Los pedidos elegibles dentro de Estados Unidos se env\u00EDan desde nuestro almac\u00E9n estadounidense con env\u00EDo econ\u00F3mico gratuito y un plazo estimado de 5 a 8 d\u00EDas laborables. Los m\u00E9todos, precios y plazos de env\u00EDo internacional dependen del destino y se muestran despu\u00E9s de introducir la direcci\u00F3n durante el pago.'],\n      specs: ['Especificaciones del producto', ['C\u00E1mara gran angular', 'Motor de detecci\u00F3n de movimiento con IA', 'SoC Arm Cortex-A Series', 'KINHANK OS', 'Conexi\u00F3n HDMI al televisor (cable incluido)', 'Wi-Fi', 'Bluetooth 5.0', 'Ranura para tarjeta TF']],\n      policy: ['\u00BFCu\u00E1l es la pol\u00EDtica de devoluciones?', 'Puedes solicitar una devoluci\u00F3n durante los 30 d\u00EDas posteriores a la recepci\u00F3n del pedido. Si el producto no cumple tus expectativas, cont\u00E1ctanos dentro de ese plazo.'],\n      conditions: ['\u00BFQu\u00E9 requisitos debe cumplir una devoluci\u00F3n?', 'El producto debe conservar su estado original e incluir todos los accesorios, cables y embalajes. No debe presentar da\u00F1os f\u00EDsicos ni se\u00F1ales de uso indebido, y se requiere un comprobante de compra.'],\n      request: ['\u00BFC\u00F3mo solicito una devoluci\u00F3n o un cambio?', 'Contacta con nuestro equipo de soporte e indica el n\u00FAmero de pedido y el motivo de la devoluci\u00F3n o el cambio. Te enviaremos las instrucciones para completar el proceso.']\n    },\n    fr: {\n      shipping: ['Exp\u00E9dition et livraison', 'Les commandes \u00E9ligibles aux \u00C9tats-Unis sont exp\u00E9di\u00E9es depuis notre entrep\u00F4t am\u00E9ricain avec la livraison \u00E9conomique gratuite, estim\u00E9e entre 5 et 8 jours ouvr\u00E9s. Les modes, tarifs et d\u00E9lais d\u2019exp\u00E9dition internationale varient selon la destination et s\u2019affichent apr\u00E8s la saisie de l\u2019adresse lors du paiement.'],\n      specs: ['Caract\u00E9ristiques du produit', ['Cam\u00E9ra grand-angle', 'Moteur de d\u00E9tection de mouvement aliment\u00E9 par l\u2019IA', 'SoC Arm Cortex-A Series', 'KINHANK OS', 'Connexion HDMI au t\u00E9l\u00E9viseur (c\u00E2ble inclus)', 'Wi-Fi', 'Bluetooth 5.0', 'Emplacement pour carte TF']],\n      policy: ['Quelle est votre politique de retour ?', 'Vous pouvez demander un retour dans les 30 jours suivant la r\u00E9ception de votre commande. Si le produit ne vous convient pas, contactez-nous pendant ce d\u00E9lai.'],\n      conditions: ['Quelles conditions doivent \u00EAtre remplies pour un retour ?', 'Le produit doit \u00EAtre dans son \u00E9tat d\u2019origine, avec tous les accessoires, c\u00E2bles et emballages. Il ne doit pr\u00E9senter aucun dommage physique ni trace de mauvaise utilisation, et une preuve d\u2019achat est requise.'],\n      request: ['Comment demander un retour ou un \u00E9change ?', 'Contactez notre \u00E9quipe d\u2019assistance en indiquant votre num\u00E9ro de commande et le motif du retour ou de l\u2019\u00E9change. Nous vous communiquerons la marche \u00E0 suivre.']\n    },\n    'zh-TW': {\n      shipping: ['\u904B\u9001\u8207\u914D\u9001', '\u7B26\u5408\u689D\u4EF6\u7684\u7F8E\u570B\u5883\u5167\u8A02\u55AE\u7531\u7F8E\u570B\u5009\u5EAB\u51FA\u8CA8\uFF0C\u53EF\u4EAB\u514D\u8CBB\u7D93\u6FDF\u914D\u9001\uFF0C\u9810\u8A08 5\u20138 \u500B\u5DE5\u4F5C\u5929\u9001\u9054\u3002\u570B\u969B\u914D\u9001\u65B9\u5F0F\u3001\u8CBB\u7528\u8207\u9810\u4F30\u6642\u9593\u6703\u4F9D\u76EE\u7684\u5730\u800C\u7570\uFF0C\u7D50\u5E33\u6642\u8F38\u5165\u5730\u5740\u5F8C\u5373\u53EF\u67E5\u770B\u3002'],\n      specs: ['\u7522\u54C1\u898F\u683C', ['\u5EE3\u89D2\u651D\u5F71\u6A5F', 'AI \u52D5\u4F5C\u8FA8\u8B58\u5F15\u64CE', 'Arm Cortex-A Series SoC', 'KINHANK OS', 'HDMI \u96FB\u8996\u9023\u63A5\uFF08\u9644\u7DDA\u6750\uFF09', 'Wi-Fi', 'Bluetooth 5.0', 'TF \u8A18\u61B6\u5361\u63D2\u69FD']],\n      policy: ['\u9000\u8CA8\u653F\u7B56\u662F\u4EC0\u9EBC\uFF1F', '\u60A8\u53EF\u5728\u6536\u5230\u8A02\u55AE\u5F8C 30 \u5929\u5167\u7533\u8ACB\u9000\u8CA8\u3002\u5982\u5546\u54C1\u672A\u9054\u9810\u671F\uFF0C\u8ACB\u5728\u6B64\u671F\u9650\u5167\u8207\u6211\u5011\u806F\u7D61\u3002'],\n      conditions: ['\u9000\u8CA8\u9700\u8981\u7B26\u5408\u54EA\u4E9B\u689D\u4EF6\uFF1F', '\u5546\u54C1\u9808\u4FDD\u6301\u539F\u59CB\u72C0\u614B\uFF0C\u4E26\u9644\u9F4A\u6240\u6709\u914D\u4EF6\u3001\u7DDA\u6750\u8207\u5305\u88DD\uFF1B\u4E0D\u5F97\u6709\u8AA4\u7528\u6216\u4EBA\u70BA\u640D\u58DE\uFF0C\u4E14\u9808\u63D0\u4F9B\u8CFC\u8CB7\u8B49\u660E\u3002'],\n      request: ['\u5982\u4F55\u7533\u8ACB\u9000\u8CA8\u6216\u63DB\u8CA8\uFF1F', '\u8ACB\u806F\u7D61\u5BA2\u670D\u4E26\u63D0\u4F9B\u8A02\u55AE\u7DE8\u865F\u53CA\u9000\u8CA8\u6216\u63DB\u8CA8\u539F\u56E0\uFF0C\u6211\u5011\u7684\u5718\u968A\u5C07\u63D0\u4F9B\u5F8C\u7E8C\u64CD\u4F5C\u8AAA\u660E\u3002']\n    },\n    de: {\n      shipping: ['Versand & Lieferung', 'Berechtigte Bestellungen innerhalb der USA werden aus unserem US-Lager mit kostenlosem Economy-Versand verschickt. Die voraussichtliche Lieferzeit betr\u00E4gt 5\u20138 Werktage. Internationale Versandarten, Preise und Lieferzeiten variieren je nach Zielort und werden nach Eingabe der Adresse beim Checkout angezeigt.'],\n      specs: ['Produktspezifikationen', ['Weitwinkelkamera', 'KI-gest\u00FCtzte Bewegungserkennung', 'Arm Cortex-A Series SoC', 'KINHANK OS', 'HDMI-Verbindung zum Fernseher (Kabel enthalten)', 'Wi-Fi', 'Bluetooth 5.0', 'TF-Kartensteckplatz']],\n      policy: ['Wie lautet Ihre R\u00FCckgaberichtlinie?', 'Sie k\u00F6nnen innerhalb von 30 Tagen nach Erhalt Ihrer Bestellung eine R\u00FCckgabe beantragen. Wenn das Produkt nicht Ihren Erwartungen entspricht, kontaktieren Sie uns bitte innerhalb dieser Frist.'],\n      conditions: ['Welche Bedingungen gelten f\u00FCr eine R\u00FCckgabe?', 'Das Produkt muss sich im Originalzustand befinden und s\u00E4mtliches Zubeh\u00F6r, alle Kabel und die Verpackung enthalten. Es darf keine Sch\u00E4den oder Spuren unsachgem\u00E4\u00DFer Nutzung aufweisen. Ein Kaufbeleg ist erforderlich.'],\n      request: ['Wie beantrage ich eine R\u00FCckgabe oder einen Umtausch?', 'Kontaktieren Sie unseren Support mit Ihrer Bestellnummer und dem Grund f\u00FCr die R\u00FCckgabe oder den Umtausch. Unser Team sendet Ihnen die weiteren Anweisungen.']\n    },\n    ko: {\n      shipping: ['\uBC30\uC1A1 \uC548\uB0B4', '\uBBF8\uAD6D \uB0B4 \uB300\uC0C1 \uC8FC\uBB38\uC740 \uBBF8\uAD6D \uCC3D\uACE0\uC5D0\uC11C \uCD9C\uACE0\uB418\uBA70 \uBB34\uB8CC \uC77C\uBC18 \uBC30\uC1A1\uC774 \uC81C\uACF5\uB429\uB2C8\uB2E4. \uC608\uC0C1 \uBC30\uC1A1 \uAE30\uAC04\uC740 \uC601\uC5C5\uC77C \uAE30\uC900 5~8\uC77C\uC785\uB2C8\uB2E4. \uAD6D\uC81C \uBC30\uC1A1 \uBC29\uBC95, \uC694\uAE08 \uBC0F \uC608\uC0C1 \uAE30\uAC04\uC740 \uBAA9\uC801\uC9C0\uC5D0 \uB530\uB77C \uB2EC\uB77C\uC9C0\uBA70 \uACB0\uC81C \uC2DC \uC8FC\uC18C\uB97C \uC785\uB825\uD558\uBA74 \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.'],\n      specs: ['\uC81C\uD488 \uC0AC\uC591', ['\uAD11\uAC01 \uCE74\uBA54\uB77C', 'AI \uB3D9\uC791 \uC778\uC2DD \uC5D4\uC9C4', 'Arm Cortex-A Series SoC', 'KINHANK OS', 'HDMI TV \uC5F0\uACB0(\uCF00\uC774\uBE14 \uD3EC\uD568)', 'Wi-Fi', 'Bluetooth 5.0', 'TF \uCE74\uB4DC \uC2AC\uB86F']],\n      policy: ['\uBC18\uD488 \uC815\uCC45\uC740 \uC5B4\uB5BB\uAC8C \uB418\uB098\uC694?', '\uC8FC\uBB38 \uC0C1\uD488\uC744 \uBC1B\uC740 \uB0A0\uBD80\uD130 30\uC77C \uC774\uB0B4\uC5D0 \uBC18\uD488\uC744 \uC2E0\uCCAD\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC0C1\uD488\uC774 \uAE30\uB300\uC5D0 \uBBF8\uCE58\uC9C0 \uBABB\uD55C \uACBD\uC6B0 \uD574\uB2F9 \uAE30\uAC04 \uB0B4\uC5D0 \uBB38\uC758\uD574 \uC8FC\uC138\uC694.'],\n      conditions: ['\uBC18\uD488\uD558\uB824\uBA74 \uC5B4\uB5A4 \uC870\uAC74\uC744 \uCDA9\uC871\uD574\uC57C \uD558\uB098\uC694?', '\uC0C1\uD488\uC740 \uC6D0\uB798 \uC0C1\uD0DC\uC5EC\uC57C \uD558\uBA70 \uBAA8\uB4E0 \uC561\uC138\uC11C\uB9AC, \uCF00\uC774\uBE14 \uBC0F \uD3EC\uC7A5\uC7AC\uAC00 \uD3EC\uD568\uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4. \uC624\uC6A9\uC774\uB098 \uBB3C\uB9AC\uC801 \uC190\uC0C1\uC774 \uC5C6\uC5B4\uC57C \uD558\uBA70 \uAD6C\uB9E4 \uC99D\uBE59\uC774 \uD544\uC694\uD569\uB2C8\uB2E4.'],\n      request: ['\uBC18\uD488 \uB610\uB294 \uAD50\uD658\uC740 \uC5B4\uB5BB\uAC8C \uC2E0\uCCAD\uD558\uB098\uC694?', '\uC8FC\uBB38 \uBC88\uD638\uC640 \uBC18\uD488 \uB610\uB294 \uAD50\uD658 \uC0AC\uC720\uB97C \uC801\uC5B4 \uACE0\uAC1D\uC9C0\uC6D0\uD300\uC5D0 \uBB38\uC758\uD574 \uC8FC\uC138\uC694. \uB2F4\uB2F9 \uD300\uC5D0\uC11C \uB2E4\uC74C \uC808\uCC28\uB97C \uC548\uB0B4\uD574 \uB4DC\uB9BD\uB2C8\uB2E4.']\n    },\n    nl: {\n      shipping: ['Verzending en bezorging', 'Geschikte bestellingen binnen de Verenigde Staten worden vanuit ons Amerikaanse magazijn verzonden met gratis Economy-verzending. De geschatte levertijd is 5\u20138 werkdagen. Internationale verzendmethoden, prijzen en levertijden verschillen per bestemming en verschijnen nadat je bij het afrekenen je adres hebt ingevuld.'],\n      specs: ['Productspecificaties', ['Groothoekcamera', 'AI-gestuurde bewegingsdetectie', 'Arm Cortex-A Series SoC', 'KINHANK OS', 'HDMI-aansluiting op de tv (kabel inbegrepen)', 'Wi-Fi', 'Bluetooth 5.0', 'TF-kaartsleuf']],\n      policy: ['Wat is jullie retourbeleid?', 'Je kunt binnen 30 dagen na ontvangst van je bestelling een retour aanvragen. Neem binnen die periode contact met ons op als het product niet aan je verwachtingen voldoet.'],\n      conditions: ['Aan welke voorwaarden moet een retour voldoen?', 'Het product moet in de oorspronkelijke staat verkeren en alle accessoires, kabels en verpakkingen bevatten. Het mag geen schade of sporen van verkeerd gebruik hebben. Een aankoopbewijs is vereist.'],\n      request: ['Hoe vraag ik een retour of omruiling aan?', 'Neem contact op met ons supportteam en vermeld je bestelnummer en de reden voor de retour of omruiling. Ons team stuurt je de verdere instructies.']\n    },\n    it: {\n      shipping: ['Spedizione e consegna', 'Gli ordini idonei negli Stati Uniti vengono spediti dal nostro magazzino statunitense con spedizione Economy gratuita e consegna stimata in 5\u20138 giorni lavorativi. Metodi, costi e tempi di spedizione internazionale variano in base alla destinazione e vengono mostrati dopo aver inserito l\u2019indirizzo durante il pagamento.'],\n      specs: ['Specifiche del prodotto', ['Fotocamera grandangolare', 'Motore di rilevamento del movimento basato sull\u2019IA', 'SoC Arm Cortex-A Series', 'KINHANK OS', 'Collegamento HDMI al televisore (cavo incluso)', 'Wi-Fi', 'Bluetooth 5.0', 'Slot per scheda TF']],\n      policy: ['Qual \u00E8 la vostra politica di reso?', 'Puoi richiedere un reso entro 30 giorni dalla ricezione dell\u2019ordine. Se il prodotto non soddisfa le tue aspettative, contattaci entro questo periodo.'],\n      conditions: ['Quali condizioni devono essere soddisfatte per un reso?', 'Il prodotto deve essere nelle condizioni originali e includere tutti gli accessori, i cavi e gli imballaggi. Non deve presentare danni fisici o segni di uso improprio ed \u00E8 richiesta una prova d\u2019acquisto.'],\n      request: ['Come posso richiedere un reso o un cambio?', 'Contatta il nostro team di assistenza indicando il numero dell\u2019ordine e il motivo del reso o del cambio. Ti forniremo le istruzioni necessarie.']\n    },\n    pl: {\n      shipping: ['Wysy\u0142ka i dostawa', 'Kwalifikuj\u0105ce si\u0119 zam\u00F3wienia na terenie USA s\u0105 wysy\u0142ane z naszego magazynu w USA bezp\u0142atn\u0105 przesy\u0142k\u0105 ekonomiczn\u0105. Szacowany czas dostawy wynosi 5\u20138 dni roboczych. Metody, koszty i terminy wysy\u0142ki mi\u0119dzynarodowej zale\u017C\u0105 od miejsca docelowego i s\u0105 wy\u015Bwietlane po podaniu adresu podczas realizacji zam\u00F3wienia.'],\n      specs: ['Specyfikacja produktu', ['Kamera szerokok\u0105tna', 'System wykrywania ruchu oparty na AI', 'Arm Cortex-A Series SoC', 'KINHANK OS', 'Po\u0142\u0105czenie HDMI z telewizorem (przew\u00F3d w zestawie)', 'Wi-Fi', 'Bluetooth 5.0', 'Gniazdo karty TF']],\n      policy: ['Jaka jest polityka zwrot\u00F3w?', 'Zwrot mo\u017Cna zg\u0142osi\u0107 w ci\u0105gu 30 dni od otrzymania zam\u00F3wienia. Je\u015Bli produkt nie spe\u0142nia oczekiwa\u0144, skontaktuj si\u0119 z nami w tym terminie.'],\n      conditions: ['Jakie warunki musi spe\u0142nia\u0107 zwrot?', 'Produkt musi by\u0107 w oryginalnym stanie i zawiera\u0107 wszystkie akcesoria, przewody oraz opakowanie. Nie mo\u017Ce nosi\u0107 \u015Blad\u00F3w niew\u0142a\u015Bciwego u\u017Cytkowania ani uszkodze\u0144 fizycznych. Wymagany jest dow\u00F3d zakupu.'],\n      request: ['Jak zg\u0142osi\u0107 zwrot lub wymian\u0119?', 'Skontaktuj si\u0119 z zespo\u0142em pomocy technicznej, podaj\u0105c numer zam\u00F3wienia oraz pow\u00F3d zwrotu lub wymiany. Przeka\u017Cemy dalsze instrukcje.']\n    },\n    'pt-BR': {\n      shipping: ['Envio e entrega', 'Os pedidos eleg\u00EDveis nos Estados Unidos s\u00E3o enviados do nosso centro de distribui\u00E7\u00E3o nos EUA com frete econ\u00F4mico gratuito e prazo estimado de 5 a 8 dias \u00FAteis. As modalidades, os pre\u00E7os e os prazos do envio internacional variam conforme o destino e s\u00E3o exibidos ap\u00F3s a inser\u00E7\u00E3o do endere\u00E7o no checkout.'],\n      specs: ['Especifica\u00E7\u00F5es do produto', ['C\u00E2mera grande angular', 'Motor de detec\u00E7\u00E3o de movimento com IA', 'SoC Arm Cortex-A Series', 'KINHANK OS', 'Conex\u00E3o HDMI com a TV (cabo inclu\u00EDdo)', 'Wi-Fi', 'Bluetooth 5.0', 'Slot para cart\u00E3o TF']],\n      policy: ['Qual \u00E9 a pol\u00EDtica de devolu\u00E7\u00E3o?', 'Voc\u00EA pode solicitar uma devolu\u00E7\u00E3o em at\u00E9 30 dias ap\u00F3s o recebimento do pedido. Se o produto n\u00E3o atender \u00E0s suas expectativas, entre em contato conosco dentro desse prazo.'],\n      conditions: ['Quais condi\u00E7\u00F5es devem ser atendidas para uma devolu\u00E7\u00E3o?', 'O produto deve estar em sua condi\u00E7\u00E3o original e incluir todos os acess\u00F3rios, cabos e embalagens. N\u00E3o pode apresentar danos f\u00EDsicos nem sinais de uso indevido, e \u00E9 necess\u00E1rio apresentar o comprovante de compra.'],\n      request: ['Como solicito uma devolu\u00E7\u00E3o ou troca?', 'Entre em contato com nossa equipe de suporte, informando o n\u00FAmero do pedido e o motivo da devolu\u00E7\u00E3o ou troca. Enviaremos as instru\u00E7\u00F5es para concluir o processo.']\n    }\n  };\n\n  const targets = {\n    shipping: ['collapsible_tab_MkP7cn'],\n    specs: ['collapsible_tab_NVzeiD'],\n    policy: ['item_AgDME6', 'item_bCjQff'],\n    conditions: ['item_738jLT', 'item_zUBgUk'],\n    request: ['item_WGKP8M', 'item_AwnRTL']\n  };\n\n  const renderFaq = () => {\n    const locale = document.documentElement.lang || 'en';\n    const copy = translations[locale] || translations[locale.split('-')[0]] || translations.en;\n    Object.entries(targets).forEach(([key, ids]) => {\n      ids.forEach((id) => {\n        const tab = document.querySelector(`[data-block-id=\"collapsible-tab-${id}\"]`);\n        if (!tab || !copy[key]) return;\n        const heading = tab.querySelector('.m-collapsible--button > span:first-child');\n        const content = tab.querySelector('.m-collapsible--content__inner .rte');\n        if (heading) heading.textContent = copy[key][0];\n        if (!content) return;\n        content.innerHTML = '';\n        if (Array.isArray(copy[key][1])) {\n          const list = document.createElement('ul');\n          copy[key][1].forEach((text) => {\n            const item = document.createElement('li');\n            item.textContent = text;\n            list.appendChild(item);\n          });\n          content.appendChild(list);\n        } else {\n          const paragraph = document.createElement('p');\n          paragraph.textContent = copy[key][1];\n          content.appendChild(paragraph);\n        }\n      });\n    });\n  };\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', renderFaq, { once: true });\n  } else {\n    renderFaq();\n  }\n  document.addEventListener('shopify:section:load', renderFaq);\n})();\nclass CountdownTimer {\n  constructor(container, startTime, endTime, options = {}) {\n    this.times = [\"day\", \"hour\", \"min\", \"sec\"];\n    this.selectors = {\n      day: \".countdown-timer-day\",\n      hour: \".countdown-timer-hour\",\n      min: \".countdown-timer-minute\",\n      sec: \".countdown-timer-sec\",\n    };\n    this.DAY_IN_MS = 24 * 60 * 60 * 1000;\n    this.HOUR_IN_MS = 60 * 60 * 1000;\n    this.MIN_IN_MS = 60 * 1000;\n\n    this.container = container;\n    this.startTime = startTime;\n    this.savedStartTime = startTime;\n    this.endTime = endTime;\n    this.options = Object.assign(\n      {},\n      {\n        addZeroPrefix: true,\n        loop: false,\n        callback: () => { },\n      },\n      options\n    );\n\n    this.intervalTime = 1000;\n    this.timer = null;\n    this.domNodes = queryDomNodes(this.selectors, container);\n\n    this.start();\n  }\n\n  start() {\n    this.timer = setInterval(() => {\n      if (this.startTime > this.endTime) this.stop();\n      else this.update();\n    }, this.intervalTime);\n\n    this.container.style.removeProperty(\"opacity\");\n  }\n\n  update() {\n    const timeData = this.format(this.endTime - this.startTime);\n    this.times.forEach((time) => {\n      if (this.domNodes[time]) {\n        this.domNodes[time].textContent = this.addZeroPrefix(timeData[time]);\n      }\n    });\n    this.startTime += this.intervalTime;\n  }\n\n  stop() {\n    clearInterval(this.timer);\n    if (this.options.loop) {\n      this.startTime = this.savedStartTime;\n      this.start();\n    } else {\n      this.timer = null;\n      this.options.callback();\n    }\n  }\n\n  clear() {\n    clearInterval(this.timer);\n    this.timer = null;\n    this.startTime = this.savedStartTime;\n    this.times.forEach((time) => {\n      if (this.domNodes[time]) {\n        this.domNodes[time].textContent = \"00\";\n      }\n    });\n  }\n\n  addZeroPrefix(num) {\n    if (this.options.addZeroPrefix && num < 10) {\n      return `0${num}`;\n    }\n    return num.toString();\n  }\n\n  format(ms) {\n    return {\n      day: Math.floor(ms / this.DAY_IN_MS),\n      hour: Math.floor(ms / this.HOUR_IN_MS) % 24,\n      min: Math.floor(ms / this.MIN_IN_MS) % 60,\n      sec: Math.floor(ms / 1000) % 60,\n    };\n  }\n}\nwindow.MinimogTheme.CountdownTimer = CountdownTimer;\n\nclass Tabs {\n  constructor(container, cb = () => { }) {\n    this.selectors = {\n      tabHeaders: [\".m-tab-header\"],\n      tabContents: [\".m-tab-content\"],\n    };\n    this.activeClass = \"active\";\n    this.currentActiveIndex = -1;\n    this.currentTab = null;\n    this.container = container;\n    this.cb = cb;\n    this.domNodes = queryDomNodes(this.selectors, container);\n    this.customSelect = this.container.querySelector(\"m-select-component\");\n\n    this.init();\n    this.setActiveTab(0);\n  }\n\n  init() {\n    addEventDelegate({\n      context: this.container,\n      selector: this.selectors.tabHeaders[0],\n      handler: (e, tabHeader) => {\n        e.preventDefault();\n        let index;\n        if (tabHeader) {\n          index = Number(tabHeader.dataset.index);\n        }\n        this.setActiveTab(index);\n        this.cb(tabHeader);\n      },\n    });\n  }\n\n  setActiveTab(tabIndex) {\n    const { tabHeaders, tabContents } = this.domNodes;\n\n    if (tabContents.length && tabIndex !== -1 && this.currentActiveIndex !== tabIndex) {\n      let currHeader, newHeader, newTab;\n\n      currHeader = tabHeaders && tabHeaders[this.currentActiveIndex];\n      newHeader = tabHeaders && tabHeaders[tabIndex];\n\n      if (this.customSelect && newHeader) {\n        const tabHeaderStyle = this.customSelect.dataset.tabHeader;\n        tabHeaderStyle === \"select\" && this.customSelect.updateCustomSelectChecked(tabIndex, newHeader.innerHTML);\n        if (MinimogTheme.config.mqlMobile) {\n          this.customSelect.updateCustomSelectChecked(tabIndex, newHeader.innerHTML);\n        }\n        document.addEventListener(\"matchMobile\", () =>\n          this.customSelect.updateCustomSelectChecked(tabIndex, newHeader.innerHTML)\n        );\n      }\n\n      newTab = tabContents && tabContents[tabIndex];\n\n      currHeader && currHeader.classList.remove(this.activeClass);\n      this.currentTab && this.currentTab.classList.remove(this.activeClass);\n\n      newHeader && newHeader.classList.add(this.activeClass);\n      newTab && newTab.classList.add(this.activeClass);\n      setTimeout(() => (newTab.style.opacity = 1));\n\n      this.currentActiveIndex = tabIndex;\n      this.currentTab = newTab;\n    }\n  }\n}\nwindow.MinimogTheme.Tabs = Tabs;\n\n/*\n * Shopify Common JS\n *\n */\nif (typeof window.Shopify == \"undefined\") {\n  window.Shopify = {};\n}\nShopify.bind = function (fn, scope) {\n  return function () {\n    return fn.apply(scope, arguments);\n  };\n};\nShopify.setSelectorByValue = function (selector, value) {\n  for (var i = 0, count = selector.options.length; i < count; i++) {\n    var option = selector.options[i];\n    if (value == option.value || value == option.innerHTML) {\n      selector.selectedIndex = i;\n      return i;\n    }\n  }\n};\n\nShopify.addListener = function (target, eventName, callback) {\n  target.addEventListener\n    ? target.addEventListener(eventName, callback, false)\n    : target.attachEvent(\"on\" + eventName, callback);\n};\n\nShopify.CountryProvinceSelector = function (country_domid, province_domid, options) {\n  this.countryEl = document.getElementById(country_domid);\n  this.provinceEl = document.getElementById(province_domid);\n  this.provinceContainer = document.getElementById(options[\"hideElement\"] || province_domid);\n\n  Shopify.addListener(this.countryEl, \"change\", Shopify.bind(this.countryHandler, this));\n\n  this.initCountry();\n  this.initProvince();\n};\n\nShopify.CountryProvinceSelector.prototype = {\n  initCountry: function () {\n    var value = this.countryEl.getAttribute(\"data-default\");\n    Shopify.setSelectorByValue(this.countryEl, value);\n    this.countryHandler();\n  },\n\n  initProvince: function () {\n    var value = this.provinceEl.getAttribute(\"data-default\");\n    if (value && this.provinceEl.options.length > 0) {\n      Shopify.setSelectorByValue(this.provinceEl, value);\n    }\n  },\n\n  countryHandler: function (e) {\n    var opt = this.countryEl.options[this.countryEl.selectedIndex];\n    var raw = opt.getAttribute(\"data-provinces\");\n    var provinces = JSON.parse(raw);\n\n    this.clearOptions(this.provinceEl);\n    if (provinces && provinces.length == 0) {\n      this.provinceContainer.style.display = \"none\";\n    } else {\n      for (var i = 0; i < provinces.length; i++) {\n        var opt = document.createElement(\"option\");\n        opt.value = provinces[i][0];\n        opt.innerHTML = provinces[i][1];\n        this.provinceEl.appendChild(opt);\n      }\n\n      this.provinceContainer.style.display = \"\";\n    }\n  },\n\n  clearOptions: function (selector) {\n    while (selector.firstChild) {\n      selector.removeChild(selector.firstChild);\n    }\n  },\n\n  setOptions: function (selector, values) {\n    for (var i = 0, count = values.length; i < values.length; i++) {\n      var opt = document.createElement(\"option\");\n      opt.value = values[i];\n      opt.innerHTML = values[i];\n      selector.appendChild(opt);\n    }\n  },\n};\n\nfunction setScrollbarWidth() {\n  document.documentElement.style.setProperty(\n    \"--m-scrollbar-width\",\n    `${window.innerWidth - document.documentElement.clientWidth}px`\n  );\n}\n\nsetScrollbarWidth();\n\nfunction isStorageSupported(type) {\n  // Return false if we are in an iframe without access to sessionStorage\n  if (window.self !== window.top) {\n    return false;\n  }\n\n  const testKey = \"minimog:check\";\n  let storage;\n  if (type === \"session\") {\n    storage = window.sessionStorage;\n  }\n  if (type === \"local\") {\n    storage = window.localStorage;\n  }\n\n  try {\n    storage.setItem(testKey, \"1\");\n    storage.removeItem(testKey);\n    return true;\n  } catch (error) {\n    // Do nothing, this may happen in Safari in incognito mode\n    return false;\n  }\n}\n\nfunction getFocusableElements(container) {\n  return Array.from(\n    container.querySelectorAll(\n      \"summary, a[href], button:enabled, [tabindex]:not([tabindex^='-']), [draggable], area, input:not([type=hidden]):enabled, select:enabled, textarea:enabled, object, iframe\"\n    )\n  );\n}\n\nconst trapFocusHandlers = {};\n\nfunction trapFocus(container, elementToFocus = container) {\n  var elements = getFocusableElements(container);\n  var first = elements[0];\n  var last = elements[elements.length - 1];\n\n  removeTrapFocus();\n\n  trapFocusHandlers.focusin = (event) => {\n    if (event.target !== container && event.target !== last && event.target !== first) return;\n\n    document.addEventListener(\"keydown\", trapFocusHandlers.keydown);\n  };\n\n  trapFocusHandlers.focusout = function () {\n    document.removeEventListener(\"keydown\", trapFocusHandlers.keydown);\n  };\n\n  trapFocusHandlers.keydown = function (event) {\n    if (event.code.toUpperCase() !== \"TAB\") return; // If not TAB key\n    // On the last focusable element and tab forward, focus the first element.\n    if (event.target === last && !event.shiftKey) {\n      event.preventDefault();\n      first.focus();\n    }\n\n    //  On the first focusable element and tab backward, focus the last element.\n    if ((event.target === container || event.target === first) && event.shiftKey) {\n      event.preventDefault();\n      last.focus();\n    }\n  };\n\n  document.addEventListener(\"focusout\", trapFocusHandlers.focusout);\n  document.addEventListener(\"focusin\", trapFocusHandlers.focusin);\n\n  elementToFocus.focus();\n\n  if (\n    elementToFocus.tagName === \"INPUT\" &&\n    [\"search\", \"text\", \"email\", \"url\"].includes(elementToFocus.type) &&\n    elementToFocus.value\n  ) {\n    elementToFocus.setSelectionRange(0, elementToFocus.value.length);\n  }\n}\n\nfunction removeTrapFocus(elementToFocus = null) {\n  document.removeEventListener(\"focusin\", trapFocusHandlers.focusin);\n  document.removeEventListener(\"focusout\", trapFocusHandlers.focusout);\n  document.removeEventListener(\"keydown\", trapFocusHandlers.keydown);\n\n  if (elementToFocus) elementToFocus.focus();\n}\n\nfunction getRequestDefaultConfigs() {\n  return JSON.parse(JSON.stringify(requestDefaultConfigs));\n}\n\nfunction fetchJSON(url, config = getRequestDefaultConfigs()) {\n  return fetch(url, config).then(function (response) {\n    if (!response.ok) {\n      throw response;\n    }\n    return response.json();\n  });\n}\n\nconst cache = new Map();\nfunction fetchCache(url, config = getRequestDefaultConfigs()) {\n  return new Promise((resolve, reject) => {\n    let cached = cache.get(url);\n    if (cached) return resolve(cached);\n    fetch(url, config)\n      .then((res) => {\n        cached = res.text();\n        cache.set(url, cached);\n        resolve(cached);\n      })\n      .catch(reject);\n  });\n}\n\nconst sectionCache = new Map();\nfunction fetchSection(sectionId, options = {}) {\n  const { url: _url, fromCache = false, params = {} } = options;\n\n  return new Promise((resolve, reject) => {\n    const url = new URL(_url || window.location.href);\n    url.searchParams.set(\"section_id\", sectionId);\n    Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, v));\n\n    if (fromCache) {\n      const cached = sectionCache.get(url);\n      if (cached) return resolve(cached);\n    }\n\n    fetch(url, getRequestDefaultConfigs())\n      .then((res) => {\n        if (res.ok) return res.text();\n        reject(`Failed to load section: ${sectionId}`);\n      })\n      .then((html) => {\n        const div = generateDomFromString(html);\n        sectionCache.set(url, div);\n        resolve(div);\n        // const div = <div />\n        // div.innerHTML = html\n        // sectionCache.set(url, div)\n        // resolve(div)\n      })\n      .catch(reject);\n  });\n}\n\nconst cache2 = new Map();\nfunction fetchJsonCache(url, config = requestDefaultConfigs) {\n  return new Promise((resolve, reject) => {\n    if (cache2.get(url)) {\n      return resolve(cache2.get(url));\n    }\n    fetch(url, config)\n      .then((res) => {\n        if (res.ok) {\n          const json = res.json();\n          resolve(json);\n          cache2.set(url, json);\n          return json;\n        } else {\n          reject(res);\n        }\n      })\n      .catch(reject);\n  });\n}\n\nfunction formatMoney(cents, format) {\n  const moneyFormat = \"${{amount}}\";\n  if (typeof cents === \"string\") {\n    cents = cents.replace(\".\", \"\");\n  }\n  let value = \"\";\n  const placeholderRegex = /\\{\\{\\s*(\\w+)\\s*\\}\\}/;\n  const formatString = format || moneyFormat;\n\n  function formatWithDelimiters(number, precision = 2, thousands = \",\", decimal = \".\") {\n    if (isNaN(number) || number == null) {\n      return 0;\n    }\n\n    number = (number / 100.0).toFixed(precision);\n\n    const parts = number.split(\".\");\n    const dollarsAmount = parts[0].replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, `$1${thousands}`);\n    const centsAmount = parts[1] ? decimal + parts[1] : \"\";\n\n    return dollarsAmount + centsAmount;\n  }\n\n  switch (formatString.match(placeholderRegex)[1]) {\n    case \"amount\":\n      value = formatWithDelimiters(cents, 2);\n      break;\n    case \"amount_no_decimals\":\n      value = formatWithDelimiters(cents, 0);\n      break;\n    case \"amount_with_comma_separator\":\n      value = formatWithDelimiters(cents, 2, \".\", \",\");\n      break;\n    case \"amount_no_decimals_with_comma_separator\":\n      value = formatWithDelimiters(cents, 0, \".\", \",\");\n      break;\n  }\n\n  return formatString.replace(placeholderRegex, value);\n}\n\nfunction validateForm(form) {\n  const missingFields = [];\n  if (!form) return missingFields;\n  const fieldSelectors = '[data-product-custom-field] [name][required]:not([hidden]):not([type=\"hidden\"])';\n  const requiredFields = form.querySelectorAll(fieldSelectors);\n  requiredFields.forEach((field) => {\n    field.classList.remove(\"form-control--warning\");\n    if (field.type === \"radio\") {\n      const buttons = form.querySelectorAll(`input[name=\"${field.name}\"]`);\n      const selected = Array.from(buttons).some((btn) => btn.checked);\n      if (!selected) {\n        missingFields.push(field);\n        field.classList.add(\"form-control--warning\");\n      }\n    } else if (!field.value) {\n      missingFields.push(field);\n      field.classList.add(\"form-control--warning\");\n    }\n  });\n  return missingFields;\n}\n\nfunction generateDomFromString(value, tagName = \"div\") {\n  const d = document.createElement(tagName);\n  d.innerHTML = value;\n  return d;\n}\n\nfunction generateDomeFromStringNew(value, selector = \"div\") {\n  const dom = new DOMParser().parseFromString(value, \"text/html\");\n  const newDom = dom.querySelector(selector);\n  return newDom;\n}\n\nfunction fetchCountDown(collectionID) {\n  const appURL = MinimogSettings.foxKitBaseUrl ? `https://${MinimogSettings.foxKitBaseUrl}` : \"\";\n\n  return new Promise((resolve, reject) => {\n    let requestUrl = `${appURL}/api/public/countdown?shop=${window.Shopify.shop}&collectionIds=${collectionID}`;\n\n    fetch(requestUrl)\n      .then((response) => response.json())\n      .then(resolve)\n      .catch(reject);\n  });\n}\n\nfunction loadAssetsNew(files = [], id, callback = () => { }, options = {}) {\n  const unique = id ? id : Math.random().toString(36).slice(2);\n  if (!window.MinimogLibs.loadjs.isDefined(id)) window.MinimogLibs.loadjs(files, unique);\n  window.MinimogLibs.loadjs.ready(unique, callback);\n}\n\nfunction pauseAllMedia(container = document) {\n  container.querySelectorAll(\".js-youtube\").forEach((video) => {\n    video.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"' + \"pauseVideo\" + '\",\"args\":\"\"}', \"*\");\n  });\n  container.querySelectorAll(\".js-vimeo\").forEach((video) => {\n    video.contentWindow.postMessage('{\"method\":\"pause\"}', \"*\");\n  });\n  container.querySelectorAll(\"video\").forEach((video) => video.pause());\n  container.querySelectorAll(\"product-model\").forEach((model) => {\n    if (model.modelViewerUI) model.modelViewerUI.pause();\n  });\n}\n\nfunction loadJS(src, target = document.body, async = false, defer = true) {\n  return new Promise((resolve, reject) => {\n    const doc = target.ownerDocument;\n    const currScript = doc.querySelector(`script[src=\"${src}\"]`);\n    if (currScript) {\n      if (currScript.dataset.loaded) return resolve(true);\n      currScript.addEventListener(\"load\", () => {\n        currScript.dataset.loaded = true;\n        resolve(true);\n      });\n      return;\n    }\n    const script = doc.createElement(\"script\");\n    script.src = src;\n    script.async = async;\n    script.defer = defer;\n    script.addEventListener(\"load\", () => {\n      script.dataset.loaded = true;\n      resolve(true);\n    });\n    script.onerror = reject;\n    target.appendChild(script);\n  });\n}\n\nfunction loadCSS(href, target = document.head) {\n  return new Promise((resolve, reject) => {\n    const doc = target.ownerDocument;\n    const currLink = doc.querySelector(`link[href=\"${href}\"]`);\n    if (currLink) {\n      if (currLink.dataset.loaded) return resolve(true);\n      currLink.addEventListener(\"load\", () => {\n        currLink.dataset.loaded = true;\n        resolve(true);\n      });\n      return;\n    }\n    const link = doc.createElement(\"link\");\n    link.rel = \"stylesheet\";\n    link.href = href;\n    link.addEventListener(\"load\", () => {\n      link.dataset.loaded = true;\n      resolve(true);\n    });\n    link.onerror = reject;\n    target.appendChild(link);\n  });\n}\n\nfunction addEventDelegate({ context = document.documentElement, event = \"click\", selector, handler, capture = false }) {\n  const listener = function (e) {\n    // loop parent nodes from the target to the delegation node\n    for (let target = e.target; target && target !== this; target = target.parentNode) {\n      if (target.matches(selector)) {\n        handler.call(target, e, target);\n        break;\n      }\n    }\n  };\n  context.addEventListener(event, listener, capture);\n  return () => {\n    context.removeEventListener(event, listener, capture);\n  };\n}\n\nfunction debounce(fn, wait) {\n  let t;\n  return (...args) => {\n    clearTimeout(t);\n    t = setTimeout(() => fn.apply(this, args), wait);\n  };\n}\n\nfunction _validateOptionsArray(options) {\n  if (Array.isArray(options) && typeof options[0] === \"object\") {\n    throw new Error(options + \"is not a valid array of options.\");\n  }\n}\n\nfunction _validateProductStructure(product) {\n  if (typeof product !== \"object\") {\n    throw new TypeError(product + \" is not an object.\");\n  }\n\n  if (Object.keys(product).length === 0 && product.constructor === Object) {\n    throw new Error(product + \" is empty.\");\n  }\n}\n\nfunction getVariantFromOptionArray(product, options) {\n  _validateProductStructure(product);\n  _validateOptionsArray(options);\n  var result = product.variants.filter(function (variant) {\n    return options.every(function (option, index) {\n      return variant.options[index] === option;\n    });\n  });\n\n  return result[0] || null;\n}\n\nfunction getSizedImageUrl(src, size) {\n  if (size === null) {\n    return src;\n  }\n\n  if (size === \"master\") {\n    return removeProtocol(src);\n  }\n\n  var match = src.match(/\\.(jpg|jpeg|gif|png|webp|bmp|bitmap|tiff|tif)(\\?v=\\d+)?$/i);\n\n  if (match) {\n    var prefix = src.split(match[0]);\n    var suffix = match[0];\n\n    return removeProtocol(prefix[0] + \"_\" + size + suffix);\n  } else {\n    return null;\n  }\n}\n\nfunction removeProtocol(path) {\n  return path.replace(/http(s)?:/, \"\");\n}\n\nfunction updateParam(key, value) {\n  var { location } = window;\n  var baseUrl = [location.protocol, \"//\", location.host, location.pathname].join(\"\");\n\n  const queryString = window.location.search;\n  const urlParams = new URLSearchParams(queryString);\n\n  if (urlParams.has(key)) {\n    if (value !== \"\" && value !== \"undefined\") {\n      urlParams.set(key, value);\n    }\n    if (value === \"\" || value === \"undefined\") {\n      urlParams.delete(key);\n    }\n  } else {\n    if (value) urlParams.append(key, value);\n  }\n\n  window.history.replaceState({}, \"\", baseUrl + \"?\" + urlParams.toString());\n  return false;\n}\n\nfunction createSearchLink(query) {\n  const searchParams = new URLSearchParams({\n    type: \"product\",\n    [\"options[unavailable_products]\"]: \"last\",\n    [\"options[prefix]\"]: \"last\",\n    q: query,\n  });\n\n  const searchURL = window.MinimogSettings.routes.search_url;\n  return `${searchURL}?${searchParams.toString()}`;\n}\n\nfunction refreshProductReview() {\n  if (typeof SMARTIFYAPPS !== \"undefined\" && SMARTIFYAPPS.rv.installed) {\n    SMARTIFYAPPS.rv.scmReviewsRate.actionCreateReviews();\n  }\n  if (typeof Yotpo !== \"undefined\" && typeof Yotpo.API === \"function\") {\n    const yotpoApi = new Yotpo.API(yotpo);\n    yotpoApi?.refreshWidgets();\n  }\n}\n\n// SetPopularSearchLink\n(function () {\n  const popularSearchItems = document.querySelectorAll(\"[data-ps-item]\");\n  if (popularSearchItems) {\n    popularSearchItems.forEach((itm) => (itm.href = createSearchLink(itm.dataset.psQuery)));\n  }\n})();\n\nfunction queryDomNodes(selectors = {}, context = document) {\n  const domNodes = Object.entries(selectors).reduce((acc, [name, selector]) => {\n    const findOne = typeof selector === \"string\";\n    const queryMethod = findOne ? \"querySelector\" : \"querySelectorAll\";\n    const sl = findOne ? selector : selector[0];\n\n    if (context) {\n      acc[name] = context[queryMethod](sl);\n    }\n    if (!findOne && acc[name]) {\n      acc[name] = [...acc[name]];\n    }\n    return acc;\n  }, {});\n  return domNodes;\n}\n\nfunction saleProgress(settings, productId, soldNumber) {\n  const { total_quantity, sold_to, sold_from } = settings;\n  let soldNumb;\n  // const hour = new Date().getHours()\n  if (soldNumber) {\n    soldNumb = parseInt(soldNumber);\n  } else {\n    const hour = 4;\n    const range = sold_to - sold_from;\n    const timeRatio = hour / 24;\n    const randomRatioById = (Number(productId.split(\"\").pop()) + 1) / 10;\n    let combinedRatio = timeRatio + randomRatioById;\n    if (combinedRatio > 1) combinedRatio -= 1;\n\n    const delta = Math.ceil(combinedRatio * range);\n    soldNumb = sold_from + delta;\n  }\n\n  const availableNumb = total_quantity - soldNumb;\n  const progress = (soldNumb * 100) / total_quantity;\n\n  return `\n    <div class=\"m-product-sale-progress\">\n      <div class=\"m-product-sale-progress__bar\" data-flash-sale>\n        <span data-sale-progress style=\"width: ${progress}%;\" />\n      </div>\n      <div class=\"m-product-sale-progress__text\">\n        <div>\n          <span>${MinimogStrings.sold}: </span>\n          <strong data-sale-number>${soldNumb || 0}</strong>\n        </div>\n        <div>\n          <span>${MinimogStrings.available}: </span>\n          <strong data-available-number>${availableNumb || 0}</strong>\n        </div>\n      </div>\n    </div>\n  `;\n}\n\nfunction spinner(className = \"\") {\n  return `<svg class=\"animate-spin m:hidden m-svg-icon--medium ${className}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n    <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n    <path fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n  </svg>`;\n}\n\nfunction fetchConfig(type = \"json\") {\n  return {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\", Accept: `application/${type}` },\n  };\n}\n\nfunction setCookie(cname, cvalue, exdays) {\n  var d = new Date();\n  d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);\n  var expires = \"expires=\" + d.toUTCString();\n  document.cookie = cname + \"=\" + cvalue + \";\" + expires + \";path=/\";\n}\n\nfunction getCookie(cname) {\n  var name = cname + \"=\";\n  var decodedCookie = decodeURIComponent(document.cookie);\n  var ca = decodedCookie.split(\";\");\n  for (var i = 0; i < ca.length; i++) {\n    var c = ca[i];\n    while (c.charAt(0) === \" \") {\n      c = c.substring(1);\n    }\n    if (c.indexOf(name) === 0) {\n      return c.substring(name.length, c.length);\n    }\n  }\n  return \"\";\n}\n\nfunction formatUrl(pageType, handle, query) {\n  let url;\n  const { routes } = MinimogSettings;\n  const root = routes.root.endsWith(\"/\") ? \"\" : routes.root;\n  url = `${root}/${pageType}/${handle}`;\n  if (query) url += `?${query}`;\n  return url;\n}\nclass DeferredMedia extends HTMLElement {\n  constructor() {\n    super();\n    const poster = this.querySelector('[id*=\"Deferred-Poster-\"]');\n    if (!poster) return;\n    poster.addEventListener(\"click\", this.loadContent.bind(this));\n  }\n\n  loadContent(focus = true) {\n    if (!this.getAttribute(\"loaded\")) {\n      const content = document.createElement(\"div\");\n      content.appendChild(this.querySelector(\"template\").content.firstElementChild.cloneNode(true));\n\n      this.setAttribute(\"loaded\", true);\n      const deferredElement = this.appendChild(content.querySelector(\"video, model-viewer, iframe\"));\n      this.deferredElement = deferredElement;\n\n      if (focus) deferredElement.focus();\n      this.playVideo(deferredElement);\n    }\n  }\n\n  playVideo(videoElm) {\n    if (this.autoPlay) return;\n\n    if (videoElm.classList.contains(\"js-youtube\")) {\n      const symbol = videoElm.src.indexOf(\"?\") > -1 ? \"&\" : \"?\";\n      videoElm.src += symbol + \"autoplay=1&mute=1\";\n    } else if (videoElm.classList.contains(\"js-vimeo\")) {\n      const symbol = videoElm.src.indexOf(\"?\") > -1 ? \"&\" : \"?\";\n      videoElm.src += symbol + \"autoplay=1&muted=1\";\n    } else {\n      videoElm && videoElm.setAttribute(\"autoplay\", \"autoplay\");\n      videoElm && videoElm.play();\n    }\n  }\n}\ncustomElements.define(\"deferred-media\", DeferredMedia);\nclass ResponsiveImage extends HTMLElement {\n  get intersecting() {\n    return this.hasAttribute(\"intersecting\");\n  }\n  constructor() {\n    super();\n    this.img = this.querySelector(\"img\");\n    this.src = this.img.src;\n    this.observerCallback = this.observerCallback.bind(this);\n    if (this.img) {\n      this.loadImage = this.loadImage.bind(this);\n      this.img.onload = this.onLoad.bind(this);\n    }\n    if (this.img.complete) {\n      this.onLoad();\n    }\n  }\n  connectedCallback() {\n    // this.img.src = \"\";\n    if (\"IntersectionObserver\" in window) {\n      this.initIntersectionObserver();\n    } else {\n      this.loadImage();\n    }\n  }\n  disconnectedCallback() {\n    this.disconnectObserver();\n  }\n  loadImage() {\n    this.setAttribute(\"intersecting\", \"true\");\n    if (this.img) {\n      this.img.src = this.src;\n      this.img.width = this.clientWidth;\n      this.img.height = this.clientHeight;\n      this.img.sizes = this.clientWidth + \"px\";\n    }\n    window.MinimogEvents.emit(`m:image-loaded`, this.imageLoaded, this);\n  }\n  onLoad() {\n    this.removeAttribute(\"\");\n    this.classList.add(\"m-image-loaded\");\n  }\n  observerCallback(entries, observer) {\n    if (!entries[0].isIntersecting) return;\n    observer.unobserve(this);\n    this.loadImage();\n  }\n  initIntersectionObserver() {\n    if (this.observer) return;\n    const rootMargin = \"10px\";\n    this.observer = new IntersectionObserver(this.observerCallback, { rootMargin });\n    this.observer.observe(this);\n  }\n  disconnectObserver() {\n    if (!this.observer) return;\n    this.observer.disconnect();\n    this.observer = null;\n    delete this.observer;\n  }\n}\ncustomElements.define(\"responsive-image\", ResponsiveImage);\n\nclass ProductRecommendations extends HTMLElement {\n  constructor() {\n    super();\n\n    this.selectors = {\n      gridContainer: \".m-product-list\",\n      swiperWrapper: \".swiper-wrapper\",\n      slideControls: \".m-slider-controls\",\n    };\n\n    this.enableSlider = this.dataset.enableSlider === \"true\";\n    this.useScrollMobile = this.dataset.useScrollMobile === \"true\";\n    this.itemsPerPage = this.dataset.itemsPerPage;\n    this.paginationType = this.dataset.paginationType;\n  }\n\n  connectedCallback() {\n    const handleIntersection = (entries, observer) => {\n      if (!entries[0].isIntersecting) return;\n      observer.unobserve(this);\n      fetch(this.dataset.url)\n        .then((response) => response.text())\n        .then((text) => {\n          const html = generateDomFromString(text);\n          const recommendations = html.querySelector(\"product-recommendations\");\n          if (recommendations && recommendations.innerHTML.trim().length) {\n            this.innerHTML = recommendations.innerHTML;\n            this.totalProducts = recommendations.querySelectorAll(\".m-product-card\").length;\n\n            this.initByScreenSize();\n            document.addEventListener(\"matchMobile\", () => {\n              this.initByScreenSize();\n            });\n            document.addEventListener(\"unmatchMobile\", () => {\n              this.initByScreenSize();\n            });\n          }\n        })\n        .catch((e) => {\n          console.error(e);\n        });\n    };\n    if (\"IntersectionObserver\" in window) {\n      new IntersectionObserver(handleIntersection.bind(this), { rootMargin: \"0px 0px 400px 0px\" }).observe(this);\n    }\n  }\n\n  initByScreenSize() {\n    const { gridContainer, slideControls } = queryDomNodes(this.selectors, this);\n\n    if (MinimogTheme.config.mqlMobile) {\n      this.initSlider();\n      if (!this.useScrollMobile) return;\n      gridContainer && gridContainer.classList.remove(\"swiper-container\");\n      slideControls && slideControls.classList.add(\"m:hidden\");\n      if (this.swiper) this.swiper.destroy(false, true);\n      gridContainer && gridContainer.parentNode.classList.add(\"m-mixed-layout--mobile-scroll\");\n    } else {\n      gridContainer && gridContainer.classList.add(\"swiper-container\");\n      gridContainer && gridContainer.parentNode.classList.remove(\"m-mixed-layout--mobile-scroll\");\n      slideControls && slideControls.classList.remove(\"m:hidden\");\n      this.initSlider();\n    }\n  }\n\n  initSlider() {\n    let __this = this;\n    const { gridContainer, slideControls } = queryDomNodes(this.selectors, this);\n    if (this.enableSlider && this.totalProducts > this.itemsPerPage) {\n      this.slider = new MinimogLibs.Swiper(gridContainer, {\n        slidesPerView: this.itemsPerPage >= 2 ? 2 : 1,\n        loop: true,\n        autoplay: false,\n        pagination: {\n          el: this.querySelector(\".swiper-pagination\"),\n          clickable: true,\n          type: this.paginationType,\n        },\n        threshold: 2,\n        breakpoints: {\n          1280: {\n            slidesPerView: this.itemsPerPage,\n          },\n        },\n        on: {\n          init: function () {\n            this.slideToLoop(this.lastActive);\n            setTimeout(() => {\n              // Calculate controls position\n              const firstItem = __this.querySelector(\".m-image\") || __this.querySelector(\".m-placeholder-svg\");\n              const prevButton = slideControls && slideControls.querySelector(\".m-slider-controls__button-prev\");\n              const nextButton = slideControls && slideControls.querySelector(\".m-slider-controls__button-next\");\n              if (firstItem && slideControls) {\n                const itemHeight = firstItem.clientHeight;\n                slideControls.style.setProperty(\"--offset-top\", parseInt(itemHeight) / 2 + \"px\");\n\n                prevButton.classList.remove(\"m:hidden\");\n                nextButton.classList.remove(\"m:hidden\");\n              }\n            }, 200);\n          },\n        },\n      });\n\n      if (this.slider) {\n        slideControls && slideControls.classList.remove(\"m:hidden\");\n        const prevBtn = this.querySelector(\".m-slider-controls__button-prev\");\n        const nextBtn = this.querySelector(\".m-slider-controls__button-next\");\n        prevBtn && prevBtn.addEventListener(\"click\", () => this.slider.slidePrev());\n        nextBtn && nextBtn.addEventListener(\"click\", () => this.slider.slideNext());\n      }\n\n      this.swiper = gridContainer?.swiper;\n    } else {\n      const innerContainer = gridContainer.querySelector(\".m-mixed-layout__inner\");\n      innerContainer && innerContainer.classList.remove(\"swiper-wrapper\");\n      slideControls && slideControls.classList.add(\"m:hidden\");\n      gridContainer && gridContainer.classList.remove(\"swiper-container\");\n    }\n  }\n}\ncustomElements.define(\"product-recommendations\", ProductRecommendations);\n\nif (!customElements.get(\"video-component\")) {\n  customElements.define(\n    \"video-component\",\n    class VideoComponent extends HTMLElement {\n      constructor() {\n        super();\n        MinimogTheme.initWhenVisible({\n          element: this,\n          callback: this.init.bind(this),\n          threshold: 0,\n        });\n      }\n\n      init() {\n        this.autoPlay = this.dataset.autoPlay === \"true\";\n        this.muted = this.dataset.muted === \"true\";\n        const poster = this.querySelector('[id^=\"Video-Deferred-Poster-\"]');\n        if (this.autoPlay) {\n          this.loadContent();\n        } else {\n          poster && poster.addEventListener(\"click\", this.loadContent.bind(this));\n        }\n      }\n\n      loadContent() {\n        if (!this.getAttribute(\"loaded\")) {\n          const content = document.createElement(\"div\");\n          content.appendChild(this.querySelector(\"template\").content.firstElementChild.cloneNode(true));\n\n          this.setAttribute(\"loaded\", true);\n          const deferredElement = this.appendChild(content.querySelector(\"video, model-viewer, iframe\"));\n          this.deferredElement = deferredElement;\n\n          if (this.autoPlay) return;\n\n          if (this.deferredElement.classList.contains(\"js-youtube\")) {\n            const symbol = this.deferredElement.src.indexOf(\"?\") > -1 ? \"&\" : \"?\";\n            this.deferredElement.src += symbol + `autoplay=1${this.muted ? \"&mute=1\" : \"\"}`;\n          } else if (this.deferredElement.classList.contains(\"js-vimeo\")) {\n            const symbol = this.deferredElement.src.indexOf(\"?\") > -1 ? \"&\" : \"?\";\n            this.deferredElement.src += symbol + `autoplay=1${this.muted ? \"&mute=1\" : \"\"}`;\n          } else {\n            this.deferredElement.play();\n          }\n        }\n      }\n    }\n  );\n}\n\nif (!customElements.get(\"collapsible-tab\")) {\n  class CollapsibleTab extends HTMLElement {\n    constructor() {\n      super();\n    }\n\n    connectedCallback() {\n      this.parentEl = this.closest(\"[data-section-id]\");\n      this.init();\n    }\n\n    disconnectedCallback() {\n      this.destroy();\n    }\n\n    init() {\n      const destroy = this.dataset.destroy === \"true\";\n      if (destroy) return;\n\n      this.setDefaultData();\n      this.attachEvents();\n\n      if (this.getAttribute(\"open\") === \"true\") {\n        this.selected = true;\n        this.classList.add(this.expandedClass);\n        this.setExpandedAria();\n        this.fire(\"tabOpened\");\n        window.MinimogEvents.emit(`ON_COLLAPSIBLE_TAB_OPENED`, this);\n      } else {\n        this.content.style.height = this.collapsedHeight;\n        this.classList.add(this.collapsedClass);\n        this.setCollapsedAria();\n      }\n      this.content.removeAttribute(\"hidden\");\n    }\n\n    transitionendEventName() {\n      let i,\n        el = document.createElement(\"div\"),\n        transitions = {\n          transition: \"transitionend\",\n          OTransition: \"otransitionend\",\n          MozTransition: \"transitionend\",\n          WebkitTransition: \"webkitTransitionEnd\",\n        };\n\n      for (i in transitions) {\n        if (transitions.hasOwnProperty(i) && el.style[i] !== undefined) {\n          return transitions[i];\n        }\n      }\n    }\n\n    expand() {\n      const resetHeight = (ev) => {\n        if (ev.target !== this.content) return;\n        this.content.removeEventListener(this.transitionendevent, bindEvent);\n\n        if (!this.isOpen) return;\n\n        requestAnimationFrame(() => {\n          this.content.style.transition = \"0\";\n          this.content.style.height = \"auto\";\n\n          requestAnimationFrame(() => {\n            this.content.style.height = null;\n            this.content.style.transition = null;\n\n            this.setExpandedAria();\n            this.classList.add(this.expandedClass);\n            this.trySetTabIndex(this.content, 0);\n\n            this.fire(\"tabOpened\");\n            window.MinimogEvents.emit(`ON_COLLAPSIBLE_TAB_OPENED`, this);\n          });\n        });\n      };\n\n      const bindEvent = resetHeight.bind(this);\n      this.content.addEventListener(this.transitionendevent, bindEvent);\n\n      this.isOpen = true;\n      this.classList.remove(this.collapsedClass);\n      this.content.style.height = this.content.scrollHeight + \"px\";\n    }\n\n    collapse() {\n      const endTransition = (ev) => {\n        if (ev.target !== this.content) return;\n        this.content.removeEventListener(this.transitionendevent, bindEvent);\n\n        if (this.isOpen) return;\n\n        this.fire(\"elementClosed\");\n        window.MinimogEvents.emit(`ON_COLLAPSIBLE_TAB_CLOSED`, this);\n        this.setCollapsedAria();\n        this.classList.add(this.collapsedClass);\n        this.trySetTabIndex(this.content, -1);\n      };\n\n      const bindEvent = endTransition.bind(this);\n      this.content.addEventListener(this.transitionendevent, bindEvent);\n\n      this.isOpen = false;\n      this.classList.remove(this.expandedClass);\n\n      requestAnimationFrame(() => {\n        this.content.style.transition = \"0\";\n        this.content.style.height = this.content.scrollHeight + \"px\";\n\n        requestAnimationFrame(() => {\n          this.content.style.transition = null;\n          this.content.style.height = this.collapsedHeight;\n        });\n      });\n    }\n\n    open() {\n      this.selected = true;\n      this.fire(\"elementSelected\");\n      window.MinimogEvents.emit(`ON_COLLAPSIBLE_TAB_SELECTED`, this);\n      this.expand();\n      this.setAttribute(\"open\", true);\n    }\n\n    close() {\n      this.selected = false;\n      this.fire(\"elementUnselected\");\n      window.MinimogEvents.emit(`ON_COLLAPSIBLE_TAB_UNSELECTED`, this);\n      this.collapse();\n      this.removeAttribute(\"open\");\n    }\n\n    toggle(event) {\n      if (event) {\n        event.preventDefault();\n      }\n      if (this.selected) {\n        this.close();\n      } else {\n        this.open();\n\n        if (this.oneAtATime) {\n          const allItems = this.parentEl.querySelectorAll(\"collapsible-tab\");\n          const parent = this.closest(\"[data-first-level]\");\n          if (allItems.length) {\n            allItems.forEach((item) => {\n              if (item !== this && item.selected && parent !== item) {\n                item.close();\n              }\n            });\n          }\n        }\n      }\n    }\n\n    trySetTabIndex(el, index) {\n      const tappableElements = el.querySelectorAll(this.defaultElements);\n      if (tappableElements) {\n        tappableElements.forEach((e) => {\n          e.setAttribute(\"tabindex\", index);\n        });\n      }\n    }\n\n    setExpandedAria() {\n      this.trigger.setAttribute(\"aria-expanded\", \"true\");\n      this.content.setAttribute(\"aria-hidden\", \"false\");\n    }\n\n    setCollapsedAria(el) {\n      this.trigger.setAttribute(\"aria-expanded\", \"false\");\n      this.content.setAttribute(\"aria-hidden\", \"true\");\n    }\n\n    attachEvents() {\n      this.trigger.addEventListener(\"click\", (event) => this.toggle(event));\n    }\n\n    setDefaultData() {\n      this.events = {\n        elementSelected: [],\n        tabOpened: [],\n        elementUnselected: [],\n        elementClosed: [],\n      };\n      this.transitionendevent = this.transitionendEventName();\n      this.expandedClass = \"is-expanded\";\n      this.collapsedClass = \"is-collapsed\";\n      this.trigger = this.querySelector(\"[data-trigger]\");\n      this.content = this.querySelector(\"[data-content]\");\n      this.collapsedHeight = \"0px\";\n      this.defaultElements = [\"a\", \"button\", \"input:not(.focus-none)\", \"[data-trigger]\"];\n      this.oneAtATime = true;\n      if (this.dataset.oneOpen) {\n        this.oneAtATime = this.dataset.oneOpen === \"true\";\n      }\n    }\n\n    fire(eventName) {\n      let callbacks = this.events[eventName];\n      if (callbacks) {\n        for (let i = 0; i < callbacks.length; i++) {\n          callbacks[i](this);\n        }\n      }\n    }\n\n    on(eventName, cb) {\n      if (!this.events[eventName]) return;\n      this.events[eventName].push(cb);\n    }\n\n    destroy() {\n      this.trigger.removeEventListener(\"click\", (event) => this.toggle(event));\n      this.content.removeAttribute(\"aria-hidden\");\n      this.content.style.height = \"auto\";\n      this.classList.remove(this.expandedClass, this.collapsedClass);\n      this.removeAttribute(\"open\");\n    }\n  }\n\n  customElements.define(\"collapsible-tab\", CollapsibleTab);\n}\n\nif (!customElements.get(\"product-form\")) {\n  customElements.define(\n    \"product-form\",\n    class ProductForm extends HTMLElement {\n      constructor() {\n        super();\n        this.selectors = {\n          form: \"form\",\n          inputId: \"[name=id]\",\n          submitButton: '[name=\"add\"]',\n          errorWrapper: \".m-product-form-message\",\n          customFields: [\"[data-product-custom-field]\"],\n          dynamicCheckout: \".m-product-dynamic-checkout\",\n        };\n      }\n      connectedCallback() {\n        this.domNodes = queryDomNodes(this.selectors, this);\n        this.form = this.domNodes.form;\n        this.productInfo = this.closest(\".m-main-product--info\");\n        this.submitButton = this.domNodes.submitButton;\n        this.domNodes.inputId.disabled = false;\n        this.cart = document.querySelector(\"m-cart-drawer\");\n        this.cartPage = document.querySelector(\"m-cart\");\n        this.customFields = document.querySelectorAll(this.selectors.customFields);\n        if (this.domNodes.dynamicCheckout) this.enable_dynamic_checkout = true;\n        this.form.addEventListener(\"submit\", this.onSubmitHandler.bind(this));\n        if (this.domNodes.dynamicCheckout && this.customFields) {\n          this.domNodes.dynamicCheckout.addEventListener(\n            \"click\",\n            (e) => {\n              const missing = validateForm(this.form.closest(\".m-main-product--info\"));\n              if (missing && missing.length > 0) {\n                e.stopPropagation();\n                window.MinimogTheme.Notification.show({\n                  target: this.domNodes.errorWrapper,\n                  method: \"appendChild\",\n                  type: \"warning\",\n                  message: window.MinimogStrings.requiredField,\n                  delay: 100,\n                });\n                console.warn(\"Missing field(s): \", missing);\n              }\n            },\n            true\n          );\n        }\n      }\n      toggleSpinner(show) {\n        const method = show ? \"add\" : \"remove\";\n        this.classList[method](\"m-spinner-loading\");\n      }\n      getFormData() {\n        const formData = new FormData(this.form);\n        if (this.closest('sticky-atc')) {\n          const form = document.querySelector('.m-main-product--info .m-product-form--main form');\n          const extraFormData = new FormData(form);\n\n          for (const [key, value] of extraFormData.entries()) {\n            if (!formData.has(key)) {\n              formData.set(key, value);\n            }\n          }\n        }\n\n        return formData;\n      }\n\n      onSubmitHandler(evt) {\n        evt.preventDefault();\n        this.toggleSpinner(true);\n        const missing = validateForm(this.form.closest(\".m-main-product--info\"));\n\n        if (missing && missing.length > 0) {\n          console.warn(\"Missing field(s): \", missing);\n          this.toggleSpinner(false);\n          return window.MinimogTheme.Notification.show({\n            target: this.domNodes.errorWrapper,\n            method: \"appendChild\",\n            type: \"warning\",\n            message: window.MinimogStrings.requiredField,\n          });\n        }\n\n        let sectionsToBundle = [];\n        document.documentElement.dispatchEvent(\n          new CustomEvent('cart:grouped-sections', { bubbles: true, detail: { sections: sectionsToBundle } })\n        );\n        if (document.querySelector('m-cart-drawer')) sectionsToBundle.push('cart-drawer');\n        if (document.querySelector('m-cart')) sectionsToBundle.push('cart-template');\n        sectionsToBundle.push('cart-count');\n        sectionsToBundle = [...new Set(sectionsToBundle)];\n\n        const config = fetchConfig(\"javascript\");\n        config.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n        delete config.headers[\"Content-Type\"];\n\n        const formData = this.getFormData();\n        formData.append(\"sections\", sectionsToBundle);\n        formData.append(\"sections_url\", window.location.pathname);\n\n        config.body = formData;\n\n        const { MinimogSettings, MinimogStrings } = window;\n        fetch(`${MinimogSettings.routes.cart_add_url}`, config)\n          .then((response) => response.json())\n          .then((response) => {\n            // Handle Error\n            if (response.status) {\n              window.MinimogEvents.emit(MinimogTheme.pubSubEvents.cartError, {\n                source: \"product-form\",\n                productVariantId: formData.get(\"id\"),\n                errors: response.error || response.description,\n                message: response.message,\n              });\n              document.dispatchEvent(\n                new CustomEvent(\"product-ajax:error\", {\n                  detail: {\n                    errorMessage: response.error || response.description,\n                  },\n                })\n              );\n              this.error = true;\n              const variantId = formData.get(\"id\");\n              if (variantId === \"\" || variantId === null) {\n                this.handleErrorMessageVariantPicker();\n                return window.MinimogTheme.Notification.show({\n                  target: this.domNodes.errorWrapper ? this.domNodes.errorWrapper : document.body,\n                  method: \"appendChild\",\n                  type: \"error\",\n                  message: MinimogStrings.selectVariant,\n                  last: 3000,\n                  sticky: !this.domNodes.errorWrapper,\n                });\n              } else {\n                return window.MinimogTheme.Notification.show({\n                  target: this.domNodes.errorWrapper ? this.domNodes.errorWrapper : document.body,\n                  method: \"appendChild\",\n                  type: \"error\",\n                  message: response.message,\n                  last: 3000,\n                  sticky: !this.domNodes.errorWrapper,\n                });\n              }\n            }\n\n            if (MinimogSettings.use_ajax_atc) {\n              // Handle Ajax ATC\n              if (this.cart && MinimogSettings.enable_cart_drawer) {\n                MinimogTheme.Notification.show({\n                  target: this.cart.querySelector(\"m-cart-items\"),\n                  method: \"prepend\",\n                  type: \"success\",\n                  message: MinimogStrings.itemAdded,\n                  delay: 400,\n                });\n                // Open cart drawer\n                this.cart.open();\n              } else {\n                window.MinimogTheme.Notification.show({\n                  target: this.domNodes.errorWrapper ? this.domNodes.errorWrapper : document.body,\n                  method: \"appendChild\",\n                  type: \"success\",\n                  message: MinimogStrings.itemAdded,\n                  last: 3000,\n                  sticky: !this.domNodes.errorWrapper,\n                });\n              }\n\n              window.MinimogEvents.emit(MinimogTheme.pubSubEvents.cartUpdate, { cart: response, productVariantId: formData.get('id') });\n\n              // dispatch product added event\n              document.dispatchEvent(\n                new CustomEvent(\"product-ajax:added\", {\n                  detail: {\n                    product: response,\n                  },\n                })\n              );\n\n              this.error = false;\n\n            } else {\n              window.location = MinimogSettings.routes.cart;\n            }\n          })\n          .catch((e) => {\n            console.error(e);\n          })\n          .finally(() => {\n            this.toggleSpinner(false);\n          });\n      }\n      handleErrorMessageVariantPicker() {\n        const variantPicker = this.productInfo && this.productInfo.querySelector(\"variant-picker\");\n        const options = variantPicker && variantPicker.querySelectorAll(\"[data-selected-value]\");\n\n        options &&\n          options.forEach((option) => {\n            const value = option.dataset.selectedValue;\n            if (value === \"\") {\n              option.classList.add(\"m-product-option--unselect\");\n              setTimeout(() => {\n                option.classList.remove(\"m-product-option--unselect\");\n              }, 3000);\n            }\n          });\n      }\n\n      get variantIdInput() {\n        return this.form.querySelector('[name=id]');\n      }\n    }\n  );\n}\n\nif (!customElements.get(\"m-video-component\")) {\n  class VideoComponent extends HTMLElement {\n    constructor() {\n      super();\n      this.background = this.dataset.initMode !== \"template\";\n      if (this.background) {\n        MinimogTheme.initWhenVisible({\n          element: this,\n          callback: this.init.bind(this),\n          threshold: 0,\n        });\n      } else {\n        this.init();\n      }\n    }\n\n    init() {\n      this.parentSelector = this.dataset.parent || \".m-hero__bg\";\n      this.parent = this.closest(this.parentSelector);\n\n      switch (this.dataset.type) {\n        case \"youtube\":\n          this.initYoutubeVideo();\n          break;\n\n        case \"vimeo\":\n          this.initVimeoVideo();\n          break;\n\n        case \"mp4\":\n          this.initMp4Video();\n          break;\n      }\n    }\n\n    initYoutubeVideo() {\n      this.setAsLoading();\n      this.loadScript(\"youtube\").then(this.setupYoutubePlayer.bind(this));\n    }\n\n    initVimeoVideo() {\n      this.setAsLoading();\n      this.loadScript(\"vimeo\").then(this.setupVimeoPlayer.bind(this));\n    }\n\n    initMp4Video() {\n      const player = this.querySelector(\"video\");\n\n      if (player) {\n        const promise = player.play();\n\n        // Edge does not return a promise (video still plays)\n        if (typeof promise !== \"undefined\") {\n          promise\n            .then(function () {\n              // playback normal\n            })\n            .catch(function () {\n              player.setAttribute(\"controls\", \"\");\n            });\n        }\n      }\n    }\n\n    loadScript(videoType) {\n      return new Promise((resolve, reject) => {\n        const script = document.createElement(\"script\");\n        document.body.appendChild(script);\n        script.onload = resolve;\n        script.onerror = reject;\n        script.async = true;\n        script.src = videoType === \"youtube\" ? \"//www.youtube.com/iframe_api\" : \"//player.vimeo.com/api/player.js\";\n      });\n    }\n\n    setAsLoading() {\n      this.parent.setAttribute(\"loading\", true);\n    }\n\n    setAsLoaded() {\n      this.parent.removeAttribute(\"loading\");\n      this.parent.setAttribute(\"loaded\", true);\n    }\n\n    setupYoutubePlayer() {\n      const videoId = this.dataset.videoId;\n      const playerInterval = setInterval(() => {\n        if (window.YT) {\n          window.YT.ready(() => {\n            const element = document.createElement(\"div\");\n            this.appendChild(element);\n\n            this.player = new YT.Player(element, {\n              videoId: videoId,\n              playerVars: {\n                showinfo: 0,\n                controls: false,\n                fs: 0,\n                rel: 0,\n                height: \"100%\",\n                width: \"100%\",\n                iv_load_policy: 3,\n                html5: 1,\n                loop: 1,\n                playsinline: 1,\n                modestbranding: 1,\n                disablekb: 1,\n              },\n              events: {\n                onReady: this.onYoutubeReady.bind(this),\n                onStateChange: this.onYoutubeStateChange.bind(this),\n              },\n            });\n            clearInterval(playerInterval);\n          });\n        }\n      }, 50);\n    }\n\n    onYoutubeReady() {\n      this.iframe = this.querySelector(\"iframe\"); // iframe once YT loads\n      this.iframe.setAttribute(\"tabindex\", \"-1\");\n      if (typeof this.player.mute === \"function\") this.player.mute();\n      if (typeof this.player.playVideo === \"function\") this.player.playVideo();\n\n      this.setAsLoaded();\n\n      // pause when out of view\n      if (\"IntersectionObserver\" in window) {\n        const observer = new IntersectionObserver(\n          (entries, _observer) => {\n            entries.forEach((entry) => {\n              if (entry.isIntersecting) {\n                this.youtubePlay();\n              } else {\n                this.youtubePause();\n              }\n            });\n          },\n          { rootMargin: \"0px 0px 50px 0px\" }\n        );\n\n        observer.observe(this.iframe);\n      }\n    }\n\n    onYoutubeStateChange(event) {\n      switch (event.data) {\n        case -1: // unstarted\n          // Handle low power state on iOS by checking if\n          // video is reset to unplayed after attempting to buffer\n          if (this.attemptedToPlay) {\n            this.setAsLoaded();\n            // this.closest('.banner').classList.add('video-interactable');\n          }\n          break;\n        case 0: // ended, loop it\n          this.youtubePlay();\n          break;\n        case 1: // playing\n          this.setAsLoaded();\n          break;\n        case 3: // buffering\n          this.attemptedToPlay = true;\n          break;\n      }\n    }\n\n    youtubePlay() {\n      if (this.player && typeof this.player.playVideo === \"function\") {\n        this.player.playVideo();\n      }\n    }\n\n    youtubePause() {\n      if (this.player && typeof this.player.pauseVideo === \"function\") {\n        this.player.pauseVideo();\n      }\n    }\n\n    setupVimeoPlayer() {\n      const videoId = this.dataset.videoId;\n\n      const playerInterval = setInterval(() => {\n        if (window.Vimeo) {\n          this.player = new Vimeo.Player(this, {\n            id: videoId,\n            autoplay: true,\n            autopause: false,\n            background: false,\n            controls: false,\n            loop: true,\n            height: \"100%\",\n            width: \"100%\",\n          });\n          this.player.ready().then(this.onVimeoReady.bind(this));\n          clearInterval(playerInterval);\n        }\n      }, 50);\n    }\n\n    onVimeoReady() {\n      this.iframe = this.querySelector(\"iframe\");\n      this.iframe.setAttribute(\"tabindex\", \"-1\");\n\n      this.player.setMuted(true);\n\n      this.setAsLoaded();\n\n      // pause when out of view\n      const observer = new IntersectionObserver(\n        (entries, _observer) => {\n          entries.forEach((entry) => {\n            if (entry.isIntersecting) {\n              this.vimeoPlay();\n            } else {\n              this.vimeoPause();\n            }\n          });\n        },\n        { rootMargin: \"0px 0px 50px 0px\" }\n      );\n\n      observer.observe(this.iframe);\n    }\n\n    vimeoPlay() {\n      if (this.player && typeof this.player.play === \"function\") {\n        this.player.play();\n      }\n    }\n\n    vimeoPause() {\n      if (this.player && typeof this.player.pause === \"function\") {\n        this.player.pause();\n      }\n    }\n  }\n  customElements.define(\"m-video-component\", VideoComponent);\n}\n\nif (!customElements.get(\"m-search-popup\")) {\n  class MSearchPopup extends HTMLElement {\n    constructor() {\n      super();\n\n      this.selectors = {\n        container: \"[data-search-container]\",\n        form: \"form\",\n        input: \"[data-search-input]\",\n        submit: 'button[type=\"submit\"]',\n        loading: \"[data-spinner]\",\n        close: \"[data-close-search]\",\n      };\n\n      const searchPopup = document.querySelector(\"[data-search-popup]\");\n      if (!searchPopup) return;\n\n      this.domNodes = queryDomNodes(this.selectors, searchPopup);\n      this.domNodes.searchPopup = searchPopup;\n      document.body.appendChild(searchPopup);\n      addEventDelegate({\n        selector: \"[data-open-search-popup]\",\n        handler: () => this.openSearchPopup(),\n      });\n\n      const { input, submit, close, form } = this.domNodes;\n      if (input) {\n        input.addEventListener(\"keydown\", (e) => {\n          // ESC\n          if (e.keyCode === 27) {\n            this.closeSearchPopup();\n          }\n        });\n      }\n      submit.addEventListener(\"click\", (e) => {\n        e.preventDefault();\n        if (input.value) {\n          form.submit();\n        }\n      });\n      close.addEventListener(\"click\", (e) => {\n        this.closeSearchPopup();\n        MinimogEvents.emit(MinimogTheme.pubSubEvents.closeSearchPopup);\n      });\n      searchPopup.addEventListener(\"click\", (e) => {\n        if (e.target === searchPopup) {\n          this.closeSearchPopup();\n        }\n      });\n\n      MinimogEvents.subscribe(MinimogTheme.pubSubEvents.openCartDrawer, () => {\n        if (this.hasAttribute(\"open\")) this.closeSearchPopup();\n      });\n    }\n\n    openSearchPopup() {\n      const { searchPopup, input, container } = this.domNodes;\n      searchPopup.style.removeProperty(\"visibility\");\n      searchPopup.style.setProperty(\"opacity\", \"1\");\n      container.classList.add(\"m-show-search\");\n      this.setAttribute(\"open\", true);\n      setTimeout(() => {\n        container.style.removeProperty(\"--m-durations\");\n        input.focus();\n      }, 350);\n      document.documentElement.classList.add(\"prevent-scroll\");\n      MinimogEvents.emit(MinimogTheme.pubSubEvents.openSearchPopup, this);\n    }\n\n    closeSearchPopup() {\n      const { searchPopup, container } = this.domNodes;\n      container.classList.remove(\"m-show-search\");\n      searchPopup.style.setProperty(\"opacity\", \"0\");\n      setTimeout(() => {\n        searchPopup.style.setProperty(\"visibility\", \"hidden\");\n        container.style.setProperty(\"--m-durations\", \".3s\");\n        document.documentElement.classList.remove(\"prevent-scroll\");\n        this.removeAttribute(\"open\");\n      }, 350);\n    }\n  }\n\n  customElements.define(\"m-search-popup\", MSearchPopup);\n}\n\nif (!customElements.get(\"m-select-component\")) {\n  class MSelectComponent extends HTMLElement {\n    constructor() {\n      super();\n\n      this.selectors = {\n        elSelectNative: \".js-selectNative\",\n        elSelectCustom: \".js-selectCustom\",\n        elSelectCustomBox: \".m-select-custom--trigger\",\n        elSelectCustomOpts: \".m-select-custom--options\",\n        elSelectCustomTriggerText: \".m-select-custom--trigger-text\",\n        customOptionList: [\".m-select-custom--option\"],\n      };\n\n      this.domNodes = queryDomNodes(this.selectors, this);\n      this.optionChecked = \"\";\n\n      window.addEventListener(\"DOMContentLoaded\", () => {\n        this.classList.remove(\"m:hidden\");\n      });\n      this.setDefaultValue();\n      this.initSelect();\n    }\n\n    setDefaultValue() {\n      const { elSelectNative } = this.domNodes;\n      const value = elSelectNative.options[elSelectNative.selectedIndex].value;\n      const text = elSelectNative.options[elSelectNative.selectedIndex].text;\n      this.updateCustomSelectChecked(value, text);\n    }\n\n    initSelect() {\n      this.classList.remove(\"m:hidden\");\n      const { elSelectNative, elSelectCustom, elSelectCustomBox } = this.domNodes;\n\n      elSelectCustomBox.addEventListener(\"click\", () => {\n        const isClose = !elSelectCustom.classList.contains(\"isActive\");\n        if (isClose) {\n          this.openSelect();\n        } else {\n          this.closeSelect();\n        }\n      });\n\n      this.domNodes.customOptionList.forEach((option) => {\n        option.addEventListener(\"click\", (e) => {\n          const value = e.target.getAttribute(\"data-value\");\n          elSelectNative.value = value;\n          this.closeSelect();\n          this.updateCustomSelectChecked(value, e.target.textContent);\n          elSelectNative.dispatchEvent(new Event(\"change\"));\n          elSelectNative.dispatchEvent(new Event(\"click\"));\n        });\n      });\n    }\n\n    openSelect() {\n      const allCustomSelect = document.querySelectorAll(\"m-select-component\");\n      document.addEventListener(\"click\", (e) => this.handleClickOutside(e));\n      if (allCustomSelect.length > 0) {\n        allCustomSelect.forEach((select) => {\n          select.closeSelect();\n        });\n      }\n      this.domNodes.elSelectCustom.classList.add(\"isActive\");\n    }\n\n    closeSelect() {\n      this.domNodes.elSelectCustom.classList.remove(\"isActive\");\n    }\n\n    updateCustomSelectChecked(value, text) {\n      const { elSelectCustomOpts, elSelectCustomTriggerText } = this.domNodes;\n      const prevValue = this.optionChecked;\n      const elPrevOption = elSelectCustomOpts.querySelector(`[data-value=\"${prevValue}\"`);\n\n      const elOption = elSelectCustomOpts.querySelector(`[data-value=\"${value}\"`);\n\n      if (elPrevOption) {\n        elPrevOption.classList.remove(\"isActive\");\n      }\n\n      if (elOption) {\n        elOption.classList.add(\"isActive\");\n      }\n\n      elSelectCustomTriggerText.textContent = text;\n      this.optionChecked = value;\n    }\n\n    handleClickOutside(e) {\n      const { elSelectCustom } = this.domNodes;\n      const didClickedOutside = !elSelectCustom.contains(e.target);\n      if (didClickedOutside) {\n        this.closeSelect();\n      }\n    }\n  }\n\n  customElements.define(\"m-select-component\", MSelectComponent);\n}\n\nclass MQuantityInput extends HTMLElement {\n  quantityUpdateUnsubscriber = undefined;\n\n  constructor() {\n    super();\n  }\n\n  get sectionId() {\n    return this.getAttribute(\"data-section-id\");\n  }\n\n  get productId() {\n    return this.getAttribute(\"data-product-id\");\n  }\n\n  get input() {\n    return this.querySelector(\"input\");\n  }\n\n  get value() {\n    return this.input.value;\n  }\n\n  connectedCallback() {\n    this.changeEvent = new Event(\"change\", { bubbles: true });\n\n    this.input.addEventListener(\"change\", this.onInputChange.bind(this));\n    this.input.addEventListener('focus', () => setTimeout(() => this.input.select()));\n\n    this.querySelectorAll(\"button\").forEach((button) =>\n      button.addEventListener(\"click\", this.onButtonClick.bind(this))\n    );\n\n    this.validateQtyRules();\n    this.quantityUpdateUnsubscriber = MinimogEvents.subscribe(\n      MinimogTheme.pubSubEvents.quantityUpdate,\n      this.validateQtyRules.bind(this)\n    );\n\n    // Sync 2 inputs inside product info and sticky ATC\n    this.shouldSync = this.closest('.m-main-product--info') || this.closest('sticky-atc');\n    if (this.shouldSync) {\n      window.addEventListener(\"syncProductQuantity\", (event) => {\n        if (event.detail !== this.input.value) {\n          this.input.value = event.detail;\n          this.validateQtyRules();\n        }\n      });\n    }\n  }\n  onInputChange() {\n    if (this.shouldSync) {\n      window.dispatchEvent(new CustomEvent(\"syncProductQuantity\", { detail: this.input.value }));\n    }\n\n    this.validateQtyRules();\n  }\n  onButtonClick(event) {\n    event.preventDefault();\n    const previousValue = this.input.value;\n\n    if (event.currentTarget.name === 'plus') {\n      if (parseInt(this.input.getAttribute('data-min')) > parseInt(this.input.step) && this.input.value == 0) {\n        this.input.value = this.input.getAttribute('data-min');\n      } else {\n        this.input.stepUp();\n      }\n    } else {\n      this.input.stepDown();\n    }\n\n    if (previousValue !== this.input.value) this.input.dispatchEvent(this.changeEvent);\n\n    if (this.input.getAttribute('data-min') === previousValue && event.currentTarget.name === 'minus') {\n      this.input.value = parseInt(this.input.min);\n    }\n  }\n\n  validateQtyRules() {\n    const value = parseInt(this.input.value);\n    const buttonMinus = this.querySelector(\".m-quantity__button[name='minus']\");\n    const buttonPlus = this.querySelector(\".m-quantity__button[name='plus']\");\n\n    if (this.input.min) {\n      const min = parseInt(this.input.min);\n      buttonMinus.classList.toggle(\"m:disabled\", value <= min);\n    } else {\n      buttonMinus.classList.remove(\"m:disabled\");\n    }\n    if (this.input.max) {\n      const max = parseInt(this.input.max);\n      buttonPlus.classList.toggle(\"m:disabled\", value >= max);\n    } else {\n      buttonPlus.classList.remove(\"m:disabled\");\n    }\n  }\n\n  updateQuantityRules(sectionId, productId, parsedHTML) {\n    if (sectionId !== this.sectionId || productId !== this.productId) return;\n    const selectors = [\n      \".m-quantity__input\",\n      \".quantity__rules\",\n      \".m-product-option--label\",\n    ];\n    const quantityFormUpdated = parsedHTML.getElementById(\n      `QuantityForm-${sectionId}`\n    );\n    const quantityForm = this.closest(`#QuantityForm-${sectionId}`);\n    for (let selector of selectors) {\n      const current = quantityForm.querySelector(selector);\n      const updated = quantityFormUpdated.querySelector(selector);\n      if (!current || !updated) continue;\n\n      if (selector === \".m-quantity__input\") {\n        const attributes = [\n          \"data-cart-quantity\",\n          \"data-min\",\n          \"data-max\",\n          \"step\",\n        ];\n        for (let attribute of attributes) {\n          const valueUpdated = updated.getAttribute(attribute);\n          if (valueUpdated !== null) {\n            current.setAttribute(attribute, valueUpdated);\n          } else {\n            current.removeAttribute(attribute);\n          }\n        }\n      } else {\n        current.innerHTML = updated.innerHTML;\n      }\n    }\n  }\n\n  setQuantityBoundries(sectionId, productId) {\n    if (sectionId !== this.sectionId || productId !== this.productId) return;\n\n    const data = {\n      cartQuantity: this.input.hasAttribute(\"data-cart-quantity\")\n        ? parseInt(this.input.getAttribute(\"data-cart-quantity\"))\n        : 0,\n      min: this.input.hasAttribute(\"data-min\") && this.input.getAttribute(\"data-min\")\n        ? parseInt(this.input.getAttribute(\"data-min\"))\n        : 1,\n      max: this.input.hasAttribute(\"data-max\") && this.input.getAttribute(\"data-max\")\n        ? parseInt(this.input.getAttribute(\"data-max\"))\n        : null,\n      step: this.input.hasAttribute(\"step\") && this.input.getAttribute(\"step\")\n        ? parseInt(this.input.getAttribute(\"step\"))\n        : 1,\n    };\n\n    let min = data.min;\n    const max = data.max === null ? data.max : data.max - data.cartQuantity;\n    if (max !== null) min = Math.min(min, max);\n    if (data.cartQuantity >= data.min) min = Math.min(min, data.step);\n\n    this.input.min = min;\n\n    if (max) {\n      this.input.max = max;\n    } else {\n      this.input.removeAttribute(\"max\");\n    }\n    this.input.value = min;\n\n    MinimogEvents.emit(MinimogTheme.pubSubEvents.quantityUpdate, undefined);\n  }\n\n  reset() {\n    this.input.value = this.input.defaultValue;\n  }\n\n  setValidity(message) {\n    this.input.setCustomValidity(message);\n    this.input.reportValidity();\n    this.input.value = this.input.defaultValue;\n    this.input.select();\n    // Avoid the button being disabled when enter a value is greater than max value or less than min value\n    this.validateQtyRules();\n  }\n}\n\ncustomElements.define(\"m-quantity-input\", MQuantityInput);\n\nclass ProductRecentlyViewed extends HTMLElement {\n  constructor() {\n    super();\n\n    // Save product Id\n    if (isStorageSupported(\"local\")) {\n      const productId = parseInt(this.dataset.productId);\n      const cookieName = \"minimog-recently-viewed\";\n      const items = JSON.parse(window.localStorage.getItem(cookieName) || \"[]\");\n\n      // Check current product already exists, if not push to array\n      if (!items.includes(productId)) {\n        items.unshift(productId);\n      }\n\n      // Save to localStorage\n      window.localStorage.setItem(cookieName, JSON.stringify(items.slice(0, 20)));\n    }\n  }\n}\ncustomElements.define(\"product-recently-viewed\", ProductRecentlyViewed);\n\nclass ProgressBar extends HTMLElement {\n  constructor() {\n    super();\n\n    if (this.hasAttribute('style')) return;\n\n    if (this.dataset.from) {\n      this.initProgress();\n    }\n\n    MinimogTheme.initWhenVisible({\n      element: this,\n      callback: this.init.bind(this),\n      threshold: 0,\n    });\n  }\n\n  init() {\n    this.setPercentage(this.dataset.value, this.dataset.max);\n  }\n\n  initProgress() {\n    this.setPercentage(this.dataset.from, this.dataset.max);\n  }\n\n  setPercentage(val1, val2) {\n    this.style.setProperty('--percent', `${(parseInt(val1) / parseInt(val2)) * 100}%`);\n  }\n}\ncustomElements.define('progress-bar', ProgressBar);\n\nif (!customElements.get(\"m-cart-count\")) {\n  class MCartCount extends HTMLElement {\n    constructor() {\n      super();\n      this.getSectionToRenderListener = this.getSectionToRender.bind(this);\n    }\n\n    cartUpdateUnsubscriber = undefined;\n\n    get sectionName() {\n      return 'cart-count';\n    }\n\n    getSectionToRender(event) {\n      event.detail.sections.push(this.sectionName);\n    }\n\n    connectedCallback() {\n      document.addEventListener('cart:grouped-sections', this.getSectionToRenderListener);\n\n      this.cartUpdateUnsubscriber = MinimogEvents.subscribe(\n        MinimogTheme.pubSubEvents.cartUpdate,\n        this.onCartUpdate.bind(this)\n      );\n    }\n\n    disconnectedCallback() {\n      if (this.cartUpdateUnsubscriber) {\n        this.cartUpdateUnsubscriber();\n      }\n    }\n\n    get itemCount() {\n      return parseInt(this.innerText);\n    }\n\n    onCartUpdate(event) {\n      if (event.cart.errors) return;\n      const sectionToRender = new DOMParser().parseFromString(event.cart.sections[this.sectionName], 'text/html');\n      this.onUpdate(sectionToRender);\n    }\n\n    onUpdate(section) {\n      this.innerText = section.querySelector('.m-cart-count').innerText;\n      const method = this.itemCount === 0 ? 'add' : 'remove';\n      this.classList[method]('m:hidden');\n    }\n  }\n  customElements.define('m-cart-count', MCartCount);\n}\n"],
  "mappings": "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",
  "names": ["observer", "MinimogSettings", "MinimogStrings"]
}
