diff --git a/config/default.json b/config/default.json
index fb1612f6fc..3d41dd1929 100644
--- a/config/default.json
+++ b/config/default.json
@@ -38,7 +38,8 @@
"templates": {
"default": "dist/index.html",
"minimal": "dist/index.minimal.html",
- "basic": "dist/index.basic.html"
+ "basic": "dist/index.basic.html",
+ "amp": "dist/index.amp.html"
},
"executeMixedinAsyncData": true,
"initialStateFilter": ["__DEMO_MODE__", "version", "storeView"],
diff --git a/core/build/webpack.base.config.js b/core/build/webpack.base.config.js
index 9fa8462d9e..f38bfb1e50 100644
--- a/core/build/webpack.base.config.js
+++ b/core/build/webpack.base.config.js
@@ -22,7 +22,8 @@ const themeCSS = themeRoot + '/css'
const themeApp = themeRoot + '/App.vue'
const themedIndex = path.join(themeRoot, 'index.template.html')
const themedIndexMinimal = path.join(themeRoot, 'index.minimal.template.html')
-const themedIndexBasic= path.join(themeRoot, 'index.basic.template.html')
+const themedIndexBasic = path.join(themeRoot, 'index.basic.template.html')
+const themedIndexAmp = path.join(themeRoot, 'index.amp.template.html')
const translationPreprocessor = require('@vue-storefront/i18n/scripts/translation.preprocessor.js')
translationPreprocessor([
@@ -57,14 +58,19 @@ module.exports = {
inject: isProd == false // in dev mode we're not using clientManifest therefore renderScripts() is returning empty string and we need to inject scripts using HTMLPlugin
}),
new HTMLPlugin({
- template: fs.existsSync(themedIndex) ? themedIndexMinimal : 'src/index.minimal.template.html',
+ template: fs.existsSync(themedIndexMinimal) ? themedIndexMinimal : 'src/index.minimal.template.html',
filename: 'index.minimal.html',
inject: isProd == false
}),
new HTMLPlugin({
- template: fs.existsSync(themedIndex) ? themedIndexBasic: 'src/index.basic.template.html',
+ template: fs.existsSync(themedIndexBasic) ? themedIndexBasic: 'src/index.basic.template.html',
filename: 'index.basic.html',
inject: isProd == false
+ }),
+ new HTMLPlugin({
+ template: fs.existsSync(themedIndexAmp) ? themedIndexAmp: 'src/index.amp.template.html',
+ filename: 'index.amp.html',
+ inject: isProd == false
})
],
devtool: 'source-map',
diff --git a/core/pages/Category.js b/core/pages/Category.js
index be893f53b4..4fc4ba6ca9 100644
--- a/core/pages/Category.js
+++ b/core/pages/Category.js
@@ -5,7 +5,7 @@ import store from '@vue-storefront/store'
import EventBus from '@vue-storefront/core/compatibility/plugins/event-bus'
import { baseFilterProductsQuery, buildFilterProductsQuery } from '@vue-storefront/store/helpers'
import { htmlDecode } from '@vue-storefront/core/filters/html-decode'
-
+import { localizedRoute } from '@vue-storefront/store/lib/multistore'
import Composite from '@vue-storefront/core/mixins/composite'
export default {
@@ -262,6 +262,16 @@ export default {
},
metaInfo () {
return {
+ link: [
+ { rel: 'amphtml',
+ href: this.$router.resolve(localizedRoute({
+ name: 'category-amp',
+ params: {
+ slug: this.category.slug
+ }
+ })).href
+ }
+ ],
title: htmlDecode(this.$route.meta.title || this.categoryName),
meta: this.$route.meta.description ? [{ vmid: 'description', description: htmlDecode(this.$route.meta.description) }] : []
}
diff --git a/core/pages/Product.js b/core/pages/Product.js
index fb8473ac4e..846c9957cb 100644
--- a/core/pages/Product.js
+++ b/core/pages/Product.js
@@ -3,7 +3,7 @@ import { mapGetters } from 'vuex'
import store from '@vue-storefront/store'
import EventBus from '@vue-storefront/core/compatibility/plugins/event-bus'
import { htmlDecode, stripHTML } from '@vue-storefront/core/filters'
-import { currentStoreView } from '@vue-storefront/store/lib/multistore'
+import { currentStoreView, localizedRoute } from '@vue-storefront/store/lib/multistore'
import { CompareProduct } from '@vue-storefront/core/modules/compare/components/Product.ts'
import { AddToCompare } from '@vue-storefront/core/modules/compare/components/AddToCompare.ts'
import { isOptionAvailableAsync } from '@vue-storefront/core/modules/catalog/helpers/index'
@@ -227,6 +227,18 @@ export default {
metaInfo () {
return {
title: htmlDecode(this.$route.meta.title || this.productName),
+ link: [
+ { rel: 'amphtml',
+ href: this.$router.resolve(localizedRoute({
+ name: this.product.type_id + '-product-amp',
+ params: {
+ parentSku: this.product.parentSku ? this.product.parentSku : this.product.sku,
+ slug: this.product.slug,
+ childSku: this.product.sku
+ }
+ })).href
+ }
+ ],
meta: [{ vmid: 'description', description: this.product.short_description ? stripHTML(htmlDecode(this.product.short_description)) : htmlDecode(stripHTML(this.product.description)) }]
}
}
diff --git a/core/scripts/server.js b/core/scripts/server.js
index 1e02ec1a50..d3d89b60e2 100755
--- a/core/scripts/server.js
+++ b/core/scripts/server.js
@@ -155,6 +155,7 @@ app.get('*', (req, res, next) => {
output: {
prepend: (context) => { return '' }, // these functions can be replaced in the Vue components to append or prepend some content AFTER all other things are rendered. So in this function You may call: output.prepend() { return context.renderStyles() } to attach styles
append: (context) => { return '' },
+ appendHead: (context) => { return '' },
template: 'default',
cacheTags: null
},
@@ -185,6 +186,7 @@ app.get('*', (req, res, next) => {
output = contentPrepend + output + contentAppend
if (context.output.template) { // case when we've got the template name back from vue app
+ if (!isProd) context.output.template = 'default' // in dev mode we can not use pre-rendered HTML templates
if (templatesCache[context.output.template]) { // please look at: https://github.com/vuejs/vue/blob/79cabadeace0e01fb63aa9f220f41193c0ca93af/src/server/template-renderer/index.js#L87 for reference
output = templatesCache[context.output.template](context).replace('', output)
} else {
diff --git a/src/index.amp.template.html b/src/index.amp.template.html
new file mode 100755
index 0000000000..6b1a43e36c
--- /dev/null
+++ b/src/index.amp.template.html
@@ -0,0 +1,13 @@
+
+
+
+ {{{ meta.inject().title.text() }}}
+ {{{ meta.inject().meta.text() }}}
+ {{{ meta.inject().link.text() }}}
+ {{{ output.appendHead() }}}
+ {{{ renderStyles().replace("
diff --git a/src/themes/default-amp/components/core/ProductListing.vue b/src/themes/default-amp/components/core/ProductListing.vue
new file mode 100755
index 0000000000..7c5e81b406
--- /dev/null
+++ b/src/themes/default-amp/components/core/ProductListing.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
diff --git a/src/themes/default-amp/components/core/ProductTile.vue b/src/themes/default-amp/components/core/ProductTile.vue
new file mode 100755
index 0000000000..f81668b623
--- /dev/null
+++ b/src/themes/default-amp/components/core/ProductTile.vue
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+ {{ product.name | htmlDecode }}
+
+
+
+ {{ product.originalPriceInclTax | price }}
+
+
+
+ {{ product.priceInclTax | price }}
+
+
+
+ {{ product.priceInclTax | price }}
+
+
+
+
+
+
+
+
diff --git a/src/themes/default-amp/css/_README.md b/src/themes/default-amp/css/_README.md
new file mode 100755
index 0000000000..8ff35b8260
--- /dev/null
+++ b/src/themes/default-amp/css/_README.md
@@ -0,0 +1,4 @@
+# Documentation
+Please read the docs before working with stylesheets.
+
+[Working with stylesheets](https://github.com/DivanteLtd/vue-storefront/blob/master/doc/Working%20with%20stylesheets%20(CSS).md) - how to use and extend stylesheets in Vue Storefront.
\ No newline at end of file
diff --git a/src/themes/default-amp/css/animations/_animations.scss b/src/themes/default-amp/css/animations/_animations.scss
new file mode 100755
index 0000000000..a24afcaa1e
--- /dev/null
+++ b/src/themes/default-amp/css/animations/_animations.scss
@@ -0,0 +1,27 @@
+@keyframes images-lazy-loading {
+ from {
+ opacity: 0;
+ }
+
+ to {
+ opacity: 1;
+ }
+}
+
+[lazy="loaded"] {
+ animation: images-lazy-loading;
+ animation-duration: 0.3s;
+}
+
+@keyframes ripple-effect {
+ 0% {
+ transform: translate(-50%, -50%) scale(0);
+ }
+ 20% {
+ transform: translate(-50%, -50%) scale(1);
+ }
+ 100% {
+ opacity: 0;
+ transform: translate(-50%, -50%) scale(1);
+ }
+}
diff --git a/src/themes/default-amp/css/animations/_transitions.scss b/src/themes/default-amp/css/animations/_transitions.scss
new file mode 100755
index 0000000000..363d9f0b63
--- /dev/null
+++ b/src/themes/default-amp/css/animations/_transitions.scss
@@ -0,0 +1,38 @@
+$motion-main: cubic-bezier(0.54, 0.02, 0.35, 0.88);
+$duration-main: .3s;
+
+.fade-enter-active,
+.fade-leave-active {
+ transition: opacity $duration-main;
+}
+
+.fade-enter,
+.fade-leave-to {
+ opacity: 0
+}
+
+.fade-in {
+ &-down-enter-active,
+ &-down-leave-active,
+ &-up-enter-active,
+ &-up-leave-active {
+ transition: all $duration-main $motion-main;
+ }
+
+ &-down-enter,
+ &-down-leave-to,
+ &-up-enter,
+ &-up-leave-to {
+ opacity: 0;
+ }
+
+ &-down-enter,
+ &-down-leave-to {
+ transform: translateY(-100%);
+ }
+
+ &-up-enter,
+ &-up-leave-to {
+ transform: translateY(100%);
+ }
+}
diff --git a/src/themes/default-amp/css/base/_base.scss b/src/themes/default-amp/css/base/_base.scss
new file mode 100755
index 0000000000..1a079fa17d
--- /dev/null
+++ b/src/themes/default-amp/css/base/_base.scss
@@ -0,0 +1,25 @@
+html,
+body {
+ margin: 0;
+ padding: 0;
+}
+
+a {
+ color: inherit;
+ position: relative;
+ text-decoration: none;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+ -webkit-tap-highlight-color: transparent;
+}
+
+#app {
+ overflow-x: hidden;
+}
+
+#viewport {
+ overflow-x: hidden;
+}
+
+.no-scroll {
+ overflow: hidden;
+}
diff --git a/src/themes/default-amp/css/base/_color.scss b/src/themes/default-amp/css/base/_color.scss
new file mode 100755
index 0000000000..401f7cb5ff
--- /dev/null
+++ b/src/themes/default-amp/css/base/_color.scss
@@ -0,0 +1,16 @@
+// Colors / backgrounds
+// =======================
+// Generate colors selectors
+// .cl-{#name-of-color}
+@include color-selectors(map_merge($colors, $colors-theme), 'cl', 'color');
+
+// .cl-{#palette}-{#name-of-color}
+@include color-selectors($colors-background, 'cl-bg', 'color');
+@include color-selectors($colors-border, 'cl-brdr', 'color');
+
+// Generate background-color selectors
+// .bg-cl-{#name-of-color}
+@include color-selectors(map_merge($colors, $colors-background), 'bg-cl', 'background-color');
+
+// .bg-cl-#{#palette}-{#name-of-color}
+@include color-selectors($colors-theme, 'bg-cl-th', 'background-color');
diff --git a/src/themes/default-amp/css/base/_flexbox-grid.css b/src/themes/default-amp/css/base/_flexbox-grid.css
new file mode 100755
index 0000000000..2f502c950c
--- /dev/null
+++ b/src/themes/default-amp/css/base/_flexbox-grid.css
@@ -0,0 +1 @@
+.container,.container-fluid{margin-right:auto;margin-left:auto}.container-fluid{padding-right:2rem;padding-left:2rem}.row{box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-.5rem;margin-left:-.5rem}.row.reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.col.reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.col-xs,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-offset-0,.col-xs-offset-1,.col-xs-offset-10,.col-xs-offset-11,.col-xs-offset-12,.col-xs-offset-2,.col-xs-offset-3,.col-xs-offset-4,.col-xs-offset-5,.col-xs-offset-6,.col-xs-offset-7,.col-xs-offset-8,.col-xs-offset-9{box-sizing:border-box;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:.5rem;padding-left:.5rem}.col-xs{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-preferred-size:0;flex-basis:0;max-width:100%}.col-xs-1{-ms-flex-preferred-size:8.33333333%;flex-basis:8.33333333%;max-width:8.33333333%}.col-xs-2{-ms-flex-preferred-size:16.66666667%;flex-basis:16.66666667%;max-width:16.66666667%}.col-xs-3{-ms-flex-preferred-size:25%;flex-basis:25%;max-width:25%}.col-xs-4{-ms-flex-preferred-size:33.33333333%;flex-basis:33.33333333%;max-width:33.33333333%}.col-xs-5{-ms-flex-preferred-size:41.66666667%;flex-basis:41.66666667%;max-width:41.66666667%}.col-xs-6{-ms-flex-preferred-size:50%;flex-basis:50%;max-width:50%}.col-xs-7{-ms-flex-preferred-size:58.33333333%;flex-basis:58.33333333%;max-width:58.33333333%}.col-xs-8{-ms-flex-preferred-size:66.66666667%;flex-basis:66.66666667%;max-width:66.66666667%}.col-xs-9{-ms-flex-preferred-size:75%;flex-basis:75%;max-width:75%}.col-xs-10{-ms-flex-preferred-size:83.33333333%;flex-basis:83.33333333%;max-width:83.33333333%}.col-xs-11{-ms-flex-preferred-size:91.66666667%;flex-basis:91.66666667%;max-width:91.66666667%}.col-xs-12{-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-11{margin-left:91.66666667%}.start-xs{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;text-align:start}.center-xs{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-align:center}.end-xs{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;text-align:end}.top-xs{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.middle-xs{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.bottom-xs{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.around-xs{-ms-flex-pack:distribute;justify-content:space-around}.between-xs{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.first-xs{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.last-xs{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}@media only screen and (min-width:48em){.container{width:49rem}.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-offset-0,.col-sm-offset-1,.col-sm-offset-10,.col-sm-offset-11,.col-sm-offset-12,.col-sm-offset-2,.col-sm-offset-3,.col-sm-offset-4,.col-sm-offset-5,.col-sm-offset-6,.col-sm-offset-7,.col-sm-offset-8,.col-sm-offset-9{box-sizing:border-box;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:.5rem;padding-left:.5rem}.col-sm{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-preferred-size:0;flex-basis:0;max-width:100%}.col-sm-1{-ms-flex-preferred-size:8.33333333%;flex-basis:8.33333333%;max-width:8.33333333%}.col-sm-2{-ms-flex-preferred-size:16.66666667%;flex-basis:16.66666667%;max-width:16.66666667%}.col-sm-3{-ms-flex-preferred-size:25%;flex-basis:25%;max-width:25%}.col-sm-4{-ms-flex-preferred-size:33.33333333%;flex-basis:33.33333333%;max-width:33.33333333%}.col-sm-5{-ms-flex-preferred-size:41.66666667%;flex-basis:41.66666667%;max-width:41.66666667%}.col-sm-6{-ms-flex-preferred-size:50%;flex-basis:50%;max-width:50%}.col-sm-7{-ms-flex-preferred-size:58.33333333%;flex-basis:58.33333333%;max-width:58.33333333%}.col-sm-8{-ms-flex-preferred-size:66.66666667%;flex-basis:66.66666667%;max-width:66.66666667%}.col-sm-9{-ms-flex-preferred-size:75%;flex-basis:75%;max-width:75%}.col-sm-10{-ms-flex-preferred-size:83.33333333%;flex-basis:83.33333333%;max-width:83.33333333%}.col-sm-11{-ms-flex-preferred-size:91.66666667%;flex-basis:91.66666667%;max-width:91.66666667%}.col-sm-12{-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-11{margin-left:91.66666667%}.start-sm{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;text-align:start}.center-sm{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-align:center}.end-sm{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;text-align:end}.top-sm{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.middle-sm{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.bottom-sm{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.around-sm{-ms-flex-pack:distribute;justify-content:space-around}.between-sm{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.first-sm{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.last-sm{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}}@media only screen and (min-width:64em){.container{width:65rem}.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-offset-0,.col-md-offset-1,.col-md-offset-10,.col-md-offset-11,.col-md-offset-12,.col-md-offset-2,.col-md-offset-3,.col-md-offset-4,.col-md-offset-5,.col-md-offset-6,.col-md-offset-7,.col-md-offset-8,.col-md-offset-9{box-sizing:border-box;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:.5rem;padding-left:.5rem}.col-md{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-preferred-size:0;flex-basis:0;max-width:100%}.col-md-1{-ms-flex-preferred-size:8.33333333%;flex-basis:8.33333333%;max-width:8.33333333%}.col-md-2{-ms-flex-preferred-size:16.66666667%;flex-basis:16.66666667%;max-width:16.66666667%}.col-md-3{-ms-flex-preferred-size:25%;flex-basis:25%;max-width:25%}.col-md-4{-ms-flex-preferred-size:33.33333333%;flex-basis:33.33333333%;max-width:33.33333333%}.col-md-5{-ms-flex-preferred-size:41.66666667%;flex-basis:41.66666667%;max-width:41.66666667%}.col-md-6{-ms-flex-preferred-size:50%;flex-basis:50%;max-width:50%}.col-md-7{-ms-flex-preferred-size:58.33333333%;flex-basis:58.33333333%;max-width:58.33333333%}.col-md-8{-ms-flex-preferred-size:66.66666667%;flex-basis:66.66666667%;max-width:66.66666667%}.col-md-9{-ms-flex-preferred-size:75%;flex-basis:75%;max-width:75%}.col-md-10{-ms-flex-preferred-size:83.33333333%;flex-basis:83.33333333%;max-width:83.33333333%}.col-md-11{-ms-flex-preferred-size:91.66666667%;flex-basis:91.66666667%;max-width:91.66666667%}.col-md-12{-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-11{margin-left:91.66666667%}.start-md{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;text-align:start}.center-md{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-align:center}.end-md{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;text-align:end}.top-md{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.middle-md{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.bottom-md{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.around-md{-ms-flex-pack:distribute;justify-content:space-around}.between-md{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.first-md{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.last-md{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}}@media only screen and (min-width:75em){.container{width:76rem}.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-offset-0,.col-lg-offset-1,.col-lg-offset-10,.col-lg-offset-11,.col-lg-offset-12,.col-lg-offset-2,.col-lg-offset-3,.col-lg-offset-4,.col-lg-offset-5,.col-lg-offset-6,.col-lg-offset-7,.col-lg-offset-8,.col-lg-offset-9{box-sizing:border-box;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding-right:.5rem;padding-left:.5rem}.col-lg{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-preferred-size:0;flex-basis:0;max-width:100%}.col-lg-1{-ms-flex-preferred-size:8.33333333%;flex-basis:8.33333333%;max-width:8.33333333%}.col-lg-2{-ms-flex-preferred-size:16.66666667%;flex-basis:16.66666667%;max-width:16.66666667%}.col-lg-3{-ms-flex-preferred-size:25%;flex-basis:25%;max-width:25%}.col-lg-4{-ms-flex-preferred-size:33.33333333%;flex-basis:33.33333333%;max-width:33.33333333%}.col-lg-5{-ms-flex-preferred-size:41.66666667%;flex-basis:41.66666667%;max-width:41.66666667%}.col-lg-6{-ms-flex-preferred-size:50%;flex-basis:50%;max-width:50%}.col-lg-7{-ms-flex-preferred-size:58.33333333%;flex-basis:58.33333333%;max-width:58.33333333%}.col-lg-8{-ms-flex-preferred-size:66.66666667%;flex-basis:66.66666667%;max-width:66.66666667%}.col-lg-9{-ms-flex-preferred-size:75%;flex-basis:75%;max-width:75%}.col-lg-10{-ms-flex-preferred-size:83.33333333%;flex-basis:83.33333333%;max-width:83.33333333%}.col-lg-11{-ms-flex-preferred-size:91.66666667%;flex-basis:91.66666667%;max-width:91.66666667%}.col-lg-12{-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-11{margin-left:91.66666667%}.start-lg{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;text-align:start}.center-lg{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-align:center}.end-lg{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;text-align:end}.top-lg{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.middle-lg{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.bottom-lg{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.around-lg{-ms-flex-pack:distribute;justify-content:space-around}.between-lg{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.first-lg{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.last-lg{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}}
\ No newline at end of file
diff --git a/src/themes/default-amp/css/base/_global_vars.scss b/src/themes/default-amp/css/base/_global_vars.scss
new file mode 100755
index 0000000000..4d9f11ec5a
--- /dev/null
+++ b/src/themes/default-amp/css/base/_global_vars.scss
@@ -0,0 +1,7 @@
+// @todo move to separate file
+$z-index: (
+ overlay: 3,
+ modal: 10,
+ notification: 1000,
+ loader: 1001
+)
diff --git a/src/themes/default-amp/css/base/_icons.scss b/src/themes/default-amp/css/base/_icons.scss
new file mode 100755
index 0000000000..a9af0a28fd
--- /dev/null
+++ b/src/themes/default-amp/css/base/_icons.scss
@@ -0,0 +1,26 @@
+// @font-face {
+// font-family: 'Material Icons';
+// font-style: normal;
+// font-weight: 400;
+// src: local('Material Icons'),
+// local('MaterialIcons-Regular'),
+// url('../assets/fonts/MaterialIcons-Regular.woff2') format('woff2'),
+// url('../assets/fonts/MaterialIcons-Regular.woff') format('woff'),
+// ;
+// }
+
+// .material-icons {
+// font-family: 'Material Icons';
+// font-weight: normal;
+// font-style: normal;
+// font-size: 24px;
+// line-height: 1;
+// letter-spacing: normal;
+// text-transform: none;
+// display: inline-block;
+// white-space: nowrap;
+// word-wrap: normal;
+// direction: ltr;
+// -webkit-font-feature-settings: 'liga';
+// -webkit-font-smoothing: antialiased;
+// }
\ No newline at end of file
diff --git a/src/themes/default-amp/css/base/_text.scss b/src/themes/default-amp/css/base/_text.scss
new file mode 100755
index 0000000000..941cf239a7
--- /dev/null
+++ b/src/themes/default-amp/css/base/_text.scss
@@ -0,0 +1,114 @@
+// Global styles for text
+body {
+ font-size: 16px;
+ font-family: 'Roboto', sans-serif;
+ font-weight: 400;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5 {
+ font-family: 'Playfair Display', serif;
+}
+
+h1,
+.h1 {
+ font-size: 48px;
+}
+
+h2,
+.h2 {
+ font-size: 36px;
+
+ @media (max-width: 767px) {
+ font-size: 24px;
+ }
+}
+h3,
+.h3 {
+ font-size: 24px;
+}
+h4,
+.h4 {
+ font-size: 18px;
+}
+h5,
+.h5 {
+ font-size: 14px;
+}
+h6,
+.h6 {
+ font-size: 12px;
+}
+
+// Atomic styles for text
+.serif {
+ font-family: 'Playfair Display', serif;
+}
+.sans-serif {
+ font-family: 'Roboto', sans-serif;
+}
+
+.uppercase {
+ text-transform: uppercase;
+}
+
+.align-center {
+ text-align: center;
+}
+.align-right {
+ text-align: right;
+}
+.align-left {
+ text-align: left;
+}
+.align-justify {
+ text-align: justify;
+}
+
+.weight-400 {
+ font-weight: 400;
+}
+.weight-700 {
+ font-weight: 700;
+}
+
+.lh16 {
+ line-height: 16px;
+}
+.lh20 {
+ line-height: 20px;
+}
+.lh25 {
+ line-height: 25px;
+}
+.lh30 {
+ line-height: 30px;
+}
+.lh35 {
+ line-height: 35px;
+}
+.lh40 {
+ line-height: 40px;
+}
+
+// Sizes
+.fs-medium-small {
+ font-size: 14px;
+}
+.fs-medium {
+ font-size: 18px;
+}
+.fs-large {
+ font-size: 24px;
+}
+.fs-big {
+ font-size: 36px;
+}
+
+// @todo its not in styleguite therefore shouldn't be here, ask Karol Bzik
+.fs16 {
+ font-size: 16px;
+}
diff --git a/src/themes/default-amp/css/components/_buttons.scss b/src/themes/default-amp/css/components/_buttons.scss
new file mode 100755
index 0000000000..7a233d18ec
--- /dev/null
+++ b/src/themes/default-amp/css/components/_buttons.scss
@@ -0,0 +1,49 @@
+.ripple {
+ position: relative;
+ overflow: hidden;
+ &::after {
+ content: '';
+ display: block;
+ position: absolute;
+ margin: 0;
+ padding: 0;
+ left: 50%;
+ top: 50%;
+ width: 120px;
+ height: 120px;
+ background-color: #f5f5f5;
+ border-radius: 50%;
+ opacity: .2;
+ transform: translate(-50%, -50%) scale(0);
+ }
+ &:not(:active):after {
+ animation: ripple-effect 1s ease-out;
+ }
+ &::after {
+ visibility: hidden;
+ }
+ &:focus {
+ &::after {
+ visibility: visible;
+ }
+ }
+ &-dark {
+ &::after {
+ background-color: #ddd;
+ }
+ }
+}
+
+.button-disabled {
+ opacity: 0.3;
+ pointer-events: none;
+}
+
+button,
+.button {
+ outline: none;
+ cursor: pointer;
+ margin: 0;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+ -webkit-tap-highlight-color: transparent;
+}
diff --git a/src/themes/default-amp/css/helpers/_functions.scss b/src/themes/default-amp/css/helpers/_functions.scss
new file mode 100755
index 0000000000..48a30f39da
--- /dev/null
+++ b/src/themes/default-amp/css/helpers/_functions.scss
@@ -0,0 +1,3 @@
+// Global functions
+// ================
+@import 'functions/color'
diff --git a/src/themes/default-amp/css/helpers/_mixins.scss b/src/themes/default-amp/css/helpers/_mixins.scss
new file mode 100755
index 0000000000..03c91646e7
--- /dev/null
+++ b/src/themes/default-amp/css/helpers/_mixins.scss
@@ -0,0 +1,3 @@
+// Global mixins
+// =============
+@import 'mixins/color-selectors'
diff --git a/src/themes/default-amp/css/helpers/functions/_color.scss b/src/themes/default-amp/css/helpers/functions/_color.scss
new file mode 100755
index 0000000000..57375dae72
--- /dev/null
+++ b/src/themes/default-amp/css/helpers/functions/_color.scss
@@ -0,0 +1,16 @@
+/// An easy way to get colors from the $colors map
+/// @name color
+/// @param {String} $color - Color name
+/// @param {Map} $map [ map_merge($colors, $colors_theme] - Map of colors
+@function color($color, $map: map_merge($colors, $colors-theme), $variant: default) {
+ @if (type-of(map-get($map, $color)) == map) {
+ @if map_has_key(map-get($map, $color), $variant) {
+ @return map-get(map-get($map, $color), $variant)
+ } @else {
+ @return map-get(map-get($map, $color), default)
+ }
+ } @else {
+ @return map-get($map, $color)
+ }
+
+}
diff --git a/src/themes/default-amp/css/helpers/mixins/_color-selectors.scss b/src/themes/default-amp/css/helpers/mixins/_color-selectors.scss
new file mode 100755
index 0000000000..11d54da83a
--- /dev/null
+++ b/src/themes/default-amp/css/helpers/mixins/_color-selectors.scss
@@ -0,0 +1,33 @@
+/// Generate colors values
+/// @name color-selectors
+/// @param {Map} $map [$colors] - Map with color values
+/// @param {String} $selector ['.cl'] - Selector to css class, .#{$selector}-#{$name-of-color}
+/// @param {String} $property ['color'] - CSS property
+@mixin color-selectors($map: $colors, $selector: 'cl', $property: 'color') {
+ @each $name, $value in $map {
+ // in case when color value is map with hover, focus variants
+ @if type-of($value) == map {
+ @if map_has_key($value, default) {
+ .#{$selector}-#{$name} {
+ #{$property}: map-get($value, default);
+ }
+ }
+
+ @if map_has_key($value, hover) {
+ .\:#{$selector}-#{$name}:hover {
+ #{$property}: map-get($value, hover);
+ }
+ }
+
+ @if map_has_key($value, focus) {
+ .\:#{$selector}-#{$name}:focus {
+ #{$property}: map-get($value, focus);
+ }
+ }
+ } @else {
+ .#{$selector}-#{$name} {
+ #{$property}: #{$value};
+ }
+ }
+ }
+}
diff --git a/src/themes/default-amp/css/layout/_border.scss b/src/themes/default-amp/css/layout/_border.scss
new file mode 100755
index 0000000000..56c556c16d
--- /dev/null
+++ b/src/themes/default-amp/css/layout/_border.scss
@@ -0,0 +1,46 @@
+// Pixel sizes
+$border-px: 1;
+
+// Radius
+$border-radius: (
+ square: 0,
+ circle: 50%
+);
+
+@mixin border {
+ @each $i in $border-px {
+ .brdr-#{$i} {
+ border: #{$i}px solid;
+ }
+ .brdr-top-#{$i} {
+ border-top-width: #{$i}px;
+ border-top-style: solid;
+ }
+ .brdr-bottom-#{$i} {
+ border-bottom-width: #{$i}px;
+ border-bottom-style: solid;
+ }
+ .brdr-left-#{$i} {
+ border-left-width: #{$i}px;
+ border-left-style: solid;
+ }
+ .brdr-right-#{$i} {
+ border-right-width: #{$i}px;
+ border-right-style: solid;
+ }
+ }
+ @each $name, $value in $border-radius {
+ .brdr-#{$name} {
+ border-radius: #{$value};
+ }
+ }
+ @include color-selectors(map_merge($colors, $colors-border), 'brdr-cl', 'border-color');
+ @include color-selectors($colors-theme, 'brdr-cl-th', 'border-color');
+ @include color-selectors($colors-background, 'brdr-cl-bg', 'border-color');
+}
+
+.brdr-none {
+ border: none;
+}
+
+@include border;
diff --git a/src/themes/default-amp/css/layout/_layout.scss b/src/themes/default-amp/css/layout/_layout.scss
new file mode 100755
index 0000000000..b3142d9b25
--- /dev/null
+++ b/src/themes/default-amp/css/layout/_layout.scss
@@ -0,0 +1,51 @@
+.inline-flex {
+ display: inline-flex;
+}
+
+.flex {
+ display: flex;
+}
+
+.block {
+ display: block;
+}
+
+.center-self {
+ align-self: center;
+}
+
+.relative {
+ position: relative;
+}
+
+.absolute {
+ position: absolute;
+}
+
+.fixed {
+ position: fixed;
+}
+
+.border-box {
+ box-sizing: border-box;
+}
+
+.w-100 {
+ width: 100%;
+}
+
+.w-auto {
+ width: auto;
+}
+
+.h-100 {
+ height: 100%;
+}
+
+.w-50 {
+ width: 50%;
+}
+
+.mw-100 {
+ max-width: 100%
+}
diff --git a/src/themes/default-amp/css/layout/_margin.scss b/src/themes/default-amp/css/layout/_margin.scss
new file mode 100755
index 0000000000..b67b36ae16
--- /dev/null
+++ b/src/themes/default-amp/css/layout/_margin.scss
@@ -0,0 +1,102 @@
+// Try to use multiples of 5 when using pixels
+
+// .m5 .mx5 .my5 .mt5 .mb5 .ml5 .mr5 - example classes for px margins
+// .m5p .mx5p .my5p .mt5p .mb5p .ml5p .mr5p - example classes for % margins
+
+// Pixels
+$margin-px: 0 5 10 40;
+$margin-x-px: 5 10;
+$margin-y-px: 0 5 10 15 20 30;
+$margin-top-px: 0 5 8 10 15 20 25 30 35 50 55 60;
+$margin-bottom-px: 0 5 10 15 20 25 30 35 40 45 55 80;
+$margin-left-px: 10 15 20 30 40;
+$margin-right-px: 0 5 10 15 20 35;
+
+// Percents
+$margin-p: 5;
+$margin-x-p: 5;
+$margin-y-p: 5;
+$margin-top-p: 5;
+$margin-bottom-p: 5;
+$margin-left-p: 5;
+$margin-right-p: 5;
+
+// Generators
+@mixin margin {
+ @each $i in $margin-px {
+ .m#{$i} {
+ margin: #{$i}px;
+ }
+ }
+ @each $i in $margin-p {
+ .m#{$i}p {
+ margin: percentage($i/100);
+ }
+ }
+ @each $i in $margin-x-px {
+ .mx#{$i} {
+ margin-left: #{$i}px;
+ margin-right: #{$i}px;
+ }
+ }
+ @each $i in $margin-x-p {
+ .mx#{$i}p {
+ margin-left: percentage($i/100);
+ margin-right: percentage($i/100);
+ }
+ }
+ @each $i in $margin-y-px {
+ .my#{$i} {
+ margin-top: #{$i}px;
+ margin-bottom: #{$i}px;
+ }
+ }
+ @each $i in $margin-y-p {
+ .my#{$i}p {
+ margin-top: percentage($i/100);
+ margin-bottom: percentage($i/100);
+ }
+ }
+ @each $i in $margin-top-px {
+ .mt#{$i} {
+ margin-top: #{$i}px;
+ }
+ }
+ @each $i in $margin-top-p {
+ .mt#{$i}p {
+ margin-top: percentage($i/100);
+ }
+ }
+ @each $i in $margin-bottom-px {
+ .mb#{$i} {
+ margin-bottom: #{$i}px;
+ }
+ }
+ @each $i in $margin-bottom-p {
+ .mb#{$i}p {
+ margin-bottom: percentage($i/100);
+ }
+ }
+ @each $i in $margin-left-px {
+ .ml#{$i} {
+ margin-left: #{$i}px;
+ }
+ }
+ @each $i in $margin-left-p {
+ .ml#{$i}p {
+ margin-left: percentage($i/100);
+ }
+ }
+ @each $i in $margin-right-px {
+ .mr#{$i} {
+ margin-right: #{$i}px;
+ }
+ }
+ @each $i in $margin-right-p {
+ .mr#{$i}p {
+ margin-right: percentage($i/100);
+ }
+ }
+}
+
+@include margin;
diff --git a/src/themes/default-amp/css/layout/_padding.scss b/src/themes/default-amp/css/layout/_padding.scss
new file mode 100755
index 0000000000..2c9b079119
--- /dev/null
+++ b/src/themes/default-amp/css/layout/_padding.scss
@@ -0,0 +1,66 @@
+// IMPORTANT: Add new css rules ON DEMAND only when you need them!
+// Try to use multiples of 5 when using pixels
+
+// .p0 .px10 .py5 - example classes for px paddings
+// .px10p - example class for % padding
+
+// Pixels
+$padding-px: 0 5 10 12 15 20 25 45 50;
+$padding-x-px: 2 10 15 20 25 40 55 65 70;
+$padding-y-px: 0 5 10 15 20 25 30 35 40 50;
+$padding-top-px: 0 5 10 15 20 25 30 35 40 45 50 55 70;
+$padding-bottom-px: 10 15 20 30 35 40 45 50 60 70;
+$padding-left-px: 0 20 30 35 40 70;
+$padding-right-px: 0 5 15 20 30 55 70;
+
+// Percents
+$padding-x-p: 10;
+
+// Generators
+@mixin padding {
+ @each $i in $padding-px {
+ .p#{$i} {
+ padding: #{$i}px;
+ }
+ }
+ @each $i in $padding-x-px {
+ .px#{$i} {
+ padding-left: #{$i}px;
+ padding-right: #{$i}px;
+ }
+ }
+ @each $i in $padding-x-p {
+ .px#{$i}p {
+ padding-left: percentage($i/100);
+ padding-right: percentage($i/100);
+ }
+ }
+ @each $i in $padding-y-px {
+ .py#{$i} {
+ padding-top: #{$i}px;
+ padding-bottom: #{$i}px;
+ }
+ }
+ @each $i in $padding-top-px {
+ .pt#{$i} {
+ padding-top: #{$i}px;
+ }
+ }
+ @each $i in $padding-bottom-px {
+ .pb#{$i} {
+ padding-bottom: #{$i}px;
+ }
+ }
+ @each $i in $padding-right-px {
+ .pr#{$i} {
+ padding-right: #{$i}px;
+ }
+ }
+ @each $i in $padding-left-px {
+ .pl#{$i} {
+ padding-left: #{$i}px;
+ }
+ }
+}
+
+@include padding;
diff --git a/src/themes/default-amp/css/main.scss b/src/themes/default-amp/css/main.scss
new file mode 100755
index 0000000000..04dc5cbf10
--- /dev/null
+++ b/src/themes/default-amp/css/main.scss
@@ -0,0 +1,24 @@
+@import 'vendor/flexboxgrid2';
+
+@import 'variables/variables';
+@import 'helpers/mixins';
+@import 'helpers/functions';
+@import 'base/base';
+@import 'base/flexbox-grid';
+@import 'base/global_vars';
+@import 'base/text';
+@import 'base/color';
+@import 'base/icons';
+
+@import 'layout/layout';
+@import 'layout/border';
+@import 'layout/margin';
+@import 'layout/padding';
+
+@import 'components/buttons';
+
+@import 'utilities/utilities';
+@import 'utilities/visibility';
+
+@import 'animations/animations';
+@import 'animations/transitions';
diff --git a/src/themes/default-amp/css/utilities/_utilities.scss b/src/themes/default-amp/css/utilities/_utilities.scss
new file mode 100755
index 0000000000..5347c1e876
--- /dev/null
+++ b/src/themes/default-amp/css/utilities/_utilities.scss
@@ -0,0 +1,28 @@
+.no-outline {
+ outline: 0;
+}
+
+.pointer {
+ cursor: pointer;
+}
+
+a.underline:after,
+a:not(.no-underline):hover:after {
+ content: "";
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 1px;
+ background-color: color(primary, $colors-border)
+}
+
+.no-underline:hover:after {
+ height: 0;
+}
+
+@media (hover: none) {
+ a:not(.no-underline):after {
+ display: none;
+ }
+}
diff --git a/src/themes/default-amp/css/utilities/_visibility.scss b/src/themes/default-amp/css/utilities/_visibility.scss
new file mode 100755
index 0000000000..fb4efbd368
--- /dev/null
+++ b/src/themes/default-amp/css/utilities/_visibility.scss
@@ -0,0 +1,35 @@
+[v-cloak],
+.hidden {
+ display: none;
+}
+
+.hidden-xs {
+ display: none;
+
+ @media only screen and (min-width:48em) {
+ display: inherit
+ }
+}
+
+.hidden-md {
+ @media only screen and (min-width:48em) {
+ display: none;
+ }
+}
+
+@media only screen and (min-width:768px) {
+ .visible-xs {
+ display: none;
+ }
+}
+
+.visually-hidden {
+ position: absolute;
+ overflow: hidden;
+ clip: rect(0 0 0 0);
+ width: 1px;
+ height: 1px;
+ margin: -1px;
+ padding: 0;
+ border: 0;
+}
diff --git a/src/themes/default-amp/css/variables/_colors.scss b/src/themes/default-amp/css/variables/_colors.scss
new file mode 100755
index 0000000000..16d4fa4d5c
--- /dev/null
+++ b/src/themes/default-amp/css/variables/_colors.scss
@@ -0,0 +1,62 @@
+// Colors
+// ======
+// @LandonSchropp's approach of naming color variables.
+// - http://davidwalsh.name/sass-color-variables-dont-suck
+// - http://www.color-blindness.com/color-name-hue/
+
+// General colors palette
+$colors: (
+ transparent: transparent,
+ black: #000,
+ white: #fff,
+ white-smoke: #f2f2f2,
+ gainsboro: #e0e0e0,
+ silver: #bdbdbd,
+ gray: #828282,
+ suva-gray: #8e8e8e,
+ matterhorn: #4f4f4f,
+ burnt-sienna: #eb5757,
+ buccaneer: #755,
+ forest-green: #308c14,
+ puerto-rico: #4dba87,
+ mine-shaft: #333
+);
+
+// Theme generic colors
+// Key: name of color
+// Value: color value or map with default, hover, focus color values
+$colors-theme: (
+ primary: (
+ default: map-get($colors, matterhorn),
+ hover: map-get($colors, matterhorn)
+ ),
+ secondary: (
+ default: map-get($colors, gray),
+ hover: map-get($colors, matterhorn),
+ ),
+ accent: (
+ default: map-get($colors, matterhorn),
+ hover: map-get($colors, black),
+ ),
+ tertiary: map-get($colors, silver),
+ success: map-get($colors, puerto-rico),
+ warning: map-get($colors, buccaneer),
+ error: map-get($colors, burnt-sienna)
+);
+
+$colors-border: (
+ primary: map-get($colors, silver),
+ secondary: map-get($colors, gainsboro),
+);
+
+$colors-background: (
+ primary: (
+ default: map-get($colors, white),
+ hover: map-get($colors, silver)
+ ),
+ secondary: (
+ default: map-get($colors, white-smoke),
+ hover: map-get($colors, gainsboro)
+ ),
+ tertiary: map-get($colors, suva-gray)
+);
diff --git a/src/themes/default-amp/css/variables/_variables.scss b/src/themes/default-amp/css/variables/_variables.scss
new file mode 100755
index 0000000000..1a5baa0a5f
--- /dev/null
+++ b/src/themes/default-amp/css/variables/_variables.scss
@@ -0,0 +1,5 @@
+// Default theme variables
+// =======================
+
+// Colors
+@import 'colors';
diff --git a/src/themes/default-amp/css/vendor/_flexboxgrid2.scss b/src/themes/default-amp/css/vendor/_flexboxgrid2.scss
new file mode 100755
index 0000000000..567c7dc1f6
--- /dev/null
+++ b/src/themes/default-amp/css/vendor/_flexboxgrid2.scss
@@ -0,0 +1,1209 @@
+.container {
+ box-sizing: border-box;
+ margin-left: auto;
+ margin-right: auto;
+ padding-right: 8px;
+ padding-left: 8px;
+}
+
+.container-fluid {
+ padding-right: 16px;
+ padding-left: 16px;
+}
+
+@media only screen and (min-width: 576px) {
+ .container {
+ width: 560px;
+ max-width: 100%;
+ }
+}
+
+@media only screen and (min-width: 768px) {
+ .container {
+ width: 752px;
+ max-width: 100%;
+ }
+}
+
+@media only screen and (min-width: 992px) {
+ .container {
+ width: 976px;
+ max-width: 100%;
+ }
+}
+
+@media only screen and (min-width: 1200px) {
+ .container {
+ width: 1184px;
+ max-width: 100%;
+ }
+}
+
+.row {
+ box-sizing: border-box;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 0;
+ -ms-flex: 0 1 auto;
+ flex: 0 1 auto;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ margin-right: -8px;
+ margin-left: -8px;
+}
+
+.row.reverse {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: reverse;
+ -ms-flex-direction: row-reverse;
+ flex-direction: row-reverse;
+}
+
+.col.reverse {
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: reverse;
+ -ms-flex-direction: column-reverse;
+ flex-direction: column-reverse;
+}
+
+[class^="col-"] {
+ box-sizing: border-box;
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ -ms-flex-preferred-size: 100%;
+ flex-basis: 100%;
+ padding-right: 8px;
+ padding-left: 8px;
+ max-width: 100%;
+}
+
+.col-xs {
+ -webkit-box-flex: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ -ms-flex-preferred-size: 0;
+ flex-basis: 0;
+ max-width: 100%;
+}
+
+.col-xs-1 {
+ -ms-flex-preferred-size: 8.33333333%;
+ flex-basis: 8.33333333%;
+ max-width: 8.33333333%;
+}
+
+.col-xs-2 {
+ -ms-flex-preferred-size: 16.66666667%;
+ flex-basis: 16.66666667%;
+ max-width: 16.66666667%;
+}
+
+.col-xs-3 {
+ -ms-flex-preferred-size: 25%;
+ flex-basis: 25%;
+ max-width: 25%;
+}
+
+.col-xs-4 {
+ -ms-flex-preferred-size: 33.33333333%;
+ flex-basis: 33.33333333%;
+ max-width: 33.33333333%;
+}
+
+.col-xs-5 {
+ -ms-flex-preferred-size: 41.66666667%;
+ flex-basis: 41.66666667%;
+ max-width: 41.66666667%;
+}
+
+.col-xs-6 {
+ -ms-flex-preferred-size: 50%;
+ flex-basis: 50%;
+ max-width: 50%;
+}
+
+.col-xs-7 {
+ -ms-flex-preferred-size: 58.33333333%;
+ flex-basis: 58.33333333%;
+ max-width: 58.33333333%;
+}
+
+.col-xs-8 {
+ -ms-flex-preferred-size: 66.66666667%;
+ flex-basis: 66.66666667%;
+ max-width: 66.66666667%;
+}
+
+.col-xs-9 {
+ -ms-flex-preferred-size: 75%;
+ flex-basis: 75%;
+ max-width: 75%;
+}
+
+.col-xs-10 {
+ -ms-flex-preferred-size: 83.33333333%;
+ flex-basis: 83.33333333%;
+ max-width: 83.33333333%;
+}
+
+.col-xs-11 {
+ -ms-flex-preferred-size: 91.66666667%;
+ flex-basis: 91.66666667%;
+ max-width: 91.66666667%;
+}
+
+.col-xs-12 {
+ -ms-flex-preferred-size: 100%;
+ flex-basis: 100%;
+ max-width: 100%;
+}
+
+.col-xs-offset-0 {
+ margin-left: 0;
+}
+
+.col-xs-offset-1 {
+ margin-left: 8.33333333%;
+}
+
+.col-xs-offset-2 {
+ margin-left: 16.66666667%;
+}
+
+.col-xs-offset-3 {
+ margin-left: 25%;
+}
+
+.col-xs-offset-4 {
+ margin-left: 33.33333333%;
+}
+
+.col-xs-offset-5 {
+ margin-left: 41.66666667%;
+}
+
+.col-xs-offset-6 {
+ margin-left: 50%;
+}
+
+.col-xs-offset-7 {
+ margin-left: 58.33333333%;
+}
+
+.col-xs-offset-8 {
+ margin-left: 66.66666667%;
+}
+
+.col-xs-offset-9 {
+ margin-left: 75%;
+}
+
+.col-xs-offset-10 {
+ margin-left: 83.33333333%;
+}
+
+.col-xs-offset-11 {
+ margin-left: 91.66666667%;
+}
+
+.start-xs {
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ text-align: start;
+}
+
+.center-xs {
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ text-align: center;
+}
+
+.end-xs {
+ -webkit-box-pack: end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+ text-align: end;
+}
+
+.top-xs {
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+}
+
+.middle-xs {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+.bottom-xs {
+ -webkit-box-align: end;
+ -ms-flex-align: end;
+ align-items: flex-end;
+}
+
+.around-xs {
+ -ms-flex-pack: distribute;
+ justify-content: space-around;
+}
+
+.between-xs {
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+}
+
+.first-xs {
+ -webkit-box-ordinal-group: 0;
+ -ms-flex-order: -1;
+ order: -1;
+}
+
+.last-xs {
+ -webkit-box-ordinal-group: 2;
+ -ms-flex-order: 1;
+ order: 1;
+}
+
+.initial-order-xs {
+ -webkit-box-ordinal-group: NaN;
+ -ms-flex-order: initial;
+ order: initial;
+}
+
+@media only screen and (min-width: 576px) {
+ .col-sm {
+ -webkit-box-flex: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ -ms-flex-preferred-size: 0;
+ flex-basis: 0;
+ max-width: 100%;
+ }
+
+ .col-sm-1 {
+ -ms-flex-preferred-size: 8.33333333%;
+ flex-basis: 8.33333333%;
+ max-width: 8.33333333%;
+ }
+
+ .col-sm-2 {
+ -ms-flex-preferred-size: 16.66666667%;
+ flex-basis: 16.66666667%;
+ max-width: 16.66666667%;
+ }
+
+ .col-sm-3 {
+ -ms-flex-preferred-size: 25%;
+ flex-basis: 25%;
+ max-width: 25%;
+ }
+
+ .col-sm-4 {
+ -ms-flex-preferred-size: 33.33333333%;
+ flex-basis: 33.33333333%;
+ max-width: 33.33333333%;
+ }
+
+ .col-sm-5 {
+ -ms-flex-preferred-size: 41.66666667%;
+ flex-basis: 41.66666667%;
+ max-width: 41.66666667%;
+ }
+
+ .col-sm-6 {
+ -ms-flex-preferred-size: 50%;
+ flex-basis: 50%;
+ max-width: 50%;
+ }
+
+ .col-sm-7 {
+ -ms-flex-preferred-size: 58.33333333%;
+ flex-basis: 58.33333333%;
+ max-width: 58.33333333%;
+ }
+
+ .col-sm-8 {
+ -ms-flex-preferred-size: 66.66666667%;
+ flex-basis: 66.66666667%;
+ max-width: 66.66666667%;
+ }
+
+ .col-sm-9 {
+ -ms-flex-preferred-size: 75%;
+ flex-basis: 75%;
+ max-width: 75%;
+ }
+
+ .col-sm-10 {
+ -ms-flex-preferred-size: 83.33333333%;
+ flex-basis: 83.33333333%;
+ max-width: 83.33333333%;
+ }
+
+ .col-sm-11 {
+ -ms-flex-preferred-size: 91.66666667%;
+ flex-basis: 91.66666667%;
+ max-width: 91.66666667%;
+ }
+
+ .col-sm-12 {
+ -ms-flex-preferred-size: 100%;
+ flex-basis: 100%;
+ max-width: 100%;
+ }
+
+ .col-sm-offset-0 {
+ margin-left: 0;
+ }
+
+ .col-sm-offset-1 {
+ margin-left: 8.33333333%;
+ }
+
+ .col-sm-offset-2 {
+ margin-left: 16.66666667%;
+ }
+
+ .col-sm-offset-3 {
+ margin-left: 25%;
+ }
+
+ .col-sm-offset-4 {
+ margin-left: 33.33333333%;
+ }
+
+ .col-sm-offset-5 {
+ margin-left: 41.66666667%;
+ }
+
+ .col-sm-offset-6 {
+ margin-left: 50%;
+ }
+
+ .col-sm-offset-7 {
+ margin-left: 58.33333333%;
+ }
+
+ .col-sm-offset-8 {
+ margin-left: 66.66666667%;
+ }
+
+ .col-sm-offset-9 {
+ margin-left: 75%;
+ }
+
+ .col-sm-offset-10 {
+ margin-left: 83.33333333%;
+ }
+
+ .col-sm-offset-11 {
+ margin-left: 91.66666667%;
+ }
+
+ .start-sm {
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ text-align: start;
+ }
+
+ .center-sm {
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ text-align: center;
+ }
+
+ .end-sm {
+ -webkit-box-pack: end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+ text-align: end;
+ }
+
+ .top-sm {
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ }
+
+ .middle-sm {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ }
+
+ .bottom-sm {
+ -webkit-box-align: end;
+ -ms-flex-align: end;
+ align-items: flex-end;
+ }
+
+ .around-sm {
+ -ms-flex-pack: distribute;
+ justify-content: space-around;
+ }
+
+ .between-sm {
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ }
+
+ .first-sm {
+ -webkit-box-ordinal-group: 0;
+ -ms-flex-order: -1;
+ order: -1;
+ }
+
+ .last-sm {
+ -webkit-box-ordinal-group: 2;
+ -ms-flex-order: 1;
+ order: 1;
+ }
+
+ .initial-order-sm {
+ -webkit-box-ordinal-group: NaN;
+ -ms-flex-order: initial;
+ order: initial;
+ }
+}
+
+@media only screen and (min-width: 768px) {
+ .col-md,
+ .col-md-1,
+ .col-md-2,
+ .col-md-3,
+ .col-md-4,
+ .col-md-5,
+ .col-md-6,
+ .col-md-7,
+ .col-md-8,
+ .col-md-9,
+ .col-md-10,
+ .col-md-11,
+ .col-md-12,
+ .col-md-offset-0,
+ .col-md-offset-1,
+ .col-md-offset-2,
+ .col-md-offset-3,
+ .col-md-offset-4,
+ .col-md-offset-5,
+ .col-md-offset-6,
+ .col-md-offset-7,
+ .col-md-offset-8,
+ .col-md-offset-9,
+ .col-md-offset-10,
+ .col-md-offset-11,
+ .col-md-offset-12 {
+ box-sizing: border-box;
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ padding-right: 8px;
+ padding-left: 8px;
+ }
+
+ .col-md {
+ -webkit-box-flex: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ -ms-flex-preferred-size: 0;
+ flex-basis: 0;
+ max-width: 100%;
+ }
+
+ .col-md-1 {
+ -ms-flex-preferred-size: 8.33333333%;
+ flex-basis: 8.33333333%;
+ max-width: 8.33333333%;
+ }
+
+ .col-md-2 {
+ -ms-flex-preferred-size: 16.66666667%;
+ flex-basis: 16.66666667%;
+ max-width: 16.66666667%;
+ }
+
+ .col-md-3 {
+ -ms-flex-preferred-size: 25%;
+ flex-basis: 25%;
+ max-width: 25%;
+ }
+
+ .col-md-4 {
+ -ms-flex-preferred-size: 33.33333333%;
+ flex-basis: 33.33333333%;
+ max-width: 33.33333333%;
+ }
+
+ .col-md-5 {
+ -ms-flex-preferred-size: 41.66666667%;
+ flex-basis: 41.66666667%;
+ max-width: 41.66666667%;
+ }
+
+ .col-md-6 {
+ -ms-flex-preferred-size: 50%;
+ flex-basis: 50%;
+ max-width: 50%;
+ }
+
+ .col-md-7 {
+ -ms-flex-preferred-size: 58.33333333%;
+ flex-basis: 58.33333333%;
+ max-width: 58.33333333%;
+ }
+
+ .col-md-8 {
+ -ms-flex-preferred-size: 66.66666667%;
+ flex-basis: 66.66666667%;
+ max-width: 66.66666667%;
+ }
+
+ .col-md-9 {
+ -ms-flex-preferred-size: 75%;
+ flex-basis: 75%;
+ max-width: 75%;
+ }
+
+ .col-md-10 {
+ -ms-flex-preferred-size: 83.33333333%;
+ flex-basis: 83.33333333%;
+ max-width: 83.33333333%;
+ }
+
+ .col-md-11 {
+ -ms-flex-preferred-size: 91.66666667%;
+ flex-basis: 91.66666667%;
+ max-width: 91.66666667%;
+ }
+
+ .col-md-12 {
+ -ms-flex-preferred-size: 100%;
+ flex-basis: 100%;
+ max-width: 100%;
+ }
+
+ .col-md-offset-0 {
+ margin-left: 0;
+ }
+
+ .col-md-offset-1 {
+ margin-left: 8.33333333%;
+ }
+
+ .col-md-offset-2 {
+ margin-left: 16.66666667%;
+ }
+
+ .col-md-offset-3 {
+ margin-left: 25%;
+ }
+
+ .col-md-offset-4 {
+ margin-left: 33.33333333%;
+ }
+
+ .col-md-offset-5 {
+ margin-left: 41.66666667%;
+ }
+
+ .col-md-offset-6 {
+ margin-left: 50%;
+ }
+
+ .col-md-offset-7 {
+ margin-left: 58.33333333%;
+ }
+
+ .col-md-offset-8 {
+ margin-left: 66.66666667%;
+ }
+
+ .col-md-offset-9 {
+ margin-left: 75%;
+ }
+
+ .col-md-offset-10 {
+ margin-left: 83.33333333%;
+ }
+
+ .col-md-offset-11 {
+ margin-left: 91.66666667%;
+ }
+
+ .start-md {
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ text-align: start;
+ }
+
+ .center-md {
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ text-align: center;
+ }
+
+ .end-md {
+ -webkit-box-pack: end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+ text-align: end;
+ }
+
+ .top-md {
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ }
+
+ .middle-md {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ }
+
+ .bottom-md {
+ -webkit-box-align: end;
+ -ms-flex-align: end;
+ align-items: flex-end;
+ }
+
+ .around-md {
+ -ms-flex-pack: distribute;
+ justify-content: space-around;
+ }
+
+ .between-md {
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ }
+
+ .first-md {
+ -webkit-box-ordinal-group: 0;
+ -ms-flex-order: -1;
+ order: -1;
+ }
+
+ .last-md {
+ -webkit-box-ordinal-group: 2;
+ -ms-flex-order: 1;
+ order: 1;
+ }
+
+ .initial-order-md {
+ -webkit-box-ordinal-group: NaN;
+ -ms-flex-order: initial;
+ order: initial;
+ }
+}
+
+@media only screen and (min-width: 992px) {
+ .col-lg,
+ .col-lg-1,
+ .col-lg-2,
+ .col-lg-3,
+ .col-lg-4,
+ .col-lg-5,
+ .col-lg-6,
+ .col-lg-7,
+ .col-lg-8,
+ .col-lg-9,
+ .col-lg-10,
+ .col-lg-11,
+ .col-lg-12,
+ .col-lg-offset-0,
+ .col-lg-offset-1,
+ .col-lg-offset-2,
+ .col-lg-offset-3,
+ .col-lg-offset-4,
+ .col-lg-offset-5,
+ .col-lg-offset-6,
+ .col-lg-offset-7,
+ .col-lg-offset-8,
+ .col-lg-offset-9,
+ .col-lg-offset-10,
+ .col-lg-offset-11,
+ .col-lg-offset-12 {
+ box-sizing: border-box;
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ padding-right: 8px;
+ padding-left: 8px;
+ }
+
+ .col-lg {
+ -webkit-box-flex: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ -ms-flex-preferred-size: 0;
+ flex-basis: 0;
+ max-width: 100%;
+ }
+
+ .col-lg-1 {
+ -ms-flex-preferred-size: 8.33333333%;
+ flex-basis: 8.33333333%;
+ max-width: 8.33333333%;
+ }
+
+ .col-lg-2 {
+ -ms-flex-preferred-size: 16.66666667%;
+ flex-basis: 16.66666667%;
+ max-width: 16.66666667%;
+ }
+
+ .col-lg-3 {
+ -ms-flex-preferred-size: 25%;
+ flex-basis: 25%;
+ max-width: 25%;
+ }
+
+ .col-lg-4 {
+ -ms-flex-preferred-size: 33.33333333%;
+ flex-basis: 33.33333333%;
+ max-width: 33.33333333%;
+ }
+
+ .col-lg-5 {
+ -ms-flex-preferred-size: 41.66666667%;
+ flex-basis: 41.66666667%;
+ max-width: 41.66666667%;
+ }
+
+ .col-lg-6 {
+ -ms-flex-preferred-size: 50%;
+ flex-basis: 50%;
+ max-width: 50%;
+ }
+
+ .col-lg-7 {
+ -ms-flex-preferred-size: 58.33333333%;
+ flex-basis: 58.33333333%;
+ max-width: 58.33333333%;
+ }
+
+ .col-lg-8 {
+ -ms-flex-preferred-size: 66.66666667%;
+ flex-basis: 66.66666667%;
+ max-width: 66.66666667%;
+ }
+
+ .col-lg-9 {
+ -ms-flex-preferred-size: 75%;
+ flex-basis: 75%;
+ max-width: 75%;
+ }
+
+ .col-lg-10 {
+ -ms-flex-preferred-size: 83.33333333%;
+ flex-basis: 83.33333333%;
+ max-width: 83.33333333%;
+ }
+
+ .col-lg-11 {
+ -ms-flex-preferred-size: 91.66666667%;
+ flex-basis: 91.66666667%;
+ max-width: 91.66666667%;
+ }
+
+ .col-lg-12 {
+ -ms-flex-preferred-size: 100%;
+ flex-basis: 100%;
+ max-width: 100%;
+ }
+
+ .col-lg-offset-0 {
+ margin-left: 0;
+ }
+
+ .col-lg-offset-1 {
+ margin-left: 8.33333333%;
+ }
+
+ .col-lg-offset-2 {
+ margin-left: 16.66666667%;
+ }
+
+ .col-lg-offset-3 {
+ margin-left: 25%;
+ }
+
+ .col-lg-offset-4 {
+ margin-left: 33.33333333%;
+ }
+
+ .col-lg-offset-5 {
+ margin-left: 41.66666667%;
+ }
+
+ .col-lg-offset-6 {
+ margin-left: 50%;
+ }
+
+ .col-lg-offset-7 {
+ margin-left: 58.33333333%;
+ }
+
+ .col-lg-offset-8 {
+ margin-left: 66.66666667%;
+ }
+
+ .col-lg-offset-9 {
+ margin-left: 75%;
+ }
+
+ .col-lg-offset-10 {
+ margin-left: 83.33333333%;
+ }
+
+ .col-lg-offset-11 {
+ margin-left: 91.66666667%;
+ }
+
+ .start-lg {
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ text-align: start;
+ }
+
+ .center-lg {
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ text-align: center;
+ }
+
+ .end-lg {
+ -webkit-box-pack: end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+ text-align: end;
+ }
+
+ .top-lg {
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ }
+
+ .middle-lg {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ }
+
+ .bottom-lg {
+ -webkit-box-align: end;
+ -ms-flex-align: end;
+ align-items: flex-end;
+ }
+
+ .around-lg {
+ -ms-flex-pack: distribute;
+ justify-content: space-around;
+ }
+
+ .between-lg {
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ }
+
+ .first-lg {
+ -webkit-box-ordinal-group: 0;
+ -ms-flex-order: -1;
+ order: -1;
+ }
+
+ .last-lg {
+ -webkit-box-ordinal-group: 2;
+ -ms-flex-order: 1;
+ order: 1;
+ }
+
+ .initial-order-lg {
+ -webkit-box-ordinal-group: NaN;
+ -ms-flex-order: initial;
+ order: initial;
+ }
+}
+
+@media only screen and (min-width: 1200px) {
+ .col-xl,
+ .col-xl-1,
+ .col-xl-2,
+ .col-xl-3,
+ .col-xl-4,
+ .col-xl-5,
+ .col-xl-6,
+ .col-xl-7,
+ .col-xl-8,
+ .col-xl-9,
+ .col-xl-10,
+ .col-xl-11,
+ .col-xl-12,
+ .col-xl-offset-0,
+ .col-xl-offset-1,
+ .col-xl-offset-2,
+ .col-xl-offset-3,
+ .col-xl-offset-4,
+ .col-xl-offset-5,
+ .col-xl-offset-6,
+ .col-xl-offset-7,
+ .col-xl-offset-8,
+ .col-xl-offset-9,
+ .col-xl-offset-10,
+ .col-xl-offset-11,
+ .col-xl-offset-12 {
+ box-sizing: border-box;
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 auto;
+ flex: 0 0 auto;
+ padding-right: 8px;
+ padding-left: 8px;
+ }
+
+ .col-xl {
+ -webkit-box-flex: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ -ms-flex-preferred-size: 0;
+ flex-basis: 0;
+ max-width: 100%;
+ }
+
+ .col-xl-1 {
+ -ms-flex-preferred-size: 8.33333333%;
+ flex-basis: 8.33333333%;
+ max-width: 8.33333333%;
+ }
+
+ .col-xl-2 {
+ -ms-flex-preferred-size: 16.66666667%;
+ flex-basis: 16.66666667%;
+ max-width: 16.66666667%;
+ }
+
+ .col-xl-3 {
+ -ms-flex-preferred-size: 25%;
+ flex-basis: 25%;
+ max-width: 25%;
+ }
+
+ .col-xl-4 {
+ -ms-flex-preferred-size: 33.33333333%;
+ flex-basis: 33.33333333%;
+ max-width: 33.33333333%;
+ }
+
+ .col-xl-5 {
+ -ms-flex-preferred-size: 41.66666667%;
+ flex-basis: 41.66666667%;
+ max-width: 41.66666667%;
+ }
+
+ .col-xl-6 {
+ -ms-flex-preferred-size: 50%;
+ flex-basis: 50%;
+ max-width: 50%;
+ }
+
+ .col-xl-7 {
+ -ms-flex-preferred-size: 58.33333333%;
+ flex-basis: 58.33333333%;
+ max-width: 58.33333333%;
+ }
+
+ .col-xl-8 {
+ -ms-flex-preferred-size: 66.66666667%;
+ flex-basis: 66.66666667%;
+ max-width: 66.66666667%;
+ }
+
+ .col-xl-9 {
+ -ms-flex-preferred-size: 75%;
+ flex-basis: 75%;
+ max-width: 75%;
+ }
+
+ .col-xl-10 {
+ -ms-flex-preferred-size: 83.33333333%;
+ flex-basis: 83.33333333%;
+ max-width: 83.33333333%;
+ }
+
+ .col-xl-11 {
+ -ms-flex-preferred-size: 91.66666667%;
+ flex-basis: 91.66666667%;
+ max-width: 91.66666667%;
+ }
+
+ .col-xl-12 {
+ -ms-flex-preferred-size: 100%;
+ flex-basis: 100%;
+ max-width: 100%;
+ }
+
+ .col-xl-offset-0 {
+ margin-left: 0;
+ }
+
+ .col-xl-offset-1 {
+ margin-left: 8.33333333%;
+ }
+
+ .col-xl-offset-2 {
+ margin-left: 16.66666667%;
+ }
+
+ .col-xl-offset-3 {
+ margin-left: 25%;
+ }
+
+ .col-xl-offset-4 {
+ margin-left: 33.33333333%;
+ }
+
+ .col-xl-offset-5 {
+ margin-left: 41.66666667%;
+ }
+
+ .col-xl-offset-6 {
+ margin-left: 50%;
+ }
+
+ .col-xl-offset-7 {
+ margin-left: 58.33333333%;
+ }
+
+ .col-xl-offset-8 {
+ margin-left: 66.66666667%;
+ }
+
+ .col-xl-offset-9 {
+ margin-left: 75%;
+ }
+
+ .col-xl-offset-10 {
+ margin-left: 83.33333333%;
+ }
+
+ .col-xl-offset-11 {
+ margin-left: 91.66666667%;
+ }
+
+ .start-xl {
+ -webkit-box-pack: start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ text-align: start;
+ }
+
+ .center-xl {
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ text-align: center;
+ }
+
+ .end-xl {
+ -webkit-box-pack: end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+ text-align: end;
+ }
+
+ .top-xl {
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ }
+
+ .middle-xl {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ }
+
+ .bottom-xl {
+ -webkit-box-align: end;
+ -ms-flex-align: end;
+ align-items: flex-end;
+ }
+
+ .around-xl {
+ -ms-flex-pack: distribute;
+ justify-content: space-around;
+ }
+
+ .between-xl {
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ }
+
+ .first-xl {
+ -webkit-box-ordinal-group: 0;
+ -ms-flex-order: -1;
+ order: -1;
+ }
+
+ .last-xl {
+ -webkit-box-ordinal-group: 2;
+ -ms-flex-order: 1;
+ order: 1;
+ }
+
+ .initial-order-xl {
+ -webkit-box-ordinal-group: NaN;
+ -ms-flex-order: initial;
+ order: initial;
+ }
+}
+
+@media only screen and (max-width: 575px) {
+ .hidden-xs {
+ display: none;
+ }
+}
+
+@media only screen and (min-width: 576px) and (max-width: 767px) {
+ .hidden-sm {
+ display: none;
+ }
+}
+
+@media only screen and (min-width: 768px) and (max-width: 991px) {
+ .hidden-md {
+ display: none;
+ }
+}
+
+@media only screen and (min-width: 992px) and (max-width: 1199px) {
+ .hidden-lg {
+ display: none;
+ }
+}
+
+@media only screen and (min-width: 1200px) {
+ .hidden-xl {
+ display: none;
+ }
+}
\ No newline at end of file
diff --git a/src/themes/default-amp/index.js b/src/themes/default-amp/index.js
new file mode 100755
index 0000000000..b6a88a0450
--- /dev/null
+++ b/src/themes/default-amp/index.js
@@ -0,0 +1,12 @@
+import { setupMultistoreRoutes } from '@vue-storefront/store/lib/multistore'
+import config from 'config'
+import routes from './router'
+
+export default function (app, router, store) {
+ // if youre' runing multistore setup this is copying the routed above adding the 'storeCode' prefix to the urls and the names of the routes
+ // You can do it on your own and then be able to customize the components used for example for German storeView checkout
+ // To do so please execlude the desired storeView from the config.storeViews.mapStoreUrlsFor and map the urls by Your own like:
+ // { name: 'de-checkout', path: '/checkout', component: CheckoutCustomized },
+ setupMultistoreRoutes(config, router, routes)
+ router.addRoutes(routes)
+}
diff --git a/src/themes/default-amp/package.json b/src/themes/default-amp/package.json
new file mode 100755
index 0000000000..0ac135e7aa
--- /dev/null
+++ b/src/themes/default-amp/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "@vue-storefront/theme-default-amp",
+ "version": "1.3.0",
+ "description": "Default AMP theme for Vue Storefront",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "dev": "cd ../../../ && node core/scripts/server"
+ },
+ "author": "pkarw and contributors",
+ "license": "MIT",
+ "dependencies": {
+ "bodybuilder": "2.2.13",
+ "vue": "^2.5.17",
+ "vue-carousel": "^0.6.9",
+ "vue-no-ssr": "^0.2.2",
+ "vue-progressbar": "^0.7.5",
+ "vuelidate": "^0.6.2",
+ "vuex": "^3.0.1"
+ },
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/src/themes/default-amp/pages/Category.vue b/src/themes/default-amp/pages/Category.vue
old mode 100644
new mode 100755
index 3451b6e547..bbcb607598
--- a/src/themes/default-amp/pages/Category.vue
+++ b/src/themes/default-amp/pages/Category.vue
@@ -11,12 +11,12 @@
{{ productsCounter }} items
-
+
{{ $t('No products found!') }}
{{ $t('Please change Your search criteria and try again. If still not finding anything relevant, please visit the Home page and try out some of our bestsellers!') }}
-
+
@@ -25,10 +25,12 @@
- {{{ renderStyles() }}}
+ {{{ renderStyles() }}}
+ {{{ output.appendHead() }}}
diff --git a/src/themes/default/index.minimal.template.html b/src/themes/default/index.minimal.template.html
index 3508f20ede..14f95dd79b 100755
--- a/src/themes/default/index.minimal.template.html
+++ b/src/themes/default/index.minimal.template.html
@@ -4,6 +4,7 @@
{{{ meta.inject().title.text() }}}
{{{ meta.inject().meta.text() }}}
{{{ meta.inject().link.text() }}}
+ {{{ output.appendHead() }}}
diff --git a/src/themes/default/index.template.html b/src/themes/default/index.template.html
index 668d86c85d..781b74ca1a 100755
--- a/src/themes/default/index.template.html
+++ b/src/themes/default/index.template.html
@@ -21,7 +21,8 @@
})();
{{{ renderResourceHints() }}}
- {{{ renderStyles() }}}
+ {{{ renderStyles() }}}
+ {{{ output.appendHead() }}}