{
  "version": 3,
  "sources": ["/cdn/shop/t/16/assets/custom.js?cd_check=20260520_0926"],
  "sourcesContent": ["import { $4, $$4, $id4, debounce, formatMoney, fetchCache } from '@theme/utilities';\nimport { getterAdd, getterGet, getterRunFn, btnTooltip, DrawerComponent, VariantChangeBase } from \"@theme/global\";\nimport { ThemeEvents } from '@theme/events';\nconst { dialogClose, dialogOpen, cartCount, cartUpdate, currencyUpdate, cartReload, progressBarChange } = ThemeEvents;\n\n// WISHLIST\nvar $wishlist_list = $id4('hdt_wishlist_list'),\n  $compare_list = $id4('hdt_compare_list'),\n  nameCachedWishlist = 'theme4:wishlist:id',\n  nameCachedCompare = 'theme4:compare:id';\n// if exit $wishlist_list is use app wishlist the4\nif ($wishlist_list) {\n  var arr_wishlist_list = $wishlist_list.textContent ? $wishlist_list.textContent.split(' ') : [];\n}\nelse {\n  var arr_wishlist_list = (!localStorage.getItem(nameCachedWishlist)) ? [] : localStorage.getItem(nameCachedWishlist).split(',');  // remove id: and conver array\n}\nif ($compare_list) {\n  var arr_compare_list = $compare_list.textContent ? $compare_list.textContent.split(' ') : [];\n}\nelse {\n  var arr_compare_list = (!localStorage.getItem(nameCachedCompare)) ? [] : localStorage.getItem(nameCachedCompare).split(',');  // remove id: and conver array\n}\n// arr_wishlist_list = [1234, 5678, 9011]\n// arr_compare_list = [1234, 5678, 9011]\n\nvar linkWishlistApp = '/apps/ecomrise/wishlist',\n  linkCompareApp = '/apps/ecomrise/compare',\n  actionAfterWishlistAdded = themeHDN.extras.AddedWishlistRemove ? 'remove' : 'added',\n  actionAfterCompareAdded = themeHDN.extras.AddedCompareRemove ? 'remove' : 'added',\n  limitWishlist = $wishlist_list ? 100 : 50,\n  limitCompare = 5,\n  conver_to_link_fn = function (prefix = this.textFn, array = this.array) {\n    const x = themeHDN.routes.search_url + `/?view=${prefix}`,\n      y = x + '&type=product&options[unavailable_products]=last&q=';\n    return (array.length) ? y + encodeURI(`id:${array.join(' OR id:')}`) : x;\n  };\n// Reset if limit change\nif (arr_wishlist_list.length > limitWishlist) {\n  arr_wishlist_list.splice(limitWishlist - 1, arr_wishlist_list.length - 1);\n  localStorage.setItem(nameCachedWishlist, arr_wishlist_list.toString());\n}\n// Check is page has item but not show reload page\nif (window.isPageWishlist) {\n  if (arr_wishlist_list.length && !window.isWishlistPerformed) {\n    window.location.href = conver_to_link_fn('wishlist', arr_wishlist_list)\n  } else {\n    window.history.replaceState({}, document.title, conver_to_link_fn('wishlist', []));\n  }\n  themeHDN.wisHref = conver_to_link_fn('wishlist', arr_wishlist_list);\n}\n\n// Reset if limit change\nif (arr_compare_list.length > limitCompare) {\n  arr_compare_list.splice(limitCompare - 1, arr_compare_list.length - 1);\n  localStorage.setItem(nameCachedCompare, arr_compare_list.toString());\n}\n// Check is page has item but not show reload page\nif (window.isPageCompare) {\n  if (arr_compare_list.length && !window.isComparePerformed) {\n    window.location.href = conver_to_link_fn('compare', arr_compare_list)\n  } else {\n    window.history.replaceState({}, document.title, conver_to_link_fn('compare', []));\n  }\n}\nvar _wishlist_id, _wishlist_handle,\n  _update_wis_text, update_wis_text_fn,\n  _update_wis_btns, update_wis_btns_fn,\n  _click_wis, click_wis_fn,\n  _add_wis, add_wis_fn,\n  _remove_wis, remove_wis_fn,\n  _action_after_remove_add, action_after_remove_add_fn,\n  _show_popup_compare, show_popup_compare_fn,\n  _conver_to_link;\nclass Wishlist extends btnTooltip {\n  constructor() {\n    super();\n    getterAdd(_wishlist_id, this, this.dataset.id);\n    getterAdd(_wishlist_handle, this, this.dataset.handle);\n    getterAdd(_update_wis_text, this);\n    getterAdd(_update_wis_btns, this);\n    getterAdd(_click_wis, this);\n    getterAdd(_add_wis, this);\n    getterAdd(_remove_wis, this);\n    getterAdd(_action_after_remove_add, this);\n    getterAdd(_show_popup_compare, this);\n    getterAdd(_conver_to_link, this);\n    this.tabIndex = 0;\n    this.addEventListener(\"click\", (event) => getterRunFn(_click_wis, this, click_wis_fn).call(this, event));\n    this.addEventListener(\"keydown\", (event) => {\n      if (event.key == \"Enter\") getterRunFn(_click_wis, this, click_wis_fn).call(this, event)\n    });\n  }\n  static get observedAttributes() {\n    return [\"action\"];\n  }\n  get isFnWishlist() {\n    return true;\n  }\n  get textFn() {\n    return 'wishlist';\n  }\n  get isPageWishlistorCompare() {\n    //add code check page\n    return this.isFnWishlist ? window.isPageWishlist : window.isPageCompare;\n  }\n  get limit() {\n    return this.isFnWishlist ? limitWishlist : limitCompare;\n  }\n  get nameCached() {\n    return this.isFnWishlist ? nameCachedWishlist : nameCachedCompare;\n  }\n  get array() {\n    return this.isFnWishlist ? arr_wishlist_list : arr_compare_list;\n  }\n  get actionAfterAdded() {\n    return this.isFnWishlist ? actionAfterWishlistAdded : actionAfterCompareAdded;\n  }\n  get action() {\n    return this.getAttribute('action');\n  }\n  attributeChangedCallback(name, oldValue, newValue) {\n    if (oldValue === newValue || (oldValue === null && newValue === 'add')) return;\n    getterRunFn(_update_wis_text, this, update_wis_text_fn).call(this, newValue);\n    super.attributeChangedCallback(name, oldValue, newValue);\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    if (this.array.indexOf(getterGet(_wishlist_id, this)) > -1) {\n      if (this.hasAttribute('remove-on-page')) {\n        return\n      }\n      this.setAttribute('action', this.actionAfterAdded);\n    }\n  }\n};\n_wishlist_id = new WeakMap();\n_wishlist_handle = new WeakMap();\n_update_wis_text = new WeakSet();\n_update_wis_btns = new WeakSet();\n_click_wis = new WeakSet();\n_add_wis = new WeakSet();\n_remove_wis = new WeakSet();\n_action_after_remove_add = new WeakSet();\n_conver_to_link = new WeakSet();\n_show_popup_compare = new WeakSet();\nupdate_wis_text_fn = function (value) {\n  if (this.hasAttribute('remove-on-page')) return;\n  const text = themeHDN.extras[`text_${this.isFnWishlist ? 'wis' : 'cp'}_${value}`],\n    icon = themeHDN.extras[`icon_${this.isFnWishlist ? 'wis' : 'cp'}_${value}`];\n  if (icon) this.firstElementChild.replaceWith(document.createRange().createContextualFragment(icon));\n  if (text) {\n    this.lastElementChild.textContent = text;\n    this.setAttribute('data-txt-tt', text)\n  }\n};\nupdate_wis_btns_fn = function (_action) {\n  // Update Button\n  $$4(`hdt-${this.textFn}[data-id=\"${getterGet(_wishlist_id, this)}\"]`).forEach(btn => {\n    btn.setAttribute('action', _action);\n  });\n  // Update Count and link\n  document.dispatchEvent(new CustomEvent(`theme4:${this.textFn}:update`, {\n    bubbles: true,\n    detail: 'the4'  // arr_wishlist_list\n  }));\n  if ((window.isPageWishlist)) themeHDN.wisHref = conver_to_link_fn('wishlist', arr_wishlist_list);\n};\nclick_wis_fn = function (e) {\n\n  if (this.action == 'add') {\n    // ADD\n    getterRunFn(_add_wis, this, add_wis_fn).call(this);\n  } else if (this.action === 'added') {\n    // ADDED: go to page wishlist\n    if (!this.isFnWishlist && themeHDN.extras.enableComparePopup) {\n      getterRunFn(_show_popup_compare, this, show_popup_compare_fn).call(this);\n    } else {\n      window.location.href = getterRunFn(_conver_to_link, this, conver_to_link_fn).call(this);\n    }\n  } else {\n    // REMOVE\n    getterRunFn(_remove_wis, this, remove_wis_fn).call(this, e);\n  }\n};\nadd_wis_fn = function (e) {\n  if ($wishlist_list && this.isFnWishlist || $compare_list && !this.isFnWishlist) {\n    // app wishlist\n    this.setAttribute('aria-busy', true);\n    fetch(this.isFnWishlist ? linkWishlistApp : linkCompareApp, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        product_id: getterGet(_wishlist_id, this),\n        product_handle: getterGet(_wishlist_handle, this),\n        action: 'add'\n      })\n    })\n      .then((response) => {\n        return response.json()\n      })\n      .then((data) => {\n        if (data.status != 'success') {\n          console.error(data.message || 'Unknow error');\n          return;\n        }\n        if (this.isFnWishlist) {\n          arr_wishlist_list = JSON.parse(data.response.metafield.value).ecomrise_ids;\n          if (!Array.isArray(arr_wishlist_list)) {\n            arr_wishlist_list = arr_wishlist_list.split(',');\n          }\n        }\n        if (!this.isFnWishlist) {\n          arr_compare_list = JSON.parse(data.response.metafield.value).ecomrise_ids;\n          if (!Array.isArray(arr_compare_list)) {\n            arr_compare_list = arr_compare_list.split(',');\n          }\n          getterRunFn(_show_popup_compare, this, show_popup_compare_fn).call(this);\n        }\n        getterRunFn(_action_after_remove_add, this, action_after_remove_add_fn).call(this, this.actionAfterAdded);\n      })\n      .catch(function (error) {\n        console.log('Error: ' + error);\n      })\n      .finally(() => {\n        this.setAttribute('aria-busy', false);\n      });\n  }\n  else {\n    // local wishlist\n    // adds the specified elements to the beginning of an array\n    this.array.unshift(getterGet(_wishlist_id, this));\n    //console.log(this.array, getterGet(_wishlist_id, this))\n    if (this.array.length > this.limit) {\n      // if over limit remove element on last array\n      let arraySplice = this.array.splice(this.limit, 1);\n      // arraySplice: allway has 1 element\n      $$4(`hdt-${this.textFn}[data-id=\"${arraySplice[0]}\"]`).forEach(btn => {\n        btn.setAttribute('action', 'add');\n      });\n    }\n    if (!this.isFnWishlist) getterRunFn(_show_popup_compare, this, show_popup_compare_fn).call(this);\n    getterRunFn(_action_after_remove_add, this, action_after_remove_add_fn).call(this, this.actionAfterAdded);\n    localStorage.setItem(this.nameCached, this.array.toString());\n  }\n};\nremove_wis_fn = function (e) {\n  e.preventDefault();\n  e.stopPropagation();\n  // REMOVE\n  if ($wishlist_list && this.isFnWishlist || $compare_list && !this.isFnWishlist) {\n    // app wishlist\n    this.setAttribute('aria-busy', true);\n    fetch(this.isFnWishlist ? linkWishlistApp : linkCompareApp, {\n      method: 'DELETE',\n      headers: {\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        product_id: getterGet(_wishlist_id, this),\n        product_handle: getterGet(_wishlist_handle, this),\n        action: 'add',\n        _method: 'DELETE'\n      })\n    })\n      .then((response) => {\n        return response.json()\n      })\n      .then((data) => {\n        if (data.status != 'success') {\n          console.error(data.message || 'Unknow error');\n          return;\n        }\n        arr_wishlist_list = JSON.parse(data.response.metafield.value).ecomrise_ids;\n        if (!Array.isArray(arr_wishlist_list)) {\n          arr_wishlist_list = arr_wishlist_list.split(',');\n        }\n        getterRunFn(_action_after_remove_add, this, action_after_remove_add_fn).call(this, 'add');\n      })\n      .catch(function (error) {\n        console.log('Error: ' + error);\n      })\n      .finally(() => {\n        this.setAttribute('aria-busy', false);\n      });\n  } else {\n    // local wishlist\n    this.array.splice(this.array.indexOf(getterGet(_wishlist_id, this)), 1);\n    localStorage.setItem(this.nameCached, this.array.toString());\n\n    getterRunFn(_action_after_remove_add, this, action_after_remove_add_fn).call(this, 'add');\n  }\n};\naction_after_remove_add_fn = function (action) {\n\n  if (this.getAttribute('action') == 'remove' && this.hasAttribute('remove-on-page')) {\n    if (this.isFnWishlist) {\n      this.setAttribute('aria-busy', true);\n      if (this.isPageWishlistorCompare) window.location.href = getterRunFn(_conver_to_link, this, conver_to_link_fn).call(this);\n      // this.closest('.hdt-card-product').remove();\n    } else {\n      $$4(`.hdt-compare-item-${getterGet(_wishlist_id, this)}`).forEach(item => {\n        item.remove();\n        // console.log(\"Remove compare item\");\n      });\n    }\n    getterRunFn(_update_wis_btns, this, update_wis_btns_fn).call(this, action);\n    if (this.array.length == 0) {\n      $id4('drawerCompare')?.closest('hdt-drawer')?.close();\n      if (this.isPageWishlistorCompare) window.location.href = getterRunFn(_conver_to_link, this, conver_to_link_fn).call(this);\n    }\n    //this.setAttribute('action', action);\n  } else {\n    getterRunFn(_update_wis_btns, this, update_wis_btns_fn).call(this, action);\n    // is page wishlist or compare reload page\n    if (this.isPageWishlistorCompare) window.location.href = getterRunFn(_conver_to_link, this, conver_to_link_fn).call(this);\n  }\n};\nshow_popup_compare_fn = function (event) {\n  if (!themeHDN.extras.enableComparePopup || this.isPageWishlistorCompare) return;\n  // add code if want show popup compare\n  $id4('drawerCompare')?.closest('hdt-drawer')?.open();\n  fetch(conver_to_link_fn('compare', arr_compare_list) + \"&section_id=compare-offcanvas\")\n    .then((response) => response.text())\n    .then((text) => {\n      const html = document.createElement('div');\n      html.innerHTML = text;\n      const prds = html.querySelector('offcanvas-compare');\n\n      if (prds && prds.innerHTML.trim().length) {\n\n        $4(\"offcanvas-compare\").innerHTML = prds.innerHTML;\n      }\n    })\n    .catch((e) => {\n      console.error(e);\n    });\n};\nvar _clear_all, clear_all_fn;\nclass ClearAll extends HTMLElement {\n  constructor() {\n    super();\n    getterAdd(_clear_all, this);\n    this.tabIndex = 0;\n    this.addEventListener(\"click\", getterRunFn(_clear_all, this, clear_all_fn));\n    this.addEventListener(\"keydown\", (event) => {\n      if (event.key == \"Enter\") getterRunFn(_clear_all, this, clear_all_fn).call(this)\n    });\n  }\n  get ofFn() {\n    return this.getAttribute('of-fn'); //'compare', 'wishlist'\n  }\n  get nameCached() {\n    return this.ofFn == 'compare' ? nameCachedCompare : nameCachedWishlist;\n  }\n  set array(value) {\n    this.ofFn == 'compare' ? arr_compare_list = value : arr_wishlist_list = value;\n  }\n};\n_clear_all = new WeakSet();\nclear_all_fn = function () {\n  localStorage.removeItem(this.nameCached);\n  // Update Buttons\n  $$4(`hdt-${this.ofFn}[action=\"added\"]`).forEach(btn => {\n    btn.setAttribute('action', 'add');\n  });\n  // Update Count and link\n  document.dispatchEvent(new CustomEvent(`theme4:${this.ofFn}:update`, {\n    bubbles: true,\n    detail: 'the4'\n  }));\n  this.array = [];\n  $id4(`drawerCompare`)?.closest('hdt-drawer')?.close();\n  if ($4(`#drawerCompare offcanvas-compare`)) {\n    $4(`#drawerCompare offcanvas-compare`).innerHTML = \"\";\n  }\n};\ncustomElements.define(\"hdt-clear-all\", ClearAll);\n// eg: <hdt-clear-all role=\"button\" of-fn=\"compare\">Clear All </hdt-clear-all>\n\n// Update count\nclass WishlistCount extends HTMLElement {\n  constructor() {\n    super();\n    this.textContent = this.array.length;\n    document.addEventListener(`theme4:${this.prefix}:update`, (e) => {\n      //console.log(this.prefix + ' count update.');\n      this.textContent = this.array.length;\n    });\n  }\n  get isFnWishlist() {\n    return true;\n  }\n  get array() {\n    return this.isFnWishlist ? arr_wishlist_list : arr_compare_list;\n  }\n  get prefix() {\n    return this.isFnWishlist ? 'wishlist' : 'compare';\n  }\n}\n// Update link page\nclass WishlistLink extends HTMLElement {\n  constructor() {\n    super();\n    $4('a', this).href = conver_to_link_fn(this.prefix, this.array);\n    //console.log('WishlistLink', this.href)\n    document.addEventListener(`theme4:${this.prefix}:update`, (e) => {\n      $4('a', this).href = conver_to_link_fn(this.prefix, this.array);\n    });\n  }\n  get isFnWishlist() {\n    return true;\n  }\n  get array() {\n    return this.isFnWishlist ? arr_wishlist_list : arr_compare_list;\n  }\n  get prefix() {\n    return this.isFnWishlist ? 'wishlist' : 'compare';\n  }\n}\ncustomElements.define(\"hdt-wishlist\", Wishlist);\ncustomElements.define(\"hdt-wishlist-count\", WishlistCount);\ncustomElements.define(\"hdt-wishlist-a\", WishlistLink);\n\n// COMPARE\nclass Compare extends Wishlist {\n  get isFnWishlist() {\n    return false;\n  }\n  get textFn() {\n    return 'compare';\n  }\n}\n// Update count\nclass CompareCount extends WishlistCount {\n  get isFnWishlist() {\n    return false;\n  }\n}\n// Update link page\nclass CompareLink extends WishlistLink {\n  get isFnWishlist() {\n    return false;\n  }\n}\ncustomElements.define(\"hdt-compare\", Compare);\ncustomElements.define(\"hdt-compare-count\", CompareCount);\ncustomElements.define(\"hdt-compare-a\", CompareLink);\n\n// footer accodion\nfunction handleAccordionClick() {\n  let accordion = this.parentElement;\n  accordion.classList.toggle('open');\n  if (window.innerWidth < 768) {\n    let content = accordion.querySelector('.hdt-collapse-content');\n    if (accordion.classList.contains('open')) {\n      content.style.height = content.scrollHeight + 'px';\n    } else {\n      content.style.height = '0';\n    }\n  }\n}\nfunction updateMaxHeight() {\n  if (window.innerWidth >= 768) {\n    document.querySelectorAll('.hdt-footer-section .hdt-collapse-content').forEach(function (content) {\n      content.style.height = '';\n    });\n  }\n}\ndocument.querySelectorAll('.hdt-footer-section .hdt-footer-heading').forEach(function (element) {\n\n  element.addEventListener('click', handleAccordionClick);\n});\nwindow.addEventListener('resize', function () {\n  if (window.innerWidth < 768) {\n    document.querySelectorAll('.hdt-footer-section .hdt-footer-heading').forEach(function (element) {\n      element.removeEventListener('click', handleAccordionClick);\n      element.addEventListener('click', handleAccordionClick);\n    });\n  } else {\n    document.querySelectorAll('.hdt-footer-section .hdt-footer-heading').forEach(function (element) {\n      element.removeEventListener('click', handleAccordionClick);\n    });\n    updateMaxHeight();\n  }\n});\n\n\n// --------------------------\n// Back to top\n// --------------------------\nclass BackToTop extends HTMLElement {\n  constructor() {\n    super();\n    this.config = JSON.parse(this.getAttribute('config'));\n    if (window.innerWidth < 768 && this.config.hiddenMobile) return;\n    this.debounce_timer = 0;\n    this.debounce_timer2 = 0;\n    this.circlechart = this.querySelector('.hdt-circle-css');\n    this.addEventListener(\"click\", this.goTop.bind(this));\n    window.addEventListener(\"scroll\", this.backToTop.bind(this));\n  }\n  goTop() {\n    document.body.scrollTop = 0; // For Safari\n    document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera\n  }\n\n  backToTop() {\n    let self = this;\n    if (this.debounce_timer) { clearTimeout(this.debounce_timer); }\n    this.debounce_timer = setTimeout(function () {\n      if (window.scrollY > self.config.scrollTop) {\n        self.classList.add('is--show');\n      } else {\n        self.classList.remove('is--show');\n      }\n    }, 40);\n\n    if (!this.circlechart) return;\n\n    if (this.debounce_timer2) { clearTimeout(this.debounce_timer2); }\n\n    this.debounce_timer2 = setTimeout(function () {\n      let scrollTop2 = window.scrollY,\n        docHeight = document.body.offsetHeight,\n        winHeight = window.innerHeight,\n        scrollPercent = scrollTop2 / (docHeight - winHeight),\n        degrees = scrollPercent * 360;\n      self.circlechart.style.setProperty(\"--cricle-degrees\", degrees + 'deg');\n    }, 6);\n  }\n}\n\ncustomElements.define('back-to-top', BackToTop);\n\n// --------------------------\n// Form status\n// --------------------------\n\n\nconst contactForm = $$4('form[action^=\"/contact\"]');\ncontactForm.forEach(function (form) {\n  form.addEventListener(\"submit\", function (event) {\n    sessionStorage.setItem(\"the4:recentform\", this.getAttribute(\"id\"));\n  })\n});\nvar recentform = sessionStorage.getItem(\"the4:recentform\") || \"\";\n\nif (location.href.indexOf('contact_posted=true') > 0 && recentform !== \"\") {\n  document.dispatchEvent(new CustomEvent('the4:recentform', { detail: { recentform: recentform }, bubbles: true, cancelable: true }));\n  $id4(recentform)?.classList.add(\"on-live\");\n  if (recentform.indexOf('ContactFormAsk') >= 0 && $id4(recentform).length > 0) {\n    let modal_id = document.getElementById(recentform).getAttribute('data-modal');\n    document.getElementById(modal_id).closest('hdt-modal').open();\n    sessionStorage.removeItem(\"the4:recentform\");\n  }\n  if ($4('.form-status-mirror-' + recentform)) {\n    $4('.form-status-mirror-' + recentform).style.cssText = \"display: block;\";\n  }\n}\n\nelse if (location.href.indexOf('customer_posted=true') > 0 && recentform !== \"\") {\n  document.addEventListener('the4:recentform', (event) => {\n    let modal_id = document.getElementById(event.detail.recentform).getAttribute('data-id');\n    document.getElementById(modal_id).closest('hdt-modal').open();\n  })\n  document.dispatchEvent(new CustomEvent('the4:recentform', { detail: { recentform: recentform }, bubbles: true, cancelable: true }));\n  $id4(recentform)?.classList.add(\"on-live\");\n}\nelse if (location.href.indexOf('contact_posted=true') > 0 && location.href.indexOf('#') > 0) {\n  var recentform = location.href.split(\"#\")[1];\n  if ($id4(recentform).length > 0) {\n    sessionStorage.setItem(\"the4:recentform\", recentform);\n    $id4(recentform).classList.add(\"on-live\");\n    if ($4('.form-status-mirror-' + recentform)) {\n      $4('.form-status-mirror-' + recentform).style.cssText = \"display: block;\";\n    }\n  }\n}\n\n// --------------------------\n// numberRandom\n// --------------------------\nclass numberRandom extends HTMLElement {\n  constructor() {\n    super();\n    let config = JSON.parse(this.getAttribute(\"config\"));\n    this.min = config.min;\n    this.max = config.max;\n    this.interval = config.interval;\n    this.number = Math.floor(Math.random() * (this.max - this.min + 1)) + this.min;\n    this.ofset = [\"1\", \"2\", \"4\", \"3\", \"6\", \"10\", \"-1\", \"-3\", \"-2\", \"-4\", \"-6\"];\n    this.prioritize = [\"10\", \"20\", \"15\"];\n    this.h = \"\";\n    this.e = \"\";\n    this.M = \"\";\n    this.liveViewInt();\n    setInterval(this.liveViewInt.bind(this), this.interval);\n  }\n\n  liveViewInt() {\n    if (this.h = Math.floor(Math.random() * this.ofset.length), this.e = this.ofset[this.h], this.number = parseInt(this.number) + parseInt(this.e), this.min >= this.number) {\n      this.M = Math.floor(Math.random() * this.prioritize.length);\n      var a = this.prioritize[this.M];\n      this.number += a\n    }\n    if (this.number < this.min || this.number > this.max) {\n      this.number = Math.floor(Math.random() * (this.max - this.min + 1)) + this.min;\n    }\n    this.innerHTML = parseInt(this.number);\n  }\n}\n\ncustomElements.define('number-random', numberRandom);\n\n// --------------------------\n// Total sold flash\n// --------------------------\nclass flashSold extends VariantChangeBase {\n  constructor() {\n    super();\n    var self = this;\n    this.time = this.getAttribute(\"time\");\n    this.config = JSON.parse(this.getAttribute(\"flash-sold\"));\n    this.mins = this.config.mins;\n    this.maxs = this.config.maxs;\n    this.mint = this.config.mint;\n    this.maxt = this.config.maxt;\n    this.dataID = this.config.id;\n    this.getS = sessionStorage.getItem(\"soldS\" + this.dataID) || this.getRandomInt(this.mins, this.maxs);\n    this.getT = sessionStorage.getItem(\"soldT\" + this.dataID) || this.getRandomInt(this.mint, this.maxt);\n    this.numS = parseInt(this.getS);\n    this.numT = parseInt(this.getT);\n    this.intervalTime = parseInt(this.config.time);\n    this.$sold = this.querySelector('[data-sold]');\n    this.$hour = this.querySelector('[data-hour]');\n    this.limitMinMax();\n    this.updateSold(this.numS, this.numT);\n    setInterval(function () {\n      this.numS = this.numS + self.getRandomInt(1, 4);\n      this.numT = this.numT + (Math.random() * (0.8 - 0.1) + 0.1).toFixed(1) * 1;\n      self.limitMinMax();\n      self.updateSold(self.numS, self.numT);\n    }, this.intervalTime);\n  }\n\n  getRandomInt(min, max) {\n    return Math.floor(Math.random() * (max - min + 1)) + min;\n  }\n\n  updateSold(num1, num2) {\n    this.$sold.innerHTML = num1;\n    this.$hour.innerHTML = Math.floor(this.numT);\n    sessionStorage.setItem(\"soldS\" + this.dataID, num1);\n    sessionStorage.setItem(\"soldT\" + this.dataID, num2);\n  }\n  limitMinMax() {\n    if (this.numS > this.maxs) this.numS = self.getRandomInt(this.mins, this.maxs)\n    if (this.numT > this.maxt) this.numT = self.getRandomInt(this.mins, this.maxt)\n  }\n  #preVariantId;\n  onVariantChanged(event) {\n    const variant = event.detail.variant;\n    if (variant && this.#preVariantId != variant.id) {\n      if (variant.available) {\n        this.closest(\".hdt-product-info__item\").style.display = \"block\"\n      }\n      else {\n        this.closest(\".hdt-product-info__item\").style.display = \"none\"\n      }\n    }\n  }\n}\ncustomElements.define('flash-sold', flashSold);\n\n// ======================================\n//    pages/brands -  filter isotope \n// ======================================\nclass filterIsotope extends HTMLElement {\n  constructor() {\n    super();\n    this.btns = this.querySelectorAll('button');\n    this.id = this.id;\n    if (!this.btns) {\n      return;\n    }\n    this.handleButtonClick();\n  }\n  handleButtonClick() {\n    this.btns.forEach(btn => {\n      btn.addEventListener('click', () => {\n        this.querySelector('button.active').classList.remove('active');\n        btn.classList.add('active');\n\n        let selectedFilter = btn.getAttribute('data-filter');\n        let itemsToHide = $$4(`#${this.id} .hdt-brand-item:not(${selectedFilter})`);\n        let itemsToShow = $$4(`#${this.id} ${selectedFilter}`);\n\n        if (selectedFilter == '._filter-show-all') {\n          itemsToHide = [];\n          itemsToShow = $$4(`#${this.id} .hdt-brand-item`);\n        }\n\n        itemsToShow.forEach(el => {\n          el.classList.remove('animate-filter-hide', 'hdt-hidden');\n          el.classList.add('animate-filter-show');\n        });\n\n        itemsToHide.forEach(el => {\n          el.classList.add('animate-filter-hide', 'hdt-hidden');\n          el.classList.remove('animate-filter-show');\n        });\n      })\n    })\n  }\n}\ncustomElements.define('hdt-brands', filterIsotope);\n\n// ======================================\n//   countryFilter \n// ======================================\nclass countryFilter extends HTMLElement {\n  constructor() {\n    super();\n    this.search = $4('[name=country_filter]', this);\n    this.reset = $4(\".hdt-country_filter__reset\", this);\n    if (this.search) {\n      this.search.addEventListener(\n        'input',\n        debounce((event) => {\n          this.filterCountries();\n        }, 200).bind(this)\n      );\n    }\n    this.search.addEventListener('keydown', this.onSearchKeyDown.bind(this));\n\n  }\n  filterCountries() {\n    const searchValue = this.search.value.toLowerCase();\n    const allCountries = this.closest(\"hdt-popover\").querySelectorAll('hdt-richlist button');\n    let visibleCountries = allCountries.length;\n    allCountries.forEach((item) => {\n      const countryName = item.getAttribute('data-name').toLowerCase();\n      if (countryName.indexOf(searchValue) > -1) {\n        item.classList.remove('hdt-d-none');\n        visibleCountries++;\n      } else {\n        item.classList.add('hdt-d-none');\n        visibleCountries--;\n      }\n    });\n    if (window.innerWidth > 768) this.closest(\"hdt-popover\").updatePos();\n    this.closest(\"hdt-popover\").querySelector('.hdt-current-scrollbar').scrollTop = 0;\n  }\n\n  onSearchKeyDown(event) {\n    if (event.code.toUpperCase() === 'ENTER') {\n      event.preventDefault();\n    }\n  }\n}\n\ncustomElements.define('country-filter', countryFilter);\n\n\n\n// --------------------------\n// Product Recommendations\n// --------------------------\nclass ProductRecommendations extends HTMLElement {\n  constructor() {\n    super();\n  }\n\n  get fetchType() {\n    return parseInt(this.getAttribute('data-fetch-type')) || 1;\n  }\n  connectedCallback() {\n    if (this.hasAttribute('no-observe') || this.fetchType === 2 || this.fetchType === 3) {\n      this.fetchAction();\n      return;\n    }\n    const handleIntersection = (entries, observer) => {\n      if (!entries[0].isIntersecting) return;\n      observer.unobserve(this);\n      this.fetchAction();\n    };\n    new IntersectionObserver(handleIntersection.bind(this), { rootMargin: '0px 0px 400px 0px' }).observe(this);\n  }\n\n  async fetchAction() {\n    // fetch(this.dataset.url)\n    //   .then((response) => response.text())\n    //   .then((text) => {\n    //     const html = document.createElement('div');\n    //     html.innerHTML = text;\n    //     const recommendations = html.querySelector('product-recommendations');\n\n    //     if (recommendations && recommendations.innerHTML.trim().length) {\n    //       this.innerHTML = recommendations.innerHTML;\n    //     }\n    //     document.dispatchEvent(new CustomEvent(\"currency:update\"));\n    //   })\n    //   .catch((e) => {\n    //     console.error(e);\n    //   });\n    try {\n      const responseData = await (await fetchCache(this.dataset.url)).text();\n      const html = document.createElement('div');\n      html.innerHTML = responseData;\n      const sectionId = this.dataset.sectionId;\n      const recommendations = html.querySelector(`product-recommendations[data-section-id=\"${sectionId}\"]`);\n      if (recommendations && recommendations.innerHTML.trim().length) {\n        this.innerHTML = recommendations.innerHTML;\n      }\n      document.dispatchEvent(new CustomEvent(\"currency:update\"));\n    } catch (error) {\n      console.error(error);\n    }\n  }\n}\n\ncustomElements.define('product-recommendations', ProductRecommendations);\n\n// --------------------------\n// Product Recently\n// --------------------------\nclass ProductRecently extends HTMLElement {\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    const handleIntersection = (entries, observer) => {\n      if (!entries[0].isIntersecting) return;\n      observer.unobserve(this);\n      let handleProducts = localStorage.getItem(\"theme4:recently:id\");\n      let prdId = this.dataset.id;\n      let limit = parseInt(this.dataset.limit);\n      if (handleProducts !== null) {\n        let products = handleProducts.split(',');\n        if (this.dataset.reverse === 'true') {\n          products = products.reverse();\n        }\n        if (prdId == products[0] && products.length == 1) {\n          this.closest('.section').style.display = 'none';\n          return;\n        }\n        let url = this.dataset.url.replace('q=', 'q=id:' + products.join(\"%20OR%20id:\"));\n        fetch(url)\n          .then((response) => response.text())\n          .then((text) => {\n            const html = document.createElement('div');\n            html.innerHTML = text.replace('hdt-slider-wait', 'hdt-slider');\n            const recently = html.querySelector('product-recently');\n\n            if (recently && recently.innerHTML.trim().length) {\n              this.innerHTML = recently.innerHTML;\n              // html.innerHTML = text.replace('hdt-slider-wait', 'hdt-slider');\n            }\n            document.dispatchEvent(new CustomEvent(\"currency:update\"));\n          })\n          .catch((e) => {\n            console.error(e);\n          });\n\n      }\n      let arrayProducts = handleProducts !== null ? handleProducts.split(',') : new Array;\n      if (arrayProducts.length == 0) {\n        this.closest('.shopify-section').style.display = 'none';\n      }\n      if (!arrayProducts.includes(prdId + '')) {\n        if (arrayProducts.length >= limit) {\n          arrayProducts.pop();\n        }\n        function prepend(value, array) {\n          var newArray = array.slice();\n          newArray.unshift(value);\n          return newArray;\n        }\n        arrayProducts = prepend(prdId, arrayProducts);\n        arrayProducts = arrayProducts.toString();\n        localStorage.setItem(\"theme4:recently:id\", arrayProducts);\n      } else {\n        const prdIdStr = prdId + '';\n        const index = arrayProducts.indexOf(prdIdStr);\n        if (index > -1) {\n          arrayProducts.splice(index, 1);\n          arrayProducts.unshift(prdIdStr);\n          arrayProducts = arrayProducts.toString();\n          localStorage.setItem(\"theme4:recently:id\", arrayProducts);\n        }\n      }\n    };\n\n    new IntersectionObserver(handleIntersection.bind(this), { rootMargin: '0px 0px 400px 0px' }).observe(this);\n  }\n}\n\ncustomElements.define('product-recently', ProductRecently);\n\n\n// --------------------------\n// Product Ask Question\n// --------------------------\n\nconst modalAsk = document.getElementById('modal-contactFormAsk');\nmodalAsk.addEventListener('dialog:opening', function (event) {\n  let askBtn = modalAsk.closest('hdt-modal').dialog.btnOpening;\n  let product = askBtn.getAttribute('data-product');\n  let product_info = askBtn.parentElement.querySelector('.hdt-pr-popup__ask-product');\n  if (product_info) {\n    const modalHeader = modalAsk.querySelector('.hdt-dialog-modal__header');\n    if (modalHeader && product_info) {\n      const oldProductInfo = modalHeader.querySelector('.hdt-pr-popup__ask-product');\n      if (oldProductInfo) {\n        oldProductInfo.remove();\n      }\n      modalHeader.prepend(product_info.cloneNode(true));\n    }\n  }\n  let productAsk = modalAsk.querySelector('[name=\"contact[product]\"]');\n  if (productAsk) {\n    let currentValue = productAsk.value || '';\n    let newValue = product || '';\n\n    if (currentValue !== newValue) {\n      let formMessage = modalAsk.querySelector('.hdt-form-message');\n      if (formMessage) {\n        formMessage.remove();\n      }\n    }\n    if (currentValue !== newValue || currentValue === '') {\n      productAsk.value = newValue;\n    }\n  }\n})\n\n// --------------------------\n// Predictive Search\n// --------------------------\nclass PredictiveSearch extends DrawerComponent {\n  constructor() {\n    super();\n    // console.log(!this.hasAttribute('enabled'))\n    // if (!this.hasAttribute('enabled')) return;\n    this.action = themeHDN.routes.predictive_search_url;\n    if (!this.hasAttribute('enabled') || this.isArabic) {\n      this.action = themeHDN.routes.search_url;\n    };\n    this.cachedResults = {};\n    this.predictiveSearchResults = $4('[data-results-search]', this);\n    this.select = $4('[data-cat-search]>select', this);\n    this.input = $4('input[type=\"search\"]', this);\n    this.sectionIdResults = this.getAttribute('data-section-id-results') || 'hdt_predictive-search';\n    this.allPredictiveSearchInstances = $$4('predictive-search');\n    this.skeleton = $4('[data-skeleton-search]', this);\n    this.noResults = $4('.hdt-cart-no-results', this);\n    this.hideWrapper = $4('.hdt-cart-hide-has-results', this);\n    this.showWrapper = $4('.hdt-cart-show-has-results', this);\n    this.btn_viewall = $4('.hdt-view_all', this);\n    this.href = this.btn_viewall?.getAttribute(\"href\");\n    this.btn_viewall_replace_text = $4('[data-replace-text]', this);\n    this.isOpen = false;\n    this.abortController2 = new AbortController();\n    this.searchTerm = '';\n\n    if (this.input) {\n      this.input.addEventListener(\n        'input',\n        debounce((event) => {\n          this.onChange(event);\n        }, 300).bind(this)\n      );\n    }\n    if (this.select) {\n      this.select.addEventListener(\n        'change',\n        debounce((event) => {\n          this.onChange(event);\n        }, 300).bind(this)\n      );\n    }\n\n    const formData = new FormData(this.input.form);\n    this.params = \"\";\n    for (const [key, value] of formData) {\n      if (key === 'q') break;\n      this.params += `${key}=${value}&`;\n    }\n\n    this.setupEventListeners();\n  }\n\n  get isArabic(){\n    return document.querySelector('html').getAttribute('dir') === 'rtl';\n  }\n\n  setupEventListeners() {\n    this.input.form.addEventListener('submit', this.onFormSubmit.bind(this));\n\n    this.input.addEventListener('focus', this.onFocus.bind(this));\n    this.addEventListener('focusout', this.onFocusOut.bind(this));\n    this.addEventListener('keyup', this.onKeyup.bind(this));\n    //this.addEventListener('keydown', this.onKeydown.bind(this));\n  }\n\n  getQuery() {\n    var currentValue = this.input.value.trim();\n    if (this.select) {\n      this.selectVal = this.select.value || '*';\n      var valSelected = this.selectVal.trim();\n      //console.log(valSelected)\n      if (valSelected != '*') {\n        if (currentValue !== '') {\n          currentValue = `product_type:${valSelected} AND ${currentValue}`;\n        } else {\n          currentValue = `product_type:${valSelected}`;\n        }\n      }\n    }\n\n    return currentValue;\n  }\n\n  onChange() {\n    const newSearchTerm = this.getQuery();\n    // console.log(newSearchTerm)\n    if (!this.searchTerm || !newSearchTerm.startsWith(this.searchTerm)) {\n      // Remove the results when they are no longer relevant for the new search term\n      // so they don't show up when the dropdown opens again\n      // this.querySelector('#predictive-search-results-groups-wrapper')?.remove();\n    }\n\n    // Update the term asap, don't wait for the predictive search query to finish loading\n    this.updateSearchForTerm(this.searchTerm, newSearchTerm);\n\n    this.searchTerm = newSearchTerm;\n    this.btn_viewall?.setAttribute(\"href\", this.href.replace(/\\/search\\?q=.*/g, \"/search?q=\" + this.searchTerm));\n    this.btn_viewall_replace_text ? this.btn_viewall_replace_text.innerText = themeHDN.extras.search.view_all + ` ${this.searchTerm}` : null;\n\n    if (!this.searchTerm.length) {\n      this.close(true);\n      return;\n    }\n    this.getSearchResults(this.searchTerm);\n  }\n\n  onFormSubmit(event) {\n    if (!this.getQuery().length || this.querySelector('[aria-selected=\"true\"] a')) event.preventDefault();\n  }\n\n  onFocus() {\n    const currentSearchTerm = this.getQuery();\n    if (!currentSearchTerm.length) return;\n    if (this.searchTerm !== currentSearchTerm) {\n      // Search term was changed from other search input, treat it as a user change\n      this.onChange();\n    } else if (this.getAttribute('results') === 'true') {\n      this.openSearch();\n    } else {\n      this.getSearchResults(this.searchTerm);\n    }\n  }\n\n  onFocusOut() {\n    setTimeout(() => {\n      if (!this.contains(document.activeElement)) this.close();\n    });\n  }\n\n  onKeyup(event) {\n    if (!this.getQuery().length) this.close(true);\n    event.preventDefault();\n\n    // switch (event.code) {\n    //   case 'ArrowUp':\n    //     this.switchOption('up');\n    //     break;\n    //   case 'ArrowDown':\n    //     this.switchOption('down');\n    //     break;\n    //   case 'Enter':\n    //     this.selectOption();\n    //     break;\n    // }\n  }\n\n  // onKeydown(event) {\n  //   // Prevent the cursor from moving in the input when using the up and down arrow keys\n  //   if (event.code === 'ArrowUp' || event.code === 'ArrowDown') {\n  //     event.preventDefault();\n  //   }\n  // }\n  updateSearchForTerm(previousTerm, newTerm) {\n    const searchForTextElement = this.querySelector('[data-predictive-search-search-for-text]');\n    const currentButtonText = searchForTextElement?.innerText;\n    if (currentButtonText) {\n      if (currentButtonText.match(new RegExp(previousTerm, 'g')).length > 1) {\n        // The new term matches part of the button text and not just the search term, do not replace to avoid mistakes\n        return;\n      }\n      const newButtonText = currentButtonText.replace(previousTerm, newTerm);\n      searchForTextElement.innerText = newButtonText;\n    }\n  }\n\n  getSearchResults(searchTerm) {\n    const queryKey = searchTerm.replace(' ', '-').toLowerCase();\n    this.setLiveRegionLoadingState();\n\n    if (this.cachedResults[queryKey]) {\n      this.renderSearchResults(this.cachedResults[queryKey]);\n      return;\n    }\n\n    fetch(`${this.action}?q=${encodeURIComponent(searchTerm)}&${this.params}section_id=${this.sectionIdResults}`, {\n      signal: this.abortController2.signal,\n    })\n      .then((response) => {\n        if (!response.ok) {\n          var error = new Error(response.status);\n          this.close();\n          throw error;\n        }\n\n        return response.text();\n      })\n      .then((text) => {\n        const resultsMarkup = new DOMParser()\n          .parseFromString(text, 'text/html')\n          .querySelector('#shopify-section-' + this.sectionIdResults).innerHTML;\n        // Save bandwidth keeping the cache in all instances synced\n        this.allPredictiveSearchInstances.forEach((predictiveSearchInstance) => {\n          this.cachedResults[queryKey] = resultsMarkup;\n        });\n        this.renderSearchResults(resultsMarkup);\n      })\n      .catch((error) => {\n        if (error?.code === 20) {\n          // Code 20 means the call was aborted\n          return;\n        }\n        this.close();\n        throw error;\n      });\n  }\n\n  setLiveRegionLoadingState() {\n    this.hideWrapper.style.cssText = \"display: none;\";\n    this.showWrapper.style.cssText = \"display: block;\";\n    this.skeleton.classList.remove(\"hdt-hidden\");\n\n    this.setAttribute('loading', true);\n  }\n\n  renderSearchResults(resultsMarkup) {\n    this.predictiveSearchResults.innerHTML = resultsMarkup;\n    this.setAttribute('results', true);\n\n    this.setLiveRegionResults();\n    this.openSearch();\n    document.dispatchEvent(new CustomEvent(\"currency:update\"));\n  }\n\n  setLiveRegionResults() {\n    this.removeAttribute('loading');\n  }\n\n  openSearch() {\n    //this.setAttribute('open', true);\n    this.input.setAttribute('aria-expanded', true);\n    this.skeleton.classList.add(\"hdt-hidden\");\n    this.isOpen = true;\n  }\n\n  close(clearSearchTerm = false) {\n    this.closeResults(clearSearchTerm);\n    this.isOpen = false;\n  }\n\n  closeResults(clearSearchTerm = false) {\n    if (clearSearchTerm) {\n      this.input.value = '';\n      this.removeAttribute('results');\n      this.hideWrapper.style.cssText = \"display: block;\";\n      this.showWrapper.style.cssText = \"display: none;\";\n      this.predictiveSearchResults.innerHTML = \"\";\n    }\n    const selected = this.querySelector('[aria-selected=\"true\"]');\n\n    if (selected) selected.setAttribute('aria-selected', false);\n\n    this.input.setAttribute('aria-activedescendant', '');\n    this.removeAttribute('loading');\n    //this.removeAttribute('open');\n    this.input.setAttribute('aria-expanded', false);\n    this.resultsMaxHeight = false;\n    this.predictiveSearchResults.removeAttribute('style');\n  }\n}\n\ncustomElements.define('hdt-predictive-search', PredictiveSearch);\n\n// --------------------------\n// Delivery Time\n// --------------------------\n// https://unpkg.com/dayjs@1.11.10/dayjs.min.js\nimport dayjs from \"@theme/dayjs\";\ndayjs.locale('en'); // use locale globally\nclass orderDelivery extends VariantChangeBase {\n  constructor() {\n    super();\n    this.config = JSON.parse(this.getAttribute('config'));\n    this.offDays = this.config.off_day.replace(/ /g, '').split(\",\");\n    this.nowDay = dayjs();\n    var format_day = this.config.format_day,\n      time = this.config.time.replace(\"24:00:00\", \"23:59:59\"),\n      arrDayWeek = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"],\n      dateStart = this.config.estimateStartDate || 0,\n      dateEnd = this.config.estimateEndDate || 0,\n      excludeDays = this.config.cut_day.replace(/ /g, '').split(\",\"),\n      startDay = dayjs(),\n      i = 0,\n      endDay = dayjs(),\n      j = 0,\n      nowTime = this.nowDay.format('HHmmss'),\n      timeint = time.replace(/ /g, '').replace(/:/g, ''),\n\n      arrDay = themeHDN.extras.order.dayNames.replace(/ /g, '').split(\",\"),\n      arrMth = themeHDN.extras.order.monthNames.replace(/ /g, '').split(\",\");\n    /**\n     * Check Time, if nowTime >=  timeint +1 day\n     */\n    if (parseInt(nowTime) >= parseInt(timeint)) {\n      this.nowDay = this.nowDay.add(1, 'day');\n      startDay = startDay.add(1, 'day');\n      endDay = endDay.add(1, 'day');\n    }\n\n    /**\n     * Mode: 2 - Shipping + delivery\n     * Mode: 1 - Only delivery\n     */\n\n    if (this.config.mode == '2') {\n\n      // START DATE\n      // if ngay khach mua trung voi ngay loai tru tang 1 ngay\n      while (excludeDays.indexOf(arrDayWeek[startDay.format('d')]) > -1 || this.offDays.indexOf(startDay.format('DD/MM/****')) > -1 || this.offDays.indexOf(startDay.format('DD/MM/YYYY')) > -1) {\n        startDay = startDay.add(1, 'day');\n      }\n      while (i < dateStart) {\n        i++;\n        startDay = startDay.add(1, 'day');\n        if (excludeDays.indexOf(arrDayWeek[startDay.format('d')]) > -1 || this.offDays.indexOf(startDay.format('DD/MM/****')) > -1 || this.offDays.indexOf(startDay.format('DD/MM/YYYY')) > -1) {\n          i--;\n        }\n      }\n\n      // END DATE\n      // if ngay khach mua trung voi ngay loai tru tang 1 ngay\n      while (excludeDays.indexOf(arrDayWeek[endDay.format('d')]) > -1 || this.offDays.indexOf(endDay.format('DD/MM/****')) > -1 || this.offDays.indexOf(endDay.format('DD/MM/YYYY')) > -1) {\n        endDay = endDay.add(1, 'day');\n      }\n\n      while (j < dateEnd) {\n        j++;\n        endDay = endDay.add(1, 'day');\n        if (excludeDays.indexOf(arrDayWeek[endDay.format('d')]) > -1 || this.offDays.indexOf(endDay.format('DD/MM/****')) > -1 || this.offDays.indexOf(endDay.format('DD/MM/YYYY')) > -1) {\n          j--;\n        }\n      }\n\n    }\n    else {\n\n      // START DATE\n      startDay = startDay.add(dateStart, 'day');\n      while (excludeDays.indexOf(arrDayWeek[startDay.format('d')]) > -1 || this.offDays.indexOf(startDay.format('DD/MM/****')) > -1 || this.offDays.indexOf(startDay.format('DD/MM/YYYY')) > -1) {\n        startDay = startDay.add(1, 'day');\n      }\n\n      // END DATE\n      endDay = endDay.add(dateEnd, 'day');\n      while (excludeDays.indexOf(arrDayWeek[endDay.format('d')]) > -1 || this.offDays.indexOf(endDay.format('DD/MM/****')) > -1 || this.offDays.indexOf(endDay.format('DD/MM/YYYY')) > -1) {\n        endDay = endDay.add(1, 'day');\n      }\n      // endDay = endDay.add(this.offDaysf(endDay), 'day');\n\n    }\n\n    /**\n     * Translate day, month\n     * https://day.js.org/docs/en/display/format\n     */\n    arrDay = this.ArrUnique(arrDay);\n    arrMth = this.ArrUnique(arrMth);\n\n    var startDayDInt = parseInt(startDay.format('D')),\n      daystStart = startDayDInt + this.nth(startDayDInt),\n      MntStart = arrMth[parseInt(startDay.format('M')) - 1],\n      dayStart = arrDay[parseInt(startDay.format('d'))],\n\n      EndDayDInt = parseInt(endDay.format('D')),\n      daystEnd = EndDayDInt + this.nth(EndDayDInt),\n      MntEnd = arrMth[parseInt(endDay.format('M')) - 1],\n      dayEnd = arrDay[parseInt(endDay.format('d'))];\n\n    //console.log( startDayDInt, EndDayDInt )\n    if ($4('[data-start-delivery]', this)) $4('[data-start-delivery]', this).innerHTML = startDay.format(format_day).replace('t44', dayStart).replace('t45', daystStart).replace('t46', MntStart);\n    if ($4('[data-end-delivery]', this)) $4('[data-end-delivery]', this).innerHTML = endDay.format(format_day).replace('t44', dayEnd).replace('t45', daystEnd).replace('t46', MntEnd);\n  }\n\n  ArrUnique(arr) {\n    var onlyUnique = function (value, index, self) {\n      return self.indexOf(value) === index;\n    };\n    return arr.filter(onlyUnique);\n  }\n\n  nth(d) {\n    if (d > 3 && d < 21) return 'th';\n    switch (d % 10) {\n      case 1: return \"st\";\n      case 2: return \"nd\";\n      case 3: return \"rd\";\n      default: return \"th\";\n    }\n  }\n  #preVariantId;\n  onVariantChanged(event) {\n    const variant = event.detail.variant;\n    if (variant && this.#preVariantId != variant.id) {\n      if (variant.available) {\n        this.closest(\".hdt-product-info__item\").style.display = \"\";\n        console.log(this.config.hideWithPreorder);\n        if (variant.variant_state.pre_order && this.config.hideWithPreorder) {\n          this.closest(\".hdt-product-info__item\").style.display = \"none\"\n        }\n      }\n      else {\n        this.closest(\".hdt-product-info__item\").style.display = \"none\"\n      }\n    }\n  }\n}\ncustomElements.define('order-delivery', orderDelivery);\nclass countdownSimple extends HTMLElement {\n  x = 0;\n  constructor() {\n    super();\n\n    /** Countdown\n     * [days] [hours] [mins] [secs]\n     */\n\n    this.config = JSON.parse(this.getAttribute('config'));\n    const time = this.config.time.replace(\"24:00:00\", \"23:59:59\")\n\n    if (time == '19041994') return;\n    this.textTemp = $4(\"template\", this).innerHTML;\n    this.notHasDay = !this.textTemp.includes('[days]');\n    let today = dayjs();\n\n    const nowTime = today.format('HHmmss'),\n      configTime = time.replace(/ /g, '').replace(/:/g, '')\n\n    if (parseInt(nowTime) >= parseInt(configTime)) {\n      today = today.add(1, 'day');\n    }\n    // Set the date we're counting down to\n    // \"2030-01-05 15:37:25\"\n    this.countDownDate = new Date(`${today.format('YYYY-MM-DD')} ${time}`).getTime();\n\n    // Update the count down every 1 second\n    this.#update();\n    this.x = setInterval(this.#update.bind(this), this.textTemp.includes('[secs]') ? 1000 : 60000);\n  }\n  #update() {\n    // Get today's date and time\n    const now = new Date().getTime();\n\n    // Find the distance between now and the count down date\n    const distance = this.countDownDate - now;\n\n    // Time calculations for days, hours, minutes and seconds\n    const days = Math.floor(distance / (1000 * 60 * 60 * 24));\n    let hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\n    const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\n    const seconds = Math.floor((distance % (1000 * 60)) / 1000);\n    if (this.notHasDay) hours = days * 24 + hours;\n\n    // Display the result in the element\n    this.innerHTML = this.textTemp.replace('[days]', String(days).padStart(2, '0')).replace('[hours]', String(hours).padStart(2, '0')).replace('[mins]', String(minutes).padStart(2, '0')).replace('[secs]', String(seconds).padStart(2, '0'));\n\n    // If the count down is finished, write some text\n    if (distance < 0) {\n      clearInterval(this.x);\n      // EXPIRED\n      this.hidden = true\n    }\n  }\n  disconnectedCallback() {\n    clearInterval(this.x);\n  }\n}\ncustomElements.define('hdt-countdown-simple', countdownSimple);\n\n\n// Begin instagram feed api\nconst dataInstagramCache = {};\nclass instagramFeedAPI extends HTMLElement {\n  constructor() {\n    super();\n    this.config = JSON.parse(this.getAttribute('config'));\n    if (Shopify.designMode) {\n      document.addEventListener('shopify:section:select', (event) => {\n        this.refresh_ins();\n      })\n      document.addEventListener('shopify:section:deselect', (event) => {\n        const { acc, id } = this.config;\n        var data = sessionStorage.getItem('hdt_ins' + acc + id);\n        if (data != null && data != '') {\n          sessionStorage.removeItem('hdt_ins' + acc + id);\n        }\n      })\n    }\n  }\n  connectedCallback() {\n    this.refresh_ins();\n  }\n  refresh_ins() {\n    const { acc, id } = this.config;\n\n    if (acc == '') return;\n\n    var data = sessionStorage.getItem('hdt_ins' + acc + id);\n\n    if (data != null && data != '') {\n      // calculate expiration time for content,\n      // to force periodic refresh after 30 minutes\n      var now = new Date(),\n        expiration = new Date(JSON.parse(data).timestamp);\n\n      expiration.setMinutes(expiration.getMinutes() + 30);\n\n      // ditch the content if too old\n      if (now.getTime() > expiration.getTime()) {\n        data = null;\n        sessionStorage.removeItem('hdt_ins' + acc + id);\n      }\n    }\n    if (data != null && data != '') {\n      this.instagramHTML(JSON.parse(data).content, false);\n    }\n    else {\n      if (dataInstagramCache[acc]) {\n        $4('.hdt-slider__container', this).innerHTML = dataInstagramCache[acc];\n        $4('.hdt-ins-loading', this)?.remove();\n        const lazySlider = $4('hdt-slider-lazy', this);\n        if (lazySlider) {\n          lazySlider.hidden = false;\n          lazySlider.InitLazy();\n        }\n        return;\n      }\n\n      fetch('https://graph.instagram.com/me/media?fields=id,media_type,media_url,permalink,thumbnail_url,caption,children&access_token=' + atob(acc))\n        .then((response) => {\n          if (!response.ok) {\n            throw new Error(\"not ok\");\n          }\n          return response.json()\n        })\n        //.then(function(res)\n        .then((res) => {\n          //console.log('Success:', res);\n          this.instagramHTML(res.data, true);\n        })\n        .catch((err) => {\n          $4('.hdt-ins-loading', this)?.remove();\n          console.error(\"Instagram Feed:error fetch\");\n          console.error(err);\n        });\n    }\n  }\n  instagramHTML(data, saveSessionStorageIns) {\n    const arrIcons = ($4('.hdt-icons-ins-svg', this).innerHTML || '').split('[hdtplit]'),\n      icons = {\n        image: arrIcons[0],\n        video: arrIcons[1],\n        carousel_album: arrIcons[2]\n      },\n      { id, acc, target, limit } = this.config;\n    let html = '';\n\n    data.forEach((el, index) => {\n      if (index >= limit) return 0;\n      const media_type = el.media_type.toLowerCase();\n      html += `<div class=\"hdt-slider__slide hdt-ins-type-${media_type}\"><a calc-nav data-no-instant rel=\"nofollow\" class=\"hdt-ins-inner hdt-block hdt-relative hdt-oh hdt-radius\" href=\"${el.permalink}\" target=\"${target}\"><div class=\"hdt-ratio\"><img src=\"${el.thumbnail_url || el.media_url}\" class=\"hdt-ins-img\" loading=\"lazy\"></div><div class=\"hdt-ins-icon\">${icons[media_type]}</div></a></div>`\n    });\n    dataInstagramCache[acc] = html;\n    $4('.hdt-slider__container', this).innerHTML = html;\n    $4('.hdt-ins-loading', this)?.remove();\n    const lazySlider = $4('hdt-slider-lazy', this);\n    if (lazySlider) {\n      lazySlider.hidden = false;\n      lazySlider.InitLazy();\n    }\n\n    if (saveSessionStorageIns) {\n      sessionStorage.setItem('hdt_ins' + acc + id, JSON.stringify({\n        timestamp: new Date(),\n        content: data\n      }));\n    }\n  }\n}\ncustomElements.define('ins-feed-api', instagramFeedAPI);\n\n\n// product description - readmore\nclass ProductDescription extends HTMLElement{\n  constructor(){\n    super();\n  }\n  connectedCallback(){\n    const handleIntersection = (entries, observer) => {\n      if (!entries[0].isIntersecting) return;\n      observer.unobserve(this);\n      this.init();\n    };\n\n    new IntersectionObserver(handleIntersection.bind(this), { rootMargin: '0px 0px 0px 0px' }).observe(this);\n  }\n  init(){\n    \n    this.lm_btn = this.querySelector('[data-button]');\n    this.content = this.querySelector('[data-content]');\n    this.m_h = parseInt(this.dataset.heightLimit);\n    if(!this.lm_btn || !this.content || !this.m_h) return;\n    \n    let content_h = this.content.scrollHeight;\n    // console.dir(this.content);\n    if(this.m_h > content_h){\n      this.lm_btn.style.setProperty('display', 'none');\n      return;\n    }\n\n    this.content.style.setProperty('--height', `${content_h}px`);\n    this.content.style.setProperty('max-height', `${this.m_h}px`);\n    this.content.style.setProperty('--max-height', `${this.m_h}px`);\n\n    this.lm_btn.addEventListener('click',()=>{\n      this.classList.toggle('is--less');\n    })\n  }\n}\ncustomElements.define('product-description',ProductDescription);\n\n\n\n// check purchase code\nif (Shopify.designMode) {\n\n  /**\n  * If it's a global variable then window[variableName] or in your case window[\"onlyVideo\"] should do the trick.\n  * https://stackoverflow.com/questions/5613834/convert-string-to-variable-name-in-javascript\n  */\n  function isStorageSupported(type) {\n    // Return false if we are in an iframe without access to sessionStorage\n    // window.self !== window.top\n\n    var storage = (type === 'session') ? window.sessionStorage : window.localStorage;\n\n    try {\n      storage.setItem('t4s', 'test');\n      storage.removeItem('t4s');\n      return true;\n    } catch (error) {\n      return false;\n    }\n  };\n\n  var ThemeCode = atob(window[atob('Y0hWeVkyaGg=')]),\n    ThemeName_base64 = window[atob('VkdobGJXVk9ZVzFsVkRR')],\n    ThemeName = atob(ThemeName_base64),\n    CookieName = 'SXNBY3RpdmVUaGVtZQ==' + ThemeName_base64,\n    ShopEmail = atob(window[atob('VTJodmNFMWxiMVEw')]),\n    isTrueSet = (sessionStorage.getItem(CookieName) === 'true'),\n    str_temp_active = atob('I3Q0cy10ZW1wLWtleS1hY3RpdmU='), // #t4s-temp-key-active\n    str_purchase = atob('cHVyY2hhc2VfY29kZXQ0'); // purchase_codet4;\n\n  // console.log(ThemeCode,ThemeName,ShopEmail,CookieName,str_temp_active,str_purchase)\n  function alert_active_html() {\n    return `<section id=\"${str_purchase}\" style=\"display: flex !important\">${$4(str_temp_active).innerHTML}</section>`;\n  };\n\n  // console.log('ThemeCode', ThemeCode, isTrueSet)\n\n  if (ThemeCode == '') {\n    let dom1 = (new DOMParser).parseFromString(alert_active_html(), \"text/html\");\n    document.body.append(dom1.body.firstElementChild);\n    let dom2 = (new DOMParser).parseFromString('<div id=\"luffyabc194\"><style>body>*:not(#purchase_codet4) {opacity: 0;pointer-events: none;</style></div>', \"text/html\");\n    document.body.prepend(dom2.body.firstElementChild);\n    sessionStorage.removeItem(CookieName);\n    localStorage.removeItem(CookieName);\n  }\n  else if (!isTrueSet) {\n\n    //console.log(ShopEmail, ThemeName, ThemeCode);\n\n    var domain = window.location.hostname,\n      mix = ['4', 't', 'h', 'e', 'p', 'l', 'i', 'c', 'o', '/', '.', ':', 'n', 's'],\n      mix_domain = mix[2] + mix[1] + mix[1] + mix[4] + mix[13] + mix[11] + mix[9] + mix[9] + mix[5] + mix[6] + mix[7] + mix[10] + mix[1] + mix[2] + mix[3] + mix[0] + mix[10] + mix[7] + mix[8] + mix[9] + mix[5] + mix[6] + mix[7] + mix[3] + mix[12] + mix[13] + mix[3] + mix[9] + mix[7] + mix[2] + mix[3] + mix[7] + 'k',\n      data = {\n        \"shopify_domain\": domain,\n        \"email\": ShopEmail,\n        \"theme\": ThemeName,\n        \"purchase_code\": ThemeCode\n      };\n\n    fetch(mix_domain, {\n      \"headers\": {\n        \"accept\": \"*/*\",\n        \"cache-control\": \"no-cache\",\n        \"x-requested-with\": \"XMLHttpRequest\"\n      },\n      \"body\": btoa(encodeURIComponent(JSON.stringify(data))),\n      \"method\": \"POST\",\n      \"mode\": \"cors\"\n    })\n      .then(function (response) {\n        if (response.ok) {\n          return response.json()\n        } throw \"\"\n      })\n      .then(function (response) {\n        let dom = (new DOMParser).parseFromString(alert_active_html(), \"text/html\");\n\n        if (response.status == 1) {\n\n          dom.body.firstElementChild.innerHTML = \"<p>ACTIVATED SUCCESSFULLY. Thanks for buying my theme!</p>\";\n          document.body.append(dom.body.firstElementChild);\n\n          // Set a cookie to expire in 1 hour in Javascript\n          var isActived = localStorage.getItem(CookieName);\n          sessionStorage.setItem(CookieName, 'true')\n\n          if (isActived === 'true') {\n            $4(atob('I3B1cmNoYXNlX2NvZGV0NA==')).remove(); // #purchase_codet4\n            // $4(atob('I2x1ZmZ5YWJjMTk0'))?.remove(); //#luffyabc194\n          }\n          else {\n            localStorage.setItem(CookieName, \"true\");\n            setTimeout(function () {\n              $4(atob('I3B1cmNoYXNlX2NvZGV0NA==')).remove(); // #purchase_codet4\n              // $4(atob('I2x1ZmZ5YWJjMTk0'))?.remove(); //#luffyabc194\n            }, 1000);\n          }\n\n        }\n        else {\n\n          var mess = response.message;\n          if (mess == \"No sale belonging to the current user found with that code\") {\n\n            dom.body.firstElementChild.innerHTML = \"<p>Purchase code error. It is a sales reversal or a refund. :(((</p>\";\n\n          }\n          else if (mess.length == 58 || mess.length == 101) {\n            dom.body.firstElementChild.innerHTML = \"<p>That license key doesn't appear to be valid. Please check your purchase code again!<br>Please open a ticket at <a href='https://support.the4.co' target='_blank'><span>support.the4.co</span></a> if you have any question.</p>\";\n\n          }\n          else if (mess.length == 104) {\n            dom.body.firstElementChild.innerHTML = \"<p>The license not match with current theme.!<br>Please open a ticket at <a href='https://support.the4.co' target='_blank'><span>support.the4.co</span></a> if you have any question.</p>\";\n          }\n          else {\n            try {\n              var mess = mess.split('active domain `')[1].split('`. ')[0];\n            }\n            catch (err) {\n              //var mess = mess;\n            }\n            dom.body.firstElementChild.innerHTML = \"<p>Your purchase code is invalided since it is being activated at another store \" + mess + \".<br> Please open a ticket at <a class='cg' href='https://support.the4.co' target='_blank'><span>support.the4.co</span></a> to get quick assistance.</p>\";\n          }\n          document.body.append(dom.body.firstElementChild);\n\n        }\n\n      }).catch(function (e) {\n        //}).catch((e)=>{\n        console.error(e)\n      });\n\n  }\n}\n// end check purchase code\n\n// Masonry layout + filter sorting\n// Masonry Layout Component\nclass MasonryLayout extends HTMLElement {\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    this.style.position = 'relative';\n    const configAttr = this.getAttribute('config');\n    if (configAttr) {\n      try {\n        const userConfig = JSON.parse(configAttr);\n        this.config = { ...userConfig };\n      } catch (e) {\n        this.config = {\n          col_dk: 5,\n          col_tb: 4,\n          col_mb: 2,\n          gap: 30,\n          selector: '.hdt-masonry-item'\n        };\n      }\n    }\n    // console.log(this.config)\n    this.waitForImages().then(() => {\n      this.layoutMasonry();\n      this.animateItems();\n      setTimeout(() => {\n        items.forEach(item => {\n          item.style.transition = 'left 0.3s ease, top 0.3s ease, width 0.3s ease';\n        });\n      }, items?.length * 100 + 500 || 1000);\n    });\n    window.addEventListener('resize', () => {\n      this.layoutMasonry();\n      // this.animateItems();\n    });\n  }\n\n\n  waitForImages() {\n    const images = Array.from(this.querySelectorAll('img'));\n    // console.log(images)\n    if (images.length === 0) return Promise.resolve();\n    let loaded = 0;\n    return new Promise(resolve => {\n      images.forEach(img => {\n        const item = img.closest(this.config.selector);\n        function hideLoading() {\n          const loading = item?.querySelector('.item-loading');\n          if (loading) loading.style.display = 'none';\n          img.style.display = 'block';\n        }\n        if (img.complete) {\n          hideLoading();\n          loaded++;\n          if (loaded === images.length) resolve();\n        } else {\n          // console.log(img)\n          img.style.display = 'none';\n          img.addEventListener('load', () => {\n            hideLoading();\n            loaded++;\n            if (loaded === images.length) resolve();\n          }, { once: true });\n          img.addEventListener('error', () => {\n            hideLoading();\n            loaded++;\n            if (loaded === images.length) resolve();\n          }, { once: true });\n        }\n      });\n    });\n  }\n\n  layoutMasonry() {\n    const items = Array.from(this.querySelectorAll(this.config.selector)).filter(item => item.style.display !== 'none');\n    // console.log(items)\n    const containerWidth = this.clientWidth;\n    let columnCount = this.config.col_dk;\n    let gap = this.config.gap;\n    if (containerWidth < 768) columnCount = this.config.col_mb, gap = this.config.gap_mb;\n    else if (containerWidth < 1149) columnCount = this.config.col_tb;\n\n    const columnHeights = Array(columnCount).fill(0);\n    const columnWidth = (containerWidth - gap * (columnCount - 1)) / columnCount;\n    // B\u01B0\u1EDBc 1: set width cho t\u1EA5t c\u1EA3 item\n    items.forEach(item => {\n      item.style.display = 'block';\n      item.style.position = 'absolute';\n      item.style.width = `${columnWidth}px`;\n    });\n    // B\u01B0\u1EDBc 2: \u00E9p reflow\n    items.forEach(item => void item.offsetHeight);\n    // B\u01B0\u1EDBc 3: t\u00EDnh to\u00E1n v\u1ECB tr\u00ED\n    items.forEach(item => {\n      const minCol = columnHeights.indexOf(Math.min(...columnHeights));\n      const x = minCol * (columnWidth + gap);\n      const y = columnHeights[minCol];\n      item.style.left = `${x}px`;\n      item.style.top = `${y}px`;\n      columnHeights[minCol] += item.offsetHeight + gap;\n    });\n    this.style.height = Math.max(...columnHeights) + 'px';\n  }\n\n  animateItems() {\n    const items = Array.from(this.querySelectorAll(this.config.selector));\n    items.forEach((item, index) => {\n      setTimeout(() => {\n        item.style.visibility = 'visible';\n        item.style.opacity = '0';\n        item.style.transform = 'translateY(30px)';\n        item.style.transition = 'opacity 0.5s, transform 0.5s';\n        setTimeout(() => {\n          item.style.opacity = '1';\n          item.style.transform = 'translateY(0)';\n        }, 10);\n      }, index * 100);\n    });\n  }\n}\n\n// Filter Sorting Component\nclass FilterSorting extends HTMLElement {\n  constructor() {\n    super();\n    this.selector = this.getAttribute('config') ? JSON.parse(this.getAttribute('config')).selector : '.hdt-masonry-item';\n  }\n\n  connectedCallback() {\n    // Kh\u00F4ng render v\u00E0o shadowRoot n\u1EEFa, ch\u1EC9 c\u1EA7n gi\u1EEF nguy\u00EAn DOM\n    this.initializeFilter();\n  }\n\n  initializeFilter() {\n    // L\u1EA5y c\u00E1c filter-item trong DOM th\u01B0\u1EDDng\n    const filterItems = this.querySelectorAll('[data-category]');\n    // L\u1EA5y masonry-layout b\u00EAn trong\n    const masonry = this.querySelector('hdt-masonry-layout');\n    if (!masonry) return;\n    const items = masonry.querySelectorAll(this.selector);\n    // console.log(items)\n\n    filterItems.forEach(filter => {\n      filter.addEventListener('click', () => {\n        // Remove active class from all filters\n        filterItems.forEach(f => f.classList.remove('hdt-active'));\n        // Add active class to clicked filter\n        filter.classList.add('hdt-active');\n\n        const category = filter.getAttribute('data-category');\n        items.forEach(item => {\n          if (category === 'all' || item.classList.contains(category)) {\n            item.style.display = 'block';\n            setTimeout(() => {\n              item.style.opacity = '1';\n              item.style.transform = 'translateY(0)';\n            }, 100);\n          } else {\n            item.style.opacity = '0';\n            item.style.transform = 'translateY(20px)';\n            setTimeout(() => {\n              item.style.display = 'none';\n            }, 300);\n          }\n        });\n        // G\u1ECDi l\u1EA1i layoutMasonry sau khi filter\n        setTimeout(() => {\n          if (typeof masonry.layoutMasonry === 'function') {\n            masonry.layoutMasonry();\n          }\n        }, 350); // \u0110\u1EE3i animation \u1EA9n/hi\u1EC7n xong\n      });\n    });\n  }\n}\n\n// \u0110\u0103ng k\u00FD custom elements\ncustomElements.define('hdt-masonry-layout', MasonryLayout);\ncustomElements.define('hdt-filter-sorting', FilterSorting);\n\n\n/**\n  * Cookies\n  * https://help.shopify.com/en/manual/your-account/privacy/cookies\n  * https://shopify.dev/themes/trust-security/cookie-banner#create-a-snippet-to-host-the-banner\n  * https://help.shopify.com/en/manual/your-account/privacy/privacy-preferences-manager?shpxid=965d0d2a-08E2-4654-4A13-D3F38646AC5D\n  * https://shopify.dev/api/consent-tracking\n*/\n\nfunction convertNameCookies(name) {\n  return name.replace(/=/g, '_');\n}\nfunction setCookie(name, value, days, hours) {\n  var expires = \"\";\n  if (days || hours) {\n    var date = new Date();\n    date.setTime(date.getTime() + (days ? days * 24 * 60 * 60 * 1000 : hours * 60 * 60 * 1000));\n    expires = \"; expires=\" + date.toString();\n  }\n  document.cookie = convertNameCookies(name) + \"=\" + (value || \"\") + expires + \"; path=/\";\n}\nfunction getCookie(name) {\n  var nameEQ = convertNameCookies(name) + \"=\";\n  var ca = document.cookie.split(';');\n  for (var i = 0; i < ca.length; i++) {\n    var c = ca[i];\n    while (c.charAt(0) == ' ') c = c.substring(1, c.length);\n    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);\n  }\n  return null;\n}\nfunction eraseCookie(name) {\n  document.cookie = convertNameCookies(name) + '=; Max-Age=-99999999;';\n}\n\nclass cookiesBar extends HTMLElement {\n  constructor() {\n    super();\n    this.cookies = JSON.parse(this.getAttribute(\"configs\"));\n    this.cookies.cookiesName = \"theme4:cookies\";\n    this.cookiesDrawer = this.querySelector(\".hdt-drawer-cookie\");\n    this.isShowCookiesAll = (this.cookies.show == '1');\n    this.acceptBtn = this.cookiesDrawer.querySelector(\".hdt-pp_cookies__accept-btn\");\n    this.declineBtn = this.cookiesDrawer.querySelector(\".hdt-pp_cookies__decline-btn\");\n    this.loadCookieBanner(this);\n    let self = this;\n    this.acceptBtn?.addEventListener(\"click\", this.handleAccept.bind(this));\n    this.declineBtn?.addEventListener(\"click\", this.handleDecline.bind(this));\n    if (Shopify.designMode) {\n      document.addEventListener('shopify:section:select', (event) => {\n        const cookiesSelect = event.target.classList.contains('sys-cookies');\n        if (!cookiesSelect) return;\n        self.showCookiesBanner();\n      })\n      document.addEventListener('shopify:section:deselect', (event) => {\n        const cookiesSelect = event.target.classList.contains('sys-cookies');\n        if (!cookiesSelect) return;\n        self.hideCookiesBanner();\n      })\n    }\n  }\n  handleAccept() {\n    if (this.isShowCookiesAll) {\n      setCookie(this.cookies.cookiesName, 'accepted', parseInt(this.cookies.day_next));\n    }\n    window.Shopify.customerPrivacy.setTrackingConsent(true, this.hideCookiesBanner.bind(this));\n  }\n\n  handleDecline() {\n    if (this.isShowCookiesAll) {\n      setCookie(this.cookies.cookiesName, 'accepted', parseInt(this.cookies.day_next));\n    }\n    window.Shopify.customerPrivacy.setTrackingConsent(false, this.hideCookiesBanner.bind(this));\n  }\n\n  showCookiesBanner() {\n    this.cookiesDrawer.classList.add('cookies-show');\n  }\n\n  hideCookiesBanner() {\n    this.cookiesDrawer.classList.remove('cookies-show');\n  }\n\n  initCookieBanner() {\n    const userCanBeTracked = window.Shopify.customerPrivacy.userCanBeTracked();\n    const userTrackingConsent = window.Shopify.customerPrivacy.getTrackingConsent();\n    if ((!userCanBeTracked && userTrackingConsent === 'no_interaction') || this.isShowCookiesAll) {\n      if (!Shopify.designMode) {\n        this.showCookiesBanner();\n      }\n    }\n  }\n\n  loadCookieBanner() {\n\n    let self = this;\n    if (this.cookiesDrawer.length == 0) return;\n    this.cookies.day_next = this.cookies.day_next || 60;\n    this.isShowCookiesAll = (this.cookies.show == '1');\n    if (getCookie(this.cookies.cookiesName) == 'accepted' || this.cookiesDrawer.hasAttribute(\"open\")) return;\n    window.Shopify.loadFeatures([\n      {\n        name: 'consent-tracking-api',\n        version: '0.1',\n      }\n    ],\n      function (error) {\n        if (error) {\n          throw error;\n        }\n        self.initCookieBanner();\n      });\n  }\n}\n\ncustomElements.define('sys-cookies', cookiesBar);\n\n// --------------------------\n// Newsletter\n// --------------------------\n\nclass newsletterModal extends HTMLElement {\n  constructor() {\n    super();\n    this.configs = JSON.parse(this.getAttribute('configs'));\n    this.modal = this.querySelector(\"hdt-modal\");\n    if (!Shopify.designMode && getCookie(\"theme4:newsletter:\" + this.configs.id) == 'shown') {\n      this.modal.setAttribute('closed', '');\n      return;\n    }\n    this.dialog = this.querySelector(\"dialog\");\n    this.action_close = this.querySelectorAll('[action-close]');\n    this.time_delay = this.configs.time_delay;\n    this.day_next = this.configs.day_next;\n    if (Shopify.designMode) {\n      this._shopifySection = this._shopifySection || this.closest(\".shopify-section\");\n      this._shopifySection.addEventListener('shopify:section:load', () => this.modal.open());\n      this._shopifySection.addEventListener('shopify:section:select', () => this.modal.open());\n      this._shopifySection.addEventListener('shopify:section:deselect', () => this.modal.close());\n    }\n  }\n\n  connectedCallback() {\n    if (!Shopify.designMode) {\n      if (getCookie(\"theme4:newsletter:\" + this.configs.id) == 'shown') {\n        this.modal.setAttribute('closed', '');\n        return;\n      }\n      const fnShow = this.showModal.bind(this);\n      const fnShowScroll = this.showModalScroll.bind(this);\n      if (this.configs.after === 'time') {\n        let tm = setTimeout(fnShow, this.configs.time_delay * 1000);\n        this.dialog.addEventListener(`${dialogClose}`, () => {\n          clearTimeout(tm);\n          this.hideModal(false, true);\n        });\n      }\n      else {\n        window.addEventListener(\"scroll\", fnShowScroll);\n        this.dialog.addEventListener(`${dialogClose}`, () => {\n          window.removeEventListener(\"scroll\", fnShowScroll);\n          this.hideModal(false, true);\n        });\n      }\n      this.actionClose();\n    }\n  }\n\n  disconnectedCallback() {\n  }\n\n  showModal() {\n    this.modal.open();\n  }\n  showModalScroll() {\n    if (window.scrollY > this.configs.scroll_delay) {\n      this.modal.open();\n    }\n  }\n  hideModal(pause, off) {\n    if (pause) {\n\n    }\n    if (off) {\n\n      setCookie(\"theme4:newsletter:\" + this.configs.id, \"shown\", this.day_next);\n    }\n  }\n  actionClose() {\n    let self = this;\n    if (self.action_close) {\n      self.action_close.forEach(btn => {\n        btn.addEventListener('click', function () {\n          self.modal.close();\n          self.hideModal(false, true);\n          setTimeout(() => {\n            self.remove();\n          }, 500);\n        })\n      });\n    }\n  }\n\n}\ncustomElements.define('sys-newsletter', newsletterModal);\n\n// --------------------------\n// Exit\n// --------------------------\n\nclass exitModal extends HTMLElement {\n  constructor() {\n    super();\n    this.configs = JSON.parse(this.getAttribute('configs'));\n    if (!Shopify.designMode && getCookie(\"theme4:exit:\" + this.configs.id) == 'shown') return;\n    this.modal = this.querySelector(\"hdt-modal\");\n    this.dialog = this.querySelector(\"dialog\");\n    this.day_next = this.configs.day_next;\n    this.btn_copy = this.querySelector('button[is=\"discount_copy\"]');\n    this.discount = this.querySelector('[is=\"discount\"]');\n    if (Shopify.designMode) {\n      this._shopifySection = this._shopifySection || this.closest(\".shopify-section\");\n      this._shopifySection.addEventListener('shopify:section:load', () => this.showModal());\n      this._shopifySection.addEventListener('shopify:section:select', () => this.showModal());\n      this._shopifySection.addEventListener('shopify:section:deselect', () => this.modal.close());\n    }\n  }\n  connectedCallback() {\n    if (!Shopify.designMode) {\n      if (getCookie(\"theme4:exit:\" + this.configs.id) == 'shown') return;\n      if (this.configs.after === 'move_cursor') {\n        if (window.innerWidth > 1150) {\n          this.moveCursor();\n        } else {\n          this.scrollPage();;\n        }\n      }\n      else if (this.configs.after === 'scroll') {\n        this.scrollPage();\n      }\n      else {\n        this.amountTime();\n      }\n    }\n  }\n  // Move cursor out screen\n  moveCursor() {\n    const fnShow = this.showModal.bind(this);\n    document.querySelector(\"body\").addEventListener(\"mouseleave\", fnShow);\n    this.dialog.addEventListener(`${dialogClose}`, () => {\n      document.querySelector(\"body\").removeEventListener(\"mouseleave\", fnShow);\n      this.hideModal(false, true);\n    });\n  }\n  //  scroll page\n  scrollPage() {\n    const fnShow = this.showModal.bind(this);\n    let docHeight = document.documentElement.scrollHeight - document.documentElement.clientHeight - 500;\n    let scroll = () => {\n      if (window.scrollY >= docHeight) {\n        fnShow();\n      }\n    }\n    window.addEventListener(\"scroll\", scroll);\n    this.dialog.addEventListener(`${dialogClose}`, () => {\n      window.removeEventListener(\"scroll\", scroll);\n      this.hideModal(false, true);\n    });\n  }\n  // countdown time to show exit popup\n  amountTime() {\n    const fnShow = this.showModal.bind(this);\n    let tm = setTimeout(fnShow, this.configs.time_delay * 1000);\n    this.dialog.addEventListener(`${dialogClose}`, () => {\n      clearTimeout(tm);\n      this.hideModal(false, true);\n    });\n  }\n  showModal() {\n    let self = this;\n    this.modal.open();\n    if (self.btn_copy && self.discount) {\n      self.btn_copy.addEventListener('click', function () {\n        self.discount.select();\n        self.discount.setSelectionRange(0, 99999);\n        document.execCommand(\"copy\");\n        self.btn_copy.querySelector('.hdt-tooltip-text').innerText = `${themeHDN.extras.exit_popup.copied}: ${self.discount.value}`\n      })\n      self.btn_copy.addEventListener('mouseleave', function () {\n        self.btn_copy.querySelector('.hdt-tooltip-text').innerText = themeHDN.extras.exit_popup.copy\n      })\n    }\n  }\n  hideModal(pause, off) {\n    if (pause) {\n\n    }\n    if (off) {\n      setCookie(\"theme4:exit:\" + this.configs.id, \"shown\", this.day_next);\n    }\n  }\n}\ncustomElements.define('sys-exit', exitModal);\n\n// ================================\n// Add to cart animation\n// ================================\n\nclass atcAnimation extends HTMLElement {\n  constructor() {\n    super();\n    this.config = JSON.parse(this.getAttribute('config'));\n    this.atc_btn = this.querySelector('[data-animation]:not([disabled])');\n    if (!this.config || !this.atc_btn) {\n      return;\n    }\n  }\n  init() {\n    let class_list = this.config.ani.split(' ');\n    this.interval = setInterval(() => {\n      this.atc_btn.classList.add(...class_list);\n      this.timer = setTimeout(() => {\n        this.atc_btn.classList.remove(...class_list);\n      }, 1000);\n    }, parseInt(this.config.time) * 1000);\n  }\n  connectedCallback() {\n    if (this.config && this.atc_btn) {\n      this.init();\n    }\n  }\n  disconnectedCallback() {\n    clearInterval(this.interval);\n    clearTimeout(this.timer);\n  }\n}\n\ncustomElements.define('hdt-atc-animation', atcAnimation);\n\n\n// --------------------------\n// Collection Description\n// --------------------------\nclass readmoreLess extends HTMLElement {\n  constructor() {\n    super();\n    this.config = JSON.parse(this.getAttribute('config'));\n  }\n  init() {\n    // console.log(this.offsetHeight);\n    // console.log(parseInt(this.config.readMoreHeight))\n    // console.log(this.offsetHeight > parseInt(this.config.readMoreHeight))\n    this.closest(\"readmore-less-wrap\").classList.toggle(\"less--desc\", this.offsetHeight > parseInt(this.config.readMoreHeight)),\n      this.closest(\"readmore-less-wrap\").style.setProperty(\"--height\", `${this.offsetHeight}px`)\n  }\n  onResize() {\n    window.addEventListener(\"resize\", () => {\n      this.closest(\"readmore-less-wrap\").style.setProperty(\"--height\", \"\"),\n        this.init()\n    }\n    )\n  }\n  connectedCallback() {\n    const handleIntersection = (entries, observer) => {\n      entries[0].isIntersecting && (observer.unobserve(this),\n        this.init(),\n        this.onResize())\n    };\n    new IntersectionObserver(handleIntersection.bind(this), {\n      rootMargin: \"0px 0px 0px 0px\"\n    }).observe(this)\n  }\n}\ncustomElements.define(\"readmore-less\", readmoreLess);\n\nclass CounterItem extends HTMLElement {\n  constructor() {\n    super();\n    this.started = false;\n    this.start = Math.abs(parseInt(this.getAttribute('data-start')) || 0);\n    this.end = Math.abs(parseInt(this.getAttribute('data-end')) || 100);\n    this.speed = parseInt(this.getAttribute('data-speed')) || 1000;\n    this.number = this.querySelector('[data-number]');\n    this.duration = this.speed;\n    this.current = this.start;\n    this.number.innerHTML = this.start;\n  }\n\n  connectedCallback() {\n    // Ch\u1EC9 ch\u1EA1y n\u1EBFu end > start\n    if (this.end > this.start) {\n      this.observe();\n    }\n  }\n\n  observe() {\n    const observer = new IntersectionObserver((entries, observer) => {\n      entries.forEach(entry => {\n        if (entry.isIntersecting && !this.started) {\n          this.started = true;\n          this.animateCounter();\n          observer.unobserve(this);\n        }\n      });\n    }, { threshold: 0.6 });\n    observer.observe(this);\n  }\n\n  animateCounter() {\n    const startTime = performance.now();\n    const animate = (now) => {\n      const elapsed = now - startTime;\n      if (elapsed < this.duration) {\n        const value = Math.floor(this.start + (this.end - this.start) * (elapsed / this.duration));\n        this.number.innerHTML = value;\n        requestAnimationFrame(animate);\n      } else {\n        this.number.innerHTML = this.end;\n      }\n    };\n    requestAnimationFrame(animate);\n  }\n}\ncustomElements.define('hdt-counter-item', CounterItem);\n\n// --------------------------\n// Video popup\n// --------------------------\nclass videoPopup extends HTMLElement {\n  constructor() {\n    super();\n    this.dialog = $4(\"dialog\", this);\n    this.modal = $4(\"hdt-modal\", this);\n    this.video = $4(\"hdt-video-player\", this);\n    this.input = $4(\"input\", this);\n    this.root = this.closest('[data-video-inline');\n    if(!this.root){\n      this.root = this.closest(\"#shopify-section-\" + this.dataset.sectionId);\n    }\n    this.action = this.getAttribute('action');\n    this.button = $4(\"button[click-button]\", this);\n    this.closeButton = $4(\"button[close-button]\", this);\n  }\n  connectedCallback() {\n    this.setupEventListeners();\n  }\n  setupEventListeners() {\n    this.dialog.addEventListener(`${dialogOpen}`, (e) => {\n      this.video.play();\n    })\n    this.dialog.addEventListener(`${dialogClose}`, (e) => {\n      this.video.pause();\n    })\n    this.action === 'popup' && this.button.addEventListener('click', () => {\n      this.modal.open();\n    })\n    this.action === 'inline' && (\n      this.button.addEventListener('click', () => {\n        this.initnModalInline();\n      }), \n      this.closeButton?.addEventListener('click', () => {\n        this.closeModalInline();\n      })\n    )\n\n  }\n  initnModalInline(){\n    this.root.style.setProperty('position', 'relative');\n    this.root.appendChild(this.modal);\n    this.modal.classList.add('hdt-modal-inline');\n  }\n  closeModalInline(){\n    this.root.style.removeProperty('position');\n    this.modal.classList.remove('hdt-modal-inline');\n    this.appendChild(this.modal);\n  }\n}\ncustomElements.define('hdt-video-popup', videoPopup)\n\n// --------------------------\n// Product Card Media\n// --------------------------\nclass productCardMedia extends HTMLElement {\n  constructor() {\n    super();\n    this.mainMedia = $4(\"hdt-video-player[main-media]\", this);\n    this.secondMedia = $4(\"hdt-video-player[second-media]\", this);\n  }\n  connectedCallback() {\n    this.setupEventListeners();\n  }\n  setupEventListeners() {\n    this.addEventListener('mouseenter', () => {\n      if (this.mainMedia && this.secondMedia) {\n        this.mainMedia.pause();\n      }\n      if (this.secondMedia) {\n        this.secondMedia.play();\n      }\n    })\n    this.addEventListener('mouseleave', () => {\n      if (this.mainMedia) {\n        this.mainMedia.play();\n      }\n      if (this.secondMedia) {\n        this.secondMedia.pause();\n      }\n    })\n  }\n\n}\ncustomElements.define('hdt-product-card-media', productCardMedia)\n\n\n// Snow Effect\nclass SnowEffect extends HTMLElement {\n  constructor() {\n    super();\n\n    this.speed = parseFloat(this.getAttribute('speed')) || 1;\n    this.overlayOpacity = parseFloat(this.getAttribute('overlay-opacity')) || 0;\n    this.animationId = null;\n    this.snowflakes = [];\n\n    this.animate = this.animate.bind(this);\n    this.resizeCanvas = this.resizeCanvas.bind(this);\n  }\n\n  static get observedAttributes() {\n    return ['speed', 'overlay-opacity'];\n  }\n\n  connectedCallback() {\n    this.render();\n    this.setupCanvas();\n    this.createSnowPatterns();\n    this.setupEventListeners();\n    this.start();\n  }\n\n  disconnectedCallback() {\n    this.stop();\n    window.removeEventListener('resize', this.resizeCanvas);\n  }\n\n  attributeChangedCallback(name, oldValue, newValue) {\n    if (oldValue === newValue) return;\n    if (name === 'speed') {\n      this.speed = newValue;\n    }\n    if (name === 'overlay-opacity') {\n      this.overlayOpacity = newValue;\n    }\n  }\n\n  render() {\n    this.innerHTML = `\n      <canvas style=\"position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; z-index: 100000; pointer-events: none; background: transparent; display: block; opacity: 1;\"></canvas>`;\n  }\n\n  setupCanvas() {\n    this.canvas = this.querySelector('canvas');\n    if (!this.canvas) return;\n\n    this.ctx = this.canvas.getContext('2d');\n    if (!this.ctx) return;\n\n    this.resizeCanvas();\n  }\n\n  resizeCanvas() {\n    if (!this.canvas) return;\n    this.canvas.width = window.innerWidth;\n    this.canvas.height = window.innerHeight;\n    if (this.snowflakes && this.snowflakes.length > 0) {\n      this.createSnowPatterns();\n    }\n  }\n\n  createSnowPatterns() {\n    this.snowflakes = [];\n    const snowflakeCount = 250;\n\n    if (!this.canvas || this.canvas.width <= 0 || this.canvas.height <= 0) {\n      return;\n    }\n\n    for (let i = 0; i < snowflakeCount; i++) {\n      const depthFactor = Math.random() * 0.5 + 0.5;\n      const baseSize = depthFactor * 4 + 0.5;\n      const baseSpeed = depthFactor * 2 + 0.5;\n      const opacity = depthFactor * 0.7 + 0.3;\n\n      this.snowflakes.push({\n        x: Math.random() * this.canvas.width,\n        y: Math.random() * this.canvas.height,\n        size: baseSize,\n        speed: baseSpeed,\n        opacity: opacity,\n        depthFactor: depthFactor,\n        drift: (Math.random() - 0.5) * 0.5\n      });\n    }\n\n    this.snowflakes.sort((a, b) => a.depthFactor - b.depthFactor);\n  }\n\n  animate() {\n    if (!this.ctx || !this.canvas) return;\n\n    this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\n    if (this.overlayOpacity > 0) {\n      this.ctx.fillStyle = `rgba(0, 0, 0, ${this.overlayOpacity})`;\n      this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n    }\n\n    if (this.snowflakes.length === 0) return;\n\n    this.snowflakes.forEach((snowflake) => {\n      const actualSpeed = this.speed > 0 ?\n        (snowflake.speed * this.speed * snowflake.depthFactor) : 0;\n\n      snowflake.y += actualSpeed;\n      snowflake.x += snowflake.drift * snowflake.depthFactor;\n\n      if (snowflake.x < -10) snowflake.x = this.canvas.width + 10;\n      if (snowflake.x > this.canvas.width + 10) snowflake.x = -10;\n\n      if (snowflake.y > this.canvas.height + 10) {\n        snowflake.x = Math.random() * this.canvas.width;\n        snowflake.y = -10 - Math.random() * 50;\n      }\n\n      this.ctx.save();\n      this.ctx.globalAlpha = snowflake.opacity;\n\n      const glowStrength = snowflake.depthFactor * 3;\n      this.ctx.shadowBlur = glowStrength;\n      this.ctx.shadowColor = `rgba(255, 255, 255, ${snowflake.depthFactor * 0.8})`;\n      this.ctx.shadowOffsetX = 0;\n      this.ctx.shadowOffsetY = 0;\n\n      this.ctx.beginPath();\n      this.ctx.arc(snowflake.x, snowflake.y, snowflake.size * 0.5, 0, Math.PI * 2);\n\n      const brightness = Math.floor(snowflake.depthFactor * 55 + 200);\n      this.ctx.fillStyle = `rgb(${brightness}, ${brightness}, ${brightness})`;\n      this.ctx.fill();\n\n      if (snowflake.size > 3) {\n        this.ctx.beginPath();\n        this.ctx.arc(\n          snowflake.x - snowflake.size * 0.2,\n          snowflake.y - snowflake.size * 0.2,\n          snowflake.size * 0.15,\n          0, Math.PI * 2\n        );\n        this.ctx.fillStyle = `rgba(255, 255, 255, ${snowflake.depthFactor * 0.6})`;\n        this.ctx.fill();\n      }\n\n      this.ctx.restore();\n    });\n\n    this.animationId = requestAnimationFrame(this.animate);\n  }\n\n  setupEventListeners() {\n    window.addEventListener('resize', this.resizeCanvas);\n  }\n\n  start() {\n    this.animate();\n  }\n\n  stop() {\n    if (this.animationId) {\n      cancelAnimationFrame(this.animationId);\n      this.animationId = null;\n    }\n  }\n}\n\ncustomElements.define('hdt-snow-effect', SnowEffect);\n\n\n// --------------------------\n// Inactive tab message\n// --------------------------\n\nclass inactiveTabMessage extends HTMLElement {\n  constructor() {\n    super();\n    this.config = JSON.parse(this.getAttribute('config'));\n  }\n  connectedCallback() {\n    if (!this.config.message) return;\n    this.intervalId = null;\n    this.messageIndex = 0;\n    this.originalTitle = document.title;\n    this.messages = this.config.message.split(';').map(m => m.trim()).filter(m => m.length);\n    if (!this.messages.length) return;\n    this.setupEventListeners();\n  }\n  setupEventListeners() {\n    window.addEventListener('visibilitychange', this.handleInit.bind(this));\n  }\n  handleInit() {\n    if (document.hidden) {\n      this.intervalId = setInterval(() => {\n        document.title = this.messages[this.messageIndex];\n        this.messageIndex = (this.messageIndex + 1) % this.messages.length;\n      }, this.config.delay);\n    } else {\n      clearInterval(this.intervalId);\n      document.title = this.originalTitle;\n    }\n  }\n}\ncustomElements.define('hdt-inactive-tab', inactiveTabMessage);\n\n// --------------------------\n// Favicon Cart Count\n// --------------------------\nclass FaviconCartBadge extends HTMLElement {\n  constructor() {\n    super();\n\n    // Private properties\n    this._badgeQueue = [];\n    this._currentBadge = null;\n    this._isReady = false;\n    this._isVideoPlaying = false;\n    this._canvas = null;\n    this._context = null;\n    this._originalImage = null;\n    this._iconElements = [];\n    this._canvasWidth = 32;\n    this._canvasHeight = 32;\n    this._animationTimeout = null;\n    this._videoTimeout = null;\n\n    // Default settings\n    this._settings = {\n      bgColor: { r: 221, g: 0, b: 0 },\n      textColor: { r: 255, g: 255, b: 255 },\n      fontFamily: \"sans-serif\",\n      fontStyle: \"bold\",\n      type: \"circle\",\n      position: \"down\",\n      animation: \"slide\",\n      elementId: null,\n      element: null\n    };\n\n    // Browser detection\n    this._browser = {\n      ff: typeof InstallTrigger !== 'undefined',\n      chrome: !!window.chrome,\n      opera: !!window.opera || navigator.userAgent.indexOf('Opera') >= 0,\n      ie: false,\n      safari: Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0\n    };\n    this._browser.supported = this._browser.chrome || this._browser.ff || this._browser.opera;\n\n    // Animation configurations\n    this._animationTypes = {\n      fade: [\n        { x: 0.4, y: 0.4, w: 0.6, h: 0.6, o: 0 },\n        { x: 0.4, y: 0.4, w: 0.6, h: 0.6, o: 0.1 },\n        { x: 0.4, y: 0.4, w: 0.6, h: 0.6, o: 0.2 },\n        { x: 0.4, y: 0.4, w: 0.6, h: 0.6, o: 0.3 },\n        { x: 0.4, y: 0.4, w: 0.6, h: 0.6, o: 0.4 },\n        { x: 0.4, y: 0.4, w: 0.6, h: 0.6, o: 0.5 },\n        { x: 0.4, y: 0.4, w: 0.6, h: 0.6, o: 0.6 },\n        { x: 0.4, y: 0.4, w: 0.6, h: 0.6, o: 0.7 },\n        { x: 0.4, y: 0.4, w: 0.6, h: 0.6, o: 0.8 },\n        { x: 0.4, y: 0.4, w: 0.6, h: 0.6, o: 0.9 },\n        { x: 0.4, y: 0.4, w: 0.6, h: 0.6, o: 1 }\n      ],\n      none: [\n        { x: 0.4, y: 0.4, w: 0.6, h: 0.6, o: 1 }\n      ],\n      pop: [\n        { x: 1, y: 1, w: 0, h: 0, o: 1 },\n        { x: 0.9, y: 0.9, w: 0.1, h: 0.1, o: 1 },\n        { x: 0.8, y: 0.8, w: 0.2, h: 0.2, o: 1 },\n        { x: 0.7, y: 0.7, w: 0.3, h: 0.3, o: 1 },\n        { x: 0.6, y: 0.6, w: 0.4, h: 0.4, o: 1 },\n        { x: 0.5, y: 0.5, w: 0.5, h: 0.5, o: 1 },\n        { x: 0.4, y: 0.4, w: 0.6, h: 0.6, o: 1 }\n      ],\n      popFade: [\n        { x: 0.75, y: 0.75, w: 0, h: 0, o: 0 },\n        { x: 0.65, y: 0.65, w: 0.1, h: 0.1, o: 0.2 },\n        { x: 0.6, y: 0.6, w: 0.2, h: 0.2, o: 0.4 },\n        { x: 0.55, y: 0.55, w: 0.3, h: 0.3, o: 0.6 },\n        { x: 0.5, y: 0.5, w: 0.4, h: 0.4, o: 0.8 },\n        { x: 0.45, y: 0.45, w: 0.5, h: 0.5, o: 0.9 },\n        { x: 0.4, y: 0.4, w: 0.6, h: 0.6, o: 1 }\n      ],\n      slide: [\n        { x: 0.4, y: 1, w: 0.6, h: 0.6, o: 1 },\n        { x: 0.4, y: 0.9, w: 0.6, h: 0.6, o: 1 },\n        { x: 0.4, y: 0.9, w: 0.6, h: 0.6, o: 1 },\n        { x: 0.4, y: 0.8, w: 0.6, h: 0.6, o: 1 },\n        { x: 0.4, y: 0.7, w: 0.6, h: 0.6, o: 1 },\n        { x: 0.4, y: 0.6, w: 0.6, h: 0.6, o: 1 },\n        { x: 0.4, y: 0.5, w: 0.6, h: 0.6, o: 1 },\n        { x: 0.4, y: 0.4, w: 0.6, h: 0.6, o: 1 }\n      ]\n    };\n\n    this._animationDuration = 40;\n  }\n\n  static get observedAttributes() {\n    return ['cart-count', 'bg-color', 'text-color', 'font-family', 'font-style', 'type', 'position', 'animation', 'event-name'];\n  }\n\n  connectedCallback() {\n    this._initialize();\n  }\n\n  disconnectedCallback() {\n    this._cleanup();\n  }\n\n  attributeChangedCallback(name, oldValue, newValue) {\n    if (!this._isReady) return;\n\n    switch (name) {\n      case 'cart-count':\n        this.setBadge(parseInt(newValue) || 0);\n        break;\n      case 'bg-color':\n        this._settings.bgColor = this._hexToRgb(newValue);\n        break;\n      case 'text-color':\n        this._settings.textColor = this._hexToRgb(newValue);\n        break;\n      case 'font-family':\n        this._settings.fontFamily = newValue;\n        break;\n      case 'font-style':\n        this._settings.fontStyle = newValue;\n        break;\n      case 'type':\n        this._settings.type = newValue;\n        break;\n      case 'position':\n        this._settings.position = newValue.toLowerCase();\n        break;\n      case 'animation':\n        this._settings.animation = newValue;\n        break;\n      case 'event-name':\n        this._setupEventListener(newValue);\n        break;\n    }\n  }\n\n  _initialize() {\n    // Parse attributes\n    this._parseAttributes();\n\n    // Adjust animations for position\n    this._adjustAnimationPosition();\n\n    // Get favicon elements\n    this._iconElements = this._getIcons();\n\n    // Create canvas\n    this._canvas = document.createElement(\"canvas\");\n    this._originalImage = document.createElement(\"img\");\n\n    // Load original favicon\n    const currentIcon = this._iconElements[this._iconElements.length - 1];\n    if (currentIcon && currentIcon.hasAttribute(\"href\")) {\n      this._originalImage.setAttribute(\"crossOrigin\", \"anonymous\");\n      this._originalImage.onload = () => {\n        this._canvasHeight = this._originalImage.height > 0 ? this._originalImage.height : 32;\n        this._canvasWidth = this._originalImage.width > 0 ? this._originalImage.width : 32;\n        this._canvas.height = this._canvasHeight;\n        this._canvas.width = this._canvasWidth;\n        this._context = this._canvas.getContext(\"2d\");\n        this._ready();\n      };\n      this._originalImage.setAttribute(\"src\", currentIcon.getAttribute(\"href\"));\n    } else {\n      this._canvasHeight = 32;\n      this._canvasWidth = 32;\n      this._originalImage.height = this._canvasHeight;\n      this._originalImage.width = this._canvasWidth;\n      this._canvas.height = this._canvasHeight;\n      this._canvas.width = this._canvasWidth;\n      this._context = this._canvas.getContext(\"2d\");\n      this._ready();\n    }\n\n    // Setup event listener\n    const eventName = this.getAttribute('event-name') || cartCount;\n    this._setupEventListener(eventName);\n  }\n\n  _parseAttributes() {\n    const bgColor = this.getAttribute('bg-color') || '#d00';\n    const textColor = this.getAttribute('text-color') || '#fff';\n\n    this._settings.bgColor = this._hexToRgb(bgColor);\n    this._settings.textColor = this._hexToRgb(textColor);\n    this._settings.fontFamily = this.getAttribute('font-family') || 'sans-serif';\n    this._settings.fontStyle = this.getAttribute('font-style') || 'bold';\n    this._settings.type = this.getAttribute('type') || 'circle';\n    this._settings.position = (this.getAttribute('position') || 'down').toLowerCase();\n    this._settings.animation = this.getAttribute('animation') || 'slide';\n  }\n\n  _adjustAnimationPosition() {\n    const isUp = this._settings.position.indexOf(\"up\") > -1;\n    const isLeft = this._settings.position.indexOf(\"left\") > -1;\n\n    if (isUp || isLeft) {\n      for (let type in this._animationTypes) {\n        for (let i = 0; i < this._animationTypes[type].length; i++) {\n          let frame = this._animationTypes[type][i];\n          if (isUp) {\n            if (frame.y < 0.6) {\n              frame.y = frame.y - 0.4;\n            } else {\n              frame.y = frame.y - 2 * frame.y + (1 - frame.w);\n            }\n          }\n          if (isLeft) {\n            if (frame.x < 0.6) {\n              frame.x = frame.x - 0.4;\n            } else {\n              frame.x = frame.x - 2 * frame.x + (1 - frame.h);\n            }\n          }\n          this._animationTypes[type][i] = frame;\n        }\n      }\n    }\n  }\n\n  _setupEventListener(eventName) {\n    if (this._eventListener) {\n      document.removeEventListener(this._currentEventName, this._eventListener);\n    }\n\n    this._currentEventName = eventName;\n    this._eventListener = (event) => {\n      // console.log(event);\n      if (event.detail && typeof event.detail.item_count !== 'undefined') {\n        this.setBadge(event.detail.item_count);\n      }\n    };\n\n    document.addEventListener(eventName, this._eventListener);\n  }\n\n  _ready() {\n    this._isReady = true;\n    this.reset();\n\n    // Set initial cart count\n    const cart_count = parseInt(this.getAttribute('cart-count')) || 0;\n    if (cart_count > 0) {\n      this.setBadge(cart_count);\n    }\n  }\n\n  _cleanup() {\n    clearTimeout(this._animationTimeout);\n    clearTimeout(this._videoTimeout);\n\n    if (this._eventListener && this._currentEventName) {\n      document.removeEventListener(this._currentEventName, this._eventListener);\n    }\n  }\n\n  _hexToRgb(hex) {\n    hex = hex.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i, (m, r, g, b) => {\n      return r + r + g + g + b + b;\n    });\n    const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n    return result ? {\n      r: parseInt(result[1], 16),\n      g: parseInt(result[2], 16),\n      b: parseInt(result[3], 16)\n    } : { r: 221, g: 0, b: 0 };\n  }\n\n  _getIcons() {\n    const elementId = this.getAttribute('element-id');\n    let icons = [];\n\n    if (elementId) {\n      const element = document.getElementById(elementId);\n      if (element) {\n        icons = [element];\n        element.setAttribute(\"href\", element.getAttribute(\"src\"));\n      }\n    } else {\n      // Find existing favicon links\n      const headLinks = document.getElementsByTagName(\"head\")[0].getElementsByTagName(\"link\");\n      for (let i = 0; i < headLinks.length; i++) {\n        if (/(^|\\s)icon(\\s|$)/i.test(headLinks[i].getAttribute(\"rel\"))) {\n          icons.push(headLinks[i]);\n        }\n      }\n\n      // Create favicon link if none exists\n      if (icons.length === 0) {\n        icons = [document.createElement(\"link\")];\n        icons[0].setAttribute(\"rel\", \"icon\");\n        document.getElementsByTagName(\"head\")[0].appendChild(icons[0]);\n      }\n    }\n\n    // Set type to PNG for all icons\n    icons.forEach(icon => {\n      icon.setAttribute(\"type\", \"image/png\");\n    });\n\n    return icons;\n  }\n\n  _setIcon(canvas) {\n    const url = canvas.toDataURL(\"image/png\");\n    this._setIconSrc(url);\n  }\n\n  _setIconSrc(url) {\n    if (this._browser.ff || this._browser.opera) {\n      // Firefox/Opera specific handling\n      const old = this._iconElements[this._iconElements.length - 1];\n      const newIcon = document.createElement(\"link\");\n      this._iconElements = [newIcon];\n      if (this._browser.opera) {\n        newIcon.setAttribute(\"rel\", \"icon\");\n      }\n      newIcon.setAttribute(\"rel\", \"icon\");\n      newIcon.setAttribute(\"type\", \"image/png\");\n      document.getElementsByTagName(\"head\")[0].appendChild(newIcon);\n      newIcon.setAttribute(\"href\", url);\n      if (old.parentNode) {\n        old.parentNode.removeChild(old);\n      }\n    } else {\n      // Other browsers\n      this._iconElements.forEach(icon => {\n        icon.setAttribute(\"href\", url);\n      });\n    }\n  }\n\n  _normalizeValues(values) {\n    values.n = typeof values.n === \"number\" ? Math.abs(values.n | 0) : values.n;\n    values.x = this._canvasWidth * values.x;\n    values.y = this._canvasHeight * values.y;\n    values.w = this._canvasWidth * values.w;\n    values.h = this._canvasHeight * values.h;\n    values.len = (values.n + \"\").length;\n    return values;\n  }\n\n  _renderCircle(values) {\n    let isWide = false;\n    values = this._normalizeValues(values);\n\n    // Adjust width for longer numbers\n    if (values.len === 2) {\n      values.x = values.x - (values.w * 0.4);\n      values.w = values.w * 1.4;\n      isWide = true;\n    } else if (values.len >= 3) {\n      values.x = values.x - (values.w * 0.65);\n      values.w = values.w * 1.65;\n      isWide = true;\n    }\n\n    this._context.clearRect(0, 0, this._canvasWidth, this._canvasHeight);\n    this._context.drawImage(this._originalImage, 0, 0, this._canvasWidth, this._canvasHeight);\n    this._context.beginPath();\n    this._context.font = this._settings.fontStyle + \" \" + Math.floor(values.h * (values.n > 99 ? 0.85 : 1)) + \"px \" + this._settings.fontFamily;\n    this._context.textAlign = \"center\";\n\n    // Draw badge shape\n    if (isWide) {\n      // Rounded rectangle for wider badges\n      this._context.moveTo(values.x + values.w / 2, values.y);\n      this._context.lineTo(values.x + values.w - values.h / 2, values.y);\n      this._context.quadraticCurveTo(values.x + values.w, values.y, values.x + values.w, values.y + values.h / 2);\n      this._context.lineTo(values.x + values.w, values.y + values.h - values.h / 2);\n      this._context.quadraticCurveTo(values.x + values.w, values.y + values.h, values.x + values.w - values.h / 2, values.y + values.h);\n      this._context.lineTo(values.x + values.h / 2, values.y + values.h);\n      this._context.quadraticCurveTo(values.x, values.y + values.h, values.x, values.y + values.h - values.h / 2);\n      this._context.lineTo(values.x, values.y + values.h / 2);\n      this._context.quadraticCurveTo(values.x, values.y, values.x + values.h / 2, values.y);\n    } else {\n      // Perfect circle\n      this._context.arc(values.x + values.w / 2, values.y + values.h / 2, values.h / 2, 0, 2 * Math.PI);\n    }\n\n    // Fill badge background\n    this._context.fillStyle = `rgba(${this._settings.bgColor.r},${this._settings.bgColor.g},${this._settings.bgColor.b},${values.o})`;\n    this._context.fill();\n    this._context.closePath();\n    this._context.beginPath();\n    this._context.stroke();\n\n    // Draw text\n    this._context.fillStyle = `rgba(${this._settings.textColor.r},${this._settings.textColor.g},${this._settings.textColor.b},${values.o})`;\n\n    if (typeof values.n === \"number\" && values.n > 999) {\n      this._context.fillText((values.n > 9999 ? 9 : Math.floor(values.n / 1000)) + \"k+\",\n        Math.floor(values.x + values.w / 2),\n        Math.floor(values.y + values.h - (values.h * 0.2)));\n    } else {\n      this._context.fillText(values.n,\n        Math.floor(values.x + values.w / 2),\n        Math.floor(values.y + values.h - (values.h * 0.15)));\n    }\n    this._context.closePath();\n  }\n\n  _renderRectangle(values) {\n    values = this._normalizeValues(values);\n\n    // Adjust width for longer numbers\n    if (values.len === 2) {\n      values.x = values.x - (values.w * 0.4);\n      values.w = values.w * 1.4;\n    } else if (values.len >= 3) {\n      values.x = values.x - (values.w * 0.65);\n      values.w = values.w * 1.65;\n    }\n\n    this._context.clearRect(0, 0, this._canvasWidth, this._canvasHeight);\n    this._context.drawImage(this._originalImage, 0, 0, this._canvasWidth, this._canvasHeight);\n    this._context.beginPath();\n    this._context.font = this._settings.fontStyle + \" \" + Math.floor(values.h * (values.n > 99 ? 0.9 : 1)) + \"px \" + this._settings.fontFamily;\n    this._context.textAlign = \"center\";\n\n    // Draw rectangle\n    this._context.fillStyle = `rgba(${this._settings.bgColor.r},${this._settings.bgColor.g},${this._settings.bgColor.b},${values.o})`;\n    this._context.fillRect(values.x, values.y, values.w, values.h);\n\n    // Draw text\n    this._context.fillStyle = `rgba(${this._settings.textColor.r},${this._settings.textColor.g},${this._settings.textColor.b},${values.o})`;\n\n    if (typeof values.n === \"number\" && values.n > 999) {\n      this._context.fillText((values.n > 9999 ? 9 : Math.floor(values.n / 1000)) + \"k+\",\n        Math.floor(values.x + values.w / 2),\n        Math.floor(values.y + values.h - (values.h * 0.2)));\n    } else {\n      this._context.fillText(values.n,\n        Math.floor(values.x + values.w / 2),\n        Math.floor(values.y + values.h - (values.h * 0.15)));\n    }\n    this._context.closePath();\n  }\n\n  _mergeObjects(obj1, obj2) {\n    const result = {};\n    for (let key in obj1) {\n      result[key] = obj1[key];\n    }\n    for (let key in obj2) {\n      result[key] = obj2[key];\n    }\n    return result;\n  }\n\n  _runAnimation(options, callback, reverse, frameIndex) {\n    const frames = this._animationTypes[document.hidden || document.msHidden || document.webkitHidden || document.mozHidden ? \"none\" : this._settings.animation];\n\n    frameIndex = reverse === true\n      ? (frameIndex !== undefined ? frameIndex : frames.length - 1)\n      : (frameIndex !== undefined ? frameIndex : 0);\n\n    callback = callback || function () { };\n\n    if (frameIndex < frames.length && frameIndex >= 0) {\n      const renderMethod = this._settings.type === 'rectangle' ? this._renderRectangle : this._renderCircle;\n      renderMethod.call(this, this._mergeObjects(options, frames[frameIndex]));\n\n      this._videoTimeout = setTimeout(() => {\n        if (reverse) {\n          frameIndex -= 1;\n        } else {\n          frameIndex += 1;\n        }\n        this._runAnimation(options, callback, reverse, frameIndex);\n      }, this._animationDuration);\n\n      this._setIcon(this._canvas);\n    } else {\n      callback();\n    }\n  }\n\n  _start() {\n    if (this._isReady && !this._isVideoPlaying && this._badgeQueue.length > 0) {\n      this._isVideoPlaying = true;\n\n      const processBadge = () => {\n        // Apply badge options\n        [\"type\", \"animation\", \"bgColor\", \"textColor\", \"fontFamily\", \"fontStyle\"].forEach(prop => {\n          if (prop in this._badgeQueue[0].options) {\n            this._settings[prop] = this._badgeQueue[0].options[prop];\n          }\n        });\n\n        this._runAnimation(this._badgeQueue[0].options, () => {\n          this._currentBadge = this._badgeQueue[0];\n          this._isVideoPlaying = false;\n          if (this._badgeQueue.length > 0) {\n            this._badgeQueue.shift();\n            this._start();\n          }\n        }, false);\n      };\n\n      if (this._currentBadge) {\n        this._runAnimation(this._currentBadge.options, () => {\n          processBadge();\n        }, true);\n      } else {\n        processBadge();\n      }\n    }\n  }\n\n  // Public methods\n  setBadge(number, options = {}) {\n    if (!this._isReady) return;\n\n    try {\n      if (typeof number === \"number\" ? number > 0 : number !== \"\") {\n        const badgeOptions = {\n          type: \"badge\",\n          options: { n: number }\n        };\n\n        if (\"animation\" in options && this._animationTypes[options.animation + \"\"]) {\n          badgeOptions.options.animation = options.animation + \"\";\n        }\n\n        if (\"type\" in options && (options.type === 'circle' || options.type === 'rectangle')) {\n          badgeOptions.options.type = options.type + \"\";\n        }\n\n        [\"bgColor\", \"textColor\"].forEach(prop => {\n          if (prop in options) {\n            badgeOptions.options[prop] = this._hexToRgb(options[prop]);\n          }\n        });\n\n        [\"fontStyle\", \"fontFamily\"].forEach(prop => {\n          if (prop in options) {\n            badgeOptions.options[prop] = options[prop];\n          }\n        });\n\n        this._badgeQueue.push(badgeOptions);\n\n        if (this._badgeQueue.length > 100) {\n          throw new Error(\"Too many badges requests in queue.\");\n        }\n\n        this._start();\n      } else {\n        this.reset();\n      }\n    } catch (error) {\n      throw new Error(\"Error setting badge. Message: \" + error.message);\n    }\n  }\n\n  reset() {\n    if (this._isReady) {\n      this._badgeQueue = [];\n      this._currentBadge = false;\n      this._isVideoPlaying = false;\n      this._context.clearRect(0, 0, this._canvasWidth, this._canvasHeight);\n      this._context.drawImage(this._originalImage, 0, 0, this._canvasWidth, this._canvasHeight);\n      this._setIcon(this._canvas);\n      clearTimeout(this._videoTimeout);\n      clearTimeout(this._animationTimeout);\n    }\n  }\n\n  // Getters for current settings\n  get cart_count() {\n    return parseInt(this.getAttribute('cart-count')) || 0;\n  }\n\n  set cart_count(value) {\n    this.setAttribute('cart-count', value);\n  }\n\n  get bgColor() {\n    return this.getAttribute('bg-color') || '#d00';\n  }\n\n  set bgColor(value) {\n    this.setAttribute('bg-color', value);\n  }\n\n  get textColor() {\n    return this.getAttribute('text-color') || '#fff';\n  }\n\n  set textColor(value) {\n    this.setAttribute('text-color', value);\n  }\n}\n\n// Register the custom element\ncustomElements.define('favicon-cart-badge', FaviconCartBadge);\n\n// Usage examples:\n/*\n================================================================================\n=  1. Basic usage\n=            <favicon-cart-badge cart-count=\"5\"></favicon-cart-badge>\n=  2. With custom styling\n=            <favicon-cart-badge \n=              cart-count=\"10\"\n=              bg-color=\"#ff0000\"\n=              text-color=\"#ffffff\"\n=              type=\"rectangle\"\n=              animation=\"pop\"\n=              position=\"up\"\n=              event-name=\"custom:cart:update\">\n=            </favicon-cart-badge>\n=  3. JavaScript usage\n=            const badge = document.querySelector('favicon-cart-badge');\n=            badge.setBadge(15);\n=            badge.cartCount = 20;\n=  4. Dispatch custom event\n=            document.dispatchEvent(new CustomEvent('cart:count:update', {\n=              detail: { item_count: 25 }\n=            }));\n================================================================================\n*/\n\n\n// --------------------------\n// Sales Popup\n// --------------------------\n\nclass SalesPopup extends HTMLElement {\n  constructor() {\n    super();\n    this.salesJson = JSON.parse(document.getElementById('hdt-popup__sales-JSON').innerHTML);\n    this.close_btn = this.querySelector('[data-close-sale]');\n    this.quickview_btn = this.querySelector('[aria-controls=\"hdt-quick-view-modal\"]');\n    this.progressbar = this.querySelector('[data-progressbar] > span');\n\n    this.image_sale = this.querySelector('[data-image-sale]');\n    this.title_sale = this.querySelector('[data-title-sale]');\n    this.url_link = this.querySelectorAll('[data-href-sale]');\n    this.location_sale = this.querySelector('[data-location-sale]');\n    this.time_sale = this.querySelector('[data-ago-sale]');\n\n    // console.log(this.salesJson);\n  }\n  connectedCallback() {\n\n\n    // init variables\n    this.startTime = this.salesJson.starTime * this.salesJson.starTimeUnit;\n    this.stayTime = this.salesJson.stayTime * this.salesJson.stayTimeUnit;\n    this.index = 0;\n    this.limit = this.salesJson.limit;\n    this.max = this.salesJson.max;\n    this.min = 0;\n    this.classUp = this.salesJson.classUp;\n    this.classDown = this.salesJson.classDown[this.classUp];\n    this.ppType = this.salesJson.ppType;\n    this.pauseOnHover = this.salesJson.pauseOnHover;\n    this.resetOnHover = this.salesJson.resetOnHover;\n    this.isMobile = this.salesJson.isMobile;\n\n    this.idArray = this.salesJson.idArray;\n    this.titleArray = this.salesJson.titleArray;\n    this.handleArray = this.salesJson.handleArray;\n    this.urlArray = this.salesJson.urlArray;\n    this.locationArray = this.salesJson.locationArray;\n    this.timeArray = this.salesJson.timeArray;\n    this.imageArray = this.salesJson.imageArray;\n\n    this.max = this.urlArray.length - 1;\n    this.max2 = this.locationArray.length - 1;\n    this.max3 = this.timeArray.length - 1;\n\n    this.starTimeout;\n    this.stayTimeout;\n\n    this.time = {\n      START: null,\n      END: null,\n      REMAINING: null\n    };\n\n    if ((!this.isMobile && window.innerWidth < 768) || this.hasAttribute('loaded')) return;\n    this.setAttribute('loaded', '');\n    // this.hideSalesPopup();\n    // this.remove();\n    this.setupEvents();\n    this.unloadSalesPopup();\n\n  }\n  disconnectedCallback() {\n    this.clearEvents();\n  }\n  getRandomInit(min, max) {\n    return Math.floor(Math.random() * (max - min + 1)) + min;\n  }\n  updateData(index) {\n\n    var img = this.imageArray[index],\n      img_url = `${img}&width=130`,\n      img_srcset = `${img}&width=65 65w, ${img}&width=130 130w`;\n\n    // update image\n    if (this.image_sale) {\n      this.image_sale.src = img_url;\n      this.image_sale.srcset = img_srcset;\n    }\n    // update title\n    if (this.title_sale) {\n      this.title_sale.textContent = this.titleArray[index];\n    }\n    // update url\n    if (this.url_link) {\n      this.url_link.forEach(link => {\n        link.href = this.urlArray[index];\n      });\n    }\n    // update location\n    if (this.location_sale) {\n      this.location_sale.textContent = this.locationArray[index];\n    }\n    // update time\n    if (this.time_sale) {\n      this.time_sale.textContent = this.timeArray[index];\n    }\n    // update quickview\n    if (this.quickview_btn) {\n      this.quickview_btn.setAttribute('handle', this.handleArray[index]);\n    }\n  }\n\n  hideSalesPopup() {\n    if (this) {\n      this.removeAttribute('show');\n      this.classList.remove(this.classUp);\n      this.classList.add(this.classDown);\n    }\n  }\n  showSalesPopup() {\n    if (this) {\n      this.setAttribute('show', '');\n      this.classList.add(this.classUp);\n      this.classList.remove(this.classDown);\n    }\n  }\n  setupEvents() {\n    if (this.pauseOnHover) {\n      this.addEventListener('mouseenter', (e) => {\n        this.mouseenterHandler(e);\n      });\n      this.addEventListener('mouseleave', () => {\n        this.mouseleaveHandler();\n      });\n    }\n    if (this.close_btn) {\n      this.close_btn.addEventListener('click', (e) => {\n        e.preventDefault();\n        this.hideSalesPopup();\n        this.clearEvents();\n        setTimeout(() => {\n          this.remove();\n        }, 1000);\n      });\n    }\n  }\n  mouseenterHandler() {\n    if (this.resetOnHover) {\n      if (this.progressbar) {\n        this.progressbar.style.setProperty('animation-name', 'none');\n      }\n    } else {\n      this.time.REMAINING = this.time.END - new Date().getTime();\n      // console.log(this.time.REMAINING);\n    }\n    clearTimeout(this.stayTimeout);\n  }\n  mouseleaveHandler() {\n    if (this.resetOnHover) {\n      this.time.REMAINING = this.stayTime;\n      if (this.progressbar) {\n        this.progressbar.style.setProperty('animation-name', 'hdt-ani-w');\n      }\n    } else {\n      this.time.END = new Date().getTime() + this.time.REMAINING;\n    }\n    this.stayTimeout = setTimeout(() => {\n      this.unloadSalesPopup();\n      this.hideSalesPopup();\n    }, this.time.REMAINING);\n  }\n\n  clearEvents() {\n    this.removeEventListener('mouseenter', this.mouseenterHandler);\n    this.removeEventListener('mouseleave', this.mouseleaveHandler);\n    clearTimeout(this.stayTimeout);\n    clearTimeout(this.starTimeout);\n  }\n  // unload sales popup\n  unloadSalesPopup() {\n    // this.hideSalesPopup();\n    this.starTimeout = setTimeout(() => {\n      // if(this) this.remove();\n      this.showSalesPopup();\n      this.loadSalesPopup();\n    }, this.startTime);\n  }\n\n  startProgressbar() {\n    if (this.progressbar) {\n      this.progressbar.style.setProperty('animation-iteration-count', 'infinite');\n    }\n  }\n  stopProgressbar() {\n    if (this.progressbar) {\n      this.progressbar.style.removeProperty('animation-iteration-count');\n    }\n  }\n  // load sales popup\n  loadSalesPopup() {\n    // document.body.appendChild(this);\n    this.removeAttribute('hidden');\n    if (this.ppType == '1') {\n      this.updateData(this.index);\n      ++this.index;\n      if (this.index > this.max) {\n        this.index = 0;\n      }\n    } else {\n      this.updateData(this.getRandomInit(this.min, this.max));\n    }\n\n    this.time.START = new Date().getTime();\n    this.time.END = this.time.START + this.stayTime;\n\n    this.stayTimeout = setTimeout(() => {\n      clearTimeout(this.stayTimeout);\n      this.unloadSalesPopup();\n      this.hideSalesPopup();\n    }, this.stayTime);\n    // this.stopProgressbar();\n  }\n}\n\ncustomElements.define('hdt-sales-popup', SalesPopup);\n\nclass ageVerificationModal extends HTMLElement {\n  constructor() {\n    super();\n    this.configs = JSON.parse(this.getAttribute('configs'));\n    if (!Shopify.designMode && getCookie(\"theme4:age-verify:\" + this.configs.id) === 'verified') return;\n\n    this.modal = this.querySelector('hdt-modal');\n    this.dialog = this.querySelector('dialog');\n\n    if (Shopify.designMode) {\n      this._shopifySection = this._shopifySection || this.closest('.shopify-section');\n      this._shopifySection.addEventListener('shopify:section:load', () => this.showModal());\n      // this._shopifySection.addEventListener('shopify:section:select', () => this.showModal());\n      // this._shopifySection.addEventListener('shopify:section:deselect', () => this.modal.close());\n    }\n  }\n\n  connectedCallback() {\n    if (Shopify.designMode) return;\n    if (getCookie(\"theme4:age-verify:\" + this.configs.id) === 'verified') return;\n\n    this.addEventListener('click', (e) => {\n      const el = e.target.closest('[data-action]');\n      if (!el) return;\n      const action = el.getAttribute('data-action');\n      if (action === 'verify') { e.preventDefault(); e.stopPropagation(); this.verifyAge(); }\n      if (action === 'exit') { e.preventDefault(); e.stopPropagation(); this.exitSite(); }\n    }, { capture: true });\n\n    if (this.dialog) {\n      this.allowBackdropClose = false;\n      this.dialog.addEventListener(`${dialogClose}`, () => {\n        if (this.allowBackdropClose) this.hideModal();\n      });\n      this.dialog.addEventListener('close', () => {\n        if (!this.allowBackdropClose) this.modal && this.modal.open && this.modal.open();\n      });\n      this.dialog.addEventListener('cancel', (e) => {\n        if (!this.allowBackdropClose) {\n          e.preventDefault();\n          e.stopPropagation();\n          this.exitSite();\n        }\n      });\n    }\n\n    // const mode = this.configs.show_on;\n    // if (mode === 'page_load') this.showModalWithDelay();\n    // else if (mode === 'scroll') this.setupScrollListener();\n    // else if (mode === 'mouse_leave') this.setupMouseLeaveListener();\n    this.showModalWithDelay()\n  }\n\n  showModalWithDelay() { setTimeout(() => this.showModal(), this.configs.time_delay * 1000); }\n\n  setupScrollListener() {\n    const fnShow = this.showModal.bind(this);\n    const docHeight = document.documentElement.scrollHeight - document.documentElement.clientHeight - 500;\n    const onScroll = () => {\n      if (window.scrollY >= docHeight) { fnShow(); window.removeEventListener('scroll', onScroll); }\n    };\n    window.addEventListener('scroll', onScroll);\n  }\n\n  setupMouseLeaveListener() {\n    const fnShow = this.showModal.bind(this);\n    document.querySelector('body').addEventListener('mouseleave', fnShow);\n  }\n\n  showModal() { this.modal.open(); }\n  hideModal() { this.modal.close(); }\n\n  verifyAge() {\n    if (this.configs.date_of_birth) {\n      const formRoot = (this.dialog || this).querySelector('.hdt-age-verify_content') || (this.dialog || this);\n      const monthEl = formRoot.querySelector('#agemonth');\n      const dayEl = formRoot.querySelector('#ageday');\n      const yearEl = formRoot.querySelector('#ageyear');\n\n      const showError = (msg) => {\n        let err = formRoot.querySelector('.hdt-age-error');\n        if (!err) {\n          err = document.createElement('div');\n          err.className = 'hdt-age-error';\n          err.style.cssText = 'color:#ef4444;margin-top:12px;font-size:13px;';\n          const formWrap = formRoot.querySelector('.hdt-age-verify-form') || formRoot.querySelector('.hdt-content');\n          if (formWrap) formWrap.insertAdjacentElement('afterend', err);\n          else formRoot.appendChild(err);\n        }\n        err.textContent = msg;\n        err.style.display = '';\n      };\n      const clearError = () => {\n        const err = formRoot.querySelector('.hdt-age-error');\n        if (err) { err.textContent = ''; err.style.display = 'none'; }\n      };\n\n      if (!monthEl || !dayEl || !yearEl) {\n        showError('Please select your full date of birth.');\n        return;\n      }\n      if (monthEl.selectedIndex === 0 || dayEl.selectedIndex === 0 || yearEl.selectedIndex === 0) {\n        showError('Please select your full date of birth.');\n        return;\n      }\n\n      const m = parseInt(monthEl.value, 10);\n      const d = parseInt(dayEl.value, 10);\n      const y = parseInt(yearEl.value, 10);\n\n      // Validate ng\u00E0y h\u1EE3p l\u1EC7\n      const birth = new Date(y, m - 1, d);\n      if (\n        !Number.isFinite(m) || !Number.isFinite(d) || !Number.isFinite(y) ||\n        birth.getFullYear() !== y || birth.getMonth() !== (m - 1) || birth.getDate() !== d\n      ) {\n        showError('Please select your full date of birth.');\n        return;\n      }\n\n      const today = new Date();\n      const threshold = new Date(y + this.configs.age_limit, m - 1, d);\n      if (today < threshold) {\n        showError(`You must be at least ${this.configs.age_limit} years old to access this website.`);\n        return;\n      }\n      clearError();\n    }\n\n    const cookieDays = Number.parseInt(this.configs.day_next_show) > 0\n      ? Number.parseInt(this.configs.day_next_show)\n      : Number.parseInt(this.configs.day_next);\n    setCookie(\"theme4:age-verify:\" + this.configs.id, 'verified', cookieDays);\n    if (this._preventEscHandler) {\n      document.removeEventListener('keydown', this._preventEscHandler, true);\n      this._preventEscHandler = null;\n    }\n    if (this._reopenOnClose) {\n      this.dialog && this.dialog.removeEventListener('close', this._reopenOnClose, { once: true });\n      this._reopenOnClose = null;\n    }\n    if (this._blockOutsideClick) {\n      document.removeEventListener('click', this._blockOutsideClick, true);\n      this._blockOutsideClick = null;\n    }\n    if (this._blockMouseHandlers && Array.isArray(this._blockMouseHandlers)) {\n      this._blockMouseHandlers.forEach(({ type, handler }) => {\n        document.removeEventListener(type, handler, true);\n      });\n      this._blockMouseHandlers = null;\n    }\n    this.allowBackdropClose = true;\n    this.hideModal();\n  }\n\n  exitSite() {\n    const scope = this.dialog || this;\n    const root = scope.querySelector('.hdt-age-verify_content') || scope;\n    const headingEl = root.querySelector('h2');\n    let descEl = root.querySelector('.hdt-text-base') || root.querySelector('p');\n    const form = root.querySelector('.hdt-age-verify-form');\n    const closeBtn = scope.querySelector('[ref=\"closeButton\"]') || scope.querySelector('.hdt-dialog-btn__close');\n\n    if (headingEl) headingEl.textContent = 'Access forbidden';\n    if (!descEl) {\n      descEl = document.createElement('div');\n      descEl.style.marginBottom = '1.5rem';\n      const container = root.querySelector('.hdt-content') || root;\n      container.insertBefore(descEl, form || container.firstChild);\n    }\n    descEl.textContent = 'Your access is restricted because of your age.';\n    if (form) form.style.display = 'none';\n    if (closeBtn) { closeBtn.setAttribute('disabled', 'true'); closeBtn.style.display = 'none'; }\n\n    if (!this._preventEscHandler) {\n      this._preventEscHandler = (e) => { if (e.key === 'Escape') { e.preventDefault(); e.stopPropagation(); } };\n      document.addEventListener('keydown', this._preventEscHandler, true);\n    }\n\n    if (!this._blockOutsideClick) {\n      this._blockOutsideClick = (e) => { if (this.dialog && !this.dialog.contains(e.target)) { e.preventDefault(); e.stopPropagation(); } };\n      document.addEventListener('click', this._blockOutsideClick, true);\n    }\n\n    if (!this._blockMouseHandlers) {\n      this._blockMouseHandlers = [];\n      const types = [\n        'click', 'mousedown', 'mouseup', 'mousemove', 'mouseover', 'mouseout',\n        'contextmenu', 'wheel', 'scroll',\n        'touchstart', 'touchmove', 'touchend',\n        'pointerdown', 'pointermove', 'pointerup'\n      ];\n      types.forEach((type) => {\n        const handler = (e) => {\n          e.preventDefault();\n          e.stopPropagation();\n        };\n        document.addEventListener(type, handler, true);\n        this._blockMouseHandlers.push({ type, handler });\n      });\n    }\n\n    if (this.dialog && this.modal && !this._reopenOnClose) {\n      this._reopenOnClose = () => { this.modal.open && this.modal.open(); };\n      this.dialog.addEventListener('close', this._reopenOnClose, { once: true });\n    }\n  }\n\n}\n\ncustomElements.define('sys-age-verify', ageVerificationModal);\n\n\n// ===============================\n//        Quick Order List\n// ===============================\n\nclass BulkAdd extends HTMLElement {\n  static ASYNC_REQUEST_DELAY = 300;\n\n  constructor() {\n    super();\n    this.queue = [];\n    this.setRequestStarted(false)\n    this.ids = [];\n  }\n  startQueue(id, quantity) {\n    this.queue.push({ id, quantity });\n\n    const interval = setInterval(() => {\n      if (this.queue.length > 0) {\n        if (!this.requestStarted) {\n          this.sendRequest(this.queue);\n        }\n      } else {\n        clearInterval(interval);\n      }\n    }, BulkAdd.ASYNC_REQUEST_DELAY);\n  }\n\n  sendRequest(queue) {\n    this.setRequestStarted(true);\n    const items = {};\n    const ids = [];\n\n    queue.forEach((queueItem) => {\n      ids.push(queueItem.id);\n      items[parseInt(queueItem.id)] = queueItem.quantity;\n    });\n    this.queue = this.queue.filter((queueElement) => !queue.includes(queueElement));\n\n    this.updateMultipleQty(items,ids);\n  }\n\n  setRequestStarted(requestStarted) {\n    this._requestStarted = requestStarted;\n  }\n\n  get requestStarted() {\n    return this._requestStarted;\n  }\n\n}\nclass QuickOrderList extends BulkAdd {\n\n  hasPendingQuantityUpdate = false;\n  constructor() {\n    super();\n    this.quickOrderListId = '#' + this.id;\n    this.sectionId = this.dataset.sectionId;\n\n    const debouncedOnChange = debounce((event) => {\n      this.onChange(event);\n    }, BulkAdd.ASYNC_REQUEST_DELAY);\n\n    this.addEventListener('change', debouncedOnChange.bind(this));\n  }\n  onSubmit(event) {\n    event.preventDefault();\n  }\n\n  connectedCallback() {\n    document.addEventListener($4('hdt-cart-drawer') ? cartUpdate : 'variant:add', this.fetchQuickOrder.bind(this) );\n  }\n  disconnectedCallback() {\n    document.removeEventListener($4('hdt-cart-drawer') ? cartUpdate : 'variant:add', this.fetchQuickOrder.bind(this) );\n  }\n  async fetchQuickOrder() {\n    const section_data = await fetch(`${window.location.pathname}?section_id=${this.sectionId}`).then(r => r.text());\n    const html = new DOMParser().parseFromString(section_data, 'text/html');\n    const sourceQty = html.querySelector(this.quickOrderListId);\n    $4('form#QuickOrderList', this).removeEventListener('submit', this.onSubmit.bind(this));\n    this.innerHTML = sourceQty.innerHTML;\n    // this.scrollIntoView({\n    //   behavior: \"smooth\",\n    //   block: \"start\",\n    // })\n  }\n  onChange(event) {\n    const inputValue = parseInt(event.target.value);\n    if (inputValue >= 0) {\n      event.target.setAttribute('value', inputValue);\n      this.startQueue(event.target.dataset.quantityVariantId, inputValue);\n    } else {\n      this.resetQuantityInput(event.target.dataset.quantityVariantId);\n    }\n  }\n  onLoading(id) {\n    // this.classList.add('is-fetching');\n    $4(`#Variant-${id}`, this)?.classList.add('is-fetching');\n    $4(`#Variant-${id} [price_loading]`, this)?.setAttribute('aria-busy', true);\n    $$4('#hdt-quick-order-list-total .hdt-btn-loading__svg', this).forEach(el => el.setAttribute('aria-busy', true));\n  }\n  deLoading(id) {\n    $4(`#Variant-${id} [price_loading]`, this)?.setAttribute('aria-busy', false);\n    $$4('#hdt-quick-order-list-total .hdt-btn-loading__svg', this).forEach(el => el.setAttribute('aria-busy', false));\n    // this.classList.remove('is-fetching');\n    $4(`#Variant-${id}`, this)?.classList.remove('is-fetching');\n  }\n  fetchConfig(type = 'json') {\n    return {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', Accept: `application/${type}` },\n    };\n  }\n  // update quantity product\n  updateMultipleQty(items,ids = [], is_remove_all = false) {\n    if (this.queue.length == 0) this.hasPendingQuantityUpdate = false;\n    const url = this.dataset.url || window.location.pathname;\n    const bulkSectionRender = [this.sectionId];\n    const page = this.dataset.currentPage || 1;\n    let body = JSON.stringify({\n      updates: items,\n      sections: bulkSectionRender,\n      sections_url: `${url}?page=${page}`,\n    });\n    this.onLoading(ids[0]);\n    document.dispatchEvent(new CustomEvent(\"theme:loading:doing\",{bubbles:!0}));\n    fetch(`${Shopify.routes.root}cart/update.js`, { ...this.fetchConfig(), ...{ body } })\n    .then((response) => response.text())\n    .then(async (state) => {\n      const parsedState = JSON.parse(state);\n      const html_data = parsedState.sections[this.sectionId];\n      const html_parse = new DOMParser().parseFromString(html_data, 'text/html');\n      // console.log(html_parse)\n      if(!is_remove_all){\n        this.updateLineVariant(ids, html_parse);\n        this.updateTotal(html_parse);\n      }else {\n        this.updateAll(html_parse)\n      }\n    })\n    .catch((e) => {\n      console.error(e);\n    })\n    .finally(() => {\n      document.dispatchEvent(new CustomEvent(\"theme:loading:done\",{bubbles:!0}));\n      this.deLoading(ids[0]);\n      document.dispatchEvent(new CustomEvent(cartReload));\n      document.dispatchEvent(new CustomEvent(currencyUpdate));\n      this.setRequestStarted(false);\n    });\n  }\n  // Update content\n  updateLineVariant(ids,html_parse){\n    ids.forEach((id) => {\n      let variant_html = html_parse.querySelector(`#Variant-${id}`);\n      $4(`#Variant-${id}`, this)?.replaceWith(variant_html);\n    });\n  }\n  updateTotal(html_parse){\n    const total_html = html_parse.querySelector('#hdt-quick-order-list-total');\n    this.querySelector('#hdt-quick-order-list-total').replaceWith(total_html);\n  }\n  updateAll(html_parse){\n    const all_html = html_parse.querySelector('hdt-quick-order-list');\n    this.innerHTML = all_html.innerHTML;\n    this.scrollIntoView({\n      behavior: \"smooth\",\n      block: \"start\",\n    })\n  }\n  // Message erro\n  updateError(variant_id,message) {\n    this.updateLiveRegions(variant_id, message);\n  }\n  updateLiveRegions(variant_id, message) {\n    const variantItemError = $4(`#Variant-${variant_id}`, this);\n    if (variantItemError) {\n      $4('.hdt-error-message-text', variantItemError).innerHTML = message;\n      $4('[data-error-message]', variantItemError).removeAttribute('hidden');\n    }\n  }\n  resetQuantityInput(id){\n    const quantityElement = document.getElementById(`Quantity-${id}`);\n    quantityElement.value = quantityElement.getAttribute('value');\n  }\n  get cartVariantsForProduct() {\n    return JSON.parse(this.querySelector('[data-cart-contents]')?.innerHTML || '[]');\n  }\n}\ncustomElements.define('hdt-quick-order-list', QuickOrderList);\n\n// remove variant in cart\nclass QuickOrderListRemoveButton extends HTMLElement {\n  constructor() {\n    super();\n    this.addEventListener('click', (event) => {\n      event.preventDefault();\n      const quickOrderList = this.closest('hdt-quick-order-list');\n      quickOrderList.updateMultipleQty({[this.dataset.index]: 0}, [this.dataset.index]);\n    });\n  }\n}\ncustomElements.define('hdt-quick-order-list-remove-button', QuickOrderListRemoveButton);\n\n// remove all variant in cart\nclass QuickOrderListRemoveAllButton extends HTMLElement {\n  constructor() {\n    super();\n\n  }\n  connectedCallback(){\n    this.quickOrderList = this.closest('hdt-quick-order-list');\n    this.addEventListener('click', () => {\n      const items = this.quickOrderList.cartVariantsForProduct.reduce(\n        (acc, variantId) => ({ ...acc, [variantId]: 0 }),\n        {}\n      );\n      this.quickOrderList.updateMultipleQty(items,[], true);\n    })\n  }\n}\ncustomElements.define('hdt-quick-order-list-remove-all-button', QuickOrderListRemoveAllButton);\n\n// ================================\n// Toast Notification System\n// ================================\n\nclass ToastNotification {\n  constructor() {\n    this.container = null;\n    this.init();\n  }\n\n  init() {\n    // Create toast container if it doesn't exist\n    if (!document.querySelector('.toast-container')) {\n      this.container = document.createElement('div');\n      this.container.className = 'toast-container';\n      document.body.appendChild(this.container);\n    } else {\n      this.container = document.querySelector('.toast-container');\n    }\n  }\n\n  show(message, type = 'info', title = 'Notification', duration = 5000) {\n    const toast = this.createToast(message, type, title);\n    this.container.appendChild(toast);\n\n    // Trigger animation\n    setTimeout(() => {\n      toast.classList.add('show');\n    }, 10);\n\n    // Auto remove after duration\n    if (duration > 0) {\n      setTimeout(() => {\n        this.hide(toast);\n      }, duration);\n    }\n\n    return toast;\n  }\n\n  createToast(message, type, title) {\n    const toast = document.createElement('div');\n    toast.className = `toast ${type}`;\n    \n    toast.innerHTML = `\n      <div class=\"toast-header\">\n        <div class=\"toast-icon ${type}\">${this.getIcon(type)}</div>\n        <div class=\"toast-title\">${title}</div>\n        <button type=\"button\" class=\"toast-close\" aria-label=\"Close\">&times;</button>\n      </div>\n      <div class=\"toast-body\">${message}</div>\n    `;\n\n    // Add close functionality\n    const closeBtn = toast.querySelector('.toast-close');\n    closeBtn.addEventListener('click', () => {\n      this.hide(toast);\n    });\n\n    return toast;\n  }\n\n  hide(toast) {\n    toast.classList.add('hide');\n    setTimeout(() => {\n      if (toast.parentNode) {\n        toast.parentNode.removeChild(toast);\n      }\n    }, 300);\n  }\n\n  getIcon(type) {\n    const icons = {\n      error: '!',\n      success: '\u2713',\n      warning: '!',\n      info: 'i'\n    };\n    return icons[type] || icons.info;\n  }\n\n  // Static methods for easy use\n  static success(message, title = 'Success') {\n    return new ToastNotification().show(message, 'success', title);\n  }\n\n  static error(message, title = 'Error') {\n    return new ToastNotification().show(message, 'error', title);\n  }\n\n  static warning(message, title = 'Warning') {\n    return new ToastNotification().show(message, 'warning', title);\n  }\n\n  static info(message, title = 'Info') {\n    return new ToastNotification().show(message, 'info', title);\n  }\n}\n\n// Initialize toast notification system\nconst toast = new ToastNotification();\n\nwindow.addEventListener('cart:error', (event) => {\n  \n  // Extract error message from event\n  let errorMessage = window.themeHDN.extras.cart.error_message;\n  if (event.detail && event.detail.data.message) {\n    errorMessage = event.detail.data.message;\n  } else if (event.detail && event.detail.data.error) {\n    errorMessage = event.detail.data.error;\n  } else if (typeof event.detail === 'string') {\n    errorMessage = event.detail;\n  }\n  \n  // Show error toast\n  ToastNotification.error(errorMessage, window.themeHDN.extras.cart.toast_title);\n});\n\n// ================================\n//     Cart add Confetti\n// ================================\nclass ConfettiElement extends HTMLElement {\n  constructor() {\n      super();\n      \n      // Globals\n      this.canvas = null;\n      this.ctx = null;\n      this.W = 0;\n      this.H = 0;\n      this.mp = 150; // max particles\n      this.particles = [];\n      this.angle = 0;\n      this.tiltAngle = 0;\n      this.confettiActive = true;\n      this.animationComplete = true;\n      this.deactivationTimerHandler = null;\n      this.reactivationTimerHandler = null;\n      this.animationHandler = null;\n\n      this.whenShow = null;\n      this.hideAfterShow = null;\n      this.isShow = [];\n      \n      // Particle colors\n      this.particleColors = {\n          colorOptions: [\"DodgerBlue\", \"OliveDrab\", \"Gold\", \"pink\", \"SlateBlue\", \"lightblue\", \"Violet\", \"PaleGreen\", \"SteelBlue\", \"SandyBrown\", \"Chocolate\", \"Crimson\"],\n          colorIndex: 0,\n          colorIncrementer: 0,\n          colorThreshold: 10,\n          getColor: function () {\n              if (this.colorIncrementer >= 10) {\n                  this.colorIncrementer = 0;\n                  this.colorIndex++;\n                  if (this.colorIndex >= this.colorOptions.length) {\n                      this.colorIndex = 0;\n                  }\n              }\n              this.colorIncrementer++;\n              return this.colorOptions[this.colorIndex];\n          }\n      };\n      \n      // Bind methods\n      this.handleResize = this.handleResize.bind(this);\n  }\n  \n  connectedCallback() {\n      this.init();\n      this.setupEventListeners();\n  }\n  \n  disconnectedCallback() {\n      this.cleanup();\n      this.removeEventListeners();\n  }\n  \n  // Confetti Particle Factory\n  createConfettiParticle(color) {\n      const ctx = this.ctx;\n      const W = this.W;\n      const H = this.H;\n      const mp = this.mp;\n      \n      return {\n          x: Math.random() * W,\n          y: (Math.random() * H) - H,\n          r: this.randomFromTo(10, 30),\n          d: (Math.random() * mp) + 10,\n          color: color,\n          tilt: Math.floor(Math.random() * 10) - 10,\n          tiltAngleIncremental: (Math.random() * 0.07) + 0.05,\n          tiltAngle: 0,\n          \n          draw: function() {\n              ctx.beginPath();\n              ctx.lineWidth = this.r / 2;\n              ctx.strokeStyle = this.color;\n              ctx.moveTo(this.x + this.tilt + (this.r / 4), this.y);\n              ctx.lineTo(this.x + this.tilt, this.y + this.tilt + (this.r / 4));\n              return ctx.stroke();\n          }\n      };\n  }\n  \n  init() {\n    this.setGlobals();\n    // Add resize listener\n    window.addEventListener('resize', this.handleResize);\n  }\n  \n  setupEventListeners() {\n    // Listen for custom events\n    this.handleConfettiStart = this.handleConfettiStart.bind(this);\n    this.handleConfettiPause = this.handleConfettiPause.bind(this);\n    \n    document.addEventListener('confetti:start', this.handleConfettiStart);\n    document.addEventListener('confetti:pause', this.handleConfettiPause);\n\n    const cartDrawer = document.querySelector('#CartDrawer');\n    cartDrawer?.addEventListener(dialogClose,()=> {\n      this.pause();\n    })\n\n    document.addEventListener(progressBarChange, (event)=> {\n      this.handleProgressBarChange(event);\n\n    })\n  }\n  \n  removeEventListeners() {\n    document.removeEventListener('confetti:start', this.handleConfettiStart);\n    document.removeEventListener('confetti:pause', this.handleConfettiPause);\n    const cartDrawer = document.querySelector('#CartDrawer');\n    cartDrawer.removeEventListener(dialogClose,()=> {\n      this.pause();\n    })\n  }\n\n  handleProgressBarChange(event){\n    clearTimeout(this.whenShow);\n    clearTimeout(this.hideAfterShow);\n    if(this.isShow.length == 1 && parseInt(event.detail.rangeValue) == 1){\n      this.handlePauseAnimation();\n      return;\n    }\n    if(parseInt(event.detail.rangeValue) == 1 && this.isShow.length <= 1 ){\n      this.showPopover();\n      this.start();\n      this.isShow.push(event.detail.rangeValue);\n    }else{\n      this.isShow.pop(1);\n    }\n    this.handlePauseAnimation();\n    // console.log(this.isShow);\n  }\n  handlePauseAnimation(){\n    this.whenShow = setTimeout(() => {\n      this.pause();\n      this.hideAfterShow = setTimeout(() => {\n        this.hidePopover();\n      }, 5000);\n    }, 3000);\n  }\n  handleConfettiStart(event) {\n      // Check if this specific element should respond to the event\n    if (event.detail && event.detail.target && event.detail.target !== this) {\n        return; // Ignore if targeted at another element\n    }\n    this.showPopover();\n    this.start();\n  }\n  \n  handleConfettiPause(event) {\n    clearTimeout(this.whenShow);\n    clearTimeout(this.hideAfterShow);\n      // Check if this specific element should respond to the event\n    if (event.detail && event.detail.target && event.detail.target !== this) {\n        return; // Ignore if targeted at another element\n    }\n    this.pause();\n    \n    this.hideAfterShow = setTimeout(() => {\n      this.hidePopover();\n    }, 5000);\n  }\n  \n  cleanup() {\n    window.removeEventListener('resize', this.handleResize);\n    this.removeEventListeners();\n    this.clearTimers();\n    this.stopConfetti();\n    if (this.hideTimeout) {\n      clearTimeout(this.hideTimeout);\n    }\n  }\n  \n  handleResize() {\n    this.W = window.innerWidth;\n    this.H = window.innerHeight;\n    if (this.canvas) {\n        this.canvas.width = this.W;\n        this.canvas.height = this.H;\n    }\n  }\n\n  setGlobals() {\n    // Create canvas if it doesn't exist\n    let canvas = this.querySelector('#confettiCanvas');\n    if (!canvas) {\n        canvas = document.createElement('canvas');\n        canvas.id = 'confettiCanvas';\n        canvas.style.cssText = 'position: fixed; top: 0; left: 0; display: none; z-index: 9999; pointer-events: none;';\n        this.appendChild(canvas);\n    }\n    \n    this.canvas = canvas;\n    this.ctx = this.canvas.getContext('2d');\n    this.W = window.innerWidth;\n    this.H = window.innerHeight;\n    this.canvas.width = this.W;\n    this.canvas.height = this.H;\n  }\n  \n  initializeConfetti() {\n    if (!this.canvas || !this.ctx) {\n        console.error('Canvas not initialized');\n        return;\n    }\n    \n    // Ng\u1EEBng animation hi\u1EC7n t\u1EA1i tr\u01B0\u1EDBc khi b\u1EAFt \u0111\u1EA7u c\u00E1i m\u1EDBi\n    this.clearTimers();\n    \n    this.canvas.style.display = 'block';\n    this.particles = [];\n    this.animationComplete = false;\n    this.confettiActive = true;\n    \n    for (let i = 0; i < this.mp; i++) {\n        const particleColor = this.particleColors.getColor();\n        this.particles.push(this.createConfettiParticle(particleColor));\n    }\n    \n    this.startConfetti();\n  }\n  \n  draw() {\n    if (!this.ctx) return [];\n    \n    this.ctx.clearRect(0, 0, this.W, this.H);\n    const results = [];\n    \n    for (let i = 0; i < this.mp && i < this.particles.length; i++) {\n        if (this.particles[i] && this.particles[i].draw) {\n            results.push(this.particles[i].draw());\n        }\n    }\n    \n    this.update();\n    return results;\n  }\n  \n  randomFromTo(from, to) {\n    return Math.floor(Math.random() * (to - from + 1) + from);\n  }\n  \n  update() {\n    let remainingFlakes = 0;\n    let particle;\n    this.angle += 0.01;\n    this.tiltAngle += 0.1;\n    \n    for (let i = 0; i < this.mp && i < this.particles.length; i++) {\n        particle = this.particles[i];\n        if (this.animationComplete) return;\n        \n        if (!this.confettiActive && particle.y < -15) {\n            particle.y = this.H + 100;\n            continue;\n        }\n        \n        this.stepParticle(particle, i);\n        \n        if (particle.y <= this.H) {\n            remainingFlakes++;\n        }\n        \n        this.checkForReposition(particle, i);\n    }\n    \n    if (remainingFlakes === 0) {\n        this.stopConfetti();\n    }\n  }\n  \n  checkForReposition(particle, index) {\n    if ((particle.x > this.W + 20 || particle.x < -20 || particle.y > this.H) && this.confettiActive) {\n      if (index % 5 > 0 || index % 2 === 0) { // 66.67% of the flakes\n          this.repositionParticle(particle, Math.random() * this.W, -10, Math.floor(Math.random() * 10) - 10);\n      } else {\n        if (Math.sin(this.angle) > 0) {\n            // Enter from the left\n            this.repositionParticle(particle, -5, Math.random() * this.H, Math.floor(Math.random() * 10) - 10);\n        } else {\n            // Enter from the right\n            this.repositionParticle(particle, this.W + 5, Math.random() * this.H, Math.floor(Math.random() * 10) - 10);\n        }\n      }\n    }\n  }\n  \n  stepParticle(particle, particleIndex) {\n    particle.tiltAngle += particle.tiltAngleIncremental;\n    particle.y += (Math.cos(this.angle + particle.d) + 3 + particle.r / 2) / 2;\n    particle.x += Math.sin(this.angle);\n    particle.tilt = (Math.sin(particle.tiltAngle - (particleIndex / 3))) * 15;\n  }\n  \n  repositionParticle(particle, xCoordinate, yCoordinate, tilt) {\n    particle.x = xCoordinate;\n    particle.y = yCoordinate;\n    particle.tilt = tilt;\n  }\n  \n  startConfetti() {\n    // \u0110\u1EA3m b\u1EA3o ch\u1EC9 c\u00F3 1 animation loop ch\u1EA1y\n    if (this.animationHandler) {\n      cancelAnimationFrame(this.animationHandler);\n      this.animationHandler = null;\n    }\n    \n    this.W = window.innerWidth;\n    this.H = window.innerHeight;\n    if (this.canvas) {\n      this.canvas.width = this.W;\n      this.canvas.height = this.H;\n    }\n    \n    const animloop = () => {\n      if (this.animationComplete) return null;\n      this.animationHandler = requestAnimationFrame(animloop);\n      return this.draw();\n    };\n    \n    animloop();\n  }\n  \n  clearTimers() {\n    if (this.reactivationTimerHandler) {\n      clearTimeout(this.reactivationTimerHandler);\n    }\n    if (this.animationHandler) {\n      cancelAnimationFrame(this.animationHandler);\n      this.animationHandler = null;\n    }\n  }\n  \n  deactivateConfetti() {\n    this.confettiActive = false;\n  }\n  \n  stopConfetti() {\n    this.animationComplete = true;\n    if (this.ctx) {\n        this.ctx.clearRect(0, 0, this.W, this.H);\n    }\n    if (this.canvas) {\n        this.canvas.style.display = 'none';\n    }\n  }\n  \n  restartConfetti() {\n    this.clearTimers();\n    this.stopConfetti();\n    this.reactivationTimerHandler = setTimeout(() => {\n      this.confettiActive = true;\n      this.animationComplete = false;\n      this.initializeConfetti();\n    }, 100);\n  }\n  \n  forceStopConfetti() {\n    this.clearTimers();\n    this.stopConfetti();\n  }\n\n  \n  // Public API methods\n  start() {\n    // Ch\u1EC9 start n\u1EBFu ch\u01B0a c\u00F3 animation \u0111ang ch\u1EA1y\n    if (this.animationComplete || !this.confettiActive) {\n      this.initializeConfetti();\n    }\n  }\n  \n  pause() {\n    this.deactivateConfetti();\n  }\n  \n  stop() {\n    this.forceStopConfetti();\n  }\n  \n  restart() {\n    this.restartConfetti();\n  }\n}\n\n// Define the custom element\ncustomElements.define('confetti-element', ConfettiElement);\n\n// ================================\n//     Add Gift Card \n// ================================\n\n// DEFINE state:\n//   0: no-fetch \n//   1: added \n//   2: removed\nclass AddGiftCard extends HTMLElement {\n  constructor() {\n    super();\n    this.layout_id = this.getAttribute('aria-controls');\n    this.layout = document.querySelector(`${this.layout_id}`);\n    this.sectionId = this.getAttribute('data-section-id');\n    this.state = sessionStorage.getItem('hdt-add-gift-card-state') || 0;\n  }\n  get variantID(){\n    return this.getAttribute('data-variant-id');\n  }\n  get totalRequired(){\n    return parseFloat(this.getAttribute('data-total-required'));\n  }\n  get currentPrice(){\n    return parseFloat(this.getAttribute('data-current-price'));\n  }\n  connectedCallback(){\n    // console.log(this.totalRequired, this.currentPrice);\n    // console.log(this.state);\n    this.fetchData();\n  }\n  fetchData(){\n    if (this.currentPrice >= this.totalRequired && this.state == 0){\n      // console.log(\"ADD gift card\")\n      this.updateCart(this.variantID, 1);\n      sessionStorage.setItem('hdt-add-gift-card-state', 1);\n    }else if(this.currentPrice < this.totalRequired && this.state == 1){\n      // this.updateCart(this.variantID, 0);\n      // console.log(\"REomve gift card\")\n      this.updateCart(this.variantID, 0);\n      sessionStorage.setItem('hdt-add-gift-card-state', 2);\n    }else if( this.currentPrice >= this.totalRequired && this.state == 2){\n      // this.updateCart(this.variantID, 1);\n      // console.log(\"ADD gift card\")\n      this.updateCart(this.variantID, 1);\n      sessionStorage.setItem('hdt-add-gift-card-state', 1);\n    }\n  }\n  fetchConfig(type = 'json') {\n    return {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', Accept: `application/${type}` },\n    };\n  }\n  updateCart(id, quantity){\n\n    const body = JSON.stringify({\n      updates: {\n        [id]: quantity\n      },\n      sections: [this.sectionId],\n      sections_url: `${window.location.pathname}?section_id=${this.sectionId}`\n    }); \n    fetch(`${Shopify.routes.root}cart/update.js`, { ...this.fetchConfig(), ...{ body } })\n    .then((response) => response.text())\n    .then(async (state) => {\n      const parsedState = JSON.parse(state);\n      const html_data = parsedState.sections[this.sectionId];\n      const html_parse = new DOMParser().parseFromString(html_data, 'text/html');\n      const layout_data = html_parse.querySelector(`${this.layout_id}`);\n      if(layout_data){\n        this.layout?.replaceWith(layout_data);\n      }\n    })\n    .catch((e) => {\n      console.error(e);\n    })\n    .finally(() => {\n\n    });\n\n  }\n}\n\ncustomElements.define('hdt-add-gift-card', AddGiftCard);\n\n// ================================\n//     Shipping Protection\n// ================================\nclass ShippingProtection extends HTMLElement {\n  constructor() {\n    super();\n    this.STATE = {\n      ADD: 'add',\n      REMOVE: 'remove',\n    };\n    // this.cartAction = cartUpdate;\n    this.updateCurrency = currencyUpdate;\n    this.ASYNC_REQUEST_DELAY = 300;\n    this.cartItemsComponent = this.closest(`${this.dataPageId}`);\n  }\n  get toggleCheckBox(){\n    return this.querySelector('input[name=\"shipping_protection\"]');\n  }\n  get protectId(){\n    return this.querySelector('input[name=\"shipping_protect_id\"]').value;\n  }\n  get sectionId(){\n    return this.getAttribute('section-id');\n  }\n  get shippingProtectionUpdate(){\n    return this.closest(`#shopify-section-${this.sectionId}`).querySelector('[shipping-protection-update]');\n  }\n  get dataPageId(){\n    return this.getAttribute('data-page-id');\n  }\n  connectedCallback(){\n    this.debounceChange = debounce((e) => {\n      this.handleChange(e);\n    }, this.ASYNC_REQUEST_DELAY);\n    this.toggleCheckBox.addEventListener('change', this.debounceChange.bind(this));\n    // this.syncCartUpdate();\n  }\n  disconnectCallback(){\n    this.toggleCheckBox.removeEventListener('change', this.debounceChange.bind(this));\n  }\n  handleChange(event){\n    if(event.target.checked){\n      this.protectAction(this.STATE.ADD);\n    }else{\n      this.protectAction(this.STATE.REMOVE);\n    }\n  }\n  protectAction(action){ \n    if(action == this.STATE.ADD){\n      this.updateCart(this.protectId, 1);\n    }else if(action == this.STATE.REMOVE){\n      this.updateCart(this.protectId, 0);\n    }\n  }\n  fetchConfig(type = 'json'){\n    return {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', Accept: `application/${type}` },\n    };\n  }\n  async updateCart(productId, quantity){\n    const body = JSON.stringify({\n      updates: {\n        [productId]: quantity\n      },\n      sections: [this.sectionId],\n      sections_url: `${window.location.pathname}?section_id=${this.sectionId}`\n    }); \n    document.dispatchEvent(new CustomEvent('theme:loading:doing', { bubbles: true }));\n    this.cartItemsComponent.style.setProperty('pointer-events', 'none');\n    this.cartItemsComponent.style.setProperty('opacity', '0.5');\n    fetch(`${Shopify.routes.root}cart/update.js`, { ...this.fetchConfig(), ...{ body } })\n    .then((response) => response.text())\n    .then((state) => {\n      // const parsedState = JSON.parse(state);\n      // const sectionData = new DOMParser().parseFromString(parsedState.sections[this.sectionId], 'text/html');\n\n      // const needUpdate = sectionData.querySelector('[shipping-protection-update]');\n      // if(needUpdate){\n      //   this.shippingProtectionUpdate?.replaceWith(needUpdate);\n      // }\n\n      // const shippingProtectWidget = sectionData.querySelector('shipping-protection');\n      // if(shippingProtectWidget){\n      //   this.replaceWith(shippingProtectWidget);\n      // }\n\n\n      document.dispatchEvent(new CustomEvent(cartReload, { bubbles: true }));\n      \n      document.dispatchEvent(new CustomEvent('theme:loading:done', { bubbles: true }));\n    })\n    .finally(() => {\n      document.dispatchEvent(new CustomEvent(this.updateCurrency,{ bubbles: true }));\n      this.cartItemsComponent.style.setProperty('pointer-events', 'auto');\n      this.cartItemsComponent.style.setProperty('opacity', '1');\n    })\n  }\n  syncCartUpdate(){\n    document.addEventListener(cartUpdate, (event) => {\n      try {\n        const items_in_cart = event.detail.cartData.items;\n        if(items_in_cart.length == 1 && items_in_cart[0].id == this.protectId){\n          this.updateCart(this.protectId, 0);\n        }\n      } catch (err) {\n        console.error(err);\n      }\n      \n    });\n  }\n}\ncustomElements.define('shipping-protection', ShippingProtection);\n\nclass AccordionGroup extends HTMLElement {\n  #abortController;\n  #boundHandleClick = this.handleClick.bind(this);\n  #boundHandleResize = this.handleResize.bind(this);\n  #resizeObserver;\n\n  get singleOpen(){\n    return this.hasAttribute('single-open');\n  }\n\n  get accordionListings(){\n    return this.querySelectorAll('hdt-accordion');\n  }\n\n  get isTypeAccordion(){\n    return this.classList.contains('hdt-type-tab-accordion_');\n  }\n\n  itemNotTarget(event){\n    return Array.from(this.accordionListings).filter((accordion) => accordion !== event.target.closest('hdt-accordion'));\n  }\n\n  handleResponsiveAccordion() {\n    const accordions = this.accordionListings;\n    if (accordions.length === 0) return;\n\n    const isMobile = window.innerWidth < 768;\n\n    if (isMobile) {\n      accordions.forEach((accordion, index) => {\n        if (index === 0) {\n          accordion.toggle(true);\n        } else {\n          accordion.toggle(false);\n        }\n      });\n    } else {\n      accordions.forEach((accordion) => {\n        accordion.toggle(true);\n      });\n    }\n  }\n\n  handleResize() {\n    if (this.isTypeAccordion) {\n      this.handleResponsiveAccordion();\n    }\n  }\n\n  connectedCallback() {\n    this.#abortController = new AbortController();\n    \n    if(this.singleOpen) {\n      this.addEventListener('click', this.#boundHandleClick, { signal: this.#abortController.signal });\n    }\n\n    if (this.isTypeAccordion) {\n      this.handleResponsiveAccordion();\n      \n      window.addEventListener('resize', this.#boundHandleResize, { signal: this.#abortController.signal });\n    }\n  }\n\n  handleClick(event){\n    if(event.target.tagName === 'SUMMARY' || event.target.closest('summary')) {\n      this.itemNotTarget(event).forEach((accordion) => {\n        accordion.toggle(false);\n      });\n    } \n  }\n\n  disconnectedCallback() {\n    this.#abortController?.abort();\n  }\n}\ncustomElements.define('hdt-accordion-group', AccordionGroup);\n\n/* CD_FATHER_BUNDLE_HK50_PATCH START\n * Temporary narrow storefront guard: Father kids bundle discount is HK$50 off.\n * Keeps cached product HTML display aligned with Shopify discount FDKID26.\n */\n(function() {\n  var path = (window.location && window.location.pathname) || '';\n  if (path.indexOf('because-youre-my-dad') === -1) return;\n  function replaceTextNode(node) {\n    if (!node || node.nodeType !== 3 || !node.nodeValue) return;\n    var text = node.nodeValue;\n    var next = text\n      .replace(/\u7D44\u5408\u5373\u6E1B \\$70/g, '\u7D44\u5408\u5373\u6E1B $50')\n      .replace(/\u5169\u672C\u7D44\u5408\u5373\u6E1B \\$70/g, '\u5169\u672C\u7D44\u5408\u5373\u6E1B $50')\n      .replace(/\\$586/g, '$606');\n    if (next !== text) node.nodeValue = next;\n  }\n  function walk(root) {\n    if (!root) return;\n    var walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null);\n    var node;\n    while ((node = walker.nextNode())) replaceTextNode(node);\n  }\n  function updatePrice() {\n    var dad = document.getElementById('cd-bb-dad');\n    var mom = document.getElementById('cd-bb-mom');\n    var origEl = document.getElementById('cd-bb-original');\n    var bundleEl = document.getElementById('cd-bb-bundle');\n    if (!dad || !mom || !origEl || !bundleEl) return false;\n    var dp = parseInt(dad.options[dad.selectedIndex].dataset.price, 10) || 0;\n    var mp = parseInt(mom.options[mom.selectedIndex].dataset.price, 10) || 0;\n    var orig = dp + mp;\n    origEl.textContent = '$' + orig;\n    bundleEl.textContent = '$' + (orig - 50);\n    window.cdUpdateBookBundle = updatePrice;\n    return true;\n  }\n  function run() { walk(document.body); updatePrice(); }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', run);\n  else run();\n  var tries = 0;\n  var timer = setInterval(function() {\n    run();\n    tries += 1;\n    if (tries > 20) clearInterval(timer);\n  }, 500);\n})();\n/* CD_FATHER_BUNDLE_HK50_PATCH END */\n\n/* BYMD preview fallback 20260609 written start */\n(function(){\n  try{\n    if(!/because-youre-my-dad/.test(location.pathname||'')) return;\n    var hardPages=[\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_cover_1child_20260518.png?v=1779120585\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_dedication_1child_20260610_sample_childA.jpg?v=1781049502\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_01_1child_20260609.jpg?v=1781018641\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_02_1child_20260609.jpg?v=1781018647\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_03_1child_20260609.jpg?v=1781018652\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_04_1child_20260609.jpg?v=1781018684\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_05_1child_20260609.jpg?v=1781018690\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_06_1child_20260609.jpg?v=1781018696\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_07_1child_20260609.jpg?v=1781018702\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_08_1child_20260609.jpg?v=1781018707\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_09_1child_20260609.jpg?v=1781018713\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_10_1child_20260609.jpg?v=1781018719\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_11_1child_20260609.jpg?v=1781018725\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_12_1child_20260609.jpg?v=1781018730\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_13_1child_20260609.jpg?v=1781018735\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_14_1child_20260609.jpg?v=1781018740\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_15_1child_20260609.jpg?v=1781018746\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_16_1child_20260609.jpg?v=1781018752\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_17_1child_20260609.jpg?v=1781018757\"\n];\n    var oldStoryNames=[\n  \"bymd_father_v3_page_01_1child_20260518.jpg\",\n  \"bymd_father_v3_page_02_1child_20260518.jpg\",\n  \"bymd_father_v3_page_03_1child_20260518.jpg\",\n  \"bymd_father_v3_page_04_1child_20260518.jpg\",\n  \"bymd_father_v3_page_05_1child_20260518.jpg\",\n  \"bymd_father_v3_page_06_1child_20260518.jpg\",\n  \"bymd_father_v3_page_07_1child_20260518.jpg\",\n  \"bymd_father_v3_page_08_1child_20260518.jpg\",\n  \"bymd_father_v3_page_09_1child_20260518.jpg\",\n  \"bymd_father_v3_page_10_1child_20260518.jpg\",\n  \"bymd_father_v3_page_11_1child_20260518.jpg\",\n  \"bymd_father_v3_page_12_1child_20260518.jpg\",\n  \"bymd_father_v3_page_13_1child_20260518.jpg\",\n  \"bymd_father_v3_page_14_1child_20260518.jpg\",\n  \"bymd_father_v3_page_15_1child_20260518.jpg\",\n  \"bymd_father_v3_page_16_1child_20260518.jpg\",\n  \"bymd_father_v3_page_17_1child_20260518.jpg\"\n];\n    var newStoryUrls=[\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_01_1child_20260609.jpg?v=1781018641\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_02_1child_20260609.jpg?v=1781018647\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_03_1child_20260609.jpg?v=1781018652\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_04_1child_20260609.jpg?v=1781018684\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_05_1child_20260609.jpg?v=1781018690\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_06_1child_20260609.jpg?v=1781018696\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_07_1child_20260609.jpg?v=1781018702\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_08_1child_20260609.jpg?v=1781018707\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_09_1child_20260609.jpg?v=1781018713\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_10_1child_20260609.jpg?v=1781018719\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_11_1child_20260609.jpg?v=1781018725\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_12_1child_20260609.jpg?v=1781018730\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_13_1child_20260609.jpg?v=1781018735\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_14_1child_20260609.jpg?v=1781018740\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_15_1child_20260609.jpg?v=1781018746\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_16_1child_20260609.jpg?v=1781018752\",\n  \"https://cdn.shopify.com/s/files/1/0512/8791/6719/files/bymd_father_v3_written_page_17_1child_20260609.jpg?v=1781018757\"\n];\n    function upgradeUrl(url){\n      if(!url) return url;\n      var text=String(url);\n      for(var i=0;i<oldStoryNames.length;i++){\n        if(text.indexOf(oldStoryNames[i])!==-1) return newStoryUrls[i];\n      }\n      return url;\n    }\n    function patchAttrs(el){\n      if(!el || !el.getAttribute) return;\n      ['src','data-src','data-master','data-original'].forEach(function(attr){\n        var value=el.getAttribute(attr);\n        var next=upgradeUrl(value);\n        if(next && next!==value) el.setAttribute(attr,next);\n      });\n      var srcset=el.getAttribute('srcset') || el.getAttribute('data-srcset');\n      if(srcset){\n        var nextSet=srcset.split(',').map(function(part){\n          var trimmed=part.trim();\n          if(!trimmed) return trimmed;\n          var bits=trimmed.split(/\\s+/);\n          var upgraded=upgradeUrl(bits[0]);\n          bits[0]=upgraded;\n          return bits.join(' ');\n        }).join(', ');\n        if(nextSet!==srcset){\n          if(el.getAttribute('srcset')) el.setAttribute('srcset',nextSet);\n          if(el.getAttribute('data-srcset')) el.setAttribute('data-srcset',nextSet);\n        }\n      }\n    }\n    function patchDomImages(){\n      var imgs=document.querySelectorAll ? document.querySelectorAll('img') : [];\n      for(var i=0;i<imgs.length;i++) patchAttrs(imgs[i]);\n    }\n    function pages(){\n      // Product page preview is intentionally the fixed 1-child sample set.\n      window.cdPages=hardPages.slice();\n      return window.cdPages;\n    }\n    window.cdIdx=window.cdIdx||0;\n    window.cdFlip=function(d){\n      var list=pages();\n      var img=document.getElementById('cd-flipbook-img');\n      var counter=document.getElementById('cd-flipbook-counter');\n      if(!img || !list.length) return false;\n      window.cdIdx=Math.max(0,Math.min(list.length-1,(window.cdIdx||0)+d));\n      img.src=list[window.cdIdx];\n      if(counter) counter.textContent=(window.cdIdx+1)+' / '+list.length;\n      return false;\n    };\n    window.cdOpenFlipbook=function(){\n      var m=document.getElementById('cd-flipbook-modal');\n      if(m){m.style.display='flex';m.setAttribute('aria-hidden','false');}\n      window.cdFlip(0);\n      return false;\n    };\n    window.cdCloseFlipbook=function(){\n      var m=document.getElementById('cd-flipbook-modal');\n      if(m){m.style.display='none';m.setAttribute('aria-hidden','true');}\n      return false;\n    };\n    function bind(){\n      pages();\n      patchDomImages();\n      var btn=document.getElementById('cd-t-s3-btn');\n      var close=document.getElementById('cd-flipbook-close');\n      var prev=document.getElementById('cd-flipbook-prev');\n      var next=document.getElementById('cd-flipbook-next');\n      if(btn){btn.setAttribute('type','button');btn.onclick=function(e){if(e){e.preventDefault();e.stopPropagation();}return window.cdOpenFlipbook();};}\n      if(close){close.setAttribute('type','button');close.onclick=function(e){if(e){e.preventDefault();e.stopPropagation();}return window.cdCloseFlipbook();};}\n      if(prev){prev.setAttribute('type','button');prev.onclick=function(e){if(e){e.preventDefault();e.stopPropagation();}return window.cdFlip(-1);};}\n      if(next){next.setAttribute('type','button');next.onclick=function(e){if(e){e.preventDefault();e.stopPropagation();}return window.cdFlip(1);};}\n    }\n    document.addEventListener('click',function(e){\n      var t=e.target && e.target.closest && e.target.closest('#cd-t-s3-btn,#cd-flipbook-close,#cd-flipbook-prev,#cd-flipbook-next');\n      if(!t) return;\n      e.preventDefault(); e.stopPropagation();\n      if(t.id==='cd-t-s3-btn') return window.cdOpenFlipbook();\n      if(t.id==='cd-flipbook-close') return window.cdCloseFlipbook();\n      if(t.id==='cd-flipbook-prev') return window.cdFlip(-1);\n      if(t.id==='cd-flipbook-next') return window.cdFlip(1);\n    },true);\n    bind();\n    document.addEventListener('DOMContentLoaded',bind);\n    document.addEventListener('shopify:section:load',bind);\n    if(window.MutationObserver){\n      var queued=false;\n      new MutationObserver(function(){\n        if(queued) return;\n        queued=true;\n        setTimeout(function(){queued=false;bind();},120);\n      }).observe(document.documentElement,{childList:true,subtree:true,attributes:true,attributeFilter:['src','srcset','data-src','data-srcset']});\n    }\n    setTimeout(bind,500);setTimeout(bind,1500);setTimeout(bind,3000);\n  }catch(e){console.warn('BYMD written preview fallback error',e);}\n})();\n/* BYMD preview fallback 20260609 written end */\n\n\n/* CD_BYMD_PRICE_CHIP_FIX_CUSTOM_JS_V1 START */\n(function(){\n  if (window.__cdBymdPriceChipFixCustomJsV1) return;\n  window.__cdBymdPriceChipFixCustomJsV1 = true;\n  var HANDLE = 'because-youre-my-dad';\n  var PRICE_MAP = {\n    '\u96FB\u5B50\u7248 Digital': {\n      '1 \u5B69\u7248 (\u7238\u7238+1\u5C0F\u670B\u53CB)': 'HK$198',\n      '2 \u5B69\u7248 (\u7238\u7238+2\u5C0F\u670B\u53CB)': 'HK$218',\n      '2 \u5B69\u7248 (\u7238\u7238+2\u5C0F\u670B\u53CB) *Twins': 'HK$218',\n      '3 \u5B69\u7248 (\u7238\u7238+3\u5C0F\u670B\u53CB)': 'HK$238'\n    },\n    '\u7CBE\u88DD\u5BE6\u9AD4\u66F8 Hardcover': {\n      '1 \u5B69\u7248 (\u7238\u7238+1\u5C0F\u670B\u53CB)': 'HK$328',\n      '2 \u5B69\u7248 (\u7238\u7238+2\u5C0F\u670B\u53CB)': 'HK$348',\n      '2 \u5B69\u7248 (\u7238\u7238+2\u5C0F\u670B\u53CB) *Twins': 'HK$348',\n      '3 \u5B69\u7248 (\u7238\u7238+3\u5C0F\u670B\u53CB)': 'HK$368'\n    }\n  };\n  function isTarget(){ return (location.pathname || '').indexOf(HANDLE) !== -1; }\n  function picker(){ return document.querySelector('hdt-variant-picker[handle*=\"because-youre-my-dad\"]'); }\n  function esc(v){ return window.CSS && CSS.escape ? CSS.escape(v) : String(v).replace(/([ #;?%&,.+*~\\':\"!^$[\\]()=>|/@])/g,'\\\\$1'); }\n  function format(){\n    var root = picker();\n    var checked = root && root.querySelector('input[name=\"\u7248\u672C Format\"]:checked');\n    if (checked) return checked.value;\n    var legend = root && root.querySelector('fieldset[data-index=\"0\"] legend [update-value]');\n    return legend ? legend.textContent.trim() : '\u96FB\u5B50\u7248 Digital';\n  }\n  function ensureStyle(){\n    if (document.getElementById('cd-bymd-price-chip-fix-custom-style')) return;\n    var style = document.createElement('style');\n    style.id = 'cd-bymd-price-chip-fix-custom-style';\n    style.textContent = [\n      'hdt-variant-picker[handle*=\"because-youre-my-dad\"] fieldset[data-index=\"1\"] label.hdt-product-form_value{display:inline-flex!important;align-items:center;gap:.45rem;flex-wrap:wrap;line-height:1.25;padding-inline:.9rem;}',\n      'hdt-variant-picker[handle*=\"because-youre-my-dad\"] fieldset[data-index=\"1\"] .cd-bymd-option-price{display:inline-flex;align-items:center;border:1px solid rgba(178,107,83,.22);border-radius:999px;padding:.12rem .45rem;font-size:.72em;font-weight:700;line-height:1.1;color:#7d4632;background:#fff8f4;white-space:nowrap;text-decoration:none;}',\n      'hdt-variant-picker[handle*=\"because-youre-my-dad\"] fieldset[data-index=\"1\"] input[type=radio]:checked+label .cd-bymd-option-price{border-color:rgba(255,255,255,.35);color:rgba(var(--hdt-btn-color),.95);background:rgba(255,255,255,.18);}',\n      'hdt-variant-picker[handle*=\"because-youre-my-dad\"] fieldset[data-index=\"1\"] input[type=radio].is-disabled+label{text-decoration:none;}',\n      'hdt-variant-picker[handle*=\"because-youre-my-dad\"] fieldset[data-index=\"1\"] input[type=radio].is-disabled+label .cd-bymd-option-title{text-decoration:line-through;}'\n    ].join('\\n');\n    document.head.appendChild(style);\n  }\n  function findInput(fieldset, val){\n    var inputs = fieldset ? fieldset.querySelectorAll('input[name=\"\u4EBA\u6578 Children\"]') : [];\n    for (var i=0; i<inputs.length; i++) if ((inputs[i].value || '').trim() === val) return inputs[i];\n    return null;\n  }\n  function findLabel(fieldset, input){\n    if (!input) return null;\n    if (input.id) { try { var label = fieldset.querySelector('label[for=\"' + esc(input.id) + '\"]'); if (label) return label; } catch(e){} }\n    return input.nextElementSibling && input.nextElementSibling.tagName === 'LABEL' ? input.nextElementSibling : null;\n  }\n  function normalize(label, txt){\n    var title = label.querySelector('.cd-bymd-option-title');\n    if (!title) {\n      var chip = label.querySelector('.cd-bymd-option-price');\n      label.textContent = '';\n      title = document.createElement('span');\n      title.className = 'cd-bymd-option-title';\n      label.appendChild(title);\n      if (chip) label.appendChild(chip);\n    }\n    title.textContent = txt;\n  }\n  function apply(){\n    if (!isTarget()) return false;\n    var root = picker();\n    if (!root) return false;\n    var fieldset = root.querySelector('fieldset[data-index=\"1\"]');\n    if (!fieldset) return false;\n    ensureStyle();\n    var map = PRICE_MAP[format()] || PRICE_MAP['\u96FB\u5B50\u7248 Digital'];\n    var count = 0;\n    Object.keys(map).forEach(function(child){\n      var input = findInput(fieldset, child);\n      var label = findLabel(fieldset, input);\n      if (!input || !label) return;\n      normalize(label, input.value);\n      var chip = label.querySelector('.cd-bymd-option-price');\n      if (!chip) { chip = document.createElement('span'); chip.className = 'cd-bymd-option-price'; label.appendChild(chip); }\n      if (chip.textContent !== map[child]) chip.textContent = map[child];\n      count += 1;\n    });\n    return count > 0;\n  }\n  var timers = [];\n  function schedule(){\n    if (!isTarget()) return;\n    timers.forEach(function(t){ clearTimeout(t); });\n    timers = [0,70,180,420,900,1500,2500].map(function(d){ return setTimeout(apply, d); });\n  }\n  document.addEventListener('change', function(e){ if (e.target && (e.target.name === '\u7248\u672C Format' || e.target.name === '\u4EBA\u6578 Children')) schedule(); }, true);\n  document.addEventListener('click', function(e){ if (e.target && e.target.closest && e.target.closest('hdt-variant-picker[handle*=\"because-youre-my-dad\"]')) schedule(); }, true);\n  if (window.MutationObserver) {\n    var queued = false;\n    new MutationObserver(function(){\n      if (!isTarget() || queued) return;\n      queued = true;\n      setTimeout(function(){ queued = false; apply(); }, 90);\n    }).observe(document.documentElement, {childList:true, subtree:true});\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', schedule); else schedule();\n  var tries = 0, interval = setInterval(function(){ apply(); tries += 1; if (tries > 40) clearInterval(interval); }, 500);\n})();\n/* CD_BYMD_PRICE_CHIP_FIX_CUSTOM_JS_V1 END */\n\n/* CD_BOBBLE_STYLE_PRICE_CHIPS_V1 START */\n(function(){\n  if (window.__cdBobbleStylePriceChipsV1) return;\n  window.__cdBobbleStylePriceChipsV1 = true;\n  var PRICE_MAP = {\n    \"A \u55AE\u4EBA\u6B3E\uFF0D\u8ECA\": \"HK$208\",\n    \"40 \u55AE\u4EBA\u6B3E \u6211\u611B\u7238\u7238 (\u7537)\": \"HK$208\",\n    \"50 \u55AE\u4EBA\u6B3E \u6211\u611B\u7238\u7238 (\u5973)\": \"HK$208\",\n    \"B \u55AE\u4EBA\u6B3E\u897F\u74DC\": \"HK$208\",\n    \"C \u55AE\u4EBA\u6B3E \u6DFA\u85CD\u98DB\u6A5F\": \"HK$208\",\n    \"D \u55AE\u4EBA\u6B3E \u6ED1\u677F\": \"HK$208\",\n    \"E \u55AE\u4EBA\u6B3E \u85CD\u7403\": \"HK$208\",\n    \"G \u55AE\u4EBA\u6B3E \u6DF1\u85CD\u98DB\u6A5F\": \"HK$208\",\n    \"H \u55AE\u4EBA\u6B3E \u6050\u9F8D\": \"HK$208\",\n    \"I \u55AE\u4EBA\u6B3E  \u9D28\u5B50\": \"HK$208\",\n    \"J \u55AE\u4EBA\u6B3E \u6728\u99AC\": \"HK$208\",\n    \"K \u55AE\u4EBA\u6B3E \u5C0F\u8C6C\": \"HK$208\",\n    \"6 \u96D9\u4EBA\u6B3E\uFF0D\u8ECA\": \"HK$328\",\n    \"19 \u96D9\u4EBA\u6B3E \u5403\u62C9\u9EB5\": \"HK$328\",\n    \"22 \u96D9\u4EBA\u6B3E \u5C0F\u8C6C\": \"HK$328\",\n    \"17 \u4E09\u4EBA\u6B3E \u5168\u5BB6\u5E45\": \"HK$468\",\n    \"35 \u4E09\u4EBA\u6B3E \u9D28\u5B50\": \"HK$468\",\n    \"40 \u56DB\u4EBA\u6B3E \u9D28\u5B50\": \"HK$598\",\n    \"\u55AE\u4EBA\u6B3E \u8ECA\": \"HK$208\",\n    \"A \u55AE\u4EBA\u6B3E \u8ECA\": \"HK$208\",\n    \"B\u55AE\u4EBA\u6B3E \u897F\u74DC\": \"HK$208\",\n    \"B \u55AE\u4EBA\u6B3E \u897F\u74DC\": \"HK$208\",\n    \"D\u55AE\u4EBA \u6ED1\u677F\": \"HK$208\",\n    \"D \u55AE\u4EBA \u6ED1\u677F\": \"HK$208\",\n    \"I \u55AE\u4EBA\u6B3E \u9D28\u5B50\": \"HK$208\"\n};\n  var UNIQUE_OPTIONS = ['40 \u55AE\u4EBA\u6B3E \u6211\u611B\u7238\u7238 (\u7537)', '50 \u55AE\u4EBA\u6B3E \u6211\u611B\u7238\u7238 (\u5973)', '40 \u56DB\u4EBA\u6B3E \u9D28\u5B50'];\n  function optionKey(value){ return String(value || '').replace(/\\s+/g, ' ').trim(); }\n  function lookup(value){\n    var raw = String(value || '').trim();\n    if (PRICE_MAP[raw]) return PRICE_MAP[raw];\n    var key = optionKey(raw);\n    if (PRICE_MAP[key]) return PRICE_MAP[key];\n    var compact = key.replace(/\\s+/g, '');\n    for (var name in PRICE_MAP) {\n      if (optionKey(name).replace(/\\s+/g, '') === compact) return PRICE_MAP[name];\n    }\n    return '';\n  }\n  function isTargetPicker(picker){\n    if (!picker) return false;\n    var inputs = picker.querySelectorAll('input[type=\"radio\"]');\n    var matched = 0, unique = false;\n    for (var i=0; i<inputs.length; i++) {\n      var val = String(inputs[i].value || '').trim();\n      if (lookup(val)) matched += 1;\n      if (UNIQUE_OPTIONS.indexOf(val) !== -1) unique = true;\n    }\n    return unique && matched >= 8;\n  }\n  function esc(v){\n    if (window.CSS && CSS.escape) return CSS.escape(v);\n    return String(v).replace(/([ #;?%&,.+*~':\"!^$[\\]()=>|\\/@])/g, '\\\\$1');\n  }\n  function findLabel(fieldset, input){\n    if (!input || !fieldset) return null;\n    if (input.id) {\n      try {\n        var byFor = fieldset.querySelector('label[for=\"' + esc(input.id) + '\"]');\n        if (byFor) return byFor;\n      } catch(e) {}\n    }\n    return input.nextElementSibling && input.nextElementSibling.tagName === 'LABEL' ? input.nextElementSibling : null;\n  }\n  function ensureStyle(){\n    if (document.getElementById('cd-bobble-style-price-chip-style')) return;\n    var style = document.createElement('style');\n    style.id = 'cd-bobble-style-price-chip-style';\n    style.textContent = [\n      'hdt-variant-picker fieldset[data-cd-bobble-price=\"1\"] label.hdt-product-form_value{display:inline-flex!important;align-items:center;gap:.38rem;flex-wrap:wrap;line-height:1.25;padding-inline:.7rem;}',\n      'hdt-variant-picker fieldset[data-cd-bobble-price=\"1\"] .cd-bobble-option-price{display:inline-flex;align-items:center;border:1px solid rgba(45,122,138,.20);border-radius:999px;padding:.12rem .45rem;font-size:.76em;font-weight:800;line-height:1.1;color:#2d7a8a;background:#eef8fa;white-space:nowrap;text-decoration:none;}',\n      'hdt-variant-picker fieldset[data-cd-bobble-price=\"1\"] input[type=radio]:checked+label .cd-bobble-option-price{border-color:rgba(255,255,255,.45);color:#111;background:#fff;}',\n      'hdt-variant-picker fieldset[data-cd-bobble-price=\"1\"] .cd-bobble-selected-price{display:inline-flex;align-items:center;margin-left:.35rem;border-radius:999px;padding:.12rem .5rem;font-size:.82em;font-weight:800;color:#2d7a8a;background:#eef8fa;vertical-align:middle;}'\n    ].join('\\n');\n    document.head.appendChild(style);\n  }\n  function updateLegend(fieldset){\n    var legend = fieldset && fieldset.querySelector('legend');\n    if (!legend) return;\n    var checked = fieldset.querySelector('input[type=\"radio\"]:checked');\n    var price = checked ? lookup(checked.value) : '';\n    var chip = legend.querySelector('.cd-bobble-selected-price');\n    if (!price) { if (chip) chip.remove(); return; }\n    if (!chip) { chip = document.createElement('span'); chip.className = 'cd-bobble-selected-price'; legend.appendChild(chip); }\n    chip.textContent = price;\n  }\n  function apply(){\n    var any = false;\n    document.querySelectorAll('hdt-variant-picker').forEach(function(picker){\n      if (!isTargetPicker(picker)) return;\n      ensureStyle();\n      var fieldset = null;\n      picker.querySelectorAll('fieldset').forEach(function(fs){\n        var count = 0;\n        fs.querySelectorAll('input[type=\"radio\"]').forEach(function(input){ if (lookup(input.value)) count += 1; });\n        if (count >= 8) fieldset = fs;\n      });\n      if (!fieldset) return;\n      fieldset.setAttribute('data-cd-bobble-price','1');\n      fieldset.querySelectorAll('input[type=\"radio\"]').forEach(function(input){\n        var price = lookup(input.value);\n        if (!price) return;\n        var label = findLabel(fieldset, input);\n        if (!label) return;\n        var chip = label.querySelector('.cd-bobble-option-price');\n        if (!chip) { chip = document.createElement('span'); chip.className = 'cd-bobble-option-price'; label.appendChild(chip); }\n        if (chip.textContent !== price) chip.textContent = price;\n      });\n      updateLegend(fieldset);\n      any = true;\n    });\n    return any;\n  }\n  function schedule(){ [0,80,220,500,1000,1800].forEach(function(d){ setTimeout(apply, d); }); }\n  document.addEventListener('change', function(e){ if (e.target && e.target.closest && e.target.closest('hdt-variant-picker')) schedule(); }, true);\n  document.addEventListener('click', function(e){ if (e.target && e.target.closest && e.target.closest('hdt-variant-picker')) setTimeout(apply, 60); }, true);\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', schedule); else schedule();\n  var tries = 0;\n  var timer = setInterval(function(){ apply(); tries += 1; if (tries > 40) clearInterval(timer); }, 350);\n  if (window.MutationObserver) {\n    var queued = false;\n    new MutationObserver(function(){ if (queued) return; queued = true; setTimeout(function(){ queued = false; apply(); }, 120); }).observe(document.documentElement, {childList:true, subtree:true});\n  }\n})();\n/* CD_BOBBLE_STYLE_PRICE_CHIPS_V1 END */\n\n/* CD_BOBBLE_PRODUCT_PAGE_MOBILE_FIX_V1 START */\n(function(){\n  if (window.__cdBobbleProductPageMobileFixV2) return;\n  window.__cdBobbleProductPageMobileFixV2 = true;\n  function isTargetProduct(){\n    try {\n      if (decodeURIComponent(location.pathname || '').indexOf('\u7236\u89AA\u7BC0\u79AE\u7269-\u76F8\u7247\u6416\u982D\u516C\u4ED4') !== -1) return true;\n    } catch(e) {}\n    if (document.querySelector('form[id*=\"7559085162671\"], [data-product-id=\"7559085162671\"]')) return true;\n    var txt = document.body ? (document.body.textContent || '') : '';\n    return txt.indexOf('40 \u56DB\u4EBA\u6B3E \u9D28\u5B50') !== -1 && txt.indexOf('40 \u55AE\u4EBA\u6B3E \u6211\u611B\u7238\u7238') !== -1;\n  }\n  function ensureStyle(){\n    if (document.getElementById('cd-bobble-product-page-mobile-fix-style-v2')) return;\n    var oldStyle = document.getElementById('cd-bobble-product-page-mobile-fix-style');\n    if (oldStyle && oldStyle.parentNode) oldStyle.parentNode.removeChild(oldStyle);\n    var style = document.createElement('style');\n    style.id = 'cd-bobble-product-page-mobile-fix-style-v2';\n    style.textContent = [\n      'html body .cd-bobble-page .cd-section.cd-style-guide.cd-style-guide .cd-style-card img{object-fit:contain!important;background:#fff!important}',\n      '@media(max-width:640px){html body .cd-bobble-page .cd-section.cd-style-guide{padding:10px!important;margin:14px 0!important;border-radius:12px!important}html body .cd-bobble-page .cd-section.cd-style-guide h3{font-size:18px!important;line-height:1.25!important;margin:0 0 6px!important}html body .cd-bobble-page .cd-section.cd-style-guide>p{font-size:13px!important;line-height:1.4!important;margin:0 0 8px!important}html body .cd-bobble-page .cd-section.cd-style-guide .cd-style-grid{display:grid!important;grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:6px!important;margin:8px 0 0!important;align-items:start!important}html body .cd-bobble-page .cd-section.cd-style-guide .cd-style-card{min-width:0!important;height:130px!important;margin:0!important;border-radius:8px!important;box-shadow:none!important;display:flex!important;flex-direction:column!important;overflow:hidden!important}html body .cd-bobble-page .cd-section.cd-style-guide .cd-style-card img{display:block!important;width:100%!important;height:78px!important;min-height:78px!important;max-height:78px!important;aspect-ratio:auto!important;object-fit:contain!important;margin:0!important;flex:0 0 78px!important}html body .cd-bobble-page .cd-section.cd-style-guide .cd-style-card b{display:flex!important;align-items:center!important;justify-content:center!important;width:100%!important;height:50px!important;min-height:50px!important;font-size:10px!important;line-height:1.15!important;padding:3px 2px!important;margin:0!important;word-break:break-word!important;text-align:center!important}html body .cd-bobble-page .cd-section.cd-style-guide .cd-style-card span{display:none!important}html body .cd-bobble-page .cd-section.cd-style-guide .cd-style-more{display:none!important}}',\n      '@media(max-width:380px){html body .cd-bobble-page .cd-section.cd-style-guide .cd-style-grid{grid-template-columns:repeat(4,minmax(0,1fr))!important}}'\n    ].join('\\n');\n    document.head.appendChild(style);\n  }\n  function removeSellingPoints(){\n    var removed = 0;\n    Array.prototype.slice.call(document.querySelectorAll('.cd-bobble-page .cd-section')).forEach(function(section){\n      var h3 = section.querySelector('h3');\n      var title = h3 ? String(h3.textContent || '').replace(/\\s+/g, '') : '';\n      if (title.indexOf('\u9EDE\u89E3\u7238\u7238\u6703\u937E\u610F\uFF1F') !== -1 || title.indexOf('\u9EDE\u89E3\u7238\u7238\u6703\u937E\u610F?') !== -1) {\n        if (section.parentNode) section.parentNode.removeChild(section);\n        removed += 1;\n      }\n    });\n    return removed;\n  }\n  function apply(){\n    if (!isTargetProduct()) return false;\n    ensureStyle();\n    removeSellingPoints();\n    return true;\n  }\n  function schedule(){ [0,80,220,500,1000,1800,3000].forEach(function(d){ setTimeout(apply, d); }); }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', schedule); else schedule();\n  var tries = 0;\n  var timer = setInterval(function(){ apply(); tries += 1; if (tries > 40) clearInterval(timer); }, 350);\n  if (window.MutationObserver) {\n    var queued = false;\n    new MutationObserver(function(){ if (queued) return; queued = true; setTimeout(function(){ queued = false; apply(); }, 120); }).observe(document.documentElement, {childList:true, subtree:true});\n  }\n})();\n/* CD_BOBBLE_PRODUCT_PAGE_MOBILE_FIX_V1 END */\n\n/* CD_BYMD_DEFAULT_HARDCOVER_V1 START */\n(function(){\n  if (window.__cdBymdDefaultHardcoverV1) return;\n  window.__cdBymdDefaultHardcoverV1 = true;\n  var handle = 'because-youre-my-dad-personalized-storybook-2026';\n  var targetFormat = '\u7CBE\u88DD\u5BE6\u9AD4\u66F8 Hardcover';\n  var targetId = '46789258117295';\n  var userTouched = false;\n  var autoPicking = false;\n  function hasVariantParam(){\n    try { return new URLSearchParams(window.location.search || '').has('variant'); } catch(e) { return (window.location.search || '').indexOf('variant=') !== -1; }\n  }\n  function isTargetPage(){\n    return (window.location.pathname || '').indexOf(handle) !== -1 ||\n      !!document.querySelector('hdt-variant-picker[handle*=\"because-youre-my-dad\"]') ||\n      !!document.querySelector('input[name=\"product-id\"][value=\"8562706186415\"]');\n  }\n  function picker(){\n    return document.querySelector('hdt-variant-picker[handle*=\"because-youre-my-dad\"]') || document.querySelector('hdt-variant-picker');\n  }\n  function esc(v){\n    if (window.CSS && CSS.escape) return CSS.escape(v);\n    return String(v).replace(/([ #;?%&,.+*~\\':\"!^$[\\]()=>|/@])/g, '\\\\$1');\n  }\n  function updateHiddenInputs(){\n    var inputs = document.querySelectorAll('form[action*=\"/cart/add\"] input[name=\"id\"], .hdt-sticky-atc input[name=\"id\"]');\n    for (var i=0;i<inputs.length;i++) inputs[i].value = targetId;\n    var p = picker();\n    if (p) {\n      p.setAttribute('selected-variant', targetId);\n      p.setAttribute('update-url', targetId);\n    }\n  }\n  function currentFormatIsHardcover(){\n    var p = picker();\n    var checked = p && p.querySelector('input[name=\"\u7248\u672C Format\"]:checked');\n    if (checked) return (checked.value || '').trim() === targetFormat;\n    var legend = p && p.querySelector('fieldset[data-index=\"0\"] legend [update-value]');\n    return legend && (legend.textContent || '').trim() === targetFormat;\n  }\n  function clickHardcover(){\n    var p = picker();\n    if (!p) return false;\n    var input = p.querySelector('input[name=\"\u7248\u672C Format\"][value=\"' + esc(targetFormat) + '\"]');\n    if (!input) {\n      var all = p.querySelectorAll('input[name=\"\u7248\u672C Format\"]');\n      for (var i=0;i<all.length;i++) if ((all[i].value || '').trim() === targetFormat) { input = all[i]; break; }\n    }\n    if (!input) return false;\n    autoPicking = true;\n    try { input.click(); } catch(e) {}\n    try { input.checked = true; input.dispatchEvent(new Event('input', {bubbles:true})); input.dispatchEvent(new Event('change', {bubbles:true})); } catch(e) {}\n    setTimeout(function(){ autoPicking = false; }, 500);\n    return true;\n  }\n  function apply(){\n    if (!isTargetPage() || hasVariantParam() || userTouched) return false;\n    if (!currentFormatIsHardcover()) clickHardcover();\n    setTimeout(function(){\n      if (!hasVariantParam() && isTargetPage() && !userTouched) {\n        if (currentFormatIsHardcover()) updateHiddenInputs();\n      }\n    }, 260);\n    return currentFormatIsHardcover();\n  }\n  document.addEventListener('click', function(e){\n    if (autoPicking) return;\n    if (e.target && e.target.closest && e.target.closest('hdt-variant-picker[handle*=\"because-youre-my-dad\"]')) userTouched = true;\n  }, true);\n  document.addEventListener('change', function(e){\n    if (autoPicking) return;\n    if (e.target && (e.target.name === '\u7248\u672C Format' || e.target.name === '\u4EBA\u6578 Children' || e.target.name === '\u8A9E\u8A00 Language')) userTouched = true;\n  }, true);\n  function schedule(){ [0,80,180,420,800,1400,2400,3800].forEach(function(d){ setTimeout(apply, d); }); }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', schedule); else schedule();\n  var tries = 0;\n  var timer = setInterval(function(){ apply(); tries += 1; if (tries > 30 || hasVariantParam() || userTouched) clearInterval(timer); }, 300);\n})();\n/* CD_BYMD_DEFAULT_HARDCOVER_V1 END */\n;/* CD_BOBBLE_AUTO_V2_OVERRIDE START */\n(function(){\n  if(window.__cdBobbleAutoV2Override)return;\n  window.__cdBobbleAutoV2Override=true;\n  var bookUrl='/products/because-youre-my-dad-personalized-storybook-2026';\n  function isTargetProduct(){\n    try{if(decodeURIComponent(location.pathname||'').indexOf('\u7236\u89AA\u7BC0\u79AE\u7269-\u76F8\u7247\u6416\u982D\u516C\u4ED4')!==-1)return true;}catch(e){}\n    if(document.querySelector('input[name=\"product-id\"][value=\"7559085162671\"], form[id*=\"7559085162671\"], [data-product-id=\"7559085162671\"]'))return true;\n    var txt=(document.body&&document.body.textContent)||'';\n    return txt.indexOf('40 \u56DB\u4EBA\u6B3E \u9D28\u5B50')!==-1&&txt.indexOf('40 \u55AE\u4EBA\u6B3E \u6211\u611B\u7238\u7238')!==-1;\n  }\n  function scrollToPicker(){\n    var el=document.querySelector('hdt-variant-picker')||document.querySelector('form[action*=\"/cart/add\"]')||document.querySelector('.hdt-product-info')||document.body;\n    if(el&&el.scrollIntoView){el.scrollIntoView({behavior:'smooth',block:'center'});}\n    return false;\n  }\n  window.cdBobbleUpsellAddTwo=function(){return scrollToPicker();};\n  window.cdBobbleUpsellGoBook=function(){window.location.href=bookUrl;return false;};\n  function ensureStyle(){\n    if(document.getElementById('cd-bobble-auto-v2-override-style'))return;\n    var style=document.createElement('style');\n    style.id='cd-bobble-auto-v2-override-style';\n    style.textContent=[\n      '#cd-bobble-upsell-live{margin:22px 0 28px;padding:20px;border-radius:22px;background:linear-gradient(135deg,#fff8f0 0%,#fff 58%,#fff0e7 100%);border:1px solid #f0d8c8;box-shadow:0 10px 28px rgba(58,34,20,.07);font-family:inherit;color:#2b1b12;clear:both}',\n      '#cd-bobble-upsell-live *{box-sizing:border-box}',\n      '#cd-bobble-upsell-live h3{font-size:22px;line-height:1.28;margin:0 0 8px;color:#2a160d;font-weight:900}',\n      '#cd-bobble-upsell-live .cd-up-sub{margin:0 0 16px;color:#765f52;font-size:14px;line-height:1.6}',\n      '#cd-bobble-upsell-live .cd-up-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}',\n      '#cd-bobble-upsell-live .cd-up-card{background:#fff;border:1px solid #ecd6c8;border-radius:18px;padding:16px;box-shadow:0 6px 18px rgba(58,34,20,.05);display:flex;flex-direction:column;gap:10px;min-height:100%}',\n      '#cd-bobble-upsell-live .cd-up-card b{display:block;font-size:17px;line-height:1.35;color:#2a160d}',\n      '#cd-bobble-upsell-live .cd-up-card b span{display:inline-flex;margin-left:6px;vertical-align:middle;background:#d8f2f5;color:#1d6671;border-radius:999px;padding:3px 9px;font-size:12px;font-weight:900;white-space:nowrap}',\n      '#cd-bobble-upsell-live .cd-up-card p{margin:0;color:#655146;font-size:14px;line-height:1.65;flex:1}',\n      '#cd-bobble-upsell-live .cd-up-cta{display:inline-flex;align-items:center;justify-content:center;width:100%;border:0;border-radius:999px;background:#32190e;color:#fff!important;text-decoration:none!important;padding:12px 16px;font-weight:900;font-size:14px;line-height:1.2;cursor:pointer;box-shadow:0 6px 14px rgba(50,25,14,.15)}',\n      '#cd-bobble-upsell-live .cd-up-cta:hover{background:#4a2414;color:#fff!important;text-decoration:none!important}',\n      '#cd-bobble-upsell-live .cd-up-cta.secondary{background:#fff;color:#32190e!important;border:1px solid #d8bfae;box-shadow:none}',\n      '#cd-bobble-upsell-live .cd-up-mini{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:14px}',\n      '#cd-bobble-upsell-live .cd-up-mini div{background:#fffaf6;border:1px solid #efd9ca;border-radius:14px;padding:11px;text-align:center;font-size:13px;color:#6a5548;line-height:1.45}',\n      '#cd-bobble-upsell-live .cd-up-mini strong{display:block;color:#2a160d;font-size:14px;margin-bottom:2px}',\n      '#cd-bobble-upsell-live .cd-up-note{margin:12px 0 0;font-size:12px;line-height:1.6;color:#8a6b5b}',\n      '@media(max-width:720px){#cd-bobble-upsell-live{padding:16px;margin:18px 0 22px;border-radius:18px}#cd-bobble-upsell-live h3{font-size:20px}#cd-bobble-upsell-live .cd-up-grid{grid-template-columns:1fr}#cd-bobble-upsell-live .cd-up-mini{grid-template-columns:1fr}#cd-bobble-upsell-live .cd-up-card b span{display:inline-flex;margin:6px 0 0 0}}'\n    ].join('\\\\n');\n    document.head.appendChild(style);\n  }\n  function render(block){\n    if(!block)return false;\n    var txt=block.textContent||'';\n    if((block.querySelector&&block.querySelector('.cd-up-visual'))||txt.indexOf('\u4EFB\u9078 2 \u96BB\u516C\u4ED4')!==-1||txt.indexOf('\u8CB7\u4EFB\u610F 2 \u96BB\u516C\u4ED4')!==-1||txt.indexOf('\u8CFC\u7269\u8ECA\u81EA\u52D5\u6263\u6E1B')!==-1||txt.indexOf('\u8CFC\u7269\u8ECA\u81EA\u52D5\u6E1B')!==-1)return true;\n    if(block.getAttribute('data-cd-auto-v2')==='1'&&txt.indexOf('\u53BB\u63C0\u6B3E\u5F0F / \u6578\u91CF')!==-1)return true;\n    ensureStyle();\n    block.setAttribute('data-cd-auto-v2','1');\n    block.setAttribute('aria-label','\u7236\u89AA\u7BC0\u52A0\u8CFC\u512A\u60E0');\n    block.className='cd-section cd-bobble-upsell-live';\n    block.innerHTML='<h3>\u7236\u89AA\u7BC0\u52A0\u8CFC\u512A\u60E0\uFF1A\u63C0\u6B3E\u5F0F\u5F8C\u81EA\u52D5\u6E1B\uFF0C\u5514\u4F7F\u8A18\u512A\u60E0\u78BC</h3><p class=\"cd-up-sub\">\u5148\u63C0\u6B3E\u5F0F / \u6578\u91CF\uFF0C\u518D\u6B63\u5E38\u52A0\u5165\u8CFC\u7269\u8ECA\uFF1B\u7B26\u5408\u689D\u4EF6\u6642\uFF0C\u8CFC\u7269\u8ECA / checkout \u6703\u81EA\u52D5\u5957\u7528\u512A\u60E0\u3002</p><div class=\"cd-up-grid\"><div class=\"cd-up-card\"><b>\u7238\u7238\u8ECA\u982D\u4E00\u96BB\uFF0C\u8FA6\u516C\u5BA4\u4E00\u96BB <span>\u8CB7 2 \u96BB\u81EA\u52D5\u6E1B HK$20</span></b><p>\u63C0\u597D\u6B3E\u5F0F\u5F8C\uFF0C\u5C07\u6578\u91CF\u6539 2\uFF08\u6216\u52A0\u5165\u5169\u6B21\u540C\u6B3E\uFF09\u3002\u5230\u8CFC\u7269\u8ECA / checkout \u6703\u81EA\u52D5\u6E1B HK$20\uFF0C\u5514\u4F7F\u984D\u5916\u8F38\u5165\u512A\u60E0\u78BC\u3002</p><button type=\"button\" class=\"cd-up-cta\" onclick=\"return window.cdBobbleUpsellAddTwo&&window.cdBobbleUpsellAddTwo(this);\">\u53BB\u63C0\u6B3E\u5F0F / \u6578\u91CF</button></div><div class=\"cd-up-card\"><b>\u52A0\u8CFC\u7236\u89AA\u7BC0\u7CBE\u88DD\u7E6A\u672C <span>\u7CBE\u88DD\u7E6A\u672C\u81EA\u52D5\u6E1B HK$50</span></b><p>\u5148\u628A\u516C\u4ED4\u52A0\u5165\u8CFC\u7269\u8ECA\uFF0C\u518D\u52A0\u8CFC\u7236\u89AA\u7BC0\u7CBE\u88DD\u7E6A\u672C\uFF1Bcheckout \u6703\u81EA\u52D5\u6E1B HK$50\uFF0C\u8B8A\u6210\u516C\u4ED4 + \u6545\u4E8B\u66F8\u4E00\u5957\u9001\u4FFE\u7238\u7238\u3002</p><a class=\"cd-up-cta secondary\" href=\"'+bookUrl+'\">\u53BB\u63C0\u7236\u89AA\u7BC0\u7E6A\u672C</a></div></div><div class=\"cd-up-mini\" aria-label=\"\u9069\u5408\u52A0\u8CFC\u60C5\u5883\"><div><strong>\u8ECA\u982D + \u8FA6\u516C\u684C</strong>\u7238\u7238\u6BCF\u65E5\u5169\u908A\u90FD\u898B\u5230</div><div><strong>\u5144\u5F1F\u59CA\u59B9\u5206\u958B\u64FA</strong>\u6BCF\u500B\u5C0F\u670B\u53CB\u4E00\u4EFD\u5FC3\u610F</div><div><strong>\u516C\u4ED4 + \u7E6A\u672C</strong>\u4E00\u4EFD\u641E\u7B11\uFF0C\u4E00\u4EFD\u611F\u52D5</div></div><p class=\"cd-up-note\">* \u512A\u60E0\u6703\u6309\u8CFC\u7269\u8ECA\u5167\u5BB9\u81EA\u52D5\u5957\u7528\uFF1B\u5982\u672A\u5373\u6642\u986F\u793A\uFF0C\u53EF\u65BC checkout \u8F38\u5165 FDBOBBLE20 \u6216 FDBOBBLEBOOK50 \u4F5C\u5F8C\u5099\u3002\u512A\u60E0\u6709\u6548\u81F3 2026 \u5E74 6 \u6708 22 \u65E5\u3002</p>';\n    return true;\n  }\n  function apply(){\n    if(!isTargetProduct())return false;\n    var block=document.getElementById('cd-bobble-upsell-live');\n    if(block)return render(block);\n    return false;\n  }\n  function schedule(){[0,80,200,500,1000,1800,3000,5000].forEach(function(d){setTimeout(apply,d);});}\n  if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',schedule);else schedule();\n  document.addEventListener('click',function(e){\n    var t=e.target;\n    if(!t||!t.closest)return;\n    var btn=t.closest('#cd-bobble-upsell-live button,#cd-bobble-upsell-live a');\n    if(!btn)return;\n    if((btn.textContent||'').indexOf('\u4E00\u9375\u52A0')!==-1){e.preventDefault();scrollToPicker();}\n  },true);\n  if(window.MutationObserver){\n    var queued=false;\n    new MutationObserver(function(){if(queued)return;queued=true;setTimeout(function(){queued=false;apply();},120);}).observe(document.documentElement,{childList:true,subtree:true});\n  }\n})();\n/* CD_BOBBLE_AUTO_V2_OVERRIDE END */\n/* CD_BOBBLE_UPSELL_CUSTOM_JS_V1 START */\n(function(){\n  if (window.__cdBobbleUpsellCustomJsV1) return;\n  window.__cdBobbleUpsellCustomJsV1 = true;\n  var bobbleVariantIds = [42553173213359,45140770029743,45140770062511,42553173246127,42553173278895,42553173311663,42553173344431,42553173409967,42553173442735,42553180029103,42553180061871,42560515604655,42565750194351,42565770608815,42565774344367,43794179227823,43902033821871,45179588935855];\n  function isTargetProduct(){\n    try {\n      if (decodeURIComponent(location.pathname || '').indexOf('\u7236\u89AA\u7BC0\u79AE\u7269-\u76F8\u7247\u6416\u982D\u516C\u4ED4') !== -1) return true;\n    } catch(e) {}\n    if (document.querySelector('input[name=\"product-id\"][value=\"7559085162671\"], form[id*=\"7559085162671\"], [data-product-id=\"7559085162671\"]')) return true;\n    var txt = document.body ? (document.body.textContent || '') : '';\n    return txt.indexOf('40 \u56DB\u4EBA\u6B3E \u9D28\u5B50') !== -1 && txt.indexOf('40 \u55AE\u4EBA\u6B3E \u6211\u611B\u7238\u7238') !== -1;\n  }\n  function selectedVariantId() {\n    var inputs = document.querySelectorAll('form[action*=\"/cart/add\"] input[name=\"id\"], form[action*=\"/cart/add\"] select[name=\"id\"], input[name=\"id\"]');\n    for (var i=0;i<inputs.length;i++) {\n      var n = parseInt(inputs[i].value, 10);\n      if (bobbleVariantIds.indexOf(n) !== -1) return n;\n    }\n    return bobbleVariantIds[0];\n  }\n  function setBusy(btn, text) {\n    if (!btn) return;\n    btn.dataset.cdOldText = btn.dataset.cdOldText || btn.textContent;\n    btn.textContent = text;\n    btn.disabled = true;\n  }\n  function resetBusy(btn) {\n    if (!btn) return;\n    btn.textContent = btn.dataset.cdOldText || '\u518D\u8A66\u4E00\u6B21';\n    btn.disabled = false;\n  }\n  function addItems(items, nextUrl, btn) {\n    setBusy(btn, '\u52A0\u5165\u4E2D...');\n    fetch('/cart/add.js', {\n      method:'POST',\n      headers:{'Content-Type':'application/json','Accept':'application/json'},\n      body:JSON.stringify({items:items})\n    }).then(function(r){\n      if (!r.ok) throw new Error('cart add failed');\n      return r.json();\n    }).then(function(){\n      window.location.href = nextUrl;\n    }).catch(function(){\n      resetBusy(btn);\n      alert('\u672A\u80FD\u52A0\u5165\u8CFC\u7269\u8ECA\uFF0C\u8ACB\u5148\u78BA\u8A8D\u4E0A\u65B9\u6B3E\u5F0F\uFF0C\u518D\u6309\u52A0\u5165\u8CFC\u7269\u8ECA\u3002');\n    });\n    return false;\n  }\n  window.cdBobbleUpsellAddTwo = window.cdBobbleUpsellAddTwo || function(btn) {\n    var id = selectedVariantId();\n    return addItems([{id:id, quantity:2, properties:{'_\u7236\u89AA\u7BC0\u512A\u60E0':'\u540C\u6B3E\u5169\u4EF6\u6E1B HK$20'}}], '/cart?discount=FDBOBBLE20', btn);\n  };\n  window.cdBobbleUpsellGoBook = window.cdBobbleUpsellGoBook || function(btn) {\n    var id = selectedVariantId();\n    return addItems([{id:id, quantity:1, properties:{'_\u7236\u89AA\u7BC0\u512A\u60E0':'\u516C\u4ED4\u52A0\u8CFC\u7CBE\u88DD\u7E6A\u672C\u6E1B HK$50'}}], '/discount/FDBOBBLEBOOK50?redirect=/products/because-youre-my-dad-personalized-storybook-2026', btn);\n  };\n  function ensureStyle(){\n    if (document.getElementById('cd-bobble-upsell-custom-js-style')) return;\n    var style = document.createElement('style');\n    style.id = 'cd-bobble-upsell-custom-js-style';\n    style.textContent = [\n      '#cd-bobble-upsell-live.cd-bobble-upsell-live{background:#fffaf5;border:1px solid #f2d7c2;border-radius:18px;padding:18px;margin:24px 0;box-shadow:0 8px 22px rgba(58,34,20,.06)}',\n      '#cd-bobble-upsell-live h3{margin:0 0 8px;color:#2a160d;font-size:22px;line-height:1.28}',\n      '#cd-bobble-upsell-live p{margin:0 0 10px;color:#5f4b3f;font-size:14px;line-height:1.55}',\n      '#cd-bobble-upsell-live .cd-bobble-upsell-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:14px}',\n      '#cd-bobble-upsell-live .cd-bobble-upsell-card{background:#fff;border:1px solid #ead8cd;border-radius:16px;padding:15px;box-shadow:0 6px 16px rgba(58,34,20,.05)}',\n      '#cd-bobble-upsell-live .cd-bobble-upsell-card b{display:block;font-size:16px;color:#2a160d;margin-bottom:5px}',\n      '#cd-bobble-upsell-live .cd-bobble-upsell-save{display:inline-flex;align-items:center;background:#e9f7f9;color:#176a78;border-radius:999px;padding:3px 8px;font-size:12px;font-weight:900;margin-left:5px;white-space:nowrap}',\n      '#cd-bobble-upsell-live .cd-bobble-upsell-btn{display:inline-flex;align-items:center;justify-content:center;width:100%;border:0;border-radius:999px;background:#2a160d;color:#fff!important;text-decoration:none!important;font-weight:900;padding:12px 14px;margin-top:8px;font-size:14px;line-height:1.2;cursor:pointer}',\n      '#cd-bobble-upsell-live .cd-bobble-upsell-btn.cd-secondary{background:#fff;color:#2a160d!important;border:1px solid #d9bdab}',\n      '#cd-bobble-upsell-live .cd-bobble-upsell-mini{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:12px}',\n      '#cd-bobble-upsell-live .cd-bobble-upsell-mini div{border:1px solid #ead8cd;border-radius:12px;background:#fff;padding:9px 6px;text-align:center;font-size:12px;color:#755f53}',\n      '#cd-bobble-upsell-live .cd-bobble-upsell-mini strong{display:block;color:#2a160d;font-size:14px}',\n      '@media(max-width:640px){#cd-bobble-upsell-live.cd-bobble-upsell-live{padding:14px;margin:18px 0;border-radius:14px}#cd-bobble-upsell-live .cd-bobble-upsell-grid{grid-template-columns:1fr}#cd-bobble-upsell-live .cd-bobble-upsell-mini{grid-template-columns:repeat(2,1fr)}#cd-bobble-upsell-live h3{font-size:20px}}'\n    ].join('\\n');\n    document.head.appendChild(style);\n  }\n  function buildBlock(){\n    var block = document.createElement('div');\n    block.id = 'cd-bobble-upsell-live';\n    block.className = 'cd-section cd-bobble-upsell-live';\n    block.setAttribute('data-cd-source','custom-js-v1');\n    block.innerHTML = '<h3>\uD83C\uDF81 \u7236\u89AA\u7BC0\u52A0\u8CFC\u512A\u60E0\uFF1A\u4E00\u4EFD\u79AE\u7269\u8B8A\u5169\u4EFD\u9A5A\u559C</h3>'+\n      '<p>\u597D\u591A\u5BA2\u4EBA\u6703\u5148\u8CB7 1 \u96BB\u3002\u5176\u5BE6\u6700\u53D7\u7238\u7238\u6B61\u8FCE\u5605\u9001\u6CD5\u4FC2\uFF1A\u4E00\u96BB\u653E\u8ECA\u982D\uFF0C\u4E00\u96BB\u653E\u8FA6\u516C\u5BA4\uFF1B\u6216\u8005\u52A0\u4E00\u672C\u7236\u89AA\u7BC0\u7E6A\u672C\uFF0C\u7576\u65E5\u4E00\u5BB6\u4EBA\u4E00\u9F4A\u7FFB\u3002</p>'+\n      '<div class=\"cd-bobble-upsell-grid\">'+\n        '<div class=\"cd-bobble-upsell-card\"><b>\u7238\u7238\u8ECA\u982D\u4E00\u96BB\uFF0C\u8FA6\u516C\u5BA4\u4E00\u96BB <span class=\"cd-bobble-upsell-save\">\u8CB7 2 \u96BB\u6E1B HK$20</span></b><p>\u63C0\u597D\u4E0A\u9762\u6B3E\u5F0F\u5F8C\uFF0C\u53EF\u4E00\u9375\u52A0\u5165 2 \u96BB\u540C\u6B3E\u3002\u7528\u540C\u4E00\u5F35\u76F8\u88FD\u4F5C\uFF0C\u5514\u4F7F\u91CD\u65B0\u4E0A\u50B3\u3002</p><button type=\"button\" class=\"cd-bobble-upsell-btn\" onclick=\"return window.cdBobbleUpsellAddTwo && window.cdBobbleUpsellAddTwo(this);\">\u63C0\u597D\u6B3E\u5F0F\uFF0C\u4E00\u9375\u52A0 2 \u96BB</button></div>'+\n        '<div class=\"cd-bobble-upsell-card\"><b>\u52A0\u8CFC\u7236\u89AA\u7BC0\u7CBE\u88DD\u7E6A\u672C <span class=\"cd-bobble-upsell-save\">\u7E6A\u672C\u6E1B HK$50</span></b><p>\u516C\u4ED4\u4FC2\u6BCF\u65E5\u966A\u4F34\uFF0C\u7E6A\u672C\u4FC2\u7236\u89AA\u7BC0\u7576\u65E5\u4E00\u9F4A\u7FFB\u5605\u56DE\u61B6\u3002\u5148\u52A0\u516C\u4ED4\uFF0C\u518D\u53BB\u63C0\u7E6A\u672C\u7248\u672C\u3002</p><button type=\"button\" class=\"cd-bobble-upsell-btn cd-secondary\" onclick=\"return window.cdBobbleUpsellGoBook && window.cdBobbleUpsellGoBook(this);\">\u52A0\u516C\u4ED4\uFF0C\u518D\u53BB\u63C0\u7236\u89AA\u7BC0\u7E6A\u672C</button></div>'+\n      '</div>'+\n      '<div style=\"margin-top:16px\"><b style=\"display:block;color:#2a160d;margin-bottom:6px\">\u6709\u5169\u4F4D\u6216\u4EE5\u4E0A\u5C0F\u670B\u53CB\uFF1F\u5BB6\u5EAD\u6B3E\u5E73\u5747\u66F4\u62B5</b><p>\u5982\u679C\u539F\u672C\u53EA\u8AD7\u55AE\u4EBA\u6B3E\uFF0C\u53EF\u4EE5\u8003\u616E\u96D9\u4EBA / \u4E09\u4EBA / \u56DB\u4EBA\u6B3E\uFF0C\u7238\u7238\u4E00\u6B21\u904E\u898B\u5230\u6240\u6709\u5C0F\u670B\u53CB\u3002</p><div class=\"cd-bobble-upsell-mini\"><div><strong>\u55AE\u4EBA HK$208</strong>HK$208 / \u4F4D</div><div><strong>\u96D9\u4EBA HK$328</strong>\u7D04 HK$164 / \u4F4D</div><div><strong>\u4E09\u4EBA HK$468</strong>\u7D04 HK$156 / \u4F4D</div><div><strong>\u56DB\u4EBA HK$598</strong>\u7D04 HK$150 / \u4F4D</div></div></div>'+\n      '<p class=\"cd-note\">* \u512A\u60E0\u78BC\u6703\u81EA\u52D5\u5E36\u5230\u8CFC\u7269\u8ECA / \u7D50\u5E33\u9801\uFF1B\u5982\u4F60\u5DF2\u624B\u52D5\u52A0\u5165\u7522\u54C1\uFF0C\u53EF\u65BC checkout \u8F38\u5165 FDBOBBLE20 \u6216 FDBOBBLEBOOK50\u3002\u512A\u60E0\u6709\u6548\u81F3 2026 \u5E74 6 \u6708 22 \u65E5\u3002</p>';\n    return block;\n  }\n  function insertBlock(){\n    if (!isTargetProduct()) return false;\n    ensureStyle();\n    if (document.getElementById('cd-bobble-upsell-live')) return true;\n    var block = buildBlock();\n    var hero = document.querySelector('.cd-bobble-page .cd-hero-box') || document.querySelector('.cd-bobble-page .cd-hero') || document.querySelector('.cd-bobble-page .cd-section');\n    if (hero && hero.parentNode) {\n      hero.parentNode.insertBefore(block, hero.nextSibling);\n      return true;\n    }\n    var desc = document.querySelector('.hdt-product__description .hdt-rte, .hdt-product__description, .hdt-main-product-description, product-description, .hdt-product-info__item');\n    if (desc) {\n      desc.appendChild(block);\n      return true;\n    }\n    var grid = document.querySelector('[class*=\"secion-main-product\"], .hdt-section-inner .hdt-container');\n    if (grid && grid.parentNode) {\n      grid.parentNode.insertBefore(block, grid.nextSibling);\n      return true;\n    }\n    return false;\n  }\n  function schedule(){ [0,100,300,800,1600,3000,5000].forEach(function(d){ setTimeout(insertBlock, d); }); }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', schedule); else schedule();\n  if (window.MutationObserver) {\n    var queued = false;\n    new MutationObserver(function(){\n      if (queued || document.getElementById('cd-bobble-upsell-live')) return;\n      queued = true;\n      setTimeout(function(){ queued = false; insertBlock(); }, 150);\n    }).observe(document.documentElement, {childList:true, subtree:true});\n  }\n})();\n/* CD_BOBBLE_UPSELL_CUSTOM_JS_V1 END */\n/* CD_BYMD_BUNDLE_MOM_IDS_GUARD_20260528 START */\n(function(){\n  function isTarget(){return /\\/products\\/because-youre-my-dad-personalized-storybook-2026(?:[/?#]|$)/.test(location.pathname)||/\\/collections\\/fatherday\\/products\\/because-youre-my-dad-personalized-storybook-2026(?:[/?#]|$)/.test(location.pathname);}\n  if(!isTarget()) return;\n  var map={'46689240375471':'46704994451631','46689240408239':'46704994484399','46689240441007':'46704994517167'};\n  var oldMomPath='/products/because-you-are-my-mom-personalized-storybook';\n  var newMomPath='/products/because-youre-my-mom-%E5%B0%88%E5%B1%AC%E6%AF%8D%E8%A6%AA%E7%AF%80%E7%B9%AA%E6%9C%AC-personalized-storybook';\n  var propKey='WhatsApp \u806F\u7D61\u865F\u78BC\uFF08\u5982\u76F8\u7247\u9700\u8981\u8ABF\u6574\uFF0C\u6211\u5011\u6703\u900F\u904E WhatsApp \u5373\u6642\u806F\u7D61\u4F60\uFF09';\n  function ensureWhatsAppField(){\n    if(document.getElementById('cd-bb-whatsapp')) return;\n    var btn=findBtn(); if(!btn||!btn.parentNode) return;\n    var wrap=document.createElement('div'); wrap.id='cd-bb-whatsapp-wrap'; wrap.style.cssText='margin:0 0 14px;';\n    wrap.innerHTML='<label for=\"cd-bb-whatsapp\" style=\"display:block; font-size:12px; color:#777; margin-bottom:6px;\">WhatsApp \u806F\u7D61\u865F\u78BC <span style=\"color:#d05a7a;\">*</span></label><input id=\"cd-bb-whatsapp\" type=\"tel\" inputmode=\"tel\" autocomplete=\"tel\" placeholder=\"\u4F8B\u5982\uFF1A9123 4567\" style=\"width:100%; padding:11px 12px; border:1px solid #ddd; border-radius:8px; font-size:14px; box-sizing:border-box;\"><div id=\"cd-bb-whatsapp-error\" style=\"display:none; color:#b84565; font-size:12px; margin-top:6px;\">\u8ACB\u8F38\u5165 WhatsApp \u806F\u7D61\u865F\u78BC\uFF0C\u65B9\u4FBF\u6211\u5011\u5728\u76F8\u7247\u9700\u8981\u8ABF\u6574\u6642\u806F\u7D61\u60A8\u3002</div>';\n    btn.parentNode.insertBefore(wrap,btn);\n  }\n  function patchDom(){\n    var mom=document.getElementById('cd-bb-mom');\n    if(mom){Array.prototype.forEach.call(mom.options,function(o){if(map[o.value])o.value=map[o.value];});}\n    document.querySelectorAll('a[href=\"'+oldMomPath+'\"],a[href^=\"'+oldMomPath+'?\"]').forEach(function(a){a.setAttribute('href',newMomPath);});\n    var dad=document.getElementById('cd-bb-dad'), orig=document.getElementById('cd-bb-original'), bundle=document.getElementById('cd-bb-bundle');\n    if(dad&&mom&&orig&&bundle){var dp=parseInt(dad.options[dad.selectedIndex].dataset.price,10)||0;var mp=parseInt(mom.options[mom.selectedIndex].dataset.price,10)||0;orig.textContent='+(dp+mp);bundle.textContent='+(dp+mp-50);}\n    ensureWhatsAppField();\n  }\n  function findBtn(){var b=document.querySelectorAll('button');for(var i=0;i<b.length;i++){if((b[i].getAttribute('onclick')||'').indexOf('cdAddBookBundle')!==-1||(b[i].textContent||'').indexOf('\u4E00\u9375\u52A0\u5165\u8CFC\u7269\u8ECA')!==-1)return b[i];}return null;}\n  function install(){\n    patchDom();\n    window.cdUpdateBookBundle=function(){patchDom();};\n    window.cdAddBookBundle=function(e){\n      e=e||window.event;if(e&&e.preventDefault)e.preventDefault();patchDom();\n      var dad=document.getElementById('cd-bb-dad'), mom=document.getElementById('cd-bb-mom'), wa=document.getElementById('cd-bb-whatsapp'), err=document.getElementById('cd-bb-whatsapp-error'), btn=(e&&e.currentTarget)||(e&&e.target)||findBtn();\n      var whatsapp=(wa&&wa.value?wa.value:'').trim();\n      var original='\uD83D\uDED2 \u4E00\u9375\u52A0\u5165\u8CFC\u7269\u8ECA'; if(btn){original=btn.dataset.cdOriginalText||btn.textContent||original;btn.dataset.cdOriginalText=original;}\n      if(!whatsapp){if(err)err.style.display='block'; if(wa){wa.style.borderColor='#d05a7a';wa.focus();} return false;}\n      if(err)err.style.display='none'; if(wa)wa.style.borderColor='#ddd';\n      if(btn){btn.textContent='\u52A0\u5165\u4E2D...';btn.disabled=true;}\n      var props={}; props[propKey]=whatsapp;\n      if(!dad||!mom){if(btn){btn.textContent='\u52A0\u5165\u5931\u6557\uFF0C\u8ACB\u518D\u8A66\u4E00\u6B21';btn.disabled=false;}return false;}\n      fetch('/cart/add.js',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({items:[{id:parseInt(dad.value,10),quantity:1,properties:props},{id:parseInt(mom.value,10),quantity:1,properties:props}]})})\n      .then(function(r){return r.json().then(function(data){if(!r.ok||data.status>=400)throw data;return data;});})\n      .then(function(){window.location.href='/discount/FDKID26?redirect=/checkout';})\n      .catch(function(err2){if(btn){btn.textContent='\u52A0\u5165\u5931\u6557\uFF0C\u8ACB\u518D\u8A66\u4E00\u6B21';btn.disabled=false;}console.warn('CustomDreamer BYMD bundle add failed',err2);setTimeout(function(){if(btn&&!btn.disabled)btn.textContent=original;},2500);});\n      return false;\n    };\n  }\n  if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',install);else install();\n  document.addEventListener('change',function(e){if(e.target&&(e.target.id==='cd-bb-dad'||e.target.id==='cd-bb-mom'||e.target.id==='cd-bb-whatsapp'))setTimeout(patchDom,0);},true);\n  var tries=0,t=setInterval(function(){install();tries++;if(tries>40)clearInterval(t);},250);\n})();\n/* CD_BYMD_BUNDLE_MOM_IDS_GUARD_20260528 END */\n"],
  "mappings": "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",
  "names": ["self", "items", "observer", "toast"]
}
