{
  "version": 3,
  "sources": ["/cdn/shop/t/34/assets/theme.js?view=ajax"],
  "sourcesContent": ["(function ($) {\n  var $ = jQuery = $;\n\n  let cc = {\n    sections: []\n  };\n\n  theme.Shopify = {\n    formatMoney: function (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 (originalImageUrl, format) {\n      return originalImageUrl ? originalImageUrl.replace(/^(.*)\\.([^\\.]*)$/g, '$1_' + format + '.$2') : '';\n    },\n    Image: {\n      imageSize: function (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 (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 (t) {\n        return t.replace(/http(s)?:/, \"\");\n      }\n    }\n  };\n  class ccComponent {\n    constructor(name) {let cssSelector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : `.cc-${name}`;\n      const _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(`${cssSelector}:not(.cc-initialized)`).each(function () {\n            _this.init(this);\n          });\n        }\n      });\n\n      // Destroy any instance of this component within a section\n      $(document).on('cc:component:unload', function (event, component, target) {\n        if (component === name) {\n          $(target).find(cssSelector).each(function () {\n            _this.destroy(this);\n          });\n        }\n      });\n\n      // Initialise any instance of this component\n      $(cssSelector).each(function () {\n        _this.init(this);\n      });\n    }\n\n    init(container) {\n      $(container).addClass('cc-initialized');\n    }\n\n    destroy(container) {\n      $(container).removeClass('cc-initialized');\n    }\n\n    registerInstance(container, instance) {\n      this.instances.push({\n        container,\n        instance\n      });\n    }\n\n    destroyInstance(container) {\n      this.instances = this.instances.filter((item) => {\n        if (item.container === container) {\n          if (typeof item.instance.destroy === 'function') {\n            item.instance.destroy();\n          }\n\n          return item.container !== container;\n        }\n      });\n    }\n  }\n  (function () {\n    function throttle(callback, threshold) {\n      let debounceTimeoutId = -1;\n      let 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    const 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  // 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          const 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          const 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          const sectionType = container.dataset['sectionType'];\n          console.warn(`Theme warning: '${method}' failed for section '${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  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 () {\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 () {\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 () {\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 () {\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 (value) {\n        this.cache.$disclosureInput.val(value);\n        this.$container.parents('form').submit();\n      },\n\n      _hideList: function () {\n        this.cache.$disclosureList.removeClass(classes.listVisible);\n        this.cache.$disclosureToggle.attr('aria-expanded', false);\n      },\n\n      unload: function () {\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  /// Show a short-lived text popup above an element\n  theme.showQuickPopup = function (message, origin) {\n    const $origin = $(origin);\n    const $popup = $('<div class=\"simple-popup\"/>');\n    const offs = $origin.offset();\n    const originLeft = $origin[0].getBoundingClientRect().left;\n    $popup.html(message).css({ 'left': offs.left, 'top': offs.top }).hide();\n    $('body').append($popup);\n    let marginLeft = -($popup.outerWidth() - $origin.outerWidth()) / 2;\n    if (originLeft + marginLeft < 0) {\n      // Pull it away from the left edge of the screen\n      marginLeft -= originLeft + marginLeft - 2;\n    }\n    // Pull from right edge + small gap\n    let offRight = offs.left + marginLeft + $popup.outerWidth() + 5;\n    if (offRight > window.innerWidth) {\n      marginLeft -= offRight - window.innerWidth;\n    }\n    $popup.css({ marginTop: -$popup.outerHeight() - 10, marginLeft: marginLeft });\n    $popup.fadeIn(200).delay(3500).fadeOut(400, function () {\n      $(this).remove();\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  }; // Turn a <select> tag into clicky boxes\n  // Use with: $('select').clickyBoxes()\n  $.fn.clickyBoxes = function (prefix) {\n    if (prefix == 'destroy') {\n      $(this).off('.clickyboxes');\n      $(this).next('.clickyboxes').off('.clickyboxes');\n    } else {\n      return $(this).filter('select:not(.clickybox-replaced)').addClass('clickybox-replaced').each(function () {\n        //Make sure rows are unique\n        var prefix = prefix || $(this).attr('id');\n        //Create container\n        var $optCont = $('<ul class=\"clickyboxes\"/>').attr('id', 'clickyboxes-' + prefix).data('select', $(this)).insertAfter(this);\n\n        var $label;\n        if ($(this).is('[id]')) {\n          $label = $('label[for=\"' + $(this).attr('id') + '\"]'); // Grab real label\n        } else {\n          $label = $(this).siblings('label'); // Rough guess\n        }\n        if ($label.length > 0) {\n          $optCont.addClass('options-' + removeDiacritics($label.text()).toLowerCase().replace(/'/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/-*$/, ''));\n        }\n\n        //Add options to container\n        $(this).find('option').each(function () {\n          $('<li/>').appendTo($optCont).append(\n          $('<a href=\"#\"/>').attr('data-value', $(this).val()).html($(this).html()).\n          addClass('opt--' + removeDiacritics($(this).text()).toLowerCase().replace(/'/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/-*$/, '')));\n\n        });\n        //Select change event\n        $(this).hide().addClass('replaced').on('change.clickyboxes keyup.clickyboxes', function () {\n          //Choose the right option to show\n          var val = $(this).val();\n          $optCont.find('a').removeClass('active').filter(function () {\n            return $(this).attr('data-value') == val;\n          }).addClass('active');\n        }).trigger('keyup'); //Initial value\n        //Button click event\n        $optCont.on('click.clickyboxes', 'a', function () {\n          if (!$(this).hasClass('active')) {\n            var $clicky = $(this).closest('.clickyboxes');\n            $clicky.data('select').val($(this).data('value')).trigger('change');\n            $clicky.trigger('change');\n          }\n          return false;\n        });\n      });\n    }\n  };\n  /// v1.0\n  /// Restyling select dropdowns\n  $.fn.selectReplace = function (prefix) {\n    var chevronDown = '<svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><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    if (prefix == 'destroy') {\n      $(this).off('.selectreplace');\n    } else {\n      return $(this).filter('select:not(.replaced, .noreplace)').addClass('replaced').each(function () {\n        //Add formatting containers\n        var $opts = $(this).find('option');\n        var initialText = $opts.filter(':selected').length > 0 ? $opts.filter(':selected').text() : $opts.first().text();\n        var $cont = $(this).wrap('<div class=\"pretty-select\">').parent().addClass('id-' + $(this).attr('id')).\n        append('<span class=\"text\"><span class=\"value\">' + initialText + '</span></span>' + chevronDown);\n        $cont.toggleClass('plaintext', $(this).hasClass('plaintext'));\n      }).on('change.selectreplace keyup.selectreplace', function () {\n        $(this).siblings('.text').find('.value').html($(this).find(':selected').html());\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) {let wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 700;let immediate = arguments.length > 2 ? arguments[2] : undefined;\n    var timeout;\n    return function () {\n      var context = this,args = arguments;\n      var later = function () {\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  (function () {\n    function throttle(callback, threshold) {\n      let debounceTimeoutId = -1;\n      let 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    const 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  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(`${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 = `${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          const 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      const 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      const item = toggle.parentNode;\n      const 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      const panel = e.target;\n      const 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() {let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'accordion';let cssSelector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : `.cc-${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  (() => {\n    theme.initAnimateOnScroll = function () {\n      if (document.body.classList.contains('cc-animate-enabled') && window.innerWidth >= 768) {\n        const animationTimeout = typeof document.body.dataset.ccAnimateTimeout !== \"undefined\" ? document.body.dataset.ccAnimateTimeout : 200;\n\n        if ('IntersectionObserver' in window) {\n          const 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          const elems = document.querySelectorAll('[data-cc-animate]:not(.cc-animate-init)');\n          for (let 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 GiftCardRecipient extends HTMLElement {\n    constructor() {\n      super();\n      this.recipientCheckbox = null;\n      this.recipientFields = null;\n      this.recipientEmail = null;\n    }\n\n    connectedCallback() {\n      if (!document.querySelector('html').classList.contains('no-js')) {\n        this.recipientEmail = this.querySelector('[name=\"properties[Recipient email]\"]');\n        this.recipientEmailLabel = this.querySelector(`label[for=\"${this.recipientEmail.id}\"]`);\n\n        // When JS is enabled, the recipientEmail field changes from optional to required\n        // For themes using labels\n        if (this.recipientEmailLabel && this.recipientEmailLabel.dataset.jsLabel) {\n          this.recipientEmailLabel.innerText = this.recipientEmailLabel.dataset.jsLabel;\n        }\n        // For themes using placeholders\n        if (this.recipientEmail.dataset.jsPlaceholder) {\n          this.recipientEmail.placeholder = this.recipientEmail.dataset.jsPlaceholder;\n          this.recipientEmail.ariaLabel = this.recipientEmail.dataset.jsAriaLabel;\n        }\n\n        this.recipientCheckbox = this.querySelector('.cc-gift-card-recipient__checkbox');\n        this.recipientFields = this.querySelector('.cc-gift-card-recipient__fields');\n\n        this.recipientCheckbox.addEventListener('change', () => this.synchronizeProperties());\n        this.synchronizeProperties();\n      }\n    }\n\n    synchronizeProperties() {\n      if (this.recipientCheckbox.checked) {\n        this.recipientFields.style.display = 'block';\n        // The 'required' attribute is not set in HTML because the recipientEmail field is optional when JS is disabled\n        this.recipientEmail.setAttribute('required', '');\n      } else {\n        this.recipientFields.style.display = 'none';\n        this.recipientEmail.removeAttribute('required');\n      }\n    }\n  }\n\n  if (!window.customElements.get('gift-card-recipient')) {\n    window.customElements.define('gift-card-recipient', GiftCardRecipient);\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      const $visibleFreezePopups = $('.' + this.cssClasses.visible).filter(() => {return this.$container.data('freeze-scroll');});\n      if ($visibleFreezePopups.length === 0) {\n        let transitionDuration = 500;\n\n        const $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  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      const 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      const 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      const 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        let 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() {let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'price-range';let cssSelector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : `.cc-${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    let _ = 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        let containerId = 'theme-yt-video-' + _.videos.incrementor;\n        $(this).data('video-container-id', containerId);\n        let autoplay = $(this).data('video-autoplay');\n        let loop = $(this).data('video-loop');\n        let videoId = $(this).data('video-id');\n        let isBackgroundVideo = $(this).hasClass('video-container--background');\n\n        let 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        let widgetid = _.videos.incrementor;\n        ytURLSearchParams.append('widgetid', widgetid);\n\n        let src = 'https://www.youtube.com/embed/' + videoId + '?' + ytURLSearchParams.toString();\n\n        let $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\":[${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                let 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\":${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: ${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        let loop = $(this).data('video-loop');\n        let videoId = $(this).data('video-id');\n        let isBackgroundVideo = $(this).hasClass('video-container--background');\n\n        let 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        let src = 'https://player.vimeo.com/video/' + videoId + '?' + viURLSearchParams.toString();\n\n        let $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              let 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: ${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        let 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          const sources = $(this).data('video-sources').split('|');\n          for (let i = 0; i < sources.length; i++) {\n            const [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        const 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 (let dataKey in _.videos.videoData) {\n        let 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  /**\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 () {\n        window.localStorage.setItem(dismissedStorageKey, new Date().getTime());\n      }\n    };\n\n    /**\n     * Event callback for Theme Editor `section:unload` event\n     */\n    this.onSectionUnload = function () {\n      this.$container.off(this.namespace);\n    };\n  }();\n\n  // Register section\n  cc.sections.push({\n    name: 'newsletter-popup',\n    section: theme.Popup\n  });\n  /**\n   * StoreAvailability Section Script\n   * ------------------------------------------------------------------------------\n   *\n   * @namespace StoreAvailability\n   */\n\n  theme.StoreAvailability = function (container) {\n    const loadingClass = 'store-availability-loading';\n    const initClass = 'store-availability-initialized';\n    const 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${this.namespace}${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${this.namespace}${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 () {\n        return new Promise((resolve, reject) => {\n          let 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                const 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 (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 (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 (coords) {\n        const unitSystem = this.$modal.find('[data-unit-system]').data('unit-system');\n        const self = this;\n\n        this.$modal.find('[data-distance=\"false\"]').each(function () {\n          const thisCoords = {\n            latitude: parseFloat($(this).data('latitude')),\n            longitude: parseFloat($(this).data('longitude'))\n          };\n\n          if (thisCoords.latitude && thisCoords.longitude) {\n            const 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 (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              const 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                let newHeight = this.$container.find('.store-availability-container').outerHeight();\n                this.$container.css('height', newHeight > 0 ? newHeight + 'px' : '');\n                clearTimeout(this.removeFixedHeightTimeout);\n                this.removeFixedHeightTimeout = setTimeout(() => {\n                  this.$container.css('height', '');\n                }, this.transitionDurationMS);\n              }\n            }\n          });\n        }\n      }\n    };\n\n    // Initialise the section when it's instantiated\n    this.onSectionLoad(container);\n  };\n\n  // Register section\n  cc.sections.push({\n    name: 'store-availability',\n    section: theme.StoreAvailability\n  });\n\n\n  /*================ General ================*/\n  theme.icons = {\n    left: '<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=\"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\"><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 fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>',\n    chevronLeft: '<svg fill=\"#000000\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M 14.51,6.51 14,6 8,12 14,18 14.51,17.49 9.03,12 Z\"></path></svg>',\n    chevronRight: '<svg fill=\"#000000\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M 10,6 9.49,6.51 14.97,12 9.49,17.49 10,18 16,12 Z\"></path></svg>',\n    tick: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-check\"><polyline points=\"20 6 9 17 4 12\"></polyline></svg>'\n  };\n  theme.viewport = {\n    isXs: () => {\n      return $(window).outerWidth() < 768;\n    },\n    isSm: () => {\n      return $(window).outerWidth() >= 768;\n    },\n    isMd: () => {\n      return $(window).outerWidth() >= 992;\n    },\n    isLg: () => {\n      return $(window).outerWidth() >= 1200;\n    },\n    scrollTo: function ($elem) {let scrollTop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;let speed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1000;let offset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;let compensateForNavToolbar = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n      if ($elem && typeof $elem === 'string') {\n        $elem = $($elem);\n      }\n\n      if (compensateForNavToolbar) {\n        offset += $('#toolbar').outerHeight();\n      }\n\n      if (scrollTop === -1 && $elem && $elem.length) {\n        scrollTop = $elem.offset().top - offset;\n      }\n\n      $('html,body').animate({ scrollTop }, speed);\n    }\n  };\n  theme.browser = {\n    isSafari: () => {\n      return navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1;\n    }\n  };\n  theme.device = {\n    isTouch: () => {\n      try {\n        document.createEvent(\"TouchEvent\");\n        return true;\n      } catch (e) {\n        return false;\n      }\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  // Manage option dropdowns\n  theme.productData = {};\n  ;\n  //Lazy load images for browsers which dont support ES6 class\n  if (!theme.imageLazyLoader) {\n    var images = document.querySelectorAll('img[loading=\"lazy\"][data-lazy-src],[data-lazy-bg]');\n    for (var i = 0; i < images.length; i++) {\n      var img = images[i],imgWidth = img.clientWidth ? img.clientWidth : 500,\n        imgLazySrc = img.getAttribute('data-lazy-src');\n      if (imgLazySrc) {\n        img.setAttribute('src', imgLazySrc.replace('{width}x', imgWidth + 'x'));\n      } else {\n        var imgLazyBg = img.getAttribute('data-lazy-bg');\n        if (imgLazyBg) {\n          img.style.backgroundImage = 'url(' + imgLazyBg.replace('{width}x', imgWidth + 'x') + ')';\n        }\n      }\n    }\n    theme.imageLazyLoader = {\n      loadLazyImage: () => {},\n      loadLazyImages: () => {}\n    };\n  }\n  ;\n  theme.namespaceFromSection = function (container) {\n    return ['.', $(container).data('section-type'), $(container).data('section-id')].join('');\n  };\n\n  theme.initContentSlider = function (target, afterChange) {\n    const lastSlide = $('.slideshow .slide', target).length - 1;\n    let speed = $(this).data('transition') == 'instant' ? 0 : 1000;\n    if ($(this).data('transition-speed')) {\n      speed = $(this).data('transition-speed');\n    }\n\n    $('.slideshow', target).each(function () {\n      $(this).on('init', function () {\n        //Lazyload all slide images after a few seconds\n        setTimeout(() => {\n          $('.slideshow', target).find('img[loading=\"lazy\"]').each(function () {\n            theme.imageLazyLoader.loadLazyImage($(this)[0]);\n            $(this).attr('loading', 'auto');\n          });\n        }, 5000);\n      }).slick({\n        autoplay: $(this).data('autoplay'),\n        fade: $(this).data('transition') != 'slide',\n        speed: speed,\n        autoplaySpeed: $(this).data('autoplay-speed') * 1000,\n        arrows: $(this).data('navigation') == 'arrows',\n        dots: $(this).data('navigation') == 'dots',\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        pauseOnHover: false,\n        cssEase: 'cubic-bezier(0.25, 1, 0.5, 1)',\n        lazyLoad: $(this).find('[data-lazy]').length > 0 ? 'ondemand' : null,\n        responsive: [\n        {\n          breakpoint: 768,\n          settings: {\n            fade: $(this).data('transition') != 'slide', // keep instant gif-style on mobile\n            speed: $(this).data('transition') == 'instant' ? 0 : 750,\n            arrows: false, //$(this).data('navigation') == 'arrows',\n            dots: $(this).data('navigation') != 'none', // $(this).data('navigation') == 'none' || $(this).data('navigation') == 'dots',\n            lazyLoad: $(this).find('[data-lazy]').length > 0 ? 'progressive' : null\n          }\n        }]\n\n      }).on('beforeChange', function (event, slick, currentSlide, nextSlide) {\n        //Figure out the direction we're travelling in\n        let direction = \"left\";\n        if ((nextSlide < currentSlide && !(currentSlide === lastSlide && nextSlide === 0) || currentSlide == 0 && nextSlide === lastSlide) &&\n        !(nextSlide === 1 && currentSlide === 0)) {\n          direction = 'right';\n        }\n\n        //Pop the direction to animate from, forcing the text left or right and hidden\n        $(this).addClass(`direction-${direction}`);\n\n        let $outgoingSlide = $(slick.$slides.get(currentSlide));\n        $outgoingSlide.addClass('-outgoing').addClass('-leaving');\n\n        const movingToClonedSlide = currentSlide === lastSlide && nextSlide === nextSlide || currentSlide === 0 && nextSlide === lastSlide;\n        setTimeout(() => {\n          //Remove the direction and animate the text in\n          $(this).removeClass('direction-left').removeClass('direction-right');\n          $outgoingSlide.removeClass('-outgoing');\n        }, movingToClonedSlide ? 600 : 100); //Cloned slides take longer to initialise\n\n        setTimeout(() => {\n          $outgoingSlide.removeClass('-leaving');\n        }, 1000);\n\n      }).on('afterChange', function (event, slick, currentSlide) {\n        if (afterChange) {\n          afterChange(currentSlide);\n        }\n      });\n    });\n  };\n\n  /// Wide images inside rich text content\n  // To use: add class 'uncontain' to image, or add alt text ending 'fullwidth'\n  theme.uncontainImages = function (container) {\n    // set up\n    $('.reading-column [data-fullwidth]:not(.uncontain)', container).addClass('uncontain');\n    // event\n    if ($('.reading-column .uncontain').length > 0) {\n      function checkWideImages() {\n        var contW = $('#page-wrap-inner').css('border-color') == 'rgb(255, 0, 1)' ? $(window).width() : $('.container:visible:first').width();\n        $('.reading-column .uncontain').each(function () {\n          var thisContW = $(this).closest('div:not(.uncontain), p:not(.uncontain)').width();\n          $(this).css({\n            width: contW,\n            marginLeft: -(contW - thisContW) / 2.0,\n            maxWidth: 'none'\n          });\n        });\n      }\n      $(window).on('resize.wideimgs wideimgs.wideimgs', checkWideImages).trigger('wideimgs');\n      $(function () {\n        checkWideImages();\n      });\n    } else {\n      $(window).off('.wideimgs');\n    }\n  };\n\n  /// Cookie management\n\n\n\n\n  /// Format money wrapper\n  theme.formatMoney = function (price) {let format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : theme.money_format_with_code_preference;\n    let formattedMoney = theme.Shopify.formatMoney(price, format);\n    if (theme.settings.superscriptDecimals) {\n      if (format.includes(\"{{amount}}\") || format.includes(\"{{ amount }}\") || format.includes(\"{{amount_with_apostrophe_separator}}\") || format.includes(\"{{ amount_with_apostrophe_separator }}\")) {\n        formattedMoney = formattedMoney.replace(\".\", \"<sup>\");\n        if (theme.settings.currencyCodeEnabled) {\n          formattedMoney = formattedMoney.replace(' ', '</sup> ');\n        }\n        formattedMoney += \"</sup>\";\n      } else if (format.includes(\"{{amount_with_comma_separator}}\") || format.includes(\"{{ amount_with_comma_separator }}\")) {\n        formattedMoney = formattedMoney.replace(\",\", \"<sup>\");\n        if (theme.settings.currencyCodeEnabled) {\n          formattedMoney = formattedMoney.replace(' ', '</sup> ');\n        }\n        formattedMoney += \"</sup>\";\n      }\n    }\n    return formattedMoney;\n  };\n\n  theme.utils = {\n    getUrlParameter: function (name) {\n      name = name.replace(/[\\[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\n      var regex = new RegExp('[\\\\?&]' + name + '=([^&#]*)');\n      var results = regex.exec(location.search);\n      return results === null ? '' : decodeURIComponent(results[1].replace(/\\+/g, ' '));\n    },\n    cookie: {\n      create: function (name, value, days) {\n        var expires = \"\";\n        if (days) {\n          var date = new Date();\n          date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n          expires = \"; expires=\" + date.toUTCString();\n        }\n        document.cookie = name + \"=\" + value + expires + \"; path=/\";\n      },\n      read: function (name) {\n        var nameEQ = name + \"=\";\n        try {\n          var ca = document.cookie.split(';');\n          for (var i = 0; i < ca.length; i++) {\n            var c = ca[i];\n            while (c.charAt(0) == ' ') c = c.substring(1, c.length);\n            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);\n          }\n        } catch (error) {}\n        return null;\n      },\n      erase: function (name) {\n        theme.utils.cookie.create(name, \"\", -1);\n      },\n      exists: function (name) {\n        return typeof theme.utils.cookie.read(name) != 'undefined';\n      }\n    }\n  };\n\n  /*============== Components ===============*/\n  theme.OptionManager = new function () {\n    var _ = this;\n\n    _._getVariantOptionElement = function (variant, $container) {\n      return $container.find('select[name=\"id\"] option[value=\"' + variant.id + '\"]');\n    };\n\n    _.selectors = {\n      container: '.product-container',\n      gallery: '.product-gallery',\n      priceArea: '.product-price',\n      variantIdInputs: '[name=\"id\"]',\n      purchaseForm: '.product-purchase-form',\n      primaryVariantIdInput: '.product-purchase-form [name=\"id\"]',\n      submitButton: '.product-form input[type=submit], .product-form button[type=submit]',\n      multiOption: '.option-selectors',\n      installmentsFormSuffix: '-installments'\n    };\n\n    _.strings = {\n      priceNonExistent: theme.strings.priceNonExistent,\n      buttonDefault: theme.strings.buttonDefault,\n      buttonNoStock: theme.strings.buttonNoStock,\n      buttonNoVariant: theme.strings.buttonNoVariant,\n      unitPriceSeparator: theme.strings.unitPriceSeparator,\n      inventoryNotice: theme.strings.onlyXLeft\n    };\n\n    _._getString = function (key, variant) {\n      var string = _.strings[key];\n      if (variant) {\n        string = string.replace('[PRICE]', '<span class=\"theme-money\">' + theme.formatMoney(variant.price) + '</span>');\n      }\n      return string;\n    };\n\n    _.getProductData = function ($form) {\n      var productId = $form.data('product-id');\n      var data = null;\n      if (!theme.productData[productId]) {\n        const productJsonElem = document.getElementById('ccProductJson-' + productId);\n        if (productJsonElem) {\n          theme.productData[productId] = JSON.parse(productJsonElem.innerHTML);\n        }\n      }\n      data = theme.productData[productId];\n      if (!data) {\n        console.warn('CC: Product data missing (id: ' + $form.data('product-id') + ')');\n      }\n      return data;\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    _.updateWeight = function (variant, $container) {\n      var weightData = _._getVariantOptionElement(variant, $container).data('weight');\n      if (weightData) {\n        $container.find('.product-weight').removeClass('product-weight--no-weight').\n        find('.product-weight__value').html(weightData);\n      } else {\n        $container.find('.product-weight').addClass('product-weight--no-weight').\n        find('.product-weight__value').empty();\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    _.updateInventoryNotice = function (variant, $container) {\n      var inventoryData = _._getVariantOptionElement(variant, $container).data('inventory');\n      if (inventoryData) {\n        $container.find('.product-inventory-notice').removeClass('product-inventory-notice--no-inventory').html(\n        _._getString('inventoryNotice').replace('[[ quantity ]]', inventoryData));\n\n      } else {\n        $container.find('.product-inventory-notice').addClass('product-inventory-notice--no-inventory').empty();\n      }\n    };\n\n    _.updateInventoryLimit = function (variant, $container) {\n      var inventoryData = _._getVariantOptionElement(variant, $container).data('inventory');\n      if (inventoryData) {\n        $container.find('[data-limit]').attr('data-limit', inventoryData);\n      } else {\n        $container.find('[data-limit]').attr('data-limit', \"\");\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').html(productData.title + (variant.title.indexOf('Default') >= 0 ? '' : ' - ' + variant.title));\n            $backorder.removeClass('hidden');\n          } else {\n            $backorder.addClass('hidden');\n          }\n        } else {\n          $backorder.addClass('hidden');\n        }\n      }\n    };\n\n    _.updatePrice = function (variant, $container) {\n      var $priceArea = $container.find(_.selectors.priceArea);\n      $priceArea.removeClass('on-sale');\n\n      if (variant) {\n        var $newPriceArea = $('<div>');\n        $('<span class=\"current-price theme-money\">').html(theme.formatMoney(variant.price)).appendTo($newPriceArea);\n\n        if (variant.compare_at_price > variant.price) {\n          $newPriceArea.append(' ');\n          $('<span class=\"was-price theme-money\">').html(theme.formatMoney(variant.compare_at_price)).appendTo($newPriceArea);\n          $priceArea.addClass('on-sale');\n        }\n        if (variant.unit_price_measurement) {\n          var $newUnitPriceArea = $('<div class=\"unit-price\">').appendTo($newPriceArea);\n          $('<span class=\"unit-price__price theme-money\">').html(theme.formatMoney(variant.unit_price, theme.money_format)).appendTo($newUnitPriceArea);\n          $('<span class=\"unit-price__separator\">').html(_._getString('unitPriceSeparator')).appendTo($newUnitPriceArea);\n          $('<span class=\"unit-price__unit\">').html(_.getBaseUnit(variant)).appendTo($newUnitPriceArea);\n        }\n        $priceArea.html($newPriceArea.html());\n      } else {\n        $priceArea.html(_._getString('priceNonExistent', variant));\n      }\n    };\n\n    _._updateButtonText = function ($button, string, variant) {\n      $button.each(function () {\n        var newVal;\n        newVal = _._getString('button' + string, variant);\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      var $buttonText = $container.find(_.selectors.submitButton + ' .button-text');\n\n      if (variant && variant.available == true) {\n        $button.removeAttr('disabled').attr('data-btn-type', 'add-to-cart').removeClass('product-add--adding');\n        _._updateButtonText($buttonText, 'Default', variant);\n      } else {\n        $button.attr('disabled', 'disabled').attr('data-btn-type', 'unavailable');\n        if (variant) {\n          _._updateButtonText($buttonText, 'NoStock', variant);\n        } else {\n          _._updateButtonText($buttonText, 'NoVariant', variant);\n        }\n      }\n    };\n\n    _.updateContainerStatusClasses = function (variant, $container) {\n      $container.toggleClass('variant-status--unavailable', !variant.available);\n      $container.toggleClass('variant-status--backorder', variant.available &&\n      variant.inventory_management &&\n      _._getVariantOptionElement(variant, $container).data('stock') == 'out');\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).closest(_.selectors.multiOption).find('select').each(function () {\n          selectedOptions.push($(this).val());\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      $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          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          // update price\n          _.updatePrice(variant, $container);\n\n          // update buttons\n          _.updateButtons(variant, $container);\n\n          // variant images\n          if (variant && variant.featured_media) {\n            $container.find(_.selectors.gallery).trigger('variantImageSelected', variant);\n          }\n\n          // extra details\n          _.updateBarcode(variant, $container);\n          _.updateWeight(variant, $container);\n          _.updateSku(variant, $container);\n          _.updateInventoryNotice(variant, $container);\n          _.updateBackorder(variant, $container);\n          _.updateContainerStatusClasses(variant, $container);\n          _.updateInventoryLimit(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 urls\n          if ($productForm.data('enable-history-state') && e.type == 'change') {\n            _.addVariantUrlToHistory(variant);\n          }\n\n          // notify quickbuy of content change\n          $container.find('.quickbuy-container').trigger('changedsize');\n        });\n\n        // first-run\n        $(this).trigger('firstrun');\n      });\n\n      // ajax\n      theme.applyAjaxToProductForm($productForm);\n    };\n\n    _.unloadProductOptions = function ($productForm) {\n      $productForm.removeClass('theme-init').each(function () {\n        $(this).trigger('unloading').off('.themeProductOptions');\n        $(this).closest(_.selectors.container).find(_.selectors.multiOption).off('.themeProductOptions');\n        theme.removeAjaxFromProductForm($(this));\n      });\n    };\n  }();\n  ;\n  theme.loadCartNoteMonitor = function (container) {\n    $('.cart-form [name=\"note\"]', container).on('change.themeLoadCartNoteMonitor', function () {\n      $.post(theme.routes.cart_url + '/update.js', {\n        note: $(this).val()\n      }, function (data) {}, 'json');\n    });\n  };\n\n  theme.unloadCartNoteMonitor = function (container) {\n    $('.cart-form [name=\"note\"]', container).off('change.themeLoadCartNoteMonitor');\n  };\n\n  theme.loadProductGrid = function (container) {\n    $(window).trigger('normheights');\n    theme.loadInPlaceQuantityAdjustment(container);\n    theme.applyAjaxToProductForm($('.product-form', container));\n\n    $(container).on('mouseenter.swatchHover', '.swatch-option[data-media-url]', function () {\n      const $mainProductImage = $(this).closest('.product-block').find('.image__primary .rimage__image');\n      $mainProductImage.attr('data-lazy-src', $(this).data('media-url'));\n      theme.imageLazyLoader.loadLazyImage($mainProductImage[0]);\n    });\n  };\n\n  theme.unloadProductGrid = function (container) {\n    theme.unloadInPlaceQuantityAdjustment(container);\n    theme.removeAjaxFromProductForm($('.product-form', container));\n    $(container).off('.swatchHover');\n  };\n\n  theme.ProductMediaGallery = function ($gallery) {\n    const _this = this;\n    let currentMedia;\n    let initialisedMedia = {};\n    const $viewInSpaceButton = $gallery.find('.view-in-space');\n    let vimeoApiReady = false;\n    const zoomEnabled = $gallery.data('enable-zoom') && !theme.device.isTouch();\n    const mobileSlideshowNav = $gallery.data('slideshow-mob-nav');\n    let thumbnailClicked = false;\n    let isFirstSlideTo = true;\n\n    $(window).on('resize', function () {\n      $('.thumbnails', $gallery).width('100%').width($('.thumbnails', $gallery).width());\n    });\n\n    // Init product gallery thumbnails\n    const productThumbnailsSlick = $('.thumbnails', $gallery).on('init reInit setPosition', function ($slick) {\n      var lastSlide = $(this).find('.slick-slide:last');\n      if (lastSlide.length > 0) {\n        var slideInnerWidth = lastSlide.position().left + lastSlide.outerWidth(true);\n        var carouselWidth = $(this).width();\n        $(this).toggleClass('slick-slider--all-visible', carouselWidth > slideInnerWidth);\n      }\n\n      // Enable tabbing between slides\n      setTimeout(function () {\n        $($slick.target).find('.slick-slide').attr({\n          \"tabindex\": \"0\",\n          \"aria-hidden\": \"false\"\n        });\n      });\n\n    }).slick({\n      slidesToShow: 7,\n      slidesToScroll: 4,\n      infinite: false,\n      speed: 400,\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      responsive: [\n      {\n        breakpoint: 1500,\n        settings: {\n          slidesToShow: 6,\n          slidesToScroll: 3\n        }\n      },\n      {\n        breakpoint: 1200,\n        settings: {\n          slidesToShow: 5,\n          slidesToScroll: 3\n        }\n      },\n      {\n        breakpoint: 767,\n        settings: {\n          arrows: false,\n          slidesToShow: 4.5,\n          slidesToScroll: 4\n        }\n      }]\n\n    });\n\n    // Init main image slideshow\n    const mainProductImageSlick = $('.product-slideshow', $gallery).slick({\n      fade: false,\n      speed: 500,\n      arrows: true,\n      dots: false,\n      infinite: false,\n      useTransform: true,\n      adaptiveHeight: 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      cssEase: 'cubic-bezier(0.25, 1, 0.5, 1)',\n      responsive: [\n      {\n        breakpoint: 767,\n        settings: {\n          dots: mobileSlideshowNav === \"dots\" ? true : false,\n          arrows: mobileSlideshowNav === \"arrows\" ? true : false\n        }\n      }]\n\n\n    }).on('beforeChange', function (event, slick, currentSlide, nextSlide) {\n      const $nextSlide = $(slick.$slides.get(nextSlide));\n      const $nextThumb = $(`.thumbnail[data-media-id=\"${$nextSlide.data('media-id')}\"]`, $gallery);\n\n      $gallery.attr('data-full-image-width', $nextThumb.data('full-image-width'));\n      $nextThumb.addClass('active').siblings('.active').removeClass('active');\n\n      if (thumbnailClicked === false) {\n        productThumbnailsSlick.slick('slickGoTo', $nextThumb.index());\n      } else {\n        thumbnailClicked = false;\n      }\n\n      $gallery.attr('data-current-media-type', $nextSlide.data('media-type'));\n\n      //Set the current media\n      _this.setCurrentMedia($nextSlide, false);\n\n    }).on('afterChange', function (event, slick, currentSlide) {\n      //Update the zoom image zoom\n      $gallery.trigger('refresh-zoom');\n\n      // Force redraw of video player controls to fix bug with slick + video player\n      const $currentSlide = $(slick.$slides.get(currentSlide));\n      if ($currentSlide.data('media-host') === \"local\") {\n        const video = $currentSlide[0].querySelector('.js-video');\n        if (video) {\n          video.style.width = \"calc(100% - 1px)\";\n          setTimeout(() => {\n            video.style.width = \"100%\";\n          });\n        }\n      }\n    });\n\n\n    this.Image = function ($elem) {\n      this.destroy = function () {\n        $gallery.trigger('zoom.destroy');\n      };\n\n      this.pause = function () {\n        $gallery.trigger('zoom.destroy');\n      };\n\n      if ($gallery.closest('.quickbuy-form').length) {\n        $.colorbox.resize();\n      }\n    };\n\n    this.Video = function ($elem) {\n      const elem = $elem[0];\n      const poster = elem.querySelector('.product-media__poster');\n      let video;\n\n      // Init the video\n      const template = elem.querySelector('template');\n      if (template) {\n        const frame = elem.querySelector('.product-media--frame-inner');\n\n        if (theme.browser.isSafari() && elem.dataset.mediaHost === \"local\") {\n          const videoTag = template.content.querySelector('.js-video');\n          videoTag.setAttribute('autoplay', 'autoplay');\n        }\n\n        // frame.appendChild(template.content);\n        // template.remove();\n        // frame.style.paddingBottom =\n        // 100 / elem.querySelector('video, iframe').getAttribute('aspect-ratio') + '%';\n        // $elem.closest('.slick-slider').slick('refresh');\n\n        frame.appendChild(template.content);\n        template.remove();\n\n        // Updated line: set padding-bottom to 100% (Square aspect ratio)\n        frame.style.paddingBottom = '100%'; \n\n        $elem.closest('.slick-slider').slick('refresh');\n\n        // reference the video\n        video = elem.querySelector('.js-video');\n\n        // hide poster\n        if (theme.viewport.isSm()) {\n          poster.classList.add('product-media__poster--hide');\n        }\n      }\n\n      this.play = function () {\n        if (video) {\n          switch (elem.dataset.mediaHost) {\n            case \"youtube\":\n              video.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"' + 'playVideo' + '\",\"args\":\"\"}', '*');\n              break;\n            case \"vimeo\":\n              video.contentWindow.postMessage('{\"method\":\"play\"}', '*');\n              break;\n            case \"local\":\n              video.play();\n              break;}\n\n        }\n        poster.classList.add('product-media__poster--hide');\n      };\n\n      this.pause = function () {\n        if (video) {\n          switch (elem.dataset.mediaHost) {\n            case \"youtube\":\n              video.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"' + 'pauseVideo' + '\",\"args\":\"\"}', '*');\n              break;\n            case \"vimeo\":\n              video.contentWindow.postMessage('{\"method\":\"pause\"}', '*');\n              break;\n            case \"local\":\n              video.pause();\n              break;}\n\n        }\n      };\n\n      this.destroy = function () {\n      };\n\n      poster.addEventListener('click', this.play, { once: true });\n\n      initialisedMedia[$elem.data('media-id')] = this;\n    };\n\n    this.Model = function ($elem) {\n      var _model = this;\n      var playerObj = {\n        play: function () {\n        },\n        pause: function () {\n        },\n        destroy: function () {\n        }\n      };\n      var modelElement = $elem.find('model-viewer')[0];\n\n      this.init = function () {\n        if (window.ShopifyXR && $viewInSpaceButton.length) {\n          //Change the view in space button to launch this model\n          $viewInSpaceButton.attr('data-shopify-model3d-id', $elem.data('media-id'));\n          window.ShopifyXR.setupXRElements();\n        }\n      };\n\n      this.play = function () {\n        playerObj.play();\n      };\n\n      this.pause = function () {\n        if (window.ShopifyXR && $viewInSpaceButton.length) {\n          //Reset the view in space button to launch the first model\n          $viewInSpaceButton.attr('data-shopify-model3d-id', $viewInSpaceButton.data('shopify-model3d-first-id'));\n          $viewInSpaceButton.attr('data-shopify-title', $viewInSpaceButton.data('shopify-first-title'));\n          window.ShopifyXR.setupXRElements();\n        }\n      };\n\n      this.destroy = function () {\n\n        //Nothing needed\n      };\n      this.initAugmentedReality = function () {\n        if ($('.model-json', $gallery).length) {\n          var doInit = function () {\n            if (!window.ShopifyXR) {\n              document.addEventListener('shopify_xr_initialized', function shopifyXrEventListener(event) {\n                doInit();\n\n                //Ensure this only fires once\n                event.target.removeEventListener(event.type, shopifyXrEventListener);\n              });\n\n              return;\n            }\n\n            window.ShopifyXR.addModels(JSON.parse($('.model-json', $gallery).html()));\n            window.ShopifyXR.setupXRElements();\n          };\n\n          window.Shopify.loadFeatures([{\n            name: 'shopify-xr',\n            version: '1.0',\n            onLoad: doInit\n          }]);\n        }\n      };\n\n      //Init the model\n      theme.loadStyleOnce('https://cdn.shopify.com/shopifycloud/model-viewer-ui/assets/v1.0/model-viewer-ui.css');\n\n      window.Shopify.loadFeatures([\n      {\n        name: 'model-viewer-ui',\n        version: '1.0',\n        onLoad: function () {\n          playerObj = new Shopify.ModelViewerUI(modelElement);\n\n          // if ($(window).width() >= 768) {\n          //   _model.play();\n          // }\n        }.bind(this)\n      }]);\n\n\n      $elem.find('model-viewer').on('shopify_model_viewer_ui_toggle_play', function () {\n        $elem.addClass('product-media-model--playing');\n\n        // Prevent swiping/left/right key control\n        mainProductImageSlick.slick('slickSetOption', 'swipe', false);\n        mainProductImageSlick.slick('slickSetOption', 'accessibility', false);\n      });\n\n      $elem.find('model-viewer').on('shopify_model_viewer_ui_toggle_pause', function () {\n        $elem.removeClass('product-media-model--playing');\n\n        // Enable swiping/left/right key control\n        mainProductImageSlick.slick('slickSetOption', 'swipe', true);\n        mainProductImageSlick.slick('slickSetOption', 'accessibility', true);\n      });\n\n      initialisedMedia[$elem.data('media-id')] = _model;\n\n      if (!window.ShopifyXR) {\n        _model.initAugmentedReality();\n      }\n    };\n\n    this.pauseAllMedia = function () {\n      for (let key in initialisedMedia) {\n        if (initialisedMedia.hasOwnProperty(key)) {\n          initialisedMedia[key].pause();\n        }\n      }\n    };\n\n    this.setCurrentMedia = function ($mediaToShow, slideTo, updateThumbSlider) {let autoPlay = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n      //In with the new\n      if ($mediaToShow.length) {\n        if (slideTo) {\n          thumbnailClicked = !updateThumbSlider;\n          mainProductImageSlick.slick('slickGoTo', $mediaToShow.data('slick-index'), isFirstSlideTo);\n          isFirstSlideTo = false;\n        }\n\n        //Out with the old\n        this.pauseAllMedia();\n\n        //Function to instantiate and return the relevant media\n        const getMedia = function (MediaType) {\n          let media;\n\n          if (initialisedMedia.hasOwnProperty($mediaToShow.data('media-id'))) {\n            media = initialisedMedia[$mediaToShow.data('media-id')];\n          } else {\n            media = new MediaType($mediaToShow);\n          }\n\n          if (typeof media.init === \"function\") {\n            //Init models\n            media.init();\n          } else if ($(window).width() >= 768 && typeof media.play === \"function\" && autoPlay) {\n            //Play videos\n            media.play();\n          }\n\n          return media;\n        };\n\n        //Initialise the media\n        if ($mediaToShow.data('media-type') === \"image\") {\n          currentMedia = getMedia(_this.Image);\n        } else if ($mediaToShow.data('media-type') === \"video\") {\n          currentMedia = getMedia(_this.Video);\n        } else if ($mediaToShow.data('media-type') === \"model\") {\n          currentMedia = getMedia(_this.Model);\n        } else {\n          console.warn('CC: Media is unknown', $mediaToShow);\n        }\n      }\n    };\n\n    this.destroy = function () {\n      for (let key in initialisedMedia) {\n        if (initialisedMedia.hasOwnProperty(key)) {\n          initialisedMedia[key].destroy();\n        }\n      }\n\n      $('.main a.main-img-link--lightbox', $gallery).off('click');\n      $('.thumbnails .thumbnail', $gallery).off('click');\n      $('.thumbnails', $gallery).slick('unslick').off('init reInit setPosition');\n      $('.product-slideshow', $gallery).slick('unslick');\n      $gallery.off('variantImageSelected');\n    };\n\n    // Lazy init all media\n    setTimeout(() => {\n      $gallery.find('.product-media').each(function (index) {\n        _this.setCurrentMedia($(this), false, false, false);\n      });\n    }, 1000);\n\n    // If the media does not contain an image, remove the gallery loading veil\n    if ($gallery.find('.product-media--image').length === 0 && $gallery.find('.product-gallery--hover-veil').length === 1 ||\n    $gallery.data('enable-zoom') && theme.device.isTouch()) {\n      $gallery.find('.product-gallery--hover-veil').remove();\n    }\n\n    // Clicking on a lightbox\n    $gallery.on('click', '.main a.main-img-link--lightbox', function () {\n      //Don't do anything if the screen isn't very large. Otherwise, lightbox ahoy...\n      if ($(window).height() >= 580 && $(window).width() >= 768) {\n        if ($gallery.find('img:not(.zoomImg)').length == 1) {\n          //One image only?\n          $.colorbox({ href: $(this).attr('href'), minWidth: '200', maxWidth: '96%', maxHeight: '96%' });\n        } else {\n          //Many images. Dupe thumbs to create a faux-gallery\n          $('#gallery-cont').remove();\n          var $galleryCont = $('<div id=\"gallery-cont\"/>').append(\n          $gallery.find('.thumbnails a[data-media-type=\\'image\\']').clone().attr({ rel: 'gallery', title: '' })).\n          hide().appendTo('body');\n          //Trigger box (on the right one)\n          $galleryCont.children().colorbox({\n            className: 'product-gallery--popup',\n            minWidth: '200',\n            maxWidth: '96%',\n            maxHeight: '96%',\n            next: theme.icons.right,\n            previous: theme.icons.left,\n            close: theme.icons.close\n          }).filter('[href=\"' + $(this).attr('href') + '\"]').first().click();\n        }\n      }\n      return false;\n    });\n\n    // Product gallery thumbnail click\n    $gallery.on('click', '.thumbnails .thumbnail', function (e) {\n      e.preventDefault();\n      const $mediaToShow = $gallery.find(`.product-media[data-media-id=\"${$(this).data('media-id')}\"]`);\n      _this.setCurrentMedia($mediaToShow, true, false);\n    });\n\n    // Watch for change of variant\n    $gallery.on('variantImageSelected', function (e, data) {\n      const $mediaToShow = $gallery.find(`.product-media[data-media-id=\"${data.featured_media.id}\"]`);\n      _this.setCurrentMedia($mediaToShow, true, true);\n    });\n\n    // Product gallery zoom\n    $gallery.on('initzoom', function () {\n      if (zoomEnabled) {\n        let prevImage;\n\n        function refreshZoom() {\n          const $img = $gallery.find('.main .product-media.slick-active .main-img-link');\n\n          if ($img.length && $img.attr('href') !== prevImage) {\n            $gallery.removeClass('gallery-loaded');\n\n            //Preload the zoom image\n            const imgPreload = new Image();\n            imgPreload.onload = () => {\n              setTimeout(() => {\n                $gallery.addClass('gallery-loaded');\n              }, 0);\n            };\n            imgPreload.src = $img.attr('href');\n            prevImage = $img.attr('href');\n\n            $img.trigger('zoom.destroy').removeClass('zoom-enabled');\n\n            // Only initialise zoom when device is not mobile and  original image is wider than container\n            if (theme.viewport.isSm() && $gallery.width() < $gallery.data('full-image-width')) {\n              if (!$img.hasClass('zoom-enabled')) {\n                $img.zoom({ url: $img.attr('href') }).addClass('zoom-enabled');\n              }\n            }\n          }\n        }\n\n        refreshZoom();\n        $(window).on('debouncedresize', refreshZoom);\n        $gallery.on('refresh-zoom', refreshZoom);\n      }\n    });\n\n    //Update the zoom image zoom\n    $gallery.trigger('initzoom');\n  };\n  ;\n  theme.initProductForm = function ($formContainer) {\n    const isMainProductForm = $formContainer.hasClass('product-form--main');\n\n    // Most dynamic features only apply to the main product form, not mini ones\n    if (!isMainProductForm) {\n      return;\n    }\n\n    const productData = theme.OptionManager.getProductData($formContainer);\n    const $qtyAdj = $formContainer.find('.product-purchase-form .qty-adjuster');\n\n    /// Product options\n    theme.OptionManager.initProductOptions($formContainer);\n\n    // Product form button-options\n    var toMakeClicky = ',' + $formContainer.find('.option-selectors').data('box-options') + ',';\n    var $clickies = $('.selector-wrapper:not(.has-clickyboxes) select', $formContainer).filter(function () {\n      return toMakeClicky.indexOf(',' + $(this).closest('.selector-wrapper').find('label').html() + ',') >= 0;\n    }).clickyBoxes().parent().addClass('has-clickyboxes');\n\n    // If we have clicky boxes, add the disabled-state to options that have no valid variants\n    if ($clickies.length > 0) {\n\n      // Each option\n      for (var optionIndex = 0; optionIndex < productData.options.length; optionIndex++) {\n        // List each value for this option\n        var optionValues = {};\n        for (var variantIndex = 0; variantIndex < productData.variants.length; variantIndex++) {\n          var variant = productData.variants[variantIndex];\n          if (typeof optionValues[variant.options[optionIndex]] === 'undefined') {\n            optionValues[variant.options[optionIndex]] = false;\n          }\n          // Mark true if an option is available\n          if (variant.available) {\n            optionValues[variant.options[optionIndex]] = true;\n          }\n        }\n        // Mark any completely unavailable options\n        for (var key in optionValues) {\n          if (!optionValues[key]) {\n            $('.selector-wrapper:eq(' + optionIndex + ') .clickyboxes li a', $formContainer).filter(function () {\n              return $(this).attr('data-value') == key;\n            }).addClass('unavailable');\n          }\n        }\n      }\n    }\n\n    /// Style up select-dropdowns\n    $formContainer.find('select:not([name=\"id\"])').selectReplace().closest('.selector-wrapper').addClass('has-pretty-select');\n\n    /// In lightbox? resize after any content changes\n    if ($formContainer.closest('.quickbuy-form').length) {\n      $formContainer.find('[name=\"id\"]').on('change', function () {\n        setTimeout(function () {\n          $.colorbox.resize();\n        }, 10);\n      });\n    }\n\n    function updateAjaxButtons() {\n      var currentVariantId = $formContainer.find('.product-purchase-form select[name=\"id\"]').val();\n      var cartItemData = JSON.parse($('#LimitedCartJson').html());\n      var cartContainsThisVariant = false;\n      var thisCartItem;\n\n      if (cartItemData && cartItemData.items && currentVariantId) {\n        cartContainsThisVariant = cartItemData.items.some((variant) => {\n          if (variant.id == currentVariantId) {\n            thisCartItem = variant;\n            return true;\n          }\n        });\n      }\n      $qtyAdj.attr('data-line-item-id', currentVariantId);\n\n      if (cartContainsThisVariant) {\n        var $addButton = $formContainer.find('.product-purchase-form .product-add');\n\n        if ($addButton.data('gift-card') == false) {\n          $addButton.removeClass('product-add--adding');\n          $addButton.attr('data-btn-type', 'in-cart');\n          $addButton.find('.button-text').text(theme.strings.removeFromCart);\n        }\n\n        theme.loadInPlaceQuantityAdjustment($('body'), cartItemData);\n        theme.applyAjaxToProductForm($formContainer);\n        $formContainer.find('.product-purchase-form .qty-adjuster__value').val(thisCartItem.quantity);\n        theme.updateAdjusterButtonsDisabledState($qtyAdj, false, true);\n      } else {\n        $formContainer.removeClass('product-form--added');\n\n        theme.updateAdjusterButtonsDisabledState($qtyAdj, true);\n        $formContainer.find('.product-purchase-form .qty-adjuster--loading').removeClass('qty-adjuster--loading');\n      }\n    }\n\n    const formHasAjaxButtons = $formContainer.hasClass('product-form--not-quickbuy');\n    const cartPageJsDisabled = $formContainer.hasClass('feedback-go_to_cart');\n    const cartPageJsEnabled = $formContainer.hasClass('feedback-add_and_redirect');\n\n    if (formHasAjaxButtons && !cartPageJsDisabled && !cartPageJsEnabled) {\n      updateAjaxButtons();\n\n      $(window).on('cc-cart-updated', () => {\n        $('[name=\"id\"]', $formContainer).trigger('change');\n      });\n    }\n\n    $(window).on(`cc-variant-updated.ajax-buttons${productData.id}`, (e, args) => {\n      if (args.product.id === productData.id) {\n        if (args.variant.available) {\n          if (formHasAjaxButtons) {\n            updateAjaxButtons();\n          } else {\n            theme.updateAdjusterButtonsDisabledState($qtyAdj, true);\n          }\n        } else {\n          theme.updateAdjusterButtonsDisabledState($qtyAdj, true);\n        }\n\n        // Update the variant swatch label if appropriate\n        const $variantSwatchValue = $formContainer.find('.variant-swatch-value');\n        if ($variantSwatchValue.length) {\n          $variantSwatchValue.html(`: ${$variantSwatchValue.closest('.selector-wrapper').find('.active').html()}`);\n        }\n      }\n    });\n  };\n\n  theme.unloadProductForm = function ($formContainer) {\n    theme.OptionManager.unloadProductOptions($formContainer);\n    $formContainer.find('[name=\"id\"]').off('change');\n    $formContainer.find('.clickybox-replaced').clickyBoxes('destroy');\n    $('select.replaced', $formContainer).selectReplace('destroy');\n    $formContainer.find('.qty-adjuster').off('click');\n\n    var productData = theme.OptionManager.getProductData($formContainer);\n    if (productData) {\n      $(window).off(`cc-variant-updated.ajax-buttons${productData.id}`);\n    }\n  };\n\n  theme.applyAjaxToProductForm = function ($formContainer) {\n    var shopifyAjaxAddURL = theme.routes.cart_add_url + '.js';\n\n    $formContainer.filter('[data-ajax-add-to-cart=\"true\"]:not(.feedback-go_to_cart)').\n    find('form.product-purchase-form:not(.product-form-loaded), form.mini-product-purchase-form:not(.product-form-loaded)').\n    addClass('product-form-loaded').on('submit', function (e) {\n      e.preventDefault();\n      let $form = $(this);\n      let $thisFormContainer = $form.closest('.product-form');\n      let quantity = 1;\n      const $quantity = $form.find('.qty-adjuster__value');\n\n      if ($quantity.length) {\n        quantity = $quantity.val();\n      }\n\n      // Disable add button\n      $form.find(':submit').attr('disabled', 'disabled').each(function () {\n        $(this).addClass('product-add--adding');\n      });\n\n      var $btns = $form.find(':submit');\n\n      // Add class to page\n      theme.cartLoadingStarted();\n\n      let serializedForm = $form.serialize();\n      if (serializedForm.indexOf('quantity=') === -1) {\n        serializedForm += `&quantity=${quantity}`;\n      }\n\n      // Add to cart\n      $.post(shopifyAjaxAddURL, serializedForm, function (itemData) {\n        theme.utils.cookie.create('theme_added_to_cart', 'justnow', 1);\n\n        // Update persistent cart summaries\n        // Enable add button\n        $btns.each(function () {\n          var $btn = $(this);\n          setTimeout(() => {\n            $btn.addClass('product-add--added').removeAttr('disabled');\n\n            setTimeout(() => {\n              $btn.removeClass('product-add--added').removeClass('product-add--adding');\n            }, 2000);\n          }, 500);\n        }).first();\n\n        theme.updateCartSummaries(\n        $thisFormContainer.data('open-cart-drawer') || theme.settings.openCartDrawerOnMob && $(window).outerWidth() < 1100,\n        true, !$thisFormContainer.hasClass('product-form--not-quickbuy'));\n\n        if ($thisFormContainer.hasClass('feedback-add_and_redirect')) {\n          window.location = theme.routes.cart_url;\n          return;\n        }\n      }, 'json').fail(function (data) {\n        // Enable add button\n        var $firstBtn = $form.find(':submit').removeAttr('disabled').each(function () {\n          var $btn = $(this);\n          var contentFunc = $btn.is('button') ? 'html' : 'val';\n          $btn[contentFunc]($btn.data('previous-value'));\n        }).first();\n\n        // Not added, show message\n        if (typeof data != 'undefined' && typeof data.status != 'undefined') {\n          const response = $.parseJSON(data.responseText);\n          const error = typeof response.description === 'string' ? response.description : response.message;\n\n          // Place the error popup\n          const errorsObject = response.errors;\n          if (errorsObject) {\n            const fieldNames = Object.keys(errorsObject);\n            let fieldMatch = false;\n            let inputField = '';\n            fieldNames.some((fieldName) => {\n              inputField = document.querySelector(`input[name=\"properties[Recipient ${fieldName}]\"]`);\n              if (inputField && !fieldMatch) {\n                fieldMatch = true;\n                return;\n              }\n            });\n            // If a field corresponding to the error is found, place the error popup above it. Else, place it above the quantity selector.\n            theme.showQuickPopup(error, fieldMatch ? inputField : $firstBtn);\n          } else {\n            theme.showQuickPopup(error, $firstBtn);\n          }\n        } else {\n          // Some unknown error? Disable ajax and submit the old-fashioned way.\n          $form.attr('ajax-add-to-cart', 'false').submit();\n        }\n\n        // Reset the buttons\n        $btns.each(function () {\n          $(this).removeClass('product-add--adding');\n        });\n      }).always(function () {\n        theme.cartLoadingFinished();\n      });\n    });\n  };\n\n  theme.removeAjaxFromProductForm = function ($productForm) {\n    $productForm.find('form.product-purchase-form').off('submit');\n  };\n\n  theme.updateAdjusterButtonsDisabledState = function ($qtyAdj, resetValue, isInCart) {\n    const $valueInput = $qtyAdj.find('.qty-adjuster__value');\n    let limit = $qtyAdj.attr('data-limit');\n    if (limit) {\n      limit = parseInt(limit);\n    }\n\n    if (resetValue) {\n      $valueInput.val('1');\n    }\n\n    const quantity = parseInt($valueInput.val());\n\n    if ($qtyAdj.closest('.variant-status--unavailable').length) {\n      $qtyAdj.find('.qty-adjuster__up,.qty-adjuster__down').attr('disabled', 'disabled');\n    } else {\n      if (quantity === limit) {\n        $qtyAdj.find('.qty-adjuster__up').attr('disabled', 'disabled');\n      } else {\n        $qtyAdj.find('.qty-adjuster__up').removeAttr('disabled');\n      }\n\n      if (quantity > 1) {\n        $qtyAdj.find('.qty-adjuster__down').removeAttr('disabled');\n      } else {\n        if (isInCart) {\n          $qtyAdj.find('.qty-adjuster__down').removeAttr('disabled');\n        } else {\n          $qtyAdj.find('.qty-adjuster__down').attr('disabled', 'disabled');\n        }\n      }\n    }\n\n    $valueInput.removeAttr('disabled');\n  };\n\n  theme.disableInPlaceQuantityAdjustment = function ($qtyAdj) {\n    $qtyAdj.addClass('qty-adjuster--loading');\n  };\n\n  theme.enableInPlaceQuantityAdjustment = function ($qtyAdj) {\n    $qtyAdj.removeClass('qty-adjuster--loading');\n  };\n\n  theme.loadInPlaceQuantityAdjustment = function (container, itemData) {\n    // handling both mini product forms and quantity updaters (inc in cart)\n    if ($('.qty-adjuster:first', container).length && theme.settings.cartType.includes('drawer')) {\n\n      function updateAdjustersWithItemData(data) {\n        // track in case item removed\n        $('.product-form--mini', container).addClass('product-form--temp-could-remove');\n\n        // update forms for item in cart\n        for (var i = 0; i < data.items.length; i++) {\n          var item = data.items[i],\n            $qtyAdj = null;\n          // mini form\n          let $productForm = $('.product-form--mini[data-product-id=\"' + item.product_id + '\"]', container);\n\n          if ($productForm.length) {\n            let $purchaseForm = $productForm.find('form.product-purchase-form, form.mini-product-purchase-form');\n\n            var $addBtn = $purchaseForm.find('.product-add');\n            if ($addBtn.length) {\n              $addBtn.css('height', $addBtn.outerHeight() + 'px');\n            }\n\n            $productForm.addClass('product-form--added').removeClass('product-form--temp-could-remove');\n            if ($productForm.hasClass('product-form--main')) {\n              $qtyAdj = $purchaseForm.find('.qty-adjuster');\n            } else {\n              $qtyAdj = $productForm.parent().find('.qty-adjuster');\n            }\n\n            if (!$productForm.hasClass('product-form--not-quickbuy')) {\n              $qtyAdj.attr('data-line-item-id', item.id);\n            }\n          }\n\n          // any qty adjuster\n          if (!$qtyAdj) {\n            $qtyAdj = $('.qty-adjuster[data-line-item-id=\"' + item.id + '\"]', container);\n          }\n          if ($qtyAdj) {\n            $qtyAdj.removeClass('qty-adjuster--loading');\n            if (!$productForm.hasClass('product-form--not-quickbuy')) {\n              $qtyAdj.find('.qty-adjuster__value').val(item.quantity);\n            }\n            $qtyAdj.find('.qty-adjuster__value').removeAttr('disabled');\n            theme.updateAdjusterButtonsDisabledState($qtyAdj, false, true);\n          }\n        }\n\n        // item removed, reset form\n        $('.product-form--temp-could-remove', container).removeClass('product-form--added product-form--temp-could-remove').each(function () {\n          if (this.querySelector('.mini-product-purchase-form')) {\n            theme.enableInPlaceQuantityAdjustment($(this).parent().find('.qty-adjuster'));\n          }\n        });\n      }\n\n      if (itemData) {\n        updateAdjustersWithItemData(itemData);\n      } else {\n        $.getJSON(theme.routes.cart_url + '.js', updateAdjustersWithItemData);\n      }\n    }\n  };\n\n  theme.unloadInPlaceQuantityAdjustment = function (container) {\n  };\n\n  theme.cartUpdatingRemoveTimeout = -1;\n\n  theme.cartLoadingStarted = function () {\n    $('body').addClass('updating-cart');\n  };\n\n  theme.cartLoadingFinished = function () {\n    clearTimeout(theme.cartUpdatingRemoveTimeout);\n    setTimeout(function () {\n      $('body').removeClass('updating-cart');\n    }, 500);\n  };\n\n  theme.updateCartSummaries = function (showCartSummary, isAddToCart, delayQtyAdjusterShow) {\n    theme.cartLoadingStarted();\n    var itemListScrollTop = $('.cart-summary__item-list:first').scrollTop(),\n      cartDrawerInnerScrollTop = $('.cart-summary__inner:first').scrollTop();\n    $.get(theme.routes.search_url, function (data) {\n      var selectors = [\n      '.toolbar-cart .current-cart',\n      '.cart-summary'];\n\n      // some little fiddles to make it parseable and resilient to broken markup\n      var $parsed = $($.parseHTML('<div>' + data + '</div>')).wrap('<div>').parent();\n      for (var i = 0; i < selectors.length; i++) {\n        var cartSummarySelector = selectors[i];\n        var $newCartObj = $parsed.find(cartSummarySelector).clone();\n        // do not transition images in again\n        $newCartObj.find('.fade-in').removeClass('fade-in');\n        var $currCart = $(cartSummarySelector);\n\n        //Maintain button container height to stop jumping while Buy it Now loads in\n        var $buttonContainer = $newCartObj.find('.cart-summary__buttons');\n        if ($buttonContainer.length) {\n          $buttonContainer.css('height', $currCart.find('.cart-summary__buttons').outerHeight() + 'px');\n        }\n\n        var $newCartItem = $newCartObj.find('.cart-summary-item-container').eq(0);\n\n        //Check if the new cart item already exists in the cart\n        if ($currCart.find(`.cart-summary-item-container[data-product-id=\"${$newCartItem.data('product-id')}\"]`).length) {\n          isAddToCart = false;\n        }\n\n        if (isAddToCart && $newCartItem.length) {\n          $newCartItem.addClass('cart-summary-item-container--out-left').hide();\n        }\n\n        const $cartForm = $('.cart-form--checkout', $currCart);\n        const $cartFormNonStick = $('.cart-form--non-stick', $currCart);\n\n        if ($cartForm.hasClass('cart-form--checkout--sticky-true') && $cartFormNonStick.length) {\n          $newCartObj.find('.cart-form--checkout').css('top', -Math.abs(parseInt($cartFormNonStick.outerHeight() + 1)) + 'px');\n        }\n\n        $currCart.replaceWith($newCartObj);\n\n        if (isAddToCart && $newCartItem.length) {\n          $newCartItem.slideDown(300);\n          $newCartItem.removeClass('cart-summary-item-container--out-left');\n        }\n\n        if ($buttonContainer.length) {\n          //Hopefully 'Buy it Now' has loaded in after 1 second\n          setTimeout(function () {\n            $(cartSummarySelector).find('.cart-summary__buttons').css('height', 'auto');\n          }, 1000);\n        }\n      }\n\n      var cartItemData;\n\n      if ($('#LimitedCartJson').length) {\n        cartItemData = JSON.parse($('#LimitedCartJson').html());\n\n        if (delayQtyAdjusterShow) {\n          setTimeout(() => {\n            theme.loadInPlaceQuantityAdjustment($('body'), cartItemData);\n          }, 800);\n        } else {\n          theme.loadInPlaceQuantityAdjustment($('body'), cartItemData);\n        }\n\n        theme.applyAjaxToProductForm($('.cart-summary form.product-form'));\n      }\n      theme.loadCartNoteMonitor($('.cart-summary'));\n\n      $('.cart-summary__item-list:first').scrollTop(itemListScrollTop);\n      $('.cart-summary__inner:first').scrollTop(cartDrawerInnerScrollTop);\n\n      if (theme.settings.cartType != 'page') {\n        //Show cart dropdown, if on a product page\n        if (showCartSummary) {\n          setTimeout(function () {\n            $('body').addClass('show-cart-summary product-added-to-cart');\n\n            setTimeout(function () {\n              $('.cart-summary__close').focus();\n            }, 200);\n          }, 20);\n        }\n        // Remove updating classes\n        $('.cart-summary.updating, .cart-summary .updating').removeClass('updating');\n\n        if (cartItemData) {\n          // emit an event to broadcast the cart is updated\n          $(window).trigger('cc-cart-updated', {\n            cartItemData: cartItemData\n          });\n        }\n      }\n    }).always(function () {\n      theme.cartLoadingFinished();\n    });\n  };\n\n  // Initialises Featured Collection(s) carousels\n  theme.carousels = {\n    init: () => {\n      let _this = this;\n\n      _this.updateArrows = (carousel) => {\n        const section = $(carousel).closest('.section, .cc-carousel-section')[0];\n\n        if (carousel.scrollLeft < 15) {\n          section.classList.add('cc-start');\n        } else {\n          section.classList.remove('cc-start');\n        }\n\n        if (carousel.scrollLeft + carousel.clientWidth > carousel.scrollWidth - 15) {\n          section.classList.add('cc-end');\n        } else {\n          section.classList.remove('cc-end');\n          section.classList.add('cc-carousel-scrolling');\n        }\n      };\n\n      _this.initArrows = () => {\n        const carousels = document.querySelectorAll(\".cc-carousel\");\n        carousels.forEach((carousel) => {\n          const $sectionContainer = $(carousel).closest('.section, .cc-carousel-section');\n          const $carouselNext = $sectionContainer.find('.cc-carousel--next');\n          const $carouselPrevious = $sectionContainer.find('.cc-carousel--previous');\n\n          $carouselNext.addClass('cc-initialized');\n          $carouselPrevious.addClass('cc-initialized');\n\n          if ($carouselNext.length && $carouselPrevious.length) {\n            $carouselNext.on('click.cc-carousel', function (evt) {\n              evt.preventDefault();\n\n              //Get the left hand edge of the next card out of view\n              let nextLeftOffset = -1;\n              const carouselOffsetLeft = $(this).closest('.section, .cc-carousel-section').find('.cc-carousel').offset().left;\n\n              $(carousel).find('.column').each(function () {\n                const offsetLeft = parseInt($(this).offset().left - carouselOffsetLeft);\n                if (offsetLeft > carousel.scrollLeft + carousel.clientWidth - 20 && nextLeftOffset === -1) {\n                  nextLeftOffset = offsetLeft;\n                }\n              });\n\n              if (nextLeftOffset === -1) {\n                nextLeftOffset = carousel.scrollLeft + carousel.clientWidth;\n              }\n\n              _this.scrollLeft(carousel, nextLeftOffset);\n            });\n\n            $carouselPrevious.on('click.cc-carousel', function (evt) {\n              evt.preventDefault();\n\n              //Get the left hand edge of the next card out of view\n              let nextLeftOffset = -1;\n\n              if (theme.viewport.isXs()) {\n                const carouselOffsetLeft = $(this).closest('.section, .cc-carousel-section').find('.cc-carousel').offset().left;\n                let prevLeftOffsets = {};\n\n                $(carousel).find('.column').each(function (index) {\n                  const offsetLeft = parseInt($(this).offset().left - carouselOffsetLeft);\n                  if (offsetLeft >= 0 && nextLeftOffset === -1) {\n                    if ($(this).hasClass('min-cols-2') && prevLeftOffsets[index - 2]) {\n                      nextLeftOffset = carousel.scrollLeft + prevLeftOffsets[index - 2];\n                    } else {\n                      nextLeftOffset = carousel.scrollLeft + prevLeftOffsets[index - 1];\n                    }\n                  }\n\n                  prevLeftOffsets[index] = offsetLeft;\n                });\n              }\n\n              if (nextLeftOffset === -1) {\n                nextLeftOffset = carousel.scrollLeft - carousel.clientWidth;\n              }\n\n              _this.scrollLeft(carousel, nextLeftOffset);\n            });\n          }\n\n          _this.updateArrows(carousel);\n        });\n      };\n\n      _this.scrollLeft = (carousel, left) => {\n        carousel.classList.add('cc-carousel--smooth-scroll');\n        carousel.scrollLeft = left;\n\n        setTimeout(() => {\n          _this.updateArrows(carousel);\n          carousel.classList.remove('cc-carousel--smooth-scroll');\n        }, 1000); // unsure about this number\n      };\n\n      _this.initMobileCarousels = () => {\n        if (theme.viewport.isXs()) {\n          const uninitializedMobCarousels = document.querySelectorAll(\".cc-carousel-mobile:not(.cc-carousel)\");\n          uninitializedMobCarousels.forEach((carousel) => {\n            carousel.classList.add('cc-carousel');\n            const $sectionContainer = $(carousel).closest('.section, .cc-carousel-section');\n            $sectionContainer.find('.cc-carousel--next').addClass('cc-initialized');\n            $sectionContainer.find('.cc-carousel--previous').addClass('cc-initialized');\n            $sectionContainer.addClass('cc-is-carousel');\n          });\n        } else {\n          const initializedMobCarousels = document.querySelectorAll(\".cc-carousel-mobile.cc-carousel\");\n          initializedMobCarousels.forEach((carousel) => {\n            carousel.classList.remove('cc-carousel');\n            const $sectionContainer = $(carousel).closest('.section, .cc-carousel-section');\n            $sectionContainer.find('.cc-carousel--next').removeClass('cc-initialized');\n            $sectionContainer.find('.cc-carousel--previous').removeClass('cc-initialized');\n            $sectionContainer.removeClass('cc-is-carousel');\n          });\n        }\n      };\n\n      _this.initCarousels = () => {\n        const carousels = document.querySelectorAll(\".cc-carousel\");\n\n        if (carousels.length) {\n          //Init click to drag on desktop browsers (except for Safari)\n          if (theme.viewport.isSm() && !theme.browser.isSafari()) {\n            carousels.forEach((carousel) => {\n              let isDown = false,startX,scrollLeft;\n\n              if (!carousel.classList.contains('cc-initialized')) {\n                carousel.classList.add('cc-initialized');\n\n                carousel.addEventListener(\"mousedown\", (e) => {\n                  isDown = true;\n                  startX = e.pageX - carousel.offsetLeft;\n                  scrollLeft = carousel.scrollLeft;\n                });\n\n                carousel.addEventListener(\"mouseleave\", () => {\n                  isDown = false;\n                });\n\n                carousel.addEventListener(\"mouseup\", () => {\n                  isDown = false;\n                  _this.updateArrows(carousel);\n                });\n\n                carousel.addEventListener(\"mousemove\", (e) => {\n                  if (!isDown) return;\n                  e.preventDefault();\n                  const x = e.pageX - carousel.offsetLeft;\n                  const walk = x - startX;\n                  carousel.scrollLeft = scrollLeft - walk;\n                  _this.updateArrows(carousel);\n                });\n              }\n            });\n          } else {\n            carousels.forEach((carousel) => {\n              //Update arrows on touch end\n              carousel.addEventListener(\"touchend\", () => {\n                _this.updateArrows(carousel);\n              });\n\n              //Update arrows on scroll end\n              let timer;\n              carousel.addEventListener('scroll', () => {\n                clearTimeout(timer);\n\n                timer = setTimeout(() => {\n                  _this.updateArrows(carousel);\n                }, 300);\n              }, { passive: true });\n            });\n          }\n\n          //Init left/right buttons\n          _this.initArrows();\n        }\n      };\n\n      if (document.querySelectorAll(\".cc-carousel-mobile\").length) {\n        $(window).off('debouncedresizewidth.cc-carousel').on('debouncedresizewidth.cc-carousel', _this.initMobileCarousels);\n        _this.initMobileCarousels();\n      }\n\n      _this.initCarousels();\n    },\n    destroy: () => {\n      const carousels = document.querySelector(\".cc-carousel\");\n      if (carousels && carousels.length) {\n        carousels.forEach((carousel) => {\n          carousel.removeEventListener('mousedown').\n          removeEventListener('mouseleave').\n          removeEventListener('mouseup').\n          removeEventListener('mousemove').\n          classList.remove('cc-initialized');\n\n          const $sectionContainer = $(carousel).closest('.section, .cc-carousel-section');\n          $sectionContainer.find('.cc-carousel--previous').removeClass('cc-initialized');\n          $sectionContainer.find('.cc-carousel--next').removeClass('cc-initialized');\n        });\n      }\n      $(window).off('.cc-carousel');\n    }\n  };\n  ;\n  $(function ($) {\n    var activeQuickBuyRequest = null;\n    $(document).on('click', '.quick-buy', function (e) {\n      if (activeQuickBuyRequest) {\n        return false;\n      }\n\n      var $this = $(this);\n      var placeholder = $('.quickbuy-placeholder-template[data-product-id=\"' + $this.data('product-id') + '\"]:first').html();\n      var $template = $('<div class=\"quickbuy-container\">' + placeholder + '</div>');\n      var prevIndex = null,\n        nextIndex = null,\n        $prod = $(this).closest('.product-block'),\n        $prodContainer = $prod.parent(),\n        $prodContainerProductChild = $prodContainer.children(`.product-block${theme.settings.quickBuyType === 'hover' ? \":not('.page-block'):not(.product-block--flex-spacer)\" : '.product-block--with-quickbuy'}`);\n\n      if ($prod.length) {\n        let prodInSiblingIndex;\n\n        $prodContainerProductChild.each(function (index) {\n          if ($(this).attr('id') === $prod.attr('id')) {\n            prodInSiblingIndex = index;\n          }\n        });\n\n        if (prodInSiblingIndex != null) {\n          if (prodInSiblingIndex > 0) {\n            let $prevProduct = $prodContainerProductChild.eq(prodInSiblingIndex - 1);\n            prevIndex = $prevProduct.attr('id');\n          }\n\n          let $nextProduct = $prodContainerProductChild.eq(prodInSiblingIndex + 1);\n          if ($nextProduct) {\n            nextIndex = $nextProduct.attr('id');\n          }\n        }\n      }\n\n      $.colorbox({\n        closeButton: false,\n        preloading: false,\n        open: true,\n        speed: 200,\n        //transition: \"none\",\n        html: [\n        '<div class=\"action-icons\">',\n        prevIndex != null ? '<a href=\"#\" class=\"prev-item action-icon\" data-idx=\"' + prevIndex + '\" aria-label=\"' + theme.strings.previous + '\">' + theme.icons.left + '</span></a>' : '',\n        nextIndex != null ? '<a href=\"#\" class=\"next-item action-icon\" data-idx=\"' + nextIndex + '\" aria-label=\"' + theme.strings.next + '\">' + theme.icons.right + '</a>' : '',\n        '<a href=\"#\" class=\"close-box action-icon\" aria-label=\"', theme.strings.close, '\">' + theme.icons.close + '</a>',\n        '</div>', $template.wrap('<div>').parent().html()].\n        join(''),\n        onComplete: function () {\n          loadQuickBuyContent($this.attr('href'));\n        },\n        onCleanup: function () {\n          if (theme.activeQuickBuyMediaGallery) {\n            theme.activeQuickBuyMediaGallery.destroy();\n          }\n\n          theme.unloadProductForm($('.quickbuy-container .product-form'));\n        }\n      });\n\n      e.stopImmediatePropagation();\n      return false;\n    });\n\n    var loadQuickBuyContent = function (href) {\n      activeQuickBuyRequest = $.get(href, function (data) {\n        const $productSection = $('<div>').append($(data).find('.section-product-template [data-section-type=\"product-template\"]').clone());\n\n        //Prepare the html\n        $productSection.find('[data-cc-animate]').removeAttr('data-cc-animate');\n        $productSection.find('.product-collection-links').remove();\n        $productSection.find('.store-availability-container-outer').remove();\n        $productSection.find('.social-links').remove();\n        $productSection.find('[data-enable-history-state]').attr('data-enable-history-state', 'false');\n        $productSection.find('.theme-product-reviews-full').remove();\n        $productSection.find('.product-mob-collection-links').remove();\n        $productSection.find('[data-show-in-quickbuy=\"false\"]').remove();\n        $productSection.find('.product-description-below').remove();\n        $productSection.find('.product-section.border-bottom').removeClass('border-bottom');\n        $productSection.find('.product-container').addClass('product-container--quickbuy');\n        $productSection.find('.product-details').append(`<div class=\"more-link-row\"><a class=\"more-link\" href=\"${href}\">${theme.strings.fullDetails}</a></div>`);\n\n        var $form = $('<div class=\"quickbuy-form quickbuy-form--overlay\">' + $productSection.html() + '</div>');\n\n        // ensure ids and labels match up\n        $form.find('label[for]').each(function () {\n          $(this).attr('for', $(this).attr('for') + '-qb');\n        });\n\n        $form.find(':input[id]').each(function () {\n          $(this).attr('id', $(this).attr('id') + '-qb');\n        });\n\n        var $quickbuyContainer = $('.quickbuy-container');\n        $quickbuyContainer.html($form);\n        $('body').removeClass('product-added-to-cart');\n\n        var $gallery = $quickbuyContainer.find('.product-container .product-gallery');\n\n        if ($gallery.length === 1) {\n          theme.activeQuickBuyMediaGallery = new theme.ProductMediaGallery($gallery);\n        }\n\n        //Init product form, if required\n        theme.initProductForm($quickbuyContainer.find('.product-form:first'));\n\n        //init gallery\n        $('.quickbuy-form').imagesLoaded(function () {\n          setTimeout($.colorbox.resize, 10);\n        });\n\n        $form.hide().fadeIn(300, function () {\n          $('.quickbuy-form.placeholder').remove();\n          $form.removeClass('quickbuy-form--overlay');\n          $.colorbox.resize();\n        });\n\n        if (Shopify.PaymentButton) {\n          $(document).on('shopify:payment_button:loaded.themeQuickBuy', function () {\n            $(document).off('shopify:payment_button:loaded.themeQuickBuy');\n            $.colorbox.resize();\n          });\n\n          Shopify.PaymentButton.init();\n        }\n\n        theme.initAnimateOnScroll();\n\n        $(document).trigger('cc:component:load', ['accordion', $('.quickbuy-container')[0]]);\n\n        activeQuickBuyRequest = null;\n      });\n    };\n  });\n  ;\n  // Adjusts the css top property of an element such that it sticks appropriately based on the scroll direction\n  class StickyScrollDirectionInstance {\n    constructor(container) {\n      if (!container) {\n        console.warn(\"No container provided to StickyScrollDirection component\");\n        return;\n      }\n      this.container = container;\n      this.currentTop = 0;\n      this.scrollY = window.scrollY;\n\n      this.updateDefaultTop();\n\n      if (theme.viewport.isSm()) {\n        this.bindEvents();\n      }\n    }\n\n    /**\n     * Bind listeners\n     */\n    bindEvents() {\n      this.scrollListener = this.handleScroll.bind(this);\n      this.updateTopListener = theme.debounce(this.updateDefaultTop.bind(this));\n      window.addEventListener('scroll', this.scrollListener);\n      window.addEventListener('cc-header-updated', this.updateTopListener);\n      window.addEventListener('resize', this.updateTopListener);\n    }\n\n    updateDefaultTop() {\n      const $toolbar = $('.product-list-toolbar');\n      if ($toolbar) {\n        this.defaultTop = $toolbar.outerHeight() + 20;\n      } else {\n        this.defaultTop = 0;\n      }\n    }\n\n    handleScroll() {\n      const bounds = this.container.getBoundingClientRect();\n      const maxTop = bounds.top + window.scrollY - this.container.offsetTop + this.defaultTop;\n      const minTop = this.container.clientHeight - window.innerHeight;\n\n      if (window.scrollY < this.scrollY) {\n        this.currentTop -= window.scrollY - this.scrollY;\n      } else {\n        this.currentTop += this.scrollY - window.scrollY;\n      }\n\n      this.currentTop = Math.min(Math.max(this.currentTop, -minTop), maxTop, this.defaultTop);\n      this.scrollY = window.scrollY;\n      this.container.style.top = this.currentTop + \"px\";\n    }\n\n    /**\n     * Destroy the listeners\n     */\n    destroy() {\n      window.removeEventListener('scroll', this.scrollListener);\n      window.removeEventListener('cc-header-updated', this.updateTopListener);\n      window.removeEventListener('resize', this.updateTopListener);\n    }\n  }\n\n  class StickyScrollDirection extends ccComponent {\n    constructor() {let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'sticky-scroll-direction';let cssSelector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : `.cc-${name}:not(.cc-initialized)`;\n      super(name, cssSelector);\n    }\n\n    init(container) {\n      super.init(container);\n      this.registerInstance(container, new StickyScrollDirectionInstance(container));\n    }\n\n    destroy(container) {\n      this.destroyInstance(container);\n      super.destroy(container);\n    }\n  }\n\n  new StickyScrollDirection();\n  ;\n  const 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: ${response.status}`);\n        }\n        return response.text();\n      }).\n      then((response) => {\n        let frag = document.createDocumentFragment(),\n          fetchedContent = document.createElement('div');\n        frag.appendChild(fetchedContent);\n        fetchedContent.innerHTML = response;\n\n        let replacementContent = fetchedContent.querySelector(`[data-id=\"${CSS.escape(this.dataset.id)}\"]`);\n        if (replacementContent) {\n          this.innerHTML = replacementContent.innerHTML;\n\n          if (this.hasAttribute('contains-product-blocks')) {\n            theme.applyAjaxToProductForm($('.product-form', this));\n            theme.carousels.init();\n          }\n        }\n      });\n    }\n  };\n\n  window.customElements.define('cc-fetched-content', CCFetchedContent);\n  ;\n\n  /*============== Sections ===============*/\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.CartDrawerSection = new function () {\n    this.onSectionLoad = function (container) {\n      theme.applyAjaxToProductForm($('.product-form', container));\n      theme.loadCartNoteMonitor(container);\n\n      var $body = $('body');\n      var $window = $(window);\n\n      function assessScrollPosition() {\n        if ($window.scrollTop() === 0) {\n          $body.addClass('scrolled-top');\n        } else {\n          $body.removeClass('scrolled-top');\n        }\n      }\n      assessScrollPosition();\n\n      if (theme.viewport.isSm()) {\n        $(window).on('throttled-scroll.cartDrawer', assessScrollPosition);\n      }\n\n      //Handle clear cart\n      $(container).on('click', '.btn--empty-cart', function () {\n        if (confirm(theme.strings.confirmEmptyCart)) {\n          $(container).find('.cart-summary-item-container').each(function (index) {\n            setTimeout(() => {\n              $(this).addClass('cart-summary-item-container--out');\n            }, index * 50);\n          });\n\n          $.post(theme.routes.cart_clear_url, function () {\n            theme.updateCartSummaries(false, false);\n          });\n        }\n        return false;\n      });\n\n      /// Accordions\n      $(container).on('click', '.cart-accordion-btn', function (e) {\n        e.preventDefault();\n        e.stopImmediatePropagation();\n        var isHidden = $(this).parent().\n        next().\n        toggleClass('hidden').\n        hasClass('hidden');\n        $(this).toggleClass('cart-accordion-btn--collapsed', isHidden);\n        if (!isHidden) {\n          $(this).closest('.cart-summary').find('.cart-accordion-btn:not(.cart-accordion-btn--collapsed)').not(this).click();\n        }\n      });\n\n      $(container).on('click', '.cart-accordion-btn-container', function (e) {\n        e.preventDefault();\n        $(this).find('.cart-accordion-btn').click();\n      });\n\n      //Compensate for the cart notes in the sticky header\n      function updateStickyDrawerHeader() {\n        const $cartForm = $('.cart-form--checkout', container);\n        const $cartFormNonStick = $('.cart-form--non-stick', container);\n\n        if ($cartForm.hasClass('cart-form--checkout--sticky-true') && $cartFormNonStick.length) {\n          $cartForm.css('top', -Math.abs(parseInt($cartFormNonStick.outerHeight() + 1)) + 'px');\n        }\n      }\n\n      updateStickyDrawerHeader();\n      $(window).on('debouncedresize.cartDrawer cc-cart-updated', updateStickyDrawerHeader);\n    };\n\n    this.onSectionUnload = function (container) {\n      theme.removeAjaxFromProductForm($('form.product-form', container));\n      theme.unloadCartNoteMonitor(container);\n      $(window).off('.cartDrawer');\n    };\n\n    this.onSectionSelect = function (container) {\n      // display drawer\n      if (!$('body').hasClass('show-cart-summary')) {\n        $('.toggle-cart-summary:first').click();\n      }\n    };\n\n    this.onSectionDeselect = function (container) {\n      // hide drawer\n      if ($('body').hasClass('show-cart-summary')) {\n        $('.toggle-cart-summary:first').click();\n      }\n    };\n  }();\n\n  theme.SlideshowSection = new function () {\n    this.onSectionLoad = function (target) {\n      theme.initContentSlider(target);\n      if ($(target).find('.image-overlay--mobile-stack').length > 0) {\n        $(target).parent().addClass('slideshow-section--mobile-stack');\n      } else {\n        $(target).parent().addClass('slideshow-section--no-mobile-stack');\n      }\n    };\n\n    this.onSectionUnload = function (target) {\n      $('.slick-slider', target).slick('unslick').off('init');\n      $(window).off('.slideshowSection');\n    };\n\n    this.onBlockSelect = function (target) {\n      $(target).closest('.slick-slider').\n      slick('slickGoTo', $(target).data('slick-index')).\n      slick('slickPause');\n    };\n\n    this.onBlockDeselect = function (target) {\n      $(target).closest('.slick-slider').\n      slick('slickPlay');\n    };\n  }();\n\n  theme.ProductTemplateSection = new function () {\n    var galleries = [];\n\n    this.onSectionLoad = function (target) {\n\n      // Init store availability if applicable\n      if ($('[data-store-availability-container]', target).length) {\n        this.storeAvailability = new theme.StoreAvailability($('[data-store-availability-container]', target)[0]);\n      }\n\n      // Init product gallery\n      $('.product-gallery', target).each(function () {\n        galleries.push(new theme.ProductMediaGallery($(this)));\n      });\n\n      // Init product forms\n      const $productForm = $('.product-form--main', target);\n      if ($productForm.length) {\n        theme.initProductForm($productForm);\n      }\n\n      // Reviews link\n      if ($('.cc-rating-container', target).length) {\n        const $reviewsContainer = $('#shopify-product-reviews');\n        if ($reviewsContainer.length) {\n          $(target).on('click', '.cc-rating-container', function () {\n            theme.viewport.scrollTo($('#shopify-product-reviews'), -1, 500, 100, $('.header-container[data-is-sticky=\"true\"]').length === 1);\n            return false;\n          });\n        } else {\n          $('.cc-rating-container', target).css('cursor', 'default');\n        }\n      }\n\n      // Size chart link\n      $(target).on('click', '.size-chart-link', function (event) {\n        event.stopPropagation();\n        $.colorbox({\n          inline: true,\n          href: '#size-chart-content > .size-chart'\n        });\n      });\n\n      /// Grid item heights\n      $(window).trigger('normheights');\n\n      theme.loadInPlaceQuantityAdjustment(target);\n    };\n\n    this.onSectionUnload = function (target) {\n      $(target).off('click');\n      $('.product-gallery .thumbnails', target).slick('unslick');\n      if (galleries.length) {\n        for (var i = 0; i < galleries.length; i++) {\n          galleries[i].destroy();\n        }\n      }\n      theme.unloadProductForm($('.product-form', target));\n\n      if (this.storeAvailability) {\n        this.storeAvailability.onSectionUnload();\n      }\n\n      $('.product-slideshow', target).slick('unslick').off('init');\n      theme.unloadInPlaceQuantityAdjustment(target);\n    };\n  }();\n\n  theme.FilterManager = new function () {\n    this.onSectionLoad = function (container) {\n      this.namespace = theme.namespaceFromSection(container);\n      this.$container = $(container);\n      this.$productFilter = $('.cc-product-filter', this.$container);\n\n      this.filters_closed_cookie_name = 'theme_filters_closed';\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, '.pagination a,.active-filter-controls a', this.functions.ajaxLoadLink.bind(this));\n\n        // ajax load form submission\n        this.$container.on('change' + this.namespace + ' submit' + this.namespace, '[data-filter-form]',\n        theme.debounce(this.functions.ajaxLoadForm.bind(this), 700));\n\n        // handle back button\n        this.registerEventListener(window, 'popstate', this.functions.ajaxPopState.bind(this));\n      } else {\n        this.$container.on('change' + this.namespace, '[data-filter-form]', this.functions.submitForm);\n      }\n\n      // click on the 'filters' button\n      this.$container.on('click' + this.namespace, '.cc-toolbar-filter-toggle', this.functions.toggleFilter.bind(this));\n\n      // tap on mobile menu veil\n      this.$container.on('click' + this.namespace, '.cc-product-filter__mob-veil, .cc-product-filter__close', this.functions.handleMobileVeilTap.bind(this));\n\n      // the search query is updated\n      this.$container.on('submit' + this.namespace, '#search-page-form', this.functions.updateSearchQuery.bind(this));\n\n      if (theme.viewport.isSm() && theme.utils.cookie.exists(this.filters_closed_cookie_name) && theme.utils.cookie.read(this.filters_closed_cookie_name) == 'true') {\n        $(container).addClass('cc-filters-closed').addClass('cc-filters-closed-no-trans');\n      }\n\n      /// Style any dropdowns\n      $('select:not([name=id])', container).selectReplace();\n\n      if (this.$container.data('use-infinite-scroll')) {\n        theme.loadProductGrid(this.$container);\n        this.functions.initInfiniteScroll();\n      } else {\n        theme.loadProductGrid(container);\n      }\n    };\n\n    this.functions = {\n      initInfiniteScroll: function () {\n        // Infinite-scroll\n        $('.product-list.use-infinite-scroll', this.$container).each(function () {\n          var $cont = $(this);\n          theme.loadScriptOnce(theme.scripts.jqueryInfiniteScroll, function () {\n            $cont.infinitescroll({\n              navSelector: \".pagination\",\n              nextSelector: \".pagination .next\",\n              itemSelector: \".product-list .product-block\",\n              loading: {\n                msgText: theme.strings.infiniteScrollCollectionLoading,\n                finishedMsg: theme.strings.infiniteScrollCollectionFinishedMsg\n              },\n              pathParse: function (path, nextPage) {\n                return path.match(/^(.*page=)[0-9]*(&.*)?$/).splice(1);\n              }\n            }, function (newElements) {\n              $cont.find('#infscr-loading').remove(); // for nth-child\n              $cont.find('.product-block:not(.product-block--flex-spacer):last').prevAll('.product-block--flex-spacer').remove();\n              theme.loadProductGrid(this.$container);\n            });\n          });\n        });\n      },\n\n      updateSearchQuery: function (e) {\n        const $form = this.$container.find('[data-filter-form]:first');\n        if ($form.length) {\n          e.preventDefault();\n\n          $form.find('[name=\"q\"]').val($(e.currentTarget).find('[name=\"q\"]').val());\n\n          if (this.$container.data('ajax-filtering')) {\n            const ajaxLoadForm = this.functions.ajaxLoadForm.bind(this);\n            ajaxLoadForm({\n              type: null,\n              currentTarget: $form[0]\n            });\n          } else {\n            $form.submit();\n          }\n        }\n      },\n\n      submitForm: function (e) {\n        e.currentTarget.submit();\n      },\n\n      handleMobileVeilTap: function () {\n        this.$container.toggleClass('cc-filters-mob-open');\n      },\n\n      toggleFilter: function () {\n        this.$container.removeClass('cc-filters-closed-no-trans');\n\n        if (theme.viewport.isXs()) {\n          this.$container.toggleClass('cc-filters-mob-open');\n        } else {\n          if (this.$container.hasClass('cc-filters-closed')) {\n            //Open the filters\n            theme.utils.cookie.create(this.filters_closed_cookie_name, 'false', 365);\n            this.$container.removeClass('cc-filters-closed');\n          } else {\n            //Close the filters\n            theme.utils.cookie.create(this.filters_closed_cookie_name, 'true', 365);\n            this.$container.addClass('cc-filters-closed');\n          }\n        }\n\n        return false;\n      },\n\n      ajaxLoadLink: function (evt) {\n        evt.preventDefault();\n        this.functions.ajaxLoadUrl.call(this, $(evt.currentTarget).attr('href'));\n      },\n\n      ajaxLoadForm: function (evt) {\n        if (evt.type === 'submit') {\n          evt.preventDefault();\n        }\n\n        let queryVals = [];\n        this.$container[0].querySelectorAll('[data-filter-form] input, [data-filter-form] 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            // if no value, check for the default and include\n            if (input.value === '' && input.dataset.currentValue) {\n              queryVals.push([input.name, encodeURIComponent(input.dataset.currentValue)]);\n            } else {\n              queryVals.push([input.name, encodeURIComponent(input.value)]);\n            }\n          }\n        });\n\n        this.$container[0].querySelectorAll('[data-filter-form] [data-current-value]').forEach((input) => {\n          input.setAttribute('value', input.dataset.currentValue);\n        });\n        const data = new FormData(evt.currentTarget);\n        const queryString = new URLSearchParams(data).toString();\n        this.functions.ajaxLoadUrl.call(this, '?' + queryString);\n      },\n\n      ajaxPopState: function (event) {\n        this.functions.ajaxLoadUrl.call(this, document.location.href);\n      },\n\n      initFilterResults: function () {\n        if (this.$container.data('use-infinite-scroll')) {\n          this.functions.initInfiniteScroll();\n        }\n\n        theme.loadProductGrid(this.$container);\n        theme.initAnimateOnScroll();\n\n        // init theme components\n        const $components = this.$container.closest('[data-components]');\n        if ($components.length) {\n          const components = $components.data('components').split(',');\n          components.forEach(function (component) {\n            $(document).trigger('cc:component:load', [component, $components[0]]);\n          }.bind(this));\n        }\n      },\n\n      refreshSelects: function () {\n        $('select:not(.original-selector)', this.$container).selectReplace().closest('.selector-wrapper').addClass('has-pretty-select');\n      },\n\n      ajaxLoadUrl: function (url) {\n        const _this = this;\n\n        // update url history\n        let fullUrl = url;\n        if (fullUrl.slice(0, 1) === '/') {\n          fullUrl = window.location.protocol + '//' + window.location.host + fullUrl;\n        }\n\n        // start fetching URL\n        let refreshContainerSelector = '[data-ajax-container]',\n          $toolbar = this.$container.find('.product-list-toolbar'),\n          $ajaxContainers = this.$container.find(refreshContainerSelector);\n\n        // loading state\n        $ajaxContainers.addClass('cc-product-filter-container--loading');\n\n        // fetch content\n        if (this.currentAjaxLoadUrlFetch) {\n          this.currentAjaxLoadUrlFetch.abort();\n        }\n\n        this.currentAjaxLoadUrlFetch = $.get(url, function (data) {\n          this.currentAjaxLoadUrlFetch = null;\n\n          const $newPage = $($.parseHTML(data));\n          const newTitleTag = $newPage.filter('title').text().trim();\n          document.title = newTitleTag;\n          window.history.pushState({ path: fullUrl }, newTitleTag, fullUrl);\n\n          // save active element\n          if (document.activeElement) {\n            this.activeElementId = document.activeElement.id;\n          }\n\n          // replace contents\n          $(`<div>${data}</div>`).find(refreshContainerSelector).each(function (index) {\n            const $newAjaxContainer = $(this);\n\n            // preserve accordion state\n            $($ajaxContainers[index]).find('.cc-accordion-item').each(function () {\n              const accordionIndex = $(this).closest('.cc-accordion').index();\n              if ($(this).hasClass('is-open')) {\n                $newAjaxContainer.find(`.cc-accordion:nth-child(${accordionIndex + 1}) .cc-accordion-item`).addClass('is-open').attr('open', '');\n              } else {\n                $newAjaxContainer.find(`.cc-accordion:nth-child(${accordionIndex + 1}) .cc-accordion-item`).removeClass('is-open').removeAttr('open');\n              }\n            });\n\n            // maintain mobile filter menu state\n            if ($('.cc-product-filter', _this.$container).length && $('.cc-product-filter', _this.$container).hasClass('-in')) {\n              $newAjaxContainer.find('.cc-product-filter').addClass('-in');\n            }\n\n            $($ajaxContainers[index]).html($newAjaxContainer.html());\n          });\n\n          // Update the visibility of the toolbar\n          if ($toolbar) {\n            if ($(`<div>${data}</div>`).find('.product-list-toolbar').length === 0) {\n              $toolbar.hide();\n            } else {\n              $toolbar.show();\n            }\n          }\n\n          _this.functions.refreshSelects();\n\n          // init js\n          this.functions.initFilterResults.call(this);\n\n          // remove loading state\n          $ajaxContainers.removeClass('cc-product-filter-container--loading');\n\n          // restore active element\n          if (this.activeElementId) {\n            let el = document.getElementById(this.activeElementId);\n            if (el) {\n              el.focus();\n            }\n          }\n\n          const $resultContainer = $('[data-ajax-scroll-to]:first', this.$container);\n          if ($(window).scrollTop() - 200 > $resultContainer.offset().top) {\n            if (this.$container.data('is-sticky')) {\n              var offset = theme.viewport.isSm() ? 25 : 0;\n            } else {\n              var offset = $('.header-container[data-is-sticky=\"true\"]').outerHeight();\n            }\n\n            theme.viewport.scrollTo($resultContainer, -1, 1000, offset);\n          }\n        }.bind(this));\n      }\n    };\n\n    this.onSectionUnload = function (target) {\n      $('select.replaced', target).selectReplace('destroy');\n      theme.unloadProductGrid(target);\n    };\n  }();\n  ;\n  theme.CollectionListingSection = new function () {\n    this.onSectionLoad = function (target) {\n      /// Grid item heights\n      $(window).trigger('normheights');\n\n      theme.loadProductGrid(target);\n    };\n\n    this.onSectionUnload = function (target) {\n      theme.unloadProductGrid(target);\n    };\n  }();\n\n  theme.FeaturedCollectionSection = new function () {\n    this.onSectionLoad = function (target) {\n      theme.loadProductGrid(target);\n    };\n\n    this.onSectionUnload = function (target) {\n      theme.unloadProductGrid(target);\n    };\n  }();\n\n  theme.FeaturedCollectionsSection = new function () {\n    this.onSectionLoad = function (target) {\n      /// Grid item heights\n      $(window).trigger('normheights');\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 () {\n          var isCarousel = $carouselGallery.hasClass('slick-slider'),\n            shouldShowCarousel = theme.viewport.isXs();\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: false,\n              useTransform: true,\n              arrows: false,\n              dots: true\n            });\n          }\n        };\n\n        assessCarouselFunction();\n        $(window).on('debouncedresize.themeSection' + container.id, assessCarouselFunction);\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      $(block).closest('.slick-slider').each(function () {\n        $(this).slick('slickGoTo', $(this).data('slick-index')).slick('slickPause');\n      });\n    };\n\n    this.onBlockDeselect = function (block) {\n      $(block).closest('.slick-slider').each(function () {\n        $(this).slick('slickPlay');\n      });\n    };\n  }();\n\n  theme.HeaderSection = new function () {\n    this.onSectionLoad = function (target) {\n      /// Create mobile navigation\n      $('body').append($('#mobile-navigation-template', target).html());\n\n      // move the localisation form when on mobile\n      const $localisationHeader = $('#localization_form_header');\n      if ($localisationHeader.length) {\n        const $localisationMobContainer = $('#localization--mobile-menu');\n        const $localisationDesktopContainer = $('.localization--header');\n        const moveLocalisationHeader = function () {\n          if (theme.viewport.isXs()) {\n            $localisationHeader.appendTo($localisationMobContainer);\n          } else if ($localisationDesktopContainer.find('#localization_form_header').length === 0) {\n            $localisationHeader.appendTo($localisationDesktopContainer);\n            $localisationDesktopContainer.removeAttr('style');\n          }\n        };\n        moveLocalisationHeader();\n\n        if (window.matchMedia) {\n          const mq = window.matchMedia('(min-width: 768px)');\n          if (mq.addEventListener) {\n            mq.addEventListener('change', (event) => {\n              if (event.matches) {\n                moveLocalisationHeader();\n              } else {\n                moveLocalisationHeader();\n              }\n            });\n          }\n        }\n      }\n\n      // disabling tabbing on all but first menu\n      $('#mobile-nav .sub-nav a, #mobile-nav .sub-nav button').attr('tabindex', '-1');\n\n      function toggleSubNav() {\n        $(this).attr('aria-expanded', !$(this).siblings().is(':visible'));\n        $(this).parent().toggleClass('sub-nav-item--expanded', !$(this).siblings().is(':visible'));\n        $(this).siblings().slideToggle(250);\n      }\n\n      // things for the standard nav\n      if ($('.main-nav', target).length) {\n\n        $('.main-nav .sub-nav-item.has-dropdown > a', target).on('keypress', function (e) {\n          if (e.keyCode === 32) {\n            toggleSubNav.call(this);\n          }\n          e.preventDefault();\n        });\n\n        // always follow links\n        $('.main-nav', target).on('click', '.sub-nav-item.has-dropdown > a', function () {\n          // Sub sub nav\n          toggleSubNav.call(this);\n          return false;\n\n        }).filter('[data-col-limit]').each(function () {\n          // Ensure no columns go over the per-column quota\n          var perCol = $(this).data('col-limit');\n          if (perCol > 0) {\n            $('.nav-item.dropdown.drop-norm > .sub-nav', this).each(function () {\n              var $items = $(this).find('.sub-nav-list:not(.sub-nav-image) > .sub-nav-item');\n              var cols = Math.ceil($items.length / perCol);\n              for (var i = 1; i < cols; i++) {\n                var $list = $('<ul class=\"sub-nav-list\"/>').append($items.slice(perCol * i)).insertAfter($(this).find('.sub-nav-list:not(.sub-nav-image):last'));\n              }\n            });\n          }\n        });\n\n        // hover events\n\n        var navHoverDelay = 250;\n        var $navLastOpenDropdown = $();\n        var navOpenTimeoutId = -1;\n        var $container = $(target);\n\n        $('.main-nav', target).on('mouseenter mouseleave', '.nav-item.dropdown', function (evt) {\n          var $dropdownContainer = $(evt.currentTarget);\n          // delay on hover-out\n          if (evt.type == 'mouseenter') {\n            clearTimeout(navOpenTimeoutId);\n            clearTimeout($dropdownContainer.data('navCloseTimeoutId'));\n            var $openSiblings = $dropdownContainer.siblings('.open');\n\n            // close all menus but last opened\n            $openSiblings.not($navLastOpenDropdown).removeClass('open');\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('open').\n              siblings('.open').\n              removeClass('open');\n              // look for a non-mega dropdown\n              var $dropdown = $dropdownContainer.filter('.drop-norm').children('.sub-nav');\n              if ($dropdown.length) {\n                var transform = '',\n                  rightEdge = $('#page-wrap').width() - 30;\n                // centre-aligned menus\n                if ($dropdownContainer.closest('.align-center').length) {\n                  // check if left-edge is too far left\n                  var leftOfDropdown = $dropdownContainer.offset().left + $dropdownContainer.outerWidth() / 2 - $dropdown.outerWidth() / 2;\n                  var leftEdge = 30;\n                  var leftOutsideAmount = leftOfDropdown - leftEdge;\n                  if (leftOutsideAmount < 0) {\n                    transform = 'translateX(calc(50% + ' + Math.round(Math.abs(leftOutsideAmount)) + 'px))';\n                  } else {\n                    // check if right-edge is too far right\n                    var rightOfDropdown = $dropdownContainer.offset().left + $dropdownContainer.outerWidth() / 2 + $dropdown.outerWidth() / 2;\n                    var rightOusideAmount = rightOfDropdown - rightEdge;\n                    if (rightOusideAmount > 0) {\n                      transform = 'translateX(calc(50% - ' + Math.round(rightOusideAmount) + 'px))';\n                    }\n                  }\n                } else {\n                  // left-aligned menus - check if right-edge is too far right\n                  var rightOfDropdown = $dropdownContainer.offset().left + $dropdown.outerWidth();\n                  var rightOusideAmount = rightOfDropdown - rightEdge;\n                  if (rightOusideAmount > 0) {\n                    transform = 'translateX(-' + Math.round(rightOusideAmount) + 'px)';\n                  }\n                }\n                $dropdown.css('transform', transform);\n              }\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('open').children('.sub-nav').css('transform', '');\n            }, navHoverDelay));\n          }\n          // a11y\n          $dropdownContainer.children('[aria-expanded]').attr('aria-expanded', evt.type == 'mouseenter');\n        });\n\n        // touch events\n        $('.main-nav', target).on('touchstart touchend click', '.nav-item.dropdown > .nav-item-link', function (evt) {\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('open')) {\n                // trigger close\n                $(this).parent().trigger('mouseleave');\n              } else {\n                // trigger close on any open items\n                $('.nav-item.open').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        // keyboard events\n        $('.main-nav', target).on('keydown', '.nav-item.dropdown > .nav-item-link', function (evt) {\n          // space on parent link - toggle dropdown\n          if (evt.which == 32) {\n            var $parent = $(evt.target).parent();\n            $parent.trigger($parent.hasClass('open') ? 'mouseleave' : 'mouseenter');\n            return false;\n          }\n        });\n\n        const $logoSpacer = $('#logo-spacer', target);\n        const $logo = $('.logo-item', target);\n        function doNavResizeEvents() {\n          // Keep the logo spacer width equal to the width of the logo\n          if ($logoSpacer.length && $logo.length) {\n            $logoSpacer.css('width', $logo.outerWidth());\n          }\n        }\n\n        $(window).on('debouncedresize.headerSection doNavResizeEvents.headerSection', doNavResizeEvents).trigger('doNavResizeEvents');\n\n        let lastScreenWidth;\n        function ensureDropdownPosition() {\n          if ($(window).width() !== lastScreenWidth) {\n            setTimeout(function () {\n              var pw = $('.main-nav').width() + $('.main-nav').offset().left;\n              $('.main-nav .nav-item.drop-norm .sub-nav').css('transform', '').each(function () {\n                $(this).css({ visibility: 'hidden', zIndex: -1 }).css({ display: 'block' });\n                var oobr = pw - ($(this).offset().left + $(this).outerWidth());\n                var oobl = $(this).offset().left;\n                if (oobr < 0) {\n                  // off the right\n                  $(this).css('transform', 'translate(' + Math.ceil(oobr - 1) + 'px)');\n                } else if (oobl < 0) {\n                  // off the left\n                  $(this).css('transform', 'translate(' + Math.ceil(-oobl) + 'px)');\n                }\n                $(this).css({ visibility: '', zIndex: '', display: '' });\n              });\n            }, 50);\n            lastScreenWidth = $(window).width();\n          }\n        }\n\n        // Ensuring sub nav dropdown does not go off the RHS of page\n        $(window).on('debouncedresize.headerSection ensuredropdownposition.headerSection', ensureDropdownPosition).trigger('ensuredropdownposition');\n        $(function () {\n          ensureDropdownPosition();\n        });\n      }\n\n      /// Style any dropdowns\n      $('select:not([name=id])', target).selectReplace();\n\n      $('.disclosure', target).add('#mobile-nav .disclosure').each(function () {\n        $(this).data('disclosure', new theme.Disclosure($(this)));\n      });\n\n      /// Predictive search\n      const $liveSearchContainer = $('.main-search[data-live-search=\"true\"]', target);\n      const $liveSearchForm = $liveSearchContainer.find('form');\n      const $searchPopupContainer = $liveSearchContainer.find('.main_search__popup');\n      const $searchResultsContainer = $liveSearchContainer.find('.main-search__results');\n      const $footerButtons = $searchPopupContainer.find('.main-search__footer-buttons');\n      const $allResultsContainer = $searchPopupContainer.find('.all-results-container');\n\n      if ($liveSearchContainer.length) {\n        const $searchInput = $('.main-search__input', target);\n\n        //Set the current product type if available in the URL\n        const currentProductType = theme.utils.getUrlParameter('filter.p.product_type');\n        if (currentProductType && currentProductType.length > 0) {\n          const $searchType = $('.main-search__product-types', target);\n          if ($searchType) {\n            $searchType.val(currentProductType).trigger('change');\n          }\n        }\n\n        let liveSearch = new function () {\n          return {\n            popup: {\n              show: function () {let forceShow = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;let forceSearch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;let doSearch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n                if ($searchResultsContainer.html().length > 0 || forceShow === true || forceSearch === true || $searchInput.val().length >= 3) {\n\n                  if (($searchResultsContainer.html().length === 0 || forceSearch === true) && doSearch === true) {\n                    //There are at least 3 chars in the search box, but the search hasn't run yet\n                    doPredictiveSearch.call($searchInput);\n                  }\n\n                  $liveSearchContainer.addClass('main-search--show-popup');\n                }\n                $searchPopupContainer.attr('aria-expanded', true);\n              },\n\n              hide: () => {\n                $liveSearchContainer.removeClass('main-search--show-popup');\n                $searchPopupContainer.attr('aria-expanded', false);\n              }\n            },\n            hiddenSearch: {\n              hide: () => {\n                const $hiddenContainer = $liveSearchContainer.closest('.hidden-search-container');\n                if ($hiddenContainer.length > 0) {\n                  $hiddenContainer.removeClass('hidden-search-container--open');\n                  $('body').removeClass('hidden-search-container--open');\n                }\n              }\n            }\n          };\n        }();\n\n        var searchTimeoutThrottle = 500,\n          searchTimeoutID = -1,\n          currReqObj = null,\n          showPrice = $liveSearchContainer.data('live-search-price'),\n          showVendor = $liveSearchContainer.data('live-search-vendor'),\n          includeMeta = $liveSearchContainer.data('live-search-meta'),\n          showSoldOutLabel = $liveSearchContainer.data('show-sold-out-label'),\n          showSaleLabel = $liveSearchContainer.data('show-sale-label'),\n          previousSearchStr = null;\n\n        $(target).on('keyup.headerSection change.headerSection', '.main-search__input:visible', function () {\n          if ($(this).closest('.hidden-search-container--mob-only').length) {\n            if (theme.viewport.isXs()) {\n              doPredictiveSearch.call(this);\n            }\n          } else {\n            if (previousSearchStr !== $(this).val()) {\n              doPredictiveSearch.call(this);\n              previousSearchStr = $(this).val();\n            }\n          }\n        });\n\n        function doPredictiveSearch() {\n          var $searchContainer = $(this).closest('.main-search'),\n            $resultsBox = $searchContainer.find('.main-search__results'),\n            $productType = $searchContainer.find('.main-search__product-types:visible'),\n            valueToSearch = $(this).val(),\n            productTypeToSearch = $productType.length > 0 ? $productType.val() : \"\";\n\n          //Only search if search string longer than 2, and it or the product type has changed\n          if (valueToSearch.length > 2 && (\n          valueToSearch != $searchInput.data('oldval') ||\n          $productType.length === 0 || productTypeToSearch != $searchInput.data('oldtype')))\n          {\n            //Reset previous value\n            $searchInput.data('oldval', valueToSearch);\n            $searchInput.data('oldtype', productTypeToSearch);\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').eq(0);\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            $searchPopupContainer.css('height', $searchPopupContainer.outerHeight() + 'px');\n            liveSearch.popup.show(true, false, false);\n            $allResultsContainer.empty();\n            $footerButtons.hide();\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.search_url + '/suggest.json';\n                ajaxData = {\n                  \"q\": `${productTypeToSearch.length > 0 ? \"product_type:\" + productTypeToSearch + \"+*\" : \"\"} ${valueToSearch}`,\n                  \"resources\": {\n                    \"type\": $form.find('input[name=\"type\"]').val(),\n                    \"limit\": 8,\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 + '&view=data';\n                ajaxData = null;\n              }\n              //Ajax hit on search page\n              currReqObj = $.ajax({\n                url: ajaxUrl,\n                data: ajaxData,\n                dataType: \"json\",\n                success: function (response) {\n                  currReqObj = null;\n                  $searchContainer.removeClass('main-search--has-results main-search--results-on-multiple-lines main-search--no-results');\n\n                  $resultsBox.empty();\n                  var $resultsProducts = $('<div class=\"main-search__results__products collection-listing\"><div class=\"product-list product-list--per-row-4 product-list--image-shape-natural\"></div></div>');\n                  var $resultsPages = $('<div class=\"main-search__results__pages\">');\n\n                  if (response.resources.results.products) {\n                    for (var i = 0; i < response.resources.results.products.length; i++) {\n                      var result = response.resources.results.products[i];\n                      var $item = $([\n                      '<div class=\"main-search-result\">',\n                      '<div class=\"block-inner\">',\n                      '<div class=\"block-inner-inner\">',\n                      '<div class=\"image-cont\">',\n                      '<a class=\"product-link\">',\n                      '<div class=\"image-label-wrap\">',\n                      '<div class=\"primary-image\"></div>',\n                      '</div>',\n                      '</a>',\n                      '</div>',\n                      '<div class=\"product-info\">',\n                      '<div class=\"inner\">',\n                      '<div class=\"innerer\">',\n                      '<a class=\"product-link\">',\n                      '<div class=\"product-block__title\"></div>',\n                      '</a>',\n                      '</div>',\n                      '</div>',\n                      '</div>',\n                      '</div>',\n                      '</div>',\n                      '</div>'].\n                      join(''));\n                      $item.find('.product-link').attr('href', result.url);\n                      if (result.featured_image && result.featured_image.url) {\n                        var $img = $('<div class=\"rimage-outer-wrapper\"><div class=\"rimage-wrapper lazyload--placeholder\"><img loading=\"lazy\" class=\"rimage__image\"/></div></div>').appendTo($item.find('.primary-image'));\n                        $img.find('.rimage-wrapper').css('padding-top', 1 / Math.max(result.featured_image.aspect_ratio, 0.6) * 100 + '%');\n                        $img.find('.rimage__image').attr('data-lazy-src', theme.Shopify.formatImage(result.featured_image.url, '{width}x'));\n                      }\n                      var $itemInfoCont = $item.find('.product-info .product-link');\n                      $itemInfoCont.find('.product-block__title').html(result.title);\n                      if (showVendor) {\n                        $('<div class=\"vendor\">').html(result.vendor).prependTo($itemInfoCont);\n                      }\n                      if (showPrice) {\n                        var $price = $('<div class=\"product-price\">').appendTo($itemInfoCont);\n                        if (result.price_max != result.price_min) {\n                          $('<span class=\"product-price__from\">').html(theme.strings.products_listing_from).appendTo($price);\n                          $price.append(' ');\n                        }\n\n                        if (parseFloat(result.compare_at_price_min) > parseFloat(result.price_min)) {\n                          $('<span class=\"product-price__amount product-price__amount--on-sale theme-money reduced-price\">').html(theme.formatMoney(result.price_min)).appendTo($price);\n                          $price.append(' ');\n                          $('<span class=\"product-price__compare theme-money struck-out-price\">').html(theme.formatMoney(result.compare_at_price_min)).appendTo($price);\n                        } else {\n                          $('<span class=\"product-price__amount theme-money\">').html(theme.formatMoney(result.price_min)).appendTo($price);\n                        }\n                      }\n                      if (showSoldOutLabel && !result.available) {\n                        $(`<span class=\"product-label product-label--soldout\"><span>${theme.strings.products_labels_sold_out}</span></span>`).appendTo($item.find('.product-info'));\n                      } else if (showSaleLabel && parseFloat(result.compare_at_price_min) > parseFloat(result.price_min)) {\n                        $(`<span class=\"product-label product-label--sale\"><span>${theme.strings.products_labels_sale}</span></span>`).appendTo($item.find('.product-info'));\n                      }\n                      $resultsProducts.children().append($item);\n                    }\n                  }\n\n                  if (response.resources.results.pages) {\n                    for (var i = 0; i < response.resources.results.pages.length; i++) {\n                      var result = response.resources.results.pages[i];\n                      var $item = $('<a class=\"main-search-result main-search-result--page\">').attr('href', result.url);\n                      $('<div class=\"main-search-result__text\">').html(result.title).appendTo($item);\n                      $resultsPages.append($item);\n                    }\n                  }\n\n                  if (response.resources.results.articles) {\n                    for (var i = 0; i < response.resources.results.articles.length; i++) {\n                      var result = response.resources.results.articles[i];\n                      var $item = $('<a class=\"main-search-result main-search-result--article\">').attr('href', result.url);\n                      $('<div class=\"main-search-result__text\">').html(result.title).appendTo($item);\n                      $resultsPages.append($item);\n                    }\n                  }\n                  $searchPopupContainer.css('height', 'auto');\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                    }\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 btn\">').\n                    attr('href', linkURL).\n                    html(theme.strings.layout_live_search_see_all + theme.icons.chevronRight).\n                    appendTo($allResultsContainer);\n                    $footerButtons.css('display', 'flex');\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 (response) {\n                  console.log('Error fetching results', response);\n                }\n              });\n            }, searchTimeoutThrottle);\n          } else if ($(this).val().length <= 2) {\n            // Deleted text? Abandon search-in-progress\n            $searchInput.data('oldval', valueToSearch);\n            $searchInput.data('oldtype', productTypeToSearch);\n            if (currReqObj != null) {\n              currReqObj.abort();\n            }\n            clearTimeout(searchTimeoutID);\n\n            // Clear results\n            liveSearch.popup.hide();\n            setTimeout(() => {\n              $searchPopupContainer.css('height', 'auto');\n              $searchContainer.removeClass('main-search--has-results main-search--results-on-multiple-lines main-search--loading');\n              $resultsBox.empty();\n              $allResultsContainer.empty();\n              $footerButtons.hide();\n            }, 50);\n          }\n        }\n\n        $(target).on('click.headerSection', '.main-search__input', liveSearch.popup.show);\n        $(target).on('focus.headerSection', '.main-search__input', function () {\n          liveSearch.popup.show();\n          $(this).select();\n        });\n        $(target).on('change.headerSection', '.main-search__product-types', function () {\n          if ($searchInput.val().length >= 3) {\n            liveSearch.popup.show(true, true);\n          }\n        });\n\n        $(target).on('click.headerSection', '.main-search__results-close-link', function () {\n          liveSearch.popup.hide();\n          liveSearch.hiddenSearch.hide();\n          return false;\n        });\n\n        const $hiddenSearchContainer = $('.hidden-search-container', target);\n        const $searchForm = $('.hidden-search-container .main-search', target);\n        if ($hiddenSearchContainer.length) {\n          const $toolbarContainer = $('#toolbar', target).closest('.container');\n\n          $(target).on('click.headerSection', '[data-show-search-form]', function () {\n            if ($hiddenSearchContainer.find('.main-search').length) {\n              $hiddenSearchContainer.addClass('hidden-search-container--open');\n              $('body').addClass('hidden-search-container--open');\n\n              setTimeout(() => {\n                $hiddenSearchContainer.find('.main-search__input').focus();\n              }, 100);\n            } else {\n              if (theme.browser.isSafari()) {\n                $toolbarContainer.find('.main-search').toggleClass('-in').show();\n                $toolbarContainer.find('.main-search__input').focus();\n              } else {\n                $toolbarContainer.find('.main-search').slideToggle(200, function () {\n                  setTimeout(() => {\n                    $toolbarContainer.find('.main-search__input').focus();\n                  }, 100);\n                }).toggleClass('-in');\n              }\n            }\n            return false;\n          });\n\n          function moveSearchContainer() {\n            if (theme.viewport.isXs() && $('.hidden-search-container .main-search', target).length > 0) {\n              $toolbarContainer.append($searchForm.addClass('main-search--revealable'));\n            } else if (theme.viewport.isSm() && $('.hidden-search-container .main-search', target).length === 0) {\n              $hiddenSearchContainer.append($searchForm.removeClass('main-search--revealable').css('display', ''));\n            }\n          }\n\n          $(window).on('debouncedresize.headerSection', moveSearchContainer);\n          moveSearchContainer();\n        }\n\n        //Esc pressed\n        $(target).on('keyup.headerSection', (evt) => {\n          if (evt.which === 27) {\n            liveSearch.popup.hide();\n            liveSearch.hiddenSearch.hide();\n          }\n        });\n\n        //If somewhere other than the popup is clicked\n        $('body').on('click.headerSection', (evt) => {\n          if ($liveSearchForm.has(evt.target).length === 0) {\n            liveSearch.popup.hide();\n            liveSearch.hiddenSearch.hide();\n          }\n        });\n      }\n\n      /// Mobile sub-nav\n      var navStack = [];\n      $(document).on('click', '#mobile-nav .open-sub-nav', function () {\n        // hide current & add to stack\n        var $toHide = $('#mobile-nav .inner:not(.hide), #mobile-nav .sub-nav.show:not(.hide)').addClass('hide');\n        $toHide.find('a, button').attr('tabindex', '-1');\n        navStack.push($toHide);\n        // show new\n        var $toShow = $('#mobile-nav .sub-nav[data-is-subnav-for=\"' + $(this).data('sub-nav') + '\"]').first().addClass('show');\n        $toShow.find('a, button').removeAttr('tabindex');\n        $(this).attr('aria-expanded', true);\n        return false;\n      }).on('click', '#mobile-nav .close-sub-nav', function () {\n        // hide current\n        $(this).closest('.sub-nav').removeClass('show').find('a, button').attr('tabindex', '-1');\n        // reveal last seen & pop off stack\n        var $popped = navStack.pop().removeClass('hide');\n        $popped.find('a, button').removeAttr('tabindex');\n        $popped.find('[aria-expanded=\"true\"]').removeAttr('aria-expanded');\n        return false;\n      }).on('click', '#mobile-nav a.nav-item-link[href=\"#\"], #mobile-nav a.sub-nav-item-link[href=\"#\"]', function () {\n        // #-link opens child nav\n        $(this).closest('li').find('button').click();\n        return false;\n      });\n    };\n\n    this.onSectionUnload = function (target) {\n      $('.main-nav', target).off('click mouseenter mouseleave touchstart touchend keydown');\n      $('#mobile-nav').remove();\n      $(window).off('.headerSection');\n      $(target).off('.headerSection');\n      $('.disclosure', target).add('#mobile-nav .disclosure').each(function () {\n        $(this).data('disclosure').unload();\n      });\n      $('select.replaced', target).selectReplace('destroy');\n    };\n  }();\n\n  theme.AnnouncementBarSection = new function () {\n    this.onSectionLoad = function (target) {\n      $('.disclosure', target).each(function () {\n        $(this).data('disclosure', new theme.Disclosure($(this)));\n      });\n\n      // Keep the spacer width equal to the width of the localization dropdowns/socials\n      const $spacers = $('.announcement-bar__spacer', target);\n\n      if ($spacers.length > 1) {\n        function doAnnouncementBarResizeEvents() {\n          let maxWidth = 0;\n\n          $spacers.each(function () {\n            if ($(this).width() > maxWidth) {\n              maxWidth = $(this).width();\n            }\n          });\n\n          $spacers.width(parseInt(maxWidth));\n        }\n\n        $(window).on('debouncedresize.announcementBarSection', doAnnouncementBarResizeEvents);\n        doAnnouncementBarResizeEvents();\n      }\n    };\n\n    this.onSectionUnload = function (target) {\n      $('.disclosure', target).each(function () {\n        $(this).data('disclosure').unload();\n      });\n      $(window).off('.announcementBarSection');\n    };\n  }();\n\n  theme.BlogTemplateSection = new function () {\n    this.onSectionLoad = function (target) {\n      /// Style any dropdowns\n      $('select:not([name=id])', target).selectReplace();\n\n      // Masonry\n      $('.use-masonry', target).each(function () {\n        var $toMasonry = $(this);\n        window.$ = window.jQuery = $; // rebind jQuery\n        theme.loadScriptOnce(theme.scripts.masonry, function () {\n          $toMasonry.addClass('masonry').masonry({\n            itemSelector: '.article',\n            visibleStyle: { opacity: 1, transform: 'translate3d(0,0,0)' },\n            hiddenStyle: { opacity: 0, transform: 'translate3d(0,20px,0)' }\n          });\n          // hack: needs a second run, may as well do after load\n          setTimeout(function () {\n            $(function () {\n              $toMasonry.masonry();\n            });\n          }, 10);\n        });\n      });\n\n      // Infinite scroll\n      $('.articles.use-infinite-scroll', target).each(function () {\n        var $cont = $(this);\n        window.$ = window.jQuery = $; // rebind jQuery\n        theme.loadScriptOnce(theme.scripts.jqueryInfiniteScroll, function () {\n          $cont.infinitescroll({\n            navSelector: \".pagination\",\n            nextSelector: \".pagination .next\",\n            itemSelector: \".articles .article\",\n            loading: {\n              msgText: theme.strings.infiniteScrollBlogLoading,\n              finishedMsg: theme.strings.infiniteScrollBlogFinishedMsg\n            },\n            pathParse: function (path, nextPage) {\n              return path.match(/^(.*page=)[0-9]*(&.*)?$/).splice(1);\n            }\n          }, function (newElements) {\n            $cont.find('#infscr-loading').remove(); // for nth-child\n            if ($cont.hasClass('masonry')) {\n              $(newElements).hide().imagesLoaded(function () {\n                $(newElements).show();\n                $cont.masonry('appended', $(newElements), true);\n              });\n            }\n\n            theme.initAnimateOnScroll();\n          });\n        });\n      });\n\n      /// Check that tags fit in one line\n      if ($('.page-title.opposing-items .tags', target).length > 0) {\n        function checkTagWidths() {\n          var $cont = $('.page-title.opposing-items');\n          var $title = $cont.children('.left');\n          var $tags = $cont.children('.tags');\n          $cont.toggleClass('collapse-tags', $tags.outerWidth(true) > $cont.width() - $title.outerWidth(true));\n          if ($cont.hasClass('collapse-tags')) {\n            if ($cont.find('.more-link').length == 0) {\n              $tags.before([\n              '<a href=\"#\" class=\"more-link\">',\n              theme.strings.blogsShowTags,\n              '</a>'].join(''));\n            }\n          } else {\n            $cont.find('.more-link').remove();\n          }\n        }\n        $(window).on('debouncedresize.checktagswidth checktagswidth.checktagswidth', checkTagWidths).trigger('checktagswidth');\n        $(function () {\n          checkTagWidths();\n        });\n\n        $(document).on('click.checktagswidth', '.page-title.opposing-items.collapse-tags .more-link', function (e) {\n          e.preventDefault();\n          $(this).closest('.opposing-items').toggleClass('reveal-tags');\n        });\n      }\n    };\n\n    this.onSectionUnload = function (target) {\n      $(window).off('.checktagswidth .blogTemplateMasonry');\n      $(document).off('.checktagswidth');\n      $('select.replaced', target).selectReplace('destroy');\n    };\n  }();\n\n  theme.CartTemplateSection = new function () {\n    this.onSectionLoad = function (container) {\n      const _this = this;\n      this.namespace = theme.namespaceFromSection(container);\n\n      // Show shipping calculator\n      if ($('#shipping-calculator', container).length) {\n        // load scripts in order\n        theme.loadScriptOnce(theme.scripts.underscore, function () {\n          theme.loadScriptOnce(theme.scripts.shopifyCommon, function () {\n            // final script can be async\n            theme.loadScriptOnce(theme.scripts.jqueryCart,\n            function () {\n              Shopify.Cart.ShippingCalculator.show({\n                submitButton: theme.strings.shippingCalcSubmitButton,\n                submitButtonDisabled: theme.strings.shippingCalcSubmitButtonDisabled,\n                customerIsLoggedIn: theme.customerIsLoggedIn,\n                moneyFormat: theme.shippingCalcMoneyFormat\n              });\n\n              $('select', this).selectReplace();\n\n              setTimeout(function () {\n                this.trigger('change');\n              }.bind($('select', this)), 100);\n            }.bind(container));\n\n          }, null, true);\n        }, null, true);\n      }\n\n      $(container).on(`click${this.namespace}`, '.qty-adjuster__remove', function () {\n        if (confirm(theme.strings.cartConfirmRemove)) {\n          if ($(container).data('ajax-update')) {\n            _this.functions.updateCart.call(this, {\n              line: $(this).data('line'),\n              quantity: 0\n            });\n\n\n            return false;\n          } else {\n            return true;\n          }\n        } else {\n          return false;\n        }\n      });\n\n      if ($(container).data('ajax-update')) {\n        // listen to cart changes\n        $(document).on('theme:cartchanged.cartTemplateSection', this.functions.refreshCartDependentContent.bind(this));\n\n        $(container).on(`change${this.namespace} changeFromButton${this.namespace}`, '.qty-adjuster__value', function (evt) {\n          const $currentTarget = $(evt.currentTarget);\n          if (this.replacingContent ||\n          $currentTarget.data('initial-value') && $currentTarget.data('initial-value') === $currentTarget.val() ||\n          $currentTarget.val().length === 0) {\n            return;\n          }\n\n          // focus on -/+ button or input, depending on source of event\n          let toFocusId;\n          if (evt.type === 'changeFromButton') {\n            toFocusId = $(evt.data).attr('id');\n          } else {\n            toFocusId = $currentTarget.attr('id');\n          }\n\n          $currentTarget.closest('.cart-item').addClass('cart-item-loading');\n\n          this.functions.updateCart.call(this, {\n            line: $currentTarget.data('line'),\n            quantity: $currentTarget.val()\n          }, function () {\n            // after update, set focus\n            $('#' + toFocusId).focus();\n          });\n\n        }.bind(this));\n      }\n\n      theme.loadCartNoteMonitor(container);\n    };\n\n    this.functions = {\n      refreshCartDependentContent: function () {\n        if (this.cartRefreshXhr) {\n          this.cartRefreshXhr.abort();\n        }\n        // fetch new html for the page\n        this.cartRefreshXhr = $.ajax({\n          type: 'GET',\n          url: theme.routes.cart_url + '?view=ajax',\n          success: function (data) {\n            let toReplace = ['.cart-items', '.cart-subtotal'];\n            const $newDom = $('<div>' + data + '</div>');\n\n            // remove any transitions\n            $newDom.find('[data-cc-animate]').removeAttr('data-cc-animate');\n\n            for (var i = 0; i < toReplace.length; i++) {\n              if ($newDom.find(toReplace[i]).length) {\n                this.replacingContent = true; // to avoid triggering change events when focus is lifted before DOM replacement\n                $('[data-section-type=\"cart-template\"] ' + toReplace[i]).html(\n                $newDom.find(toReplace[i]).html());\n\n              } else {\n                //Replace the whole section\n                $('[data-section-type=\"cart-template\"]').html(\n                $newDom.find('[data-section-type=\"cart-template\"]').html());\n\n              }\n              this.replacingContent = false;\n            }\n          }.bind(this),\n          error: function (data) {\n            if (data.statusText != 'abort') {\n              console.error('Error refreshing page', data);\n              $('#cartform').submit();\n            }\n          },\n          complete: function () {\n            this.cartRefreshXhr = null;\n          }.bind(this)\n        });\n      },\n\n      updateCart: function (params, successCallback) {\n        if (this.cartXhr) {\n          this.cartXhr.abort();\n        }\n        if (this.cartRefreshXhr) {\n          this.cartRefreshXhr.abort();\n        }\n        this.cartXhr = $.ajax({\n          type: 'POST',\n          url: theme.routes.cart_change_url + '.js',\n          data: params,\n          dataType: 'json',\n          success: function () {\n            document.documentElement.dispatchEvent(\n            new CustomEvent('theme:cartchanged', { bubbles: true, cancelable: false }));\n\n            if (successCallback) {\n              successCallback();\n            }\n          },\n          error: function (data) {\n            if (data.statusText != 'abort') {\n              console.error('Error updating cart', data);\n              $('#cartform').submit();\n            }\n          },\n          complete: function () {\n            this.cartXhr = null;\n          }.bind(this)\n        });\n      }\n    };\n\n    this.onSectionUnload = function (container) {\n      // remove shipping calc events\n      $('#shipping-calculator #address_country', container).off('change');\n      $('#shipping-calculator .get-rates', container).off('click');\n      $('select.replaced', container).selectReplace('destroy');\n      theme.unloadCartNoteMonitor(container);\n    };\n  }();\n\n  theme.ProductRecommendations = new function () {\n    this.onSectionLoad = function (container) {\n      // Look for an element with class 'product-recommendations'\n      var productRecommendationsSection = container;\n      if (productRecommendationsSection === null) {return;}\n\n      // Create request and submit it using Ajax\n      var request = new XMLHttpRequest();\n      request.open(\"GET\", productRecommendationsSection.dataset.url, true);\n      request.onload = function () {\n        if (request.status >= 200 && request.status < 300) {\n          var newContainer = document.createElement(\"div\");\n          newContainer.innerHTML = request.response;\n          productRecommendationsSection.innerHTML = newContainer.querySelector(\".product-recommendations\").innerHTML;\n          theme.loadProductGrid(productRecommendationsSection);\n        }\n      };\n      request.send();\n    };\n  }();\n\n  theme.TestimonialsSection = new function () {\n    this.onSectionLoad = function (target) {\n      theme.initContentSlider(target);\n    };\n\n    this.onSectionUnload = function (target) {\n      $('.slick-slider', target).slick('unslick').off('init');\n      $(window).off('.testimonialsSection');\n    };\n\n    this.onBlockSelect = function (target) {\n      $(target).closest('.slick-slider').\n      slick('slickGoTo', $(target).data('slick-index')).\n      slick('slickPause');\n    };\n\n    this.onBlockDeselect = function (target) {\n      $(target).closest('.slick-slider').\n      slick('slickPlay');\n    };\n  }();\n\n\n  $(function ($) {\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    /// Style dropdowns (outside of the product form)\n    $('select:not([name=id])').filter(function () {\n      $(this).closest('.product-form').length == 0;\n    }).selectReplace();\n\n    /// Uncontained images\n    theme.uncontainImages($('body'));\n\n    /// General lightbox popups\n    $('a[rel=lightbox]').colorbox({ minWidth: '200', maxWidth: '96%', maxHeight: '96%' });\n\n    /// Init carousels\n    theme.carousels.init();\n\n    /// Check alt sections\n    theme.assessFullWidthSections();\n\n    /// Any section load reorder\n    $(document).on('shopify:section:reorder', function (e) {\n      theme.assessFullWidthSections();\n    });\n\n    /// Any section load\n    $(document).on('shopify:section:load', function (e) {\n      /// Handle special wide images - available inside any rich text content\n      theme.uncontainImages(e.target);\n      theme.assessFullWidthSections();\n      theme.carousels.init();\n\n      /// Init any inline videos\n      $('.section-background-video--inline', e.target).each(function () {\n        theme.VideoManager.onSectionLoad($(this)[0]);\n      });\n    });\n\n    /// Any section unload\n    $(document).on('shopify:section:unload', function (e) {\n      /// Unload any inline videos\n      $('.section-background-video--inline', e.target).each(function () {\n        theme.VideoManager.onSectionUnload($(this)[0]);\n      });\n\n      theme.carousels.destroy();\n    });\n\n    /// Dropdowns that redirect\n    $(document).on('change', 'select.redirect', function () {\n      window.location = $(this).val();\n    });\n\n    /// Custom share buttons\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    });\n\n    /// Overlay click\n    $(document).on('click', '#page-overlay, .side-menu-header--close', function () {\n      $('body').removeClass('show-cart-summary show-mobile-nav product-added-to-cart');\n      return false;\n    });\n\n    /// Toggles for side-modals\n    $(document).on('click', '.toggle-mob-nav', function () {\n      //prep for reveal\n      $('.cart-summary').removeClass('active');\n      $('#mobile-nav').addClass('active');\n      //toggle\n      if (!$('body').toggleClass('show-mobile-nav').hasClass('show-mobile-nav')) {\n        setTimeout(function () {\n          $('#mobile-nav').removeAttr('tabindex');\n          $('body a:first:visible').focus();\n        }, 500);\n      } else {\n        // move focus to menu container\n        setTimeout(function () {\n          $('#mobile-nav').attr('tabindex', '0').focus();\n        }, 500);\n      }\n      return false;\n    });\n\n    if (theme.useSideCartSummary != 'off') {\n      $(document).on('click', '.toggle-cart-summary', function () {\n        // check if cart is toggleable\n        if ($('.cart-summary .toggle-cart-summary').is(':visible')) {\n          //prep for reveal\n          $('#mobile-nav').removeClass('active');\n          $('.cart-summary').addClass('active');\n          $('body').removeClass('product-added-to-cart');\n          //toggle\n          if (!$('body').toggleClass('show-cart-summary').hasClass('show-cart-summary')) {\n          } else {\n            setTimeout(function () {\n              $('.cart-summary__close').focus();\n            }, 200);\n          }\n          return false;\n        }\n      });\n    }\n\n    /// Quantity adjuster initialisation\n    $(document).on('keypress', '.qty-adjuster--ajax .qty-adjuster__value', function (e) {\n      if (e.which === 13) {\n        $(this).trigger('change');\n        return false;\n      } else if (e.which !== 8 && e.which !== 0 && (e.which < 48 || e.which > 57)) {\n        return false;\n      }\n    });\n\n    $(document).on('click', '.qty-adjuster__down, .qty-adjuster__up', function (e) {\n      e.preventDefault();\n      var $qtyAdj = $(this).closest('.qty-adjuster'),\n        $valueInput = $qtyAdj.find('.qty-adjuster__value'),\n        newValue = parseInt($valueInput.val()) + ($(this).hasClass('qty-adjuster__down') ? -1 : 1),\n        maxValue = $(this).closest('[data-limit]').attr('data-limit');\n\n      if (maxValue) {\n        maxValue = parseInt(maxValue);\n      }\n\n      if (maxValue && newValue > maxValue) {\n        theme.showQuickPopup(theme.strings.maximumQuantity.replace('[quantity]', maxValue), $valueInput);\n        $valueInput.val(maxValue).trigger('change');\n      } else {\n        $valueInput.val(newValue).trigger('change');\n      }\n\n      theme.updateAdjusterButtonsDisabledState($qtyAdj, false);\n    });\n\n    $(document).on('click', '.qty-adjuster--ajax .qty-adjuster__remove', function (e) {\n      e.preventDefault();\n      $(this).closest('.qty-adjuster').find('.qty-adjuster__value').val(0).trigger('change');\n\n      var $cartItem = $(this).closest('.cart-summary-item-container');\n      $cartItem.addClass('cart-summary-item-container--out');\n      $cartItem.slideUp(300);\n    });\n\n    $(document).on('click', '.btn[data-btn-type=\"in-cart\"]', function (e) {\n      e.preventDefault();\n      const $form = $(this).closest('form');\n      $form.find(':submit').attr('disabled', 'disabled').each(function () {\n        $(this).addClass('product-add--adding');\n      });\n      $(`.cart-form .cart-summary-item-container[data-product-id=\"${$form.find('select[name=\"id\"]').val()}\"] .qty-adjuster__remove`).trigger('click');\n    });\n\n    const doQuantityUpdateXhr = theme.debounce(function () {\n      const variantId = $(this).closest('.qty-adjuster').attr('data-line-item-id');\n      const $qtyAdj = $(`.qty-adjuster[data-line-item-id=\"${variantId}\"]`);\n      theme.disableInPlaceQuantityAdjustment($qtyAdj);\n      theme.cartLoadingStarted();\n\n      const $mainProductForm = $(`.product-form--main .product-purchase-form .qty-adjuster[data-line-item-id=\"${variantId}\"]`).closest('form');\n      if ($mainProductForm.length) {\n        $mainProductForm.find(':submit').attr('disabled', 'disabled').each(function () {\n          $(this).addClass('product-add--adding');\n        });\n      }\n\n      $.post(\n      theme.routes.cart_url + '/change.js',\n      {\n        quantity: $(this).val(),\n        id: variantId\n      },\n      function (data) {\n        theme.updateCartSummaries(false);\n      },\n      'json').\n      fail(function () {\n        //Enable controls in case of a failure so user can retry\n        theme.enableInPlaceQuantityAdjustment($qtyAdj);\n      }).\n      always(function () {\n        $qtyAdj.each(function () {\n          // if value has changed to 0, revert to 'add to cart'\n          if ($(this).find('.qty-adjuster__value').val() == 0) {\n            theme.enableInPlaceQuantityAdjustment($(this));\n          }\n        });\n        theme.cartLoadingFinished();\n      });\n    });\n\n    $(document).on('change', '.qty-adjuster--ajax .qty-adjuster__value', function (e) {\n      var $form = $(this).closest('.product-form, .product-block-mini__action');\n      if ($form.hasClass('product-form--not-quickbuy')) {\n        if ($form.hasClass('product-form--added')) {\n          doQuantityUpdateXhr.call(this);\n        }\n      } else {\n        doQuantityUpdateXhr.call(this);\n      }\n    });\n\n    /// In-page links\n    $(document).on('click', 'a[href^=\"#\"]:not([href=\"#\"]):not(.skip-link):not(.ignore-scroll)', function (e) {\n      var $target = $($(this).attr('href')).first();\n      if ($target.length == 1) {\n        $('html:not(:animated),body:not(:animated)').animate({\n          scrollTop: $target.offset().top\n        }, 500);\n        e.preventDefault();\n      }\n    });\n\n    /// Reload cart summary on page load, if we added something on the previous page (in response to back-button use)\n    if (theme.utils.cookie.exists('theme_added_to_cart') && theme.utils.cookie.read('theme_added_to_cart') == 'justnow') {\n      theme.utils.cookie.erase('theme_added_to_cart');\n      theme.updateCartSummaries(false);\n    }\n\n    /// Heights in grids\n    function normHeights() {\n      $('[data-normheights]').each(function () {\n        var $items = $(this).find($(this).data('normheights')),\n          childFilter = $(this).data('normheights-inner'),\n          tallest = 0,\n          lastYOffset = 0,\n          row = [];\n        $items.each(function (index) {\n          var $img = $(this).find(childFilter);\n          var yOffset = $(this).position().top;\n          if (index == 0) {\n            lastYOffset = yOffset;\n          } else if (yOffset != lastYOffset) {\n            $(row).css('min-height', tallest);\n            yOffset = $(this).position().top;\n            row.length = 0;\n            tallest = 0;\n          }\n          lastYOffset = yOffset;\n          row.push(this);\n          var h = $img.height();\n          if (h > tallest) tallest = h;\n        });\n        $(row).css('min-height', tallest);\n      });\n\n      // only reserve product weight\n      $('.product-grid').each(function () {\n        const $weights = $(this).find('.product-block .product-block__weight');\n        let weightLength = 0;\n        $weights.each(function () {\n          weightLength += $(this).text().replace('&nbsp;', '').trim().length;\n        });\n\n        if (weightLength === 0) {\n          $weights.remove();\n        }\n      });\n\n      // also asses grids that can only show on item per row\n      $('.product-grid.one-row').each(function () {\n        var tallestVisibleChild = 0;\n        var $productBlocks = $(this).find('.product-block:not(.product-block--flex-spacer)');\n        $(this).css('position', 'relative');\n        $productBlocks.find('.product-block:not(.product-block--flex-spacer)').each(function (index) {\n          if ($(this).position().top == 0) {\n            var h = $(this).outerHeight(true);\n            if (h > tallestVisibleChild) {\n              tallestVisibleChild = h;\n            }\n          } else {\n            return false;\n          }\n        });\n        $(this).css('height', tallestVisibleChild);\n        $productBlocks.removeClass('hidden').each(function (index) {\n          if ($(this).position().top > 0) {\n            $(this).addClass('hidden');\n          }\n        });\n        $(this).css({\n          height: '',\n          position: ''\n        });\n      });\n    }\n\n    $(window).on('debouncedresize normheights', normHeights).trigger('normheights');\n    $(function () {\n      normHeights();\n    });\n\n    $(document).on('click', '#colorbox .close-box', function () {\n      $.colorbox.close();\n      return false;\n    }).on('click', '#colorbox .action-icons .prev-item, #colorbox .action-icons .next-item', function () {\n      $(`#${$(this).data('idx')} .quick-buy`).click();\n      if (theme.activeQuickBuyMediaGallery) {\n        theme.activeQuickBuyMediaGallery.destroy();\n      }\n      return false;\n    });\n\n\n    /// Search in header - for visual effect\n    $(document).on('focusin focusout', '.toolbar .main-search__form input', function (e) {\n      $(this).closest('.main-search__form').toggleClass('focus', e.type == 'focusin');\n    });\n\n    /// Page height assessment\n    function setMinWrapperHeight() {\n      // inner wrap contains the border\n      $('#page-wrap-inner').css('min-height', $(window).height());\n    }\n    $(window).on('debouncedresize setminheight', setMinWrapperHeight).trigger('setminheight');\n    $(function () {\n      setMinWrapperHeight();\n    });\n\n    /// Translations for colorbox\n    $.extend($.colorbox.settings, {\n      previous: theme.strings.colorBoxPrevious,\n      next: theme.strings.colorBoxNext,\n      close: theme.strings.colorBoxClose\n    });\n\n    //Hide the footer on the challenge page\n    if (document.querySelector('.shopify-challenge__container')) {\n      document.getElementById('page-footer').style.display = 'none';\n    }\n\n    if (theme.device.isTouch()) {\n      document.getElementsByTagName('html')[0].classList.add('touch');\n    }\n\n    // Update the cart when the back button is pressed\n    window.addEventListener(\"pageshow\", function (event) {\n      if (event.persisted) {\n        theme.updateCartSummaries(false, false, false);\n      }\n    });\n\n    /// Register all sections\n    theme.Sections.init();\n    theme.Sections.register('slideshow', theme.SlideshowSection);\n    theme.Sections.register('header', theme.HeaderSection, { deferredLoad: false });\n    theme.Sections.register('footer', theme.FooterSection);\n    theme.Sections.register('cart-drawer', theme.CartDrawerSection, { deferredLoad: false });\n    theme.Sections.register('collection-template', theme.FilterManager, { deferredLoad: false });\n    theme.Sections.register('product-template', theme.ProductTemplateSection);\n    theme.Sections.register('blog-template', theme.BlogTemplateSection, { deferredLoad: false });\n    theme.Sections.register('cart-template', theme.CartTemplateSection, { deferredLoad: false });\n    theme.Sections.register('collection-listing', theme.CollectionListingSection, { deferredLoad: false });\n    theme.Sections.register('featured-collection', theme.FeaturedCollectionSection);\n    theme.Sections.register('featured-collections', theme.FeaturedCollectionsSection);\n    theme.Sections.register('background-video', theme.VideoManager);\n    theme.Sections.register('gallery', theme.GallerySection);\n    theme.Sections.register('announcement-bar', theme.AnnouncementBarSection, { deferredLoad: false });\n    theme.Sections.register('product-recommendations', theme.ProductRecommendations);\n    theme.Sections.register('testimonials', theme.TestimonialsSection);\n    theme.Sections.register('search-template', theme.FilterManager, { deferredLoad: false });\n  });\n\n\n  //Register dynamically pulled in sections\n  $(function ($) {\n    if (cc.sections.length) {\n      cc.sections.forEach((section) => {\n        try {\n          let 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 ${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 */"],
  "mappings": "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",
  "names": ["t", "r", "a", "o", "n", "i", "prefix", "status", "container", "response", "checkWideImages", "refreshZoom", "variant", "updateAdjustersWithItemData", "$", "doNavResizeEvents", "ensureDropdownPosition", "doPredictiveSearch", "moveSearchContainer", "doAnnouncementBarResizeEvents", "checkTagWidths"]
}
