{
  "version": 3,
  "sources": ["/cdn/shop/t/14/assets/theme.js?view=ajax"],
  "sourcesContent": ["(function ($) {\n  var $ = jQuery = $;\n\n  var cc = {\n    sections: [] };\n\n\n  // requires: throttled-scroll, debouncedresize\n  theme.Sections = new function () {\n    var _ = this;\n\n    _._instances = [];\n    _._deferredSectionTargets = [];\n    _._sections = [];\n    _._deferredLoadViewportExcess = 300; // load defferred sections within this many px of viewport\n    _._deferredWatcherRunning = false;\n\n    _.init = function () {\n      $(document).on('shopify:section:load', function (e) {\n        // load a new section\n        var target = _._themeSectionTargetFromShopifySectionTarget(e.target);\n        if (target) {\n          _.sectionLoad(target);\n        }\n      }).on('shopify:section:unload', function (e) {\n        // unload existing section\n        var target = _._themeSectionTargetFromShopifySectionTarget(e.target);\n        if (target) {\n          _.sectionUnload(target);\n        }\n      });\n      $(window).on('throttled-scroll.themeSectionDeferredLoader debouncedresize.themeSectionDeferredLoader', _._processDeferredSections);\n      _._deferredWatcherRunning = true;\n    };\n\n    // register a type of section\n    _.register = function (type, section, options) {\n      _._sections.push({\n        type: type,\n        section: section,\n        afterSectionLoadCallback: options ? options.afterLoad : null,\n        afterSectionUnloadCallback: options ? options.afterUnload : null });\n\n\n      // load now\n      $('[data-section-type=\"' + type + '\"]').each(function () {\n        if (Shopify.designMode || options && options.deferredLoad === false || !_._deferredWatcherRunning) {\n          _.sectionLoad(this);\n        } else {\n          _.sectionDeferredLoad(this, options);\n        }\n      });\n    };\n\n    // prepare a section to load later\n    _.sectionDeferredLoad = function (target, options) {\n      _._deferredSectionTargets.push({\n        target: target,\n        deferredLoadViewportExcess: options && options.deferredLoadViewportExcess ? options.deferredLoadViewportExcess : _._deferredLoadViewportExcess });\n\n      _._processDeferredSections(true);\n    };\n\n    // load deferred sections if in/near viewport\n    _._processDeferredSections = function (firstRunCheck) {\n      if (_._deferredSectionTargets.length) {\n        var viewportTop = $(window).scrollTop(),\n        viewportBottom = viewportTop + $(window).height(),\n        loopStart = firstRunCheck === true ? _._deferredSectionTargets.length - 1 : 0;\n        for (var i = loopStart; i < _._deferredSectionTargets.length; i++) {\n          var target = _._deferredSectionTargets[i].target,\n          viewportExcess = _._deferredSectionTargets[i].deferredLoadViewportExcess,\n          sectionTop = $(target).offset().top - viewportExcess,\n          doLoad = sectionTop > viewportTop && sectionTop < viewportBottom;\n          if (!doLoad) {\n            var sectionBottom = sectionTop + $(target).outerHeight() + viewportExcess * 2;\n            doLoad = sectionBottom > viewportTop && sectionBottom < viewportBottom;\n          }\n          if (doLoad || sectionTop < viewportTop && sectionBottom > viewportBottom) {\n            // in viewport, load\n            _.sectionLoad(target);\n            // remove from deferred queue and resume checks\n            _._deferredSectionTargets.splice(i, 1);\n            i--;\n          }\n        }\n      }\n\n      // remove event if no more deferred targets left, if not on first run\n      if (firstRunCheck !== true && _._deferredSectionTargets.length === 0) {\n        _._deferredWatcherRunning = false;\n        $(window).off('.themeSectionDeferredLoader');\n      }\n    };\n\n    // load in a section\n    _.sectionLoad = function (target) {\n      var target = target,\n      sectionObj = _._sectionForTarget(target),\n      section = false;\n\n      if (sectionObj.section) {\n        section = sectionObj.section;\n      } else {\n        section = sectionObj;\n      }\n\n      if (section !== false) {\n        var instance = {\n          target: target,\n          section: section,\n          $shopifySectionContainer: $(target).closest('.shopify-section'),\n          thisContext: {\n            functions: section.functions } };\n\n\n        _._instances.push(instance);\n\n        //Initialise any components\n        if ($(target).data('components')) {\n          //Init each component\n          var components = $(target).data('components').split(',');\n          components.forEach(component => {\n            $(document).trigger('cc:component:load', [component, target]);\n          });\n        }\n\n        _._callSectionWith(section, 'onSectionLoad', target, instance.thisContext);\n        _._callSectionWith(section, 'afterSectionLoadCallback', target, instance.thisContext);\n\n        // attach additional UI events if defined\n        if (section.onSectionSelect) {\n          instance.$shopifySectionContainer.on('shopify:section:select', function (e) {\n            _._callSectionWith(section, 'onSectionSelect', e.target, instance.thisContext);\n          });\n        }\n        if (section.onSectionDeselect) {\n          instance.$shopifySectionContainer.on('shopify:section:deselect', function (e) {\n            _._callSectionWith(section, 'onSectionDeselect', e.target, instance.thisContext);\n          });\n        }\n        if (section.onBlockSelect) {\n          $(target).on('shopify:block:select', function (e) {\n            _._callSectionWith(section, 'onBlockSelect', e.target, instance.thisContext);\n          });\n        }\n        if (section.onBlockDeselect) {\n          $(target).on('shopify:block:deselect', function (e) {\n            _._callSectionWith(section, 'onBlockDeselect', e.target, instance.thisContext);\n          });\n        }\n      }\n    };\n\n    // unload a section\n    _.sectionUnload = function (target) {\n      var sectionObj = _._sectionForTarget(target);\n      var instanceIndex = -1;\n      for (var i = 0; i < _._instances.length; i++) {\n        if (_._instances[i].target == target) {\n          instanceIndex = i;\n        }\n      }\n      if (instanceIndex > -1) {\n        var instance = _._instances[instanceIndex];\n        // remove events and call unload, if loaded\n        $(target).off('shopify:block:select shopify:block:deselect');\n        instance.$shopifySectionContainer.off('shopify:section:select shopify:section:deselect');\n        _._callSectionWith(instance.section, 'onSectionUnload', target, instance.thisContext);\n        _._callSectionWith(sectionObj, 'afterSectionUnloadCallback', target, instance.thisContext);\n        _._instances.splice(instanceIndex);\n\n        //Destroy any components\n        if ($(target).data('components')) {\n          //Init each component\n          var components = $(target).data('components').split(',');\n          components.forEach(component => {\n            $(document).trigger('cc:component:unload', [component, target]);\n          });\n        }\n      } else {\n        // check if it was a deferred section\n        for (var i = 0; i < _._deferredSectionTargets.length; i++) {\n          if (_._deferredSectionTargets[i].target == target) {\n            _._deferredSectionTargets[i].splice(i, 1);\n            break;\n          }\n        }\n      }\n    };\n\n    // helpers\n    _._callSectionWith = function (section, method, container, thisContext) {\n      if (typeof section[method] === 'function') {\n        try {\n          if (thisContext) {\n            section[method].bind(thisContext)(container);\n          } else {\n            section[method](container);\n          }\n        } catch (ex) {\n          var sectionType = container.dataset['sectionType'];\n          console.log(\"Theme warning: '\".concat(method, \"' failed for section '\").concat(sectionType, \"'\"));\n          console.debug(container, ex.stack);\n        }\n      }\n    };\n\n    _._themeSectionTargetFromShopifySectionTarget = function (target) {\n      var $target = $('[data-section-type]:first', target);\n      if ($target.length > 0) {\n        return $target[0];\n      } else {\n        return false;\n      }\n    };\n\n    _._sectionForTarget = function (target) {\n      var type = $(target).attr('data-section-type');\n      for (var i = 0; i < _._sections.length; i++) {\n        if (_._sections[i].type == type) {\n          return _._sections[i];\n        }\n      }\n      return false;\n    };\n\n    _._sectionAlreadyRegistered = function (type) {\n      for (var i = 0; i < _._sections.length; i++) {\n        if (_._sections[i].type == type) {\n          return true;\n        }\n      }\n      return false;\n    };\n  }();\n  class ccComponent {\n    constructor(name) {var cssSelector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \".cc-\".concat(name);\n      var _this = this;\n      this.instances = [];\n\n      // Initialise any instance of this component within a section\n      $(document).on('cc:component:load', function (event, component, target) {\n        if (component === name) {\n          $(target).find(\"\".concat(cssSelector, \":not(.cc-initialized)\")).each(function () {\n            _this.init(this);\n          });\n        }\n      });\n\n      // Destroy any instance of this component within a section\n      $(document).on('cc:component:unload', function (event, component, target) {\n        if (component === name) {\n          $(target).find(cssSelector).each(function () {\n            _this.destroy(this);\n          });\n        }\n      });\n\n      // Initialise any instance of this component\n      $(cssSelector).each(function () {\n        _this.init(this);\n      });\n    }\n\n    init(container) {\n      $(container).addClass('cc-initialized');\n    }\n\n    destroy(container) {\n      $(container).removeClass('cc-initialized');\n    }\n\n    registerInstance(container, instance) {\n      this.instances.push({\n        container,\n        instance });\n\n    }\n\n    destroyInstance(container) {\n      this.instances = this.instances.filter(item => {\n        if (item.container === container) {\n          if (typeof item.instance.destroy === 'function') {\n            item.instance.destroy();\n          }\n\n          return item.container !== container;\n        }\n      });\n    }}\n\n  (function () {\n    function throttle(callback, threshold) {\n      var debounceTimeoutId = -1;\n      var tick = false;\n\n      return function () {\n        clearTimeout(debounceTimeoutId);\n        debounceTimeoutId = setTimeout(callback, threshold);\n\n        if (!tick) {\n          callback.call();\n          tick = true;\n          setTimeout(function () {\n            tick = false;\n          }, threshold);\n        }\n      };\n    }\n\n    var scrollEvent = document.createEvent('Event');\n    scrollEvent.initEvent('throttled-scroll', true, true);\n\n    window.addEventListener(\"scroll\", throttle(function () {\n      window.dispatchEvent(scrollEvent);\n    }, 200));\n\n  })();\n  theme.Shopify = {\n    formatMoney: function formatMoney(t, r) {\n      function e(t, r) {\n        return void 0 === t ? r : t;\n      }\n      function a(t, r, a, o) {\n        if (r = e(r, 2),\n        a = e(a, \",\"),\n        o = e(o, \".\"),\n        isNaN(t) || null == t)\n        return 0;\n        t = (t / 100).toFixed(r);\n        var n = t.split(\".\");\n        return n[0].replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, \"$1\" + a) + (n[1] ? o + n[1] : \"\");\n      }\n      \"string\" == typeof t && (t = t.replace(\".\", \"\"));\n      var o = \"\",\n      n = /\\{\\{\\s*(\\w+)\\s*\\}\\}/,\n      i = r || this.money_format;\n      switch (i.match(n)[1]) {\n        case \"amount\":\n          o = a(t, 2);\n          break;\n        case \"amount_no_decimals\":\n          o = a(t, 0);\n          break;\n        case \"amount_with_comma_separator\":\n          o = a(t, 2, \".\", \",\");\n          break;\n        case \"amount_with_space_separator\":\n          o = a(t, 2, \" \", \",\");\n          break;\n        case \"amount_with_period_and_space_separator\":\n          o = a(t, 2, \" \", \".\");\n          break;\n        case \"amount_no_decimals_with_comma_separator\":\n          o = a(t, 0, \".\", \",\");\n          break;\n        case \"amount_no_decimals_with_space_separator\":\n          o = a(t, 0, \" \", \"\");\n          break;\n        case \"amount_with_apostrophe_separator\":\n          o = a(t, 2, \"'\", \".\");\n          break;\n        case \"amount_with_decimal_separator\":\n          o = a(t, 2, \".\", \".\");}\n\n      return i.replace(n, o);\n    },\n    formatImage: function formatImage(originalImageUrl, format) {\n      return originalImageUrl ? originalImageUrl.replace(/^(.*)\\.([^\\.]*)$/g, '$1_' + format + '.$2') : '';\n    },\n    Image: {\n      imageSize: function imageSize(t) {\n        var e = t.match(/.+_((?:pico|icon|thumb|small|compact|medium|large|grande)|\\d{1,4}x\\d{0,4}|x\\d{1,4})[_\\.@]/);\n        return null !== e ? e[1] : null;\n      },\n      getSizedImageUrl: function getSizedImageUrl(t, e) {\n        if (null == e)\n        return t;\n        if (\"master\" == e)\n        return this.removeProtocol(t);\n        var o = t.match(/\\.(jpg|jpeg|gif|png|bmp|bitmap|tiff|tif)(\\?v=\\d+)?$/i);\n        if (null != o) {\n          var i = t.split(o[0]),\n          r = o[0];\n          return this.removeProtocol(i[0] + \"_\" + e + r);\n        }\n        return null;\n      },\n      removeProtocol: function removeProtocol(t) {\n        return t.replace(/http(s)?:/, \"\");\n      } } };\n\n\n  theme.Disclosure = function () {\n    var selectors = {\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      this.$container = $disclosure;\n      this.cache = {};\n      this._cacheSelectors();\n      this._connectOptions();\n      this._connectToggle();\n      this._onFocusOut();\n    }\n\n    Disclosure.prototype = $.extend({}, Disclosure.prototype, {\n      _cacheSelectors: function _cacheSelectors() {\n        this.cache = {\n          $disclosureList: this.$container.find(selectors.disclosureList),\n          $disclosureToggle: this.$container.find(selectors.disclosureToggle),\n          $disclosureInput: this.$container.find(selectors.disclosureInput),\n          $disclosureOptions: this.$container.find(selectors.disclosureOptions) };\n\n      },\n\n      _connectToggle: function _connectToggle() {\n        this.cache.$disclosureToggle.on(\n        'click',\n        function (evt) {\n          var ariaExpanded =\n          $(evt.currentTarget).attr('aria-expanded') === 'true';\n          $(evt.currentTarget).attr('aria-expanded', !ariaExpanded);\n\n          this.cache.$disclosureList.toggleClass(classes.listVisible);\n        }.bind(this));\n\n      },\n\n      _connectOptions: function _connectOptions() {\n        this.cache.$disclosureOptions.on(\n        'click',\n        function (evt) {\n          evt.preventDefault();\n          this._submitForm($(evt.currentTarget).data('value'));\n        }.bind(this));\n\n      },\n\n      _onFocusOut: function _onFocusOut() {\n        this.cache.$disclosureToggle.on(\n        'focusout',\n        function (evt) {\n          var disclosureLostFocus =\n          this.$container.has(evt.relatedTarget).length === 0;\n\n          if (disclosureLostFocus) {\n            this._hideList();\n          }\n        }.bind(this));\n\n\n        this.cache.$disclosureList.on(\n        'focusout',\n        function (evt) {\n          var childInFocus =\n          $(evt.currentTarget).has(evt.relatedTarget).length > 0;\n          var isVisible = this.cache.$disclosureList.hasClass(\n          classes.listVisible);\n\n\n          if (isVisible && !childInFocus) {\n            this._hideList();\n          }\n        }.bind(this));\n\n\n        this.$container.on(\n        'keyup',\n        function (evt) {\n          if (evt.which !== 27) return; // escape\n          this._hideList();\n          this.cache.$disclosureToggle.focus();\n        }.bind(this));\n\n\n        this.bodyOnClick = function (evt) {\n          var isOption = this.$container.has(evt.target).length > 0;\n          var isVisible = this.cache.$disclosureList.hasClass(\n          classes.listVisible);\n\n\n          if (isVisible && !isOption) {\n            this._hideList();\n          }\n        }.bind(this);\n\n        $('body').on('click', this.bodyOnClick);\n      },\n\n      _submitForm: function _submitForm(value) {\n        this.cache.$disclosureInput.val(value);\n        this.$container.parents('form').submit();\n      },\n\n      _hideList: function _hideList() {\n        this.cache.$disclosureList.removeClass(classes.listVisible);\n        this.cache.$disclosureToggle.attr('aria-expanded', false);\n      },\n\n      unload: function unload() {\n        $('body').off('click', this.bodyOnClick);\n        this.cache.$disclosureOptions.off();\n        this.cache.$disclosureToggle.off();\n        this.cache.$disclosureList.off();\n        this.$container.off();\n      } });\n\n\n    return Disclosure;\n  }();\n  // Loading third party scripts\n  theme.scriptsLoaded = {};\n  theme.loadScriptOnce = function (src, callback, beforeRun, sync) {\n    if (typeof theme.scriptsLoaded[src] === 'undefined') {\n      theme.scriptsLoaded[src] = [];\n      var tag = document.createElement('script');\n      tag.src = src;\n\n      if (sync || beforeRun) {\n        tag.async = false;\n      }\n\n      if (beforeRun) {\n        beforeRun();\n      }\n\n      if (typeof callback === 'function') {\n        theme.scriptsLoaded[src].push(callback);\n        if (tag.readyState) {// IE, incl. IE9\n          tag.onreadystatechange = function () {\n            if (tag.readyState == \"loaded\" || tag.readyState == \"complete\") {\n              tag.onreadystatechange = null;\n              for (var i = 0; i < theme.scriptsLoaded[this].length; i++) {\n                theme.scriptsLoaded[this][i]();\n              }\n              theme.scriptsLoaded[this] = true;\n            }\n          }.bind(src);\n        } else {\n          tag.onload = function () {// Other browsers\n            for (var i = 0; i < theme.scriptsLoaded[this].length; i++) {\n              theme.scriptsLoaded[this][i]();\n            }\n            theme.scriptsLoaded[this] = true;\n          }.bind(src);\n        }\n      }\n\n      var firstScriptTag = document.getElementsByTagName('script')[0];\n      firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n      return true;\n    } else if (typeof theme.scriptsLoaded[src] === 'object' && typeof callback === 'function') {\n      theme.scriptsLoaded[src].push(callback);\n    } else {\n      if (typeof callback === 'function') {\n        callback();\n      }\n      return false;\n    }\n  };\n\n  theme.loadStyleOnce = function (src) {\n    var srcWithoutProtocol = src.replace(/^https?:/, '');\n    if (!document.querySelector('link[href=\"' + encodeURI(srcWithoutProtocol) + '\"]')) {\n      var tag = document.createElement('link');\n      tag.href = srcWithoutProtocol;\n      tag.rel = 'stylesheet';\n      tag.type = 'text/css';\n      var firstTag = document.getElementsByTagName('link')[0];\n      firstTag.parentNode.insertBefore(tag, firstTag);\n    }\n  };theme.cartNoteMonitor = {\n    load: function load($notes) {\n      $notes.on('change.themeCartNoteMonitor paste.themeCartNoteMonitor keyup.themeCartNoteMonitor', function () {\n        theme.cartNoteMonitor.postUpdate($(this).val());\n      });\n    },\n\n    unload: function unload($notes) {\n      $notes.off('.themeCartNoteMonitor');\n    },\n\n    updateThrottleTimeoutId: -1,\n    updateThrottleInterval: 500,\n\n    postUpdate: function postUpdate(val) {\n      clearTimeout(theme.cartNoteMonitor.updateThrottleTimeoutId);\n      theme.cartNoteMonitor.updateThrottleTimeoutId = setTimeout(function () {\n        $.post(theme.routes.cart_url + '/update.js', {\n          note: val },\n        function (data) {}, 'json');\n      }, theme.cartNoteMonitor.updateThrottleInterval);\n    } };\n\n  class CustomSelectInstance {\n    constructor(el) {\n      this.el = el;\n      this.button = el.querySelector('.cc-select__btn');\n      this.listbox = el.querySelector('.cc-select__listbox');\n      this.options = el.querySelectorAll('.cc-select__option');\n      this.selectedOption = el.querySelector('[aria-selected=\"true\"]');\n      this.nativeSelect = document.getElementById(\"\".concat(el.id, \"-native\"));\n      this.swatches = 'swatch' in this.options[this.options.length - 1].dataset;\n      this.focusedClass = 'is-focused';\n      this.searchString = '';\n      this.listboxOpen = false;\n\n      // Set the selected option\n      if (!this.selectedOption) {\n        this.selectedOption = this.listbox.firstElementChild;\n      }\n\n      this.bindEvents();\n      this.setButtonWidth();\n    }\n\n    bindEvents() {\n      this.el.addEventListener('keydown', this.handleKeydown.bind(this));\n      this.el.addEventListener('selectOption', this.handleSelectOption.bind(this));\n      this.button.addEventListener('mousedown', this.handleMousedown.bind(this));\n    }\n\n    /**\n     * Adds event listeners when the options list is visible\n     */\n    addListboxOpenEvents() {\n      this.mouseoverHandler = this.handleMouseover.bind(this);\n      this.mouseleaveHandler = this.handleMouseleave.bind(this);\n      this.clickHandler = this.handleClick.bind(this);\n      this.blurHandler = this.handleBlur.bind(this);\n\n      this.listbox.addEventListener('mouseover', this.mouseoverHandler);\n      this.listbox.addEventListener('mouseleave', this.mouseleaveHandler);\n      this.listbox.addEventListener('click', this.clickHandler);\n      this.listbox.addEventListener('blur', this.blurHandler);\n    }\n\n    /**\n     * Removes event listeners added when the options list was visible\n     */\n    removeListboxOpenEvents() {\n      this.listbox.removeEventListener('mouseover', this.mouseoverHandler);\n      this.listbox.removeEventListener('mouseleave', this.mouseleaveHandler);\n      this.listbox.removeEventListener('click', this.clickHandler);\n      this.listbox.removeEventListener('blur', this.blurHandler);\n    }\n\n    /**\n     * Handles a 'keydown' event on the custom select element\n     * @param {Object} e - The event object\n     */\n    handleKeydown(e) {\n      if (this.listboxOpen) {\n        this.handleKeyboardNav(e);\n      } else if (e.key === 'ArrowUp' || e.key === 'ArrowDown' || e.key === ' ') {\n        e.preventDefault();\n        this.showListbox();\n      }\n    }\n\n    /**\n     * Handles a 'mousedown' event on the button element\n     * @param {Object} e - The event object\n     */\n    handleMousedown(e) {\n      if (!this.listboxOpen && e.button === 0) {\n        this.showListbox();\n      }\n    }\n\n    /**\n     * Handles a 'mouseover' event on the options list\n     * @param {Object} e - The event object\n     */\n    handleMouseover(e) {\n      if (e.target.matches('li')) {\n        this.focusOption(e.target);\n      }\n    }\n\n    /**\n     * Handles a 'mouseleave' event on the options list\n     */\n    handleMouseleave() {\n      this.focusOption(this.selectedOption);\n    }\n\n    /**\n     * Handles a 'click' event on the options list\n     * @param {Object} e - The event object\n     */\n    handleClick(e) {\n      if (e.target.matches('.js-option')) {\n        this.selectOption(e.target);\n      }\n    }\n\n    /**\n     * Handles a 'blur' event on the options list\n     */\n    handleBlur() {\n      if (this.listboxOpen) {\n        this.hideListbox();\n      }\n    }\n\n    /**\n     * Handles a 'keydown' event on the options list\n     * @param {Object} e - The event object\n     */\n    handleKeyboardNav(e) {\n      var optionToFocus;\n\n      // Disable tabbing if options list is open (as per native select element)\n      if (e.key === 'Tab') {\n        e.preventDefault();\n      }\n\n      switch (e.key) {\n        // Focus an option\n        case 'ArrowUp':\n        case 'ArrowDown':\n          e.preventDefault();\n\n          if (e.key === 'ArrowUp') {\n            optionToFocus = this.focusedOption.previousElementSibling;\n          } else {\n            optionToFocus = this.focusedOption.nextElementSibling;\n          }\n\n          if (optionToFocus && !optionToFocus.classList.contains('is-disabled')) {\n            this.focusOption(optionToFocus);\n          }\n          break;\n\n        // Select an option\n        case 'Enter':\n        case ' ':\n          e.preventDefault();\n          this.selectOption(this.focusedOption);\n          break;\n\n        // Cancel and close the options list\n        case 'Escape':\n          e.preventDefault();\n          this.hideListbox();\n          break;\n\n        // Search for an option and focus the first match (if one exists)\n        default:\n          optionToFocus = this.findOption(e.key);\n\n          if (optionToFocus) {\n            this.focusOption(optionToFocus);\n          }\n          break;}\n\n    }\n\n    /**\n     * Sets the button width to the same as the longest option, to prevent\n     * the button width from changing depending on the option selected\n     */\n    setButtonWidth() {\n      // Get the width of an element without side padding\n      var getUnpaddedWidth = el => {\n        var elStyle = getComputedStyle(el);\n        return parseFloat(elStyle.paddingLeft) + parseFloat(elStyle.paddingRight);\n      };\n\n      var buttonPadding = getUnpaddedWidth(this.button);\n      var optionPadding = getUnpaddedWidth(this.selectedOption);\n      var buttonBorder = this.button.offsetWidth - this.button.clientWidth;\n      var optionWidth = Math.ceil(this.selectedOption.getBoundingClientRect().width);\n\n      this.button.style.width = \"\".concat(optionWidth - optionPadding + buttonPadding + buttonBorder, \"px\");\n    }\n\n    /**\n     * Shows the options list\n     */\n    showListbox() {\n      this.listbox.hidden = false;\n      this.listboxOpen = true;\n\n      this.el.classList.add('is-open');\n      this.button.setAttribute('aria-expanded', 'true');\n      this.listbox.setAttribute('aria-hidden', 'false');\n\n      // Slight delay required to prevent blur event being fired immediately\n      setTimeout(() => {\n        this.focusOption(this.selectedOption);\n        this.listbox.focus();\n\n        this.addListboxOpenEvents();\n      }, 10);\n    }\n\n    /**\n     * Hides the options list\n     */\n    hideListbox() {\n      if (!this.listboxOpen) return;\n\n      this.listbox.hidden = true;\n      this.listboxOpen = false;\n\n      this.el.classList.remove('is-open');\n      this.button.setAttribute('aria-expanded', 'false');\n      this.listbox.setAttribute('aria-hidden', 'true');\n\n      if (this.focusedOption) {\n        this.focusedOption.classList.remove(this.focusedClass);\n        this.focusedOption = null;\n      }\n\n      this.button.focus();\n      this.removeListboxOpenEvents();\n    }\n\n    /**\n     * Finds a matching option from a typed string\n     * @param {string} key - The key pressed\n     * @returns {?HTMLElement}\n     */\n    findOption(key) {\n      this.searchString += key;\n\n      // If there's a timer already running, clear it\n      if (this.searchTimer) {\n        clearTimeout(this.searchTimer);\n      }\n\n      // Wait 500ms to see if another key is pressed, if not then clear the search string\n      this.searchTimer = setTimeout(() => {\n        this.searchString = '';\n      }, 500);\n\n      // Find an option that contains the search string (if there is one)\n      var matchingOption = [...this.options].find(option => {\n        var label = option.innerText.toLowerCase();\n        return label.includes(this.searchString) && !option.classList.contains('is-disabled');\n      });\n\n      return matchingOption;\n    }\n\n    /**\n     * Focuses an option\n     * @param {HTMLElement} option - The <li> element of the option to focus\n     */\n    focusOption(option) {\n      // Remove focus on currently focused option (if there is one)\n      if (this.focusedOption) {\n        this.focusedOption.classList.remove(this.focusedClass);\n      }\n\n      // Set focus on the option\n      this.focusedOption = option;\n      this.focusedOption.classList.add(this.focusedClass);\n\n      // If option is out of view, scroll the list\n      if (this.listbox.scrollHeight > this.listbox.clientHeight) {\n        var scrollBottom = this.listbox.clientHeight + this.listbox.scrollTop;\n        var optionBottom = option.offsetTop + option.offsetHeight;\n\n        if (optionBottom > scrollBottom) {\n          this.listbox.scrollTop = optionBottom - this.listbox.clientHeight;\n        } else if (option.offsetTop < this.listbox.scrollTop) {\n          this.listbox.scrollTop = option.offsetTop;\n        }\n      }\n    }\n\n    /**\n     * Handles a 'selectOption' event on the custom select element\n     * @param {Object} e - The event object (pass value in detail.value)\n     */\n    handleSelectOption(e) {\n      var matchingOption = [...this.options].find(option => option.dataset.value === e.detail.value);\n      if (matchingOption) {\n        this.selectOption(matchingOption);\n      }\n    }\n\n    /**\n     * Selects an option\n     * @param {HTMLElement} option - The option <li> element\n     */\n    selectOption(option) {\n      if (option !== this.selectedOption) {\n        // Switch aria-selected attribute to selected option\n        option.setAttribute('aria-selected', 'true');\n        this.selectedOption.setAttribute('aria-selected', 'false');\n\n        // Update swatch colour in the button\n        if (this.swatches) {\n          if (option.dataset.swatch) {\n            this.button.dataset.swatch = option.dataset.swatch;\n          } else {\n            this.button.removeAttribute('data-swatch');\n          }\n        }\n\n        // Update the button text and set the option as active\n        this.button.firstChild.textContent = option.firstElementChild.textContent;\n        this.listbox.setAttribute('aria-activedescendant', option.id);\n        this.selectedOption = document.getElementById(option.id);\n\n        // If a native select element exists, update its selected value and trigger a 'change' event\n        if (this.nativeSelect) {\n          this.nativeSelect.value = option.dataset.value;\n          this.nativeSelect.dispatchEvent(new Event('change', { bubbles: true }));\n        } else {\n          // Trigger a 'change' event on the custom select element\n          var detail = { selectedValue: option.dataset.value };\n          this.el.dispatchEvent(new CustomEvent('change', { bubbles: true, detail }));\n        }\n      }\n\n      this.hideListbox();\n    }}\n\n\n  class CustomSelect extends ccComponent {\n    constructor() {var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'custom-select';var cssSelector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \".cc-select\";\n      super(name, cssSelector);\n    }\n\n    init(container) {\n      super.init(container);\n      this.registerInstance(container, new CustomSelectInstance(container));\n    }\n\n    destroy(container) {\n      this.destroyInstance(container);\n      super.destroy(container);\n    }}\n\n\n  new CustomSelect();\n  class FacetFiltersInstance {\n    constructor(el) {\n      this.filteringEnabled = el.dataset.filtering === 'true';\n      this.sortingEnabled = el.dataset.sorting === 'true';\n\n      this.filtersControl = document.querySelector('.cc-filters-control');\n      this.filtersContainer = document.querySelector('.cc-filters-container');\n      this.results = document.querySelector('.cc-filters-results');\n\n      if (this.filteringEnabled) {\n        this.filters = document.querySelector('.cc-filters');\n        this.filtersFooter = document.querySelector('.cc-filters__footer');\n        this.activeFilters = document.querySelector('.cc-active-filters');\n        this.clearFiltersBtn = document.querySelector('.js-clear-filters');\n      }\n\n      if (this.sortingEnabled) {\n        this.sortBy = document.querySelector('.cc-filter--sort');\n        this.activeSortText = document.querySelector('.cc-sort-selected');\n      }\n\n      this.utils = {\n        hidden: 'is-hidden',\n        loading: 'is-loading',\n        open: 'is-open',\n        filtersOpen: 'filters-open' };\n\n\n      if (this.filteringEnabled && !this.filtersFooter.classList.contains(this.utils.hidden)) {\n        this.filters.style.height = \"calc(100% - \".concat(this.filtersFooter.offsetHeight, \"px)\");\n      }\n\n      this.bindEvents();\n    }\n\n    bindEvents() {\n      this.filtersControl.addEventListener('click', this.handleControlClick.bind(this));\n      this.filtersContainer.addEventListener('click', this.handleFiltersClick.bind(this));\n      this.filtersContainer.addEventListener('input', this.debounce(this.handleFilterChange.bind(this), 500));\n\n      if (this.filteringEnabled) {\n        if (document.querySelector('.cc-price-range')) {\n          this.filtersContainer.addEventListener('change', this.debounce(this.handleFilterChange.bind(this), 500));\n        }\n\n        this.activeFilters.addEventListener('click', this.handleActiveFiltersClick.bind(this));\n      }\n\n      document.addEventListener('click', this.handleClickOutside.bind(this));\n      window.addEventListener('popstate', this.handleHistoryChange.bind(this));\n    }\n\n    debounce(fn, wait) {var _this2 = this;\n      var timer;\n\n      return function () {for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {args[_key] = arguments[_key];}\n        clearTimeout(timer);\n        timer = setTimeout(() => fn.apply(_this2, args), wait);\n      };\n    }\n\n    /**\n     * Handles 'click' event on the filter/sort buttons (mobile only)\n     * @param {Object} e - The event object\n     */\n    handleControlClick(e) {\n      if (!e.target.matches('.cc-filters-control__btn')) return;\n      document.body.classList.add(this.utils.filtersOpen);\n\n      if (e.target.matches('.js-show-filters')) {\n        this.filters.classList.add(this.utils.open);\n      } else {\n        this.sortBy.open = true;\n\n        // Slight delay required before starting transition\n        setTimeout(() => {\n          this.sortBy.classList.add(this.utils.open);\n        }, 10);\n      }\n    }\n\n    /**\n     * Handles 'click' event on the filters container\n     * @param {Object} e - The event object\n     */\n    handleFiltersClick(e) {\n      var { target } = e;\n      var filter = target.closest('.cc-filter');\n\n      // Filter 'clear' button clicked\n      if (target.matches('.cc-filter-clear-btn')) {\n        e.preventDefault();\n        this.applyFilters(new URL(e.target.href).searchParams.toString(), e);\n        return;\n      }\n\n      // Filters/Sort 'close' button, '[x] results' button or 'apply' button clicked (mobile only)\n      if (target.matches('.js-close-filters')) {\n        if (filter) {\n          // Delay to allow for filter closing transition\n          setTimeout(() => {\n            filter.classList.remove(this.utils.open);\n            filter.open = false;\n          }, 300);\n        }\n\n        if (this.filteringEnabled) {\n          this.filters.classList.remove(this.utils.open);\n        }\n\n        document.body.classList.remove(this.utils.filtersOpen);\n        return;\n      }\n\n      if (target.matches('.cc-filter__toggle') || target.matches('.cc-filter-back-btn')) {\n        var openFilter = document.querySelector(\".cc-filter[open]:not([data-index=\\\"\".concat(filter.dataset.index, \"\\\"])\"));\n\n        // If a filter was opened (tablet/desktop) and there's one already open, close it\n        if (openFilter) {\n          this.closeFilter(openFilter, false);\n        }\n\n        // Open/close the filter, class added to allow for css transition\n        if (!filter.classList.contains(this.utils.open)) {\n          setTimeout(() => {\n            filter.classList.add(this.utils.open);\n          }, 10);\n        } else {\n          e.preventDefault();\n          this.closeFilter(filter);\n        }\n      }\n    }\n\n    /**\n     * Handles 'click' event outside the filters (tablet/desktop)\n     * @param {Object} e - The event object\n     */\n    handleClickOutside(e) {\n      var openFilter = document.querySelector(\".cc-filter.\".concat(this.utils.open));\n\n      // If there's a filter open and the click event wasn't on it, close it (tablet/desktop)\n      if (openFilter) {\n        var filter = e.target.closest('.cc-filter');\n\n        if (!filter || filter !== openFilter) {\n          this.closeFilter(openFilter);\n        }\n      }\n    }\n\n    /**\n     * Handles 'input' and 'change' events on the filters and sort by\n     * @param {Object} e - The event object\n     */\n    handleFilterChange(e) {\n      // Ignore 'change' events not triggered by user moving the price range slider\n      if (e.type === 'change' && (!e.detail || e.detail.sender !== 'theme:component:price_range')) return;\n\n      // If price min/max input value changed, dispatch 'change' event to trigger update of the slider\n      if (e.type === 'input' && e.target.classList.contains('cc-price-range__input')) {\n        e.target.dispatchEvent(new Event('change', { bubbles: true }));\n      }\n\n      var formData = new FormData(document.getElementById('filters'));\n      var searchParams = new URLSearchParams(formData);\n\n      this.applyFilters(searchParams.toString(), e);\n    }\n\n    /**\n     * Handles 'click' event on the active filters\n     * @param {Object} e - The event object\n     */\n    handleActiveFiltersClick(e) {\n      e.preventDefault();\n\n      if (e.target.tagName === 'A') {\n        this.applyFilters(new URL(e.target.href).searchParams.toString(), e);\n      }\n    }\n\n    /**\n     * Handles history changes (e.g. back button clicked)\n     * @param {Object} e - The event object\n     */\n    handleHistoryChange(e) {\n      var searchParams = '';\n\n      if (e.state && e.state.searchParams) {\n        searchParams = e.state.searchParams;\n      }\n\n      this.applyFilters(searchParams, null, false);\n    }\n\n    /**\n     * Fetches the filtered/sorted page data and updates the current page\n     * @param {string} searchParams - The filter/sort search parameters\n     * @param {Object} e - The event object\n     * @param {boolean} [updateUrl=true] - Whether to update the url with the selected filter/sort options\n     */\n    applyFilters(searchParams, e) {var updateUrl = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      this.results.classList.add(this.utils.loading);\n\n      fetch(\"\".concat(window.location.pathname, \"?\").concat(searchParams)).\n      then(response => response.text()).\n      then(responseText => {\n        var html = responseText;\n        // Note: DOMParser.parseFromString behaviour is broken in iOS 15, returning incomplete content when referenced immediately\n        var fetchedHTML = document.implementation.createHTMLDocument();\n        fetchedHTML.documentElement.innerHTML = html;\n\n        if (fetchedHTML.querySelector('.cc-facet-filters')) {\n          this.updateFilters(fetchedHTML, e);\n        }\n        this.results.innerHTML = fetchedHTML.querySelector('.cc-filters-results').innerHTML;\n        document.dispatchEvent(new CustomEvent('filters-applied', { bubbles: true }));\n        this.results.classList.remove(this.utils.loading);\n      });\n\n      if (updateUrl) {\n        this.updateURL(searchParams);\n      }\n    }\n\n    /**\n     * Updates the filters relevant to the fetched data\n     * @param {html} fetchedHTML - HTML of the fetched page\n     * @param {Object} e - The event object\n     */\n    updateFilters(fetchedHTML, e) {\n      // Update the Filter/Sort buttons (mobile only)\n      this.filtersControl.innerHTML = fetchedHTML.querySelector('.cc-filters-control').innerHTML;\n\n      // Update the 'selected' option in the 'Sort by' dropdown button (tablet/desktop)\n      if (e && e.target.name === 'sort_by') {\n        this.activeSortText.textContent = e.target.nextElementSibling.textContent;\n      }\n\n      if (!this.filteringEnabled) return;\n\n      document.querySelectorAll('.cc-filter').forEach(filter => {\n        var { index } = filter.dataset;\n        if (index === '0') return; // Sort by\n\n        var fetchedFilter = fetchedHTML.querySelector(\".cc-filter[data-index=\\\"\".concat(index, \"\\\"]\"));\n\n        if (filter.dataset.type === 'price_range') {\n          this.updateFilter(filter, fetchedFilter, false);\n\n          if (!e || e.target.tagName !== 'INPUT') {\n            // Update price fields and trigger update of slider\n            filter.querySelectorAll('input').forEach(input => {\n              input.value = fetchedHTML.getElementById(input.id).value;\n              input.dispatchEvent(new CustomEvent('change', { bubbles: true, detail: { sender: 'reset' } }));\n            });\n          }\n        } else {\n          if (e && e.target.tagName === 'INPUT') {\n            var changedFilter = e.target.closest('.cc-filter');\n\n            this.updateFilter(filter, fetchedFilter, filter.dataset.index !== changedFilter.dataset.index);\n          } else {\n            this.updateFilter(filter, fetchedFilter, true);\n          }\n        }\n      });\n\n      // Update the active filters\n      this.updateActiveFilters(fetchedHTML);\n\n      // Update the 'Clear all' button visibility (mobile only)\n      this.clearFiltersBtn.hidden = fetchedHTML.querySelector('.js-clear-filters').hidden;\n\n      // Update the '[x] results' button (mobile only)\n      var footerEl = fetchedHTML.querySelector('.cc-filters__footer');\n      var footerHidden = footerEl.classList.contains(this.utils.hidden);\n      this.filtersFooter.innerHTML = footerEl.innerHTML;\n      this.filtersFooter.classList.toggle(this.utils.hidden, footerHidden);\n      this.filters.style.height = footerHidden ? null : \"calc(100% - \".concat(this.filtersFooter.offsetHeight, \"px)\");\n    }\n\n    /**\n     * Updates a filter\n     * @param {HTMLElement} filter - The filter element\n     * @param {HTMLElement} fetchedFilter - The fetched filter element\n     * @param {boolean} updateAll - Whether to update all filter markup or just toggle/header\n     */\n    updateFilter(filter, fetchedFilter, updateAll) {\n      if (updateAll) {\n        filter.innerHTML = fetchedFilter.innerHTML;\n      } else {\n        // Update toggle and header only\n        filter.replaceChild(fetchedFilter.querySelector('.cc-filter__toggle'), filter.querySelector('.cc-filter__toggle'));\n        filter.querySelector('.cc-filter__header').innerHTML = fetchedFilter.querySelector('.cc-filter__header').innerHTML;\n      }\n    }\n\n    /**\n     * Updates the active filter\n     * @param {html} fetchedHTML - HTML of the fetched page\n     */\n    updateActiveFilters(fetchedHTML) {\n      var activeFilters = fetchedHTML.querySelector('.cc-active-filters');\n\n      this.activeFilters.innerHTML = activeFilters.innerHTML;\n      this.activeFilters.hidden = !this.activeFilters.querySelector('.cc-active-filter');\n    }\n\n    /**\n     * Updates the url with the current filter/sort parameters\n     * @param {string} searchParams - The filter/sort parameters\n     */\n    updateURL(searchParams) {\n      history.pushState({ searchParams }, '', \"\".concat(window.location.pathname).concat(searchParams && '?'.concat(searchParams)));\n    }\n\n    /**\n     * Closes a filter\n     * @param {HTMLElement} filter - The filter element\n     * @param {boolean} [delay=true] - Whether to wait for the css transition\n     */\n    closeFilter(filter) {var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      clearTimeout(this.closeTimer);\n      filter.classList.remove(this.utils.open);\n\n      // Delay to allow for filter closing transition\n      this.closeTimer = setTimeout(() => {\n        filter.open = false;\n      }, delay ? 300 : null);\n    }}\n\n\n  class FacetFilters extends ccComponent {\n    constructor() {var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'facet-filters';var cssSelector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \".cc-facet-filters\";\n      super(name, cssSelector);\n    }\n\n    init(container) {\n      super.init(container);\n      this.registerInstance(container, new FacetFiltersInstance(container));\n    }\n\n    destroy(container) {\n      this.destroyInstance(container);\n      super.destroy(container);\n    }}\n\n\n  new FacetFilters();\n\n\n  class PriceRangeInstance {\n    constructor(container) {\n      this.container = container;\n\n      this.selectors = {\n        inputMin: '.cc-price-range__input--min',\n        inputMax: '.cc-price-range__input--max',\n        control: '.cc-price-range__control',\n        controlMin: '.cc-price-range__control--min',\n        controlMax: '.cc-price-range__control--max',\n        bar: '.cc-price-range__bar',\n        activeBar: '.cc-price-range__bar-active' };\n\n\n      this.controls = {\n        min: {\n          barControl: container.querySelector(this.selectors.controlMin),\n          input: container.querySelector(this.selectors.inputMin) },\n\n        max: {\n          barControl: container.querySelector(this.selectors.controlMax),\n          input: container.querySelector(this.selectors.inputMax) } };\n\n\n\n      this.controls.min.value = parseInt(\n      this.controls.min.input.value === '' ? this.controls.min.input.placeholder : this.controls.min.input.value);\n\n\n      this.controls.max.value = parseInt(\n      this.controls.max.input.value === '' ? this.controls.max.input.placeholder : this.controls.max.input.value);\n\n\n      this.valueMin = this.controls.min.input.min;\n      this.valueMax = this.controls.min.input.max;\n      this.valueRange = this.valueMax - this.valueMin;\n\n      [this.controls.min, this.controls.max].forEach(item => {\n        item.barControl.setAttribute('aria-valuemin', this.valueMin);\n        item.barControl.setAttribute('aria-valuemax', this.valueMax);\n      });\n\n      this.controls.min.barControl.setAttribute('aria-valuenow', this.controls.min.value);\n      this.controls.max.barControl.setAttribute('aria-valuenow', this.controls.max.value);\n\n      this.bar = container.querySelector(this.selectors.bar);\n      this.activeBar = container.querySelector(this.selectors.activeBar);\n      this.inDrag = false;\n\n      this.bindEvents();\n      this.render();\n    }\n\n    getPxToValueRatio() {\n      return this.bar.clientWidth / (this.valueMax - this.valueMin);\n    }\n\n    getPcToValueRatio() {\n      return 100.0 / (this.valueMax - this.valueMin);\n    }\n\n    setActiveControlValue(value, reset) {\n      // Clamp & default\n      if (this.activeControl === this.controls.min) {\n        if (value === '') {\n          value = this.valueMin;\n        }\n\n        value = Math.max(this.valueMin, value);\n        value = Math.min(value, this.controls.max.value);\n      } else {\n        if (value === '') {\n          value = this.valueMax;\n        }\n\n        value = Math.min(this.valueMax, value);\n        value = Math.max(value, this.controls.min.value);\n      }\n\n      // Round\n      this.activeControl.value = Math.round(value);\n\n      // Update input\n      if (this.activeControl.input.value != this.activeControl.value) {\n        if (this.activeControl.value == this.activeControl.input.placeholder) {\n          this.activeControl.input.value = '';\n        } else {\n          this.activeControl.input.value = this.activeControl.value;\n        }\n\n        if (!reset) {\n          this.activeControl.input.dispatchEvent(\n          new CustomEvent('change', { bubbles: true, detail: { sender: 'theme:component:price_range' } }));\n\n        }\n      }\n\n      // A11y\n      this.activeControl.barControl.setAttribute('aria-valuenow', this.activeControl.value);\n    }\n\n    render() {\n      this.drawControl(this.controls.min);\n      this.drawControl(this.controls.max);\n      this.drawActiveBar();\n    }\n\n    drawControl(control) {\n      control.barControl.style.left = \"\".concat((control.value - this.valueMin) * this.getPcToValueRatio(), \"%\");\n    }\n\n    drawActiveBar() {\n      this.activeBar.style.left = \"\".concat((this.controls.min.value - this.valueMin) * this.getPcToValueRatio(), \"%\");\n      this.activeBar.style.right = \"\".concat((this.valueMax - this.controls.max.value) * this.getPcToValueRatio(), \"%\");\n    }\n\n    handleControlTouchStart(e) {\n      e.preventDefault();\n      this.startDrag(e.target, e.touches[0].clientX);\n      this.boundControlTouchMoveEvent = this.handleControlTouchMove.bind(this);\n      this.boundControlTouchEndEvent = this.handleControlTouchEnd.bind(this);\n      window.addEventListener('touchmove', this.boundControlTouchMoveEvent);\n      window.addEventListener('touchend', this.boundControlTouchEndEvent);\n    }\n\n    handleControlTouchMove(e) {\n      this.moveDrag(e.touches[0].clientX);\n    }\n\n    handleControlTouchEnd(e) {\n      e.preventDefault();\n      window.removeEventListener('touchmove', this.boundControlTouchMoveEvent);\n      window.removeEventListener('touchend', this.boundControlTouchEndEvent);\n      this.stopDrag();\n    }\n\n    handleControlMouseDown(e) {\n      e.preventDefault();\n      this.startDrag(e.target, e.clientX);\n      this.boundControlMouseMoveEvent = this.handleControlMouseMove.bind(this);\n      this.boundControlMouseUpEvent = this.handleControlMouseUp.bind(this);\n      window.addEventListener('mousemove', this.boundControlMouseMoveEvent);\n      window.addEventListener('mouseup', this.boundControlMouseUpEvent);\n    }\n\n    handleControlMouseMove(e) {\n      this.moveDrag(e.clientX);\n    }\n\n    handleControlMouseUp(e) {\n      e.preventDefault();\n      window.removeEventListener('mousemove', this.boundControlMouseMoveEvent);\n      window.removeEventListener('mouseup', this.boundControlMouseUpEvent);\n      this.stopDrag();\n    }\n\n    startDrag(target, startX) {\n      this.activeControl = this.controls.min.barControl === target ? this.controls.min : this.controls.max;\n      this.dragStartX = startX;\n      this.dragStartValue = this.activeControl.value;\n      this.inDrag = true;\n    }\n\n    moveDrag(moveX) {\n      if (this.inDrag) {\n        var value = this.dragStartValue + (moveX - this.dragStartX) / this.getPxToValueRatio();\n        this.setActiveControlValue(value);\n        this.render();\n      }\n    }\n\n    stopDrag() {\n      this.inDrag = false;\n    }\n\n    handleInputChange(e) {\n      if (e.target.tagName !== 'INPUT') return;\n\n      if (!e.detail || e.detail.sender !== 'theme:component:price_range') {\n        var reset = e.detail && e.detail.sender === 'reset';\n\n        this.activeControl = this.controls.min.input === e.target ? this.controls.min : this.controls.max;\n        this.setActiveControlValue(e.target.value, reset);\n        this.render();\n      }\n    }\n\n    bindEvents() {\n      [this.controls.min, this.controls.max].forEach(item => {\n        item.barControl.addEventListener('touchstart', this.handleControlTouchStart.bind(this));\n        item.barControl.addEventListener('mousedown', this.handleControlMouseDown.bind(this));\n      });\n\n      this.container.addEventListener('change', this.handleInputChange.bind(this));\n    }\n\n    destroy() {}}\n\n\n  class PriceRange extends ccComponent {\n    constructor() {var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'price-range';var cssSelector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \".cc-\".concat(name);\n      super(name, cssSelector);\n    }\n\n    init(container) {\n      super.init(container);\n      this.registerInstance(container, new PriceRangeInstance(container));\n    }\n\n    destroy(container) {\n      this.destroyInstance(container);\n      super.destroy(container);\n    }}\n\n\n  new PriceRange();\n  class ccPopup {\n    constructor($container, namespace) {\n      this.$container = $container;\n      this.namespace = namespace;\n      this.cssClasses = {\n        visible: 'cc-popup--visible',\n        bodyNoScroll: 'cc-popup-no-scroll',\n        bodyNoScrollPadRight: 'cc-popup-no-scroll-pad-right' };\n\n    }\n\n    /**\n     * Open popup on timer / local storage - move focus to input ensure you can tab to submit and close\n     * Add the cc-popup--visible class\n     * Update aria to visible\n     */\n    open(callback) {\n      // Prevent the body from scrolling\n      if (this.$container.data('freeze-scroll')) {\n        $('body').addClass(this.cssClasses.bodyNoScroll);\n\n        // Add any padding necessary to the body to compensate for the scrollbar that just disappeared\n        var scrollDiv = document.createElement('div');\n        scrollDiv.className = 'popup-scrollbar-measure';\n        document.body.appendChild(scrollDiv);\n        var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n        document.body.removeChild(scrollDiv);\n        if (scrollbarWidth > 0) {\n          $('body').css('padding-right', scrollbarWidth + 'px').addClass(this.cssClasses.bodyNoScrollPadRight);\n        }\n      }\n\n      // Add reveal class\n      this.$container.addClass(this.cssClasses.visible);\n\n      // Track previously focused element\n      this.previouslyActiveElement = document.activeElement;\n\n      // Focus on the close button after the animation in has completed\n      setTimeout(() => {\n        this.$container.find('.cc-popup-close')[0].focus();\n      }, 500);\n\n      // Pressing escape closes the modal\n      $(window).on('keydown' + this.namespace, event => {\n        if (event.keyCode === 27) {\n          this.close();\n        }\n      });\n\n      if (callback) {\n        callback();\n      }\n    }\n\n    /**\n     * Close popup on click of close button or background - where does the focus go back to?\n     * Remove the cc-popup--visible class\n     */\n    close(callback) {\n      // Remove reveal class\n      this.$container.removeClass(this.cssClasses.visible);\n\n      // Revert focus\n      if (this.previouslyActiveElement) {\n        $(this.previouslyActiveElement).focus();\n      }\n\n      // Destroy the escape event listener\n      $(window).off('keydown' + this.namespace);\n\n      // Allow the body to scroll and remove any scrollbar-compensating padding\n      if (this.$container.data('freeze-scroll')) {\n        var transitionDuration = 500;\n\n        var $innerModal = this.$container.find('.cc-popup-modal');\n        if ($innerModal.length) {\n          transitionDuration = parseFloat(getComputedStyle($innerModal[0])['transitionDuration']);\n          if (transitionDuration && transitionDuration > 0) {\n            transitionDuration *= 1000;\n          }\n        }\n\n        setTimeout(() => {\n          $('body').removeClass(this.cssClasses.bodyNoScroll).removeClass(this.cssClasses.bodyNoScrollPadRight).css('padding-right', '0');\n        }, transitionDuration);\n      }\n\n      if (callback) {\n        callback();\n      }\n    }}\n  ;\n\n\n  theme.MapSection = new function () {\n    var _ = this;\n    _.config = {\n      zoom: 14,\n      styles: {\n        default: [],\n        silver: [{ \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#f5f5f5\" }] }, { \"elementType\": \"labels.icon\", \"stylers\": [{ \"visibility\": \"off\" }] }, { \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#616161\" }] }, { \"elementType\": \"labels.text.stroke\", \"stylers\": [{ \"color\": \"#f5f5f5\" }] }, { \"featureType\": \"administrative.land_parcel\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#bdbdbd\" }] }, { \"featureType\": \"poi\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#eeeeee\" }] }, { \"featureType\": \"poi\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#757575\" }] }, { \"featureType\": \"poi.park\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#e5e5e5\" }] }, { \"featureType\": \"poi.park\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#9e9e9e\" }] }, { \"featureType\": \"road\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#ffffff\" }] }, { \"featureType\": \"road.arterial\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#757575\" }] }, { \"featureType\": \"road.highway\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#dadada\" }] }, { \"featureType\": \"road.highway\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#616161\" }] }, { \"featureType\": \"road.local\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#9e9e9e\" }] }, { \"featureType\": \"transit.line\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#e5e5e5\" }] }, { \"featureType\": \"transit.station\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#eeeeee\" }] }, { \"featureType\": \"water\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#c9c9c9\" }] }, { \"featureType\": \"water\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#9e9e9e\" }] }],\n        retro: [{ \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#ebe3cd\" }] }, { \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#523735\" }] }, { \"elementType\": \"labels.text.stroke\", \"stylers\": [{ \"color\": \"#f5f1e6\" }] }, { \"featureType\": \"administrative\", \"elementType\": \"geometry.stroke\", \"stylers\": [{ \"color\": \"#c9b2a6\" }] }, { \"featureType\": \"administrative.land_parcel\", \"elementType\": \"geometry.stroke\", \"stylers\": [{ \"color\": \"#dcd2be\" }] }, { \"featureType\": \"administrative.land_parcel\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#ae9e90\" }] }, { \"featureType\": \"landscape.natural\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#dfd2ae\" }] }, { \"featureType\": \"poi\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#dfd2ae\" }] }, { \"featureType\": \"poi\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#93817c\" }] }, { \"featureType\": \"poi.park\", \"elementType\": \"geometry.fill\", \"stylers\": [{ \"color\": \"#a5b076\" }] }, { \"featureType\": \"poi.park\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#447530\" }] }, { \"featureType\": \"road\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#f5f1e6\" }] }, { \"featureType\": \"road.arterial\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#fdfcf8\" }] }, { \"featureType\": \"road.highway\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#f8c967\" }] }, { \"featureType\": \"road.highway\", \"elementType\": \"geometry.stroke\", \"stylers\": [{ \"color\": \"#e9bc62\" }] }, { \"featureType\": \"road.highway.controlled_access\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#e98d58\" }] }, { \"featureType\": \"road.highway.controlled_access\", \"elementType\": \"geometry.stroke\", \"stylers\": [{ \"color\": \"#db8555\" }] }, { \"featureType\": \"road.local\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#806b63\" }] }, { \"featureType\": \"transit.line\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#dfd2ae\" }] }, { \"featureType\": \"transit.line\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#8f7d77\" }] }, { \"featureType\": \"transit.line\", \"elementType\": \"labels.text.stroke\", \"stylers\": [{ \"color\": \"#ebe3cd\" }] }, { \"featureType\": \"transit.station\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#dfd2ae\" }] }, { \"featureType\": \"water\", \"elementType\": \"geometry.fill\", \"stylers\": [{ \"color\": \"#b9d3c2\" }] }, { \"featureType\": \"water\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#92998d\" }] }],\n        dark: [{ \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#212121\" }] }, { \"elementType\": \"labels.icon\", \"stylers\": [{ \"visibility\": \"off\" }] }, { \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#757575\" }] }, { \"elementType\": \"labels.text.stroke\", \"stylers\": [{ \"color\": \"#212121\" }] }, { \"featureType\": \"administrative\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#757575\" }] }, { \"featureType\": \"administrative.country\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#9e9e9e\" }] }, { \"featureType\": \"administrative.land_parcel\", \"stylers\": [{ \"visibility\": \"off\" }] }, { \"featureType\": \"administrative.locality\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#bdbdbd\" }] }, { \"featureType\": \"poi\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#757575\" }] }, { \"featureType\": \"poi.park\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#181818\" }] }, { \"featureType\": \"poi.park\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#616161\" }] }, { \"featureType\": \"poi.park\", \"elementType\": \"labels.text.stroke\", \"stylers\": [{ \"color\": \"#1b1b1b\" }] }, { \"featureType\": \"road\", \"elementType\": \"geometry.fill\", \"stylers\": [{ \"color\": \"#2c2c2c\" }] }, { \"featureType\": \"road\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#8a8a8a\" }] }, { \"featureType\": \"road.arterial\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#373737\" }] }, { \"featureType\": \"road.highway\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#3c3c3c\" }] }, { \"featureType\": \"road.highway.controlled_access\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#4e4e4e\" }] }, { \"featureType\": \"road.local\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#616161\" }] }, { \"featureType\": \"transit\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#757575\" }] }, { \"featureType\": \"water\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#000000\" }] }, { \"featureType\": \"water\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#3d3d3d\" }] }],\n        night: [{ \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#242f3e\" }] }, { \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#746855\" }] }, { \"elementType\": \"labels.text.stroke\", \"stylers\": [{ \"color\": \"#242f3e\" }] }, { \"featureType\": \"administrative.locality\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#d59563\" }] }, { \"featureType\": \"poi\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#d59563\" }] }, { \"featureType\": \"poi.park\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#263c3f\" }] }, { \"featureType\": \"poi.park\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#6b9a76\" }] }, { \"featureType\": \"road\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#38414e\" }] }, { \"featureType\": \"road\", \"elementType\": \"geometry.stroke\", \"stylers\": [{ \"color\": \"#212a37\" }] }, { \"featureType\": \"road\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#9ca5b3\" }] }, { \"featureType\": \"road.highway\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#746855\" }] }, { \"featureType\": \"road.highway\", \"elementType\": \"geometry.stroke\", \"stylers\": [{ \"color\": \"#1f2835\" }] }, { \"featureType\": \"road.highway\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#f3d19c\" }] }, { \"featureType\": \"transit\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#2f3948\" }] }, { \"featureType\": \"transit.station\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#d59563\" }] }, { \"featureType\": \"water\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#17263c\" }] }, { \"featureType\": \"water\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#515c6d\" }] }, { \"featureType\": \"water\", \"elementType\": \"labels.text.stroke\", \"stylers\": [{ \"color\": \"#17263c\" }] }],\n        aubergine: [{ \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#1d2c4d\" }] }, { \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#8ec3b9\" }] }, { \"elementType\": \"labels.text.stroke\", \"stylers\": [{ \"color\": \"#1a3646\" }] }, { \"featureType\": \"administrative.country\", \"elementType\": \"geometry.stroke\", \"stylers\": [{ \"color\": \"#4b6878\" }] }, { \"featureType\": \"administrative.land_parcel\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#64779e\" }] }, { \"featureType\": \"administrative.province\", \"elementType\": \"geometry.stroke\", \"stylers\": [{ \"color\": \"#4b6878\" }] }, { \"featureType\": \"landscape.man_made\", \"elementType\": \"geometry.stroke\", \"stylers\": [{ \"color\": \"#334e87\" }] }, { \"featureType\": \"landscape.natural\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#023e58\" }] }, { \"featureType\": \"poi\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#283d6a\" }] }, { \"featureType\": \"poi\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#6f9ba5\" }] }, { \"featureType\": \"poi\", \"elementType\": \"labels.text.stroke\", \"stylers\": [{ \"color\": \"#1d2c4d\" }] }, { \"featureType\": \"poi.park\", \"elementType\": \"geometry.fill\", \"stylers\": [{ \"color\": \"#023e58\" }] }, { \"featureType\": \"poi.park\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#3C7680\" }] }, { \"featureType\": \"road\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#304a7d\" }] }, { \"featureType\": \"road\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#98a5be\" }] }, { \"featureType\": \"road\", \"elementType\": \"labels.text.stroke\", \"stylers\": [{ \"color\": \"#1d2c4d\" }] }, { \"featureType\": \"road.highway\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#2c6675\" }] }, { \"featureType\": \"road.highway\", \"elementType\": \"geometry.stroke\", \"stylers\": [{ \"color\": \"#255763\" }] }, { \"featureType\": \"road.highway\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#b0d5ce\" }] }, { \"featureType\": \"road.highway\", \"elementType\": \"labels.text.stroke\", \"stylers\": [{ \"color\": \"#023e58\" }] }, { \"featureType\": \"transit\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#98a5be\" }] }, { \"featureType\": \"transit\", \"elementType\": \"labels.text.stroke\", \"stylers\": [{ \"color\": \"#1d2c4d\" }] }, { \"featureType\": \"transit.line\", \"elementType\": \"geometry.fill\", \"stylers\": [{ \"color\": \"#283d6a\" }] }, { \"featureType\": \"transit.station\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#3a4762\" }] }, { \"featureType\": \"water\", \"elementType\": \"geometry\", \"stylers\": [{ \"color\": \"#0e1626\" }] }, { \"featureType\": \"water\", \"elementType\": \"labels.text.fill\", \"stylers\": [{ \"color\": \"#4e6d70\" }] }] } };\n\n\n    _.apiStatus = null;\n\n    this.geolocate = function ($map) {\n      var deferred = $.Deferred();\n      var geocoder = new google.maps.Geocoder();\n      var address = $map.data('address-setting');\n\n      geocoder.geocode({ address: address }, function (results, status) {\n        if (status !== google.maps.GeocoderStatus.OK) {\n          deferred.reject(status);\n        }\n\n        deferred.resolve(results);\n      });\n\n      return deferred;\n    };\n\n    this.createMap = function (container) {\n      var $map = $('.map-section__map-container', container);\n\n      return _.geolocate($map).\n      then(\n      function (results) {\n        var mapOptions = {\n          zoom: _.config.zoom,\n          styles: _.config.styles[$(container).data('map-style')],\n          center: results[0].geometry.location,\n          scrollwheel: false,\n          disableDoubleClickZoom: true,\n          disableDefaultUI: true,\n          zoomControl: true };\n\n\n        _.map = new google.maps.Map($map[0], mapOptions);\n        _.center = _.map.getCenter();\n\n        var marker = new google.maps.Marker({\n          map: _.map,\n          position: _.center,\n          clickable: false });\n\n\n        google.maps.event.addDomListener(window, 'resize', function () {\n          google.maps.event.trigger(_.map, 'resize');\n          _.map.setCenter(_.center);\n        });\n      }.bind(this)).\n\n      fail(function () {\n        var errorMessage;\n\n        switch (status) {\n          case 'ZERO_RESULTS':\n            errorMessage = theme.strings.addressNoResults;\n            break;\n          case 'OVER_QUERY_LIMIT':\n            errorMessage = theme.strings.addressQueryLimit;\n            break;\n          default:\n            errorMessage = theme.strings.addressError;\n            break;}\n\n\n        // Only show error in the theme editor\n        if (Shopify.designMode) {\n          var $mapContainer = $map.parents('.map-section');\n\n          $mapContainer.addClass('page-width map-section--load-error');\n          $mapContainer.\n          find('.map-section__wrapper').\n          html(\n          '<div class=\"errors text-center\">' + errorMessage + '</div>');\n\n        }\n      });\n    };\n\n    this.onSectionLoad = function (target) {\n      var $container = $(target);\n      // Global function called by Google on auth errors\n      window.gm_authFailure = function () {\n        if (!Shopify.designMode) return;\n\n        $container.addClass('page-width map-section--load-error');\n        $container.\n        find('.map-section__wrapper').\n        html(\n        '<div class=\"errors text-center\">' + theme.strings.authError + '</div>');\n\n      };\n\n      // create maps\n      var key = $container.data('api-key');\n\n      if (typeof key !== 'string' || key === '') {\n        return;\n      }\n\n      // load map\n      theme.loadScriptOnce('https://maps.googleapis.com/maps/api/js?key=' + key, function () {\n        _.createMap($container);\n      });\n    };\n\n    this.onSectionUnload = function (target) {\n      if (typeof window.google !== 'undefined' && typeof google.maps !== 'undefined') {\n        google.maps.event.clearListeners(_.map, 'resize');\n      }\n    };\n  }();\n\n  // Register the section\n  cc.sections.push({\n    name: 'map',\n    section: theme.MapSection });\n\n  // Manage videos\n  theme.VideoManager = new function () {\n    var _ = this;\n\n    _._permitPlayback = function (container) {\n      return !($(container).hasClass('video-container--background') && $(window).outerWidth() < 768);\n    };\n\n    // Youtube\n    _.youtubeVars = {\n      incrementor: 0,\n      apiReady: false,\n      videoData: {},\n      toProcessSelector: '.video-container[data-video-type=\"youtube\"]:not(.video--init)' };\n\n\n    _.youtubeApiReady = function () {\n      _.youtubeVars.apiReady = true;\n      _._loadYoutubeVideos();\n    };\n\n    _._loadYoutubeVideos = function (container) {\n      if ($(_.youtubeVars.toProcessSelector, container).length) {\n        if (_.youtubeVars.apiReady) {\n\n          // play those videos\n          $(_.youtubeVars.toProcessSelector, container).each(function () {\n            // Don't init background videos on mobile\n            if (_._permitPlayback($(this))) {\n              $(this).addClass('video--init');\n              _.youtubeVars.incrementor++;\n              var containerId = 'theme-yt-video-' + _.youtubeVars.incrementor;\n              $(this).data('video-container-id', containerId);\n              var videoElement = $('<div class=\"video-container__video-element\">').attr('id', containerId).\n              appendTo($('.video-container__video', this));\n              var autoplay = $(this).data('video-autoplay');\n              var loop = $(this).data('video-loop');\n              var player = new YT.Player(containerId, {\n                height: '360',\n                width: '640',\n                videoId: $(this).data('video-id'),\n                playerVars: {\n                  iv_load_policy: 3,\n                  modestbranding: 1,\n                  autoplay: 0,\n                  loop: loop ? 1 : 0,\n                  playlist: $(this).data('video-id'),\n                  rel: 0,\n                  showinfo: 0 },\n\n                events: {\n                  onReady: _._onYoutubePlayerReady.bind({ autoplay: autoplay, loop: loop, $container: $(this) }),\n                  onStateChange: _._onYoutubePlayerStateChange.bind({ autoplay: autoplay, loop: loop, $container: $(this) }) } });\n\n\n              _.youtubeVars.videoData[containerId] = {\n                id: containerId,\n                container: this,\n                videoElement: videoElement,\n                player: player };\n\n            }\n          });\n        } else {\n          // load api\n          theme.loadScriptOnce('https://www.youtube.com/iframe_api');\n        }\n      }\n    };\n\n    _._onYoutubePlayerReady = function (event) {\n      event.target.setPlaybackQuality('hd1080');\n      if (this.autoplay) {\n        event.target.mute();\n        event.target.playVideo();\n      }\n\n      _._initBackgroundVideo(this.$container);\n    };\n\n    _._onYoutubePlayerStateChange = function (event) {\n      if (event.data == YT.PlayerState.PLAYING) {\n        this.$container.addClass('video--play-started');\n\n        if (this.autoplay) {\n          event.target.mute();\n        }\n\n        if (this.loop) {\n          // 4 times a second, check if we're in the final second of the video. If so, loop it for a more seamless loop\n          var finalSecond = event.target.getDuration() - 1;\n          if (finalSecond > 2) {\n            function loopTheVideo() {\n              if (event.target.getCurrentTime() > finalSecond) {\n                event.target.seekTo(0);\n              }\n              setTimeout(loopTheVideo, 250);\n            }\n            loopTheVideo();\n          }\n        }\n      }\n    };\n\n    _._unloadYoutubeVideos = function (container) {\n      for (var dataKey in _.youtubeVars.videoData) {\n        var data = _.youtubeVars.videoData[dataKey];\n        if ($(container).find(data.container).length) {\n          data.player.destroy();\n          delete _.youtubeVars.videoData[dataKey];\n          return;\n        }\n      }\n    };\n\n    // Vimeo\n    _.vimeoVars = {\n      incrementor: 0,\n      apiReady: false,\n      videoData: {},\n      toProcessSelector: '.video-container[data-video-type=\"vimeo\"]:not(.video--init)' };\n\n\n    _.vimeoApiReady = function () {\n      _.vimeoVars.apiReady = true;\n      _._loadVimeoVideos();\n    };\n\n    _._loadVimeoVideos = function (container) {\n      if ($(_.vimeoVars.toProcessSelector, container).length) {\n        if (_.vimeoVars.apiReady) {\n          // play those videos\n\n          $(_.vimeoVars.toProcessSelector, container).each(function () {\n            // Don't init background videos on mobile\n            if (_._permitPlayback($(this))) {\n              $(this).addClass('video--init');\n              _.vimeoVars.incrementor++;\n              var $this = $(this);\n              var containerId = 'theme-vi-video-' + _.vimeoVars.incrementor;\n              $(this).data('video-container-id', containerId);\n              var videoElement = $('<div class=\"video-container__video-element\">').attr('id', containerId).\n              appendTo($('.video-container__video', this));\n              var autoplay = !!$(this).data('video-autoplay');\n              var player = new Vimeo.Player(containerId, {\n                url: $(this).data('video-url'),\n                width: 640,\n                loop: $(this).data('video-autoplay'),\n                autoplay: autoplay,\n                muted: $this.hasClass('video-container--background') || autoplay });\n\n              player.on('playing', function () {\n                $(this).addClass('video--play-started');\n              }.bind(this));\n              player.ready().then(function () {\n                if (autoplay) {\n                  player.setVolume(0);\n                  player.play();\n                }\n                if (player.element && player.element.width && player.element.height) {\n                  var ratio = parseInt(player.element.height) / parseInt(player.element.width);\n                  $this.find('.video-container__video').css('padding-bottom', ratio * 100 + '%');\n                }\n                _._initBackgroundVideo($this);\n              });\n              _.vimeoVars.videoData[containerId] = {\n                id: containerId,\n                container: this,\n                videoElement: videoElement,\n                player: player,\n                autoPlay: autoplay };\n\n            }\n          });\n        } else {\n          // load api\n          if (window.define) {\n            // workaround for third parties using RequireJS\n            theme.loadScriptOnce('https://player.vimeo.com/api/player.js', function () {\n              _.vimeoVars.apiReady = true;\n              _._loadVimeoVideos();\n              window.define = window.tempDefine;\n            }, function () {\n              window.tempDefine = window.define;\n              window.define = null;\n            });\n          } else {\n            theme.loadScriptOnce('https://player.vimeo.com/api/player.js', function () {\n              _.vimeoVars.apiReady = true;\n              _._loadVimeoVideos();\n            });\n          }\n        }\n      }\n    };\n\n    _._unloadVimeoVideos = function (container) {\n      for (var dataKey in _.vimeoVars.videoData) {\n        var data = _.vimeoVars.videoData[dataKey];\n        if ($(container).find(data.container).length) {\n          data.player.unload();\n          delete _.vimeoVars.videoData[dataKey];\n          return;\n        }\n      }\n    };\n\n    // Init third party apis - Youtube and Vimeo\n    _._loadThirdPartyApis = function (container) {\n      //Don't init youtube or vimeo background videos on mobile\n      if (_._permitPlayback($('.video-container', container))) {\n        _._loadYoutubeVideos(container);\n        _._loadVimeoVideos(container);\n      }\n    };\n\n    // Mp4\n    _.mp4Vars = {\n      incrementor: 0,\n      videoData: {},\n      toProcessSelector: '.video-container[data-video-type=\"mp4\"]:not(.video--init)' };\n\n\n    _._loadMp4Videos = function (container) {\n      if ($(_.mp4Vars.toProcessSelector, container).length) {\n        // play those videos\n        $(_.mp4Vars.toProcessSelector, container).addClass('video--init').each(function () {\n          _.mp4Vars.incrementor++;\n          var $this = $(this);\n          var containerId = 'theme-mp-video-' + _.mp4Vars.incrementor;\n          $(this).data('video-container-id', containerId);\n          var videoElement = $('<div class=\"video-container__video-element\">').attr('id', containerId).\n          appendTo($('.video-container__video', this));\n\n          var $video = $('<video playsinline>');\n          if ($(this).data('video-loop')) {\n            $video.attr('loop', 'loop');\n          }\n          if (!$(this).hasClass('video-container--background')) {\n            $video.attr('controls', 'controls');\n          }\n          if ($(this).data('video-autoplay')) {\n            $video.attr({ autoplay: 'autoplay', muted: 'muted' });\n            $video[0].muted = true; // required by Chrome - ignores attribute\n            $video.one('loadeddata', function () {\n              this.play();\n            });\n          }\n          $video.on('playing', function () {\n            $(this).addClass('video--play-started');\n          }.bind(this));\n          $video.attr('src', $(this).data('video-url')).appendTo(videoElement);\n          _.mp4Vars.videoData[containerId] = {\n            element: $video[0] };\n\n        });\n      }\n    };\n\n    _._unloadMp4Videos = function (container) {\n    };\n\n    // background video placement for iframes\n    _._initBackgroundVideo = function ($container) {\n      if ($container.hasClass('video-container--background') && $container.find('.video-container__video iframe').length) {\n        function assessBackgroundVideo() {\n          var $media = $('.video-container__media', this),\n          $container = $media.length ? $media : this,\n          cw = $container.width(),\n          ch = $container.height(),\n          cr = cw / ch,\n          $frame = $('.video-container__video iframe', this),\n          vr = $frame.attr('width') / $frame.attr('height'),\n          $pan = $('.video-container__video', this),\n          vCrop = 75; // pushes video outside container to hide controls\n          if (cr > vr) {\n            var vh = cw / vr + vCrop * 2;\n            $pan.css({\n              marginTop: (ch - vh) / 2 - vCrop,\n              marginInlineStart: '',\n              height: vh + vCrop * 2,\n              width: '' });\n\n          } else {\n            var vw = cw * vr + vCrop * 2 * vr;\n            $pan.css({\n              marginTop: -vCrop,\n              marginInlineStart: (cw - vw) / 2,\n              height: ch + vCrop * 2,\n              width: vw });\n\n          }\n        }\n        assessBackgroundVideo.bind($container)();\n        $(window).on('debouncedresize.' + $container.data('video-container-id'), assessBackgroundVideo.bind($container));\n      }\n    };\n\n    // Compatibility with Sections\n    this.onSectionLoad = function (container) {\n      // url only - infer type\n      $('.video-container[data-video-url]:not([data-video-type])').each(function () {\n        var url = $(this).data('video-url');\n\n        if (url.indexOf('.mp4') > -1) {\n          $(this).attr('data-video-type', 'mp4');\n        }\n\n        if (url.indexOf('vimeo.com') > -1) {\n          $(this).attr('data-video-type', 'vimeo');\n          $(this).attr('data-video-id', url.split('?')[0].split('/').pop());\n        }\n\n        if (url.indexOf('youtu.be') > -1 || url.indexOf('youtube.com') > -1) {\n          $(this).attr('data-video-type', 'youtube');\n          if (url.indexOf('v=') > -1) {\n            $(this).attr('data-video-id', url.split('v=').pop().split('&')[0]);\n          } else {\n            $(this).attr('data-video-id', url.split('?')[0].split('/').pop());\n          }\n        }\n      });\n\n      _._loadThirdPartyApis(container);\n      _._loadMp4Videos(container);\n\n      $(window).on('debouncedresize.video-manager-resize', function () {\n        _._loadThirdPartyApis(container);\n      });\n\n      // play button\n      $('.video-container__play', container).on('click', function (evt) {\n        evt.preventDefault();\n        var $container = $(this).closest('.video-container');\n        // reveal\n        $container.addClass('video-container--playing');\n\n        // broadcast a play event on the section container\n        $(container).trigger(\"cc:video:play\");\n\n        // play\n        var id = $container.data('video-container-id');\n        if (id.indexOf('theme-yt-video') === 0) {\n          _.youtubeVars.videoData[id].player.playVideo();\n        } else if (id.indexOf('theme-vi-video') === 0) {\n          _.vimeoVars.videoData[id].player.play();\n        } else if (id.indexOf('theme-mp-video') === 0) {\n          _.mp4Vars.videoData[id].element.play();\n        }\n      });\n\n      // modal close button\n      $('.video-container__stop', container).on('click', function (evt) {\n        evt.preventDefault();\n        var $container = $(this).closest('.video-container');\n        // hide\n        $container.removeClass('video-container--playing');\n\n        // broadcast a stop event on the section container\n        $(container).trigger(\"cc:video:stop\");\n\n        // play\n        var id = $container.data('video-container-id');\n        if (id.indexOf('theme-yt-video') === 0) {\n          _.youtubeVars.videoData[id].player.stopVideo();\n        } else {\n          _.vimeoVars.videoData[id].player.pause();\n          _.vimeoVars.videoData[id].player.setCurrentTime(0);\n        }\n      });\n    };\n\n    this.onSectionUnload = function (container) {\n      $('.video-container__play, .video-container__stop', container).off('click');\n      $(window).off('.' + $('.video-container').data('video-container-id'));\n      $(window).off('debouncedresize.video-manager-resize');\n      _._unloadYoutubeVideos(container);\n      _._unloadVimeoVideos(container);\n      _._unloadMp4Videos(container);\n      $(container).trigger(\"cc:video:stop\");\n    };\n  }();\n\n  // Youtube API callback\n  window.onYouTubeIframeAPIReady = function () {\n    theme.VideoManager.youtubeApiReady();\n  };\n\n  // Register the section\n  cc.sections.push({\n    name: 'video',\n    section: theme.VideoManager });\n\n  /**\n   * Popup Section Script\n   * ------------------------------------------------------------------------------\n   *\n   * @namespace Popup\n   */\n\n  theme.Popup = new function () {\n    /**\n     * Popup section constructor. Runs on page load as well as Theme Editor\n     * `section:load` events.\n     * @param {string} container - selector for the section container DOM element\n     */\n\n    var dismissedStorageKey = 'cc-theme-popup-dismissed';\n\n    this.onSectionLoad = function (container) {\n      this.namespace = theme.namespaceFromSection(container);\n      this.$container = $(container);\n      this.popup = new ccPopup(this.$container, this.namespace);\n\n      var dismissForDays = this.$container.data('dismiss-for-days'),\n      delaySeconds = this.$container.data('delay-seconds'),\n      showPopup = true,\n      testMode = this.$container.data('test-mode'),\n      lastDismissed = window.localStorage.getItem(dismissedStorageKey);\n\n      // Should we show it during this page view?\n      // Check when it was last dismissed\n      if (lastDismissed) {\n        var dismissedDaysAgo = (new Date().getTime() - lastDismissed) / (1000 * 60 * 60 * 24);\n        if (dismissedDaysAgo < dismissForDays) {\n          showPopup = false;\n        }\n      }\n\n      // Check for error or success messages\n      if (this.$container.find('.cc-popup-form__response').length) {\n        showPopup = true;\n        delaySeconds = 1;\n\n        // If success, set as dismissed\n        if (this.$container.find('.cc-popup-form__response--success').length) {\n          this.functions.popupSetAsDismissed.call(this);\n        }\n      }\n\n      // Prevent popup on Shopify robot challenge page\n      if (document.querySelector('.shopify-challenge__container')) {\n        showPopup = false;\n      }\n\n      // Show popup, if appropriate\n      if (showPopup || testMode) {\n        setTimeout(() => {\n          this.popup.open();\n        }, delaySeconds * 1000);\n      }\n\n      // Click on close button or modal background\n      this.$container.on('click' + this.namespace, '.cc-popup-close, .cc-popup-background', () => {\n        this.popup.close(() => {\n          this.functions.popupSetAsDismissed.call(this);\n        });\n      });\n    };\n\n    this.onSectionSelect = function () {\n      this.popup.open();\n    };\n\n    this.functions = {\n      /**\n       * Use localStorage to set as dismissed\n       */\n      popupSetAsDismissed: function popupSetAsDismissed() {\n        window.localStorage.setItem(dismissedStorageKey, new Date().getTime());\n      } };\n\n\n    /**\n     * Event callback for Theme Editor `section:unload` event\n     */\n    this.onSectionUnload = function () {\n      this.$container.off(this.namespace);\n    };\n  }();\n\n  // Register section\n  cc.sections.push({\n    name: 'newsletter-popup',\n    section: theme.Popup });\n\n  /**\n   * StoreAvailability Section Script\n   * ------------------------------------------------------------------------------\n   *\n   * @namespace StoreAvailability\n   */\n\n  theme.StoreAvailability = function (container) {\n    var loadingClass = 'store-availability-loading';\n    var initClass = 'store-availability-initialized';\n    var storageKey = 'cc-location';\n\n    this.onSectionLoad = function (container) {\n      this.namespace = theme.namespaceFromSection(container);\n      this.$container = $(container);\n      this.productId = this.$container.data('store-availability-container');\n      this.sectionUrl = this.$container.data('section-url');\n      this.$modal;\n\n      this.$container.addClass(initClass);\n      this.transitionDurationMS = parseFloat(getComputedStyle(container).transitionDuration) * 1000;\n      this.removeFixedHeightTimeout = -1;\n\n      // Handle when a variant is selected\n      $(window).on(\"cc-variant-updated\".concat(this.namespace).concat(this.productId), (e, args) => {\n        if (args.product.id === this.productId) {\n          this.functions.updateContent.bind(this)(\n          args.variant ? args.variant.id : null,\n          args.product.title,\n          this.$container.data('has-only-default-variant'),\n          args.variant && typeof args.variant.available !== \"undefined\");\n\n        }\n      });\n\n      // Handle single variant products\n      if (this.$container.data('single-variant-id')) {\n        this.functions.updateContent.bind(this)(\n        this.$container.data('single-variant-id'),\n        this.$container.data('single-variant-product-title'),\n        this.$container.data('has-only-default-variant'),\n        this.$container.data('single-variant-product-available'));\n\n      }\n    };\n\n    this.onSectionUnload = function () {\n      $(window).off(\"cc-variant-updated\".concat(this.namespace).concat(this.productId));\n      this.$container.off('click');\n      if (this.$modal) {\n        this.$modal.off('click');\n      }\n    };\n\n    this.functions = {\n      // Returns the users location data (if allowed)\n      getUserLocation: function getUserLocation() {\n        return new Promise((resolve, reject) => {\n          var storedCoords;\n\n          if (sessionStorage[storageKey]) {\n            storedCoords = JSON.parse(sessionStorage[storageKey]);\n          }\n\n          if (storedCoords) {\n            resolve(storedCoords);\n\n          } else {\n            if (navigator.geolocation) {\n              navigator.geolocation.getCurrentPosition(\n              function (position) {\n                var coords = {\n                  latitude: position.coords.latitude,\n                  longitude: position.coords.longitude };\n\n\n                //Set the localization api\n                fetch('/localization.json', {\n                  method: 'PUT',\n                  headers: {\n                    'Content-Type': 'application/json' },\n\n                  body: JSON.stringify(coords) });\n\n\n                //Write to a session storage\n                sessionStorage[storageKey] = JSON.stringify(coords);\n\n                resolve(coords);\n              }, function () {\n                resolve(false);\n              }, {\n                maximumAge: 3600000, // 1 hour\n                timeout: 5000 });\n\n\n            } else {\n              resolve(false);\n            }\n          }\n        });\n      },\n\n      // Requests the available stores and calls the callback\n      getAvailableStores: function getAvailableStores(variantId, cb) {\n        return $.get(this.sectionUrl.replace('VARIANT_ID', variantId), cb);\n      },\n\n      // Haversine Distance\n      // The haversine formula is an equation giving great-circle distances between\n      // two points on a sphere from their longitudes and latitudes\n      calculateDistance: function calculateDistance(coords1, coords2, unitSystem) {\n        var dtor = Math.PI / 180;\n        var radius = unitSystem === 'metric' ? 6378.14 : 3959;\n\n        var rlat1 = coords1.latitude * dtor;\n        var rlong1 = coords1.longitude * dtor;\n        var rlat2 = coords2.latitude * dtor;\n        var rlong2 = coords2.longitude * dtor;\n\n        var dlon = rlong1 - rlong2;\n        var dlat = rlat1 - rlat2;\n\n        var a =\n        Math.pow(Math.sin(dlat / 2), 2) +\n        Math.cos(rlat1) * Math.cos(rlat2) * Math.pow(Math.sin(dlon / 2), 2);\n        var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n        return radius * c;\n      },\n\n      // Updates the existing modal pickup with locations with distances from the user\n      updateLocationDistances: function updateLocationDistances(coords) {\n        var unitSystem = this.$modal.find('[data-unit-system]').data('unit-system');\n        var self = this;\n\n        this.$modal.find('[data-distance=\"false\"]').each(function () {\n          var thisCoords = {\n            latitude: parseFloat($(this).data('latitude')),\n            longitude: parseFloat($(this).data('longitude')) };\n\n\n          if (thisCoords.latitude && thisCoords.longitude) {\n            var distance = self.functions.calculateDistance(\n            coords, thisCoords, unitSystem).toFixed(1);\n\n            $(this).html(distance);\n\n            //Timeout to trigger animation\n            setTimeout(() => {\n              $(this).closest('.store-availability-list__location__distance').addClass('-in');\n            }, 0);\n          }\n\n          $(this).attr('data-distance', 'true');\n        });\n      },\n\n      // Requests the available stores and updates the page with info below Add to Basket, and append the modal to the page\n      updateContent: function updateContent(variantId, productTitle, isSingleDefaultVariant, isVariantAvailable) {\n        this.$container.off('click', '[data-store-availability-modal-open]');\n        this.$container.off('click' + this.namespace, '.cc-popup-close, .cc-popup-background');\n        $('.store-availabilities-modal').remove();\n\n        if (!isVariantAvailable) {\n          //If the variant is Unavailable (not the same as Out of Stock) - hide the store pickup completely\n          this.$container.addClass(loadingClass);\n          if (this.transitionDurationMS > 0) {\n            this.$container.css('height', '0px');\n          }\n        } else {\n          this.$container.addClass(loadingClass);\n          if (this.transitionDurationMS > 0) {\n            this.$container.css('height', this.$container.outerHeight() + 'px');\n          }\n        }\n\n        if (isVariantAvailable) {\n          this.functions.getAvailableStores.call(this, variantId, response => {\n            if (response.trim().length > 0 && !response.includes('NO_PICKUP')) {\n              this.$container.html(response);\n              this.$container.html(this.$container.children().first().html()); // editor bug workaround\n\n              this.$container.find('[data-store-availability-modal-product-title]').html(productTitle);\n\n              if (isSingleDefaultVariant) {\n                this.$container.find('.store-availabilities-modal__variant-title').remove();\n              }\n\n              this.$container.find('.cc-popup').appendTo('body');\n\n              this.$modal = $('body').find('.store-availabilities-modal');\n              var popup = new ccPopup(this.$modal, this.namespace);\n\n              this.$container.on('click', '[data-store-availability-modal-open]', () => {\n                popup.open();\n\n                //When the modal is opened, try and get the users location\n                this.functions.getUserLocation().then(coords => {\n                  if (coords && this.$modal.find('[data-distance=\"false\"]').length) {\n                    //Re-retrieve the available stores location modal contents\n                    this.functions.getAvailableStores.call(this, variantId, response => {\n                      this.$modal.find('.store-availabilities-list').html($(response).find('.store-availabilities-list').html());\n                      this.functions.updateLocationDistances.bind(this)(coords);\n                    });\n                  }\n                });\n\n                return false;\n              });\n\n              this.$modal.on('click' + this.namespace, '.cc-popup-close, .cc-popup-background', () => {\n                popup.close();\n              });\n\n              this.$container.removeClass(loadingClass);\n\n              if (this.transitionDurationMS > 0) {\n                var newHeight = this.$container.find('.store-availability-container').outerHeight();\n                this.$container.css('height', newHeight > 0 ? newHeight + 'px' : '');\n                clearTimeout(this.removeFixedHeightTimeout);\n                this.removeFixedHeightTimeout = setTimeout(() => {\n                  this.$container.css('height', '');\n                }, this.transitionDurationMS);\n              }\n            }\n          });\n        }\n      } };\n\n\n    // Initialise the section when it's instantiated\n    this.onSectionLoad(container);\n  };\n\n  // Register section\n  cc.sections.push({\n    name: 'store-availability',\n    section: theme.StoreAvailability });\n\n\n\n\n  /*================ Icons ================*/\n  theme.icons = {\n    check: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"icon feather-check\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>',\n    chevronRight: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"icon feather-chevron-right\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg>',\n    arrowLeft: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"icon feather-arrow-left\"><line x1=\"19\" y1=\"12\" x2=\"5\" y2=\"12\"></line><polyline points=\"12 19 5 12 12 5\"></polyline></svg>',\n    slideshowPrevArrow: '<button class=\"slick-prev\"><svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><title>' + theme.strings.previous + '</title><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\"/></svg></button>',\n    slideshowNextArrow: '<button class=\"slick-next\"><svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><title>' + theme.strings.next + '</title><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\"/></svg></button>' };\n\n\n  /*================ Device ================*/\n  theme.device = {\n    cache: {\n      isTouch: null },\n\n    isTouch: () => {\n      if (theme.device.cache.isTouch !== null) {\n        return theme.device.cache.isTouch;\n      } else {\n        try {\n          document.createEvent(\"TouchEvent\");\n          theme.device.cache.isTouch = true;\n        } catch (e) {\n          theme.device.cache.isTouch = false;\n        } finally {\n          return theme.device.cache.isTouch;\n        }\n      }\n    } };\n\n\n  /*================ Slate ================*/\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\n  slate.a11y = {\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 if focusing a link, just $link.focus();\n     *\n     * @param {JQuery} $element - The element to be acted upon\n     */\n    pageLinkFocus: function pageLinkFocus($element) {\n      var focusClass = 'js-focus-hidden';\n\n      $element.first().\n      attr('tabIndex', '-1').\n      focus().\n      addClass(focusClass).\n      one('blur', callback);\n\n      function callback() {\n        $element.first().\n        removeClass(focusClass).\n        removeAttr('tabindex');\n      }\n    },\n\n    /**\n     * If there's a hash in the url, focus the appropriate element\n     */\n    focusHash: function focusHash() {\n      var hash = window.location.hash;\n\n      // is there a hash in the url? is it an element on the page?\n      if (hash && document.getElementById(hash.slice(1))) {\n        this.pageLinkFocus($(hash));\n      }\n    },\n\n    /**\n     * When an in-page (url w/hash) link is clicked, focus the appropriate element\n     */\n    bindInPageLinks: function bindInPageLinks() {\n      $('a[href*=#]').on('click', function (evt) {\n        this.pageLinkFocus($(evt.currentTarget.hash));\n      }.bind(this));\n    },\n\n    /**\n     * Traps the focus in a particular container\n     *\n     * @param {object} options - Options to be used\n     * @param {jQuery} options.$container - Container to trap focus within\n     * @param {jQuery} options.$elementToFocus - Element to be focused when focus leaves container\n     * @param {string} options.namespace - Namespace used for new focus event handler\n     */\n    trapFocus: function trapFocus(options) {\n      var eventName = options.namespace ?\n      'focusin.' + options.namespace :\n      'focusin';\n\n      if (!options.$elementToFocus) {\n        options.$elementToFocus = options.$container;\n      }\n\n      options.$container.attr('tabindex', '-1');\n      options.$elementToFocus.focus();\n\n      $(document).on(eventName, function (evt) {\n        if (options.$container[0] !== evt.target && !options.$container.has(evt.target).length) {\n          options.$container.focus();\n        }\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 {jQuery} options.$container - Container to trap focus within\n     * @param {string} options.namespace - Namespace used for new focus event handler\n     */\n    removeTrapFocus: function removeTrapFocus(options) {\n      var eventName = options.namespace ?\n      'focusin.' + options.namespace :\n      'focusin';\n\n      if (options.$container && options.$container.length) {\n        options.$container.removeAttr('tabindex');\n      }\n\n      $(document).off(eventName);\n    } };\n\n  ;\n  /**\n   * Cart Template Script\n   * ------------------------------------------------------------------------------\n   * A file that contains scripts highly couple code to the Cart template.\n   *\n   * @namespace cart\n   */\n\n  slate.cart = {\n\n    /**\n     * Browser cookies are required to use the cart. This function checks if\n     * cookies are enabled in the browser.\n     */\n    cookiesEnabled: function cookiesEnabled() {\n      var cookieEnabled = navigator.cookieEnabled;\n\n      if (!cookieEnabled) {\n        document.cookie = 'testcookie';\n        cookieEnabled = document.cookie.indexOf('testcookie') !== -1;\n      }\n      return cookieEnabled;\n    } };\n\n  ;\n  /**\n   * Utility helpers\n   * -----------------------------------------------------------------------------\n   * A collection of useful functions for dealing with arrays and objects\n   *\n   * @namespace utils\n   */\n\n  slate.utils = {\n\n    /**\n     * Return an object from an array of objects that matches the provided key and value\n     *\n     * @param {array} array - Array of objects\n     * @param {string} key - Key to match the value against\n     * @param {string} value - Value to get match of\n     */\n    findInstance: function findInstance(array, key, value) {\n      for (var i = 0; i < array.length; i++) {\n        if (array[i][key] === value) {\n          return array[i];\n        }\n      }\n    },\n\n    /**\n     * Remove an object from an array of objects by matching the provided key and value\n     *\n     * @param {array} array - Array of objects\n     * @param {string} key - Key to match the value against\n     * @param {string} value - Value to get match of\n     */\n    removeInstance: function removeInstance(array, key, value) {\n      var i = array.length;\n      while (i--) {\n        if (array[i][key] === value) {\n          array.splice(i, 1);\n          break;\n        }\n      }\n\n      return array;\n    },\n\n    /**\n     * _.compact from lodash\n     * Remove empty/false items from array\n     * Source: https://github.com/lodash/lodash/blob/master/compact.js\n     *\n     * @param {array} array\n     */\n    compact: function compact(array) {\n      var index = -1;\n      var length = array == null ? 0 : array.length;\n      var resIndex = 0;\n      var result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    },\n\n    /**\n     * _.defaultTo from lodash\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     * Source: https://github.com/lodash/lodash/blob/master/defaultTo.js\n     *\n     * @param {*} value - Value to check\n     * @param {*} defaultValue - Default value\n     * @returns {*} - Returns the resolved value\n     */\n    defaultTo: function defaultTo(value, defaultValue) {\n      return value == null || value !== value ? defaultValue : value;\n    } };\n\n  ;\n  /**\n   * Rich Text Editor\n   * -----------------------------------------------------------------------------\n   * Wrap iframes and tables in div tags to force responsive/scrollable layout.\n   *\n   * @namespace rte\n   */\n\n  slate.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 {jquery} options.$tables - jquery object(s) of the table(s) to wrap\n     * @param {string} options.tableWrapperClass - table wrapper class name\n     */\n    wrapTable: function wrapTable(options) {\n      var tableWrapperClass = typeof options.tableWrapperClass === \"undefined\" ? '' : options.tableWrapperClass;\n\n      options.$tables.wrap('<div class=\"' + tableWrapperClass + '\"></div>');\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 {jquery} options.$iframes - jquery object(s) of the iframe(s) to wrap\n     * @param {string} options.iframeWrapperClass - class name used on the wrapping div\n     */\n    wrapIframe: function wrapIframe(options) {\n      var iframeWrapperClass = typeof options.iframeWrapperClass === \"undefined\" ? '' : options.iframeWrapperClass;\n\n      options.$iframes.each(function () {\n        // Add wrapper to make video responsive\n        $(this).wrap('<div class=\"' + iframeWrapperClass + '\"></div>');\n\n        // Re-set the src attribute on each iframe after page load\n        // for Chrome's \"incorrect iFrame content on 'back'\" bug.\n        // https://code.google.com/p/chromium/issues/detail?id=395791\n        // Need to specifically target video and admin bar\n        this.src = this.src;\n      });\n    } };\n\n  ;\n  /**\n   * Image Helper Functions\n   * -----------------------------------------------------------------------------\n   * A collection of functions that help with basic image operations.\n   *\n   */\n\n  slate.Image = function () {\n\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     * Find the Shopify image attribute size\n     *\n     * @param {string} src\n     * @returns {null}\n     */\n    function imageSize(src) {\n      var match = src.match(/.+_((?:pico|icon|thumb|small|compact|medium|large|grande)|\\d{1,4}x\\d{0,4}|x\\d{1,4})[_\\.@]/);\n\n      if (match) {\n        return match[1];\n      } else {\n        return null;\n      }\n    }\n\n    /**\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(/\\.(jpg|jpeg|gif|png|bmp|bitmap|tiff|tif)(\\?v=\\d+)?$/i);\n\n      if (match) {\n        var prefix = src.split(match[0]);\n        var suffix = match[0];\n\n        return this.removeProtocol(prefix[0] + '_' + size + suffix);\n      } else {\n        return null;\n      }\n    }\n\n    function removeProtocol(path) {\n      return path.replace(/http(s)?:/, '');\n    }\n\n    return {\n      preload: preload,\n      loadImage: loadImage,\n      imageSize: imageSize,\n      getSizedImageUrl: getSizedImageUrl,\n      removeProtocol: removeProtocol };\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  slate.Variants = function () {\n\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.singleOptionSelector = options.singleOptionSelector;\n      this.originalSelectorId = options.originalSelectorId;\n      this.enableHistoryState = options.enableHistoryState;\n      this.currentVariant = this._getVariantFromOptions();\n\n      this._updateQtySelector(this.currentVariant);\n\n      $(this.singleOptionSelector, this.$container).on('change', this._onSelectChange.bind(this));\n    }\n\n    Variants.prototype = $.extend({}, Variants.prototype, {\n\n      /**\n       * Get the currently selected options from add-to-cart form. Works with all\n       * form input elements.\n       *\n       * @return {array} options - Values of currently selected variants\n       */\n      _getCurrentOptions: function _getCurrentOptions() {\n        var currentOptions = $.map($(this.singleOptionSelector, this.$container), function (element) {\n          var type = element.dataset.selectorType;\n          var currentOption = {};\n\n          if (type === 'listed') {\n            var selectedOption = element.querySelector('input:checked');\n\n            if (selectedOption) {\n              currentOption.value = selectedOption.value;\n              currentOption.index = element.dataset.index;\n\n              return currentOption;\n            } else {\n              return false;\n            }\n          } else {\n            var _selectedOption = element.querySelector('[aria-selected=\"true\"]');\n\n            if (_selectedOption) {\n              currentOption.value = _selectedOption.dataset.value;\n              currentOption.index = element.dataset.index;\n\n              return currentOption;\n            } else {\n              return false;\n            }\n          }\n        });\n\n        return currentOptions;\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 _getVariantFromOptions() {\n        var selectedValues = this._getCurrentOptions();\n        var variants = this.product.variants;\n        var found = false;\n\n        variants.forEach(function (variant) {\n          var satisfied = true;\n\n          selectedValues.forEach(function (option) {\n            if (satisfied) {\n              satisfied = option.value === variant[option.index];\n            }\n          });\n\n          if (satisfied) {\n            found = variant;\n          }\n        });\n\n        return found || null;\n      },\n\n      /**\n       * Get a variant option element.\n       *\n       * @param {object} variant - Currently selected variant\n       * @returns {element}\n       */\n      _getVariantOptionElement: function _getVariantOptionElement(variant) {\n        return this.$container.find('select[name=\"id\"] option[value=\"' + variant.id + '\"]');\n      },\n\n      /**\n       * Event handler for when a variant input changes.\n       */\n      _onSelectChange: function _onSelectChange() {\n        var variant = this._getVariantFromOptions();\n\n        this.$container.trigger({\n          type: 'variantChange',\n          variant: variant });\n\n\n        // this._updateSecondarySelects(variant);\n        this._updateQtySelector(variant);\n\n        if (!variant) {\n          return;\n        }\n\n        $(window).trigger('cc-variant-updated', {\n          variant: variant,\n          product: this.product });\n\n\n        this._updateMasterSelect(variant);\n        this._updateImages(variant);\n        this._updatePrice(variant);\n        this.currentVariant = variant;\n\n        if (this.enableHistoryState) {\n          this._updateHistoryState(variant);\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 _updateImages(variant) {\n        var variantMedia = variant.featured_media || {};\n        var currentVariantMedia = this.currentVariant.featured_media || {};\n\n        if (!variant.featured_media || variantMedia.id === currentVariantMedia.id) {\n          return;\n        }\n\n        this.$container.trigger({\n          type: 'variantImageChange',\n          variant: variant });\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 _updatePrice(variant) {\n        var hasChanged = false;\n        if (\n        variant.price !== this.currentVariant.price ||\n        variant.compare_at_price !== this.currentVariant.compare_at_price ||\n        variant.unit_price_measurement !== this.currentVariant.unit_price_measurement ||\n\n        variant.unit_price_measurement && (\n        variant.unit_price !== this.currentVariant.unit_price ||\n        variant.unit_price_measurement.reference_value !== this.currentVariant.unit_price_measurement.reference_value ||\n        variant.unit_price_measurement.reference_unit !== this.currentVariant.unit_price_measurement.reference_unit))\n\n\n        {\n          hasChanged = true;\n        }\n\n        if (!hasChanged) {\n          return;\n        }\n\n        this.$container.trigger({\n          type: 'variantPriceChange',\n          variant: variant });\n\n\n        // Update the installments banner\n        var input = this.$container[0].querySelector('input[name=\"id\"]');\n        input.value = variant.id;\n        input.dispatchEvent(new Event('change', { bubbles: true }));\n      },\n\n      /**\n       * Update quantity selector options according to inventory level\n       *\n       * @param {object} variant - Currently selected variant\n       */\n      _updateQtySelector: function _updateQtySelector(variant) {\n        var section = this.$container[0];\n        var qtySelector = section.querySelector('.qty-wrapper');\n\n        if (!qtySelector) return;\n\n        if (!variant || !variant.available) {\n          this._resetQtySelector();\n          qtySelector.classList.add('is-disabled');\n          return;\n        }\n\n        var variantEl = this._getVariantOptionElement(variant);\n        var invCount = Number(variantEl[0].dataset.inventory);\n        var qytOptionEls = qtySelector.querySelectorAll('.cc-select__option');\n        var dynamicOpts = theme.settings.dynamicQtyOpts && invCount && invCount > 0 && invCount < 10;\n\n        if (dynamicOpts) {\n          var currentyQty = qtySelector.querySelector('[aria-selected=\"true\"]');\n\n          if (Number(currentyQty.value) < invCount) {\n            this._resetQtySelector();\n          }\n        }\n\n        qytOptionEls.forEach((el, index) => {\n          el.hidden = dynamicOpts && index + 1 > invCount;\n        });\n\n        qtySelector.classList.remove('is-disabled');\n      },\n\n      _resetQtySelector: function _resetQtySelector() {\n        var section = this.$container[0];\n        var btn = section.querySelector('.qty-wrapper .cc-select__btn');\n        var listbox = section.querySelector('.qty-wrapper .cc-select__listbox');\n        var firstOption = listbox.querySelector('.cc-select__option');\n        var selectedOption = listbox.querySelector('[aria-selected=\"true\"]');\n\n        btn.firstChild.textContent = firstOption.firstElementChild.textContent;\n        listbox.setAttribute('aria-activedescendant', firstOption.id);\n        selectedOption.setAttribute('aria-selected', 'false');\n        firstOption.setAttribute('aria-selected', 'true');\n      },\n\n      /**\n       * Update history state for product deeplinking\n       *\n       * @param {object} variant - Currently selected variant\n       */\n      _updateHistoryState: function _updateHistoryState(variant) {\n        if (!history.replaceState || !variant) {\n          return;\n        }\n\n        var newurl = window.location.protocol + '//' + window.location.host + window.location.pathname + '?variant=' + variant.id;\n        window.history.replaceState({ path: newurl }, '', newurl);\n      },\n\n      /**\n       * Update hidden master select of variant change\n       *\n       * @param {object} variant - Currently selected variant\n       */\n      _updateMasterSelect: function _updateMasterSelect(variant) {\n        var select = $(this.originalSelectorId, this.$container)[0];\n        if (!select) return;\n\n        select.value = variant.id;\n        select.dispatchEvent(\n        new Event('change', { bubbles: true, cancelable: false }));\n\n      }\n\n      /**\n       * Update hidden secondary selects, e.g. Installments form\n       *\n       * @param {object} variant - Currently selected variant\n       */\n      //  _updateSecondarySelects: function _updateSecondarySelects(variant) {\n      //   $(this.secondaryIdSelectors, this.$container).each(function(){\n      //     this.value = variant ? variant.id : null;\n      //     this.dispatchEvent(\n      //       new Event('change', { bubbles: true, cancelable: false })\n      //     );\n      //   });\n      // }\n    });\n\n    return Variants;\n  }();\n  ;\n\n  /*=============== Components ===============*/\n  theme.addNoticeToForm = function ($notice, $form) {\n    var $existingNotices = $('.ajax-add-notice', $form);\n    if ($existingNotices.length > 0) {\n      setTimeout(function () {// wait until fading-out has definitely finished\n        $existingNotices.replaceWith($notice.addClass('ajax-add-notice--pre-replace'));\n        setTimeout(function () {\n          $notice.removeClass('ajax-add-notice--pre-replace');\n        }, 10);\n      }, 251);\n    } else {\n      $notice.addClass('ajax-add-notice--pre-reveal').appendTo($form).slideDown(250, function () {\n        $(this).removeClass('ajax-add-notice--pre-reveal');\n      });\n    }\n  };\n\n  $(document).on('submit', 'form.product-form[data-ajax-add=\"true\"]', function (e) {\n    var $form = $(this);\n\n    // Force page reload if product added to cart from a section on the cart page\n    if (document.body.classList.contains('template-cart')) {\n      $form.attr('data-ajax-add', false);\n      $form.submit();\n      return;\n    }\n\n    // Disable add button\n    $form.find(':submit').attr('disabled', 'disabled').each(function () {\n      var contentFunc = $(this).is('button') ? 'html' : 'val';\n      $(this).data('previous-value', $(this)[contentFunc]())[contentFunc](theme.strings.addingToCart);\n    });\n\n    // Hide any notices\n    $('.ajax-add-notice', $form).css('opacity', 0);\n\n    // Add to cart\n    $.post(theme.routes.cart_add_url + '.js', $form.serialize(), function (itemData) {\n\n      // Enable add button\n      var $btn = $form.find(':submit').each(function () {\n        var $btn = $(this);\n        var contentFunc = $(this).is('button') ? 'html' : 'val';\n        // Revert to normal\n        $btn.removeAttr('disabled')[contentFunc]($btn.data('previous-value'));\n      }).first();\n\n\n      // reload header\n      $.get(theme.routes.search_url, function (data) {\n        var selectors = [\n        '.page-header .cart'];\n\n        var $parsed = $($.parseHTML('<div>' + data + '</div>'));\n        for (var i = 0; i < selectors.length; i++) {\n          var cartSummarySelector = selectors[i];\n          var $newCartObj = $parsed.find(cartSummarySelector).clone();\n          var $currCart = $(cartSummarySelector);\n          $currCart.replaceWith($newCartObj);\n        }\n      });\n\n      // display added notice\n      var $template = $([\n      '<div class=\"ajax-add-notice ajax-add-notice--added global-border-radius\">',\n      '<div class=\"ajax-add-notice__inner\">',\n      '<div class=\"ajax-add-notice__item\">',\n      '<span class=\"feather-icon\">', theme.icons.check, '</span>',\n      theme.strings.addedToCart,\n      '</div>',\n      '<div class=\"ajax-add-notice__go\">',\n      '<a href=\"', theme.routes.cart_url, '\">',\n      theme.strings.goToCart,\n      '<span class=\"feather-icon feather-icon--small\">', theme.icons.chevronRight, '</span>',\n      '</a>',\n      '</div>',\n      '</div>',\n      '</div>'].\n      join(''));\n\n      theme.addNoticeToForm($template, $form);\n\n    }, 'json').fail(function (data) {\n      // Enable add button\n      var $firstBtn = $form.find(':submit').removeAttr('disabled').each(function () {\n        var $btn = $(this);\n        var contentFunc = $btn.is('button') ? 'html' : 'val';\n        $btn[contentFunc]($btn.data('previous-value'));\n      }).first();\n\n      // Not added, show message\n      if (typeof data != 'undefined' && typeof data.status != 'undefined') {\n        var jsonRes = $.parseJSON(data.responseText);\n        var $template = $([\n        '<div class=\"ajax-add-notice ajax-add-notice--error global-border-radius\">',\n        '<div class=\"ajax-add-notice__inner\">',\n        jsonRes.description,\n        '</div>',\n        '</div>'].\n        join(''));\n        theme.addNoticeToForm($template, $form);\n      } else {\n        // Some unknown error? Disable ajax and submit the old-fashioned way.\n        $form.attr('data-ajax-add', false);\n        $form.submit();\n      }\n    });\n    return false;\n  });\n  ;\n  /* Product Media\n   *\n   * Load and destroy:\n   * theme.ProductMedia.init(galleryContainer, {\n   *   onModelViewerPlay: function(e){\n   *     $(e.target).closest('.slick-slider').slick('slickSetOption', 'swipe', false);\n   *   },\n   *   onModelViewerPause: function(e){\n   *     $(e.target).closest('.slick-slider').slick('slickSetOption', 'swipe', true);\n   *   },\n   *   onPlyrPlay: function(e){\n   *     $(e.target).closest('.slick-slider').slick('slickSetOption', 'swipe', false);\n   *   },\n   *   onPlyrPause: function(e){\n   *     $(e.target).closest('.slick-slider').slick('slickSetOption', 'swipe', true);\n   *   },\n   * });\n   *\n   * theme.ProductMedia.destroy(galleryContainer);\n   *\n   * Trigger mediaVisible and mediaHidden events based on UI\n   * $slickSlideshow.on('afterChange', function(evt, slick, current){\n   *   $('.product-media--activated').removeClass('product-media--activated').trigger('mediaHidden');\n   *   $('.product-media', slick.$slides[current]).addClass('product-media--activated').trigger('mediaVisible');\n   * });\n   */\n  theme.ProductMedia = new function () {\n    var _ = this;\n\n    _._setupShopifyXr = function () {\n      if (!window.ShopifyXR) {\n        document.addEventListener('shopify_xr_initialized', _._setupShopifyXr.bind(this));\n        return;\n      }\n      document.removeEventListener('shopify_xr_initialized', _._setupShopifyXr);\n\n      window.ShopifyXR.addModels(JSON.parse($(this).html()));\n      window.ShopifyXR.setupXRElements();\n    };\n\n    this.init = function (container, settings) {\n      var settings = settings || {},\n      _container = container;\n\n      /// First, set up events/callbacks\n\n      // when any media appears\n      $(container).on('mediaVisible', '.product-media--video-loaded, .product-media--model-loaded', function () {\n        // autoplay all media on larger screens\n        if ($(window).width() >= 768) {\n          $(this).data('player').play();\n        }\n        // update view-in-space\n        if ($(this).hasClass('product-media--model')) {\n          $('.view-in-space', _container).attr('data-shopify-model3d-id', $(this).data('model-id'));\n        }\n      });\n\n      // when any media is hidden\n      $(container).on('mediaHidden', '.product-media--video-loaded, .product-media--model-loaded', function () {\n        // pause all media\n        $(this).data('player').pause();\n      });\n\n      // necessary callbacks\n      if (settings.onVideoVisible) {\n        $(container).on('mediaVisible', '.product-media--video-loaded', settings.onVideoVisible);\n      }\n\n      if (settings.onVideoHidden) {\n        $(container).on('mediaHidden', '.product-media--video-loaded', settings.onVideoHidden);\n      }\n\n      $('model-viewer', container).each(function () {\n        if (settings.onModelViewerPlay) {\n          $(this).on('shopify_model_viewer_ui_toggle_play', settings.onModelViewerPlay);\n        }\n        if (settings.onModelViewerPause) {\n          $(this).on('shopify_model_viewer_ui_toggle_pause', settings.onModelViewerPause);\n        }\n      });\n\n      /// Second, initialise media\n\n      var $firstMedia = $(container).find('.product-media:first');\n      var _autoplayOnceIfRequested = function _autoplayOnceIfRequested($currentMedia) {\n        return $firstMedia[0] == $currentMedia[0] && settings.autoplayFirstMedia;\n      };\n\n      // set up video media elements with a controller\n      $(container).find('.product-media--video').each(function (index) {\n        var enableLooping = $(this).data('enable-video-looping'),\n        element = $(this).find('iframe, video')[0],\n        $currentMedia = $(this);\n        if (element.tagName === 'VIDEO') {\n          // set up a controller for Plyr video\n          window.Shopify.loadFeatures([\n          {\n            name: 'video-ui',\n            version: '1.0',\n            onLoad: function () {\n              var playerObj = { playerType: 'html5', element: element };\n\n              playerObj.play = function () {\n                this.plyr.play();\n              }.bind(playerObj);\n\n              playerObj.pause = function () {\n                this.plyr.pause();\n              }.bind(playerObj);\n\n              playerObj.destroy = function () {\n                this.plyr.destroy();\n              }.bind(playerObj);\n\n              playerObj.plyr = new Shopify.Plyr(element, {\n                controls: [\n                'play',\n                'progress',\n                'mute',\n                'volume',\n                'play-large',\n                'fullscreen'],\n\n                autoplay: _autoplayOnceIfRequested($currentMedia),\n                loop: { active: enableLooping },\n                hideControlsOnPause: true,\n                iconUrl: '//cdn.shopify.com/shopifycloud/shopify-plyr/v1.0/shopify-plyr.svg',\n                tooltips: { controls: false, seek: true } });\n\n              $(this).data('player', playerObj).addClass('product-media--video-loaded');\n\n              // callbacks for Plyr playback\n              $(element).on('playing', function () {\n                // pause other media\n                $('.product-media').not($currentMedia).trigger('mediaHidden');\n                // prevent bubbling inputs that can be used by carousels\n                $currentMedia.find('.plyr__controls').off('.themeMediaEventFix').\n                on('keydown.themeMediaEventFix touchstart.themeMediaEventFix mousedown.themeMediaEventFix', function (e) {\n                  e.stopPropagation();\n                });\n                if (typeof callbacks !== 'undefined' && callbacks.onPlyrPlay) {\n                  callbacks.onPlyrPlay(playerObj);\n                }\n              });\n              $(element).on('pause ended', function () {\n                // remove event bubbling interceptor\n                $currentMedia.find('.plyr__controls').off('.themeMediaEventFix');\n                if (typeof callbacks !== 'undefined' && callbacks.onPlyrPause) {\n                  callbacks.onPlyrPause(playerObj);\n                }\n              });\n              if (settings.onPlyrInit) {\n                settings.onPlyrInit(playerObj);\n              }\n            }.bind(this) }]);\n\n\n          theme.loadStyleOnce('https://cdn.shopify.com/shopifycloud/shopify-plyr/v1.0/shopify-plyr.css');\n\n        } else if (element.tagName === 'IFRAME') {\n          if (\n          /^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtube-nocookie\\.com|youtu\\.?be)\\/.+$/.test(\n          element.src))\n\n          {\n            // set up a controller for YouTube video\n            var existingYTCB = window.onYouTubeIframeAPIReady;\n            var loadYoutubeVideo = function () {\n              var playerObj = { playerType: 'youtube', element: element };\n              var videoId = $(this).data('video-id');\n\n              playerObj.player = new YT.Player(element, {\n                videoId: videoId,\n                playerVars: {\n                  autoplay: _autoplayOnceIfRequested($currentMedia) ? 1 : 0,\n                  origin: window.location.origin },\n\n                events: {\n                  onReady: function onReady(event) {\n                    if (_autoplayOnceIfRequested($currentMedia)) {\n                      event.target.playVideo();\n                    }\n                  },\n                  onStateChange: function onStateChange(event) {\n                    if (event.data === YT.PlayerState.ENDED && enableLooping) {\n                      event.target.seekTo(0);\n                    }\n                  } } });\n\n\n\n              playerObj.play = function () {\n                try {\n                  this.player.playVideo();\n                } catch (ex) {}\n              }.bind(playerObj);\n\n              playerObj.pause = function () {\n                try {\n                  this.player.pauseVideo();\n                } catch (ex) {}\n              }.bind(playerObj);\n\n              playerObj.destroy = function () {\n                try {\n                  // ytapi removes iframe, so restore manually\n                  var frameHtml = $(this.element)[0].outerHTML,\n                  $parent = $(this.element).parent();\n                  this.player.destroy();\n                  $parent.append(frameHtml);\n                } catch (ex) {}\n              }.bind(playerObj);\n\n              $(this).data('player', playerObj).addClass('product-media--video-loaded');\n\n              if (settings.onYouTubeInit) {\n                settings.onYouTubeInit(playerObj);\n              }\n            }.bind(this);\n\n            if (window.YT && window.YT.Player) {\n              loadYoutubeVideo();\n            } else {\n              window.onYouTubeIframeAPIReady = function () {\n                if (existingYTCB) {\n                  existingYTCB();\n                }\n                loadYoutubeVideo();\n              };\n              theme.loadScriptOnce('https://www.youtube.com/iframe_api');\n            }\n          }\n        }\n      });\n\n      // set up a 3d model when it first appears\n      $(container).on('mediaVisible mediaVisibleInitial', '.product-media--model:not(.product-media--model-loaded):not(.product-media--model-loading)', function (e) {\n        var element = $(this).find('model-viewer')[0],\n        autoplay = e.type != 'mediaVisibleInitial' || _autoplayOnceIfRequested($(this));\n        // do not run this twice\n        $(this).addClass('product-media--model-loading');\n        // load viewer\n        theme.loadStyleOnce('https://cdn.shopify.com/shopifycloud/model-viewer-ui/assets/v1.0/model-viewer-ui.css');\n        window.Shopify.loadFeatures([\n        {\n          name: 'model-viewer-ui',\n          version: '1.0',\n          onLoad: function () {\n            $(this).data('player', new Shopify.ModelViewerUI(element));\n            // add mouseup event proxy to fix carousel swipe gestures\n            $('<div class=\"theme-event-proxy\">').on('mouseup', function (e) {\n              e.stopPropagation();\n              e.preventDefault();\n              var newEventTarget = $(e.currentTarget).closest('.product-media')[0];\n              newEventTarget.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }));\n            }).appendTo(\n            $(this).find('.shopify-model-viewer-ui__controls-overlay'));\n\n            // when playing or loading, prevent bubbling of mouse/touch start\n            $(this).find('model-viewer').on('shopify_model_viewer_ui_toggle_play', function () {\n              $(this).closest('.product-media').on('touchstart.themeModelViewerFix mousedown.themeModelViewerFix', function (e) {\n                e.stopPropagation();\n              });\n            }).on('shopify_model_viewer_ui_toggle_pause', function () {\n              $(this).closest('.product-media').off('.themeModelViewerFix');\n            });\n            // set class and re-trigger visible event now loaded\n            $(this).addClass('product-media--model-loaded').removeClass('product-media--model-loading');\n            if (settings.onModelViewerInit) {\n              settings.onModelViewerInit(element);\n            }\n            if (autoplay) {\n              $(this).trigger('mediaVisible');\n            }\n          }.bind(this) }]);\n\n\n      });\n\n      // Third, load AR viewer\n      if ($('.model-json', container).length) {\n        window.Shopify.loadFeatures([\n        {\n          name: 'shopify-xr',\n          version: '1.0',\n          onLoad: _._setupShopifyXr.bind($('.model-json', container)) }]);\n\n\n\n        // pause video when a 3d model is launched in AR\n        $(document).on('shopify_xr_launch', function () {\n          $('.product-media--video-loaded').each(function () {\n            $(this).data('player').pause();\n          });\n        });\n      }\n\n      // 3d model in first place - start in paused mode\n      setTimeout(function () {\n        $('.product-media:first', this).filter('.product-media--model').trigger('mediaVisibleInitial');\n      }.bind(container), 50);\n    };\n\n    this.destroy = function (container) {\n      $(document).off('shopify_xr_launch');\n      $(container).off('mediaVisible mediaVisibleInitial mediaHidden');\n      $('.product-media--video-loaded, .product-media--model-loaded', container).each(function () {\n        $(this).data('player').destroy();\n      }).removeClass('product-media--video-loaded product-media--model-loaded');\n      $('.product-media--video video', container).off('playing pause ended');\n      $('model-viewer', container).off('shopify_model_viewer_ui_toggle_play shopify_model_viewer_ui_toggle_pause');\n      $('.product-media--model .theme-event-proxy').off('mouseup').remove();\n    };\n  }();\n\n\n  /*================ Sections ================*/\n  /**\n   * Sidebar section Script\n   * ------------------------------------------------------------------------------\n   *\n     * @namespace sidebar\n   */\n\n  theme.Sidebar = new function () {\n    this.onSectionLoad = function (container) {\n      this.$container = $(container);\n      this.namespace = theme.namespaceFromSection(container);\n\n      // check sidebar exists\n      this.sidebarExists = !!$('.sidebar', container).length;\n      $('.template-index').toggleClass('page-has-sidebar', this.sidebarExists);\n    };\n  }();\n  ;\n  /**\n   * Product Template Script\n   * ------------------------------------------------------------------------------\n   * A file that contains scripts highly couple code to the Product template.\n   *\n     * @namespace product\n   */\n\n  theme.Product = new function () {\n\n    var selectors = {\n      addToCart: '[data-add-to-cart]',\n      addToCartText: '[data-add-to-cart-text]',\n      comparePrice: '[data-compare-price]',\n      comparePriceText: '[data-compare-text]',\n      originalSelectorId: '[data-product-select]',\n      priceWrapper: '[data-price-wrapper]',\n      productFeaturedMedia: '[data-product-featured-media]',\n      productFeaturedMediaWithGallery: '[data-product-featured-media]:not(.product-image--no-gallery) .product-image__link, .product-thumbnails.slick-slider .product-image__link',\n      productThumbnailForCarouselContainer: '.product-thumbnails--inline',\n      productThumbnailImage: '.product-thumbnails__link, .carousel-media .product-image__link',\n      productJson: '[data-product-json]',\n      productPrice: '[data-product-price]',\n      zoomValidThumbs: '.product-thumbnails--desktop .product-thumbnails__item-media-image [data-product-single-thumbnail]',\n      singleOptionSelector: '[data-single-option-selector]',\n      skuWrapper: '.product-sku',\n      sku: '.product-sku__value',\n      unitPrice: '.unit-price',\n      storeAvailability: '[data-store-availability-container]',\n      inventoryNotice: '.product-inventory-notice',\n      variantSelector: '.variant-selector' };\n\n\n    this.onSectionLoad = function (container) {\n      this.$container = $(container);\n\n      /// Init store availability if applicable\n      if ($(selectors.storeAvailability, container).length) {\n        this.storeAvailability = new theme.StoreAvailability($(selectors.storeAvailability, container)[0]);\n      }\n\n      // Stop parsing if we don't have the product json script tag when loading\n      // section in the Theme Editor\n      if (!$(selectors.productJson, this.$container).html()) {\n        return;\n      }\n\n      var sectionId = this.$container.attr('data-section-id');\n      this.productSingleObject = JSON.parse($(selectors.productJson, this.$container).html());\n\n      var options = {\n        $container: this.$container,\n        enableHistoryState: this.$container.data('enable-history-state') || false,\n        singleOptionSelector: selectors.singleOptionSelector,\n        originalSelectorId: selectors.originalSelectorId,\n        product: this.productSingleObject };\n\n\n      this.settings = {};\n      this.namespace = '.product';\n      this.variants = new slate.Variants(options);\n      this.$featuredImage = $(selectors.productFeaturedMedia, this.$container);\n      this.$zoomValidThumbs = $(selectors.zoomValidThumbs, this.$container);\n\n      this.$container.on('variantChange' + this.namespace, this.functions.updateAddToCartState.bind(this));\n      this.$container.on('variantPriceChange' + this.namespace, this.functions.updateProductPrices.bind(this));\n\n      if (this.$container.find(selectors.skuWrapper)) {\n        this.$container.on('variantChange' + this.namespace, this.functions.updateSKU.bind(this));\n      }\n\n      if (this.$container.find(selectors.inventoryNotice)) {\n        this.$container.on('variantChange' + this.namespace, this.functions.updateInventoryNotice.bind(this));\n      }\n\n      if (this.$featuredImage.length > 0) {\n        this.$container.on('variantImageChange' + this.namespace, this.functions.updateProductImage.bind(this));\n      }\n\n      this.$thumbnails = $(selectors.productThumbnailImage, container);\n      if (this.$thumbnails.length > 0) {\n        this.$container.on('click' + this.namespace + ' pseudoclick' + this.namespace, selectors.productThumbnailImage, this.functions.selectThumbnailImage.bind(this));\n      }\n\n      // image zoom\n      this.$container.on('click' + this.namespace, selectors.productFeaturedMediaWithGallery, this.functions.openGallery.bind(this));\n\n      // image media\n      theme.ProductMedia.init(this.$container);\n\n      theme.initVariantSelectors($(selectors.singleOptionSelector, container), options.product);\n\n      if (this.variants.product.variants.length > 1) {\n        // emit an event to broadcast the variant update\n        $(window).trigger('cc-variant-updated', {\n          variant: this.variants.currentVariant,\n          product: this.productSingleObject });\n\n      }\n\n      if (this.$thumbnails.length > 0) {\n        // mobile carousel\n        this.$thumbnailForCarouselContainer = $(selectors.productThumbnailForCarouselContainer, container);\n        this.functions.assessMobileCarousel.bind(this)();\n        $(window).on('debouncedresize' + this.namespace, this.functions.assessMobileCarousel.bind(this));\n\n        // reveal thumbnails now - avoiding lazysizes + slick conflict\n        this.$thumbnails.find('.lazyload--manual').removeClass('lazyload--manual').addClass('lazyload');\n      }\n\n      // note: adds event to window\n      theme.initProductTitleAlignmentWatcher(this.$container, this.namespace);\n\n      // click review rating under title\n      $('.cc-rating-container', container).on('click', function () {\n        $('html,body').animate({\n          scrollTop: $($(this).attr('href')).offset().top },\n        1000);\n        return false;\n      });\n    };\n\n    this.functions = {\n\n      /**\n       * Switches thumbnails into a carousel on mobile\n       */\n      assessMobileCarousel: function assessMobileCarousel() {\n        // test by checking if single image is visible\n        if (!this.$featuredImage.is(':visible')) {\n          if (!this.$thumbnailForCarouselContainer.hasClass('slick-slider')) {\n            this.$thumbnailForCarouselContainer.addClass('slick-slider');\n\n            theme.ProductMedia.destroy(this.$container); // destroy existing media\n\n            this.$thumbnailForCarouselContainer.slick({\n              autoplay: false,\n              fade: false,\n              infinite: false,\n              useTransform: true,\n              dots: true,\n              arrows: true,\n              prevArrow: theme.icons.slideshowPrevArrow,\n              nextArrow: theme.icons.slideshowNextArrow,\n              appendArrows: $('.slick-external-controls .slick-external-arrows', this.$container),\n              appendDots: $('.slick-external-controls .slick-external-dots', this.$container),\n              adaptiveHeight: true,\n              initialSlide: $('.product-thumbnails__item--active', this.$thumbnailForCarouselContainer).index() || 0 });\n\n            // create carousel media\n            this.$thumbnailForCarouselContainer.find('.product-thumbnails__item').each(function () {\n              $('<div class=\"carousel-media\">').append(\n              $(this).find('.thumbnail-media-template').html()).\n              prependTo(this);\n            });\n            theme.ProductMedia.init(this.$container, {\n              onPlyrPlay: function onPlyrPlay(evt) {\n                $(evt.target).closest('.product-media').\n                find('.plyr__controls').\n                off('.themeModelViewerFix').\n                on('touchstart.themeModelViewerFix touchmove.themeModelViewerFix touchend.themeModelViewerFix mousedown.themeModelViewerFix mousemove.themeModelViewerFix mouseup.themeModelViewerFix', function (e) {\n                  e.stopPropagation();\n                });\n              } });\n\n            this.$thumbnailForCarouselContainer.find('.product-media').trigger('mediaVisibleInitial');\n            this.$thumbnailForCarouselContainer.on('afterChange', function (evt, slick, current) {\n              // notify media of visibility\n              var $currentMedia = $('.product-media', slick.$slides[current]);\n              $('.product-media').not($currentMedia).trigger('mediaHidden');\n              $currentMedia.trigger('mediaVisible');\n              // fix tabbing\n              theme.productGallerySlideshowTabFix(slick.$slides, current);\n            });\n          }\n        } else {\n          if (this.$thumbnailForCarouselContainer.hasClass('slick-slider')) {\n            // remove carousel media\n            theme.ProductMedia.destroy(this.$container);\n            this.$thumbnailForCarouselContainer.find('.carousel-media').remove();\n\n            this.$thumbnailForCarouselContainer.slick('unslick').off('afterChange');\n            this.$thumbnailForCarouselContainer.removeClass('slick-slider');\n            theme.ProductMedia.init(this.$container); // init original large media\n            this.$thumbnailForCarouselContainer.find('.product-media').trigger('mediaVisibleInitial');\n          }\n        }\n      },\n\n      /**\n       * Updates the DOM state of the add to cart button\n       *\n       * @param {boolean} enabled - Decides whether cart is enabled or disabled\n       * @param {string} text - Updates the text notification content of the cart\n       */\n      updateAddToCartState: function updateAddToCartState(evt) {\n        var variant = evt.variant;\n\n        if (variant) {\n          $(selectors.priceWrapper, this.$container).removeClass('product-price--unavailable');\n        } else {\n          $(selectors.addToCart, this.$container).prop('disabled', true);\n          $(selectors.addToCartText, this.$container).html(theme.strings.unavailable);\n          $(selectors.priceWrapper, this.$container).addClass('product-price--unavailable');\n          return;\n        }\n\n        if (variant.available) {\n          $(selectors.addToCart, this.$container).prop('disabled', false);\n          $(selectors.addToCartText, this.$container).html(theme.strings.addToCart);\n        } else {\n          $(selectors.addToCart, this.$container).prop('disabled', true);\n          $(selectors.addToCartText, this.$container).html(theme.strings.soldOut);\n        }\n\n        // backorder\n        var $backorderContainer = $('.backorder', this.$container);\n        if ($backorderContainer.length) {\n          if (variant && variant.available) {\n            var $option = $(selectors.originalSelectorId + ' option[value=\"' + variant.id + '\"]', this.$container);\n            if (variant.inventory_management && $option.data('stock') == 'out') {\n              $backorderContainer.find('.backorder__variant').html(this.productSingleObject.title + (variant.title.indexOf('Default') >= 0 ? '' : ' - ' + variant.title));\n              $backorderContainer.show();\n            } else {\n              $backorderContainer.hide();\n            }\n          } else {\n            $backorderContainer.hide();\n          }\n        }\n      },\n\n      /**\n       * Get the display unit for unit pricing\n       */\n      _getBaseUnit: function _getBaseUnit(variant) {\n        return variant.unit_price_measurement.reference_value === 1 ?\n        variant.unit_price_measurement.reference_unit :\n        variant.unit_price_measurement.reference_value +\n        variant.unit_price_measurement.reference_unit;\n      },\n\n      /**\n       * Updates the DOM with specified prices\n       *\n       * @param {string} productPrice - The current price of the product\n       * @param {string} comparePrice - The original price of the product\n       */\n      updateProductPrices: function updateProductPrices(evt) {\n        var variant = evt.variant;\n        var $comparePrice = $(selectors.comparePrice, this.$container);\n        var $compareEls = $comparePrice.add(selectors.comparePriceText, this.$container);\n        var $price = $(selectors.productPrice, this.$container);\n        var $unitPrice = $(selectors.unitPrice, this.$container);\n\n        $price.html('<span class=\"theme-money\">' + theme.Shopify.formatMoney(variant.price, theme.moneyFormatWithCodePreference) + '</span>');\n\n        if (variant.compare_at_price > variant.price) {\n          $comparePrice.html('<span class=\"theme-money\">' + theme.Shopify.formatMoney(variant.compare_at_price, theme.moneyFormatWithCodePreference) + '</span>');\n          $compareEls.removeClass('hide');\n          $price.addClass('product-price__reduced');\n        } else {\n          $comparePrice.html('');\n          $compareEls.addClass('hide');\n          $price.removeClass('product-price__reduced');\n        }\n\n        if (variant.unit_price_measurement) {\n          var $newUnitPriceArea = $('<div class=\"unit-price small-text\">');\n          $('<span class=\"unit-price__price theme-money\">').html(theme.Shopify.formatMoney(variant.unit_price, theme.moneyFormat)).appendTo($newUnitPriceArea);\n          $('<span class=\"unit-price__separator\">').html(theme.strings.unitPriceSeparator).appendTo($newUnitPriceArea);\n          $('<span class=\"unit-price__unit\">').html(this.functions._getBaseUnit(variant)).appendTo($newUnitPriceArea);\n          if ($unitPrice.length) {\n            $unitPrice.replaceWith($newUnitPriceArea);\n          } else {\n            $(selectors.priceWrapper, this.$container).append($newUnitPriceArea);\n          }\n        } else {\n          $unitPrice.remove();\n        }\n      },\n\n      /**\n       * Updates the SKU\n       */\n      updateSKU: function updateSKU(evt) {\n        var variant = evt.variant;\n\n        if (variant && variant.sku) {\n          $(selectors.skuWrapper, this.$container).removeClass('product-sku--empty');\n          $(selectors.sku, this.$container).html(variant.sku);\n        } else {\n          $(selectors.skuWrapper, this.$container).addClass('product-sku--empty');\n          $(selectors.sku, this.$container).empty();\n        }\n      },\n\n      _getVariantOptionElement: function _getVariantOptionElement(variant) {\n        return $(selectors.variantSelector, this.$container).find('option[value=\"' + variant.id + '\"]');\n      },\n\n      /**\n       * Updates the Inventory Notice\n       */\n      updateInventoryNotice: function updateInventoryNotice(evt) {\n        var variant = evt.variant;\n        if (variant) {\n          var inventoryData = this.functions._getVariantOptionElement(variant).data('inventory');\n          if (inventoryData && inventoryData > 0) {\n            $(selectors.inventoryNotice, this.$container).removeClass('product-inventory-notice--no-inventory').html(theme.strings.inventoryNotice.replace('[[ quantity ]]', inventoryData));\n          } else {\n            $(selectors.inventoryNotice, this.$container).addClass('product-inventory-notice--no-inventory').empty();\n          }\n        } else {\n          $(selectors.inventoryNotice, this.$container).addClass('product-inventory-notice--no-inventory').empty();\n        }\n      },\n\n      /**\n       * Display selected thumbnail\n       */\n      selectThumbnailImage: function selectThumbnailImage(evt) {\n        var $thumbnailContainer = $(evt.currentTarget).parent();\n        if (!$thumbnailContainer.hasClass('product-thumbnails__item--active')) {\n          // if a carousel exists\n          if (this.$thumbnailForCarouselContainer.hasClass('slick-slider')) {\n            if ($thumbnailContainer.hasClass('carousel-media')) {\n              // selected actual slide - do nothing\n            } else {\n              // hidden thumbnail, e.g. variant image change\n              var mediaId = $thumbnailContainer.find('[data-thumbnail-media-id]').data('thumbnail-media-id');\n              var slickIndex = this.$thumbnailForCarouselContainer.find('[data-thumbnail-media-id=\"' + mediaId + '\"]').closest('.slick-slide').data('slick-index');\n              this.$thumbnailForCarouselContainer.slick('slickGoTo', slickIndex);\n\n              $thumbnailContainer.\n              addClass('product-thumbnails__item--active').\n              siblings('.product-thumbnails__item--active').\n              removeClass('product-thumbnails__item--active');\n            }\n          } else {\n            // with thumbnails\n            theme.ProductMedia.destroy(this.$container);\n            this.$featuredImage.html(\n            $(evt.currentTarget).find('.thumbnail-media-template').html());\n\n            // load media and play immediately\n            theme.ProductMedia.init(this.$container, {\n              autoplayFirstMedia: true });\n\n\n            $thumbnailContainer.\n            addClass('product-thumbnails__item--active').\n            siblings('.product-thumbnails__item--active').\n            removeClass('product-thumbnails__item--active');\n          }\n        }\n        evt.preventDefault();\n      },\n\n      /**\n       * Updates the DOM with the specified image URL\n       */\n      updateProductImage: function updateProductImage(evt) {\n        var variant = evt.variant;\n        if (variant.featured_media) {\n          this.$container.find('[data-thumbnail-media-id=\"' + variant.featured_media.id + '\"]').trigger('pseudoclick');\n        }\n      },\n\n      /**\n       * Show gallery of all product images\n       */\n      openGallery: function openGallery(evt) {\n        evt.preventDefault();\n\n        var pswpElement = document.querySelectorAll('.pswp')[0];\n\n        var items = [];\n        if (this.$zoomValidThumbs.length) {\n          var useSlideshowImg = !this.$zoomValidThumbs.is(':visible');\n          this.$zoomValidThumbs.each(function () {\n            var item = {\n              src: $(this).attr('href'),\n              w: $(this).data('image-w'),\n              h: $(this).data('image-h') };\n\n            var img;\n            if (useSlideshowImg) {\n              img = $('.product-image__link[href=\"' + $(this).attr('href') + '\"]:visible img')[0];\n            } else {\n              img = $(this).find('img')[0];\n            }\n            if (img && typeof img.currentSrc !== 'undefined') {\n              item.msrc = img.currentSrc;\n            }\n            items.push(item);\n          });\n        } else {\n          var item = {\n            src: this.$featuredImage.find('a').attr('href'),\n            w: this.$featuredImage.data('image-w'),\n            h: this.$featuredImage.data('image-h') };\n\n          var img = this.$featuredImage.find('img')[0];\n          if (typeof img.currentSrc !== 'undefined') {\n            item.msrc = img.currentSrc;\n          }\n          items.push(item);\n        }\n\n        var index = 0;\n        var $activeThumb = this.$container.find('.product-thumbnails__item--active:not(.slick-slide):visible .product-thumbnails__link, .product-thumbnails__item-media-image.slick-current:visible .product-thumbnails__link');\n        if ($activeThumb.length) {\n          var activeHref = $activeThumb.attr('href');\n          for (var i = 0; i < items.length; i++) {\n            if (items[i].src == activeHref) {\n              index = i;\n              break;\n            }\n          }\n        }\n\n        var options = {\n          index: index,\n          history: false,\n          captionEl: false,\n          shareEl: false,\n          fullscreenEl: false,\n          getThumbBoundsFn: function (imageIndex) {\n            var thumbnail = false;\n            var hrefToFind = items[imageIndex].src;\n\n            // first check - main image on desktop\n            if (this.$featuredImage.find('.product-image__link:visible').attr('href') == hrefToFind) {\n              thumbnail = this.$featuredImage.find('.product-image__link img')[0];\n            } else {\n              // second check - thumbnails & slideshow\n              var $thumb = this.$container.find('.product-thumbnails__link, .product-image__link').filter(function () {\n                return $(this).attr('href') == hrefToFind;\n              }).filter(':visible');\n              if ($thumb.length) {\n                thumbnail = $thumb.find('img')[0];\n              }\n            }\n\n            // backup to avoid js error\n            if (!thumbnail) {\n              thumbnail = this.$featuredImage.find('img')[0];\n            }\n\n            var pageYScroll = window.pageYOffset || document.documentElement.scrollTop,\n            rect = thumbnail.getBoundingClientRect();\n\n            return { x: rect.left, y: rect.top + pageYScroll, w: rect.width };\n          }.bind(this) };\n\n\n        // Initializes and opens PhotoSwipe\n        this.imageGallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, options);\n        this.imageGallery.init();\n        this.imageGallery.listen('destroy', function () {\n          this.imageGallery = null;\n        }.bind(this));\n      } };\n\n\n    this.onSectionUnload = function (container) {\n      this.$container.off(this.namespace);\n      $(window).off(this.namespace);\n      if (this.imageGallery) {\n        this.imageGallery.close();\n      }\n      if (this.$thumbnailForCarouselContainer) {\n        this.$thumbnailForCarouselContainer.filter('.slick-slider').slick('unslick').off('afterChange');\n      }\n      if (this.storeAvailability) {\n        this.storeAvailability.onSectionUnload();\n      }\n      theme.ProductMedia.destroy(this.$container);\n      $('cc-rating-container', container).off('click');\n    };\n  }();\n  ;\n  /**\n   * Header Script\n   * ------------------------------------------------------------------------------\n   *\n   * @namespace Header\n   */\n\n  theme.Header = new function () {\n    this.onSectionLoad = function (container) {\n      this.$container = $(container);\n      this.namespace = theme.namespaceFromSection(container);\n      this.mobileMenuTransitionTime = 500;\n\n      this.$searchBar = $('.search-bar', container);\n      this.$newsletterSignupButton = $('.js-header-newsletter-open', this.$container);\n      this.$searchInput = $('.search-form__input');\n\n      /**\n       * Making search bar un-tabbable on page load\n       */\n      $('.header-search-form', this.$container).find('a, button, input').attr('tabindex', '-1');\n\n      /**\n       * Toggle header search bar open\n       */\n      $('.js-header-search-trigger', this.$container).on('click' + this.namespace, function (e) {\n        e.preventDefault();\n        $('body').toggleClass('show-search');\n        $('.header-search-form', this.$container).find('a, button, input').removeAttr('tabindex');\n        $('.header-search-form .search-form__input', this.$container).focus();\n      }.bind(this));\n\n      /**\n       * Fetch search results for entered text\n       */\n      $('.search-form__input[data-live-search=\"true\"]', this.$container).on('change' + this.namespace + ' keyup' + this.namespace + ' paste' + this.namespace, function (e) {\n        this.functions.fetchSearchResults.bind(this)(e);\n      }.bind(this));\n\n      // mobile menu events\n      $(this.$container).on('click' + this.namespace, '.js-mobile-menu-icon', this.functions.mobileMenuOpen.bind(this));\n      $(this.$container).on('click' + this.namespace, '.js-close-mobile-menu', this.functions.mobileMenuClose.bind(this));\n      this.$mobileDropdownContainer = $('.mobile-nav-column-inner', container);\n      $(this.$container).on('click' + this.namespace, '.js-mobile-dropdown-trigger', this.functions.mobileMenuDropdownOpen.bind(this));\n      $(this.$container).on('click' + this.namespace, '.js-mobile-dropdown-return', this.functions.mobileMenuDropdownClose.bind(this));\n\n\n      // open newsletter form on click\n      if (this.$newsletterSignupButton.length > 0) {\n        $(this.$container).on('click' + this.namespace, '.js-header-newsletter-open', function () {\n          $.colorbox({\n            transition: 'none',\n            html: $('.header-newsletter-wrapper').html(),\n            onOpen: theme.colorboxFadeTransOnOpen,\n            onComplete: theme.colorboxFadeTransOnComplete });\n\n        });\n        // show newsletter form if it contains messages\n        if ($('.header-newsletter-wrapper .form-success, .header-newsletter-wrapper .errors').length) {\n          $.colorbox({\n            transition: 'fade',\n            html: $('.header-newsletter-wrapper').html(),\n            onOpen: theme.colorboxFadeTransOnOpen,\n            onComplete: theme.colorboxFadeTransOnComplete });\n\n        }\n      }\n\n      // aria labels\n      $('.main-nav__has-dropdown > a, .main-nav__child-has-dropdown > a', this.$container).attr('aria-haspopup', 'true').attr('aria-expanded', 'false');\n      this.$container.on('mouseenter' + this.namespace + ' mouseleave' + this.namespace, '.main-nav__has-dropdown, .main-nav__child-has-dropdown', function (evt) {\n        if (evt.type == 'mouseenter') {\n          $(this).children('[aria-expanded]').attr('aria-expanded', true);\n          $(this).addClass('show-dropdown');\n        } else {\n          $(this).children('[aria-expanded]').attr('aria-expanded', false);\n          $(this).removeClass('show-dropdown');\n        }\n      });\n\n      // keyboard navigation - parent links\n      this.$container.on('keydown' + this.namespace, '.main-nav__has-dropdown > .main-nav__link', function (evt) {\n        if (evt.which == 40) {// Down arrow\n          evt.preventDefault();\n          $(evt.target).trigger('mouseenter');\n        }\n\n        if (evt.which == 38 || evt.which == 27) {// Up arrow or esc key\n          evt.preventDefault();\n          $(evt.target).trigger('mouseleave');\n        }\n      });\n\n      // keyboard navigation - child links\n      this.$container.on('keydown' + this.namespace, '.main-nav__child-has-dropdown > .main-nav__child-link', function (evt) {\n        if (evt.which == 39 || evt.which == 40) {// Right arrow or down arrow\n          evt.preventDefault();\n          $(evt.target).trigger('mouseenter');\n        }\n\n        if (evt.which == 37 || evt.which == 38 || evt.which == 27) {// Left arrow, up arrow or esc key\n          evt.preventDefault();\n          $(evt.target).trigger('mouseleave');\n        }\n      });\n\n      // keyboard navigation - grandchild links\n      this.$container.on('keydown' + this.namespace, '.main-nav__sub-child-link', function (evt) {\n        if (evt.which == 27) {// Esc key\n          evt.preventDefault();\n          $(evt.target).trigger('mouseleave');\n        }\n      });\n\n      // touch events\n      $(this.$container).on('touchstart' + this.namespace + ' touchend' + this.namespace + ' click' + this.namespace, '.main-nav__has-dropdown > .main-nav__link, .main-nav__child-has-dropdown > .main-nav__child-link', function (evt) {\n\n        // unless showing mobile menu\n        if (!$(this).next('.dropdown-chevron').is(':visible')) {\n          if (evt.type == 'touchstart') {\n            $(this).data('touchstartedAt', evt.timeStamp);\n          } else if (evt.type == 'touchend') {\n            // down & up in under a second - presume tap\n            if (evt.timeStamp - $(this).data('touchstartedAt') < 1000) {\n              $(this).data('touchOpenTriggeredAt', evt.timeStamp);\n              if ($(this).parent().hasClass('show-dropdown')) {\n                // trigger close\n                $(this).trigger('mouseleave');\n              } else {\n                // trigger close on any open items\n                $('.main-nav .show-dropdown').removeClass('show-dropdown').children('a').attr('aria-expanded', false);\n                // trigger open\n                $(this).trigger('mouseenter');\n              }\n              // prevent fake click\n              return false;\n            }\n          } else if (evt.type == 'click') {\n            // if touch open was triggered very recently, prevent click event\n            if ($(this).data('touchOpenTriggeredAt') && evt.timeStamp - $(this).data('touchOpenTriggeredAt') < 1000) {\n              return false;\n            }\n          }\n        }\n\n        if (evt.type === 'click' && theme.device.isTouch() && window.innerWidth >= 1024) {\n          evt.preventDefault();\n        }\n      });\n\n      // keep menus in viewport\n      this.functions.assessMenuPositions.bind(this)();\n      $(window).on('debouncedresize' + this.namespace, this.functions.assessMenuPositions.bind(this));\n\n      // localization\n      $('.disclosure', this.$container).each(function () {\n        $(this).data('disclosure', new theme.Disclosure($(this)));\n      });\n    };\n\n    this.functions = {\n      /**\n      * Ensure dropdown menus do not go off the right-edge of the page\n      */\n      assessMenuPositions: function assessMenuPositions() {\n        var windowWidth = $(window).width();\n        $('.main-nav__dropdown', this.$container).each(function () {\n          var thisWidth = $(this).outerWidth();\n\n          // this dropdown\n          var gutter = 20;\n          var marginLeft = parseInt($(this).css('margin-left')) || 0;\n          var offEdgeAmount = windowWidth - gutter - ($(this).offset().left - marginLeft + thisWidth);\n          $(this).css('margin-left', offEdgeAmount < 0 ? offEdgeAmount : '');\n\n          // child dropdown\n          $(this).toggleClass(\n          'main-nav__dropdown--expand-left',\n          $(this).offset().left + thisWidth * 2 > windowWidth);\n\n        });\n      },\n\n      /**\n      * Fetching search results\n      */\n      fetchSearchResults: function fetchSearchResults(e) {\n        var $input = $(e.target);\n        var terms = $input.val();\n        var includeMeta = false;\n        if (this.$searchInput.data('live-search-meta')) {\n          includeMeta = true;\n        }\n\n        // only do something if search terms have changed\n        if (terms != $input.data('previous-terms')) {\n          $input.data('previous-terms', terms);\n\n          // is it a valid search term\n          if (terms.length > 0) {\n            // abort first, let callbacks run\n            if (this.searchXhr) {\n              this.searchXhr.abort();\n            }\n\n            // add class to show results, in case it's closed. Also hide existing items.\n            this.$searchBar.addClass('search-bar--show-results search-bar--loading').removeClass('search-bar--has-results');\n\n            // build search url\n            var $form = $input.closest('form');\n            var searchUrl = $form.attr('action') + ($form.attr('action').indexOf('?') > -1 ? '&' : '?') + $form.serialize();\n\n            // build request for api or fallback\n            var ajaxUrl, ajaxData;\n            if (theme.shopifyFeatures.predictiveSearch) {\n              // use the API\n              ajaxUrl = theme.routes.search_url + '/suggest.json';\n              ajaxData = {\n                \"q\": $form.find('input[name=\"q\"]').val(),\n                \"resources\": {\n                  \"type\": $form.find('input[name=\"type\"]').val(),\n                  \"limit\": 12,\n                  \"options\": {\n                    \"unavailable_products\": 'last',\n                    \"fields\": includeMeta ? \"title,product_type,variants.title,vendor,tag,variants.sku\" : \"title,product_type,variants.title,vendor\" } } };\n\n\n\n            } else {\n              // use the theme template fallback\n              ajaxUrl = $form.attr('action') + '?' + $form.serialize() + '&view=data';\n              ajaxData = null;\n            }\n\n            // fetch search results\n            this.searchXhr = $.ajax({\n              url: ajaxUrl,\n              data: ajaxData,\n              dataType: \"json\",\n              success: this.functions.buildSearchResults.bind(this, searchUrl) }).\n            always(function () {\n              this.searchXhr = null;\n              this.$searchBar.removeClass('search-bar--loading');\n            }.bind(this));\n          } else {\n            if (this.searchXhr) {\n              this.searchXhr.abort();\n            }\n            this.$searchBar.removeClass('search-bar--loading search-bar--has-results');\n          }\n        }\n      },\n\n      /**\n      * Build search results from response\n      */\n      buildSearchResults: function buildSearchResults(searchUrl, response) {\n        this.$searchBar.addClass('search-bar--has-results');\n        var $resultsContainer = $('.search-bar__results-list', this.$searchBar).empty();\n        if (\n        response.resources.results.products && response.resources.results.products.length > 0 ||\n        response.resources.results.pages && response.resources.results.pages.length > 0 ||\n        response.resources.results.articles && response.resources.results.articles.length > 0)\n        {\n          var $productResults = $('<div class=\"search-bar__results-products\">');\n          var $pageResults = $('<div class=\"search-bar__results-pages\">');\n\n          if (response.resources.results.products) {\n            for (var i = 0; i < response.resources.results.products.length; i++) {\n              var result = response.resources.results.products[i];\n\n              var $item = $('<a class=\"mini-product\">').attr('href', result.url);\n              var $imgCont = $('<div class=\"mini-product__image-container\">').appendTo($item);\n              if (result.image) {\n                $('<img class=\"mini-product__image\" alt=\"\" role=\"presentation\"/>').attr('src', slate.Image.getSizedImageUrl(result.image, '100x100_crop_center')).appendTo($imgCont);\n              }\n              var $details = $('<div class=\"mini-product__details\">').appendTo($item);\n              $('<div class=\"mini-product__title\">').html(result.title).appendTo($details);\n\n              if (this.$searchInput.data('live-search-vendor')) {\n                $('<div class=\"mini-product__vendor small-text\">').html(result.vendor).appendTo($details);\n              }\n\n              if (this.$searchInput.data('live-search-price')) {\n                var $price = $('<div class=\"mini-product__price\">').html(theme.Shopify.formatMoney(result.price_min, theme.moneyFormatWithCodePreference)).appendTo($details);\n                if (parseFloat(result.compare_at_price_min) > parseFloat(result.price_min)) {\n                  $price.addClass('mini-product__price--on-sale');\n                }\n              }\n\n              $item.appendTo($productResults);\n            }\n          }\n\n          if (response.resources.results.pages) {\n            for (var i = 0; i < response.resources.results.pages.length; i++) {\n              var result = response.resources.results.pages[i];\n              $('<a class=\"search-bar__results-pages__link\">').attr('href', result.url).html(result.title).appendTo($pageResults);\n            }\n          }\n\n          if (response.resources.results.articles) {\n            for (var i = 0; i < response.resources.results.articles.length; i++) {\n              var result = response.resources.results.articles[i];\n              $('<a class=\"search-bar__results-pages__link\">').attr('href', result.url).html(result.title).appendTo($pageResults);\n            }\n          }\n\n          $resultsContainer.append($productResults);\n\n          if ($pageResults.children().length) {\n            $('<h6 class=\"search-bar__results-pages-title small-cap-heading\">').html(theme.strings.searchResultsPages).prependTo($pageResults);\n            $resultsContainer.append($pageResults);\n          }\n          $('<a class=\"search-bar__results-all-link\">').html(theme.strings.searchResultsViewAll).attr('href', searchUrl).appendTo($resultsContainer);\n        } else {\n          $('<div>').html(theme.strings.searchResultsNoResults).appendTo($resultsContainer);\n        }\n      },\n\n      /**\n       * Event for showing the mobile navigation\n       */\n      mobileMenuOpen: function mobileMenuOpen(evt) {\n        evt.preventDefault();\n        $(document.body).addClass('mobile-menu-prime');\n        setTimeout(function () {\n          $(document.body).addClass('mobile-menu-open');\n        }, 10);\n      },\n\n      /**\n       * Event for closing the mobile navigation\n       */\n      mobileMenuClose: function mobileMenuClose(evt) {\n        evt.preventDefault();\n        $(document.body).removeClass('mobile-menu-open');\n        setTimeout(function () {\n          $(document.body).removeClass('mobile-menu-prime');\n        }, 500);\n      },\n\n      /**\n       * Event for opening a mobile dropdown menu\n       */\n      mobileMenuDropdownOpen: function mobileMenuDropdownOpen(evt) {\n        evt.preventDefault();\n        var $dropdownToShow = $(evt.currentTarget).siblings('.main-nav__dropdown');\n        if ($dropdownToShow.length) {\n          // show level 2 dropdown\n          var $newDropdown = $dropdownToShow.clone().wrap('<div class=\"mobile-nav-menu-container mobile-dropdown mobile-menu-level-2\">').parent();\n          // add return link\n          $('<a class=\"mobile-dropdown__back js-mobile-dropdown-return\" href=\"#\">').html(\n          [\n          '<span class=\"feather-icon\">',\n          theme.icons.arrowLeft,\n          '</span><span class=\"mobile-dropdown__back-text\">',\n          $(evt.currentTarget).siblings('.main-nav__link').html(),\n          '</span>'].\n          join('')).\n          prependTo($newDropdown);\n          this.$mobileDropdownContainer.append($newDropdown);\n          setTimeout(function () {\n            this.$mobileDropdownContainer.addClass('show-mobile-menu-level-2');\n          }.bind(this), 10);\n        } else {\n          $dropdownToShow = $(evt.currentTarget).siblings('.main-nav__sub-dropdown');\n          if ($dropdownToShow.length) {\n            // show level 3 dropdown\n            var $newDropdown = $dropdownToShow.clone().wrap('<div class=\"mobile-nav-menu-container mobile-dropdown mobile-menu-level-3\">').parent();\n            // add return link\n            $('<a class=\"mobile-dropdown__back js-mobile-dropdown-return\" href=\"#\">').html(\n            [\n            '<span class=\"feather-icon\">',\n            theme.icons.arrowLeft,\n            '</span><span class=\"mobile-dropdown__back-text\">',\n            $(evt.currentTarget).siblings('.main-nav__child-link').html(),\n            '</span>'].\n            join('')).\n            prependTo($newDropdown);\n            this.$mobileDropdownContainer.append($newDropdown);\n            setTimeout(function () {\n              this.$mobileDropdownContainer.addClass('show-mobile-menu-level-3');\n            }.bind(this), 10);\n          }\n        }\n      },\n\n      /**\n       * Event for closing a mobile dropdown menu\n       */\n      mobileMenuDropdownClose: function mobileMenuDropdownClose(evt) {\n        evt.preventDefault();\n        if (this.$mobileDropdownContainer.hasClass('show-mobile-menu-level-3')) {\n          // transition out level 3 dropdown\n          this.$mobileDropdownContainer.removeClass('show-mobile-menu-level-3');\n          // remove menu element after transition time\n          var $toRemove = this.$mobileDropdownContainer.find('.mobile-menu-level-3');\n          setTimeout(function () {\n            $toRemove.remove();\n          }, this.mobileMenuTransitionTime);\n        } else if (this.$mobileDropdownContainer.hasClass('show-mobile-menu-level-2')) {\n          // transition out level 2 dropdown\n          this.$mobileDropdownContainer.removeClass('show-mobile-menu-level-2');\n          // remove menu element after transition time\n          var $toRemove = this.$mobileDropdownContainer.find('.mobile-menu-level-2');\n          setTimeout(function () {\n            $toRemove.remove();\n          }, this.mobileMenuTransitionTime);\n        }\n      } };\n\n\n    this.onSectionUnload = function () {\n      this.$container.off(this.namespace);\n      $('.js-header-search-trigger', this.$container).off(this.namespace);\n      $('.search-form__input', this.$container).off(this.namespace);\n      $(document).off(this.namespace);\n      $(window).off(this.namespace);\n      this.$searchBar.off(this.namespace);\n      $('.disclosure', this.$container).each(function () {\n        $(this).data('disclosure').unload();\n      });\n    };\n  }();\n  ;\n  /**\n   * Footer Script\n   * ------------------------------------------------------------------------------\n   *\n   * @namespace Footer\n   */\n\n  theme.Footer = new function () {\n    this.onSectionLoad = function (container) {\n      this.$container = $(container);\n      this.namespace = theme.namespaceFromSection(container);\n\n      // localization\n      $('.disclosure', this.$container).each(function () {\n        $(this).data('disclosure', new theme.Disclosure($(this)));\n      });\n    };\n\n    this.onSectionUnload = function () {\n      $('.disclosure', this.$container).each(function () {\n        $(this).data('disclosure').unload();\n      });\n    };\n  }();\n  ;\n  /**\n   * Banner Section Script\n   * ------------------------------------------------------------------------------\n   *\n   * @namespace Banner\n   */\n\n  theme.Banner = new function () {\n    this.onSectionLoad = function (container) {\n      this.$container = $(container);\n      this.namespace = theme.namespaceFromSection(container);\n      this.$slideshow = $('.slideshow', this.$container);\n      this.stackBreakpoint = 840;\n\n      // Initialise slideshow\n      this.$slideshow.on('init', function () {\n        $('.lazyload--manual', this).removeClass('lazyload--manual').addClass('lazyload');\n      }).slick({\n        autoplay: this.$slideshow.data('autoplay'),\n        fade: this.$slideshow.data('transition') != 'slide',\n        speed: this.$slideshow.data('transition') == 'instant' ? 0 : 500,\n        autoplaySpeed: this.$slideshow.data('autoplay-speed') * 1000,\n        infinite: true,\n        useTransform: true,\n        arrows: false,\n        dots: this.$slideshow.find('.slide').length > 1,\n        pauseOnHover: this.$slideshow.data('transition') != 'instant' || this.$slideshow.data('autoplay-speed') > 2 // no pause when quick & instant // no pause when quick & instant\n      });\n\n      // Slideshow\n      this.$companionContent = $('.banner-section__companion-column .overlay__inner', this.$container);\n      if (this.$companionContent.children().length > 1) {\n        this.functions.assessCompanionCarousel.bind(this)();\n        $(window).on('debouncedresize' + this.namespace, this.functions.assessCompanionCarousel.bind(this));\n      }\n    };\n\n    this.functions = {\n      /**\n      * Enable/disable carousel on companion content based on screen size\n      */\n      assessCompanionCarousel: function assessCompanionCarousel() {\n        if ($(window).width() < this.stackBreakpoint) {\n          if (!this.$companionContent.hasClass('slick-slider')) {\n            this.$companionContent.addClass('slick-slider').children().addClass('slide');\n            this.$companionContent.parent().addClass('overlay--with-slider');\n            this.$companionContent.slick({\n              autoplay: true,\n              fade: false,\n              infinite: true,\n              useTransform: true,\n              arrows: false,\n              dots: false,\n              autoplaySpeed: 7000 // 7 seconds between slides\n            });\n          }\n        } else {\n          if (this.$companionContent.hasClass('slick-slider')) {\n            this.$companionContent.slick('unslick');\n            this.$companionContent.parent().removeClass('overlay--with-slider');\n            this.$companionContent.removeClass('slick-slider').children().removeClass('slide');\n          }\n        }\n      } };\n\n\n    this.onBlockSelect = function (block) {\n      $(block).closest('.slick-slider').\n      slick('slickGoTo', $(block).data('slick-index')).\n      slick('slickPause');\n    };\n\n    this.onBlockDeselect = function (block) {\n      $(block).closest('.slick-slider').\n      slick('slickPlay');\n    };\n\n    this.onSectionUnload = function () {\n      this.$slideshow.slick('unslick').off('init');\n      if (this.$companionContent.hasClass('slick-slider')) {\n        this.$companionContent.slick('unslick');\n      }\n      $(window).off(this.namespace);\n    };\n  }();\n  ;\n  /**\n   * Featured Collection Section Script\n   * ------------------------------------------------------------------------------\n   *\n   * @namespace FeaturedCollection\n   */\n\n  theme.FeaturedCollection = new function () {\n    this.onSectionLoad = function (container) {\n      this.$container = $(container);\n      this.namespace = theme.namespaceFromSection(container);\n      this.$carousel = $('[data-grid-carousel]', this.$container);\n\n      if (this.$carousel.length) {\n        // switch to swiper classes\n        this.$carousel.\n        addClass('swiper-container').\n        children('.grid').\n        addClass('swiper-wrapper').\n        removeClass('grid').\n        children().\n        addClass('swiper-slide').\n        removeClass('grid__item');\n        // init swiper\n        this.carouselSwiper = new Swiper(this.$carousel, {\n          init: false,\n          //loop: true,\n          //loopedSlides: 6,\n          freeMode: false,\n          slidesPerView: this.$carousel.data('grid-carousel-columns'),\n          autoHeight: false,\n          grabCursor: true,\n          effect: 'slide',\n          centeredSlides: false,\n          spaceBetween: 14,\n          navigation: {\n            nextEl: $('.carousel-next', this.$container),\n            prevEl: $('.carousel-prev', this.$container) },\n\n          autoplay: false,\n          breakpoints: {\n            768: {\n              slidesPerView: 2 },\n\n            560: {\n              spaceBetween: 12,\n              freeMode: true,\n              slidesPerView: 2 } } });\n\n\n\n        this.carouselSwiper.once('init', function (evt) {\n          this.$el.find('.swiper-slide-duplicate .lazyloading').addClass('lazyload');\n        });\n        this.carouselSwiper.init();\n      }\n\n      // note: adds event to window\n      theme.initProductTitleAlignmentWatcher(this.$container, this.namespace);\n    };\n\n    this.onSectionUnload = function () {\n      $(window).off(this.namespace);\n      if (this.$carousel.length) {\n        this.carouselSwiper.destroy();\n      }\n    };\n  }();\n  ;\n  /**\n   * MiniCollectionList Section Script\n   * ------------------------------------------------------------------------------\n   *\n   * @namespace MiniCollectionList\n   */\n\n  theme.MiniCollectionList = new function () {\n    this.onSectionLoad = function (container) {\n      this.$container = $(container);\n      this.namespace = theme.namespaceFromSection(container);\n      this.$slideshow = $('.swiper-container', this.$container);\n\n      /**\n       * Swiper slideshow\n       */\n      var slidesperView = 4;\n      if ($('.sidebar').length) {\n        slidesperView = 3;\n      }\n\n      var count = this.$slideshow.find('.swiper-slide', this.$container).length;\n      if (count > 0) {\n        this.mySwiper = new Swiper(this.$slideshow, {\n          //loop: true,\n          //loopedSlides: count,\n          freeMode: true,\n          slidesPerView: slidesperView,\n          grabCursor: true,\n          spaceBetween: 14,\n          navigation: {\n            nextEl: \"[data-section-id=\\\"\".concat(this.$container.attr('data-section-id'), \"\\\"] .mini-collection-slider-next\"),\n            prevEl: \"[data-section-id=\\\"\".concat(this.$container.attr('data-section-id'), \"\\\"] .mini-collection-slider-prev\") },\n\n          breakpoints: {\n            1090: {\n              slidesPerView: slidesperView - 1 },\n\n            720: {\n              slidesPerView: slidesperView - 2 },\n\n            520: {\n              slidesPerView: 1,\n              spaceBetween: 12 } } });\n\n\n\n      }\n    };\n\n    this.onBlockSelect = function (block) {\n      if (this.mySwiper) {\n        this.mySwiper.slideTo($(block).index(), 1000);\n      }\n    };\n\n    this.onSectionUnload = function () {\n      if (this.mySwiper) {\n        this.mySwiper.destroy();\n      }\n    };\n  }();\n  ;\n  /**\n   * LogoList Section Script\n   * ------------------------------------------------------------------------------\n   *\n   * @namespace LogoList\n   */\n\n  theme.LogoList = new function () {\n    this.onSectionLoad = function (container) {\n      this.$container = $(container);\n      this.namespace = theme.namespaceFromSection(container);\n      this.$slideshow = $('.swiper-container', this.$container);\n\n      /**\n       * Swiper slideshow\n       */\n      var firstBreakPoint = 768;\n      if ($('body').hasClass('page-has-sidebar')) {\n        firstBreakPoint = 1000;\n      }\n      var slidesPerView = this.$slideshow.data('items-per-row');\n      var slideCount = this.$slideshow.find('.swiper-slide').length;\n      if (slideCount > 0) {\n        this.mySwiper = new Swiper(this.$slideshow, {\n          freeMode: true,\n          slidesPerView: this.$slideshow.data('items-per-row'),\n          grabCursor: true,\n          spaceBetween: 14,\n          navigation: {\n            nextEl: \"[data-section-id=\\\"\".concat(this.$container.attr('data-section-id'), \"\\\"] .logo-list-slider-next\"),\n            prevEl: \"[data-section-id=\\\"\".concat(this.$container.attr('data-section-id'), \"\\\"] .logo-list-slider-prev\") },\n\n          breakpoints: {\n            [firstBreakPoint]: {\n              slidesPerView: 3 },\n\n            560: {\n              slidesPerView: 3,\n              spaceBetween: 12 } } });\n\n\n\n      }\n    };\n\n    this.onBlockSelect = function (block) {\n      if (this.mySwiper) {\n        this.mySwiper.slideTo($(block).index(), 1000);\n      }\n    };\n\n    this.onSectionUnload = function () {\n      if (this.mySwiper) {\n        this.mySwiper.destroy();\n      }\n    };\n  }();\n  ;\n  /**\n   * BackgroundVideo Script\n   * ------------------------------------------------------------------------------\n   *\n   * @namespace BackgroundVideo\n   */\n\n  theme.BackgroundVideo = new function () {\n    this.onSectionLoad = function (container) {\n      theme.VideoManager.onSectionLoad(container);\n\n    };\n\n    this.onSectionUnload = function () {\n      theme.VideoManager.onSectionUnload(container);\n    };\n  }();\n  ;\n  theme.Gallery = new function () {\n    this.onSectionLoad = function (container) {\n      this.$container = $(container);\n      this.namespace = theme.namespaceFromSection(container);\n      this.$carouselGallery = $('.gallery--mobile-carousel', container);\n      if (this.$carouselGallery.length) {\n        var assessCarouselFunction = function assessCarouselFunction() {\n          var isCarousel = !!this.carouselSwiper,\n          shouldShowCarousel = this.$carouselGallery.css('display') === 'flex';\n\n          if (!shouldShowCarousel) {\n            $('.lazyload--manual', this.$carouselGallery).removeClass('lazyload--manual').addClass('lazyload');\n          }\n\n          if (isCarousel && !shouldShowCarousel) {\n            // Destroy carousel\n\n            // - unload swiper\n            this.carouselSwiper.destroy();\n            this.carouselSwiper = null;\n\n            // - de-structure swiper\n            this.$carouselGallery.removeClass('swiper-container').\n            find('.swiper-slide').\n            removeClass('swiper-slide').\n            addClass('gallery__item').\n            appendTo(this.$carouselGallery);\n            this.$carouselGallery.find('.swiper-wrapper').remove();\n\n            // - re-row items\n            var rowLimit = 3;\n            var $currentRow = null;\n            this.$carouselGallery.find('.gallery__item').each(function (index, item) {\n              if (index % rowLimit === 0) {\n                $currentRow = $('<div class=\"gallery__row\">').addClass(Math.floor(index / 3) % 2 === 0 ? 'gallery__row--odd' : 'gallery__row--even').appendTo(this.$carouselGallery);\n              }\n              $(item).appendTo($currentRow);\n            }.bind(this));\n          } else if (!isCarousel && shouldShowCarousel) {\n            // Create carousel\n\n            // - de-row items\n            this.$carouselGallery.find('.gallery__item').appendTo(this.$carouselGallery);\n            this.$carouselGallery.find('.gallery__row').remove();\n\n            // - convert to swiper structure\n            this.$carouselGallery.addClass('swiper-container');\n            var $swiperWrapper = $('<div class=\"swiper-wrapper\">').appendTo(this.$carouselGallery);\n            this.$carouselGallery.find('.gallery__item').removeClass('gallery__item').addClass('swiper-slide').appendTo($swiperWrapper);\n\n            // - init carousel\n            this.carouselSwiper = new Swiper(this.$carouselGallery, {\n              init: false,\n              //loop: true,\n              //loopedSlides: 6,\n              freeMode: false,\n              slidesPerView: 1,\n              autoHeight: false,\n              grabCursor: true,\n              effect: 'slide',\n              centeredSlides: false,\n              spaceBetween: 14,\n              // navigation: {\n              //   nextEl: $('.carousel-next', this.$container),\n              //   prevEl: $('.carousel-prev', this.$container),\n              // },\n              autoplay: false });\n\n            this.carouselSwiper.once('init', function (evt) {\n              this.$el.find('.swiper-slide-duplicate .lazyloading').addClass('lazyload');\n            });\n            this.carouselSwiper.init();\n          }\n        };\n\n        assessCarouselFunction.call(this);\n        $(window).on('debouncedresize' + this.namespace, assessCarouselFunction.bind(this));\n      }\n    };\n\n    this.onSectionUnload = function (container) {\n      $(window).off(this.namespace);\n      if (this.carouselSwiper) {\n        this.carouselSwiper.destroy();\n      }\n    };\n\n    this.onBlockSelect = function (block) {\n    };\n\n    this.onBlockDeselect = function (block) {\n    };\n  }();\n\n  /**\n   * Collection Script\n   * ------------------------------------------------------------------------------\n   * For collection pages\n   *\n   * @namespace collection\n   */\n\n  theme.Collection = new function () {\n    this.onSectionLoad = function (container) {\n      theme.initProductTitleAlignmentWatcher($(container), '.collectionTemplate');\n    };\n\n    this.onSectionUnload = function () {};\n  }();\n  ;\n  /**\n   * Cart Template Script\n   * ------------------------------------------------------------------------------\n   * For the cart page\n   *\n   * @namespace main-cart\n   */\n\n  theme.Cart = new function () {\n\n    var selectors = {\n      termsCheckbox: '#terms' };\n\n\n    this.onSectionLoad = function (container) {\n      this.$container = $(container);\n      this.namespace = '.cartTemplate';\n\n      // show/hide shipping estimates\n      this.$container.on('click' + this.namespace, '.js-shipping-calculator-trigger', function () {\n        var $this = $(this);\n        var $parent = $this.parents('.shipping-calculator-container');\n        $parent.toggleClass('calculator-open');\n        if ($parent.hasClass('calculator-open')) {\n          $this.children().html(theme.strings.cart_shipping_calculator_hide_calculator);\n          $parent.children('.shipping-calculator').slideDown(250);\n        } else {\n          $this.children().html(theme.strings.cart_shipping_calculator_title);\n          $parent.children('.shipping-calculator').slideUp(250);\n        }\n      });\n\n      // show/hide the cart notes\n      this.$container.on('click' + this.namespace, '.js-cart-notes-trigger', function () {\n        var $this = $(this);\n        var $parent = $this.parent('.cart-notes-container');\n        $parent.toggleClass('notes-open');\n        if ($parent.hasClass('notes-open')) {\n          $this.children().html(theme.strings.cart_general_hide_note);\n          $parent.children('.cart-notes').slideDown(250);\n        } else {\n          $this.children().html(theme.strings.cart_general_show_note);\n          $parent.children('.cart-notes').slideUp(250);\n        }\n      });\n\n      // terms and conditions checkbox\n      if ($(selectors.termsCheckbox, container).length > 0) {\n        $(document).on('click' + this.namespace, '[name=\"checkout\"], a[href=\"/checkout\"]', function () {\n          if ($(selectors.termsCheckbox + ':checked').length == 0) {\n            alert(theme.strings.cartTermsNotChecked);\n            return false;\n          }\n        });\n      }\n\n      // quantity adjustment\n      if (this.$container.data('ajax-update')) {\n        var updateCartFunction = this.functions.updateCart.bind(this);\n        this.$container.on('keyup' + this.namespace + ' change' + this.namespace, '.quantity-adjuster__input', function () {\n          if ($(this).data('initial-value') && $(this).data('initial-value') == $(this).val()) {\n            return;\n          }\n          if ($(this).val().length == 0 || $(this).val() == '0') {\n            return;\n          }\n          var inputId = $(this).attr('id');\n          updateCartFunction({\n            line: $(this).data('line'),\n            quantity: $(this).val() },\n          function () {\n            // set focus inside input that changed\n            console.log('Focussing on: ' + '#' + inputId);\n            $('#' + inputId).focus();\n          });\n          $(this).data('previousValue', $(this).val());\n        });\n\n        this.$container.on('click' + this.namespace, '.quantity-adjuster__button--down, .quantity-adjuster__button--up', function (e) {\n          var $input = $(this).closest('.quantity-adjuster').find('.quantity-adjuster__input');\n          if ($(this).hasClass('quantity-adjuster__button--down')) {\n            $input.val(parseInt($input.val()) - 1).trigger('change');\n          } else {\n            $input.val(parseInt($input.val()) + 1).trigger('change');\n          }\n          return false;\n        });\n      }\n\n      theme.cartNoteMonitor.load($('.cart-notes [name=\"note\"]', this.$container));\n\n      // note: adds event to window\n      theme.initProductTitleAlignmentWatcher(this.$container, this.namespace);\n    };\n\n    this.functions = {\n      /**\n       * Function for changing the cart and updating the page\n       */\n      updateCart: function updateCart(params, successCallback) {\n        var _ = this;\n        if (_.cartXhr) {\n          _.cartXhr.abort();\n        }\n        if (_.cartRefreshXhr) {\n          _.cartRefreshXhr.abort();\n        }\n        _.cartXhr = $.ajax({\n          type: 'POST',\n          url: theme.routes.cart_change_url + '.js',\n          data: params,\n          dataType: 'json',\n          success: function success(data) {\n            if (_.cartRefreshXhr) {\n              _.cartRefreshXhr.abort();\n            }\n\n            // fetch new html for the page\n            _.cartRefreshXhr = $.ajax({\n              type: 'GET',\n              url: theme.routes.cart_url + '?view=ajax',\n              success: function success(data) {\n                var toReplace = ['.cart-items', '.cart-subtotal-and-discounts'];\n                var $newDom = $('<div>' + data + '</div>');\n                $newDom.find('.fade-in').removeClass('fade-in');\n\n                for (var i = 0; i < toReplace.length; i++) {\n                  $('[data-section-type=\"cart\"] ' + toReplace[i]).html(\n                  $newDom.find(toReplace[i]).html());\n\n                }\n\n                successCallback();\n              },\n              error: function error(data) {\n                if (data.statusText != 'abort') {\n                  console.log('Error refreshing page');\n                  console.log(data);\n                }\n              },\n              complete: function complete() {\n                _.cartRefreshXhr = null;\n              } });\n\n          },\n          error: function error(data) {\n            console.log('Error processing update');\n            console.log(data);\n          } });\n\n      } };\n\n\n    this.onSectionUnload = function () {\n      $(window).off(this.namespace);\n      $(document).off(this.namespace);\n      this.$container.off(this.namespace);\n      theme.cartNoteMonitor.unload($('.cart-notes [name=\"note\"]', this.$container));\n    };\n  }();\n  ;\n\n  /*================ Templates ================*/\n  /**\n   * Customer Addresses Script\n   * ------------------------------------------------------------------------------\n   * A file that contains scripts highly couple code to the Customer Addresses\n   * template.\n   *\n   * @namespace customerAddresses\n   */\n\n  theme.customerAddresses = function () {\n    var $newAddressForm = $('#AddressNewForm');\n\n    if (!$newAddressForm.length) {\n      return;\n    }\n\n    // Initialize observers on address selectors, defined in shopify_common.js\n    if (Shopify) {\n      new Shopify.CountryProvinceSelector('AddressCountryNew', 'AddressProvinceNew', {\n        hideElement: 'AddressProvinceContainerNew' });\n\n    }\n\n    // Initialize each edit form's country/province selector\n    $('.address-country-option').each(function () {\n      var formId = $(this).data('form-id');\n      var countrySelector = 'AddressCountry_' + formId;\n      var provinceSelector = 'AddressProvince_' + formId;\n      var containerSelector = 'AddressProvinceContainer_' + formId;\n\n      new Shopify.CountryProvinceSelector(countrySelector, provinceSelector, {\n        hideElement: containerSelector });\n\n    });\n\n    // Toggle new/edit address forms\n    $('.address-new-toggle').on('click', function () {\n      $newAddressForm.toggleClass('hide');\n    });\n\n    $('.address-edit-toggle').on('click', function () {\n      var formId = $(this).data('form-id');\n      $('#EditAddress_' + formId).toggleClass('hide');\n    });\n\n    $('.address-delete').on('click', function () {\n      var $el = $(this);\n      var formId = $el.data('form-id');\n      var confirmMessage = $el.data('confirm-message');\n      if (confirm(confirmMessage || 'Are you sure you wish to delete this address?')) {\n        Shopify.postLink(theme.routes.account_addresses_url + '/' + formId, { parameters: { _method: 'delete' } });\n      }\n    });\n  }();\n  ;\n  /**\n   * Password Template Script\n   * ------------------------------------------------------------------------------\n   * A file that contains scripts highly couple code to the Password template.\n   *\n   * @namespace password\n   */\n\n  theme.customerLogin = function () {\n    var config = {\n      recoverPasswordForm: '#RecoverPassword',\n      hideRecoverPasswordLink: '#HideRecoverPasswordLink' };\n\n\n    if (!$(config.recoverPasswordForm).length) {\n      return;\n    }\n\n    checkUrlHash();\n    resetPasswordSuccess();\n\n    $(config.recoverPasswordForm).on('click', onShowHidePasswordForm);\n    $(config.hideRecoverPasswordLink).on('click', onShowHidePasswordForm);\n\n    function onShowHidePasswordForm(evt) {\n      evt.preventDefault();\n      toggleRecoverPasswordForm();\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        toggleRecoverPasswordForm();\n      }\n    }\n\n    /**\n     *  Show/Hide recover password form\n     */\n    function toggleRecoverPasswordForm() {\n      $('#RecoverPasswordForm').toggleClass('hide');\n      $('#CustomerLoginForm').toggleClass('hide');\n    }\n\n    /**\n     *  Show reset password success message\n     */\n    function resetPasswordSuccess() {\n      var $formState = $('.reset-password-success');\n\n      // check if reset password form was successfully submited.\n      if (!$formState.length) {\n        return;\n      }\n\n      // show success message\n      $('#ResetSuccess').removeClass('hide');\n    }\n  }();\n  ;\n\n\n  theme.namespaceFromSection = function (container) {\n    return ['.', $(container).data('section-type'), $(container).data('section-id')].join('');\n  };\n\n  theme.openPageContentInLightbox = function (url) {\n    $.get(url, function (data) {\n      var $content = $('#MainContent', $.parseHTML('<div>' + data + '</div>'));\n      $.colorbox({\n        transition: 'fade',\n        html: '<div class=\"lightbox-content\">' + $content.html() + '</div>',\n        onOpen: theme.colorboxFadeTransOnOpen,\n        onComplete: function onComplete() {\n          theme.colorboxFadeTransOnComplete();\n          // check any new inputs\n          $('#cboxContent .input-wrapper input').trigger('inputstateEmpty');\n        } });\n\n    });\n  };\n\n  theme.initVariantSelectors = function ($els, data) {\n    $els.each(function () {\n      if (typeof $(this).data('selector-type') != 'dropdown') {\n        // change swatch label on hover\n        var $label = $(this).find('.js-option-title');\n        if ($label.length) {\n          $label.data('default-content', $label.html());\n          $(this).on('change', function () {\n            $label.data('default-content', $(this).find('.opt-btn:checked').val());\n          }).on('mouseenter', '.opt-label', function () {\n            $label.html($(this).prev().val());\n          }).on('mouseleave', '.opt-label', function () {\n            $label.html($label.data('default-content'));\n          });\n        }\n\n        if (data.options.length == 1) {\n          for (var i = 0; i < data.variants.length; i++) {\n            var variant = data.variants[i];\n            if (!variant.available) {\n              $(this).find('.opt-btn').filter(function () {\n                return $(this).val() == variant.option1;\n              }).addClass('is-unavailable');\n            }\n          }\n        }\n      }\n    });\n  };\n\n  theme.colorboxFadeTransOnOpen = function () {\n    $('#colorbox').addClass('colorbox--hide');\n  };\n\n  theme.colorboxFadeTransOnComplete = function () {\n    setTimeout(function () {\n      $('#colorbox').addClass('colorbox--enable-trans');\n      setTimeout(function () {\n        $('#colorbox').removeClass('colorbox--hide');\n        setTimeout(function () {\n          $('#colorbox').removeClass('colorbox--enable-trans');\n        }, 300);\n      }, 20);\n    }, 10);\n  };\n\n  theme.productGallerySlideshowTabFix = function (slides, current) {\n    // tabindex everything to prevent tabbing into hidden slides\n    $(slides[current]).find('a, input, button, select, iframe, video, model-viewer, [tabindex]').each(function () {\n      if (typeof $(this).data('theme-slideshow-original-tabindex') !== 'undefined') {\n        if ($(this).data('theme-slideshow-original-tabindex') === false) {\n          $(this).removeAttr('tabindex');\n        } else {\n          $(this).attr('tabindex', $(this).data('theme-slideshow-original-tabindex'));\n        }\n      } else {\n        $(this).removeAttr('tabindex');\n      }\n    });\n    $(slides).not(slides[current]).find('a, input, button, select, iframe, video, model-viewer, [tabindex]').each(function () {\n      if (typeof $(this).data('theme-slideshow-original-tabindex') === 'undefined') {\n        $(this).data('theme-slideshow-original-tabindex',\n        typeof $(this).attr('tabindex') !== 'undefined' ?\n        $(this).attr('tabindex') :\n        false);\n\n        $(this).attr('tabindex', '-1');\n      }\n    });\n  };\n\n  try {\n    theme.shopifyFeatures = JSON.parse(document.documentElement.querySelector('#shopify-features').textContent);\n  } catch (e) {\n    theme.shopifyFeatures = {};\n  }\n\n  $(document).ready(function () {\n    // Common a11y fixes\n    slate.a11y.pageLinkFocus($(window.location.hash));\n\n    $('.in-page-link').on('click', function (evt) {\n      slate.a11y.pageLinkFocus($(evt.currentTarget.hash));\n    });\n\n    // Enable focus style when using tab\n    $(document).on('keyup.themeTabCheck', function (evt) {\n      if (evt.keyCode === 9) {\n        $('body').addClass('tab-used');\n        $(document).off('keyup.themeTabCheck');\n      }\n    });\n\n    // Target tables to make them scrollable\n    var tableSelectors = '.rte table';\n\n    slate.rte.wrapTable({\n      $tables: $(tableSelectors),\n      tableWrapperClass: 'rte__table-wrapper' });\n\n\n    // Target iframes to make them responsive\n    var iframeSelectors =\n    '.rte iframe[src*=\"youtube.com/embed\"],' +\n    '.rte iframe[src*=\"player.vimeo\"]';\n\n    slate.rte.wrapIframe({\n      $iframes: $(iframeSelectors),\n      iframeWrapperClass: 'rte__video-wrapper' });\n\n\n    document.querySelector('.footer-blocks').addEventListener('click', e => {\n      if (!e.target.matches('.js-footer-block-toggle')) return;\n\n      var btn = e.target;\n      var content = btn.parentNode.nextElementSibling;\n\n      btn.classList.toggle('is-active');\n\n      if (btn.classList.contains('is-active')) {\n        content.style.height = \"\".concat(content.scrollHeight, \"px\");\n      } else {\n        content.style.height = null;\n      }\n    });\n\n    // Apply a specific class to the html element for browser support of cookies.\n    if (slate.cart.cookiesEnabled()) {\n      document.documentElement.className = document.documentElement.className.replace('supports-no-cookies', 'supports-cookies');\n    }\n\n    // Quantity input wrapper\n    $(document).on('change', '.qty-wrapper > .cc-select', function () {\n      var value = $(this).find('[aria-selected=\"true\"]').data('value');\n      var $input = $(this).siblings('.qty-actual').find('[name=\"quantity\"]');\n      if (value == '10+') {\n        $input.val('10').closest('.qty-wrapper').addClass('hide-proxy');\n        setTimeout(function () {\n          $input.select().focus();\n        }, 10);\n      } else {\n        $input.val(value);\n      }\n    });\n  });\n\n  theme.initProductTitleAlignmentWatcher = function ($container, namespace) {\n    var $productGrids = $('.product-grid', $container);\n    if ($productGrids.length) {\n      theme.alignProductImageTitles.bind($productGrids)();\n      $(window).on('debouncedresize' + namespace, theme.alignProductImageTitles.bind($productGrids));\n    }\n  };\n\n  theme.alignProductImageTitles = function () {\n    $(this).each(function () {\n      var tallest = 0;\n      $('.product-block__primary-image', this).each(function () {\n        var h = $(this).height();\n        if (h > tallest) {\n          tallest = h;\n        }\n      });\n      $('.product-block__image', this).css('min-height', tallest);\n    });\n  };\n\n  if ($('.section-search').length) {\n    theme.initProductTitleAlignmentWatcher($('.section-search'), 'main-search');\n  }\n\n\n  theme.Sections.init();\n  theme.Sections.register('sidebar', theme.Sidebar, { deferredLoad: false });\n  theme.Sections.register('product', theme.Product, { deferredLoad: false });\n  theme.Sections.register('header', theme.Header, { deferredLoad: false });\n  theme.Sections.register('footer', theme.Footer);\n  theme.Sections.register('banner', theme.Banner);\n  theme.Sections.register('featured-collection', theme.FeaturedCollection);\n  theme.Sections.register('mini-collection-list', theme.MiniCollectionList);\n  theme.Sections.register('logo-list', theme.LogoList);\n  theme.Sections.register('background-video', theme.VideoManager, { deferredLoadViewportExcess: 800 });\n  theme.Sections.register('gallery', theme.Gallery);\n  theme.Sections.register('collection', theme.Collection, { deferredLoad: false });\n  theme.Sections.register('cart', theme.Cart, { deferredLoad: false });\n\n\n  //Register dynamically pulled in sections\n  $(function ($) {\n    if (cc.sections.length) {\n      cc.sections.forEach(section => {\n        try {\n          var data = {};\n          if (typeof section.deferredLoad !== 'undefined') {\n            data.deferredLoad = section.deferredLoad;\n          }\n          if (typeof section.deferredLoadViewportExcess !== 'undefined') {\n            data.deferredLoadViewportExcess = section.deferredLoadViewportExcess;\n          }\n          theme.Sections.register(section.name, section.section, data);\n        } catch (err) {\n          console.error(\"Unable to register section \".concat(section.name, \".\"), err);\n        }\n      });\n    } else {\n      console.warn('Barry: No common sections have been registered.');\n    }\n  });\n\n})(theme.jQuery);  \n/* Built with Barry v1.0.8 */\n$(document).ready(function() {\n  var $el = $(\".col-desc-text:first\"), text = $el.text(), words = text.split(\" \");\n  var html = \"\";\n  for (var i = 0; i < words.length; i++) {\n      html += \"<span>\" + words[i] + \" </span>\";\n  };\n  $el.html(html).children().hide().each(function(i){\n    var _this = $(this);\n    setTimeout(function() {\n      $('.col-description').show();\n      _this.delay(i*500).fadeIn(700);\n    }, 500);\n  });\n  // setTimeout(function() {\n  //   $('.col-description').addClass('show');\n  // }, 1500);\n\n\n\n$(document).on('click', '.js-load-more', function(){\n\n  console.log('load more');\n  var $this = $(this);\n  var totalPages = parseInt($('[data-total-pages]').val());\n  var currentPage = parseInt($('[data-current-page]').val());\n  console.log('load more 1');\n  $this.attr('disabled', true);\n  $this.find('[loader]').removeClass('hhide');\n  console.log('load more 2');\n  currentPage = currentPage + 1;\n    console.log('load more 3');\n  var nextUrl = $('[data-next-url]').data('next-url');\n  nextUrl = nextUrl.replace(/page=[0-9]+/,'page=' + currentPage)  + '&section_id=main-collection';\n  console.log(nextUrl);\n  $('[data-current-page]').val(currentPage);\n\n  $('<div>').load(nextUrl, function(msg){\n      if ($(msg).find('#collection_products_grid').length){\n          var target_content = $(msg).find('#collection_products_grid').html();\n          var pagination_content = $(msg).find('.pagination').html();\n          $('[data-next-url]').append(target_content);\n          $('.pagination').html(pagination_content);\n          if(totalPages == currentPage) {\n            $this.addClass('hide');\n          }\n          else {\n          $this.attr('disabled', false);\n          }\n      }\n  });\n});\n\n\n\n\n  \n});"],
  "mappings": "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",
  "names": ["$", "container", "t", "r", "a", "o", "n", "status", "loopTheVideo", "assessBackgroundVideo", "$container", "response", "$btn", "e", "item", "img", "data", "i"]
}
