You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nutch.apache.org by sn...@apache.org on 2022/09/08 08:46:16 UTC

[nutch-site] branch main updated: Add modified Kube theme - taken from commit a00af40 of https://github.com/jeblister/kube - with the following modifications - modified layouts/index.html to include body from _index.md - added section landing pages layouts/section/{community,development,documentation}.html - replace favicon by Nutch one (fix NUTCH-2928) - added custom.css - update README

This is an automated email from the ASF dual-hosted git repository.

snagel pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nutch-site.git


The following commit(s) were added to refs/heads/main by this push:
     new 6e318e6  Add modified Kube theme - taken from commit a00af40 of https://github.com/jeblister/kube - with the following modifications   - modified layouts/index.html to include body from _index.md   - added section landing pages     layouts/section/{community,development,documentation}.html   - replace favicon by Nutch one (fix NUTCH-2928)   - added custom.css - update README
6e318e6 is described below

commit 6e318e65ef0a76ba8527a0c465dc9782fff0d11a
Author: Sebastian Nagel <sn...@apache.org>
AuthorDate: Tue Sep 6 15:27:19 2022 +0200

    Add modified Kube theme
    - taken from commit a00af40 of https://github.com/jeblister/kube
    - with the following modifications
      - modified layouts/index.html to include body from _index.md
      - added section landing pages
        layouts/section/{community,development,documentation}.html
      - replace favicon by Nutch one (fix NUTCH-2928)
      - added custom.css
    - update README
---
 .asf.yaml                                          |    6 +-
 README.md                                          |   16 +-
 config.toml                                        |    6 +-
 content/_index.md                                  |   34 +-
 content/community/_index.md                        |    3 +
 content/development/_index.md                      |    3 +
 content/doap.rdf                                   |    2 +-
 content/documentation/_index.md                    |    3 +
 content/download.md                                |    8 +-
 content/favicon.ico                                |  Bin 0 -> 894 bytes
 content/news/_index.md                             |    4 +
 static/img/plug.svg                                |    3 +
 static/img/plus-square.svg                         |    1 +
 themes/kube                                        |    1 -
 themes/kube/LICENSE.md                             |   20 +
 themes/kube/README.md                              |  169 ++
 themes/kube/archetypes/blog.md                     |    7 +
 themes/kube/archetypes/docs.md                     |    9 +
 themes/kube/images/docs.png                        |  Bin 0 -> 87844 bytes
 themes/kube/images/faq.png                         |  Bin 0 -> 130413 bytes
 themes/kube/images/list-docs.png                   |  Bin 0 -> 69093 bytes
 themes/kube/images/post.png                        |  Bin 0 -> 73445 bytes
 themes/kube/images/screenshot.png                  |  Bin 0 -> 71302 bytes
 themes/kube/images/signin.png                      |  Bin 0 -> 39120 bytes
 themes/kube/images/tn.png                          |  Bin 0 -> 37334 bytes
 themes/kube/layouts/404.html                       |    0
 themes/kube/layouts/_default/baseof.html           |   66 +
 themes/kube/layouts/_default/list.html             |   19 +
 themes/kube/layouts/_default/single.html           |   18 +
 themes/kube/layouts/blog/single.html               |   63 +
 themes/kube/layouts/docs/single.html               |   23 +
 themes/kube/layouts/index.html                     |   15 +
 themes/kube/layouts/partials/favicon.html          |    1 +
 themes/kube/layouts/partials/footer.html           |    3 +
 themes/kube/layouts/partials/header.html           |   29 +
 themes/kube/layouts/partials/meta/name-author.html |    6 +
 themes/kube/layouts/partials/meta/ogimage.html     |    8 +
 themes/kube/layouts/partials/page-summary.html     |    9 +
 themes/kube/layouts/partials/pagination.html       |   15 +
 themes/kube/layouts/partials/post/byauthor.html    |   20 +
 .../kube/layouts/partials/post/category-link.html  |    1 +
 themes/kube/layouts/partials/post/meta.html        |   14 +
 .../layouts/partials/post/related-content.html     |   16 +
 themes/kube/layouts/partials/post/tag-link.html    |    1 +
 .../kube/layouts/partials/scripts/animation.html   |  127 ++
 .../kube/layouts/partials/site-verification.html   |   12 +
 themes/kube/layouts/partials/toc.html              |   21 +
 themes/kube/layouts/section/community.html         |   22 +
 themes/kube/layouts/section/development.html       |   22 +
 themes/kube/layouts/section/documentation.html     |   22 +
 themes/kube/layouts/section/faq.html               |   16 +
 themes/kube/layouts/shortcodes/rawhtml.html        |    2 +
 themes/kube/netlify.toml                           |   30 +
 themes/kube/static/css/custom.css                  |    0
 themes/kube/static/css/font.css                    |   68 +
 themes/kube/static/css/highlight.css               |    1 +
 themes/kube/static/css/kube.css                    | 2156 +++++++++++++++++++
 themes/kube/static/css/kube.demo.css               |  404 ++++
 themes/kube/static/css/kube.legenda.css            |  406 ++++
 themes/kube/static/css/kube.min.css                |    1 +
 themes/kube/static/css/main.css                    | 1132 ++++++++++
 themes/kube/static/font/Lato-Black.woff            |  Bin 0 -> 297272 bytes
 themes/kube/static/font/Lato-Bold.woff             |  Bin 0 -> 328952 bytes
 themes/kube/static/font/Lato-BoldItalic.woff       |  Bin 0 -> 347092 bytes
 themes/kube/static/font/Lato-Italic.woff           |  Bin 0 -> 343528 bytes
 themes/kube/static/font/Lato-Regular.woff          |  Bin 0 -> 323172 bytes
 themes/kube/static/font/Lato-Semibold.woff         |  Bin 0 -> 326132 bytes
 themes/kube/static/font/Lato-SemiboldItalic.woff   |  Bin 0 -> 327188 bytes
 themes/kube/static/img/common/icon-twitter.png     |  Bin 0 -> 8496 bytes
 themes/kube/static/img/common/logo.png             |  Bin 0 -> 1462 bytes
 themes/kube/static/img/common/logx2.png            |  Bin 0 -> 2384 bytes
 themes/kube/static/img/favicons/logo-384x384.png   |  Bin 0 -> 217847 bytes
 themes/kube/static/img/icon-minimalism.png         |  Bin 0 -> 1753 bytes
 themes/kube/static/img/icon-typo.png               |  Bin 0 -> 1133 bytes
 themes/kube/static/img/kube/brand.png              |  Bin 0 -> 1848 bytes
 themes/kube/static/img/kube/icon-baseline.png      |  Bin 0 -> 1024 bytes
 themes/kube/static/img/kube/icon-minimalism.png    |  Bin 0 -> 1753 bytes
 themes/kube/static/img/kube/icon-typo.png          |  Bin 0 -> 1133 bytes
 themes/kube/static/img/kube/typography/01.png      |  Bin 0 -> 44318 bytes
 themes/kube/static/img/kube/typography/02.png      |  Bin 0 -> 6913 bytes
 themes/kube/static/js/jquery-2.1.4.min.js          |    5 +
 themes/kube/static/js/kube.js                      | 2201 ++++++++++++++++++++
 themes/kube/static/js/kube.legenda.js              |    0
 themes/kube/static/js/kube.min.js                  |    1 +
 themes/kube/static/js/main.js                      |    0
 themes/kube/static/js/tocbot.min.js                |   18 +
 themes/kube/theme.toml                             |   34 +
 87 files changed, 7312 insertions(+), 11 deletions(-)

diff --git a/.asf.yaml b/.asf.yaml
index 0cc84e6..d845c31 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-# https://cwiki.apache.org/confluence/display/INFRA/.asf.yaml+features+for+git+repositories
+# https://cwiki.apache.org/confluence/display/INFRA/Git+-+.asf.yaml+features
 
 github:
   description: "Apache Nutch Website"
@@ -30,5 +30,9 @@ github:
     merge:  false
     rebase: false
 
+staging:
+  profile: ~
+  whoami:  asf-staging
+
 publish:
   whoami: asf-site
\ No newline at end of file
diff --git a/README.md b/README.md
index d9ac920..27ee940 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,9 @@ The Website is built using [Hugo](https://gohugo.io/) a popular open-source stat
 # Prerequisites
 * [Install Hugo](https://gohugo.io/getting-started/installing/)
 
-# Local Build and Deploy
+# Serve the Site Locally
+
+Change into the project directory and execute
 
 ```bash
 $ hugo server
@@ -45,7 +47,7 @@ Press Ctrl+C to stop
 
 # Creating new Content
 
-Check out the [Hugo documentation](https://github.com/jeblister/kube#getting-started). Any further questions should be added to `dev at nutch dot apache dot org`.
+Check out the [Kube documentation](https://github.com/jeblister/kube#getting-started). Any further questions should be added to `dev at nutch dot apache dot org`.
 
 # Contributing
 
@@ -68,5 +70,15 @@ To contribute a patch, follow these instructions (note that installing
 11. git pull-request
 ```
 
+# Building and Publishing the Site
+
+To deploy a static site build execute
+```
+hugo --destination static_site
+```
+
+The static site is kept in this directory in the branch `asf-site` in the folder `content/` and automatically deployed onto the public Nutch website. See the [Apache Infra project website docs](https://infra.apache.org/project-site.html) and the configuration file [.asf.yaml](./asf.yaml). The branch `asf-staging` is used for deploying the staging site https://nutch.staged.apache.org/.
+
+
 # License
 Licensed under the [Apache Licence v2](https://www.apache.org/licenses/LICENSE-2.0)
diff --git a/config.toml b/config.toml
index f2efdc0..cc8832a 100644
--- a/config.toml
+++ b/config.toml
@@ -1,11 +1,15 @@
 baseURL = "/"
-author=""
+author = "Apache Nutch Project Management Committee"
 languageCode = "en-us"
 title = "Apache Nutch™"
 theme = "kube"
 themesDir = "themes"
 description = "Apache Nutch is a highly extensible, highly scalable, matured, production-ready Web crawler. Nutch enables fine grained configuration, relying on Apache Hadoop™ data structures, which are great for batch processing."
 Paginate = 4
+
+[markup.goldmark.renderer]
+unsafe = true # allow raw HTML in markdown content
+
 [Params]
   RSSLink = "/index.xml"
   author = "Apache Nutch Project Management Committee"
diff --git a/content/_index.md b/content/_index.md
index 5b2c1c9..99b5db0 100644
--- a/content/_index.md
+++ b/content/_index.md
@@ -1,5 +1,35 @@
 +++
-description = "Apache Nutch™ is a highly extensible, highly scalable, matured, production-ready Web crawler. Nutch enables fine grained configuration, relying on [Apache Hadoop™](https://hadoop.apache.org) data structures, which are great for batch processing."
+description = 'Nutch is a highly extensible, highly scalable, matured, production-ready Web crawler which enables fine grained configuration and accomodates a wide variety of data acquisition tasks.'
+descriptionHtml = '<b>Nutch</b> is a highly extensible, highly scalable, matured, production-ready <a href="https://en.wikipedia.org/wiki/Web_crawler">Web crawler</a> which enables fine grained configuration and accomodates a wide variety of data acquisition tasks.'
 title = "Apache Nutch™"
-draft = false
 +++
+
+<div id="action-buttons">
+  <a class="button primary big" href="/download" onclick="_gaq.push(['_trackEvent', 'kube', 'download']);">Download</a> <a class="button outline big" href="https://github.com/apache/nutch" target="_blank" rel="noopener noreferrer" onclick="_gaq.push(['_trackEvent', 'kube', 'github']);">View on Github</a> <a class="button primary big" href="https://cwiki.apache.org/confluence/display/NUTCH/NutchTutorial" target="_blank" rel="noopener noreferrer" onclick="_gaq.push(['_trackEvent', 'kube',  [...]
+</div>
+
+<div id="kube-features">
+  <div class="row gutters">
+    <div class="col col-4 item">
+      <figure>
+        <img alt="Baseline" height="48" src="/img/kube/icon-baseline.png" width="48">
+      </figure>
+      <h3>Scalable</h3>
+      <p>Relying on <a href="https://hadoop.apache.org" target="_blank" rel="noopener noreferrer">Apache Hadoop™</a> data structures, Nutch is great for batch processing large data volumes but can also be tailored to smaller jobs.</p>
+    </div>
+    <div class="col col-4 item">
+      <figure>
+        <img alt="Typography" height="48" src="/img/plug.svg" width="48">
+      </figure>
+      <h3>Pluggable</h3>
+      <p>Out of the box Nutch offer powerful plugins i.e., parsing with <a href="https://tika.apache.org" target="_blank" rel="noopener noreferrer">Apache Tika™</a>, indexing with <a href="https://solr.apache.org" target="_blank" rel="noopener noreferrer">Apache Solr™</a>, <a href="https://www.elastic.co/elastic-stack/" target="_blank" rel="noopener noreferrer">Elasticsearch</a> and more!</p>
+    </div>
+    <div class="col col-4 item">
+      <figure>
+        <img alt="Minimalism" height="48" src="/img/plus-square.svg" width="48">
+      </figure>
+      <h3>Extensible</h3>
+      <p>Provides intuitive and stable interfaces for popular functions i.e., <a href="https://ci-builds.apache.org/job/Nutch/job/Nutch-trunk/javadoc/org/apache/nutch/parse/Parser.html" target="_blank" rel="noopener noreferrer">Parsers</a>, <a href="https://ci-builds.apache.org/job/Nutch/job/Nutch-trunk/javadoc/org/apache/nutch/parse/HtmlParseFilter.html" target="_blank" rel="noopener noreferrer">HTML Filtering</a>, <a href="https://ci-builds.apache.org/job/Nutch/job/Nutch-trunk/javadoc/ [...]
+    </div>
+  </div>
+</div>
diff --git a/content/community/_index.md b/content/community/_index.md
new file mode 100644
index 0000000..357a522
--- /dev/null
+++ b/content/community/_index.md
@@ -0,0 +1,3 @@
++++
+title = "Community"
++++
diff --git a/content/development/_index.md b/content/development/_index.md
new file mode 100644
index 0000000..c2de6d1
--- /dev/null
+++ b/content/development/_index.md
@@ -0,0 +1,3 @@
++++
+title = "Development"
++++
diff --git a/content/doap.rdf b/content/doap.rdf
index 39e4f28..1540fbd 100644
--- a/content/doap.rdf
+++ b/content/doap.rdf
@@ -124,7 +124,7 @@
         <created>2014-08-16</created>
         <revision>1.9</revision>
       </Version>
-    </release> 
+    </release>
    <release>
       <Version>
         <name>Apache Nutch 1.8</name>
diff --git a/content/documentation/_index.md b/content/documentation/_index.md
new file mode 100644
index 0000000..c7199ff
--- /dev/null
+++ b/content/documentation/_index.md
@@ -0,0 +1,3 @@
++++
+title = "Documentation"
++++
diff --git a/content/download.md b/content/download.md
index 75a84f4..cabb2ef 100644
--- a/content/download.md
+++ b/content/download.md
@@ -9,8 +9,10 @@ bref = ""
 
 # Download
 Apache Nutch 1.18 (src-tar, src-zip, bin-tar and bin-zip) and 2.4 (src-tar and src-zip only) can be downloaded from the table below. See
+
 * [CHANGES-1.18.txt](https://apache.org/dist/nutch/1.18/CHANGES.txt) (released 2021-01-14), and
 * [CHANGES-2.4.txt](https://apache.org/dist/nutch/2.4/CHANGES.txt) (released 2019-10-11)
+
 for more information on the list of updates in these releases.
 
 All Apache Nutch distributions is distributed under the [Apache License, version 2.0](https://www.apache.org/licenses/LICENSE-2.0.html).
@@ -35,7 +37,7 @@ It is essential that you verify the integrity of the downloaded files using the
 ## PGP Signature
 The PGP signatures can be verified using `PGP` First download the [KEYS](https://www.apache.org/dist/nutch/KEYS) as well as the `asc` signature file for the relevant distribution. Make sure you get these files from the [main distribution directory](https://www.apache.org/dist/nutch/), rather than from a mirror. Then verify the signatures using
 
-```bash
+```
 $ gpg --import KEYS
 $ gpg --verify apache-nutch-X.Y.Z-src.tar.gz.asc apache-nutch-X.Y.Z-src.tar.gz
 ```
@@ -45,13 +47,13 @@ The files in Apache Nutch 1.18 releases are signed by Lewis John McGibbney (lewi
 
 ## SHA Signature
 Additionally, you can verify the SHA signature on the files. A Unix program called **shasum** or **sha512sum** is included in many Unix distributions.
-```bash
+```
 $ sha512sum --check apache-nutch-X.Y.Z.sha512
 ```
 
 ## MD5 Signature
 Older releases used the MD5 signature. You may use the Unix program **md5** or **md5sum** to verify the MD5 signature:
-```bash
+```
 $ md5sum apache-nutch-X.Y.Z
 ```
 ... output should match the string in `apache-nutch-X.Y.Z.md5`.
diff --git a/content/favicon.ico b/content/favicon.ico
new file mode 100644
index 0000000..e07ca51
Binary files /dev/null and b/content/favicon.ico differ
diff --git a/content/news/_index.md b/content/news/_index.md
new file mode 100644
index 0000000..334cc37
--- /dev/null
+++ b/content/news/_index.md
@@ -0,0 +1,4 @@
++++
+title = "Project News"
+teaser = '<p>News, activity, ideas, and whatever feels important.<br> <a href="https://twitter.com/@ApacheNutch">Follow us on Twitter</a></p>'
++++
diff --git a/static/img/plug.svg b/static/img/plug.svg
new file mode 100644
index 0000000..c5e6688
--- /dev/null
+++ b/static/img/plug.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-plug" viewBox="0 0 16 16">
+  <path d="M6 0a.5.5 0 0 1 .5.5V3h3V.5a.5.5 0 0 1 1 0V3h1a.5.5 0 0 1 .5.5v3A3.5 3.5 0 0 1 8.5 10c-.002.434-.01.845-.04 1.22-.041.514-.126 1.003-.317 1.424a2.083 2.083 0 0 1-.97 1.028C6.725 13.9 6.169 14 5.5 14c-.998 0-1.61.33-1.974.718A1.922 1.922 0 0 0 3 16H2c0-.616.232-1.367.797-1.968C3.374 13.42 4.261 13 5.5 13c.581 0 .962-.088 1.218-.219.241-.123.4-.3.514-.55.121-.266.193-.621.23-1.09.027-.34.035-.718.037-1.141A3.5 3.5 0 0 1 4 6.5v-3a.5.5 0 0 1 .5-.5h1V.5A.5.5 0 0 1 6 0zM5 4v2.5A2.5  [...]
+</svg>
\ No newline at end of file
diff --git a/static/img/plus-square.svg b/static/img/plus-square.svg
new file mode 100644
index 0000000..c380e24
--- /dev/null
+++ b/static/img/plus-square.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-plus-square"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="12" y1="8" x2="12" y2="16"></line><line x1="8" y1="12" x2="16" y2="12"></line></svg>
\ No newline at end of file
diff --git a/themes/kube b/themes/kube
deleted file mode 160000
index 5368880..0000000
--- a/themes/kube
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 5368880f0dfc7a0ed2a9539d37a638b8aa48ab01
diff --git a/themes/kube/LICENSE.md b/themes/kube/LICENSE.md
new file mode 100644
index 0000000..ff11aa1
--- /dev/null
+++ b/themes/kube/LICENSE.md
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 mohamed jebli
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/themes/kube/README.md b/themes/kube/README.md
new file mode 100644
index 0000000..cf79dd8
--- /dev/null
+++ b/themes/kube/README.md
@@ -0,0 +1,169 @@
+# kube Theme for Hugo
+
+`kube` Kube is a professional and a responsive Hugo theme for developers and designers that offers a documentation section mixed with a landing page and a blog.
+
+I create this theme based on [Kube Framework](https://kube7.imperavi.com/).
+
+![kube hugo landingPage](https://cldup.com/RjWtdJZNae.png)
+
+# Demo
+
+To see this theme in action, check out [kube project](http://kube.elemnts.net) which is rendered with this theme and some content for documentation and blog posts.
+
+## Features
+
+- Mobile-first Design : Every element in kube is mobile-first and fully embraces latest and greatest tech.
+- Responsive Design : Optimized for mobile, tablet, desktop
+- Horizontal Rhythm : Like Kube framework this theme is based on a 4px vertical grid.
+- Typography : beautiful typographie choice
+- Google Analytics : Google Analytics using the internal async template
+- Disqus Commenting : Post comments with Disqus using the internal template
+- OpenGraph support : SEO-optimized using OpenGraph
+- Schema Structured Data : Schema Structured Data and Meta tags
+- Paginated Lists : Simple list pagination with page indicators
+- Reading Time : Post reading time and update notice set user expectations
+- Meta data for all blog article : Rich post data including links to category and tag taxonomy listings, author and word count
+- Related Posts : Related Content for increased page views and reader loyalty
+- Block Templates : Block Templates for foolproof layout extensions
+- Table of Contents : Accessible Table of Contents for documentation
+- SEO Site Verification : Site verification with Google, Bing Alexa and Yandex
+- 404 page : 404 page with animated background
+
+## Installation
+
+Inside the folder of your Hugo site run:
+
+    $ mkdir themes
+    $ cd themes
+    $ git clone https://github.com/jeblister/kube.git
+
+For more information read the official [setup guide](//gohugo.io/overview/installing/) for Hugo.
+
+Copy custom archetypes to your site:
+
+```shell
+cp themes/kube/archetypes/* archetypes
+```
+
+Next, take a look in the `exampleSite` folder at. This directory contains an example config file and the content for the demo. It serves as an example setup for your blog.
+
+Copy at least the `config.toml` in the root directory of your website. Overwrite the existing config file if necessary.
+
+Hugo includes a development server, so you can view your changes as you go :
+
+```sh
+hugo server -w
+```
+
+Now you can go to [localhost:1313](http://localhost:1313) and the `kube`
+theme should be visible.
+
+## Getting Started
+
+There are a few concepts this theme employs to make a personal documentation site. It's important to read this as you may not see what you expect upon launching. It assumes you want to call your documentation posts `docs` and organizes them as such. For example, creating a new docs with Hugo would require you typing:
+
+```
+  $ hugo new --kind docs docs/my-new-doc.md
+
+```
+
+It also assumes you want to display three types of content `docs` and `blog` and some pages : the `faq`, `company` and `sign-in` pages and display links to this pages in the menu. This guide will take you through the steps to configure your documentation site to use the theme.
+
+### Configuring you website
+
+#### Where should blog post markdown files be stored?
+
+The theme works with other content types, but docs pages work best when grouped under `docs`. When using the `docs` content type you'll have a customized list page sorted by `weight` and the default list page for all documentation. Here's an example:
+
+![Custom List docs Page](https://cldup.com/8k1nU8TLuU.png)
+
+#### Defining yourself as the Author
+
+In this case you would want to add `author = "your name"` variable like your name to your post's Front Matter.
+
+#### Webmaster Verification
+
+Verify your site with several webmaster tools including Google, Bing, Alexa and Yandex. To allow verification of your site with any or all of these providers simply add the following to your `config.toml` and fill in their respective values:
+
+```toml
+[Params.seo.webmaster_verifications]
+  google = "" # Optional, Google verification code
+  bing = "" # Optional, Bing verification code
+  alexa = "" # Optional, Alexa verification code
+  yandex = "" # Optional, Yandex verification code
+```
+
+### Index Blocking
+
+Just because a page appears in your `sitemap.xml` does not mean you want it to appear in a SERP. Examples of pages which will appear in your `sitemap.xml` that you typically do not want indexed by crawlers include error pages, search pages, legal pages, and pages that simply list summaries of other pages.
+
+Though it's possible to block search indexing from a `robots.txt` file, kube makes it possible to block page indexing using Hugo configuration as well. By default the following page types will be blocked:
+
+- Section Pages (e.g. Post listings)
+- Taxonomy Pages (e.g. Category and Tag listings)
+- Taxonomy Terms Pages (e.g. Pages listing taxonomies)
+
+To customize default blocking configure the `noindex_kinds` setting in the `[params]` section of your `config.toml`. For example, if you want to enable crawling for sections appearing in [Section Menu](#adding-a-section-menu) add the following to your configuration file:
+
+```
+[params]
+  noindex_kinds = [
+    "taxonomy",
+    "taxonomyTerm"
+  ]
+```
+
+To block individual pages from being indexed add `nofollow` to your page's front matter and set the value to `true`, like:
+
+```toml
+noindex = true
+```
+
+And, finally, if you're using Hugo `v0.18` or better, you can also add an `_index.md` file with the `noindex` front matter to control indexing for specific section list layouts:
+
+```shell
+├── content
+│   ├── modules
+│   │   ├── starry-night.md
+│   │   └── flying-toilets.md
+│   └── news
+│       ├── _index.md
+│       └── return-flying-toasters.md
+```
+
+To learn more about how crawlers use this feature read [block search indexing with meta tags](https://support.google.com/webmasters/answer/93710).
+
+### Custom CSS
+
+To add your own theme css or override existing CSS without having to change theme files do the following:
+
+1. Create a `style.css` in your site's `layouts/static/css directory` or use `custom.css` file in 'themes/kube/static/css/custom.css`
+1. Add link to this file in 'themes/kube/layouts/\_default/baseof.html'.
+
+Default `style block` :
+
+```html
+<!-- Your own theme here -->
+<link href="/css/custom.css" rel="stylesheet" type="text/css" />
+```
+
+## Contributing
+
+Did you find a bug or have an ideas for new features? Feel free to use the issue tracker to let me know or make a pull request.
+
+There's only one rule...there are no rules.
+
+## License
+
+MIT
+
+## Credits
+
+- [kube framework](https://kube7.imperavi.com/)
+- [after dark theme](https://github.com/comfusion/after-dark)
+
+## Contact
+
+This is the second theme I've made for Hugo, so I'm sure I've done some things wrong or assumed too much. If you have ideas or things that should be fixed, please let me know.
+
+- [Mohamed JEBLI](http://about.elemnts.net/) [@jebli_7](http://twitter.com/jebli_7)
diff --git a/themes/kube/archetypes/blog.md b/themes/kube/archetypes/blog.md
new file mode 100644
index 0000000..dcde13f
--- /dev/null
+++ b/themes/kube/archetypes/blog.md
@@ -0,0 +1,7 @@
++++
+title = ""
+description = ""
+date = {{ .Date }}
+weight = 20
+draft = false
++++
diff --git a/themes/kube/archetypes/docs.md b/themes/kube/archetypes/docs.md
new file mode 100644
index 0000000..29df1fa
--- /dev/null
+++ b/themes/kube/archetypes/docs.md
@@ -0,0 +1,9 @@
++++
+title = ""
+description = ""
+date = {{ .Date }}
+weight = 20
+draft = false
+bref = ""
+toc = true
++++
diff --git a/themes/kube/images/docs.png b/themes/kube/images/docs.png
new file mode 100644
index 0000000..d1f3d2f
Binary files /dev/null and b/themes/kube/images/docs.png differ
diff --git a/themes/kube/images/faq.png b/themes/kube/images/faq.png
new file mode 100644
index 0000000..c6f423e
Binary files /dev/null and b/themes/kube/images/faq.png differ
diff --git a/themes/kube/images/list-docs.png b/themes/kube/images/list-docs.png
new file mode 100644
index 0000000..22cba88
Binary files /dev/null and b/themes/kube/images/list-docs.png differ
diff --git a/themes/kube/images/post.png b/themes/kube/images/post.png
new file mode 100644
index 0000000..83c7d61
Binary files /dev/null and b/themes/kube/images/post.png differ
diff --git a/themes/kube/images/screenshot.png b/themes/kube/images/screenshot.png
new file mode 100644
index 0000000..b6447d9
Binary files /dev/null and b/themes/kube/images/screenshot.png differ
diff --git a/themes/kube/images/signin.png b/themes/kube/images/signin.png
new file mode 100644
index 0000000..0a385c6
Binary files /dev/null and b/themes/kube/images/signin.png differ
diff --git a/themes/kube/images/tn.png b/themes/kube/images/tn.png
new file mode 100644
index 0000000..67fb679
Binary files /dev/null and b/themes/kube/images/tn.png differ
diff --git a/themes/kube/layouts/404.html b/themes/kube/layouts/404.html
new file mode 100644
index 0000000..e69de29
diff --git a/themes/kube/layouts/_default/baseof.html b/themes/kube/layouts/_default/baseof.html
new file mode 100644
index 0000000..3f7ec06
--- /dev/null
+++ b/themes/kube/layouts/_default/baseof.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html lang="{{ .Site.LanguageCode }}">
+
+<head>
+  {{ hugo.Generator }}
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+  <title>{{ block "title" . }}{{ .Title }} | {{ .Site.Title }}{{ end }}</title>
+
+  {{ with .Description }}
+  <meta name="description" content="{{ . }}"> {{ end }}
+  <!-- noindex meta -->
+  {{ $default_noindex_kinds := slice "section" "taxonomy" "taxonomyTerm" }}
+  {{ $noindex_kinds := .Site.Params.noindex_kinds | default $default_noindex_kinds }}
+  {{ $is_noindex_true := and (isset .Params "noindex") .Params.noindex }}
+  {{ if or (in $noindex_kinds .Kind) ($is_noindex_true) }}
+  <meta name="robots" content="noindex">
+  {{ end }}
+
+  {{ partial "meta/name-author" . }}
+  {{ template "_internal/opengraph.html" . }}
+  {{ partial "meta/ogimage" . }}
+  <!-- Site verification -->
+  {{ if .IsHome }} {{ partial "site-verification" . }} {{ end }}
+  <!-- add googleAnalytics in config.toml -->
+  {{ template "_internal/google_analytics_async.html" . }}
+  {{ with .OutputFormats.Get "RSS" }} <link href="{{ .RelPermalink }}" rel="alternate" type="application/rss+xml" title="{{ site.Title }}" /> {{ end }}
+
+  <link rel="canonical" href="{{ .Permalink }}"> {{ if (isset .Params "prev") }}
+  <link rel="prev" href="{{ .Params.prev }}"> {{ end }} {{ if (isset .Params "next") }}
+  <link rel="next" href="{{ .Params.next }}"> {{ end }}
+
+  {{ partial "favicon" . }}
+
+  <link href="{{ "/css/font.css" | relURL }}" rel="stylesheet" type="text/css">
+  <link href="{{ "/css/kube.min.css" | relURL }}" rel="stylesheet" type="text/css">
+  <link href="{{ "/css/kube.legenda.css" | relURL }}" rel="stylesheet" type="text/css">
+  <link href="{{ "/css/highlight.css" | relURL }}" rel="stylesheet" type="text/css">
+  <link href="{{ "/css/main.css" | relURL }}" rel="stylesheet" type="text/css">
+  <!-- <link href="{{ "/css/kube.demo.css" | relURL }}" rel="stylesheet" type="text/css"> -->
+<!-- Your own theme here -->
+ <link href="{{ "/css/custom.css" | relURL }}" rel="stylesheet" type="text/css">
+<!-- js vendor -->
+  <script src="{{ "/js/jquery-2.1.4.min.js" | relURL }}" type="text/javascript">
+  </script>
+
+  <script type="text/javascript" src="{{ "/js/tocbot.min.js" | relURL }}"></script>
+</head>
+
+
+<body class="page-kube">
+  <header>{{ block "header" . }}{{ end }}</header>
+  <main>{{ block "main" . }}{{ end }}</main>
+  <footer>{{ block "footer" . }}{{ end }}</footer>
+
+
+  <script src="{{ "/js/kube.js" | relURL }}" type="text/javascript">
+  </script>
+  <script src="{{ "/js/kube.legenda.js" | relURL }}" type="text/javascript">
+  </script>
+  <script src="{{ "/js/main.js" | relURL }}" type="text/javascript">
+  </script>
+</body>
+
+</html>
diff --git a/themes/kube/layouts/_default/list.html b/themes/kube/layouts/_default/list.html
new file mode 100644
index 0000000..792ced2
--- /dev/null
+++ b/themes/kube/layouts/_default/list.html
@@ -0,0 +1,19 @@
+{{ define "title"}}{{ .Site.Title}} – {{ .Title}}{{end}}
+{{ define "header"}} {{ partial "header" .}} {{end}}
+
+{{ define "main" }}
+
+<div id="hero" class="wrap">
+  <h1>{{.Title}}</h1>
+  {{.Params.teaser | safeHTML}}
+</div>
+<ul id="posts">
+
+ {{ range .Paginator.Pages.ByWeight }} {{ partial "page-summary" . }} {{ end }}
+  <section>{{ partial "pagination" .}}</section>
+</ul>
+
+{{ end }} 
+{{ define "footer" }} 
+  {{ partial "footer" . }} 
+{{ end }}
diff --git a/themes/kube/layouts/_default/single.html b/themes/kube/layouts/_default/single.html
new file mode 100644
index 0000000..335668a
--- /dev/null
+++ b/themes/kube/layouts/_default/single.html
@@ -0,0 +1,18 @@
+{{ define "title"}} {{ .Site.Title}} – {{ .Title}} {{end}}
+{{ define "header"}} {{ partial "header" .}} {{end}}
+
+{{ define "main" }}
+
+<div id="hero" class="wrap">
+  <h1>{{.Title }}</h1>
+    <p>{{.Params.description}}</p>
+</div>
+<ul id="posts">
+
+ {{ .Content }}
+  
+</ul>
+{{ end }} 
+{{ define "footer" }} 
+  {{ partial "footer" . }} 
+{{ end }}
\ No newline at end of file
diff --git a/themes/kube/layouts/blog/single.html b/themes/kube/layouts/blog/single.html
new file mode 100644
index 0000000..44ccd41
--- /dev/null
+++ b/themes/kube/layouts/blog/single.html
@@ -0,0 +1,63 @@
+{{ define "title"}} {{ .Title}} {{end}} {{ define "header"}} {{ partial "header"
+.}} {{end}} {{ define "main"}}
+<div class="push-center" itemscope itemtype="http://schema.org/BlogPosting">
+  {{ template "_internal/schema.html" . }}
+  <div id="hero">
+    <h1 itemprop="headline">{{.Title}}</h1>
+    {{ if .Description }}
+    <blockquote itemprop="description">{{ .Description }}</blockquote>
+    {{ end }}
+    <time class="post-time">{{ partial "post/meta" . }}</time>
+  </div>
+  <div id="post-box">
+    <div id="post" itemprop="articleBody">{{.Content | safeHTML}}</div>
+
+    <div class="form-subscribe">
+      <div id="form-subscribe-success" style="display: none"></div>
+      <div id="form-subscribe-box">
+        <h4>All about Redactor, Grafs and Kube.</h4>
+        <p>Monthly news &amp; updates. Just straight to the point.</p>
+
+        <form
+          action=""
+          name="mc-embedded-subscribe-form"
+          method="post"
+          class="form"
+        >
+          <input type="hidden" name="authorize-token" value="" />
+          <div id="subscribe-email-validation-error"></div>
+          <div class="form-item">
+            <div class="append">
+              <input
+                type="email"
+                name="EMAIL"
+                id="mce-EMAIL"
+                placeholder="Email"
+              />
+              <button class="button">Subscribe</button>
+            </div>
+          </div>
+
+          <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
+          <div style="position: absolute; left: -5000px" aria-hidden="true">
+            <input type="text" name="" tabindex="-1" value="" />
+          </div>
+        </form>
+
+        <div class="form-subscribe-twitter">
+          <div>or</div>
+          <a href="https://twitter.com/jebli_7">Follow us on Twitter</a>
+        </div>
+      </div>
+
+      <div class="">
+        {{ partial "post/byauthor" . }} {{ partial "post/related-content" . }}
+      </div>
+
+      {{ if .Site.DisqusShortname }}
+      <article>{{ template "_internal/disqus.html" . }}</article>
+      {{ end }}
+    </div>
+  </div>
+  {{ end }} {{ define "footer"}} {{ partial "footer.html" .}} {{ end }}
+</div>
diff --git a/themes/kube/layouts/docs/single.html b/themes/kube/layouts/docs/single.html
new file mode 100644
index 0000000..ed942e9
--- /dev/null
+++ b/themes/kube/layouts/docs/single.html
@@ -0,0 +1,23 @@
+{{ define "title"}} {{ .Title}} {{end}}
+{{ define "header"}} {{ partial "header" .}} {{end}}
+{{ define "main"}}
+  <div id="main">
+    <div id="hero">
+      <h1> {{ .Title}} </h1>
+      <p class="hero-lead">
+           {{ .Params.bref | safeHTML }}.
+      </p>
+
+    </div> 
+    <div id="kube-component" class="content">
+    {{ partial "toc" .}}
+
+    {{ .Content}}
+<!-- Inject script tag in this template  -->
+    {{if .Params.script}}
+     {{ $script := (delimit (slice "scripts" .Params.script) "/")}}
+    {{ partial (string $script) .}}
+    {{end }}
+    </div>
+    </div>
+{{ end }}
diff --git a/themes/kube/layouts/index.html b/themes/kube/layouts/index.html
new file mode 100644
index 0000000..a42d73e
--- /dev/null
+++ b/themes/kube/layouts/index.html
@@ -0,0 +1,15 @@
+{{ define "title"}} {{ .Site.Title}} {{end}}
+{{ define "header"}} {{ partial "header" .}} {{end}}
+{{ define "main"}}
+
+<div id="main">
+  <div id="hero">
+    <h1>{{.Title}}</h1>
+    <p>{{.Params.descriptionHtml | safeHTML}}</p>
+  </div>
+
+  {{.Content | safeHTML}}
+
+</div>
+{{ end }}
+{{ define "footer"}} {{ partial "footer" .}} {{end}}
diff --git a/themes/kube/layouts/partials/favicon.html b/themes/kube/layouts/partials/favicon.html
new file mode 100644
index 0000000..c266558
--- /dev/null
+++ b/themes/kube/layouts/partials/favicon.html
@@ -0,0 +1 @@
+<link rel="shortcut icon" type="image/ico" href="/favicon.ico">
diff --git a/themes/kube/layouts/partials/footer.html b/themes/kube/layouts/partials/footer.html
new file mode 100644
index 0000000..2081d5f
--- /dev/null
+++ b/themes/kube/layouts/partials/footer.html
@@ -0,0 +1,3 @@
+  <footer id="footer">
+    <p>&copy; 2004-2022 The Apache Software Foundation. Built using the <a href="https://github.com/jeblister/kube" target="_blank" rel="noopener noreferrer">kube Theme for Hugo</a>. Apache Nutch, Nutch, Apache, the Apache feather logo, and the Apache Nutch project logo are trademarks of The Apache Software Foundation.</p>
+  </footer>
\ No newline at end of file
diff --git a/themes/kube/layouts/partials/header.html b/themes/kube/layouts/partials/header.html
new file mode 100644
index 0000000..783aa76
--- /dev/null
+++ b/themes/kube/layouts/partials/header.html
@@ -0,0 +1,29 @@
+<div class="show-sm">
+    <div id="nav-toggle-box">
+      <div id="nav-toggle-brand">
+        <a href="/">{{ .Site.Title }}</a>
+      </div><a data-component="toggleme" data-target="#top" href="#" id="nav-toggle"><i class="kube-menu"></i></a>
+    </div>
+  </div>
+  <div class="hide-sm" id="top">
+    <div id="top-brand">
+      <a href="/" title="home">{{ .Site.Title }}</a>
+    </div>
+    <nav id="top-nav-main">
+      <ul>
+       {{ $currentPage := . }}
+       {{ range .Site.Menus.main }}
+    <li><a href="{{ .URL }}" {{if  $currentPage.IsMenuCurrent "main" . }} class="active"{{end}}>{{ .Name }}</a></li>
+    {{end}}
+      </ul>
+    </nav>
+    <nav id="top-nav-extra"> 
+      <ul>
+        {{ range .Site.Menus.extra }} 
+          <li>
+            <a href="{{ .Permalink }}">{{ .Name }}</a>
+          </li>
+        {{ end }}  
+      </ul>
+    </nav>
+  </div>
diff --git a/themes/kube/layouts/partials/meta/name-author.html b/themes/kube/layouts/partials/meta/name-author.html
new file mode 100644
index 0000000..974c77f
--- /dev/null
+++ b/themes/kube/layouts/partials/meta/name-author.html
@@ -0,0 +1,6 @@
+
+{{ if isset .Params "author" }}
+  <meta name="author" content="{{ index .Params "author" }}">
+{{ else }}
+  <meta name="author" content="{{ .Site.Params.author }}">
+{{ end }}
diff --git a/themes/kube/layouts/partials/meta/ogimage.html b/themes/kube/layouts/partials/meta/ogimage.html
new file mode 100644
index 0000000..7a87ff4
--- /dev/null
+++ b/themes/kube/layouts/partials/meta/ogimage.html
@@ -0,0 +1,8 @@
+
+{{ if and (.IsNode) (.Site.Params.images) }}
+  <meta property="og:image" content="{{ index .Site.Params.images 0 }}">
+{{ end }}
+
+{{ if and (.IsPage) (not .Params.images) (.Site.Params.images) }}
+  <meta property="og:image" content="{{ index .Site.Params.images 0 }}">
+{{ end }}
diff --git a/themes/kube/layouts/partials/page-summary.html b/themes/kube/layouts/partials/page-summary.html
new file mode 100644
index 0000000..79c72e3
--- /dev/null
+++ b/themes/kube/layouts/partials/page-summary.html
@@ -0,0 +1,9 @@
+<li itemscope itemtype="http://schema.org/CreativeWork">
+    <h2 class="title">
+        <a href="{{ .Permalink }}" itemprop="headline">{{ .Title }}</a>
+    </h2>
+    <hr>
+    {{ if .Description }}
+    <p itemprop="about">{{ .Description }}</p>
+    {{ end }}
+</li>
diff --git a/themes/kube/layouts/partials/pagination.html b/themes/kube/layouts/partials/pagination.html
new file mode 100644
index 0000000..95353e5
--- /dev/null
+++ b/themes/kube/layouts/partials/pagination.html
@@ -0,0 +1,15 @@
+<nav class="pagination pager align-center">
+            <hr>
+    <ul>
+           {{if .Paginator.HasPrev }}
+        <li class="prev"><a href="{{ .Paginator.Prev.URL }}">Previous</a></li>
+        {{ end }}
+        <li>
+
+        <a href="" class="button round small outline">Page {{ .Paginator.PageNumber }} of {{ .Paginator.TotalPages }}</a>
+        </li>
+            {{ if .Paginator.HasNext }}</a>
+        <li class="next"><a href="{{ .Paginator.Next.URL }}">Next</a></li>
+           {{ end }}
+    </ul>
+</nav>
\ No newline at end of file
diff --git a/themes/kube/layouts/partials/post/byauthor.html b/themes/kube/layouts/partials/post/byauthor.html
new file mode 100644
index 0000000..579a64d
--- /dev/null
+++ b/themes/kube/layouts/partials/post/byauthor.html
@@ -0,0 +1,20 @@
+<p>
+  Published
+  {{ if ne .Site.Params.hide_author true }}
+    {{ with .Params.author }}
+      by <span itemprop="author">{{ index . }}</span>
+    {{ else }}
+      by <span itemprop="author">{{ .Site.Params.author }}</span>
+    {{ end }}
+  {{ end }}
+  <time datetime="{{ dateFormat "2006-01-02T15:04:05-07:00" (default .Date (.PublishDate)) }}">
+    {{ dateFormat "2 Jan, 2006" (default .Date (.PublishDate)) }}
+  </time>
+  {{ with .Params.categories }}
+    in <span itemprop="articleSection">{{ delimit (apply (apply (sort .) "partial" "post/category-link" ".") "chomp" ".") ", " " and " }}</span>
+  {{ end }}
+  {{ with .Params.tags }}
+    and tagged {{ delimit (apply (apply (sort .) "partial" "post/tag-link" ".") "chomp" ".") ", " " and " }}
+  {{ end }}
+  using <span itemprop="wordCount">{{ .WordCount }}</span> words.
+</p>
diff --git a/themes/kube/layouts/partials/post/category-link.html b/themes/kube/layouts/partials/post/category-link.html
new file mode 100644
index 0000000..6bee96b
--- /dev/null
+++ b/themes/kube/layouts/partials/post/category-link.html
@@ -0,0 +1 @@
+<a href="/categories/{{ . | urlize }}/">{{ . }}</a>
diff --git a/themes/kube/layouts/partials/post/meta.html b/themes/kube/layouts/partials/post/meta.html
new file mode 100644
index 0000000..62b4b45
--- /dev/null
+++ b/themes/kube/layouts/partials/post/meta.html
@@ -0,0 +1,14 @@
+<span class="icon">
+  <i class="fa fa-clock-o" aria-hidden="true"></i>
+</span>
+<span>{{ .ReadingTime }} minute read</span>
+<span class="icon">
+ <i class="fa fa-pencil" aria-hidden="true"></i>
+</span>
+{{ if .PublishDate.IsZero }}
+  Published: <time datetime="{{ .Date.Format "2006-01-02T15:04:05-07:00" }}">{{ .Date.Format "2 Jan, 2006" }}</time>
+{{ else if lt .PublishDate .Lastmod }}
+  Modified: <time datetime="{{ .Lastmod.Format "2006-01-02T15:04:05-07:00" }}">{{ .Lastmod.Format "2 Jan, 2006" }}</time>
+{{ else }}
+  Published: <time datetime="{{ .PublishDate.Format "2006-01-02T15:04:05-07:00" }}">{{ .PublishDate.Format "2 Jan, 2006" }}</time>
+{{ end }}
diff --git a/themes/kube/layouts/partials/post/related-content.html b/themes/kube/layouts/partials/post/related-content.html
new file mode 100644
index 0000000..49310b6
--- /dev/null
+++ b/themes/kube/layouts/partials/post/related-content.html
@@ -0,0 +1,16 @@
+{{ range first 1 (where (where .Site.Pages ".Params.tags" "intersect" .Params.tags) "Permalink" "!=" .Permalink) }}
+  {{ $.Scratch.Set "has_related" true }}
+{{ end }}
+
+{{ if $.Scratch.Get "has_related" }}
+  <aside>
+    <heade><strong>Related Content</strong></header>
+    <hr>
+    <ul>
+      {{ $num_to_show := .Site.Params.related_content_limit | default 7 }}
+      {{ range first $num_to_show (where (where .Site.Pages ".Params.tags" "intersect" .Params.tags) "Permalink" "!=" .Permalink) }}
+        <li><a href="{{ .RelPermalink }}">{{ .Title }}</a> &ndash; {{ .ReadingTime }} minutes
+      {{ end }}
+    </ul>
+  </aside>
+{{ end }}
diff --git a/themes/kube/layouts/partials/post/tag-link.html b/themes/kube/layouts/partials/post/tag-link.html
new file mode 100644
index 0000000..8c03421
--- /dev/null
+++ b/themes/kube/layouts/partials/post/tag-link.html
@@ -0,0 +1 @@
+<a href="/tags/{{ . | urlize }}/">{{ . }}</a>
diff --git a/themes/kube/layouts/partials/scripts/animation.html b/themes/kube/layouts/partials/scripts/animation.html
new file mode 100644
index 0000000..ee13095
--- /dev/null
+++ b/themes/kube/layouts/partials/scripts/animation.html
@@ -0,0 +1,127 @@
+<script>
+document.addEventListener("DOMContentLoaded",
+function(){
+    var animate = {
+        '#slide-up-btn': {
+            el: '#animation-box-slide-up',
+            to: 'slideUp',
+            back: 'slideDown'
+        },
+        '#slide-down-btn': {
+            el: '#animation-box-slide-down',
+            to: 'slideDown',
+            back: 'slideUp'
+        },
+        '#fade-in-btn': {
+            el: '#animation-box-fade-in',
+            to: 'fadeIn',
+            back: 'fadeOut'
+        },
+        '#fade-out-btn': {
+            el: '#animation-box-fade-out',
+            to: 'fadeOut',
+            back: 'fadeIn'
+        },
+        '#flip-in-btn': {
+            el: '#animation-box-flip-in',
+            to: 'flipIn',
+            back: 'flipOut'
+        },
+        '#flip-out-btn': {
+            el: '#animation-box-flip-out',
+            to: 'flipOut',
+            back: 'flipIn'
+        },
+        '#zoom-in-btn': {
+            el: '#animation-box-zoom-in',
+            to: 'zoomIn',
+            back: 'zoomOut'
+        },
+        '#zoom-out-btn': {
+            el: '#animation-box-zoom-out',
+            to: 'zoomOut',
+            back: 'zoomIn'
+        },
+        '#slide-in-right-btn': {
+            el: '#animation-box-slide-in-right',
+            to: 'slideInRight',
+            back: 'slideOutRight'
+        },
+        '#slide-in-left-btn': {
+            el: '#animation-box-slide-in-left',
+            to: 'slideInLeft',
+            back: 'slideOutLeft'
+        },
+        '#slide-in-down-btn': {
+            el: '#animation-box-slide-in-down',
+            to: 'slideInDown',
+            back: 'slideOutUp'
+        },
+        '#slide-out-right-btn': {
+            el: '#animation-box-slide-out-right',
+            to: 'slideOutRight',
+            back: 'slideInRight'
+        },
+        '#slide-out-left-btn': {
+            el: '#animation-box-slide-out-left',
+            to: 'slideOutLeft',
+            back: 'slideInLeft'
+        },
+        '#slide-out-up-btn': {
+            el: '#animation-box-slide-out-up',
+            to: 'slideOutUp',
+            back: 'slideInDown'
+        },
+    };
+
+    for (var key in animate)
+    {
+        $(key).attr('data-el', animate[key].el);
+        $(key).attr('data-to', animate[key].to);
+        $(key).attr('data-back', animate[key].back);
+
+        $(key).on('click', function(e)
+        {
+            e.preventDefault();
+            var $btn = $(e.target);
+            if ($btn.hasClass('demo-muted-link'))
+            {
+                return;
+            }
+
+            var $el = $($btn.attr('data-el'));
+            $btn.addClass('demo-muted-link');
+
+            $el.animation($btn.attr('data-to'));
+            setTimeout(function() {
+
+                $el.animation($btn.attr('data-back'));
+                $btn.removeClass('demo-muted-link');
+
+            }, 1500);
+
+        });
+    }
+
+
+    $('#rotate-btn').on('click', function(e)
+    {
+        e.preventDefault();
+        $('#animation-box-rotate').animation('rotate');
+    });
+
+    $('#shake-btn').on('click', function(e)
+    {
+        e.preventDefault();
+        $('#animation-box-shake').animation('shake');
+    });
+
+    $('#pulse-btn').on('click', function(e)
+    {
+        e.preventDefault();
+        $('#animation-box-pulse').animation('pulse');
+    });
+
+
+});
+</script>
\ No newline at end of file
diff --git a/themes/kube/layouts/partials/site-verification.html b/themes/kube/layouts/partials/site-verification.html
new file mode 100644
index 0000000..c4d8b05
--- /dev/null
+++ b/themes/kube/layouts/partials/site-verification.html
@@ -0,0 +1,12 @@
+{{ if .Site.Params.seo.webmaster_verifications.google }}
+  <meta name="google-site-verification" content="{{ .Site.Params.seo.webmaster_verifications.google }}" />
+{{ end }}
+{{ if .Site.Params.seo.webmaster_verifications.bing }}
+  <meta name="msvalidate.01" content="{{ .Site.Params.seo.webmaster_verifications.bing }}">
+{{ end }}
+{{ if .Site.Params.seo.webmaster_verifications.alexa }}
+  <meta name="alexaVerifyID" content="{{ .Site.Params.seo.webmaster_verifications.alexa }}">
+{{ end }}
+{{ if .Site.Params.seo.webmaster_verifications.yandex }}
+  <meta name="yandex-verification" content="{{ .Site.Params.seo.webmaster_verifications.yandex }}">
+{{ end }}
diff --git a/themes/kube/layouts/partials/toc.html b/themes/kube/layouts/partials/toc.html
new file mode 100644
index 0000000..ccc3f3d
--- /dev/null
+++ b/themes/kube/layouts/partials/toc.html
@@ -0,0 +1,21 @@
+{{ if and (isset .Params "toc") .Params.toc }}
+<nav id="contents">
+    <ol class="js-toc">
+    </ol>
+</nav>
+<script type="text/javascript">
+document.addEventListener("DOMContentLoaded",
+function(){
+tocbot.init({
+// Where to render the table of contents.
+tocSelector: '.js-toc',
+// Where to grab the headings to build the table of contents.
+contentSelector: '.content',
+// Which headings to grab inside of the contentSelector element.
+headingSelector: 'h3'
+})
+}
+);
+</script>
+
+{{ end }}
\ No newline at end of file
diff --git a/themes/kube/layouts/section/community.html b/themes/kube/layouts/section/community.html
new file mode 100644
index 0000000..89cd947
--- /dev/null
+++ b/themes/kube/layouts/section/community.html
@@ -0,0 +1,22 @@
+{{ define "title"}} {{ .Site.Title}} – {{ .Title}} {{end}}
+{{ define "header"}} {{ partial "header" .}} {{end}}
+{{ define "main"}}
+<div id="main">
+  <div id="hero">
+    <h1>{{.Title}}</h1>
+  </div>
+  <div id="components">
+    <div class="row gutters">
+      {{ range .Data.Pages.ByWeight }}
+      <div class="col col-4 item">
+        <h4><a href="{{ .Permalink }}">{{ .Title }}</a></h4>
+        <p>{{ .Params.description }}</p>
+      </div>
+      {{ end }}
+
+    </div>
+  </div>
+</div>
+{{ end }}
+
+{{ define "footer"}} {{ partial "footer" .}} {{end}}
diff --git a/themes/kube/layouts/section/development.html b/themes/kube/layouts/section/development.html
new file mode 100644
index 0000000..89cd947
--- /dev/null
+++ b/themes/kube/layouts/section/development.html
@@ -0,0 +1,22 @@
+{{ define "title"}} {{ .Site.Title}} – {{ .Title}} {{end}}
+{{ define "header"}} {{ partial "header" .}} {{end}}
+{{ define "main"}}
+<div id="main">
+  <div id="hero">
+    <h1>{{.Title}}</h1>
+  </div>
+  <div id="components">
+    <div class="row gutters">
+      {{ range .Data.Pages.ByWeight }}
+      <div class="col col-4 item">
+        <h4><a href="{{ .Permalink }}">{{ .Title }}</a></h4>
+        <p>{{ .Params.description }}</p>
+      </div>
+      {{ end }}
+
+    </div>
+  </div>
+</div>
+{{ end }}
+
+{{ define "footer"}} {{ partial "footer" .}} {{end}}
diff --git a/themes/kube/layouts/section/documentation.html b/themes/kube/layouts/section/documentation.html
new file mode 100644
index 0000000..ed77b99
--- /dev/null
+++ b/themes/kube/layouts/section/documentation.html
@@ -0,0 +1,22 @@
+{{ define "title"}} {{ .Site.Title}} – {{ .Title}} {{end}}
+{{ define "header"}} {{ partial "header" .}} {{end}}
+{{ define "main"}}
+<div id="main">
+  <div id="hero">
+    <h1>{{.Title}}</h1>
+  </div>
+  <div id="components">
+    <div class="row gutters">
+      {{ range .Data.Pages.ByWeight }}
+      <div class="col col-4 item">
+        <h4><a href="{{ .Permalink }}">{{ .Title }}</a></h4>
+        <p>{{ .Params.description }}</p>
+      </div>
+      {{ end }}
+
+    </div>
+  </div>
+</div>
+{{ end }}
+
+{{ define "footer"}} {{ partial "footer" .}} {{end}}
\ No newline at end of file
diff --git a/themes/kube/layouts/section/faq.html b/themes/kube/layouts/section/faq.html
new file mode 100644
index 0000000..3ed8894
--- /dev/null
+++ b/themes/kube/layouts/section/faq.html
@@ -0,0 +1,16 @@
+{{ define "title"}} {{ .Site.Title}} – {{ .Title}} {{end}}
+{{ define "header"}} {{ partial "header" .}} {{end}}
+
+{{ define "main" }}
+
+<div id="hero" class="wrap">
+  <h1>{{.Title }}</h1>
+    <p>{{.Params.description}}<br></p>
+</div>
+<div id="kube-faq">
+{{.Content}}
+</div>
+{{ end }} 
+{{ define "footer" }} 
+  {{ partial "footer" . }} 
+{{ end }}
diff --git a/themes/kube/layouts/shortcodes/rawhtml.html b/themes/kube/layouts/shortcodes/rawhtml.html
new file mode 100644
index 0000000..b90bea2
--- /dev/null
+++ b/themes/kube/layouts/shortcodes/rawhtml.html
@@ -0,0 +1,2 @@
+<!-- raw html -->
+{{.Inner}}
diff --git a/themes/kube/netlify.toml b/themes/kube/netlify.toml
new file mode 100644
index 0000000..b45f038
--- /dev/null
+++ b/themes/kube/netlify.toml
@@ -0,0 +1,30 @@
+[build]
+publish = "public"
+command = "hugo"
+
+[context.production.environment]
+HUGO_VERSION = "0.80.0"
+HUGO_ENV = "production"
+HUGO_ENABLEGITINFO = "true"
+
+[context.split1]
+command = "hugo --enableGitInfo"
+
+[context.split1.environment]
+HUGO_VERSION = "0.80.0"
+HUGO_ENV = "production"
+
+[context.deploy-preview]
+command = "hugo -b $DEPLOY_PRIME_URL"
+
+[context.deploy-preview.environment]
+HUGO_VERSION = "v0.80.0"
+
+[context.branch-deploy]
+command = "hugo -b $DEPLOY_PRIME_URL"
+
+[context.branch-deploy.environment]
+HUGO_VERSION = "v0.80.0"
+
+[context.next.environment]
+HUGO_ENABLEGITINFO = "true"
diff --git a/themes/kube/static/css/custom.css b/themes/kube/static/css/custom.css
new file mode 100644
index 0000000..e69de29
diff --git a/themes/kube/static/css/font.css b/themes/kube/static/css/font.css
new file mode 100644
index 0000000..9f19ed4
--- /dev/null
+++ b/themes/kube/static/css/font.css
@@ -0,0 +1,68 @@
+@font-face {
+    font-family: 'Lato';
+    src: url('../font/Lato-Light.woff') format('woff');
+    font-weight: 300;
+    font-style: normal;
+}
+
+@font-face {
+    font-family: 'Lato';
+    src: url('../font/Lato-LightItalic.woff') format('woff');
+    font-weight: 300;
+    font-style: italic;
+}
+@font-face {
+    font-family: 'Lato';
+    src: url('../font/Lato-Black.woff') format('woff');
+    font-weight: 900;
+    font-style: normal;
+}
+
+@font-face {
+    font-family: 'Lato';
+    src: url('../font/Lato-BlackItalic.woff') format('woff');
+    font-weight: 900;
+    font-style: italic;
+}
+
+@font-face {
+    font-family: 'Lato';
+    src: url('../font/Lato-Bold.woff') format('woff');
+    font-weight: bold;
+    font-style: normal;
+}
+
+@font-face {
+    font-family: 'Lato';
+    src: url('../font/Lato-BoldItalic.woff') format('woff');
+    font-weight: bold;
+    font-style: italic;
+}
+
+@font-face {
+    font-family: 'Lato';
+    src: url('../font/Lato-Semibold.woff') format('woff');
+    font-weight: 500;
+    font-style: normal;
+}
+
+@font-face {
+    font-family: 'Lato';
+    src: url('../font/Lato-SemiboldItalic.woff') format('woff');
+    font-weight: 500;
+    font-style: italic;
+}
+
+@font-face {
+    font-family: 'Lato';
+    src: url('../font/Lato-Italic.woff') format('woff');
+    font-weight: normal;
+    font-style: italic;
+}
+
+@font-face {
+    font-family: 'Lato';
+    src: url('../font/Lato-Regular.woff') format('woff');
+    font-weight: normal;
+    font-style: normal;
+}
\ No newline at end of file
diff --git a/themes/kube/static/css/highlight.css b/themes/kube/static/css/highlight.css
new file mode 100644
index 0000000..7d8be18
--- /dev/null
+++ b/themes/kube/static/css/highlight.css
@@ -0,0 +1 @@
+.hljs{display:block;overflow-x:auto;padding:0.5em;background:#F0F0F0}.hljs,.hljs-subst{color:#444}.hljs-comment{color:#888888}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable [...]
\ No newline at end of file
diff --git a/themes/kube/static/css/kube.css b/themes/kube/static/css/kube.css
new file mode 100644
index 0000000..143b76d
--- /dev/null
+++ b/themes/kube/static/css/kube.css
@@ -0,0 +1,2156 @@
+/*
+	Kube. CSS & JS Framework
+	Version 6.5.2
+	Updated: February 2, 2017
+
+	http://imperavi.com/kube/
+
+	Copyright (c) 2009-2017, Imperavi LLC.
+	License: MIT
+*/
+html {
+  box-sizing: border-box; }
+
+*,
+*:before,
+*:after {
+  box-sizing: inherit; }
+
+* {
+  margin: 0;
+  padding: 0;
+  outline: 0;
+  -webkit-overflow-scrolling: touch; }
+
+img,
+video,
+audio {
+  max-width: 100%; }
+
+img,
+video {
+  height: auto; }
+
+svg {
+  max-height: 100%; }
+
+iframe {
+  border: none; }
+
+::-moz-focus-inner {
+  border: 0;
+  padding: 0; }
+
+input[type="radio"],
+input[type="checkbox"] {
+  vertical-align: middle;
+  position: relative;
+  bottom: 0.15rem;
+  font-size: 115%;
+  margin-right: 3px; }
+
+input[type="search"] {
+  -webkit-appearance: textfield; }
+
+input[type="search"]::-webkit-search-decoration,
+input[type="search"]::-webkit-search-cancel-button {
+  -webkit-appearance: none; }
+
+.black {
+  color: #0d0d0e; }
+
+.inverted {
+  color: #fff; }
+
+.error {
+  color: #f03c69; }
+
+.success {
+  color: #35beb1; }
+
+.warning {
+  color: #f7ba45; }
+
+.focus {
+  color: #1c86f2; }
+
+.aluminum {
+  color: #f8f8f8; }
+
+.silver {
+  color: #e0e1e1; }
+
+.lightgray {
+  color: #d4d4d4; }
+
+.gray {
+  color: #bdbdbd; }
+
+.midgray {
+  color: #676b72; }
+
+.darkgray {
+  color: #313439; }
+
+.bg-black {
+  background-color: #0d0d0e; }
+
+.bg-inverted {
+  background-color: #fff; }
+
+.bg-error {
+  background-color: #f03c69; }
+
+.bg-success {
+  background-color: #35beb1; }
+
+.bg-warning {
+  background-color: #f7ba45; }
+
+.bg-focus {
+  background-color: #1c86f2; }
+
+.bg-aluminum {
+  background-color: #f8f8f8; }
+
+.bg-silver {
+  background-color: #e0e1e1; }
+
+.bg-lightgray {
+  background-color: #d4d4d4; }
+
+.bg-gray {
+  background-color: #bdbdbd; }
+
+.bg-midgray {
+  background-color: #676b72; }
+
+.bg-darkgray {
+  background-color: #313439; }
+
+.bg-highlight {
+  background-color: #edf2ff; }
+
+html,
+body {
+  font-size: 16px;
+  line-height: 24px; }
+
+body {
+  font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
+  color: #313439;
+  background-color: transparent; }
+
+a {
+  color: #3794de; }
+
+a:hover {
+  color: #f03c69; }
+
+h1.title, h1, h2, h3, h4, h5, h6 {
+  font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
+  font-weight: bold;
+  color: #0d0d0e;
+  text-rendering: optimizeLegibility;
+  margin-bottom: 16px; }
+
+h1.title {
+  font-size: 60px;
+  line-height: 64px;
+  margin-bottom: 8px; }
+
+h1,
+.h1 {
+  font-size: 48px;
+  line-height: 52px; }
+
+h2,
+.h2 {
+  font-size: 36px;
+  line-height: 40px; }
+
+h3,
+.h3 {
+  font-size: 24px;
+  line-height: 32px; }
+
+h4,
+.h4 {
+  font-size: 21px;
+  line-height: 32px; }
+
+h5,
+.h5 {
+  font-size: 18px;
+  line-height: 28px; }
+
+h6,
+.h6 {
+  font-size: 16px;
+  line-height: 24px; }
+
+h1 a, .h1 a,
+h2 a, .h2 a,
+h3 a, .h3 a,
+h4 a, .h4 a,
+h5 a, .h5 a,
+h6 a, .h6 a {
+  color: inherit; }
+
+p + h2,
+p + h3,
+p + h4,
+p + h5,
+p + h6,
+ul + h2,
+ul + h3,
+ul + h4,
+ul + h5,
+ul + h6,
+ol + h2,
+ol + h3,
+ol + h4,
+ol + h5,
+ol + h6,
+dl + h2,
+dl + h3,
+dl + h4,
+dl + h5,
+dl + h6,
+blockquote + h2,
+blockquote + h3,
+blockquote + h4,
+blockquote + h5,
+blockquote + h6,
+hr + h2,
+hr + h3,
+hr + h4,
+hr + h5,
+hr + h6,
+pre + h2,
+pre + h3,
+pre + h4,
+pre + h5,
+pre + h6,
+table + h2,
+table + h3,
+table + h4,
+table + h5,
+table + h6,
+form + h2,
+form + h3,
+form + h4,
+form + h5,
+form + h6,
+figure + h2,
+figure + h3,
+figure + h4,
+figure + h5,
+figure + h6 {
+  margin-top: 24px; }
+
+ul,
+ul ul,
+ul ol,
+ol,
+ol ul,
+ol ol {
+  margin: 0 0 0 24px; }
+
+ol ol li {
+  list-style-type: lower-alpha; }
+
+ol ol ol li {
+  list-style-type: lower-roman; }
+
+nav ul,
+nav ol {
+  margin: 0;
+  list-style: none; }
+  nav ul ul,
+  nav ul ol,
+  nav ol ul,
+  nav ol ol {
+    margin-left: 24px; }
+
+dl dt {
+  font-weight: bold; }
+
+dd {
+  margin-left: 24px; }
+
+p, blockquote, hr, pre, ol, ul, dl, table, fieldset, figure, address, form {
+  margin-bottom: 16px; }
+
+hr {
+  border: none;
+  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+  margin-top: -1px; }
+
+blockquote {
+  padding-left: 1rem;
+  border-left: 4px solid rgba(0, 0, 0, 0.1);
+  font-style: italic;
+  color: rgba(49, 52, 57, 0.65); }
+  blockquote p {
+    margin-bottom: .5rem; }
+
+time, cite, small, figcaption {
+  font-size: 87.5%; }
+
+cite {
+  opacity: .6; }
+
+abbr[title], dfn[title] {
+  border-bottom: 1px dotted rgba(0, 0, 0, 0.5);
+  cursor: help; }
+
+var {
+  font-size: 16px;
+  opacity: .6;
+  font-style: normal; }
+
+mark, code, samp, kbd {
+  position: relative;
+  top: -1px;
+  padding: 4px 4px 2px 4px;
+  display: inline-block;
+  line-height: 1;
+  color: rgba(49, 52, 57, 0.85); }
+
+code {
+  background: #e0e1e1; }
+
+mark {
+  background: #f7ba45; }
+
+samp {
+  color: #fff;
+  background: #1c86f2; }
+
+kbd {
+  border: 1px solid rgba(0, 0, 0, 0.1); }
+
+sub,
+sup {
+  font-size: x-small;
+  line-height: 0;
+  margin-left: 1rem/4;
+  position: relative; }
+
+sup {
+  top: 0; }
+
+sub {
+  bottom: 1px; }
+
+pre, code, samp, var, kbd {
+  font-family: Consolas, Monaco, "Courier New", monospace; }
+
+pre, code, samp, var, kbd, mark {
+  font-size: 87.5%; }
+
+pre,
+pre code {
+  background: #f8f8f8;
+  padding: 0;
+  top: 0;
+  display: block;
+  line-height: 20px;
+  color: rgba(49, 52, 57, 0.85);
+  overflow: none;
+  white-space: pre-wrap; }
+
+pre {
+  padding: 1rem; }
+
+figcaption {
+  opacity: .6; }
+
+figure figcaption {
+  position: relative;
+  top: -1rem/2; }
+
+figure pre {
+  background: none;
+  border: 1px solid rgba(0, 0, 0, 0.1);
+  border-radius: 4px; }
+
+figure .video-container,
+figure pre {
+  margin-bottom: 8px; }
+
+.text-left {
+  text-align: left; }
+
+.text-center {
+  text-align: center; }
+
+.text-right {
+  text-align: right; }
+
+ul.unstyled {
+  margin-left: 0; }
+
+ul.unstyled,
+ul.unstyled ul {
+  list-style: none; }
+
+.monospace {
+  font-family: Consolas, Monaco, "Courier New", monospace; }
+
+.upper {
+  text-transform: uppercase; }
+
+.lower {
+  text-transform: lowercase; }
+
+.italic {
+  font-style: italic !important; }
+
+.strong {
+  font-weight: bold !important; }
+
+.normal {
+  font-weight: normal !important; }
+
+.muted {
+  opacity: .55; }
+
+a.muted {
+  color: #0d0d0e; }
+
+a.muted:hover {
+  opacity: 1; }
+
+.black {
+  color: #0d0d0e; }
+
+.smaller {
+  font-size: 12px;
+  line-height: 20px; }
+
+.small {
+  font-size: 14px;
+  line-height: 20px; }
+
+.big {
+  font-size: 18px;
+  line-height: 28px; }
+
+.large {
+  font-size: 20px;
+  line-height: 32px; }
+
+.end {
+  margin-bottom: 0 !important; }
+
+.highlight {
+  background-color: #edf2ff; }
+
+.nowrap,
+.nowrap td {
+  white-space: nowrap; }
+
+@media (min-width: 768px) and (max-width: 1024px) {
+  .columns-2,
+  .columns-3,
+  .columns-4 {
+    column-gap: 24px; }
+  .columns-2 {
+    column-count: 2; }
+  .columns-3 {
+    column-count: 3; }
+  .columns-4 {
+    column-count: 4; } }
+
+.row {
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap; }
+  @media (max-width: 768px) {
+    .row {
+      flex-direction: column;
+      flex-wrap: nowrap; } }
+  .row.gutters,
+  .row.gutters > .row {
+    margin-left: -2%; }
+    @media (max-width: 768px) {
+      .row.gutters,
+      .row.gutters > .row {
+        margin-left: 0; } }
+    .row.gutters > .col,
+    .row.gutters > .row > .col {
+      margin-left: 2%; }
+      @media (max-width: 768px) {
+        .row.gutters > .col,
+        .row.gutters > .row > .col {
+          margin-left: 0; } }
+  .row.around {
+    justify-content: space-around; }
+  .row.between {
+    justify-content: space-between; }
+  .row.auto .col {
+    flex-grow: 1; }
+
+.col-1 {
+  width: 8.33333%; }
+
+.offset-1 {
+  margin-left: 8.33333%; }
+
+.col-2 {
+  width: 16.66667%; }
+
+.offset-2 {
+  margin-left: 16.66667%; }
+
+.col-3 {
+  width: 25%; }
+
+.offset-3 {
+  margin-left: 25%; }
+
+.col-4 {
+  width: 33.33333%; }
+
+.offset-4 {
+  margin-left: 33.33333%; }
+
+.col-5 {
+  width: 41.66667%; }
+
+.offset-5 {
+  margin-left: 41.66667%; }
+
+.col-6 {
+  width: 50%; }
+
+.offset-6 {
+  margin-left: 50%; }
+
+.col-7 {
+  width: 58.33333%; }
+
+.offset-7 {
+  margin-left: 58.33333%; }
+
+.col-8 {
+  width: 66.66667%; }
+
+.offset-8 {
+  margin-left: 66.66667%; }
+
+.col-9 {
+  width: 75%; }
+
+.offset-9 {
+  margin-left: 75%; }
+
+.col-10 {
+  width: 83.33333%; }
+
+.offset-10 {
+  margin-left: 83.33333%; }
+
+.col-11 {
+  width: 91.66667%; }
+
+.offset-11 {
+  margin-left: 91.66667%; }
+
+.col-12 {
+  width: 100%; }
+
+.offset-12 {
+  margin-left: 100%; }
+
+.gutters > .col-1 {
+  width: calc(8.33333% - 2%); }
+
+.gutters > .offset-1 {
+  margin-left: calc(8.33333% + 2%) !important; }
+
+.gutters > .col-2 {
+  width: calc(16.66667% - 2%); }
+
+.gutters > .offset-2 {
+  margin-left: calc(16.66667% + 2%) !important; }
+
+.gutters > .col-3 {
+  width: calc(25% - 2%); }
+
+.gutters > .offset-3 {
+  margin-left: calc(25% + 2%) !important; }
+
+.gutters > .col-4 {
+  width: calc(33.33333% - 2%); }
+
+.gutters > .offset-4 {
+  margin-left: calc(33.33333% + 2%) !important; }
+
+.gutters > .col-5 {
+  width: calc(41.66667% - 2%); }
+
+.gutters > .offset-5 {
+  margin-left: calc(41.66667% + 2%) !important; }
+
+.gutters > .col-6 {
+  width: calc(50% - 2%); }
+
+.gutters > .offset-6 {
+  margin-left: calc(50% + 2%) !important; }
+
+.gutters > .col-7 {
+  width: calc(58.33333% - 2%); }
+
+.gutters > .offset-7 {
+  margin-left: calc(58.33333% + 2%) !important; }
+
+.gutters > .col-8 {
+  width: calc(66.66667% - 2%); }
+
+.gutters > .offset-8 {
+  margin-left: calc(66.66667% + 2%) !important; }
+
+.gutters > .col-9 {
+  width: calc(75% - 2%); }
+
+.gutters > .offset-9 {
+  margin-left: calc(75% + 2%) !important; }
+
+.gutters > .col-10 {
+  width: calc(83.33333% - 2%); }
+
+.gutters > .offset-10 {
+  margin-left: calc(83.33333% + 2%) !important; }
+
+.gutters > .col-11 {
+  width: calc(91.66667% - 2%); }
+
+.gutters > .offset-11 {
+  margin-left: calc(91.66667% + 2%) !important; }
+
+.gutters > .col-12 {
+  width: calc(100% - 2%); }
+
+.gutters > .offset-12 {
+  margin-left: calc(100% + 2%) !important; }
+
+@media (max-width: 768px) {
+  [class^='offset-'],
+  [class*=' offset-'] {
+    margin-left: 0; } }
+
+.first {
+  order: -1; }
+
+.last {
+  order: 1; }
+
+@media (max-width: 768px) {
+  .row .col {
+    margin-left: 0;
+    width: 100%; }
+  .row.gutters .col {
+    margin-bottom: 16px; }
+  .first-sm {
+    order: -1; }
+  .last-sm {
+    order: 1; } }
+
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+  max-width: 100%;
+  width: 100%;
+  empty-cells: show;
+  font-size: 15px;
+  line-height: 24px; }
+
+table caption {
+  text-align: left;
+  font-size: 14px;
+  font-weight: 500;
+  color: #676b72; }
+
+th {
+  text-align: left;
+  font-weight: 700;
+  vertical-align: bottom; }
+
+td {
+  vertical-align: top; }
+
+tr.align-middle td,
+td.align-middle {
+  vertical-align: middle; }
+
+th,
+td {
+  padding: 1rem 1rem;
+  border-bottom: 1px solid rgba(0, 0, 0, 0.05); }
+  th:first-child,
+  td:first-child {
+    padding-left: 0; }
+  th:last-child,
+  td:last-child {
+    padding-right: 0; }
+
+tfoot th,
+tfoot td {
+  color: rgba(49, 52, 57, 0.5); }
+
+table.bordered td,
+table.bordered th {
+  border: 1px solid rgba(0, 0, 0, 0.05); }
+
+table.striped tr:nth-child(odd) td {
+  background: #f8f8f8; }
+
+table.bordered td:first-child,
+table.bordered th:first-child,
+table.striped td:first-child,
+table.striped th:first-child {
+  padding-left: 1rem; }
+
+table.bordered td:last-child,
+table.bordered th:last-child,
+table.striped td:last-child,
+table.striped th:last-child {
+  padding-right: 1rem; }
+
+table.unstyled td,
+table.unstyled th {
+  border: none;
+  padding: 0; }
+
+fieldset {
+  font-family: inherit;
+  border: 1px solid rgba(0, 0, 0, 0.1);
+  padding: 2rem;
+  margin-bottom: 2rem;
+  margin-top: 2rem; }
+
+legend {
+  font-weight: bold;
+  font-size: 12px;
+  text-transform: uppercase;
+  padding: 0 1rem;
+  margin-left: -1rem;
+  top: 2px;
+  position: relative;
+  line-height: 0; }
+
+input,
+textarea,
+select {
+  display: block;
+  width: 100%;
+  font-family: inherit;
+  font-size: 15px;
+  height: 40px;
+  outline: none;
+  vertical-align: middle;
+  background-color: #fff;
+  border: 1px solid #d4d4d4;
+  border-radius: 3px;
+  box-shadow: none;
+  padding: 0 12px; }
+
+input.small,
+textarea.small,
+select.small {
+  height: 36px;
+  font-size: 13px;
+  padding: 0 12px;
+  border-radius: 3px; }
+
+input.big,
+textarea.big,
+select.big {
+  height: 48px;
+  font-size: 17px;
+  padding: 0 12px;
+  border-radius: 3px; }
+
+input:focus,
+textarea:focus,
+select:focus {
+  outline: none;
+  background-color: #fff;
+  border-color: #1c86f2;
+  box-shadow: 0 0 1px #1c86f2 inset; }
+
+input.error,
+textarea.error,
+select.error {
+  background-color: rgba(240, 60, 105, 0.1);
+  border: 1px solid #f583a0; }
+  input.error:focus,
+  textarea.error:focus,
+  select.error:focus {
+    border-color: #f03c69;
+    box-shadow: 0 0 1px #f03c69 inset; }
+
+input.success,
+textarea.success,
+select.success {
+  background-color: rgba(53, 190, 177, 0.1);
+  border: 1px solid #6ad5cb; }
+  input.success:focus,
+  textarea.success:focus,
+  select.success:focus {
+    border-color: #35beb1;
+    box-shadow: 0 0 1px #35beb1 inset; }
+
+input:disabled, input.disabled,
+textarea:disabled,
+textarea.disabled,
+select:disabled,
+select.disabled {
+  resize: none;
+  opacity: 0.6;
+  cursor: default;
+  font-style: italic;
+  color: rgba(0, 0, 0, 0.5); }
+
+select {
+  -webkit-appearance: none;
+  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="9" height="12" viewBox="0 0 9 12"><path fill="#5e6c75" d="M0.722,4.823L-0.01,4.1,4.134-.01,4.866,0.716Zm7.555,0L9.01,4.1,4.866-.01l-0.732.726ZM0.722,7.177L-0.01,7.9,4.134,12.01l0.732-.726Zm7.555,0L9.01,7.9,4.866,12.01l-0.732-.726Z"/></svg>');
+  background-repeat: no-repeat;
+  background-position: right 1rem center; }
+
+select[multiple] {
+  background-image: none;
+  height: auto;
+  padding: .5rem .75rem; }
+
+textarea {
+  height: auto;
+  padding: 8px 12px;
+  line-height: 24px;
+  vertical-align: top; }
+
+input[type="file"] {
+  width: auto;
+  border: none;
+  padding: 0;
+  height: auto;
+  background: none;
+  box-shadow: none;
+  display: inline-block; }
+
+input[type="search"],
+input.search {
+  background-repeat: no-repeat;
+  background-position: 8px 53%;
+  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="#000" fill-opacity="0.4" d="M14.891,14.39l-0.5.5a0.355,0.355,0,0,1-.5,0L9.526,10.529a5.3,5.3,0,1,1,2.106-4.212,5.268,5.268,0,0,1-1.1,3.21l4.362,4.362A0.354,0.354,0,0,1,14.891,14.39ZM6.316,2.418a3.9,3.9,0,1,0,3.9,3.9A3.9,3.9,0,0,0,6.316,2.418Z"/></svg>');
+  padding-left: 32px; }
+
+input[type="radio"],
+input[type="checkbox"] {
+  display: inline-block;
+  width: auto;
+  height: auto;
+  padding: 0; }
+
+label {
+  display: block;
+  color: #313439;
+  margin-bottom: 4px;
+  font-size: 15px; }
+  label.checkbox,
+  label .desc,
+  label .success,
+  label .error {
+    text-transform: none;
+    font-weight: normal; }
+  label.checkbox {
+    font-size: 16px;
+    line-height: 24px;
+    cursor: pointer;
+    color: inherit; }
+    label.checkbox input {
+      margin-top: 0; }
+
+.form-checkboxes label.checkbox {
+  display: inline-block;
+  margin-right: 16px; }
+
+.req {
+  position: relative;
+  top: 1px;
+  font-weight: bold;
+  color: #f03c69;
+  font-size: 110%; }
+
+.desc {
+  color: rgba(49, 52, 57, 0.5);
+  font-size: 12px;
+  line-height: 20px; }
+
+span.desc {
+  margin-left: 4px; }
+
+div.desc {
+  margin-top: 4px;
+  margin-bottom: -8px; }
+
+.form-buttons button,
+.form-buttons .button {
+  margin-right: 8px; }
+
+form,
+.form-item {
+  margin-bottom: 2rem; }
+
+.form > .form-item:last-child {
+  margin-bottom: 0; }
+
+.form .row:last-child .form-item {
+  margin-bottom: 0; }
+
+.form span.success,
+.form span.error {
+  font-size: 12px;
+  line-height: 20px;
+  margin-left: 4px; }
+
+.form-inline input,
+.form-inline textarea,
+.form-inline select {
+  display: inline-block;
+  width: auto; }
+
+.append,
+.prepend {
+  display: flex; }
+  .append input,
+  .prepend input {
+    flex: 1; }
+  .append .button,
+  .append span,
+  .prepend .button,
+  .prepend span {
+    flex-shrink: 0; }
+  .append span,
+  .prepend span {
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    font-weight: normal;
+    border: 1px solid #d4d4d4;
+    background-color: #f8f8f8;
+    padding: 0 .875rem;
+    color: rgba(0, 0, 0, 0.5);
+    font-size: 12px;
+    white-space: nowrap; }
+
+.prepend input {
+  border-radius: 0 3px 3px 0; }
+
+.prepend .button {
+  margin-right: -1px;
+  border-radius: 3px 0 0 3px !important; }
+
+.prepend span {
+  border-right: none;
+  border-radius: 3px 0 0 3px; }
+
+.append input {
+  border-radius: 3px 0 0 3px; }
+
+.append .button {
+  margin-left: -1px;
+  border-radius: 0 3px 3px 0 !important; }
+
+.append span {
+  border-left: none;
+  border-radius: 0 3px 3px 0; }
+
+button,
+.button {
+  font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
+  font-size: 15px;
+  color: #fff;
+  background-color: #1c86f2;
+  border-radius: 3px;
+  min-height: 40px;
+  padding: 8px 20px;
+  font-weight: 500;
+  text-decoration: none;
+  cursor: pointer;
+  display: inline-block;
+  line-height: 20px;
+  border: 1px solid transparent;
+  vertical-align: middle;
+  -webkit-appearance: none; }
+  button i,
+  .button i {
+    position: relative;
+    top: 1px;
+    margin: 0 2px; }
+
+input[type="submit"] {
+  width: auto; }
+
+button:hover,
+.button:hover {
+  outline: none;
+  text-decoration: none;
+  color: #fff;
+  background-color: #4ca0f5; }
+
+.button:disabled,
+.button.disabled {
+  cursor: default;
+  font-style: normal;
+  color: rgba(255, 255, 255, 0.7);
+  background-color: rgba(28, 134, 242, 0.7); }
+
+.button.small {
+  font-size: 13px;
+  min-height: 36px;
+  padding: 6px 20px;
+  border-radius: 3px; }
+
+.button.big {
+  font-size: 17px;
+  min-height: 48px;
+  padding: 13px 24px;
+  border-radius: 3px; }
+
+.button.large {
+  font-size: 19px;
+  min-height: 56px;
+  padding: 20px 36px;
+  border-radius: 3px; }
+
+.button.outline {
+  background: none;
+  border-width: 2px;
+  border-color: #1c86f2;
+  color: #1c86f2; }
+  .button.outline:hover {
+    background: none;
+    color: rgba(28, 134, 242, 0.6);
+    border-color: rgba(28, 134, 242, 0.5); }
+  .button.outline:disabled, .button.outline.disabled {
+    background: none;
+    color: rgba(28, 134, 242, 0.7);
+    border-color: rgba(28, 134, 242, 0.5); }
+
+.button.inverted {
+  color: #000;
+  background-color: #fff; }
+  .button.inverted:hover {
+    color: #000;
+    background-color: white; }
+  .button.inverted:disabled, .button.inverted.disabled {
+    color: rgba(0, 0, 0, 0.7);
+    background-color: rgba(255, 255, 255, 0.7); }
+  .button.inverted.outline {
+    background: none;
+    color: #fff;
+    border-color: #fff; }
+    .button.inverted.outline:hover {
+      color: rgba(255, 255, 255, 0.6);
+      border-color: rgba(255, 255, 255, 0.5); }
+    .button.inverted.outline:disabled, .button.inverted.outline.disabled {
+      background: none;
+      color: rgba(255, 255, 255, 0.7);
+      border-color: rgba(255, 255, 255, 0.5); }
+  .button.inverted:hover {
+    opacity: .7; }
+
+.button.round {
+  border-radius: 56px; }
+
+.button.raised {
+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); }
+
+.button.upper {
+  text-transform: uppercase;
+  letter-spacing: .04em;
+  font-size: 13px; }
+  .button.upper.small {
+    font-size: 11px; }
+  .button.upper.big {
+    font-size: 13px; }
+  .button.upper.large {
+    font-size: 15px; }
+
+.button.secondary {
+  color: #fff;
+  background-color: #313439; }
+  .button.secondary:hover {
+    color: #fff;
+    background-color: #606670; }
+  .button.secondary:disabled, .button.secondary.disabled {
+    color: rgba(255, 255, 255, 0.7);
+    background-color: rgba(49, 52, 57, 0.7); }
+  .button.secondary.outline {
+    background: none;
+    color: #313439;
+    border-color: #313439; }
+    .button.secondary.outline:hover {
+      color: rgba(49, 52, 57, 0.6);
+      border-color: rgba(49, 52, 57, 0.5); }
+    .button.secondary.outline:disabled, .button.secondary.outline.disabled {
+      background: none;
+      color: rgba(49, 52, 57, 0.7);
+      border-color: rgba(49, 52, 57, 0.5); }
+
+.label {
+  display: inline-block;
+  font-size: 13px;
+  background: #e0e1e1;
+  line-height: 18px;
+  padding: 0 10px;
+  font-weight: 500;
+  color: #313439;
+  border: 1px solid transparent;
+  vertical-align: middle;
+  text-decoration: none;
+  border-radius: 4px; }
+  .label a,
+  .label a:hover {
+    color: inherit;
+    text-decoration: none; }
+
+.label.big {
+  font-size: 14px;
+  line-height: 24px;
+  padding: 0 12px; }
+
+.label.upper {
+  text-transform: uppercase;
+  font-size: 11px; }
+
+.label.outline {
+  background: none;
+  border-color: #bdbdbd; }
+
+.label.badge {
+  text-align: center;
+  border-radius: 64px;
+  padding: 0 6px; }
+  .label.badge.big {
+    padding: 0 8px; }
+
+.label.tag {
+  padding: 0;
+  background: none;
+  border: none;
+  text-transform: uppercase;
+  font-size: 11px; }
+  .label.tag.big {
+    font-size: 13px; }
+
+.label.success {
+  background: #35beb1;
+  color: #fff; }
+  .label.success.tag, .label.success.outline {
+    background: none;
+    border-color: #35beb1;
+    color: #35beb1; }
+
+.label.error {
+  background: #f03c69;
+  color: #fff; }
+  .label.error.tag, .label.error.outline {
+    background: none;
+    border-color: #f03c69;
+    color: #f03c69; }
+
+.label.warning {
+  background: #f7ba45;
+  color: #0d0d0e; }
+  .label.warning.tag, .label.warning.outline {
+    background: none;
+    border-color: #f7ba45;
+    color: #f7ba45; }
+
+.label.focus {
+  background: #1c86f2;
+  color: #fff; }
+  .label.focus.tag, .label.focus.outline {
+    background: none;
+    border-color: #1c86f2;
+    color: #1c86f2; }
+
+.label.black {
+  background: #0d0d0e;
+  color: #fff; }
+  .label.black.tag, .label.black.outline {
+    background: none;
+    border-color: #0d0d0e;
+    color: #0d0d0e; }
+
+.label.inverted {
+  background: #fff;
+  color: #0d0d0e; }
+  .label.inverted.tag, .label.inverted.outline {
+    background: none;
+    border-color: #fff;
+    color: #fff; }
+
+.breadcrumbs {
+  font-size: 14px;
+  margin-bottom: 24px; }
+  .breadcrumbs ul {
+    display: flex;
+    align-items: center; }
+  .breadcrumbs.push-center ul {
+    justify-content: center; }
+  .breadcrumbs span,
+  .breadcrumbs a {
+    font-style: normal;
+    padding: 0 10px;
+    display: inline-block;
+    white-space: nowrap; }
+  .breadcrumbs li:after {
+    display: inline-block;
+    content: '/';
+    color: rgba(0, 0, 0, 0.3); }
+  .breadcrumbs li:last-child:after {
+    display: none; }
+  .breadcrumbs li:first-child span,
+  .breadcrumbs li:first-child a {
+    padding-left: 0; }
+  .breadcrumbs li.active a {
+    color: #313439;
+    text-decoration: none;
+    cursor: text; }
+
+.pagination {
+  margin: 24px 0;
+  font-size: 14px; }
+  .pagination ul {
+    display: flex;
+    margin: 0; }
+  .pagination.align-center ul {
+    justify-content: center; }
+  .pagination span,
+  .pagination a {
+    border-radius: 3px;
+    display: inline-block;
+    padding: 8px 12px;
+    line-height: 1;
+    white-space: nowrap;
+    border: 1px solid transparent; }
+  .pagination a {
+    text-decoration: none;
+    color: #313439; }
+    .pagination a:hover {
+      color: rgba(0, 0, 0, 0.5);
+      border-color: #e0e1e1; }
+  .pagination span,
+  .pagination li.active a {
+    color: rgba(0, 0, 0, 0.5);
+    border-color: #e0e1e1;
+    cursor: text; }
+  .pagination.upper {
+    font-size: 12px; }
+
+.pager span {
+  line-height: 24px; }
+
+.pager span,
+.pager a {
+  padding-left: 16px;
+  padding-right: 16px;
+  border-radius: 64px;
+  border-color: rgba(0, 0, 0, 0.1); }
+
+.pager li {
+  flex-basis: 50%; }
+
+.pager li.next {
+  text-align: right; }
+
+.pager.align-center li {
+  flex-basis: auto;
+  margin-left: 4px;
+  margin-right: 4px; }
+
+.pager.flat span,
+.pager.flat a {
+  border: none;
+  display: block;
+  padding: 0; }
+
+.pager.flat a {
+  font-weight: bold; }
+  .pager.flat a:hover {
+    background: none;
+    text-decoration: underline; }
+
+@media (max-width: 768px) {
+  .pager.flat ul {
+    flex-direction: column; }
+  .pager.flat li {
+    flex-basis: 100%;
+    margin-bottom: 8px;
+    text-align: left; } }
+
+@font-face {
+  font-family: 'Kube';
+  src: url("data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfgAAAC8AAAAYGNtYXAXVtKOAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZsMn2SAAAAF4AAADeGhlYWQMP9EUAAAE8AAAADZoaGVhB8IDzQAABSgAAAAkaG10eCYABd4AAAVMAAAAMGxvY2EFWASuAAAFfAAAABptYXhwABcAmwAABZgAAAAgbmFtZfMJxocAAAW4AAABYnBvc3QAAwAAAAAHHAAAACAAAwPHAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBwPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAA [...]
+  font-weight: normal;
+  font-style: normal; }
+
+[class^="kube-"], [class*=" kube-"], .close, .caret {
+  /* use !important to prevent issues with browser extensions that change fonts */
+  font-family: 'Kube' !important;
+  speak: none;
+  font-style: normal;
+  font-weight: normal;
+  font-variant: normal;
+  text-transform: none;
+  line-height: 1;
+  /* Better Font Rendering =========== */
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale; }
+
+.kube-calendar:before {
+  content: "\e900"; }
+
+.caret.down:before,
+.kube-caret-down:before {
+  content: "\e901"; }
+
+.caret.left:before,
+.kube-caret-left:before {
+  content: "\e902"; }
+
+.caret.right:before,
+.kube-caret-right:before {
+  content: "\e903"; }
+
+.caret.up:before,
+.kube-caret-up:before {
+  content: "\e904"; }
+
+.close:before,
+.kube-close:before {
+  content: "\e905"; }
+
+.kube-menu:before {
+  content: "\e906"; }
+
+.kube-search:before {
+  content: "\e907"; }
+
+.gutters .column.push-left,
+.push-left {
+  margin-right: auto; }
+
+.gutters .column.push-right,
+.push-right {
+  margin-left: auto; }
+
+.gutters .column.push-center,
+.push-center {
+  margin-left: auto;
+  margin-right: auto; }
+
+.gutters .column.push-middle,
+.push-middle {
+  margin-top: auto;
+  margin-bottom: auto; }
+
+.push-bottom {
+  margin-top: auto; }
+
+@media (max-width: 768px) {
+  .gutters .column.push-left-sm,
+  .push-left-sm {
+    margin-left: 0; }
+  .gutters .column.push-center-sm,
+  .push-center-sm {
+    margin-left: auto;
+    margin-right: auto; }
+  .push-top-sm {
+    margin-top: 0; } }
+
+.align-middle {
+  align-items: center; }
+
+.align-right {
+  justify-content: flex-end; }
+
+.align-center {
+  justify-content: center; }
+
+@media (max-width: 768px) {
+  .align-left-sm {
+    justify-content: flex-start; } }
+
+.float-right {
+  float: right; }
+
+.float-left {
+  float: left; }
+
+@media (max-width: 768px) {
+  .float-right {
+    float: none; }
+  .float-left {
+    float: none; } }
+
+.fixed {
+  position: fixed;
+  top: 0;
+  left: 0;
+  z-index: 100;
+  width: 100%; }
+
+.w5 {
+  width: 5%; }
+
+.w10 {
+  width: 10%; }
+
+.w15 {
+  width: 15%; }
+
+.w20 {
+  width: 20%; }
+
+.w25 {
+  width: 25%; }
+
+.w30 {
+  width: 30%; }
+
+.w35 {
+  width: 35%; }
+
+.w40 {
+  width: 40%; }
+
+.w45 {
+  width: 45%; }
+
+.w50 {
+  width: 50%; }
+
+.w55 {
+  width: 55%; }
+
+.w60 {
+  width: 60%; }
+
+.w65 {
+  width: 65%; }
+
+.w70 {
+  width: 70%; }
+
+.w75 {
+  width: 75%; }
+
+.w80 {
+  width: 80%; }
+
+.w85 {
+  width: 85%; }
+
+.w90 {
+  width: 90%; }
+
+.w95 {
+  width: 95%; }
+
+.w100 {
+  width: 100%; }
+
+.w-auto {
+  width: auto; }
+
+.w-small {
+  width: 480px; }
+
+.w-medium {
+  width: 600px; }
+
+.w-big {
+  width: 740px; }
+
+.w-large {
+  width: 840px; }
+
+@media (max-width: 768px) {
+  .w-auto-sm {
+    width: auto; }
+  .w100-sm,
+  .w-small,
+  .w-medium,
+  .w-big,
+  .w-large {
+    width: 100%; } }
+
+.max-w5 {
+  max-width: 5%; }
+
+.max-w10 {
+  max-width: 10%; }
+
+.max-w15 {
+  max-width: 15%; }
+
+.max-w20 {
+  max-width: 20%; }
+
+.max-w25 {
+  max-width: 25%; }
+
+.max-w30 {
+  max-width: 30%; }
+
+.max-w35 {
+  max-width: 35%; }
+
+.max-w40 {
+  max-width: 40%; }
+
+.max-w45 {
+  max-width: 45%; }
+
+.max-w50 {
+  max-width: 50%; }
+
+.max-w55 {
+  max-width: 55%; }
+
+.max-w60 {
+  max-width: 60%; }
+
+.max-w65 {
+  max-width: 65%; }
+
+.max-w70 {
+  max-width: 70%; }
+
+.max-w75 {
+  max-width: 75%; }
+
+.max-w80 {
+  max-width: 80%; }
+
+.max-w85 {
+  max-width: 85%; }
+
+.max-w90 {
+  max-width: 90%; }
+
+.max-w95 {
+  max-width: 95%; }
+
+.max-w100 {
+  max-width: 100%; }
+
+.max-w-small {
+  max-width: 480px; }
+
+.max-w-medium {
+  max-width: 600px; }
+
+.max-w-big {
+  max-width: 740px; }
+
+.max-w-large {
+  max-width: 840px; }
+
+@media (max-width: 768px) {
+  .max-w-auto-sm,
+  .max-w-small,
+  .max-w-medium,
+  .max-w-big,
+  .max-w-large {
+    max-width: auto; } }
+
+.min-w5 {
+  min-width: 5%; }
+
+.min-w10 {
+  min-width: 10%; }
+
+.min-w15 {
+  min-width: 15%; }
+
+.min-w20 {
+  min-width: 20%; }
+
+.min-w25 {
+  min-width: 25%; }
+
+.min-w30 {
+  min-width: 30%; }
+
+.min-w35 {
+  min-width: 35%; }
+
+.min-w40 {
+  min-width: 40%; }
+
+.min-w45 {
+  min-width: 45%; }
+
+.min-w50 {
+  min-width: 50%; }
+
+.min-w55 {
+  min-width: 55%; }
+
+.min-w60 {
+  min-width: 60%; }
+
+.min-w65 {
+  min-width: 65%; }
+
+.min-w70 {
+  min-width: 70%; }
+
+.min-w75 {
+  min-width: 75%; }
+
+.min-w80 {
+  min-width: 80%; }
+
+.min-w85 {
+  min-width: 85%; }
+
+.min-w90 {
+  min-width: 90%; }
+
+.min-w95 {
+  min-width: 95%; }
+
+.min-w100 {
+  min-width: 100%; }
+
+.h25 {
+  height: 25%; }
+
+.h50 {
+  height: 50%; }
+
+.h100 {
+  height: 100%; }
+
+.group:after {
+  content: '';
+  display: table;
+  clear: both; }
+
+.flex {
+  display: flex; }
+
+@media (max-width: 768px) {
+  .flex-column-sm {
+    flex-direction: column; }
+  .flex-w100-sm {
+    flex: 0 0 100%; } }
+  @media (max-width: 768px) and (max-width: 768px) {
+    .flex-w100-sm {
+      flex: 0 0 100% !important; } }
+
+.invisible {
+  visibility: hidden; }
+
+.visible {
+  visibility: visible; }
+
+.display-block {
+  display: block; }
+
+.hide {
+  display: none !important; }
+
+@media (max-width: 768px) {
+  .hide-sm {
+    display: none !important; } }
+
+@media (min-width: 769px) {
+  .show-sm {
+    display: none !important; } }
+
+@media print {
+  .hide-print {
+    display: none !important; }
+  .show-print {
+    display: block !important; } }
+
+.no-scroll {
+  overflow: hidden;
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100% !important; }
+
+.scrollbar-measure {
+  position: absolute;
+  top: -9999px;
+  width: 50px;
+  height: 50px;
+  overflow: scroll; }
+
+.video-container {
+  height: 0;
+  padding-bottom: 56.25%;
+  position: relative;
+  margin-bottom: 16px; }
+  .video-container iframe,
+  .video-container object,
+  .video-container embed {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100% !important;
+    height: 100% !important; }
+
+.close {
+  display: inline-block;
+  min-height: 16px;
+  min-width: 16px;
+  line-height: 16px;
+  vertical-align: middle;
+  text-align: center;
+  font-size: 12px;
+  opacity: .6; }
+  .close:hover {
+    opacity: 1; }
+  .close.small {
+    font-size: 8px; }
+  .close.big {
+    font-size: 18px; }
+  .close.white {
+    color: #fff; }
+
+.caret {
+  display: inline-block; }
+
+.button .caret {
+  margin-right: -8px; }
+
+.overlay {
+  position: fixed;
+  z-index: 200;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  background-color: rgba(255, 255, 255, 0.95); }
+  .overlay > .close {
+    position: fixed;
+    top: 1rem;
+    right: 1rem; }
+
+@media print {
+  * {
+    background: transparent !important;
+    color: black !important;
+    box-shadow: none !important;
+    text-shadow: none !important; }
+  a,
+  a:visited {
+    text-decoration: underline; }
+  pre, blockquote {
+    border: 1px solid #999;
+    page-break-inside: avoid; }
+  p, h2, h3 {
+    orphans: 3;
+    widows: 3; }
+  thead {
+    display: table-header-group; }
+  tr, img {
+    page-break-inside: avoid; }
+  img {
+    max-width: 100% !important; }
+  h2, h3, h4 {
+    page-break-after: avoid; }
+  @page {
+    margin: 0.5cm; } }
+
+@keyframes slideUp {
+  to {
+    height: 0;
+    padding-top: 0;
+    padding-bottom: 0; } }
+
+@keyframes slideDown {
+  from {
+    height: 0;
+    padding-top: 0;
+    padding-bottom: 0; } }
+
+@keyframes fadeIn {
+  from {
+    opacity: 0; }
+  to {
+    opacity: 1; } }
+
+@keyframes fadeOut {
+  from {
+    opacity: 1; }
+  to {
+    opacity: 0; } }
+
+@keyframes flipIn {
+  from {
+    opacity: 0;
+    transform: scaleY(0); }
+  to {
+    opacity: 1;
+    transform: scaleY(1); } }
+
+@keyframes flipOut {
+  from {
+    opacity: 1;
+    transform: scaleY(1); }
+  to {
+    opacity: 0;
+    transform: scaleY(0); } }
+
+@keyframes zoomIn {
+  from {
+    opacity: 0;
+    transform: scale3d(0.3, 0.3, 0.3); }
+  50% {
+    opacity: 1; } }
+
+@keyframes zoomOut {
+  from {
+    opacity: 1; }
+  50% {
+    opacity: 0;
+    transform: scale3d(0.3, 0.3, 0.3); }
+  to {
+    opacity: 0; } }
+
+@keyframes slideInRight {
+  from {
+    transform: translate3d(100%, 0, 0);
+    visibility: visible; }
+  to {
+    transform: translate3d(0, 0, 0); } }
+
+@keyframes slideInLeft {
+  from {
+    transform: translate3d(-100%, 0, 0);
+    visibility: visible; }
+  to {
+    transform: translate3d(0, 0, 0); } }
+
+@keyframes slideInDown {
+  from {
+    transform: translate3d(0, -100%, 0);
+    visibility: visible; }
+  to {
+    transform: translate3d(0, 0, 0); } }
+
+@keyframes slideOutLeft {
+  from {
+    transform: translate3d(0, 0, 0); }
+  to {
+    visibility: hidden;
+    transform: translate3d(-100%, 0, 0); } }
+
+@keyframes slideOutRight {
+  from {
+    transform: translate3d(0, 0, 0); }
+  to {
+    visibility: hidden;
+    transform: translate3d(100%, 0, 0); } }
+
+@keyframes slideOutUp {
+  from {
+    transform: translate3d(0, 0, 0); }
+  to {
+    visibility: hidden;
+    transform: translate3d(0, -100%, 0); } }
+
+@keyframes rotate {
+  from {
+    transform: rotate(0deg); }
+  to {
+    transform: rotate(360deg); } }
+
+@keyframes pulse {
+  from {
+    transform: scale3d(1, 1, 1); }
+  50% {
+    transform: scale3d(1.03, 1.03, 1.03); }
+  to {
+    transform: scale3d(1, 1, 1); } }
+
+@keyframes shake {
+  15% {
+    transform: translateX(0.5rem); }
+  30% {
+    transform: translateX(-0.4rem); }
+  45% {
+    transform: translateX(0.3rem); }
+  60% {
+    transform: translateX(-0.2rem); }
+  75% {
+    transform: translateX(0.1rem); }
+  90% {
+    transform: translateX(0); }
+  90% {
+    transform: translateX(0); } }
+
+.fadeIn {
+  animation: fadeIn 250ms; }
+
+.fadeOut {
+  animation: fadeOut 250ms; }
+
+.zoomIn {
+  animation: zoomIn 200ms; }
+
+.zoomOut {
+  animation: zoomOut 500ms; }
+
+.slideInRight {
+  animation: slideInRight 500ms; }
+
+.slideInLeft {
+  animation: slideInLeft 500ms; }
+
+.slideInDown {
+  animation: slideInDown 500ms; }
+
+.slideOutLeft {
+  animation: slideOutLeft 500ms; }
+
+.slideOutRight {
+  animation: slideOutRight 500ms; }
+
+.slideOutUp {
+  animation: slideOutUp 500ms; }
+
+.slideUp {
+  overflow: hidden;
+  animation: slideUp 200ms ease-in-out; }
+
+.slideDown {
+  overflow: hidden;
+  animation: slideDown 80ms ease-in-out; }
+
+.flipIn {
+  animation: flipIn 250ms cubic-bezier(0.5, -0.5, 0.5, 1.5); }
+
+.flipOut {
+  animation: flipOut 500ms cubic-bezier(0.5, -0.5, 0.5, 1.5); }
+
+.rotate {
+  animation: rotate 500ms; }
+
+.pulse {
+  animation: pulse 250ms 2; }
+
+.shake {
+  animation: shake 500ms; }
+
+.dropdown {
+  position: absolute;
+  z-index: 100;
+  top: 0;
+  right: 0;
+  width: 280px;
+  color: #000;
+  font-size: 15px;
+  background: #fff;
+  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
+  border-radius: 3px;
+  max-height: 300px;
+  margin: 0;
+  padding: 0;
+  overflow: hidden; }
+  .dropdown.dropdown-mobile {
+    position: fixed;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    width: 100%;
+    max-height: none;
+    border: none; }
+  .dropdown .close {
+    margin: 20px auto; }
+  .dropdown.open {
+    overflow: auto; }
+  .dropdown ul {
+    list-style: none;
+    margin: 0; }
+    .dropdown ul li {
+      border-bottom: 1px solid rgba(0, 0, 0, 0.07); }
+      .dropdown ul li:last-child {
+        border-bottom: none; }
+    .dropdown ul a {
+      display: block;
+      padding: 12px;
+      text-decoration: none;
+      color: #000; }
+      .dropdown ul a:hover {
+        background: rgba(0, 0, 0, 0.05); }
+
+.message {
+  font-family: Consolas, Monaco, "Courier New", monospace;
+  font-size: 14px;
+  line-height: 20px;
+  background: #e0e1e1;
+  color: #313439;
+  padding: 1rem;
+  padding-right: 2.5em;
+  padding-bottom: .75rem;
+  margin-bottom: 24px;
+  position: relative; }
+  .message a {
+    color: inherit; }
+  .message h2,
+  .message h3,
+  .message h4,
+  .message h5,
+  .message h6 {
+    margin-bottom: 0; }
+  .message .close {
+    position: absolute;
+    right: 1rem;
+    top: 1.1rem; }
+
+.message.error {
+  background: #f03c69;
+  color: #fff; }
+
+.message.success {
+  background: #35beb1;
+  color: #fff; }
+
+.message.warning {
+  background: #f7ba45; }
+
+.message.focus {
+  background: #1c86f2;
+  color: #fff; }
+
+.message.black {
+  background: #0d0d0e;
+  color: #fff; }
+
+.message.inverted {
+  background: #fff; }
+
+.modal-box {
+  position: fixed;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  overflow-x: hidden;
+  overflow-y: auto;
+  z-index: 200; }
+
+.modal {
+  position: relative;
+  margin: auto;
+  margin-top: 16px;
+  padding: 0;
+  background: #fff;
+  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
+  border-radius: 8px;
+  color: #000; }
+  @media (max-width: 768px) {
+    .modal input,
+    .modal textarea {
+      font-size: 16px; } }
+  .modal .close {
+    position: absolute;
+    top: 18px;
+    right: 16px;
+    opacity: .3; }
+    .modal .close:hover {
+      opacity: 1; }
+
+.modal-header {
+  padding: 24px 32px;
+  font-size: 18px;
+  font-weight: bold;
+  border-bottom: 1px solid rgba(0, 0, 0, 0.05); }
+  .modal-header:empty {
+    display: none; }
+
+.modal-body {
+  padding: 36px 56px; }
+
+@media (max-width: 768px) {
+  .modal-header,
+  .modal-body {
+    padding: 24px; } }
+
+.offcanvas {
+  background: #fff;
+  position: fixed;
+  padding: 24px;
+  height: 100%;
+  top: 0;
+  left: 0;
+  z-index: 300;
+  overflow-y: scroll; }
+
+.offcanvas .close {
+  position: absolute;
+  top: 8px;
+  right: 8px; }
+
+.offcanvas-left {
+  border-right: 1px solid rgba(0, 0, 0, 0.1); }
+
+.offcanvas-right {
+  left: auto;
+  right: 0;
+  border-left: 1px solid rgba(0, 0, 0, 0.1); }
+
+.offcanvas-push-body {
+  position: relative; }
+
+.tabs {
+  margin-bottom: 24px;
+  font-size: 14px; }
+  .tabs li em,
+  .tabs li.active a {
+    color: #313439;
+    border: 1px solid rgba(0, 0, 0, 0.1);
+    cursor: default;
+    text-decoration: none;
+    background: none; }
+  .tabs em,
+  .tabs a {
+    position: relative;
+    top: 1px;
+    font-style: normal;
+    display: block;
+    padding: .5rem 1rem;
+    border: 1px solid transparent;
+    color: rgba(0, 0, 0, 0.5);
+    text-decoration: none; }
+  .tabs a:hover {
+    -moz-transition: all linear 0.2s;
+    transition: all linear 0.2s;
+    color: #313439;
+    text-decoration: underline;
+    background-color: #e0e1e1; }
+
+@media (min-width: 768px) {
+  .tabs ul {
+    display: flex;
+    margin-top: -1px;
+    border-bottom: 1px solid rgba(0, 0, 0, 0.1); }
+  .tabs li em,
+  .tabs li.active a {
+    border-bottom: 1px solid #fff; } }
diff --git a/themes/kube/static/css/kube.demo.css b/themes/kube/static/css/kube.demo.css
new file mode 100644
index 0000000..f4abaec
--- /dev/null
+++ b/themes/kube/static/css/kube.demo.css
@@ -0,0 +1,404 @@
+body {
+  font-family: Lato, sans-serif; }
+
+h1.title, h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
+  font-family: Lato, sans-serif; }
+
+button, .button {
+  font-family: Lato, sans-serif; }
+
+.media {
+  padding: 24px;
+  border: 1px solid rgba(0, 0, 0, 0.07);
+  border-radius: 3px;
+  margin-bottom: 24px;
+  max-width: 400px;
+  display: flex;
+  align-items: flex-start; }
+  .media img {
+    margin: 4px 0; }
+  .media .media-body {
+    margin-left: 16px; }
+    .media .media-body h5 {
+      margin-bottom: 0; }
+    .media .media-body p {
+      margin-bottom: 0; }
+
+.section-head {
+  font-size: 24px;
+  line-height: 32px;
+  margin-top: 48px;
+  font-weight: 900; }
+  .section-head:after {
+    content: '#';
+    font-size: 15px;
+    font-weight: normal;
+    line-height: 1;
+    color: rgba(0, 0, 0, 0.3);
+    margin-left: 8px;
+    position: relative;
+    top: -1px; }
+  .section-head a {
+    text-decoration: none; }
+
+.section-item-desc {
+  font-family: Consolas, Monaco, "Courier New", monospace;
+  font-size: 12px;
+  color: rgba(0, 0, 0, 0.5); }
+
+.example {
+  border: 1px solid rgba(0, 0, 0, 0.07);
+  padding: 32px;
+  margin-bottom: 16px; }
+  .example pre.code {
+    margin-top: 40px;
+    margin-bottom: 0;
+    background: none;
+    padding: 0; }
+  .example.bg-darkgray {
+    background: #313439; }
+    .example.bg-darkgray pre.code {
+      color: rgba(255, 255, 255, 0.85); }
+
+.demo-muted-link,
+.demo-muted-link:hover {
+  text-decoration: none;
+  color: rgba(0, 0, 0, 0.3); }
+
+.demo-animation-wrap {
+  margin-bottom: 24px; }
+  .demo-animation-wrap:after {
+    content: '';
+    display: table;
+    clear: both; }
+
+.demo-animation-box {
+  float: left;
+  margin-right: 16px;
+  width: 202px;
+  height: 82px;
+  border: 1px dashed rgba(0, 0, 0, 0.15); }
+  .demo-animation-box > div {
+    width: 200px;
+    height: 80px;
+    background: #f8f8f8;
+    text-align: center;
+    line-height: 80px;
+    color: rgba(0, 0, 0, 0.4);
+    font-size: 18px; }
+
+.demo-animation-btn {
+  font-size: 13px;
+  text-transform: uppercase;
+  font-weight: bold;
+  display: inline-block;
+  width: 200px;
+  margin-right: 16px; }
+
+.demo-sizing > div {
+  font-family: Consolas, Monaco, "Courier New", monospace;
+  font-size: 11px;
+  padding-left: 4px;
+  background: #d8e9fa;
+  margin-bottom: 4px; }
+
+.demo-grid .row {
+  margin-bottom: 4px;
+  background: #ebf4fc; }
+
+.demo-grid .row.gutters {
+  background: none; }
+
+.demo-grid .col {
+  font-family: Consolas, Monaco, "Courier New", monospace;
+  font-size: 12px;
+  padding: 8px 12px;
+  background: #d8e9fa;
+  border-left: 1px solid rgba(0, 0, 0, 0.1); }
+
+.demo-grid .demo-col-nested {
+  border-left: none;
+  padding: 0; }
+  .demo-grid .demo-col-nested .row {
+    margin-bottom: 0; }
+
+#demo-container {
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap; }
+
+#demo-sidebar {
+  flex: 0 0 300px;
+  background: #c4def7; }
+
+#demo-content {
+  flex: auto;
+  background: #ebf4fc; }
+
+#demo-sidebar,
+#demo-content {
+  font-family: Consolas, Monaco, "Courier New", monospace;
+  font-size: 12px;
+  padding: 8px 12px;
+  min-height: 80px; }
+
+#demo-media-grid {
+  -webkit-column-count: 2;
+  -moz-column-count: 2;
+  column-count: 2;
+  -webkit-column-gap: 2%;
+  -moz-column-gap: 2%;
+  column-gap: 2%; }
+  #demo-media-grid > div {
+    display: inline-block;
+    width: 100%; }
+  @media (max-width: 768px) {
+    #demo-media-grid {
+      -webkit-column-count: 1;
+      -moz-column-count: 1;
+      column-count: 1; } }
+  #demo-media-grid > div {
+    font-family: Consolas, Monaco, "Courier New", monospace;
+    font-size: 12px;
+    padding: 8px 12px;
+    background: #eae2f2;
+    text-align: center;
+    margin-bottom: 20px;
+    height: 80px; }
+  #demo-media-grid > div:nth-child(2n) {
+    height: 200px; }
+  #demo-media-grid > div:nth-child(5n) {
+    height: 120px; }
+
+.button.red {
+  color: #fff;
+  background-color: #ff3366; }
+  .button.red:hover {
+    color: #fff;
+    background-color: #ff99b3; }
+  .button.red:disabled, .button.red.disabled {
+    color: rgba(255, 255, 255, 0.7);
+    background-color: rgba(255, 51, 102, 0.7); }
+  .button.red.outline {
+    background: none;
+    color: #ff3366;
+    border-color: #ff3366; }
+    .button.red.outline:hover {
+      color: rgba(255, 51, 102, 0.6);
+      border-color: rgba(255, 51, 102, 0.5); }
+    .button.red.outline:disabled, .button.red.outline.disabled {
+      background: none;
+      color: rgba(255, 51, 102, 0.7);
+      border-color: rgba(255, 51, 102, 0.5); }
+
+.label.custom {
+  background: #ea48a7;
+  color: #fff; }
+  .label.custom.tag, .label.custom.outline {
+    background: none;
+    border-color: #ea48a7;
+    color: #ea48a7; }
+
+#breadcrumbs-custom-separator li:after {
+  content: '>'; }
+
+.demo-gradient {
+  height: 40px;
+  margin-bottom: 24px; }
+
+.demo-gradient-vertical {
+  background-color: #5faac8;
+  background-image: linear-gradient(to bottom, #5faac8 0%, #65ccb8 100%); }
+
+.demo-gradient-vertical-to-opacity {
+  background: linear-gradient(to bottom, #5faac8 0%, rgba(95, 170, 200, 0) 100%); }
+
+.demo-gradient-horizontal {
+  background-color: #5faac8;
+  background: linear-gradient(to right, #5faac8 0%, #65ccb8 100%); }
+
+.demo-gradient-horizontal-to-opacity {
+  background: linear-gradient(to right, #5faac8 0%, rgba(95, 170, 200, 0) 100%); }
+
+.demo-gradient-radial {
+  background-image: radial-gradient(circle, #5faac8, #65ccb8); }
+
+.example-inverted-box {
+  display: inline-block;
+  padding: 6px 8px 6px 8px;
+  line-height: 1;
+  vertical-align: middle;
+  background: #d4d4d4; }
+
+#livetabs {
+  margin-bottom: 24px;
+  font-size: 14px; }
+
+#livetabs ul {
+  display: flex; }
+
+#livetabs a {
+  color: #000;
+  text-decoration: none;
+  background: #f4f4f4;
+  border-radius: 4px;
+  padding: 4px 12px;
+  border: 1px solid transparent; }
+  #livetabs a:hover {
+    opacity: .7; }
+
+#livetabs li {
+  margin-right: 4px; }
+
+#livetabs li.active a {
+  background: #fff;
+  border-color: #eee;
+  color: rgba(0, 0, 0, 0.5);
+  cursor: default; }
+  #livetabs li.active a:hover {
+    opacity: 1; }
+
+.togglebox-box {
+  padding: 24px;
+  padding-bottom: 16px;
+  background: #f8f8f8;
+  margin-bottom: 24px; }
+
+#navbar-demo {
+  display: flex;
+  align-items: center;
+  background: #f8f8f8;
+  padding: 24px 20px;
+  margin-bottom: 24px; }
+
+#navbar-brand {
+  margin-right: 24px; }
+
+#navbar-main ul:after {
+  content: '';
+  display: table;
+  clear: both; }
+
+#navbar-main li {
+  float: left;
+  margin-right: 20px; }
+
+#navbar-demo.fixed {
+  background: rgba(255, 255, 255, 0.98);
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); }
+
+#navbar-main li a {
+  color: #000;
+  text-decoration: none;
+  display: block; }
+  #navbar-main li a:hover {
+    -moz-transition: all linear 0.2s;
+    transition: all linear 0.2s;
+    color: rgba(0, 0, 0, 0.6);
+    text-decoration: underline; }
+
+@media (max-width: 768px) {
+  #navbar-demo {
+    flex-direction: column;
+    text-align: center; }
+  #navbar-brand {
+    margin: 0;
+    margin-bottom: 20px; }
+  #navbar-main li {
+    float: none;
+    margin: 0;
+    margin-bottom: 20px; } }
+
+#demo-nav-collapse,
+#demo-nav-collapse ul {
+  margin-left: 0;
+  list-style: none; }
+
+#demo-nav-collapse li {
+  line-height: 32px; }
+
+#demo-nav-collapse ul {
+  margin-left: 20px;
+  font-size: 14px; }
+
+#demo-nav-collapse a {
+  color: #000;
+  text-decoration: none;
+  display: block; }
+  #demo-nav-collapse a:hover {
+    -moz-transition: all linear 0.2s;
+    transition: all linear 0.2s;
+    color: rgba(0, 0, 0, 0.6);
+    text-decoration: underline; }
+
+.my-collapse {
+  margin-bottom: 24px; }
+
+.my-collapse h4 {
+  background: #f4f4f4;
+  padding: 8px 16px;
+  margin-bottom: 1px;
+  font-size: 15px;
+  line-height: 24px; }
+
+.my-collapse h4 a {
+  text-decoration: none;
+  color: #000;
+  display: block; }
+
+.my-collapse div {
+  border: 1px solid rgba(0, 0, 0, 0.1);
+  padding: 24px 32px 1px;
+  margin-bottom: 1px; }
+
+.swatch-box {
+  text-align: center; }
+
+.swatch-item {
+  display: inline-block;
+  margin: 24px; }
+  .swatch-item h5 {
+    font-family: Consolas, Monaco, "Courier New", monospace;
+    font-weight: bold;
+    font-size: 14px;
+    line-height: 24px;
+    margin-bottom: 0; }
+  .swatch-item p {
+    font-family: Consolas, Monaco, "Courier New", monospace;
+    font-size: 12px;
+    line-height: 20px;
+    color: rgba(46, 47, 51, 0.65); }
+
+.swatch {
+  display: inline-block;
+  height: 120px;
+  width: 120px;
+  border-radius: 120px;
+  margin-bottom: 8px; }
+
+.swatch-bg-headings {
+  background: #0d0d0e; }
+
+.swatch-bg-text {
+  background: #313439; }
+
+.swatch-bg-link {
+  background: #007eff; }
+
+.swatch-bg-link-hover {
+  background: #ff3366; }
+
+.swatch-bg-button-primary {
+  background: #007eff; }
+
+.swatch-bg-button-secondary {
+  background: #313439; }
+
+.swatch-bg-inverted {
+  background: #fff; }
+
+.swatch-bg-inverted {
+  position: relative;
+  bottom: -8px;
+  margin-top: -8px;
+  border: 8px solid #f8f8f8; }
diff --git a/themes/kube/static/css/kube.legenda.css b/themes/kube/static/css/kube.legenda.css
new file mode 100644
index 0000000..5e5288d
--- /dev/null
+++ b/themes/kube/static/css/kube.legenda.css
@@ -0,0 +1,406 @@
+.autocomplete {
+  position: absolute;
+  z-index: 1000;
+  left: 0;
+  display: none;
+  margin: 0;
+  list-style: none;
+  background: #fff;
+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
+  max-height: 250px;
+  overflow: auto;
+  font-size: 14px; }
+  .autocomplete a {
+    padding: 4px 10px;
+    color: #000;
+    display: block;
+    text-decoration: none; }
+    .autocomplete a:hover {
+      background: rgba(0, 0, 0, 0.05); }
+    .autocomplete a.active {
+      background: #007eff;
+      color: #fff; }
+
+.cardform label {
+  display: block;
+  text-transform: uppercase;
+  font-size: 12px;
+  color: rgba(0, 0, 0, 0.5); }
+
+.cardform-view select,
+.cardform-view textarea,
+.cardform-view input {
+  border: none !important;
+  background: none;
+  padding: 0;
+  cursor: text;
+  -webkit-appearance: none; }
+  .cardform-view select:focus,
+  .cardform-view textarea:focus,
+  .cardform-view input:focus {
+    box-shadow: none;
+    background: none;
+    outline: none; }
+
+.cardform-controls {
+  margin-bottom: 24px; }
+
+.combobox {
+  position: relative; }
+  .combobox input {
+    padding-right: 32px;
+    width: 100%; }
+  .combobox .caret {
+    position: absolute;
+    z-index: 2;
+    top: 0;
+    right: 0;
+    height: 100%;
+    width: 32px; }
+  .combobox .caret:before {
+    top: 45%;
+    left: 12px; }
+
+.combobox-list {
+  z-index: 1000;
+  position: absolute;
+  left: 0;
+  margin: 0;
+  list-style: none;
+  background: #fff;
+  font-size: 14px;
+  width: 100%;
+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
+  max-height: 250px;
+  font-weight: normal;
+  overflow: auto; }
+  .combobox-list li {
+    padding: 4px 10px;
+    color: #000;
+    cursor: pointer; }
+    .combobox-list li:hover {
+      background: rgba(0, 0, 0, 0.05); }
+    .combobox-list li.active {
+      background: #007eff;
+      color: #fff; }
+
+.datepicker {
+  position: absolute;
+  background: #fff;
+  top: 0;
+  left: 0;
+  line-height: 24px;
+  padding: 20px 24px;
+  border-radius: 3px;
+  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); }
+  .datepicker.datepicker-embed {
+    position: static;
+    box-shadow: none;
+    border: 1px solid rgba(0, 0, 0, 0.1); }
+
+.datepicker-head {
+  position: relative;
+  padding-bottom: 8px; }
+
+.datepicker-controls {
+  position: absolute;
+  top: 0;
+  right: 0; }
+
+.datepicker-control {
+  float: left;
+  width: 24px;
+  height: 24px;
+  background: #eee;
+  border-radius: 3px;
+  text-align: center;
+  cursor: pointer;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -khtml-user-select: none;
+  -ms-user-select: none;
+  user-select: none; }
+
+.datepicker-control-next {
+  margin-left: 4px; }
+
+.datepicker-month-box {
+  font-size: 14px;
+  color: #000;
+  font-weight: bold;
+  padding-left: 4px;
+  height: 24px; }
+
+.datepicker-select-year {
+  display: inline-block;
+  cursor: pointer;
+  background: #eee;
+  padding: 0 8px;
+  position: relative;
+  border-radius: 3px;
+  height: 24px;
+  line-height: 24px; }
+  .datepicker-select-year .datepicker-select-year-caret {
+    position: relative;
+    top: -1px;
+    display: inline-block;
+    width: 0;
+    height: 0;
+    margin-left: .3em;
+    vertical-align: middle;
+    border-top: 4px solid;
+    border-right: 4px solid transparent;
+    border-left: 4px solid transparent; }
+  .datepicker-select-year select {
+    z-index: 2;
+    position: absolute;
+    top: 0;
+    left: 0;
+    opacity: 0;
+    height: 24px;
+    -webkit-appearance: menulist-button;
+    -moz-appearance: menulist-button;
+    -ms-appearance: menulist-button;
+    appearance: menulist-button; }
+
+.datepicker-weekdays {
+  white-space: nowrap; }
+  .datepicker-weekdays span {
+    display: inline-block;
+    text-align: center;
+    width: 28px;
+    height: 28px;
+    margin: 0 2px;
+    font-size: 12px;
+    font-weight: bold;
+    color: rgba(0, 0, 0, 0.5); }
+
+.datepicker-row {
+  white-space: nowrap; }
+
+.datepicker-cell {
+  display: inline-block;
+  text-align: center;
+  width: 28px;
+  height: 28px;
+  margin: 0 2px;
+  font-size: 12px; }
+  .datepicker-cell a {
+    display: block;
+    color: #000;
+    text-decoration: none;
+    border-radius: 40px; }
+    .datepicker-cell a:hover {
+      background: #eee; }
+  .datepicker-cell.datepicker-day-hidden a {
+    visibility: hidden; }
+  .datepicker-cell.datepicker-day-weekend a {
+    color: rgba(0, 0, 0, 0.4);
+    font-weight: bold; }
+  .datepicker-cell.datepicker-day-today a {
+    background: #f23d3d;
+    color: #fff; }
+  .datepicker-cell.datepicker-day-last a {
+    background: none;
+    color: rgba(0, 0, 0, 0.4); }
+    .datepicker-cell.datepicker-day-last a:hover {
+      color: #000; }
+  .datepicker-cell.datepicker-day-selected a {
+    background: #3d79f2;
+    color: #fff; }
+    .datepicker-cell.datepicker-day-selected a:hover {
+      color: #fff; }
+  .datepicker-cell.datepicker-day-disabled a,
+  .datepicker-cell.datepicker-day-disabled a:hover {
+    background: none !important;
+    color: rgba(0, 0, 0, 0.3) !important;
+    cursor: default; }
+
+.editable[placeholder]:empty:before {
+  content: attr(placeholder);
+  color: rgba(0, 0, 0, 0.4);
+  font-weight: normal; }
+
+.editable[placeholder]:empty:focus:before {
+  content: ""; }
+
+.livesearch-box {
+  position: relative;
+  display: block;
+  width: 100%; }
+  .livesearch-box input {
+    min-width: 120px; }
+  .livesearch-box .close {
+    position: absolute;
+    top: 50%;
+    margin-top: -6px;
+    right: 8px; }
+
+.livesearch-dropdown {
+  position: absolute;
+  z-index: 1000;
+  margin: 0;
+  list-style: none;
+  background: #fff;
+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
+  max-height: 250px;
+  overflow: auto; }
+
+.loader {
+  display: inline-block;
+  margin: auto;
+  position: relative;
+  width: 32px;
+  height: 32px; }
+  .loader.small {
+    width: 20px;
+    height: 20px; }
+
+button .loader {
+  margin-bottom: -4px; }
+
+.loader-spinner {
+  width: 100%;
+  height: 100%;
+  border-radius: 50%;
+  margin: auto;
+  position: absolute;
+  left: 0;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  margin: auto;
+  border: 4px solid rgba(0, 0, 0, 0.25);
+  border-bottom-color: #000;
+  -webkit-animation: rotate 2s linear 0s infinite;
+  animation: rotate 2s linear 0s infinite; }
+
+.notification {
+  position: fixed;
+  top: 1rem;
+  right: 1rem;
+  padding: .75rem 1rem;
+  padding-bottom: .5rem;
+  font-family: Consolas, Monaco, "Courier New", monospace;
+  font-size: 14px;
+  line-height: 20px;
+  background: #e0e1e1;
+  color: #313439;
+  font-weight: bold;
+  min-width: 220px;
+  max-width: 280px;
+  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); }
+  @media (max-width: 768px) {
+    .notification {
+      max-width: 100%;
+      left: 1rem; } }
+
+@keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0; }
+  to {
+    background-position: 0 0; } }
+
+.progress {
+  background: #d4d4d4;
+  height: 12px; }
+  .progress.absolute {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%; }
+  .progress > div {
+    background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);
+    background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);
+    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);
+    -webkit-animation: progress-bar-stripes 2s linear infinite;
+    -moz-animation: progress-bar-stripes 2s linear infinite;
+    animation: progress-bar-stripes 2s linear infinite;
+    font-size: 10px;
+    line-height: 10px;
+    color: #fff;
+    padding: 1px 2px;
+    height: 100%;
+    background-color: #007eff;
+    background-size: 40px 40px; }
+    .progress > div:empty {
+      padding: 1px 0; }
+
+.selector {
+  position: relative;
+  display: inline-block; }
+
+.selector select {
+  z-index: 2;
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  height: 100%;
+  width: 100%;
+  opacity: 0;
+  -webkit-appearance: menulist-button;
+  -moz-appearance: menulist-button;
+  -ms-appearance: menulist-button;
+  appearance: menulist-button; }
+
+.selector-trigger-box {
+  cursor: pointer;
+  position: relative;
+  display: block;
+  z-index: 1;
+  width: 100%;
+  padding-right: 8px; }
+
+.upload-box {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  flex-direction: column;
+  position: relative;
+  font-size: 12px;
+  line-height: 20px;
+  width: 100%;
+  min-height: 80px;
+  border: 2px dashed #d4d4d4;
+  background: #e0e1e1;
+  cursor: pointer;
+  overflow: hidden;
+  text-align: center; }
+
+.upload-placeholder {
+  opacity: .6; }
+
+.upload-hover,
+.upload-error {
+  border-color: rgba(0, 0, 0, 0.2); }
+
+.upload-hover {
+  background-color: rgba(0, 126, 255, 0.1); }
+
+.upload-error {
+  background-color: rgba(255, 51, 102, 0.1); }
+
+div.upload-target {
+  display: flex; }
+
+ol.upload-target,
+ul.upload-target {
+  list-style: none;
+  margin-left: 0; }
+  ol.upload-target li,
+  ul.upload-target li {
+    display: flex; }
+  ol.upload-target .close,
+  ul.upload-target .close {
+    top: 2px; }
+
+.upload-target .close {
+  order: 1;
+  background: #d4d4d4;
+  border-radius: 20px;
+  margin-left: 4px;
+  width: 20px;
+  height: 20px;
+  line-height: 20px; }
diff --git a/themes/kube/static/css/kube.min.css b/themes/kube/static/css/kube.min.css
new file mode 100644
index 0000000..a21a80b
--- /dev/null
+++ b/themes/kube/static/css/kube.min.css
@@ -0,0 +1 @@
+.button,body,button,h1,h1.title,h2,h3,h4,h5,h6{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif}hr,iframe{border:none}cite,figcaption,var{opacity:.6}figure pre,kbd{border:1px solid rgba(0,0,0,.1)}.dropdown ul,nav ol,nav ul,ul.unstyled,ul.unstyled ul{list-style:none}audio,img,table,video{max-width:100%}input,select,td.align-middle,textarea,tr.align-middle td{vertical-align:middle}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}*{margin:0;padding:0;outline:0;-webkit-o [...]
diff --git a/themes/kube/static/css/main.css b/themes/kube/static/css/main.css
new file mode 100644
index 0000000..ceb360e
--- /dev/null
+++ b/themes/kube/static/css/main.css
@@ -0,0 +1,1132 @@
+body {
+  font-family: Lato, Arial, sans-serif; }
+
+h1.title, h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
+  font-family: Lato, Arial, sans-serif; }
+
+button, .button {
+  font-family: Lato, Arial, sans-serif; }
+
+h1, h2, h3, h4, h5, h6 {
+  color: #222; }
+
+.form-centered {
+  max-width: 400px;
+  margin: auto;
+  margin-bottom: 140px; }
+
+.form-subscribe {
+  text-align: center;
+  border-radius: 4px;
+  border: 3px dashed rgba(0, 0, 0, 0.1);
+  padding: 64px 40px;
+  margin-bottom: 24px; }
+  .form-subscribe h4 {
+    margin-bottom: 0; }
+  .form-subscribe p {
+    color: rgba(0, 0, 0, 0.5);
+    margin-bottom: 20px; }
+  .form-subscribe form {
+    max-width: 400px;
+    margin: auto; }
+  .form-subscribe #form-subscribe-success {
+    max-width: 500px;
+    margin: auto;
+    font-size: 18px;
+    line-height: 28px; }
+  .form-subscribe #subscribe-email-validation-error {
+    margin-bottom: 8px;
+    font-size: 15px; }
+  .form-subscribe .form-subscribe-twitter div {
+    margin: 24px 0;
+    font-size: 20px;
+    color: rgba(0, 0, 0, 0.3); }
+  .form-subscribe .form-subscribe-twitter a {
+    display: inline-block;
+    padding-left: 21px;
+    background: url("/img/common/icon-twitter.png") no-repeat left 4px; }
+
+#toggle-form-subscribe {
+  text-align: center;
+  margin-bottom: 20px;
+  font-size: 15px;
+  margin-top: -20px; }
+
+#nav-toggle-box {
+  display: flex;
+  align-items: center;
+  padding: 8px 16px; }
+
+#nav-toggle {
+  margin-left: auto;
+  color: #000;
+  text-decoration: none;
+  padding: 2px 8px; }
+
+#nav-toggle-brand {
+  position: relative;
+  top: -1px; }
+
+#nav-toggle-brand a,
+#nav-toggle-brand span {
+  color: #000;
+  font-weight: bold;
+  text-decoration: none; }
+
+#top {
+  display: flex;
+  align-items: center;
+  margin-bottom: 24px;
+  padding: 0 36px;
+  height: 88px;
+  border-bottom: 1px solid rgba(0, 0, 0, 0.05); }
+  #top #top-brand {
+    margin-right: 52px; }
+    #top #top-brand span,
+    #top #top-brand a {
+      background: none;
+      text-indent: -9999px;
+      width: 70px;
+      line-height: 11px;
+      background-repeat: no-repeat; }
+
+  #top ul {
+    display: flex;
+    align-items: center;
+    margin: 0; }
+  #top #top-nav-main {
+    padding-left: 52px;
+    border-left: 1px solid rgba(0, 0, 0, 0.15); }
+    #top #top-nav-main li {
+      font-size: 16px;
+      font-weight: 500;
+      margin-right: 40px; }
+    #top #top-nav-main span,
+    #top #top-nav-main a {
+      display: inline-block; }
+    #top #top-nav-main a {
+      color: #000;
+      text-decoration: none; }
+      #top #top-nav-main a:hover {
+        -moz-transition: all linear 0.2s;
+        transition: all linear 0.2s;
+        color: rgba(0, 0, 0, 0.6);
+        text-decoration: underline; }
+    #top #top-nav-main b a,
+    #top #top-nav-main span {
+      font-weight: 500;
+      color: rgba(0, 0, 0, 0.4); }
+    #top #top-nav-main b a {
+      text-decoration: underline; }
+      #top #top-nav-main b a:hover {
+        color: #000; }
+  #top #top-nav-extra {
+    margin-left: auto;
+    font-size: 14px; }
+    #top #top-nav-extra span,
+    #top #top-nav-extra a {
+      color: rgba(0, 0, 0, 0.7);
+      display: inline-block;
+      border: 1px solid rgba(0, 0, 0, 0.5);
+      text-decoration: none;
+      line-height: 28px;
+      border-radius: 28px;
+      padding: 0 20px; }
+    #top #top-nav-extra a:hover {
+      -moz-transition: all linear 0.2s;
+      transition: all linear 0.2s;
+      color: #000;
+      text-decoration: underline; }
+    #top #top-nav-extra span {
+      color: rgba(0, 0, 0, 0.4);
+      border-color: rgba(0, 0, 0, 0.2); }
+
+#subnav {
+  margin-top: 24px;
+  margin-bottom: 24px;
+  font-size: 15px; }
+  #subnav ul {
+    margin: 0;
+    text-align: center; }
+  #subnav li {
+    display: inline-block; }
+  #subnav li.active a,
+  #subnav span {
+    color: rgba(0, 0, 0, 0.4); }
+  #subnav form,
+  #subnav em,
+  #subnav span,
+  #subnav a {
+    display: inline-block;
+    padding: 2px 16px; }
+  #subnav em {
+    font-style: normal; }
+  #subnav a {
+    color: #3794de;
+    text-decoration: none; }
+    #subnav a:hover {
+      -moz-transition: all linear 0.2s;
+      transition: all linear 0.2s;
+      color: #000;
+      text-decoration: underline; }
+  #subnav li:first-child b a {
+    color: #3794de;
+    font-weight: normal;
+    text-decoration: none; }
+    #subnav li:first-child b a:hover {
+      -moz-transition: all linear 0.2s;
+      transition: all linear 0.2s;
+      color: #000;
+      text-decoration: underline; }
+  #subnav b a {
+    color: #000;
+    text-decoration: underline; }
+    #subnav b a:hover {
+      -moz-transition: all linear 0.2s;
+      transition: all linear 0.2s;
+      color: rgba(0, 0, 0, 0.6);
+      text-decoration: underline; }
+  #subnav .action-button a {
+    background: rgba(28, 134, 242, 0.05);
+    font-size: 15px;
+    margin-left: 16px;
+    padding: 2px 16px;
+    border-radius: 3px;
+    border: 1px solid rgba(28, 134, 242, 0.5); }
+    #subnav .action-button a:hover {
+      background: #1c86f2;
+      border-color: #1c86f2;
+      color: #fff;
+      text-decoration: none; }
+  #subnav form {
+    margin: 0; }
+    #subnav form button {
+      font-size: 15px;
+      line-height: 24px;
+      color: #3794de;
+      height: auto;
+      padding: 0;
+      background: none;
+      box-shadow: none;
+      vertical-align: baseline; }
+      #subnav form button:hover {
+        -moz-transition: all linear 0.2s;
+        transition: all linear 0.2s;
+        color: #000;
+        text-decoration: underline; }
+
+#hero {
+  padding-top: 48px;
+  padding-bottom: 56px;
+  text-align: center; }
+  #hero h1 {
+    max-width: 880px;
+    margin-left: auto;
+    margin-right: auto;
+    margin-bottom: 12px;
+    font-size: 64px;
+    line-height: 72px;
+    font-weight: 900; }
+  #hero p {
+    max-width: 740px;
+    margin: auto;
+    font-size: 21px;
+    line-height: 32px;
+    color: rgba(0, 0, 0, 0.5);
+    margin-top: 28px;
+    padding-top: 28px;
+    margin-bottom: 0;
+    position: relative; }
+    #hero p a {
+      color: #000; }
+    #hero p a:hover {
+      color: rgba(0, 0, 0, 0.6); }
+    #hero p:before {
+      position: absolute;
+      content: '';
+      width: 40px;
+      height: 3px;
+      top: 0;
+      left: 50%;
+      margin-left: -20px;
+      background: #ff3366; }
+
+#intro {
+  margin-top: 56px;
+  margin-bottom: 140px;
+  text-align: center;
+  position: relative; }
+  #intro:before {
+    position: absolute;
+    content: '';
+    width: 40px;
+    height: 3px;
+    top: -68px;
+    left: 50%;
+    margin-left: -20px;
+    background: #ff3366; }
+  #intro h6 {
+    color: rgba(0, 0, 0, 0.5);
+    font-weight: normal; }
+  #intro h2 {
+    font-weight: 900; }
+    #intro h2 a {
+      color: #3794de;
+      text-decoration: none; }
+    #intro h2 a:hover {
+      -moz-transition: all linear 0.2s;
+      transition: all linear 0.2s;
+      color: #000;
+      text-decoration: underline; }
+  #intro p {
+    font-size: 15px;
+    margin: auto;
+    padding: 0 20px; }
+  @media (max-width: 768px) {
+    #intro .col {
+      margin-bottom: 48px; } }
+
+#action-buttons {
+  margin-bottom: 64px;
+  text-align: center; }
+  #action-buttons button,
+  #action-buttons .button {
+    margin: 0 4px; }
+  #action-buttons p {
+    margin: 0;
+    margin-top: 20px;
+    font-size: 13px;
+    line-height: 20px;
+    color: rgba(0, 0, 0, 0.5); }
+
+#contents {
+  counter-reset: count;
+  max-width: 400px;
+  margin: 24px auto 60px auto;
+  padding: 32px;
+  background: #fbfbfb;
+  border: 1px solid rgba(0, 0, 0, 0.08); }
+  #contents.wide {
+    max-width: none;
+    margin-bottom: 24px; }
+  #contents ol {
+    margin: 0; }
+  #contents li {
+    line-height: 40px;
+    border-bottom: 1px solid rgba(0, 0, 0, 0.06);
+    margin-right: 24px;
+    counter-increment: count; }
+  #contents li:last-child {
+    border-bottom: none; }
+  #contents a {
+    display: block;
+    text-decoration: none;
+    position: relative;
+    padding-left: 24px;
+    color: #259d92; }
+    #contents a:before {
+      position: absolute;
+      left: 0;
+      content: counter(count, decimal-leading-zero);
+      font-size: 13px;
+      color: rgba(0, 0, 0, 0.3); }
+    #contents a:hover {
+      -moz-transition: all linear 0.2s;
+      transition: all linear 0.2s;
+      color: #000;
+      text-decoration: underline; }
+
+#main {
+  margin: auto;
+  max-width: 1128px; }
+
+body.docs #main,
+body.grafs-index #main,
+body.page-redactor-index #main {
+  max-width: none; }
+
+body.grafs-index #footer,
+body.page-redactor-index #footer {
+  margin-top: 0; }
+
+body.docs #top {
+  margin-bottom: 0; }
+
+body.page-account #hero {
+  padding: 0; }
+  body.page-account #hero h1 {
+    font-size: 32px;
+    line-height: 32px;
+    margin-bottom: 48px; }
+
+.content {
+  max-width: 840px;
+  margin: auto; }
+
+#redactor-intro-box {
+  max-width: 920px;
+  margin: auto;
+  margin-bottom: 48px; }
+
+#redactor-features {
+  text-align: center;
+  margin: 136px auto;
+  max-width: 1128px; }
+
+#redactor-features h3 {
+  font-size: 21px;
+  margin-top: 0;
+  margin-bottom: 4px; }
+
+#redactor-features p {
+  color: rgba(0, 0, 0, 0.5); }
+
+#redactor-buying-desc {
+  max-width: 720px;
+  margin: auto;
+  margin-top: 40px;
+  font-size: 13px;
+  line-height: 20px; }
+
+#redactor-buying-desc p {
+  color: rgba(0, 0, 0, 0.5); }
+
+#redactor-buy-box {
+  text-align: center;
+  margin: 116px auto;
+  max-width: 1128px; }
+
+#redactor-cloud {
+  text-align: center;
+  margin: 116px auto;
+  max-width: 1128px; }
+  #redactor-cloud h2 {
+    font-size: 48px;
+    line-height: 56px;
+    margin-bottom: 36px;
+    color: rgba(0, 0, 0, 0.15); }
+  #redactor-cloud ul {
+    margin: 0;
+    list-style: none; }
+  #redactor-cloud li {
+    list-style: none;
+    display: inline;
+    line-height: 44px;
+    margin: 0 12px;
+    white-space: nowrap; }
+  #redactor-cloud li:nth-child(3n) {
+    font-size: 1.25em;
+    color: #666; }
+  #redactor-cloud li:nth-child(4n) {
+    font-size: 1.5em;
+    color: #333; }
+  #redactor-cloud li:nth-child(5n) {
+    font-size: 1em;
+    color: #999; }
+  #redactor-cloud li:nth-child(7n) {
+    font-size: 2.25em; }
+  @media (max-width: 768px) {
+    #redactor-cloud {
+      display: none; } }
+
+#redactor-discover {
+  text-align: center;
+  background: #f8f8f8;
+  padding-bottom: 96px; }
+  #redactor-discover #redactor-discover-box {
+    max-width: 1128px;
+    margin: auto; }
+  #redactor-discover h3 {
+    font-size: 24px;
+    line-height: 32px;
+    text-align: center;
+    font-weight: 900;
+    padding: 40px 0;
+    margin-bottom: 60px;
+    color: rgba(0, 0, 0, 0.25);
+    border-bottom: 1px solid rgba(0, 0, 0, 0.05); }
+  #redactor-discover h4 {
+    margin-top: 0; }
+  #redactor-discover h4 a {
+    font-size: 21px;
+    color: #000; }
+    #redactor-discover h4 a:hover {
+      -moz-transition: all linear 0.2s;
+      transition: all linear 0.2s;
+      color: rgba(0, 0, 0, 0.5); }
+  #redactor-discover figure {
+    margin-bottom: 0; }
+  #redactor-discover .col {
+    max-width: 340px; }
+  #redactor-discover p {
+    font-size: 14px;
+    line-height: 20px;
+    color: rgba(0, 0, 0, 0.5); }
+  @media (max-width: 768px) {
+    #redactor-discover .col {
+      max-width: none; }
+    #redactor-discover p {
+      padding: 0 24px; } }
+
+#grafs-matrix-box {
+  padding: 0 20px;
+  max-width: 1128px;
+  margin: auto;
+  margin-bottom: 80px; }
+  #grafs-matrix-box .item {
+    padding-top: 72px;
+    text-align: center; }
+  #grafs-matrix-box .item.first {
+    padding-top: 24px; }
+  #grafs-matrix-box h5 {
+    font-size: 17px;
+    line-height: 24px;
+    margin-bottom: 8px; }
+  #grafs-matrix-box p {
+    max-width: 340px;
+    margin: auto;
+    margin-bottom: 32px;
+    font-size: 13px;
+    line-height: 20px;
+    color: rgba(0, 0, 0, 0.7); }
+  #grafs-matrix-box .row p {
+    max-width: 280px;
+    margin-bottom: 40px; }
+
+#grafs-buy-box {
+  padding: 0 20px;
+  padding-bottom: 104px;
+  max-width: 1128px;
+  margin: auto;
+  margin-top: 128px;
+  text-align: center;
+  border-bottom: 1px solid rgba(0, 0, 0, 0.07); }
+  #grafs-buy-box h2 {
+    font-size: 30px;
+    line-height: 40px;
+    font-weight: 900;
+    margin-bottom: 72px; }
+  #grafs-buy-box .button {
+    height: 60px;
+    padding-top: 20px;
+    padding-left: 36px;
+    padding-right: 36px;
+    font-size: 19px;
+    font-weight: 500; }
+  #grafs-buy-box p.desc {
+    font-size: 13px;
+    line-height: 20px;
+    color: rgba(0, 0, 0, 0.6); }
+
+#grafs-features {
+  text-align: center;
+  max-width: 1128px;
+  margin: 88px auto 104px auto;
+  padding: 0 20px; }
+  #grafs-features figure {
+    margin-bottom: 0; }
+  #grafs-features h3 {
+    margin-top: 0;
+    font-size: 21px;
+    line-height: 32px; }
+  #grafs-features p {
+    font-size: 15px;
+    color: rgba(0, 0, 0, 0.7); }
+
+#grafs-discover {
+  text-align: center;
+  background: #f8f8f8;
+  padding-bottom: 96px; }
+  #grafs-discover #grafs-discover-box {
+    max-width: 800px;
+    margin: auto; }
+  #grafs-discover h3 {
+    font-size: 24px;
+    line-height: 32px;
+    text-align: center;
+    font-weight: 900;
+    padding: 40px 0;
+    margin-bottom: 60px;
+    color: rgba(0, 0, 0, 0.25);
+    border-bottom: 1px solid rgba(0, 0, 0, 0.05); }
+  #grafs-discover h4 {
+    margin-top: 0; }
+  #grafs-discover h4 a {
+    font-size: 21px;
+    color: #000; }
+    #grafs-discover h4 a:hover {
+      -moz-transition: all linear 0.2s;
+      transition: all linear 0.2s;
+      color: rgba(0, 0, 0, 0.5); }
+  #grafs-discover figure {
+    margin-bottom: 0; }
+  #grafs-discover .col {
+    max-width: 280px; }
+  #grafs-discover p {
+    font-size: 14px;
+    line-height: 20px;
+    color: rgba(0, 0, 0, 0.5); }
+  @media (max-width: 768px) {
+    #grafs-discover .col {
+      max-width: none; }
+    #grafs-discover p {
+      padding: 0 24px; } }
+
+.grafs-examples-row {
+  display: flex;
+  justify-content: center;
+  flex-wrap: wrap;
+  margin-bottom: 40px; }
+
+.grafs-examples-col {
+  border-radius: 3px;
+  background: #f8f8f8;
+  padding: 32px;
+  padding-bottom: 56px;
+  width: 300px;
+  margin: 0 16px;
+  margin-bottom: 24px; }
+  .grafs-examples-col figure {
+    margin-bottom: 0; }
+  .grafs-examples-col h4 {
+    font-size: 17px;
+    line-height: 28px;
+    margin-top: 0; }
+  .grafs-examples-col ul {
+    list-style: none;
+    margin: 0; }
+    .grafs-examples-col ul li {
+      font-size: 15px;
+      line-height: 36px; }
+    .grafs-examples-col ul a {
+      display: block;
+      color: #3794de;
+      text-decoration: none; }
+      .grafs-examples-col ul a:hover {
+        -moz-transition: all linear 0.2s;
+        transition: all linear 0.2s;
+        color: #000;
+        text-decoration: underline; }
+
+#grafs-example-header,
+#grafs-example-content {
+  max-width: 900px;
+  margin: auto; }
+
+#grafs-example-header {
+  margin-top: 72px;
+  margin-bottom: 44px;
+  text-align: center; }
+  #grafs-example-header .tag {
+    font-size: 13px;
+    line-height: 24px;
+    text-transform: uppercase;
+    color: rgba(0, 0, 0, 0.5);
+    margin-bottom: 8px; }
+    #grafs-example-header .tag a {
+      color: rgba(0, 0, 0, 0.6); }
+      #grafs-example-header .tag a:hover {
+        -moz-transition: all linear 0.2s;
+        transition: all linear 0.2s;
+        color: #000; }
+  #grafs-example-header h1 {
+    font-size: 48px;
+    line-height: 52px;
+    font-weight: 900; }
+
+#path {
+  font-size: 15px;
+  margin-bottom: 12px; }
+  #path a {
+    color: #3794de; }
+    #path a:hover {
+      color: #000; }
+  #path span {
+    color: rgba(0, 0, 0, 0.2);
+    font-size: 15px;
+    display: inline-block;
+    margin: 0 6px; }
+  #path b {
+    font-weight: 500;
+    color: rgba(0, 0, 0, 0.4); }
+
+#docs-main {
+  display: flex; }
+  #docs-main #side {
+    width: 24%;
+    padding: 28px 36px;
+    border-right: 1px solid rgba(0, 0, 0, 0.1); }
+    #docs-main #side nav li {
+      font-size: 15px;
+      line-height: 40px; }
+    #docs-main #side nav li a {
+      display: block;
+      color: #707070;
+      text-decoration: none; }
+      #docs-main #side nav li a:hover {
+        color: #ff3366;
+        text-decoration: underline; }
+    #docs-main #side nav span,
+    #docs-main #side nav li.active a {
+      color: #ff3366;
+      font-weight: bold; }
+      #docs-main #side nav span:hover,
+      #docs-main #side nav li.active a:hover {
+        text-decoration: none; }
+    #docs-main #side nav h6 {
+      border-top: 1px solid #eee;
+      padding-top: 16px;
+      margin-top: 8px;
+      margin-bottom: 8px; }
+  #docs-main #area {
+    width: 76%;
+    padding: 32px 64px 48px 64px; }
+    #docs-main #area h1 {
+      font-size: 36px;
+      line-height: 40px;
+      font-weight: 900;
+      margin-bottom: 28px; }
+    #docs-main #area h3 {
+      font-size: 18px;
+      line-height: 28px; }
+    #docs-main #area .lead {
+      font-size: 18px;
+      line-height: 28px;
+      margin-bottom: 24px; }
+    #docs-main #area .doc-head {
+      position: relative;
+      margin-top: 24px;
+      padding-bottom: 8px;
+      border-bottom: 1px solid #eee; }
+      #docs-main #area .doc-head span {
+        position: absolute;
+        right: 0;
+        top: 0;
+        font-weight: normal;
+        font-size: 13px;
+        color: rgba(0, 0, 0, 0.4); }
+      #docs-main #area .doc-head a {
+        text-decoration: none;
+        color: #000;
+        display: block;
+        font-size: 20px; }
+
+.chart-example {
+  position: relative;
+  margin-top: 44px;
+  margin-bottom: 40px; }
+  .chart-example.inverted {
+    padding: 32px;
+    background: #191d21; }
+    .chart-example.inverted .chart-selector a {
+      color: rgba(255, 255, 255, 0.85);
+      border-color: rgba(255, 255, 255, 0.3); }
+    .chart-example.inverted pre {
+      color: rgba(255, 255, 255, 0.85);
+      padding: 0;
+      background: #191d21; }
+
+.chart-selector {
+  text-align: center;
+  font-size: 14px;
+  margin-bottom: 24px; }
+  .chart-selector a {
+    display: inline-block;
+    background: rgba(46, 196, 182, 0.05);
+    border: 1px solid rgba(46, 196, 182, 0.25);
+    border-radius: 40px;
+    line-height: 28px;
+    padding: 0 12px;
+    color: #000;
+    text-decoration: none;
+    margin: 0 4px; }
+  .chart-selector a:hover,
+  .chart-selector a.active {
+    text-decoration: none;
+    background: #2ec4b6;
+    color: #fff;
+    border: 1px solid transparent; }
+  .chart-selector a:hover {
+    -moz-transition: all linear 0.2s;
+    transition: all linear 0.2s; }
+
+.chart-section-head {
+  text-align: center;
+  font-weight: 900;
+  margin-top: 64px;
+  margin-bottom: -16px;
+  font-size: 16px;
+  line-height: 28px; }
+
+#posts {
+  list-style: none;
+  margin: auto;
+  margin-top: 48px;
+  margin-bottom: 128px;
+  max-width: 680px;
+  text-align: center; }
+
+#posts li {
+  margin-bottom: 40px; }
+
+#posts h2 {
+  font-size: 22px;
+  font-weight: normal;
+  margin: 0;
+  line-height: 28px; }
+
+#posts h2 a {
+  color: #1eabf2;
+  text-decoration: none; }
+
+#posts h2 a:hover {
+  -moz-transition: all linear 0.2s;
+  transition: all linear 0.2s;
+  color: #000;
+  text-decoration: underline; }
+
+#posts time {
+  font-size: 12px;
+  color: rgba(0, 0, 0, 0.5); }
+
+#post-box {
+  max-width: 740px;
+  margin: auto; }
+
+#post {
+  font-size: 18px;
+  line-height: 32px;
+  margin-bottom: 40px; }
+
+#changelog {
+  max-width: 820px;
+  margin: auto;
+  margin-bottom: 104px; }
+  #changelog h3 {
+    margin-bottom: 4px; }
+  #changelog time {
+    font-size: 11px;
+    font-weight: bold;
+    display: block;
+    text-transform: uppercase;
+    margin-bottom: 40px;
+    color: rgba(0, 0, 0, 0.45); }
+  #changelog .item {
+    margin-bottom: 20px;
+    background: #f8f8f8;
+    padding: 40px; }
+  #changelog ul {
+    margin: 0;
+    list-style: none; }
+  #changelog li {
+    margin-bottom: 16px;
+    padding-bottom: 16px;
+    border-bottom: 1px solid #eee; }
+  #changelog li:last-child {
+    border-bottom: none; }
+  #changelog li .label {
+    margin-right: 4px; }
+
+#kube-features {
+  margin-top: 104px;
+  text-align: center; }
+  #kube-features h3 {
+    margin-top: 0; }
+  #kube-features .row:first-child {
+    padding-bottom: 32px;
+    margin-bottom: 64px;
+    border-bottom: 1px dashed rgba(0, 0, 0, 0.15); }
+  #kube-features p {
+    font-size: 15px;
+    color: rgba(0, 0, 0, 0.75); }
+  #kube-features .item {
+    padding: 0 24px; }
+
+#kube-faq {
+  max-width: 740px;
+  margin: auto;
+  font-size: 17px;
+  line-height: 28px;
+  margin-bottom: 104px;
+  border-top: 1px solid rgba(0, 0, 0, 0.07); }
+  #kube-faq h2 {
+    font-size: 24px;
+    font-weight: 900;
+    text-align: center;
+    line-height: 32px;
+    margin-top: 80px;
+    margin-bottom: 40px; }
+
+#components {
+  text-align: center; }
+  #components.lists {
+    text-align: left; }
+    #components.lists .item {
+      padding: 24px; }
+      #components.lists .item:hover {
+        background: #f8f8f8; }
+  #components .start {
+    font-size: 24px;
+    line-height: 32px; }
+  #components #search-box {
+    padding: 24px;
+    background: #ebf0f6;
+    margin-bottom: 24px; }
+  #components .item {
+    background: #f8f8f8;
+    padding: 68px 24px 60px 24px;
+    margin-bottom: 20px; }
+    #components .item:hover {
+      -moz-transition: all linear 0.2s;
+      transition: all linear 0.2s;
+      background: #fcfcfc; }
+  #components figure {
+    margin-bottom: 0; }
+  #components h4 {
+    font-size: 19px;
+    margin-top: 0;
+    margin-bottom: 8px; }
+    #components h4 a {
+      color: #3794de;
+      text-decoration: none; }
+    #components h4 a:hover {
+      -moz-transition: all linear 0.2s;
+      transition: all linear 0.2s;
+      color: #000;
+      text-decoration: underline; }
+  #components ul {
+    margin-left: 0;
+    margin-top: 24px;
+    list-style: none; }
+  #components li {
+    line-height: 32px;
+    margin-bottom: 4px; }
+    #components li a {
+      display: inline-block;
+      color: #3794de;
+      line-height: 24px; }
+      #components li a:hover {
+        -moz-transition: all linear 0.2s;
+        transition: all linear 0.2s;
+        color: #000;
+        text-decoration: underline; }
+  #components p {
+    max-width: 220px;
+    margin: auto;
+    font-size: 13px;
+    line-height: 20px;
+    color: rgba(0, 0, 0, 0.5); }
+  #components #docs-search-results p {
+    max-width: none;
+    margin-bottom: 16px; }
+
+.demo-head {
+  font-size: 24px;
+  line-height: 32px;
+  font-weight: 900;
+  margin-top: 80px;
+  margin-bottom: 20px;
+  text-align: center; }
+
+#price-box {
+  margin-top: 40px; }
+  #price-box .item {
+    text-align: center;
+    padding: 36px;
+    margin-bottom: 24px; }
+  #price-box .item-selected {
+    position: relative;
+    top: -28px;
+    background: #fafaf4; }
+  #price-box .price-label {
+    position: absolute;
+    top: -12px;
+    left: 50%;
+    margin-left: -60px;
+    background: #ff3366;
+    color: #fff;
+    font-size: 11px;
+    text-transform: uppercase;
+    padding: 0 8px; }
+  #price-box .price-name {
+    font-size: 12px;
+    text-transform: uppercase;
+    line-height: 24px;
+    font-weight: 900; }
+  #price-box .price-amount {
+    margin: 20px 0 32px 0;
+    font-size: 34px; }
+  #price-box ul {
+    margin-left: 0;
+    list-style: none;
+    line-height: 36px; }
+  #price-box li {
+    font-size: 14px;
+    border-bottom: 1px solid rgba(0, 0, 0, 0.07); }
+  #price-box li:last-child {
+    border-bottom-color: transparent; }
+  #price-box footer {
+    margin-top: 32px; }
+  #price-box button.stripe-button-el {
+    height: auto;
+    min-height: 0; }
+
+#price-secure-box {
+  text-align: center;
+  color: rgba(0, 0, 0, 0.6); }
+  #price-secure-box .extra {
+    margin-top: 36px;
+    font-size: 14px;
+    line-height: 22px; }
+
+.not-found {
+  padding: 40px 0;
+  text-align: center;
+  font-style: italic;
+  color: rgba(0, 0, 0, 0.5); }
+
+.callout {
+  background: #f8f8f8;
+  padding: 40px 48px; }
+
+.callout-form {
+  margin-bottom: 40px; }
+
+.color-black {
+  color: #000; }
+
+tr.border-none td {
+  border: none; }
+
+#purchases-table td {
+  padding-top: 24px;
+  padding-bottom: 24px; }
+
+#purchases-table tr:first-child td {
+  padding-top: 16px; }
+
+#purchases-table tr:last-child td {
+  border-bottom: none; }
+
+.purchase-table-license {
+  margin-top: -16px;
+  margin-bottom: 8px; }
+
+.purchase-table-version {
+  display: block;
+  margin-top: 8px;
+  margin-bottom: 8px;
+  line-height: 16px;
+  font-size: 11px; }
+
+#invoice-form,
+#invoice-form-old {
+  margin-bottom: 24px;
+  padding: 40px;
+  border: 2px solid #eee; }
+
+#footer {
+  display: flex;
+  border-top: 1px solid #eee;
+  margin: 104px 0;
+  padding: 0 28px;
+  padding-top: 24px;
+  font-size: 13px;
+  color: rgba(0, 0, 0, 0.5); }
+  #footer p {
+    order: 1; }
+  #footer nav {
+    order: 2;
+    margin-left: auto; }
+  #footer nav ul {
+    display: flex; }
+  #footer nav ul li {
+    margin-left: 20px; }
+  #footer nav ul li span {
+    color: rgba(0, 0, 0, 0.3); }
+  #footer nav ul li a {
+    color: rgba(0, 0, 0, 0.65);
+    text-decoration: none; }
+  #footer nav ul li a:hover {
+    color: #000;
+    text-decoration: underline; }
+
+@media (max-width: 768px) {
+  #top {
+    display: block;
+    height: auto;
+    padding-bottom: 24px; }
+    #top ul {
+      display: block; }
+    #top #top-brand {
+      display: none; }
+    #top #top-nav-main {
+      padding: 0;
+      border: none; }
+    #top #top-nav-extra {
+      margin: 0; }
+    #top #top-nav-main li,
+    #top #top-nav-extra li {
+      text-align: center;
+      width: auto;
+      margin: 16px 0;
+      padding: 0; }
+  #subnav li,
+  #subnav ul li {
+    text-align: center;
+    border: none;
+    display: block;
+    margin: 16px 0; }
+  #hero {
+    margin-top: 32px;
+    padding-top: 0;
+    padding-left: 20px;
+    padding-right: 20px; }
+    #hero h1 {
+      font-size: 40px;
+      line-height: 48px; }
+    #hero p {
+      font-size: 16px;
+      line-height: 24px; }
+  #posts,
+  #post-box,
+  #main {
+    padding-left: 20px;
+    padding-right: 20px; }
+  #action-buttons .button,
+  #action-buttons button {
+    margin: 8px 0; }
+  #footer {
+    display: block;
+    text-align: center; }
+    #footer nav ul {
+      display: block;
+      margin-bottom: 40px; }
+    #footer nav ul li {
+      margin: 8px 0; }
+  #grafs-features ul {
+    margin-bottom: 24px; }
+  #grafs-features ul.br {
+    border: none; }
+  #grafs-features ul.br li,
+  #grafs-features ul li {
+    text-align: center; }
+  .grafs-call-to-action p {
+    font-size: 20px;
+    line-height: 32px; }
+  #docs-main {
+    display: block; }
+    #docs-main #side,
+    #docs-main #area {
+      width: 100%;
+      padding: 20px 0;
+      border: none; }
+  .grafs-examples-row {
+    flex-direction: column; }
+  .grafs-examples-col {
+    width: 100%;
+    margin: 0;
+    margin-bottom: 20px; }
+  #price-box .item-selected {
+    margin-top: 24px;
+    top: 0; } }
diff --git a/themes/kube/static/font/Lato-Black.woff b/themes/kube/static/font/Lato-Black.woff
new file mode 100644
index 0000000..a0ab25e
Binary files /dev/null and b/themes/kube/static/font/Lato-Black.woff differ
diff --git a/themes/kube/static/font/Lato-Bold.woff b/themes/kube/static/font/Lato-Bold.woff
new file mode 100644
index 0000000..f6d8ebf
Binary files /dev/null and b/themes/kube/static/font/Lato-Bold.woff differ
diff --git a/themes/kube/static/font/Lato-BoldItalic.woff b/themes/kube/static/font/Lato-BoldItalic.woff
new file mode 100644
index 0000000..75077eb
Binary files /dev/null and b/themes/kube/static/font/Lato-BoldItalic.woff differ
diff --git a/themes/kube/static/font/Lato-Italic.woff b/themes/kube/static/font/Lato-Italic.woff
new file mode 100644
index 0000000..33d6186
Binary files /dev/null and b/themes/kube/static/font/Lato-Italic.woff differ
diff --git a/themes/kube/static/font/Lato-Regular.woff b/themes/kube/static/font/Lato-Regular.woff
new file mode 100644
index 0000000..52074ee
Binary files /dev/null and b/themes/kube/static/font/Lato-Regular.woff differ
diff --git a/themes/kube/static/font/Lato-Semibold.woff b/themes/kube/static/font/Lato-Semibold.woff
new file mode 100644
index 0000000..f8db4f9
Binary files /dev/null and b/themes/kube/static/font/Lato-Semibold.woff differ
diff --git a/themes/kube/static/font/Lato-SemiboldItalic.woff b/themes/kube/static/font/Lato-SemiboldItalic.woff
new file mode 100644
index 0000000..d1df767
Binary files /dev/null and b/themes/kube/static/font/Lato-SemiboldItalic.woff differ
diff --git a/themes/kube/static/img/common/icon-twitter.png b/themes/kube/static/img/common/icon-twitter.png
new file mode 100644
index 0000000..1f907dc
Binary files /dev/null and b/themes/kube/static/img/common/icon-twitter.png differ
diff --git a/themes/kube/static/img/common/logo.png b/themes/kube/static/img/common/logo.png
new file mode 100644
index 0000000..519c208
Binary files /dev/null and b/themes/kube/static/img/common/logo.png differ
diff --git a/themes/kube/static/img/common/logx2.png b/themes/kube/static/img/common/logx2.png
new file mode 100644
index 0000000..174cd3f
Binary files /dev/null and b/themes/kube/static/img/common/logx2.png differ
diff --git a/themes/kube/static/img/favicons/logo-384x384.png b/themes/kube/static/img/favicons/logo-384x384.png
new file mode 100644
index 0000000..08cf70e
Binary files /dev/null and b/themes/kube/static/img/favicons/logo-384x384.png differ
diff --git a/themes/kube/static/img/icon-minimalism.png b/themes/kube/static/img/icon-minimalism.png
new file mode 100644
index 0000000..f0961ab
Binary files /dev/null and b/themes/kube/static/img/icon-minimalism.png differ
diff --git a/themes/kube/static/img/icon-typo.png b/themes/kube/static/img/icon-typo.png
new file mode 100644
index 0000000..083b5b4
Binary files /dev/null and b/themes/kube/static/img/icon-typo.png differ
diff --git a/themes/kube/static/img/kube/brand.png b/themes/kube/static/img/kube/brand.png
new file mode 100644
index 0000000..15ab15e
Binary files /dev/null and b/themes/kube/static/img/kube/brand.png differ
diff --git a/themes/kube/static/img/kube/icon-baseline.png b/themes/kube/static/img/kube/icon-baseline.png
new file mode 100644
index 0000000..e7de5d9
Binary files /dev/null and b/themes/kube/static/img/kube/icon-baseline.png differ
diff --git a/themes/kube/static/img/kube/icon-minimalism.png b/themes/kube/static/img/kube/icon-minimalism.png
new file mode 100644
index 0000000..f0961ab
Binary files /dev/null and b/themes/kube/static/img/kube/icon-minimalism.png differ
diff --git a/themes/kube/static/img/kube/icon-typo.png b/themes/kube/static/img/kube/icon-typo.png
new file mode 100644
index 0000000..083b5b4
Binary files /dev/null and b/themes/kube/static/img/kube/icon-typo.png differ
diff --git a/themes/kube/static/img/kube/typography/01.png b/themes/kube/static/img/kube/typography/01.png
new file mode 100644
index 0000000..3d06a7b
Binary files /dev/null and b/themes/kube/static/img/kube/typography/01.png differ
diff --git a/themes/kube/static/img/kube/typography/02.png b/themes/kube/static/img/kube/typography/02.png
new file mode 100644
index 0000000..8077f2b
Binary files /dev/null and b/themes/kube/static/img/kube/typography/02.png differ
diff --git a/themes/kube/static/js/jquery-2.1.4.min.js b/themes/kube/static/js/jquery-2.1.4.min.js
new file mode 100644
index 0000000..6f43554
--- /dev/null
+++ b/themes/kube/static/js/jquery-2.1.4.min.js
@@ -0,0 +1,5 @@
+/*! jQuery v2.1.4 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r= [...]
+return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(functio [...]
+void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c [...]
+//# sourceMappingURL=jquery.min.map
\ No newline at end of file
diff --git a/themes/kube/static/js/kube.js b/themes/kube/static/js/kube.js
new file mode 100644
index 0000000..534a5ad
--- /dev/null
+++ b/themes/kube/static/js/kube.js
@@ -0,0 +1,2201 @@
+/*
+	Kube. CSS & JS Framework
+	Version 6.5.2
+	Updated: February 2, 2017
+
+	http://imperavi.com/kube/
+
+	Copyright (c) 2009-2017, Imperavi LLC.
+	License: MIT
+*/
+if (typeof jQuery === 'undefined') {throw new Error('Kube\'s requires jQuery')};
+;(function($) { var version = $.fn.jquery.split('.'); if (version[0] == 1 && version[1] < 8) {throw new Error('Kube\'s requires at least jQuery v1.8'); }})(jQuery);
+
+;(function()
+{
+    // Inherits
+    Function.prototype.inherits = function(parent)
+    {
+        var F = function () {};
+        F.prototype = parent.prototype;
+        var f = new F();
+
+        for (var prop in this.prototype) f[prop] = this.prototype[prop];
+        this.prototype = f;
+        this.prototype.super = parent.prototype;
+    };
+
+    // Core Class
+    var Kube = function(element, options)
+    {
+        options = (typeof options === 'object') ? options : {};
+
+        this.$element = $(element);
+        this.opts     = $.extend(true, this.defaults, $.fn[this.namespace].options, this.$element.data(), options);
+        this.$target  = (typeof this.opts.target === 'string') ? $(this.opts.target) : null;
+    };
+
+    // Core Functionality
+    Kube.prototype = {
+        getInstance: function()
+        {
+            return this.$element.data('fn.' + this.namespace);
+        },
+        hasTarget: function()
+        {
+           return !(this.$target === null);
+        },
+        callback: function(type)
+        {
+    		var args = [].slice.call(arguments).splice(1);
+
+            // on element callback
+            if (this.$element)
+            {
+                args = this._fireCallback($._data(this.$element[0], 'events'), type, this.namespace, args);
+            }
+
+            // on target callback
+            if (this.$target)
+            {
+                args = this._fireCallback($._data(this.$target[0], 'events'), type, this.namespace, args);
+    		}
+
+    		// opts callback
+    		if (this.opts && this.opts.callbacks && $.isFunction(this.opts.callbacks[type]))
+    		{
+                return this.opts.callbacks[type].apply(this, args);
+    		}
+
+    		return args;
+        },
+        _fireCallback: function(events, type, eventNamespace, args)
+        {
+            if (events && typeof events[type] !== 'undefined')
+            {
+    			var len = events[type].length;
+    			for (var i = 0; i < len; i++)
+    			{
+    				var namespace = events[type][i].namespace;
+    				if (namespace === eventNamespace)
+    				{
+    					var value = events[type][i].handler.apply(this, args);
+    				}
+    			}
+    		}
+
+            return (typeof value === 'undefined') ? args : value;
+        }
+    };
+
+    // Scope
+    window.Kube = Kube;
+
+})();
+/**
+ * @library Kube Plugin
+ * @author Imperavi LLC
+ * @license MIT
+ */
+(function(Kube)
+{
+    Kube.Plugin = {
+        create: function(classname, pluginname)
+        {
+            pluginname = (typeof pluginname === 'undefined') ? classname.toLowerCase() : pluginname;
+
+            $.fn[pluginname] = function(method, options)
+            {
+                var args = Array.prototype.slice.call(arguments, 1);
+                var name = 'fn.' + pluginname;
+                var val = [];
+
+                this.each(function()
+                {
+                    var $this = $(this), data = $this.data(name);
+                    options = (typeof method === 'object') ? method : options;
+
+                    if (!data)
+                    {
+                        // Initialization
+                        $this.data(name, {});
+                        $this.data(name, (data = new Kube[classname](this, options)));
+                    }
+
+                    // Call methods
+                    if (typeof method === 'string')
+                    {
+                        if ($.isFunction(data[method]))
+                        {
+                            var methodVal = data[method].apply(data, args);
+                            if (methodVal !== undefined)
+                            {
+                                val.push(methodVal);
+                            }
+                        }
+                        else
+                        {
+                            $.error('No such method "' + method + '" for ' + classname);
+                        }
+                    }
+
+                });
+
+                return (val.length === 0 || val.length === 1) ? ((val.length === 0) ? this : val[0]) : val;
+            };
+
+            $.fn[pluginname].options = {};
+
+            return this;
+        },
+        autoload: function(pluginname)
+        {
+            var arr = pluginname.split(',');
+            var len = arr.length;
+
+            for (var i = 0; i < len; i++)
+            {
+                var name = arr[i].toLowerCase().split(',').map(function(s) { return s.trim() }).join(',');
+                this.autoloadQueue.push(name);
+            }
+
+            return this;
+        },
+        autoloadQueue: [],
+        startAutoload: function()
+        {
+            if (!window.MutationObserver || this.autoloadQueue.length === 0)
+            {
+                return;
+            }
+
+            var self = this;
+    		var observer = new MutationObserver(function(mutations)
+    		{
+    			mutations.forEach(function(mutation)
+    			{
+    				var newNodes = mutation.addedNodes;
+    			    if (newNodes.length === 0 || (newNodes.length === 1 && newNodes.nodeType === 3))
+    			    {
+    				    return;
+    				}
+
+                    self.startAutoloadOnce();
+    			});
+    		});
+
+    		// pass in the target node, as well as the observer options
+    		observer.observe(document, {
+    			 subtree: true,
+    			 childList: true
+    		});
+        },
+        startAutoloadOnce: function()
+        {
+            var self = this;
+            var $nodes = $('[data-component]').not('[data-loaded]');
+    		$nodes.each(function()
+    		{
+        		var $el = $(this);
+        		var pluginname = $el.data('component');
+
+                if (self.autoloadQueue.indexOf(pluginname) !== -1)
+                {
+            		$el.attr('data-loaded', true);
+                    $el[pluginname]();
+                }
+            });
+
+        },
+        watch: function()
+        {
+            Kube.Plugin.startAutoloadOnce();
+            Kube.Plugin.startAutoload();
+        }
+    };
+
+    $(window).on('load', function()
+    {
+        Kube.Plugin.watch();
+    });
+
+}(Kube));
+/**
+ * @library Kube Animation
+ * @author Imperavi LLC
+ * @license MIT
+ */
+(function(Kube)
+{
+    Kube.Animation = function(element, effect, callback)
+    {
+        this.namespace = 'animation';
+        this.defaults = {};
+
+        // Parent Constructor
+        Kube.apply(this, arguments);
+
+        // Initialization
+        this.effect = effect;
+        this.completeCallback = (typeof callback === 'undefined') ? false : callback;
+        this.prefixes = ['', '-moz-', '-o-animation-', '-webkit-'];
+        this.queue = [];
+
+        this.start();
+    };
+
+    Kube.Animation.prototype = {
+        start: function()
+        {
+	    	if (this.isSlideEffect()) this.setElementHeight();
+
+			this.addToQueue();
+			this.clean();
+			this.animate();
+        },
+        addToQueue: function()
+        {
+            this.queue.push(this.effect);
+        },
+        setElementHeight: function()
+        {
+            this.$element.height(this.$element.height());
+        },
+        removeElementHeight: function()
+        {
+            this.$element.css('height', '');
+        },
+        isSlideEffect: function()
+        {
+            return (this.effect === 'slideDown' || this.effect === 'slideUp');
+        },
+        isHideableEffect: function()
+        {
+            var effects = ['fadeOut', 'slideUp', 'flipOut', 'zoomOut', 'slideOutUp', 'slideOutRight', 'slideOutLeft'];
+
+			return ($.inArray(this.effect, effects) !== -1);
+        },
+        isToggleEffect: function()
+        {
+            return (this.effect === 'show' || this.effect === 'hide');
+        },
+        storeHideClasses: function()
+        {
+            if (this.$element.hasClass('hide-sm'))      this.$element.data('hide-sm-class', true);
+            else if (this.$element.hasClass('hide-md')) this.$element.data('hide-md-class', true);
+        },
+        revertHideClasses: function()
+        {
+            if (this.$element.data('hide-sm-class'))      this.$element.addClass('hide-sm').removeData('hide-sm-class');
+            else if (this.$element.data('hide-md-class')) this.$element.addClass('hide-md').removeData('hide-md-class');
+            else                                          this.$element.addClass('hide');
+        },
+        removeHideClass: function()
+        {
+            if (this.$element.data('hide-sm-class'))      this.$element.removeClass('hide-sm');
+            else if (this.$element.data('hide-md-class')) this.$element.removeClass('hide-md');
+            else                                          this.$element.removeClass('hide');
+        },
+        animate: function()
+        {
+            this.storeHideClasses();
+            if (this.isToggleEffect())
+			{
+				return this.makeSimpleEffects();
+            }
+
+            this.$element.addClass('kubeanimated');
+			this.$element.addClass(this.queue[0]);
+            this.removeHideClass();
+
+			var _callback = (this.queue.length > 1) ? null : this.completeCallback;
+			this.complete('AnimationEnd', $.proxy(this.makeComplete, this), _callback);
+        },
+        makeSimpleEffects: function()
+        {
+           	if      (this.effect === 'show') this.removeHideClass();
+            else if (this.effect === 'hide') this.revertHideClasses();
+
+            if (typeof this.completeCallback === 'function') this.completeCallback(this);
+        },
+		makeComplete: function()
+		{
+            if (this.$element.hasClass(this.queue[0]))
+            {
+				this.clean();
+				this.queue.shift();
+
+				if (this.queue.length) this.animate();
+			}
+		},
+        complete: function(type, make, callback)
+		{
+    		var event = type.toLowerCase() + ' webkit' + type + ' o' + type + ' MS' + type;
+
+			this.$element.one(event, $.proxy(function()
+			{
+				if (typeof make === 'function')     make();
+				if (this.isHideableEffect())        this.revertHideClasses();
+				if (this.isSlideEffect())           this.removeElementHeight();
+				if (typeof callback === 'function') callback(this);
+
+				this.$element.off(event);
+
+			}, this));
+		},
+		clean: function()
+		{
+			this.$element.removeClass('kubeanimated').removeClass(this.queue[0]);
+		}
+    };
+
+    // Inheritance
+    Kube.Animation.inherits(Kube);
+
+}(Kube));
+
+// Plugin
+(function($)
+{
+    $.fn.animation = function(effect, callback)
+    {
+        var name = 'fn.animation';
+
+        return this.each(function()
+        {
+            var $this = $(this), data = $this.data(name);
+
+            $this.data(name, {});
+            $this.data(name, (data = new Kube.Animation(this, effect, callback)));
+        });
+    };
+
+    $.fn.animation.options = {};
+
+})(jQuery);
+/**
+ * @library Kube Detect
+ * @author Imperavi LLC
+ * @license MIT
+ */
+(function(Kube)
+{
+    Kube.Detect = function() {};
+
+    Kube.Detect.prototype = {
+    	isMobile: function()
+    	{
+    		return /(iPhone|iPod|BlackBerry|Android)/.test(navigator.userAgent);
+    	},
+    	isDesktop: function()
+    	{
+    		return !/(iPhone|iPod|iPad|BlackBerry|Android)/.test(navigator.userAgent);
+    	},
+    	isMobileScreen: function()
+    	{
+    		return ($(window).width() <= 768);
+    	},
+    	isTabletScreen: function()
+    	{
+    		return ($(window).width() > 768 && $(window).width() <= 1024);
+    	},
+    	isDesktopScreen: function()
+    	{
+    		return ($(window).width() > 1024);
+    	}
+    };
+
+
+}(Kube));
+/**
+ * @library Kube FormData
+ * @author Imperavi LLC
+ * @license MIT
+ */
+(function(Kube)
+{
+    Kube.FormData = function(app)
+    {
+        this.opts = app.opts;
+    };
+
+    Kube.FormData.prototype = {
+        set: function(data)
+        {
+            this.data = data;
+        },
+        get: function(formdata)
+    	{
+        	this.formdata = formdata;
+
+            if (this.opts.appendForms) this.appendForms();
+            if (this.opts.appendFields) this.appendFields();
+
+            return this.data;
+    	},
+    	appendFields: function()
+    	{
+    		var $fields = $(this.opts.appendFields);
+    		if ($fields.length === 0)
+    		{
+        		return;
+            }
+
+    		var self = this;
+            var str = '';
+
+            if (this.formdata)
+            {
+                $fields.each(function()
+    			{
+    				self.data.append($(this).attr('name'), $(this).val());
+    			});
+            }
+            else
+            {
+    			$fields.each(function()
+    			{
+    				str += '&' + $(this).attr('name') + '=' + $(this).val();
+    			});
+
+    			this.data = (this.data === '') ? str.replace(/^&/, '') : this.data + str;
+            }
+    	},
+    	appendForms: function()
+    	{
+    		var $forms = $(this.opts.appendForms);
+    		if ($forms.length === 0)
+    		{
+    			return;
+    		}
+
+            if (this.formdata)
+            {
+                var self = this;
+                var formsData = $(this.opts.appendForms).serializeArray();
+                $.each(formsData, function(i,s)
+                {
+                	self.data.append(s.name, s.value);
+                });
+            }
+            else
+            {
+                var str = $forms.serialize();
+
+                this.data = (this.data === '') ? str : this.data + '&' + str;
+            }
+    	}
+    };
+
+
+}(Kube));
+/**
+ * @library Kube Response
+ * @author Imperavi LLC
+ * @license MIT
+ */
+(function(Kube)
+{
+    Kube.Response = function(app) {};
+
+    Kube.Response.prototype = {
+        parse: function(str)
+    	{
+        	if (str === '') return false;
+
+    		var obj = {};
+
+    		try {
+    			obj = JSON.parse(str);
+    		} catch (e) {
+    			return false;
+    		}
+
+    		if (obj[0] !== undefined)
+    		{
+    			for (var item in obj)
+    			{
+    				this.parseItem(obj[item]);
+    			}
+    		}
+    		else
+    		{
+    			this.parseItem(obj);
+    		}
+
+    		return obj;
+    	},
+    	parseItem: function(item)
+    	{
+    		if (item.type === 'value')
+    		{
+    			$.each(item.data, $.proxy(function(key, val)
+    			{
+        			val = (val === null || val === false) ? 0 : val;
+        			val = (val === true) ? 1 : val;
+
+    				$(key).val(val);
+
+    			}, this));
+    		}
+    		else if (item.type === 'html')
+    		{
+    			$.each(item.data, $.proxy(function(key, val)
+    			{
+        			val = (val === null || val === false) ? '' : val;
+
+    				$(key).html(this.stripslashes(val));
+
+    			}, this));
+    		}
+    		else if (item.type === 'addClass')
+    		{
+    			$.each(item.data, function(key, val)
+    			{
+    				$(key).addClass(val);
+    			});
+            }
+    		else if (item.type === 'removeClass')
+    		{
+    			$.each(item.data, function(key, val)
+    			{
+    				$(key).removeClass(val);
+    			});
+            }
+    		else if (item.type === 'command')
+    		{
+    			$.each(item.data, function(key, val)
+    			{
+    				$(val)[key]();
+    			});
+    		}
+    		else if (item.type === 'animation')
+    		{
+    			$.each(item.data, function(key, data)
+    			{
+    				data.opts = (typeof data.opts === 'undefined') ? {} : data.opts;
+
+    				$(key).animation(data.name, data.opts);
+    			});
+    		}
+    		else if (item.type === 'location')
+    		{
+    			top.location.href = item.data;
+    		}
+    		else if (item.type === 'notify')
+    		{
+    			$.notify(item.data);
+    		}
+
+    		return item;
+    	},
+        stripslashes: function(str)
+    	{
+    		return (str+'').replace(/\0/g, '0').replace(/\\([\\'"])/g, '$1');
+        }
+    };
+
+
+}(Kube));
+/**
+ * @library Kube Utils
+ * @author Imperavi LLC
+ * @license MIT
+ */
+(function(Kube)
+{
+    Kube.Utils = function() {};
+
+    Kube.Utils.prototype = {
+        disableBodyScroll: function()
+    	{
+    		var $body = $('html');
+    		var windowWidth = window.innerWidth;
+
+    		if (!windowWidth)
+    		{
+    			var documentElementRect = document.documentElement.getBoundingClientRect();
+    			windowWidth = documentElementRect.right - Math.abs(documentElementRect.left);
+    		}
+
+    		var isOverflowing = document.body.clientWidth < windowWidth;
+    		var scrollbarWidth = this.measureScrollbar();
+
+    		$body.css('overflow', 'hidden');
+    		if (isOverflowing) $body.css('padding-right', scrollbarWidth);
+    	},
+    	measureScrollbar: function()
+    	{
+    		var $body = $('body');
+    		var scrollDiv = document.createElement('div');
+    		scrollDiv.className = 'scrollbar-measure';
+
+    		$body.append(scrollDiv);
+    		var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
+    		$body[0].removeChild(scrollDiv);
+    		return scrollbarWidth;
+    	},
+    	enableBodyScroll: function()
+    	{
+    		$('html').css({ 'overflow': '', 'padding-right': '' });
+    	}
+    };
+
+
+}(Kube));
+/**
+ * @library Kube Message
+ * @author Imperavi LLC
+ * @license MIT
+ */
+(function(Kube)
+{
+    Kube.Message = function(element, options)
+    {
+        this.namespace = 'message';
+        this.defaults = {
+            closeSelector: '.close',
+            closeEvent: 'click',
+            animationOpen: 'fadeIn',
+            animationClose: 'fadeOut',
+            callbacks: ['open', 'opened', 'close', 'closed']
+        };
+
+        // Parent Constructor
+        Kube.apply(this, arguments);
+
+        // Initialization
+        this.start();
+    };
+
+    // Functionality
+    Kube.Message.prototype = {
+        start: function()
+        {
+            this.$close = this.$element.find(this.opts.closeSelector);
+            this.$close.on(this.opts.closeEvent + '.' + this.namespace, $.proxy(this.close, this));
+            this.$element.addClass('open');
+        },
+        stop: function()
+        {
+            this.$close.off('.' + this.namespace);
+            this.$element.removeClass('open');
+        },
+        open: function(e)
+        {
+            if (e) e.preventDefault();
+
+            if (!this.isOpened())
+            {
+                this.callback('open');
+                this.$element.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));
+            }
+        },
+        isOpened: function()
+        {
+            return this.$element.hasClass('open');
+        },
+        onOpened: function()
+        {
+            this.callback('opened');
+            this.$element.addClass('open');
+        },
+        close: function(e)
+        {
+            if (e) e.preventDefault();
+
+            if (this.isOpened())
+            {
+                this.callback('close');
+                this.$element.animation(this.opts.animationClose, $.proxy(this.onClosed, this));
+            }
+        },
+        onClosed: function()
+        {
+            this.callback('closed');
+            this.$element.removeClass('open');
+        }
+    };
+
+    // Inheritance
+    Kube.Message.inherits(Kube);
+
+    // Plugin
+    Kube.Plugin.create('Message');
+    Kube.Plugin.autoload('Message');
+
+}(Kube));
+/**
+ * @library Kube Sticky
+ * @author Imperavi LLC
+ * @license MIT
+ */
+(function(Kube)
+{
+    Kube.Sticky = function(element, options)
+    {
+        this.namespace = 'sticky';
+        this.defaults = {
+            classname: 'fixed',
+            offset: 0, // pixels
+            callbacks: ['fixed', 'unfixed']
+        };
+
+        // Parent Constructor
+        Kube.apply(this, arguments);
+
+        // Initialization
+        this.start();
+    };
+
+    // Functionality
+    Kube.Sticky.prototype = {
+        start: function()
+        {
+    	    this.offsetTop = this.getOffsetTop();
+
+    	    this.load();
+    	    $(window).scroll($.proxy(this.load, this));
+    	},
+    	getOffsetTop: function()
+    	{
+        	return this.$element.offset().top;
+    	},
+    	load: function()
+    	{
+    		return (this.isFix()) ? this.fixed() : this.unfixed();
+    	},
+    	isFix: function()
+    	{
+            return ($(window).scrollTop() > (this.offsetTop + this.opts.offset));
+    	},
+    	fixed: function()
+    	{
+    		this.$element.addClass(this.opts.classname).css('top', this.opts.offset + 'px');
+    		this.callback('fixed');
+    	},
+    	unfixed: function()
+    	{
+    		this.$element.removeClass(this.opts.classname).css('top', '');
+    		this.callback('unfixed');
+        }
+    };
+
+    // Inheritance
+    Kube.Sticky.inherits(Kube);
+
+    // Plugin
+    Kube.Plugin.create('Sticky');
+    Kube.Plugin.autoload('Sticky');
+
+}(Kube));
+/**
+ * @library Kube Toggleme
+ * @author Imperavi LLC
+ * @license MIT
+ */
+(function(Kube)
+{
+    Kube.Toggleme = function(element, options)
+    {
+        this.namespace = 'toggleme';
+        this.defaults = {
+            toggleEvent: 'click',
+            target: null,
+            text: '',
+            animationOpen: 'slideDown',
+            animationClose: 'slideUp',
+            callbacks: ['open', 'opened', 'close', 'closed']
+        };
+
+        // Parent Constructor
+        Kube.apply(this, arguments);
+
+        // Initialization
+        this.start();
+    };
+
+    // Functionality
+    Kube.Toggleme.prototype = {
+        start: function()
+        {
+            if (!this.hasTarget()) return;
+
+            this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));
+        },
+        stop: function()
+        {
+            this.$element.off('.' + this.namespace);
+            this.revertText();
+        },
+        toggle: function(e)
+        {
+            if (this.isOpened()) this.close(e);
+            else                 this.open(e);
+        },
+        open: function(e)
+        {
+            if (e) e.preventDefault();
+
+            if (!this.isOpened())
+            {
+                this.storeText();
+                this.callback('open');
+                this.$target.animation('slideDown', $.proxy(this.onOpened, this));
+
+                // changes the text of $element with a less delay to smooth
+                setTimeout($.proxy(this.replaceText, this), 100);
+    		}
+        },
+        close: function(e)
+        {
+            if (e) e.preventDefault();
+
+            if (this.isOpened())
+            {
+                this.callback('close');
+                this.$target.animation('slideUp', $.proxy(this.onClosed, this));
+    		}
+        },
+    	isOpened: function()
+        {
+            return (this.$target.hasClass('open'));
+        },
+        onOpened: function()
+        {
+            this.$target.addClass('open');
+         	this.callback('opened');
+        },
+        onClosed: function()
+        {
+            this.$target.removeClass('open');
+            this.revertText();
+        	this.callback('closed');
+        },
+        storeText: function()
+        {
+            this.$element.data('replacement-text', this.$element.html());
+        },
+        revertText: function()
+        {
+            var text = this.$element.data('replacement-text');
+            if (text) this.$element.html(text);
+
+            this.$element.removeData('replacement-text');
+        },
+        replaceText: function()
+        {
+            if (this.opts.text !== '')
+            {
+                this.$element.html(this.opts.text);
+            }
+        }
+    };
+
+    // Inheritance
+    Kube.Toggleme.inherits(Kube);
+
+    // Plugin
+    Kube.Plugin.create('Toggleme');
+    Kube.Plugin.autoload('Toggleme');
+
+}(Kube));
+/**
+ * @library Kube Offcanvas
+ * @author Imperavi LLC
+ * @license MIT
+ */
+(function(Kube)
+{
+    Kube.Offcanvas = function(element, options)
+    {
+        this.namespace = 'offcanvas';
+        this.defaults = {
+    		target: null, // selector
+    		push: true, // boolean
+    		width: '250px', // string
+    		direction: 'left', // string: left or right
+    		toggleEvent: 'click',
+    		clickOutside: true, // boolean
+    		animationOpen: 'slideInLeft',
+    		animationClose: 'slideOutLeft',
+    		callbacks: ['open', 'opened', 'close', 'closed']
+        };
+
+        // Parent Constructor
+        Kube.apply(this, arguments);
+
+        // Services
+        this.utils = new Kube.Utils();
+        this.detect = new Kube.Detect();
+
+        // Initialization
+        this.start();
+    };
+
+    // Functionality
+    Kube.Offcanvas.prototype = {
+        start: function()
+        {
+            if (!this.hasTarget()) return;
+
+            this.buildTargetWidth();
+            this.buildAnimationDirection();
+
+            this.$close = this.getCloseLink();
+            this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));
+            this.$target.addClass('offcanvas');
+    	},
+    	stop: function()
+    	{
+        	this.closeAll();
+
+            this.$element.off('.' + this.namespace);
+            this.$close.off('.' + this.namespace);
+            $(document).off('.' + this.namespace);
+    	},
+    	toggle: function(e)
+    	{
+        	if (this.isOpened()) this.close(e);
+        	else                 this.open(e);
+        },
+    	buildTargetWidth: function()
+    	{
+            this.opts.width = ($(window).width() < parseInt(this.opts.width)) ? '100%' : this.opts.width;
+    	},
+    	buildAnimationDirection: function()
+    	{
+            if (this.opts.direction === 'right')
+            {
+                this.opts.animationOpen = 'slideInRight';
+    			this.opts.animationClose = 'slideOutRight';
+            }
+    	},
+    	getCloseLink: function()
+    	{
+            return this.$target.find('.close');
+    	},
+    	open: function(e)
+    	{
+        	if (e) e.preventDefault();
+
+            if (!this.isOpened())
+            {
+                this.closeAll();
+        		this.callback('open');
+
+                this.$target.addClass('offcanvas-' + this.opts.direction);
+                this.$target.css('width', this.opts.width);
+
+                this.pushBody();
+
+        		this.$target.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));
+    		}
+    	},
+    	closeAll: function()
+    	{
+    		var $elms = $(document).find('.offcanvas');
+    		if ($elms.length !== 0)
+    		{
+                $elms.each(function()
+                {
+                    var $el = $(this);
+
+                    if ($el.hasClass('open'))
+                    {
+                        $el.css('width', '').animation('hide');
+                        $el.removeClass('open offcanvas-left offcanvas-right');
+                    }
+
+                });
+
+                $(document).off('.' + this.namespace);
+                $('body').css('left', '');
+    		}
+    	},
+    	close: function(e)
+    	{
+        	if (e)
+        	{
+            	var $el = $(e.target);
+            	var isTag = ($el[0].tagName === 'A' || $el[0].tagName === 'BUTTON');
+            	if (isTag && $el.closest('.offcanvas').length !== 0 && !$el.hasClass('close'))
+            	{
+                	return;
+            	}
+
+            	e.preventDefault();
+            }
+
+            if (this.isOpened())
+        	{
+        		this.utils.enableBodyScroll();
+        		this.callback('close');
+                this.pullBody();
+        		this.$target.animation(this.opts.animationClose, $.proxy(this.onClosed, this));
+    		}
+    	},
+    	isOpened: function()
+        {
+            return (this.$target.hasClass('open'));
+        },
+    	onOpened: function()
+    	{
+    		if (this.opts.clickOutside) $(document).on('click.' + this.namespace, $.proxy(this.close, this));
+    		if (this.detect.isMobileScreen()) $('html').addClass('no-scroll');
+
+            $(document).on('keyup.' + this.namespace, $.proxy(this.handleKeyboard, this));
+            this.$close.on('click.' + this.namespace, $.proxy(this.close, this));
+
+    		this.utils.disableBodyScroll();
+            this.$target.addClass('open');
+            this.callback('opened');
+    	},
+    	onClosed: function()
+    	{
+    		if (this.detect.isMobileScreen()) $('html').removeClass('no-scroll');
+
+            this.$target.css('width', '').removeClass('offcanvas-' + this.opts.direction);
+
+            this.$close.off('.' + this.namespace);
+    		$(document).off('.' + this.namespace);
+
+            this.$target.removeClass('open');
+    		this.callback('closed');
+    	},
+    	handleKeyboard: function(e)
+    	{
+    		if (e.which === 27) this.close();
+    	},
+    	pullBody: function()
+    	{
+            if (this.opts.push)
+            {
+                $('body').animate({ left: 0 }, 350, function() { $(this).removeClass('offcanvas-push-body'); });
+            }
+    	},
+    	pushBody: function()
+    	{
+            if (this.opts.push)
+            {
+                var properties = (this.opts.direction === 'left') ? { 'left': this.opts.width } : { 'left': '-' + this.opts.width };
+                $('body').addClass('offcanvas-push-body').animate(properties, 200);
+            }
+    	}
+    };
+
+    // Inheritance
+    Kube.Offcanvas.inherits(Kube);
+
+    // Plugin
+    Kube.Plugin.create('Offcanvas');
+    Kube.Plugin.autoload('Offcanvas');
+
+}(Kube));
+/**
+ * @library Kube Collapse
+ * @author Imperavi LLC
+ * @license MIT
+ */
+(function(Kube)
+{
+    Kube.Collapse = function(element, options)
+    {
+        this.namespace = 'collapse';
+        this.defaults = {
+            target: null,
+            toggle: true,
+            active: false, // string (hash = tab id selector)
+            toggleClass: 'collapse-toggle',
+            boxClass: 'collapse-box',
+            callbacks: ['open', 'opened', 'close', 'closed'],
+
+            // private
+            hashes: [],
+        	currentHash: false,
+        	currentItem: false
+        };
+
+        // Parent Constructor
+        Kube.apply(this, arguments);
+
+        // Initialization
+        this.start();
+    };
+
+    // Functionality
+    Kube.Collapse.prototype = {
+        start: function()
+        {
+            // items
+            this.$items = this.getItems();
+            this.$items.each($.proxy(this.loadItems, this));
+
+            // boxes
+            this.$boxes = this.getBoxes();
+
+            // active
+            this.setActiveItem();
+        },
+        getItems: function()
+        {
+            return this.$element.find('.' + this.opts.toggleClass);
+        },
+        getBoxes: function()
+        {
+            return this.$element.find('.' + this.opts.boxClass);
+        },
+    	loadItems: function(i, el)
+    	{
+    		var item = this.getItem(el);
+
+    		// set item identificator
+    		item.$el.attr('rel', item.hash);
+
+            // active
+    		if (!$(item.hash).hasClass('hide'))
+    		{
+    			this.opts.currentItem = item;
+    			this.opts.active = item.hash;
+
+                item.$el.addClass('active');
+            }
+
+    		// event
+    		item.$el.on('click.collapse', $.proxy(this.toggle, this));
+
+    	},
+    	setActiveItem: function()
+    	{
+    		if (this.opts.active !== false)
+    		{
+    			this.opts.currentItem = this.getItemBy(this.opts.active);
+    			this.opts.active = this.opts.currentItem.hash;
+    		}
+
+            if (this.opts.currentItem !== false)
+            {
+    		    this.addActive(this.opts.currentItem);
+    		    this.opts.currentItem.$box.removeClass('hide');
+    		}
+    	},
+    	addActive: function(item)
+    	{
+    		item.$box.removeClass('hide').addClass('open');
+    		item.$el.addClass('active');
+
+    		if (item.$caret !== false) item.$caret.removeClass('down').addClass('up');
+    		if (item.$parent !== false) item.$parent.addClass('active');
+
+    		this.opts.currentItem = item;
+    	},
+    	removeActive: function(item)
+    	{
+    		item.$box.removeClass('open');
+    		item.$el.removeClass('active');
+
+    		if (item.$caret !== false) item.$caret.addClass('down').removeClass('up');
+    		if (item.$parent !== false) item.$parent.removeClass('active');
+
+    		this.opts.currentItem = false;
+    	},
+        toggle: function(e)
+        {
+            if (e) e.preventDefault();
+
+            var target = $(e.target).closest('.' + this.opts.toggleClass).get(0) || e.target;
+            var item = this.getItem(target);
+
+            if (this.isOpened(item.hash)) this.close(item.hash);
+            else                          this.open(e)
+        },
+        openAll: function()
+        {
+            this.$items.addClass('active');
+            this.$boxes.addClass('open').removeClass('hide');
+        },
+        open: function(e, push)
+        {
+        	if (typeof e === 'undefined') return;
+    		if (typeof e === 'object') e.preventDefault();
+
+            var target = $(e.target).closest('.' + this.opts.toggleClass).get(0) || e.target;
+    		var item = (typeof e === 'object') ? this.getItem(target) : this.getItemBy(e);
+
+    		if (item.$box.hasClass('open'))
+    		{
+        		return;
+    		}
+
+    		if (this.opts.toggle) this.closeAll();
+
+    		this.callback('open', item);
+    		this.addActive(item);
+
+            item.$box.animation('slideDown', $.proxy(this.onOpened, this));
+        },
+        onOpened: function()
+        {
+    		this.callback('opened', this.opts.currentItem);
+        },
+        closeAll: function()
+        {
+            this.$items.removeClass('active').closest('li').removeClass('active');
+            this.$boxes.removeClass('open').addClass('hide');
+        },
+        close: function(num)
+        {
+    		var item = this.getItemBy(num);
+
+    		this.callback('close', item);
+
+    		this.opts.currentItem = item;
+
+    		item.$box.animation('slideUp', $.proxy(this.onClosed, this));
+        },
+        onClosed: function()
+        {
+            var item = this.opts.currentItem;
+
+    		this.removeActive(item);
+    		this.callback('closed', item);
+        },
+        isOpened: function(hash)
+        {
+            return $(hash).hasClass('open');
+        },
+    	getItem: function(element)
+    	{
+    		var item = {};
+
+    		item.$el = $(element);
+    		item.hash = item.$el.attr('href');
+    		item.$box = $(item.hash);
+
+    		var $parent = item.$el.parent();
+    		item.$parent = ($parent[0].tagName === 'LI') ? $parent : false;
+
+    		var $caret = item.$el.find('.caret');
+    		item.$caret = ($caret.length !== 0) ? $caret : false;
+
+    		return item;
+    	},
+    	getItemBy: function(num)
+    	{
+    		var element = (typeof num === 'number') ? this.$items.eq(num-1) : this.$element.find('[rel="' + num + '"]');
+
+    		return this.getItem(element);
+        }
+    };
+
+    // Inheritance
+    Kube.Collapse.inherits(Kube);
+
+    // Plugin
+    Kube.Plugin.create('Collapse');
+    Kube.Plugin.autoload('Collapse');
+
+}(Kube));
+/**
+ * @library Kube Dropdown
+ * @author Imperavi LLC
+ * @license MIT
+ */
+(function(Kube)
+{
+    Kube.Dropdown = function(element, options)
+    {
+        this.namespace = 'dropdown';
+        this.defaults = {
+    		target: null,
+    		toggleEvent: 'click',
+    		height: false, // integer
+    		width: false, // integer
+    		animationOpen: 'slideDown',
+        	animationClose: 'slideUp',
+    		caretUp: false,
+            callbacks: ['open', 'opened', 'close', 'closed']
+        };
+
+        // Parent Constructor
+        Kube.apply(this, arguments);
+
+        // Services
+        this.utils = new Kube.Utils();
+        this.detect = new Kube.Detect();
+
+        // Initialization
+        this.start();
+    };
+
+    // Functionality
+    Kube.Dropdown.prototype = {
+        start: function()
+        {
+            this.buildClose();
+            this.buildCaret();
+
+            if (this.detect.isMobile()) this.buildMobileAnimation();
+
+            this.$target.addClass('hide');
+            this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));
+
+    	},
+    	stop: function()
+    	{
+        	this.$element.off('.' + this.namespace);
+            this.$target.removeClass('open').addClass('hide');
+    		this.disableEvents();
+    	},
+    	buildMobileAnimation: function()
+    	{
+            this.opts.animationOpen = 'fadeIn';
+            this.opts.animationClose = 'fadeOut';
+    	},
+    	buildClose: function()
+    	{
+            this.$close = this.$target.find('.close');
+    	},
+    	buildCaret: function()
+    	{
+            this.$caret = this.getCaret();
+    		this.buildCaretPosition();
+    	},
+    	buildCaretPosition: function()
+    	{
+    		var height = this.$element.offset().top + this.$element.innerHeight() + this.$target.innerHeight();
+
+    		if ($(document).height() > height)
+    		{
+    			return;
+    		}
+
+            this.opts.caretUp = true;
+    		this.$caret.addClass('up');
+    	},
+    	getCaret: function()
+    	{
+        	return this.$element.find('.caret');
+    	},
+    	toggleCaretOpen: function()
+    	{
+    		if (this.opts.caretUp) this.$caret.removeClass('up').addClass('down');
+    		else                   this.$caret.removeClass('down').addClass('up');
+    	},
+    	toggleCaretClose: function()
+    	{
+    		if (this.opts.caretUp) this.$caret.removeClass('down').addClass('up');
+    		else                   this.$caret.removeClass('up').addClass('down');
+    	},
+    	toggle: function(e)
+    	{
+        	if (this.isOpened()) this.close(e);
+        	else                 this.open(e);
+    	},
+    	open: function(e)
+    	{
+        	if (e) e.preventDefault();
+
+            this.callback('open');
+    		$('.dropdown').removeClass('open').addClass('hide');
+
+    		if (this.opts.height) this.$target.css('min-height', this.opts.height + 'px');
+    		if (this.opts.width)  this.$target.width(this.opts.width);
+
+    		this.setPosition();
+    		this.toggleCaretOpen();
+
+    		this.$target.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));
+    	},
+    	close: function(e)
+    	{
+            if (!this.isOpened())
+    		{
+    			return;
+    		}
+
+    		if (e)
+    		{
+    			if (this.shouldNotBeClosed(e.target))
+    			{
+    				return;
+    			}
+
+    			e.preventDefault();
+    		}
+
+    		this.utils.enableBodyScroll();
+    		this.callback('close');
+    		this.toggleCaretClose();
+
+    		this.$target.animation(this.opts.animationClose, $.proxy(this.onClosed, this));
+    	},
+    	onClosed: function()
+    	{
+            this.$target.removeClass('open');
+    		this.disableEvents();
+    		this.callback('closed');
+    	},
+    	onOpened: function()
+    	{
+    		this.$target.addClass('open');
+    		this.enableEvents();
+    		this.callback('opened');
+    	},
+    	isOpened: function()
+    	{
+        	return (this.$target.hasClass('open'));
+    	},
+    	enableEvents: function()
+    	{
+    		if (this.detect.isDesktop())
+    		{
+    			this.$target.on('mouseover.' + this.namespace, $.proxy(this.utils.disableBodyScroll, this.utils))
+    			            .on('mouseout.' + this.namespace,  $.proxy(this.utils.enableBodyScroll, this.utils));
+    		}
+
+    		$(document).on('scroll.' + this.namespace, $.proxy(this.setPosition, this));
+    		$(window).on('resize.' + this.namespace, $.proxy(this.setPosition, this));
+     		$(document).on('click.' + this.namespace + ' touchstart.' + this.namespace, $.proxy(this.close, this));
+    		$(document).on('keydown.' + this.namespace, $.proxy(this.handleKeyboard, this));
+    		this.$target.find('[data-action="dropdown-close"]').on('click.' + this.namespace, $.proxy(this.close, this));
+    	},
+    	disableEvents: function()
+    	{
+    		this.$target.off('.' + this.namespace);
+    		$(document).off('.' + this.namespace);
+    		$(window).off('.' + this.namespace);
+    	},
+    	handleKeyboard: function(e)
+    	{
+    		if (e.which === 27) this.close(e);
+    	},
+    	shouldNotBeClosed: function(el)
+    	{
+            if ($(el).attr('data-action') === 'dropdown-close' || el === this.$close[0])
+            {
+                return false;
+        	}
+        	else if ($(el).closest('.dropdown').length === 0)
+        	{
+            	return false;
+        	}
+
+        	return true;
+    	},
+        isNavigationFixed: function()
+    	{
+        	return (this.$element.closest('.fixed').length !== 0);
+      	},
+    	getPlacement: function(height)
+    	{
+    		return ($(document).height() < height) ? 'top' : 'bottom';
+    	},
+    	getOffset: function(position)
+    	{
+    		return (this.isNavigationFixed()) ? this.$element.position() : this.$element.offset();
+    	},
+    	getPosition: function()
+    	{
+    		return (this.isNavigationFixed()) ? 'fixed' : 'absolute';
+    	},
+    	setPosition: function()
+    	{
+    		if (this.detect.isMobile())
+    		{
+                this.$target.addClass('dropdown-mobile');
+                return;
+    		}
+
+    		var position = this.getPosition();
+			var coords = this.getOffset(position);
+			var height = this.$target.innerHeight();
+			var width = this.$target.innerWidth();
+			var placement = this.getPlacement(coords.top + height + this.$element.innerHeight());
+			var leftFix = ($(window).width() < (coords.left + width)) ? (width - this.$element.innerWidth()) : 0;
+			var top, left = coords.left - leftFix;
+
+			if (placement === 'bottom')
+			{
+    			if (!this.isOpened()) this.$caret.removeClass('up').addClass('down');
+
+				this.opts.caretUp = false;
+				top = coords.top + this.$element.outerHeight() + 1;
+			}
+			else
+			{
+				this.opts.animationOpen = 'show';
+				this.opts.animationClose = 'hide';
+
+                if (!this.isOpened()) this.$caret.addClass('up').removeClass('down');
+
+				this.opts.caretUp = true;
+				top = coords.top - height - 1;
+			}
+
+			this.$target.css({ position: position, top: top + 'px', left: left + 'px' });
+    	}
+    };
+
+    // Inheritance
+    Kube.Dropdown.inherits(Kube);
+
+    // Plugin
+    Kube.Plugin.create('Dropdown');
+    Kube.Plugin.autoload('Dropdown');
+
+}(Kube));
+/**
+ * @library Kube Tabs
+ * @author Imperavi LLC
+ * @license MIT
+ */
+(function(Kube)
+{
+    Kube.Tabs = function(element, options)
+    {
+        this.namespace = 'tabs';
+        this.defaults = {
+    		equals: false,
+    		active: false, // string (hash = tab id selector)
+    		live: false, // class selector
+    		hash: true, //boolean
+    		callbacks: ['init', 'next', 'prev', 'open', 'opened', 'close', 'closed']
+        };
+
+        // Parent Constructor
+        Kube.apply(this, arguments);
+
+        // Initialization
+        this.start();
+    };
+
+    // Functionality
+    Kube.Tabs.prototype = {
+        start: function()
+        {
+            if (this.opts.live !== false) this.buildLiveTabs();
+
+            this.tabsCollection = [];
+            this.hashesCollection = [];
+            this.currentHash = [];
+            this.currentItem = false;
+
+            // items
+            this.$items = this.getItems();
+            this.$items.each($.proxy(this.loadItems, this));
+
+            // tabs
+    		this.$tabs = this.getTabs();
+
+            // location hash
+    		this.currentHash = this.getLocationHash();
+
+    		// close all
+    		this.closeAll();
+
+            // active & height
+    		this.setActiveItem();
+    		this.setItemHeight();
+
+            // callback
+    		this.callback('init');
+
+    	},
+    	getTabs: function()
+    	{
+        	return $(this.tabsCollection).map(function()
+        	{
+            	return this.toArray();
+            });
+    	},
+    	getItems: function()
+    	{
+    		return this.$element.find('a');
+    	},
+    	loadItems: function(i, el)
+    	{
+    		var item = this.getItem(el);
+
+    		// set item identificator
+    		item.$el.attr('rel', item.hash);
+
+    		// collect item
+            this.collectItem(item);
+
+            // active
+    		if (item.$parent.hasClass('active'))
+    		{
+    			this.currentItem = item;
+    			this.opts.active = item.hash;
+    		}
+
+    		// event
+    		item.$el.on('click.tabs', $.proxy(this.open, this));
+
+    	},
+    	collectItem: function(item)
+    	{
+    		this.tabsCollection.push(item.$tab);
+    		this.hashesCollection.push(item.hash);
+    	},
+    	buildLiveTabs: function()
+    	{
+    		var $layers = $(this.opts.live);
+
+    		if ($layers.length === 0)
+    		{
+    			return;
+    		}
+
+    		this.$liveTabsList = $('<ul />');
+    		$layers.each($.proxy(this.buildLiveItem, this));
+
+    		this.$element.html('').append(this.$liveTabsList);
+
+    	},
+    	buildLiveItem: function(i, tab)
+    	{
+    		var $tab = $(tab);
+    		var $li = $('<li />');
+    		var $a = $('<a />');
+    		var index = i + 1;
+
+    		$tab.attr('id', this.getLiveItemId($tab, index));
+
+    		var hash = '#' + $tab.attr('id');
+    		var title = this.getLiveItemTitle($tab);
+
+    		$a.attr('href', hash).attr('rel', hash).text(title);
+    		$li.append($a);
+
+    		this.$liveTabsList.append($li);
+    	},
+    	getLiveItemId: function($tab, index)
+    	{
+        	return (typeof $tab.attr('id') === 'undefined') ? this.opts.live.replace('.', '') + index : $tab.attr('id');
+    	},
+    	getLiveItemTitle: function($tab)
+    	{
+        	return (typeof $tab.attr('data-title') === 'undefined') ? $tab.attr('id') : $tab.attr('data-title');
+    	},
+    	setActiveItem: function()
+    	{
+    		if (this.currentHash)
+    		{
+    			this.currentItem = this.getItemBy(this.currentHash);
+    			this.opts.active = this.currentHash;
+    		}
+    		else if (this.opts.active === false)
+    		{
+    			this.currentItem = this.getItem(this.$items.first());
+    			this.opts.active = this.currentItem.hash;
+    		}
+
+    		this.addActive(this.currentItem);
+    	},
+    	addActive: function(item)
+    	{
+    		item.$parent.addClass('active');
+    		item.$tab.removeClass('hide').addClass('open');
+
+    		this.currentItem = item;
+    	},
+    	removeActive: function(item)
+    	{
+    		item.$parent.removeClass('active');
+    		item.$tab.addClass('hide').removeClass('open');
+
+    		this.currentItem = false;
+    	},
+    	next: function(e)
+    	{
+    		if (e) e.preventDefault();
+
+    		var item = this.getItem(this.fetchElement('next'));
+
+    		this.open(item.hash);
+    		this.callback('next', item);
+
+    	},
+    	prev: function(e)
+    	{
+    		if (e) e.preventDefault();
+
+    		var item = this.getItem(this.fetchElement('prev'));
+
+    		this.open(item.hash);
+    		this.callback('prev', item);
+    	},
+    	fetchElement: function(type)
+    	{
+            var element;
+    		if (this.currentItem !== false)
+    		{
+    			// prev or next
+    			element = this.currentItem.$parent[type]().find('a');
+
+    			if (element.length === 0)
+    			{
+    				return;
+    			}
+    		}
+    		else
+    		{
+    			// first
+    			element = this.$items[0];
+    		}
+
+    		return element;
+    	},
+    	open: function(e, push)
+    	{
+        	if (typeof e === 'undefined') return;
+    		if (typeof e === 'object') e.preventDefault();
+
+    		var item = (typeof e === 'object') ? this.getItem(e.target) : this.getItemBy(e);
+    		this.closeAll();
+
+    		this.callback('open', item);
+    		this.addActive(item);
+
+    		// push state (doesn't need to push at the start)
+            this.pushStateOpen(push, item);
+    		this.callback('opened', item);
+    	},
+    	pushStateOpen: function(push, item)
+    	{
+    		if (push !== false && this.opts.hash !== false)
+    		{
+    			history.pushState(false, false, item.hash);
+    		}
+    	},
+    	close: function(num)
+    	{
+    		var item = this.getItemBy(num);
+
+    		if (!item.$parent.hasClass('active'))
+    		{
+    			return;
+    		}
+
+    		this.callback('close', item);
+    		this.removeActive(item);
+    		this.pushStateClose();
+    		this.callback('closed', item);
+
+    	},
+    	pushStateClose: function()
+    	{
+            if (this.opts.hash !== false)
+            {
+    			history.pushState(false, false, ' ');
+    		}
+    	},
+    	closeAll: function()
+    	{
+    		this.$tabs.removeClass('open').addClass('hide');
+    		this.$items.parent().removeClass('active');
+    	},
+    	getItem: function(element)
+    	{
+    		var item = {};
+
+    		item.$el = $(element);
+    		item.hash = item.$el.attr('href');
+    		item.$parent = item.$el.parent();
+    		item.$tab = $(item.hash);
+
+    		return item;
+    	},
+    	getItemBy: function(num)
+    	{
+    		var element = (typeof num === 'number') ? this.$items.eq(num-1) : this.$element.find('[rel="' + num + '"]');
+
+    		return this.getItem(element);
+    	},
+    	getLocationHash: function()
+    	{
+    		if (this.opts.hash === false)
+    		{
+    			return false;
+    		}
+
+    		return (this.isHash()) ? top.location.hash : false;
+    	},
+    	isHash: function()
+    	{
+        	return !(top.location.hash === '' || $.inArray(top.location.hash, this.hashesCollection) === -1);
+    	},
+    	setItemHeight: function()
+    	{
+    		if (this.opts.equals)
+    		{
+    	    	var minHeight = this.getItemMaxHeight() + 'px';
+        		this.$tabs.css('min-height', minHeight);
+    		}
+    	},
+    	getItemMaxHeight: function()
+    	{
+    		var max = 0;
+    		this.$tabs.each(function()
+    		{
+    			var h = $(this).height();
+    			max = h > max ? h : max;
+    		});
+
+    		return max;
+    	}
+    };
+
+    // Inheritance
+    Kube.Tabs.inherits(Kube);
+
+    // Plugin
+    Kube.Plugin.create('Tabs');
+    Kube.Plugin.autoload('Tabs');
+
+}(Kube));
+/**
+ * @library Kube Modal
+ * @author Imperavi LLC
+ * @license MIT
+ */
+(function($)
+{
+    $.modalcurrent = null;
+	$.modalwindow = function(options)
+	{
+    	var opts = $.extend({}, options, { show: true });
+    	var $element = $('<span />');
+
+    	$element.modal(opts);
+	};
+
+})(jQuery);
+
+(function(Kube)
+{
+    Kube.Modal = function(element, options)
+    {
+        this.namespace = 'modal';
+        this.defaults = {
+            target: null,
+            show: false,
+    		url: false,
+    		header: false,
+    		width: '600px', // string
+    		height: false, // or string
+    		maxHeight: false,
+    		position: 'center', // top or center
+    		overlay: true,
+    		appendForms: false,
+    		appendFields: false,
+    		animationOpen: 'show',
+        	animationClose: 'hide',
+    		callbacks: ['open', 'opened', 'close', 'closed']
+        };
+
+        // Parent Constructor
+        Kube.apply(this, arguments);
+
+        // Services
+        this.utils = new Kube.Utils();
+        this.detect = new Kube.Detect();
+
+        // Initialization
+        this.start();
+    };
+
+    // Functionality
+    Kube.Modal.prototype = {
+        start: function()
+        {
+            if (!this.hasTarget())
+    		{
+    			return;
+    		}
+
+            if (this.opts.show) this.load();
+    		else this.$element.on('click.' + this.namespace, $.proxy(this.load, this));
+    	},
+    	buildModal: function()
+    	{
+    		this.$modal = this.$target.find('.modal');
+    		this.$header = this.$target.find('.modal-header');
+    		this.$close = this.$target.find('.close');
+    		this.$body = this.$target.find('.modal-body');
+    	},
+    	buildOverlay: function()
+    	{
+    		if (this.opts.overlay === false)
+    		{
+    			return;
+    		}
+
+    		if ($('#modal-overlay').length !== 0)
+    		{
+    			this.$overlay = $('#modal-overlay');
+    		}
+    		else
+    		{
+    			this.$overlay = $('<div id="modal-overlay">').addClass('hide');
+    			$('body').prepend(this.$overlay);
+    		}
+
+    		this.$overlay.addClass('overlay');
+    	},
+    	buildHeader: function()
+    	{
+        	if (this.opts.header) this.$header.html(this.opts.header);
+    	},
+    	load: function(e)
+    	{
+    		this.buildModal();
+    		this.buildOverlay();
+    		this.buildHeader();
+
+            if (this.opts.url) this.buildContent();
+            else               this.open(e);
+    	},
+    	open: function(e)
+    	{
+        	if (e) e.preventDefault();
+
+            if (this.isOpened())
+    		{
+    			return;
+    		}
+
+    		if (this.detect.isMobile()) this.opts.width = '96%';
+    		if (this.opts.overlay)      this.$overlay.removeClass('hide');
+
+    		this.$target.removeClass('hide');
+    		this.$modal.removeClass('hide');
+
+            this.enableEvents();
+    		this.findActions();
+
+    		this.resize();
+    		$(window).on('resize.' + this.namespace, $.proxy(this.resize, this));
+
+    		if (this.detect.isDesktop()) this.utils.disableBodyScroll();
+
+    		// enter
+    		this.$modal.find('input[type=text],input[type=url],input[type=email]').on('keydown.' + this.namespace, $.proxy(this.handleEnter, this));
+
+    		this.callback('open');
+    		this.$modal.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));
+        },
+        close: function(e)
+        {
+            if (!this.$modal || !this.isOpened())
+    		{
+    			return;
+    		}
+
+    		if (e)
+    		{
+    			if (this.shouldNotBeClosed(e.target))
+    			{
+    				return;
+    			}
+
+    			e.preventDefault();
+    		}
+
+    		this.callback('close');
+    		this.disableEvents();
+
+    		this.$modal.animation(this.opts.animationClose, $.proxy(this.onClosed, this));
+
+            if (this.opts.overlay) this.$overlay.animation(this.opts.animationClose);
+        },
+    	onOpened: function()
+    	{
+    		this.$modal.addClass('open');
+            this.callback('opened');
+
+            $.modalcurrent = this;
+    	},
+    	onClosed: function()
+    	{
+    		this.callback('closed');
+
+            this.$target.addClass('hide');
+            this.$modal.removeClass('open');
+
+    		if (this.detect.isDesktop()) this.utils.enableBodyScroll();
+
+    		this.$body.css('height', '');
+            $.modalcurrent = null;
+    	},
+    	isOpened: function()
+    	{
+        	return (this.$modal.hasClass('open'));
+    	},
+    	getData: function()
+    	{
+            var formdata = new Kube.FormData(this);
+            formdata.set('');
+
+            return formdata.get();
+    	},
+    	buildContent: function()
+    	{
+    		$.ajax({
+    			url: this.opts.url + '?' + new Date().getTime(),
+    			cache: false,
+    			type: 'post',
+    			data: this.getData(),
+    			success: $.proxy(function(data)
+    			{
+    				this.$body.html(data);
+    				this.open();
+
+    			}, this)
+    		});
+    	},
+    	buildWidth: function()
+    	{
+    		var width = this.opts.width;
+    		var top = '2%';
+    		var bottom = '2%';
+    		var percent = width.match(/%$/);
+
+    		if ((parseInt(this.opts.width) > $(window).width()) && !percent)
+    		{
+                width = '96%';
+    		}
+    		else if (!percent)
+    		{
+                top = '16px';
+                bottom = '16px';
+    		}
+
+    		this.$modal.css({ 'width': width, 'margin-top': top, 'margin-bottom': bottom });
+
+    	},
+    	buildPosition: function()
+    	{
+    		if (this.opts.position !== 'center')
+    		{
+    			return;
+    		}
+
+    		var windowHeight = $(window).height();
+    		var height = this.$modal.outerHeight();
+    		var top = (windowHeight/2 - height/2) + 'px';
+
+    		if (this.detect.isMobile())     top = '2%';
+    		else if (height > windowHeight) top = '16px';
+
+    		this.$modal.css('margin-top', top);
+    	},
+    	buildHeight: function()
+    	{
+    		var windowHeight = $(window).height();
+
+    		if (this.opts.maxHeight)
+    		{
+        		var padding = parseInt(this.$body.css('padding-top')) + parseInt(this.$body.css('padding-bottom'));
+        		var margin = parseInt(this.$modal.css('margin-top')) + parseInt(this.$modal.css('margin-bottom'));
+    			var height = windowHeight - this.$header.innerHeight() - padding - margin;
+
+    			this.$body.height(height);
+    		}
+    		else if (this.opts.height !== false)
+    		{
+    			this.$body.css('height', this.opts.height);
+    		}
+
+    		var modalHeight = this.$modal.outerHeight();
+    		if (modalHeight > windowHeight)
+    		{
+    			this.opts.animationOpen = 'show';
+    			this.opts.animationClose = 'hide';
+    		}
+    	},
+    	resize: function()
+    	{
+    		this.buildWidth();
+    		this.buildPosition();
+    		this.buildHeight();
+    	},
+    	enableEvents: function()
+    	{
+    		this.$close.on('click.' + this.namespace, $.proxy(this.close, this));
+    		$(document).on('keyup.' + this.namespace, $.proxy(this.handleEscape, this));
+    		this.$target.on('click.' + this.namespace, $.proxy(this.close, this));
+    	},
+    	disableEvents: function()
+    	{
+    		this.$close.off('.' + this.namespace);
+    		$(document).off('.' + this.namespace);
+    		this.$target.off('.' + this.namespace);
+    		$(window).off('.' + this.namespace);
+    	},
+    	findActions: function()
+    	{
+    		this.$body.find('[data-action="modal-close"]').on('mousedown.' + this.namespace, $.proxy(this.close, this));
+    	},
+    	setHeader: function(header)
+    	{
+    		this.$header.html(header);
+    	},
+    	setContent: function(content)
+    	{
+    		this.$body.html(content);
+    	},
+    	setWidth: function(width)
+    	{
+    		this.opts.width = width;
+    		this.resize();
+    	},
+    	getModal: function()
+    	{
+            return this.$modal;
+    	},
+    	getBody: function()
+    	{
+            return this.$body;
+    	},
+    	getHeader: function()
+    	{
+            return this.$header;
+    	},
+    	handleEnter: function(e)
+    	{
+        	if (e.which === 13)
+        	{
+            	e.preventDefault();
+            	this.close(false);
+            }
+    	},
+    	handleEscape: function(e)
+    	{
+        	return (e.which === 27) ? this.close(false) : true;
+    	},
+    	shouldNotBeClosed: function(el)
+    	{
+            if ($(el).attr('data-action') === 'modal-close' || el === this.$close[0])
+            {
+                return false;
+        	}
+        	else if ($(el).closest('.modal').length === 0)
+        	{
+            	return false;
+        	}
+
+        	return true;
+    	}
+    };
+
+    // Inheritance
+    Kube.Modal.inherits(Kube);
+
+    // Plugin
+    Kube.Plugin.create('Modal');
+    Kube.Plugin.autoload('Modal');
+
+}(Kube));
diff --git a/themes/kube/static/js/kube.legenda.js b/themes/kube/static/js/kube.legenda.js
new file mode 100644
index 0000000..e69de29
diff --git a/themes/kube/static/js/kube.min.js b/themes/kube/static/js/kube.min.js
new file mode 100644
index 0000000..3ea3d85
--- /dev/null
+++ b/themes/kube/static/js/kube.min.js
@@ -0,0 +1 @@
+if("undefined"==typeof jQuery)throw new Error("Kube's requires jQuery");!function(t){var e=t.fn.jquery.split(".");if(1==e[0]&&e[1]<8)throw new Error("Kube's requires at least jQuery v1.8")}(jQuery),function(){Function.prototype.inherits=function(t){var e=function(){};e.prototype=t.prototype;var s=new e;for(var i in this.prototype)s[i]=this.prototype[i];this.prototype=s,this.prototype["super"]=t.prototype};var t=function(t,e){e="object"==typeof e?e:{},this.$element=$(t),this.opts=$.extend [...]
diff --git a/themes/kube/static/js/main.js b/themes/kube/static/js/main.js
new file mode 100644
index 0000000..e69de29
diff --git a/themes/kube/static/js/tocbot.min.js b/themes/kube/static/js/tocbot.min.js
new file mode 100644
index 0000000..51be77a
--- /dev/null
+++ b/themes/kube/static/js/tocbot.min.js
@@ -0,0 +1,18 @@
+!function(e){function t(o){if(n[o])return n[o].exports;var r=n[o]={exports:{},id:o,loaded:!1};return e[o].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([/*!*************************!*\
+  !*** ./src/js/index.js ***!
+  \*************************/
+function(e,t,n){var o,r,l;(function(i){!function(n,i){r=[],o=i(n),l="function"==typeof o?o.apply(t,r):o,!(void 0!==l&&(e.exports=l))}("undefined"!=typeof i?i:this.window||this.global,function(e){"use strict";function t(){for(var e={},t=0;t<arguments.length;t++){var n=arguments[t];for(var o in n)h.call(n,o)&&(e[o]=n[o])}return e}function o(e,t,n){t||(t=250);var o,r;return function(){var l=n||this,i=+new Date,s=arguments;o&&i<o+t?(clearTimeout(r),r=setTimeout(function(){o=i,e.apply(l,s)},t [...]
+  !*** ./~/smooth-scroll/dist/js/smooth-scroll.min.js ***!
+  \******************************************************/
+function(e,t,n){var o,r,l;(function(n){/*! smooth-scroll v10.2.1 | (c) 2016 Chris Ferdinandi | MIT License | http://github.com/cferdinandi/smooth-scroll */
+!function(n,i){r=[],o=i(n),l="function"==typeof o?o.apply(t,r):o,!(void 0!==l&&(e.exports=l))}("undefined"!=typeof n?n:this.window||this.global,function(e){"use strict";var t,n,o,r,l,i,s,c={},a="querySelector"in document&&"addEventListener"in e,u={selector:"[data-scroll]",selectorHeader:null,speed:500,easing:"easeInOutCubic",offset:0,callback:function(){}},d=function(){var e={},t=!1,n=0,o=arguments.length;"[object Boolean]"===Object.prototype.toString.call(arguments[0])&&(t=arguments[0], [...]
+  !*** ./src/js/default-options.js ***!
+  \***********************************/
+function(e,t){e.exports={tocSelector:".js-toc",contentSelector:".js-toc-content",headingSelector:"h1, h2, h3",ignoreSelector:".js-toc-ignore",linkClass:"toc-link",extraLinkClasses:"",activeLinkClass:"is-active-link",listClass:"toc-list",extraListClasses:"",isCollapsedClass:"is-collapsed",collapsibleClass:"is-collapsible",listItemClass:"toc-list-item",collapseDepth:0,smoothScrollOptions:{easing:"easeInOutCubic",offset:0,speed:300},headingsOffset:0,throttleTimeout:50,positionFixedSelector: [...]
+  !*** ./src/js/build-html.js ***!
+  \******************************/
+function(e,t){e.exports=function(e){function t(e,n){var l=n.appendChild(o(e));if(e.children.length){var i=r(e.isCollapsed);e.children.forEach(function(e){t(e,i)}),l.appendChild(i)}}function n(e,n){var o=!1,l=r(o);n.forEach(function(e){t(e,l)});var i=document.querySelector(e);if(null!==i)return i.firstChild&&i.removeChild(i.firstChild),i.appendChild(l)}function o(t){var n=document.createElement("li"),o=document.createElement("a");return e.listItemClass&&n.setAttribute("class",e.listItemCl [...]
+  !*** ./src/js/parse-content.js ***!
+  \*********************************/
+function(e,t){e.exports=function(e){function t(e){return e[e.length-1]}function n(e){return+e.nodeName.split("H").join("")}function o(t){var o={id:t.id,children:[],nodeName:t.nodeName,headingLevel:n(t),textContent:t.textContent.trim()};return e.includeHtml&&(o.childNodes=t.childNodes),o}function r(r,l){for(var i=o(r),s=n(r),c=l,a=t(c),u=a?a.headingLevel:0,d=s-u;d>0;)a=t(c),a&&void 0!==a.children&&(c=a.children),d--;return s>=e.collapseDepth&&(i.isCollapsed=!0),c.push(i),c}function l(t,n) [...]
+//# sourceMappingURL=tocbot.min.js.map
\ No newline at end of file
diff --git a/themes/kube/theme.toml b/themes/kube/theme.toml
new file mode 100644
index 0000000..47fffce
--- /dev/null
+++ b/themes/kube/theme.toml
@@ -0,0 +1,34 @@
+# theme.toml template for a Hugo theme
+# See https://github.com/spf13/hugoThemes#themetoml for an example
+
+name = "Kube Hugo"
+license = "MIT"
+version = "1.0.3"
+licenselink = "https://github.com/jeblister/kube/master/LICENSE.md"
+description = "Kube is a professional  and a responsive Hugo theme for developers and designers that offers a documentation section mixed with a landing page and a blog."
+homepage = "http://kube.elemnts.net/"
+tags = ["responsive", "kube", "documentation", "landing", "blog", "themes", "professional", "modern"]
+features = ["Minimalism","Mobile-first Design",
+  "Responsive Design",
+  "Horizontal Rhythm",
+  "Typography",
+  "Google Analytics",
+  "Disqus Commenting",
+  "OpenGraph support",
+  "Schema Structured Data",
+  "Paginated Lists",
+  "Reading Time",
+  "Last Modified time",
+  "Word Count",
+  "Related Posts",
+  "Block Templates",
+  "Table of Contents",
+  "SEO Site Verification"]
+[module]
+  [module.hugoVersion]
+    extended = false
+    min = "0.84.0"
+[author]
+  name = "jeblister"
+  homepage = "http://findme.surge.sh/"
+