From 7d87627b4e454b2cd3bc5afc4ed7cbb539f5e1d0 Mon Sep 17 00:00:00 2001
From: zzossig
Date: Sun, 1 Dec 2019 02:28:55 +0900
Subject: [PATCH] style file clean up, grid bug fixed, prepare for presentation
page(reveal.js)
---
archetypes/pt.md | 12 +
assets/css/photoswipe/custom-skin.css | 29 +-
assets/css/reveal/reveal.css | 1598 +++++
assets/js/reveal.js | 6028 +++++++++++++++++
assets/sass/abstracts/_functions.scss | 5 -
assets/sass/abstracts/_variables.scss | 9 +-
assets/sass/base/_animation.scss | 105 -
assets/sass/base/_helpers.scss | 41 -
assets/sass/components/_bio.scss | 6 +-
assets/sass/components/_features.scss | 92 -
assets/sass/components/_hr.scss | 16 -
assets/sass/components/_pagination.scss | 55 -
assets/sass/components/_photoswipe.scss | 44 -
assets/sass/components/_search.scss | 1 -
assets/sass/components/_summary.scss | 18 -
assets/sass/layout/_footer.scss | 14 +-
assets/sass/layout/_navigation.scss | 5 +-
assets/sass/main.scss | 5 +-
assets/sass/pages/_presentation.scss | 43 +
assets/sass/pages/_single.scss | 26 +-
assets/sass/prism/_dark.scss | 293 -
assets/sass/prism/_dracula.scss | 410 --
assets/sass/prism/_hacker.scss | 210 -
assets/sass/prism/_light.scss | 175 -
assets/sass/prism/_prism.scss | 47 -
assets/sass/prism/_solarized.scss | 165 -
assets/sass/themes/_custom.scss | 4 +-
assets/sass/themes/_light.scss | 12 +-
assets/sass/themes/_solarized.scss | 2 +-
exampleSite/config/_default/config.toml | 23 +-
exampleSite/config/_default/menus.en.toml | 12 +-
exampleSite/config/_default/params.toml | 56 +-
exampleSite/content/notes/hugo/hugo-1.md | 22 -
.../content/notes/hugo/syntax-highlight.md | 306 +
exampleSite/content/posts/test-mermaid.md | 16 +
exampleSite/content/pt/_index.md | 4 +
exampleSite/content/pt/dir/fourth.md | 12 +
exampleSite/content/pt/first.md | 12 +
exampleSite/content/pt/second.md | 12 +
exampleSite/content/pt/third.md | 12 +
...s_b4f67ac5085b89b62b54c1923e5a9145.content | 2 +-
layouts/_default/list.html | 4 +-
layouts/_default/taxonomy.html | 3 +-
layouts/_default/terms.html | 4 +-
layouts/partials/body/related.html | 4 +-
layouts/partials/body/whoami.html | 4 +-
layouts/partials/footer/go-to-top.html | 4 +-
layouts/partials/footer/site-footer.html | 8 +-
layouts/partials/header/header-img.html | 13 +-
layouts/partials/header/header-slide.html | 11 -
layouts/partials/header/header-text.html | 6 -
layouts/partials/header/slide-1.html | 13 -
layouts/partials/header/slide-2.html | 37 -
layouts/partials/header/slide-3.html | 8 -
.../partials/pagination/pagination-list.html | 27 -
layouts/partials/script/about-script.html | 2 +
layouts/partials/script/archive-script.html | 2 +
layouts/partials/script/gallery-script.html | 2 +
layouts/partials/script/pt-script.html | 26 +
layouts/partials/script/single-script.html | 6 +-
layouts/partials/script/taxo-script.html | 2 +
layouts/pt/list.html | 33 +
layouts/pt/single.html | 1 +
63 files changed, 8229 insertions(+), 1950 deletions(-)
create mode 100644 archetypes/pt.md
create mode 100644 assets/css/reveal/reveal.css
create mode 100644 assets/js/reveal.js
delete mode 100644 assets/sass/components/_features.scss
delete mode 100644 assets/sass/components/_photoswipe.scss
create mode 100644 assets/sass/pages/_presentation.scss
delete mode 100644 assets/sass/prism/_dark.scss
delete mode 100644 assets/sass/prism/_dracula.scss
delete mode 100644 assets/sass/prism/_hacker.scss
delete mode 100644 assets/sass/prism/_light.scss
delete mode 100644 assets/sass/prism/_prism.scss
delete mode 100644 assets/sass/prism/_solarized.scss
delete mode 100644 exampleSite/content/notes/hugo/hugo-1.md
create mode 100644 exampleSite/content/notes/hugo/syntax-highlight.md
create mode 100644 exampleSite/content/pt/_index.md
create mode 100644 exampleSite/content/pt/dir/fourth.md
create mode 100644 exampleSite/content/pt/first.md
create mode 100644 exampleSite/content/pt/second.md
create mode 100644 exampleSite/content/pt/third.md
delete mode 100644 layouts/partials/header/slide-1.html
delete mode 100644 layouts/partials/header/slide-2.html
delete mode 100644 layouts/partials/header/slide-3.html
delete mode 100644 layouts/partials/pagination/pagination-list.html
create mode 100644 layouts/partials/script/pt-script.html
create mode 100644 layouts/pt/list.html
create mode 100644 layouts/pt/single.html
diff --git a/archetypes/pt.md b/archetypes/pt.md
new file mode 100644
index 0000000..33dc5b8
--- /dev/null
+++ b/archetypes/pt.md
@@ -0,0 +1,12 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+description:
+type: pt
+tags:
+-
+series:
+-
+categories:
+-
+---
diff --git a/assets/css/photoswipe/custom-skin.css b/assets/css/photoswipe/custom-skin.css
index 8cefb81..45c131f 100644
--- a/assets/css/photoswipe/custom-skin.css
+++ b/assets/css/photoswipe/custom-skin.css
@@ -198,7 +198,7 @@
.pswp__share-tooltip {
z-index: 1620;
position: absolute;
- background: #FFF;
+ background: #403E41;
top: 56px;
border-radius: 2px;
display: block;
@@ -218,7 +218,7 @@
.pswp__share-tooltip a {
display: block;
padding: 8px 12px;
- color: #000;
+ color: #FCFCFA;
text-decoration: none;
font-size: 14px;
line-height: 18px;
@@ -226,7 +226,7 @@
.pswp__share-tooltip a:hover {
text-decoration: none;
- color: #000;
+ color: #FCFCFA;
}
.pswp__share-tooltip a:first-child {
@@ -262,33 +262,34 @@ a.pswp__share--facebook:before {
top: -12px;
right: 15px;
border: 6px solid transparent;
- border-bottom-color: #FFF;
+ border-bottom-color: #403E41;
-webkit-pointer-events: none;
-moz-pointer-events: none;
pointer-events: none;
}
a.pswp__share--facebook:hover {
- background: #3E5C9A;
- color: #FFF;
+ background: #727072;
+ color: #FCFCFA;
}
a.pswp__share--facebook:hover:before {
- border-bottom-color: #3E5C9A;
+ border-bottom-color: #727072;
}
a.pswp__share--twitter:hover {
- background: #55ACEE;
- color: #FFF;
+ background: #727072;
+ color: #FCFCFA;
}
a.pswp__share--pinterest:hover {
- background: #CCC;
- color: #CE272D;
+ background: #727072;
+ color: #FCFCFA;
}
a.pswp__share--download:hover {
- background: #DDD;
+ background: #727072;
+ color: #FCFCFA;
}
/*
@@ -578,4 +579,8 @@ a.pswp__share--download:hover {
.pswp--minimal--dark .pswp__top-bar {
background: none;
+}
+
+.pswp__bg {
+ background: rgba(0, 0, 0, 0.8);
}
\ No newline at end of file
diff --git a/assets/css/reveal/reveal.css b/assets/css/reveal/reveal.css
new file mode 100644
index 0000000..434888a
--- /dev/null
+++ b/assets/css/reveal/reveal.css
@@ -0,0 +1,1598 @@
+/*!
+ * reveal.js
+ * http://revealjs.com
+ * MIT licensed
+ *
+ * Copyright (C) 2019 Hakim El Hattab, http://hakim.se
+ */
+/*********************************************
+ * GLOBAL STYLES
+ *********************************************/
+html {
+ width: 100%;
+ height: 100%;
+ height: 100vh;
+ height: calc( var(--vh, 1vh) * 100);
+ overflow: hidden; }
+
+body {
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+ line-height: 1;
+ margin: 0;
+ background-color: #fff;
+ color: #000; }
+
+/*********************************************
+ * VIEW FRAGMENTS
+ *********************************************/
+.reveal .slides section .fragment {
+ opacity: 0;
+ visibility: hidden;
+ transition: all .2s ease; }
+ .reveal .slides section .fragment.visible {
+ opacity: 1;
+ visibility: inherit; }
+
+.reveal .slides section .fragment.grow {
+ opacity: 1;
+ visibility: inherit; }
+ .reveal .slides section .fragment.grow.visible {
+ -webkit-transform: scale(1.3);
+ transform: scale(1.3); }
+
+.reveal .slides section .fragment.shrink {
+ opacity: 1;
+ visibility: inherit; }
+ .reveal .slides section .fragment.shrink.visible {
+ -webkit-transform: scale(0.7);
+ transform: scale(0.7); }
+
+.reveal .slides section .fragment.zoom-in {
+ -webkit-transform: scale(0.1);
+ transform: scale(0.1); }
+ .reveal .slides section .fragment.zoom-in.visible {
+ -webkit-transform: none;
+ transform: none; }
+
+.reveal .slides section .fragment.fade-out {
+ opacity: 1;
+ visibility: inherit; }
+ .reveal .slides section .fragment.fade-out.visible {
+ opacity: 0;
+ visibility: hidden; }
+
+.reveal .slides section .fragment.semi-fade-out {
+ opacity: 1;
+ visibility: inherit; }
+ .reveal .slides section .fragment.semi-fade-out.visible {
+ opacity: 0.5;
+ visibility: inherit; }
+
+.reveal .slides section .fragment.strike {
+ opacity: 1;
+ visibility: inherit; }
+ .reveal .slides section .fragment.strike.visible {
+ text-decoration: line-through; }
+
+.reveal .slides section .fragment.fade-up {
+ -webkit-transform: translate(0, 20%);
+ transform: translate(0, 20%); }
+ .reveal .slides section .fragment.fade-up.visible {
+ -webkit-transform: translate(0, 0);
+ transform: translate(0, 0); }
+
+.reveal .slides section .fragment.fade-down {
+ -webkit-transform: translate(0, -20%);
+ transform: translate(0, -20%); }
+ .reveal .slides section .fragment.fade-down.visible {
+ -webkit-transform: translate(0, 0);
+ transform: translate(0, 0); }
+
+.reveal .slides section .fragment.fade-right {
+ -webkit-transform: translate(-20%, 0);
+ transform: translate(-20%, 0); }
+ .reveal .slides section .fragment.fade-right.visible {
+ -webkit-transform: translate(0, 0);
+ transform: translate(0, 0); }
+
+.reveal .slides section .fragment.fade-left {
+ -webkit-transform: translate(20%, 0);
+ transform: translate(20%, 0); }
+ .reveal .slides section .fragment.fade-left.visible {
+ -webkit-transform: translate(0, 0);
+ transform: translate(0, 0); }
+
+.reveal .slides section .fragment.fade-in-then-out,
+.reveal .slides section .fragment.current-visible {
+ opacity: 0;
+ visibility: hidden; }
+ .reveal .slides section .fragment.fade-in-then-out.current-fragment,
+ .reveal .slides section .fragment.current-visible.current-fragment {
+ opacity: 1;
+ visibility: inherit; }
+
+.reveal .slides section .fragment.fade-in-then-semi-out {
+ opacity: 0;
+ visibility: hidden; }
+ .reveal .slides section .fragment.fade-in-then-semi-out.visible {
+ opacity: 0.5;
+ visibility: inherit; }
+ .reveal .slides section .fragment.fade-in-then-semi-out.current-fragment {
+ opacity: 1;
+ visibility: inherit; }
+
+.reveal .slides section .fragment.highlight-red,
+.reveal .slides section .fragment.highlight-current-red,
+.reveal .slides section .fragment.highlight-green,
+.reveal .slides section .fragment.highlight-current-green,
+.reveal .slides section .fragment.highlight-blue,
+.reveal .slides section .fragment.highlight-current-blue {
+ opacity: 1;
+ visibility: inherit; }
+
+.reveal .slides section .fragment.highlight-red.visible {
+ color: #ff2c2d; }
+
+.reveal .slides section .fragment.highlight-green.visible {
+ color: #17ff2e; }
+
+.reveal .slides section .fragment.highlight-blue.visible {
+ color: #1b91ff; }
+
+.reveal .slides section .fragment.highlight-current-red.current-fragment {
+ color: #ff2c2d; }
+
+.reveal .slides section .fragment.highlight-current-green.current-fragment {
+ color: #17ff2e; }
+
+.reveal .slides section .fragment.highlight-current-blue.current-fragment {
+ color: #1b91ff; }
+
+/*********************************************
+ * DEFAULT ELEMENT STYLES
+ *********************************************/
+/* Fixes issue in Chrome where italic fonts did not appear when printing to PDF */
+.reveal:after {
+ content: '';
+ font-style: italic; }
+
+.reveal iframe {
+ z-index: 1; }
+
+/** Prevents layering issues in certain browser/transition combinations */
+.reveal a {
+ position: relative; }
+
+.reveal .stretch {
+ max-width: none;
+ max-height: none; }
+
+.reveal pre.stretch code {
+ height: 100%;
+ max-height: 100%;
+ box-sizing: border-box; }
+
+/*********************************************
+ * CONTROLS
+ *********************************************/
+@-webkit-keyframes bounce-right {
+ 0%, 10%, 25%, 40%, 50% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0); }
+ 20% {
+ -webkit-transform: translateX(10px);
+ transform: translateX(10px); }
+ 30% {
+ -webkit-transform: translateX(-5px);
+ transform: translateX(-5px); } }
+@keyframes bounce-right {
+ 0%, 10%, 25%, 40%, 50% {
+ -webkit-transform: translateX(0);
+ transform: translateX(0); }
+ 20% {
+ -webkit-transform: translateX(10px);
+ transform: translateX(10px); }
+ 30% {
+ -webkit-transform: translateX(-5px);
+ transform: translateX(-5px); } }
+
+@-webkit-keyframes bounce-down {
+ 0%, 10%, 25%, 40%, 50% {
+ -webkit-transform: translateY(0);
+ transform: translateY(0); }
+ 20% {
+ -webkit-transform: translateY(10px);
+ transform: translateY(10px); }
+ 30% {
+ -webkit-transform: translateY(-5px);
+ transform: translateY(-5px); } }
+
+@keyframes bounce-down {
+ 0%, 10%, 25%, 40%, 50% {
+ -webkit-transform: translateY(0);
+ transform: translateY(0); }
+ 20% {
+ -webkit-transform: translateY(10px);
+ transform: translateY(10px); }
+ 30% {
+ -webkit-transform: translateY(-5px);
+ transform: translateY(-5px); } }
+
+.reveal .controls {
+ display: none;
+ position: absolute;
+ top: auto;
+ bottom: 12px;
+ right: 12px;
+ left: auto;
+ z-index: 1;
+ color: #000;
+ pointer-events: none;
+ font-size: 10px; }
+ .reveal .controls button {
+ position: absolute;
+ padding: 0;
+ background-color: transparent;
+ border: 0;
+ outline: 0;
+ cursor: pointer;
+ color: currentColor;
+ -webkit-transform: scale(0.9999);
+ transform: scale(0.9999);
+ transition: color 0.2s ease, opacity 0.2s ease, -webkit-transform 0.2s ease;
+ transition: color 0.2s ease, opacity 0.2s ease, transform 0.2s ease;
+ z-index: 2;
+ pointer-events: auto;
+ font-size: inherit;
+ visibility: hidden;
+ opacity: 0;
+ -webkit-appearance: none;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
+ .reveal .controls .controls-arrow:before,
+ .reveal .controls .controls-arrow:after {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 2.6em;
+ height: 0.5em;
+ border-radius: 0.25em;
+ background-color: currentColor;
+ transition: all 0.15s ease, background-color 0.8s ease;
+ -webkit-transform-origin: 0.2em 50%;
+ transform-origin: 0.2em 50%;
+ will-change: transform; }
+ .reveal .controls .controls-arrow {
+ position: relative;
+ width: 3.6em;
+ height: 3.6em; }
+ .reveal .controls .controls-arrow:before {
+ -webkit-transform: translateX(0.5em) translateY(1.55em) rotate(45deg);
+ transform: translateX(0.5em) translateY(1.55em) rotate(45deg); }
+ .reveal .controls .controls-arrow:after {
+ -webkit-transform: translateX(0.5em) translateY(1.55em) rotate(-45deg);
+ transform: translateX(0.5em) translateY(1.55em) rotate(-45deg); }
+ .reveal .controls .controls-arrow:hover:before {
+ -webkit-transform: translateX(0.5em) translateY(1.55em) rotate(40deg);
+ transform: translateX(0.5em) translateY(1.55em) rotate(40deg); }
+ .reveal .controls .controls-arrow:hover:after {
+ -webkit-transform: translateX(0.5em) translateY(1.55em) rotate(-40deg);
+ transform: translateX(0.5em) translateY(1.55em) rotate(-40deg); }
+ .reveal .controls .controls-arrow:active:before {
+ -webkit-transform: translateX(0.5em) translateY(1.55em) rotate(36deg);
+ transform: translateX(0.5em) translateY(1.55em) rotate(36deg); }
+ .reveal .controls .controls-arrow:active:after {
+ -webkit-transform: translateX(0.5em) translateY(1.55em) rotate(-36deg);
+ transform: translateX(0.5em) translateY(1.55em) rotate(-36deg); }
+ .reveal .controls .navigate-left {
+ right: 6.4em;
+ bottom: 3.2em;
+ -webkit-transform: translateX(-10px);
+ transform: translateX(-10px); }
+ .reveal .controls .navigate-right {
+ right: 0;
+ bottom: 3.2em;
+ -webkit-transform: translateX(10px);
+ transform: translateX(10px); }
+ .reveal .controls .navigate-right .controls-arrow {
+ -webkit-transform: rotate(180deg);
+ transform: rotate(180deg); }
+ .reveal .controls .navigate-right.highlight {
+ -webkit-animation: bounce-right 2s 50 both ease-out;
+ animation: bounce-right 2s 50 both ease-out; }
+ .reveal .controls .navigate-up {
+ right: 3.2em;
+ bottom: 6.4em;
+ -webkit-transform: translateY(-10px);
+ transform: translateY(-10px); }
+ .reveal .controls .navigate-up .controls-arrow {
+ -webkit-transform: rotate(90deg);
+ transform: rotate(90deg); }
+ .reveal .controls .navigate-down {
+ right: 3.2em;
+ bottom: 0;
+ -webkit-transform: translateY(10px);
+ transform: translateY(10px); }
+ .reveal .controls .navigate-down .controls-arrow {
+ -webkit-transform: rotate(-90deg);
+ transform: rotate(-90deg); }
+ .reveal .controls .navigate-down.highlight {
+ -webkit-animation: bounce-down 2s 50 both ease-out;
+ animation: bounce-down 2s 50 both ease-out; }
+ .reveal .controls[data-controls-back-arrows="faded"] .navigate-left.enabled,
+ .reveal .controls[data-controls-back-arrows="faded"] .navigate-up.enabled {
+ opacity: 0.3; }
+ .reveal .controls[data-controls-back-arrows="faded"] .navigate-left.enabled:hover,
+ .reveal .controls[data-controls-back-arrows="faded"] .navigate-up.enabled:hover {
+ opacity: 1; }
+ .reveal .controls[data-controls-back-arrows="hidden"] .navigate-left.enabled,
+ .reveal .controls[data-controls-back-arrows="hidden"] .navigate-up.enabled {
+ opacity: 0;
+ visibility: hidden; }
+ .reveal .controls .enabled {
+ visibility: visible;
+ opacity: 0.9;
+ cursor: pointer;
+ -webkit-transform: none;
+ transform: none; }
+ .reveal .controls .enabled.fragmented {
+ opacity: 0.5; }
+ .reveal .controls .enabled:hover,
+ .reveal .controls .enabled.fragmented:hover {
+ opacity: 1; }
+
+.reveal[data-navigation-mode="linear"].has-horizontal-slides .navigate-up,
+.reveal[data-navigation-mode="linear"].has-horizontal-slides .navigate-down {
+ display: none; }
+
+.reveal[data-navigation-mode="linear"].has-horizontal-slides .navigate-left,
+.reveal:not(.has-vertical-slides) .controls .navigate-left {
+ bottom: 1.4em;
+ right: 5.5em; }
+
+.reveal[data-navigation-mode="linear"].has-horizontal-slides .navigate-right,
+.reveal:not(.has-vertical-slides) .controls .navigate-right {
+ bottom: 1.4em;
+ right: 0.5em; }
+
+.reveal:not(.has-horizontal-slides) .controls .navigate-up {
+ right: 1.4em;
+ bottom: 5em; }
+
+.reveal:not(.has-horizontal-slides) .controls .navigate-down {
+ right: 1.4em;
+ bottom: 0.5em; }
+
+.reveal.has-dark-background .controls {
+ color: #fff; }
+
+.reveal.has-light-background .controls {
+ color: #000; }
+
+.reveal.no-hover .controls .controls-arrow:hover:before,
+.reveal.no-hover .controls .controls-arrow:active:before {
+ -webkit-transform: translateX(0.5em) translateY(1.55em) rotate(45deg);
+ transform: translateX(0.5em) translateY(1.55em) rotate(45deg); }
+
+.reveal.no-hover .controls .controls-arrow:hover:after,
+.reveal.no-hover .controls .controls-arrow:active:after {
+ -webkit-transform: translateX(0.5em) translateY(1.55em) rotate(-45deg);
+ transform: translateX(0.5em) translateY(1.55em) rotate(-45deg); }
+
+@media screen and (min-width: 500px) {
+ .reveal .controls[data-controls-layout="edges"] {
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0; }
+ .reveal .controls[data-controls-layout="edges"] .navigate-left,
+ .reveal .controls[data-controls-layout="edges"] .navigate-right,
+ .reveal .controls[data-controls-layout="edges"] .navigate-up,
+ .reveal .controls[data-controls-layout="edges"] .navigate-down {
+ bottom: auto;
+ right: auto; }
+ .reveal .controls[data-controls-layout="edges"] .navigate-left {
+ top: 50%;
+ left: 8px;
+ margin-top: -1.8em; }
+ .reveal .controls[data-controls-layout="edges"] .navigate-right {
+ top: 50%;
+ right: 8px;
+ margin-top: -1.8em; }
+ .reveal .controls[data-controls-layout="edges"] .navigate-up {
+ top: 8px;
+ left: 50%;
+ margin-left: -1.8em; }
+ .reveal .controls[data-controls-layout="edges"] .navigate-down {
+ bottom: 8px;
+ left: 50%;
+ margin-left: -1.8em; } }
+
+/*********************************************
+ * PROGRESS BAR
+ *********************************************/
+.reveal .progress {
+ position: absolute;
+ display: none;
+ height: 3px;
+ width: 100%;
+ bottom: 0;
+ left: 0;
+ z-index: 10;
+ background-color: rgba(0, 0, 0, 0.2);
+ color: #fff; }
+
+.reveal .progress:after {
+ content: '';
+ display: block;
+ position: absolute;
+ height: 10px;
+ width: 100%;
+ top: -10px; }
+
+.reveal .progress span {
+ display: block;
+ height: 100%;
+ width: 0px;
+ background-color: currentColor;
+ transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
+
+/*********************************************
+ * SLIDE NUMBER
+ *********************************************/
+.reveal .slide-number {
+ position: absolute;
+ display: block;
+ right: 8px;
+ bottom: 8px;
+ z-index: 31;
+ font-family: Helvetica, sans-serif;
+ font-size: 12px;
+ line-height: 1;
+ color: #fff;
+ background-color: rgba(0, 0, 0, 0.4);
+ padding: 5px; }
+
+.reveal .slide-number a {
+ color: currentColor; }
+
+.reveal .slide-number-delimiter {
+ margin: 0 3px; }
+
+/*********************************************
+ * SLIDES
+ *********************************************/
+.reveal {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ -ms-touch-action: pinch-zoom;
+ touch-action: pinch-zoom; }
+
+.reveal .slides {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ margin: auto;
+ pointer-events: none;
+ overflow: visible;
+ z-index: 1;
+ text-align: center;
+ -webkit-perspective: 600px;
+ perspective: 600px;
+ -webkit-perspective-origin: 50% 40%;
+ perspective-origin: 50% 40%; }
+
+.reveal .slides > section {
+ -webkit-perspective: 600px;
+ perspective: 600px; }
+
+.reveal .slides > section,
+.reveal .slides > section > section {
+ display: none;
+ position: absolute;
+ width: 100%;
+ padding: 20px 0px;
+ pointer-events: auto;
+ z-index: 10;
+ -webkit-transform-style: flat;
+ transform-style: flat;
+ transition: -webkit-transform-origin 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), -webkit-transform 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), visibility 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), opacity 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+ transition: transform-origin 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), transform 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), visibility 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), opacity 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
+
+/* Global transition speed settings */
+.reveal[data-transition-speed="fast"] .slides section {
+ transition-duration: 400ms; }
+
+.reveal[data-transition-speed="slow"] .slides section {
+ transition-duration: 1200ms; }
+
+/* Slide-specific transition speed overrides */
+.reveal .slides section[data-transition-speed="fast"] {
+ transition-duration: 400ms; }
+
+.reveal .slides section[data-transition-speed="slow"] {
+ transition-duration: 1200ms; }
+
+.reveal .slides > section.stack {
+ padding-top: 0;
+ padding-bottom: 0;
+ pointer-events: none;
+ height: 100%; }
+
+.reveal .slides > section.present,
+.reveal .slides > section > section.present {
+ display: block;
+ z-index: 11;
+ opacity: 1; }
+
+.reveal .slides > section:empty,
+.reveal .slides > section > section:empty,
+.reveal .slides > section[data-background-interactive],
+.reveal .slides > section > section[data-background-interactive] {
+ pointer-events: none; }
+
+.reveal.center,
+.reveal.center .slides,
+.reveal.center .slides section {
+ min-height: 0 !important; }
+
+/* Don't allow interaction with invisible slides */
+.reveal .slides > section.future,
+.reveal .slides > section > section.future,
+.reveal .slides > section.past,
+.reveal .slides > section > section.past {
+ pointer-events: none; }
+
+.reveal.overview .slides > section,
+.reveal.overview .slides > section > section {
+ pointer-events: auto; }
+
+.reveal .slides > section.past,
+.reveal .slides > section.future,
+.reveal .slides > section > section.past,
+.reveal .slides > section > section.future {
+ opacity: 0; }
+
+/*********************************************
+ * Mixins for readability of transitions
+ *********************************************/
+/*********************************************
+ * SLIDE TRANSITION
+ * Aliased 'linear' for backwards compatibility
+ *********************************************/
+.reveal.slide section {
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden; }
+
+.reveal .slides > section[data-transition=slide].past,
+.reveal .slides > section[data-transition~=slide-out].past,
+.reveal.slide .slides > section:not([data-transition]).past {
+ -webkit-transform: translate(-150%, 0);
+ transform: translate(-150%, 0); }
+
+.reveal .slides > section[data-transition=slide].future,
+.reveal .slides > section[data-transition~=slide-in].future,
+.reveal.slide .slides > section:not([data-transition]).future {
+ -webkit-transform: translate(150%, 0);
+ transform: translate(150%, 0); }
+
+.reveal .slides > section > section[data-transition=slide].past,
+.reveal .slides > section > section[data-transition~=slide-out].past,
+.reveal.slide .slides > section > section:not([data-transition]).past {
+ -webkit-transform: translate(0, -150%);
+ transform: translate(0, -150%); }
+
+.reveal .slides > section > section[data-transition=slide].future,
+.reveal .slides > section > section[data-transition~=slide-in].future,
+.reveal.slide .slides > section > section:not([data-transition]).future {
+ -webkit-transform: translate(0, 150%);
+ transform: translate(0, 150%); }
+
+.reveal.linear section {
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden; }
+
+.reveal .slides > section[data-transition=linear].past,
+.reveal .slides > section[data-transition~=linear-out].past,
+.reveal.linear .slides > section:not([data-transition]).past {
+ -webkit-transform: translate(-150%, 0);
+ transform: translate(-150%, 0); }
+
+.reveal .slides > section[data-transition=linear].future,
+.reveal .slides > section[data-transition~=linear-in].future,
+.reveal.linear .slides > section:not([data-transition]).future {
+ -webkit-transform: translate(150%, 0);
+ transform: translate(150%, 0); }
+
+.reveal .slides > section > section[data-transition=linear].past,
+.reveal .slides > section > section[data-transition~=linear-out].past,
+.reveal.linear .slides > section > section:not([data-transition]).past {
+ -webkit-transform: translate(0, -150%);
+ transform: translate(0, -150%); }
+
+.reveal .slides > section > section[data-transition=linear].future,
+.reveal .slides > section > section[data-transition~=linear-in].future,
+.reveal.linear .slides > section > section:not([data-transition]).future {
+ -webkit-transform: translate(0, 150%);
+ transform: translate(0, 150%); }
+
+/*********************************************
+ * CONVEX TRANSITION
+ * Aliased 'default' for backwards compatibility
+ *********************************************/
+.reveal .slides section[data-transition=default].stack,
+.reveal.default .slides section.stack {
+ -webkit-transform-style: preserve-3d;
+ transform-style: preserve-3d; }
+
+.reveal .slides > section[data-transition=default].past,
+.reveal .slides > section[data-transition~=default-out].past,
+.reveal.default .slides > section:not([data-transition]).past {
+ -webkit-transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); }
+
+.reveal .slides > section[data-transition=default].future,
+.reveal .slides > section[data-transition~=default-in].future,
+.reveal.default .slides > section:not([data-transition]).future {
+ -webkit-transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); }
+
+.reveal .slides > section > section[data-transition=default].past,
+.reveal .slides > section > section[data-transition~=default-out].past,
+.reveal.default .slides > section > section:not([data-transition]).past {
+ -webkit-transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0);
+ transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0); }
+
+.reveal .slides > section > section[data-transition=default].future,
+.reveal .slides > section > section[data-transition~=default-in].future,
+.reveal.default .slides > section > section:not([data-transition]).future {
+ -webkit-transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0);
+ transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0); }
+
+.reveal .slides section[data-transition=convex].stack,
+.reveal.convex .slides section.stack {
+ -webkit-transform-style: preserve-3d;
+ transform-style: preserve-3d; }
+
+.reveal .slides > section[data-transition=convex].past,
+.reveal .slides > section[data-transition~=convex-out].past,
+.reveal.convex .slides > section:not([data-transition]).past {
+ -webkit-transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); }
+
+.reveal .slides > section[data-transition=convex].future,
+.reveal .slides > section[data-transition~=convex-in].future,
+.reveal.convex .slides > section:not([data-transition]).future {
+ -webkit-transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); }
+
+.reveal .slides > section > section[data-transition=convex].past,
+.reveal .slides > section > section[data-transition~=convex-out].past,
+.reveal.convex .slides > section > section:not([data-transition]).past {
+ -webkit-transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0);
+ transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0); }
+
+.reveal .slides > section > section[data-transition=convex].future,
+.reveal .slides > section > section[data-transition~=convex-in].future,
+.reveal.convex .slides > section > section:not([data-transition]).future {
+ -webkit-transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0);
+ transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0); }
+
+/*********************************************
+ * CONCAVE TRANSITION
+ *********************************************/
+.reveal .slides section[data-transition=concave].stack,
+.reveal.concave .slides section.stack {
+ -webkit-transform-style: preserve-3d;
+ transform-style: preserve-3d; }
+
+.reveal .slides > section[data-transition=concave].past,
+.reveal .slides > section[data-transition~=concave-out].past,
+.reveal.concave .slides > section:not([data-transition]).past {
+ -webkit-transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); }
+
+.reveal .slides > section[data-transition=concave].future,
+.reveal .slides > section[data-transition~=concave-in].future,
+.reveal.concave .slides > section:not([data-transition]).future {
+ -webkit-transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); }
+
+.reveal .slides > section > section[data-transition=concave].past,
+.reveal .slides > section > section[data-transition~=concave-out].past,
+.reveal.concave .slides > section > section:not([data-transition]).past {
+ -webkit-transform: translate3d(0, -80%, 0) rotateX(-70deg) translate3d(0, -80%, 0);
+ transform: translate3d(0, -80%, 0) rotateX(-70deg) translate3d(0, -80%, 0); }
+
+.reveal .slides > section > section[data-transition=concave].future,
+.reveal .slides > section > section[data-transition~=concave-in].future,
+.reveal.concave .slides > section > section:not([data-transition]).future {
+ -webkit-transform: translate3d(0, 80%, 0) rotateX(70deg) translate3d(0, 80%, 0);
+ transform: translate3d(0, 80%, 0) rotateX(70deg) translate3d(0, 80%, 0); }
+
+/*********************************************
+ * ZOOM TRANSITION
+ *********************************************/
+.reveal .slides section[data-transition=zoom],
+.reveal.zoom .slides section:not([data-transition]) {
+ transition-timing-function: ease; }
+
+.reveal .slides > section[data-transition=zoom].past,
+.reveal .slides > section[data-transition~=zoom-out].past,
+.reveal.zoom .slides > section:not([data-transition]).past {
+ visibility: hidden;
+ -webkit-transform: scale(16);
+ transform: scale(16); }
+
+.reveal .slides > section[data-transition=zoom].future,
+.reveal .slides > section[data-transition~=zoom-in].future,
+.reveal.zoom .slides > section:not([data-transition]).future {
+ visibility: hidden;
+ -webkit-transform: scale(0.2);
+ transform: scale(0.2); }
+
+.reveal .slides > section > section[data-transition=zoom].past,
+.reveal .slides > section > section[data-transition~=zoom-out].past,
+.reveal.zoom .slides > section > section:not([data-transition]).past {
+ -webkit-transform: scale(16);
+ transform: scale(16); }
+
+.reveal .slides > section > section[data-transition=zoom].future,
+.reveal .slides > section > section[data-transition~=zoom-in].future,
+.reveal.zoom .slides > section > section:not([data-transition]).future {
+ -webkit-transform: scale(0.2);
+ transform: scale(0.2); }
+
+/*********************************************
+ * CUBE TRANSITION
+ *
+ * WARNING:
+ * this is deprecated and will be removed in a
+ * future version.
+ *********************************************/
+.reveal.cube .slides {
+ -webkit-perspective: 1300px;
+ perspective: 1300px; }
+
+.reveal.cube .slides section {
+ padding: 30px;
+ min-height: 700px;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ box-sizing: border-box;
+ -webkit-transform-style: preserve-3d;
+ transform-style: preserve-3d; }
+
+.reveal.center.cube .slides section {
+ min-height: 0; }
+
+.reveal.cube .slides section:not(.stack):before {
+ content: '';
+ position: absolute;
+ display: block;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ background: rgba(0, 0, 0, 0.1);
+ border-radius: 4px;
+ -webkit-transform: translateZ(-20px);
+ transform: translateZ(-20px); }
+
+.reveal.cube .slides section:not(.stack):after {
+ content: '';
+ position: absolute;
+ display: block;
+ width: 90%;
+ height: 30px;
+ left: 5%;
+ bottom: 0;
+ background: none;
+ z-index: 1;
+ border-radius: 4px;
+ box-shadow: 0px 95px 25px rgba(0, 0, 0, 0.2);
+ -webkit-transform: translateZ(-90px) rotateX(65deg);
+ transform: translateZ(-90px) rotateX(65deg); }
+
+.reveal.cube .slides > section.stack {
+ padding: 0;
+ background: none; }
+
+.reveal.cube .slides > section.past {
+ -webkit-transform-origin: 100% 0%;
+ transform-origin: 100% 0%;
+ -webkit-transform: translate3d(-100%, 0, 0) rotateY(-90deg);
+ transform: translate3d(-100%, 0, 0) rotateY(-90deg); }
+
+.reveal.cube .slides > section.future {
+ -webkit-transform-origin: 0% 0%;
+ transform-origin: 0% 0%;
+ -webkit-transform: translate3d(100%, 0, 0) rotateY(90deg);
+ transform: translate3d(100%, 0, 0) rotateY(90deg); }
+
+.reveal.cube .slides > section > section.past {
+ -webkit-transform-origin: 0% 100%;
+ transform-origin: 0% 100%;
+ -webkit-transform: translate3d(0, -100%, 0) rotateX(90deg);
+ transform: translate3d(0, -100%, 0) rotateX(90deg); }
+
+.reveal.cube .slides > section > section.future {
+ -webkit-transform-origin: 0% 0%;
+ transform-origin: 0% 0%;
+ -webkit-transform: translate3d(0, 100%, 0) rotateX(-90deg);
+ transform: translate3d(0, 100%, 0) rotateX(-90deg); }
+
+/*********************************************
+ * PAGE TRANSITION
+ *
+ * WARNING:
+ * this is deprecated and will be removed in a
+ * future version.
+ *********************************************/
+.reveal.page .slides {
+ -webkit-perspective-origin: 0% 50%;
+ perspective-origin: 0% 50%;
+ -webkit-perspective: 3000px;
+ perspective: 3000px; }
+
+.reveal.page .slides section {
+ padding: 30px;
+ min-height: 700px;
+ box-sizing: border-box;
+ -webkit-transform-style: preserve-3d;
+ transform-style: preserve-3d; }
+
+.reveal.page .slides section.past {
+ z-index: 12; }
+
+.reveal.page .slides section:not(.stack):before {
+ content: '';
+ position: absolute;
+ display: block;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ background: rgba(0, 0, 0, 0.1);
+ -webkit-transform: translateZ(-20px);
+ transform: translateZ(-20px); }
+
+.reveal.page .slides section:not(.stack):after {
+ content: '';
+ position: absolute;
+ display: block;
+ width: 90%;
+ height: 30px;
+ left: 5%;
+ bottom: 0;
+ background: none;
+ z-index: 1;
+ border-radius: 4px;
+ box-shadow: 0px 95px 25px rgba(0, 0, 0, 0.2);
+ -webkit-transform: translateZ(-90px) rotateX(65deg); }
+
+.reveal.page .slides > section.stack {
+ padding: 0;
+ background: none; }
+
+.reveal.page .slides > section.past {
+ -webkit-transform-origin: 0% 0%;
+ transform-origin: 0% 0%;
+ -webkit-transform: translate3d(-40%, 0, 0) rotateY(-80deg);
+ transform: translate3d(-40%, 0, 0) rotateY(-80deg); }
+
+.reveal.page .slides > section.future {
+ -webkit-transform-origin: 100% 0%;
+ transform-origin: 100% 0%;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+
+.reveal.page .slides > section > section.past {
+ -webkit-transform-origin: 0% 0%;
+ transform-origin: 0% 0%;
+ -webkit-transform: translate3d(0, -40%, 0) rotateX(80deg);
+ transform: translate3d(0, -40%, 0) rotateX(80deg); }
+
+.reveal.page .slides > section > section.future {
+ -webkit-transform-origin: 0% 100%;
+ transform-origin: 0% 100%;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+
+/*********************************************
+ * FADE TRANSITION
+ *********************************************/
+.reveal .slides section[data-transition=fade],
+.reveal.fade .slides section:not([data-transition]),
+.reveal.fade .slides > section > section:not([data-transition]) {
+ -webkit-transform: none;
+ transform: none;
+ transition: opacity 0.5s; }
+
+.reveal.fade.overview .slides section,
+.reveal.fade.overview .slides > section > section {
+ transition: none; }
+
+/*********************************************
+ * NO TRANSITION
+ *********************************************/
+.reveal .slides section[data-transition=none],
+.reveal.none .slides section:not([data-transition]) {
+ -webkit-transform: none;
+ transform: none;
+ transition: none; }
+
+/*********************************************
+ * PAUSED MODE
+ *********************************************/
+.reveal .pause-overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: black;
+ visibility: hidden;
+ opacity: 0;
+ z-index: 100;
+ transition: all 1s ease; }
+
+.reveal .pause-overlay .resume-button {
+ position: absolute;
+ bottom: 20px;
+ right: 20px;
+ color: #ccc;
+ border-radius: 2px;
+ padding: 6px 14px;
+ border: 2px solid #ccc;
+ font-size: 16px;
+ background: transparent;
+ cursor: pointer; }
+ .reveal .pause-overlay .resume-button:hover {
+ color: #fff;
+ border-color: #fff; }
+
+.reveal.paused .pause-overlay {
+ visibility: visible;
+ opacity: 1; }
+
+/*********************************************
+ * FALLBACK
+ *********************************************/
+.no-transforms {
+ overflow-y: auto; }
+
+.no-transforms .reveal {
+ overflow: visible; }
+
+.no-transforms .reveal .slides {
+ position: relative;
+ width: 80%;
+ max-width: 1280px;
+ height: auto;
+ top: 0;
+ margin: 0 auto;
+ text-align: center; }
+
+.no-transforms .reveal .controls,
+.no-transforms .reveal .progress {
+ display: none; }
+
+.no-transforms .reveal .slides section {
+ display: block;
+ opacity: 1;
+ position: relative;
+ height: auto;
+ min-height: 0;
+ top: 0;
+ left: 0;
+ margin: 10vh 0;
+ margin: 70px 0;
+ -webkit-transform: none;
+ transform: none; }
+
+.reveal .no-transition,
+.reveal .no-transition * {
+ transition: none !important; }
+
+/*********************************************
+ * PER-SLIDE BACKGROUNDS
+ *********************************************/
+.reveal .backgrounds {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ -webkit-perspective: 600px;
+ perspective: 600px; }
+
+.reveal .slide-background {
+ display: none;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ opacity: 0;
+ visibility: hidden;
+ overflow: hidden;
+ background-color: rgba(0, 0, 0, 0);
+ transition: all 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
+
+.reveal .slide-background-content {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background-position: 50% 50%;
+ background-repeat: no-repeat;
+ background-size: cover; }
+
+.reveal .slide-background.stack {
+ display: block; }
+
+.reveal .slide-background.present {
+ opacity: 1;
+ visibility: visible;
+ z-index: 2; }
+
+.print-pdf .reveal .slide-background {
+ opacity: 1 !important;
+ visibility: visible !important; }
+
+/* Video backgrounds */
+.reveal .slide-background video {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ max-width: none;
+ max-height: none;
+ top: 0;
+ left: 0;
+ -o-object-fit: cover;
+ object-fit: cover; }
+
+.reveal .slide-background[data-background-size="contain"] video {
+ -o-object-fit: contain;
+ object-fit: contain; }
+
+/* Immediate transition style */
+.reveal[data-background-transition=none] > .backgrounds .slide-background,
+.reveal > .backgrounds .slide-background[data-background-transition=none] {
+ transition: none; }
+
+/* Slide */
+.reveal[data-background-transition=slide] > .backgrounds .slide-background,
+.reveal > .backgrounds .slide-background[data-background-transition=slide] {
+ opacity: 1;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden; }
+
+.reveal[data-background-transition=slide] > .backgrounds .slide-background.past,
+.reveal > .backgrounds .slide-background.past[data-background-transition=slide] {
+ -webkit-transform: translate(-100%, 0);
+ transform: translate(-100%, 0); }
+
+.reveal[data-background-transition=slide] > .backgrounds .slide-background.future,
+.reveal > .backgrounds .slide-background.future[data-background-transition=slide] {
+ -webkit-transform: translate(100%, 0);
+ transform: translate(100%, 0); }
+
+.reveal[data-background-transition=slide] > .backgrounds .slide-background > .slide-background.past,
+.reveal > .backgrounds .slide-background > .slide-background.past[data-background-transition=slide] {
+ -webkit-transform: translate(0, -100%);
+ transform: translate(0, -100%); }
+
+.reveal[data-background-transition=slide] > .backgrounds .slide-background > .slide-background.future,
+.reveal > .backgrounds .slide-background > .slide-background.future[data-background-transition=slide] {
+ -webkit-transform: translate(0, 100%);
+ transform: translate(0, 100%); }
+
+/* Convex */
+.reveal[data-background-transition=convex] > .backgrounds .slide-background.past,
+.reveal > .backgrounds .slide-background.past[data-background-transition=convex] {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); }
+
+.reveal[data-background-transition=convex] > .backgrounds .slide-background.future,
+.reveal > .backgrounds .slide-background.future[data-background-transition=convex] {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); }
+
+.reveal[data-background-transition=convex] > .backgrounds .slide-background > .slide-background.past,
+.reveal > .backgrounds .slide-background > .slide-background.past[data-background-transition=convex] {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0) rotateX(90deg) translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0) rotateX(90deg) translate3d(0, -100%, 0); }
+
+.reveal[data-background-transition=convex] > .backgrounds .slide-background > .slide-background.future,
+.reveal > .backgrounds .slide-background > .slide-background.future[data-background-transition=convex] {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0) rotateX(-90deg) translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0) rotateX(-90deg) translate3d(0, 100%, 0); }
+
+/* Concave */
+.reveal[data-background-transition=concave] > .backgrounds .slide-background.past,
+.reveal > .backgrounds .slide-background.past[data-background-transition=concave] {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); }
+
+.reveal[data-background-transition=concave] > .backgrounds .slide-background.future,
+.reveal > .backgrounds .slide-background.future[data-background-transition=concave] {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); }
+
+.reveal[data-background-transition=concave] > .backgrounds .slide-background > .slide-background.past,
+.reveal > .backgrounds .slide-background > .slide-background.past[data-background-transition=concave] {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0) rotateX(-90deg) translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0) rotateX(-90deg) translate3d(0, -100%, 0); }
+
+.reveal[data-background-transition=concave] > .backgrounds .slide-background > .slide-background.future,
+.reveal > .backgrounds .slide-background > .slide-background.future[data-background-transition=concave] {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0) rotateX(90deg) translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0) rotateX(90deg) translate3d(0, 100%, 0); }
+
+/* Zoom */
+.reveal[data-background-transition=zoom] > .backgrounds .slide-background,
+.reveal > .backgrounds .slide-background[data-background-transition=zoom] {
+ transition-timing-function: ease; }
+
+.reveal[data-background-transition=zoom] > .backgrounds .slide-background.past,
+.reveal > .backgrounds .slide-background.past[data-background-transition=zoom] {
+ opacity: 0;
+ visibility: hidden;
+ -webkit-transform: scale(16);
+ transform: scale(16); }
+
+.reveal[data-background-transition=zoom] > .backgrounds .slide-background.future,
+.reveal > .backgrounds .slide-background.future[data-background-transition=zoom] {
+ opacity: 0;
+ visibility: hidden;
+ -webkit-transform: scale(0.2);
+ transform: scale(0.2); }
+
+.reveal[data-background-transition=zoom] > .backgrounds .slide-background > .slide-background.past,
+.reveal > .backgrounds .slide-background > .slide-background.past[data-background-transition=zoom] {
+ opacity: 0;
+ visibility: hidden;
+ -webkit-transform: scale(16);
+ transform: scale(16); }
+
+.reveal[data-background-transition=zoom] > .backgrounds .slide-background > .slide-background.future,
+.reveal > .backgrounds .slide-background > .slide-background.future[data-background-transition=zoom] {
+ opacity: 0;
+ visibility: hidden;
+ -webkit-transform: scale(0.2);
+ transform: scale(0.2); }
+
+/* Global transition speed settings */
+.reveal[data-transition-speed="fast"] > .backgrounds .slide-background {
+ transition-duration: 400ms; }
+
+.reveal[data-transition-speed="slow"] > .backgrounds .slide-background {
+ transition-duration: 1200ms; }
+
+/*********************************************
+ * OVERVIEW
+ *********************************************/
+.reveal.overview {
+ -webkit-perspective-origin: 50% 50%;
+ perspective-origin: 50% 50%;
+ -webkit-perspective: 700px;
+ perspective: 700px; }
+ .reveal.overview .slides {
+ -moz-transform-style: preserve-3d; }
+ .reveal.overview .slides section {
+ height: 100%;
+ top: 0 !important;
+ opacity: 1 !important;
+ overflow: hidden;
+ visibility: visible !important;
+ cursor: pointer;
+ box-sizing: border-box; }
+ .reveal.overview .slides section:hover,
+ .reveal.overview .slides section.present {
+ outline: 10px solid rgba(150, 150, 150, 0.4);
+ outline-offset: 10px; }
+ .reveal.overview .slides section .fragment {
+ opacity: 1;
+ transition: none; }
+ .reveal.overview .slides section:after,
+ .reveal.overview .slides section:before {
+ display: none !important; }
+ .reveal.overview .slides > section.stack {
+ padding: 0;
+ top: 0 !important;
+ background: none;
+ outline: none;
+ overflow: visible; }
+ .reveal.overview .backgrounds {
+ -webkit-perspective: inherit;
+ perspective: inherit;
+ -moz-transform-style: preserve-3d; }
+ .reveal.overview .backgrounds .slide-background {
+ opacity: 1;
+ visibility: visible;
+ outline: 10px solid rgba(150, 150, 150, 0.1);
+ outline-offset: 10px; }
+ .reveal.overview .backgrounds .slide-background.stack {
+ overflow: visible; }
+
+.reveal.overview .slides section,
+.reveal.overview-deactivating .slides section {
+ transition: none; }
+
+.reveal.overview .backgrounds .slide-background,
+.reveal.overview-deactivating .backgrounds .slide-background {
+ transition: none; }
+
+/*********************************************
+ * RTL SUPPORT
+ *********************************************/
+.reveal.rtl .slides,
+.reveal.rtl .slides h1,
+.reveal.rtl .slides h2,
+.reveal.rtl .slides h3,
+.reveal.rtl .slides h4,
+.reveal.rtl .slides h5,
+.reveal.rtl .slides h6 {
+ direction: rtl;
+ font-family: sans-serif; }
+
+.reveal.rtl pre,
+.reveal.rtl code {
+ direction: ltr; }
+
+.reveal.rtl ol,
+.reveal.rtl ul {
+ text-align: right; }
+
+.reveal.rtl .progress span {
+ float: right; }
+
+/*********************************************
+ * PARALLAX BACKGROUND
+ *********************************************/
+.reveal.has-parallax-background .backgrounds {
+ transition: all 0.8s ease; }
+
+/* Global transition speed settings */
+.reveal.has-parallax-background[data-transition-speed="fast"] .backgrounds {
+ transition-duration: 400ms; }
+
+.reveal.has-parallax-background[data-transition-speed="slow"] .backgrounds {
+ transition-duration: 1200ms; }
+
+/*********************************************
+ * OVERLAY FOR LINK PREVIEWS AND HELP
+ *********************************************/
+.reveal > .overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 1000;
+ background: rgba(0, 0, 0, 0.9);
+ opacity: 0;
+ visibility: hidden;
+ transition: all 0.3s ease; }
+
+.reveal > .overlay.visible {
+ opacity: 1;
+ visibility: visible; }
+
+.reveal > .overlay .spinner {
+ position: absolute;
+ display: block;
+ top: 50%;
+ left: 50%;
+ width: 32px;
+ height: 32px;
+ margin: -16px 0 0 -16px;
+ z-index: 10;
+ background-image: url(data:image/gif;base64,R0lGODlhIAAgAPMAAJmZmf%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D);
+ visibility: visible;
+ opacity: 0.6;
+ transition: all 0.3s ease; }
+
+.reveal > .overlay header {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 40px;
+ z-index: 2;
+ border-bottom: 1px solid #222; }
+
+.reveal > .overlay header a {
+ display: inline-block;
+ width: 40px;
+ height: 40px;
+ line-height: 36px;
+ padding: 0 10px;
+ float: right;
+ opacity: 0.6;
+ box-sizing: border-box; }
+
+.reveal > .overlay header a:hover {
+ opacity: 1; }
+
+.reveal > .overlay header a .icon {
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+ background-position: 50% 50%;
+ background-size: 100%;
+ background-repeat: no-repeat; }
+
+.reveal > .overlay header a.close .icon {
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC); }
+
+.reveal > .overlay header a.external .icon {
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==); }
+
+.reveal > .overlay .viewport {
+ position: absolute;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ top: 40px;
+ right: 0;
+ bottom: 0;
+ left: 0; }
+
+.reveal > .overlay.overlay-preview .viewport iframe {
+ width: 100%;
+ height: 100%;
+ max-width: 100%;
+ max-height: 100%;
+ border: 0;
+ opacity: 0;
+ visibility: hidden;
+ transition: all 0.3s ease; }
+
+.reveal > .overlay.overlay-preview.loaded .viewport iframe {
+ opacity: 1;
+ visibility: visible; }
+
+.reveal > .overlay.overlay-preview.loaded .viewport-inner {
+ position: absolute;
+ z-index: -1;
+ left: 0;
+ top: 45%;
+ width: 100%;
+ text-align: center;
+ letter-spacing: normal; }
+
+.reveal > .overlay.overlay-preview .x-frame-error {
+ opacity: 0;
+ transition: opacity 0.3s ease 0.3s; }
+
+.reveal > .overlay.overlay-preview.loaded .x-frame-error {
+ opacity: 1; }
+
+.reveal > .overlay.overlay-preview.loaded .spinner {
+ opacity: 0;
+ visibility: hidden;
+ -webkit-transform: scale(0.2);
+ transform: scale(0.2); }
+
+.reveal > .overlay.overlay-help .viewport {
+ overflow: auto;
+ color: #fff; }
+
+.reveal > .overlay.overlay-help .viewport .viewport-inner {
+ width: 600px;
+ margin: auto;
+ padding: 20px 20px 80px 20px;
+ text-align: center;
+ letter-spacing: normal; }
+
+.reveal > .overlay.overlay-help .viewport .viewport-inner .title {
+ font-size: 20px; }
+
+.reveal > .overlay.overlay-help .viewport .viewport-inner table {
+ border: 1px solid #fff;
+ border-collapse: collapse;
+ font-size: 16px; }
+
+.reveal > .overlay.overlay-help .viewport .viewport-inner table th,
+.reveal > .overlay.overlay-help .viewport .viewport-inner table td {
+ width: 200px;
+ padding: 14px;
+ border: 1px solid #fff;
+ vertical-align: middle; }
+
+.reveal > .overlay.overlay-help .viewport .viewport-inner table th {
+ padding-top: 20px;
+ padding-bottom: 20px; }
+
+/*********************************************
+ * PLAYBACK COMPONENT
+ *********************************************/
+.reveal .playback {
+ position: absolute;
+ left: 15px;
+ bottom: 20px;
+ z-index: 30;
+ cursor: pointer;
+ transition: all 400ms ease;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
+
+.reveal.overview .playback {
+ opacity: 0;
+ visibility: hidden; }
+
+/*********************************************
+ * CODE HIGHLGIHTING
+ *********************************************/
+.reveal .hljs table {
+ margin: initial; }
+
+.reveal .hljs-ln-code,
+.reveal .hljs-ln-numbers {
+ padding: 0;
+ border: 0; }
+
+.reveal .hljs-ln-numbers {
+ opacity: 0.6;
+ padding-right: 0.75em;
+ text-align: right;
+ vertical-align: top; }
+
+.reveal .hljs[data-line-numbers]:not([data-line-numbers=""]) tr:not(.highlight-line) {
+ opacity: 0.4; }
+
+/*********************************************
+ * ROLLING LINKS
+ *********************************************/
+.reveal .roll {
+ display: inline-block;
+ line-height: 1.2;
+ overflow: hidden;
+ vertical-align: top;
+ -webkit-perspective: 400px;
+ perspective: 400px;
+ -webkit-perspective-origin: 50% 50%;
+ perspective-origin: 50% 50%; }
+
+.reveal .roll:hover {
+ background: none;
+ text-shadow: none; }
+
+.reveal .roll span {
+ display: block;
+ position: relative;
+ padding: 0 2px;
+ pointer-events: none;
+ transition: all 400ms ease;
+ -webkit-transform-origin: 50% 0%;
+ transform-origin: 50% 0%;
+ -webkit-transform-style: preserve-3d;
+ transform-style: preserve-3d;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden; }
+
+.reveal .roll:hover span {
+ background: rgba(0, 0, 0, 0.5);
+ -webkit-transform: translate3d(0px, 0px, -45px) rotateX(90deg);
+ transform: translate3d(0px, 0px, -45px) rotateX(90deg); }
+
+.reveal .roll span:after {
+ content: attr(data-title);
+ display: block;
+ position: absolute;
+ left: 0;
+ top: 0;
+ padding: 0 2px;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transform-origin: 50% 0%;
+ transform-origin: 50% 0%;
+ -webkit-transform: translate3d(0px, 110%, 0px) rotateX(-90deg);
+ transform: translate3d(0px, 110%, 0px) rotateX(-90deg); }
+
+/*********************************************
+ * SPEAKER NOTES
+ *********************************************/
+.reveal aside.notes {
+ display: none; }
+
+.reveal .speaker-notes {
+ display: none;
+ position: absolute;
+ width: 33.3333333333%;
+ height: 100%;
+ top: 0;
+ left: 100%;
+ padding: 14px 18px 14px 18px;
+ z-index: 1;
+ font-size: 18px;
+ line-height: 1.4;
+ border: 1px solid rgba(0, 0, 0, 0.05);
+ color: #222;
+ background-color: #f5f5f5;
+ overflow: auto;
+ box-sizing: border-box;
+ text-align: left;
+ font-family: Helvetica, sans-serif;
+ -webkit-overflow-scrolling: touch; }
+ .reveal .speaker-notes .notes-placeholder {
+ color: #ccc;
+ font-style: italic; }
+ .reveal .speaker-notes:focus {
+ outline: none; }
+ .reveal .speaker-notes:before {
+ content: 'Speaker notes';
+ display: block;
+ margin-bottom: 10px;
+ opacity: 0.5; }
+
+.reveal.show-notes {
+ max-width: 75%;
+ overflow: visible; }
+
+.reveal.show-notes .speaker-notes {
+ display: block; }
+
+@media screen and (min-width: 1600px) {
+ .reveal .speaker-notes {
+ font-size: 20px; } }
+
+@media screen and (max-width: 1024px) {
+ .reveal.show-notes {
+ border-left: 0;
+ max-width: none;
+ max-height: 70%;
+ max-height: 70vh;
+ overflow: visible; }
+ .reveal.show-notes .speaker-notes {
+ top: 100%;
+ left: 0;
+ width: 100%;
+ height: 42.8571428571%;
+ height: 30vh;
+ border: 0; } }
+
+@media screen and (max-width: 600px) {
+ .reveal.show-notes {
+ max-height: 60%;
+ max-height: 60vh; }
+ .reveal.show-notes .speaker-notes {
+ top: 100%;
+ height: 66.6666666667%;
+ height: 40vh; }
+ .reveal .speaker-notes {
+ font-size: 14px; } }
+
+/*********************************************
+ * ZOOM PLUGIN
+ *********************************************/
+.zoomed .reveal *,
+.zoomed .reveal *:before,
+.zoomed .reveal *:after {
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important; }
+
+.zoomed .reveal .progress,
+.zoomed .reveal .controls {
+ opacity: 0; }
+
+.zoomed .reveal .roll span {
+ background: none; }
+
+.zoomed .reveal .roll span:after {
+ visibility: hidden; }
\ No newline at end of file
diff --git a/assets/js/reveal.js b/assets/js/reveal.js
new file mode 100644
index 0000000..0d83445
--- /dev/null
+++ b/assets/js/reveal.js
@@ -0,0 +1,6028 @@
+/*!
+ * reveal.js
+ * http://revealjs.com
+ * MIT licensed
+ *
+ * Copyright (C) 2019 Hakim El Hattab, http://hakim.se
+ */
+(function (root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(function () {
+ root.Reveal = factory();
+ return root.Reveal;
+ });
+ } else if (typeof exports === 'object') {
+ // Node. Does not work with strict CommonJS.
+ module.exports = factory();
+ } else {
+ // Browser globals.
+ root.Reveal = factory();
+ }
+}(this, function () {
+
+ 'use strict';
+
+ var Reveal;
+
+ // The reveal.js version
+ var VERSION = '3.8.0';
+
+ var SLIDES_SELECTOR = '.slides section',
+ HORIZONTAL_SLIDES_SELECTOR = '.slides>section',
+ VERTICAL_SLIDES_SELECTOR = '.slides>section.present>section',
+ HOME_SLIDE_SELECTOR = '.slides>section:first-of-type',
+ UA = navigator.userAgent,
+
+ // Configuration defaults, can be overridden at initialization time
+ config = {
+
+ // The "normal" size of the presentation, aspect ratio will be preserved
+ // when the presentation is scaled to fit different resolutions
+ width: 960,
+ height: 700,
+
+ // Factor of the display size that should remain empty around the content
+ margin: 0.04,
+
+ // Bounds for smallest/largest possible scale to apply to content
+ minScale: 0.2,
+ maxScale: 2.0,
+
+ // Display presentation control arrows
+ controls: true,
+
+ // Help the user learn the controls by providing hints, for example by
+ // bouncing the down arrow when they first encounter a vertical slide
+ controlsTutorial: true,
+
+ // Determines where controls appear, "edges" or "bottom-right"
+ controlsLayout: 'bottom-right',
+
+ // Visibility rule for backwards navigation arrows; "faded", "hidden"
+ // or "visible"
+ controlsBackArrows: 'faded',
+
+ // Display a presentation progress bar
+ progress: true,
+
+ // Display the page number of the current slide
+ // - true: Show slide number
+ // - false: Hide slide number
+ //
+ // Can optionally be set as a string that specifies the number formatting:
+ // - "h.v": Horizontal . vertical slide number (default)
+ // - "h/v": Horizontal / vertical slide number
+ // - "c": Flattened slide number
+ // - "c/t": Flattened slide number / total slides
+ //
+ // Alternatively, you can provide a function that returns the slide
+ // number for the current slide. The function needs to return an array
+ // with one string [slideNumber] or three strings [n1,delimiter,n2].
+ // See #formatSlideNumber().
+ slideNumber: false,
+
+ // Can be used to limit the contexts in which the slide number appears
+ // - "all": Always show the slide number
+ // - "print": Only when printing to PDF
+ // - "speaker": Only in the speaker view
+ showSlideNumber: 'all',
+
+ // Use 1 based indexing for # links to match slide number (default is zero
+ // based)
+ hashOneBasedIndex: false,
+
+ // Add the current slide number to the URL hash so that reloading the
+ // page/copying the URL will return you to the same slide
+ hash: false,
+
+ // Push each slide change to the browser history. Implies `hash: true`
+ history: false,
+
+ // Enable keyboard shortcuts for navigation
+ keyboard: true,
+
+ // Optional function that blocks keyboard events when retuning false
+ keyboardCondition: null,
+
+ // Enable the slide overview mode
+ overview: true,
+
+ // Disables the default reveal.js slide layout so that you can use
+ // custom CSS layout
+ disableLayout: false,
+
+ // Vertical centering of slides
+ center: true,
+
+ // Enables touch navigation on devices with touch input
+ touch: true,
+
+ // Loop the presentation
+ loop: false,
+
+ // Change the presentation direction to be RTL
+ rtl: false,
+
+ // Changes the behavior of our navigation directions.
+ //
+ // "default"
+ // Left/right arrow keys step between horizontal slides, up/down
+ // arrow keys step between vertical slides. Space key steps through
+ // all slides (both horizontal and vertical).
+ //
+ // "linear"
+ // Removes the up/down arrows. Left/right arrows step through all
+ // slides (both horizontal and vertical).
+ //
+ // "grid"
+ // When this is enabled, stepping left/right from a vertical stack
+ // to an adjacent vertical stack will land you at the same vertical
+ // index.
+ //
+ // Consider a deck with six slides ordered in two vertical stacks:
+ // 1.1 2.1
+ // 1.2 2.2
+ // 1.3 2.3
+ //
+ // If you're on slide 1.3 and navigate right, you will normally move
+ // from 1.3 -> 2.1. If "grid" is used, the same navigation takes you
+ // from 1.3 -> 2.3.
+ navigationMode: 'default',
+
+ // Randomizes the order of slides each time the presentation loads
+ shuffle: false,
+
+ // Turns fragments on and off globally
+ fragments: true,
+
+ // Flags whether to include the current fragment in the URL,
+ // so that reloading brings you to the same fragment position
+ fragmentInURL: false,
+
+ // Flags if the presentation is running in an embedded mode,
+ // i.e. contained within a limited portion of the screen
+ embedded: false,
+
+ // Flags if we should show a help overlay when the question-mark
+ // key is pressed
+ help: true,
+
+ // Flags if it should be possible to pause the presentation (blackout)
+ pause: true,
+
+ // Flags if speaker notes should be visible to all viewers
+ showNotes: false,
+
+ // Global override for autolaying embedded media (video/audio/iframe)
+ // - null: Media will only autoplay if data-autoplay is present
+ // - true: All media will autoplay, regardless of individual setting
+ // - false: No media will autoplay, regardless of individual setting
+ autoPlayMedia: null,
+
+ // Global override for preloading lazy-loaded iframes
+ // - null: Iframes with data-src AND data-preload will be loaded when within
+ // the viewDistance, iframes with only data-src will be loaded when visible
+ // - true: All iframes with data-src will be loaded when within the viewDistance
+ // - false: All iframes with data-src will be loaded only when visible
+ preloadIframes: null,
+
+ // Controls automatic progression to the next slide
+ // - 0: Auto-sliding only happens if the data-autoslide HTML attribute
+ // is present on the current slide or fragment
+ // - 1+: All slides will progress automatically at the given interval
+ // - false: No auto-sliding, even if data-autoslide is present
+ autoSlide: 0,
+
+ // Stop auto-sliding after user input
+ autoSlideStoppable: true,
+
+ // Use this method for navigation when auto-sliding (defaults to navigateNext)
+ autoSlideMethod: null,
+
+ // Specify the average time in seconds that you think you will spend
+ // presenting each slide. This is used to show a pacing timer in the
+ // speaker view
+ defaultTiming: null,
+
+ // Enable slide navigation via mouse wheel
+ mouseWheel: false,
+
+ // Apply a 3D roll to links on hover
+ rollingLinks: false,
+
+ // Hides the address bar on mobile devices
+ hideAddressBar: true,
+
+ // Opens links in an iframe preview overlay
+ // Add `data-preview-link` and `data-preview-link="false"` to customise each link
+ // individually
+ previewLinks: false,
+
+ // Exposes the reveal.js API through window.postMessage
+ postMessage: true,
+
+ // Dispatches all reveal.js events to the parent window through postMessage
+ postMessageEvents: false,
+
+ // Focuses body when page changes visibility to ensure keyboard shortcuts work
+ focusBodyOnPageVisibilityChange: true,
+
+ // Transition style
+ transition: 'slide', // none/fade/slide/convex/concave/zoom
+
+ // Transition speed
+ transitionSpeed: 'default', // default/fast/slow
+
+ // Transition style for full page slide backgrounds
+ backgroundTransition: 'fade', // none/fade/slide/convex/concave/zoom
+
+ // Parallax background image
+ parallaxBackgroundImage: '', // CSS syntax, e.g. "a.jpg"
+
+ // Parallax background size
+ parallaxBackgroundSize: '', // CSS syntax, e.g. "3000px 2000px"
+
+ // Parallax background repeat
+ parallaxBackgroundRepeat: '', // repeat/repeat-x/repeat-y/no-repeat/initial/inherit
+
+ // Parallax background position
+ parallaxBackgroundPosition: '', // CSS syntax, e.g. "top left"
+
+ // Amount of pixels to move the parallax background per slide step
+ parallaxBackgroundHorizontal: null,
+ parallaxBackgroundVertical: null,
+
+ // The maximum number of pages a single slide can expand onto when printing
+ // to PDF, unlimited by default
+ pdfMaxPagesPerSlide: Number.POSITIVE_INFINITY,
+
+ // Prints each fragment on a separate slide
+ pdfSeparateFragments: true,
+
+ // Offset used to reduce the height of content within exported PDF pages.
+ // This exists to account for environment differences based on how you
+ // print to PDF. CLI printing options, like phantomjs and wkpdf, can end
+ // on precisely the total height of the document whereas in-browser
+ // printing has to end one pixel before.
+ pdfPageHeightOffset: -1,
+
+ // Number of slides away from the current that are visible
+ viewDistance: 3,
+
+ // The display mode that will be used to show slides
+ display: 'block',
+
+ // Hide cursor if inactive
+ hideInactiveCursor: true,
+
+ // Time before the cursor is hidden (in ms)
+ hideCursorTime: 5000,
+
+ // Script dependencies to load
+ dependencies: []
+
+ },
+
+ // Flags if Reveal.initialize() has been called
+ initialized = false,
+
+ // Flags if reveal.js is loaded (has dispatched the 'ready' event)
+ loaded = false,
+
+ // Flags if the overview mode is currently active
+ overview = false,
+
+ // Holds the dimensions of our overview slides, including margins
+ overviewSlideWidth = null,
+ overviewSlideHeight = null,
+
+ // The horizontal and vertical index of the currently active slide
+ indexh,
+ indexv,
+
+ // The previous and current slide HTML elements
+ previousSlide,
+ currentSlide,
+
+ previousBackground,
+
+ // Remember which directions that the user has navigated towards
+ hasNavigatedRight = false,
+ hasNavigatedDown = false,
+
+ // Slides may hold a data-state attribute which we pick up and apply
+ // as a class to the body. This list contains the combined state of
+ // all current slides.
+ state = [],
+
+ // The current scale of the presentation (see width/height config)
+ scale = 1,
+
+ // CSS transform that is currently applied to the slides container,
+ // split into two groups
+ slidesTransform = { layout: '', overview: '' },
+
+ // Cached references to DOM elements
+ dom = {},
+
+ // A list of registered reveal.js plugins
+ plugins = {},
+
+ // List of asynchronously loaded reveal.js dependencies
+ asyncDependencies = [],
+
+ // Features supported by the browser, see #checkCapabilities()
+ features = {},
+
+ // Client is a mobile device, see #checkCapabilities()
+ isMobileDevice,
+
+ // Client is a desktop Chrome, see #checkCapabilities()
+ isChrome,
+
+ // Throttles mouse wheel navigation
+ lastMouseWheelStep = 0,
+
+ // Delays updates to the URL due to a Chrome thumbnailer bug
+ writeURLTimeout = 0,
+
+ // Is the mouse pointer currently hidden from view
+ cursorHidden = false,
+
+ // Timeout used to determine when the cursor is inactive
+ cursorInactiveTimeout = 0,
+
+ // Flags if the interaction event listeners are bound
+ eventsAreBound = false,
+
+ // The current auto-slide duration
+ autoSlide = 0,
+
+ // Auto slide properties
+ autoSlidePlayer,
+ autoSlideTimeout = 0,
+ autoSlideStartTime = -1,
+ autoSlidePaused = false,
+
+ // Holds information about the currently ongoing touch input
+ touch = {
+ startX: 0,
+ startY: 0,
+ startCount: 0,
+ captured: false,
+ threshold: 40
+ },
+
+ // A key:value map of shortcut keyboard keys and descriptions of
+ // the actions they trigger, generated in #configure()
+ keyboardShortcuts = {},
+
+ // Holds custom key code mappings
+ registeredKeyBindings = {};
+
+ /**
+ * Starts up the presentation if the client is capable.
+ */
+ function initialize(options) {
+
+ // Make sure we only initialize once
+ if (initialized === true) return;
+
+ initialized = true;
+
+ checkCapabilities();
+
+ if (!features.transforms2d && !features.transforms3d) {
+ document.body.setAttribute('class', 'no-transforms');
+
+ // Since JS won't be running any further, we load all lazy
+ // loading elements upfront
+ var images = toArray(document.getElementsByTagName('img')),
+ iframes = toArray(document.getElementsByTagName('iframe'));
+
+ var lazyLoadable = images.concat(iframes);
+
+ for (var i = 0, len = lazyLoadable.length; i < len; i++) {
+ var element = lazyLoadable[i];
+ if (element.getAttribute('data-src')) {
+ element.setAttribute('src', element.getAttribute('data-src'));
+ element.removeAttribute('data-src');
+ }
+ }
+
+ // If the browser doesn't support core features we won't be
+ // using JavaScript to control the presentation
+ return;
+ }
+
+ // Cache references to key DOM elements
+ dom.wrapper = document.querySelector('.reveal');
+ dom.slides = document.querySelector('.reveal .slides');
+
+ // Force a layout when the whole page, incl fonts, has loaded
+ window.addEventListener('load', layout, false);
+
+ var query = Reveal.getQueryHash();
+
+ // Do not accept new dependencies via query config to avoid
+ // the potential of malicious script injection
+ if (typeof query['dependencies'] !== 'undefined') delete query['dependencies'];
+
+ // Copy options over to our config object
+ extend(config, options);
+ extend(config, query);
+
+ // Hide the address bar in mobile browsers
+ hideAddressBar();
+
+ // Loads dependencies and continues to #start() once done
+ load();
+
+ }
+
+ /**
+ * Inspect the client to see what it's capable of, this
+ * should only happens once per runtime.
+ */
+ function checkCapabilities() {
+
+ isMobileDevice = /(iphone|ipod|ipad|android)/gi.test(UA);
+ isChrome = /chrome/i.test(UA) && !/edge/i.test(UA);
+
+ var testElement = document.createElement('div');
+
+ features.transforms3d = 'WebkitPerspective' in testElement.style ||
+ 'MozPerspective' in testElement.style ||
+ 'msPerspective' in testElement.style ||
+ 'OPerspective' in testElement.style ||
+ 'perspective' in testElement.style;
+
+ features.transforms2d = 'WebkitTransform' in testElement.style ||
+ 'MozTransform' in testElement.style ||
+ 'msTransform' in testElement.style ||
+ 'OTransform' in testElement.style ||
+ 'transform' in testElement.style;
+
+ features.requestAnimationFrameMethod = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;
+ features.requestAnimationFrame = typeof features.requestAnimationFrameMethod === 'function';
+
+ features.canvas = !!document.createElement('canvas').getContext;
+
+ // Transitions in the overview are disabled in desktop and
+ // Safari due to lag
+ features.overviewTransitions = !/Version\/[\d\.]+.*Safari/.test(UA);
+
+ // Flags if we should use zoom instead of transform to scale
+ // up slides. Zoom produces crisper results but has a lot of
+ // xbrowser quirks so we only use it in whitelsited browsers.
+ features.zoom = 'zoom' in testElement.style && !isMobileDevice &&
+ (isChrome || /Version\/[\d\.]+.*Safari/.test(UA));
+
+ }
+
+ /**
+ * Loads the dependencies of reveal.js. Dependencies are
+ * defined via the configuration option 'dependencies'
+ * and will be loaded prior to starting/binding reveal.js.
+ * Some dependencies may have an 'async' flag, if so they
+ * will load after reveal.js has been started up.
+ */
+ function load() {
+
+ var scripts = [],
+ scriptsToLoad = 0;
+
+ config.dependencies.forEach(function (s) {
+ // Load if there's no condition or the condition is truthy
+ if (!s.condition || s.condition()) {
+ if (s.async) {
+ asyncDependencies.push(s);
+ }
+ else {
+ scripts.push(s);
+ }
+ }
+ });
+
+ if (scripts.length) {
+ scriptsToLoad = scripts.length;
+
+ // Load synchronous scripts
+ scripts.forEach(function (s) {
+ loadScript(s.src, function () {
+
+ if (typeof s.callback === 'function') s.callback();
+
+ if (--scriptsToLoad === 0) {
+ initPlugins();
+ }
+
+ });
+ });
+ }
+ else {
+ initPlugins();
+ }
+
+ }
+
+ /**
+ * Initializes our plugins and waits for them to be ready
+ * before proceeding.
+ */
+ function initPlugins() {
+
+ var pluginsToInitialize = Object.keys(plugins).length;
+
+ // If there are no plugins, skip this step
+ if (pluginsToInitialize === 0) {
+ loadAsyncDependencies();
+ }
+ // ... otherwise initialize plugins
+ else {
+
+ var afterPlugInitialized = function () {
+ if (--pluginsToInitialize === 0) {
+ loadAsyncDependencies();
+ }
+ };
+
+ for (var i in plugins) {
+
+ var plugin = plugins[i];
+
+ // If the plugin has an 'init' method, invoke it
+ if (typeof plugin.init === 'function') {
+ var callback = plugin.init();
+
+ // If the plugin returned a Promise, wait for it
+ if (callback && typeof callback.then === 'function') {
+ callback.then(afterPlugInitialized);
+ }
+ else {
+ afterPlugInitialized();
+ }
+ }
+ else {
+ afterPlugInitialized();
+ }
+
+ }
+
+ }
+
+ }
+
+ /**
+ * Loads all async reveal.js dependencies.
+ */
+ function loadAsyncDependencies() {
+
+ if (asyncDependencies.length) {
+ asyncDependencies.forEach(function (s) {
+ loadScript(s.src, s.callback);
+ });
+ }
+
+ start();
+
+ }
+
+ /**
+ * Loads a JavaScript file from the given URL and executes it.
+ *
+ * @param {string} url Address of the .js file to load
+ * @param {function} callback Method to invoke when the script
+ * has loaded and executed
+ */
+ function loadScript(url, callback) {
+
+ var script = document.createElement('script');
+ script.type = 'text/javascript';
+ script.async = false;
+ script.defer = false;
+ script.src = url;
+
+ if (callback) {
+
+ // Success callback
+ script.onload = script.onreadystatechange = function (event) {
+ if (event.type === "load" || (/loaded|complete/.test(script.readyState))) {
+
+ // Kill event listeners
+ script.onload = script.onreadystatechange = script.onerror = null;
+
+ callback();
+
+ }
+ };
+
+ // Error callback
+ script.onerror = function (err) {
+
+ // Kill event listeners
+ script.onload = script.onreadystatechange = script.onerror = null;
+
+ callback(new Error('Failed loading script: ' + script.src + '\n' + err));
+
+ };
+
+ }
+
+ // Append the script at the end of
+ var head = document.querySelector('head');
+ head.insertBefore(script, head.lastChild);
+
+ }
+
+ /**
+ * Starts up reveal.js by binding input events and navigating
+ * to the current URL deeplink if there is one.
+ */
+ function start() {
+
+ loaded = true;
+
+ // Make sure we've got all the DOM elements we need
+ setupDOM();
+
+ // Listen to messages posted to this window
+ setupPostMessage();
+
+ // Prevent the slides from being scrolled out of view
+ setupScrollPrevention();
+
+ // Resets all vertical slides so that only the first is visible
+ resetVerticalSlides();
+
+ // Updates the presentation to match the current configuration values
+ configure();
+
+ // Read the initial hash
+ readURL();
+
+ // Update all backgrounds
+ updateBackground(true);
+
+ // Notify listeners that the presentation is ready but use a 1ms
+ // timeout to ensure it's not fired synchronously after #initialize()
+ setTimeout(function () {
+ // Enable transitions now that we're loaded
+ dom.slides.classList.remove('no-transition');
+
+ dom.wrapper.classList.add('ready');
+
+ dispatchEvent('ready', {
+ 'indexh': indexh,
+ 'indexv': indexv,
+ 'currentSlide': currentSlide
+ });
+ }, 1);
+
+ // Special setup and config is required when printing to PDF
+ if (isPrintingPDF()) {
+ removeEventListeners();
+
+ // The document needs to have loaded for the PDF layout
+ // measurements to be accurate
+ if (document.readyState === 'complete') {
+ setupPDF();
+ }
+ else {
+ window.addEventListener('load', setupPDF);
+ }
+ }
+
+ }
+
+ /**
+ * Finds and stores references to DOM elements which are
+ * required by the presentation. If a required element is
+ * not found, it is created.
+ */
+ function setupDOM() {
+
+ // Prevent transitions while we're loading
+ dom.slides.classList.add('no-transition');
+
+ if (isMobileDevice) {
+ dom.wrapper.classList.add('no-hover');
+ }
+ else {
+ dom.wrapper.classList.remove('no-hover');
+ }
+
+ if (/iphone/gi.test(UA)) {
+ dom.wrapper.classList.add('ua-iphone');
+ }
+ else {
+ dom.wrapper.classList.remove('ua-iphone');
+ }
+
+ // Background element
+ dom.background = createSingletonNode(dom.wrapper, 'div', 'backgrounds', null);
+
+ // Progress bar
+ dom.progress = createSingletonNode(dom.wrapper, 'div', 'progress', ' ');
+ dom.progressbar = dom.progress.querySelector('span');
+
+ // Arrow controls
+ dom.controls = createSingletonNode(dom.wrapper, 'aside', 'controls',
+ '
' +
+ '
' +
+ '
' +
+ '
');
+
+ // Slide number
+ dom.slideNumber = createSingletonNode(dom.wrapper, 'div', 'slide-number', '');
+
+ // Element containing notes that are visible to the audience
+ dom.speakerNotes = createSingletonNode(dom.wrapper, 'div', 'speaker-notes', null);
+ dom.speakerNotes.setAttribute('data-prevent-swipe', '');
+ dom.speakerNotes.setAttribute('tabindex', '0');
+
+ // Overlay graphic which is displayed during the paused mode
+ dom.pauseOverlay = createSingletonNode(dom.wrapper, 'div', 'pause-overlay', config.controls ? 'Resume presentation ' : null);
+
+ dom.wrapper.setAttribute('role', 'application');
+
+ // There can be multiple instances of controls throughout the page
+ dom.controlsLeft = toArray(document.querySelectorAll('.navigate-left'));
+ dom.controlsRight = toArray(document.querySelectorAll('.navigate-right'));
+ dom.controlsUp = toArray(document.querySelectorAll('.navigate-up'));
+ dom.controlsDown = toArray(document.querySelectorAll('.navigate-down'));
+ dom.controlsPrev = toArray(document.querySelectorAll('.navigate-prev'));
+ dom.controlsNext = toArray(document.querySelectorAll('.navigate-next'));
+
+ // The right and down arrows in the standard reveal.js controls
+ dom.controlsRightArrow = dom.controls.querySelector('.navigate-right');
+ dom.controlsDownArrow = dom.controls.querySelector('.navigate-down');
+
+ dom.statusDiv = createStatusDiv();
+ }
+
+ /**
+ * Creates a hidden div with role aria-live to announce the
+ * current slide content. Hide the div off-screen to make it
+ * available only to Assistive Technologies.
+ *
+ * @return {HTMLElement}
+ */
+ function createStatusDiv() {
+
+ var statusDiv = document.getElementById('aria-status-div');
+ if (!statusDiv) {
+ statusDiv = document.createElement('div');
+ statusDiv.style.position = 'absolute';
+ statusDiv.style.height = '1px';
+ statusDiv.style.width = '1px';
+ statusDiv.style.overflow = 'hidden';
+ statusDiv.style.clip = 'rect( 1px, 1px, 1px, 1px )';
+ statusDiv.setAttribute('id', 'aria-status-div');
+ statusDiv.setAttribute('aria-live', 'polite');
+ statusDiv.setAttribute('aria-atomic', 'true');
+ dom.wrapper.appendChild(statusDiv);
+ }
+ return statusDiv;
+
+ }
+
+ /**
+ * Converts the given HTML element into a string of text
+ * that can be announced to a screen reader. Hidden
+ * elements are excluded.
+ */
+ function getStatusText(node) {
+
+ var text = '';
+
+ // Text node
+ if (node.nodeType === 3) {
+ text += node.textContent;
+ }
+ // Element node
+ else if (node.nodeType === 1) {
+
+ var isAriaHidden = node.getAttribute('aria-hidden');
+ var isDisplayHidden = window.getComputedStyle(node)['display'] === 'none';
+ if (isAriaHidden !== 'true' && !isDisplayHidden) {
+
+ toArray(node.childNodes).forEach(function (child) {
+ text += getStatusText(child);
+ });
+
+ }
+
+ }
+
+ return text;
+
+ }
+
+ /**
+ * Configures the presentation for printing to a static
+ * PDF.
+ */
+ function setupPDF() {
+
+ var slideSize = getComputedSlideSize(window.innerWidth, window.innerHeight);
+
+ // Dimensions of the PDF pages
+ var pageWidth = Math.floor(slideSize.width * (1 + config.margin)),
+ pageHeight = Math.floor(slideSize.height * (1 + config.margin));
+
+ // Dimensions of slides within the pages
+ var slideWidth = slideSize.width,
+ slideHeight = slideSize.height;
+
+ // Let the browser know what page size we want to print
+ injectStyleSheet('@page{size:' + pageWidth + 'px ' + pageHeight + 'px; margin: 0px;}');
+
+ // Limit the size of certain elements to the dimensions of the slide
+ injectStyleSheet('.reveal section>img, .reveal section>video, .reveal section>iframe{max-width: ' + slideWidth + 'px; max-height:' + slideHeight + 'px}');
+
+ document.body.classList.add('print-pdf');
+ document.body.style.width = pageWidth + 'px';
+ document.body.style.height = pageHeight + 'px';
+
+ // Make sure stretch elements fit on slide
+ layoutSlideContents(slideWidth, slideHeight);
+
+ // Add each slide's index as attributes on itself, we need these
+ // indices to generate slide numbers below
+ toArray(dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR)).forEach(function (hslide, h) {
+ hslide.setAttribute('data-index-h', h);
+
+ if (hslide.classList.contains('stack')) {
+ toArray(hslide.querySelectorAll('section')).forEach(function (vslide, v) {
+ vslide.setAttribute('data-index-h', h);
+ vslide.setAttribute('data-index-v', v);
+ });
+ }
+ });
+
+ // Slide and slide background layout
+ toArray(dom.wrapper.querySelectorAll(SLIDES_SELECTOR)).forEach(function (slide) {
+
+ // Vertical stacks are not centred since their section
+ // children will be
+ if (slide.classList.contains('stack') === false) {
+ // Center the slide inside of the page, giving the slide some margin
+ var left = (pageWidth - slideWidth) / 2,
+ top = (pageHeight - slideHeight) / 2;
+
+ var contentHeight = slide.scrollHeight;
+ var numberOfPages = Math.max(Math.ceil(contentHeight / pageHeight), 1);
+
+ // Adhere to configured pages per slide limit
+ numberOfPages = Math.min(numberOfPages, config.pdfMaxPagesPerSlide);
+
+ // Center slides vertically
+ if (numberOfPages === 1 && config.center || slide.classList.contains('center')) {
+ top = Math.max((pageHeight - contentHeight) / 2, 0);
+ }
+
+ // Wrap the slide in a page element and hide its overflow
+ // so that no page ever flows onto another
+ var page = document.createElement('div');
+ page.className = 'pdf-page';
+ page.style.height = ((pageHeight + config.pdfPageHeightOffset) * numberOfPages) + 'px';
+ slide.parentNode.insertBefore(page, slide);
+ page.appendChild(slide);
+
+ // Position the slide inside of the page
+ slide.style.left = left + 'px';
+ slide.style.top = top + 'px';
+ slide.style.width = slideWidth + 'px';
+
+ if (slide.slideBackgroundElement) {
+ page.insertBefore(slide.slideBackgroundElement, slide);
+ }
+
+ // Inject notes if `showNotes` is enabled
+ if (config.showNotes) {
+
+ // Are there notes for this slide?
+ var notes = getSlideNotes(slide);
+ if (notes) {
+
+ var notesSpacing = 8;
+ var notesLayout = typeof config.showNotes === 'string' ? config.showNotes : 'inline';
+ var notesElement = document.createElement('div');
+ notesElement.classList.add('speaker-notes');
+ notesElement.classList.add('speaker-notes-pdf');
+ notesElement.setAttribute('data-layout', notesLayout);
+ notesElement.innerHTML = notes;
+
+ if (notesLayout === 'separate-page') {
+ page.parentNode.insertBefore(notesElement, page.nextSibling);
+ }
+ else {
+ notesElement.style.left = notesSpacing + 'px';
+ notesElement.style.bottom = notesSpacing + 'px';
+ notesElement.style.width = (pageWidth - notesSpacing * 2) + 'px';
+ page.appendChild(notesElement);
+ }
+
+ }
+
+ }
+
+ // Inject slide numbers if `slideNumbers` are enabled
+ if (config.slideNumber && /all|print/i.test(config.showSlideNumber)) {
+ var slideNumberH = parseInt(slide.getAttribute('data-index-h'), 10) + 1,
+ slideNumberV = parseInt(slide.getAttribute('data-index-v'), 10) + 1;
+
+ var numberElement = document.createElement('div');
+ numberElement.classList.add('slide-number');
+ numberElement.classList.add('slide-number-pdf');
+ numberElement.innerHTML = formatSlideNumber(slideNumberH, '.', slideNumberV);
+ page.appendChild(numberElement);
+ }
+
+ // Copy page and show fragments one after another
+ if (config.pdfSeparateFragments) {
+
+ // Each fragment 'group' is an array containing one or more
+ // fragments. Multiple fragments that appear at the same time
+ // are part of the same group.
+ var fragmentGroups = sortFragments(page.querySelectorAll('.fragment'), true);
+
+ var previousFragmentStep;
+ var previousPage;
+
+ fragmentGroups.forEach(function (fragments) {
+
+ // Remove 'current-fragment' from the previous group
+ if (previousFragmentStep) {
+ previousFragmentStep.forEach(function (fragment) {
+ fragment.classList.remove('current-fragment');
+ });
+ }
+
+ // Show the fragments for the current index
+ fragments.forEach(function (fragment) {
+ fragment.classList.add('visible', 'current-fragment');
+ });
+
+ // Create a separate page for the current fragment state
+ var clonedPage = page.cloneNode(true);
+ page.parentNode.insertBefore(clonedPage, (previousPage || page).nextSibling);
+
+ previousFragmentStep = fragments;
+ previousPage = clonedPage;
+
+ });
+
+ // Reset the first/original page so that all fragments are hidden
+ fragmentGroups.forEach(function (fragments) {
+ fragments.forEach(function (fragment) {
+ fragment.classList.remove('visible', 'current-fragment');
+ });
+ });
+
+ }
+ // Show all fragments
+ else {
+ toArray(page.querySelectorAll('.fragment:not(.fade-out)')).forEach(function (fragment) {
+ fragment.classList.add('visible');
+ });
+ }
+
+ }
+
+ });
+
+ // Notify subscribers that the PDF layout is good to go
+ dispatchEvent('pdf-ready');
+
+ }
+
+ /**
+ * This is an unfortunate necessity. Some actions – such as
+ * an input field being focused in an iframe or using the
+ * keyboard to expand text selection beyond the bounds of
+ * a slide – can trigger our content to be pushed out of view.
+ * This scrolling can not be prevented by hiding overflow in
+ * CSS (we already do) so we have to resort to repeatedly
+ * checking if the slides have been offset :(
+ */
+ function setupScrollPrevention() {
+
+ setInterval(function () {
+ if (dom.wrapper.scrollTop !== 0 || dom.wrapper.scrollLeft !== 0) {
+ dom.wrapper.scrollTop = 0;
+ dom.wrapper.scrollLeft = 0;
+ }
+ }, 1000);
+
+ }
+
+ /**
+ * Creates an HTML element and returns a reference to it.
+ * If the element already exists the existing instance will
+ * be returned.
+ *
+ * @param {HTMLElement} container
+ * @param {string} tagname
+ * @param {string} classname
+ * @param {string} innerHTML
+ *
+ * @return {HTMLElement}
+ */
+ function createSingletonNode(container, tagname, classname, innerHTML) {
+
+ // Find all nodes matching the description
+ var nodes = container.querySelectorAll('.' + classname);
+
+ // Check all matches to find one which is a direct child of
+ // the specified container
+ for (var i = 0; i < nodes.length; i++) {
+ var testNode = nodes[i];
+ if (testNode.parentNode === container) {
+ return testNode;
+ }
+ }
+
+ // If no node was found, create it now
+ var node = document.createElement(tagname);
+ node.className = classname;
+ if (typeof innerHTML === 'string') {
+ node.innerHTML = innerHTML;
+ }
+ container.appendChild(node);
+
+ return node;
+
+ }
+
+ /**
+ * Creates the slide background elements and appends them
+ * to the background container. One element is created per
+ * slide no matter if the given slide has visible background.
+ */
+ function createBackgrounds() {
+
+ var printMode = isPrintingPDF();
+
+ // Clear prior backgrounds
+ dom.background.innerHTML = '';
+ dom.background.classList.add('no-transition');
+
+ // Iterate over all horizontal slides
+ toArray(dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR)).forEach(function (slideh) {
+
+ var backgroundStack = createBackground(slideh, dom.background);
+
+ // Iterate over all vertical slides
+ toArray(slideh.querySelectorAll('section')).forEach(function (slidev) {
+
+ createBackground(slidev, backgroundStack);
+
+ backgroundStack.classList.add('stack');
+
+ });
+
+ });
+
+ // Add parallax background if specified
+ if (config.parallaxBackgroundImage) {
+
+ dom.background.style.backgroundImage = 'url("' + config.parallaxBackgroundImage + '")';
+ dom.background.style.backgroundSize = config.parallaxBackgroundSize;
+ dom.background.style.backgroundRepeat = config.parallaxBackgroundRepeat;
+ dom.background.style.backgroundPosition = config.parallaxBackgroundPosition;
+
+ // Make sure the below properties are set on the element - these properties are
+ // needed for proper transitions to be set on the element via CSS. To remove
+ // annoying background slide-in effect when the presentation starts, apply
+ // these properties after short time delay
+ setTimeout(function () {
+ dom.wrapper.classList.add('has-parallax-background');
+ }, 1);
+
+ }
+ else {
+
+ dom.background.style.backgroundImage = '';
+ dom.wrapper.classList.remove('has-parallax-background');
+
+ }
+
+ }
+
+ /**
+ * Creates a background for the given slide.
+ *
+ * @param {HTMLElement} slide
+ * @param {HTMLElement} container The element that the background
+ * should be appended to
+ * @return {HTMLElement} New background div
+ */
+ function createBackground(slide, container) {
+
+
+ // Main slide background element
+ var element = document.createElement('div');
+ element.className = 'slide-background ' + slide.className.replace(/present|past|future/, '');
+
+ // Inner background element that wraps images/videos/iframes
+ var contentElement = document.createElement('div');
+ contentElement.className = 'slide-background-content';
+
+ element.appendChild(contentElement);
+ container.appendChild(element);
+
+ slide.slideBackgroundElement = element;
+ slide.slideBackgroundContentElement = contentElement;
+
+ // Syncs the background to reflect all current background settings
+ syncBackground(slide);
+
+ return element;
+
+ }
+
+ /**
+ * Renders all of the visual properties of a slide background
+ * based on the various background attributes.
+ *
+ * @param {HTMLElement} slide
+ */
+ function syncBackground(slide) {
+
+ var element = slide.slideBackgroundElement,
+ contentElement = slide.slideBackgroundContentElement;
+
+ // Reset the prior background state in case this is not the
+ // initial sync
+ slide.classList.remove('has-dark-background');
+ slide.classList.remove('has-light-background');
+
+ element.removeAttribute('data-loaded');
+ element.removeAttribute('data-background-hash');
+ element.removeAttribute('data-background-size');
+ element.removeAttribute('data-background-transition');
+ element.style.backgroundColor = '';
+
+ contentElement.style.backgroundSize = '';
+ contentElement.style.backgroundRepeat = '';
+ contentElement.style.backgroundPosition = '';
+ contentElement.style.backgroundImage = '';
+ contentElement.style.opacity = '';
+ contentElement.innerHTML = '';
+
+ var data = {
+ background: slide.getAttribute('data-background'),
+ backgroundSize: slide.getAttribute('data-background-size'),
+ backgroundImage: slide.getAttribute('data-background-image'),
+ backgroundVideo: slide.getAttribute('data-background-video'),
+ backgroundIframe: slide.getAttribute('data-background-iframe'),
+ backgroundColor: slide.getAttribute('data-background-color'),
+ backgroundRepeat: slide.getAttribute('data-background-repeat'),
+ backgroundPosition: slide.getAttribute('data-background-position'),
+ backgroundTransition: slide.getAttribute('data-background-transition'),
+ backgroundOpacity: slide.getAttribute('data-background-opacity')
+ };
+
+ if (data.background) {
+ // Auto-wrap image urls in url(...)
+ if (/^(http|file|\/\/)/gi.test(data.background) || /\.(svg|png|jpg|jpeg|gif|bmp)([?#\s]|$)/gi.test(data.background)) {
+ slide.setAttribute('data-background-image', data.background);
+ }
+ else {
+ element.style.background = data.background;
+ }
+ }
+
+ // Create a hash for this combination of background settings.
+ // This is used to determine when two slide backgrounds are
+ // the same.
+ if (data.background || data.backgroundColor || data.backgroundImage || data.backgroundVideo || data.backgroundIframe) {
+ element.setAttribute('data-background-hash', data.background +
+ data.backgroundSize +
+ data.backgroundImage +
+ data.backgroundVideo +
+ data.backgroundIframe +
+ data.backgroundColor +
+ data.backgroundRepeat +
+ data.backgroundPosition +
+ data.backgroundTransition +
+ data.backgroundOpacity);
+ }
+
+ // Additional and optional background properties
+ if (data.backgroundSize) element.setAttribute('data-background-size', data.backgroundSize);
+ if (data.backgroundColor) element.style.backgroundColor = data.backgroundColor;
+ if (data.backgroundTransition) element.setAttribute('data-background-transition', data.backgroundTransition);
+
+ // Background image options are set on the content wrapper
+ if (data.backgroundSize) contentElement.style.backgroundSize = data.backgroundSize;
+ if (data.backgroundRepeat) contentElement.style.backgroundRepeat = data.backgroundRepeat;
+ if (data.backgroundPosition) contentElement.style.backgroundPosition = data.backgroundPosition;
+ if (data.backgroundOpacity) contentElement.style.opacity = data.backgroundOpacity;
+
+ // If this slide has a background color, we add a class that
+ // signals if it is light or dark. If the slide has no background
+ // color, no class will be added
+ var contrastColor = data.backgroundColor;
+
+ // If no bg color was found, check the computed background
+ if (!contrastColor) {
+ var computedBackgroundStyle = window.getComputedStyle(element);
+ if (computedBackgroundStyle && computedBackgroundStyle.backgroundColor) {
+ contrastColor = computedBackgroundStyle.backgroundColor;
+ }
+ }
+
+ if (contrastColor) {
+ var rgb = colorToRgb(contrastColor);
+
+ // Ignore fully transparent backgrounds. Some browsers return
+ // rgba(0,0,0,0) when reading the computed background color of
+ // an element with no background
+ if (rgb && rgb.a !== 0) {
+ if (colorBrightness(contrastColor) < 128) {
+ slide.classList.add('has-dark-background');
+ }
+ else {
+ slide.classList.add('has-light-background');
+ }
+ }
+ }
+
+ }
+
+ /**
+ * Registers a listener to postMessage events, this makes it
+ * possible to call all reveal.js API methods from another
+ * window. For example:
+ *
+ * revealWindow.postMessage( JSON.stringify({
+ * method: 'slide',
+ * args: [ 2 ]
+ * }), '*' );
+ */
+ function setupPostMessage() {
+
+ if (config.postMessage) {
+ window.addEventListener('message', function (event) {
+ var data = event.data;
+
+ // Make sure we're dealing with JSON
+ if (typeof data === 'string' && data.charAt(0) === '{' && data.charAt(data.length - 1) === '}') {
+ data = JSON.parse(data);
+
+ // Check if the requested method can be found
+ if (data.method && typeof Reveal[data.method] === 'function') {
+ Reveal[data.method].apply(Reveal, data.args);
+ }
+ }
+ }, false);
+ }
+
+ }
+
+ /**
+ * Applies the configuration settings from the config
+ * object. May be called multiple times.
+ *
+ * @param {object} options
+ */
+ function configure(options) {
+
+ var oldTransition = config.transition;
+
+ // New config options may be passed when this method
+ // is invoked through the API after initialization
+ if (typeof options === 'object') extend(config, options);
+
+ // Abort if reveal.js hasn't finished loading, config
+ // changes will be applied automatically once loading
+ // finishes
+ if (loaded === false) return;
+
+ var numberOfSlides = dom.wrapper.querySelectorAll(SLIDES_SELECTOR).length;
+
+ // Remove the previously configured transition class
+ dom.wrapper.classList.remove(oldTransition);
+
+ // Force linear transition based on browser capabilities
+ if (features.transforms3d === false) config.transition = 'linear';
+
+ dom.wrapper.classList.add(config.transition);
+
+ dom.wrapper.setAttribute('data-transition-speed', config.transitionSpeed);
+ dom.wrapper.setAttribute('data-background-transition', config.backgroundTransition);
+
+ dom.controls.style.display = config.controls ? 'block' : 'none';
+ dom.progress.style.display = config.progress ? 'block' : 'none';
+
+ dom.controls.setAttribute('data-controls-layout', config.controlsLayout);
+ dom.controls.setAttribute('data-controls-back-arrows', config.controlsBackArrows);
+
+ if (config.shuffle) {
+ shuffle();
+ }
+
+ if (config.rtl) {
+ dom.wrapper.classList.add('rtl');
+ }
+ else {
+ dom.wrapper.classList.remove('rtl');
+ }
+
+ if (config.center) {
+ dom.wrapper.classList.add('center');
+ }
+ else {
+ dom.wrapper.classList.remove('center');
+ }
+
+ // Exit the paused mode if it was configured off
+ if (config.pause === false) {
+ resume();
+ }
+
+ if (config.showNotes) {
+ dom.speakerNotes.setAttribute('data-layout', typeof config.showNotes === 'string' ? config.showNotes : 'inline');
+ }
+
+ if (config.mouseWheel) {
+ document.addEventListener('DOMMouseScroll', onDocumentMouseScroll, false); // FF
+ document.addEventListener('mousewheel', onDocumentMouseScroll, false);
+ }
+ else {
+ document.removeEventListener('DOMMouseScroll', onDocumentMouseScroll, false); // FF
+ document.removeEventListener('mousewheel', onDocumentMouseScroll, false);
+ }
+
+ // Rolling 3D links
+ if (config.rollingLinks) {
+ enableRollingLinks();
+ }
+ else {
+ disableRollingLinks();
+ }
+
+ // Auto-hide the mouse pointer when its inactive
+ if (config.hideInactiveCursor) {
+ document.addEventListener('mousemove', onDocumentCursorActive, false);
+ document.addEventListener('mousedown', onDocumentCursorActive, false);
+ }
+ else {
+ showCursor();
+
+ document.removeEventListener('mousemove', onDocumentCursorActive, false);
+ document.removeEventListener('mousedown', onDocumentCursorActive, false);
+ }
+
+ // Iframe link previews
+ if (config.previewLinks) {
+ enablePreviewLinks();
+ disablePreviewLinks('[data-preview-link=false]');
+ }
+ else {
+ disablePreviewLinks();
+ enablePreviewLinks('[data-preview-link]:not([data-preview-link=false])');
+ }
+
+ // Remove existing auto-slide controls
+ if (autoSlidePlayer) {
+ autoSlidePlayer.destroy();
+ autoSlidePlayer = null;
+ }
+
+ // Generate auto-slide controls if needed
+ if (numberOfSlides > 1 && config.autoSlide && config.autoSlideStoppable && features.canvas && features.requestAnimationFrame) {
+ autoSlidePlayer = new Playback(dom.wrapper, function () {
+ return Math.min(Math.max((Date.now() - autoSlideStartTime) / autoSlide, 0), 1);
+ });
+
+ autoSlidePlayer.on('click', onAutoSlidePlayerClick);
+ autoSlidePaused = false;
+ }
+
+ // When fragments are turned off they should be visible
+ if (config.fragments === false) {
+ toArray(dom.slides.querySelectorAll('.fragment')).forEach(function (element) {
+ element.classList.add('visible');
+ element.classList.remove('current-fragment');
+ });
+ }
+
+ // Slide numbers
+ var slideNumberDisplay = 'none';
+ if (config.slideNumber && !isPrintingPDF()) {
+ if (config.showSlideNumber === 'all') {
+ slideNumberDisplay = 'block';
+ }
+ else if (config.showSlideNumber === 'speaker' && isSpeakerNotes()) {
+ slideNumberDisplay = 'block';
+ }
+ }
+
+ dom.slideNumber.style.display = slideNumberDisplay;
+
+ // Add the navigation mode to the DOM so we can adjust styling
+ if (config.navigationMode !== 'default') {
+ dom.wrapper.setAttribute('data-navigation-mode', config.navigationMode);
+ }
+ else {
+ dom.wrapper.removeAttribute('data-navigation-mode');
+ }
+
+ // Define our contextual list of keyboard shortcuts
+ if (config.navigationMode === 'linear') {
+ keyboardShortcuts['→ , ↓ , SPACE , N , L , J'] = 'Next slide';
+ keyboardShortcuts['← , ↑ , P , H , K'] = 'Previous slide';
+ }
+ else {
+ keyboardShortcuts['N , SPACE'] = 'Next slide';
+ keyboardShortcuts['P'] = 'Previous slide';
+ keyboardShortcuts['← , H'] = 'Navigate left';
+ keyboardShortcuts['→ , L'] = 'Navigate right';
+ keyboardShortcuts['↑ , K'] = 'Navigate up';
+ keyboardShortcuts['↓ , J'] = 'Navigate down';
+ }
+
+ keyboardShortcuts['Home , ⌘/CTRL ←'] = 'First slide';
+ keyboardShortcuts['End , ⌘/CTRL →'] = 'Last slide';
+ keyboardShortcuts['B , .'] = 'Pause';
+ keyboardShortcuts['F'] = 'Fullscreen';
+ keyboardShortcuts['ESC, O'] = 'Slide overview';
+
+ sync();
+
+ }
+
+ /**
+ * Binds all event listeners.
+ */
+ function addEventListeners() {
+
+ eventsAreBound = true;
+
+ window.addEventListener('hashchange', onWindowHashChange, false);
+ window.addEventListener('resize', onWindowResize, false);
+
+ if (config.touch) {
+ if ('onpointerdown' in window) {
+ // Use W3C pointer events
+ dom.wrapper.addEventListener('pointerdown', onPointerDown, false);
+ dom.wrapper.addEventListener('pointermove', onPointerMove, false);
+ dom.wrapper.addEventListener('pointerup', onPointerUp, false);
+ }
+ else if (window.navigator.msPointerEnabled) {
+ // IE 10 uses prefixed version of pointer events
+ dom.wrapper.addEventListener('MSPointerDown', onPointerDown, false);
+ dom.wrapper.addEventListener('MSPointerMove', onPointerMove, false);
+ dom.wrapper.addEventListener('MSPointerUp', onPointerUp, false);
+ }
+ else {
+ // Fall back to touch events
+ dom.wrapper.addEventListener('touchstart', onTouchStart, false);
+ dom.wrapper.addEventListener('touchmove', onTouchMove, false);
+ dom.wrapper.addEventListener('touchend', onTouchEnd, false);
+ }
+ }
+
+ if (config.keyboard) {
+ document.addEventListener('keydown', onDocumentKeyDown, false);
+ document.addEventListener('keypress', onDocumentKeyPress, false);
+ }
+
+ if (config.progress && dom.progress) {
+ dom.progress.addEventListener('click', onProgressClicked, false);
+ }
+
+ dom.pauseOverlay.addEventListener('click', resume, false);
+
+ if (config.focusBodyOnPageVisibilityChange) {
+ var visibilityChange;
+
+ if ('hidden' in document) {
+ visibilityChange = 'visibilitychange';
+ }
+ else if ('msHidden' in document) {
+ visibilityChange = 'msvisibilitychange';
+ }
+ else if ('webkitHidden' in document) {
+ visibilityChange = 'webkitvisibilitychange';
+ }
+
+ if (visibilityChange) {
+ document.addEventListener(visibilityChange, onPageVisibilityChange, false);
+ }
+ }
+
+ // Listen to both touch and click events, in case the device
+ // supports both
+ var pointerEvents = ['touchstart', 'click'];
+
+ // Only support touch for Android, fixes double navigations in
+ // stock browser
+ if (UA.match(/android/gi)) {
+ pointerEvents = ['touchstart'];
+ }
+
+ pointerEvents.forEach(function (eventName) {
+ dom.controlsLeft.forEach(function (el) { el.addEventListener(eventName, onNavigateLeftClicked, false); });
+ dom.controlsRight.forEach(function (el) { el.addEventListener(eventName, onNavigateRightClicked, false); });
+ dom.controlsUp.forEach(function (el) { el.addEventListener(eventName, onNavigateUpClicked, false); });
+ dom.controlsDown.forEach(function (el) { el.addEventListener(eventName, onNavigateDownClicked, false); });
+ dom.controlsPrev.forEach(function (el) { el.addEventListener(eventName, onNavigatePrevClicked, false); });
+ dom.controlsNext.forEach(function (el) { el.addEventListener(eventName, onNavigateNextClicked, false); });
+ });
+
+ }
+
+ /**
+ * Unbinds all event listeners.
+ */
+ function removeEventListeners() {
+
+ eventsAreBound = false;
+
+ document.removeEventListener('keydown', onDocumentKeyDown, false);
+ document.removeEventListener('keypress', onDocumentKeyPress, false);
+ window.removeEventListener('hashchange', onWindowHashChange, false);
+ window.removeEventListener('resize', onWindowResize, false);
+
+ dom.wrapper.removeEventListener('pointerdown', onPointerDown, false);
+ dom.wrapper.removeEventListener('pointermove', onPointerMove, false);
+ dom.wrapper.removeEventListener('pointerup', onPointerUp, false);
+
+ dom.wrapper.removeEventListener('MSPointerDown', onPointerDown, false);
+ dom.wrapper.removeEventListener('MSPointerMove', onPointerMove, false);
+ dom.wrapper.removeEventListener('MSPointerUp', onPointerUp, false);
+
+ dom.wrapper.removeEventListener('touchstart', onTouchStart, false);
+ dom.wrapper.removeEventListener('touchmove', onTouchMove, false);
+ dom.wrapper.removeEventListener('touchend', onTouchEnd, false);
+
+ dom.pauseOverlay.removeEventListener('click', resume, false);
+
+ if (config.progress && dom.progress) {
+ dom.progress.removeEventListener('click', onProgressClicked, false);
+ }
+
+ ['touchstart', 'click'].forEach(function (eventName) {
+ dom.controlsLeft.forEach(function (el) { el.removeEventListener(eventName, onNavigateLeftClicked, false); });
+ dom.controlsRight.forEach(function (el) { el.removeEventListener(eventName, onNavigateRightClicked, false); });
+ dom.controlsUp.forEach(function (el) { el.removeEventListener(eventName, onNavigateUpClicked, false); });
+ dom.controlsDown.forEach(function (el) { el.removeEventListener(eventName, onNavigateDownClicked, false); });
+ dom.controlsPrev.forEach(function (el) { el.removeEventListener(eventName, onNavigatePrevClicked, false); });
+ dom.controlsNext.forEach(function (el) { el.removeEventListener(eventName, onNavigateNextClicked, false); });
+ });
+
+ }
+
+ /**
+ * Registers a new plugin with this reveal.js instance.
+ *
+ * reveal.js waits for all regisered plugins to initialize
+ * before considering itself ready, as long as the plugin
+ * is registered before calling `Reveal.initialize()`.
+ */
+ function registerPlugin(id, plugin) {
+
+ if (plugins[id] === undefined) {
+ plugins[id] = plugin;
+
+ // If a plugin is registered after reveal.js is loaded,
+ // initialize it right away
+ if (loaded && typeof plugin.init === 'function') {
+ plugin.init();
+ }
+ }
+ else {
+ console.warn('reveal.js: "' + id + '" plugin has already been registered');
+ }
+
+ }
+
+ /**
+ * Checks if a specific plugin has been registered.
+ *
+ * @param {String} id Unique plugin identifier
+ */
+ function hasPlugin(id) {
+
+ return !!plugins[id];
+
+ }
+
+ /**
+ * Returns the specific plugin instance, if a plugin
+ * with the given ID has been registered.
+ *
+ * @param {String} id Unique plugin identifier
+ */
+ function getPlugin(id) {
+
+ return plugins[id];
+
+ }
+
+ /**
+ * Add a custom key binding with optional description to
+ * be added to the help screen.
+ */
+ function addKeyBinding(binding, callback) {
+
+ if (typeof binding === 'object' && binding.keyCode) {
+ registeredKeyBindings[binding.keyCode] = {
+ callback: callback,
+ key: binding.key,
+ description: binding.description
+ };
+ }
+ else {
+ registeredKeyBindings[binding] = {
+ callback: callback,
+ key: null,
+ description: null
+ };
+ }
+
+ }
+
+ /**
+ * Removes the specified custom key binding.
+ */
+ function removeKeyBinding(keyCode) {
+
+ delete registeredKeyBindings[keyCode];
+
+ }
+
+ /**
+ * Extend object a with the properties of object b.
+ * If there's a conflict, object b takes precedence.
+ *
+ * @param {object} a
+ * @param {object} b
+ */
+ function extend(a, b) {
+
+ for (var i in b) {
+ a[i] = b[i];
+ }
+
+ return a;
+
+ }
+
+ /**
+ * Converts the target object to an array.
+ *
+ * @param {object} o
+ * @return {object[]}
+ */
+ function toArray(o) {
+
+ return Array.prototype.slice.call(o);
+
+ }
+
+ /**
+ * Utility for deserializing a value.
+ *
+ * @param {*} value
+ * @return {*}
+ */
+ function deserialize(value) {
+
+ if (typeof value === 'string') {
+ if (value === 'null') return null;
+ else if (value === 'true') return true;
+ else if (value === 'false') return false;
+ else if (value.match(/^-?[\d\.]+$/)) return parseFloat(value);
+ }
+
+ return value;
+
+ }
+
+ /**
+ * Measures the distance in pixels between point a
+ * and point b.
+ *
+ * @param {object} a point with x/y properties
+ * @param {object} b point with x/y properties
+ *
+ * @return {number}
+ */
+ function distanceBetween(a, b) {
+
+ var dx = a.x - b.x,
+ dy = a.y - b.y;
+
+ return Math.sqrt(dx * dx + dy * dy);
+
+ }
+
+ /**
+ * Applies a CSS transform to the target element.
+ *
+ * @param {HTMLElement} element
+ * @param {string} transform
+ */
+ function transformElement(element, transform) {
+
+ element.style.WebkitTransform = transform;
+ element.style.MozTransform = transform;
+ element.style.msTransform = transform;
+ element.style.transform = transform;
+
+ }
+
+ /**
+ * Applies CSS transforms to the slides container. The container
+ * is transformed from two separate sources: layout and the overview
+ * mode.
+ *
+ * @param {object} transforms
+ */
+ function transformSlides(transforms) {
+
+ // Pick up new transforms from arguments
+ if (typeof transforms.layout === 'string') slidesTransform.layout = transforms.layout;
+ if (typeof transforms.overview === 'string') slidesTransform.overview = transforms.overview;
+
+ // Apply the transforms to the slides container
+ if (slidesTransform.layout) {
+ transformElement(dom.slides, slidesTransform.layout + ' ' + slidesTransform.overview);
+ }
+ else {
+ transformElement(dom.slides, slidesTransform.overview);
+ }
+
+ }
+
+ /**
+ * Injects the given CSS styles into the DOM.
+ *
+ * @param {string} value
+ */
+ function injectStyleSheet(value) {
+
+ var tag = document.createElement('style');
+ tag.type = 'text/css';
+ if (tag.styleSheet) {
+ tag.styleSheet.cssText = value;
+ }
+ else {
+ tag.appendChild(document.createTextNode(value));
+ }
+ document.getElementsByTagName('head')[0].appendChild(tag);
+
+ }
+
+ /**
+ * Find the closest parent that matches the given
+ * selector.
+ *
+ * @param {HTMLElement} target The child element
+ * @param {String} selector The CSS selector to match
+ * the parents against
+ *
+ * @return {HTMLElement} The matched parent or null
+ * if no matching parent was found
+ */
+ function closestParent(target, selector) {
+
+ var parent = target.parentNode;
+
+ while (parent) {
+
+ // There's some overhead doing this each time, we don't
+ // want to rewrite the element prototype but should still
+ // be enough to feature detect once at startup...
+ var matchesMethod = parent.matches || parent.matchesSelector || parent.msMatchesSelector;
+
+ // If we find a match, we're all set
+ if (matchesMethod && matchesMethod.call(parent, selector)) {
+ return parent;
+ }
+
+ // Keep searching
+ parent = parent.parentNode;
+
+ }
+
+ return null;
+
+ }
+
+ /**
+ * Converts various color input formats to an {r:0,g:0,b:0} object.
+ *
+ * @param {string} color The string representation of a color
+ * @example
+ * colorToRgb('#000');
+ * @example
+ * colorToRgb('#000000');
+ * @example
+ * colorToRgb('rgb(0,0,0)');
+ * @example
+ * colorToRgb('rgba(0,0,0)');
+ *
+ * @return {{r: number, g: number, b: number, [a]: number}|null}
+ */
+ function colorToRgb(color) {
+
+ var hex3 = color.match(/^#([0-9a-f]{3})$/i);
+ if (hex3 && hex3[1]) {
+ hex3 = hex3[1];
+ return {
+ r: parseInt(hex3.charAt(0), 16) * 0x11,
+ g: parseInt(hex3.charAt(1), 16) * 0x11,
+ b: parseInt(hex3.charAt(2), 16) * 0x11
+ };
+ }
+
+ var hex6 = color.match(/^#([0-9a-f]{6})$/i);
+ if (hex6 && hex6[1]) {
+ hex6 = hex6[1];
+ return {
+ r: parseInt(hex6.substr(0, 2), 16),
+ g: parseInt(hex6.substr(2, 2), 16),
+ b: parseInt(hex6.substr(4, 2), 16)
+ };
+ }
+
+ var rgb = color.match(/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i);
+ if (rgb) {
+ return {
+ r: parseInt(rgb[1], 10),
+ g: parseInt(rgb[2], 10),
+ b: parseInt(rgb[3], 10)
+ };
+ }
+
+ var rgba = color.match(/^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\,\s*([\d]+|[\d]*.[\d]+)\s*\)$/i);
+ if (rgba) {
+ return {
+ r: parseInt(rgba[1], 10),
+ g: parseInt(rgba[2], 10),
+ b: parseInt(rgba[3], 10),
+ a: parseFloat(rgba[4])
+ };
+ }
+
+ return null;
+
+ }
+
+ /**
+ * Calculates brightness on a scale of 0-255.
+ *
+ * @param {string} color See colorToRgb for supported formats.
+ * @see {@link colorToRgb}
+ */
+ function colorBrightness(color) {
+
+ if (typeof color === 'string') color = colorToRgb(color);
+
+ if (color) {
+ return (color.r * 299 + color.g * 587 + color.b * 114) / 1000;
+ }
+
+ return null;
+
+ }
+
+ /**
+ * Returns the remaining height within the parent of the
+ * target element.
+ *
+ * remaining height = [ configured parent height ] - [ current parent height ]
+ *
+ * @param {HTMLElement} element
+ * @param {number} [height]
+ */
+ function getRemainingHeight(element, height) {
+
+ height = height || 0;
+
+ if (element) {
+ var newHeight, oldHeight = element.style.height;
+
+ // Change the .stretch element height to 0 in order find the height of all
+ // the other elements
+ element.style.height = '0px';
+
+ // In Overview mode, the parent (.slide) height is set of 700px.
+ // Restore it temporarily to its natural height.
+ element.parentNode.style.height = 'auto';
+
+ newHeight = height - element.parentNode.offsetHeight;
+
+ // Restore the old height, just in case
+ element.style.height = oldHeight + 'px';
+
+ // Clear the parent (.slide) height. .removeProperty works in IE9+
+ element.parentNode.style.removeProperty('height');
+
+ return newHeight;
+ }
+
+ return height;
+
+ }
+
+ /**
+ * Checks if this instance is being used to print a PDF.
+ */
+ function isPrintingPDF() {
+
+ return (/print-pdf/gi).test(window.location.search);
+
+ }
+
+ /**
+ * Hides the address bar if we're on a mobile device.
+ */
+ function hideAddressBar() {
+
+ if (config.hideAddressBar && isMobileDevice) {
+ // Events that should trigger the address bar to hide
+ window.addEventListener('load', removeAddressBar, false);
+ window.addEventListener('orientationchange', removeAddressBar, false);
+ }
+
+ }
+
+ /**
+ * Causes the address bar to hide on mobile devices,
+ * more vertical space ftw.
+ */
+ function removeAddressBar() {
+
+ setTimeout(function () {
+ window.scrollTo(0, 1);
+ }, 10);
+
+ }
+
+ /**
+ * Dispatches an event of the specified type from the
+ * reveal DOM element.
+ */
+ function dispatchEvent(type, args) {
+
+ var event = document.createEvent('HTMLEvents', 1, 2);
+ event.initEvent(type, true, true);
+ extend(event, args);
+ dom.wrapper.dispatchEvent(event);
+
+ // If we're in an iframe, post each reveal.js event to the
+ // parent window. Used by the notes plugin
+ if (config.postMessageEvents && window.parent !== window.self) {
+ window.parent.postMessage(JSON.stringify({ namespace: 'reveal', eventName: type, state: getState() }), '*');
+ }
+
+ }
+
+ /**
+ * Wrap all links in 3D goodness.
+ */
+ function enableRollingLinks() {
+
+ if (features.transforms3d && !('msPerspective' in document.body.style)) {
+ var anchors = dom.wrapper.querySelectorAll(SLIDES_SELECTOR + ' a');
+
+ for (var i = 0, len = anchors.length; i < len; i++) {
+ var anchor = anchors[i];
+
+ if (anchor.textContent && !anchor.querySelector('*') && (!anchor.className || !anchor.classList.contains(anchor, 'roll'))) {
+ var span = document.createElement('span');
+ span.setAttribute('data-title', anchor.text);
+ span.innerHTML = anchor.innerHTML;
+
+ anchor.classList.add('roll');
+ anchor.innerHTML = '';
+ anchor.appendChild(span);
+ }
+ }
+ }
+
+ }
+
+ /**
+ * Unwrap all 3D links.
+ */
+ function disableRollingLinks() {
+
+ var anchors = dom.wrapper.querySelectorAll(SLIDES_SELECTOR + ' a.roll');
+
+ for (var i = 0, len = anchors.length; i < len; i++) {
+ var anchor = anchors[i];
+ var span = anchor.querySelector('span');
+
+ if (span) {
+ anchor.classList.remove('roll');
+ anchor.innerHTML = span.innerHTML;
+ }
+ }
+
+ }
+
+ /**
+ * Bind preview frame links.
+ *
+ * @param {string} [selector=a] - selector for anchors
+ */
+ function enablePreviewLinks(selector) {
+
+ var anchors = toArray(document.querySelectorAll(selector ? selector : 'a'));
+
+ anchors.forEach(function (element) {
+ if (/^(http|www)/gi.test(element.getAttribute('href'))) {
+ element.addEventListener('click', onPreviewLinkClicked, false);
+ }
+ });
+
+ }
+
+ /**
+ * Unbind preview frame links.
+ */
+ function disablePreviewLinks(selector) {
+
+ var anchors = toArray(document.querySelectorAll(selector ? selector : 'a'));
+
+ anchors.forEach(function (element) {
+ if (/^(http|www)/gi.test(element.getAttribute('href'))) {
+ element.removeEventListener('click', onPreviewLinkClicked, false);
+ }
+ });
+
+ }
+
+ /**
+ * Opens a preview window for the target URL.
+ *
+ * @param {string} url - url for preview iframe src
+ */
+ function showPreview(url) {
+
+ closeOverlay();
+
+ dom.overlay = document.createElement('div');
+ dom.overlay.classList.add('overlay');
+ dom.overlay.classList.add('overlay-preview');
+ dom.wrapper.appendChild(dom.overlay);
+
+ dom.overlay.innerHTML = [
+ '',
+ '
',
+ '',
+ '',
+ '',
+ 'Unable to load iframe. This is likely due to the site\'s policy (x-frame-options). ',
+ ' ',
+ '
'
+ ].join('');
+
+ dom.overlay.querySelector('iframe').addEventListener('load', function (event) {
+ dom.overlay.classList.add('loaded');
+ }, false);
+
+ dom.overlay.querySelector('.close').addEventListener('click', function (event) {
+ closeOverlay();
+ event.preventDefault();
+ }, false);
+
+ dom.overlay.querySelector('.external').addEventListener('click', function (event) {
+ closeOverlay();
+ }, false);
+
+ setTimeout(function () {
+ dom.overlay.classList.add('visible');
+ }, 1);
+
+ }
+
+ /**
+ * Open or close help overlay window.
+ *
+ * @param {Boolean} [override] Flag which overrides the
+ * toggle logic and forcibly sets the desired state. True means
+ * help is open, false means it's closed.
+ */
+ function toggleHelp(override) {
+
+ if (typeof override === 'boolean') {
+ override ? showHelp() : closeOverlay();
+ }
+ else {
+ if (dom.overlay) {
+ closeOverlay();
+ }
+ else {
+ showHelp();
+ }
+ }
+ }
+
+ /**
+ * Opens an overlay window with help material.
+ */
+ function showHelp() {
+
+ if (config.help) {
+
+ closeOverlay();
+
+ dom.overlay = document.createElement('div');
+ dom.overlay.classList.add('overlay');
+ dom.overlay.classList.add('overlay-help');
+ dom.wrapper.appendChild(dom.overlay);
+
+ var html = 'Keyboard Shortcuts
';
+
+ html += 'KEY ACTION ';
+ for (var key in keyboardShortcuts) {
+ html += '' + key + ' ' + keyboardShortcuts[key] + ' ';
+ }
+
+ // Add custom key bindings that have associated descriptions
+ for (var binding in registeredKeyBindings) {
+ if (registeredKeyBindings[binding].key && registeredKeyBindings[binding].description) {
+ html += '' + registeredKeyBindings[binding].key + ' ' + registeredKeyBindings[binding].description + ' ';
+ }
+ }
+
+ html += '
';
+
+ dom.overlay.innerHTML = [
+ '',
+ ''
+ ].join('');
+
+ dom.overlay.querySelector('.close').addEventListener('click', function (event) {
+ closeOverlay();
+ event.preventDefault();
+ }, false);
+
+ setTimeout(function () {
+ dom.overlay.classList.add('visible');
+ }, 1);
+
+ }
+
+ }
+
+ /**
+ * Closes any currently open overlay.
+ */
+ function closeOverlay() {
+
+ if (dom.overlay) {
+ dom.overlay.parentNode.removeChild(dom.overlay);
+ dom.overlay = null;
+ }
+
+ }
+
+ /**
+ * Applies JavaScript-controlled layout rules to the
+ * presentation.
+ */
+ function layout() {
+
+ if (dom.wrapper && !isPrintingPDF()) {
+
+ if (!config.disableLayout) {
+
+ // On some mobile devices '100vh' is taller than the visible
+ // viewport which leads to part of the presentation being
+ // cut off. To work around this we define our own '--vh' custom
+ // property where 100x adds up to the correct height.
+ //
+ // https://css-tricks.com/the-trick-to-viewport-units-on-mobile/
+ if (isMobileDevice) {
+ document.documentElement.style.setProperty('--vh', (window.innerHeight * 0.01) + 'px');
+ }
+
+ var size = getComputedSlideSize();
+
+ var oldScale = scale;
+
+ // Layout the contents of the slides
+ layoutSlideContents(config.width, config.height);
+
+ dom.slides.style.width = size.width + 'px';
+ dom.slides.style.height = size.height + 'px';
+
+ // Determine scale of content to fit within available space
+ scale = Math.min(size.presentationWidth / size.width, size.presentationHeight / size.height);
+
+ // Respect max/min scale settings
+ scale = Math.max(scale, config.minScale);
+ scale = Math.min(scale, config.maxScale);
+
+ // Don't apply any scaling styles if scale is 1
+ if (scale === 1) {
+ dom.slides.style.zoom = '';
+ dom.slides.style.left = '';
+ dom.slides.style.top = '';
+ dom.slides.style.bottom = '';
+ dom.slides.style.right = '';
+ transformSlides({ layout: '' });
+ }
+ else {
+ // Prefer zoom for scaling up so that content remains crisp.
+ // Don't use zoom to scale down since that can lead to shifts
+ // in text layout/line breaks.
+ if (scale > 1 && features.zoom) {
+ dom.slides.style.zoom = scale;
+ dom.slides.style.left = '';
+ dom.slides.style.top = '';
+ dom.slides.style.bottom = '';
+ dom.slides.style.right = '';
+ transformSlides({ layout: '' });
+ }
+ // Apply scale transform as a fallback
+ else {
+ dom.slides.style.zoom = '';
+ dom.slides.style.left = '50%';
+ dom.slides.style.top = '50%';
+ dom.slides.style.bottom = 'auto';
+ dom.slides.style.right = 'auto';
+ transformSlides({ layout: 'translate(-50%, -50%) scale(' + scale + ')' });
+ }
+ }
+
+ // Select all slides, vertical and horizontal
+ var slides = toArray(dom.wrapper.querySelectorAll(SLIDES_SELECTOR));
+
+ for (var i = 0, len = slides.length; i < len; i++) {
+ var slide = slides[i];
+
+ // Don't bother updating invisible slides
+ if (slide.style.display === 'none') {
+ continue;
+ }
+
+ if (config.center || slide.classList.contains('center')) {
+ // Vertical stacks are not centred since their section
+ // children will be
+ if (slide.classList.contains('stack')) {
+ slide.style.top = 0;
+ }
+ else {
+ slide.style.top = Math.max((size.height - slide.scrollHeight) / 2, 0) + 'px';
+ }
+ }
+ else {
+ slide.style.top = '';
+ }
+
+ }
+
+ if (oldScale !== scale) {
+ dispatchEvent('resize', {
+ 'oldScale': oldScale,
+ 'scale': scale,
+ 'size': size
+ });
+ }
+ }
+
+ updateProgress();
+ updateParallax();
+
+ if (isOverview()) {
+ updateOverview();
+ }
+
+ }
+
+ }
+
+ /**
+ * Applies layout logic to the contents of all slides in
+ * the presentation.
+ *
+ * @param {string|number} width
+ * @param {string|number} height
+ */
+ function layoutSlideContents(width, height) {
+
+ // Handle sizing of elements with the 'stretch' class
+ toArray(dom.slides.querySelectorAll('section > .stretch')).forEach(function (element) {
+
+ // Determine how much vertical space we can use
+ var remainingHeight = getRemainingHeight(element, height);
+
+ // Consider the aspect ratio of media elements
+ if (/(img|video)/gi.test(element.nodeName)) {
+ var nw = element.naturalWidth || element.videoWidth,
+ nh = element.naturalHeight || element.videoHeight;
+
+ var es = Math.min(width / nw, remainingHeight / nh);
+
+ element.style.width = (nw * es) + 'px';
+ element.style.height = (nh * es) + 'px';
+
+ }
+ else {
+ element.style.width = width + 'px';
+ element.style.height = remainingHeight + 'px';
+ }
+
+ });
+
+ }
+
+ /**
+ * Calculates the computed pixel size of our slides. These
+ * values are based on the width and height configuration
+ * options.
+ *
+ * @param {number} [presentationWidth=dom.wrapper.offsetWidth]
+ * @param {number} [presentationHeight=dom.wrapper.offsetHeight]
+ */
+ function getComputedSlideSize(presentationWidth, presentationHeight) {
+
+ var size = {
+ // Slide size
+ width: config.width,
+ height: config.height,
+
+ // Presentation size
+ presentationWidth: presentationWidth || dom.wrapper.offsetWidth,
+ presentationHeight: presentationHeight || dom.wrapper.offsetHeight
+ };
+
+ // Reduce available space by margin
+ size.presentationWidth -= (size.presentationWidth * config.margin);
+ size.presentationHeight -= (size.presentationHeight * config.margin);
+
+ // Slide width may be a percentage of available width
+ if (typeof size.width === 'string' && /%$/.test(size.width)) {
+ size.width = parseInt(size.width, 10) / 100 * size.presentationWidth;
+ }
+
+ // Slide height may be a percentage of available height
+ if (typeof size.height === 'string' && /%$/.test(size.height)) {
+ size.height = parseInt(size.height, 10) / 100 * size.presentationHeight;
+ }
+
+ return size;
+
+ }
+
+ /**
+ * Stores the vertical index of a stack so that the same
+ * vertical slide can be selected when navigating to and
+ * from the stack.
+ *
+ * @param {HTMLElement} stack The vertical stack element
+ * @param {string|number} [v=0] Index to memorize
+ */
+ function setPreviousVerticalIndex(stack, v) {
+
+ if (typeof stack === 'object' && typeof stack.setAttribute === 'function') {
+ stack.setAttribute('data-previous-indexv', v || 0);
+ }
+
+ }
+
+ /**
+ * Retrieves the vertical index which was stored using
+ * #setPreviousVerticalIndex() or 0 if no previous index
+ * exists.
+ *
+ * @param {HTMLElement} stack The vertical stack element
+ */
+ function getPreviousVerticalIndex(stack) {
+
+ if (typeof stack === 'object' && typeof stack.setAttribute === 'function' && stack.classList.contains('stack')) {
+ // Prefer manually defined start-indexv
+ var attributeName = stack.hasAttribute('data-start-indexv') ? 'data-start-indexv' : 'data-previous-indexv';
+
+ return parseInt(stack.getAttribute(attributeName) || 0, 10);
+ }
+
+ return 0;
+
+ }
+
+ /**
+ * Displays the overview of slides (quick nav) by scaling
+ * down and arranging all slide elements.
+ */
+ function activateOverview() {
+
+ // Only proceed if enabled in config
+ if (config.overview && !isOverview()) {
+
+ overview = true;
+
+ dom.wrapper.classList.add('overview');
+ dom.wrapper.classList.remove('overview-deactivating');
+
+ if (features.overviewTransitions) {
+ setTimeout(function () {
+ dom.wrapper.classList.add('overview-animated');
+ }, 1);
+ }
+
+ // Don't auto-slide while in overview mode
+ cancelAutoSlide();
+
+ // Move the backgrounds element into the slide container to
+ // that the same scaling is applied
+ dom.slides.appendChild(dom.background);
+
+ // Clicking on an overview slide navigates to it
+ toArray(dom.wrapper.querySelectorAll(SLIDES_SELECTOR)).forEach(function (slide) {
+ if (!slide.classList.contains('stack')) {
+ slide.addEventListener('click', onOverviewSlideClicked, true);
+ }
+ });
+
+ // Calculate slide sizes
+ var margin = 70;
+ var slideSize = getComputedSlideSize();
+ overviewSlideWidth = slideSize.width + margin;
+ overviewSlideHeight = slideSize.height + margin;
+
+ // Reverse in RTL mode
+ if (config.rtl) {
+ overviewSlideWidth = -overviewSlideWidth;
+ }
+
+ updateSlidesVisibility();
+ layoutOverview();
+ updateOverview();
+
+ layout();
+
+ // Notify observers of the overview showing
+ dispatchEvent('overviewshown', {
+ 'indexh': indexh,
+ 'indexv': indexv,
+ 'currentSlide': currentSlide
+ });
+
+ }
+
+ }
+
+ /**
+ * Uses CSS transforms to position all slides in a grid for
+ * display inside of the overview mode.
+ */
+ function layoutOverview() {
+
+ // Layout slides
+ toArray(dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR)).forEach(function (hslide, h) {
+ hslide.setAttribute('data-index-h', h);
+ transformElement(hslide, 'translate3d(' + (h * overviewSlideWidth) + 'px, 0, 0)');
+
+ if (hslide.classList.contains('stack')) {
+
+ toArray(hslide.querySelectorAll('section')).forEach(function (vslide, v) {
+ vslide.setAttribute('data-index-h', h);
+ vslide.setAttribute('data-index-v', v);
+
+ transformElement(vslide, 'translate3d(0, ' + (v * overviewSlideHeight) + 'px, 0)');
+ });
+
+ }
+ });
+
+ // Layout slide backgrounds
+ toArray(dom.background.childNodes).forEach(function (hbackground, h) {
+ transformElement(hbackground, 'translate3d(' + (h * overviewSlideWidth) + 'px, 0, 0)');
+
+ toArray(hbackground.querySelectorAll('.slide-background')).forEach(function (vbackground, v) {
+ transformElement(vbackground, 'translate3d(0, ' + (v * overviewSlideHeight) + 'px, 0)');
+ });
+ });
+
+ }
+
+ /**
+ * Moves the overview viewport to the current slides.
+ * Called each time the current slide changes.
+ */
+ function updateOverview() {
+
+ var vmin = Math.min(window.innerWidth, window.innerHeight);
+ var scale = Math.max(vmin / 5, 150) / vmin;
+
+ transformSlides({
+ overview: [
+ 'scale(' + scale + ')',
+ 'translateX(' + (-indexh * overviewSlideWidth) + 'px)',
+ 'translateY(' + (-indexv * overviewSlideHeight) + 'px)'
+ ].join(' ')
+ });
+
+ }
+
+ /**
+ * Exits the slide overview and enters the currently
+ * active slide.
+ */
+ function deactivateOverview() {
+
+ // Only proceed if enabled in config
+ if (config.overview) {
+
+ overview = false;
+
+ dom.wrapper.classList.remove('overview');
+ dom.wrapper.classList.remove('overview-animated');
+
+ // Temporarily add a class so that transitions can do different things
+ // depending on whether they are exiting/entering overview, or just
+ // moving from slide to slide
+ dom.wrapper.classList.add('overview-deactivating');
+
+ setTimeout(function () {
+ dom.wrapper.classList.remove('overview-deactivating');
+ }, 1);
+
+ // Move the background element back out
+ dom.wrapper.appendChild(dom.background);
+
+ // Clean up changes made to slides
+ toArray(dom.wrapper.querySelectorAll(SLIDES_SELECTOR)).forEach(function (slide) {
+ transformElement(slide, '');
+
+ slide.removeEventListener('click', onOverviewSlideClicked, true);
+ });
+
+ // Clean up changes made to backgrounds
+ toArray(dom.background.querySelectorAll('.slide-background')).forEach(function (background) {
+ transformElement(background, '');
+ });
+
+ transformSlides({ overview: '' });
+
+ slide(indexh, indexv);
+
+ layout();
+
+ cueAutoSlide();
+
+ // Notify observers of the overview hiding
+ dispatchEvent('overviewhidden', {
+ 'indexh': indexh,
+ 'indexv': indexv,
+ 'currentSlide': currentSlide
+ });
+
+ }
+ }
+
+ /**
+ * Toggles the slide overview mode on and off.
+ *
+ * @param {Boolean} [override] Flag which overrides the
+ * toggle logic and forcibly sets the desired state. True means
+ * overview is open, false means it's closed.
+ */
+ function toggleOverview(override) {
+
+ if (typeof override === 'boolean') {
+ override ? activateOverview() : deactivateOverview();
+ }
+ else {
+ isOverview() ? deactivateOverview() : activateOverview();
+ }
+
+ }
+
+ /**
+ * Checks if the overview is currently active.
+ *
+ * @return {Boolean} true if the overview is active,
+ * false otherwise
+ */
+ function isOverview() {
+
+ return overview;
+
+ }
+
+ /**
+ * Return a hash URL that will resolve to the current slide location.
+ */
+ function locationHash() {
+
+ var url = '/';
+
+ // Attempt to create a named link based on the slide's ID
+ var id = currentSlide ? currentSlide.getAttribute('id') : null;
+ if (id) {
+ id = encodeURIComponent(id);
+ }
+
+ var indexf;
+ if (config.fragmentInURL) {
+ indexf = getIndices().f;
+ }
+
+ // If the current slide has an ID, use that as a named link,
+ // but we don't support named links with a fragment index
+ if (typeof id === 'string' && id.length && indexf === undefined) {
+ url = '/' + id;
+ }
+ // Otherwise use the /h/v index
+ else {
+ var hashIndexBase = config.hashOneBasedIndex ? 1 : 0;
+ if (indexh > 0 || indexv > 0 || indexf !== undefined) url += indexh + hashIndexBase;
+ if (indexv > 0 || indexf !== undefined) url += '/' + (indexv + hashIndexBase);
+ if (indexf !== undefined) url += '/' + indexf;
+ }
+
+ return url;
+
+ }
+
+ /**
+ * Checks if the current or specified slide is vertical
+ * (nested within another slide).
+ *
+ * @param {HTMLElement} [slide=currentSlide] The slide to check
+ * orientation of
+ * @return {Boolean}
+ */
+ function isVerticalSlide(slide) {
+
+ // Prefer slide argument, otherwise use current slide
+ slide = slide ? slide : currentSlide;
+
+ return slide && slide.parentNode && !!slide.parentNode.nodeName.match(/section/i);
+
+ }
+
+ /**
+ * Handling the fullscreen functionality via the fullscreen API
+ *
+ * @see http://fullscreen.spec.whatwg.org/
+ * @see https://developer.mozilla.org/en-US/docs/DOM/Using_fullscreen_mode
+ */
+ function enterFullscreen() {
+
+ var element = document.documentElement;
+
+ // Check which implementation is available
+ var requestMethod = element.requestFullscreen ||
+ element.webkitRequestFullscreen ||
+ element.webkitRequestFullScreen ||
+ element.mozRequestFullScreen ||
+ element.msRequestFullscreen;
+
+ if (requestMethod) {
+ requestMethod.apply(element);
+ }
+
+ }
+
+ /**
+ * Shows the mouse pointer after it has been hidden with
+ * #hideCursor.
+ */
+ function showCursor() {
+
+ if (cursorHidden) {
+ cursorHidden = false;
+ dom.wrapper.style.cursor = '';
+ }
+
+ }
+
+ /**
+ * Hides the mouse pointer when it's on top of the .reveal
+ * container.
+ */
+ function hideCursor() {
+
+ if (cursorHidden === false) {
+ cursorHidden = true;
+ dom.wrapper.style.cursor = 'none';
+ }
+
+ }
+
+ /**
+ * Enters the paused mode which fades everything on screen to
+ * black.
+ */
+ function pause() {
+
+ if (config.pause) {
+ var wasPaused = dom.wrapper.classList.contains('paused');
+
+ cancelAutoSlide();
+ dom.wrapper.classList.add('paused');
+
+ if (wasPaused === false) {
+ dispatchEvent('paused');
+ }
+ }
+
+ }
+
+ /**
+ * Exits from the paused mode.
+ */
+ function resume() {
+
+ var wasPaused = dom.wrapper.classList.contains('paused');
+ dom.wrapper.classList.remove('paused');
+
+ cueAutoSlide();
+
+ if (wasPaused) {
+ dispatchEvent('resumed');
+ }
+
+ }
+
+ /**
+ * Toggles the paused mode on and off.
+ */
+ function togglePause(override) {
+
+ if (typeof override === 'boolean') {
+ override ? pause() : resume();
+ }
+ else {
+ isPaused() ? resume() : pause();
+ }
+
+ }
+
+ /**
+ * Checks if we are currently in the paused mode.
+ *
+ * @return {Boolean}
+ */
+ function isPaused() {
+
+ return dom.wrapper.classList.contains('paused');
+
+ }
+
+ /**
+ * Toggles the auto slide mode on and off.
+ *
+ * @param {Boolean} [override] Flag which sets the desired state.
+ * True means autoplay starts, false means it stops.
+ */
+
+ function toggleAutoSlide(override) {
+
+ if (typeof override === 'boolean') {
+ override ? resumeAutoSlide() : pauseAutoSlide();
+ }
+
+ else {
+ autoSlidePaused ? resumeAutoSlide() : pauseAutoSlide();
+ }
+
+ }
+
+ /**
+ * Checks if the auto slide mode is currently on.
+ *
+ * @return {Boolean}
+ */
+ function isAutoSliding() {
+
+ return !!(autoSlide && !autoSlidePaused);
+
+ }
+
+ /**
+ * Steps from the current point in the presentation to the
+ * slide which matches the specified horizontal and vertical
+ * indices.
+ *
+ * @param {number} [h=indexh] Horizontal index of the target slide
+ * @param {number} [v=indexv] Vertical index of the target slide
+ * @param {number} [f] Index of a fragment within the
+ * target slide to activate
+ * @param {number} [o] Origin for use in multimaster environments
+ */
+ function slide(h, v, f, o) {
+
+ // Remember where we were at before
+ previousSlide = currentSlide;
+
+ // Query all horizontal slides in the deck
+ var horizontalSlides = dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR);
+
+ // Abort if there are no slides
+ if (horizontalSlides.length === 0) return;
+
+ // If no vertical index is specified and the upcoming slide is a
+ // stack, resume at its previous vertical index
+ if (v === undefined && !isOverview()) {
+ v = getPreviousVerticalIndex(horizontalSlides[h]);
+ }
+
+ // If we were on a vertical stack, remember what vertical index
+ // it was on so we can resume at the same position when returning
+ if (previousSlide && previousSlide.parentNode && previousSlide.parentNode.classList.contains('stack')) {
+ setPreviousVerticalIndex(previousSlide.parentNode, indexv);
+ }
+
+ // Remember the state before this slide
+ var stateBefore = state.concat();
+
+ // Reset the state array
+ state.length = 0;
+
+ var indexhBefore = indexh || 0,
+ indexvBefore = indexv || 0;
+
+ // Activate and transition to the new slide
+ indexh = updateSlides(HORIZONTAL_SLIDES_SELECTOR, h === undefined ? indexh : h);
+ indexv = updateSlides(VERTICAL_SLIDES_SELECTOR, v === undefined ? indexv : v);
+
+ // Update the visibility of slides now that the indices have changed
+ updateSlidesVisibility();
+
+ layout();
+
+ // Update the overview if it's currently active
+ if (isOverview()) {
+ updateOverview();
+ }
+
+ // Find the current horizontal slide and any possible vertical slides
+ // within it
+ var currentHorizontalSlide = horizontalSlides[indexh],
+ currentVerticalSlides = currentHorizontalSlide.querySelectorAll('section');
+
+ // Store references to the previous and current slides
+ currentSlide = currentVerticalSlides[indexv] || currentHorizontalSlide;
+
+ // Show fragment, if specified
+ if (typeof f !== 'undefined') {
+ navigateFragment(f);
+ }
+
+ // Dispatch an event if the slide changed
+ var slideChanged = (indexh !== indexhBefore || indexv !== indexvBefore);
+ if (!slideChanged) {
+ // Ensure that the previous slide is never the same as the current
+ previousSlide = null;
+ }
+
+ // Solves an edge case where the previous slide maintains the
+ // 'present' class when navigating between adjacent vertical
+ // stacks
+ if (previousSlide && previousSlide !== currentSlide) {
+ previousSlide.classList.remove('present');
+ previousSlide.setAttribute('aria-hidden', 'true');
+
+ // Reset all slides upon navigate to home
+ // Issue: #285
+ if (dom.wrapper.querySelector(HOME_SLIDE_SELECTOR).classList.contains('present')) {
+ // Launch async task
+ setTimeout(function () {
+ var slides = toArray(dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR + '.stack')), i;
+ for (i in slides) {
+ if (slides[i]) {
+ // Reset stack
+ setPreviousVerticalIndex(slides[i], 0);
+ }
+ }
+ }, 0);
+ }
+ }
+
+ // Apply the new state
+ stateLoop: for (var i = 0, len = state.length; i < len; i++) {
+ // Check if this state existed on the previous slide. If it
+ // did, we will avoid adding it repeatedly
+ for (var j = 0; j < stateBefore.length; j++) {
+ if (stateBefore[j] === state[i]) {
+ stateBefore.splice(j, 1);
+ continue stateLoop;
+ }
+ }
+
+ document.documentElement.classList.add(state[i]);
+
+ // Dispatch custom event matching the state's name
+ dispatchEvent(state[i]);
+ }
+
+ // Clean up the remains of the previous state
+ while (stateBefore.length) {
+ document.documentElement.classList.remove(stateBefore.pop());
+ }
+
+ if (slideChanged) {
+ dispatchEvent('slidechanged', {
+ 'indexh': indexh,
+ 'indexv': indexv,
+ 'previousSlide': previousSlide,
+ 'currentSlide': currentSlide,
+ 'origin': o
+ });
+ }
+
+ // Handle embedded content
+ if (slideChanged || !previousSlide) {
+ stopEmbeddedContent(previousSlide);
+ startEmbeddedContent(currentSlide);
+ }
+
+ // Announce the current slide contents, for screen readers
+ dom.statusDiv.textContent = getStatusText(currentSlide);
+
+ updateControls();
+ updateProgress();
+ updateBackground();
+ updateParallax();
+ updateSlideNumber();
+ updateNotes();
+ updateFragments();
+
+ // Update the URL hash
+ writeURL();
+
+ cueAutoSlide();
+
+ }
+
+ /**
+ * Syncs the presentation with the current DOM. Useful
+ * when new slides or control elements are added or when
+ * the configuration has changed.
+ */
+ function sync() {
+
+ // Subscribe to input
+ removeEventListeners();
+ addEventListeners();
+
+ // Force a layout to make sure the current config is accounted for
+ layout();
+
+ // Reflect the current autoSlide value
+ autoSlide = config.autoSlide;
+
+ // Start auto-sliding if it's enabled
+ cueAutoSlide();
+
+ // Re-create the slide backgrounds
+ createBackgrounds();
+
+ // Write the current hash to the URL
+ writeURL();
+
+ sortAllFragments();
+
+ updateControls();
+ updateProgress();
+ updateSlideNumber();
+ updateSlidesVisibility();
+ updateBackground(true);
+ updateNotesVisibility();
+ updateNotes();
+
+ formatEmbeddedContent();
+
+ // Start or stop embedded content depending on global config
+ if (config.autoPlayMedia === false) {
+ stopEmbeddedContent(currentSlide, { unloadIframes: false });
+ }
+ else {
+ startEmbeddedContent(currentSlide);
+ }
+
+ if (isOverview()) {
+ layoutOverview();
+ }
+
+ }
+
+ /**
+ * Updates reveal.js to keep in sync with new slide attributes. For
+ * example, if you add a new `data-background-image` you can call
+ * this to have reveal.js render the new background image.
+ *
+ * Similar to #sync() but more efficient when you only need to
+ * refresh a specific slide.
+ *
+ * @param {HTMLElement} slide
+ */
+ function syncSlide(slide) {
+
+ // Default to the current slide
+ slide = slide || currentSlide;
+
+ syncBackground(slide);
+ syncFragments(slide);
+
+ updateBackground();
+ updateNotes();
+
+ loadSlide(slide);
+
+ }
+
+ /**
+ * Formats the fragments on the given slide so that they have
+ * valid indices. Call this if fragments are changed in the DOM
+ * after reveal.js has already initialized.
+ *
+ * @param {HTMLElement} slide
+ * @return {Array} a list of the HTML fragments that were synced
+ */
+ function syncFragments(slide) {
+
+ // Default to the current slide
+ slide = slide || currentSlide;
+
+ return sortFragments(slide.querySelectorAll('.fragment'));
+
+ }
+
+ /**
+ * Resets all vertical slides so that only the first
+ * is visible.
+ */
+ function resetVerticalSlides() {
+
+ var horizontalSlides = toArray(dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR));
+ horizontalSlides.forEach(function (horizontalSlide) {
+
+ var verticalSlides = toArray(horizontalSlide.querySelectorAll('section'));
+ verticalSlides.forEach(function (verticalSlide, y) {
+
+ if (y > 0) {
+ verticalSlide.classList.remove('present');
+ verticalSlide.classList.remove('past');
+ verticalSlide.classList.add('future');
+ verticalSlide.setAttribute('aria-hidden', 'true');
+ }
+
+ });
+
+ });
+
+ }
+
+ /**
+ * Sorts and formats all of fragments in the
+ * presentation.
+ */
+ function sortAllFragments() {
+
+ var horizontalSlides = toArray(dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR));
+ horizontalSlides.forEach(function (horizontalSlide) {
+
+ var verticalSlides = toArray(horizontalSlide.querySelectorAll('section'));
+ verticalSlides.forEach(function (verticalSlide, y) {
+
+ sortFragments(verticalSlide.querySelectorAll('.fragment'));
+
+ });
+
+ if (verticalSlides.length === 0) sortFragments(horizontalSlide.querySelectorAll('.fragment'));
+
+ });
+
+ }
+
+ /**
+ * Randomly shuffles all slides in the deck.
+ */
+ function shuffle() {
+
+ var slides = toArray(dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR));
+
+ slides.forEach(function (slide) {
+
+ // Insert this slide next to another random slide. This may
+ // cause the slide to insert before itself but that's fine.
+ dom.slides.insertBefore(slide, slides[Math.floor(Math.random() * slides.length)]);
+
+ });
+
+ }
+
+ /**
+ * Updates one dimension of slides by showing the slide
+ * with the specified index.
+ *
+ * @param {string} selector A CSS selector that will fetch
+ * the group of slides we are working with
+ * @param {number} index The index of the slide that should be
+ * shown
+ *
+ * @return {number} The index of the slide that is now shown,
+ * might differ from the passed in index if it was out of
+ * bounds.
+ */
+ function updateSlides(selector, index) {
+
+ // Select all slides and convert the NodeList result to
+ // an array
+ var slides = toArray(dom.wrapper.querySelectorAll(selector)),
+ slidesLength = slides.length;
+
+ var printMode = isPrintingPDF();
+
+ if (slidesLength) {
+
+ // Should the index loop?
+ if (config.loop) {
+ index %= slidesLength;
+
+ if (index < 0) {
+ index = slidesLength + index;
+ }
+ }
+
+ // Enforce max and minimum index bounds
+ index = Math.max(Math.min(index, slidesLength - 1), 0);
+
+ for (var i = 0; i < slidesLength; i++) {
+ var element = slides[i];
+
+ var reverse = config.rtl && !isVerticalSlide(element);
+
+ element.classList.remove('past');
+ element.classList.remove('present');
+ element.classList.remove('future');
+
+ // http://www.w3.org/html/wg/drafts/html/master/editing.html#the-hidden-attribute
+ element.setAttribute('hidden', '');
+ element.setAttribute('aria-hidden', 'true');
+
+ // If this element contains vertical slides
+ if (element.querySelector('section')) {
+ element.classList.add('stack');
+ }
+
+ // If we're printing static slides, all slides are "present"
+ if (printMode) {
+ element.classList.add('present');
+ continue;
+ }
+
+ if (i < index) {
+ // Any element previous to index is given the 'past' class
+ element.classList.add(reverse ? 'future' : 'past');
+
+ if (config.fragments) {
+ // Show all fragments in prior slides
+ toArray(element.querySelectorAll('.fragment')).forEach(function (fragment) {
+ fragment.classList.add('visible');
+ fragment.classList.remove('current-fragment');
+ });
+ }
+ }
+ else if (i > index) {
+ // Any element subsequent to index is given the 'future' class
+ element.classList.add(reverse ? 'past' : 'future');
+
+ if (config.fragments) {
+ // Hide all fragments in future slides
+ toArray(element.querySelectorAll('.fragment.visible')).forEach(function (fragment) {
+ fragment.classList.remove('visible');
+ fragment.classList.remove('current-fragment');
+ });
+ }
+ }
+ }
+
+ // Mark the current slide as present
+ slides[index].classList.add('present');
+ slides[index].removeAttribute('hidden');
+ slides[index].removeAttribute('aria-hidden');
+
+ // If this slide has a state associated with it, add it
+ // onto the current state of the deck
+ var slideState = slides[index].getAttribute('data-state');
+ if (slideState) {
+ state = state.concat(slideState.split(' '));
+ }
+
+ }
+ else {
+ // Since there are no slides we can't be anywhere beyond the
+ // zeroth index
+ index = 0;
+ }
+
+ return index;
+
+ }
+
+ /**
+ * Optimization method; hide all slides that are far away
+ * from the present slide.
+ */
+ function updateSlidesVisibility() {
+
+ // Select all slides and convert the NodeList result to
+ // an array
+ var horizontalSlides = toArray(dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR)),
+ horizontalSlidesLength = horizontalSlides.length,
+ distanceX,
+ distanceY;
+
+ if (horizontalSlidesLength && typeof indexh !== 'undefined') {
+
+ // The number of steps away from the present slide that will
+ // be visible
+ var viewDistance = isOverview() ? 10 : config.viewDistance;
+
+ // Limit view distance on weaker devices
+ if (isMobileDevice) {
+ viewDistance = isOverview() ? 6 : 2;
+ }
+
+ // All slides need to be visible when exporting to PDF
+ if (isPrintingPDF()) {
+ viewDistance = Number.MAX_VALUE;
+ }
+
+ for (var x = 0; x < horizontalSlidesLength; x++) {
+ var horizontalSlide = horizontalSlides[x];
+
+ var verticalSlides = toArray(horizontalSlide.querySelectorAll('section')),
+ verticalSlidesLength = verticalSlides.length;
+
+ // Determine how far away this slide is from the present
+ distanceX = Math.abs((indexh || 0) - x) || 0;
+
+ // If the presentation is looped, distance should measure
+ // 1 between the first and last slides
+ if (config.loop) {
+ distanceX = Math.abs(((indexh || 0) - x) % (horizontalSlidesLength - viewDistance)) || 0;
+ }
+
+ // Show the horizontal slide if it's within the view distance
+ if (distanceX < viewDistance) {
+ loadSlide(horizontalSlide);
+ }
+ else {
+ unloadSlide(horizontalSlide);
+ }
+
+ if (verticalSlidesLength) {
+
+ var oy = getPreviousVerticalIndex(horizontalSlide);
+
+ for (var y = 0; y < verticalSlidesLength; y++) {
+ var verticalSlide = verticalSlides[y];
+
+ distanceY = x === (indexh || 0) ? Math.abs((indexv || 0) - y) : Math.abs(y - oy);
+
+ if (distanceX + distanceY < viewDistance) {
+ loadSlide(verticalSlide);
+ }
+ else {
+ unloadSlide(verticalSlide);
+ }
+ }
+
+ }
+ }
+
+ // Flag if there are ANY vertical slides, anywhere in the deck
+ if (dom.wrapper.querySelectorAll('.slides>section>section').length) {
+ dom.wrapper.classList.add('has-vertical-slides');
+ }
+ else {
+ dom.wrapper.classList.remove('has-vertical-slides');
+ }
+
+ // Flag if there are ANY horizontal slides, anywhere in the deck
+ if (dom.wrapper.querySelectorAll('.slides>section').length > 1) {
+ dom.wrapper.classList.add('has-horizontal-slides');
+ }
+ else {
+ dom.wrapper.classList.remove('has-horizontal-slides');
+ }
+
+ }
+
+ }
+
+ /**
+ * Pick up notes from the current slide and display them
+ * to the viewer.
+ *
+ * @see {@link config.showNotes}
+ */
+ function updateNotes() {
+
+ if (config.showNotes && dom.speakerNotes && currentSlide && !isPrintingPDF()) {
+
+ dom.speakerNotes.innerHTML = getSlideNotes() || 'No notes on this slide. ';
+
+ }
+
+ }
+
+ /**
+ * Updates the visibility of the speaker notes sidebar that
+ * is used to share annotated slides. The notes sidebar is
+ * only visible if showNotes is true and there are notes on
+ * one or more slides in the deck.
+ */
+ function updateNotesVisibility() {
+
+ if (config.showNotes && hasNotes()) {
+ dom.wrapper.classList.add('show-notes');
+ }
+ else {
+ dom.wrapper.classList.remove('show-notes');
+ }
+
+ }
+
+ /**
+ * Checks if there are speaker notes for ANY slide in the
+ * presentation.
+ */
+ function hasNotes() {
+
+ return dom.slides.querySelectorAll('[data-notes], aside.notes').length > 0;
+
+ }
+
+ /**
+ * Updates the progress bar to reflect the current slide.
+ */
+ function updateProgress() {
+
+ // Update progress if enabled
+ if (config.progress && dom.progressbar) {
+
+ dom.progressbar.style.width = getProgress() * dom.wrapper.offsetWidth + 'px';
+
+ }
+
+ }
+
+
+ /**
+ * Updates the slide number to match the current slide.
+ */
+ function updateSlideNumber() {
+
+ // Update slide number if enabled
+ if (config.slideNumber && dom.slideNumber) {
+
+ var value;
+ var format = 'h.v';
+
+ if (typeof config.slideNumber === 'function') {
+ value = config.slideNumber();
+ }
+ else {
+ // Check if a custom number format is available
+ if (typeof config.slideNumber === 'string') {
+ format = config.slideNumber;
+ }
+
+ // If there are ONLY vertical slides in this deck, always use
+ // a flattened slide number
+ if (!/c/.test(format) && dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR).length === 1) {
+ format = 'c';
+ }
+
+ value = [];
+ switch (format) {
+ case 'c':
+ value.push(getSlidePastCount() + 1);
+ break;
+ case 'c/t':
+ value.push(getSlidePastCount() + 1, '/', getTotalSlides());
+ break;
+ case 'h/v':
+ value.push(indexh + 1);
+ if (isVerticalSlide()) value.push('/', indexv + 1);
+ break;
+ default:
+ value.push(indexh + 1);
+ if (isVerticalSlide()) value.push('.', indexv + 1);
+ }
+ }
+
+ dom.slideNumber.innerHTML = formatSlideNumber(value[0], value[1], value[2]);
+ }
+
+ }
+
+ /**
+ * Applies HTML formatting to a slide number before it's
+ * written to the DOM.
+ *
+ * @param {number} a Current slide
+ * @param {string} delimiter Character to separate slide numbers
+ * @param {(number|*)} b Total slides
+ * @return {string} HTML string fragment
+ */
+ function formatSlideNumber(a, delimiter, b) {
+
+ var url = '#' + locationHash();
+ if (typeof b === 'number' && !isNaN(b)) {
+ return '' +
+ '' + a + ' ' +
+ '' + delimiter + ' ' +
+ '' + b + ' ' +
+ ' ';
+ }
+ else {
+ return '' +
+ '' + a + ' ' +
+ ' ';
+ }
+
+ }
+
+ /**
+ * Updates the state of all control/navigation arrows.
+ */
+ function updateControls() {
+
+ var routes = availableRoutes();
+ var fragments = availableFragments();
+
+ // Remove the 'enabled' class from all directions
+ dom.controlsLeft.concat(dom.controlsRight)
+ .concat(dom.controlsUp)
+ .concat(dom.controlsDown)
+ .concat(dom.controlsPrev)
+ .concat(dom.controlsNext).forEach(function (node) {
+ node.classList.remove('enabled');
+ node.classList.remove('fragmented');
+
+ // Set 'disabled' attribute on all directions
+ node.setAttribute('disabled', 'disabled');
+ });
+
+ // Add the 'enabled' class to the available routes; remove 'disabled' attribute to enable buttons
+ if (routes.left) dom.controlsLeft.forEach(function (el) { el.classList.add('enabled'); el.removeAttribute('disabled'); });
+ if (routes.right) dom.controlsRight.forEach(function (el) { el.classList.add('enabled'); el.removeAttribute('disabled'); });
+ if (routes.up) dom.controlsUp.forEach(function (el) { el.classList.add('enabled'); el.removeAttribute('disabled'); });
+ if (routes.down) dom.controlsDown.forEach(function (el) { el.classList.add('enabled'); el.removeAttribute('disabled'); });
+
+ // Prev/next buttons
+ if (routes.left || routes.up) dom.controlsPrev.forEach(function (el) { el.classList.add('enabled'); el.removeAttribute('disabled'); });
+ if (routes.right || routes.down) dom.controlsNext.forEach(function (el) { el.classList.add('enabled'); el.removeAttribute('disabled'); });
+
+ // Highlight fragment directions
+ if (currentSlide) {
+
+ // Always apply fragment decorator to prev/next buttons
+ if (fragments.prev) dom.controlsPrev.forEach(function (el) { el.classList.add('fragmented', 'enabled'); el.removeAttribute('disabled'); });
+ if (fragments.next) dom.controlsNext.forEach(function (el) { el.classList.add('fragmented', 'enabled'); el.removeAttribute('disabled'); });
+
+ // Apply fragment decorators to directional buttons based on
+ // what slide axis they are in
+ if (isVerticalSlide(currentSlide)) {
+ if (fragments.prev) dom.controlsUp.forEach(function (el) { el.classList.add('fragmented', 'enabled'); el.removeAttribute('disabled'); });
+ if (fragments.next) dom.controlsDown.forEach(function (el) { el.classList.add('fragmented', 'enabled'); el.removeAttribute('disabled'); });
+ }
+ else {
+ if (fragments.prev) dom.controlsLeft.forEach(function (el) { el.classList.add('fragmented', 'enabled'); el.removeAttribute('disabled'); });
+ if (fragments.next) dom.controlsRight.forEach(function (el) { el.classList.add('fragmented', 'enabled'); el.removeAttribute('disabled'); });
+ }
+
+ }
+
+ if (config.controlsTutorial) {
+
+ // Highlight control arrows with an animation to ensure
+ // that the viewer knows how to navigate
+ if (!hasNavigatedDown && routes.down) {
+ dom.controlsDownArrow.classList.add('highlight');
+ }
+ else {
+ dom.controlsDownArrow.classList.remove('highlight');
+
+ if (!hasNavigatedRight && routes.right && indexv === 0) {
+ dom.controlsRightArrow.classList.add('highlight');
+ }
+ else {
+ dom.controlsRightArrow.classList.remove('highlight');
+ }
+ }
+
+ }
+
+ }
+
+ /**
+ * Updates the background elements to reflect the current
+ * slide.
+ *
+ * @param {boolean} includeAll If true, the backgrounds of
+ * all vertical slides (not just the present) will be updated.
+ */
+ function updateBackground(includeAll) {
+
+ var currentBackground = null;
+
+ // Reverse past/future classes when in RTL mode
+ var horizontalPast = config.rtl ? 'future' : 'past',
+ horizontalFuture = config.rtl ? 'past' : 'future';
+
+ // Update the classes of all backgrounds to match the
+ // states of their slides (past/present/future)
+ toArray(dom.background.childNodes).forEach(function (backgroundh, h) {
+
+ backgroundh.classList.remove('past');
+ backgroundh.classList.remove('present');
+ backgroundh.classList.remove('future');
+
+ if (h < indexh) {
+ backgroundh.classList.add(horizontalPast);
+ }
+ else if (h > indexh) {
+ backgroundh.classList.add(horizontalFuture);
+ }
+ else {
+ backgroundh.classList.add('present');
+
+ // Store a reference to the current background element
+ currentBackground = backgroundh;
+ }
+
+ if (includeAll || h === indexh) {
+ toArray(backgroundh.querySelectorAll('.slide-background')).forEach(function (backgroundv, v) {
+
+ backgroundv.classList.remove('past');
+ backgroundv.classList.remove('present');
+ backgroundv.classList.remove('future');
+
+ if (v < indexv) {
+ backgroundv.classList.add('past');
+ }
+ else if (v > indexv) {
+ backgroundv.classList.add('future');
+ }
+ else {
+ backgroundv.classList.add('present');
+
+ // Only if this is the present horizontal and vertical slide
+ if (h === indexh) currentBackground = backgroundv;
+ }
+
+ });
+ }
+
+ });
+
+ // Stop content inside of previous backgrounds
+ if (previousBackground) {
+
+ stopEmbeddedContent(previousBackground);
+
+ }
+
+ // Start content in the current background
+ if (currentBackground) {
+
+ startEmbeddedContent(currentBackground);
+
+ var currentBackgroundContent = currentBackground.querySelector('.slide-background-content');
+ if (currentBackgroundContent) {
+
+ var backgroundImageURL = currentBackgroundContent.style.backgroundImage || '';
+
+ // Restart GIFs (doesn't work in Firefox)
+ if (/\.gif/i.test(backgroundImageURL)) {
+ currentBackgroundContent.style.backgroundImage = '';
+ window.getComputedStyle(currentBackgroundContent).opacity;
+ currentBackgroundContent.style.backgroundImage = backgroundImageURL;
+ }
+
+ }
+
+ // Don't transition between identical backgrounds. This
+ // prevents unwanted flicker.
+ var previousBackgroundHash = previousBackground ? previousBackground.getAttribute('data-background-hash') : null;
+ var currentBackgroundHash = currentBackground.getAttribute('data-background-hash');
+ if (currentBackgroundHash && currentBackgroundHash === previousBackgroundHash && currentBackground !== previousBackground) {
+ dom.background.classList.add('no-transition');
+ }
+
+ previousBackground = currentBackground;
+
+ }
+
+ // If there's a background brightness flag for this slide,
+ // bubble it to the .reveal container
+ if (currentSlide) {
+ ['has-light-background', 'has-dark-background'].forEach(function (classToBubble) {
+ if (currentSlide.classList.contains(classToBubble)) {
+ dom.wrapper.classList.add(classToBubble);
+ }
+ else {
+ dom.wrapper.classList.remove(classToBubble);
+ }
+ });
+ }
+
+ // Allow the first background to apply without transition
+ setTimeout(function () {
+ dom.background.classList.remove('no-transition');
+ }, 1);
+
+ }
+
+ /**
+ * Updates the position of the parallax background based
+ * on the current slide index.
+ */
+ function updateParallax() {
+
+ if (config.parallaxBackgroundImage) {
+
+ var horizontalSlides = dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR),
+ verticalSlides = dom.wrapper.querySelectorAll(VERTICAL_SLIDES_SELECTOR);
+
+ var backgroundSize = dom.background.style.backgroundSize.split(' '),
+ backgroundWidth, backgroundHeight;
+
+ if (backgroundSize.length === 1) {
+ backgroundWidth = backgroundHeight = parseInt(backgroundSize[0], 10);
+ }
+ else {
+ backgroundWidth = parseInt(backgroundSize[0], 10);
+ backgroundHeight = parseInt(backgroundSize[1], 10);
+ }
+
+ var slideWidth = dom.background.offsetWidth,
+ horizontalSlideCount = horizontalSlides.length,
+ horizontalOffsetMultiplier,
+ horizontalOffset;
+
+ if (typeof config.parallaxBackgroundHorizontal === 'number') {
+ horizontalOffsetMultiplier = config.parallaxBackgroundHorizontal;
+ }
+ else {
+ horizontalOffsetMultiplier = horizontalSlideCount > 1 ? (backgroundWidth - slideWidth) / (horizontalSlideCount - 1) : 0;
+ }
+
+ horizontalOffset = horizontalOffsetMultiplier * indexh * -1;
+
+ var slideHeight = dom.background.offsetHeight,
+ verticalSlideCount = verticalSlides.length,
+ verticalOffsetMultiplier,
+ verticalOffset;
+
+ if (typeof config.parallaxBackgroundVertical === 'number') {
+ verticalOffsetMultiplier = config.parallaxBackgroundVertical;
+ }
+ else {
+ verticalOffsetMultiplier = (backgroundHeight - slideHeight) / (verticalSlideCount - 1);
+ }
+
+ verticalOffset = verticalSlideCount > 0 ? verticalOffsetMultiplier * indexv : 0;
+
+ dom.background.style.backgroundPosition = horizontalOffset + 'px ' + -verticalOffset + 'px';
+
+ }
+
+ }
+
+ /**
+ * Should the given element be preloaded?
+ * Decides based on local element attributes and global config.
+ *
+ * @param {HTMLElement} element
+ */
+ function shouldPreload(element) {
+
+ // Prefer an explicit global preload setting
+ var preload = config.preloadIframes;
+
+ // If no global setting is available, fall back on the element's
+ // own preload setting
+ if (typeof preload !== 'boolean') {
+ preload = element.hasAttribute('data-preload');
+ }
+
+ return preload;
+ }
+
+ /**
+ * Called when the given slide is within the configured view
+ * distance. Shows the slide element and loads any content
+ * that is set to load lazily (data-src).
+ *
+ * @param {HTMLElement} slide Slide to show
+ */
+ function loadSlide(slide, options) {
+
+ options = options || {};
+
+ // Show the slide element
+ slide.style.display = config.display;
+
+ // Media elements with data-src attributes
+ toArray(slide.querySelectorAll('img[data-src], video[data-src], audio[data-src], iframe[data-src]')).forEach(function (element) {
+ if (element.tagName !== 'IFRAME' || shouldPreload(element)) {
+ element.setAttribute('src', element.getAttribute('data-src'));
+ element.setAttribute('data-lazy-loaded', '');
+ element.removeAttribute('data-src');
+ }
+ });
+
+ // Media elements with children
+ toArray(slide.querySelectorAll('video, audio')).forEach(function (media) {
+ var sources = 0;
+
+ toArray(media.querySelectorAll('source[data-src]')).forEach(function (source) {
+ source.setAttribute('src', source.getAttribute('data-src'));
+ source.removeAttribute('data-src');
+ source.setAttribute('data-lazy-loaded', '');
+ sources += 1;
+ });
+
+ // If we rewrote sources for this video/audio element, we need
+ // to manually tell it to load from its new origin
+ if (sources > 0) {
+ media.load();
+ }
+ });
+
+
+ // Show the corresponding background element
+ var background = slide.slideBackgroundElement;
+ if (background) {
+ background.style.display = 'block';
+
+ var backgroundContent = slide.slideBackgroundContentElement;
+
+ // If the background contains media, load it
+ if (background.hasAttribute('data-loaded') === false) {
+ background.setAttribute('data-loaded', 'true');
+
+ var backgroundImage = slide.getAttribute('data-background-image'),
+ backgroundVideo = slide.getAttribute('data-background-video'),
+ backgroundVideoLoop = slide.hasAttribute('data-background-video-loop'),
+ backgroundVideoMuted = slide.hasAttribute('data-background-video-muted'),
+ backgroundIframe = slide.getAttribute('data-background-iframe');
+
+ // Images
+ if (backgroundImage) {
+ backgroundContent.style.backgroundImage = 'url(' + encodeURI(backgroundImage) + ')';
+ }
+ // Videos
+ else if (backgroundVideo && !isSpeakerNotes()) {
+ var video = document.createElement('video');
+
+ if (backgroundVideoLoop) {
+ video.setAttribute('loop', '');
+ }
+
+ if (backgroundVideoMuted) {
+ video.muted = true;
+ }
+
+ // Inline video playback works (at least in Mobile Safari) as
+ // long as the video is muted and the `playsinline` attribute is
+ // present
+ if (isMobileDevice) {
+ video.muted = true;
+ video.autoplay = true;
+ video.setAttribute('playsinline', '');
+ }
+
+ // Support comma separated lists of video sources
+ backgroundVideo.split(',').forEach(function (source) {
+ video.innerHTML += '';
+ });
+
+ backgroundContent.appendChild(video);
+ }
+ // Iframes
+ else if (backgroundIframe && options.excludeIframes !== true) {
+ var iframe = document.createElement('iframe');
+ iframe.setAttribute('allowfullscreen', '');
+ iframe.setAttribute('mozallowfullscreen', '');
+ iframe.setAttribute('webkitallowfullscreen', '');
+
+ // Only load autoplaying content when the slide is shown to
+ // avoid having it play in the background
+ if (/autoplay=(1|true|yes)/gi.test(backgroundIframe)) {
+ iframe.setAttribute('data-src', backgroundIframe);
+ }
+ else {
+ iframe.setAttribute('src', backgroundIframe);
+ }
+
+ iframe.style.width = '100%';
+ iframe.style.height = '100%';
+ iframe.style.maxHeight = '100%';
+ iframe.style.maxWidth = '100%';
+
+ backgroundContent.appendChild(iframe);
+ }
+ }
+
+ }
+
+ }
+
+ /**
+ * Unloads and hides the given slide. This is called when the
+ * slide is moved outside of the configured view distance.
+ *
+ * @param {HTMLElement} slide
+ */
+ function unloadSlide(slide) {
+
+ // Hide the slide element
+ slide.style.display = 'none';
+
+ // Hide the corresponding background element
+ var background = getSlideBackground(slide);
+ if (background) {
+ background.style.display = 'none';
+ }
+
+ // Reset lazy-loaded media elements with src attributes
+ toArray(slide.querySelectorAll('video[data-lazy-loaded][src], audio[data-lazy-loaded][src], iframe[data-lazy-loaded][src]')).forEach(function (element) {
+ element.setAttribute('data-src', element.getAttribute('src'));
+ element.removeAttribute('src');
+ });
+
+ // Reset lazy-loaded media elements with children
+ toArray(slide.querySelectorAll('video[data-lazy-loaded] source[src], audio source[src]')).forEach(function (source) {
+ source.setAttribute('data-src', source.getAttribute('src'));
+ source.removeAttribute('src');
+ });
+
+ }
+
+ /**
+ * Determine what available routes there are for navigation.
+ *
+ * @return {{left: boolean, right: boolean, up: boolean, down: boolean}}
+ */
+ function availableRoutes() {
+
+ var horizontalSlides = dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR),
+ verticalSlides = dom.wrapper.querySelectorAll(VERTICAL_SLIDES_SELECTOR);
+
+ var routes = {
+ left: indexh > 0,
+ right: indexh < horizontalSlides.length - 1,
+ up: indexv > 0,
+ down: indexv < verticalSlides.length - 1
+ };
+
+ // Looped presentations can always be navigated as long as
+ // there are slides available
+ if (config.loop) {
+ if (horizontalSlides.length > 1) {
+ routes.left = true;
+ routes.right = true;
+ }
+
+ if (verticalSlides.length > 1) {
+ routes.up = true;
+ routes.down = true;
+ }
+ }
+
+ // Reverse horizontal controls for rtl
+ if (config.rtl) {
+ var left = routes.left;
+ routes.left = routes.right;
+ routes.right = left;
+ }
+
+ return routes;
+
+ }
+
+ /**
+ * Returns an object describing the available fragment
+ * directions.
+ *
+ * @return {{prev: boolean, next: boolean}}
+ */
+ function availableFragments() {
+
+ if (currentSlide && config.fragments) {
+ var fragments = currentSlide.querySelectorAll('.fragment');
+ var hiddenFragments = currentSlide.querySelectorAll('.fragment:not(.visible)');
+
+ return {
+ prev: fragments.length - hiddenFragments.length > 0,
+ next: !!hiddenFragments.length
+ };
+ }
+ else {
+ return { prev: false, next: false };
+ }
+
+ }
+
+ /**
+ * Enforces origin-specific format rules for embedded media.
+ */
+ function formatEmbeddedContent() {
+
+ var _appendParamToIframeSource = function (sourceAttribute, sourceURL, param) {
+ toArray(dom.slides.querySelectorAll('iframe[' + sourceAttribute + '*="' + sourceURL + '"]')).forEach(function (el) {
+ var src = el.getAttribute(sourceAttribute);
+ if (src && src.indexOf(param) === -1) {
+ el.setAttribute(sourceAttribute, src + (!/\?/.test(src) ? '?' : '&') + param);
+ }
+ });
+ };
+
+ // YouTube frames must include "?enablejsapi=1"
+ _appendParamToIframeSource('src', 'youtube.com/embed/', 'enablejsapi=1');
+ _appendParamToIframeSource('data-src', 'youtube.com/embed/', 'enablejsapi=1');
+
+ // Vimeo frames must include "?api=1"
+ _appendParamToIframeSource('src', 'player.vimeo.com/', 'api=1');
+ _appendParamToIframeSource('data-src', 'player.vimeo.com/', 'api=1');
+
+ }
+
+ /**
+ * Start playback of any embedded content inside of
+ * the given element.
+ *
+ * @param {HTMLElement} element
+ */
+ function startEmbeddedContent(element) {
+
+ if (element && !isSpeakerNotes()) {
+
+ // Restart GIFs
+ toArray(element.querySelectorAll('img[src$=".gif"]')).forEach(function (el) {
+ // Setting the same unchanged source like this was confirmed
+ // to work in Chrome, FF & Safari
+ el.setAttribute('src', el.getAttribute('src'));
+ });
+
+ // HTML5 media elements
+ toArray(element.querySelectorAll('video, audio')).forEach(function (el) {
+ if (closestParent(el, '.fragment') && !closestParent(el, '.fragment.visible')) {
+ return;
+ }
+
+ // Prefer an explicit global autoplay setting
+ var autoplay = config.autoPlayMedia;
+
+ // If no global setting is available, fall back on the element's
+ // own autoplay setting
+ if (typeof autoplay !== 'boolean') {
+ autoplay = el.hasAttribute('data-autoplay') || !!closestParent(el, '.slide-background');
+ }
+
+ if (autoplay && typeof el.play === 'function') {
+
+ // If the media is ready, start playback
+ if (el.readyState > 1) {
+ startEmbeddedMedia({ target: el });
+ }
+ // Mobile devices never fire a loaded event so instead
+ // of waiting, we initiate playback
+ else if (isMobileDevice) {
+ var promise = el.play();
+
+ // If autoplay does not work, ensure that the controls are visible so
+ // that the viewer can start the media on their own
+ if (promise && typeof promise.catch === 'function' && el.controls === false) {
+ promise.catch(function () {
+ el.controls = true;
+
+ // Once the video does start playing, hide the controls again
+ el.addEventListener('play', function () {
+ el.controls = false;
+ });
+ });
+ }
+ }
+ // If the media isn't loaded, wait before playing
+ else {
+ el.removeEventListener('loadeddata', startEmbeddedMedia); // remove first to avoid dupes
+ el.addEventListener('loadeddata', startEmbeddedMedia);
+ }
+
+ }
+ });
+
+ // Normal iframes
+ toArray(element.querySelectorAll('iframe[src]')).forEach(function (el) {
+ if (closestParent(el, '.fragment') && !closestParent(el, '.fragment.visible')) {
+ return;
+ }
+
+ startEmbeddedIframe({ target: el });
+ });
+
+ // Lazy loading iframes
+ toArray(element.querySelectorAll('iframe[data-src]')).forEach(function (el) {
+ if (closestParent(el, '.fragment') && !closestParent(el, '.fragment.visible')) {
+ return;
+ }
+
+ if (el.getAttribute('src') !== el.getAttribute('data-src')) {
+ el.removeEventListener('load', startEmbeddedIframe); // remove first to avoid dupes
+ el.addEventListener('load', startEmbeddedIframe);
+ el.setAttribute('src', el.getAttribute('data-src'));
+ }
+ });
+
+ }
+
+ }
+
+ /**
+ * Starts playing an embedded video/audio element after
+ * it has finished loading.
+ *
+ * @param {object} event
+ */
+ function startEmbeddedMedia(event) {
+
+ var isAttachedToDOM = !!closestParent(event.target, 'html'),
+ isVisible = !!closestParent(event.target, '.present');
+
+ if (isAttachedToDOM && isVisible) {
+ event.target.currentTime = 0;
+ event.target.play();
+ }
+
+ event.target.removeEventListener('loadeddata', startEmbeddedMedia);
+
+ }
+
+ /**
+ * "Starts" the content of an embedded iframe using the
+ * postMessage API.
+ *
+ * @param {object} event
+ */
+ function startEmbeddedIframe(event) {
+
+ var iframe = event.target;
+
+ if (iframe && iframe.contentWindow) {
+
+ var isAttachedToDOM = !!closestParent(event.target, 'html'),
+ isVisible = !!closestParent(event.target, '.present');
+
+ if (isAttachedToDOM && isVisible) {
+
+ // Prefer an explicit global autoplay setting
+ var autoplay = config.autoPlayMedia;
+
+ // If no global setting is available, fall back on the element's
+ // own autoplay setting
+ if (typeof autoplay !== 'boolean') {
+ autoplay = iframe.hasAttribute('data-autoplay') || !!closestParent(iframe, '.slide-background');
+ }
+
+ // YouTube postMessage API
+ if (/youtube\.com\/embed\//.test(iframe.getAttribute('src')) && autoplay) {
+ iframe.contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}', '*');
+ }
+ // Vimeo postMessage API
+ else if (/player\.vimeo\.com\//.test(iframe.getAttribute('src')) && autoplay) {
+ iframe.contentWindow.postMessage('{"method":"play"}', '*');
+ }
+ // Generic postMessage API
+ else {
+ iframe.contentWindow.postMessage('slide:start', '*');
+ }
+
+ }
+
+ }
+
+ }
+
+ /**
+ * Stop playback of any embedded content inside of
+ * the targeted slide.
+ *
+ * @param {HTMLElement} element
+ */
+ function stopEmbeddedContent(element, options) {
+
+ options = extend({
+ // Defaults
+ unloadIframes: true
+ }, options || {});
+
+ if (element && element.parentNode) {
+ // HTML5 media elements
+ toArray(element.querySelectorAll('video, audio')).forEach(function (el) {
+ if (!el.hasAttribute('data-ignore') && typeof el.pause === 'function') {
+ el.setAttribute('data-paused-by-reveal', '');
+ el.pause();
+ }
+ });
+
+ // Generic postMessage API for non-lazy loaded iframes
+ toArray(element.querySelectorAll('iframe')).forEach(function (el) {
+ if (el.contentWindow) el.contentWindow.postMessage('slide:stop', '*');
+ el.removeEventListener('load', startEmbeddedIframe);
+ });
+
+ // YouTube postMessage API
+ toArray(element.querySelectorAll('iframe[src*="youtube.com/embed/"]')).forEach(function (el) {
+ if (!el.hasAttribute('data-ignore') && el.contentWindow && typeof el.contentWindow.postMessage === 'function') {
+ el.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}', '*');
+ }
+ });
+
+ // Vimeo postMessage API
+ toArray(element.querySelectorAll('iframe[src*="player.vimeo.com/"]')).forEach(function (el) {
+ if (!el.hasAttribute('data-ignore') && el.contentWindow && typeof el.contentWindow.postMessage === 'function') {
+ el.contentWindow.postMessage('{"method":"pause"}', '*');
+ }
+ });
+
+ if (options.unloadIframes === true) {
+ // Unload lazy-loaded iframes
+ toArray(element.querySelectorAll('iframe[data-src]')).forEach(function (el) {
+ // Only removing the src doesn't actually unload the frame
+ // in all browsers (Firefox) so we set it to blank first
+ el.setAttribute('src', 'about:blank');
+ el.removeAttribute('src');
+ });
+ }
+ }
+
+ }
+
+ /**
+ * Returns the number of past slides. This can be used as a global
+ * flattened index for slides.
+ *
+ * @return {number} Past slide count
+ */
+ function getSlidePastCount() {
+
+ var horizontalSlides = toArray(dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR));
+
+ // The number of past slides
+ var pastCount = 0;
+
+ // Step through all slides and count the past ones
+ mainLoop: for (var i = 0; i < horizontalSlides.length; i++) {
+
+ var horizontalSlide = horizontalSlides[i];
+ var verticalSlides = toArray(horizontalSlide.querySelectorAll('section'));
+
+ for (var j = 0; j < verticalSlides.length; j++) {
+
+ // Stop as soon as we arrive at the present
+ if (verticalSlides[j].classList.contains('present')) {
+ break mainLoop;
+ }
+
+ pastCount++;
+
+ }
+
+ // Stop as soon as we arrive at the present
+ if (horizontalSlide.classList.contains('present')) {
+ break;
+ }
+
+ // Don't count the wrapping section for vertical slides
+ if (horizontalSlide.classList.contains('stack') === false) {
+ pastCount++;
+ }
+
+ }
+
+ return pastCount;
+
+ }
+
+ /**
+ * Returns a value ranging from 0-1 that represents
+ * how far into the presentation we have navigated.
+ *
+ * @return {number}
+ */
+ function getProgress() {
+
+ // The number of past and total slides
+ var totalCount = getTotalSlides();
+ var pastCount = getSlidePastCount();
+
+ if (currentSlide) {
+
+ var allFragments = currentSlide.querySelectorAll('.fragment');
+
+ // If there are fragments in the current slide those should be
+ // accounted for in the progress.
+ if (allFragments.length > 0) {
+ var visibleFragments = currentSlide.querySelectorAll('.fragment.visible');
+
+ // This value represents how big a portion of the slide progress
+ // that is made up by its fragments (0-1)
+ var fragmentWeight = 0.9;
+
+ // Add fragment progress to the past slide count
+ pastCount += (visibleFragments.length / allFragments.length) * fragmentWeight;
+ }
+
+ }
+
+ return Math.min(pastCount / (totalCount - 1), 1);
+
+ }
+
+ /**
+ * Checks if this presentation is running inside of the
+ * speaker notes window.
+ *
+ * @return {boolean}
+ */
+ function isSpeakerNotes() {
+
+ return !!window.location.search.match(/receiver/gi);
+
+ }
+
+ /**
+ * Reads the current URL (hash) and navigates accordingly.
+ */
+ function readURL() {
+
+ var hash = window.location.hash;
+
+ // Attempt to parse the hash as either an index or name
+ var bits = hash.slice(2).split('/'),
+ name = hash.replace(/#|\//gi, '');
+
+ // If the first bit is not fully numeric and there is a name we
+ // can assume that this is a named link
+ if (!/^[0-9]*$/.test(bits[0]) && name.length) {
+ var element;
+
+ // Ensure the named link is a valid HTML ID attribute
+ try {
+ element = document.getElementById(decodeURIComponent(name));
+ }
+ catch (error) { }
+
+ // Ensure that we're not already on a slide with the same name
+ var isSameNameAsCurrentSlide = currentSlide ? currentSlide.getAttribute('id') === name : false;
+
+ if (element) {
+ // If the slide exists and is not the current slide...
+ if (!isSameNameAsCurrentSlide) {
+ // ...find the position of the named slide and navigate to it
+ var indices = Reveal.getIndices(element);
+ slide(indices.h, indices.v);
+ }
+ }
+ // If the slide doesn't exist, navigate to the current slide
+ else {
+ slide(indexh || 0, indexv || 0);
+ }
+ }
+ else {
+ var hashIndexBase = config.hashOneBasedIndex ? 1 : 0;
+
+ // Read the index components of the hash
+ var h = (parseInt(bits[0], 10) - hashIndexBase) || 0,
+ v = (parseInt(bits[1], 10) - hashIndexBase) || 0,
+ f;
+
+ if (config.fragmentInURL) {
+ f = parseInt(bits[2], 10);
+ if (isNaN(f)) {
+ f = undefined;
+ }
+ }
+
+ if (h !== indexh || v !== indexv || f !== undefined) {
+ slide(h, v, f);
+ }
+ }
+
+ }
+
+ /**
+ * Updates the page URL (hash) to reflect the current
+ * state.
+ *
+ * @param {number} delay The time in ms to wait before
+ * writing the hash
+ */
+ function writeURL(delay) {
+
+ // Make sure there's never more than one timeout running
+ clearTimeout(writeURLTimeout);
+
+ // If a delay is specified, timeout this call
+ if (typeof delay === 'number') {
+ writeURLTimeout = setTimeout(writeURL, delay);
+ }
+ else if (currentSlide) {
+ // If we're configured to push to history OR the history
+ // API is not avaialble.
+ if (config.history || !window.history) {
+ window.location.hash = locationHash();
+ }
+ // If we're configured to reflect the current slide in the
+ // URL without pushing to history.
+ else if (config.hash) {
+ window.history.replaceState(null, null, '#' + locationHash());
+ }
+ // If history and hash are both disabled, a hash may still
+ // be added to the URL by clicking on a href with a hash
+ // target. Counter this by always removing the hash.
+ else {
+ window.history.replaceState(null, null, window.location.pathname + window.location.search);
+ }
+ }
+
+ }
+ /**
+ * Retrieves the h/v location and fragment of the current,
+ * or specified, slide.
+ *
+ * @param {HTMLElement} [slide] If specified, the returned
+ * index will be for this slide rather than the currently
+ * active one
+ *
+ * @return {{h: number, v: number, f: number}}
+ */
+ function getIndices(slide) {
+
+ // By default, return the current indices
+ var h = indexh,
+ v = indexv,
+ f;
+
+ // If a slide is specified, return the indices of that slide
+ if (slide) {
+ var isVertical = isVerticalSlide(slide);
+ var slideh = isVertical ? slide.parentNode : slide;
+
+ // Select all horizontal slides
+ var horizontalSlides = toArray(dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR));
+
+ // Now that we know which the horizontal slide is, get its index
+ h = Math.max(horizontalSlides.indexOf(slideh), 0);
+
+ // Assume we're not vertical
+ v = undefined;
+
+ // If this is a vertical slide, grab the vertical index
+ if (isVertical) {
+ v = Math.max(toArray(slide.parentNode.querySelectorAll('section')).indexOf(slide), 0);
+ }
+ }
+
+ if (!slide && currentSlide) {
+ var hasFragments = currentSlide.querySelectorAll('.fragment').length > 0;
+ if (hasFragments) {
+ var currentFragment = currentSlide.querySelector('.current-fragment');
+ if (currentFragment && currentFragment.hasAttribute('data-fragment-index')) {
+ f = parseInt(currentFragment.getAttribute('data-fragment-index'), 10);
+ }
+ else {
+ f = currentSlide.querySelectorAll('.fragment.visible').length - 1;
+ }
+ }
+ }
+
+ return { h: h, v: v, f: f };
+
+ }
+
+ /**
+ * Retrieves all slides in this presentation.
+ */
+ function getSlides() {
+
+ return toArray(dom.wrapper.querySelectorAll(SLIDES_SELECTOR + ':not(.stack)'));
+
+ }
+
+ /**
+ * Returns an array of objects where each object represents the
+ * attributes on its respective slide.
+ */
+ function getSlidesAttributes() {
+
+ return getSlides().map(function (slide) {
+
+ var attributes = {};
+ for (var i = 0; i < slide.attributes.length; i++) {
+ var attribute = slide.attributes[i];
+ attributes[attribute.name] = attribute.value;
+ }
+ return attributes;
+
+ });
+
+ }
+
+ /**
+ * Retrieves the total number of slides in this presentation.
+ *
+ * @return {number}
+ */
+ function getTotalSlides() {
+
+ return getSlides().length;
+
+ }
+
+ /**
+ * Returns the slide element matching the specified index.
+ *
+ * @return {HTMLElement}
+ */
+ function getSlide(x, y) {
+
+ var horizontalSlide = dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR)[x];
+ var verticalSlides = horizontalSlide && horizontalSlide.querySelectorAll('section');
+
+ if (verticalSlides && verticalSlides.length && typeof y === 'number') {
+ return verticalSlides ? verticalSlides[y] : undefined;
+ }
+
+ return horizontalSlide;
+
+ }
+
+ /**
+ * Returns the background element for the given slide.
+ * All slides, even the ones with no background properties
+ * defined, have a background element so as long as the
+ * index is valid an element will be returned.
+ *
+ * @param {mixed} x Horizontal background index OR a slide
+ * HTML element
+ * @param {number} y Vertical background index
+ * @return {(HTMLElement[]|*)}
+ */
+ function getSlideBackground(x, y) {
+
+ var slide = typeof x === 'number' ? getSlide(x, y) : x;
+ if (slide) {
+ return slide.slideBackgroundElement;
+ }
+
+ return undefined;
+
+ }
+
+ /**
+ * Retrieves the speaker notes from a slide. Notes can be
+ * defined in two ways:
+ * 1. As a data-notes attribute on the slide
+ * 2. As an inside of the slide
+ *
+ * @param {HTMLElement} [slide=currentSlide]
+ * @return {(string|null)}
+ */
+ function getSlideNotes(slide) {
+
+ // Default to the current slide
+ slide = slide || currentSlide;
+
+ // Notes can be specified via the data-notes attribute...
+ if (slide.hasAttribute('data-notes')) {
+ return slide.getAttribute('data-notes');
+ }
+
+ // ... or using an element
+ var notesElement = slide.querySelector('aside.notes');
+ if (notesElement) {
+ return notesElement.innerHTML;
+ }
+
+ return null;
+
+ }
+
+ /**
+ * Retrieves the current state of the presentation as
+ * an object. This state can then be restored at any
+ * time.
+ *
+ * @return {{indexh: number, indexv: number, indexf: number, paused: boolean, overview: boolean}}
+ */
+ function getState() {
+
+ var indices = getIndices();
+
+ return {
+ indexh: indices.h,
+ indexv: indices.v,
+ indexf: indices.f,
+ paused: isPaused(),
+ overview: isOverview()
+ };
+
+ }
+
+ /**
+ * Restores the presentation to the given state.
+ *
+ * @param {object} state As generated by getState()
+ * @see {@link getState} generates the parameter `state`
+ */
+ function setState(state) {
+
+ if (typeof state === 'object') {
+ slide(deserialize(state.indexh), deserialize(state.indexv), deserialize(state.indexf));
+
+ var pausedFlag = deserialize(state.paused),
+ overviewFlag = deserialize(state.overview);
+
+ if (typeof pausedFlag === 'boolean' && pausedFlag !== isPaused()) {
+ togglePause(pausedFlag);
+ }
+
+ if (typeof overviewFlag === 'boolean' && overviewFlag !== isOverview()) {
+ toggleOverview(overviewFlag);
+ }
+ }
+
+ }
+
+ /**
+ * Return a sorted fragments list, ordered by an increasing
+ * "data-fragment-index" attribute.
+ *
+ * Fragments will be revealed in the order that they are returned by
+ * this function, so you can use the index attributes to control the
+ * order of fragment appearance.
+ *
+ * To maintain a sensible default fragment order, fragments are presumed
+ * to be passed in document order. This function adds a "fragment-index"
+ * attribute to each node if such an attribute is not already present,
+ * and sets that attribute to an integer value which is the position of
+ * the fragment within the fragments list.
+ *
+ * @param {object[]|*} fragments
+ * @param {boolean} grouped If true the returned array will contain
+ * nested arrays for all fragments with the same index
+ * @return {object[]} sorted Sorted array of fragments
+ */
+ function sortFragments(fragments, grouped) {
+
+ fragments = toArray(fragments);
+
+ var ordered = [],
+ unordered = [],
+ sorted = [];
+
+ // Group ordered and unordered elements
+ fragments.forEach(function (fragment, i) {
+ if (fragment.hasAttribute('data-fragment-index')) {
+ var index = parseInt(fragment.getAttribute('data-fragment-index'), 10);
+
+ if (!ordered[index]) {
+ ordered[index] = [];
+ }
+
+ ordered[index].push(fragment);
+ }
+ else {
+ unordered.push([fragment]);
+ }
+ });
+
+ // Append fragments without explicit indices in their
+ // DOM order
+ ordered = ordered.concat(unordered);
+
+ // Manually count the index up per group to ensure there
+ // are no gaps
+ var index = 0;
+
+ // Push all fragments in their sorted order to an array,
+ // this flattens the groups
+ ordered.forEach(function (group) {
+ group.forEach(function (fragment) {
+ sorted.push(fragment);
+ fragment.setAttribute('data-fragment-index', index);
+ });
+
+ index++;
+ });
+
+ return grouped === true ? ordered : sorted;
+
+ }
+
+ /**
+ * Refreshes the fragments on the current slide so that they
+ * have the appropriate classes (.visible + .current-fragment).
+ *
+ * @param {number} [index] The index of the current fragment
+ * @param {array} [fragments] Array containing all fragments
+ * in the current slide
+ *
+ * @return {{shown: array, hidden: array}}
+ */
+ function updateFragments(index, fragments) {
+
+ var changedFragments = {
+ shown: [],
+ hidden: []
+ };
+
+ if (currentSlide && config.fragments) {
+
+ fragments = fragments || sortFragments(currentSlide.querySelectorAll('.fragment'));
+
+ if (fragments.length) {
+
+ if (typeof index !== 'number') {
+ var currentFragment = sortFragments(currentSlide.querySelectorAll('.fragment.visible')).pop();
+ if (currentFragment) {
+ index = parseInt(currentFragment.getAttribute('data-fragment-index') || 0, 10);
+ }
+ }
+
+ toArray(fragments).forEach(function (el, i) {
+
+ if (el.hasAttribute('data-fragment-index')) {
+ i = parseInt(el.getAttribute('data-fragment-index'), 10);
+ }
+
+ // Visible fragments
+ if (i <= index) {
+ if (!el.classList.contains('visible')) changedFragments.shown.push(el);
+ el.classList.add('visible');
+ el.classList.remove('current-fragment');
+
+ // Announce the fragments one by one to the Screen Reader
+ dom.statusDiv.textContent = getStatusText(el);
+
+ if (i === index) {
+ el.classList.add('current-fragment');
+ startEmbeddedContent(el);
+ }
+ }
+ // Hidden fragments
+ else {
+ if (el.classList.contains('visible')) changedFragments.hidden.push(el);
+ el.classList.remove('visible');
+ el.classList.remove('current-fragment');
+ }
+
+ });
+
+ }
+
+ }
+
+ return changedFragments;
+
+ }
+
+ /**
+ * Navigate to the specified slide fragment.
+ *
+ * @param {?number} index The index of the fragment that
+ * should be shown, -1 means all are invisible
+ * @param {number} offset Integer offset to apply to the
+ * fragment index
+ *
+ * @return {boolean} true if a change was made in any
+ * fragments visibility as part of this call
+ */
+ function navigateFragment(index, offset) {
+
+ if (currentSlide && config.fragments) {
+
+ var fragments = sortFragments(currentSlide.querySelectorAll('.fragment'));
+ if (fragments.length) {
+
+ // If no index is specified, find the current
+ if (typeof index !== 'number') {
+ var lastVisibleFragment = sortFragments(currentSlide.querySelectorAll('.fragment.visible')).pop();
+
+ if (lastVisibleFragment) {
+ index = parseInt(lastVisibleFragment.getAttribute('data-fragment-index') || 0, 10);
+ }
+ else {
+ index = -1;
+ }
+ }
+
+ // If an offset is specified, apply it to the index
+ if (typeof offset === 'number') {
+ index += offset;
+ }
+
+ var changedFragments = updateFragments(index, fragments);
+
+ if (changedFragments.hidden.length) {
+ dispatchEvent('fragmenthidden', { fragment: changedFragments.hidden[0], fragments: changedFragments.hidden });
+ }
+
+ if (changedFragments.shown.length) {
+ dispatchEvent('fragmentshown', { fragment: changedFragments.shown[0], fragments: changedFragments.shown });
+ }
+
+ updateControls();
+ updateProgress();
+
+ if (config.fragmentInURL) {
+ writeURL();
+ }
+
+ return !!(changedFragments.shown.length || changedFragments.hidden.length);
+
+ }
+
+ }
+
+ return false;
+
+ }
+
+ /**
+ * Navigate to the next slide fragment.
+ *
+ * @return {boolean} true if there was a next fragment,
+ * false otherwise
+ */
+ function nextFragment() {
+
+ return navigateFragment(null, 1);
+
+ }
+
+ /**
+ * Navigate to the previous slide fragment.
+ *
+ * @return {boolean} true if there was a previous fragment,
+ * false otherwise
+ */
+ function previousFragment() {
+
+ return navigateFragment(null, -1);
+
+ }
+
+ /**
+ * Cues a new automated slide if enabled in the config.
+ */
+ function cueAutoSlide() {
+
+ cancelAutoSlide();
+
+ if (currentSlide && config.autoSlide !== false) {
+
+ var fragment = currentSlide.querySelector('.current-fragment');
+
+ // When the slide first appears there is no "current" fragment so
+ // we look for a data-autoslide timing on the first fragment
+ if (!fragment) fragment = currentSlide.querySelector('.fragment');
+
+ var fragmentAutoSlide = fragment ? fragment.getAttribute('data-autoslide') : null;
+ var parentAutoSlide = currentSlide.parentNode ? currentSlide.parentNode.getAttribute('data-autoslide') : null;
+ var slideAutoSlide = currentSlide.getAttribute('data-autoslide');
+
+ // Pick value in the following priority order:
+ // 1. Current fragment's data-autoslide
+ // 2. Current slide's data-autoslide
+ // 3. Parent slide's data-autoslide
+ // 4. Global autoSlide setting
+ if (fragmentAutoSlide) {
+ autoSlide = parseInt(fragmentAutoSlide, 10);
+ }
+ else if (slideAutoSlide) {
+ autoSlide = parseInt(slideAutoSlide, 10);
+ }
+ else if (parentAutoSlide) {
+ autoSlide = parseInt(parentAutoSlide, 10);
+ }
+ else {
+ autoSlide = config.autoSlide;
+ }
+
+ // If there are media elements with data-autoplay,
+ // automatically set the autoSlide duration to the
+ // length of that media. Not applicable if the slide
+ // is divided up into fragments.
+ // playbackRate is accounted for in the duration.
+ if (currentSlide.querySelectorAll('.fragment').length === 0) {
+ toArray(currentSlide.querySelectorAll('video, audio')).forEach(function (el) {
+ if (el.hasAttribute('data-autoplay')) {
+ if (autoSlide && (el.duration * 1000 / el.playbackRate) > autoSlide) {
+ autoSlide = (el.duration * 1000 / el.playbackRate) + 1000;
+ }
+ }
+ });
+ }
+
+ // Cue the next auto-slide if:
+ // - There is an autoSlide value
+ // - Auto-sliding isn't paused by the user
+ // - The presentation isn't paused
+ // - The overview isn't active
+ // - The presentation isn't over
+ if (autoSlide && !autoSlidePaused && !isPaused() && !isOverview() && (!Reveal.isLastSlide() || availableFragments().next || config.loop === true)) {
+ autoSlideTimeout = setTimeout(function () {
+ typeof config.autoSlideMethod === 'function' ? config.autoSlideMethod() : navigateNext();
+ cueAutoSlide();
+ }, autoSlide);
+ autoSlideStartTime = Date.now();
+ }
+
+ if (autoSlidePlayer) {
+ autoSlidePlayer.setPlaying(autoSlideTimeout !== -1);
+ }
+
+ }
+
+ }
+
+ /**
+ * Cancels any ongoing request to auto-slide.
+ */
+ function cancelAutoSlide() {
+
+ clearTimeout(autoSlideTimeout);
+ autoSlideTimeout = -1;
+
+ }
+
+ function pauseAutoSlide() {
+
+ if (autoSlide && !autoSlidePaused) {
+ autoSlidePaused = true;
+ dispatchEvent('autoslidepaused');
+ clearTimeout(autoSlideTimeout);
+
+ if (autoSlidePlayer) {
+ autoSlidePlayer.setPlaying(false);
+ }
+ }
+
+ }
+
+ function resumeAutoSlide() {
+
+ if (autoSlide && autoSlidePaused) {
+ autoSlidePaused = false;
+ dispatchEvent('autoslideresumed');
+ cueAutoSlide();
+ }
+
+ }
+
+ function navigateLeft() {
+
+ // Reverse for RTL
+ if (config.rtl) {
+ if ((isOverview() || nextFragment() === false) && availableRoutes().left) {
+ slide(indexh + 1, config.navigationMode === 'grid' ? indexv : undefined);
+ }
+ }
+ // Normal navigation
+ else if ((isOverview() || previousFragment() === false) && availableRoutes().left) {
+ slide(indexh - 1, config.navigationMode === 'grid' ? indexv : undefined);
+ }
+
+ }
+
+ function navigateRight() {
+
+ hasNavigatedRight = true;
+
+ // Reverse for RTL
+ if (config.rtl) {
+ if ((isOverview() || previousFragment() === false) && availableRoutes().right) {
+ slide(indexh - 1, config.navigationMode === 'grid' ? indexv : undefined);
+ }
+ }
+ // Normal navigation
+ else if ((isOverview() || nextFragment() === false) && availableRoutes().right) {
+ slide(indexh + 1, config.navigationMode === 'grid' ? indexv : undefined);
+ }
+
+ }
+
+ function navigateUp() {
+
+ // Prioritize hiding fragments
+ if ((isOverview() || previousFragment() === false) && availableRoutes().up) {
+ slide(indexh, indexv - 1);
+ }
+
+ }
+
+ function navigateDown() {
+
+ hasNavigatedDown = true;
+
+ // Prioritize revealing fragments
+ if ((isOverview() || nextFragment() === false) && availableRoutes().down) {
+ slide(indexh, indexv + 1);
+ }
+
+ }
+
+ /**
+ * Navigates backwards, prioritized in the following order:
+ * 1) Previous fragment
+ * 2) Previous vertical slide
+ * 3) Previous horizontal slide
+ */
+ function navigatePrev() {
+
+ // Prioritize revealing fragments
+ if (previousFragment() === false) {
+ if (availableRoutes().up) {
+ navigateUp();
+ }
+ else {
+ // Fetch the previous horizontal slide, if there is one
+ var previousSlide;
+
+ if (config.rtl) {
+ previousSlide = toArray(dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR + '.future')).pop();
+ }
+ else {
+ previousSlide = toArray(dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR + '.past')).pop();
+ }
+
+ if (previousSlide) {
+ var v = (previousSlide.querySelectorAll('section').length - 1) || undefined;
+ var h = indexh - 1;
+ slide(h, v);
+ }
+ }
+ }
+
+ }
+
+ /**
+ * The reverse of #navigatePrev().
+ */
+ function navigateNext() {
+
+ hasNavigatedRight = true;
+ hasNavigatedDown = true;
+
+ // Prioritize revealing fragments
+ if (nextFragment() === false) {
+
+ var routes = availableRoutes();
+
+ // When looping is enabled `routes.down` is always available
+ // so we need a separate check for when we've reached the
+ // end of a stack and should move horizontally
+ if (routes.down && routes.right && config.loop && Reveal.isLastVerticalSlide(currentSlide)) {
+ routes.down = false;
+ }
+
+ if (routes.down) {
+ navigateDown();
+ }
+ else if (config.rtl) {
+ navigateLeft();
+ }
+ else {
+ navigateRight();
+ }
+ }
+
+ }
+
+ /**
+ * Checks if the target element prevents the triggering of
+ * swipe navigation.
+ */
+ function isSwipePrevented(target) {
+
+ while (target && typeof target.hasAttribute === 'function') {
+ if (target.hasAttribute('data-prevent-swipe')) return true;
+ target = target.parentNode;
+ }
+
+ return false;
+
+ }
+
+
+ // --------------------------------------------------------------------//
+ // ----------------------------- EVENTS -------------------------------//
+ // --------------------------------------------------------------------//
+
+ /**
+ * Called by all event handlers that are based on user
+ * input.
+ *
+ * @param {object} [event]
+ */
+ function onUserInput(event) {
+
+ if (config.autoSlideStoppable) {
+ pauseAutoSlide();
+ }
+
+ }
+
+ /**
+ * Called whenever there is mouse input at the document level
+ * to determine if the cursor is active or not.
+ *
+ * @param {object} event
+ */
+ function onDocumentCursorActive(event) {
+
+ showCursor();
+
+ clearTimeout(cursorInactiveTimeout);
+
+ cursorInactiveTimeout = setTimeout(hideCursor, config.hideCursorTime);
+
+ }
+
+ /**
+ * Handler for the document level 'keypress' event.
+ *
+ * @param {object} event
+ */
+ function onDocumentKeyPress(event) {
+
+ // Check if the pressed key is question mark
+ if (event.shiftKey && event.charCode === 63) {
+ toggleHelp();
+ }
+
+ }
+
+ /**
+ * Handler for the document level 'keydown' event.
+ *
+ * @param {object} event
+ */
+ function onDocumentKeyDown(event) {
+
+ // If there's a condition specified and it returns false,
+ // ignore this event
+ if (typeof config.keyboardCondition === 'function' && config.keyboardCondition(event) === false) {
+ return true;
+ }
+
+ // Shorthand
+ var keyCode = event.keyCode;
+
+ // Remember if auto-sliding was paused so we can toggle it
+ var autoSlideWasPaused = autoSlidePaused;
+
+ onUserInput(event);
+
+ // Is there a focused element that could be using the keyboard?
+ var activeElementIsCE = document.activeElement && document.activeElement.contentEditable !== 'inherit';
+ var activeElementIsInput = document.activeElement && document.activeElement.tagName && /input|textarea/i.test(document.activeElement.tagName);
+ var activeElementIsNotes = document.activeElement && document.activeElement.className && /speaker-notes/i.test(document.activeElement.className);
+
+ // Whitelist specific modified + keycode combinations
+ var prevSlideShortcut = event.shiftKey && event.keyCode === 32;
+ var firstSlideShortcut = (event.metaKey || event.ctrlKey) && keyCode === 37;
+ var lastSlideShortcut = (event.metaKey || event.ctrlKey) && keyCode === 39;
+
+ // Prevent all other events when a modifier is pressed
+ var unusedModifier = !prevSlideShortcut && !firstSlideShortcut && !lastSlideShortcut &&
+ (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey);
+
+ // Disregard the event if there's a focused element or a
+ // keyboard modifier key is present
+ if (activeElementIsCE || activeElementIsInput || activeElementIsNotes || unusedModifier) return;
+
+ // While paused only allow resume keyboard events; 'b', 'v', '.'
+ var resumeKeyCodes = [66, 86, 190, 191];
+ var key;
+
+ // Custom key bindings for togglePause should be able to resume
+ if (typeof config.keyboard === 'object') {
+ for (key in config.keyboard) {
+ if (config.keyboard[key] === 'togglePause') {
+ resumeKeyCodes.push(parseInt(key, 10));
+ }
+ }
+ }
+
+ if (isPaused() && resumeKeyCodes.indexOf(keyCode) === -1) {
+ return false;
+ }
+
+ var triggered = false;
+
+ // 1. User defined key bindings
+ if (typeof config.keyboard === 'object') {
+
+ for (key in config.keyboard) {
+
+ // Check if this binding matches the pressed key
+ if (parseInt(key, 10) === keyCode) {
+
+ var value = config.keyboard[key];
+
+ // Callback function
+ if (typeof value === 'function') {
+ value.apply(null, [event]);
+ }
+ // String shortcuts to reveal.js API
+ else if (typeof value === 'string' && typeof Reveal[value] === 'function') {
+ Reveal[value].call();
+ }
+
+ triggered = true;
+
+ }
+
+ }
+
+ }
+
+ // 2. Registered custom key bindings
+ if (triggered === false) {
+
+ for (key in registeredKeyBindings) {
+
+ // Check if this binding matches the pressed key
+ if (parseInt(key, 10) === keyCode) {
+
+ var action = registeredKeyBindings[key].callback;
+
+ // Callback function
+ if (typeof action === 'function') {
+ action.apply(null, [event]);
+ }
+ // String shortcuts to reveal.js API
+ else if (typeof action === 'string' && typeof Reveal[action] === 'function') {
+ Reveal[action].call();
+ }
+
+ triggered = true;
+ }
+ }
+ }
+
+ // 3. System defined key bindings
+ if (triggered === false) {
+
+ // Assume true and try to prove false
+ triggered = true;
+
+ // P, PAGE UP
+ if (keyCode === 80 || keyCode === 33) {
+ navigatePrev();
+ }
+ // N, PAGE DOWN
+ else if (keyCode === 78 || keyCode === 34) {
+ navigateNext();
+ }
+ // H, LEFT
+ else if (keyCode === 72 || keyCode === 37) {
+ if (firstSlideShortcut) {
+ slide(0);
+ }
+ else if (!isOverview() && config.navigationMode === 'linear') {
+ navigatePrev();
+ }
+ else {
+ navigateLeft();
+ }
+ }
+ // L, RIGHT
+ else if (keyCode === 76 || keyCode === 39) {
+ if (lastSlideShortcut) {
+ slide(Number.MAX_VALUE);
+ }
+ else if (!isOverview() && config.navigationMode === 'linear') {
+ navigateNext();
+ }
+ else {
+ navigateRight();
+ }
+ }
+ // K, UP
+ else if (keyCode === 75 || keyCode === 38) {
+ if (!isOverview() && config.navigationMode === 'linear') {
+ navigatePrev();
+ }
+ else {
+ navigateUp();
+ }
+ }
+ // J, DOWN
+ else if (keyCode === 74 || keyCode === 40) {
+ if (!isOverview() && config.navigationMode === 'linear') {
+ navigateNext();
+ }
+ else {
+ navigateDown();
+ }
+ }
+ // HOME
+ else if (keyCode === 36) {
+ slide(0);
+ }
+ // END
+ else if (keyCode === 35) {
+ slide(Number.MAX_VALUE);
+ }
+ // SPACE
+ else if (keyCode === 32) {
+ if (isOverview()) {
+ deactivateOverview();
+ }
+ if (event.shiftKey) {
+ navigatePrev();
+ }
+ else {
+ navigateNext();
+ }
+ }
+ // TWO-SPOT, SEMICOLON, B, V, PERIOD, LOGITECH PRESENTER TOOLS "BLACK SCREEN" BUTTON
+ else if (keyCode === 58 || keyCode === 59 || keyCode === 66 || keyCode === 86 || keyCode === 190 || keyCode === 191) {
+ togglePause();
+ }
+ // F
+ else if (keyCode === 70) {
+ enterFullscreen();
+ }
+ // A
+ else if (keyCode === 65) {
+ if (config.autoSlideStoppable) {
+ toggleAutoSlide(autoSlideWasPaused);
+ }
+ }
+ else {
+ triggered = false;
+ }
+
+ }
+
+ // If the input resulted in a triggered action we should prevent
+ // the browsers default behavior
+ if (triggered) {
+ event.preventDefault && event.preventDefault();
+ }
+ // ESC or O key
+ else if ((keyCode === 27 || keyCode === 79) && features.transforms3d) {
+ if (dom.overlay) {
+ closeOverlay();
+ }
+ else {
+ toggleOverview();
+ }
+
+ event.preventDefault && event.preventDefault();
+ }
+
+ // If auto-sliding is enabled we need to cue up
+ // another timeout
+ cueAutoSlide();
+
+ }
+
+ /**
+ * Handler for the 'touchstart' event, enables support for
+ * swipe and pinch gestures.
+ *
+ * @param {object} event
+ */
+ function onTouchStart(event) {
+
+ if (isSwipePrevented(event.target)) return true;
+
+ touch.startX = event.touches[0].clientX;
+ touch.startY = event.touches[0].clientY;
+ touch.startCount = event.touches.length;
+
+ }
+
+ /**
+ * Handler for the 'touchmove' event.
+ *
+ * @param {object} event
+ */
+ function onTouchMove(event) {
+
+ if (isSwipePrevented(event.target)) return true;
+
+ // Each touch should only trigger one action
+ if (!touch.captured) {
+ onUserInput(event);
+
+ var currentX = event.touches[0].clientX;
+ var currentY = event.touches[0].clientY;
+
+ // There was only one touch point, look for a swipe
+ if (event.touches.length === 1 && touch.startCount !== 2) {
+
+ var deltaX = currentX - touch.startX,
+ deltaY = currentY - touch.startY;
+
+ if (deltaX > touch.threshold && Math.abs(deltaX) > Math.abs(deltaY)) {
+ touch.captured = true;
+ navigateLeft();
+ }
+ else if (deltaX < -touch.threshold && Math.abs(deltaX) > Math.abs(deltaY)) {
+ touch.captured = true;
+ navigateRight();
+ }
+ else if (deltaY > touch.threshold) {
+ touch.captured = true;
+ navigateUp();
+ }
+ else if (deltaY < -touch.threshold) {
+ touch.captured = true;
+ navigateDown();
+ }
+
+ // If we're embedded, only block touch events if they have
+ // triggered an action
+ if (config.embedded) {
+ if (touch.captured || isVerticalSlide(currentSlide)) {
+ event.preventDefault();
+ }
+ }
+ // Not embedded? Block them all to avoid needless tossing
+ // around of the viewport in iOS
+ else {
+ event.preventDefault();
+ }
+
+ }
+ }
+ // There's a bug with swiping on some Android devices unless
+ // the default action is always prevented
+ else if (UA.match(/android/gi)) {
+ event.preventDefault();
+ }
+
+ }
+
+ /**
+ * Handler for the 'touchend' event.
+ *
+ * @param {object} event
+ */
+ function onTouchEnd(event) {
+
+ touch.captured = false;
+
+ }
+
+ /**
+ * Convert pointer down to touch start.
+ *
+ * @param {object} event
+ */
+ function onPointerDown(event) {
+
+ if (event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === "touch") {
+ event.touches = [{ clientX: event.clientX, clientY: event.clientY }];
+ onTouchStart(event);
+ }
+
+ }
+
+ /**
+ * Convert pointer move to touch move.
+ *
+ * @param {object} event
+ */
+ function onPointerMove(event) {
+
+ if (event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === "touch") {
+ event.touches = [{ clientX: event.clientX, clientY: event.clientY }];
+ onTouchMove(event);
+ }
+
+ }
+
+ /**
+ * Convert pointer up to touch end.
+ *
+ * @param {object} event
+ */
+ function onPointerUp(event) {
+
+ if (event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === "touch") {
+ event.touches = [{ clientX: event.clientX, clientY: event.clientY }];
+ onTouchEnd(event);
+ }
+
+ }
+
+ /**
+ * Handles mouse wheel scrolling, throttled to avoid skipping
+ * multiple slides.
+ *
+ * @param {object} event
+ */
+ function onDocumentMouseScroll(event) {
+
+ if (Date.now() - lastMouseWheelStep > 600) {
+
+ lastMouseWheelStep = Date.now();
+
+ var delta = event.detail || -event.wheelDelta;
+ if (delta > 0) {
+ navigateNext();
+ }
+ else if (delta < 0) {
+ navigatePrev();
+ }
+
+ }
+
+ }
+
+ /**
+ * Clicking on the progress bar results in a navigation to the
+ * closest approximate horizontal slide using this equation:
+ *
+ * ( clickX / presentationWidth ) * numberOfSlides
+ *
+ * @param {object} event
+ */
+ function onProgressClicked(event) {
+
+ onUserInput(event);
+
+ event.preventDefault();
+
+ var slidesTotal = toArray(dom.wrapper.querySelectorAll(HORIZONTAL_SLIDES_SELECTOR)).length;
+ var slideIndex = Math.floor((event.clientX / dom.wrapper.offsetWidth) * slidesTotal);
+
+ if (config.rtl) {
+ slideIndex = slidesTotal - slideIndex;
+ }
+
+ slide(slideIndex);
+
+ }
+
+ /**
+ * Event handler for navigation control buttons.
+ */
+ function onNavigateLeftClicked(event) { event.preventDefault(); onUserInput(); config.navigationMode === 'linear' ? navigatePrev() : navigateLeft(); }
+ function onNavigateRightClicked(event) { event.preventDefault(); onUserInput(); config.navigationMode === 'linear' ? navigateNext() : navigateRight(); }
+ function onNavigateUpClicked(event) { event.preventDefault(); onUserInput(); navigateUp(); }
+ function onNavigateDownClicked(event) { event.preventDefault(); onUserInput(); navigateDown(); }
+ function onNavigatePrevClicked(event) { event.preventDefault(); onUserInput(); navigatePrev(); }
+ function onNavigateNextClicked(event) { event.preventDefault(); onUserInput(); navigateNext(); }
+
+ /**
+ * Handler for the window level 'hashchange' event.
+ *
+ * @param {object} [event]
+ */
+ function onWindowHashChange(event) {
+
+ readURL();
+
+ }
+
+ /**
+ * Handler for the window level 'resize' event.
+ *
+ * @param {object} [event]
+ */
+ function onWindowResize(event) {
+
+ layout();
+
+ }
+
+ /**
+ * Handle for the window level 'visibilitychange' event.
+ *
+ * @param {object} [event]
+ */
+ function onPageVisibilityChange(event) {
+
+ var isHidden = document.webkitHidden ||
+ document.msHidden ||
+ document.hidden;
+
+ // If, after clicking a link or similar and we're coming back,
+ // focus the document.body to ensure we can use keyboard shortcuts
+ if (isHidden === false && document.activeElement !== document.body) {
+ // Not all elements support .blur() - SVGs among them.
+ if (typeof document.activeElement.blur === 'function') {
+ document.activeElement.blur();
+ }
+ document.body.focus();
+ }
+
+ }
+
+ /**
+ * Invoked when a slide is and we're in the overview.
+ *
+ * @param {object} event
+ */
+ function onOverviewSlideClicked(event) {
+
+ // TODO There's a bug here where the event listeners are not
+ // removed after deactivating the overview.
+ if (eventsAreBound && isOverview()) {
+ event.preventDefault();
+
+ var element = event.target;
+
+ while (element && !element.nodeName.match(/section/gi)) {
+ element = element.parentNode;
+ }
+
+ if (element && !element.classList.contains('disabled')) {
+
+ deactivateOverview();
+
+ if (element.nodeName.match(/section/gi)) {
+ var h = parseInt(element.getAttribute('data-index-h'), 10),
+ v = parseInt(element.getAttribute('data-index-v'), 10);
+
+ slide(h, v);
+ }
+
+ }
+ }
+
+ }
+
+ /**
+ * Handles clicks on links that are set to preview in the
+ * iframe overlay.
+ *
+ * @param {object} event
+ */
+ function onPreviewLinkClicked(event) {
+
+ if (event.currentTarget && event.currentTarget.hasAttribute('href')) {
+ var url = event.currentTarget.getAttribute('href');
+ if (url) {
+ showPreview(url);
+ event.preventDefault();
+ }
+ }
+
+ }
+
+ /**
+ * Handles click on the auto-sliding controls element.
+ *
+ * @param {object} [event]
+ */
+ function onAutoSlidePlayerClick(event) {
+
+ // Replay
+ if (Reveal.isLastSlide() && config.loop === false) {
+ slide(0, 0);
+ resumeAutoSlide();
+ }
+ // Resume
+ else if (autoSlidePaused) {
+ resumeAutoSlide();
+ }
+ // Pause
+ else {
+ pauseAutoSlide();
+ }
+
+ }
+
+
+ // --------------------------------------------------------------------//
+ // ------------------------ PLAYBACK COMPONENT ------------------------//
+ // --------------------------------------------------------------------//
+
+
+ /**
+ * Constructor for the playback component, which displays
+ * play/pause/progress controls.
+ *
+ * @param {HTMLElement} container The component will append
+ * itself to this
+ * @param {function} progressCheck A method which will be
+ * called frequently to get the current progress on a range
+ * of 0-1
+ */
+ function Playback(container, progressCheck) {
+
+ // Cosmetics
+ this.diameter = 100;
+ this.diameter2 = this.diameter / 2;
+ this.thickness = 6;
+
+ // Flags if we are currently playing
+ this.playing = false;
+
+ // Current progress on a 0-1 range
+ this.progress = 0;
+
+ // Used to loop the animation smoothly
+ this.progressOffset = 1;
+
+ this.container = container;
+ this.progressCheck = progressCheck;
+
+ this.canvas = document.createElement('canvas');
+ this.canvas.className = 'playback';
+ this.canvas.width = this.diameter;
+ this.canvas.height = this.diameter;
+ this.canvas.style.width = this.diameter2 + 'px';
+ this.canvas.style.height = this.diameter2 + 'px';
+ this.context = this.canvas.getContext('2d');
+
+ this.container.appendChild(this.canvas);
+
+ this.render();
+
+ }
+
+ /**
+ * @param value
+ */
+ Playback.prototype.setPlaying = function (value) {
+
+ var wasPlaying = this.playing;
+
+ this.playing = value;
+
+ // Start repainting if we weren't already
+ if (!wasPlaying && this.playing) {
+ this.animate();
+ }
+ else {
+ this.render();
+ }
+
+ };
+
+ Playback.prototype.animate = function () {
+
+ var progressBefore = this.progress;
+
+ this.progress = this.progressCheck();
+
+ // When we loop, offset the progress so that it eases
+ // smoothly rather than immediately resetting
+ if (progressBefore > 0.8 && this.progress < 0.2) {
+ this.progressOffset = this.progress;
+ }
+
+ this.render();
+
+ if (this.playing) {
+ features.requestAnimationFrameMethod.call(window, this.animate.bind(this));
+ }
+
+ };
+
+ /**
+ * Renders the current progress and playback state.
+ */
+ Playback.prototype.render = function () {
+
+ var progress = this.playing ? this.progress : 0,
+ radius = (this.diameter2) - this.thickness,
+ x = this.diameter2,
+ y = this.diameter2,
+ iconSize = 28;
+
+ // Ease towards 1
+ this.progressOffset += (1 - this.progressOffset) * 0.1;
+
+ var endAngle = (- Math.PI / 2) + (progress * (Math.PI * 2));
+ var startAngle = (- Math.PI / 2) + (this.progressOffset * (Math.PI * 2));
+
+ this.context.save();
+ this.context.clearRect(0, 0, this.diameter, this.diameter);
+
+ // Solid background color
+ this.context.beginPath();
+ this.context.arc(x, y, radius + 4, 0, Math.PI * 2, false);
+ this.context.fillStyle = 'rgba( 0, 0, 0, 0.4 )';
+ this.context.fill();
+
+ // Draw progress track
+ this.context.beginPath();
+ this.context.arc(x, y, radius, 0, Math.PI * 2, false);
+ this.context.lineWidth = this.thickness;
+ this.context.strokeStyle = 'rgba( 255, 255, 255, 0.2 )';
+ this.context.stroke();
+
+ if (this.playing) {
+ // Draw progress on top of track
+ this.context.beginPath();
+ this.context.arc(x, y, radius, startAngle, endAngle, false);
+ this.context.lineWidth = this.thickness;
+ this.context.strokeStyle = '#fff';
+ this.context.stroke();
+ }
+
+ this.context.translate(x - (iconSize / 2), y - (iconSize / 2));
+
+ // Draw play/pause icons
+ if (this.playing) {
+ this.context.fillStyle = '#fff';
+ this.context.fillRect(0, 0, iconSize / 2 - 4, iconSize);
+ this.context.fillRect(iconSize / 2 + 4, 0, iconSize / 2 - 4, iconSize);
+ }
+ else {
+ this.context.beginPath();
+ this.context.translate(4, 0);
+ this.context.moveTo(0, 0);
+ this.context.lineTo(iconSize - 4, iconSize / 2);
+ this.context.lineTo(0, iconSize);
+ this.context.fillStyle = '#fff';
+ this.context.fill();
+ }
+
+ this.context.restore();
+
+ };
+
+ Playback.prototype.on = function (type, listener) {
+ this.canvas.addEventListener(type, listener, false);
+ };
+
+ Playback.prototype.off = function (type, listener) {
+ this.canvas.removeEventListener(type, listener, false);
+ };
+
+ Playback.prototype.destroy = function () {
+
+ this.playing = false;
+
+ if (this.canvas.parentNode) {
+ this.container.removeChild(this.canvas);
+ }
+
+ };
+
+
+ // --------------------------------------------------------------------//
+ // ------------------------------- API --------------------------------//
+ // --------------------------------------------------------------------//
+
+
+ Reveal = {
+ VERSION: VERSION,
+
+ initialize: initialize,
+ configure: configure,
+
+ sync: sync,
+ syncSlide: syncSlide,
+ syncFragments: syncFragments,
+
+ // Navigation methods
+ slide: slide,
+ left: navigateLeft,
+ right: navigateRight,
+ up: navigateUp,
+ down: navigateDown,
+ prev: navigatePrev,
+ next: navigateNext,
+
+ // Fragment methods
+ navigateFragment: navigateFragment,
+ prevFragment: previousFragment,
+ nextFragment: nextFragment,
+
+ // Deprecated aliases
+ navigateTo: slide,
+ navigateLeft: navigateLeft,
+ navigateRight: navigateRight,
+ navigateUp: navigateUp,
+ navigateDown: navigateDown,
+ navigatePrev: navigatePrev,
+ navigateNext: navigateNext,
+
+ // Forces an update in slide layout
+ layout: layout,
+
+ // Randomizes the order of slides
+ shuffle: shuffle,
+
+ // Returns an object with the available routes as booleans (left/right/top/bottom)
+ availableRoutes: availableRoutes,
+
+ // Returns an object with the available fragments as booleans (prev/next)
+ availableFragments: availableFragments,
+
+ // Toggles a help overlay with keyboard shortcuts
+ toggleHelp: toggleHelp,
+
+ // Toggles the overview mode on/off
+ toggleOverview: toggleOverview,
+
+ // Toggles the "black screen" mode on/off
+ togglePause: togglePause,
+
+ // Toggles the auto slide mode on/off
+ toggleAutoSlide: toggleAutoSlide,
+
+ // State checks
+ isOverview: isOverview,
+ isPaused: isPaused,
+ isAutoSliding: isAutoSliding,
+ isSpeakerNotes: isSpeakerNotes,
+
+ // Slide preloading
+ loadSlide: loadSlide,
+ unloadSlide: unloadSlide,
+
+ // Adds or removes all internal event listeners (such as keyboard)
+ addEventListeners: addEventListeners,
+ removeEventListeners: removeEventListeners,
+
+ // Facility for persisting and restoring the presentation state
+ getState: getState,
+ setState: setState,
+
+ // Presentation progress
+ getSlidePastCount: getSlidePastCount,
+
+ // Presentation progress on range of 0-1
+ getProgress: getProgress,
+
+ // Returns the indices of the current, or specified, slide
+ getIndices: getIndices,
+
+ // Returns an Array of all slides
+ getSlides: getSlides,
+
+ // Returns an Array of objects representing the attributes on
+ // the slides
+ getSlidesAttributes: getSlidesAttributes,
+
+ // Returns the total number of slides
+ getTotalSlides: getTotalSlides,
+
+ // Returns the slide element at the specified index
+ getSlide: getSlide,
+
+ // Returns the slide background element at the specified index
+ getSlideBackground: getSlideBackground,
+
+ // Returns the speaker notes string for a slide, or null
+ getSlideNotes: getSlideNotes,
+
+ // Returns the previous slide element, may be null
+ getPreviousSlide: function () {
+ return previousSlide;
+ },
+
+ // Returns the current slide element
+ getCurrentSlide: function () {
+ return currentSlide;
+ },
+
+ // Returns the current scale of the presentation content
+ getScale: function () {
+ return scale;
+ },
+
+ // Returns the current configuration object
+ getConfig: function () {
+ return config;
+ },
+
+ // Helper method, retrieves query string as a key/value hash
+ getQueryHash: function () {
+ var query = {};
+
+ location.search.replace(/[A-Z0-9]+?=([\w\.%-]*)/gi, function (a) {
+ query[a.split('=').shift()] = a.split('=').pop();
+ });
+
+ // Basic deserialization
+ for (var i in query) {
+ var value = query[i];
+
+ query[i] = deserialize(unescape(value));
+ }
+
+ return query;
+ },
+
+ // Returns the top-level DOM element
+ getRevealElement: function () {
+ return dom.wrapper || document.querySelector('.reveal');
+ },
+
+ // Returns a hash with all registered plugins
+ getPlugins: function () {
+ return plugins;
+ },
+
+ // Returns true if we're currently on the first slide
+ isFirstSlide: function () {
+ return (indexh === 0 && indexv === 0);
+ },
+
+ // Returns true if we're currently on the last slide
+ isLastSlide: function () {
+ if (currentSlide) {
+ // Does this slide have a next sibling?
+ if (currentSlide.nextElementSibling) return false;
+
+ // If it's vertical, does its parent have a next sibling?
+ if (isVerticalSlide(currentSlide) && currentSlide.parentNode.nextElementSibling) return false;
+
+ return true;
+ }
+
+ return false;
+ },
+
+ // Returns true if we're on the last slide in the current
+ // vertical stack
+ isLastVerticalSlide: function () {
+ if (currentSlide && isVerticalSlide(currentSlide)) {
+ // Does this slide have a next sibling?
+ if (currentSlide.nextElementSibling) return false;
+
+ return true;
+ }
+
+ return false;
+ },
+
+ // Checks if reveal.js has been loaded and is ready for use
+ isReady: function () {
+ return loaded;
+ },
+
+ // Forward event binding to the reveal DOM element
+ addEventListener: function (type, listener, useCapture) {
+ if ('addEventListener' in window) {
+ Reveal.getRevealElement().addEventListener(type, listener, useCapture);
+ }
+ },
+ removeEventListener: function (type, listener, useCapture) {
+ if ('addEventListener' in window) {
+ Reveal.getRevealElement().removeEventListener(type, listener, useCapture);
+ }
+ },
+
+ // Adds/removes a custom key binding
+ addKeyBinding: addKeyBinding,
+ removeKeyBinding: removeKeyBinding,
+
+ // API for registering and retrieving plugins
+ registerPlugin: registerPlugin,
+ hasPlugin: hasPlugin,
+ getPlugin: getPlugin,
+
+ // Programmatically triggers a keyboard event
+ triggerKey: function (keyCode) {
+ onDocumentKeyDown({ keyCode: keyCode });
+ },
+
+ // Registers a new shortcut to include in the help overlay
+ registerKeyboardShortcut: function (key, value) {
+ keyboardShortcuts[key] = value;
+ }
+ };
+
+ return Reveal;
+
+}));
\ No newline at end of file
diff --git a/assets/sass/abstracts/_functions.scss b/assets/sass/abstracts/_functions.scss
index e9af098..4d781d9 100644
--- a/assets/sass/abstracts/_functions.scss
+++ b/assets/sass/abstracts/_functions.scss
@@ -7,11 +7,6 @@
}
}
-@function ls($name) {
- $value: map_get($ls, $name);
- @return $value / 1000 * 1em;
-}
-
@function themed($key) {
@return map-get($theme-map, $key);
}
diff --git a/assets/sass/abstracts/_variables.scss b/assets/sass/abstracts/_variables.scss
index 9dc50e9..f497a71 100644
--- a/assets/sass/abstracts/_variables.scss
+++ b/assets/sass/abstracts/_variables.scss
@@ -5,13 +5,8 @@ $code-font-stack: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "
$title-font: 'Montserrat', sans-serif;
$content-font: 'Merriweather', serif;
-$z-indexes: ("modal", "navbar", "dropdown", "header", "grid", "search-btn", "search", "content", "footer", "taxo", "toc", "gallery-mask");
-$ls: (
- base: -10,
- heading: 10,
- button: 5,
- slogan: -100
-);
+$z-indexes: ("modal", "navbar", "dropdown", "header", "clipboard", "grid", "search-btn", "search", "content", "footer", "taxo", "toc", "gallery-mask");
+
$breakpoints: (
'xs': 0,
'sm': 769px,
diff --git a/assets/sass/base/_animation.scss b/assets/sass/base/_animation.scss
index 1ebcd20..d284984 100644
--- a/assets/sass/base/_animation.scss
+++ b/assets/sass/base/_animation.scss
@@ -1,68 +1,5 @@
// -- Slide Animations -- //
-// Slide Out Top from Center
-@include keyframes(slide-out-up) {
- 0% {
- transform: translate(0,0);
- opacity: 0;
- }
-
- 100% {
- transform: translate(0,-12%);
- opacity: 1;
- }
-}
-
-@include keyframes(slide-out-down) {
- 0% {
- transform: translate(0,0);
- opacity: 0;
- }
-
- 100% {
- transform: translate(0,12%);
- opacity: 1;
- }
-}
-
-// Slide Out Left from Center
-@include keyframes(slide-out-left) {
- 0% {
- transform: translate(0,0);
- opacity: 0;
- }
-
- 100% {
- transform: translate(-12%,0);
- opacity: 1;
- }
-}
-
-// Slide out Right from Center
-@include keyframes(slide-out-right) {
- 0% {
- transform: translate(0,0);
- opacity: 0;
- }
-
- 100% {
- transform: translate(12%,0);
- opacity: 1;
- }
-}
-
-@include keyframes(slide-in-up) {
- 0% {
- transform: translate(0,12%);
- opacity: 0;
- }
-
- 100% {
- transform: translate(0,0);
- opacity: 1;
- }
-}
-
@include keyframes(slide-in-down) {
0% {
transform: translate(0,-12%);
@@ -87,45 +24,3 @@
opacity: 1;
}
}
-
-// Slide in Right to Center
-@include keyframes(slide-in-right) {
- 0% {
- transform: translate(12%,0);
- opacity: 0;
- }
-
- 100% {
- transform: translate(0,0);
- opacity: 1;
- }
-}
-
-@include keyframes(slide-in-down-2) {
- 0% {
- transform: translate(0,-6%);
- opacity: 0;
- }
-
- 100% {
- transform: translate(0,0);
- opacity: 1;
- }
-}
-
-@include keyframes(slide-in-down-3) {
- 0% {
- transform: translate(0,-2%);
- opacity: 0;
- }
-
- 100% {
- transform: translate(0,0);
- opacity: 1;
- }
-}
-
-@include keyframes(fade-in) {
- from { opacity: 0; }
- to { opacity: 1; }
-}
\ No newline at end of file
diff --git a/assets/sass/base/_helpers.scss b/assets/sass/base/_helpers.scss
index 81e58f5..b099d3a 100644
--- a/assets/sass/base/_helpers.scss
+++ b/assets/sass/base/_helpers.scss
@@ -1,22 +1,9 @@
-// -----------------------------------------------------------------------------
-// This file contains CSS helper classes.
-// -----------------------------------------------------------------------------
-
-/**
- * Clear inner floats
- */
.clearfix::after {
clear: both;
content: '';
display: table;
}
-/**
- * Main content containers
- * 1. Make the container full-width with a maximum width
- * 2. Center it in the viewport
- * 3. Leave some space on the edges, especially valuable on small screens
- */
.container {
max-width: 100%; /* 1 */
margin-left: auto; /* 2 */
@@ -29,34 +16,6 @@
}
}
-/**
- * Hide text while making it readable for screen readers
- * 1. Needed in WebKit-based browsers because of an implementation bug;
- * See: https://code.google.com/p/chromium/issues/detail?id=457146
- */
-.hide-text {
- overflow: hidden;
- padding: 0; /* 1 */
- text-indent: 101%;
- white-space: nowrap;
-}
-
-/**
- * Hide element while making it readable for screen readers
- * Shamelessly borrowed from HTML5Boilerplate:
- * https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css#L119-L133
- */
-.visually-hidden {
- border: 0;
- clip: rect(0 0 0 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- width: 1px;
-}
-
.hide {
display: none;
}
diff --git a/assets/sass/components/_bio.scss b/assets/sass/components/_bio.scss
index 11edc0d..ca6f0ca 100644
--- a/assets/sass/components/_bio.scss
+++ b/assets/sass/components/_bio.scss
@@ -3,7 +3,7 @@
@include justify-content(center);
@include align-items(flex-start);
@include flex-direction(column);
- @include animation('slide-in-down-2 .5s .2s 1 ease both');
+ @include animation('slide-in-down .5s .2s 1 ease both');
width: 100%;
font-family: $title-font;
@@ -79,10 +79,6 @@
}
}
- &__hr {
- margin: 1rem 0;
- }
-
&-hr {
border-radius: 0.5rem;
}
diff --git a/assets/sass/components/_features.scss b/assets/sass/components/_features.scss
deleted file mode 100644
index dc85fac..0000000
--- a/assets/sass/components/_features.scss
+++ /dev/null
@@ -1,92 +0,0 @@
-.features {
- max-width: $grid-max-width;
- height: 200px;
- font-family: 'Montserrat', sans-serif;
- padding: 0.5rem;
- margin: 0 4rem;
-
- @include flexbox();
- @include flex-direction(column);
- @include align-items(center);
- @include justify-content(center);
- @include respond-to(sm) {
- margin: 0 1rem;
- }
-
- &__title {
- font-size: 32px;
- font-weight: 700;
- }
-
- ul {
- @include flexbox();
- @include flex-wrap(wrap);
- padding: 1.5rem 0.5rem;
- }
-
- li {
- padding: 0.125rem 0.5rem;
- width: 30%;
- font-size: 16px;
- @include truncate(350px);
-
- &::before {
- content: '✔️';
- z-index: 1;
- }
- }
-}
-
-.features-text {
- max-width: $grid-max-width;
- height: 200px;
- padding: 0.5rem;
- margin: 0 4rem;
- text-align: center;
- font-family: 'Montserrat', sans-serif;
- font-weight: 700;
-
- @include flexbox();
- @include flex-direction(column);
- @include align-items(center);
- @include justify-content(center);
-
- &__item {
- margin-bottom: 1.5rem;
- }
-}
-
-.features-intro {
- max-width: $grid-max-width;
- height: 200px;
- padding: 0.5rem;
- margin: 0 4rem;
- text-align: center;
- font-family: 'Montserrat', sans-serif;
-
- @include flexbox();
- @include flex-direction(column);
- @include align-items(center);
- @include justify-content(center);
- @include respond-to(sm) {
- margin: 1rem;
- }
-
- &__title {
- font-weight: 700;
- line-height: 1;
- margin-bottom: 1.5rem;
- }
-
- &__links {
- a {
- padding: 0.4rem;
- font-size: 16px;
- }
- }
-
- &__release-info {
- margin-top: 0.25rem;
- font-size: 11px;
- }
-}
\ No newline at end of file
diff --git a/assets/sass/components/_hr.scss b/assets/sass/components/_hr.scss
index 034e0ca..e5be78f 100644
--- a/assets/sass/components/_hr.scss
+++ b/assets/sass/components/_hr.scss
@@ -41,20 +41,4 @@
border-style: solid;
border-image: url('data:image/svg+xml, ') 0 0 100% repeat;
}
-}
-
-.hr-vertical-lines {
- height: 5px;
- @include themify($themes) {
- $color: themed('hr-color');
- color: $color;
- }
- background-image: linear-gradient(
- 90deg,
- currentColor,
- currentColor 33.33%,
- transparent 33.33%,
- transparent 100%);
- background-size: 3px 100%;
- width: 75%;
}
\ No newline at end of file
diff --git a/assets/sass/components/_pagination.scss b/assets/sass/components/_pagination.scss
index f56cacc..7784c5a 100644
--- a/assets/sass/components/_pagination.scss
+++ b/assets/sass/components/_pagination.scss
@@ -111,58 +111,3 @@
}
}
}
-
-.pagination-list {
- border-radius: 0.25rem;
- margin: 2rem 1rem;
- padding: 0.5rem 0;
-
- @include flexbox();
- @include align-items(center);
- @include justify-content(space-around);
- @include themify($themes) {
- background-color: themed('pagination-background-color');
- }
-
- &__item {
- font-size: 0.95rem;
- text-decoration: none !important;
-
- @include flexbox();
- @include align-items(center);
-
- &--number {
- @include themify($themes) {
- color: themed('pagination-number-color');
- }
- }
-
- .enable {
- padding: 0 0.125rem;
- @include themify($themes) {
- color: themed('pagination-link-color');
- }
- @include on-event {
- cursor: pointer;
- border-radius: 0.1rem;
- text-decoration: underline;
- @include themify($themes) {
- color: themed('link-hover');
- }
- }
- }
-
- .disabled {
- cursor: default;
- @include themify($themes) {
- color: themed('pagination-disabled-color');
- }
- }
- }
-
- .icon {
- @include flexbox();
- @include align-items(stretch);
- @include justify-content(center);
- }
-}
\ No newline at end of file
diff --git a/assets/sass/components/_photoswipe.scss b/assets/sass/components/_photoswipe.scss
deleted file mode 100644
index fc5f895..0000000
--- a/assets/sass/components/_photoswipe.scss
+++ /dev/null
@@ -1,44 +0,0 @@
-a.pswp__share--facebook:hover {
- background: #727072;
- color: #FCFCFA;
-}
-
-a.pswp__share--facebook:hover:before {
- border-bottom-color: #727072;
-}
-
-a.pswp__share--twitter:hover {
- background: #727072;
- color: #FCFCFA;
-}
-
-a.pswp__share--pinterest:hover {
- background: #727072;
- color: #FCFCFA;
-}
-
-a.pswp__share--download:hover {
- background: #727072;
- color: #FCFCFA;
-}
-
-.pswp__share-tooltip {
- background: #403E41;
-}
-
-.pswp__share-tooltip a {
- color: #FCFCFA;
-}
-
-.pswp__share-tooltip a:hover {
- text-decoration: none;
- color: #FCFCFA;
-}
-
-a.pswp__share--facebook:before {
- border-bottom-color: #403E41;
-}
-
-.pswp__bg {
- background: rgba(0, 0, 0, 0.8);
-}
\ No newline at end of file
diff --git a/assets/sass/components/_search.scss b/assets/sass/components/_search.scss
index daa5329..e4f5726 100644
--- a/assets/sass/components/_search.scss
+++ b/assets/sass/components/_search.scss
@@ -15,7 +15,6 @@
.icon {
padding: 0.25rem;
@include flexbox();
- @include align-items(center);
@include themify($themes) {
color: themed("search-icon-color");
}
diff --git a/assets/sass/components/_summary.scss b/assets/sass/components/_summary.scss
index 6710743..ec5ab02 100644
--- a/assets/sass/components/_summary.scss
+++ b/assets/sass/components/_summary.scss
@@ -1,10 +1,4 @@
.summary-card {
- // @for $i from 1 through 8 {
- // &:nth-child(#{$i}) {
- // @include animation('slide-in-down-2 .3s #{$i * .15}s 1 ease both');
- // }
- // }
-
margin: 0 0.5rem;
padding: 0 0.5rem;
@@ -82,12 +76,6 @@
}
.summary-classic {
- // @for $i from 1 through 13 {
- // &:nth-child(#{$i}) {
- // @include animation('slide-in-left .25s #{$i * .15}s 1 ease both');
- // }
- // }
-
padding: 0 1rem;
.title {
font-size: 24px;
@@ -161,12 +149,6 @@
}
.summary-compact {
- // @for $i from 1 through 20 {
- // &:nth-child(#{$i}) {
- // @include animation('slide-in-left .25s #{$i * .15}s 1 ease both');
- // }
- // }
-
padding: 0 1rem;
&__flexbox {
@include flexbox();
diff --git a/assets/sass/layout/_footer.scss b/assets/sass/layout/_footer.scss
index 0dfeb5b..296f9b3 100644
--- a/assets/sass/layout/_footer.scss
+++ b/assets/sass/layout/_footer.scss
@@ -7,24 +7,14 @@
background-color: themed('footer-background-color');
}
- &__wrapper {
- @include flexbox();
- @include flex-direction(row);
- @include respond-to(sm) {
- @include flex-direction(column);
- }
- }
-
&__social {
padding: 0.5rem 0;
position: -webkit-sticky;
position: sticky;
bottom: 70px;
-
- @include flex-grow(1);
+
@include flexbox();
- @include align-items(center);
- @include flex-direction(column);
+ @include justify-content(center);
}
&__poweredby {
diff --git a/assets/sass/layout/_navigation.scss b/assets/sass/layout/_navigation.scss
index cdd1f28..12401c0 100644
--- a/assets/sass/layout/_navigation.scss
+++ b/assets/sass/layout/_navigation.scss
@@ -128,6 +128,7 @@
&__title {
height: $grid_navbar_height;
font-size: 1.5rem;
+
@include flexbox();
@include align-items(center);
@@ -158,7 +159,7 @@
padding: 0.5rem;
font-size: 1rem;
font-family: $title-font;
- font-weight: 400;
+ font-weight: 700;
@include flexbox();
@include align-items(center);
@@ -203,6 +204,7 @@
@include themify($themes) {
border-top: 1px solid themed('navbar-border-bottom-color');
background-color: themed('navbar-mobile-background-color');
+ border-bottom: 1px solid themed('navbar-border-bottom-color');
}
}
}
@@ -246,6 +248,7 @@
text-decoration: none;
display: block;
font-size: 1rem;
+ font-weight: 700;
@include themify($themes) {
color: themed("dropdown-item-color");
diff --git a/assets/sass/main.scss b/assets/sass/main.scss
index ea21418..dbb3cfd 100644
--- a/assets/sass/main.scss
+++ b/assets/sass/main.scss
@@ -40,13 +40,11 @@ $chroma_theme: {{ $scr.Get "chroma_theme" }};
@import 'components/breadcrumb';
@import 'components/diagram';
@import 'components/expand';
-@import 'components/features';
@import 'components/gtt';
@import 'components/hr';
@import 'components/math';
@import 'components/notice';
@import 'components/pagination';
-@import 'components/photoswipe';
@import 'components/related';
@import 'components/search';
@import 'components/summary';
@@ -64,4 +62,5 @@ $chroma_theme: {{ $scr.Get "chroma_theme" }};
@import 'pages/gallery';
@import 'pages/list';
@import 'pages/single';
-@import 'pages/terms';
\ No newline at end of file
+@import 'pages/terms';
+@import 'pages/presentation';
\ No newline at end of file
diff --git a/assets/sass/pages/_presentation.scss b/assets/sass/pages/_presentation.scss
new file mode 100644
index 0000000..e3eb31d
--- /dev/null
+++ b/assets/sass/pages/_presentation.scss
@@ -0,0 +1,43 @@
+.pt {
+ padding: 1rem;
+
+ &__row {
+ display: flex;
+ flex-wrap: wrap;
+ }
+
+ /* Create four equal columns that sits next to each other */
+ &__column {
+ flex: 50%;
+ padding: 0 0.5rem;
+ }
+
+ &__column .pt__card {
+ margin: 0.5rem 0;
+ vertical-align: middle;
+ background-color: blue;
+ }
+
+ /* Responsive layout - makes a two column-layout instead of four columns */
+ @media screen and (max-width: 4000px) {
+ &__column {
+ flex: 50%;
+ max-width: 33.33%;
+ }
+ }
+
+ @media screen and (max-width: 900px) {
+ &__column {
+ flex: 50%;
+ max-width: 50%;
+ }
+ }
+
+ /* Responsive layout - makes the two columns stack on top of each other instead of next to each other */
+ @media screen and (max-width: 500px) {
+ &__column {
+ flex: 100%;
+ max-width: 100%;
+ }
+ }
+}
\ No newline at end of file
diff --git a/assets/sass/pages/_single.scss b/assets/sass/pages/_single.scss
index 8bb25f0..239367c 100644
--- a/assets/sass/pages/_single.scss
+++ b/assets/sass/pages/_single.scss
@@ -33,14 +33,8 @@
}
&__contents {
- //@include animation('slide-in-down-3 .3s .7s 1 ease both');
&--gallery {
overflow: hidden;
- //@include animation('slide-in-down-3 .6s .0s 1 ease both');
- }
-
- &--about {
- //@include animation('slide-in-down-3 .6s .2s 1 ease both');
}
&>p>a {
@@ -129,7 +123,7 @@
right: 4px;
top: 5px;
border-radius: 2px;
- z-index: 1;
+ z-index: z('clipboard');
@include transition(all, 0.2s, ease);
}
@@ -158,7 +152,7 @@
right: 4px;
top: 5px;
border-radius: 2px;
- z-index: 1;
+ z-index: z('clipboard');
@include transition(all, 0.2s, ease);
}
.chroma .copy-to-clipboard:hover {
@@ -169,7 +163,7 @@
right: 4px;
top: 5px;
border-radius: 2px;
- z-index: 1;
+ z-index: z('clipboard');
@include transition(all, 0.2s, ease);
}
.language-code .copy-to-clipboard:hover {
@@ -419,20 +413,6 @@ pre:not(.chroma) {
pre {
margin: 0;
padding: 34px 4px 6px;
- // &::after {
- // content: 'Code';
- // position: absolute;
- // top: 0;
- // right: 0;
- // left: 0;
- // height: 31px;
- // padding: 5px 7px;
- // font-size: $code-font-size;
- // font-family: $title-font;
- // font-weight: bold;
- // border-top-left-radius: 0.34rem;
- // border-top-right-radius: 0.34rem;
- // }
}
}
}
diff --git a/assets/sass/prism/_dark.scss b/assets/sass/prism/_dark.scss
deleted file mode 100644
index df975b5..0000000
--- a/assets/sass/prism/_dark.scss
+++ /dev/null
@@ -1,293 +0,0 @@
-@mixin theme-dark {
- code[class*="language-"],
- pre[class*="language-"] {
- color: #d6deeb;
- font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
- text-align: left;
- white-space: pre;
- word-spacing: normal;
- word-break: normal;
- word-wrap: normal;
- min-width: 100%;
- font-size: $code-font-size;
- line-height: 1.5em;
-
- -moz-tab-size: 4;
- -o-tab-size: 4;
- tab-size: 4;
-
- -webkit-hyphens: none;
- -moz-hyphens: none;
- -ms-hyphens: none;
- hyphens: none;
- }
-
- pre[class*="language-"]::-moz-selection,
- pre[class*="language-"] ::-moz-selection,
- code[class*="language-"]::-moz-selection,
- code[class*="language-"] ::-moz-selection {
- text-shadow: none;
- background: rgba(29, 59, 83, 0.99);
- }
-
- pre[class*="language-"]::selection,
- pre[class*="language-"] ::selection,
- code[class*="language-"]::selection,
- code[class*="language-"] ::selection {
- text-shadow: none;
- background: rgba(29, 59, 83, 0.99);
- }
-
- @media print {
- code[class*="language-"],
- pre[class*="language-"] {
- text-shadow: none;
- }
- }
-
- .token.comment,
- .token.prolog,
- .token.cdata {
- color: rgb(99, 119, 119);
- font-style: italic;
- }
-
- .token.punctuation {
- color: rgb(199, 146, 234);
- }
-
- .namespace {
- color: rgb(178, 204, 214);
- }
-
- .token.deleted {
- color: rgba(239, 83, 80, 0.56);
- font-style: italic;
- }
-
- .token.symbol,
- .token.property {
- color: rgb(130, 170, 255);
- }
-
- .token.tag,
- .token.operator,
- .token.keyword {
- color: #ffa7c4;
- }
-
- .token.boolean {
- color: rgb(240, 98, 146);
- }
-
- .token.number {
- color: rgb(247, 140, 108);
- }
-
- .token.constant,
- .token.function,
- .token.builtin,
- .token.char {
- color: rgb(130, 170, 255);
- }
-
- .token.selector,
- .token.doctype {
- color: rgb(199, 146, 234);
- font-style: italic;
- }
-
- .token.attr-name,
- .token.inserted {
- color: rgb(173, 219, 103);
- font-style: italic;
- }
-
- .token.string,
- .token.url,
- .token.entity,
- .language-css .token.string,
- .style .token.string {
- color: rgb(173, 219, 103);
- }
-
- .token.class-name,
- .token.atrule,
- .token.attr-value {
- color: #ffa7c4;
- }
-
- .token.regex,
- .token.important,
- .token.variable {
- color: rgb(214, 222, 235);
- }
-
- .token.important,
- .token.bold {
- font-weight: bold;
- }
-
- .token.italic {
- font-style: italic;
- }
-
- .langague-cpp .token.string {
- color: #8be9fd;
- }
-
- .langague-c .token.string {
- color: #8be9fd;
- }
-
- .language-css .token.selector {
- color: rgba(80, 250, 123, 1);
- }
-
- .language-css .token.property {
- color: rgba(255, 184, 108, 1);
- }
-
- .language-java span.token.class-name {
- color: #8be9fd;
- }
-
- .language-java .token.class-name {
- color: #8be9fd;
- }
-
- .language-markup .token.attr-value {
- color: rgba(102, 217, 239, 1);
- }
-
- .language-markup .token.tag {
- color: rgba(80, 250, 123, 1);
- }
-
- .language-objectivec .token.property {
- color: #66d9ef;
- }
-
- .language-objectivec .token.string {
- color: #50fa7b;
- }
-
- .language-php .token.boolean {
- color: #8be9fd;
- }
-
- .language-php .token.function {
- color: #ff79c6;
- }
-
- .language-php .token.keyword {
- color: #66d9ef;
- }
-
- .language-ruby .token.symbol {
- color: #8be9fd;
- }
-
- .language-ruby .token.class-name {
- color: #cfcfc2;
- }
-
- pre.line-numbers {
- position: relative;
- padding-left: 3.8em;
- counter-reset: linenumber;
- }
-
- pre.line-numbers > code {
- position: relative;
- white-space: inherit;
- }
-
- .line-numbers .line-numbers-rows {
- position: absolute;
- pointer-events: none;
- top: 0;
- left: -3.8em;
- width: 3em;
- /* works for line-numbers below 1000 lines */
- letter-spacing: -1px;
- border-right: 1px solid #999;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- }
-
- .line-numbers-rows > span {
- pointer-events: none;
- display: block;
- counter-increment: linenumber;
- }
-
- .line-numbers-rows > span:before {
- content: counter(linenumber);
- color: #999;
- display: block;
- padding-right: 0.8em;
- text-align: right;
- }
-
- div.code-toolbar {
- position: relative;
- }
-
- div.code-toolbar > .toolbar {
- position: absolute;
- top: 0.3em;
- right: 0.2em;
- transition: opacity 0.3s ease-in-out;
- opacity: 0;
- }
-
- div.code-toolbar:hover > .toolbar {
- opacity: 1;
- }
-
- div.code-toolbar > .toolbar .toolbar-item {
- display: inline-block;
- padding-right: 20px;
- }
-
- div.code-toolbar > .toolbar a {
- cursor: pointer;
- }
-
- div.code-toolbar > .toolbar button {
- background: none;
- border: 0;
- color: inherit;
- font: inherit;
- line-height: normal;
- overflow: visible;
- padding: 0;
- -webkit-user-select: none;
- /* for button */
- -moz-user-select: none;
- -ms-user-select: none;
- }
-
- div.code-toolbar > .toolbar a,
- div.code-toolbar > .toolbar button,
- div.code-toolbar > .toolbar span {
- color: #ccc;
- padding: 0.5em;
- background: rgba(98, 114, 164, 1);
- border-radius: 0.5em;
- }
-
- div.code-toolbar > .toolbar a:hover,
- div.code-toolbar > .toolbar a:focus,
- div.code-toolbar > .toolbar button:hover,
- div.code-toolbar > .toolbar button:focus,
- div.code-toolbar > .toolbar span:hover,
- div.code-toolbar > .toolbar span:focus {
- color: inherit;
- text-decoration: none;
- background-color: var(--verde);
- }
-}
\ No newline at end of file
diff --git a/assets/sass/prism/_dracula.scss b/assets/sass/prism/_dracula.scss
deleted file mode 100644
index f49dec0..0000000
--- a/assets/sass/prism/_dracula.scss
+++ /dev/null
@@ -1,410 +0,0 @@
-/* PrismJS 1.14.0
-http://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+abap+actionscript+ada+apacheconf+apl+applescript+c+arff+asciidoc+asm6502+aspnet+autohotkey+autoit+bash+basic+batch+bison+brainfuck+bro+cpp+csharp+arduino+coffeescript+clojure+ruby+csp+css-extras+d+dart+diff+django+docker+eiffel+elixir+elm+markup-templating+erlang+fsharp+flow+fortran+gedcom+gherkin+git+glsl+go+graphql+groovy+haml+handlebars+haskell+haxe+http+hpkp+hsts+ichigojam+icon+inform7+ini+io+j+java+jolie+json+julia+keyman+kotlin+latex+less+liquid+lisp+livescript+lolcode+lua+makefile+markdown+erb+matlab+mel+mizar+monkey+n4js+nasm+nginx+nim+nix+nsis+objectivec+ocaml+opencl+oz+parigp+parser+pascal+perl+php+php-extras+sql+powershell+processing+prolog+properties+protobuf+pug+puppet+pure+python+q+qore+r+jsx+typescript+renpy+reason+rest+rip+roboconf+crystal+rust+sas+sass+scss+scala+scheme+smalltalk+smarty+plsql+soy+stylus+swift+tcl+textile+twig+tsx+vbnet+velocity+verilog+vhdl+vim+visual-basic+wasm+wiki+xeora+xojo+yaml&plugins=line-numbers+toolbar+show-language */
-/**
- * prism.js default theme for JavaScript, CSS and HTML
- * Based on dabblet (http://dabblet.com)
- * @author Lea Verou
- */
-
-/*
-* Dracula Theme for Prism.JS
-*
-* @author Gustavo Costa
-* e-mail: gusbemacbe@gmail.com
-*
-* @contributor Jon Leopard
-* e-mail: jonlprd@gmail.com
-*
-* @license MIT 2016-2018
-*/
-@mixin theme-dracula {
- pre::-webkit-scrollbar {
- width: 14px;
- }
-
- pre::-webkit-scrollbar-track {
- background-color: #6272a4;
- border-radius: 0px;
- }
-
- pre::-webkit-scrollbar-thumb {
- background-color: #bd93f9;
- border-radius: 0px;
- }
-
- code[class*="language-"],
- pre[class*="language-"] {
- color: #ccc;
- background: rgb(40, 41, 54);
- text-shadow: none;
- font-family: PT Mono, Consolas, Monaco, "Andale Mono", "Ubuntu Mono",
- monospace;
- text-align: left;
- white-space: pre;
- word-spacing: normal;
- word-break: normal;
- word-wrap: normal;
- line-height: 1.5;
-
- -moz-tab-size: 4;
- -o-tab-size: 4;
- tab-size: 4;
-
- -webkit-hyphens: none;
- -moz-hyphens: none;
- -ms-hyphens: none;
- hyphens: none;
- }
-
- pre[class*="language-"]::-moz-selection,
- pre[class*="language-"] ::-moz-selection,
- code[class*="language-"]::-moz-selection,
- code[class*="language-"] ::-moz-selection {
- text-shadow: none;
- background-color: #5a5f80;
- }
-
- pre[class*="language-"]::selection,
- pre[class*="language-"] ::selection,
- code[class*="language-"]::selection,
- code[class*="language-"] ::selection {
- text-shadow: none;
- background-color: #5a5f80;
- }
-
- @media print {
- code[class*="language-"],
- pre[class*="language-"] {
- text-shadow: none;
- }
- }
-
- /* Code blocks */
- pre[class*="language-"] {
- background: rgba(40, 41, 54, 1) !important;
- border-radius: 0.5em;
- padding: 1em;
- margin: 0.5em 0;
- overflow: auto;
- height: auto;
- }
-
- :not(pre) > code[class*="language-"],
- pre[class*="language-"] {
- background: rgba(40, 41, 54, 1);
- }
-
- /* Inline code */
- :not(pre) > code[class*="language-"] {
- padding: 4px 7px;
- border-radius: 0.3em;
- white-space: normal;
- }
-
- .limit-300
- {
- height: 300px !important;
- }
-
- .limit-400
- {
- height: 400px !important;
- }
-
- .limit-500
- {
- height: 500px !important;
- }
-
- .limit-600
- {
- height: 600px !important;
- }
-
- .limit-700
- {
- height: 700px !important;
- }
-
- .limit-800
- {
- height: 800px !important;
- }
-
- .token.comment {
- color: rgba(98, 114, 164, 1);
- }
-
- .token.prolog {
- color: rgba(207, 207, 194, 1);
- }
-
- .token.tag {
- color: rgba(220, 104, 170, 1);
- }
-
- .token.entity {
- color: rgba(139, 233, 253, 1);
- }
-
- .token.atrule {
- color: rgba(98, 239, 117, 1);
- }
-
- .token.url {
- color: rgba(102, 217, 239, 1);
- }
-
- .token.selector {
- color: rgba(207, 207, 194, 1);
- }
-
- .token.string {
- color: rgba(241, 250, 140, 1);
- }
-
- .token.property {
- color: rgba(255, 184, 108, 1);
- }
-
- .token.important {
- color: rgba(255, 121, 198, 1);
- font-weight: bold;
- }
-
- .token.punctuation {
- color: rgba(230, 219, 116, 1);
- }
-
- .token.number {
- color: rgba(189, 147, 249, 1);
- }
-
- .token.function {
- color: rgba(80, 250, 123, 1);
- }
-
- .token.class-name {
- color: rgba(255, 184, 108, 1);
- }
-
- .token.keyword {
- color: rgba(255, 121, 198, 1);
- }
-
- .token.boolean {
- color: rgba(255, 184, 108, 1);
- }
-
- .token.operator {
- color: rgba(139, 233, 253, 1);
- }
-
- .token.char {
- color: rgba(255, 135, 157, 1);
- }
-
- .token.regex {
- color: rgba(80, 250, 123, 1);
- }
-
- .token.variable {
- color: rgba(80, 250, 123, 1);
- }
-
- .token.constant {
- color: rgba(255, 184, 108, 1);
- }
-
- .token.symbol {
- color: rgba(255, 184, 108, 1);
- }
-
- .token.builtin {
- color: rgba(255, 121, 198, 1);
- }
-
- .token.attr-value {
- color: #7ec699;
- }
-
- .token.deleted {
- color: #e2777a;
- }
-
- .token.namespace {
- color: #e2777a;
- }
-
- .token.bold {
- font-weight: bold;
- }
-
- .token.italic {
- font-style: italic;
- }
-
- .token {
- color: #ff79c6;
- }
-
- .language-cpp .token.string {
- color: #8be9fd;
- }
-
- .language-c .token.string {
- color: #8be9fd;
- }
-
- .language-css .token.selector {
- color: rgba(80, 250, 123, 1);
- }
-
- .language-css .token.property {
- color: rgba(255, 184, 108, 1);
- }
-
- .language-java span.token.class-name {
- color: #8be9fd;
- }
-
- .language-java .token.class-name {
- color: #8be9fd;
- }
-
- .language-markup .token.attr-value {
- color: rgba(102, 217, 239, 1);
- }
-
- .language-markup .token.tag {
- color: rgba(80, 250, 123, 1);
- }
-
- .language-objectivec .token.property {
- color: #66d9ef;
- }
-
- .language-objectivec .token.string {
- color: #50fa7b;
- }
-
- .language-php .token.boolean {
- color: #8be9fd;
- }
-
- .language-php .token.function {
- color: #ff79c6;
- }
-
- .language-php .token.keyword {
- color: #66d9ef;
- }
-
- .language-ruby .token.symbol {
- color: #8be9fd;
- }
-
- .language-ruby .token.class-name {
- color: #cfcfc2;
- }
-
- pre.line-numbers {
- position: relative;
- padding-left: 3.8em;
- counter-reset: linenumber;
- }
-
- pre.line-numbers > code {
- position: relative;
- white-space: inherit;
- }
-
- .line-numbers .line-numbers-rows {
- position: absolute;
- pointer-events: none;
- top: 0;
- font-size: 100%;
- left: -3.8em;
- width: 3em; /* works for line-numbers below 1000 lines */
- letter-spacing: -1px;
- border-right: 1px solid #999;
-
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- }
-
- .line-numbers-rows > span {
- pointer-events: none;
- display: block;
- counter-increment: linenumber;
- }
-
- .line-numbers-rows > span:before {
- content: counter(linenumber);
- color: #999;
- display: block;
- padding-right: 0.8em;
- text-align: right;
- }
-
- div.code-toolbar {
- position: relative;
- }
-
- div.code-toolbar > .toolbar {
- position: absolute;
- top: 0.3em;
- right: 0.2em;
- transition: opacity 0.3s ease-in-out;
- opacity: 0;
- }
-
- div.code-toolbar:hover > .toolbar {
- opacity: 1;
- }
-
- div.code-toolbar > .toolbar .toolbar-item {
- display: inline-block;
- padding-right: 20px;
- }
-
- div.code-toolbar > .toolbar a {
- cursor: pointer;
- }
-
- div.code-toolbar > .toolbar button {
- background: none;
- border: 0;
- color: inherit;
- font: inherit;
- line-height: normal;
- overflow: visible;
- padding: 0;
- -webkit-user-select: none; /* for button */
- -moz-user-select: none;
- -ms-user-select: none;
- }
-
- div.code-toolbar > .toolbar a,
- div.code-toolbar > .toolbar button,
- div.code-toolbar > .toolbar span {
- color: #ccc;
- font-size: 0.8em;
- padding: 0.5em;
- background: rgba(98, 114, 164, 1);
- border-radius: 0.5em;
- }
-
- div.code-toolbar > .toolbar a:hover,
- div.code-toolbar > .toolbar a:focus,
- div.code-toolbar > .toolbar button:hover,
- div.code-toolbar > .toolbar button:focus,
- div.code-toolbar > .toolbar span:hover,
- div.code-toolbar > .toolbar span:focus {
- color: inherit;
- text-decoration: none;
- background-color: var(--verde);
- }
-}
\ No newline at end of file
diff --git a/assets/sass/prism/_hacker.scss b/assets/sass/prism/_hacker.scss
deleted file mode 100644
index 44d7227..0000000
--- a/assets/sass/prism/_hacker.scss
+++ /dev/null
@@ -1,210 +0,0 @@
-@mixin theme-hacker {
- code[class*="language-"],
- pre[class*="language-"] {
- text-align: left;
- white-space: pre;
- word-spacing: normal;
- word-break: normal;
- word-wrap: normal;
- color: #fafafa;
- font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
- font-size: $code-font-size;
- line-height: 1.5em;
-
- -moz-tab-size: 4;
- -o-tab-size: 4;
- tab-size: 4;
-
- -webkit-hyphens: none;
- -moz-hyphens: none;
- -ms-hyphens: none;
- hyphens: none;
- }
-
- code[class*="language-"]::-moz-selection,
- pre[class*="language-"]::-moz-selection,
- code[class*="language-"] ::-moz-selection,
- pre[class*="language-"] ::-moz-selection {
- background: #363636;
- }
-
- code[class*="language-"]::selection,
- pre[class*="language-"]::selection,
- code[class*="language-"] ::selection,
- pre[class*="language-"] ::selection {
- background: #363636;
- }
-
- :not(pre) > code[class*="language-"] {
- white-space: normal;
- border-radius: 0.2em;
- padding: 0.1em;
- }
-
- pre[class*="language-"] {
- overflow: auto;
- position: relative;
- margin: 0.5em 0;
- padding: 1.25em 1em;
- }
-
- .language-css > code,
- .language-sass > code,
- .language-scss > code {
- color: #fd9170;
- }
-
- [class*="language-"] .namespace {
- opacity: 0.7;
- }
-
- .token.atrule {
- color: #1fff2a;
- }
-
- .token.attr-name {
- color: #ffcb6b;
- }
-
- .token.attr-value {
- color: #fff59d;
- }
-
- .token.attribute {
- color: #fff59d;
- }
-
- .token.boolean {
- color: #1fff2a;
- }
-
- .token.builtin {
- color: #ffcb6b;
- }
-
- .token.cdata {
- color: #80cbc4;
- }
-
- .token.char {
- color: #80cbc4;
- }
-
- .token.class {
- color: #ffcb6b;
- }
-
- .token.class-name {
- color: #fafafa;
- }
-
- .token.comment {
- color: #616161;
- }
-
- .token.constant {
- color: #1fff2a;
- }
-
- .token.deleted {
- color: #ff6666;
- }
-
- .token.doctype {
- color: #616161;
- }
-
- .token.entity {
- color: #ff6666;
- }
-
- .token.function {
- color: #1fff2a;
- }
-
- .token.hexcode {
- color: #fafafa;
- }
-
- .token.id {
- color: #1fff2a;
- font-weight: bold;
- }
-
- .token.important {
- color: #1fff2a;
- font-weight: bold;
- }
-
- .token.inserted {
- color: #80cbc4;
- }
-
- .token.keyword {
- color: #ff80ab;
- }
-
- .token.number {
- color: #b388ff;
- }
-
- .token.operator {
- color: #89ddff;
- }
-
- .token.prolog {
- color: #616161;
- }
-
- .token.property {
- color: #80cbc4;
- }
-
- .token.pseudo-class {
- color: #fff59d;
- }
-
- .token.pseudo-element {
- color: #fff59d;
- }
-
- .token.punctuation {
- color: #b3e9ff;
- }
-
- .token.regex {
- color: #fafafa;
- }
-
- .token.selector {
- color: #ff6666;
- }
-
- .token.string {
- color: #fff59d;
- }
-
- .token.symbol {
- color: #1fff2a;
- }
-
- .token.tag {
- color: #1fff2a;
- }
-
- .token.unit {
- color: #fd9170;
- }
-
- .token.url {
- color: #ff6666;
- }
-
- .token.variable {
- color: #ff6666;
- }
-
- .token.interpolation {
- color: #fafafa;
- }
-}
\ No newline at end of file
diff --git a/assets/sass/prism/_light.scss b/assets/sass/prism/_light.scss
deleted file mode 100644
index f215f56..0000000
--- a/assets/sass/prism/_light.scss
+++ /dev/null
@@ -1,175 +0,0 @@
- /*
-Name: Duotone Light
-Author: Simurai, adapted from DuoTone themes for Atom (http://simurai.com/projects/2016/01/01/duotone-themes)
-Conversion: Bram de Haan (http://atelierbram.github.io/Base2Tone-prism/output/prism/prism-base2tone-morning-light.css)
-Generated with Base16 Builder (https://github.com/base16-builder/base16-builder)
-*/
-@mixin theme-light {
- code[class*="language-"],
- pre[class*="language-"] {
- font-family: Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace;
- font-size: $code-font-size;
- direction: ltr;
- text-align: left;
- white-space: pre;
- word-spacing: normal;
- word-break: normal;
- line-height: 1.5em;
-
- -moz-tab-size: 4;
- -o-tab-size: 4;
- tab-size: 4;
-
- -webkit-hyphens: none;
- -moz-hyphens: none;
- -ms-hyphens: none;
- hyphens: none;
- color: #728fcb;
- @include themify($themes) {
- background: themed('content-pre-background-color');
- }
- }
-
- pre > code[class*="language-"] {
- font-size: 1em;
- }
-
- pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
- code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
- text-shadow: none;
- color: #FF6188;
- }
-
- pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
- code[class*="language-"]::selection, code[class*="language-"] ::selection {
- text-shadow: none;
- background: rgba(255,97,137,0.2);
- color: #FF6188;
- }
-
- /* Code blocks */
- pre[class*="language-"] {
- padding: 1em;
- margin: .5em 0;
- overflow: auto;
- }
-
- /* Inline code */
- :not(pre) > code[class*="language-"] {
- padding: .1em;
- border-radius: .3em;
- }
-
- .token.comment,
- .token.prolog,
- .token.doctype,
- .token.cdata {
- color: #b6ad9a;
- }
-
- .token.punctuation {
- color: #b6ad9a;
- }
-
- .token.namespace {
- opacity: .7;
- }
-
- .token.tag,
- .token.operator,
- .token.number {
- color: #063289;
- }
-
- .token.property,
- .token.function {
- color: #b29762;
- }
-
- .token.tag-id,
- .token.selector,
- .token.atrule-id {
- color: #2d2006;
- }
-
- code.language-javascript,
- .token.attr-name {
- color: #896724;
- }
-
- code.language-css,
- code.language-scss,
- .token.boolean,
- .token.string,
- .token.entity,
- .token.url,
- .language-css .token.string,
- .language-scss .token.string,
- .style .token.string,
- .token.attr-value,
- .token.keyword,
- .token.control,
- .token.directive,
- .token.unit,
- .token.statement,
- .token.regex,
- .token.atrule {
- color: #728fcb;
- }
-
- .token.placeholder,
- .token.variable {
- color: #93abdc;
- }
-
- .token.deleted {
- text-decoration: line-through;
- }
-
- .token.inserted {
- border-bottom: 1px dotted #2d2006;
- text-decoration: none;
- }
-
- .token.italic {
- font-style: italic;
- }
-
- .token.important,
- .token.bold {
- font-weight: bold;
- }
-
- .token.important {
- color: #896724;
- }
-
- .token.entity {
- cursor: help;
- }
-
- pre > code.highlight {
- outline: .4em solid #896724;
- outline-offset: .4em;
- }
-
- /* overrides color-values for the Line Numbers plugin
- * http://prismjs.com/plugins/line-numbers/
- */
- .line-numbers .line-numbers-rows {
- border-right-color: #ece8de;
- }
-
- .line-numbers-rows > span:before {
- color: #cdc4b1;
- }
-
- /* overrides color-values for the Line Highlight plugin
- * http://prismjs.com/plugins/line-highlight/
- */
- .line-highlight {
- background: rgba(45, 32, 6, 0.2);
- background: -webkit-linear-gradient(left, rgba(45, 32, 6, 0.2) 70%, rgba(45, 32, 6, 0));
- background: linear-gradient(to right, rgba(45, 32, 6, 0.2) 70%, rgba(45, 32, 6, 0));
- }
-}
diff --git a/assets/sass/prism/_prism.scss b/assets/sass/prism/_prism.scss
deleted file mode 100644
index 98c9dd0..0000000
--- a/assets/sass/prism/_prism.scss
+++ /dev/null
@@ -1,47 +0,0 @@
-@import 'dark';
-@import 'light';
-@import 'hacker';
-@import 'solarized';
-@import 'dracula';
-
-@if $prism_theme == default {
- .theme__light, .theme__custom {
- @include theme-light;
- }
-
- .theme__dark {
- @include theme-dark;
- }
-
- .theme__hacker {
- @include theme-hacker;
- }
-
- .theme__solarized {
- @include theme-solarized;
- }
-} @else if $prism_theme == dark {
- .container {
- @include theme-dark;
- }
-} @else if $prism_theme == hacker {
- .container {
- @include theme-hacker;
- }
-} @else if $prism_theme == light {
- .container {
- @include theme-light;
- }
-} @else if $prism_theme == solarized {
- .container {
- @include theme-solarized;
- }
-} @else if $prism_theme == dracula {
- .container {
- @include theme-dracula;
- }
-} @else {
- .container {
- @include theme-light;
- }
-}
\ No newline at end of file
diff --git a/assets/sass/prism/_solarized.scss b/assets/sass/prism/_solarized.scss
deleted file mode 100644
index 99d85ae..0000000
--- a/assets/sass/prism/_solarized.scss
+++ /dev/null
@@ -1,165 +0,0 @@
-/* Generated with http://k88hudson.github.io/syntax-highlighting-theme-generator/www */
-/* http://k88hudson.github.io/react-markdocs */
-/**
- * @author k88hudson
- *
- * Based on prism.js default theme for JavaScript, CSS and HTML
- * Based on dabblet (http://dabblet.com)
- * @author Lea Verou
- */
-/*********************************************************
-* General
-*/
-@mixin theme-solarized {
- pre[class*="language-"],
- code[class*="language-"] {
- color: #5c6e74;
- font-size: $code-font-size;
- text-shadow: none;
- font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
- direction: ltr;
- text-align: left;
- white-space: pre;
- word-spacing: normal;
- word-break: normal;
- line-height: 1.5em;
- -moz-tab-size: 4;
- -o-tab-size: 4;
- tab-size: 4;
- -webkit-hyphens: none;
- -moz-hyphens: none;
- -ms-hyphens: none;
- hyphens: none;
- }
-
- pre[class*="language-"]::selection,
- code[class*="language-"]::selection,
- pre[class*="language-"]::mozselection,
- code[class*="language-"]::mozselection {
- text-shadow: none;
- background: #b3d4fc;
- }
-
- @media print {
-
- pre[class*="language-"],
- code[class*="language-"] {
- text-shadow: none;
- }
- }
-
- pre[class*="language-"] {
- padding: 1em;
- margin: .5em 0;
- overflow: auto;
- background: #FBF1D1;
- }
-
- :not(pre)>code[class*="language-"] {
- padding: .1em .3em;
- border-radius: .3em;
- color: #db4c69;
- background: #f8f5ec;
- }
-
- /*********************************************************
- * Tokens
- */
- .namespace {
- opacity: .7;
- }
-
- .token.comment,
- .token.prolog,
- .token.doctype,
- .token.cdata {
- color: #93a1a1;
- }
-
- .token.punctuation {
- color: #999999;
- }
-
- .token.property,
- .token.tag,
- .token.boolean,
- .token.number,
- .token.constant,
- .token.symbol,
- .token.deleted {
- color: #990055;
- }
-
- .token.selector,
- .token.attr-name,
- .token.string,
- .token.char,
- .token.builtin,
- .token.inserted {
- color: #669900;
- }
-
- .token.operator,
- .token.entity,
- .token.url,
- .language-css .token.string,
- .style .token.string {
- color: #a67f59;
- background: #FBF1D1;
- }
-
- .token.atrule,
- .token.attr-value,
- .token.keyword {
- color: #0077aa;
- }
-
- .token.function {
- color: #dd4a68;
- }
-
- .token.regex,
- .token.important,
- .token.variable {
- color: #ee9900;
- }
-
- .token.important,
- .token.bold {
- font-weight: bold;
- }
-
- .token.italic {
- font-style: italic;
- }
-
- .token.entity {
- cursor: help;
- }
-
- /*********************************************************
- * Line highlighting
- */
- pre[data-line] {
- position: relative;
- }
-
- pre[class*="language-"]>code[class*="language-"] {
- position: relative;
- z-index: 1;
- }
-
- .line-highlight {
- position: absolute;
- left: 0;
- right: 0;
- padding: inherit 0;
- margin-top: 1em;
- background: #f7ebc6;
- box-shadow: inset 5px 0 0 #f7d87c;
- z-index: 0;
- pointer-events: none;
- line-height: inherit;
- white-space: pre;
- }
-}
diff --git a/assets/sass/themes/_custom.scss b/assets/sass/themes/_custom.scss
index 73b1315..4b919c0 100644
--- a/assets/sass/themes/_custom.scss
+++ b/assets/sass/themes/_custom.scss
@@ -18,7 +18,7 @@ $custom: (
navbar-border-bottom-color: hsl($custom_theme_primary_color, 65%, 32%),
navbar-background-color: hsl($custom_theme_primary_color, 60%, 86%),
navbar-mobile-background-color: hsl($custom_theme_primary_color, 60%, 92%),
- navbar-title-color: hsl($custom_theme_primary_color, 82%, 12%),
+ navbar-title-color: hsl($custom_theme_primary_color, 82%, 20%),
navbar-title-hover-color: hsl($custom_theme_primary_color, 100%, 35%),
navbar-title-active-color: hsl($custom_theme_primary_color, 100%, 35%),
navbar-menu-hover-background-color: hsl($custom_theme_primary_color, 100%, 90%),
@@ -53,7 +53,7 @@ $custom: (
content-pre-header-color: hsl($custom_theme_primary_color, 100%, 10%),
content-pre-header-background-color: hsl($custom_theme_primary_color, 100%, 92%),
content-pre-border-background-color: hsl($custom_theme_primary_color, 100%, 86%),
- burger-menu-color: hsl($custom_theme_primary_color, 100%, 10%),
+ burger-menu-color: hsl($custom_theme_primary_color, 86%, 20%),
social-icon-color: hsl($custom_theme_primary_color, 25%, 50%),
social-icon-hover-color: hsl($custom_theme_primary_color, 25%, 60%),
pagination-link-color: hsl($custom_theme_primary_color, 65%, 32%),
diff --git a/assets/sass/themes/_light.scss b/assets/sass/themes/_light.scss
index 67991b4..2e15353 100644
--- a/assets/sass/themes/_light.scss
+++ b/assets/sass/themes/_light.scss
@@ -6,7 +6,7 @@ $light: (
title-color: #607d8b,
meta-color: #424242,
body-color: #424242,
- hr-color: #dbdbdb,
+ hr-color: #ccc,
body-background-color: #fafafa,
backdrop-background-color: #e0e0e0,
dropdown-border-top-color: #e0e0e0,
@@ -14,14 +14,14 @@ $light: (
dropdown-content-background-color: #fafafa,
dropdown-item-hover-background-color: #bdbdbd,
dropdown-item-hover-color: #FCFCFA,
- dropdown-item-color: #424242,
+ dropdown-item-color: #555,
navbar-border-bottom-color: #e0e0e0,
navbar-background-color: #eaeaea,
navbar-mobile-background-color: #f1f1f1,
- navbar-title-color: #424242,
+ navbar-title-color: #555,
navbar-title-hover-color: #607d8b,
navbar-title-active-color: #FF6188,
- navbar-menu-hover-background-color: darken(#eeeeee, 5%),
+ navbar-menu-hover-background-color: lighten(#eeeeee, 1%),
navbar-dropdown-item-hover-color: #607d8b,
sidebar-title-color: #424242,
sidebar-li-color: #424242,
@@ -53,7 +53,7 @@ $light: (
content-pre-border-background-color: darken(#F5F2F0, 7%),
content-pre-header-background-color: darken(#F5F2F0, 3%),
content-pre-header-color: #344952,
- burger-menu-color: #9e9e9e,
+ burger-menu-color: #777,
social-icon-color: #9e9e9e,
social-icon-hover-color: darken(#9e9e9e, 20%),
pagination-link-color: #424242,
@@ -72,7 +72,7 @@ $light: (
search-placeholder-color: #bdbdbd,
search-color: #424242,
search-icon-color: #bdbdbd,
- search-border-color: darken(#eee, 3%),
+ search-border-color: darken(#eee, 12%),
search-background-color: #eeeeee,
search-content-color: #424242,
search-content-background-color: #eeeeee,
diff --git a/assets/sass/themes/_solarized.scss b/assets/sass/themes/_solarized.scss
index cfe135b..23cdf76 100644
--- a/assets/sass/themes/_solarized.scss
+++ b/assets/sass/themes/_solarized.scss
@@ -18,7 +18,7 @@ $solarized: (
navbar-border-bottom-color: #B58900,
navbar-background-color: #EEE8D5,
navbar-mobile-background-color: darken(#EEE8D5, 2.5%),
- navbar-title-color: #424242,
+ navbar-title-color: #555,
navbar-title-hover-color: #B58900,
navbar-title-active-color: #B58900,
navbar-menu-hover-background-color: darken(#FBF1D1, 5%),
diff --git a/exampleSite/config/_default/config.toml b/exampleSite/config/_default/config.toml
index e74a65e..a81b4da 100644
--- a/exampleSite/config/_default/config.toml
+++ b/exampleSite/config/_default/config.toml
@@ -1,26 +1,23 @@
-baseURL = "http://example.org/" # The URL of your site.
-title = "Hugo Zzo Theme" # Title of your site
-theme = "zzo" # Name of Zzo theme folder in `themes/`.
+baseURL = "http://example.org/"
+title = "Hugo Zzo Theme"
+theme = "zzo"
-defaultContentLanguage = "en" # Default language to use (if you setup multilingual support)
-defaultContentLanguageInSubdir = true # baseURL/en/, baseURL/kr/ ...
-hasCJKLanguage = true # Set `true` for Chinese/Japanese/Korean languages.
+defaultContentLanguage = "en"
+defaultContentLanguageInSubdir = true
+hasCJKLanguage = true
summaryLength = 70
-copyright = "©{year}, All Rights Reserved" # copyright symbol: $copy; current year: {year}
+copyright = "©{year}, All Rights Reserved"
timeout = 10000
enableEmoji = true
-paginate = 13 # Number of items per page in paginated lists.
+paginate = 13
rssLimit = 100
pygmentsOptions = "linenos=table"
+pygmentsCodefences = true
pygmentsUseClasses = true
-
-[markup]
- [markup.goldmark]
- [markup.goldmark.renderer]
- unsafe = true
+pygmentsCodefencesGuessSyntax = true
[outputs]
home = ["HTML", "RSS", "JSON", "WebAppManifest"]
diff --git a/exampleSite/config/_default/menus.en.toml b/exampleSite/config/_default/menus.en.toml
index 7ac545d..eef39d7 100644
--- a/exampleSite/config/_default/menus.en.toml
+++ b/exampleSite/config/_default/menus.en.toml
@@ -10,11 +10,17 @@
url = "archive"
weight = 2
+[[main]]
+ identifier = "pt"
+ name = "pt"
+ url = "pt"
+ weight = 3
+
[[main]]
identifier = "gallery"
name = "gallery"
url = "gallery"
- weight = 3
+ weight = 4
[[main]]
parent = "gallery"
@@ -30,10 +36,10 @@
identifier = "posts"
name = "posts"
url = "posts"
- weight = 4
+ weight = 5
[[main]]
identifier = "notes"
name = "notes"
url = "notes"
- weight = 5
\ No newline at end of file
+ weight = 6
\ No newline at end of file
diff --git a/exampleSite/config/_default/params.toml b/exampleSite/config/_default/params.toml
index ef86fd3..7703f08 100644
--- a/exampleSite/config/_default/params.toml
+++ b/exampleSite/config/_default/params.toml
@@ -1,26 +1,23 @@
-logoText = "Zzo" # site navigation bar logo text.
-description = "The Zzo theme for Hugo example site." # for SEO
-custom_css = [] # custom_css = ["scss/custom.scss"] and then make file at root/assets/scss/custom.scss
-custom_js = [] # custom_js = ["js/custom.js"] and then make file at root/assets/js/custom.js
+logoText = "Zzo"
+description = "The Zzo theme for Hugo example site."
+custom_css = []
+custom_js = []
# header
homeHeaderType = "text" # text, img, slide
-# navbar
-enableThemeChange = true # site color theme
-
# body
-enableBreadcrumb = true # breadcrumb for list, single page
-enablePhotoSwipe = true # image viewer for gallery, single page
-enableSearch = true # site search with lunr
-enableGoToTop = true # scroll to top
-enableWhoami = true # at the end of single page
+enableBreadcrumb = true
+enablePhotoSwipe = true
+enableSearch = true
+enableGoToTop = true
+enableWhoami = true
summaryShape = "classic" # card, classic, compact
archiveGroupByDate = "2006" # "2006-01": group by month, "2006": group by year
-archivePaginate = 13 # items per page
-paginateWindow = 1 # setting it to 1 gives 7 buttons, 2 gives 9, etc. If set 1: [1 ... 4 5 6 ... 356] [1 2 3 4 5 ... 356] etc
+archivePaginate = 13
+paginateWindow = 1
-# whoami: usage - home page sidebar, single page bottom of post. all values can be empty
+# whoami
myname = "zzossig"
email = "zzossig@gmail.com"
whoami = "Web Developer"
@@ -30,26 +27,27 @@ organization = "Hugo"
link = "https://github.com/zzossig/hugo-theme-zzo"
# sidebar
-enableBio = true # home page sidebar
-enableSidebar = true # if you want to make full width of contents
-enableSidebarTags = true # if you want to use tags.
+enableBio = true
+enableSidebar = true
+enableSidebarTags = true
enableSidebarSeries = true
enableSidebarCategories = true
-enableToc = true # single page table of contents
-enableTocSwitch = true # single page table of contents visibility switch
-itemsPerCategory = 5 # maximum number of posts shown in the sidebar.
-searchLanguages = ['en'] # lunr multilanguage search. https://github.com/MihaiValentin/lunr-languages
+enableToc = true
+enableTocSwitch = true
+itemsPerCategory = 5
+searchLanguages = ['en']
# footer
-showPoweredBy = true # show footer text: Powered by Hugo and Zzo theme
-showFeedLinks = true # RSS Feed
-showSocialLinks = true # email, facebook, twitter ...
-enableLangChange = true # show button at bottom left of footer.
-themeOptions = ["dark", "light", "hacker", "solarized", "custom"] # select options for site color theme
+showPoweredBy = true
+showFeedLinks = true
+showSocialLinks = true
+enableLangChange = true
+enableThemeChange = true
+themeOptions = ["dark", "light", "hacker", "solarized", "custom"]
# comment
enableComment = true
-disqus_shortname = ""
+disqus_shortname = ""
commento = false
[gitment] # Gitment is a comment system based on GitHub issues. see https://github.com/imsun/gitment
@@ -98,7 +96,7 @@ commento = false
google_analytics = ""
google_tag_manager = ""
-[socialOptions] # if set, social icons will show up.
+[socialOptions]
email = "mailto:your@email.com"
facebook = "http://example.org/"
twitter = "http://example.org/"
diff --git a/exampleSite/content/notes/hugo/hugo-1.md b/exampleSite/content/notes/hugo/hugo-1.md
deleted file mode 100644
index 8244030..0000000
--- a/exampleSite/content/notes/hugo/hugo-1.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: "Hugo 1"
-date: 2017-10-11T10:33:41+09:00
-description: "Hugo 1 Description"
-tags:
-- hugo
-series:
--
-categories:
-- hugo
----
-
-Dolore in consectetur irure qui laborum. Adipisicing cillum ad laboris dolor. Quis consectetur ullamco esse ad mollit anim sint nostrud esse. Irure voluptate ex fugiat voluptate ea fugiat laboris.
-
-{{% img src="/images/feature1/graph.png" title="Image4" caption="Image description" alt="image alt" %}}
-
-> This is a blockqute.
-
-* * *
-line
-* * *
-line
\ No newline at end of file
diff --git a/exampleSite/content/notes/hugo/syntax-highlight.md b/exampleSite/content/notes/hugo/syntax-highlight.md
new file mode 100644
index 0000000..4f7696b
--- /dev/null
+++ b/exampleSite/content/notes/hugo/syntax-highlight.md
@@ -0,0 +1,306 @@
+---
+title: "Syntax highlighting"
+date: 2017-10-11T10:33:41+09:00
+description: "Syntax highlighting test"
+tags:
+- hugo
+series:
+-
+categories:
+- hugo
+---
+
+Dolore in consectetur irure qui laborum. Adipisicing cillum ad laboris dolor. Quis consectetur ullamco esse ad mollit anim sint nostrud esse. Irure voluptate ex fugiat voluptate ea fugiat laboris.
+
+{{% img src="/images/feature1/graph.png" title="Image4" caption="Image description" alt="image alt" %}}
+
+> This is a blockqute.
+
+* * *
+line
+* * *
+line
+
+# Code Syntax Highlighting
+
+Verify the following code blocks render as code blocks and highlight properly.
+
+### Diff
+
+``` diff
+*** /path/to/original ''timestamp''
+--- /path/to/new ''timestamp''
+***************
+*** 1 ****
+! This is a line.
+--- 1 ---
+! This is a replacement line.
+It is important to spell
+-removed line
++new line
+```
+
+### Makefile
+
+``` makefile
+CC=gcc
+CFLAGS=-I.
+
+hellomake: hellomake.o hellofunc.o
+ $(CC) -o hellomake hellomake.o hellofunc.o -I.
+```
+
+### JSON
+
+``` json
+{"employees":[
+ {"firstName":"John", "lastName":"Doe"},
+]}
+```
+
+### Markdown
+
+``` markdown
+**bold**
+*italics*
+[link](www.example.com)
+```
+
+### JavaScript
+
+``` javascript
+document.write('Hello, world!');
+```
+
+### CSS
+
+``` css
+body {
+ background-color: red;
+}
+```
+
+### Objective C
+
+``` objectivec
+#import
+
+int main (void)
+{
+ printf ("Hello world!\n");
+}
+```
+
+### Python
+
+``` python
+print "Hello, world!"
+```
+
+### XML
+
+``` xml
+
+
+ John Doe
+
+
+```
+
+### Perl
+
+``` perl
+print "Hello, World!\n";
+```
+
+### Bash
+
+``` bash
+echo "Hello World"
+```
+
+### PHP
+
+``` php
+ Hello World
'; ?>
+```
+
+### CoffeeScript
+
+``` coffeescript
+console.log(“Hello world!”);
+```
+
+### C#
+
+``` cs
+using System;
+class Program
+{
+ public static void Main(string[] args)
+ {
+ Console.WriteLine("Hello, world!");
+ }
+}
+```
+
+### C++
+
+``` cpp
+#include
+
+main()
+{
+ cout << "Hello World!";
+ return 0;
+}
+```
+
+### SQL
+
+``` sql
+SELECT column_name,column_name
+FROM table_name;
+```
+
+### Go
+
+``` go
+package main
+import "fmt"
+func main() {
+ fmt.Println("Hello, 世界")
+}
+```
+
+### Ruby
+
+```ruby
+puts "Hello, world!"
+```
+
+### Java
+
+```java
+import javax.swing.JFrame; //Importing class JFrame
+import javax.swing.JLabel; //Importing class JLabel
+public class HelloWorld {
+ public static void main(String[] args) {
+ JFrame frame = new JFrame(); //Creating frame
+ frame.setTitle("Hi!"); //Setting title frame
+ frame.add(new JLabel("Hello, world!"));//Adding text to frame
+ frame.pack(); //Setting size to smallest
+ frame.setLocationRelativeTo(null); //Centering frame
+ frame.setVisible(true); //Showing frame
+ }
+}
+```
+
+### Latex Equation
+
+```latex
+\frac{d}{dx}\left( \int_{0}^{x} f(u)\,du\right)=f(x).
+```
+
+```javascript
+import {x, y} as p from 'point';
+const ANSWER = 42;
+
+class Car extends Vehicle {
+ constructor(speed, cost) {
+ super(speed);
+
+ var c = Symbol('cost');
+ this[c] = cost;
+
+ this.intro = `This is a car runs at
+ ${speed}.`;
+ }
+}
+
+for (let num of [1, 2, 3]) {
+ console.log(num + 0b111110111);
+}
+
+function $initHighlight(block, flags) {
+ try {
+ if (block.className.search(/\bno\-highlight\b/) != -1)
+ return processBlock(block.function, true, 0x0F) + ' class=""';
+ } catch (e) {
+ /* handle exception */
+ var e4x =
+ ;
+ }
+ for (var i = 0 / 2; i < classes.length; i++) {
+ // "0 / 2" should not be parsed as regexp
+ if (checkCondition(classes[i]) === undefined)
+ return /\d+[\s/]/g;
+ }
+ console.log(Array.every(classes, Boolean));
+}
+
+export $initHighlight;
+```
+
+```html
+
+
+
+
+ Hello world
+
+
+
+
+
+
+
+
+
+
+```
+
+```css
+/*********************************************************
+* General
+*/
+pre[class*="language-"],
+code {
+ color: #5c6e74;
+ font-size: 13px;
+ text-shadow: none;
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ direction: ltr;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ line-height: 1.5;
+ tab-size: 4;
+ hyphens: none;
+}
+pre[class*="language-"]::selection,
+code::selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+@media print {
+ pre[class*="language-"],
+ code {
+ text-shadow: none;
+ }
+}
+pre[class*="language-"] {
+ padding: 1em;
+ margin: .5em 0;
+ overflow: auto;
+ background: #f8f5ec;
+}
+:not(pre) > code {
+ padding: .1em .3em;
+ border-radius: .3em;
+ color: #db4c69;
+ background: #f9f2f4;
+}
+```
\ No newline at end of file
diff --git a/exampleSite/content/posts/test-mermaid.md b/exampleSite/content/posts/test-mermaid.md
index f5f901e..3848858 100644
--- a/exampleSite/content/posts/test-mermaid.md
+++ b/exampleSite/content/posts/test-mermaid.md
@@ -21,6 +21,22 @@ graph TD;
C-->D;
```
+```mermaid
+graph TD;
+ A-->B;
+ A-->C;
+ B-->D;
+ C-->D;
+```
+
+```mermaid
+graph TD;
+ A-->B;
+ A-->C;
+ B-->D;
+ C-->D;
+```
+
```mermaid
sequenceDiagram
participant Alice
diff --git a/exampleSite/content/pt/_index.md b/exampleSite/content/pt/_index.md
new file mode 100644
index 0000000..cf5bbb0
--- /dev/null
+++ b/exampleSite/content/pt/_index.md
@@ -0,0 +1,4 @@
+---
+title: "Presentations"
+description: "Presentation list with reveal.js"
+---
diff --git a/exampleSite/content/pt/dir/fourth.md b/exampleSite/content/pt/dir/fourth.md
new file mode 100644
index 0000000..f1a879f
--- /dev/null
+++ b/exampleSite/content/pt/dir/fourth.md
@@ -0,0 +1,12 @@
+---
+title: "Fourth"
+date: 2019-11-30T20:48:10+09:00
+description: "My fourth presentation"
+type: pt
+tags:
+-
+series:
+-
+categories:
+-
+---
diff --git a/exampleSite/content/pt/first.md b/exampleSite/content/pt/first.md
new file mode 100644
index 0000000..a2267d5
--- /dev/null
+++ b/exampleSite/content/pt/first.md
@@ -0,0 +1,12 @@
+---
+title: "First"
+date: 2019-11-30T19:45:20+09:00
+description: "My first presentation"
+type: pt
+tags:
+-
+series:
+-
+categories:
+-
+---
diff --git a/exampleSite/content/pt/second.md b/exampleSite/content/pt/second.md
new file mode 100644
index 0000000..e0ac0d5
--- /dev/null
+++ b/exampleSite/content/pt/second.md
@@ -0,0 +1,12 @@
+---
+title: "Second"
+date: 2019-11-30T20:45:24+09:00
+description: "My second presentation"
+type: pt
+tags:
+-
+series:
+-
+categories:
+-
+---
diff --git a/exampleSite/content/pt/third.md b/exampleSite/content/pt/third.md
new file mode 100644
index 0000000..1b80c7d
--- /dev/null
+++ b/exampleSite/content/pt/third.md
@@ -0,0 +1,12 @@
+---
+title: "Third"
+date: 2019-11-30T20:46:30+09:00
+description: "My third presentation"
+type: pt
+tags:
+-
+series:
+-
+categories:
+-
+---
diff --git a/exampleSite/resources/_gen/assets/scss/sass/main.scss_b4f67ac5085b89b62b54c1923e5a9145.content b/exampleSite/resources/_gen/assets/scss/sass/main.scss_b4f67ac5085b89b62b54c1923e5a9145.content
index 5bb69b2..77734c3 100644
--- a/exampleSite/resources/_gen/assets/scss/sass/main.scss_b4f67ac5085b89b62b54c1923e5a9145.content
+++ b/exampleSite/resources/_gen/assets/scss/sass/main.scss_b4f67ac5085b89b62b54c1923e5a9145.content
@@ -1 +1 @@
-.theme__light .chroma{background-color:#f5f2f0}.theme__light .chroma .err{color:#a61717;background-color:#e3d2d2}.theme__light .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.theme__light .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.theme__light .chroma .hl{display:block;width:100%;background-color:#ffc}.theme__light .chroma .lnt{margin-right:.4em;padding:0 .4em;color:#728fcb}.theme__light .chroma .ln{margin-right:.4em;padding:0 .4em;color:#728fcb}.theme__light .chroma .k{color:#728fcb;font-weight:700}.theme__light .chroma .kc{color:#728fcb;font-weight:700}.theme__light .chroma .kd{color:#728fcb;font-weight:700}.theme__light .chroma .kn{color:#728fcb;font-weight:700}.theme__light .chroma .kp{color:#728fcb;font-weight:700}.theme__light .chroma .kr{color:#728fcb;font-weight:700}.theme__light .chroma .kt{color:#458;font-weight:700}.theme__light .chroma .na{color:#896724}.theme__light .chroma .nb{color:#0086b3}.theme__light .chroma .bp{color:#b6ad9a}.theme__light .chroma .nc{color:#458;font-weight:700}.theme__light .chroma .no{color:#896724}.theme__light .chroma .nd{color:#3c5d5d;font-weight:700}.theme__light .chroma .ni{color:#728fcb}.theme__light .chroma .ne{color:#b29762;font-weight:700}.theme__light .chroma .nf{color:#b29762;font-weight:700}.theme__light .chroma .nl{color:#b29762;font-weight:700}.theme__light .chroma .nn{color:#555}.theme__light .chroma .nt{color:#063289}.theme__light .chroma .nv{color:#896724}.theme__light .chroma .vc{color:#896724}.theme__light .chroma .vg{color:#896724}.theme__light .chroma .vi{color:#896724}.theme__light .chroma .s{color:#728fcb}.theme__light .chroma .sa{color:#728fcb}.theme__light .chroma .sb{color:#728fcb}.theme__light .chroma .sc{color:#728fcb}.theme__light .chroma .dl{color:#728fcb}.theme__light .chroma .sd{color:#728fcb}.theme__light .chroma .s2{color:#728fcb}.theme__light .chroma .se{color:#728fcb}.theme__light .chroma .sh{color:#728fcb}.theme__light .chroma .si{color:#728fcb}.theme__light .chroma .sx{color:#728fcb}.theme__light .chroma .sr{color:#009926}.theme__light .chroma .s1{color:#728fcb}.theme__light .chroma .ss{color:#990073}.theme__light .chroma .m{color:#099}.theme__light .chroma .mb{color:#099}.theme__light .chroma .mf{color:#099}.theme__light .chroma .mh{color:#099}.theme__light .chroma .mi{color:#099}.theme__light .chroma .il{color:#099}.theme__light .chroma .mo{color:#099}.theme__light .chroma .o{color:#728fcb;font-weight:700}.theme__light .chroma .ow{color:#728fcb;font-weight:700}.theme__light .chroma .c{color:#b6ad9a;font-style:italic}.theme__light .chroma .ch{color:#b6ad9a;font-style:italic}.theme__light .chroma .cm{color:#b6ad9a;font-style:italic}.theme__light .chroma .c1{color:#b6ad9a;font-style:italic}.theme__light .chroma .cs{color:#b6ad9a;font-weight:700;font-style:italic}.theme__light .chroma .cp{color:#b6ad9a;font-weight:700;font-style:italic}.theme__light .chroma .cpf{color:#b6ad9a;font-weight:700;font-style:italic}.theme__light .chroma .gd{color:#728fcb;background-color:#fdd}.theme__light .chroma .ge{color:#728fcb;font-style:italic}.theme__light .chroma .gr{color:#a00}.theme__light .chroma .gh{color:#b6ad9a}.theme__light .chroma .gi{color:#728fcb;background-color:#dfd}.theme__light .chroma .go{color:#888}.theme__light .chroma .gp{color:#555}.theme__light .chroma .gs{font-weight:700}.theme__light .chroma .gu{color:#aaa}.theme__light .chroma .gt{color:#a00}.theme__light .chroma .gl{text-decoration:underline}.theme__light .chroma .w{color:#bbb}.theme__light .chroma .p{color:#b6ad9a}.theme__dark .chroma{color:#f8f8f2;background-color:#171f2e}.theme__dark .chroma .err{color:#960050;background-color:#1e0010}.theme__dark .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.theme__dark .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.theme__dark .chroma .hl{display:block;width:100%;background-color:#ffc}.theme__dark .chroma .lnt{margin-right:.4em;padding:0 .4em;color:#7f7f7f}.theme__dark .chroma .ln{margin-right:.4em;padding:0 .4em;color:#7f7f7f}.theme__dark .chroma .k{color:#66d9ef}.theme__dark .chroma .kc{color:#66d9ef}.theme__dark .chroma .kd{color:#66d9ef}.theme__dark .chroma .kn{color:#f92672}.theme__dark .chroma .kp{color:#66d9ef}.theme__dark .chroma .kr{color:#66d9ef}.theme__dark .chroma .kt{color:#66d9ef}.theme__dark .chroma .na{color:#a6e22e}.theme__dark .chroma .nc{color:#a6e22e}.theme__dark .chroma .no{color:#66d9ef}.theme__dark .chroma .nd{color:#a6e22e}.theme__dark .chroma .ne{color:#a6e22e}.theme__dark .chroma .nf{color:#a6e22e}.theme__dark .chroma .nx{color:#a6e22e}.theme__dark .chroma .nt{color:#f92672}.theme__dark .chroma .l{color:#ae81ff}.theme__dark .chroma .ld{color:#e6db74}.theme__dark .chroma .s{color:#e6db74}.theme__dark .chroma .sa{color:#e6db74}.theme__dark .chroma .sb{color:#e6db74}.theme__dark .chroma .sc{color:#e6db74}.theme__dark .chroma .dl{color:#e6db74}.theme__dark .chroma .sd{color:#e6db74}.theme__dark .chroma .s2{color:#e6db74}.theme__dark .chroma .se{color:#ae81ff}.theme__dark .chroma .sh{color:#e6db74}.theme__dark .chroma .si{color:#e6db74}.theme__dark .chroma .sx{color:#e6db74}.theme__dark .chroma .sr{color:#e6db74}.theme__dark .chroma .s1{color:#e6db74}.theme__dark .chroma .ss{color:#e6db74}.theme__dark .chroma .m{color:#ae81ff}.theme__dark .chroma .mb{color:#ae81ff}.theme__dark .chroma .mf{color:#ae81ff}.theme__dark .chroma .mh{color:#ae81ff}.theme__dark .chroma .mi{color:#ae81ff}.theme__dark .chroma .il{color:#ae81ff}.theme__dark .chroma .mo{color:#ae81ff}.theme__dark .chroma .o{color:#f92672}.theme__dark .chroma .ow{color:#f92672}.theme__dark .chroma .c{color:#75715e}.theme__dark .chroma .ch{color:#75715e}.theme__dark .chroma .cm{color:#75715e}.theme__dark .chroma .c1{color:#75715e}.theme__dark .chroma .cs{color:#75715e}.theme__dark .chroma .cp{color:#75715e}.theme__dark .chroma .cpf{color:#75715e}.theme__dark .chroma .gd{color:#f92672}.theme__dark .chroma .ge{font-style:italic}.theme__dark .chroma .gi{color:#a6e22e}.theme__dark .chroma .gs{font-weight:700}.theme__dark .chroma .gu{color:#75715e}.theme__hacker .chroma{color:#f8f8f2;background-color:#282a36}.theme__hacker .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.theme__hacker .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.theme__hacker .chroma .hl{display:block;width:100%;background-color:#ffc}.theme__hacker .chroma .lnt{margin-right:.4em;padding:0 .4em;color:#7f7f7f}.theme__hacker .chroma .ln{margin-right:.4em;padding:0 .4em;color:#7f7f7f}.theme__hacker .chroma .k{color:#ff79c6}.theme__hacker .chroma .kc{color:#ff79c6}.theme__hacker .chroma .kd{color:#8be9fd;font-style:italic}.theme__hacker .chroma .kn{color:#ff79c6}.theme__hacker .chroma .kp{color:#ff79c6}.theme__hacker .chroma .kr{color:#ff79c6}.theme__hacker .chroma .kt{color:#8be9fd}.theme__hacker .chroma .na{color:#50fa7b}.theme__hacker .chroma .nb{color:#8be9fd;font-style:italic}.theme__hacker .chroma .nc{color:#50fa7b}.theme__hacker .chroma .nf{color:#50fa7b}.theme__hacker .chroma .nl{color:#8be9fd;font-style:italic}.theme__hacker .chroma .nt{color:#ff79c6}.theme__hacker .chroma .nv{color:#8be9fd;font-style:italic}.theme__hacker .chroma .vc{color:#8be9fd;font-style:italic}.theme__hacker .chroma .vg{color:#8be9fd;font-style:italic}.theme__hacker .chroma .vi{color:#8be9fd;font-style:italic}.theme__hacker .chroma .s{color:#f1fa8c}.theme__hacker .chroma .sa{color:#f1fa8c}.theme__hacker .chroma .sb{color:#f1fa8c}.theme__hacker .chroma .sc{color:#f1fa8c}.theme__hacker .chroma .dl{color:#f1fa8c}.theme__hacker .chroma .sd{color:#f1fa8c}.theme__hacker .chroma .s2{color:#f1fa8c}.theme__hacker .chroma .se{color:#f1fa8c}.theme__hacker .chroma .sh{color:#f1fa8c}.theme__hacker .chroma .si{color:#f1fa8c}.theme__hacker .chroma .sx{color:#f1fa8c}.theme__hacker .chroma .sr{color:#f1fa8c}.theme__hacker .chroma .s1{color:#f1fa8c}.theme__hacker .chroma .ss{color:#f1fa8c}.theme__hacker .chroma .m{color:#bd93f9}.theme__hacker .chroma .mb{color:#bd93f9}.theme__hacker .chroma .mf{color:#bd93f9}.theme__hacker .chroma .mh{color:#bd93f9}.theme__hacker .chroma .mi{color:#bd93f9}.theme__hacker .chroma .il{color:#bd93f9}.theme__hacker .chroma .mo{color:#bd93f9}.theme__hacker .chroma .o{color:#ff79c6}.theme__hacker .chroma .ow{color:#ff79c6}.theme__hacker .chroma .c{color:#6272a4}.theme__hacker .chroma .ch{color:#6272a4}.theme__hacker .chroma .cm{color:#6272a4}.theme__hacker .chroma .c1{color:#6272a4}.theme__hacker .chroma .cs{color:#6272a4}.theme__hacker .chroma .cp{color:#ff79c6}.theme__hacker .chroma .cpf{color:#ff79c6}.theme__hacker .chroma .gd{color:#8b080b}.theme__hacker .chroma .ge{text-decoration:underline}.theme__hacker .chroma .gh{font-weight:700}.theme__hacker .chroma .gi{font-weight:700}.theme__hacker .chroma .go{color:#44475a}.theme__hacker .chroma .gu{font-weight:700}.theme__hacker .chroma .gl{text-decoration:underline}.theme__solarized .chroma{color:#dc322f;background-color:#faf1cd}.theme__solarized .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.theme__solarized .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.theme__solarized .chroma .hl{display:block;width:100%;background-color:#ffc}.theme__solarized .chroma .lnt{margin-right:.4em;padding:0 .4em;color:#aaa}.theme__solarized .chroma .ln{margin-right:.4em;padding:0 .4em;color:#aaa}.theme__solarized .chroma .k{color:#07a}.theme__solarized .chroma .kc{color:#07a;font-weight:700}.theme__solarized .chroma .kd{color:#07a}.theme__solarized .chroma .kn{color:#dc322f;font-weight:700}.theme__solarized .chroma .kp{color:#07a}.theme__solarized .chroma .kr{color:#07a}.theme__solarized .chroma .kt{color:#07a;font-weight:700}.theme__solarized .chroma .n{color:#c47e00}.theme__solarized .chroma .na{color:#c47e00}.theme__solarized .chroma .nb{color:#690}.theme__solarized .chroma .bp{color:#c47e00}.theme__solarized .chroma .nc{color:#690}.theme__solarized .chroma .no{color:#c47e00}.theme__solarized .chroma .nd{color:#c47e00}.theme__solarized .chroma .ni{color:#c47e00}.theme__solarized .chroma .ne{color:#c47e00}.theme__solarized .chroma .nf{color:#dd4a68}.theme__solarized .chroma .fm{color:#dd4a68}.theme__solarized .chroma .nl{color:#c47e00}.theme__solarized .chroma .nn{color:#c47e00}.theme__solarized .chroma .nx{color:#c47e00}.theme__solarized .chroma .py{color:#c47e00}.theme__solarized .chroma .nt{color:#268bd2;font-weight:700}.theme__solarized .chroma .nv{color:#c47e00}.theme__solarized .chroma .vc{color:#c47e00}.theme__solarized .chroma .vg{color:#c47e00}.theme__solarized .chroma .vi{color:#c47e00}.theme__solarized .chroma .vm{color:#c47e00}.theme__solarized .chroma .l{color:#2aa198}.theme__solarized .chroma .ld{color:#2aa198}.theme__solarized .chroma .s{color:#2aa198}.theme__solarized .chroma .sa{color:#2aa198}.theme__solarized .chroma .sb{color:#2aa198}.theme__solarized .chroma .sc{color:#2aa198}.theme__solarized .chroma .dl{color:#2aa198}.theme__solarized .chroma .sd{color:#2aa198}.theme__solarized .chroma .s2{color:#2aa198}.theme__solarized .chroma .se{color:#2aa198}.theme__solarized .chroma .sh{color:#2aa198}.theme__solarized .chroma .si{color:#2aa198}.theme__solarized .chroma .sx{color:#2aa198}.theme__solarized .chroma .sr{color:#2aa198}.theme__solarized .chroma .s1{color:#2aa198}.theme__solarized .chroma .ss{color:#2aa198}.theme__solarized .chroma .m{color:#2aa198;font-weight:700}.theme__solarized .chroma .mb{color:#2aa198;font-weight:700}.theme__solarized .chroma .mf{color:#2aa198;font-weight:700}.theme__solarized .chroma .mh{color:#2aa198;font-weight:700}.theme__solarized .chroma .mi{color:#2aa198;font-weight:700}.theme__solarized .chroma .il{color:#2aa198;font-weight:700}.theme__solarized .chroma .mo{color:#2aa198;font-weight:700}.theme__solarized .chroma .ow{color:#07a}.theme__solarized .chroma .c{color:#93a1a1;font-style:italic}.theme__solarized .chroma .ch{color:#93a1a1;font-style:italic}.theme__solarized .chroma .cm{color:#93a1a1;font-style:italic}.theme__solarized .chroma .c1{color:#93a1a1;font-style:italic}.theme__solarized .chroma .cs{color:#93a1a1;font-style:italic}.theme__solarized .chroma .cp{color:#93a1a1;font-style:italic}.theme__solarized .chroma .cpf{color:#93a1a1;font-style:italic}.theme__solarized .chroma .g{color:#d33682}.theme__solarized .chroma .gd{color:#d33682}.theme__solarized .chroma .ge{color:#d33682}.theme__solarized .chroma .gr{color:#d33682}.theme__solarized .chroma .gh{color:#d33682}.theme__solarized .chroma .gi{color:#d33682}.theme__solarized .chroma .go{color:#d33682}.theme__solarized .chroma .gp{color:#d33682}.theme__solarized .chroma .gs{color:#d33682}.theme__solarized .chroma .gu{color:#d33682}.theme__solarized .chroma .gt{color:#d33682}.theme__solarized .chroma .gl{color:#d33682}.theme__custom .chroma{background-color:#f0fbff}.theme__custom .chroma .err{color:red;background-color:#faa}.theme__custom .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.theme__custom .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.theme__custom .chroma .hl{display:block;width:100%;background-color:#ffc}.theme__custom .chroma .lnt{margin-right:.4em;padding:0 .4em;color:#7f7f7f}.theme__custom .chroma .ln{margin-right:.4em;padding:0 .4em;color:#7f7f7f}.theme__custom .chroma .k{color:#00a}.theme__custom .chroma .kc{color:#00a}.theme__custom .chroma .kd{color:#00a}.theme__custom .chroma .kn{color:#00a}.theme__custom .chroma .kp{color:#00a}.theme__custom .chroma .kr{color:#00a}.theme__custom .chroma .kt{color:#0aa}.theme__custom .chroma .na{color:#1e90ff}.theme__custom .chroma .nb{color:#0aa}.theme__custom .chroma .nc{color:#0a0;text-decoration:underline}.theme__custom .chroma .no{color:#a00}.theme__custom .chroma .nd{color:#888}.theme__custom .chroma .ni{color:#800;font-weight:700}.theme__custom .chroma .nf{color:#0a0}.theme__custom .chroma .nn{color:#0aa;text-decoration:underline}.theme__custom .chroma .nt{color:#1e90ff;font-weight:700}.theme__custom .chroma .nv{color:#a00}.theme__custom .chroma .s{color:#a50}.theme__custom .chroma .sa{color:#a50}.theme__custom .chroma .sb{color:#a50}.theme__custom .chroma .sc{color:#a50}.theme__custom .chroma .dl{color:#a50}.theme__custom .chroma .sd{color:#a50}.theme__custom .chroma .s2{color:#a50}.theme__custom .chroma .se{color:#a50}.theme__custom .chroma .sh{color:#a50}.theme__custom .chroma .si{color:#a50}.theme__custom .chroma .sx{color:#a50}.theme__custom .chroma .sr{color:#099}.theme__custom .chroma .s1{color:#a50}.theme__custom .chroma .ss{color:#00a}.theme__custom .chroma .m{color:#099}.theme__custom .chroma .mb{color:#099}.theme__custom .chroma .mf{color:#099}.theme__custom .chroma .mh{color:#099}.theme__custom .chroma .mi{color:#099}.theme__custom .chroma .il{color:#099}.theme__custom .chroma .mo{color:#099}.theme__custom .chroma .ow{color:#00a}.theme__custom .chroma .c{color:#aaa;font-style:italic}.theme__custom .chroma .ch{color:#aaa;font-style:italic}.theme__custom .chroma .cm{color:#aaa;font-style:italic}.theme__custom .chroma .c1{color:#aaa;font-style:italic}.theme__custom .chroma .cs{color:#00a;font-style:italic}.theme__custom .chroma .cp{color:#4c8317}.theme__custom .chroma .cpf{color:#4c8317}.theme__custom .chroma .gd{color:#a00}.theme__custom .chroma .ge{font-style:italic}.theme__custom .chroma .gr{color:#a00}.theme__custom .chroma .gh{color:navy;font-weight:700}.theme__custom .chroma .gi{color:#0a0}.theme__custom .chroma .go{color:#888}.theme__custom .chroma .gp{color:#555}.theme__custom .chroma .gs{font-weight:700}.theme__custom .chroma .gu{color:purple;font-weight:700}.theme__custom .chroma .gt{color:#a00}.theme__custom .chroma .gl{text-decoration:underline}.theme__custom .chroma .w{color:#bbb}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}.theme__dark a{text-decoration:none;color:#ffd866}.theme__dark a:hover,.theme__dark a:active,.theme__dark a:focus{color:#ff6188;text-decoration:underline}.theme__light a{text-decoration:none;color:#607d8b}.theme__light a:hover,.theme__light a:active,.theme__light a:focus{color:#ff6188;text-decoration:underline}.theme__hacker a{text-decoration:none;color:#e08c48}.theme__hacker a:hover,.theme__hacker a:active,.theme__hacker a:focus{color:#ff6188;text-decoration:underline}.theme__solarized a{text-decoration:none;color:#b58900}.theme__solarized a:hover,.theme__solarized a:active,.theme__solarized a:focus{color:#ff6188;text-decoration:underline}.theme__custom a{text-decoration:none;color:#1d6c87}.theme__custom a:hover,.theme__custom a:active,.theme__custom a:focus{color:#144a5d;text-decoration:underline}/*!minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css*/html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}ul{list-style:none}hr{border:0}button,input,select,textarea{margin:0}img,video{height:auto;max-width:100%;object-fit:inherit}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:left}figcaption{font-style:italic;font-size:.9rem;margin-bottom:1rem}.theme__dark figcaption{color:#bdbdbd}.theme__dark figcaption strong{color:#fcfcfa}.theme__light figcaption{color:#bdbdbd}.theme__light figcaption strong{color:#424242}.theme__hacker figcaption{color:#1fff2a}.theme__hacker figcaption strong{color:#fcfcfa}.theme__solarized figcaption{color:#ffb300}.theme__solarized figcaption strong{color:#b58900}.theme__custom figcaption{color:#09c}.theme__custom figcaption strong{color:#006080}.theme__dark ::-moz-selection{color:#fcfcfa;background:#ff6188}.theme__light ::-moz-selection{color:#fcfcfa;background:#ff6188}.theme__hacker ::-moz-selection{color:#fcfcfa;background:#ff6188}.theme__solarized ::-moz-selection{color:#fcfcfa;background:#ff6188}.theme__custom ::-moz-selection{color:#eaf6fb;background:#1d6c87}.theme__dark ::selection{color:#fcfcfa;background:#ff6188}.theme__light ::selection{color:#fcfcfa;background:#ff6188}.theme__hacker ::selection{color:#fcfcfa;background:#ff6188}.theme__solarized ::selection{color:#fcfcfa;background:#ff6188}.theme__custom ::selection{color:#eaf6fb;background:#1d6c87}/*!Generated by Font Squirrel (https://www.fontsquirrel.com) on October 26, 2019*/@font-face{font-family:montserrat;src:url(../fonts/montserrat-regular.woff2) format("woff2"),url(../fonts/montserrat-regular.woff) format("woff");font-weight:400;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:montserrat;src:url(../fonts/montserrat-bold.woff2) format("woff2"),url(../fonts/montserrat-bold.woff) format("woff");font-weight:700;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:montserrat;src:url(../fonts/montserrat-black.woff2) format("woff2"),url(../fonts/montserrat-black.woff) format("woff");font-weight:900;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:merriweather;src:url(../fonts/merriweather-regular.woff2) format("woff2"),url(../fonts/merriweather-regular.woff) format("woff");font-weight:400;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:merriweather;src:url(../fonts/merriweather-italic.woff2) format("woff2"),url(../fonts/merriweather-italic.woff) format("woff");font-weight:400;font-style:italic;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:merriweather;src:url(../fonts/merriweather-bold.woff2) format("woff2"),url(../fonts/merriweather-bold.woff) format("woff");font-weight:700;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:merriweather;src:url(../fonts/merriweather-bolditalic.woff2) format("woff2"),url(../fonts/merriweather-bolditalic.woff) format("woff");font-weight:700;font-style:italic;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:merriweather;src:url(../fonts/merriweather-black.woff2) format("woff2"),url(../fonts/merriweather-black.woff) format("woff");font-weight:900;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}.clearfix::after{clear:both;content:'';display:table}.container{max-width:100%;margin-left:auto;margin-right:auto;width:100%;min-height:100vh;position:relative}.theme__dark .container{background-color:#2d2a2e}.theme__light .container{background-color:#fafafa}.theme__hacker .container{background-color:#151715}.theme__solarized .container{background-color:#fdf7e3}.theme__custom .container{background-color:#f7fdff}.hide-text{overflow:hidden;padding:0;text-indent:101%;white-space:nowrap}.visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.hide{display:none}.grow{-webkit-flex-grow:1;-moz-flex-grow:1;-ms-flex-grow:1;flex-grow:1}body{font:125%/1.4 BlinkMacSystemFont,-apple-system,segoe ui,roboto,oxygen,ubuntu,cantarell,fira sans,droid sans,helvetica neue,helvetica,arial,sans-serif}code,pre{font:125%/1.8 Consolas,andale mono wt,andale mono,lucida console,lucida sans typewriter,dejavu sans mono,bitstream vera sans mono,liberation mono,nimbus mono l,Monaco,courier new,Courier,monospace}.h1{font-size:4rem}.h2{font-size:3.5rem}.h3{font-size:3rem}.h4{font-size:2.5rem}.h5{font-size:2rem}.h6{font-size:1.5rem}.p1{font-size:1.2rem}.p2{font-size:1rem}.caption{font-size:.8rem}@-webkit-keyframes slide-out-up{0%{transform:translate(0,0);opacity:0}100%{transform:translate(0,-12%);opacity:1}}@-moz-keyframes slide-out-up{0%{transform:translate(0,0);opacity:0}100%{transform:translate(0,-12%);opacity:1}}@-ms-keyframes slide-out-up{0%{transform:translate(0,0);opacity:0}100%{transform:translate(0,-12%);opacity:1}}@-o-keyframes slide-out-up{0%{transform:translate(0,0);opacity:0}100%{transform:translate(0,-12%);opacity:1}}@keyframes slide-out-up{0%{transform:translate(0,0);opacity:0}100%{transform:translate(0,-12%);opacity:1}}@-webkit-keyframes slide-out-down{0%{transform:translate(0,0);opacity:0}100%{transform:translate(0,12%);opacity:1}}@-moz-keyframes slide-out-down{0%{transform:translate(0,0);opacity:0}100%{transform:translate(0,12%);opacity:1}}@-ms-keyframes slide-out-down{0%{transform:translate(0,0);opacity:0}100%{transform:translate(0,12%);opacity:1}}@-o-keyframes slide-out-down{0%{transform:translate(0,0);opacity:0}100%{transform:translate(0,12%);opacity:1}}@keyframes slide-out-down{0%{transform:translate(0,0);opacity:0}100%{transform:translate(0,12%);opacity:1}}@-webkit-keyframes slide-out-left{0%{transform:translate(0,0);opacity:0}100%{transform:translate(-12%,0);opacity:1}}@-moz-keyframes slide-out-left{0%{transform:translate(0,0);opacity:0}100%{transform:translate(-12%,0);opacity:1}}@-ms-keyframes slide-out-left{0%{transform:translate(0,0);opacity:0}100%{transform:translate(-12%,0);opacity:1}}@-o-keyframes slide-out-left{0%{transform:translate(0,0);opacity:0}100%{transform:translate(-12%,0);opacity:1}}@keyframes slide-out-left{0%{transform:translate(0,0);opacity:0}100%{transform:translate(-12%,0);opacity:1}}@-webkit-keyframes slide-out-right{0%{transform:translate(0,0);opacity:0}100%{transform:translate(12%,0);opacity:1}}@-moz-keyframes slide-out-right{0%{transform:translate(0,0);opacity:0}100%{transform:translate(12%,0);opacity:1}}@-ms-keyframes slide-out-right{0%{transform:translate(0,0);opacity:0}100%{transform:translate(12%,0);opacity:1}}@-o-keyframes slide-out-right{0%{transform:translate(0,0);opacity:0}100%{transform:translate(12%,0);opacity:1}}@keyframes slide-out-right{0%{transform:translate(0,0);opacity:0}100%{transform:translate(12%,0);opacity:1}}@-webkit-keyframes slide-in-up{0%{transform:translate(0,12%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-moz-keyframes slide-in-up{0%{transform:translate(0,12%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-ms-keyframes slide-in-up{0%{transform:translate(0,12%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-o-keyframes slide-in-up{0%{transform:translate(0,12%);opacity:0}100%{transform:translate(0,0);opacity:1}}@keyframes slide-in-up{0%{transform:translate(0,12%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-webkit-keyframes slide-in-down{0%{transform:translate(0,-12%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-moz-keyframes slide-in-down{0%{transform:translate(0,-12%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-ms-keyframes slide-in-down{0%{transform:translate(0,-12%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-o-keyframes slide-in-down{0%{transform:translate(0,-12%);opacity:0}100%{transform:translate(0,0);opacity:1}}@keyframes slide-in-down{0%{transform:translate(0,-12%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-webkit-keyframes slide-in-left{0%{transform:translate(-12%,0);opacity:0}100%{transform:translate(0,0);opacity:1}}@-moz-keyframes slide-in-left{0%{transform:translate(-12%,0);opacity:0}100%{transform:translate(0,0);opacity:1}}@-ms-keyframes slide-in-left{0%{transform:translate(-12%,0);opacity:0}100%{transform:translate(0,0);opacity:1}}@-o-keyframes slide-in-left{0%{transform:translate(-12%,0);opacity:0}100%{transform:translate(0,0);opacity:1}}@keyframes slide-in-left{0%{transform:translate(-12%,0);opacity:0}100%{transform:translate(0,0);opacity:1}}@-webkit-keyframes slide-in-right{0%{transform:translate(12%,0);opacity:0}100%{transform:translate(0,0);opacity:1}}@-moz-keyframes slide-in-right{0%{transform:translate(12%,0);opacity:0}100%{transform:translate(0,0);opacity:1}}@-ms-keyframes slide-in-right{0%{transform:translate(12%,0);opacity:0}100%{transform:translate(0,0);opacity:1}}@-o-keyframes slide-in-right{0%{transform:translate(12%,0);opacity:0}100%{transform:translate(0,0);opacity:1}}@keyframes slide-in-right{0%{transform:translate(12%,0);opacity:0}100%{transform:translate(0,0);opacity:1}}@-webkit-keyframes slide-in-down-2{0%{transform:translate(0,-6%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-moz-keyframes slide-in-down-2{0%{transform:translate(0,-6%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-ms-keyframes slide-in-down-2{0%{transform:translate(0,-6%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-o-keyframes slide-in-down-2{0%{transform:translate(0,-6%);opacity:0}100%{transform:translate(0,0);opacity:1}}@keyframes slide-in-down-2{0%{transform:translate(0,-6%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-webkit-keyframes slide-in-down-3{0%{transform:translate(0,-2%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-moz-keyframes slide-in-down-3{0%{transform:translate(0,-2%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-ms-keyframes slide-in-down-3{0%{transform:translate(0,-2%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-o-keyframes slide-in-down-3{0%{transform:translate(0,-2%);opacity:0}100%{transform:translate(0,0);opacity:1}}@keyframes slide-in-down-3{0%{transform:translate(0,-2%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-webkit-keyframes fade-in{from{opacity:0}to{opacity:1}}@-moz-keyframes fade-in{from{opacity:0}to{opacity:1}}@-ms-keyframes fade-in{from{opacity:0}to{opacity:1}}@-o-keyframes fade-in{from{opacity:0}to{opacity:1}}@keyframes fade-in{from{opacity:0}to{opacity:1}}.navbar{margin:auto;width:inherit;max-width:inherit;height:50px;z-index:11;position:fixed;left:0;right:0;top:0;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-justify-content:space-between;-moz-justify-content:space-between;-ms-justify-content:space-between;justify-content:space-between;-ms-flex-pack:space-between}.theme__dark .navbar{border-bottom:1px solid #2d2a2e;background-color:#403e41}.theme__light .navbar{border-bottom:1px solid #e0e0e0;background-color:#eaeaea}.theme__hacker .navbar{border-bottom:1px solid #252526;background-color:#252526}.theme__solarized .navbar{border-bottom:1px solid #b58900;background-color:#eee8d5}.theme__custom .navbar{border-bottom:1px solid #1d6c87;background-color:#c6e6f1}.navbar--hide{top:-50px}.navbar--show{top:0}@media(min-width:769px){.navbar__slide-down:nth-child(1){-webkit-animation:slide-in-down .25s .1s 1 ease both;-moz-animation:slide-in-down .25s .1s 1 ease both;-ms-animation:slide-in-down .25s .1s 1 ease both;-o-animation:slide-in-down .25s .1s 1 ease both;animation:slide-in-down .25s .1s 1 ease both}.navbar__slide-down:nth-child(2){-webkit-animation:slide-in-down .25s .2s 1 ease both;-moz-animation:slide-in-down .25s .2s 1 ease both;-ms-animation:slide-in-down .25s .2s 1 ease both;-o-animation:slide-in-down .25s .2s 1 ease both;animation:slide-in-down .25s .2s 1 ease both}.navbar__slide-down:nth-child(3){-webkit-animation:slide-in-down .25s .3s 1 ease both;-moz-animation:slide-in-down .25s .3s 1 ease both;-ms-animation:slide-in-down .25s .3s 1 ease both;-o-animation:slide-in-down .25s .3s 1 ease both;animation:slide-in-down .25s .3s 1 ease both}.navbar__slide-down:nth-child(4){-webkit-animation:slide-in-down .25s .4s 1 ease both;-moz-animation:slide-in-down .25s .4s 1 ease both;-ms-animation:slide-in-down .25s .4s 1 ease both;-o-animation:slide-in-down .25s .4s 1 ease both;animation:slide-in-down .25s .4s 1 ease both}.navbar__slide-down:nth-child(5){-webkit-animation:slide-in-down .25s .5s 1 ease both;-moz-animation:slide-in-down .25s .5s 1 ease both;-ms-animation:slide-in-down .25s .5s 1 ease both;-o-animation:slide-in-down .25s .5s 1 ease both;animation:slide-in-down .25s .5s 1 ease both}.navbar__slide-down:nth-child(6){-webkit-animation:slide-in-down .25s .6s 1 ease both;-moz-animation:slide-in-down .25s .6s 1 ease both;-ms-animation:slide-in-down .25s .6s 1 ease both;-o-animation:slide-in-down .25s .6s 1 ease both;animation:slide-in-down .25s .6s 1 ease both}.navbar__slide-down:nth-child(7){-webkit-animation:slide-in-down .25s .7s 1 ease both;-moz-animation:slide-in-down .25s .7s 1 ease both;-ms-animation:slide-in-down .25s .7s 1 ease both;-o-animation:slide-in-down .25s .7s 1 ease both;animation:slide-in-down .25s .7s 1 ease both}.navbar__slide-down:nth-child(8){-webkit-animation:slide-in-down .25s .8s 1 ease both;-moz-animation:slide-in-down .25s .8s 1 ease both;-ms-animation:slide-in-down .25s .8s 1 ease both;-o-animation:slide-in-down .25s .8s 1 ease both;animation:slide-in-down .25s .8s 1 ease both}}.navbar__brand{height:50px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-shrink:0;-moz-flex-shrink:0;-ms-flex-shrink:0;flex-shrink:0}.navbar__burger{display:none;position:relative;-webkit-animation:slide-in-down .5s 0s 1 ease both;-moz-animation:slide-in-down .5s 0s 1 ease both;-ms-animation:slide-in-down .5s 0s 1 ease both;-o-animation:slide-in-down .5s 0s 1 ease both;animation:slide-in-down .5s 0s 1 ease both}@media(max-width:769px){.navbar__burger{cursor:pointer;margin-left:auto;position:relative;height:50px;width:35px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:flex-end;-moz-justify-content:flex-end;-ms-justify-content:flex-end;justify-content:flex-end;-ms-flex-pack:flex-end}.navbar__burger span{border-radius:1rem;display:block;height:2px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color,opacity,transform;transition-timing-function:ease-out;width:16px}.theme__dark .navbar__burger span{background-color:#fcfcfa}.theme__light .navbar__burger span{background-color:#9e9e9e}.theme__hacker .navbar__burger span{background-color:#dbdbdb}.theme__solarized .navbar__burger span{background-color:#b58900}.theme__custom .navbar__burger span{background-color:#002633}.navbar__burger span:nth-child(1){top:calc(50% - 6px)}.navbar__burger span:nth-child(2){top:calc(50% - 1px)}.navbar__burger span:nth-child(3){top:calc(50% + 4px)}.theme__dark .navbar__burger:hover span{background-color:#ff6188}.theme__light .navbar__burger:hover span{background-color:#ff6188}.theme__hacker .navbar__burger:hover span{background-color:#ff6188}.theme__solarized .navbar__burger:hover span{background-color:#ff6188}.theme__custom .navbar__burger:hover span{background-color:#144a5d}.navbar__burger.is-active{display:block}.navbar__burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar__burger.is-active span:nth-child(2){opacity:0}.navbar__burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}}.navbar__logo{width:100%;height:100%}.navbar__logo-link{width:40px;height:40px;padding:.1rem;margin:auto .25rem;-webkit-flex-shrink:0;-moz-flex-shrink:0;-ms-flex-shrink:0;flex-shrink:0;flex-shrink:0}.navbar__title{height:50px;font-size:1.5rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}.theme__dark .navbar__title-link{color:#fcfcfa}.theme__dark .navbar__title-link:hover,.theme__dark .navbar__title-link:active,.theme__dark .navbar__title-link:focus{text-decoration:none;color:#fcfcfa}.theme__light .navbar__title-link{color:#424242}.theme__light .navbar__title-link:hover,.theme__light .navbar__title-link:active,.theme__light .navbar__title-link:focus{text-decoration:none;color:#424242}.theme__hacker .navbar__title-link{color:#e3cd26}.theme__hacker .navbar__title-link:hover,.theme__hacker .navbar__title-link:active,.theme__hacker .navbar__title-link:focus{text-decoration:none;color:#e3cd26}.theme__solarized .navbar__title-link{color:#424242}.theme__solarized .navbar__title-link:hover,.theme__solarized .navbar__title-link:active,.theme__solarized .navbar__title-link:focus{text-decoration:none;color:#424242}.theme__custom .navbar__title-link{color:#062b38}.theme__custom .navbar__title-link:hover,.theme__custom .navbar__title-link:active,.theme__custom .navbar__title-link:focus{text-decoration:none;color:#062b38}.navbar__menu{-webkit-flex-grow:1;-moz-flex-grow:1;-ms-flex-grow:1;flex-grow:1;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:flex-end;-moz-justify-content:flex-end;-ms-justify-content:flex-end;justify-content:flex-end;-ms-flex-pack:flex-end;height:50px}@media(max-width:769px){.navbar__menu{display:none}}.navbar__menu-item{height:50px;padding:.5rem;font-size:1rem;font-family:montserrat,sans-serif;font-weight:400;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme__dark .navbar__menu-item{color:#fcfcfa}.theme__dark .navbar__menu-item:hover,.theme__dark .navbar__menu-item:active,.theme__dark .navbar__menu-item:focus{color:#ffd866;background-color:#4d4a4e;text-decoration:none;border-bottom:1px solid #2d2a2e}@media(max-width:769px){.theme__dark .navbar__menu-item:hover,.theme__dark .navbar__menu-item:active,.theme__dark .navbar__menu-item:focus{border-bottom:none}}.theme__dark .navbar__menu-item.active{color:#ff6188!important}.theme__light .navbar__menu-item{color:#424242}.theme__light .navbar__menu-item:hover,.theme__light .navbar__menu-item:active,.theme__light .navbar__menu-item:focus{color:#607d8b;background-color:#e1e1e1;text-decoration:none;border-bottom:1px solid #e0e0e0}@media(max-width:769px){.theme__light .navbar__menu-item:hover,.theme__light .navbar__menu-item:active,.theme__light .navbar__menu-item:focus{border-bottom:none}}.theme__light .navbar__menu-item.active{color:#ff6188!important}.theme__hacker .navbar__menu-item{color:#e3cd26}.theme__hacker .navbar__menu-item:hover,.theme__hacker .navbar__menu-item:active,.theme__hacker .navbar__menu-item:focus{color:#1fff2a;background-color:#464c46;text-decoration:none;border-bottom:1px solid #252526}@media(max-width:769px){.theme__hacker .navbar__menu-item:hover,.theme__hacker .navbar__menu-item:active,.theme__hacker .navbar__menu-item:focus{border-bottom:none}}.theme__hacker .navbar__menu-item.active{color:#f3ff6e!important}.theme__solarized .navbar__menu-item{color:#424242}.theme__solarized .navbar__menu-item:hover,.theme__solarized .navbar__menu-item:active,.theme__solarized .navbar__menu-item:focus{color:#b58900;background-color:#f9eaba;text-decoration:none;border-bottom:1px solid #b58900}@media(max-width:769px){.theme__solarized .navbar__menu-item:hover,.theme__solarized .navbar__menu-item:active,.theme__solarized .navbar__menu-item:focus{border-bottom:none}}.theme__solarized .navbar__menu-item.active{color:#b58900!important}.theme__custom .navbar__menu-item{color:#062b38}.theme__custom .navbar__menu-item:hover,.theme__custom .navbar__menu-item:active,.theme__custom .navbar__menu-item:focus{color:#0086b3;background-color:#ccf2ff;text-decoration:none;border-bottom:1px solid #1d6c87}@media(max-width:769px){.theme__custom .navbar__menu-item:hover,.theme__custom .navbar__menu-item:active,.theme__custom .navbar__menu-item:focus{border-bottom:none}}.theme__custom .navbar__menu-item.active{color:#0086b3!important}@media(max-width:769px){.navbar__menu-item{-webkit-justify-content:flex-start;-moz-justify-content:flex-start;-ms-justify-content:flex-start;justify-content:flex-start;-ms-flex-pack:flex-start;width:100%;padding:0 .75rem}}.navbar__menu-icon{margin-top:.4rem}.navbar__menu.is-active{position:absolute;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;-moz-align-items:flex-start;-ms-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;top:100%;width:100%;height:auto;overflow:hidden}.theme__dark .navbar__menu.is-active{border-top:1px solid #2d2a2e;background-color:#3a3a3a}.theme__light .navbar__menu.is-active{border-top:1px solid #e0e0e0;background-color:#f1f1f1}.theme__hacker .navbar__menu.is-active{border-top:1px solid #252526;background-color:#323232}.theme__solarized .navbar__menu.is-active{border-top:1px solid #b58900;background-color:#eae3cc}.theme__custom .navbar__menu.is-active{border-top:1px solid #1d6c87;background-color:#def1f7}.navbar__dropdown{display:inline-block;height:50px}@media(max-width:769px){.navbar__dropdown{width:100%;height:auto}}.navbar__dropdown--content{position:absolute;display:none;width:inherit;z-index:10;border-bottom-left-radius:.15rem;border-bottom-right-radius:.15rem;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);-moz-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);box-shadow:0 1px 3px 0 rgba(0,0,0,.4)}.theme__dark .navbar__dropdown--content{border-top:4px solid #424242;background-color:#595b5c}.theme__light .navbar__dropdown--content{border-top:4px solid #e0e0e0;background-color:#fafafa}.theme__hacker .navbar__dropdown--content{border-top:4px solid #6b6b6b;background-color:#212421}.theme__solarized .navbar__dropdown--content{border-top:4px solid #e8b000;background-color:#fafafa}.theme__custom .navbar__dropdown--content{border-top:4px solid #00ace6;background-color:#f5fcff}@media(max-width:769px){.navbar__dropdown--content{position:relative;display:block;box-shadow:none}.theme__dark .navbar__dropdown--content{border-top:none;background-color:#3a3a3a}.theme__light .navbar__dropdown--content{border-top:none;background-color:#f1f1f1}.theme__hacker .navbar__dropdown--content{border-top:none;background-color:#323232}.theme__solarized .navbar__dropdown--content{border-top:none;background-color:#eae3cc}.theme__custom .navbar__dropdown--content{border-top:none;background-color:#def1f7}}.navbar__dropdown--item{padding:.25rem .75rem;height:auto;margin:auto;text-decoration:none;display:block;font-size:1rem}.theme__dark .navbar__dropdown--item{color:#fcfcfa}.theme__dark .navbar__dropdown--item:hover,.theme__dark .navbar__dropdown--item:active,.theme__dark .navbar__dropdown--item:focus{color:#ffd866;background-color:#4d4a4e;text-decoration:none}.theme__dark .navbar__dropdown--item:hover:last-child,.theme__dark .navbar__dropdown--item:active:last-child,.theme__dark .navbar__dropdown--item:focus:last-child{border-bottom-left-radius:.15rem;border-bottom-right-radius:.15rem}.theme__light .navbar__dropdown--item{color:#424242}.theme__light .navbar__dropdown--item:hover,.theme__light .navbar__dropdown--item:active,.theme__light .navbar__dropdown--item:focus{color:#607d8b;background-color:#e1e1e1;text-decoration:none}.theme__light .navbar__dropdown--item:hover:last-child,.theme__light .navbar__dropdown--item:active:last-child,.theme__light .navbar__dropdown--item:focus:last-child{border-bottom-left-radius:.15rem;border-bottom-right-radius:.15rem}.theme__hacker .navbar__dropdown--item{color:#e3cd26}.theme__hacker .navbar__dropdown--item:hover,.theme__hacker .navbar__dropdown--item:active,.theme__hacker .navbar__dropdown--item:focus{color:#1fff2a;background-color:#464c46;text-decoration:none}.theme__hacker .navbar__dropdown--item:hover:last-child,.theme__hacker .navbar__dropdown--item:active:last-child,.theme__hacker .navbar__dropdown--item:focus:last-child{border-bottom-left-radius:.15rem;border-bottom-right-radius:.15rem}.theme__solarized .navbar__dropdown--item{color:#424242}.theme__solarized .navbar__dropdown--item:hover,.theme__solarized .navbar__dropdown--item:active,.theme__solarized .navbar__dropdown--item:focus{color:#b58900;background-color:#f9eaba;text-decoration:none}.theme__solarized .navbar__dropdown--item:hover:last-child,.theme__solarized .navbar__dropdown--item:active:last-child,.theme__solarized .navbar__dropdown--item:focus:last-child{border-bottom-left-radius:.15rem;border-bottom-right-radius:.15rem}.theme__custom .navbar__dropdown--item{color:#002633}.theme__custom .navbar__dropdown--item:hover,.theme__custom .navbar__dropdown--item:active,.theme__custom .navbar__dropdown--item:focus{color:#0086b3;background-color:#ccf2ff;text-decoration:none}.theme__custom .navbar__dropdown--item:hover:last-child,.theme__custom .navbar__dropdown--item:active:last-child,.theme__custom .navbar__dropdown--item:focus:last-child{border-bottom-left-radius:.15rem;border-bottom-right-radius:.15rem}@media(max-width:769px){.navbar__dropdown--item{padding-left:2.5rem}}.navbar__dropdown:hover .navbar__dropdown--content{display:block}.theme{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:flex-end;-moz-justify-content:flex-end;-ms-justify-content:flex-end;justify-content:flex-end;-ms-flex-pack:flex-end;-webkit-animation:slide-in-down .5s 0s 1 ease both;-moz-animation:slide-in-down .5s 0s 1 ease both;-ms-animation:slide-in-down .5s 0s 1 ease both;-o-animation:slide-in-down .5s 0s 1 ease both;animation:slide-in-down .5s 0s 1 ease both}@media(max-width:769px){.theme{display:none}}.theme .dropdown{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.theme__dark .theme .dropdown{color:#fcfcfa}.theme__dark .theme .dropdown:hover,.theme__dark .theme .dropdown:active,.theme__dark .theme .dropdown:focus{color:#ffd866;background-color:#4d4a4e}.theme__light .theme .dropdown{color:#9e9e9e}.theme__light .theme .dropdown:hover,.theme__light .theme .dropdown:active,.theme__light .theme .dropdown:focus{color:#607d8b;background-color:#e1e1e1}.theme__hacker .theme .dropdown{color:#dbdbdb}.theme__hacker .theme .dropdown:hover,.theme__hacker .theme .dropdown:active,.theme__hacker .theme .dropdown:focus{color:#1fff2a;background-color:#464c46}.theme__solarized .theme .dropdown{color:#b58900}.theme__solarized .theme .dropdown:hover,.theme__solarized .theme .dropdown:active,.theme__solarized .theme .dropdown:focus{color:#b58900;background-color:#f9eaba}.theme__custom .theme .dropdown{color:#002633}.theme__custom .theme .dropdown:hover,.theme__custom .theme .dropdown:active,.theme__custom .theme .dropdown:focus{color:#0086b3;background-color:#ccf2ff}.theme .dropdown-trigger{padding:.5rem;cursor:pointer;border:none;outline:none;width:50px;height:48px;color:inherit;background-color:inherit}.theme .dropdown-content{position:absolute;top:100%;right:0;display:none;height:auto;z-index:10;border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);-moz-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);box-shadow:0 1px 3px 0 rgba(0,0,0,.4)}.theme .dropdown-content a{font-size:.9rem}.theme__dark .theme .dropdown-content{border-top:4px solid #424242;background-color:#595b5c}.theme__light .theme .dropdown-content{border-top:4px solid #e0e0e0;background-color:#fafafa}.theme__hacker .theme .dropdown-content{border-top:4px solid #6b6b6b;background-color:#212421}.theme__solarized .theme .dropdown-content{border-top:4px solid #e8b000;background-color:#fafafa}.theme__custom .theme .dropdown-content{border-top:4px solid #00ace6;background-color:#f5fcff}.theme__dark .theme .dropdown-content .is-active{background-color:#424242}.theme__light .theme .dropdown-content .is-active{background-color:#e0e0e0}.theme__hacker .theme .dropdown-content .is-active{background-color:#323732}.theme__solarized .theme .dropdown-content .is-active{background-color:#fbf1d1}.theme__custom .theme .dropdown-content .is-active{background-color:#ccf2ff}.theme .dropdown-item{padding:.25rem .75rem;height:100%;text-decoration:none;display:block;font-size:1rem;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme__dark .theme .dropdown-item{color:#fcfcfa}.theme__dark .theme .dropdown-item:hover,.theme__dark .theme .dropdown-item:active,.theme__dark .theme .dropdown-item:focus{color:#fcfcfa;background-color:#727072;text-decoration:none}.theme__dark .theme .dropdown-item:hover:last-child,.theme__dark .theme .dropdown-item:active:last-child,.theme__dark .theme .dropdown-item:focus:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.theme__light .theme .dropdown-item{color:#424242}.theme__light .theme .dropdown-item:hover,.theme__light .theme .dropdown-item:active,.theme__light .theme .dropdown-item:focus{color:#fcfcfa;background-color:#bdbdbd;text-decoration:none}.theme__light .theme .dropdown-item:hover:last-child,.theme__light .theme .dropdown-item:active:last-child,.theme__light .theme .dropdown-item:focus:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.theme__hacker .theme .dropdown-item{color:#e3cd26}.theme__hacker .theme .dropdown-item:hover,.theme__hacker .theme .dropdown-item:active,.theme__hacker .theme .dropdown-item:focus{color:#fcfcfa;background-color:#464c46;text-decoration:none}.theme__hacker .theme .dropdown-item:hover:last-child,.theme__hacker .theme .dropdown-item:active:last-child,.theme__hacker .theme .dropdown-item:focus:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.theme__solarized .theme .dropdown-item{color:#424242}.theme__solarized .theme .dropdown-item:hover,.theme__solarized .theme .dropdown-item:active,.theme__solarized .theme .dropdown-item:focus{color:#b58900;background-color:#f9eaba;text-decoration:none}.theme__solarized .theme .dropdown-item:hover:last-child,.theme__solarized .theme .dropdown-item:active:last-child,.theme__solarized .theme .dropdown-item:focus:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.theme__custom .theme .dropdown-item{color:#002633}.theme__custom .theme .dropdown-item:hover,.theme__custom .theme .dropdown-item:active,.theme__custom .theme .dropdown-item:focus{color:#0086b3;background-color:#ccf2ff;text-decoration:none}.theme__custom .theme .dropdown-item:hover:last-child,.theme__custom .theme .dropdown-item:active:last-child,.theme__custom .theme .dropdown-item:focus:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.theme .dropdown:hover .dropdown-content{display:block}.theme-mobile{display:none;outline:none;position:absolute;top:0;right:70px;width:35px;height:50px;padding:.25rem;cursor:pointer;z-index:12;-webkit-animation:slide-in-down .5s .4s 1 ease both;-moz-animation:slide-in-down .5s .4s 1 ease both;-ms-animation:slide-in-down .5s .4s 1 ease both;-o-animation:slide-in-down .5s .4s 1 ease both;animation:slide-in-down .5s .4s 1 ease both}.theme__dark .theme-mobile{color:#fcfcfa}.theme__dark .theme-mobile:hover,.theme__dark .theme-mobile:active,.theme__dark .theme-mobile:focus{color:#ff6188;background-color:inherit;border-bottom:none}.theme__light .theme-mobile{color:#9e9e9e}.theme__light .theme-mobile:hover,.theme__light .theme-mobile:active,.theme__light .theme-mobile:focus{color:#ff6188;background-color:inherit;border-bottom:none}.theme__hacker .theme-mobile{color:#dbdbdb}.theme__hacker .theme-mobile:hover,.theme__hacker .theme-mobile:active,.theme__hacker .theme-mobile:focus{color:#ff6188;background-color:inherit;border-bottom:none}.theme__solarized .theme-mobile{color:#b58900}.theme__solarized .theme-mobile:hover,.theme__solarized .theme-mobile:active,.theme__solarized .theme-mobile:focus{color:#ff6188;background-color:inherit;border-bottom:none}.theme__custom .theme-mobile{color:#002633}.theme__custom .theme-mobile:hover,.theme__custom .theme-mobile:active,.theme__custom .theme-mobile:focus{color:#144a5d;background-color:inherit;border-bottom:none}@media(max-width:769px){.theme-mobile{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:flex-end;-moz-justify-content:flex-end;-ms-justify-content:flex-end;justify-content:flex-end;-ms-flex-pack:flex-end}}.theme-mobile .dropdown{border-bottom:2px solid transparent}.theme__dark .theme-mobile .dropdown{color:#fcfcfa}.theme__dark .theme-mobile .dropdown:hover,.theme__dark .theme-mobile .dropdown:active,.theme__dark .theme-mobile .dropdown:focus{color:#ff6188;background-color:#4d4a4e;border-bottom:2px solid #2d2a2e}.theme__light .theme-mobile .dropdown{color:#9e9e9e}.theme__light .theme-mobile .dropdown:hover,.theme__light .theme-mobile .dropdown:active,.theme__light .theme-mobile .dropdown:focus{color:#ff6188;background-color:#e1e1e1;border-bottom:2px solid #e0e0e0}.theme__hacker .theme-mobile .dropdown{color:#dbdbdb}.theme__hacker .theme-mobile .dropdown:hover,.theme__hacker .theme-mobile .dropdown:active,.theme__hacker .theme-mobile .dropdown:focus{color:#ff6188;background-color:#464c46;border-bottom:2px solid #252526}.theme__solarized .theme-mobile .dropdown{color:#b58900}.theme__solarized .theme-mobile .dropdown:hover,.theme__solarized .theme-mobile .dropdown:active,.theme__solarized .theme-mobile .dropdown:focus{color:#ff6188;background-color:#f9eaba;border-bottom:2px solid #b58900}.theme__custom .theme-mobile .dropdown{color:#002633}.theme__custom .theme-mobile .dropdown:hover,.theme__custom .theme-mobile .dropdown:active,.theme__custom .theme-mobile .dropdown:focus{color:#144a5d;background-color:#ccf2ff;border-bottom:2px solid #1d6c87}.theme-mobile .dropdown-trigger{padding:.5rem;cursor:pointer;border:none;outline:none;width:35px;height:50px;color:inherit;background-color:inherit}.theme-mobile .dropdown-content{position:absolute;top:100%;left:0;display:none;height:auto;z-index:10;border-top-left-radius:.15rem;border-top-right-radius:.15rem;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);-moz-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);box-shadow:0 1px 3px 0 rgba(0,0,0,.4)}.theme-mobile .dropdown-content a{font-size:.9rem}.theme__dark .theme-mobile .dropdown-content{border-top:4px solid #424242;background-color:#595b5c}.theme__light .theme-mobile .dropdown-content{border-top:4px solid #e0e0e0;background-color:#fafafa}.theme__hacker .theme-mobile .dropdown-content{border-top:4px solid #6b6b6b;background-color:#212421}.theme__solarized .theme-mobile .dropdown-content{border-top:4px solid #e8b000;background-color:#fafafa}.theme__custom .theme-mobile .dropdown-content{border-top:4px solid #00ace6;background-color:#f5fcff}.theme__dark .theme-mobile .dropdown-content .is-active{background-color:#424242}.theme__light .theme-mobile .dropdown-content .is-active{background-color:#e0e0e0}.theme__hacker .theme-mobile .dropdown-content .is-active{background-color:#323732}.theme__solarized .theme-mobile .dropdown-content .is-active{background-color:#fbf1d1}.theme__custom .theme-mobile .dropdown-content .is-active{background-color:#ccf2ff}.theme-mobile .dropdown-item{padding:.25rem .75rem;height:100%;text-decoration:none;display:block;font-size:1rem;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme__dark .theme-mobile .dropdown-item{color:#fcfcfa}.theme__dark .theme-mobile .dropdown-item:hover,.theme__dark .theme-mobile .dropdown-item:active,.theme__dark .theme-mobile .dropdown-item:focus{color:#fcfcfa;background-color:#727072;text-decoration:none}.theme__dark .theme-mobile .dropdown-item:hover:first-child,.theme__dark .theme-mobile .dropdown-item:active:first-child,.theme__dark .theme-mobile .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme__light .theme-mobile .dropdown-item{color:#424242}.theme__light .theme-mobile .dropdown-item:hover,.theme__light .theme-mobile .dropdown-item:active,.theme__light .theme-mobile .dropdown-item:focus{color:#fcfcfa;background-color:#bdbdbd;text-decoration:none}.theme__light .theme-mobile .dropdown-item:hover:first-child,.theme__light .theme-mobile .dropdown-item:active:first-child,.theme__light .theme-mobile .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme__hacker .theme-mobile .dropdown-item{color:#e3cd26}.theme__hacker .theme-mobile .dropdown-item:hover,.theme__hacker .theme-mobile .dropdown-item:active,.theme__hacker .theme-mobile .dropdown-item:focus{color:#fcfcfa;background-color:#464c46;text-decoration:none}.theme__hacker .theme-mobile .dropdown-item:hover:first-child,.theme__hacker .theme-mobile .dropdown-item:active:first-child,.theme__hacker .theme-mobile .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme__solarized .theme-mobile .dropdown-item{color:#424242}.theme__solarized .theme-mobile .dropdown-item:hover,.theme__solarized .theme-mobile .dropdown-item:active,.theme__solarized .theme-mobile .dropdown-item:focus{color:#b58900;background-color:#f9eaba;text-decoration:none}.theme__solarized .theme-mobile .dropdown-item:hover:first-child,.theme__solarized .theme-mobile .dropdown-item:active:first-child,.theme__solarized .theme-mobile .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme__custom .theme-mobile .dropdown-item{color:#002633}.theme__custom .theme-mobile .dropdown-item:hover,.theme__custom .theme-mobile .dropdown-item:active,.theme__custom .theme-mobile .dropdown-item:focus{color:#0086b3;background-color:#ccf2ff;text-decoration:none}.theme__custom .theme-mobile .dropdown-item:hover:first-child,.theme__custom .theme-mobile .dropdown-item:active:first-child,.theme__custom .theme-mobile .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme-mobile .dropdown:hover .dropdown-content{display:block}.wrapper{display:grid;max-width:960px;justify-content:center;grid-template-columns:minmax(350px,5fr) minmax(242.28571429px,2fr);grid-template-rows:50px auto 1fr auto;grid-column-gap:32px;grid-row-gap:0}@media(max-width:769px){.wrapper{grid-template-columns:minmax(0,5fr) minmax(0,2fr)}}.header-main{grid-area:2/1/3/2}.header-side{grid-area:2/2/3/3}.header{grid-area:2/1/3/3}.main-main{grid-area:3/1/4/2}.main-side{grid-area:3/2/4/3}.main{grid-area:3/1/4/3}.footer-main{grid-area:4/1/5/2}.footer-side{grid-area:4/2/5/3}.footer{grid-area:4/1/5/3}.navbar-main{grid-area:1/1/2/2}.navbar-side{grid-area:1/2/2/3}.navbar{grid-area:1/1/2/3}.header{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.header .title{font-family:montserrat,sans-serif;font-weight:900}.header__image{background-image:url(../images/header/background.jpg),url(../images/header/background.png);width:100%;height:235px;background-size:cover;background-repeat:no-repeat;position:relative;margin-bottom:.5rem}.custom-header{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.custom-header__title{line-height:1.1;font-weight:700;font-family:montserrat,sans-serif}.custom-header__subtitle{line-height:1.2;font-family:montserrat,sans-serif}.custom-header__align-left{-webkit-align-items:flex-start;-moz-align-items:flex-start;-ms-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start}.custom-header__align-center{-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}.custom-header__align-right{-webkit-align-items:flex-end;-moz-align-items:flex-end;-ms-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end}.footer{padding:0 .5rem;position:relative}.theme__dark .footer{color:#bdbdbd;background-color:#403e41}.theme__light .footer{color:#424242;background-color:#eee}.theme__hacker .footer{color:#c7ba00;background-color:#252526}.theme__solarized .footer{color:#424242;background-color:#eee8d5}.theme__custom .footer{color:#002633;background-color:#ebf6fa}.footer__wrapper{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:row;-moz-flex-direction:row;-ms-flex-direction:row;flex-direction:row}@media(max-width:769px){.footer__wrapper{-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}}.footer__social{padding:.5rem 0;position:-webkit-sticky;position:sticky;bottom:70px;-webkit-flex-grow:1;-moz-flex-grow:1;-ms-flex-grow:1;flex-grow:1;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.footer__poweredby{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:.5rem 0}.footer__poweredby p{padding:.125rem}.footer .dropdown{position:absolute;left:.5rem;bottom:.5rem;width:40px;height:40px;border-radius:.25rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.theme__dark .footer .dropdown{color:#bdbdbd;background-color:#403e41}.theme__dark .footer .dropdown:hover,.theme__dark .footer .dropdown:active,.theme__dark .footer .dropdown:focus{color:#82aaff;background-color:#4d4a4e}.theme__light .footer .dropdown{color:#424242;background-color:#eee}.theme__light .footer .dropdown:hover,.theme__light .footer .dropdown:active,.theme__light .footer .dropdown:focus{color:#607d8b;background-color:#d5d4d4}.theme__hacker .footer .dropdown{color:#9e9e9e;background-color:#252526}.theme__hacker .footer .dropdown:hover,.theme__hacker .footer .dropdown:active,.theme__hacker .footer .dropdown:focus{color:#e3cd26;background-color:#323233}.theme__solarized .footer .dropdown{color:#ffb300;background-color:#eee8d5}.theme__solarized .footer .dropdown:hover,.theme__solarized .footer .dropdown:active,.theme__solarized .footer .dropdown:focus{color:#b58900;background-color:#e7dec3}.theme__custom .footer .dropdown{color:#1a5366;background-color:#ebf6fa}.theme__custom .footer .dropdown:hover,.theme__custom .footer .dropdown:active,.theme__custom .footer .dropdown:focus{color:#5cb8d6;background-color:#ebf6fa}.footer .dropdown-trigger{outline:none;border-radius:.25rem;cursor:pointer;border:none;width:100%;height:100%;color:inherit;background-color:inherit}.footer .dropdown-content{position:absolute;bottom:100%;left:0;display:none;height:auto;z-index:10;border-top-left-radius:.15rem;border-top-right-radius:.15rem;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);-moz-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);box-shadow:0 1px 3px 0 rgba(0,0,0,.4)}.footer .dropdown-content a{font-size:.9rem}.theme__dark .footer .dropdown-content{border-bottom:4px solid #424242;background-color:#595b5c}.theme__light .footer .dropdown-content{border-bottom:4px solid #e0e0e0;background-color:#fafafa}.theme__hacker .footer .dropdown-content{border-bottom:4px solid #6b6b6b;background-color:#212421}.theme__solarized .footer .dropdown-content{border-bottom:4px solid #e8b000;background-color:#fafafa}.theme__custom .footer .dropdown-content{border-bottom:4px solid #00ace6;background-color:#f5fcff}.theme__dark .footer .dropdown-content .is-active{background-color:#424242}.theme__light .footer .dropdown-content .is-active{background-color:#e0e0e0}.theme__hacker .footer .dropdown-content .is-active{background-color:#323732}.theme__solarized .footer .dropdown-content .is-active{background-color:#fbf1d1}.theme__custom .footer .dropdown-content .is-active{background-color:#ccf2ff}.footer .dropdown-item{padding:.25rem .75rem;height:100%;text-decoration:none;display:block;font-size:1rem}.theme__dark .footer .dropdown-item{color:#fcfcfa}.theme__dark .footer .dropdown-item:hover,.theme__dark .footer .dropdown-item:active,.theme__dark .footer .dropdown-item:focus{color:#fcfcfa;background-color:#727072;text-decoration:none}.theme__dark .footer .dropdown-item:hover:first-child,.theme__dark .footer .dropdown-item:active:first-child,.theme__dark .footer .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme__light .footer .dropdown-item{color:#424242}.theme__light .footer .dropdown-item:hover,.theme__light .footer .dropdown-item:active,.theme__light .footer .dropdown-item:focus{color:#fcfcfa;background-color:#bdbdbd;text-decoration:none}.theme__light .footer .dropdown-item:hover:first-child,.theme__light .footer .dropdown-item:active:first-child,.theme__light .footer .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme__hacker .footer .dropdown-item{color:#e3cd26}.theme__hacker .footer .dropdown-item:hover,.theme__hacker .footer .dropdown-item:active,.theme__hacker .footer .dropdown-item:focus{color:#fcfcfa;background-color:#464c46;text-decoration:none}.theme__hacker .footer .dropdown-item:hover:first-child,.theme__hacker .footer .dropdown-item:active:first-child,.theme__hacker .footer .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme__solarized .footer .dropdown-item{color:#424242}.theme__solarized .footer .dropdown-item:hover,.theme__solarized .footer .dropdown-item:active,.theme__solarized .footer .dropdown-item:focus{color:#b58900;background-color:#f9eaba;text-decoration:none}.theme__solarized .footer .dropdown-item:hover:first-child,.theme__solarized .footer .dropdown-item:active:first-child,.theme__solarized .footer .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme__custom .footer .dropdown-item{color:#002633}.theme__custom .footer .dropdown-item:hover,.theme__custom .footer .dropdown-item:active,.theme__custom .footer .dropdown-item:focus{color:#0086b3;background-color:#ccf2ff;text-decoration:none}.theme__custom .footer .dropdown-item:hover:first-child,.theme__custom .footer .dropdown-item:active:first-child,.theme__custom .footer .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.footer .select-theme__label{color:inherit;text-transform:capitalize}.footer .select-theme__item{text-transform:capitalize}.footer .select-lang__label{color:inherit;text-transform:capitalize}.footer .social{margin:.25rem}.theme__dark .footer .social a{text-decoration:none;color:#bdbdbd}.theme__dark .footer .social a:hover{color:#f0f0f0;transition:color .2s ease}.theme__light .footer .social a{text-decoration:none;color:#9e9e9e}.theme__light .footer .social a:hover{color:#6b6b6b;transition:color .2s ease}.theme__hacker .footer .social a{text-decoration:none;color:#9e9e9e}.theme__hacker .footer .social a:hover{color:#6b6b6b;transition:color .2s ease}.theme__solarized .footer .social a{text-decoration:none;color:#b58900}.theme__solarized .footer .social a:hover{color:#e8b000;transition:color .2s ease}.theme__custom .footer .social a{text-decoration:none;color:#608f9f}.theme__custom .footer .social a:hover{color:#80a6b3;transition:color .2s ease}.footer .dropdown:hover .dropdown-content{display:block}.theme__dark .footer hr{border-top:1px solid #595b5c!important}.theme__light .footer hr{border-top:1px solid #dbdbdb!important}.theme__hacker .footer hr{border-top:1px solid #c7ba00!important}.theme__solarized .footer hr{border-top:1px solid #ffb300!important}.theme__custom .footer hr{border-top:1px solid #1f637a!important}.sidebar{margin-top:1rem;margin-right:1rem}.sidebar-recent{padding:.5rem}.sidebar-recent__title{font-family:montserrat,sans-serif;font-weight:700}.theme__dark .sidebar-recent__title{color:#aed581}.theme__dark .sidebar-recent__title:hover{color:#ff6188}.theme__light .sidebar-recent__title{color:#424242}.theme__light .sidebar-recent__title:hover{color:#ff6188}.theme__hacker .sidebar-recent__title{color:#e3cd26}.theme__hacker .sidebar-recent__title:hover{color:#ff6188}.theme__solarized .sidebar-recent__title{color:#ffb300}.theme__solarized .sidebar-recent__title:hover{color:#ff6188}.theme__custom .sidebar-recent__title{color:#13566c}.theme__custom .sidebar-recent__title:hover{color:#144a5d}.sidebar-recent__ul{margin-left:.5rem}.sidebar-recent__ul li{text-indent:-.35em;padding-left:.5em}.sidebar-recent__ul li::before{padding-right:.5rem;font-size:1rem;display:inline-block;content:"\2022"}.theme__dark .sidebar-recent__a{color:#fcfcfa}.theme__light .sidebar-recent__a{color:#424242}.theme__hacker .sidebar-recent__a{color:#a1ad64}.theme__solarized .sidebar-recent__a{color:#b58900}.theme__custom .sidebar-recent__a{color:#0b6d8e}.sidebar-hr{margin:1.5rem 0}.alert{padding:.5rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.125rem}.alert-info{background-color:#d7eef9;border:2px solid #b2def4;color:rgba(26,128,180,.9925)}.alert-success{background-color:#d9efd6;border:2px solid #bce3b5;color:rgba(70,149,57,.9925)}.alert-warning{background-color:#fbf6e1;border:2px solid #f6ecbe;color:rgba(180,154,26,.9925)}.alert-danger{background-color:#f5dddd;border:2px solid #ecbdbd;color:rgba(159,46,46,.9925)}.bio{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-align-items:flex-start;-moz-align-items:flex-start;-ms-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-animation:slide-in-down-2 .5s .2s 1 ease both;-moz-animation:slide-in-down-2 .5s .2s 1 ease both;-ms-animation:slide-in-down-2 .5s .2s 1 ease both;-o-animation:slide-in-down-2 .5s .2s 1 ease both;animation:slide-in-down-2 .5s .2s 1 ease both;width:100%;font-family:montserrat,sans-serif}.bio__photo{border-radius:.25rem;width:100%;height:auto;-webkit-box-shadow:0 8px 6px -6px #000;-moz-box-shadow:0 8px 6px -6px #000;box-shadow:0 8px 6px -6px #000}.bio__photo-wrapper{width:90%;height:100%;border-radius:.25rem;margin:1rem auto;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.bio__name{font-weight:700;letter-spacing:1px;font-family:inherit;font-size:26px}.bio__desc{margin:.5rem 0;font-size:14px}.bio__info{font-size:14px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.bio__info--icon{margin-right:.25rem}.theme__dark .bio__info--icon{color:#bdbdbd}.theme__light .bio__info--icon{color:#9e9e9e}.theme__hacker .bio__info--icon{color:#9e9e9e}.theme__solarized .bio__info--icon{color:#b58900}.theme__custom .bio__info--icon{color:#608f9f}.bio__info a{padding-right:1rem;max-width:242.28571429px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bio__social{width:100%;margin-top:.5rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.bio__social a{text-decoration:none!important;width:100%;padding:.5rem;border-radius:.125rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:space-around;-moz-justify-content:space-around;-ms-justify-content:space-around;justify-content:space-around;-ms-flex-pack:space-around}.theme__dark .bio__social a{color:#bdbdbd}.theme__dark .bio__social a:hover,.theme__dark .bio__social a:active,.theme__dark .bio__social a:focus{color:#f0f0f0}.theme__light .bio__social a{color:#9e9e9e}.theme__light .bio__social a:hover,.theme__light .bio__social a:active,.theme__light .bio__social a:focus{color:#6b6b6b}.theme__hacker .bio__social a{color:#9e9e9e}.theme__hacker .bio__social a:hover,.theme__hacker .bio__social a:active,.theme__hacker .bio__social a:focus{color:#6b6b6b}.theme__solarized .bio__social a{color:#b58900}.theme__solarized .bio__social a:hover,.theme__solarized .bio__social a:active,.theme__solarized .bio__social a:focus{color:#e8b000}.theme__custom .bio__social a{color:#608f9f}.theme__custom .bio__social a:hover,.theme__custom .bio__social a:active,.theme__custom .bio__social a:focus{color:#80a6b3}.bio__hr{margin:1rem 0}.bio-hr{border-radius:.5rem}.breadcrumb{margin:1rem;padding:.5rem;border-radius:.25rem;padding:auto;max-width:960px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.theme__dark .breadcrumb{background-color:#212121}.theme__light .breadcrumb{background-color:#eee}.theme__hacker .breadcrumb{background-color:#252526}.theme__solarized .breadcrumb{background-color:#fbf1d1}.theme__custom .breadcrumb{background-color:#ebfaff}.breadcrumb ol{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}.breadcrumb li{display:inline;font-size:1rem}.breadcrumb li a{font-size:.9rem}.theme__dark .breadcrumb li a{color:#82aaff}.theme__dark .breadcrumb li a:hover,.theme__dark .breadcrumb li a:active,.theme__dark .breadcrumb li a:focus{color:#ff6188}.theme__light .breadcrumb li a{color:#424242}.theme__light .breadcrumb li a:hover,.theme__light .breadcrumb li a:active,.theme__light .breadcrumb li a:focus{color:#ff6188}.theme__hacker .breadcrumb li a{color:#e08c48}.theme__hacker .breadcrumb li a:hover,.theme__hacker .breadcrumb li a:active,.theme__hacker .breadcrumb li a:focus{color:#ff6188}.theme__solarized .breadcrumb li a{color:#424242}.theme__solarized .breadcrumb li a:hover,.theme__solarized .breadcrumb li a:active,.theme__solarized .breadcrumb li a:focus{color:#ff6188}.theme__custom .breadcrumb li a{color:#0b6d8e}.theme__custom .breadcrumb li a:hover,.theme__custom .breadcrumb li a:active,.theme__custom .breadcrumb li a:focus{color:#144a5d}.breadcrumb li:last-child a{text-decoration:none;cursor:default}.theme__dark .breadcrumb li:last-child a{color:#bdbdbd}.theme__light .breadcrumb li:last-child a{color:#bdbdbd}.theme__hacker .breadcrumb li:last-child a{color:#6b6b6b}.theme__solarized .breadcrumb li:last-child a{color:#bdbdbd}.theme__custom .breadcrumb li:last-child a{color:#364549}.breadcrumb li+li:before{padding:.5rem;content:"/\00a0"}.theme__dark .breadcrumb li+li:before{color:#82aaff}.theme__light .breadcrumb li+li:before{color:#424242}.theme__hacker .breadcrumb li+li:before{color:#e08c48}.theme__solarized .breadcrumb li+li:before{color:#424242}.theme__custom .breadcrumb li+li:before{color:#0b6d8e}.mermaid{width:100%;text-align:center;margin-bottom:1rem;overflow:auto}.diagram{overflow:auto;margin-right:1rem;margin-bottom:1rem;border-radius:.25rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}[id^=msc]{overflow:auto;margin:.5rem 0;text-align:center}[id^=flowchart]{overflow:auto}[id^=WaveDrom_Display]{overflow:auto;background-color:#fcfcfa;border-radius:.25rem}.expand{position:relative}.expand-label{cursor:pointer;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}.expand-content{display:none}.expand-icon{padding-top:.4rem;padding-right:.125rem;-webkit-transition:all .1s ease;-moz-transition:all .1s ease;-ms-transition:all .1s ease;-o-transition:all .1s ease;transition:all .1s ease}.expand-icon__down{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.expand-icon__right{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}.features{max-width:960;height:200px;font-family:montserrat,sans-serif;padding:.5rem;margin:0 4rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}@media(max-width:769px){.features{margin:0 1rem}}.features__title{font-size:32px;font-weight:700}.features ul{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:1.5rem .5rem}.features li{padding:.125rem .5rem;width:30%;font-size:16px;max-width:350px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.features li::before{content:'✔️';z-index:1}.features-text{max-width:960;height:200px;padding:.5rem;margin:0 4rem;text-align:center;font-family:montserrat,sans-serif;font-weight:700;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.features-text__item{margin-bottom:1.5rem}.features-intro{max-width:960;height:200px;padding:.5rem;margin:0 4rem;text-align:center;font-family:montserrat,sans-serif;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}@media(max-width:769px){.features-intro{margin:1rem}}.features-intro__title{font-weight:700;line-height:1;margin-bottom:1.5rem}.features-intro__links a{padding:.4rem;font-size:16px}.features-intro__release-info{margin-top:.25rem;font-size:11px}.gtt{position:absolute;right:.5rem;bottom:.5rem;width:40px;height:40px;border-radius:.25rem;cursor:pointer;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.theme__dark .gtt{color:#bdbdbd;background-color:#403e41}.theme__dark .gtt:hover,.theme__dark .gtt:active,.theme__dark .gtt:focus{color:#82aaff;background-color:#4d4a4e}.theme__light .gtt{color:#424242;background-color:#eee}.theme__light .gtt:hover,.theme__light .gtt:active,.theme__light .gtt:focus{color:#607d8b;background-color:#d5d4d4}.theme__hacker .gtt{color:#9e9e9e;background-color:#252526}.theme__hacker .gtt:hover,.theme__hacker .gtt:active,.theme__hacker .gtt:focus{color:#e3cd26;background-color:#323233}.theme__solarized .gtt{color:#ffb300;background-color:#eee8d5}.theme__solarized .gtt:hover,.theme__solarized .gtt:active,.theme__solarized .gtt:focus{color:#b58900;background-color:#e7dec3}.theme__custom .gtt{color:#1a5366;background-color:#ebf6fa}.theme__custom .gtt:hover,.theme__custom .gtt:active,.theme__custom .gtt:focus{color:#5cb8d6;background-color:#ebf6fa}@media(max-width:769px){.gtt{position:fixed}}.hr-fade{height:1px;width:100%}.theme__dark .hr-fade{color:#595b5c;background-image:linear-gradient(90deg,transparent,#595B5C 50%,transparent 100%)}.theme__light .hr-fade{color:#dbdbdb;background-image:linear-gradient(90deg,transparent,#dbdbdb 50%,transparent 100%)}.theme__hacker .hr-fade{color:#c7ba00;background-image:linear-gradient(90deg,transparent,#C7BA00 50%,transparent 100%)}.theme__solarized .hr-fade{color:#ffb300;background-image:linear-gradient(90deg,transparent,#ffb300 50%,transparent 100%)}.theme__custom .hr-fade{color:#1f637a;background-image:linear-gradient(90deg,transparent,#1f637a 50%,transparent 100%)}.hr-slash{width:100%;height:7px;background-size:10px 10px}.theme__dark .hr-slash{color:#595b5c;background-image:linear-gradient(-45deg,transparent,transparent 25%,currentColor 25%,currentColor 50%,transparent 50%,transparent 75%,currentColor 75%)}.theme__light .hr-slash{color:#dbdbdb;background-image:linear-gradient(-45deg,transparent,transparent 25%,currentColor 25%,currentColor 50%,transparent 50%,transparent 75%,currentColor 75%)}.theme__hacker .hr-slash{color:#c7ba00;background-image:linear-gradient(-45deg,transparent,transparent 25%,currentColor 25%,currentColor 50%,transparent 50%,transparent 75%,currentColor 75%)}.theme__solarized .hr-slash{color:#ffb300;background-image:linear-gradient(-45deg,transparent,transparent 25%,currentColor 25%,currentColor 50%,transparent 50%,transparent 75%,currentColor 75%)}.theme__custom .hr-slash{color:#1f637a;background-image:linear-gradient(-45deg,transparent,transparent 25%,currentColor 25%,currentColor 50%,transparent 50%,transparent 75%,currentColor 75%)}.theme__dark .hr-dots{color:#595b5c;width:100%;border-width:0 0 7px;border-style:solid;border-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDEiIHdpZHRoPSI4IiBoZWlnaHQ9IjQiPjxjaXJjbGUgZmlsbD0iIzU5NWI1YyIgY3g9IjEiIGN5PSIuNSIgcj0iLjUiLz48L3N2Zz4=) 0 0 100% repeat}.theme__light .hr-dots{color:#dbdbdb;width:100%;border-width:0 0 7px;border-style:solid;border-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDEiIHdpZHRoPSI4IiBoZWlnaHQ9IjQiPjxjaXJjbGUgZmlsbD0iI2RiZGJkYiIgY3g9IjEiIGN5PSIuNSIgcj0iLjUiLz48L3N2Zz4=) 0 0 100% repeat}.theme__hacker .hr-dots{color:#c7ba00;width:100%;border-width:0 0 7px;border-style:solid;border-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDEiIHdpZHRoPSI4IiBoZWlnaHQ9IjQiPjxjaXJjbGUgZmlsbD0iI2M3YmEwMCIgY3g9IjEiIGN5PSIuNSIgcj0iLjUiLz48L3N2Zz4=) 0 0 100% repeat}.theme__solarized .hr-dots{color:#ffb300;width:100%;border-width:0 0 7px;border-style:solid;border-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDEiIHdpZHRoPSI4IiBoZWlnaHQ9IjQiPjxjaXJjbGUgZmlsbD0iI2ZmYjMwMCIgY3g9IjEiIGN5PSIuNSIgcj0iLjUiLz48L3N2Zz4=) 0 0 100% repeat}.theme__custom .hr-dots{color:#1f637a;width:100%;border-width:0 0 7px;border-style:solid;border-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDEiIHdpZHRoPSI4IiBoZWlnaHQ9IjQiPjxjaXJjbGUgZmlsbD0iIzFmNjM3YSIgY3g9IjEiIGN5PSIuNSIgcj0iLjUiLz48L3N2Zz4=) 0 0 100% repeat}.hr-vertical-lines{height:5px;background-image:linear-gradient(90deg,currentColor,currentColor 33.33%,transparent 33.33%,transparent 100%);background-size:3px 100%;width:75%}.theme__dark .hr-vertical-lines{color:#595b5c}.theme__light .hr-vertical-lines{color:#dbdbdb}.theme__hacker .hr-vertical-lines{color:#c7ba00}.theme__solarized .hr-vertical-lines{color:#ffb300}.theme__custom .hr-vertical-lines{color:#1f637a}code.has-jax{font:inherit;font-size:100%;background:inherit;border:inherit;color:#515151}.MathJax{font-size:120%!important}div.notices{margin:2rem 0;position:relative;border-radius:.2rem;color:#fff;padding:.5rem 1rem .5rem 2rem;position:relative}div.notices p{padding:0;display:block;font-size:1rem;margin-top:0;margin-bottom:0}div.notices p:first-child:before{position:absolute;top:-27px;color:#fff;content:'💡';left:10px}div.notices p:first-child:after{position:absolute;top:-27px;color:#fff;left:2rem}div.notices.info p:first-child:after{content:'Info';font-family:montserrat,sans-serif}div.notices.warning p:first-child:after{content:'Warning';font-family:montserrat,sans-serif}div.notices.note p:first-child:after{content:'Note';font-family:montserrat,sans-serif}div.notices.tip p:first-child:after{content:'Tip';font-family:montserrat,sans-serif}div.notices.note{border-top:30px solid #6bb1e0;background:#e6f3fb;color:rgba(47,103,141,.995)!important;font-family:merriweather,serif}div.notices.info{border-top:30px solid #f1b37e;background:#fefaf5;color:rgba(150,90,38,.995)!important;font-family:merriweather,serif}div.notices.tip{border-top:30px solid #84c578;background:#e8f7e6;color:rgba(72,125,63,.995)!important;font-family:merriweather,serif}div.notices.warning{border-top:30px solid #d58181;background:#fbeded;color:rgba(132,56,56,.995)!important;font-family:merriweather,serif}.pagination{border-radius:.25rem;margin:2rem 1rem;padding:.5rem 0;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.theme__dark .pagination{background-color:#212121}.theme__light .pagination{background-color:#eee}.theme__hacker .pagination{background-color:#252526}.theme__solarized .pagination{background-color:#fbf1d1}.theme__custom .pagination{background-color:#d6edf5}.pagination li{border-radius:.25rem}.theme__dark .pagination li.disabled a:hover,.theme__dark .pagination li.disabled a:active,.theme__dark .pagination li.disabled a:focus{color:#fcfcfa;text-decoration:none}.theme__light .pagination li.disabled a:hover,.theme__light .pagination li.disabled a:active,.theme__light .pagination li.disabled a:focus{color:#757575;text-decoration:none}.theme__hacker .pagination li.disabled a:hover,.theme__hacker .pagination li.disabled a:active,.theme__hacker .pagination li.disabled a:focus{color:#fcfcfa;text-decoration:none}.theme__solarized .pagination li.disabled a:hover,.theme__solarized .pagination li.disabled a:active,.theme__solarized .pagination li.disabled a:focus{color:#455a64;text-decoration:none}.theme__custom .pagination li.disabled a:hover,.theme__custom .pagination li.disabled a:active,.theme__custom .pagination li.disabled a:focus{color:#09c;text-decoration:none}.theme__dark .pagination li.active a{color:#ff6188}.theme__light .pagination li.active a{color:#ff6188}.theme__hacker .pagination li.active a{color:#ff6188}.theme__solarized .pagination li.active a{color:#ff6188}.theme__custom .pagination li.active a{color:#144a5d}.pagination a{font-size:1.25rem;padding:.5rem .75rem}.theme__dark .pagination a{color:#fcfcfa}.theme__dark .pagination a:hover,.theme__dark .pagination a:active,.theme__dark .pagination a:focus{color:#ff6188}.theme__light .pagination a{color:#757575}.theme__light .pagination a:hover,.theme__light .pagination a:active,.theme__light .pagination a:focus{color:#ff6188}.theme__hacker .pagination a{color:#fcfcfa}.theme__hacker .pagination a:hover,.theme__hacker .pagination a:active,.theme__hacker .pagination a:focus{color:#ff6188}.theme__solarized .pagination a{color:#455a64}.theme__solarized .pagination a:hover,.theme__solarized .pagination a:active,.theme__solarized .pagination a:focus{color:#ff6188}.theme__custom .pagination a{color:#09c}.theme__custom .pagination a:hover,.theme__custom .pagination a:active,.theme__custom .pagination a:focus{color:#144a5d}.theme__dark .pagination .active{background-color:#212121}.theme__light .pagination .active{background-color:#eee}.theme__hacker .pagination .active{background-color:#252526}.theme__solarized .pagination .active{background-color:#fbf1d1}.theme__custom .pagination .active{background-color:#d6edf5}.pagination-single{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%;margin:1rem 0}.pagination-single__left,.pagination-single__right{max-width:960px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-ms-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out;padding:.25rem;border-radius:.125rem}.pagination-single__left-title,.pagination-single__right-title{font-size:16.8px;padding-bottom:.3rem;max-width:960px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.theme__dark .pagination-single__left:hover .pagination-single__icon,.theme__dark .pagination-single__left:active .pagination-single__icon,.theme__dark .pagination-single__left:focus .pagination-single__icon,.theme__dark .pagination-single__right:hover .pagination-single__icon,.theme__dark .pagination-single__right:active .pagination-single__icon,.theme__dark .pagination-single__right:focus .pagination-single__icon{color:#82aaff;background-color:#4d4a4e}.theme__light .pagination-single__left:hover .pagination-single__icon,.theme__light .pagination-single__left:active .pagination-single__icon,.theme__light .pagination-single__left:focus .pagination-single__icon,.theme__light .pagination-single__right:hover .pagination-single__icon,.theme__light .pagination-single__right:active .pagination-single__icon,.theme__light .pagination-single__right:focus .pagination-single__icon{color:#607d8b;background-color:#d5d4d4}.theme__hacker .pagination-single__left:hover .pagination-single__icon,.theme__hacker .pagination-single__left:active .pagination-single__icon,.theme__hacker .pagination-single__left:focus .pagination-single__icon,.theme__hacker .pagination-single__right:hover .pagination-single__icon,.theme__hacker .pagination-single__right:active .pagination-single__icon,.theme__hacker .pagination-single__right:focus .pagination-single__icon{color:#e3cd26;background-color:#323233}.theme__solarized .pagination-single__left:hover .pagination-single__icon,.theme__solarized .pagination-single__left:active .pagination-single__icon,.theme__solarized .pagination-single__left:focus .pagination-single__icon,.theme__solarized .pagination-single__right:hover .pagination-single__icon,.theme__solarized .pagination-single__right:active .pagination-single__icon,.theme__solarized .pagination-single__right:focus .pagination-single__icon{color:#b58900;background-color:#e7dec3}.theme__custom .pagination-single__left:hover .pagination-single__icon,.theme__custom .pagination-single__left:active .pagination-single__icon,.theme__custom .pagination-single__left:focus .pagination-single__icon,.theme__custom .pagination-single__right:hover .pagination-single__icon,.theme__custom .pagination-single__right:active .pagination-single__icon,.theme__custom .pagination-single__right:focus .pagination-single__icon{color:#5cb8d6;background-color:#ebf6fa}.pagination-single__left:hover,.pagination-single__left:active,.pagination-single__left:focus{-webkit-transform:translateX(-.25rem);-moz-transform:translateX(-.25rem);-ms-transform:translateX(-.25rem);transform:translateX(-.25rem)}.pagination-single__right:hover,.pagination-single__right:active,.pagination-single__right:focus{-webkit-transform:translateX(.25rem);-moz-transform:translateX(.25rem);-ms-transform:translateX(.25rem);transform:translateX(.25rem)}.pagination-single__icon{width:28px;height:28px;border-radius:100%;margin:0 .5rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.theme__dark .pagination-single__icon{color:#bdbdbd;background-color:#403e41}.theme__light .pagination-single__icon{color:#424242;background-color:#eee}.theme__hacker .pagination-single__icon{color:#9e9e9e;background-color:#252526}.theme__solarized .pagination-single__icon{color:#ffb300;background-color:#eee8d5}.theme__custom .pagination-single__icon{color:#1a5366;background-color:#ebf6fa}.pagination-list{border-radius:.25rem;margin:2rem 1rem;padding:.5rem 0;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:space-around;-moz-justify-content:space-around;-ms-justify-content:space-around;justify-content:space-around;-ms-flex-pack:space-around}.theme__dark .pagination-list{background-color:#212121}.theme__light .pagination-list{background-color:#eee}.theme__hacker .pagination-list{background-color:#252526}.theme__solarized .pagination-list{background-color:#fbf1d1}.theme__custom .pagination-list{background-color:#d6edf5}.pagination-list__item{font-size:.95rem;text-decoration:none!important;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}.theme__dark .pagination-list__item--number{color:#fcfcfa}.theme__light .pagination-list__item--number{color:#757575}.theme__hacker .pagination-list__item--number{color:#fcfcfa}.theme__solarized .pagination-list__item--number{color:#455a64}.theme__custom .pagination-list__item--number{color:#09c}.pagination-list__item .enable{padding:0 .125rem}.theme__dark .pagination-list__item .enable{color:#82aaff}.theme__light .pagination-list__item .enable{color:#424242}.theme__hacker .pagination-list__item .enable{color:#996287}.theme__solarized .pagination-list__item .enable{color:#455a64}.theme__custom .pagination-list__item .enable{color:#1d6c87}.pagination-list__item .enable:hover,.pagination-list__item .enable:active,.pagination-list__item .enable:focus{cursor:pointer;border-radius:.1rem;text-decoration:underline}.theme__dark .pagination-list__item .enable:hover,.theme__dark .pagination-list__item .enable:active,.theme__dark .pagination-list__item .enable:focus{color:#ff6188}.theme__light .pagination-list__item .enable:hover,.theme__light .pagination-list__item .enable:active,.theme__light .pagination-list__item .enable:focus{color:#ff6188}.theme__hacker .pagination-list__item .enable:hover,.theme__hacker .pagination-list__item .enable:active,.theme__hacker .pagination-list__item .enable:focus{color:#ff6188}.theme__solarized .pagination-list__item .enable:hover,.theme__solarized .pagination-list__item .enable:active,.theme__solarized .pagination-list__item .enable:focus{color:#ff6188}.theme__custom .pagination-list__item .enable:hover,.theme__custom .pagination-list__item .enable:active,.theme__custom .pagination-list__item .enable:focus{color:#144a5d}.pagination-list__item .disabled{cursor:default}.theme__dark .pagination-list__item .disabled{color:#757575}.theme__light .pagination-list__item .disabled{color:#bdbdbd}.theme__hacker .pagination-list__item .disabled{color:#424242}.theme__solarized .pagination-list__item .disabled{color:#bdbdbd}.theme__custom .pagination-list__item .disabled{color:#afc7cf}.pagination-list .icon{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:stretch;-moz-align-items:stretch;-ms-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}a.pswp__share--facebook:hover{background:#727072;color:#fcfcfa}a.pswp__share--facebook:hover:before{border-bottom-color:#727072}a.pswp__share--twitter:hover{background:#727072;color:#fcfcfa}a.pswp__share--pinterest:hover{background:#727072;color:#fcfcfa}a.pswp__share--download:hover{background:#727072;color:#fcfcfa}.pswp__share-tooltip{background:#403e41}.pswp__share-tooltip a{color:#fcfcfa}.pswp__share-tooltip a:hover{text-decoration:none;color:#fcfcfa}a.pswp__share--facebook:before{border-bottom-color:#403e41}.pswp__bg{background:rgba(0,0,0,.8)}.related{margin:2rem 0;padding:.5rem;width:100%;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.related__title{font-size:32px}.theme__dark .related__title{color:#fcfcfa}.theme__light .related__title{color:#424242}.theme__hacker .related__title{color:#fcfcfa}.theme__solarized .related__title{color:#424242}.theme__custom .related__title{color:#002633}.related__link{font-size:16.8px}.theme__dark .related__link{color:#a9dc76}.theme__light .related__link{color:#607d8b}.theme__hacker .related__link{color:#c7ba00}.theme__solarized .related__link{color:#ffb300}.theme__custom .related__link{color:#1d6c87}.related-ul{-webkit-align-self:center;-moz-align-self:center;-ms-align-self:center;align-self:center;list-style-type:disc}.search{position:relative;border-radius:.25rem;height:35px;z-index:6;margin-bottom:.5rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}.theme__dark .search{border:2px solid #1e1e1e;background-color:#212121}.theme__light .search{border:2px solid #e6e6e6;background-color:#eee}.theme__hacker .search{border:2px solid #111;background-color:#252526}.theme__solarized .search{border:2px solid #f7e3a2;background-color:#fbf1d1}.theme__custom .search{border:2px solid #6cc3e0;background-color:#ebfaff}.search .icon{padding:.25rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}.theme__dark .search .icon{color:#727072}.theme__light .search .icon{color:#bdbdbd}.theme__hacker .search .icon{color:#727072}.theme__solarized .search .icon{color:#b58900}.theme__custom .search .icon{color:#abdded}.search .input{width:100%;font-size:.9rem;border:none;outline:none;padding-right:1rem;max-width:2fr;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.theme__dark .search .input{color:#fcfcfa;background-color:inherit}.theme__dark .search .input.placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__dark .search .input:-moz-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__dark .search .input::-moz-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__dark .search .input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__dark .search .input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__light .search .input{color:#424242;background-color:inherit}.theme__light .search .input.placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__light .search .input:-moz-placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__light .search .input::-moz-placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__light .search .input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__light .search .input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__hacker .search .input{color:#1fff2a;background-color:inherit}.theme__hacker .search .input.placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__hacker .search .input:-moz-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__hacker .search .input::-moz-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__hacker .search .input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__hacker .search .input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__solarized .search .input{color:#b58900;background-color:inherit}.theme__solarized .search .input.placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__solarized .search .input:-moz-placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__solarized .search .input::-moz-placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__solarized .search .input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__solarized .search .input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__custom .search .input{color:#002633;background-color:inherit}.theme__custom .search .input.placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.theme__custom .search .input:-moz-placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.theme__custom .search .input::-moz-placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.theme__custom .search .input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.theme__custom .search .input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.search-content{margin-top:.25rem;max-height:350px;overflow:auto}.search-content a{text-decoration:none!important}.menu-item{padding:.25rem}.menu-item__title{font-size:1rem}.theme__dark .menu-item__title{color:#fcfcfa}.theme__light .menu-item__title{color:#424242}.theme__hacker .menu-item__title{color:#1fff2a}.theme__solarized .menu-item__title{color:#424242}.theme__custom .menu-item__title{color:#002633}.menu-item__desc{font-size:.8rem;max-width:2fr;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.theme__dark .menu-item__desc{color:#fcfcfa;opacity:.78}.theme__light .menu-item__desc{color:#424242;opacity:.78}.theme__hacker .menu-item__desc{color:#1fff2a;opacity:.78}.theme__solarized .menu-item__desc{color:#b58900;opacity:.78}.theme__custom .menu-item__desc{color:#002633;opacity:.78}#search-results.dropdown{display:none}#search-results.dropdown.is-active{display:inline-block;margin-top:.25rem;position:absolute;top:35px;width:100%;border-radius:.1rem;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);-moz-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);box-shadow:0 1px 3px 0 rgba(0,0,0,.4)}.theme__dark #search-results.dropdown.is-active{color:inherit;background-color:#4d4a4e}.theme__light #search-results.dropdown.is-active{color:#424242;background-color:#eee}.theme__hacker #search-results.dropdown.is-active{color:#1fff2a;background-color:#373738}.theme__solarized #search-results.dropdown.is-active{color:#b58900;background-color:#fbf1d1}.theme__custom #search-results.dropdown.is-active{color:#002633;background-color:#fafeff}#search-results .dropdown-content{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}#search-results .dropdown-item{font-size:1rem;padding:.125rem}#search-results .dropdown-item:hover,#search-results .dropdown-item:active,#search-results .dropdown-item:focus{border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem}.theme__dark #search-results .dropdown-item:hover,.theme__dark #search-results .dropdown-item:active,.theme__dark #search-results .dropdown-item:focus{background-color:#727072}.theme__light #search-results .dropdown-item:hover,.theme__light #search-results .dropdown-item:active,.theme__light #search-results .dropdown-item:focus{background-color:#d5d4d4}.theme__hacker #search-results .dropdown-item:hover,.theme__hacker #search-results .dropdown-item:active,.theme__hacker #search-results .dropdown-item:focus{background-color:#48484a}.theme__solarized #search-results .dropdown-item:hover,.theme__solarized #search-results .dropdown-item:active,.theme__solarized #search-results .dropdown-item:focus{background-color:#f7e3a2}.theme__custom #search-results .dropdown-item:hover,.theme__custom #search-results .dropdown-item:active,.theme__custom #search-results .dropdown-item:focus{background-color:#e6f9ff}.theme__dark #search-results .dropdown-item.is-active{background-color:#727072}.theme__light #search-results .dropdown-item.is-active{background-color:#d5d4d4}.theme__hacker #search-results .dropdown-item.is-active{background-color:#48484a}.theme__solarized #search-results .dropdown-item.is-active{background-color:#f7e3a2}.theme__custom #search-results .dropdown-item.is-active{background-color:#e6f9ff}.mobile-search{position:absolute;z-index:12;width:100%;overflow:hidden}.mobile-search__top{width:100%;height:50px;text-align:right;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}.theme__dark .mobile-search__top{border-bottom:1px solid #2d2a2e;background-color:#403e41}.theme__light .mobile-search__top{border-bottom:1px solid #e0e0e0;background-color:#eaeaea}.theme__hacker .mobile-search__top{border-bottom:1px solid #252526;background-color:#252526}.theme__solarized .mobile-search__top{border-bottom:1px solid #b58900;background-color:#eee8d5}.theme__custom .mobile-search__top{border-bottom:1px solid #1d6c87;background-color:#c6e6f1}.mobile-search__top--icon{width:50px;height:50px;cursor:pointer;position:absolute;right:0;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.theme__dark .mobile-search__top--icon{color:#fcfcfa}.theme__dark .mobile-search__top--icon:hover,.theme__dark .mobile-search__top--icon:active,.theme__dark .mobile-search__top--icon:focus{color:#ff6188}.theme__light .mobile-search__top--icon{color:#9e9e9e}.theme__light .mobile-search__top--icon:hover,.theme__light .mobile-search__top--icon:active,.theme__light .mobile-search__top--icon:focus{color:#ff6188}.theme__hacker .mobile-search__top--icon{color:#dbdbdb}.theme__hacker .mobile-search__top--icon:hover,.theme__hacker .mobile-search__top--icon:active,.theme__hacker .mobile-search__top--icon:focus{color:#ff6188}.theme__solarized .mobile-search__top--icon{color:#b58900}.theme__solarized .mobile-search__top--icon:hover,.theme__solarized .mobile-search__top--icon:active,.theme__solarized .mobile-search__top--icon:focus{color:#ff6188}.theme__custom .mobile-search__top--icon{color:#002633}.theme__custom .mobile-search__top--icon:hover,.theme__custom .mobile-search__top--icon:active,.theme__custom .mobile-search__top--icon:focus{color:#144a5d}.mobile-search__top--input{width:calc(100% - 70px);height:70%;outline:none;border:none;border-radius:.25rem;padding:0 1rem;font-size:1.1rem}.theme__dark .mobile-search__top--input{color:#fcfcfa;background-color:#403e41}.theme__dark .mobile-search__top--input.placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__dark .mobile-search__top--input:-moz-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__dark .mobile-search__top--input::-moz-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__dark .mobile-search__top--input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__dark .mobile-search__top--input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__light .mobile-search__top--input{color:#424242;background-color:#eaeaea}.theme__light .mobile-search__top--input.placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__light .mobile-search__top--input:-moz-placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__light .mobile-search__top--input::-moz-placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__light .mobile-search__top--input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__light .mobile-search__top--input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__hacker .mobile-search__top--input{color:#1fff2a;background-color:#252526}.theme__hacker .mobile-search__top--input.placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__hacker .mobile-search__top--input:-moz-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__hacker .mobile-search__top--input::-moz-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__hacker .mobile-search__top--input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__hacker .mobile-search__top--input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__solarized .mobile-search__top--input{color:#424242;background-color:#eee8d5}.theme__solarized .mobile-search__top--input.placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__solarized .mobile-search__top--input:-moz-placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__solarized .mobile-search__top--input::-moz-placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__solarized .mobile-search__top--input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__solarized .mobile-search__top--input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__custom .mobile-search__top--input{color:#002633;background-color:#c6e6f1}.theme__custom .mobile-search__top--input.placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.theme__custom .mobile-search__top--input:-moz-placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.theme__custom .mobile-search__top--input::-moz-placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.theme__custom .mobile-search__top--input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.theme__custom .mobile-search__top--input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.mobile-search__body{width:100%;height:100vh;overflow:auto}.theme__dark .mobile-search__body{color:#fcfcfa;background-color:#2d2a2e}.theme__light .mobile-search__body{color:#424242;background-color:#fafafa}.theme__hacker .mobile-search__body{color:#1fff2a;background-color:#151715}.theme__solarized .mobile-search__body{color:#424242;background-color:#fdf7e3}.theme__custom .mobile-search__body{color:#002633;background-color:#f7fdff}.mobile-search__btn{position:absolute;top:0;right:35px;width:35px;height:50px;padding:.25rem;cursor:pointer;display:none;z-index:7;-webkit-animation:slide-in-down .5s .25s 1 ease both;-moz-animation:slide-in-down .5s .25s 1 ease both;-ms-animation:slide-in-down .5s .25s 1 ease both;-o-animation:slide-in-down .5s .25s 1 ease both;animation:slide-in-down .5s .25s 1 ease both}@media(max-width:769px){.mobile-search__btn{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}}.theme__dark .mobile-search__btn{color:#fcfcfa}.theme__dark .mobile-search__btn:hover,.theme__dark .mobile-search__btn:active,.theme__dark .mobile-search__btn:focus{color:#ff6188}.theme__light .mobile-search__btn{color:#9e9e9e}.theme__light .mobile-search__btn:hover,.theme__light .mobile-search__btn:active,.theme__light .mobile-search__btn:focus{color:#ff6188}.theme__hacker .mobile-search__btn{color:#dbdbdb}.theme__hacker .mobile-search__btn:hover,.theme__hacker .mobile-search__btn:active,.theme__hacker .mobile-search__btn:focus{color:#ff6188}.theme__solarized .mobile-search__btn{color:#b58900}.theme__solarized .mobile-search__btn:hover,.theme__solarized .mobile-search__btn:active,.theme__solarized .mobile-search__btn:focus{color:#ff6188}.theme__custom .mobile-search__btn{color:#002633}.theme__custom .mobile-search__btn:hover,.theme__custom .mobile-search__btn:active,.theme__custom .mobile-search__btn:focus{color:#144a5d}.mobile-search__content a{text-decoration:none!important}.mobile-search__item{padding:.5rem}.mobile-search__item--title{font-size:1.2rem}.theme__dark .mobile-search__item--title{color:#fcfcfa}.theme__light .mobile-search__item--title{color:#424242}.theme__hacker .mobile-search__item--title{color:#1fff2a}.theme__solarized .mobile-search__item--title{color:#424242}.theme__custom .mobile-search__item--title{color:#002633}.mobile-search__item--desc{font-size:.9rem}.theme__dark .mobile-search__item--desc{color:#fcfcfa;opacity:.65}.theme__light .mobile-search__item--desc{color:#424242;opacity:.65}.theme__hacker .mobile-search__item--desc{color:#1fff2a;opacity:.65}.theme__solarized .mobile-search__item--desc{color:#b58900;opacity:.65}.theme__custom .mobile-search__item--desc{color:#002633;opacity:.65}.theme__dark .mobile-search__item:hover,.theme__dark .mobile-search__item:active,.theme__dark .mobile-search__item:focus{background-color:#727072}.theme__light .mobile-search__item:hover,.theme__light .mobile-search__item:active,.theme__light .mobile-search__item:focus{background-color:#d5d4d4}.theme__hacker .mobile-search__item:hover,.theme__hacker .mobile-search__item:active,.theme__hacker .mobile-search__item:focus{background-color:#48484a}.theme__solarized .mobile-search__item:hover,.theme__solarized .mobile-search__item:active,.theme__solarized .mobile-search__item:focus{background-color:#f7e3a2}.theme__custom .mobile-search__item:hover,.theme__custom .mobile-search__item:active,.theme__custom .mobile-search__item:focus{background-color:#e6f9ff}.summary-card{margin:0 .5rem;padding:0 .5rem}.summary-card .title a{font-family:montserrat,sans-serif;font-weight:700}.theme__dark .summary-card .title a{color:#ffd866}.theme__dark .summary-card .title a:hover,.theme__dark .summary-card .title a:active,.theme__dark .summary-card .title a:focus{color:#ff6188}.theme__light .summary-card .title a{color:#607d8b}.theme__light .summary-card .title a:hover,.theme__light .summary-card .title a:active,.theme__light .summary-card .title a:focus{color:#ff6188}.theme__hacker .summary-card .title a{color:#a1ad64}.theme__hacker .summary-card .title a:hover,.theme__hacker .summary-card .title a:active,.theme__hacker .summary-card .title a:focus{color:#ff6188}.theme__solarized .summary-card .title a{color:#b58900}.theme__solarized .summary-card .title a:hover,.theme__solarized .summary-card .title a:active,.theme__solarized .summary-card .title a:focus{color:#ff6188}.theme__custom .summary-card .title a{color:#001f29}.theme__custom .summary-card .title a:hover,.theme__custom .summary-card .title a:active,.theme__custom .summary-card .title a:focus{color:#144a5d}.theme__dark .summary-card .subtitle{color:#fcfcfa}.theme__light .summary-card .subtitle{color:#424242}.theme__hacker .summary-card .subtitle{color:#cdf5cc}.theme__solarized .summary-card .subtitle{color:#cf9c00}.theme__custom .summary-card .subtitle{color:#3d7a8f}.summary-card__content{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.summary-card__text{margin-top:1rem;line-height:1.7rem;font-family:merriweather,serif}.summary-card__image{width:100%;height:100%}.summary-card__image-wrapper{height:100%;width:auto;margin:0 auto;padding:1rem;padding-bottom:0}.summary-card__video{width:100%;max-height:500px;object-fit:contain}.summary-card__video-wrapper{padding:1rem;padding-bottom:0}.summary-card hr{margin-top:1.5rem}.theme__dark .summary-card hr{border-top:1px solid #595b5c}.theme__light .summary-card hr{border-top:1px solid #dbdbdb}.theme__hacker .summary-card hr{border-top:1px solid #c7ba00}.theme__solarized .summary-card hr{border-top:1px solid #ffb300}.theme__custom .summary-card hr{border-top:1px solid #1f637a}.summary-card:not(:last-child) hr{margin-bottom:4rem}.summary-card:last-child hr{margin-bottom:2rem}.summary-classic{padding:0 1rem}.summary-classic .title{font-size:24px}.summary-classic .title a{font-family:montserrat,sans-serif;font-weight:700}.theme__dark .summary-classic .title a{color:#ffd866}.theme__dark .summary-classic .title a:hover,.theme__dark .summary-classic .title a:active,.theme__dark .summary-classic .title a:focus{color:#ff6188}.theme__light .summary-classic .title a{color:#607d8b}.theme__light .summary-classic .title a:hover,.theme__light .summary-classic .title a:active,.theme__light .summary-classic .title a:focus{color:#ff6188}.theme__hacker .summary-classic .title a{color:#a1ad64}.theme__hacker .summary-classic .title a:hover,.theme__hacker .summary-classic .title a:active,.theme__hacker .summary-classic .title a:focus{color:#ff6188}.theme__solarized .summary-classic .title a{color:#b58900}.theme__solarized .summary-classic .title a:hover,.theme__solarized .summary-classic .title a:active,.theme__solarized .summary-classic .title a:focus{color:#ff6188}.theme__custom .summary-classic .title a{color:#001f29}.theme__custom .summary-classic .title a:hover,.theme__custom .summary-classic .title a:active,.theme__custom .summary-classic .title a:focus{color:#144a5d}.theme__dark .summary-classic .subtitle{color:#fcfcfa}.theme__light .summary-classic .subtitle{color:#424242}.theme__hacker .summary-classic .subtitle{color:#cdf5cc}.theme__solarized .summary-classic .subtitle{color:#cf9c00}.theme__custom .summary-classic .subtitle{color:#3d7a8f}.summary-classic__flex-box{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;margin-top:1rem;margin-bottom:1rem}.summary-classic__content{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-justify-content:flex-start;-moz-justify-content:flex-start;-ms-justify-content:flex-start;justify-content:flex-start;-ms-flex-pack:flex-start;padding-left:1rem}.summary-classic__text{margin-top:1rem;line-height:1.7rem;font-family:merriweather,serif}.summary-classic__image{width:100%;height:100%;object-fit:contain}.summary-classic__image-wrapper{max-width:130px;min-width:130px;overflow:hidden;-webkit-align-self:center;-moz-align-self:center;-ms-align-self:center;align-self:center}.theme__dark .summary-classic hr{border-top:1px solid #595b5c}.theme__light .summary-classic hr{border-top:1px solid #dbdbdb}.theme__hacker .summary-classic hr{border-top:1px solid #c7ba00}.theme__solarized .summary-classic hr{border-top:1px solid #ffb300}.theme__custom .summary-classic hr{border-top:1px solid #1f637a}.summary-classic:not(:last-child) hr{margin-bottom:1.5rem}.summary-classic:last-child hr{display:none}.summary-compact{padding:0 1rem}.summary-compact__flexbox{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;margin-top:1rem;margin-bottom:1rem}.summary-compact__meta{padding:1rem 0}.theme__dark .summary-compact hr{border-top:1px solid #595b5c}.theme__light .summary-compact hr{border-top:1px solid #dbdbdb}.theme__hacker .summary-compact hr{border-top:1px solid #c7ba00}.theme__solarized .summary-compact hr{border-top:1px solid #ffb300}.theme__custom .summary-compact hr{border-top:1px solid #1f637a}.swiper-container{background-color:transparent;width:100%;height:auto}.swiper-slide{background-position:50%;background-size:cover}.swiper-pagination-bullet{opacity:.5}.theme__dark .swiper-pagination-bullet-active{background:#ff6188!important}.theme__light .swiper-pagination-bullet-active{background:#ff6188!important}.theme__hacker .swiper-pagination-bullet-active{background:#f3ff6e!important}.theme__solarized .swiper-pagination-bullet-active{background:#b58900!important}.theme__custom .swiper-pagination-bullet-active{background:#0086b3!important}.switch{position:relative;display:inline-block;width:28px;height:14px;margin-top:.7rem;margin-left:1rem}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.theme__dark .slider{background-color:#403e41}.theme__light .slider{background-color:#bdbdbd}.theme__hacker .slider{background-color:#403e41}.theme__solarized .slider{background-color:#dfd4b1}.theme__custom .slider{background-color:#a3e0f5}.slider:before{position:absolute;content:"";height:11px;width:11px;left:1.72px;bottom:1.72px;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.theme__dark .slider:before{background-color:#fcfcfa}.theme__light .slider:before{background-color:#fcfcfa}.theme__hacker .slider:before{background-color:#fcfcfa}.theme__solarized .slider:before{background-color:#fcfcfa}.theme__custom .slider:before{background-color:#e6f9ff}.theme__dark input:checked+.slider{background-color:#ff6188}.theme__light input:checked+.slider{background-color:#ff6188}.theme__hacker input:checked+.slider{background-color:#ff6188}.theme__solarized input:checked+.slider{background-color:#ff6188}.theme__custom input:checked+.slider{background-color:#47c2eb}.theme__dark input:focus+.slider{box-shadow:0 0 1px #ff6188}.theme__light input:focus+.slider{box-shadow:0 0 1px #ff6188}.theme__hacker input:focus+.slider{box-shadow:0 0 1px #ff6188}.theme__solarized input:focus+.slider{box-shadow:0 0 1px #ff6188}.theme__custom input:focus+.slider{box-shadow:0 0 1px #47c2eb}input:checked+.slider:before{-webkit-transform:translateX(13px);-moz-transform:translateX(13px);-ms-transform:translateX(13px);transform:translateX(13px)}.slider.round{border-radius:8.5px}.slider.round:before{border-radius:50%}.taxo{margin:2.5rem 0;z-index:3}.taxo-root{position:-webkit-sticky;position:sticky;top:50px}.theme__dark .taxo-root{background-color:#2d2a2e}.theme__light .taxo-root{background-color:#fafafa}.theme__hacker .taxo-root{background-color:#151715}.theme__solarized .taxo-root{background-color:#fdf7e3}.theme__custom .taxo-root{background-color:#f7fdff}.taxo__title{font-weight:700;font-family:montserrat,sans-serif}.theme__dark .taxo__title{color:#bdbdbd}.theme__dark .taxo__title:hover{color:#ff6188}.theme__light .taxo__title{color:#607d8b}.theme__light .taxo__title:hover{color:#ff6188}.theme__hacker .taxo__title{color:#996287}.theme__hacker .taxo__title:hover{color:#ff6188}.theme__solarized .taxo__title{color:#b58900}.theme__solarized .taxo__title:hover{color:#ff6188}.theme__custom .taxo__title{color:#1b7898}.theme__custom .taxo__title:hover{color:#144a5d}.taxo__link{text-decoration:none!important}.taxo__text{border-top-left-radius:.175rem;border-bottom-left-radius:.175rem}.taxo__text:hover,.taxo__text:active,.taxo__text:focus{text-decoration:underline!important}.theme__dark .taxo__text{color:inherit}.theme__light .taxo__text{color:inherit}.theme__hacker .taxo__text{color:inherit}.theme__solarized .taxo__text{color:inherit}.theme__custom .taxo__text{color:inherit}.taxo__num{padding:.125rem .25rem;border-top-right-radius:.175rem;border-bottom-right-radius:.175rem}.theme__dark .taxo__num{color:#fcfcfa;background-color:#212121}.theme__light .taxo__num{color:#424242;background-color:#eaeaea}.theme__hacker .taxo__num{color:#e3cd26;background-color:#252526}.theme__solarized .taxo__num{color:#b58900;background-color:#f8e7b0}.theme__custom .taxo__num{color:#002633;background-color:#ceeaf3}.taxo .title{display:block;margin:0;margin-right:.5rem;margin-bottom:.25rem}.taxo .tag{margin:0;margin-right:.25rem;margin-bottom:.25rem;font-size:.8rem;display:inline-block}.theme__dark .taxo .tag{color:#bdbdbd}.theme__light .taxo .tag{color:#607d8b}.theme__hacker .taxo .tag{color:#996287}.theme__solarized .taxo .tag{color:#b58900}.theme__custom .taxo .tag{color:#1b7898}.taxo .is-tags{border-radius:.175rem;padding:.125rem 0 .125rem .25rem}.theme__dark .taxo .is-tags{color:#78dce8;background-color:#424242}.theme__light .taxo .is-tags{color:#424242;background-color:#d3f4f8}.theme__hacker .taxo .is-tags{color:#78dce8;background-color:#2d322d}.theme__solarized .taxo .is-tags{color:#916e00;background-color:#cef2f7}.theme__custom .taxo .is-tags{color:#002633;background-color:#ebfaff}.taxo .is-categories{border-radius:.175rem;padding:.125rem 0 .125rem .25rem}.theme__dark .taxo .is-categories{color:#ab9df2;background-color:#424242}.theme__light .taxo .is-categories{color:#424242;background-color:#e5dcf2}.theme__hacker .taxo .is-categories{color:#ab9df2;background-color:#2d322d}.theme__solarized .taxo .is-categories{color:#916e00;background-color:#e2d8f0}.theme__custom .taxo .is-categories{color:#002633;background-color:#ebfaff}.taxo .is-series{border-radius:.175rem;padding:.125rem 0 .125rem .25rem}.theme__dark .taxo .is-series{color:#ea9c77;background-color:#424242}.theme__light .taxo .is-series{color:#424242;background-color:#ffedd1}.theme__hacker .taxo .is-series{color:#ea9c77;background-color:#2d322d}.theme__solarized .taxo .is-series{color:#916e00;background-color:#ffe7c1}.theme__custom .taxo .is-series{color:#002633;background-color:#ebfaff}.toc{width:100%;max-width:242.28571429px;position:fixed;top:7rem;font-size:.85rem;padding-left:.5rem;z-index:2}.toc #toc{position:relative}.toc__flexbox{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;position:fixed}.toc__title{font-size:.9rem;margin-top:.5rem}.theme__dark .toc__title{color:#727072}.theme__light .toc__title{color:#727072}.theme__hacker .toc__title{color:#727072}.theme__solarized .toc__title{color:#727072}.theme__custom .toc__title{color:#002633}.toc a{color:inherit;position:relative}.toc a::before{content:'';height:100%;left:-1rem;margin-top:-1px;position:absolute;width:2px}.theme__dark .toc a::before{background-color:#727072}.theme__light .toc a::before{background-color:#727072}.theme__hacker .toc a::before{background-color:#727072}.theme__solarized .toc a::before{background-color:#727072}.theme__custom .toc a::before{background-color:#c0e5f2}.toc a::before:last-child{background-color:transparent}.theme__dark .toc ul li li{margin-left:1rem;color:#fcfcfa}.theme__dark .toc ul a{color:#90a4ae}.theme__dark .toc ul a.active{color:#ff6188}.theme__light .toc ul li li{margin-left:1rem;color:#424242}.theme__light .toc ul a{color:#727072}.theme__light .toc ul a.active{color:#ff6188}.theme__hacker .toc ul li li{margin-left:1rem;color:#a1ad64}.theme__hacker .toc ul a{color:#727072}.theme__hacker .toc ul a.active{color:#ff6188}.theme__solarized .toc ul li li{margin-left:1rem;color:#b58900}.theme__solarized .toc ul a{color:#727072}.theme__solarized .toc ul a.active{color:#ff6188}.theme__custom .toc ul li li{margin-left:1rem;color:#0b6d8e}.theme__custom .toc ul a{color:#8f9ea3}.theme__custom .toc ul a.active{color:#1f7693}.theme__dark .toc .active{color:#ff6188;font-weight:700}.theme__dark .toc .active::before{background-color:#ff6188}.theme__light .toc .active{color:#ff6188;font-weight:700}.theme__light .toc .active::before{background-color:#ff6188}.theme__hacker .toc .active{color:#ff6188;font-weight:700}.theme__hacker .toc .active::before{background-color:#ff6188}.theme__solarized .toc .active{color:#ff6188;font-weight:700}.theme__solarized .toc .active::before{background-color:#ff6188}.theme__custom .toc .active{color:#144a5d;font-weight:700}.theme__custom .toc .active::before{background-color:#1f7693}.tooltipped{position:relative}.tooltipped:after{position:absolute;z-index:1000000;display:none;padding:5px 8px;font:11px/1.5 lato,work sans,helvetica,tahoma,geneva,arial,sans-serif;color:#fff;text-align:center;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-wrap:break-word;white-space:pre;pointer-events:none;content:attr(aria-label);background:rgba(0,0,0,.8);border-radius:3px;-webkit-font-smoothing:subpixel-antialiased}.tooltipped:before{position:absolute;z-index:1000001;display:none;width:0;height:0;color:rgba(0,0,0,.8);pointer-events:none;content:"";border:5px solid transparent}.tooltipped:hover:before,.tooltipped:hover:after,.tooltipped:active:before,.tooltipped:active:after,.tooltipped:focus:before,.tooltipped:focus:after{display:inline-block;text-decoration:none}.tooltipped-s:after,.tooltipped-se:after,.tooltipped-sw:after{top:100%;right:50%;margin-top:5px}.tooltipped-s:before,.tooltipped-se:before,.tooltipped-sw:before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:rgba(0,0,0,.8)}.tooltipped-se:after{right:auto;left:50%;margin-left:-15px}.tooltipped-sw:after{margin-right:-15px}.tooltipped-n:after,.tooltipped-ne:after,.tooltipped-nw:after{right:50%;bottom:100%;margin-bottom:5px}.tooltipped-n:before,.tooltipped-ne:before,.tooltipped-nw:before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:rgba(0,0,0,.8)}.tooltipped-ne:after{right:auto;left:50%;margin-left:-15px}.tooltipped-nw:after{margin-right:-15px}.tooltipped-s:after,.tooltipped-n:after{transform:translateX(50%)}.tooltipped-w:after{right:100%;bottom:50%;margin-right:5px;transform:translateY(50%)}.tooltipped-w:before{top:50%;bottom:50%;left:-5px;margin-top:-5px;border-left-color:rgba(0,0,0,.8)}.tooltipped-e:after{bottom:50%;left:100%;margin-left:5px;transform:translateY(50%)}.tooltipped-e:before{top:50%;right:-5px;bottom:50%;margin-top:-5px;border-right-color:rgba(0,0,0,.8)}.whoami{padding:0 1rem;margin:1rem 0;border-radius:.25rem;width:100%;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}@media(max-width:769px){.whoami{-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}}.whoami__contents{margin-top:.5rem}@media(max-width:769px){.whoami__contents{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}}.whoami__image{width:100%;height:100%;object-fit:cover;border-radius:.25rem;-webkit-box-shadow:0 8px 6px -6px #000;-moz-box-shadow:0 8px 6px -6px #000;box-shadow:0 8px 6px -6px #000}.whoami__image-wrapper{min-width:150px;max-width:200px;height:auto;margin-right:1rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.whoami__title{font-size:1.5rem;font-weight:700;margin-bottom:.5rem;padding-bottom:.5rem}.theme__dark .whoami__title{text-decoration:underline double #ffa7c4}.theme__light .whoami__title{text-decoration:underline double #607d8b}.theme__hacker .whoami__title{text-decoration:underline double #1fff2a}.theme__solarized .whoami__title{text-decoration:underline double #b58900}.theme__custom .whoami__title{text-decoration:underline double #1d6c87}.whoami__desc{font-size:1rem;padding-left:.25rem}@media(max-width:769px){.whoami__desc{width:75%}}.whoami__gutter{height:2rem}.whoami__social{margin-top:.5rem}.theme__dark .whoami__social a{text-decoration:none;color:#bdbdbd}.theme__dark .whoami__social a:hover{color:#f0f0f0;transition:color .2s ease}.theme__light .whoami__social a{text-decoration:none;color:#9e9e9e}.theme__light .whoami__social a:hover{color:#6b6b6b;transition:color .2s ease}.theme__hacker .whoami__social a{text-decoration:none;color:#9e9e9e}.theme__hacker .whoami__social a:hover{color:#6b6b6b;transition:color .2s ease}.theme__solarized .whoami__social a{text-decoration:none;color:#b58900}.theme__solarized .whoami__social a:hover{color:#e8b000;transition:color .2s ease}.theme__custom .whoami__social a{text-decoration:none;color:#608f9f}.theme__custom .whoami__social a:hover{color:#80a6b3;transition:color .2s ease}.whoami__written-by{font-size:.9rem;opacity:.65}.whoami-hr{border-radius:.5rem}.not-found{height:100%;font-family:montserrat,sans-serif;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.theme__dark .not-found .title{color:#ffd866}.theme__dark .not-found .subtitle{color:#fcfcfa}.theme__light .not-found .title{color:#607d8b}.theme__light .not-found .subtitle{color:#424242}.theme__hacker .not-found .title{color:#a1ad64}.theme__hacker .not-found .subtitle{color:#cdf5cc}.theme__solarized .not-found .title{color:#b58900}.theme__solarized .not-found .subtitle{color:#cf9c00}.theme__custom .not-found .title{color:#001f29}.theme__custom .not-found .subtitle{color:#3d7a8f}.about{padding:1rem}.archive{position:relative;padding:2rem 2rem 0;width:100%;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-justify-content:flex-start;-moz-justify-content:flex-start;-ms-justify-content:flex-start;justify-content:flex-start;-ms-flex-pack:flex-start}.archive__container{width:100%}.archive__ul{position:relative}.archive__ul::before{content:'';position:absolute;left:3rem;top:0;width:.25rem;height:100%}.theme__dark .archive__ul::before{background-color:#727072}.theme__light .archive__ul::before{background-color:#727072}.theme__hacker .archive__ul::before{background-color:#727072}.theme__solarized .archive__ul::before{background-color:#727072}.theme__custom .archive__ul::before{background-color:#c0e5f2}@media(max-width:769px){.archive__ul::before{content:none}}.archive__li{margin-bottom:.5rem;margin-left:4rem;z-index:0;-webkit-transition:margin-left .1s ease;-moz-transition:margin-left .1s ease;-ms-transition:margin-left .1s ease;-o-transition:margin-left .1s ease;transition:margin-left .1s ease;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}@media(max-width:769px){.archive__li{margin-left:0;position:relative}}.archive__key{margin-right:.5rem;border-radius:.25rem;height:32px;width:100px;padding:.125rem;font-size:.95rem;font-weight:700;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-animation:slide-in-down .4s .2s 1 ease both;-moz-animation:slide-in-down .4s .2s 1 ease both;-ms-animation:slide-in-down .4s .2s 1 ease both;-o-animation:slide-in-down .4s .2s 1 ease both;animation:slide-in-down .4s .2s 1 ease both}.theme__dark .archive__key{color:#fcfcfa;background-color:#ff6188}.theme__light .archive__key{color:#fcfcfa;background-color:#607d8b}.theme__hacker .archive__key{color:#fcfcfa;background-color:#e08c48}.theme__solarized .archive__key{color:#fcfcfa;background-color:#b58900}.theme__custom .archive__key{color:#d6f5ff;background-color:#002e3d}.archive__key:not(:first-child){margin:4rem 0 1rem}.archive__key:first-child{margin:1rem 0}.archive__meta{border-radius:.25rem;min-width:100px;max-width:100px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-animation:slide-in-left .2s .5s 1 ease both;-moz-animation:slide-in-left .2s .5s 1 ease both;-ms-animation:slide-in-left .2s .5s 1 ease both;-o-animation:slide-in-left .2s .5s 1 ease both;animation:slide-in-left .2s .5s 1 ease both}.archive__type{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;font-size:.8rem;width:50%;height:20px;text-align:center;max-width:50px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.theme__dark .archive__type{color:#82aaff;background-color:#424242}@media(max-width:769px){.theme__dark .archive__type{border-right:2px solid #727072}}.theme__light .archive__type{color:#575757;background-color:#bdbdbd}@media(max-width:769px){.theme__light .archive__type{border-right:2px solid #727072}}.theme__hacker .archive__type{color:#fcfcfa;background-color:#855e78}@media(max-width:769px){.theme__hacker .archive__type{border-right:2px solid #727072}}.theme__solarized .archive__type{color:#996b00;background-color:#f6e099}@media(max-width:769px){.theme__solarized .archive__type{border-right:2px solid #727072}}.theme__custom .archive__type{color:#144252;background-color:#e6f9ff}@media(max-width:769px){.theme__custom .archive__type{border-right:2px solid #c0e5f2}}.archive__date{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;font-size:.8rem;width:50%;height:20px;text-align:center;max-width:50px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.theme__dark .archive__date{color:#aed581;background-color:#424242}@media(max-width:769px){.theme__dark .archive__date{border-left:2px solid #727072}}.theme__light .archive__date{color:#424242;background-color:#bdbdbd}@media(max-width:769px){.theme__light .archive__date{border-left:2px solid #727072}}.theme__hacker .archive__date{color:#e3cd26;background-color:#855e78}@media(max-width:769px){.theme__hacker .archive__date{border-left:2px solid #727072}}.theme__solarized .archive__date{color:#455a64;background-color:#f6e099}@media(max-width:769px){.theme__solarized .archive__date{border-left:2px solid #727072}}.theme__custom .archive__date{color:#148fb8;background-color:#e6f9ff}@media(max-width:769px){.theme__custom .archive__date{border-left:2px solid #c0e5f2}}.archive__title{margin-right:.5rem;margin-left:1rem;max-width:960;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.archive__title:hover::before,.archive__title:active::before,.archive__title:focus::before{content:'';position:absolute;left:3rem;width:.25rem;height:20px}.theme__dark .archive__title:hover::before,.theme__dark .archive__title:active::before,.theme__dark .archive__title:focus::before{background-color:#ff6188}.theme__light .archive__title:hover::before,.theme__light .archive__title:active::before,.theme__light .archive__title:focus::before{background-color:#ff6188}.theme__hacker .archive__title:hover::before,.theme__hacker .archive__title:active::before,.theme__hacker .archive__title:focus::before{background-color:#ff6188}.theme__solarized .archive__title:hover::before,.theme__solarized .archive__title:active::before,.theme__solarized .archive__title:focus::before{background-color:#ff6188}.theme__custom .archive__title:hover::before,.theme__custom .archive__title:active::before,.theme__custom .archive__title:focus::before{background-color:#1d6c87}@media(max-width:769px){.archive__title:hover::before,.archive__title:active::before,.archive__title:focus::before{top:50%;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}}#body{position:relative}.theme__dark #body{color:#fcfcfa;background-color:#212121}.theme__dark #body hr{border-color:#595b5c}.theme__light #body{color:#424242;background-color:#e0e0e0}.theme__light #body hr{border-color:#dbdbdb}.theme__hacker #body{color:#1fff2a;background-color:#111}.theme__hacker #body hr{border-color:#c7ba00}.theme__solarized #body{color:#424242;background-color:#ddd6c7}.theme__solarized #body hr{border-color:#ffb300}.theme__custom #body{color:#002633;background-color:#fafeff}.theme__custom #body hr{border-color:#1f637a}html{overflow-x:hidden}.grid{position:relative;margin-bottom:1rem}.grid .full{width:100%}.grid .half{width:50%}.grid .third{width:33.3%}.grid .quarter{width:25%}.grid .fifth{width:20%}.grid:after{content:'';display:block;clear:both}.grid-sizer,.grid-item{width:33.333%;padding:.5rem}.grid-item{float:left}.grid-item img{display:block;max-width:100%}.gallery{padding:1rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.gallery img{border-radius:.25rem}.gallery__contents{padding:1rem;width:65%;font-family:merriweather,serif;font-size:1rem;text-align:center}.gallery .grid-item{position:relative;opacity:1;height:auto;cursor:pointer}.gallery .grid-item__desc{position:absolute;display:none;left:0;right:0;top:0;bottom:0;margin:auto;padding:.5rem;width:calc(100% - 1rem);height:calc(100% - 1rem);border-radius:.25rem;z-index:1;font-family:montserrat,sans-serif;font-weight:700;cursor:pointer;-webkit-box-shadow:0 4px 4px 0 rgba(0,0,0,.4);-moz-box-shadow:0 4px 4px 0 rgba(0,0,0,.4);box-shadow:0 4px 4px 0 rgba(0,0,0,.4)}.theme__dark .gallery .grid-item__desc:hover,.theme__dark .gallery .grid-item__desc:active,.theme__dark .gallery .grid-item__desc:focus{color:#fcfcfa;background-color:rgba(0,0,0,.7)}.theme__light .gallery .grid-item__desc:hover,.theme__light .gallery .grid-item__desc:active,.theme__light .gallery .grid-item__desc:focus{color:#424242;background-color:rgba(255,255,255,.7)}.theme__hacker .gallery .grid-item__desc:hover,.theme__hacker .gallery .grid-item__desc:active,.theme__hacker .gallery .grid-item__desc:focus{color:#fcfcfa;background-color:rgba(0,0,0,.7)}.theme__solarized .gallery .grid-item__desc:hover,.theme__solarized .gallery .grid-item__desc:active,.theme__solarized .gallery .grid-item__desc:focus{color:#424242;background-color:rgba(253,247,227,.7)}.theme__custom .gallery .grid-item__desc:hover,.theme__custom .gallery .grid-item__desc:active,.theme__custom .gallery .grid-item__desc:focus{color:#002633;background-color:rgba(204,242,255,.7)}.list__header{display:flex;align-items:center;justify-content:center;margin:.5rem;font-family:montserrat,sans-serif}.theme__dark .list__header--title{color:#fcfcfa}.theme__light .list__header--title{color:#424242}.theme__hacker .list__header--title{color:#a1ad64}.theme__solarized .list__header--title{color:#424242}.theme__custom .list__header--title{color:#002633}.list__header--desc{font-family:merriweather,serif;font-weight:italic;padding:1rem;line-height:1.7rem}.single{padding:1rem;position:relative;width:100%}.single__title{font-size:2.5rem;font-weight:900;font-family:montserrat,sans-serif;line-height:3rem;overflow-wrap:break-word}.theme__dark .single__title{color:#fcfcfa}.theme__light .single__title{color:#424242}.theme__hacker .single__title{color:#fcfcfa}.theme__solarized .single__title{color:#424242}.theme__custom .single__title{color:#002633}.single__meta{font-size:.8rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}@media(max-width:769px){.single__meta{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;-moz-align-items:flex-start;-ms-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start}}.theme__dark .single__meta{color:#fcfcfa}.theme__light .single__meta{color:#424242}.theme__hacker .single__meta{color:#cdf5cc}.theme__solarized .single__meta{color:#cf9c00}.theme__custom .single__meta{color:#3d7a8f}.single__contents{font-size:1rem;font-family:merriweather,serif;margin:1rem 0;line-height:1.7rem;width:inheirt;max-width:inherit}.single__contents--gallery{overflow:hidden}.single__contents>p>a{text-decoration:underline}.single__contents h1,.single__contents h2,.single__contents h3,.single__contents h4,.single__contents h5,.single__contents h6{position:relative;line-height:1.25}.theme__dark .single__contents h1,.theme__dark .single__contents h2,.theme__dark .single__contents h3,.theme__dark .single__contents h4,.theme__dark .single__contents h5,.theme__dark .single__contents h6{color:#aed581}.theme__light .single__contents h1,.theme__light .single__contents h2,.theme__light .single__contents h3,.theme__light .single__contents h4,.theme__light .single__contents h5,.theme__light .single__contents h6{color:#607d8b}.theme__hacker .single__contents h1,.theme__hacker .single__contents h2,.theme__hacker .single__contents h3,.theme__hacker .single__contents h4,.theme__hacker .single__contents h5,.theme__hacker .single__contents h6{color:#a1ad64}.theme__solarized .single__contents h1,.theme__solarized .single__contents h2,.theme__solarized .single__contents h3,.theme__solarized .single__contents h4,.theme__solarized .single__contents h5,.theme__solarized .single__contents h6{color:#b58900}.theme__custom .single__contents h1,.theme__custom .single__contents h2,.theme__custom .single__contents h3,.theme__custom .single__contents h4,.theme__custom .single__contents h5,.theme__custom .single__contents h6{color:#114c5f}.single__contents h1{font-size:2.6rem;margin:3.5rem 0 1.75rem}.single__contents h2{font-size:2.2rem;margin:3.2rem 0 1.5rem;padding:0;color:inherit;font-weight:900;text-rendering:optimizeLegibility}.single__contents h3{font-size:1.8rem;margin:2.8rem 0 1.25rem}.single__contents h4{font-size:1.5rem;margin:2.4rem 0 1rem}.single__contents h5{font-size:1.2rem;margin:2rem 0 .8rem}.single__contents h6{font-size:1rem;margin:1.5rem 0 .5rem}.single__contents pre{padding:34px 12px 8px;position:relative;overflow:auto;border-radius:.34rem;position:relative}.single__contents pre::after{position:absolute;top:0;right:0;left:0;font-size:.95em;font-family:montserrat,sans-serif;font-weight:700;content:attr(data-lang)}.theme__dark .single__contents pre::after{color:#fcfcfa;background:#011220}.theme__light .single__contents pre::after{color:#344952;background:#efeae7}.theme__hacker .single__contents pre::after{color:#f3ff6e;background:#1c201c}.theme__solarized .single__contents pre::after{color:#344952;background:#f9e8b5}.theme__custom .single__contents pre::after{color:#002633;background:#d6f5ff}.single__contents code+.copy-to-clipboard{position:absolute;right:4px;top:5px;border-radius:2px;z-index:1;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.single__contents .copy-to-clipboard{background-image:url(data:image/svg+xml;utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjRwdCIgaGVpZ2h0PSIyNHB0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPlxhPHBhdGggc3R5bGU9InN0cm9rZTpub25lO2ZpbGwtcnVsZTpub256ZXJvO2ZpbGw6IzY0NjQ2NDtmaWxsLW9wYWNpdHk6MSIgZD0iTTQgMkMyLjg5NDUzMSAyIDIgMi44OTQ1MzEgMiA0VjE3QzIgMTcuNTUwNzgxIDIuNDQ5MjE5IDE4IDMgMThTNCAxNy41NTA3ODEgNCAxN1Y0SDE3QzE3LjU1MDc4MSA0IDE4IDMuNTUwNzgxIDE4IDNTMTcuNTUwNzgxIDIgMTcgMnpNOCA2QzYuODk0NTMxIDYgNiA2Ljg5NDUzMSA2IDhWMjBDNiAyMS4xMDU0NjkgNi44OTQ1MzEgMjIgOCAyMkgyMEMyMS4xMDU0NjkgMjIgMjIgMjEuMTA1NDY5IDIyIDIwVjhDMjIgNi44OTQ1MzEgMjEuMTA1NDY5IDYgMjAgNnpNOCA4SDIwVjIwSDh6TTggOCIvPjwvc3ZnPg==);background-position:50%;background-size:16px 16px;background-repeat:no-repeat;width:27px;height:1.45rem;top:-1px;display:inline-block;vertical-align:middle;position:relative;margin-left:-.2rem;cursor:pointer;border-radius:0 2px 2px 0;margin-bottom:1px;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.single__contents .copy-to-clipboard:hover{-webkit-transform:translateY(-.1rem);-moz-transform:translateY(-.1rem);-ms-transform:translateY(-.1rem);transform:translateY(-.1rem)}.single__contents .chroma .copy-to-clipboard{position:absolute;right:4px;top:5px;border-radius:2px;z-index:1;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.single__contents .chroma .copy-to-clipboard:hover{-webkit-transform:translateY(-.1rem);-moz-transform:translateY(-.1rem);-ms-transform:translateY(-.1rem);transform:translateY(-.1rem)}.single__contents .language-code .copy-to-clipboard{position:absolute;right:4px;top:5px;border-radius:2px;z-index:1;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.single__contents .language-code .copy-to-clipboard:hover{-webkit-transform:translateY(-.1rem);-moz-transform:translateY(-.1rem);-ms-transform:translateY(-.1rem);transform:translateY(-.1rem)}.single__contents blockquote{margin:0 1.75rem 1.75rem 1.5rem;padding:0 0 0 1.42188rem;font-size:1.05rem;line-height:1.75rem;color:inherit;opacity:.8;position:relative}.theme__dark .single__contents blockquote{border-left:.32813rem solid #fcfcfa}.theme__light .single__contents blockquote{border-left:.32813rem solid #bdbdbd}.theme__hacker .single__contents blockquote{border-left:.32813rem solid #e08c48}.theme__solarized .single__contents blockquote{border-left:.32813rem solid #bdbdbd}.theme__custom .single__contents blockquote{border-left:.32813rem solid #006080}.single__contents blockquote code{margin:0 .25rem}.single__contents img{display:block;border-radius:.25rem;margin:0 auto}.single__contents p{margin:0 0 1.75rem;padding:0}.single__contents p code{margin:0 .25rem}.single__contents ul{margin-right:0;margin-top:0;padding:0;list-style:disc outside none}.single__contents li{margin-left:2rem;margin-bottom:calc(1rem/2)}.single__contents li code{margin:0 .25rem}.single__contents hr{margin:0 0 calc(1.25rem - 1px);padding:0;border:none;height:1px}.theme__dark .single__contents hr{background:#595b5c}.theme__light .single__contents hr{background:#bdbdbd}.theme__hacker .single__contents hr{background:#e08c48}.theme__solarized .single__contents hr{background:#bdbdbd}.theme__custom .single__contents hr{background:#09c}.single__contents dl dt::after{content:':'}.single__contents dd{display:block;margin-inline-start:40px}.single__contents .anchor{cursor:pointer}.single__contents a.footnote-ref{font-size:.75rem;font-weight:700;margin-left:3px}.single__contents a.footnote-ref::before{content:"["}.single__contents a.footnote-ref::after{content:"]"}.single__contents .table-wrapper{overflow-x:auto}.single__contents .table-wrapper>table{max-width:100%;margin:10px 0;border-spacing:0;box-shadow:1px 1px 3px rgba(0,0,0,.125)}.theme__dark .single__contents .table-wrapper>table thead{background:#011220}.theme__dark .single__contents .table-wrapper>table th{color:#fcfcfa}.theme__dark .single__contents .table-wrapper>table th,.theme__dark .single__contents .table-wrapper>table td{padding:5px 15px;font-size:.9rem;border:1px double #3a3a3a}.theme__dark .single__contents .table-wrapper>table tr:hover{background-color:#011220}.theme__light .single__contents .table-wrapper>table thead{background:#efeae7}.theme__light .single__contents .table-wrapper>table th{color:#344952}.theme__light .single__contents .table-wrapper>table th,.theme__light .single__contents .table-wrapper>table td{padding:5px 15px;font-size:.9rem;border:1px double #e7dfdb}.theme__light .single__contents .table-wrapper>table tr:hover{background-color:#efeae7}.theme__hacker .single__contents .table-wrapper>table thead{background:#1c201c}.theme__hacker .single__contents .table-wrapper>table th{color:#f3ff6e}.theme__hacker .single__contents .table-wrapper>table th,.theme__hacker .single__contents .table-wrapper>table td{padding:5px 15px;font-size:.9rem;border:1px double #f3ff6e}.theme__hacker .single__contents .table-wrapper>table tr:hover{background-color:#1c201c}.theme__solarized .single__contents .table-wrapper>table thead{background:#f9e8b5}.theme__solarized .single__contents .table-wrapper>table th{color:#344952}.theme__solarized .single__contents .table-wrapper>table th,.theme__solarized .single__contents .table-wrapper>table td{padding:5px 15px;font-size:.9rem;border:1px double #f6e099}.theme__solarized .single__contents .table-wrapper>table tr:hover{background-color:#f9e8b5}.theme__custom .single__contents .table-wrapper>table thead{background:#d6f5ff}.theme__custom .single__contents .table-wrapper>table th{color:#002633}.theme__custom .single__contents .table-wrapper>table th,.theme__custom .single__contents .table-wrapper>table td{padding:5px 15px;font-size:.9rem;border:1px double #b8edff}.theme__custom .single__contents .table-wrapper>table tr:hover{background-color:#d6f5ff}.single__contents .table-wrapper code{margin:0 .25rem}.single__tags{margin:0 .5rem;list-style-type:none;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}@media(max-width:769px){.single__tags{margin:0}}.single__tag{padding:0 .25rem}code,pre{padding:.5rem 0;line-height:1.5em;font-size:.95em;font-family:Consolas,andale mono wt,andale mono,lucida console,lucida sans typewriter,dejavu sans mono,bitstream vera sans mono,liberation mono,nimbus mono l,Monaco,courier new,Courier,monospace;position:relative}.theme__dark code,.theme__dark pre{background:#171f2e}.theme__light code,.theme__light pre{background:#f5f2f0}.theme__hacker code,.theme__hacker pre{background:#202420}.theme__solarized code,.theme__solarized pre{background:#faf1cd}.theme__custom code,.theme__custom pre{background:#f0fbff}code a,pre a{text-decoration:none!important}code{padding:3px 5px;border-radius:4px}pre:not(.chroma){overflow:auto}.single__contents>.language-code{overflow-x:auto;position:relative;margin:1em 0}.single__contents>.language-code::after{position:absolute;top:0;right:0;left:0;padding:2px 7px;font-size:.95em;font-family:montserrat,sans-serif;font-weight:700;border-top-left-radius:.25rem;border-top-right-radius:.25rem;content:attr(data-lang)}.theme__dark .single__contents>.language-code::after{color:#fcfcfa;background:#011220}.theme__light .single__contents>.language-code::after{color:#344952;background:#efeae7}.theme__hacker .single__contents>.language-code::after{color:#f3ff6e;background:#1c201c}.theme__solarized .single__contents>.language-code::after{color:#344952;background:#f9e8b5}.theme__custom .single__contents>.language-code::after{color:#002633;background:#d6f5ff}.highlight>.chroma{margin:1em 0;border-radius:5px;box-shadow:1px 1px 2px rgba(0,0,0,.125);position:relative;overflow-x:auto}.theme__dark .highlight>.chroma{color:#eee;background:#171f2e}.theme__light .highlight>.chroma{color:#344952;background:#f5f2f0}.theme__hacker .highlight>.chroma{color:#d1d1d1;background:#202420}.theme__solarized .highlight>.chroma{color:#344952;background:#faf1cd}.theme__custom .highlight>.chroma{color:#002633;background:#f0fbff}.highlight>.chroma code{padding:0}.highlight>.chroma::after{position:absolute;top:0;right:0;left:0;padding:2px 7px;font-size:.95em;font-family:montserrat,sans-serif;font-weight:700;content:attr(data-lang)}.theme__dark .highlight>.chroma::after{color:#fcfcfa;background:#011220}.theme__light .highlight>.chroma::after{color:#344952;background:#efeae7}.theme__hacker .highlight>.chroma::after{color:#f3ff6e;background:#1c201c}.theme__solarized .highlight>.chroma::after{color:#344952;background:#f9e8b5}.theme__custom .highlight>.chroma::after{color:#002633;background:#d6f5ff}.highlight>.chroma .lntd{line-height:1em}.highlight>.chroma .lntd:first-child{width:10px}.highlight>.chroma .lntd:first-child pre{margin:0;padding:34px 4px 6px}.highlight>.chroma .lntd:last-child{vertical-align:top;position:relative}.highlight>.chroma .lntd:last-child pre{margin:0;padding:34px 4px 6px}.highlight>.chroma table,.highlight>.chroma tr,.highlight>.chroma td{margin:0;padding:0;width:100%;border-collapse:collapse}.theme__dark .highlight>.chroma .lnt{color:#666}.theme__light .highlight>.chroma .lnt{color:#aaa}.theme__hacker .highlight>.chroma .lnt{color:#666}.theme__solarized .highlight>.chroma .lnt{color:#aaa}.theme__custom .highlight>.chroma .lnt{color:#ababab}.terms{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.terms__title{margin:2rem 0}.theme__dark .terms__title{color:#727072;text-shadow:1px 1px 0 #585758,2px 2px 0 #4e4d4e,3px 3px 0 #444344,4px 4px 0 #393839}.theme__light .terms__title{color:#9e9e9e;text-shadow:1px 1px 0 #858484,2px 2px 0 #7a7a7a,3px 3px 0 #707070,4px 4px 0 #666}.theme__hacker .terms__title{color:#c7ba00;text-shadow:1px 1px 0 #948a00,2px 2px 0 #807700,3px 3px 0 #6b6400,4px 4px 0 #575100}.theme__solarized .terms__title{color:#d9a400;text-shadow:1px 1px 0 #a67d00,2px 2px 0 #916e00,3px 3px 0 #7d5f00,4px 4px 0 #694f00}.theme__custom .terms__title{color:#80a6b3;text-shadow:1px 1px 0 #608f9f,2px 2px 0 #588493,3px 3px 0 #507886,4px 4px 0 #496d79}.terms__list{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;width:50%}.terms__item{display:inline-block;margin-right:1rem;text-decoration:none!important;border-radius:.25rem;padding:.25rem;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.terms__item:hover,.terms__item:active,.terms__item:focus{-webkit-transform:translateY(-.25rem);-moz-transform:translateY(-.25rem);-ms-transform:translateY(-.25rem);transform:translateY(-.25rem)}.terms__link:hover{text-decoration:none}.theme__dark .terms__tags{color:#78dce8}.theme__light .terms__tags{color:#424242}.theme__hacker .terms__tags{color:#1fff2a}.theme__solarized .terms__tags{color:#ffb300}.theme__custom .terms__tags{color:#007399}.theme__dark .terms__categories{color:#ab9df2}.theme__light .terms__categories{color:#424242}.theme__hacker .terms__categories{color:#1fff2a}.theme__solarized .terms__categories{color:#b58900}.theme__custom .terms__categories{color:#007399}.theme__dark .terms__series{color:#ea9c77}.theme__light .terms__series{color:#424242}.theme__hacker .terms__series{color:#1fff2a}.theme__solarized .terms__series{color:#b58900}.theme__custom .terms__series{color:#007399}.theme__dark .terms__len{color:#727072}.theme__light .terms__len{color:#727072}.theme__hacker .terms__len{color:#e08c48}.theme__solarized .terms__len{color:#727072}.theme__custom .terms__len{color:#002e3d}.terms .is-small{font-size:1rem}.terms .is-normal{font-size:1.5rem}.terms .is-medium{font-size:2rem}.terms .is-large{font-size:2.5rem}
\ No newline at end of file
+.theme__light .chroma{background-color:#f5f2f0}.theme__light .chroma .err{color:#a61717;background-color:#e3d2d2}.theme__light .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.theme__light .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.theme__light .chroma .hl{display:block;width:100%;background-color:#ffc}.theme__light .chroma .lnt{margin-right:.4em;padding:0 .4em;color:#728fcb}.theme__light .chroma .ln{margin-right:.4em;padding:0 .4em;color:#728fcb}.theme__light .chroma .k{color:#728fcb;font-weight:700}.theme__light .chroma .kc{color:#728fcb;font-weight:700}.theme__light .chroma .kd{color:#728fcb;font-weight:700}.theme__light .chroma .kn{color:#728fcb;font-weight:700}.theme__light .chroma .kp{color:#728fcb;font-weight:700}.theme__light .chroma .kr{color:#728fcb;font-weight:700}.theme__light .chroma .kt{color:#458;font-weight:700}.theme__light .chroma .na{color:#896724}.theme__light .chroma .nb{color:#0086b3}.theme__light .chroma .bp{color:#b6ad9a}.theme__light .chroma .nc{color:#458;font-weight:700}.theme__light .chroma .no{color:#896724}.theme__light .chroma .nd{color:#3c5d5d;font-weight:700}.theme__light .chroma .ni{color:#728fcb}.theme__light .chroma .ne{color:#b29762;font-weight:700}.theme__light .chroma .nf{color:#b29762;font-weight:700}.theme__light .chroma .nl{color:#b29762;font-weight:700}.theme__light .chroma .nn{color:#555}.theme__light .chroma .nt{color:#063289}.theme__light .chroma .nv{color:#896724}.theme__light .chroma .vc{color:#896724}.theme__light .chroma .vg{color:#896724}.theme__light .chroma .vi{color:#896724}.theme__light .chroma .s{color:#728fcb}.theme__light .chroma .sa{color:#728fcb}.theme__light .chroma .sb{color:#728fcb}.theme__light .chroma .sc{color:#728fcb}.theme__light .chroma .dl{color:#728fcb}.theme__light .chroma .sd{color:#728fcb}.theme__light .chroma .s2{color:#728fcb}.theme__light .chroma .se{color:#728fcb}.theme__light .chroma .sh{color:#728fcb}.theme__light .chroma .si{color:#728fcb}.theme__light .chroma .sx{color:#728fcb}.theme__light .chroma .sr{color:#009926}.theme__light .chroma .s1{color:#728fcb}.theme__light .chroma .ss{color:#990073}.theme__light .chroma .m{color:#099}.theme__light .chroma .mb{color:#099}.theme__light .chroma .mf{color:#099}.theme__light .chroma .mh{color:#099}.theme__light .chroma .mi{color:#099}.theme__light .chroma .il{color:#099}.theme__light .chroma .mo{color:#099}.theme__light .chroma .o{color:#728fcb;font-weight:700}.theme__light .chroma .ow{color:#728fcb;font-weight:700}.theme__light .chroma .c{color:#b6ad9a;font-style:italic}.theme__light .chroma .ch{color:#b6ad9a;font-style:italic}.theme__light .chroma .cm{color:#b6ad9a;font-style:italic}.theme__light .chroma .c1{color:#b6ad9a;font-style:italic}.theme__light .chroma .cs{color:#b6ad9a;font-weight:700;font-style:italic}.theme__light .chroma .cp{color:#b6ad9a;font-weight:700;font-style:italic}.theme__light .chroma .cpf{color:#b6ad9a;font-weight:700;font-style:italic}.theme__light .chroma .gd{color:#728fcb;background-color:#fdd}.theme__light .chroma .ge{color:#728fcb;font-style:italic}.theme__light .chroma .gr{color:#a00}.theme__light .chroma .gh{color:#b6ad9a}.theme__light .chroma .gi{color:#728fcb;background-color:#dfd}.theme__light .chroma .go{color:#888}.theme__light .chroma .gp{color:#555}.theme__light .chroma .gs{font-weight:700}.theme__light .chroma .gu{color:#aaa}.theme__light .chroma .gt{color:#a00}.theme__light .chroma .gl{text-decoration:underline}.theme__light .chroma .w{color:#bbb}.theme__light .chroma .p{color:#b6ad9a}.theme__dark .chroma{color:#f8f8f2;background-color:#171f2e}.theme__dark .chroma .err{color:#960050;background-color:#1e0010}.theme__dark .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.theme__dark .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.theme__dark .chroma .hl{display:block;width:100%;background-color:#ffc}.theme__dark .chroma .lnt{margin-right:.4em;padding:0 .4em;color:#7f7f7f}.theme__dark .chroma .ln{margin-right:.4em;padding:0 .4em;color:#7f7f7f}.theme__dark .chroma .k{color:#66d9ef}.theme__dark .chroma .kc{color:#66d9ef}.theme__dark .chroma .kd{color:#66d9ef}.theme__dark .chroma .kn{color:#f92672}.theme__dark .chroma .kp{color:#66d9ef}.theme__dark .chroma .kr{color:#66d9ef}.theme__dark .chroma .kt{color:#66d9ef}.theme__dark .chroma .na{color:#a6e22e}.theme__dark .chroma .nc{color:#a6e22e}.theme__dark .chroma .no{color:#66d9ef}.theme__dark .chroma .nd{color:#a6e22e}.theme__dark .chroma .ne{color:#a6e22e}.theme__dark .chroma .nf{color:#a6e22e}.theme__dark .chroma .nx{color:#a6e22e}.theme__dark .chroma .nt{color:#f92672}.theme__dark .chroma .l{color:#ae81ff}.theme__dark .chroma .ld{color:#e6db74}.theme__dark .chroma .s{color:#e6db74}.theme__dark .chroma .sa{color:#e6db74}.theme__dark .chroma .sb{color:#e6db74}.theme__dark .chroma .sc{color:#e6db74}.theme__dark .chroma .dl{color:#e6db74}.theme__dark .chroma .sd{color:#e6db74}.theme__dark .chroma .s2{color:#e6db74}.theme__dark .chroma .se{color:#ae81ff}.theme__dark .chroma .sh{color:#e6db74}.theme__dark .chroma .si{color:#e6db74}.theme__dark .chroma .sx{color:#e6db74}.theme__dark .chroma .sr{color:#e6db74}.theme__dark .chroma .s1{color:#e6db74}.theme__dark .chroma .ss{color:#e6db74}.theme__dark .chroma .m{color:#ae81ff}.theme__dark .chroma .mb{color:#ae81ff}.theme__dark .chroma .mf{color:#ae81ff}.theme__dark .chroma .mh{color:#ae81ff}.theme__dark .chroma .mi{color:#ae81ff}.theme__dark .chroma .il{color:#ae81ff}.theme__dark .chroma .mo{color:#ae81ff}.theme__dark .chroma .o{color:#f92672}.theme__dark .chroma .ow{color:#f92672}.theme__dark .chroma .c{color:#75715e}.theme__dark .chroma .ch{color:#75715e}.theme__dark .chroma .cm{color:#75715e}.theme__dark .chroma .c1{color:#75715e}.theme__dark .chroma .cs{color:#75715e}.theme__dark .chroma .cp{color:#75715e}.theme__dark .chroma .cpf{color:#75715e}.theme__dark .chroma .gd{color:#f92672}.theme__dark .chroma .ge{font-style:italic}.theme__dark .chroma .gi{color:#a6e22e}.theme__dark .chroma .gs{font-weight:700}.theme__dark .chroma .gu{color:#75715e}.theme__hacker .chroma{color:#f8f8f2;background-color:#282a36}.theme__hacker .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.theme__hacker .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.theme__hacker .chroma .hl{display:block;width:100%;background-color:#ffc}.theme__hacker .chroma .lnt{margin-right:.4em;padding:0 .4em;color:#7f7f7f}.theme__hacker .chroma .ln{margin-right:.4em;padding:0 .4em;color:#7f7f7f}.theme__hacker .chroma .k{color:#ff79c6}.theme__hacker .chroma .kc{color:#ff79c6}.theme__hacker .chroma .kd{color:#8be9fd;font-style:italic}.theme__hacker .chroma .kn{color:#ff79c6}.theme__hacker .chroma .kp{color:#ff79c6}.theme__hacker .chroma .kr{color:#ff79c6}.theme__hacker .chroma .kt{color:#8be9fd}.theme__hacker .chroma .na{color:#50fa7b}.theme__hacker .chroma .nb{color:#8be9fd;font-style:italic}.theme__hacker .chroma .nc{color:#50fa7b}.theme__hacker .chroma .nf{color:#50fa7b}.theme__hacker .chroma .nl{color:#8be9fd;font-style:italic}.theme__hacker .chroma .nt{color:#ff79c6}.theme__hacker .chroma .nv{color:#8be9fd;font-style:italic}.theme__hacker .chroma .vc{color:#8be9fd;font-style:italic}.theme__hacker .chroma .vg{color:#8be9fd;font-style:italic}.theme__hacker .chroma .vi{color:#8be9fd;font-style:italic}.theme__hacker .chroma .s{color:#f1fa8c}.theme__hacker .chroma .sa{color:#f1fa8c}.theme__hacker .chroma .sb{color:#f1fa8c}.theme__hacker .chroma .sc{color:#f1fa8c}.theme__hacker .chroma .dl{color:#f1fa8c}.theme__hacker .chroma .sd{color:#f1fa8c}.theme__hacker .chroma .s2{color:#f1fa8c}.theme__hacker .chroma .se{color:#f1fa8c}.theme__hacker .chroma .sh{color:#f1fa8c}.theme__hacker .chroma .si{color:#f1fa8c}.theme__hacker .chroma .sx{color:#f1fa8c}.theme__hacker .chroma .sr{color:#f1fa8c}.theme__hacker .chroma .s1{color:#f1fa8c}.theme__hacker .chroma .ss{color:#f1fa8c}.theme__hacker .chroma .m{color:#bd93f9}.theme__hacker .chroma .mb{color:#bd93f9}.theme__hacker .chroma .mf{color:#bd93f9}.theme__hacker .chroma .mh{color:#bd93f9}.theme__hacker .chroma .mi{color:#bd93f9}.theme__hacker .chroma .il{color:#bd93f9}.theme__hacker .chroma .mo{color:#bd93f9}.theme__hacker .chroma .o{color:#ff79c6}.theme__hacker .chroma .ow{color:#ff79c6}.theme__hacker .chroma .c{color:#6272a4}.theme__hacker .chroma .ch{color:#6272a4}.theme__hacker .chroma .cm{color:#6272a4}.theme__hacker .chroma .c1{color:#6272a4}.theme__hacker .chroma .cs{color:#6272a4}.theme__hacker .chroma .cp{color:#ff79c6}.theme__hacker .chroma .cpf{color:#ff79c6}.theme__hacker .chroma .gd{color:#8b080b}.theme__hacker .chroma .ge{text-decoration:underline}.theme__hacker .chroma .gh{font-weight:700}.theme__hacker .chroma .gi{font-weight:700}.theme__hacker .chroma .go{color:#44475a}.theme__hacker .chroma .gu{font-weight:700}.theme__hacker .chroma .gl{text-decoration:underline}.theme__solarized .chroma{color:#dc322f;background-color:#faf1cd}.theme__solarized .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.theme__solarized .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.theme__solarized .chroma .hl{display:block;width:100%;background-color:#ffc}.theme__solarized .chroma .lnt{margin-right:.4em;padding:0 .4em;color:#aaa}.theme__solarized .chroma .ln{margin-right:.4em;padding:0 .4em;color:#aaa}.theme__solarized .chroma .k{color:#07a}.theme__solarized .chroma .kc{color:#07a;font-weight:700}.theme__solarized .chroma .kd{color:#07a}.theme__solarized .chroma .kn{color:#dc322f;font-weight:700}.theme__solarized .chroma .kp{color:#07a}.theme__solarized .chroma .kr{color:#07a}.theme__solarized .chroma .kt{color:#07a;font-weight:700}.theme__solarized .chroma .n{color:#c47e00}.theme__solarized .chroma .na{color:#c47e00}.theme__solarized .chroma .nb{color:#690}.theme__solarized .chroma .bp{color:#c47e00}.theme__solarized .chroma .nc{color:#690}.theme__solarized .chroma .no{color:#c47e00}.theme__solarized .chroma .nd{color:#c47e00}.theme__solarized .chroma .ni{color:#c47e00}.theme__solarized .chroma .ne{color:#c47e00}.theme__solarized .chroma .nf{color:#dd4a68}.theme__solarized .chroma .fm{color:#dd4a68}.theme__solarized .chroma .nl{color:#c47e00}.theme__solarized .chroma .nn{color:#c47e00}.theme__solarized .chroma .nx{color:#c47e00}.theme__solarized .chroma .py{color:#c47e00}.theme__solarized .chroma .nt{color:#268bd2;font-weight:700}.theme__solarized .chroma .nv{color:#c47e00}.theme__solarized .chroma .vc{color:#c47e00}.theme__solarized .chroma .vg{color:#c47e00}.theme__solarized .chroma .vi{color:#c47e00}.theme__solarized .chroma .vm{color:#c47e00}.theme__solarized .chroma .l{color:#2aa198}.theme__solarized .chroma .ld{color:#2aa198}.theme__solarized .chroma .s{color:#2aa198}.theme__solarized .chroma .sa{color:#2aa198}.theme__solarized .chroma .sb{color:#2aa198}.theme__solarized .chroma .sc{color:#2aa198}.theme__solarized .chroma .dl{color:#2aa198}.theme__solarized .chroma .sd{color:#2aa198}.theme__solarized .chroma .s2{color:#2aa198}.theme__solarized .chroma .se{color:#2aa198}.theme__solarized .chroma .sh{color:#2aa198}.theme__solarized .chroma .si{color:#2aa198}.theme__solarized .chroma .sx{color:#2aa198}.theme__solarized .chroma .sr{color:#2aa198}.theme__solarized .chroma .s1{color:#2aa198}.theme__solarized .chroma .ss{color:#2aa198}.theme__solarized .chroma .m{color:#2aa198;font-weight:700}.theme__solarized .chroma .mb{color:#2aa198;font-weight:700}.theme__solarized .chroma .mf{color:#2aa198;font-weight:700}.theme__solarized .chroma .mh{color:#2aa198;font-weight:700}.theme__solarized .chroma .mi{color:#2aa198;font-weight:700}.theme__solarized .chroma .il{color:#2aa198;font-weight:700}.theme__solarized .chroma .mo{color:#2aa198;font-weight:700}.theme__solarized .chroma .ow{color:#07a}.theme__solarized .chroma .c{color:#93a1a1;font-style:italic}.theme__solarized .chroma .ch{color:#93a1a1;font-style:italic}.theme__solarized .chroma .cm{color:#93a1a1;font-style:italic}.theme__solarized .chroma .c1{color:#93a1a1;font-style:italic}.theme__solarized .chroma .cs{color:#93a1a1;font-style:italic}.theme__solarized .chroma .cp{color:#93a1a1;font-style:italic}.theme__solarized .chroma .cpf{color:#93a1a1;font-style:italic}.theme__solarized .chroma .g{color:#d33682}.theme__solarized .chroma .gd{color:#d33682}.theme__solarized .chroma .ge{color:#d33682}.theme__solarized .chroma .gr{color:#d33682}.theme__solarized .chroma .gh{color:#d33682}.theme__solarized .chroma .gi{color:#d33682}.theme__solarized .chroma .go{color:#d33682}.theme__solarized .chroma .gp{color:#d33682}.theme__solarized .chroma .gs{color:#d33682}.theme__solarized .chroma .gu{color:#d33682}.theme__solarized .chroma .gt{color:#d33682}.theme__solarized .chroma .gl{color:#d33682}.theme__custom .chroma{background-color:#f0fbff}.theme__custom .chroma .err{color:red;background-color:#faa}.theme__custom .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.theme__custom .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.theme__custom .chroma .hl{display:block;width:100%;background-color:#ffc}.theme__custom .chroma .lnt{margin-right:.4em;padding:0 .4em;color:#7f7f7f}.theme__custom .chroma .ln{margin-right:.4em;padding:0 .4em;color:#7f7f7f}.theme__custom .chroma .k{color:#00a}.theme__custom .chroma .kc{color:#00a}.theme__custom .chroma .kd{color:#00a}.theme__custom .chroma .kn{color:#00a}.theme__custom .chroma .kp{color:#00a}.theme__custom .chroma .kr{color:#00a}.theme__custom .chroma .kt{color:#0aa}.theme__custom .chroma .na{color:#1e90ff}.theme__custom .chroma .nb{color:#0aa}.theme__custom .chroma .nc{color:#0a0;text-decoration:underline}.theme__custom .chroma .no{color:#a00}.theme__custom .chroma .nd{color:#888}.theme__custom .chroma .ni{color:#800;font-weight:700}.theme__custom .chroma .nf{color:#0a0}.theme__custom .chroma .nn{color:#0aa;text-decoration:underline}.theme__custom .chroma .nt{color:#1e90ff;font-weight:700}.theme__custom .chroma .nv{color:#a00}.theme__custom .chroma .s{color:#a50}.theme__custom .chroma .sa{color:#a50}.theme__custom .chroma .sb{color:#a50}.theme__custom .chroma .sc{color:#a50}.theme__custom .chroma .dl{color:#a50}.theme__custom .chroma .sd{color:#a50}.theme__custom .chroma .s2{color:#a50}.theme__custom .chroma .se{color:#a50}.theme__custom .chroma .sh{color:#a50}.theme__custom .chroma .si{color:#a50}.theme__custom .chroma .sx{color:#a50}.theme__custom .chroma .sr{color:#099}.theme__custom .chroma .s1{color:#a50}.theme__custom .chroma .ss{color:#00a}.theme__custom .chroma .m{color:#099}.theme__custom .chroma .mb{color:#099}.theme__custom .chroma .mf{color:#099}.theme__custom .chroma .mh{color:#099}.theme__custom .chroma .mi{color:#099}.theme__custom .chroma .il{color:#099}.theme__custom .chroma .mo{color:#099}.theme__custom .chroma .ow{color:#00a}.theme__custom .chroma .c{color:#aaa;font-style:italic}.theme__custom .chroma .ch{color:#aaa;font-style:italic}.theme__custom .chroma .cm{color:#aaa;font-style:italic}.theme__custom .chroma .c1{color:#aaa;font-style:italic}.theme__custom .chroma .cs{color:#00a;font-style:italic}.theme__custom .chroma .cp{color:#4c8317}.theme__custom .chroma .cpf{color:#4c8317}.theme__custom .chroma .gd{color:#a00}.theme__custom .chroma .ge{font-style:italic}.theme__custom .chroma .gr{color:#a00}.theme__custom .chroma .gh{color:navy;font-weight:700}.theme__custom .chroma .gi{color:#0a0}.theme__custom .chroma .go{color:#888}.theme__custom .chroma .gp{color:#555}.theme__custom .chroma .gs{font-weight:700}.theme__custom .chroma .gu{color:purple;font-weight:700}.theme__custom .chroma .gt{color:#a00}.theme__custom .chroma .gl{text-decoration:underline}.theme__custom .chroma .w{color:#bbb}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}.theme__dark a{text-decoration:none;color:#ffd866}.theme__dark a:hover,.theme__dark a:active,.theme__dark a:focus{color:#ff6188;text-decoration:underline}.theme__light a{text-decoration:none;color:#607d8b}.theme__light a:hover,.theme__light a:active,.theme__light a:focus{color:#ff6188;text-decoration:underline}.theme__hacker a{text-decoration:none;color:#e08c48}.theme__hacker a:hover,.theme__hacker a:active,.theme__hacker a:focus{color:#ff6188;text-decoration:underline}.theme__solarized a{text-decoration:none;color:#b58900}.theme__solarized a:hover,.theme__solarized a:active,.theme__solarized a:focus{color:#ff6188;text-decoration:underline}.theme__custom a{text-decoration:none;color:#1d6c87}.theme__custom a:hover,.theme__custom a:active,.theme__custom a:focus{color:#144a5d;text-decoration:underline}/*!minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css*/html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}ul{list-style:none}hr{border:0}button,input,select,textarea{margin:0}img,video{height:auto;max-width:100%;object-fit:inherit}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:left}figcaption{font-style:italic;font-size:.9rem;margin-bottom:1rem}.theme__dark figcaption{color:#bdbdbd}.theme__dark figcaption strong{color:#fcfcfa}.theme__light figcaption{color:#bdbdbd}.theme__light figcaption strong{color:#424242}.theme__hacker figcaption{color:#1fff2a}.theme__hacker figcaption strong{color:#fcfcfa}.theme__solarized figcaption{color:#ffb300}.theme__solarized figcaption strong{color:#b58900}.theme__custom figcaption{color:#09c}.theme__custom figcaption strong{color:#006080}.theme__dark ::-moz-selection{color:#fcfcfa;background:#ff6188}.theme__light ::-moz-selection{color:#fcfcfa;background:#ff6188}.theme__hacker ::-moz-selection{color:#fcfcfa;background:#ff6188}.theme__solarized ::-moz-selection{color:#fcfcfa;background:#ff6188}.theme__custom ::-moz-selection{color:#eaf6fb;background:#1d6c87}.theme__dark ::selection{color:#fcfcfa;background:#ff6188}.theme__light ::selection{color:#fcfcfa;background:#ff6188}.theme__hacker ::selection{color:#fcfcfa;background:#ff6188}.theme__solarized ::selection{color:#fcfcfa;background:#ff6188}.theme__custom ::selection{color:#eaf6fb;background:#1d6c87}/*!Generated by Font Squirrel (https://www.fontsquirrel.com) on October 26, 2019*/@font-face{font-family:montserrat;src:url(../fonts/montserrat-regular.woff2) format("woff2"),url(../fonts/montserrat-regular.woff) format("woff");font-weight:400;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:montserrat;src:url(../fonts/montserrat-bold.woff2) format("woff2"),url(../fonts/montserrat-bold.woff) format("woff");font-weight:700;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:montserrat;src:url(../fonts/montserrat-black.woff2) format("woff2"),url(../fonts/montserrat-black.woff) format("woff");font-weight:900;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:merriweather;src:url(../fonts/merriweather-regular.woff2) format("woff2"),url(../fonts/merriweather-regular.woff) format("woff");font-weight:400;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:merriweather;src:url(../fonts/merriweather-italic.woff2) format("woff2"),url(../fonts/merriweather-italic.woff) format("woff");font-weight:400;font-style:italic;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:merriweather;src:url(../fonts/merriweather-bold.woff2) format("woff2"),url(../fonts/merriweather-bold.woff) format("woff");font-weight:700;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:merriweather;src:url(../fonts/merriweather-bolditalic.woff2) format("woff2"),url(../fonts/merriweather-bolditalic.woff) format("woff");font-weight:700;font-style:italic;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:merriweather;src:url(../fonts/merriweather-black.woff2) format("woff2"),url(../fonts/merriweather-black.woff) format("woff");font-weight:900;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}.clearfix::after{clear:both;content:'';display:table}.container{max-width:100%;margin-left:auto;margin-right:auto;width:100%;min-height:100vh;position:relative}.theme__dark .container{background-color:#2d2a2e}.theme__light .container{background-color:#fafafa}.theme__hacker .container{background-color:#151715}.theme__solarized .container{background-color:#fdf7e3}.theme__custom .container{background-color:#f7fdff}.hide{display:none}.grow{-webkit-flex-grow:1;-moz-flex-grow:1;-ms-flex-grow:1;flex-grow:1}body{font:125%/1.4 BlinkMacSystemFont,-apple-system,segoe ui,roboto,oxygen,ubuntu,cantarell,fira sans,droid sans,helvetica neue,helvetica,arial,sans-serif}code,pre{font:125%/1.8 Consolas,andale mono wt,andale mono,lucida console,lucida sans typewriter,dejavu sans mono,bitstream vera sans mono,liberation mono,nimbus mono l,Monaco,courier new,Courier,monospace}.h1{font-size:4rem}.h2{font-size:3.5rem}.h3{font-size:3rem}.h4{font-size:2.5rem}.h5{font-size:2rem}.h6{font-size:1.5rem}.p1{font-size:1.2rem}.p2{font-size:1rem}.caption{font-size:.8rem}@-webkit-keyframes slide-in-down{0%{transform:translate(0,-12%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-moz-keyframes slide-in-down{0%{transform:translate(0,-12%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-ms-keyframes slide-in-down{0%{transform:translate(0,-12%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-o-keyframes slide-in-down{0%{transform:translate(0,-12%);opacity:0}100%{transform:translate(0,0);opacity:1}}@keyframes slide-in-down{0%{transform:translate(0,-12%);opacity:0}100%{transform:translate(0,0);opacity:1}}@-webkit-keyframes slide-in-left{0%{transform:translate(-12%,0);opacity:0}100%{transform:translate(0,0);opacity:1}}@-moz-keyframes slide-in-left{0%{transform:translate(-12%,0);opacity:0}100%{transform:translate(0,0);opacity:1}}@-ms-keyframes slide-in-left{0%{transform:translate(-12%,0);opacity:0}100%{transform:translate(0,0);opacity:1}}@-o-keyframes slide-in-left{0%{transform:translate(-12%,0);opacity:0}100%{transform:translate(0,0);opacity:1}}@keyframes slide-in-left{0%{transform:translate(-12%,0);opacity:0}100%{transform:translate(0,0);opacity:1}}.navbar{margin:auto;width:inherit;max-width:inherit;height:50px;z-index:12;position:fixed;left:0;right:0;top:0;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-justify-content:space-between;-moz-justify-content:space-between;-ms-justify-content:space-between;justify-content:space-between;-ms-flex-pack:space-between}.theme__dark .navbar{border-bottom:1px solid #2d2a2e;background-color:#403e41}.theme__light .navbar{border-bottom:1px solid #e0e0e0;background-color:#eaeaea}.theme__hacker .navbar{border-bottom:1px solid #252526;background-color:#252526}.theme__solarized .navbar{border-bottom:1px solid #b58900;background-color:#eee8d5}.theme__custom .navbar{border-bottom:1px solid #1d6c87;background-color:#c6e6f1}.navbar--hide{top:-50px}.navbar--show{top:0}@media(min-width:769px){.navbar__slide-down:nth-child(1){-webkit-animation:slide-in-down .25s .1s 1 ease both;-moz-animation:slide-in-down .25s .1s 1 ease both;-ms-animation:slide-in-down .25s .1s 1 ease both;-o-animation:slide-in-down .25s .1s 1 ease both;animation:slide-in-down .25s .1s 1 ease both}.navbar__slide-down:nth-child(2){-webkit-animation:slide-in-down .25s .2s 1 ease both;-moz-animation:slide-in-down .25s .2s 1 ease both;-ms-animation:slide-in-down .25s .2s 1 ease both;-o-animation:slide-in-down .25s .2s 1 ease both;animation:slide-in-down .25s .2s 1 ease both}.navbar__slide-down:nth-child(3){-webkit-animation:slide-in-down .25s .3s 1 ease both;-moz-animation:slide-in-down .25s .3s 1 ease both;-ms-animation:slide-in-down .25s .3s 1 ease both;-o-animation:slide-in-down .25s .3s 1 ease both;animation:slide-in-down .25s .3s 1 ease both}.navbar__slide-down:nth-child(4){-webkit-animation:slide-in-down .25s .4s 1 ease both;-moz-animation:slide-in-down .25s .4s 1 ease both;-ms-animation:slide-in-down .25s .4s 1 ease both;-o-animation:slide-in-down .25s .4s 1 ease both;animation:slide-in-down .25s .4s 1 ease both}.navbar__slide-down:nth-child(5){-webkit-animation:slide-in-down .25s .5s 1 ease both;-moz-animation:slide-in-down .25s .5s 1 ease both;-ms-animation:slide-in-down .25s .5s 1 ease both;-o-animation:slide-in-down .25s .5s 1 ease both;animation:slide-in-down .25s .5s 1 ease both}.navbar__slide-down:nth-child(6){-webkit-animation:slide-in-down .25s .6s 1 ease both;-moz-animation:slide-in-down .25s .6s 1 ease both;-ms-animation:slide-in-down .25s .6s 1 ease both;-o-animation:slide-in-down .25s .6s 1 ease both;animation:slide-in-down .25s .6s 1 ease both}.navbar__slide-down:nth-child(7){-webkit-animation:slide-in-down .25s .7s 1 ease both;-moz-animation:slide-in-down .25s .7s 1 ease both;-ms-animation:slide-in-down .25s .7s 1 ease both;-o-animation:slide-in-down .25s .7s 1 ease both;animation:slide-in-down .25s .7s 1 ease both}.navbar__slide-down:nth-child(8){-webkit-animation:slide-in-down .25s .8s 1 ease both;-moz-animation:slide-in-down .25s .8s 1 ease both;-ms-animation:slide-in-down .25s .8s 1 ease both;-o-animation:slide-in-down .25s .8s 1 ease both;animation:slide-in-down .25s .8s 1 ease both}}.navbar__brand{height:50px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-shrink:0;-moz-flex-shrink:0;-ms-flex-shrink:0;flex-shrink:0}.navbar__burger{display:none;position:relative;-webkit-animation:slide-in-down .5s 0s 1 ease both;-moz-animation:slide-in-down .5s 0s 1 ease both;-ms-animation:slide-in-down .5s 0s 1 ease both;-o-animation:slide-in-down .5s 0s 1 ease both;animation:slide-in-down .5s 0s 1 ease both}@media(max-width:769px){.navbar__burger{cursor:pointer;margin-left:auto;position:relative;height:50px;width:35px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:flex-end;-moz-justify-content:flex-end;-ms-justify-content:flex-end;justify-content:flex-end;-ms-flex-pack:flex-end}.navbar__burger span{border-radius:1rem;display:block;height:2px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color,opacity,transform;transition-timing-function:ease-out;width:16px}.theme__dark .navbar__burger span{background-color:#fcfcfa}.theme__light .navbar__burger span{background-color:#777}.theme__hacker .navbar__burger span{background-color:#dbdbdb}.theme__solarized .navbar__burger span{background-color:#b58900}.theme__custom .navbar__burger span{background-color:#07495f}.navbar__burger span:nth-child(1){top:calc(50% - 6px)}.navbar__burger span:nth-child(2){top:calc(50% - 1px)}.navbar__burger span:nth-child(3){top:calc(50% + 4px)}.theme__dark .navbar__burger:hover span{background-color:#ff6188}.theme__light .navbar__burger:hover span{background-color:#ff6188}.theme__hacker .navbar__burger:hover span{background-color:#ff6188}.theme__solarized .navbar__burger:hover span{background-color:#ff6188}.theme__custom .navbar__burger:hover span{background-color:#144a5d}.navbar__burger.is-active{display:block}.navbar__burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar__burger.is-active span:nth-child(2){opacity:0}.navbar__burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}}.navbar__logo{width:100%;height:100%}.navbar__logo-link{width:40px;height:40px;padding:.1rem;margin:auto .25rem;-webkit-flex-shrink:0;-moz-flex-shrink:0;-ms-flex-shrink:0;flex-shrink:0;flex-shrink:0}.navbar__title{height:50px;font-size:1.5rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}.theme__dark .navbar__title-link{color:#fcfcfa}.theme__dark .navbar__title-link:hover,.theme__dark .navbar__title-link:active,.theme__dark .navbar__title-link:focus{text-decoration:none;color:#fcfcfa}.theme__light .navbar__title-link{color:#555}.theme__light .navbar__title-link:hover,.theme__light .navbar__title-link:active,.theme__light .navbar__title-link:focus{text-decoration:none;color:#555}.theme__hacker .navbar__title-link{color:#e3cd26}.theme__hacker .navbar__title-link:hover,.theme__hacker .navbar__title-link:active,.theme__hacker .navbar__title-link:focus{text-decoration:none;color:#e3cd26}.theme__solarized .navbar__title-link{color:#555}.theme__solarized .navbar__title-link:hover,.theme__solarized .navbar__title-link:active,.theme__solarized .navbar__title-link:focus{text-decoration:none;color:#555}.theme__custom .navbar__title-link{color:#09485d}.theme__custom .navbar__title-link:hover,.theme__custom .navbar__title-link:active,.theme__custom .navbar__title-link:focus{text-decoration:none;color:#09485d}.navbar__menu{-webkit-flex-grow:1;-moz-flex-grow:1;-ms-flex-grow:1;flex-grow:1;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:flex-end;-moz-justify-content:flex-end;-ms-justify-content:flex-end;justify-content:flex-end;-ms-flex-pack:flex-end;height:50px}@media(max-width:769px){.navbar__menu{display:none}}.navbar__menu-item{height:50px;padding:.5rem;font-size:1rem;font-family:montserrat,sans-serif;font-weight:700;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme__dark .navbar__menu-item{color:#fcfcfa}.theme__dark .navbar__menu-item:hover,.theme__dark .navbar__menu-item:active,.theme__dark .navbar__menu-item:focus{color:#ffd866;background-color:#4d4a4e;text-decoration:none;border-bottom:1px solid #2d2a2e}@media(max-width:769px){.theme__dark .navbar__menu-item:hover,.theme__dark .navbar__menu-item:active,.theme__dark .navbar__menu-item:focus{border-bottom:none}}.theme__dark .navbar__menu-item.active{color:#ff6188!important}.theme__light .navbar__menu-item{color:#555}.theme__light .navbar__menu-item:hover,.theme__light .navbar__menu-item:active,.theme__light .navbar__menu-item:focus{color:#607d8b;background-color:#f1f1f1;text-decoration:none;border-bottom:1px solid #e0e0e0}@media(max-width:769px){.theme__light .navbar__menu-item:hover,.theme__light .navbar__menu-item:active,.theme__light .navbar__menu-item:focus{border-bottom:none}}.theme__light .navbar__menu-item.active{color:#ff6188!important}.theme__hacker .navbar__menu-item{color:#e3cd26}.theme__hacker .navbar__menu-item:hover,.theme__hacker .navbar__menu-item:active,.theme__hacker .navbar__menu-item:focus{color:#1fff2a;background-color:#464c46;text-decoration:none;border-bottom:1px solid #252526}@media(max-width:769px){.theme__hacker .navbar__menu-item:hover,.theme__hacker .navbar__menu-item:active,.theme__hacker .navbar__menu-item:focus{border-bottom:none}}.theme__hacker .navbar__menu-item.active{color:#f3ff6e!important}.theme__solarized .navbar__menu-item{color:#555}.theme__solarized .navbar__menu-item:hover,.theme__solarized .navbar__menu-item:active,.theme__solarized .navbar__menu-item:focus{color:#b58900;background-color:#f9eaba;text-decoration:none;border-bottom:1px solid #b58900}@media(max-width:769px){.theme__solarized .navbar__menu-item:hover,.theme__solarized .navbar__menu-item:active,.theme__solarized .navbar__menu-item:focus{border-bottom:none}}.theme__solarized .navbar__menu-item.active{color:#b58900!important}.theme__custom .navbar__menu-item{color:#09485d}.theme__custom .navbar__menu-item:hover,.theme__custom .navbar__menu-item:active,.theme__custom .navbar__menu-item:focus{color:#0086b3;background-color:#ccf2ff;text-decoration:none;border-bottom:1px solid #1d6c87}@media(max-width:769px){.theme__custom .navbar__menu-item:hover,.theme__custom .navbar__menu-item:active,.theme__custom .navbar__menu-item:focus{border-bottom:none}}.theme__custom .navbar__menu-item.active{color:#0086b3!important}@media(max-width:769px){.navbar__menu-item{-webkit-justify-content:flex-start;-moz-justify-content:flex-start;-ms-justify-content:flex-start;justify-content:flex-start;-ms-flex-pack:flex-start;width:100%;padding:0 .75rem}}.navbar__menu-icon{margin-top:.4rem}.navbar__menu.is-active{position:absolute;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;-moz-align-items:flex-start;-ms-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;top:100%;width:100%;height:auto;overflow:hidden}.theme__dark .navbar__menu.is-active{border-top:1px solid #2d2a2e;background-color:#3a3a3a;border-bottom:1px solid #2d2a2e}.theme__light .navbar__menu.is-active{border-top:1px solid #e0e0e0;background-color:#f1f1f1;border-bottom:1px solid #e0e0e0}.theme__hacker .navbar__menu.is-active{border-top:1px solid #252526;background-color:#323232;border-bottom:1px solid #252526}.theme__solarized .navbar__menu.is-active{border-top:1px solid #b58900;background-color:#eae3cc;border-bottom:1px solid #b58900}.theme__custom .navbar__menu.is-active{border-top:1px solid #1d6c87;background-color:#def1f7;border-bottom:1px solid #1d6c87}.navbar__dropdown{display:inline-block;height:50px}@media(max-width:769px){.navbar__dropdown{width:100%;height:auto}}.navbar__dropdown--content{position:absolute;display:none;width:inherit;z-index:11;border-bottom-left-radius:.15rem;border-bottom-right-radius:.15rem;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);-moz-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);box-shadow:0 1px 3px 0 rgba(0,0,0,.4)}.theme__dark .navbar__dropdown--content{border-top:4px solid #424242;background-color:#595b5c}.theme__light .navbar__dropdown--content{border-top:4px solid #e0e0e0;background-color:#fafafa}.theme__hacker .navbar__dropdown--content{border-top:4px solid #6b6b6b;background-color:#212421}.theme__solarized .navbar__dropdown--content{border-top:4px solid #e8b000;background-color:#fafafa}.theme__custom .navbar__dropdown--content{border-top:4px solid #00ace6;background-color:#f5fcff}@media(max-width:769px){.navbar__dropdown--content{position:relative;display:block;box-shadow:none}.theme__dark .navbar__dropdown--content{border-top:none;background-color:#3a3a3a}.theme__light .navbar__dropdown--content{border-top:none;background-color:#f1f1f1}.theme__hacker .navbar__dropdown--content{border-top:none;background-color:#323232}.theme__solarized .navbar__dropdown--content{border-top:none;background-color:#eae3cc}.theme__custom .navbar__dropdown--content{border-top:none;background-color:#def1f7}}.navbar__dropdown--item{padding:.25rem .75rem;height:auto;margin:auto;text-decoration:none;display:block;font-size:1rem;font-weight:700}.theme__dark .navbar__dropdown--item{color:#fcfcfa}.theme__dark .navbar__dropdown--item:hover,.theme__dark .navbar__dropdown--item:active,.theme__dark .navbar__dropdown--item:focus{color:#ffd866;background-color:#4d4a4e;text-decoration:none}.theme__dark .navbar__dropdown--item:hover:last-child,.theme__dark .navbar__dropdown--item:active:last-child,.theme__dark .navbar__dropdown--item:focus:last-child{border-bottom-left-radius:.15rem;border-bottom-right-radius:.15rem}.theme__light .navbar__dropdown--item{color:#555}.theme__light .navbar__dropdown--item:hover,.theme__light .navbar__dropdown--item:active,.theme__light .navbar__dropdown--item:focus{color:#607d8b;background-color:#f1f1f1;text-decoration:none}.theme__light .navbar__dropdown--item:hover:last-child,.theme__light .navbar__dropdown--item:active:last-child,.theme__light .navbar__dropdown--item:focus:last-child{border-bottom-left-radius:.15rem;border-bottom-right-radius:.15rem}.theme__hacker .navbar__dropdown--item{color:#e3cd26}.theme__hacker .navbar__dropdown--item:hover,.theme__hacker .navbar__dropdown--item:active,.theme__hacker .navbar__dropdown--item:focus{color:#1fff2a;background-color:#464c46;text-decoration:none}.theme__hacker .navbar__dropdown--item:hover:last-child,.theme__hacker .navbar__dropdown--item:active:last-child,.theme__hacker .navbar__dropdown--item:focus:last-child{border-bottom-left-radius:.15rem;border-bottom-right-radius:.15rem}.theme__solarized .navbar__dropdown--item{color:#424242}.theme__solarized .navbar__dropdown--item:hover,.theme__solarized .navbar__dropdown--item:active,.theme__solarized .navbar__dropdown--item:focus{color:#b58900;background-color:#f9eaba;text-decoration:none}.theme__solarized .navbar__dropdown--item:hover:last-child,.theme__solarized .navbar__dropdown--item:active:last-child,.theme__solarized .navbar__dropdown--item:focus:last-child{border-bottom-left-radius:.15rem;border-bottom-right-radius:.15rem}.theme__custom .navbar__dropdown--item{color:#002633}.theme__custom .navbar__dropdown--item:hover,.theme__custom .navbar__dropdown--item:active,.theme__custom .navbar__dropdown--item:focus{color:#0086b3;background-color:#ccf2ff;text-decoration:none}.theme__custom .navbar__dropdown--item:hover:last-child,.theme__custom .navbar__dropdown--item:active:last-child,.theme__custom .navbar__dropdown--item:focus:last-child{border-bottom-left-radius:.15rem;border-bottom-right-radius:.15rem}@media(max-width:769px){.navbar__dropdown--item{padding-left:2.5rem}}.navbar__dropdown:hover .navbar__dropdown--content{display:block}.theme{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:flex-end;-moz-justify-content:flex-end;-ms-justify-content:flex-end;justify-content:flex-end;-ms-flex-pack:flex-end;-webkit-animation:slide-in-down .5s 0s 1 ease both;-moz-animation:slide-in-down .5s 0s 1 ease both;-ms-animation:slide-in-down .5s 0s 1 ease both;-o-animation:slide-in-down .5s 0s 1 ease both;animation:slide-in-down .5s 0s 1 ease both}@media(max-width:769px){.theme{display:none}}.theme .dropdown{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.theme__dark .theme .dropdown{color:#fcfcfa}.theme__dark .theme .dropdown:hover,.theme__dark .theme .dropdown:active,.theme__dark .theme .dropdown:focus{color:#ffd866;background-color:#4d4a4e}.theme__light .theme .dropdown{color:#777}.theme__light .theme .dropdown:hover,.theme__light .theme .dropdown:active,.theme__light .theme .dropdown:focus{color:#607d8b;background-color:#f1f1f1}.theme__hacker .theme .dropdown{color:#dbdbdb}.theme__hacker .theme .dropdown:hover,.theme__hacker .theme .dropdown:active,.theme__hacker .theme .dropdown:focus{color:#1fff2a;background-color:#464c46}.theme__solarized .theme .dropdown{color:#b58900}.theme__solarized .theme .dropdown:hover,.theme__solarized .theme .dropdown:active,.theme__solarized .theme .dropdown:focus{color:#b58900;background-color:#f9eaba}.theme__custom .theme .dropdown{color:#07495f}.theme__custom .theme .dropdown:hover,.theme__custom .theme .dropdown:active,.theme__custom .theme .dropdown:focus{color:#0086b3;background-color:#ccf2ff}.theme .dropdown-trigger{padding:.5rem;cursor:pointer;border:none;outline:none;width:50px;height:48px;color:inherit;background-color:inherit}.theme .dropdown-content{position:absolute;top:100%;right:0;display:none;height:auto;z-index:11;border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);-moz-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);box-shadow:0 1px 3px 0 rgba(0,0,0,.4)}.theme .dropdown-content a{font-size:.9rem}.theme__dark .theme .dropdown-content{border-top:4px solid #424242;background-color:#595b5c}.theme__light .theme .dropdown-content{border-top:4px solid #e0e0e0;background-color:#fafafa}.theme__hacker .theme .dropdown-content{border-top:4px solid #6b6b6b;background-color:#212421}.theme__solarized .theme .dropdown-content{border-top:4px solid #e8b000;background-color:#fafafa}.theme__custom .theme .dropdown-content{border-top:4px solid #00ace6;background-color:#f5fcff}.theme__dark .theme .dropdown-content .is-active{background-color:#424242}.theme__light .theme .dropdown-content .is-active{background-color:#e0e0e0}.theme__hacker .theme .dropdown-content .is-active{background-color:#323732}.theme__solarized .theme .dropdown-content .is-active{background-color:#fbf1d1}.theme__custom .theme .dropdown-content .is-active{background-color:#ccf2ff}.theme .dropdown-item{padding:.25rem .75rem;height:100%;text-decoration:none;display:block;font-size:1rem;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme__dark .theme .dropdown-item{color:#fcfcfa}.theme__dark .theme .dropdown-item:hover,.theme__dark .theme .dropdown-item:active,.theme__dark .theme .dropdown-item:focus{color:#fcfcfa;background-color:#727072;text-decoration:none}.theme__dark .theme .dropdown-item:hover:last-child,.theme__dark .theme .dropdown-item:active:last-child,.theme__dark .theme .dropdown-item:focus:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.theme__light .theme .dropdown-item{color:#555}.theme__light .theme .dropdown-item:hover,.theme__light .theme .dropdown-item:active,.theme__light .theme .dropdown-item:focus{color:#fcfcfa;background-color:#bdbdbd;text-decoration:none}.theme__light .theme .dropdown-item:hover:last-child,.theme__light .theme .dropdown-item:active:last-child,.theme__light .theme .dropdown-item:focus:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.theme__hacker .theme .dropdown-item{color:#e3cd26}.theme__hacker .theme .dropdown-item:hover,.theme__hacker .theme .dropdown-item:active,.theme__hacker .theme .dropdown-item:focus{color:#fcfcfa;background-color:#464c46;text-decoration:none}.theme__hacker .theme .dropdown-item:hover:last-child,.theme__hacker .theme .dropdown-item:active:last-child,.theme__hacker .theme .dropdown-item:focus:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.theme__solarized .theme .dropdown-item{color:#424242}.theme__solarized .theme .dropdown-item:hover,.theme__solarized .theme .dropdown-item:active,.theme__solarized .theme .dropdown-item:focus{color:#b58900;background-color:#f9eaba;text-decoration:none}.theme__solarized .theme .dropdown-item:hover:last-child,.theme__solarized .theme .dropdown-item:active:last-child,.theme__solarized .theme .dropdown-item:focus:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.theme__custom .theme .dropdown-item{color:#002633}.theme__custom .theme .dropdown-item:hover,.theme__custom .theme .dropdown-item:active,.theme__custom .theme .dropdown-item:focus{color:#0086b3;background-color:#ccf2ff;text-decoration:none}.theme__custom .theme .dropdown-item:hover:last-child,.theme__custom .theme .dropdown-item:active:last-child,.theme__custom .theme .dropdown-item:focus:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.theme .dropdown:hover .dropdown-content{display:block}.theme-mobile{display:none;outline:none;position:absolute;top:0;right:70px;width:35px;height:50px;padding:.25rem;cursor:pointer;z-index:13;-webkit-animation:slide-in-down .5s .4s 1 ease both;-moz-animation:slide-in-down .5s .4s 1 ease both;-ms-animation:slide-in-down .5s .4s 1 ease both;-o-animation:slide-in-down .5s .4s 1 ease both;animation:slide-in-down .5s .4s 1 ease both}.theme__dark .theme-mobile{color:#fcfcfa}.theme__dark .theme-mobile:hover,.theme__dark .theme-mobile:active,.theme__dark .theme-mobile:focus{color:#ff6188;background-color:inherit;border-bottom:none}.theme__light .theme-mobile{color:#777}.theme__light .theme-mobile:hover,.theme__light .theme-mobile:active,.theme__light .theme-mobile:focus{color:#ff6188;background-color:inherit;border-bottom:none}.theme__hacker .theme-mobile{color:#dbdbdb}.theme__hacker .theme-mobile:hover,.theme__hacker .theme-mobile:active,.theme__hacker .theme-mobile:focus{color:#ff6188;background-color:inherit;border-bottom:none}.theme__solarized .theme-mobile{color:#b58900}.theme__solarized .theme-mobile:hover,.theme__solarized .theme-mobile:active,.theme__solarized .theme-mobile:focus{color:#ff6188;background-color:inherit;border-bottom:none}.theme__custom .theme-mobile{color:#07495f}.theme__custom .theme-mobile:hover,.theme__custom .theme-mobile:active,.theme__custom .theme-mobile:focus{color:#144a5d;background-color:inherit;border-bottom:none}@media(max-width:769px){.theme-mobile{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:flex-end;-moz-justify-content:flex-end;-ms-justify-content:flex-end;justify-content:flex-end;-ms-flex-pack:flex-end}}.theme-mobile .dropdown{border-bottom:2px solid transparent}.theme__dark .theme-mobile .dropdown{color:#fcfcfa}.theme__dark .theme-mobile .dropdown:hover,.theme__dark .theme-mobile .dropdown:active,.theme__dark .theme-mobile .dropdown:focus{color:#ff6188;background-color:#4d4a4e;border-bottom:2px solid #2d2a2e}.theme__light .theme-mobile .dropdown{color:#777}.theme__light .theme-mobile .dropdown:hover,.theme__light .theme-mobile .dropdown:active,.theme__light .theme-mobile .dropdown:focus{color:#ff6188;background-color:#f1f1f1;border-bottom:2px solid #e0e0e0}.theme__hacker .theme-mobile .dropdown{color:#dbdbdb}.theme__hacker .theme-mobile .dropdown:hover,.theme__hacker .theme-mobile .dropdown:active,.theme__hacker .theme-mobile .dropdown:focus{color:#ff6188;background-color:#464c46;border-bottom:2px solid #252526}.theme__solarized .theme-mobile .dropdown{color:#b58900}.theme__solarized .theme-mobile .dropdown:hover,.theme__solarized .theme-mobile .dropdown:active,.theme__solarized .theme-mobile .dropdown:focus{color:#ff6188;background-color:#f9eaba;border-bottom:2px solid #b58900}.theme__custom .theme-mobile .dropdown{color:#07495f}.theme__custom .theme-mobile .dropdown:hover,.theme__custom .theme-mobile .dropdown:active,.theme__custom .theme-mobile .dropdown:focus{color:#144a5d;background-color:#ccf2ff;border-bottom:2px solid #1d6c87}.theme-mobile .dropdown-trigger{padding:.5rem;cursor:pointer;border:none;outline:none;width:35px;height:50px;color:inherit;background-color:inherit}.theme-mobile .dropdown-content{position:absolute;top:100%;right:0;display:none;height:auto;z-index:11;border-top-left-radius:.15rem;border-top-right-radius:.15rem;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);-moz-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);box-shadow:0 1px 3px 0 rgba(0,0,0,.4)}.theme-mobile .dropdown-content a{font-size:.9rem}.theme__dark .theme-mobile .dropdown-content{border-top:4px solid #424242;background-color:#595b5c}.theme__light .theme-mobile .dropdown-content{border-top:4px solid #e0e0e0;background-color:#fafafa}.theme__hacker .theme-mobile .dropdown-content{border-top:4px solid #6b6b6b;background-color:#212421}.theme__solarized .theme-mobile .dropdown-content{border-top:4px solid #e8b000;background-color:#fafafa}.theme__custom .theme-mobile .dropdown-content{border-top:4px solid #00ace6;background-color:#f5fcff}.theme__dark .theme-mobile .dropdown-content .is-active{background-color:#424242}.theme__light .theme-mobile .dropdown-content .is-active{background-color:#e0e0e0}.theme__hacker .theme-mobile .dropdown-content .is-active{background-color:#323732}.theme__solarized .theme-mobile .dropdown-content .is-active{background-color:#fbf1d1}.theme__custom .theme-mobile .dropdown-content .is-active{background-color:#ccf2ff}.theme-mobile .dropdown-item{padding:.25rem .75rem;height:100%;text-decoration:none;display:block;font-size:1rem;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme__dark .theme-mobile .dropdown-item{color:#fcfcfa}.theme__dark .theme-mobile .dropdown-item:hover,.theme__dark .theme-mobile .dropdown-item:active,.theme__dark .theme-mobile .dropdown-item:focus{color:#fcfcfa;background-color:#727072;text-decoration:none}.theme__dark .theme-mobile .dropdown-item:hover:first-child,.theme__dark .theme-mobile .dropdown-item:active:first-child,.theme__dark .theme-mobile .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme__light .theme-mobile .dropdown-item{color:#555}.theme__light .theme-mobile .dropdown-item:hover,.theme__light .theme-mobile .dropdown-item:active,.theme__light .theme-mobile .dropdown-item:focus{color:#fcfcfa;background-color:#bdbdbd;text-decoration:none}.theme__light .theme-mobile .dropdown-item:hover:first-child,.theme__light .theme-mobile .dropdown-item:active:first-child,.theme__light .theme-mobile .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme__hacker .theme-mobile .dropdown-item{color:#e3cd26}.theme__hacker .theme-mobile .dropdown-item:hover,.theme__hacker .theme-mobile .dropdown-item:active,.theme__hacker .theme-mobile .dropdown-item:focus{color:#fcfcfa;background-color:#464c46;text-decoration:none}.theme__hacker .theme-mobile .dropdown-item:hover:first-child,.theme__hacker .theme-mobile .dropdown-item:active:first-child,.theme__hacker .theme-mobile .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme__solarized .theme-mobile .dropdown-item{color:#424242}.theme__solarized .theme-mobile .dropdown-item:hover,.theme__solarized .theme-mobile .dropdown-item:active,.theme__solarized .theme-mobile .dropdown-item:focus{color:#b58900;background-color:#f9eaba;text-decoration:none}.theme__solarized .theme-mobile .dropdown-item:hover:first-child,.theme__solarized .theme-mobile .dropdown-item:active:first-child,.theme__solarized .theme-mobile .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme__custom .theme-mobile .dropdown-item{color:#002633}.theme__custom .theme-mobile .dropdown-item:hover,.theme__custom .theme-mobile .dropdown-item:active,.theme__custom .theme-mobile .dropdown-item:focus{color:#0086b3;background-color:#ccf2ff;text-decoration:none}.theme__custom .theme-mobile .dropdown-item:hover:first-child,.theme__custom .theme-mobile .dropdown-item:active:first-child,.theme__custom .theme-mobile .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme-mobile .dropdown:hover .dropdown-content{display:block}.wrapper{display:grid;max-width:960px;justify-content:center;grid-template-columns:minmax(350px,5fr) minmax(242.28571429px,2fr);grid-template-rows:50px auto 1fr auto;grid-column-gap:32px;grid-row-gap:0}@media(max-width:769px){.wrapper{grid-template-columns:minmax(0,5fr) minmax(0,2fr)}}.header-main{grid-area:2/1/3/2}.header-side{grid-area:2/2/3/3}.header{grid-area:2/1/3/3}.main-main{grid-area:3/1/4/2}.main-side{grid-area:3/2/4/3}.main{grid-area:3/1/4/3}.footer-main{grid-area:4/1/5/2}.footer-side{grid-area:4/2/5/3}.footer{grid-area:4/1/5/3}.navbar-main{grid-area:1/1/2/2}.navbar-side{grid-area:1/2/2/3}.navbar{grid-area:1/1/2/3}.header{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.header .title{font-family:montserrat,sans-serif;font-weight:900}.header__image{background-image:url(../images/header/background.jpg),url(../images/header/background.png);width:100%;height:235px;background-size:cover;background-repeat:no-repeat;position:relative;margin-bottom:.5rem}.custom-header{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.custom-header__title{line-height:1.1;font-weight:700;font-family:montserrat,sans-serif}.custom-header__subtitle{line-height:1.2;font-family:montserrat,sans-serif}.custom-header__align-left{-webkit-align-items:flex-start;-moz-align-items:flex-start;-ms-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start}.custom-header__align-center{-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}.custom-header__align-right{-webkit-align-items:flex-end;-moz-align-items:flex-end;-ms-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end}.footer{padding:0 .5rem;position:relative}.theme__dark .footer{color:#bdbdbd;background-color:#403e41}.theme__light .footer{color:#424242;background-color:#eee}.theme__hacker .footer{color:#c7ba00;background-color:#252526}.theme__solarized .footer{color:#424242;background-color:#eee8d5}.theme__custom .footer{color:#002633;background-color:#ebf6fa}.footer__social{padding:.5rem 0;position:-webkit-sticky;position:sticky;bottom:70px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.footer__poweredby{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:.5rem 0}.footer__poweredby p{padding:.125rem}.footer .dropdown{position:absolute;left:.5rem;bottom:.5rem;width:40px;height:40px;border-radius:.25rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.theme__dark .footer .dropdown{color:#bdbdbd;background-color:#403e41}.theme__dark .footer .dropdown:hover,.theme__dark .footer .dropdown:active,.theme__dark .footer .dropdown:focus{color:#82aaff;background-color:#4d4a4e}.theme__light .footer .dropdown{color:#424242;background-color:#eee}.theme__light .footer .dropdown:hover,.theme__light .footer .dropdown:active,.theme__light .footer .dropdown:focus{color:#607d8b;background-color:#d5d4d4}.theme__hacker .footer .dropdown{color:#9e9e9e;background-color:#252526}.theme__hacker .footer .dropdown:hover,.theme__hacker .footer .dropdown:active,.theme__hacker .footer .dropdown:focus{color:#e3cd26;background-color:#323233}.theme__solarized .footer .dropdown{color:#ffb300;background-color:#eee8d5}.theme__solarized .footer .dropdown:hover,.theme__solarized .footer .dropdown:active,.theme__solarized .footer .dropdown:focus{color:#b58900;background-color:#e7dec3}.theme__custom .footer .dropdown{color:#1a5366;background-color:#ebf6fa}.theme__custom .footer .dropdown:hover,.theme__custom .footer .dropdown:active,.theme__custom .footer .dropdown:focus{color:#5cb8d6;background-color:#ebf6fa}.footer .dropdown-trigger{outline:none;border-radius:.25rem;cursor:pointer;border:none;width:100%;height:100%;color:inherit;background-color:inherit}.footer .dropdown-content{position:absolute;bottom:100%;left:0;display:none;height:auto;z-index:11;border-top-left-radius:.15rem;border-top-right-radius:.15rem;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);-moz-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);box-shadow:0 1px 3px 0 rgba(0,0,0,.4)}.footer .dropdown-content a{font-size:.9rem}.theme__dark .footer .dropdown-content{border-bottom:4px solid #424242;background-color:#595b5c}.theme__light .footer .dropdown-content{border-bottom:4px solid #e0e0e0;background-color:#fafafa}.theme__hacker .footer .dropdown-content{border-bottom:4px solid #6b6b6b;background-color:#212421}.theme__solarized .footer .dropdown-content{border-bottom:4px solid #e8b000;background-color:#fafafa}.theme__custom .footer .dropdown-content{border-bottom:4px solid #00ace6;background-color:#f5fcff}.theme__dark .footer .dropdown-content .is-active{background-color:#424242}.theme__light .footer .dropdown-content .is-active{background-color:#e0e0e0}.theme__hacker .footer .dropdown-content .is-active{background-color:#323732}.theme__solarized .footer .dropdown-content .is-active{background-color:#fbf1d1}.theme__custom .footer .dropdown-content .is-active{background-color:#ccf2ff}.footer .dropdown-item{padding:.25rem .75rem;height:100%;text-decoration:none;display:block;font-size:1rem}.theme__dark .footer .dropdown-item{color:#fcfcfa}.theme__dark .footer .dropdown-item:hover,.theme__dark .footer .dropdown-item:active,.theme__dark .footer .dropdown-item:focus{color:#fcfcfa;background-color:#727072;text-decoration:none}.theme__dark .footer .dropdown-item:hover:first-child,.theme__dark .footer .dropdown-item:active:first-child,.theme__dark .footer .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme__light .footer .dropdown-item{color:#555}.theme__light .footer .dropdown-item:hover,.theme__light .footer .dropdown-item:active,.theme__light .footer .dropdown-item:focus{color:#fcfcfa;background-color:#bdbdbd;text-decoration:none}.theme__light .footer .dropdown-item:hover:first-child,.theme__light .footer .dropdown-item:active:first-child,.theme__light .footer .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme__hacker .footer .dropdown-item{color:#e3cd26}.theme__hacker .footer .dropdown-item:hover,.theme__hacker .footer .dropdown-item:active,.theme__hacker .footer .dropdown-item:focus{color:#fcfcfa;background-color:#464c46;text-decoration:none}.theme__hacker .footer .dropdown-item:hover:first-child,.theme__hacker .footer .dropdown-item:active:first-child,.theme__hacker .footer .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme__solarized .footer .dropdown-item{color:#424242}.theme__solarized .footer .dropdown-item:hover,.theme__solarized .footer .dropdown-item:active,.theme__solarized .footer .dropdown-item:focus{color:#b58900;background-color:#f9eaba;text-decoration:none}.theme__solarized .footer .dropdown-item:hover:first-child,.theme__solarized .footer .dropdown-item:active:first-child,.theme__solarized .footer .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.theme__custom .footer .dropdown-item{color:#002633}.theme__custom .footer .dropdown-item:hover,.theme__custom .footer .dropdown-item:active,.theme__custom .footer .dropdown-item:focus{color:#0086b3;background-color:#ccf2ff;text-decoration:none}.theme__custom .footer .dropdown-item:hover:first-child,.theme__custom .footer .dropdown-item:active:first-child,.theme__custom .footer .dropdown-item:focus:first-child{border-top-left-radius:.15rem;border-top-right-radius:.15rem}.footer .select-theme__label{color:inherit;text-transform:capitalize}.footer .select-theme__item{text-transform:capitalize}.footer .select-lang__label{color:inherit;text-transform:capitalize}.footer .social{margin:.25rem}.theme__dark .footer .social a{text-decoration:none;color:#bdbdbd}.theme__dark .footer .social a:hover{color:#f0f0f0;transition:color .2s ease}.theme__light .footer .social a{text-decoration:none;color:#9e9e9e}.theme__light .footer .social a:hover{color:#6b6b6b;transition:color .2s ease}.theme__hacker .footer .social a{text-decoration:none;color:#9e9e9e}.theme__hacker .footer .social a:hover{color:#6b6b6b;transition:color .2s ease}.theme__solarized .footer .social a{text-decoration:none;color:#b58900}.theme__solarized .footer .social a:hover{color:#e8b000;transition:color .2s ease}.theme__custom .footer .social a{text-decoration:none;color:#608f9f}.theme__custom .footer .social a:hover{color:#80a6b3;transition:color .2s ease}.footer .dropdown:hover .dropdown-content{display:block}.theme__dark .footer hr{border-top:1px solid #595b5c!important}.theme__light .footer hr{border-top:1px solid #ccc!important}.theme__hacker .footer hr{border-top:1px solid #c7ba00!important}.theme__solarized .footer hr{border-top:1px solid #ffb300!important}.theme__custom .footer hr{border-top:1px solid #1f637a!important}.sidebar{margin-top:1rem;margin-right:1rem}.sidebar-recent{padding:.5rem}.sidebar-recent__title{font-family:montserrat,sans-serif;font-weight:700}.theme__dark .sidebar-recent__title{color:#aed581}.theme__dark .sidebar-recent__title:hover{color:#ff6188}.theme__light .sidebar-recent__title{color:#424242}.theme__light .sidebar-recent__title:hover{color:#ff6188}.theme__hacker .sidebar-recent__title{color:#e3cd26}.theme__hacker .sidebar-recent__title:hover{color:#ff6188}.theme__solarized .sidebar-recent__title{color:#ffb300}.theme__solarized .sidebar-recent__title:hover{color:#ff6188}.theme__custom .sidebar-recent__title{color:#13566c}.theme__custom .sidebar-recent__title:hover{color:#144a5d}.sidebar-recent__ul{margin-left:.5rem}.sidebar-recent__ul li{text-indent:-.35em;padding-left:.5em}.sidebar-recent__ul li::before{padding-right:.5rem;font-size:1rem;display:inline-block;content:"\2022"}.theme__dark .sidebar-recent__a{color:#fcfcfa}.theme__light .sidebar-recent__a{color:#424242}.theme__hacker .sidebar-recent__a{color:#a1ad64}.theme__solarized .sidebar-recent__a{color:#b58900}.theme__custom .sidebar-recent__a{color:#0b6d8e}.sidebar-hr{margin:1.5rem 0}.alert{padding:.5rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.125rem}.alert-info{background-color:#d7eef9;border:2px solid #b2def4;color:rgba(26,128,180,.9925)}.alert-success{background-color:#d9efd6;border:2px solid #bce3b5;color:rgba(70,149,57,.9925)}.alert-warning{background-color:#fbf6e1;border:2px solid #f6ecbe;color:rgba(180,154,26,.9925)}.alert-danger{background-color:#f5dddd;border:2px solid #ecbdbd;color:rgba(159,46,46,.9925)}.bio{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-align-items:flex-start;-moz-align-items:flex-start;-ms-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-animation:slide-in-down .5s .2s 1 ease both;-moz-animation:slide-in-down .5s .2s 1 ease both;-ms-animation:slide-in-down .5s .2s 1 ease both;-o-animation:slide-in-down .5s .2s 1 ease both;animation:slide-in-down .5s .2s 1 ease both;width:100%;font-family:montserrat,sans-serif}.bio__photo{border-radius:.25rem;width:100%;height:auto;-webkit-box-shadow:0 8px 6px -6px #000;-moz-box-shadow:0 8px 6px -6px #000;box-shadow:0 8px 6px -6px #000}.bio__photo-wrapper{width:90%;height:100%;border-radius:.25rem;margin:1rem auto;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.bio__name{font-weight:700;letter-spacing:1px;font-family:inherit;font-size:26px}.bio__desc{margin:.5rem 0;font-size:14px}.bio__info{font-size:14px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.bio__info--icon{margin-right:.25rem}.theme__dark .bio__info--icon{color:#bdbdbd}.theme__light .bio__info--icon{color:#9e9e9e}.theme__hacker .bio__info--icon{color:#9e9e9e}.theme__solarized .bio__info--icon{color:#b58900}.theme__custom .bio__info--icon{color:#608f9f}.bio__info a{padding-right:1rem;max-width:242.28571429px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bio__social{width:100%;margin-top:.5rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.bio__social a{text-decoration:none!important;width:100%;padding:.5rem;border-radius:.125rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:space-around;-moz-justify-content:space-around;-ms-justify-content:space-around;justify-content:space-around;-ms-flex-pack:space-around}.theme__dark .bio__social a{color:#bdbdbd}.theme__dark .bio__social a:hover,.theme__dark .bio__social a:active,.theme__dark .bio__social a:focus{color:#f0f0f0}.theme__light .bio__social a{color:#9e9e9e}.theme__light .bio__social a:hover,.theme__light .bio__social a:active,.theme__light .bio__social a:focus{color:#6b6b6b}.theme__hacker .bio__social a{color:#9e9e9e}.theme__hacker .bio__social a:hover,.theme__hacker .bio__social a:active,.theme__hacker .bio__social a:focus{color:#6b6b6b}.theme__solarized .bio__social a{color:#b58900}.theme__solarized .bio__social a:hover,.theme__solarized .bio__social a:active,.theme__solarized .bio__social a:focus{color:#e8b000}.theme__custom .bio__social a{color:#608f9f}.theme__custom .bio__social a:hover,.theme__custom .bio__social a:active,.theme__custom .bio__social a:focus{color:#80a6b3}.bio-hr{border-radius:.5rem}.breadcrumb{margin:1rem;padding:.5rem;border-radius:.25rem;padding:auto;max-width:960px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.theme__dark .breadcrumb{background-color:#212121}.theme__light .breadcrumb{background-color:#eee}.theme__hacker .breadcrumb{background-color:#252526}.theme__solarized .breadcrumb{background-color:#fbf1d1}.theme__custom .breadcrumb{background-color:#ebfaff}.breadcrumb ol{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}.breadcrumb li{display:inline;font-size:1rem}.breadcrumb li a{font-size:.9rem}.theme__dark .breadcrumb li a{color:#82aaff}.theme__dark .breadcrumb li a:hover,.theme__dark .breadcrumb li a:active,.theme__dark .breadcrumb li a:focus{color:#ff6188}.theme__light .breadcrumb li a{color:#424242}.theme__light .breadcrumb li a:hover,.theme__light .breadcrumb li a:active,.theme__light .breadcrumb li a:focus{color:#ff6188}.theme__hacker .breadcrumb li a{color:#e08c48}.theme__hacker .breadcrumb li a:hover,.theme__hacker .breadcrumb li a:active,.theme__hacker .breadcrumb li a:focus{color:#ff6188}.theme__solarized .breadcrumb li a{color:#424242}.theme__solarized .breadcrumb li a:hover,.theme__solarized .breadcrumb li a:active,.theme__solarized .breadcrumb li a:focus{color:#ff6188}.theme__custom .breadcrumb li a{color:#0b6d8e}.theme__custom .breadcrumb li a:hover,.theme__custom .breadcrumb li a:active,.theme__custom .breadcrumb li a:focus{color:#144a5d}.breadcrumb li:last-child a{text-decoration:none;cursor:default}.theme__dark .breadcrumb li:last-child a{color:#bdbdbd}.theme__light .breadcrumb li:last-child a{color:#bdbdbd}.theme__hacker .breadcrumb li:last-child a{color:#6b6b6b}.theme__solarized .breadcrumb li:last-child a{color:#bdbdbd}.theme__custom .breadcrumb li:last-child a{color:#364549}.breadcrumb li+li:before{padding:.5rem;content:"/\00a0"}.theme__dark .breadcrumb li+li:before{color:#82aaff}.theme__light .breadcrumb li+li:before{color:#424242}.theme__hacker .breadcrumb li+li:before{color:#e08c48}.theme__solarized .breadcrumb li+li:before{color:#424242}.theme__custom .breadcrumb li+li:before{color:#0b6d8e}.mermaid{width:100%;text-align:center;margin-bottom:1rem;overflow:auto}.diagram{overflow:auto;margin-right:1rem;margin-bottom:1rem;border-radius:.25rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}[id^=msc]{overflow:auto;margin:.5rem 0;text-align:center}[id^=flowchart]{overflow:auto}[id^=WaveDrom_Display]{overflow:auto;background-color:#fcfcfa;border-radius:.25rem}.expand{position:relative}.expand-label{cursor:pointer;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}.expand-content{display:none}.expand-icon{padding-top:.4rem;padding-right:.125rem;-webkit-transition:all .1s ease;-moz-transition:all .1s ease;-ms-transition:all .1s ease;-o-transition:all .1s ease;transition:all .1s ease}.expand-icon__down{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.expand-icon__right{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}.gtt{position:absolute;right:.5rem;bottom:.5rem;width:40px;height:40px;border-radius:.25rem;cursor:pointer;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.theme__dark .gtt{color:#bdbdbd;background-color:#403e41}.theme__dark .gtt:hover,.theme__dark .gtt:active,.theme__dark .gtt:focus{color:#82aaff;background-color:#4d4a4e}.theme__light .gtt{color:#424242;background-color:#eee}.theme__light .gtt:hover,.theme__light .gtt:active,.theme__light .gtt:focus{color:#607d8b;background-color:#d5d4d4}.theme__hacker .gtt{color:#9e9e9e;background-color:#252526}.theme__hacker .gtt:hover,.theme__hacker .gtt:active,.theme__hacker .gtt:focus{color:#e3cd26;background-color:#323233}.theme__solarized .gtt{color:#ffb300;background-color:#eee8d5}.theme__solarized .gtt:hover,.theme__solarized .gtt:active,.theme__solarized .gtt:focus{color:#b58900;background-color:#e7dec3}.theme__custom .gtt{color:#1a5366;background-color:#ebf6fa}.theme__custom .gtt:hover,.theme__custom .gtt:active,.theme__custom .gtt:focus{color:#5cb8d6;background-color:#ebf6fa}@media(max-width:769px){.gtt{position:fixed}}.hr-fade{height:1px;width:100%}.theme__dark .hr-fade{color:#595b5c;background-image:linear-gradient(90deg,transparent,#595B5C 50%,transparent 100%)}.theme__light .hr-fade{color:#ccc;background-image:linear-gradient(90deg,transparent,#ccc 50%,transparent 100%)}.theme__hacker .hr-fade{color:#c7ba00;background-image:linear-gradient(90deg,transparent,#C7BA00 50%,transparent 100%)}.theme__solarized .hr-fade{color:#ffb300;background-image:linear-gradient(90deg,transparent,#ffb300 50%,transparent 100%)}.theme__custom .hr-fade{color:#1f637a;background-image:linear-gradient(90deg,transparent,#1f637a 50%,transparent 100%)}.hr-slash{width:100%;height:7px;background-size:10px 10px}.theme__dark .hr-slash{color:#595b5c;background-image:linear-gradient(-45deg,transparent,transparent 25%,currentColor 25%,currentColor 50%,transparent 50%,transparent 75%,currentColor 75%)}.theme__light .hr-slash{color:#ccc;background-image:linear-gradient(-45deg,transparent,transparent 25%,currentColor 25%,currentColor 50%,transparent 50%,transparent 75%,currentColor 75%)}.theme__hacker .hr-slash{color:#c7ba00;background-image:linear-gradient(-45deg,transparent,transparent 25%,currentColor 25%,currentColor 50%,transparent 50%,transparent 75%,currentColor 75%)}.theme__solarized .hr-slash{color:#ffb300;background-image:linear-gradient(-45deg,transparent,transparent 25%,currentColor 25%,currentColor 50%,transparent 50%,transparent 75%,currentColor 75%)}.theme__custom .hr-slash{color:#1f637a;background-image:linear-gradient(-45deg,transparent,transparent 25%,currentColor 25%,currentColor 50%,transparent 50%,transparent 75%,currentColor 75%)}.theme__dark .hr-dots{color:#595b5c;width:100%;border-width:0 0 7px;border-style:solid;border-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDEiIHdpZHRoPSI4IiBoZWlnaHQ9IjQiPjxjaXJjbGUgZmlsbD0iIzU5NWI1YyIgY3g9IjEiIGN5PSIuNSIgcj0iLjUiLz48L3N2Zz4=) 0 0 100% repeat}.theme__light .hr-dots{color:#ccc;width:100%;border-width:0 0 7px;border-style:solid;border-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDEiIHdpZHRoPSI4IiBoZWlnaHQ9IjQiPjxjaXJjbGUgZmlsbD0iI2NjYyIgY3g9IjEiIGN5PSIuNSIgcj0iLjUiLz48L3N2Zz4=) 0 0 100% repeat}.theme__hacker .hr-dots{color:#c7ba00;width:100%;border-width:0 0 7px;border-style:solid;border-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDEiIHdpZHRoPSI4IiBoZWlnaHQ9IjQiPjxjaXJjbGUgZmlsbD0iI2M3YmEwMCIgY3g9IjEiIGN5PSIuNSIgcj0iLjUiLz48L3N2Zz4=) 0 0 100% repeat}.theme__solarized .hr-dots{color:#ffb300;width:100%;border-width:0 0 7px;border-style:solid;border-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDEiIHdpZHRoPSI4IiBoZWlnaHQ9IjQiPjxjaXJjbGUgZmlsbD0iI2ZmYjMwMCIgY3g9IjEiIGN5PSIuNSIgcj0iLjUiLz48L3N2Zz4=) 0 0 100% repeat}.theme__custom .hr-dots{color:#1f637a;width:100%;border-width:0 0 7px;border-style:solid;border-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDEiIHdpZHRoPSI4IiBoZWlnaHQ9IjQiPjxjaXJjbGUgZmlsbD0iIzFmNjM3YSIgY3g9IjEiIGN5PSIuNSIgcj0iLjUiLz48L3N2Zz4=) 0 0 100% repeat}code.has-jax{font:inherit;font-size:100%;background:inherit;border:inherit;color:#515151}.MathJax{font-size:120%!important}div.notices{margin:2rem 0;position:relative;border-radius:.2rem;color:#fff;padding:.5rem 1rem .5rem 2rem;position:relative}div.notices p{padding:0;display:block;font-size:1rem;margin-top:0;margin-bottom:0}div.notices p:first-child:before{position:absolute;top:-27px;color:#fff;content:'💡';left:10px}div.notices p:first-child:after{position:absolute;top:-27px;color:#fff;left:2rem}div.notices.info p:first-child:after{content:'Info';font-family:montserrat,sans-serif}div.notices.warning p:first-child:after{content:'Warning';font-family:montserrat,sans-serif}div.notices.note p:first-child:after{content:'Note';font-family:montserrat,sans-serif}div.notices.tip p:first-child:after{content:'Tip';font-family:montserrat,sans-serif}div.notices.note{border-top:30px solid #6bb1e0;background:#e6f3fb;color:rgba(47,103,141,.995)!important;font-family:merriweather,serif}div.notices.info{border-top:30px solid #f1b37e;background:#fefaf5;color:rgba(150,90,38,.995)!important;font-family:merriweather,serif}div.notices.tip{border-top:30px solid #84c578;background:#e8f7e6;color:rgba(72,125,63,.995)!important;font-family:merriweather,serif}div.notices.warning{border-top:30px solid #d58181;background:#fbeded;color:rgba(132,56,56,.995)!important;font-family:merriweather,serif}.pagination{border-radius:.25rem;margin:2rem 1rem;padding:.5rem 0;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.theme__dark .pagination{background-color:#212121}.theme__light .pagination{background-color:#eee}.theme__hacker .pagination{background-color:#252526}.theme__solarized .pagination{background-color:#fbf1d1}.theme__custom .pagination{background-color:#d6edf5}.pagination li{border-radius:.25rem}.theme__dark .pagination li.disabled a:hover,.theme__dark .pagination li.disabled a:active,.theme__dark .pagination li.disabled a:focus{color:#fcfcfa;text-decoration:none}.theme__light .pagination li.disabled a:hover,.theme__light .pagination li.disabled a:active,.theme__light .pagination li.disabled a:focus{color:#757575;text-decoration:none}.theme__hacker .pagination li.disabled a:hover,.theme__hacker .pagination li.disabled a:active,.theme__hacker .pagination li.disabled a:focus{color:#fcfcfa;text-decoration:none}.theme__solarized .pagination li.disabled a:hover,.theme__solarized .pagination li.disabled a:active,.theme__solarized .pagination li.disabled a:focus{color:#455a64;text-decoration:none}.theme__custom .pagination li.disabled a:hover,.theme__custom .pagination li.disabled a:active,.theme__custom .pagination li.disabled a:focus{color:#09c;text-decoration:none}.theme__dark .pagination li.active a{color:#ff6188}.theme__light .pagination li.active a{color:#ff6188}.theme__hacker .pagination li.active a{color:#ff6188}.theme__solarized .pagination li.active a{color:#ff6188}.theme__custom .pagination li.active a{color:#144a5d}.pagination a{font-size:1.25rem;padding:.5rem .75rem}.theme__dark .pagination a{color:#fcfcfa}.theme__dark .pagination a:hover,.theme__dark .pagination a:active,.theme__dark .pagination a:focus{color:#ff6188}.theme__light .pagination a{color:#757575}.theme__light .pagination a:hover,.theme__light .pagination a:active,.theme__light .pagination a:focus{color:#ff6188}.theme__hacker .pagination a{color:#fcfcfa}.theme__hacker .pagination a:hover,.theme__hacker .pagination a:active,.theme__hacker .pagination a:focus{color:#ff6188}.theme__solarized .pagination a{color:#455a64}.theme__solarized .pagination a:hover,.theme__solarized .pagination a:active,.theme__solarized .pagination a:focus{color:#ff6188}.theme__custom .pagination a{color:#09c}.theme__custom .pagination a:hover,.theme__custom .pagination a:active,.theme__custom .pagination a:focus{color:#144a5d}.theme__dark .pagination .active{background-color:#212121}.theme__light .pagination .active{background-color:#eee}.theme__hacker .pagination .active{background-color:#252526}.theme__solarized .pagination .active{background-color:#fbf1d1}.theme__custom .pagination .active{background-color:#d6edf5}.pagination-single{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%;margin:1rem 0}.pagination-single__left,.pagination-single__right{max-width:960px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-ms-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out;padding:.25rem;border-radius:.125rem}.pagination-single__left-title,.pagination-single__right-title{font-size:16.8px;padding-bottom:.3rem;max-width:960px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.theme__dark .pagination-single__left:hover .pagination-single__icon,.theme__dark .pagination-single__left:active .pagination-single__icon,.theme__dark .pagination-single__left:focus .pagination-single__icon,.theme__dark .pagination-single__right:hover .pagination-single__icon,.theme__dark .pagination-single__right:active .pagination-single__icon,.theme__dark .pagination-single__right:focus .pagination-single__icon{color:#82aaff;background-color:#4d4a4e}.theme__light .pagination-single__left:hover .pagination-single__icon,.theme__light .pagination-single__left:active .pagination-single__icon,.theme__light .pagination-single__left:focus .pagination-single__icon,.theme__light .pagination-single__right:hover .pagination-single__icon,.theme__light .pagination-single__right:active .pagination-single__icon,.theme__light .pagination-single__right:focus .pagination-single__icon{color:#607d8b;background-color:#d5d4d4}.theme__hacker .pagination-single__left:hover .pagination-single__icon,.theme__hacker .pagination-single__left:active .pagination-single__icon,.theme__hacker .pagination-single__left:focus .pagination-single__icon,.theme__hacker .pagination-single__right:hover .pagination-single__icon,.theme__hacker .pagination-single__right:active .pagination-single__icon,.theme__hacker .pagination-single__right:focus .pagination-single__icon{color:#e3cd26;background-color:#323233}.theme__solarized .pagination-single__left:hover .pagination-single__icon,.theme__solarized .pagination-single__left:active .pagination-single__icon,.theme__solarized .pagination-single__left:focus .pagination-single__icon,.theme__solarized .pagination-single__right:hover .pagination-single__icon,.theme__solarized .pagination-single__right:active .pagination-single__icon,.theme__solarized .pagination-single__right:focus .pagination-single__icon{color:#b58900;background-color:#e7dec3}.theme__custom .pagination-single__left:hover .pagination-single__icon,.theme__custom .pagination-single__left:active .pagination-single__icon,.theme__custom .pagination-single__left:focus .pagination-single__icon,.theme__custom .pagination-single__right:hover .pagination-single__icon,.theme__custom .pagination-single__right:active .pagination-single__icon,.theme__custom .pagination-single__right:focus .pagination-single__icon{color:#5cb8d6;background-color:#ebf6fa}.pagination-single__left:hover,.pagination-single__left:active,.pagination-single__left:focus{-webkit-transform:translateX(-.25rem);-moz-transform:translateX(-.25rem);-ms-transform:translateX(-.25rem);transform:translateX(-.25rem)}.pagination-single__right:hover,.pagination-single__right:active,.pagination-single__right:focus{-webkit-transform:translateX(.25rem);-moz-transform:translateX(.25rem);-ms-transform:translateX(.25rem);transform:translateX(.25rem)}.pagination-single__icon{width:28px;height:28px;border-radius:100%;margin:0 .5rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.theme__dark .pagination-single__icon{color:#bdbdbd;background-color:#403e41}.theme__light .pagination-single__icon{color:#424242;background-color:#eee}.theme__hacker .pagination-single__icon{color:#9e9e9e;background-color:#252526}.theme__solarized .pagination-single__icon{color:#ffb300;background-color:#eee8d5}.theme__custom .pagination-single__icon{color:#1a5366;background-color:#ebf6fa}.related{margin:2rem 0;padding:.5rem;width:100%;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.related__title{font-size:32px}.theme__dark .related__title{color:#fcfcfa}.theme__light .related__title{color:#424242}.theme__hacker .related__title{color:#fcfcfa}.theme__solarized .related__title{color:#424242}.theme__custom .related__title{color:#002633}.related__link{font-size:16.8px}.theme__dark .related__link{color:#a9dc76}.theme__light .related__link{color:#607d8b}.theme__hacker .related__link{color:#c7ba00}.theme__solarized .related__link{color:#ffb300}.theme__custom .related__link{color:#1d6c87}.related-ul{-webkit-align-self:center;-moz-align-self:center;-ms-align-self:center;align-self:center;list-style-type:disc}.search{position:relative;border-radius:.25rem;height:35px;z-index:6;margin-bottom:.5rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}.theme__dark .search{border:2px solid #1e1e1e;background-color:#212121}.theme__light .search{border:2px solid #cfcfcf;background-color:#eee}.theme__hacker .search{border:2px solid #111;background-color:#252526}.theme__solarized .search{border:2px solid #f7e3a2;background-color:#fbf1d1}.theme__custom .search{border:2px solid #6cc3e0;background-color:#ebfaff}.search .icon{padding:.25rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.theme__dark .search .icon{color:#727072}.theme__light .search .icon{color:#bdbdbd}.theme__hacker .search .icon{color:#727072}.theme__solarized .search .icon{color:#b58900}.theme__custom .search .icon{color:#abdded}.search .input{width:100%;font-size:.9rem;border:none;outline:none;padding-right:1rem;max-width:2fr;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.theme__dark .search .input{color:#fcfcfa;background-color:inherit}.theme__dark .search .input.placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__dark .search .input:-moz-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__dark .search .input::-moz-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__dark .search .input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__dark .search .input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__light .search .input{color:#424242;background-color:inherit}.theme__light .search .input.placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__light .search .input:-moz-placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__light .search .input::-moz-placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__light .search .input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__light .search .input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__hacker .search .input{color:#1fff2a;background-color:inherit}.theme__hacker .search .input.placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__hacker .search .input:-moz-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__hacker .search .input::-moz-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__hacker .search .input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__hacker .search .input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__solarized .search .input{color:#b58900;background-color:inherit}.theme__solarized .search .input.placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__solarized .search .input:-moz-placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__solarized .search .input::-moz-placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__solarized .search .input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__solarized .search .input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__custom .search .input{color:#002633;background-color:inherit}.theme__custom .search .input.placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.theme__custom .search .input:-moz-placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.theme__custom .search .input::-moz-placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.theme__custom .search .input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.theme__custom .search .input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.search-content{margin-top:.25rem;max-height:350px;overflow:auto}.search-content a{text-decoration:none!important}.menu-item{padding:.25rem}.menu-item__title{font-size:1rem}.theme__dark .menu-item__title{color:#fcfcfa}.theme__light .menu-item__title{color:#424242}.theme__hacker .menu-item__title{color:#1fff2a}.theme__solarized .menu-item__title{color:#424242}.theme__custom .menu-item__title{color:#002633}.menu-item__desc{font-size:.8rem;max-width:2fr;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.theme__dark .menu-item__desc{color:#fcfcfa;opacity:.78}.theme__light .menu-item__desc{color:#424242;opacity:.78}.theme__hacker .menu-item__desc{color:#1fff2a;opacity:.78}.theme__solarized .menu-item__desc{color:#b58900;opacity:.78}.theme__custom .menu-item__desc{color:#002633;opacity:.78}#search-results.dropdown{display:none}#search-results.dropdown.is-active{display:inline-block;margin-top:.25rem;position:absolute;top:35px;width:100%;border-radius:.1rem;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);-moz-box-shadow:0 1px 3px 0 rgba(0,0,0,.4);box-shadow:0 1px 3px 0 rgba(0,0,0,.4)}.theme__dark #search-results.dropdown.is-active{color:inherit;background-color:#4d4a4e}.theme__light #search-results.dropdown.is-active{color:#424242;background-color:#eee}.theme__hacker #search-results.dropdown.is-active{color:#1fff2a;background-color:#373738}.theme__solarized #search-results.dropdown.is-active{color:#b58900;background-color:#fbf1d1}.theme__custom #search-results.dropdown.is-active{color:#002633;background-color:#fafeff}#search-results .dropdown-content{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}#search-results .dropdown-item{font-size:1rem;padding:.125rem}#search-results .dropdown-item:hover,#search-results .dropdown-item:active,#search-results .dropdown-item:focus{border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem}.theme__dark #search-results .dropdown-item:hover,.theme__dark #search-results .dropdown-item:active,.theme__dark #search-results .dropdown-item:focus{background-color:#727072}.theme__light #search-results .dropdown-item:hover,.theme__light #search-results .dropdown-item:active,.theme__light #search-results .dropdown-item:focus{background-color:#d5d4d4}.theme__hacker #search-results .dropdown-item:hover,.theme__hacker #search-results .dropdown-item:active,.theme__hacker #search-results .dropdown-item:focus{background-color:#48484a}.theme__solarized #search-results .dropdown-item:hover,.theme__solarized #search-results .dropdown-item:active,.theme__solarized #search-results .dropdown-item:focus{background-color:#f7e3a2}.theme__custom #search-results .dropdown-item:hover,.theme__custom #search-results .dropdown-item:active,.theme__custom #search-results .dropdown-item:focus{background-color:#e6f9ff}.theme__dark #search-results .dropdown-item.is-active{background-color:#727072}.theme__light #search-results .dropdown-item.is-active{background-color:#d5d4d4}.theme__hacker #search-results .dropdown-item.is-active{background-color:#48484a}.theme__solarized #search-results .dropdown-item.is-active{background-color:#f7e3a2}.theme__custom #search-results .dropdown-item.is-active{background-color:#e6f9ff}.mobile-search{position:absolute;z-index:13;width:100%;overflow:hidden}.mobile-search__top{width:100%;height:50px;text-align:right;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}.theme__dark .mobile-search__top{border-bottom:1px solid #2d2a2e;background-color:#403e41}.theme__light .mobile-search__top{border-bottom:1px solid #e0e0e0;background-color:#eaeaea}.theme__hacker .mobile-search__top{border-bottom:1px solid #252526;background-color:#252526}.theme__solarized .mobile-search__top{border-bottom:1px solid #b58900;background-color:#eee8d5}.theme__custom .mobile-search__top{border-bottom:1px solid #1d6c87;background-color:#c6e6f1}.mobile-search__top--icon{width:50px;height:50px;cursor:pointer;position:absolute;right:0;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.theme__dark .mobile-search__top--icon{color:#fcfcfa}.theme__dark .mobile-search__top--icon:hover,.theme__dark .mobile-search__top--icon:active,.theme__dark .mobile-search__top--icon:focus{color:#ff6188}.theme__light .mobile-search__top--icon{color:#777}.theme__light .mobile-search__top--icon:hover,.theme__light .mobile-search__top--icon:active,.theme__light .mobile-search__top--icon:focus{color:#ff6188}.theme__hacker .mobile-search__top--icon{color:#dbdbdb}.theme__hacker .mobile-search__top--icon:hover,.theme__hacker .mobile-search__top--icon:active,.theme__hacker .mobile-search__top--icon:focus{color:#ff6188}.theme__solarized .mobile-search__top--icon{color:#b58900}.theme__solarized .mobile-search__top--icon:hover,.theme__solarized .mobile-search__top--icon:active,.theme__solarized .mobile-search__top--icon:focus{color:#ff6188}.theme__custom .mobile-search__top--icon{color:#07495f}.theme__custom .mobile-search__top--icon:hover,.theme__custom .mobile-search__top--icon:active,.theme__custom .mobile-search__top--icon:focus{color:#144a5d}.mobile-search__top--input{width:calc(100% - 70px);height:70%;outline:none;border:none;border-radius:.25rem;padding:0 1rem;font-size:1.1rem}.theme__dark .mobile-search__top--input{color:#fcfcfa;background-color:#403e41}.theme__dark .mobile-search__top--input.placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__dark .mobile-search__top--input:-moz-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__dark .mobile-search__top--input::-moz-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__dark .mobile-search__top--input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__dark .mobile-search__top--input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__light .mobile-search__top--input{color:#424242;background-color:#eaeaea}.theme__light .mobile-search__top--input.placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__light .mobile-search__top--input:-moz-placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__light .mobile-search__top--input::-moz-placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__light .mobile-search__top--input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__light .mobile-search__top--input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#bdbdbd}.theme__hacker .mobile-search__top--input{color:#1fff2a;background-color:#252526}.theme__hacker .mobile-search__top--input.placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__hacker .mobile-search__top--input:-moz-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__hacker .mobile-search__top--input::-moz-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__hacker .mobile-search__top--input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__hacker .mobile-search__top--input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#727072}.theme__solarized .mobile-search__top--input{color:#424242;background-color:#eee8d5}.theme__solarized .mobile-search__top--input.placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__solarized .mobile-search__top--input:-moz-placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__solarized .mobile-search__top--input::-moz-placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__solarized .mobile-search__top--input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__solarized .mobile-search__top--input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#b58900}.theme__custom .mobile-search__top--input{color:#002633;background-color:#c6e6f1}.theme__custom .mobile-search__top--input.placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.theme__custom .mobile-search__top--input:-moz-placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.theme__custom .mobile-search__top--input::-moz-placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.theme__custom .mobile-search__top--input:-ms-input-placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.theme__custom .mobile-search__top--input::-webkit-input-placeholder{font-family:montserrat,sans-serif;color:#6cc3e0}.mobile-search__body{width:100%;height:100vh;overflow:auto}.theme__dark .mobile-search__body{color:#fcfcfa;background-color:#2d2a2e}.theme__light .mobile-search__body{color:#424242;background-color:#fafafa}.theme__hacker .mobile-search__body{color:#1fff2a;background-color:#151715}.theme__solarized .mobile-search__body{color:#424242;background-color:#fdf7e3}.theme__custom .mobile-search__body{color:#002633;background-color:#f7fdff}.mobile-search__btn{position:absolute;top:0;right:35px;width:35px;height:50px;padding:.25rem;cursor:pointer;display:none;z-index:7;-webkit-animation:slide-in-down .5s .25s 1 ease both;-moz-animation:slide-in-down .5s .25s 1 ease both;-ms-animation:slide-in-down .5s .25s 1 ease both;-o-animation:slide-in-down .5s .25s 1 ease both;animation:slide-in-down .5s .25s 1 ease both}@media(max-width:769px){.mobile-search__btn{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}}.theme__dark .mobile-search__btn{color:#fcfcfa}.theme__dark .mobile-search__btn:hover,.theme__dark .mobile-search__btn:active,.theme__dark .mobile-search__btn:focus{color:#ff6188}.theme__light .mobile-search__btn{color:#777}.theme__light .mobile-search__btn:hover,.theme__light .mobile-search__btn:active,.theme__light .mobile-search__btn:focus{color:#ff6188}.theme__hacker .mobile-search__btn{color:#dbdbdb}.theme__hacker .mobile-search__btn:hover,.theme__hacker .mobile-search__btn:active,.theme__hacker .mobile-search__btn:focus{color:#ff6188}.theme__solarized .mobile-search__btn{color:#b58900}.theme__solarized .mobile-search__btn:hover,.theme__solarized .mobile-search__btn:active,.theme__solarized .mobile-search__btn:focus{color:#ff6188}.theme__custom .mobile-search__btn{color:#07495f}.theme__custom .mobile-search__btn:hover,.theme__custom .mobile-search__btn:active,.theme__custom .mobile-search__btn:focus{color:#144a5d}.mobile-search__content a{text-decoration:none!important}.mobile-search__item{padding:.5rem}.mobile-search__item--title{font-size:1.2rem}.theme__dark .mobile-search__item--title{color:#fcfcfa}.theme__light .mobile-search__item--title{color:#424242}.theme__hacker .mobile-search__item--title{color:#1fff2a}.theme__solarized .mobile-search__item--title{color:#424242}.theme__custom .mobile-search__item--title{color:#002633}.mobile-search__item--desc{font-size:.9rem}.theme__dark .mobile-search__item--desc{color:#fcfcfa;opacity:.65}.theme__light .mobile-search__item--desc{color:#424242;opacity:.65}.theme__hacker .mobile-search__item--desc{color:#1fff2a;opacity:.65}.theme__solarized .mobile-search__item--desc{color:#b58900;opacity:.65}.theme__custom .mobile-search__item--desc{color:#002633;opacity:.65}.theme__dark .mobile-search__item:hover,.theme__dark .mobile-search__item:active,.theme__dark .mobile-search__item:focus{background-color:#727072}.theme__light .mobile-search__item:hover,.theme__light .mobile-search__item:active,.theme__light .mobile-search__item:focus{background-color:#d5d4d4}.theme__hacker .mobile-search__item:hover,.theme__hacker .mobile-search__item:active,.theme__hacker .mobile-search__item:focus{background-color:#48484a}.theme__solarized .mobile-search__item:hover,.theme__solarized .mobile-search__item:active,.theme__solarized .mobile-search__item:focus{background-color:#f7e3a2}.theme__custom .mobile-search__item:hover,.theme__custom .mobile-search__item:active,.theme__custom .mobile-search__item:focus{background-color:#e6f9ff}.summary-card{margin:0 .5rem;padding:0 .5rem}.summary-card .title a{font-family:montserrat,sans-serif;font-weight:700}.theme__dark .summary-card .title a{color:#ffd866}.theme__dark .summary-card .title a:hover,.theme__dark .summary-card .title a:active,.theme__dark .summary-card .title a:focus{color:#ff6188}.theme__light .summary-card .title a{color:#607d8b}.theme__light .summary-card .title a:hover,.theme__light .summary-card .title a:active,.theme__light .summary-card .title a:focus{color:#ff6188}.theme__hacker .summary-card .title a{color:#a1ad64}.theme__hacker .summary-card .title a:hover,.theme__hacker .summary-card .title a:active,.theme__hacker .summary-card .title a:focus{color:#ff6188}.theme__solarized .summary-card .title a{color:#b58900}.theme__solarized .summary-card .title a:hover,.theme__solarized .summary-card .title a:active,.theme__solarized .summary-card .title a:focus{color:#ff6188}.theme__custom .summary-card .title a{color:#001f29}.theme__custom .summary-card .title a:hover,.theme__custom .summary-card .title a:active,.theme__custom .summary-card .title a:focus{color:#144a5d}.theme__dark .summary-card .subtitle{color:#fcfcfa}.theme__light .summary-card .subtitle{color:#424242}.theme__hacker .summary-card .subtitle{color:#cdf5cc}.theme__solarized .summary-card .subtitle{color:#cf9c00}.theme__custom .summary-card .subtitle{color:#3d7a8f}.summary-card__content{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center}.summary-card__text{margin-top:1rem;line-height:1.7rem;font-family:merriweather,serif}.summary-card__image{width:100%;height:100%}.summary-card__image-wrapper{height:100%;width:auto;margin:0 auto;padding:1rem;padding-bottom:0}.summary-card__video{width:100%;max-height:500px;object-fit:contain}.summary-card__video-wrapper{padding:1rem;padding-bottom:0}.summary-card hr{margin-top:1.5rem}.theme__dark .summary-card hr{border-top:1px solid #595b5c}.theme__light .summary-card hr{border-top:1px solid #ccc}.theme__hacker .summary-card hr{border-top:1px solid #c7ba00}.theme__solarized .summary-card hr{border-top:1px solid #ffb300}.theme__custom .summary-card hr{border-top:1px solid #1f637a}.summary-card:not(:last-child) hr{margin-bottom:4rem}.summary-card:last-child hr{margin-bottom:2rem}.summary-classic{padding:0 1rem}.summary-classic .title{font-size:24px}.summary-classic .title a{font-family:montserrat,sans-serif;font-weight:700}.theme__dark .summary-classic .title a{color:#ffd866}.theme__dark .summary-classic .title a:hover,.theme__dark .summary-classic .title a:active,.theme__dark .summary-classic .title a:focus{color:#ff6188}.theme__light .summary-classic .title a{color:#607d8b}.theme__light .summary-classic .title a:hover,.theme__light .summary-classic .title a:active,.theme__light .summary-classic .title a:focus{color:#ff6188}.theme__hacker .summary-classic .title a{color:#a1ad64}.theme__hacker .summary-classic .title a:hover,.theme__hacker .summary-classic .title a:active,.theme__hacker .summary-classic .title a:focus{color:#ff6188}.theme__solarized .summary-classic .title a{color:#b58900}.theme__solarized .summary-classic .title a:hover,.theme__solarized .summary-classic .title a:active,.theme__solarized .summary-classic .title a:focus{color:#ff6188}.theme__custom .summary-classic .title a{color:#001f29}.theme__custom .summary-classic .title a:hover,.theme__custom .summary-classic .title a:active,.theme__custom .summary-classic .title a:focus{color:#144a5d}.theme__dark .summary-classic .subtitle{color:#fcfcfa}.theme__light .summary-classic .subtitle{color:#424242}.theme__hacker .summary-classic .subtitle{color:#cdf5cc}.theme__solarized .summary-classic .subtitle{color:#cf9c00}.theme__custom .summary-classic .subtitle{color:#3d7a8f}.summary-classic__flex-box{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;margin-top:1rem;margin-bottom:1rem}.summary-classic__content{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-justify-content:flex-start;-moz-justify-content:flex-start;-ms-justify-content:flex-start;justify-content:flex-start;-ms-flex-pack:flex-start;padding-left:1rem}.summary-classic__text{margin-top:1rem;line-height:1.7rem;font-family:merriweather,serif}.summary-classic__image{width:100%;height:100%;object-fit:contain}.summary-classic__image-wrapper{max-width:130px;min-width:130px;overflow:hidden;-webkit-align-self:center;-moz-align-self:center;-ms-align-self:center;align-self:center}.theme__dark .summary-classic hr{border-top:1px solid #595b5c}.theme__light .summary-classic hr{border-top:1px solid #ccc}.theme__hacker .summary-classic hr{border-top:1px solid #c7ba00}.theme__solarized .summary-classic hr{border-top:1px solid #ffb300}.theme__custom .summary-classic hr{border-top:1px solid #1f637a}.summary-classic:not(:last-child) hr{margin-bottom:1.5rem}.summary-classic:last-child hr{display:none}.summary-compact{padding:0 1rem}.summary-compact__flexbox{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;margin-top:1rem;margin-bottom:1rem}.summary-compact__meta{padding:1rem 0}.theme__dark .summary-compact hr{border-top:1px solid #595b5c}.theme__light .summary-compact hr{border-top:1px solid #ccc}.theme__hacker .summary-compact hr{border-top:1px solid #c7ba00}.theme__solarized .summary-compact hr{border-top:1px solid #ffb300}.theme__custom .summary-compact hr{border-top:1px solid #1f637a}.swiper-container{background-color:transparent;width:100%;height:auto}.swiper-slide{background-position:50%;background-size:cover}.swiper-pagination-bullet{opacity:.5}.theme__dark .swiper-pagination-bullet-active{background:#ff6188!important}.theme__light .swiper-pagination-bullet-active{background:#ff6188!important}.theme__hacker .swiper-pagination-bullet-active{background:#f3ff6e!important}.theme__solarized .swiper-pagination-bullet-active{background:#b58900!important}.theme__custom .swiper-pagination-bullet-active{background:#0086b3!important}.switch{position:relative;display:inline-block;width:28px;height:14px;margin-top:.7rem;margin-left:1rem}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.theme__dark .slider{background-color:#403e41}.theme__light .slider{background-color:#bdbdbd}.theme__hacker .slider{background-color:#403e41}.theme__solarized .slider{background-color:#dfd4b1}.theme__custom .slider{background-color:#a3e0f5}.slider:before{position:absolute;content:"";height:11px;width:11px;left:1.72px;bottom:1.72px;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.theme__dark .slider:before{background-color:#fcfcfa}.theme__light .slider:before{background-color:#fcfcfa}.theme__hacker .slider:before{background-color:#fcfcfa}.theme__solarized .slider:before{background-color:#fcfcfa}.theme__custom .slider:before{background-color:#e6f9ff}.theme__dark input:checked+.slider{background-color:#ff6188}.theme__light input:checked+.slider{background-color:#ff6188}.theme__hacker input:checked+.slider{background-color:#ff6188}.theme__solarized input:checked+.slider{background-color:#ff6188}.theme__custom input:checked+.slider{background-color:#47c2eb}.theme__dark input:focus+.slider{box-shadow:0 0 1px #ff6188}.theme__light input:focus+.slider{box-shadow:0 0 1px #ff6188}.theme__hacker input:focus+.slider{box-shadow:0 0 1px #ff6188}.theme__solarized input:focus+.slider{box-shadow:0 0 1px #ff6188}.theme__custom input:focus+.slider{box-shadow:0 0 1px #47c2eb}input:checked+.slider:before{-webkit-transform:translateX(13px);-moz-transform:translateX(13px);-ms-transform:translateX(13px);transform:translateX(13px)}.slider.round{border-radius:8.5px}.slider.round:before{border-radius:50%}.taxo{margin:2.5rem 0;z-index:3}.taxo-root{position:-webkit-sticky;position:sticky;top:50px}.theme__dark .taxo-root{background-color:#2d2a2e}.theme__light .taxo-root{background-color:#fafafa}.theme__hacker .taxo-root{background-color:#151715}.theme__solarized .taxo-root{background-color:#fdf7e3}.theme__custom .taxo-root{background-color:#f7fdff}.taxo__title{font-weight:700;font-family:montserrat,sans-serif}.theme__dark .taxo__title{color:#bdbdbd}.theme__dark .taxo__title:hover{color:#ff6188}.theme__light .taxo__title{color:#607d8b}.theme__light .taxo__title:hover{color:#ff6188}.theme__hacker .taxo__title{color:#996287}.theme__hacker .taxo__title:hover{color:#ff6188}.theme__solarized .taxo__title{color:#b58900}.theme__solarized .taxo__title:hover{color:#ff6188}.theme__custom .taxo__title{color:#1b7898}.theme__custom .taxo__title:hover{color:#144a5d}.taxo__link{text-decoration:none!important}.taxo__text{border-top-left-radius:.175rem;border-bottom-left-radius:.175rem}.taxo__text:hover,.taxo__text:active,.taxo__text:focus{text-decoration:underline!important}.theme__dark .taxo__text{color:inherit}.theme__light .taxo__text{color:inherit}.theme__hacker .taxo__text{color:inherit}.theme__solarized .taxo__text{color:inherit}.theme__custom .taxo__text{color:inherit}.taxo__num{padding:.125rem .25rem;border-top-right-radius:.175rem;border-bottom-right-radius:.175rem}.theme__dark .taxo__num{color:#fcfcfa;background-color:#212121}.theme__light .taxo__num{color:#424242;background-color:#eaeaea}.theme__hacker .taxo__num{color:#e3cd26;background-color:#252526}.theme__solarized .taxo__num{color:#b58900;background-color:#f8e7b0}.theme__custom .taxo__num{color:#002633;background-color:#ceeaf3}.taxo .title{display:block;margin:0;margin-right:.5rem;margin-bottom:.25rem}.taxo .tag{margin:0;margin-right:.25rem;margin-bottom:.25rem;font-size:.8rem;display:inline-block}.theme__dark .taxo .tag{color:#bdbdbd}.theme__light .taxo .tag{color:#607d8b}.theme__hacker .taxo .tag{color:#996287}.theme__solarized .taxo .tag{color:#b58900}.theme__custom .taxo .tag{color:#1b7898}.taxo .is-tags{border-radius:.175rem;padding:.125rem 0 .125rem .25rem}.theme__dark .taxo .is-tags{color:#78dce8;background-color:#424242}.theme__light .taxo .is-tags{color:#424242;background-color:#d3f4f8}.theme__hacker .taxo .is-tags{color:#78dce8;background-color:#2d322d}.theme__solarized .taxo .is-tags{color:#916e00;background-color:#cef2f7}.theme__custom .taxo .is-tags{color:#002633;background-color:#ebfaff}.taxo .is-categories{border-radius:.175rem;padding:.125rem 0 .125rem .25rem}.theme__dark .taxo .is-categories{color:#ab9df2;background-color:#424242}.theme__light .taxo .is-categories{color:#424242;background-color:#e5dcf2}.theme__hacker .taxo .is-categories{color:#ab9df2;background-color:#2d322d}.theme__solarized .taxo .is-categories{color:#916e00;background-color:#e2d8f0}.theme__custom .taxo .is-categories{color:#002633;background-color:#ebfaff}.taxo .is-series{border-radius:.175rem;padding:.125rem 0 .125rem .25rem}.theme__dark .taxo .is-series{color:#ea9c77;background-color:#424242}.theme__light .taxo .is-series{color:#424242;background-color:#ffedd1}.theme__hacker .taxo .is-series{color:#ea9c77;background-color:#2d322d}.theme__solarized .taxo .is-series{color:#916e00;background-color:#ffe7c1}.theme__custom .taxo .is-series{color:#002633;background-color:#ebfaff}.toc{width:100%;max-width:242.28571429px;position:fixed;top:7rem;font-size:.85rem;padding-left:.5rem;z-index:2}.toc #toc{position:relative}.toc__flexbox{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;position:fixed}.toc__title{font-size:.9rem;margin-top:.5rem}.theme__dark .toc__title{color:#727072}.theme__light .toc__title{color:#727072}.theme__hacker .toc__title{color:#727072}.theme__solarized .toc__title{color:#727072}.theme__custom .toc__title{color:#002633}.toc a{color:inherit;position:relative}.toc a::before{content:'';height:100%;left:-1rem;margin-top:-1px;position:absolute;width:2px}.theme__dark .toc a::before{background-color:#727072}.theme__light .toc a::before{background-color:#727072}.theme__hacker .toc a::before{background-color:#727072}.theme__solarized .toc a::before{background-color:#727072}.theme__custom .toc a::before{background-color:#c0e5f2}.toc a::before:last-child{background-color:transparent}.theme__dark .toc ul li li{margin-left:1rem;color:#fcfcfa}.theme__dark .toc ul a{color:#90a4ae}.theme__dark .toc ul a.active{color:#ff6188}.theme__light .toc ul li li{margin-left:1rem;color:#424242}.theme__light .toc ul a{color:#727072}.theme__light .toc ul a.active{color:#ff6188}.theme__hacker .toc ul li li{margin-left:1rem;color:#a1ad64}.theme__hacker .toc ul a{color:#727072}.theme__hacker .toc ul a.active{color:#ff6188}.theme__solarized .toc ul li li{margin-left:1rem;color:#b58900}.theme__solarized .toc ul a{color:#727072}.theme__solarized .toc ul a.active{color:#ff6188}.theme__custom .toc ul li li{margin-left:1rem;color:#0b6d8e}.theme__custom .toc ul a{color:#8f9ea3}.theme__custom .toc ul a.active{color:#1f7693}.theme__dark .toc .active{color:#ff6188;font-weight:700}.theme__dark .toc .active::before{background-color:#ff6188}.theme__light .toc .active{color:#ff6188;font-weight:700}.theme__light .toc .active::before{background-color:#ff6188}.theme__hacker .toc .active{color:#ff6188;font-weight:700}.theme__hacker .toc .active::before{background-color:#ff6188}.theme__solarized .toc .active{color:#ff6188;font-weight:700}.theme__solarized .toc .active::before{background-color:#ff6188}.theme__custom .toc .active{color:#144a5d;font-weight:700}.theme__custom .toc .active::before{background-color:#1f7693}.tooltipped{position:relative}.tooltipped:after{position:absolute;z-index:1000000;display:none;padding:5px 8px;font:11px/1.5 lato,work sans,helvetica,tahoma,geneva,arial,sans-serif;color:#fff;text-align:center;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-wrap:break-word;white-space:pre;pointer-events:none;content:attr(aria-label);background:rgba(0,0,0,.8);border-radius:3px;-webkit-font-smoothing:subpixel-antialiased}.tooltipped:before{position:absolute;z-index:1000001;display:none;width:0;height:0;color:rgba(0,0,0,.8);pointer-events:none;content:"";border:5px solid transparent}.tooltipped:hover:before,.tooltipped:hover:after,.tooltipped:active:before,.tooltipped:active:after,.tooltipped:focus:before,.tooltipped:focus:after{display:inline-block;text-decoration:none}.tooltipped-s:after,.tooltipped-se:after,.tooltipped-sw:after{top:100%;right:50%;margin-top:5px}.tooltipped-s:before,.tooltipped-se:before,.tooltipped-sw:before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:rgba(0,0,0,.8)}.tooltipped-se:after{right:auto;left:50%;margin-left:-15px}.tooltipped-sw:after{margin-right:-15px}.tooltipped-n:after,.tooltipped-ne:after,.tooltipped-nw:after{right:50%;bottom:100%;margin-bottom:5px}.tooltipped-n:before,.tooltipped-ne:before,.tooltipped-nw:before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:rgba(0,0,0,.8)}.tooltipped-ne:after{right:auto;left:50%;margin-left:-15px}.tooltipped-nw:after{margin-right:-15px}.tooltipped-s:after,.tooltipped-n:after{transform:translateX(50%)}.tooltipped-w:after{right:100%;bottom:50%;margin-right:5px;transform:translateY(50%)}.tooltipped-w:before{top:50%;bottom:50%;left:-5px;margin-top:-5px;border-left-color:rgba(0,0,0,.8)}.tooltipped-e:after{bottom:50%;left:100%;margin-left:5px;transform:translateY(50%)}.tooltipped-e:before{top:50%;right:-5px;bottom:50%;margin-top:-5px;border-right-color:rgba(0,0,0,.8)}.whoami{padding:0 1rem;margin:1rem 0;border-radius:.25rem;width:100%;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}@media(max-width:769px){.whoami{-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}}.whoami__contents{margin-top:.5rem}@media(max-width:769px){.whoami__contents{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}}.whoami__image{width:100%;height:100%;object-fit:cover;border-radius:.25rem;-webkit-box-shadow:0 8px 6px -6px #000;-moz-box-shadow:0 8px 6px -6px #000;box-shadow:0 8px 6px -6px #000}.whoami__image-wrapper{min-width:150px;max-width:200px;height:auto;margin-right:1rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.whoami__title{font-size:1.5rem;font-weight:700;margin-bottom:.5rem;padding-bottom:.5rem}.theme__dark .whoami__title{text-decoration:underline double #ffa7c4}.theme__light .whoami__title{text-decoration:underline double #607d8b}.theme__hacker .whoami__title{text-decoration:underline double #1fff2a}.theme__solarized .whoami__title{text-decoration:underline double #b58900}.theme__custom .whoami__title{text-decoration:underline double #1d6c87}.whoami__desc{font-size:1rem;padding-left:.25rem}@media(max-width:769px){.whoami__desc{width:75%}}.whoami__gutter{height:2rem}.whoami__social{margin-top:.5rem}.theme__dark .whoami__social a{text-decoration:none;color:#bdbdbd}.theme__dark .whoami__social a:hover{color:#f0f0f0;transition:color .2s ease}.theme__light .whoami__social a{text-decoration:none;color:#9e9e9e}.theme__light .whoami__social a:hover{color:#6b6b6b;transition:color .2s ease}.theme__hacker .whoami__social a{text-decoration:none;color:#9e9e9e}.theme__hacker .whoami__social a:hover{color:#6b6b6b;transition:color .2s ease}.theme__solarized .whoami__social a{text-decoration:none;color:#b58900}.theme__solarized .whoami__social a:hover{color:#e8b000;transition:color .2s ease}.theme__custom .whoami__social a{text-decoration:none;color:#608f9f}.theme__custom .whoami__social a:hover{color:#80a6b3;transition:color .2s ease}.whoami__written-by{font-size:.9rem;opacity:.65}.whoami-hr{border-radius:.5rem}.not-found{height:100%;font-family:montserrat,sans-serif;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.theme__dark .not-found .title{color:#ffd866}.theme__dark .not-found .subtitle{color:#fcfcfa}.theme__light .not-found .title{color:#607d8b}.theme__light .not-found .subtitle{color:#424242}.theme__hacker .not-found .title{color:#a1ad64}.theme__hacker .not-found .subtitle{color:#cdf5cc}.theme__solarized .not-found .title{color:#b58900}.theme__solarized .not-found .subtitle{color:#cf9c00}.theme__custom .not-found .title{color:#001f29}.theme__custom .not-found .subtitle{color:#3d7a8f}.about{padding:1rem}.archive{position:relative;padding:2rem 2rem 0;width:100%;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-justify-content:flex-start;-moz-justify-content:flex-start;-ms-justify-content:flex-start;justify-content:flex-start;-ms-flex-pack:flex-start}.archive__container{width:100%}.archive__ul{position:relative}.archive__ul::before{content:'';position:absolute;left:3rem;top:0;width:.25rem;height:100%}.theme__dark .archive__ul::before{background-color:#727072}.theme__light .archive__ul::before{background-color:#727072}.theme__hacker .archive__ul::before{background-color:#727072}.theme__solarized .archive__ul::before{background-color:#727072}.theme__custom .archive__ul::before{background-color:#c0e5f2}@media(max-width:769px){.archive__ul::before{content:none}}.archive__li{margin-bottom:.5rem;margin-left:4rem;z-index:0;-webkit-transition:margin-left .1s ease;-moz-transition:margin-left .1s ease;-ms-transition:margin-left .1s ease;-o-transition:margin-left .1s ease;transition:margin-left .1s ease;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}@media(max-width:769px){.archive__li{margin-left:0;position:relative}}.archive__key{margin-right:.5rem;border-radius:.25rem;height:32px;width:100px;padding:.125rem;font-size:.95rem;font-weight:700;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center;-ms-flex-pack:center;-webkit-animation:slide-in-down .4s .2s 1 ease both;-moz-animation:slide-in-down .4s .2s 1 ease both;-ms-animation:slide-in-down .4s .2s 1 ease both;-o-animation:slide-in-down .4s .2s 1 ease both;animation:slide-in-down .4s .2s 1 ease both}.theme__dark .archive__key{color:#fcfcfa;background-color:#ff6188}.theme__light .archive__key{color:#fcfcfa;background-color:#607d8b}.theme__hacker .archive__key{color:#fcfcfa;background-color:#e08c48}.theme__solarized .archive__key{color:#fcfcfa;background-color:#b58900}.theme__custom .archive__key{color:#d6f5ff;background-color:#002e3d}.archive__key:not(:first-child){margin:4rem 0 1rem}.archive__key:first-child{margin:1rem 0}.archive__meta{border-radius:.25rem;min-width:100px;max-width:100px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-animation:slide-in-left .2s .5s 1 ease both;-moz-animation:slide-in-left .2s .5s 1 ease both;-ms-animation:slide-in-left .2s .5s 1 ease both;-o-animation:slide-in-left .2s .5s 1 ease both;animation:slide-in-left .2s .5s 1 ease both}.archive__type{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;font-size:.8rem;width:50%;height:20px;text-align:center;max-width:50px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.theme__dark .archive__type{color:#82aaff;background-color:#424242}@media(max-width:769px){.theme__dark .archive__type{border-right:2px solid #727072}}.theme__light .archive__type{color:#575757;background-color:#bdbdbd}@media(max-width:769px){.theme__light .archive__type{border-right:2px solid #727072}}.theme__hacker .archive__type{color:#fcfcfa;background-color:#855e78}@media(max-width:769px){.theme__hacker .archive__type{border-right:2px solid #727072}}.theme__solarized .archive__type{color:#996b00;background-color:#f6e099}@media(max-width:769px){.theme__solarized .archive__type{border-right:2px solid #727072}}.theme__custom .archive__type{color:#144252;background-color:#e6f9ff}@media(max-width:769px){.theme__custom .archive__type{border-right:2px solid #c0e5f2}}.archive__date{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;font-size:.8rem;width:50%;height:20px;text-align:center;max-width:50px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.theme__dark .archive__date{color:#aed581;background-color:#424242}@media(max-width:769px){.theme__dark .archive__date{border-left:2px solid #727072}}.theme__light .archive__date{color:#424242;background-color:#bdbdbd}@media(max-width:769px){.theme__light .archive__date{border-left:2px solid #727072}}.theme__hacker .archive__date{color:#e3cd26;background-color:#855e78}@media(max-width:769px){.theme__hacker .archive__date{border-left:2px solid #727072}}.theme__solarized .archive__date{color:#455a64;background-color:#f6e099}@media(max-width:769px){.theme__solarized .archive__date{border-left:2px solid #727072}}.theme__custom .archive__date{color:#148fb8;background-color:#e6f9ff}@media(max-width:769px){.theme__custom .archive__date{border-left:2px solid #c0e5f2}}.archive__title{margin-right:.5rem;margin-left:1rem;max-width:960;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.archive__title:hover::before,.archive__title:active::before,.archive__title:focus::before{content:'';position:absolute;left:3rem;width:.25rem;height:20px}.theme__dark .archive__title:hover::before,.theme__dark .archive__title:active::before,.theme__dark .archive__title:focus::before{background-color:#ff6188}.theme__light .archive__title:hover::before,.theme__light .archive__title:active::before,.theme__light .archive__title:focus::before{background-color:#ff6188}.theme__hacker .archive__title:hover::before,.theme__hacker .archive__title:active::before,.theme__hacker .archive__title:focus::before{background-color:#ff6188}.theme__solarized .archive__title:hover::before,.theme__solarized .archive__title:active::before,.theme__solarized .archive__title:focus::before{background-color:#ff6188}.theme__custom .archive__title:hover::before,.theme__custom .archive__title:active::before,.theme__custom .archive__title:focus::before{background-color:#1d6c87}@media(max-width:769px){.archive__title:hover::before,.archive__title:active::before,.archive__title:focus::before{top:50%;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}}#body{position:relative}.theme__dark #body{color:#fcfcfa;background-color:#212121}.theme__dark #body hr{border-color:#595b5c}.theme__light #body{color:#424242;background-color:#e0e0e0}.theme__light #body hr{border-color:#ccc}.theme__hacker #body{color:#1fff2a;background-color:#111}.theme__hacker #body hr{border-color:#c7ba00}.theme__solarized #body{color:#424242;background-color:#ddd6c7}.theme__solarized #body hr{border-color:#ffb300}.theme__custom #body{color:#002633;background-color:#fafeff}.theme__custom #body hr{border-color:#1f637a}html{overflow-x:hidden}.grid{position:relative;margin-bottom:1rem}.grid .full{width:100%}.grid .half{width:50%}.grid .third{width:33.3%}.grid .quarter{width:25%}.grid .fifth{width:20%}.grid:after{content:'';display:block;clear:both}.grid-sizer,.grid-item{width:33.333%;padding:.5rem}.grid-item{float:left}.grid-item img{display:block;max-width:100%}.gallery{padding:1rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.gallery img{border-radius:.25rem}.gallery__contents{padding:1rem;width:65%;font-family:merriweather,serif;font-size:1rem;text-align:center}.gallery .grid-item{position:relative;opacity:1;height:auto;cursor:pointer}.gallery .grid-item__desc{position:absolute;display:none;left:0;right:0;top:0;bottom:0;margin:auto;padding:.5rem;width:calc(100% - 1rem);height:calc(100% - 1rem);border-radius:.25rem;z-index:1;font-family:montserrat,sans-serif;font-weight:700;cursor:pointer;-webkit-box-shadow:0 4px 4px 0 rgba(0,0,0,.4);-moz-box-shadow:0 4px 4px 0 rgba(0,0,0,.4);box-shadow:0 4px 4px 0 rgba(0,0,0,.4)}.theme__dark .gallery .grid-item__desc:hover,.theme__dark .gallery .grid-item__desc:active,.theme__dark .gallery .grid-item__desc:focus{color:#fcfcfa;background-color:rgba(0,0,0,.7)}.theme__light .gallery .grid-item__desc:hover,.theme__light .gallery .grid-item__desc:active,.theme__light .gallery .grid-item__desc:focus{color:#424242;background-color:rgba(255,255,255,.7)}.theme__hacker .gallery .grid-item__desc:hover,.theme__hacker .gallery .grid-item__desc:active,.theme__hacker .gallery .grid-item__desc:focus{color:#fcfcfa;background-color:rgba(0,0,0,.7)}.theme__solarized .gallery .grid-item__desc:hover,.theme__solarized .gallery .grid-item__desc:active,.theme__solarized .gallery .grid-item__desc:focus{color:#424242;background-color:rgba(253,247,227,.7)}.theme__custom .gallery .grid-item__desc:hover,.theme__custom .gallery .grid-item__desc:active,.theme__custom .gallery .grid-item__desc:focus{color:#002633;background-color:rgba(204,242,255,.7)}.list__header{display:flex;align-items:center;justify-content:center;margin:.5rem;font-family:montserrat,sans-serif}.theme__dark .list__header--title{color:#fcfcfa}.theme__light .list__header--title{color:#424242}.theme__hacker .list__header--title{color:#a1ad64}.theme__solarized .list__header--title{color:#424242}.theme__custom .list__header--title{color:#002633}.list__header--desc{font-family:merriweather,serif;font-weight:italic;padding:1rem;line-height:1.7rem}.single{padding:1rem;position:relative;width:100%}.single__title{font-size:2.5rem;font-weight:900;font-family:montserrat,sans-serif;line-height:3rem;overflow-wrap:break-word}.theme__dark .single__title{color:#fcfcfa}.theme__light .single__title{color:#424242}.theme__hacker .single__title{color:#fcfcfa}.theme__solarized .single__title{color:#424242}.theme__custom .single__title{color:#002633}.single__meta{font-size:.8rem;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center}@media(max-width:769px){.single__meta{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;-moz-align-items:flex-start;-ms-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start}}.theme__dark .single__meta{color:#fcfcfa}.theme__light .single__meta{color:#424242}.theme__hacker .single__meta{color:#cdf5cc}.theme__solarized .single__meta{color:#cf9c00}.theme__custom .single__meta{color:#3d7a8f}.single__contents{font-size:1rem;font-family:merriweather,serif;margin:1rem 0;line-height:1.7rem;width:inheirt;max-width:inherit}.single__contents--gallery{overflow:hidden}.single__contents>p>a{text-decoration:underline}.single__contents h1,.single__contents h2,.single__contents h3,.single__contents h4,.single__contents h5,.single__contents h6{position:relative;line-height:1.25}.theme__dark .single__contents h1,.theme__dark .single__contents h2,.theme__dark .single__contents h3,.theme__dark .single__contents h4,.theme__dark .single__contents h5,.theme__dark .single__contents h6{color:#aed581}.theme__light .single__contents h1,.theme__light .single__contents h2,.theme__light .single__contents h3,.theme__light .single__contents h4,.theme__light .single__contents h5,.theme__light .single__contents h6{color:#607d8b}.theme__hacker .single__contents h1,.theme__hacker .single__contents h2,.theme__hacker .single__contents h3,.theme__hacker .single__contents h4,.theme__hacker .single__contents h5,.theme__hacker .single__contents h6{color:#a1ad64}.theme__solarized .single__contents h1,.theme__solarized .single__contents h2,.theme__solarized .single__contents h3,.theme__solarized .single__contents h4,.theme__solarized .single__contents h5,.theme__solarized .single__contents h6{color:#b58900}.theme__custom .single__contents h1,.theme__custom .single__contents h2,.theme__custom .single__contents h3,.theme__custom .single__contents h4,.theme__custom .single__contents h5,.theme__custom .single__contents h6{color:#114c5f}.single__contents h1{font-size:2.6rem;margin:3.5rem 0 1.75rem}.single__contents h2{font-size:2.2rem;margin:3.2rem 0 1.5rem;padding:0;color:inherit;font-weight:900;text-rendering:optimizeLegibility}.single__contents h3{font-size:1.8rem;margin:2.8rem 0 1.25rem}.single__contents h4{font-size:1.5rem;margin:2.4rem 0 1rem}.single__contents h5{font-size:1.2rem;margin:2rem 0 .8rem}.single__contents h6{font-size:1rem;margin:1.5rem 0 .5rem}.single__contents pre{padding:34px 12px 8px;position:relative;overflow:auto;border-radius:.34rem;position:relative}.single__contents pre::after{position:absolute;top:0;right:0;left:0;font-size:.95em;font-family:montserrat,sans-serif;font-weight:700;content:attr(data-lang)}.theme__dark .single__contents pre::after{color:#fcfcfa;background:#011220}.theme__light .single__contents pre::after{color:#344952;background:#efeae7}.theme__hacker .single__contents pre::after{color:#f3ff6e;background:#1c201c}.theme__solarized .single__contents pre::after{color:#344952;background:#f9e8b5}.theme__custom .single__contents pre::after{color:#002633;background:#d6f5ff}.single__contents code+.copy-to-clipboard{position:absolute;right:4px;top:5px;border-radius:2px;z-index:9;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.single__contents .copy-to-clipboard{background-image:url(data:image/svg+xml;utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjRwdCIgaGVpZ2h0PSIyNHB0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPlxhPHBhdGggc3R5bGU9InN0cm9rZTpub25lO2ZpbGwtcnVsZTpub256ZXJvO2ZpbGw6IzY0NjQ2NDtmaWxsLW9wYWNpdHk6MSIgZD0iTTQgMkMyLjg5NDUzMSAyIDIgMi44OTQ1MzEgMiA0VjE3QzIgMTcuNTUwNzgxIDIuNDQ5MjE5IDE4IDMgMThTNCAxNy41NTA3ODEgNCAxN1Y0SDE3QzE3LjU1MDc4MSA0IDE4IDMuNTUwNzgxIDE4IDNTMTcuNTUwNzgxIDIgMTcgMnpNOCA2QzYuODk0NTMxIDYgNiA2Ljg5NDUzMSA2IDhWMjBDNiAyMS4xMDU0NjkgNi44OTQ1MzEgMjIgOCAyMkgyMEMyMS4xMDU0NjkgMjIgMjIgMjEuMTA1NDY5IDIyIDIwVjhDMjIgNi44OTQ1MzEgMjEuMTA1NDY5IDYgMjAgNnpNOCA4SDIwVjIwSDh6TTggOCIvPjwvc3ZnPg==);background-position:50%;background-size:16px 16px;background-repeat:no-repeat;width:27px;height:1.45rem;top:-1px;display:inline-block;vertical-align:middle;position:relative;margin-left:-.2rem;cursor:pointer;border-radius:0 2px 2px 0;margin-bottom:1px;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.single__contents .copy-to-clipboard:hover{-webkit-transform:translateY(-.1rem);-moz-transform:translateY(-.1rem);-ms-transform:translateY(-.1rem);transform:translateY(-.1rem)}.single__contents .chroma .copy-to-clipboard{position:absolute;right:4px;top:5px;border-radius:2px;z-index:9;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.single__contents .chroma .copy-to-clipboard:hover{-webkit-transform:translateY(-.1rem);-moz-transform:translateY(-.1rem);-ms-transform:translateY(-.1rem);transform:translateY(-.1rem)}.single__contents .language-code .copy-to-clipboard{position:absolute;right:4px;top:5px;border-radius:2px;z-index:9;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.single__contents .language-code .copy-to-clipboard:hover{-webkit-transform:translateY(-.1rem);-moz-transform:translateY(-.1rem);-ms-transform:translateY(-.1rem);transform:translateY(-.1rem)}.single__contents blockquote{margin:0 1.75rem 1.75rem 1.5rem;padding:0 0 0 1.42188rem;font-size:1.05rem;line-height:1.75rem;color:inherit;opacity:.8;position:relative}.theme__dark .single__contents blockquote{border-left:.32813rem solid #fcfcfa}.theme__light .single__contents blockquote{border-left:.32813rem solid #bdbdbd}.theme__hacker .single__contents blockquote{border-left:.32813rem solid #e08c48}.theme__solarized .single__contents blockquote{border-left:.32813rem solid #bdbdbd}.theme__custom .single__contents blockquote{border-left:.32813rem solid #006080}.single__contents blockquote code{margin:0 .25rem}.single__contents img{display:block;border-radius:.25rem;margin:0 auto}.single__contents p{margin:0 0 1.75rem;padding:0}.single__contents p code{margin:0 .25rem}.single__contents ul{margin-right:0;margin-top:0;padding:0;list-style:disc outside none}.single__contents li{margin-left:2rem;margin-bottom:calc(1rem/2)}.single__contents li code{margin:0 .25rem}.single__contents hr{margin:0 0 calc(1.25rem - 1px);padding:0;border:none;height:1px}.theme__dark .single__contents hr{background:#595b5c}.theme__light .single__contents hr{background:#bdbdbd}.theme__hacker .single__contents hr{background:#e08c48}.theme__solarized .single__contents hr{background:#bdbdbd}.theme__custom .single__contents hr{background:#09c}.single__contents dl dt::after{content:':'}.single__contents dd{display:block;margin-inline-start:40px}.single__contents .anchor{cursor:pointer}.single__contents a.footnote-ref{font-size:.75rem;font-weight:700;margin-left:3px}.single__contents a.footnote-ref::before{content:"["}.single__contents a.footnote-ref::after{content:"]"}.single__contents .table-wrapper{overflow-x:auto}.single__contents .table-wrapper>table{max-width:100%;margin:10px 0;border-spacing:0;box-shadow:1px 1px 3px rgba(0,0,0,.125)}.theme__dark .single__contents .table-wrapper>table thead{background:#011220}.theme__dark .single__contents .table-wrapper>table th{color:#fcfcfa}.theme__dark .single__contents .table-wrapper>table th,.theme__dark .single__contents .table-wrapper>table td{padding:5px 15px;font-size:.9rem;border:1px double #3a3a3a}.theme__dark .single__contents .table-wrapper>table tr:hover{background-color:#011220}.theme__light .single__contents .table-wrapper>table thead{background:#efeae7}.theme__light .single__contents .table-wrapper>table th{color:#344952}.theme__light .single__contents .table-wrapper>table th,.theme__light .single__contents .table-wrapper>table td{padding:5px 15px;font-size:.9rem;border:1px double #e7dfdb}.theme__light .single__contents .table-wrapper>table tr:hover{background-color:#efeae7}.theme__hacker .single__contents .table-wrapper>table thead{background:#1c201c}.theme__hacker .single__contents .table-wrapper>table th{color:#f3ff6e}.theme__hacker .single__contents .table-wrapper>table th,.theme__hacker .single__contents .table-wrapper>table td{padding:5px 15px;font-size:.9rem;border:1px double #f3ff6e}.theme__hacker .single__contents .table-wrapper>table tr:hover{background-color:#1c201c}.theme__solarized .single__contents .table-wrapper>table thead{background:#f9e8b5}.theme__solarized .single__contents .table-wrapper>table th{color:#344952}.theme__solarized .single__contents .table-wrapper>table th,.theme__solarized .single__contents .table-wrapper>table td{padding:5px 15px;font-size:.9rem;border:1px double #f6e099}.theme__solarized .single__contents .table-wrapper>table tr:hover{background-color:#f9e8b5}.theme__custom .single__contents .table-wrapper>table thead{background:#d6f5ff}.theme__custom .single__contents .table-wrapper>table th{color:#002633}.theme__custom .single__contents .table-wrapper>table th,.theme__custom .single__contents .table-wrapper>table td{padding:5px 15px;font-size:.9rem;border:1px double #b8edff}.theme__custom .single__contents .table-wrapper>table tr:hover{background-color:#d6f5ff}.single__contents .table-wrapper code{margin:0 .25rem}.single__tags{margin:0 .5rem;list-style-type:none;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}@media(max-width:769px){.single__tags{margin:0}}.single__tag{padding:0 .25rem}code,pre{padding:.5rem 0;line-height:1.5em;font-size:.95em;font-family:Consolas,andale mono wt,andale mono,lucida console,lucida sans typewriter,dejavu sans mono,bitstream vera sans mono,liberation mono,nimbus mono l,Monaco,courier new,Courier,monospace;position:relative}.theme__dark code,.theme__dark pre{background:#171f2e}.theme__light code,.theme__light pre{background:#f5f2f0}.theme__hacker code,.theme__hacker pre{background:#202420}.theme__solarized code,.theme__solarized pre{background:#faf1cd}.theme__custom code,.theme__custom pre{background:#f0fbff}code a,pre a{text-decoration:none!important}code{padding:3px 5px;border-radius:4px}pre:not(.chroma){overflow:auto}.single__contents>.language-code{overflow-x:auto;position:relative;margin:1em 0}.single__contents>.language-code::after{position:absolute;top:0;right:0;left:0;padding:2px 7px;font-size:.95em;font-family:montserrat,sans-serif;font-weight:700;border-top-left-radius:.25rem;border-top-right-radius:.25rem;content:attr(data-lang)}.theme__dark .single__contents>.language-code::after{color:#fcfcfa;background:#011220}.theme__light .single__contents>.language-code::after{color:#344952;background:#efeae7}.theme__hacker .single__contents>.language-code::after{color:#f3ff6e;background:#1c201c}.theme__solarized .single__contents>.language-code::after{color:#344952;background:#f9e8b5}.theme__custom .single__contents>.language-code::after{color:#002633;background:#d6f5ff}.highlight>.chroma{margin:1em 0;border-radius:5px;box-shadow:1px 1px 2px rgba(0,0,0,.125);position:relative;overflow-x:auto}.theme__dark .highlight>.chroma{color:#eee;background:#171f2e}.theme__light .highlight>.chroma{color:#344952;background:#f5f2f0}.theme__hacker .highlight>.chroma{color:#d1d1d1;background:#202420}.theme__solarized .highlight>.chroma{color:#344952;background:#faf1cd}.theme__custom .highlight>.chroma{color:#002633;background:#f0fbff}.highlight>.chroma code{padding:0}.highlight>.chroma::after{position:absolute;top:0;right:0;left:0;padding:2px 7px;font-size:.95em;font-family:montserrat,sans-serif;font-weight:700;content:attr(data-lang)}.theme__dark .highlight>.chroma::after{color:#fcfcfa;background:#011220}.theme__light .highlight>.chroma::after{color:#344952;background:#efeae7}.theme__hacker .highlight>.chroma::after{color:#f3ff6e;background:#1c201c}.theme__solarized .highlight>.chroma::after{color:#344952;background:#f9e8b5}.theme__custom .highlight>.chroma::after{color:#002633;background:#d6f5ff}.highlight>.chroma .lntd{line-height:1em}.highlight>.chroma .lntd:first-child{width:10px}.highlight>.chroma .lntd:first-child pre{margin:0;padding:34px 4px 6px}.highlight>.chroma .lntd:last-child{vertical-align:top;position:relative}.highlight>.chroma .lntd:last-child pre{margin:0;padding:34px 4px 6px}.highlight>.chroma table,.highlight>.chroma tr,.highlight>.chroma td{margin:0;padding:0;width:100%;border-collapse:collapse}.theme__dark .highlight>.chroma .lnt{color:#666}.theme__light .highlight>.chroma .lnt{color:#aaa}.theme__hacker .highlight>.chroma .lnt{color:#666}.theme__solarized .highlight>.chroma .lnt{color:#aaa}.theme__custom .highlight>.chroma .lnt{color:#ababab}.terms{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.terms__title{margin:2rem 0}.theme__dark .terms__title{color:#727072;text-shadow:1px 1px 0 #585758,2px 2px 0 #4e4d4e,3px 3px 0 #444344,4px 4px 0 #393839}.theme__light .terms__title{color:#9e9e9e;text-shadow:1px 1px 0 #858484,2px 2px 0 #7a7a7a,3px 3px 0 #707070,4px 4px 0 #666}.theme__hacker .terms__title{color:#c7ba00;text-shadow:1px 1px 0 #948a00,2px 2px 0 #807700,3px 3px 0 #6b6400,4px 4px 0 #575100}.theme__solarized .terms__title{color:#d9a400;text-shadow:1px 1px 0 #a67d00,2px 2px 0 #916e00,3px 3px 0 #7d5f00,4px 4px 0 #694f00}.theme__custom .terms__title{color:#80a6b3;text-shadow:1px 1px 0 #608f9f,2px 2px 0 #588493,3px 3px 0 #507886,4px 4px 0 #496d79}.terms__list{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;width:50%}.terms__item{display:inline-block;margin-right:1rem;text-decoration:none!important;border-radius:.25rem;padding:.25rem;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.terms__item:hover,.terms__item:active,.terms__item:focus{-webkit-transform:translateY(-.25rem);-moz-transform:translateY(-.25rem);-ms-transform:translateY(-.25rem);transform:translateY(-.25rem)}.terms__link:hover{text-decoration:none}.theme__dark .terms__tags{color:#78dce8}.theme__light .terms__tags{color:#424242}.theme__hacker .terms__tags{color:#1fff2a}.theme__solarized .terms__tags{color:#ffb300}.theme__custom .terms__tags{color:#007399}.theme__dark .terms__categories{color:#ab9df2}.theme__light .terms__categories{color:#424242}.theme__hacker .terms__categories{color:#1fff2a}.theme__solarized .terms__categories{color:#b58900}.theme__custom .terms__categories{color:#007399}.theme__dark .terms__series{color:#ea9c77}.theme__light .terms__series{color:#424242}.theme__hacker .terms__series{color:#1fff2a}.theme__solarized .terms__series{color:#b58900}.theme__custom .terms__series{color:#007399}.theme__dark .terms__len{color:#727072}.theme__light .terms__len{color:#727072}.theme__hacker .terms__len{color:#e08c48}.theme__solarized .terms__len{color:#727072}.theme__custom .terms__len{color:#002e3d}.terms .is-small{font-size:1rem}.terms .is-normal{font-size:1.5rem}.terms .is-medium{font-size:2rem}.terms .is-large{font-size:2.5rem}.pt{padding:1rem}.pt__row{display:flex;flex-wrap:wrap}.pt__column{flex:50%;padding:0 .5rem}.pt__column .pt__card{margin:.5rem 0;vertical-align:middle;background-color:blue}@media screen and (max-width:4000px){.pt__column{flex:50%;max-width:33.33%}}@media screen and (max-width:900px){.pt__column{flex:50%;max-width:50%}}@media screen and (max-width:500px){.pt__column{flex:100%;max-width:100%}}
\ No newline at end of file
diff --git a/layouts/_default/list.html b/layouts/_default/list.html
index 2b2079b..ac70a54 100644
--- a/layouts/_default/list.html
+++ b/layouts/_default/list.html
@@ -11,9 +11,9 @@
- {{ $paginator := .Paginate (where .Pages "Type" .Type) }}
+ {{ $paginator := .Paginate (where .Pages "Type" .Type) }}
{{ range $paginator.Pages }}
- {{ .Render "summary" }}
+ {{ .Render "summary" }}
{{ end }}
diff --git a/layouts/_default/taxonomy.html b/layouts/_default/taxonomy.html
index bee7fdd..673adda 100644
--- a/layouts/_default/taxonomy.html
+++ b/layouts/_default/taxonomy.html
@@ -16,9 +16,10 @@
- {{ partial "pagination/pagination-list" . }}
+ {{ partial "pagination/pagination" . }}
{{ partial "sidebar/sidebar-list" . }}
+{{ partial "script/taxo-script" . }}
{{ end }}
\ No newline at end of file
diff --git a/layouts/_default/terms.html b/layouts/_default/terms.html
index 45742cf..ec004ff 100644
--- a/layouts/_default/terms.html
+++ b/layouts/_default/terms.html
@@ -17,8 +17,8 @@
{{ end }}
-
+
{{ partial "search/site-search" . }}
-
+
{{ partial "script/taxo-script" . }}
{{ end }}
\ No newline at end of file
diff --git a/layouts/partials/body/related.html b/layouts/partials/body/related.html
index 67331da..5d7a222 100644
--- a/layouts/partials/body/related.html
+++ b/layouts/partials/body/related.html
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/layouts/partials/body/whoami.html b/layouts/partials/body/whoami.html
index f887523..2e672ec 100644
--- a/layouts/partials/body/whoami.html
+++ b/layouts/partials/body/whoami.html
@@ -1,7 +1,7 @@
{{ if $.Param "enableWhoami" }}
-
+
{{ end }}
\ No newline at end of file
diff --git a/layouts/partials/footer/go-to-top.html b/layouts/partials/footer/go-to-top.html
index 736bf78..175f1a3 100644
--- a/layouts/partials/footer/go-to-top.html
+++ b/layouts/partials/footer/go-to-top.html
@@ -1,7 +1,7 @@
{{ if $.Param "enableGoToTop" }}
-