[
  {
    "path": ".babelrc",
    "content": "{\r\n  \"presets\": [\r\n    [\"@babel/preset-env\", { \"modules\": false }]\r\n  ],\r\n  \"env\": {\r\n    \"test\": {\r\n      \"presets\": [\r\n        [\"@babel/preset-env\", { \"targets\": { \"node\": \"current\" }}]\r\n      ]\r\n    }\r\n  }\r\n}"
  },
  {
    "path": ".eslintrc.json",
    "content": "{\n    \"extends\": [\n        \"standard\",\n        \"plugin:vue/recommended\"\n    ],\n\n    \"rules\": {\n        \"semi\": \"off\",\n        \"no-new\": \"off\",\n        \"vue/valid-template-root\": \"off\"\n    }\n}"
  },
  {
    "path": ".gitignore",
    "content": "# Logs\r\nlogs\r\n*.log\r\nnpm-debug.log*\r\nyarn-debug.log*\r\nyarn-error.log*\r\n\r\n# Dependency directories\r\nnode_modules/\r\njspm_packages/\r\n\r\n# Optional npm cache directory\r\n.npm\r\n\r\n# Optional eslint cache\r\n.eslintcache\r\n\r\n# Yarn Integrity file\r\n.yarn-integrity\r\n\r\n# dotenv environment variables file\r\n.env\r\n\r\n# visual studio code\r\n.vscode\r\n\r\n# macOS custom Icon\r\nIcon/\r\n\r\n# vuepress output\r\ndocs/.vuepress/dist\r\n\r\n# dist folders\r\ndist"
  },
  {
    "path": ".npmignore",
    "content": "/docs\r\n/dev\r\n/src\r\n/static\r\n/scripts\r\n.*\r\nyarn.lock"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 Baianat\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Vuse\n\n<p align=\"center\">\n  <a href=\"https://github.com/baianat/vuse\" target=\"_blank\">\n    <img width=\"450\" src=\"https://github.com/baianat/vuse/blob/master/Logo/Vuse_Logo_Horizontal_Gradient.png\">\n  </a>\n</p>\n\n> Logo by [chimzycash](https://github.com/chimzycash)\n\n**WIP: Vuse active development is now halted.**\n\nAdvanced page/email builder based on [Vue.js](https://vuejs.org/).\n\n[documentation](https://baianat.github.io/vuse/)\n\n## Credits\n\n- Logo by [chimzycash](https://github.com/chimzycash).\n\n## License\n\nMIT\n"
  },
  {
    "path": "demo/App.vue",
    "content": "<template>\n  <VuseBuilder @saved=\"onSave\" />\n</template>\n\n<script>\nexport default {\n  name: 'App',\n  methods: {\n    onSave (vuse) {\n      vuse.export('preview');\n      vuse.export('pwa');\n    }\n  }\n}\n</script>\n"
  },
  {
    "path": "demo/Uploader.vue",
    "content": "<template lang=\"pug\">\n  div.uploader\n    img(:src=\"src\")\n    input.uploader-input(\n      type=\"file\"\n      ref=\"uploader\"\n      @change=\"updateImage\"\n      v-if=\"$builder.isEditing && mode === 'input'\"\n    )\n</template>\n\n<script>\nexport default {\n  name: 'Uploader',\n  inject: ['$builder', '$section'],\n  props: {\n    path: {\n      type: String,\n      required: true\n    },\n    mode: {\n      default: 'input',\n      type: String\n    }\n  },\n  data: () => ({\n    src: ''\n  }),\n  created () {\n    this.src = this.$section.get(this.path);\n  },\n  methods: {\n    updateImage () {\n      const file = this.$refs.uploader.files[0];\n      if (!file) return;\n      const imageURL = URL.createObjectURL(file);\n\n      this.src = imageURL;\n      this.$section.set(this.path, imageURL);\n    }\n  }\n}\n</script>\n\n<style lang=\"stylus\">\n@import '../src/stylus/_app.styl'\n\n.uploader\n  position: relative\n  cursor: pointer\n  outline: none\n  &-input\n    position: absolute\n    top: 0\n    right: 0\n    bottom: 0\n    left: 0\n    width: 100%\n    opacity: 0\n    z-index: 100\n    cursor: pointer\n  >img\n    width: 100%\n    display: block\n  &:hover\n    box-shadow: 0 0 0 2px $gray\n</style>\n"
  },
  {
    "path": "demo/app.js",
    "content": "// Vuse scripts\r\nimport Vue from 'vue';\r\nimport pwa from '../src/plugins/pwa';\r\nimport Vuse from '../src';\r\n\r\n// demo scripts\r\nimport './style/_demo.styl';\r\nimport App from './App.vue';\r\nimport Uploader from './Uploader'\r\nimport hero1 from './sections/hero/hero1';\r\nimport hero2 from './sections/hero/hero2';\r\nimport section1 from './sections/section/section1';\r\nimport section2 from './sections/section/section2';\r\nimport social1 from './sections/social/social1';\r\nimport social2 from './sections/social/social2';\r\nimport social3 from './sections/social/social3';\r\nimport social4 from './sections/social/social4';\r\nimport newsletter from './sections/forms/newsletter';\r\n\r\n// add the uploader to the list of sub-components.\r\nVuse.mix({\r\n  components: {\r\n    Uploader\r\n  }\r\n});\r\n\r\n// register components.\r\nVuse.component(hero1);\r\nVuse.component(hero2);\r\nVuse.component(section1);\r\nVuse.component(section2);\r\nVuse.component(social1);\r\nVuse.component(social2);\r\nVuse.component(social3);\r\nVuse.component(social4);\r\nVuse.component(newsletter);\r\n\r\n// install pwa plugin.\r\nVuse.use(pwa);\r\n\r\n// install the builder\r\nVue.use(Vuse, {\r\n  // main css file\r\n  assets: {\r\n    css: 'css/style.css'\r\n  },\r\n  // builder default themes\r\n  themes: [{\r\n    name: 'Theme 1',\r\n    sections: [hero1, section1, social1, social3, newsletter]\r\n  }, {\r\n    name: 'Theme 2',\r\n    sections: [hero2, section2, social3, social4, newsletter]\r\n  }]\r\n});\r\n\r\nnew Vue({\r\n  el: '#app',\r\n  render: h => h(App)\r\n});\r\n"
  },
  {
    "path": "demo/index.html",
    "content": "<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\"/>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\"/>\n    <title>Vuse</title>\n  </head>\n  <body>\n    <div id=\"app\">\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "demo/render.html",
    "content": "<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"UTF-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" />\r\n    <title>Vuse</title>\r\n  </head>\r\n\r\n  <body>\r\n    <div id=\"app\">\r\n      <VuseRenderer :data=\"{ title: 'My title', sections: [{ name: 'social2', data: { classes: ['is-dark'], content: 'This is my content yo!', images: ['static/img/avatar.png'] } },{ name: 'social2', data: { classes: ['is-red'], content: 'This is my content yo boi!', images: ['static/img/avatar.png'] } }] }\"></VuseRenderer>\r\n    </div>\r\n  </body>\r\n</html>"
  },
  {
    "path": "demo/sections/forms/newsletter.vue",
    "content": "<template lang=\"pug\">\n  section.header(\n    v-styler:section=\"$sectionData.classes\"\n    :class=\"$sectionData.classes\"\n  )\n    .container\n      .grid.is-center\n        .row\n          h3.header-title Sign up for our newsletter\n\n        form.row(@submit.prevent=\"onSubmit\")\n          .column.is-desktop-4\n            .input-group.has-itemAfter\n              input.input(type=\"text\" name=\"email\" placeholder=\"Email address\" v-model=\"$sectionData.form.email\")\n              a.button(\n                @click.prevent=\"onSubmit\"\n                :class=\"$sectionData.action.classes\"\n                :href=\"$sectionData.action.href\"\n                v-html=\"$sectionData.action.text\"\n                v-styler=\"$sectionData.action\"\n                )\n</template>\n\n<script>\nimport * as types from '../../../src/types';\n\nexport default {\n  name: 'Newsletter',\n  cover: 'img/covers/newsletter.png',\n  group: 'forms',\n  $schema: {\n    classes: types.ClassList,\n    action: types.Button,\n    form: {\n      email: ''\n    }\n  },\n  props: {\n    id: {\n      type: Number,\n      required: true\n    }\n  },\n  methods: {\n    onSubmit () {\n      if (this.$builder.isEditing) return;\n\n      const endpoint = this.$sectionData.action.href;\n      console.log(`Pinging ${endpoint} with ${this.$sectionData.form.email}`);\n      // SEND DATA TO ENDPOINT\n    }\n  }\n};\n</script>\n"
  },
  {
    "path": "demo/sections/hero/hero1.vue",
    "content": "<template lang=\"pug\">\n  section.header(\n    v-styler=\"$sectionData.classes\"\n    :class=\"$sectionData.classes\"\n    )\n    .container\n      .grid\n        .column.is-desktop-6.add-center-vertical\n          h3.header-title(\n            v-html=\"$sectionData.title\"\n            v-styler=\"$sectionData.title\"\n          )\n          p.header-content(\n            v-html=\"$sectionData.content\"\n            v-styler=\"$sectionData.content\"\n          )\n          a.button(\n            :class=\"$sectionData.button.classes\"\n            :href=\"$sectionData.button.href\"\n            v-html=\"$sectionData.button.text\"\n            v-styler=\"$sectionData.button\"\n          )\n        .column.is-desktop-6\n          uploader(\n            class=\"header-image\"\n            path=\"$sectionData.images[0]\"\n          )\n</template>\n\n<script>\nimport * as types from '../../../src/types';\n\nexport default {\n  name: 'Hero1',\n  cover: 'img/covers/hero1.png',\n  group: 'hero',\n  $schema: {\n    title: types.Title,\n    content: types.Text,\n    images: [types.Image],\n    button: types.Button,\n    classes: types.ClassList\n  },\n  props: {\n    id: {\n      type: Number,\n      required: true\n    }\n  }\n};\n</script>\n"
  },
  {
    "path": "demo/sections/hero/hero2.vue",
    "content": "<template lang=\"pug\">\n  section.header(\n    v-styler=\"$sectionData.classes\"\n    :class=\"$sectionData.classes\"\n    )\n    .container\n      .grid\n        .column.is-desktop-6.is-offset-screen-3.add-center-horizontal.add-padding.add-text-center\n          h3.header-title(\n            v-html=\"$sectionData.title\"\n            v-styler=\"$sectionData.title\"\n            )\n          p.header-content(\n            v-html=\"$sectionData.content\"\n            v-styler=\"$sectionData.content\"\n            )\n          a.button(\n            :class=\"$sectionData.button.classes\"\n            :href=\"$sectionData.button.href\"\n            v-html=\"$sectionData.button.text\"\n            v-styler=\"$sectionData.button\"\n            )\n        .column.is-desktop-8.is-offset-screen-2\n          uploader(\n            class=\"header-image\"\n            path=\"$sectionData.images[0]\"\n          )\n</template>\n\n<script>\nimport * as types from '../../../src/types';\n\nexport default {\n  name: 'Hero2',\n  cover: 'img/covers/hero2.png',\n  group: 'hero',\n  $schema: {\n    title: types.Title,\n    content: types.Text,\n    images: [types.Image],\n    button: types.Button,\n    classes: types.ClassList\n  },\n  props: {\n    id: {\n      type: Number,\n      required: true\n    }\n  }\n};\n</script>\n"
  },
  {
    "path": "demo/sections/section/section1.vue",
    "content": "<template lang=\"pug\">\n  section.section(\n    v-styler=\"$sectionData.classes\"\n    :class=\"$sectionData.classes\"\n  )\n    .container\n      .grid.is-center\n        .column(\n          :class=\"gridClasses[0]\"\n          v-styler:grid=\"$sectionData.columns[0].grid\"\n        )\n          h2.section-title(\n            v-html=\"$sectionData.columns[0].title\"\n            v-styler=\"$sectionData.columns[0].title\"\n          )\n          p.section-paragraph(\n            v-html=\"$sectionData.columns[0].content\"\n            v-styler=\"$sectionData.columns[0].content\"\n          )\n        .column.is-offset-screen-1(\n          :class=\"gridClasses[1]\"\n          v-styler:grid=\"$sectionData.columns[1].grid\"\n        )\n          h2.section-title(\n            v-html=\"$sectionData.columns[1].title\"\n            v-styler=\"$sectionData.columns[1].title\"\n          )\n          p.section-paragraph(\n            v-html=\"$sectionData.columns[1].content\"\n            v-styler=\"$sectionData.columns[1].content\"\n          )\n</template>\n\n<script>\nimport * as types from '../../../src/types';\n\nexport default {\n  name: 'Section1',\n  cover: 'img/covers/section1.png',\n  group: 'section',\n  $schema: {\n    classes: types.ClassList,\n    columns: [\n      {\n        title: types.Title,\n        content: types.Text,\n        grid: {\n          mobile: 0,\n          desktop: 5\n        }\n      },\n      {\n        title: types.Title,\n        content: types.Text,\n        grid: {\n          mobile: 0,\n          desktop: 5\n        }\n      }\n    ]\n  },\n  props: {\n    id: {\n      type: Number, required: true\n    }\n  }\n};\n</script>\n"
  },
  {
    "path": "demo/sections/section/section2.vue",
    "content": "<template lang=\"pug\">\n  section.section(\n    v-styler:section=\"$sectionData.classes\"\n    :class=\"$sectionData.classes\"\n  )\n    .container\n      .grid.is-center\n        .column(\n          :class=\"gridClasses[0]\"\n          v-styler=\"$sectionData.columns[0].grid\"\n        )\n          h2.section-title(\n            v-html=\"$sectionData.columns[0].title\"\n            v-styler=\"$sectionData.columns[0].title\"\n          )\n          p.section-paragraph(\n            v-html=\"$sectionData.columns[0].content\"\n            v-styler=\"$sectionData.columns[0].content\"\n          )\n        .column(\n          :class=\"gridClasses[1]\"\n          v-styler=\"$sectionData.columns[1].grid\"\n        )\n          h2.section-title(\n            v-html=\"$sectionData.columns[1].title\"\n            v-styler=\"$sectionData.columns[1].title\"\n          )\n          p.section-paragraph(\n            v-html=\"$sectionData.columns[1].content\"\n            v-styler=\"$sectionData.columns[1].content\"\n          )\n        .column(\n          :class=\"gridClasses[2]\"\n          v-styler=\"$sectionData.columns[2].grid\"\n        )\n          h2.section-title(\n            v-html=\"$sectionData.columns[2].title\"\n            v-styler=\"$sectionData.columns[2].title\"\n          )\n          p.section-paragraph(\n            v-html=\"$sectionData.columns[2].content\"\n            v-styler=\"$sectionData.columns[2].content\"\n          )\n</template>\n\n<script>\nimport * as types from '../../../src/types';\n\nexport default {\n  name: 'Section2',\n  cover: 'img/covers/section2.png',\n  group: 'section',\n  $schema: {\n    classes: types.ClassList,\n    columns: [\n      {\n        title: types.Title,\n        content: types.Text,\n        grid: types.Grid\n      }, {\n        title: types.Title,\n        content: types.Text,\n        grid: types.Grid\n      }, {\n        title: types.Title,\n        content: types.Text,\n        grid: types.Grid\n      }\n    ]\n  },\n  props: {\n    id: {\n      type: Number, required: true\n    }\n  }\n};\n</script>\n"
  },
  {
    "path": "demo/sections/social/social1.vue",
    "content": "<template lang=\"pug\">\n  section.social(\n    v-styler:section=\"$sectionData.classes\"\n    :class=\"$sectionData.classes\"\n  )\n    .container\n      .grid.is-center\n        .column.is-desktop-2.social-item\n          h6.social-number(\n            v-html=\"$sectionData.columns[0].content\"\n            v-styler=\"$sectionData.columns[0].content\"\n          )\n          b.social-keyword(\n            v-html=\"$sectionData.columns[0].title\"\n            v-styler=\"$sectionData.columns[0].title\"\n          )\n        .column.is-desktop-2.social-item\n          h6.social-number(\n            v-html=\"$sectionData.columns[1].content\"\n            v-styler=\"$sectionData.columns[1].content\"\n          )\n          b.social-keyword(\n            v-html=\"$sectionData.columns[1].title\"\n            v-styler=\"$sectionData.columns[1].title\"\n          )\n        .column.is-desktop-2.social-item\n          h6.social-number(\n            v-html=\"$sectionData.columns[2].content\"\n            v-styler=\"$sectionData.columns[2].content\"\n          )\n          b.social-keyword(\n            v-html=\"$sectionData.columns[2].title\"\n            v-styler=\"$sectionData.columns[2].title\"\n          )\n</template>\n\n<script>\nimport * as types from '../../../src/types';\n\nexport default {\n  name: 'Social1',\n  cover: 'img/covers/social1.png',\n  group: 'social',\n  $schema: {\n    classes: types.ClassList,\n    columns: [\n      {\n        title: types.Title,\n        content: Number\n      }, {\n        title: types.Title,\n        content: Number\n      }, {\n        title: types.Title,\n        content: Number\n      }\n    ]\n  },\n  props: {\n    id: {\n      type: Number, required: true\n    }\n  }\n};\n</script>\n"
  },
  {
    "path": "demo/sections/social/social2.vue",
    "content": "<template lang=\"pug\">\n  section.social(\n    v-styler:section=\"$sectionData.classes\"\n    :class=\"$sectionData.classes\"\n  )\n    .container\n      .grid\n        .row.is-center\n          .column.is-desktop-6\n            p.social-quote(\n              v-html=\"$sectionData.content\"\n              v-styler=\"$sectionData.content\"\n            )\n        .row.is-center\n          .column.is-desktop-2\n            .user.is-alt\n              uploader(\n                class=\"user-avatar\"\n                path=\"$sectionData.images[0]\"\n              )\n              .user-data\n                h4.user-name Ahmed\n                span.user-caption SEO at Baianat\n\n</template>\n\n<script>\nimport * as types from '../../../src/types';\n\nexport default {\n  name: 'Social2',\n  cover: 'img/covers/social2.png',\n  group: 'social',\n  $schema: {\n    classes: types.ClassList,\n    content: types.Text,\n    images: [types.Avatar]\n  },\n  props: {\n    id: {\n      type: Number,\n      required: true\n    }\n  }\n};\n</script>\n"
  },
  {
    "path": "demo/sections/social/social3.vue",
    "content": "<template lang=\"pug\">\n  section.social(\n    v-styler:section=\"$sectionData.classes\"\n    :class=\"$sectionData.classes\"\n  )\n    .container\n      .grid\n        .row.is-center\n          .column.is-12.is-desktop-7\n            h3.social-title(\n              v-html=\"$sectionData.title\"\n              v-styler=\"$sectionData.title\"\n            )\n          .column.is-12.is-desktop-7\n            p.social-content(\n              v-html=\"$sectionData.content\"\n              v-styler=\"$sectionData.content\"\n            )\n        .row.is-center\n          .column.is-desktop-2(v-for=\"(logo, index) in $sectionData.images\")\n            uploader(\n              class=\"social-logo\"\n              :path=\"`$sectionData.images[${index}]`\"\n            )\n</template>\n\n<script>\nimport * as types from '../../../src/types';\n\nexport default {\n  name: 'Social3',\n  cover: 'img/covers/social3.png',\n  group: 'social',\n  $schema: {\n    classes: types.ClassList,\n    title: types.Title,\n    content: types.Text,\n    images: [\n      types.Logo,\n      types.Logo,\n      types.Logo\n    ]\n  },\n  props: {\n    id: {\n      type: Number, required: true\n    }\n  }\n};\n</script>\n"
  },
  {
    "path": "demo/sections/social/social4.vue",
    "content": "<template lang=\"pug\">\n  section.social(\n    v-styler:section=\"$sectionData.classes\"\n    :class=\"$sectionData.classes\"\n  )\n    .container\n      .grid\n        .row.is-center\n          .column.is-12\n            h3.social-title(\n              v-html=\"$sectionData.title\"\n              v-styler=\"$sectionData.title\"\n            )\n        .row.is-center\n          .column.is-12.is-desktop-4\n            p(\n              v-html=\"$sectionData.columns[0].content\"\n              v-styler=\"$sectionData.columns[0].content\"\n            )\n            .user\n              uploader(\n                class=\"user-avatar\"\n                path=\"$sectionData.images[0]\"\n              )\n              .user-data\n                h4.user-name Ahmed\n                span.user-caption SEO at Baianat\n\n          .column.is-12.is-desktop-4\n              p(\n                v-html=\"$sectionData.columns[1].content\"\n                v-styler:text=\"$sectionData.columns[1].content\"\n              )\n              .user\n                uploader(\n                  class=\"user-avatar\"\n                  path=\"$sectionData.images[1]\"\n                )\n                .user-data\n                  h4.user-name Ahmed\n                  span.user-caption SEO at Baianat\n\n          .column.is-12.is-desktop-4\n            p(\n              v-html=\"$sectionData.columns[2].content\"\n              v-styler:text=\"$sectionData.columns[2].content\"\n            )\n            .user\n              uploader(\n                class=\"user-avatar\"\n                path=\"$sectionData.images[2]\"\n              )\n              .user-data\n                h4.user-name Ahmed\n                span.user-caption SEO at Baianat\n</template>\n\n<script>\nimport * as types from '../../../src/types';\n\nexport default {\n  name: 'Social4',\n  cover: 'img/covers/social4.png',\n  group: 'social',\n  $schema: {\n    classes: [types.ClassList],\n    title: types.Title,\n    columns: [\n      { content: types.Text },\n      { content: types.Text },\n      { content: types.Text }\n    ],\n    images: [\n      types.Avatar,\n      types.Avatar,\n      types.Avatar\n    ]\n  },\n  props: {\n    id: {\n      type: Number, required: true\n    }\n  }\n};\n</script>\n"
  },
  {
    "path": "demo/style/_demo.styl",
    "content": "@import variables\n@import '~@baianat/base.framework/base'\n\n@import main\n@import header\n@import section\n@import social\n@import user\n@import helper\n@import scrolling\n\n.column\n  transition: 0.2s\n"
  },
  {
    "path": "demo/style/colors.styl",
    "content": "/*\n * Color theme\n */\n$magenta ?= #eb008b\n$blue ?= #0072FF\n$cyan ?= #00d4f0\n$green ?= #18d88b\n$yellow ?= #ffdd57\n$orange ?= #ffa557\n$red ?= #ff3d3d\n$purple ?= #a324ea\n\n/*\n * Graysacle\n */\n$black ?= #000\n$dark ?= #323c47\n$gray ?= #c1c1c1\n$gray-dark ?= darken($gray, 10%)\n$gray-light ?= lighten($gray, 10%)\n$light ?= #f5f5f5\n$white ?= #fff\n"
  },
  {
    "path": "demo/style/header.styl",
    "content": ".header\n  width: 100%\n  padding: 50px\n  color: $white\n  &-title\n    font-size: 50px\n    line-height: 1em\n    margin: 20px 0\n    font-weight: lighter\n  &-content\n    font-size: 16px\n    margin-bottom: 50px\n    font-weight: lighter\n  &-image\n    >img\n      width 100%\n  &,\n  &.is-red\n    background-image: linear-gradient(30deg, $red, $yellow)\n  &.is-black\n    background-image: linear-gradient(30deg, $black, lighten($black, 30%))\n  &.is-green\n    background-image: linear-gradient(30deg, $green, $yellow)\n  &.is-blue\n    background-image: linear-gradient(30deg, $blue, lighten($blue, 30%))\n  &.is-white\n    background-image: linear-gradient(45deg, darken($white, 10%), $white)"
  },
  {
    "path": "demo/style/helper.styl",
    "content": "+prefix-classes('add-')\n  .center-horizontal\n    display: flex\n    flex-direction: column    \n    justify-content: center\n    align-items: center\n  .center-vertical\n    display: flex\n    flex-direction: column\n    justify-content: center\n    align-items: flex-start\n  .padding\n    padding: 20px\n  .text-center\n    text-align: center\n  .full-width\n    width: 100%"
  },
  {
    "path": "demo/style/main.styl",
    "content": "::selection\n  color: inherit\n\n\n.button\n  white-space: nowrap"
  },
  {
    "path": "demo/style/scrolling.styl",
    "content": ".is-active\n  img\n    opacity: 1\n    transition: 0.4s\n  p\n  h1\n  h2\n  h3\n  h6\n  b\n    opacity: 1\n    transform: translate3d(0, 0, 0)\n    transition: 0.4s\n\n.is-inactive\n  img\n    opacity: 0\n    transition: 0.4s\n  p\n  h1\n  h2\n  h3\n  h6\n  b\n    opacity: 0\n    transform: translate3d(0, -200px, 0)\n    transition: 0.4s"
  },
  {
    "path": "demo/style/section.styl",
    "content": ".section\n  padding: 20px 30px\n  &-title\n    font-size: 30px\n    color: $dark\n\n  &-paragraph\n    font-size: 16px\n    color: lighten($dark, 20%)\n\n  &.is-red\n    background: $red\n  &.is-black\n    background: $black\n  &.is-green\n    background: $green\n  &.is-blue\n    background: $blue\n  &.is-white\n    background: $white"
  },
  {
    "path": "demo/style/social.styl",
    "content": ".social\n  padding: 100px 0\n  &-number\n    font-size: 50px\n    margin: 20px 0 50px\n  &-item\n    display: flex\n    flex-direction: column\n    justify-content: center\n    align-items: center\n  &-title\n    font-size: 30px\n    margin: 30px 0\n    text-align: center\n  &-content\n    font-size: 20px\n    margin: 0 0 40px\n    text-align: center\n  &-logo\n    width: 100%\n    margin: 20px 0\n    @extend $flexCenter\n\n  &-quote\n    font-size: 30px\n    color: $black\n    quotes: \"“\" \"”\" \"‘\" \"’\"\n    &:before\n      content: open-quote\n      margin-right: 20px\n      font-size: 40px\n    &:after\n      content: close-quote\n      margin-left: 20px\n      font-size: 40px\n  \n  &.is-red\n    background: $red\n  &.is-black\n    background: $black\n  &.is-green\n    background: $green\n  &.is-blue\n    background: $blue"
  },
  {
    "path": "demo/style/transition.styl",
    "content": ".fade-enter-active\n.fade-leave-active\n  transition: all .3s ease\n  transform: scaleX(1)\n\n.fade-enter\n.fade-leave-to\n  transform: scaleX(0)"
  },
  {
    "path": "demo/style/user.styl",
    "content": ".user\n  display: flex\n  align-items: center\n  margin: 10px 0\n  &.is-alt\n    justify-content: center\n    flex-direction: column\n  &-avatar\n    border-radius: 50%\n    width: 60px\n    height: 60px\n    margin-right: 20px\n    flex-shrink: 0\n    overflow: hidden\n    .is-alt &\n      margin: 0 0 20px\n  &-data\n    text-align: left\n    white-space: nowrap\n    .is-alt &\n      text-align: center\n  &-name\n    font-size: 16px\n    color: $black\n    margin: 5px 0\n  &-caption\n    font-size: 16px\n    color: $gray\n    margin: 0 0 5px\n"
  },
  {
    "path": "demo/style/variables.styl",
    "content": "\n$flexCenter\n  display: flex\n  justify-content: center\n  align-items: center"
  },
  {
    "path": "demo/webpack.config.js",
    "content": "const path = require('path');\nconst webpack = require('webpack');\nconst VueLoaderPlugin = require('vue-loader/lib/plugin')\nconst HtmlWebpackPlugin = require('html-webpack-plugin');\nconst CleanWebpackPlugin = require('clean-webpack-plugin');\nconst FriendlyErrorsWebpackPlugin = require('friendly-errors-webpack-plugin');\nconst CopyWebpackPlugin = require('copy-webpack-plugin');\nconst ProgressBarPlugin = require('progress-bar-webpack-plugin');\nconst MiniCssExtractPlugin = require(\"mini-css-extract-plugin\");\n\nconst env = process.env.NODE_ENV;\nconst production = env === 'production';\n\n// render page\nconst page = (name) => {\n  return new HtmlWebpackPlugin({\n    inject: true,\n    template: path.join(__dirname, `./${name}.html`),\n    filename: path.join(__dirname, `./dist/${name}.html`)\n  });\n};\n\nconst config = {\n  mode: production ? 'production' : 'development',\n  devtool: production ? 'source-map' : 'cheap-source-map',\n  entry: {\n    app: path.join(__dirname, './app.js')\n  },\n  output: {\n    path: path.join(__dirname, 'dist'),\n    filename: 'js/[name].js'\n  },\n  plugins: [\n    new MiniCssExtractPlugin({\n      filename: 'css/style.css'\n    }),\n    new CleanWebpackPlugin(['./dist']),\n    new VueLoaderPlugin(),\n    new webpack.LoaderOptionsPlugin({ options: {} }),\n    new FriendlyErrorsWebpackPlugin(),\n    new ProgressBarPlugin(),\n    new CopyWebpackPlugin([{ from: path.join(__dirname, 'img'), to: './img/' }]),\n    page('index'),\n    page('render')\n  ],\n  watchOptions: {\n    aggregateTimeout: 300,\n    poll: 1000\n  },\n  devServer: {\n    historyApiFallback: true,\n    hot: true,\n    inline: true,\n    stats: 'errors-only',\n    host: '0.0.0.0',\n    port: 8080\n  },\n  module: {\n    rules: [\n      {\n        test: /.js$/,\n        exclude: /node_modules/,\n        loader: 'eslint-loader',\n        enforce: 'pre'\n      },\n      {\n        test: /.js$/,\n        exclude: /node_modules/,\n        use: {\n          loader: 'babel-loader',\n          options: { babelrc: true }\n        }\n      },\n      {\n        test: /\\.vue$/,\n        loader: 'eslint-loader',\n        enforce: 'pre'\n      },\n      {\n        test: /\\.vue$/,\n        loader: 'vue-loader'\n      },\n      {\n        test: /\\.css$/,\n        loader: ['style-loader', 'css-loader']\n      },\n      {\n        test: /\\.styl(us)?$/,\n        use: [\n          MiniCssExtractPlugin.loader,\n          'css-loader',\n          'stylus-loader'\n        ]\n      },\n      {\n        test: /\\.(ttf|eot|svg)(\\?.*)?$/,\n        loader: 'file-loader',\n        options: {\n          name: 'font/[name].[ext]'\n        }\n      },\n      {\n        test: /.pug$/,\n        exclude: /node_modules/,\n        loader: 'pug-plain-loader',\n        options: {\n          pretty: true\n        }\n      }\n    ]\n  },\n  resolve: {\n    extensions: ['.js', '.vue', '.json']\n  }\n};\n\nmodule.exports = config;\n"
  },
  {
    "path": "docs/.vuepress/config.js",
    "content": "module.exports = {\r\n  title: 'Vuse',\r\n  description: 'Advanced page builder based on Vue.js',\r\n  base: '/vuse/',\r\n  themeConfig: {\r\n    lastUpdated: 'Last Updated',\r\n    repo: 'baianat/vuse',\r\n    docsRepo: 'baianat/vuse',\r\n    docsDir: 'docs',\r\n    docsBranch: 'master',\r\n    editLinks: true,\r\n    sidebar: [\r\n      '/',\r\n      '/getting-started',\r\n      '/section',\r\n      '/styler',\r\n      '/exporting',\r\n      '/API',\r\n    ],\r\n    nav: [\r\n      { text: 'API', link: '/API' },\r\n      { text: 'Example', link: '/example' },\r\n    ]\r\n  }\r\n}"
  },
  {
    "path": "docs/.vuepress/enhanceApp.js",
    "content": "// Vuse scripts\r\nimport Vuse from '../../src';\r\n\r\n// demo scripts\r\nimport '../../demo/style/_demo.styl';\r\nimport Uploader from '../../demo/Uploader.vue'\r\nimport hero1 from '../../demo/sections/hero/hero1';\r\nimport hero2 from '../../demo/sections/hero/hero2';\r\nimport section1 from '../../demo/sections/section/section1';\r\nimport section2 from '../../demo/sections/section/section2';\r\nimport social1 from '../../demo/sections/social/social1';\r\nimport social2 from '../../demo/sections/social/social2';\r\nimport social3 from '../../demo/sections/social/social3';\r\nimport social4 from '../../demo/sections/social/social4';\r\nimport newsletter from '../../demo/sections/forms/newsletter';\r\n\r\n// add the uploader to the list of sub-components.\r\nVuse.mix({\r\n  components: {\r\n    Uploader\r\n  }\r\n});\r\n\r\n// register components.\r\nVuse.component(hero1);\r\nVuse.component(hero2);\r\nVuse.component(section1);\r\nVuse.component(section2);\r\nVuse.component(social1);\r\nVuse.component(social2);\r\nVuse.component(social3);\r\nVuse.component(social4);\r\nVuse.component(newsletter);\r\n\r\nexport default ({ Vue }) => {\r\n  // install the builder\r\n  Vue.use(Vuse, {\r\n    // main css file\r\n    assets: {\r\n      css: 'style.css'\r\n    },\r\n    // builder default themes\r\n    themes: [{\r\n      name: 'Theme 1',\r\n      sections: [hero1, section1, social1, social3, newsletter]\r\n    }, {\r\n      name: 'Theme 2',\r\n      sections: [hero2, section2, social3, social4, newsletter]\r\n    }]\r\n  });\r\n}\r\n\r\n\r\nfunction normalize (component) {\r\n  component.cover = component.cover.replace('static', '.');\r\n}"
  },
  {
    "path": "docs/.vuepress/public/style.css",
    "content": "\n.vuse-icon {\n  display: block;\n  width: 20px;\n  height: 20px;\n}\n.controller-button:hover,\n.menu-element:hover {\n  cursor: pointer;\n  box-shadow: 0 14px 28px rgba(0,0,0,0.125), 0 10px 10px rgba(0,0,0,0.1);\n}\n.artboard {\n  transform-origin: top center;\n}\n.artboard.is-editable .is-editable {\n  outline: none;\n}\n.artboard.is-editable .is-editable:hover {\n  box-shadow: inset 0 0 0 2px #c1c1c1;\n}\n.controller {\n  box-sizing: border-box;\n}\n.controller-panel {\n  position: fixed;\n  z-index: 200;\n  bottom: 30px;\n  right: 40px;\n}\n.controller-input {\n  outline: none;\n  border: 1px solid #c1c1c1;\n  padding: 0.5em 1em;\n  margin: 20px 0;\n  border-radius: 40px;\n  width: 100%;\n  font-size: 16px;\n}\n.controller-input:focus {\n  border-color: #0072ff;\n  box-shadow: 0 0 0 2px rgba(0,114,255,0.5);\n}\n.controller-button {\n  transition: 0.2s;\n  border: none;\n  outline: none;\n  border-radius: 20px;\n  padding: 5px;\n  color: #fff;\n  fill: #fff;\n  font-size: 16px;\n}\n.controller-button svg {\n  transition: 0.2s;\n}\n.controller-button:not(:last-child) {\n  margin-right: 20px;\n}\n.controller-button.is-rotated >svg {\n  transform: rotate(45deg);\n}\n.controller-button.is-blue {\n  background-color: #0072ff;\n}\n.controller-button.is-blue:hover {\n  background-color: #005bcc;\n}\n.controller-button.is-red {\n  background-color: #ff3d3d;\n}\n.controller-button.is-red:hover {\n  background-color: #fd0000;\n}\n.controller-button.is-green {\n  background-color: #18d88b;\n}\n.controller-button.is-green:hover {\n  background-color: #13ad6f;\n}\n.controller-button.is-dark {\n  background-color: #323c47;\n}\n.controller-button.is-dark:hover {\n  background-color: #283039;\n}\n.controller-button.is-gray {\n  background-color: $gary;\n}\n.controller-button.is-gray:hover {\n  background-color: #9a9a9a;\n}\n.controller-intro {\n  width: 100%;\n  max-width: 500px;\n  margin: auto;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  flex-direction: column;\n  padding: 70px 50px;\n  text-align: center;\n  font-size: 30px;\n  color: #323c47;\n}\n.controller-themes {\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n}\n.controller-theme {\n  background-color: #fff;\n  color: #323c47;\n  border: 1px solid #c1c1c1;\n  margin: 5px;\n  padding: 20px;\n  border-radius: 4px;\n  width: 100%;\n  cursor: pointer;\n  font-size: 16px;\n}\n.controller-theme:hover {\n  border-color: #0072ff;\n}\n.menu {\n  user-select: none;\n  -moz-user-select: none;\n  position: fixed;\n  z-index: 300;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  margin: 0;\n  width: 250px;\n  background: #fff;\n  padding: 20px 10px;\n  display: flex;\n  flex-direction: column;\n  overflow-y: auto;\n  list-style: none;\n  transition: 0.4s;\n  box-shadow: 1px 0 10px rgba(50,60,71,0.2);\n  transform: translate3d(-100%, 0, 0);\n}\n.menu.is-visiable {\n  transform: translate3d(0, 0, 0);\n}\n.menu-body {\n  display: none;\n  padding: 0;\n  margin: 0;\n  list-style: none;\n}\n.menu-group .menu-body {\n  width: 90%;\n  margin: 10px auto;\n}\n.menu-group.is-visiable .menu-body {\n  display: block;\n}\n.menu-icon {\n  width: 24px;\n  height: 24px;\n  fill: #c1c1c1;\n  transition: 0.2s;\n}\n.menu-group.is-visiable .menu-icon {\n  transform: rotate(180deg);\n}\n.menu-element {\n  position: relative;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 100%;\n  min-height: 50px;\n  border-radius: 5px;\n  background: #aeaeae;\n  transition: 0.3s;\n  cursor: pointer;\n  color: #fff;\n  overflow: hidden;\n  user-select: none;\n  -moz-user-select: none;\n}\n.menu-element:not(:last-child) {\n  margin-bottom: 10px;\n}\n.menu-elementImage {\n  max-width: 100%;\n  pointer-events: none;\n}\n.menu-elementTitle {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  text-shadow: 1px 1px 2px rgba(0,0,0,0.8);\n  text-align: center;\n  padding: 5px;\n}\n.menu-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 10px 5px;\n  border-bottom: 1px solid rgba(0,0,0,0.05);\n}\n.sortable-ghost {\n  opacity: 0.3;\n  box-shadow: 0 0 2px 1px #0072ff;\n}\n.is-editable:hover {\n  box-shadow: inset 0 0 0 2px #c1c1c1;\n}\n\n\n.styler {\n  position: absolute;\n  top: 0;\n  z-index: 200;\n  visibility: hidden;\n  opacity: 0;\n  margin: 10px 0;\n  padding: 5px;\n  background: #323c47;\n  border-radius: 26px;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n}\n.styler-list,\n.align,\n.colorer {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.styler-input {\n  background: #fff;\n  color: #323c47;\n  border: 0;\n  outline: 0;\n  width: 40px;\n  height: 40px;\n  border-radius: 42px;\n  margin: 0 5px 0 0;\n  text-align: center;\n  -webkit-appearance: none;\n  -moz-appearance: textfield;\n  appearance: none;\n}\n.styler-button {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  outline: 0;\n  background: #323c47;\n  border: 0;\n  fill: #fff;\n  color: #fff;\n  width: 42px;\n  height: 42px;\n  border-radius: 42px;\n  margin: 0 5px 0 0;\n}\n.styler-button:hover {\n  background: #283039;\n}\n.styler-button:first-child {\n  margin-left: 5px;\n}\n.styler-selector {\n  margin: 0 5px;\n}\n.styler.is-visible {\n  visibility: visible;\n  opacity: 1;\n}\n.styler .input-group {\n  margin: 5px;\n}\n.align {\n  height: 42px;\n}\n.colorer {\n  height: 42px;\n}\n.colorer li >input {\n  -webkit-appearance: none;\n  -moz-appearance: textfield;\n  appearance: none;\n  width: 30px;\n  height: 30px;\n  border-radius: 40px;\n  border: 4px solid #283039;\n  margin: 0 5px;\n  outline: none;\n}\n.colorer li >input:checked {\n  border-color: #526375;\n}\n.colorer li >input:hover {\n  border-color: #526375;\n}\n.colorer li >input#colorRed {\n  background: #ff3d3d;\n}\n.colorer li >input#colorBlue {\n  background: #0072ff;\n}\n.colorer li >input#colorGreen {\n  background: #18d88b;\n}\n.colorer li >input#colorBlack {\n  background: #000;\n}\n.colorer li >input#colorWhite {\n  background: #fff;\n}\n.is-hidden {\n  display: none;\n}\ninput[type=number]::-webkit-inner-spin-button,\ninput[type=number]::-webkit-outer-spin-button {\n  -webkit-appearance: none;\n  margin: 0;\n}\n\n.social-logo {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n.button.is-tiny,\n.buttons.is-tiny >.button,\n.label.is-tiny,\n.input.is-tiny,\n.input-tag.is-tiny,\n.input-group.is-tiny >.button,\n.input-group.is-tiny >.input,\n.input-group.is-tiny >.input-tag,\n.checkbox.is-tiny,\n.radio.is-tiny,\n.switcher.is-tiny,\n.textarea.is-tiny,\n.select.is-tiny,\n.pagination.is-tiny,\n.content.is-tiny {\n  font-size: calc( 0.253378378378378vw + 8.554054054054054px );\n}\n@media screen and (max-width: 767px) {\n  .button.is-tiny,\n  .buttons.is-tiny >.button,\n  .label.is-tiny,\n  .input.is-tiny,\n  .input-tag.is-tiny,\n  .input-group.is-tiny >.button,\n  .input-group.is-tiny >.input,\n  .input-group.is-tiny >.input-tag,\n  .checkbox.is-tiny,\n  .radio.is-tiny,\n  .switcher.is-tiny,\n  .textarea.is-tiny,\n  .select.is-tiny,\n  .pagination.is-tiny,\n  .content.is-tiny {\n    font-size: 10.5px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  .button.is-tiny,\n  .buttons.is-tiny >.button,\n  .label.is-tiny,\n  .input.is-tiny,\n  .input-tag.is-tiny,\n  .input-group.is-tiny >.button,\n  .input-group.is-tiny >.input,\n  .input-group.is-tiny >.input-tag,\n  .checkbox.is-tiny,\n  .radio.is-tiny,\n  .switcher.is-tiny,\n  .textarea.is-tiny,\n  .select.is-tiny,\n  .pagination.is-tiny,\n  .content.is-tiny {\n    font-size: 12px;\n  }\n}\n.button.is-small,\n.buttons.is-small >.button,\n.label,\n.label.is-small,\n.input.is-small,\n.input-tag.is-small,\n.input-group.is-small >.button,\n.input-group.is-small >.input,\n.input-group.is-small >.input-tag,\n.checkbox.is-small,\n.radio.is-small,\n.switcher.is-small,\n.textarea.is-small,\n[tooltip]:after,\n.select.is-small,\n.pagination.is-small,\n.content.is-small {\n  font-size: calc( 0.295608108108108vw + 9.97972972972973px );\n}\n@media screen and (max-width: 767px) {\n  .button.is-small,\n  .buttons.is-small >.button,\n  .label,\n  .label.is-small,\n  .input.is-small,\n  .input-tag.is-small,\n  .input-group.is-small >.button,\n  .input-group.is-small >.input,\n  .input-group.is-small >.input-tag,\n  .checkbox.is-small,\n  .radio.is-small,\n  .switcher.is-small,\n  .textarea.is-small,\n  [tooltip]:after,\n  .select.is-small,\n  .pagination.is-small,\n  .content.is-small {\n    font-size: 12.25px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  .button.is-small,\n  .buttons.is-small >.button,\n  .label,\n  .label.is-small,\n  .input.is-small,\n  .input-tag.is-small,\n  .input-group.is-small >.button,\n  .input-group.is-small >.input,\n  .input-group.is-small >.input-tag,\n  .checkbox.is-small,\n  .radio.is-small,\n  .switcher.is-small,\n  .textarea.is-small,\n  [tooltip]:after,\n  .select.is-small,\n  .pagination.is-small,\n  .content.is-small {\n    font-size: 14px;\n  }\n}\np,\nbody,\n.button,\n.button.is-normal,\n.buttons.is-normal >.button,\n.label,\n.label.is-normal,\n.input,\n.input.is-normal,\n.input-tag,\n.input-tag.is-normal,\n.input-group.is-normal >.button,\n.input-group.is-normal >.input,\n.input-group.is-normal >.input-tag,\n.checkbox,\n.checkbox.is-normal,\n.radio,\n.radio.is-normal,\n.switcher,\n.switcher.is-normal,\n.table,\n.textarea,\n.textarea.is-normal,\n.select,\n.select.is-normal,\n.modal,\n.navbar-item,\n.pagination-item,\n.pagination-next,\n.pagination-prev,\n.pagination-first,\n.pagination-last,\n.pagination,\n.pagination.is-normal,\n.content,\n.content.is-normal {\n  font-size: calc( 0.337837837837838vw + 11.405405405405405px );\n}\n@media screen and (max-width: 767px) {\n  p,\n  body,\n  .button,\n  .button.is-normal,\n  .buttons.is-normal >.button,\n  .label,\n  .label.is-normal,\n  .input,\n  .input.is-normal,\n  .input-tag,\n  .input-tag.is-normal,\n  .input-group.is-normal >.button,\n  .input-group.is-normal >.input,\n  .input-group.is-normal >.input-tag,\n  .checkbox,\n  .checkbox.is-normal,\n  .radio,\n  .radio.is-normal,\n  .switcher,\n  .switcher.is-normal,\n  .table,\n  .textarea,\n  .textarea.is-normal,\n  .select,\n  .select.is-normal,\n  .modal,\n  .navbar-item,\n  .pagination-item,\n  .pagination-next,\n  .pagination-prev,\n  .pagination-first,\n  .pagination-last,\n  .pagination,\n  .pagination.is-normal,\n  .content,\n  .content.is-normal {\n    font-size: 14px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  p,\n  body,\n  .button,\n  .button.is-normal,\n  .buttons.is-normal >.button,\n  .label,\n  .label.is-normal,\n  .input,\n  .input.is-normal,\n  .input-tag,\n  .input-tag.is-normal,\n  .input-group.is-normal >.button,\n  .input-group.is-normal >.input,\n  .input-group.is-normal >.input-tag,\n  .checkbox,\n  .checkbox.is-normal,\n  .radio,\n  .radio.is-normal,\n  .switcher,\n  .switcher.is-normal,\n  .table,\n  .textarea,\n  .textarea.is-normal,\n  .select,\n  .select.is-normal,\n  .modal,\n  .navbar-item,\n  .pagination-item,\n  .pagination-next,\n  .pagination-prev,\n  .pagination-first,\n  .pagination-last,\n  .pagination,\n  .pagination.is-normal,\n  .content,\n  .content.is-normal {\n    font-size: 16px;\n  }\n}\n.button.is-large,\n.buttons.is-large >.button,\n.label.is-large,\n.input.is-large,\n.input-tag.is-large,\n.input-group.is-large >.button,\n.input-group.is-large >.input,\n.input-group.is-large >.input-tag,\n.checkbox.is-large,\n.radio.is-large,\n.switcher.is-large,\n.textarea.is-large,\n.select.is-large,\n.pagination.is-large,\n.content.is-large {\n  font-size: calc( 0.422297297297297vw + 14.256756756756756px );\n}\n@media screen and (max-width: 767px) {\n  .button.is-large,\n  .buttons.is-large >.button,\n  .label.is-large,\n  .input.is-large,\n  .input-tag.is-large,\n  .input-group.is-large >.button,\n  .input-group.is-large >.input,\n  .input-group.is-large >.input-tag,\n  .checkbox.is-large,\n  .radio.is-large,\n  .switcher.is-large,\n  .textarea.is-large,\n  .select.is-large,\n  .pagination.is-large,\n  .content.is-large {\n    font-size: 17.5px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  .button.is-large,\n  .buttons.is-large >.button,\n  .label.is-large,\n  .input.is-large,\n  .input-tag.is-large,\n  .input-group.is-large >.button,\n  .input-group.is-large >.input,\n  .input-group.is-large >.input-tag,\n  .checkbox.is-large,\n  .radio.is-large,\n  .switcher.is-large,\n  .textarea.is-large,\n  .select.is-large,\n  .pagination.is-large,\n  .content.is-large {\n    font-size: 20px;\n  }\n}\n.button.is-massive,\n.buttons.is-massive >.button,\n.label.is-massive,\n.input.is-massive,\n.input-tag.is-massive,\n.input-group.is-massive >.button,\n.input-group.is-massive >.input,\n.input-group.is-massive >.input-tag,\n.checkbox.is-massive,\n.radio.is-massive,\n.switcher.is-massive,\n.textarea.is-massive,\n.select.is-massive,\n.pagination.is-massive,\n.content.is-massive {\n  font-size: calc( 0.506756756756757vw + 17.10810810810811px );\n}\n@media screen and (max-width: 767px) {\n  .button.is-massive,\n  .buttons.is-massive >.button,\n  .label.is-massive,\n  .input.is-massive,\n  .input-tag.is-massive,\n  .input-group.is-massive >.button,\n  .input-group.is-massive >.input,\n  .input-group.is-massive >.input-tag,\n  .checkbox.is-massive,\n  .radio.is-massive,\n  .switcher.is-massive,\n  .textarea.is-massive,\n  .select.is-massive,\n  .pagination.is-massive,\n  .content.is-massive {\n    font-size: 21px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  .button.is-massive,\n  .buttons.is-massive >.button,\n  .label.is-massive,\n  .input.is-massive,\n  .input-tag.is-massive,\n  .input-group.is-massive >.button,\n  .input-group.is-massive >.input,\n  .input-group.is-massive >.input-tag,\n  .checkbox.is-massive,\n  .radio.is-massive,\n  .switcher.is-massive,\n  .textarea.is-massive,\n  .select.is-massive,\n  .pagination.is-massive,\n  .content.is-massive {\n    font-size: 24px;\n  }\n}\nhtml {\n  line-height: 1.1875 /* 1 */;\n  -ms-text-size-adjust: 100% /* 2 */;\n  -webkit-text-size-adjust: 100% /* 2 */;\n}\n* {\n  box-sizing: border-box;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\nfooter,\nheader,\nnav,\nsection {\n  display: block;\n}\nfigcaption,\nfigure,\nmain {\n/* 1 */\n  display: block;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  overflow: visible /* 2 */;\n  box-sizing: content-box /* 1 */;\n  height: 0 /* 1 */;\n}\npre {\n  font-size: 1em /* 2 */;\n  font-family: monospace, monospace /* 1 */;\n}\na {\n  background-color: transparent /* 1 */;\n  -webkit-text-decoration-skip: objects /* 2 */;\n}\nabbr[title] {\n  border-bottom: none /* 1 */;\n  text-decoration: underline /* 2 */;\n  text-decoration: underline dotted /* 2 */;\n}\nb,\nstrong {\n  font-weight: inherit;\n}\nb,\nstrong {\n  font-weight: bolder;\n}\ncode,\nkbd,\nsamp {\n  font-size: 1em /* 2 */;\n  font-family: monospace, monospace /* 1 */;\n}\ndfn {\n  font-style: italic;\n}\nmark {\n  background-color: #ff0;\n  color: #000;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  vertical-align: baseline;\n  font-size: 75%;\n  line-height: 0;\n}\nsub {\n  bottom: -0.25em;\n}\nsup {\n  top: -0.5em;\n}\naudio,\nvideo {\n  display: inline-block;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\nimg {\n  border-style: none;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0 /* 2 */;\n  font-size: 100% /* 1 */;\n  font-family: sans-serif /* 1 */;\n  line-height: 1.15 /* 1 */;\n}\nbutton,\ninput {\n/* 1 */\n  overflow: visible;\n}\nbutton,\nselect {\n/* 1 */\n  text-transform: none;\n}\nbutton,\nhtml [type='button'],\n[type='reset'],\n[type='submit'] {\n  -webkit-appearance: button /* 2 */;\n}\nbutton::-moz-focus-inner,\n[type='button']::-moz-focus-inner,\n[type='reset']::-moz-focus-inner,\n[type='submit']::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\nbutton:-moz-focusring,\n[type='button']:-moz-focusring,\n[type='reset']:-moz-focusring,\n[type='submit']:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\nfieldset {\n  padding: 0.35em 0.75em 0.625em;\n}\nlegend {\n  display: table /* 1 */;\n  box-sizing: border-box /* 1 */;\n  padding: 0 /* 3 */;\n  max-width: 100% /* 1 */;\n  color: inherit /* 2 */;\n  white-space: normal /* 1 */;\n}\nprogress {\n  display: inline-block /* 1 */;\n  vertical-align: baseline /* 2 */;\n}\ntextarea {\n  overflow: auto;\n}\n[type='checkbox'],\n[type='radio'] {\n  box-sizing: border-box /* 1 */;\n  padding: 0 /* 2 */;\n}\n[type='number']::-webkit-inner-spin-button,\n[type='number']::-webkit-outer-spin-button {\n  margin: 0;\n  -webkit-appearance: none;\n}\n[type=number] {\n  -moz-appearance: textfield;\n}\n[type='search'] {\n  outline-offset: -2px /* 2 */;\n  -webkit-appearance: textfield /* 1 */;\n}\n[type='search']::-webkit-search-cancel-button,\n[type='search']::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n::-webkit-file-upload-button {\n  font: inherit /* 2 */;\n  -webkit-appearance: button /* 1 */;\n}\ndetails,\nmenu {\n  display: block;\n}\nsummary {\n  display: list-item;\n}\ncanvas {\n  display: inline-block;\n}\ntemplate {\n  display: none;\n}\n[hidden] {\n  display: none;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3,\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 0;\n  margin-bottom: 0.5em;\n  line-height: 1.1875;\n  font-weight: 900;\n}\nh1,\n.h1 {\n  font-size: calc( 0.844594594594595vw + 28.513513513513512px );\n}\n@media screen and (max-width: 767px) {\n  h1,\n  .h1 {\n    font-size: 35px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  h1,\n  .h1 {\n    font-size: 40px;\n  }\n}\nh2,\n.h2 {\n  font-size: calc( 0.675675675675676vw + 22.81081081081081px );\n}\n@media screen and (max-width: 767px) {\n  h2,\n  .h2 {\n    font-size: 28px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  h2,\n  .h2 {\n    font-size: 32px;\n  }\n}\nh3,\n.h3 {\n  font-size: calc( 0.591216216216216vw + 19.95945945945946px );\n}\n@media screen and (max-width: 767px) {\n  h3,\n  .h3 {\n    font-size: 24.5px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  h3,\n  .h3 {\n    font-size: 28px;\n  }\n}\nh4,\n.h4 {\n  font-size: calc( 0.506756756756757vw + 17.10810810810811px );\n}\n@media screen and (max-width: 767px) {\n  h4,\n  .h4 {\n    font-size: 21px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  h4,\n  .h4 {\n    font-size: 24px;\n  }\n}\nh5,\n.h5 {\n  font-size: calc( 0.422297297297297vw + 14.256756756756756px );\n}\n@media screen and (max-width: 767px) {\n  h5,\n  .h5 {\n    font-size: 17.5px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  h5,\n  .h5 {\n    font-size: 20px;\n  }\n}\nh6,\n.h6 {\n  font-size: calc( 0.337837837837838vw + 11.405405405405405px );\n}\n@media screen and (max-width: 767px) {\n  h6,\n  .h6 {\n    font-size: 14px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  h6,\n  .h6 {\n    font-size: 16px;\n  }\n}\np,\nbody {\n  margin: 0;\n}\n::selection {\n  background: #0072ff;\n  color: #fff;\n}\n*::placeholder {\n  color: #aeaeae;\n  opacity: 1;\n}\n*::placeholder:focus {\n  outline: 0;\n}\nhtml,\ninput,\nbutton {\n  direction: ltr;\n  font-family: 'Graphik', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';\n  font-weight: 400;\n}\na {\n  color: #0072ff;\n  cursor: pointer;\n  text-decoration: none;\n}\na:hover {\n  color: #eb008b;\n}\nimg {\n  max-width: 100%;\n  height: auto;\n}\nstrong,\nb {\n  font-weight: 900;\n}\npre {\n  direction: ltr;\n}\n.container {\n  width: calc(100% - 22px);\n  margin: auto;\n  padding-left: 1.5625vw;\n  padding-right: 1.5625vw;\n}\n@media screen and (min-width: 768px) {\n  .container {\n    width: 724px;\n  }\n}\n@media screen and (min-width: 991px) {\n  .container {\n    width: 925px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  .container {\n    width: 1272px;\n  }\n}\n@media screen and (min-width: 1920px) {\n  .container {\n    width: 1810px;\n  }\n}\n.container-full {\n  width: 100%;\n  padding-left: 8vw;\n  padding-right: 8vw;\n}\n.column {\n  flex: 1 0;\n  padding-right: 1.5625vw;\n  padding-left: 1.5625vw;\n}\n.column[class*='is-tablet-'],\n.column[class*='is-desktop-'],\n.column[class*='is-widescreen-'],\n.column[class*='is-ultrawide-'],\n.grid[class*='is-tablet-'] >.column:not([class*='is-']),\n.grid[class*='is-desktop-'] >.column:not([class*='is-']),\n.grid[class*='is-widescreen-'] >.column:not([class*='is-']),\n.grid[class*='is-ultrawide-'] >.column:not([class*='is-']),\n.row[class*='is-tablet-'] >.column:not([class*='is-']),\n.row[class*='is-desktop-'] >.column:not([class*='is-']),\n.row[class*='is-widescreen-'] >.column:not([class*='is-']),\n.row[class*='is-ultrawide-'] >.column:not([class*='is-']) {\n  flex: 1 0 100%;\n  min-width: 100%;\n}\n.column.is-0,\n.column.is-mobile-0 {\n  flex: 0 0 0%;\n  min-width: 0%;\n}\n.column.is-offset-0,\n.column.is-offset-mobile-0 {\n  margin-left: 0%;\n}\n.column.is-1,\n.column.is-mobile-1,\n.grid.is-1 >.column:not([class*='is-']),\n.grid.is-mobile-1 >.column:not([class*='is-']),\n.row.is-1 >.column:not([class*='is-']),\n.row.is-mobile-1 >.column:not([class*='is-']) {\n  flex: 0 0 8.333333333333332%;\n  min-width: 8.333333333333332%;\n}\n.column.is-offset-1,\n.column.is-offset-mobile-1 {\n  margin-left: 8.333333333333332%;\n}\n.column.is-2,\n.column.is-mobile-2,\n.grid.is-2 >.column:not([class*='is-']),\n.grid.is-mobile-2 >.column:not([class*='is-']),\n.row.is-2 >.column:not([class*='is-']),\n.row.is-mobile-2 >.column:not([class*='is-']) {\n  flex: 0 0 16.666666666666664%;\n  min-width: 16.666666666666664%;\n}\n.column.is-offset-2,\n.column.is-offset-mobile-2 {\n  margin-left: 16.666666666666664%;\n}\n.column.is-3,\n.column.is-mobile-3,\n.grid.is-3 >.column:not([class*='is-']),\n.grid.is-mobile-3 >.column:not([class*='is-']),\n.row.is-3 >.column:not([class*='is-']),\n.row.is-mobile-3 >.column:not([class*='is-']) {\n  flex: 0 0 25%;\n  min-width: 25%;\n}\n.column.is-offset-3,\n.column.is-offset-mobile-3 {\n  margin-left: 25%;\n}\n.column.is-4,\n.column.is-mobile-4,\n.grid.is-4 >.column:not([class*='is-']),\n.grid.is-mobile-4 >.column:not([class*='is-']),\n.row.is-4 >.column:not([class*='is-']),\n.row.is-mobile-4 >.column:not([class*='is-']) {\n  flex: 0 0 33.33333333333333%;\n  min-width: 33.33333333333333%;\n}\n.column.is-offset-4,\n.column.is-offset-mobile-4 {\n  margin-left: 33.33333333333333%;\n}\n.column.is-5,\n.column.is-mobile-5,\n.grid.is-5 >.column:not([class*='is-']),\n.grid.is-mobile-5 >.column:not([class*='is-']),\n.row.is-5 >.column:not([class*='is-']),\n.row.is-mobile-5 >.column:not([class*='is-']) {\n  flex: 0 0 41.66666666666667%;\n  min-width: 41.66666666666667%;\n}\n.column.is-offset-5,\n.column.is-offset-mobile-5 {\n  margin-left: 41.66666666666667%;\n}\n.column.is-6,\n.column.is-mobile-6,\n.grid.is-6 >.column:not([class*='is-']),\n.grid.is-mobile-6 >.column:not([class*='is-']),\n.row.is-6 >.column:not([class*='is-']),\n.row.is-mobile-6 >.column:not([class*='is-']) {\n  flex: 0 0 50%;\n  min-width: 50%;\n}\n.column.is-offset-6,\n.column.is-offset-mobile-6 {\n  margin-left: 50%;\n}\n.column.is-7,\n.column.is-mobile-7,\n.grid.is-7 >.column:not([class*='is-']),\n.grid.is-mobile-7 >.column:not([class*='is-']),\n.row.is-7 >.column:not([class*='is-']),\n.row.is-mobile-7 >.column:not([class*='is-']) {\n  flex: 0 0 58.333333333333336%;\n  min-width: 58.333333333333336%;\n}\n.column.is-offset-7,\n.column.is-offset-mobile-7 {\n  margin-left: 58.333333333333336%;\n}\n.column.is-8,\n.column.is-mobile-8,\n.grid.is-8 >.column:not([class*='is-']),\n.grid.is-mobile-8 >.column:not([class*='is-']),\n.row.is-8 >.column:not([class*='is-']),\n.row.is-mobile-8 >.column:not([class*='is-']) {\n  flex: 0 0 66.66666666666666%;\n  min-width: 66.66666666666666%;\n}\n.column.is-offset-8,\n.column.is-offset-mobile-8 {\n  margin-left: 66.66666666666666%;\n}\n.column.is-9,\n.column.is-mobile-9,\n.grid.is-9 >.column:not([class*='is-']),\n.grid.is-mobile-9 >.column:not([class*='is-']),\n.row.is-9 >.column:not([class*='is-']),\n.row.is-mobile-9 >.column:not([class*='is-']) {\n  flex: 0 0 75%;\n  min-width: 75%;\n}\n.column.is-offset-9,\n.column.is-offset-mobile-9 {\n  margin-left: 75%;\n}\n.column.is-10,\n.column.is-mobile-10,\n.grid.is-10 >.column:not([class*='is-']),\n.grid.is-mobile-10 >.column:not([class*='is-']),\n.row.is-10 >.column:not([class*='is-']),\n.row.is-mobile-10 >.column:not([class*='is-']) {\n  flex: 0 0 83.33333333333334%;\n  min-width: 83.33333333333334%;\n}\n.column.is-offset-10,\n.column.is-offset-mobile-10 {\n  margin-left: 83.33333333333334%;\n}\n.column.is-11,\n.column.is-mobile-11,\n.grid.is-11 >.column:not([class*='is-']),\n.grid.is-mobile-11 >.column:not([class*='is-']),\n.row.is-11 >.column:not([class*='is-']),\n.row.is-mobile-11 >.column:not([class*='is-']) {\n  flex: 0 0 91.66666666666666%;\n  min-width: 91.66666666666666%;\n}\n.column.is-offset-11,\n.column.is-offset-mobile-11 {\n  margin-left: 91.66666666666666%;\n}\n.column.is-12,\n.column.is-mobile-12,\n.grid.is-12 >.column:not([class*='is-']),\n.grid.is-mobile-12 >.column:not([class*='is-']),\n.row.is-12 >.column:not([class*='is-']),\n.row.is-mobile-12 >.column:not([class*='is-']) {\n  flex: 0 0 100%;\n  min-width: 100%;\n}\n.column.is-offset-12,\n.column.is-offset-mobile-12 {\n  margin-left: 100%;\n}\n@media screen and (min-width: 768px) {\n  .column.is-tablet-0 {\n    flex: 0 0 0%;\n    min-width: 0%;\n  }\n  .column.is-offset-tablet-0 {\n    margin-left: 0%;\n  }\n  .column.is-tablet-1,\n  .grid.is-tablet-1 >.column:not([class*='is-']),\n  .row.is-tablet-1 >.column:not([class*='is-']) {\n    flex: 0 0 8.333333333333332%;\n    min-width: 8.333333333333332%;\n  }\n  .column.is-offset-tablet-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .column.is-tablet-2,\n  .grid.is-tablet-2 >.column:not([class*='is-']),\n  .row.is-tablet-2 >.column:not([class*='is-']) {\n    flex: 0 0 16.666666666666664%;\n    min-width: 16.666666666666664%;\n  }\n  .column.is-offset-tablet-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .column.is-tablet-3,\n  .grid.is-tablet-3 >.column:not([class*='is-']),\n  .row.is-tablet-3 >.column:not([class*='is-']) {\n    flex: 0 0 25%;\n    min-width: 25%;\n  }\n  .column.is-offset-tablet-3 {\n    margin-left: 25%;\n  }\n  .column.is-tablet-4,\n  .grid.is-tablet-4 >.column:not([class*='is-']),\n  .row.is-tablet-4 >.column:not([class*='is-']) {\n    flex: 0 0 33.33333333333333%;\n    min-width: 33.33333333333333%;\n  }\n  .column.is-offset-tablet-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .column.is-tablet-5,\n  .grid.is-tablet-5 >.column:not([class*='is-']),\n  .row.is-tablet-5 >.column:not([class*='is-']) {\n    flex: 0 0 41.66666666666667%;\n    min-width: 41.66666666666667%;\n  }\n  .column.is-offset-tablet-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .column.is-tablet-6,\n  .grid.is-tablet-6 >.column:not([class*='is-']),\n  .row.is-tablet-6 >.column:not([class*='is-']) {\n    flex: 0 0 50%;\n    min-width: 50%;\n  }\n  .column.is-offset-tablet-6 {\n    margin-left: 50%;\n  }\n  .column.is-tablet-7,\n  .grid.is-tablet-7 >.column:not([class*='is-']),\n  .row.is-tablet-7 >.column:not([class*='is-']) {\n    flex: 0 0 58.333333333333336%;\n    min-width: 58.333333333333336%;\n  }\n  .column.is-offset-tablet-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .column.is-tablet-8,\n  .grid.is-tablet-8 >.column:not([class*='is-']),\n  .row.is-tablet-8 >.column:not([class*='is-']) {\n    flex: 0 0 66.66666666666666%;\n    min-width: 66.66666666666666%;\n  }\n  .column.is-offset-tablet-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .column.is-tablet-9,\n  .grid.is-tablet-9 >.column:not([class*='is-']),\n  .row.is-tablet-9 >.column:not([class*='is-']) {\n    flex: 0 0 75%;\n    min-width: 75%;\n  }\n  .column.is-offset-tablet-9 {\n    margin-left: 75%;\n  }\n  .column.is-tablet-10,\n  .grid.is-tablet-10 >.column:not([class*='is-']),\n  .row.is-tablet-10 >.column:not([class*='is-']) {\n    flex: 0 0 83.33333333333334%;\n    min-width: 83.33333333333334%;\n  }\n  .column.is-offset-tablet-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .column.is-tablet-11,\n  .grid.is-tablet-11 >.column:not([class*='is-']),\n  .row.is-tablet-11 >.column:not([class*='is-']) {\n    flex: 0 0 91.66666666666666%;\n    min-width: 91.66666666666666%;\n  }\n  .column.is-offset-tablet-11 {\n    margin-left: 91.66666666666666%;\n  }\n  .column.is-tablet-12,\n  .grid.is-tablet-12 >.column:not([class*='is-']),\n  .row.is-tablet-12 >.column:not([class*='is-']) {\n    flex: 0 0 100%;\n    min-width: 100%;\n  }\n  .column.is-offset-tablet-12 {\n    margin-left: 100%;\n  }\n}\n@media screen and (min-width: 991px) {\n  .column.is-desktop-0 {\n    flex: 0 0 0%;\n    min-width: 0%;\n  }\n  .column.is-offset-desktop-0 {\n    margin-left: 0%;\n  }\n  .column.is-desktop-1,\n  .grid.is-desktop-1 >.column:not([class*='is-']),\n  .row.is-desktop-1 >.column:not([class*='is-']) {\n    flex: 0 0 8.333333333333332%;\n    min-width: 8.333333333333332%;\n  }\n  .column.is-offset-desktop-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .column.is-desktop-2,\n  .grid.is-desktop-2 >.column:not([class*='is-']),\n  .row.is-desktop-2 >.column:not([class*='is-']) {\n    flex: 0 0 16.666666666666664%;\n    min-width: 16.666666666666664%;\n  }\n  .column.is-offset-desktop-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .column.is-desktop-3,\n  .grid.is-desktop-3 >.column:not([class*='is-']),\n  .row.is-desktop-3 >.column:not([class*='is-']) {\n    flex: 0 0 25%;\n    min-width: 25%;\n  }\n  .column.is-offset-desktop-3 {\n    margin-left: 25%;\n  }\n  .column.is-desktop-4,\n  .grid.is-desktop-4 >.column:not([class*='is-']),\n  .row.is-desktop-4 >.column:not([class*='is-']) {\n    flex: 0 0 33.33333333333333%;\n    min-width: 33.33333333333333%;\n  }\n  .column.is-offset-desktop-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .column.is-desktop-5,\n  .grid.is-desktop-5 >.column:not([class*='is-']),\n  .row.is-desktop-5 >.column:not([class*='is-']) {\n    flex: 0 0 41.66666666666667%;\n    min-width: 41.66666666666667%;\n  }\n  .column.is-offset-desktop-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .column.is-desktop-6,\n  .grid.is-desktop-6 >.column:not([class*='is-']),\n  .row.is-desktop-6 >.column:not([class*='is-']) {\n    flex: 0 0 50%;\n    min-width: 50%;\n  }\n  .column.is-offset-desktop-6 {\n    margin-left: 50%;\n  }\n  .column.is-desktop-7,\n  .grid.is-desktop-7 >.column:not([class*='is-']),\n  .row.is-desktop-7 >.column:not([class*='is-']) {\n    flex: 0 0 58.333333333333336%;\n    min-width: 58.333333333333336%;\n  }\n  .column.is-offset-desktop-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .column.is-desktop-8,\n  .grid.is-desktop-8 >.column:not([class*='is-']),\n  .row.is-desktop-8 >.column:not([class*='is-']) {\n    flex: 0 0 66.66666666666666%;\n    min-width: 66.66666666666666%;\n  }\n  .column.is-offset-desktop-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .column.is-desktop-9,\n  .grid.is-desktop-9 >.column:not([class*='is-']),\n  .row.is-desktop-9 >.column:not([class*='is-']) {\n    flex: 0 0 75%;\n    min-width: 75%;\n  }\n  .column.is-offset-desktop-9 {\n    margin-left: 75%;\n  }\n  .column.is-desktop-10,\n  .grid.is-desktop-10 >.column:not([class*='is-']),\n  .row.is-desktop-10 >.column:not([class*='is-']) {\n    flex: 0 0 83.33333333333334%;\n    min-width: 83.33333333333334%;\n  }\n  .column.is-offset-desktop-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .column.is-desktop-11,\n  .grid.is-desktop-11 >.column:not([class*='is-']),\n  .row.is-desktop-11 >.column:not([class*='is-']) {\n    flex: 0 0 91.66666666666666%;\n    min-width: 91.66666666666666%;\n  }\n  .column.is-offset-desktop-11 {\n    margin-left: 91.66666666666666%;\n  }\n  .column.is-desktop-12,\n  .grid.is-desktop-12 >.column:not([class*='is-']),\n  .row.is-desktop-12 >.column:not([class*='is-']) {\n    flex: 0 0 100%;\n    min-width: 100%;\n  }\n  .column.is-offset-desktop-12 {\n    margin-left: 100%;\n  }\n}\n@media screen and (min-width: 1360px) {\n  .column.is-widescreen-0 {\n    flex: 0 0 0%;\n    min-width: 0%;\n  }\n  .column.is-offset-widescreen-0 {\n    margin-left: 0%;\n  }\n  .column.is-widescreen-1,\n  .grid.is-widescreen-1 >.column:not([class*='is-']),\n  .row.is-widescreen-1 >.column:not([class*='is-']) {\n    flex: 0 0 8.333333333333332%;\n    min-width: 8.333333333333332%;\n  }\n  .column.is-offset-widescreen-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .column.is-widescreen-2,\n  .grid.is-widescreen-2 >.column:not([class*='is-']),\n  .row.is-widescreen-2 >.column:not([class*='is-']) {\n    flex: 0 0 16.666666666666664%;\n    min-width: 16.666666666666664%;\n  }\n  .column.is-offset-widescreen-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .column.is-widescreen-3,\n  .grid.is-widescreen-3 >.column:not([class*='is-']),\n  .row.is-widescreen-3 >.column:not([class*='is-']) {\n    flex: 0 0 25%;\n    min-width: 25%;\n  }\n  .column.is-offset-widescreen-3 {\n    margin-left: 25%;\n  }\n  .column.is-widescreen-4,\n  .grid.is-widescreen-4 >.column:not([class*='is-']),\n  .row.is-widescreen-4 >.column:not([class*='is-']) {\n    flex: 0 0 33.33333333333333%;\n    min-width: 33.33333333333333%;\n  }\n  .column.is-offset-widescreen-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .column.is-widescreen-5,\n  .grid.is-widescreen-5 >.column:not([class*='is-']),\n  .row.is-widescreen-5 >.column:not([class*='is-']) {\n    flex: 0 0 41.66666666666667%;\n    min-width: 41.66666666666667%;\n  }\n  .column.is-offset-widescreen-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .column.is-widescreen-6,\n  .grid.is-widescreen-6 >.column:not([class*='is-']),\n  .row.is-widescreen-6 >.column:not([class*='is-']) {\n    flex: 0 0 50%;\n    min-width: 50%;\n  }\n  .column.is-offset-widescreen-6 {\n    margin-left: 50%;\n  }\n  .column.is-widescreen-7,\n  .grid.is-widescreen-7 >.column:not([class*='is-']),\n  .row.is-widescreen-7 >.column:not([class*='is-']) {\n    flex: 0 0 58.333333333333336%;\n    min-width: 58.333333333333336%;\n  }\n  .column.is-offset-widescreen-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .column.is-widescreen-8,\n  .grid.is-widescreen-8 >.column:not([class*='is-']),\n  .row.is-widescreen-8 >.column:not([class*='is-']) {\n    flex: 0 0 66.66666666666666%;\n    min-width: 66.66666666666666%;\n  }\n  .column.is-offset-widescreen-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .column.is-widescreen-9,\n  .grid.is-widescreen-9 >.column:not([class*='is-']),\n  .row.is-widescreen-9 >.column:not([class*='is-']) {\n    flex: 0 0 75%;\n    min-width: 75%;\n  }\n  .column.is-offset-widescreen-9 {\n    margin-left: 75%;\n  }\n  .column.is-widescreen-10,\n  .grid.is-widescreen-10 >.column:not([class*='is-']),\n  .row.is-widescreen-10 >.column:not([class*='is-']) {\n    flex: 0 0 83.33333333333334%;\n    min-width: 83.33333333333334%;\n  }\n  .column.is-offset-widescreen-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .column.is-widescreen-11,\n  .grid.is-widescreen-11 >.column:not([class*='is-']),\n  .row.is-widescreen-11 >.column:not([class*='is-']) {\n    flex: 0 0 91.66666666666666%;\n    min-width: 91.66666666666666%;\n  }\n  .column.is-offset-widescreen-11 {\n    margin-left: 91.66666666666666%;\n  }\n  .column.is-widescreen-12,\n  .grid.is-widescreen-12 >.column:not([class*='is-']),\n  .row.is-widescreen-12 >.column:not([class*='is-']) {\n    flex: 0 0 100%;\n    min-width: 100%;\n  }\n  .column.is-offset-widescreen-12 {\n    margin-left: 100%;\n  }\n}\n@media screen and (min-width: 1920px) {\n  .column.is-ultrawide-0 {\n    flex: 0 0 0%;\n    min-width: 0%;\n  }\n  .column.is-offset-ultrawide-0 {\n    margin-left: 0%;\n  }\n  .column.is-ultrawide-1,\n  .grid.is-ultrawide-1 >.column:not([class*='is-']),\n  .row.is-ultrawide-1 >.column:not([class*='is-']) {\n    flex: 0 0 8.333333333333332%;\n    min-width: 8.333333333333332%;\n  }\n  .column.is-offset-ultrawide-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .column.is-ultrawide-2,\n  .grid.is-ultrawide-2 >.column:not([class*='is-']),\n  .row.is-ultrawide-2 >.column:not([class*='is-']) {\n    flex: 0 0 16.666666666666664%;\n    min-width: 16.666666666666664%;\n  }\n  .column.is-offset-ultrawide-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .column.is-ultrawide-3,\n  .grid.is-ultrawide-3 >.column:not([class*='is-']),\n  .row.is-ultrawide-3 >.column:not([class*='is-']) {\n    flex: 0 0 25%;\n    min-width: 25%;\n  }\n  .column.is-offset-ultrawide-3 {\n    margin-left: 25%;\n  }\n  .column.is-ultrawide-4,\n  .grid.is-ultrawide-4 >.column:not([class*='is-']),\n  .row.is-ultrawide-4 >.column:not([class*='is-']) {\n    flex: 0 0 33.33333333333333%;\n    min-width: 33.33333333333333%;\n  }\n  .column.is-offset-ultrawide-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .column.is-ultrawide-5,\n  .grid.is-ultrawide-5 >.column:not([class*='is-']),\n  .row.is-ultrawide-5 >.column:not([class*='is-']) {\n    flex: 0 0 41.66666666666667%;\n    min-width: 41.66666666666667%;\n  }\n  .column.is-offset-ultrawide-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .column.is-ultrawide-6,\n  .grid.is-ultrawide-6 >.column:not([class*='is-']),\n  .row.is-ultrawide-6 >.column:not([class*='is-']) {\n    flex: 0 0 50%;\n    min-width: 50%;\n  }\n  .column.is-offset-ultrawide-6 {\n    margin-left: 50%;\n  }\n  .column.is-ultrawide-7,\n  .grid.is-ultrawide-7 >.column:not([class*='is-']),\n  .row.is-ultrawide-7 >.column:not([class*='is-']) {\n    flex: 0 0 58.333333333333336%;\n    min-width: 58.333333333333336%;\n  }\n  .column.is-offset-ultrawide-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .column.is-ultrawide-8,\n  .grid.is-ultrawide-8 >.column:not([class*='is-']),\n  .row.is-ultrawide-8 >.column:not([class*='is-']) {\n    flex: 0 0 66.66666666666666%;\n    min-width: 66.66666666666666%;\n  }\n  .column.is-offset-ultrawide-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .column.is-ultrawide-9,\n  .grid.is-ultrawide-9 >.column:not([class*='is-']),\n  .row.is-ultrawide-9 >.column:not([class*='is-']) {\n    flex: 0 0 75%;\n    min-width: 75%;\n  }\n  .column.is-offset-ultrawide-9 {\n    margin-left: 75%;\n  }\n  .column.is-ultrawide-10,\n  .grid.is-ultrawide-10 >.column:not([class*='is-']),\n  .row.is-ultrawide-10 >.column:not([class*='is-']) {\n    flex: 0 0 83.33333333333334%;\n    min-width: 83.33333333333334%;\n  }\n  .column.is-offset-ultrawide-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .column.is-ultrawide-11,\n  .grid.is-ultrawide-11 >.column:not([class*='is-']),\n  .row.is-ultrawide-11 >.column:not([class*='is-']) {\n    flex: 0 0 91.66666666666666%;\n    min-width: 91.66666666666666%;\n  }\n  .column.is-offset-ultrawide-11 {\n    margin-left: 91.66666666666666%;\n  }\n  .column.is-ultrawide-12,\n  .grid.is-ultrawide-12 >.column:not([class*='is-']),\n  .row.is-ultrawide-12 >.column:not([class*='is-']) {\n    flex: 0 0 100%;\n    min-width: 100%;\n  }\n  .column.is-offset-ultrawide-12 {\n    margin-left: 100%;\n  }\n}\n.column.is-middle {\n  align-self: center;\n}\n.column.is-top {\n  align-self: flex-start;\n}\n.column.is-bottom {\n  align-self: flex-end;\n}\n.column >.row {\n  margin: 0 -1.5625vw;\n  min-width: calc(100% + 3.125vw);\n}\n.grid,\n.row {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  margin-right: -1.5625vw;\n  margin-left: -1.5625vw;\n  width: auto;\n}\n.grid.is-center,\n.row.is-center {\n  justify-content: center;\n}\n.grid.is-end,\n.row.is-end {\n  justify-content: flex-end;\n}\n.grid.is-start,\n.row.is-start {\n  justify-content: flex-start;\n}\n.grid.is-middle,\n.row.is-middle {\n  align-items: center;\n}\n.grid.is-top,\n.row.is-top {\n  align-items: flex-start;\n}\n.grid.is-bottom,\n.row.is-bottom {\n  align-items: flex-end;\n}\n.grid.is-vertical,\n.row.is-vertical {\n  flex-direction: column;\n  align-items: flex-start;\n}\n.grid.is-shrink >.column:not([class*='is-']),\n.row.is-shrink >.column:not([class*='is-']) {\n  flex: 0 0 auto;\n}\n.grid.is-relaxed,\n.row.is-relaxed {\n  margin-right: 0;\n  margin-left: 0;\n}\n.grid.is-relaxed >.column,\n.row.is-relaxed >.column {\n  padding: 0;\n}\n.row {\n  width: 100%;\n  justify-content: inherit;\n  margin: 0;\n}\n.button {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  margin-bottom: 10px;\n  padding: 0.5em 0.75em;\n  outline: none;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 4px;\n  background-clip: border-box;\n  vertical-align: top;\n  text-align: center;\n  text-decoration: none;\n  cursor: pointer;\n  transition: 0.4s ease-in-out;\n  border-color: #0072ff;\n  background-color: #0072ff;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-inverse {\n  background-color: transparent;\n  color: #0072ff;\n  fill: #0072ff;\n  stroke-width: 0;\n}\n.button:hover,\n.button:active,\n.button.is-active {\n  border-color: #0061d9;\n  background-color: #0061d9;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button:focus {\n  box-shadow: 0 0 0 3px rgba(0,114,255,0.25);\n}\n.button[disabled] {\n  border-color: #0072ff;\n  background-color: #0072ff;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-primary,\n.buttons.is-primary >.button,\n.input-group.is-primary >.button {\n  border-color: #0072ff;\n  background-color: #0072ff;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-primary.is-inverse,\n.buttons.is-primary >.button.is-inverse,\n.input-group.is-primary >.button.is-inverse,\n.buttons.is-primary.is-inverse >.button {\n  background-color: transparent;\n  color: #0072ff;\n  fill: #0072ff;\n  stroke-width: 0;\n}\n.button.is-primary:hover,\n.buttons.is-primary >.button:hover,\n.input-group.is-primary >.button:hover,\n.button.is-primary:active,\n.buttons.is-primary >.button:active,\n.input-group.is-primary >.button:active,\n.button.is-primary.is-active,\n.buttons.is-primary >.button.is-active,\n.input-group.is-primary >.button.is-active {\n  border-color: #0061d9;\n  background-color: #0061d9;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-primary:focus,\n.buttons.is-primary >.button:focus,\n.input-group.is-primary >.button:focus {\n  box-shadow: 0 0 0 3px rgba(0,114,255,0.25);\n}\n.button.is-primary[disabled],\n.buttons.is-primary >.button[disabled],\n.input-group.is-primary >.button[disabled] {\n  border-color: #0072ff;\n  background-color: #0072ff;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-secondary,\n.buttons.is-secondary >.button,\n.input-group.is-secondary >.button {\n  border-color: #c7c7c7;\n  background-color: #c7c7c7;\n  color: #000;\n  fill: #000;\n  stroke-width: 0;\n}\n.button.is-secondary.is-inverse,\n.buttons.is-secondary >.button.is-inverse,\n.input-group.is-secondary >.button.is-inverse,\n.buttons.is-secondary.is-inverse >.button {\n  background-color: transparent;\n  color: #c7c7c7;\n  fill: #c7c7c7;\n  stroke-width: 0;\n}\n.button.is-secondary:hover,\n.buttons.is-secondary >.button:hover,\n.input-group.is-secondary >.button:hover,\n.button.is-secondary:active,\n.buttons.is-secondary >.button:active,\n.input-group.is-secondary >.button:active,\n.button.is-secondary.is-active,\n.buttons.is-secondary >.button.is-active,\n.input-group.is-secondary >.button.is-active {\n  border-color: #a9a9a9;\n  background-color: #a9a9a9;\n  color: #000;\n  fill: #000;\n  stroke-width: 0;\n}\n.button.is-secondary:focus,\n.buttons.is-secondary >.button:focus,\n.input-group.is-secondary >.button:focus {\n  box-shadow: 0 0 0 3px rgba(199,199,199,0.25);\n}\n.button.is-secondary[disabled],\n.buttons.is-secondary >.button[disabled],\n.input-group.is-secondary >.button[disabled] {\n  border-color: #c7c7c7;\n  background-color: #c7c7c7;\n  color: #000;\n  fill: #000;\n  stroke-width: 0;\n}\n.button.is-info,\n.buttons.is-info >.button,\n.input-group.is-info >.button {\n  border-color: #00d4f0;\n  background-color: #00d4f0;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-info.is-inverse,\n.buttons.is-info >.button.is-inverse,\n.input-group.is-info >.button.is-inverse,\n.buttons.is-info.is-inverse >.button {\n  background-color: transparent;\n  color: #00d4f0;\n  fill: #00d4f0;\n  stroke-width: 0;\n}\n.button.is-info:hover,\n.buttons.is-info >.button:hover,\n.input-group.is-info >.button:hover,\n.button.is-info:active,\n.buttons.is-info >.button:active,\n.input-group.is-info >.button:active,\n.button.is-info.is-active,\n.buttons.is-info >.button.is-active,\n.input-group.is-info >.button.is-active {\n  border-color: #00b4cc;\n  background-color: #00b4cc;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-info:focus,\n.buttons.is-info >.button:focus,\n.input-group.is-info >.button:focus {\n  box-shadow: 0 0 0 3px rgba(0,212,240,0.25);\n}\n.button.is-info[disabled],\n.buttons.is-info >.button[disabled],\n.input-group.is-info >.button[disabled] {\n  border-color: #00d4f0;\n  background-color: #00d4f0;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-success,\n.buttons.is-success >.button,\n.input-group.is-success >.button {\n  border-color: #18d88b;\n  background-color: #18d88b;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-success.is-inverse,\n.buttons.is-success >.button.is-inverse,\n.input-group.is-success >.button.is-inverse,\n.buttons.is-success.is-inverse >.button {\n  background-color: transparent;\n  color: #18d88b;\n  fill: #18d88b;\n  stroke-width: 0;\n}\n.button.is-success:hover,\n.buttons.is-success >.button:hover,\n.input-group.is-success >.button:hover,\n.button.is-success:active,\n.buttons.is-success >.button:active,\n.input-group.is-success >.button:active,\n.button.is-success.is-active,\n.buttons.is-success >.button.is-active,\n.input-group.is-success >.button.is-active {\n  border-color: #14b876;\n  background-color: #14b876;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-success:focus,\n.buttons.is-success >.button:focus,\n.input-group.is-success >.button:focus {\n  box-shadow: 0 0 0 3px rgba(24,216,139,0.25);\n}\n.button.is-success[disabled],\n.buttons.is-success >.button[disabled],\n.input-group.is-success >.button[disabled] {\n  border-color: #18d88b;\n  background-color: #18d88b;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-warning,\n.buttons.is-warning >.button,\n.input-group.is-warning >.button {\n  border-color: #ffa557;\n  background-color: #ffa557;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-warning.is-inverse,\n.buttons.is-warning >.button.is-inverse,\n.input-group.is-warning >.button.is-inverse,\n.buttons.is-warning.is-inverse >.button {\n  background-color: transparent;\n  color: #ffa557;\n  fill: #ffa557;\n  stroke-width: 0;\n}\n.button.is-warning:hover,\n.buttons.is-warning >.button:hover,\n.input-group.is-warning >.button:hover,\n.button.is-warning:active,\n.buttons.is-warning >.button:active,\n.input-group.is-warning >.button:active,\n.button.is-warning.is-active,\n.buttons.is-warning >.button.is-active,\n.input-group.is-warning >.button.is-active {\n  border-color: #ff8a24;\n  background-color: #ff8a24;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-warning:focus,\n.buttons.is-warning >.button:focus,\n.input-group.is-warning >.button:focus {\n  box-shadow: 0 0 0 3px rgba(255,165,87,0.25);\n}\n.button.is-warning[disabled],\n.buttons.is-warning >.button[disabled],\n.input-group.is-warning >.button[disabled] {\n  border-color: #ffa557;\n  background-color: #ffa557;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-danger,\n.buttons.is-danger >.button,\n.input-group.is-danger >.button {\n  border-color: #ff3d3d;\n  background-color: #ff3d3d;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-danger.is-inverse,\n.buttons.is-danger >.button.is-inverse,\n.input-group.is-danger >.button.is-inverse,\n.buttons.is-danger.is-inverse >.button {\n  background-color: transparent;\n  color: #ff3d3d;\n  fill: #ff3d3d;\n  stroke-width: 0;\n}\n.button.is-danger:hover,\n.buttons.is-danger >.button:hover,\n.input-group.is-danger >.button:hover,\n.button.is-danger:active,\n.buttons.is-danger >.button:active,\n.input-group.is-danger >.button:active,\n.button.is-danger.is-active,\n.buttons.is-danger >.button.is-active,\n.input-group.is-danger >.button.is-active {\n  border-color: #ff0e0e;\n  background-color: #ff0e0e;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-danger:focus,\n.buttons.is-danger >.button:focus,\n.input-group.is-danger >.button:focus {\n  box-shadow: 0 0 0 3px rgba(255,61,61,0.25);\n}\n.button.is-danger[disabled],\n.buttons.is-danger >.button[disabled],\n.input-group.is-danger >.button[disabled] {\n  border-color: #ff3d3d;\n  background-color: #ff3d3d;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-black,\n.buttons.is-black >.button,\n.input-group.is-black >.button {\n  border-color: #000;\n  background-color: #000;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-black.is-inverse,\n.buttons.is-black >.button.is-inverse,\n.input-group.is-black >.button.is-inverse,\n.buttons.is-black.is-inverse >.button {\n  background-color: transparent;\n  color: #000;\n  fill: #000;\n  stroke-width: 0;\n}\n.button.is-black:hover,\n.buttons.is-black >.button:hover,\n.input-group.is-black >.button:hover,\n.button.is-black:active,\n.buttons.is-black >.button:active,\n.input-group.is-black >.button:active,\n.button.is-black.is-active,\n.buttons.is-black >.button.is-active,\n.input-group.is-black >.button.is-active {\n  border-color: #000;\n  background-color: #000;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-black:focus,\n.buttons.is-black >.button:focus,\n.input-group.is-black >.button:focus {\n  box-shadow: 0 0 0 3px rgba(0,0,0,0.25);\n}\n.button.is-black[disabled],\n.buttons.is-black >.button[disabled],\n.input-group.is-black >.button[disabled] {\n  border-color: #000;\n  background-color: #000;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-white,\n.buttons.is-white >.button,\n.input-group.is-white >.button {\n  border-color: #fff;\n  background-color: #fff;\n  color: #000;\n  fill: #000;\n  stroke-width: 0;\n}\n.button.is-white.is-inverse,\n.buttons.is-white >.button.is-inverse,\n.input-group.is-white >.button.is-inverse,\n.buttons.is-white.is-inverse >.button {\n  background-color: transparent;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-white:hover,\n.buttons.is-white >.button:hover,\n.input-group.is-white >.button:hover,\n.button.is-white:active,\n.buttons.is-white >.button:active,\n.input-group.is-white >.button:active,\n.button.is-white.is-active,\n.buttons.is-white >.button.is-active,\n.input-group.is-white >.button.is-active {\n  border-color: #d9d9d9;\n  background-color: #d9d9d9;\n  color: #000;\n  fill: #000;\n  stroke-width: 0;\n}\n.button.is-white:focus,\n.buttons.is-white >.button:focus,\n.input-group.is-white >.button:focus {\n  box-shadow: 0 0 0 3px rgba(255,255,255,0.25);\n}\n.button.is-white[disabled],\n.buttons.is-white >.button[disabled],\n.input-group.is-white >.button[disabled] {\n  border-color: #fff;\n  background-color: #fff;\n  color: #000;\n  fill: #000;\n  stroke-width: 0;\n}\n.button.is-dark,\n.buttons.is-dark >.button,\n.input-group.is-dark >.button {\n  border-color: #323c47;\n  background-color: #323c47;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-dark.is-inverse,\n.buttons.is-dark >.button.is-inverse,\n.input-group.is-dark >.button.is-inverse,\n.buttons.is-dark.is-inverse >.button {\n  background-color: transparent;\n  color: #323c47;\n  fill: #323c47;\n  stroke-width: 0;\n}\n.button.is-dark:hover,\n.buttons.is-dark >.button:hover,\n.input-group.is-dark >.button:hover,\n.button.is-dark:active,\n.buttons.is-dark >.button:active,\n.input-group.is-dark >.button:active,\n.button.is-dark.is-active,\n.buttons.is-dark >.button.is-active,\n.input-group.is-dark >.button.is-active {\n  border-color: #2a333c;\n  background-color: #2a333c;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-dark:focus,\n.buttons.is-dark >.button:focus,\n.input-group.is-dark >.button:focus {\n  box-shadow: 0 0 0 3px rgba(50,60,71,0.25);\n}\n.button.is-dark[disabled],\n.buttons.is-dark >.button[disabled],\n.input-group.is-dark >.button[disabled] {\n  border-color: #323c47;\n  background-color: #323c47;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.button.is-light,\n.buttons.is-light >.button,\n.input-group.is-light >.button {\n  border-color: #f5f5f5;\n  background-color: #f5f5f5;\n  color: #000;\n  fill: #000;\n  stroke-width: 0;\n}\n.button.is-light.is-inverse,\n.buttons.is-light >.button.is-inverse,\n.input-group.is-light >.button.is-inverse,\n.buttons.is-light.is-inverse >.button {\n  background-color: transparent;\n  color: #f5f5f5;\n  fill: #f5f5f5;\n  stroke-width: 0;\n}\n.button.is-light:hover,\n.buttons.is-light >.button:hover,\n.input-group.is-light >.button:hover,\n.button.is-light:active,\n.buttons.is-light >.button:active,\n.input-group.is-light >.button:active,\n.button.is-light.is-active,\n.buttons.is-light >.button.is-active,\n.input-group.is-light >.button.is-active {\n  border-color: #d0d0d0;\n  background-color: #d0d0d0;\n  color: #000;\n  fill: #000;\n  stroke-width: 0;\n}\n.button.is-light:focus,\n.buttons.is-light >.button:focus,\n.input-group.is-light >.button:focus {\n  box-shadow: 0 0 0 3px rgba(245,245,245,0.25);\n}\n.button.is-light[disabled],\n.buttons.is-light >.button[disabled],\n.input-group.is-light >.button[disabled] {\n  border-color: #f5f5f5;\n  background-color: #f5f5f5;\n  color: #000;\n  fill: #000;\n  stroke-width: 0;\n}\n.button .icon:first-child:not(:last-child) {\n  margin-right: 0.25em;\n}\n.button .icon:last-child:not(:first-child) {\n  margin-left: 0.25em;\n}\n.button .icon:only-child {\n  margin: 0 -0.25em;\n}\n.button .label {\n  margin: -0.5em 0;\n}\n.button.is-block,\n.buttons.is-block >.button,\n.input-group.is-block >.button {\n  width: 100%;\n}\n.button.is-rounded,\n.buttons.is-rounded >.button,\n.input-group.is-rounded >.button {\n  border-width: 1px;\n  border-radius: 10em;\n}\n.button.is-clean {\n  margin: 0;\n  border: 0;\n  background-color: transparent;\n  color: #000;\n  fill: #000;\n  stroke-width: 0;\n}\n.button.is-link {\n  padding-top: 0.3em;\n  padding-bottom: 0.3em;\n  padding-left: 0;\n  padding-right: 0.7em;\n  border: 0;\n  background-color: transparent;\n  color: #0072ff;\n  fill: #0072ff;\n  stroke-width: 0;\n}\n.button.is-link:after {\n  position: absolute;\n  display: block;\n  content: '';\n  width: 100%;\n  height: 0.15em;\n  background-color: #0072ff;\n  bottom: 0;\n  left: 0;\n  right: 0;\n}\n.button.is-link:hover,\n.button.is-link:active,\n.button.is-link.is-active {\n  color: #eb008b;\n}\n.button.is-link:hover:after,\n.button.is-link:active:after,\n.button.is-link.is-active:after {\n  background-color: #eb008b;\n  height: 0.25em;\n}\n.button:hover {\n  text-decoration: none;\n}\n.button.is-disabled,\n.button[disabled],\n.buttons.is-disabled >.button,\n.buttons[disabled] >.button,\n.input-group.is-disabled >.button {\n  opacity: 0.8;\n  cursor: not-allowed;\n}\n.buttons {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  margin-bottom: 10px;\n}\n.buttons >.label {\n  z-index: 2;\n  margin: 0 -18.5px;\n}\n.buttons >.button {\n  margin-bottom: 0;\n}\n.buttons >.button:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.buttons >.button:first-child {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.buttons >.button:last-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.buttons.is-inverse .button:not(:first-child):not(:last-child) {\n  border-left-width: 0;\n}\n.buttons.is-inverse .button:last-child {\n  border-left-width: 0;\n}\n.label {\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  overflow: hidden;\n  margin: 0 2px;\n  margin-bottom: 10px;\n  padding: 0.5em;\n  min-width: 37px;\n  border-radius: 4px;\n  color: #000;\n  vertical-align: top;\n  font-weight: 200;\n  line-height: 1;\n  background-color: #c1c1c1;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.label img {\n  margin: -0.75em;\n  height: 2.5em;\n  vertical-align: top;\n}\n.label .icon {\n  height: 1em;\n  width: 1em;\n}\n.label .icon:first-child:not(:last-child),\n.label img:first-child:not(:last-child) {\n  margin-right: 0.25em;\n}\n.label .icon:last-child:not(:first-child),\n.label img:last-child:not(:first-child) {\n  margin-left: 0.25em;\n}\n.label.is-primary {\n  background-color: #0072ff;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.label.is-secondary {\n  background-color: #c7c7c7;\n  color: #000;\n  fill: #000;\n  stroke-width: 0;\n}\n.label.is-info {\n  background-color: #00d4f0;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.label.is-success {\n  background-color: #18d88b;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.label.is-warning {\n  background-color: #ffa557;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.label.is-danger {\n  background-color: #ff3d3d;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.label.is-black {\n  background-color: #000;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.label.is-white {\n  background-color: #fff;\n  color: #000;\n  fill: #000;\n  stroke-width: 0;\n}\n.label.is-dark {\n  background-color: #323c47;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.label.is-light {\n  background-color: #f5f5f5;\n  color: #000;\n  fill: #000;\n  stroke-width: 0;\n}\n.label.is-rounded {\n  border-radius: 10em;\n}\n.label.is-block {\n  display: flex;\n}\n.label.is-float {\n  position: absolute;\n  top: 0;\n  margin: 0;\n  margin-top: -1em;\n  right: 0;\n  margin-right: -1em;\n}\n.input {\n  margin-bottom: 10px;\n  padding: 0.5em 0.75em;\n  width: 100%;\n  outline: none;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 4px;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  border-color: #c1c1c1;\n}\n.input:focus {\n  border-color: #0061d9;\n  box-shadow: 0 0 0 3px rgba(0,114,255,0.25);\n}\n.input.is-primary,\n.input-group.is-primary >.input {\n  border-color: #0072ff;\n}\n.input.is-primary:focus,\n.input-group.is-primary >.input:focus {\n  border-color: #0061d9;\n  box-shadow: 0 0 0 3px rgba(0,114,255,0.25);\n}\n.input.is-secondary,\n.input-group.is-secondary >.input {\n  border-color: #c7c7c7;\n}\n.input.is-secondary:focus,\n.input-group.is-secondary >.input:focus {\n  border-color: #a9a9a9;\n  box-shadow: 0 0 0 3px rgba(199,199,199,0.25);\n}\n.input.is-info,\n.input-group.is-info >.input {\n  border-color: #00d4f0;\n}\n.input.is-info:focus,\n.input-group.is-info >.input:focus {\n  border-color: #00b4cc;\n  box-shadow: 0 0 0 3px rgba(0,212,240,0.25);\n}\n.input.is-success,\n.input-group.is-success >.input {\n  border-color: #18d88b;\n}\n.input.is-success:focus,\n.input-group.is-success >.input:focus {\n  border-color: #14b876;\n  box-shadow: 0 0 0 3px rgba(24,216,139,0.25);\n}\n.input.is-warning,\n.input-group.is-warning >.input {\n  border-color: #ffa557;\n}\n.input.is-warning:focus,\n.input-group.is-warning >.input:focus {\n  border-color: #ff8a24;\n  box-shadow: 0 0 0 3px rgba(255,165,87,0.25);\n}\n.input.is-danger,\n.input-group.is-danger >.input {\n  border-color: #ff3d3d;\n}\n.input.is-danger:focus,\n.input-group.is-danger >.input:focus {\n  border-color: #ff0e0e;\n  box-shadow: 0 0 0 3px rgba(255,61,61,0.25);\n}\n.input.is-black,\n.input-group.is-black >.input {\n  border-color: #000;\n}\n.input.is-black:focus,\n.input-group.is-black >.input:focus {\n  border-color: #000;\n  box-shadow: 0 0 0 3px rgba(0,0,0,0.25);\n}\n.input.is-white,\n.input-group.is-white >.input {\n  border-color: #fff;\n}\n.input.is-white:focus,\n.input-group.is-white >.input:focus {\n  border-color: #d9d9d9;\n  box-shadow: 0 0 0 3px rgba(255,255,255,0.25);\n}\n.input.is-dark,\n.input-group.is-dark >.input {\n  border-color: #323c47;\n}\n.input.is-dark:focus,\n.input-group.is-dark >.input:focus {\n  border-color: #2a333c;\n  box-shadow: 0 0 0 3px rgba(50,60,71,0.25);\n}\n.input.is-light,\n.input-group.is-light >.input {\n  border-color: #f5f5f5;\n}\n.input.is-light:focus,\n.input-group.is-light >.input:focus {\n  border-color: #d0d0d0;\n  box-shadow: 0 0 0 3px rgba(245,245,245,0.25);\n}\n.input.is-block,\n.input-group.is-block >.input {\n  width: 100%;\n}\n.input.is-rounded,\n.input-group.is-rounded >.input {\n  border-radius: 10em;\n}\n.input:disabled,\n.input.is-disabled,\n.input-group.is-disabled >.input {\n  cursor: not-allowed;\n  background: #c1c1c1;\n}\n.input.is-disabled,\n.input-group.is-disabled >.input {\n  pointer-events: none;\n}\n.input-tag {\n  display: inline-flex;\n  padding: 0.5em 0.75em;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 4px;\n  vertical-align: top;\n  text-align: center;\n  border-color: #c1c1c1;\n  background-color: #c1c1c1;\n  color: #323c47;\n  fill: #323c47;\n  stroke-width: 0;\n}\n.input-tag .icon:first-child:not(:last-child) {\n  margin-right: 0.25em;\n}\n.input-tag .icon:last-child:not(:first-child) {\n  margin-left: 0.25em;\n}\n.input-tag .icon:only-child {\n  margin: 0 -0.25em;\n}\n.input-tag.is-primary,\n.input-group.is-primary >.input-tag {\n  border-color: #0072ff;\n  background-color: #0072ff;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.input-tag.is-secondary,\n.input-group.is-secondary >.input-tag {\n  border-color: #c7c7c7;\n  background-color: #c7c7c7;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.input-tag.is-info,\n.input-group.is-info >.input-tag {\n  border-color: #00d4f0;\n  background-color: #00d4f0;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.input-tag.is-success,\n.input-group.is-success >.input-tag {\n  border-color: #18d88b;\n  background-color: #18d88b;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.input-tag.is-warning,\n.input-group.is-warning >.input-tag {\n  border-color: #ffa557;\n  background-color: #ffa557;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.input-tag.is-danger,\n.input-group.is-danger >.input-tag {\n  border-color: #ff3d3d;\n  background-color: #ff3d3d;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.input-tag.is-black,\n.input-group.is-black >.input-tag {\n  border-color: #000;\n  background-color: #000;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.input-tag.is-white,\n.input-group.is-white >.input-tag {\n  border-color: #fff;\n  background-color: #fff;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.input-tag.is-dark,\n.input-group.is-dark >.input-tag {\n  border-color: #323c47;\n  background-color: #323c47;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.input-tag.is-light,\n.input-group.is-light >.input-tag {\n  border-color: #f5f5f5;\n  background-color: #f5f5f5;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.input-tag.is-rounded,\n.input-group.is-rounded >.input-tag {\n  border-radius: 10em;\n}\n.input-tag.is-inverse {\n  background-color: transparent;\n}\n.input-tag.is-clean {\n  position: relative;\n  background-color: #fff;\n  fill: #c1c1c1;\n  stroke-width: 0;\n  border-right: 0;\n  margin-right: -2px;\n}\n.input-tag.is-disabled,\n.input-group.is-disabled >.input-tag {\n  opacity: 0.9;\n  cursor: not-allowed;\n}\n.input-group {\n  display: flex;\n  margin-bottom: 10px;\n}\n.input-group >*:not(.inputGroup-label) {\n  margin-bottom: 0;\n}\n.input-group-label {\n  flex: 1;\n  margin-bottom: 0.5em;\n  margin-right: 10px;\n  white-space: nowrap;\n}\n.input-group.has-label {\n  flex-wrap: wrap;\n}\n.input-group.has-labelInline {\n  align-items: center;\n}\n.input-group.has-itemAfter .button {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group.has-itemAfter .input {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-right: 0;\n}\n.input-group.has-itemBefore .input-tag {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group.has-itemBefore .input {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n  border-left: 0;\n}\n.file {\n  margin-bottom: 10px;\n  padding: 0.5em 0.75em;\n  width: 100%;\n  border: 2px dashed #0072ff;\n  border-radius: 4px;\n  font-size: 16px;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n}\n.checkbox,\n.radio {\n  margin: 10px 0;\n  display: flex;\n  align-items: center;\n  cursor: pointer;\n}\n.checkbox-label,\n.radio-label {\n  vertical-align: middle;\n}\n.checkbox-input,\n.radio-input {\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  padding: 0;\n  width: 1.3em;\n  height: 1.3em;\n  border: 1px solid #c1c1c1;\n  border-radius: 4px;\n  cursor: pointer;\n  margin-right: 0.4em;\n  outline: none;\n  appearance: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n}\n.checkbox-input:focus,\n.radio-input:focus {\n  border-color: #0072ff;\n  box-shadow: 0 0 0 3px rgba(0,114,255,0.25);\n}\n.checkbox-input:checked,\n.radio-input:checked {\n  background-color: #f5f5f5;\n}\n.checkbox-input:checked:after,\n.radio-input:checked:after {\n  opacity: 1;\n}\n.checkbox-input:after,\n.radio-input:after {\n  display: block;\n  opacity: 0;\n  width: 0.2em;\n  height: 0.5em;\n  border: solid #0072ff;\n  border-width: 0 0.13em 0.13em 0;\n  content: '';\n  transform: translate3d(0, -0.1em, 0) rotate(45deg);\n}\n.checkbox.is-disabled .checkbox-input,\n.radio.is-disabled .radio-input,\n.checkbox[disabled] .checkbox-input,\n.radio[disabled] .radio-input {\n  opacity: 0.6;\n  cursor: not-allowed;\n  pointer-events: none;\n}\n.checkbox.is-inline,\n.radio.is-inline {\n  display: inline-flex;\n  margin-right: 0.8em;\n}\n.checkbox.is-disabled,\n.radio.is-disabled,\n.checkbox[disabled],\n.radio[disabled] {\n  pointer-events: none;\n  cursor: not-allowed;\n}\n.icon {\n  display: inline;\n  vertical-align: middle;\n  line-height: inherit;\n  font-size: 1em;\n  width: 1em;\n  height: 1em;\n}\n.icon.is-primary {\n  fill: #0072ff;\n  stroke-width: 0;\n}\n.icon.is-secondary {\n  fill: #c7c7c7;\n  stroke-width: 0;\n}\n.icon.is-info {\n  fill: #00d4f0;\n  stroke-width: 0;\n}\n.icon.is-success {\n  fill: #18d88b;\n  stroke-width: 0;\n}\n.icon.is-warning {\n  fill: #ffa557;\n  stroke-width: 0;\n}\n.icon.is-danger {\n  fill: #ff3d3d;\n  stroke-width: 0;\n}\n.icon.is-black {\n  fill: #000;\n  stroke-width: 0;\n}\n.icon.is-white {\n  fill: #fff;\n  stroke-width: 0;\n}\n.icon.is-dark {\n  fill: #323c47;\n  stroke-width: 0;\n}\n.icon.is-light {\n  fill: #f5f5f5;\n  stroke-width: 0;\n}\n.icon.is-tiny {\n  width: calc( 0.253378378378378vw + 8.554054054054054px );\n}\n@media screen and (max-width: 767px) {\n  .icon.is-tiny {\n    width: 10.5px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  .icon.is-tiny {\n    width: 12px;\n  }\n}\n.icon.is-tiny {\n  height: calc( 0.253378378378378vw + 8.554054054054054px );\n}\n@media screen and (max-width: 767px) {\n  .icon.is-tiny {\n    height: 10.5px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  .icon.is-tiny {\n    height: 12px;\n  }\n}\n.icon.is-small {\n  width: calc( 0.295608108108108vw + 9.97972972972973px );\n}\n@media screen and (max-width: 767px) {\n  .icon.is-small {\n    width: 12.25px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  .icon.is-small {\n    width: 14px;\n  }\n}\n.icon.is-small {\n  height: calc( 0.295608108108108vw + 9.97972972972973px );\n}\n@media screen and (max-width: 767px) {\n  .icon.is-small {\n    height: 12.25px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  .icon.is-small {\n    height: 14px;\n  }\n}\n.icon.is-normal {\n  width: calc( 0.337837837837838vw + 11.405405405405405px );\n}\n@media screen and (max-width: 767px) {\n  .icon.is-normal {\n    width: 14px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  .icon.is-normal {\n    width: 16px;\n  }\n}\n.icon.is-normal {\n  height: calc( 0.337837837837838vw + 11.405405405405405px );\n}\n@media screen and (max-width: 767px) {\n  .icon.is-normal {\n    height: 14px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  .icon.is-normal {\n    height: 16px;\n  }\n}\n.icon.is-large {\n  width: calc( 0.422297297297297vw + 14.256756756756756px );\n}\n@media screen and (max-width: 767px) {\n  .icon.is-large {\n    width: 17.5px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  .icon.is-large {\n    width: 20px;\n  }\n}\n.icon.is-large {\n  height: calc( 0.422297297297297vw + 14.256756756756756px );\n}\n@media screen and (max-width: 767px) {\n  .icon.is-large {\n    height: 17.5px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  .icon.is-large {\n    height: 20px;\n  }\n}\n.icon.is-massive {\n  width: calc( 0.506756756756757vw + 17.10810810810811px );\n}\n@media screen and (max-width: 767px) {\n  .icon.is-massive {\n    width: 21px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  .icon.is-massive {\n    width: 24px;\n  }\n}\n.icon.is-massive {\n  height: calc( 0.506756756756757vw + 17.10810810810811px );\n}\n@media screen and (max-width: 767px) {\n  .icon.is-massive {\n    height: 21px;\n  }\n}\n@media screen and (min-width: 1360px) {\n  .icon.is-massive {\n    height: 24px;\n  }\n}\n.radio-input {\n  border-radius: 10em;\n}\n.radio-input:after {\n  width: 70%;\n  height: 70%;\n  border: none;\n  border-radius: 10em;\n  background: #0072ff;\n  transform: none;\n}\n.switcher {\n  display: inline-flex;\n  margin: 5px;\n  vertical-align: middle;\n}\n.switcher-input {\n  display: none;\n}\n.switcher-input:checked + .switcher-body {\n  background-color: #0072ff;\n  padding-left: 0.5em;\n  padding-right: 1.3em;\n}\n.switcher-input:checked + .switcher-body .switcher-handle {\n  left: calc(100% - 1.3em);\n}\n.switcher-input:checked + .switcher-body .switcher-true {\n  max-width: 40em;\n  opacity: 1;\n}\n.switcher-input:checked + .switcher-body .switcher-false {\n  max-width: 0em;\n  opacity: 0;\n}\n.switcher-input[disabled] {\n  opacity: 0.6;\n  cursor: not-allowed;\n}\n.switcher-input[disabled] + .switcher-body {\n  opacity: 0.6;\n  cursor: not-allowed;\n}\n.switcher-body {\n  position: relative;\n  display: inline-flex;\n  padding: 0;\n  padding-left: 1.3em;\n  padding-right: 0.5em;\n  min-width: 2.6em;\n  height: 1.3em;\n  background-color: #000;\n  cursor: pointer;\n  transition: 0.3s;\n  justify-content: center;\n  align-items: center;\n  color: #fff;\n  user-select: none;\n}\n.switcher-body p {\n  font-size: 0.8em;\n}\n.switcher-true {\n  max-width: 0em;\n  opacity: 0;\n}\n.switcher-false {\n  max-width: 40em;\n  opacity: 1;\n}\n.switcher-handle {\n  position: absolute;\n  left: 0;\n  margin: 0.25em;\n  top: 0;\n  display: block;\n  width: 0.8em;\n  height: 0.8em;\n  background-color: #fff;\n  content: '';\n  transition: 0.3s;\n}\n.switcher-handle.is-dragging {\n  transition: 0;\n}\n.switcher.is-rounded .switcher-handle,\n.switcher.is-rounded .switcher-body {\n  border-radius: 100em;\n}\n.switcher.is-disabled,\n.switcher[disabled] {\n  cursor: not-allowed;\n  pointer-events: none;\n  opacity: 0.6;\n}\n.switcher.is-disabled .switcher-input,\n.switcher[disabled] .switcher-input {\n  cursor: not-allowed;\n}\n.table {\n  overflow: hidden;\n  width: 100%;\n  border: 1px solid #000;\n  border-spacing: 0;\n  border-collapse: separate;\n  border-radius: 4px;\n  color: #000;\n  text-align: left;\n}\n.table:not(:last-child) {\n  margin-bottom: 10px;\n}\n.table th:not(:last-child),\n.table td:not(:last-child) {\n  border-right: 1px solid #000;\n}\n@media screen and (max-width: 767px) {\n  .table th:not(:last-child),\n  .table td:not(:last-child) {\n    border-right: 0;\n  }\n}\n@media screen and (max-width: 767px) {\n  .table th,\n  .table td {\n    display: block;\n    width: 100%;\n  }\n}\n.table thead {\n  background-color: #fff;\n}\n.table thead th {\n  border-bottom: 1px solid #000;\n  padding: 1em 0.5em;\n  font-weight: bold;\n}\n@media screen and (max-width: 767px) {\n  .table thead th {\n    border-bottom: 0;\n  }\n}\n.table tfoot {\n  background-color: #fff;\n}\n.table tfoot th {\n  border-top: 1px solid #000;\n  padding: 0.5em;\n}\n@media screen and (max-width: 767px) {\n  .table tr {\n    display: block;\n    border-top: 1px solid #000;\n  }\n}\n.table td {\n  padding: 0.5em;\n  border-top: 1px solid #000;\n  background-color: #fff;\n}\n@media screen and (max-width: 767px) {\n  .table td {\n    border: 0;\n  }\n}\n.table-wrapper {\n  position: relative;\n  display: table;\n  overflow-x: auto;\n  margin: 10px auto;\n  padding: 0.5em;\n  border: 1px solid #fff;\n  border-radius: 4px;\n  background-color: #fff;\n  width: 100%;\n}\n.table-sort {\n  float: right;\n  padding: 0;\n  outline: 0;\n  background: none;\n  border: none;\n}\n.table-sort.is-active {\n  fill: #0072ff;\n  stroke: #0072ff;\n}\n.table-sort.is-desc {\n  transform: scaleY(-1);\n}\n.table.is-striped tr:nth-child(2n) td {\n  background-color: $alight;\n}\n.table.is-relaxed {\n  border: 0;\n}\n.table.is-relaxed th,\n.table.is-relaxed td {\n  border-right: 0;\n}\n.table.is-center {\n  text-align: center;\n}\n.table.is-top tbody {\n  vertical-align: top;\n}\n.table.is-bottom tbody {\n  vertical-align: bottom;\n}\n.table.is-middle tbody {\n  vertical-align: middle;\n}\n.table.is-small td {\n  padding: 0.25em 0.5em;\n}\n.table.is-large td {\n  padding: 1em 0.5em;\n}\n.textarea {\n  display: block;\n  margin-bottom: 10px;\n  padding: 0.5em;\n  min-width: 100%;\n  max-width: 100%;\n  outline: none;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 4px;\n  text-align: left;\n  line-height: 1.2;\n  border-color: #c1c1c1;\n}\n.textarea:focus {\n  border-color: #0061d9;\n  box-shadow: 0 0 0 3px rgba(0,114,255,0.25);\n}\n.textarea.is-primary {\n  border-color: #0072ff;\n}\n.textarea.is-primary:focus {\n  border-color: #0061d9;\n  box-shadow: 0 0 0 3px rgba(0,114,255,0.25);\n}\n.textarea.is-secondary {\n  border-color: #c7c7c7;\n}\n.textarea.is-secondary:focus {\n  border-color: #a9a9a9;\n  box-shadow: 0 0 0 3px rgba(199,199,199,0.25);\n}\n.textarea.is-info {\n  border-color: #00d4f0;\n}\n.textarea.is-info:focus {\n  border-color: #00b4cc;\n  box-shadow: 0 0 0 3px rgba(0,212,240,0.25);\n}\n.textarea.is-success {\n  border-color: #18d88b;\n}\n.textarea.is-success:focus {\n  border-color: #14b876;\n  box-shadow: 0 0 0 3px rgba(24,216,139,0.25);\n}\n.textarea.is-warning {\n  border-color: #ffa557;\n}\n.textarea.is-warning:focus {\n  border-color: #ff8a24;\n  box-shadow: 0 0 0 3px rgba(255,165,87,0.25);\n}\n.textarea.is-danger {\n  border-color: #ff3d3d;\n}\n.textarea.is-danger:focus {\n  border-color: #ff0e0e;\n  box-shadow: 0 0 0 3px rgba(255,61,61,0.25);\n}\n.textarea.is-black {\n  border-color: #000;\n}\n.textarea.is-black:focus {\n  border-color: #000;\n  box-shadow: 0 0 0 3px rgba(0,0,0,0.25);\n}\n.textarea.is-white {\n  border-color: #fff;\n}\n.textarea.is-white:focus {\n  border-color: #d9d9d9;\n  box-shadow: 0 0 0 3px rgba(255,255,255,0.25);\n}\n.textarea.is-dark {\n  border-color: #323c47;\n}\n.textarea.is-dark:focus {\n  border-color: #2a333c;\n  box-shadow: 0 0 0 3px rgba(50,60,71,0.25);\n}\n.textarea.is-light {\n  border-color: #f5f5f5;\n}\n.textarea.is-light:focus {\n  border-color: #d0d0d0;\n  box-shadow: 0 0 0 3px rgba(245,245,245,0.25);\n}\n.textarea:disabled,\n.textarea.is-disabled {\n  cursor: not-allowed;\n  background: #c1c1c1;\n  color: #fff;\n  pointer-events: none;\n}\n[tooltip] {\n  position: relative;\n}\n[tooltip]:focus {\n  outline: none;\n}\n[tooltip]:hover:before,\n[tooltip]:hover:after {\n  visibility: visible;\n  opacity: 1;\n}\n[tooltip]:before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  z-index: 99999;\n  display: block;\n  visibility: hidden;\n  width: 0;\n  height: 0;\n  border-width: 7px 7px 0 7px;\n  border-style: solid;\n  border-color: #000 transparent transparent transparent;\n  content: '';\n  opacity: 0;\n  transition: 0.4s;\n  transform: translateX(-50%) translateY(-100%);\n  user-select: none;\n}\n[tooltip]:after {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  z-index: 99999;\n  display: block;\n  visibility: hidden;\n  padding: 0.5em;\n  border-radius: 4px;\n  background-color: #000;\n  color: #fff;\n  content: attr(tooltip);\n  white-space: nowrap;\n  opacity: 0;\n  transition: 0.4s;\n  transform: translateX(-50%) translateY(-100%) translateY(-7px);\n  user-select: none;\n}\n[tooltip-position='bottom']:before {\n  top: auto;\n  top: initial;\n  bottom: 0;\n  border-width: 0 7px 7px 7px;\n  border-color: transparent transparent #000 transparent;\n  transform: translateX(-50%) translateY(100%);\n}\n[tooltip-position='bottom']:after {\n  top: auto;\n  top: initial;\n  bottom: 0;\n  transform: translateX(-50%) translateY(100%) translateY(7px);\n}\n[tooltip-position='left']:before {\n  top: 50%;\n  left: 0;\n  border-width: 7px 0 7px 7px;\n  border-color: transparent transparent transparent #000;\n  transform: translateX(-100%) translateY(-50%);\n}\n[tooltip-position='left']:after {\n  top: 50%;\n  left: 0;\n  transform: translateX(-100%) translateX(-7px) translateY(-50%);\n}\n[tooltip-position='right']:before {\n  top: 50%;\n  right: 0;\n  left: auto;\n  left: initial;\n  border-width: 7px 7px 7px 0;\n  border-color: transparent #000 transparent transparent;\n  transform: translateX(100%) translateY(-50%);\n}\n[tooltip-position='right']:after {\n  top: 50%;\n  right: 0;\n  left: auto;\n  left: initial;\n  transform: translateX(100%) translateX(7px) translateY(-50%);\n}\n[tooltip-rounded]:after {\n  border-radius: 10em;\n}\n.select {\n  position: relative;\n  margin-bottom: 10px;\n  margin-bottom: 0;\n  padding: 0.5em 0.75em;\n  max-width: 100%;\n  width: 100%;\n  outline: none;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 4px;\n  background-color: #fff;\n  background-image: linear-gradient(45deg, transparent 50%, #000 50%), linear-gradient(135deg, #000 50%, transparent 50%);\n  background-position: calc(100% - 0.8em) calc(50% + 0.1em), calc(100% - 0.4em) calc(50% + 0.1em);\n  background-size: 0.4em 0.4em, 0.4em 0.4em;\n  background-repeat: no-repeat;\n  text-align: left;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  border-color: #c1c1c1;\n  background-image: linear-gradient(45deg, transparent 50%, #c1c1c1 50%), linear-gradient(135deg, #c1c1c1 50%, transparent 50%);\n  color: #0072ff;\n/*\n   * select elments\n   */\n}\n.select .select-label,\n.select .select-item.is-selected,\n.select .select-childItem.is-selected {\n  background-color: #0072ff;\n  color: #fff;\n}\n.select .select-item:not(.is-group):hover,\n.select .select-childItem:hover {\n  background-color: #0061d9;\n  color: #fff;\n}\n.select:focus {\n  border-color: #a4a4a4;\n  box-shadow: 0 0 0 3px rgba(193,193,193,0.25);\n}\n.select-input {\n  display: flex;\n  padding: 0;\n  border: 0;\n  outline: none;\n  background-color: transparent;\n  color: inherit;\n  text-align: left;\n  font-size: inherit;\n  -webkit-appearance: textfield;\n  -moz-appearance: none;\n}\n.select select {\n  display: none;\n}\n.select-labels {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: inline-flex;\n  flex-wrap: wrap;\n  margin-right: 2em;\n  padding: 0;\n}\n.select-label {\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  overflow: hidden;\n  margin: 0.2em;\n  padding: 0.4em;\n  border-radius: 4px;\n  background-color: #000;\n  color: #fff;\n  font-size: 1em;\n  line-height: 1;\n  fill: currentColor;\n  stroke-width: 0;\n}\n.select-labelDismiss {\n  width: 1em;\n  height: 1em;\n  color: currentColor;\n}\n.select-labelDismiss:hover {\n  fill: #c1c1c1;\n}\n.select-menu {\n  position: absolute;\n  top: 100%;\n  right: 0;\n  left: 0;\n  z-index: 999;\n  margin: 0 -1px;\n  border-width: 0 1px 1px 1px;\n  border-style: solid;\n  border-color: inherit;\n  border-radius: 0 0 4px 4px;\n  background: #fff;\n  font-size: inherit;\n}\n.select-list {\n  overflow: auto;\n  margin: 0;\n  padding: 0;\n  max-height: 40vh;\n  list-style: none;\n}\n.select-item {\n  padding: 0;\n  width: 100%;\n}\n.select-item:not(.is-group) {\n  padding: 0.5em;\n  cursor: pointer;\n}\n.select-childMenu {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.select-childTitle {\n  display: block;\n  padding: 0.5em;\n  color: #c1c1c1;\n}\n.select-childItem {\n  padding: 0.5em 0.5em 0.5em 1em;\n  cursor: pointer;\n}\n.select.is-primary {\n  border-color: #0072ff;\n  background-image: linear-gradient(45deg, transparent 50%, #0072ff 50%), linear-gradient(135deg, #0072ff 50%, transparent 50%);\n  color: #0072ff;\n}\n.select.is-primary .select-label,\n.select.is-primary .select-item.is-selected,\n.select.is-primary .select-childItem.is-selected {\n  background-color: #0072ff;\n  color: #fff;\n}\n.select.is-primary .select-item:not(.is-group):hover,\n.select.is-primary .select-childItem:hover {\n  background-color: #0061d9;\n  color: #fff;\n}\n.select.is-primary:focus {\n  border-color: #0061d9;\n  box-shadow: 0 0 0 3px rgba(0,114,255,0.25);\n}\n.select.is-secondary {\n  border-color: #000;\n  background-image: linear-gradient(45deg, transparent 50%, #000 50%), linear-gradient(135deg, #000 50%, transparent 50%);\n  color: #000;\n}\n.select.is-secondary .select-label,\n.select.is-secondary .select-item.is-selected,\n.select.is-secondary .select-childItem.is-selected {\n  background-color: #000;\n  color: #fff;\n}\n.select.is-secondary .select-item:not(.is-group):hover,\n.select.is-secondary .select-childItem:hover {\n  background-color: #000;\n  color: #fff;\n}\n.select.is-secondary:focus {\n  border-color: #000;\n  box-shadow: 0 0 0 3px rgba(0,0,0,0.25);\n}\n.select.is-info {\n  border-color: #00d4f0;\n  background-image: linear-gradient(45deg, transparent 50%, #00d4f0 50%), linear-gradient(135deg, #00d4f0 50%, transparent 50%);\n  color: #00d4f0;\n}\n.select.is-info .select-label,\n.select.is-info .select-item.is-selected,\n.select.is-info .select-childItem.is-selected {\n  background-color: #00d4f0;\n  color: #fff;\n}\n.select.is-info .select-item:not(.is-group):hover,\n.select.is-info .select-childItem:hover {\n  background-color: #00b4cc;\n  color: #fff;\n}\n.select.is-info:focus {\n  border-color: #00b4cc;\n  box-shadow: 0 0 0 3px rgba(0,212,240,0.25);\n}\n.select.is-success {\n  border-color: #18d88b;\n  background-image: linear-gradient(45deg, transparent 50%, #18d88b 50%), linear-gradient(135deg, #18d88b 50%, transparent 50%);\n  color: #18d88b;\n}\n.select.is-success .select-label,\n.select.is-success .select-item.is-selected,\n.select.is-success .select-childItem.is-selected {\n  background-color: #18d88b;\n  color: #fff;\n}\n.select.is-success .select-item:not(.is-group):hover,\n.select.is-success .select-childItem:hover {\n  background-color: #14b876;\n  color: #fff;\n}\n.select.is-success:focus {\n  border-color: #14b876;\n  box-shadow: 0 0 0 3px rgba(24,216,139,0.25);\n}\n.select.is-warning {\n  border-color: #ffa557;\n  background-image: linear-gradient(45deg, transparent 50%, #ffa557 50%), linear-gradient(135deg, #ffa557 50%, transparent 50%);\n  color: #ffa557;\n}\n.select.is-warning .select-label,\n.select.is-warning .select-item.is-selected,\n.select.is-warning .select-childItem.is-selected {\n  background-color: #ffa557;\n  color: #fff;\n}\n.select.is-warning .select-item:not(.is-group):hover,\n.select.is-warning .select-childItem:hover {\n  background-color: #ff8a24;\n  color: #fff;\n}\n.select.is-warning:focus {\n  border-color: #ff8a24;\n  box-shadow: 0 0 0 3px rgba(255,165,87,0.25);\n}\n.select.is-danger {\n  border-color: #ff3d3d;\n  background-image: linear-gradient(45deg, transparent 50%, #ff3d3d 50%), linear-gradient(135deg, #ff3d3d 50%, transparent 50%);\n  color: #ff3d3d;\n}\n.select.is-danger .select-label,\n.select.is-danger .select-item.is-selected,\n.select.is-danger .select-childItem.is-selected {\n  background-color: #ff3d3d;\n  color: #fff;\n}\n.select.is-danger .select-item:not(.is-group):hover,\n.select.is-danger .select-childItem:hover {\n  background-color: #ff0e0e;\n  color: #fff;\n}\n.select.is-danger:focus {\n  border-color: #ff0e0e;\n  box-shadow: 0 0 0 3px rgba(255,61,61,0.25);\n}\n.select.is-black {\n  border-color: #000;\n  background-image: linear-gradient(45deg, transparent 50%, #000 50%), linear-gradient(135deg, #000 50%, transparent 50%);\n  color: #000;\n}\n.select.is-black .select-label,\n.select.is-black .select-item.is-selected,\n.select.is-black .select-childItem.is-selected {\n  background-color: #000;\n  color: #fff;\n}\n.select.is-black .select-item:not(.is-group):hover,\n.select.is-black .select-childItem:hover {\n  background-color: #000;\n  color: #fff;\n}\n.select.is-black:focus {\n  border-color: #000;\n  box-shadow: 0 0 0 3px rgba(0,0,0,0.25);\n}\n.select.is-white {\n  border-color: #000;\n  background-image: linear-gradient(45deg, transparent 50%, #000 50%), linear-gradient(135deg, #000 50%, transparent 50%);\n  color: #000;\n}\n.select.is-white .select-label,\n.select.is-white .select-item.is-selected,\n.select.is-white .select-childItem.is-selected {\n  background-color: #000;\n  color: #fff;\n}\n.select.is-white .select-item:not(.is-group):hover,\n.select.is-white .select-childItem:hover {\n  background-color: #000;\n  color: #fff;\n}\n.select.is-white:focus {\n  border-color: #000;\n  box-shadow: 0 0 0 3px rgba(0,0,0,0.25);\n}\n.select.is-dark {\n  border-color: #323c47;\n  background-image: linear-gradient(45deg, transparent 50%, #323c47 50%), linear-gradient(135deg, #323c47 50%, transparent 50%);\n  color: #323c47;\n}\n.select.is-dark .select-label,\n.select.is-dark .select-item.is-selected,\n.select.is-dark .select-childItem.is-selected {\n  background-color: #323c47;\n  color: #fff;\n}\n.select.is-dark .select-item:not(.is-group):hover,\n.select.is-dark .select-childItem:hover {\n  background-color: #2a333c;\n  color: #fff;\n}\n.select.is-dark:focus {\n  border-color: #2a333c;\n  box-shadow: 0 0 0 3px rgba(50,60,71,0.25);\n}\n.select.is-light {\n  border-color: #000;\n  background-image: linear-gradient(45deg, transparent 50%, #000 50%), linear-gradient(135deg, #000 50%, transparent 50%);\n  color: #000;\n}\n.select.is-light .select-label,\n.select.is-light .select-item.is-selected,\n.select.is-light .select-childItem.is-selected {\n  background-color: #000;\n  color: #fff;\n}\n.select.is-light .select-item:not(.is-group):hover,\n.select.is-light .select-childItem:hover {\n  background-color: #000;\n  color: #fff;\n}\n.select.is-light:focus {\n  border-color: #000;\n  box-shadow: 0 0 0 3px rgba(0,0,0,0.25);\n}\n.select .is-visible {\n  display: block;\n}\n.select .is-hidden {\n  display: none;\n}\n.select.is-rounded {\n  border-radius: 10em;\n}\n.select:disabled,\n.select.is-disabled {\n  opacity: 0.7;\n  cursor: not-allowed;\n}\n.select.is-active {\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.select.is-disabled {\n  opacity: 0.7;\n  pointer-events: none;\n}\n.dropdown {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n}\n.dropdown.is-right {\n  justify-content: flex-end;\n}\n.dropdown.is-center {\n  justify-content: center;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 70px;\n  left: 0;\n  padding: 0.5em;\n  width: 300px;\n  border: 1px solid #000;\n  border-radius: 4px;\n  background-color: #fff;\n  color: #000;\n  list-style: none;\n  transform-origin: top left;\n  user-select: none;\n}\n.dropdown-menu li {\n  padding: 0;\n  font-size: 16px;\n}\n.dropdown-menu .dropdown-menu {\n  position: relative;\n  top: 0;\n}\n.dropdown-menu:empty {\n  display: none;\n}\n.dropdown-menu.is-hidden {\n  margin: 0;\n  padding: 0;\n  height: 0;\n  transform: scale(0);\n}\n.dropdown-menu.is-visible {\n  transform: scale(1);\n}\n.dropdown-menu:before {\n  position: absolute;\n  top: -0.5em;\n  left: 0.5em;\n  display: block;\n  width: 0;\n  height: 0;\n  border-width: 0 0.5em 0.5em 0.5em;\n  border-style: solid;\n  border-color: transparent transparent #000 transparent;\n  content: '';\n}\n.dropdown-menu:after {\n  position: absolute;\n  top: calc( 0.675675675675676vw + -11.18918918918919px );\n  left: 0.5em;\n  display: block;\n  width: 0;\n  height: 0;\n  border-width: 0 0.5em 0.5em 0.5em;\n  border-style: solid;\n  border-color: transparent transparent #fff transparent;\n  content: '';\n}\n.is-right .dropdown-menu {\n  right: 0;\n  left: auto;\n  left: initial;\n  transform-origin: top right;\n}\n.is-right .dropdown-menu:before,\n.is-right .dropdown-menu:after {\n  right: 0.5em;\n  left: auto;\n  left: initial;\n}\n.is-center .dropdown-menu {\n  left: calc(50% - 150px);\n  transform-origin: top center;\n}\n.is-center .dropdown-menu:before,\n.is-center .dropdown-menu:after {\n  left: calc(50% - 7px);\n}\n.modal {\n  position: relative;\n  z-index: 999;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: stretch;\n  margin: 10px 8vw;\n  padding: 2.5em;\n  width: 100%;\n  border: 0;\n  border-radius: 4px;\n  background-color: #fff;\n  max-width: 800px;\n  max-height: calc(100vh - 40px);\n  box-shadow: 0 15px 20px -10px rgba(0,0,0,0.2);\n}\n.modal-header {\n  position: relative;\n  margin-bottom: 2.5em;\n}\n.modal-title {\n  margin: 0;\n}\n.modal-body {\n  position: relative;\n  overflow: auto;\n  padding: 0;\n  max-height: 50vh;\n}\n.modal-icon {\n  margin-right: 2.5em;\n}\n.modal-footer {\n  margin-top: 2.5em;\n}\n.modal-footer .button {\n  margin-right: 1.25em;\n}\n.modal-footer >* {\n  margin-bottom: 0;\n}\n.modal-dismiss {\n  position: absolute;\n  top: 0;\n  z-index: 9999;\n  padding: 1.25em;\n  border: 0;\n  background-color: transparent;\n  right: 0;\n  cursor: pointer;\n  fill: inherit;\n  stroke-width: 0;\n}\n.modal-dismiss:hover {\n  fill: #0072ff;\n  stroke-width: 0;\n}\n.modal-container {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 100%;\n  height: 100vh;\n  background-color: rgba(0,0,0,0.1);\n  z-index: 999;\n}\n.modal-container.is-hidden {\n  display: none;\n}\n.modal-container.is-visable {\n  display: flex;\n}\n.modal.is-primary {\n  background-color: #e5f1ff;\n  color: #0072ff;\n  fill: #0072ff;\n  stroke-width: 0;\n}\n.modal.is-primary.is-outline {\n  border-color: #0072ff;\n  color: #0072ff;\n  fill: #0072ff;\n  stroke-width: 0;\n}\n.modal.is-primary:focus {\n  border-color: #0061d9;\n  box-shadow: 0 0 0 3px rgba(0,114,255,0.25);\n}\n.modal.is-secondary {\n  background-color: #f9f9f9;\n  color: #323c47;\n  fill: #323c47;\n  stroke-width: 0;\n}\n.modal.is-secondary.is-outline {\n  border-color: #c7c7c7;\n  color: #c7c7c7;\n  fill: #c7c7c7;\n  stroke-width: 0;\n}\n.modal.is-secondary:focus {\n  border-color: #a9a9a9;\n  box-shadow: 0 0 0 3px rgba(199,199,199,0.25);\n}\n.modal.is-info {\n  background-color: #e4fcff;\n  color: #00d4f0;\n  fill: #00d4f0;\n  stroke-width: 0;\n}\n.modal.is-info.is-outline {\n  border-color: #00d4f0;\n  color: #00d4f0;\n  fill: #00d4f0;\n  stroke-width: 0;\n}\n.modal.is-info:focus {\n  border-color: #00b4cc;\n  box-shadow: 0 0 0 3px rgba(0,212,240,0.25);\n}\n.modal.is-success {\n  background-color: #e7fcf4;\n  color: #18d88b;\n  fill: #18d88b;\n  stroke-width: 0;\n}\n.modal.is-success.is-outline {\n  border-color: #18d88b;\n  color: #18d88b;\n  fill: #18d88b;\n  stroke-width: 0;\n}\n.modal.is-success:focus {\n  border-color: #14b876;\n  box-shadow: 0 0 0 3px rgba(24,216,139,0.25);\n}\n.modal.is-warning {\n  background-color: #fff6ee;\n  color: #ffa557;\n  fill: #ffa557;\n  stroke-width: 0;\n}\n.modal.is-warning.is-outline {\n  border-color: #ffa557;\n  color: #ffa557;\n  fill: #ffa557;\n  stroke-width: 0;\n}\n.modal.is-warning:focus {\n  border-color: #ff8a24;\n  box-shadow: 0 0 0 3px rgba(255,165,87,0.25);\n}\n.modal.is-danger {\n  background-color: #ffecec;\n  color: #ff3d3d;\n  fill: #ff3d3d;\n  stroke-width: 0;\n}\n.modal.is-danger.is-outline {\n  border-color: #ff3d3d;\n  color: #ff3d3d;\n  fill: #ff3d3d;\n  stroke-width: 0;\n}\n.modal.is-danger:focus {\n  border-color: #ff0e0e;\n  box-shadow: 0 0 0 3px rgba(255,61,61,0.25);\n}\n.modal.is-black {\n  background-color: #e6e6e6;\n  color: #000;\n  fill: #000;\n  stroke-width: 0;\n}\n.modal.is-black.is-outline {\n  border-color: #000;\n  color: #000;\n  fill: #000;\n  stroke-width: 0;\n}\n.modal.is-black:focus {\n  border-color: #000;\n  box-shadow: 0 0 0 3px rgba(0,0,0,0.25);\n}\n.modal.is-white {\n  background-color: #fff;\n  color: #323c47;\n  fill: #323c47;\n  stroke-width: 0;\n}\n.modal.is-white.is-outline {\n  border-color: #fff;\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.modal.is-white:focus {\n  border-color: #d9d9d9;\n  box-shadow: 0 0 0 3px rgba(255,255,255,0.25);\n}\n.modal.is-dark {\n  background-color: #e8ebef;\n  color: #323c47;\n  fill: #323c47;\n  stroke-width: 0;\n}\n.modal.is-dark.is-outline {\n  border-color: #323c47;\n  color: #323c47;\n  fill: #323c47;\n  stroke-width: 0;\n}\n.modal.is-dark:focus {\n  border-color: #2a333c;\n  box-shadow: 0 0 0 3px rgba(50,60,71,0.25);\n}\n.modal.is-light {\n  background-color: #fefefe;\n  color: #323c47;\n  fill: #323c47;\n  stroke-width: 0;\n}\n.modal.is-light.is-outline {\n  border-color: #f5f5f5;\n  color: #f5f5f5;\n  fill: #f5f5f5;\n  stroke-width: 0;\n}\n.modal.is-light:focus {\n  border-color: #d0d0d0;\n  box-shadow: 0 0 0 3px rgba(245,245,245,0.25);\n}\n.modal.is-outline {\n  border-width: 1px;\n  border-style: solid;\n  background-color: transparent;\n}\n.navbar {\n  display: flex;\n  margin: 0;\n  padding: 5px 10px;\n  width: 100%;\n  background-color: #fff;\n}\n.navbar.is-fixed {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  transition: 0.4s;\n}\n.navbar.is-inverse {\n  background-color: #000;\n}\n.navbar.is-hidden {\n  transform: translate3d(0, -100%, 0);\n}\n.navbar-brand,\n.navbar-start,\n.navbar-end {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n}\n.navbar-brand img {\n  max-height: 100%;\n}\n.navbar-brand.is-white {\n  filter: brightness(0) invert(1);\n}\n.navbar-start {\n  flex: 1;\n}\n.navbar-item {\n  display: block;\n  padding: 0.5em 1em;\n  color: #000;\n  text-decoration: none;\n  white-space: nowrap;\n  cursor: pointer;\n  fill: #000;\n  stroke-width: 0;\n}\n.navbar-item.dropdown {\n  height: auto;\n}\n.navbar-item:hover,\n.navbar-item:focus {\n  color: #c7c7c7;\n  fill: #c7c7c7;\n  stroke-width: 0;\n}\n.navbar.is-inverse .navbar-item {\n  color: #fff;\n  fill: #fff;\n  stroke-width: 0;\n}\n.navbar.is-inverse .navbar-item:hover,\n.navbar.is-inverse .navbar-item:focus {\n  color: #c7c7c7;\n  fill: #c7c7c7;\n  stroke-width: 0;\n}\n.navbar-item.is-active {\n  border-bottom: 4px solid #c7c7c7;\n  margin-bottom: -4px;\n  color: #c7c7c7;\n}\n.pagination {\n  display: flex;\n  align-items: top;\n  margin: 10px 0;\n  flex-wrap: wrap;\n}\n.pagination-item,\n.pagination-next,\n.pagination-prev,\n.pagination-first,\n.pagination-last {\n  position: relative;\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  width: 2em;\n  height: 2em;\n  outline-width: 0;\n  outline-offset: 0;\n  border: none;\n  text-decoration: none;\n  cursor: pointer;\n  background: #fff;\n  font-size: inherit;\n  fill: #000;\n  stroke-width: 0;\n}\n.pagination-item.is-active,\n.pagination-next.is-active,\n.pagination-prev.is-active,\n.pagination-first.is-active,\n.pagination-last.is-active,\n.pagination-item:active,\n.pagination-next:active,\n.pagination-prev:active,\n.pagination-first:active,\n.pagination-last:active,\n.pagination-item:hover:not(.is-disabled),\n.pagination-next:hover:not(.is-disabled),\n.pagination-prev:hover:not(.is-disabled),\n.pagination-first:hover:not(.is-disabled),\n.pagination-last:hover:not(.is-disabled) {\n  color: #0072ff;\n  fill: #0072ff;\n  stroke-width: 0;\n}\n.pagination-item.is-disabled,\n.pagination-next.is-disabled,\n.pagination-prev.is-disabled,\n.pagination-first.is-disabled,\n.pagination-last.is-disabled {\n  border-color: #c1c1c1;\n  color: #c1c1c1;\n  fill: #c1c1c1;\n  stroke-width: 0;\n}\n.pagination-item:focus,\n.pagination-next:focus,\n.pagination-prev:focus,\n.pagination-first:focus,\n.pagination-last:focus {\n  outline-color: 0;\n}\n.pagination-item .icon,\n.pagination-next .icon,\n.pagination-prev .icon,\n.pagination-first .icon,\n.pagination-last .icon {\n  width: 1.4em;\n  height: 1.4em;\n}\n.content li + li {\n  margin-top: 0.25em;\n}\n.content p:not(:last-child),\n.content dl:not(:last-child),\n.content ol:not(:last-child),\n.content ul:not(:last-child),\n.content blockquote:not(:last-child),\n.content pre:not(:last-child),\n.content table:not(:last-child) {\n  margin-bottom: 1em;\n  font-size: 1em;\n}\n.content h1 {\n  font-size: 2.4em;\n  margin-bottom: 0.5em;\n}\n.content h1:not(:first-child) {\n  margin-top: 1em;\n}\n.content h2 {\n  font-size: 2.2em;\n  margin-bottom: 0.5714em;\n}\n.content h2:not(:first-child) {\n  margin-top: 1.1428em;\n}\n.content h3 {\n  font-size: 2em;\n  margin-bottom: 0.6666em;\n}\n.content h3:not(:first-child) {\n  margin-top: 1.8em;\n}\n.content h4 {\n  font-size: 1.6em;\n  margin-bottom: 0.8em;\n}\n.content h5 {\n  font-size: 1.4em;\n  margin-bottom: 0.8888em;\n}\n.content h6 {\n  font-size: 1.2em;\n  margin-bottom: 1em;\n}\n.content blockquote {\n  border-left: 0.5em solid #0072ff;\n  padding: 0.5em;\n  margin: 0;\n}\n.content ol {\n  list-style: decimal outside;\n  margin-left: 1em;\n  margin-top: 1em;\n  padding: 0;\n}\n.content ul {\n  list-style: disc outside;\n  margin-left: 1em;\n  margin-top: 1em;\n  padding: 0;\n}\n.content ul ul {\n  list-style-type: circle;\n  margin-top: 0.5em;\n}\n.content ul ul ul {\n  list-style-type: square;\n}\n.content dd {\n  margin-left: 2em;\n}\n.content figure {\n  margin-left: 2em;\n  margin-right: 2em;\n  text-align: center;\n}\n.content figure:not(:first-child) {\n  margin-top: 2em;\n}\n.content figure:not(:last-child) {\n  margin-bottom: 2em;\n}\n.content figure img {\n  display: inline-block;\n}\n.content figure figcaption {\n  font-style: italic;\n}\n.content pre {\n  overflow-x: auto;\n  padding: 0.5em;\n  white-space: pre;\n  word-wrap: normal;\n}\n.content sup,\n.content sub {\n  font-size: 75%;\n}\n.add-sticky {\n  position: sticky;\n  top: 10px;\n}\n.add-floatRight {\n  float: right;\n}\n.add-floatLeft {\n  float: left;\n}\n.add-flex {\n  display: flex;\n}\n.add-justifyCenter {\n  justify-content: center;\n}\n.add-justifyEnd {\n  justify-content: flex-end;\n}\n.add-justifyStart {\n  justify-content: flex-start;\n}\n.add-justifyAround {\n  justify-content: space-around;\n}\n.add-justifyBetween {\n  justify-content: space-between;\n}\n.add-alignCenter {\n  align-items: center;\n}\n.add-alignEnd {\n  align-items: flex-end;\n}\n.add-alignStart {\n  align-items: flex-start;\n}\n.add-alignBaseline {\n  align-items: baseline;\n}\n.add-alignStretch {\n  align-items: stretch;\n}\n.add-padding {\n  padding: 0.5em !important;\n}\n.add-paddingTop {\n  padding-top: 0.5em !important;\n}\n.add-paddingBottom {\n  padding-bottom: 0.5em !important;\n}\n.add-paddingRight {\n  padding-right: 0.5em !important;\n}\n.add-paddingLeft {\n  padding-left: 0.5em !important;\n}\n.add-margin {\n  margin: 10px !important;\n}\n.add-marginTop {\n  margin-top: 10px !important;\n}\n.add-marginBottom {\n  margin-bottom: 10px !important;\n}\n.add-marginRight {\n  margin-right: 10px !important;\n}\n.add-marginLeft {\n  margin-left: 10px !important;\n}\n.no-padding {\n  padding: 0 !important;\n}\n.no-paddingTop {\n  padding-top: 0 !important;\n}\n.no-paddingBottom {\n  padding-bottom: 0 !important;\n}\n.no-paddingRight {\n  padding-right: 0 !important;\n}\n.no-paddingLeft {\n  padding-left: 0 !important;\n}\n.no-margin {\n  margin: 0 !important;\n}\n.no-marginTop {\n  margin-top: 0 !important;\n}\n.no-marginBottom {\n  margin-bottom: 0 !important;\n}\n.no-marginRight {\n  margin-right: 0 !important;\n}\n.no-marginLeft {\n  margin-left: 0 !important;\n}\n::selection {\n  color: inherit;\n}\n.button {\n  white-space: nowrap;\n}\n.header {\n  width: 100%;\n  padding: 50px;\n  color: #fff;\n}\n.header-title {\n  font-size: 50px;\n  line-height: 1em;\n  margin: 20px 0;\n  font-weight: lighter;\n}\n.header-content {\n  font-size: 16px;\n  margin-bottom: 50px;\n  font-weight: lighter;\n}\n.header-image >img {\n  width: 100%;\n}\n.header,\n.header.is-red {\n  background-image: linear-gradient(30deg, #ff3d3d, #ffdd57);\n}\n.header.is-black {\n  background-image: linear-gradient(30deg, #000, #4d4d4d);\n}\n.header.is-green {\n  background-image: linear-gradient(30deg, #18d88b, #ffdd57);\n}\n.header.is-blue {\n  background-image: linear-gradient(30deg, #0072ff, #4d9cff);\n}\n.header.is-white {\n  background-image: linear-gradient(45deg, #e6e6e6, #fff);\n}\n.section {\n  padding: 20px 30px;\n}\n.section-title {\n  font-size: 30px;\n  color: #323c47;\n}\n.section-paragraph {\n  font-size: 16px;\n  color: #526375;\n}\n.section.is-red {\n  background: #ff3d3d;\n}\n.section.is-black {\n  background: #000;\n}\n.section.is-green {\n  background: #18d88b;\n}\n.section.is-blue {\n  background: #0072ff;\n}\n.section.is-white {\n  background: #fff;\n}\n.social {\n  padding: 100px 0;\n}\n.social-number {\n  font-size: 50px;\n  margin: 20px 0 50px;\n}\n.social-item {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n}\n.social-title {\n  font-size: 30px;\n  margin: 30px 0;\n  text-align: center;\n}\n.social-content {\n  font-size: 20px;\n  margin: 0 0 40px;\n  text-align: center;\n}\n.social-logo {\n  width: 100%;\n  margin: 20px 0;\n}\n.social-quote {\n  font-size: 30px;\n  color: #000;\n  quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\n}\n.social-quote:before {\n  content: open-quote;\n  margin-right: 20px;\n  font-size: 40px;\n}\n.social-quote:after {\n  content: close-quote;\n  margin-left: 20px;\n  font-size: 40px;\n}\n.social.is-red {\n  background: #ff3d3d;\n}\n.social.is-black {\n  background: #000;\n}\n.social.is-green {\n  background: #18d88b;\n}\n.social.is-blue {\n  background: #0072ff;\n}\n.user {\n  display: flex;\n  align-items: center;\n  margin: 10px 0;\n}\n.user.is-alt {\n  justify-content: center;\n  flex-direction: column;\n}\n.user-avatar {\n  border-radius: 50%;\n  width: 60px;\n  height: 60px;\n  margin-right: 20px;\n  flex-shrink: 0;\n  overflow: hidden;\n}\n.is-alt .user-avatar {\n  margin: 0 0 20px;\n}\n.user-data {\n  text-align: left;\n  white-space: nowrap;\n}\n.is-alt .user-data {\n  text-align: center;\n}\n.user-name {\n  font-size: 16px;\n  color: #000;\n  margin: 5px 0;\n}\n.user-caption {\n  font-size: 16px;\n  color: #c1c1c1;\n  margin: 0 0 5px;\n}\n.add-center-horizontal {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n}\n.add-center-vertical {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: flex-start;\n}\n.add-padding {\n  padding: 20px;\n}\n.add-text-center {\n  text-align: center;\n}\n.add-full-width {\n  width: 100%;\n}\n.is-active img {\n  opacity: 1;\n  transition: 0.4s;\n}\n.is-active p,\n.is-active h1,\n.is-active h2,\n.is-active h3,\n.is-active h6,\n.is-active b {\n  opacity: 1;\n  transform: translate3d(0, 0, 0);\n  transition: 0.4s;\n}\n.is-inactive img {\n  opacity: 0;\n  transition: 0.4s;\n}\n.is-inactive p,\n.is-inactive h1,\n.is-inactive h2,\n.is-inactive h3,\n.is-inactive h6,\n.is-inactive b {\n  opacity: 0;\n  transform: translate3d(0, -200px, 0);\n  transition: 0.4s;\n}\n.column {\n  transition: 0.2s;\n}\n\n\n.vuse-icon {\n  display: block;\n  width: 20px;\n  height: 20px;\n}\n.uploader {\n  position: relative;\n  cursor: pointer;\n  outline: none;\n}\n.uploader-input {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  opacity: 0;\n  z-index: 100;\n  cursor: pointer;\n}\n.uploader >img {\n  width: 100%;\n  display: block;\n}\n.uploader:hover {\n  box-shadow: 0 0 0 2px #c1c1c1;\n}\n\n\n/*# sourceMappingURL=style.css.map*/"
  },
  {
    "path": "docs/API.md",
    "content": "# API\r\n\r\nYour section components will have some properties injected to help you customize their behavior in building phase and production/render phase.\r\n\r\n## $section\r\n\r\nAn instance of the [section class](https://github.com/baianat/vuse/blob/master/src/js/section.js) that represents this component.\r\n\r\n## $builder\r\n\r\nAn instance of the singleton [builder class](https://github.com/baianat/vuse/blob/master/src/js/builder.js)\r\n\r\n## $sectionData\r\n\r\nIs a computed property that mirrors `$section.data` which contains the current values (text, images, etc...) for the section.\r\n"
  },
  {
    "path": "docs/README.md",
    "content": "---\r\nhome: true\r\nactionText: Getting Started →\r\nactionLink: ./getting-started\r\nheroImage: /img/logo.png\r\n---\r\n"
  },
  {
    "path": "docs/example.md",
    "content": "---\r\nnavbar: true\r\nsidebar: false\r\neditLink: false\r\npageClass: example\r\n---\r\n\r\n<vuse-builder @saved=\"onSave\"></vuse-builder>\r\n\r\n<script>\r\nexport default {\r\n  methods: {\r\n    onSave (vuse) {\r\n      vuse.export('preview');\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style>\r\n.example .content {\r\n  padding: 0 !important;\r\n  margin: 0 !important;\r\n  max-width: 100% !important;\r\n}\r\n.example .page {\r\n  padding: 0 !important;\r\n}\r\n.example .page-edit {\r\n display: none !important;\r\n}\r\n.example .menu {\r\n  margin: 0;\r\n}\r\n</style>\r\n"
  },
  {
    "path": "docs/exporting.md",
    "content": "# Exporting\r\n\r\nThere are three ways to export the built page: preview, pwa or json. When clicking the save button the `b-builder` component emits a saved event with the builder instance as its payload, which exposes an `export` method.\r\n\r\n```html\r\n<div id=\"app\">\r\n  <b-builder @saved=\"onSave\"></b-builder>\r\n</div>\r\n\r\n<script>\r\n  new Vue({\r\n  el: '#app',\r\n  methods: {\r\n    onSave (builder) {\r\n      // you can use 'preview', 'pwa' or 'json' strings\r\n      // 'json' is the default exporting mode\r\n      builder.export('preview');\r\n    }\r\n  }\r\n});\r\n</script>\r\n```"
  },
  {
    "path": "docs/getting-started.md",
    "content": "# getting-started\r\n\r\n## What is this\r\n\r\nThis builder (sections builder) reuses your Vue components as **editable sections** to produce an interactive page builder to the end user, you can use it as a prototyping tool as well as it is sort-of a block builder.\r\n\r\nThe user/developer can then export the builder for usability in multiple formats, the following are the officially supported ones:\r\n\r\n- `json` A json object which can be later used to re-render a page, particularly useful if you plan to have dynamic pages or want to store them in a Database.\r\n- `preview` opens a new page without the editable logic in new tab to see the end result.\r\n- `pwa` produces a zip file which contains all the page files and images neatly packed, this is probably the format you will use for page/prototype landing page builder, The project is augmented by default with service workers to support offline viewing.\r\n\r\nThe builder is just a Vue plugin, so you can integrate this into your own projects without needing to create separate bundles for it.\r\n\r\n## Installation\r\n\r\n### Package managers\r\n\r\nFirst step is to install it using `yarn` or `npm`:\r\n\r\n```bash\r\nnpm install vuse\r\n\r\n# or use yarn\r\nyarn add vuse\r\n```\r\n\r\n### CDNs\r\n\r\nOr add it as a script tag in your projects.\r\n\r\n- [unpkg](https://unpkg.com/vuse)\r\n\r\n```html\r\n<script src=\"https://unpkg.com/vue@2.4.2\"></script>\r\n<script src=\"https://unpkg.com/vuse\"></script>\r\n```\r\n\r\n### Usage\r\n\r\n::: tip\r\n  If you added it using a script tag, you can skip this section. as it will be auto-installed for you\r\n:::\r\n\r\n```js\r\nimport Builder from 'vuse';\r\n\r\nVue.use(Builder);\r\n```\r\n\r\nYou can start using the `b-builder` component to build things now.\r\n\r\nThis package does not include any sections. The builder is just a system of helpers for managing customizable sections, seeding fake data, exporting views and re-rendering them. The logic for your components/sections is written by you eventually. **we will be adding a huge number of sections soon to be used with this one**. You can use the included examples after reading the API to build your own for now."
  },
  {
    "path": "docs/section.md",
    "content": "# Section\r\n\r\nA section is the building block of the page, below is an example of a header section.\r\n::: tip\r\n  Examples use [pug](https://pugjs.org) template language to make it easier to work with templates.\r\n:::\r\n\r\n```pug\r\n<template lang=\"pug\">\r\n  section.header(\r\n    v-styler=\"$sectionData.classes\"\r\n    :class=\"[{'is-editable': $builder.isEditing}, $sectionData.classes]\"\r\n  )\r\n    .container\r\n      .grid\r\n        .column.is-desktop-6.add-center-vertical\r\n          h3.header-title(\r\n            :class=\"{'is-editable': $builder.isEditing}\"\r\n            v-html=\"$sectionData.title\"\r\n            v-styler=\"$sectionData.title\"\r\n          )\r\n          p.header-content(\r\n            :class=\"{'is-editable': $builder.isEditing}\"\r\n            v-html=\"$sectionData.content\"\r\n            v-styler=\"$sectionData.content\"\r\n          )\r\n          a.button(\r\n            :class=\"[{'is-editable': $builder.isEditing}, $sectionData.button.classes]\"\r\n            :href=\"$sectionData.button.href\"\r\n            v-html=\"$sectionData.button.text\"\r\n            v-styler=\"$sectionData.button\"\r\n          )\r\n        .column.is-desktop-6\r\n          uploader(\r\n            class=\"header-image\"\r\n            path=\"$sectionData.images[0]\"\r\n          )\r\n</template>\r\n\r\n<script>\r\n  import { types } from 'vuse';\r\n\r\n  export default {\r\n    name: 'hero1',\r\n    cover: '../covers/hero1.png',\r\n    $schema: {\r\n      title: types.Title,\r\n      content: types.Text,\r\n      images: [types.Image],\r\n      button: types.Button,\r\n      classes: types.ClassList\r\n    },\r\n    props: {\r\n      id: {\r\n        type: Number,\r\n        required: true\r\n      }\r\n    }\r\n  };\r\n</script>\r\n```\r\n\r\nEach section has several elements that can be edited. Section data are stored in `$sectionData` object which is reactive.\r\n\r\n## Adding the ability to edit elements in a section\r\n\r\n1. Add `is-editable` class to it. Since editable state can be toggled off/on, it's always good to bind `is-editable` class to change when editing mode changes. e.g. `:class=\"{'is-editable': $builder.isEditing}\"`\r\n1. Add [`v-styler`](https://github.com/baianat/builder#v-styler) directive to the element\r\n1. Bind the element’s innerHTML with its equivalent data e.g. `v-html=\"$sectionData.button.text\"`\r\n1. If you have any other data that `v-styler` changes, you have to bind it too. e.g. `:href=\"$sectionData.button.href\"`\r\n\r\nPutting it all together\r\n\r\n```html\r\n  <a\r\n    :class=\"[{'button', 'is-editable': $builder.isEditing}, $sectionData.button.classes]\"\r\n    :href=\"$sectionData.button.href\"\r\n    v-html=\"$sectionData.button.text\"\r\n    v-styler=\"$sectionData.button\"\r\n  ></a>\r\n```\r\n\r\nAfter creating the HTML structure, you should configure the section schema to use the built-in seeder to provide you with initial/fake values when the component is instantiated in build/edit mode. Or you can set the initial values yourself instead of seeding them.\r\n\r\n```html\r\n<script>\r\n  import { types } from 'vuse';\r\n\r\n  export default {\r\n    // section name\r\n    name: 'hero1',\r\n    // section cover image\r\n    cover: '../cover-hero1.png',\r\n    // group multiple sections\r\n    group: 'heros',\r\n    // section data schema\r\n    $schema: {\r\n      // main title\r\n      title: types.Text,\r\n      // main content\r\n      content: types.Text,\r\n      // section classes\r\n      classes: types.ClassList,\r\n      // array of section's images\r\n      images: [\r\n        types.Image,\r\n        types.Image\r\n      ],\r\n      // object holds button data, href etc..\r\n      button: types.Button,\r\n      // if section has many columns you can use\r\n      // a columns array to separate each column's data\r\n      columns: [\r\n      {\r\n        title: types.Title,\r\n        content: types.Text,\r\n        group: types.group\r\n      },\r\n      {\r\n        title: types.Title,\r\n        group: types.group\r\n      }\r\n    ]\r\n    },\r\n    props: {\r\n         id: {       type: Number,       required: true     } // it is required to have an id prop.\r\n    }\r\n  };\r\n</script>\r\n```\r\n\r\n## Using the section\r\n\r\nUntil now, we have only been creating our section component, we now need to introduce it to our builder so it can use it:\r\n\r\n```js\r\nimport Builder from 'vuse';\r\nimport section from './components/sections/section';\r\n\r\n// Builder has Vue-like API when registering components.\r\nBuilder.component(section);\r\nVue.use(Builder);\r\n\r\nnew Vue({\r\n  el: '#app'\r\n});\r\n```\r\n\r\n```html\r\n<div id=\"app\">\r\n  <b-builder></b-builder>\r\n</div>\r\n```\r\n\r\nYou only have to register the component on the Builder plugin, which has a Vue-like API. This ensures your Vue global scope isn't polluted by the builder and keeps everything contained within the `b-builder` component."
  },
  {
    "path": "docs/styler.md",
    "content": "# Styler\r\n\r\nThis directive is automatically injected in your section components, and can be used to facilitate editing elements greatly, since it has support for multiple element types like `div`, `a`, `button` and `p` tags as well.\r\n\r\nTo tell styler which variable to update, you pass it as directive expression e.g. `v-styler=\"$sectionData.button\"`\r\n\r\nThe styler directive has four types `text`, `button`, `section` or `grid`. By default, the directive can know the type implicitly, from the element tag or from the provided schema. \r\n\r\nIf you want to explicitly specify the type, you can pass it as a directive modifier e.g. `v-styler.button=\"$sectionData.button\"`.\r\n\r\n## How to use\r\n\r\ncoming soon...\r\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"vuse\",\n  \"version\": \"0.1.1\",\n  \"description\": \"Vue.js Page Builder\",\n  \"author\": \"Abdelrahman Ismail <abdelrahman3d@gmail.com>\",\n  \"module\": \"dist/vuse.esm.js\",\n  \"unpkg\": \"dist/vuse.min.js\",\n  \"main\": \"dist/vuse.js\",\n  \"scripts\": {\n    \"dev\": \"webpack-dev-server --hot --inline --config ./demo/webpack.config.js\",\n    \"build\": \"cross-env NODE_ENV=production node scripts/build.js\",\n    \"build:demo\": \"cross-env NODE_ENV=production webpack --config ./demo/webpack.config.js\",\n    \"docs:dev\": \"vuepress dev docs\",\n    \"docs:build\": \"vuepress build docs\",\n    \"docs:deploy\": \"scripts/deploy.sh\",\n    \"lint\": \"eslint ./src --fix\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.0.0-rc.1\",\n    \"@babel/plugin-proposal-class-properties\": \"^7.0.0-rc.1\",\n    \"@babel/plugin-proposal-object-rest-spread\": \"^7.0.0-rc.1\",\n    \"@babel/preset-env\": \"^7.0.0-rc.1\",\n    \"babel-loader\": \"^8.0.0-beta\",\n    \"chalk\": \"^2.4.1\",\n    \"clean-webpack-plugin\": \"^0.1.19\",\n    \"copy-webpack-plugin\": \"^4.5.1\",\n    \"cross-env\": \"^5.0.5\",\n    \"css-loader\": \"^1.0.0\",\n    \"eslint\": \"^5.3.0\",\n    \"eslint-config-standard\": \"^11.0.0\",\n    \"eslint-loader\": \"^2.1.0\",\n    \"eslint-plugin-import\": \"^2.7.0\",\n    \"eslint-plugin-node\": \"^7.0.1\",\n    \"eslint-plugin-promise\": \"^3.5.0\",\n    \"eslint-plugin-standard\": \"^3.0.1\",\n    \"eslint-plugin-vue\": \"^4.7.1\",\n    \"file-loader\": \"^1.1.11\",\n    \"filesize\": \"^3.6.1\",\n    \"friendly-errors-webpack-plugin\": \"^1.6.1\",\n    \"gzip-size\": \"^5.0.0\",\n    \"html-webpack-plugin\": \"^4.0.0-alpha\",\n    \"mini-css-extract-plugin\": \"^0.4.4\",\n    \"mkdirp\": \"^0.5.1\",\n    \"progress-bar-webpack-plugin\": \"^1.10.0\",\n    \"pug\": \"^2.0.0-rc.3\",\n    \"pug-plain-loader\": \"^1.0.0\",\n    \"rollup\": \"^0.64.1\",\n    \"rollup-plugin-buble\": \"^0.19.2\",\n    \"rollup-plugin-commonjs\": \"^9.1.5\",\n    \"rollup-plugin-css-only\": \"^0.4.0\",\n    \"rollup-plugin-node-resolve\": \"^3.0.0\",\n    \"rollup-plugin-replace\": \"^2.0.0\",\n    \"rollup-plugin-uglify\": \"^4.0.0\",\n    \"rollup-plugin-vue\": \"^4.3.2\",\n    \"style-loader\": \"^0.22.1\",\n    \"stylus\": \"^0.54.5\",\n    \"stylus-loader\": \"^3.0.1\",\n    \"stylus-relative-loader\": \"^3.4.0\",\n    \"util\": \"^0.11.0\",\n    \"vue\": \"^2.5.17\",\n    \"vue-loader\": \"^15.3.0\",\n    \"vue-template-compiler\": \"^2.5.17\",\n    \"vuepress\": \"^0.14.8\",\n    \"webpack\": \"^4.16.5\",\n    \"webpack-cli\": \"^3.1.0\",\n    \"webpack-dev-server\": \"^3.1.5\"\n  },\n  \"dependencies\": {\n    \"@baianat/base.framework\": \"^2.0.0-beta.0\",\n    \"intersection-observer\": \"^0.5.0\",\n    \"jszip\": \"^3.1.4\",\n    \"lodash-es\": \"^4.17.4\",\n    \"popper.js\": \"^1.14.4\",\n    \"save-as\": \"^0.1.8\",\n    \"sortablejs\": \"^1.6.1\",\n    \"vue-server-renderer\": \"2.5.17\"\n  },\n  \"license\": \"MIT\",\n  \"files\": [\n    \"dist/*.js\",\n    \"dist/*.css\"\n  ],\n  \"keywords\": [\n    \"page-builder\",\n    \"vuejs\",\n    \"ES6\"\n  ],\n  \"maintainers\": [\n    {\n      \"name\": \"Abdelrahman Awad\",\n      \"email\": \"logaretm1@gmail.com\"\n    },\n    {\n      \"name\": \"Abdelrahman Ismail\",\n      \"email\": \"abdelrahman3d@gmail.com\"\n    }\n  ]\n}\n"
  },
  {
    "path": "scripts/build.js",
    "content": "const chalk = require('chalk');\nconst mkdirpNode = require('mkdirp');\nconst { promisify } = require('util');\nconst { rollup } = require('rollup');\nconst { paths, configs, utils } = require('./config');\nconst mkdirp = promisify(mkdirpNode);\n\nasync function buildConfig (build) {\n  await mkdirp(paths.dist);\n  const bundleName = build.output.file.replace(paths.dist, '');\n  console.log(chalk.cyan(`📦  Generating ${bundleName}...`));\n\n  const bundle = await rollup(build.input);\n  await bundle.write(build.output);\n\n  console.log(chalk.green(`👍  ${bundleName} ${utils.stats({ path: build.output.file })}`));\n}\n\nasync function build () {\n  await Promise.all(Object.keys(configs).map(key => {\n    return buildConfig(configs[key]).catch(err => {\n      console.log(err);\n    });\n  }));\n  process.exit(0);\n}\n\nbuild();\n"
  },
  {
    "path": "scripts/config.js",
    "content": "const path = require('path');\nconst fs = require('fs');\nconst replace = require('rollup-plugin-replace');\nconst vue = require('rollup-plugin-vue').default;\nconst resolve = require('rollup-plugin-node-resolve');\nconst css = require('rollup-plugin-css-only');\nconst buble = require('rollup-plugin-buble');\nconst commonjs = require('rollup-plugin-commonjs');\nconst filesize = require('filesize');\nconst gzipSize = require('gzip-size');\nconst { uglify } = require('rollup-plugin-uglify');\n\nconst version = process.env.VERSION || require('../package.json').version;\n\nconst common = {\n  banner:\n    `/**\n    * Vuse v${version}\n    * (c) ${new Date().getFullYear()} Baianat\n    * @license MIT\n    */`,\n  paths: {\n    input: path.join(__dirname, '../src/index.js'),\n    src: path.join(__dirname, '../src/'),\n    dist: path.join(__dirname, '../dist/')\n  },\n  builds: {\n    umd: {\n      file: 'vuse.js',\n      format: 'umd',\n      name: 'vuse',\n      env: 'development'\n    },\n    umdMin: {\n      file: 'vuse.min.js',\n      format: 'umd',\n      name: 'vuse',\n      env: 'production'\n    },\n    esm: {\n      input: path.join(__dirname, '../src/index.esm.js'),\n      file: 'vuse.esm.js',\n      format: 'es'\n    }\n  }\n};\n\nfunction genConfig (options) {\n  const config = {\n    description: '',\n    input: {\n      input: options.input || common.paths.input,\n      plugins: [\n        commonjs(),\n        replace({ __VERSION__: version }),\n        css(),\n        vue({ css: false }),\n        resolve(),\n        buble()\n      ]\n    },\n    output: {\n      banner: common.banner,\n      name: options.name,\n      format: options.format,\n      file: path.join(common.paths.dist, options.file)\n    }\n  };\n\n  if (options.env) {\n    config.input.plugins.unshift(replace({\n      'process.env.NODE_ENV': JSON.stringify(options.env)\n    }));\n  }\n\n  if (options.env === 'production') {\n    config.input.plugins.push(uglify());\n  }\n\n  return config;\n};\n\nconst configs = Object.keys(common.builds).reduce((prev, key) => {\n  prev[key] = genConfig(common.builds[key]);\n\n  return prev;\n}, {});\n\nmodule.exports = {\n  configs,\n  uglifyOptions: common.uglifyOptions,\n  paths: common.paths,\n  utils: {\n    stats ({ path }) {\n      const code = fs.readFileSync(path);\n      const { size } = fs.statSync(path);\n      const gzipped = gzipSize.sync(code);\n\n      return `| Size: ${filesize(size)} | Gzip: ${filesize(gzipped)}`;\n    }\n  }\n};\n"
  },
  {
    "path": "scripts/deploy.sh",
    "content": "#!/usr/bin/env sh\n\nset -e\n\nnpm run docs:build\n\ncd docs/.vuepress/dist\n\ngit init\ngit add -A\ngit commit -m 'deploy'\n\ngit push -f git@github.com:baianat/vuse.git master:gh-pages\n\ncd -"
  },
  {
    "path": "src/components/VuseBuilder.vue",
    "content": "<template lang=\"pug\">\r\n  div\r\n    div#artboard.artboard(\r\n      ref=\"artboard\"\r\n      :class=\"{ 'is-sorting': $builder.isSorting, 'is-editable': $builder.isEditing }\"\r\n    )\r\n      component(v-for='section in $builder.sections'\r\n        :is='section.name'\r\n        :key='section.id'\r\n        :id='section.id'\r\n      )\r\n\r\n    .controller\r\n      .controller-intro(v-if=\"showIntro && !this.$builder.sections.length\")\r\n        label(for=\"projectName\") Hello, start your project\r\n        input.controller-input(\r\n          id=\"projectName\"\r\n          placeholder=\"project name\"\r\n          v-model=\"title\"\r\n        )\r\n        template(v-if=\"themes\")\r\n          .controller-themes\r\n            button.controller-theme(\r\n              v-for=\"theme in themes\"\r\n              @click=\"addTheme(theme)\"\r\n            )\r\n              | {{ theme.name }}\r\n\r\n      .controller-panel\r\n        button.controller-button.is-green(\r\n          tooltip-position=\"top\"\r\n          tooltip=\"export\"\r\n          @click=\"submit\"\r\n        )\r\n          VuseIcon(name='download')\r\n        button.controller-button.is-red(\r\n          v-if=\"!tempSections\"\r\n          tooltip-position=\"top\"\r\n          tooltip=\"clear sections\"\r\n          @click=\"clearSections\"\r\n        )\r\n          VuseIcon(name='trash')\r\n        button.controller-button.is-gray(\r\n          v-if=\"tempSections\"\r\n          tooltip-position=\"top\"\r\n          tooltip=\"undo\"\r\n          @click=\"undo\"\r\n        )\r\n          VuseIcon(name='undo')\r\n        button.controller-button.is-blue(\r\n          tooltip-position=\"top\"\r\n          tooltip=\"sorting\"\r\n          :class=\"{ 'is-red': $builder.isSorting }\"\r\n          @click=\"toggleSort\"\r\n        )\r\n          VuseIcon(name='sort')\r\n        button.controller-button.is-blue(\r\n          tooltip-position=\"top\"\r\n          tooltip=\"add section\"\r\n          :class=\"{ 'is-red': listShown, 'is-rotated': listShown }\"\r\n          :disabled=\"!$builder.isEditing\"\r\n          @click=\"newSection\"\r\n        )\r\n          VuseIcon(name='plus')\r\n\r\n    ul.menu(:class=\"{ 'is-visiable': listShown }\" ref=\"menu\")\r\n      li.menu-group(v-for=\"(group, name) in groups\"  v-if=\"group.length\")\r\n        .menu-header(@click=\"toggleGroupVisibility\")\r\n          span.menu-title {{ name }}\r\n          span.menu-icon\r\n            VuseIcon(name='arrowDown')\r\n        .menu-body\r\n          template(v-for=\"section in group\")\r\n            a.menu-element(\r\n              @click=\"addSection(section)\"\r\n              @drag=\"currentSection = section\"\r\n            )\r\n              img.menu-elementImage(v-if=\"section.cover\" :src=\"section.cover\")\r\n              span.menu-elementTitle {{ section.name }}\r\n\r\n</template>\r\n\r\n<script>\r\nimport Sortable from 'sortablejs';\r\nimport VuseIcon from './VuseIcon';\r\n\r\nexport default {\r\n  name: 'VuseBuilder',\r\n  components: {\r\n    VuseIcon\r\n  },\r\n  props: {\r\n    showIntro: {\r\n      type: Boolean,\r\n      default: true\r\n    },\r\n    data: {\r\n      type: Object,\r\n      default: () => ({\r\n        title: '',\r\n        sections: []\r\n      })\r\n    }\r\n  },\r\n  data () {\r\n    return {\r\n      title: null,\r\n      listShown: false,\r\n      tempSections: null,\r\n      sections: this.getSections(),\r\n      currentSection: '',\r\n      groups: {}\r\n    }\r\n  },\r\n\r\n  watch: {\r\n    title (value) {\r\n      this.$builder.title = value;\r\n      document.title = value;\r\n    }\r\n  },\r\n  created () {\r\n    // sets the initial data.\r\n    this.$builder.set(this.data);\r\n    this.title = this.$builder.title;\r\n    this.themes = this.$builder.themes;\r\n    this.generateGroups();\r\n  },\r\n  mounted () {\r\n    this.$builder.rootEl = this.$refs.artboard;\r\n    const groups = this.$refs.menu.querySelectorAll('.menu-body');\r\n    const _self = this;\r\n    groups.forEach((group) => {\r\n      Sortable.create(group, {\r\n        group: {\r\n          name: 'sections-group',\r\n          put: false,\r\n          pull: 'clone'\r\n        },\r\n        sort: false\r\n      });\r\n    });\r\n    this.sortable = Sortable.create(this.$refs.artboard, {\r\n      group: {\r\n        name: 'artboard',\r\n        put: 'sections-group'\r\n      },\r\n      animation: 150,\r\n      scroll: true,\r\n      scrollSpeed: 10,\r\n      sort: false,\r\n      disabled: true,\r\n      preventOnFilter: false,\r\n      onAdd (evt) {\r\n        _self.addSection(_self.currentSection, evt.newIndex);\r\n        evt.item.remove();\r\n      },\r\n      onUpdate (evt) {\r\n        _self.$builder.sort(evt.oldIndex, evt.newIndex);\r\n      }\r\n    });\r\n  },\r\n\r\n  updated () {\r\n    if (this.$builder.scrolling) {\r\n      this.$builder.scrolling(this.$refs.artboard);\r\n    }\r\n  },\r\n\r\n  beforeDestroy () {\r\n    this.$builder.clear();\r\n  },\r\n  methods: {\r\n    newSection () {\r\n      // add the section immediatly if none are present.\r\n      if (this.sections.length === 1) {\r\n        this.addSection(this.sections[0]);\r\n        return;\r\n      }\r\n      this.toggleListVisibility();\r\n    },\r\n    addSection (section, position) {\r\n      this.$builder.add(section, position);\r\n    },\r\n    clearSections () {\r\n      this.tempSections = this.$builder.clear();\r\n      setTimeout(() => {\r\n        this.tempSections = null;\r\n      }, 5000);\r\n    },\r\n    undo () {\r\n      this.$builder.sections = this.tempSections;\r\n      this.tempSections = null;\r\n    },\r\n    addTheme (theme) {\r\n      this.$builder.set(theme);\r\n    },\r\n    toggleSort () {\r\n      this.$builder.isSorting = !this.$builder.isSorting;\r\n      this.$builder.isEditing = !this.$builder.isSorting;\r\n      if (!this.$builder.isSorting && this.sortable) {\r\n        this.sortable.option('sort', false);\r\n        this.sortable.option('disabled', true);\r\n        return;\r\n      }\r\n      this.sortable.option('disabled', false);\r\n      this.sortable.option('sort', true);\r\n    },\r\n    toggleListVisibility () {\r\n      this.listShown = !this.listShown;\r\n      this.sortable.option('disabled', !this.listShown);\r\n    },\r\n    showList () {\r\n      this.listShown = true;\r\n      this.sortable.option('disabled', false);\r\n    },\r\n    hideList () {\r\n      this.listShown = false;\r\n      this.sortable.option('disabled', true);\r\n    },\r\n    toggleGroupVisibility (e) {\r\n      const element = e.target;\r\n      const group = element.closest('.menu-group');\r\n      group.classList.toggle('is-visiable');\r\n    },\r\n    submit () {\r\n      this.$emit('saved', this.$builder);\r\n    },\r\n    generateGroups () {\r\n      let groups = { random: [] };\r\n\r\n      // group sections together\r\n      this.sections.forEach((section) => {\r\n        let sectionGroup = section.group;\r\n        if (!sectionGroup) {\r\n          groups.random.push(section);\r\n          return;\r\n        }\r\n        if (!groups[sectionGroup]) {\r\n          groups[sectionGroup] = [section];\r\n          return;\r\n        }\r\n        groups[sectionGroup].push(section);\r\n      })\r\n      this.groups = groups;\r\n    },\r\n    getSections () {\r\n      let sections = [];\r\n\r\n      // get sections data\r\n      sections = Object.keys(this.$builder.components).map((sec) => {\r\n        return {\r\n          name: sec,\r\n          group: this.$builder.components[sec].options.group,\r\n          cover: this.$builder.components[sec].options.cover,\r\n          schema: this.$builder.components[sec].options.$schema\r\n        }\r\n      });\r\n      return sections;\r\n    }\r\n  }\r\n};\r\n</script>\r\n\r\n<style lang=\"stylus\">\r\n@import '../stylus/_app.styl'\r\n\r\n.artboard\r\n  transform-origin: top center\r\n  &.is-editable .is-editable\r\n    outline: none\r\n    &:hover\r\n      box-shadow: inset 0 0 0 2px $gray\r\n.controller\r\n  box-sizing: border-box\r\n  &-panel\r\n    position: fixed\r\n    z-index: 200\r\n    bottom: 30px\r\n    right: 40px\r\n  &-input\r\n    outline: none\r\n    border: 1px solid $gray\r\n    padding: 0.5em 1em\r\n    margin: 20px 0\r\n    border-radius: 40px\r\n    width: 100%\r\n    font-size: 16px\r\n    &:focus\r\n      border-color: $blue\r\n      box-shadow: 0 0 0 2px alpha($blue, 50%)\r\n  &-button\r\n    transition: 0.2s\r\n    border: none\r\n    outline: none\r\n    border-radius: 20px\r\n    padding: 5px\r\n    color: $white\r\n    fill: $white\r\n    font-size: 16px\r\n    svg\r\n      transition: 0.2s\r\n    &:not(:last-child)\r\n      margin-right: 20px\r\n    &.is-rotated >svg\r\n      transform: rotate(45deg)\r\n    &:hover\r\n      @extends $floatHover\r\n    &.is-blue\r\n      background-color: $blue\r\n      &:hover\r\n        background-color: darken($blue, 20%)\r\n    &.is-red\r\n      background-color: $red\r\n      &:hover\r\n        background-color: darken($red, 20%)\r\n    &.is-green\r\n      background-color: $green\r\n      &:hover\r\n        background-color: darken($green, 20%)\r\n    &.is-dark\r\n      background-color: $dark\r\n      &:hover\r\n        background-color: darken($dark, 20%)\r\n    &.is-gray\r\n      background-color: $gary\r\n      &:hover\r\n        background-color: darken($gray, 20%)\r\n  &-intro\r\n    width: 100%\r\n    max-width: 500px\r\n    margin: auto\r\n    display: flex\r\n    justify-content: center\r\n    align-items: center\r\n    flex-direction: column\r\n    padding: 70px 50px\r\n    text-align: center\r\n    font-size: 30px\r\n    color: $dark\r\n\r\n  &-themes\r\n    display: flex\r\n    flex-direction: column\r\n    width: 100%\r\n\r\n  &-theme\r\n    background-color: $white\r\n    color: $dark\r\n    border: 1px solid $gray\r\n    margin: 5px\r\n    padding: 20px\r\n    border-radius: 4px\r\n    width: 100%\r\n    cursor: pointer\r\n    font-size: 16px\r\n    &:hover\r\n      border-color: $blue\r\n.menu\r\n  user-select: none\r\n  -moz-user-select: none\r\n  position: fixed\r\n  z-index 300\r\n  top: 0\r\n  left: 0\r\n  bottom: 0\r\n  margin: 0\r\n  width: 250px\r\n  background: $white\r\n  padding: 20px 10px\r\n  display: flex\r\n  flex-direction: column\r\n  overflow-y: auto\r\n  list-style: none\r\n  transition: 0.4s\r\n  box-shadow: 1px 0 10px alpha($dark, 20%)\r\n  transform: translate3d(-100%, 0, 0)\r\n  &.is-visiable\r\n    transform: translate3d(0, 0, 0)\r\n  &-body\r\n    display: none\r\n    padding: 0\r\n    margin: 0\r\n    list-style: none\r\n    ~/-group &\r\n      width: 90%\r\n      margin: 10px auto\r\n    ~/-group.is-visiable &\r\n      display: block\r\n  &-icon\r\n    width: 24px\r\n    height: 24px\r\n    fill: $gray\r\n    transition: 0.2s\r\n    ~/-group.is-visiable &\r\n      transform: rotate(180deg)\r\n\r\n  &-element\r\n    position: relative\r\n    display: flex\r\n    justify-content: center\r\n    align-items: center\r\n    width: 100%\r\n    min-height: 50px\r\n    border-radius: 5px\r\n    background: darken($gray, 10%)\r\n    transition: 0.3s\r\n    cursor: pointer\r\n    color: $white\r\n    overflow: hidden\r\n    user-select: none\r\n    -moz-user-select: none\r\n    &:not(:last-child)\r\n      margin-bottom: 10px\r\n    &:hover\r\n      @extends $floatHover\r\n\r\n  &-elementImage\r\n    max-width: 100%\r\n    pointer-events: none\r\n    +\r\n      ~/-elementTitle\r\n        position: absolute\r\n        right: 0\r\n        bottom: 0\r\n        left: 0\r\n        text-shadow: 1px 1px 2px alpha($black, 80%)\r\n        text-align: center\r\n        padding: 5px\r\n\r\n  &-header\r\n    display: flex\r\n    justify-content: space-between\r\n    align-items: center\r\n    padding: 10px 5px\r\n    border-bottom: 1px solid alpha($black, 5%)\r\n\r\n.sortable-ghost\r\n  opacity: 0.3\r\n  box-shadow: 0 0 2px 1px $blue\r\n\r\n.is-editable\r\n  &:hover\r\n    box-shadow: inset 0 0 0 2px $gray\r\n</style>\r\n"
  },
  {
    "path": "src/components/VuseIcon.js",
    "content": "const icons = {\n  plus: 'M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z',\n  tic: 'M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z',\n  sort: 'M14 5h8v2h-8zm0 5.5h8v2h-8zm0 5.5h8v2h-8zM2 11.5C2 15.08 4.92 18 8.5 18H9v2l3-3-3-3v2h-.5C6.02 16 4 13.98 4 11.5S6.02 7 8.5 7H12V5H8.5C4.92 5 2 7.92 2 11.5z',\n  link: 'M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z',\n  palettes: 'M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9c.83 0 1.5-.67 1.5-1.5 0-.39-.15-.74-.39-1.01-.23-.26-.38-.61-.38-.99 0-.83.67-1.5 1.5-1.5H16c2.76 0 5-2.24 5-5 0-4.42-4.03-8-9-8zm-5.5 9c-.83 0-1.5-.67-1.5-1.5S5.67 9 6.5 9 8 9.67 8 10.5 7.33 12 6.5 12zm3-4C8.67 8 8 7.33 8 6.5S8.67 5 9.5 5s1.5.67 1.5 1.5S10.33 8 9.5 8zm5 0c-.83 0-1.5-.67-1.5-1.5S13.67 5 14.5 5s1.5.67 1.5 1.5S15.33 8 14.5 8zm3 4c-.83 0-1.5-.67-1.5-1.5S16.67 9 17.5 9s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z',\n  close: 'M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z',\n  bold: 'M15.6 10.79c.97-.67 1.65-1.77 1.65-2.79 0-2.26-1.75-4-4-4H7v14h7.04c2.09 0 3.71-1.7 3.71-3.79 0-1.52-.86-2.82-2.15-3.42zM10 6.5h3c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-3v-3zm3.5 9H10v-3h3.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5z',\n  italic: 'M10 4v3h2.21l-3.42 8H6v3h8v-3h-2.21l3.42-8H18V4z',\n  underline: 'M12 17c3.31 0 6-2.69 6-6V3h-2.5v8c0 1.93-1.57 3.5-3.5 3.5S8.5 12.93 8.5 11V3H6v8c0 3.31 2.69 6 6 6zm-7 2v2h14v-2H5z',\n  center: 'M7 15v2h10v-2H7zm-4 6h18v-2H3v2zm0-8h18v-2H3v2zm4-6v2h10V7H7zM3 3v2h18V3H3z',\n  left: 'M15 15H3v2h12v-2zm0-8H3v2h12V7zM3 13h18v-2H3v2zm0 8h18v-2H3v2zM3 3v2h18V3H3z',\n  right: 'M3 21h18v-2H3v2zm6-4h12v-2H9v2zm-6-4h18v-2H3v2zm6-4h12V7H9v2zM3 3v2h18V3H3z',\n  trash: 'M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z',\n  align: 'M3 21h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18V7H3v2zm0-6v2h18V3H3z',\n  textStyle: 'M23 7V1h-6v2H7V1H1v6h2v10H1v6h6v-2h10v2h6v-6h-2V7h2zM3 3h2v2H3V3zm2 18H3v-2h2v2zm12-2H7v-2H5V7h2V5h10v2h2v10h-2v2zm4 2h-2v-2h2v2zM19 5V3h2v2h-2zm-5.27 9h-3.49l-.73 2H7.89l3.4-9h1.4l3.41 9h-1.63l-.74-2zm-3.04-1.26h2.61L12 8.91l-1.31 3.83z',\n  section: 'M10 18h5v-6h-5v6zm-6 0h5V5H4v13zm12 0h5v-6h-5v6zM10 5v6h11V5H10z',\n  arrowDown: 'M7.41 7.84L12 12.42l4.59-4.58L18 9.25l-6 6-6-6z',\n  arrowRight: 'M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z',\n  arrowLeft: 'M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z',\n  mobile: 'M15.5 1h-8C6.12 1 5 2.12 5 3.5v17C5 21.88 6.12 23 7.5 23h8c1.38 0 2.5-1.12 2.5-2.5v-17C18 2.12 16.88 1 15.5 1zm-4 21c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm4.5-4H7V4h9v14z',\n  tablet: 'M21 4H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h18c1.1 0 1.99-.9 1.99-2L23 6c0-1.1-.9-2-2-2zm-2 14H5V6h14v12z',\n  laptop: 'M20 18c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2H0v2h24v-2h-4zM4 6h16v10H4V6z',\n  monitor: 'M21 2H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h7v2H8v2h8v-2h-2v-2h7c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H3V4h18v12z',\n  download: 'M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z',\n  eye: 'M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z',\n  undo: 'M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z'\n};\n\nexport default {\n  functional: true,\n  props: {\n    name: {\n      type: String,\n      required: true,\n      validator: (val) => {\n        if (!(val in icons) && process.env.NODE_ENV !== 'production') {\n          console.warn(`Invalid icon name \"${val}\"`);\n          return false;\n        }\n\n        return true;\n      }\n    }\n  },\n  render (h, { props }) {\n    const path = h('path', {\n      attrs: {\n        d: icons[props.name]\n      }\n    });\n\n    return h(\n      'svg',\n      {\n        attrs: {\n          version: '1.1',\n          xmlns: 'http://www.w3.org/2000/svg',\n          class: 'vuse-icon',\n          viewBox: '0 0 24 24'\n        }\n      },\n      [path]\n    );\n  }\n};\n"
  },
  {
    "path": "src/components/VuseRenderer.vue",
    "content": "<template lang=\"pug\">\r\n  #artboard.artboard\r\n    component(v-for='section in $builder.sections'\r\n      :is='section.name'\r\n      :key='section.id'\r\n      :id='section.id'\r\n    )\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n  name: 'VuseRenderer',\r\n  props: {\r\n    data: {\r\n      type: Object,\r\n      default: () => ({\r\n        title: '',\r\n        sections: []\r\n      })\r\n    }\r\n  },\r\n  created () {\r\n    this.$builder.set(this.data);\r\n    this.$builder.isEditing = false;\r\n    this.$builder.isRendered = true;\r\n  }\r\n};\r\n</script>\r\n"
  },
  {
    "path": "src/components/VuseStyler.vue",
    "content": "<template lang=\"pug\">\r\n  .styler(\r\n    ref=\"styler\"\r\n    id=\"styler\"\r\n    v-if=\"$builder.isEditing\"\r\n    :class=\"{ 'is-visible': isVisible }\"\r\n    @click.stop=\"\"\r\n  )\r\n    ul.styler-list\r\n      li(v-if=\"type === 'button' || type === 'section'\")\r\n        button.styler-button(@click=\"updateOption('colorer')\")\r\n          VuseIcon(name='palettes')\r\n      li(v-if=\"type === 'button'\")\r\n        button.styler-button(@click=\"updateOption('link')\")\r\n          VuseIcon(name='link')\r\n      li(v-if=\"type === 'header' || type === 'section'\")\r\n        button.styler-button(@click=\"removeSection\")\r\n          VuseIcon(name='trash')\r\n      template(v-if=\"type === 'text'\")\r\n        li: button.styler-button(@click=\"updateOption('textColor')\")\r\n            VuseIcon(name='palettes')\r\n        li: button.styler-button(@click=\"updateOption('align')\")\r\n            VuseIcon(name='align')\r\n        li: button.styler-button(@click=\"updateOption('textStyle')\")\r\n            VuseIcon(name='textStyle')\r\n      template(v-if=\"type === 'grid'\")\r\n        li: button.styler-button(@click=\"selectDevice('mobile')\")\r\n            VuseIcon(name='mobile')\r\n        //- li: button.styler-button(@click=\"selectDevice('tablet')\")\r\n        //-     VuseIcon(name='tablet')\r\n        li: button.styler-button(@click=\"selectDevice('desktop')\")\r\n            VuseIcon(name='laptop')\r\n        //- li: button.styler-button(@click=\"selectDevice('widescreen')\")\r\n        //-     VuseIcon(name='monitor')\r\n\r\n    ul.styler-list\r\n      li(v-if=\"currentOption === 'colorer'\")\r\n        ul.colorer\r\n          li(v-for=\"color in colors\")\r\n            input(\r\n              type=\"radio\"\r\n              :id=\"`color${color.charAt(0).toUpperCase() + color.slice(1)}`\"\r\n              name=\"colorer\"\r\n              :value=\"color\"\r\n              v-model=\"colorerColor\"\r\n            )\r\n      li(v-if=\"currentOption === 'textColor'\")\r\n          ul.colorer\r\n            li(v-for=\"(color, index) in colors\")\r\n              input(\r\n                type=\"radio\"\r\n                :id=\"`color${color.charAt(0).toUpperCase() + color.slice(1)}`\"\r\n                name=\"colorer\"\r\n                :value=\"textColors[index]\"\r\n                v-model=\"textColor\"\r\n                )\r\n      li(v-if=\"currentOption === 'link'\")\r\n        .input-group.is-rounded.has-itemAfter.is-primary\r\n          input.input(type=\"text\" placeholder=\"type your link\" v-model=\"url\")\r\n          button.button(@click=\"addLink\")\r\n            VuseIcon(name='link')\r\n\r\n      li(v-if=\"currentOption === 'align'\")\r\n        ul.align\r\n          li: button.styler-button(@click=\"execute('justifyleft')\")\r\n            VuseIcon(name='left')\r\n          li: button.styler-button(@click=\"execute('justifycenter')\")\r\n            VuseIcon(name='center')\r\n          li: button.styler-button(@click=\"execute('justifyright')\")\r\n            VuseIcon(name='right')\r\n\r\n      li(v-if=\"currentOption === 'textStyle'\")\r\n        ul.align\r\n          li: button.styler-button(@click=\"execute('bold')\")\r\n            VuseIcon(name='bold')\r\n          li: button.styler-button(@click=\"execute('italic')\")\r\n            VuseIcon(name='italic')\r\n          li: button.styler-button(@click=\"execute('underline')\")\r\n            VuseIcon(name='underline')\r\n\r\n      li(v-if=\"currentOption === 'columnWidth'\")\r\n        ul.align\r\n          li: button.styler-button(@click=\"gridValue--\")\r\n            VuseIcon(name='arrowLeft')\r\n          li: input(type=\"number\" min=\"0\" max=\"12\" v-model=\"gridValue\").styler-input\r\n          li: button.styler-button(@click=\"gridValue++\")\r\n            VuseIcon(name='arrowRight')\r\n\r\n</template>\r\n\r\n<script>\r\nimport Popper from 'popper.js';\r\nimport VuseIcon from './VuseIcon';\r\nimport { isParentTo } from './../util';\r\n\r\nexport default {\r\n  name: 'Styler',\r\n  components: {\r\n    VuseIcon\r\n  },\r\n  props: {\r\n    el: {\r\n      type: Object,\r\n      required: true\r\n    },\r\n    type: {\r\n      type: String,\r\n      required: true\r\n    },\r\n    name: {\r\n      type: String,\r\n      required: true\r\n    },\r\n    section: {\r\n      type: Object,\r\n      required: true\r\n    }\r\n  },\r\n  data: () => ({\r\n    colors: ['blue', 'green', 'red', 'black', 'white'],\r\n    textColors: ['#4da1ff', '#38E4B7', '#EA4F52', '#000000', '#FFFFFF'],\r\n    textColor: '',\r\n    oldColorerColor: '',\r\n    colorerColor: '',\r\n    mouseTarget: '',\r\n    currentOption: '',\r\n    url: '',\r\n    gridValue: 0,\r\n    isVisible: false\r\n  }),\r\n  watch: {\r\n    colorerColor: function () {\r\n      this.changeColor();\r\n    },\r\n    textColor: function () {\r\n      this.execute('forecolor', this.textColor)\r\n    },\r\n    gridValue: function () {\r\n      this.gridValue = Math.min(Math.max(this.gridValue, 0), 12);\r\n      this.section.set(this.name, (grid) => {\r\n        grid[this.device] = this.gridValue;\r\n      });\r\n    }\r\n  },\r\n  created () {\r\n    if (this.type === 'button') {\r\n      this.url = this.section.get(`${this.name}.href`);\r\n      this.el.contentEditable = 'true';\r\n    }\r\n    if (this.type === 'text') {\r\n      this.el.contentEditable = 'true';\r\n    }\r\n  },\r\n  mounted () {\r\n    if (!this.$builder.isEditing) return;\r\n\r\n    // add listeners to show/hide styler\r\n    this.el.addEventListener('click', this.showStyler);\r\n  },\r\n  beforeDestroy () {\r\n    this.hideStyler();\r\n    this.$refs.styler.remove();\r\n    this.el.classList.remove('is-editable');\r\n    this.el.removeEventListener('click', this.showStyler);\r\n    document.removeEventListener('click', this.hideStyler, true);\r\n  },\r\n  methods: {\r\n    updateOption (option) {\r\n      this.currentOption = option;\r\n      this.$nextTick(() => {\r\n        this.popper.update();\r\n      })\r\n    },\r\n    addLink () {\r\n      this.section.set(`${this.name}.href`, this.url);\r\n    },\r\n    changeColor () {\r\n      this.removeClass(`is-${this.oldColorerColor}`);\r\n      this.oldColorerColor = this.colorerColor;\r\n      this.addClass(`is-${this.colorerColor}`);\r\n    },\r\n    addClass (className) {\r\n      this.section.set(this.name, (value) => {\r\n        if (value && value.classes && Array.isArray(value.classes)) {\r\n          value = value.classes;\r\n        }\r\n        value.push(className);\r\n      });\r\n    },\r\n    selectDevice (device) {\r\n      const gridValue = this.section.get(this.name)[device];\r\n      this.updateOption('columnWidth');\r\n      this.device = device;\r\n      this.gridValue = gridValue;\r\n    },\r\n    removeClass (className) {\r\n      if (Array.isArray(className)) {\r\n        return className.forEach(c => {\r\n          this.removeClass(c);\r\n        });\r\n      }\r\n      this.section.set(this.name, value => {\r\n        if (value && value.classes && Array.isArray(value.classes)) {\r\n          value = value.classes;\r\n        }\r\n        const idx = value.indexOf(className);\r\n        value.splice(idx, 1);\r\n      });\r\n    },\r\n    removeSection () {\r\n      this.$builder.remove(this.section);\r\n    },\r\n    execute (command, value = null) {\r\n      this.el.focus();\r\n      document.execCommand(command, false, value);\r\n    },\r\n    showStyler (event) {\r\n      event.stopPropagation();\r\n      if (this.isVisible) return;\r\n      this.isVisible = true;\r\n\r\n      // exute popper element\r\n      if (!this.popper) {\r\n        const position = this.$props.type === 'section' ? 'left-start' : 'top';\r\n        this.popper = new Popper(this.el, this.$refs.styler, {\r\n          placement: position\r\n        });\r\n      }\r\n      document.addEventListener('click', this.hideStyler, true);\r\n      this.currentOption = '';\r\n    },\r\n    hideStyler (event) {\r\n      if (\r\n        (event && isParentTo(event.target, this.$el)) ||\r\n        (event && isParentTo(event.target, this.el))\r\n      ) {\r\n        return\r\n      }\r\n      this.isVisible = false;\r\n      if (this.popper) {\r\n        this.popper.destroy();\r\n        this.popper = null;\r\n      }\r\n      document.removeEventListener('click', this.hideStyler, true);\r\n\r\n      if (this.type === 'section' || this.type === 'grid') {\r\n        return;\r\n      }\r\n      if (this.type === 'button') {\r\n        this.section.set(`${this.name}.text`, this.el.innerHTML);\r\n        return;\r\n      }\r\n\r\n      this.section.set(this.name, this.el.innerHTML);\r\n    }\r\n  }\r\n};\r\n</script>\r\n\r\n<style lang=\"stylus\">\r\n@import '~@baianat/base.framework/src/stylus/util/colors'\r\n\r\n.styler\r\n  position: absolute\r\n  top: 0\r\n  z-index: 200\r\n  visibility: hidden\r\n  opacity: 0\r\n  margin: 10px 0\r\n  padding: 5px\r\n  background: $dark\r\n  border-radius: 26px\r\n  display: flex\r\n  flex-direction: column\r\n  justify-content: center\r\n  align-items: center\r\n  &-list\r\n    display: flex\r\n    justify-content: center\r\n    align-items: center\r\n    list-style: none\r\n    margin: 0\r\n    padding: 0\r\n  &-input\r\n    background: $white\r\n    color: $dark\r\n    border: 0\r\n    outline: 0\r\n    width: 40px\r\n    height: 40px\r\n    border-radius: 42px\r\n    margin: 0 5px 0 0\r\n    text-align: center\r\n    -webkit-appearance: none\r\n    -moz-appearance: textfield\r\n    appearance: none\r\n  &-button\r\n    display: flex\r\n    justify-content: center\r\n    align-items: center\r\n    outline: 0\r\n    background: $dark\r\n    border: 0\r\n    fill: $white\r\n    color: $white\r\n    width: 42px\r\n    height: 42px\r\n    border-radius: 42px\r\n    margin: 0 5px 0 0\r\n    &:hover\r\n      background: darken($dark, 20%)\r\n    &:first-child\r\n      margin-left: 5px\r\n  &-selector\r\n    margin: 0 5px\r\n  &.is-visible\r\n    visibility: visible\r\n    opacity: 1\r\n  .input-group\r\n    margin: 5px\r\n\r\n.align\r\n  @extend .styler-list\r\n  height: 42px\r\n\r\n.colorer\r\n  @extend .styler-list\r\n  height: 42px\r\n  li >input\r\n    -webkit-appearance: none\r\n    -moz-appearance: textfield\r\n    appearance: none\r\n    width: 30px\r\n    height: 30px\r\n    border-radius: 40px\r\n    border: 4px solid darken($dark, 20%)\r\n    margin: 0 5px\r\n    outline: none\r\n    &:checked\r\n      border-color: lighten($dark, 20%)\r\n    &:hover\r\n      border-color: lighten($dark, 20%)\r\n    &#colorRed\r\n      background $red\r\n    &#colorBlue\r\n      background $blue\r\n    &#colorGreen\r\n      background $green\r\n    &#colorBlack\r\n      background $black\r\n    &#colorWhite\r\n      background $white\r\n\r\n.is-hidden\r\n  display: none\r\n\r\ninput[type=number]::-webkit-inner-spin-button\r\ninput[type=number]::-webkit-outer-spin-button\r\n  -webkit-appearance: none\r\n  margin: 0\r\n</style>\r\n"
  },
  {
    "path": "src/index.esm.js",
    "content": "import Vuse from './vuse';\nimport * as types from './types';\n\nconst version = '__VERSION__';\n\n// Auto install if Vue is defined globally.\nif (typeof Vue !== 'undefined') {\n  // eslint-disable-next-line\n  Vue.use(Builder);\n}\n\nexport {\n  Vuse,\n  types,\n  version\n};\n\nexport default Vuse;\n"
  },
  {
    "path": "src/index.js",
    "content": "import Vuse from './vuse';\r\nimport * as types from './types';\r\n\r\n// Auto install if Vue is defined globally.\r\nif (typeof Vue !== 'undefined') {\r\n  // eslint-disable-next-line\r\n  Vue.use(Builder);\r\n}\r\n\r\nVuse.version = '__VERSION__';\r\nVuse.types = types;\r\n\r\nexport default Vuse;\r\n"
  },
  {
    "path": "src/mixin.js",
    "content": "function installMixin ({ builder }) {\r\n  builder.mixin = {\r\n    provide: function providesBuilder () {\r\n      const provides = {};\r\n      if (this.$builder) {\r\n        provides.$builder = this.$builder;\r\n      }\r\n\r\n      if (this.$section) {\r\n        provides.$section = this.$section;\r\n      }\r\n\r\n      return provides;\r\n    },\r\n    beforeCreate () {\r\n      this.$builder = builder;\r\n      if (!this.$options.propsData || this.$options.propsData.id === undefined) {\r\n        return;\r\n      }\r\n      this.$section = this.$builder.find(this.$options.propsData.id);\r\n      this.$options.computed = {\r\n        $sectionData: function getSectionData () {\r\n          return this.$section.data;\r\n        },\r\n        gridClasses: function getGridClasses () {\r\n          return this.$sectionData.columns.map(column => {\r\n            return Object.keys(column.grid).map(device => {\r\n              if (!column.grid[device]) {\r\n                return '';\r\n              }\r\n              const prefix = this.$builder.columnsPrefix[device]\r\n              return `${prefix}${column.grid[device]}`;\r\n            });\r\n          })\r\n        }\r\n      }\r\n    },\r\n    updated () {\r\n      Array.from(this.$el.querySelectorAll('[contentEditable]')).forEach((el) => {\r\n        el.contentEditable = this.$builder.isEditing;\r\n      });\r\n    }\r\n  };\r\n};\r\n\r\nexport default installMixin;\r\n"
  },
  {
    "path": "src/plugins/pwa.js",
    "content": "import JSZip from 'jszip';\nimport saveAs from 'save-as';\nimport { getImageBlob, cleanDOM } from '../../src/util';\n\n/**\n * Adds a service worker that caches the static assets.\n */\nfunction createSW (output, { images = [] } = {}) {\n  output.file('sw.js', `\n    const staticCacheName = 'bbuilder-static-v1';\n\n    self.addEventListener('install', function(event) {\n      event.waitUntil(\n        caches.open(staticCacheName).then(function(cache) {\n          return cache.addAll([\n            '/',\n            '/assets/js/main.js',\n            ${images.map(i => \"'/assets/img/\" + i.name + \"'\").join(',').trim(',')}\n          ]);\n        })\n      );\n    });\n\n    function serveAsset(request) {\n      return caches.open(staticCacheName).then(function(cache) {\n        return cache.match(request).then(function(response) {\n          if (response) return response;\n\n          return fetch(request).then(function(networkResponse) {\n            cache.put(request, networkResponse.clone());\n            return networkResponse;\n          });\n        });\n      });\n    }\n\n    self.addEventListener('fetch', function(event) {\n      const requestUrl = new URL(event.request.url);\n\n      if (requestUrl.origin === location.origin) {\n        if (requestUrl.pathname === '/') {\n          event.respondWith(caches.match('/'));\n          return;\n        }\n        if (requestUrl.pathname.startsWith('/assets/')) {\n          event.respondWith(serveAsset(event.request));\n          return;\n        }\n      }\n\n      event.respondWith(\n        caches.match(event.request).then(function(response) {\n          return response || fetch(event.request);\n        })\n      );\n    });\n  `);\n\n  const scripts = output.folder('assets/js');\n  scripts.file('main.js', `\n    function registerSW () {\n      if (!navigator.serviceWorker) return;\n      navigator.serviceWorker.register('/sw.js').then(function (reg) {\n        console.log('SW registered!');\n      });\n    }\n\n    registerSW();\n  `);\n}\n\n/**\n * Adds some PWA features.\n */\nfunction createPWA (output, payload) {\n  createSW(output, payload);\n}\n\nfunction download (assets) {\n  const frag = this.outputFragment();\n  const images = Array.from(frag.querySelectorAll('img'));\n  const artboard = frag.querySelector('#artboard');\n  const title = document.title;\n  const zip = new JSZip();\n  const output = zip.folder('project');\n  const imgFolder = output.folder('assets/img');\n  const cssFolder = output.folder('assets/css');\n\n  Promise.all(images.map((image) => {\n    const imageLoader = getImageBlob(image.src);\n    return imageLoader.then((img) => {\n      imgFolder.file(img.name, img.blob, { base64: true });\n      image.setAttribute('src', `assets/img/${img.name}`);\n\n      return img;\n    });\n  })).then(images => {\n    createPWA(output, { images });\n  }).then(() => {\n    return new Promise((resolve, reject) => {\n      const assetsClient = new XMLHttpRequest();\n      assetsClient.open('GET', assets.css);\n      assetsClient.onload = function () {\n        resolve(this.response);\n      }\n      assetsClient.send(null);\n    }).then((content) => {\n      cssFolder.file('app.css', content);\n      return content;\n    });\n  }).then(() => {\n    cleanDOM(frag);\n    output.file('index.html',\n      `<html>\n          <head>\n            <title>${title}</title>\n            <link href=\"assets/css/app.css\" rel=\"stylesheet\">\n          </head>\n          <body>\n            ${artboard.innerHTML}\n          <script src=\"/assets/js/main.js\"></script>\n          </body>\n        </html>`);\n\n    zip.generateAsync({ type: 'blob' }).then((blob) => {\n      saveAs(blob, 'project.zip');\n    });\n  });\n}\n\nexport default function install ({ builder }) {\n  builder.download = download;\n};\n"
  },
  {
    "path": "src/plugins/scrolling.js",
    "content": "import 'intersection-observer';\n\nconst callback = (entries, observer) => {\n  entries.forEach(entry => {\n    if (entry.intersectionRatio > 0.5) {\n      entry.target.classList.add('is-active');\n      entry.target.classList.remove('is-inactive');\n      return;\n    }\n    entry.target.classList.add('is-inactive');\n    entry.target.classList.remove('is-active');\n  });\n}\n\nconst observer = new IntersectionObserver(callback, {\n  root: null,\n  rootMargin: '0px',\n  threshold: [0.1, 0.5, 0.9, 1]\n});\n\nconst scrolling = (rootEl) => {\n  if (!rootEl) return;\n  let sections = Array.from(rootEl.querySelectorAll('section'));\n  sections.forEach(section => {\n    section.classList.add('is-inactive');\n    observer.observe(section);\n  });\n}\n\nexport default function install ({ builder }) {\n  builder.scrolling = scrolling;\n};\n"
  },
  {
    "path": "src/section.js",
    "content": "import getPath from 'lodash-es/get';\r\nimport toPath from 'lodash-es/toPath';\r\nimport Seeder from './seeder';\r\n\r\nconst SECTION_OPTIONS = {\r\n  name: null,\r\n  schema: {}\r\n};\r\n\r\nlet counter = 0;\r\n\r\nexport default class Section {\r\n  constructor (options) {\r\n    this.id = counter++;\r\n    options = Object.assign({}, SECTION_OPTIONS, options);\r\n    this.name = options.name;\r\n    this.schema = options.schema;\r\n    this.data = options.data || Seeder.seed(options.schema);\r\n    this.stylers = [];\r\n  }\r\n\r\n  set (name, value) {\r\n    const path = toPath(name);\r\n    const prop = path.pop();\r\n\r\n    path.shift();\r\n    const obj = path.length === 0 ? this.data : getPath(this.data, path);\r\n    if (typeof value === 'function') {\r\n      value(obj[prop]);\r\n      return;\r\n    }\r\n\r\n    obj[prop] = value;\r\n  }\r\n\r\n  get (name) {\r\n    const path = toPath(name);\r\n    const prop = path.pop();\r\n    path.shift();\r\n    const obj = path.length === 0 ? this.data : getPath(this.data, path);\r\n\r\n    return obj[prop];\r\n  }\r\n\r\n  destroy () {\r\n    this.stylers.forEach(styler => styler.$destroy())\r\n  }\r\n};\r\n"
  },
  {
    "path": "src/seeder.js",
    "content": "import * as types from './types';\r\nimport { isObject } from './util';\r\n\r\nconst ASSETS_DIR = '.';\r\nconst data = new Map([\r\n  [types.Title, 'Awesome title'],\r\n  [types.Text, 'We\\'re creating the best place to go when starting a new business or company.With Baianat you can instantly search domain names, social media handles, and see your logo in beautiful logotypes.'],\r\n  [types.Avatar, `${ASSETS_DIR}/img/avatar.png`],\r\n  [types.Logo, `${ASSETS_DIR}/img/google.svg`],\r\n  [types.Link, 'http://example.com'],\r\n  [types.Image, `${ASSETS_DIR}/img/baianat.png`],\r\n  [types.ClassList, () => []],\r\n  [types.Button, () => ({ text: 'Click Me!', classes: [], href: 'http://example.com' })],\r\n  [types.Quote, 'When you were made a leader, you weren\\'t given a crown; you were given the responsibility to bring out the best in others.'],\r\n  [types.Grid, () => ({mobile: '', tablet: '', desktop: '', widescreen: ''})],\r\n  [Number, 100],\r\n  [String, 'This is pretty neat']\r\n]);\r\n\r\nexport default class Seeder {\r\n  // Seeds values using a schema.\r\n  static seed (schema) {\r\n    if (isObject(schema)) {\r\n      return Object.keys(schema).reduce((values, key) => {\r\n        values[key] = Seeder.seed(schema[key]);\r\n        return values;\r\n      }, {});\r\n    } else if (Array.isArray(schema)) {\r\n      return schema.map(s => {\r\n        return Seeder.seed(s)\r\n      });\r\n    }\r\n\r\n    let value = data.get(schema);\r\n    if (value === undefined) {\r\n      value = schema;\r\n    }\r\n    return typeof value === 'function' ? value() : value;\r\n  }\r\n};\r\n"
  },
  {
    "path": "src/styler.js",
    "content": "import Styler from './components/VuseStyler.vue';\r\nimport { getTypeFromTagName, getTypeFromSchema } from './util';\r\n\r\nfunction installStyler ({ builder, Vue }) {\r\n  const StylerInstance = Vue.extend(Styler).extend({\r\n    beforeCreate () {\r\n      this.$builder = builder;\r\n    }\r\n  });\r\n\r\n  builder.styler = {\r\n    inserted (el, binding, vnode) {\r\n      const newNode = document.createElement('div');\r\n      const section = vnode.context.$section;\r\n      const rootApp = vnode.context.$root.$el;\r\n      rootApp.appendChild(newNode);\r\n      el.classList.add('is-editable');\r\n      section.stylers.push(new StylerInstance({\r\n        propsData: {\r\n          el,\r\n          section: section,\r\n          type: binding.arg || getTypeFromSchema(binding.expression, section.schema) || getTypeFromTagName(el.tagName),\r\n          name: binding.expression\r\n        }\r\n      }).$mount(newNode));\r\n    }\r\n  };\r\n};\r\n\r\nexport default installStyler;\r\n"
  },
  {
    "path": "src/stylus/_app.styl",
    "content": "@import variables\n@import colors\n\n.vuse-icon\n  display: block\n  width: 20px\n  height: 20px\n$floatHover\n  cursor: pointer\n  box-shadow: 0 14px 28px alpha($black, 0.125), 0 10px 10px alpha($black, 0.1)"
  },
  {
    "path": "src/stylus/colors.styl",
    "content": "/*\n * Color theme\n */\n$magenta ?= #eb008b\n$blue ?= #0072FF\n$cyan ?= #00d4f0\n$green ?= #18d88b\n$yellow ?= #ffdd57\n$orange ?= #ffa557\n$red ?= #ff3d3d\n$purple ?= #a324ea\n\n/*\n * Graysacle\n */\n$black ?= #000\n$dark ?= #323c47\n$gray ?= #c1c1c1\n$gray-dark ?= darken($gray, 10%)\n$gray-light ?= lighten($gray, 10%)\n$light ?= #f5f5f5\n$white ?= #fff\n"
  },
  {
    "path": "src/stylus/variables.styl",
    "content": "\n$flexCenter\n  display: flex\n  justify-content: center\n  align-items: center"
  },
  {
    "path": "src/types.js",
    "content": "export class Avatar {};\r\n\r\nexport class Title {};\r\n\r\nexport class Text {};\r\n\r\nexport class Logo {};\r\n\r\nexport class Image {};\r\n\r\nexport class Quote {};\r\n\r\nexport class Link {};\r\n\r\nexport class ClassList {};\r\n\r\nexport class Button {};\r\n\r\nexport class Grid { };\r\n"
  },
  {
    "path": "src/util.js",
    "content": "import getPath from 'lodash/get';\nimport * as types from './types';\n\nexport function isObject (obj) {\n  return obj && typeof obj === 'object' && obj !== null && !Array.isArray(obj);\n};\n\nexport function isParentTo (target, parent) {\n  let currentNode = target;\n  while (currentNode !== null) {\n    if (currentNode === parent) return true;\n    currentNode = currentNode.parentNode;\n  }\n  return false;\n}\n\n/**\n *\n * @param {String} target\n * @param {Object} schema\n */\nexport function getTypeFromSchema (target, schema) {\n  const tempTarget = target.split('.');\n  tempTarget.shift();\n  const value = getPath(schema, tempTarget.join('.'));\n  if (value === types.Grid) return 'grid';\n  if (value === types.Text) return 'text';\n  if (value === types.Title) return 'text';\n  if (value === types.Button) return 'button';\n  if (value === types.ClassList) return 'section';\n  if (value === String) return 'text';\n  if (value === Number) return 'text';\n\n  return null;\n}\n\nexport function getImageBlob (URL) {\n  return new Promise((resolve, reject) => {\n    const xhr = new XMLHttpRequest();\n    xhr.open('GET', URL);\n    xhr.responseType = 'blob';\n\n    xhr.onload = function () {\n      const imageBlob = this.response;\n      const fileType = this.response.type.split('/')[1].split('+')[0];\n      const randomNumber = new Date().getUTCMilliseconds();\n      const filename = `image-${randomNumber}.${fileType}`;\n      resolve({ blob: imageBlob, name: filename });\n    }\n    xhr.send(null);\n  });\n}\n\nexport function getTypeFromTagName (tagName) {\n  tagName = tagName.toUpperCase();\n  switch (tagName) {\n    case 'H1':\n      return 'text';\n    case 'H2':\n      return 'text';\n    case 'H3':\n      return 'text';\n    case 'H4':\n      return 'text';\n    case 'H5':\n      return 'text';\n    case 'H6':\n      return 'text';\n    case 'P':\n      return 'text';\n    case 'B':\n      return 'text';\n    case 'SPAN':\n      return 'text';\n    case 'BUTTON':\n      return 'button';\n    case 'A':\n      return 'button';\n    case 'SECTION':\n      return 'section';\n    case 'HEADER':\n      return 'section';\n    default:\n      break;\n  }\n}\n\nexport function cleanDOM (artboard) {\n  const editables = Array.from(artboard.querySelectorAll('.is-editable'));\n  const uploaders = Array.from(artboard.querySelectorAll('.uploader'));\n  const stylers = Array.from(artboard.querySelectorAll('.styler'));\n\n  editables.forEach((el) => {\n    el.contentEditable = 'inherit';\n    el.classList.remove('is-editable');\n  });\n  uploaders.forEach((el) => {\n    const input = el.querySelector(':scope > input');\n    const image = el.querySelector(':scope > img');\n\n    image.classList.add('add-full-width');\n    el.classList.remove('uploader');\n    input.remove();\n  });\n  stylers.forEach((styler) => {\n    styler.remove();\n  });\n}\n"
  },
  {
    "path": "src/vuse.js",
    "content": "import merge from 'lodash-es/merge';\nimport Section from './section';\nimport VuseBuilder from './components/VuseBuilder.vue';\nimport VuseRenderer from './components/VuseRenderer.vue';\nimport styler from './styler';\nimport mixin from './mixin';\nimport { cleanDOM } from './util';\n\nlet PLUGINS = [];\nlet mixier = {};\nconst BUILDER_OPTIONS = {\n  title: '',\n  intro: true,\n  sections: [],\n  plugins: [],\n  themes: [],\n  columnsPrefix: {\n    mobile: 'is-mobile-',\n    tablet: 'is-tablet-',\n    desktop: 'is-desktop-',\n    widescreen: 'is-widescreen-',\n    ultrawide: 'is-ultrawide-'\n  }\n};\n\n// To tell if it is installed or not\nlet _Vue = null;\n\nclass Vuse {\n  constructor (options) {\n    this.isEditing = true;\n    this.isSorting = false;\n    this.isRendered = false;\n    this.title = options.title;\n    this.intro = options.intro;\n    this.sections = options.sections;\n    this.columnsPrefix = options.columnsPrefix;\n    this.themes = options.themes;\n    this.components = {};\n    this.assets = {\n      css: options.assets.css || 'dist/css/app.css'\n    }\n    this.installPlugins();\n  }\n\n  /**\n   * Creates and adds a new section to the list of sections.\n   * @param {*} options\n   */\n  add (options, position) {\n    if (position !== undefined) {\n      this.sections.splice(position, 0, new Section(options));\n      return;\n    }\n    this.sections.push(new Section(options));\n  }\n\n  /**\n   * Finds a section with the specified id.\n   *\n   * @param {String|Number} id\n   */\n  find (id) {\n    return this.sections.find(s => s.id === id);\n  }\n\n  /**\n   * Removes a section with the specified id.\n   * @param {String|Number} id\n   */\n  remove (section) {\n    const id = this.sections.findIndex(s => s.id === section.id);\n    this.sections.splice(id, 1);\n    section.destroy();\n  }\n\n  /**\n   * Removes a section with the specified id.\n   * @param {String|Number} oldIndex\n   * @param {String|Number} newIndex\n   */\n  sort (oldIndex, newIndex) {\n    const section = this.sections[oldIndex];\n    this.sections.splice(oldIndex, 1);\n    this.sections.splice(newIndex, 0, section);\n  }\n\n  /**\n  * Constructs a document fragment.\n  */\n  outputFragment () {\n    const frag = document.createDocumentFragment();\n    frag.appendChild(document.head.cloneNode(true));\n    frag.appendChild(this.rootEl.cloneNode(true));\n\n    return frag;\n  }\n\n  /**\n  * clears the builder sections.\n  */\n  clear () {\n    const tempSections = this.sections;\n    this.sections.forEach(section => section.destroy());\n    this.sections = [];\n    return tempSections;\n  }\n\n  /**\n   * Static helper for components registration pre-installation.\n   *\n   * @param {String} name\n   * @param {Object} definition\n   */\n  static component (name, definition) {\n    // Just make a plugin that installs a component.\n    Vuse.use((ctx) => {\n      ctx.builder.component(name, definition);\n    });\n  }\n\n  /**\n   * Acts as a mixin for subcomponents.\n   * @param {Object} mixinObj\n   */\n  static mix (mixinObj) {\n    mixier = merge(mixier, mixinObj);\n  }\n\n  /**\n   * Adds a component section to the builder and augments it with the styler.\n   * @param {*} name\n   * @param {*} definition\n   */\n  component (name, definition) {\n    // reoslve the component name automatically.\n    if (typeof name === 'object') {\n      definition = name;\n      name = definition.name;\n    }\n\n    // if passed a plain object\n    if (!definition.extend) {\n      definition = _Vue.extend(definition);\n    }\n\n    this.components[name] = definition.extend({\n      directives: { styler: this.styler },\n      mixins: [this.mixin],\n      components: mixier.components\n    });\n  }\n\n  /**\n   * Installs added plugins.\n   */\n  installPlugins () {\n    PLUGINS.forEach((ctx) => {\n      ctx.plugin({ builder: this, Vue: _Vue }, ctx.options);\n    });\n    // reset to prevent duplications.\n    PLUGINS = [];\n  }\n\n  static install (Vue, options = {}) {\n    // already installed\n    if (_Vue) return;\n\n    _Vue = Vue;\n    const builder = new Vuse(Object.assign({}, BUILDER_OPTIONS, options));\n    // configer assets output location\n    Vue.util.defineReactive(builder, 'sections', builder.sections);\n    Vue.util.defineReactive(builder, 'isEditing', builder.isEditing);\n    Vue.util.defineReactive(builder, 'isSorting', builder.isSorting);\n    const extension = {\n      components: builder.components,\n      beforeCreate () {\n        this.$builder = builder;\n      }\n    };\n\n    // register the main components.\n    Vue.component('VuseBuilder', Vue.extend(VuseBuilder).extend(extension));\n    Vue.component('VuseRenderer', Vue.extend(VuseRenderer).extend(extension));\n  }\n\n  /**\n   * The plugin to be installed with the builder. The function receives the installation context which\n   * contains the builder instance and the Vue prototype.\n   *\n   * @param {Function} plugin\n   * @param {Object} options\n   */\n  static use (plugin, options = {}) {\n    if (typeof plugin !== 'function') {\n      return console.warn('Plugins must be a function');\n    }\n\n    // append to the list of to-be installed plugins.\n    PLUGINS.push({ plugin, options });\n  }\n\n  set (data) {\n    this.title = data.title !== undefined ? data.title : this.title;\n    if (data.sections && Array.isArray(data.sections)) {\n      this.sections = data.sections.map(section => {\n        const sectionData = {\n          name: section.name,\n          schema: section.schema,\n          data: section.data\n        };\n        if (!sectionData.schema) {\n          sectionData.schema = this.components[sectionData.name].options.$schema\n        }\n\n        return new Section(sectionData);\n      });\n    }\n  }\n\n  /**\n   * Outputs a JSON representation of the builder that can be used for rendering with the renderer component.\n   */\n  toJSON () {\n    return {\n      title: this.title,\n      sections: this.sections.map(s => ({\n        name: s.name,\n        data: s.data\n      }))\n    };\n  }\n\n  /**\n   * Previews the created page in a seperate tap/window.\n   */\n  preview () {\n    const frag = this.outputFragment();\n    const artboard = frag.querySelector('#artboard');\n    const printPreview = window.open('about:blank', 'print_preview');\n    const printDocument = printPreview.document;\n    cleanDOM(frag);\n    printDocument.open();\n    printDocument.write(\n      `<!DOCTYPE html>\n        <html>\n          <head>\n            <title>${this.title}</title>\n            <link href=\"${this.assets.css}\" rel=\"stylesheet\">\n          </head>\n          <body>\n            ${artboard.innerHTML}\n          <body>\n        </html>`\n    );\n  }\n\n  /**\n   * Exports the builder instance to a specified output. default is json.\n   *\n   * @param {String} method\n   */\n  export (method = 'json') {\n    if (method === 'pwa' || method === 'zip') {\n      if (typeof this.download === 'function') {\n        return this.download(this.assets);\n      }\n\n      return console.warn('You do not have the zip plugin installed.');\n    }\n\n    if (method === 'preview') {\n      return this.preview();\n    }\n\n    return this.toJSON();\n  }\n};\n\n// use the plugin API to add the styler and mixin functionalities.\nVuse.use(styler);\nVuse.use(mixin);\n\nexport default Vuse;\n"
  }
]