{"version":3,"sources":["webpack:///./src/components/Notification.vue?b809","webpack:///./src/lib/messages.js","webpack:///./src/components/Notification.vue?fbb4","webpack:///./src/components/lists/ProductList/ProductList.vue?5506","webpack:///./src/components/Notification.vue?245f","webpack:///src/components/Notification.vue","webpack:///./src/components/Notification.vue?aa79","webpack:///./src/components/Notification.vue","webpack:///./src/mixins/notification.js","webpack:///./src/components/lists/ProductList/ProductListProduct.vue?e4cd","webpack:///src/components/lists/ProductList/ProductListProduct.vue","webpack:///./src/components/lists/ProductList/ProductListProduct.vue?8d0c","webpack:///./src/components/lists/ProductList/ProductListProduct.vue","webpack:///./src/components/lists/ProductList/ProductListFilter.vue?8208","webpack:///src/components/lists/ProductList/ProductListFilter.vue","webpack:///./src/components/lists/ProductList/ProductListFilter.vue?6014","webpack:///./src/components/lists/ProductList/ProductListFilter.vue","webpack:///./src/components/lists/ProductList/OrderForm.vue?f7f8","webpack:///src/components/lists/ProductList/OrderForm.vue","webpack:///./src/components/lists/ProductList/OrderForm.vue?1df4","webpack:///./src/components/lists/ProductList/OrderForm.vue","webpack:///src/components/lists/ProductList/ProductList.vue","webpack:///./src/components/lists/ProductList/ProductList.vue?4a1a","webpack:///./src/components/lists/ProductList/ProductList.vue","webpack:///./src/components/lists/ProductList/ProductListProduct.vue?579c","webpack:///./src/components/lists/ProductList/OrderForm.vue?6bb0","webpack:///./src/components/lists/ProductList/OrderForm.vue?81d4","webpack:///./src/components/Overlay.vue?6c9f","webpack:///./src/components/lists/ProductList/ProductList.vue?d317","webpack:///./src/components/Overlay.vue?26ed","webpack:///./src/mixins/parse.js","webpack:///./src/components/Notification.vue?ac6b","webpack:///./src/components/Overlay.vue?c468","webpack:///./src/components/lists/ProductList/OrderForm.vue?227b","webpack:///./src/components/lists/ProductList/ProductListProduct.vue?928c","webpack:///./src/components/lists/ProductList/ProductListFilter.vue?1fb2","webpack:///./src/components/lists/ProductList/ProductList.vue?ea96","webpack:///./src/components/Overlay.vue?0483","webpack:///src/components/Overlay.vue","webpack:///./src/components/Overlay.vue?3525","webpack:///./src/components/Overlay.vue","webpack:///./src/components/lists/ProductList/ProductListFilter.vue?d428","webpack:///./src/components/lists/ProductList/ProductListProduct.vue?6918","webpack:///./src/components/lists/ProductList/ProductList.vue?38d9","webpack:///./src/components/lists/ProductList/ProductListFilter.vue?f571"],"names":["messagesUrl","siteId","createMessage","message","request","content","__esModule","default","module","i","locals","exports","add","render","_vm","this","_h","$createElement","_c","_self","staticClass","domProps","_s","title","_e","_l","category","key","attrs","toLowerCase","_v","products","item","index","on","addToCart","class","totalQty","activeOption","productOptionsActive","contacted","lineItems","totalPrice","currency","sendMessage","activateType","updateQuantity","removeFromCart","model","value","callback","$$v","contact","expression","categories","sender_name","separator","staticRenderFns","isSuccess","icon","name","props","type","String","required","computed","components","Sprite","injectStyles","context","style0","__inject__","component","data","notification","active","closeDelay","Notification","resourceWord","methods","triggerNotification","resource","action","window","setTimeout","classes","images","imageAlt","parse","product","product_title","product_currency","product_price","product_compare_price","product_description","activateFilters","$event","scrollToSection","activateOrderForm","preventDefault","submit","apply","arguments","_m","image","url","qty","lineItemPrice","parseFloat","toFixed","sender_nameError","$v","$touch","$set","sender_emailError","sender_email","directives","rawName","target","composing","additionalNotes","mixins","Array","Number","LazyImage","ProductQuantity","hasItems","itemPrice","price","formattedBody","forEach","string","$emit","validations","mounted","body","watch","SectionSeparator","ProductListProduct","ProductListFilter","OrderForm","Overlay","messageParams","parseInt","setCategories","push","alreadyInCart","find","currentQty","filter","prod","JSON","currentTarget","closeOverlay","_t"],"mappings":"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","file":"js/chunks/product-list.js?id=62a62dd5a9d8bf08ea8a","sourcesContent":["export * from \"-!../../node_modules/vue-style-loader/index.js??ref--9-oneOf-1-0!../../node_modules/css-loader/index.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-3!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-4!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notification.vue?vue&type=style&index=0&lang=sass&\"","import {request} from '@/lib/request'\n\nfunction messagesUrl(siteId) {\n  return `/sites/${siteId}/messages`\n}\n\n/**\n * Create a contact message\n *\n * @param siteId {string} - site id\n * @param message {object} - message\n *\n * @returns {promise}\n */\nexport function createMessage(siteId, message) {\n  return request('post', messagesUrl(siteId), message)\n}\n","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/index.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-3!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-4!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notification.vue?vue&type=style&index=0&lang=sass&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"9b5e9076\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"page-section product-list\"},[_c('div',{staticClass:\"container\"},[(_vm.title)?_c('h2',{staticClass:\"list-title\",domProps:{\"innerHTML\":_vm._s(_vm.title)}}):_vm._e(),_vm._l((_vm.categories),function(category){return _c('div',{key:category},[_c('span',{staticClass:\"category-anchor\",attrs:{\"id\":(\"product-category-\" + (category.toLowerCase()))}}),_c('h2',{staticClass:\"list-title\"},[_vm._v(_vm._s(category))]),_vm._l((_vm.products(category)),function(item,index){return _c('ProductListProduct',{key:(\"product-\" + index),attrs:{\"product\":item},on:{\"addToCart\":_vm.addToCart}})})],2)}),_c('div',{class:(\"item-count-\" + _vm.totalQty)},[_c('div',{class:[\n          'product-list-options',\n          (_vm.activeOption + \"-active\"),\n          {'is-active': _vm.productOptionsActive}\n          ]},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"options-inner\"},[(!_vm.contacted)?_c('OrderForm',{attrs:{\"lineItems\":_vm.lineItems,\"totalQty\":_vm.totalQty,\"totalPrice\":_vm.totalPrice,\"currency\":_vm.currency},on:{\"submit\":_vm.sendMessage,\"activateOrderForm\":_vm.activateType,\"updateQuantity\":_vm.updateQuantity,\"removeFromCart\":_vm.removeFromCart},model:{value:(_vm.contact),callback:function ($$v) {_vm.contact=$$v},expression:\"contact\"}}):_vm._e(),_c('ProductListFilter',{attrs:{\"categories\":_vm.categories},on:{\"activateFilters\":_vm.activateType}})],1)])])])],2),_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[(_vm.contacted)?_c('Overlay',[_c('h2',[_vm._v(\"Thanks, \"+_vm._s(_vm.contact.sender_name)+\"!\")]),_c('p',[_vm._v(\"Your order was successfully sent and you'll hear from us soon!\")])]):_vm._e()],1),(_vm.separator)?_c('SectionSeparator',{attrs:{\"separator\":_vm.separator}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"notification\",class:{ 'is-success': _vm.isSuccess }},[_c('Sprite',{attrs:{\"name\":_vm.icon}}),_c('span',[_vm._v(_vm._s(_vm.content))])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"notification\" :class=\"{ 'is-success': isSuccess }\">\n    <Sprite :name=\"icon\"/>\n    <span>{{content}}</span>\n  </div>\n</template>\n\n<script>\nimport Sprite from '@/components/Sprite'\n\nexport default {\n  name: 'Notification',\n\n  props: {\n    type: {\n      type: String,\n      required: true\n    },\n\n    content: {\n      type: String,\n      required: true\n    }\n  },\n\n  computed: {\n    icon() {\n      return this.isSuccess ? 'tick' : 'close'\n    },\n\n    isSuccess() {\n      return this.type === 'success'\n    }\n  },\n\n  components: {\n    Sprite\n  }\n}\n</script>\n\n<style lang=\"sass\">\n@import '../stylesheets/base/variables'\n@import '../stylesheets/helpers/mixins'\n@import '../stylesheets/helpers/extends'\n\n.notification\n  background: rgba(#fff, 0.95)\n  text-transform: uppercase\n  z-index: 100\n  font-weight: bold\n  display: flex\n  flex-direction: column\n  align-items: center\n  justify-content: center\n  height: 100%\n  width: 100%\n  position: absolute\n  letter-spacing: 1px\n  top: 0\n  bottom: 0\n  left: 0\n  z-index: 100\n  padding: 20px 15px\n  opacity: 0\n  animation: fade-in-out 3.5s ease-in-out\n  animation-fill-mode: forwards\n\n  .sprite\n    background: $color-error\n    opacity: 0\n    transform: scale(0.5)\n    animation: scale-in .2s .3s ease-in-out\n    animation-fill-mode: forwards\n    fill: #fff\n\n  span\n    font-size: 14px\n    background: linear-gradient(to right, #898989, $color-error)\n    background-size: 200% auto\n    color: #898989\n    background-clip: text\n    text-fill-color: transparent\n    -webkit-background-clip: text\n    -webkit-text-fill-color: transparent\n    animation: textLoader 4s .5s linear\n\n  &.is-success\n    .sprite\n      background: $color-success\n\n    span\n      background: linear-gradient(to right, #898989, $color-success)\n      background-size: 200% auto\n      background-clip: text\n      color: #898989\n      text-fill-color: transparent\n      -webkit-background-clip: text\n      -webkit-text-fill-color: transparent\n      animation: textLoader 4s .5s linear\n\n  .sprite\n    border-radius: 50%\n    width: 60px\n    height: 60px\n    padding: 15px\n    margin-bottom: $gap-medium\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notification.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notification.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Notification.vue?vue&type=template&id=3b833d12&\"\nimport script from \"./Notification.vue?vue&type=script&lang=js&\"\nexport * from \"./Notification.vue?vue&type=script&lang=js&\"\nfunction injectStyles (context) {\n  \n  var style0 = require(\"./Notification.vue?vue&type=style&index=0&lang=sass&\")\nif (style0.__inject__) style0.__inject__(context)\n\n}\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  injectStyles,\n  null,\n  \"00354628\"\n  \n)\n\nexport default component.exports","import Notification from '@/components/Notification'\n\nexport default {\n  data() {\n    return {\n      notification: {\n        active: false,\n        type: '',\n        content: ''\n      },\n      closeDelay: 3500\n    }\n  },\n\n  components: {\n    Notification\n  },\n\n  computed: {\n    resourceWord() {\n      let isSuccess = this.notification.type === 'success'\n\n      return isSuccess ? 'successfully' : `${this.notification.type}:`\n    }\n  },\n\n  methods: {\n    triggerNotification(type, resource, action) {\n      this.notification.active = true\n      this.notification.type = type\n      this.notification.content = `${resource} ${this.resourceWord} ${action}!`\n\n      window.setTimeout(() => {\n        this.notification.active = false\n        this.notification.type = ''\n        this.notification.content = ''\n      }, this.closeDelay)\n    }\n  }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"product-list-product\",class:_vm.classes},[_c('ResponsiveImage',{staticClass:\"image\",attrs:{\"imageVersions\":_vm.images,\"description\":_vm.imageAlt,\"width\":768}}),_c('div',{staticClass:\"text\"},[(_vm.notification.active)?_c('Notification',{attrs:{\"content\":_vm.notification.content,\"type\":_vm.notification.type}}):_vm._e(),_c('div',{staticClass:\"product-list-product-info\"},[_c('h2',{staticClass:\"product-title\"},[_vm._v(_vm._s(_vm.parse(_vm.product).product_title))]),_c('h3',[_c('span',[_vm._v(\"\\n          \"+_vm._s(_vm.parse(_vm.product).product_currency)+_vm._s(_vm.parse(_vm.product).product_price)+\"\\n        \")]),(_vm.hasComparePrice)?_c('span',{staticClass:\"compare-price\"},[_vm._v(\"\\n          \"+_vm._s(_vm.parse(_vm.product).product_currency)+_vm._s(_vm.parse(_vm.product).product_compare_price)+\"\\n        \")]):_vm._e()]),_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.parse(_vm.product).product_description)}}),_c('div',{staticClass:\"product-controls\"},[_c('ProductQuantity',{on:{\"updateQuantity\":_vm.updateQuantity}}),_c('button',{staticClass:\"btn atc-btn\",on:{\"click\":_vm.addToCart}},[_vm._v(\"Add to Cart\")])],1)])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"product-list-product\" :class=\"classes\">\n    <ResponsiveImage\n      class=\"image\"\n      :imageVersions=\"images\"\n      :description=\"imageAlt\"\n      :width=\"768\"/>\n\n    <div class=\"text\">\n      <Notification\n        v-if=\"notification.active\"\n        :content=\"notification.content\"\n        :type=\"notification.type\"\n      />\n\n      <div class=\"product-list-product-info\">\n        <h2 class=\"product-title\">{{parse(product).product_title}}</h2>\n        <h3>\n          <span>\n            {{parse(product).product_currency}}{{parse(product).product_price}}\n          </span>\n\n          <span v-if=\"hasComparePrice\" class=\"compare-price\">\n            {{parse(product).product_currency}}{{parse(product).product_compare_price}}\n          </span>\n        </h3>\n\n        <div v-html=\"parse(product).product_description\"></div>\n\n        <div class=\"product-controls\">\n          <ProductQuantity @updateQuantity=\"updateQuantity\"/>\n          <button class=\"btn atc-btn\" @click=\"addToCart\">Add to Cart</button>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\n  import parse from '@/mixins/parse'\n  import notification from '@/mixins/notification'\n\n  import ProductQuantity from '@/components/shop/ProductQuantity'\n  import ResponsiveImage from '@/components/ResponsiveImage'\n\n  export default {\n    name: 'product-list-product',\n\n    data() {\n      return {\n        qty: 1\n      }\n    },\n\n    props: {\n      product: Object\n    },\n\n    components: {\n      ProductQuantity,\n      ResponsiveImage\n    },\n\n    mixins: [parse, notification],\n\n    computed: {\n      images() {\n        let image = this.product.image_versions.length ? this.product.image_versions : []\n        return image\n      },\n\n      imageAlt() {\n        return this.parse(this.product).image_alt_text || 'Product thumbnail'\n      },\n\n      hasComparePrice() {\n        return !!this.parse(this.product).product_compare_price\n      },\n\n      classes() {\n        return [\n          'product-list-product',\n          this.parse(this.product).text_position,\n          this.parse(this.product).text_width,\n          this.parse(this.product).text_alignment,\n          {'is-boxed': this.parse(this.product).boxed},\n          {'is-fixed': this.parse(this.product).fixed_image_height},\n          {'has-spacing': this.parse(this.product).bottom_spacing}\n        ]\n      }\n    },\n\n    methods: {\n      addToCart() {\n        this.$emit(\n          'addToCart',\n          this.parse(this.product).product_title,\n          this.parse(this.product).product_currency,\n          this.parse(this.product).product_price,\n          this.parse(this.product).product_category,\n          this.qty,\n          this.images[0] || ''\n        )\n\n        window.onbeforeunload = () => {\n          return true\n        }\n\n        this.triggerNotification('success', 'product', 'added')\n      },\n\n      updateQuantity(quantity) {\n        this.qty = quantity\n      }\n    }\n  }\n</script>\n\n<style lang=\"sass\">\n@import '../../../stylesheets/base/variables'\n@import '../../../stylesheets/helpers/mixins'\n@import '../../../stylesheets/helpers/extends'\n@import '../../../stylesheets/base/theme'\n\n.product-list-product\n  @include media($media-gt-small)\n    display: flex\n    min-height: 200px\n\n  &.is-fixed\n    .image, .responsive-image\n      max-height: 300px\n\n  .compare-price\n    color: $color-out-of-stock\n    text-decoration: line-through\n\n  .responsive-image\n    height: 100%\n    display: flex\n\n    img\n      object-fit: cover\n      object-position: 50% 50%\n      width: 100%\n\n  .product-list-product-info\n    width: 100%\n\n  .text\n    padding: $gap-medium\n    display: flex\n    position: relative\n\n    h3\n      font-weight: bold\n      font-size: 18px\n      margin-top: 0\n\n  .product-controls\n    @include media($media-gt-medium)\n      .product-quantity\n        text-align: left\n\n    .atc-btn\n      display: block\n      margin: $gap-medium auto\n\n      @include media($media-gt-medium)\n        margin: $gap-small 0 0\n\n    .option-name\n      @include themify($themes)\n        color: themed('text')\n\n  &.is-boxed\n    box-shadow: $content-shadow\n\n    @include themify($themes)\n      background: themed('content-bg')\n\n  &.has-spacing\n    margin-bottom: $gap-medium\n\n  @include media($media-gt-small)\n    &.text-left\n      flex-direction: row-reverse\n\n    &.text-right\n      flex-direction: row\n\n    &.text-left, &.text-right\n      &.one-third\n        .text\n          flex-basis: percentage(1/3)\n\n      &.half\n        .text\n          flex-basis: percentage(1/2)\n\n      &.two-thirds\n        .text\n          flex-basis: percentage(2/3)\n\n      &.three-quarters\n        .text\n          flex-basis: percentage(3/4)\n\n      &.align-top\n        .text\n          align-items: top\n\n      &.align-middle\n        .text\n          align-items: center\n\n      &.align-bottom\n        .text\n          align-items: flex-end\n\n  .image\n    width: 100%\n    min-height: 200px\n    flex: 1\n</style>\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductListProduct.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductListProduct.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProductListProduct.vue?vue&type=template&id=de208f64&\"\nimport script from \"./ProductListProduct.vue?vue&type=script&lang=js&\"\nexport * from \"./ProductListProduct.vue?vue&type=script&lang=js&\"\nfunction injectStyles (context) {\n  \n  var style0 = require(\"./ProductListProduct.vue?vue&type=style&index=0&lang=sass&\")\nif (style0.__inject__) style0.__inject__(context)\n\n}\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  injectStyles,\n  null,\n  \"697ec3bb\"\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('nav',{staticClass:\"product-list-filter\"},[_c('button',{staticClass:\"btn toggle-btn\",on:{\"click\":_vm.activateFilters}},[_vm._v(\"\\n    Categories\\n  \")]),_c('div',{staticClass:\"filter-options\"},_vm._l((_vm.categories),function(category){return _c('button',{key:category,on:{\"click\":function($event){return _vm.scrollToSection(category)}}},[_vm._v(\"\\n      \"+_vm._s(category)+\"\\n    \")])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <nav class=\"product-list-filter\">\n    <button\n      class=\"btn toggle-btn\"\n      @click=\"activateFilters\">\n      Categories\n    </button>\n\n    <div class=\"filter-options\">\n      <button\n        v-for=\"category in categories\"\n        @click=\"scrollToSection(category)\"\n        :key=\"category\">\n        {{category}}\n      </button>\n    </div>\n  </nav>\n</template>\n\n<script>\n  export default {\n    name: 'product-list-filter',\n\n    props: {\n      categories: Array\n    },\n\n    methods: {\n      scrollToSection(category) {\n        let el = category.toLowerCase()\n        document.getElementById(`product-category-${el}`).scrollIntoView({\n          behavior: 'smooth'\n        })\n\n        this.$emit('activateFilters', 'filters')\n      },\n\n      activateFilters() {\n        this.$emit('activateFilters', 'filters')\n      }\n    }\n  }\n</script>\n\n<style lang=\"sass\">\n  @import '../../../stylesheets/base/variables'\n  @import '../../../stylesheets/helpers/mixins'\n  @import '../../../stylesheets/helpers/extends'\n\n  .product-list-filter\n    max-height: 52px\n    transition: all .3s ease-in-out\n    overflow: hidden\n\n    .filter-options\n      padding: $gap-medium\n      display: flex\n      align-items: center\n      justify-content: center\n      flex-wrap: wrap\n\n      button\n        border: 1px solid #00000012\n        padding: $gap-small\n        margin: $gap-small\n        border-radius: 5px\n\n    .toggle-btn\n      background: #f7f7f7!important\n      color: $color-default-text!important\n      border-top: 1px solid #00000012\n\n    .btn\n      box-shadow: 0 0 10px #00000030\n</style>","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductListFilter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductListFilter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProductListFilter.vue?vue&type=template&id=6f00fd3c&\"\nimport script from \"./ProductListFilter.vue?vue&type=script&lang=js&\"\nexport * from \"./ProductListFilter.vue?vue&type=script&lang=js&\"\nfunction injectStyles (context) {\n  \n  var style0 = require(\"./ProductListFilter.vue?vue&type=style&index=0&lang=sass&\")\nif (style0.__inject__) style0.__inject__(context)\n\n}\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  injectStyles,\n  null,\n  \"391d3048\"\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"order-form\"},[_c('button',{staticClass:\"btn toggle-btn\",on:{\"click\":_vm.activateOrderForm}},[_vm._v(\"\\n    Cart (\"+_vm._s(this.totalQty)+\")\\n\\n    \"),_c('Sprite',{staticClass:\"close-form\",attrs:{\"name\":\"close\"}})],1),(_vm.hasItems)?_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('h2',{staticClass:\"centered\"},[_vm._v(\"Your Order\")]),_c('table',{staticClass:\"order-details\"},[_vm._m(0),_c('tbody',[_vm._l((_vm.lineItems),function(item){return _c('tr',{key:item.title},[_c('td',{staticClass:\"line-item-image\"},[_c('LazyImage',{attrs:{\"url\":item.image.url}})],1),_c('td',[_vm._v(_vm._s(item.title))]),_c('td',{staticClass:\"product-qty\"},[_c('ProductQuantity',{staticClass:\"editable-qty\",attrs:{\"currentQty\":item.qty},on:{\"updateQuantity\":function($event){return _vm.updateQuantity($event, item)}}}),_c('span',[_vm._v(_vm._s(item.qty))])],1),_c('td',[_vm._v(_vm._s(item.currency)+_vm._s(_vm.lineItemPrice(item)))]),_c('td',{staticClass:\"remove-line-item\"},[_c('button',{on:{\"click\":function($event){return _vm.removeFromCart(item)}}},[_c('Sprite',{attrs:{\"name\":\"bin\"}})],1)])])}),_c('tr',{staticClass:\"line-items-total\"},[_c('td',{staticClass:\"line-item-image\"}),_c('td'),_c('td'),_vm._m(1),_c('td',[_c('strong',[_vm._v(_vm._s(_vm.currency)+_vm._s(parseFloat(_vm.totalPrice).toFixed(2)))])])])],2)]),_c('div',[_c('h2',{staticClass:\"centered\"},[_vm._v(\"Your Details\")]),_c('field',{attrs:{\"label\":\"name\",\"error\":_vm.sender_nameError},on:{\"input\":function($event){return _vm.$v.resource.sender_name.$touch()}},model:{value:(_vm.resource.sender_name),callback:function ($$v) {_vm.$set(_vm.resource, \"sender_name\", $$v)},expression:\"resource.sender_name\"}}),_c('field',{attrs:{\"label\":\"email\",\"error\":_vm.sender_emailError},on:{\"input\":function($event){return _vm.$v.resource.sender_email.$touch()}},model:{value:(_vm.resource.sender_email),callback:function ($$v) {_vm.$set(_vm.resource, \"sender_email\", $$v)},expression:\"resource.sender_email\"}}),_c('div',{staticClass:\"input\"},[_c('label',{attrs:{\"for\":\"notes\"}},[_vm._v(\"Additional Notes\")]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.additionalNotes),expression:\"additionalNotes\"}],attrs:{\"rows\":\"5\",\"id\":\"notes\"},domProps:{\"value\":(_vm.additionalNotes)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.additionalNotes=$event.target.value}}})]),_c('button',{staticClass:\"btn send-message\"},[_vm._v(\"Submit Order\")])],1)]):_c('div',[_c('p',[_vm._v(\"Your cart is currently empty.\")])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('td',{staticClass:\"line-item-image\"}),_c('td',[_vm._v(\"Product\")]),_c('td',[_vm._v(\"Quantity\")]),_c('td',[_vm._v(\"Price\")]),_c('td',{staticClass:\"remove-line-item\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('td',[_c('strong',[_vm._v(\"Subtotal\")])])}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"order-form\">\n    <button class=\"btn toggle-btn\" @click=\"activateOrderForm\">\n      Cart ({{ this.totalQty }})\n\n      <Sprite class=\"close-form\" name=\"close\" />\n    </button>\n\n    <form v-if=\"hasItems\" @submit.prevent=\"submit\">\n      <h2 class=\"centered\">Your Order</h2>\n      <table class=\"order-details\">\n        <thead>\n          <td class=\"line-item-image\"></td>\n          <td>Product</td>\n          <td>Quantity</td>\n          <td>Price</td>\n          <td class=\"remove-line-item\"></td>\n        </thead>\n\n        <tbody>\n          <tr v-for=\"item in lineItems\" :key=\"item.title\">\n            <td class=\"line-item-image\">\n              <LazyImage :url=\"item.image.url\" />\n            </td>\n            <td>{{ item.title }}</td>\n            <td class=\"product-qty\">\n              <ProductQuantity\n                class=\"editable-qty\"\n                :currentQty=\"item.qty\"\n                @updateQuantity=\"updateQuantity($event, item)\"\n              />\n              <span>{{ item.qty }}</span>\n            </td>\n            <td>{{ item.currency }}{{ lineItemPrice(item) }}</td>\n            <td class=\"remove-line-item\">\n              <button @click=\"removeFromCart(item)\">\n                <Sprite name=\"bin\" />\n              </button>\n            </td>\n          </tr>\n          <tr class=\"line-items-total\">\n            <td class=\"line-item-image\"></td>\n            <td></td>\n            <td></td>\n            <td><strong>Subtotal</strong></td>\n            <td>\n              <strong>{{ currency }}{{ parseFloat(totalPrice).toFixed(2) }}</strong>\n            </td>\n          </tr>\n        </tbody>\n      </table>\n\n      <div>\n        <h2 class=\"centered\">Your Details</h2>\n\n        <field\n          label=\"name\"\n          @input=\"$v.resource.sender_name.$touch()\"\n          v-model=\"resource.sender_name\"\n          :error=\"sender_nameError\"\n        >\n        </field>\n\n        <field\n          label=\"email\"\n          @input=\"$v.resource.sender_email.$touch()\"\n          v-model=\"resource.sender_email\"\n          :error=\"sender_emailError\"\n        >\n        </field>\n\n        <div class=\"input\">\n          <label for=\"notes\">Additional Notes</label>\n          <textarea v-model=\"additionalNotes\" rows=\"5\" id=\"notes\"></textarea>\n        </div>\n\n        <button class=\"btn send-message\">Submit Order</button>\n      </div>\n    </form>\n\n    <div v-else>\n      <p>Your cart is currently empty.</p>\n    </div>\n  </div>\n</template>\n\n<script>\nimport form from '@/mixins/form'\n\nimport {errorMessages} from '@/lib/error_messages'\nimport {email, required} from 'vuelidate/lib/validators'\n\nimport LazyImage from '@/components/LazyImage'\nimport ProductQuantity from '@/components/shop/ProductQuantity'\nimport Sprite from '@/components/Sprite'\n\nexport default {\n  name: 'order-form',\n\n  data() {\n    return {\n      additionalNotes: ''\n    }\n  },\n\n  mixins: [form],\n\n  props: {\n    lineItems: Array,\n    totalQty: Number,\n    totalPrice: Number,\n    currency: String\n  },\n\n  components: {\n    LazyImage,\n    ProductQuantity,\n    Sprite\n  },\n\n  computed: {\n    ...errorMessages(['sender_name', 'sender_email', 'body']),\n\n    hasItems() {\n      return this.totalQty > 0\n    },\n\n    itemPrice() {\n      return (item) => {\n        let price = parseFloat(item.price)\n        return price.toFixed(2)\n      }\n    },\n\n    lineItemPrice() {\n      return (item) => {\n        let price = parseFloat(item.price)\n        return (price * item.qty).toFixed(2)\n      }\n    },\n\n    formattedBody() {\n      let string =\n        'Congratulations! A customer has requested the following items:\\n\\n'\n\n      this.lineItems.forEach((item) => {\n        string += `Product: ${item.title}\\n`\n        string += `Price: ${item.currency}${item.qty * item.price} (${\n          item.currency\n        }${item.price} each)\\n`\n        string += `Quantity: ${item.qty}\\n\\n`\n      })\n\n      string += `Total Quantity: ${this.totalQty}\\n`\n      string += `Total Amount: ${this.currency}${this.totalPrice}\\n\\n`\n\n      string += 'Additional Notes:\\n'\n      string += this.additionalNotes\n\n      return string\n    }\n  },\n\n  methods: {\n    activateOrderForm() {\n      this.$emit('activateOrderForm', 'order-form')\n    },\n\n    updateQuantity(qty, item) {\n      this.$emit('updateQuantity', qty, item)\n    },\n\n    removeFromCart(product) {\n      this.$emit('removeFromCart', product)\n    }\n  },\n\n  validations: {\n    resource: {\n      sender_name: {required},\n      sender_email: {required, email}\n    }\n  },\n\n  mounted() {\n    this.resource.body = this.formattedBody\n  },\n\n  watch: {\n    lineItems() {\n      this.resource.body = this.formattedBody\n    },\n\n    additionalNotes() {\n      this.resource.body = this.formattedBody\n    }\n  }\n}\n</script>\n\n<style lang=\"sass\">\n@import '../../../stylesheets/base/variables'\n@import '../../../stylesheets/helpers/mixins'\n@import '../../../stylesheets/base/theme'\n\n.order-form\n  max-height: 52px\n  transition: all .5s .5s ease-in-out\n  position: relative\n  overflow: hidden\n\n  .toggle-btn\n    .sprite\n      width: 15px\n      height: 15px\n      position: absolute\n      top: 18px\n      right: $gap-medium\n\n      @include themify($themes)\n        fill: themed('btn-text')\n\n  .remove-line-item\n    max-width: 50px\n    text-align: center\n\n    button\n      background: none\n\n    .sprite\n      width: 20px\n      height: 20px\n      fill: rgba(0, 0, 0, 0.3)\n\n  h2\n    color: $color-default-text!important\n    margin: $gap-large 0 0\n\n  p\n    color: $color-default-text!important\n    text-align: center\n    margin: $gap-medium 0\n\n  .line-item-image\n    display: none\n\n    @include media($media-gt-medium)\n      display: table-cell\n\n  .order-details\n    margin-top: $gap-small\n    width: calc(100% - 15px)\n    margin: $gap-medium auto\n\n    .line-items-total\n      background: rgba(0, 0, 0, 0.04)\n\n    .product-qty\n      .option-name, .editable-qty\n        display: none\n\n      @include media($media-gt-medium)\n        .editable-qty\n          display: flex\n\n        span\n          display: none\n\n    .editable-qty\n      .btn\n        padding: 0\n\n    td\n      font-size: 12px\n      border: none\n      border-bottom: 1px solid #d2d2d2\n      padding: $gap-small\n\n    img\n      max-width: 100px\n      border-radius: 5px\n\n  .error\n    color: $color-error!important\n\n  form\n    max-height: 80vh\n    padding: $gap-medium $gap-small\n    overflow: auto\n\n  label\n    display: block\n    text-transform: capitalize\n    margin: 20px auto 10px\n    color: $color-default-text!important\n\n  input, textarea\n    padding: 10px\n    border-radius: 3px\n    width: 100%\n    border: 1px solid rgba(0, 0, 0, 0.25)!important\n    color: $color-default-text!important\n\n    &:focus\n      outline: none\n\n  .btn\n    display: block\n    box-shadow: 0 0 10px #00000030\n\n    &.send-message\n      background: $color-btn-checkout\n      color: #fff\n      margin: $gap-medium auto\n      font-weight: bold\n      animation: pulse 1s infinite ease-in-out\n\n      @include media($media-gt-medium)\n        display: block\n        width: auto\n</style>\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OrderForm.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OrderForm.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OrderForm.vue?vue&type=template&id=4839a98f&\"\nimport script from \"./OrderForm.vue?vue&type=script&lang=js&\"\nexport * from \"./OrderForm.vue?vue&type=script&lang=js&\"\nfunction injectStyles (context) {\n  \n  var style0 = require(\"./OrderForm.vue?vue&type=style&index=0&lang=sass&\")\nif (style0.__inject__) style0.__inject__(context)\n\n}\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  injectStyles,\n  null,\n  \"5fbb34ee\"\n  \n)\n\nexport default component.exports","<template lang=\"html\">\n  <div class=\"page-section product-list\">\n    <div class=\"container\">\n\n      <h2 class=\"list-title\" v-if=\"title\" v-html=\"title\"></h2>\n\n      <div v-for=\"category in categories\" :key=\"category\">\n        <span\n          class=\"category-anchor\"\n          :id=\"`product-category-${category.toLowerCase()}`\">\n        </span>\n\n        <h2 class=\"list-title\">{{category}}</h2>\n\n        <ProductListProduct\n          v-for=\"(item, index) in products(category)\"\n          @addToCart=\"addToCart\"\n          :product=\"item\"\n          :key=\"`product-${index}`\"\n        />\n      </div>\n\n      <div :class=\"`item-count-${totalQty}`\">\n        <div\n          :class=\"[\n            'product-list-options',\n            `${activeOption}-active`,\n            {'is-active': productOptionsActive}\n            ]\">\n          <div class=\"container\">\n            <div class=\"options-inner\">\n              <OrderForm\n                v-if=\"!contacted\"\n                :lineItems=\"lineItems\"\n                :totalQty=\"totalQty\"\n                :totalPrice=\"totalPrice\"\n                :currency=\"currency\"\n                @submit=\"sendMessage\"\n                @activateOrderForm=\"activateType\"\n                @updateQuantity=\"updateQuantity\"\n                @removeFromCart=\"removeFromCart\"\n                v-model=\"contact\"/>\n\n              <ProductListFilter\n                :categories=\"categories\"\n                @activateFilters=\"activateType\"\n                />\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <transition name=\"fade\" mode=\"out-in\">\n      <Overlay v-if=\"contacted\">\n        <h2>Thanks, {{contact.sender_name}}!</h2>\n        <p>Your order was successfully sent and you'll hear from us soon!</p>\n      </Overlay>\n    </transition>\n\n    <SectionSeparator v-if=\"separator\" :separator=\"separator\"/>\n  </div>\n</template>\n\n<script>\nimport {createMessage} from '@/lib/messages'\nimport {mapGetters, mapState} from 'vuex'\n\nimport notification from '@/mixins/notification'\nimport parse from '@/mixins/parse'\n\nimport ProductListProduct from '@/components/lists/ProductList/ProductListProduct'\nimport ProductListFilter from '@/components/lists/ProductList/ProductListFilter'\nimport OrderForm from '@/components/lists/ProductList/OrderForm'\nimport SectionSeparator from '@/components/lists/SectionSeparator'\nimport Overlay from '@/components/Overlay'\n\nexport default {\n  name: 'product-list',\n\n  props: ['items', 'title', 'separator'],\n\n  mixins: [parse, notification],\n\n  data() {\n    return {\n      contact: {},\n      contacted: false,\n      categories: [],\n      lineItems: [],\n      productOptionsActive: false,\n      activeOption: ''\n    }\n  },\n\n  components: {\n    SectionSeparator,\n    ProductListProduct,\n    ProductListFilter,\n    OrderForm,\n    Overlay\n  },\n\n  computed: {\n    ...mapState(['route']),\n    ...mapGetters(['siteId']),\n\n    messageParams() {\n      return {\n        message: this.contact\n      }\n    },\n\n    products() {\n      return (category) => {\n        return this.items.filter(\n          product => this.parse(product).product_category.toLowerCase() === category.toLowerCase()\n        )\n      }\n    },\n\n    currency() {\n      let item = this.items[0]\n      return this.parse(item).product_currency || '£'\n    },\n\n    totalQty() {\n      let qty = 0\n\n      this.lineItems.forEach((item) => {\n        qty += parseInt(item.qty)\n      })\n\n      return qty\n    },\n\n    totalPrice() {\n      let price = 0\n\n      this.lineItems.forEach((item) => {\n        price += parseFloat(item.price).toFixed(2) * parseInt(item.qty)\n      })\n\n      return price\n    }\n  },\n\n  methods: {\n    setCategories() {\n      let products = this.items\n      let categories = []\n\n      if(products) {\n        products.forEach((product) => {\n          if(this.parse(product).product_category === null) {\n            categories.push('uncategorised')\n          } else {\n            categories.push(this.parse(product).product_category)\n          }\n        })\n\n        this.categories = [...new Set(categories)]\n      }\n    },\n\n    addToCart(title, currency, price, category, qty, image) {\n      let cat = category || ''\n\n      let alreadyInCart = this.lineItems.filter(item => item.title === title).length > 0\n\n      if (alreadyInCart) {\n        this.lineItems.find((item) => {\n          if(item.title === title) {\n            const currentQty = parseInt(item.qty)\n            item.qty = currentQty + parseInt(qty)\n          }\n        })\n      } else {\n        this.lineItems.push({title, currency, price, cat, qty, image})\n      }\n    },\n\n    activateType(type) {\n      if(this.activeOption === type) {\n        this.activeOption = ''\n        this.productOptionsActive = false\n      } else {\n        this.activeOption = type\n        this.productOptionsActive = true\n      }\n    },\n\n    removeFromCart(product) {\n      this.lineItems = this.lineItems.filter((prod) => {\n        return prod !== product\n      })\n    },\n\n    updateQuantity(qty, item) {\n      let product = this.lineItems.find(product => product === item)\n      product.qty = qty\n    },\n\n    sendMessage() {\n      createMessage(this.siteId, this.messageParams)\n        .then(() => {\n          this.contacted = true\n          this.activeOption = ''\n          this.productOptionsActive = false\n          this.$router.push({query: {contacted: 'true'}})\n\n          window.setTimeout(() => {\n            this.contacted = false\n            this.contact = {}\n            this.lineItems = []\n          }, 3000)\n        })\n        .catch(() => {\n          alert('Try again later')\n        })\n    }\n  },\n\n  mounted() {\n    this.setCategories()\n  },\n\n  watch: {\n    'this.items'() {\n      this.setCategories()\n    }\n  }\n}\n</script>\n\n<style lang=\"sass\">\n  @import '../../../stylesheets/base/variables'\n  @import '../../../stylesheets/helpers/mixins'\n  @import '../../../stylesheets/base/theme'\n\n  $max-height: 90vh\n\n  .product-list\n    .category-anchor\n      visibility: hidden\n      position: absolute\n      margin-top: -85px\n\n    .responsive-image img\n      height: 100%\n\n    .overlay\n      .inner\n        max-width: 500px\n\n      p, h2\n        color: $color-default-text\n        text-align: center\n\n  .close-form\n    opacity: 0\n    transition: opacity .3s ease-in-out\n\n  .product-list-options\n    position: fixed\n    bottom: 0\n    left: 0\n    width: 100%\n    z-index: 500\n    transition: transform .3s ease-in-out\n\n    &:before\n      content: ''\n      position: fixed\n      pointer-events: none\n      top: 0\n      left: 0\n      width: 100%\n      height: 100%\n      background: rgba(0, 0, 0, 0.75)\n      transition: opacity .3s ease-in-out\n      opacity: 0\n\n    &.is-active\n      &:before\n        opacity: 1\n        pointer-events: all\n\n      .close-form\n        opacity: 1\n\n    .container\n      margin: 0 auto\n      max-width: 750px\n      padding-bottom: 0\n      position: relative\n\n    .btn\n      background: none\n      margin: 0\n\n    &.order-form-active\n      .options-inner\n        transform: translateY(52px)\n\n      .order-form\n        max-height: $max-height\n\n    &.filters-active\n      .product-list-filter\n        max-height: $max-height\n\n    .options-inner\n      display: flex\n      flex-direction: column\n      background: #fff\n      border-radius: 5px\n      transition: all .3s ease-in-out\n      box-shadow: 0 0 20px rgba(0, 0, 0, 0.4)\n\n  .toggle-btn\n    width: 100%\n    border-radius: 0!important\n</style>","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProductList.vue?vue&type=template&id=77d39364&lang=html&\"\nimport script from \"./ProductList.vue?vue&type=script&lang=js&\"\nexport * from \"./ProductList.vue?vue&type=script&lang=js&\"\nfunction injectStyles (context) {\n  \n  var style0 = require(\"./ProductList.vue?vue&type=style&index=0&lang=sass&\")\nif (style0.__inject__) style0.__inject__(context)\n\n}\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  injectStyles,\n  null,\n  \"69bced44\"\n  \n)\n\nexport default component.exports","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../node_modules/css-loader/index.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-3!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-4!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductListProduct.vue?vue&type=style&index=0&lang=sass&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"1df972cf\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".order-form{max-height:52px;-webkit-transition:all .5s ease-in-out .5s;transition:all .5s ease-in-out .5s;position:relative;overflow:hidden}.order-form .toggle-btn .sprite{width:15px;height:15px;position:absolute;top:18px;right:20px}.theme-clean-dark .order-form .toggle-btn .sprite{fill:#333}.theme-clean-light .order-form .toggle-btn .sprite{fill:#fff}.theme-vantage-dark .order-form .toggle-btn .sprite{fill:#333}.theme-vantage-light .order-form .toggle-btn .sprite{fill:#fff}.theme-slanted-dark .order-form .toggle-btn .sprite{fill:#333}.theme-slanted-light .order-form .toggle-btn .sprite{fill:#fff}.order-form .remove-line-item{max-width:50px;text-align:center}.order-form .remove-line-item button{background:none}.order-form .remove-line-item .sprite{width:20px;height:20px;fill:rgba(0,0,0,.3)}.order-form h2{color:#333!important;margin:40px 0 0}.order-form p{color:#333!important;text-align:center;margin:20px 0}.order-form .line-item-image{display:none}@media screen and (min-width:959px){.order-form .line-item-image{display:table-cell}}.order-form .order-details{margin-top:10px;width:calc(100% - 15px);margin:20px auto}.order-form .order-details .line-items-total{background:rgba(0,0,0,.04)}.order-form .order-details .product-qty .editable-qty,.order-form .order-details .product-qty .option-name{display:none}@media screen and (min-width:959px){.order-form .order-details .product-qty .editable-qty{display:-webkit-box;display:-ms-flexbox;display:flex}.order-form .order-details .product-qty span{display:none}}.order-form .order-details .editable-qty .btn{padding:0}.order-form .order-details td{font-size:12px;border:none;border-bottom:1px solid #d2d2d2;padding:10px}.order-form .order-details img{max-width:100px;border-radius:5px}.order-form .error{color:#d23a3a!important}.order-form form{max-height:80vh;padding:20px 10px;overflow:auto}.order-form label{display:block;text-transform:capitalize;margin:20px auto 10px;color:#333!important}.order-form input,.order-form textarea{padding:10px;border-radius:3px;width:100%;border:1px solid rgba(0,0,0,.25)!important;color:#333!important}.order-form input:focus,.order-form textarea:focus{outline:none}.order-form .btn{display:block;-webkit-box-shadow:0 0 10px rgba(0,0,0,.1882352941);box-shadow:0 0 10px rgba(0,0,0,.1882352941)}.order-form .btn.send-message{background:#c7ac7f;color:#fff;margin:20px auto;font-weight:700;-webkit-animation:pulse 1s ease-in-out infinite;animation:pulse 1s ease-in-out infinite}@media screen and (min-width:959px){.order-form .btn.send-message{display:block;width:auto}}\", \"\"]);\n\n// exports\n","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../node_modules/css-loader/index.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-3!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-4!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OrderForm.vue?vue&type=style&index=0&lang=sass&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"b7a0f036\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/index.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-3!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-4!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Overlay.vue?vue&type=style&index=0&lang=sass&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"f894c77e\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../node_modules/css-loader/index.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-3!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-4!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductList.vue?vue&type=style&index=0&lang=sass&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"4c159cf6\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","export * from \"-!../../node_modules/vue-style-loader/index.js??ref--9-oneOf-1-0!../../node_modules/css-loader/index.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-3!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-4!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Overlay.vue?vue&type=style&index=0&lang=sass&\"","export default {\n  computed: {\n    parse() {\n      return (item) => {\n        if (typeof (item.value) === 'string') {\n          return JSON.parse(item.value)\n        } else {\n          return item.value\n        }\n      }\n    }\n  }\n}\n","exports = module.exports = require(\"../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".notification{background:hsla(0,0%,100%,.95);text-transform:uppercase;font-weight:700;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;width:100%;position:absolute;letter-spacing:1px;top:0;bottom:0;left:0;z-index:100;padding:20px 15px;opacity:0;-webkit-animation:fade-in-out 3.5s ease-in-out;animation:fade-in-out 3.5s ease-in-out;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.notification .sprite{background:#d23a3a;opacity:0;-webkit-transform:scale(.5);transform:scale(.5);-webkit-animation:scale-in .2s ease-in-out .3s;animation:scale-in .2s ease-in-out .3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;fill:#fff}.notification span{font-size:14px;background:-webkit-gradient(linear,left top,right top,from(#898989),to(#d23a3a));background:linear-gradient(90deg,#898989,#d23a3a);background-size:200% auto;color:#898989;background-clip:text;text-fill-color:transparent;-webkit-background-clip:text;-webkit-text-fill-color:transparent;-webkit-animation:textLoader 4s linear .5s;animation:textLoader 4s linear .5s}.notification.is-success .sprite{background:#70bb85}.notification.is-success span{background:-webkit-gradient(linear,left top,right top,from(#898989),to(#70bb85));background:linear-gradient(90deg,#898989,#70bb85);background-size:200% auto;background-clip:text;color:#898989;text-fill-color:transparent;-webkit-background-clip:text;-webkit-text-fill-color:transparent;-webkit-animation:textLoader 4s linear .5s;animation:textLoader 4s linear .5s}.notification .sprite{border-radius:50%;width:60px;height:60px;padding:15px;margin-bottom:20px}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.5);z-index:10;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;cursor:-webkit-zoom-out;cursor:zoom-out}.overlay .inner{background:#fff;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.04),0 2px 4px rgba(0,0,0,.04),0 4px 8px rgba(0,0,0,.04),0 8px 16px rgba(0,0,0,.04),0 16px 32px rgba(0,0,0,.04),0 32px 64px rgba(0,0,0,.04);box-shadow:0 1px 2px rgba(0,0,0,.04),0 2px 4px rgba(0,0,0,.04),0 4px 8px rgba(0,0,0,.04),0 8px 16px rgba(0,0,0,.04),0 16px 32px rgba(0,0,0,.04),0 32px 64px rgba(0,0,0,.04);padding:10px;margin:10px;border-radius:5px;position:relative;width:90%;height:auto;max-height:80vh;cursor:auto}@media screen and (min-width:959px){.overlay .inner{padding:20px;width:60%}}.overlay img{max-width:100%;max-height:100%}\", \"\"]);\n\n// exports\n","export * from \"-!../../../../node_modules/vue-style-loader/index.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-3!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-4!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OrderForm.vue?vue&type=style&index=0&lang=sass&\"","export * from \"-!../../../../node_modules/vue-style-loader/index.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-3!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-4!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductListProduct.vue?vue&type=style&index=0&lang=sass&\"","export * from \"-!../../../../node_modules/vue-style-loader/index.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-3!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-4!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductListFilter.vue?vue&type=style&index=0&lang=sass&\"","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".product-list .category-anchor{visibility:hidden;position:absolute;margin-top:-85px}.product-list .responsive-image img{height:100%}.product-list .overlay .inner{max-width:500px}.product-list .overlay h2,.product-list .overlay p{color:#333;text-align:center}.close-form{opacity:0;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out}.product-list-options{position:fixed;bottom:0;left:0;width:100%;z-index:500;-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.product-list-options:before{content:\\\"\\\";position:fixed;pointer-events:none;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.75);-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;opacity:0}.product-list-options.is-active:before{opacity:1;pointer-events:all}.product-list-options.is-active .close-form{opacity:1}.product-list-options .container{margin:0 auto;max-width:750px;padding-bottom:0;position:relative}.product-list-options .btn{background:none;margin:0}.product-list-options.order-form-active .options-inner{-webkit-transform:translateY(52px);transform:translateY(52px)}.product-list-options.filters-active .product-list-filter,.product-list-options.order-form-active .order-form{max-height:90vh}.product-list-options .options-inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;background:#fff;border-radius:5px;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;-webkit-box-shadow:0 0 20px rgba(0,0,0,.4);box-shadow:0 0 20px rgba(0,0,0,.4)}.toggle-btn{width:100%;border-radius:0!important}\", \"\"]);\n\n// exports\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"overlay\",on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.closeOverlay.apply(null, arguments)}}},[_c('div',{staticClass:\"inner\"},[_vm._t(\"default\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template lang=\"html\">\n  <div class=\"overlay\" @click.self=\"closeOverlay\">\n    <div class=\"inner\">\n      <slot/>\n    </div>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: 'Overlay',\n\n  methods: {\n    closeOverlay() {\n      this.$emit('close')\n    }\n  }\n}\n</script>\n\n<style lang=\"sass\">\n@import '../stylesheets/base/variables'\n@import '../stylesheets/helpers/mixins'\n@import '../stylesheets/base/theme'\n\n.overlay\n  position: fixed\n  top: 0\n  left: 0\n  width: 100%\n  height: 100%\n  background: rgba(0, 0, 0, 0.5)\n  z-index: 10\n  display: flex\n  align-items: center\n  justify-content: center\n  cursor: zoom-out\n\n  .inner\n    background: #fff\n    box-shadow: $content-shadow\n    padding: $gap-small\n    margin: $gap-small\n    border-radius: 5px\n    position: relative\n    width: 90%\n    height: auto\n    max-height: 80vh\n    cursor: initial\n\n    @include media($media-gt-medium)\n      padding: $gap-medium\n      width: 60%\n\n  img\n    max-width: 100%\n    max-height: 100%\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Overlay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Overlay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Overlay.vue?vue&type=template&id=3c666f86&lang=html&\"\nimport script from \"./Overlay.vue?vue&type=script&lang=js&\"\nexport * from \"./Overlay.vue?vue&type=script&lang=js&\"\nfunction injectStyles (context) {\n  \n  var style0 = require(\"./Overlay.vue?vue&type=style&index=0&lang=sass&\")\nif (style0.__inject__) style0.__inject__(context)\n\n}\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  injectStyles,\n  null,\n  \"239c93a3\"\n  \n)\n\nexport default component.exports","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".product-list-filter{max-height:52px;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;overflow:hidden}.product-list-filter .filter-options{padding:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.product-list-filter .filter-options button{border:1px solid rgba(0,0,0,.0705882353);padding:10px;margin:10px;border-radius:5px}.product-list-filter .toggle-btn{background:#f7f7f7!important;color:#333!important;border-top:1px solid rgba(0,0,0,.0705882353)}.product-list-filter .btn{-webkit-box-shadow:0 0 10px rgba(0,0,0,.1882352941);box-shadow:0 0 10px rgba(0,0,0,.1882352941)}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \"@media screen and (min-width:600px){.product-list-product{display:-webkit-box;display:-ms-flexbox;display:flex;min-height:200px}}.product-list-product.is-fixed .image,.product-list-product.is-fixed .responsive-image{max-height:300px}.product-list-product .compare-price{color:#cc0606;text-decoration:line-through}.product-list-product .responsive-image{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.product-list-product .responsive-image img{-o-object-fit:cover;object-fit:cover;-o-object-position:50% 50%;object-position:50% 50%;width:100%}.product-list-product .product-list-product-info{width:100%}.product-list-product .text{padding:20px;display:-webkit-box;display:-ms-flexbox;display:flex;position:relative}.product-list-product .text h3{font-weight:700;font-size:18px;margin-top:0}@media screen and (min-width:959px){.product-list-product .product-controls .product-quantity{text-align:left}}.product-list-product .product-controls .atc-btn{display:block;margin:20px auto}@media screen and (min-width:959px){.product-list-product .product-controls .atc-btn{margin:10px 0 0}}.theme-clean-dark .product-list-product .product-controls .option-name{color:#fff}.theme-clean-light .product-list-product .product-controls .option-name{color:#333}.theme-vantage-dark .product-list-product .product-controls .option-name{color:#fff}.theme-vantage-light .product-list-product .product-controls .option-name{color:#333}.theme-slanted-dark .product-list-product .product-controls .option-name{color:#fff}.theme-slanted-light .product-list-product .product-controls .option-name{color:#333}.product-list-product.is-boxed{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.04),0 2px 4px rgba(0,0,0,.04),0 4px 8px rgba(0,0,0,.04),0 8px 16px rgba(0,0,0,.04),0 16px 32px rgba(0,0,0,.04),0 32px 64px rgba(0,0,0,.04);box-shadow:0 1px 2px rgba(0,0,0,.04),0 2px 4px rgba(0,0,0,.04),0 4px 8px rgba(0,0,0,.04),0 8px 16px rgba(0,0,0,.04),0 16px 32px rgba(0,0,0,.04),0 32px 64px rgba(0,0,0,.04)}.theme-clean-dark .product-list-product.is-boxed{background:rgba(0,0,0,.5)}.theme-clean-light .product-list-product.is-boxed{background:hsla(0,0%,100%,.85)}.theme-vantage-dark .product-list-product.is-boxed{background:rgba(0,0,0,.5)}.theme-vantage-light .product-list-product.is-boxed{background:#fff}.theme-slanted-dark .product-list-product.is-boxed{background:rgba(0,0,0,.5)}.theme-slanted-light .product-list-product.is-boxed{background:#fff}.product-list-product.has-spacing{margin-bottom:20px}@media screen and (min-width:600px){.product-list-product.text-left{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.product-list-product.text-right{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.product-list-product.text-left.one-third .text,.product-list-product.text-right.one-third .text{-ms-flex-preferred-size:33.3333333333%;flex-basis:33.3333333333%}.product-list-product.text-left.half .text,.product-list-product.text-right.half .text{-ms-flex-preferred-size:50%;flex-basis:50%}.product-list-product.text-left.two-thirds .text,.product-list-product.text-right.two-thirds .text{-ms-flex-preferred-size:66.6666666667%;flex-basis:66.6666666667%}.product-list-product.text-left.three-quarters .text,.product-list-product.text-right.three-quarters .text{-ms-flex-preferred-size:75%;flex-basis:75%}.product-list-product.text-left.align-top .text,.product-list-product.text-right.align-top .text{-webkit-box-align:top;-ms-flex-align:top;align-items:top}.product-list-product.text-left.align-middle .text,.product-list-product.text-right.align-middle .text{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.product-list-product.text-left.align-bottom .text,.product-list-product.text-right.align-bottom .text{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}}.product-list-product .image{width:100%;min-height:200px;-webkit-box-flex:1;-ms-flex:1;flex:1}\", \"\"]);\n\n// exports\n","export * from \"-!../../../../node_modules/vue-style-loader/index.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-3!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-4!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductList.vue?vue&type=style&index=0&lang=sass&\"","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../node_modules/css-loader/index.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-3!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-4!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductListFilter.vue?vue&type=style&index=0&lang=sass&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"83e54af6\", content, true, {\"sourceMap\":false,\"shadowMode\":false});"],"sourceRoot":""}