{
  "version": 3,
  "sources": ["/cdn/shop/t/65/assets/theme.js?cv=1.23.3"],
  "sourcesContent": ["window.theme = window.theme || {};\n\n/* ================ SLATE ================ */\nwindow.theme = window.theme || {};\n   \ntheme.Sections = function Sections() {\n  this.constructors = {};\n  this.instances = [];     \n \n  document.addEventListener( \n    'shopify:section:load',     \n    this._onSectionLoad.bind(this) \n  ); \n  document.addEventListener(\n    'shopify:section:unload',\n    this._onSectionUnload.bind(this)  \n  ); \n  document.addEventListener(\n    'shopify:section:select',\n    this._onSelect.bind(this)\n  );\n  document.addEventListener(\n    'shopify:section:deselect',\n    this._onDeselect.bind(this)\n  ); \n  document.addEventListener(\n    'shopify:block:select',\n    this._onBlockSelect.bind(this)\n  );\n  document.addEventListener(\n    'shopify:block:deselect',\n    this._onBlockDeselect.bind(this)\n  );\n  document.addEventListener(\n    'shopify:section:reorder',\n    this._onSectionReorder.bind(this)\n  );\n  \n};\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nwindow.theme = window.theme || {};\n\nvar handleizeStr = function (str) {\n  return str.toLowerCase().replace(/[^\\w\\u00C0-\\u024f]+/g, \"-\").replace(/^-+|-+$/g, \"\");\n};\nfunction checkFirstIndexSection () {\n  \n  var isSlideshowFirstSection = false;\n  var main_wrapper = document.querySelector('#MainContent');\n  \n  var slideShowFirst = false;\n  if(main_wrapper) {\n    var first_shopifySection = main_wrapper.querySelectorAll('.shopify-section')[0];\n    if(first_shopifySection) {\n      if(first_shopifySection.classList.contains('index-section--slideshow')) {\n        isSlideshowFirstSection = true; \n        slideShowFirst = true;\n\n        if(first_shopifySection.querySelector('.slideshow-section-wrapper').classList.contains('page-width')) {\n          isSlideshowFirstSection = false; \n        }\n      }\n    }\n  }\n  \n  \n  if(isSlideshowFirstSection) {\n    var isSlideshowFirstSection = false;\n    var main_wrapper = document.querySelector('#MainContent');\n    var no_overlapHeader = document.querySelector('.shopify-section-header').classList.contains('no-overlap');\n    if(!no_overlapHeader) {\n      if(main_wrapper) {\n        var first_shopifySection = main_wrapper.querySelectorAll('.shopify-section')[0];\n        if(first_shopifySection) {\n          if(first_shopifySection.classList.contains('index-section--slideshow')) {\n            isSlideshowFirstSection = true;\n            \n            \n            if(first_shopifySection.querySelector('.slideshow-section-wrapper').classList.contains('page-width')) {\n              isSlideshowFirstSection = false; \n            }\n            \n          }\n        }\n      }\n    }\n\n\n    if(document.querySelector('.shopify-section-header')) {\n      if(!isSlideshowFirstSection) {\n        document.querySelector('.shopify-section-header').classList.add('showAlternateHeader');\n      } else {\n        document.querySelector('.shopify-section-header').classList.remove('showAlternateHeader');\n      }\n    }\n  } else {\n    \n  \n  var noOverlap  = false;\n    var showAlternateHeader  = false;\n    var custom_page_header_section = document.querySelector('.custom_page_header_section');\n    var alternate_logo  = document.querySelector('.alternate_logo');\n    var main_logo =  document.querySelector('.main_logo');  \n    var PageContainer = document.querySelector('#PageContainer');\n\n    if(!custom_page_header_section)  {\n      showAlternateHeader = true;\n    }\n\n    if(document.querySelector('.no-overlap')) {\n      showAlternateHeader = true;\n      noOverlap = true;\n    }\n\n    if(slideShowFirst) {\n      showAlternateHeader = true;\n    }\n    \n    \n    \n    if(showAlternateHeader) {\n\n      if(PageContainer) {\n        if(!noOverlap) {\n          PageContainer.classList.add('marginTop');\n        }\n      }\n       if(document.querySelector('.shopify-section-header')) {\n      document.querySelector('.shopify-section-header').classList.add('showAlternateHeader');\n       }\n      if(alternate_logo) {\n        alternate_logo.classList.remove('hide');\n        main_logo.classList.add('hide');\n      }\n    } else {\n      \n      document.querySelector('.shopify-section-header').classList.remove('showAlternateHeader');\n      if(PageContainer) {\n        PageContainer.classList.remove('marginTop');\n      }\n\n      if(alternate_logo) {\n        alternate_logo.classList.add('hide');\n        main_logo.classList.remove('hide');\n      }\n    }\n  }\n};\n\ntheme.Sections.prototype = Object.assign({}, theme.Sections.prototype, {\n  _createInstance: function(container, constructor) {\n    var id = container.getAttribute('data-section-id');\n    var type = container.getAttribute('data-section-type');\n\n    constructor = constructor || this.constructors[type];\n\n    if (typeof constructor === 'undefined') {\n      var lazy = this.lazyExports && this.lazyExports[type];\n      if (!lazy) {\n        return;\n      }\n      // Constructor hasn't been code-split-loaded yet - fetch it, cache it on\n      // this.constructors so later instances of the same type resolve\n      // synchronously, then instantiate normally. Covers both the initial\n      // page-load scan (registerLazy calling this directly) and a later\n      // Theme Editor shopify:section:load event for a section type that\n      // wasn't present at initial load (_onSectionLoad below also calls\n      // this with no constructor arg).\n      var self = this;\n      window.importModule(lazy.moduleKey).then(function(mod) {\n        var resolvedConstructor = mod[lazy.exportName];\n        self.constructors[type] = resolvedConstructor;\n        self._createInstance(container, resolvedConstructor);\n      });\n      return;\n    }\n\n    var instance = Object.assign(new constructor(container), {\n      id: id,\n      type: type,\n      container: container\n    });\n\n    this.instances.push(instance);\n  },\n\n  _onSectionLoad: function(evt) {\n    \n    var container = document.querySelector(\n      '[data-section-id=\"' + evt.detail.sectionId + '\"]'\n    );\n\n    if (container) {\n      this._createInstance(container);\n    }\n    checkFirstIndexSection();\n    if(container.classList.contains('fade-in-animation')) {\n      container.classList.add('fadeIn-animation');\n    }\n    var zoomFadeAnimationElems = container.querySelectorAll('.zoom-fade-animation:not(.zoomFade-animation)'); \n\n    if(zoomFadeAnimationElems.length) {\n      zoomFadeAnimationElems.forEach(function(block,index) {\n        var  containerPosition = block.getBoundingClientRect();\n        if(containerPosition.top + 200 < window.innerHeight) {\n          block.classList.add('zoomFade-animation');\n        }\n      });\n    } \n\n    if (window.SPR) {\n      window.SPR.initDomEls();\n      window.SPR.loadProducts();\n    }\n\n  },\n  _onSectionReorder: function(evt) {\n  checkFirstIndexSection();    \n  },\n  _onSectionUnload: function(evt) {\n        \n    var sectionEl = evt.target;\n    \n    \n    checkFirstIndexSection();    \n    \n    \n    this.instances = this.instances.filter(function(instance) {\n      var isEventInstance = instance.id === evt.detail.sectionId;\n\n      if (isEventInstance) {\n        if (typeof instance.onUnload === 'function') {\n          instance.onUnload(evt);\n        }\n      }\n      return !isEventInstance;\n    });\n  },\n\n  _onSelect: function(evt) {\n    // eslint-disable-next-line no-shadow\n    var instance = this.instances.find(function(instance) {\n      return instance.id === evt.detail.sectionId;\n    });\n\n    if (\n      typeof instance !== 'undefined' &&\n      typeof instance.onSelect === 'function'\n    ) {\n      instance.onSelect(evt);\n    }\n     checkFirstIndexSection();\n  },\n\n  _onDeselect: function(evt) {\n    // eslint-disable-next-line no-shadow\n    var instance = this.instances.find(function(instance) {\n      return instance.id === evt.detail.sectionId;\n    });\n\n    if (\n      typeof instance !== 'undefined' &&\n      typeof instance.onDeselect === 'function'\n    ) {\n      instance.onDeselect(evt);\n    }\n     checkFirstIndexSection();\n  },\n\n  _onBlockSelect: function(evt) {\n    // eslint-disable-next-line no-shadow\n    var instance = this.instances.find(function(instance) {\n      return instance.id === evt.detail.sectionId;\n    });\n\n    if (\n      typeof instance !== 'undefined' &&\n      typeof instance.onBlockSelect === 'function'\n    ) {\n      instance.onBlockSelect(evt);\n    }\n  },\n\n  _onBlockDeselect: function(evt) {\n    // eslint-disable-next-line no-shadow\n    var instance = this.instances.find(function(instance) {\n      return instance.id === evt.detail.sectionId;\n    });\n\n    if (\n      typeof instance !== 'undefined' &&\n      typeof instance.onBlockDeselect === 'function'\n    ) {\n      instance.onBlockDeselect(evt);\n    }\n  },\n\n  register: function(type, constructor) {\n\n    this.constructors[type] = constructor;\n\n    document.querySelectorAll('[data-section-type=\"' + type + '\"]').forEach(\n      function(container) {\n        this._createInstance(container, constructor);\n      }.bind(this)\n    );\n  },\n\n  // Like register(), but the constructor lives in a separate lazily-loaded\n  // file (assets/theme-<moduleKey>.js, registered in window.theme.modules)\n  // instead of theme.js itself - only fetched the first time a matching\n  // section actually exists on the page. exportName is the name the module\n  // exports (e.g. export { Slideshow };), moduleKey is the window.theme.modules\n  // key used by window.importModule.\n  registerLazy: function(type, exportName, moduleKey) {\n\n    this.lazyExports = this.lazyExports || {};\n    this.lazyExports[type] = { exportName: exportName, moduleKey: moduleKey };\n\n    document.querySelectorAll('[data-section-type=\"' + type + '\"]').forEach(\n      function(container) {\n        this._createInstance(container);\n      }.bind(this)\n    );\n  }\n});\n\ncheckFirstIndexSection();\n\nwindow.slate = window.slate || {};\n\n/**\n * Slate utilities\n * -----------------------------------------------------------------------------\n * A collection of useful utilities to help build your theme\n *\n *\n * @namespace utils\n */\n\nslate.utils = {\n  /**\n   * Get the query params in a Url\n   * Ex\n   * https://mysite.com/search?q=noodles&b\n   * getParameterByName('q') = \"noodles\"\n   * getParameterByName('b') = \"\" (empty value)\n   * getParameterByName('test') = null (absent)\n   */\n  getParameterByName: function(name, url) {\n    if (!url) url = window.location.href;\n    name = name.replace(/[[\\]]/g, '\\\\$&');\n    var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\n      results = regex.exec(url);\n    if (!results) return null;\n    if (!results[2]) return '';\n    return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n  },\n\n  resizeSelects: function(selects) {\n    selects.forEach(function(select) {\n      var arrowWidth = 55;\n\n      var test = document.createElement('span');\n      test.innerHTML = select.selectedOptions[0].label;\n\n      document.querySelector('.site-footer').appendChild(test);\n\n      var width = test.offsetWidth + arrowWidth;\n      test.remove();\n\n      select.style.width = width + 'px';\n    });\n  },\n\n  keyboardKeys: {\n    TAB: 9,\n    ENTER: 13,\n    ESCAPE: 27,\n    LEFTARROW: 37,\n    RIGHTARROW: 39\n  }\n};\n\nwindow.slate = window.slate || {};\n\n/**\n * iFrames\n * -----------------------------------------------------------------------------\n * Wrap videos in div to force responsive layout.\n *\n * @namespace iframes\n */\n\nslate.rte = {\n  /**\n   * Wrap tables in a container div to make them scrollable when needed\n   *\n   * @param {object} options - Options to be used\n   * @param {NodeList} options.tables - Elements of the table(s) to wrap\n   * @param {string} options.tableWrapperClass - table wrapper class name\n   */\n  wrapTable: function(options) {\n    options.tables.forEach(function(table) {\n      var wrapper = document.createElement('div');\n      wrapper.classList.add(options.tableWrapperClass);\n\n      table.parentNode.insertBefore(wrapper, table);\n      wrapper.appendChild(table);\n    });\n  },\n\n  /**\n   * Wrap iframes in a container div to make them responsive\n   *\n   * @param {object} options - Options to be used\n   * @param {NodeList} options.iframes - Elements of the iframe(s) to wrap\n   * @param {string} options.iframeWrapperClass - class name used on the wrapping div\n   */\n  wrapIframe: function(options) {\n    options.iframes.forEach(function(iframe) {\n      var wrapper = document.createElement('div');\n      wrapper.classList.add(options.iframeWrapperClass);\n\n      iframe.parentNode.insertBefore(wrapper, iframe);\n      wrapper.appendChild(iframe);\n\n      iframe.src = iframe.src;\n    });\n  }\n};\n\nwindow.slate = window.slate || {};\n\n/**\n * A11y Helpers\n * -----------------------------------------------------------------------------\n * A collection of useful functions that help make your theme more accessible\n * to users with visual impairments.\n *\n *\n * @namespace a11y\n */\n\nslate.a11y = {\n  state: {\n    firstFocusable: null,\n    lastFocusable: null\n  },\n  /**\n   * For use when focus shifts to a container rather than a link\n   * eg for In-page links, after scroll, focus shifts to content area so that\n   * next `tab` is where user expects\n   *\n   * @param {HTMLElement} element - The element to be acted upon\n   */\n  pageLinkFocus: function(element) {\n    if (!element) return;\n    var focusClass = 'js-focus-hidden';\n\n    element.setAttribute('tabIndex', '-1');\n    element.focus();\n    element.classList.add(focusClass);\n    element.addEventListener('blur', callback, { once: true });\n\n    function callback() {\n      element.classList.remove(focusClass);\n      element.removeAttribute('tabindex');\n    }\n  },\n\n  /**\n   * Traps the focus in a particular container\n   *\n   * @param {object} options - Options to be used\n   * @param {HTMLElement} options.container - Container to trap focus within\n   * @param {HTMLElement} options.elementToFocus - Element to be focused when focus leaves container\n   */\n  trapFocus: function(options) {\n    var focusableElements = Array.from(\n      options.container.querySelectorAll(\n        'button, [href], input, select, textarea, [tabindex]:not([tabindex^=\"-\"])'\n      )\n    ).filter(function(element) {\n      var width = element.offsetWidth;\n      var height = element.offsetHeight;\n\n      return (\n        width !== 0 &&\n        height !== 0 &&\n        getComputedStyle(element).getPropertyValue('display') !== 'none'\n      );\n    });\n\n    this.state.firstFocusable = focusableElements[0];\n    this.state.lastFocusable = focusableElements[focusableElements.length - 1];\n\n    if (!options.elementToFocus) {\n      options.elementToFocus = options.container;\n    }\n\n    options.container.setAttribute('tabindex', '-1');\n    options.elementToFocus.focus();\n\n    this._setupHandlers();\n\n    document.addEventListener('focusin', this._onFocusInHandler);\n    document.addEventListener('focusout', this._onFocusOutHandler);\n  },\n\n  _setupHandlers: function() {\n    if (!this._onFocusInHandler) {\n      this._onFocusInHandler = this._onFocusIn.bind(this);\n    }\n\n    if (!this._onFocusOutHandler) {\n      this._onFocusOutHandler = this._onFocusIn.bind(this);\n    }\n\n    if (!this._manageFocusHandler) {\n      this._manageFocusHandler = this._manageFocus.bind(this);\n    }\n  },\n\n  _onFocusOut: function() {\n    document.removeEventListener('keydown', this._manageFocusHandler);\n  },\n\n  _onFocusIn: function(evt) {\n    if (\n      evt.target !== this.state.lastFocusable &&\n      evt.target !== this.state.firstFocusable\n    )\n      return;\n\n    document.addEventListener('keydown', this._manageFocusHandler);\n  },\n\n  _manageFocus: function(evt) {\n    if (evt.keyCode !== slate.utils.keyboardKeys.TAB) return;\n\n    /**\n     * On the last focusable element and tab forward,\n     * focus the first element.\n     */\n    if (evt.target === this.state.lastFocusable && !evt.shiftKey) {\n      evt.preventDefault();\n      this.state.firstFocusable.focus();\n    }\n    /**\n     * On the first focusable element and tab backward,\n     * focus the last element.\n     */\n    if (evt.target === this.state.firstFocusable && evt.shiftKey) {\n      evt.preventDefault();\n      this.state.lastFocusable.focus();\n    }\n  },\n\n  /**\n   * Removes the trap of focus in a particular container\n   *\n   * @param {object} options - Options to be used\n   * @param {HTMLElement} options.container - Container to trap focus within\n   */\n  removeTrapFocus: function(options) {\n    if (options.container) {\n      options.container.removeAttribute('tabindex');\n    }\n    document.removeEventListener('focusin', this._onFocusInHandler);\n  },\n\n  /**\n   * Add aria-describedby attribute to external and new window links\n   *\n   * @param {object} options - Options to be used\n   * @param {object} options.messages - Custom messages to be used\n   * @param {HTMLElement} options.links - Specific links to be targeted\n   */\n  accessibleLinks: function(options) {\n    var body = document.querySelector('body');\n\n    var idSelectors = {\n      newWindow: 'a11y-new-window-message',\n      external: 'a11y-external-message',\n      newWindowExternal: 'a11y-new-window-external-message'\n    };\n\n    if (options.links === undefined || !options.links.length) {\n      options.links = document.querySelectorAll(\n        'a[href]:not([aria-describedby])'\n      );\n    }\n\n    function generateHTML(customMessages) {\n      if (typeof customMessages !== 'object') {\n        customMessages = {};\n      }\n\n      var messages = Object.assign(\n        {\n          newWindow: 'Opens in a new window.',\n          external: 'Opens external website.',\n          newWindowExternal: 'Opens external website in a new window.'\n        },\n        customMessages\n      );\n\n      var container = document.createElement('ul');\n      var htmlMessages = '';\n\n      for (var message in messages) {\n        htmlMessages +=\n          '<li id=' + idSelectors[message] + '>' + messages[message] + '</li>';\n      }\n\n      container.setAttribute('hidden', true);\n      container.innerHTML = htmlMessages;\n\n      body.appendChild(container);\n    }\n\n    function _externalSite(link) {\n      var hostname = window.location.hostname;\n\n      return link.hostname !== hostname;\n    }\n\n    options.links.forEach(function(link) {\n      var target = link.getAttribute('target');\n      var rel = link.getAttribute('rel');\n      var isExternal = _externalSite(link);\n      var isTargetBlank = target === '_blank';\n\n      if (isExternal) {\n        link.setAttribute('aria-describedby', idSelectors.external);\n      }\n\n      if (isTargetBlank) {\n        if (!rel || rel.indexOf('noopener') === -1) {\n          var relValue = rel === undefined ? '' : rel + ' ';\n          relValue = relValue + 'noopener';\n          link.setAttribute('rel', relValue);\n        }\n\n        link.setAttribute('aria-describedby', idSelectors.newWindow);\n      }\n\n      if (isExternal && isTargetBlank) {\n        link.setAttribute('aria-describedby', idSelectors.newWindowExternal);\n      }\n    });\n\n    generateHTML(options.messages);\n  }\n};\n\n/**\n * Image Helper Functions\n * -----------------------------------------------------------------------------\n * A collection of functions that help with basic image operations.\n *\n */\n\ntheme.Images = (function() {\n  /**\n   * Preloads an image in memory and uses the browsers cache to store it until needed.\n   *\n   * @param {Array} images - A list of image urls\n   * @param {String} size - A shopify image size attribute\n   */\n\n  function preload(images, size) {\n    if (typeof images === 'string') {\n      images = [images];\n    }\n\n    for (var i = 0; i < images.length; i++) {\n      var image = images[i];\n      this.loadImage(this.getSizedImageUrl(image, size));\n    }\n  }\n\n  /**\n   * Loads and caches an image in the browsers cache.\n   * @param {string} path - An image url\n   */\n  function loadImage(path) {\n    new Image().src = path;\n  }\n\n  /**\n   * Swaps the src of an image for another OR returns the imageURL to the callback function\n   * @param image\n   * @param element\n   * @param callback\n   */\n  function switchImage(image, element, callback) {\n    var size = this.imageSize(element.src);\n    var imageUrl = this.getSizedImageUrl(image.src, size);\n\n    if (callback) {\n      callback(imageUrl, image, element); // eslint-disable-line callback-return\n    } else {\n      element.src = imageUrl;\n    }\n  }\n\n  /**\n   * +++ Useful\n   * Find the Shopify image attribute size\n   *\n   * @param {string} src\n   * @returns {null}\n   */\n  function imageSize(src) {\n    var match = src.match(\n      /.+_((?:pico|icon|thumb|small|compact|medium|large|grande)|\\d{1,4}x\\d{0,4}|x\\d{1,4})[_\\\\.@]/\n    );\n\n    if (match !== null) {\n      if (match[2] !== undefined) {\n        return match[1] + match[2];\n      } else {\n        return match[1];\n      }\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * +++ Useful\n   * Adds a Shopify size attribute to a URL\n   *\n   * @param src\n   * @param size\n   * @returns {*}\n   */\n  function getSizedImageUrl(src, size) {\n    if (size === null) {\n      return src;\n    }\n\n    if (size === 'master') {\n      return this.removeProtocol(src);\n    }\n\n    var match = src.match(\n      /\\.(jpg|jpeg|gif|png|bmp|bitmap|tiff|tif)(\\?v=\\d+)?$/i\n    );\n\n    if (match !== null) {\n      var prefix = src.split(match[0]);\n      var suffix = match[0];\n\n      return this.removeProtocol(prefix[0] + '_' + size + suffix);\n    }\n\n    return null;\n  }\n\n  function removeProtocol(path) {\n    return path.replace(/http(s)?:/, '');\n  }\n\n  return {\n    preload: preload,\n    loadImage: loadImage,\n    switchImage: switchImage,\n    imageSize: imageSize,\n    getSizedImageUrl: getSizedImageUrl,\n    removeProtocol: removeProtocol\n  };\n})();\n\n/**\n * Currency Helpers\n * -----------------------------------------------------------------------------\n * A collection of useful functions that help with currency formatting\n *\n * Current contents\n * - formatMoney - Takes an amount in cents and returns it as a formatted dollar value.\n *\n * Alternatives\n * - Accounting.js - http://openexchangerates.github.io/accounting.js/\n *\n */\n\ntheme.Currency = (function() {\n  var moneyFormat = '${{amount}}'; // eslint-disable-line camelcase\n\n  function formatMoney(cents, format) {\n    if (typeof cents === 'string') {\n      cents = cents.replace('.', '');\n    }\n    var value = '';\n    var placeholderRegex = /\\{\\{\\s*(\\w+)\\s*\\}\\}/;\n    var formatString = format || moneyFormat;\n\n    function formatWithDelimiters(number, precision, thousands, decimal) {\n      thousands = thousands || ',';\n      decimal = decimal || '.';\n\n      if (isNaN(number) || number === null) {\n        return 0;\n      }\n\n      number = (number / 100.0).toFixed(precision);\n\n      var parts = number.split('.');\n      var dollarsAmount = parts[0].replace(\n        /(\\d)(?=(\\d\\d\\d)+(?!\\d))/g,\n        '$1' + thousands\n      );\n      var centsAmount = parts[1] ? decimal + parts[1] : '';\n\n      return dollarsAmount + centsAmount;\n    }\n\n    switch (formatString.match(placeholderRegex)[1]) {\n      case 'amount':\n        value = formatWithDelimiters(cents, 2);\n        break;\n      case 'amount_no_decimals':\n        value = formatWithDelimiters(cents, 0);\n        break;\n      case 'amount_with_comma_separator':\n        value = formatWithDelimiters(cents, 2, '.', ',');\n        break;\n      case 'amount_no_decimals_with_comma_separator':\n        value = formatWithDelimiters(cents, 0, '.', ',');\n        break;\n      case 'amount_no_decimals_with_space_separator':\n        value = formatWithDelimiters(cents, 0, ' ');\n        break;\n      case 'amount_with_apostrophe_separator':\n        value = formatWithDelimiters(cents, 2, \"'\");\n        break;\n    }\n\n    return formatString.replace(placeholderRegex, value);\n  }\n\n  return {\n    formatMoney: formatMoney\n  };\n})();\n\n/**\n * Variant Selection scripts\n * ------------------------------------------------------------------------------\n *\n * Handles change events from the variant inputs in any `cart/add` forms that may\n * exist.  Also updates the master select and triggers updates when the variants\n * price or image changes.\n *\n * @namespace variants\n */\n\nslate.Variants = (function() {\n  /**\n   * Variant constructor\n   *\n   * @param {object} options - Settings from `product.js`\n   */\n  function Variants(options) {\n    this.container = options.container;\n    this.product = options.product;\n    this.originalSelectorId = options.originalSelectorId;\n    this.enabledPickAnOption = options.pickAnOption;\n    this.enabledShow_preOrder_btn = options.show_preOrder_btn;\n    \n    this.enableLinkedOptions = options.enableLinkedOptions;\n    this.enableHistoryState = options.enableHistoryState;\n    this.singleOptions = this.container.querySelectorAll(\n      options.singleOptionSelector\n    );\n    this.singleOptionColorSelect = this.container.querySelector(\n      options.singleOptionColorSelector\n    );\n    this.currentVariant = this._getVariantFromOptions();\n    \n    this._initGallery();\n    this.singleOptions.forEach(\n      function(option) {\n        option.addEventListener('change', this._onSelectChange.bind(this));\n      }.bind(this)\n    );\n    \n    if(this.singleOptionColorSelect) {\n      this.singleOptionColorSelect.dispatchEvent(new Event('change', { bubbles: true }));\n    }\n\n//     this.delegateElement = new Delegate(this.container.querySelector('[data-product-single-media-group]'));\n\n    this.delegateElement = new Delegate(this.container);\n    \n    \n       \n        this.delegateElement.on('model:played','[data-product-single-media-group]', this._disableDrag.bind(this));\n        this.delegateElement.on('model:paused','[data-product-single-media-group]', this._enableDrag.bind(this));\n\n\n    \n  }\n\n  Variants.prototype = Object.assign({}, Variants.prototype, {\n    _initGallery: function (startIndex) {\n\n      var main_slider = this.container.querySelector('.product-single__media__carousel');\n      var thumbnails_slider = this.container.querySelector('.thumbnails-slider');\n      var main_slider_options = main_slider ? JSON.parse(main_slider.getAttribute('data-flickity-config')) : null;\n      var product_image__zoom = this.container.querySelector('.product_image__zoom');\n      var thumbnails_grid = this.container.querySelector('.thumbnails-grid');\n      if(main_slider) {\n        \n       \n        if(startIndex) {\n        main_slider_options.initialIndex  = startIndex;\n        }\n        \n        this.flickityInstance = new Flickity(main_slider, main_slider_options);\n        this.flickityInstance.element.classList.add(\"rendered\");\n\n        var _this = this;\n       \n                \n        this.flickityInstance.on( 'select', function( index ) {\n\n          var flickity_slider = _this.flickityInstance.element;\n          var videoSlides = flickity_slider.querySelectorAll(\"[data-product-media-type-video]\");\n          var modelViewerSlides = flickity_slider.querySelectorAll(\"[data-product-media-type-model]\");\n          var selectedSlide = _this.flickityInstance.selectedElement;\n\n\n          if(videoSlides.length > 0) {\n            videoSlides.forEach(function(item,index) {\n              var isVideoTag = item.querySelector('video');\n              if(isVideoTag) {\n                var videoId = isVideoTag.getAttribute('id');\n                var videoObj = document.getElementById(videoId);\n                if(videoObj) {\n                  videoObj.pause();\n                }\n              } else {\n               \n               var videoHost = item.querySelector('.product-single__media').getAttribute('data-media-host');\n                var videoId = item.querySelector('iframe').getAttribute('id');\n                if(videoHost == 'youtube') {\n                   if (window.YT) {\n                       var player = YT.get(videoId);\n                       if(player) {\n                  player.pauseVideo();\n                }\n                   }\n                } else {\n                    if (window.Vimeo) {\n                        var player = new Vimeo.Player(item.querySelector('iframe'));\n                       if(player) {\n                  player.pause();\n                }\n                    }\n                }\n              \n              \n              }\n            });\n          }\n          \n          var selectedSlideVideo = selectedSlide.querySelector(\"[data-product-media-type-video]\");\n          if(selectedSlideVideo) {\n            var isVideoTag = selectedSlideVideo.querySelector('video');\n            if(isVideoTag) {\n              var videoId = isVideoTag.getAttribute('id');\n              var videoObj = document.getElementById(videoId);\n              if(videoObj) {\n                videoObj.play();\n              }\n            } else {\n\n                          var videoHost = selectedSlideVideo.querySelector('.product-single__media').getAttribute('data-media-host');\n                var videoId = selectedSlideVideo.querySelector('iframe').getAttribute('id');\n                if(videoHost == 'youtube') {\n                   if (window.YT) {\n                       var player = YT.get(videoId);\n                       if(player) {\n                  player.playVideo();\n                }\n                   }\n                } else {\n                    if (window.Vimeo) {\n                        var player = new Vimeo.Player(selectedSlideVideo.querySelector('iframe'));\n                       if(player) {\n                  player.play();\n                }\n                    }\n                }\n              \n           \n            }\n          }\n\n          var selectedSlideModel = selectedSlide.querySelector(\"[data-product-media-type-model]\");\n          if(selectedSlideModel) {\n            var modelViewerEl = selectedSlide.querySelector('model-viewer');\n            if(modelViewerEl) {\n              modelViewerEl.dispatchEvent(new CustomEvent('mediaVisible', {bubbles: true,cancelable: true}));\n            }\n          } else {\n            if(modelViewerSlides.length > 0) {\n              modelViewerSlides.forEach(function(item,index) {\n                var modelViewerEl = item.querySelector('model-viewer');\n                if(modelViewerEl) {\n                  modelViewerEl.dispatchEvent(new CustomEvent('mediaHidden', {bubbles: true,cancelable: true}));\n                }\n              });\n            }\n\n            \n            \n          }\n        });\n\n      }\n      if(thumbnails_slider) {\n        var thumbnails_slider_options = JSON.parse(thumbnails_slider.getAttribute('data-thumb_flickity_options'));\n        thumbnails_slider_options.asNavFor = main_slider;\n        var thumb_flickityInstance = new Flickity(thumbnails_slider, thumbnails_slider_options);\n      }\n      if(product_image__zoom && main_slider) {\n        var imagesArr = main_slider.querySelectorAll('.image_type');\n        if(imagesArr.length) {\n          imagesArr.forEach(function (item,index) {\n            item.addEventListener('click', function (e) {\n              e.preventDefault();\n\n              var pswpElement = document.querySelectorAll('.pswp')[0];\n\n              var items = [];\n              imagesArr.forEach(function (imageEl,index) {\n                var imageObj = {\n                  src: imageEl.getAttribute('data-image-url'),\n                  w: +(imageEl.getAttribute('data-image-width')),\n                  h: +(imageEl.getAttribute('data-image-height'))\n                }\n                items.push(imageObj);\n              });\n              var options = {\n                index: index // start at first slide\n              };\n\n              var gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);\n              gallery.init();\n            });\n          });\n        }\n\n      }\n      if(thumbnails_grid) {\n        var thumbnail_images = thumbnails_grid.querySelectorAll('.product-single__thumbnail-image');\n        if(thumbnail_images.length) {\n          thumbnail_images.forEach(function (thumb,index){\n            thumb.addEventListener('click', function(e) {\n              e.preventDefault();\n              _this.flickityInstance.select(index);\n            });\n          });\n        }\n      }\n\n    },\n\n    _disableDrag: function (event) {\n      this.flickityInstance.options.draggable = false;\n      this.flickityInstance.updateDraggable();\n    },\n    _enableDrag: function (event) {\n\n      this.flickityInstance.options.draggable = true;\n      this.flickityInstance.updateDraggable();\n    },\n    _getCurrentOptions: function() {\n      var result = [];\n\n      this.singleOptions.forEach(function(option) {\n        var type = option.getAttribute('type');\n        var isRadioOrCheckbox = type === 'radio' || type === 'checkbox';\n\n        if (!isRadioOrCheckbox || option.checked) {\n          result.push({\n            value: option.value,\n            index: option.getAttribute('data-index')\n          });\n        }\n      });\n\n      return result;\n    },\n\n    /**\n     * Find variant based on selected values.\n     *\n     * @param  {array} selectedValues - Values of variant inputs\n     * @return {object || undefined} found - Variant object from product.variants\n     */\n    _getVariantFromOptions: function() {\n      var selectedValues = this._getCurrentOptions();\n      var variants = this.product.variants;\n\n      var found = variants.find(function(variant) {\n        return selectedValues.every(function(values) {\n          return variant[values.index] === values.value;\n        });\n      });\n\n      return found;\n    },\n\n    /**\n     * Event handler for when a variant input changes.\n     */\n    _onSelectChange: function(e) {\n      var variant = this._getVariantFromOptions();\n\n     if(this.enabledPickAnOption) {\n        if (!variant) {\n          var selectedValuesArr = this._getCurrentOptions();\n          var allOptionsPicked = true;\n          selectedValuesArr.forEach(function(selectedValue){\n            if(selectedValue.value == \"\"){\n               allOptionsPicked = false;\n            }\n          });\n          \n          if(!allOptionsPicked){\n            return;\n          }\n\n        } else {\n          var form = this.container.querySelector('.disabled_btns');\n          if(form) {\n\n            var submit_btn = form.querySelector('[type=\"submit\"]');\n            form.classList.remove('disabled_btns');\n            if(submit_btn) {\n              submit_btn.disabled = false;\n            }\n          }\n        }\n      }\n\n     \n      \n      this.container.dispatchEvent(\n        new CustomEvent('variantChange', {\n          detail: {\n            variant: variant\n          },\n          bubbles: true,\n          cancelable: true \n        })\n      );\n\n\n      if (!variant) {\n        return;\n      }\n\n      this._updateMasterSelect(variant);\n\n      \n      this._updateImages(variant,e);\n      this._updatePrice(variant);\n      this._updateSKU(variant);\n      this.currentVariant = variant;\n      if (this.enableHistoryState) {\n        this._updateHistoryState(variant);\n      }\n      \n    },\n\n    /**\n     * Trigger event when variant image changes\n     *\n     * @param  {object} variant - Currently selected variant\n     * @return {event}  variantImageChange\n     */\n    _updateImages: function(variant,event) {\n      \n      \n      var all_media__block = this.container.querySelector('.all_media__block');\n      var all_thumb_media__block = this.container.querySelector('.all_thumb_media__block');\n      var slider = this.container.querySelector('[data-product-main-slider]');\n\n      if(!slider) {\n        return;\n      }\n\n      if(all_media__block && slider) {\n       \n        var thumb_slider = this.container.querySelector('.product-single__thumbnails');\n        var el_target = event.target;\n        var optionNameAttribute = el_target && el_target.getAttribute('data-option-name');\n        if(!optionNameAttribute) {\n          return;\n        }\n        var optionName = optionNameAttribute.toLowerCase();\n        var optionValue = el_target.value.toLowerCase();\n        \n        var rebuild_flag = false;\n\n        slider.querySelectorAll('.product-single__media__slide').forEach(function(item,index) {\n          var item_wrapper = item.querySelector('[data-product-single-media-wrapper]');\n          if(item_wrapper) {\n          var itemOptionName = item_wrapper.getAttribute('data-media-option-name');\n          if(itemOptionName == optionName) {\n          \trebuild_flag = true;\n          }\n          }\n        });\n\n        if(rebuild_flag) {\n          if(slider.classList.contains('flickity-enabled')) {\n            var flkty = Flickity.data( slider );\n            flkty.destroy();\n          }\n          var slider_old_images = slider.querySelectorAll('[product-image-media]');\n          if(slider_old_images.length) {\n            slider_old_images.forEach(function (imageEl,index) {\n              var parentEl = imageEl.closest('.product-single__media__slide');\n              if(parentEl) {\n                parentEl.remove();\n              }\n            });\n          }\n\n//           slider.innerHTML = '';\n\n          var show_default_image = true;\n          all_media__block.querySelectorAll('.product-single__media__slide').forEach(function(item,index) {\n            var item_wrapper = item.querySelector('[data-product-single-media-wrapper]');\n            if(!item_wrapper) {\n              return;\n            }\n\n            var itemOptionName = item_wrapper.getAttribute('data-media-option-name');\n            var itemOptionValue = item_wrapper.getAttribute('data-media-option-value');\n\n            if(itemOptionName == optionName && optionValue == itemOptionValue) {\n              var clone = item.cloneNode(true);\n              show_default_image = false;\n              slider.appendChild(clone);\n            }\n          });\n          if(thumb_slider && all_thumb_media__block) {\n            if(thumb_slider.classList.contains('flickity-enabled')) {\n              var thumb_flkty = Flickity.data( thumb_slider );\n              thumb_flkty.destroy();\n            }\n            \n            var old_thumbs_images = thumb_slider.querySelectorAll('[product-image-media]');\n            if(old_thumbs_images.length) {\n              old_thumbs_images.forEach(function (imageEl,index) {\n                imageEl.remove();\n              });\n            }\n\n//             thumb_slider.innerHTML = '';\n\n            all_thumb_media__block.querySelectorAll('.product-single__thumbnails-block').forEach(function(item,index) {\n\n              var itemOptionName = item.getAttribute('data-media-option-name');\n              var itemOptionValue = item.getAttribute('data-media-option-value');\n\n              if(itemOptionName == optionName && optionValue == itemOptionValue) {\n                var clone = item.cloneNode(true);\n                thumb_slider.appendChild(clone);\n              }\n            });\n\n          }\n          if(show_default_image) {\n            all_media__block.querySelectorAll('.product-single__media__slide').forEach(function(item,index) {\n              var clone = item.cloneNode(true);\n              slider.appendChild(clone);\n            });\n            if(thumb_slider && all_thumb_media__block) {\n              all_thumb_media__block.querySelectorAll('.product-single__thumbnails-block').forEach(function(item,index) {\n                var clone = item.cloneNode(true);\n                thumb_slider.appendChild(clone);\n              });\n            }\n          }\n          \n          var featuredMediaIndex = 0;\n          var variantMedia = variant.featured_media;\n          if(variantMedia) {\n            var variantMediaId = variant.featured_media.id;\n            var featuredMedia =       slider.querySelector('.image_type[data-image-id=\"'+variantMediaId+'\"]');\n            if(featuredMedia) {\n              var featuredMediaParent = featuredMedia.closest('.product-single__media__slide');\n              if(featuredMediaParent) {\n                featuredMediaIndex = [].slice.call(featuredMediaParent.parentNode.children).indexOf(featuredMediaParent);\n              }\n\n            }\n          }\n\n          this._initGallery(featuredMediaIndex);\n\n        }\n      } else {\n\t\t\t\n\n        var variantImage = variant.featured_image || {};\n        var currentVariantImage = this.currentVariant.featured_image || {};\n\n        if (\n          !variant.featured_image ||\n          variantImage.src === currentVariantImage.src\n        ) {\n          return;\n        }\n        \n        var featuredMediaIndex = 0;\n        var variantMedia = variant.featured_media;\n        if(variantMedia) {\n          var variantMediaId = variant.featured_media.id;\n          var featuredMedia =       slider.querySelector('.image_type[data-image-id=\"'+variantMediaId+'\"]');\n          if(featuredMedia) {\n            var featuredMediaParent = featuredMedia.closest('.product-single__media__slide');\n            if(featuredMediaParent) {\n              featuredMediaIndex = [].slice.call(featuredMediaParent.parentNode.children).indexOf(featuredMediaParent);\n\n              if(this.flickityInstance) {\n                this.flickityInstance.selectCell(featuredMediaIndex);\n              }\n            }\n\n          }\n        }\n      }\n\n     \n      \n     \n\n      \n      \n      \n//       this.container.dispatchEvent(\n//         new CustomEvent('variantImageChange', {\n//           detail: {\n//             variant: variant\n//           },\n//           bubbles: true,\n//           cancelable: true\n//         })\n//       );\n    },\n\n    /**\n     * Trigger event when variant price changes.\n     *\n     * @param  {object} variant - Currently selected variant\n     * @return {event} variantPriceChange\n     */\n    _updatePrice: function(variant) {\n      \n      \n      if (\n        variant.price === this.currentVariant.price &&\n        variant.compare_at_price === this.currentVariant.compare_at_price &&\n        variant.unit_price === this.currentVariant.unit_price\n      ) {\n        return;\n      }\n\n      \n      this.container.dispatchEvent(\n        new CustomEvent('variantPriceChange', {\n          detail: {\n            variant: variant\n          },\n          bubbles: true,\n          cancelable: true\n        })\n      );\n    },\n\n    /**\n     * Trigger event when variant sku changes.\n     *\n     * @param  {object} variant - Currently selected variant\n     * @return {event} variantSKUChange\n     */\n    _updateSKU: function(variant) {      \n      if (variant.sku === this.currentVariant.sku) {\n        return;\n      }\n\n      this.container.dispatchEvent(\n        new CustomEvent('variantSKUChange', {\n          detail: {\n            variant: variant\n          },\n          bubbles: true,\n          cancelable: true\n        })\n      );\n    },\n\n    /**\n     * Update history state for product deeplinking\n     *\n     * @param  {variant} variant - Currently selected variant\n     * @return {k}         [description]\n     */\n    _updateHistoryState: function(variant) {\n      if (!history.replaceState || !variant) {\n        return;\n      }\n      var params = new URLSearchParams(window.location.search);\n      params.set('variant', variant.id);\n      var query = params.toString();\n      var newurl = window.location.pathname + (query ? '?' + query : '');\n      window.history.replaceState({ path: newurl }, '', newurl);\n    },\n\n    /**\n     * Update hidden master select of variant change\n     *\n     * @param  {variant} variant - Currently selected variant\n     */\n    _updateMasterSelect: function(variant) {\n      var masterSelect = this.container.querySelector(this.originalSelectorId);\n\n      if (!masterSelect) return;\n      masterSelect.value = variant.id;\n    }\n  });\n\n  return Variants;\n})();\n\nthis.Shopify = this.Shopify || {};\nthis.Shopify.theme = this.Shopify.theme || {};\n\n\nthis.Shopify = this.Shopify || {};\nthis.Shopify.theme = this.Shopify.theme || {};\n\nwindow.theme = window.theme || {};\n\ntheme.TouchEvents = function TouchEvents(element, options) {\n  this.axis;\n  this.checkEvents = [];\n  this.eventHandlers = {};\n  this.eventModel = {};\n  this.events = [\n    ['touchstart', 'touchmove', 'touchend', 'touchcancel'],\n    ['pointerdown', 'pointermove', 'pointerup', 'pointercancel'],\n    ['mousedown', 'mousemove', 'mouseup']\n  ];\n  this.eventType;\n  this.difference = {};\n  this.direction;\n  this.start = {};\n\n  this.element = element;\n  this.options = Object.assign(\n    {},\n    {\n      dragThreshold: 10,\n      start: function() {}, // eslint-disable-line\n      move: function() {}, // eslint-disable-line\n      end: function() {} // eslint-disable-line\n    },\n    options\n  );\n\n  this.checkEvents = this._getCheckEvents();\n  this.eventModel = this._getEventModel();\n\n  this._setupEventHandlers();\n};\n\ntheme.TouchEvents.prototype = Object.assign({}, theme.TouchEvents.prototype, {\n  destroy: function() {\n    this.element.removeEventListener(\n      'dragstart',\n      this.eventHandlers.preventDefault\n    );\n\n    this.element.removeEventListener(\n      this.events[this.eventModel][0],\n      this.eventHandlers.touchStart\n    );\n\n    if (!this.eventModel) {\n      this.element.removeEventListener(\n        this.events[2][0],\n        this.eventHandlers.touchStart\n      );\n    }\n\n    this.element.removeEventListener('click', this.eventHandlers.preventClick);\n  },\n\n  _setupEventHandlers: function() {\n    this.eventHandlers.preventDefault = this._preventDefault.bind(this);\n    this.eventHandlers.preventClick = this._preventClick.bind(this);\n    this.eventHandlers.touchStart = this._touchStart.bind(this);\n    this.eventHandlers.touchMove = this._touchMove.bind(this);\n    this.eventHandlers.touchEnd = this._touchEnd.bind(this);\n\n    // Prevent element from dragging when using mouse\n    this.element.addEventListener(\n      'dragstart',\n      this.eventHandlers.preventDefault\n    );\n\n    // Bind the touchstart/pointerdown event\n    this.element.addEventListener(\n      this.events[this.eventModel][0],\n      this.eventHandlers.touchStart\n    );\n\n    // Bind mousedown if necessary\n    if (!this.eventModel) {\n      this.element.addEventListener(\n        this.events[2][0],\n        this.eventHandlers.touchStart\n      );\n    }\n\n    // No clicking during touch\n    this.element.addEventListener('click', this.eventHandlers.preventClick);\n  },\n\n  _touchStart: function(event) {\n    this.eventType = this.eventModel;\n\n    if (event.type === 'mousedown' && !this.eventModel) {\n      this.eventType = 2;\n    }\n\n    if (this.checkEvents[this.eventType](event)) return;\n    if (this.eventType) this._preventDefault(event);\n\n    document.addEventListener(\n      this.events[this.eventType][1],\n      this.eventHandlers.touchMove\n    );\n\n    document.addEventListener(\n      this.events[this.eventType][2],\n      this.eventHandlers.touchEnd\n    );\n\n    if (this.eventType < 2) {\n      document.addEventListener(\n        this.events[this.eventType][3],\n        this.eventHandlers.touchEnd\n      );\n    }\n\n    this.start = {\n      xPosition: this.eventType ? event.clientX : event.touches[0].clientX,\n      yPosition: this.eventType ? event.clientY : event.touches[0].clientY,\n      time: new Date().getTime()\n    };\n\n    // Ensure we empty out the this.difference object\n    Object.keys(this.difference).forEach(\n      function(key) {\n        delete this.difference[key];\n      }.bind(this)\n    );\n\n    this.options.start(event);\n  },\n\n  _touchMove: function(event) {\n    this.difference = this._getDifference(event);\n\n    // Prevent document from scrolling during swipe gesture\n    document['on' + this.events[this.eventType][1]] = function(event) {\n      this._preventDefault(event);\n    }.bind(this);\n\n    // Get the direction user is dragging\n    if (!this.axis) {\n      if (this.options.dragThreshold < Math.abs(this.difference.xPosition)) {\n        this.axis = 'xPosition';\n      } else if (\n        this.options.dragThreshold < Math.abs(this.difference.yPosition)\n      ) {\n        this.axis = 'yPosition';\n      } else {\n        this.axis = false;\n      }\n    } else if (this.axis === 'xPosition') {\n      this.direction = this.difference.xPosition < 0 ? 'left' : 'right';\n    } else if (this.axis === 'yPosition') {\n      this.direction = this.difference.yPosition < 0 ? 'up' : 'down';\n    }\n\n    this.options.move(event, this.direction, this.difference);\n  },\n\n  _touchEnd: function(event) {\n    document.removeEventListener(\n      this.events[this.eventType][1],\n      this.eventHandlers.touchMove\n    );\n\n    document.removeEventListener(\n      this.events[this.eventType][2],\n      this.eventHandlers.touchEnd\n    );\n\n    if (this.eventType < 2) {\n      document.removeEventListener(\n        this.events[this.eventType][3],\n        this.eventHandlers.touchEnd\n      );\n    }\n\n    // Re-enable document scrolling\n    document['on' + this.events[this.eventType][1]] = function() {\n      return true;\n    };\n\n    this.options.end(event, this.direction, this.difference);\n    this.axis = false;\n  },\n\n  _getDifference: function(event) {\n    return {\n      xPosition:\n        (this.eventType ? event.clientX : event.touches[0].clientX) -\n        this.start.xPosition,\n      yPosition:\n        (this.eventType ? event.clientY : event.touches[0].clientY) -\n        this.start.yPosition,\n      time: new Date().getTime() - this.start.time\n    };\n  },\n\n  _getCheckEvents: function() {\n    return [\n      // Touch events\n      function(event) {\n        // Skip the event if it's a multi-touch or pinch move\n        return (\n          (event.touches && event.touches.length > 1) ||\n          (event.scale && event.scale !== 1)\n        );\n      },\n      // Pointer events\n      function(event) {\n        // Skip it, if:\n        // 1. The event is not primary (other pointers during multi-touch),\n        // 2. Left mouse button is not pressed,\n        // 3. Event is not a touch event\n        return (\n          !event.isPrimary ||\n          (event.buttons && event.buttons !== 1) ||\n          (event.pointerType !== 'touch' && event.pointerType !== 'pen')\n        );\n      },\n      // Mouse events\n      function(event) {\n        // Skip the event if left mouse button is not pressed\n        return event.buttons && event.buttons !== 1;\n      }\n    ];\n  },\n\n  _getEventModel: function() {\n    return window.navigator.pointerEnabled ? 1 : 0;\n  },\n\n  _preventDefault: function(event) {\n    event.preventDefault ? event.preventDefault() : (event.returnValue = false);\n  },\n\n  _preventClick: function(event) {\n    if (Math.abs(this.difference.xPosition) > this.options.dragThreshold) {\n      this._preventDefault(event);\n    }\n  }\n});\n\ntheme.Helpers = (function() {\n  var touchDevice = false;\n\n  var classes = {\n    preventScrolling: 'prevent-scrolling'\n  };\n\n  var scrollPosition = window.pageYOffset;\n\n  function setTouch() {\n    touchDevice = true;\n  }\n\n  function isTouch() {\n    return touchDevice;\n  }\n\n  function enableScrollLock() {\n    scrollPosition = window.pageYOffset;\n    document.body.style.top = '-' + scrollPosition + 'px';\n    document.body.classList.add(classes.preventScrolling);\n  }\n\n  function disableScrollLock() {\n    document.body.classList.remove(classes.preventScrolling);\n    document.body.style.removeProperty('top');\n    window.scrollTo(0, scrollPosition);\n  }\n\n  function debounce(func, wait, immediate) {\n    var timeout;\n\n    return function() {\n      var context = this,\n        args = arguments;\n\n      var later = function() {\n        timeout = null;\n        if (!immediate) func.apply(context, args);\n      };\n\n      var callNow = immediate && !timeout;\n      clearTimeout(timeout);\n      timeout = setTimeout(later, wait);\n      if (callNow) func.apply(context, args);\n    };\n  }\n\n  function getScript(source, beforeEl) {\n    return new Promise(function(resolve, reject) {\n      var script = document.createElement('script');\n      var prior = beforeEl || document.getElementsByTagName('script')[0];\n\n      script.async = true;\n      script.defer = true;\n\n      // eslint-disable-next-line shopify/prefer-early-return\n      function onloadHander(_, isAbort) {\n        if (\n          isAbort ||\n          !script.readyState ||\n          /loaded|complete/.test(script.readyState)\n        ) {\n          script.onload = null;\n          script.onreadystatechange = null;\n          script = undefined;\n\n          if (isAbort) {\n            reject();\n          } else {\n            resolve();\n          }\n        }\n      }\n\n      script.onload = onloadHander;\n      script.onreadystatechange = onloadHander;\n\n      script.src = source;\n      prior.parentNode.insertBefore(script, prior);\n    });\n  }\n\n  /* Based on the prepareTransition by Jonathan Snook */\n  /* Jonathan Snook - MIT License - https://github.com/snookca/prepareTransition */\n  function prepareTransition(element) {\n    element.addEventListener(\n      'transitionend',\n      function(event) {\n        event.currentTarget.classList.remove('is-transitioning');\n      },\n      { once: true }\n    );\n\n    var properties = [\n      'transition-duration',\n      '-moz-transition-duration',\n      '-webkit-transition-duration',\n      '-o-transition-duration'\n    ];\n\n    var duration = 0;\n\n    properties.forEach(function(property) {\n      var computedValue = getComputedStyle(element)[property];\n\n      if (computedValue) {\n        computedValue.replace(/\\D/g, '');\n        duration || (duration = parseFloat(computedValue));\n      }\n    });\n\n    if (duration !== 0) {\n      element.classList.add('is-transitioning');\n      element.offsetWidth;\n    }\n  }\n\n  /*!\n   * Serialize all form data into a SearchParams string\n   * (c) 2020 Chris Ferdinandi, MIT License, https://gomakethings.com\n   * @param  {Node}   form The form to serialize\n   * @return {String}      The serialized form data\n   */\n  function serialize(form) {\n    var arr = [];\n    Array.prototype.slice.call(form.elements).forEach(function(field) {\n      if (\n        !field.name ||\n        field.disabled ||\n        ['file', 'reset', 'submit', 'button'].indexOf(field.type) > -1\n      )\n        return;\n      if (field.type === 'select-multiple') {\n        Array.prototype.slice.call(field.options).forEach(function(option) {\n          if (!option.selected) return;\n          arr.push(\n            encodeURIComponent(field.name) +\n              '=' +\n              encodeURIComponent(option.value)\n          );\n        });\n        return;\n      }\n      if (['checkbox', 'radio'].indexOf(field.type) > -1 && !field.checked)\n        return;\n      arr.push(\n        encodeURIComponent(field.name) + '=' + encodeURIComponent(field.value)\n      );\n    });\n    return arr.join('&');\n  }\n  function cookiesEnabled() {\n    var cookieEnabled = navigator.cookieEnabled;\n\n    if (!cookieEnabled) {\n      document.cookie = 'testcookie';\n      cookieEnabled = document.cookie.indexOf('testcookie') !== -1;\n    }\n\n    return cookieEnabled;\n  }\n\n  function promiseStylesheet(stylesheet) {\n    var stylesheetUrl = stylesheet || theme.stylesheet;\n\n    if (typeof this.stylesheetPromise === 'undefined') {\n      this.stylesheetPromise = new Promise(function(resolve) {\n        var link = document.querySelector('link[href=\"' + stylesheetUrl + '\"]');\n\n        if (link.loaded) resolve();\n\n        link.addEventListener('load', function() {\n          setTimeout(resolve, 0);\n        });\n      });\n    }\n\n    return this.stylesheetPromise;\n  }\n\n  return {\n    setTouch: setTouch,\n    isTouch: isTouch,\n    enableScrollLock: enableScrollLock,\n    disableScrollLock: disableScrollLock,\n    debounce: debounce,\n    getScript: getScript,\n    prepareTransition: prepareTransition,\n    serialize: serialize,\n    cookiesEnabled: cookiesEnabled,\n    promiseStylesheet: promiseStylesheet\n  };\n})();\n\ntheme.LibraryLoader = (function() {\n  var types = {\n    link: 'link',\n    script: 'script'\n  };\n\n  var status = {\n    requested: 'requested',\n    loaded: 'loaded'\n  };\n\n  var cloudCdn = 'https://cdn.shopify.com/shopifycloud/';\n\n  var libraries = {\n    plyrShopifyStyles: {\n      tagId: 'plyr-shopify-styles',\n      src: cloudCdn + 'plyr/v2.0/shopify-plyr.css',\n      type: types.link\n    },\n    modelViewerUiStyles: {\n      tagId: 'shopify-model-viewer-ui-styles',\n      src: cloudCdn + 'model-viewer-ui/assets/v1.0/model-viewer-ui.css',\n      type: types.link\n    }\n  };\n\n  function load(libraryName, callback) {\n    var library = libraries[libraryName];\n\n    if (!library) return;\n    if (library.status === status.requested) return;\n\n    callback = callback || function() {};\n    if (library.status === status.loaded) {\n      callback();\n      return;\n    }\n\n    library.status = status.requested;\n\n    var tag;\n\n    switch (library.type) {\n      case types.script:\n        tag = createScriptTag(library, callback);\n        break;\n      case types.link:\n        tag = createLinkTag(library, callback);\n        break;\n    }\n\n    tag.id = library.tagId;\n    library.element = tag;\n\n    var firstScriptTag = document.getElementsByTagName(library.type)[0];\n    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n  }\n\n  function createScriptTag(library, callback) {\n    var tag = document.createElement('script');\n    tag.src = library.src;\n    tag.addEventListener('load', function() {\n      library.status = status.loaded;\n      callback();\n    });\n    return tag;\n  }\n\n  function createLinkTag(library, callback) {\n    var tag = document.createElement('link');\n    tag.href = library.src;\n    tag.rel = 'stylesheet';\n    tag.type = 'text/css';\n    tag.addEventListener('load', function() {\n      library.status = status.loaded;\n      callback();\n    });\n    return tag;\n  }\n\n  return {\n    load: load\n  };\n})();\n\n\n/* ================ MODULES ================ */\nwindow.theme = window.theme || {};\n\ntheme.Header = (function() {\n  var selectors = {\n    body: 'body',\n    navigation: '#AccessibleNav',\n    siteNavHasDropdown: '[data-has-dropdowns]',\n    siteNavChildLinks: '.site-nav__child-link',\n    siteNavActiveDropdown: '.site-nav--active-dropdown',\n    siteNavHasCenteredDropdown: '.site-nav--has-centered-dropdown',\n    siteNavCenteredDropdown: '.site-nav__dropdown--centered',\n    siteNavLinkMain: '.site-nav__link--main',\n    siteNavChildLink: '.site-nav__link--last',\n    siteNavDropdown: '.site-nav__dropdown',\n    siteHeader: '.site-header',\n    headerCartLink: '#HeaderCart',\n    disclosureLocale: '[data-disclosure-locale]',\n    disclosureCurrency: '[data-disclosure-currency]'\n  };\n\n  var config = {\n    activeClass: 'site-nav--active-dropdown',\n    childLinkClass: 'site-nav__child-link',\n    rightDropdownClass: 'site-nav__dropdown--right',\n    leftDropdownClass: 'site-nav__dropdown--left'\n  };\n      \n    var headerCartLink = document.querySelector(selectors.headerCartLink);\n    if(headerCartLink) {\n      headerCartLink.addEventListener('click', function(e) {\n        e.preventDefault();\n\n        var link_type = this.getAttribute('data-link-type');\n        if( link_type == 'drawer') {\n\t\n          \n          closeSearchMobileDropdown();\n          if(document.querySelector('.js-menu--is-open')) {\n            theme.MobileNav.closeMobileNav();\n          }\n\n        \tvar card_drawer = document.querySelector('#sidebar-cart');\n          if(card_drawer) {\n          \tcard_drawer.classList.add('show');\n            document.querySelector('body').classList.add('show_overlay');\n                card_drawer.addEventListener('transitionend', () => {\n                card_drawer.focus();\n        \n                slate.a11y.trapFocus({\n                container: card_drawer,\n                elementToFocus: card_drawer\n              });\n          }, { once: true });\n          }\n        } else {\n        \twindow.location.href = window.routes.cartUrl;\n        } \n      });\n    }\n\n\n  var cache = {};\n\n  function closeSearchMobileDropdown () {\n    var header_toggle_search_btn = document.querySelector('.header-search-button.active');\n    if(header_toggle_search_btn) {\n      header_toggle_search_btn.classList.remove('active');\n    }\n    var searchDropdown = document.querySelector('.search-form__container.show_form');\n    if(searchDropdown) {\n      searchDropdown.classList.remove('show_form');\n      document.querySelector('body').classList.remove('show_overlay');\n      document.querySelector('body').classList.remove('show_search_overlay');  \n    }\n\n  }\n  function closeCartDrawer () {\n    var Drawer = document.querySelector('.Drawer.show');\n    if(Drawer) {\n      Drawer.classList.remove('show');\n      document.querySelector('body').classList.remove('show_overlay');\n    }\n  }\n\n  \n  function init() {\n      const pursuitAppHeight = () => {\n      const doc = document.documentElement;\n      doc.style.setProperty('--app-height', `${window.innerHeight}px`)\n      }\n      window.addEventListener('resize', pursuitAppHeight)\n      pursuitAppHeight();\n    \n    cacheSelectors();\n    styleDropdowns(document.querySelectorAll(selectors.siteNavHasDropdown));\n    positionFullWidthDropdowns();\n    if(cache.search_categories_menu_parent) {\n    cache.search_categories_menu_parent.addEventListener('click', submenuParentClickHandler);\n    }\n    if(cache.customer_nav_dropdown_parent) {\n    cache.customer_nav_dropdown_parent.addEventListener('click', submenuParentClickHandler);\n    }\n\n    cache.parents.forEach(function(element) {\n      element.addEventListener('click', submenuParentClickHandler);\n    });\n\n    // check when we're leaving a dropdown and close the active dropdown\n    cache.siteNavChildLink.forEach(function(element) {\n      element.addEventListener('focusout', submenuFocusoutHandler);\n    });\n\n    cache.topLevel.forEach(function(element) {\n      element.addEventListener('focus', hideDropdown);\n    });\n\n    cache.subMenuLinks.forEach(function(element) {\n      element.addEventListener('click', stopImmediatePropagation);\n    });\n\n    window.addEventListener('resize', resizeHandler);\n\n\n    var nav_bar = document.querySelector('.site-header__mobile-nav');\n    if(nav_bar) {\n      var nav_bar_links = nav_bar.querySelectorAll('.item-has-mega-menu');\n      var menuItems = document.querySelectorAll('.has-mega-menu');\n      var nav_bar_links_child = nav_bar.querySelectorAll('.item-has-mega-menu > a');\n      var nav_bar_links_dropdown = nav_bar.querySelectorAll('.nav-dropdown .has-mega-menu');\n      var nav_bar_links_dropdown_child = nav_bar.querySelectorAll('.nav-dropdown .has-mega-menu > a');\n      \n      function closeSearchDropdown() {\n\n        var search_bar__interior = document.querySelector('.search-bar__interior');\n        var searchPopoverEl  = document.querySelector('.predictive-search-wrapper--drawer');\n        var searchBarElement = document.querySelector('form.search-bar__form');\n\n        if(search_bar__interior && searchPopoverEl && searchBarElement) {\n          if(search_bar__interior.classList.contains('is-fixed') &&  document.body.classList.contains('no-mobile-scroll')) {\n            search_bar__interior.classList.remove('is-fixed');\n            document.body.classList.remove('no-mobile-scroll');\n            searchPopoverEl.setAttribute('aria-hidden', 'true');\n            searchBarElement.classList.remove('is-expanded');\n            if(document.querySelector('[data-predictive-search-drawer-input]')) {\n              document.querySelector('[data-predictive-search-drawer-input]').blur();\n            }\n          }      \n        }\n      }\n\n\n            nav_bar_links_child.forEach(function(link){\n        link.addEventListener(\n          'touchend',\n          function(e) {\n               var parentItem = e.target.closest(\"li\");\n \n            if(parentItem.classList.contains(\"visible\")){\n               parentItem.classList.remove(\"visible\");\n            }else{\n              e.preventDefault();\n              e.stopPropagation();\n              nav_bar_links.forEach(function (item) {\n                item.classList.remove(\"visible\");\n              });          \n              parentItem.classList.toggle(\"visible\");\n \n              document.addEventListener('touchend', function(event) {\n                  if(event.target.closest(\".navigation_wrapper\")){\n                    return;\n                  }else{\n                  nav_bar_links.forEach(function (item) {\n                    item.classList.remove(\"visible\");\n                  });          \n                  }\n              },{once:true});\n              \n              \n            }            \n          }\n        );\n        });\n        \n        nav_bar_links_dropdown_child.forEach(function(link){\n        link.addEventListener(\n          'touchend',\n          function(e) {\n               var parentItem = e.target.closest(\"li\");\n \n            if(parentItem.classList.contains(\"visible\")){\n               parentItem.classList.remove(\"visible\");\n            }else{\n              e.preventDefault();\n              e.stopPropagation();\n              nav_bar_links_dropdown.forEach(function (item) {\n                item.classList.remove(\"visible\");\n              });          \n              parentItem.classList.toggle(\"visible\");\n \n              document.addEventListener('touchend', function(event) {\n                  if(event.target.closest(\".navigation_wrapper\")){\n                    return;\n                  }else{\n                  nav_bar_links.forEach(function (item) {\n                    item.classList.remove(\"visible\");\n                  });       \n                    nav_bar_links_dropdown.forEach(function (item) {\n                    item.classList.remove(\"visible\");\n                  });       \n                  }\n              },{once:true});\n              \n              \n            }            \n          }\n        );\n        });\n\n\n      if(nav_bar_links.length) {\n        var hi = new SV.HoverIntent(nav_bar_links, {\n          onEnter: function(targetItem) {\n            targetItem.classList.add('visible');\n            closeSearchDropdown();\n            hideDropdown();\n          },\n          onExit: function(targetItem) {\n            targetItem.classList.remove('visible');\n            var targetItemLinks = targetItem.querySelectorAll('.link');\n            if(targetItemLinks.length) {\n              targetItemLinks.forEach(function (link,index) {\n                link.blur();\n              });          \n            }\n          },\n          exitDelay: 300,\n          interval: 100,\n          sensitivity: 7,\n        });\n      }\n      if(menuItems.length) {\n        var hi = new SV.HoverIntent(menuItems, {\n          onEnter: function(targetItem) {\n            targetItem.classList.add('visible');\n            closeSearchDropdown();\n            hideDropdown();\n          },\n          onExit: function(targetItem) {\n            targetItem.classList.remove('visible');\n          },\n          exitDelay: 300,\n          interval: 100,\n          sensitivity: 7,\n        });\n      }\n    }\n\n\n\n\n\n    var search_product_type_Dropdown = document.querySelector('#search-product-type');\n    if(search_product_type_Dropdown) {\n      search_product_type_Dropdown.addEventListener('click', function(e) {\n      \te.preventDefault();\n\n        var el = e.target;\n        \n        var search_product_type_Dropdown = el.closest('#search-product-type');\n        var search_categories_menuParent = el.closest('[data-search-form-container]');\n        var search_labelEl = search_categories_menuParent.querySelector('.search_categories_button__label');\n        var value = el.getAttribute('data-value');\n        search_product_type_Dropdown.setAttribute('data-search-type', value);\n        if(search_labelEl) {\n        search_labelEl.innerHTML = value;\n        }\n        var inputElement = search_categories_menuParent.querySelector('[data-predictive-search-drawer-input]');\n        if(inputElement) {\n          if (inputElement.value !== '') {\n            inputElement.dispatchEvent(new Event('keyup', { bubbles: true }));\n          }\n        }\n\n      });\n    }\n\n    var header_toggle_search_btn = document.querySelector('.header-search-button');\n    if(header_toggle_search_btn) {      \n      header_toggle_search_btn.addEventListener('click', function(e) {\n        e.preventDefault();\n\n        if(document.querySelector('.js-menu--is-open')) {\n          theme.MobileNav.closeMobileNav();\n        }\n        closeCartDrawer ();\n\n        var btn_parent = this.closest('.search-bar__interior');\n        var searchDropdown = btn_parent.querySelector('.search-form__container');\n        if(searchDropdown) {\n          if(this.classList.contains('active')) {\n            searchDropdown.classList.remove('show_form');\n            this.classList.remove('active');\n            document.querySelector('body').classList.remove('show_overlay');\n            document.querySelector('body').classList.remove('show_search_overlay');\n\n          } else {\n            searchDropdown.classList.add('show_form');\n            this.classList.add('active');\n            document.querySelector('body').classList.add('show_overlay');\n            document.querySelector('body').classList.add('show_search_overlay');\n          }\n        }\n      });\n\n      document.addEventListener('click', function(e){\n        var el = e.target;\n        if(document.querySelector('.show_search_overlay')) {\n\n        }\n        if(el.classList.contains('search-bar__interior') || el.closest('.search-bar__interior')) {\n          return false;\n        } else {\n          theme.Header.closeSearchMobileDropdown();\n        }\n      });\n    }\n\n\n\n    var search_submit_btn = document.querySelector(selectors.siteHeader).querySelector('.search-button__submit');\n    if(search_submit_btn) {\n      search_submit_btn.addEventListener('click', function(e) {\n        e.preventDefault();\n     \n      var form = this.closest('.search-form__container');\n      var formValue = form.querySelector('.search-form__input').value;\n          var searchFilterEl = form.querySelector('#search-product-type');\n      var formProductType = '*';\n      if(searchFilterEl) {\n        formProductType = searchFilterEl.getAttribute('data-search-type');\n      } \n        \n     var productQuery = '' +  formValue + '*' + (formProductType !== '' ? '&' + 'product_type:' + formProductType : '');\n   \n       \n         var    formAction = window.routes.searchUrl + '?q=' + productQuery + '&type=product';\n        window.location.href = formAction;\n      });\n    }\n    \n    var enable_live_search = document.querySelector(selectors.siteHeader).getAttribute('data-enable_live_search');\n    if(enable_live_search == 'true') {\n      new theme.SearchBar(document.querySelector('.search-bar__interior'));\n    }\n    \n\n    var enable_overlap_header = document.querySelector(selectors.siteHeader).getAttribute('data-enable_overlap_header');\n    if(enable_overlap_header == 'false') {\n      if(document.querySelector('.shopify-section-header')) {\n        document.querySelector('.shopify-section-header').classList.add('showAlternateHeader');\n        document.querySelector('.shopify-section-header').classList.add('no-overlap');\n        document.querySelector('body').classList.add('no-overlap-header');\n       \n      }\n    }\n\n\n        var enable_sticky_header = document.querySelector(selectors.siteHeader).getAttribute('data-enable_sticky_header');\n    if(enable_sticky_header == 'true')  {\n\n      const headerEl =  document.querySelector('.shopify-section-header');\n      if(headerEl) {\n        window.addEventListener('scroll', function() {\n         var window_scrollY = window.scrollY;          \n          if(window_scrollY > 10) {\n            headerEl.classList.add('is_sticky');\n          } else {\n              headerEl.classList.remove('is_sticky');\n          }\n        });\n      }\n    }\n\n\n    if (cache.localeDisclosure.length) {\n      cache.localeDisclosure.forEach(function (item,index) {\n         new theme.Disclosure(item);\n      });\n    }\n    if (cache.currencyDisclosure.length) {\n      cache.currencyDisclosure.forEach(function (item,index) {\n        new theme.Disclosure(item);\n      });\n    }\n\n\n  }\n\n  function stopImmediatePropagation(event) {\n    event.stopImmediatePropagation();\n  }\n\n  function cacheSelectors() {\n    var navigation = document.querySelector(selectors.navigation);\n    var search_categories_menu  = document.querySelector('.search_categories_menu');\n    var customer_nav_dropdown  = document.querySelector('.customer_nav_dropdown__wrapper');\n\n\n\n\n    cache = {\n      nav: navigation,\n      topLevel: document.querySelectorAll(selectors.siteNavLinkMain),\n      parents: navigation.querySelectorAll(selectors.siteNavHasDropdown),\n      search_categories_menu_parent:search_categories_menu,\n      customer_nav_dropdown_parent: customer_nav_dropdown,\n      subMenuLinks: document.querySelectorAll(selectors.siteNavChildLinks),\n      activeDropdown: document.querySelector(selectors.siteNavActiveDropdown),\n      siteHeader: document.querySelector(selectors.siteHeader),\n      siteNavChildLink: document.querySelectorAll(selectors.siteNavChildLink)\n    };\n\n\n    \n    cache.localeDisclosure = cache.siteHeader.querySelectorAll(selectors.disclosureLocale);\n    cache.currencyDisclosure = cache.siteHeader.querySelectorAll(selectors.disclosureCurrency);\n\n    \n    \n  };\n\n\n  function showDropdown(element) {\n    element.classList.add(config.activeClass);\n\n    if (cache.activeDropdown) hideDropdown();\n\n    cache.activeDropdown = element;\n\n    element\n      .querySelector(selectors.siteNavLinkMain)\n      .setAttribute('aria-expanded', 'true');\n\n    setTimeout(function() {\n      window.addEventListener('keyup', keyUpHandler);\n      document.body.addEventListener('click', hideDropdown);\n    }, 250);\n  }\n\n  function hideDropdown() {\n    if (!cache.activeDropdown) return;\n\n    cache.activeDropdown\n      .querySelector(selectors.siteNavLinkMain)\n      .setAttribute('aria-expanded', 'false');\n    cache.activeDropdown.classList.remove(config.activeClass);\n\n    cache.activeDropdown = document.querySelector(\n      selectors.siteNavActiveDropdown\n    );\n\n    window.removeEventListener('keyup', keyUpHandler);\n    document.body.removeEventListener('click', hideDropdown);\n  }\n\n  function styleDropdowns(dropdownListItems) {\n         var mainMenuDropdowns = document.querySelectorAll('.nav-dropdown');\n      if(mainMenuDropdowns.length) {\n        mainMenuDropdowns.forEach(function (item,index) {\n          item.classList.remove('right_side');\n          \n         if (overlapDropdown(item)) {\n     item.classList.add('right_side');\n\n      } else {         \n       item.classList.remove('right_side');\n      }\n        });\n      }\n\n    \n    dropdownListItems.forEach(function(item) {\n      var dropdownLi = item.querySelector(selectors.siteNavDropdown);\n      if (dropdownLi) {\n\n      if (isRightOfLogo(item)) {\n        dropdownLi.classList.remove(config.leftDropdownClass);\n        dropdownLi.classList.add(config.rightDropdownClass);\n      } else {\n        dropdownLi.classList.remove(config.rightDropdownClass);\n        dropdownLi.classList.add(config.leftDropdownClass);\n      }\n    }\n    });\n  }\n    function overlapDropdown(item) {\n      var rect = item.getBoundingClientRect();\n    var rightOffset = rect.right;\n    var headerWidth = Math.floor(cache.siteHeader.offsetWidth);\n    return rightOffset > headerWidth;\n    }\n  function isRightOfLogo(item) {\n    var rect = item.getBoundingClientRect();\n    var win = item.ownerDocument.defaultView;\n    var leftOffset = rect.left + win.pageXOffset;\n\n    var headerWidth = Math.floor(cache.siteHeader.offsetWidth) / 2;\n    return leftOffset > headerWidth;\n  }\n\n  function positionFullWidthDropdowns() {\n    document\n      .querySelectorAll(selectors.siteNavHasCenteredDropdown)\n      .forEach(function(el) {\n        var fullWidthDropdown = el.querySelector(\n          selectors.siteNavCenteredDropdown\n        );\n\n        var fullWidthDropdownOffset = el.offsetTop + 41;\n        fullWidthDropdown.style.top = fullWidthDropdownOffset + 'px';\n      });\n  \n  }\n\n  function keyUpHandler(event) {\n    if (event.keyCode === 27) hideDropdown();\n  }\n\n  function resizeHandler() {\n    adjustStyleAndPosition();\n  }\n\n  function submenuParentClickHandler(event) {\n    var element = event.currentTarget;\n    element.classList.contains(config.activeClass)\n      ? hideDropdown()\n      : showDropdown(element);\n  }\n\n  function submenuFocusoutHandler() {\n    setTimeout(function() {\n      if (\n        document.activeElement.classList.contains(config.childLinkClass) ||\n        !cache.activeDropdown\n      ) {\n        return;\n      }\n\n      hideDropdown();\n    });\n  }\n\n  var adjustStyleAndPosition = theme.Helpers.debounce(function() {\n    styleDropdowns(document.querySelectorAll(selectors.siteNavHasDropdown));\n    positionFullWidthDropdowns();\n  }, 50);\n\n  function unload() {\n    cache.topLevel.forEach(function(element) {\n      element.removeEventListener('focus', hideDropdown);\n    });\n\n    cache.subMenuLinks.forEach(function(element) {\n      element.removeEventListener('click', stopImmediatePropagation);\n    });\n    if(cache.search_categories_menu_parent) {\n      cache.search_categories_menu_parent.removeEventListener('click', submenuParentClickHandler);\n    }\n    if(cache.customer_nav_dropdown_parent) {\n      cache.customer_nav_dropdown_parent.removeEventListener('click', submenuParentClickHandler);\n    }\n\n    cache.parents.forEach(function(element) {\n      element.removeEventListener('click', submenuParentClickHandler);\n    });\n\n    cache.siteNavChildLink.forEach(function(element) {\n      element.removeEventListener('focusout', submenuFocusoutHandler);\n    });\n\n    window.removeEventListener('resize', resizeHandler);\n    window.removeEventListener('keyup', keyUpHandler);\n    document.body.removeEventListener('click', hideDropdown);\n  }\n\n  return {\n    init: init,\n    unload: unload,\n    closeCartDrawer: closeCartDrawer,\n    closeSearchMobileDropdown: closeSearchMobileDropdown\n    \n  };\n})();\n\nwindow.theme = window.theme || {};\n\ntheme.MobileNav = (function() {\n  var classes = {\n    mobileNavOpenIcon: 'mobile-nav--open',\n    mobileNavCloseIcon: 'mobile-nav--close',\n    navLinkWrapper: 'mobile-nav__item',\n    navLink: 'mobile-nav__link',\n    subNavLink: 'mobile-nav__sublist-link',\n    return: 'mobile-nav__return-btn',\n    subNavActive: 'is-active',\n    subNavClosing: 'is-closing',\n    navOpen: 'js-menu--is-open',\n    subNavShowing: 'sub-nav--is-open',\n    thirdNavShowing: 'third-nav--is-open',\n    fourthNavShowing: 'fourth-nav--is-open',\n    subNavToggleBtn: 'js-toggle-submenu'\n  };\n\n  var cache = {};\n  var isTransitioning;\n  var activeSubNav;\n  var activeTrigger;\n  var menuLevel = 1;\n  var mediumUpQuery = '(min-width: ' + theme.breakpoints.medium + 'px)';\n  var mql = window.matchMedia(mediumUpQuery);\n\n  function init() {\n    cacheSelectors();\n\n    if (cache.mobileNavToggle) {\n      cache.mobileNavToggle.addEventListener('click', toggleMobileNav);\n    }\n\n    cache.subNavToggleBtns.forEach(function(element) {\n      element.addEventListener('click', toggleSubNav);\n    });\n    cache.mobileMenuOverlay.addEventListener('click', closeMobileNav);\n\n    mql.addListener(initBreakpoints);\n  }\n\n  function initBreakpoints() {\n    if (\n      mql.matches &&\n      cache.mobileNavContainer.classList.contains(classes.navOpen)\n    ) {\n      closeMobileNav();\n    }\n  }\n\n   function toggleMobileNav() {\n    var mobileNavIsOpen = cache.mobileNavToggle.classList.contains(\n      classes.mobileNavCloseIcon\n    );\n      document.scrollingElement.scrollTop = 0;\n     setTimeout(function(){\n      window.scrollTo({ top: 0, behavior: 'instant' });\n      document.scrollingElement.scrollTop = 0;\n    },100);\n    setTimeout(function(){\n    if (mobileNavIsOpen) {\n      closeMobileNav();\n    } else {\n      openMobileNav();\n    }\n    },200)\n    }\n\n  function cacheSelectors() {\n    cache = {\n      pageContainer: document.querySelector('#PageContainer'),\n      siteHeader: document.querySelector('.site-header'),\n      mobileNavToggle: document.querySelector('.js-mobile-nav-toggle'),\n      mobileNavContainer: document.querySelector('.mobile-nav-wrapper'),\n      mobileNav: document.querySelector('#MobileNav'),\n      sectionHeader: document.querySelector('.shopify-section-header'),\n      subNavToggleBtns: document.querySelectorAll('.' + classes.subNavToggleBtn),\n      bodyElem: document.querySelector('body'),\n      mobileMenuOverlay: document.querySelector('.mobile_menu_overlay')\n    }\n  }\n\n  function openMobileNav() {\n    \n    theme.Header.closeSearchMobileDropdown();\n    theme.Header.closeCartDrawer();\n    \n    var translateHeaderHeight = cache.siteHeader.offsetHeight;\n\n    theme.Helpers.prepareTransition(cache.mobileNavContainer);\n    cache.mobileNavContainer.classList.add(classes.navOpen);\n    cache.bodyElem.classList.add(classes.navOpen);\n\n    var mobileNavHeight = cache.mobileNav.offsetHeight;\n    var mobileNavDropdownsArr = cache.mobileNav.querySelectorAll('.mobile-nav__dropdown');\n    \n    if(mobileNavDropdownsArr.length) {\n      mobileNavDropdownsArr.forEach(function (item,index) {\n        var itemHeight = item.offsetHeight;\n        if(itemHeight > mobileNavHeight) {\n          mobileNavHeight = itemHeight;\n        }\n      });\n    }\n\n    cache.mobileNav.style.minHeight = mobileNavHeight + 'px';\n    \n    cache.mobileNavContainer.style.top =\n      translateHeaderHeight + 'px';\n\n\n    slate.a11y.trapFocus({\n      container: cache.sectionHeader,\n      elementToFocus: cache.mobileNavToggle\n    });\n\n    cache.mobileNavToggle.classList.add(classes.mobileNavCloseIcon);\n    cache.mobileNavToggle.classList.remove(classes.mobileNavOpenIcon);\n    cache.mobileNavToggle.setAttribute('aria-expanded', true);\n\n    window.addEventListener('keyup', keyUpHandler);\n  }\n\n  function keyUpHandler(event) {\n    if (event.which === 27) {\n      closeMobileNav();\n    }\n  }\n\n  function closeMobileNav() {\n    \n    \n    theme.Helpers.prepareTransition(cache.mobileNavContainer);\n    cache.mobileNavContainer.classList.remove(classes.navOpen);\n    cache.mobileNavContainer.classList.remove(classes.subNavShowing);\n    cache.mobileNavContainer.classList.remove(classes.thirdNavShowing);\n    cache.mobileNavContainer.classList.remove(classes.fourthNavShowing);\n    cache.bodyElem.classList.remove(classes.navOpen);\n\n    slate.a11y.trapFocus({\n      container: document.querySelector('html'),\n      elementToFocus: document.body\n    });\n\n    cache.mobileNavContainer.addEventListener(\n      'transitionend',\n      mobileNavRemoveTrapFocus,\n      { once: true }\n    );\n\n    cache.mobileNavToggle.classList.add(classes.mobileNavOpenIcon);\n    cache.mobileNavToggle.classList.remove(classes.mobileNavCloseIcon);\n\n   \n    cache.mobileNavToggle.setAttribute('aria-expanded', false);\n    cache.mobileNavToggle.focus();\n\n    window.removeEventListener('keyup', keyUpHandler);\n    window.scrollTo(0, 0);\n  }\n\n  function mobileNavRemoveTrapFocus() {\n    slate.a11y.removeTrapFocus({\n      container: cache.mobileNav\n    });\n  }\n\n  function toggleSubNav(event) {\n    \n    if (isTransitioning) return;\n\t\n  \n    var toggleBtn = event.currentTarget;\n    var isReturn = toggleBtn.classList.contains(classes.return);\n\n    isTransitioning = true;\n\n    if (isReturn) {\n      var subNavToggleBtn = document.querySelectorAll(\n        '.' + classes.subNavToggleBtn + \"[data-level='\" + (menuLevel - 1) + \"']\"\n      );\n     \n\n      subNavToggleBtn.forEach(function(element) {\n        element.classList.remove(classes.subNavActive);\n      });\n\n      if (activeTrigger) {\n        activeTrigger.classList.remove(classes.subNavActive);\n      }\n    } else {\n      toggleBtn.classList.add(classes.subNavActive);\n    }\n\n    activeTrigger = toggleBtn;\n\n   \n    \n    goToSubnav(toggleBtn.getAttribute('data-target'));\n  }\n\n  function goToSubnav(target) {\n\n    var targetMenu = target\n      ? document.querySelector(\n          '.mobile-nav__dropdown[data-parent=\"' + target + '\"]'\n        )\n      : cache.mobileNav;\n\n   \n    \n    menuLevel = targetMenu.dataset.level ? Number(targetMenu.dataset.level) : 1;\n\n    if (activeSubNav) {\n      theme.Helpers.prepareTransition(activeSubNav);\n      activeSubNav.classList.add(classes.subNavClosing);\n    }\n\n    activeSubNav = targetMenu;\n\n    var translateMenuHeight = targetMenu.offsetHeight;\n    \n    var openNavClass =\n      menuLevel > 2 && menuLevel != 4 ? classes.thirdNavShowing : classes.subNavShowing;\n\n    if(menuLevel == 4) {\n    \topenNavClass = classes.fourthNavShowing;\n    }\n    cache.mobileNavContainer.classList.remove(classes.thirdNavShowing);\n    cache.mobileNavContainer.classList.remove(classes.fourthNavShowing);\n    cache.mobileNavContainer.classList.add(openNavClass);\n\n    if (!target) {\n      cache.mobileNavContainer.classList.remove(\n        classes.thirdNavShowing,\n        classes.fourthNavShowing,\n        classes.subNavShowing\n      );\n    }\n\n    /* if going back to first subnav, focus is on whole header */\n    var container = menuLevel === 1 ? cache.sectionHeader : targetMenu;\n\n    cache.mobileNavContainer.addEventListener(\n      'transitionend',\n      trapMobileNavFocus,\n      { once: true }\n    );\n\n    function trapMobileNavFocus() {\n      // slate.a11y.trapFocus({\n      //   container: container\n      // });\n\n      cache.mobileNavContainer.removeEventListener(\n        'transitionend',\n        trapMobileNavFocus\n      );\n\n      isTransitioning = false;\n    }\n\n\n    activeSubNav.classList.remove(classes.subNavClosing);\n  }\n\n  function unload() {\n    mql.removeListener(initBreakpoints);\n  }\n\n  return {\n    init: init,\n    unload: unload,\n    closeMobileNav: closeMobileNav\n  };\n})();\n\nwindow.Modals = (function() {\n  function Modal(id, name, options) {\n    var defaults = {\n      close: '.js-modal-close',\n      open: '.js-modal-open-' + name,\n      openClass: 'modal--is-active',\n      closeModalOnClick: false\n    };\n\n    this.modal = document.getElementById(id);\n\n    if (!this.modal) return false;\n\n    this.nodes = {\n      parents: [document.querySelector('html'), document.body]\n    };\n\n    this.config = Object.assign(defaults, options);\n\n    this.modalIsOpen = false;\n\n    this.focusOnOpen = this.config.focusOnOpen\n      ? document.getElementById(this.config.focusOnOpen)\n      : this.modal;\n\n    this.openElement = document.querySelector(this.config.open);\n    this.init();\n  }\n\n  Modal.prototype.init = function() {\n    this.openElement.addEventListener('click', this.open.bind(this));\n\n    this.modal\n      .querySelector(this.config.close)\n      .addEventListener('click', this.closeModal.bind(this));\n  };\n\n  Modal.prototype.open = function(evt) {\n    \n    var self = this;\n    // Keep track if modal was opened from a click, or called by another function\n    var externalCall = false;\n\n    if (this.modalIsOpen) return;\n\n    // Prevent following href if link is clicked\n    if (evt) {\n      evt.preventDefault();\n    } else {\n      externalCall = true;\n    }\n\n    // Without this, the modal opens, the click event bubbles up\n    // which closes the modal.\n    if (evt && evt.stopPropagation) {\n      evt.stopPropagation();\n    }\n\n    if (this.modalIsOpen && !externalCall) {\n      this.closeModal();\n    }\n\n    this.modal.classList.add(this.config.openClass);\n\n    this.nodes.parents.forEach(function(node) {\n      node.classList.add(self.config.openClass);\n      node.classList.add('show_overlay');\n    });\n\n    this.modalIsOpen = true;\n\n    slate.a11y.trapFocus({\n      container: this.modal,\n      elementToFocus: this.focusOnOpen\n    });\n\n    this.bindEvents();\n  };\n\n  Modal.prototype.closeModal = function() {\n    if (!this.modalIsOpen) return;\n\n    document.activeElement.blur();\n\n    this.modal.classList.remove(this.config.openClass);\n\n    var self = this;\n\n    this.nodes.parents.forEach(function(node) {\n      node.classList.remove(self.config.openClass);\n      node.classList.remove('show_overlay');\n    });\n\n    this.modalIsOpen = false;\n\n    slate.a11y.removeTrapFocus({\n      container: this.modal\n    });\n\n    this.openElement.focus();\n\n    this.unbindEvents();\n  };\n\n  Modal.prototype.bindEvents = function() {\n    this.keyupHandler = this.keyupHandler.bind(this);\n    this.clickHandler = this.clickHandler.bind(this);\n    document.body.addEventListener('keyup', this.keyupHandler);\n    document.body.addEventListener('click', this.clickHandler);\n  };\n\n  Modal.prototype.unbindEvents = function() {\n    document.body.removeEventListener('keyup', this.keyupHandler);\n    document.body.removeEventListener('click', this.clickHandler);\n  };\n\n  Modal.prototype.keyupHandler = function(event) {\n    if (event.keyCode === 27) {\n      this.closeModal();\n    }\n  };\n\n  Modal.prototype.clickHandler = function(event) {\n    if (this.config.closeModalOnClick && !this.modal.contains(event.target)) {\n      this.closeModal();\n    }\n  };\n\n  return Modal;\n})();\n\n\n\n\n// theme.Slideshow moved to assets/theme-slideshow.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n\n\n// Deprecated 2026-08-28: no section type registers this module (grep found\n// zero calls to its own public init()) - the 'video' data-section-type it\n// looks like it should pair with actually maps to theme.HomepageVideo (see\n// theme.Sections.registerLazy('video', ...) below), a separate module. Not\n// theme.ProductVideo/theme.ProductModel either - those ARE live, called\n// directly from theme.Product's constructor. See docs/THEME_JS_CODE_SPLIT_PLAN.md\n// Phase C and DEPRECATED.md. Safe to remove after 2026-09-28 (one prod release\n// cycle) if nothing new starts calling theme.Video.init() before then.\ntheme.Video = (function() {\n  var autoplayCheckComplete = false;\n  var playOnClickChecked = false;\n  var playOnClick = false;\n  var youtubeLoaded = false;\n  var videos = {};\n  var videoPlayers = [];\n  var videoOptions = {\n    ratio: 16 / 9,\n    scrollAnimationDuration: 400,\n    playerVars: {\n      // eslint-disable-next-line camelcase\n      iv_load_policy: 3,\n      modestbranding: 1,\n      autoplay: 1,\n      playsinline: 1,\n      controls: 0,\n      wmode: 'opaque',\n      branding: 0,\n      autohide: 0,\n      rel: 0\n    },\n    events: {\n      onReady: onPlayerReady,\n      onStateChange: onPlayerChange\n    }\n  };\n  var classes = {\n    playing: 'video-is-playing',\n    paused: 'video-is-paused',\n    loading: 'video-is-loading',\n    loaded: 'video-is-loaded',\n    backgroundVideoWrapper: 'video-background-wrapper',\n    backgroundVideo: 'video--background',\n    supportsAutoplay: 'autoplay',\n  };\n\n  var selectors = {\n    section: '.video-section',\n    videoWrapper: '.video-section-wrapper',\n   \n    fallbackText: '.icon__fallback-text'\n  };\n\n  /**\n   * Public functions\n   */\n  function init(video) {\n    if (!video) return;\n\n    \n    videos[video.id] = {\n      id: video.id,\n      videoId: video.dataset.id,\n      type: video.dataset.type,\n      status: 'background',\n      video: video,\n      videoWrapper: video.closest(selectors.videoWrapper),\n      section: video.closest(selectors.section),\n      controls: 0\n    };\n\n    if (!youtubeLoaded) {\n      // This code loads the IFrame Player API code asynchronously.\n      var tag = document.createElement('script');\n      tag.src = 'https://www.youtube.com/iframe_api';\n      var firstScriptTag = document.getElementsByTagName('script')[0];\n      firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n    }\n\n    playOnClickCheck();\n    \n  }\n\n  function customPlayVideo(playerId) {\n    // Make sure we have carried out the playOnClick check first\n    if (!playOnClickChecked && !playOnClick) {\n      return;\n    }\n\n    if (playerId && typeof videoPlayers[playerId].playVideo === 'function') {\n      privatePlayVideo(playerId);\n    }\n  }\n\n  function pauseVideo(playerId) {\n    alert('pauseVideo');\n    if (\n      videoPlayers[playerId] &&\n      typeof videoPlayers[playerId].pauseVideo === 'function'\n    ) {\n      videoPlayers[playerId].pauseVideo();\n    }\n  }\n\n  function loadVideos() {\n    for (var key in videos) {\n      if (videos.hasOwnProperty(key)) {\n        createPlayer(key);\n      }\n    }\n\n    initEvents();\n    youtubeLoaded = true;\n  }\n\n  function editorLoadVideo(key) {\n    if (!youtubeLoaded) {\n      return;\n    }\n    createPlayer(key);\n\n    initEvents();\n  }\n\n  /**\n   * Private functions\n   */\n\n  function privatePlayVideo(id, clicked) {\n    var videoData = videos[id];\n    var player = videoPlayers[id];\n    var videoWrapper = videoData.videoWrapper;\n\n    if (playOnClick) {\n      // playOnClick means we are probably on mobile (no autoplay).\n      // setAsPlaying will show the iframe, requiring another click\n      // to play the video.\n      setAsPlaying(videoData);\n    } else if (clicked || autoplayCheckComplete) {\n      // Play if autoplay is available or clicked to play\n      videoWrapper.classList.remove(classes.loading);\n      setAsPlaying(videoData);\n      player.playVideo();\n      return;\n    } else {\n      player.playVideo();\n    }\n  }\n\n  function setAutoplaySupport(supported) {\n    var supportClass =      classes.supportsAutoplay ;\n    document.documentElement.classList.remove(\n      classes.supportsAutoplay    );\n    document.documentElement.classList.add(supportClass);\n\n    if (!supported) {\n      playOnClick = true;\n    }\n\n    autoplayCheckComplete = true;\n  }\n\n  function playOnClickCheck() {\n    if (playOnClickChecked) {\n      return;\n    }\n\n    if (playOnClick) {\n      // No need to also do the autoplay check\n      setAutoplaySupport(false);\n    }\n\n    playOnClickChecked = true;\n  }\n\n  // The API will call this function when each video player is ready\n  function onPlayerReady(evt) {\n    evt.target.setPlaybackQuality('hd1080');\n    var videoData = getVideoOptions(evt);\n    var videoTitle = evt.target.getVideoData().title;\n    playOnClickCheck();\n\n    // Prevent tabbing through YouTube player controls until visible\n    document.getElementById(videoData.id).setAttribute('tabindex', '-1');\n\n    sizeBackgroundVideos();\n//     setButtonLabels(videoData.videoWrapper, videoTitle);\n\n    // Customize based on options from the video ID\n    if (videoData.type === 'background') {\n      evt.target.mute();\n      privatePlayVideo(videoData.id);\n    }\n\n    videoData.videoWrapper.classList.add(classes.loaded);\n  }\n\n  function onPlayerChange(evt) {\n    var videoData = getVideoOptions(evt);\n    if (\n      videoData.status === 'background' &&\n         !autoplayCheckComplete &&\n      (evt.data === YT.PlayerState.PLAYING ||\n        evt.data === YT.PlayerState.BUFFERING)\n    ) {\n      setAutoplaySupport(true);\n      autoplayCheckComplete = true;\n      videoData.videoWrapper.classList.remove(classes.loading);\n    }\n    \n    switch (evt.data) {\n      case YT.PlayerState.ENDED:\n        setAsFinished(videoData);\n        break;\n      case YT.PlayerState.PAUSED:\n        // Seeking on a YouTube video also fires a PAUSED state change,\n        // checking the state after a delay prevents us pausing the video when\n        // the user is seeking instead of pausing\n        setTimeout(function() {\n          if (evt.target.getPlayerState() === YT.PlayerState.PAUSED) {\n            setAsPaused(videoData);\n          }\n        }, 200);\n        break;\n    }\n  }\n\n  function setAsFinished(videoData) {\n  \n        videoPlayers[videoData.id].seekTo(0);\n     \n  }\n\n  function setAsPlaying(videoData) {\n    var videoWrapper = videoData.videoWrapper;\n\n    videoWrapper.classList.remove(classes.loading);\n\n\n\n    // Do not change element visibility if it is a background video\n    if (videoData.status === 'background') {\n      return;\n    }\n\n    document.getElementById(videoData.id).setAttribute('tabindex', '0');\n\n\n    // Update focus to the close button so we stay within the video wrapper,\n    // allowing time for the scroll animation\n    setTimeout(function() {\n    }, videoOptions.scrollAnimationDuration);\n  }\n\n  function setAsPaused(videoData) {\n    var videoWrapper = videoData.videoWrapper;\n\n    videoWrapper.classList.remove(classes.playing);\n  }\n\n  function getVideoOptions(evt) {\n    var id = evt.target.getIframe().id;\n    return videos[id];\n  }\n\n  function toggleExpandVideo(playerId, expand) {\n    \n    var video = videos[playerId];\n    var elementTop =\n      video.videoWrapper.getBoundingClientRect().top + window.pageYOffset;\n    var offset = 0;\n    var newHeight = 0;\n \n\n\n    if (expand) {\n\n        newHeight = video.videoWrapper.offsetWidth / videoOptions.ratio;\n      \n      offset = (window.innerHeight - newHeight) / 2;\n\n      video.videoWrapper.style.height =\n        video.videoWrapper.getBoundingClientRect().height + 'px';\n      video.videoWrapper.style.height = newHeight + 'px';\n\n      // Animate doesn't work in mobile editor, so we don't use it\n      if ( Shopify.designMode) {\n        var scrollBehavior = document.documentElement.style.scrollBehavior;\n        document.documentElement.style.scrollBehavior = 'smooth';\n        window.scrollTo({ top: elementTop - offset });\n        document.documentElement.style.scrollBehavior = scrollBehavior;\n      }\n    } else {\n        newHeight = video.videoWrapper.dataset.desktopHeight;\n\n      video.videoWrapper.style.height = newHeight + 'px';\n\n      // Set focus on play button, but don't scroll page\n      var x = window.scrollX;\n      var y = window.scrollY;\n      window.scrollTo(x, y);\n    }\n  }\n\n  function startVideoOnClick(playerId) {\n    var video = videos[playerId];\n\n    // add loading class to wrapper\n    video.videoWrapper.classList.add(classes.loading);\n\n    // Explicity set the video wrapper height (needed for height transition)\n    video.videoWrapper.style.height = video.videoWrapper.offsetHeight + 'px';\n\n    video.status = 'open';\n\n\n        unsetBackgroundVideo(playerId, video);\n        videoPlayers[playerId].unMute();\n        privatePlayVideo(playerId, true);\n   \n\n    toggleExpandVideo(playerId, true);\n\n    // esc to close video player\n    document.addEventListener('keydown', handleVideoPlayerKeydown);\n  }\n\n  var handleVideoPlayerKeydown = function(evt) {\n    var playerId = document.activeElement.dataset.controls;\n    if (evt.keyCode !== slate.utils.keyboardKeys.ESCAPE || !playerId) {\n      return;\n    }\n\n    toggleExpandVideo(playerId, false);\n  };\n\n  function sizeBackgroundVideos() {\n    var backgroundVideos = document.querySelectorAll(\n      '.' + classes.backgroundVideo\n    );\n    backgroundVideos.forEach(function(el) {\n      sizeBackgroundVideo(el);\n    });\n  }\n\n  function sizeBackgroundVideo(videoPlayer) {\n    if (!youtubeLoaded) {\n      return;\n    }    \n\n \n      \n      \n      var videoWrapper = videoPlayer.closest(selectors.videoWrapper);\n      \n      \n      var videoWidth = videoWrapper.clientWidth;\n      var playerWidth = videoPlayer.clientWidth;\n      var desktopHeight = videoWrapper.clientHeight;\n     \n      // when screen aspect ratio differs from video, video must center and underlay one dimension\n      if (videoWidth / videoOptions.ratio < desktopHeight) {\n        playerWidth = Math.ceil(desktopHeight * videoOptions.ratio); // get new player width\n        var styles =\n          'width: ' +\n          playerWidth +\n          'px; height: ' +\n          desktopHeight +\n          'px; left: ' +\n          (videoWidth - playerWidth) / 2 +\n          'px; top: 0;';\n        videoPlayer.style.cssText = styles;\n      } else {\n        // new video width < window width (gap to right)\n        desktopHeight = Math.ceil(videoWidth / videoOptions.ratio); // get new player height\n        var styles2 =\n          'width: ' +\n          videoWidth +\n          'px; height: ' +\n          desktopHeight +\n          'px; top: ' +\n          (desktopHeight - desktopHeight) / 2 +\n          'px; left: 0;'; // player height is greater, offset top; reset left\n        videoPlayer.style.cssText = styles2;\n      }\n\n      theme.Helpers.prepareTransition(videoPlayer);\n      videoWrapper.classList.add(classes.loaded);\n    \n  }\n\n  function unsetBackgroundVideo(playerId) {\n    // Switch the background video to a chrome-only player once played\n    var player = document.getElementById(playerId);\n    player.classList.remove(classes.backgroundVideo);\n\n    setTimeout(function() {\n      document.getElementById(playerId).style.cssText = null;\n    }, 600);\n\n    videos[playerId].videoWrapper.classList.remove(\n      classes.backgroundVideoWrapper\n    );\n    videos[playerId].videoWrapper.classList.add(classes.playing);\n\n    videos[playerId].status = 'open';\n  }\n\n  function setBackgroundVideo(playerId) {\n    var player = document.getElementById(playerId);\n    player.classList.add(classes.backgroundVideo);\n\n    videos[playerId].videoWrapper.classList.add(classes.backgroundVideoWrapper);\n\n    videos[playerId].status = 'background';\n    sizeBackgroundVideo(player);\n  }\n\n\n  var handleWindowResize = theme.Helpers.debounce(function() {\n    if (!youtubeLoaded) return;\n    var key;\n    var fullscreen = window.innerHeight === screen.height;\n    sizeBackgroundVideos();\n\n      setAutoplaySupport(true);\n      for (key in videos) {\n  \n        videoPlayers[key].playVideo();\n        setAsPlaying(videos[key]);\n      }\n  }, 200);\n\n  var handleWindowScroll = theme.Helpers.debounce(function() {\n    if (!youtubeLoaded) return;\n\n    for (var key in videos) {\n      if (videos.hasOwnProperty(key)) {\n        var videoWrapper = videos[key].videoWrapper;\n        var condition =\n          videoWrapper.getBoundingClientRect().top +\n            window.pageYOffset +\n            videoWrapper.offsetHeight * 0.75 <\n            window.pageYOffset ||\n          videoWrapper.getBoundingClientRect().top +\n            window.pageYOffset +\n            videoWrapper.offsetHeight * 0.25 >\n            window.pageYOffset + window.innerHeight;\n\n        // Close the video if more than 75% of it is scrolled out of view\n        if (videoWrapper.classList.contains(classes.playing)) {\n          if (!condition) return;\n         \n          toggleExpandVideo(key, false);\n        }\n      }\n    }\n  }, 50);\n\n  function initEvents() {\n\n    // Listen to resize to keep a background-size:cover-like layout\n    window.addEventListener('resize', handleWindowResize);\n\n    window.addEventListener('scroll', handleWindowScroll);\n  }\n\n  function createPlayer(key) {\n    var args = Object.assign(videoOptions, videos[key]);\n\n    args.playerVars.controls = args.controls;\n    videoPlayers[key] = new YT.Player(key, args);\n  }\n\n  function removeEvents() {\n    document.removeEventListener('keydown', handleVideoPlayerKeydown);\n    window.removeEventListener('resize', handleWindowResize);\n    window.removeEventListener('scroll', handleWindowScroll);\n  }\n\n\n  return {\n    init: init,\n    editorLoadVideo: editorLoadVideo,\n    loadVideos: loadVideos,\n    playVideo: customPlayVideo,\n    pauseVideo: pauseVideo,\n    removeEvents: removeEvents\n  };\n})();\n\n// Youtube API callback\n// eslint-disable-next-line no-unused-vars\nfunction onYouTubeIframeAPIReady() {\n  theme.Video.loadVideos();\n}\n\n\n\ntheme.FormStatus = (function() {\n  var selectors = {\n    statusMessage: '[data-form-status]'\n  };\n\n  function init() {\n    var statusMessages = document.querySelectorAll(selectors.statusMessage);\n\n    statusMessages.forEach(function(statusMessage) {\n      statusMessage.setAttribute('tabindex', -1);\n      statusMessage.focus();\n\n      statusMessage.addEventListener(\n        'blur',\n        function(evt) {\n          evt.target.removeAttribute('tabindex');\n        },\n        { once: true }\n      );\n    });\n  }\n\n  return {\n    init: init\n  };\n})();\n\ntheme.Disclosure = (function() {\n  var selectors = {\n    disclosureForm: '[data-disclosure-form]',\n    disclosureList: '[data-disclosure-list]',\n    disclosureToggle: '[data-disclosure-toggle]',\n    disclosureInput: '[data-disclosure-input]',\n    disclosureOptions: '[data-disclosure-option]'\n  };\n\n  var classes = {\n    listVisible: 'disclosure-list--visible'\n  };\n  \n  function Disclosure(disclosure) {\n        \n    \n    this.container = disclosure;\n    this._cacheSelectors();\n    this._setupListeners();\n  }\n\n  Disclosure.prototype = Object.assign({}, Disclosure.prototype, {\n    _cacheSelectors: function() {\n      this.cache = {\n        disclosureForm: this.container.closest(selectors.disclosureForm),\n        disclosureList: this.container.querySelector(selectors.disclosureList),\n        disclosureToggle: this.container.querySelector(\n          selectors.disclosureToggle\n        ),\n        disclosureInput: this.container.querySelector(\n          selectors.disclosureInput\n        ),\n        disclosureOptions: this.container.querySelectorAll(\n          selectors.disclosureOptions\n        )\n      };\n    },\n\n    _setupListeners: function() {\n      this.eventHandlers = this._setupEventHandlers();\n\n      this.cache.disclosureToggle.addEventListener(\n        'click',\n        this.eventHandlers.toggleList\n      );\n\n      this.cache.disclosureOptions.forEach(function(disclosureOption) {\n        disclosureOption.addEventListener(\n          'click',\n          this.eventHandlers.connectOptions\n        );\n      }, this);\n\n      this.container.addEventListener(\n        'keyup',\n        this.eventHandlers.onDisclosureKeyUp\n      );\n\n      this.cache.disclosureList.addEventListener(\n        'focusout',\n        this.eventHandlers.onDisclosureListFocusOut\n      );\n\n      this.cache.disclosureToggle.addEventListener(\n        'focusout',\n        this.eventHandlers.onDisclosureToggleFocusOut\n      );\n\n      document.body.addEventListener('click', this.eventHandlers.onBodyClick);\n    },\n\n    _setupEventHandlers: function() {\n      return {\n        connectOptions: this._connectOptions.bind(this),\n        toggleList: this._toggleList.bind(this),\n        onBodyClick: this._onBodyClick.bind(this),\n        onDisclosureKeyUp: this._onDisclosureKeyUp.bind(this),\n        onDisclosureListFocusOut: this._onDisclosureListFocusOut.bind(this),\n        onDisclosureToggleFocusOut: this._onDisclosureToggleFocusOut.bind(this)\n      };\n    },\n\n    _connectOptions: function(event) {\n      event.preventDefault();\n\n      this._submitForm(event.currentTarget.dataset.value);\n    },\n\n    _onDisclosureToggleFocusOut: function(event) {\n      var disclosureLostFocus =\n        this.container.contains(event.relatedTarget) === false;\n\n      if (disclosureLostFocus) {\n        this._hideList();\n      }\n    },\n\n    _onDisclosureListFocusOut: function(event) {\n      var childInFocus = event.currentTarget.contains(event.relatedTarget);\n\n      var isVisible = this.cache.disclosureList.classList.contains(\n        classes.listVisible\n      );\n\n      if (isVisible && !childInFocus) {\n        this._hideList();\n      }\n    },\n\n    _onDisclosureKeyUp: function(event) {\n      if (event.which !== slate.utils.keyboardKeys.ESCAPE) return;\n      this._hideList();\n      this.cache.disclosureToggle.focus();\n    },\n\n    _onBodyClick: function(event) {\n      var isOption = this.container.contains(event.target);\n      var isVisible = this.cache.disclosureList.classList.contains(\n        classes.listVisible\n      );\n\n      if (isVisible && !isOption) {\n        this._hideList();\n      }\n    },\n\n    _submitForm: function(value) {\n      this.cache.disclosureInput.value = value;\n      this.cache.disclosureForm.submit();\n    },\n\n    _hideList: function() {\n      this.cache.disclosureList.classList.remove(classes.listVisible);\n      this.cache.disclosureToggle.setAttribute('aria-expanded', false);\n    },\n\n    _toggleList: function() {\n      var ariaExpanded =\n        this.cache.disclosureToggle.getAttribute('aria-expanded') === 'true';\n      this.cache.disclosureList.classList.toggle(classes.listVisible);\n      this.cache.disclosureToggle.setAttribute('aria-expanded', !ariaExpanded);\n    },\n\n    destroy: function() {\n      this.cache.disclosureToggle.removeEventListener(\n        'click',\n        this.eventHandlers.toggleList\n      );\n\n      this.cache.disclosureOptions.forEach(function(disclosureOption) {\n        disclosureOption.removeEventListener(\n          'click',\n          this.eventHandlers.connectOptions\n        );\n      }, this);\n\n      this.container.removeEventListener(\n        'keyup',\n        this.eventHandlers.onDisclosureKeyUp\n      );\n\n      this.cache.disclosureList.removeEventListener(\n        'focusout',\n        this.eventHandlers.onDisclosureListFocusOut\n      );\n\n      this.cache.disclosureToggle.removeEventListener(\n        'focusout',\n        this.eventHandlers.onDisclosureToggleFocusOut\n      );\n\n      document.body.removeEventListener(\n        'click',\n        this.eventHandlers.onBodyClick\n      );\n    }\n  });\n\n  return Disclosure;\n})();\n\n\n/* ================ TEMPLATES ================ */\nwindow.theme = theme || {};\n\ntheme.customerTemplates = (function() {\n  var selectors = {\n    RecoverHeading: '#RecoverHeading',\n    RecoverEmail: '#RecoverEmail',\n    LoginHeading: '#LoginHeading'\n  };\n\n  function initEventListeners() {\n    this.recoverHeading = document.querySelector(selectors.RecoverHeading);\n    this.recoverEmail = document.querySelector(selectors.RecoverEmail);\n    this.loginHeading = document.querySelector(selectors.LoginHeading);\n    var recoverPassword = document.getElementById('RecoverPassword');\n    var hideRecoverPasswordLink = document.getElementById(\n      'HideRecoverPasswordLink'\n    );\n\n    // Show reset password form\n    if (recoverPassword) {\n      recoverPassword.addEventListener(\n        'click',\n        function(evt) {\n          evt.preventDefault();\n          showRecoverPasswordForm();\n          this.recoverHeading.setAttribute('tabindex', '-1');\n          this.recoverHeading.focus();\n        }.bind(this)\n      );\n    }\n\n    // Hide reset password form\n    if (hideRecoverPasswordLink) {\n      hideRecoverPasswordLink.addEventListener(\n        'click',\n        function(evt) {\n          evt.preventDefault();\n          hideRecoverPasswordForm();\n          this.loginHeading.setAttribute('tabindex', '-1');\n          this.loginHeading.focus();\n        }.bind(this)\n      );\n    }\n\n    if (this.recoverHeading) {\n      this.recoverHeading.addEventListener('blur', function(evt) {\n        evt.target.removeAttribute('tabindex');\n      });\n    }\n\n    if (this.loginHeading) {\n      this.loginHeading.addEventListener('blur', function(evt) {\n        evt.target.removeAttribute('tabindex');\n      });\n    }\n  }\n\n  /**\n   *\n   *  Show/Hide recover password form\n   *\n   */\n\n  function showRecoverPasswordForm() {\n    document.getElementById('RecoverPasswordForm').classList.remove('hide');\n    document.getElementById('CustomerLoginForm').classList.add('hide');\n\n    if (this.recoverEmail.getAttribute('aria-invalid') === 'true') {\n      this.recoverEmail.focus();\n    }\n  }\n\n  function hideRecoverPasswordForm() {\n    document.getElementById('RecoverPasswordForm').classList.add('hide');\n    document.getElementById('CustomerLoginForm').classList.remove('hide');\n  }\n\n  /**\n   *\n   *  Show reset password success message\n   *\n   */\n  function resetPasswordSuccess() {\n    var formState = document.querySelector('.reset-password-success');\n\n    // check if reset password form was successfully submited.\n    if (!formState) {\n      return;\n    }\n\n    // show success message\n    var resetSuccess = document.getElementById('ResetSuccess');\n    resetSuccess.classList.remove('hide');\n    resetSuccess.focus();\n  }\n\n  /**\n   *\n   *  Show/hide customer address forms\n   *\n   */\n  function customerAddressForm() {\n    var newAddressForm = document.getElementById('AddressNewForm');\n    var newAddressFormButton = document.getElementById('AddressNewButton');\n\n    if (!newAddressForm) {\n      return;\n    }\n\n    // Initialize observers on address selectors, defined in shopify_common.js\n    if (Shopify) {\n      // eslint-disable-next-line no-new\n      new Shopify.CountryProvinceSelector(\n        'AddressCountryNew',\n        'AddressProvinceNew',\n        {\n          hideElement: 'AddressProvinceContainerNew'\n        }\n      );\n    }\n\n    // Initialize each edit form's country/province selector\n    document\n      .querySelectorAll('.address-country-option')\n      .forEach(function(option) {\n        var formId = option.dataset.formId;\n        var countrySelector = 'AddressCountry_' + formId;\n        var provinceSelector = 'AddressProvince_' + formId;\n        var containerSelector = 'AddressProvinceContainer_' + formId;\n\n        // eslint-disable-next-line no-new\n        new Shopify.CountryProvinceSelector(countrySelector, provinceSelector, {\n          hideElement: containerSelector\n        });\n      });\n\n    // Toggle new/edit address forms\n    document.querySelectorAll('.address-new-toggle').forEach(function(button) {\n      button.addEventListener('click', function() {\n        var isExpanded =\n          newAddressFormButton.getAttribute('aria-expanded') === 'true';\n\n        newAddressForm.classList.toggle('hide');\n        newAddressFormButton.setAttribute('aria-expanded', !isExpanded);\n        \n        // If showing the form, scroll to it smoothly\n        if (!isExpanded) {\n          setTimeout(function() {\n            newAddressForm.scrollIntoView({ behavior: 'smooth', block: 'start' });\n            // Focus on first input field\n            var firstInput = newAddressForm.querySelector('input[type=\"text\"], input[type=\"tel\"], select');\n            if (firstInput) {\n              setTimeout(function() {\n                firstInput.focus();\n              }, 300);\n            }\n          }, 100);\n        } else {\n          newAddressFormButton.focus();\n        }\n      });\n    });\n\n    document.querySelectorAll('.address-edit-toggle').forEach(function(button) {\n      button.addEventListener('click', function(evt) {\n        var formId = evt.target.dataset.formId;\n        var editButton = document.getElementById('EditFormButton_' + formId);\n        var editAddress = document.getElementById('EditAddress_' + formId);\n        var isExpanded = editButton.getAttribute('aria-expanded') === 'true';\n\n        editAddress.classList.toggle('hide');\n        editButton.setAttribute('aria-expanded', !isExpanded);\n        editButton.focus();\n      });\n    });\n\n    document.querySelectorAll('.address-delete').forEach(function(button) {\n      button.addEventListener('click', function(evt) {\n        var target = evt.target.dataset.target;\n        var confirmMessage = evt.target.dataset.confirmMessage;\n\n        // eslint-disable-next-line no-alert\n        if (\n          confirm(\n            confirmMessage || 'Are you sure you wish to delete this address?'\n          )\n        ) {\n          Shopify.postLink(target, {\n            parameters: { _method: 'delete' }\n          });\n        }\n      });\n    });\n  }\n\n  /**\n   *\n   *  Check URL for reset password hash\n   *\n   */\n  function checkUrlHash() {\n    var hash = window.location.hash;\n\n    // Allow deep linking to recover password form\n    if (hash === '#recover') {\n      showRecoverPasswordForm.bind(this)();\n    }\n  }\n\n  return {\n    init: function() {\n      initEventListeners();\n      checkUrlHash();\n      resetPasswordSuccess();\n      customerAddressForm();\n    }\n  };\n})();\n\n\n/*================ SECTIONS ================*/\nwindow.theme = window.theme || {};\n\ntheme.Cart = (function() {\n  var selectors = {\n    cartErrorMessage: '[data-cart-error-message]',\n    cartErrorMessageWrapper: '[data-cart-error-message-wrapper]'\n  };\n\n  var classes = {\n    cartNoCookies: 'cart--no-cookies',\n    hide: 'hide',\n    inputError: 'input--error'\n  };\n\n  var _this;\n\n  function Cart(container) {\n    \n     _this = this;\n\n    this.container = container;\n    this.options = JSON.parse(this.container.getAttribute('data-section-settings'));\n    this.itemCount = this.options['itemCount'];\n    this.totalPrice = this.options['totalPrice'];    \n    this.delegateElement = new Delegate(this.container);\n    this._onNoteChange = this._onNoteChange.bind(this);\n\n    if (!theme.Helpers.cookiesEnabled()) {\n      this.container.classList.add(classes.cartNoCookies);\n    }\n\n    this.container.addEventListener('change', this._onNoteChange);    \n    this.delegateElement.on('click', '[data-action=\"update-item-quantity\"], [data-action=\"remove-item\"]', this._updateItemQuantity.bind(this));\n    this.delegateElement.on('change', '.QuantitySelector__CurrentQuantity', this._updateItemQuantity.bind(this));\n    this.delegateElement.on('click', '[data-action=\"close-drawer\"][data-drawer-id=\"' + this.container.id + '\"]', this._closeModal);\n    document.addEventListener('click', function(e){\n      var el = e.target;\n      if(!el.classList.contains('Cart-Drawer') && !el.closest('.Cart-Drawer') && !el.closest('#HeaderCart')) {\n        var Drawer = document.querySelector('#sidebar-cart');\n\n        if(Drawer) {\n          if(Drawer.classList.contains('show')) {\n            Drawer.classList.remove('show');\n            document.querySelector('body').classList.remove('show_overlay');\n          }\n        }\n      }\n    }); \n\n    if (this.options['hasShippingEstimator']) {\n\n      _this.countrySelect = this.container.querySelector('[name=\"country\"]');\n      _this.provinceSelect = this.container.querySelector('[name=\"province\"]');\n      var defaultCountry = _this.countrySelect.getAttribute('data-default');\n      if (defaultCountry) {\n        for (var i = 0; i !== _this.countrySelect.options.length; ++i) {\n          if (_this.countrySelect.options[i].text === defaultCountry) {\n            _this.countrySelect.selectedIndex = i;\n            break;\n          }\n        }\n      } else {\n        _this.countrySelect.selectedIndex = 0;\n      }\n     \n\n      this._onCountryChangedListener = this._onCountryChanged.bind(this);\n      this.countrySelect.addEventListener('change', this._onCountryChangedListener);\n\n      var event = new Event('change', { bubbles: true });\n      _this.countrySelect.dispatchEvent(event);\n\n      // Then the province\n      var defaultProvince = _this.provinceSelect.getAttribute('data-default');\n\n      if (defaultProvince) {\n        _this.provinceSelect.value = defaultProvince;\n      }\n\n\n      this.delegateElement.on('click', '.ShippingEstimator__Submit', this._fetchRates.bind(this));\n\n    }\n\n    var CartSpecialInstructionsSubmit  = this.container.querySelector('.CartSpecialInstructionsSubmit');\n    if(CartSpecialInstructionsSubmit) {\n      CartSpecialInstructionsSubmit.addEventListener('click', function(e) {\n        e.preventDefault();\n\n        var noteField = this.closest('form').querySelector('#CartSpecialInstructions');\n\n        if(noteField) {\n          var note = noteField.value;\n          var headers = new Headers({ 'Content-Type': 'application/json' });\n\n          var request = {\n            method: 'POST',\n            headers: headers,\n            body: JSON.stringify({ note: note })\n          };\n          fetch('/cart/update.js', request).then(function (response) {\n            if(response.status == 200 ) {\n              CartSpecialInstructionsSubmit.innerHTML = theme.strings.added_note;\n              setTimeout(function () {\n                CartSpecialInstructionsSubmit.innerHTML = theme.strings.add_note;\n              },2000);\n\n            }\n          }).catch(function() {\n              _this._showCartError(noteField);\n            }.bind(this)\n          );\n\n        }\n      });\n    }\n  }\n\n  Cart.prototype = Object.assign({}, Cart.prototype, {\n\n    _onCountryChanged: function() {\n      var selectedOption = _this.countrySelect.options[_this.countrySelect.selectedIndex],\n          provinces = JSON.parse(selectedOption.getAttribute('data-provinces') || '[]');\n\n      // First remove all options\n      _this.provinceSelect.innerHTML = '';\n      if (provinces.length === 0) {\n        _this.provinceSelect.parentNode.style.display = 'none';\n        return;\n      }\n\n      // We need to build the provinces array\n      provinces.forEach(function (data) {\n        _this.provinceSelect.options.add(new Option(data[1], data[0]));\n      });\n  \n      _this.provinceSelect.parentNode.style.display = 'block';\n    },\n    _fetchRates: function() {\n      var country = _this.container.querySelector('[name=\"country\"]').value,\n          province = _this.container.querySelector('[name=\"province\"]').value,\n          city =  _this.container.querySelector('[name=\"city\"]').value,\n          zip = _this.container.querySelector('[name=\"zip\"]').value;\n      \t\n      \n\n      fetch(window.routes.cartUrl + '/shipping_rates.json?shipping_address[zip]=' + zip + '&shipping_address[country]=' + country + '&shipping_address[province]=' + province, {\n        credentials: 'same-origin',\n        method: 'GET'\n      }).then(function (response) {\n        response.json().then(function (result) {\n          \n          var resultsContainer = _this.container.querySelector('.ShippingEstimator__Results'),\n              ShippingEstimatorParentRow = _this.container.querySelector('.ShippingEstimator'),\n              errorContainer = _this.container.querySelector('.ShippingEstimator__Error');\n\n          if (response.ok) {\n            var shippingRates = result['shipping_rates'];\n\n            if (shippingRates.length === 0) {\n              resultsContainer.innerHTML = '<p>' + theme.strings.shippingEstimatorNoResults + '</p>';\n            } else {\n              var html = '<ul>';\n\n\n              shippingRates.forEach(function (item) {  \n                html += '<li class=\"h6\"><span class=\"title \">' + item['name'] + ':</span><span class=\"shipping_price\">' + theme.Currency.formatMoney(item['price'], theme.moneyFormat) + '</span></li>';\n              });\n\n              html += '</ul>';\n              \n              var address_city = city;\n              if(address_city.length == 0) {\n              \taddress_city = province;\n              }\n              html += '<p class=\"Shipping_to_address h6\">' + theme.strings.shippingTo + ' ' + address_city + '</p>';\n\n              resultsContainer.firstElementChild.innerHTML = html;\n            }\n\n\n            errorContainer.style.display = 'none';\n            resultsContainer.style.display = 'block';\n            ShippingEstimatorParentRow.classList.remove('hide');\n\n          } else {\n            var errorHtml = '';\n\n            Object.keys(result).forEach(function (key) {\n              errorHtml += '<li class=\"Alert__ErrorItem\">' + key + ' ' + result[key] + '</li>';\n            });\n\n            errorContainer.innerHTML = '<ul class=\"Alert__ErrorList\">' + errorHtml + '</ul>';\n\n            resultsContainer.style.display = 'none';\n            errorContainer.style.display = 'block';\n            ShippingEstimatorParentRow.classList.remove('hide');\n          }\n        });\n      });\n\n\n    },\n    _sidebarDrawerOpen: function () {\n      var Drawer = document.querySelector('#sidebar-cart');\n\n      if(Drawer) {\n        if(!Drawer.classList.contains('show')) {\n          Drawer.classList.add('show');\n          document.querySelector('body').classList.add('show_overlay');\n          Drawer.addEventListener('transitionend', () => {\n            Drawer.focus();\n        \n                slate.a11y.trapFocus({\n                container: Drawer,\n                elementToFocus: Drawer\n              });\n          }, { once: true });\n          \n        }\n      }\n    },\n    _onProductAdded: function (drawerHtml) {\n\n      var quick_view_modal = document.querySelector('#modal-quick-view[aria-hidden=\"false\"]');\n      if(quick_view_modal) {\n      \tquick_view_modal.querySelector('.close-quick-view').dispatchEvent(new Event('click', { bubbles: true }));\n      }\n\n      if(_this.options['type'] == 'drawer') {\n        if (drawerHtml) {\n          // Caller already has the rendered drawer HTML (from a /cart/add.js call\n          // that requested sections:\"cart-drawer\") - use it directly instead of\n          // making the extra GET /cart?view=drawer round-trip _rerenderCart() does,\n          // which otherwise delays the drawer opening by a full request.\n          _this._replaceContent(drawerHtml);\n          _this._sidebarDrawerOpen();\n        } else {\n          _this._rerenderCart().then(function () {\n            _this._sidebarDrawerOpen();\n          });\n        }\n      } else {\n        window.location.href = window.routes.cartUrl;\n      }\n    },\n    _closeModal: function() { \n\n      var Drawer = this.closest('.Drawer');\n      if(Drawer) {\n        Drawer.classList.remove('show');\n        document.querySelector('body').classList.remove('show_overlay');\n      }\n    },\n    _updateItemQuantity: function(event,target) {\n\n        var quantity = null;\n       var inventory_qty =  null;\n      var inventory_management = '';\n        var inventory_policy = '';\n\n      var lineId = target.getAttribute('data-line-id');\n\n      // A request for this line is already in flight - ignore the extra click\n      // instead of firing overlapping requests whose responses could land out\n      // of order and make the row flicker between values.\n      if (lineId && _this._pendingLineUpdates && _this._pendingLineUpdates[lineId]) {\n        event.preventDefault();\n        return;\n      }\n\n      if (target.tagName === 'INPUT') {\n        quantity = parseInt(target.value);\n        } else {\n          quantity = parseInt(target.getAttribute('data-quantity'));\n        }\n\n      inventory_management = target.getAttribute('data-inventory_management');\n      inventory_qty = parseInt(target.getAttribute('data-inventory_qty'));\n       inventory_policy = target.getAttribute('data-inventory_policy');\n\n      if(quantity > inventory_qty && inventory_management != ''  && inventory_policy != 'continue' ) {\n        var parentEl = target.closest('.CartItem');\n        if(parentEl) {\n          var qtyErrorEls = parentEl.querySelectorAll('.QuantitySelector__error-message');\n          if(qtyErrorEls.length) {\n            qtyErrorEls.forEach(function(qtyErrorEl,index) {\n              qtyErrorEl.classList.remove('hide');\n            });\n\n          }\n        }\n      } else {\n\n        // Match _rerenderCart()/_replaceContent()'s own drawer-vs-full-page split:\n        // the drawer renders via sections/cart-drawer.liquid, the standalone /cart\n        // page via sections/cart-template.liquid (templates/cart.ajax.liquid) - they\n        // have different markup, so the requested section must match the context.\n        var isDrawerContext = _this.options['drawer'] && window.theme.pageType !== 'cart';\n        var sectionKey = isDrawerContext ? 'cart-drawer' : 'cart-template';\n\n        if (!_this._pendingLineUpdates) {\n          _this._pendingLineUpdates = {};\n        }\n        var rowEl = null;\n        if (lineId) {\n          _this._pendingLineUpdates[lineId] = true;\n          rowEl = _this.container.querySelector('.CartItemWrapper[data-line-id=\"' + lineId + '\"]');\n          if (rowEl) rowEl.classList.add('is-updating');\n        }\n\n        fetch(window.routes.cartChangeUrl + '.js', {\n          body: JSON.stringify({ id: lineId, quantity: quantity, sections: sectionKey, sections_url: window.location.pathname }),\n          credentials: 'same-origin',\n          method: 'POST',\n          headers: {\n            'Content-Type': 'application/json',\n            'X-Requested-With': 'XMLHttpRequest' // This is needed as currently there is a bug in Shopify that assumes this header\n          }\n        }).then(function (cart) {\n          return cart.json();\n        }).then(function (content) {\n          _this.itemCount = content['item_count'];\n          _this.totalPrice = content['totalPrice'];\n\n          if (lineId && _this._pendingLineUpdates) {\n            delete _this._pendingLineUpdates[lineId];\n          }\n\n          // /cart/change.js above already requested this section's HTML - reuse it\n          // instead of _rerenderCart()'s extra GET /cart?view=drawer|ajax round-trip.\n          var sectionHtml = content.sections && content.sections[sectionKey];\n          if (sectionHtml && isDrawerContext) {\n            // Patch only the row that changed instead of redrawing the whole drawer.\n            _this._replaceCartItemRow(lineId, sectionHtml);\n          } else if (sectionHtml) {\n            _this._replaceContent(sectionHtml);\n          } else {\n            _this._rerenderCart();\n          }\n        }).catch(function () {\n          if (lineId && _this._pendingLineUpdates) {\n            delete _this._pendingLineUpdates[lineId];\n          }\n          if (rowEl) rowEl.classList.remove('is-updating');\n        });\n      }\n\n        event.preventDefault();\n    },\n    _rerenderCart: function () {\n    \n      _this.options = JSON.parse(_this.container.getAttribute('data-section-settings'));\n\n      \n      return fetch(window.routes.cartUrl + '?view=' + (this.options['drawer'] && window.theme.pageType !== 'cart' ? 'drawer' : 'ajax') + '&timestamp=' + Date.now(), {\n        credentials: 'same-origin',\n        method: 'GET'\n      }).then(function (content) {\n\n          content.text().then(function (html) {\n            \n            _this._replaceContent(html);\n\n            if (_this.options['hasShippingEstimator']) {\n\n              _this.countrySelect = _this.container.querySelector('[name=\"country\"]');\n              _this.provinceSelect = _this.container.querySelector('[name=\"province\"]');\n              var defaultCountry = _this.countrySelect.getAttribute('data-default');\n              if (defaultCountry) {\n                for (var i = 0; i !== _this.countrySelect.options.length; ++i) {\n                  if (_this.countrySelect.options[i].text === defaultCountry) {\n                    _this.countrySelect.selectedIndex = i;\n                    break;\n                  }\n                }\n              } else {\n                _this.countrySelect.selectedIndex = 0;\n              }\n\n\n              _this._onCountryChangedListener = _this._onCountryChanged.bind(this);\n              _this.countrySelect.addEventListener('change', _this._onCountryChangedListener);\n\n              var event = new Event('change', { bubbles: true });\n              _this.countrySelect.dispatchEvent(event);\n\n              // Then the province\n              var defaultProvince = _this.provinceSelect.getAttribute('data-default');\n\n              if (defaultProvince) {\n                _this.provinceSelect.value = defaultProvince;\n              }\n\n\n\n            }\n\n            var CartSpecialInstructionsSubmit  = _this.container.querySelector('.CartSpecialInstructionsSubmit');\n            if(CartSpecialInstructionsSubmit) {\n              CartSpecialInstructionsSubmit.addEventListener('click', function(e) {\n                e.preventDefault();\n\n                var noteField = this.closest('form').querySelector('#CartSpecialInstructions');\n\n                if(noteField) {\n                  var note = noteField.value;\n                  var headers = new Headers({ 'Content-Type': 'application/json' });\n\n                  var request = {\n                    method: 'POST',\n                    headers: headers,\n                    body: JSON.stringify({ note: note })\n                  };\n                  fetch('/cart/update.js', request).then(function (response) {\n                    if(response.status == 200 ) {\n                      CartSpecialInstructionsSubmit.innerHTML = theme.strings.added_note;\n                      setTimeout(function () {\n                        CartSpecialInstructionsSubmit.innerHTML = theme.strings.add_note;\n                      },2000);\n\n                    }\n                  }).catch(function() {\n                    _this._showCartError(noteField);\n                  }.bind(this)\n                          );\n\n                }\n              });\n            }\n\n          });\n         \n      });\n    },\n    _replaceContent: function(html) {\n      var tempElement = document.createElement('div');\n      tempElement.innerHTML = html;\n      \n      var cartNodeParent = this.container.querySelector('.Cart').parentNode;\n\n      if (this.options['drawer'] && window.theme.pageType !== 'cart') {\n        var currentScrollPosition = this.container.querySelector('.Drawer__Main').scrollTop;\n        cartNodeParent.replaceChild(tempElement.querySelector('.Cart'), this.container.querySelector('.Cart'));\n        this.container.querySelector('.Drawer__Main').scrollTop = currentScrollPosition;\n      } else {\n        // For dedicated page we replace the whole section if there is no more product\n        if (this.itemCount === 0) {\n         this.container.innerHTML = tempElement.querySelector('.shopify-section > div').innerHTML;\n        } else {\n          cartNodeParent.replaceChild(tempElement.querySelector('.Cart'), this.container.querySelector('.Cart'));\n        }\n      } \n\n      // We can also update the dot and the quantity\n      var cartResult = JSON.parse(tempElement.querySelector('[data-section-type=\"cart-template\"]').getAttribute('data-section-settings'));\n      var header__CartCount = document.querySelector('.header_cart_count');\n      var header__cart__count = document.querySelector('.cart-button__count');\n      var header_total_priceEl = document.querySelector('.cart_total_price');\n      this.itemCount = cartResult['itemCount'];\n      this.totalPrice = cartResult['totalPrice'];\n      \n      if(header__CartCount) {\n        if(this.itemCount==0){\n  header__cart__count.classList.add('shide');\n}else{\n        header__CartCount.innerHTML = this.itemCount;    \n        header__cart__count.classList.remove('shide');\n}\n      \n      }\n      if(header_total_priceEl) {\n        header_total_priceEl.innerHTML = theme.Currency.formatMoney(this.totalPrice, theme.moneyFormat);\n      }\n\n\n    },\n    // Drawer-only fast path for a single line item's quantity changing: patches\n    // just that row (or collapses it out if removed) plus the subtotal/discount/\n    // header bits, instead of _replaceContent()'s full .Cart replaceChild - so\n    // items that didn't change never get torn down and repainted.\n    _replaceCartItemRow: function(lineId, html) {\n      var tempElement = document.createElement('div');\n      tempElement.innerHTML = html;\n\n      var cartResult = JSON.parse(tempElement.querySelector('[data-section-type=\"cart-template\"]').getAttribute('data-section-settings'));\n      this.itemCount = cartResult['itemCount'];\n      this.totalPrice = cartResult['totalPrice'];\n\n      // Cart is now empty - that's a structurally different panel (.Cart__Empty),\n      // not reachable by patching a row. Fall back to the full replace.\n      if (this.itemCount === 0) {\n        this._replaceContent(html);\n        return;\n      }\n\n      var oldRow = lineId && this.container.querySelector('.CartItemWrapper[data-line-id=\"' + lineId + '\"]');\n      var newRow = lineId && tempElement.querySelector('.CartItemWrapper[data-line-id=\"' + lineId + '\"]');\n\n      if (oldRow && newRow) {\n        oldRow.parentNode.replaceChild(newRow, oldRow);\n      } else if (oldRow && !newRow) {\n        // Quantity was set to 0 (removed) - collapse the row out instead of\n        // having it vanish along with a redraw of every other row.\n        var startHeight = oldRow.offsetHeight;\n        oldRow.style.height = startHeight + 'px';\n        oldRow.offsetHeight; // force layout so the height above applies before animating to 0\n        oldRow.classList.add('is-removing');\n        requestAnimationFrame(function () {\n          oldRow.style.height = '0px';\n        });\n        oldRow.addEventListener('transitionend', function () {\n          if (oldRow.parentNode) oldRow.parentNode.removeChild(oldRow);\n        }, { once: true });\n      }\n\n      // Sync the summary bits that live outside any single row.\n      var syncSelectors = ['[data-cart-subtotal]', '[data-cart-discount-wrapper]'];\n      for (var i = 0; i < syncSelectors.length; i++) {\n        var newEl = tempElement.querySelector(syncSelectors[i]);\n        var oldEl = this.container.querySelector(syncSelectors[i]);\n        if (newEl && oldEl) {\n          oldEl.className = newEl.className;\n          oldEl.innerHTML = newEl.innerHTML;\n        }\n      }\n\n      var header__CartCount = document.querySelector('.header_cart_count');\n      var header__cart__count = document.querySelector('.cart-button__count');\n      var header_total_priceEl = document.querySelector('.cart_total_price');\n\n      if (header__CartCount) {\n        header__CartCount.innerHTML = this.itemCount;\n        header__cart__count.classList.remove('shide');\n      }\n      if (header_total_priceEl) {\n        header_total_priceEl.innerHTML = theme.Currency.formatMoney(this.totalPrice, theme.moneyFormat);\n      }\n    },\n    _onNoteChange: function(evt) {\n      if (!evt.target.hasAttribute('data-cart-notes')) return;\n\n      \n      var note = evt.target.value;\n      this._hideCartError();\n\n      var headers = new Headers({ 'Content-Type': 'application/json' });\n\n      var request = {\n        method: 'POST',\n        headers: headers,\n        body: JSON.stringify({ note: note })\n      };\n\n      fetch('/cart/update.js', request).catch(\n        function() {\n          this._showCartError(evt.target);\n        }.bind(this)\n      );\n    },\n    _showCartError: function(elementToFocus) {\n      document.querySelector(selectors.cartErrorMessage).textContent =\n        theme.strings.cartError;\n\n      document\n        .querySelector(selectors.cartErrorMessageWrapper)\n        .classList.remove(classes.hide);\n\n      if (!elementToFocus) return;\n      elementToFocus.focus();\n    },\n    _hideCartError: function() {\n      document\n        .querySelector(selectors.cartErrorMessageWrapper)\n        .classList.add(classes.hide);\n      document.querySelector(selectors.cartErrorMessage).textContent = '';\n    }\n  });\n\n  return Cart;\n})();\n\n\nwindow.theme = window.theme || {};\n\ntheme.HeaderSection = (function() {\n  function Header() {\n    theme.Header.init();\n    theme.MobileNav.init();\n  }\n\n  Header.prototype = Object.assign({}, Header.prototype, {\n    onUnload: function() {\n      theme.Header.unload();\n      theme.MobileNav.unload();\n    }\n  });\n\n  return Header;\n})();\n\ntheme.AnnouncementBar = (function() {\n  function AnnouncementBar(container) {\n    var _this = this;\n      \n    this.container = container;\n    this.AnnouncementBar__Slider = this.container.querySelector('.AnnouncementBar__Slider');\n   \tthis.AnnouncementBar__close_button = this.container.querySelector('.AnnouncementBar__close_button'); \n\n    if(this.AnnouncementBar__Slider) {\n      this.options = JSON.parse(this.AnnouncementBar__Slider.getAttribute('data-flickity-config'));\n      function slideHeightCalculate () {\n        var maxSlideHeight = 0;\n        var items = _this.AnnouncementBar__Slider.querySelectorAll('.AnnouncementBar__Content');\n        if(items.length > 1 ) {\n          // Batch all writes before any read - interleaving style.height writes with\n          // offsetHeight reads forces a synchronous layout recalculation on every iteration.\n          items.forEach(function (item) {\n            item.style.height = 'auto';\n          });\n          items.forEach(function (item) {\n            var slideHeight = item.offsetHeight;\n            if(slideHeight > maxSlideHeight) {\n              maxSlideHeight = slideHeight;\n            }\n          });\n          items.forEach(function (item) {\n            item.style.height = maxSlideHeight + 'px';\n          });\n\n\n          setTimeout(function () {\n            document.documentElement.style.setProperty('--announcement-bar-height',document.querySelector('[data-section-type=\"announcement-bar\"]').offsetHeight + 'px');\n          },200);\n        }\n      }\n      window.addEventListener('resize', slideHeightCalculate);\n\n      slideHeightCalculate();\n      this.flickityInstance = new Flickity(this.AnnouncementBar__Slider, this.options);\n      setTimeout(function () {\n        document.documentElement.style.setProperty('--announcement-bar-height',document.querySelector('[data-section-type=\"announcement-bar\"]').offsetHeight + 'px');\n      },200);\n    }\n\n    if(this.AnnouncementBar__close_button) {\n      this.AnnouncementBar__close_button.addEventListener('click', function(e) {\n        e.preventDefault();\n\n        var parentSection = this.closest('[data-section-type=\"announcement-bar\"]');\n        parentSection.style.display = 'none';\n        document.documentElement.style.setProperty('--announcement-bar-height', 0+'px');\n\n      });\n    }\n  }\n\n  return AnnouncementBar;\n})();\n\n// theme.LogoBar moved to assets/theme-homepage-blocks.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n// theme.HomepageAccordion moved to assets/theme-homepage-blocks.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n\n// theme.PageAccordion moved to assets/theme-homepage-blocks.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n\n// theme.MainSearchPage moved to assets/theme-search.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n\n// theme.AdvancedSearch moved to assets/theme-search.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n\n// theme.CountdownTimer moved to assets/theme-homepage-blocks.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n\n// theme.FeaturedProducts moved to assets/theme-homepage-blocks.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n\n// theme.CollectionListSection moved to assets/theme-homepage-blocks.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n\n\ntheme.AddItemToCart = function(form) {\n\t  \n  var self = this;\n  var addToCartBtn = form.querySelector('[type=\"submit\"]');\n  \n\n\n  if(form) {\n    form.addEventListener('submit', function(e) {\n      e.preventDefault();\n\t\n      fetch('/cart/add.js', {\n        method: 'POST',\n        credentials: 'same-origin',\n        headers: {\n          'Content-Type': 'application/x-www-form-urlencoded',\n          'X-Requested-With': 'XMLHttpRequest'\n        },\n        body: theme.Helpers.serialize(form)\n      })\n      .then(function(response) {\n        return response.json();\n      })\n      .then(function(json) {\n               \n        if(addToCartBtn) {\n          var addToCartBtnText = addToCartBtn.querySelector(\"[data-add-to-cart-text]\");\n\n          addToCartBtn.classList.add('added');\n          addToCartBtnText.innerHTML = theme.strings.added_to_cart;\n          theme.Cart.prototype._onProductAdded();\n                    \n          var pre_order_textEl = form.querySelector('.pre_order_text');\n          setTimeout(function() {\n            addToCartBtn.classList.remove('added');\n\n            if(self.show_preOrder_btn) {\n\n           \t\tvar isPreOrderBtn = addToCartBtn.hasAttribute('data-preOrderButton');\n              if( isPreOrderBtn) {\n                addToCartBtnText.innerHTML = theme.strings.preOrder;\n                if(pre_order_textEl) {\n                  pre_order_textEl.classList.remove('hide');\n                }\n              } else {\n                addToCartBtnText.innerHTML = theme.strings.addToCart;\n                if(pre_order_textEl) {\n                  pre_order_textEl.classList.add('hide');\n                }\n              }\n\n            } else {\n              addToCartBtnText.innerHTML = theme.strings.addToCart;\n              if(pre_order_textEl) {\n                pre_order_textEl.classList.add('hide');\n              }\n            }\n          },2000);\n\n        }\n      })\n      .catch(function(error) {\n        // Error handled silently\n      });\n    });\n  }\n};\n\n\ntheme.ProductItemSwatches = function() {\n  document.addEventListener('change', function(e){\n    var target = e.target;\n\n    if(target.classList.contains('color-swatch__radio')) {\n      // We need to change the URL of the various links\n      var productItem = target.closest('.product-card'),\n          variantUrl = target.getAttribute('data-variant-url');\n      productItem.querySelector('.product-card__link-image').setAttribute('href', variantUrl);\n      productItem.querySelector('.product-card__link-title').setAttribute('href', variantUrl);\n\n      // If we have a custom image for the variant, we change it\n      var originalImageElement = productItem.querySelector('.product-card__image');\n\n      if (target.hasAttribute('data-image-url') && target.getAttribute('data-media-id') !== originalImageElement.getAttribute('data-media-id')) {\n\n        originalImageElement.setAttribute('data-media-id', target.getAttribute('data-media-id'));\n        originalImageElement.setAttribute('srcset', target.getAttribute('data-image-url'));\n        originalImageElement.setAttribute('src', target.getAttribute('data-image-src'));\n        originalImageElement.setAttribute('width', target.getAttribute('ddata-image-width'));\n        originalImageElement.setAttribute('height', target.getAttribute('data-image-height'));\n\n        if( target.hasAttribute('data-max_img_width')) {\n          originalImageElement.setAttribute('style', target.getAttribute('data-max_img_width'));\n        }\n      }\n\n      // var productItemBlock =  target.closest('.product-item-block');\n      // if(productItemBlock) {\n      //   if(productItemBlock.classList.contains('product-item-block--withAlternateImage')) {\n      //     productItemBlock.classList.remove('product-item-block--withAlternateImage')\n      //   }\n      // }\n      // Note: We should NOT remove 'product-item-block--withAlternateImage' class\n      // because alternate image is product-level (product.media[1]), not variant-specific.\n      // The hover functionality should continue to work after variant selection.\n      // Removed the code that was removing this class.\n    }\n  });\n};\n\n// Custom homepage/collection cards use compact thumbnail buttons rather than\n// the standard product-card radio swatches. Keep the card image and both links\n// in sync with the selected variant. Event delegation also covers cards added\n// later by Shopify sections or recommendation rendering.\ndocument.addEventListener('click', function(event) {\n  var swatch = event.target.closest('[data-card-variant-swatch]');\n  if (!swatch) return;\n\n  var productCard = swatch.closest('.product_cart');\n  if (!productCard) return;\n\n  var variantUrl = swatch.getAttribute('data-variant-url');\n  var productImage = productCard.querySelector('.product_cart__image-block > img');\n\n  productCard.querySelectorAll('[data-card-variant-swatch]').forEach(function(item) {\n    item.setAttribute('aria-pressed', item === swatch ? 'true' : 'false');\n  });\n\n  if (productImage && swatch.hasAttribute('data-image-src')) {\n    productImage.setAttribute('src', swatch.getAttribute('data-image-src'));\n\n    if (swatch.getAttribute('data-image-url')) {\n      productImage.setAttribute('srcset', swatch.getAttribute('data-image-url'));\n    }\n    if (swatch.getAttribute('data-image-width')) {\n      productImage.setAttribute('width', swatch.getAttribute('data-image-width'));\n    }\n    if (swatch.getAttribute('data-image-height')) {\n      productImage.setAttribute('height', swatch.getAttribute('data-image-height'));\n    }\n  }\n\n  var hoverImageSrc = swatch.getAttribute('data-hover-image-src');\n  if (hoverImageSrc) {\n    var hoverImages = Array.from(productCard.querySelectorAll('.hovered-content img'));\n    var hoverTemplate = productCard.querySelector('.hover-alt-image-template');\n    if (hoverTemplate) {\n      hoverImages = hoverImages.concat(Array.from(hoverTemplate.content.querySelectorAll('img')));\n    }\n    hoverImages.forEach(function(image) {\n      image.removeAttribute('srcset');\n      image.setAttribute('src', hoverImageSrc);\n      image.setAttribute('alt', swatch.getAttribute('data-hover-image-alt') || '');\n    });\n  }\n\n  if (variantUrl) {\n    productCard.querySelectorAll('.product_cart__image-block, .product_cart__info > a').forEach(function(link) {\n      link.setAttribute('href', variantUrl);\n    });\n  }\n});\n\ntheme.ProductRecommendations = (function() {\n  function ProductRecommendations(container) {\n    var baseUrl = container.dataset.baseUrl;\n    var productId = container.dataset.productId;\n    var sectionId = container.dataset.sectionId;\n    var recommendationsSectionUrl =\n      baseUrl +\n      '?section_id='+sectionId+'&product_id=' +\n      productId +\n      '&limit=4';\n\n    window.performance.mark(\n      'pursuit:product:fetch_product_recommendations.start'\n    );\n\n    fetch(recommendationsSectionUrl)\n      .then(function(response) {\n        return response.text();\n      })\n      .then(function(productHtml) {\n        if (productHtml.trim() === '') return;\n\n      \n        container.innerHTML = productHtml;\n        container.innerHTML = container.firstElementChild.innerHTML;\n\n      if (theme.hydrateHoverAlternateImages) {\n        theme.hydrateHoverAlternateImages(container);\n      }\n\n      var formsArr = container.querySelectorAll('[action=\"/cart/add\"]');\n      if(formsArr.length) {\n        formsArr.forEach(function(form,index) {\n          theme.AddItemToCart(form);\n\n        });\n      }\n      theme.ProductItemSwatches();\n\n            var zoomFadeAnimationElems = container.querySelectorAll('.zoom-fade-animation:not(.zoomFade-animation)'); \n\n    if(zoomFadeAnimationElems.length) {\n      zoomFadeAnimationElems.forEach(function(block,index) {\n        var  containerPosition = block.getBoundingClientRect();\n        if(containerPosition.top + 200 < window.innerHeight) {\n          block.classList.add('zoomFade-animation');\n        }\n      });\n    } \n\n\n        window.performance.mark(\n          'pursuit:product:fetch_product_recommendations.end'\n        );\n\n        performance.measure(\n          'pursuit:product:fetch_product_recommendations',\n          'pursuit:product:fetch_product_recommendations.start',\n          'pursuit:product:fetch_product_recommendations.end'\n        );\n      });\n  }\n\n  return ProductRecommendations;\n})();\n\n// theme.Quotes moved to assets/theme-homepage-blocks.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n\n// theme.SlideshowSection moved to assets/theme-slideshow.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n\nwindow.theme = window.theme || {};\n\ntheme.StoreAvailability = (function() {\n  var selectors = {\n    storeAvailabilityModalOpen: '[data-store-availability-modal-open]',\n    storeAvailabilityModalProductTitle:\n      '[data-store-availability-modal-product-title]',\n    storeAvailabilityModalVariantTitle:\n      '[data-store-availability-modal-variant-title]'\n  };\n\n  var classes = {\n    hidden: 'hide'\n  };\n\n  function StoreAvailability(container) {\n    this.container = container;\n    this.productTitle = this.container.dataset.productTitle;\n    this.hasOnlyDefaultVariant =\n      this.container.dataset.hasOnlyDefaultVariant === 'true';\n\n\n    document.addEventListener('click', function(e){\n      var el = e.target;\n      if(!el.classList.contains('store-availabilities-modal') && !el.closest('.store-availabilities-modal') && !el.closest('.store-availability-information-container')) {\n        var StoreAvailabilityModal = document.querySelector('.store-availabilities-modal');\n\n        if(StoreAvailabilityModal) {\n          if(StoreAvailabilityModal.classList.contains('store-availabilities-modal--active')) {\n\n            document.querySelector('body').classList.remove('show_overlay');\n\n            var close_btn = StoreAvailabilityModal.querySelector('.js-modal-close-store-availability-modal');\n            if(close_btn) {\n              close_btn.dispatchEvent(new Event('click', { bubbles: true }));\n            }\n\n          }\n        }\n      }\n    });\n\n  }\n\n  StoreAvailability.prototype = Object.assign({}, StoreAvailability.prototype, {\n    updateContent: function(variantId) {\n      var variantSectionUrl =\n        this.container.dataset.baseUrl +\n        '/variants/' +\n        variantId +\n        '/?section_id=store-availability';\n      var self = this;\n\n      var storeAvailabilityModalOpen = self.container.querySelector(\n        selectors.storeAvailabilityModalOpen\n      );\n\n      this.container.style.opacity = 0.5;\n      if (storeAvailabilityModalOpen) {\n        storeAvailabilityModalOpen.disabled = true;\n        storeAvailabilityModalOpen.setAttribute('aria-busy', true);\n      }\n\n      fetch(variantSectionUrl)\n        .then(function(response) {\n          return response.text();\n        })\n        .then(function(storeAvailabilityHTML) {\n          if (storeAvailabilityHTML.trim() === '') {\n            return;\n          }\n          self.container.innerHTML = storeAvailabilityHTML;\n          self.container.innerHTML = self.container.firstElementChild.innerHTML;\n          self.container.style.opacity = 1;\n\n          // Need to query this again because we updated the DOM\n          storeAvailabilityModalOpen = self.container.querySelector(\n            selectors.storeAvailabilityModalOpen\n          );\n\n          if (!storeAvailabilityModalOpen) {\n            return;\n          }\n\n          storeAvailabilityModalOpen.addEventListener(\n            'click',\n            self._onClickModalOpen.bind(self)\n          );\n\n          self.modal = self._initModal();\n          self._updateProductTitle();\n          if (self.hasOnlyDefaultVariant) {\n            self._hideVariantTitle();\n          }\n        });\n    },\n\n    clearContent: function() {\n      this.container.innerHTML = '';\n    },\n\n    _onClickModalOpen: function() {\n      this.container.dispatchEvent(\n        new CustomEvent('storeAvailabilityModalOpened', {\n          bubbles: true,\n          cancelable: true\n        })\n      );\n    },\n\n    _initModal: function() {\n      return new window.Modals(\n        'StoreAvailabilityModal',\n        'store-availability-modal',\n        {\n          close: '.js-modal-close-store-availability-modal',\n          closeModalOnClick: true,\n          openClass: 'store-availabilities-modal--active'\n        }\n      );\n    },\n\n    _updateProductTitle: function() {\n      var storeAvailabilityModalProductTitle = this.container.querySelector(\n        selectors.storeAvailabilityModalProductTitle\n      );\n      storeAvailabilityModalProductTitle.textContent = this.productTitle;\n    },\n\n    _hideVariantTitle: function() {\n      var storeAvailabilityModalVariantTitle = this.container.querySelector(\n        selectors.storeAvailabilityModalVariantTitle\n      );\n      storeAvailabilityModalVariantTitle.classList.add(classes.hidden);\n    }\n  });\n\n  return StoreAvailability;\n})();\n\nvar selectors = {\n  disclosureLocale: '[data-disclosure-locale]',\n  disclosureCurrency: '[data-disclosure-currency]'\n};\n\ntheme.FooterSection = (function() {\n  function Footer(container) {\n        \n    this.container = container;\n    this.cache = {};\n    this.cacheSelectors();\n\n    if (this.cache.localeDisclosure) {\n      this.localeDisclosure = new theme.Disclosure(this.cache.localeDisclosure);\n    }\n\n    if (this.cache.currencyDisclosure) {\n      this.currencyDisclosure = new theme.Disclosure(\n        this.cache.currencyDisclosure\n      );\n    }\n  }\n\n  Footer.prototype = Object.assign({}, Footer.prototype, {\n    cacheSelectors: function() {\n      this.cache = {\n        localeDisclosure: this.container.querySelector(\n          selectors.disclosureLocale\n        ),\n        currencyDisclosure: this.container.querySelector(\n          selectors.disclosureCurrency\n        )\n      };\n    },\n\n    onUnload: function() {\n      if (this.cache.localeDisclosure) {\n        this.localeDisclosure.destroy();\n      }\n\n      if (this.cache.currencyDisclosure) {\n        this.currencyDisclosure.destroy();\n      }\n    }\n  });\n\n  return Footer;\n})();\n\n// theme.FeaturedBlog moved to assets/theme-content-pages.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n\n// theme.BlogPage moved to assets/theme-content-pages.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n\n// theme.ArticlePage moved to assets/theme-content-pages.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n\n// theme.Timeline moved to assets/theme-content-pages.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n// theme.Mosaic moved to assets/theme-homepage-blocks.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n\ntheme.SearchBar = (function() { \n  function SearchBar(element) {\n    \n    this.element = element;\n    this.delegateElement = new Delegate(this.element) ;\n\n    this.headerElement = this.element.closest('.site-header');\n    this.searchBarElement = this.element.querySelector('.search-form');\n    this.inputElement = this.element.querySelector('[name=\"q\"]');\n    this.searchResultsElement = this.element.querySelector('.search-bar__results');\n    this.searchPopoverEl = this.element.querySelector('.predictive-search-wrapper--drawer');\n\n    this.productTypeFilter = '';\n    this.isSearchOpen = false;\n\n    this._attachListeners();\n\n  }\n  SearchBar.prototype = Object.assign({}, SearchBar.prototype, {\n    _destroy: function()  {\n      this.delegateElement.off();\n    },\n    _attachListeners: function() {\n     \n            \n      this.delegateElement.on('focusin', '[name=\"q\"]', this._onInputFocus.bind(this));\n      this.delegateElement.on('focusout', '[name=\"q\"]', this._onFocusOut.bind(this));\n      this.delegateElement.on('keydown', '[name=\"q\"]', this._handleTab.bind(this));\n      this.delegateElement.on('input', '[name=\"q\"]', this._debounce(this._doSearch.bind(this), 250));\n      this.delegateElement.on('click', '#search-product-type', this._productTypeChanged.bind(this));\n      this.delegateElement.on('submit', '[type=\"submit\"]', this._onFormSubmit.bind(this));\n\n      var _this = this;\n      document.addEventListener('click', function(e){\n        var el = e.target;\n\n        if(!el.classList.contains('search-bar__form') && !el.closest('.search-bar__form')) {\n          _this.element.classList.remove('is-fixed');\n          document.body.classList.remove('no-mobile-scroll');\n\n          if (!_this.element.contains(e.relatedTarget)) {\n            _this.searchPopoverEl.setAttribute('aria-hidden', 'true');\n            _this.searchBarElement.classList.remove('is-expanded');\n          }\n        }\n      });\n    },\n    _toggleMobileSearch: function() {\n      if (this.isSearchOpen) {\n        this.headerElement.classList.remove('header--search-expanded');\n        this.element.classList.remove('is-visible');\n      } else {\n        this.headerElement.classList.add('header--search-expanded');\n        this.element.classList.add('is-visible');\n      }\n\n      this.isSearchOpen = !this.isSearchOpen;\n    },\n    _onInputFocus: function() {\n      this.element.classList.add('is-fixed');\n\n      document.body.classList.add('no-mobile-scroll');\n\n//       if (this.inputElement.value === '') {\n\n//         this.searchPopoverEl.setAttribute('aria-hidden', 'true');\n//       } else {\n       \n\n        this.searchPopoverEl.setAttribute('aria-hidden', 'false');\n        this.inputElement.classList.add('is-filled');\n        this.searchBarElement.classList.add('is-expanded');\n//       }\n\n    },\n    _onFocusOut: function(event) {\n      // On phone, nothing happens on focus out\n      theme.Helpers.setTouch();\n      if(theme.Helpers.isTouch()){\n        return;\n      }\n\n\n      this.element.classList.remove('is-fixed');\n      document.body.classList.remove('no-mobile-scroll');\n\n      // event.relatedTarget allows to get the new element that get focus. If it's outside the div that contains the search, we close it\n      if (!this.element.contains(event.relatedTarget)) {\n\n\n        this.searchPopoverEl.setAttribute('aria-hidden', 'true');\n\n        this.searchBarElement.classList.remove('is-expanded');\n      }\n    },\n    _handleTab: function(event) {\n      if (event.keyCode !== 9) {\n        return;\n      }\n\n      // Try to get the first link into the results to give focus to this element\n      var firstFocusableElement = this.searchResultsElement.querySelector('a');\n\n      if (firstFocusableElement) {\n        firstFocusableElement.focus();\n        event.preventDefault();\n      }\n    },\n\n  \n   _supportsPredictiveApi: function() {\n        return JSON.parse(document.getElementById('shopify-features').innerHTML)['predictiveSearch'];\n    },\n    _doSearch: function() {\n      \n      var _this33 = this;\n\n      // Unfortunately, fetch does not support as of today cancelling a request. As a consequence what we do is that we manually\n      // keep track of sent requests, and only use the results of the last one\n      var currentInput = this.inputElement.value;\n      this.lastInputValue = currentInput;\n      \n      if (currentInput === '') {\n        _this33.searchPopoverEl.classList.remove('added_results');\n        _this33.searchBarElement.querySelector('.search-bar__results-inner').innerHTML = '';\n      } else {\n      \n        this.searchPopoverEl.setAttribute('aria-hidden', 'false');\n\n        var queryOptions = { method: 'GET', credentials: 'same-origin' },\n             url = \"\".concat(window.routes.searchUrl).concat(this._supportsPredictiveApi() ? '/suggest' : ''),\n              productQuery = \"\".concat(this.productTypeFilter !== '' ? \"product_type:\".concat(this.productTypeFilter, \" AND \") : '').concat(encodeURIComponent(this.lastInputValue)),\n              queries = [fetch(\"\".concat(url, \"?section_id=predictive-search&q=\").concat(productQuery, \"&resources[limit]=3&resources[limit_scope]=each\"), queryOptions)];\n        \n        \n        \n        Promise.all(queries).then(function (responses) {\n                    \n          // If we receive the result for a query that is not the last one, we simply do not process the result\n          if (_this33.lastInputValue !== currentInput) {\n            return;\n          }\n\n          Promise.all(responses.map(function (response) {\n            return response.text();\n          })).then(function (contents) {\n            \n//             _this33.searchBarElement.classList.remove('is-loading');\n\t\tvar contents_length = contents.join('').trim().length;           \n            var searchContent = document.createElement('div');\n            searchContent.innerHTML = contents.join('').trim();\n            \n            // If there is a \"view all\" button, we move it at the end of the results\n            var viewAll = searchContent.querySelector('.search-bar__view-all-button-wrapper');\n            if (viewAll) {\n              searchContent.insertAdjacentElement('beforeend', viewAll);\n            }\n            _this33.searchBarElement.querySelector('.search-bar__results-inner').innerHTML = searchContent.innerHTML;\n            if (theme.hydrateHoverAlternateImages) {\n              theme.hydrateHoverAlternateImages(_this33.searchBarElement.querySelector('.search-bar__results-inner'));\n            }\n\n            if(contents_length) {\n              _this33.searchPopoverEl.classList.add('added_results');\n            } else {\n              _this33.searchPopoverEl.classList.remove('added_results');\n            }\n\n          });\n        });\n      }\n    },\n    _productTypeChanged: function(event, target) {\n     \n      this.productTypeFilter = target.getAttribute('data-search-type');\n      if(this.productTypeFilter == 'All Categories') {\n\t\tthis.productTypeFilter = '';\n      }\n      \n      if (this.inputElement.value !== '') {\n        this._doSearch();\n      }\n    },\n    _onFormSubmit: function(event) {\n      if (this.inputElement.value === '') {\n        event.preventDefault(); // Do not submit if no value\n      } else {\n        // To prevent for the value to temporarily shows the \"*\", we clone the input as a hidden field\n        var cloneNode = this.inputElement.cloneNode();\n        cloneNode.setAttribute('type', 'hidden');\n        cloneNode.value = '' + (this.productTypeFilter !== '' ? 'product_type:' + this.productTypeFilter + ' AND ' : '') + this.inputElement.value + '*';\n\n        // We remove the \"q\" attribute on existing node so it's not submitted\n        this.inputElement.removeAttribute('name');\n\n        // And we insert it into the DOM\n        this.inputElement.insertAdjacentElement('afterend', cloneNode);\n      }\n    },\n    _debounce(fn, delay) {\n      \n      var _this34 = this;\n\n      var timer = null;\n\n      return function () {\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        clearTimeout(timer);\n\n        timer = setTimeout(function () {\n          fn.apply(_this34, args);\n        }, delay);\n      };\n    }\n  });\n\n  return SearchBar;\n})();\n\n\n// theme.Shop_the_Look moved to assets/theme-homepage-blocks.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n\n// theme.HomepageVideo moved to assets/theme-homepage-blocks.js (code-split, 2026-08-26) - lazily loaded via theme.Sections.registerLazy(). See docs/THEME_JS_CODE_SPLIT_PLAN.md.\n\n\n\ndocument.addEventListener('DOMContentLoaded', function() {\n  var sections = new theme.Sections();\n\n  // Code-split (2026-08-26, Phase A - homepage/content-page-only modules):\n  // constructors below live in assets/theme-slideshow.js, theme-search.js,\n  // theme-homepage-blocks.js, theme-content-pages.js, fetched via\n  // window.importModule only the first time a matching section actually\n  // exists on the page. See docs/THEME_JS_CODE_SPLIT_PLAN.md (Phase A).\n  sections.registerLazy('video', 'HomepageVideo', 'theme-homepage-blocks');\n  sections.registerLazy('shop-the-look', 'Shop_the_Look', 'theme-homepage-blocks');\n  sections.registerLazy('search-template', 'MainSearchPage', 'theme-search');\n  sections.registerLazy('mosaic', 'Mosaic', 'theme-homepage-blocks');\n  sections.registerLazy('timeline', 'Timeline', 'theme-content-pages');\n  sections.registerLazy('featured-blog', 'FeaturedBlog', 'theme-content-pages');\n  sections.registerLazy('blog-page', 'BlogPage', 'theme-content-pages');\n  sections.registerLazy('article-page', 'ArticlePage', 'theme-content-pages');\n  sections.registerLazy('collection-list', 'CollectionListSection', 'theme-homepage-blocks');\n  sections.registerLazy('featured-products', 'FeaturedProducts', 'theme-homepage-blocks');\n  sections.registerLazy('index-countdown-timer', 'CountdownTimer', 'theme-homepage-blocks');\n  sections.registerLazy('page-accordion', 'PageAccordion', 'theme-homepage-blocks');\n  sections.registerLazy('index-accordion', 'HomepageAccordion', 'theme-homepage-blocks');\n  sections.registerLazy('logo-bar', 'LogoBar', 'theme-homepage-blocks');\n  sections.register('announcement-bar', theme.AnnouncementBar);\n  sections.register('cart-template', theme.Cart);\n  sections.registerLazy('product', 'Product', 'theme-product');\n\n  sections.registerLazy('product-template', 'Product', 'theme-product');\n  sections.register('header-section', theme.HeaderSection);\n  sections.registerLazy('slideshow-section', 'SlideshowSection', 'theme-slideshow');\n  sections.register('store-availability', theme.StoreAvailability);\n  sections.registerLazy('quotes', 'Quotes', 'theme-homepage-blocks');\n  sections.register('product-recommendations', theme.ProductRecommendations);\n  sections.registerLazy('advanced-search', 'AdvancedSearch', 'theme-search');\n  sections.register('footer-section', theme.FooterSection);\n\n\n\n  var quick_viewModal = document.querySelector('#modal-quick-view');\n  if(quick_viewModal) {\n    document.addEventListener('click', function(e){\n      var target = e.target;\n\n      if(target.classList.contains('open-quick-view--btn') || target.closest('.open-quick-view--btn')) {\n        if(!target.classList.contains('open-quick-view--btn')) {\n          target = target.closest('.open-quick-view--btn');\n        }\n\n        e.preventDefault();\n        var productUrl = new URL(\"\".concat(window.location.origin).concat(target.getAttribute('data-product-url'))); // If we are on mobile or tablet, we redirect to product page directly\n        var modal = document.getElementById(target.getAttribute('aria-controls'));\n        modal.classList.add('is-loading');\n        productUrl.searchParams.set('view', 'quick-view');\n        fetch(productUrl.href, {\n          credentials: 'same-origin',\n          method: 'GET'\n        }).then(function (response) {\n          response.text().then(async function (content) {\n            modal.querySelector('.modal__inner').innerHTML = content;\n            modal.classList.remove('is-loading');\n\n            var productModule = await window.importModule('theme-product');\n            var modalProductSection = new productModule.Product(modal.querySelector('[data-section-type=\"product\"]')); // We set a listener so we can cleanup on close\n            if(window.Shopify.PaymentButton) {\n              if(window.Shopify.PaymentButton.init) {\n              window.Shopify.PaymentButton.init();\n            }\n          }\n            document.querySelector('body').classList.add('show_overlay');\n            modal.setAttribute('aria-hidden','false');\n\n          });\n        });\n      }\n    });\n    document.addEventListener('click', function(e){\n      var el = e.target;\n\n      if(el.classList.contains('close-quick-view') || el.closest('.close-quick-view')) {\n        e.preventDefault();\n        var modal = el.closest('.modal');\n        modal.setAttribute('aria-hidden','true');\n        modal.querySelector('.modal__inner').innerHTML = '';\n        document.querySelector('body').classList.remove('show_overlay');\n      }\n    }); \n  }\n\n  \n  \n  theme.customerTemplates.init();\n\n  // Theme-specific selectors to make tables scrollable\n  var tableSelectors = '.rte table,' + '.custom__item-inner--html table';\n\n  slate.rte.wrapTable({\n    tables: document.querySelectorAll(tableSelectors),\n    tableWrapperClass: 'scrollable-wrapper'\n  });\n\n  // Theme-specific selectors to make iframes responsive\n  var iframeSelectors =\n    '.rte iframe[src*=\"youtube.com/embed\"],' +\n    '.rte iframe[src*=\"player.vimeo\"],' +\n    '.custom__item-inner--html iframe[src*=\"youtube.com/embed\"],' +\n    '.custom__item-inner--html iframe[src*=\"player.vimeo\"]';\n\n  slate.rte.wrapIframe({\n    iframes: document.querySelectorAll(iframeSelectors),\n    iframeWrapperClass: 'video-wrapper'\n  });\n\n  // Common a11y fixes\n  slate.a11y.pageLinkFocus(\n    document.getElementById(window.location.hash.substr(1))\n  );\n\n  var inPageLink = document.querySelector('.in-page-link');\n  if (inPageLink) {\n    inPageLink.addEventListener('click', function(evt) {\n      slate.a11y.pageLinkFocus(\n        document.getElementById(evt.currentTarget.hash.substr(1))\n      );\n    });\n  }\n\n  document.querySelectorAll('a[href=\"#\"]').forEach(function(anchor) {\n    anchor.addEventListener('click', function(evt) {\n      evt.preventDefault();\n    });\n  });\n\n  slate.a11y.accessibleLinks({\n    messages: {\n      newWindow: theme.strings.newWindow,\n      external: theme.strings.external,\n      newWindowExternal: theme.strings.newWindowExternal\n    },\n    links: document.querySelectorAll(\n      'a[href]:not([aria-describedby]), .product-single__thumbnail'\n    )\n  });\n\n  theme.FormStatus.init();\n\n  document.addEventListener(\n    'touchstart',\n    function() {\n      theme.Helpers.setTouch();\n    },\n    { once: true }\n  );\n\n  if (document.fonts) {\n    document.fonts.ready.then(function() {\n      window.performance.mark('pursuit:fonts_loaded');\n    });\n  }\n  function setCookie(name,value,days) {\n    var expires = \"\";\n    if (days) {\n      var date = new Date();\n      date.setTime(date.getTime() + (days*24*60*60*1000));\n      expires = \"; expires=\" + date.toUTCString();\n    }\n    document.cookie = name + \"=\" + (value || \"\")  + expires + \"; path=/\";\n  }\n  function getCookie (name) {\n    let value = `; ${document.cookie}`;\n    let parts = value.split(`; ${name}=`);\n    if (parts.length === 2) return parts.pop().split(';').shift();\n  }\n  function shouldPreserveAttributionParams() {\n    try {\n      var params = new URLSearchParams(window.location.search);\n      var keys = [\n        'utm_source',\n        'utm_medium',\n        'utm_campaign',\n        'utm_term',\n        'utm_content',\n        'gclid',\n        'fbclid',\n        'msclkid',\n        'ttclid',\n        'wbraid',\n        'gbraid'\n      ];\n      return keys.some(function(k) {\n        return params.has(k);\n      });\n    } catch (e) {\n      return false;\n    }\n  }\n  function cleanUrlButKeepAttribution(removeKeys) {\n    if (!window.history || !window.history.replaceState) return;\n    if (shouldPreserveAttributionParams()) return;\n    try {\n      var url = new URL(window.location.href);\n      if (removeKeys && removeKeys.length) {\n        removeKeys.forEach(function(k) {\n          url.searchParams.delete(k);\n        });\n      }\n      var next = url.pathname + (url.searchParams.toString() ? '?' + url.searchParams.toString() : '') + (url.hash || '');\n      window.history.replaceState(null, null, next);\n    } catch (e) {\n      window.history.replaceState(null, null, window.location.pathname);\n    }\n  }\n\n  (function attributionPersistence() {\n    var ATTRIBUTION_KEYS = ['utm_source','utm_medium','utm_campaign','utm_term','utm_content','gclid','fbclid','msclkid','ttclid','wbraid','gbraid'];\n    var STORAGE_KEY = 'theme_attribution_params';\n\n    function getAttributionFromUrl() {\n      try {\n        var params = new URLSearchParams(window.location.search);\n        var out = {};\n        ATTRIBUTION_KEYS.forEach(function(k) {\n          if (params.has(k)) out[k] = params.get(k);\n        });\n        return Object.keys(out).length ? out : null;\n      } catch (e) {\n        return null;\n      }\n    }\n\n    function getStoredAttribution() {\n      try {\n        var raw = sessionStorage.getItem(STORAGE_KEY);\n        if (!raw) return null;\n        return JSON.parse(raw);\n      } catch (e) {\n        return null;\n      }\n    }\n\n    function storeAttributionFromUrl() {\n      var att = getAttributionFromUrl();\n      if (!att) return;\n      try {\n        sessionStorage.setItem(STORAGE_KEY, JSON.stringify(att));\n      } catch (e) {}\n    }\n\n    function appendAttributionToUrl(urlString, att) {\n      if (!att || !urlString) return urlString;\n      try {\n        var url = new URL(urlString, window.location.origin);\n        var hasAny = ATTRIBUTION_KEYS.some(function(k) { return url.searchParams.has(k); });\n        if (hasAny) return urlString;\n        Object.keys(att).forEach(function(k) {\n          url.searchParams.set(k, att[k]);\n        });\n        return url.pathname + (url.search || '') + (url.hash || '');\n      } catch (e) {\n        return urlString;\n      }\n    }\n\n    function isInternalLink(href) {\n      if (!href || href.charAt(0) === '#' || href.indexOf('javascript:') === 0 || href.indexOf('mailto:') === 0 || href.indexOf('tel:') === 0) return false;\n      try {\n        var url = new URL(href, window.location.origin);\n        return url.origin === window.location.origin && url.pathname.indexOf('/apps/') !== 0;\n      } catch (e) {\n        return false;\n      }\n    }\n\n    function applyAttributionToInternalLinks() {\n      var att = getStoredAttribution();\n      if (!att) return;\n      var links = document.querySelectorAll('a[href]');\n      var origin = window.location.origin;\n      links.forEach(function(a) {\n        var rawHref = (a.getAttribute('href') || '').trim();\n        if (!rawHref) return;\n        var href = rawHref.charAt(0) === '/' ? origin + rawHref : rawHref;\n        if (!isInternalLink(href)) return;\n        var next = appendAttributionToUrl(href, att);\n        if (next === href) return;\n        a.setAttribute('href', next);\n      });\n    }\n\n    function ensureLinkHasAttribution(a) {\n      var att = getStoredAttribution();\n      if (!att) return;\n      var rawHref = (a.getAttribute('href') || '').trim();\n      if (!rawHref) return;\n      var href = rawHref.charAt(0) === '/' ? window.location.origin + rawHref : rawHref;\n      if (!isInternalLink(href)) return;\n      var next = appendAttributionToUrl(href, att);\n      if (next !== href) a.setAttribute('href', next);\n    }\n\n    document.addEventListener('click', function(e) {\n      var a = e.target && e.target.closest ? e.target.closest('a[href]') : null;\n      if (a && a.href) ensureLinkHasAttribution(a);\n    }, true);\n\n    storeAttributionFromUrl();\n\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', applyAttributionToInternalLinks);\n    } else {\n      applyAttributionToInternalLinks();\n    }\n    document.addEventListener('shopify:section:load', applyAttributionToInternalLinks);\n  })();\n\n  // Cookie consent popup show/hide logic moved to assets/cookie-popup.js,\n  // loaded independently ahead of this file - see that file's header\n  // comment for why (this used to be the last thing in theme.js, so the\n  // popup couldn't appear until this entire 300KB+ file finished loading).\n\n  function otherFormMessage(formId) {\n\n\n    var contact_forms = document.querySelectorAll('.contact-form');\n    if(contact_forms.length) {\n      contact_forms.forEach(function(item,index) {\n        var itemId = item.id;\n\n        if(formId != itemId) {\n          var form_messageEl = item.querySelector('.form-message');\n          if(form_messageEl) {\n            form_messageEl.remove();\n          } else {\n            form_messageEl = item.querySelector('.input-error-message'); \n            if(form_messageEl) {\n              form_messageEl.remove();\t\n            }\n          }\n\n          var form_inputs = item.querySelectorAll('.input--error');\n          if(form_inputs.length) {\n            form_inputs.forEach(function(input,indexInput) {\n              input.classList.remove('input--error');\n            })\n          }\n        }\n      });\n    }\n\n  }\n\n\n  var entry_popup_wrapper = document.querySelector('.entry_popup_wrapper');\n  if(entry_popup_wrapper) {\n    var $container = entry_popup_wrapper.querySelector('.entry-modal');\n    var delay = $container.getAttribute('data-delay')*1000,\n        cookie = $container.getAttribute('data-cookie'),\n        sumbitted_form = false;\n    var pswpElement = document.querySelectorAll('.pswp')[0];\n\n    var items = [\n      {\n        html: $container\n      }\n    ];\n    var options = {\n      index: 0,\n      modal: false,\n      mainClass: 'entry-modal_wrapper',\n      zoomEl: false,\n      shareEl: false,\n      counterEl: false,\n      arrowEl: false,\n      fullscreenEl: false,\n      closeOnScroll :false,\n      closeOnVerticalDrag :false,\n      clickToCloseNonZoomable :false,\n      closeElClasses :' ',\n      closeEl:false,\n      isClickableElement: function(el) {\n        return true;\n      }\n    };\n    var entry_popup_gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);\n\n\n    var form = $container.querySelector('form');\n    var formId;\n    if(form)  {\n \n      formId = form.getAttribute('id');\n      var submitCookieCustomerForm = function (event) {\n        event.preventDefault();\n        var cookieTime = cookie*1;\n        setCookie('pop_confirm','pop_newsletter',cookieTime);\n      }\n      form.addEventListener('submit', submitCookieCustomerForm, false );\n      form.removeEventListener('submit', submitCookieCustomerForm, false );\n    }\n    document.addEventListener('click', function(e){\n      var el = e.target;\n\n      if(el.classList.contains('modal_close_btn') || el.closest('.modal_close_btn')) {\n        if(!el.classList.contains('modal_close_btn')) {\n          el = el.closest('.modal_close_btn');\n        }\n        if(el.closest('.entry-modal_wrapper')) {\n          document.querySelector('body').classList.remove('active_modal');\n          entry_popup_gallery.close();\n          window.setTimeout(function() {\n            cleanUrlButKeepAttribution(['customer_posted','form_type','contact[tags]']);\n          },500)\n        }\n\n      }\n    });  \n\n    if(getCookie('pop_confirm') != null && window.location.hash.indexOf(formId) >= 0 && (window.location.search == \"?customer_posted=true\" || window.location.hash == \"#contact_form\" || $container.querySelector(\"form .errors\"))){\n      var sumbitted_form = true;\n    }\n\n\n    if(window.location.href.indexOf(\"challenge\") < 0){\n      function show_modal(){\n        entry_popup_gallery.init();\n        document.querySelector('body').classList.add('active_modal');\n        entry_popup_gallery.listen('close', function() { \n          var cookieTime = cookie*1;\n          setCookie('pop','modal',cookieTime);\n          setCookie('pop_confirm',null);\n          document.querySelector('body').classList.remove('active_modal');\n        });\n      }\n\n      if (getCookie('pop') == null || cookie  == \"use_test_popup\" || sumbitted_form) {\n        window.setTimeout(show_modal, delay); // delay before it calls the modal function\n        if (cookie  != \"use_test_popup\" || !sumbitted_form) {\n          var cookieTime = cookie*1;\n          setCookie('pop','modal',cookieTime);\n        }\n        if(sumbitted_form){\n          setCookie('pop_confirm',null);\n\n          if(!$container.querySelector(\"form .errors\")){\n            $container.querySelector('form').classList.add('successForm');\n          }\n          window.setTimeout(show_modal, delay);\n          otherFormMessage(formId);\n\n        }\n\n      } else if(window.location.hash.indexOf(formId) >= 0 && window.location.search == \"?contact%5Btags%5D=newsletter&form_type=customer\" && getCookie('pop') == 'modal' && sumbitted_form == false) {\n        window.setTimeout(show_modal, delay); // delay before it calls the modal function\n        otherFormMessage(formId);\n      }\n\n    }\n  }\n\n\n  if(window.location.href.indexOf('/?contact%5Btags%5D=newsletter') >= 0) {\n    \n    var formId = window.location.href.split(\"form_type=customer\")[1];\n    if(formId.length) {\n      var formEl = document.querySelector(formId);\n      if(formEl) {\n        otherFormMessage(formEl.id);\n      }\n    }\n  }\n\n  \n  function resizeProductsCarousel() {\n    if(document.querySelectorAll('.index-tabs-content_block__slider.flickity-enabled').length) {\n      document.querySelectorAll('.index-tabs-content_block__slider.flickity-enabled').forEach(function(item,index,) {\n        var flkty = Flickity.data(item);\n        var hadRenderedClass = false;\n        if(item.classList.contains('rendered')) {\n          hadRenderedClass = true;\n        }\n        if(hadRenderedClass) {\n          item.classList.remove('rendered');\n        }\n        flkty.resize();\n        if(hadRenderedClass) {\n          item.classList.add('rendered');\n        }\n      });\n    }\n  }\n  var reLoadProductsCarousel = theme.Helpers.debounce(function(event) {\n    resizeProductsCarousel();\n  }, 100);\n\n  window.addEventListener(\"resize\", reLoadProductsCarousel);\n  \nfunction checkSectionVisibility() {\n  \n  var fadeInAnimationElems = document.querySelectorAll('.fade-in-animation:not(.fadeIn-animation)');\n  var zoomFadeAnimationElems = document.querySelectorAll('.zoom-fade-animation:not(.zoomFade-animation)'); \n\n  var removeEvent = false;\n\n  if(fadeInAnimationElems.length) {\n    fadeInAnimationElems.forEach(function(block,index) {\n      var  containerPosition = block.getBoundingClientRect();\n      if(containerPosition.top + 200 < window.innerHeight) {\n        block.classList.add('fadeIn-animation');\n      }\n    });\n  } \n  if(zoomFadeAnimationElems.length) {\n    zoomFadeAnimationElems.forEach(function(block,index) {\n      var  containerPosition = block.getBoundingClientRect();\n      if(containerPosition.top + 200 < window.innerHeight) {\n        block.classList.add('zoomFade-animation');\n      }\n    });\n  } \n\n\n  if(fadeInAnimationElems.length == 0 && zoomFadeAnimationElems.length == 0) {\n    removeEvent = true;\n  }\n  if(removeEvent) {\n    window.removeEventListener('scroll', checkSectionVisibility);\n  }\n\n}\ncheckSectionVisibility();\nwindow.addEventListener('scroll', checkSectionVisibility);\n\n\n\n});\n\nwindow.theme = window.theme || {};\n// Product card \"hover to see alternate photo\" images are wrapped in <template> by\n// snippets/product-card-item.liquid and snippets/custom-card-item.liquid so the browser\n// never fetches them on devices that can't hover (the CSS itself already disables the\n// hover swap under 750px/991.98px depending on the card type - this stops the now-invisible\n// image from being downloaded there too). Clone them in only where hover can actually happen.\ntheme.hydrateHoverAlternateImages = function(root) {\n  if (!window.matchMedia('(hover: hover) and (pointer: fine)').matches) return;\n  (root || document).querySelectorAll('template.hover-alt-image-template').forEach(function(tmpl) {\n    if (tmpl.content && tmpl.parentNode) {\n      tmpl.parentNode.insertBefore(tmpl.content.cloneNode(true), tmpl);\n      tmpl.remove();\n    }\n  });\n};\ntheme.hydrateHoverAlternateImages(document);\n"],
  "mappings": "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",
  "names": ["instance", "index", "isVideoTag", "videoId", "videoObj", "videoHost", "player", "modelViewerEl", "event", "selectors", "closeSearchDropdown", "search_product_type_Dropdown", "slideHeightCalculate", "formId", "cookieTime", "show_modal"]
}
