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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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 zc$@)v5Qpz~Pew8T0RR9101$Wp4*&oF03bL301zMm0RR9100000000000000000000 z0000SR0dW6gdhkY36^jX2nv{Rl{X6(00A}vBm*b}AO(dH2Z0U@fd(629kUTOY#b1< zQU7HBmjrHz2;CM``#V@r1QhD(Sxx&^U7D?~V5?HB)RxwGuCDN4KQE8tV5KPU?zO*j zN-M|kcsMs2PCd>WsGQ*|BP5xH_}Z`RH!~lPiDdwxJbF^Z?&1)1R4Q`iL854X+Hbyz z`9)wRipf_$CZUO!tT&UAm--U+X=A_pB)J$WMRgrIy?AFD;H$v@qwSj&C3u<}9%329 zRtC#A@HHSoGiyanQKzd;23^u=()o;Ga_g`a<SP(6eVTX~yG{9FYyKBfWIX)*Jm0pO z(PpGn7^4c=Xk>94+9=GzczYN#cMW$<m=(lU-*1+x+d+cnnxyH(SK}It-w!mP0D$zr zpVsXAZ+F?S#6XudGba&}ZVV`qvdJVr+p@IeYHdPM6~bI?lqO4)%qhAnO(;+}heSw> zM<N^=qs!|7TwKI+2hnw^lSBL|5x}RCc2w`e+8z||rmzn67yv*ZQ&@IO0tLB=I1DC4 zT%S!?Qs0y-SfEa({{j~pIpil*lFm0{>AH$HG`V%2g{c7Rj-F1*gtP>=?A#&7g3)+N z)j1<KiP{Z9m&8_$zu9o`$BrcujR~-FwT8A$$#THKF$jd}D2^(`#+1dSvfTWehl>Yd z6LN*Zo`!k|y9*4$u3TkM?8*%W&8~c8Fzjk1gT=09G1%<t0S1R%{l?(3>rU@@Ax~l{ zR!b>w_!WIhY32&%7UzQq9eol$wMy)nP=M5~u3UEs9-VpvMCEPxa&g(Tsf^ja^B#Br zwrn~AvQ=ULh3Omzm~<#Ux8U)4ETgeCJDBZ!N#4Ax_a^7($s-<|7`D=f4_VDY%y3Bg zE%)#~Y|^GH_{^qb)sNu>Ln|L@lBv<cKJ?c?$vHbPb2i{S9pxO5q?zCx4u$Nkgp7!S z=)BKh1-Q(c*I|=aRMyQ|teIdHF-XHxrd5Y)TP<g6$_03Ar?TaSot!LtEOC`AbsEV+ zrwYhI^^Fl2ETE_=k2V3go&mOw!51v#5l|%wOSydTpSO4Ujzu`x{#2QUXVWyQCv45) zbq_S?HG%gS3@l8erh~I+R;{HDQ3^r|$t=ti0vi*FUe7f6_PD$n<TDWJih^6z<^hea zL)uB+na|gKz@x_Y9lkE70k6Q4aQjt6*i#WRo*r^ZJb42?2|pZj=|68@s<p)HqUu2P zI>FZBr`LO_@o$<h;`!}oAn=LbPOo=UhVz9j6f#H+d_5mj-;x`g5noQAxnPXVohF`% zz-~g~R%*cIg)`O<@l=NtQk0Iz(SQk)l+B)Tdx3`wL@lGKJ|l0@1`x6-Xkb3#hM9E` zqNN7w+e`QmHN%C70kEP9IRE(l%iv`*R_A|EvH54a3po&`2B8~)2sLa#6dA-&f;e(W zpbSY=AcZQVQG*QXW|o$CXQvb-N3z5e!?1=7)=>frIpk4>0xD2M6-uZ<8TGgdsh^gh znycV<G~rJtcndN}WrF%<Y@%vYtp<psg`keLVa=9P^{1N7=gMEhzbtmB3SPH0)9Z-T zJv^>KdZ41#^!Fi8z@vl7Q6a@b^fwg0o$V*K)*2YO9%zwzEmSmtExbp8Hg#wEK*w1C zB!$ogy3|;UUQ(w8U`?{gFYCv`8t!RO+IK#Kh+_vaa`JkhM?e%#E!mHa?i)w7Zb^L| zx(@1}QkO^-9MMInaAxEi7Z>RlyH`#3i^Xa($7n*cs^!wOdBJFgDJm{t+)ME>n9HFd zc{qe{GX|$<S-8~d{+b4p;9>J&%^8~KFs_n-K8vE%LYk4Z;C^wL12V%<co?Ho0*1xC z_^KvG%`FTVh$aX*%r~uH`?C!XKtq%?7deSzijGK<^fH>W!FB4?n|H7w!-NdCq43e- z<!aSElIoml<*`DoNtccbBGO8huSYeV<CroUQzvBV5F2y8lho&~*%-d@=bRq0<(%P8 z-SkV(iJl!`=>^fZt7-NVN?&yt&H;Ca9p)EP7lu6fMVorTyB1XR1~skh>^K?z5{oHM zlwDk=oZs7;^W*xA&+5@lAQaPa>x{QpFSe#H+4e+c%-{&~pn8I0TGgZ3N#3Ofcr$3L zm_4Gq!v0JUotZk#tF^=^ctDe)!Ty=!kVe};mm#Ytu;xmGtfRojW}usFqQI6b4YG{_ zJDY)avWo(Ht~7`j1$>)<PU1&_fGZ6WM1jy|pofG}AmU1cL{T8N8R#H!6iB$zAQVax z-9`o>rc9Ty8nrf-i~$#f_z)Qf-aq6L1p5$(_8}^Tr98;aVNmSDpxTE)vk!yr909{V z0;YWgEc-|yyX_^<sI8*wo@phyTZqn`JR}lVSpz|Wn55|PSt1rF0d)uT3=|hj1=9}L zxM*}OkA+}|hPKY;WbN`6a|=s?!}#t=1QG<9TRJ%zJ9?X7jKnxeSA92xm-eDPe5qQc z;=a-}8ZBK!IvV%GL#p^P)c`y*nF0h+ug=ZgMXeorX*5W&<>Im-2~+g!m=6Wc0o3!` z<CHENS({|Ws-}lbmdNCC5=q`Y-BtDU_#^}a2nmsqH5w4rYGagSg}F@bs#IvF=e<&t z9kO;R+J<zxE866p0^~??f}To`h4L;8M$(fv9$(P|f+(znAayU309F!OuPXUc{ZI@b zUFL*n;gbRrrQK1+L3WT1#!Qfe%t;o|Md`e-xw~a?eLmH;Mhn8E)mNg3z-?<AQtwKL zs8kw_R;o_&kV(j?3KULLN=cq_#GK2UuOTZ&CL@O`6mYy!NutQ*DairE%MkFn<{bqo zFHBnfo>xahqkHFgH@!s@KBls5R%^A<iWzdKhTGOQWiH<)(bWQmayM4iRM+P+rP5sQ zn3$QdYT?7M`U`=)x+-23QPtJuqT*}#3Plasj^CiMQ`UCQ!tPpumZ!cbN5qJ#rxKt7 zsP?M@mkCfyq74X8p@HJ=#gaK>Ub=`b@T!4jpc5hi7y$7dhNS1gE{p^O?K*0QKn#dl zXG@qz0N;KJFa|gasKDEXq#(+l@KS&%RjUP2t4<hHVP-JGY9Pb{ssVLT>jbH1H2@<4 z(MV}@EEJ+L-5!$ux15K~_5bVjzj@l#=x7iXL|y|Pc11>mm9eoe9_ZO_TueBT&%fsB zpnG!vTF=A(mIA9&sAyeOuv+|i>vP2G)l*DK=+;lR<<^!Ad)nf)FMs)S=k}%CyT!+U zzWp+2k>(FGY{ma`i#H~BgEh^+j!h;a%VMXX@$%T1WXn>P$x4t7i23)3SL^f7i$$x; zqVLkot}%(a@=HNIDYYS-dPV(c@ZM*;;re>#^*M$PSckt1W^75B>LlN%QKje2wg4AO zyoC$ILY3p=mC%tH?iOMCGrVquLG!JO@>{JgkvKYmiQ||UlqPBG8y^ab4Ud9xOacuL zersr4d~{R_g;KswX5fQ=AmS-l$#9Nx@Bn-`j`HH8c%kvcE)IZYcnDM}l!NNZu&q8n zT=%(Yv#)LMUy3~YnDx6f!%jIYhUbfqYpIm7meD^_$tJGBH$#EX&+$s%%);erR${8` zbGSE#++d^vj1wT`<VNcFz?%eNvtc-{t{xZ1)77ODD6?Dw=h5Rwk9auRox>xtmTgfO zZFqDDk0*Ev%d_$wC39!#IJ%c_`J_<#EHC<BKa60vQ5f|1tMGrHMx0YVe<;qmobKmI z(|2MqQjBQ4ii82ta7nXewUtOt9QeQUQojQK9*+FdEFkcrk}~Q2m&h^;?E3Kj>BSZ` zA=^VHW?vGsN6gBTO>wb)cn5KTyOh3ZF2OM`6)%<=MB4SSu)^!Mf7%lZyXltc#wX_O z0Xz#UiIdYsVO-*^VH6#_wbg&?Ba|@=3QM#0XFn;#SBfo~SJ80lN5bgJi*o(Sz@)U` z``{g<d0h-w77}JZ$~ts#_?c~gKtH&&KwtQ<*2&JBl9`D6A+AMdK46|J&KYqGyt(Ud z<_Kjb_?n#;@o!y8x<`4^b6&^qk{?4S#WCg{%{7~~+nrelQ_P>>J=<v*b_#?1sal;+ zw+!B<n(A5la{a8u_5n;!>rdkxJifQTbB%tRb!#r>%z18t2n(eC!+C(<CH+S400f_# zc=Zjz)A~=3cIuGFbt)m19>Fj{^I#oE6puZOQV9yWABQ2|Mq$qN7*cOhZF<r+Z8r<~ zWZY8)dt$mb+a30rllH_e=NpB(nTcCTE97@CwuQk_q|Er-D1PL#sR%cI3=@@a62p;r zv?Gi{lb?uE^g9};;X5HR#P39B^zXR;atRWb8Ufxy@Lcf!-`_vG+rvStNp>a;7kJ?b zx&BUB7m!D&)0IC7a1Gw^2bVt|amz(OocE){bT<@KeRUMwGMWz%P>yhzx^)ynl{kfn zQS1%T9mQA5kj5&NiM)DvBdh4vz3Az*%4+<{fLMpvX{gp}w@D|2VEJh(kK|l#DW&F< z6fwz#D9Ewo+Wbn97MBb{Rc=$)a=s*@yE~g3v*~EqY=pw0cz7-w^!oZJQuP23->W9U z--^JeUbkF|1-UPbB6qu(n&3PzE_FU@w-}IDk;!Jf&1~;F8VNI>A4Tl!#H&-fvC4dE zH_4jo(IjRbO5$B7uVGA}q>ogYlsfs7DRrIlpENgb_A?QuZN{c&env1aa#HhTkM|BL zF^EoyzT&Xyu^@6S8$zHSGc$u2(~28z{Y}81iNv2V5<5;WqW3Fd2D_*l9DY0T&N`u# znad16zZ2(64-bM1)2c#KUT>>M&lC3VRczG~c}k{bZ^D}hhjz9n$E(+^yLoQUonOdX z>t;5chy{E_p_aiFH_56j0RaRa?9YjpjQw^)bO7Kxx?4)shnO?fT7q;J1+Jyj78aNa z5BwhmA!7MDz#*!P&Hy?J8seb0qL&2Vn&fMr&k1suP*l^61Mm$pp%@j-57tm8cQ`>) z$0-~dIgO@+7)Li}5kenlqnYG<N|;$bgc#0}ffx_i$xVk7Z2oYHa1l;pO9U~FIL;zo z8aNwUsyLr{89Xn9e7X2B{m?Bp`h;ucG@X2rF`c@vM?BLko`F-PNq*^uPz!~8m5tS1 zZ|WLXOy_p?g&vIg%VfL@{*~9L$rmToV0+(S76X$bY$OCkFo;5WaFa<jl~mD0CL6sP zijrIie2)%=YHc7Ht&2p>;W;}&Y{l?d7!H~$tqwMcFb%1p?NF9LQc{YMn3KcclNjid z--3uL%BhTyMO~-q6jMK|j&+EAWA$)&(0ReSEod}EzY1Z9{bWmqYr-%chH99wMyMF- zrLr%5@@@yk>-9y679*C};)pAr_!2_sX-#kYsnrU_f`r8+-TwOeTx^EzIGMDl9LM~7 z51M((GLT0H<foI2!r{VH!FJuij9B1LJi)mn03*wMV5cXMOG`wKJH_sQ!aDL0q_~;> z;wy1uo5Cq+cYmuF2p+&;=^Q(Q-e<Wyo(ho8<3+$`%+L1io=42v*t7?W-lcxwmry04 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 %}