{
  "version": 3,
  "sources": ["/cdn/shop/t/30/assets/theme.js?sections=header"],
  "sourcesContent": ["(function ($) {\n  var $ = jQuery = $;\n\n  var cc = {\n    sections: []\n  };\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  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  (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  // Source: https://davidwalsh.name/javascript-debounce-function\n  // Returns a function, that, as long as it continues to be invoked, will not\n  // be triggered. The function will be called after it stops being called for\n  // N milliseconds. If `immediate` is passed, trigger the function on the\n  // leading edge, instead of the trailing.\n  theme.debounce = function (func) {var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 700;var immediate = arguments.length > 2 ? arguments[2] : undefined;\n    var timeout;\n    return function () {\n      var context = this,args = arguments;\n      var later = function later() {\n        timeout = null;\n        if (!immediate) func.apply(context, args);\n      };\n      var callNow = immediate && !timeout;\n      clearTimeout(timeout);\n      timeout = setTimeout(later, wait);\n      if (callNow) func.apply(context, args);\n    };\n  };\n  // requires: throttled-scroll, debouncedresize\n\n  /*\n    Define a section by creating a new function object and registering it with the section handler.\n    The section handler manages:\n      Instantiation for all sections on the current page\n      Theme editor lifecycle events\n      Deferred initialisation\n      Event cleanup\n  \n    There are two ways to register a section.\n    In a theme:\n      theme.Sections.register('slideshow', theme.SlideshowSection);\n      theme.Sections.register('header', theme.HeaderSection, { deferredLoad: false });\n      theme.Sections.register('background-video', theme.VideoManager, { deferredLoadViewportExcess: 800 });\n  \n    As a component:\n      cc.sections.push({ name: 'faq', section: theme.Faq });\n  \n    Assign any of these to receive Shopify section lifecycle events:\n      this.onSectionLoad\n      this.afterSectionLoadCallback\n      this.onSectionSelect\n      this.onSectionDeselect\n      this.onBlockSelect\n      this.onBlockDeselect\n      this.onSectionUnload\n      this.afterSectionUnloadCallback\n      this.onSectionReorder\n  \n    If you add any events using the manager's registerEventListener,\n    e.g. this.registerEventListener(element, 'click', this.functions.handleClick.bind(this)),\n    these will be automatically cleaned up after onSectionUnload.\n   */\n\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      }).on('shopify:section:reorder', function (e) {\n        // unload existing section\n        var target = _._themeSectionTargetFromShopifySectionTarget(e.target);\n        if (target) {\n          _.sectionReorder(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            registeredEventListeners: []\n          }\n        };\n        instance.thisContext.registerEventListener = _._registerEventListener.bind(instance.thisContext);\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        _._unloadRegisteredEventListeners(instance.thisContext.registeredEventListeners);\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    _.sectionReorder = function (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        _._callSectionWith(instance.section, 'onSectionReorder', target, instance.thisContext);\n      }\n    };\n\n    // Helpers\n    _._registerEventListener = function (element, eventType, callback) {\n      element.addEventListener(eventType, callback);\n      this.registeredEventListeners.push({\n        element,\n        eventType,\n        callback\n      });\n    };\n\n    _._unloadRegisteredEventListeners = function (registeredEventListeners) {\n      registeredEventListeners.forEach((rel) => {\n        rel.element.removeEventListener(rel.eventType, rel.callback);\n      });\n    };\n\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.warn(\"Theme warning: '\".concat(method, \"' failed for section '\").concat(sectionType, \"'\"));\n          console.debug(container, ex);\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  // 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  }; /// Show a short-lived text popup above an element\n  theme.showQuickPopup = function (message, $origin) {\n    var $popup = $('<div class=\"simple-popup\"/>');\n    var offs = $origin.offset();\n    $popup.html(message).css({ 'left': offs.left, 'top': offs.top }).hide();\n    $('body').append($popup);\n    $popup.css({ marginTop: -$popup.outerHeight() - 10, marginLeft: -($popup.outerWidth() - $origin.outerWidth()) / 2 });\n    $popup.fadeIn(200).delay(3500).fadeOut(400, function () {\n      $(this).remove();\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  /**\n   * Use with template literals to build HTML with correct escaping.\n   *\n   * Example:\n   *\n   * const tve = theme.createTemplateVariableEncoder();\n   * tve.add('className', className, 'attribute');\n   * tve.add('title', title, 'html');\n   * tve.add('richText', richText, 'raw');\n   * const template = `\n   *   <div class=\"${tve.values.className}\">\n   *     <h1>${tve.values.title}</h1>\n   *     <div class=\"rte\">${tve.values.richText}</div>\n   *   </div>\n   * `;\n   */\n  theme.createTemplateVariableEncoder = function () {\n    return {\n      utilityElement: document.createElement('div'),\n      values: {},\n      /**\n       * Add a new value to sanitise.\n       * @param {String} key - key used to retrieve this value\n       * @param {String} value - the value to encode and store\n       * @param {String} type - possible values: [attribute, html, raw] - the type of encoding to use\n       */\n      add: function add(key, value, type) {\n        switch (type) {\n          case 'attribute':\n            this.utilityElement.innerHTML = '';\n            this.utilityElement.setAttribute('util', value);\n            this.values[key] = this.utilityElement.outerHTML.match(/util=\"([^\"]*)\"/)[1];\n            break;\n          case 'html':\n            this.utilityElement.innerText = value;\n            this.values[key] = this.utilityElement.innerHTML;\n            break;\n          case 'raw':\n            this.values[key] = value;\n            break;\n          default:\n            throw \"Type '\".concat(type, \"' not handled\");}\n\n      }\n    };\n  };\n  theme.suffixIds = function (container, suffix) {\n    var refAttrs = ['aria-describedby', 'aria-controls'];\n    suffix = '-' + suffix;\n    container.querySelectorAll('[id]').forEach((el) => {\n      var oldId = el.id,\n        newId = oldId + suffix;\n      el.id = newId;\n      refAttrs.forEach((attr) => {\n        container.querySelectorAll(\"[\".concat(attr, \"=\\\"\").concat(oldId, \"\\\"]\")).forEach((refEl) => {\n          refEl.setAttribute(attr, newId);\n        });\n      });\n    });\n  };\n  theme.renderUnitPrice = function (unit_price, unit_price_measurement, money_format) {\n    if (unit_price && unit_price_measurement) {\n      var unitPriceHtml = '<div class=\"unit-price\">';\n      unitPriceHtml += \"<span class=\\\"unit-price__price theme-money\\\">\".concat(theme.Shopify.formatMoney(unit_price, money_format), \"</span>\");\n      unitPriceHtml += \"<span class=\\\"unit-price__separator\\\">\".concat(theme.strings.products_product_unit_price_separator, \"</span>\");\n      var unit = unit_price_measurement.reference_unit;\n      if (unit_price_measurement.reference_value != 1) {\n        unit = unit_price_measurement.reference_value + unit;\n      }\n      unitPriceHtml += \"<span class=\\\"unit-price__unit\\\">\".concat(unit, \"</span>\");\n      unitPriceHtml += '</div>';\n      return unitPriceHtml;\n    } else {\n      return '';\n    }\n  };\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        clearTimeout(theme.ccPopupRemoveScrollFreezeTimeoutId);\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, if no other scroll-freeze popups are visible\n      var $visibleFreezePopups = $('.' + this.cssClasses.visible).filter(() => {return this.$container.data('freeze-scroll');});\n      if ($visibleFreezePopups.length === 0) {\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        theme.ccPopupRemoveScrollFreezeTimeoutId = 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    theme.initAnimateOnScroll = function () {\n      if (document.body.classList.contains('cc-animate-enabled') && window.innerWidth >= 768) {\n        var animationTimeout = typeof document.body.dataset.ccAnimateTimeout !== \"undefined\" ? document.body.dataset.ccAnimateTimeout : 200;\n\n        if ('IntersectionObserver' in window) {\n          var intersectionObserver = new IntersectionObserver((entries, observer) => {\n            entries.forEach((entry) => {\n              // In view and hasn't been animated yet\n              if (entry.isIntersecting && !entry.target.classList.contains(\"cc-animate-complete\")) {\n                setTimeout(() => {\n                  entry.target.classList.add(\"-in\", \"cc-animate-complete\");\n                }, animationTimeout);\n\n                setTimeout(() => {\n                  //Once the animation is complete (assume 5 seconds), remove the animate attribute to remove all css\n                  entry.target.classList.remove(\"data-cc-animate\");\n                  entry.target.style.transitionDuration = null;\n                  entry.target.style.transitionDelay = null;\n                }, 5000);\n\n                // Remove observer after animation\n                observer.unobserve(entry.target);\n              }\n            });\n          });\n\n          document.querySelectorAll('[data-cc-animate]:not(.cc-animate-init)').forEach((elem) => {\n            //Set the animation delay\n            if (elem.dataset.ccAnimateDelay) {\n              elem.style.transitionDelay = elem.dataset.ccAnimateDelay;\n            }\n\n            ///Set the animation duration\n            if (elem.dataset.ccAnimateDuration) {\n              elem.style.transitionDuration = elem.dataset.ccAnimateDuration;\n            }\n\n            //Init the animation\n            if (elem.dataset.ccAnimate) {\n              elem.classList.add(elem.dataset.ccAnimate);\n            }\n\n            elem.classList.add(\"cc-animate-init\");\n\n            //Watch for elem\n            intersectionObserver.observe(elem);\n          });\n        } else {\n          //Fallback, load all the animations now\n          var elems = document.querySelectorAll('[data-cc-animate]:not(.cc-animate-init)');\n          for (var i = 0; i < elems.length; i++) {\n            elems[i].classList.add(\"-in\", \"cc-animate-complete\");\n          }\n        }\n      }\n    };\n\n    theme.initAnimateOnScroll();\n\n    document.addEventListener('shopify:section:load', () => {\n      setTimeout(theme.initAnimateOnScroll, 100);\n    });\n\n    //Reload animations when changing from mobile to desktop\n    try {\n      window.matchMedia('(min-width: 768px)').addEventListener('change', (event) => {\n        if (event.matches) {\n          setTimeout(theme.initAnimateOnScroll, 100);\n        }\n      });\n    } catch (e) {}\n  })();\n\n\n  class AccordionInstance {\n    constructor(container) {\n      this.accordion = container;\n      this.itemClass = '.cc-accordion-item';\n      this.titleClass = '.cc-accordion-item__title';\n      this.panelClass = '.cc-accordion-item__panel';\n      this.allowMultiOpen = this.accordion.dataset.allowMultiOpen === 'true';\n\n      // If multiple open items not allowed, set open item as active (if there is one)\n      if (!this.allowMultiOpen) {\n        this.activeItem = this.accordion.querySelector(\"\".concat(this.itemClass, \"[open]\"));\n      }\n\n      this.bindEvents();\n    }\n\n    /**\n     * Adds inline 'height' style to a panel, to trigger open transition\n     * @param {HTMLDivElement} panel - The accordion item content panel\n     */\n    static addPanelHeight(panel) {\n      panel.style.height = \"\".concat(panel.scrollHeight, \"px\");\n    }\n\n    /**\n     * Removes inline 'height' style from a panel, to trigger close transition\n     * @param {HTMLDivElement} panel - The accordion item content panel\n     */\n    static removePanelHeight(panel) {\n      panel.getAttribute('style'); // Fix Safari bug (doesn't remove attribute without this first!)\n      panel.removeAttribute('style');\n    }\n\n    /**\n     * Opens an accordion item\n     * @param {HTMLDetailsElement} item - The accordion item\n     * @param {HTMLDivElement} panel - The accordion item content panel\n     */\n    open(item, panel) {\n      panel.style.height = '0';\n\n      // Set item to open. Blocking the default click action and opening it this way prevents a\n      // slight delay which causes the panel height to be set to '0' (because item's not open yet)\n      item.open = true;\n\n      AccordionInstance.addPanelHeight(panel);\n\n      // Slight delay required before starting transitions\n      setTimeout(() => {\n        item.classList.add('is-open');\n      }, 10);\n\n      if (!this.allowMultiOpen) {\n        // If there's an active item and it's not the opened item, close it\n        if (this.activeItem && this.activeItem !== item) {\n          var activePanel = this.activeItem.querySelector(this.panelClass);\n          this.close(this.activeItem, activePanel);\n        }\n\n        this.activeItem = item;\n      }\n    }\n\n    /**\n     * Closes an accordion item\n     * @param {HTMLDetailsElement} item - The accordion item\n     * @param {HTMLDivElement} panel - The accordion item content panel\n     */\n    close(item, panel) {\n      AccordionInstance.addPanelHeight(panel);\n\n      item.classList.remove('is-open');\n      item.classList.add('is-closing');\n\n      if (this.activeItem === item) {\n        this.activeItem = null;\n      }\n\n      // Slight delay required to allow scroll height to be applied before changing to '0'\n      setTimeout(() => {\n        panel.style.height = '0';\n      }, 10);\n    }\n\n    /**\n     * Handles 'click' event on the accordion\n     * @param {Object} e - The event object\n     */\n    handleClick(e) {\n      // Ignore clicks outside a toggle (<summary> element)\n      var toggle = e.target.closest(this.titleClass);\n      if (!toggle) return;\n\n      // Prevent the default action\n      // We'll trigger it manually after open transition initiated or close transition complete\n      e.preventDefault();\n\n      var item = toggle.parentNode;\n      var panel = toggle.nextElementSibling;\n\n      if (item.open) {\n        this.close(item, panel);\n      } else {\n        this.open(item, panel);\n      }\n    }\n\n    /**\n     * Handles 'transitionend' event in the accordion\n     * @param {Object} e - The event object\n     */\n    handleTransition(e) {\n      // Ignore transitions not on a panel element\n      if (!e.target.matches(this.panelClass)) return;\n\n      var panel = e.target;\n      var item = panel.parentNode;\n\n      if (item.classList.contains('is-closing')) {\n        item.classList.remove('is-closing');\n        item.open = false;\n      }\n\n      AccordionInstance.removePanelHeight(panel);\n    }\n\n    bindEvents() {\n      // Need to assign the function calls to variables because bind creates a new function,\n      // which means the event listeners can't be removed in the usual way\n      this.clickHandler = this.handleClick.bind(this);\n      this.transitionHandler = this.handleTransition.bind(this);\n\n      this.accordion.addEventListener('click', this.clickHandler);\n      this.accordion.addEventListener('transitionend', this.transitionHandler);\n    }\n\n    destroy() {\n      this.accordion.removeEventListener('click', this.clickHandler);\n      this.accordion.removeEventListener('transitionend', this.transitionHandler);\n    }\n  }\n\n  class Accordion extends ccComponent {\n    constructor() {var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'accordion';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 AccordionInstance(container));\n    }\n\n    destroy(container) {\n      this.destroyInstance(container);\n      super.destroy(container);\n    }\n  }\n\n  new Accordion();\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  /**\n   * Display a modal window on-click. It's a lightbox.\n   * To use:\n   * Add 'cc-modal' class to a clickable element.\n   *\n   * Configure with:\n   * - data-cc-modal-contentelement - selector for element containing content to show, innerHTML of element is copied into the modal\n   * - data-cc-modal-size (optional) - 'small' or 'medium', defaults to 'medium'\n   * - data-cc-modal-launch (optional) - 'true' if we want to open the modal immediately\n   *\n   * Example:\n   * <a href=\"#password-login\" class=\"cc-modal\" data-cc-modal-contentelement=\"#password-login\" data-cc-modal-size=\"small\">\n   * <div id=\"password-login\" class=\"js-hidden\">\n  */\n  class ModalInstance {\n    constructor(container) {\n      this.container = container;\n      this.size = container.dataset.ccModalSize || 'medium';\n      this.contentElement = document.querySelector(container.dataset.ccModalContentelement);\n\n      this.container.addEventListener('click', this.handleClick.bind(this));\n\n      if (container.dataset.ccModalLaunch === 'true') {\n        setTimeout(this.open.bind(this), 10);\n      }\n    }\n\n    /**\n     * Handles 'click' event on the container\n     * @param {Object} e - The event object\n     */\n    handleClick(e) {\n      e.preventDefault();\n      this.open();\n      this.opener = e.target;\n    }\n\n    /**\n     * Create the modal and add it to the page.\n     */\n    open() {\n      var tve = theme.createTemplateVariableEncoder();\n      tve.add('size', this.size, 'attribute');\n      tve.add('content', this.contentElement.innerHTML, 'raw');\n      tve.add('button_close_label', theme.strings.general_accessibility_labels_close, 'attribute');\n      tve.add('button_close_icon', theme.icons.close, 'raw');\n\n      var html = \"\\n      <div class=\\\"cc-modal-window cc-modal-window--pre-reveal cc-modal-window--size-\".concat(\n      tve.values.size, \"\\\">\\n        <div class=\\\"cc-modal-window__background\\\"></div>\\n        <div class=\\\"cc-modal-window__foreground\\\" role=\\\"dialog\\\" aria-modal=\\\"true\\\">\\n          <div class=\\\"cc-modal-window__content-container\\\">\\n            <button class=\\\"cc-modal-window__close\\\" aria-label=\\\"\").concat(\n\n\n\n      tve.values.button_close_label, \"\\\">\").concat(tve.values.button_close_icon, \"</button>\\n            <div class=\\\"cc-modal-window__content\\\">\").concat(\n      tve.values.content, \"</div>\\n          </div>\\n        </div>\\n      </div>\\n    \");\n\n\n\n\n\n      var modalElementFragment = document.createRange().createContextualFragment(html);\n      document.body.appendChild(modalElementFragment);\n\n      document.body.classList.add('cc-modal-visible');\n      this.modalElement = document.body.lastElementChild;\n\n      this.modalElement.querySelector('.cc-modal-window__background').addEventListener('click', this.close.bind(this));\n      this.modalElement.querySelector('.cc-modal-window__close').addEventListener('click', this.close.bind(this));\n\n      setTimeout(() => {\n        this.modalElement.classList.remove('cc-modal-window--pre-reveal');\n        this.modalElement.querySelector('.cc-modal-window__close').focus();\n      }, 10);\n    }\n\n    close() {\n      this.modalElement.classList.add('cc-modal-window--closing');\n      if (!document.querySelector('.cc-modal-window:not(.cc-modal-window--closing)')) {\n        document.body.classList.remove('cc-modal-visible');\n      }\n\n      if (this.opener) {\n        setTimeout(() => {\n          this.opener.focus();\n        }, 10);\n      }\n\n      // give transitions 5s to do their thing before we tidy up (note: this.modalElement may be reassigned during this timeout)\n      setTimeout(function () {\n        this.remove();\n      }.bind(this.modalElement), 5000);\n    }\n  }\n\n  class Modal extends ccComponent {\n    constructor() {var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'modal';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 ModalInstance(container));\n    }\n\n    destroy(container) {\n      this.destroyInstance(container);\n      super.destroy(container);\n    }\n  }\n\n  new Modal();\n  class PriceRangeInstance {\n    constructor(container) {\n      this.container = container;\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      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      this.controls.min.value = parseInt(this.controls.min.input.value === '' ? this.controls.min.input.placeholder : this.controls.min.input.value);\n      this.controls.max.value = parseInt(this.controls.max.input.value === '' ? this.controls.max.input.placeholder : this.controls.max.input.value);\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        item.barControl.setAttribute('tabindex', 0);\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      this.rtl = document.querySelector('html[dir=rtl]');\n\n      this.bindEvents();\n      this.render();\n    }\n\n    getPxToValueRatio() {\n      var r = this.bar.clientWidth / (this.valueMax - this.valueMin);\n      if (this.rtl) {\n        return -r;\n      } else {\n        return r;\n      }\n    }\n\n    getPcToValueRatio() {\n      return 100.0 / (this.valueMax - this.valueMin);\n    }\n\n    setActiveControlValue(value) {\n      // only accept valid numbers\n      if (isNaN(parseInt(value))) return;\n\n      // clamp & default\n      if (this.activeControl === this.controls.min) {\n        if (value === '') {\n          value = this.valueMin;\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        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        this.activeControl.input.dispatchEvent(new CustomEvent('change', { bubbles: true, cancelable: false, detail: { sender: 'theme:component:price_range' } }));\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      var x = (control.value - this.valueMin) * this.getPcToValueRatio() + '%';\n      if (this.rtl) {\n        control.barControl.style.right = x;\n      } else {\n        control.barControl.style.left = x;\n      }\n    }\n\n    drawActiveBar() {\n      var s = (this.controls.min.value - this.valueMin) * this.getPcToValueRatio() + '%',\n        e = (this.valueMax - this.controls.max.value) * this.getPcToValueRatio() + '%';\n      if (this.rtl) {\n        this.activeBar.style.left = e;\n        this.activeBar.style.right = s;\n      } else {\n        this.activeBar.style.left = s;\n        this.activeBar.style.right = e;\n      }\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      if (this.controls.min.barControl === target) {\n        this.activeControl = this.controls.min;\n      } else {\n        this.activeControl = this.controls.max;\n      }\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    handleControlKeyDown(e) {\n      if (e.key === 'ArrowRight') {\n        this.incrementControlFromKeypress(e.target, 10.0);\n      } else if (e.key === 'ArrowLeft') {\n        this.incrementControlFromKeypress(e.target, -10.0);\n      }\n    }\n\n    incrementControlFromKeypress(control, pxAmount) {\n      if (this.controls.min.barControl === control) {\n        this.activeControl = this.controls.min;\n      } else {\n        this.activeControl = this.controls.max;\n      }\n      this.setActiveControlValue(this.activeControl.value + pxAmount / this.getPxToValueRatio());\n      this.render();\n    }\n\n    handleInputChange(e) {\n      // strip out non numeric values\n      e.target.value = e.target.value.replace(/\\D/g, '');\n\n      if (!e.detail || e.detail.sender != 'theme:component:price_range') {\n        if (this.controls.min.input === e.target) {\n          this.activeControl = this.controls.min;\n        } else {\n          this.activeControl = this.controls.max;\n        }\n        this.setActiveControlValue(e.target.value);\n        this.render();\n      }\n    }\n\n    handleInputKeyup(e) {\n      // enforce numeric chars in the input\n      setTimeout(function () {\n        this.value = this.value.replace(/\\D/g, '');\n      }.bind(e.target), 10);\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        item.barControl.addEventListener('keydown', this.handleControlKeyDown.bind(this));\n        item.input.addEventListener('change', this.handleInputChange.bind(this));\n        item.input.addEventListener('keyup', this.handleInputKeyup.bind(this));\n      });\n    }\n\n    destroy() {\n    }\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\n\n  // Manage videos\n  theme.VideoManager = new function () {\n    var _ = this;\n\n    _.videos = {\n      incrementor: 0,\n      videoData: {}\n    };\n\n    _._loadYoutubeVideos = function (container) {\n      $('.video-container[data-video-type=\"youtube\"]:not(.video--init)', container).each(function () {\n        $(this).addClass('video--init');\n        _.videos.incrementor++;\n        var containerId = 'theme-yt-video-' + _.videos.incrementor;\n        $(this).data('video-container-id', containerId);\n        var autoplay = $(this).data('video-autoplay');\n        var loop = $(this).data('video-loop');\n        var videoId = $(this).data('video-id');\n        var isBackgroundVideo = $(this).hasClass('video-container--background');\n\n        var ytURLSearchParams = new URLSearchParams('iv_load_policy=3&modestbranding=1&rel=0&showinfo=0&enablejsapi=1&playslinline=1');\n        ytURLSearchParams.append('origin', location.origin);\n        ytURLSearchParams.append('playlist', videoId);\n        ytURLSearchParams.append('loop', loop ? 1 : 0);\n        ytURLSearchParams.append('autoplay', 0);\n        ytURLSearchParams.append('controls', isBackgroundVideo ? 0 : 1);\n        var widgetid = _.videos.incrementor;\n        ytURLSearchParams.append('widgetid', widgetid);\n\n        var src = 'https://www.youtube.com/embed/' + videoId + '?' + ytURLSearchParams.toString();\n\n        var $videoElement = $('<iframe class=\"video-container__video-element\" frameborder=\"0\" allowfullscreen=\"1\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\">').attr({\n          id: containerId,\n          width: 640,\n          height: 360,\n          tabindex: isBackgroundVideo ? '-1' : null\n        }).appendTo($('.video-container__video', this));\n\n        _.videos.videoData[containerId] = {\n          type: 'yt',\n          id: containerId,\n          container: this,\n          mute: () => $videoElement[0].contentWindow.postMessage('{\"event\":\"command\",\"func\":\"mute\",\"args\":\"\"}', '*'),\n          play: () => $videoElement[0].contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*'),\n          pause: () => $videoElement[0].contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*'),\n          stop: () => $videoElement[0].contentWindow.postMessage('{\"event\":\"command\",\"func\":\"stopVideo\",\"args\":\"\"}', '*'),\n          seekTo: (to) => $videoElement[0].contentWindow.postMessage(\"{\\\"event\\\":\\\"command\\\",\\\"func\\\":\\\"seekTo\\\",\\\"args\\\":[\".concat(to, \",true]}\"), '*'),\n          videoElement: $videoElement[0],\n          isBackgroundVideo: isBackgroundVideo,\n          establishedYTComms: false\n        };\n\n        if (autoplay) {\n          $videoElement.on('load', () => setTimeout(() => {\n            // set up imitation JS API and watch for play event\n            window.addEventListener('message', (message) => {\n              if (message.origin === 'https://www.youtube.com' && message.data && typeof message.data === 'string') {\n                var data = JSON.parse(message.data);\n\n                if (data.event === 'initialDelivery' && data.info && data.info.duration) {\n                  _.videos.videoData[containerId].duration = data.info.duration;\n                }\n\n                if (data.event === 'infoDelivery' && data.channel === 'widget' && data.id === widgetid) {\n                  _.videos.videoData[containerId].establishedYTComms = true;\n                  // playing - add class\n                  if (data.info && data.info.playerState === 1) {\n                    $(this).addClass('video-container--playing');\n                  }\n\n                  // loop if in final second\n                  if (loop && data.info && data.info.currentTime > _.videos.videoData[containerId].duration - 1) {\n                    _.videos.videoData[containerId].seekTo(0);\n                  }\n                }\n              }\n            });\n            $videoElement[0].contentWindow.postMessage(\"{\\\"event\\\":\\\"listening\\\",\\\"id\\\":\".concat(widgetid, \",\\\"channel\\\":\\\"widget\\\"}\"), '*');\n\n            // mute and play\n            _.videos.videoData[containerId].mute();\n            _.videos.videoData[containerId].play();\n\n            // if no message received in 2s, assume comms failure and that video is playing\n            setTimeout(() => {\n              if (!_.videos.videoData[containerId].establishedYTComms) {\n                $(this).addClass('video-container--playing');\n              }\n            }, 2000);\n          }, 100));\n        }\n\n        if (isBackgroundVideo) {\n          $videoElement.attr('tabindex', '-1');\n          _._initBackgroundVideo(_.videos.videoData[containerId]);\n\n          // hack only needed for YT BG videos\n          _.addYTPageshowListenerHack();\n        }\n\n        $videoElement.attr('src', src);\n\n        fetch('https://www.youtube.com/oembed?format=json&url=' + encodeURIComponent($(this).data('video-url'))).\n        then((response) => {\n          if (!response.ok) {\n            throw new Error(\"HTTP error! Status: \".concat(response.status));\n          }\n          return response.json();\n        }).\n        then((response) => {\n          if (response.width && response.height) {\n            $videoElement.attr({ width: response.width, height: response.height });\n            if (_.videos.videoData[containerId].assessBackgroundVideo) {\n              _.videos.videoData[containerId].assessBackgroundVideo();\n            }\n          }\n        });\n      });\n    };\n\n    _._loadVimeoVideos = function (container) {\n      $('.video-container[data-video-type=\"vimeo\"]:not(.video--init)', container).each(function () {\n        $(this).addClass('video--init');\n        _.videos.incrementor++;\n        var containerId = 'theme-vi-video-' + _.videos.incrementor;\n        $(this).data('video-container-id', containerId);\n        var autoplay = $(this).data('video-autoplay');\n        var loop = $(this).data('video-loop');\n        var videoId = $(this).data('video-id');\n        var isBackgroundVideo = $(this).hasClass('video-container--background');\n\n        var viURLSearchParams = new URLSearchParams();\n        if (autoplay) {\n          viURLSearchParams.append('muted', 1);\n        }\n        if (loop) {\n          viURLSearchParams.append('loop', 1);\n        }\n        if (isBackgroundVideo) {\n          viURLSearchParams.append('controls', 0);\n        }\n\n        var src = 'https://player.vimeo.com/video/' + videoId + '?' + viURLSearchParams.toString();\n\n        var $videoElement = $('<iframe class=\"video-container__video-element\" frameborder=\"0\" allowfullscreen=\"1\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\">').attr({\n          id: containerId,\n          width: 640,\n          height: 360,\n          tabindex: isBackgroundVideo ? '-1' : null\n        }).appendTo($('.video-container__video', this));\n\n        _.videos.videoData[containerId] = {\n          type: 'vimeo',\n          id: containerId,\n          container: this,\n          play: () => $videoElement[0].contentWindow.postMessage('{\"method\":\"play\"}', '*'),\n          pause: () => $videoElement[0].contentWindow.postMessage('{\"method\":\"pause\"}', '*'),\n          videoElement: $videoElement[0],\n          isBackgroundVideo: isBackgroundVideo,\n          establishedVimeoComms: false\n        };\n\n        if (autoplay) {\n          $videoElement.on('load', () => setTimeout(() => {\n            // set up imitation JS API and watch for play event\n            window.addEventListener('message', (message) => {\n              if (message.origin !== 'https://player.vimeo.com') return;\n              if (message.source !== $videoElement[0].contentWindow) return;\n              if (!message.data) return;\n\n              var data = message.data;\n              if (typeof data === 'string') {\n                data = JSON.parse(data);\n              }\n\n              if (data.method === 'ping' || data.event === 'playing') {\n                _.videos.videoData[containerId].establishedVimeoComms = true;\n              }\n\n              if (data.event === 'playing') {\n                $(this).addClass('video-container--playing');\n              }\n            });\n            $videoElement[0].contentWindow.postMessage({ method: 'addEventListener', value: 'playing' }, '*');\n            $videoElement[0].contentWindow.postMessage({ method: 'appendVideoMetadata', value: location.origin }, '*');\n            $videoElement[0].contentWindow.postMessage({ method: 'ping' }, '*');\n\n            // play video\n            _.videos.videoData[containerId].play();\n\n            // if no message received in 2s, assume comms failure and that video is playing\n            setTimeout(() => {\n              if (!_.videos.videoData[containerId].establishedVimeoComms) {\n                $(this).addClass('video-container--playing');\n              }\n            }, 2000);\n          }, 100));\n        }\n\n        if (isBackgroundVideo) {\n          $videoElement.attr('tabindex', '-1');\n          _._initBackgroundVideo(_.videos.videoData[containerId]);\n        }\n\n        $videoElement.attr('src', src);\n\n        fetch('https://vimeo.com/api/oembed.json?url=' + encodeURIComponent($(this).data('video-url'))).\n        then((response) => {\n          if (!response.ok) {\n            throw new Error(\"HTTP error! Status: \".concat(response.status));\n          }\n          return response.json();\n        }).\n        then((response) => {\n          if (response.width && response.height) {\n            $videoElement.attr({ width: response.width, height: response.height });\n            if (_.videos.videoData[containerId].assessBackgroundVideo) {\n              _.videos.videoData[containerId].assessBackgroundVideo();\n            }\n          }\n        });\n      });\n    };\n\n    _._loadMp4Videos = function (container) {\n      $('.video-container[data-video-type=\"mp4\"]:not(.video--init)', container).addClass('video--init').each(function () {\n        _.videos.incrementor++;\n        var containerId = 'theme-mp-video-' + _.videos.incrementor;\n        var $container = $(this);\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 isBackgroundVideo = $(this).hasClass('video-container--background');\n\n        var $video = $('<video playsinline>');\n        if ($(this).data('video-loop')) {\n          $video.attr('loop', 'loop');\n        }\n        $video.on('click mouseenter', () => $video.attr('controls', 'controls'));\n        if (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            $container.addClass('video-container--playing');\n          });\n        }\n\n        if ($(this).data('video-url')) {\n          $video.attr('src', $(this).data('video-url'));\n        }\n        if ($(this).data('video-sources')) {\n          var sources = $(this).data('video-sources').split('|');\n          for (var i = 0; i < sources.length; i++) {\n            var [format, mimeType, url] = sources[i].split(' ');\n            // only use HLS if not looping\n            if (format === 'm3u8' && $(this).data('video-loop')) {\n              continue;\n            }\n            $('<source>').attr({ src: url, type: mimeType }).appendTo($video);\n          }\n        }\n        $video.appendTo($videoElement);\n\n        var videoData = _.videos.videoData[containerId] = {\n          type: 'mp4',\n          element: $video[0],\n          play: () => $video[0].play(),\n          pause: () => $video[0].pause(),\n          isBackgroundVideo: isBackgroundVideo\n        };\n\n\n        if (isBackgroundVideo) {\n          $video.attr('tabindex', '-1');\n          if (autoplay) {\n            // Support playing background videos in low power mode\n            container.addEventListener('click', videoData.play, { once: true });\n          }\n        }\n      });\n    };\n\n    // background video placement for iframes\n    _._initBackgroundVideo = function (videoData) {\n      if (videoData.container.classList.contains('video-container--background')) {\n        videoData.assessBackgroundVideo = function () {\n          var cw = this.offsetWidth,\n            ch = this.offsetHeight,\n            cr = cw / ch,\n            frame = this.querySelector('iframe'),\n            vr = parseFloat(frame.width) / parseFloat(frame.height),\n            pan = this.querySelector('.video-container__video'),\n            vCrop = 75; // pushes video outside container to hide controls\n          if (cr > vr) {\n            var vh = cw / vr + vCrop * 2;\n            pan.style.marginTop = (ch - vh) / 2 - vCrop + 'px';\n            pan.style.marginInlineStart = '';\n            pan.style.height = vh + vCrop * 2 + 'px';\n            pan.style.width = '';\n          } else {\n            var ph = ch + vCrop * 2;\n            var pw = ph * vr;\n            pan.style.marginTop = -vCrop + 'px';\n            pan.style.marginInlineStart = (cw - pw) / 2 + 'px';\n            pan.style.height = ph + 'px';\n            pan.style.width = pw + 'px';\n          }\n        }.bind(videoData.container);\n        videoData.assessBackgroundVideo();\n        $(window).on('debouncedresize.' + videoData.id, videoData.assessBackgroundVideo);\n\n        // Support playing background videos in low power mode\n        videoData.container.addEventListener('click', videoData.play, { once: true });\n      }\n    };\n\n    _._unloadVideos = function (container) {\n      for (var dataKey in _.videos.videoData) {\n        var data = _.videos.videoData[dataKey];\n        if ($(container).find(data.container).length) {\n          delete _.videos.videoData[dataKey];\n          return;\n        }\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      _._loadYoutubeVideos(container);\n      _._loadVimeoVideos(container);\n      _._loadMp4Videos(container);\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        _.videos.videoData[id].play();\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        // stop\n        var id = $container.data('video-container-id');\n        _.videos.videoData[id].pause();\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      _._unloadVideos(container);\n      $(container).trigger(\"cc:video:stop\");\n    };\n\n    _.addYTPageshowListenerHack = function () {\n      if (!_.pageshowListenerAdded) {\n        _.pageshowListenerAdded = true;\n        window.addEventListener('pageshow', (event) => {\n          if (event.persisted) {\n            // A playing YT video shows a black screen when loaded from bfcache on iOS\n            Object.keys(_.videos.videoData).\n            filter((key) => _.videos.videoData[key].type === 'yt' && _.videos.videoData[key].isBackgroundVideo).\n            forEach((key) => {\n              _.videos.videoData[key].stop();\n              _.videos.videoData[key].play();\n            });\n          }\n        });\n      }\n    };\n  }();\n\n  // Register the section\n  cc.sections.push({\n    name: 'video',\n    section: theme.VideoManager\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: !$map.data('hide-zoom')\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  theme.FaqHeader = new function () {\n    this.onSectionLoad = function (container) {\n      this.namespace = theme.namespaceFromSection(container);\n      this.container = container;\n\n      this.classNames = {\n        questionContainerInactive: 'faq-search-item-inactive',\n        sectionWithIndexStatus: 'section-faq-header--with-index'\n      };\n\n      this.searchInput = this.container.querySelector('.faq-search__input');\n      if (this.searchInput) {\n        this.registerEventListener(this.searchInput, 'change', this.functions.performSearch.bind(this));\n        this.registerEventListener(this.searchInput, 'keyup', this.functions.performSearch.bind(this));\n        this.registerEventListener(this.searchInput, 'paste', this.functions.performSearch.bind(this));\n      }\n\n      this.functions.debouncedBuildIndex = theme.debounce(this.functions.buildIndex.bind(this), 50);\n      this.registerEventListener(document, 'theme:faq-header-update', this.functions.debouncedBuildIndex);\n      this.functions.debouncedBuildIndex();\n\n      if (this.container.querySelector('.faq-index')) {\n        this.registerEventListener(this.container, 'click', this.functions.handleIndexClick.bind(this));\n        this.container.closest('.section-faq-header').classList.add(this.classNames.sectionWithIndexStatus);\n        this.functions.resizeIndex.call(this);\n        this.registerEventListener(window, 'resize', theme.debounce(this.functions.resizeIndex.bind(this), 250));\n      }\n    };\n\n    this.onSectionReorder = function (container) {\n      this.functions.debouncedBuildIndex();\n    };\n\n    this.functions = {\n      buildIndex: function buildIndex() {\n        var faqHeaderSection = this.container.closest('.section-faq-header'),\n          indexContainer = this.container.querySelector('.faq-index__item-container');\n\n        if (indexContainer) {\n          indexContainer.querySelectorAll('.faq-index-item').forEach((element) => {\n            element.parentNode.removeChild(element);\n          });\n        }\n\n        this.linkedCollapsibleTabs = [];\n        this.linkedQuestionContainers = [];\n        this.linkedContent = [];\n\n        var currentElement = faqHeaderSection;\n        while (currentElement.nextElementSibling && currentElement.nextElementSibling.classList.contains('section-collapsible-tabs')) {\n          currentElement = currentElement.nextElementSibling;\n\n          // build list of searchable content\n          this.linkedCollapsibleTabs.push(currentElement);\n          currentElement.querySelectorAll('.collapsible-tabs__tab').forEach((element) => this.linkedQuestionContainers.push(element));\n          currentElement.querySelectorAll('.collapsible-tabs__content').forEach((element) => this.linkedContent.push(element));\n\n          // build index UI\n          if (indexContainer) {\n            var currentElementHeading = currentElement.querySelector('.collapsible-tabs__heading');\n            if (currentElementHeading) {\n              var tve = theme.createTemplateVariableEncoder();\n              tve.add('title_id', currentElementHeading.id, 'attribute');\n              tve.add('title', currentElementHeading.innerHTML, 'raw');\n\n              var html = \"\\n              <div class=\\\"faq-index-item\\\">\\n                <a class=\\\"faq-index-item__link\\\" href=\\\"#\".concat(\n\n              tve.values.title_id, \"\\\">\").concat(tve.values.title, \"</a>\\n              </div>\");\n\n              var htmlFragment = document.createRange().createContextualFragment(html);\n              indexContainer.appendChild(htmlFragment);\n            }\n          }\n        }\n\n        if (indexContainer) {\n          this.functions.resizeIndex.call(this);\n        }\n      },\n\n      resizeIndex: function resizeIndex() {\n        var stickyContainer = this.container.querySelector('.faq-index__sticky-container'),\n          faqHeaderSection = this.container.closest('.section-faq-header');\n\n        var currentElement = faqHeaderSection;\n        while (currentElement.nextElementSibling && currentElement.nextElementSibling.classList.contains('section-collapsible-tabs')) {\n          currentElement = currentElement.nextElementSibling;\n        }\n\n        var stickyContainerRect = stickyContainer.getBoundingClientRect(),\n          currentElementRect = currentElement.getBoundingClientRect();\n\n        stickyContainer.style.height = currentElementRect.bottom - stickyContainerRect.top + 'px';\n      },\n\n      performSearch: function performSearch() {\n        // defer to avoid input lag\n        setTimeout(() => {\n          var splitValue = this.searchInput.value.split(' ');\n\n          // sanitise terms\n          var terms = [];\n          splitValue.forEach((t) => {\n            if (t.length > 0) {\n              terms.push(t.toLowerCase());\n            }\n          });\n\n          // search\n          this.linkedQuestionContainers.forEach((element) => {\n            if (terms.length) {\n              var termFound = false;\n              var matchContent = element.textContent.toLowerCase();\n              terms.forEach((term) => {\n                if (matchContent.indexOf(term) >= 0) {\n                  termFound = true;\n                }\n              });\n              if (termFound) {\n                element.classList.remove(this.classNames.questionContainerInactive);\n              } else {\n                element.classList.add(this.classNames.questionContainerInactive);\n              }\n            } else {\n              element.classList.remove(this.classNames.questionContainerInactive);\n            }\n          });\n\n          // hide non-question content if doing a search\n          this.linkedContent.forEach((element) => {\n            if (terms.length) {\n              element.classList.add(this.classNames.questionContainerInactive);\n            } else {\n              element.classList.remove(this.classNames.questionContainerInactive);\n            }\n          });\n        }, 10);\n      },\n\n      handleIndexClick: function handleIndexClick(evt) {\n        if (evt.target.classList.contains('faq-index-item__link')) {\n          evt.preventDefault();\n          var id = evt.target.href.split('#')[1];\n          var scrollTarget = document.getElementById(id);\n          var scrollTargetY = scrollTarget.getBoundingClientRect().top + window.pageYOffset - 50;\n\n          // sticky header offset\n          var stickyHeight = getComputedStyle(document.documentElement).getPropertyValue('--theme-sticky-header-height');\n          if (stickyHeight) {\n            scrollTargetY -= parseInt(stickyHeight);\n          }\n\n          window.scrollTo({\n            top: scrollTargetY,\n            behavior: 'smooth'\n          });\n        }\n      }\n    };\n  }();\n\n  // Register section\n  cc.sections.push({\n    name: 'faq-header',\n    section: theme.FaqHeader,\n    deferredLoad: false\n  });\n  theme.CollapsibleTabs = new function () {\n    this.onSectionLoad = function (container) {\n      this.functions.notifyFaqHeaderOfChange();\n    };\n\n    this.onSectionReorder = function (container) {\n      this.functions.notifyFaqHeaderOfChange();\n    };\n\n    this.onSectionUnload = function (container) {\n      this.functions.notifyFaqHeaderOfChange();\n    };\n\n    this.functions = {\n      notifyFaqHeaderOfChange: function notifyFaqHeaderOfChange() {\n        document.dispatchEvent(\n        new CustomEvent('theme:faq-header-update', { bubbles: true, cancelable: false }));\n\n      }\n    };\n  }();\n\n  // Register section\n  cc.sections.push({\n    name: 'collapsible-tabs',\n    section: theme.CollapsibleTabs,\n    deferredLoad: false\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   * 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\n  /*================ General =================*/\n  theme.owlCarouselEventList = ['to', 'next', 'prev', 'destroy', 'initialized', 'resized', 'refreshed'].join('.owl.carousel ') + '.owl.carousel';\n  theme.beforeCarouselLoadEventBlockFix = function (carouselEls) {\n    $(carouselEls).on(theme.owlCarouselEventList, function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  theme.beforeCarouselUnloadEventBlockFix = function (carouselEls) {\n    $(carouselEls).off(theme.owlCarouselEventList);\n  };\n\n  theme.loadCarousels = function (container) {\n    return $('.carousel', container).each(function () {\n      var $this = $(this);\n\n      function getTotalProductBlockWidth() {\n        var productBlockTotalWidth = 0;\n        $this.find($this.hasClass('owl-loaded') ? '.owl-item:not(.cloned)' : '.product-block').each(function () {\n          productBlockTotalWidth += $(this).outerWidth(true);\n        });\n        return productBlockTotalWidth;\n      }\n\n      // next & prev arrows\n      $this.closest('.collection-slider').on('click.themeCarousel', '.prev, .next', function (e) {\n        e.preventDefault();\n        var carousel = $(this).closest('.collection-slider').find('.owl-carousel').data('owl.carousel');\n        if ($(this).hasClass('prev')) {\n          carousel.prev();\n        } else {\n          carousel.next();\n        }\n      });\n\n      // create options\n      var carouselOptions, isLooping;\n      var fixedMode = $this.hasClass('carousel--fixed-grid-mode') || !$(this).closest('.container--no-max').length;\n      if (fixedMode) {\n        $this.addClass('carousel--fixed-grid-mode');\n        var desktopNumPerRow = parseInt($this[0].className.match(/per-row-(.)/)[1]);\n        var forcedNumPerRow = false;\n        if ($this[0].className.indexOf('carousel--per-row-') > -1) {\n          forcedNumPerRow = parseInt($this[0].className.match(/carousel--per-row-(.)/)[1]);\n        }\n        carouselOptions = {\n          margin: 0,\n          loop: false,\n          autoWidth: false,\n          items: 5,\n          center: false,\n          nav: false,\n          dots: false,\n          responsive: {\n            0: {\n              items: forcedNumPerRow ? forcedNumPerRow : desktopNumPerRow < 4 ? 1 : 2\n            },\n            480: {\n              items: forcedNumPerRow ? forcedNumPerRow : Math.min(2, desktopNumPerRow - 2)\n            },\n            767: {\n              items: forcedNumPerRow ? forcedNumPerRow : desktopNumPerRow - 1\n            },\n            1000: {\n              items: forcedNumPerRow ? forcedNumPerRow : desktopNumPerRow\n            }\n          }\n        };\n      } else {\n        isLooping = getTotalProductBlockWidth() > $this.width();\n        carouselOptions = {\n          margin: 0,\n          loop: isLooping,\n          autoWidth: true,\n          items: Math.min($this.children().length, 8),\n          center: true,\n          nav: false,\n          dots: false\n        };\n      }\n\n      carouselOptions.rtl = document.querySelector('html[dir=rtl]') ? true : false;\n\n      // init carousel\n      var loadCarousel = function loadCarousel() {\n        // remove data-src as not in correct format for Owl to parse\n        $this.find('[data-src]').each(function () {\n          $(this).attr('data-src-temp', $(this).attr('data-src')).removeAttr('data-src');\n        });\n\n        // fix for event propagation in nested owl carousels\n        theme.beforeCarouselLoadEventBlockFix($this);\n\n        // run after carousel is initialised\n        $this.on('initialized.owl.carousel', function () {\n          // restore data-src\n          $this.find('[data-src-temp]').each(function () {\n            $(this).attr('data-src', $(this).attr('data-src-temp')).removeAttr('data-src-temp');\n          });\n          // lazysizes on primary images\n          $this.find('.product-block__image--primary .lazyload--manual, .product-block__image--secondary[data-image-index=\"1\"] .lazyload--manual, .product-block-options__item.lazyload--manual').removeClass('lazyload--manual').addClass('lazyload');\n          // ensure clones are processed from scratch\n          theme.ProductBlockManager.loadImages($this.closest('[data-section-type]'));\n          // recalculate widths, after the above's async calls\n          setTimeout(function () {\n            $this.data('owl.carousel').invalidate('width');\n            $this.trigger('refresh.owl.carousel');\n          }, 10);\n        });\n\n        // run after carousel is initialised or resized\n        $this.on('initialized.owl.carousel resized.owl.carousel', function (evt) {\n          // only loop if items do not all fit on screen, in non-fixed mode\n          if (!fixedMode && evt.type == 'resized') {\n            var shouldLoop = getTotalProductBlockWidth() > $this.width();\n            if (shouldLoop != isLooping) {\n              // destroy and rebuild carousel with appropriate loop setting\n              carouselOptions.loop = shouldLoop;\n              isLooping = shouldLoop;\n\n              // destroy function\n              $(evt.target).data('owl.carousel').destroy();\n\n              // build again\n              $(evt.target).owlCarousel(carouselOptions);\n\n              // do no more in this callback\n              return;\n            }\n          }\n\n          // layout fixes\n          setTimeout(function () {\n            // fixes\n            var currentWidth = $this.find('.owl-stage').width();\n            var stageIsPartiallyOffScreen = currentWidth > $this.width();\n            if (stageIsPartiallyOffScreen) {\n              // more elements than fit in viewport\n              // resize stage to avoid rounding-error wrapping\n              var newWidth = 0;\n              $this.find('.owl-item').each(function () {\n                newWidth += $(this).outerWidth(true) + 1;\n              });\n              $this.find('.owl-stage').css({\n              }).removeClass('owl-stage--items-fit');\n            } else {\n              // all elements fit inside viewport\n              // centre-align using css, if not full\n              $this.find('.owl-stage').addClass('owl-stage--items-fit').css({\n              });\n            }\n            // previous/next button visibility\n            $this.closest('.collection-slider').find('.prev, .next').toggleClass('owl-btn-disabled', !stageIsPartiallyOffScreen);\n          }, 10);\n        });\n\n        // run when the contents change, for any reason\n        theme.carouselInputIncrementer = theme.carouselInputIncrementer || 0;\n        $this.on('refreshed.owl.carousel', function () {\n          // set a11y attrs to avoid clone items giving duplication errors\n          $('.owl-item', this).removeAttr('aria-hidden');\n          $('.owl-item.cloned', this).attr('aria-hidden', 'true').each(function () {\n            theme.carouselInputIncrementer++;\n            var uniquenessSuffix = '_' + theme.carouselInputIncrementer;\n            $(this).find('form[id]:not([data-id-altered]), :input[id]:not([data-id-altered])').each(function () {\n              $(this).attr('id', $(this).attr('id') + uniquenessSuffix);\n            }).attr('data-id-altered', true);\n\n            $(this).find('label[for]:not([data-id-altered])').each(function () {\n              $(this).attr('for', $(this).attr('for') + uniquenessSuffix);\n            }).attr('data-id-altered', true);\n          });\n        }).addClass('owl-carousel').owlCarousel(carouselOptions);\n      };\n      loadCarousel();\n    });\n  };\n\n  theme.unloadCarousels = function (container) {\n    $('.collection-slider', container).off('.themeCarousel');\n    $('.slick-slider', container).slick('unslick');\n    theme.beforeCarouselUnloadEventBlockFix($('.owl-carousel', container));\n    $('.owl-carousel', container).each(function () {\n      $(this).data('owl.carousel').destroy();\n    });\n  };\n\n  theme.icons = {\n    left: '<svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><title>' + theme.strings.icon_labels_left + '</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>',\n    right: '<svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><title>' + theme.strings.icon_labels_right + '</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>',\n    close: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-x\"><title>' + theme.strings.icon_labels_close + '</title><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line></svg>',\n    chevronLeft: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-chevron-left ltr-icon\"><title>' + theme.strings.icon_labels_left + '</title><polyline points=\"15 18 9 12 15 6\"></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=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-chevron-right ltr-icon\"><title>' + theme.strings.icon_labels_right + '</title><polyline points=\"9 18 15 12 9 6\"></polyline></svg>',\n    chevronDown: '<svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><title>' + theme.strings.icon_labels_down + '</title><path d=\"M7.41 7.84L12 12.42l4.59-4.58L18 9.25l-6 6-6-6z\"/><path d=\"M0-.75h24v24H0z\" fill=\"none\"/></svg>',\n    tick: '<svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/></svg>',\n    label: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-tag\"><title>Label</title><path d=\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\"></path><line x1=\"7\" y1=\"7\" x2=\"7\" y2=\"7\"></line></svg>'\n  };\n\n  // Get Shopify feature support\n  try {\n    theme.Shopify.features = JSON.parse(document.documentElement.querySelector('#shopify-features').textContent);\n  } catch (e) {\n    theme.Shopify.features = {};\n  }\n\n  theme.namespaceFromSection = function (container) {\n    return ['.', $(container).data('section-type'), $(container).data('section-id')].join('');\n  };\n\n  theme.toggleLinkDropdownButton = function (evt) {\n    evt.stopPropagation();\n    var $btn = $(evt.currentTarget),\n      doExpand = $btn.attr('aria-expanded') == 'false';\n    $btn.attr('aria-expanded', doExpand);\n    $btn.css('width', $btn.outerWidth() + 'px');\n    var newWidth = null,\n      $optsBox = $btn.next(),\n      isLeftAligned = $btn.closest('.link-dropdown').hasClass('link-dropdown--left-aligned');\n    if (!isLeftAligned) {\n      if (doExpand) {\n        newWidth = $optsBox.outerWidth();\n        // rtl - could be either side\n        if (document.querySelector('html[dir=rtl]')) {\n          newWidth += parseInt($optsBox.css('left'));\n        } else {\n          newWidth += parseInt($optsBox.css('right'));\n        }\n        newWidth -= parseInt($optsBox.find('.link-dropdown__link:first').css('padding-inline-start'));\n      } else {\n        newWidth = parseInt($btn.css('padding-inline-end')) + $btn.find('.link-dropdown__button-text').width() + 1;\n      }\n      setTimeout(function () {\n        $btn.css('width', newWidth + 'px');\n      }, 10);\n    }\n  };\n\n  // Enables any images inside a container\n  theme.awakenImagesFromSlumber = function ($cont) {\n    $cont.find('.lazyload--manual:not(.lazyload)').addClass('lazyload');\n  };\n\n  theme.measureTextInsideElement = function (text, element) {\n    theme.measureTextInsideElementCanvas = theme.measureTextInsideElementCanvas || document.createElement(\"canvas\");\n    var context = theme.measureTextInsideElementCanvas.getContext(\"2d\");\n    var font = getComputedStyle(element).font;\n    context.font = font;\n    return context.measureText(text);\n  };\n\n  // Use non-breaking space to attempt to avoid orphans\n  theme.avoidUnecessaryOrphans = function (element) {\n    if (theme.settings.avoid_orphans) {\n      var innerTextSplit = element.innerText.split(' ');\n      if (\n      innerTextSplit.length >= 4 && // 4 or more words\n      innerTextSplit[innerTextSplit.length - 1].length + innerTextSplit[innerTextSplit.length - 2].length < 20 // last two words aren't particularly long together\n      ) {\n        var html = element.innerHTML;\n        if (html.indexOf('<span class=\"orphan-join\">') < 0) {\n          html = html.replace(/<[^>]*?>/g, (match) => {\n            return match.replace(/ /g, '\u03A9\u03A9');\n          });\n          var splitHtml = html.split(' '),\n            lastItem = splitHtml.pop();\n\n          // ensure length of text will be smaller than container, excluding HTML\n          if (theme.measureTextInsideElement(splitHtml[splitHtml.length - 1].replace(/<[^>]*?>/g, '') + ' ' + lastItem.replace(/<[^>]*?>/g, ''), element).width > element.clientWidth) {\n            return;\n          }\n\n          html = splitHtml.join(' ') + '<span class=\"orphan-join\"> </span>' + lastItem;\n          html = html.replace(/\u03A9\u03A9/g, ' ');\n          element.innerHTML = html;\n        }\n      }\n    }\n  };\n\n  theme.stickyHeaderHeight = function () {\n    var v = getComputedStyle(document.documentElement).getPropertyValue('--theme-sticky-header-height');\n    if (v) {\n      return parseInt(v) || 0;\n    } else {\n      return 0;\n    }\n  };\n\n  theme.getOffsetTopFromDoc = (el) => {\n    return el ? theme.getOffsetTopFromDoc(el.offsetParent) + el.offsetTop : 0;\n  };\n\n  theme.getScrollParent = function (node) {\n    var isElement = node instanceof HTMLElement;\n    var overflowY = isElement && window.getComputedStyle(node).overflowY;\n    var isScrollable = overflowY !== 'visible' && overflowY !== 'hidden';\n\n    if (!node) {\n      return null;\n    } else if (isScrollable && node.scrollHeight > node.clientHeight) {\n      return node;\n    }\n\n    return theme.getScrollParent(node.parentNode) || document.scrollingElement || window;\n  };\n\n  theme.scrollToRevealElement = function (el) {\n    var scrollContainer = theme.getScrollParent(el);\n    var scrollTop = scrollContainer === window ? window.scrollY : scrollContainer.scrollTop;\n    var scrollVisibleHeight = scrollContainer === window ? window.innerHeight : scrollContainer.clientHeight;\n    var elTop = theme.getOffsetTopFromDoc(el),\n      elBot = elTop + el.offsetHeight,\n      inViewTop = scrollTop + theme.stickyHeaderHeight(),\n      inViewBot = scrollTop + scrollVisibleHeight - 50;\n\n    if (elTop < inViewTop || elBot > inViewBot) {\n      scrollContainer.scrollTo({\n        top: elTop - 100 - theme.stickyHeaderHeight(),\n        left: 0,\n        behavior: 'smooth'\n      });\n    }\n  };\n\n  theme.getEmptyOptionSelectors = function ($formContainer) {\n    var emptySections = [];\n\n    $formContainer.find('[data-selector-type=\"dropdown\"].option-selector').each(function () {\n      if (!$(this).find('[aria-selected=\"true\"]').filter(function () {\n        return this.dataset && this.dataset.value;\n      }).length) {\n        emptySections.push(this);\n      }\n    });\n\n    $formContainer.find('[data-selector-type=\"listed\"].option-selector').each(function () {\n      if (!$(this).find('input:checked').length) {\n        emptySections.push(this);\n      }\n    });\n\n    return emptySections;\n  };\n\n  theme.validateProductForm = function ($formContainer) {\n    $formContainer.find('.option-selector--empty').\n    removeClass('option-selector--empty').\n    find('.label__prefix').\n    remove();\n\n    if (!$formContainer.find('.original-selector').val()) {\n      var emptySections = theme.getEmptyOptionSelectors($formContainer);\n\n      if (emptySections.length) {\n        emptySections.forEach((el) => {\n          el.classList.add('option-selector--empty');\n          var labelPrefix = document.createElement('span');\n          labelPrefix.innerText = theme.strings.products_product_pick_a + ' ';\n          labelPrefix.className = 'label__prefix';\n          el.querySelector('.label').prepend(labelPrefix);\n        });\n\n        theme.scrollToRevealElement(emptySections[0]);\n\n        $formContainer.addClass('product-form--validation-started');\n      }\n      return false;\n\n    } else if (!theme.OptionManager.getCurrentVariantData($formContainer).available) {\n      // variant unavailable\n      return false;\n\n    } else {\n      return true;\n    }\n  };\n\n  theme.pauseAllMedia = function (params) {\n    if (!params || params.videos) {\n      document.querySelectorAll('.js-youtube').forEach((video) => {\n        video.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"' + 'pauseVideo' + '\",\"args\":\"\"}', '*');\n      });\n      document.querySelectorAll('.js-vimeo').forEach((video) => {\n        video.contentWindow.postMessage('{\"method\":\"pause\"}', '*');\n      });\n      document.querySelectorAll('video').forEach((video) => video.pause());\n    }\n    if (!params || params.models) {\n      document.querySelectorAll('product-model').forEach((model) => {\n        if (model.modelViewerUI) model.modelViewerUI.pause();\n      });\n    }\n  };\n\n  theme.suffixIds = (container, prefix) => {\n    var suffixCandidates = ['id', 'for', 'aria-describedby', 'aria-controls'];var _loop = function _loop(i)\n    {\n      container.querySelectorAll(\"[\".concat(suffixCandidates[i], \"]\")).forEach((el) => el.setAttribute(suffixCandidates[i], el.getAttribute(suffixCandidates[i]) + prefix));\n    };for (var i = 0; i < suffixCandidates.length; i++) {_loop(i);}\n  };\n\n  theme.addDelegateEventListener = function (element, eventName, selector, callback) {var addEventListenerParams = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n    var cb = (evt) => {\n      var el = evt.target.closest(selector);\n      if (!el) return;\n      if (!element.contains(el)) return;\n      callback.call(el, evt, el);\n    };\n    element.addEventListener(eventName, cb, addEventListenerParams);\n  };\n\n  theme.hideAndRemove = (el) => {\n    // disable\n    el.querySelectorAll('input').forEach((el) => el.disabled = true);\n\n    // wrap\n    var wrapper = document.createElement('div');\n    wrapper.className = 'merge-remove-wrapper';\n    el.parentNode.insertBefore(wrapper, el);\n    wrapper.appendChild(el);\n    el.classList.add('merge-remove-item');\n    wrapper.style.height = wrapper.clientHeight + 'px';\n\n    var cs = getComputedStyle(el),\n      fadeDuration = parseFloat(cs.getPropertyValue('--fade-duration')) * 1000,\n      slideDuration = parseFloat(cs.getPropertyValue('--slide-duration')) * 1000;\n\n    setTimeout(() => {\n      wrapper.classList.add('merge-remove-wrapper--fade');\n\n      setTimeout(() => {\n        wrapper.classList.add('merge-remove-wrapper--slide');\n\n        setTimeout(() => wrapper.remove(), slideDuration);\n      }, fadeDuration);\n    }, 10);\n  };\n\n  theme.insertAndReveal = (el, target, iaeCmd, delay) => {\n    var initialDelay = delay ? delay : 10;\n    el.classList.add('merge-add-wrapper');\n    target.insertAdjacentElement(iaeCmd, el);\n    el.style.height = el.firstElementChild.clientHeight + 'px';\n\n    var cs = getComputedStyle(el),\n      fadeDuration = parseFloat(cs.getPropertyValue('--fade-duration')) * 1000,\n      slideDuration = parseFloat(cs.getPropertyValue('--slide-duration')) * 1000;\n\n    setTimeout(() => {\n      el.classList.add('merge-add-wrapper--slide');\n\n      setTimeout(() => {\n        el.classList.add('merge-add-wrapper--fade');\n\n        setTimeout(() => {\n          // tidy up\n          el.style.height = '';\n          el.classList.remove('merge-add-wrapper', 'merge-add-wrapper--slide', 'merge-add-wrapper--fade');\n        }, fadeDuration);\n      }, slideDuration);\n    }, initialDelay);\n  };\n\n  theme.mergeNodes = (newContent, targetContainer) => {\n    try {\n      // merge: replace content if changed\n      newContent.querySelectorAll('[data-merge]').forEach((newEl) => {\n        var targetEl = targetContainer.querySelector(\"[data-merge=\\\"\".concat(newEl.dataset.merge, \"\\\"]\"));\n        if (!newEl.dataset.mergeCache || !targetEl.dataset.mergeCache || newEl.dataset.mergeCache !== targetEl.dataset.mergeCache) {\n          targetEl.innerHTML = newEl.innerHTML;\n          targetEl.dataset.mergeCache = newEl.dataset.mergeCache;\n        }\n      });\n      // merge: attributes only\n      newContent.querySelectorAll('[data-merge-attributes]').forEach((newEl) => {\n        var targetEl = targetContainer.querySelector(\"[data-merge-attributes=\\\"\".concat(newEl.dataset.mergeAttributes, \"\\\"]\"));\n        for (var attr of newEl.attributes) {\n          targetEl.setAttribute(attr.localName, attr.value);\n        }\n      });\n      // merge: insert/remove/replace in list\n      newContent.querySelectorAll('[data-merge-list]').forEach((newList) => {\n        var targetList = targetContainer.querySelector(\"[data-merge-list=\\\"\".concat(newList.dataset.mergeList, \"\\\"]\"));\n        var targetListItems = Array.from(targetList.querySelectorAll('[data-merge-list-item]'));\n        var newListItems = Array.from(newList.querySelectorAll('[data-merge-list-item]'));\n\n        // remove\n        targetListItems.forEach((targetListItem) => {\n          var matchedItem = newListItems.find((item) => item.dataset.mergeListItem == targetListItem.dataset.mergeListItem);\n          if (!matchedItem) {\n            theme.hideAndRemove(targetListItem);\n          }\n        });\n\n        // rebuild target list excluding removed items\n        targetListItems = Array.from(targetList.querySelectorAll('[data-merge-list-item]:not(.merge-remove-item)'));var _loop2 = function _loop2()\n\n        {\n          var newListItem = newListItems[i];\n          var matchedItem = targetListItems.find((item) => item.dataset.mergeListItem == newListItem.dataset.mergeListItem);\n          if (matchedItem) {\n            // replace if changed\n            if (!newListItem.dataset.mergeCache || !matchedItem.dataset.mergeCache || newListItem.dataset.mergeCache !== matchedItem.dataset.mergeCache) {\n              matchedItem.innerHTML = newListItem.innerHTML;\n              if (newListItem.dataset.mergeCache) {\n                matchedItem.dataset.mergeCache = newListItem.dataset.mergeCache;\n              }\n            }\n          } else {\n            // add\n            if (i === 0) {\n              // first place\n              theme.insertAndReveal(newListItem, targetList, 'afterbegin', 500);\n            } else if (i >= targetListItems.length) {\n              // at end\n              theme.insertAndReveal(newListItem, targetList, 'beforeend', 500);\n            } else {\n              // before element currently at that index\n              theme.insertAndReveal(newListItem, targetListItems[i], 'beforebegin', 500);\n            }\n            // update target list\n            targetListItems.splice(i, 0, newListItem);\n          }\n        };for (var i = 0; i < newListItems.length; i++) {_loop2();}\n      });\n    } catch (_unused) {\n      location.reload();\n    }\n  };\n\n  // bg-set snippet in JS\n  theme.lazyBGSetWidths = [180, 360, 540, 720, 900, 1080, 1296, 1512, 1728, 1950, 2100, 2260, 2450, 2700, 3000, 3350, 3750, 4100];\n  theme.loadLazyBGSet = function (container) {\n    $('[data-lazy-bgset-src]', container).each(function () {\n      var srcset = '',\n        masterSrc = $(this).data('lazy-bgset-src'),\n        aspectRatio = $(this).data('lazy-bgset-aspect-ratio'),\n        masterWidth = $(this).data('lazy-bgset-width'),\n        masterHeight = Math.round(masterWidth / aspectRatio);\n\n      for (var i = 0; i < theme.lazyBGSetWidths.length; i++) {\n        var thisWidth = theme.lazyBGSetWidths[i];\n        if (masterWidth >= thisWidth) {\n          srcset += \"\".concat(theme.Shopify.formatImage(masterSrc, thisWidth + 'x'), \" \").concat(thisWidth, \"w \").concat(Math.round(thisWidth / aspectRatio), \"h, \");\n        }\n      }\n      srcset += \"\".concat(masterSrc, \" \").concat(masterWidth, \"w \").concat(masterHeight, \"h\");\n      $(this).attr('data-bgset', srcset).removeClass('lazyload--manual').addClass('lazyload');\n    });\n  };\n\n\n\n  /*=============== Components ===============*/\n  // Process product block layout\n  theme.ProductBlockManager = new function () {\n    var _ = this;\n\n    _.isDesktop = function () {\n      return $(window).width() >= 768;\n    };\n\n    _.loadImages = function (container) {\n      var container = container;\n      if (typeof container === 'undefined') {\n        container = $('body');\n      }\n\n      // lazy bg-set - faster in JS\n      theme.loadLazyBGSet(container);\n\n      if (_.isDesktop()) {\n        // preload hover images after short delay\n        setTimeout(() => {\n          $('.product-block__image--show-on-hover.product-block__image--inactivated', container).each(function () {\n            _.lazyloadImage($(this));\n            lazySizes.loader.unveil($(this).find('.lazyload')[0]);\n          });\n        }, 250);\n        // preload first carousel image after a delay\n        setTimeout(() => {\n          $('.product-block__image--show-on-hover + .product-block__image--inactivated', container).each(function () {\n            _.lazyloadImage($(this));\n          });\n        }, 1000);\n      }\n\n      _.monitorImagePagination(container);\n      _.monitorSwatchSelection(container);\n      _.afterImagesResized(container);\n    };\n\n    _.unloadImages = function (container) {\n      $(container).off('.productBlockManager');\n    };\n\n    // get image at index, safely wraps index\n    _.getImageAt = function ($images, index) {\n      // positive modulo, like it should be, JS does not do *maths* correctly\n      return $images[(index % $images.length + $images.length) % $images.length];\n    };\n\n    _.lazyloadImage = function ($image, onLoadCB) {\n      var $toLoad = $image.filter('.product-block__image--inactivated');\n      if ($toLoad.length) {\n        if (onLoadCB) {\n          $toLoad.on('lazyloaded.themeBlockManager', (evt) => {\n            if (evt.target === $toLoad.find('.lazyloaded')[0]) {\n              onLoadCB();\n            }\n            $(this).off('lazyloaded.themeBlockManager');\n          });\n        }\n        $toLoad.removeClass('product-block__image--inactivated');\n      } else if (onLoadCB) {\n        onLoadCB();\n      }\n    };\n\n    _.incrementActiveImage = function ($images, increment) {\n      var index = Math.max($images.filter('.product-block__image--active:first').index(), 0);\n      _.setActiveImage($images, index + increment);\n    };\n\n    _.setActiveImage = function ($images, index) {\n      var $newActive = $(_.getImageAt($images, index));\n\n      _.lazyloadImage($newActive, () => {\n        // set new active image visibility\n        $newActive.addClass('product-block__image--active');\n        $newActive.siblings().removeClass('product-block__image--active');\n        // set new hover image\n        var $hoverImage = $(_.getImageAt($images, index + 1)).addClass('product-block__image--show-on-hover');\n        $hoverImage.siblings().removeClass('product-block__image--show-on-hover');\n        _.lazyloadImage($hoverImage);\n      });\n\n      // dots\n      var $dots = $images.closest('.image-cont').find('.product-block__image-dot');\n      $dots.removeClass('product-block__image-dot--active').eq($newActive.index()).addClass('product-block__image-dot--active');\n    };\n\n    _.monitorImagePagination = function (container) {\n      if ($('.image-cont--with-secondary-image', container).length) {\n        // next/prev button selection\n        $(container).on('click.productBlockManager', '.image-page-button', function (evt) {\n          var $images = $(this).closest('.product-block').find('.product-block__image');\n          _.incrementActiveImage($images, $(evt.currentTarget).hasClass('image-page-button--next') ? 1 : -1);\n          // preload the rest\n          $images.each(function () {\n            _.lazyloadImage($(this));\n          });\n          return false;\n        });\n\n        // swipe (when not in a carousel)\n        if ($('.image-cont--with-secondary-image:first', container).closest('.carousel, .product-list--scrollarea').length === 0) {\n          // preload all images after swipe\n          $(container).on('imageSwiped', '.product-block', function () {\n            if ($('.product-block__image--inactivated', this).length) {\n              setTimeout(function () {\n                $(this).find('.product-block__image').each(function () {\n                  _.lazyloadImage($(this));\n                });\n              }.bind(this), 500);\n            }\n          });\n\n          $(container).on('touchstart.productBlockManager', '.image-cont--with-secondary-image', function (evt) {\n            theme.productBlockTouchTracking = true;\n            theme.productBlockTouchStartX = evt.touches[0].clientX;\n            theme.productBlockTouchStartY = evt.touches[0].clientY;\n            // preload next image on touchstart\n            var nextImage = evt.currentTarget.querySelector('.product-block__image--active + .product-block__image--inactivated');\n            if (nextImage) {\n              _.lazyloadImage($(nextImage));\n            }\n          });\n\n          $(container).on('touchmove.productBlockManager', '.image-cont--with-secondary-image', function (evt) {\n            if (theme.productBlockTouchTracking) {\n              if (Math.abs(evt.touches[0].clientY - theme.productBlockTouchStartY) < 30) {\n                var deltaX = evt.touches[0].clientX - theme.productBlockTouchStartX;\n                if (deltaX > 25) {\n                  var $images = $(this).closest('.product-block').trigger('imageSwiped').find('.product-block__image');\n                  _.incrementActiveImage($images, -1);\n                  theme.productBlockTouchTracking = false;\n                } else if (deltaX < -25) {\n                  var $images = $(this).closest('.product-block').trigger('imageSwiped').find('.product-block__image');\n                  _.incrementActiveImage($images, 1);\n                  theme.productBlockTouchTracking = false;\n                }\n              }\n            }\n          });\n          $(container).on('touchend.productBlockManager', '.image-cont--with-secondary-image', function (evt) {\n            theme.productBlockTouchTracking = false;\n          });\n        }\n      }\n    };\n\n    _.monitorSwatchSelection = function (container) {\n      if ($('[data-media].product-block-options__item', container).length) {\n        $(container).on('mouseenter.productBlockManager click.productBlockManager', '[data-media].product-block-options__item', function () {\n          var $block = $(this).closest('.product-block');\n          var $images = $block.find('.product-block__image');\n          var index = $images.filter('[data-media-id=\"' + $(this).data('media') + '\"].product-block__image').index();\n          _.setActiveImage($images, index);\n          // include in URL\n          var optionName = $(this).closest('.product-block-options').data('option-name'),\n            optionValue = $(this).data('option-item');\n          $block[0].querySelectorAll('.product-link, .quickbuy-toggle').forEach((el) => {\n            var url = new URL(el.href);\n            var params = new URLSearchParams(url.search);\n            params.set(optionName, optionValue);\n            el.href = \"\".concat(url.pathname, \"?\").concat(params);\n            el.rel = 'nofollow';\n          });\n        });\n      }\n    };\n\n    _.afterImagesResized = function (container) {\n      var container = container;\n      if (typeof container === 'undefined') {\n        container = $('body');\n      }\n\n      _.alignProductBlockHeights(container);\n    };\n\n    _.alignProductBlockHeights = function (container) {\n      var container = container;\n      if (typeof container === 'undefined') {\n        container = $('body');\n      }\n\n      // All product blocks must be the same height, for quick-buy alignment\n      $('.collection-listing .product-list', container).each(function () {\n        if ($(window).width() >= 768 || $(this).closest('.carousel').length > 0) {\n          var tallest = 0;\n          $(this).find('.product-block .block-inner .block-inner-inner').each(function () {\n            if ($(this).height() > tallest) tallest = $(this).height();\n          });\n          $(this).find('.product-block .block-inner').css('min-height', tallest);\n        } else {\n          $(this).find('.product-block .block-inner').css('min-height', '');\n        }\n      });\n    };\n  }();\n\n  if (theme.settings.after_add_to_cart === 'notification') {\n    var AddedNotification = class extends HTMLElement {\n      connectedCallback() {\n        this.dismissOthers();\n        this.setProductTitle(this.dataset.productTitle);\n        this.display();\n      }\n\n      disconnectedCallback() {\n        clearTimeout(this.delayedDismissTimeout);\n      }\n\n      dismissOthers() {\n        document.querySelectorAll('.added-notification').forEach((notification) => {\n          if (notification !== this) {\n            notification.dismiss();\n          }\n        });\n      }\n\n      setProductTitle(productTitle) {\n        this.querySelector('.added-notification__message-title').innerText = productTitle;\n      }\n\n      display() {\n        // reveal\n        setTimeout(() => this.classList.remove('added-notification--hidden'), 10);\n\n        // dismiss after a short period of time\n        this.delayedDismissTimeout = setTimeout(this.dismiss.bind(this), 6000);\n\n        // add events to internal links\n        this.querySelector('.added-notification__close').addEventListener('click', this.dismiss.bind(this));\n        if (theme.settings.cart_type === 'drawer') {\n          var cartLinks = this.querySelectorAll('.added-notification__message-text a[href$=\"/cart\"]');\n          cartLinks.forEach((el) => {\n            el.addEventListener('click', (evt) => {\n              evt.preventDefault();\n              document.dispatchEvent(\n              new CustomEvent('theme:open-cart-drawer', { bubbles: true, cancelable: false }));\n\n              this.dismiss();\n            });\n          });\n        }\n      }\n\n      dismiss(evt) {\n        if (evt) {evt.preventDefault();}\n        this.classList.add('added-notification--dismissed');\n        setTimeout(this.remove.bind(this), 2000);\n      }\n    };\n\n    window.customElements.define('added-notification', AddedNotification);\n  }\n\n  theme.applyAjaxToProductForm = function ($formContainer) {\n    $formContainer.find('form.product-purchase-form').each(function () {\n      var $form = $(this);\n      $form.on('submit', function (evt) {\n        // Validate\n        if (!theme.validateProductForm($formContainer)) {\n          return false;\n        }\n\n        // Ajax-add\n        if (theme.settings.after_add_to_cart !== 'no-js' && $formContainer.is('[data-ajax-add-to-cart=\"true\"]')) {\n          evt.preventDefault();\n\n          var shopifyAjaxAddURL = theme.routes.cart_add_url;\n\n          //Disable add button\n          $form.find('button[type=\"submit\"]').attr('disabled', 'disabled').each(function () {\n            if ($(this).hasClass('btn--added')) {\n              clearTimeout($(this).data('revertAddToCartTextTimeoutID'));\n            } else {\n              $(this).data('previous-value', $(this).html());\n            }\n          }).html('<div class=\"loading-spinner loading-spinner--in-btn\"></div>');\n\n          //Add to cart\n          var formData = new FormData($form[0]);\n          formData.append('sections', 'cart-drawer');\n          $.post(shopifyAjaxAddURL, new URLSearchParams(formData).toString(), theme.addedToCartHandler.bind($form), 'json').fail(function (data) {\n            //Enable add button\n            $form.find('button[type=\"submit\"]').removeAttr('disabled').each(function () {\n              $(this).html($(this).data('previous-value'));\n            });\n\n            //Not added, show message\n            if (typeof data !== 'undefined' && typeof data.status !== 'undefined') {\n              var jsonRes = $.parseJSON(data.responseText);\n              theme.showQuickPopup(jsonRes.description, $form.find('button[type=\"submit\"]:first'));\n            } else {\n              //Some unknown error? Disable ajax and add the old-fashioned way.\n              $formContainer.attr('ajax-add-to-cart', 'false');\n              $form.submit();\n            }\n          });\n        }\n      });\n    });\n  };\n\n  theme.addedToCartHandler = function (response) {\n    if (theme.settings.after_add_to_cart === 'page') {\n      // redirect\n      window.location = theme.routes.cart_url;\n\n    } else if (theme.settings.after_add_to_cart === 'drawer') {\n      // refresh areas and open drawer\n      document.documentElement.dispatchEvent(\n      new CustomEvent('theme:cartchanged', { bubbles: true, cancelable: false, detail: { openDrawer: true } }));\n\n\n    } else if (theme.settings.after_add_to_cart === 'notification') {\n      // refresh areas\n      document.documentElement.dispatchEvent(\n      new CustomEvent('theme:cartchanged', { bubbles: true, cancelable: false }));\n\n\n      // create notification\n      var notification = document.getElementById('AddedNotification').content.firstElementChild.cloneNode(true);\n      notification.dataset.productTitle = response.product_title;\n      var notificationContainer = document.querySelector('.pageheader--sticky');\n      if (!notificationContainer) {\n        notificationContainer = document.querySelector('body');\n      }\n      notificationContainer.appendChild(notification);\n    }\n\n    // Enable add button\n    $(this).find('button[type=\"submit\"]').removeAttr('disabled').each(function () {\n      $btn = $(this);\n      // Set to 'DONE', alter button style, wait a few secs, revert to normal\n      $btn.addClass('btn--added').text(theme.strings.products_product_added_to_cart);\n      clearTimeout($(this).data('revertAddToCartTextTimeoutID'));\n      $btn.data('revertAddToCartTextTimeoutID',\n      setTimeout(function () {\n        $btn.html($btn.data('previous-value')).removeClass('btn--added');\n      }, 3000));\n\n    });\n  };\n\n  theme.removeAjaxFromProductForm = function ($formContainer) {\n    $formContainer.find('form.product-purchase-form').off('submit');\n  };\n\n  var CartForm = class extends HTMLElement {\n    connectedCallback() {\n      theme.cartNoteMonitor.load($('[name=\"note\"]', this));\n      this.enableAjaxUpdate = this.dataset.ajaxUpdate;\n\n      if (this.enableAjaxUpdate) {\n        this.sectionId = this.dataset.sectionId;\n        this.boundRefresh = (evt) => {\n          this.refresh(evt.detail && evt.detail.openDrawer);\n        };\n        document.addEventListener('theme:cartchanged', this.boundRefresh);\n\n        theme.addDelegateEventListener(this, 'click', '.cart-item__remove', (evt) => {\n          evt.preventDefault();\n          this.adjustItemQuantity(evt.target.closest('.cart-item'), { to: 0 });\n        });\n\n        theme.addDelegateEventListener(this, 'click', '.quantity-down', (evt) => {\n          evt.preventDefault();\n          this.adjustItemQuantity(evt.target.closest('.cart-item'), { decrease: true });\n        });\n\n        theme.addDelegateEventListener(this, 'click', '.quantity-up', (evt) => {\n          evt.preventDefault();\n          this.adjustItemQuantity(evt.target.closest('.cart-item'), { increase: true });\n        });\n\n        theme.addDelegateEventListener(this, 'change', '.cart-item__quantity-input', (evt) => {\n          this.adjustItemQuantity(evt.target.closest('.cart-item'), { currentValue: true });\n        });\n      }\n    }\n\n    disconnectedCallback() {\n      theme.cartNoteMonitor.unload($('[name=\"note\"]', this));\n\n      if (this.enableAjaxUpdate) {\n        document.removeEventListener('theme:cartchanged', this.boundRefresh);\n      }\n    }\n\n    refresh(openDrawer) {\n      this.classList.add('cart-form--refreshing');\n      fetch(\"\".concat(window.Shopify.routes.root, \"?section_id=\").concat(this.sectionId)).\n      then((response) => {\n        if (!response.ok) {\n          throw new Error(\"HTTP error! Status: \".concat(response.status));\n        }\n        return response.text();\n      }).\n      then((response) => {\n        var frag = document.createDocumentFragment(),\n          newContent = document.createElement('div');\n        frag.appendChild(newContent);\n        newContent.innerHTML = response;\n\n        newContent.querySelectorAll('[data-cc-animate]').forEach((el) => el.removeAttribute('data-cc-animate'));\n\n        theme.mergeNodes(newContent, this);\n\n        this.classList.remove('cart-form--refreshing');\n        this.querySelectorAll('.merge-item-refreshing').forEach((el) => el.classList.remove('merge-item-refreshing'));\n\n        theme.cartNoteMonitor.load($('[name=\"note\"]', this));\n\n        if (openDrawer) {\n          document.dispatchEvent(\n          new CustomEvent('theme:open-cart-drawer', { bubbles: true, cancelable: false }));\n\n        }\n      });\n    }\n\n    adjustItemQuantity(item, change) {\n      var quantityInput = item.querySelector('.cart-item__quantity-input');\n\n      var newQuantity = parseInt(quantityInput.value);\n      if (typeof change.to !== 'undefined') {\n        newQuantity = change.to;\n        quantityInput.value = newQuantity;\n      } else if (change.increase) {\n        newQuantity += quantityInput.step || 1;\n        quantityInput.value = newQuantity;\n      } else if (change.decrease) {\n        newQuantity -= quantityInput.step || 1;\n        quantityInput.value = newQuantity;\n      } else if (change.currentValue) {\n\n        // do nothing\n      }\n      if (quantityInput.max && parseInt(quantityInput.value) > parseInt(quantityInput.max)) {\n        newQuantity = quantityInput.max;\n        quantityInput.value = newQuantity;\n        theme.showQuickPopup(theme.strings.cart_general_quantity_too_high.replace('[QUANTITY]', quantityInput.max), $(quantityInput));\n      }\n\n      clearTimeout(this.adjustItemQuantityTimeout);\n      this.adjustItemQuantityTimeout = setTimeout(() => {\n        var qtys = [];\n        this.querySelectorAll('.cart-item__quantity-input:not([disabled])').forEach((el) => {\n          qtys.push(el.value);\n          if (el.value != el.dataset.initialValue) {\n            el.closest('[data-merge-list-item]').classList.add('merge-item-refreshing');\n          }\n        });\n        fetch(theme.routes.cart_update_url, {\n          method: 'POST',\n          body: JSON.stringify({ updates: qtys }),\n          headers: {\n            \"Content-Type\": \"application/json\"\n          }\n        }).\n        then((response) => {\n          if (!response.ok) {\n            throw new Error(\"HTTP error! Status: \".concat(response.status));\n          }\n          document.dispatchEvent(\n          new CustomEvent('theme:cartchanged', { bubbles: true, cancelable: false }));\n\n        });\n      }, newQuantity === 0 ? 10 : 700);\n    }\n  };\n\n  window.customElements.define('cart-form', CartForm);\n  ;\n  var CCCartCrossSell = class extends HTMLElement {\n    connectedCallback() {\n      // not needed immediately\n      setTimeout(this.init.bind(this), 500);\n    }\n\n    init() {\n      this.productList = this.querySelector('.product-list');\n\n      if (this.dataset.from) {\n        fetch(this.dataset.from).\n        then((response) => {\n          if (!response.ok) {\n            throw new Error(\"HTTP error! Status: \".concat(response.status));\n          }\n          return response.text();\n        }).\n        then((response) => {\n          var frag = document.createDocumentFragment(),\n            newContent = document.createElement('div');\n          frag.appendChild(newContent);\n          newContent.innerHTML = response;\n\n          var pl = newContent.querySelector('.product-list');\n          if (pl) {\n            this.productList.innerHTML = pl.innerHTML;\n            theme.loadCarousels(this);\n          } else {\n            this.classList.add('hidden');\n          }\n        });\n      } else {\n        theme.loadCarousels(this);\n      }\n    }\n  };\n\n  window.customElements.define('cc-cart-cross-sell', CCCartCrossSell);\n  ; // must be after product-blocks.js\n  var CCFetchedContent = class extends HTMLElement {\n    connectedCallback() {\n      fetch(this.dataset.url).\n      then((response) => {\n        if (!response.ok) {\n          throw new Error(\"HTTP error! Status: \".concat(response.status));\n        }\n        return response.text();\n      }).\n      then((response) => {\n        var frag = document.createDocumentFragment(),\n          fetchedContent = document.createElement('div');\n        frag.appendChild(fetchedContent);\n        fetchedContent.innerHTML = response;\n\n        var replacementContent = fetchedContent.querySelector(\"[data-id=\\\"\".concat(CSS.escape(this.dataset.id), \"\\\"]\"));\n        if (replacementContent) {\n          this.innerHTML = replacementContent.innerHTML;\n\n          if (this.hasAttribute('contains-product-blocks')) {\n            theme.loadCarousels(this);\n            theme.ProductBlockManager.loadImages(this);\n          }\n        }\n      });\n    }\n  };\n\n  window.customElements.define('cc-fetched-content', CCFetchedContent);\n  ;\n  theme.LoadFilterer = function (section) {\n    this.$container = section.$container;\n    this.namespace = section.namespace;\n    this.registerEventListener = section.registerEventListener;\n\n    this.functions = {\n      initFiltersEtc: function initFiltersEtc() {\n        $('.filter-container', this.$container).addClass('filter-container--mobile-initialised');\n\n        // append query vars onto sort urls (e.g. filters, vendor collection)\n        if (location.href.indexOf('?') >= 0) {\n          $('#sort-dropdown-options .link-dropdown__link', this.$container).each(function () {\n            var queryTerms = location.href.split('?')[1].split('&');\n            var newHref = $(this).attr('href');\n            queryTerms.forEach((term) => {\n              if (term.indexOf('sort_by=') === -1) {\n                newHref += '&' + term;\n              }\n            });\n            $(this).attr('href', newHref);\n          });\n        }\n\n        theme.ProductBlockManager.loadImages(this.$container);\n      },\n\n      switchGridLayout: function switchGridLayout(evt) {\n        evt.preventDefault();\n        if ($(evt.currentTarget).hasClass('layout-switch--one-column')) {\n          this.$container.find('.product-list').removeClass('product-list--per-row-mob-2').addClass('product-list--per-row-mob-1');\n        } else {\n          this.$container.find('.product-list').removeClass('product-list--per-row-mob-1').addClass('product-list--per-row-mob-2');\n        }\n        $(evt.currentTarget).addClass('layout-switch--active').siblings().removeClass('layout-switch--active');\n      },\n\n      checkStickyScroll: function checkStickyScroll() {\n        var utilityBarOffsetY = $('.utility-bar').offset().top;\n        if ($(window).width() < 768 && this.previousScrollTop > window.scrollY && window.scrollY > utilityBarOffsetY) {\n          $('body').addClass('utility-bar-sticky-mobile-copy-reveal');\n        } else {\n          $('body.utility-bar-sticky-mobile-copy-reveal').removeClass('utility-bar-sticky-mobile-copy-reveal');\n        }\n        this.previousScrollTop = window.scrollY;\n      },\n\n      ajaxLoadLink: function ajaxLoadLink(evt) {\n        evt.preventDefault();\n        this.functions.ajaxLoadUrl.call(this, $(evt.currentTarget).attr('href'));\n      },\n\n      ajaxLoadForm: function ajaxLoadForm(evt) {\n        if (evt.type === 'submit') {\n          evt.preventDefault();\n        }\n        var queryVals = [];\n        evt.currentTarget.querySelectorAll('input, select').forEach((input) => {\n          if (\n          (input.type !== 'checkbox' && input.type !== 'radio' || input.checked // is an active input value\n          ) && input.value !== '' // has a value\n          ) {\n            queryVals.push([input.name, encodeURIComponent(input.value)]);\n          }\n        });\n        // new url\n        var newUrl = location.pathname;\n        queryVals.forEach((value) => {\n          newUrl += \"&\".concat(value[0], \"=\").concat(value[1]);\n        });\n        newUrl = newUrl.replace('&', '?');\n        // load\n        this.functions.ajaxLoadUrl.call(this, newUrl);\n      },\n\n      ajaxPopState: function ajaxPopState(event) {\n        this.functions.ajaxLoadUrl.call(this, document.location.href, true);\n      },\n\n      ajaxLoadUrl: function ajaxLoadUrl(url, noPushState) {\n        if (!noPushState) {\n          // update url history\n          var fullUrl = url;\n          if (fullUrl.slice(0, 1) === '/') {\n            fullUrl = window.location.protocol + '//' + window.location.host + fullUrl;\n          }\n          window.history.pushState({ path: fullUrl }, '', fullUrl);\n        }\n\n        // limit render to section, if possible (added after pushState)\n        if (this.$container[0].dataset.filterSectionId) {\n          url += (url.indexOf('?') >= 0 ? '&' : '?') + \"section_id=\".concat(this.$container[0].dataset.filterSectionId);\n        }\n\n        // start fetching URL\n        var refreshContainerSelector = '[data-ajax-container]',\n          $ajaxContainers = this.$container.find(refreshContainerSelector);\n\n        // loading state\n        $ajaxContainers.addClass('ajax-loading');\n\n        // fetch content\n        if (this.currentAjaxLoadUrlFetch) {\n          this.currentAjaxLoadUrlFetch.abort();\n        }\n        this.currentAjaxLoadUrlFetch = $.get(url, function (data) {\n          this.currentAjaxLoadUrlFetch = null;\n\n          // save active element\n          if (document.activeElement) {\n            this.activeElementId = document.activeElement.id;\n          }\n\n          // unload content\n          theme.ProductBlockManager.unloadImages(this.$container);\n\n          // before replace - check if container scrolls, if so find item at scroll top\n          var scrollContainer = this.$container[0].querySelector('.filters'),\n            elAboveScrollTopData = null;\n          if (getComputedStyle(scrollContainer).overflow === 'auto') {\n            var allFilterChildren = scrollContainer.querySelectorAll('.filters *');\n            var elAboveScrollTop = allFilterChildren[0];\n            for (var i = 1; i < allFilterChildren.length; i++) {\n              if (allFilterChildren[i].offsetTop) {\n                // if above fold\n                if (allFilterChildren[i].offsetTop < scrollContainer.scrollTop) {\n                  // if below previously assigned element, assign\n                  if (allFilterChildren[i].offsetTop > elAboveScrollTop.offsetTop) {\n                    elAboveScrollTop = allFilterChildren[i];\n                  }\n                } else {\n                  break;\n                }\n              }\n            }\n            if (elAboveScrollTop.offsetTop === 0) {\n              elAboveScrollTop = false;\n            } else {\n              // determine how to identify this element\n              elAboveScrollTopData = {\n                selector: '',\n                textContent: elAboveScrollTop.textContent,\n                extraScrollOffset: scrollContainer.scrollTop - elAboveScrollTop.offsetTop\n              };\n              for (var attrName of elAboveScrollTop.getAttributeNames()) {\n                if (attrName === 'class') {\n                  Array.from(elAboveScrollTop.classList).filter((a) => a !== 'filter-group__item--disabled').forEach((cl) => {\n                    elAboveScrollTopData.selector += '.' + cl;\n                  });\n                } else {\n                  elAboveScrollTopData.selector += \"[\".concat(attrName, \"=\\\"\").concat(CSS.escape(elAboveScrollTop.getAttribute(attrName)), \"\\\"]\");\n                }\n              }\n            }\n          }\n\n          // replace contents\n          var $newAjaxContainers = $(\"<div>\".concat(data, \"</div>\")).find(refreshContainerSelector);\n          $newAjaxContainers.each(function (index) {\n            $($ajaxContainers[index]).html($(this).html());\n          });\n\n          // init js\n          this.functions.initFiltersEtc.call(this);\n\n          // after replace\n          if (elAboveScrollTopData) {\n            this.$container[0].querySelectorAll(elAboveScrollTopData.selector).forEach((el) => {\n              if (el.textContent === elAboveScrollTopData.textContent) {\n                scrollContainer.scrollTop = el.offsetTop + elAboveScrollTopData.extraScrollOffset;\n              }\n            });\n          }\n\n          // init theme components\n          var $componentHaver = this.$container.closest('[data-components]');\n          if ($componentHaver.length) {\n            var components = $componentHaver.data('components').split(',');\n            components.forEach(function (component) {\n              $(document).trigger('cc:component:load', [component, $componentHaver[0]]);\n            }.bind(this));\n          }\n\n          // remove loading state\n          $ajaxContainers.removeClass('ajax-loading');\n\n          // init scroll animations\n          theme.initAnimateOnScroll();\n\n          // restore active element\n          if (this.activeElementId) {\n            var el = document.getElementById(this.activeElementId);\n            if (el) {\n              el.focus();\n            }\n          }\n\n          // scroll viewport (must be done after any page size changes)\n          var scrollToY = $('[data-ajax-scroll-to]:first', this.$container).offset().top - $('.section-header').height();\n          window.scrollTo({\n            top: scrollToY,\n            behavior: \"smooth\"\n          });\n        }.bind(this));\n      }\n    };\n\n    // auto-select availability\n    this.allowAutoApplyHideUnavailable = this.$container.find('.filters').data('auto-apply-hide-unavailable');\n    if (this.allowAutoApplyHideUnavailable) {\n      this.$container.on('change' + this.namespace, '.filter-group__checkbox, .cc-price-range__input', (evt) => {\n        if (this.allowAutoApplyHideUnavailable) {\n          if (evt.currentTarget.type === 'checkbox' && evt.currentTarget.checked || evt.currentTarget.type === 'text' && evt.currentTarget.value) {\n            var toEnable = this.$container.find('[name=\"filter.v.availability\"][value=\"1\"]')[0];\n            if (toEnable) {\n              toEnable.checked = true;\n              toEnable.dispatchEvent(\n              new CustomEvent('change', { bubbles: true, cancelable: false }));\n\n            }\n          }\n        }\n      });\n\n      this.$container.on('change' + this.namespace, '.filter-group--availability .filter-toggle__input', (evt) => {\n        if (evt.currentTarget.checked && evt.currentTarget.value == '1') {\n          this.allowAutoApplyHideUnavailable = false;\n        }\n      });\n    }\n\n    // ajax filter & sort\n    if (this.$container.data('ajax-filtering')) {\n      // ajax load on link click\n      this.$container.on('click' + this.namespace, '.link-dropdown__link, .filter-group__applied-item, .filter-group__clear-link, .pagination a', this.functions.ajaxLoadLink.bind(this));\n      // ajax load form submission\n      this.$container.on('change' + this.namespace + ' submit' + this.namespace, '#CollectionFilterForm', theme.debounce(this.functions.ajaxLoadForm.bind(this), 700));\n      // handle back button\n      this.registerEventListener(window, 'popstate', this.functions.ajaxPopState.bind(this));\n    } else {\n      this.$container.on('change' + this.namespace, '#CollectionFilterForm', function () {\n        $(this).submit();\n      });\n    }\n\n    // sort dropdown: open\n    this.$container.on('click' + this.namespace, '.link-dropdown__button', theme.toggleLinkDropdownButton.bind(this));\n\n    // sort dropdown: click anywhere else in page to close\n    $(document).on('click' + this.namespace, function () {\n      $('.link-dropdown__button[aria-expanded=\"true\"]').trigger('click');\n    });\n\n    if (document.querySelector('.utility-bar')) {\n      // duplicate utility bar for mobile\n      var $utilBarClone = $('.utility-bar').clone().addClass('utility-bar--sticky-mobile-copy').removeAttr('data-ajax-container').insertAfter('.utility-bar');\n      // ensure unique ids\n      theme.suffixIds($utilBarClone[0], 'dupe');\n\n      this.previousScrollTop = window.scrollY;\n      $(window).on('throttled-scroll' + this.namespace, this.functions.checkStickyScroll.bind(this));\n\n      // filter visibility\n      this.$container.on('click' + this.namespace, '[data-toggle-filters]', function (evt) {\n        var isNowVisible = $('.filter-container', this.$container).toggleClass('filter-container--show-filters-desktop filter-container--show-filters-mobile').hasClass('filter-container--show-filters-desktop');\n        $('.toggle-btn[data-toggle-filters]', this.$container).toggleClass('toggle-btn--revealed-desktop', isNowVisible);\n        // handle resized collection grid\n        theme.ProductBlockManager.afterImagesResized();\n        $('.slick-slider', this.$container).each(function () {\n          $(this).slick('setPosition');\n        });\n        return false;\n      }.bind(this));\n\n      // layout switcher\n      this.$container.on('click' + this.namespace, '.layout-switch', this.functions.switchGridLayout.bind(this));\n    }\n\n    // init things that may need re-initialising on ajax load\n    this.functions.initFiltersEtc.call(this);\n\n    this.destroy = function () {\n      theme.ProductBlockManager.unloadImages(this.$container);\n      theme.destroyProductGallery(this.$container);\n      this.$container.off(this.namespace);\n      $(window).off(this.namespace);\n      $(document).off(this.namespace);\n    }.bind(this);\n  };\n\n  theme.buildGalleryViewer = function (config) {\n    // create viewer\n    var $allContainer = $('<div class=\"gallery-viewer gallery-viewer--pre-reveal\">'),\n      $zoomContainer = $('<div class=\"gallery-viewer__zoom-container\">').appendTo($allContainer),\n      $thumbContainer = $('<div class=\"gallery-viewer__thumbs\">').appendTo($allContainer),\n      $controlsContainer = $('<div class=\"gallery-viewer__controls\">').appendTo($allContainer),\n      $close = $('<a class=\"gallery-viewer__button gallery-viewer__close\" href=\"#\">').html(config.close).appendTo($controlsContainer),\n      $right = $('<a class=\"gallery-viewer__button gallery-viewer__prev\" href=\"#\">').html(config.prev).appendTo($controlsContainer),\n      $left = $('<a class=\"gallery-viewer__button gallery-viewer__next\" href=\"#\">').html(config.next).appendTo($controlsContainer),\n      $currentZoomImage = null,\n      wheelZoomMultiplier = -0.001,\n      pinchZoomMultiplier = 0.003,\n      touchPanModifier = 1.0,\n      currentTransform = {\n        panX: 0,\n        panY: 0,\n        zoom: 1\n      };\n\n    // add images\n    for (var i = 0; i < config.images.length; i++) {\n      var img = config.images[i];\n      $('<a class=\"gallery-viewer__thumb\" href=\"#\">').data('zoom-url', img.zoomUrl).\n      html(img.thumbTag).\n      appendTo($thumbContainer);\n    }\n\n    if (config.images.length === 1) {\n      $allContainer.addClass('gallery-viewer--single-image');\n    }\n\n    // helper function for panning an image\n    var panZoomImageFromCoordinate = function panZoomImageFromCoordinate(inputX, inputY) {\n      // do nothing if the image fits, pan if not\n      var doPanX = $currentZoomImage.width() > $allContainer.width();\n      var doPanY = $currentZoomImage.height() > $allContainer.height();\n      if (doPanX || doPanY) {\n        var midX = $allContainer.width() / 2;\n        var midY = $allContainer.height() / 2;\n\n        var offsetFromCentreX = inputX - midX,\n          offsetFromCentreY = inputY - midY;\n\n        // the offsetMultipler ensures it can only pan to the edge of the image, no further\n        var finalOffsetX = 0;\n        var finalOffsetY = 0;\n        if (doPanX) {\n          var offsetMultiplierX = ($currentZoomImage.width() - $allContainer.width()) / 2 / midX;\n          finalOffsetX = Math.round(-offsetFromCentreX * offsetMultiplierX);\n        }\n        if (doPanY) {\n          var offsetMultiplierY = ($currentZoomImage.height() - $allContainer.height()) / 2 / midY;\n          finalOffsetY = Math.round(-offsetFromCentreY * offsetMultiplierY);\n        }\n\n        currentTransform.panX = finalOffsetX;\n        currentTransform.panY = finalOffsetY;\n        alterCurrentPanBy(0, 0); // sanitise\n        updateImagePosition();\n      }\n    };\n\n    var alterCurrentPanBy = function alterCurrentPanBy(x, y) {\n      currentTransform.panX += x;\n      // limit offset to keep most of image on screen\n      var panXMax = ($currentZoomImage[0].naturalWidth * currentTransform.zoom - $allContainer.width()) / 2.0;\n      panXMax = Math.max(panXMax, 0);\n      currentTransform.panX = Math.min(currentTransform.panX, panXMax);\n      currentTransform.panX = Math.max(currentTransform.panX, -panXMax);\n\n      currentTransform.panY += y;\n      var panYMax = ($currentZoomImage[0].naturalHeight * currentTransform.zoom - $allContainer.height()) / 2.0;\n      panYMax = Math.max(panYMax, 0);\n      currentTransform.panY = Math.min(currentTransform.panY, panYMax);\n      currentTransform.panY = Math.max(currentTransform.panY, -panYMax);\n      updateImagePosition();\n    };\n\n    var setCurrentTransform = function setCurrentTransform(panX, panY, zoom) {\n      currentTransform.panX = panX;\n      currentTransform.panY = panY;\n      currentTransform.zoom = zoom;\n      alterCurrentTransformZoomBy(0);\n    };\n\n    var alterCurrentTransformZoomBy = function alterCurrentTransformZoomBy(delta) {\n      currentTransform.zoom += delta;\n      // do not zoom out further than fit\n      var maxZoomX = $allContainer.width() / $currentZoomImage[0].naturalWidth,\n        maxZoomY = $allContainer.height() / $currentZoomImage[0].naturalHeight;\n      currentTransform.zoom = Math.max(currentTransform.zoom, Math.min(maxZoomX, maxZoomY));\n\n      // do not zoom in further than native size\n      currentTransform.zoom = Math.min(currentTransform.zoom, 1.0);\n\n      // reasses pan bounds\n      alterCurrentPanBy(0, 0);\n      updateImagePosition();\n    };\n\n    var updateImagePosition = function updateImagePosition() {\n      $currentZoomImage.css(\n      'transform', \"translate3d(\".concat(currentTransform.panX, \"px, \").concat(currentTransform.panY, \"px, 0) scale(\").concat(currentTransform.zoom, \")\"));\n\n    };\n\n    // set up events\n    // event: select thumbnail - zoom it\n    $allContainer.on('click.galleryViewer select.galleryViewer', '.gallery-viewer__thumb', function (evt) {\n      evt.preventDefault();\n\n      // set active\n      $(this).addClass('gallery-viewer__thumb--active').\n      siblings('.gallery-viewer__thumb--active').\n      removeClass('gallery-viewer__thumb--active');\n\n      // replace zoom image\n      $zoomContainer.addClass('gallery-viewer__zoom-container--loading');\n      $currentZoomImage = $('<img class=\"gallery-viewer__zoom-image\" alt=\"\" style=\"visibility: hidden\">');\n      $currentZoomImage.on('load', function () {\n        $(this).parent().removeClass('gallery-viewer__zoom-container--loading');\n        $(this).off('load');\n        $(this).css({\n          visibility: '',\n          top: $allContainer.height() / 2 - $(this).height() / 2,\n          left: $allContainer.width() / 2 - $(this).width() / 2\n        });\n        setCurrentTransform(0, 0, 0); // centre, zoomed out\n      }).attr('src', $(this).data('zoom-url'));\n\n      $zoomContainer.html($currentZoomImage);\n    });\n\n    // event: pan\n    var pinchTracking = {\n      isTracking: false,\n      lastPinchDistance: 0\n    };\n    var touchTracking = {\n      isTracking: false,\n      lastTouchX: 0,\n      lastTouchY: 0\n    };\n\n    $allContainer.on('touchend.galleryViewer', function (evt) {\n      pinchTracking.isTracking = false;\n      touchTracking.isTracking = false;\n    });\n\n    $allContainer.on('mousemove.galleryViewer touchmove.galleryViewer', function (evt) {\n      evt.preventDefault();\n      if (evt.type === 'touchmove' && evt.touches.length > 0) {\n        // pan\n        var touch1 = evt.touches[0];\n        if (!touchTracking.isTracking) {\n          touchTracking.isTracking = true;\n          touchTracking.lastTouchX = touch1.clientX;\n          touchTracking.lastTouchY = touch1.clientY;\n        } else {\n          alterCurrentPanBy(\n          (touch1.clientX - touchTracking.lastTouchX) * touchPanModifier,\n          (touch1.clientY - touchTracking.lastTouchY) * touchPanModifier);\n\n          touchTracking.lastTouchX = touch1.clientX;\n          touchTracking.lastTouchY = touch1.clientY;\n        }\n\n        if (evt.touches.length === 2) {\n          // pinch\n          var touch2 = evt.touches[1],\n            pinchDistance = Math.sqrt(Math.pow(touch1.clientX - touch2.clientX, 2) + Math.pow(touch1.clientY - touch2.clientY, 2));\n          if (!pinchTracking.isTracking) {\n            pinchTracking.lastPinchDistance = pinchDistance;\n            pinchTracking.isTracking = true;\n          } else {\n            var pinchDelta = pinchDistance - pinchTracking.lastPinchDistance;\n            alterCurrentTransformZoomBy(pinchDelta * pinchZoomMultiplier);\n            pinchTracking.lastPinchDistance = pinchDistance;\n          }\n        } else {\n          pinchTracking.isTracking = false;\n        }\n      } else {\n        // mousemove\n        panZoomImageFromCoordinate(evt.clientX, evt.clientY);\n      }\n    });\n\n    // event: mousewheel\n    $allContainer.on('wheel.galleryViewer', function (evt) {\n      evt.preventDefault();\n      if (evt.originalEvent.deltaY != 0) {\n        alterCurrentTransformZoomBy(evt.originalEvent.deltaY * wheelZoomMultiplier);\n      }\n    });\n\n    // event: prevent pan while swiping thumbnails\n    $allContainer.on('touchmove.galleryViewer', '.gallery-viewer__thumbs', function (evt) {\n      evt.stopPropagation();\n    });\n\n    // event: next thumbnail\n    $allContainer.on('click.galleryViewer', '.gallery-viewer__next', function (evt) {\n      evt.preventDefault();\n      var $next = $thumbContainer.find('.gallery-viewer__thumb--active').next();\n      if ($next.length === 0) {\n        $next = $thumbContainer.find('.gallery-viewer__thumb:first');\n      }\n      $next.trigger('select');\n    });\n\n    // event: previous thumbnail\n    $allContainer.on('click.galleryViewer', '.gallery-viewer__prev', function (evt) {\n      evt.preventDefault();\n      var $prev = $thumbContainer.find('.gallery-viewer__thumb--active').prev();\n      if ($prev.length === 0) {\n        $prev = $thumbContainer.find('.gallery-viewer__thumb:last');\n      }\n      $prev.trigger('select');\n    });\n\n    // event: close (button)\n    $allContainer.on('click.galleryViewer', '.gallery-viewer__close', function (evt) {\n      evt.preventDefault();\n      theme.galleryViewerFunctions.close();\n    });\n\n    // event: close (esc key)\n    document.addEventListener('keyup', theme.galleryViewerFunctions.onDocumentKeyup);\n\n    // event: zoom\n    $allContainer.on('click.galleryViewer', '.gallery-viewer__zoom-container', function (evt) {\n      evt.preventDefault();\n      if (currentTransform.zoom == 1.0) {\n        currentTransform.zoom = 0;\n        alterCurrentTransformZoomBy(0);\n      } else {\n        currentTransform.zoom = 1;\n        alterCurrentTransformZoomBy(0);\n        panZoomImageFromCoordinate(evt.clientX, evt.clientY);\n      }\n    });\n\n    // initialise\n\n    // - clear any remnants of failed previous closure\n    $('html').removeClass('gallery-viewer-open');\n    $('.gallery-viewer').remove();\n\n    // - insert into page\n    $('html').addClass('gallery-viewer-open');\n    $allContainer.appendTo('body');\n\n    // - select first thumbnail\n    var currentIndex = 0;\n    if (config.currentImage) {\n      config.images.forEach((img, index) => {\n        if (config.currentImage === img.zoomUrl) {\n          currentIndex = index;\n        }\n      });\n    }\n\n    var $focusThumb = $thumbContainer.find('.gallery-viewer__thumb:eq(' + currentIndex + ')').trigger('select');\n\n    if (config.images.length > 1) {\n      $focusThumb.focus();\n    } else {\n      $close.focus();\n    }\n\n    // - reveal\n    setTimeout(function () {\n      $allContainer.removeClass('gallery-viewer--pre-reveal');\n    }, 10);\n  };\n\n  theme.galleryViewerFunctions = {\n    close: function close() {\n      var $galleryViewer = $('.gallery-viewer');\n\n      // destroy events\n      $galleryViewer.off('.galleryViewer');\n      document.removeEventListener('keyup', theme.galleryViewerFunctions.onDocumentKeyup);\n\n      // begin exit transition\n      $galleryViewer.addClass('gallery-viewer--transition-out');\n\n      // remove after transition\n      var transitionDelay = $galleryViewer.css('transition-duration');\n      transitionDelay = transitionDelay.indexOf('ms') > -1 ? parseFloat(transitionDelay) : parseFloat(transitionDelay) * 1000;\n      setTimeout(function () {\n        $galleryViewer.remove();\n        $('html').removeClass('gallery-viewer-open');\n      }, transitionDelay);\n    },\n\n    onDocumentKeyup: function onDocumentKeyup(evt) {\n      switch (evt.key) {\n        case 'Escape':\n          theme.galleryViewerFunctions.close();\n          break;\n        case 'ArrowLeft':\n          $('.gallery-viewer__prev').trigger('click');\n          break;\n        case 'ArrowRight':\n          $('.gallery-viewer__next').trigger('click');\n          break;}\n\n    }\n  };\n\n  theme.Navigation = {\n    init: function init(options) {\n      if (options.nav.length == 0) {\n        return;\n      }\n\n      var $nav = options.nav,\n        navHoverDelay = 250,\n        $navLastOpenDropdown = $(),\n        navOpenTimeoutId = -1;\n\n\n      /// Mobile nav\n\n      // create it\n      var $mobileDrawer = $(options.mobileNavHtml);\n\n      // add announcement bar items\n      var $mobileDrawerFooter = $('<div class=\"mobile-navigation-drawer__footer\">').appendTo($mobileDrawer);\n      $mobileDrawerFooter.append($('.announcement-bar .inline-menu').clone().removeClass('desktop-only'));\n      $mobileDrawerFooter.append($('.announcement-bar .header-disclosures').clone().removeClass('desktop-only'));\n\n      var mobileSocialLinks = $('.announcement-bar .social-links').clone().removeClass('desktop-only')[0];\n      var mobileSocialLinksCustomIconToSwap = document.querySelector('.announcement-bar .js-replacement-custom-icon');\n      if (mobileSocialLinksCustomIconToSwap) {\n        mobileSocialLinks.querySelector('.social-custom').parentElement.innerHTML = mobileSocialLinksCustomIconToSwap.content.firstElementChild.cloneNode(true).innerHTML;\n      }\n      $mobileDrawerFooter.append(mobileSocialLinks);\n\n      // ensure ids are unique\n      theme.suffixIds($mobileDrawer[0], 'MobileNav');\n\n      // insert into page\n      $mobileDrawer.insertAfter($('#shopify-section-header'));\n\n      // event: open second tier\n      $mobileDrawer.on('click', '.navigation__tier-1 > .navigation__item > .navigation__children-toggle', function (evt) {\n        evt.preventDefault();\n\n        // set text in header\n        $(this).parent().\n        addClass('navigation__item--open').\n        closest('.mobile-navigation-drawer').\n        addClass('mobile-navigation-drawer--child-open').\n        find('.mobile-nav-title').\n        text($(this).siblings('.navigation__link').text());\n\n        // position under header\n        $(this).siblings('.navigation__tier-2-container').css({\n          top: Math.ceil($('.navigation__mobile-header:last').height() + 1) + 'px'\n        });\n\n        // scroll container\n        this.closest('.mobile-navigation-drawer').scrollTo({ top: 0, left: 0, behavior: 'instant' }); // 'smooth' not working in iOS 15\n      });\n\n      if ($mobileDrawer.data('mobile-expand-with-entire-link')) {\n        $mobileDrawer.on('click', '.navigation__item--with-children > .navigation__link', function (evt) {\n          evt.preventDefault();\n          $(this).siblings('.navigation__children-toggle').trigger('click');\n        });\n      }\n\n      // event: close second tier\n      $mobileDrawer.on('click', '.mobile-nav-back', function (evt) {\n        evt.preventDefault();\n        $(this).closest('.mobile-navigation-drawer').\n        removeClass('mobile-navigation-drawer--child-open').\n        find('.navigation__tier-1 > .navigation__item--open').\n        removeClass('navigation__item--open');\n      });\n\n      // event: toggle third tier\n      $mobileDrawer.on('click', '.navigation__tier-2 > .navigation__item > .navigation__children-toggle', function (evt) {\n        evt.preventDefault();\n        var doOpen = !$(this).parent().hasClass('navigation__item--open');\n        if (doOpen) {\n          $(this).parent().addClass('navigation__item--open');\n          var $childContainer = $(this).siblings('.navigation__tier-3-container');\n          $childContainer.css('height', $childContainer.children().outerHeight());\n        } else {\n          $(this).parent().removeClass('navigation__item--open');\n          $(this).siblings('.navigation__tier-3-container').css('height', '');\n        }\n      });\n\n      /// Desktop nav\n\n      // reveal images\n      $nav.find('.lazyload--manual').removeClass('lazyload--manual').addClass('lazyload');\n\n      // hover events\n      $nav.on('mouseenter mouseleave', '.navigation__tier-1 > .navigation__item--with-children', function (evt, data) {\n        var $dropdownContainer = $(this);\n        // delay on hover-out\n        if (evt.type == 'mouseenter') {\n          clearTimeout(navOpenTimeoutId);\n          clearTimeout($dropdownContainer.data('navCloseTimeoutId'));\n          var $openSiblings = $dropdownContainer.siblings('.navigation__item--show-children');\n\n          // close all menus but last opened\n          $openSiblings.not($navLastOpenDropdown).removeClass('navigation__item--show-children');\n          $navLastOpenDropdown = $dropdownContainer;\n\n          // show after a delay, based on first-open or not\n          var timeoutDelay = $openSiblings.length == 0 ? 0 : navHoverDelay;\n\n          // open it\n          var newNavOpenTimeoutId = setTimeout(function () {\n            $dropdownContainer.addClass('navigation__item--show-children').\n            siblings('.navigation__item--show-children').\n            removeClass('navigation__item--show-children');\n            $dropdownContainer.closest('.section-header').addClass('section-header--nav-open');\n          }, timeoutDelay);\n\n          navOpenTimeoutId = newNavOpenTimeoutId;\n          $dropdownContainer.data('navOpenTimeoutId', newNavOpenTimeoutId);\n        } else {\n          // cancel opening, close after delay, and clear transforms\n          clearTimeout($dropdownContainer.data('navOpenTimeoutId'));\n          $dropdownContainer.data('navCloseTimeoutId', setTimeout(function () {\n            $dropdownContainer.removeClass('navigation__item--show-children');\n            $dropdownContainer.closest('.section-header').removeClass('section-header--nav-open');\n          }, navHoverDelay));\n        }\n        // a11y\n        $dropdownContainer.children('[aria-expanded]').attr('aria-expanded', evt.type == 'mouseenter');\n      });\n\n      // touch events on desktop\n      var touchHandler = function touchHandler(evt) {\n        if ($(window).width() > 767) {\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('navigation__item--show-children')) {\n                // trigger close\n                $(this).parent().trigger('mouseleave');\n              } else {\n                // trigger close on any open items\n                $('.navigation:first .navigation__item--show-children').trigger('mouseleave');\n                // trigger open\n                $(this).parent().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      $nav.on('touchstart touchend click', '.navigation__tier-1 > .navigation__item--with-children > .navigation__link', touchHandler);\n\n      // hit return on dropdown toggle\n      var keydownHandler = function keydownHandler(evt) {\n        if (evt.which == 13) {\n          var $parent = $(this).parent();\n          $parent.trigger($parent.hasClass('navigation__item--show-children') ? 'mouseleave' : 'mouseenter');\n          return false;\n        }\n      };\n      $nav.on('keydown', '.navigation__tier-1 > .navigation__item--with-children > .navigation__children-toggle', keydownHandler);\n\n      // proxy for desktop nav interaction events\n      if (options.proxyTier1Nav) {\n        // reposition small menu\n        $(options.proxyTier1Nav).on('mouseenter touchstart', '.navigation__item--with-small-menu', function (evt) {\n          var $dropdown = $($('.navigation__tier-1 > .navigation__item', $nav)[$(this).index()]).find('.navigation__tier-2-container');\n          if (document.querySelector('html[dir=rtl]')) {\n            $dropdown.css('right', $dropdown[0].offsetParent.clientWidth - ($(this).offset().left + this.clientWidth));\n          } else {\n            $dropdown.css('left', $(this).offset().left);\n          }\n        });\n\n        // transfer all events to main menu\n        $(options.proxyTier1Nav).on('mouseenter mouseleave', '.navigation__tier-1 > .navigation__item--with-children', function (evt) {\n          $($('.navigation__tier-1 > .navigation__item', $nav)[$(this).index()]).trigger(evt.type);\n        }).on('touchstart touchend click', '.navigation__tier-1 > .navigation__item--with-children > .navigation__link', function (evt) {\n          var response = touchHandler.call(\n          $($('.navigation__tier-1 > .navigation__item', $nav)[$(this).parent().index()]).children('.navigation__link')[0],\n          evt);\n\n          if (response === false) {\n            return false;\n          }\n        }).on('keydown', '.navigation__tier-1 > .navigation__item--with-children > .navigation__children-toggle', function (evt) {\n          if (evt.which == 13) {\n            keydownHandler.call(\n            $($('.navigation__tier-1 > .navigation__item', $nav)[$(this).parent().index()]).children('.navigation__children-toggle')[0],\n            evt);\n\n            return false;\n          }\n        });\n      }\n\n      // click #-link, open child nav\n      $nav.on('click', '.navigation__link[href=\"#\"][aria-haspopup=\"true\"]', function () {\n        $(this).siblings('.navigation__children-toggle').trigger('click');\n        return false;\n      });\n\n      // transparent header hover\n      $nav[0].addEventListener('mouseenter', theme.Navigation.onNavHover);\n      $nav[0].addEventListener('mouseleave', theme.Navigation.onNavHover);\n      if (options.proxyTier1Nav.length) {\n        options.proxyTier1Nav[0].addEventListener('mouseenter', theme.Navigation.onNavHover);\n        options.proxyTier1Nav[0].addEventListener('mouseleave', theme.Navigation.onNavHover);\n      }\n    },\n\n    onNavHover: function onNavHover(evt) {\n      $(evt.target).closest('.section-header').toggleClass('section-header--nav-hover', evt.type === 'mouseenter');\n    },\n\n    destroy: function destroy($nav, $proxyTier1Nav) {\n      $nav.add($proxyTier1Nav).off('click mouseenter mouseleave touchstart touchend keydown');\n      theme.ProductBlockManager.unloadImages($('.mobile-navigation-drawer .product-list'));\n      $('.mobile-navigation-drawer').off('click').remove();\n    }\n  };\n\n  // container must be an element higher up the tree than the gallery\n  theme.initProductGallery = function (container) {\n    var $gallery = $('.gallery', container);\n    if ($gallery.hasClass('gallery-initialised')) {\n      return;\n    }\n\n    $gallery.addClass('gallery-initialised');\n\n    /// Variant grouping\n    if ($gallery.data('variant-image-grouping') && $gallery.data('variant-image-grouping-option-index') !== '') {\n      var productData = theme.OptionManager.getProductData($gallery.closest('.product-detail').find('.product-form')),\n        groupingOptionIndex = $gallery.data('variant-image-grouping-option-index');\n      // build map of grouping options and featured media\n      var optionNameMediaMap = {};\n      productData.media.forEach((media) => {\n        productData.variants.forEach((variant) => {\n          if (variant.featured_media && variant.featured_media.id == media.id) {\n            if (!optionNameMediaMap[variant.options[groupingOptionIndex]]) {\n              optionNameMediaMap[variant.options[groupingOptionIndex]] = media.id;\n            }\n          }\n        });\n      });\n      // set option name on each image\n      var currentMediaOptionName = '';\n      $gallery.find('.slide').each(function (index, item) {\n        for (var optionName in optionNameMediaMap) {\n          if ($(item).data('media-id') == optionNameMediaMap[optionName]) {\n            currentMediaOptionName = optionName;\n          }\n        }\n        $(item).attr('data-variant-image-group', currentMediaOptionName);\n      });\n      currentMediaOptionName = '';\n      $gallery.find('.thumbnail').each(function (index, item) {\n        for (var optionName in optionNameMediaMap) {\n          if ($(item).data('media-id') == optionNameMediaMap[optionName]) {\n            currentMediaOptionName = optionName;\n          }\n        }\n        $(item).attr('data-variant-image-group', currentMediaOptionName);\n      });\n    }\n\n    /// Init main image slideshow\n    var $slideshow = $('.product-slideshow', container);\n    if ($slideshow.length) {\n      var slickConfig = {\n        autoplay: false,\n        fade: false,\n        infinite: false,\n        useTransform: true,\n        dots: false,\n        arrows: false,\n        waitForAnimate: false,\n        appendArrows: $slideshow.siblings('.slideshow-controls').find('.slideshow-controls__arrows'),\n        prevArrow: '<button type=\"button\" class=\"slick-product-prev\" aria-label=\"' + theme.strings.previous + '\">' + theme.icons.chevronLeft + '</button>',\n        nextArrow: '<button type=\"button\" class=\"slick-product-next\" aria-label=\"' + theme.strings.next + '\">' + theme.icons.chevronRight + '</button>',\n        mobileFirst: true,\n        rtl: document.querySelector('html[dir=rtl]') ? true : false,\n        responsive: [\n        {\n          breakpoint: 768,\n          settings: {\n            fade: true,\n            arrows: true\n          }\n        }]\n\n      };\n\n      $slideshow.on('init', function (evt, slick) {\n        $('.lazyload--manual', this).removeClass('lazyload--manual').addClass('lazyload');\n      }).on('beforeChange', function (evt, slick, current, next) {\n        var mediaId = $(slick.$slides[next]).data('media-id');\n        $($(this).closest('.gallery').find('.thumbnails:not(.hidden) .thumbnail[data-media-id=\"' + mediaId + '\"]')).trigger('selectFromSlick');\n      });\n\n      if ($slideshow.closest('.gallery--layout-carousel-beside, .gallery--layout-carousel-under').length) {\n        // carousel layout - slideshow all the time\n        $slideshow.slick(slickConfig);\n      } else {\n        // collage layout - slideshow on mobile only\n        var enforceMobileSlideshow = function enforceMobileSlideshow() {\n          if ($(window).width() < 768) {\n            $slideshow.not('.slick-slider').each(function () {\n              // remove desktop collage filter classes\n              $(this).find('.slide--inactive-option').removeClass('slide--inactive-option');\n              // init slideshow\n              $(this).slick(slickConfig);\n              // trigger variant select\n              $(this).closest('.product-detail').find('.original-selector').trigger('change');\n            });\n          } else {\n            $slideshow.filter('.slick-slider').each(function () {\n              $(this).slick('slickUnfilter').slick('unslick');\n              // trigger variant select\n              $(this).closest('.product-detail').find('.original-selector').trigger('change');\n            });\n          }\n        };\n        enforceMobileSlideshow();\n        $(window).on('debouncedresize.productGallery', enforceMobileSlideshow);\n      }\n\n      // media initialisation\n      theme.ProductMedia.init($gallery, {\n        onYoutubeInit: function onYoutubeInit(playerObj) {\n          if ($slideshow.hasClass('slick-slider')) {\n            theme.productGallerySlideshowTabFix($slideshow.slick('getSlick').$slides, $slideshow.slick('getSlick').currentSlide);\n          }\n        },\n        onModelViewerInit: function onModelViewerInit(element) {\n          if ($slideshow.hasClass('slick-slider')) {\n            theme.productGallerySlideshowTabFix($slideshow.slick('getSlick').$slides, $slideshow.slick('getSlick').currentSlide);\n          }\n        },\n        onVideoVisible: function onVideoVisible(e) {\n          if ($(window).width() >= 768) {\n            $(e.target).closest('.slick-slider').slick('slickSetOption', 'swipe', false);\n          }\n        },\n        onModelViewerPlay: function onModelViewerPlay(e) {\n          // prevent swiping\n          $(e.target).closest('.slick-slider').slick('slickSetOption', 'swipe', false);\n          // prevent left/right key control\n          $(e.target).closest('.slick-slider').slick('slickSetOption', 'accessibility', false);\n        },\n        onModelViewerPause: function onModelViewerPause(e) {\n          $(e.target).closest('.slick-slider').slick('slickSetOption', 'swipe', true);\n          $(e.target).closest('.slick-slider').slick('slickSetOption', 'accessibility', true);\n        }\n      });\n\n      // fix tabindex for first slide\n      if ($slideshow.hasClass('slick-slider')) {\n        theme.productGallerySlideshowTabFix($slideshow.slick('getSlick').$slides, $slideshow.slick('getSlick').currentSlide);\n      }\n\n      $slideshow.on('afterChange', function (evt, slick, current) {\n        // reset playing media\n        theme.pauseAllMedia();\n        if ($(window).width() >= 768) {\n          slick.slickSetOption('swipe', true);\n        }\n        // notify media of visibility\n        $('.product-media', slick.$slides[current]).trigger('mediaVisible');\n        // slideshow tab fix\n        theme.productGallerySlideshowTabFix(slick.$slides, current);\n      });\n    }\n\n    var $thumbnails = $('.thumbnails:not(.hidden)', container);\n    if ($thumbnails.length) {\n      var carouselVisibleItemCount = 6,\n        isCarousel = false;\n\n      /// Screen-width based initialisation of thumbnail carousels\n      var assessCarousel = function assessCarousel() {\n        if ($thumbnails.parent().css('display') == 'flex') {\n          // thumbnail container is in column beside main image - destroy carousel\n          if (isCarousel) {\n            isCarousel = false;\n\n            theme.beforeCarouselUnloadEventBlockFix($thumbnails);\n            $thumbnails.removeClass('owl-carousel').\n            data('owl.carousel').\n            destroy();\n\n            // trigger variant image grouping\n            $gallery.closest('.product-detail').find('.original-selector').trigger('change');\n          }\n        } else {\n          // thumbnails underneath - init carousel\n          if (!isCarousel) {\n            isCarousel = true;\n\n            // fix for event propagation in nested owl carousels\n            theme.beforeCarouselLoadEventBlockFix($thumbnails);\n\n            // reset any image grouping modifications\n            $thumbnails.find('.thumbnail').show();\n            $gallery.find('.hidden-thumbnails').children().appendTo($thumbnails);\n\n            $thumbnails.addClass('owl-carousel').on('initialized.owl.carousel', function () {\n              $('.lazyload--manual', this).removeClass('lazyload--manual').addClass('lazyload');\n            }).owlCarousel({\n              items: carouselVisibleItemCount,\n              dots: false,\n              margin: 7,\n              rtl: document.querySelector('html[dir=rtl]') ? true : false\n            });\n\n            // trigger variant image grouping\n            $gallery.closest('.product-detail').find('.original-selector').trigger('change');\n          }\n        }\n      };\n\n      $(window).on('debouncedresize.productGallery', assessCarousel);\n      assessCarousel();\n      $(container).data('assessCarouselCallback', assessCarousel);\n\n\n      /// Thumbnail click - in carousel\n      // Events:\n      // click: click on a thumbnail\n      // select: selection via variant image\n      // selectFromSlick: change of main image\n      //\n      // 'selectFromSlick' is treated as the 'primary' driver of state change, select/click to just update the main image slideshow,\n      // and an after-transition callback updates the thumbnail\n      $('.gallery', container).on('click select selectFromSlick', '.thumbnails.owl-carousel .thumbnail', function (e) {\n        e.preventDefault();\n        var $carouselItem = $(this).parent();\n        if (e.type != 'selectFromSlick') {\n          // from click or variant image? change main image\n          var mediaId = $(this).data('media-id');\n          var _$slideshow = $(this).closest('.gallery').find('.slideshow.slick-slider');\n          if (_$slideshow) {\n            var index = _$slideshow.find('.slide[data-media-id=\"' + mediaId + '\"]').index(); // current index including filters\n            // same index? manual trigger of next event\n            var slick = _$slideshow.slick('getSlick');\n            if (slick.currentSlide === index) {\n              // current slide active, manually trigger from-slick thumb selection (req. for index changes during filtering)\n              $(this).trigger('selectFromSlick');\n            } else {\n              // change slide\n              _$slideshow.slick('slickGoTo', index);\n            }\n          }\n        } else {\n          // change to active state comes from the main slideshow change event\n          // show the highlight\n          $(this).addClass('selected').parent().siblings().find('a').removeClass('selected');\n\n          // adjust thumbnail carousel if not on-screen\n          var shelfStart = $carouselItem.parent().children('.active:first').index();\n          var shelfEnd = shelfStart + carouselVisibleItemCount - 1;\n          var currentIndex = $carouselItem.index();\n\n          if (currentIndex < shelfStart) {\n            // selected is to left of shelf - move carousel right to show\n            $carouselItem.closest('.owl-carousel').trigger('to.owl.carousel', currentIndex);\n          } else if (currentIndex > shelfEnd) {\n            // selected is to right of shelf - move carousel left to show\n            $carouselItem.closest('.owl-carousel').trigger('to.owl.carousel', Math.max(0, currentIndex - carouselVisibleItemCount + 1));\n          }\n        }\n      });\n\n      /// Thumbnail click - beside\n      // Uses same event structure as the events above ^\n      $('.gallery', container).on('click select selectFromSlick', ' .thumbnails:not(.owl-carousel) .thumbnail', function (e) {\n        e.preventDefault();\n        if (e.type != 'selectFromSlick') {\n          // from click or variant image? change main image\n          var index = 0;\n          var mediaId = $(this).data('media-id');\n          $(this).parent().children(':visible').each(function (iter) {\n            index = iter;\n            if ($(this).data('media-id') == mediaId) {\n              return false;\n            }\n          });\n          // same index? manual trigger of next event\n          var _$slideshow2 = $(this).closest('.gallery').find('.slideshow');\n          var slick = _$slideshow2.slick('getSlick');\n          if (slick.currentSlide === index) {\n            // current slide active, manually trigger from-slick thumb selection (req. for index changes during filtering)\n            $(this).trigger('selectFromSlick');\n          } else {\n            // change slide\n            _$slideshow2.slick('slickGoTo', index);\n          }\n        } else {\n          // change to active state comes from the main slideshow change event\n          $(this).addClass('selected').siblings('.selected').removeClass('selected');\n        }\n      });\n    }\n  };\n\n  theme.destroyProductGallery = function (container) {\n    $(window).off('.productGallery');\n    var $gallery = $('.gallery', container).off('click select selectFromSlick');\n    theme.ProductMedia.destroy($gallery);\n    $('.slick-slider', container).slick('unslick').off('init beforeChange afterChange');\n    $('.owl-carousel', container).each(function () {\n      theme.beforeCarouselUnloadEventBlockFix(this);\n      $(this).data('owl.carousel').destroy();\n    });\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   * });\n   *\n   * theme.ProductMedia.destroy(galleryContainer);\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\n      window.ShopifyXR.addModels(JSON.parse($(this).html()));\n      window.ShopifyXR.setupXRElements();\n    };\n\n    this.init = function (container, callbacks) {\n      var callbacks = callbacks || {},\n        _container = container;\n\n      // set up video media elements with a controller\n      $(container).find('.product-media--video').each(function (index) {\n        var poster = this.querySelector('.product-media__poster');\n        $('.product-media__video-play-btn', poster).on('click', function () {\n          $(this).closest('.product-media--video').data('player').play();\n        });\n\n        var playerObj = { container: this, poster: poster };\n        playerObj.play = function () {\n          // pause anything else\n          theme.pauseAllMedia();\n\n          // hide poster\n          this.poster.classList.add('product-media__poster--hide');\n          $(this).closest('.slick-slider').slick('setPosition');\n\n          // play\n          this.container.querySelectorAll('.js-youtube').forEach((video) => {\n            video.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n          });\n          this.container.querySelectorAll('.js-vimeo').forEach((video) => {\n            video.contentWindow.postMessage('{\"method\":\"play\"}', '*');\n          });\n          this.container.querySelectorAll('video').forEach((video) => video.play());\n        }.bind(playerObj);\n\n        // instantiate videos\n        var template = this.querySelector('.product-media__video-template');\n        if (template) {\n          this.insertAdjacentHTML('beforeend', template.innerHTML);\n          this.removeChild(template);\n          this.style.paddingBottom = 100 / this.querySelector('video, iframe').getAttribute('aspect-ratio') + '%';\n        }\n\n        $(this).data('player', playerObj).addClass('product-media--video-loaded');\n      });\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      // necessary callbacks\n      if (callbacks.onVideoVisible) {\n        $(container).on('mediaVisible', '.product-media--video-loaded', callbacks.onVideoVisible);\n      }\n\n      $('model-viewer', container).each(function () {\n        if (callbacks.onModelViewerPlay) {\n          $(this).on('shopify_model_viewer_ui_toggle_play', callbacks.onModelViewerPlay);\n        }\n        if (callbacks.onModelViewerPause) {\n          $(this).on('shopify_model_viewer_ui_toggle_pause', callbacks.onModelViewerPause);\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)', function (e) {\n        var element = $(this).find('model-viewer')[0],\n          autoplay = e.type != 'mediaVisibleInitial';\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            // set class and re-trigger visible event now loaded\n            $(this).addClass('product-media--model-loaded');\n            if (callbacks.onModelViewerInit) {\n              callbacks.onModelViewerInit(element);\n            }\n            if (autoplay) {\n              $(this).trigger('mediaVisible');\n            }\n          }.bind(this)\n        }]);\n\n      });\n\n      // 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\n      // pause other media when a 3d model is launched in AR\n      $(document).on('shopify_xr_launch', function () {\n        theme.pauseAllMedia({ videos: true });\n      });\n\n      // 3d model in first place - start in paused mode\n      setTimeout(function () {\n        $('.product-slideshow.slick-slider .product-media:first', this).filter('.product-media--model').trigger('mediaVisibleInitial');\n        $('.product-slideshow:not(.slick-slider) .product-media--model', this).trigger('mediaVisibleInitial');\n      }.bind(container), 50);\n    };\n\n    this.destroy = function (container) {\n      $(document).off('shopify_xr_launch');\n      $(container).off('mediaVisible mediaVisibleInitial');\n      $('.product-media--model-loaded', container).each(function () {\n        $(this).data('player').destroy();\n      });\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    };\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  // Manage option dropdowns\n  theme.productData = {};\n  theme.OptionManager = new function () {\n    var _ = this;\n\n    _._getVariantOptionElement = function (variant, $container) {\n      return $container.find('select[name=\"id\"] option[value=\"' + (variant ? variant.id : '') + '\"]');\n    };\n\n    _.selectors = {\n      container: '.product-detail',\n      gallery: '.gallery',\n      priceArea: '.price-area',\n      variantIdInputs: '[name=\"id\"]',\n      purchaseForm: '.product-purchase-form',\n      primaryVariantIdInput: '.product-purchase-form [name=\"id\"]',\n      submitButton: '.product-purchase-form button[type=\"submit\"]',\n      multiOption: '.option-selectors',\n      customOption: '.custom-option',\n      installmentsFormSuffix: '-installments'\n    };\n\n    _.strings = {\n      buttonDefault: theme.strings.products_product_add_to_cart,\n      buttonNoStock: theme.strings.products_variant_no_stock,\n      buttonNoVariant: theme.strings.products_variant_non_existent\n    };\n\n    _.getProductData = function ($form) {\n      var productId = $form.data('product-id');\n      var data = null;\n      if (!theme.productData[productId]) {\n        theme.productData[productId] = JSON.parse(document.getElementById('ProductJson-' + productId).innerHTML);\n      }\n      data = theme.productData[productId];\n      if (!data) {\n        console.log('Product data missing (id: ' + $form.data('product-id') + ')');\n      }\n      return data;\n    };\n\n    _.getVariantFromId = function ($productForm, id) {\n      var variants = this.getProductData($productForm).variants;\n      for (var i = 0; i < variants.length; i++) {\n        if (variants[i].id == id) {\n          return variants[i];\n        }\n      }\n      return { available: false };\n    };\n\n    _.getCurrentVariantData = function ($productForm) {\n      return _.getVariantFromId($productForm, $productForm.find(_.selectors.primaryVariantIdInput).val());\n    };\n\n    _.getBaseUnit = function (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    _.addVariantUrlToHistory = function (variant) {\n      if (variant) {\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    _.updateSku = function (variant, $container) {\n      $container.find('.sku .sku__value').html(variant ? variant.sku : '');\n      $container.find('.sku').toggleClass('sku--no-sku', !variant || !variant.sku);\n    };\n\n    _.updateBarcode = function (variant, $container) {\n      $container.find('.barcode .barcode__value').html(variant ? variant.barcode : '');\n      $container.find('.barcode').toggleClass('barcode--no-barcode', !variant || !variant.barcode);\n    };\n\n    _.updateTransferNotice = function (variant, $container) {\n      var transferData = _._getVariantOptionElement(variant, $container).data('inventory-transfer');\n      if (transferData) {\n        $container.find('.product-inventory-transfer').removeClass('product-inventory-transfer--none').html(transferData);\n      } else {\n        $container.find('.product-inventory-transfer').addClass('product-inventory-transfer--none').empty();\n      }\n    };\n\n    _.updateVariantDeterminedVisibilityAreas = function (variant, $container) {\n      $container.find('.variant-visibility-area').each(function () {\n        $(this).children(':not(script)').remove();\n        if (variant) {\n          $(this).append($(this).children('script[data-variant-id=\"' + variant.id + '\"]').html());\n        } else {\n          $(this).append($(this).children('script[data-variant-id=\"\"]').html());\n        }\n      });\n    };\n\n    _.updateBackorder = function (variant, $container) {\n      var $backorder = $container.find('.backorder');\n      if ($backorder.length) {\n        if (variant && variant.available) {\n          if (variant.inventory_management && _._getVariantOptionElement(variant, $container).data('stock') == 'out') {\n            var productData = _.getProductData($backorder.closest('.product-form'));\n            $backorder.find('.backorder__variant').text(productData.title + (variant.title.indexOf('Default') >= 0 ? '' : ' - ' + variant.title));\n            $backorder.show();\n          } else {\n            $backorder.hide();\n          }\n        } else {\n          $backorder.hide();\n        }\n      }\n    };\n\n    _._updateButtonText = function ($button, string, variant) {\n      $button.each(function () {\n        var newVal;\n        newVal = _.strings['button' + string];\n        if (newVal !== false) {\n          if ($(this).is('input')) {\n            $(this).val(newVal);\n          } else {\n            $(this).html(newVal);\n          }\n        }\n      });\n    };\n\n    _.updateButtons = function (variant, $container) {\n      var $button = $container.find(_.selectors.submitButton);\n\n      if (variant) {\n        $button.removeAttr('disabled').removeClass('button--sold-out');\n        if (variant.available == true) {\n          _._updateButtonText($button, 'Default', variant);\n        } else {\n          $button.addClass('button--sold-out');\n          _._updateButtonText($button, 'NoStock', variant);\n        }\n      } else {\n        var productData = _.getProductData($button.closest('.product-form'));\n        if (!productData.available) {\n          $button.addClass('button--sold-out');\n          _._updateButtonText($button, 'NoStock', variant);\n        } else if (theme.getEmptyOptionSelectors($container).length) {\n          $button.removeAttr('disabled');\n          _._updateButtonText($button, 'Default', variant);\n        } else {\n          $button.attr('disabled', 'disabled');\n          _._updateButtonText($button, 'NoVariant', variant);\n        }\n      }\n    };\n\n    _.updateContainerStatusClasses = function (variant, $container) {\n      $container.toggleClass('variant-status--not-selected', !variant);\n      $container.toggleClass('variant-status--unavailable', variant && !variant.available);\n      $container.toggleClass('variant-status--backorder', variant &&\n      variant.available &&\n      variant.inventory_management &&\n      _._getVariantOptionElement(variant, $container).data('stock') == 'out');\n      $container.toggleClass('variant-status--on-sale', variant &&\n      variant.available &&\n      variant.compare_at_price > variant.price);\n    };\n\n    _.initProductOptions = function ($productForm) {\n      if ($productForm.hasClass('theme-init')) return;\n\n      var productData = _.getProductData($productForm);\n      $productForm.addClass('theme-init');\n\n      // init option selectors\n      $productForm.find(_.selectors.multiOption).on('change.themeProductOptions', function () {\n        var selectedOptions = [];\n        $(this).find('.option-selector').each(function () {\n          if ($(this).data('selector-type') === 'listed') {\n            selectedOptions.push($(this).find('.js-option:checked').val());\n          } else {\n            selectedOptions.push($(this).find('.js-option[aria-selected=\"true\"]').data('value'));\n          }\n        });\n\n        // find variant\n        var variant = false;\n        for (var i = 0; i < productData.variants.length; i++) {\n          var v = productData.variants[i];\n          var matchCount = 0;\n          for (var j = 0; j < selectedOptions.length; j++) {\n            if (v.options[j] == selectedOptions[j]) {\n              matchCount++;\n            }\n          }\n          if (matchCount == selectedOptions.length) {\n            variant = v;\n            break;\n          }\n        }\n\n        // trigger change\n        $productForm.find(_.selectors.variantIdInputs).val(variant.id);\n\n        // a jQuery event may not be picked up by all listeners\n        $productForm.find(_.selectors.variantIdInputs).each(function () {\n          this.dispatchEvent(\n          new CustomEvent('change', { bubbles: true, cancelable: false, detail: { variant: variant, selectedOptions: selectedOptions } }));\n\n        });\n      });\n\n      // init custom options (mirror in purchase form for Buy Now button)\n      $productForm.find(_.selectors.customOption).each(function () {\n        var $input = $(this).find('input:first, textarea, select');\n        $('<input type=\"hidden\">').attr({\n          name: $input.attr('name'),\n          value: $input.val()\n        }).appendTo($productForm.find(_.selectors.purchaseForm));\n      }).on('change.themeProductOptions', function () {\n        var $radios = $(this).find('input[type=\"radio\"]'),\n          $checkbox = $(this).find('input[type=\"checkbox\"]');\n        if ($radios.length) {\n          // radio buttons\n          $productForm.find(_.selectors.purchaseForm + ' input').filter(function () {\n            return this.name === $radios[0].name;\n          }).val($radios.filter(':checked').val()).trigger('change');\n        } else if ($checkbox.length) {\n          // checkbox\n          var val = null;\n          if ($checkbox.is(':checked')) {\n            val = $checkbox.val();\n          } else {\n            val = $checkbox.siblings('[type=\"hidden\"]').val();\n          }\n          $productForm.find(_.selectors.purchaseForm + ' input').filter(function () {\n            return this.name === $checkbox[0].name;\n          }).val(val).trigger('change');\n        } else {\n          // other inputs\n          var $input = $(this).find('select, input, textarea');\n          $productForm.find(_.selectors.purchaseForm + ' input').filter(function () {\n            return this.name === $input.attr('name');\n          }).val($input.val()).trigger('change');\n        }\n      });\n\n      // init variant ids\n      $productForm.find(_.selectors.primaryVariantIdInput).each(function () {\n        // change state for original dropdown\n        $(this).on('change.themeProductOptions firstrun.themeProductOptions', function (e) {\n          if ($(this).is('input[type=radio]:not(:checked)')) {\n            return; // handle radios - only update for checked\n          }\n          // If variant is passed in, use that. Even if 'false'. If nothing is passed, find from input value.\n          var variant = e.detail ? e.detail.variant : null;\n          if (!variant && variant !== false) {\n            for (var i = 0; i < productData.variants.length; i++) {\n              if (productData.variants[i].id == $(this).val()) {\n                variant = productData.variants[i];\n              }\n            }\n          }\n          var $container = $(this).closest(_.selectors.container);\n\n          // string overrides\n          var $addToCart = $container.find(_.selectors.submitButton).filter('[data-add-to-cart-text]');\n          if ($addToCart.length) {\n            _.strings.buttonDefault = $addToCart.data('add-to-cart-text');\n          }\n\n          // update buttons\n          _.updateButtons(variant, $container);\n\n          // emit an event to broadcast the variant update\n          $(window).trigger('cc-variant-updated', {\n            variant: variant,\n            product: productData\n          });\n\n          // variant images\n          if (variant && variant.featured_media) {\n            // variant passed\n            $container.find(_.selectors.gallery).trigger('variantImageSelected', [variant, e.type === 'firstrun']);\n          } else if (e.detail && e.detail.selectedOptions) {\n            // if some options selected, find the first matching variant for image\n            var matchesRequired = e.detail.selectedOptions.filter((o) => o && o.length > 0).length;\n            if (matchesRequired > 0) {\n              for (var i = 0; i < productData.variants.length; i++) {\n                var v = productData.variants[i];\n                var matchCount = 0;\n                for (var j = 0; j < e.detail.selectedOptions.length; j++) {\n                  if (v.options[j] == e.detail.selectedOptions[j]) {\n                    matchCount++;\n                  }\n                }\n                if (matchCount == matchesRequired && v.featured_media) {\n                  $container.find(_.selectors.gallery).trigger('variantImageSelected', [v, e.type === 'firstrun']);\n                  break;\n                }\n              }\n            }\n          }\n\n          // extra details\n          _.updateBarcode(variant, $container);\n          _.updateSku(variant, $container);\n          _.updateTransferNotice(variant, $container);\n          _.updateVariantDeterminedVisibilityAreas(variant, $container);\n          _.updateBackorder(variant, $container);\n          _.updateContainerStatusClasses(variant, $container);\n\n          // variant urls\n          if ($productForm.data('enable-history-state') && e.type == 'change') {\n            _.addVariantUrlToHistory(variant);\n          }\n\n          // allow other things to hook on\n          $productForm.trigger('variantChanged', [variant, productData]);\n        });\n\n        // first-run\n        $(this).trigger('firstrun');\n      });\n\n      // ajax\n      theme.applyAjaxToProductForm($productForm);\n\n      // apply URL params\n      var searchParams = new URLSearchParams(location.search);var _loop3 = function _loop3(key)\n      {\n        $productForm.find('.option-selector').filter(function () {\n          return this.querySelector('.label').firstChild.textContent === key;\n        }).each(function () {\n          var value = searchParams.get(key);\n          if (this.dataset.selectorType == 'dropdown') {\n            this.querySelector('.cc-select').dispatchEvent(\n            new CustomEvent('selectOption', { detail: { value: value } }));\n\n          } else {\n            this.querySelectorAll('.opt-label__text').forEach((el) => {\n              if (el.innerText == value) {\n                var input = document.getElementById(el.parentElement.getAttribute('for'));\n                if (input) {\n                  input.checked = true;\n                  input.dispatchEvent(\n                  new CustomEvent('change', { bubbles: true, cancelable: false }));\n\n                }\n              }\n            });\n          }\n        });\n      };for (var key of searchParams.keys()) {_loop3(key);}\n    };\n\n    _.unloadProductOptions = function ($productForm) {\n      $productForm.removeClass('theme-init').each(function () {\n        $(this).trigger('unloading').off('.themeProductOptions');\n        $(this).find(_.selectors.multiOption).off('.themeProductOptions');\n        $(this).find(_.selectors.customOption).off('.themeProductOptions');\n        theme.removeAjaxFromProductForm($productForm);\n      });\n    };\n  }();\n\n  theme.loadQuickbuy = function () {\n    // utility function for quickbuy (closes all quickbuys in passed blocks, in a collection grid)\n    function contractDetail($blocks, speed) {\n      if ($blocks.length > 0) {\n        $blocks.removeClass('expanded');\n        $blocks.find('.quickbuy-container').stop().animate({ height: 0 }, speed, function () {\n          $(this).find('.inner').empty();\n        });\n        $blocks.stop().each(function () {\n          $(this).animate({ paddingBottom: 0 }, speed);\n        });\n      }\n    }\n\n    // handle components\n    function loadComponents(componentContainer) {\n      $(componentContainer).closest('[data-components]').each(function () {\n        $(this).data('components').split(',').forEach((component) => {\n          $(document).trigger('cc:component:load', [component, componentContainer]);\n        });\n      });\n\n      $(document).trigger('cc:component:load', ['custom-select', '.quickbuy-container']);\n    }\n\n    function unloadComponents(componentContainer) {\n      $(componentContainer).find('.cc-accordion').off('.qbLoadComponents');\n      $(componentContainer).closest('[data-components]').each(function () {\n        $(this).data('components').split(',').forEach((component) => {\n          $(document).trigger('cc:component:unload', [component, componentContainer]);\n        });\n      });\n    }\n\n    var debouncedQuickbuyResizeTimeoutID = -1;\n    function debouncedQuickbuyResize(qbInner) {\n      clearTimeout(debouncedQuickbuyResizeTimeoutID);\n      debouncedQuickbuyResizeTimeoutID = setTimeout(() => {\n        var qbc = qbInner.closest('.quickbuy-container'),\n          block = qbc.closest('.product-block');\n        if (block) {\n          // use padding in grid\n          // also check expanded class in case it's mid close transition\n          if (block.classList.contains('expanded')) {\n            var targetHeight = $(qbInner).outerHeight(),\n              expandedSiblings = [...block.parentNode.children].filter((child) => {return child !== block && child.classList.contains('expanded');}),\n              speed = expandedSiblings.length > 0 ? 0 : droppyDownAnimSpeed; // slide down instantly if a neighbour is expanded\n\n            $(block).stop().animate({\n              paddingBottom: targetHeight + 20\n            }, speed); // extra for gap underneath\n            $(qbc).stop().animate({ height: targetHeight }, speed);\n          }\n        } else {\n          // use height in carousel\n          // - if not empty (e.g. post-close tidy-up)\n          if (qbInner.childElementCount > 0) {\n            $(qbc).stop().animate({\n              height: $(qbInner).outerHeight()\n            }, droppyDownAnimSpeed);\n          }\n        }\n      }, 100);\n    }\n\n    var quickbuyResizeObserver = null;\n    if ('ResizeObserver' in window) {\n      quickbuyResizeObserver = new ResizeObserver((entries) => {\n        for (var entry of entries) {\n          if (entry.contentBoxSize) {\n            debouncedQuickbuyResize(entry.target);\n          }\n        }\n      });\n    } else {\n      quickbuyResizeObserver = {\n        disconnect: () => {},\n        observer: () => {}\n      };\n    }\n\n    // quick buy - managing slide-down quickbuy in both grids and carousels\n    var droppyDownAnimSpeed = 500;\n    $(document).on('click', '.product-list .product-block:not(.collection-block):not(.main-search-result) .quickbuy-toggle', function () {\n      var pageWidth = $(window).width(),\n        productUrl = $(this).attr('href');\n\n      //Only show dropdown if screen is large enough for it to be useful\n      if (pageWidth > 767) {\n        // cancel current request if one exists\n        if (theme.currentQuickbuyRequest) {\n          theme.currentQuickbuyRequest.abort();\n        }\n\n        var $block = $(this).closest('.product-block'),\n          $detailCont = null,\n          $quickbuyCont = null,\n          $slider = $(this).closest('.collection-slider'),\n          $sliderRow = null;\n\n        // do different things if it's inside a slideshow\n        if ($slider.length > 0) {\n          $sliderRow = $slider.closest('.collection-slider-row');\n          // slider without detail\n          if ($sliderRow.find('.quickbuy-container').length === 0) {\n            return;\n          }\n          $quickbuyCont = $sliderRow.find('.quickbuy-container');\n        } else {\n          $quickbuyCont = $block.find('.quickbuy-container');\n        }\n        $detailCont = $quickbuyCont.find('.inner');\n\n        // toggle active class on block\n        if ($block.toggleClass('expanded').hasClass('expanded')) {\n          // expanding\n          if ($slider.length > 0) {\n            // if another block is expanded, remove its expanded class\n            var noneExpanded = $slider.find('.product-block.expanded').not($block).removeClass('expanded').length === 0;\n\n            // if expanding from empty, set initial detail container height to 0\n            if (noneExpanded) {\n              $quickbuyCont.height(0);\n            } else {\n              // unload existing quickbuy\n              $('.product-form', $quickbuyCont).trigger('unload-product-form');\n              $('.gallery', $quickbuyCont).off(this.namespace);\n              $('.slideshow', $quickbuyCont).slick('unslick');\n              // unload components\n              unloadComponents($quickbuyCont);\n            }\n          } else {\n            // close expanded siblings\n            var $expandedSiblings = $block.siblings('.expanded');\n\n            $expandedSiblings.each(function () {\n              contractDetail($(this), 0);\n\n              // unload existing quickbuy\n              $('.product-form', this).trigger('unload-product-form');\n              theme.destroyProductGallery(this);\n              // unload components\n              unloadComponents(this);\n            });\n          }\n\n          // monitor for contents changing size\n          quickbuyResizeObserver.disconnect();\n          quickbuyResizeObserver.observe($detailCont[0]);\n\n          // add spinner\n          $detailCont.html('<div class=\"loading-spinner\"></div>');\n\n          // load in content\n          var url = $(this).attr('href');\n          theme.currentQuickbuyRequest = $.get(url, function (response) {\n            var $newDetail = $('<div>' + response + '</div>').find('.quickbuy-content');\n\n            // convert to quickbuy content\n            $newDetail.find('.more').attr('href', productUrl);\n            $newDetail.find('.detail .title').wrapInner($('<a>').attr('href', productUrl));\n            $newDetail.find('.show-gallery').removeClass('show-gallery').attr('href', productUrl);\n            $newDetail.find('.not-in-quickbuy').remove();\n            $newDetail.find('.only-in-quickbuy').removeClass('only-in-quickbuy');\n            $newDetail.find('.sticky-content-container').removeClass('sticky-content-container');\n            $newDetail.find('.store-availability-container').remove();\n            $newDetail.find('[data-enable-history-state=\"true\"]').attr('data-enable-history-state', 'false');\n            $newDetail.find('.gallery .thumbnails').removeClass('mobile-only');\n            ['gallery--layout-carousel-beside', 'gallery--layout-columns-1', 'gallery--layout-columns-2', 'gallery--layout-collage-1', 'gallery--layout-collage-2'].forEach((cl) => {\n              $newDetail.find('.' + cl).removeClass(cl).addClass('gallery--layout-carousel-under');\n            });\n\n            $detailCont.html($newDetail);\n\n            // the order of these is important:\n            theme.initProductGallery($quickbuyCont); // 1\n            $quickbuyCont.find('.product-form').\n            trigger('load-product-form'); // 2\n            loadComponents($quickbuyCont); // 3\n            theme.initAnimateOnScroll(); // 4\n          }).always(function () {\n            theme.currentQuickbuyRequest = false;\n          });\n\n          // enable close button\n          $quickbuyCont.find('.close-detail').removeAttr('tabindex');\n\n          // scroll to appropriate position\n          // qb: top of quick buy\n          // bl: top of product block\n          var scrollMode = 'qb';\n          var scrollOffset = -120;\n\n          if ($('.section-header').css('position') == 'sticky') {\n            scrollOffset -= $('.section-header').height();\n          }\n\n          if (scrollMode == 'qb') {\n            $('html:not(:animated),body:not(:animated)').animate({ scrollTop: $quickbuyCont.offset().top + scrollOffset }, 500);\n          } else {\n            if ($slider.length > 0) {\n              // simple for slider\n              $('html:not(:animated),body:not(:animated)').animate({ scrollTop: $block.offset().top }, 500);\n            } else {\n              // need to use top of block when no quickbuys are visible\n              saveCollectionPageData();\n              var offsetTop = typeof $block.data('offsetTop') != 'undefined' ? $block.data('offsetTop') : $block.offset().top;\n              $('html:not(:animated),body:not(:animated)').animate({ scrollTop: offsetTop + scrollOffset }, 500);\n            }\n          }\n        } else {\n          // close\n          unloadComponents($quickbuyCont);\n          if ($slider.length > 0) {\n            // collapse detail container\n            $quickbuyCont.stop().animate({ height: 0 }, droppyDownAnimSpeed, function () {\n              // remove details\n              $detailCont.empty();\n            });\n          } else {\n            contractDetail($block, droppyDownAnimSpeed);\n          }\n\n          // scroll to top of closing block\n          var scrollUpOffset = -140;\n          $('html:not(:animated),body:not(:animated)').animate({ scrollTop: $block.offset().top + scrollUpOffset }, 500);\n\n          // disable close button\n          $quickbuyCont.find('.close-detail').attr('tabindex', '-1');\n        }\n\n        return false;\n      }\n    });\n\n    //Close button event\n    $(document).on('click', '.quickbuy-container .close-detail', function () {\n      var $slider = $(this).closest('.collection-slider-row');\n      if ($slider.length) {\n        $slider.find('.product-block.expanded .quickbuy-toggle:first').trigger('click');\n      } else {\n        $(this).closest('.product-block').find('.quickbuy-toggle:first').trigger('click');\n      }\n      return false;\n    });\n\n    //You also need to know where to scroll to\n    function saveCollectionPageData() {\n      $('.collection-listing').each(function () {\n        var $blocks = $(this).find('.product-block');\n        if ($blocks.length <= 1) return true; // Skip for empty colls\n        var row = 0;\n        var currTop = 0;\n        //Heights are fixed. Check two in case somebody has expanded one...\n        var blockHeight = Math.min($blocks.first().outerHeight(), $($blocks[1]).outerHeight());\n        var blockPageOffset = $blocks.first().offset().top;\n        $blocks.each(function (index) {\n          var currOffsetTop = $(this).offset().top;\n          if (index == 0) {\n            currTop = currOffsetTop;\n          } else {\n            if (currOffsetTop > currTop) {\n              row++;\n              currTop = currOffsetTop;\n            }\n          }\n          $(this).data({\n            offsetTop: blockPageOffset + row * blockHeight\n          });\n        });\n      });\n    }\n  };\n\n  $(function () {\n    $(document).on('click', '.sharing a', function (e) {\n      var $parent = $(this).parent();\n      if ($parent.hasClass('twitter')) {\n        e.preventDefault();\n        var url = $(this).attr('href');\n        var width = 575,\n          height = 450,\n          left = ($(window).width() - width) / 2,\n          top = ($(window).height() - height) / 2,\n          opts = 'status=1, toolbar=0, location=0, menubar=0, directories=0, scrollbars=0' +\n          ',width=' + width +\n          ',height=' + height +\n          ',top=' + top +\n          ',left=' + left;\n        window.open(url, 'Twitter', opts);\n\n      } else if ($parent.hasClass('facebook')) {\n        e.preventDefault();\n        var url = $(this).attr('href');\n        var width = 626,\n          height = 256,\n          left = ($(window).width() - width) / 2,\n          top = ($(window).height() - height) / 2,\n          opts = 'status=1, toolbar=0, location=0, menubar=0, directories=0, scrollbars=0' +\n          ',width=' + width +\n          ',height=' + height +\n          ',top=' + top +\n          ',left=' + left;\n        window.open(url, 'Facebook', opts);\n\n      } else if ($parent.hasClass('pinterest')) {\n        e.preventDefault();\n        var url = $(this).attr('href');\n        var width = 700,\n          height = 550,\n          left = ($(window).width() - width) / 2,\n          top = ($(window).height() - height) / 2,\n          opts = 'status=1, toolbar=0, location=0, menubar=0, directories=0, scrollbars=0' +\n          ',width=' + width +\n          ',height=' + height +\n          ',top=' + top +\n          ',left=' + left;\n        window.open(url, 'Pinterest', opts);\n\n      } else if ($parent.hasClass('google')) {\n        e.preventDefault();\n        var url = $(this).attr('href');\n        var width = 550,\n          height = 450,\n          left = ($(window).width() - width) / 2,\n          top = ($(window).height() - height) / 2,\n          opts = 'status=1, toolbar=0, location=0, menubar=0, directories=0, scrollbars=0' +\n          ',width=' + width +\n          ',height=' + height +\n          ',top=' + top +\n          ',left=' + left;\n        window.open(url, 'Google+', opts);\n\n      }\n    });\n  });;\n  var TermsAgreement = class extends HTMLElement {\n    connectedCallback() {\n      this.delegatedEvent = theme.addDelegateEventListener(document, 'click', '#cartform [name=\"checkout\"], .additional-checkout-buttons input, a[href*=\"/checkout\"]', this.handleFormSubmittingEvent.bind(this));\n    }\n\n    disconnectedCallback() {\n      document.removeEventListener('click', this.delegatedEvent);\n    }\n\n    handleFormSubmittingEvent(evt) {\n      if (!this.querySelector('input:checked')) {\n        evt.preventDefault();\n        theme.showQuickPopup(theme.strings.cart_terms_confirmation, $(evt.target));\n      }\n    }\n  };\n\n  window.customElements.define('terms-agreement', TermsAgreement);\n  ;\n\n\n  /*================ Sections ================*/\n  theme.AnnouncementBarSection = new function () {\n    this.onSectionLoad = function (container) {\n      this.container = container;\n      this.namespace = theme.namespaceFromSection(container);\n\n      $('.disclosure', container).each(function () {\n        $(this).data('disclosure', new theme.Disclosure($(this)));\n      });\n\n      this.announcements = container.querySelectorAll('.announcement');\n      if (this.announcements.length > 1) {\n        this.currentAnnouncement = 0;\n        container.querySelector('.announcement-bar__middle').addEventListener('focusin', this.functions.pauseAnnouncements.bind(this));\n        container.querySelector('.announcement-bar__middle').addEventListener('focusout', this.functions.playAnnouncements.bind(this));\n        container.querySelector('.announcement-button--previous').addEventListener('click', this.functions.previousAnnouncement.bind(this));\n        container.querySelector('.announcement-button--next').addEventListener('click', this.functions.nextAnnouncement.bind(this));\n        this.observer = new IntersectionObserver(this.functions.handleIntersect.bind(this));\n        this.observer.observe(this.container);\n      }\n    };\n\n    this.functions = {\n      handleIntersect: function handleIntersect(entries) {\n        entries.forEach((entry) => {\n          if (entry.target == this.container) {\n            if (entry.isIntersecting) {\n              this.functions.playAnnouncements.call(this);\n            } else {\n              this.functions.pauseAnnouncements.call(this);\n            }\n          }\n        });\n      },\n\n      playAnnouncements: function playAnnouncements() {\n        this.announcementInterval = setInterval(() => {\n          this.functions.setCurrentAnnouncement.call(this, this.currentAnnouncement + 1);\n        }, 5000);\n      },\n\n      pauseAnnouncements: function pauseAnnouncements() {\n        if (this.announcementInterval) {\n          clearInterval(this.announcementInterval);\n        }\n      },\n\n      setCurrentAnnouncement: function setCurrentAnnouncement(newIndex) {\n        this.currentAnnouncement = newIndex % this.announcements.length;\n        this.announcements.forEach((el, index) => {\n          if (index !== this.currentAnnouncement) {\n            el.classList.add('announcement--inactive');\n          } else {\n            el.classList.remove('announcement--inactive');\n          }\n        });\n      },\n\n      previousAnnouncement: function previousAnnouncement() {\n        this.functions.setCurrentAnnouncement.call(this, this.currentAnnouncement - 1);\n      },\n\n      nextAnnouncement: function nextAnnouncement() {\n        this.functions.setCurrentAnnouncement.call(this, this.currentAnnouncement + 1);\n      }\n    };\n\n    this.onSectionUnload = function (container) {\n      clearInterval(this.announcementInterval);\n\n      $('.disclosure', container).each(function () {\n        $(this).data('disclosure').unload();\n      });\n\n      if (this.observer) {\n        this.observer.disconnect();\n      }\n\n      $(window).off(this.namespace);\n    };\n\n    this.onBlockSelect = function (block) {\n      var index = Array.prototype.indexOf.call(block.parentElement.children, block);\n      this.functions.pauseAnnouncements.call(this);\n      this.functions.setCurrentAnnouncement.call(this, index);\n    };\n\n    this.onBlockDeselect = function (block) {\n      this.functions.playAnnouncements.call(this);\n    };\n  }();\n\n  theme.BlogTemplateSection = new function () {\n    this.onSectionLoad = function (container) {\n      this.namespace = theme.namespaceFromSection(container);\n      this.$container = $(container);\n\n      // filter dropdown\n      this.$container.on('click' + this.namespace, '.link-dropdown__button', theme.toggleLinkDropdownButton.bind(this));\n\n      // click anywhere else in page to close\n      $(document).on('click' + this.namespace, function () {\n        $('.link-dropdown__button[aria-expanded=\"true\"]').trigger('click');\n      });\n    };\n\n    this.onSectionUnload = function (container) {\n      this.$container.off(this.namespace);\n      $(document).off(this.namespace);\n    };\n  }();\n\n  theme.CartTemplateSection = new function () {\n    this.onSectionLoad = function (container) {\n      this.$container = $(container);\n\n      $(container).on('click.cartTemplateSection', 'button[data-toggle-shipping]', function () {\n        $('#shipping-calculator').toggle();\n        var alt = $(this).data('toggle-html');\n        $(this).data('toggle-html', $(this).html());\n        $(this).html(alt);\n        return false;\n      });\n    };\n\n    this.onSectionUnload = function (container) {\n      $(container).off('.cartTemplateSection');\n    };\n  }();\n\n  theme.CartDrawerSection = new function () {\n    this.onSectionLoad = function (container) {\n      this.container = container;\n      this.namespace = theme.namespaceFromSection(container);\n      this.popup = new ccPopup($('.cc-popup', container), this.namespace);\n\n      this.boundOpen = () => {\n        this.popup.open();\n      };\n      document.addEventListener('theme:open-cart-drawer', this.boundOpen);\n      this.boundClose = () => this.popup.close();\n      document.addEventListener('theme:close-cart-drawer', this.boundClose);\n\n      container.querySelectorAll('.cc-popup-close').forEach((el) => el.addEventListener('click', this.boundClose));\n      container.querySelector('.cc-popup-background').addEventListener('click', this.boundClose);\n    };\n\n    this.onSectionSelect = () => {\n      document.dispatchEvent(\n      new CustomEvent('theme:open-cart-drawer', { bubbles: true, cancelable: false }));\n\n    };\n\n    this.onSectionDeselect = () => {\n      document.dispatchEvent(\n      new CustomEvent('theme:close-cart-drawer', { bubbles: true, cancelable: false }));\n\n    };\n\n    this.onSectionUnload = function (container) {\n      document.removeEventListener('theme:open-cart-drawer', this.boundOpen);\n      document.removeEventListener('theme:close-cart-drawer', this.boundClose);\n    };\n  }();\n\n  theme.CollectionTemplateSection = new function () {\n    this.onSectionLoad = function (container) {\n      this.namespace = theme.namespaceFromSection(container);\n      this.$container = $(container);\n\n      this.filterer = new theme.LoadFilterer(this);\n\n      // button subcollection link hide/reveal\n      $(window).on('debouncedresize' + this.namespace, this.functions.truncateButtonSubcollections.bind(this));\n      this.functions.truncateButtonSubcollections.call(this);\n\n      // gallery subcollection carousel\n      var $subcollectionGallery = $('.subcollection-links--gallery .gallery', container);\n      $subcollectionGallery.on('init', function () {\n        $('.lazyload--manual', this).removeClass('lazyload--manual').addClass('lazyload');\n      }).slick({\n        autoplay: false,\n        fade: false,\n        infinite: false,\n        swipeToSlide: true,\n        slidesToShow: Math.min(4, $('.subcollection-links--gallery .gallery__item', container).length),\n        slidesToScroll: 1,\n        useTransform: true,\n        arrows: true,\n        dots: false,\n        prevArrow: '<button type=\"button\" class=\"image-page-button image-page-button--previous ltr-icon\" aria-label=\"' + theme.strings.previous + '\">' + theme.icons.chevronLeft + '</button>',\n        nextArrow: '<button type=\"button\" class=\"image-page-button image-page-button--next ltr-icon\" aria-label=\"' + theme.strings.next + '\">' + theme.icons.chevronRight + '</button>',\n        rtl: document.querySelector('html[dir=rtl]') ? true : false,\n        responsive: [\n        {\n          breakpoint: 1000,\n          settings: {\n            slidesToShow: Math.min(3, $('.subcollection-links--gallery .gallery__item', container).length)\n          }\n        },\n        {\n          breakpoint: 768,\n          settings: $subcollectionGallery.data('mobile-item-count') == 'hide' ? 'unslick' : {\n            slidesToShow: $subcollectionGallery.data('mobile-item-count')\n          }\n        }]\n\n      });\n    };\n\n    this.onSectionUnload = function (container) {\n      this.filterer.destroy();\n      $('.subcollection-links__expander', this.$container).off('click');\n      $('.slick-slider', container).slick('unslick').off('init');\n      $(window).off(this.namespace);\n    };\n\n    this.functions = {\n      truncateButtonSubcollections: function truncateButtonSubcollections() {\n        var $subcollections = $('.subcollection-links--buttons', this.$container);\n        if ($subcollections.css('display') == 'flex') {\n          var limit = 4;\n          var $btns = $subcollections.find('.btn');\n          if ($btns.length > limit && $subcollections.find('.subcollection-links__expander').length === 0) {\n            $btns.slice(limit - 1).hide();\n            $('<a href=\"#\" class=\"btn btn--tertiary subcollection-links__expander\">').\n            text(theme.strings.collections_general_see_all_subcollections).\n            appendTo($subcollections).\n            on('click', function (evt) {\n              evt.preventDefault();\n              $(this).siblings().show();\n              $(this).remove();\n            });\n          }\n        } else if ($subcollections.find('.subcollection-links__expander').length) {\n          $subcollections.find('.subcollection-links__expander').siblings().show();\n          $subcollections.find('.subcollection-links__expander').remove();\n        }\n      }\n    };\n  }();\n\n  theme.CustomRowSection = new function () {\n    this.onSectionLoad = function (container) {\n      theme.VideoManager.onSectionLoad(container);\n    };\n\n    this.onSectionUnload = function (container) {\n      theme.VideoManager.onSectionUnload(container);\n    };\n  }();\n\n  theme.FeaturedCollectionSection = new function () {\n    this.onSectionLoad = function (container) {\n      var $carousels = theme.loadCarousels(container);\n      // carousels load blocks after init\n      if ($carousels.length === 0) {\n        theme.ProductBlockManager.loadImages(container);\n      }\n    };\n\n    this.onSectionUnload = function (container) {\n      theme.ProductBlockManager.unloadImages(container);\n      theme.unloadCarousels(container);\n    };\n  }();\n\n  theme.FeaturedCollectionsSection = new function () {\n    this.onSectionLoad = function (container) {\n      var $carousels = theme.loadCarousels(container);\n      // carousels load blocks after init\n      if ($carousels.length === 0) {\n        theme.ProductBlockManager.loadImages(container);\n      }\n    };\n\n    this.onSectionUnload = function (container) {\n      theme.ProductBlockManager.unloadImages(container);\n      theme.unloadCarousels(container);\n    };\n  }();\n\n  theme.FeaturedProductSection = new function () {\n    this.onSectionLoad = function (container) {\n      // init gallery (before product form - so it can respond to variant images)\n      theme.initProductGallery(container);\n\n      // init product form\n      $('.product-form', container).trigger('load-product-form');\n\n      theme.ProductBlockManager.loadImages(container);\n    };\n\n    this.onSectionUnload = function (container) {\n      theme.ProductBlockManager.unloadImages(container);\n      theme.destroyProductGallery(container);\n      $('.product-form', container).trigger('unload-product-form');\n      $('.slideshow', container).slick('unslick');\n    };\n  }();\n\n  theme.FooterSection = new function () {\n    this.onSectionLoad = function (container) {\n      $('.disclosure', container).each(function () {\n        $(this).data('disclosure', new theme.Disclosure($(this)));\n      });\n    };\n\n    this.onSectionUnload = function (container) {\n      $('.disclosure', container).each(function () {\n        $(this).data('disclosure').unload();\n      });\n    };\n  }();\n\n  theme.GallerySection = new function () {\n    this.onSectionLoad = function (container) {\n      var $carouselGallery = $('.gallery--mobile-carousel', container);\n      if ($carouselGallery.length) {\n        var assessCarouselFunction = function assessCarouselFunction() {\n          var isCarousel = $carouselGallery.hasClass('slick-slider'),\n            shouldShowCarousel = $(window).width() < 768;\n\n          if (!shouldShowCarousel) {\n            $('.lazyload--manual', $carouselGallery).removeClass('lazyload--manual').addClass('lazyload');\n          }\n\n          if (isCarousel && !shouldShowCarousel) {\n            // Destroy carousel\n\n            // - unload slick\n            $carouselGallery.slick('unslick').off('init');\n            $carouselGallery.find('a, .gallery__item').removeAttr('tabindex').removeAttr('role');\n\n            // - re-row items\n            var rowLimit = $carouselGallery.data('grid');\n            var $currentRow = null;\n            $carouselGallery.find('.gallery__item').each(function (index) {\n              if (index % rowLimit === 0) {\n                $currentRow = $('<div class=\"gallery__row\">').appendTo($carouselGallery);\n              }\n              $(this).appendTo($currentRow);\n            });\n          } else if (!isCarousel && shouldShowCarousel) {\n            // Create carousel\n\n            // - de-row items\n            $carouselGallery.find('.gallery__item').appendTo($carouselGallery);\n            $carouselGallery.find('.gallery__row').remove();\n\n            // - init carousel\n            $carouselGallery.on('init', function () {\n              $('.lazyload--manual', this).removeClass('lazyload--manual').addClass('lazyload');\n            }).slick({\n              autoplay: false,\n              fade: false,\n              infinite: true,\n              useTransform: true,\n              arrows: false,\n              dots: true,\n              customPaging: function customPaging(slider, i) {\n                return \"<button class=\\\"custom-dot\\\" type=\\\"button\\\" data-role=\\\"none\\\" role=\\\"button\\\" tabindex=\\\"0\\\">\" + \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" x=\\\"0px\\\" y=\\\"0px\\\" width=\\\"30px\\\" height=\\\"30px\\\" viewBox=\\\"0 0 30 30\\\" xml:space=\\\"preserve\\\">\" + \"<circle class=\\\"circle-one\\\" cx=\\\"15\\\" cy=\\\"15\\\" r=\\\"13\\\" />\" + \"<circle class=\\\"circle-two\\\" cx=\\\"15\\\" cy=\\\"15\\\" r=\\\"13\\\" />\" + \"</svg>\" + \"</button>\";\n\n\n\n\n\n              },\n              rtl: document.querySelector('html[dir=rtl]') ? true : false\n            });\n          }\n        };\n\n        assessCarouselFunction();\n        $(window).on('debouncedresize.themeSection' + container.id, assessCarouselFunction);\n      }\n\n      // Tidier typography\n      $('.overlay-text__title, .overlay-text__rte', container).each(function () {\n        theme.avoidUnecessaryOrphans(this);\n      });\n    };\n\n    this.onSectionUnload = function (container) {\n      $(window).off('.themeSection' + container.id);\n      $('.slick-slider', container).each(function () {\n        $(this).slick('unslick').off('init');\n      });\n    };\n\n    this.onBlockSelect = function (block) {\n      var blockSlideIndex = $(block).data('slick-index');\n      $(block).closest('.slick-slider').each(function () {\n        $(this).slick('slickGoTo', blockSlideIndex);\n      });\n    };\n  }();\n\n  theme.HeaderSection = new function () {\n    this.onSectionLoad = function (container) {\n      // block focus events targeted at the social icons\n      $(container).on('focusin.headerSection focusout.headerSection', '.social-links', function (e) {\n        return false;\n      });\n\n      // asses focus, and handle transitioning between child elements with a timeout\n      var searchFocusOutTimeoutId = -1;\n      $(container).on('focusin.headerSection focusout.headerSection', '.search-box', function (e) {\n        if (e.type == 'focusin') {\n          clearTimeout(searchFocusOutTimeoutId);\n          $(this).closest('.search-box').addClass('focus');\n        } else {\n          clearTimeout(searchFocusOutTimeoutId);\n          searchFocusOutTimeoutId = setTimeout(function () {\n            $(this).closest('.search-box').removeClass('focus');\n          }.bind(this), 200);\n        }\n      });\n\n      // Toggle search\n      $(container).on('click.headerSection', '.show-search-link, .main-search__close', function (e) {\n        if ($('body').toggleClass('show-search').hasClass('show-search')) {\n          setTimeout(function () {$('.main-search__input:first').focus();}, 500);\n          $('.main-search__suggestions .lazyload--manual').removeClass('lazyload--manual').addClass('lazyload');\n        } else {\n          $('.show-search-link:first').focus();\n        }\n        return false;\n      });\n\n      // Close search on escape\n      $(container).on('keyup.headerSection', '.main-search__input', function (e) {\n        if (e.keyCode == 27) {\n          $('.main-search__close').click();\n        }\n      });\n\n      /// Live search\n      var $liveSearchContainer = $('.main-search[data-live-search=\"true\"]', container);\n      if ($liveSearchContainer.length) {\n        var searchTimeoutThrottle = 500,\n          searchTimeoutID = -1,\n          currReqObj = null,\n          resultLimit = 8,\n          showPrice = $liveSearchContainer.data('live-search-price'),\n          showVendor = $liveSearchContainer.data('live-search-vendor'),\n          includeMeta = $liveSearchContainer.data('live-search-meta'),\n          perRowMob = $liveSearchContainer.data('per-row-mob');\n\n        $(container).on('keyup.headerSection change.headerSection', '.main-search__input', function () {\n          var $searchContainer = $('.main-search'),\n            $resultsBox = $searchContainer.find('.main-search__results'),\n            valueToSearch = $(this).val();\n\n          //Only search if search string longer than 2, and it has changed\n          if (valueToSearch.length > 2 && valueToSearch != $(this).data('oldval')) {\n            //Reset previous value\n            $(this).data('oldval', valueToSearch);\n\n            // Kill outstanding ajax request\n            if (currReqObj != null) {\n              currReqObj.abort();\n            }\n\n            // Kill previous search\n            clearTimeout(searchTimeoutID);\n\n            // Create URL for full search results\n            var $form = $(this).closest('form');\n            var linkURL = $form.attr('action') + ($form.attr('action').indexOf('?') > -1 ? '&' : '?') + $form.serialize();\n\n            //Show loading\n            $searchContainer.removeClass('main-search--has-results main-search--results-on-multiple-lines main-search--no-results').addClass('main-search--loading');\n            if ($('.main-search__results-spinner').length === 0) {\n              $resultsBox.html('<div class=\"main-search__results-spinner\"><div class=\"loading-spinner\"></div></div>');\n            }\n\n            // Do next search (in X milliseconds)\n            searchTimeoutID = setTimeout(function () {\n              var ajaxUrl, ajaxData;\n              if (theme.Shopify.features.predictiveSearch) {\n                // use the API\n                ajaxUrl = theme.routes.predictive_search_url;\n                ajaxData = {\n                  \"q\": valueToSearch,\n                  \"section_id\": \"predictive-search\",\n                  \"resources\": {\n                    \"type\": $form.find('input[name=\"type\"]').val(),\n                    \"limit\": resultLimit,\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 = linkURL;\n                ajaxData = {\n                  \"section_id\": \"main-search\"\n                };\n              }\n              //Ajax hit on search page\n              currReqObj = $.ajax({\n                url: ajaxUrl,\n                data: ajaxData,\n                dataType: 'html',\n                success: function success(response) {\n                  var $resultsList = null;\n                  if (!theme.Shopify.features.predictiveSearch) {\n                    $resultsList = $('<div>' + response + '</div>').find('[data-section-type=\"search-template\"] .product-list');\n                  } else {\n                    $resultsList = $(response).find('.product-list');\n                  }\n\n                  // reset previous contents\n                  currReqObj = null;\n                  theme.ProductBlockManager.unloadImages($resultsBox);\n                  $searchContainer.removeClass('main-search--has-results main-search--results-on-multiple-lines main-search--no-results');\n                  $resultsBox.empty();\n\n                  var $resultsProducts = $('<div class=\"main-search__results__products collection-listing\"><div></div></div>');\n                  var $resultsPages = $('<div class=\"main-search__results__pages\">');\n\n                  $resultsProducts.children()[0].className = $resultsList[0].className;\n\n                  $resultsList.find('.product-block:not(.collection-block):not(.page-block)').slice(0, resultLimit).addClass('main-search-result').each(function () {\n                    $(this).find('.btn.quickbuy-toggle').remove();\n                    $(this).find('.quickbuy-toggle').removeClass('quickbuy-toggle');\n                    if (!showPrice) {\n                      $(this).find('.product-price').remove();\n                    }\n                    if (!showVendor) {\n                      $(this).find('.vendor').remove();\n                    }\n                  }).appendTo($resultsProducts.children());\n\n                  $resultsList.find('.product-block.page-block').each(function () {\n                    var $item = $('<a class=\"main-search-result main-search-result--page\">').attr('href', $(this).find('a:first').attr('href'));\n                    $('<div class=\"main-search-result__text\">').text($(this).find('.page-block__title').text()).appendTo($item);\n                    $resultsPages.append($item);\n                  });\n\n                  $searchContainer.removeClass('main-search--loading');\n\n                  var areProducts = $resultsProducts.find('.main-search-result:first').length > 0,\n                    arePages = $resultsPages.find('.main-search-result:first').length > 0;\n                  if (areProducts || arePages) {\n                    // Numerous results\n                    $searchContainer.addClass('main-search--has-results');\n                    $searchContainer.toggleClass('main-search--results-on-multiple-lines', $resultsProducts.find('.product-block').length > 4);\n                    if (areProducts) {\n                      $resultsBox.append($resultsProducts);\n                      theme.ProductBlockManager.loadImages($resultsProducts);\n                    }\n                    if (arePages) {\n                      $('<h6 class=\"main-search-result__heading\">').html(theme.strings.general_quick_search_pages).prependTo($resultsPages);\n                      $resultsBox.append($resultsPages);\n                    }\n                    $('<a class=\"main-search__results-all-link button altcolour\">').\n                    attr('href', linkURL).\n                    html(theme.strings.layout_live_search_see_all).\n                    appendTo($resultsBox);\n\n                    theme.initAnimateOnScroll();\n                  } else {\n                    // No results - show nothing\n                    $searchContainer.addClass('main-search--no-results');\n                    $('<div class=\"main-search__empty-message\">').html(theme.strings.general_quick_search_no_results).appendTo($resultsBox);\n                  }\n                },\n                error: function error(response) {\n                  console.log('Error fetching results');\n                }\n              });\n            }, searchTimeoutThrottle);\n          } else if ($(this).val().length <= 2) {\n            // Deleted text? Abandon search-in-progress\n            $(this).data('oldval', valueToSearch);\n            if (currReqObj != null) {\n              currReqObj.abort();\n            }\n            clearTimeout(searchTimeoutID);\n\n            // Clear results\n            $searchContainer.removeClass('main-search--has-results main-search--results-on-multiple-lines main-search--loading');\n            $resultsBox.empty();\n          }\n        });\n      }\n\n      // nav\n      theme.Navigation.init({\n        nav: $('.navigation--main', container),\n        mobileNavHtml: $('.mobile-navigation-drawer-template', container).html(),\n        proxyTier1Nav: $('.navigation--left', container)\n      });\n\n      if (theme.inlineNavigationCheck) {\n        theme.inlineNavigationCheck();\n        $(window).on('debouncedresize.headerSection', theme.inlineNavigationCheck);\n      } else if (document.querySelector('#InlineNavigationCheckScript')) {\n        // if just enabled in theme editor but not evaluated\n        eval(document.querySelector('#InlineNavigationCheckScript').innerHTML);\n      }\n\n      // set anything that alters based on contents/viewport/scroll, etc\n      this.section = document.querySelector('.section-header');\n      this.transparentPageheader = document.querySelector('.pageheader--transparent-permitted');\n\n      this.functions.setTransparency.call(this);\n      this.functions.setSticky.call(this);\n      this.functions.setHeaderHeightProperty.call(this);\n\n      $(window).on('scroll.headerSection', this.functions.afterScroll.bind(this));\n      $(window).on('debouncedresize.headerSection', this.functions.afterResize.bind(this));\n\n      // account / localization (after mobile nav initialises)\n      $('.disclosure', container).each(function () {\n        $(this).data('disclosure', new theme.Disclosure($(this)));\n      });\n\n      $('.mobile-navigation-drawer .disclosure').each(function () {\n        $(this).data('disclosure', new theme.Disclosure($(this)));\n      });\n\n      // reveal cart drawer\n      if (theme.settings.cart_type == 'drawer' && document.querySelector('.cart-drawer')) {\n        $(container).on('click.headerSection', '.cart-link', (evt) => {\n          evt.preventDefault();\n          document.dispatchEvent(\n          new CustomEvent('theme:open-cart-drawer', { bubbles: true, cancelable: false }));\n\n        });\n      }\n\n      // listen to cart changes\n      $(document).on('theme:cartchanged.headerSection', function () {\n        $.getJSON(location.origin + '?sections=header', function (data) {\n          var cartSummarySelectors = ['#pageheader .logo-area__right__inner'];\n          for (var i = 0; i < cartSummarySelectors.length; i++) {\n            var $newCartObj = $('<div>' + data.header + '</div>').find(cartSummarySelectors[i]).first();\n            var $currCart = $(cartSummarySelectors[i]);\n            $currCart.html($newCartObj.html());\n          }\n        });\n      });\n\n      // init mobile nav again if it's open and this is a reload\n      if (Shopify.designMode && $('body').hasClass('reveal-mobile-nav')) {\n        theme.openMobileNav();\n      }\n    };\n\n    this.onSectionUnload = function (container) {\n      $(container).off('.headerSection');\n      $(document).off('.headerSection');\n      $(window).off('.headerSection');\n      $('.disclosure', container).each(function () {\n        $(this).data('disclosure').unload();\n      });\n      $('.mobile-navigation-drawer .disclosure').each(function () {\n        $(this).data('disclosure').unload();\n      });\n      theme.Navigation.destroy($('.navigation', container), $('.navigation--left', container));\n    };\n\n    this.functions = {\n      afterScroll: function afterScroll() {\n        this.functions.setTransparency.call(this);\n      },\n\n      afterResize: function afterResize() {\n        this.functions.setSticky.call(this);\n        this.functions.setHeaderHeightProperty.call(this);\n      },\n\n      setTransparency: function setTransparency() {\n        if (this.transparentPageheader) {\n          var bar = document.querySelector('.section-announcement-bar'),\n            scrollThreshold = bar ? bar.offsetTop + bar.clientHeight : 0;\n          if (!this.isSticky || window.scrollY <= scrollThreshold) {\n            this.transparentPageheader.classList.add('pageheader--transparent');\n          } else {\n            this.transparentPageheader.classList.remove('pageheader--transparent');\n          }\n        }\n      },\n\n      setSticky: function setSticky() {\n        this.isSticky = getComputedStyle(this.section).position === 'sticky' || getComputedStyle(this.section).position === '-webkit-sticky';\n      },\n\n      setHeaderHeightProperty: function setHeaderHeightProperty() {\n        var headerHeight = 0,\n          stickyHeaderHeight = 0;\n        if (this.section) {\n          headerHeight = Math.ceil(this.section.clientHeight);\n          if (this.isSticky) {\n            stickyHeaderHeight = headerHeight;\n          }\n        }\n        document.documentElement.style.setProperty('--theme-header-height', headerHeight + 'px');\n        document.documentElement.style.setProperty('--theme-sticky-header-height', stickyHeaderHeight + 'px');\n      }\n    };\n  }();\n\n  theme.ImageWithTextOverlaySection = new function () {\n    var _ = this;\n\n    _.checkForHeaderHeightSubtraction = function () {\n      $('.section-image-with-text-overlay .height--full-minus-header-height').each(function () {\n        var height = $(window).height();\n        // transparent header & top section? slightly different calculation\n        if (document.querySelector('.pageheader--transparent-permitted') && !this.closest('.shopify-section').previousElementSibling) {\n          document.querySelectorAll('.section-store-messages, .section-announcement-bar').forEach((el) => {\n            height -= el.clientHeight;\n          });\n        } else {\n          height -= document.querySelector('.section-header').clientHeight;\n        }\n        $('.rimage-outer-wrapper, .placeholder-image', this).height(height);\n      });\n    };\n\n    this.onSectionLoad = function (container) {\n      $('.height--full', container).each(function () {\n        if ($(this).closest('.section-image-with-text-overlay').index() == 0) {\n          $(this).addClass('height--full-minus-header-height');\n          _.checkForHeaderHeightSubtraction();\n          $(window).off('debouncedresize.imageWithTextOverlaySection').on('debouncedresize.imageWithTextOverlaySection', _.checkForHeaderHeightSubtraction);\n        }\n      });\n\n      // Tidier typography\n      $('.overlay-text__title, .overlay-text__rte', container).each(function () {\n        theme.avoidUnecessaryOrphans(this);\n      });\n    };\n\n    this.onSectionUnload = function (container) {\n      $(window).off('.imageWithTextOverlaySection');\n    };\n  }();\n\n  theme.ListCollectionsTemplateSection = new function () {\n    this.onSectionLoad = function (container) {\n      theme.ProductBlockManager.loadImages(container);\n    };\n\n    this.onSectionUnload = function (container) {\n      theme.ProductBlockManager.unloadImages(container);\n    };\n  }();\n\n  theme.ProductTemplateSection = new function () {\n    this.onSectionLoad = function (container) {\n      /// Init store availability if applicable\n      if ($('[data-store-availability-container]', container).length) {\n        this.storeAvailability = new theme.StoreAvailability($('[data-store-availability-container]', container)[0]);\n      }\n\n      // init gallery (before product form - so it can respond to variant images)\n      theme.initProductGallery(container);\n\n      // init product form\n      $('.product-form', container).trigger('load-product-form');\n\n      theme.ProductBlockManager.loadImages(container);\n\n      // click review rating under title\n      $('.theme-product-reviews', container).on('click', 'a', function () {\n        $('html,body').animate({\n          scrollTop: $($(this).attr('href')).offset().top\n        }, 1000);\n        return false;\n      });\n    };\n\n    this.onSectionUnload = function (container) {\n      theme.ProductBlockManager.unloadImages(container);\n      theme.destroyProductGallery(container);\n      $('.product-form', container).trigger('unload-product-form');\n      $('.theme-product-reviews', container).off('click');\n      if (this.storeAvailability) {\n        this.storeAvailability.onSectionUnload();\n      }\n    };\n  }();\n\n  theme.ScrollingBannerSection = new function () {\n    this.onSectionLoad = function (target) {\n      document.fonts.ready.then(() => target.querySelector('.marquee').classList.add('marquee--animate'));\n      target.querySelectorAll('.lazyload').forEach((el) => {lazySizes.loader.unveil(el);});\n    };\n  }();\n\n  theme.SearchTemplateSection = new function () {\n    this.onSectionLoad = function (container) {\n      this.namespace = theme.namespaceFromSection(container);\n      this.$container = $(container);\n\n      this.filterer = new theme.LoadFilterer(this);\n    };\n\n    this.onSectionUnload = function () {\n      this.filterer.destroy();\n    };\n  }();\n\n  theme.SlideshowSection = new function () {\n    var _ = this;\n\n    _.checkForHeaderHeightSubtraction = function () {\n      $('.section-slideshow .height--full-minus-header-height').each(function () {\n        var height = $(window).height();\n        // transparent header & top section? slightly different calculation\n        if (document.querySelector('.pageheader--transparent-permitted') && !this.closest('.shopify-section').previousElementSibling) {\n          document.querySelectorAll('.section-store-messages, .section-announcement-bar').forEach((el) => {\n            height -= el.clientHeight;\n          });\n        } else {\n          height -= document.querySelector('.section-header').clientHeight;\n        }\n        $('.rimage-outer-wrapper, .placeholder-image', this).height(height);\n      });\n    };\n\n    this.onSectionLoad = function (container) {\n      $('.slideshow', container).each(function () {\n        var slideshowSpeed = $(this).data('transition') === 'instant' ? 0 : 800;\n        var autoplaySpeed = $(this).data('autoplay-speed') * 1000;\n\n        if ($(this).find('.height--full').length && $(this).closest('.section-slideshow').index() == 0) {\n          $(this).addClass('height--full-minus-header-height');\n          _.checkForHeaderHeightSubtraction();\n          $(window).off('debouncedresize.slideshowSection').on('debouncedresize.slideshowSection', _.checkForHeaderHeightSubtraction);\n        }\n        $(this).on('init', function () {\n          $('.lazyload--manual', this).removeClass('lazyload--manual').addClass('lazyload');\n        }).slick({\n          autoplay: $(this).data('autoplay'),\n          fade: $(this).data('transition') !== 'slide',\n          speed: slideshowSpeed,\n          autoplaySpeed: autoplaySpeed,\n          arrows: $(this).data('navigation') === 'arrows',\n          dots: $(this).data('navigation') === 'dots',\n          pauseOnHover: false,\n          infinite: true,\n          useTransform: true,\n          prevArrow: '<button type=\"button\" class=\"slick-prev\" aria-label=\"' + theme.strings.previous + '\">' + theme.icons.chevronLeft + '</button>',\n          nextArrow: '<button type=\"button\" class=\"slick-next\" aria-label=\"' + theme.strings.next + '\">' + theme.icons.chevronRight + '</button>',\n          customPaging: function customPaging(slider, i) {\n            return \"<button class=\\\"custom-dot\\\" type=\\\"button\\\" data-role=\\\"none\\\" role=\\\"button\\\" tabindex=\\\"0\\\">\" + \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" x=\\\"0px\\\" y=\\\"0px\\\" width=\\\"30px\\\" height=\\\"30px\\\" viewBox=\\\"0 0 30 30\\\" xml:space=\\\"preserve\\\">\" + \"<circle class=\\\"circle-one\\\" cx=\\\"15\\\" cy=\\\"15\\\" r=\\\"13\\\" />\" + \"<circle class=\\\"circle-two\\\" cx=\\\"15\\\" cy=\\\"15\\\" r=\\\"13\\\" style=\\\"animation-duration: \".concat(\n\n\n            autoplaySpeed + slideshowSpeed, \"ms\\\" />\") + \"</svg>\" + \"</button>\";\n\n\n          },\n          rtl: document.querySelector('html[dir=rtl]') ? true : false,\n          responsive: [\n          {\n            breakpoint: 768,\n            settings: {\n              arrows: false,\n              dots: $(this).data('navigation') !== 'none'\n            }\n          }]\n\n        }).on('beforeChange', function (event, slick, currentSlide) {\n          if ($(this).data('transition') === 'slide_fade' || $(this).data('transition') === 'zoom') {\n            var $outgoingSlide = $(slick.$slides.get(currentSlide));\n            $outgoingSlide.addClass('slick--leaving');\n          }\n        }).on('afterChange', function (event, slick) {\n          $(slick.$slides).filter('.slick--leaving').removeClass('slick--leaving');\n        });\n      });\n\n      // Tidier typography\n      $('.overlay-text__title, .overlay-text__rte', container).each(function () {\n        theme.avoidUnecessaryOrphans(this);\n      });\n    };\n\n    this.onSectionUnload = function (container) {\n      $('.slick-slider', container).slick('unslick').off('init');\n      $(window).off('.slideshowSection');\n    };\n\n    this.onBlockSelect = function (container) {\n      $(container).closest('.slick-slider').\n      slick('slickGoTo', $(container).data('slick-index')).\n      slick('slickPause');\n    };\n\n    this.onBlockDeselect = function (container) {\n      $(container).closest('.slick-slider').\n      slick('slickPlay');\n    };\n  }();\n\n  theme.TestimonialsSection = new function () {\n    this.onSectionLoad = function (container) {\n      this.namespace = theme.namespaceFromSection(container);\n      this.$testimonialContainer = $('.testimonial-list', container);\n\n      this.$testimonialContainer.find('.testimonial-list__inner').on('init', function () {\n        $('.lazyload--manual', this).removeClass('lazyload--manual').addClass('lazyload');\n      }).slick({\n        fade: this.$testimonialContainer.hasClass('testimonial-list--with-images'),\n        slidesToShow: this.$testimonialContainer.hasClass('testimonial-list--without-images') ? 2 : 1,\n        autoplay: this.$testimonialContainer.data('autoplay'),\n        autoplaySpeed: this.$testimonialContainer.data('autoplay-speed'),\n        dots: false,\n        arrows: true,\n        appendArrows: this.$testimonialContainer.find('.testimonial-list__controls'),\n        prevArrow: '<button type=\"button\" class=\"slick-prev\" aria-label=\"' + theme.strings.previous + '\">' + theme.icons.chevronLeft + '</button>',\n        nextArrow: '<button type=\"button\" class=\"slick-next\" aria-label=\"' + theme.strings.next + '\">' + theme.icons.chevronRight + '</button>',\n        rtl: document.querySelector('html[dir=rtl]') ? true : false,\n        responsive: [\n        {\n          breakpoint: 768,\n          settings: {\n            fade: false,\n            slidesToShow: 1\n          }\n        }]\n\n      });\n    };\n\n    this.onSectionUnload = function (container) {\n      $('.slick-slider', container).each(function () {\n        $(this).slick('unslick').off('init');\n      });\n    };\n\n    this.onBlockSelect = function (block) {\n      var blockSlideIndex = $(block).data('slick-index');\n      $(block).closest('.slick-slider').each(function () {\n        $(this).slick('slickGoTo', blockSlideIndex);\n      });\n    };\n  }();\n\n\n\n  // dom ready\n  $(function ($) {\n    var $ = $; // keep this ref local\n\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    /// Reusable function to expand/contract a div\n    $(document).on('click', 'a[data-toggle-target]', function (e) {\n      e.preventDefault();\n      var $toggler = $(this),\n        $target = $($(this).data('toggle-target')),\n        $transCont = $target.find('.toggle-target-container'),\n        doCollapse = !$target.hasClass('toggle-target--hidden');\n      var transitionDuration = $target.css('transition-duration').indexOf('ms') >= 0 ? parseInt($target.css('transition-duration')) : parseFloat($target.css('transition-duration')) * 1000;\n      if (!$target.hasClass('toggle-target--in-transition')) {\n        if (doCollapse) {\n          $toggler.addClass('toggle-target-toggler--is-hidden');\n          $target.addClass('toggle-target--in-transition toggle-target--hiding').css({\n            height: $transCont.outerHeight() + 'px',\n            opacity: 1\n          });\n          setTimeout(function () {\n            $target.css({\n              height: 0,\n              opacity: 0\n            });\n            setTimeout(function () {\n              $target.addClass('toggle-target--hidden').removeClass('toggle-target--in-transition toggle-target--hiding');\n              $target.css({\n                height: '',\n                opacity: ''\n              });\n            }, transitionDuration);\n          }, 10);\n        } else {\n          $toggler.removeClass('toggle-target-toggler--is-hidden');\n          $target.addClass('toggle-target--in-transition toggle-target--revealing').css({\n            height: 0,\n            opacity: 0,\n            display: 'block'\n          });\n          setTimeout(function () {\n            $target.css({\n              height: $transCont.outerHeight() + 'px',\n              opacity: 1\n            });\n            setTimeout(function () {\n              $target.removeClass('toggle-target--hidden toggle-target--in-transition toggle-target--revealing');\n              $target.css({\n                height: '',\n                opacity: '',\n                display: ''\n              });\n            }, transitionDuration);\n          }, 10);\n        }\n      }\n    });\n\n    //Redirect dropdowns\n    $(document).on('change', 'select.navdrop', function () {\n      window.location = $(this).val();\n    });\n\n    /// Mobile nav\n    $(document).on('click', '.mobile-nav-toggle', function (e) {\n      e.preventDefault();\n      if ($('body').hasClass('enable-mobile-nav-transition')) {\n        // hide nav\n        $('body').removeClass('reveal-mobile-nav reveal-mobile-nav--revealed');\n        setTimeout(function () {\n          $('body').removeClass('enable-mobile-nav-transition');\n        }, 750);\n      } else {\n        // show nav\n        theme.openMobileNav();\n      }\n    });\n\n    theme.openMobileNav = function () {\n      $('body').addClass('enable-mobile-nav-transition');\n      setTimeout(function () {\n        $('body').addClass('reveal-mobile-nav');\n\n        // on reveal, set up internal transition values\n        $('.mobile-navigation-drawer .disclosure').each(function () {\n          var $list = $('.disclosure-list', this),\n            listHeight = 0;\n          $list.children().each(function () {\n            listHeight += $(this).height();\n          });\n          $('.disclosure-list', this).css('height', listHeight + 'px');\n        });\n\n        // on reveal, lazy load images\n        $('.mobile-navigation-drawer .lazyload--manual').removeClass('lazyload--manual').addClass('lazyload');\n\n        // on reveal, load product carousel\n        $('.mobile-navigation-drawer .product-list').each(function () {\n          theme.ProductBlockManager.loadImages($(this));\n        });\n\n        // after reveal, add class\n        var de = $('.mobile-navigation-drawer .navigation__tier-1 > .navigation__item > .navigation__link:first').css('transition-delay');\n        var du = $('.mobile-navigation-drawer .navigation__tier-1 > .navigation__item > .navigation__link:first').css('transition-duration');\n        var delayS = parseFloat(de.split(',')[0]) + parseFloat(du.split(',')[0]);\n        setTimeout(function () {\n          $('body').addClass('reveal-mobile-nav--revealed');\n        }, delayS * 1000);\n      }, 10);\n    };\n\n    /// General window shade\n    $('<a href=\"#\" class=\"page-shade\" aria-label=\"' + theme.strings.general_navigation_menu_toggle_aria_label + '\"></a>').on('click', function () {\n      $('body').removeClass('reveal-mobile-nav show-search');\n      setTimeout(function () {\n        $('body').removeClass('enable-mobile-nav-transition');\n      }, 750);\n      return false;\n    }).appendTo('body');\n\n\n    if (theme.settings.quickbuy_style != 'off') {\n      theme.loadQuickbuy();\n    }\n\n    /// Event for initialising options\n    $(document).on('load-product-form', '.product-form', function (e) {\n      if ($(this).data('product-id') === '') {\n        return;\n      }\n\n      var $productFormContainer = $(this),\n        $productDetail = $(this).closest('.product-detail');\n\n      // events on variant change\n\n      $(this).on('variantChanged', function (evt, variant, product) {\n        // change variant status classes\n        var $labelCont = $productDetail.find('.product-label-list');\n        $labelCont.find('.product-label-container').remove();\n        if (variant) {\n          $labelCont.append($(\"#variant-label-\".concat(product.id, \"-\").concat(variant.id)).html());\n        } else {\n          $labelCont.append($(\"#variant-label-\".concat(product.id, \"-none\")).html());\n        }\n\n        // instate DPBs - requires a variant ID, and may be loaded in quick buy\n        if (variant) {\n          $productDetail.find('.dynamic-payment-button-template').each(function () {\n            $(this).after($(this).html()).remove();\n\n            if (Shopify.PaymentButton) {\n              Shopify.PaymentButton.init();\n            }\n          });\n        }\n      });\n\n      // icon-style variant picker to show option beside label\n      var $iconOptionContainers = $productDetail.find('.option-selector--swatch');\n      if ($iconOptionContainers.length && $('body.swatch-style-icon_circle, body.swatch-style-icon_square').length) {\n        $iconOptionContainers.find('.label').append('<span class=\"label__value\">');\n        $(this).on('variantChanged', function (evt, variant) {\n          $iconOptionContainers.each(function () {\n            var optionIndex = $(this).data('option-index');\n            if (variant) {\n              var optionValue = variant.options[optionIndex];\n              $(this).find('.label__value').text(optionValue);\n            } else {\n              var selectedOption = this.querySelector('.opt-btn:checked');\n              if (selectedOption) {\n                $(this).find('.label__value').text(selectedOption.value);\n              }\n            }\n          });\n        });\n      }\n\n      // Add a disabled-state to options that have no valid variants, in a descending selection order\n      var $availabilityDependentOptions = $productDetail.find('.option-selectors[data-disable-unavailable=\"true\"]');\n      if ($availabilityDependentOptions.length) {\n        $(this).on('variantChanged', function (evt, variant) {var _this2 = this;\n          var productData = theme.OptionManager.getProductData($(this));\n          var optionStatusMap = [];\n          var currentSelectedOptionValues = [];\n\n          $('.option-selectors[data-disable-unavailable=\"true\"] .option-selector', this).each(function (index) {\n            var checkedInput = $(this).find('input:checked');\n            var selectedOption = $(this).find('.cc-select__option[aria-selected=\"true\"]');\n            var value = checkedInput.length ? checkedInput.val() : selectedOption ? selectedOption.data('value') : null;\n            currentSelectedOptionValues.push(value);\n          });\n\n          // build map of options\n          for (var optionIndex = 0; optionIndex < productData.options.length; optionIndex++) {\n            var optionName = productData.options[optionIndex];\n            var values = {};\n            for (var i = 0; i < productData.variants.length; i++) {\n              var v = productData.variants[i];\n              if (!values[v.options[optionIndex]]) {\n                values[v.options[optionIndex]] = false;\n              }\n            }\n            optionStatusMap.push({\n              name: optionName,\n              values: values\n            });\n          }\n\n          // go through each option, assume previous option's values are locked in, if any further choices are possible show as available\n          var _loop4 = function _loop4(optionIndex) {\n            var optionName = productData.options[optionIndex];\n            // for this option, find if any variants are available\n            var fixedOptions = [];\n            for (var _i2 = 0; _i2 < currentSelectedOptionValues.length && _i2 < optionIndex; _i2++) {\n              fixedOptions.push(currentSelectedOptionValues[_i2]);\n            }\n\n            // go through each option value\n            Object.keys(optionStatusMap[optionIndex].values).forEach((optionValue) => {\n              var fixedOptionsForValue = fixedOptions.map((x) => x);\n              fixedOptionsForValue.push(optionValue);\n\n              // go through all variants\n              var availableVariantExists = false;\n              for (var _i3 = 0; _i3 < productData.variants.length; _i3++) {\n                var _v = productData.variants[_i3];\n                // does this variant comply with fixedOptionsForValue? (A blank value means it could be fine.)\n                var variantComplies = true;\n                for (var j = 0; j < fixedOptionsForValue.length; j++) {\n                  if (fixedOptionsForValue[j] && fixedOptionsForValue[j] != _v.options[j]) {// note typeless compare - can encounter (16 == '16') here\n                    variantComplies = false;\n                  }\n                }\n                if (variantComplies && _v.available) {\n                  availableVariantExists = true;\n                }\n              }\n              optionStatusMap[optionIndex].values[optionValue] = availableVariantExists;\n            });\n          };for (var _optionIndex = 0; _optionIndex < productData.options.length; _optionIndex++) {_loop4(_optionIndex);}\n\n          for (var _i = 0; _i < optionStatusMap.length; _i++) {var _loop5 = function _loop5(optionValue)\n            {\n              $(\".option-selector[data-selector-type=\\\"listed\\\"][data-option-index=\\\"\".concat(_i, \"\\\"] .opt-btn\"), _this2).filter(function () {\n                return this.value === optionValue;\n              }).toggleClass('is-unavailable', !optionStatusMap[_i].values[optionValue]);\n              $(\".option-selector[data-selector-type=\\\"dropdown\\\"][data-option-index=\\\"\".concat(_i, \"\\\"] .cc-select__option\"), _this2).filter(function () {\n                return this.dataset.value === optionValue;\n              }).toggleClass('is-unavailable', !optionStatusMap[_i].values[optionValue]);\n            };for (var optionValue in optionStatusMap[_i].values) {_loop5(optionValue);}\n          }\n        });\n      }\n\n      // when option selector changes, update validation state, but only after first validation called\n      $productFormContainer.on('change', '.option-selector', function () {\n        if ($productFormContainer.hasClass('product-form--validation-started')) {\n          theme.validateProductForm($productFormContainer);\n        }\n      });\n\n      // initialise options\n      theme.OptionManager.initProductOptions($(this));\n    });\n\n    $(document).on('unload-product-form', '.product-form', function () {\n      $(this).off('variantChanged change');\n      theme.OptionManager.unloadProductOptions($(this));\n    });\n\n    /// Galleries (inc. product page)\n\n    // when variant changes, and the variant has an image\n    $(document).on('variantImageSelected', '.gallery', function (e, data, isFirstRun) {\n      var $gallery = $(this);\n      var $galleryCollageContainer = $gallery.filter('.gallery--layout-columns-1, .gallery--layout-columns-2, .gallery--layout-collage-1, .gallery--layout-collage-2').find('.product-slideshow:not(.slick-slider)');\n      var collageGroupedImagesChanged = false;\n      var $slideshow = null;\n\n      if ($gallery.attr('data-variant-image-grouping-option-index') !== '') {\n        // when images are grouped, we use options instead of variants\n        var pivotOptionIndex = $gallery.attr('data-variant-image-grouping-option-index');\n        var selectedGroupOption = data.options[pivotOptionIndex];\n        var $thumbnails = $gallery.find('.thumbnails');\n        $slideshow = $gallery.find('.slideshow');\n\n        // slideshow - filter\n        if ($slideshow.hasClass('slick-slider')) {\n          // is variant image visible?\n          var currentIsVisible = !!$slideshow.find(\".slide[data-media-id=\\\"\".concat(data.featured_media.id, \"\\\"]\")).length;\n          // filter (By option name: standard. By media id: when multiple variants have same media)\n          $slideshow.slick('slickUnfilter').slick('slickFilter', \".slide[data-media-id=\\\"\".concat(data.featured_media.id, \"\\\"], [data-variant-image-group=\\\"\").concat(selectedGroupOption.replace('\"', '&quot;').replace(/<>/g, ''), \"\\\"]\"));\n          // weird hack required for Slick\n          $slideshow.find('.slide').css({ position: '', left: '', top: '', zIndex: '', opacity: '' });\n          // jump to correct slide immediately after filtering\n          if (!currentIsVisible) {\n            $slideshow.slick('slickGoTo', 0, true); // reset - hack for a bug\n            $slideshow.slick('slickGoTo', $slideshow.find(\".slide[data-media-id=\\\"\".concat(data.featured_media.id, \"\\\"]\")).data('slick-index'), true);\n          }\n        }\n\n        // carousel - add/remove as required\n        if ($thumbnails.hasClass('owl-carousel')) {\n          var $hiddenThumbnails = $gallery.find('.hidden-thumbnails');\n          if (!$hiddenThumbnails.length) {\n            $hiddenThumbnails = $('<div class=\"hidden-thumbnails hidden\">').insertAfter($thumbnails);\n          }\n\n          // move to hidden thumbnails container (and show() in case hide() called prior)\n          $thumbnails.find('.thumbnail').show().each(function () {\n            if ($(this).attr('data-variant-image-group') != selectedGroupOption && $(this).attr('data-media-id') != data.featured_media.id) {\n              var index = $(this).parent().index();\n              $(this).appendTo($hiddenThumbnails);\n              $thumbnails.trigger('remove.owl.carousel', [index]);\n            }\n          });\n\n          // add from hidden thumbnails container\n          $hiddenThumbnails.find('.thumbnail').each(function () {\n            if ($(this).attr('data-variant-image-group') == selectedGroupOption || $(this).attr('data-media-id') == data.featured_media.id) {\n              $(this).show();\n              $thumbnails.trigger('add.owl.carousel', [this]);\n            }\n          });\n          $thumbnails.trigger('refresh.owl.carousel');\n        } else {\n          // show/hide elements\n          $thumbnails.find('.thumbnail').each(function () {\n            if ($(this).attr('data-variant-image-group') == selectedGroupOption || $(this).attr('data-media-id') == data.featured_media.id) {\n              $(this).show();\n            } else {\n              $(this).hide();\n            }\n          });\n        }\n\n        // carousel - visibility by class & moving visible to top (for nth-child styling)\n        if ($galleryCollageContainer.length) {\n          $galleryCollageContainer.find('.slide').each(function () {\n            if ($(this).attr('data-variant-image-group') == selectedGroupOption || $(this).attr('data-media-id') == data.featured_media.id) {\n              if ($(this).hasClass('slide--inactive-option')) {\n                collageGroupedImagesChanged = true;\n              }\n              $(this).removeClass('slide--inactive-option');\n            } else {\n              if (!$(this).hasClass('slide--inactive-option')) {\n                collageGroupedImagesChanged = true;\n              }\n              $(this).addClass('slide--inactive-option');\n            }\n          });\n          $galleryCollageContainer.find('.slide--inactive-option').appendTo($galleryCollageContainer);\n        }\n      }\n\n      // select matching thumbnail\n      $gallery.find('.thumbnails a[data-media-id=\"' + data.featured_media.id + '\"]:first').trigger('select');\n\n      // collage - highlight selected, if not first run\n      if ($galleryCollageContainer.length) {\n        var $active = $gallery.find('.slide[data-media-id=\"' + data.featured_media.id + '\"]:first');\n        if ($active.length) {\n          if (isFirstRun && !collageGroupedImagesChanged) {\n            // only scroll on first run, no visual highlight\n            theme.scrollToRevealElement($active[0]);\n          } else if (collageGroupedImagesChanged) {\n            // assume first image is highlighted by the change\n            $gallery.find('.slide--was-highlighted').removeClass('slide--was-highlighted');\n            $active.addClass('slide--was-highlighted');\n          } else if (!$active.hasClass('slide--was-highlighted')) {\n            // reset\n            clearTimeout(theme.variantImageFadeTimeout);\n            $gallery.find('.slide--highlight-on').removeClass('slide--highlight-on');\n            $gallery.find('.slide--highlight-off').removeClass('slide--highlight-off');\n            $gallery.find('.slide--was-highlighted').removeClass('slide--was-highlighted');\n\n            // highlight\n            $active.addClass('slide--highlight-on slide--was-highlighted').siblings().addClass('slide--highlight-off');\n            theme.variantImageFadeTimeout = setTimeout(function () {\n              $gallery.find('.slide--highlight-on').removeClass('slide--highlight-on');\n              $gallery.find('.slide--highlight-off').removeClass('slide--highlight-off');\n            }, 1200);\n\n            // scroll if needed\n            theme.scrollToRevealElement($active[0]);\n          }\n        }\n      }\n    });\n\n    // click main product image (launch gallery)\n    $(document).on('click', '.product-detail .gallery .main-image a.show-gallery', function () {\n      var images = [],\n        $imgs = $(this).closest('.product-slideshow').find('.slide:not(.slide--inactive-option) .show-gallery'),\n        clickedHref = $(this).attr('href');\n\n      if ($imgs.length) {\n        $imgs.each(function () {\n          var $imgThumb = $(this).find('.rimage-outer-wrapper').clone();\n          $imgThumb.find('.lazyloaded').removeClass('lazyloaded').addClass('lazyload').parent().addClass('lazyload--placeholder');\n          images.push({\n            thumbTag: $imgThumb,\n            zoomUrl: $(this).attr('href')\n          });\n        });\n      } else {\n        var $img = $(this).find('.rimage-outer-wrapper').clone();\n        $img.find('.lazyloaded').removeClass('lazyloaded').addClass('lazyload').parent().addClass('lazyload--placeholder');\n        images.push({\n          thumbTag: $img,\n          zoomUrl: $(this).attr('href')\n        });\n      }\n\n      theme.buildGalleryViewer({\n        images: images,\n        currentImage: clickedHref,\n        prev: theme.icons.chevronLeft,\n        next: theme.icons.chevronRight,\n        close: theme.icons.close\n      });\n\n      return false;\n    });\n\n    // load any images that aren't inside a section\n    var $nonSectionedProductLists = $('.product-list, .collection-listing').filter(function () {\n      return $(this).closest('[data-section-type]').length == 0;\n    });\n    if ($nonSectionedProductLists.length) {\n      theme.ProductBlockManager.loadImages($nonSectionedProductLists);\n    }\n    $(window).on('debouncedresize', function () {\n      setTimeout(function () {\n        theme.ProductBlockManager.afterImagesResized(); // empty param req\n      }, 100); // after third party stuff\n    });\n\n    // forms don't all have correct label attributes\n    $('#template label').each(function () {\n      var $sibinputs = $(this).siblings('input:not([type=\"submit\"]), textarea');\n      if ($sibinputs.length == 1 && $sibinputs.attr('id').length > 0) {\n        $(this).attr('for', $sibinputs.attr('id'));\n      }\n    });\n\n    $(document).on('click', '.quantity-wrapper [data-quantity]', function () {\n      var adj = $(this).data('quantity') == 'up' ? 1 : -1;\n      var $qty = $(this).closest('.quantity-wrapper').find('[name=quantity]');\n      if ($qty.attr('step')) {\n        adj *= parseInt($qty.attr('step'));\n      }\n      $qty.val(Math.max(1, parseInt($qty.val()) + adj)).trigger('change');\n      return false;\n    });\n\n    /// Responsive tables\n    $('.responsive-table').on('click', '.responsive-table__cell-head', function () {\n      if ($(window).width() < 768) {\n        $(this).closest('tr').toggleClass('expanded');\n        return false;\n      }\n    });\n\n    // Enhance video sections for overlays\n    if (typeof cc !== 'undefined' && cc.sections) {\n      for (var sectionKey in cc.sections) {\n        var ccSection = cc.sections[sectionKey];\n        if (ccSection.name === 'video') {\n          var t = ccSection.section.onSectionLoad;\n          ccSection.section.onSectionLoad = function (container) {\n            // Tidier typography\n            $('.overlay-text__title, .overlay-text__rte', container).each(function () {\n              theme.avoidUnecessaryOrphans(this);\n            });\n            t.call(this, container);\n          };\n        }\n      }\n    }\n\n    /// Register all sections\n    theme.Sections.init();\n    theme.Sections.register('header', theme.HeaderSection, { deferredLoad: false });\n    theme.Sections.register('announcement-bar', theme.AnnouncementBarSection, { deferredLoad: false });\n    theme.Sections.register('footer', theme.FooterSection);\n    theme.Sections.register('cart-drawer', theme.CartDrawerSection, { deferredLoad: false }); // popup makes it hidden on load\n    theme.Sections.register('slideshow', theme.SlideshowSection);\n    theme.Sections.register('gallery', theme.GallerySection);\n    theme.Sections.register('testimonials', theme.TestimonialsSection);\n    theme.Sections.register('image-with-text-overlay', theme.ImageWithTextOverlaySection);\n    theme.Sections.register('featured-collection', theme.FeaturedCollectionSection);\n    theme.Sections.register('featured-collections', theme.FeaturedCollectionsSection);\n    theme.Sections.register('map', theme.MapSection);\n    theme.Sections.register('background-video', theme.VideoManager, { deferredLoadViewportExcess: 800 });\n    theme.Sections.register('custom-row', theme.CustomRowSection);\n    theme.Sections.register('featured-product', theme.FeaturedProductSection);\n    theme.Sections.register('scrolling-banner', theme.ScrollingBannerSection);\n    theme.Sections.register('main-product', theme.ProductTemplateSection, { deferredLoad: false });\n    theme.Sections.register('collection-template', theme.CollectionTemplateSection, { deferredLoad: false });\n    theme.Sections.register('search-template', theme.SearchTemplateSection, { deferredLoad: false });\n    theme.Sections.register('blog-template', theme.BlogTemplateSection, { deferredLoad: false });\n    theme.Sections.register('cart-template', theme.CartTemplateSection, { deferredLoad: false });\n    theme.Sections.register('list-collections-template', theme.ListCollectionsTemplateSection, { deferredLoad: false });\n    theme.Sections.register('page-list-collections-template', theme.ListCollectionsTemplateSection, { deferredLoad: false });\n    theme.Sections.register('contact', new function () {}());\n  });\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\n/*open links in new tab */\nvar links = document.links;\nfor (let i = 0, linksLength = links.length ; i < linksLength ; i++) {\n  if (links[i].hostname !== window.location.hostname) {\n    links[i].target = '_blank';\n    links[i].rel = 'noreferrer noopener';\n  }\n}"],
  "mappings": "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",
  "names": ["t", "r", "a", "o", "n", "container", "status", "response", "$btn", "i", "el", "img", "key", "$", "optionIndex", "optionName", "optionValue"]
}
