diff --git a/Makefile b/Makefile
index 6f20654cdb2bf84c81a4661219e887754e71b1d4_TWFrZWZpbGU=..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_TWFrZWZpbGU= 100644
--- a/Makefile
+++ b/Makefile
@@ -3,6 +3,9 @@
 endif
 .RECIPEPREFIX = >
 
-.PHONY: clean build help
+all: build
+
+.PHONY: clean build help import_blogger
+
 
 venv_nikola/bin/nikola:  ## create a virtualenv to build the website
@@ -7,8 +10,12 @@
 
 venv_nikola/bin/nikola:  ## create a virtualenv to build the website
-> virtualenv -ppython3 ./venv_nikola
-> venv_nikola/bin/python -mpip install nikola==8.0.3 jinja2
+> @virtualenv -ppython3 ./venv_nikola
+> @venv_nikola/bin/python -mpip install nikola==8.0.3 jinja2 aiohttp watchdog
+
+plugins/import_blogger: venv_nikola/bin/nikola
+> venv_nikola/bin/nikola plugin -i import_blogger
+> venv_nikola/bin/pip install feedparser
 
 build: venv_nikola/bin/nikola  ## build the website if needed, the result is in ./public
 > venv_nikola/bin/nikola build
 
@@ -11,7 +18,10 @@
 
 build: venv_nikola/bin/nikola  ## build the website if needed, the result is in ./public
 > venv_nikola/bin/nikola build
 
+auto: venv_nikola/bin/nikola ## build and serve the website, autoupdate on changes
+> venv_nikola/bin/nikola auto
+
 clean:  venv_nikola/bin/nikola  ## clean the website, usually not needed at all
 > venv_nikola/bin/nikola clean
 
@@ -15,6 +25,20 @@
 clean:  venv_nikola/bin/nikola  ## clean the website, usually not needed at all
 > venv_nikola/bin/nikola clean
 
+import_blogger: plugins/import_blogger  ## download and import the content from morepypy.blogspot.com
+> @if [ -z "${BLOGGER_XML}" ] || [ ! -s "${BLOGGER_XML}" ]; then \
+     echo "ERROR: BLOGGER_XML not defined or not a file"; \
+     echo "    Log into www.blogger.com, go to the morepypy settings,"; \
+     echo "    settings -> other -> Import & back up -> Back up content"; \
+     echo "    save to a location, then rerun this as"; \
+     echo "    \"BLOGGER_XML=location make import_blogger\""; \
+     exit 255; \
+  fi
+> @echo "\nImporting from ${BLOGGER_XML}"
+# TODO: improve import script with --export-comments (see static_comments plugin)
+> venv_nikola/bin/nikola import_blogger -o . -d ${BLOGGER_XML}
+> @echo Done. Don\'t forget to build the site
+
 # Add help text after each target name starting with '\#\#'
 help:   ## Show this help.
 > @echo "\nHelp for building the website, based on nikola"
diff --git a/conf.py b/conf.py
index 6f20654cdb2bf84c81a4661219e887754e71b1d4_Y29uZi5weQ==..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_Y29uZi5weQ== 100644
--- a/conf.py
+++ b/conf.py
@@ -139,7 +139,7 @@
 
 NAVIGATION_LINKS = {
     DEFAULT_LANG: (
-        ('/index.html', 'Home'),
+        ('/index.html', '<image src="images/pypy-logo-nav.png" alt=PyPy/>'),
         ('/features.html', 'What is PyPy?'),
         ('/download.html', 'Download'),
         ('/compat.html', 'Compatibility'),
@@ -224,5 +224,6 @@
 #     )
 
 POSTS = (
+    ("posts/*.txt", "posts", "post.tmpl"),
     ("posts/*.rst", "posts", "post.tmpl"),
     ("posts/*.md", "posts", "post.tmpl"),
@@ -227,6 +228,5 @@
     ("posts/*.rst", "posts", "post.tmpl"),
     ("posts/*.md", "posts", "post.tmpl"),
-    ("posts/*.txt", "posts", "post.tmpl"),
     ("posts/*.html", "posts", "post.tmpl"),
 )
 PAGES = (
@@ -350,7 +350,6 @@
 # Final output is <img src="LOGO_URL" id="logo" alt="BLOG_TITLE">.
 # The URL may be relative to the site root.
 # LOGO_URL = ''
-LOGO_URL = 'images/pypy-logo.png'
 
 # If you want to hide the title of your website (for example, if your logo
 # already contains the text), set this to False.
@@ -663,7 +662,7 @@
 # Where the output site should be located
 # If you don't use an absolute path, it will be considered as relative
 # to the location of conf.py
-#OUTPUT_FOLDER = 'output'
+# OUTPUT_FOLDER = 'output'
 OUTPUT_FOLDER = 'public'
 
 # where the "cache" of partial generated content should be located
@@ -896,6 +895,6 @@
 # FAVICONS contains (name, file, size) tuples.
 # Used to create favicon link like this:
 # <link rel="name" href="file" sizes="size"/>
-#FAVICONS = (
+# FAVICONS = (
 #     ("icon", "/favicon.ico", "16x16"),
 #     ("icon", "/icon_128x128.png", "128x128"),
@@ -900,7 +899,6 @@
 #     ("icon", "/favicon.ico", "16x16"),
 #     ("icon", "/icon_128x128.png", "128x128"),
-#      ("shortcut icon", "/favicon.ico", "16x16"),
-#)
+# )
 
 # Show teasers (instead of full posts) in indexes? Defaults to False.
 # INDEX_TEASERS = False
@@ -1298,6 +1296,7 @@
 # environment but is not recommended for HTTP/2.0 when caching is used.
 # Defaults to True.
 # USE_BUNDLES = True
+USE_BUNDLES = False
 
 # Plugins you don't want to use. Be careful :-)
 # DISABLED_PLUGINS = ["render_galleries"]
diff --git a/files/favicon.ico b/files/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..00cf381e7e01e4603affa3da5a27d99b17943bc0
GIT binary patch
literal 1150
zc${NkU<5(|0R|wcz>vYhz#zuJz@P!dKp~(AL>vr&au!ew1ONa3A9VQq`SSurrNwCx
zsR`{9CQS@~|NcEQG5Ub&7*jG*vsFAyo|rc${x_eJ_usH1^}mFR@jEel{i~tz(G9rF
zx_|#Zr=7jkZ1;4x|5^c-|AloF{_`kG{5J!dVK%MczuktG|GEtc|DE04=K|fwi>&to
z(7n-KMi*Aiiu)g$>-k^JS^vLUkj;OsoPhtnSLXdUXiNETKD*?<VvzfPz4+As#^JG7
zfo6!p^ar|{t~xtE=Ks1$;r~4X9nM%LxZLxeTlC*!Q}chFipWpNS?Rg+7c6i!@$%jk
zvF-5xj4RLo8@qdN2I<|uf4^vdj@{pLK>Z=UjtfCy0K_11-3b#W*ns?n6g~`gzW#H4
zX07;dThsmzs7CI<f&E6S8@>MT=neYc(9qycD2x{@SYRK$<HY}jLs$O;**2iKYEQHJ
zb$V{}|A+wR9Y8zS@Wc<RV^HY2*uCfeyY|fb1GHZPB%T@*Fyq9m$p3R2eg1p77+fzY
zDNX{)Ndw)^1ofkMVR3P^u3y0U$Q?)j$Lv1y-!V9RA#&V>d0Fn-IyK_|?B4MI1yz3k
zUE&@8YlYkYQjGNYu9utq-+9W!{}H<n{!hJd|G!a4)FGg|`Ow_PoRgK76A@_iu(?0x
zfA!k3{}J0;|9c#q{XgWy*8hI%R{b~5Eqqv3TbGG1J%Yj?7%rwQZ7mtu<%NwIWrekk
z%}vR`_%i~@4RqeZ#0+5k!=8cR0XqZ30cHk<21W>GNMK;#|G>b&{s72tgouIUKkzfa
G^#K5gHl*tS

diff --git a/image/pypy-logo-nav.png b/image/pypy-logo-nav.png
new file mode 100644
index 0000000000000000000000000000000000000000..a148179fdec1a217eea30534a8790214e8d3ad9e
GIT binary patch
literal 2101
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
IGx16IFSE)30ssI2

diff --git a/pages/download.rst b/pages/download.rst
index 6f20654cdb2bf84c81a4661219e887754e71b1d4_cGFnZXMvZG93bmxvYWQucnN0..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_cGFnZXMvZG93bmxvYWQucnN0 100644
--- a/pages/download.rst
+++ b/pages/download.rst
@@ -427,6 +427,8 @@
     eac1308b7d523003a5f6d20f58406d52ab14611bcec750122ae513a5a35110db  pypy2.7-v7.3.0-linux32.tar.bz2
     f4950a54378ac637da2a6defa52d6ffed96af12fcd5d74e1182fb834883c9826  pypy2.7-v7.3.0-linux64.tar.bz2
     ca7b056b243a6221ad04fa7fc8696e36a2fb858396999dcaa31dbbae53c54474  pypy2.7-v7.3.0-osx64.tar.bz2
+    82e62869812aa2953a4f83e96c813cbc52973dfa5e42605e72b6610ac13f2481  pypy2.7-v7.3.0-ppc64.tar.bz2
+    592a6db77270b922ffa13cbeced9eabbc36c532ded9fc145f6a19073d3e78499  pypy2.7-v7.3.0-ppc64le.tar.bz2
     d254b82a00021339762198e41ba7f72316010d0f9bd4dcd7b0755185da9c005e  pypy2.7-v7.3.0-s390x.tar.bz2
     b0b25c7f8938ab0fedd8dedf26b9e73c490913b002b484c1b2f19d5844a518de  pypy2.7-v7.3.0-src.tar.bz2
     42dc84a277e7a5e635fe39bbd745f06135902c229a257123332b7555800d915b  pypy2.7-v7.3.0-src.zip
@@ -438,6 +440,8 @@
     7045b295d38ba0b5ee65bd3f078ca249fcf1de73fedeaab2d6ad78de2eab0f0e  pypy3.6-v7.3.0-linux32.tar.bz2
     d3d549e8f43de820ac3385b698b83fa59b4d7dd6cf3fe34c115f731e26ad8856  pypy3.6-v7.3.0-linux64.tar.bz2
     87b2545dad75fe3027b4b2108aceb9fdadcdd24e61ae312ac48b449fdd452bf3  pypy3.6-v7.3.0-osx64.tar.bz2
+    e2587e8da2abb12a86bf75941ce739124d2a1156367a9a3d729ac31d0841c300  pypy3.6-v7.3.0-ppc64.tar.bz2
+    d6f3b701313df69483b43ebdd21b9652ae5e808b2eea5fbffe3b74b82d2e7433  pypy3.6-v7.3.0-ppc64le.tar.bz2
     0fe2f7bbf42ea88b40954d7de773a43179a44f40656f2f58201524be70699544  pypy3.6-v7.3.0-s390x.tar.bz2
     48d12c15fbcbcf4a32882a883195e1f922997cde78e7a16d4342b9b521eefcfa  pypy3.6-v7.3.0-src.tar.bz2
     8ae9efd0a2aadb19e892bbd07eca8ef51536296a3ef93964149aceba511e79ca  pypy3.6-v7.3.0-src.zip
diff --git a/pages/features.rst b/pages/features.rst
index 6f20654cdb2bf84c81a4661219e887754e71b1d4_cGFnZXMvZmVhdHVyZXMucnN0..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_cGFnZXMvZmVhdHVyZXMucnN0 100644
--- a/pages/features.rst
+++ b/pages/features.rst
@@ -6,9 +6,6 @@
 .. link: 
 .. description: 
 
-What is PyPy?
-===========================================================
-
 PyPy is a replacement for CPython.  It is built using the RPython
 language that was co-developed with it.  The main reason to use it
 instead of CPython is speed: it runs generally faster (see next section).
diff --git a/plugins/__init__.py b/plugins/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_cGx1Z2lucy9fX2luaXRfXy5weQ==
--- /dev/null
+++ b/plugins/__init__.py
@@ -0,0 +1,1 @@
+# Plugin modules go here.
\ No newline at end of file
diff --git a/plugins/import_blogger/README.md b/plugins/import_blogger/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_cGx1Z2lucy9pbXBvcnRfYmxvZ2dlci9SRUFETUUubWQ=
--- /dev/null
+++ b/plugins/import_blogger/README.md
@@ -0,0 +1,16 @@
+This plugin will do a quick and dirty import of your Blogger site.
+
+To use it if you already have a Nikola site:
+
+```
+$ nikola plugin -i import_blogger
+$ nikola import_blogger your_blogger_dump_file
+```
+
+To use it if you don't already have a Nikola site:
+
+```
+$ nikola plugin -i import_blogger --user
+$ nikola import_blogger -o output_folder your_blogger_dump_file 
+```
+
diff --git a/plugins/import_blogger/import_blogger.plugin b/plugins/import_blogger/import_blogger.plugin
new file mode 100644
index 0000000000000000000000000000000000000000..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_cGx1Z2lucy9pbXBvcnRfYmxvZ2dlci9pbXBvcnRfYmxvZ2dlci5wbHVnaW4=
--- /dev/null
+++ b/plugins/import_blogger/import_blogger.plugin
@@ -0,0 +1,12 @@
+[Core]
+Name = import_blogger
+Module = import_blogger
+
+[Nikola]
+PluginCategory = Command
+
+[Documentation]
+Author = Roberto Alsina
+Version = 0.3
+Website = http://plugins.getnikola.com/#import_blogger
+Description = Import a blogger site from a XML dump.
diff --git a/plugins/import_blogger/import_blogger.py b/plugins/import_blogger/import_blogger.py
new file mode 100644
index 0000000000000000000000000000000000000000..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_cGx1Z2lucy9pbXBvcnRfYmxvZ2dlci9pbXBvcnRfYmxvZ2dlci5weQ==
--- /dev/null
+++ b/plugins/import_blogger/import_blogger.py
@@ -0,0 +1,234 @@
+# -*- coding: utf-8 -*-
+
+# Copyright © 2012-2014 Roberto Alsina and others.
+
+# 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.
+
+from __future__ import print_function, unicode_literals
+
+import datetime
+import os
+import time
+
+
+try:
+    from urlparse import urlparse
+except ImportError:
+    from urllib.parse import urlparse  # NOQA
+
+try:
+    import feedparser
+except ImportError:
+    feedparser = None  # NOQA
+
+from nikola.plugin_categories import Command
+from nikola import utils
+from nikola.utils import req_missing
+from nikola.plugins.basic_import import ImportMixin
+from nikola.plugins.command.init import SAMPLE_CONF, prepare_config
+
+LOGGER = utils.get_logger('import_blogger', utils.STDERR_HANDLER)
+
+
+class CommandImportBlogger(Command, ImportMixin):
+    """Import a blogger dump."""
+
+    name = "import_blogger"
+    needs_config = False
+    doc_usage = "[options] blogger_export_file"
+    doc_purpose = "import a blogger dump"
+    cmd_options = ImportMixin.cmd_options + [
+        {
+            'name': 'exclude_drafts',
+            'long': 'no-drafts',
+            'short': 'd',
+            'default': False,
+            'type': bool,
+            'help': "Don't import drafts",
+        },
+    ]
+
+    def _execute(self, options, args):
+        """Import a Blogger blog from an export file into a Nikola site."""
+        # Parse the data
+        if feedparser is None:
+            req_missing(['feedparser'], 'import Blogger dumps')
+            return
+
+        if not args:
+            print(self.help())
+            return
+
+        options['filename'] = args[0]
+        self.blogger_export_file = options['filename']
+        self.output_folder = options['output_folder']
+        self.import_into_existing_site = False
+        self.exclude_drafts = options['exclude_drafts']
+        self.url_map = {}
+        channel = self.get_channel_from_file(self.blogger_export_file)
+        self.context = self.populate_context(channel)
+        conf_template = self.generate_base_site()
+        self.context['REDIRECTIONS'] = self.configure_redirections(
+            self.url_map)
+
+        self.import_posts(channel)
+        self.write_urlmap_csv(
+            os.path.join(self.output_folder, 'url_map.csv'), self.url_map)
+
+        conf_out_path = self.get_configuration_output_path()
+        # if it tracebacks here, look a comment in
+        # basic_import.Import_Mixin.generate_base_site
+        conf_template_render = conf_template.render(**prepare_config(self.context))
+        self.write_configuration(conf_out_path, conf_template_render)
+
+    @classmethod
+    def get_channel_from_file(cls, filename):
+        if not os.path.isfile(filename):
+            raise Exception("Missing file: %s" % filename)
+        return feedparser.parse(filename)
+
+    @staticmethod
+    def populate_context(channel):
+        context = SAMPLE_CONF.copy()
+        # blogger doesn't include the language in the dump
+        context['DEFAULT_LANG'] = 'en'
+        context['BLOG_TITLE'] = channel.feed.title
+
+        context['BLOG_DESCRIPTION'] = ''  # Missing in the dump
+        if not channel.feed.link.endswith('/'):
+            context['SITE_URL'] = channel.feed.link + '/'
+        else:
+            context['SITE_URL'] = channel.feed.link
+
+        context['BLOG_EMAIL'] = channel.feed.author_detail.email
+        context['BLOG_AUTHOR'] = channel.feed.author_detail.name
+        context['POSTS'] = '''(
+            ("posts/*.txt", "posts", "post.tmpl"),
+            ("posts/*.rst", "posts", "post.tmpl"),
+            ("posts/*.html", "posts", "post.tmpl"),
+            )'''
+        context['PAGES'] = '''(
+            ("articles/*.txt", "articles", "story.tmpl"),
+            ("articles/*.rst", "articles", "story.tmpl"),
+            )'''
+        context['COMPILERS'] = '''{
+            "rest": ('.txt', '.rst'),
+            "markdown": ('.md', '.mdown', '.markdown', '.wp'),
+            "html": ('.html', '.htm')
+            }
+            '''
+
+        return context
+
+    def import_item(self, item, out_folder=None):
+        """Takes an item from the feed and creates a post file."""
+        if out_folder is None:
+            out_folder = 'posts'
+
+        # link is something like http://foo.com/2012/09/01/hello-world/
+        # So, take the path, utils.slugify it, and that's our slug
+        link = item.link
+        link_path = urlparse(link).path
+
+        title = item.title
+
+        # blogger supports empty titles, which Nikola doesn't
+        if not title:
+            LOGGER.warn("Empty title in post with URL {0}. Using NO_TITLE "
+                        "as placeholder, please fix.".format(link))
+            title = "NO_TITLE"
+
+        if link_path.lower().endswith('.html'):
+            link_path = link_path[:-5]
+        link_path = link_path.lstrip('/')
+
+        out_path = os.path.join(self.output_folder, out_folder, link_path)
+        link_fragments = link_path.split('/')
+        slug = utils.slugify(link_fragments[-1])
+
+        if not slug:  # should never happen
+            LOGGER.error("Error converting post:", title)
+            return
+
+        description = ''
+        post_date = datetime.datetime.fromtimestamp(time.mktime(
+            item.published_parsed))
+
+        for candidate in item.content:
+            if candidate.type == 'text/html':
+                content = candidate.value
+                break
+                #  FIXME: handle attachments
+
+        tags = []
+        for tag in item.tags:
+            if tag.scheme == 'http://www.blogger.com/atom/ns#':
+                tags.append(tag.term)
+
+        if item.get('app_draft'):
+            tags.append('draft')
+            is_draft = True
+        else:
+            is_draft = False
+
+        self.url_map[link] = (self.context['SITE_URL'] + out_folder + '/' + link_path + '.html')
+        if is_draft and self.exclude_drafts:
+            LOGGER.notice('Draft "{0}" will not be imported.'.format(title))
+        elif content.strip():
+            # If no content is found, no files are written.
+            content = self.transform_content(content)
+
+            self.write_metadata(
+                out_path + '.meta', title, slug, post_date, description, tags
+            )
+            self.write_content(out_path + '.html', content)
+        else:
+            LOGGER.warn('Not going to import "{0}" because it seems to contain'
+                        ' no content.'.format(title))
+
+    POST_TYPE_SCHEMAS = {
+        'http://schemas.google.com/blogger/2008/kind#post': 'posts',
+        'http://schemas.google.com/blogger/2008/kind#page': 'pages',
+        'http://schemas.google.com/blogger/2008/kind#settings': '',
+        'http://schemas.google.com/blogger/2008/kind#template': '',
+        'http://schemas.google.com/blogger/2008/kind#comment': '',
+    }
+
+    def process_item(self, item):
+        terms = set([tag.term for tag in item.tags])
+        post_types = terms & set(self.POST_TYPE_SCHEMAS.keys())
+
+        if not post_types:
+            LOGGER.warn("Unknown post_type for {0}".format(item.title))
+
+        elif len(post_types) == 1:
+            out_folder = self.POST_TYPE_SCHEMAS[post_types.pop()]
+            if out_folder:
+                self.import_item(item, out_folder)
+
+        else:
+            LOGGER.warn("Too many post_types for {0}".format(item.title))
+
+    def import_posts(self, channel):
+        for item in channel.entries:
+            self.process_item(item)
diff --git a/themes/pypy/assets/css/styles.css b/themes/pypy/assets/css/styles.css
new file mode 100644
index 0000000000000000000000000000000000000000..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_dGhlbWVzL3B5cHkvYXNzZXRzL2Nzcy9zdHlsZXMuY3Nz
--- /dev/null
+++ b/themes/pypy/assets/css/styles.css
@@ -0,0 +1,1387 @@
+/*! sanitize.css v8.0.0 | CC0 License | github.com/csstools/sanitize.css */
+*,
+::before,
+::after {
+  background-repeat: no-repeat;
+  box-sizing: border-box; }
+
+::before,
+::after {
+  text-decoration: inherit;
+  vertical-align: inherit; }
+
+html {
+  cursor: default;
+  font-family: system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+  line-height: 1.15;
+  -moz-tab-size: 4;
+  tab-size: 4;
+  -ms-text-size-adjust: 100%;
+  -webkit-text-size-adjust: 100%;
+  word-break: break-word; }
+
+body {
+  margin: 0; }
+
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0; }
+
+hr {
+  height: 0;
+  overflow: visible; }
+
+main {
+  display: block; }
+
+nav ol,
+nav ul {
+  list-style: none; }
+
+pre {
+  font-family: Menlo, Consolas, Roboto Mono, Ubuntu Monospace, Noto Mono, Oxygen Mono, Liberation Mono, monospace;
+  font-size: 1em; }
+
+a {
+  background-color: transparent; }
+
+abbr[title] {
+  text-decoration: underline;
+  text-decoration: underline dotted; }
+
+b,
+strong {
+  font-weight: bolder; }
+
+code,
+kbd,
+samp {
+  font-family: Menlo, Consolas, Roboto Mono, Ubuntu Monospace, Noto Mono, Oxygen Mono, Liberation Mono, monospace;
+  font-size: 1em; }
+
+small {
+  font-size: 80%; }
+
+::-moz-selection {
+  background-color: #b3d4fc;
+  color: #000;
+  text-shadow: none; }
+
+::selection {
+  background-color: #b3d4fc;
+  color: #000;
+  text-shadow: none; }
+
+audio,
+canvas,
+iframe,
+img,
+svg,
+video {
+  vertical-align: middle; }
+
+audio,
+video {
+  display: inline-block; }
+
+audio:not([controls]) {
+  display: none;
+  height: 0; }
+
+img {
+  border-style: none; }
+
+svg:not([fill]) {
+  fill: currentColor; }
+
+svg:not(:root) {
+  overflow: hidden; }
+
+table {
+  border-collapse: collapse; }
+
+button,
+input,
+select,
+textarea {
+  font-family: inherit;
+  font-size: inherit;
+  line-height: inherit; }
+
+button,
+input,
+select {
+  margin: 0; }
+
+button {
+  overflow: visible;
+  text-transform: none; }
+
+button,
+[type="button"],
+[type="reset"],
+[type="submit"] {
+  -webkit-appearance: button; }
+
+fieldset {
+  padding: 0.35em 0.75em 0.625em; }
+
+input {
+  overflow: visible; }
+
+legend {
+  color: inherit;
+  display: table;
+  max-width: 100%;
+  white-space: normal; }
+
+progress {
+  display: inline-block;
+  vertical-align: baseline; }
+
+select {
+  text-transform: none; }
+
+textarea {
+  margin: 0;
+  overflow: auto;
+  resize: vertical; }
+
+[type="checkbox"],
+[type="radio"] {
+  padding: 0; }
+
+[type="search"] {
+  -webkit-appearance: textfield;
+  outline-offset: -2px; }
+
+::-webkit-inner-spin-button,
+::-webkit-outer-spin-button {
+  height: auto; }
+
+::-webkit-input-placeholder {
+  color: inherit;
+  opacity: 0.54; }
+
+::-webkit-search-decoration {
+  -webkit-appearance: none; }
+
+::-webkit-file-upload-button {
+  -webkit-appearance: button;
+  font: inherit; }
+
+::-moz-focus-inner {
+  border-style: none;
+  padding: 0; }
+
+:-moz-focusring {
+  outline: 1px dotted ButtonText; }
+
+details {
+  display: block; }
+
+dialog {
+  background-color: white;
+  border: solid;
+  color: black;
+  display: block;
+  height: -moz-fit-content;
+  height: -webkit-fit-content;
+  height: fit-content;
+  left: 0;
+  margin: auto;
+  padding: 1em;
+  position: absolute;
+  right: 0;
+  width: -moz-fit-content;
+  width: -webkit-fit-content;
+  width: fit-content; }
+
+dialog:not([open]) {
+  display: none; }
+
+summary {
+  display: list-item; }
+
+canvas {
+  display: inline-block; }
+
+template {
+  display: none; }
+
+a,
+area,
+button,
+input,
+label,
+select,
+summary,
+textarea,
+[tabindex] {
+  -ms-touch-action: manipulation;
+  touch-action: manipulation; }
+
+[hidden] {
+  display: none; }
+
+[aria-busy="true"] {
+  cursor: progress; }
+
+[aria-controls] {
+  cursor: pointer; }
+
+[aria-disabled="true"],
+[disabled] {
+  cursor: not-allowed; }
+
+[aria-hidden="false"][hidden]:not(:focus) {
+  clip: rect(0, 0, 0, 0);
+  display: inherit;
+  position: absolute; }
+
+/*! Based on https://github.com/milligram/milligram */
+*,
+*:after,
+*:before {
+  box-sizing: inherit; }
+
+html {
+  box-sizing: border-box;
+  font-size: 62.5%; }
+
+body {
+  font-size: 1.6em;
+  font-weight: 300;
+  letter-spacing: .01em;
+  line-height: 1.6;
+  background-color: #fcfcfc; }
+
+body {
+  color: #4B545C;
+  font-family: 'Roboto', 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif; }
+
+b,
+strong {
+  font-weight: bold; }
+
+p {
+  margin-top: 0; }
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  font-weight: 300;
+  letter-spacing: -.1rem;
+  margin-bottom: 2.0rem;
+  margin-top: 0; }
+
+h1 {
+  font-size: 4.6rem;
+  line-height: 1.2; }
+
+h2 {
+  font-size: 3.6rem;
+  line-height: 1.25; }
+
+h3 {
+  font-size: 2.8rem;
+  line-height: 1.3; }
+
+h4 {
+  font-size: 2.2rem;
+  letter-spacing: -.08rem;
+  line-height: 1.35; }
+
+h5 {
+  font-size: 1.8rem;
+  letter-spacing: -.05rem;
+  line-height: 1.5; }
+
+h6 {
+  font-size: 1.6rem;
+  letter-spacing: 0;
+  line-height: 1.4; }
+
+blockquote {
+  border-left: 0.3rem solid #d1d1d1;
+  margin-left: 0;
+  margin-right: 0;
+  padding: 1rem 1.5rem; }
+  blockquote *:last-child {
+    margin-bottom: 0; }
+
+.button,
+button,
+input[type='button'],
+input[type='reset'],
+input[type='submit'] {
+  background-color: #1890ff;
+  border: 0.1rem solid #1890ff;
+  border-radius: .4rem;
+  color: #fcfcfc;
+  cursor: pointer;
+  display: inline-block;
+  font-size: 1.1rem;
+  font-weight: 700;
+  height: 3.8rem;
+  letter-spacing: .1rem;
+  line-height: 3.8rem;
+  padding: 0 3.0rem;
+  text-align: center;
+  text-decoration: none;
+  text-transform: uppercase;
+  white-space: nowrap;
+  -webkit-box-shadow: 0px 5px 10px 0px rgba(24, 144, 255, 0.2);
+    -webkit-box-shadow--moz-box-shadow: 0px 5px 10px 0px rgba(24, 144, 255, 0.2);
+    -webkit-box-shadow-box-shadow: 0px 5px 10px 0px rgba(24, 144, 255, 0.2); }
+  .button:focus, .button:hover,
+  button:focus,
+  button:hover,
+  input[type='button']:focus,
+  input[type='button']:hover,
+  input[type='reset']:focus,
+  input[type='reset']:hover,
+  input[type='submit']:focus,
+  input[type='submit']:hover {
+    background-color: #4B545C;
+    border-color: #4B545C;
+    color: #fcfcfc;
+    outline: 0;
+    -webkit-box-shadow: 0px 5px 10px 0px rgba(75, 84, 92, 0.2);
+      -webkit-box-shadow--moz-box-shadow: 0px 5px 10px 0px rgba(75, 84, 92, 0.2);
+      -webkit-box-shadow-box-shadow: 0px 5px 10px 0px rgba(75, 84, 92, 0.2); }
+  .button[disabled],
+  button[disabled],
+  input[type='button'][disabled],
+  input[type='reset'][disabled],
+  input[type='submit'][disabled] {
+    cursor: default;
+    opacity: .5; }
+    .button[disabled]:focus, .button[disabled]:hover,
+    button[disabled]:focus,
+    button[disabled]:hover,
+    input[type='button'][disabled]:focus,
+    input[type='button'][disabled]:hover,
+    input[type='reset'][disabled]:focus,
+    input[type='reset'][disabled]:hover,
+    input[type='submit'][disabled]:focus,
+    input[type='submit'][disabled]:hover {
+      background-color: #1890ff;
+      border-color: #1890ff; }
+  .button.button-outline,
+  button.button-outline,
+  input[type='button'].button-outline,
+  input[type='reset'].button-outline,
+  input[type='submit'].button-outline {
+    background-color: transparent;
+    color: #1890ff; }
+    .button.button-outline:focus, .button.button-outline:hover,
+    button.button-outline:focus,
+    button.button-outline:hover,
+    input[type='button'].button-outline:focus,
+    input[type='button'].button-outline:hover,
+    input[type='reset'].button-outline:focus,
+    input[type='reset'].button-outline:hover,
+    input[type='submit'].button-outline:focus,
+    input[type='submit'].button-outline:hover {
+      background-color: transparent;
+      border-color: #4B545C;
+      color: #4B545C; }
+    .button.button-outline[disabled]:focus, .button.button-outline[disabled]:hover,
+    button.button-outline[disabled]:focus,
+    button.button-outline[disabled]:hover,
+    input[type='button'].button-outline[disabled]:focus,
+    input[type='button'].button-outline[disabled]:hover,
+    input[type='reset'].button-outline[disabled]:focus,
+    input[type='reset'].button-outline[disabled]:hover,
+    input[type='submit'].button-outline[disabled]:focus,
+    input[type='submit'].button-outline[disabled]:hover {
+      border-color: inherit;
+      color: #1890ff; }
+  .button.button-clear,
+  button.button-clear,
+  input[type='button'].button-clear,
+  input[type='reset'].button-clear,
+  input[type='submit'].button-clear {
+    background-color: transparent;
+    border-color: transparent;
+    color: #1890ff; }
+    .button.button-clear:focus, .button.button-clear:hover,
+    button.button-clear:focus,
+    button.button-clear:hover,
+    input[type='button'].button-clear:focus,
+    input[type='button'].button-clear:hover,
+    input[type='reset'].button-clear:focus,
+    input[type='reset'].button-clear:hover,
+    input[type='submit'].button-clear:focus,
+    input[type='submit'].button-clear:hover {
+      background-color: transparent;
+      border-color: transparent;
+      color: #4B545C; }
+    .button.button-clear[disabled]:focus, .button.button-clear[disabled]:hover,
+    button.button-clear[disabled]:focus,
+    button.button-clear[disabled]:hover,
+    input[type='button'].button-clear[disabled]:focus,
+    input[type='button'].button-clear[disabled]:hover,
+    input[type='reset'].button-clear[disabled]:focus,
+    input[type='reset'].button-clear[disabled]:hover,
+    input[type='submit'].button-clear[disabled]:focus,
+    input[type='submit'].button-clear[disabled]:hover {
+      color: #1890ff; }
+
+code {
+  background: #f4f5f6;
+  border-radius: .4rem;
+  font-size: 86%;
+  margin: 0 .2rem;
+  padding: 0.8rem 1rem;
+  white-space: normal; }
+
+pre {
+  border-left: 0.3rem solid #1890ff;
+  padding-left: 2rem;
+  background: #f4f5f6;
+  overflow-y: hidden; }
+  pre > code {
+    border-radius: 0;
+    display: block;
+    padding: 1rem 1.5rem;
+    white-space: pre; }
+
+hr {
+  border: 0;
+  border-top: 0.1rem solid #d1d1d1;
+  margin: 3.0rem 0; }
+
+input[type='email'],
+input[type='number'],
+input[type='password'],
+input[type='search'],
+input[type='tel'],
+input[type='text'],
+input[type='url'],
+input[type='color'],
+input[type='date'],
+input[type='month'],
+input[type='week'],
+input[type='datetime'],
+input[type='datetime-local'],
+input:not([type]),
+textarea,
+select {
+  -webkit-appearance: none;
+    -webkit-appearance--moz-appearance: none;
+  appearance: none;
+  background-color: transparent;
+  color: #4B545C;
+  border: 0.1rem solid #d1d1d1;
+  border-radius: .4rem;
+  box-shadow: none;
+  box-sizing: inherit;
+  height: 3.8rem;
+  padding: .6rem 1.0rem;
+  width: 100%; }
+  input[type='email']:focus,
+  input[type='number']:focus,
+  input[type='password']:focus,
+  input[type='search']:focus,
+  input[type='tel']:focus,
+  input[type='text']:focus,
+  input[type='url']:focus,
+  input[type='color']:focus,
+  input[type='date']:focus,
+  input[type='month']:focus,
+  input[type='week']:focus,
+  input[type='datetime']:focus,
+  input[type='datetime-local']:focus,
+  input:not([type]):focus,
+  textarea:focus,
+  select:focus {
+    border-color: #1890ff;
+    outline: 0; }
+
+select {
+  background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="14" viewBox="0 0 29 14" width="29"><path fill="%23d1d1d1" d="M9.37727 3.625l5.08154 6.93523L19.54036 3.625"/></svg>') center right no-repeat;
+  padding-right: 3.0rem; }
+  select:focus {
+    background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="14" viewBox="0 0 29 14" width="29"><path fill="%239b4dca" d="M9.37727 3.625l5.08154 6.93523L19.54036 3.625"/></svg>'); }
+
+textarea {
+  min-height: 6.5rem; }
+
+label,
+legend {
+  display: block;
+  font-size: 1.6rem;
+  font-weight: 700;
+  margin-bottom: .5rem; }
+
+fieldset {
+  border-width: 0;
+  padding: 0; }
+
+input[type='checkbox'],
+input[type='radio'] {
+  display: inline; }
+
+.label-inline {
+  display: inline-block;
+  font-weight: normal;
+  margin-left: .5rem; }
+
+a {
+  color: #1890ff;
+  text-decoration: none; }
+  a:focus, a:hover {
+    color: #4B545C; }
+
+dl,
+ol,
+ul {
+  list-style: none;
+  margin-top: 0;
+  padding-left: 3rem; }
+  dl dl,
+  dl ol,
+  dl ul,
+  ol dl,
+  ol ol,
+  ol ul,
+  ul dl,
+  ul ol,
+  ul ul {
+    font-size: 90%;
+    margin: 1.5rem 0 1.5rem 3.0rem; }
+
+ol {
+  list-style: decimal inside;
+  list-style-position: outside; }
+
+ul {
+  list-style: circle inside;
+  list-style-position: outside; }
+
+.button,
+button,
+dd,
+dt,
+li {
+  margin-bottom: 1.0rem; }
+
+fieldset,
+input,
+select,
+textarea {
+  margin-bottom: 1.5rem; }
+
+blockquote,
+dl,
+figure,
+form,
+ol,
+p,
+pre,
+table,
+ul {
+  margin-bottom: 2.5rem; }
+
+table {
+  border-spacing: 0;
+  width: 100%; }
+
+td,
+th {
+  border-bottom: 0.1rem solid #e1e1e1;
+  padding: 1.2rem 1.5rem;
+  text-align: left; }
+  td:first-child,
+  th:first-child {
+    padding-left: 0; }
+  td:last-child,
+  th:last-child {
+    padding-right: 0; }
+
+@media screen and (max-width: 40rem) {
+  table {
+    border-spacing: 0;
+    display: flex;
+    width: 100%; }
+    table thead {
+      border-right: solid 0.1rem #e1e1e1; }
+      table thead td,
+      table thead th {
+        padding-left: 0; }
+        table thead td:first-child,
+        table thead th:first-child {
+          padding-left: 0; }
+        table thead td:last-child,
+        table thead th:last-child {
+          padding-right: 1.2rem; }
+    table tbody {
+      display: flex;
+      overflow-x: auto;
+      white-space: nowrap; }
+      table tbody tr {
+        border-right: solid 0.1rem #e1e1e1; }
+        table tbody tr:last-child {
+          border-right: none; }
+    table td,
+    table th {
+      display: block; }
+      table td:first-child,
+      table th:first-child {
+        padding-left: 1.2rem; }
+      table td:last-child,
+      table th:last-child {
+        padding-right: 1.2rem; } }
+
+img {
+  max-width: 100%; }
+
+.p-0 {
+  padding: 0; }
+
+.pt-0 {
+  padding-top: 0; }
+
+.pb-0 {
+  padding-bottom: 0; }
+
+.pl-0 {
+  padding-left: 0; }
+
+.pr-0 {
+  padding-right: 0; }
+
+.py-0 {
+  padding-top: 0;
+  padding-bottom: 0; }
+
+.px-0 {
+  padding-left: 0;
+  padding-right: 0; }
+
+.p-1 {
+  padding: 1rem; }
+
+.pt-1 {
+  padding-top: 1rem; }
+
+.pb-1 {
+  padding-bottom: 1rem; }
+
+.pl-1 {
+  padding-left: 1rem; }
+
+.pr-1 {
+  padding-right: 1rem; }
+
+.py-1 {
+  padding-top: 1rem;
+  padding-bottom: 1rem; }
+
+.px-1 {
+  padding-left: 1rem;
+  padding-right: 1rem; }
+
+.p-2 {
+  padding: 2rem; }
+
+.pt-2 {
+  padding-top: 2rem; }
+
+.pb-2 {
+  padding-bottom: 2rem; }
+
+.pl-2 {
+  padding-left: 2rem; }
+
+.pr-2 {
+  padding-right: 2rem; }
+
+.py-2 {
+  padding-top: 2rem;
+  padding-bottom: 2rem; }
+
+.px-2 {
+  padding-left: 2rem;
+  padding-right: 2rem; }
+
+.p-3 {
+  padding: 3rem; }
+
+.pt-3 {
+  padding-top: 3rem; }
+
+.pb-3 {
+  padding-bottom: 3rem; }
+
+.pl-3 {
+  padding-left: 3rem; }
+
+.pr-3 {
+  padding-right: 3rem; }
+
+.py-3 {
+  padding-top: 3rem;
+  padding-bottom: 3rem; }
+
+.px-3 {
+  padding-left: 3rem;
+  padding-right: 3rem; }
+
+.p-4 {
+  padding: 6rem; }
+
+.pt-4 {
+  padding-top: 6rem; }
+
+.pb-4 {
+  padding-bottom: 6rem; }
+
+.pl-4 {
+  padding-left: 6rem; }
+
+.pr-4 {
+  padding-right: 6rem; }
+
+.py-4 {
+  padding-top: 6rem;
+  padding-bottom: 6rem; }
+
+.px-4 {
+  padding-left: 6rem;
+  padding-right: 6rem; }
+
+.p-5 {
+  padding: 8rem; }
+
+.pt-5 {
+  padding-top: 8rem; }
+
+.pb-5 {
+  padding-bottom: 8rem; }
+
+.pl-5 {
+  padding-left: 8rem; }
+
+.pr-5 {
+  padding-right: 8rem; }
+
+.py-5 {
+  padding-top: 8rem;
+  padding-bottom: 8rem; }
+
+.px-5 {
+  padding-left: 8rem;
+  padding-right: 8rem; }
+
+.m-0 {
+  margin: 0; }
+
+.mt-0 {
+  margin-top: 0; }
+
+.mb-0 {
+  margin-bottom: 0; }
+
+.ml-0 {
+  margin-left: 0; }
+
+.mr-0 {
+  margin-right: 0; }
+
+.my-0 {
+  margin-top: 0;
+  margin-bottom: 0; }
+
+.mx-0 {
+  margin-left: 0;
+  margin-right: 0; }
+
+.m-1 {
+  margin: 1rem; }
+
+.mt-1 {
+  margin-top: 1rem; }
+
+.mb-1 {
+  margin-bottom: 1rem; }
+
+.ml-1 {
+  margin-left: 1rem; }
+
+.mr-1 {
+  margin-right: 1rem; }
+
+.my-1 {
+  margin-top: 1rem;
+  margin-bottom: 1rem; }
+
+.mx-1 {
+  margin-left: 1rem;
+  margin-right: 1rem; }
+
+.m-2 {
+  margin: 2rem; }
+
+.mt-2 {
+  margin-top: 2rem; }
+
+.mb-2 {
+  margin-bottom: 2rem; }
+
+.ml-2 {
+  margin-left: 2rem; }
+
+.mr-2 {
+  margin-right: 2rem; }
+
+.my-2 {
+  margin-top: 2rem;
+  margin-bottom: 2rem; }
+
+.mx-2 {
+  margin-left: 2rem;
+  margin-right: 2rem; }
+
+.m-3 {
+  margin: 3rem; }
+
+.mt-3 {
+  margin-top: 3rem; }
+
+.mb-3 {
+  margin-bottom: 3rem; }
+
+.ml-3 {
+  margin-left: 3rem; }
+
+.mr-3 {
+  margin-right: 3rem; }
+
+.my-3 {
+  margin-top: 3rem;
+  margin-bottom: 3rem; }
+
+.mx-3 {
+  margin-left: 3rem;
+  margin-right: 3rem; }
+
+.m-4 {
+  margin: 6rem; }
+
+.mt-4 {
+  margin-top: 6rem; }
+
+.mb-4 {
+  margin-bottom: 6rem; }
+
+.ml-4 {
+  margin-left: 6rem; }
+
+.mr-4 {
+  margin-right: 6rem; }
+
+.my-4 {
+  margin-top: 6rem;
+  margin-bottom: 6rem; }
+
+.mx-4 {
+  margin-left: 6rem;
+  margin-right: 6rem; }
+
+.m-5 {
+  margin: 8rem; }
+
+.mt-5 {
+  margin-top: 8rem; }
+
+.mb-5 {
+  margin-bottom: 8rem; }
+
+.ml-5 {
+  margin-left: 8rem; }
+
+.mr-5 {
+  margin-right: 8rem; }
+
+.my-5 {
+  margin-top: 8rem;
+  margin-bottom: 8rem; }
+
+.mx-5 {
+  margin-left: 8rem;
+  margin-right: 8rem; }
+
+.mx-auto {
+  margin-left: auto;
+  margin-right: auto; }
+
+.text-justify {
+  text-align: justify; }
+
+.text-left {
+  text-align: left; }
+
+.text-center {
+  text-align: center; }
+
+.text-left {
+  text-align: right; }
+
+.text-sm {
+  font-size: 1rem; }
+
+.text-lg {
+  font-size: 2rem; }
+
+.text-xl {
+  font-size: 2.5rem; }
+
+.display-none {
+  display: none; }
+
+.display-inline {
+  display: inline; }
+
+.display-inline-block {
+  display: inline-block; }
+
+.display-block {
+  display: block; }
+
+.display-flex {
+  display: flex; }
+
+.display-inline-flex {
+  display: inline-flex; }
+
+.display-table {
+  display: table; }
+
+.clearfix:after {
+  clear: both;
+  content: ' ';
+  display: table; }
+
+.float-left {
+  float: left; }
+
+.float-right {
+  float: right; }
+
+.container {
+  margin: 0 auto;
+  max-width: 112.0rem;
+  padding: 0 2.0rem;
+  position: relative;
+  width: 100%; }
+
+.row {
+  display: flex;
+  flex-direction: column;
+  padding: 0;
+  width: 100%; }
+  .row.row-no-padding {
+    padding: 0; }
+    .row.row-no-padding > .column {
+      padding: 0; }
+  .row.row-wrap {
+    flex-wrap: wrap; }
+  .row.row-top {
+    align-items: flex-start; }
+  .row.row-bottom {
+    align-items: flex-end; }
+  .row.row-center {
+    align-items: center; }
+  .row.row-stretch {
+    align-items: stretch; }
+  .row.row-baseline {
+    align-items: baseline; }
+  .row .column {
+    display: block;
+    flex: 1 1 auto;
+    margin-left: 0;
+    max-width: 100%;
+    width: 100%; }
+    .row .column.column-offset-10 {
+      margin-left: 10%; }
+    .row .column.column-offset-20 {
+      margin-left: 20%; }
+    .row .column.column-offset-25 {
+      margin-left: 25%; }
+    .row .column.column-offset-33, .row .column.column-offset-34 {
+      margin-left: 33.3333%; }
+    .row .column.column-offset-50 {
+      margin-left: 50%; }
+    .row .column.column-offset-66, .row .column.column-offset-67 {
+      margin-left: 66.6666%; }
+    .row .column.column-offset-75 {
+      margin-left: 75%; }
+    .row .column.column-offset-80 {
+      margin-left: 80%; }
+    .row .column.column-offset-90 {
+      margin-left: 90%; }
+    .row .column.column-10 {
+      flex: 0 0 10%;
+      max-width: 10%; }
+    .row .column.column-20 {
+      flex: 0 0 20%;
+      max-width: 20%; }
+    .row .column.column-25 {
+      flex: 0 0 25%;
+      max-width: 25%; }
+    .row .column.column-33, .row .column.column-34 {
+      flex: 0 0 33.3333%;
+      max-width: 33.3333%; }
+    .row .column.column-40 {
+      flex: 0 0 40%;
+      max-width: 40%; }
+    .row .column.column-50 {
+      flex: 0 0 50%;
+      max-width: 50%; }
+    .row .column.column-60 {
+      flex: 0 0 60%;
+      max-width: 60%; }
+    .row .column.column-66, .row .column.column-67 {
+      flex: 0 0 66.6666%;
+      max-width: 66.6666%; }
+    .row .column.column-75 {
+      flex: 0 0 75%;
+      max-width: 75%; }
+    .row .column.column-80 {
+      flex: 0 0 80%;
+      max-width: 80%; }
+    .row .column.column-90 {
+      flex: 0 0 90%;
+      max-width: 90%; }
+    .row .column .column-top {
+      align-self: flex-start; }
+    .row .column .column-bottom {
+      align-self: flex-end; }
+    .row .column .column-center {
+      align-self: center; }
+
+@media (min-width: 40rem) {
+  .row {
+    flex-direction: row;
+    margin-left: -1.0rem;
+    width: calc(100% + 2.0rem); }
+    .row .column {
+      margin-bottom: inherit;
+      padding: 0 1.0rem; } }
+
+@font-face {
+  font-family: 'ico';
+  src: url("../font/ico.eot?13319731");
+  src: url("../font/ico.eot?13319731#iefix") format("embedded-opentype"), url("../font/ico.woff2?13319731") format("woff2"), url("../font/ico.woff?13319731") format("woff"), url("../font/ico.ttf?13319731") format("truetype"), url("../font/ico.svg?13319731#ico") format("svg");
+  font-weight: normal;
+  font-style: normal; }
+
+/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
+/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
+/*
+  @media screen and (-webkit-min-device-pixel-ratio:0) {
+    @font-face {
+      font-family: 'ico';
+      src: url('../font/ico.svg?13319731#ico') format('svg');
+    }
+  }
+  */
+[class^="icon-"]:before, [class*=" icon-"]:before {
+  font-family: "ico";
+  font-style: normal;
+  font-weight: normal;
+  speak: none;
+  display: inline-block;
+  text-decoration: inherit;
+  width: 1em;
+  margin-right: .2em;
+  text-align: center;
+  /* opacity: .8; */
+  /* For safety - reset parent styles, that can break glyph codes*/
+  font-variant: normal;
+  text-transform: none;
+  /* fix buttons height, for twitter bootstrap */
+  line-height: 1em;
+  /* Animation center compensation - margins should be symmetric */
+  /* remove if not needed */
+  margin-left: .2em;
+  /* you can be more comfortable with increased icons size */
+  /* font-size: 120%; */
+  /* Font smoothing. That was taken from TWBS */
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  /* Uncomment for 3D effect */
+  /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ }
+
+/*
+     Animation example, for spinners
+  */
+.animate-spin {
+  -moz-animation: spin 2s infinite linear;
+  -o-animation: spin 2s infinite linear;
+  -webkit-animation: spin 2s infinite linear;
+  animation: spin 2s infinite linear;
+  display: inline-block; }
+
+@-moz-keyframes spin {
+  0% {
+    -moz-transform: rotate(0deg);
+    -o-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg); }
+  100% {
+    -moz-transform: rotate(359deg);
+    -o-transform: rotate(359deg);
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg); } }
+
+@-webkit-keyframes spin {
+  0% {
+    -moz-transform: rotate(0deg);
+    -o-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg); }
+  100% {
+    -moz-transform: rotate(359deg);
+    -o-transform: rotate(359deg);
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg); } }
+
+@-o-keyframes spin {
+  0% {
+    -moz-transform: rotate(0deg);
+    -o-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg); }
+  100% {
+    -moz-transform: rotate(359deg);
+    -o-transform: rotate(359deg);
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg); } }
+
+@-ms-keyframes spin {
+  0% {
+    -moz-transform: rotate(0deg);
+    -o-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg); }
+  100% {
+    -moz-transform: rotate(359deg);
+    -o-transform: rotate(359deg);
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg); } }
+
+@keyframes spin {
+  0% {
+    -moz-transform: rotate(0deg);
+    -o-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg); }
+  100% {
+    -moz-transform: rotate(359deg);
+    -o-transform: rotate(359deg);
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg); } }
+
+.icon-menu-outline:before {
+  content: '\e800'; }
+
+.icon-github-circled:before {
+  content: '\f09b'; }
+
+.icon-rss:before {
+  content: '\f09e'; }
+
+.icon-menu:before {
+  content: '\f0c9'; }
+
+.icon-spinner:before {
+  content: '\f110'; }
+
+.icon-code:before {
+  content: '\f121'; }
+
+.icon-bitbucket:before {
+  content: '\f171'; }
+
+.icon-circle-notch:before {
+  content: '\f1ce'; }
+
+.icon-github-text:before {
+  content: '\f307'; }
+
+.navbar {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+  margin-top: 2rem;
+  padding-left: 0;
+  padding-inline-start: 0; }
+
+.navbar-item {
+  padding: 0.5rem 0.66rem;
+  margin: 0 0.2rem; }
+
+.nav-item-active {
+  border-radius: .4rem;
+  border: 0.1rem solid #1890ff; }
+  .nav-item-active:hover {
+    border-color: #4B545C; }
+
+.navbar-menu {
+  display: none;
+  position: fixed;
+  right: 0;
+  top: 0;
+  z-index: 100;
+  padding: 0.5rem 0.66rem;
+  margin-top: 2rem;
+  margin-right: 2rem;
+  border-radius: 50%;
+  background-color: #fff; }
+
+@media screen and (max-width: 60rem) {
+  .navbar {
+    justify-content: center; } }
+
+.navbar-smart {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+  margin-top: 2rem;
+  padding-left: 0;
+  padding-inline-start: 0; }
+
+@media screen and (max-width: 60rem) {
+  .navbar-menu-on {
+    display: block; }
+  .navbar-smart {
+    display: none;
+    flex-direction: column;
+    align-items: flex-start;
+    position: fixed;
+    left: 0;
+    top: 0;
+    width: 100%;
+    z-index: 100;
+    padding: 1rem;
+    background-color: rgba(255, 255, 255, 0.98); }
+  .navbar-open {
+    display: flex; } }
+
+.shadow {
+  -webkit-box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.3);
+  -moz-box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.3);
+  box-shadow: 0px 5px 10px 0px rgba(0, 0, 0, 0.3); }
+
+.shadow-lg {
+  -webkit-box-shadow: 0px 10px 20px 0px rgba(0, 0, 0, 0.8);
+  -moz-box-shadow: 0px 10px 20px 0px rgba(0, 0, 0, 0.8);
+  box-shadow: 0px 10px 20px 0px rgba(0, 0, 0, 0.8); }
+
+.active {
+  -webkit-box-shadow: 0px 5px 10px 0px rgba(24, 144, 255, 0.2);
+  -moz-box-shadow: 0px 5px 10px 0px rgba(24, 144, 255, 0.2);
+  box-shadow: 0px 5px 10px 0px rgba(24, 144, 255, 0.2); }
+
+.shadow-secondary {
+  -webkit-box-shadow: 0px 5px 10px 0px rgba(75, 84, 92, 0.2);
+  -moz-box-shadow: 0px 5px 10px 0px rgba(75, 84, 92, 0.2);
+  box-shadow: 0px 5px 10px 0px rgba(75, 84, 92, 0.2); }
+
+.muted {
+  color: #8B9298; }
+
+@media screen and (max-width: 40rem) {
+  .row .column {
+    text-align: center; } }
+
+.person {
+  min-height: 190px;
+  margin-bottom: 8rem; }
+  .person h3 {
+    margin-bottom: 1rem; }
+  .person img {
+    float: left;
+    max-width: 150px;
+    margin-right: 2rem;
+    margin-bottom: 1rem; }
+  .person p {
+    margin-left: 150px; }
+
+@media screen and (max-width: 40rem) {
+  .person img {
+    float: none; }
+  .person p {
+    margin-left: 0; } }
+
+.hljs {
+  display: block;
+  overflow-x: auto;
+  padding: 0.5em;
+  color: #9006b3;
+  background: #f4f5f6; }
+
+.hljs-comment,
+.hljs-quote {
+  color: #bbbcc2;
+  font-style: italic; }
+
+.hljs-doctag,
+.hljs-keyword,
+.hljs-formula {
+  color: #dd4600; }
+
+.hljs-section,
+.hljs-name,
+.hljs-selector-tag,
+.hljs-deletion,
+.hljs-subst {
+  color: #e45649; }
+
+.hljs-literal {
+  color: #009c15; }
+
+.hljs-string,
+.hljs-regexp,
+.hljs-addition,
+.hljs-attribute,
+.hljs-meta-string {
+  color: #2e912c; }
+
+.hljs-built_in,
+.hljs-class .hljs-title {
+  color: #c1ae01; }
+
+.hljs-attr,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-type,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo,
+.hljs-number {
+  color: #b97f00; }
+
+.hljs-symbol,
+.hljs-bullet,
+.hljs-link,
+.hljs-meta,
+.hljs-selector-id,
+.hljs-title {
+  color: #2263f0; }
+
+.hljs-emphasis {
+  font-style: italic; }
+
+.hljs-strong {
+  font-weight: bold; }
+
+.hljs-link {
+  text-decoration: underline; }
diff --git a/themes/pypy/assets/css/styles.min.css b/themes/pypy/assets/css/styles.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_dGhlbWVzL3B5cHkvYXNzZXRzL2Nzcy9zdHlsZXMubWluLmNzcw==
--- /dev/null
+++ b/themes/pypy/assets/css/styles.min.css
@@ -0,0 +1,1 @@
+/*! sanitize.css v8.0.0 | CC0 License | github.com/csstools/sanitize.css */*,::after,::before{background-repeat:no-repeat;box-sizing:border-box}::after,::before{text-decoration:inherit;vertical-align:inherit}html{cursor:default;font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";line-height:1.15;-moz-tab-size:4;tab-size:4;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;word-break:break-word}body{margin:0}h1{font-size:2em;margin:.67em 0}hr{height:0;overflow:visible}main{display:block}nav ol,nav ul{list-style:none}pre{font-family:Menlo,Consolas,Roboto Mono,Ubuntu Monospace,Noto Mono,Oxygen Mono,Liberation Mono,monospace;font-size:1em}a{background-color:transparent}abbr[title]{text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:Menlo,Consolas,Roboto Mono,Ubuntu Monospace,Noto Mono,Oxygen Mono,Liberation Mono,monospace;font-size:1em}small{font-size:80%}::-moz-selection{background-color:#b3d4fc;color:#000;text-shadow:none}::selection{background-color:#b3d4fc;color:#000;text-shadow:none}audio,canvas,iframe,img,svg,video{vertical-align:middle}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not([fill]){fill:currentColor}svg:not(:root){overflow:hidden}table{border-collapse:collapse}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}button,input,select{margin:0}button{overflow:visible;text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}fieldset{padding:.35em .75em .625em}input{overflow:visible}legend{color:inherit;display:table;max-width:100%;white-space:normal}progress{display:inline-block;vertical-align:baseline}select{text-transform:none}textarea{margin:0;overflow:auto;resize:vertical}[type=checkbox],[type=radio]{padding:0}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}details{display:block}dialog{background-color:#fff;border:solid;color:#000;display:block;height:-moz-fit-content;height:-webkit-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:-webkit-fit-content;width:fit-content}dialog:not([open]){display:none}summary{display:list-item}canvas{display:inline-block}template{display:none}[tabindex],a,area,button,input,label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}[hidden]{display:none}[aria-busy=true]{cursor:progress}[aria-controls]{cursor:pointer}[aria-disabled=true],[disabled]{cursor:not-allowed}[aria-hidden=false][hidden]:not(:focus){clip:rect(0,0,0,0);display:inherit;position:absolute}/*! Based on https://github.com/milligram/milligram */*,:after,:before{box-sizing:inherit}html{box-sizing:border-box;font-size:62.5%}body{font-size:1.6em;font-weight:300;letter-spacing:.01em;line-height:1.6;background-color:#fcfcfc}body{color:#4b545c;font-family:Roboto,'Helvetica Neue',Helvetica,Arial,sans-serif}b,strong{font-weight:700}p{margin-top:0}h1,h2,h3,h4,h5,h6{font-weight:300;letter-spacing:-.1rem;margin-bottom:2rem;margin-top:0}h1{font-size:4.6rem;line-height:1.2}h2{font-size:3.6rem;line-height:1.25}h3{font-size:2.8rem;line-height:1.3}h4{font-size:2.2rem;letter-spacing:-.08rem;line-height:1.35}h5{font-size:1.8rem;letter-spacing:-.05rem;line-height:1.5}h6{font-size:1.6rem;letter-spacing:0;line-height:1.4}blockquote{border-left:.3rem solid #d1d1d1;margin-left:0;margin-right:0;padding:1rem 1.5rem}blockquote :last-child{margin-bottom:0}.button,button,input[type=button],input[type=reset],input[type=submit]{background-color:#1890ff;border:.1rem solid #1890ff;border-radius:.4rem;color:#fcfcfc;cursor:pointer;display:inline-block;font-size:1.1rem;font-weight:700;height:3.8rem;letter-spacing:.1rem;line-height:3.8rem;padding:0 3rem;text-align:center;text-decoration:none;text-transform:uppercase;white-space:nowrap;-webkit-box-shadow:0 5px 10px 0 rgba(24,144,255,.2);-webkit-box-shadow--moz-box-shadow:0 5px 10px 0 rgba(24,144,255,.2);-webkit-box-shadow-box-shadow:0 5px 10px 0 rgba(24,144,255,.2)}.button:focus,.button:hover,button:focus,button:hover,input[type=button]:focus,input[type=button]:hover,input[type=reset]:focus,input[type=reset]:hover,input[type=submit]:focus,input[type=submit]:hover{background-color:#4b545c;border-color:#4b545c;color:#fcfcfc;outline:0;-webkit-box-shadow:0 5px 10px 0 rgba(75,84,92,.2);-webkit-box-shadow--moz-box-shadow:0 5px 10px 0 rgba(75,84,92,.2);-webkit-box-shadow-box-shadow:0 5px 10px 0 rgba(75,84,92,.2)}.button[disabled],button[disabled],input[type=button][disabled],input[type=reset][disabled],input[type=submit][disabled]{cursor:default;opacity:.5}.button[disabled]:focus,.button[disabled]:hover,button[disabled]:focus,button[disabled]:hover,input[type=button][disabled]:focus,input[type=button][disabled]:hover,input[type=reset][disabled]:focus,input[type=reset][disabled]:hover,input[type=submit][disabled]:focus,input[type=submit][disabled]:hover{background-color:#1890ff;border-color:#1890ff}.button.button-outline,button.button-outline,input[type=button].button-outline,input[type=reset].button-outline,input[type=submit].button-outline{background-color:transparent;color:#1890ff}.button.button-outline:focus,.button.button-outline:hover,button.button-outline:focus,button.button-outline:hover,input[type=button].button-outline:focus,input[type=button].button-outline:hover,input[type=reset].button-outline:focus,input[type=reset].button-outline:hover,input[type=submit].button-outline:focus,input[type=submit].button-outline:hover{background-color:transparent;border-color:#4b545c;color:#4b545c}.button.button-outline[disabled]:focus,.button.button-outline[disabled]:hover,button.button-outline[disabled]:focus,button.button-outline[disabled]:hover,input[type=button].button-outline[disabled]:focus,input[type=button].button-outline[disabled]:hover,input[type=reset].button-outline[disabled]:focus,input[type=reset].button-outline[disabled]:hover,input[type=submit].button-outline[disabled]:focus,input[type=submit].button-outline[disabled]:hover{border-color:inherit;color:#1890ff}.button.button-clear,button.button-clear,input[type=button].button-clear,input[type=reset].button-clear,input[type=submit].button-clear{background-color:transparent;border-color:transparent;color:#1890ff}.button.button-clear:focus,.button.button-clear:hover,button.button-clear:focus,button.button-clear:hover,input[type=button].button-clear:focus,input[type=button].button-clear:hover,input[type=reset].button-clear:focus,input[type=reset].button-clear:hover,input[type=submit].button-clear:focus,input[type=submit].button-clear:hover{background-color:transparent;border-color:transparent;color:#4b545c}.button.button-clear[disabled]:focus,.button.button-clear[disabled]:hover,button.button-clear[disabled]:focus,button.button-clear[disabled]:hover,input[type=button].button-clear[disabled]:focus,input[type=button].button-clear[disabled]:hover,input[type=reset].button-clear[disabled]:focus,input[type=reset].button-clear[disabled]:hover,input[type=submit].button-clear[disabled]:focus,input[type=submit].button-clear[disabled]:hover{color:#1890ff}code{background:#f4f5f6;border-radius:.4rem;font-size:86%;margin:0 .2rem;padding:.8rem 1rem;white-space:normal}pre{border-left:.3rem solid #1890ff;padding-left:2rem;background:#f4f5f6;overflow-y:hidden}pre>code{border-radius:0;display:block;padding:1rem 1.5rem;white-space:pre}hr{border:0;border-top:.1rem solid #d1d1d1;margin:3rem 0}input:not([type]),input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url],input[type=week],select,textarea{-webkit-appearance:none;-webkit-appearance--moz-appearance:none;appearance:none;background-color:transparent;color:#4b545c;border:.1rem solid #d1d1d1;border-radius:.4rem;box-shadow:none;box-sizing:inherit;height:3.8rem;padding:.6rem 1rem;width:100%}input:not([type]):focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{border-color:#1890ff;outline:0}select{background:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="14" viewBox="0 0 29 14" width="29"><path fill="%23d1d1d1" d="M9.37727 3.625l5.08154 6.93523L19.54036 3.625"/></svg>') center right no-repeat;padding-right:3rem}select:focus{background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="14" viewBox="0 0 29 14" width="29"><path fill="%239b4dca" d="M9.37727 3.625l5.08154 6.93523L19.54036 3.625"/></svg>')}textarea{min-height:6.5rem}label,legend{display:block;font-size:1.6rem;font-weight:700;margin-bottom:.5rem}fieldset{border-width:0;padding:0}input[type=checkbox],input[type=radio]{display:inline}.label-inline{display:inline-block;font-weight:400;margin-left:.5rem}a{color:#1890ff;text-decoration:none}a:focus,a:hover{color:#4b545c}dl,ol,ul{list-style:none;margin-top:0;padding-left:3rem}dl dl,dl ol,dl ul,ol dl,ol ol,ol ul,ul dl,ul ol,ul ul{font-size:90%;margin:1.5rem 0 1.5rem 3rem}ol{list-style:decimal inside;list-style-position:outside}ul{list-style:circle inside;list-style-position:outside}.button,button,dd,dt,li{margin-bottom:1rem}fieldset,input,select,textarea{margin-bottom:1.5rem}blockquote,dl,figure,form,ol,p,pre,table,ul{margin-bottom:2.5rem}table{border-spacing:0;width:100%}td,th{border-bottom:.1rem solid #e1e1e1;padding:1.2rem 1.5rem;text-align:left}td:first-child,th:first-child{padding-left:0}td:last-child,th:last-child{padding-right:0}@media screen and (max-width:40rem){table{border-spacing:0;display:flex;width:100%}table thead{border-right:solid .1rem #e1e1e1}table thead td,table thead th{padding-left:0}table thead td:first-child,table thead th:first-child{padding-left:0}table thead td:last-child,table thead th:last-child{padding-right:1.2rem}table tbody{display:flex;overflow-x:auto;white-space:nowrap}table tbody tr{border-right:solid .1rem #e1e1e1}table tbody tr:last-child{border-right:none}table td,table th{display:block}table td:first-child,table th:first-child{padding-left:1.2rem}table td:last-child,table th:last-child{padding-right:1.2rem}}img{max-width:100%}.p-0{padding:0}.pt-0{padding-top:0}.pb-0{padding-bottom:0}.pl-0{padding-left:0}.pr-0{padding-right:0}.py-0{padding-top:0;padding-bottom:0}.px-0{padding-left:0;padding-right:0}.p-1{padding:1rem}.pt-1{padding-top:1rem}.pb-1{padding-bottom:1rem}.pl-1{padding-left:1rem}.pr-1{padding-right:1rem}.py-1{padding-top:1rem;padding-bottom:1rem}.px-1{padding-left:1rem;padding-right:1rem}.p-2{padding:2rem}.pt-2{padding-top:2rem}.pb-2{padding-bottom:2rem}.pl-2{padding-left:2rem}.pr-2{padding-right:2rem}.py-2{padding-top:2rem;padding-bottom:2rem}.px-2{padding-left:2rem;padding-right:2rem}.p-3{padding:3rem}.pt-3{padding-top:3rem}.pb-3{padding-bottom:3rem}.pl-3{padding-left:3rem}.pr-3{padding-right:3rem}.py-3{padding-top:3rem;padding-bottom:3rem}.px-3{padding-left:3rem;padding-right:3rem}.p-4{padding:6rem}.pt-4{padding-top:6rem}.pb-4{padding-bottom:6rem}.pl-4{padding-left:6rem}.pr-4{padding-right:6rem}.py-4{padding-top:6rem;padding-bottom:6rem}.px-4{padding-left:6rem;padding-right:6rem}.p-5{padding:8rem}.pt-5{padding-top:8rem}.pb-5{padding-bottom:8rem}.pl-5{padding-left:8rem}.pr-5{padding-right:8rem}.py-5{padding-top:8rem;padding-bottom:8rem}.px-5{padding-left:8rem;padding-right:8rem}.m-0{margin:0}.mt-0{margin-top:0}.mb-0{margin-bottom:0}.ml-0{margin-left:0}.mr-0{margin-right:0}.my-0{margin-top:0;margin-bottom:0}.mx-0{margin-left:0;margin-right:0}.m-1{margin:1rem}.mt-1{margin-top:1rem}.mb-1{margin-bottom:1rem}.ml-1{margin-left:1rem}.mr-1{margin-right:1rem}.my-1{margin-top:1rem;margin-bottom:1rem}.mx-1{margin-left:1rem;margin-right:1rem}.m-2{margin:2rem}.mt-2{margin-top:2rem}.mb-2{margin-bottom:2rem}.ml-2{margin-left:2rem}.mr-2{margin-right:2rem}.my-2{margin-top:2rem;margin-bottom:2rem}.mx-2{margin-left:2rem;margin-right:2rem}.m-3{margin:3rem}.mt-3{margin-top:3rem}.mb-3{margin-bottom:3rem}.ml-3{margin-left:3rem}.mr-3{margin-right:3rem}.my-3{margin-top:3rem;margin-bottom:3rem}.mx-3{margin-left:3rem;margin-right:3rem}.m-4{margin:6rem}.mt-4{margin-top:6rem}.mb-4{margin-bottom:6rem}.ml-4{margin-left:6rem}.mr-4{margin-right:6rem}.my-4{margin-top:6rem;margin-bottom:6rem}.mx-4{margin-left:6rem;margin-right:6rem}.m-5{margin:8rem}.mt-5{margin-top:8rem}.mb-5{margin-bottom:8rem}.ml-5{margin-left:8rem}.mr-5{margin-right:8rem}.my-5{margin-top:8rem;margin-bottom:8rem}.mx-5{margin-left:8rem;margin-right:8rem}.mx-auto{margin-left:auto;margin-right:auto}.text-justify{text-align:justify}.text-left{text-align:left}.text-center{text-align:center}.text-left{text-align:right}.text-sm{font-size:1rem}.text-lg{font-size:2rem}.text-xl{font-size:2.5rem}.display-none{display:none}.display-inline{display:inline}.display-inline-block{display:inline-block}.display-block{display:block}.display-flex{display:flex}.display-inline-flex{display:inline-flex}.display-table{display:table}.clearfix:after{clear:both;content:' ';display:table}.float-left{float:left}.float-right{float:right}.container{margin:0 auto;max-width:112rem;padding:0 2rem;position:relative;width:100%}.row{display:flex;flex-direction:column;padding:0;width:100%}.row.row-no-padding{padding:0}.row.row-no-padding>.column{padding:0}.row.row-wrap{flex-wrap:wrap}.row.row-top{align-items:flex-start}.row.row-bottom{align-items:flex-end}.row.row-center{align-items:center}.row.row-stretch{align-items:stretch}.row.row-baseline{align-items:baseline}.row .column{display:block;flex:1 1 auto;margin-left:0;max-width:100%;width:100%}.row .column.column-offset-10{margin-left:10%}.row .column.column-offset-20{margin-left:20%}.row .column.column-offset-25{margin-left:25%}.row .column.column-offset-33,.row .column.column-offset-34{margin-left:33.3333%}.row .column.column-offset-50{margin-left:50%}.row .column.column-offset-66,.row .column.column-offset-67{margin-left:66.6666%}.row .column.column-offset-75{margin-left:75%}.row .column.column-offset-80{margin-left:80%}.row .column.column-offset-90{margin-left:90%}.row .column.column-10{flex:0 0 10%;max-width:10%}.row .column.column-20{flex:0 0 20%;max-width:20%}.row .column.column-25{flex:0 0 25%;max-width:25%}.row .column.column-33,.row .column.column-34{flex:0 0 33.3333%;max-width:33.3333%}.row .column.column-40{flex:0 0 40%;max-width:40%}.row .column.column-50{flex:0 0 50%;max-width:50%}.row .column.column-60{flex:0 0 60%;max-width:60%}.row .column.column-66,.row .column.column-67{flex:0 0 66.6666%;max-width:66.6666%}.row .column.column-75{flex:0 0 75%;max-width:75%}.row .column.column-80{flex:0 0 80%;max-width:80%}.row .column.column-90{flex:0 0 90%;max-width:90%}.row .column .column-top{align-self:flex-start}.row .column .column-bottom{align-self:flex-end}.row .column .column-center{align-self:center}@media (min-width:40rem){.row{flex-direction:row;margin-left:-1rem;width:calc(100% + 2rem)}.row .column{margin-bottom:inherit;padding:0 1rem}}@font-face{font-family:ico;src:url(../font/ico.eot?13319731);src:url(../font/ico.eot?13319731#iefix) format("embedded-opentype"),url(../font/ico.woff2?13319731) format("woff2"),url(../font/ico.woff?13319731) format("woff"),url(../font/ico.ttf?13319731) format("truetype"),url(../font/ico.svg?13319731#ico) format("svg");font-weight:400;font-style:normal}[class*=" icon-"]:before,[class^=icon-]:before{font-family:ico;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;display:inline-block}@-moz-keyframes spin{0%{-moz-transform:rotate(0);-o-transform:rotate(0);-webkit-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-moz-transform:rotate(0);-o-transform:rotate(0);-webkit-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-moz-transform:rotate(0);-o-transform:rotate(0);-webkit-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-ms-keyframes spin{0%{-moz-transform:rotate(0);-o-transform:rotate(0);-webkit-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-moz-transform:rotate(0);-o-transform:rotate(0);-webkit-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.icon-menu-outline:before{content:'\e800'}.icon-github-circled:before{content:'\f09b'}.icon-rss:before{content:'\f09e'}.icon-menu:before{content:'\f0c9'}.icon-spinner:before{content:'\f110'}.icon-code:before{content:'\f121'}.icon-bitbucket:before{content:'\f171'}.icon-circle-notch:before{content:'\f1ce'}.icon-github-text:before{content:'\f307'}.navbar{display:flex;flex-wrap:wrap;justify-content:space-between;margin-top:2rem;padding-left:0;padding-inline-start:0}.navbar-item{padding:.5rem .66rem;margin:0 .2rem}.nav-item-active{border-radius:.4rem;border:.1rem solid #1890ff}.nav-item-active:hover{border-color:#4b545c}.navbar-menu{display:none;position:fixed;right:0;top:0;z-index:100;padding:.5rem .66rem;margin-top:2rem;margin-right:2rem;border-radius:50%;background-color:#fff}@media screen and (max-width:60rem){.navbar{justify-content:center}}.navbar-smart{display:flex;flex-wrap:wrap;justify-content:space-between;margin-top:2rem;padding-left:0;padding-inline-start:0}@media screen and (max-width:60rem){.navbar-menu-on{display:block}.navbar-smart{display:none;flex-direction:column;align-items:flex-start;position:fixed;left:0;top:0;width:100%;z-index:100;padding:1rem;background-color:rgba(255,255,255,.98)}.navbar-open{display:flex}}.shadow{-webkit-box-shadow:0 5px 10px 0 rgba(0,0,0,.3);-moz-box-shadow:0 5px 10px 0 rgba(0,0,0,.3);box-shadow:0 5px 10px 0 rgba(0,0,0,.3)}.shadow-lg{-webkit-box-shadow:0 10px 20px 0 rgba(0,0,0,.8);-moz-box-shadow:0 10px 20px 0 rgba(0,0,0,.8);box-shadow:0 10px 20px 0 rgba(0,0,0,.8)}.shadow-primary{-webkit-box-shadow:0 5px 10px 0 rgba(24,144,255,.2);-moz-box-shadow:0 5px 10px 0 rgba(24,144,255,.2);box-shadow:0 5px 10px 0 rgba(24,144,255,.2)}.shadow-secondary{-webkit-box-shadow:0 5px 10px 0 rgba(75,84,92,.2);-moz-box-shadow:0 5px 10px 0 rgba(75,84,92,.2);box-shadow:0 5px 10px 0 rgba(75,84,92,.2)}.muted{color:#8b9298}@media screen and (max-width:40rem){.row .column{text-align:center}}.person{min-height:190px;margin-bottom:8rem}.person h3{margin-bottom:1rem}.person img{float:left;max-width:150px;margin-right:2rem;margin-bottom:1rem}.person p{margin-left:150px}@media screen and (max-width:40rem){.person img{float:none}.person p{margin-left:0}}.hljs{display:block;overflow-x:auto;padding:.5em;color:#9006b3;background:#f4f5f6}.hljs-comment,.hljs-quote{color:#bbbcc2;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#dd4600}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e45649}.hljs-literal{color:#009c15}.hljs-addition,.hljs-attribute,.hljs-meta-string,.hljs-regexp,.hljs-string{color:#2e912c}.hljs-built_in,.hljs-class .hljs-title{color:#c1ae01}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#b97f00}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#2263f0}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline}
\ No newline at end of file
diff --git a/themes/pypy/assets/fonts/LICENSE.txt b/themes/pypy/assets/fonts/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_dGhlbWVzL3B5cHkvYXNzZXRzL2ZvbnRzL0xJQ0VOU0UudHh0
--- /dev/null
+++ b/themes/pypy/assets/fonts/LICENSE.txt
@@ -0,0 +1,30 @@
+Font license info
+
+
+## Typicons
+
+   (c) Stephen Hutchings 2012
+
+   Author:    Stephen Hutchings
+   License:   SIL (http://scripts.sil.org/OFL)
+   Homepage:  http://typicons.com/
+
+
+## Font Awesome
+
+   Copyright (C) 2016 by Dave Gandy
+
+   Author:    Dave Gandy
+   License:   SIL ()
+   Homepage:  http://fortawesome.github.com/Font-Awesome/
+
+
+## Brandico
+
+   (C) 2012 by Vitaly Puzrin
+
+   Author:    Crowdsourced, for Fontello project
+   License:   SIL (http://scripts.sil.org/OFL)
+   Homepage:  
+
+
diff --git a/themes/pypy/assets/fonts/ico.eot b/themes/pypy/assets/fonts/ico.eot
new file mode 100644
index 0000000000000000000000000000000000000000..9be00157fd7c5d5ae45005c33da9417fea83df46
GIT binary patch
literal 8396
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

diff --git a/themes/pypy/assets/fonts/ico.svg b/themes/pypy/assets/fonts/ico.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_dGhlbWVzL3B5cHkvYXNzZXRzL2ZvbnRzL2ljby5zdmc=
--- /dev/null
+++ b/themes/pypy/assets/fonts/ico.svg
@@ -0,0 +1,28 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Copyright (C) 2019 by original authors @ fontello.com</metadata>
+<defs>
+<font id="ico" horiz-adv-x="1000" >
+<font-face font-family="ico" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
+<missing-glyph horiz-adv-x="1000" />
+<glyph glyph-name="menu-outline" unicode="&#xe800;" d="M885 38l-729 0q-21 0-37-16t-15-37 15-36 37-15l729 0q21 0 37 15t16 36-16 37-37 16z m0 104q65 0 111-46t45-111-45-110-111-46l-729 0q-65 0-110 46t-46 110 46 111 110 46l729 0z m0 261l-729 0q-21 0-37-16t-15-37 15-37 37-15l729 0q21 0 37 15t16 37-16 37-37 16z m0 104q65 0 111-46t45-111-45-110-111-46l-729 0q-65 0-110 46t-46 110 46 111 110 46l729 0z m0 260l-729 0q-21 0-37-15t-15-37 15-37 37-15l729 0q21 0 37 15t16 37-16 37-37 15z m0 105q65 0 111-46t45-111-45-110-111-46l-729 0q-65 0-110 46t-46 110 46 111 110 46l729 0z" horiz-adv-x="1041" />
+
+<glyph glyph-name="github-circled" unicode="&#xf09b;" d="M429 779q116 0 215-58t156-156 57-215q0-140-82-252t-211-155q-15-3-22 4t-7 17q0 1 0 43t0 75q0 54-29 79 32 3 57 10t53 22 45 37 30 58 11 84q0 67-44 115 21 51-4 114-16 5-46-6t-51-25l-21-13q-52 15-107 15t-108-15q-8 6-23 15t-47 22-47 7q-25-63-5-114-44-48-44-115 0-47 12-83t29-59 45-37 52-22 57-10q-21-20-27-58-12-5-25-8t-32-3-36 12-31 35q-11 18-27 29t-28 14l-11 1q-12 0-16-2t-3-7 5-8 7-6l4-3q12-6 24-21t18-29l6-13q7-21 24-34t37-17 39-3 31 1l13 3q0-22 0-50t1-30q0-10-8-17t-22-4q-129 43-211 155t-82 252q0 117 58 215t155 156 216 58z m-267-616q2 4-3 7-6 1-8-1-1-4 4-7 5-3 7 1z m18-19q4 3-1 9-6 5-9 2-4-3 1-9 5-6 9-2z m16-25q6 4 0 11-4 7-9 3-5-3 0-10t9-4z m24-23q4 4-2 10-7 7-11 2-5-5 2-11 6-6 11-1z m32-14q1 6-8 9-8 2-10-4t7-9q8-3 11 4z m35-3q0 7-10 6-9 0-9-6 0-7 10-6 9 0 9 6z m32 5q-1 7-10 5-9-1-8-8t10-4 8 7z" horiz-adv-x="857.1" />
+
+<glyph glyph-name="rss" unicode="&#xf09e;" d="M214 100q0-45-31-76t-76-31-76 31-31 76 31 76 76 31 76-31 31-76z m286-69q1-15-9-26-10-12-27-12h-75q-14 0-24 9t-11 23q-12 128-103 219t-219 103q-14 1-23 11t-9 24v75q0 16 12 26 9 10 24 10h3q89-7 170-45t145-101q63-63 101-145t45-171z m286-1q1-15-10-26-10-11-26-11h-80q-14 0-25 10t-10 23q-7 120-57 228t-129 188-188 129-227 57q-14 1-24 11t-10 24v80q0 16 11 26 10 10 25 10h1q147-8 280-67t238-164q104-104 164-238t67-280z" horiz-adv-x="785.7" />
+
+<glyph glyph-name="menu" unicode="&#xf0c9;" d="M857 100v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 25t25 11h785q15 0 26-11t10-25z m0 286v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25v72q0 14 11 25t25 10h785q15 0 26-10t10-25z m0 285v-71q0-14-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 26t25 10h785q15 0 26-10t10-26z" horiz-adv-x="857.1" />
+
+<glyph glyph-name="spinner" unicode="&#xf110;" d="M294 72q0-29-21-50t-51-21q-29 0-50 21t-21 50q0 30 21 51t50 21 51-21 21-51z m277-115q0-29-20-50t-51-21-50 21-21 50 21 51 50 21 51-21 20-51z m-392 393q0-30-21-50t-51-21-50 21-21 50 21 51 50 20 51-20 21-51z m670-278q0-29-21-50t-50-21q-30 0-51 21t-20 50 20 51 51 21 50-21 21-51z m-538 556q0-37-26-63t-63-26-63 26-26 63 26 63 63 26 63-26 26-63z m653-278q0-30-21-50t-50-21-51 21-21 50 21 51 51 20 50-20 21-51z m-357 393q0-45-31-76t-76-31-76 31-31 76 31 76 76 31 76-31 31-76z m296-115q0-52-37-88t-88-37q-52 0-88 37t-37 88q0 51 37 88t88 37q51 0 88-37t37-88z" horiz-adv-x="1000" />
+
+<glyph glyph-name="code" unicode="&#xf121;" d="M344 69l-28-28q-5-5-12-5t-13 5l-260 261q-6 5-6 12t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13t-6-13z m330 596l-208-721q-2-7-9-11t-13-1l-34 9q-8 3-11 9t-2 14l209 720q2 8 8 11t13 2l35-10q7-2 11-9t1-13z m367-363l-260-261q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13t-5-12z" horiz-adv-x="1071.4" />
+
+<glyph glyph-name="bitbucket" unicode="&#xf171;" d="M455 371q4-35-28-57t-63-3q-21 9-29 32t-1 46 29 32q20 11 41 7t36-20 15-37z m62 11q-8 60-63 92t-110 7q-35-15-56-49t-20-72q3-51 44-87t92-31q51 4 85 47t28 93z m133 303q-11 15-31 25t-32 12-40 7q-162 26-316-1-24-4-37-7t-30-12-28-24q16-16 42-26t41-12 49-6q127-16 250-1 35 5 50 7t40 12 42 26z m32-578q-4-14-9-42t-7-47-16-39-33-32q-48-27-106-40t-112-12-113 10q-25 5-45 10t-43 15-41 25-29 34q-14 54-31 163l3 9 10 5q124-83 283-83t283 83q12-3 13-13t-3-25-4-21z m101 537q-15-94-62-366-3-17-15-31t-24-23-31-17q-140-70-340-49-139 15-220 78-8 6-14 14t-10 20-5 19-3 22-3 20q-5 27-15 83t-16 90-13 83-12 88q2 14 10 27t17 21 26 17 25 12 27 10q70 26 175 36 211 21 377-28 86-25 120-68 9-11 9-28t-3-30z" horiz-adv-x="785.7" />
+
+<glyph glyph-name="circle-notch" unicode="&#xf1ce;" d="M982 350q0-98-38-187t-103-154-153-103-188-38-187 38-154 103-103 154-38 187q0 119 54 222t148 171 209 84v-127q-124-25-205-123t-81-227q0-72 28-139t77-113 113-77 139-28 139 28 114 77 76 113 28 139q0 128-81 227t-205 123v127q115-17 209-84t148-171 54-222z" horiz-adv-x="1000" />
+
+<glyph glyph-name="github-text" unicode="&#xf307;" d="M527 850c-21 0-39-8-54-24-15-16-22-35-22-58 0-22 7-41 22-57 15-16 33-24 54-24 20 0 38 8 53 24 15 16 22 35 22 57 0 23-7 42-22 58-15 16-33 24-53 24z m164-156c2-13 3-29 3-49l0-43-53 0 0-106c15 2 27 3 37 3l16-1 0-2-1 0 0-196c0-61 8-106 23-134 20-38 57-57 110-57 38 0 71 7 98 22l0 109c-18-12-39-19-61-19-33 0-49 25-49 74l0 203 47 0c9 0 19 0 28-1 10-1 17-1 21-1l0 106-96 0 0 45c0 17 2 33 4 47l-127 0 0 0z m-501-87c-49 0-92-16-128-49-37-35-55-79-55-131 0-35 10-68 30-98 18-29 39-47 63-55l0-2c-24-10-35-36-35-77 0-31 12-54 37-70l0-2c-68-23-102-64-102-126 0-53 23-92 68-117 36-19 81-29 136-29 135 0 203 56 203 169 0 71-52 114-157 130-24 4-42 13-54 27-10 9-14 19-14 28 0 27 14 43 43 47 45 7 81 27 109 62 28 34 42 75 42 122 0 14-3 30-9 47 19 4 34 8 44 12l0 112c-46-17-86-26-121-26-31 18-64 26-100 26l0 0z m275-5c1-13 2-37 2-71l0-340c0-35-1-60-2-74l123 0c-1 16-2 43-2 80l0 336c0 32 1 55 2 69l-123 0z m-270-95c22 0 39-9 51-25 10-16 15-34 15-55 0-51-22-77-66-77-46 0-69 26-69 76 0 54 23 81 69 81z m7-445c62 0 92-19 92-56 0-39-28-59-84-59-64 0-96 19-96 57 0 39 29 58 88 58l0 0z" horiz-adv-x="924" />
+</font>
+</defs>
+</svg>
\ No newline at end of file
diff --git a/themes/pypy/assets/fonts/ico.ttf b/themes/pypy/assets/fonts/ico.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..f1f9a002caadb4bbdce52838a486b42a2e06afee
GIT binary patch
literal 8248
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

diff --git a/themes/pypy/assets/fonts/ico.woff b/themes/pypy/assets/fonts/ico.woff
new file mode 100644
index 0000000000000000000000000000000000000000..9c26d205664af8aa2ebc6ab7d7671d7cfc064377
GIT binary patch
literal 5052
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
M0ffFR=K#R}02_-gEC2ui

diff --git a/themes/pypy/assets/fonts/ico.woff2 b/themes/pypy/assets/fonts/ico.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..bcadeef9cac1ee1931ae4be92a9ba11a8a4d8fe6
GIT binary patch
literal 4216
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
O#mi~IpW4M|LN5t~wen&B

diff --git a/themes/pypy/assets/js/styles.js b/themes/pypy/assets/js/styles.js
new file mode 100644
index 0000000000000000000000000000000000000000..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_dGhlbWVzL3B5cHkvYXNzZXRzL2pzL3N0eWxlcy5qcw==
--- /dev/null
+++ b/themes/pypy/assets/js/styles.js
@@ -0,0 +1,43 @@
+'use strict';
+
+// Navbar
+(function () {
+    // Swap simple navbar for smart navbar
+    function swapNavbars() {
+        var navbars = document.getElementsByClassName("js-navbar");
+        [].forEach.call(navbars, function (navbar) {
+            if (navbar.classList.contains("navbar")) {
+                navbar.classList.remove("navbar");
+                navbar.classList.add("navbar-smart");
+                // also turn on the menu button
+                var menuButtons = navbar.parentNode.getElementsByClassName("js-navbar-toggler");
+                [].forEach.call(menuButtons, function (menuButton) {
+                    menuButton.classList.add("navbar-menu-on");
+                });
+            }
+        });
+    }
+
+    // Add event to show or hide the navbar menu when icon is clicked
+    function toggleNavbarMenu() {
+        var navbars = document.getElementsByClassName("js-navbar");
+
+        [].forEach.call(navbars, function (navbar) {
+            // only works with "navbar-smart"
+            if (navbar.classList.contains("navbar-smart")) {
+                var menuButtons = navbar.parentNode.getElementsByClassName("js-navbar-toggler");
+                [].forEach.call(menuButtons, function (menuButton) {
+                    menuButton.addEventListener('click', function (e) {
+                        e.preventDefault();
+                        var related_navbar = navbar;
+                        related_navbar.classList.toggle('navbar-open');
+                    });
+                });
+            }
+        });
+    }
+    document.addEventListener("DOMContentLoaded", function () {
+        swapNavbars();
+        toggleNavbarMenu();
+    });
+})();
diff --git a/themes/pypy/bundles b/themes/pypy/bundles
index 6f20654cdb2bf84c81a4661219e887754e71b1d4_dGhlbWVzL3B5cHkvYnVuZGxlcw==..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_dGhlbWVzL3B5cHkvYnVuZGxlcw== 100644
--- a/themes/pypy/bundles
+++ b/themes/pypy/bundles
@@ -4,8 +4,9 @@
     nikola_rst.css,
     code.css,
     theme.css,
+    styles.css,
 assets/css/all-nocdn.css=
     rst_base.css,
     nikola_rst.css,
     code.css,
     theme.css,
@@ -7,8 +8,9 @@
 assets/css/all-nocdn.css=
     rst_base.css,
     nikola_rst.css,
     code.css,
     theme.css,
+    styles.css,
 
 ; javascript bundles
 assets/js/all.js=
diff --git a/themes/pypy/pypy.theme b/themes/pypy/pypy.theme
index 6f20654cdb2bf84c81a4661219e887754e71b1d4_dGhlbWVzL3B5cHkvcHlweS50aGVtZQ==..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_dGhlbWVzL3B5cHkvcHlweS50aGVtZQ== 100644
--- a/themes/pypy/pypy.theme
+++ b/themes/pypy/pypy.theme
@@ -3,5 +3,5 @@
 parent = base-jinja
 
 [Nikola]
-ignored_assets = js/baguetteBox.min.js, css/baguetteBox.min.css, 
+ignored_assets = js/baguetteBox.min.js, css/baguetteBox.min.css, js/gallery.js, js/gallery.min.js
 
diff --git a/themes/pypy/templates/base.tmpl b/themes/pypy/templates/base.tmpl
new file mode 100644
index 0000000000000000000000000000000000000000..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_dGhlbWVzL3B5cHkvdGVtcGxhdGVzL2Jhc2UudG1wbA==
--- /dev/null
+++ b/themes/pypy/templates/base.tmpl
@@ -0,0 +1,36 @@
+{#  -*- coding: utf-8 -*- #}
+{% import 'base_helper.tmpl' as base with context %}
+{% import 'base_header.tmpl' as header with context %}
+{% import 'base_footer.tmpl' as footer with context %}
+{{ set_locale(lang) }}
+{#  <html> tag is included by base.html_headstart #}
+{{ base.html_headstart() }}
+{% block extra_head %}
+{#  Leave this block alone. #}
+{% endblock %}
+{{ template_hooks['extra_head']() }}
+</head>
+<body>
+    <a href="#content" class="sr-only sr-only-focusable">{{ messages("Skip to main content") }}</a>
+    <div id="container">
+         {{ header.html_header() }}
+         <main id="content">
+            {% block content %}{% endblock %}
+         </main>
+         {{ footer.html_footer() }}
+    </div>
+    {{ base.late_load_js() }}
+    {% if date_fanciness != 0 %}
+    <!-- fancy dates -->
+    <script>
+    moment.locale("{{ momentjs_locales[lang] }}");
+    fancydates({{ date_fanciness }}, {{ js_date_format }});
+    </script>
+    <!-- end fancy dates -->
+    {% endif %}
+    {% block extra_js %}{% endblock %}
+    </script>
+    {{ body_end }}
+    {{ template_hooks['body_end']() }}
+</body>
+</html>
diff --git a/themes/pypy/templates/base_header.tml b/themes/pypy/templates/base_header.tml
new file mode 100644
index 0000000000000000000000000000000000000000..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_dGhlbWVzL3B5cHkvdGVtcGxhdGVzL2Jhc2VfaGVhZGVyLnRtbA==
--- /dev/null
+++ b/themes/pypy/templates/base_header.tml
@@ -0,0 +1,72 @@
+{#  -*- coding: utf-8 -*- #}
+{% import 'base_helper.tmpl' as base with context %}
+
+{% macro html_header() %}
+    <header id="header">
+        {{ html_site_title() }}
+        {{ html_translation_header() }}
+        {{ html_navigation_links() }}
+        {% if search_form %}
+            <div class="searchform" role="search">
+                {{ search_form }}
+            </div>
+        {% endif %}
+    </header>
+    {{ template_hooks['page_header']() }}
+    {% block extra_header %}{% endblock %}
+{% endmacro %}
+
+{% macro html_site_title() %}
+    <h1 id="brand"><a href="{{ abs_link(_link("root", None, lang)) }}" title="{{ blog_title|e }}" rel="home">
+    {% if logo_url %}
+        <img src="{{ logo_url }}" alt="{{ blog_title|e }}" id="logo">
+    {% endif %}
+
+    {% if show_blog_title %}
+        <span id="blog-title">{{ blog_title|e }}</span>
+    {% endif %}
+    </a></h1>
+{% endmacro %}
+
+{% macro html_navigation_links() %}
+    <nav id="menu">
+    <ul class="navbar js-navbar">
+    {{ html_navigation_links_entries(navigation_links) }}
+    {{ html_navigation_links_entries(navigation_alt_links) }}
+    {{ template_hooks['menu']() }}
+    {{ template_hooks['menu_alt']() }}
+    </ul>
+    </nav>
+{% endmacro %}
+
+{% macro html_navigation_links_entries(navigation_links_source) %}
+    {% for url, text in navigation_links_source[lang] %}
+        {% if isinstance(url, tuple) %}
+            <li> {{ text }}
+            <ul>
+            {% for suburl, text in url %}
+                {% if rel_link(permalink, suburl) == "#" %}
+                    <li class="navbar-item nav-item-active"><a href="{{ permalink }}">{{ text }}<span class="sr-only"> {{ messages("(active)", lang) }}</span></a></li>
+                {% else %}
+                    <li class="navbar-item"><a href="{{ suburl }}">{{ text }}</a></li>
+                {% endif %}
+            {% endfor %}
+            </ul>
+        {% else %}
+            {% if rel_link(permalink, url) == "#" %}
+                <li class="navbar-item nav-item-active"><a href="{{ permalink }}">{{ text }}<span class="sr-only"> {{ messages("(active)", lang) }}</span></a></li>
+            {% else %}
+                <li class="navbar-item"><a href="{{ url }}">{{ text }}</a></li>
+            {% endif %}
+        {% endif %}
+    {% endfor %}
+{% endmacro %}
+
+{% macro html_translation_header() %}
+    {% if translations|length > 1 %}
+        <div id="toptranslations">
+            <h2>{{ messages("Languages:") }}</h2>
+            {{ base.html_translations() }}
+        </div>
+    {% endif %}
+{% endmacro %}
diff --git a/themes/pypy/templates/base_helper.tmpl b/themes/pypy/templates/base_helper.tmpl
index 6f20654cdb2bf84c81a4661219e887754e71b1d4_dGhlbWVzL3B5cHkvdGVtcGxhdGVzL2Jhc2VfaGVscGVyLnRtcGw=..0594e0c3b2864b8a0d092d7f447ca2e6d2b5317a_dGhlbWVzL3B5cHkvdGVtcGxhdGVzL2Jhc2VfaGVscGVyLnRtcGw= 100644
--- a/themes/pypy/templates/base_helper.tmpl
+++ b/themes/pypy/templates/base_helper.tmpl
@@ -21,7 +21,7 @@
     {% if description %}
         <meta name="description" content="{{ description|e }}">
     {% endif %}
-    <meta name="viewport" content="width=device-width">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
     {% if title == blog_title %}
         <title>{{ blog_title|e }}</title>
     {% else %}
@@ -58,6 +58,7 @@
     {% else %}
         <!--[if lt IE 9]><script src="{{ url_replacer(permalink, '/assets/js/html5shiv-printshiv.min.js', lang, url_type) }}"></script><![endif]-->
     {% endif %}
+    <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
 
     {{ extra_head_data }}
 {% endmacro %}
@@ -69,6 +70,8 @@
         {% else %}
             <script src="/assets/js/all-nocdn.js"></script>
         {% endif %}
+    {% else %}
+        <script src="/assets/js/styles.js"></script>
     {% endif %}
     {% if date_fanciness != 0 %}
         {% if use_cdn %}
@@ -95,6 +98,7 @@
         <link href="/assets/css/nikola_rst.css" rel="stylesheet" type="text/css">
         <link href="/assets/css/code.css" rel="stylesheet" type="text/css">
         <link href="/assets/css/theme.css" rel="stylesheet" type="text/css">
+        <link href="/assets/css/styles.css" rel="stylesheet" type="text/css">
         {% if has_custom_css %}
             <link href="/assets/css/custom.css" rel="stylesheet" type="text/css">
         {% endif %}