diff --git a/src/includes/docs/details.html b/src/old/includes/docs/details.html
similarity index 100%
rename from src/includes/docs/details.html
rename to src/old/includes/docs/details.html
diff --git a/src/old/includes/docs/head.html b/src/old/includes/docs/head.html
new file mode 100644
index 0000000..47c57cf
--- /dev/null
+++ b/src/old/includes/docs/head.html
@@ -0,0 +1,13 @@
+{{define "docs-head"}}
+ {{import "/old/includes/head.html"}}
+ {{template "head"}}
+
+ {{$directives := list }}
+ {{range $i, $file := (listFiles "/docs/markdown/caddyfile/directives")}}
+ {{$directives = append $directives ($file | trimSuffix ".md")}}
+ {{end}}
+
+
+
+{{end}}
diff --git a/src/old/includes/docs/header.html b/src/old/includes/docs/header.html
new file mode 100644
index 0000000..a11ccd5
--- /dev/null
+++ b/src/old/includes/docs/header.html
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/src/includes/docs/hovercard.html b/src/old/includes/docs/hovercard.html
similarity index 100%
rename from src/includes/docs/hovercard.html
rename to src/old/includes/docs/hovercard.html
diff --git a/src/includes/docs/nav.html b/src/old/includes/docs/nav.html
similarity index 96%
rename from src/includes/docs/nav.html
rename to src/old/includes/docs/nav.html
index 7b25c4c..a60803b 100644
--- a/src/includes/docs/nav.html
+++ b/src/old/includes/docs/nav.html
@@ -1,7 +1,7 @@
diff --git a/src/includes/docs/renderbox.html b/src/old/includes/docs/renderbox.html
similarity index 100%
rename from src/includes/docs/renderbox.html
rename to src/old/includes/docs/renderbox.html
diff --git a/src/old/includes/footer.html b/src/old/includes/footer.html
new file mode 100644
index 0000000..1b90a11
--- /dev/null
+++ b/src/old/includes/footer.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
diff --git a/src/old/includes/head.html b/src/old/includes/head.html
new file mode 100644
index 0000000..0311c67
--- /dev/null
+++ b/src/old/includes/head.html
@@ -0,0 +1,58 @@
+{{define "cacheBust" -}}
+ {{- if fileExists "/.commit-hash" -}}
+ {{- $commitHash := (include "/.commit-hash") -}}
+ {{- trim (printf "?v=%v" $commitHash) -}}
+ {{- end -}}
+{{- end}}
+
+{{define "head"}}
+
+
+{{end}}
+
diff --git a/src/includes/header-nav.html b/src/old/includes/header-nav.html
similarity index 73%
rename from src/includes/header-nav.html
rename to src/old/includes/header-nav.html
index 64fced9..05fa201 100644
--- a/src/includes/header-nav.html
+++ b/src/old/includes/header-nav.html
@@ -1,11 +1,11 @@
diff --git a/src/resources/css/account/common.css b/src/old/resources/css/account/common.css
similarity index 100%
rename from src/resources/css/account/common.css
rename to src/old/resources/css/account/common.css
diff --git a/src/resources/css/account/dashboard.css b/src/old/resources/css/account/dashboard.css
similarity index 100%
rename from src/resources/css/account/dashboard.css
rename to src/old/resources/css/account/dashboard.css
diff --git a/src/old/resources/css/chroma.css b/src/old/resources/css/chroma.css
new file mode 100644
index 0000000..193432e
--- /dev/null
+++ b/src/old/resources/css/chroma.css
@@ -0,0 +1,161 @@
+/*
+ Derived from https://gist.github.com/nicolashery/5765395
+ Adjusted to be high-contrast
+*/
+
+
+/*
+ Solarized Light (High Contrast)
+ Derived from http://ethanschoonover.com/solarized
+*/
+.chroma {
+ background: linear-gradient(0deg, #f8fbfd 0%, #edf5fd 100%);
+ color: #254048;
+}
+.chroma .c { color: #93a1a1 } /* Comment */
+.chroma .err { color: #586e75 } /* Error */
+.chroma .g { color: #586e75 } /* Generic */
+.chroma .k { color: #577b00 } /* Keyword */
+.chroma .l { color: #586e75 } /* Literal */
+.chroma .n { color: #586e75 } /* Name */
+.chroma .o { color: #577b00 } /* Operator */
+.chroma .x { color: #d03d00 } /* Other */
+.chroma .p { color: #586e75 } /* Punctuation */
+.chroma .cm { color: #93a1a1 } /* Comment.Multiline */
+.chroma .cp { color: #577b00 } /* Comment.Preproc */
+.chroma .c1 { color: #93a1a1 } /* Comment.Single */
+.chroma .cs { color: #577b00 } /* Comment.Special */
+.chroma .gd { color: #dc322f; background-color: #efdede } /* Generic.Deleted */
+.chroma .ge { color: #586e75; font-style: italic } /* Generic.Emph */
+.chroma .gr { color: #dc322f } /* Generic.Error */
+.chroma .gh { color: #d03d00 } /* Generic.Heading */
+.chroma .gi { color: #577b00; background-color: #ddecdc } /* Generic.Inserted */
+.chroma .go { color: #586e75 } /* Generic.Output */
+.chroma .gp { color: #586e75 } /* Generic.Prompt */
+.chroma .gs { color: #586e75; font-weight: bold } /* Generic.Strong */
+.chroma .gu { color: #d03d00 } /* Generic.Subheading */
+.chroma .gt { color: #586e75 } /* Generic.Traceback */
+.chroma .kc { color: #d03d00 } /* Keyword.Constant */
+.chroma .kd { color: #0673bf } /* Keyword.Declaration */
+.chroma .kn { color: #577b00 } /* Keyword.Namespace */
+.chroma .kp { color: #577b00 } /* Keyword.Pseudo */
+.chroma .kr { color: #0673bf } /* Keyword.Reserved */
+.chroma .kt { color: #dc322f } /* Keyword.Type */
+.chroma .ld { color: #586e75 } /* Literal.Date */
+.chroma .m { color: #008076 } /* Literal.Number */
+.chroma .s { color: #008076 } /* Literal.String */
+.chroma .na { color: #586e75 } /* Name.Attribute */
+.chroma .nb { color: #B58900 } /* Name.Builtin */
+.chroma .nc { color: #0673bf } /* Name.Class */
+.chroma .no { color: #d03d00 } /* Name.Constant */
+.chroma .nd { color: #0673bf } /* Name.Decorator */
+.chroma .ni { color: #d03d00 } /* Name.Entity */
+.chroma .ne { color: #d03d00 } /* Name.Exception */
+.chroma .nf { color: #0673bf } /* Name.Function */
+.chroma .nl { color: #586e75 } /* Name.Label */
+.chroma .nn { color: #586e75 } /* Name.Namespace */
+.chroma .nx { color: #586e75 } /* Name.Other */
+.chroma .py { color: #586e75 } /* Name.Property */
+.chroma .nt { color: #0673bf } /* Name.Tag */
+.chroma .nv { color: #0673bf } /* Name.Variable */
+.chroma .ow { color: #577b00 } /* Operator.Word */
+.chroma .w { color: #586e75 } /* Text.Whitespace */
+.chroma .mf { color: #008076 } /* Literal.Number.Float */
+.chroma .mh { color: #008076 } /* Literal.Number.Hex */
+.chroma .mi { color: #008076 } /* Literal.Number.Integer */
+.chroma .mo { color: #008076 } /* Literal.Number.Oct */
+.chroma .sb { color: #93a1a1 } /* Literal.String.Backtick */
+.chroma .sc { color: #008076 } /* Literal.String.Char */
+.chroma .sd { color: #586e75 } /* Literal.String.Doc */
+.chroma .s2 { color: #008076 } /* Literal.String.Double */
+.chroma .se { color: #d03d00 } /* Literal.String.Escape */
+.chroma .sh { color: #586e75 } /* Literal.String.Heredoc */
+.chroma .si { color: #008076 } /* Literal.String.Interpol */
+.chroma .sx { color: #008076 } /* Literal.String.Other */
+.chroma .sr { color: #dc322f } /* Literal.String.Regex */
+.chroma .s1 { color: #008076 } /* Literal.String.Single */
+.chroma .ss { color: #008076 } /* Literal.String.Symbol */
+.chroma .bp { color: #0673bf } /* Name.Builtin.Pseudo */
+.chroma .vc { color: #0673bf } /* Name.Variable.Class */
+.chroma .vg { color: #0673bf } /* Name.Variable.Global */
+.chroma .vi { color: #0673bf } /* Name.Variable.Instance */
+.chroma .il { color: #008076 } /* Literal.Number.Integer.Long */
+
+@media (prefers-color-scheme: dark) {
+ /*
+ Solarized Dark (High Contrast)
+ Derived from http://ethanschoonover.com/solarized
+ */
+ .chroma {
+ background: linear-gradient(0deg, #18384d 0%, #122537 100%);
+ color: #93a1a1;
+ }
+ .chroma .c { color: #586e75 } /* Comment */
+ .chroma .err { color: #93a1a1 } /* Error */
+ .chroma .g { color: #93a1a1 } /* Generic */
+ .chroma .k { color: #76a507 } /* Keyword */
+ .chroma .l { color: #93a1a1 } /* Literal */
+ .chroma .n { color: #93a1a1 } /* Name */
+ .chroma .o { color: #76a507 } /* Operator */
+ .chroma .x { color: #ec662e } /* Other */
+ .chroma .p { color: #93a1a1 } /* Punctuation */
+ .chroma .cm { color: #586e75 } /* Comment.Multiline */
+ .chroma .cp { color: #76a507 } /* Comment.Preproc */
+ .chroma .c1 { color: #586e75 } /* Comment.Single */
+ .chroma .cs { color: #76a507 } /* Comment.Special */
+ .chroma .gd { color: #dc322f; background-color: #efdede } /* Generic.Deleted */
+ .chroma .ge { color: #93a1a1; font-style: italic } /* Generic.Emph */
+ .chroma .gr { color: #dc322f } /* Generic.Error */
+ .chroma .gh { color: #ec662e } /* Generic.Heading */
+ .chroma .gi { color: #76a507 } /* Generic.Inserted */
+ .chroma .go { color: #93a1a1 } /* Generic.Output */
+ .chroma .gp { color: #93a1a1 } /* Generic.Prompt */
+ .chroma .gs { color: #93a1a1; font-weight: bold } /* Generic.Strong */
+ .chroma .gu { color: #ec662e } /* Generic.Subheading */
+ .chroma .gt { color: #93a1a1 } /* Generic.Traceback */
+ .chroma .kc { color: #ec662e } /* Keyword.Constant */
+ .chroma .kd { color: #0090f5 } /* Keyword.Declaration */
+ .chroma .kn { color: #76a507 } /* Keyword.Namespace */
+ .chroma .kp { color: #76a507 } /* Keyword.Pseudo */
+ .chroma .kr { color: #0090f5 } /* Keyword.Reserved */
+ .chroma .kt { color: #dc322f } /* Keyword.Type */
+ .chroma .ld { color: #93a1a1 } /* Literal.Date */
+ .chroma .m { color: #09a598 } /* Literal.Number */
+ .chroma .s { color: #09a598 } /* Literal.String */
+ .chroma .na { color: #93a1a1 } /* Name.Attribute */
+ .chroma .nb { color: #B58900 } /* Name.Builtin */
+ .chroma .nc { color: #0090f5 } /* Name.Class */
+ .chroma .no { color: #ec662e } /* Name.Constant */
+ .chroma .nd { color: #0090f5 } /* Name.Decorator */
+ .chroma .ni { color: #ec662e } /* Name.Entity */
+ .chroma .ne { color: #ec662e } /* Name.Exception */
+ .chroma .nf { color: #0090f5 } /* Name.Function */
+ .chroma .nl { color: #93a1a1 } /* Name.Label */
+ .chroma .nn { color: #93a1a1 } /* Name.Namespace */
+ .chroma .nx { color: #93a1a1 } /* Name.Other */
+ .chroma .py { color: #93a1a1 } /* Name.Property */
+ .chroma .nt { color: #0090f5 } /* Name.Tag */
+ .chroma .nv { color: #0090f5 } /* Name.Variable */
+ .chroma .ow { color: #76a507 } /* Operator.Word */
+ .chroma .w { color: #93a1a1 } /* Text.Whitespace */
+ .chroma .mf { color: #09a598 } /* Literal.Number.Float */
+ .chroma .mh { color: #09a598 } /* Literal.Number.Hex */
+ .chroma .mi { color: #09a598 } /* Literal.Number.Integer */
+ .chroma .mo { color: #09a598 } /* Literal.Number.Oct */
+ .chroma .sb { color: #586e75 } /* Literal.String.Backtick */
+ .chroma .sc { color: #09a598 } /* Literal.String.Char */
+ .chroma .sd { color: #93a1a1 } /* Literal.String.Doc */
+ .chroma .s2 { color: #09a598 } /* Literal.String.Double */
+ .chroma .se { color: #ec662e } /* Literal.String.Escape */
+ .chroma .sh { color: #93a1a1 } /* Literal.String.Heredoc */
+ .chroma .si { color: #09a598 } /* Literal.String.Interpol */
+ .chroma .sx { color: #09a598 } /* Literal.String.Other */
+ .chroma .sr { color: #dc322f } /* Literal.String.Regex */
+ .chroma .s1 { color: #09a598 } /* Literal.String.Single */
+ .chroma .ss { color: #09a598 } /* Literal.String.Symbol */
+ .chroma .bp { color: #0090f5 } /* Name.Builtin.Pseudo */
+ .chroma .vc { color: #0090f5 } /* Name.Variable.Class */
+ .chroma .vg { color: #0090f5 } /* Name.Variable.Global */
+ .chroma .vi { color: #0090f5 } /* Name.Variable.Instance */
+ .chroma .il { color: #09a598 } /* Literal.Number.Integer.Long */
+}
diff --git a/src/old/resources/css/common.css b/src/old/resources/css/common.css
new file mode 100644
index 0000000..a6216e7
--- /dev/null
+++ b/src/old/resources/css/common.css
@@ -0,0 +1,283 @@
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+body {
+ font-family: Inter, sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ tab-size: 4;
+ -moz-tab-size: 4;
+}
+
+.wrapper {
+ max-width: 1400px;
+ margin-left: auto;
+ margin-right: auto;
+ padding-left: 40px;
+ padding-right: 40px;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.float-right {
+ float: right;
+}
+
+a {
+ color: #0694f1;
+ text-decoration: none;
+}
+
+a:hover {
+ color: #ff3f2c;
+}
+
+header {
+ display: flex;
+ justify-content: space-between;
+ padding: 25px 0;
+}
+
+#logo-container {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-end;
+}
+
+#logo {
+ height: 50px;
+}
+
+#zerossl-project {
+ font-size: 12px;
+ margin-top: -5px;
+}
+
+#zerossl-logo {
+ height: 1.5em;
+ vertical-align: middle;
+}
+
+header nav {
+ text-align: right;
+ line-height: 40px;
+}
+
+header nav > a {
+ display: inline-block;
+ padding-left: 12px;
+ padding-right: 12px;
+ text-decoration: none;
+ color: inherit;
+}
+
+header nav > a:hover {
+ color: #ff3f2c;
+}
+
+header nav > a.current {
+ font-weight: bold;
+}
+
+/* Algolia DocSearch */
+#search {
+ display: inline-block;
+ vertical-align: middle;
+}
+.DocSearch-Container {
+ color: initial;
+}
+.DocSearch-Footer {
+ margin-top: 0;
+}
+/* End Algolia DocSearch */
+
+header nav .new {
+ background-color: #ffe300;
+ font-size: 75%;
+ vertical-align: top;
+ padding: 4px 8px;
+ border-radius: 1em;
+}
+
+header nav .button {
+ margin: 0 0 0 10px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+
+button,
+.button {
+ border-radius: 2em;
+ padding: 10px 20px;
+ margin: 15px 0;
+ height: auto;
+ transition: all .2s;
+ text-decoration: none;
+ display: inline-block;
+ border: 0;
+ cursor: pointer;
+}
+
+button:hover,
+.button:hover {
+ transform: scale(1.05);
+}
+
+button:active,
+.button:active {
+ transform: translateY(2px);
+}
+
+button.red,
+.button.red {
+ background-color: #d9552b;
+ color: white;
+}
+
+button.red:hover,
+.button.red:hover {
+ background-color: #fd511a;
+}
+
+button.blue,
+.button.blue {
+ background-color: #0082d0;
+ color: white;
+}
+
+button.blue:hover,
+.button.blue:hover {
+ background-color: #00aaff;
+}
+
+button.gray,
+.button.gray {
+ background-color: #4c6a79;
+ color: white;
+}
+
+button.gray:hover,
+.button.gray:hover {
+ background-color: #4f8098;
+}
+
+button.big,
+.button.big {
+ font-size: 125%;
+ text-transform: uppercase;
+ font-weight: bold;
+ padding: 20px 50px;
+ margin-right: 20px;
+}
+
+button.disabled,
+.button.disabled,
+button:disabled,
+.button:disabled {
+ background-color: #aaa !important;
+ color: white !important;
+ transform: none !important;
+ cursor: not-allowed;
+}
+
+
+p button,
+p .button {
+ font-size: 18px;
+ padding: 12px 30px;
+}
+
+
+article a:hover {
+ text-decoration: underline;
+}
+
+pre,
+code,
+kbd {
+ font-family: 'PT Mono', 'Source Code Pro', monospace;
+ padding: 3px 6px;
+ font-size: 95%;
+ line-height: 1.5em;
+}
+
+kbd {
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ font-size: 80%;
+ font-weight: bold;
+}
+
+
+footer {
+ display: flex;
+ justify-content: space-between;
+ margin-top: 100px;
+ padding-bottom: 100px;
+ line-height: 125%;
+}
+
+footer > div {
+ width: 50%;
+}
+
+#footer-logo {
+ float: left;
+ max-width: 150px;
+ margin-right: 35px;
+ vertical-align: middle;
+ margin-top: -4px;
+}
+
+.copyright {
+ text-align: right;
+ font-size: 14px;
+ color: #999;
+}
+
+@media (max-width: 900px) {
+ header {
+ flex-direction: column;
+ gap: 1em;
+ }
+
+ #logo-container {
+ align-items: center;
+ }
+
+ header nav {
+ text-align: center;
+ }
+
+ footer {
+ flex-direction: column;
+ margin-top: 0;
+ padding: 20px 0;
+ }
+
+ footer > div {
+ width: initial;
+ text-align: center;
+ margin: 10px 0;
+ }
+
+ #footer-logo {
+ float: none;
+ display: block;
+ margin: 0 auto 25px;
+ }
+
+ .copyright {
+ text-align: center;
+ }
+}
diff --git a/src/resources/css/docs-json.css b/src/old/resources/css/docs-json.css
similarity index 100%
rename from src/resources/css/docs-json.css
rename to src/old/resources/css/docs-json.css
diff --git a/src/old/resources/css/docs.css b/src/old/resources/css/docs.css
new file mode 100644
index 0000000..0b25e3a
--- /dev/null
+++ b/src/old/resources/css/docs.css
@@ -0,0 +1,1106 @@
+body {
+ font-family: Maven Pro, sans-serif;
+ background: #f1f4f5;
+}
+
+header {
+ padding: 20px 40px;
+}
+
+#logo-container {
+ align-items: flex-start;
+}
+
+#logo-docs-container {
+ display: flex;
+ align-items: center;
+}
+
+#logo {
+ height: 35px;
+}
+
+#logo-docs {
+ font-family: Montserrat, sans-serif;
+ font-weight: bold;
+ text-transform: uppercase;
+ color: #0e495e;
+ margin-left: 10px;
+ font-size: 12px;
+}
+
+#zerossl-project {
+ padding-left: 2em;
+}
+
+#search {
+ margin-top: 0;
+}
+
+header nav {
+ font-size: 16px;
+ line-height: 2em;
+}
+
+header nav .button {
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+
+.breadcrumbs {
+ padding: 10px 20px !important;
+ margin-bottom: 0 !important;
+ color: #2861aa;
+ font-size: 16px;
+ font-weight: bold;
+ line-height: 1.75em;
+}
+
+#top-breadcrumb {
+ font-weight: bold;
+}
+
+#top-breadcrumb:not(:hover) {
+ color: #2861aa;
+}
+
+.breadcrumbs a {
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.breadcrumb-siblings-title {
+ padding: 10px;
+ font-weight: bold;
+}
+
+.breadcrumb-siblings a {
+ display: block;
+ padding: 0 10px;
+ text-decoration: none;
+}
+
+.breadcrumb-siblings a+a {
+ padding-top: 10px;
+}
+
+.breadcrumb-siblings a:last-child {
+ padding-bottom: 10px;
+}
+
+main {
+ display: flex;
+ justify-content: space-between;
+}
+
+main > .sidebar {
+ width: 18%;
+ flex-shrink: 0;
+ flex-grow: 1;
+ padding: 20px;
+ max-width: 400px;
+}
+
+main > .sidebar:last-child {
+ flex-shrink: 1;
+}
+
+main > nav.sidebar {
+ position: relative;
+ font-size: 16px;
+}
+
+main nav li img,
+article li img,
+img.external-link {
+ max-height: .9em;
+}
+
+main nav ul {
+ list-style-type: none;
+}
+
+main nav li {
+ position: relative;
+}
+
+main nav li a {
+ display: block;
+ text-decoration: none;
+ color: inherit;
+ border-radius: 1.5em;
+ padding: 6px 18px 6px 28px;
+ color: #546c75;
+}
+
+
+
+main nav li a:hover {
+ color: #01324b;
+}
+
+main nav li a:before {
+ content: '\203A';
+ font-weight: bold;
+ font-size: 20px;
+ line-height: 1rem;
+ position: absolute;
+ opacity: 0;
+ left: 0;
+ transition: left .15s, opacity .15s;
+}
+
+main nav li a:hover:before {
+ opacity: 1;
+ left: .75em;
+}
+
+main nav li li a:hover:before {
+ left: 1.25em;
+}
+
+main nav li a.current {
+ background-color: #e0e8f0;
+}
+
+main nav li.heading {
+ font-weight: bold;
+ text-transform: uppercase;
+ font-size: 90%;
+ letter-spacing: 1px;
+ padding: 10px 20px 10px 2em;
+}
+
+main nav li.heading:not(:first-child) {
+ margin-top: 20px;
+}
+
+main nav li li a {
+ padding-top: 6px;
+ padding-bottom: 4px;
+ padding-left: 3em;
+ font-size: 90%;
+}
+
+.paper {
+ width: 100%;
+
+ background: white;
+ border-radius: 4px;
+ box-shadow: 1px 2px 4px 1px rgba(0, 0, 0, .15);
+}
+
+#paper1,
+#paper2 {
+ background: #f8fafb;
+ max-height: 1500px;
+}
+
+#paper1 {
+ margin-top: -20px;
+ margin-left: 20px;
+ transform: rotate(3deg);
+ z-index: -1;
+}
+
+#paper2 {
+ margin-top: 30px;
+ margin-left: calc(-100% - 20px);
+ transform: rotate(-5deg);
+ z-index: -1;
+}
+
+.paper3 {
+ margin-top: 20px;
+ margin-left: -100%;
+}
+
+.article-container {
+ display: flex;
+ align-content: flex-start;
+ flex-grow: 1;
+ min-width: 0;
+ margin: 20px;
+ margin-bottom: 0;
+ width: 100%;
+ max-width: 1100px;
+}
+
+.pad {
+ padding-top: 8%;
+}
+
+article {
+ padding-top: 8%;
+ padding-bottom: 8%;
+ font-size: 20px;
+ word-wrap: break-word;
+}
+
+/*
+while we want most elements that are rendered
+server-side from markdown to have a constrained
+width, a few elements should be allowed to
+extend to the borders of the page
+*/
+article > :not(.fullwidth),
+article > .fullwidth > *,
+.pad {
+ padding-left: 8%;
+ padding-right: 8%;
+}
+article > :not(h1),
+dd,
+article p,
+article ol,
+article ul,
+article pre,
+article table {
+ margin-bottom: 1.5rem;
+}
+article > .fullwidth { margin-bottom: 1.5rem; }
+article > .fullwidth > * { margin-bottom: 0; }
+
+article > pre.chroma > code {
+ background: none;
+ padding: 0;
+}
+article > pre.chroma {
+ padding-top: 2em;
+ padding-bottom: 2em;
+}
+
+article ul,
+article ol,
+#hovercard ul,
+#hovercard ol {
+ margin-left: 2.5em;
+}
+
+article ul ul,
+article ol ol,
+article ol ul,
+article ul ol {
+ margin-bottom: 0;
+}
+
+article p,
+article li {
+ line-height: 1.5em;
+}
+
+article li p,
+article li ul,
+article li ol {
+ margin-bottom: .5em;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ /* to ensure that the anchor-link icons stay inside the heading */
+ position: relative;
+}
+
+h1,
+h2 {
+ text-align: center;
+}
+
+h1 {
+ font-size: 72px;
+ color: #0e3e5b;
+ letter-spacing: -2px;
+ margin-bottom: 50px;
+}
+
+h2 {
+ font-size: 46px;
+ padding-bottom: 15px;
+ border-bottom: 4px solid #72abe8;
+ margin: 100px 0 40px !important;
+}
+
+h3 {
+ font-size: 40px;
+ margin: 50px 0 20px;
+}
+
+h4 {
+ font-size: 32px;
+ margin: 25px 0 15px;
+}
+
+h5 {
+ font-size: 26px;
+ margin: 2em 0 1em;
+}
+
+h6 {
+ font-size: 20px;
+ margin: 2em 0 1em;
+}
+
+.anchor-link {
+ opacity: 0;
+ font-size: .6em;
+ border-radius: 10px;
+ padding: .3em .5em;
+ margin-left: .25em;
+ position: absolute;
+ top: 5px;
+}
+
+*:hover > .anchor-link,
+.anchor-link:focus {
+ opacity: 1;
+ text-decoration: none;
+}
+
+.anchor-link:hover {
+ background-color: rgba(0, 0, 0, .075);
+}
+
+code,
+kbd {
+ background-color: #e9f1fb;
+ border-radius: 5px;
+}
+
+code.cmd {
+ background-color: #333;
+ color: #eaeaea;
+}
+
+pre > code,
+pre.chroma,
+.group {
+ display: block;
+ white-space: pre;
+}
+
+pre > code,
+article > pre {
+ padding: 1em;
+ overflow: auto;
+}
+
+pre > code.cmd {
+ border-radius: 5px;
+}
+
+code.cmd.bash,
+code.cmd .bash,
+code.cmd.bash-continuation,
+code.cmd .bash-continuation {
+ font-weight: bold;
+}
+
+code.cmd.bash::before,
+code.cmd .bash::before {
+ content: '$';
+ margin-right: .5rem;
+}
+
+code.cmd.bash-continuation::before,
+code.cmd .bash-continuation::before {
+ content: '>';
+ margin-right: .5rem;
+}
+
+dt:hover .inline-link {
+ visibility: visible;
+}
+
+dd {
+ margin-left: 1em;
+}
+
+#field-list-header {
+ display: none;
+}
+
+.field-name {
+ display: block;
+ font-family: 'Source Code Pro', monospace;
+ margin-top: 2em;
+ font-weight: bold;
+ margin-bottom: .5em;
+}
+
+.inline-link {
+ text-decoration: none;
+ position: absolute;
+ margin-left: -1.5em;
+ /* margin-top: -.1em; */
+ padding-right: .3em;
+ padding-left: .2em;
+ visibility: hidden;
+}
+
+.inline-link:hover {
+ text-decoration: none;
+}
+
+hr {
+ border: none;
+ border-top: 8px solid #34669b;
+ margin: 4em 0;
+}
+
+article img {
+ max-width: 100%;
+}
+
+iframe {
+ margin: 1em 0 2em;
+}
+
+.nonstandard-notice {
+ font-size: 14px;
+ max-width: 500px;
+ margin: 25px auto;
+ border: 1px solid #ecd200;
+ background: #fffddf;
+ border-radius: 5px;
+ padding: 10px;
+ color: #886c00;
+ line-height: 1.4em;
+ display: none;
+}
+
+.nonstandard {
+ color: rgb(214, 145, 16);
+}
+
+.standard-flag,
+.nonstandard-flag {
+ cursor: help;
+ font-size: 8px;
+ line-height: 1em;
+ padding: 4px 8px;
+ text-transform: uppercase;
+ font-weight: bold;
+ color: white;
+ border-radius: 4px;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+.standard-flag {
+ background-color: rgb(34, 163, 23);
+}
+
+.nonstandard-flag {
+ background-color: rgb(238, 167, 34);
+}
+
+.module-repo-differentiator {
+ font-size: 11px;
+ font-weight: bold;
+ color: #555;
+ line-height: 1em;
+}
+
+
+
+
+
+
+
+.json {
+ line-height: 1.5em;
+}
+.json .qu { color: #5c91bf; }
+.json .key { color: #1c83dc; font-weight: bold; }
+.json .str { color: #2f8598; }
+.json .num { color: #038a3f; }
+.json .bool { color: #9b5e14; }
+.json .key a:not([href]) { color: #222; }
+article .json a {
+ text-decoration: none;
+ font-weight: bold;
+}
+.json .has-popup { border-bottom: 1px dashed #222; }
+.json a[href].has-popup { border-bottom-color: #1c82dc; }
+.json .has-popup.module { border-bottom: none; }
+
+
+#hovercard {
+ max-width: 450px;
+ border-radius: 10px;
+ filter: drop-shadow(0 5px 5px rgba(0, 0, 0, .25));
+ position: absolute;
+ font-size: 16px;
+ transition: transform .25s ease-in-out, opacity .25s ease-in-out;
+ /* TODO: This would be nice, but it breaks the arrow-box... */
+ /* max-height: 50%;
+ overflow-y: auto; */
+}
+
+#hovercard:not(.popup) {
+ opacity: 0;
+ display: none;
+ transform: translateY(0);
+}
+
+.popup {
+ display: block;
+ opacity: 1;
+ transform: translateY(-10px);
+}
+
+.arrow-box {
+ position: relative;
+ background: white;
+}
+
+.arrow-box:after {
+ bottom: 100%;
+ left: 50%;
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ border-color: rgba(255, 255, 255, 0);
+ border-bottom-color: white;
+ border-width: 10px;
+ margin-left: -10px;
+}
+
+#hovercard p {
+ padding: 1em;
+ line-height: 1.4em;
+}
+
+#hovercard p+p {
+ padding-top: 0;
+}
+
+#hovercard li {
+ margin: .25em;
+}
+
+#hovercard pre > code {
+ border-radius: 0;
+}
+
+#hovercard li {
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+#hovercard .nonstandard-flag {
+ float: right;
+}
+
+#hovercard .module-link {
+ display: block;
+ text-decoration: none;
+ font-size: 18px;
+ line-height: 1em;
+ font-weight: bold;
+ padding: .5em 1em;
+}
+
+#hovercard .module-link:hover {
+ background: #f5f5f5;
+}
+
+#hovercard .module-link:last-child {
+ border-bottom-left-radius: 10px;
+ border-bottom-right-radius: 10px;
+}
+
+#hovercard .module-link-description {
+ font-size: 14px;
+ color: #555;
+ margin-left: .5em;
+ font-weight: normal;
+}
+
+#hovercard-namespace-box,
+#hovercard-inline-link {
+ border: 0px solid #f0f6f7;
+}
+
+#hovercard-namespace-box {
+ border-bottom-width: 1px;
+}
+
+#hovercard-inline-link {
+ border-top-width: 1px;
+}
+
+#hovercard-inline-link a {
+ display: block;
+ padding: 8px 10px;
+ text-decoration: none;
+ font-size: 85%;
+ font-weight: bold;
+ text-align: center;
+}
+
+#hovercard-namespace {
+ font-weight: bold;
+}
+
+.explain {
+ font-style: italic;
+ color: #777;
+}
+
+article aside {
+ position: relative;
+ font-size: 16px;
+ margin: 2em auto 3em !important;
+ max-width: 800px;
+}
+
+article aside.tip,
+article aside.advice {
+ padding-left: calc(8% + 50px) !important;
+}
+
+article aside.tip::before,
+article aside.advice::before {
+ font-size: 45px;
+ position: absolute;
+ top: -4px;
+ left: 8%;
+}
+
+article aside.tip {
+ color: #706b95;
+}
+article aside.advice {
+ color: #826848;
+}
+
+article aside.tip:nth-child(even)::before {
+ content: '💁♀️';
+}
+article aside.tip:nth-child(odd)::before {
+ content: '💁♂️';
+}
+
+article aside.advice::before {
+ content: '🤦';
+}
+
+article aside.complete {
+ color: #6b6b6b;
+ border: 2px dotted #88db88;
+ text-align: center;
+ max-width: 500px;
+ padding: 15px 25px !important;
+}
+
+article aside.complete::before {
+ content: '✅ complete';
+ color: #39c849;
+ text-transform: uppercase;
+ font-size: 14px;
+ font-weight: bold;
+ letter-spacing: 1px;
+ margin-right: 2em;
+ margin-bottom: .5em;
+}
+
+table {
+ table-layout: fixed;
+ border-collapse: collapse;
+ font-size: 16px;
+}
+
+article > table {
+ margin: 25px auto;
+}
+
+th, td {
+ border-bottom: 1px solid #ddd;
+ padding: 10px;
+ line-height: 1.4em;
+ vertical-align: top;
+ word-wrap: break-word;
+}
+
+th {
+ text-align: left;
+ background: #eee;
+}
+
+td code {
+ font-size: 14px;
+ word-wrap: break-word;
+}
+
+blockquote {
+ background-color: #f0f5f1;
+ padding-top: 2em;
+ padding-bottom: 2em;
+}
+
+
+
+
+
+#module-docs-container,
+#module-list-container,
+#module-template {
+ display: none;
+}
+
+#module-list-container {
+ overflow-x: auto;
+}
+
+#module-list {
+ margin-top: 50px;
+}
+
+#module-list td:first-child {
+ word-wrap: break-word;
+ max-width: 400px;
+}
+
+#module-list .module-link {
+ font-weight: bold;
+ font-size: 20px;
+}
+
+
+#module-multiple-repos {
+ display: none;
+ margin: 25px;
+}
+
+.module-repo-selector {
+ font-size: 26px;
+ padding: 25px;
+ font-weight: bold;
+ border-bottom: 1px solid #888;
+ cursor: pointer;
+}
+
+.module-repo-selector:hover {
+ color: #009cda;
+ background: rgb(246, 250, 252);
+}
+
+.module-repo-selector-arrow {
+ margin: 10px;
+}
+
+
+
+
+.tabs .tab-buttons {
+ display: flex;
+ font-size: 0;
+ border-bottom: 2px solid #ccc;
+ border-radius: 0.5em;
+ margin: 0 16px 0 16px;
+}
+.tabs .tab-buttons button {
+ font-family: inherit;
+ border-radius: 0.5em 0.5em 0 0;
+ background-color: transparent;
+ border: 2px solid;
+ border-color: transparent;
+ font-size: 16px;
+ margin-bottom: 0;
+ margin-right: 8px;
+ margin-bottom: -2px;
+ transition: unset;
+ transform: unset;
+}
+.tabs .tab-buttons button:hover {
+ border-color: #ddd;
+ border-bottom-color: #ccc;
+}
+.tabs .tab-buttons button.active {
+ border-color: #ccc;
+ border-bottom-color: white;
+}
+
+.tabs .tab {
+ border-style: solid;
+ border-color: #ccc;
+ border-width: 0;
+ padding: 1.5rem 16px 0 20px;
+ margin-top: -2px;
+}
+.tabs .tab pre {
+ padding: 0;
+}
+.tabs .tab.bordered {
+ border-width: 2px;
+ border-radius: 8px;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+@media (max-width: 1400px) {
+ table {
+ font-size: 14px;
+ }
+
+ h1 {
+ font-size: 60px;
+ }
+
+ h2 {
+ font-size: 38px;
+ margin-top: 65px;
+ }
+
+ h3 {
+ font-size: 28px;
+ margin-top: 40px;
+ }
+}
+
+@media (max-width: 1100px) {
+ header {
+ padding-bottom: 0;
+ }
+
+ main > .sidebar {
+ min-width: 200px;
+ padding: 20px 10px 0 0;
+ }
+
+ main > .sidebar:last-child {
+ display: none;
+ }
+
+ #paper1,
+ #paper2 {
+ display: none;
+ }
+ .paper3 {
+ margin-top: 0;
+ margin-left: 0;
+ }
+
+ article {
+ font-size: 18px;
+ padding-top: 40px;
+ padding-bottom: 40px;
+ }
+
+ article > :not(.fullwidth),
+ article > .fullwidth > * {
+ padding-left: 40px;
+ padding-right: 40px;
+ }
+ article > :not(h1) {
+ margin-bottom: 1.5rem;
+ }
+
+ article > pre.chroma {
+ padding-top: 1em;
+ padding-bottom: 1em;
+ }
+
+ h1 {
+ font-size: 45px;
+ }
+
+ h2 {
+ font-size: 32px;
+ }
+}
+
+@media (max-width: 900px) {
+ #logo-container {
+ align-items: center;
+ }
+
+ #logo {
+ height: 55px;
+ }
+
+ #logo-docs {
+ display: none;
+ }
+
+ main {
+ flex-direction: column-reverse;
+ align-items: center;
+ }
+
+ main > .sidebar {
+ width: 100%;
+ border-width: 0;
+ border-top-width: 2px;
+ }
+
+ .article-container {
+ max-width: 100%; /* TODO: why is this necessary?? without it, article overflows super wide on narrow screen */
+ margin: 20px 0;
+ }
+
+ .paper {
+ border-radius: 0;
+ box-shadow: none;
+ }
+}
+
+
+
+@media (prefers-color-scheme: dark) {
+ body {
+ background-color: #060e17;
+ color: #bdd6f7;
+ }
+
+ header nav .new {
+ color: black;
+ }
+
+ /* Algolia DocSearch */
+ #search {
+ --docsearch-searchbox-background: rgb(28, 52, 79);
+ --docsearch-searchbox-focus-background: rgb(28, 52, 79);
+ --docsearch-text-color: #bdd6f7;
+ --docsearch-muted-color: #96a9c4;
+ --docsearch-key-gradient: linear-gradient(-26.5deg, #060e17 0%, rgb(47, 62, 72) 100%);
+ --docsearch-key-shadow: inset 0 -2px 0 0 #4c4c56, inset 0 0 1px 1px rgb(70, 70, 70), 0 1px 2px 1px rgba(77, 79, 91, 0.4);
+ }
+ /* End Algolia DocSearch */
+
+ #paper1,
+ #paper2 {
+ background-color: #030a11;
+ }
+ .paper3 {
+ background-color: #051628;
+ }
+
+ #logo {
+ filter: invert(1) hue-rotate(180deg);
+ }
+ #zerossl-logo {
+ filter: invert(1) hue-rotate(180deg);
+ }
+ #footer-logo {
+ filter: invert(1) hue-rotate(180deg);
+ }
+
+ #logo-docs {
+ color: #5aa3dc;
+ }
+
+ .breadcrumbs {
+ color: #5aa3dc;
+ }
+
+ main nav li a {
+ color: #668d9b;
+ }
+
+ main nav ul li a:hover {
+ color: #5aa3dc;
+ }
+
+ main nav ul li a.current {
+ background-color: #061b35;
+ }
+
+ .breadcrumbs {
+ border-color: #061b35;
+ }
+
+ h1 {
+ color: #5aa3dc;
+ }
+
+ code,
+ kbd {
+ background-color: #122844;
+ }
+
+ code.cmd {
+ background-color: #000;
+ color: #ccc;
+ }
+
+ .json .key a:not([href]) {
+ color: #bdd6f7
+ }
+
+ #hovercard,
+ .arrow-box {
+ background-color: #0a192b;
+ }
+
+ .arrow-box:after {
+ border-bottom-color: #0a192b;
+ }
+
+ #hovercard .module-link:hover {
+ background: #0f2c50;
+ }
+
+ #hovercard .module-link-description {
+ color: rgb(167, 167, 167);
+ }
+
+ #hovercard-namespace-box,
+ #hovercard-inline-link {
+ border-color: #0a2b53;
+ }
+
+ article aside.tip {
+ color: #8c81e4;
+ }
+
+ th {
+ background-color: #142638;
+ }
+
+ th,
+ td {
+ border-bottom-color: #233444;
+ }
+
+ blockquote {
+ background-color: #101010;
+ }
+
+ .tabs .tab-buttons {
+ border-color: #33659a;
+ }
+ .tabs .tab-buttons button {
+ color: #bdd6f7;
+ }
+ .tabs .tab-buttons button:hover {
+ border-color: #284c71;
+ border-bottom-color: #33659a;
+ }
+ .tabs .tab-buttons button.active {
+ border-color: #33659a;
+ border-bottom-color: #051628;
+ }
+ .tabs .tab {
+ border-color: #33659a;
+ }
+}
diff --git a/src/resources/css/download.css b/src/old/resources/css/download.css
similarity index 100%
rename from src/resources/css/download.css
rename to src/old/resources/css/download.css
diff --git a/src/old/resources/css/home.css b/src/old/resources/css/home.css
new file mode 100644
index 0000000..c66165a
--- /dev/null
+++ b/src/old/resources/css/home.css
@@ -0,0 +1,334 @@
+body {
+ font-family: 'Inter', sans-serif;
+}
+
+.hero {
+ background-image: url('/resources/images/bg-teal.jpg');
+ background-repeat: no-repeat;
+ background-size: cover;
+ padding-bottom: 100px;
+ background-position: center;
+}
+
+h1 {
+ text-transform: uppercase;
+ font-size: 70px;
+ font-family: Montserrat, sans-serif;
+ text-align: center;
+ margin: 70px 0 20px;
+}
+
+h2 {
+ font-size: 28px;
+ font-weight: normal;
+ text-align: center;
+ max-width: 60rem;
+ margin: 0 auto 50px;
+ line-height: 1.5em;
+}
+
+h3 {
+ font-family: Montserrat, sans-serif;
+ font-weight: 400;
+ font-size: 55px;
+}
+
+p {
+ font-size: 20px;
+ max-width: 600px;
+ margin-top: 20px;
+ line-height: 1.5em;
+}
+
+.download-container {
+ text-align: center;
+ margin-top: 50px;
+}
+
+.download-container .button.big {
+ margin-bottom: 15px;
+}
+
+section {
+ padding: 100px 0;
+}
+
+section.alternate:nth-child(even) {
+ background-color: #f5f8f9;
+}
+
+section.alternate:nth-child(odd) .side-by-side {
+ flex-direction: row-reverse;
+}
+
+.side-by-side {
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.side-by-side > * {
+ width: 48%;
+}
+
+.side-by-side img {
+ max-height: 400px;
+}
+
+.code-caption {
+ font-size: 24px;
+ font-weight: bold;
+ margin: 75px auto 20px;
+}
+
+code {
+ font-family: 'PT Mono', monospace;
+}
+
+code.block {
+ display: block;
+ background: #2f2f2f;
+ color: #eee;
+ font-size: 20px;
+ padding-top: 30px;
+ padding-bottom: 30px;
+ line-height: 1.25em;
+ white-space: pre-wrap;
+}
+
+.actions {
+ padding-top: 100px;
+}
+
+code.caddyfile {
+ background-color: #dbebf3;
+ color: black;
+}
+
+.cf-key {
+ color: #d22500;
+ font-weight: bold;
+}
+
+.cf-comment {
+ color: #7291a0;
+}
+
+.cf-dir {
+ color: #006c96;
+ font-weight: bold;
+}
+
+.cf-arg {
+ color: #008000;
+}
+
+.cf-subdir {
+ color: #835234;
+}
+
+code.rest {
+ background-color: #f0f5f4; /*#073d59;*/
+ color: #253a28;
+}
+
+.footnote {
+ font-size: 18px;
+ text-align: center;
+}
+
+
+@media (max-width: 1100px) {
+ .side-by-side,
+ section.alternate:nth-child(odd) .side-by-side {
+ flex-direction: column;
+ }
+ section.alternate:nth-child(odd) .side-by-side > img {
+ flex-direction: column-reverse;
+ margin-bottom: 50px;
+ }
+
+ .side-by-side-content {
+ margin-bottom: 50px;
+ }
+
+ .side-by-side > * {
+ width: initial;
+ }
+
+ p {
+ max-width: 900px;
+ }
+}
+
+@media (max-width: 900px) {
+ h1 {
+ font-size: 50px;
+ word-wrap: break-word;
+ }
+
+ h2 {
+ font-size: 24px;
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* TODO: */
+/* TAKEN FROM features.css */
+
+.features-start {
+ background: linear-gradient(0deg, #13a8f5 0%, #18b125 100%);
+ color: white;
+ padding: 35px 0;
+}
+
+
+.main-features {
+ display: flex;
+ justify-content: space-between;
+ flex-wrap: wrap;
+ padding-top: 2rem;
+}
+
+.main-feature {
+ text-align: center;
+ padding: 0 2rem;
+ margin: 3rem 0;
+ width: 25%;
+}
+
+.main-feature img {
+ height: 130px;
+ margin-bottom: 15px;
+}
+
+.main-feature .title {
+ font-size: 24px;
+ font-weight: bold;
+ margin-bottom: 15px;
+}
+
+.main-feature p {
+ text-align: left;
+ font-size: 16px;
+ margin: 0;
+}
+
+.feature-points {
+ display: flex;
+ justify-content: space-around;
+ flex-wrap: wrap;
+ font-size: 28px;
+}
+
+.feature-point {
+ width: 33.333%;
+ min-width: 300px;
+ padding: 1rem 3rem;
+}
+
+#features-title {
+ width: 80%;
+ max-width: 700px;
+ display: block;
+ margin: 50px auto 0;
+ position: relative;
+ top: 40px;
+}
+
+.features-area h3 {
+ border-bottom: 3px solid #2BABED;
+}
+
+.features-area h4 {
+ text-align: center;
+ padding-top: 80px;
+ padding-bottom: 40px;
+ font-family: Montserrat, sans-serif;
+ font-size: 40px;
+}
+
+.features-area h5 {
+ font-size: 18px;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+}
+
+.section-heading {
+ font-style: italic;
+ font-size: 20px;
+ line-height: 2rem;
+ color: #000;
+ max-width: 550px;
+ text-align: center;
+ margin: 2rem auto 0;
+}
+
+.features {
+ display: flex;
+ flex-wrap: wrap;
+}
+
+.feature {
+ width: 33.333%;
+ padding: 25px;
+}
+
+.feature p {
+ margin-top: 5px;
+ color: #333;
+ font-size: 18px;
+}
+
+@media (max-width: 900px) {
+ .main-feature {
+ width: 50%;
+ margin: 3rem 0;
+ padding: 0 1rem;
+ }
+
+ .feature {
+ width: 50%;
+ }
+}
+
+@media (max-width: 700px) {
+ .pitch {
+ width: 100%;
+ border-right: none;
+ }
+
+ .feature-highlight {
+ padding: 1rem;
+ }
+}
+
+@media (max-width: 500px) {
+ .main-feature {
+ width: 100%;
+ }
+
+ .feature {
+ width: 100%;
+ }
+}
\ No newline at end of file
diff --git a/src/resources/images/apilayer-logo.svg b/src/old/resources/images/apilayer-logo.svg
similarity index 100%
rename from src/resources/images/apilayer-logo.svg
rename to src/old/resources/images/apilayer-logo.svg
diff --git a/src/resources/images/ardan-labs.svg b/src/old/resources/images/ardan-labs.svg
similarity index 100%
rename from src/resources/images/ardan-labs.svg
rename to src/old/resources/images/ardan-labs.svg
diff --git a/src/resources/images/bg-teal.jpg b/src/old/resources/images/bg-teal.jpg
similarity index 100%
rename from src/resources/images/bg-teal.jpg
rename to src/old/resources/images/bg-teal.jpg
diff --git a/src/resources/images/box.svg b/src/old/resources/images/box.svg
similarity index 100%
rename from src/resources/images/box.svg
rename to src/old/resources/images/box.svg
diff --git a/src/resources/images/caddy-circle-lock.svg b/src/old/resources/images/caddy-circle-lock.svg
similarity index 100%
rename from src/resources/images/caddy-circle-lock.svg
rename to src/old/resources/images/caddy-circle-lock.svg
diff --git a/src/resources/images/caddy-lock.png b/src/old/resources/images/caddy-lock.png
similarity index 100%
rename from src/resources/images/caddy-lock.png
rename to src/old/resources/images/caddy-lock.png
diff --git a/src/resources/images/caddy-logo.svg b/src/old/resources/images/caddy-logo.svg
similarity index 100%
rename from src/resources/images/caddy-logo.svg
rename to src/old/resources/images/caddy-logo.svg
diff --git a/src/resources/images/caddy-open-graph.jpg b/src/old/resources/images/caddy-open-graph.jpg
similarity index 100%
rename from src/resources/images/caddy-open-graph.jpg
rename to src/old/resources/images/caddy-open-graph.jpg
diff --git a/src/resources/images/caddy-wordmark.svg b/src/old/resources/images/caddy-wordmark.svg
similarity index 100%
rename from src/resources/images/caddy-wordmark.svg
rename to src/old/resources/images/caddy-wordmark.svg
diff --git a/src/resources/images/caddyfile-visual.png b/src/old/resources/images/caddyfile-visual.png
similarity index 100%
rename from src/resources/images/caddyfile-visual.png
rename to src/old/resources/images/caddyfile-visual.png
diff --git a/src/resources/images/external-link.svg b/src/old/resources/images/external-link.svg
similarity index 100%
rename from src/resources/images/external-link.svg
rename to src/old/resources/images/external-link.svg
diff --git a/src/old/resources/images/favicon.png b/src/old/resources/images/favicon.png
new file mode 100644
index 0000000..6e87127
Binary files /dev/null and b/src/old/resources/images/favicon.png differ
diff --git a/src/resources/images/features.svg b/src/old/resources/images/features.svg
similarity index 100%
rename from src/resources/images/features.svg
rename to src/old/resources/images/features.svg
diff --git a/src/resources/images/moving-parts.svg b/src/old/resources/images/moving-parts.svg
similarity index 100%
rename from src/resources/images/moving-parts.svg
rename to src/old/resources/images/moving-parts.svg
diff --git a/src/resources/images/padlock.svg b/src/old/resources/images/padlock.svg
similarity index 100%
rename from src/resources/images/padlock.svg
rename to src/old/resources/images/padlock.svg
diff --git a/src/resources/images/plug.svg b/src/old/resources/images/plug.svg
similarity index 100%
rename from src/resources/images/plug.svg
rename to src/old/resources/images/plug.svg
diff --git a/src/resources/images/profile-diff.png b/src/old/resources/images/profile-diff.png
similarity index 100%
rename from src/resources/images/profile-diff.png
rename to src/old/resources/images/profile-diff.png
diff --git a/src/resources/images/profile.png b/src/old/resources/images/profile.png
similarity index 100%
rename from src/resources/images/profile.png
rename to src/old/resources/images/profile.png
diff --git a/src/resources/images/proxy-file-server.svg b/src/old/resources/images/proxy-file-server.svg
similarity index 100%
rename from src/resources/images/proxy-file-server.svg
rename to src/old/resources/images/proxy-file-server.svg
diff --git a/src/resources/images/smallstep.png b/src/old/resources/images/smallstep.png
similarity index 100%
rename from src/resources/images/smallstep.png
rename to src/old/resources/images/smallstep.png
diff --git a/src/resources/images/stack.svg b/src/old/resources/images/stack.svg
similarity index 100%
rename from src/resources/images/stack.svg
rename to src/old/resources/images/stack.svg
diff --git a/src/resources/images/v2-landing.png b/src/old/resources/images/v2-landing.png
similarity index 100%
rename from src/resources/images/v2-landing.png
rename to src/old/resources/images/v2-landing.png
diff --git a/src/resources/images/zerossl-logo.svg b/src/old/resources/images/zerossl-logo.svg
similarity index 100%
rename from src/resources/images/zerossl-logo.svg
rename to src/old/resources/images/zerossl-logo.svg
diff --git a/src/resources/js/account/common.js b/src/old/resources/js/account/common.js
similarity index 100%
rename from src/resources/js/account/common.js
rename to src/old/resources/js/account/common.js
diff --git a/src/resources/js/account/create.js b/src/old/resources/js/account/create.js
similarity index 100%
rename from src/resources/js/account/create.js
rename to src/old/resources/js/account/create.js
diff --git a/src/resources/js/account/dashboard.js b/src/old/resources/js/account/dashboard.js
similarity index 100%
rename from src/resources/js/account/dashboard.js
rename to src/old/resources/js/account/dashboard.js
diff --git a/src/resources/js/account/login.js b/src/old/resources/js/account/login.js
similarity index 100%
rename from src/resources/js/account/login.js
rename to src/old/resources/js/account/login.js
diff --git a/src/resources/js/account/logout.js b/src/old/resources/js/account/logout.js
similarity index 100%
rename from src/resources/js/account/logout.js
rename to src/old/resources/js/account/logout.js
diff --git a/src/resources/js/account/register-package.js b/src/old/resources/js/account/register-package.js
similarity index 100%
rename from src/resources/js/account/register-package.js
rename to src/old/resources/js/account/register-package.js
diff --git a/src/resources/js/account/reset-password.js b/src/old/resources/js/account/reset-password.js
similarity index 100%
rename from src/resources/js/account/reset-password.js
rename to src/old/resources/js/account/reset-password.js
diff --git a/src/resources/js/account/verify.js b/src/old/resources/js/account/verify.js
similarity index 100%
rename from src/resources/js/account/verify.js
rename to src/old/resources/js/account/verify.js
diff --git a/src/old/resources/js/common.js b/src/old/resources/js/common.js
new file mode 100644
index 0000000..da256a9
--- /dev/null
+++ b/src/old/resources/js/common.js
@@ -0,0 +1,81 @@
+document.addEventListener('DOMContentLoaded', function() {
+ // Algolia search
+ docsearch({
+ appId: "BH4D9OD16A",
+ apiKey: '14275a785f6ebd31d162f9d2d8fc0125',
+ indexName: 'caddyserver',
+ container: '#search',
+ });
+});
+
+const caddyImportPath = 'github.com/caddyserver/caddy/v2';
+
+function isStandard(packagePath) {
+ return packagePath.startsWith(caddyImportPath);
+}
+
+function truncate(str, maxLen) {
+ if (!str) return "";
+ str = str.trim();
+ let firstPeriod = str.match(/\.(\s|$)/); // first dot not in the middle of a word, or at end of string
+ let terminate = firstPeriod ? firstPeriod.index+1 : str.length;
+ str = str.substring(0, terminate);
+ if (str.length <= maxLen) {
+ return str;
+ }
+ return str+"...";
+}
+
+function moduleDocsPreview(mod, maxLen) {
+ if (!mod || !mod.docs) return "";
+ let short = truncate(mod.docs, maxLen);
+ if (short.indexOf(mod.name) === 0) {
+ short = short.substr(mod.name.length).trim();
+ }
+ return short;
+}
+
+function detectPlatform() {
+ // assume 32-bit linux, then change OS and architecture if justified
+ var os = "linux", arch = "amd64";
+
+ // change os
+ if (/Macintosh/i.test(navigator.userAgent)) {
+ os = "darwin";
+ } else if (/Windows/i.test(navigator.userAgent)) {
+ os = "windows";
+ } else if (/FreeBSD/i.test(navigator.userAgent)) {
+ os = "freebsd";
+ } else if (/OpenBSD/i.test(navigator.userAgent)) {
+ os = "openbsd";
+ }
+
+ // change architecture
+ if (os == "darwin" || /amd64|x64|x86_64|Win64|WOW64|i686|64-bit/i.test(navigator.userAgent)) {
+ arch = "amd64";
+ } else if (/arm64/.test(navigator.userAgent)) {
+ arch = "arm64";
+ } else if (/ ARM| armv/.test(navigator.userAgent)) {
+ arch = "arm";
+ }
+
+ // change arm version
+ if (arch == "arm") {
+ var arm = "7"; // assume version 7 by default
+ if (/armv6/.test(navigator.userAgent)) {
+ arm = "6";
+ } else if (/armv5/.test(navigator.userAgent)) {
+ arm = "5";
+ }
+ arch += arm;
+ }
+
+ return [os, arch];
+}
+
+// Detect the platform OS, but with an allow-list of values
+// and if the value is not allowed, return the default.
+function defaultOS(allowed, def) {
+ var [os] = detectPlatform();
+ return allowed.includes(os) ? os : def;
+}
diff --git a/src/resources/js/docs-api.js b/src/old/resources/js/docs-api.js
similarity index 100%
rename from src/resources/js/docs-api.js
rename to src/old/resources/js/docs-api.js
diff --git a/src/old/resources/js/docs.js b/src/old/resources/js/docs.js
new file mode 100644
index 0000000..01c4ba5
--- /dev/null
+++ b/src/old/resources/js/docs.js
@@ -0,0 +1,87 @@
+$(function() {
+ function hasPrefix(str, prefix) {
+ if (!prefix) return true;
+ if (!str) return false;
+ return str.indexOf(prefix) === 0;
+ }
+
+ // highlight current page in left nav
+ var $currentPageLink = $('main nav a[href="'+window.location.pathname+'"]');
+ if (hasPrefix(window.location.pathname, "/docs/json/")) {
+ // as a special case, highlight the JSON structure link anywhere within it
+ $currentPageLink = $('main nav a[href="/docs/json/"]');
+ }
+ if (hasPrefix(window.location.pathname, "/docs/modules/")) {
+ // as another special case, highlight the modules link anywhere within it
+ $currentPageLink = $('main nav a[href="/docs/modules/"]');
+ }
+ $currentPageLink.addClass('current');
+
+ // add anchor links, inspired by https://github.com/bryanbraun/anchorjs
+ $('article > h1[id], article > h2[id], article > h3[id], article > h4[id], article > h5[id], article > h6[id]').each(function() {
+ var $anchor = $('
');
+ $(this).append($anchor);
+ });
+
+ // the server-side markdown renderer annoyingly renders
+ // colored code blocks differently from plain ones, in that
+ // colorized ones do not have the additional
inside
+ // the ; this line finds those and adds a .chroma class
+ // to the outer pre element, and our CSS file has a style to
+ // ensure the inner code block does not produce extra padding
+ $('article > pre:not(.chroma) > code:not(.cmd)').parent().addClass('chroma');
+
+ // Add links to Caddyfile directive tokens in code blocks.
+ // See include/docs-head.html for the whitelist bootstrapping logic
+ $('pre.chroma .k')
+ .filter((k, item) =>
+ window.CaddyfileDirectives.includes(item.innerText)
+ || item.innerText === ''
+ )
+ .map(function(k, item) {
+ let text = item.innerText;
+ let url = text === ''
+ ? '/docs/caddyfile/directives'
+ : '/docs/caddyfile/directives/' + text;
+ text = text.replace(//g,'>');
+ $(item).html('' + text + '');
+ });
+
+ // Add links to [] or named matcher tokens in code blocks.
+ // The matcher text includes <> characters which are parsed as HTML,
+ // so we must use text() to change the link text.
+ $('pre.chroma .nd')
+ .map(function(k, item) {
+ let text = item.innerText.replace(//g,'>');
+ $(item).html('' + text + '');
+ });
+});
+
+// addLinkaddLinksToSubdirectivessToAnchors finds all the ID anchors
+// in the article, and turns any directive or subdirective span into
+// links that have an ID on the page. This is opt-in for each page,
+// because it's not necessary to run everywhere.
+function addLinksToSubdirectives() {
+ let anchors = $('article *[id]').map((i, el) => el.id).toArray();
+ $('pre.chroma .k')
+ .filter((k, item) => anchors.includes(item.innerText))
+ .map(function(k, item) {
+ let text = item.innerText.replace(//g,'>');
+ let url = '#' + item.innerText;
+ $(item).html('' + text + '');
+ });
+}
+
+function stripScheme(url) {
+ return url.substring(url.indexOf("://")+3);
+}
+
+// splitTypeName splits a fully qualified type name into
+// its package path and type name components, for example:
+// "github.com/foo/bar.Type" => "github.com/foo/bar" and "Type".
+function splitTypeName(fqtn) {
+ let lastDotPos = fqtn.lastIndexOf('.');
+ let pkg = fqtn.substr(0, lastDotPos);
+ let typeName = fqtn.substr(lastDotPos+1);
+ return {pkg: pkg, typeName: typeName};
+}
diff --git a/src/resources/js/download.js b/src/old/resources/js/download.js
similarity index 100%
rename from src/resources/js/download.js
rename to src/old/resources/js/download.js
diff --git a/src/resources/js/jquery-3.4.1.min.js b/src/old/resources/js/jquery-3.4.1.min.js
similarity index 100%
rename from src/resources/js/jquery-3.4.1.min.js
rename to src/old/resources/js/jquery-3.4.1.min.js
diff --git a/src/resources/js/json-docs.js b/src/old/resources/js/json-docs.js
similarity index 100%
rename from src/resources/js/json-docs.js
rename to src/old/resources/js/json-docs.js
diff --git a/src/resources/js/marked-0.8.0.min.js b/src/old/resources/js/marked-0.8.0.min.js
similarity index 100%
rename from src/resources/js/marked-0.8.0.min.js
rename to src/old/resources/js/marked-0.8.0.min.js
diff --git a/src/resources/js/module-docs.js b/src/old/resources/js/module-docs.js
similarity index 100%
rename from src/resources/js/module-docs.js
rename to src/old/resources/js/module-docs.js
diff --git a/src/resources/js/sweetalert.min.js b/src/old/resources/js/sweetalert.min.js
similarity index 100%
rename from src/resources/js/sweetalert.min.js
rename to src/old/resources/js/sweetalert.min.js
diff --git a/src/on-demand-tls.html b/src/on-demand-tls.html
new file mode 100644
index 0000000..b5a09e7
--- /dev/null
+++ b/src/on-demand-tls.html
@@ -0,0 +1,139 @@
+
+
+
+ Caddy is the best web server for HTTPS
+ {{import "/includes/head.html"}}
+ {{template "head" .}}
+
+
+
+
+
+
+ {{include "/includes/header.html" "dark-header"}}
+
+
+
+
+ You just got served
+
+ ... a dynamically-provisioned TLS certificate by Caddy!
+
+
+
+
+
+
+
+
+
+
+
+ What happened?
+
+
+ Caddy automatically obtained a certificate for your domain, {{.Req.Host}}
, without any change to the server's configuration. We call this technology On-Demand TLS, and it's an exclusive feature of Caddy.
+
+
+ With On-Demand TLS, no config changes are required to serve more domains over HTTPS. This is perfect for servers hosting content or APIs for customer-owned domains because your HTTPS deployment scales as tall and wide as your business does.
+
+
+ Caddy's technology is the secret sauce of many SaaS products that offer custom domains. It generates hundreds of thousands of dollars in revenue every year while saving businesses tens of thousands of dollars in development and maintenance costs.
+
+
+ Fun fact: this feature earned standing ovations at more than one tech demo back in 2015 and 2016 when it was first introduced.
+
+
+
+
+
+
+
+ Easy, self-hosted HTTPS for customer domains
+
+
+ Use On-Demand TLS to grow your custom-domain SaaS business in a matter of minutes. A minimal config looks like this:
+
+
+
+
+
+
1. Prevent abuse
+
+ First, you'll configure an internal endpoint that Caddy can "ask" if a certificate should be allowed for a domain. This endpoint usually looks up the domain in a list or database and returns HTTP 200
if it's allowed. Make sure to reject domains you don't recognize. (This implies that customers have to tell your app what their domain is first.)
+
+
+
+
2. Enable On-Demand TLS
+
+ To finish, enable On-Demand TLS for a catch-all site.
+
+
+
+
+
+ {{ markdown (include "/includes/examples/on-demand.md") }}
+
+
+
+
+
+ Actual production configs typically have more, but this is the minimal configuration needed to serve domain names that aren't in your control. All that's left is for the domain owner to set their DNS records (described below).
+
+
+
+
+
+
+
+
+
+ Brilliant customer experience
+
+
+ For domain owners, the flow is even simpler: set DNS records. The first visit to their site will provision a TLS certificate. Works like magic!
+
+
+
+
+
+
1. Point DNS records
+
+ The customer sets either a CNAME record or A/AAAA records on a domain or subdomain they control, so that their domain resolves to your server's IP address.
+
+
+
+
+
+
+
+your-app.customer.com CNAME -> your-app.com
+
+
+your-app.com A -> 198.51.100.1
+your-app.com AAAA -> 2001:db8::
+
+
+
+
+
+
+ There is no step 2. Caddy will obtain and serve a certificate for their domain as soon as a connection is made to it. Caddy keeps the certificates renewed as long as connections keep coming in. Once they stop, Caddy will let the certificate expire and then delete it automatically.
+
+
+ And that is how you save tens of thousands of dollars in development and infrastructure costs every year.
+
+
+
+
+
+
+
+ {{include "/includes/footer.html"}}
+
+
diff --git a/src/resources/321140.cast b/src/resources/321140.cast
deleted file mode 100644
index 03d717e..0000000
--- a/src/resources/321140.cast
+++ /dev/null
@@ -1,233 +0,0 @@
-{"version": 2, "width": 79, "height": 20, "timestamp": 1587149050, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}}
-[0.022225, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
-[0.023339, "o", "\u001b]7;file://Shadowfax.local/Users/matt/demo\u0007"]
-[0.023501, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J \r\n\u001b[90m╔[\u001b[32m√ \u001b[38;5;81mmatt\u001b[90m@\u001b[38;5;82mShadowfax\u001b[90m:\u001b[38;5;81m~/demo\u001b[90m] \r\n╚>\u001b[39m% \u001b[K"]
-[0.023536, "o", "\u001b[?2004h"]
-[1.887934, "o", "n"]
-[2.000861, "o", "\bna"]
-[2.072314, "o", "n"]
-[2.148447, "o", "o"]
-[2.304342, "o", " "]
-[2.444706, "o", "C"]
-[2.564064, "o", "a"]
-[2.66464, "o", "d"]
-[2.825937, "o", "d"]
-[2.946425, "o", "y"]
-[3.129396, "o", "f"]
-[3.287358, "o", "i"]
-[3.359465, "o", "l"]
-[3.487032, "o", "e"]
-[3.66006, "o", "\u001b[?2004l\r\r\n"]
-[3.667071, "o", "\u001b[?1049h\u001b[1;20r\u001b(B\u001b[m\u001b[4l\u001b[?7h\u001b[?12l\u001b[?25h\u001b[?1h\u001b="]
-[3.667109, "o", "\u001b[?1h\u001b=\u001b[?1h\u001b="]
-[3.667473, "o", "\u001b[39;49m\u001b[39;49m\u001b(B\u001b[m\u001b[H\u001b[2J\u001b(B\u001b[0;7m GNU nano 2.0.6 File: Caddyfile \u001b[18;34H[ New File ]\r\u001b[19d^G\u001b(B\u001b[m Get Help \u001b(B\u001b[0;7m^O\u001b(B\u001b[m WriteOut \u001b(B\u001b[0;7m^R\u001b(B\u001b[m Read File \u001b(B\u001b[0;7m^Y\u001b(B\u001b[m Prev Page \u001b(B\u001b[0;7m^K\u001b(B\u001b[m Cut Text \u001b(B\u001b[0;7m^C\u001b(B\u001b[m Cur Pos\r\u001b[20d\u001b(B\u001b[0;7m^X\u001b(B\u001b[m Exit\u001b[14G\u001b(B\u001b[0;7m^J\u001b(B\u001b[m Justify \u001b(B\u001b[0;7m^W\u001b(B\u001b[m Where Is \u001b(B\u001b[0;7m^V\u001b(B\u001b[m Next Page \u001b(B\u001b[0;7m^U\u001b(B\u001b[m UnCut Text\u001b(B\u001b[0;7m^T\u001b(B\u001b[m To Spell\r\u001b[3d"]
-[4.535698, "o", "\u001b[1;70H\u001b(B\u001b[0;7mModified\r\u001b[3d\u001b(B\u001b[md"]
-[4.67723, "o", "e"]
-[4.755158, "o", "m"]
-[4.806295, "o", "o"]
-[5.029033, "o", "."]
-[5.165983, "o", "h"]
-[5.227794, "o", "t"]
-[5.353038, "o", "t"]
-[5.414159, "o", "p"]
-[5.523791, "o", "s"]
-[5.627998, "o", "."]
-[5.710455, "o", "d"]
-[5.840252, "o", "e"]
-[5.963799, "o", "v"]
-[6.647743, "o", "\r\u001b[4d"]
-[6.775947, "o", "\u001b[5d"]
-[6.933264, "o", "r"]
-[7.004905, "o", "o"]
-[7.122765, "o", "o"]
-[7.163639, "o", "t"]
-[7.244083, "o", " "]
-[7.346443, "o", "*"]
-[7.44394, "o", " "]
-[7.578595, "o", "/"]
-[7.826323, "o", "v"]
-[7.959474, "o", "\r\u001b[18d\u001b[K\u001b[5;10Ha"]
-[8.015511, "o", "r"]
-[8.103944, "o", "/"]
-[8.244526, "o", "w"]
-[8.52161, "o", "w"]
-[8.671104, "o", "w"]
-[9.968752, "o", "\r\u001b[6d"]
-[10.097106, "o", "\u001b[7d"]
-[10.218855, "o", "f"]
-[10.319563, "o", "i"]
-[10.391213, "o", "l"]
-[10.438339, "o", "e"]
-[10.606098, "o", "_"]
-[10.68185, "o", "s"]
-[10.767465, "o", "e"]
-[10.813916, "o", "r"]
-[11.008647, "o", "v"]
-[11.138442, "o", "e"]
-[11.178214, "o", "r"]
-[11.300523, "o", "\r\u001b[8d"]
-[11.477734, "o", "l"]
-[11.606149, "o", "o"]
-[11.66293, "o", "g"]
-[12.48292, "o", "\r\u001b[9d"]
-[12.649606, "o", "\u001b[10d"]
-[12.849532, "o", "#"]
-[13.198356, "o", " "]
-[13.299546, "o", "l"]
-[13.452749, "o", "o"]
-[13.51259, "o", "a"]
-[13.56063, "o", "d"]
-[13.690761, "o", " "]
-[13.771, "o", "b"]
-[13.911226, "o", "a"]
-[13.950191, "o", "l"]
-[14.047689, "o", "a"]
-[14.131014, "o", "n"]
-[14.214907, "o", "c"]
-[14.282838, "o", "e"]
-[14.325811, "o", " "]
-[14.466908, "o", "b"]
-[14.612588, "o", "e"]
-[14.685894, "o", "t"]
-[14.785785, "o", "w"]
-[14.84735, "o", "e"]
-[14.991994, "o", "e"]
-[15.089862, "o", "n"]
-[15.198188, "o", " "]
-[15.269788, "o", "t"]
-[15.32201, "o", "w"]
-[15.441701, "o", "o"]
-[15.517416, "o", " "]
-[15.614119, "o", "b"]
-[15.78414, "o", "a"]
-[15.869248, "o", "c"]
-[15.945455, "o", "k"]
-[16.028741, "o", "e"]
-[16.115068, "o", "n"]
-[16.19984, "o", "d"]
-[16.248232, "o", "s"]
-[16.442928, "o", "\r\u001b[11d"]
-[16.911683, "o", "r"]
-[16.97932, "o", "e"]
-[17.141613, "o", "v"]
-[17.282014, "o", "e"]
-[17.370161, "o", "r"]
-[17.490939, "o", "s"]
-[17.547477, "o", "e"]
-[17.740609, "o", "_"]
-[17.940825, "o", "p"]
-[17.992396, "o", "r"]
-[18.091587, "o", "o"]
-[18.185345, "o", "x"]
-[18.308829, "o", "y"]
-[18.361527, "o", " "]
-[18.651444, "o", "/"]
-[18.825604, "o", "a"]
-[18.904857, "o", "p"]
-[18.964969, "o", "i"]
-[19.188263, "o", "/"]
-[19.445601, "o", "*"]
-[19.505049, "o", " "]
-[20.21481, "o", "l"]
-[20.366859, "o", "o"]
-[20.442428, "o", "c"]
-[20.483119, "o", "a"]
-[20.542915, "o", "l"]
-[20.682475, "o", "h"]
-[20.747016, "o", "o"]
-[20.757983, "o", "s"]
-[20.845264, "o", "t"]
-[20.998991, "o", ":"]
-[21.173825, "o", "8"]
-[21.281686, "o", "0"]
-[21.84701, "o", "8"]
-[21.906424, "o", "0"]
-[22.062149, "o", " "]
-[22.305605, "o", "l"]
-[22.451357, "o", "o"]
-[22.520031, "o", "c"]
-[22.568039, "o", "a"]
-[22.632047, "o", "l"]
-[22.751563, "o", "h"]
-[22.816958, "o", "o"]
-[22.842836, "o", "s"]
-[22.914777, "o", "t"]
-[23.051619, "o", ":"]
-[23.221017, "o", "8"]
-[23.301663, "o", "0"]
-[23.679979, "o", "8"]
-[23.82229, "o", "1"]
-[25.554339, "o", "\r\u001b[18d\u001b(B\u001b[0;7mFile Name to Write: Caddyfile \u001b[19;14H\u001b(B\u001b[m \u001b(B\u001b[0;7m^T\u001b(B\u001b[m To Files \u001b(B\u001b[0;7mM-M\u001b(B\u001b[m Mac Format \u001b(B\u001b[0;7mM-P\u001b(B\u001b[m Prepend\u001b[K\u001b[20;2H\u001b(B\u001b[0;7mC\u001b(B\u001b[m Cancel \u001b(B\u001b[0;7mM-D\u001b(B\u001b[m DOS Format \u001b(B\u001b[0;7mM-A\u001b(B\u001b[m Append \u001b(B\u001b[0;7mM-B\u001b(B\u001b[m Backup File\u001b[K\u001b[18;30H"]
-[25.798317, "o", "\u001b[1;70H\u001b[39;49m\u001b(B\u001b[0;7m \u001b[18;31H\u001b(B\u001b[m\u001b[1K \u001b(B\u001b[0;7m[ Wrote 9 lines ]\u001b(B\u001b[m\u001b[K\u001b[19;14H\u001b(B\u001b[0;7m^O\u001b(B\u001b[m WriteOut \u001b(B\u001b[0;7m^R\u001b(B\u001b[m Read File \u001b(B\u001b[0;7m^Y\u001b(B\u001b[m Prev Page \u001b(B\u001b[0;7m^K\u001b(B\u001b[m Cut Text \u001b(B\u001b[0;7m^C\u001b(B\u001b[m Cur Pos\u001b[20;2H\u001b(B\u001b[0;7mX\u001b(B\u001b[m Exit \u001b(B\u001b[0;7m^J\u001b(B\u001b[m Justify \u001b(B\u001b[0;7m^W\u001b(B\u001b[m Where Is \u001b(B\u001b[0;7m^V\u001b(B\u001b[m Next Page \u001b(B\u001b[0;7m^U\u001b(B\u001b[m UnCut Text\u001b(B\u001b[0;7m^T\u001b(B\u001b[m To Spell\u001b[11;51H"]
-[26.578003, "o", "\r\u001b[19d\u001b[J\u001b[20;79H\u001b[20;1H\u001b[?1049l\r\u001b[?1l\u001b>"]
-[26.578762, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
-[26.57933, "o", "\u001b]7;file://Shadowfax.local/Users/matt/demo\u0007"]
-[26.579475, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J \r\n\u001b[90m╔[\u001b[32m√ \u001b[38;5;81mmatt\u001b[90m@\u001b[38;5;82mShadowfax\u001b[90m:\u001b[38;5;81m~/demo\u001b[90m] \r\n╚>\u001b[39m% \u001b[K\u001b[?2004h"]
-[28.181852, "o", "c"]
-[28.231774, "o", "\bca"]
-[28.339992, "o", "d"]
-[28.467448, "o", "d"]
-[28.551971, "o", "y"]
-[28.666558, "o", " "]
-[28.710012, "o", "s"]
-[28.773903, "o", "t"]
-[28.936621, "o", "a"]
-[28.995575, "o", "r"]
-[29.128429, "o", "t"]
-[30.256599, "o", "\u001b[?2004l\r\r\n"]
-[30.320169, "o", "2020/04/17 18:44:40.540\t\u001b[34mINFO\u001b[0m\tusing adjacent Caddyfile\r\n"]
-[30.322723, "o", "2020/04/17 18:44:40.543\t\u001b[34mINFO\u001b[0m\tadmin\tadmin endpoint started\t{\"address\": \"tcp/localhost:2019\", \"enforce_origin\": false, \"origins\": [\"localhost:2019\", \"[::1]:2019\", \"127.0.0.1:2019\"]}\r\n"]
-[30.322934, "o", "2020/04/17 12:44:40 [INFO][cache:0xc000849d10] Started certificate maintenance routine\r\n"]
-[30.322962, "o", "2020/04/17 18:44:40.543\t\u001b[34mINFO\u001b[0m\thttp\tserver is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS\t{\"server_name\": \"srv0\", \"https_port\": 443}\r\n2020/04/17 18:44:40.543\t\u001b[34mINFO\u001b[0m\thttp\tenabling automatic HTTP->HTTPS redirects\t{\"server_name\": \"srv0\"}\r\n"]
-[30.329471, "o", "2020/04/17 18:44:40.550\t\u001b[34mINFO\u001b[0m\ttls\tcleaned up storage units\r\n"]
-[30.32956, "o", "2020/04/17 18:44:40.550\t\u001b[34mINFO\u001b[0m\thttp\tenabling automatic TLS certificate management\t{\"domains\": [\"demo.https.dev\"]}\r\n"]
-[30.329848, "o", "2020/04/17 18:44:40.550\t\u001b[34mINFO\u001b[0m\tautosaved config\t{\"file\": \"/Users/matt/Library/Application Support/Caddy/autosave.json\"}\r\n2020/04/17 18:44:40.550\t\u001b[34mINFO\u001b[0m\tserving initial configuration\r\n"]
-[30.330126, "o", "Successfully started Caddy (pid=41376) - Caddy is running in the background\r\n"]
-[30.331898, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
-[30.332211, "o", "\u001b]7;file://Shadowfax.local/Users/matt/demo\u0007"]
-[30.332308, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J \r\n\u001b[90m╔[\u001b[32m√ \u001b[38;5;81mmatt\u001b[90m@\u001b[38;5;82mShadowfax\u001b[90m:\u001b[38;5;81m~/demo\u001b[90m] \r\n╚>\u001b[39m% \u001b[K\u001b[?2004h"]
-[30.336942, "o", "2020/04/17 12:44:40 [INFO][demo.https.dev] Obtain certificate; acquiring lock...\r\n"]
-[30.337162, "o", "2020/04/17 12:44:40 [INFO][demo.https.dev] Obtain: Lock acquired; proceeding...\r\n"]
-[31.96302, "o", "2020/04/17 12:44:42 [INFO][demo.https.dev] Waiting on rate limiter...\r\n2020/04/17 12:44:42 [INFO][demo.https.dev] Done waiting\r\n2020/04/17 12:44:42 [INFO] [demo.https.dev] acme: Obtaining bundled SAN certificate given a CSR\r\n"]
-[33.570607, "o", "2020/04/17 12:44:43 [INFO] [demo.https.dev] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/4019233382\r\n2020/04/17 12:44:43 [INFO] [demo.https.dev] acme: Could not find solver for: tls-alpn-01\r\n2020/04/17 12:44:43 [INFO] [demo.https.dev] acme: use http-01 solver\r\n2020/04/17 12:44:43 [INFO] [demo.https.dev] acme: Trying to solve HTTP-01\r\n"]
-[34.951173, "o", "2020/04/17 12:44:45 [INFO][demo.https.dev] Served key authentication (HTTP challenge)\r\n"]
-[34.989119, "o", "2020/04/17 12:44:45 [INFO][demo.https.dev] Served key authentication (HTTP challenge)\r\n"]
-[35.027001, "o", "2020/04/17 12:44:45 [INFO][demo.https.dev] Served key authentication (HTTP challenge)\r\n"]
-[35.104125, "o", "2020/04/17 12:44:45 [INFO][demo.https.dev] Served key authentication (HTTP challenge)\r\n"]
-[36.574519, "o", "2020/04/17 12:44:46 [INFO] [demo.https.dev] The server validated our request\r\n"]
-[36.575029, "o", "2020/04/17 12:44:46 [INFO] [demo.https.dev] acme: Validations succeeded; requesting certificates\r\n"]
-[37.414882, "o", "2020/04/17 12:44:47 [INFO] [demo.https.dev] Server responded with a certificate.\r\n"]
-[37.416159, "o", "2020/04/17 12:44:47 [INFO][demo.https.dev] Certificate obtained successfully\r\n2020/04/17 12:44:47 [INFO][demo.https.dev] Obtain: Releasing lock\r\n"]
-[39.497929, "o", "\u001b[?2004l\r\r\n"]
-[39.498104, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
-[39.498581, "o", "\u001b]7;file://Shadowfax.local/Users/matt/demo\u0007"]
-[39.498738, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J \r\n\u001b[90m╔[\u001b[32m√ \u001b[38;5;81mmatt\u001b[90m@\u001b[38;5;82mShadowfax\u001b[90m:\u001b[38;5;81m~/demo\u001b[90m] \r\n╚>\u001b[39m% \u001b[K\u001b[?2004h"]
-[40.091454, "o", "c"]
-[40.173651, "o", "\bcu"]
-[40.257827, "o", "r"]
-[40.350059, "o", "l"]
-[40.44162, "o", " "]
-[40.619544, "o", "-"]
-[40.993026, "o", "L"]
-[41.085153, "o", " "]
-[41.865854, "o", "d"]
-[41.982983, "o", "e"]
-[42.063097, "o", "m"]
-[42.113574, "o", "o"]
-[42.326516, "o", "."]
-[42.71396, "o", "h"]
-[42.773776, "o", "t"]
-[42.896163, "o", "t"]
-[42.935898, "o", "p"]
-[43.051751, "o", "s"]
-[43.155986, "o", "."]
-[43.238445, "o", "d"]
-[43.36391, "o", "e"]
-[43.459323, "o", "v"]
-[43.674326, "o", "\u001b[?2004l\r\r\n"]
-[43.703356, "o", "2020/04/17 18:44:53.923\t\u001b[34mINFO\u001b[0m\thttp.log.access\thandled request\t{\"request\": {\"method\": \"GET\", \"uri\": \"/\", \"proto\": \"HTTP/2.0\", \"remote_addr\": \"127.0.0.1:51883\", \"host\": \"demo.https.dev\", \"headers\": {\"User-Agent\": [\"curl/7.64.1\"], \"Accept\": [\"*/*\"]}, \"tls\": {\"resumed\": false, \"version\": 771, \"ciphersuite\": 49196, \"proto\": \"h2\", \"proto_mutual\": true, \"server_name\": \"demo.https.dev\"}}, \"common_log\": \"127.0.0.1 - - [17/Apr/2020:12:44:53 -0600] \\\"GET / HTTP/2.0\\\" 200 39\", \"latency\": 0.004248752, \"size\": 39, \"status\": 200, \"resp_headers\": {\"Server\": [\"Caddy\"], \"Etag\": [\"\\\"q8y3zo13\\\"\"], \"Content-Type\": [\"text/html; charset=utf-8\"], \"Last-Modified\": [\"Fri, 17 Apr 2020 18:43:00 GMT\"], \"Accept-Ranges\": [\"bytes\"], \"Content-Length\": [\"39\"]}}\r\n"]
-[43.703537, "o", "🔒 Easy HTTPS, just like that! 🎉\r\n\r\n"]
-[43.706045, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
-[43.706405, "o", "\u001b]7;file://Shadowfax.local/Users/matt/demo\u0007"]
-[43.706517, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J \r\n\u001b[90m╔[\u001b[32m√ \u001b[38;5;81mmatt\u001b[90m@\u001b[38;5;82mShadowfax\u001b[90m:\u001b[38;5;81m~/demo\u001b[90m] \r\n╚>\u001b[39m% \u001b[K\u001b[?2004h"]
-[48.347301, "o", "\u001b[?2004l\r\r\n"]
diff --git a/src/resources/css/business.css b/src/resources/css/business.css
deleted file mode 100644
index 38bf568..0000000
--- a/src/resources/css/business.css
+++ /dev/null
@@ -1,40 +0,0 @@
-h1 {
- font-family: Montserrat, sans-serif;
- font-weight: normal;
- font-size: 80px;
- text-align: center;
- margin: 100px auto;
-}
-
-.panels {
- display: flex;
-}
-
-.panels > * {
- flex: 1;
- margin: 0 50px;
-}
-
-.panels > :first-child {
- margin-left: 0;
-}
-
-p {
- margin: 1em 0;
- line-height: 1.5em;
-}
-
-@media (max-width: 900px) {
- h1 {
- font-size: 50px;
- margin: 50px auto;
- }
-
- .panels {
- flex-direction: column-reverse;
- }
-
- .panels > * {
- margin: 30px 0;
- }
-}
\ No newline at end of file
diff --git a/src/resources/css/chroma.css b/src/resources/css/chroma.css
index 193432e..d0df757 100644
--- a/src/resources/css/chroma.css
+++ b/src/resources/css/chroma.css
@@ -81,81 +81,81 @@
.chroma .vi { color: #0673bf } /* Name.Variable.Instance */
.chroma .il { color: #008076 } /* Literal.Number.Integer.Long */
-@media (prefers-color-scheme: dark) {
- /*
- Solarized Dark (High Contrast)
- Derived from http://ethanschoonover.com/solarized
- */
- .chroma {
- background: linear-gradient(0deg, #18384d 0%, #122537 100%);
- color: #93a1a1;
- }
- .chroma .c { color: #586e75 } /* Comment */
- .chroma .err { color: #93a1a1 } /* Error */
- .chroma .g { color: #93a1a1 } /* Generic */
- .chroma .k { color: #76a507 } /* Keyword */
- .chroma .l { color: #93a1a1 } /* Literal */
- .chroma .n { color: #93a1a1 } /* Name */
- .chroma .o { color: #76a507 } /* Operator */
- .chroma .x { color: #ec662e } /* Other */
- .chroma .p { color: #93a1a1 } /* Punctuation */
- .chroma .cm { color: #586e75 } /* Comment.Multiline */
- .chroma .cp { color: #76a507 } /* Comment.Preproc */
- .chroma .c1 { color: #586e75 } /* Comment.Single */
- .chroma .cs { color: #76a507 } /* Comment.Special */
- .chroma .gd { color: #dc322f; background-color: #efdede } /* Generic.Deleted */
- .chroma .ge { color: #93a1a1; font-style: italic } /* Generic.Emph */
- .chroma .gr { color: #dc322f } /* Generic.Error */
- .chroma .gh { color: #ec662e } /* Generic.Heading */
- .chroma .gi { color: #76a507 } /* Generic.Inserted */
- .chroma .go { color: #93a1a1 } /* Generic.Output */
- .chroma .gp { color: #93a1a1 } /* Generic.Prompt */
- .chroma .gs { color: #93a1a1; font-weight: bold } /* Generic.Strong */
- .chroma .gu { color: #ec662e } /* Generic.Subheading */
- .chroma .gt { color: #93a1a1 } /* Generic.Traceback */
- .chroma .kc { color: #ec662e } /* Keyword.Constant */
- .chroma .kd { color: #0090f5 } /* Keyword.Declaration */
- .chroma .kn { color: #76a507 } /* Keyword.Namespace */
- .chroma .kp { color: #76a507 } /* Keyword.Pseudo */
- .chroma .kr { color: #0090f5 } /* Keyword.Reserved */
- .chroma .kt { color: #dc322f } /* Keyword.Type */
- .chroma .ld { color: #93a1a1 } /* Literal.Date */
- .chroma .m { color: #09a598 } /* Literal.Number */
- .chroma .s { color: #09a598 } /* Literal.String */
- .chroma .na { color: #93a1a1 } /* Name.Attribute */
- .chroma .nb { color: #B58900 } /* Name.Builtin */
- .chroma .nc { color: #0090f5 } /* Name.Class */
- .chroma .no { color: #ec662e } /* Name.Constant */
- .chroma .nd { color: #0090f5 } /* Name.Decorator */
- .chroma .ni { color: #ec662e } /* Name.Entity */
- .chroma .ne { color: #ec662e } /* Name.Exception */
- .chroma .nf { color: #0090f5 } /* Name.Function */
- .chroma .nl { color: #93a1a1 } /* Name.Label */
- .chroma .nn { color: #93a1a1 } /* Name.Namespace */
- .chroma .nx { color: #93a1a1 } /* Name.Other */
- .chroma .py { color: #93a1a1 } /* Name.Property */
- .chroma .nt { color: #0090f5 } /* Name.Tag */
- .chroma .nv { color: #0090f5 } /* Name.Variable */
- .chroma .ow { color: #76a507 } /* Operator.Word */
- .chroma .w { color: #93a1a1 } /* Text.Whitespace */
- .chroma .mf { color: #09a598 } /* Literal.Number.Float */
- .chroma .mh { color: #09a598 } /* Literal.Number.Hex */
- .chroma .mi { color: #09a598 } /* Literal.Number.Integer */
- .chroma .mo { color: #09a598 } /* Literal.Number.Oct */
- .chroma .sb { color: #586e75 } /* Literal.String.Backtick */
- .chroma .sc { color: #09a598 } /* Literal.String.Char */
- .chroma .sd { color: #93a1a1 } /* Literal.String.Doc */
- .chroma .s2 { color: #09a598 } /* Literal.String.Double */
- .chroma .se { color: #ec662e } /* Literal.String.Escape */
- .chroma .sh { color: #93a1a1 } /* Literal.String.Heredoc */
- .chroma .si { color: #09a598 } /* Literal.String.Interpol */
- .chroma .sx { color: #09a598 } /* Literal.String.Other */
- .chroma .sr { color: #dc322f } /* Literal.String.Regex */
- .chroma .s1 { color: #09a598 } /* Literal.String.Single */
- .chroma .ss { color: #09a598 } /* Literal.String.Symbol */
- .chroma .bp { color: #0090f5 } /* Name.Builtin.Pseudo */
- .chroma .vc { color: #0090f5 } /* Name.Variable.Class */
- .chroma .vg { color: #0090f5 } /* Name.Variable.Global */
- .chroma .vi { color: #0090f5 } /* Name.Variable.Instance */
- .chroma .il { color: #09a598 } /* Literal.Number.Integer.Long */
+
+
+/*
+ Solarized Dark (High Contrast)
+ Derived from http://ethanschoonover.com/solarized
+*/
+.dark .chroma:not(.light) {
+ background: linear-gradient(to bottom, #24454f, transparent);
+ color: #93a1a1;
}
+.dark .chroma:not(.light) .c { color: #586e75 } /* Comment */
+.dark .chroma:not(.light) .err { color: #93a1a1 } /* Error */
+.dark .chroma:not(.light) .g { color: #93a1a1 } /* Generic */
+.dark .chroma:not(.light) .k { color: #76a507 } /* Keyword */
+.dark .chroma:not(.light) .l { color: #93a1a1 } /* Literal */
+.dark .chroma:not(.light) .n { color: #93a1a1 } /* Name */
+.dark .chroma:not(.light) .o { color: #76a507 } /* Operator */
+.dark .chroma:not(.light) .x { color: #ec662e } /* Other */
+.dark .chroma:not(.light) .p { color: #93a1a1 } /* Punctuation */
+.dark .chroma:not(.light) .cm { color: #586e75 } /* Comment.Multiline */
+.dark .chroma:not(.light) .cp { color: #76a507 } /* Comment.Preproc */
+.dark .chroma:not(.light) .c1 { color: #586e75 } /* Comment.Single */
+.dark .chroma:not(.light) .cs { color: #76a507 } /* Comment.Special */
+.dark .chroma:not(.light) .gd { color: #dc322f; background-color: #efdede } /* Generic.Deleted */
+.dark .chroma:not(.light) .ge { color: #93a1a1; font-style: italic } /* Generic.Emph */
+.dark .chroma:not(.light) .gr { color: #dc322f } /* Generic.Error */
+.dark .chroma:not(.light) .gh { color: #ec662e } /* Generic.Heading */
+.dark .chroma:not(.light) .gi { color: #76a507 } /* Generic.Inserted */
+.dark .chroma:not(.light) .go { color: #93a1a1 } /* Generic.Output */
+.dark .chroma:not(.light) .gp { color: #93a1a1 } /* Generic.Prompt */
+.dark .chroma:not(.light) .gs { color: #93a1a1; font-weight: bold } /* Generic.Strong */
+.dark .chroma:not(.light) .gu { color: #ec662e } /* Generic.Subheading */
+.dark .chroma:not(.light) .gt { color: #93a1a1 } /* Generic.Traceback */
+.dark .chroma:not(.light) .kc { color: #ec662e } /* Keyword.Constant */
+.dark .chroma:not(.light) .kd { color: #0090f5 } /* Keyword.Declaration */
+.dark .chroma:not(.light) .kn { color: #76a507 } /* Keyword.Namespace */
+.dark .chroma:not(.light) .kp { color: #76a507 } /* Keyword.Pseudo */
+.dark .chroma:not(.light) .kr { color: #0090f5 } /* Keyword.Reserved */
+.dark .chroma:not(.light) .kt { color: #dc322f } /* Keyword.Type */
+.dark .chroma:not(.light) .ld { color: #93a1a1 } /* Literal.Date */
+.dark .chroma:not(.light) .m { color: #09a598 } /* Literal.Number */
+.dark .chroma:not(.light) .s { color: #09a598 } /* Literal.String */
+.dark .chroma:not(.light) .na { color: #93a1a1 } /* Name.Attribute */
+.dark .chroma:not(.light) .nb { color: #B58900 } /* Name.Builtin */
+.dark .chroma:not(.light) .nc { color: #0090f5 } /* Name.Class */
+.dark .chroma:not(.light) .no { color: #ec662e } /* Name.Constant */
+.dark .chroma:not(.light) .nd { color: #0090f5 } /* Name.Decorator */
+.dark .chroma:not(.light) .ni { color: #ec662e } /* Name.Entity */
+.dark .chroma:not(.light) .ne { color: #ec662e } /* Name.Exception */
+.dark .chroma:not(.light) .nf { color: #0090f5 } /* Name.Function */
+.dark .chroma:not(.light) .nl { color: #93a1a1 } /* Name.Label */
+.dark .chroma:not(.light) .nn { color: #93a1a1 } /* Name.Namespace */
+.dark .chroma:not(.light) .nx { color: #93a1a1 } /* Name.Other */
+.dark .chroma:not(.light) .py { color: #93a1a1 } /* Name.Property */
+.dark .chroma:not(.light) .nt { color: #0090f5 } /* Name.Tag */
+.dark .chroma:not(.light) .nv { color: #0090f5 } /* Name.Variable */
+.dark .chroma:not(.light) .ow { color: #76a507 } /* Operator.Word */
+.dark .chroma:not(.light) .w { color: #93a1a1 } /* Text.Whitespace */
+.dark .chroma:not(.light) .mf { color: #09a598 } /* Literal.Number.Float */
+.dark .chroma:not(.light) .mh { color: #09a598 } /* Literal.Number.Hex */
+.dark .chroma:not(.light) .mi { color: #09a598 } /* Literal.Number.Integer */
+.dark .chroma:not(.light) .mo { color: #09a598 } /* Literal.Number.Oct */
+.dark .chroma:not(.light) .sb { color: #586e75 } /* Literal.String.Backtick */
+.dark .chroma:not(.light) .sc { color: #09a598 } /* Literal.String.Char */
+.dark .chroma:not(.light) .sd { color: #93a1a1 } /* Literal.String.Doc */
+.dark .chroma:not(.light) .s2 { color: #09a598 } /* Literal.String.Double */
+.dark .chroma:not(.light) .se { color: #ec662e } /* Literal.String.Escape */
+.dark .chroma:not(.light) .sh { color: #93a1a1 } /* Literal.String.Heredoc */
+.dark .chroma:not(.light) .si { color: #09a598 } /* Literal.String.Interpol */
+.dark .chroma:not(.light) .sx { color: #09a598 } /* Literal.String.Other */
+.dark .chroma:not(.light) .sr { color: #dc322f } /* Literal.String.Regex */
+.dark .chroma:not(.light) .s1 { color: #09a598 } /* Literal.String.Single */
+.dark .chroma:not(.light) .ss { color: #09a598 } /* Literal.String.Symbol */
+.dark .chroma:not(.light) .bp { color: #0090f5 } /* Name.Builtin.Pseudo */
+.dark .chroma:not(.light) .vc { color: #0090f5 } /* Name.Variable.Class */
+.dark .chroma:not(.light) .vg { color: #0090f5 } /* Name.Variable.Global */
+.dark .chroma:not(.light) .vi { color: #0090f5 } /* Name.Variable.Instance */
+.dark .chroma:not(.light) .il { color: #09a598 } /* Literal.Number.Integer.Long */
diff --git a/src/resources/css/common.css b/src/resources/css/common.css
index a6216e7..5f5b7e8 100644
--- a/src/resources/css/common.css
+++ b/src/resources/css/common.css
@@ -1,3 +1,99 @@
+:root {
+ --monospace-fonts: 'JetBrains Mono', monospace;
+}
+
+:root,
+.light {
+ --body-bg: white;
+ --text-color: #2c2c2c;
+ --text-color-muted: #7087a0;
+ --header-bg: rgba(118, 179, 194, 0.11);
+ --header-border-color: #ebf0f2;
+ --topbar-link-color-hover: black;
+ --topbar-link-bg-hover: rgb(244, 249, 251);
+ --main-nav-link-color: #546c75;
+ --main-nav-link-hover-color: #01324b;
+ --link-color: #0097f2;
+ --link-decoration-color: #ddd;
+ --link-hover-color: rgb(27, 170, 70);
+ --heading-color: var(--text-color);
+ --code-bg: #f2f8f9;
+ --dropdown-bg: #e8ecef;
+ --dropdown-linkbox: white;
+ --dropdown-link-title-color: #384f61;
+ --dropdown-link-color: #647687;
+ --dropdown-link-hover-bg: rgb(239, 244, 248);
+ --dropdown-link-hover-color: #142633;
+ --dropdown-featured-bg: linear-gradient(to bottom, rgb(239 244 247), transparent);
+ --dropdown-featured-hover-bg: rgb(223, 233, 238); /* rgb(232, 255, 254); */
+ --dropdown-shadow-color: rgb(0 0 0 / .25);
+ --box-bg: var(--header-border-color);
+}
+
+.dark {
+ --body-bg: #0d171a;
+ --text-color: #cbe2e4; /* #a4c0c2 */
+ --text-color-muted: #92b2d5;
+ --header-bg: rgba(44, 130, 164, 0.11);
+ --header-border-color: transparent;
+ --topbar-link-color-hover: white;
+ --topbar-link-bg-hover: rgb(255 255 255 / .1);
+ --main-nav-link-color: #86a7b1;
+ --main-nav-link-hover-color: #e2e9ec;
+ --link-color: #34a1e4;
+ --link-decoration-color: #375862;
+ --link-hover-color: rgb(42, 228, 98);
+ --heading-color: #dee8ee;
+ --code-bg: #1f3237;
+ --dropdown-bg: #152125; /* #34414b; */
+ --dropdown-linkbox: #1d2c32;
+ --dropdown-link-title-color: #f0f3f5;
+ --dropdown-link-color: #9ebeca;
+ --dropdown-link-hover-color: white;
+ --dropdown-link-hover-bg: rgb(30, 48, 63);
+ --dropdown-featured-bg: linear-gradient(to bottom, rgb(46, 58, 66), transparent);
+ --dropdown-featured-hover-bg: rgb(64, 82, 92);
+ --dropdown-shadow-color: black;
+ --box-bg: var(--header-bg);
+}
+
+.dark #logo-light,
+.dark-header #logo-light,
+#logo-dark {
+ display: none;
+}
+
+.dark #logo-dark,
+.dark-header #logo-dark {
+ display: initial;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
* {
margin: 0;
padding: 0;
@@ -5,279 +101,599 @@
}
body {
- font-family: Inter, sans-serif;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
+ font-family: Inter, system-ui;
+ font-size: 18px;
+ /* -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale; */
tab-size: 4;
- -moz-tab-size: 4;
+ background-color: var(--body-bg);
+ color: var(--text-color);
+}
+
+section.dark,
+footer {
+ background-color: #002020;
+ color: white;
+}
+
+main a {
+ color: var(--link-color);
+ text-decoration-line: underline;
+ text-decoration-thickness: 2px;
+ text-underline-offset: 2px;
+ text-decoration-color: var(--link-decoration-color);
+ transition: all .15s;
+}
+
+main a:hover {
+ color: var(--link-hover-color);
+ text-decoration-color: var(--link-color);
+}
+
+b,
+strong {
+ font-weight: 600;
+}
+
+code {
+ font-family: var(--monospace-fonts);
+ font-feature-settings: "liga" 0; /* prevent the merging of chars like "fi", relevant for Chivo Mono especially */
}
.wrapper {
max-width: 1400px;
margin-left: auto;
margin-right: auto;
- padding-left: 40px;
- padding-right: 40px;
-}
-
-.text-center {
- text-align: center;
-}
-
-.text-right {
- text-align: right;
-}
-
-.float-right {
- float: right;
-}
-
-a {
- color: #0694f1;
- text-decoration: none;
-}
-
-a:hover {
- color: #ff3f2c;
+ padding-left: 50px;
+ padding-right: 50px;
}
header {
- display: flex;
- justify-content: space-between;
- padding: 25px 0;
+ background: var(--header-bg);
+ position: relative;
+ z-index: 99;
}
-#logo-container {
- display: flex;
- flex-direction: column;
- align-items: flex-end;
-}
-
-#logo {
- height: 50px;
-}
-
-#zerossl-project {
- font-size: 12px;
- margin-top: -5px;
-}
-
-#zerossl-logo {
- height: 1.5em;
- vertical-align: middle;
-}
-
-header nav {
- text-align: right;
- line-height: 40px;
-}
-
-header nav > a {
- display: inline-block;
- padding-left: 12px;
- padding-right: 12px;
+header a {
text-decoration: none;
- color: inherit;
}
-header nav > a:hover {
- color: #ff3f2c;
+header nav>ul {
+ background: linear-gradient(to right, rgb(100 190 121), rgb(54 206 255));
+ background-clip: text;
+ -webkit-background-clip: text;
}
-header nav > a.current {
- font-weight: bold;
+.topbar {
+ font-size: 12px;
+ border-bottom: 1px solid hsl(203deg 100% 79% / 20%);
}
-/* Algolia DocSearch */
-#search {
+.topbar .wrapper {
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+ gap: 1em;
+ color: #777;
+}
+
+.topbar a {
display: inline-block;
+ padding: 10px 10px 8px;
+ color: #719bcc;
+ display: flex;
+ align-items: center;
+}
+
+.topbar a:hover {
+ background: var(--topbar-link-bg-hover);
+ color: var(--topbar-link-color-hover);
+}
+
+.navbar {
+ display: flex;
+ align-items: center;
+ gap: 2em;
+}
+
+.navbar .actions,
+.navbar nav ul {
+ flex-wrap: wrap;
+}
+
+header nav ul {
+ list-style: none;
+ margin: 0;
+ padding-left: 0;
+ display: flex;
+ align-items: center;
+ flex: 1;
+}
+
+.navbar nav>ul>li>a {
+ -webkit-text-fill-color: rgba(0 0 0 / .1);
+}
+
+.navbar nav>ul>li>a:hover {
+ -webkit-text-fill-color: rgba(255 255 255 / .4);
+}
+
+.navbar nav {
+ position: relative;
+}
+
+.navbar nav>ul>li>a,
+.navbar .button {
+ text-decoration: none;
+ transition: all 200ms;
+ font-weight: 500;
+}
+
+.navbar nav>ul>li>a {
+ padding: 20px 1.5em;
+ display: block;
+ font-family: Figtree, system-ui;
+ font-size: 16px;
+}
+
+.navbar .button {
+ font-size: 80%;
+}
+
+.icon {
+ height: 1.4em;
vertical-align: middle;
}
-.DocSearch-Container {
- color: initial;
-}
-.DocSearch-Footer {
- margin-top: 0;
-}
-/* End Algolia DocSearch */
-header nav .new {
- background-color: #ffe300;
- font-size: 75%;
- vertical-align: top;
- padding: 4px 8px;
- border-radius: 1em;
+.logo-link {
+ line-height: 0; /* avoid extra space along the bottom for some reason */
}
-header nav .button {
- margin: 0 0 0 10px;
- padding-top: 2px;
- padding-bottom: 2px;
-}
+.logo {
+ height: 2.25em;
+}
+
+.navbar .actions {
+ margin-left: auto;
+ display: flex;
+ gap: 1em;
+}
button,
.button {
- border-radius: 2em;
- padding: 10px 20px;
- margin: 15px 0;
- height: auto;
- transition: all .2s;
+ padding: .6em 1.5em;
+ border-radius: 6px;
text-decoration: none;
- display: inline-block;
- border: 0;
+ background: none;
cursor: pointer;
+
+ /* necessary for hoversplash: */
+ position: relative;
+ overflow: hidden;
+ display: inline-flex;
+ align-items: center;
+}
+
+.button {
+ color: rgb(54 206 255);
+ border: 1px solid rgb(54 206 255);
}
-button:hover,
.button:hover {
- transform: scale(1.05);
+ color: white;
+ border-color: white;
+}
+
+button.primary,
+.button.primary {
+ background: linear-gradient(135deg, white 25%, rgba(167, 183, 193) 80%);
+ color: #222;
+ font-weight: bold;
+ border: none;
+ box-shadow: 0 3px 5px rgba(0, 0, 0, 0.08);
+}
+
+button.primary:hover,
+.button.primary:hover {
+ color: #1a71cb;
}
button:active,
.button:active {
- transform: translateY(2px);
+ transition: all 75ms;
+ transform: scale(.95);
+ box-shadow: 1px 1px 3px inset rgba(0, 0, 0, 0.2);
}
-button.red,
-.button.red {
- background-color: #d9552b;
- color: white;
-}
-
-button.red:hover,
-.button.red:hover {
- background-color: #fd511a;
-}
-
-button.blue,
-.button.blue {
- background-color: #0082d0;
- color: white;
-}
-
-button.blue:hover,
-.button.blue:hover {
- background-color: #00aaff;
-}
-
-button.gray,
-.button.gray {
- background-color: #4c6a79;
- color: white;
-}
-
-button.gray:hover,
-.button.gray:hover {
- background-color: #4f8098;
-}
-
-button.big,
-.button.big {
- font-size: 125%;
- text-transform: uppercase;
+button.purple,
+.button.purple {
+ border: none;
+ background: linear-gradient(165deg, rgba(170,81,212,1) 20%, rgba(37,159,235,1) 100%);
+ color: white !important; /* sigh... to prevent being stepped on by very specific link color rule on the sponsors page */
font-weight: bold;
- padding: 20px 50px;
+ box-shadow: 0 2px 2px rgba(0, 0, 0, 0.25)
+}
+
+button svg,
+.button svg {
+ margin-right: .5em;
+}
+
+
+@keyframes hoverSplash {
+ 0% {
+ opacity: 1;
+ transform: translate3d(-50%, -50%, 0) scale3d(0, 0, 1);
+ }
+
+ 100% {
+ opacity: 0;
+ transform: translate3d(-50%, -50%, 0) scale3d(1, 1, 1);
+ }
+}
+
+.hover-splash {
+ pointer-events: none;
+ position: absolute;
+ /* z-index: 1; */
+ width: 200%;
+ height: 0;
+ padding-bottom: 200%;
+ border-radius: 50%;
+ /* transform: translate3d(-50%,-50%,0) scale3d(0,0,1); */
+ animation: 1s cubic-bezier(.16, 1, .3, 1) hoverSplash;
+}
+
+button .hover-splash,
+.button .hover-splash {
+ background-color: rgba(24, 156, 233, 0.6);
+}
+
+button.primary .hover-splash,
+.button.primary .hover-splash {
+ background-color: rgba(255, 255, 255, 0.6);
+}
+
+
+.dropdown {
+ font-size: 16px;
+ position: absolute;
+ display: inline-block;
+ background: var(--dropdown-bg);
+ border-radius: 15px;
+ line-height: 1.5;
+ overflow: hidden;
+ box-shadow: 0 50px 75px var(--dropdown-shadow-color);
+ visibility: hidden;
+ top: calc(100% - 5px);
+ left: 0;
+}
+
+.dropdown-trigger:hover .dropdown {
+ visibility: visible;
+ transform-origin: top left;
+ animation: rotateMenu 300ms ease;
+}
+
+@keyframes rotateMenu {
+ 0% {
+ transform: rotateX(-90deg) scale(0.75);
+ opacity: 0;
+ }
+
+ 100% {
+ transform: rotateX(0deg) scale(1);
+ opacity: 1;
+ }
+}
+
+
+.dropdown .row {
+ display: flex;
+ gap: 1px;
+ margin-bottom: 1px;
+}
+
+.dropdown .plainbox,
+.dropdown .linkbox {
+ display: flex;
+ gap: 4em;
+ padding: 1.5em;
+}
+
+.dropdown .plainbox {
+ padding-top: .5em;
+ width: 100%;
+ justify-content: space-around;
+}
+
+.dropdown .plainbox a {
+ color: var(--dropdown-link-color);
+}
+
+.dropdown .plainbox a:hover {
+ color: var(--dropdown-link-hover-color);
+}
+
+.dropdown .linkbox {
+ background: var(--dropdown-linkbox);
+ gap: 3em;
+ --link-padding-x: 10px;
+}
+
+.dropdown .links-header {
+ font-family: Poppins, ui-rounded;
+ font-weight: 600;
+ color: var(--dropdown-link-title-color);
+ font-size: 20px;
+ margin-bottom: 14px;
+ padding-left: var(--link-padding-x);
+}
+
+.dropdown .col {
+ min-width: 150px;
+}
+
+.dropdown .col a {
+ display: block;
+ color: var(--dropdown-link-color);
+ text-decoration: none;
+ padding: 5px var(--link-padding-x);
+ border-radius: 1.5em;
+}
+
+
+.dropdown .col a:hover {
+ color: var(--dropdown-link-hover-color);
+ background-color: var(--dropdown-link-hover-bg);
+}
+
+.dropdown .flatlinks a,
+.dropdown .featured a {
+ transition: background-color 150ms;
+ font-size: 12px;
+}
+
+.dropdown .flatlinks a {
+ background: var(--dropdown-linkbox);
+ padding: 1em 2em;
+ color: var(--dropdown-link-color);
+}
+
+.dropdown .flatlinks a b,
+.dropdown .featured a b {
+ display: block;
+ font-size: 16px;
+ font-weight: 600;
+}
+
+.dropdown .flatlinks a b {
+ color: var(--dropdown-link-title-color);
+ margin-bottom: .25em;
+}
+
+.dropdown .flatlinks a:hover {
+ /* background: rgb(239, 244, 248); */
+ background: var(--dropdown-link-hover-bg);
+}
+
+.dropdown .featured a b {
+ color: var(--dropdown-link-title-color);
+ margin-bottom: .5em;
+}
+
+.dropdown .featured a:hover b {
+ color: var(--dropdown-link-hover-color);
+}
+
+
+.dropdown .featured {
+ gap: 1em;
+ padding: 1em;
+ /* background: white; */
+}
+
+.dropdown .featured a {
+ display: block;
+ padding: 1em;
+ line-height: 1.4;
+ border-radius: 10px;
+ color: var(--dropdown-link-color);
+ background-color: var(--dropdown-linkbox);
+ background-image: var(--dropdown-featured-bg);
+ /* background-image: linear-gradient(to bottom, rgb(239 244 247), rgba(252,252,252,0)); */
+ /* background: linear-gradient(137deg, rgb(241 251 247) 0%, rgb(242 248 255) 100%); */
+ flex: 1;
+ box-shadow: 0 1px 2px rgb(0 0 0 / .2);
+}
+
+.dropdown .featured a:hover {
+ background-color: var(--dropdown-featured-hover-bg);
+}
+
+.dropdown .featured a b {
+ display: block;
+ color: var(--dropdown-link-title-color);
+ font-size: 16px;
+ margin-bottom: .5em;
+ font-weight: 600;
+}
+
+
+#current-theme {
+ text-transform: capitalize;
+}
+
+.construction-images {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-wrap: wrap;
+ gap: 20px;
+}
+
+.construction img {
+ margin-left: 20px;
margin-right: 20px;
+ max-width: 100%;
}
-button.disabled,
-.button.disabled,
-button:disabled,
-.button:disabled {
- background-color: #aaa !important;
- color: white !important;
- transform: none !important;
- cursor: not-allowed;
+.construction p {
+ width: 100%;
+ margin-left: auto;
+ margin-right: auto;
+ color: #e71414;
}
-p button,
-p .button {
- font-size: 18px;
- padding: 12px 30px;
-}
-article a:hover {
- text-decoration: underline;
-}
-
-pre,
-code,
-kbd {
- font-family: 'PT Mono', 'Source Code Pro', monospace;
- padding: 3px 6px;
- font-size: 95%;
- line-height: 1.5em;
-}
-
-kbd {
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
- border: 1px solid rgba(255, 255, 255, 0.1);
- font-size: 80%;
- font-weight: bold;
-}
-
footer {
- display: flex;
- justify-content: space-between;
- margin-top: 100px;
- padding-bottom: 100px;
- line-height: 125%;
-}
-
-footer > div {
- width: 50%;
-}
-
-#footer-logo {
- float: left;
- max-width: 150px;
- margin-right: 35px;
- vertical-align: middle;
- margin-top: -4px;
-}
-
-.copyright {
- text-align: right;
+ padding: 75px 0;
font-size: 14px;
- color: #999;
+ color: #7c9393;
+ line-height: 1.5;
}
-@media (max-width: 900px) {
- header {
- flex-direction: column;
- gap: 1em;
+footer p {
+ margin: 1em 0;
+}
+
+footer a {
+ color: inherit;
+ font-weight: bold;
+ transition: .25s;
+}
+
+footer a:hover {
+ color: #76b8b8;
+}
+
+footer .logo-area {
+ margin-right: auto;
+}
+
+footer .wrapper {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 75px;
+}
+
+footer .nostalgia {
+ display: block;
+ text-align: center;
+ margin-top: 40px;
+}
+
+footer .nostalgia-badges {
+ gap: 25px;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+ display: flex;
+ flex-wrap: wrap;
+ margin-top: 40px;
+}
+
+footer .nostalgia p {
+ margin: 0 auto 15px;
+ color: #d2f7e7;
+}
+
+footer .w3c {
+ width: 80px;
+ line-height: 0;
+}
+
+footer .logo {
+ display: block;
+ margin-bottom: 15px;
+ height: 40px;
+}
+
+footer .link-col {
+ font-size: initial;
+ line-height: 2;
+}
+
+footer .col-header {
+ font-size: 110%;
+ color: white;
+ font-weight: 700;
+ margin-bottom: .5em;
+}
+
+footer .link-col a {
+ display: block;
+ color: #b7c8c8;
+ font-weight: 500;
+ text-decoration: none;
+}
+
+footer .link-col a:hover {
+ color: #35655e;
+}
+
+
+
+/* Asciinema customizations */
+.ap-player pre.ap-terminal {
+ font-family: var(--monospace-fonts);
+}
+
+
+
+
+
+
+
+
+
+
+
+@media (max-width: 1150px) {
+ .dropdown {
+ display: none;
}
- #logo-container {
- align-items: center;
- }
-
- header nav {
- text-align: center;
- }
-
- footer {
- flex-direction: column;
- margin-top: 0;
- padding: 20px 0;
- }
-
- footer > div {
- width: initial;
- text-align: center;
- margin: 10px 0;
- }
-
- #footer-logo {
- float: none;
- display: block;
- margin: 0 auto 25px;
- }
-
- .copyright {
- text-align: center;
+ .wrapper {
+ padding-left: 20px;
+ padding-right: 20px;
}
}
+
+@media (max-width: 950px) {
+ header nav ul {
+ justify-content: space-evenly;
+ }
+
+ .topbar .wrapper {
+ justify-content: center;
+ flex-wrap: wrap;
+ gap: 0;
+ }
+
+ .logo {
+ height: 3em;
+ }
+
+ .navbar {
+ flex-direction: column;
+ gap: 0;
+ padding: 1em 0;
+ }
+
+ .navbar nav {
+ margin: .5em 0;
+ }
+
+ .navbar .actions {
+ margin: 0 auto;
+ }
+
+ .navbar nav > ul > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ }
+}
\ No newline at end of file
diff --git a/src/resources/css/docs.css b/src/resources/css/docs.css
index 0b25e3a..0da8c54 100644
--- a/src/resources/css/docs.css
+++ b/src/resources/css/docs.css
@@ -1,121 +1,148 @@
+:root, .light {
+ --header-bg: transparent;
+ --button-color: rgb(64, 131, 153);
+ --button-border-color: rgb(198, 217, 223);
+ --button-color-hover: rgb(7, 86, 134);
+ --button-border-color-hover: rgb(155, 191, 213);
+ --nav-current-bg: linear-gradient(to right, #ecf1f3, transparent);
+ --nav-link-hover-shadow-color: rgba(0, 0, 0, 0.15);
+ --nav-link-hover-before-bg: #d2e5e7;
+ --autonav-bg: #fff;
+ --pagenav-hover-bg: #f4f7f9;
+ --cmd-bg: #333;
+ --tip-color: #5c50bb;
+ --menu-toggle-bg: #e4f1f2;
+}
+
+.dark {
+ --header-bg: rgba(44, 130, 164, 0.11);
+ --button-color: rgb(36, 166, 208);
+ --button-border-color: rgb(38, 116, 140);
+ --button-color-hover: rgb(0, 194, 255);
+ --button-border-color-hover: rgb(0, 194, 255);
+ --nav-current-bg: linear-gradient(to right, #1a3c4d, transparent);
+ --nav-link-hover-shadow-color: rgba(255, 255, 255, 0.15);
+ --nav-link-hover-before-bg: #32494f;
+ --autonav-bg: #34404d;
+ --pagenav-hover-bg: #18262f;
+ --cmd-bg: black;
+ --tip-color: #a6b2f7;
+ --menu-toggle-bg: #274d5c;
+}
+
+
+
+
+
+html,
body {
- font-family: Maven Pro, sans-serif;
- background: #f1f4f5;
+ min-height: 100%;
+}
+
+body {
+ background-image:
+ radial-gradient(at calc(50% - min(25vw, 800px)) -10%, hsl(137.64deg, 100%, 92.42%) 0px, transparent min(15%, 500px)),
+ radial-gradient(at calc(50% + min(25vw, 800px)) -10%, hsl(201.2deg, 68%, 90.2%) 0px, transparent min(15%, 500px));
+ background-repeat: no-repeat;
+}
+
+
+.dark body {
+ background-image:
+ radial-gradient(at calc(50% - min(35vw, 700px)) -10%, hsl(129.5deg, 100%, 12.4%) 0px, transparent min(25%, 600px)),
+ radial-gradient(at calc(50% + min(35vw, 700px)) -10%, hsl(201deg, 100%, 19.33%) 0px, transparent min(25%, 600px))
+}
+
+.wrapper {
+ max-width: 1800px;
}
header {
- padding: 20px 40px;
+ border-bottom: 1px solid var(--header-border-color);
}
-#logo-container {
- align-items: flex-start;
+.topbar {
+ border-bottom: 0;
}
-#logo-docs-container {
- display: flex;
- align-items: center;
+button,
+.button {
+ color: var(--button-color);
+ border: 1px solid var(--button-border-color);
+}
+button:hover,
+.button:hover {
+ color: var(--button-color-hover);
+ border: 1px solid var(--button-border-color-hover);
+}
+button.primary,
+.button.primary {
+ background: linear-gradient(135deg, #7ece98 25%, rgb(49, 155, 208) 80%);
+ color: white;
+ border: none;
+}
+button.primary:hover,
+.button.primary:hover {
+ color: white;
+}
+.button.purple:hover {
+ border: none;
}
-#logo {
- height: 35px;
-}
-
-#logo-docs {
- font-family: Montserrat, sans-serif;
- font-weight: bold;
- text-transform: uppercase;
- color: #0e495e;
- margin-left: 10px;
- font-size: 12px;
-}
-
-#zerossl-project {
- padding-left: 2em;
-}
-
-#search {
- margin-top: 0;
-}
-
-header nav {
- font-size: 16px;
- line-height: 2em;
-}
-
-header nav .button {
- padding-top: 4px;
- padding-bottom: 4px;
-}
-
-.breadcrumbs {
- padding: 10px 20px !important;
- margin-bottom: 0 !important;
- color: #2861aa;
- font-size: 16px;
- font-weight: bold;
- line-height: 1.75em;
-}
-
-#top-breadcrumb {
- font-weight: bold;
-}
-
-#top-breadcrumb:not(:hover) {
- color: #2861aa;
-}
-
-.breadcrumbs a {
- font-weight: normal;
- text-decoration: none;
-}
-
-.breadcrumb-siblings-title {
- padding: 10px;
- font-weight: bold;
-}
-
-.breadcrumb-siblings a {
- display: block;
- padding: 0 10px;
- text-decoration: none;
-}
-
-.breadcrumb-siblings a+a {
- padding-top: 10px;
-}
-
-.breadcrumb-siblings a:last-child {
- padding-bottom: 10px;
-}
main {
+ margin-top: 50px;
+ font-family: Inter, system-ui;
+}
+
+
+
+
+
+
+
+
+
+
+.docs {
display: flex;
- justify-content: space-between;
-}
-
-main > .sidebar {
- width: 18%;
- flex-shrink: 0;
- flex-grow: 1;
- padding: 20px;
- max-width: 400px;
-}
-
-main > .sidebar:last-child {
- flex-shrink: 1;
-}
-
-main > nav.sidebar {
- position: relative;
font-size: 16px;
}
-main nav li img,
-article li img,
-img.external-link {
- max-height: .9em;
+.docs nav,
+#pagenav {
+ flex: 1;
}
+.docs nav {
+ min-width: 250px;
+}
+
+#docs-menu {
+ background: var(--menu-toggle-bg);
+ padding: 1em;
+ cursor: pointer;
+ display: none;
+}
+
+#pagenav .heading {
+ display: none;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
main nav ul {
list-style-type: none;
}
@@ -124,117 +151,126 @@ main nav li {
position: relative;
}
-main nav li a {
+main nav li li::before {
+ content: '';
+ display: block;
+ position: absolute;
+ width: 1px;
+ height: 100%;
+ background-color: var(--nav-link-hover-before-bg);
+ transition: .15s;
+}
+
+main nav li li:hover::before {
+ background-color: #62868d;
+ width: 4px;
+}
+
+main nav ul li a,
+main nav .heading,
+#autonav a {
+ padding: 8px 18px 8px 28px;
+}
+/*
+main nav li a,
+#pagenav a {
+ color: #546c75;
+} */
+
+main nav a {
display: block;
text-decoration: none;
color: inherit;
border-radius: 1.5em;
- padding: 6px 18px 6px 28px;
- color: #546c75;
+ color: var(--main-nav-link-color);
+ transition: .15s;
}
-
-main nav li a:hover {
- color: #01324b;
+main nav li:hover > a,
+#autonav a:hover,
+#pagenav a:hover {
+ color: var(--main-nav-link-hover-color);
}
-main nav li a:before {
+
+main nav li:hover > a {
+ /* background: #f6fafc; */
+ box-shadow: -10px 0 10px -3px var(--nav-link-hover-shadow-color);
+}
+
+main nav > ul > li > a::before {
content: '\203A';
font-weight: bold;
- font-size: 20px;
- line-height: 1rem;
+ font-size: 150%;
+ line-height: .75;
position: absolute;
opacity: 0;
left: 0;
transition: left .15s, opacity .15s;
}
-main nav li a:hover:before {
+main nav li a:hover::before {
opacity: 1;
- left: .75em;
-}
-
-main nav li li a:hover:before {
- left: 1.25em;
+ left: .75rem;
}
main nav li a.current {
- background-color: #e0e8f0;
+ background: var(--nav-current-bg);
}
-main nav li.heading {
+main nav .heading {
font-weight: bold;
text-transform: uppercase;
- font-size: 90%;
+ font-size: 80%;
letter-spacing: 1px;
- padding: 10px 20px 10px 2em;
}
-main nav li.heading:not(:first-child) {
- margin-top: 20px;
+main nav ul:not(:first-child) > .heading {
+ margin-top: 2.5em;
}
main nav li li a {
- padding-top: 6px;
- padding-bottom: 4px;
- padding-left: 3em;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ padding-left: 1em;
+ transition: padding .15s;
+}
+
+main nav li li a:not(#autonav a) {
font-size: 90%;
}
-.paper {
- width: 100%;
-
- background: white;
- border-radius: 4px;
- box-shadow: 1px 2px 4px 1px rgba(0, 0, 0, .15);
+main nav li ul {
+ margin-left: 2.5em;
+ margin-bottom: .5em;
}
-#paper1,
-#paper2 {
- background: #f8fafb;
- max-height: 1500px;
-}
-#paper1 {
- margin-top: -20px;
- margin-left: 20px;
- transform: rotate(3deg);
- z-index: -1;
-}
-#paper2 {
- margin-top: 30px;
- margin-left: calc(-100% - 20px);
- transform: rotate(-5deg);
- z-index: -1;
-}
-.paper3 {
- margin-top: 20px;
- margin-left: -100%;
-}
-.article-container {
- display: flex;
- align-content: flex-start;
- flex-grow: 1;
- min-width: 0;
- margin: 20px;
- margin-bottom: 0;
- width: 100%;
- max-width: 1100px;
-}
-.pad {
- padding-top: 8%;
-}
+
+
+
+
+
+
+
+
+
+
+
article {
- padding-top: 8%;
- padding-bottom: 8%;
+ font-family: 'Albert Sans', system-ui; /* considered: Figtree, Asisstant, Red Hat Text, Be Vietnam Pro
font-size: 20px;
word-wrap: break-word;
+
+ max-width: 1100px;
+ min-width: 0;
+ width: 100%;
}
/*
@@ -243,13 +279,13 @@ server-side from markdown to have a constrained
width, a few elements should be allowed to
extend to the borders of the page
*/
-article > :not(.fullwidth),
+article > :not(.fullwidth, .fullspan),
article > .fullwidth > *,
.pad {
padding-left: 8%;
padding-right: 8%;
}
-article > :not(h1),
+article > :not(h1, hr),
dd,
article p,
article ol,
@@ -286,7 +322,7 @@ article ul ol {
article p,
article li {
- line-height: 1.5em;
+ line-height: 1.75;
}
article li p,
@@ -295,52 +331,64 @@ article li ol {
margin-bottom: .5em;
}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
+article h1,
+article h2,
+article h3,
+article h4,
+article h5,
+article h6 {
/* to ensure that the anchor-link icons stay inside the heading */
position: relative;
+
+ font-family: Gantari;
+ font-weight: 800;
+ color: var(--heading-color);
}
-h1,
-h2 {
+article h1,
+article h2,
+article h3 {
text-align: center;
}
-h1 {
+article h1 {
font-size: 72px;
color: #0e3e5b;
letter-spacing: -2px;
+ margin-top: 5%;
margin-bottom: 50px;
+
+ background: linear-gradient(to right, #23a1ec, #3fd53a);
+ background-clip: text;
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
}
-h2 {
- font-size: 46px;
+article h2 {
+ font-size: 56px;
padding-bottom: 15px;
- border-bottom: 4px solid #72abe8;
- margin: 100px 0 40px !important;
+ margin: 100px 0 40px;
+
+ border-image-slice: 1;
+ border-bottom-width: 10px;
+ border-bottom-style: solid;
+ border-image-source: linear-gradient(to left, #23a1ec, #3fd53a);
}
-h3 {
- font-size: 40px;
+article h3 {
+ font-size: 36px;
margin: 50px 0 20px;
+ font-weight: 600;
+ text-align: center;
}
-h4 {
- font-size: 32px;
+article h4 {
+ font-size: 24px;
margin: 25px 0 15px;
}
-h5 {
- font-size: 26px;
- margin: 2em 0 1em;
-}
-
-h6 {
- font-size: 20px;
+article h5 {
+ font-size: 22px;
margin: 2em 0 1em;
}
@@ -349,9 +397,10 @@ h6 {
font-size: .6em;
border-radius: 10px;
padding: .3em .5em;
- margin-left: .25em;
position: absolute;
top: 5px;
+ left: 0;
+ text-decoration: none;
}
*:hover > .anchor-link,
@@ -364,14 +413,15 @@ h6 {
background-color: rgba(0, 0, 0, .075);
}
-code,
-kbd {
- background-color: #e9f1fb;
- border-radius: 5px;
+code {
+ background-color: var(--code-bg);
+ border-radius: 6px;
+ padding: 2px 5px;
+ font-size: 90%;
}
code.cmd {
- background-color: #333;
+ background-color: var(--cmd-bg);
color: #eaeaea;
}
@@ -385,11 +435,13 @@ pre.chroma,
pre > code,
article > pre {
padding: 1em;
+ line-height: 1.6;
overflow: auto;
}
-pre > code.cmd {
- border-radius: 5px;
+pre > code.cmd,
+.chroma {
+ border-radius: 10px;
}
code.cmd.bash,
@@ -447,8 +499,9 @@ dd {
hr {
border: none;
- border-top: 8px solid #34669b;
- margin: 4em 0;
+ border-top: 4px solid var(--link-decoration-color);
+ margin: 4em auto;
+ width: 35%;
}
article img {
@@ -459,51 +512,6 @@ iframe {
margin: 1em 0 2em;
}
-.nonstandard-notice {
- font-size: 14px;
- max-width: 500px;
- margin: 25px auto;
- border: 1px solid #ecd200;
- background: #fffddf;
- border-radius: 5px;
- padding: 10px;
- color: #886c00;
- line-height: 1.4em;
- display: none;
-}
-
-.nonstandard {
- color: rgb(214, 145, 16);
-}
-
-.standard-flag,
-.nonstandard-flag {
- cursor: help;
- font-size: 8px;
- line-height: 1em;
- padding: 4px 8px;
- text-transform: uppercase;
- font-weight: bold;
- color: white;
- border-radius: 4px;
- white-space: nowrap;
- vertical-align: middle;
-}
-
-.standard-flag {
- background-color: rgb(34, 163, 23);
-}
-
-.nonstandard-flag {
- background-color: rgb(238, 167, 34);
-}
-
-.module-repo-differentiator {
- font-size: 11px;
- font-weight: bold;
- color: #555;
- line-height: 1em;
-}
@@ -511,149 +519,8 @@ iframe {
-.json {
- line-height: 1.5em;
-}
-.json .qu { color: #5c91bf; }
-.json .key { color: #1c83dc; font-weight: bold; }
-.json .str { color: #2f8598; }
-.json .num { color: #038a3f; }
-.json .bool { color: #9b5e14; }
-.json .key a:not([href]) { color: #222; }
-article .json a {
- text-decoration: none;
- font-weight: bold;
-}
-.json .has-popup { border-bottom: 1px dashed #222; }
-.json a[href].has-popup { border-bottom-color: #1c82dc; }
-.json .has-popup.module { border-bottom: none; }
-#hovercard {
- max-width: 450px;
- border-radius: 10px;
- filter: drop-shadow(0 5px 5px rgba(0, 0, 0, .25));
- position: absolute;
- font-size: 16px;
- transition: transform .25s ease-in-out, opacity .25s ease-in-out;
- /* TODO: This would be nice, but it breaks the arrow-box... */
- /* max-height: 50%;
- overflow-y: auto; */
-}
-
-#hovercard:not(.popup) {
- opacity: 0;
- display: none;
- transform: translateY(0);
-}
-
-.popup {
- display: block;
- opacity: 1;
- transform: translateY(-10px);
-}
-
-.arrow-box {
- position: relative;
- background: white;
-}
-
-.arrow-box:after {
- bottom: 100%;
- left: 50%;
- border: solid transparent;
- content: " ";
- height: 0;
- width: 0;
- position: absolute;
- pointer-events: none;
- border-color: rgba(255, 255, 255, 0);
- border-bottom-color: white;
- border-width: 10px;
- margin-left: -10px;
-}
-
-#hovercard p {
- padding: 1em;
- line-height: 1.4em;
-}
-
-#hovercard p+p {
- padding-top: 0;
-}
-
-#hovercard li {
- margin: .25em;
-}
-
-#hovercard pre > code {
- border-radius: 0;
-}
-
-#hovercard li {
- padding-top: 0;
- padding-bottom: 0;
-}
-
-#hovercard .nonstandard-flag {
- float: right;
-}
-
-#hovercard .module-link {
- display: block;
- text-decoration: none;
- font-size: 18px;
- line-height: 1em;
- font-weight: bold;
- padding: .5em 1em;
-}
-
-#hovercard .module-link:hover {
- background: #f5f5f5;
-}
-
-#hovercard .module-link:last-child {
- border-bottom-left-radius: 10px;
- border-bottom-right-radius: 10px;
-}
-
-#hovercard .module-link-description {
- font-size: 14px;
- color: #555;
- margin-left: .5em;
- font-weight: normal;
-}
-
-#hovercard-namespace-box,
-#hovercard-inline-link {
- border: 0px solid #f0f6f7;
-}
-
-#hovercard-namespace-box {
- border-bottom-width: 1px;
-}
-
-#hovercard-inline-link {
- border-top-width: 1px;
-}
-
-#hovercard-inline-link a {
- display: block;
- padding: 8px 10px;
- text-decoration: none;
- font-size: 85%;
- font-weight: bold;
- text-align: center;
-}
-
-#hovercard-namespace {
- font-weight: bold;
-}
-
-.explain {
- font-style: italic;
- color: #777;
-}
article aside {
position: relative;
@@ -676,8 +543,10 @@ article aside.advice::before {
}
article aside.tip {
- color: #706b95;
+ color: var(--tip-color);
}
+
+
article aside.advice {
color: #826848;
}
@@ -740,112 +609,168 @@ td code {
word-wrap: break-word;
}
-blockquote {
- background-color: #f0f5f1;
- padding-top: 2em;
- padding-bottom: 2em;
+
+.box {
+ border-radius: 10px;
+ padding: 1em;
+ margin: 1em;
+ font-size: 18px;
+ border: 2px solid var(--box-bg);
+}
+
+.box-filled {
+ border: none;
+ background: var(--box-bg);
+}
+
+.box-capped {
+ padding: 0;
+}
+
+.box-capped > * {
+ padding: 1em;
+}
+
+.box-cap {
+ border-bottom: 1px solid var(--box-bg);
+}
+
+.box-filled .box-cap {
+ border-bottom: 1px solid var(--button-border-color); /* #d0dfe6; */
+}
+
+.box > :first-child {
+ margin-top: 0;
+}
+.box > :last-child {
+ margin-bottom: 0;
+}
+
+.box:not(.box-capped) > :first-child {
+ padding-top: 0;
+}
+.box:not(.box-capped) > :last-child {
+ padding-bottom: 0;
+}
+
+.box h3 {
+ font-size: 125%;
+ margin: 0 0 .5em;
+ text-align: left;
}
-
-
-
-#module-docs-container,
-#module-list-container,
-#module-template {
+#autonav {
+ position: absolute;
display: none;
+ left: 80%;
+ top: 0;
+ background: var(--autonav-bg);
+ box-shadow: 0 10px 40px rgb(0 0 0 / .2);
+ border-radius: 10px;
+ border-top-left-radius: 0;
+ min-width: 250px;
+ max-width: 350px;
+ z-index: 999;
+ padding-top: .5em;
+ padding-bottom: .5em;
+ max-height: 400px;
+ overflow: hidden;
+ overflow-y: auto;
+ font-size: 14px;
}
-#module-list-container {
- overflow-x: auto;
+main nav ul > li:hover #autonav {
+ display: block;
}
-#module-list {
- margin-top: 50px;
+#autonav .heading {
+ color: #888;
}
-#module-list td:first-child {
- word-wrap: break-word;
- max-width: 400px;
+#autonav a {
+ transition: none;
+ border-radius: 0;
}
-#module-list .module-link {
- font-weight: bold;
- font-size: 20px;
+#autonav a:hover {
+ color: #01324b;
+ background: #f1f7fb;
}
-#module-multiple-repos {
- display: none;
- margin: 25px;
+
+
+#pagenav .heading {
+ padding-left: .75em;
}
-.module-repo-selector {
- font-size: 26px;
- padding: 25px;
- font-weight: bold;
- border-bottom: 1px solid #888;
+#pagenav a {
+ display: block;
+ animation: fadeIn 500ms;
+ padding: .75em;
+ font-size: 90%;
+}
+
+#pagenav a:hover {
+ background: var(--pagenav-hover-bg);
+}
+
+@keyframes fadeIn {
+ 0% { opacity: 0; transform: translateY(2em); }
+ 100% { opacity: 1; transform: translateY(0); }
+}
+
+
+
+
+.quick-assist-history {
+ font-size: 90%;
+
+ display: flex;
+ flex-wrap: wrap;
+ gap: .5em;
+}
+
+.quick-assist-history > a {
+ display: inline-block;
+ color: var(--text-color-muted);
+ text-decoration: none;
cursor: pointer;
}
-.module-repo-selector:hover {
- color: #009cda;
- background: rgb(246, 250, 252);
+.quick-assist-history > a:hover {
+ color: #216688;
+ text-decoration: underline;
}
-.module-repo-selector-arrow {
- margin: 10px;
+.quick-assist-history > a:not(:first-child):before {
+ content: '>';
+ margin-right: .5em;
+ display: inline-block;
+ color: #809783;
}
-
-
-
-.tabs .tab-buttons {
- display: flex;
- font-size: 0;
- border-bottom: 2px solid #ccc;
- border-radius: 0.5em;
- margin: 0 16px 0 16px;
-}
-.tabs .tab-buttons button {
- font-family: inherit;
- border-radius: 0.5em 0.5em 0 0;
- background-color: transparent;
- border: 2px solid;
- border-color: transparent;
- font-size: 16px;
- margin-bottom: 0;
- margin-right: 8px;
- margin-bottom: -2px;
- transition: unset;
- transform: unset;
-}
-.tabs .tab-buttons button:hover {
- border-color: #ddd;
- border-bottom-color: #ccc;
-}
-.tabs .tab-buttons button.active {
- border-color: #ccc;
- border-bottom-color: white;
+h3.quick-assist-question {
+ font-size: 150%;
}
-.tabs .tab {
- border-style: solid;
- border-color: #ccc;
- border-width: 0;
- padding: 1.5rem 16px 0 20px;
- margin-top: -2px;
-}
-.tabs .tab pre {
- padding: 0;
-}
-.tabs .tab.bordered {
- border-width: 2px;
- border-radius: 8px;
+.quick-assist-options {
+ margin-top: 1.5em;
+ display: grid;
+ gap: 1em;
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
}
+.quick-assist-options > div {
+ display: contents;
+}
-
+.quick-assist button,
+.quick-assist .button {
+ font-size: 100%;
+ min-height: 3.5em;
+}
@@ -858,249 +783,38 @@ blockquote {
@media (max-width: 1400px) {
- table {
- font-size: 14px;
- }
-
- h1 {
- font-size: 60px;
- }
-
- h2 {
- font-size: 38px;
- margin-top: 65px;
- }
-
- h3 {
- font-size: 28px;
- margin-top: 40px;
- }
-}
-
-@media (max-width: 1100px) {
- header {
- padding-bottom: 0;
- }
-
- main > .sidebar {
- min-width: 200px;
- padding: 20px 10px 0 0;
- }
-
- main > .sidebar:last-child {
+ #pagenav {
display: none;
}
-
- #paper1,
- #paper2 {
- display: none;
- }
- .paper3 {
- margin-top: 0;
- margin-left: 0;
- }
-
- article {
- font-size: 18px;
- padding-top: 40px;
- padding-bottom: 40px;
- }
-
- article > :not(.fullwidth),
- article > .fullwidth > * {
- padding-left: 40px;
- padding-right: 40px;
- }
- article > :not(h1) {
- margin-bottom: 1.5rem;
- }
-
- article > pre.chroma {
- padding-top: 1em;
- padding-bottom: 1em;
- }
-
- h1 {
- font-size: 45px;
- }
-
- h2 {
- font-size: 32px;
- }
}
-@media (max-width: 900px) {
- #logo-container {
- align-items: center;
+@media (max-width: 950px) {
+ #autonav {
+ display: none !important;
}
- #logo {
- height: 55px;
+ .docs {
+ flex-direction: column;
}
- #logo-docs {
- display: none;
+ #docs-menu {
+ display: block;
}
- main {
- flex-direction: column-reverse;
- align-items: center;
+ #docs-menu-container {
+ height: 0;
+ overflow: hidden;
+ transition: height 250ms ease-out;
+ display: flex;
+ flex-wrap: wrap;
}
- main > .sidebar {
- width: 100%;
- border-width: 0;
- border-top-width: 2px;
+ .docs nav ul {
+ min-width: 250px;
+ flex: 1;
}
- .article-container {
- max-width: 100%; /* TODO: why is this necessary?? without it, article overflows super wide on narrow screen */
- margin: 20px 0;
- }
-
- .paper {
- border-radius: 0;
- box-shadow: none;
- }
-}
-
-
-
-@media (prefers-color-scheme: dark) {
- body {
- background-color: #060e17;
- color: #bdd6f7;
- }
-
- header nav .new {
- color: black;
- }
-
- /* Algolia DocSearch */
- #search {
- --docsearch-searchbox-background: rgb(28, 52, 79);
- --docsearch-searchbox-focus-background: rgb(28, 52, 79);
- --docsearch-text-color: #bdd6f7;
- --docsearch-muted-color: #96a9c4;
- --docsearch-key-gradient: linear-gradient(-26.5deg, #060e17 0%, rgb(47, 62, 72) 100%);
- --docsearch-key-shadow: inset 0 -2px 0 0 #4c4c56, inset 0 0 1px 1px rgb(70, 70, 70), 0 1px 2px 1px rgba(77, 79, 91, 0.4);
- }
- /* End Algolia DocSearch */
-
- #paper1,
- #paper2 {
- background-color: #030a11;
- }
- .paper3 {
- background-color: #051628;
- }
-
- #logo {
- filter: invert(1) hue-rotate(180deg);
- }
- #zerossl-logo {
- filter: invert(1) hue-rotate(180deg);
- }
- #footer-logo {
- filter: invert(1) hue-rotate(180deg);
- }
-
- #logo-docs {
- color: #5aa3dc;
- }
-
- .breadcrumbs {
- color: #5aa3dc;
- }
-
- main nav li a {
- color: #668d9b;
- }
-
- main nav ul li a:hover {
- color: #5aa3dc;
- }
-
- main nav ul li a.current {
- background-color: #061b35;
- }
-
- .breadcrumbs {
- border-color: #061b35;
- }
-
- h1 {
- color: #5aa3dc;
- }
-
- code,
- kbd {
- background-color: #122844;
- }
-
- code.cmd {
- background-color: #000;
- color: #ccc;
- }
-
- .json .key a:not([href]) {
- color: #bdd6f7
- }
-
- #hovercard,
- .arrow-box {
- background-color: #0a192b;
- }
-
- .arrow-box:after {
- border-bottom-color: #0a192b;
- }
-
- #hovercard .module-link:hover {
- background: #0f2c50;
- }
-
- #hovercard .module-link-description {
- color: rgb(167, 167, 167);
- }
-
- #hovercard-namespace-box,
- #hovercard-inline-link {
- border-color: #0a2b53;
- }
-
- article aside.tip {
- color: #8c81e4;
- }
-
- th {
- background-color: #142638;
- }
-
- th,
- td {
- border-bottom-color: #233444;
- }
-
- blockquote {
- background-color: #101010;
- }
-
- .tabs .tab-buttons {
- border-color: #33659a;
- }
- .tabs .tab-buttons button {
- color: #bdd6f7;
- }
- .tabs .tab-buttons button:hover {
- border-color: #284c71;
- border-bottom-color: #33659a;
- }
- .tabs .tab-buttons button.active {
- border-color: #33659a;
- border-bottom-color: #051628;
- }
- .tabs .tab {
- border-color: #33659a;
+ main nav ul .heading {
+ margin-top: 2.5em !important;
}
}
diff --git a/src/resources/css/features.css b/src/resources/css/features.css
new file mode 100644
index 0000000..79d8fd1
--- /dev/null
+++ b/src/resources/css/features.css
@@ -0,0 +1,144 @@
+h3 {
+ margin-left: 0;
+}
+
+/* .datagrid {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 2em;
+ margin-top: 50px;
+}
+
+.datagrid h4 {
+ color: #668591;
+ font-size: 12px;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ margin-bottom: .5em;
+ min-width: 200px;
+} */
+
+.legend {
+ margin-bottom: -100px;
+ margin-left: auto;
+ margin-right: auto;
+ font-size: 24px;
+ color: var(--text-color-muted);
+ text-align: center;
+ max-width: 750px;
+ line-height: 1.5;
+}
+
+.legend .nonstandard {
+ font-weight: bold;
+}
+
+.feature-list {
+ font-size: 90%;
+ margin: 50px 0 125px;
+}
+
+.feature-list:last-child {
+ margin-bottom: 0;
+}
+
+.feature-row {
+ display: grid;
+ gap: 2em;
+ padding: 2em 0;
+ border-bottom: 2px dashed #a4c8ff25; /* #e6eaf0 */
+}
+
+.feature-row:last-child {
+ padding-bottom: 0;
+}
+
+.feature-row .benefits {
+ color: var(--text-color-muted);
+}
+
+.feature-row .benefits p:first-child {
+ margin-top: 0;
+}
+
+.feature-row .detail {
+ font-weight: 500;
+}
+
+.feature-row ul.detail,
+.feature-row .detail ul {
+ margin-left: 1em;
+}
+
+.feature-row .detail ul {
+ margin-top: 1em;
+}
+
+.feature-row ul li {
+ margin-bottom: .5em;
+}
+
+.feature-row:last-child {
+ border-bottom: none;
+}
+
+.nonstandard {
+ color: #e76100; /* #005c94 */
+}
+
+.dark .nonstandard {
+ color: #fb8a26;
+}
+
+
+.split {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ margin-bottom: 75px;
+ align-items: center;
+}
+
+.split > * {
+ flex: 1;
+ margin-right: 50px;
+ min-width: 0;
+}
+
+.split picture {
+ min-width: 0;
+}
+
+.split img,
+.benefits img {
+ margin: 2em 0 0;
+ max-width: 100%;
+ box-shadow: 0 6px 10px rgb(0 0 0 / .15);
+ border-radius: 8px;
+}
+
+
+
+
+
+
+@media (min-width: 600px) and (max-width: 899px) {
+ .feature-row .detail {
+ grid-area: 1/2/span 3/2;
+ }
+ .feature-row .benefits {
+ grid-area: 2 / 1;
+ }
+}
+
+@media (min-width: 600px) {
+ .feature-row {
+ grid: repeat(3,auto) / 1fr 1fr;
+ }
+}
+
+@media (min-width: 900px) {
+ .feature-row {
+ grid: auto / 1fr 2fr 1fr;
+ }
+}
\ No newline at end of file
diff --git a/src/resources/css/home.css b/src/resources/css/home.css
index 2de3ae0..9ade01c 100644
--- a/src/resources/css/home.css
+++ b/src/resources/css/home.css
@@ -1,338 +1,423 @@
-body {
- font-family: 'Inter', sans-serif;
+.bgtext,
+.demobox {
+ font-family: Poppins, ui-rounded;
}
+
.hero {
- background-image: url('/resources/images/bg-teal.jpg');
- background-repeat: no-repeat;
- background-size: cover;
- padding-bottom: 100px;
- background-position: center;
+ padding-bottom: 20vw;
}
+.hero-content {
+ padding-bottom: 100px;
+}
+
+.demobox .or {
+ margin: -1em 0 1em;
+}
+
+
+
h1 {
+ text-align: left;
text-transform: uppercase;
- font-size: 70px;
- font-family: Montserrat, sans-serif;
- text-align: center;
- margin: 70px 0 20px;
+ margin-bottom: 0;
+ line-height: .9;
+
+ background-image: unset;
+ -webkit-background-clip: unset;
+ background-clip: unset;
+ -webkit-text-fill-color: unset;
}
-h2 {
- font-size: 28px;
+h1 .color-dodge {
+ mix-blend-mode: color-dodge;
+}
+
+h1 .the {
+ font-size: 60%;
+ line-height: 1;
+}
+
+h1 .subheading {
+ margin-top: .75em;
+}
+
+h3 a {
+ color: inherit;
+}
+
+
+.sponsors-leaders {
+ position: relative;
+ text-align: center;
+ margin: 75px auto;
+ padding: 35px;
+ z-index: 0;
+}
+
+.sponsors-leaders::before {
+ content: "";
+ position: absolute;
+ padding: 40px;
+ background-color: rgb(207 27 189 / .2);
+ filter: blur(10px);
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: -1;
+ pointer-events: none;
+}
+
+.sponsors-leaders h3 {
+ color: #EB5EDD;
font-weight: normal;
+ font-size: 18px;
+ margin-bottom: 2em;
+ border-left: 0;
+ margin-left: 0;
+ padding-left: 0;
+}
+
+.sponsor-logos {
+ display: flex;
+ column-gap: 50px;
+ row-gap: 25px;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: center;
+ max-width: 900px;
+ margin: 1.5em auto;
+}
+
+.sponsors-divider {
+ border-top: 1px solid #634772;
+ max-width: 200px;
+ width: 100%;
+ margin: 0 auto;
+}
+
+
+
+
+
+.wavy-top {
+ background-color: #C4D5E0;
+ margin-top: -10vw;
+ position: relative;
+ z-index: 0;
+ padding-top: 14vw;
+ padding-bottom: 300px;
+}
+
+.wavy-top::before {
+ content: "";
+ position: absolute;
+ top: -16vw;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-image: url('/resources/images/home-curvey-bg.svg');
+ background-repeat: no-repeat;
+ background-size: 100% auto;
+ z-index: -1;
+}
+
+.bgtext {
+ color: #86A6A3;
+ opacity: .5;
+ width: 90%;
+ min-width: 65vw;
+ max-width: 1200px;
+ font-size: min(15vw, 300px);
text-align: center;
- max-width: 60rem;
- margin: 0 auto 50px;
- line-height: 1.5em;
+ line-height: .85;
+ font-weight: 800;
+ text-transform: uppercase;
+ mix-blend-mode: color-burn;
+ pointer-events: none;
+
+ position: absolute;
+ top: 5vw;
+ left: 50%;
+ transform: translateX(-50%);
}
-h3 {
- font-family: Montserrat, sans-serif;
- font-weight: 400;
- font-size: 55px;
+.bgtext .site-on {
+ font-size: 85%;
}
-p {
- font-size: 20px;
- max-width: 600px;
- margin-top: 20px;
- line-height: 1.5em;
-}
-
-.download-container {
+.wavy-top h2 {
+ color: #003E4B;
+ font-size: min(3vw, 52px);
text-align: center;
+ width: 60vw;
+ max-width: 950px;
+ font-weight: normal;
+ margin: 0 auto 200px;
+ line-height: 2.5em;
+}
+
+.wavy-top h2 b,
+.section-upset b {
+ font-weight: 800;
+}
+
+
+
+.section-upset {
+ background: white;
+ max-width: 1600px;
+ margin: -350px auto 0;
+ padding: 100px 50px 0;
+ border-radius: 20px;
+ z-index: 0;
+ position: relative;
+ box-shadow: 0 -15px 20px -2px rgb(0 0 0 / .1);
+}
+
+.section-upset h2 {
+ background: linear-gradient(195deg, rgb(6, 79, 107) 25%, rgba(139, 189, 224, 1) 49%, rgb(72, 129, 164)50%, rgb(8, 44, 58) 100%);
+ -webkit-background-clip: text;
+ background-clip: text;
+ -webkit-text-fill-color: transparent;
+
+ font-size: 80px;
+ font-weight: 600;
+ text-align: center;
+ margin-bottom: 100px;
+ max-width: none;
+}
+
+
+
+
+
+
+
+
+.testimonials-container {
+ height: 80vh;
+ position: relative;
+}
+.testimonials {
+ --testimonial-spacing: 25px;
+ gap: var(--testimonial-spacing);
+ display: flex;
+ flex-wrap: wrap;
+ padding-top: 75px;
+ padding-bottom: 75px;
+ height: 100%;
+ overflow-y: auto;
margin-top: 50px;
}
-
-.download-container .button.big {
- margin-bottom: 15px;
+.testimonial-col {
+ flex: 1;
+ min-width: 250px;
}
-
-section {
- padding: 100px 0;
+.testimonials-container::before {
+ content: "";
+ background: linear-gradient(0deg, #f5f8f9 0%, rgba(255,255,255,0) 25%, rgba(255,255,255,0) 75%, #f5f8f9 100%);
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ pointer-events: none;
+ z-index: 1;
}
-
-section.alternate:nth-child(even) {
- background-color: #f5f8f9;
+.testimonial-picture {
+ width: 60px;
+ border-radius: 50%;
}
-
-section.alternate:nth-child(odd) .side-by-side {
- flex-direction: row-reverse;
-}
-
-.side-by-side {
- width: 100%;
+.testimonial {
display: flex;
- justify-content: space-between;
- align-items: center;
+ align-items: flex-start;
+ gap: 1em;
+ border: 1px solid rgb(222, 233, 240);
+ border-radius: 5px;
+ padding: 1em;
+ margin: var(--testimonial-spacing) 0;
+ background: white;
}
-
-.side-by-side > * {
- width: 48%;
-}
-
-.side-by-side img {
- max-height: 400px;
-}
-
-.code-caption {
- font-size: 24px;
- font-weight: bold;
- margin: 75px auto 20px;
-}
-
-code {
- font-family: 'PT Mono', monospace;
-}
-
-code.block {
- display: block;
- background: #2f2f2f;
- color: #eee;
- font-size: 20px;
- padding-top: 30px;
- padding-bottom: 30px;
- line-height: 1.25em;
- white-space: pre-wrap;
-}
-
-.actions {
- padding-top: 100px;
-}
-
-code.caddyfile {
- background-color: #dbebf3;
- color: black;
-}
-
-.cf-key {
- color: #d22500;
- font-weight: bold;
-}
-
-.cf-comment {
- color: #7291a0;
-}
-
-.cf-dir {
- color: #006c96;
- font-weight: bold;
-}
-
-.cf-arg {
- color: #008000;
-}
-
-.cf-subdir {
- color: #835234;
-}
-
-code.rest {
- background-color: #f0f5f4; /*#073d59;*/
- color: #253a28;
-}
-
-.footnote {
- font-size: 18px;
- text-align: center;
-}
-
-iframe.github-stars {
- vertical-align: middle;
-}
-
-
-@media (max-width: 1100px) {
- .side-by-side,
- section.alternate:nth-child(odd) .side-by-side {
- flex-direction: column;
- }
- section.alternate:nth-child(odd) .side-by-side > img {
- flex-direction: column-reverse;
- margin-bottom: 50px;
- }
-
- .side-by-side-content {
- margin-bottom: 50px;
- }
-
- .side-by-side > * {
- width: initial;
- }
-
- p {
- max-width: 900px;
- }
-}
-
-@media (max-width: 900px) {
- h1 {
- font-size: 50px;
- word-wrap: break-word;
- }
-
- h2 {
- font-size: 24px;
- }
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/* TODO: */
-/* TAKEN FROM features.css */
-
-.features-start {
- background: linear-gradient(0deg, #13a8f5 0%, #18b125 100%);
- color: white;
- padding: 35px 0;
-}
-
-
-.main-features {
- display: flex;
- justify-content: space-between;
- flex-wrap: wrap;
- padding-top: 2rem;
-}
-
-.main-feature {
- text-align: center;
- padding: 0 2rem;
- margin: 3rem 0;
- width: 25%;
-}
-
-.main-feature img {
- height: 130px;
- margin-bottom: 15px;
-}
-
-.main-feature .title {
- font-size: 24px;
- font-weight: bold;
- margin-bottom: 15px;
-}
-
-.main-feature p {
- text-align: left;
+.testimonial-quote {
+ margin-bottom: 1em;
font-size: 16px;
- margin: 0;
+ line-height: 1.4;
}
-
-.feature-points {
- display: flex;
- justify-content: space-around;
- flex-wrap: wrap;
- font-size: 28px;
+.testimonial-name,
+.testimonial-role {
+ font-size: 90%;
}
-
-.feature-point {
- width: 33.333%;
- min-width: 300px;
- padding: 1rem 3rem;
+.testimonial-name {
+ font-weight: bold;
+ margin-bottom: .5em;
+ color: inherit;
+ text-decoration: none;
}
-
-#features-title {
- width: 80%;
- max-width: 700px;
- display: block;
- margin: 50px auto 0;
- position: relative;
- top: 40px;
+.testimonial-name:hover {
+ color: inherit;
}
-
-.features-area h3 {
- border-bottom: 3px solid #2BABED;
+.testimonial-name[href]:hover {
+ text-decoration: underline;
}
-
-.features-area h4 {
- text-align: center;
- padding-top: 80px;
- padding-bottom: 40px;
- font-family: Montserrat, sans-serif;
- font-size: 40px;
+.testimonial-name::before {
+ content: '—';
}
-
-.features-area h5 {
- font-size: 18px;
- text-transform: uppercase;
- letter-spacing: 1px;
-}
-
-.section-heading {
+.testimonial-role {
+ color: var(--text-color-muted);
font-style: italic;
- font-size: 20px;
- line-height: 2rem;
- color: #000;
- max-width: 550px;
- text-align: center;
- margin: 2rem auto 0;
}
-.features {
+
+
+
+.smallstep {
+ max-width: 150px;
+ margin-top: 1em;
+}
+
+.gold {
+ color: gold;
+ background: linear-gradient(63deg, rgba(212,167,36,1) 8%, rgba(251,228,63,1) 50%, rgba(241,218,57,1) 75%);
+ -webkit-background-clip: text;
+ background-clip: text;
+ -webkit-text-fill-color: transparent;
+}
+
+.col .cite {
+ font-size: 75%;
+}
+
+img.cite {
+ width: 100%;
+ max-width: 600px;
+ display: block;
+ margin: 0 auto;
+}
+
+
+.demobox {
+ position: relative;
+ color: #003e4b;
+ background: radial-gradient(circle at 200px 100px, rgba(184,255,239,1) 0%, rgba(234,249,255,1) 280px);
+ font-size: 20px;
+ padding: 50px;
+ border-radius: 15px;
+ margin-top: 200px;
+}
+
+.demobox h2 {
+ font-size: 90px;
+ font-weight: 700;
+ max-width: 100%;
+ white-space: nowrap;
+ overflow-x: auto;
+ white-space: nowrap;
+ margin-top: -1.65em;
+
+ background: linear-gradient(0deg, rgba(27,180,186,1) 10%, rgba(0,61,75,1) 50%);
+ -webkit-background-clip: text;
+ background-clip: text;
+ -webkit-text-fill-color: transparent;
+}
+
+.demobox p {
+ margin-bottom: 2em;
+}
+
+.demo-ips {
display: flex;
flex-wrap: wrap;
+ gap: 2em;
}
-.feature {
- width: 33.333%;
- padding: 25px;
+.demo-ips code {
+ background: #ecffff;
+ display: flex;
+ border-radius: 5px;
+ box-shadow: 0 4px 16px rgb(0 0 0 / .1);
}
-.feature p {
- margin-top: 5px;
- color: #333;
- font-size: 18px;
+.record-type,
+.demo-ip {
+ display: block;
+ padding: 10px 20px;
+ overflow-wrap: anywhere;
}
-@media (max-width: 900px) {
- .main-feature {
- width: 50%;
- margin: 3rem 0;
- padding: 0 1rem;
+.record-type {
+ color: #6ea9b7;
+ border-right: 1px solid #cef4f1;
+}
+
+.demo-help {
+ border-top: 1px solid #b5d3d9;
+ font-size: 75%;
+ color: #628991;
+ font-family: Inter;
+ max-width: 800px;
+}
+
+.demo-help p {
+ margin: 10px 0;
+}
+
+
+
+
+
+.franken {
+ background-color: #b3d133;
+ color: #390075;
+}
+
+
+@media (max-width: 1350px) {
+ h1 {
+ font-size: 95px;
}
- .feature {
- width: 50%;
+ h1 .subheading {
+ font-size: 30px;
+ }
+}
+
+
+@media (max-width: 1000px) {
+ h1 {
+ text-align: center;
+ }
+
+ .action-buttons {
+ margin-bottom: 55px;
+ justify-content: center;
+ }
+
+ .bgtext {
+ font-size: 25vw;
+ opacity: .25;
+ }
+
+ .wavy-top h2 {
+ font-size: 5vw;
+ width: 80%;
+ max-width: 700px;
+ line-height: 2em;
+ }
+
+ .section-upset {
+ padding: 50px 15px 0;
+ }
+
+ .section-upset h2 {
+ font-size: 50px;
}
}
@media (max-width: 700px) {
- .pitch {
- width: 100%;
- border-right: none;
- }
-
- .feature-highlight {
- padding: 1rem;
- }
-}
-
-@media (max-width: 500px) {
- .main-feature {
- width: 100%;
- }
-
- .feature {
- width: 100%;
+ h1 {
+ font-size: 55px;
}
}
\ No newline at end of file
diff --git a/src/resources/css/marketing.css b/src/resources/css/marketing.css
new file mode 100644
index 0000000..a77ed62
--- /dev/null
+++ b/src/resources/css/marketing.css
@@ -0,0 +1,662 @@
+body {
+ background-color: #123245;
+ background-image: none;
+}
+
+img.gallery {
+ max-width: 100%;
+ box-shadow: 0 6px 10px rgb(0 0 0 / .15);
+ border-radius: 8px;
+}
+
+h1,
+h2,
+h3,
+h4 {
+ font-family: Poppins, ui-rounded;
+}
+
+h1 {
+ font-size: 120px;
+ font-weight: 800;
+ text-align: center;
+ color: #65D1C6;
+ margin-bottom: 1em;
+
+ background-image: linear-gradient(to right, #47E27C 25%, #4ED3FB 75%);
+ -webkit-background-clip: text;
+ background-clip: text;
+ -webkit-text-fill-color: transparent;
+}
+
+h1 .subheading {
+ margin: 1em auto 0;
+ text-transform: none;
+ font-size: 42px;
+ font-weight: normal;
+ line-height: 1.3;
+ font-family: Figtree;
+ max-width: 850px;
+
+ --subheading-color: #b1fffe;
+ color: var(--subheading-color);
+ -webkit-text-fill-color: var(--subheading-color);
+}
+
+h1 .subheading b {
+ font-weight: 800;
+}
+
+
+
+
+
+p,
+h2 {
+ max-width: 950px;
+}
+
+h2 {
+ font-size: 50px;
+ font-weight: 600;
+}
+
+.feature h2:not(:first-child) {
+ margin-top: 175px;
+}
+
+
+
+.hero {
+ background-color: hsla(201,63%,15%,1);
+ background-image:
+ radial-gradient(at 50% 96%, hsla(0,100%,20%,0.35) 0px, transparent 50%),
+ radial-gradient(at 5% 30%, hsla(136,95%,15%,1) 0px, transparent 50%),
+ radial-gradient(at 91% 35%, hsla(214,83%,25%,1) 0px, transparent 75%),
+ radial-gradient(at 82% 73%, hsla(265,72%,20%,1) 0px, transparent 50%);
+}
+
+.hero-content {
+ padding-top: 100px;
+ margin-bottom: 0;
+ padding-bottom: 50px;
+}
+
+.email em {
+ display: none;
+}
+
+
+
+.button.cool {
+ position: relative;
+ color: rgb(226 254 214);
+ border: none;
+
+ /* necessary for gradient dropshadow: */
+ transform-style: preserve-3d;
+ overflow: unset;
+}
+
+.button.cool::before {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ border-radius: 8px;
+ border: 2px solid transparent;
+ background: linear-gradient(to right, #65E823,#D67FDB) border-box;
+ -webkit-mask:
+ linear-gradient(#fff 0 0) padding-box,
+ linear-gradient(#fff 0 0);
+ mask:
+ linear-gradient(#fff 0 0) padding-box,
+ linear-gradient(#fff 0 0);
+ -webkit-mask-composite: xor;
+ mask-composite: exclude;
+}
+
+
+@property --a {
+ syntax: '';
+ inherits: false;
+ initial-value: 0deg;
+}
+
+@keyframes a {
+ from {
+ --a: 0deg;
+ }
+ to {
+ --a: 360deg;
+ }
+}
+
+.button.cool sh {
+ position: absolute;
+ inset: -100px;
+ border: 100px solid #0000;
+ border-radius: 110px; /* a little more than the inset+border+border-radius */
+ mask:
+ linear-gradient(#000 0 0) content-box,
+ linear-gradient(#000 0 0);
+ -webkit-mask:
+ linear-gradient(#000 0 0) content-box,
+ linear-gradient(#000 0 0);
+ -webkit-mask-composite: xor;
+ mask-composite: exclude;
+ transform: translateZ(-1px); /* hack the z-index so as to be behind the transparent element */
+ pointer-events: none;
+}
+.button.cool sh::before {
+ content: "";
+ position: absolute;
+ inset: 0px;
+ background: conic-gradient(from var(--a), rgb(207, 19, 175) 0.42%, #ee6907 59.24%, #70d52c);
+ filter: blur(25px);
+ transform: translate(0px,0px);
+
+ --a: 0deg; /* needed for firefox to have a valid output ? */
+ animation: a 1s linear infinite;
+ opacity: 0;
+ transition: opacity .5s;
+}
+.button.cool:hover sh::before {
+ opacity: 1;
+}
+
+
+
+section {
+ padding: 200px 0;
+ background: var(--body-bg);
+ color: var(--text-color);
+}
+
+.hero section.transparent {
+ background: none;
+ padding-top: 0;
+ color: #cbe2e4;
+}
+
+.hero section.transparent h2 {
+ color: #fff;
+}
+
+.hero-content a,
+.hero section.transparent a {
+ color: #75b8c8;
+}
+
+.hero-content a:hover,
+.hero section.transparent a:hover {
+ color: #82e7ff;
+}
+
+.dark section.gray {
+ background-color: #1b1c1c;
+}
+
+section.gray,
+section.light.gray {
+ background-color: #f5f8f9;
+}
+
+.diagonal {
+ padding: 200px 0;
+ margin: 25px 0;
+}
+
+.diagonal.up { transform: skewY(-5deg); }
+.diagonal.up > * { transform: skewY(5deg); }
+
+.diagonal.down { transform: skewY(5deg); }
+.diagonal.down > * { transform: skewY(-5deg); }
+
+.feature p {
+ font-weight: 500;
+ margin-top: 2em;
+ line-height: 1.65;
+}
+
+
+.cols, .spacing {
+ --gap: 50px;
+}
+
+.spacing {
+ display: flex;
+ gap: var(--gap);
+ flex-direction: column;
+}
+
+.cols {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content:space-around;
+ gap: var(--gap);
+ color: #424242;
+ margin-top: 4em;
+}
+
+section.dark .cols {
+ color: #aec6c3;
+}
+
+
+.cols .col {
+ min-width: 350px;
+ padding-left: 1em;
+ flex: 1;
+}
+
+h3 {
+ font-weight: 600;
+ font-size: 20px;
+ border-left: 2px solid;
+ padding-top: .15em;
+ padding-bottom: .15em;
+
+ /* shove the border over but leave space between border and content */
+ margin-left: -1em;
+ padding-left: calc(1em - 2px);
+}
+
+p + h3 {
+ margin-top: 4em;
+}
+
+h3.plain {
+ border-left: none;
+ margin-left: 0;
+ padding-left: 0;
+}
+
+.hero h3 {
+ color: white;
+}
+
+.col p {
+ font-family: Inter;
+ font-size: 90%;
+ line-height: 1.5;
+}
+
+.hero .col p {
+ color: rgb(255 255 255 / .8);
+}
+
+h3.green {
+ color: #23a460; border-color: #23a460;
+}
+h3.purple {
+ color: rgb(179, 80, 179); border-color: rgb(179, 80, 179);
+}
+h3.blue {
+ color: rgb(14, 110, 189); border-color: rgb(14, 110, 189);
+}
+section.dark h3.green {
+ color: #41e68f; border-color: #41e68f;
+}
+section.dark h3.purple {
+ color: rgb(238, 89, 238); border-color: rgb(238, 89, 238);
+}
+section.dark h3.blue {
+ color: rgb(113, 191, 255); border-color: rgb(113, 191, 255);
+}
+section.dark h3.yellow {
+ color: #ffcb50; border-color: #ffcb50;
+}
+
+
+
+
+
+
+.asides {
+ display: flex;
+ gap: 50px;
+ justify-content: space-between;
+ margin: 100px auto 150px auto;
+ align-items: center;
+}
+
+.hero-content .asides {
+ margin-top: 0;
+ margin-bottom: 75px;
+}
+
+.asides.top {
+ align-items: stretch;
+}
+
+.asides > * {
+ flex: 1;
+ min-width: 0; /* kind of a hack that allows proper sizing of pre children; see https://weblog.west-wind.com/posts/2016/feb/15/flexbox-containers-pre-tags-and-managing-overflow */
+ min-width: 300px;
+ width: 100%;
+}
+
+.asides-40-60 > :first-child { flex: 2 }
+.asides-40-60 > :last-child { flex: 3 }
+.asides-60-40 > :first-child { flex: 3 }
+.asides-60-40 > :last-child { flex: 2 }
+
+.asides h2 {
+ text-align: left;
+ max-width: none;
+}
+
+.asides h3 {
+ margin-left: 0;
+}
+
+.asides p {
+ margin-left: 0;
+ margin-right: 0;
+}
+
+.action-buttons {
+ display: flex;
+ gap: 1.5em;
+ margin-top: 55px;
+ align-items: center;
+}
+
+
+
+
+.caption {
+ margin-top: 10px;
+ font-size: 14px;
+ text-align: center;
+}
+
+.hero-content .caption {
+ color: #fff;
+}
+
+#video-demo {
+ display: block;
+ margin-bottom: 2em;
+}
+
+div.ap-wrapper div.ap-player {
+ box-shadow: 10px 10px 15px rgba(0, 0, 0, 0.25);
+ border-radius: 10px;
+}
+
+div.ap-wrapper:fullscreen div.ap-player {
+ transform: none;
+}
+
+.ap-player pre.ap-terminal {
+ border-color: transparent;
+ background-color: transparent;
+}
+
+
+
+
+
+
+.display {
+ perspective: 1500px;
+}
+
+.display .chroma,
+.display.dark .chroma,
+.display.light .chroma {
+ background: none !important;
+}
+
+.display code {
+ border-radius: 10px;
+ width: 100%;
+}
+
+.display code {
+ font-size: 110%;
+ display: block;
+ position: relative;
+ padding: 20px 40px;
+ white-space: pre;
+ font-weight: bold;
+ overflow-x: auto;
+ box-shadow: 10px 10px 25px rgba(0, 0, 0, 0.1);
+}
+.display.dark code {
+ box-shadow: 10px 10px 25px rgba(0, 0, 0, 0.5);
+}
+.display.left code {
+ box-shadow: -10px 10px 25px rgba(0, 0, 0, 0.1);
+}
+
+.display.right > * {
+ transform: rotateY(-25deg);
+}
+.display.left > * {
+ transform: rotateY(25deg);
+}
+
+.display code.light,
+.display .chroma.light {
+ background: #fff linear-gradient(135deg, rgba(255,255,255,0) 0%,rgba(241,241,241,0.5) 46%,rgba(225,225,225,0.5) 46.25%,rgba(246,246,246,0) 100%);
+ color: #222;
+}
+
+.display code.dark,
+.ap-player {
+ /* background: #333 linear-gradient(135deg, rgba(0, 0, 0, 0) 0%,rgba(125, 125, 125, 0.3) 46%,rgba(45, 45, 45, 0.8) 46.8%,rgba(0, 0, 0, 0) 100%); */
+ background: rgb(0 0 0 / .7) linear-gradient(135deg, transparent 0%, rgb(200 200 200 / 0.25) 46%, rgb(200 200 200 / .15) 46.5%, transparent 100%);
+ color: #fff;
+}
+
+.light .display code.dark {
+ background: #333 linear-gradient(135deg, rgba(0, 0, 0, 0) 0%,rgba(125, 125, 125, 0.3) 46%,rgba(45, 45, 45, 0.8) 46.8%,rgba(0, 0, 0, 0) 100%);
+}
+
+.display .comment {
+ color: gray;
+}
+
+.blinking {
+ animation: blinking 1s infinite;
+ background-color: #fff;
+ width: .5em;
+ height: 1.2em;
+ position: relative;
+ top: 5px;
+ display: inline-block;
+}
+
+@keyframes blinking {
+ 0% { background-color: #fff; }
+ 45% { background-color: #fff; }
+ 60% { background-color: transparent; }
+ 99% { background-color: transparent; }
+ 100% { background-color: #fff; }
+}
+
+
+.rollover-green,
+.rollover-purple,
+.rollover-blue,
+.rollover-yellow {
+ transition: background-color 250ms;
+}
+
+.rollover-green.show { background-color: #41e68fc7; }
+.rollover-purple.show { background-color: #a52fa59d; }
+.rollover-blue.show { background-color: #0a62aaa3; }
+.rollover-yellow.show { background-color: #ffcb50; }
+
+.dark .rollover-green.show { background-color: #41e68e7c; }
+.dark .rollover-purple.show { background-color: #a52fa58c; }
+.dark .rollover-blue.show { background-color: #0a62aa96; }
+.dark .rollover-yellow.show { background-color: #ffcb5064; }
+
+.light .rollover-green.show { background-color: #41e68e4b; }
+.light .rollover-purple.show { background-color: rgba(230, 78, 230, 0.522); }
+.light .rollover-blue.show { background-color: #65b4f586; }
+.light .rollover-yellow.show { background-color: #ffcb50d5; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+.sponsor-experience,
+.sponsorship-primer {
+ max-width: 700px; /* TODO: TEMPORARY! */
+}
+
+
+
+.sponsor-experience {
+ border-radius: 10px;
+ padding: 30px 50px 40px;
+ color: #fff;
+ display: flex;
+ flex-wrap: wrap;
+ column-gap: 50px;
+}
+
+.sponsor-experience::before {
+ content: "Sponsor Experience";
+ text-transform: uppercase;
+ letter-spacing: 4px;
+ color: rgb(255 255 255 / .7);
+ font-size: 12px;
+ font-weight: 800;
+ text-align: center;
+ display: block;
+ width: 100%;
+}
+
+.sponsor-experience .experience-content {
+ flex: 1;
+ margin-top: 40px;
+}
+
+.sponsor-experience .experience-quote {
+ margin-bottom: 1em;
+}
+
+.sponsor-experience .experience-logo {
+ width: 150px;
+}
+
+.sponsor-experience .experience-credit {
+ display: flex;
+ gap: 1em;
+ align-items: center;
+}
+
+.sponsor-experience cite {
+ font-style: normal;
+ font-size: 14px;
+ color: rgb(255 255 255 / .7);
+}
+
+.sponsor-experience cite b {
+ display: block;
+ font-size: 125%;
+ color: #fff;
+}
+
+.sponsor-experience .experience-picture {
+ width: 3em;
+ height: 3em;
+ border-radius: 50%;
+ object-fit: cover;
+ background-color: gray;
+}
+
+
+.sponsor-experience.stripe {
+ background: linear-gradient(to right, #635bff 30%, #d4b8ff);
+}
+
+
+
+
+
+.sponsorship-primer {
+ border-radius: 10px;
+ background: linear-gradient(50deg, #670d7f, #531cc7);
+ padding: 40px 50px;
+ margin: 50px auto;
+ color: #ffcffb;
+}
+
+.cols .sponsorship-primer:first-child {
+ margin-top: 0;
+}
+
+.sponsorship-primer h3 {
+ color: white;
+ font-size: 150%;
+ font-weight: normal;
+ border: none;
+ padding-left: 0;
+ margin-left: 0;
+ margin-bottom: 0;
+ padding-bottom: 0;
+}
+
+.sponsorship-primer p {
+ margin: 1em 0 1.5em;
+ font-weight: normal;
+}
+
+.sponsorship-primer p:last-child {
+ margin-bottom: 0;
+}
+
+@media (max-width: 1000px) {
+ h1,
+ h2 {
+ overflow-wrap: anywhere;
+ }
+ h1 {
+ font-size: 75px;
+ }
+ .asides {
+ flex-direction: column;
+ margin-top: 25px;
+ margin-bottom: 25px;
+ }
+ .display {
+ margin-top: 50px;
+ margin-bottom: 50px;
+ }
+ .display.right > * {
+ transform: none;
+ }
+ .display.left > * {
+ transform: none;
+ }
+}
\ No newline at end of file
diff --git a/src/resources/css/on-demand.css b/src/resources/css/on-demand.css
new file mode 100644
index 0000000..4308156
--- /dev/null
+++ b/src/resources/css/on-demand.css
@@ -0,0 +1,4 @@
+.hero-content {
+ margin-bottom: 0;
+ padding-bottom: 50px;
+}
diff --git a/src/resources/css/sponsor.css b/src/resources/css/sponsor.css
new file mode 100644
index 0000000..6908a64
--- /dev/null
+++ b/src/resources/css/sponsor.css
@@ -0,0 +1,239 @@
+.hero-content {
+ padding-bottom: 0;
+}
+
+p.footnote {
+ margin-top: 2em;
+ font-size: 12px;
+}
+
+.plan {
+ --plan-border: 1px solid #eceff133;
+ border: var(--plan-border);
+ border-radius: 10px;
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+}
+
+:not(.overlay) .plan {
+ background-image: linear-gradient(220deg, rgba(76, 170, 255, 0.31) 0%, rgba(77, 101, 141, 0.26) 52%, rgba(112, 174, 255, 0.18) 54%, rgba(13, 58, 93, 0.08) 100%);
+}
+
+
+
+.plan-header,
+.plan-content {
+ padding: 1.5em;
+}
+
+.plan-header {
+ display: flex;
+ border-bottom: var(--plan-border);
+}
+
+.plan-name {
+ color: #fff;
+ font-size: 115%;
+ font-weight: bold;
+}
+
+.plan-price {
+ font-weight: bold;
+ margin-left: auto;
+}
+
+.plan-period {
+ font-size: 75%;
+ font-weight: normal;
+}
+
+.plan-content {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ font-size: 16px;
+}
+
+.plan p,
+.plan li {
+ font-weight: normal;
+ font-size: 90%;
+ margin-top: 0;
+}
+
+.plan p {
+ margin-bottom: 1em;
+ line-height: 1.25;
+}
+
+.plan p:last-child {
+ margin-bottom: 0;
+}
+
+.plan-action {
+ margin-top: auto;
+ text-align: center;
+ font-size: 18px;
+}
+
+section ul,
+section ol {
+ margin: 1em 0;
+}
+
+section li {
+ margin: .75em 0 .75em 2.5em;
+}
+
+ul.check,
+ul.minus {
+ list-style: none;
+}
+
+ul.check li::before,
+ul.minus li.check::before,
+ul.minus li::before,
+ul.check li.minus::before {
+ display: block;
+ position: absolute;
+ margin-left: -1.75em;
+}
+
+ul.check li::before,
+ul.minus li.check::before {
+ content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' width='16' title='check' fill='%23dddddd'%3E%3Cpath d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z' /%3E%3C/svg%3E");
+}
+
+ul.minus li::before,
+ul.check li.minus::before {
+ content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-minus' width='24' height='24' viewBox='0 0 24 24' stroke-width='4' stroke='%23dddddd' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M5 8l11 0'%3E%3C/path%3E%3C/svg%3E");
+}
+
+
+
+
+
+
+
+/* Hover glowy effect taken from here: https://codepen.io/inescodes/pen/PoxMyvX */
+.plans {
+ position: relative;
+}
+
+.plan {
+ --hsl: var(--hue), var(--saturation), var(--lightness);
+}
+
+.plan.indie {
+ --hue: 120;
+ --saturation: 90%;
+ --lightness: 40%;
+}
+.plan.indie .plan-price { color: #38d959; }
+.plan.startup {
+ --hue: 290;
+ --saturation: 95%;
+ --lightness: 61%;
+}
+.plan.startup .plan-price { color: #e66dff; }
+.plan.business {
+ --hue: 180;
+ --saturation: 100%;
+ --lightness: 50%;
+}
+.plan.business .plan-price { color: #50e6ff; }
+.plan.enterprise {
+ --hue: 0;
+ --saturation: 0%;
+ --lightness: 50%;
+}
+.plan.enterprise .plan-price { color: white; }
+
+.overlay {
+ position: absolute;
+ inset: 0;
+ pointer-events: none;
+ user-select: none;
+ opacity: var(--opacity, 0);
+ -webkit-mask: radial-gradient(25rem 25rem at var(--x) var(--y),
+ #000 1%,
+ transparent 50%);
+ mask: radial-gradient(25rem 25rem at var(--x) var(--y),
+ #000 1%,
+ transparent 50%);
+ transition: 400ms mask ease;
+ will-change: mask;
+}
+
+.overlay .plan {
+ position: absolute;
+ background-color: hsla(var(--hsl), 0.15); /* alpha channel here is how intense the radial gradient is */
+ border-color: hsla(var(--hsl), 1);
+ box-shadow: 0 0 0 1px inset hsl(var(--hsl));
+}
+
+:not(.overlay) > .plan {
+ transition: 400ms background ease;
+ will-change: background;
+}
+
+.overlay .plan:nth-child(2n-1):hover{
+ background-color: hsla(var(--hsl), 0.2);
+}
+
+.plan:nth-child(2n):hover {
+ --lightness: 25%;
+ background-color: hsla(var(--hsl), 0.4);
+}
+
+/* as a special case, the enterprise ones should go dark */
+.plan.enterprise:hover {
+ background-color: rgb(0 0 0 / .75);
+}
+
+.button.purple {
+ font-size: 90%;
+
+ /* Keep the buttons above the glow effect for legibility */
+ position: relative;
+ z-index: 2;
+}
+
+
+
+
+.sides {
+ display: flex;
+ gap: 50px;
+ align-items: center;
+ margin: 100px 0;
+}
+
+.sides > * {
+ flex: 1;
+}
+
+.side-flex {
+ display: flex;
+ gap: 2em;
+ flex: 1.5;
+}
+
+
+
+
+
+
+@media (max-width: 1150px) {
+ .sides {
+ flex-direction: column;
+ }
+}
+
+@media (max-width: 700px) {
+ .side-flex {
+ flex-direction: column;
+ }
+}
\ No newline at end of file
diff --git a/src/resources/css/support.css b/src/resources/css/support.css
new file mode 100644
index 0000000..ed5ad7e
--- /dev/null
+++ b/src/resources/css/support.css
@@ -0,0 +1,74 @@
+h1 {
+ line-height: auto;
+ margin-bottom: 1em;
+}
+
+.plans {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ margin-bottom: 150px;
+}
+
+.plan {
+ background: white;
+ padding: 2em;
+ color: #222;
+ border-radius: 15px;
+ width: 100%;
+}
+
+.plan.community {
+ max-width: calc(min(400px, 85%));
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ background: rgb(255 255 255 / .85)
+}
+
+.plan.sponsor {
+ max-width: 600px;
+ box-shadow: 0 0 25px rgb(0 0 0 / .5);
+}
+
+.plan-title {
+ font-size: 24px;
+ font-weight: bold;
+ color: black;
+}
+
+.plan.sponsor .plan-title {
+ color: #9227da;
+}
+
+.plan p,
+.plan ul {
+ margin: 1.5em 0;
+ line-height: 1.4;
+}
+
+.plan ul {
+ margin: -1em 0 2em 2em;
+}
+
+.plan a {
+ color: #3465f6;
+}
+
+.plan a:hover {
+ color: #7134f6;
+}
+
+@media (max-width: 900px) {
+ .plans {
+ flex-direction: column-reverse;
+ }
+
+ .plan {
+ min-width: 300px;
+ }
+
+ .plan.community {
+ border-top-left-radius: 0;
+ border-bottom-right-radius: 15px;
+ }
+}
\ No newline at end of file
diff --git a/src/resources/css/v2-landing.css b/src/resources/css/v2-landing.css
deleted file mode 100644
index e9ee7b1..0000000
--- a/src/resources/css/v2-landing.css
+++ /dev/null
@@ -1,391 +0,0 @@
-body {
- background: #fcfcfc;
-}
-
-#v2logo {
- width: 100%;
- max-width: 600px;
- margin: 100px auto 0;
- display: block;
-}
-
-section {
- padding: 150px 0;
- font-size: 20px;
-}
-
-p, ul, ol {
- font-size: 16px;
- line-height: 175%;
- max-width: 600px;
- margin: 0 auto 1.5em;
-}
-
-ul, ol {
- margin-left: 2em;
-}
-
-h1 {
- font-family: Montserrat;
- text-align: center;
-}
-
-.hero h1 {
- font-size: 40px;
- font-weight: normal;
- margin: 0 auto 50px;
- max-width: 650px;
- line-height: 120%;
-}
-
-h2 {
- font: 48px Inter;
- max-width: 1000px;
- text-align: center;
- margin: 0 auto 80px;
-}
-
-.hero h2 {
- font-size: 22px;
- font-family: Montserrat;
- text-align: center;
- font-weight: normal;
- max-width: 800px;
- line-height: 150%;
-}
-
-h3 {
- font-size: 22px;
- margin-bottom: 1rem;
-}
-
-p + h3 {
- margin-top: 2em;
-}
-
-.lead h3 {
- font-size: 32px;
- font-weight: bold;
- margin-top: 1em;
- margin-bottom: 1rem;
-}
-
-
-.lead p {
- font-size: 18px;
- line-height: 150%;
-}
-
-.button {
- color: #fff;
- font-size: 16px;
-}
-
-.button:hover {
- color: #fff;
- filter: brightness(120%);
-}
-
-.button.purple { background-color: #3a43be; /* #7615d7 */ }
-.button.cyan { background-color: #00a8dd; }
-.button.green { background-color: #00a80d; }
-
-
-code {
- background: #e7e7e7;
- border-radius: 3px;
-}
-
-img {
- max-width: 100%;
-}
-
-img.smallstep {
- width: 200px;
-}
-
-.action {
- margin: 0 auto;
- text-align: center;
- font-size: 14px;
- color: #555;
-}
-
-.action .button {
- padding: 15px 45px;
- color: #fff;
- font-size: 20px;
-}
-
-
-
-.asides {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-between;
- margin-bottom: 75px;
- align-items: center;
-}
-
-.asides.top {
- align-items: stretch;
-}
-
-.asides > * {
- flex: 1;
- margin-right: 50px;
- min-width: 0; /* kind of a hack that allows proper sizing of pre children; see https://weblog.west-wind.com/posts/2016/feb/15/flexbox-containers-pre-tags-and-managing-overflow */
- min-width: 300px;
-}
-
-.asides > :last-child {
- margin-right: 0;
-}
-
-.asides h2 {
- text-align: left;
-}
-
-.asides p {
- margin-left: 0;
- margin-right: 0;
-}
-
-.thanks {
- width: 90%;
- max-width: 750px;
- padding: 2em;
- margin: 0 auto;
- padding: 40px;
- animation: colorchange 20s infinite;
- font-size: 16px;
- border: 20px solid;
- box-shadow: 0 15px 30px rgba(0, 0, 0, .15);
-}
-
-@keyframes colorchange {
- from, to { border-color: #fd9898; }
- 10% { border-color: #fdb998; }
- 20% { border-color: #fdda98; }
- 30% { border-color: #fdf298; }
- 40% { border-color: #a0fd98; }
- 50% { border-color: #98fdef; }
- 60% { border-color: #98bbfd; }
- 70% { border-color: #a098fd; }
- 80% { border-color: #f598fd; }
- 90% { border-color: #fd98be; }
-}
-
-.thanks h2 {
- font-family: 'Dancing Script';
- font-size: 52px;
- margin-bottom: 20px;
-}
-
-.thanks .to {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-around;
- align-items: center;
-}
-
-.thanks .to a {
- margin: 10px;
- color: black;
- font-weight: bold;
-}
-
-.thanks .to a:hover {
- text-decoration: underline;
-}
-
-.thanks .to img {
- width: 150px;
- max-height: 60px;
- /* width: 150px; */
- /* max-width: 150px; */
-}
-
-.thanks .to .sponsors {
- font-size: 125%;
- flex-basis: 100%;
- text-align: center;
-}
-
-.thanks hr {
- max-width: 120px;
- border: none;
- border-top: 3px solid #dbdbdb;
- margin: 1em auto;
-}
-
-.thanks p {
- line-height: 140%;
- max-width: none;
- margin: 0 0 1.5em;
-}
-
-
-.grid {
- display: flex;
- flex-wrap: wrap;
- text-align: center;
- font-size: 20px;
- margin-bottom: 50px;
-}
-
-.grid > div {
- margin-left: -1px;
- margin-bottom: -1px;
- flex-grow: 1;
- border: 1px solid #aaa;
- min-width: 33.3333%;
- padding: 20px;
-}
-
-.grid > div b {
- font-weight: 300;
- font-family: Montserrat;
- text-transform: uppercase;
- letter-spacing: 6px;
- display: block;
- font-size: 140%;
- margin-bottom: 5px;
-}
-
-
-
-
-
-
-.caption {
- margin-top: 10px;
- font-size: 14px;
- text-align: center;
-}
-
-asciinema-player {
- display: block;
- margin-bottom: 2em;
-}
-
-.asciinema-player-wrapper .asciinema-player {
- box-shadow: -10px 10px 15px rgba(0, 0, 0, 0.25);
- transform: scale(1.1);
- border-radius: 8px;
-}
-
-.asciinema-terminal {
- border: none;
- padding: 10px;
- padding-bottom: 35px; /* for when the control bar is visible */
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-.display {
- perspective: 1000px;
-}
-
-
-.display code {
- border-radius: 10px;
- width: 100%;
-}
-
-.display code {
- max-width: 800px;
- font-size: 110%;
- display: block;
- position: relative;
- padding: 20px 40px;
- white-space: pre;
- font-weight: bold;
- overflow-x: auto;
- box-shadow: 10px 10px 25px rgba(0, 0, 0, 0.1);
-}
-
-.display.right > * {
- transform: rotateY(-25deg);
-}
-.display.left > * {
- transform: rotateY(25deg);
-}
-
-.display code.light {
- background: #fff linear-gradient(135deg, rgba(255,255,255,0) 0%,rgba(241,241,241,0.5) 46%,rgba(225,225,225,0.5) 46.5%,rgba(246,246,246,0) 100%);
-}
-
-.display code.dark,
-.asciinema-terminal {
- background: #333 linear-gradient(135deg, rgba(0, 0, 0, 0) 0%,rgba(125, 125, 125, 0.5) 46%,rgba(45, 45, 45, 0.5) 46.5%,rgba(0, 0, 0, 0) 100%);
- color: #fff;
-}
-
-.blinking {
- animation: blinking 1s infinite;
- background-color: #fff;
- width: .5em;
- height: 1.2em;
- position: relative;
- top: 5px;
- display: inline-block;
-}
-
-@keyframes blinking {
- 0% { background-color: #fff; }
- 45% { background-color: #fff; }
- 60% { background-color: transparent; }
- 99% { background-color: transparent; }
- 100% { background-color: #fff; }
-}
-
-
-
-
-.diagonal {
- padding: 200px 0;
- margin: 50px 0;
-}
-
-.diagonal.up { transform: skewY(-5deg); }
-.diagonal.up > * { transform: skewY(5deg); }
-
-.diagonal.down { transform: skewY(5deg); }
-.diagonal.down > * { transform: skewY(-5deg); }
-
-section.gray {
- background-color: #f0f0f0;
-}
-
-
-
-
-
-
-@media (max-width: 720px) {
- .display {
- margin-top: 50px;
- margin-bottom: 50px;
- }
- .display.right > * {
- transform: none;
- }
- .display.left > * {
- transform: none;
- }
- .asides > * {
- margin-right: 0;
- }
-}
\ No newline at end of file
diff --git a/src/resources/css/asciinema-player-2.6.1.css b/src/resources/css/vendor/asciinema-player-3.6.1.css
similarity index 52%
rename from src/resources/css/asciinema-player-2.6.1.css
rename to src/resources/css/vendor/asciinema-player-3.6.1.css
index 8d77df4..ec39333 100644
--- a/src/resources/css/asciinema-player-2.6.1.css
+++ b/src/resources/css/vendor/asciinema-player-3.6.1.css
@@ -1,9 +1,10 @@
-.asciinema-player-wrapper {
- position: relative;
- text-align: center;
+div.ap-wrapper {
outline: none;
+ height: 100%;
+ display: flex;
+ justify-content: center;
}
-.asciinema-player-wrapper .title-bar {
+div.ap-wrapper .title-bar {
display: none;
top: -78px;
transition: top 0.15s linear;
@@ -18,117 +19,45 @@
color: white;
background-color: rgba(0, 0, 0, 0.8);
}
-.asciinema-player-wrapper .title-bar img {
+div.ap-wrapper .title-bar img {
vertical-align: middle;
height: 48px;
margin-right: 16px;
}
-.asciinema-player-wrapper .title-bar a {
+div.ap-wrapper .title-bar a {
color: white;
text-decoration: underline;
}
-.asciinema-player-wrapper .title-bar a:hover {
+div.ap-wrapper .title-bar a:hover {
text-decoration: none;
}
-.asciinema-player-wrapper:fullscreen {
+div.ap-wrapper:fullscreen {
background-color: #000;
width: 100%;
- height: 100%;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-justify-content: center;
- justify-content: center;
- -webkit-align-items: center;
align-items: center;
}
-.asciinema-player-wrapper:fullscreen .asciinema-player {
+div.ap-wrapper:fullscreen div.ap-player {
position: static;
}
-.asciinema-player-wrapper:fullscreen .title-bar {
+div.ap-wrapper:fullscreen .title-bar {
display: initial;
}
-.asciinema-player-wrapper:fullscreen.hud .title-bar {
+div.ap-wrapper:fullscreen.hud .title-bar {
top: 0;
}
-.asciinema-player-wrapper:-webkit-full-screen {
- background-color: #000;
- width: 100%;
- height: 100%;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-justify-content: center;
- justify-content: center;
- -webkit-align-items: center;
- align-items: center;
-}
-.asciinema-player-wrapper:-webkit-full-screen .asciinema-player {
- position: static;
-}
-.asciinema-player-wrapper:-webkit-full-screen .title-bar {
- display: initial;
-}
-.asciinema-player-wrapper:-webkit-full-screen.hud .title-bar {
- top: 0;
-}
-.asciinema-player-wrapper:-moz-full-screen {
- background-color: #000;
- width: 100%;
- height: 100%;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-justify-content: center;
- justify-content: center;
- -webkit-align-items: center;
- align-items: center;
-}
-.asciinema-player-wrapper:-moz-full-screen .asciinema-player {
- position: static;
-}
-.asciinema-player-wrapper:-moz-full-screen .title-bar {
- display: initial;
-}
-.asciinema-player-wrapper:-moz-full-screen.hud .title-bar {
- top: 0;
-}
-.asciinema-player-wrapper:-ms-fullscreen {
- background-color: #000;
- width: 100%;
- height: 100%;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-justify-content: center;
- justify-content: center;
- -webkit-align-items: center;
- align-items: center;
-}
-.asciinema-player-wrapper:-ms-fullscreen .asciinema-player {
- position: static;
-}
-.asciinema-player-wrapper:-ms-fullscreen .title-bar {
- display: initial;
-}
-.asciinema-player-wrapper:-ms-fullscreen.hud .title-bar {
- top: 0;
-}
-.asciinema-player-wrapper .asciinema-player {
+div.ap-wrapper div.ap-player {
text-align: left;
display: inline-block;
padding: 0px;
position: relative;
box-sizing: content-box;
- -moz-box-sizing: content-box;
- -webkit-box-sizing: content-box;
overflow: hidden;
max-width: 100%;
+ border-radius: 4px;
+ font-size: 15px;
}
-.asciinema-terminal {
+pre.ap-terminal {
box-sizing: content-box;
- -moz-box-sizing: content-box;
- -webkit-box-sizing: content-box;
overflow: hidden;
padding: 0;
margin: 0px;
@@ -140,178 +69,231 @@
border-radius: 0;
border-style: solid;
cursor: text;
- border-width: 0.5em;
+ border-width: 0.75em;
font-family: Consolas, Menlo, 'Bitstream Vera Sans Mono', monospace, 'Powerline Symbols';
- line-height: 1.3333333333em;
+ font-variant-ligatures: none;
}
-.asciinema-terminal .line {
+pre.ap-terminal .ap-line {
letter-spacing: normal;
overflow: hidden;
- height: 1.3333333333em;
}
-.asciinema-terminal .line span {
+pre.ap-terminal .ap-line span {
padding: 0;
display: inline-block;
- height: 1.3333333333em;
+ height: 100%;
}
-.asciinema-terminal .line {
+pre.ap-terminal .ap-line {
display: block;
width: 200%;
}
-.asciinema-terminal .bright {
+pre.ap-terminal .ap-line .ap-cursor-a {
+ display: inline-block;
+}
+pre.ap-terminal .ap-line .ap-cursor-b {
+ display: none;
+ border-radius: 0.05em;
+}
+pre.ap-terminal .ap-line .ap-blink {
+ visibility: hidden;
+}
+pre.ap-terminal.ap-cursor .ap-line .ap-cursor-a {
+ display: none;
+}
+pre.ap-terminal.ap-cursor .ap-line .ap-cursor-b {
+ display: inline-block;
+}
+pre.ap-terminal.ap-blink .ap-line .ap-blink {
+ visibility: visible;
+}
+pre.ap-terminal .ap-bright {
font-weight: bold;
}
-.asciinema-terminal .underline {
+pre.ap-terminal .ap-faint {
+ opacity: 0.5;
+}
+pre.ap-terminal .ap-underline {
text-decoration: underline;
}
-.asciinema-terminal .italic {
+pre.ap-terminal .ap-italic {
font-style: italic;
}
-.asciinema-terminal.font-small {
- font-size: 12px;
+pre.ap-terminal .ap-strikethrough {
+ text-decoration: line-through;
}
-.asciinema-terminal.font-medium {
- font-size: 18px;
-}
-.asciinema-terminal.font-big {
- font-size: 24px;
-}
-.asciinema-player .control-bar {
+div.ap-player div.ap-control-bar {
width: 100%;
height: 32px;
- background: rgba(0, 0, 0, 0.8);
- /* no gradient fallback */
- background: -moz-linear-gradient(top, rgba(0, 0, 0, 0.5) 0%, #000000 25%, #000000 100%);
- /* FF3.6-15 */
- background: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5) 0%, #000000 25%, #000000 100%);
- /* Chrome10-25,Safari5.1-6 */
+ display: flex;
+ justify-content: space-between;
+ align-items: stretch;
background: linear-gradient(to bottom, rgba(0, 0, 0, 0.5) 0%, #000000 25%, #000000 100%);
- /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
- color: #bbbbbb;
+ color: #bbb;
box-sizing: content-box;
line-height: 1;
position: absolute;
- bottom: -35px;
+ bottom: 0;
left: 0;
- transition: bottom 0.15s linear;
+ opacity: 0;
+ transition: opacity 0.15s linear;
+ user-select: none;
+ z-index: 30;
}
-.asciinema-player .control-bar * {
+div.ap-player div.ap-control-bar * {
box-sizing: inherit;
font-size: 0;
+ font-family: Helvetica, Arial, sans-serif;
+ font-weight: bold;
}
-.asciinema-player .control-bar svg.icon path {
- fill: #bbbbbb;
+div.ap-control-bar svg.ap-icon path {
+ fill: #bbb;
}
-.asciinema-player .control-bar .playback-button {
+div.ap-control-bar span.ap-playback-button {
display: block;
- float: left;
+ flex: 0 0 auto;
cursor: pointer;
height: 12px;
width: 12px;
padding: 10px;
}
-.asciinema-player .control-bar .playback-button svg {
+div.ap-control-bar span.ap-playback-button svg {
height: 12px;
width: 12px;
}
-.asciinema-player .control-bar .timer {
+div.ap-control-bar span.ap-timer {
display: block;
- float: left;
- width: 50px;
+ flex: 0 0 auto;
+ min-width: 50px;
+ margin: 0 10px;
height: 100%;
text-align: center;
- font-family: Helvetica, Arial, sans-serif;
font-size: 11px;
- font-weight: bold;
- line-height: 32px;
+ line-height: 34px;
cursor: default;
}
-.asciinema-player .control-bar .timer span {
+div.ap-control-bar span.ap-timer span {
display: inline-block;
font-size: inherit;
}
-.asciinema-player .control-bar .timer .time-remaining {
+div.ap-control-bar span.ap-timer .ap-time-remaining {
display: none;
}
-.asciinema-player .control-bar .timer:hover .time-elapsed {
+div.ap-control-bar span.ap-timer:hover .ap-time-elapsed {
display: none;
}
-.asciinema-player .control-bar .timer:hover .time-remaining {
+div.ap-control-bar span.ap-timer:hover .ap-time-remaining {
display: inline;
}
-.asciinema-player .control-bar .progressbar {
+div.ap-control-bar .ap-progressbar {
display: block;
- overflow: hidden;
+ flex: 1 1 auto;
height: 100%;
padding: 0 10px;
}
-.asciinema-player .control-bar .progressbar .bar {
+div.ap-control-bar .ap-progressbar .ap-bar {
display: block;
- cursor: pointer;
+ position: relative;
+ cursor: default;
height: 100%;
- padding-top: 15px;
font-size: 0;
}
-.asciinema-player .control-bar .progressbar .bar .gutter {
+div.ap-control-bar .ap-progressbar .ap-bar .ap-gutter {
display: block;
+ position: absolute;
+ top: 15px;
+ left: 0;
+ right: 0;
height: 3px;
background-color: #333;
}
-.asciinema-player .control-bar .progressbar .bar .gutter span {
+div.ap-control-bar .ap-progressbar .ap-bar .ap-gutter .ap-gutter-fill {
display: inline-block;
height: 100%;
- background-color: #bbbbbb;
+ background-color: #bbb;
border-radius: 3px;
+ z-index: 10;
}
-.asciinema-player .control-bar.live .progressbar .bar {
- cursor: default;
+div.ap-control-bar.ap-seekable .ap-progressbar .ap-bar {
+ cursor: pointer;
}
-.asciinema-player .control-bar .fullscreen-button {
+div.ap-control-bar .ap-fullscreen-button {
display: block;
- float: right;
+ flex: 0 0 auto;
width: 14px;
height: 14px;
padding: 9px;
cursor: pointer;
}
-.asciinema-player .control-bar .fullscreen-button svg {
+div.ap-control-bar .ap-fullscreen-button svg {
width: 14px;
height: 14px;
}
-.asciinema-player .control-bar .fullscreen-button svg:first-child {
+div.ap-control-bar .ap-fullscreen-button svg:first-child {
display: inline;
}
-.asciinema-player .control-bar .fullscreen-button svg:last-child {
+div.ap-control-bar .ap-fullscreen-button svg:last-child {
display: none;
}
-.asciinema-player-wrapper.hud .control-bar {
- bottom: 0px;
+div.ap-wrapper.ap-hud .ap-control-bar {
+ opacity: 1;
}
-.asciinema-player-wrapper:fullscreen .fullscreen-button svg:first-child {
+div.ap-wrapper:fullscreen .ap-fullscreen-button svg:first-child {
display: none;
}
-.asciinema-player-wrapper:fullscreen .fullscreen-button svg:last-child {
+div.ap-wrapper:fullscreen .ap-fullscreen-button svg:last-child {
display: inline;
}
-.asciinema-player-wrapper:-webkit-full-screen .fullscreen-button svg:first-child {
- display: none;
+span.ap-progressbar span.ap-marker-container {
+ display: block;
+ top: 0;
+ bottom: 0;
+ width: 21px;
+ position: absolute;
+ margin-left: -10px;
+ z-index: 9;
}
-.asciinema-player-wrapper:-webkit-full-screen .fullscreen-button svg:last-child {
- display: inline;
+span.ap-marker-container span.ap-marker {
+ display: block;
+ top: 13px;
+ bottom: 12px;
+ left: 7px;
+ right: 7px;
+ background-color: #555;
+ position: absolute;
+ transition: top 0.1s, bottom 0.1s, left 0.1s, right 0.1s, background-color 0.1s;
+ border-radius: 50%;
}
-.asciinema-player-wrapper:-moz-full-screen .fullscreen-button svg:first-child {
- display: none;
+span.ap-marker-container span.ap-marker.ap-marker-past {
+ background-color: #bbb;
}
-.asciinema-player-wrapper:-moz-full-screen .fullscreen-button svg:last-child {
- display: inline;
+span.ap-marker-container span.ap-marker:hover,
+span.ap-marker-container:hover span.ap-marker {
+ background-color: #bbb;
+ top: 11px;
+ bottom: 10px;
+ left: 5px;
+ right: 5px;
}
-.asciinema-player-wrapper:-ms-fullscreen .fullscreen-button svg:first-child {
- display: none;
+span.ap-marker-container span.ap-marker-tooltip {
+ visibility: hidden;
+ background-color: #333;
+ color: #bbb;
+ text-align: center;
+ padding: 2px 8px 0px 8px;
+ border-radius: 4px;
+ position: absolute;
+ z-index: 1;
+ white-space: nowrap;
+ /* Prevents the text from wrapping and makes sure the tooltip width adapts to the text length */
+ font-size: 11px;
+ line-height: 2em;
+ bottom: 100%;
+ left: 50%;
+ transform: translateX(-50%);
}
-.asciinema-player-wrapper:-ms-fullscreen .fullscreen-button svg:last-child {
- display: inline;
+span.ap-marker-container:hover span.ap-marker-tooltip {
+ visibility: visible;
}
-.asciinema-player .loading {
+.ap-player .ap-overlay {
z-index: 10;
background-repeat: no-repeat;
background-position: center;
@@ -319,25 +301,16 @@
top: 0;
left: 0;
right: 0;
- bottom: 32px;
- background-color: rgba(0, 0, 0, 0.5);
+ bottom: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
}
-.asciinema-player .start-prompt {
- z-index: 10;
- background-repeat: no-repeat;
- background-position: center;
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 32px;
- z-index: 20;
+.ap-player .ap-overlay-start {
cursor: pointer;
}
-.asciinema-player .start-prompt .play-button {
+.ap-player .ap-overlay-start .ap-play-button {
font-size: 0px;
-}
-.asciinema-player .start-prompt .play-button {
position: absolute;
left: 0;
top: 0;
@@ -345,1645 +318,1614 @@
bottom: 0;
text-align: center;
color: white;
- display: table;
- width: 100%;
+ height: 80px;
+ max-height: 66%;
+ margin: auto;
+}
+.ap-player .ap-overlay-start .ap-play-button div {
height: 100%;
}
-.asciinema-player .start-prompt .play-button div {
- vertical-align: middle;
- display: table-cell;
-}
-.asciinema-player .start-prompt .play-button div span {
- width: 96px;
- height: 96px;
- display: inline-block;
-}
-@-webkit-keyframes expand {
- 0% {
- -webkit-transform: scale(0);
- }
- 50% {
- -webkit-transform: scale(1);
- }
- 100% {
- z-index: 1;
- }
-}
-@-moz-keyframes expand {
- 0% {
- -moz-transform: scale(0);
- }
- 50% {
- -moz-transform: scale(1);
- }
- 100% {
- z-index: 1;
- }
-}
-@-o-keyframes expand {
- 0% {
- -o-transform: scale(0);
- }
- 50% {
- -o-transform: scale(1);
- }
- 100% {
- z-index: 1;
- }
-}
-@keyframes expand {
- 0% {
- transform: scale(0);
- }
- 50% {
- transform: scale(1);
- }
- 100% {
- z-index: 1;
- }
-}
-.loader {
- position: absolute;
- left: 50%;
- top: 50%;
- margin: -20px 0 0 -20px;
- background-color: white;
- border-radius: 50%;
- box-shadow: 0 0 0 6.66667px #141414;
- width: 40px;
- height: 40px;
-}
-.loader:before,
-.loader:after {
- content: "";
- position: absolute;
- left: 50%;
- top: 50%;
+.ap-player .ap-overlay-start .ap-play-button div span {
+ height: 100%;
display: block;
- margin: -21px 0 0 -21px;
+}
+.ap-player .ap-overlay-start .ap-play-button div span svg {
+ height: 100%;
+}
+.ap-player .ap-overlay-loading .ap-loader {
+ width: 48px;
+ height: 48px;
border-radius: 50%;
- z-index: 2;
- width: 42px;
- height: 42px;
+ display: inline-block;
+ position: relative;
+ border: 10px solid;
+ border-color: rgba(255, 255, 255, 0.15) rgba(255, 255, 255, 0.25) rgba(255, 255, 255, 0.35) rgba(255, 255, 255, 0.5);
+ box-sizing: border-box;
+ animation: ap-loader-rotation 1s linear infinite;
}
-.loader:before {
- background-color: #141414;
- -webkit-animation: expand 1.6s linear infinite both;
- -moz-animation: expand 1.6s linear infinite both;
- animation: expand 1.6s linear infinite both;
+.ap-player .ap-overlay-offline span {
+ font-family: Consolas, Menlo, 'Bitstream Vera Sans Mono', monospace, 'Powerline Symbols';
+ font-variant-ligatures: none;
+ font-size: 2em;
}
-.loader:after {
- background-color: white;
- -webkit-animation: expand 1.6s linear 0.8s infinite both;
- -moz-animation: expand 1.6s linear 0.8s infinite both;
- animation: expand 1.6s linear 0.8s infinite both;
+.ap-player .ap-overlay-offline span .ap-line {
+ letter-spacing: normal;
+ overflow: hidden;
}
-.asciinema-terminal .fg-16 {
+.ap-player .ap-overlay-offline span .ap-line span {
+ padding: 0;
+ display: inline-block;
+ height: 100%;
+}
+.ap-player .ap-overlay-error span {
+ font-size: 8em;
+}
+@keyframes ap-loader-rotation {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+.ap-terminal .fg-16 {
color: #000000;
}
-.asciinema-terminal .bg-16 {
+.ap-terminal .bg-16 {
background-color: #000000;
}
-.asciinema-terminal .fg-17 {
+.ap-terminal .fg-17 {
color: #00005f;
}
-.asciinema-terminal .bg-17 {
+.ap-terminal .bg-17 {
background-color: #00005f;
}
-.asciinema-terminal .fg-18 {
+.ap-terminal .fg-18 {
color: #000087;
}
-.asciinema-terminal .bg-18 {
+.ap-terminal .bg-18 {
background-color: #000087;
}
-.asciinema-terminal .fg-19 {
+.ap-terminal .fg-19 {
color: #0000af;
}
-.asciinema-terminal .bg-19 {
+.ap-terminal .bg-19 {
background-color: #0000af;
}
-.asciinema-terminal .fg-20 {
+.ap-terminal .fg-20 {
color: #0000d7;
}
-.asciinema-terminal .bg-20 {
+.ap-terminal .bg-20 {
background-color: #0000d7;
}
-.asciinema-terminal .fg-21 {
+.ap-terminal .fg-21 {
color: #0000ff;
}
-.asciinema-terminal .bg-21 {
+.ap-terminal .bg-21 {
background-color: #0000ff;
}
-.asciinema-terminal .fg-22 {
+.ap-terminal .fg-22 {
color: #005f00;
}
-.asciinema-terminal .bg-22 {
+.ap-terminal .bg-22 {
background-color: #005f00;
}
-.asciinema-terminal .fg-23 {
+.ap-terminal .fg-23 {
color: #005f5f;
}
-.asciinema-terminal .bg-23 {
+.ap-terminal .bg-23 {
background-color: #005f5f;
}
-.asciinema-terminal .fg-24 {
+.ap-terminal .fg-24 {
color: #005f87;
}
-.asciinema-terminal .bg-24 {
+.ap-terminal .bg-24 {
background-color: #005f87;
}
-.asciinema-terminal .fg-25 {
+.ap-terminal .fg-25 {
color: #005faf;
}
-.asciinema-terminal .bg-25 {
+.ap-terminal .bg-25 {
background-color: #005faf;
}
-.asciinema-terminal .fg-26 {
+.ap-terminal .fg-26 {
color: #005fd7;
}
-.asciinema-terminal .bg-26 {
+.ap-terminal .bg-26 {
background-color: #005fd7;
}
-.asciinema-terminal .fg-27 {
+.ap-terminal .fg-27 {
color: #005fff;
}
-.asciinema-terminal .bg-27 {
+.ap-terminal .bg-27 {
background-color: #005fff;
}
-.asciinema-terminal .fg-28 {
+.ap-terminal .fg-28 {
color: #008700;
}
-.asciinema-terminal .bg-28 {
+.ap-terminal .bg-28 {
background-color: #008700;
}
-.asciinema-terminal .fg-29 {
+.ap-terminal .fg-29 {
color: #00875f;
}
-.asciinema-terminal .bg-29 {
+.ap-terminal .bg-29 {
background-color: #00875f;
}
-.asciinema-terminal .fg-30 {
+.ap-terminal .fg-30 {
color: #008787;
}
-.asciinema-terminal .bg-30 {
+.ap-terminal .bg-30 {
background-color: #008787;
}
-.asciinema-terminal .fg-31 {
+.ap-terminal .fg-31 {
color: #0087af;
}
-.asciinema-terminal .bg-31 {
+.ap-terminal .bg-31 {
background-color: #0087af;
}
-.asciinema-terminal .fg-32 {
+.ap-terminal .fg-32 {
color: #0087d7;
}
-.asciinema-terminal .bg-32 {
+.ap-terminal .bg-32 {
background-color: #0087d7;
}
-.asciinema-terminal .fg-33 {
+.ap-terminal .fg-33 {
color: #0087ff;
}
-.asciinema-terminal .bg-33 {
+.ap-terminal .bg-33 {
background-color: #0087ff;
}
-.asciinema-terminal .fg-34 {
+.ap-terminal .fg-34 {
color: #00af00;
}
-.asciinema-terminal .bg-34 {
+.ap-terminal .bg-34 {
background-color: #00af00;
}
-.asciinema-terminal .fg-35 {
+.ap-terminal .fg-35 {
color: #00af5f;
}
-.asciinema-terminal .bg-35 {
+.ap-terminal .bg-35 {
background-color: #00af5f;
}
-.asciinema-terminal .fg-36 {
+.ap-terminal .fg-36 {
color: #00af87;
}
-.asciinema-terminal .bg-36 {
+.ap-terminal .bg-36 {
background-color: #00af87;
}
-.asciinema-terminal .fg-37 {
+.ap-terminal .fg-37 {
color: #00afaf;
}
-.asciinema-terminal .bg-37 {
+.ap-terminal .bg-37 {
background-color: #00afaf;
}
-.asciinema-terminal .fg-38 {
+.ap-terminal .fg-38 {
color: #00afd7;
}
-.asciinema-terminal .bg-38 {
+.ap-terminal .bg-38 {
background-color: #00afd7;
}
-.asciinema-terminal .fg-39 {
+.ap-terminal .fg-39 {
color: #00afff;
}
-.asciinema-terminal .bg-39 {
+.ap-terminal .bg-39 {
background-color: #00afff;
}
-.asciinema-terminal .fg-40 {
+.ap-terminal .fg-40 {
color: #00d700;
}
-.asciinema-terminal .bg-40 {
+.ap-terminal .bg-40 {
background-color: #00d700;
}
-.asciinema-terminal .fg-41 {
+.ap-terminal .fg-41 {
color: #00d75f;
}
-.asciinema-terminal .bg-41 {
+.ap-terminal .bg-41 {
background-color: #00d75f;
}
-.asciinema-terminal .fg-42 {
+.ap-terminal .fg-42 {
color: #00d787;
}
-.asciinema-terminal .bg-42 {
+.ap-terminal .bg-42 {
background-color: #00d787;
}
-.asciinema-terminal .fg-43 {
+.ap-terminal .fg-43 {
color: #00d7af;
}
-.asciinema-terminal .bg-43 {
+.ap-terminal .bg-43 {
background-color: #00d7af;
}
-.asciinema-terminal .fg-44 {
+.ap-terminal .fg-44 {
color: #00d7d7;
}
-.asciinema-terminal .bg-44 {
+.ap-terminal .bg-44 {
background-color: #00d7d7;
}
-.asciinema-terminal .fg-45 {
+.ap-terminal .fg-45 {
color: #00d7ff;
}
-.asciinema-terminal .bg-45 {
+.ap-terminal .bg-45 {
background-color: #00d7ff;
}
-.asciinema-terminal .fg-46 {
+.ap-terminal .fg-46 {
color: #00ff00;
}
-.asciinema-terminal .bg-46 {
+.ap-terminal .bg-46 {
background-color: #00ff00;
}
-.asciinema-terminal .fg-47 {
+.ap-terminal .fg-47 {
color: #00ff5f;
}
-.asciinema-terminal .bg-47 {
+.ap-terminal .bg-47 {
background-color: #00ff5f;
}
-.asciinema-terminal .fg-48 {
+.ap-terminal .fg-48 {
color: #00ff87;
}
-.asciinema-terminal .bg-48 {
+.ap-terminal .bg-48 {
background-color: #00ff87;
}
-.asciinema-terminal .fg-49 {
+.ap-terminal .fg-49 {
color: #00ffaf;
}
-.asciinema-terminal .bg-49 {
+.ap-terminal .bg-49 {
background-color: #00ffaf;
}
-.asciinema-terminal .fg-50 {
+.ap-terminal .fg-50 {
color: #00ffd7;
}
-.asciinema-terminal .bg-50 {
+.ap-terminal .bg-50 {
background-color: #00ffd7;
}
-.asciinema-terminal .fg-51 {
+.ap-terminal .fg-51 {
color: #00ffff;
}
-.asciinema-terminal .bg-51 {
+.ap-terminal .bg-51 {
background-color: #00ffff;
}
-.asciinema-terminal .fg-52 {
+.ap-terminal .fg-52 {
color: #5f0000;
}
-.asciinema-terminal .bg-52 {
+.ap-terminal .bg-52 {
background-color: #5f0000;
}
-.asciinema-terminal .fg-53 {
+.ap-terminal .fg-53 {
color: #5f005f;
}
-.asciinema-terminal .bg-53 {
+.ap-terminal .bg-53 {
background-color: #5f005f;
}
-.asciinema-terminal .fg-54 {
+.ap-terminal .fg-54 {
color: #5f0087;
}
-.asciinema-terminal .bg-54 {
+.ap-terminal .bg-54 {
background-color: #5f0087;
}
-.asciinema-terminal .fg-55 {
+.ap-terminal .fg-55 {
color: #5f00af;
}
-.asciinema-terminal .bg-55 {
+.ap-terminal .bg-55 {
background-color: #5f00af;
}
-.asciinema-terminal .fg-56 {
+.ap-terminal .fg-56 {
color: #5f00d7;
}
-.asciinema-terminal .bg-56 {
+.ap-terminal .bg-56 {
background-color: #5f00d7;
}
-.asciinema-terminal .fg-57 {
+.ap-terminal .fg-57 {
color: #5f00ff;
}
-.asciinema-terminal .bg-57 {
+.ap-terminal .bg-57 {
background-color: #5f00ff;
}
-.asciinema-terminal .fg-58 {
+.ap-terminal .fg-58 {
color: #5f5f00;
}
-.asciinema-terminal .bg-58 {
+.ap-terminal .bg-58 {
background-color: #5f5f00;
}
-.asciinema-terminal .fg-59 {
+.ap-terminal .fg-59 {
color: #5f5f5f;
}
-.asciinema-terminal .bg-59 {
+.ap-terminal .bg-59 {
background-color: #5f5f5f;
}
-.asciinema-terminal .fg-60 {
+.ap-terminal .fg-60 {
color: #5f5f87;
}
-.asciinema-terminal .bg-60 {
+.ap-terminal .bg-60 {
background-color: #5f5f87;
}
-.asciinema-terminal .fg-61 {
+.ap-terminal .fg-61 {
color: #5f5faf;
}
-.asciinema-terminal .bg-61 {
+.ap-terminal .bg-61 {
background-color: #5f5faf;
}
-.asciinema-terminal .fg-62 {
+.ap-terminal .fg-62 {
color: #5f5fd7;
}
-.asciinema-terminal .bg-62 {
+.ap-terminal .bg-62 {
background-color: #5f5fd7;
}
-.asciinema-terminal .fg-63 {
+.ap-terminal .fg-63 {
color: #5f5fff;
}
-.asciinema-terminal .bg-63 {
+.ap-terminal .bg-63 {
background-color: #5f5fff;
}
-.asciinema-terminal .fg-64 {
+.ap-terminal .fg-64 {
color: #5f8700;
}
-.asciinema-terminal .bg-64 {
+.ap-terminal .bg-64 {
background-color: #5f8700;
}
-.asciinema-terminal .fg-65 {
+.ap-terminal .fg-65 {
color: #5f875f;
}
-.asciinema-terminal .bg-65 {
+.ap-terminal .bg-65 {
background-color: #5f875f;
}
-.asciinema-terminal .fg-66 {
+.ap-terminal .fg-66 {
color: #5f8787;
}
-.asciinema-terminal .bg-66 {
+.ap-terminal .bg-66 {
background-color: #5f8787;
}
-.asciinema-terminal .fg-67 {
+.ap-terminal .fg-67 {
color: #5f87af;
}
-.asciinema-terminal .bg-67 {
+.ap-terminal .bg-67 {
background-color: #5f87af;
}
-.asciinema-terminal .fg-68 {
+.ap-terminal .fg-68 {
color: #5f87d7;
}
-.asciinema-terminal .bg-68 {
+.ap-terminal .bg-68 {
background-color: #5f87d7;
}
-.asciinema-terminal .fg-69 {
+.ap-terminal .fg-69 {
color: #5f87ff;
}
-.asciinema-terminal .bg-69 {
+.ap-terminal .bg-69 {
background-color: #5f87ff;
}
-.asciinema-terminal .fg-70 {
+.ap-terminal .fg-70 {
color: #5faf00;
}
-.asciinema-terminal .bg-70 {
+.ap-terminal .bg-70 {
background-color: #5faf00;
}
-.asciinema-terminal .fg-71 {
+.ap-terminal .fg-71 {
color: #5faf5f;
}
-.asciinema-terminal .bg-71 {
+.ap-terminal .bg-71 {
background-color: #5faf5f;
}
-.asciinema-terminal .fg-72 {
+.ap-terminal .fg-72 {
color: #5faf87;
}
-.asciinema-terminal .bg-72 {
+.ap-terminal .bg-72 {
background-color: #5faf87;
}
-.asciinema-terminal .fg-73 {
+.ap-terminal .fg-73 {
color: #5fafaf;
}
-.asciinema-terminal .bg-73 {
+.ap-terminal .bg-73 {
background-color: #5fafaf;
}
-.asciinema-terminal .fg-74 {
+.ap-terminal .fg-74 {
color: #5fafd7;
}
-.asciinema-terminal .bg-74 {
+.ap-terminal .bg-74 {
background-color: #5fafd7;
}
-.asciinema-terminal .fg-75 {
+.ap-terminal .fg-75 {
color: #5fafff;
}
-.asciinema-terminal .bg-75 {
+.ap-terminal .bg-75 {
background-color: #5fafff;
}
-.asciinema-terminal .fg-76 {
+.ap-terminal .fg-76 {
color: #5fd700;
}
-.asciinema-terminal .bg-76 {
+.ap-terminal .bg-76 {
background-color: #5fd700;
}
-.asciinema-terminal .fg-77 {
+.ap-terminal .fg-77 {
color: #5fd75f;
}
-.asciinema-terminal .bg-77 {
+.ap-terminal .bg-77 {
background-color: #5fd75f;
}
-.asciinema-terminal .fg-78 {
+.ap-terminal .fg-78 {
color: #5fd787;
}
-.asciinema-terminal .bg-78 {
+.ap-terminal .bg-78 {
background-color: #5fd787;
}
-.asciinema-terminal .fg-79 {
+.ap-terminal .fg-79 {
color: #5fd7af;
}
-.asciinema-terminal .bg-79 {
+.ap-terminal .bg-79 {
background-color: #5fd7af;
}
-.asciinema-terminal .fg-80 {
+.ap-terminal .fg-80 {
color: #5fd7d7;
}
-.asciinema-terminal .bg-80 {
+.ap-terminal .bg-80 {
background-color: #5fd7d7;
}
-.asciinema-terminal .fg-81 {
+.ap-terminal .fg-81 {
color: #5fd7ff;
}
-.asciinema-terminal .bg-81 {
+.ap-terminal .bg-81 {
background-color: #5fd7ff;
}
-.asciinema-terminal .fg-82 {
+.ap-terminal .fg-82 {
color: #5fff00;
}
-.asciinema-terminal .bg-82 {
+.ap-terminal .bg-82 {
background-color: #5fff00;
}
-.asciinema-terminal .fg-83 {
+.ap-terminal .fg-83 {
color: #5fff5f;
}
-.asciinema-terminal .bg-83 {
+.ap-terminal .bg-83 {
background-color: #5fff5f;
}
-.asciinema-terminal .fg-84 {
+.ap-terminal .fg-84 {
color: #5fff87;
}
-.asciinema-terminal .bg-84 {
+.ap-terminal .bg-84 {
background-color: #5fff87;
}
-.asciinema-terminal .fg-85 {
+.ap-terminal .fg-85 {
color: #5fffaf;
}
-.asciinema-terminal .bg-85 {
+.ap-terminal .bg-85 {
background-color: #5fffaf;
}
-.asciinema-terminal .fg-86 {
+.ap-terminal .fg-86 {
color: #5fffd7;
}
-.asciinema-terminal .bg-86 {
+.ap-terminal .bg-86 {
background-color: #5fffd7;
}
-.asciinema-terminal .fg-87 {
+.ap-terminal .fg-87 {
color: #5fffff;
}
-.asciinema-terminal .bg-87 {
+.ap-terminal .bg-87 {
background-color: #5fffff;
}
-.asciinema-terminal .fg-88 {
+.ap-terminal .fg-88 {
color: #870000;
}
-.asciinema-terminal .bg-88 {
+.ap-terminal .bg-88 {
background-color: #870000;
}
-.asciinema-terminal .fg-89 {
+.ap-terminal .fg-89 {
color: #87005f;
}
-.asciinema-terminal .bg-89 {
+.ap-terminal .bg-89 {
background-color: #87005f;
}
-.asciinema-terminal .fg-90 {
+.ap-terminal .fg-90 {
color: #870087;
}
-.asciinema-terminal .bg-90 {
+.ap-terminal .bg-90 {
background-color: #870087;
}
-.asciinema-terminal .fg-91 {
+.ap-terminal .fg-91 {
color: #8700af;
}
-.asciinema-terminal .bg-91 {
+.ap-terminal .bg-91 {
background-color: #8700af;
}
-.asciinema-terminal .fg-92 {
+.ap-terminal .fg-92 {
color: #8700d7;
}
-.asciinema-terminal .bg-92 {
+.ap-terminal .bg-92 {
background-color: #8700d7;
}
-.asciinema-terminal .fg-93 {
+.ap-terminal .fg-93 {
color: #8700ff;
}
-.asciinema-terminal .bg-93 {
+.ap-terminal .bg-93 {
background-color: #8700ff;
}
-.asciinema-terminal .fg-94 {
+.ap-terminal .fg-94 {
color: #875f00;
}
-.asciinema-terminal .bg-94 {
+.ap-terminal .bg-94 {
background-color: #875f00;
}
-.asciinema-terminal .fg-95 {
+.ap-terminal .fg-95 {
color: #875f5f;
}
-.asciinema-terminal .bg-95 {
+.ap-terminal .bg-95 {
background-color: #875f5f;
}
-.asciinema-terminal .fg-96 {
+.ap-terminal .fg-96 {
color: #875f87;
}
-.asciinema-terminal .bg-96 {
+.ap-terminal .bg-96 {
background-color: #875f87;
}
-.asciinema-terminal .fg-97 {
+.ap-terminal .fg-97 {
color: #875faf;
}
-.asciinema-terminal .bg-97 {
+.ap-terminal .bg-97 {
background-color: #875faf;
}
-.asciinema-terminal .fg-98 {
+.ap-terminal .fg-98 {
color: #875fd7;
}
-.asciinema-terminal .bg-98 {
+.ap-terminal .bg-98 {
background-color: #875fd7;
}
-.asciinema-terminal .fg-99 {
+.ap-terminal .fg-99 {
color: #875fff;
}
-.asciinema-terminal .bg-99 {
+.ap-terminal .bg-99 {
background-color: #875fff;
}
-.asciinema-terminal .fg-100 {
+.ap-terminal .fg-100 {
color: #878700;
}
-.asciinema-terminal .bg-100 {
+.ap-terminal .bg-100 {
background-color: #878700;
}
-.asciinema-terminal .fg-101 {
+.ap-terminal .fg-101 {
color: #87875f;
}
-.asciinema-terminal .bg-101 {
+.ap-terminal .bg-101 {
background-color: #87875f;
}
-.asciinema-terminal .fg-102 {
+.ap-terminal .fg-102 {
color: #878787;
}
-.asciinema-terminal .bg-102 {
+.ap-terminal .bg-102 {
background-color: #878787;
}
-.asciinema-terminal .fg-103 {
+.ap-terminal .fg-103 {
color: #8787af;
}
-.asciinema-terminal .bg-103 {
+.ap-terminal .bg-103 {
background-color: #8787af;
}
-.asciinema-terminal .fg-104 {
+.ap-terminal .fg-104 {
color: #8787d7;
}
-.asciinema-terminal .bg-104 {
+.ap-terminal .bg-104 {
background-color: #8787d7;
}
-.asciinema-terminal .fg-105 {
+.ap-terminal .fg-105 {
color: #8787ff;
}
-.asciinema-terminal .bg-105 {
+.ap-terminal .bg-105 {
background-color: #8787ff;
}
-.asciinema-terminal .fg-106 {
+.ap-terminal .fg-106 {
color: #87af00;
}
-.asciinema-terminal .bg-106 {
+.ap-terminal .bg-106 {
background-color: #87af00;
}
-.asciinema-terminal .fg-107 {
+.ap-terminal .fg-107 {
color: #87af5f;
}
-.asciinema-terminal .bg-107 {
+.ap-terminal .bg-107 {
background-color: #87af5f;
}
-.asciinema-terminal .fg-108 {
+.ap-terminal .fg-108 {
color: #87af87;
}
-.asciinema-terminal .bg-108 {
+.ap-terminal .bg-108 {
background-color: #87af87;
}
-.asciinema-terminal .fg-109 {
+.ap-terminal .fg-109 {
color: #87afaf;
}
-.asciinema-terminal .bg-109 {
+.ap-terminal .bg-109 {
background-color: #87afaf;
}
-.asciinema-terminal .fg-110 {
+.ap-terminal .fg-110 {
color: #87afd7;
}
-.asciinema-terminal .bg-110 {
+.ap-terminal .bg-110 {
background-color: #87afd7;
}
-.asciinema-terminal .fg-111 {
+.ap-terminal .fg-111 {
color: #87afff;
}
-.asciinema-terminal .bg-111 {
+.ap-terminal .bg-111 {
background-color: #87afff;
}
-.asciinema-terminal .fg-112 {
+.ap-terminal .fg-112 {
color: #87d700;
}
-.asciinema-terminal .bg-112 {
+.ap-terminal .bg-112 {
background-color: #87d700;
}
-.asciinema-terminal .fg-113 {
+.ap-terminal .fg-113 {
color: #87d75f;
}
-.asciinema-terminal .bg-113 {
+.ap-terminal .bg-113 {
background-color: #87d75f;
}
-.asciinema-terminal .fg-114 {
+.ap-terminal .fg-114 {
color: #87d787;
}
-.asciinema-terminal .bg-114 {
+.ap-terminal .bg-114 {
background-color: #87d787;
}
-.asciinema-terminal .fg-115 {
+.ap-terminal .fg-115 {
color: #87d7af;
}
-.asciinema-terminal .bg-115 {
+.ap-terminal .bg-115 {
background-color: #87d7af;
}
-.asciinema-terminal .fg-116 {
+.ap-terminal .fg-116 {
color: #87d7d7;
}
-.asciinema-terminal .bg-116 {
+.ap-terminal .bg-116 {
background-color: #87d7d7;
}
-.asciinema-terminal .fg-117 {
+.ap-terminal .fg-117 {
color: #87d7ff;
}
-.asciinema-terminal .bg-117 {
+.ap-terminal .bg-117 {
background-color: #87d7ff;
}
-.asciinema-terminal .fg-118 {
+.ap-terminal .fg-118 {
color: #87ff00;
}
-.asciinema-terminal .bg-118 {
+.ap-terminal .bg-118 {
background-color: #87ff00;
}
-.asciinema-terminal .fg-119 {
+.ap-terminal .fg-119 {
color: #87ff5f;
}
-.asciinema-terminal .bg-119 {
+.ap-terminal .bg-119 {
background-color: #87ff5f;
}
-.asciinema-terminal .fg-120 {
+.ap-terminal .fg-120 {
color: #87ff87;
}
-.asciinema-terminal .bg-120 {
+.ap-terminal .bg-120 {
background-color: #87ff87;
}
-.asciinema-terminal .fg-121 {
+.ap-terminal .fg-121 {
color: #87ffaf;
}
-.asciinema-terminal .bg-121 {
+.ap-terminal .bg-121 {
background-color: #87ffaf;
}
-.asciinema-terminal .fg-122 {
+.ap-terminal .fg-122 {
color: #87ffd7;
}
-.asciinema-terminal .bg-122 {
+.ap-terminal .bg-122 {
background-color: #87ffd7;
}
-.asciinema-terminal .fg-123 {
+.ap-terminal .fg-123 {
color: #87ffff;
}
-.asciinema-terminal .bg-123 {
+.ap-terminal .bg-123 {
background-color: #87ffff;
}
-.asciinema-terminal .fg-124 {
+.ap-terminal .fg-124 {
color: #af0000;
}
-.asciinema-terminal .bg-124 {
+.ap-terminal .bg-124 {
background-color: #af0000;
}
-.asciinema-terminal .fg-125 {
+.ap-terminal .fg-125 {
color: #af005f;
}
-.asciinema-terminal .bg-125 {
+.ap-terminal .bg-125 {
background-color: #af005f;
}
-.asciinema-terminal .fg-126 {
+.ap-terminal .fg-126 {
color: #af0087;
}
-.asciinema-terminal .bg-126 {
+.ap-terminal .bg-126 {
background-color: #af0087;
}
-.asciinema-terminal .fg-127 {
+.ap-terminal .fg-127 {
color: #af00af;
}
-.asciinema-terminal .bg-127 {
+.ap-terminal .bg-127 {
background-color: #af00af;
}
-.asciinema-terminal .fg-128 {
+.ap-terminal .fg-128 {
color: #af00d7;
}
-.asciinema-terminal .bg-128 {
+.ap-terminal .bg-128 {
background-color: #af00d7;
}
-.asciinema-terminal .fg-129 {
+.ap-terminal .fg-129 {
color: #af00ff;
}
-.asciinema-terminal .bg-129 {
+.ap-terminal .bg-129 {
background-color: #af00ff;
}
-.asciinema-terminal .fg-130 {
+.ap-terminal .fg-130 {
color: #af5f00;
}
-.asciinema-terminal .bg-130 {
+.ap-terminal .bg-130 {
background-color: #af5f00;
}
-.asciinema-terminal .fg-131 {
+.ap-terminal .fg-131 {
color: #af5f5f;
}
-.asciinema-terminal .bg-131 {
+.ap-terminal .bg-131 {
background-color: #af5f5f;
}
-.asciinema-terminal .fg-132 {
+.ap-terminal .fg-132 {
color: #af5f87;
}
-.asciinema-terminal .bg-132 {
+.ap-terminal .bg-132 {
background-color: #af5f87;
}
-.asciinema-terminal .fg-133 {
+.ap-terminal .fg-133 {
color: #af5faf;
}
-.asciinema-terminal .bg-133 {
+.ap-terminal .bg-133 {
background-color: #af5faf;
}
-.asciinema-terminal .fg-134 {
+.ap-terminal .fg-134 {
color: #af5fd7;
}
-.asciinema-terminal .bg-134 {
+.ap-terminal .bg-134 {
background-color: #af5fd7;
}
-.asciinema-terminal .fg-135 {
+.ap-terminal .fg-135 {
color: #af5fff;
}
-.asciinema-terminal .bg-135 {
+.ap-terminal .bg-135 {
background-color: #af5fff;
}
-.asciinema-terminal .fg-136 {
+.ap-terminal .fg-136 {
color: #af8700;
}
-.asciinema-terminal .bg-136 {
+.ap-terminal .bg-136 {
background-color: #af8700;
}
-.asciinema-terminal .fg-137 {
+.ap-terminal .fg-137 {
color: #af875f;
}
-.asciinema-terminal .bg-137 {
+.ap-terminal .bg-137 {
background-color: #af875f;
}
-.asciinema-terminal .fg-138 {
+.ap-terminal .fg-138 {
color: #af8787;
}
-.asciinema-terminal .bg-138 {
+.ap-terminal .bg-138 {
background-color: #af8787;
}
-.asciinema-terminal .fg-139 {
+.ap-terminal .fg-139 {
color: #af87af;
}
-.asciinema-terminal .bg-139 {
+.ap-terminal .bg-139 {
background-color: #af87af;
}
-.asciinema-terminal .fg-140 {
+.ap-terminal .fg-140 {
color: #af87d7;
}
-.asciinema-terminal .bg-140 {
+.ap-terminal .bg-140 {
background-color: #af87d7;
}
-.asciinema-terminal .fg-141 {
+.ap-terminal .fg-141 {
color: #af87ff;
}
-.asciinema-terminal .bg-141 {
+.ap-terminal .bg-141 {
background-color: #af87ff;
}
-.asciinema-terminal .fg-142 {
+.ap-terminal .fg-142 {
color: #afaf00;
}
-.asciinema-terminal .bg-142 {
+.ap-terminal .bg-142 {
background-color: #afaf00;
}
-.asciinema-terminal .fg-143 {
+.ap-terminal .fg-143 {
color: #afaf5f;
}
-.asciinema-terminal .bg-143 {
+.ap-terminal .bg-143 {
background-color: #afaf5f;
}
-.asciinema-terminal .fg-144 {
+.ap-terminal .fg-144 {
color: #afaf87;
}
-.asciinema-terminal .bg-144 {
+.ap-terminal .bg-144 {
background-color: #afaf87;
}
-.asciinema-terminal .fg-145 {
+.ap-terminal .fg-145 {
color: #afafaf;
}
-.asciinema-terminal .bg-145 {
+.ap-terminal .bg-145 {
background-color: #afafaf;
}
-.asciinema-terminal .fg-146 {
+.ap-terminal .fg-146 {
color: #afafd7;
}
-.asciinema-terminal .bg-146 {
+.ap-terminal .bg-146 {
background-color: #afafd7;
}
-.asciinema-terminal .fg-147 {
+.ap-terminal .fg-147 {
color: #afafff;
}
-.asciinema-terminal .bg-147 {
+.ap-terminal .bg-147 {
background-color: #afafff;
}
-.asciinema-terminal .fg-148 {
+.ap-terminal .fg-148 {
color: #afd700;
}
-.asciinema-terminal .bg-148 {
+.ap-terminal .bg-148 {
background-color: #afd700;
}
-.asciinema-terminal .fg-149 {
+.ap-terminal .fg-149 {
color: #afd75f;
}
-.asciinema-terminal .bg-149 {
+.ap-terminal .bg-149 {
background-color: #afd75f;
}
-.asciinema-terminal .fg-150 {
+.ap-terminal .fg-150 {
color: #afd787;
}
-.asciinema-terminal .bg-150 {
+.ap-terminal .bg-150 {
background-color: #afd787;
}
-.asciinema-terminal .fg-151 {
+.ap-terminal .fg-151 {
color: #afd7af;
}
-.asciinema-terminal .bg-151 {
+.ap-terminal .bg-151 {
background-color: #afd7af;
}
-.asciinema-terminal .fg-152 {
+.ap-terminal .fg-152 {
color: #afd7d7;
}
-.asciinema-terminal .bg-152 {
+.ap-terminal .bg-152 {
background-color: #afd7d7;
}
-.asciinema-terminal .fg-153 {
+.ap-terminal .fg-153 {
color: #afd7ff;
}
-.asciinema-terminal .bg-153 {
+.ap-terminal .bg-153 {
background-color: #afd7ff;
}
-.asciinema-terminal .fg-154 {
+.ap-terminal .fg-154 {
color: #afff00;
}
-.asciinema-terminal .bg-154 {
+.ap-terminal .bg-154 {
background-color: #afff00;
}
-.asciinema-terminal .fg-155 {
+.ap-terminal .fg-155 {
color: #afff5f;
}
-.asciinema-terminal .bg-155 {
+.ap-terminal .bg-155 {
background-color: #afff5f;
}
-.asciinema-terminal .fg-156 {
+.ap-terminal .fg-156 {
color: #afff87;
}
-.asciinema-terminal .bg-156 {
+.ap-terminal .bg-156 {
background-color: #afff87;
}
-.asciinema-terminal .fg-157 {
+.ap-terminal .fg-157 {
color: #afffaf;
}
-.asciinema-terminal .bg-157 {
+.ap-terminal .bg-157 {
background-color: #afffaf;
}
-.asciinema-terminal .fg-158 {
+.ap-terminal .fg-158 {
color: #afffd7;
}
-.asciinema-terminal .bg-158 {
+.ap-terminal .bg-158 {
background-color: #afffd7;
}
-.asciinema-terminal .fg-159 {
+.ap-terminal .fg-159 {
color: #afffff;
}
-.asciinema-terminal .bg-159 {
+.ap-terminal .bg-159 {
background-color: #afffff;
}
-.asciinema-terminal .fg-160 {
+.ap-terminal .fg-160 {
color: #d70000;
}
-.asciinema-terminal .bg-160 {
+.ap-terminal .bg-160 {
background-color: #d70000;
}
-.asciinema-terminal .fg-161 {
+.ap-terminal .fg-161 {
color: #d7005f;
}
-.asciinema-terminal .bg-161 {
+.ap-terminal .bg-161 {
background-color: #d7005f;
}
-.asciinema-terminal .fg-162 {
+.ap-terminal .fg-162 {
color: #d70087;
}
-.asciinema-terminal .bg-162 {
+.ap-terminal .bg-162 {
background-color: #d70087;
}
-.asciinema-terminal .fg-163 {
+.ap-terminal .fg-163 {
color: #d700af;
}
-.asciinema-terminal .bg-163 {
+.ap-terminal .bg-163 {
background-color: #d700af;
}
-.asciinema-terminal .fg-164 {
+.ap-terminal .fg-164 {
color: #d700d7;
}
-.asciinema-terminal .bg-164 {
+.ap-terminal .bg-164 {
background-color: #d700d7;
}
-.asciinema-terminal .fg-165 {
+.ap-terminal .fg-165 {
color: #d700ff;
}
-.asciinema-terminal .bg-165 {
+.ap-terminal .bg-165 {
background-color: #d700ff;
}
-.asciinema-terminal .fg-166 {
+.ap-terminal .fg-166 {
color: #d75f00;
}
-.asciinema-terminal .bg-166 {
+.ap-terminal .bg-166 {
background-color: #d75f00;
}
-.asciinema-terminal .fg-167 {
+.ap-terminal .fg-167 {
color: #d75f5f;
}
-.asciinema-terminal .bg-167 {
+.ap-terminal .bg-167 {
background-color: #d75f5f;
}
-.asciinema-terminal .fg-168 {
+.ap-terminal .fg-168 {
color: #d75f87;
}
-.asciinema-terminal .bg-168 {
+.ap-terminal .bg-168 {
background-color: #d75f87;
}
-.asciinema-terminal .fg-169 {
+.ap-terminal .fg-169 {
color: #d75faf;
}
-.asciinema-terminal .bg-169 {
+.ap-terminal .bg-169 {
background-color: #d75faf;
}
-.asciinema-terminal .fg-170 {
+.ap-terminal .fg-170 {
color: #d75fd7;
}
-.asciinema-terminal .bg-170 {
+.ap-terminal .bg-170 {
background-color: #d75fd7;
}
-.asciinema-terminal .fg-171 {
+.ap-terminal .fg-171 {
color: #d75fff;
}
-.asciinema-terminal .bg-171 {
+.ap-terminal .bg-171 {
background-color: #d75fff;
}
-.asciinema-terminal .fg-172 {
+.ap-terminal .fg-172 {
color: #d78700;
}
-.asciinema-terminal .bg-172 {
+.ap-terminal .bg-172 {
background-color: #d78700;
}
-.asciinema-terminal .fg-173 {
+.ap-terminal .fg-173 {
color: #d7875f;
}
-.asciinema-terminal .bg-173 {
+.ap-terminal .bg-173 {
background-color: #d7875f;
}
-.asciinema-terminal .fg-174 {
+.ap-terminal .fg-174 {
color: #d78787;
}
-.asciinema-terminal .bg-174 {
+.ap-terminal .bg-174 {
background-color: #d78787;
}
-.asciinema-terminal .fg-175 {
+.ap-terminal .fg-175 {
color: #d787af;
}
-.asciinema-terminal .bg-175 {
+.ap-terminal .bg-175 {
background-color: #d787af;
}
-.asciinema-terminal .fg-176 {
+.ap-terminal .fg-176 {
color: #d787d7;
}
-.asciinema-terminal .bg-176 {
+.ap-terminal .bg-176 {
background-color: #d787d7;
}
-.asciinema-terminal .fg-177 {
+.ap-terminal .fg-177 {
color: #d787ff;
}
-.asciinema-terminal .bg-177 {
+.ap-terminal .bg-177 {
background-color: #d787ff;
}
-.asciinema-terminal .fg-178 {
+.ap-terminal .fg-178 {
color: #d7af00;
}
-.asciinema-terminal .bg-178 {
+.ap-terminal .bg-178 {
background-color: #d7af00;
}
-.asciinema-terminal .fg-179 {
+.ap-terminal .fg-179 {
color: #d7af5f;
}
-.asciinema-terminal .bg-179 {
+.ap-terminal .bg-179 {
background-color: #d7af5f;
}
-.asciinema-terminal .fg-180 {
+.ap-terminal .fg-180 {
color: #d7af87;
}
-.asciinema-terminal .bg-180 {
+.ap-terminal .bg-180 {
background-color: #d7af87;
}
-.asciinema-terminal .fg-181 {
+.ap-terminal .fg-181 {
color: #d7afaf;
}
-.asciinema-terminal .bg-181 {
+.ap-terminal .bg-181 {
background-color: #d7afaf;
}
-.asciinema-terminal .fg-182 {
+.ap-terminal .fg-182 {
color: #d7afd7;
}
-.asciinema-terminal .bg-182 {
+.ap-terminal .bg-182 {
background-color: #d7afd7;
}
-.asciinema-terminal .fg-183 {
+.ap-terminal .fg-183 {
color: #d7afff;
}
-.asciinema-terminal .bg-183 {
+.ap-terminal .bg-183 {
background-color: #d7afff;
}
-.asciinema-terminal .fg-184 {
+.ap-terminal .fg-184 {
color: #d7d700;
}
-.asciinema-terminal .bg-184 {
+.ap-terminal .bg-184 {
background-color: #d7d700;
}
-.asciinema-terminal .fg-185 {
+.ap-terminal .fg-185 {
color: #d7d75f;
}
-.asciinema-terminal .bg-185 {
+.ap-terminal .bg-185 {
background-color: #d7d75f;
}
-.asciinema-terminal .fg-186 {
+.ap-terminal .fg-186 {
color: #d7d787;
}
-.asciinema-terminal .bg-186 {
+.ap-terminal .bg-186 {
background-color: #d7d787;
}
-.asciinema-terminal .fg-187 {
+.ap-terminal .fg-187 {
color: #d7d7af;
}
-.asciinema-terminal .bg-187 {
+.ap-terminal .bg-187 {
background-color: #d7d7af;
}
-.asciinema-terminal .fg-188 {
+.ap-terminal .fg-188 {
color: #d7d7d7;
}
-.asciinema-terminal .bg-188 {
+.ap-terminal .bg-188 {
background-color: #d7d7d7;
}
-.asciinema-terminal .fg-189 {
+.ap-terminal .fg-189 {
color: #d7d7ff;
}
-.asciinema-terminal .bg-189 {
+.ap-terminal .bg-189 {
background-color: #d7d7ff;
}
-.asciinema-terminal .fg-190 {
+.ap-terminal .fg-190 {
color: #d7ff00;
}
-.asciinema-terminal .bg-190 {
+.ap-terminal .bg-190 {
background-color: #d7ff00;
}
-.asciinema-terminal .fg-191 {
+.ap-terminal .fg-191 {
color: #d7ff5f;
}
-.asciinema-terminal .bg-191 {
+.ap-terminal .bg-191 {
background-color: #d7ff5f;
}
-.asciinema-terminal .fg-192 {
+.ap-terminal .fg-192 {
color: #d7ff87;
}
-.asciinema-terminal .bg-192 {
+.ap-terminal .bg-192 {
background-color: #d7ff87;
}
-.asciinema-terminal .fg-193 {
+.ap-terminal .fg-193 {
color: #d7ffaf;
}
-.asciinema-terminal .bg-193 {
+.ap-terminal .bg-193 {
background-color: #d7ffaf;
}
-.asciinema-terminal .fg-194 {
+.ap-terminal .fg-194 {
color: #d7ffd7;
}
-.asciinema-terminal .bg-194 {
+.ap-terminal .bg-194 {
background-color: #d7ffd7;
}
-.asciinema-terminal .fg-195 {
+.ap-terminal .fg-195 {
color: #d7ffff;
}
-.asciinema-terminal .bg-195 {
+.ap-terminal .bg-195 {
background-color: #d7ffff;
}
-.asciinema-terminal .fg-196 {
+.ap-terminal .fg-196 {
color: #ff0000;
}
-.asciinema-terminal .bg-196 {
+.ap-terminal .bg-196 {
background-color: #ff0000;
}
-.asciinema-terminal .fg-197 {
+.ap-terminal .fg-197 {
color: #ff005f;
}
-.asciinema-terminal .bg-197 {
+.ap-terminal .bg-197 {
background-color: #ff005f;
}
-.asciinema-terminal .fg-198 {
+.ap-terminal .fg-198 {
color: #ff0087;
}
-.asciinema-terminal .bg-198 {
+.ap-terminal .bg-198 {
background-color: #ff0087;
}
-.asciinema-terminal .fg-199 {
+.ap-terminal .fg-199 {
color: #ff00af;
}
-.asciinema-terminal .bg-199 {
+.ap-terminal .bg-199 {
background-color: #ff00af;
}
-.asciinema-terminal .fg-200 {
+.ap-terminal .fg-200 {
color: #ff00d7;
}
-.asciinema-terminal .bg-200 {
+.ap-terminal .bg-200 {
background-color: #ff00d7;
}
-.asciinema-terminal .fg-201 {
+.ap-terminal .fg-201 {
color: #ff00ff;
}
-.asciinema-terminal .bg-201 {
+.ap-terminal .bg-201 {
background-color: #ff00ff;
}
-.asciinema-terminal .fg-202 {
+.ap-terminal .fg-202 {
color: #ff5f00;
}
-.asciinema-terminal .bg-202 {
+.ap-terminal .bg-202 {
background-color: #ff5f00;
}
-.asciinema-terminal .fg-203 {
+.ap-terminal .fg-203 {
color: #ff5f5f;
}
-.asciinema-terminal .bg-203 {
+.ap-terminal .bg-203 {
background-color: #ff5f5f;
}
-.asciinema-terminal .fg-204 {
+.ap-terminal .fg-204 {
color: #ff5f87;
}
-.asciinema-terminal .bg-204 {
+.ap-terminal .bg-204 {
background-color: #ff5f87;
}
-.asciinema-terminal .fg-205 {
+.ap-terminal .fg-205 {
color: #ff5faf;
}
-.asciinema-terminal .bg-205 {
+.ap-terminal .bg-205 {
background-color: #ff5faf;
}
-.asciinema-terminal .fg-206 {
+.ap-terminal .fg-206 {
color: #ff5fd7;
}
-.asciinema-terminal .bg-206 {
+.ap-terminal .bg-206 {
background-color: #ff5fd7;
}
-.asciinema-terminal .fg-207 {
+.ap-terminal .fg-207 {
color: #ff5fff;
}
-.asciinema-terminal .bg-207 {
+.ap-terminal .bg-207 {
background-color: #ff5fff;
}
-.asciinema-terminal .fg-208 {
+.ap-terminal .fg-208 {
color: #ff8700;
}
-.asciinema-terminal .bg-208 {
+.ap-terminal .bg-208 {
background-color: #ff8700;
}
-.asciinema-terminal .fg-209 {
+.ap-terminal .fg-209 {
color: #ff875f;
}
-.asciinema-terminal .bg-209 {
+.ap-terminal .bg-209 {
background-color: #ff875f;
}
-.asciinema-terminal .fg-210 {
+.ap-terminal .fg-210 {
color: #ff8787;
}
-.asciinema-terminal .bg-210 {
+.ap-terminal .bg-210 {
background-color: #ff8787;
}
-.asciinema-terminal .fg-211 {
+.ap-terminal .fg-211 {
color: #ff87af;
}
-.asciinema-terminal .bg-211 {
+.ap-terminal .bg-211 {
background-color: #ff87af;
}
-.asciinema-terminal .fg-212 {
+.ap-terminal .fg-212 {
color: #ff87d7;
}
-.asciinema-terminal .bg-212 {
+.ap-terminal .bg-212 {
background-color: #ff87d7;
}
-.asciinema-terminal .fg-213 {
+.ap-terminal .fg-213 {
color: #ff87ff;
}
-.asciinema-terminal .bg-213 {
+.ap-terminal .bg-213 {
background-color: #ff87ff;
}
-.asciinema-terminal .fg-214 {
+.ap-terminal .fg-214 {
color: #ffaf00;
}
-.asciinema-terminal .bg-214 {
+.ap-terminal .bg-214 {
background-color: #ffaf00;
}
-.asciinema-terminal .fg-215 {
+.ap-terminal .fg-215 {
color: #ffaf5f;
}
-.asciinema-terminal .bg-215 {
+.ap-terminal .bg-215 {
background-color: #ffaf5f;
}
-.asciinema-terminal .fg-216 {
+.ap-terminal .fg-216 {
color: #ffaf87;
}
-.asciinema-terminal .bg-216 {
+.ap-terminal .bg-216 {
background-color: #ffaf87;
}
-.asciinema-terminal .fg-217 {
+.ap-terminal .fg-217 {
color: #ffafaf;
}
-.asciinema-terminal .bg-217 {
+.ap-terminal .bg-217 {
background-color: #ffafaf;
}
-.asciinema-terminal .fg-218 {
+.ap-terminal .fg-218 {
color: #ffafd7;
}
-.asciinema-terminal .bg-218 {
+.ap-terminal .bg-218 {
background-color: #ffafd7;
}
-.asciinema-terminal .fg-219 {
+.ap-terminal .fg-219 {
color: #ffafff;
}
-.asciinema-terminal .bg-219 {
+.ap-terminal .bg-219 {
background-color: #ffafff;
}
-.asciinema-terminal .fg-220 {
+.ap-terminal .fg-220 {
color: #ffd700;
}
-.asciinema-terminal .bg-220 {
+.ap-terminal .bg-220 {
background-color: #ffd700;
}
-.asciinema-terminal .fg-221 {
+.ap-terminal .fg-221 {
color: #ffd75f;
}
-.asciinema-terminal .bg-221 {
+.ap-terminal .bg-221 {
background-color: #ffd75f;
}
-.asciinema-terminal .fg-222 {
+.ap-terminal .fg-222 {
color: #ffd787;
}
-.asciinema-terminal .bg-222 {
+.ap-terminal .bg-222 {
background-color: #ffd787;
}
-.asciinema-terminal .fg-223 {
+.ap-terminal .fg-223 {
color: #ffd7af;
}
-.asciinema-terminal .bg-223 {
+.ap-terminal .bg-223 {
background-color: #ffd7af;
}
-.asciinema-terminal .fg-224 {
+.ap-terminal .fg-224 {
color: #ffd7d7;
}
-.asciinema-terminal .bg-224 {
+.ap-terminal .bg-224 {
background-color: #ffd7d7;
}
-.asciinema-terminal .fg-225 {
+.ap-terminal .fg-225 {
color: #ffd7ff;
}
-.asciinema-terminal .bg-225 {
+.ap-terminal .bg-225 {
background-color: #ffd7ff;
}
-.asciinema-terminal .fg-226 {
+.ap-terminal .fg-226 {
color: #ffff00;
}
-.asciinema-terminal .bg-226 {
+.ap-terminal .bg-226 {
background-color: #ffff00;
}
-.asciinema-terminal .fg-227 {
+.ap-terminal .fg-227 {
color: #ffff5f;
}
-.asciinema-terminal .bg-227 {
+.ap-terminal .bg-227 {
background-color: #ffff5f;
}
-.asciinema-terminal .fg-228 {
+.ap-terminal .fg-228 {
color: #ffff87;
}
-.asciinema-terminal .bg-228 {
+.ap-terminal .bg-228 {
background-color: #ffff87;
}
-.asciinema-terminal .fg-229 {
+.ap-terminal .fg-229 {
color: #ffffaf;
}
-.asciinema-terminal .bg-229 {
+.ap-terminal .bg-229 {
background-color: #ffffaf;
}
-.asciinema-terminal .fg-230 {
+.ap-terminal .fg-230 {
color: #ffffd7;
}
-.asciinema-terminal .bg-230 {
+.ap-terminal .bg-230 {
background-color: #ffffd7;
}
-.asciinema-terminal .fg-231 {
+.ap-terminal .fg-231 {
color: #ffffff;
}
-.asciinema-terminal .bg-231 {
+.ap-terminal .bg-231 {
background-color: #ffffff;
}
-.asciinema-terminal .fg-232 {
+.ap-terminal .fg-232 {
color: #080808;
}
-.asciinema-terminal .bg-232 {
+.ap-terminal .bg-232 {
background-color: #080808;
}
-.asciinema-terminal .fg-233 {
+.ap-terminal .fg-233 {
color: #121212;
}
-.asciinema-terminal .bg-233 {
+.ap-terminal .bg-233 {
background-color: #121212;
}
-.asciinema-terminal .fg-234 {
+.ap-terminal .fg-234 {
color: #1c1c1c;
}
-.asciinema-terminal .bg-234 {
+.ap-terminal .bg-234 {
background-color: #1c1c1c;
}
-.asciinema-terminal .fg-235 {
+.ap-terminal .fg-235 {
color: #262626;
}
-.asciinema-terminal .bg-235 {
+.ap-terminal .bg-235 {
background-color: #262626;
}
-.asciinema-terminal .fg-236 {
+.ap-terminal .fg-236 {
color: #303030;
}
-.asciinema-terminal .bg-236 {
+.ap-terminal .bg-236 {
background-color: #303030;
}
-.asciinema-terminal .fg-237 {
+.ap-terminal .fg-237 {
color: #3a3a3a;
}
-.asciinema-terminal .bg-237 {
+.ap-terminal .bg-237 {
background-color: #3a3a3a;
}
-.asciinema-terminal .fg-238 {
+.ap-terminal .fg-238 {
color: #444444;
}
-.asciinema-terminal .bg-238 {
+.ap-terminal .bg-238 {
background-color: #444444;
}
-.asciinema-terminal .fg-239 {
+.ap-terminal .fg-239 {
color: #4e4e4e;
}
-.asciinema-terminal .bg-239 {
+.ap-terminal .bg-239 {
background-color: #4e4e4e;
}
-.asciinema-terminal .fg-240 {
+.ap-terminal .fg-240 {
color: #585858;
}
-.asciinema-terminal .bg-240 {
+.ap-terminal .bg-240 {
background-color: #585858;
}
-.asciinema-terminal .fg-241 {
+.ap-terminal .fg-241 {
color: #626262;
}
-.asciinema-terminal .bg-241 {
+.ap-terminal .bg-241 {
background-color: #626262;
}
-.asciinema-terminal .fg-242 {
+.ap-terminal .fg-242 {
color: #6c6c6c;
}
-.asciinema-terminal .bg-242 {
+.ap-terminal .bg-242 {
background-color: #6c6c6c;
}
-.asciinema-terminal .fg-243 {
+.ap-terminal .fg-243 {
color: #767676;
}
-.asciinema-terminal .bg-243 {
+.ap-terminal .bg-243 {
background-color: #767676;
}
-.asciinema-terminal .fg-244 {
+.ap-terminal .fg-244 {
color: #808080;
}
-.asciinema-terminal .bg-244 {
+.ap-terminal .bg-244 {
background-color: #808080;
}
-.asciinema-terminal .fg-245 {
+.ap-terminal .fg-245 {
color: #8a8a8a;
}
-.asciinema-terminal .bg-245 {
+.ap-terminal .bg-245 {
background-color: #8a8a8a;
}
-.asciinema-terminal .fg-246 {
+.ap-terminal .fg-246 {
color: #949494;
}
-.asciinema-terminal .bg-246 {
+.ap-terminal .bg-246 {
background-color: #949494;
}
-.asciinema-terminal .fg-247 {
+.ap-terminal .fg-247 {
color: #9e9e9e;
}
-.asciinema-terminal .bg-247 {
+.ap-terminal .bg-247 {
background-color: #9e9e9e;
}
-.asciinema-terminal .fg-248 {
+.ap-terminal .fg-248 {
color: #a8a8a8;
}
-.asciinema-terminal .bg-248 {
+.ap-terminal .bg-248 {
background-color: #a8a8a8;
}
-.asciinema-terminal .fg-249 {
+.ap-terminal .fg-249 {
color: #b2b2b2;
}
-.asciinema-terminal .bg-249 {
+.ap-terminal .bg-249 {
background-color: #b2b2b2;
}
-.asciinema-terminal .fg-250 {
+.ap-terminal .fg-250 {
color: #bcbcbc;
}
-.asciinema-terminal .bg-250 {
+.ap-terminal .bg-250 {
background-color: #bcbcbc;
}
-.asciinema-terminal .fg-251 {
+.ap-terminal .fg-251 {
color: #c6c6c6;
}
-.asciinema-terminal .bg-251 {
+.ap-terminal .bg-251 {
background-color: #c6c6c6;
}
-.asciinema-terminal .fg-252 {
+.ap-terminal .fg-252 {
color: #d0d0d0;
}
-.asciinema-terminal .bg-252 {
+.ap-terminal .bg-252 {
background-color: #d0d0d0;
}
-.asciinema-terminal .fg-253 {
+.ap-terminal .fg-253 {
color: #dadada;
}
-.asciinema-terminal .bg-253 {
+.ap-terminal .bg-253 {
background-color: #dadada;
}
-.asciinema-terminal .fg-254 {
+.ap-terminal .fg-254 {
color: #e4e4e4;
}
-.asciinema-terminal .bg-254 {
+.ap-terminal .bg-254 {
background-color: #e4e4e4;
}
-.asciinema-terminal .fg-255 {
+.ap-terminal .fg-255 {
color: #eeeeee;
}
-.asciinema-terminal .bg-255 {
+.ap-terminal .bg-255 {
background-color: #eeeeee;
}
-.asciinema-theme-asciinema .asciinema-terminal {
- color: #cccccc;
+.asciinema-theme-asciinema {
+ background-color: #121314;
+}
+.asciinema-theme-asciinema pre.ap-terminal {
+ color: #CCCCCC;
background-color: #121314;
border-color: #121314;
}
+.asciinema-theme-asciinema .fg-default {
+ color: #CCCCCC;
+}
.asciinema-theme-asciinema .fg-bg {
color: #121314;
}
+.asciinema-theme-asciinema .bg-default {
+ background-color: #121314;
+}
.asciinema-theme-asciinema .bg-fg {
- background-color: #cccccc;
+ background-color: #CCCCCC;
}
.asciinema-theme-asciinema .fg-0 {
- color: #000000;
+ color: hsl(0, 0%, 0%);
}
.asciinema-theme-asciinema .bg-0 {
- background-color: #000000;
+ background-color: hsl(0, 0%, 0%);
}
.asciinema-theme-asciinema .fg-1 {
- color: #dd3c69;
+ color: hsl(343, 70%, 55%);
}
.asciinema-theme-asciinema .bg-1 {
- background-color: #dd3c69;
+ background-color: hsl(343, 70%, 55%);
}
.asciinema-theme-asciinema .fg-2 {
- color: #4ebf22;
+ color: hsl(103, 70%, 44%);
}
.asciinema-theme-asciinema .bg-2 {
- background-color: #4ebf22;
+ background-color: hsl(103, 70%, 44%);
}
.asciinema-theme-asciinema .fg-3 {
- color: #ddaf3c;
+ color: hsl(43, 70%, 55%);
}
.asciinema-theme-asciinema .bg-3 {
- background-color: #ddaf3c;
+ background-color: hsl(43, 70%, 55%);
}
.asciinema-theme-asciinema .fg-4 {
- color: #26b0d7;
+ color: hsl(193, 70%, 49.5%);
}
.asciinema-theme-asciinema .bg-4 {
- background-color: #26b0d7;
+ background-color: hsl(193, 70%, 49.5%);
}
.asciinema-theme-asciinema .fg-5 {
- color: #b954e1;
+ color: hsl(283, 70%, 60.5%);
}
.asciinema-theme-asciinema .bg-5 {
- background-color: #b954e1;
+ background-color: hsl(283, 70%, 60.5%);
}
.asciinema-theme-asciinema .fg-6 {
- color: #54e1b9;
+ color: hsl(163, 70%, 60.5%);
}
.asciinema-theme-asciinema .bg-6 {
- background-color: #54e1b9;
+ background-color: hsl(163, 70%, 60.5%);
}
.asciinema-theme-asciinema .fg-7 {
- color: #d9d9d9;
+ color: hsl(0, 0%, 85%);
}
.asciinema-theme-asciinema .bg-7 {
- background-color: #d9d9d9;
+ background-color: hsl(0, 0%, 85%);
}
.asciinema-theme-asciinema .fg-8 {
- color: #4d4d4d;
+ color: hsl(0, 0%, 30%);
}
.asciinema-theme-asciinema .bg-8 {
- background-color: #4d4d4d;
+ background-color: hsl(0, 0%, 30%);
}
.asciinema-theme-asciinema .fg-9 {
- color: #dd3c69;
+ color: hsl(343, 70%, 55%);
}
.asciinema-theme-asciinema .bg-9 {
- background-color: #dd3c69;
+ background-color: hsl(343, 70%, 55%);
}
.asciinema-theme-asciinema .fg-10 {
- color: #4ebf22;
+ color: hsl(103, 70%, 44%);
}
.asciinema-theme-asciinema .bg-10 {
- background-color: #4ebf22;
+ background-color: hsl(103, 70%, 44%);
}
.asciinema-theme-asciinema .fg-11 {
- color: #ddaf3c;
+ color: hsl(43, 70%, 55%);
}
.asciinema-theme-asciinema .bg-11 {
- background-color: #ddaf3c;
+ background-color: hsl(43, 70%, 55%);
}
.asciinema-theme-asciinema .fg-12 {
- color: #26b0d7;
+ color: hsl(193, 70%, 49.5%);
}
.asciinema-theme-asciinema .bg-12 {
- background-color: #26b0d7;
+ background-color: hsl(193, 70%, 49.5%);
}
.asciinema-theme-asciinema .fg-13 {
- color: #b954e1;
+ color: hsl(283, 70%, 60.5%);
}
.asciinema-theme-asciinema .bg-13 {
- background-color: #b954e1;
+ background-color: hsl(283, 70%, 60.5%);
}
.asciinema-theme-asciinema .fg-14 {
- color: #54e1b9;
+ color: hsl(163, 70%, 60.5%);
}
.asciinema-theme-asciinema .bg-14 {
- background-color: #54e1b9;
+ background-color: hsl(163, 70%, 60.5%);
}
.asciinema-theme-asciinema .fg-15 {
- color: #ffffff;
+ color: hsl(0, 0%, 100%);
}
.asciinema-theme-asciinema .bg-15 {
- background-color: #ffffff;
+ background-color: hsl(0, 0%, 100%);
+}
+.asciinema-theme-asciinema .ap-overlay-loading .ap-loader {
+ border-color: rgba(204, 204, 204, 0.3) rgba(204, 204, 204, 0.5) rgba(204, 204, 204, 0.7) #cccccc;
}
.asciinema-theme-asciinema .fg-8,
.asciinema-theme-asciinema .fg-9,
@@ -1995,463 +1937,156 @@
.asciinema-theme-asciinema .fg-15 {
font-weight: bold;
}
-.asciinema-theme-tango .asciinema-terminal {
- color: #cccccc;
- background-color: #121314;
- border-color: #121314;
+/*
+ Based on Dracula: https://draculatheme.com
+ */
+.asciinema-theme-dracula {
+ background-color: #282a36;
}
-.asciinema-theme-tango .fg-bg {
- color: #121314;
+.asciinema-theme-dracula pre.ap-terminal {
+ color: #f8f8f2;
+ background-color: #282a36;
+ border-color: #282a36;
}
-.asciinema-theme-tango .bg-fg {
- background-color: #cccccc;
+.asciinema-theme-dracula .fg-default {
+ color: #f8f8f2;
}
-.asciinema-theme-tango .fg-0 {
- color: #000000;
+.asciinema-theme-dracula .fg-bg {
+ color: #282a36;
}
-.asciinema-theme-tango .bg-0 {
- background-color: #000000;
+.asciinema-theme-dracula .bg-default {
+ background-color: #282a36;
}
-.asciinema-theme-tango .fg-1 {
- color: #cc0000;
+.asciinema-theme-dracula .bg-fg {
+ background-color: #f8f8f2;
}
-.asciinema-theme-tango .bg-1 {
- background-color: #cc0000;
+.asciinema-theme-dracula .fg-0 {
+ color: #21222c;
}
-.asciinema-theme-tango .fg-2 {
- color: #4e9a06;
+.asciinema-theme-dracula .bg-0 {
+ background-color: #21222c;
}
-.asciinema-theme-tango .bg-2 {
- background-color: #4e9a06;
+.asciinema-theme-dracula .fg-1 {
+ color: #ff5555;
}
-.asciinema-theme-tango .fg-3 {
- color: #c4a000;
+.asciinema-theme-dracula .bg-1 {
+ background-color: #ff5555;
}
-.asciinema-theme-tango .bg-3 {
- background-color: #c4a000;
+.asciinema-theme-dracula .fg-2 {
+ color: #50fa7b;
}
-.asciinema-theme-tango .fg-4 {
- color: #3465a4;
+.asciinema-theme-dracula .bg-2 {
+ background-color: #50fa7b;
}
-.asciinema-theme-tango .bg-4 {
- background-color: #3465a4;
+.asciinema-theme-dracula .fg-3 {
+ color: #f1fa8c;
}
-.asciinema-theme-tango .fg-5 {
- color: #75507b;
+.asciinema-theme-dracula .bg-3 {
+ background-color: #f1fa8c;
}
-.asciinema-theme-tango .bg-5 {
- background-color: #75507b;
+.asciinema-theme-dracula .fg-4 {
+ color: #bd93f9;
}
-.asciinema-theme-tango .fg-6 {
- color: #06989a;
+.asciinema-theme-dracula .bg-4 {
+ background-color: #bd93f9;
}
-.asciinema-theme-tango .bg-6 {
- background-color: #06989a;
+.asciinema-theme-dracula .fg-5 {
+ color: #ff79c6;
}
-.asciinema-theme-tango .fg-7 {
- color: #d3d7cf;
+.asciinema-theme-dracula .bg-5 {
+ background-color: #ff79c6;
}
-.asciinema-theme-tango .bg-7 {
- background-color: #d3d7cf;
+.asciinema-theme-dracula .fg-6 {
+ color: #8be9fd;
}
-.asciinema-theme-tango .fg-8 {
- color: #555753;
+.asciinema-theme-dracula .bg-6 {
+ background-color: #8be9fd;
}
-.asciinema-theme-tango .bg-8 {
- background-color: #555753;
+.asciinema-theme-dracula .fg-7 {
+ color: #f8f8f2;
}
-.asciinema-theme-tango .fg-9 {
- color: #ef2929;
+.asciinema-theme-dracula .bg-7 {
+ background-color: #f8f8f2;
}
-.asciinema-theme-tango .bg-9 {
- background-color: #ef2929;
+.asciinema-theme-dracula .fg-8 {
+ color: #6272a4;
}
-.asciinema-theme-tango .fg-10 {
- color: #8ae234;
+.asciinema-theme-dracula .bg-8 {
+ background-color: #6272a4;
}
-.asciinema-theme-tango .bg-10 {
- background-color: #8ae234;
+.asciinema-theme-dracula .fg-9 {
+ color: #ff6e6e;
}
-.asciinema-theme-tango .fg-11 {
- color: #fce94f;
+.asciinema-theme-dracula .bg-9 {
+ background-color: #ff6e6e;
}
-.asciinema-theme-tango .bg-11 {
- background-color: #fce94f;
+.asciinema-theme-dracula .fg-10 {
+ color: #69ff94;
}
-.asciinema-theme-tango .fg-12 {
- color: #729fcf;
+.asciinema-theme-dracula .bg-10 {
+ background-color: #69ff94;
}
-.asciinema-theme-tango .bg-12 {
- background-color: #729fcf;
+.asciinema-theme-dracula .fg-11 {
+ color: #ffffa5;
}
-.asciinema-theme-tango .fg-13 {
- color: #ad7fa8;
+.asciinema-theme-dracula .bg-11 {
+ background-color: #ffffa5;
}
-.asciinema-theme-tango .bg-13 {
- background-color: #ad7fa8;
+.asciinema-theme-dracula .fg-12 {
+ color: #d6acff;
}
-.asciinema-theme-tango .fg-14 {
- color: #34e2e2;
+.asciinema-theme-dracula .bg-12 {
+ background-color: #d6acff;
}
-.asciinema-theme-tango .bg-14 {
- background-color: #34e2e2;
+.asciinema-theme-dracula .fg-13 {
+ color: #ff92df;
}
-.asciinema-theme-tango .fg-15 {
- color: #eeeeec;
+.asciinema-theme-dracula .bg-13 {
+ background-color: #ff92df;
}
-.asciinema-theme-tango .bg-15 {
- background-color: #eeeeec;
+.asciinema-theme-dracula .fg-14 {
+ color: #a4ffff;
}
-.asciinema-theme-tango .fg-8,
-.asciinema-theme-tango .fg-9,
-.asciinema-theme-tango .fg-10,
-.asciinema-theme-tango .fg-11,
-.asciinema-theme-tango .fg-12,
-.asciinema-theme-tango .fg-13,
-.asciinema-theme-tango .fg-14,
-.asciinema-theme-tango .fg-15 {
- font-weight: bold;
+.asciinema-theme-dracula .bg-14 {
+ background-color: #a4ffff;
}
-.asciinema-theme-solarized-dark .asciinema-terminal {
- color: #839496;
- background-color: #002b36;
- border-color: #002b36;
-}
-.asciinema-theme-solarized-dark .fg-bg {
- color: #002b36;
-}
-.asciinema-theme-solarized-dark .bg-fg {
- background-color: #839496;
-}
-.asciinema-theme-solarized-dark .fg-0 {
- color: #073642;
-}
-.asciinema-theme-solarized-dark .bg-0 {
- background-color: #073642;
-}
-.asciinema-theme-solarized-dark .fg-1 {
- color: #dc322f;
-}
-.asciinema-theme-solarized-dark .bg-1 {
- background-color: #dc322f;
-}
-.asciinema-theme-solarized-dark .fg-2 {
- color: #859900;
-}
-.asciinema-theme-solarized-dark .bg-2 {
- background-color: #859900;
-}
-.asciinema-theme-solarized-dark .fg-3 {
- color: #b58900;
-}
-.asciinema-theme-solarized-dark .bg-3 {
- background-color: #b58900;
-}
-.asciinema-theme-solarized-dark .fg-4 {
- color: #268bd2;
-}
-.asciinema-theme-solarized-dark .bg-4 {
- background-color: #268bd2;
-}
-.asciinema-theme-solarized-dark .fg-5 {
- color: #d33682;
-}
-.asciinema-theme-solarized-dark .bg-5 {
- background-color: #d33682;
-}
-.asciinema-theme-solarized-dark .fg-6 {
- color: #2aa198;
-}
-.asciinema-theme-solarized-dark .bg-6 {
- background-color: #2aa198;
-}
-.asciinema-theme-solarized-dark .fg-7 {
- color: #eee8d5;
-}
-.asciinema-theme-solarized-dark .bg-7 {
- background-color: #eee8d5;
-}
-.asciinema-theme-solarized-dark .fg-8 {
- color: #002b36;
-}
-.asciinema-theme-solarized-dark .bg-8 {
- background-color: #002b36;
-}
-.asciinema-theme-solarized-dark .fg-9 {
- color: #cb4b16;
-}
-.asciinema-theme-solarized-dark .bg-9 {
- background-color: #cb4b16;
-}
-.asciinema-theme-solarized-dark .fg-10 {
- color: #586e75;
-}
-.asciinema-theme-solarized-dark .bg-10 {
- background-color: #586e75;
-}
-.asciinema-theme-solarized-dark .fg-11 {
- color: #657b83;
-}
-.asciinema-theme-solarized-dark .bg-11 {
- background-color: #657b83;
-}
-.asciinema-theme-solarized-dark .fg-12 {
- color: #839496;
-}
-.asciinema-theme-solarized-dark .bg-12 {
- background-color: #839496;
-}
-.asciinema-theme-solarized-dark .fg-13 {
- color: #6c71c4;
-}
-.asciinema-theme-solarized-dark .bg-13 {
- background-color: #6c71c4;
-}
-.asciinema-theme-solarized-dark .fg-14 {
- color: #93a1a1;
-}
-.asciinema-theme-solarized-dark .bg-14 {
- background-color: #93a1a1;
-}
-.asciinema-theme-solarized-dark .fg-15 {
- color: #fdf6e3;
-}
-.asciinema-theme-solarized-dark .bg-15 {
- background-color: #fdf6e3;
-}
-.asciinema-theme-solarized-light .asciinema-terminal {
- color: #657b83;
- background-color: #fdf6e3;
- border-color: #fdf6e3;
-}
-.asciinema-theme-solarized-light .fg-bg {
- color: #fdf6e3;
-}
-.asciinema-theme-solarized-light .bg-fg {
- background-color: #657b83;
-}
-.asciinema-theme-solarized-light .fg-0 {
- color: #073642;
-}
-.asciinema-theme-solarized-light .bg-0 {
- background-color: #073642;
-}
-.asciinema-theme-solarized-light .fg-1 {
- color: #dc322f;
-}
-.asciinema-theme-solarized-light .bg-1 {
- background-color: #dc322f;
-}
-.asciinema-theme-solarized-light .fg-2 {
- color: #859900;
-}
-.asciinema-theme-solarized-light .bg-2 {
- background-color: #859900;
-}
-.asciinema-theme-solarized-light .fg-3 {
- color: #b58900;
-}
-.asciinema-theme-solarized-light .bg-3 {
- background-color: #b58900;
-}
-.asciinema-theme-solarized-light .fg-4 {
- color: #268bd2;
-}
-.asciinema-theme-solarized-light .bg-4 {
- background-color: #268bd2;
-}
-.asciinema-theme-solarized-light .fg-5 {
- color: #d33682;
-}
-.asciinema-theme-solarized-light .bg-5 {
- background-color: #d33682;
-}
-.asciinema-theme-solarized-light .fg-6 {
- color: #2aa198;
-}
-.asciinema-theme-solarized-light .bg-6 {
- background-color: #2aa198;
-}
-.asciinema-theme-solarized-light .fg-7 {
- color: #eee8d5;
-}
-.asciinema-theme-solarized-light .bg-7 {
- background-color: #eee8d5;
-}
-.asciinema-theme-solarized-light .fg-8 {
- color: #002b36;
-}
-.asciinema-theme-solarized-light .bg-8 {
- background-color: #002b36;
-}
-.asciinema-theme-solarized-light .fg-9 {
- color: #cb4b16;
-}
-.asciinema-theme-solarized-light .bg-9 {
- background-color: #cb4b16;
-}
-.asciinema-theme-solarized-light .fg-10 {
- color: #586e75;
-}
-.asciinema-theme-solarized-light .bg-10 {
- background-color: #586e75;
-}
-.asciinema-theme-solarized-light .fg-11 {
- color: #657c83;
-}
-.asciinema-theme-solarized-light .bg-11 {
- background-color: #657c83;
-}
-.asciinema-theme-solarized-light .fg-12 {
- color: #839496;
-}
-.asciinema-theme-solarized-light .bg-12 {
- background-color: #839496;
-}
-.asciinema-theme-solarized-light .fg-13 {
- color: #6c71c4;
-}
-.asciinema-theme-solarized-light .bg-13 {
- background-color: #6c71c4;
-}
-.asciinema-theme-solarized-light .fg-14 {
- color: #93a1a1;
-}
-.asciinema-theme-solarized-light .bg-14 {
- background-color: #93a1a1;
-}
-.asciinema-theme-solarized-light .fg-15 {
- color: #fdf6e3;
-}
-.asciinema-theme-solarized-light .bg-15 {
- background-color: #fdf6e3;
-}
-.asciinema-theme-seti .asciinema-terminal {
- color: #cacecd;
- background-color: #111213;
- border-color: #111213;
-}
-.asciinema-theme-seti .fg-bg {
- color: #111213;
-}
-.asciinema-theme-seti .bg-fg {
- background-color: #cacecd;
-}
-.asciinema-theme-seti .fg-0 {
- color: #323232;
-}
-.asciinema-theme-seti .bg-0 {
- background-color: #323232;
-}
-.asciinema-theme-seti .fg-1 {
- color: #c22832;
-}
-.asciinema-theme-seti .bg-1 {
- background-color: #c22832;
-}
-.asciinema-theme-seti .fg-2 {
- color: #8ec43d;
-}
-.asciinema-theme-seti .bg-2 {
- background-color: #8ec43d;
-}
-.asciinema-theme-seti .fg-3 {
- color: #e0c64f;
-}
-.asciinema-theme-seti .bg-3 {
- background-color: #e0c64f;
-}
-.asciinema-theme-seti .fg-4 {
- color: #43a5d5;
-}
-.asciinema-theme-seti .bg-4 {
- background-color: #43a5d5;
-}
-.asciinema-theme-seti .fg-5 {
- color: #8b57b5;
-}
-.asciinema-theme-seti .bg-5 {
- background-color: #8b57b5;
-}
-.asciinema-theme-seti .fg-6 {
- color: #8ec43d;
-}
-.asciinema-theme-seti .bg-6 {
- background-color: #8ec43d;
-}
-.asciinema-theme-seti .fg-7 {
- color: #eeeeee;
-}
-.asciinema-theme-seti .bg-7 {
- background-color: #eeeeee;
-}
-.asciinema-theme-seti .fg-8 {
- color: #323232;
-}
-.asciinema-theme-seti .bg-8 {
- background-color: #323232;
-}
-.asciinema-theme-seti .fg-9 {
- color: #c22832;
-}
-.asciinema-theme-seti .bg-9 {
- background-color: #c22832;
-}
-.asciinema-theme-seti .fg-10 {
- color: #8ec43d;
-}
-.asciinema-theme-seti .bg-10 {
- background-color: #8ec43d;
-}
-.asciinema-theme-seti .fg-11 {
- color: #e0c64f;
-}
-.asciinema-theme-seti .bg-11 {
- background-color: #e0c64f;
-}
-.asciinema-theme-seti .fg-12 {
- color: #43a5d5;
-}
-.asciinema-theme-seti .bg-12 {
- background-color: #43a5d5;
-}
-.asciinema-theme-seti .fg-13 {
- color: #8b57b5;
-}
-.asciinema-theme-seti .bg-13 {
- background-color: #8b57b5;
-}
-.asciinema-theme-seti .fg-14 {
- color: #8ec43d;
-}
-.asciinema-theme-seti .bg-14 {
- background-color: #8ec43d;
-}
-.asciinema-theme-seti .fg-15 {
+.asciinema-theme-dracula .fg-15 {
color: #ffffff;
}
-.asciinema-theme-seti .bg-15 {
+.asciinema-theme-dracula .bg-15 {
background-color: #ffffff;
}
-.asciinema-theme-seti .fg-8,
-.asciinema-theme-seti .fg-9,
-.asciinema-theme-seti .fg-10,
-.asciinema-theme-seti .fg-11,
-.asciinema-theme-seti .fg-12,
-.asciinema-theme-seti .fg-13,
-.asciinema-theme-seti .fg-14,
-.asciinema-theme-seti .fg-15 {
+.asciinema-theme-dracula .ap-overlay-loading .ap-loader {
+ border-color: rgba(248, 248, 242, 0.3) rgba(248, 248, 242, 0.5) rgba(248, 248, 242, 0.7) #f8f8f2;
+}
+.asciinema-theme-dracula .fg-8,
+.asciinema-theme-dracula .fg-9,
+.asciinema-theme-dracula .fg-10,
+.asciinema-theme-dracula .fg-11,
+.asciinema-theme-dracula .fg-12,
+.asciinema-theme-dracula .fg-13,
+.asciinema-theme-dracula .fg-14,
+.asciinema-theme-dracula .fg-15 {
font-weight: bold;
}
/* Based on Monokai from base16 collection - https://github.com/chriskempson/base16 */
-.asciinema-theme-monokai .asciinema-terminal {
+.asciinema-theme-monokai {
+ background-color: #272822;
+}
+.asciinema-theme-monokai pre.ap-terminal {
color: #f8f8f2;
background-color: #272822;
border-color: #272822;
}
+.asciinema-theme-monokai .fg-default {
+ color: #f8f8f2;
+}
.asciinema-theme-monokai .fg-bg {
color: #272822;
}
+.asciinema-theme-monokai .bg-default {
+ background-color: #272822;
+}
.asciinema-theme-monokai .bg-fg {
background-color: #f8f8f2;
}
@@ -2551,6 +2186,9 @@
.asciinema-theme-monokai .bg-15 {
background-color: #f9f8f5;
}
+.asciinema-theme-monokai .ap-overlay-loading .ap-loader {
+ border-color: rgba(248, 248, 242, 0.3) rgba(248, 248, 242, 0.5) rgba(248, 248, 242, 0.7) #f8f8f2;
+}
.asciinema-theme-monokai .fg-8,
.asciinema-theme-monokai .fg-9,
.asciinema-theme-monokai .fg-10,
@@ -2561,3 +2199,638 @@
.asciinema-theme-monokai .fg-15 {
font-weight: bold;
}
+/*
+ Based on Nord: https://github.com/arcticicestudio/nord
+ Via: https://github.com/neilotoole/asciinema-theme-nord
+ */
+.asciinema-theme-nord {
+ background-color: #2E3440;
+}
+.asciinema-theme-nord pre.ap-terminal {
+ color: #ECEFF4;
+ background-color: #2E3440;
+ border-color: #2E3440;
+}
+.asciinema-theme-nord .fg-default {
+ color: #ECEFF4;
+}
+.asciinema-theme-nord .fg-bg {
+ color: #2E3440;
+}
+.asciinema-theme-nord .bg-default {
+ background-color: #2E3440;
+}
+.asciinema-theme-nord .bg-fg {
+ background-color: #ECEFF4;
+}
+.asciinema-theme-nord .fg-0 {
+ color: #3B4252;
+}
+.asciinema-theme-nord .bg-0 {
+ background-color: #3B4252;
+}
+.asciinema-theme-nord .fg-1 {
+ color: #BF616A;
+}
+.asciinema-theme-nord .bg-1 {
+ background-color: #BF616A;
+}
+.asciinema-theme-nord .fg-2 {
+ color: #A3BE8C;
+}
+.asciinema-theme-nord .bg-2 {
+ background-color: #A3BE8C;
+}
+.asciinema-theme-nord .fg-3 {
+ color: #EBCB8B;
+}
+.asciinema-theme-nord .bg-3 {
+ background-color: #EBCB8B;
+}
+.asciinema-theme-nord .fg-4 {
+ color: #81A1C1;
+}
+.asciinema-theme-nord .bg-4 {
+ background-color: #81A1C1;
+}
+.asciinema-theme-nord .fg-5 {
+ color: #B48EAD;
+}
+.asciinema-theme-nord .bg-5 {
+ background-color: #B48EAD;
+}
+.asciinema-theme-nord .fg-6 {
+ color: #88C0D0;
+}
+.asciinema-theme-nord .bg-6 {
+ background-color: #88C0D0;
+}
+.asciinema-theme-nord .fg-7 {
+ color: #ECEFF4;
+}
+.asciinema-theme-nord .bg-7 {
+ background-color: #ECEFF4;
+}
+.asciinema-theme-nord .fg-8 {
+ color: #3B4252;
+}
+.asciinema-theme-nord .bg-8 {
+ background-color: #3B4252;
+}
+.asciinema-theme-nord .fg-9 {
+ color: #BF616A;
+}
+.asciinema-theme-nord .bg-9 {
+ background-color: #BF616A;
+}
+.asciinema-theme-nord .fg-10 {
+ color: #A3BE8C;
+}
+.asciinema-theme-nord .bg-10 {
+ background-color: #A3BE8C;
+}
+.asciinema-theme-nord .fg-11 {
+ color: #EBCB8B;
+}
+.asciinema-theme-nord .bg-11 {
+ background-color: #EBCB8B;
+}
+.asciinema-theme-nord .fg-12 {
+ color: #81A1C1;
+}
+.asciinema-theme-nord .bg-12 {
+ background-color: #81A1C1;
+}
+.asciinema-theme-nord .fg-13 {
+ color: #B48EAD;
+}
+.asciinema-theme-nord .bg-13 {
+ background-color: #B48EAD;
+}
+.asciinema-theme-nord .fg-14 {
+ color: #88C0D0;
+}
+.asciinema-theme-nord .bg-14 {
+ background-color: #88C0D0;
+}
+.asciinema-theme-nord .fg-15 {
+ color: #ECEFF4;
+}
+.asciinema-theme-nord .bg-15 {
+ background-color: #ECEFF4;
+}
+.asciinema-theme-nord .ap-overlay-loading .ap-loader {
+ border-color: rgba(236, 239, 244, 0.3) rgba(236, 239, 244, 0.5) rgba(236, 239, 244, 0.7) #eceff4;
+}
+.asciinema-theme-nord .fg-8,
+.asciinema-theme-nord .fg-9,
+.asciinema-theme-nord .fg-10,
+.asciinema-theme-nord .fg-11,
+.asciinema-theme-nord .fg-12,
+.asciinema-theme-nord .fg-13,
+.asciinema-theme-nord .fg-14,
+.asciinema-theme-nord .fg-15 {
+ font-weight: bold;
+}
+.asciinema-theme-seti {
+ background-color: #111213;
+}
+.asciinema-theme-seti pre.ap-terminal {
+ color: #cacecd;
+ background-color: #111213;
+ border-color: #111213;
+}
+.asciinema-theme-seti .fg-default {
+ color: #cacecd;
+}
+.asciinema-theme-seti .fg-bg {
+ color: #111213;
+}
+.asciinema-theme-seti .bg-default {
+ background-color: #111213;
+}
+.asciinema-theme-seti .bg-fg {
+ background-color: #cacecd;
+}
+.asciinema-theme-seti .fg-0 {
+ color: #323232;
+}
+.asciinema-theme-seti .bg-0 {
+ background-color: #323232;
+}
+.asciinema-theme-seti .fg-1 {
+ color: #c22832;
+}
+.asciinema-theme-seti .bg-1 {
+ background-color: #c22832;
+}
+.asciinema-theme-seti .fg-2 {
+ color: #8ec43d;
+}
+.asciinema-theme-seti .bg-2 {
+ background-color: #8ec43d;
+}
+.asciinema-theme-seti .fg-3 {
+ color: #e0c64f;
+}
+.asciinema-theme-seti .bg-3 {
+ background-color: #e0c64f;
+}
+.asciinema-theme-seti .fg-4 {
+ color: #43a5d5;
+}
+.asciinema-theme-seti .bg-4 {
+ background-color: #43a5d5;
+}
+.asciinema-theme-seti .fg-5 {
+ color: #8b57b5;
+}
+.asciinema-theme-seti .bg-5 {
+ background-color: #8b57b5;
+}
+.asciinema-theme-seti .fg-6 {
+ color: #8ec43d;
+}
+.asciinema-theme-seti .bg-6 {
+ background-color: #8ec43d;
+}
+.asciinema-theme-seti .fg-7 {
+ color: #eeeeee;
+}
+.asciinema-theme-seti .bg-7 {
+ background-color: #eeeeee;
+}
+.asciinema-theme-seti .fg-8 {
+ color: #323232;
+}
+.asciinema-theme-seti .bg-8 {
+ background-color: #323232;
+}
+.asciinema-theme-seti .fg-9 {
+ color: #c22832;
+}
+.asciinema-theme-seti .bg-9 {
+ background-color: #c22832;
+}
+.asciinema-theme-seti .fg-10 {
+ color: #8ec43d;
+}
+.asciinema-theme-seti .bg-10 {
+ background-color: #8ec43d;
+}
+.asciinema-theme-seti .fg-11 {
+ color: #e0c64f;
+}
+.asciinema-theme-seti .bg-11 {
+ background-color: #e0c64f;
+}
+.asciinema-theme-seti .fg-12 {
+ color: #43a5d5;
+}
+.asciinema-theme-seti .bg-12 {
+ background-color: #43a5d5;
+}
+.asciinema-theme-seti .fg-13 {
+ color: #8b57b5;
+}
+.asciinema-theme-seti .bg-13 {
+ background-color: #8b57b5;
+}
+.asciinema-theme-seti .fg-14 {
+ color: #8ec43d;
+}
+.asciinema-theme-seti .bg-14 {
+ background-color: #8ec43d;
+}
+.asciinema-theme-seti .fg-15 {
+ color: #ffffff;
+}
+.asciinema-theme-seti .bg-15 {
+ background-color: #ffffff;
+}
+.asciinema-theme-seti .ap-overlay-loading .ap-loader {
+ border-color: rgba(202, 206, 205, 0.3) rgba(202, 206, 205, 0.5) rgba(202, 206, 205, 0.7) #cacecd;
+}
+.asciinema-theme-seti .fg-8,
+.asciinema-theme-seti .fg-9,
+.asciinema-theme-seti .fg-10,
+.asciinema-theme-seti .fg-11,
+.asciinema-theme-seti .fg-12,
+.asciinema-theme-seti .fg-13,
+.asciinema-theme-seti .fg-14,
+.asciinema-theme-seti .fg-15 {
+ font-weight: bold;
+}
+.asciinema-theme-solarized-dark {
+ background-color: #002b36;
+}
+.asciinema-theme-solarized-dark pre.ap-terminal {
+ color: #839496;
+ background-color: #002b36;
+ border-color: #002b36;
+}
+.asciinema-theme-solarized-dark .fg-default {
+ color: #839496;
+}
+.asciinema-theme-solarized-dark .fg-bg {
+ color: #002b36;
+}
+.asciinema-theme-solarized-dark .bg-default {
+ background-color: #002b36;
+}
+.asciinema-theme-solarized-dark .bg-fg {
+ background-color: #839496;
+}
+.asciinema-theme-solarized-dark .fg-0 {
+ color: #073642;
+}
+.asciinema-theme-solarized-dark .bg-0 {
+ background-color: #073642;
+}
+.asciinema-theme-solarized-dark .fg-1 {
+ color: #dc322f;
+}
+.asciinema-theme-solarized-dark .bg-1 {
+ background-color: #dc322f;
+}
+.asciinema-theme-solarized-dark .fg-2 {
+ color: #859900;
+}
+.asciinema-theme-solarized-dark .bg-2 {
+ background-color: #859900;
+}
+.asciinema-theme-solarized-dark .fg-3 {
+ color: #b58900;
+}
+.asciinema-theme-solarized-dark .bg-3 {
+ background-color: #b58900;
+}
+.asciinema-theme-solarized-dark .fg-4 {
+ color: #268bd2;
+}
+.asciinema-theme-solarized-dark .bg-4 {
+ background-color: #268bd2;
+}
+.asciinema-theme-solarized-dark .fg-5 {
+ color: #d33682;
+}
+.asciinema-theme-solarized-dark .bg-5 {
+ background-color: #d33682;
+}
+.asciinema-theme-solarized-dark .fg-6 {
+ color: #2aa198;
+}
+.asciinema-theme-solarized-dark .bg-6 {
+ background-color: #2aa198;
+}
+.asciinema-theme-solarized-dark .fg-7 {
+ color: #eee8d5;
+}
+.asciinema-theme-solarized-dark .bg-7 {
+ background-color: #eee8d5;
+}
+.asciinema-theme-solarized-dark .fg-8 {
+ color: #002b36;
+}
+.asciinema-theme-solarized-dark .bg-8 {
+ background-color: #002b36;
+}
+.asciinema-theme-solarized-dark .fg-9 {
+ color: #cb4b16;
+}
+.asciinema-theme-solarized-dark .bg-9 {
+ background-color: #cb4b16;
+}
+.asciinema-theme-solarized-dark .fg-10 {
+ color: #586e75;
+}
+.asciinema-theme-solarized-dark .bg-10 {
+ background-color: #586e75;
+}
+.asciinema-theme-solarized-dark .fg-11 {
+ color: #657b83;
+}
+.asciinema-theme-solarized-dark .bg-11 {
+ background-color: #657b83;
+}
+.asciinema-theme-solarized-dark .fg-12 {
+ color: #839496;
+}
+.asciinema-theme-solarized-dark .bg-12 {
+ background-color: #839496;
+}
+.asciinema-theme-solarized-dark .fg-13 {
+ color: #6c71c4;
+}
+.asciinema-theme-solarized-dark .bg-13 {
+ background-color: #6c71c4;
+}
+.asciinema-theme-solarized-dark .fg-14 {
+ color: #93a1a1;
+}
+.asciinema-theme-solarized-dark .bg-14 {
+ background-color: #93a1a1;
+}
+.asciinema-theme-solarized-dark .fg-15 {
+ color: #fdf6e3;
+}
+.asciinema-theme-solarized-dark .bg-15 {
+ background-color: #fdf6e3;
+}
+.asciinema-theme-solarized-dark .ap-overlay-loading .ap-loader {
+ border-color: rgba(131, 148, 150, 0.3) rgba(131, 148, 150, 0.5) rgba(131, 148, 150, 0.7) #839496;
+}
+.asciinema-theme-solarized-light {
+ background-color: #fdf6e3;
+}
+.asciinema-theme-solarized-light pre.ap-terminal {
+ color: #657b83;
+ background-color: #fdf6e3;
+ border-color: #fdf6e3;
+}
+.asciinema-theme-solarized-light .fg-default {
+ color: #657b83;
+}
+.asciinema-theme-solarized-light .fg-bg {
+ color: #fdf6e3;
+}
+.asciinema-theme-solarized-light .bg-default {
+ background-color: #fdf6e3;
+}
+.asciinema-theme-solarized-light .bg-fg {
+ background-color: #657b83;
+}
+.asciinema-theme-solarized-light .fg-0 {
+ color: #073642;
+}
+.asciinema-theme-solarized-light .bg-0 {
+ background-color: #073642;
+}
+.asciinema-theme-solarized-light .fg-1 {
+ color: #dc322f;
+}
+.asciinema-theme-solarized-light .bg-1 {
+ background-color: #dc322f;
+}
+.asciinema-theme-solarized-light .fg-2 {
+ color: #859900;
+}
+.asciinema-theme-solarized-light .bg-2 {
+ background-color: #859900;
+}
+.asciinema-theme-solarized-light .fg-3 {
+ color: #b58900;
+}
+.asciinema-theme-solarized-light .bg-3 {
+ background-color: #b58900;
+}
+.asciinema-theme-solarized-light .fg-4 {
+ color: #268bd2;
+}
+.asciinema-theme-solarized-light .bg-4 {
+ background-color: #268bd2;
+}
+.asciinema-theme-solarized-light .fg-5 {
+ color: #d33682;
+}
+.asciinema-theme-solarized-light .bg-5 {
+ background-color: #d33682;
+}
+.asciinema-theme-solarized-light .fg-6 {
+ color: #2aa198;
+}
+.asciinema-theme-solarized-light .bg-6 {
+ background-color: #2aa198;
+}
+.asciinema-theme-solarized-light .fg-7 {
+ color: #eee8d5;
+}
+.asciinema-theme-solarized-light .bg-7 {
+ background-color: #eee8d5;
+}
+.asciinema-theme-solarized-light .fg-8 {
+ color: #002b36;
+}
+.asciinema-theme-solarized-light .bg-8 {
+ background-color: #002b36;
+}
+.asciinema-theme-solarized-light .fg-9 {
+ color: #cb4b16;
+}
+.asciinema-theme-solarized-light .bg-9 {
+ background-color: #cb4b16;
+}
+.asciinema-theme-solarized-light .fg-10 {
+ color: #586e75;
+}
+.asciinema-theme-solarized-light .bg-10 {
+ background-color: #586e75;
+}
+.asciinema-theme-solarized-light .fg-11 {
+ color: #657c83;
+}
+.asciinema-theme-solarized-light .bg-11 {
+ background-color: #657c83;
+}
+.asciinema-theme-solarized-light .fg-12 {
+ color: #839496;
+}
+.asciinema-theme-solarized-light .bg-12 {
+ background-color: #839496;
+}
+.asciinema-theme-solarized-light .fg-13 {
+ color: #6c71c4;
+}
+.asciinema-theme-solarized-light .bg-13 {
+ background-color: #6c71c4;
+}
+.asciinema-theme-solarized-light .fg-14 {
+ color: #93a1a1;
+}
+.asciinema-theme-solarized-light .bg-14 {
+ background-color: #93a1a1;
+}
+.asciinema-theme-solarized-light .fg-15 {
+ color: #fdf6e3;
+}
+.asciinema-theme-solarized-light .bg-15 {
+ background-color: #fdf6e3;
+}
+.asciinema-theme-solarized-light .ap-overlay-loading .ap-loader {
+ border-color: rgba(101, 123, 131, 0.3) rgba(101, 123, 131, 0.5) rgba(101, 123, 131, 0.7) #657b83;
+}
+.asciinema-theme-solarized-light .ap-overlay-start .ap-play-button svg .ap-play-btn-fill {
+ fill: #dc322f;
+}
+.asciinema-theme-solarized-light .ap-overlay-start .ap-play-button svg .ap-play-btn-stroke {
+ stroke: #dc322f;
+}
+.asciinema-theme-tango {
+ background-color: #121314;
+}
+.asciinema-theme-tango pre.ap-terminal {
+ color: #CCCCCC;
+ background-color: #121314;
+ border-color: #121314;
+}
+.asciinema-theme-tango .fg-default {
+ color: #CCCCCC;
+}
+.asciinema-theme-tango .fg-bg {
+ color: #121314;
+}
+.asciinema-theme-tango .bg-default {
+ background-color: #121314;
+}
+.asciinema-theme-tango .bg-fg {
+ background-color: #CCCCCC;
+}
+.asciinema-theme-tango .fg-0 {
+ color: #000000;
+}
+.asciinema-theme-tango .bg-0 {
+ background-color: #000000;
+}
+.asciinema-theme-tango .fg-1 {
+ color: #CC0000;
+}
+.asciinema-theme-tango .bg-1 {
+ background-color: #CC0000;
+}
+.asciinema-theme-tango .fg-2 {
+ color: #4E9A06;
+}
+.asciinema-theme-tango .bg-2 {
+ background-color: #4E9A06;
+}
+.asciinema-theme-tango .fg-3 {
+ color: #C4A000;
+}
+.asciinema-theme-tango .bg-3 {
+ background-color: #C4A000;
+}
+.asciinema-theme-tango .fg-4 {
+ color: #3465A4;
+}
+.asciinema-theme-tango .bg-4 {
+ background-color: #3465A4;
+}
+.asciinema-theme-tango .fg-5 {
+ color: #75507B;
+}
+.asciinema-theme-tango .bg-5 {
+ background-color: #75507B;
+}
+.asciinema-theme-tango .fg-6 {
+ color: #06989A;
+}
+.asciinema-theme-tango .bg-6 {
+ background-color: #06989A;
+}
+.asciinema-theme-tango .fg-7 {
+ color: #D3D7CF;
+}
+.asciinema-theme-tango .bg-7 {
+ background-color: #D3D7CF;
+}
+.asciinema-theme-tango .fg-8 {
+ color: #555753;
+}
+.asciinema-theme-tango .bg-8 {
+ background-color: #555753;
+}
+.asciinema-theme-tango .fg-9 {
+ color: #EF2929;
+}
+.asciinema-theme-tango .bg-9 {
+ background-color: #EF2929;
+}
+.asciinema-theme-tango .fg-10 {
+ color: #8AE234;
+}
+.asciinema-theme-tango .bg-10 {
+ background-color: #8AE234;
+}
+.asciinema-theme-tango .fg-11 {
+ color: #FCE94F;
+}
+.asciinema-theme-tango .bg-11 {
+ background-color: #FCE94F;
+}
+.asciinema-theme-tango .fg-12 {
+ color: #729FCF;
+}
+.asciinema-theme-tango .bg-12 {
+ background-color: #729FCF;
+}
+.asciinema-theme-tango .fg-13 {
+ color: #AD7FA8;
+}
+.asciinema-theme-tango .bg-13 {
+ background-color: #AD7FA8;
+}
+.asciinema-theme-tango .fg-14 {
+ color: #34E2E2;
+}
+.asciinema-theme-tango .bg-14 {
+ background-color: #34E2E2;
+}
+.asciinema-theme-tango .fg-15 {
+ color: #EEEEEC;
+}
+.asciinema-theme-tango .bg-15 {
+ background-color: #EEEEEC;
+}
+.asciinema-theme-tango .ap-overlay-loading .ap-loader {
+ border-color: rgba(204, 204, 204, 0.3) rgba(204, 204, 204, 0.5) rgba(204, 204, 204, 0.7) #cccccc;
+}
+.asciinema-theme-tango .fg-8,
+.asciinema-theme-tango .fg-9,
+.asciinema-theme-tango .fg-10,
+.asciinema-theme-tango .fg-11,
+.asciinema-theme-tango .fg-12,
+.asciinema-theme-tango .fg-13,
+.asciinema-theme-tango .fg-14,
+.asciinema-theme-tango .fg-15 {
+ font-weight: bold;
+}
diff --git a/src/resources/demo.cast b/src/resources/demo.cast
new file mode 100644
index 0000000..7728659
--- /dev/null
+++ b/src/resources/demo.cast
@@ -0,0 +1,1351 @@
+{"version": 2, "width": 55, "height": 18, "timestamp": 1702067052, "env": {"SHELL": "/bin/bash", "TERM": "xterm-256color"}}
+[0.01087, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[0.01136, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[0.690613, "o", "n"]
+[0.810301, "o", "a"]
+[0.872261, "o", "n"]
+[0.999468, "o", "o"]
+[1.134174, "o", " "]
+[1.234295, "o", "C"]
+[1.334346, "o", "a"]
+[1.436293, "o", "d"]
+[1.596377, "o", "d"]
+[1.698277, "o", "y"]
+[1.758234, "o", "f"]
+[1.878344, "o", "i"]
+[1.918087, "o", "l"]
+[2.000553, "o", "e"]
+[2.342372, "o", "\r\n\u001b[?2004l\r"]
+[2.346306, "o", "\u001b[?2004h\u001b[?1049h\u001b[22;0;0t\u001b[1;18r\u001b(B\u001b[m\u001b[4l\u001b[?7h\u001b[39;49m\u001b[?1h\u001b=\u001b[?1h\u001b=\u001b[?25l"]
+[2.346401, "o", "\u001b[39;49m\u001b(B\u001b[m\u001b[H\u001b[2J\u001b[16;22H\u001b(B\u001b[0;7m[ New File ]\u001b(B\u001b[m\u001b[H\u001b(B\u001b[0;7m GNU nano 7.2 Caddyfile \u001b[1;54H\u001b(B\u001b[m\r\u001b[17d\u001b(B\u001b[0;7m^G\u001b(B\u001b[m Help\u001b[14G\u001b(B\u001b[0;7m^O\u001b(B\u001b[m Write Out \u001b(B\u001b[0;7m^W\u001b(B\u001b[m Where Is \u001b(B\u001b[0;7m^K\u001b(B\u001b[m Cut\r\u001b[18d\u001b(B\u001b[0;7m^X\u001b(B\u001b[m Exit\u001b[14G\u001b(B\u001b[0;7m^R\u001b(B\u001b[m Read File \u001b(B\u001b[0;7m^\\\u001b(B\u001b[m Replace \u001b(B\u001b[0;7m^U\u001b(B\u001b[m Paste"]
+[2.346447, "o", "\r\u001b[2d\u001b[?12l\u001b[?25h"]
+[3.390282, "o", "\u001b[?25l"]
+[3.390405, "o", "\u001b[1;46H\u001b(B\u001b[0;7mModified\u001b(B\u001b[m\u001b[?12l\u001b[?25h"]
+[3.390512, "o", "\r\u001b[2dc"]
+[3.449926, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[3.44996, "o", "a"]
+[3.510012, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[3.510071, "o", "d"]
+[3.692135, "o", "\u001b[?25l"]
+[3.692255, "o", "\u001b[?12l\u001b[?25hd"]
+[3.752001, "o", "\u001b[?25l"]
+[3.752044, "o", "\u001b[?12l\u001b[?25hy"]
+[3.95415, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[3.954187, "o", "."]
+[4.07408, "o", "\u001b[?25l"]
+[4.074121, "o", "\u001b[?12l\u001b[?25hd"]
+[4.215995, "o", "\u001b[?25l\u001b[?12l\u001b[?25hy"]
+[4.316184, "o", "\u001b[?25l\u001b[?12l\u001b[?25ha"]
+[4.458002, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[4.458037, "o", "n"]
+[4.537848, "o", "\u001b[?25l"]
+[4.537886, "o", "\u001b[?12l\u001b[?25hi"]
+[4.638187, "o", "\u001b[?25l\u001b[?12l\u001b[?25hm"]
+[4.800087, "o", "\u001b[?25l\u001b[?12l\u001b[?25h."]
+[4.899989, "o", "\u001b[?25l"]
+[4.900023, "o", "\u001b[?12l\u001b[?25hc"]
+[5.021786, "o", "\u001b[?25l"]
+[5.021826, "o", "\u001b[?12l\u001b[?25ho"]
+[5.081837, "o", "\u001b[?25l"]
+[5.081871, "o", "\u001b[?12l\u001b[?25hm"]
+[5.626037, "o", "\u001b[?25l"]
+[5.626076, "o", "\r\u001b[3d\u001b[?12l\u001b[?25h"]
+[5.766113, "o", "\u001b[?25l"]
+[5.76618, "o", "\u001b[4d\u001b[?12l\u001b[?25h"]
+[6.270032, "o", "\u001b[?25l"]
+[6.270099, "o", "\u001b[?12l\u001b[?25hf"]
+[6.350042, "o", "\u001b[?25l"]
+[6.350079, "o", "\u001b[16d\b\u001b[K\u001b[?12l\u001b[?25h\u001b[4dfi"]
+[6.411829, "o", "\u001b[?25l"]
+[6.41193, "o", "\u001b[?12l\u001b[?25hl"]
+[6.471835, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[6.471865, "o", "e"]
+[6.633982, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[6.634086, "o", "_"]
+[6.773906, "o", "\u001b[?25l\u001b[?12l\u001b[?25hs"]
+[6.853805, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[6.853836, "o", "e"]
+[6.935789, "o", "\u001b[?25l"]
+[6.935888, "o", "\u001b[?12l\u001b[?25hr"]
+[7.155985, "o", "\u001b[?25l\u001b[?12l\u001b[?25hv"]
+[7.297843, "o", "\u001b[?25l\u001b[?12l\u001b[?25he"]
+[7.337628, "o", "\u001b[?25l"]
+[7.337663, "o", "\u001b[?12l\u001b[?25hr"]
+[7.580003, "o", "\u001b[?25l"]
+[7.580107, "o", "\r\u001b[5d\u001b[?12l\u001b[?25h"]
+[7.781904, "o", "\u001b[?25l\u001b[?12l\u001b[?25hl"]
+[7.921774, "o", "\u001b[?25l"]
+[7.921809, "o", "\u001b[?12l\u001b[?25ho"]
+[7.961731, "o", "\u001b[?25l"]
+[7.961759, "o", "\u001b[?12l\u001b[?25hg"]
+[8.58561, "o", "\u001b[?25l"]
+[8.585644, "o", "\r\u001b[6d\u001b[?12l\u001b[?25h"]
+[8.727838, "o", "\u001b[?25l"]
+[8.727928, "o", "\u001b[7d\u001b[?12l\u001b[?25h"]
+[8.867594, "o", "\u001b[?25l"]
+[8.867622, "o", "\u001b[?12l\u001b[?25h#"]
+[9.029378, "o", "\u001b[?25l"]
+[9.029407, "o", "\u001b[?12l\u001b[?25h "]
+[9.109614, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[9.109668, "o", "l"]
+[9.2716, "o", "\u001b[?25l"]
+[9.27163, "o", "\u001b[?12l\u001b[?25ho"]
+[9.291431, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[9.29148, "o", "a"]
+[9.37173, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[9.371778, "o", "d"]
+[9.513547, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[9.513595, "o", " "]
+[9.553611, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[9.553647, "o", "b"]
+[9.693646, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[9.693694, "o", "a"]
+[9.775779, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[9.775827, "o", "l"]
+[9.875555, "o", "\u001b[?25l\u001b[?12l\u001b[?25ha"]
+[9.955856, "o", "\u001b[?25l\u001b[?12l\u001b[?25hn"]
+[10.037771, "o", "\u001b[?25l\u001b[?12l\u001b[?25hc"]
+[10.097457, "o", "\u001b[?25l"]
+[10.097527, "o", "\u001b[?12l\u001b[?25he"]
+[10.217533, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[10.217641, "o", " "]
+[10.319458, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[10.319502, "o", "A"]
+[10.419494, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[10.419543, "o", "P"]
+[10.479458, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[10.479504, "o", "I"]
+[10.641391, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[10.641445, "o", " "]
+[10.76135, "o", "\u001b[?25l\u001b[?12l\u001b[?25hr"]
+[10.801281, "o", "\u001b[?25l\u001b[?12l\u001b[?25he"]
+[10.843219, "o", "\u001b[?25l\u001b[?12l\u001b[?25hq"]
+[11.013641, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[11.013686, "o", "u"]
+[11.085413, "o", "\u001b[?25l"]
+[11.085455, "o", "\u001b[?12l\u001b[?25he"]
+[11.145298, "o", "\u001b[?25l\u001b[?12l\u001b[?25hs"]
+[11.225332, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[11.225377, "o", "t"]
+[11.345377, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[11.345425, "o", "s"]
+[11.467298, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[11.467339, "o", " "]
+[11.547343, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[11.547389, "o", "b"]
+[11.689235, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[11.689278, "o", "e"]
+[11.749291, "o", "\u001b[?25l\u001b[?12l\u001b[?25ht"]
+[11.829212, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[11.82926, "o", "w"]
+[11.931266, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[11.931306, "o", "e"]
+[12.071253, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[12.071303, "o", "e"]
+[12.151245, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[12.151293, "o", "n"]
+[12.233234, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[12.233283, "o", " "]
+[12.273204, "o", "\u001b[?25l\u001b[?12l\u001b[?25ht"]
+[12.353207, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[12.353258, "o", "w"]
+[12.413174, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[12.413224, "o", "o"]
+[12.5075, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[12.507549, "o", " "]
+[12.595222, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[12.595272, "o", "b"]
+[12.735328, "o", "\u001b[?25l"]
+[12.735369, "o", "\u001b[?12l\u001b[?25ha"]
+[12.837249, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[12.837304, "o", "c"]
+[12.917184, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[12.917229, "o", "k"]
+[13.019385, "o", "\u001b[?25l"]
+[13.019435, "o", "\u001b[?12l\u001b[?25he"]
+[13.099253, "o", "\u001b[?25l"]
+[13.09937, "o", "\u001b[?12l\u001b[?25hn"]
+[13.199326, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[13.199375, "o", "d"]
+[13.259128, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[13.259173, "o", "s"]
+[13.521426, "o", "\u001b[?25l"]
+[13.521571, "o", "\r\u001b[8d\u001b[?12l\u001b[?25h"]
+[13.643297, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[13.643352, "o", "r"]
+[13.703298, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[13.703432, "o", "e"]
+[13.905396, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[13.905442, "o", "v"]
+[14.005156, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[14.005207, "o", "e"]
+[14.085355, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[14.085405, "o", "r"]
+[14.167238, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[14.167289, "o", "s"]
+[14.247167, "o", "\u001b[?25l\u001b[?12l\u001b[?25he"]
+[14.449172, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[14.44922, "o", "_"]
+[14.649062, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[14.649112, "o", "p"]
+[14.77112, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[14.771175, "o", "r"]
+[14.85115, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[14.851203, "o", "o"]
+[14.931105, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[14.931154, "o", "x"]
+[15.053144, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[15.053194, "o", "y"]
+[15.19315, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[15.193198, "o", " "]
+[15.919297, "o", "\u001b[?25l"]
+[15.919358, "o", "\u001b[?12l\u001b[?25h/"]
+[16.059144, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[16.059195, "o", "a"]
+[16.161067, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[16.161118, "o", "p"]
+[16.221072, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[16.221121, "o", "i"]
+[16.423048, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[16.423097, "o", "/"]
+[16.645028, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[16.645078, "o", "*"]
+[16.7851, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[16.785157, "o", " "]
+[17.491128, "o", "\u001b[?25l"]
+[17.491182, "o", "\u001b[?12l\u001b[?25hh"]
+[17.571008, "o", "\u001b[?25l"]
+[17.571058, "o", "\u001b[?12l\u001b[?25ho"]
+[17.650945, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[17.650993, "o", "s"]
+[17.730989, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[17.731038, "o", "t"]
+[17.892961, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[17.89301, "o", "1"]
+[18.134882, "o", "\u001b[?25l"]
+[18.134921, "o", "\u001b[?12l\u001b[?25h:"]
+[18.314959, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[18.315014, "o", "8"]
+[18.396962, "o", "\u001b[?25l"]
+[18.397012, "o", "\u001b[?12l\u001b[?25h0"]
+[18.57694, "o", "\u001b[?25l"]
+[18.576995, "o", "\u001b[?12l\u001b[?25h8"]
+[18.638858, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[18.638908, "o", "0"]
+[18.718825, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[18.718887, "o", " "]
+[18.901153, "o", "\u001b[?25l"]
+[18.901215, "o", "\u001b[?12l\u001b[?25hh"]
+[18.941041, "o", "\u001b[?25l"]
+[18.941104, "o", "\u001b[?12l\u001b[?25ho"]
+[19.060784, "o", "\u001b[?25l"]
+[19.060846, "o", "\u001b[?12l\u001b[?25hs"]
+[19.080763, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[19.080818, "o", "t"]
+[19.242801, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[19.242864, "o", "2"]
+[19.625072, "o", "\u001b[?25l\u001b[?12l\u001b[?25h"]
+[20.048826, "o", "\u001b[?12l\u001b[?25h:"]
+[20.290714, "o", "\u001b[?25l"]
+[20.290762, "o", "\u001b[?12l\u001b[?25h8"]
+[20.35074, "o", "\u001b[?25l"]
+[20.350789, "o", "\u001b[?12l\u001b[?25h0"]
+[20.525971, "o", "\u001b[?25l"]
+[20.52602, "o", "\u001b[?12l\u001b[?25h8"]
+[20.572745, "o", "\u001b[?25l"]
+[20.572884, "o", "\u001b[?12l\u001b[?25h0"]
+[22.788729, "o", "\u001b[8;43H\u001b[?12l\u001b[?25h"]
+[22.988616, "o", "\u001b[?25l"]
+[22.988675, "o", "\u001b[17;14H\u001b(B\u001b[0;7mM-D\u001b(B\u001b[m DOS Forma\u001b(B\u001b[0;7mM-A\u001b(B\u001b[m Append \u001b(B\u001b[0;7mM-B\u001b(B\u001b[m Backup File\u001b[18;2H"]
+[22.988708, "o", "\u001b(B\u001b[0;7mC\u001b(B\u001b[m Cancel \u001b(B\u001b[0;7mM-M\u001b(B\u001b[m Mac Forma\u001b(B\u001b[0;7mM-P\u001b(B\u001b[m Prepend \u001b(B\u001b[0;7m^T\u001b(B\u001b[m Browse"]
+[22.988831, "o", "\r\u001b[16d\u001b(B\u001b[0;7mFile Name to Write: Caddyfile \u001b[16;30H\u001b(B\u001b[m\u001b[?12l\u001b[?25h"]
+[23.392702, "o", "\u001b[?25l"]
+[23.392834, "o", "\u001b[16;20H\u001b[1K \u001b(B\u001b[0;7m[ Writing... ]\u001b(B\u001b[m\u001b[K"]
+[23.398893, "o", "\u001b[1;46H\u001b(B\u001b[0;7m \u001b(B\u001b[m\u001b[16;20H\u001b(B\u001b[0;7m[ Wrote 7 lines ]\u001b(B\u001b[m\u001b[17;14H\u001b(B\u001b[0;7m^O\u001b(B\u001b[m Write Out \u001b(B\u001b[0;7m^W\u001b(B\u001b[m Where Is \u001b(B\u001b[0;7m^K\u001b(B\u001b[m Cut\u001b[K\u001b[18;2H\u001b(B\u001b[0;7mX\u001b(B\u001b[m Exit \u001b(B\u001b[0;7m^R\u001b(B\u001b[m Read File \u001b(B\u001b[0;7m^\\\u001b(B\u001b[m Replace \u001b(B\u001b[0;7m^U\u001b(B\u001b[m Paste\u001b[K\u001b[?12l\u001b[?25h"]
+[23.398944, "o", "\u001b[8;43H"]
+[24.500704, "o", "\u001b[?25l"]
+[24.500826, "o", "\r\u001b[16d\u001b[J\u001b[18d\u001b[?12l\u001b[?25h\u001b[18;1H\u001b[?1049l\u001b[23;0;0t\r\u001b[?1l\u001b>\u001b[?2004l"]
+[24.501435, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[24.501499, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[26.312579, "o", "c"]
+[26.37433, "o", "a"]
+[26.434204, "o", "d"]
+[26.594366, "o", "d"]
+[26.676228, "o", "y"]
+[26.756369, "o", " "]
+[26.856328, "o", "s"]
+[26.938354, "o", "t"]
+[27.0983, "o", "a"]
+[27.178221, "o", "r"]
+[27.34026, "o", "t"]
+[28.810384, "o", "\r\n\u001b[?2004l\r"]
+[28.848996, "o", "2023/12/08 20:24:40.936\t\u001b[34mINFO\u001b[0m\tusing adjacent Caddyfile\r\n"]
+[28.850152, "o", "2023/12/08 20:24:40.937\t\u001b[34mINFO\u001b[0m\tadmin\tadmin endpoint started\t{\"address\": \"localhost:2019\", \"enforce_origin\": false, \"origins\": [\"//localhost:2019\", \"//[::1]:2019\", \"//127.0.0.1:2019\"]}\r\n"]
+[28.85027, "o", "2023/12/08 20:24:40.937\t\u001b[34mINFO\u001b[0m\thttp.auto_https\tserver is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS\t{\"server_name\": \"srv0\", \"https_port\": 443}\r\n2023/12/08 20:24:40.937\t\u001b[34mINFO\u001b[0m\thttp.auto_https\tenabling automatic HTTP->HTTPS redirects\t{\"server_name\": \"srv0\"}\r\n"]
+[28.85034, "o", "2023/12/08 20:24:40.937\t\u001b[34mINFO\u001b[0m\ttls.cache.maintenance\tstarted background certificate maintenance\t{\"cache\": \"0xc000440d80\"}\r\n"]
+[28.850459, "o", "2023/12/08 20:24:40.937\t\u001b[34mINFO\u001b[0m\ttls\tcleaning storage unit\t{\"description\": \"FileStorage:/home/matt/.local/share/caddy\"}\r\n2023/12/08 20:24:40.937\t\u001b[34mINFO\u001b[0m\thttp.log\tserver running\t{\"name\": \"remaining_auto_https_redirects\", \"protocols\": [\"h1\", \"h2\", \"h3\"]}\r\n"]
+[28.850589, "o", "2023/12/08 20:24:40.938\t\u001b[34mINFO\u001b[0m\thttp.log\tserver running\t{\"name\": \"srv0\", \"protocols\": [\"h1\", \"h2\", \"h3\"]}\r\n2023/12/08 20:24:40.938\t\u001b[34mINFO\u001b[0m\thttp\tenabling automatic TLS certificate management\t{\"domains\": [\"caddy.dyanim.com\"]}\r\n"]
+[28.850941, "o", "2023/12/08 20:24:40.938\t\u001b[34mINFO\u001b[0m\tautosaved config (load with --resume flag)\t{\"file\": \"/home/matt/.config/caddy/autosave.json\"}\r\n2023/12/08 20:24:40.938\t\u001b[34mINFO\u001b[0m\tserving initial configuration\r\n"]
+[28.851408, "o", "Successfully started Caddy (pid=1189418) - Caddy is running in the background\r\n"]
+[28.851458, "o", "2023/12/08 20:24:40.938\t\u001b[34mINFO\u001b[0m\ttls.obtain\tacquiring lock\t{\"identifier\": \"caddy.dyanim.com\"}\r\n"]
+[28.851575, "o", "2023/12/08 20:24:40.938\t\u001b[34mINFO\u001b[0m\ttls\tfinished cleaning storage units\r\n"]
+[28.852455, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[28.852488, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[28.856774, "o", "2023/12/08 20:24:40.944\t\u001b[34mINFO\u001b[0m\ttls.obtain\tlock acquired\t{\"identifier\": \"caddy.dyanim.com\"}\r\n"]
+[28.856863, "o", "2023/12/08 20:24:40.944\t\u001b[34mINFO\u001b[0m\ttls.obtain\tobtaining certificate\t{\"identifier\": \"caddy.dyanim.com\"}\r\n"]
+[28.857325, "o", "2023/12/08 20:24:40.944\t\u001b[34mINFO\u001b[0m\thttp\twaiting on internal rate limiter\t{\"identifiers\": [\"caddy.dyanim.com\"], \"ca\": \"https://acme-v02.api.letsencrypt.org/directory\", \"account\": \"default\"}\r\n2023/12/08 20:24:40.944\t\u001b[34mINFO\u001b[0m\thttp\tdone waiting on internal rate limiter\t{\"identifiers\": [\"caddy.dyanim.com\"], \"ca\": \"https://acme-v02.api.letsencrypt.org/directory\", \"account\": \"default\"}\r\n"]
+[29.285351, "o", "2023/12/08 20:24:41.372\t\u001b[34mINFO\u001b[0m\thttp.acme_client\ttrying to solve challenge\t{\"identifier\": \"caddy.dyanim.com\", \"challenge_type\": \"tls-alpn-01\", \"ca\": \"https://acme-v02.api.letsencrypt.org/directory\"}\r\n"]
+[29.584492, "o", "2023/12/08 20:24:41.671\t\u001b[34mINFO\u001b[0m\ttls\tserved key authentication certificate\t{\"identifier\": \"caddy.dyanim.com\", \"challenge\": \"tls-alpn-01\", \"remote\": \"18.216.222.12:59710\", \"distributed\": false}\r\n"]
+[29.666139, "o", "2023/12/08 20:24:41.753\t\u001b[34mINFO\u001b[0m\ttls\tserved key authentication certificate\t{\"identifier\": \"caddy.dyanim.com\", \"challenge\": \"tls-alpn-01\", \"remote\": \"23.178.112.107:39903\", \"distributed\": false}\r\n"]
+[29.736902, "o", "2023/12/08 20:24:41.824\t\u001b[34mINFO\u001b[0m\ttls\tserved key authentication certificate\t{\"identifier\": \"caddy.dyanim.com\", \"challenge\": \"tls-alpn-01\", \"remote\": \"52.10.41.253:53562\", \"distributed\": false}\r\n"]
+[29.97586, "o", "2023/12/08 20:24:42.063\t\u001b[34mINFO\u001b[0m\thttp.acme_client\tauthorization finalized\t{\"identifier\": \"caddy.dyanim.com\", \"authz_status\": \"valid\"}\r\n2023/12/08 20:24:42.063\t\u001b[34mINFO\u001b[0m\thttp.acme_client\tvalidations succeeded; finalizing order\t{\"order\": \"https://acme-v02.api.letsencrypt.org/acme/order/1214936587/227813938406\"}\r\n"]
+[30.371819, "o", "2023/12/08 20:24:42.459\t\u001b[34mINFO\u001b[0m\thttp.acme_client\tsuccessfully downloaded available certificate chains\t{\"count\": 2, \"first_url\": \"https://acme-v02.api.letsencrypt.org/acme/cert/033d46991b7029c81fcf3e464510996a15c7\"}\r\n"]
+[30.37216, "o", "2023/12/08 20:24:42.459\t\u001b[34mINFO\u001b[0m\ttls.obtain\tcertificate obtained successfully\t{\"identifier\": \"caddy.dyanim.com\"}\r\n"]
+[30.372227, "o", "2023/12/08 20:24:42.459\t\u001b[34mINFO\u001b[0m\ttls.obtain\treleasing lock\t{\"identifier\": \"caddy.dyanim.com\"}\r\n"]
+[30.887833, "o", "\r\n\u001b[?2004l\r"]
+[30.888014, "o", "\u001b]0;matt@shadowfax:~/demo\u0007\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[32.289734, "o", "c"]
+[32.349769, "o", "u"]
+[32.451715, "o", "r"]
+[32.571745, "o", "l"]
+[32.69367, "o", " "]
+[32.215883, "o", "-"]
+[33.519743, "o", "L"]
+[33.61967, "o", " "]
+[34.009607, "o", "c"]
+[34.109391, "o", "a"]
+[34.211432, "o", "d"]
+[34.371499, "o", "d"]
+[34.473446, "o", "y"]
+[34.673511, "o", "."]
+[34.755526, "o", "d"]
+[34.875628, "o", "y"]
+[34.995503, "o", "a"]
+[35.097548, "o", "n"]
+[35.217408, "o", "i"]
+[35.299521, "o", "m"]
+[35.479522, "o", "."]
+[35.621453, "o", "c"]
+[35.701374, "o", "o"]
+[35.781617, "o", "m"]
+[37.063498, "o", "\r\n\u001b[?2004l\r"]
+[37.069971, "o", "2023/12/08 20:24:51.157\t\u001b[34mINFO\u001b[0m\thttp.log.access\thandled request\t{\"request\": {\"remote_ip\": \"127.0.0.1\", \"remote_port\": \"60708\", \"client_ip\": \"127.0.0.1\", \"proto\": \"HTTP/1.1\", \"method\": \"GET\", \"host\": \"caddy.dyanim.com\", \"uri\": \"/\", \"headers\": {\"User-Agent\": [\"curl/8.4.0\"], \"Accept\": [\"*/*\"]}}, \"bytes_read\": 0, \"user_id\": \"\", \"duration\": 0.000034205, \"size\": 0, \"status\": 308, \"resp_headers\": {\"Server\": [\"Caddy\"], \"Connection\": [\"close\"], \"Location\": [\"https://caddy.dyanim.com/\"], \"Content-Type\": []}}\r\n"]
+[37.083784, "o", "2023/12/08 20:24:51.171\t\u001b[34mINFO\u001b[0m\thttp.log.access\thandled request\t{\"request\": {\"remote_ip\": \"127.0.0.1\", \"remote_port\": \"39262\", \"client_ip\": \"127.0.0.1\", \"proto\": \"HTTP/2.0\", \"method\": \"GET\", \"host\": \"caddy.dyanim.com\", \"uri\": \"/\", \"headers\": {\"User-Agent\": [\"curl/8.4.0\"], \"Accept\": [\"*/*\"]}, \"tls\": {\"resumed\": false, \"version\": 772, \"cipher_suite\": 4865, \"proto\": \"h2\", \"server_name\": \"caddy.dyanim.com\"}}, \"bytes_read\": 0, \"user_id\": \"\", \"duration\": 0.002442362, \"size\": 39, \"status\": 200, \"resp_headers\": {\"Content-Length\": [\"39\"], \"Server\": [\"Caddy\"], \"Alt-Svc\": [\"h3=\\\":443\\\"; ma=2592000\"], \"Etag\": [\"\\\"s5c3e913\\\"\"], \"Content-Type\": [\"text/html; charset=utf-8\"], \"Last-Modified\": [\"Fri, 08 Dec 2023 06:01:21 GMT\"], \"Accept-Ranges\": [\"bytes\"]}}\r\n"]
+[37.083855, "o", "🔒 Easy HTTPS, just like that! 🎉 \r\n"]
+[37.085109, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[37.085198, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[38.905192, "o", "#"]
+[39.556289, "o", " "]
+[39.629167, "o", "W"]
+[39.811168, "o", "e"]
+[39.951106, "o", " "]
+[40.012941, "o", "c"]
+[40.092959, "o", "a"]
+[40.172983, "o", "n"]
+[40.252911, "o", " "]
+[40.335023, "o", "v"]
+[40.414839, "o", "i"]
+[40.514904, "o", "e"]
+[40.576868, "o", "w"]
+[40.656934, "o", " "]
+[40.736879, "o", "a"]
+[40.796964, "o", "n"]
+[40.878969, "o", "d"]
+[40.938824, "o", " "]
+[40.998883, "o", "c"]
+[41.098922, "o", "h"]
+[41.160879, "o", "a"]
+[41.280936, "o", "n"]
+[41.320791, "o", "g"]
+[41.36083, "o", "e"]
+[41.442833, "o", " "]
+[41.482798, "o", "o"]
+[41.547076, "o", "u"]
+[41.662818, "o", "r"]
+[41.704868, "o", " "]
+[41.824797, "o", "l"]
+[41.844882, "o", "i"]
+[41.924865, "o", "v"]
+[41.9869, "o", "e"]
+[42.066826, "o", " "]
+[42.16687, "o", "c"]
+[42.206798, "o", "o"]
+[42.248827, "o", "n"]
+[42.328869, "o", "f"]
+[42.428741, "o", "i"]
+[42.488704, "o", "g"]
+[42.570804, "o", " "]
+[42.630643, "o", "u"]
+[42.730865, "o", "s"]
+[42.79272, "o", "i"]
+[42.832661, "o", "n"]
+[42.892713, "o", "g"]
+[42.992879, "o", " "]
+[43.032816, "o", "t"]
+[43.114755, "o", "h"]
+[43.194872, "o", "e"]
+[43.254749, "o", " "]
+[43.516713, "o", "a"]
+[43.618575, "o", "d"]
+[43.758743, "o", "m"]
+[43.900612, "o", "i"]
+[43.960547, "o", "n"]
+[44.100717, "o", " "]
+[44.322609, "o", "A"]
+[44.402506, "o", "P"]
+[44.464524, "o", "I"]
+[45.188713, "o", "."]
+[45.393676, "o", "\r\n\u001b[?2004l\r"]
+[45.393784, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[45.393863, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[45.661634, "o", "c"]
+[45.743542, "o", "u"]
+[45.843507, "o", "r"]
+[45.923487, "o", "l"]
+[46.003442, "o", " "]
+[46.085451, "o", "l"]
+[46.225652, "o", "o"]
+[46.285229, "o", "c"]
+[46.347264, "o", "a"]
+[46.407123, "o", "l"]
+[46.54733, "o", "h"]
+[46.609332, "o", "o"]
+[46.705585, "o", "s"]
+[46.709146, "o", "t"]
+[46.515287, "o", ":"]
+[46.675034, "o", "2"]
+[46.77703, "o", "0"]
+[46.857, "o", "1"]
+[46.937015, "o", "9"]
+[47.15902, "o", "/"]
+[47.241011, "o", "c"]
+[47.361033, "o", "o"]
+[47.400967, "o", "n"]
+[47.481038, "o", "f"]
+[47.542941, "o", "i"]
+[47.622978, "o", "g"]
+[47.76291, "o", "/"]
+[48.025042, "o", " "]
+[48.227033, "o", "|"]
+[48.327043, "o", " "]
+[48.831247, "o", "j"]
+[48.91288, "o", "q"]
+[49.052983, "o", " "]
+[49.152902, "o", "-"]
+[49.254946, "o", "c"]
+[49.395145, "o", "\r\n\u001b[?2004l\r"]
+[49.400117, "o", "\u001b[1;37m{\u001b[0m\u001b[1;34m\"apps\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m{\u001b[0m\u001b[1;34m\"http\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m{\u001b[0m\u001b[1;34m\"servers\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m{\u001b[0m\u001b[1;34m\"srv0\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m{\u001b[0m\u001b[1;34m\"listen\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m[\u001b[0;32m\":443\"\u001b[0m\u001b[1;37m\u001b[1;37m]\u001b[0m\u001b[1;37m,\u001b[0m\u001b[1;34m\"logs\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m{\u001b[0m\u001b[1;34m\"logger_names\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m{\u001b[0m\u001b[1;34m\"caddy.dyanim.com\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[0;32m\"\"\u001b[0m\u001b[1;37m\u001b[1;37m}\u001b[0m\u001b[1;37m\u001b[1;37m}\u001b[0m\u001b[1;37m,\u001b[0m\u001b[1;34m\"routes\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m[\u001b[1;37m{\u001b[0m\u001b[1;34m\"handle\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m[\u001b[1;37m{\u001b[0m\u001b[1;34m\"handler\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[0;32m\"subroute\"\u001b[0m\u001b[1;37m,\u001b[0m\u001b[1;34m\"routes\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m[\u001b[1;37m{\u001b[0m\u001b[1;34m\"handle\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m[\u001b[1;37m{\u001b[0m\u001b[1;34m\"handler\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[0;32m\"reverse_proxy\"\u001b[0m\u001b[1;37m,\u001b[0m\u001b[1;34m\"upstreams\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m[\u001b[1;37m{\u001b[0m\u001b[1;34m\"dial\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[0;32m\"host1:8080\"\u001b[0m\u001b[1;37m\u001b[1;37m}\u001b[0m\u001b[1;37m,\u001b[1;37m{\u001b[0m\u001b[1;34m\"dial\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[0;32m\"host2:8080\"\u001b[0m\u001b[1;37m\u001b[1;37m}\u001b[0m\u001b[1;37m\u001b["]
+[49.400195, "o", "1;37m]\u001b[0m\u001b[1;37m\u001b[1;37m}\u001b[0m\u001b[1;37m\u001b[1;37m]\u001b[0m\u001b[1;37m,\u001b[0m\u001b[1;34m\"match\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m[\u001b[1;37m{\u001b[0m\u001b[1;34m\"path\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m[\u001b[0;32m\"/api/*\"\u001b[0m\u001b[1;37m\u001b[1;37m]\u001b[0m\u001b[1;37m\u001b[1;37m}\u001b[0m\u001b[1;37m\u001b[1;37m]\u001b[0m\u001b[1;37m\u001b[1;37m}\u001b[0m\u001b[1;37m,\u001b[1;37m{\u001b[0m\u001b[1;34m\"handle\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m[\u001b[1;37m{\u001b[0m\u001b[1;34m\"handler\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[0;32m\"file_server\"\u001b[0m\u001b[1;37m,\u001b[0m\u001b[1;34m\"hide\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m[\u001b[0;32m\"./Caddyfile\"\u001b[0m\u001b[1;37m\u001b[1;37m]\u001b[0m\u001b[1;37m\u001b[1;37m}\u001b[0m\u001b[1;37m\u001b[1;37m]\u001b[0m\u001b[1;37m\u001b[1;37m}\u001b[0m\u001b[1;37m\u001b[1;37m]\u001b[0m\u001b[1;37m\u001b[1;37m}\u001b[0m\u001b[1;37m\u001b[1;37m]\u001b[0m\u001b[1;37m,\u001b[0m\u001b[1;34m\"match\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m[\u001b[1;37m{\u001b[0m\u001b[1;34m\"host\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[1;37m[\u001b[0;32m\"caddy.dyanim.com\"\u001b[0m\u001b[1;37m\u001b[1;37m]\u001b[0m\u001b[1;37m\u001b[1;37m}\u001b[0m\u001b[1;37m\u001b[1;37m]\u001b[0m\u001b[1;37m,\u001b[0m\u001b[1;34m\"terminal\"\u001b[0m\u001b[1;37m:\u001b[0m\u001b[0;37mtrue\u001b[0m\u001b[1;37m\u001b[1;37m}\u001b[0m\u001b[1;37m\u001b[1;37m]\u001b[0m\u001b[1;37m\u001b[1;37m}\u001b[0m\u001b[1;37m\u001b[1;37m}\u001b[0m\u001b[1;37m\u001b[1;37m}\u001b[0m\u001b[1;37m\u001b[1;37m}\u001b[0m\u001b[1;37m\u001b[1;37m}\u001b[0m\r\n"]
+[49.401008, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[49.401108, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[50.502911, "o", "#"]
+[50.624757, "o", " "]
+[50.684738, "o", "T"]
+[50.804792, "o", "h"]
+[50.866647, "o", "a"]
+[50.926736, "o", "t"]
+[51.026721, "o", "'"]
+[51.0667, "o", "s"]
+[51.212036, "o", " "]
+[51.248718, "o", "o"]
+[51.308699, "o", "u"]
+[51.450694, "o", "r"]
+[51.47075, "o", " "]
+[51.670734, "o", "C"]
+[51.772698, "o", "a"]
+[51.892729, "o", "d"]
+[52.034625, "o", "d"]
+[52.074663, "o", "y"]
+[52.213504, "o", "f"]
+[52.296665, "o", "i"]
+[52.316576, "o", "l"]
+[52.396603, "o", "e"]
+[52.518585, "o", " "]
+[52.578561, "o", "c"]
+[52.638545, "o", "o"]
+[52.678554, "o", "n"]
+[52.800599, "o", "f"]
+[52.860546, "o", "i"]
+[52.940614, "o", "g"]
+[53.082557, "o", ","]
+[53.142533, "o", " "]
+[53.282586, "o", "c"]
+[53.342562, "o", "o"]
+[53.364491, "o", "n"]
+[53.484551, "o", "v"]
+[53.626483, "o", "e"]
+[53.70647, "o", "r"]
+[53.806474, "o", "t"]
+[54.148638, "o", "e"]
+[54.330635, "o", "d"]
+[54.450596, "o", " "]
+[54.472497, "o", "t"]
+[54.532489, "o", "o"]
+[54.612524, "o", " "]
+[54.754582, "o", "J"]
+[54.794534, "o", "S"]
+[54.934473, "o", "O"]
+[54.974572, "o", "N"]
+[55.298714, "o", "."]
+[55.780586, "o", "\r\n\u001b[?2004l\r"]
+[55.780692, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[55.780782, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[56.082444, "o", "#"]
+[56.21838, "o", " "]
+[56.948387, "o", "T"]
+[57.070333, "o", "h"]
+[57.110273, "o", "i"]
+[57.190297, "o", "s"]
+[57.250235, "o", " "]
+[57.312165, "o", "i"]
+[57.392254, "o", "s"]
+[57.452221, "o", " "]
+[57.554219, "o", "g"]
+[57.694166, "o", "r"]
+[57.754188, "o", "e"]
+[57.816189, "o", "a"]
+[57.916238, "o", "t"]
+[58.016253, "o", " "]
+[58.076219, "o", "f"]
+[58.178183, "o", "o"]
+[58.238225, "o", "r"]
+[58.318099, "o", " "]
+[58.40015, "o", "s"]
+[58.500168, "o", "c"]
+[58.640206, "o", "r"]
+[58.722172, "o", "i"]
+[58.762055, "o", "p"]
+[58.882048, "o", "t"]
+[58.94417, "o", "i"]
+[59.024107, "o", "n"]
+[59.084086, "o", "g"]
+[59.164071, "o", " "]
+[59.246194, "o", "a"]
+[59.32616, "o", "n"]
+[59.466154, "o", "d"]
+[59.588142, "o", " "]
+[59.688138, "o", "a"]
+[59.790081, "o", "u"]
+[59.870063, "o", "t"]
+[59.950043, "o", "o"]
+[60.010095, "o", "m"]
+[60.132093, "o", "a"]
+[60.17208, "o", "t"]
+[60.252028, "o", "i"]
+[60.314102, "o", "o"]
+[60.374069, "o", "n"]
+[60.576035, "o", "."]
+[61.260257, "o", "\r\n\u001b[?2004l\r"]
+[61.260368, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[61.260451, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[61.421959, "o", "#"]
+[61.601972, "o", " "]
+[61.662008, "o", "L"]
+[61.823823, "o", "e"]
+[61.903962, "o", "t"]
+[62.025853, "o", "'"]
+[62.145961, "o", "s"]
+[62.225853, "o", " "]
+[62.30792, "o", "a"]
+[62.447996, "o", "d"]
+[62.609977, "o", "d"]
+[62.670001, "o", " "]
+[62.749924, "o", "a"]
+[62.852014, "o", " "]
+[62.911962, "o", "s"]
+[62.971968, "o", "t"]
+[63.113879, "o", "a"]
+[63.173851, "o", "t"]
+[63.273827, "o", "i"]
+[63.375688, "o", "c"]
+[63.475822, "o", " "]
+[63.595771, "o", "H"]
+[63.657907, "o", "T"]
+[63.777745, "o", "T"]
+[63.899767, "o", "P"]
+[63.999705, "o", " "]
+[64.039665, "o", "r"]
+[64.079592, "o", "e"]
+[64.159612, "o", "s"]
+[64.201628, "o", "p"]
+[64.34176, "o", "o"]
+[64.381694, "o", "n"]
+[64.421676, "o", "s"]
+[64.483706, "o", "e"]
+[64.623709, "o", "."]
+[66.315989, "o", "\r\n\u001b[?2004l\r"]
+[66.316107, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[66.316177, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[67.828916, "o", "curl \\\r\n\r -X PUT \\\r\n\r -H \"Content-Type: application/json\" \\\r\n\r -d '{\r\n\r \"handle\": [{\r\n\r \"handler\": \"static_response\",\r\n\r \"body\": \"Work smarter, not harder.\\n\"\u0000\r\n\r }]\r\n\r }' \\\r\n\r "]
+[68.753756, "o", "\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\u001b[A\b\b\b\bcurl \\\r\n\r -X PUT \\\r\n\r -H \"Content-Type: application/json\" \\\r\n\r -d '{\r\n\r \"handle\": [{\r\n\r \"handler\": \"static_response\",\r\n"]
+[68.753842, "o", "\r \"body\": \"Work smarter, not harder.\\n\"\r\n\r }]\r\n\r }' \\\r\n\r "]
+[70.243706, "o", "l"]
+[70.445408, "o", "o"]
+[70.767348, "o", "c"]
+[70.827261, "o", "a"]
+[70.889267, "o", "l"]
+[71.029253, "o", "h"]
+[71.069334, "o", "o"]
+[71.17121, "o", "s"]
+[71.191172, "o", "t"]
+[71.351174, "o", ":"]
+[71.533328, "o", "2"]
+[71.633291, "o", "0"]
+[71.695308, "o", "1"]
+[71.755307, "o", "9"]
+[72.863595, "o", "/"]
+[73.105536, "o", "c"]
+[73.145182, "o", "o"]
+[73.205137, "o", "n"]
+[73.30513, "o", "f"]
+[73.367132, "o", "i"]
+[73.447121, "o", "g"]
+[73.567142, "o", "/"]
+[73.689077, "o", "a"]
+[73.769089, "o", "p"]
+[73.889097, "o", "p"]
+[74.031113, "o", "s"]
+[74.655295, "o", "/"]
+[75.361181, "o", "h"]
+[75.441074, "o", "t"]
+[75.541002, "o", "t"]
+[75.623072, "o", "p"]
+[75.803096, "o", "/"]
+[76.044982, "o", "s"]
+[76.105049, "o", "e"]
+[76.166869, "o", "r"]
+[76.38894, "o", "v"]
+[76.488896, "o", "e"]
+[76.548799, "o", "r"]
+[76.628709, "o", "s"]
+[76.850924, "o", "/"]
+[76.97279, "o", "s"]
+[77.072847, "o", "r"]
+[77.2749, "o", "v"]
+[77.414827, "o", "0"]
+[77.756891, "o", "/"]
+[78.502648, "o", "r"]
+[78.604685, "o", "o \r"]
+[78.664623, "o", "u"]
+[78.704639, "o", "t"]
+[78.746246, "o", "e"]
+[78.804685, "o", "s"]
+[78.92665, "o", "/"]
+[79.106779, "o", "0"]
+[79.752847, "o", "\r\n\u001b[?2004l\r"]
+[79.757728, "o", "2023/12/08 20:35:25.508\t\u001b[34mINFO\u001b[0m\tadmin.api\treceived request\t{\"method\": \"PUT\", \"host\": \"localhost:2019\", \"uri\": \"/config/apps/http/servers/srv0/routes/0\", \"remote_ip\": \"127.0.0.1\", \"remote_port\": \"59148\", \"headers\": {\"Accept\":[\"*/*\"],\"Content-Length\":[\"98\"],\"Content-Type\":[\"application/json\"],\"User-Agent\":[\"curl/8.4.0\"]}}\r\n"]
+[79.758498, "o", "2023/12/08 20:35:25.509\t\u001b[34mINFO\u001b[0m\tadmin\tadmin endpoint started\t{\"address\": \"localhost:2019\", \"enforce_origin\": false, \"origins\": [\"//localhost:2019\", \"//[::1]:2019\", \"//127.0.0.1:2019\"]}\r\n"]
+[79.758564, "o", "2023/12/08 20:35:25.509\t\u001b[34mINFO\u001b[0m\thttp.auto_https\tserver is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS\t{\"server_name\": \"srv0\", \"https_port\": 443}\r\n2023/12/08 20:35:25.509\t\u001b[34mINFO\u001b[0m\thttp.auto_https\tenabling automatic HTTP->HTTPS redirects\t{\"server_name\": \"srv0\"}\r\n"]
+[79.758826, "o", "2023/12/08 20:35:25.510\t\u001b[34mINFO\u001b[0m\thttp\tenabling HTTP/3 listener\t{\"addr\": \":443\"}\r\n2023/12/08 20:35:25.510\t\u001b[34mINFO\u001b[0m\thttp.log\tserver running\t{\"name\": \"srv0\", \"protocols\": [\"h1\", \"h2\", \"h3\"]}\r\n2023/12/08 20:35:25.510\t\u001b[34mINFO\u001b[0m\thttp.log\t"]
+[79.758944, "o", "server running\t{\"name\": \"remaining_auto_https_redirects\", \"protocols\": [\"h1\", \"h2\", \"h3\"]}\r\n2023/12/08 20:35:25.510\t\u001b[34mINFO\u001b[0m\thttp\tenabling automatic TLS certificate management\t{\"domains\": [\"caddy.dyanim.com\"]}\r\n2023/12/08 20:35:25.510\t\u001b[34mINFO\u001b[0m\thttp\tservers shutting down with eternal grace period\r\n"]
+[79.759053, "o", "2023/12/08 20:35:25.510\t\u001b[34mINFO\u001b[0m\tautosaved config (load with --resume flag)\t{\"file\": \"/home/matt/.config/caddy/autosave.json\"}\r\n"]
+[79.759802, "o", "2023/12/08 20:35:25.510\t\u001b[34mINFO\u001b[0m\tadmin\tstopped previous server\t{\"address\": \"localhost:2019\"}\r\n"]
+[79.760247, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[79.76032, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[85.210166, "o", "#"]
+[85.372115, "o", " "]
+[85.856078, "o", "W"]
+[86.015979, "o", "e"]
+[86.096037, "o", " "]
+[86.177979, "o", "c"]
+[86.255476, "o", "a"]
+[86.277955, "o", "n"]
+[86.378013, "o", " "]
+[86.439966, "o", "t"]
+[86.499945, "o", "u"]
+[86.599976, "o", "r"]
+[86.681831, "o", "n"]
+[86.743761, "o", " "]
+[86.821947, "o", "o"]
+[86.881908, "o", "f"]
+[87.023955, "o", "f"]
+[87.103923, "o", " "]
+[87.25604, "o", "r"]
+[87.287312, "o", "e"]
+[87.345896, "o", "q"]
+[87.445895, "o", "u"]
+[87.547886, "o", "e"]
+[87.607902, "o", "s"]
+[87.687868, "o", "t"]
+[87.809914, "o", " "]
+[87.909818, "o", "l"]
+[88.069914, "o", "o"]
+[88.091859, "o", "g"]
+[88.231834, "o", "g"]
+[88.311935, "o", "i"]
+[88.373857, "o", "n"]
+[88.433866, "o", "g"]
+[89.763863, "o", "."]
+[90.025795, "o", "\r\n\u001b[?2004l\r"]
+[90.02598, "o", "\u001b]0;matt@shadowfax:~/demo\u0007\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[91.193723, "o", "c"]
+[91.260007, "o", "u"]
+[91.353685, "o", "r"]
+[91.455621, "o", "l"]
+[91.535623, "o", " "]
+[91.657561, "o", "-"]
+[91.797568, "o", "X"]
+[91.937635, "o", " "]
+[92.119602, "o", "D"]
+[92.301611, "o", "E"]
+[92.321497, "o", "L"]
+[92.441626, "o", "E"]
+[92.543522, "o", "T"]
+[92.623452, "o", "E"]
+[92.703471, "o", " "]
+[93.671811, "o", "l"]
+[93.831507, "o", "o"]
+[93.871447, "o", "c"]
+[93.913391, "o", "a"]
+[94.0134, "o", "l"]
+[94.153398, "o", "h"]
+[94.195454, "o", "o"]
+[94.335411, "o", "s"]
+[94.375419, "o", "t"]
+[94.477439, "o", ":"]
+[94.617492, "o", "2"]
+[94.739424, "o", "0"]
+[94.779477, "o", "1"]
+[94.859331, "o", "9"]
+[95.201711, "o", "/"]
+[96.4114, "o", "c"]
+[96.471451, "o", "o"]
+[96.551461, "o", "n"]
+[96.611514, "o", "f"]
+[96.713509, "o", "i"]
+[96.773354, "o", "g"]
+[96.893657, "o", "/"]
+[97.055467, "o", "a"]
+[97.155455, "o", "p"]
+[97.264193, "o", "p"]
+[97.357581, "o", "s"]
+[97.477428, "o", "/"]
+[97.779587, "o", "h"]
+[97.841532, "o", "t"]
+[97.941326, "o", "t"]
+[98.001463, "o", "p"]
+[98.1834, "o", "/"]
+[98.24337, "o", "s"]
+[98.325299, "o", "e"]
+[98.365155, "o", "r"]
+[98.585475, "o", "v \r"]
+[98.667223, "o", "e"]
+[98.758247, "o", "r"]
+[98.807088, "o", "s"]
+[98.887218, "o", "/"]
+[98.989073, "o", "s"]
+[99.049023, "o", "r"]
+[99.230988, "o", "v"]
+[99.411041, "o", "0"]
+[99.673285, "o", "/"]
+[100.439443, "o", "l"]
+[100.581117, "o", "o"]
+[100.641128, "o", "g"]
+[100.72084, "o", "s"]
+[101.042968, "o", "\r\n\u001b[?2004l\r"]
+[101.046673, "o", "2023/12/08 20:35:46.797\t\u001b[34mINFO\u001b[0m\tadmin.api\treceived request\t{\"method\": \"DELETE\", \"host\": \"localhost:2019\", \"uri\": \"/config/apps/http/servers/srv0/logs\", \"remote_ip\": \"127.0.0.1\", \"remote_port\": \"43404\", \"headers\": {\"Accept\":[\"*/*\"],\"User-Agent\":[\"curl/8.4.0\"]}}\r\n"]
+[101.047333, "o", "2023/12/08 20:35:46.798\t\u001b[34mINFO\u001b[0m\tadmin\tadmin endpoint started\t{\"address\": \"localhost:2019\", \"enforce_origin\": false, \"origins\": [\"//[::1]:2019\", \"//127.0.0.1:2019\", \"//localhost:2019\"]}\r\n"]
+[101.04747, "o", "2023/12/08 20:35:46.798\t\u001b[34mINFO\u001b[0m\thttp.auto_https\tserver is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS\t{\"server_name\": \"srv0\", \"https_port\": 443}\r\n2023/12/08 20:35:46.798\t\u001b[34mINFO\u001b[0m\thttp.auto_https\tenabling automatic HTTP->HTTPS redirects\t{\"server_name\": \"srv0\"}\r\n"]
+[101.047698, "o", "2023/12/08 20:35:46.798\t\u001b[34mINFO\u001b[0m\thttp\tenabling HTTP/3 listener\t{\"addr\": \":443\"}\r\n"]
+[101.047731, "o", "2023/12/08 20:35:46.798\t\u001b[34mINFO\u001b[0m\thttp.log\tserver running\t{\"name\": \"srv0\", \"protocols\": [\"h1\", \"h2\", \"h3\"]}\r\n"]
+[101.047828, "o", "2023/12/08 20:35:46.799\t\u001b[34mINFO\u001b[0m\thttp.log\tserver running\t{\"name\": \"remaining_auto_https_redirects\", \"protocols\": [\"h1\", \"h2\", \"h3\"]}\r\n2023/12/08 20:35:46.799\t\u001b[34mINFO\u001b[0m\thttp\tenabling automatic TLS certificate management\t{\"domains\": [\"caddy.dyanim.com\"]}\r\n2023/12/08 20:35:46.799\t\u001b[34mINFO\u001b[0m\thttp\tservers shutting down with eternal grace period\r\n"]
+[101.048043, "o", "2023/12/08 20:35:46.799\t\u001b[34mINFO\u001b[0m\tautosaved config (load with --resume flag)\t{\"file\": \"/home/matt/.config/caddy/autosave.json\"}\r\n"]
+[101.048589, "o", "2023/12/08 20:35:46.799\t\u001b[34mINFO\u001b[0m\tadmin\tstopped previous server\t{\"address\": \"localhost:2019\"}\r\n"]
+[101.048845, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[101.048876, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[105.11297, "o", "c"]
+[105.152505, "o", "u"]
+[105.274648, "o", "r"]
+[105.334782, "o", "l"]
+[105.43459, "o", " "]
+[105.536606, "o", "-"]
+[105.736624, "o", "L"]
+[105.818524, "o", " "]
+[106.423874, "o", "c"]
+[106.46245, "o", "a"]
+[106.562422, "o", "d"]
+[106.704448, "o", "d"]
+[106.776935, "o", "y"]
+[106.926481, "o", "."]
+[107.006485, "o", "d"]
+[107.106593, "o", "y"]
+[107.208525, "o", "a"]
+[107.32833, "o", "n"]
+[107.448435, "o", "i"]
+[107.530447, "o", "m"]
+[107.670862, "o", "."]
+[107.792468, "o", "c"]
+[107.872366, "o", "o"]
+[107.932388, "o", "m"]
+[108.114324, "o", "\r\n\u001b[?2004l\r"]
+[108.132721, "o", "Work smarter, not harder.\r\n"]
+[108.134833, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[108.134904, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[109.444501, "o", "#"]
+[109.604277, "o", " "]
+[109.706236, "o", "W"]
+[109.846357, "o", "e"]
+[109.926318, "o", " "]
+[110.008219, "o", "c"]
+[110.048231, "o", "a"]
+[110.128221, "o", "n"]
+[110.18846, "o", " "]
+[110.250331, "o", "r"]
+[110.290212, "o", "e"]
+[110.390172, "o", "s"]
+[110.47024, "o", "t"]
+[110.532087, "o", "o"]
+[110.632168, "o", "r"]
+[110.692152, "o", "e"]
+[110.752074, "o", " "]
+[110.834078, "o", "o"]
+[110.914051, "o", "u"]
+[111.014065, "o", "r"]
+[111.116075, "o", " "]
+[111.156045, "o", "o"]
+[111.338039, "o", "r"]
+[111.418085, "o", "i"]
+[111.578119, "o", "g"]
+[111.66003, "o", "i"]
+[111.740022, "o", "n"]
+[111.800081, "o", "a"]
+[111.941998, "o", "l"]
+[112.021995, "o", " "]
+[112.14203, "o", "c"]
+[112.203968, "o", "o"]
+[112.244014, "o", "n"]
+[112.324002, "o", "f"]
+[112.42398, "o", "i"]
+[112.486006, "o", "g"]
+[112.908103, "o", "."]
+[113.452049, "o", "\r\n\u001b[?2004l\r"]
+[113.452211, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[113.452352, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[114.619837, "o", "c"]
+[114.659844, "o", "a"]
+[114.742003, "o", "d"]
+[114.861868, "o", "d"]
+[114.921772, "o", "y"]
+[115.023827, "o", " "]
+[115.063794, "o", "r"]
+[115.083686, "o", "e"]
+[115.163828, "o", "l"]
+[115.285824, "o", "o"]
+[115.345733, "o", "a"]
+[115.405768, "o", "d"]
+[116.547794, "o", "\r\n\u001b[?2004l\r"]
+[116.565363, "o", "2023/12/08 20:36:01.316\t\u001b[34mINFO\u001b[0m\tusing adjacent Caddyfile\r\n"]
+[116.566727, "o", "2023/12/08 20:36:01.317\t\u001b[34mINFO\u001b[0m\tadmin.api\treceived request\t{\"method\": \"POST\", \"host\": \"localhost:2019\", \"uri\": \"/load\", \"remote_ip\": \"127.0.0.1\", \"remote_port\": \"56890\", \"headers\": {\"Accept-Encoding\":[\"gzip\"],\"Content-Length\":[\"411\"],\"Content-Type\":[\"application/json\"],\"Origin\":[\"http://localhost:2019\"],\"User-Agent\":[\"Go-http-client/1.1\"]}}\r\n"]
+[116.567161, "o", "2023/12/08 20:36:01.318\t\u001b[34mINFO\u001b[0m\tadmin\tadmin endpoint started\t{\"address\": \"localhost:2019\", \"enforce_origin\": false, \"origins\": [\"//localhost:2019\", \"//[::1]:2019\", \"//127.0.0.1:2019\"]}\r\n"]
+[116.567246, "o", "2023/12/08 20:36:01.318\t\u001b[34mINFO\u001b[0m\thttp.auto_https\tserver is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS\t{\"server_name\": \"srv0\", \"https_port\": 443}\r\n2023/12/08 20:36:01.318\t\u001b[34mINFO\u001b[0m\thttp.auto_https\tenabling automatic HTTP->HTTPS redirects\t{\"server_name\": \"srv0\"}\r\n"]
+[116.567352, "o", "2023/12/08 20:36:01.318\t\u001b[34mINFO\u001b[0m\thttp\tenabling HTTP/3 listener\t{\"addr\": \":443\"}\r\n2023/12/08 20:36:01.318\t\u001b[34mINFO\u001b[0m\thttp.log\tserver running\t{\"name\": \"srv0\", \"protocols\": [\"h1\", \"h2\", \"h3\"]}\r\n"]
+[116.567385, "o", "2023/12/08 20:36:01.318\t\u001b[34mINFO\u001b[0m\thttp.log\tserver running\t{\"name\": \"remaining_auto_https_redirects\", \"protocols\": [\"h1\", \"h2\", \"h3\"]}\r\n2023/12/08 20:36:01.318\t\u001b[34mINFO\u001b[0m\thttp\tenabling automatic TLS certificate management\t{\"domains\": [\"caddy.dyanim.com\"]}\r\n2023/12/08 20:36:01.318\t\u001b[34mINFO\u001b[0m\thttp\tservers shutting down with eternal grace period\r\n"]
+[116.567626, "o", "2023/12/08 20:36:01.318\t\u001b[34mINFO\u001b[0m\tautosaved config (load with --resume flag)\t{\"file\": \"/home/matt/.config/caddy/autosave.json\"}\r\n2023/12/08 20:36:01.318\t\u001b[34mINFO\u001b[0m\tadmin.api\tload complete\r\n"]
+[116.568974, "o", "2023/12/08 20:36:01.320\t\u001b[34mINFO\u001b[0m\tadmin\tstopped previous server\t{\"address\": \"localhost:2019\"}\r\n"]
+[116.569426, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[118.891774, "o", "c"]
+[118.971678, "o", "u"]
+[119.091636, "o", "r"]
+[119.17357, "o", "l"]
+[119.277123, "o", " "]
+[119.737513, "o", "-"]
+[119.917412, "o", "L"]
+[119.999486, "o", " "]
+[120.441856, "o", "c"]
+[120.483301, "o", "a"]
+[120.563291, "o", "d"]
+[120.723294, "o", "d"]
+[120.743262, "o", "y"]
+[120.90547, "o", "."]
+[120.98525, "o", "d"]
+[121.087296, "o", "y"]
+[121.147453, "o", "a"]
+[121.893148, "o", "n"]
+[122.053301, "o", "i"]
+[122.113149, "o", "m"]
+[122.28027, "o", "."]
+[122.375105, "o", "c"]
+[122.457254, "o", "o"]
+[122.497062, "o", "m"]
+[122.89931, "o", "\r\n\u001b[?2004l\r"]
+[122.905723, "o", "2023/12/08 20:36:08.656\t\u001b[34mINFO\u001b[0m\thttp.log.access\thandled request\t{\"request\": {\"remote_ip\": \"127.0.0.1\", \"remote_port\": \"47468\", \"client_ip\": \"127.0.0.1\", \"proto\": \"HTTP/1.1\", \"method\": \"GET\", \"host\": \"caddy.dyanim.com\", \"uri\": \"/\", \"headers\": {\"User-Agent\": [\"curl/8.4.0\"], \"Accept\": [\"*/*\"]}}, \"bytes_read\": 0, \"user_id\": \"\", \"duration\": 0.000032451, \"size\": 0, \"status\": 308, \"resp_headers\": {\"Server\": [\"Caddy\"], \"Connection\": [\"close\"], \"Location\": [\"https://caddy.dyanim.com/\"], \"Content-Type\": []}}\r\n"]
+[122.91766, "o", "2023/12/08 20:36:08.668\t\u001b[34mINFO\u001b[0m\thttp.log.access\thandled request\t{\"request\": {\"remote_ip\": \"127.0.0.1\", \"remote_port\": \"54656\", \"client_ip\": \"127.0.0.1\", \"proto\": \"HTTP/2.0\", \"method\": \"GET\", \"host\": \"caddy.dyanim.com\", \"uri\": \"/\", \"headers\": {\"User-Agent\": [\"curl/8.4.0\"], \"Accept\": [\"*/*\"]}, \"tls\": {\"resumed\": false, \"version\": 772, \"cipher_suite\": 4865, \"proto\": \"h2\", \"server_name\": \"caddy.dyanim.com\"}}, \"bytes_read\": 0, \"user_id\": \"\", \"duration\": 0.000095921, \"size\": 39, \"status\": 200, \"resp_headers\": {\"Last-Modified\": [\"Fri, 08 Dec 2023 06:01:21 GMT\"], \"Accept-Ranges\": [\"bytes\"], \"Content-Length\": [\"39\"], \"Server\": [\"Caddy\"], \"Alt-Svc\": [\"h3=\\\":443\\\"; ma=2592000\"], \"Etag\": [\"\\\"s5c3e913\\\"\"], \"Content-Type\": [\"text/html; charset=utf-8\"]}}\r\n"]
+[122.917804, "o", "🔒 Easy HTTPS, just like that! 🎉 \r\n"]
+[122.919568, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[122.919625, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[124.611491, "o", "c"]
+[124.693115, "o", "a"]
+[124.975033, "o", "d"]
+[125.115064, "o", "d"]
+[125.175074, "o", "y"]
+[125.257195, "o", " "]
+[125.284528, "o", "s"]
+[125.337008, "o", "t"]
+[125.416983, "o", "o"]
+[125.456784, "o", "p"]
+[126.001006, "o", "\r\n\u001b[?2004l\r"]
+[126.018717, "o", "2023/12/08 20:36:11.769\t\u001b[34mINFO\u001b[0m\tadmin.api\treceived request\t{\"method\": \"POST\", \"host\": \"localhost:2019\", \"uri\": \"/stop\", \"remote_ip\": \"127.0.0.1\", \"remote_port\": \"54674\", \"headers\": {\"Accept-Encoding\":[\"gzip\"],\"Content-Length\":[\"0\"],\"Origin\":[\"http://localhost:2019\"],\"User-Agent\":[\"Go-http-client/1.1\"]}}\r\n2023/12/08 20:36:11.769\t\u001b[33mWARN\u001b[0m\tadmin.api\texiting; byeee!! 👋\r\n2023/12/08 20:36:11.769\t\u001b[34mINFO\u001b[0m\thttp\tservers shutting down with eternal grace period\r\n"]
+[126.019025, "o", "2023/12/08 20:36:11.770\t"]
+[126.019146, "o", "\u001b[34mINFO\u001b[0m\tadmin\tstopped previous server\t{\"address\": \"localhost:2019\"}\r\n2023/12/08 20:36:11.770\t\u001b[34mINFO\u001b[0m\tadmin.api\tshutdown complete\t{\"exit_code\": 0}\r\n"]
+[126.019853, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[126.019882, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[127.914833, "o", "#"]
+[128.076812, "o", " "]
+[128.216759, "o", "S"]
+[128.398782, "o", "i"]
+[128.458742, "o", "m"]
+[128.540795, "o", "p"]
+[129.264652, "o", "l"]
+[129.344639, "o", "e"]
+[129.44666, "o", " "]
+[129.486701, "o", "s"]
+[129.546692, "o", "e"]
+[129.628722, "o", "r"]
+[129.828855, "o", "v"]
+[129.930693, "o", "e"]
+[130.010635, "o", "r"]
+[130.090675, "o", "s"]
+[130.232659, "o", " "]
+[130.452593, "o", "d"]
+[130.514577, "o", "o"]
+[130.574658, "o", "n"]
+[130.736542, "o", "'"]
+[130.802566, "o", "t"]
+[130.876586, "o", " "]
+[130.936595, "o", "n"]
+[130.976606, "o", "e"]
+[131.138646, "o", "e"]
+[131.303102, "o", "d"]
+[131.360531, "o", " "]
+[131.440613, "o", "a"]
+[131.520481, "o", " "]
+[131.602522, "o", "c"]
+[131.642483, "o", "o"]
+[131.702487, "o", "n"]
+[131.82446, "o", "f"]
+[131.864429, "o", "i"]
+[132.004477, "o", "g"]
+[132.628613, "o", " "]
+[132.690519, "o", "f"]
+[132.770592, "o", "i"]
+[132.830638, "o", "l"]
+[132.910448, "o", "e"]
+[132.992546, "o", " "]
+[133.072389, "o", "a"]
+[133.132477, "o", "t"]
+[133.234558, "o", " "]
+[133.33456, "o", "a"]
+[133.434545, "o", "l"]
+[133.536357, "o", "l"]
+[133.696447, "o", ","]
+[133.878481, "o", " "]
+[133.958403, "o", "f \r"]
+[134.038379, "o", "o"]
+[134.120471, "o", "r"]
+[134.200468, "o", " "]
+[134.260459, "o", "e"]
+[134.422426, "o", "x"]
+[134.482492, "o", "a"]
+[134.502234, "o", "m"]
+[134.562286, "o", "p"]
+[134.704369, "o", "l"]
+[134.744373, "o", "e"]
+[134.906249, "o", ":"]
+[135.690466, "o", "\r\n\u001b[?2004l\r"]
+[135.690719, "o", "\u001b]0;matt@shadowfax:~/demo\u0007\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[137.706215, "o", "c"]
+[137.766078, "o", "a"]
+[137.845995, "o", "d"]
+[137.967974, "o", "d"]
+[138.048218, "o", "y"]
+[138.128172, "o", " "]
+[138.188012, "o", "f"]
+[138.249919, "o", "i"]
+[138.311015, "o", "l"]
+[138.41002, "o", "e"]
+[138.532026, "o", "-"]
+[138.612097, "o", "s"]
+[138.672016, "o", "e"]
+[138.773904, "o", "r"]
+[138.953921, "o", "v"]
+[139.075798, "o", "e"]
+[139.176036, "o", "r"]
+[139.275985, "o", " "]
+[139.418231, "o", "-"]
+[139.518111, "o", "-"]
+[139.61984, "o", "d"]
+[139.700142, "o", "o"]
+[139.77987, "o", "m"]
+[139.859809, "o", "a"]
+[139.942163, "o", "i"]
+[140.001789, "o", "n"]
+[140.061855, "o", " "]
+[140.283964, "o", "c"]
+[140.343948, "o", "a"]
+[140.465865, "o", "d"]
+[140.545665, "o", "d"]
+[140.62584, "o", "y"]
+[140.811066, "o", "."]
+[140.867779, "o", "d"]
+[141.009722, "o", "y"]
+[141.18983, "o", "a"]
+[141.311989, "o", "n"]
+[141.451925, "o", "i"]
+[141.533743, "o", "m"]
+[141.673686, "o", "."]
+[141.812927, "o", "c"]
+[141.875673, "o", "o"]
+[141.915733, "o", "m"]
+[142.277909, "o", "\r\n\u001b[?2004l\r"]
+[142.296405, "o", "2023/12/08 20:36:28.047\t\u001b[33mWARN\u001b[0m\tadmin\tadmin endpoint disabled\r\n"]
+[142.296456, "o", "2023/12/08 20:36:28.047\t\u001b[34mINFO\u001b[0m\thttp.auto_https\tserver is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS\t{\"server_name\": \"static\", \"https_port\": 443}\r\n2023/12/08 20:36:28.047\t\u001b[34mINFO\u001b[0m\thttp.auto_https\tenabling automatic HTTP->HTTPS redirects\t{\"server_name\": \"static\"}\r\n"]
+[142.296617, "o", "2023/12/08 20:36:28.047\t\u001b[34mINFO\u001b[0m\ttls.cache.maintenance\tstarted background certificate maintenance\t{\"cache\": \"0xc0006a7580\"}\r\n2023/12/08 20:36:28.047\t\u001b[34mINFO\u001b[0m\thttp\tenabling HTTP/3 listener\t{\"addr\": \":443\"}\r\n"]
+[142.296649, "o", "2023/12/08 20:36:28.047\t\u001b[34mINFO\u001b[0m\ttls\tcleaning storage unit\t{\"description\": \"FileStorage:/home/matt/.local/share/caddy\"}\r\n"]
+[142.29688, "o", "2023/12/08 20:36:28.048\t\u001b[34mINFO\u001b[0m\thttp.log\tserver running\t{\"name\": \"static\", \"protocols\": [\"h1\", \"h2\", \"h3\"]}\r\n"]
+[142.296911, "o", "2023/12/08 20:36:28.048\t\u001b[34mINFO\u001b[0m\thttp.log\tserver running\t{\"name\": \"remaining_auto_https_redirects\", \"protocols\": [\"h1\", \"h2\", \"h3\"]}\r\n2023/12/08 20:36:28.048\t\u001b[34mINFO\u001b[0m\thttp\tenabling automatic TLS certificate management\t{\"domains\": [\"caddy.dyanim.com\"]}\r\n"]
+[142.297219, "o", "2023/12/08 20:36:28.048\t\u001b[34mINFO\u001b[0m\tCaddy serving static files on :443\r\n"]
+[142.297248, "o", "2023/12/08 20:36:28.048\t\u001b[34mINFO\u001b[0m\ttls\tfinished cleaning storage units\r\n"]
+[143.627849, "o", "^C"]
+[143.628049, "o", "2023/12/08 20:36:29.379\t\u001b[34mINFO\u001b[0m\tshutting down\t{\"signal\": \"SIGINT\"}\r\n"]
+[143.628114, "o", "2023/12/08 20:36:29.379\t\u001b[33mWARN\u001b[0m\texiting; byeee!! 👋\t{\"signal\": \"SIGINT\"}\r\n2023/12/08 20:36:29.379\t\u001b[34mINFO\u001b[0m\thttp\tservers shutting down with eternal grace period\r\n"]
+[143.628389, "o", "2023/12/08 20:36:29.379\t\u001b[34mINFO\u001b[0m\tshutdown complete\t{\"signal\": \"SIGINT\", \"exit_code\": 0}\r\n"]
+[143.630027, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[143.630069, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[144.473985, "o", "c"]
+[144.533548, "o", "a"]
+[144.615607, "o", "d"]
+[144.816834, "o", "dy"]
+[144.917628, "o", " "]
+[144.977468, "o", "r"]
+[144.997534, "o", "e"]
+[145.179627, "o", "v"]
+[145.279983, "o", "e"]
+[145.35977, "o", "r"]
+[145.421648, "o", "s"]
+[145.481503, "o", "e"]
+[145.561467, "o", "-"]
+[145.7237, "o", "p"]
+[145.80681, "o", "r"]
+[145.903324, "o", "o"]
+[146.005448, "o", "x"]
+[146.085481, "o", "y"]
+[146.225392, "o", " "]
+[146.831685, "o", "-"]
+[146.951446, "o", "-"]
+[147.011409, "o", "f"]
+[147.153342, "o", "r"]
+[147.21358, "o", "o"]
+[147.273346, "o", "m"]
+[147.355379, "o", " "]
+[147.415189, "o", "c"]
+[147.475374, "o", "a"]
+[147.535318, "o", "d"]
+[147.657546, "o", "d"]
+[147.757606, "o", "y"]
+[147.999574, "o", "."]
+[148.079442, "o", "d"]
+[148.221281, "o", "y"]
+[148.30954, "o", "a"]
+[148.421331, "o", "n"]
+[148.523514, "o", "i"]
+[148.643416, "o", "m"]
+[148.765286, "o", "."]
+[148.885237, "o", "c"]
+[149.007207, "o", "o"]
+[149.067303, "o", "m"]
+[149.187228, "o", " "]
+[149.509317, "o", "-"]
+[149.631151, "o", "-"]
+[149.671092, "o", "t"]
+[149.791165, "o", "o"]
+[150.113269, "o", " "]
+[150.315397, "o", "h"]
+[150.335123, "o", "o \r"]
+[150.457052, "o", "s"]
+[150.477131, "o", "t"]
+[150.637011, "o", "1"]
+[150.858974, "o", ":"]
+[151.061023, "o", "8"]
+[151.100958, "o", "0"]
+[151.262975, "o", "8"]
+[151.324127, "o", "0"]
+[151.505157, "o", " "]
+[153.396823, "o", "-"]
+[154.082817, "o", "-"]
+[154.122702, "o", "t"]
+[154.385021, "o", "o"]
+[155.028752, "o", " "]
+[155.694948, "o", "h"]
+[155.734842, "o", "o"]
+[155.874772, "o", "s"]
+[155.894702, "o", "t"]
+[156.238755, "o", "2"]
+[156.418592, "o", ":"]
+[156.680742, "o", "8"]
+[156.72066, "o", "0"]
+[156.862611, "o", "8"]
+[156.922503, "o", "0"]
+[158.352865, "o", "\r\n\u001b[?2004l\r"]
+[158.370906, "o", "2023/12/08 20:36:44.122\t\u001b[33mWARN\u001b[0m\tadmin\tadmin endpoint disabled\r\n"]
+[158.371, "o", "2023/12/08 20:36:44.122\t\u001b[34mINFO\u001b[0m\thttp.auto_https\tserver is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS\t{\"server_name\": \"proxy\", \"https_port\": 443}\r\n2023/12/08 20:36:44.122\t\u001b[34mINFO\u001b[0m\thttp.auto_https\tenabling automatic HTTP->HTTPS redirects\t{\"server_name\": \"proxy\"}\r\n"]
+[158.371101, "o", "2023/12/08 20:36:44.122\t\u001b[34mINFO\u001b[0m\ttls.cache.maintenance\tstarted background certificate maintenance\t{\"cache\": \"0xc00062cf80\"}\r\n"]
+[158.371163, "o", "2023/12/08 20:36:44.122\t\u001b[34mINFO\u001b[0m\ttls\tcleaning storage unit\t{\"description\": \"FileStorage:/home/matt/.local/share/caddy\"}\r\n2023/12/08 20:36:44.122\t\u001b[34mINFO\u001b[0m\thttp\tenabling HTTP/3 listener\t{\"addr\": \":443\"}\r\n"]
+[158.371297, "o", "2023/12/08 20:36:44.122\t\u001b[34mINFO\u001b[0m\thttp.log\tserver running\t{\"name\": \"proxy\", \"protocols\": [\"h1\", \"h2\", \"h3\"]}\r\n2023/12/08 20:36:44.122\t\u001b[34mINFO\u001b[0m\thttp.log\tserver running\t{\"name\": \"remaining_auto_https_redirects\", \"protocols\": [\"h1\", \"h2\", \"h3\"]}\r\n2023/12/08 20:36:44.122\t\u001b[34mINFO\u001b[0m\thttp\tenabling automatic TLS certificate management\t{\"domains\": [\"caddy.dyanim.com\"]}\r\n"]
+[158.371628, "o", "Caddy proxying https://caddy.dyanim.com -> host1:8080\r\nCaddy proxying https://caddy.dyanim.com -> host2:8080\r\nLoad balancing policy: random\r\n"]
+[158.372197, "o", "2023/12/08 20:36:44.123\t\u001b[34mINFO\u001b[0m\ttls\tfinished cleaning storage units\r\n"]
+[161.214199, "o", "^C"]
+[161.214316, "o", "2023/12/08 20:36:46.965\t\u001b[34mINFO\u001b[0m\tshutting down\t{\"signal\": \"SIGINT\"}\r\n2023/12/08 20:36:46.965\t\u001b[33mWARN\u001b[0m\texiting; byeee!! 👋\t{\"signal\": \"SIGINT\"}\r\n2023/12/08 20:36:46.965\t\u001b[34mINFO\u001b[0m\thttp\tservers shutting down with eternal grace period\r\n"]
+[161.214514, "o", "2023/12/08 20:36:46.965\t\u001b[34mINFO\u001b[0m\tshutdown complete\t{\"signal\": \"SIGINT\", \"exit_code\": 0}\r\n"]
+[161.215645, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[161.215707, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[161.716414, "o", "T"]
+[161.798152, "o", "h"]
+[161.878099, "o", "e"]
+[162.100201, "o", "\b\u001b[K"]
+[162.220198, "o", "\b\u001b[K"]
+[162.342476, "o", "\b\u001b[K"]
+[162.462406, "o", "#"]
+[162.58438, "o", " "]
+[162.644388, "o", "T"]
+[162.78422, "o", "h"]
+[162.844297, "o", "e"]
+[162.926146, "o", "r"]
+[163.026197, "o", "e"]
+[163.086176, "o", "'"]
+[163.168202, "o", "s"]
+[163.268045, "o", " "]
+[163.307933, "o", "a"]
+[163.430078, "o", " "]
+[163.630125, "o", "L"]
+[163.772048, "o", "O"]
+[163.87191, "o", "T"]
+[163.971904, "o", " "]
+[164.154129, "o", "m"]
+[164.194061, "o", "o"]
+[164.275925, "o", "r"]
+[164.336033, "o", "e"]
+[164.375911, "o", " "]
+[164.578044, "o", "C"]
+[164.638058, "o", "a"]
+[164.840245, "o", "d"]
+[165.000104, "o", "d"]
+[165.040007, "o", "y"]
+[165.14225, "o", " "]
+[165.181893, "o", "c"]
+[165.242478, "o", "a"]
+[165.301927, "o", "n"]
+[165.403859, "o", " "]
+[165.443824, "o", "d"]
+[165.524037, "o", "o"]
+[165.745983, "o", "."]
+[166.7123, "o", "\r\n\u001b[?2004l\r"]
+[166.712441, "o", "\u001b]0;matt@shadowfax:~/demo\u0007\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n"]
+[166.712496, "o", "╚>\u001b[m$ "]
+[166.97374, "o", "#"]
+[167.135846, "o", " "]
+[167.35777, "o", "C"]
+[167.517736, "o", "a"]
+[167.619736, "o", "d"]
+[167.77973, "o", "d"]
+[167.901807, "o", "y"]
+[167.981688, "o", " "]
+[168.041724, "o", "r"]
+[168.081673, "o", "e"]
+[168.223711, "o", "l"]
+[168.30354, "o", "i"]
+[168.383769, "o", "e"]
+[168.445597, "o", "s"]
+[168.545754, "o", " "]
+[168.585577, "o", "o"]
+[168.645704, "o", "n"]
+[168.787608, "o", " "]
+[169.149563, "o", "s"]
+[169.251564, "o", "p"]
+[169.391664, "o", "o"]
+[169.431535, "o", "n"]
+[169.491666, "o", "s"]
+[169.593598, "o", "o"]
+[169.673533, "o", "r"]
+[169.733482, "o", "s"]
+[169.835742, "o", " "]
+[169.895782, "o", "t"]
+[169.955676, "o", "o"]
+[170.03583, "o", " "]
+[170.13798, "o", "c"]
+[170.197703, "o", "o"]
+[170.237641, "o", "n"]
+[170.399712, "o", "t"]
+[170.459568, "o", "i"]
+[170.49954, "o", "n"]
+[170.661551, "o", "u"]
+[170.721594, "o", "e"]
+[170.801459, "o", " "]
+[170.845484, "o", "b"]
+[170.963471, "o", "e"]
+[171.023427, "o", "i"]
+[171.123406, "o", "n"]
+[171.163427, "o", "g"]
+[171.265472, "o", " "]
+[171.347106, "o", "d"]
+[171.4875, "o", "e"]
+[171.587414, "o", "v"]
+[171.667574, "o", "e"]
+[171.729443, "o", "l"]
+[171.889591, "o", "o \r"]
+[171.949338, "o", "p"]
+[172.011555, "o", "e"]
+[172.171444, "o", "d"]
+[172.273491, "o", "."]
+[173.219443, "o", "\r\n\u001b[?2004l\r"]
+[173.219595, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[173.219641, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[173.359292, "o", "#"]
+[173.48123, "o", " "]
+[173.581316, "o", "I"]
+[173.723237, "o", "f"]
+[173.803195, "o", " "]
+[173.863172, "o", "y"]
+[174.025166, "o", "o"]
+[174.065164, "o", "u"]
+[174.145149, "o", "r"]
+[174.225186, "o", " "]
+[174.407175, "o", "b"]
+[174.44713, "o", "u"]
+[174.549195, "o", "s"]
+[174.629081, "o", "i"]
+[174.689252, "o", "n"]
+[174.709303, "o", "e"]
+[174.791122, "o", "s"]
+[174.93109, "o", "s"]
+[176.824982, "o", " "]
+[176.865554, "o", "u"]
+[176.964969, "o", "s"]
+[177.026949, "o", "e"]
+[177.107098, "o", "s"]
+[177.226967, "o", " "]
+[177.591326, "o", "C"]
+[177.811299, "o", "a"]
+[177.893218, "o", "d"]
+[178.013223, "o", "d"]
+[178.073008, "o", "y"]
+[178.25521, "o", ","]
+[178.315104, "o", " "]
+[178.397251, "o", "m"]
+[178.477023, "o", "a"]
+[178.597094, "o", "k"]
+[178.616926, "o", "e"]
+[178.758947, "o", " "]
+[178.778883, "o", "s"]
+[178.859124, "o", "u"]
+[178.938818, "o", "r"]
+[179.000944, "o", "e"]
+[179.080792, "o", " "]
+[179.14081, "o", "t"]
+[179.262977, "o", "o"]
+[179.351034, "o", " "]
+[179.482867, "o", "s"]
+[179.524725, "o", "p"]
+[179.744965, "o", "o"]
+[179.826847, "o", "n"]
+[180.490823, "o", "s"]
+[180.550589, "o", "o"]
+[180.632606, "o", "r \r"]
+[180.69277, "o", " "]
+[180.792744, "o", "t"]
+[180.852978, "o", "h"]
+[180.974736, "o", "e"]
+[181.034678, "o", " "]
+[181.114674, "o", "p"]
+[181.176665, "o", "r"]
+[181.296696, "o", "o"]
+[181.356491, "o", "j"]
+[181.478667, "o", "e"]
+[181.538618, "o", "c"]
+[181.740875, "o", "t"]
+[183.859367, "o", " "]
+[183.914442, "o", "t"]
+[184.016731, "o", "o"]
+[184.076479, "o", " "]
+[184.156487, "o", "r"]
+[184.196483, "o", "e"]
+[184.762568, "o", "c"]
+[184.822451, "o", "e"]
+[184.922376, "o", "i"]
+[185.00249, "o", "v"]
+[185.064331, "o", "e"]
+[185.164322, "o", " "]
+[185.224486, "o", "s"]
+[185.306421, "o", "u"]
+[185.366611, "o", "p"]
+[185.506337, "o", "p"]
+[185.546275, "o", "o"]
+[185.608461, "o", "r"]
+[185.728496, "o", "t"]
+[185.910292, "o", " "]
+[185.990377, "o", "a"]
+[186.110226, "o", "n"]
+[186.272288, "o", "d"]
+[186.372451, "o", " "]
+[186.474329, "o", "e"]
+[186.594347, "o", "n"]
+[186.694267, "o", "s"]
+[186.816268, "o", "u"]
+[186.856424, "o", "r"]
+[186.916312, "o", "e"]
+[186.998324, "o", " "]
+[187.078257, "o", "t"]
+[187.138277, "o", "h"]
+[187.23834, "o", "e"]
+[187.36487, "o", " "]
+[187.460192, "o", "p"]
+[187.542143, "o", "r"]
+[187.702312, "o", "o"]
+[187.762231, "o", "j"]
+[187.824244, "o", "e"]
+[187.904183, "o", "c"]
+[188.064147, "o", "t"]
+[188.106173, "o", " \r"]
+[188.18606, "o", "s"]
+[188.266053, "o", "t"]
+[188.368067, "o", "a"]
+[188.448063, "o", "y"]
+[188.568042, "o", "s"]
+[188.690093, "o", " "]
+[188.730088, "o", "m"]
+[188.86467, "o", "a"]
+[188.910009, "o", "i"]
+[188.991978, "o", "n"]
+[189.032068, "o", "t"]
+[189.072042, "o", "a"]
+[189.172074, "o", "i"]
+[189.234055, "o", "n"]
+[189.274034, "o", "e"]
+[189.414161, "o", "d"]
+[189.656259, "o", "!"]
+[190.018338, "o", "\r\n\u001b[?2004l\r"]
+[190.018496, "o", "\u001b]0;matt@shadowfax:~/demo\u0007"]
+[190.018593, "o", "\u001b[?2004h\r\r\n\u001b[90m╔[\u001b[96mmatt\u001b[90m@\u001b[32;1mshadowfax\u001b[90m:\u001b[m\u001b[36m~/demo\u001b[90m]\r\r\n╚>\u001b[m$ "]
+[190.724273, "o", "#"]
+[190.886041, "o", " "]
+[190.925979, "o", "T"]
+[191.046035, "o", "h"]
+[191.146157, "o", "a"]
+[191.188003, "o", "n"]
+[191.227985, "o", "k"]
+[191.308305, "o", "s"]
+[191.408241, "o", " "]
+[191.45016, "o", "f"]
+[191.550062, "o", "o"]
+[191.590101, "o", "r"]
+[191.690286, "o", " "]
+[191.812306, "o", "w"]
+[192.05426, "o", "a"]
+[192.133888, "o", "t"]
+[192.336178, "o", "c"]
+[192.375939, "o", "h"]
+[192.455995, "o", "i"]
+[192.557813, "o", "n"]
+[192.617932, "o", "g"]
+[192.677821, "o", " "]
+[192.819845, "o", ":"]
+[192.979788, "o", ")"]
diff --git a/src/resources/images/cites/aas.png b/src/resources/images/cites/aas.png
new file mode 100644
index 0000000..b16bd07
Binary files /dev/null and b/src/resources/images/cites/aas.png differ
diff --git a/src/resources/images/cites/krombholz.png b/src/resources/images/cites/krombholz.png
new file mode 100644
index 0000000..4e8a335
Binary files /dev/null and b/src/resources/images/cites/krombholz.png differ
diff --git a/src/resources/images/cites/springall.png b/src/resources/images/cites/springall.png
new file mode 100644
index 0000000..9e196a7
Binary files /dev/null and b/src/resources/images/cites/springall.png differ
diff --git a/src/resources/images/favicon.png b/src/resources/images/favicon.png
index 6e87127..b29a285 100644
Binary files a/src/resources/images/favicon.png and b/src/resources/images/favicon.png differ
diff --git a/src/resources/images/file-browser/browse-corner-dark.png b/src/resources/images/file-browser/browse-corner-dark.png
new file mode 100644
index 0000000..9f50d6e
Binary files /dev/null and b/src/resources/images/file-browser/browse-corner-dark.png differ
diff --git a/src/resources/images/file-browser/browse-corner-light.png b/src/resources/images/file-browser/browse-corner-light.png
new file mode 100644
index 0000000..bdfb465
Binary files /dev/null and b/src/resources/images/file-browser/browse-corner-light.png differ
diff --git a/src/resources/images/file-browser/browse-gallery-dark.png b/src/resources/images/file-browser/browse-gallery-dark.png
new file mode 100644
index 0000000..c1f9c2b
Binary files /dev/null and b/src/resources/images/file-browser/browse-gallery-dark.png differ
diff --git a/src/resources/images/file-browser/browse-gallery-light.png b/src/resources/images/file-browser/browse-gallery-light.png
new file mode 100644
index 0000000..542122c
Binary files /dev/null and b/src/resources/images/file-browser/browse-gallery-light.png differ
diff --git a/src/resources/images/file-browser/browse-grid-dark.png b/src/resources/images/file-browser/browse-grid-dark.png
new file mode 100644
index 0000000..deb4e79
Binary files /dev/null and b/src/resources/images/file-browser/browse-grid-dark.png differ
diff --git a/src/resources/images/file-browser/browse-grid-light.png b/src/resources/images/file-browser/browse-grid-light.png
new file mode 100644
index 0000000..22bc229
Binary files /dev/null and b/src/resources/images/file-browser/browse-grid-light.png differ
diff --git a/src/resources/images/file-browser/browse-search-dark.png b/src/resources/images/file-browser/browse-search-dark.png
new file mode 100644
index 0000000..59989bf
Binary files /dev/null and b/src/resources/images/file-browser/browse-search-dark.png differ
diff --git a/src/resources/images/file-browser/browse-search-light.png b/src/resources/images/file-browser/browse-search-light.png
new file mode 100644
index 0000000..2f6f965
Binary files /dev/null and b/src/resources/images/file-browser/browse-search-light.png differ
diff --git a/src/resources/images/file-browser/browse-size-dark.png b/src/resources/images/file-browser/browse-size-dark.png
new file mode 100644
index 0000000..0bf65ea
Binary files /dev/null and b/src/resources/images/file-browser/browse-size-dark.png differ
diff --git a/src/resources/images/file-browser/browse-size-light.png b/src/resources/images/file-browser/browse-size-light.png
new file mode 100644
index 0000000..31a81dc
Binary files /dev/null and b/src/resources/images/file-browser/browse-size-light.png differ
diff --git a/src/resources/images/file-browser/browse-themes-2.png b/src/resources/images/file-browser/browse-themes-2.png
new file mode 100644
index 0000000..3bf05ab
Binary files /dev/null and b/src/resources/images/file-browser/browse-themes-2.png differ
diff --git a/src/resources/images/file-browser/browse-themes.png b/src/resources/images/file-browser/browse-themes.png
new file mode 100644
index 0000000..e5fc70b
Binary files /dev/null and b/src/resources/images/file-browser/browse-themes.png differ
diff --git a/src/resources/images/file-browser/icons-all-dark.png b/src/resources/images/file-browser/icons-all-dark.png
new file mode 100644
index 0000000..0c0bf8c
Binary files /dev/null and b/src/resources/images/file-browser/icons-all-dark.png differ
diff --git a/src/resources/images/file-browser/icons-all-light.png b/src/resources/images/file-browser/icons-all-light.png
new file mode 100644
index 0000000..7d1c8ed
Binary files /dev/null and b/src/resources/images/file-browser/icons-all-light.png differ
diff --git a/src/resources/images/file-browser/icons1-dark.png b/src/resources/images/file-browser/icons1-dark.png
new file mode 100644
index 0000000..1e09e52
Binary files /dev/null and b/src/resources/images/file-browser/icons1-dark.png differ
diff --git a/src/resources/images/file-browser/icons1-light.png b/src/resources/images/file-browser/icons1-light.png
new file mode 100644
index 0000000..255cd63
Binary files /dev/null and b/src/resources/images/file-browser/icons1-light.png differ
diff --git a/src/resources/images/file-browser/icons2-dark.png b/src/resources/images/file-browser/icons2-dark.png
new file mode 100644
index 0000000..95a814f
Binary files /dev/null and b/src/resources/images/file-browser/icons2-dark.png differ
diff --git a/src/resources/images/file-browser/icons2-light.png b/src/resources/images/file-browser/icons2-light.png
new file mode 100644
index 0000000..6150532
Binary files /dev/null and b/src/resources/images/file-browser/icons2-light.png differ
diff --git a/src/resources/images/file-browser/icons3-dark.png b/src/resources/images/file-browser/icons3-dark.png
new file mode 100644
index 0000000..4e9979f
Binary files /dev/null and b/src/resources/images/file-browser/icons3-dark.png differ
diff --git a/src/resources/images/file-browser/icons3-light.png b/src/resources/images/file-browser/icons3-light.png
new file mode 100644
index 0000000..cf2cdbe
Binary files /dev/null and b/src/resources/images/file-browser/icons3-light.png differ
diff --git a/src/resources/images/file-browser/icons4-dark.png b/src/resources/images/file-browser/icons4-dark.png
new file mode 100644
index 0000000..601d9c7
Binary files /dev/null and b/src/resources/images/file-browser/icons4-dark.png differ
diff --git a/src/resources/images/file-browser/icons4-light.png b/src/resources/images/file-browser/icons4-light.png
new file mode 100644
index 0000000..f25d0b0
Binary files /dev/null and b/src/resources/images/file-browser/icons4-light.png differ
diff --git a/src/resources/images/home-curvey-bg.svg b/src/resources/images/home-curvey-bg.svg
new file mode 100644
index 0000000..1104854
--- /dev/null
+++ b/src/resources/images/home-curvey-bg.svg
@@ -0,0 +1,18 @@
+
+
+
diff --git a/src/resources/images/logo-dark.svg b/src/resources/images/logo-dark.svg
new file mode 100644
index 0000000..8cc183a
--- /dev/null
+++ b/src/resources/images/logo-dark.svg
@@ -0,0 +1,73 @@
+
+
+
diff --git a/src/resources/images/logo-light.svg b/src/resources/images/logo-light.svg
new file mode 100644
index 0000000..6be9b71
--- /dev/null
+++ b/src/resources/images/logo-light.svg
@@ -0,0 +1,73 @@
+
+
+
diff --git a/src/resources/images/nostalgia/get.gif b/src/resources/images/nostalgia/get.gif
new file mode 100644
index 0000000..9f832e8
Binary files /dev/null and b/src/resources/images/nostalgia/get.gif differ
diff --git a/src/resources/images/nostalgia/microsoft-ie.gif b/src/resources/images/nostalgia/microsoft-ie.gif
new file mode 100644
index 0000000..3c7cd36
Binary files /dev/null and b/src/resources/images/nostalgia/microsoft-ie.gif differ
diff --git a/src/resources/images/nostalgia/now_anim.gif b/src/resources/images/nostalgia/now_anim.gif
new file mode 100644
index 0000000..5d22554
Binary files /dev/null and b/src/resources/images/nostalgia/now_anim.gif differ
diff --git a/src/resources/images/nostalgia/sorry-under-construction.gif b/src/resources/images/nostalgia/sorry-under-construction.gif
new file mode 100644
index 0000000..93b8e90
Binary files /dev/null and b/src/resources/images/nostalgia/sorry-under-construction.gif differ
diff --git a/src/resources/images/nostalgia/under-construction-barricade.gif b/src/resources/images/nostalgia/under-construction-barricade.gif
new file mode 100644
index 0000000..57abe38
Binary files /dev/null and b/src/resources/images/nostalgia/under-construction-barricade.gif differ
diff --git a/src/resources/images/nostalgia/under-construction-blink.gif b/src/resources/images/nostalgia/under-construction-blink.gif
new file mode 100644
index 0000000..5fdca93
Binary files /dev/null and b/src/resources/images/nostalgia/under-construction-blink.gif differ
diff --git a/src/resources/images/nostalgia/under-construction-caution-tape.gif b/src/resources/images/nostalgia/under-construction-caution-tape.gif
new file mode 100644
index 0000000..58cc881
Binary files /dev/null and b/src/resources/images/nostalgia/under-construction-caution-tape.gif differ
diff --git a/src/resources/images/nostalgia/under-construction-cones.gif b/src/resources/images/nostalgia/under-construction-cones.gif
new file mode 100644
index 0000000..f1495de
Binary files /dev/null and b/src/resources/images/nostalgia/under-construction-cones.gif differ
diff --git a/src/resources/images/nostalgia/under-construction-flashing.gif b/src/resources/images/nostalgia/under-construction-flashing.gif
new file mode 100644
index 0000000..45ded23
Binary files /dev/null and b/src/resources/images/nostalgia/under-construction-flashing.gif differ
diff --git a/src/resources/images/nostalgia/under-construction-sign.gif b/src/resources/images/nostalgia/under-construction-sign.gif
new file mode 100644
index 0000000..20f0757
Binary files /dev/null and b/src/resources/images/nostalgia/under-construction-sign.gif differ
diff --git a/src/resources/images/nostalgia/valid_css3_blue.png b/src/resources/images/nostalgia/valid_css3_blue.png
new file mode 100644
index 0000000..c0a0bf4
Binary files /dev/null and b/src/resources/images/nostalgia/valid_css3_blue.png differ
diff --git a/src/resources/images/nostalgia/valid_html5_yellow.png b/src/resources/images/nostalgia/valid_html5_yellow.png
new file mode 100644
index 0000000..cb41c4e
Binary files /dev/null and b/src/resources/images/nostalgia/valid_html5_yellow.png differ
diff --git a/src/resources/images/nostalgia/white_1.gif b/src/resources/images/nostalgia/white_1.gif
new file mode 100644
index 0000000..6c4d528
Binary files /dev/null and b/src/resources/images/nostalgia/white_1.gif differ
diff --git a/src/resources/images/open-graph-square.png b/src/resources/images/open-graph-square.png
new file mode 100644
index 0000000..2b0ee98
Binary files /dev/null and b/src/resources/images/open-graph-square.png differ
diff --git a/src/resources/images/sponsors/apify.svg b/src/resources/images/sponsors/apify.svg
new file mode 100644
index 0000000..3a101fd
--- /dev/null
+++ b/src/resources/images/sponsors/apify.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/resources/images/sponsors/appcove.png b/src/resources/images/sponsors/appcove.png
new file mode 100644
index 0000000..7d313e1
Binary files /dev/null and b/src/resources/images/sponsors/appcove.png differ
diff --git a/src/resources/images/sponsors/approximated.svg b/src/resources/images/sponsors/approximated.svg
new file mode 100644
index 0000000..6f72d97
--- /dev/null
+++ b/src/resources/images/sponsors/approximated.svg
@@ -0,0 +1,7 @@
+
+
diff --git a/src/resources/images/sponsors/aryeo.svg b/src/resources/images/sponsors/aryeo.svg
new file mode 100644
index 0000000..2790f6d
--- /dev/null
+++ b/src/resources/images/sponsors/aryeo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/resources/images/sponsors/checkly.svg b/src/resources/images/sponsors/checkly.svg
new file mode 100644
index 0000000..cc5e245
--- /dev/null
+++ b/src/resources/images/sponsors/checkly.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/resources/images/sponsors/framer.svg b/src/resources/images/sponsors/framer.svg
new file mode 100644
index 0000000..1da473a
--- /dev/null
+++ b/src/resources/images/sponsors/framer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/resources/images/sponsors/fusionauth.svg b/src/resources/images/sponsors/fusionauth.svg
new file mode 100644
index 0000000..fb13e5c
--- /dev/null
+++ b/src/resources/images/sponsors/fusionauth.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/resources/images/sponsors/gitea.svg b/src/resources/images/sponsors/gitea.svg
new file mode 100644
index 0000000..66bd0bd
--- /dev/null
+++ b/src/resources/images/sponsors/gitea.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/resources/images/sponsors/iqm.svg b/src/resources/images/sponsors/iqm.svg
new file mode 100644
index 0000000..740a204
--- /dev/null
+++ b/src/resources/images/sponsors/iqm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/resources/images/sponsors/les-tilleuls-white.svg b/src/resources/images/sponsors/les-tilleuls-white.svg
new file mode 100644
index 0000000..854b7e7
--- /dev/null
+++ b/src/resources/images/sponsors/les-tilleuls-white.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/resources/images/sponsors/les-tilleuls.svg b/src/resources/images/sponsors/les-tilleuls.svg
new file mode 100644
index 0000000..249d085
--- /dev/null
+++ b/src/resources/images/sponsors/les-tilleuls.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/resources/images/sponsors/mercedes-benz.svg b/src/resources/images/sponsors/mercedes-benz.svg
new file mode 100644
index 0000000..32eac35
--- /dev/null
+++ b/src/resources/images/sponsors/mercedes-benz.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/resources/images/sponsors/niftyco.svg b/src/resources/images/sponsors/niftyco.svg
new file mode 100644
index 0000000..872cad5
--- /dev/null
+++ b/src/resources/images/sponsors/niftyco.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/resources/images/sponsors/photostructure.svg b/src/resources/images/sponsors/photostructure.svg
new file mode 100644
index 0000000..8d6d89e
--- /dev/null
+++ b/src/resources/images/sponsors/photostructure.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/resources/images/sponsors/smallstep.svg b/src/resources/images/sponsors/smallstep.svg
new file mode 100644
index 0000000..965d723
--- /dev/null
+++ b/src/resources/images/sponsors/smallstep.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/resources/images/sponsors/sourcegraph.svg b/src/resources/images/sponsors/sourcegraph.svg
new file mode 100644
index 0000000..c324c1c
--- /dev/null
+++ b/src/resources/images/sponsors/sourcegraph.svg
@@ -0,0 +1,77 @@
+
+
+
diff --git a/src/resources/images/sponsors/stripe.svg b/src/resources/images/sponsors/stripe.svg
new file mode 100644
index 0000000..cbef3c8
--- /dev/null
+++ b/src/resources/images/sponsors/stripe.svg
@@ -0,0 +1,19 @@
+
+
+
diff --git a/src/resources/images/sponsors/tailscale.svg b/src/resources/images/sponsors/tailscale.svg
new file mode 100644
index 0000000..0ec60a7
--- /dev/null
+++ b/src/resources/images/sponsors/tailscale.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/resources/images/sponsors/transistorfm.svg b/src/resources/images/sponsors/transistorfm.svg
new file mode 100644
index 0000000..9792688
--- /dev/null
+++ b/src/resources/images/sponsors/transistorfm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/resources/images/sponsors/zerossl.svg b/src/resources/images/sponsors/zerossl.svg
new file mode 100644
index 0000000..f687207
--- /dev/null
+++ b/src/resources/images/sponsors/zerossl.svg
@@ -0,0 +1,41 @@
+
+
+
diff --git a/src/resources/js/asciinema-player-2.6.1.min.js b/src/resources/js/asciinema-player-2.6.1.min.js
deleted file mode 100644
index 095e2f1..0000000
--- a/src/resources/js/asciinema-player-2.6.1.min.js
+++ /dev/null
@@ -1 +0,0 @@
-function registerAsciinemaPlayerElement(){var n=Object.create(HTMLElement.prototype);function e(n,t,e,r,l){var i={},u=n.getAttribute(t);return null!==u&&(""===u&&void 0!==r?u=r:l&&(u=l(u)),i[e]=u),i}function r(n){if(n){function t(n,t,e,r){return String.fromCodePoint(parseInt(t,16))}return n.replace(/\\u([a-z0-9]{4})/gi,t).replace(/\\x([a-z0-9]{2})/gi,t).replace(/\\e/g,"")}return n}n.createdCallback=function(){var n=this,t=function(){for(var n={},t=0;t>>0)+t+++"__"}var r=Object.defineProperty,t=Date.now()%1e9;n.prototype={set:function(n,t){var e=n[this.name];return e&&e[0]===n?e[1]=t:r(n,this.name,{value:[n,t],writable:!0}),this},get:function(n){var t;return(t=n[this.name])&&t[0]===n?t[1]:void 0},delete:function(n){var t=n[this.name];return!(!t||t[0]!==n)&&(t[0]=t[1]=void 0,!0)},has:function(n){var t=n[this.name];return!!t&&t[0]===n}},window.WeakMap=n}(),function(n){function i(){c=!1;var n=w;w=[],n.sort(function(n,t){return n.uid_-t.uid_});var r=!1;n.forEach(function(n){var e,t=n.takeRecords();(e=n).nodes_.forEach(function(n){var t=s.get(n);t&&t.forEach(function(n){n.observer===e&&n.removeTransientObservers()})}),t.length&&(n.callback_(t,n),r=!0)}),r&&i()}function h(n,t){for(var e=n;e;e=e.parentNode){var r=s.get(e);if(r)for(var l=0;l>>16&65535)*r+e*(t>>>16&65535)<<16>>>0)|0}),function(n){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=n();else if("function"==typeof define&&define.amd)define([],n);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).React=n()}}(function(){return function i(u,o,a){function s(t,n){if(!o[t]){if(!u[t]){var e="function"==typeof require&&require;if(!n&&e)return e(t,!0);if(c)return c(t,!0);var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}var l=o[t]={exports:{}};u[t][0].call(l.exports,function(n){return s(u[t][1][n]||n)},l,l.exports,i,u,o,a)}return o[t].exports}for(var c="function"==typeof require&&require,n=0;n>",e={array:t("array"),bool:t("boolean"),func:t("function"),number:t("number"),object:t("object"),string:t("string"),symbol:t("symbol"),any:n(r.thatReturnsNull),arrayOf:function(a){return n(function(n,t,e,r,l){if("function"!=typeof a)return new h("Property `"+l+"` of component `"+e+"` has invalid PropType notation inside arrayOf.");var i=n[t];if(!Array.isArray(i))return new h("Invalid "+r+" `"+l+"` of type `"+f(i)+"` supplied to `"+e+"`, expected an array.");for(var u=0;u"+h+">",a=c.removeChild(c.firstChild)}else a=o.is?s.createElement(this._currentElement.type,o.is):s.createElement(this._currentElement.type);else a=s.createElementNS(l,this._currentElement.type);I.precacheNode(this,a),this._flags|=M.hasCachedChildNodes,this._hostParent||_.setAttributeForRoot(a),this._updateDOMProperties(null,o,n);var f=E(a);this._createInitialChildren(n,o,r,f),u=f}else{var p=this._createOpenTagMarkupAndPutListeners(n,o),d=this._createContentMarkup(n,o,r);u=!d&&V[this._tag]?p+"/>":p+">"+d+""+this._currentElement.type+">"}switch(this._tag){case"input":n.getReactMountReady().enqueue(w,this),o.autoFocus&&n.getReactMountReady().enqueue(b.focusDOMComponent,this);break;case"textarea":n.getReactMountReady().enqueue(m,this),o.autoFocus&&n.getReactMountReady().enqueue(b.focusDOMComponent,this);break;case"select":case"button":o.autoFocus&&n.getReactMountReady().enqueue(b.focusDOMComponent,this);break;case"option":n.getReactMountReady().enqueue(g,this)}return u},_createOpenTagMarkupAndPutListeners:function(n,t){var e="<"+this._currentElement.type;for(var r in t)if(t.hasOwnProperty(r)){var l=t[r];if(null!=l)if(L.hasOwnProperty(r))l&&c(this,r,l,n);else{"style"===r&&(l=l&&(this._previousStyleCopy=f({},t.style)),l=p.createMarkupForStyles(l,this));var i=null;null!=this._tag&&h(this._tag,t)?U.hasOwnProperty(r)||(i=_.createMarkupForCustomAttribute(r,l)):i=_.createMarkupForProperty(r,l),i&&(e+=" "+i)}}return n.renderToStaticMarkup?e:(this._hostParent||(e+=" "+_.createMarkupForRoot()),e+=" "+_.createMarkupForID(this._domID))},_createContentMarkup:function(n,t,e){var r="",l=t.dangerouslySetInnerHTML;if(null!=l)null!=l.__html&&(r=l.__html);else{var i=F[typeof t.children]?t.children:null,u=null!=i?null:t.children;null!=i?r=S(i):null!=u&&(r=this.mountChildren(u,n,e).join(""))}return W[this._tag]&&"\n"===r.charAt(0)?"\n"+r:r},_createInitialChildren:function(n,t,e,r){var l=t.dangerouslySetInnerHTML;if(null!=l)null!=l.__html&&E.queueHTML(r,l.__html);else{var i=F[typeof t.children]?t.children:null,u=null!=i?null:t.children;if(null!=i)""!==i&&E.queueText(r,i);else if(null!=u)for(var o=this.mountChildren(u,n,e),a=0;at.end?(e=t.end,t.start):(e=t.start,t.end),l.moveToElementText(n),l.moveStart("character",e),l.setEndPoint("EndToStart",l),l.moveEnd("character",r-e),l.select()}:function(n,t){if(window.getSelection){var e=window.getSelection(),r=n[h()].length,l=Math.min(t.start,r),i=void 0===t.end?l:Math.min(t.end,r);if(!e.extend&&i/," "+i.CHECKSUM_ATTR_NAME+'="'+t+'"$&')},canReuseMarkup:function(n,t){var e=t.getAttribute(i.CHECKSUM_ATTR_NAME);return e=e&&parseInt(e,10),r(n)===e}};t.exports=i},{92:92}],60:[function(n,t,e){"use strict";function m(n){return n?n.nodeType===O?n.documentElement:n.firstChild:null}function i(n,t,e,r,l){var i;if(c.logTopLevelRenders){var u=n._currentElement.props.child.type;i="React mount: "+("string"==typeof u?u:u.displayName||u.name),console.time(i)}var o=v.mountComponent(n,e,null,a(n,t),l,0);i&&console.timeEnd(i),n._renderedComponent._topLevelWrapper=n,P._mountImageIntoNode(o,t,n,r,e)}function u(n,t,e,r){var l=w.ReactReconcileTransaction.getPooled(!e&&s.useCreateElement);l.perform(i,null,n,t,l,e,r),w.ReactReconcileTransaction.release(l)}function r(n,t,e){for(v.unmountComponent(n,e),t.nodeType===O&&(t=t.documentElement);t.lastChild;)t.removeChild(t.lastChild)}function g(n){var t=m(n);if(t){var e=p.getInstanceFromNode(t);return!(!e||!e._hostParent)}}function h(n){return n&&(1===n.nodeType||n.nodeType===O||11===n.nodeType)}function y(n){var t,e,r=(t=m(n),(e=t&&p.getInstanceFromNode(t))&&!e._hostParent?e:null);return r?r._hostContainerInfo._topLevelWrapper:null}function b(){this.rootID=M++}var E=n(112),f=n(9),l=n(11),C=n(120),o=n(25),p=(n(119),n(33)),a=n(34),s=n(36),c=n(53),_=n(57),d=(n(58),n(59)),v=n(66),j=n(70),w=n(71),I=n(130),k=n(108),x=(n(137),n(114)),A=n(116),N=(n(142),l.ID_ATTRIBUTE_NAME),T=l.ROOT_ATTRIBUTE_NAME,O=9,S={},M=1;b.prototype.isReactComponent={},b.prototype.render=function(){return this.props.child},b.isReactTopLevelWrapper=!0;var P={TopLevelWrapper:b,_instancesByReactRootID:S,scrollMonitor:function(n,t){t()},_updateRootComponent:function(n,t,e,r,l){return P.scrollMonitor(r,function(){j.enqueueElementInternal(n,t,e),l&&j.enqueueCallbackInternal(n,l)}),n},_renderNewRootComponent:function(n,t,e,r){h(t)||E("37"),o.ensureScrollValueMonitoring();var l=k(n,!1);w.batchedUpdates(u,l,t,e,r);var i=l._instance.rootID;return S[i]=l},renderSubtreeIntoContainer:function(n,t,e,r){return null!=n&&_.has(n)||E("38"),P._renderSubtreeIntoContainer(n,t,e,r)},_renderSubtreeIntoContainer:function(n,t,e,r){j.validateCallback(r,"ReactDOM.render"),C.isValidElement(t)||E("39","string"==typeof t?" Instead of passing a string like 'div', pass React.createElement('div') or .":"function"==typeof t?" Instead of passing a class like Foo, pass React.createElement(Foo) or .":null!=t&&void 0!==t.props?" This may be caused by unintentionally loading two independent copies of React.":"");var l,i=C.createElement(b,{child:t});if(n){var u=_.get(n);l=u._processChildContext(u._context)}else l=I;var o=y(e);if(o){var a=o._currentElement.props.child;if(A(a,t)){var s=o._renderedComponent.getPublicInstance(),c=r&&function(){r.call(s)};return P._updateRootComponent(o,i,l,e,c),s}P.unmountComponentAtNode(e)}var h,f=m(e),p=f&&!(!(h=f).getAttribute||!h.getAttribute(N)),d=g(e),v=p&&!o&&!d,w=P._renderNewRootComponent(i,e,v,l)._renderedComponent.getPublicInstance();return r&&r.call(w),w},render:function(n,t,e){return P._renderSubtreeIntoContainer(null,n,t,e)},unmountComponentAtNode:function(n){h(n)||E("40");var t=y(n);return t?(delete S[t._instance.rootID],w.batchedUpdates(r,t,n,!1),!0):(g(n),1===n.nodeType&&n.hasAttribute(T),!1)},_mountImageIntoNode:function(n,t,e,r,l){if(h(t)||E("41"),r){var i=m(t);if(d.canReuseMarkup(n,i))return void p.precacheNode(e,i);var u=i.getAttribute(d.CHECKSUM_ATTR_NAME);i.removeAttribute(d.CHECKSUM_ATTR_NAME);var o=i.outerHTML;i.setAttribute(d.CHECKSUM_ATTR_NAME,u);var a=n,s=function(n,t){for(var e=Math.min(n.length,t.length),r=0;r]/;t.exports=function(n){return"boolean"==typeof n||"number"==typeof n?""+n:function(n){var t=""+n,e=o.exec(t);if(!e)return t;var r,l="",i=0,u=0;for(i=e.index;i]/,a=n(93)(function(n,t){if(n.namespaceURI!==i.svg||"innerHTML"in n)n.innerHTML=t;else{(r=r||document.createElement("div")).innerHTML="";for(var e=r.firstChild;e.firstChild;)n.appendChild(e.firstChild)}});if(l.canUseDOM){var s=document.createElement("div");s.innerHTML=" ",""===s.innerHTML&&(a=function(n,t){if(n.parentNode&&n.parentNode.replaceChild(n,n),u.test(t)||"<"===t[0]&&o.test(t)){n.innerHTML=String.fromCharCode(65279)+t;var e=n.firstChild;1===e.data.length?n.removeChild(e):e.deleteData(0,1)}else n.innerHTML=t}),s=null}t.exports=a},{10:10,123:123,93:93}],115:[function(n,t,e){"use strict";var r=n(123),l=n(95),i=n(114),u=function(n,t){if(t){var e=n.firstChild;if(e&&e===n.lastChild&&3===e.nodeType)return void(e.nodeValue=t)}n.textContent=t};r.canUseDOM&&("textContent"in document.documentElement||(u=function(n,t){3!==n.nodeType?i(n,l(t)):n.nodeValue=t})),t.exports=u},{114:114,123:123,95:95}],116:[function(n,t,e){"use strict";t.exports=function(n,t){var e=null===n||!1===n,r=null===t||!1===t;if(e||r)return e==r;var l=typeof n,i=typeof t;return"string"==l||"number"==l?"string"==i||"number"==i:"object"==i&&n.type===t.type&&n.key===t.key}},{}],117:[function(n,t,e){"use strict";function w(n,t){return n&&"object"==typeof n&&null!=n.key?b.escape(n.key):t.toString(36)}var m=n(112),g=(n(119),n(48)),y=n(104),b=(n(137),n(22)),E=(n(142),"."),C=":";t.exports=function(n,t,e){return null==n?0:function n(t,e,r,l){var i=typeof t;if("undefined"!=i&&"boolean"!=i||(t=null),null===t||"string"==i||"number"==i||"object"==i&&t.$$typeof===g)return r(l,t,""===e?E+w(t,0):e),1;var u,o=0,a=""===e?E:e+C;if(Array.isArray(t))for(var s=0;s',""],a=[1,""],s=[3,""],c=[1,'"],h={"*":[1,"?","
"],area:[1,""],col:[2,""],legend:[1,""],param:[1,""],tr:[2,""],optgroup:o,option:o,caption:a,colgroup:a,tbody:a,tfoot:a,thead:a,td:s,th:s};["circle","clipPath","defs","ellipse","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","text","tspan"].forEach(function(n){h[n]=c,u[n]=!0}),t.exports=function(n){return i||l(!1),h.hasOwnProperty(n)||(n="*"),u.hasOwnProperty(n)||(i.innerHTML="*"===n?"":"<"+n+">"+n+">",u[n]=!i.firstChild),u[n]?h[n]:null}},{123:123,137:137}],134:[function(n,t,e){"use strict";t.exports=function(n){return n.Window&&n instanceof n.Window?{x:n.pageXOffset||n.document.documentElement.scrollLeft,y:n.pageYOffset||n.document.documentElement.scrollTop}:{x:n.scrollLeft,y:n.scrollTop}}},{}],135:[function(n,t,e){"use strict";var r=/([A-Z])/g;t.exports=function(n){return n.replace(r,"-$1").toLowerCase()}},{}],136:[function(n,t,e){"use strict";var r=n(135),l=/^ms-/;t.exports=function(n){return r(n).replace(l,"-ms-")}},{135:135}],137:[function(n,t,e){"use strict";t.exports=function(n,t,e,r,l,i,u,o){if(!n){var a;if(void 0===t)a=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var s=[e,r,l,i,u,o],c=0;(a=new Error(t.replace(/%s/g,function(){return s[c++]}))).name="Invariant Violation"}throw a.framesToPop=1,a}}},{}],138:[function(n,t,e){"use strict";t.exports=function(n){var t=(n?n.ownerDocument||n:document).defaultView||window;return!(!n||!("function"==typeof t.Node?n instanceof t.Node:"object"==typeof n&&"number"==typeof n.nodeType&&"string"==typeof n.nodeName))}},{}],139:[function(n,t,e){"use strict";var r=n(138);t.exports=function(n){return r(n)&&3==n.nodeType}},{138:138}],140:[function(n,t,e){"use strict";t.exports=function(t){var e={};return function(n){return e.hasOwnProperty(n)||(e[n]=t.call(this,n)),e[n]}}},{}],141:[function(n,t,e){"use strict";function i(n,t){return n===t?0!==n||0!==t||1/n==1/t:n!=n&&t!=t}var u=Object.prototype.hasOwnProperty;t.exports=function(n,t){if(i(n,t))return!0;if("object"!=typeof n||null===n||"object"!=typeof t||null===t)return!1;var e=Object.keys(n),r=Object.keys(t);if(e.length!==r.length)return!1;for(var l=0;l>",e={array:t("array"),bool:t("boolean"),func:t("function"),number:t("number"),object:t("object"),string:t("string"),symbol:t("symbol"),any:n(r.thatReturnsNull),arrayOf:function(a){return n(function(n,t,e,r,l){if("function"!=typeof a)return new h("Property `"+l+"` of component `"+e+"` has invalid PropType notation inside arrayOf.");var i=n[t];if(!Array.isArray(i))return new h("Invalid "+r+" `"+l+"` of type `"+f(i)+"` supplied to `"+e+"`, expected an array.");for(var u=0;u>10),t=u%1024+56320,e.push(n,t)),(r+1==l||16384>>0),i=0;function s(n,t,e){return n.call.apply(n.bind,arguments)}function d(t,e,n){if(!t)throw Error();if(22*this.Fc&&T(this),!0)},n.get=function(n,t){return Object.prototype.hasOwnProperty.call(this.ic,n)?this.ic[n]:t},n.set=function(n,t){Object.prototype.hasOwnProperty.call(this.ic,n)||(this.Fc++,this.ib.push(n)),this.ic[n]=t},n.addAll=function(n){if(n instanceof N){var t=n.Xc();n=n.Yc()}else t=k(n),n=I(n);for(var e=0;e>>16,n[t]&=65535,t++}function W(n,t){if(t.hc())throw Error("division by zero");if(n.hc())return F;if(n.Eb())return t.Eb()?W(n.kb(),t.kb()):W(n.kb(),t).kb();if(t.Eb())return W(n,t.kb()).kb();if(30>>0).toString(n);if((e=l).hc())return i+r;for(;i.length<6;)i="0"+i;r=""+i+r}},n.hc=function(){if(0!=this.Lc)return!1;for(var n=0;n>>16)+(H(this,l)>>>16)+(H(n,l)>>>16);r=u>>>16,i&=65535,u&=65535,e[l]=u<<16|i}return new S(e,-2147483648&e[e.length-1]?-1:0)},n.ze=function(n){return this.add(n.kb())},n.multiply=function(n){if(this.hc()||n.hc())return F;if(this.Eb())return n.Eb()?this.kb().multiply(n.kb()):this.kb().multiply(n).kb();if(n.Eb())return this.multiply(n.kb()).kb();if(this.Ue()&&n.Ue())return D(this.vd()*n.vd());for(var t=this.Ma.length+n.Ma.length,e=[],r=0;r<2*t;r++)e[r]=0;for(r=0;r>>16,u=65535&H(this,r),o=H(n,l)>>>16,a=65535&H(n,l);e[2*r+2*l]+=u*a,V(e,2*r+2*l),e[2*r+2*l+1]+=i*a,V(e,2*r+2*l+1),e[2*r+2*l+1]+=u*o,V(e,2*r+2*l+1),e[2*r+2*l+2]+=i*o,V(e,2*r+2*l+2)}for(r=0;r>5;n%=32;for(var e=this.Ma.length+t+(0>>32-n:H(this,l-t);return new S(r,this.Lc)},n.ad=function(n){var t=n>>5;n%=32;for(var e=this.Ma.length-t,r=[],l=0;l>>n|H(this,l+t+1)<<32-n:H(this,l+t);return new S(r,this.Lc)},(n=q.prototype).xc="",n.set=function(n){this.xc=""+n},n.append=function(n,t,e){if(this.xc+=String(n),null!=t)for(var r=1;r>>16&65535)*r+e*(t>>>16&65535)<<16>>>0)|0};function gt(n){return n=mt(0|n,-862048943),mt(n<<15|n>>>-15,461845907)}function _t(n,t){var e=(0|n)^(0|t);return mt(e<<13|e>>>-13,5)+-430675100|0}function jt(n,t){var e=(0|n)^t;return e=mt(e^e>>>16,-2048144789),(e=mt(e^e>>>13,-1028477387))^e>>>16}function It(n){n:for(var t=1,e=0;;){if(!(t>2)}function St(n){return n instanceof Mt}function Mt(n,t,e,r,l){this.fb=n,this.name=t,this.Zb=e,this.Oc=r,this.hb=l,this.m=2154168321,this.J=4096}(n=Mt.prototype).toString=function(){return this.Zb},n.equiv=function(n){return this.K(null,n)},n.K=function(n,t){return t instanceof Mt&&this.Zb===t.Zb},n.call=((kt=function(n,t,e){switch(arguments.length){case 2:return Ie.c(t,this);case 3:return Ie.l(t,this,e)}throw Error("Invalid arity: "+(arguments.length-1))}).c=function(n,t){return Ie.c(t,this)},kt.l=function(n,t,e){return Ie.l(t,this,e)},kt),n.apply=function(n,t){return this.call.apply(this,[this].concat(ln(t)))},n.h=function(n){return Ie.c(n,this)},n.c=function(n,t){return Ie.l(n,this,t)},n.P=function(){return this.hb},n.T=function(n,t){return new Mt(this.fb,this.name,this.Zb,this.Oc,t)},n.U=function(){var n=this.Oc;return null!=n?n:this.Oc=n=Ot(It(this.name),Nt(this.fb))},n.hd=function(){return this.name},n.jd=function(){return this.fb},n.R=function(n,t){return $n(t,this.Zb)};var Pt=function n(t){switch(arguments.length){case 1:return n.h(t);case 2:return n.c(t,arguments[1]);default:throw Error(["Invalid arity: ",Ur.h(arguments.length)].join(""))}};function Dt(n){return null!=n?131072&n.J||yt===n.Tf||!n.J&&Q(pt,n):Q(pt,n)}function Rt(n){if(null==n)return null;if(null!=n&&(8388608&n.m||yt===n.Pe))return n.S(null);if(z(n)||"string"==typeof n)return 0===n.length?null:new pe(n,0,null);if(Q(Wn,n))return qn(n);throw Error([Ur.h(n)," is not ISeqable"].join(""))}function Lt(n){return null==n?null:null!=n&&(64&n.m||yt===n.G)?n.Ia(null):null==(n=Rt(n))?null:gn(n)}function Ft(n){return null!=n?null!=n&&(64&n.m||yt===n.G)?n.bb(null):(n=Rt(n))?yn(n):Kr:Kr}function Ut(n){return null==n?null:null!=n&&(128&n.m||yt===n.Id)?n.Ka(null):Rt(Ft(n))}Pt.h=function(n){if(n instanceof Mt)return n;var t=n.indexOf("/");return t<1?Pt.c(null,n):Pt.c(n.substring(0,t),n.substring(t+1,n.length))},Pt.c=function(n,t){return new Mt(n,t,null!=n?[Ur.h(n),"/",Ur.h(t)].join(""):t,null,null)},Pt.L=2;var Bt=function n(t){switch(arguments.length){case 1:return n.h(t);case 2:return n.c(t,arguments[1]);default:for(var e=[],r=arguments.length,l=0;l>1&1431655765))+(n>>2&858993459))+(n>>4)&252645135)>>24}Sr.B=function(){return 1},Sr.h=function(n){return n},Sr.c=function(n,t){return n*t},Sr.A=function(n,t,e){return xr(Sr,n*t,e)},Sr.N=function(n){var t=Lt(n),e=Ut(n);return n=Lt(e),e=Ut(e),Sr.A(t,n,e)},Sr.L=2;var Dr,Rr,Lr,Fr,Ur=function n(t){switch(arguments.length){case 0:return n.B();case 1:return n.h(t);default:for(var e=[],r=arguments.length,l=0;l>>5<<5}function Ai(n,t,e){for(;;){if(0===t)return e;var r=Ii(n);r.o[0]=e,e=r,t-=5}}Ei.l=function(n,t,e){var r,l=Lt(t=Rt(t));return(t=Ut(t))?ke.l(n,l,Ei.l(Ie.c(n,l),t,e)):ke.l(n,l,(r=Ie.c(n,l),e.h?e.h(r):e.call(null,r)))},Ei.M=function(n,t,e,r){var l,i=Lt(t=Rt(t));return(t=Ut(t))?ke.l(n,i,Ei.M(Ie.c(n,i),t,e,r)):ke.l(n,i,(l=Ie.c(n,i),e.c?e.c(l,r):e.call(null,l,r)))},Ei.Z=function(n,t,e,r,l){var i,u=Lt(t=Rt(t));return(t=Ut(t))?ke.l(n,u,Ei.Z(Ie.c(n,u),t,e,r,l)):ke.l(n,u,(i=Ie.c(n,u),e.l?e.l(i,r,l):e.call(null,i,r,l)))},Ei.Ca=function(n,t,e,r,l,i){var u,o=Lt(t=Rt(t));return(t=Ut(t))?ke.l(n,o,Ei.Ca(Ie.c(n,o),t,e,r,l,i)):ke.l(n,o,(u=Ie.c(n,o),e.M?e.M(u,r,l,i):e.call(null,u,r,l,i)))},Ei.A=function(n,t,e,r,l,i,u){var o=Rt(t);return t=Lt(o),(o=Ut(o))?ke.l(n,t,Tl(Ei,Ie.c(n,t),o,e,r,ve([l,i,u]))):ke.l(n,t,Tl(e,Ie.c(n,t),r,l,i,ve([u])))},Ei.N=function(n){var t=Lt(n),e=Ut(n);n=Lt(e);var r=Ut(e);e=Lt(r);var l=Ut(r);r=Lt(l);var i=Ut(l);l=Lt(i);var u=Ut(i);return i=Lt(u),u=Ut(u),Ei.A(t,n,e,r,l,i,u)},Ei.L=6;function Ni(n,t){throw Error(["No item ",Ur.h(n)," in vector of length ",Ur.h(t)].join(""))}function Ti(n,t){if(t>=xi(n))return n.fa;for(var e=n.root,r=n.shift;;){if(!(0>>r&31],r=l}}var Oi,Si,Mi;function Pi(n,t,e,r,l,i){this.i=n,this.base=t,this.o=e,this.Ja=r,this.start=l,this.end=i}function Di(n,t,e){return new Pi(t,t-t%32,t>>e&31;e-=5,r=r.o[o],t=n.Z?n.Z(t,e,r,l,i):n.call(null,t,e,r,l,i),u.o[o]=t}return u}(this,this.shift,this.root,t,e),this.fa,null);if(t===this.F)return this.X(null,e);throw Error(["Index ",Ur.h(t)," out of bounds [0,",Ur.h(this.F),"]"].join(""))},n.ba=function(){return Di(this,0,this.F)},n.P=function(){return this.meta},n.W=function(){return this.F},n.fd=function(){return this.$(null,0)},n.gd=function(){return this.$(null,1)},n.Ac=function(){return 0>>e&31;if(5>>5>1<>>e&31;return 5===e?i.o[u]=l:(t=null!=(r=r.o[u])?(e-=5,n.M?n.M(t,e,r,l):n.call(null,t,e,r,l)):Ai(null,e-5,l),i.o[u]=t),i}(this,this.shift,this.root,new ji(null,this.fa)),new Fi(this.meta,this.F+1,e,r,[t],null)},n.call=((Mi=function(n,t,e){switch(arguments.length){case 2:return this.$(null,t);case 3:return this.ka(null,t,e)}throw Error("Invalid arity: "+(arguments.length-1))}).c=function(n,t){return this.$(null,t)},Mi.l=function(n,t,e){return this.ka(null,t,e)},Mi),n.apply=function(n,t){return this.call.apply(this,[this].concat(ln(t)))},n.h=function(n){return this.$(null,n)},n.c=function(n,t){return this.ka(null,n,t)};var Bi=new ji(null,[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]),Hi=new Fi(null,0,5,Bi,[],Kt);function Vi(n){var t=n.length;if(t<32)return new Fi(null,t,5,Bi,n,null);for(var e=32,r=new Fi(null,32,5,Bi,n.slice(0,32),null).Pc(null);;){if(!(e>>5>1<>>e&31;if(5===e)t=l;else{var u=r.o[i];t=null!=u?(e-=5,n.M?n.M(t,e,u,l):n.call(null,t,e,u,l)):Ai(t.root.la,e-5,l)}return r.o[i]=t,r}(this,this.shift,this.root,e)}return this.F+=1,this}throw Error("conj! after persistent!")},n.kd=function(){if(this.root.la){this.root.la=null;var n=this.F-xi(this),t=Array(n);return cr(this.fa,0,t,0,n),new Fi(null,this.F,this.shift,this.root,t,null)}throw Error("persistent! called twice")},n.Cc=function(n,t,e){if("number"==typeof t)return function(u,o,a){if(u.root.la){if(0<=o&&o>>t&31,i=n(t-5,r.o[l]);r.o[l]=i}return r}(u.shift,u.root);u.root=n}return u}if(o===u.F)return u.Dc(null,a);throw Error(["Index ",Ur.h(o)," out of bounds for TransientVector of length",Ur.h(u.F)].join(""))}throw Error("assoc! after persistent!")}(this,t,e);throw Error("TransientVector's key for assoc! must be a number.")},n.W=function(){if(this.root.la)return this.F;throw Error("count after persistent!")},n.$=function(n,t){if(this.root.la)return(0<=t&&t>>n&31);if(0==(this.na&l))return r;var i=Pr(this.na&l-1);return l=this.o[2*i],i=this.o[2*i+1],null==l?i.sc(n+5,t,e,r):_u(e,l)?i:r},n.Kb=function(n,t,e,r,l,i){var u=1<<(e>>>t&31),o=Pr(this.na&u-1);if(0==(this.na&u)){var a=Pr(this.na);if(2*a>>t&31]=Du.Kb(n,t+5,e,r,l,i),l=r=0;r<32;)0!=(this.na>>>r&1)&&(o[r]=null!=this.o[l]?Du.Kb(n,t+5,Tt(this.o[l]),this.o[l],this.o[l+1],i):this.o[l+1],l+=2),r+=1;return new Lu(n,a+1,o)}return t=Array(2*(a+4)),cr(this.o,0,t,0,2*o),t[2*o]=r,t[2*o+1]=l,cr(this.o,2*o,t,2*(o+1),2*(a-o)),i.H=!0,(n=this.Gc(n)).o=t,n.na|=u,n}if(a=this.o[2*o],u=this.o[2*o+1],null==a)return(a=u.Kb(n,t+5,e,r,l,i))===u?this:ku(this,n,2*o+1,a);if(_u(r,a))return l===u?this:ku(this,n,2*o+1,l);if(i.H=!0,i=t+5,(t=Tt(a))===e)l=new Uu(null,t,2,[a,u,r,l]);else{var s=new Cu;l=Du.Kb(n,i,t,a,u,s).Kb(n,i,e,r,l,s)}return o=(r=2*o)+1,(n=this.Gc(n)).o[r]=null,n.o[o]=l,n},n.Jb=function(n,t,e,r,l){var i=1<<(t>>>n&31),u=Pr(this.na&i-1);if(0==(this.na&i)){var o=Pr(this.na);if(16<=o){for((u=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null])[t>>>n&31]=Du.Jb(n+5,t,e,r,l),r=e=0;e<32;)0!=(this.na>>>e&1)&&(u[e]=null!=this.o[r]?Du.Jb(n+5,Tt(this.o[r]),this.o[r],this.o[r+1],l):this.o[r+1],r+=2),e+=1;return new Lu(null,o+1,u)}return n=Array(2*(o+1)),cr(this.o,0,n,0,2*u),n[2*u]=e,n[2*u+1]=r,cr(this.o,2*u,n,2*(u+1),2*(o-u)),l.H=!0,new Nu(null,this.na|i,n)}var a=this.o[2*u];if(i=this.o[2*u+1],null==a)return(o=i.Jb(n+5,t,e,r,l))===i?this:new Nu(null,this.na,ju(this.o,2*u+1,o));if(_u(e,a))return r===i?this:new Nu(null,this.na,ju(this.o,2*u+1,r));l.H=!0,l=this.na,o=this.o,n+=5;var s=Tt(a);if(s===t)e=new Uu(null,s,2,[a,i,e,r]);else{var c=new Cu;e=Du.Jb(n,s,a,i,c).Jb(n,t,e,r,c)}return u=(n=2*u)+1,(r=ln(o))[n]=null,r[u]=e,new Nu(null,l,r)},n.rd=function(n,t,e){var r=1<<(t>>>n&31);if(0==(this.na&r))return this;var l=Pr(this.na&r-1),i=this.o[2*l],u=this.o[2*l+1];return null==i?(n=u.rd(n+5,t,e))===u?this:null!=n?new Nu(null,this.na,ju(this.o,2*l+1,n)):this.na===r?null:new Nu(null,this.na^r,Iu(this.o,l)):_u(e,i)?new Nu(null,this.na^r,Iu(this.o,l)):this},n.ba=function(){return new Au(this.o,0,null,null)};var Tu,Ou,Su,Mu,Pu,Du=new Nu(null,0,[]);function Ru(n,t,e){this.o=n,this.i=t,this.Lb=e}function Lu(n,t,e){this.la=n,this.F=t,this.o=e,this.J=131072,this.m=0}function Fu(n,t,e){t*=2;for(var r=0;;){if(!(r>>n&31];return null!=l?l.sc(n+5,t,e,r):r},n.Kb=function(n,t,e,r,l,i){var u=e>>>t&31,o=this.o[u];return null==o?((n=ku(this,n,u,Du.Kb(n,t+5,e,r,l,i))).F+=1,n):(t=o.Kb(n,t+5,e,r,l,i))===o?this:ku(this,n,u,t)},n.Jb=function(n,t,e,r,l){var i=t>>>n&31,u=this.o[i];return null==u?new Lu(null,this.F+1,ju(this.o,i,Du.Jb(n+5,t,e,r,l))):(n=u.Jb(n+5,t,e,r,l))===u?this:new Lu(null,this.F,ju(this.o,i,n))},n.rd=function(n,t,e){var r=t>>>n&31,l=this.o[r];if(null==l)return this;if((n=l.rd(n+5,t,e))===l)r=this;else if(null==n)if(this.F<=8)n:{n=(l=this.o).length,t=Array(2*(this.F-1));for(var i=1,u=e=0;;){if(!(e2*this.F?(t=2*this.F,e=2*this.F+1,(n=this.Gc(n)).o[t]=r,n.o[e]=l,i.H=!0,n.F+=1,n):(e=this.o.length,t=Array(e+2),cr(this.o,0,t,0,e),t[e]=r,t[e+1]=l,i.H=!0,r=this.F+1,n=n===this.la?(this.o=t,this.F=r,this):new Uu(this.la,this.ec,r,t)):this.o[t+1]===l?this:ku(this,n,t+1,l):new Nu(n,1<<(this.ec>>>t&31),[null,this,null,null]).Kb(n,t,e,r,l,i)},n.Jb=function(n,t,e,r,l){return t===this.ec?-1===(n=Fu(this.o,this.F,e))?(n=2*this.F,t=Array(n+2),cr(this.o,0,t,0,n),t[n]=e,t[n+1]=r,l.H=!0,new Uu(null,this.ec,this.F+1,t)):Bt.c(this.o[n+1],r)?this:new Uu(null,this.ec,this.F,ju(this.o,n+1,r)):new Nu(null,1<<(this.ec>>>n&31),[null,this]).Jb(n,t,e,r,l)},n.rd=function(n,t,e){return-1===(n=Fu(this.o,this.F,e))?this:1===this.F?null:new Uu(null,this.ec,this.F-1,Iu(this.o,Mr(n)))},n.ba=function(){return new Au(this.o,0,null,null)},(n=Bu.prototype).toString=function(){return wt(this)},n.equiv=function(n){return this.K(null,n)},n.indexOf=((Tu=function(n,t){switch(arguments.length){case 1:return ce(this,n,0);case 2:return ce(this,n,t)}throw Error("Invalid arity: "+(arguments.length-1))}).h=function(n){return ce(this,n,0)},Tu.c=function(n,t){return ce(this,n,t)},Tu),n.lastIndexOf=((Ou=function(n,t){switch(arguments.length){case 1:return Hu.call(this,n);case 2:return he(this,n,t)}throw Error("Invalid arity: "+(arguments.length-1))}).h=Hu,Ou.c=function(n,t){return he(this,n,t)},Ou),n.P=function(){return this.meta},n.Ka=function(){return null==this.s?Vu(this.Mb,this.i+2,null):Vu(this.Mb,this.i,Ut(this.s))},n.U=function(){var n=this.w;return null!=n?n:this.w=n=qt(this)},n.K=function(n,t){return Br(this,t)},n.oa=function(){return Rn(Kr,this.meta)},n.Fa=function(n,t){return Cr(t,this)},n.Ga=function(n,t,e){return _r(t,e,this)},n.Ia=function(){return null==this.s?new Fi(null,2,5,Bi,[this.Mb[this.i],this.Mb[this.i+1]],null):Lt(this.s)},n.bb=function(){var n=null==this.s?Vu(this.Mb,this.i+2,null):Vu(this.Mb,this.i,Ut(this.s));return null!=n?n:Kr},n.S=function(){return this},n.T=function(n,t){return new Bu(t,this.Mb,this.i,this.s,this.w)},n.X=function(n,t){return Qr(t,this)},Bu.prototype[rn]=function(){return Vt(this)},(n=Wu.prototype).toString=function(){return wt(this)},n.equiv=function(n){return this.K(null,n)},n.indexOf=((Su=function(n,t){switch(arguments.length){case 1:return ce(this,n,0);case 2:return ce(this,n,t)}throw Error("Invalid arity: "+(arguments.length-1))}).h=function(n){return ce(this,n,0)},Su.c=function(n,t){return ce(this,n,t)},Su),n.lastIndexOf=((Mu=function(n,t){switch(arguments.length){case 1:return qu.call(this,n);case 2:return he(this,n,t)}throw Error("Invalid arity: "+(arguments.length-1))}).h=qu,Mu.c=function(n,t){return he(this,n,t)},Mu),n.P=function(){return this.meta},n.Ka=function(){return Ku(this.Mb,this.i,Ut(this.s))},n.U=function(){var n=this.w;return null!=n?n:this.w=n=qt(this)},n.K=function(n,t){return Br(this,t)},n.oa=function(){return Rn(Kr,this.meta)},n.Fa=function(n,t){return Cr(t,this)},n.Ga=function(n,t,e){return _r(t,e,this)},n.Ia=function(){return Lt(this.s)},n.bb=function(){var n=Ku(this.Mb,this.i,Ut(this.s));return null!=n?n:Kr},n.S=function(){return this},n.T=function(n,t){return new Wu(t,this.Mb,this.i,this.s,this.w)},n.X=function(n,t){return Qr(t,this)},Wu.prototype[rn]=function(){return Vt(this)},Gu.prototype.ja=function(){return!this.xe||this.bf.ja()},Gu.prototype.next=function(){return this.xe?this.bf.next():(this.xe=!0,new Fi(null,2,5,Bi,[null,this.eb],null))},Gu.prototype.remove=function(){return Error("Unsupported operation")},(n=Yu.prototype).toString=function(){return wt(this)},n.equiv=function(n){return this.K(null,n)},n.keys=function(){return Vt(So(this))},n.entries=function(){return new hu(Rt(Rt(this)))},n.values=function(){return Vt(Ro(this))},n.has=function(n){return wr(this,n)},n.get=function(n,t){return this.I(null,n,t)},n.forEach=function(n){for(var t=Rt(this),e=null,r=0,l=0;;)if(l(n.h?n.h(e):n.call(null,e))?t:e},ea.A=function(e,n,t,r){return xr(function(n,t){return ea.l(e,n,t)},ea.l(e,n,t),r)},ea.N=function(n){var t=Lt(n),e=Ut(n);n=Lt(e);var r=Ut(e);return e=Lt(r),r=Ut(r),ea.A(t,n,e,r)},ea.L=3,la.prototype.ja=function(){return 0this.end},la.prototype.next=function(){var n=this.i;return this.i+=this.step,n},(n=ia.prototype).toString=function(){return wt(this)},n.equiv=function(n){return this.K(null,n)},n.indexOf=((na=function(n,t){switch(arguments.length){case 1:return ce(this,n,0);case 2:return ce(this,n,t)}throw Error("Invalid arity: "+(arguments.length-1))}).h=function(n){return ce(this,n,0)},na.c=function(n,t){return ce(this,n,t)},na),n.lastIndexOf=((ta=function(n,t){switch(arguments.length){case 1:return ua.call(this,n);case 2:return he(this,n,t)}throw Error("Invalid arity: "+(arguments.length-1))}).h=ua,ta.c=function(n,t){return he(this,n,t)},ta),n.$=function(n,t){if(0<=t&&tthis.end&&0===this.step)return this.start;throw Error("Index out of bounds")},n.ka=function(n,t,e){return 0<=t&&tthis.end&&0===this.step?this.start:e},n.ba=function(){return new la(this.start,this.end,this.step)},n.P=function(){return this.meta},n.Ka=function(){return 0this.end?new ia(this.meta,this.start+this.step,this.end,this.step,null):null},n.W=function(){return Ct(this.S(null))?0:Math.ceil((this.end-this.start)/this.step)},n.U=function(){var n=this.w;return null!=n?n:this.w=n=qt(this)},n.K=function(n,t){return Br(this,t)},n.oa=function(){return Rn(Kr,this.meta)},n.Fa=function(n,t){return re(this,t)},n.Ga=function(n,t,e){for(n=this.start;;){if(!(0this.end))return e;if(ne(e=t.c?t.c(e,n):t.call(null,e,n)))return Mn(e);n+=this.step}},n.Ia=function(){return null==this.S(null)?null:this.start},n.bb=function(){return null!=this.S(null)?new ia(this.meta,this.start+this.step,this.end,this.step,null):Kr},n.S=function(){return 0this.end?this:null:this.start===this.end?null:this},n.T=function(n,t){return new ia(t,this.start,this.end,this.step,this.w)},n.X=function(n,t){return Qr(t,this)},ia.prototype[rn]=function(){return Vt(this)};var da={'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t"};function va(t,n,e){if(null==t)return $n(n,"nil");var r,l,i,u,o,a;if(r=e,l=t,((i=(i=pr(Ie.c(r,Gs)))&&null!=l&&!!(131072&l.m||yt===l.tf))?null!=nr(l):i)&&($n(n,"^"),wa(nr(t),n,e),$n(n," ")),t.qc)return t.Ec(t,n,e);if(null!=t&&(2147483648&t.m||yt===t.ma))return t.R(null,n,e);if(!0===t||!1===t)return $n(n,""+Ur.h(t));if("number"==typeof t)return $n(n,isNaN(t)?"##NaN":t===Number.POSITIVE_INFINITY?"##Inf":t===Number.NEGATIVE_INFINITY?"##-Inf":""+Ur.h(t));if(null!=t&&t.constructor===Object)return $n(n,"#js "),ya(ui.c(function(n){return new Fi(null,2,5,Bi,[null!=ha(/[A-Za-z_\*\+\?!\-'][\w\*\+\?!\-']*/,n)?ol.h(n):n,t[n]],null)},k(t)),n,e);if(z(t))return fa(n,wa,"#js ["," ","]",e,t);if(c(t))return bt(of.h(e))?$n(n,(u=t,[Ur.h('"'),Ur.h(u.replace(RegExp('[\\\\"\b\f\n\r\t]',"g"),function(n){return da[n]})),Ur.h('"')].join(""))):$n(n,t);if(f(t)){var s=t.name;return pa(n,ve(["#object[",e=bt(null==s||/^[\s\xa0]*$/.test(s))?"Function":s,"","]"]))}return t instanceof Date?(e=function(n,t){for(var e=""+Ur.h(n);;){if(!(Ce(e)js",t)};function _a(n){return(null!=n?yt===n.nf||!n.Tc&&Q(Ea,n):Q(Ea,n))?Ca(n):"string"==typeof n||"number"==typeof n||n instanceof nl||n instanceof Mt?ja(n):ma(ve([n]))}var ja=function n(t){if(null==t)return null;if(null!=t?yt===t.nf||!t.Tc&&Q(Ea,t):Q(Ea,t))return Ca(t);if(t instanceof nl)return Qo(t);if(t instanceof Mt)return""+Ur.h(t);if(ur(t)){var e={};t=Rt(t);for(var r=null,l=0,i=0;;)if(iclj",t)};function xa(n){var t,e=ve([rd,!0]),r=null!=e&&(64&e.m||yt===e.G)?xl(jo,e):e,l=Ie.c(r,rd);return t=bt(l)?ol:Ur,function s(c){return(null!=c?yt===c.lf||!c.Tc&&Q(Ia,c):Q(Ia,c))?ka(c,xl(No,e)):fr(c)?ca(ui.c(s,c)):rr(c)?mi.c(Ee(c),ui.c(s,c)):z(c)?Wi(ui.c(s,c)):nn(c)===Object?mi.c(gu,(n=t,function u(o){return new al(null,(a=n,function(){for(;;){var n=Rt(o);if(n){if(sr(n)){var t=st(n),e=Ce(t),r=fl(e);n:for(var l=0;;){if(!(l ",Ur.h(e)," and ",Ur.h(Lt(r)),", and neither is preferred"].join(""));return r}return n},null,Mn(t)),h=((s=null==c)&&(s=(s=Mn(t)).h?s.h(a):s.call(null,a)),bt(s)?new Fi(null,2,5,Bi,[a,s],null):c);return bt(h)?Bt.c(Mn(r),Mn(u))?(li.M(e,ke,i,ge(h)),ge(h)):(Ma(e,t,r,u),n.Ha?n.Ha(l,i,u,t,o,e,r,a):n.call(null,l,i,u,t,o,e,r,a)):null};function Fa(n,t){throw Error(["No method in multimethod '",Ur.h(n),"' for dispatch value: ",Ur.h(t)].join(""))}function Ua(n,t,e,r,l,i,u,o){this.name=n,this.D=t,this.vf=e,this.Rd=r,this.Vd=l,this.Kf=i,this.Ud=u,this.Ed=o,this.m=4194305,this.J=4352}function Ba(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y,b,E){var C=Tl((n=this).D,t,e,r,l,ve([i,u,o,a,s,c,h,f,p,d,v,w,m,g,y,b,E])),_=ss(this,C);return bt(_)||Fa(n.name,C),Tl(_,t,e,r,l,ve([i,u,o,a,s,c,h,f,p,d,v,w,m,g,y,b,E]))}function Ha(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y,b){var E=(n=this).D.Xa?n.D.Xa(t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y,b):n.D.call(null,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y,b),C=ss(this,E);return bt(C)||Fa(n.name,E),C.Xa?C.Xa(t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y,b):C.call(null,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y,b)}function Va(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y){var b=(n=this).D.Wa?n.D.Wa(t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y):n.D.call(null,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y),E=ss(this,b);return bt(E)||Fa(n.name,b),E.Wa?E.Wa(t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y):E.call(null,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y)}function Wa(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g){var y=(n=this).D.Va?n.D.Va(t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g):n.D.call(null,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g),b=ss(this,y);return bt(b)||Fa(n.name,y),b.Va?b.Va(t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g):b.call(null,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g)}function qa(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m){var g=(n=this).D.Ua?n.D.Ua(t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m):n.D.call(null,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m),y=ss(this,g);return bt(y)||Fa(n.name,g),y.Ua?y.Ua(t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m):y.call(null,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m)}function Ka(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w){var m=(n=this).D.Ta?n.D.Ta(t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w):n.D.call(null,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w),g=ss(this,m);return bt(g)||Fa(n.name,m),g.Ta?g.Ta(t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w):g.call(null,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w)}function Ga(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v){var w=(n=this).D.Sa?n.D.Sa(t,e,r,l,i,u,o,a,s,c,h,f,p,d,v):n.D.call(null,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v),m=ss(this,w);return bt(m)||Fa(n.name,w),m.Sa?m.Sa(t,e,r,l,i,u,o,a,s,c,h,f,p,d,v):m.call(null,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v)}function Ya(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d){var v=(n=this).D.Ra?n.D.Ra(t,e,r,l,i,u,o,a,s,c,h,f,p,d):n.D.call(null,t,e,r,l,i,u,o,a,s,c,h,f,p,d),w=ss(this,v);return bt(w)||Fa(n.name,v),w.Ra?w.Ra(t,e,r,l,i,u,o,a,s,c,h,f,p,d):w.call(null,t,e,r,l,i,u,o,a,s,c,h,f,p,d)}function Xa(n,t,e,r,l,i,u,o,a,s,c,h,f,p){var d=(n=this).D.Qa?n.D.Qa(t,e,r,l,i,u,o,a,s,c,h,f,p):n.D.call(null,t,e,r,l,i,u,o,a,s,c,h,f,p),v=ss(this,d);return bt(v)||Fa(n.name,d),v.Qa?v.Qa(t,e,r,l,i,u,o,a,s,c,h,f,p):v.call(null,t,e,r,l,i,u,o,a,s,c,h,f,p)}function Ja(n,t,e,r,l,i,u,o,a,s,c,h,f){var p=(n=this).D.Pa?n.D.Pa(t,e,r,l,i,u,o,a,s,c,h,f):n.D.call(null,t,e,r,l,i,u,o,a,s,c,h,f),d=ss(this,p);return bt(d)||Fa(n.name,p),d.Pa?d.Pa(t,e,r,l,i,u,o,a,s,c,h,f):d.call(null,t,e,r,l,i,u,o,a,s,c,h,f)}function $a(n,t,e,r,l,i,u,o,a,s,c,h){var f=(n=this).D.Oa?n.D.Oa(t,e,r,l,i,u,o,a,s,c,h):n.D.call(null,t,e,r,l,i,u,o,a,s,c,h),p=ss(this,f);return bt(p)||Fa(n.name,f),p.Oa?p.Oa(t,e,r,l,i,u,o,a,s,c,h):p.call(null,t,e,r,l,i,u,o,a,s,c,h)}function za(n,t,e,r,l,i,u,o,a,s,c){var h=(n=this).D.Na?n.D.Na(t,e,r,l,i,u,o,a,s,c):n.D.call(null,t,e,r,l,i,u,o,a,s,c),f=ss(this,h);return bt(f)||Fa(n.name,h),f.Na?f.Na(t,e,r,l,i,u,o,a,s,c):f.call(null,t,e,r,l,i,u,o,a,s,c)}function Za(n,t,e,r,l,i,u,o,a,s){var c=(n=this).D.Za?n.D.Za(t,e,r,l,i,u,o,a,s):n.D.call(null,t,e,r,l,i,u,o,a,s),h=ss(this,c);return bt(h)||Fa(n.name,c),h.Za?h.Za(t,e,r,l,i,u,o,a,s):h.call(null,t,e,r,l,i,u,o,a,s)}function Qa(n,t,e,r,l,i,u,o,a){var s=(n=this).D.Ha?n.D.Ha(t,e,r,l,i,u,o,a):n.D.call(null,t,e,r,l,i,u,o,a),c=ss(this,s);return bt(c)||Fa(n.name,s),c.Ha?c.Ha(t,e,r,l,i,u,o,a):c.call(null,t,e,r,l,i,u,o,a)}function ns(n,t,e,r,l,i,u,o){var a=(n=this).D.Ya?n.D.Ya(t,e,r,l,i,u,o):n.D.call(null,t,e,r,l,i,u,o),s=ss(this,a);return bt(s)||Fa(n.name,a),s.Ya?s.Ya(t,e,r,l,i,u,o):s.call(null,t,e,r,l,i,u,o)}function ts(n,t,e,r,l,i,u){var o=(n=this).D.Ca?n.D.Ca(t,e,r,l,i,u):n.D.call(null,t,e,r,l,i,u),a=ss(this,o);return bt(a)||Fa(n.name,o),a.Ca?a.Ca(t,e,r,l,i,u):a.call(null,t,e,r,l,i,u)}function es(n,t,e,r,l,i){var u=(n=this).D.Z?n.D.Z(t,e,r,l,i):n.D.call(null,t,e,r,l,i),o=ss(this,u);return bt(o)||Fa(n.name,u),o.Z?o.Z(t,e,r,l,i):o.call(null,t,e,r,l,i)}function rs(n,t,e,r,l){var i=(n=this).D.M?n.D.M(t,e,r,l):n.D.call(null,t,e,r,l),u=ss(this,i);return bt(u)||Fa(n.name,i),u.M?u.M(t,e,r,l):u.call(null,t,e,r,l)}function ls(n,t,e,r){var l=(n=this).D.l?n.D.l(t,e,r):n.D.call(null,t,e,r),i=ss(this,l);return bt(i)||Fa(n.name,l),i.l?i.l(t,e,r):i.call(null,t,e,r)}function is(n,t,e){var r=(n=this).D.c?n.D.c(t,e):n.D.call(null,t,e),l=ss(this,r);return bt(l)||Fa(n.name,r),l.c?l.c(t,e):l.call(null,t,e)}function us(n,t){var e=(n=this).D.h?n.D.h(t):n.D.call(null,t),r=ss(this,e);return bt(r)||Fa(n.name,e),r.h?r.h(t):r.call(null,t)}function os(n){var t=(n=this).D.B?n.D.B():n.D.call(null),e=ss(this,t);return bt(e)||Fa(n.name,t),e.B?e.B():e.call(null)}function as(n,t){var e=w_;li.M(e.Vd,ke,n,t),Ma(e.Ud,e.Vd,e.Ed,e.Rd)}function ss(n,t){Bt.c(Mn(n.Ed),Mn(n.Rd))||Ma(n.Ud,n.Vd,n.Ed,n.Rd);var e=Mn(n.Ud);return bt(e=e.h?e.h(t):e.call(null,t))?e:La(n.name,t,n.Rd,n.Vd,n.Kf,n.Ud,n.Ed,n.vf)}function cs(n,t){this.Mc=n,this.w=t,this.m=2153775104,this.J=2048}(n=Ua.prototype).call=((Ra=function(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y,b,E){switch(arguments.length){case 1:return os.call(this,n);case 2:return us.call(this,n,t);case 3:return is.call(this,n,t,e);case 4:return ls.call(this,n,t,e,r);case 5:return rs.call(this,n,t,e,r,l);case 6:return es.call(this,n,t,e,r,l,i);case 7:return ts.call(this,n,t,e,r,l,i,u);case 8:return ns.call(this,n,t,e,r,l,i,u,o);case 9:return Qa.call(this,n,t,e,r,l,i,u,o,a);case 10:return Za.call(this,n,t,e,r,l,i,u,o,a,s);case 11:return za.call(this,n,t,e,r,l,i,u,o,a,s,c);case 12:return $a.call(this,n,t,e,r,l,i,u,o,a,s,c,h);case 13:return Ja.call(this,n,t,e,r,l,i,u,o,a,s,c,h,f);case 14:return Xa.call(this,n,t,e,r,l,i,u,o,a,s,c,h,f,p);case 15:return Ya.call(this,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d);case 16:return Ga.call(this,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v);case 17:return Ka.call(this,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w);case 18:return qa.call(this,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m);case 19:return Wa.call(this,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g);case 20:return Va.call(this,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y);case 21:return Ha.call(this,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y,b);case 22:return Ba.call(this,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y,b,E)}throw Error("Invalid arity: "+(arguments.length-1))}).h=os,Ra.c=us,Ra.l=is,Ra.M=ls,Ra.Z=rs,Ra.Ca=es,Ra.Ya=ts,Ra.Ha=ns,Ra.Za=Qa,Ra.Na=Za,Ra.Oa=za,Ra.Pa=$a,Ra.Qa=Ja,Ra.Ra=Xa,Ra.Sa=Ya,Ra.Ta=Ga,Ra.Ua=Ka,Ra.Va=qa,Ra.Wa=Wa,Ra.Xa=Va,Ra.he=Ha,Ra.qf=Ba,Ra),n.apply=function(n,t){return this.call.apply(this,[this].concat(ln(t)))},n.B=function(){var n=this.D.B?this.D.B():this.D.call(null),t=ss(this,n);return bt(t)||Fa(this.name,n),t.B?t.B():t.call(null)},n.h=function(n){var t=this.D.h?this.D.h(n):this.D.call(null,n),e=ss(this,t);return bt(e)||Fa(this.name,t),e.h?e.h(n):e.call(null,n)},n.c=function(n,t){var e=this.D.c?this.D.c(n,t):this.D.call(null,n,t),r=ss(this,e);return bt(r)||Fa(this.name,e),r.c?r.c(n,t):r.call(null,n,t)},n.l=function(n,t,e){var r=this.D.l?this.D.l(n,t,e):this.D.call(null,n,t,e),l=ss(this,r);return bt(l)||Fa(this.name,r),l.l?l.l(n,t,e):l.call(null,n,t,e)},n.M=function(n,t,e,r){var l=this.D.M?this.D.M(n,t,e,r):this.D.call(null,n,t,e,r),i=ss(this,l);return bt(i)||Fa(this.name,l),i.M?i.M(n,t,e,r):i.call(null,n,t,e,r)},n.Z=function(n,t,e,r,l){var i=this.D.Z?this.D.Z(n,t,e,r,l):this.D.call(null,n,t,e,r,l),u=ss(this,i);return bt(u)||Fa(this.name,i),u.Z?u.Z(n,t,e,r,l):u.call(null,n,t,e,r,l)},n.Ca=function(n,t,e,r,l,i){var u=this.D.Ca?this.D.Ca(n,t,e,r,l,i):this.D.call(null,n,t,e,r,l,i),o=ss(this,u);return bt(o)||Fa(this.name,u),o.Ca?o.Ca(n,t,e,r,l,i):o.call(null,n,t,e,r,l,i)},n.Ya=function(n,t,e,r,l,i,u){var o=this.D.Ya?this.D.Ya(n,t,e,r,l,i,u):this.D.call(null,n,t,e,r,l,i,u),a=ss(this,o);return bt(a)||Fa(this.name,o),a.Ya?a.Ya(n,t,e,r,l,i,u):a.call(null,n,t,e,r,l,i,u)},n.Ha=function(n,t,e,r,l,i,u,o){var a=this.D.Ha?this.D.Ha(n,t,e,r,l,i,u,o):this.D.call(null,n,t,e,r,l,i,u,o),s=ss(this,a);return bt(s)||Fa(this.name,a),s.Ha?s.Ha(n,t,e,r,l,i,u,o):s.call(null,n,t,e,r,l,i,u,o)},n.Za=function(n,t,e,r,l,i,u,o,a){var s=this.D.Za?this.D.Za(n,t,e,r,l,i,u,o,a):this.D.call(null,n,t,e,r,l,i,u,o,a),c=ss(this,s);return bt(c)||Fa(this.name,s),c.Za?c.Za(n,t,e,r,l,i,u,o,a):c.call(null,n,t,e,r,l,i,u,o,a)},n.Na=function(n,t,e,r,l,i,u,o,a,s){var c=this.D.Na?this.D.Na(n,t,e,r,l,i,u,o,a,s):this.D.call(null,n,t,e,r,l,i,u,o,a,s),h=ss(this,c);return bt(h)||Fa(this.name,c),h.Na?h.Na(n,t,e,r,l,i,u,o,a,s):h.call(null,n,t,e,r,l,i,u,o,a,s)},n.Oa=function(n,t,e,r,l,i,u,o,a,s,c){var h=this.D.Oa?this.D.Oa(n,t,e,r,l,i,u,o,a,s,c):this.D.call(null,n,t,e,r,l,i,u,o,a,s,c),f=ss(this,h);return bt(f)||Fa(this.name,h),f.Oa?f.Oa(n,t,e,r,l,i,u,o,a,s,c):f.call(null,n,t,e,r,l,i,u,o,a,s,c)},n.Pa=function(n,t,e,r,l,i,u,o,a,s,c,h){var f=this.D.Pa?this.D.Pa(n,t,e,r,l,i,u,o,a,s,c,h):this.D.call(null,n,t,e,r,l,i,u,o,a,s,c,h),p=ss(this,f);return bt(p)||Fa(this.name,f),p.Pa?p.Pa(n,t,e,r,l,i,u,o,a,s,c,h):p.call(null,n,t,e,r,l,i,u,o,a,s,c,h)},n.Qa=function(n,t,e,r,l,i,u,o,a,s,c,h,f){var p=this.D.Qa?this.D.Qa(n,t,e,r,l,i,u,o,a,s,c,h,f):this.D.call(null,n,t,e,r,l,i,u,o,a,s,c,h,f),d=ss(this,p);return bt(d)||Fa(this.name,p),d.Qa?d.Qa(n,t,e,r,l,i,u,o,a,s,c,h,f):d.call(null,n,t,e,r,l,i,u,o,a,s,c,h,f)},n.Ra=function(n,t,e,r,l,i,u,o,a,s,c,h,f,p){var d=this.D.Ra?this.D.Ra(n,t,e,r,l,i,u,o,a,s,c,h,f,p):this.D.call(null,n,t,e,r,l,i,u,o,a,s,c,h,f,p),v=ss(this,d);return bt(v)||Fa(this.name,d),v.Ra?v.Ra(n,t,e,r,l,i,u,o,a,s,c,h,f,p):v.call(null,n,t,e,r,l,i,u,o,a,s,c,h,f,p)},n.Sa=function(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d){var v=this.D.Sa?this.D.Sa(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d):this.D.call(null,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d),w=ss(this,v);return bt(w)||Fa(this.name,v),w.Sa?w.Sa(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d):w.call(null,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d)},n.Ta=function(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v){var w=this.D.Ta?this.D.Ta(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v):this.D.call(null,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v),m=ss(this,w);return bt(m)||Fa(this.name,w),m.Ta?m.Ta(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v):m.call(null,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v)},n.Ua=function(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w){var m=this.D.Ua?this.D.Ua(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w):this.D.call(null,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w),g=ss(this,m);return bt(g)||Fa(this.name,m),g.Ua?g.Ua(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w):g.call(null,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w)},n.Va=function(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m){var g=this.D.Va?this.D.Va(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m):this.D.call(null,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m),y=ss(this,g);return bt(y)||Fa(this.name,g),y.Va?y.Va(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m):y.call(null,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m)},n.Wa=function(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g){var y=this.D.Wa?this.D.Wa(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g):this.D.call(null,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g),b=ss(this,y);return bt(b)||Fa(this.name,y),b.Wa?b.Wa(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g):b.call(null,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g)},n.Xa=function(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y){var b=this.D.Xa?this.D.Xa(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y):this.D.call(null,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y),E=ss(this,b);return bt(E)||Fa(this.name,b),E.Xa?E.Xa(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y):E.call(null,n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y)},n.he=function(n,t,e,r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y,b){var E=Tl(this.D,n,t,e,r,ve([l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y,b])),C=ss(this,E);return bt(C)||Fa(this.name,E),Tl(C,n,t,e,r,ve([l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y,b]))},n.hd=function(){return function n(t){if(null!=t&&null!=t.hd)return t.hd(t);var e=n[h(null==t?null:t)];if(null!=e)return e.h?e.h(t):e.call(null,t);if(null!=(e=n._))return e.h?e.h(t):e.call(null,t);throw tn("INamed.-name",t)}(this.name)},n.jd=function(){return function n(t){if(null!=t&&null!=t.jd)return t.jd(t);var e=n[h(null==t?null:t)];if(null!=e)return e.h?e.h(t):e.call(null,t);if(null!=(e=n._))return e.h?e.h(t):e.call(null,t);throw tn("INamed.-namespace",t)}(this.name)},n.U=function(){return e(this)},(n=cs.prototype).toString=function(){return this.Mc},n.equiv=function(n){return this.K(null,n)},n.K=function(n,t){return t instanceof cs&&this.Mc===t.Mc},n.R=function(n,t){return $n(t,['#uuid "',Ur.h(this.Mc),'"'].join(""))},n.U=function(){return null==this.w&&(this.w=Tt(this.Mc)),this.w},n.cc=function(n,t){return j(this.Mc,t.Mc)};var hs=new nl(null,"hook","hook",750265408),fs=new nl(null,"y","y",-1757859776),ps=new nl(null,"setCurrentTime","setCurrentTime",-623552),ds=new nl(null,"span.gutter","span.gutter",-700214016),vs=new Mt(null,"&","&",-2144855648,null),ws=new nl(null,"dcs-param","dcs-param",-971011648),ms=new nl(null,"path","path",-188191168),gs=new nl(null,"escape","escape",-991601952),ys=new Mt(null,"meta34617","meta34617",-1789836320,null),bs=new nl(null,"force-load-ch","force-load-ch",-1689229247),Es=new Mt("schema.core","Any","schema.core/Any",-1891898271,null),Cs=new nl(null,"tab-index","tab-index",895755393),_s=new nl(null,"bold","bold",-116809535),js=new nl(null,"authorImgURL","authorImgURL",-1171541759),Is=new nl(null,"schema","schema",-1582001791),ks=new Mt(null,"optional-key","optional-key",988406145,null),xs=new nl(null,"char-attrs","char-attrs",-1444091455),As=new nl(null,"esc-dispatch","esc-dispatch",17832481),Ns=new nl(null,"idle_time_limit","idle_time_limit",-1837919647),Ts=new nl(null,"auto-wrap-mode","auto-wrap-mode",-2049555583),Os=new nl(null,"preload?","preload?",445442977),Ss=new nl(null,"on-set","on-set",-140953470),Ms=new nl(null,"current-time","current-time",-1609407134),Ps=new nl(null,"span.progressbar","span.progressbar",766750210),Ds=new nl(null,"osc-end","osc-end",1762953954),Rs=new nl("internal","rewind","internal/rewind",-31749342),Ls=new nl(null,"bottom-margin","bottom-margin",-701300733),Fs=new nl(null,"on-key-press","on-key-press",-399563677),Us=new nl(null,"osc-put","osc-put",-1827844733),Bs=new nl(null,"cljsLegacyRender","cljsLegacyRender",-1527295613),Hs=new nl(null,"klass","klass",-1386752349),Vs=new nl(null,"blink","blink",-271985917),Ws=new Mt(null,"meta43127","meta43127",166183907,null),qs=new nl(null,"primary","primary",817773892),Ks=new Mt(null,"meta43105","meta43105",-531987068,null),Gs=new nl(null,"meta","meta",1499536964),Ys=new nl(null,"screen","screen",1990059748),Xs=new Mt(null,"Symbol","Symbol",716452869,null),Js=new nl(null,"color","color",1011675173),$s=new Mt(null,"blockable","blockable",-28395259,null),zs=new nl(null,"dup","dup",556298533),Zs=new nl(null,"parser-params","parser-params",36457893),Qs=new Mt(null,"height","height",-1629257147,null),nc=new nl(null,"key","key",-1516042587),tc=new Mt(null,"CellLine","CellLine",-317574363,null),ec=new nl(null,"asciicast","asciicast",509526949),rc=new Mt(null,"conditional","conditional",-1212542970,null),lc=new nl(null,"exit","exit",351849638),ic=new nl(null,"parser-intermediates","parser-intermediates",-169100058),uc=new nl(null,"else","else",-1508377146),oc=new nl(null,"tabs","tabs",-779855354),ac=new nl(null,"ground","ground",1193572934),sc=new nl(null,"next-print-wraps","next-print-wraps",-1664999738),cc=new nl(null,"font-size","font-size",-1847940346),hc=new Mt(null,"Bool","Bool",195910502,null),fc=new nl(null,"transition","transition",765692007),pc=new Mt(null,"one","one",-1719427865,null),dc=new nl(null,"speed","speed",1257663751),vc=new nl(null,"displayName","displayName",-809144601),wc=new nl(null,"_","_",1453416199),mc=new nl(null,"validator","validator",-1966190681),gc=new Mt(null,"char-attrs","char-attrs",196440072,null),yc=new nl(null,"div.loading","div.loading",-155515768),bc=new nl(null,"dcs-passthrough","dcs-passthrough",-671044440),Ec=new nl(null,"show-hud","show-hud",1983299752),Cc=new nl(null,"start-at","start-at",-103334680),_c=new nl(null,"default","default",-1987822328),jc=new nl(null,"csi-param","csi-param",-1120111192),Ic=new nl(null,"div.control-bar","div.control-bar",-1316808248),kc=new nl(null,"finally-block","finally-block",832982472),xc=new Mt(null,"cb","cb",-2064487928,null),Ac=new nl(null,"inverse","inverse",-1623859672),Nc=new nl(null,"fg","fg",-101797208),Tc=new nl(null,"warn","warn",-436710552),Oc=new nl(null,"dcs-intermediate","dcs-intermediate",480808872),Sc=new nl(null,"osc-string","osc-string",-486531128),Mc=new nl(null,"on-enter","on-enter",-928988216),Pc=new nl(null,"name","name",1843675177),Dc=new nl(null,"frames","frames",1765687497),Rc=new nl(null,"extra-validator-fn","extra-validator-fn",1562905865),Lc=new nl(null,"output-schema","output-schema",272504137),Fc=new nl(null,"div.play-button","div.play-button",1020321513),Uc=new nl(null,"span.time-elapsed","span.time-elapsed",-1782475638),Bc=new nl(null,"time","time",1385887882),Hc=new nl(null,"component-did-mount","component-did-mount",-1126910518),Vc=new nl(null,"background-color","background-color",570434026),Wc=new nl(null,"recording-ch-fn","recording-ch-fn",-902533462),qc=new nl(null,"span.playback-button","span.playback-button",-1136389398),Kc=new nl(null,"span.title-bar","span.title-bar",-1165872085),Gc=new nl(null,"loaded","loaded",-1246482293),Yc=new nl(null,"width","width",-384071477),Xc=new nl(null,"start","start",-355208981),Jc=new Mt(null,"meta43130","meta43130",1056327947,null),$c=new nl(null,"lines","lines",-700165781),zc=new nl(null,"input-schemas","input-schemas",-982154805),Zc=new nl(null,"sos-pm-apc-string","sos-pm-apc-string",398998091),Qc=new nl(null,"cursor-on","cursor-on",302555051),nh=new nl(null,"component-did-update","component-did-update",-1468549173),th=new nl(null,"div.start-prompt","div.start-prompt",-41424788),eh=new nl(null,"val","val",128701612),rh=new nl(null,"cursor","cursor",1011937484),lh=new nl(null,"dcs-entry","dcs-entry",216833388),ih=new nl(null,"recur","recur",-437573268),uh=new nl(null,"type","type",1174270348),oh=new Mt(null,"Num","Num",-2044934708,null),ah=new nl(null,"alternate","alternate",-931038644),sh=new nl(null,"catch-block","catch-block",1175212748),ch=new nl(null,"onPlay","onPlay",150417132),hh=new nl(null,"duration","duration",1444101068),fh=new nl(null,"execute","execute",-129499188),ph=new Mt(null,"pred","pred",-727012372,null),dh=new nl(null,"src","src",-1651076051),vh=new Mt(null,"Any","Any",1277492269,null),wh=new nl(null,"span.bar","span.bar",-1986926323),mh=new Mt(null,"Regex","Regex",205914413,null),gh=new nl(null,"msg-ch","msg-ch",-1840176755),yh=new nl(null,"on-exit","on-exit",1821961613),bh=new nl(null,"fallback-impl","fallback-impl",-1501286995),Eh=new nl(null,"view-box","view-box",-1792199155),Ch=new nl(null,"source","source",-433931539),_h=new nl(null,"csi-entry","csi-entry",-1787942099),jh=new nl(null,"flush-on-newline","flush-on-newline",-151457939),Ih=new nl(null,"preds-and-schemas","preds-and-schemas",-1306766355),kh=new nl(null,"command-ch","command-ch",508874766),xh=new nl(null,"componentWillUnmount","componentWillUnmount",1573788814),Ah=new Mt(null,"Inst","Inst",292408622,null),Nh=new nl(null,"span.timer","span.timer",2111534382),Th=new nl(null,"toggle","toggle",1291842030),Oh=new nl(null,"cursor-blink-ch","cursor-blink-ch",1063651214),Sh=new nl(null,"print","print",1299562414),Mh=new nl(null,"on-mouse-down","on-mouse-down",1147755470),Ph=new nl(null,"csi-dispatch","csi-dispatch",-126857169),Dh=new nl(null,"on-click","on-click",1632826543),Rh=new nl(null,"parser-state","parser-state",594493647),Lh=new nl(null,"ignore","ignore",-1631542033),Fh=new nl(null,"descendants","descendants",1824886031),Uh=new nl(null,"underline","underline",2018066703),Bh=new Mt(null,"Str","Str",907970895,null),Hh=new nl(null,"param","param",2013631823),Vh=new nl(null,"k","k",-2146297393),Wh=new nl(null,"title","title",636505583),qh=new nl(null,"stop-ch","stop-ch",-219113969),Kh=new nl(null,"insert-mode","insert-mode",894811791),Gh=new Mt(null,"maybe","maybe",1326133967,null),Yh=new nl(null,"toggle-fullscreen","toggle-fullscreen",-1647254833),Xh=new nl(null,"loop","loop",-395552849),Jh=new nl(null,"author-img-url","author-img-url",2016975920),$h=new nl(null,"shouldComponentUpdate","shouldComponentUpdate",1795750960),zh=new nl(null,"ancestors","ancestors",-776045424),Zh=new Mt(null,"flag","flag",-1565787888,null),Qh=new nl(null,"style","style",-496642736),nf=new nl(null,"theme","theme",-1247880880),tf=new nl(null,"stream","stream",1534941648),ef=new nl(null,"charset-fn","charset-fn",1374523920),rf=new nl(null,"author","author",2111686192),lf=new nl(null,"escape-intermediate","escape-intermediate",1036490448),uf=new nl(null,"div","div",1057191632),of=new nl(null,"readably","readably",1129599760),af=new nl(null,"change-speed","change-speed",2125740976),sf=new nl(null,"more-marker","more-marker",-14717935),cf=new nl(null,"new-line-mode","new-line-mode",1467504785),hf=new nl(null,"optional?","optional?",1184638129),ff=new nl(null,"csi-intermediate","csi-intermediate",-410048175),pf=new nl(null,"reagentRender","reagentRender",-358306383),df=new nl(null,"idle-time-limit","idle-time-limit",-928369231),vf=new nl(null,"started?","started?",-1301062863),wf=new nl(null,"other-buffer-saved","other-buffer-saved",-2048065486),mf=new nl(null,"snapshot","snapshot",-1274785710),gf=new nl(null,"osc-start","osc-start",-1717437326),yf=new nl(null,"preload","preload",1646824722),bf=new nl(null,"stop","stop",-2140911342),Ef=new nl(null,"no-cache","no-cache",1588056370),Cf=new Mt(null,"Uuid","Uuid",-1866694318,null),_f=new nl(null,"render","render",-1408033454),jf=new Mt(null,"width","width",1256460050,null),If=new nl(null,"poster","poster",-1616913550),kf=new nl(null,"csi-ignore","csi-ignore",-764437550),xf=new nl(null,"reagent-render","reagent-render",-985383853),Af=new nl(null,"auto-play","auto-play",-645319501),Nf=new nl(null,"collect","collect",-284321549),Tf=new nl(null,"pre.asciinema-terminal","pre.asciinema-terminal",832737619),Of=new nl(null,"loading","loading",-737050189),Sf=new nl(null,"priority","priority",1431093715),Mf=new nl(null,"auto-play?","auto-play?",385278451),Pf=new Mt(null,"val","val",1769233139,null),Df=new nl(null,"span.line","span.line",-1541583788),Rf=new nl(null,"print-length","print-length",1931866356),Lf=new nl(null,"poster-time","poster-time",1478579796),Ff=new nl(null,"saved","saved",288760660),Uf=new nl(null,"error-symbol","error-symbol",-823480428),Bf=new nl(null,"on-can-play","on-can-play",1481578549),Hf=new nl(null,"catch-exception","catch-exception",-1997306795),Vf=new nl(null,"constructor","constructor",-1953928811),Wf=new nl(null,"auto-run","auto-run",1958400437),qf=new nl(null,"div.asciinema-player","div.asciinema-player",-1293079051),Kf=new nl(null,"parents","parents",-2027538891),Gf=new nl(null,"author-url","author-url",1091920533),Yf=new nl(null,"pred-name","pred-name",-3677451),Xf=new Mt(null,"meta42957","meta42957",-1080714315,null),Jf=new nl(null,"on-mouse-move","on-mouse-move",-1386320874),$f=new nl(null,"component-will-unmount","component-will-unmount",-2058314698),zf=new nl(null,"prev","prev",-1597069226),Zf=new nl(null,"svg","svg",856789142),Qf=new nl(null,"getDuration","getDuration",-995932010),np=new nl(null,"url","url",276297046),tp=new nl(null,"authorURL","authorURL",549221782),ep=new Mt(null,"meta38850","meta38850",1963771318,null),rp=new nl(null,"continue-block","continue-block",-1852047850),lp=new nl(null,"loop?","loop?",457687798),ip=new Mt(null,"ch","ch",1085813622,null),up=new Mt(null,"CodePoint","CodePoint",-132710345,null),op=new nl(null,"autoPlay","autoPlay",-561263241),ap=new Mt(null,"=>","=>",-813269641,null),sp=new nl(null,"playing","playing",70013335),cp=new Mt(null,"Keyword","Keyword",-850065993,null),hp=new nl(null,"display-name","display-name",694513143),fp=new nl(null,"random","random",-557811113),pp=new nl(null,"position","position",-2011731912),dp=new nl(null,"on-dispose","on-dispose",2105306360),vp=new nl(null,"d","d",1972142424),wp=new nl(null,"action","action",-811238024),mp=new nl(null,"stdout-ch","stdout-ch",825692568),gp=new nl(null,"pause","pause",-2095325672),yp=new nl(null,"error","error",-978969032),bp=new nl(null,"span.fullscreen-button","span.fullscreen-button",-1476136392),Ep=new nl(null,"class-name","class-name",945142584),Cp=new nl(null,"componentFunction","componentFunction",825866104),_p=new nl(null,"div.loader","div.loader",-1644603528),jp=new nl(null,"origin-mode","origin-mode",-1430095912),Ip=new nl(null,"x","x",2099068185),kp=new nl(null,"__html","__html",674048345),xp=new nl(null,"fontSize","fontSize",919623033),Ap=new nl(null,"div.asciinema-player-wrapper","div.asciinema-player-wrapper",2009764409),Np=new nl(null,"startAt","startAt",849336089),Tp=new nl(null,"getCurrentTime","getCurrentTime",697283642),Op=new nl(null,"put","put",1299772570),Sp=new Mt(null,"CharAttrs","CharAttrs",1533586778,null),Mp=new nl(null,"top-margin","top-margin",655579514),Pp=new nl(null,"unhook","unhook",1440586234),Dp=new nl(null,"play","play",-580418022),Rp=new nl(null,"seek","seek",758996602),Lp=new Mt(null,"chars","chars",545901210,null),Fp=new nl(null,"version","version",425292698),Up=new Mt(null,"line","line",1852876762,null),Bp=new nl(null,"on-pause","on-pause",1839279163),Hp=new nl(null,"visible","visible",-1024216805),Vp=new nl(null,"autobind","autobind",-570650245),Wp=new nl(null,"hierarchy","hierarchy",-1053470341),qp=new nl(null,"on-key-down","on-key-down",-1374733765),Kp=new nl(null,"on-play","on-play",-188934501),Gp=new Mt(null,"=>*","=>*",1909690043,null),Yp=new nl(null,"alt-impl","alt-impl",670969595),Xp=new nl(null,"bg","bg",-206688421),Jp=new nl(null,"p?","p?",-1172161701),$p=new nl(null,"onCanPlay","onCanPlay",197552027),zp=new nl(null,"other-buffer-lines","other-buffer-lines",-1562366021),Zp=new Mt(null,"record","record",861424668,null),Qp=new nl(null,"italic","italic",32599196),nd=new Mt(null,"required-key","required-key",1624616412,null),td=new nl(null,"dcs-ignore","dcs-ignore",198619612),ed=new Mt(null,"optional","optional",-600484260,null),rd=new nl(null,"keywordize-keys","keywordize-keys",1310784252),ld=new Mt(null,"Int","Int",-2116888740,null),id=new nl(null,"span.time-remaining","span.time-remaining",706865437),ud=new nl(null,"componentWillMount","componentWillMount",-285327619),od=new nl(null,"idleTimeLimit","idleTimeLimit",-867712227),ad=new nl("internal","seek","internal/seek",-1958914115),sd=new nl(null,"href","href",-793805698),cd=new nl(null,"buffer","buffer",617295198),hd=new nl(null,"img","img",1442687358),fd=new nl(null,"stdout","stdout",-531490018),pd=new nl(null,"a","a",-2123407586),dd=new nl(null,"dangerouslySetInnerHTML","dangerouslySetInnerHTML",-554971138),vd=new nl(null,"height","height",1025178622),wd=new Mt("s","Num","s/Num",-2044935073,null),md=new nl(null,"clear","clear",1877104959),gd=new nl("cljs.core","not-found","cljs.core/not-found",-1572889185),yd=new Mt(null,"meta36583","meta36583",-346463841,null),bd=new nl(null,"span","span",1394872991),Ed=new nl(null,"show","show",-576705889),Cd=new Mt(null,"f","f",43394975,null),_d=new nl(null,"onPause","onPause",-470027297);function jd(n,t){var e,r=Al(ea,n,t);return Qr(r,wi((e=r,function(n){return e===n}),t))}var Id=function n(t){switch(arguments.length){case 0:return n.B();case 1:return n.h(t);case 2:return n.c(t,arguments[1]);default:for(var e=[],r=arguments.length,l=0;l")}if(void 0===yv)var yv=null;function bv(){for(;;){var n=yv;if(null==n)return null;yv=null;for(var t=n.length,e=0;e");switch(e){case-1:var r=e=t;if(null==(t=(t=lw).hasOwnProperty(r)?t[r]:null)){var l=Ut(ha(Kv,Qo(t=e)));e=je(l,0,null),r=je(l,1,null),l=null==(l=je(l,2,null))?null:Rd(l,/\./," "),t=lw[t]={name:e,id:r,className:l}}return iw(t,n,1);case 0:return iw({name:t=je(n,1,null)},n,2);default:n=new Fi(null,2,5,Bi,[t.substring(0,e),ke.l(n,0,t.substring(e+1))],null)}}}(n):fr(n)?ow.h?ow.h(n):ow.call(null,n):Gv(n)?Qo(n):(null!=n?2147483648&n.m||yt===n.ma||!n.m&&Q(zn,n):Q(zn,n))?ma(ve([n])):n}function ow(n){for(var t=(n=on(n)).length,e=0;e^~?".split(""),"_CIRCA_ _BANG_ _DOUBLEQUOTE_ _SHARP_ _PERCENT_ _AMPERSAND_ _SINGLEQUOTE_ _STAR_ _PLUS_ _ _SLASH_ _COLON_ _LBRACK_ _LBRACE_ _LT_ _BSLASH_ _BAR_ _EQ_ _RBRACK_ _RBRACE_ _GT_ _CARET_ _TILDE_ _QMARK_".split(" "))))}function kw(n){if("string"!=typeof(n=""+Ur.h(n)))throw new TypeError("re-find must match against a string.");return Iw(bt(n=Ol(ge(n=null==(n=/function ([^\(]*)\(/.exec(n))?null:(1===Ce(n)?Lt:Wi)(n))))?n:"function")}function xw(n,t){n.schema$utils$schema=t}(Ew.fc={}).s=function(n,t,e){return isNaN(e)||""==e||n.length>=Number(e)?n:n=-1=Number(e)?r:(r=isNaN(l)?Math.abs(Number(n)).toString():Math.abs(Number(n)).toFixed(l),n=Number(e)-r.length-i.length,r=0<=t.indexOf("-",0)?i+r+g(" ",n):(t=0<=t.indexOf("0",0)?"0":" ",i+g(t,n)+r))},Ew.fc.d=function(n,t,e,r,l,i,u,o){return Ew.fc.f(parseInt(n,10),t,e,r,0,i,u,o)},Ew.fc.i=Ew.fc.d,Ew.fc.u=Ew.fc.d,ei.h(19),ei.h(!1);var Aw,Nw=function n(t){if(null!=t&&null!=t.xb)return t.xb(t);var e=n[h(null==t?null:t)];if(null!=e)return e.h?e.h(t):e.call(null,t);if(null!=(e=n._))return e.h?e.h(t):e.call(null,t);throw tn("Schema.explain",t)};function Tw(n,t,e,r){this.nc=n,this.v=t,this.j=e,this.w=r,this.m=2229667594,this.J=139264}Nw.function=function(n){var t=n.schema$utils$schema;return bt(t)?Nw(t):bt(Bt.c?Bt.c(null,n):Bt.call(null,null,n))?Bh:bt(Bt.c?Bt.c(Boolean,n):Bt.call(null,Boolean,n))?hc:bt(Bt.c?Bt.c(Number,n):Bt.call(null,Number,n))?oh:bt(Bt.c?Bt.c(null,n):Bt.call(null,null,n))?mh:bt(Bt.c?Bt.c(Date,n):Bt.call(null,Date,n))?Ah:bt(Bt.c?Bt.c(cs,n):Bt.call(null,cs,n))?Cf:n},(n=Tw.prototype).V=function(n,t){return this.I(null,t,null)},n.I=function(n,t,e){switch(t instanceof nl?t.ea:null){case"_":return this.nc;default:return Ie.l(this.j,t,e)}},n.R=function(n,t,e){return fa(t,function(n){return fa(t,wa,""," ","",e,n)},"#schema.core.AnythingSchema{",", ","}",e,bl.c(new Fi(null,1,5,Bi,[new Fi(null,2,5,Bi,[wc,this.nc],null)],null),this.j))},n.ba=function(){return new cu(0,this,1,new Fi(null,1,5,Bi,[wc],null),bt(this.j)?dt(this.j):Sl())},n.P=function(){return this.v},n.W=function(){return 1+Ce(this.j)},n.U=function(){var n=this,t=this.w;if(null!=t)return t;var e=function(n){return-1432036169^Gt(n)}(n);return this.w=e},n.K=function(n,t){return null!=t&&this.constructor===t.constructor&&Bt.c(this.nc,t.nc)&&Bt.c(this.j,t.j)},n.ga=function(n,t){return wr(new Ho(null,new mu(null,1,[wc,null],null),null),t)?Ae.c(Rn(mi.c(gu,this),this.v),t):new Tw(this.nc,this.v,Ol(Ae.c(this.j,t)),null)},n.O=function(n,t,e){return bt(el.c?el.c(wc,t):el.call(null,wc,t))?new Tw(e,this.v,this.j,null):new Tw(this.nc,this.v,ke.l(this.j,t,e),null)},n.S=function(){return Rt(bl.c(new Fi(null,1,5,Bi,[new Fi(null,2,5,Bi,[wc,this.nc],null)],null),this.j))},n.T=function(n,t){return new Tw(this.nc,t,this.j,this.w)},n.X=function(n,t){return ar(t)?this.O(null,wn.c(t,0),wn.c(t,1)):xr(dn,this,t)},n.xb=function(){return vh};var Ow=new Tw(null,null,null,null);function Sw(n,t,e,r,l){this.wb=n,this.Xb=t,this.v=e,this.j=r,this.w=l,this.m=2229667594,this.J=139264}function Mw(n){var t=Pt.h(kw(n));if(!dr(n))throw Error(jw("Not a function: %s",ve([n])));return new Sw(n,t,null,null,null)}(n=Sw.prototype).V=function(n,t){return this.I(null,t,null)},n.I=function(n,t,e){switch(t instanceof nl?t.ea:null){case"p?":return this.wb;case"pred-name":return this.Xb;default:return Ie.l(this.j,t,e)}},n.R=function(n,t,e){return fa(t,function(n){return fa(t,wa,""," ","",e,n)},"#schema.core.Predicate{",", ","}",e,bl.c(new Fi(null,2,5,Bi,[new Fi(null,2,5,Bi,[Jp,this.wb],null),new Fi(null,2,5,Bi,[Yf,this.Xb],null)],null),this.j))},n.ba=function(){return new cu(0,this,2,new Fi(null,2,5,Bi,[Jp,Yf],null),bt(this.j)?dt(this.j):Sl())},n.P=function(){return this.v},n.W=function(){return 2+Ce(this.j)},n.U=function(){var n=this,t=this.w;if(null!=t)return t;var e=function(n){return 2041221968^Gt(n)}(n);return this.w=e},n.K=function(n,t){return null!=t&&this.constructor===t.constructor&&Bt.c(this.wb,t.wb)&&Bt.c(this.Xb,t.Xb)&&Bt.c(this.j,t.j)},n.ga=function(n,t){return wr(new Ho(null,new mu(null,2,[Yf,null,Jp,null],null),null),t)?Ae.c(Rn(mi.c(gu,this),this.v),t):new Sw(this.wb,this.Xb,this.v,Ol(Ae.c(this.j,t)),null)},n.O=function(n,t,e){return bt(el.c?el.c(Jp,t):el.call(null,Jp,t))?new Sw(e,this.Xb,this.v,this.j,null):bt(el.c?el.c(Yf,t):el.call(null,Yf,t))?new Sw(this.wb,e,this.v,this.j,null):new Sw(this.wb,this.Xb,this.v,ke.l(this.j,t,e),null)},n.S=function(){return Rt(bl.c(new Fi(null,2,5,Bi,[new Fi(null,2,5,Bi,[Jp,this.wb],null),new Fi(null,2,5,Bi,[Yf,this.Xb],null)],null),this.j))},n.T=function(n,t){return new Sw(this.wb,this.Xb,t,this.j,this.w)},n.X=function(n,t){return ar(t)?this.O(null,wn.c(t,0),wn.c(t,1)):xr(dn,this,t)},n.xb=function(){return Bt.c(this.wb,vr)?ld:Bt.c(this.wb,tl)?cp:Bt.c(this.wb,St)?Xs:Bt.c(this.wb,Z)?Bh:dn(dn(Kr,this.Xb),ph)},RegExp.prototype.xb=function(){return Pt.h(['#"',Ur.h((""+Ur.h(this)).slice(1,-1)),'"'].join(""))};var Pw=Mw(Z),Dw=Boolean,Rw=Number,Lw=Mw(vr),Fw=Mw(tl);function Uw(n,t,e,r){this.ia=n,this.v=t,this.j=e,this.w=r,this.m=2229667594,this.J=139264}function Bw(n,t,e,r,l){this.Yb=n,this.Hb=t,this.v=e,this.j=r,this.w=l,this.m=2229667594,this.J=139264}function Hw(n){return n instanceof nl||!1}function Vw(n,t,e,r){this.k=n,this.v=t,this.j=e,this.w=r,this.m=2229667594,this.J=139264}function Ww(n){return new Vw(n,null,null,null)}function qw(n){var t=Hw(n);if(bt(bt(t)?t:n instanceof Vw)){if(n instanceof nl)return n;if(t=bt(Hw(n))?nd:bt(n instanceof Vw)?ks:null,!(n instanceof nl)){if(!bt(n instanceof Vw))throw Error(jw("Bad explicit key: %s",ve([n])));n=n.k}return n=dn(Kr,n),dn(n,t)}return Nw(n)}function Kw(n){return mi.c(gu,function o(a){return new al(null,function(){for(;;){var n=Rt(a);if(n){if(sr(n)){var t=st(n),e=Ce(t),r=fl(e);n:for(var l=0;;){if(!(lparseFloat(Mb)){Nb=String(Db);break n}}Nb=Mb}var Rb,Lb={};function Fb(o){return n=o,t=function(){for(var n=0,t=m(String(Nb)).split("."),e=m(String(o)).split("."),r=Math.max(t.length,e.length),l=0;0==n&&l>>0);function hE(t){return f(t)?t:(t[cE]||(t[cE]=function(n){return t.handleEvent(n)}),t[cE])}function fE(){bb.call(this),this.Ib=new $b(this),(this.ff=this).ve=null}function pE(n,t,e,r){if(!(t=n.Ib.rb[String(t)]))return!0;t=t.concat();for(var l=!0,i=0;ithis.head?(WE(this.o,this.fa,n,0,this.o.length-this.fa),WE(this.o,0,n,this.o.length-this.fa,this.head),this.fa=0,this.head=this.length,this.o=n):this.fa===this.head?(this.head=this.fa=0,this.o=n):null},(n=XE.prototype).Nd=function(){return this.aa.length===this.n},n.Sc=function(){return this.aa.pop()},n.Md=function(n,t){return KE(this.aa,t),this},n.ne=function(){return null},n.W=function(){return this.aa.length},(n=JE.prototype).Nd=function(){return!1},n.Sc=function(){return this.aa.pop()},n.Md=function(n,t){return this.aa.length!==this.n&&this.aa.unshift(t),this},n.ne=function(){return null},n.W=function(){return this.aa.length},void 0===$E)var $E={};function zE(n){this.H=n,this.m=2,this.J=0}(n=zE.prototype).Nd=function(){return!1},n.Sc=function(){return this.H},n.Md=function(n,t){return bt($E===this.H)&&(this.H=t),this},n.ne=function(){return bt($E===this.H)?this.H=null:null},n.W=function(){return bt($E===this.H)?0:1};var ZE,QE,nC=YE(32),tC=!1,eC=!1;function rC(){eC=!(tC=!0);for(var n=0;;){var t=nC.pop();if(!(null!=t&&(t.B?t.B():t.call(null),n<1024)))break;n+=1}return tC=!1,0this.level){for(var l=this.level+1;l<=r+1;)e[l]=this.header,l+=1;this.level=r}return r=EC(n,t,Array(r)),0<=this.level?(e=e[0].forward,r.forward[0]=e[0],e[0]=r):null},_C.prototype.remove=function(n){var t=Array(15),e=CC(this.header,n,this.level,t);if(null==(e=0===e.forward.length?null:e.forward[0])||e.key!==n)return null;for(n=0;n<=this.level;){var r=t[n].forward;e===(n=n)break n}null!=l?(--r,e=l):--r}}(t),r=bt(bt(e)?e.key '],null)],null)],null)}function G_(){return new Fi(null,3,5,Bi,[Zf,new mu(null,3,[Fp,"1.1",Eh,"0 0 12 12",Ep,"icon"],null),new Fi(null,2,5,Bi,[ms,new mu(null,1,[vp,"M1,0 L11,6 L1,12 Z"],null)],null)],null)}function Y_(){return new Fi(null,4,5,Bi,[Zf,new mu(null,3,[Fp,"1.1",Eh,"0 0 12 12",Ep,"icon"],null),new Fi(null,2,5,Bi,[ms,new mu(null,1,[vp,"M1,0 L4,0 L4,12 L1,12 Z"],null)],null),new Fi(null,2,5,Bi,[ms,new mu(null,1,[vp,"M8,0 L11,0 L11,12 L8,12 Z"],null)],null)],null)}function X_(){return new Fi(null,4,5,Bi,[Zf,new mu(null,3,[Fp,"1.1",Eh,"0 0 12 12",Ep,"icon"],null),new Fi(null,2,5,Bi,[ms,new mu(null,1,[vp,"M12,0 L7,0 L9,2 L7,4 L8,5 L10,3 L12,5 Z"],null)],null),new Fi(null,2,5,Bi,[ms,new mu(null,1,[vp,"M0,12 L0,7 L2,9 L4,7 L5,8 L3,10 L5,12 Z"],null)],null)],null)}function J_(){return new Fi(null,4,5,Bi,[Zf,new mu(null,3,[Fp,"1.1",Eh,"0 0 12 12",Ep,"icon"],null),new Fi(null,2,5,Bi,[ms,new mu(null,1,[vp,"M7,5 L7,0 L9,2 L11,0 L12,1 L10,3 L12,5 Z"],null)],null),new Fi(null,2,5,Bi,[ms,new mu(null,1,[vp,"M5,7 L0,7 L2,9 L0,11 L1,12 L3,10 L5,12 Z"],null)],null)],null)}function $_(n,t){return e=R_(t,new YC(null,null,null)),function(){return new Fi(null,3,5,Bi,[qc,new mu(null,1,[Dh,e],null),new Fi(null,1,5,Bi,[bt(Mn(n))?Y_:G_],null)],null)};var e}function z_(n){return n<10?["0",Ur.h(n)].join(""):n}function Z_(n){var t=Math.floor((n%60+60)%60);return[Ur.h(z_(Math.floor(n/60))),":",Ur.h(z_(t))].join("")}function Q_(n,t){var e=Bi,r=new Fi(null,2,5,Bi,[Uc,Z_(Mn(n))],null),l=Bi,i=Mn(n),u=Mn(t);return i=["-",Ur.h(Z_(u-i))].join(""),new Fi(null,3,5,e,[Nh,r,new Fi(null,2,5,l,[id,i],null)],null)}function nj(){function n(n){return n.preventDefault(),P_(n.currentTarget.parentNode.parentNode.parentNode)}return function(){return new Fi(null,4,5,Bi,[bp,new mu(null,1,[Dh,n],null),new Fi(null,1,5,Bi,[X_],null),new Fi(null,1,5,Bi,[J_],null)],null)}}function tj(n,t){var e,r,l=D_(t,function(n){var t=n.currentTarget.offsetWidth,e=n.currentTarget.getBoundingClientRect();return qC(Hy(n.clientX-e.left,t)/t)}),i=Nv(function(){return[Ur.h(100*Mn(n)),"%"].join("")});return e=l,r=i,function(){return new Fi(null,2,5,Bi,[Ps,new Fi(null,3,5,Bi,[wh,new mu(null,1,[Mh,e],null),new Fi(null,2,5,Bi,[ds,new Fi(null,2,5,Bi,[bd,new mu(null,1,[Qh,new mu(null,1,[Yc,Mn(r)],null)],null)],null)],null)],null)],null)}}function ej(n,t,e,r){return l=Nv(function(){return Mn(t)/Mn(e)}),function(){return new Fi(null,5,5,Bi,[Ic,new Fi(null,3,5,Bi,[$_,n,r],null),new Fi(null,3,5,Bi,[Q_,t,e],null),new Fi(null,1,5,Bi,[nj],null),new Fi(null,3,5,Bi,[tj,l,r],null)],null)};var l}function rj(n){return t=R_(n,new YC(null,null,null)),function(){return new Fi(null,3,5,Bi,[th,new mu(null,1,[Dh,t],null),new Fi(null,2,5,Bi,[Fc,new Fi(null,2,5,Bi,[uf,new Fi(null,2,5,Bi,[bd,new Fi(null,1,5,Bi,[K_],null)],null)],null)],null)],null)};var t}function lj(){return new Fi(null,2,5,Bi,[yc,new Fi(null,1,5,Bi,[_p],null)],null)}function ij(t){return Xl(function(n){return t[n]},new Fi(null,4,5,Bi,["altKey","shiftKey","metaKey","ctrlKey"],null))}function uj(n){var t=function(n){var t=bt(ij(n))?null:function(){switch(n.key){case" ":return new YC(null,null,null);case"f":return Yh;case"0":return qC(0);case"1":return qC(.1);case"2":return qC(.2);case"3":return qC(.3);case"4":return qC(.4);case"5":return qC(.5);case"6":return qC(.6);case"7":return qC(.7);case"8":return qC(.8);case"9":return qC(.9);default:return null}}();if(bt(t))return t;switch(n.key){case">":return new GC(null,null,null);case"<":return new KC(null,null,null);default:return null}}(n);return bt(t)?(n.preventDefault(),Bt.c(t,Yh)?(P_(n.currentTarget),null):t):null}function oj(n){var t=function(n){if(bt(ij(n)))return null;switch(n.which){case 37:return new VC(null,null,null);case 39:return new HC(null,null,null);default:return null}}(n);return bt(t)?(n.preventDefault(),t):null}function aj(n,t,e,r){return n=bt(n)?['"',Ur.h(n),'"'].join(""):"untitled",new Fi(null,4,5,Bi,[Kc,bt(r)?new Fi(null,2,5,Bi,[hd,new mu(null,1,[dh,r],null)],null):null,n,bt(t)?new Fi(null,3,5,Bi,[bd," by ",bt(e)?new Fi(null,3,5,Bi,[pd,new mu(null,1,[sd,e],null),t],null):t],null):null],null)}function sj(u){var o,a=xC(1,ui.h($C)),n=kC(1);return iC((o=n,function(){var n,r,t,e=(r=function(n){var t=n[1];if(7===t)return n[7]=n[2],mC(n,12,a,!1);if(1===t)return n[2]=null,n[1]=2,ih;if(4===t)return n[8]=n[2],mC(n,5,a,!0);if(6===t)return t=IC(3e3),DC(n,8,new Fi(null,2,5,Bi,[u,t],null));if(3===t)return gC(n,n[2]);if(12===t)return n[9]=n[2],n[2]=null,n[1]=2,ih;if(2===t)return wC(n,4,u);if(11===t)return n[2]=n[2],n[1]=7,ih;if(9===t)return n[2]=null,n[1]=6,ih;if(5===t)return n[10]=n[2],n[2]=null,n[1]=6,ih;if(10===t)return n[2]=null,n[1]=11,ih;if(8!==t)return null;var e=n[2];return t=je(e,0,null),e=je(e,1,null),e=Bt.c(e,u),n[11]=t,n[1]=e?9:10,ih},t=null,(t=function(n){switch(arguments.length){case 0:return i.call(this);case 1:return l.call(this,n)}throw Error("Invalid arity: "+(arguments.length-1))}).B=i,t.h=l,t);function l(t){for(;;){n:try{for(;;){var n=r(t);if(!el(n,ih)){var e=n;break n}}}catch(n){if(!(n instanceof Object))throw n;t[5]=n,yC(t),e=ih}if(!el(e,ih))return e}}function i(){var n=[null,null,null,null,null,null,null,null,null,null,null,null];return n[0]=t,n[1]=1,n}return vC(((n=e.B?e.B():e.call(null))[6]=o,n))})),a}function cj(a,n){var u,s,t=ei.h(n),e=kC(1);return iC((u=e,s=t,function(){var n,r,t,o,e=(o=s,r=function(n){var t,e=n[1];if(7===e){var r=n[7],l=Ct(null==r);return n[8]=n[2],n[1]=l?8:9,ih}if(20===e)return r=n[7],n[1]=bt(yt===r.Fe)?23:24,ih;if(27===e)return n[2]=!1,n[1]=28,ih;if(1===e)return n[2]=null,n[1]=2,ih;if(24===e)return r=n[7],n[1]=bt(!r.Tc)?26:27,ih;if(4!==e)return 15===e?(n[2]=!1,n[1]=16,ih):21===e?(l=Q(UC,r=n[7]),n[2]=l,n[1]=22,ih):31===e?(n[11]=n[2],n[2]=null,n[1]=2,ih):13===e?(n[2]=n[2],n[1]=10,ih):22===e?(n[1]=bt(n[2])?29:30,ih):29===e?(r=n[7],l=Mn(a),l=BC(r,l),l=li.l(o,Id,l),n[2]=l,n[1]=31,ih):6===e?(n[2]=null,n[1]=7,ih):28===e?(n[2]=n[2],n[1]=25,ih):25===e?(n[2]=n[2],n[1]=22,ih):17===e?(u=n[10],r=n[7],n[9],l=li.c(a,(t=r,function(n){return FC(t,n)})),n[2]=l,n[1]=19,ih):3===e?gC(n,n[2]):12===e?(r=n[7],n[1]=bt(!r.Tc)?14:15,ih):2===e?DC(n,4,l=Rt(l=Mn(o))):23===e?(n[2]=!0,n[1]=25,ih):19===e?(l=Ct(null==(r=n[7])),n[12]=n[2],n[1]=l?20:21,ih):11===e?(n[2]=!0,n[1]=13,ih):9===e?(l=Q(LC,r=n[7]),n[2]=l,n[1]=10,ih):5===e?(u=n[10],l=li.l(o,tr,u),n[2]=l,n[1]=7,ih):14===e?(l=Q(LC,r=n[7]),n[2]=l,n[1]=16,ih):26===e?(l=Q(UC,r=n[7]),n[2]=l,n[1]=28,ih):16===e?(n[2]=n[2],n[1]=13,ih):30===e?(n[2]=null,n[1]=31,ih):10===e?(n[1]=bt(n[2])?17:18,ih):18===e?(n[2]=null,n[1]=19,ih):8===e?(r=n[7],n[1]=bt(yt===r.sb)?11:12,ih):null;r=n[7],n[9];var i=je(l=n[2],0,null),u=je(l,1,null);return n[10]=u,n[7]=i,n[9]=l,n[1]=bt(null==i)?5:6,ih},t=null,(t=function(n){switch(arguments.length){case 0:return i.call(this);case 1:return l.call(this,n)}throw Error("Invalid arity: "+(arguments.length-1))}).B=i,t.h=l,t);function l(t){for(;;){n:try{for(;;){var n=r(t);if(!el(n,ih)){var e=n;break n}}}catch(n){if(!(n instanceof Object))throw n;t[5]=n,yC(t),e=ih}if(!el(e,ih))return e}}function i(){var n=[null,null,null,null,null,null,null,null,null,null,null,null,null];return n[0]=t,n[1]=1,n}return vC(((n=e.B?e.B():e.call(null))[6]=u,n))})),e}function hj(t,n,e){e=R_(e,!0);var r,l,i,u,o,a,s,c,h,f,p,d,v,w,m,g,y,b,E,C,_,j,I=D_(n,uj),k=D_(n,oj),x=Nv(function(){return Of.h(Mn(t))}),A=Nv(function(){return Gc.h(Mn(t))}),N=Nv((l=x,i=A,function(){var n=Mn(l);return bt(n)?n:Mn(i)})),T=Nv((r=N,function(){var n=Ec.h(Mn(t));return n=bt(n)?n:Ct(Mn(r)),bt(n)?"hud":null})),O=Nv(function(){return["asciinema-theme-",Ur.h(nf.h(Mn(t)))].join("")}),S=Nv(function(){var n=Yc.h(Mn(t));return bt(n)?n:80}),M=Nv(function(){var n=vd.h(Mn(t));return bt(n)?n:24}),P=Nv(function(){return cc.h(Mn(t))}),D=Nv(function(){return Ys.h(Mn(t))}),R=Nv(function(){return Qc.h(Mn(t))}),L=Nv(function(){return sp.h(Mn(t))}),F=Nv(function(){return Ms.h(Mn(t))}),U=Nv(function(){return hh.h(Mn(t))}),B=Mn(t),H=null!=B&&(64&B.m||yt===B.G)?xl(jo,B):B,V=Ie.c(H,Wh),W=Ie.c(H,rf),q=Ie.c(H,Gf),K=Ie.c(H,Jh);return u=e,o=I,a=k,s=x,c=N,h=T,f=O,p=S,d=M,v=P,w=D,m=R,g=L,y=F,b=U,E=V,C=W,_=q,j=K,function(){return new Fi(null,3,5,Bi,[Ap,new mu(null,5,[Cs,-1,Fs,o,qp,a,Jf,u,Ep,Mn(h)],null),new Fi(null,7,5,Bi,[qf,new mu(null,1,[Ep,Mn(f)],null),new Fi(null,6,5,Bi,[q_,p,d,v,w,m],null),new Fi(null,5,5,Bi,[ej,g,y,b,n],null),bt(bt(E)?E:C)?new Fi(null,5,5,Bi,[aj,E,C,_,j],null):null,bt(Mn(c))?null:new Fi(null,2,5,Bi,[rj,n],null),bt(Mn(s))?new Fi(null,1,5,Bi,[lj],null):null],null)],null)}}function fj(l){var i,u,n=kC(null),t=kC(new JE(YE(1),1));return i=n,u=t,function(){return qv(new mu(null,4,[hp,"asciinema-player",xf,function(){return hj(l,n,r)},Hc,(t=n=i,e=r=u,function(){var n=p_(Ch.h(Mn(l)));return PC(sj(e),t),cj(l,Ko([t,n]))}),$f,function(){return d_(Ch.h(Mn(l)))}],null));var t,e,n,r}}function pj(n,t){var e=null!=t&&(64&t.m||yt===t.G)?xl(jo,t):t,r=Ie.c(e,dc),l=Ie.c(e,Ch);return r=n.h?n.h(r):n.call(null,r),v_(l,r),ke.l(e,dc,r)}function dj(n){var t=b_(ui.l(function(n,t){return new Fi(null,2,5,Bi,[n,new XC(t,null,null,null)],null)},pi(function(n){return n+.5},.5),hi(new Fi(null,2,5,Bi,[!1,!0],null))));return ke.l(ke.l(n,Qc,!0),Oh,t)}function vj(n){n=null!=n&&(64&n.m||yt===n.G)?xl(jo,n):n;var t=Ie.c(n,Oh);return UE(t),ke.l(ke.l(n,Qc,!0),Oh,null)}function wj(n){return n=null!=n&&(64&n.m||yt===n.G)?xl(jo,n):n,bt(n=Ie.c(n,Oh))?Ko([n]):qo}function mj(n){return bt(n)?(n=ui.c(parseFloat,Fd(""+Ur.h(n),/:/)),n=ui.l(Sr,Gr(n),pi(function(n){return 60*n},1)),xl(Or,n)):null}HC.prototype.sb=yt,HC.prototype.qb=function(n,t){var e=null!=t&&(64&t.m||yt===t.G)?xl(jo,t):t,r=Ie.c(e,Ms),l=Ie.c(e,hh),i=Ie.c(e,Ch);return bt(l)&&o_(i,Hy(r+5,l)),e},VC.prototype.sb=yt,VC.prototype.qb=function(n,t){var e=null!=t&&(64&t.m||yt===t.G)?xl(jo,t):t,r=Ie.c(e,Ms),l=Ie.c(e,hh),i=Ie.c(e,Ch);return bt(l)&&o_(i,Hy(r+-5,l)),e},WC.prototype.sb=yt,WC.prototype.qb=function(n,t){var e=null!=t&&(64&t.m||yt===t.G)?xl(jo,t):t,r=Ie.c(e,hh),l=Ie.c(e,Ch);return bt(r)&&(r*=pp.h(this),o_(l,r)),e},KC.prototype.sb=yt,KC.prototype.qb=function(n,t){return pj(function(n){return n/2},t)},GC.prototype.sb=yt,GC.prototype.qb=function(n,t){return pj(function(n){return 2*n},t)},YC.prototype.sb=yt,YC.prototype.qb=function(n,t){return function n(t){if(null!=t&&null!=t.Dd)return t.Dd(t);var e=n[h(null==t?null:t)];if(null!=e)return e.h?e.h(t):e.call(null,t);if(null!=(e=n._))return e.h?e.h(t):e.call(null,t);throw tn("Source.toggle",t)}(Ch.h(t)),t},XC.prototype.sb=yt,XC.prototype.qb=function(n,t){return ke.l(t,Qc,Ed.h(this))},JC.prototype.sb=yt,JC.prototype.qb=function(n,t){return ke.l(t,Ec,Ed.h(this))},zC.prototype.sb=yt,zC.prototype.qb=function(n,t){var e=null!=n&&(64&n.m||yt===n.G)?xl(jo,n):n;Ie.c(e,Yc),Ie.c(e,vd),Ie.c(e,hh),e=null!=t&&(64&t.m||yt===t.G)?xl(jo,t):t;var r=Ie.c(e,Yc),l=Ie.c(e,vd),i=null!=this&&(64&this.m||yt===this.G)?xl(jo,this):this,u=Ie.c(i,Yc),o=Ie.c(i,vd);return i=Ie.c(i,hh),ke.A(e,Yc,bt(r)?r:u,ve([vd,bt(l)?l:o,hh,i]))},ZC.prototype.sb=yt,ZC.prototype.qb=function(n,t){return ke.l(t,Of,Of.h(this))},e_.prototype.sb=yt,e_.prototype.qb=function(n,t){var e=null!=t&&(64&t.m||yt===t.G)?xl(jo,t):t,r=Ie.c(e,Bf);return bt(r)&&(uv(ov),r.B?r.B():r.call(null)),e},i_.prototype.sb=yt,i_.prototype.qb=function(n,t){return ke.l(t,Ms,Bc.h(this))},n_.prototype.sb=yt,n_.prototype.qb=function(n,t){var e=null!=n&&(64&n.m||yt===n.G)?xl(jo,n):n;Ie.c(e,sp);var r=null!=t&&(64&t.m||yt===t.G)?xl(jo,t):t,l=Ie.c(r,sp);e=Ie.c(r,Kp);var i=Ie.c(r,Bp),u=null!=this&&(64&this.m||yt===this.G)?xl(jo,this):this;return u=Ie.c(u,sp),Bt.c(l,u)?r:(r=ke.A(r,sp,u,ve([Gc,!0])),bt(u)?(bt(e)&&(e.B?e.B():e.call(null)),dj(r)):(bt(i)&&(i.B?i.B():i.call(null)),vj(r)))},n_.prototype.Fe=yt,n_.prototype.de=function(n,t){return wj(t)},r_.prototype.sb=yt,r_.prototype.qb=function(n,t){var e=ke.l(t,Ys,Ys.h(this));return e=null!=e&&(64&e.m||yt===e.G)?xl(jo,e):e,bt(Ie.c(e,Oh))?dj(vj(e)):e},r_.prototype.Fe=yt;var gj=new mu(null,2,[rh,new mu(null,1,[Hp,!(r_.prototype.de=function(n,t){return wj(t)})],null),$c,Hi],null);function yj(n,t){var e,r,l,i,u=null!=t&&(64&t.m||yt===t.G)?xl(jo,t):t,o=Ie.c(u,vd),a=Ie.l(u,cc,"small"),s=Ie.l(u,dc,1),c=Ie.c(u,Cc),h=Ie.c(u,Yc),f=Ie.c(u,uh),p=Ie.l(u,Xh,!1),d=Ie.l(u,nf,"asciinema"),v=Ie.c(u,df),w=Ie.c(u,If),m=Ie.l(u,yf,!1),g=Ie.l(u,Af,!1),y=bt(e=mj(c))?e:0;l=h,i=o;var b=null!=(w=l=bt(r=w)?"string"==typeof r?bt(0===r.indexOf("data:application/json;base64,"))?(l=r.substring(29).replace(RegExp("\\s","g"),""),l=xa(l=JSON.parse(atob(l))),new mu(null,1,[Ys,new mu(null,1,[$c,l],null)],null)):bt(0===r.indexOf("data:text/plain,"))?(r=r.substring(16),l=Ly(qg(bt(l)?l:80,bt(i)?i:24),r),new mu(null,1,[Ys,l],null)):bt(0===r.indexOf("npt:"))?new mu(null,1,[Bc,mj(r.substring(4))],null):null:new mu(null,1,[Ys,new mu(null,1,[$c,r],null)],null):null)&&(64&w.m||yt===w.G)?xl(jo,w):w;w=Ie.c(b,Ys);var E,C=bt(b=Ie.c(b,Bc))?b:Ct(w)&&0= 0) {
+ events = eventName.split(',');
+ }
+
+ events.forEach(eventName => {
+ // from youmightnotneedjquery.com
+ document.addEventListener(eventName.trim(), function (e) {
+ // loop parent nodes from the target to the delegation node
+ for (let target = e.target; target && target != this; target = target.parentNode) {
+ if (NodeList.prototype.isPrototypeOf(elemSelector)) {
+ for (el of elemSelector) {
+ if (el == target) {
+ handler.call(target, e);
+ return;
+ }
+ }
+ } else if (!elemSelector || target.matches(elemSelector)) {
+ handler.call(target, e);
+ return;
+ }
+ }
+ }, capture); // I find capture=true helpful when using :not() selectors to exclude one elem of the node tree
});
+}
+
+
+// cloneTemplate does a deep clone of the tag selected by tplSelector.
+function cloneTemplate(tplSelector) {
+ // Ohhhhhh wow, we need to use firstElementChild when cloning the content of a template tag (!!!!):
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template#avoiding_documentfragment_pitfall
+ // I spent way too long on this.
+ const elem = $_(tplSelector);
+ if (!elem) return;
+ return elem.content.firstElementChild.cloneNode(true);
+ // return document.importNode(elem.content, true);
+}
+
+// Find the first element matching a selector which contains the specified text
+function findWithContent(selector, text) {
+ const selected = document.querySelectorAll(selector);
+ let found = null;
+ selected.forEach(element => {
+ if (element.textContent.includes(text)) {
+ found = element;
+ }
+ });
+ return found;
+}
+
+// Find the next element containing the specified text
+function findNextText(startElement, nextText) {
+ let currentElement = startElement.nextSibling;
+ while (currentElement) {
+ if (currentElement.textContent.includes(nextText)) {
+ return currentElement;
+ }
+ currentElement = currentElement.nextSibling;
+ }
+ return null;
+}
+
+// Function to wrap the range between startElement and endElement in a new span
+function wrapRangeWithSpan(startElement, endElement, className) {
+ // Check if startElement and endElement are the same
+ if (startElement === endElement) {
+ const span = document.createElement('span');
+ span.className = className;
+ span.appendChild(startElement.cloneNode(true));
+ startElement.parentNode.replaceChild(span, startElement);
+ return span;
+ }
+
+ // Create a new span element
+ const span = document.createElement('span');
+ span.className = className;
+
+ // Reference the parent node of the common ancestor
+ const parent = startElement.parentNode;
+
+ // Iterate through siblings and wrap them in the span
+ const toRemove = [];
+ for (var node = startElement; node; node = node.nextSibling) {
+ var clonedNode = node.cloneNode(true);
+ span.appendChild(clonedNode);
+ if (node === endElement) {
+ parent.replaceChild(span, endElement);
+ toRemove.forEach(node => parent.removeChild(node));
+ break;
+ }
+ toRemove.push(node);
+ }
+
+ return span;
+}
+
+
+
+
+
+
+
+// when the system theme changes, apply that to our site if system theme is configured
+window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', ({ matches }) => {
+ if (getTheme() == "system") {
+ applyTheme(matches ? "dark" : "light");
+ }
});
-const caddyImportPath = 'github.com/caddyserver/caddy/v2';
-
-function isStandard(packagePath) {
- return packagePath.startsWith(caddyImportPath);
+// getTheme returns the configured theme.
+function getTheme() {
+ return localStorage.getItem("theme") || "system";
}
-function truncate(str, maxLen) {
- if (!str) return "";
- str = str.trim();
- let firstPeriod = str.match(/\.(\s|$)/); // first dot not in the middle of a word, or at end of string
- let terminate = firstPeriod ? firstPeriod.index+1 : str.length;
- str = str.substring(0, terminate);
- if (str.length <= maxLen) {
- return str;
+// setTheme changes the configured theme to light, dark, or system and applies it.
+function setTheme(theme) {
+ if (theme !== "light" && theme !== "dark" && theme !== "system") {
+ theme = "system";
}
- return str+"...";
+ localStorage.setItem("theme", theme);
+ ready(function() { $_('#current-theme').innerText = theme; });
+ let lightOrDarkTheme = theme;
+ if (lightOrDarkTheme == "system") {
+ lightOrDarkTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? "dark" : "light";
+ }
+ applyTheme(lightOrDarkTheme);
}
-function moduleDocsPreview(mod, maxLen) {
- if (!mod || !mod.docs) return "";
- let short = truncate(mod.docs, maxLen);
- if (short.indexOf(mod.name) === 0) {
- short = short.substr(mod.name.length).trim();
+// applyTheme simply adds or removes the 'dark' class to the HTML.
+function applyTheme(lightOrDark) {
+ if (lightOrDark == "dark") {
+ $_('html').classList.add('dark');
+ } else {
+ $_('html').classList.remove('dark');
}
- return short;
}
-function detectPlatform() {
- // assume 32-bit linux, then change OS and architecture if justified
- var os = "linux", arch = "amd64";
-
- // change os
- if (/Macintosh/i.test(navigator.userAgent)) {
- os = "darwin";
- } else if (/Windows/i.test(navigator.userAgent)) {
- os = "windows";
- } else if (/FreeBSD/i.test(navigator.userAgent)) {
- os = "freebsd";
- } else if (/OpenBSD/i.test(navigator.userAgent)) {
- os = "openbsd";
+// nextTheme switches to the next theme in the rotation.
+function nextTheme() {
+ let theme = getTheme();
+ if (theme == "system") {
+ theme = "light";
+ } else if (theme == "light") {
+ theme = "dark";
+ } else if (theme == "dark") {
+ theme = "system";
}
-
- // change architecture
- if (os == "darwin" || /amd64|x64|x86_64|Win64|WOW64|i686|64-bit/i.test(navigator.userAgent)) {
- arch = "amd64";
- } else if (/arm64/.test(navigator.userAgent)) {
- arch = "arm64";
- } else if (/ ARM| armv/.test(navigator.userAgent)) {
- arch = "arm";
- }
-
- // change arm version
- if (arch == "arm") {
- var arm = "7"; // assume version 7 by default
- if (/armv6/.test(navigator.userAgent)) {
- arm = "6";
- } else if (/armv5/.test(navigator.userAgent)) {
- arm = "5";
- }
- arch += arm;
- }
-
- return [os, arch];
+ setTheme(theme);
}
-// Detect the platform OS, but with an allow-list of values
-// and if the value is not allowed, return the default.
-function defaultOS(allowed, def) {
- var [os] = detectPlatform();
- return allowed.includes(os) ? os : def;
-}
+
+
+
+// hoversplash effect!
+on('mouseover', '.button:not(.cool), button:not(.cool)', (e) => {
+ const elem = document.createElement('span');
+ elem.classList.add('hover-splash');
+
+ // get coordinates relative to container
+ const rect = e.target.getBoundingClientRect();
+ const x = e.clientX - rect.left;
+ const y = e.clientY - rect.top;
+
+ elem.style.left = `${x}px`;
+ elem.style.top = `${y}px`;
+
+ e.target.append(elem);
+
+ setTimeout(function() {
+ elem.remove();
+ }, 1000);
+});
+
+
+// mouseover highlights for feature sections that explain config
+on('mouseover', '.rollover', e => {
+ const target = e.target.closest('.rollover') || e.target;
+ $$_(`.${target.dataset.rollover}`).forEach(elem => elem.classList.add('show'));
+});
+on('mouseout', '.rollover', e => {
+ const target = e.target.closest('.rollover') || e.target;
+ $$_(`.${target.dataset.rollover}`).forEach(elem => elem.classList.remove('show'));
+});
+
+
+
+// immediately set the configured theme to avoid flash
+setTheme(getTheme());
diff --git a/src/resources/js/docs.js b/src/resources/js/docs.js
index 01c4ba5..39094db 100644
--- a/src/resources/js/docs.js
+++ b/src/resources/js/docs.js
@@ -1,87 +1,105 @@
-$(function() {
- function hasPrefix(str, prefix) {
- if (!prefix) return true;
- if (!str) return false;
- return str.indexOf(prefix) === 0;
- }
-
+ready(function() {
// highlight current page in left nav
- var $currentPageLink = $('main nav a[href="'+window.location.pathname+'"]');
- if (hasPrefix(window.location.pathname, "/docs/json/")) {
+ let currentPageLink = $_('main nav a[href="'+window.location.pathname+'"]');
+ if (window.location.pathname.startsWith("/docs/json/")) {
// as a special case, highlight the JSON structure link anywhere within it
- $currentPageLink = $('main nav a[href="/docs/json/"]');
+ currentPageLink = $_('main nav a[href="/docs/json/"]');
}
- if (hasPrefix(window.location.pathname, "/docs/modules/")) {
+ if (window.location.pathname.startsWith("/docs/modules/")) {
// as another special case, highlight the modules link anywhere within it
- $currentPageLink = $('main nav a[href="/docs/modules/"]');
+ currentPageLink = $_('main nav a[href="/docs/modules/"]');
+ }
+ currentPageLink?.classList?.add('current');
+
+ // generate in-page nav before adding anchor links to headings;
+ // only show sidebar if there are any navigable headers
+ // TODO: support h3 too
+ const spacingMS = 50;
+ let delay = spacingMS;
+ const h2elems = $$_('main article h2');
+ if (h2elems.length) {
+ $_('#pagenav .heading').style.display = 'block';
+ h2elems.forEach(elem => {
+ const a = document.createElement('a');
+ a.innerText = elem.innerText;
+ a.href = `#${elem.id}`;
+ setTimeout(function() {
+ $_('#pagenav').append(a);
+ }, delay);
+ delay += spacingMS;
+ });
}
- $currentPageLink.addClass('current');
// add anchor links, inspired by https://github.com/bryanbraun/anchorjs
- $('article > h1[id], article > h2[id], article > h3[id], article > h4[id], article > h5[id], article > h6[id]').each(function() {
- var $anchor = $('🔗');
- $(this).append($anchor);
+ $$_('article > h2[id], article > h3[id], article > h4[id], article > h5[id], article > h6[id]').forEach(function(elem) {
+ const anchor = document.createElement('a');
+ anchor.href = `#${elem.id}`;
+ anchor.classList.add('anchor-link');
+ anchor.title = "Link to this section";
+ anchor.innerText = '🔗';
+ elem.append(anchor);
});
- // the server-side markdown renderer annoyingly renders
- // colored code blocks differently from plain ones, in that
- // colorized ones do not have the additional inside
- // the ; this line finds those and adds a .chroma class
- // to the outer pre element, and our CSS file has a style to
- // ensure the inner code block does not produce extra padding
- $('article > pre:not(.chroma) > code:not(.cmd)').parent().addClass('chroma');
+ const autonav = $_('#autonav');
- // Add links to Caddyfile directive tokens in code blocks.
- // See include/docs-head.html for the whitelist bootstrapping logic
- $('pre.chroma .k')
- .filter((k, item) =>
- window.CaddyfileDirectives.includes(item.innerText)
- || item.innerText === ''
- )
- .map(function(k, item) {
- let text = item.innerText;
- let url = text === ''
- ? '/docs/caddyfile/directives'
- : '/docs/caddyfile/directives/' + text;
- text = text.replace(//g,'>');
- $(item).html('' + text + '');
- });
+ // when a left-side-nav-link is hovered, show the in-page nav in a popout to the side
+ on('mouseover', 'main nav li a:not(#autonav a)', async e => {
+ // only show the pop-out nav if not on mobile/narrow screen
+ if ($_('#docs-menu').offsetParent != null) {
+ return;
+ }
- // Add links to [] or named matcher tokens in code blocks.
- // The matcher text includes <> characters which are parsed as HTML,
- // so we must use text() to change the link text.
- $('pre.chroma .nd')
- .map(function(k, item) {
- let text = item.innerText.replace(//g,'>');
- $(item).html('' + text + '');
- });
+ const response = await fetch("/temporary-markdown-proxy"+e.target.getAttribute('href'));
+ const markdown = await response.text();
+ const tokens = marked.lexer(markdown);
+
+ // empty the container
+ autonav.replaceChildren();
+
+ let seenH1 = false;
+ for (const tkn of tokens) {
+ if (tkn.type != "heading") continue;
+ if (tkn.depth == 1) {
+ seenH1 = true;
+ }
+ if (!seenH1 || tkn.depth != 2) continue;
+
+ // this includes HTML entities like < (i.e. not user-facing text), but
+ // that's how the server-side markdown renderer does it too ¯\_(ツ)_/¯
+ const anchor = anchorID(tkn.text);
+
+ const a = document.createElement('a');
+ a.classList.add('autonav-link');
+ a.innerHTML = marked.parseInline(tkn.text);
+ a.href = `${e.target.href}#${anchor}`;
+ autonav.append(a);
+ }
+
+ if ($_('#autonav *')) {
+ const sections = document.createElement('div')
+ sections.classList.add('heading');
+ sections.innerText = 'Sections';
+ autonav.prepend(sections);
+ e.target.closest('li').append(autonav);
+ autonav.style.display = ''; // unhide the container
+ } else {
+ // no links; hide the container so we don't see an empty box
+ autonav.style.display = 'none';
+ }
+
+ });
});
-// addLinkaddLinksToSubdirectivessToAnchors finds all the ID anchors
-// in the article, and turns any directive or subdirective span into
-// links that have an ID on the page. This is opt-in for each page,
-// because it's not necessary to run everywhere.
-function addLinksToSubdirectives() {
- let anchors = $('article *[id]').map((i, el) => el.id).toArray();
- $('pre.chroma .k')
- .filter((k, item) => anchors.includes(item.innerText))
- .map(function(k, item) {
- let text = item.innerText.replace(//g,'>');
- let url = '#' + item.innerText;
- $(item).html('' + text + '');
- });
-}
+// toggle left-nav when menu link is clicked
+on('click', '#docs-menu', e => {
+ const nav = $_('#docs-menu-container');
+ if (!nav.offsetHeight) {
+ nav.style.height = `${nav.scrollHeight}px`;
+ } else {
+ nav.style.height = 0;
+ }
+});
-function stripScheme(url) {
- return url.substring(url.indexOf("://")+3);
-}
-
-// splitTypeName splits a fully qualified type name into
-// its package path and type name components, for example:
-// "github.com/foo/bar.Type" => "github.com/foo/bar" and "Type".
-function splitTypeName(fqtn) {
- let lastDotPos = fqtn.lastIndexOf('.');
- let pkg = fqtn.substr(0, lastDotPos);
- let typeName = fqtn.substr(lastDotPos+1);
- return {pkg: pkg, typeName: typeName};
+function anchorID(text) {
+ return text.trim().toLowerCase().replace(/\s/g, '-').replace(/[^\w-]/g, '');
}
diff --git a/src/resources/js/home.js b/src/resources/js/home.js
new file mode 100644
index 0000000..3a75076
--- /dev/null
+++ b/src/resources/js/home.js
@@ -0,0 +1,26 @@
+const resp = fetch("/resources/testimonials.json").then(async resp => {
+ const testimonials = await resp.json();
+
+ ready(function() {
+ for (let i = 0; i < testimonials.length; i++) {
+ const testimonial = testimonials[i];
+ const tpl = cloneTemplate('#tpl-testimonial');
+ $_('.testimonial-picture', tpl).src = testimonial.picture || "";
+ $_('.testimonial-quote', tpl).innerText = `"${testimonial.quote}"`;
+ if (testimonial.username) {
+ $_('.testimonial-name', tpl).innerText = ` @${testimonial.username}`;
+ } else {
+ $_('.testimonial-name', tpl).innerText = testimonial.name || "";
+ }
+ if (testimonial.link) {
+ $_('.testimonial-name', tpl).href = testimonial.link;
+ }
+ $_('.testimonial-role', tpl).innerText = testimonial.role || "";
+ if (testimonial.org) {
+ $_('.testimonial-role', tpl).appendChild(document.createElement("br"));
+ $_('.testimonial-role', tpl).appendChild(document.createTextNode(testimonial.org));
+ }
+ $_(`.testimonial-col:nth-child(${i%3 + 1})`).append(tpl);
+ }
+ });
+});
diff --git a/src/resources/js/lib.js b/src/resources/js/lib.js
new file mode 100644
index 0000000..26659fa
--- /dev/null
+++ b/src/resources/js/lib.js
@@ -0,0 +1,82 @@
+// AJQuery: https://github.com/coolaj86/ajquery.js (modified slightly by me)
+function $_(sel, el) { return ((typeof el === 'string' ? $_(el) : el) || document).querySelector(sel); }
+function $$_(sel, el) { return (el || document).querySelectorAll(sel); }
+
+
+function ready(fn) {
+ if (document.readyState !== 'loading') {
+ fn();
+ } else {
+ document.addEventListener('DOMContentLoaded', fn);
+ }
+}
+
+function on(eventName, elemSelector, handler, capture) {
+ let events = [eventName];
+ if (eventName.indexOf(',') >= 0) {
+ events = eventName.split(',');
+ }
+
+ events.forEach(eventName => {
+ // from youmightnotneedjquery.com
+ document.addEventListener(eventName.trim(), function (e) {
+ // loop parent nodes from the target to the delegation node
+ for (let target = e.target; target && target != this; target = target.parentNode) {
+ if (NodeList.prototype.isPrototypeOf(elemSelector)) {
+ for (el of elemSelector) {
+ if (el == target) {
+ handler.call(target, e);
+ return;
+ }
+ }
+ } else if (!elemSelector || target.matches(elemSelector)) {
+ handler.call(target, e);
+ return;
+ }
+ }
+ }, capture); // I find capture=true helpful when using :not() selectors to exclude one elem of the node tree
+ });
+}
+
+function trigger(el, eventType) {
+ if (typeof el === 'string') {
+ el = $_(el); // assume it was a selector, for convenience
+ }
+
+ // from youmightnotneedjquery.com
+ if (typeof eventType === 'string' && typeof el[eventType] === 'function') {
+ el[eventType]();
+ } else {
+ const event =
+ typeof eventType === 'string'
+ ? new Event(eventType, { bubbles: true, cancelable: true })
+ : eventType;
+ el.dispatchEvent(event);
+ }
+}
+
+// cloneTemplate does a deep clone of the tag selected by tplSelector.
+function cloneTemplate(tplSelector) {
+ // Ohhhhhh wow, we need to use firstElementChild when cloning the content of a template tag (!!!!):
+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template#avoiding_documentfragment_pitfall
+ // I spent way too long on this.
+ const elem = $_(tplSelector);
+ if (!elem) return;
+ return elem.content.firstElementChild.cloneNode(true);
+ // return document.importNode(elem.content, true);
+}
+
+// isVisible returns true if elem (an element or selector) is visible.
+function isVisible(elem) {
+ if (typeof elem === 'string') {
+ elem = $_(elem);
+ }
+ return elem.offsetParent !== null;
+}
+
+// queryParam returns the named query string parameter's value(s).
+function queryParam(name) {
+ const urlSearchParams = new URLSearchParams(window.location.search);
+ const params = Object.fromEntries(urlSearchParams.entries());
+ return params[name];
+}
diff --git a/src/resources/js/vendor/asciinema-player-3.6.1.min.js b/src/resources/js/vendor/asciinema-player-3.6.1.min.js
new file mode 100644
index 0000000..de9ba8e
--- /dev/null
+++ b/src/resources/js/vendor/asciinema-player-3.6.1.min.js
@@ -0,0 +1 @@
+var AsciinemaPlayer=function(A){"use strict";const g={};const I=Symbol("solid-proxy"),B=Symbol("solid-track"),Q={equals:(A,g)=>A===g};let C=J;const E=1,i=2,e={owned:null,cleanups:null,context:null,owner:null};var t=null;let o=null,s=null,n=null,r=null,a=0;function c(A,g){const I=s,B=t,Q=0===A.length,C=Q?e:{owned:null,cleanups:null,context:null,owner:void 0===g?B:g},E=Q?A:()=>A((()=>l((()=>U(C)))));t=C,s=null;try{return R(E,!0)}finally{s=I,t=B}}function D(A,g){const I={value:A,observers:null,observerSlots:null,comparator:(g=g?Object.assign({},Q,g):Q).equals||void 0};return[u.bind(I),A=>("function"==typeof A&&(A=A(I.value)),F(I,A))]}function w(A,g,I){d(f(A,g,!1,E))}function h(A,g,I){I=I?Object.assign({},Q,I):Q;const B=f(A,g,!0,0);return B.observers=null,B.observerSlots=null,B.comparator=I.equals||void 0,d(B),u.bind(B)}function y(A){return R(A,!1)}function l(A){if(null===s)return A();const g=s;s=null;try{return A()}finally{s=g}}function G(A){!function(A,g,I){C=S;const B=f(A,g,!1,E);B.user=!0,r?r.push(B):d(B)}((()=>l(A)))}function N(A){return null===t||(null===t.cleanups?t.cleanups=[A]:t.cleanups.push(A)),A}function k(){return s}function M(A){const g=h(A),I=h((()=>m(g())));return I.toArray=()=>{const A=I();return Array.isArray(A)?A:null!=A?[A]:[]},I}function u(){const A=o;if(this.sources&&(this.state||A))if(this.state===E||A)d(this);else{const A=n;n=null,R((()=>p(this)),!1),n=A}if(s){const A=this.observers?this.observers.length:0;s.sources?(s.sources.push(this),s.sourceSlots.push(A)):(s.sources=[this],s.sourceSlots=[A]),this.observers?(this.observers.push(s),this.observerSlots.push(s.sources.length-1)):(this.observers=[s],this.observerSlots=[s.sources.length-1])}return this.value}function F(A,g,I){let B=A.value;return A.comparator&&A.comparator(B,g)||(A.value=g,A.observers&&A.observers.length&&R((()=>{for(let g=0;g1e6)throw n=[],new Error}),!1)),g}function d(A){if(!A.fn)return;U(A);const g=t,I=s,B=a;s=t=A,function(A,g,I){let B;try{B=A.fn(g)}catch(g){A.pure&&(A.state=E,A.owned&&A.owned.forEach(U),A.owned=null),K(g)}(!A.updatedAt||A.updatedAt<=I)&&(null!=A.updatedAt&&"observers"in A?F(A,B):A.value=B,A.updatedAt=I)}(A,A.value,B),s=I,t=g}function f(A,g,I,B=E,Q){const C={fn:A,state:B,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:g,owner:t,context:null,pure:I};return null===t||t!==e&&(t.owned?t.owned.push(C):t.owned=[C]),C}function Y(A){const g=o;if(0===A.state||g)return;if(A.state===i||g)return p(A);if(A.suspense&&l(A.suspense.inFallback))return A.suspense.effects.push(A);const I=[A];for(;(A=A.owner)&&(!A.updatedAt||A.updatedAt=0;B--)if((A=I[B]).state===E||g)d(A);else if(A.state===i||g){const g=n;n=null,R((()=>p(A,I[0])),!1),n=g}}function R(A,g){if(n)return A();let I=!1;g||(n=[]),r?I=!0:r=[],a++;try{const g=A();return function(A){n&&(J(n),n=null);if(A)return;const g=r;r=null,g.length&&R((()=>C(g)),!1)}(I),g}catch(A){I||(r=null),n=null,K(A)}}function J(A){for(let g=0;gA(g||{})))}function v(A){const g="fallback"in A&&{fallback:()=>A.fallback};return h(function(A,g,I={}){let Q=[],C=[],E=[],i=0,e=g.length>1?[]:null;return N((()=>q(E))),()=>{let t,o,s=A()||[];return s[B],l((()=>{let A,g,B,r,a,D,w,h,y,l=s.length;if(0===l)0!==i&&(q(E),E=[],Q=[],C=[],i=0,e&&(e=[])),I.fallback&&(Q=[H],C[0]=c((A=>(E[0]=A,I.fallback()))),i=1);else if(0===i){for(C=new Array(l),o=0;o=D&&h>=D&&Q[w]===s[h];w--,h--)B[h]=C[w],r[h]=E[w],e&&(a[h]=e[w]);for(A=new Map,g=new Array(h+1),o=h;o>=D;o--)y=s[o],t=A.get(y),g[o]=void 0===t?-1:t,A.set(y,o);for(t=D;t<=w;t++)y=Q[t],o=A.get(y),void 0!==o&&-1!==o?(B[o]=C[t],r[o]=E[t],e&&(a[o]=e[t]),o=g[o],A.set(y,o)):E[t]();for(o=D;oA.each),A.children,g||void 0))}function x(A){const g="fallback"in A&&{fallback:()=>A.fallback};return h(function(A,g,I={}){let Q,C=[],E=[],i=[],e=[],t=0;return N((()=>q(i))),()=>{const o=A()||[];return o[B],l((()=>{if(0===o.length)return 0!==t&&(q(i),i=[],C=[],E=[],t=0,e=[]),I.fallback&&(C=[H],E[0]=c((A=>(i[0]=A,I.fallback()))),t=1),E;for(C[0]===H&&(i[0](),i=[],C=[],E=[],t=0),Q=0;Qo[Q])):Q>=C.length&&(E[Q]=c(s));for(;QA.each),A.children,g||void 0))}function T(A){let g=!1;const I=A.keyed,B=h((()=>A.when),void 0,{equals:(A,I)=>g?A===I:!A==!I});return h((()=>{const Q=B();if(Q){const B=A.children,C="function"==typeof B&&B.length>0;return g=I||C,C?l((()=>B(Q))):B}return A.fallback}),void 0,void 0)}function j(A){let g=!1,I=!1;const B=M((()=>A.children)),Q=h((()=>{let A=B();Array.isArray(A)||(A=[A]);for(let g=0;gA[0]===I[0]&&(g?A[1]===I[1]:!A[1]==!I[1])&&A[2]===I[2]});return h((()=>{const[B,C,E]=Q();if(B<0)return A.fallback;const i=E.children,e="function"==typeof i&&i.length>0;return g=I||e,e?l((()=>i(C))):i}),void 0,void 0)}function W(A){return A}const Z="_$DX_DELEGATE";function X(A,g,I,B={}){let Q;return c((B=>{Q=B,g===document?A():AA(g,A(),g.firstChild?null:void 0,I)}),B.owner),()=>{Q(),g.textContent=""}}function O(A,g,I){const B=document.createElement("template");B.innerHTML=A;let Q=B.content.firstChild;return I&&(Q=Q.firstChild),Q}function z(A,g=window.document){const I=g[Z]||(g[Z]=new Set);for(let B=0,Q=A.length;BB.call(A,I[1],g))}else A.addEventListener(g,I)}function _(A,g,I){if(!g)return I?function(A,g,I){null==I?A.removeAttribute(g):A.setAttribute(g,I)}(A,"style"):g;const B=A.style;if("string"==typeof g)return B.cssText=g;let Q,C;for(C in"string"==typeof I&&(B.cssText=I=void 0),I||(I={}),g||(g={}),I)null==g[C]&&B.removeProperty(C),delete I[C];for(C in g)Q=g[C],Q!==I[C]&&(B.setProperty(C,Q),I[C]=Q);return I}function $(A,g,I){return l((()=>A(g,I)))}function AA(A,g,I,B){if(void 0===I||B||(B=[]),"function"!=typeof g)return IA(A,g,B,I);w((B=>IA(A,g(),B,I)),B)}function gA(A){const I=`$$${A.type}`;let B=A.composedPath&&A.composedPath()[0]||A.target;for(A.target!==B&&Object.defineProperty(A,"target",{configurable:!0,value:B}),Object.defineProperty(A,"currentTarget",{configurable:!0,get:()=>B||document}),g.registry&&!g.done&&(g.done=!0,document.querySelectorAll("[id^=pl-]").forEach((g=>{for(;g&&8!==g.nodeType&&g.nodeValue!=="pl-"+A;){let A=g.nextSibling;g.remove(),g=A}g&&g.remove()})));B;){const g=B[I];if(g&&!B.disabled){const Q=B[`${I}Data`];if(void 0!==Q?g.call(B,Q,A):g.call(B,A),A.cancelBubble)return}B=B._$host||B.parentNode||B.host}}function IA(A,I,B,Q,C){for(g.context&&!B&&(B=[...A.childNodes]);"function"==typeof B;)B=B();if(I===B)return B;const E=typeof I,i=void 0!==Q;if(A=i&&B[0]&&B[0].parentNode||A,"string"===E||"number"===E){if(g.context)return B;if("number"===E&&(I=I.toString()),i){let g=B[0];g&&3===g.nodeType?g.data=I:g=document.createTextNode(I),B=CA(A,B,Q,g)}else B=""!==B&&"string"==typeof B?A.firstChild.data=I:A.textContent=I}else if(null==I||"boolean"===E){if(g.context)return B;B=CA(A,B,Q)}else{if("function"===E)return w((()=>{let g=I();for(;"function"==typeof g;)g=g();B=IA(A,g,B,Q)})),()=>B;if(Array.isArray(I)){const E=[],e=B&&Array.isArray(B);if(BA(E,I,B,C))return w((()=>B=IA(A,E,B,Q,!0))),()=>B;if(g.context){if(!E.length)return B;for(let A=0;AB-i){const Q=g[E];for(;i=0;C--){const E=g[C];if(Q!==E){const g=E.parentNode===A;B||C?g&&E.remove():g?A.replaceChild(Q,E):A.insertBefore(Q,I)}else B=!0}}else A.insertBefore(Q,I);return[Q]}let EA;const iA=new Array(128).fill(void 0);function eA(A){return iA[A]}iA.push(void 0,null,!0,!1);let tA=iA.length;function oA(A){const g=eA(A);return function(A){A<132||(iA[A]=tA,tA=A)}(A),g}const sA=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});sA.decode();let nA=null;function rA(){return null!==nA&&0!==nA.byteLength||(nA=new Uint8Array(EA.memory.buffer)),nA}function aA(A,g){return sA.decode(rA().subarray(A,A+g))}function cA(A){tA===iA.length&&iA.push(iA.length+1);const g=tA;return tA=iA[g],iA[g]=A,g}function DA(A){const g=typeof A;if("number"==g||"boolean"==g||null==A)return`${A}`;if("string"==g)return`"${A}"`;if("symbol"==g){const g=A.description;return null==g?"Symbol":`Symbol(${g})`}if("function"==g){const g=A.name;return"string"==typeof g&&g.length>0?`Function(${g})`:"Function"}if(Array.isArray(A)){const g=A.length;let I="[";g>0&&(I+=DA(A[0]));for(let B=1;B1))return toString.call(A);if(B=I[1],"Object"==B)try{return"Object("+JSON.stringify(A)+")"}catch(A){return"Object"}return A instanceof Error?`${A.name}: ${A.message}\n${A.stack}`:B}let wA=0;const hA=new TextEncoder("utf-8"),yA="function"==typeof hA.encodeInto?function(A,g){return hA.encodeInto(A,g)}:function(A,g){const I=hA.encode(A);return g.set(I),{read:A.length,written:I.length}};function lA(A,g,I){if(void 0===I){const I=hA.encode(A),B=g(I.length);return rA().subarray(B,B+I.length).set(I),wA=I.length,B}let B=A.length,Q=g(B);const C=rA();let E=0;for(;E127)break;C[Q+E]=g}if(E!==B){0!==E&&(A=A.slice(E)),Q=I(Q,B,B=E+3*A.length);const g=rA().subarray(Q+E,Q+B);E+=yA(A,g).written}return wA=E,Q}let GA=null;function NA(){return null!==GA&&0!==GA.byteLength||(GA=new Int32Array(EA.memory.buffer)),GA}let kA=null;function MA(A,g){return(null!==kA&&0!==kA.byteLength||(kA=new Uint32Array(EA.memory.buffer)),kA).subarray(A/4,A/4+g)}class uA{static __wrap(A){const g=Object.create(uA.prototype);return g.ptr=A,g}__destroy_into_raw(){const A=this.ptr;return this.ptr=0,A}free(){const A=this.__destroy_into_raw();EA.__wbg_vtwrapper_free(A)}feed(A){const g=lA(A,EA.__wbindgen_malloc,EA.__wbindgen_realloc),I=wA;return oA(EA.vtwrapper_feed(this.ptr,g,I))}inspect(){try{const I=EA.__wbindgen_add_to_stack_pointer(-16);EA.vtwrapper_inspect(I,this.ptr);var A=NA()[I/4+0],g=NA()[I/4+1];return aA(A,g)}finally{EA.__wbindgen_add_to_stack_pointer(16),EA.__wbindgen_free(A,g)}}get_size(){try{const B=EA.__wbindgen_add_to_stack_pointer(-16);EA.vtwrapper_get_size(B,this.ptr);var A=NA()[B/4+0],g=NA()[B/4+1],I=MA(A,g).slice();return EA.__wbindgen_free(A,4*g),I}finally{EA.__wbindgen_add_to_stack_pointer(16)}}get_line(A){return oA(EA.vtwrapper_get_line(this.ptr,A))}get_cursor(){return oA(EA.vtwrapper_get_cursor(this.ptr))}}function FA(){const A={wbg:{}};return A.wbg.__wbindgen_object_drop_ref=function(A){oA(A)},A.wbg.__wbindgen_error_new=function(A,g){return cA(new Error(aA(A,g)))},A.wbg.__wbindgen_number_new=function(A){return cA(A)},A.wbg.__wbindgen_bigint_from_u64=function(A){return cA(BigInt.asUintN(64,A))},A.wbg.__wbindgen_string_new=function(A,g){return cA(aA(A,g))},A.wbg.__wbg_set_20cbc34131e76824=function(A,g,I){eA(A)[oA(g)]=oA(I)},A.wbg.__wbg_new_b525de17f44a8943=function(){return cA(new Array)},A.wbg.__wbg_new_f841cc6f2098f4b5=function(){return cA(new Map)},A.wbg.__wbg_new_f9876326328f45ed=function(){return cA(new Object)},A.wbg.__wbindgen_is_string=function(A){return"string"==typeof eA(A)},A.wbg.__wbg_set_17224bc548dd1d7b=function(A,g,I){eA(A)[g>>>0]=oA(I)},A.wbg.__wbg_set_388c4c6422704173=function(A,g,I){return cA(eA(A).set(eA(g),eA(I)))},A.wbg.__wbindgen_debug_string=function(A,g){const I=lA(DA(eA(g)),EA.__wbindgen_malloc,EA.__wbindgen_realloc),B=wA;NA()[A/4+1]=B,NA()[A/4+0]=I},A.wbg.__wbindgen_throw=function(A,g){throw new Error(aA(A,g))},A}function dA(A,g){return EA=A.exports,fA.__wbindgen_wasm_module=g,GA=null,kA=null,nA=null,EA}async function fA(A){const g=FA();("string"==typeof A||"function"==typeof Request&&A instanceof Request||"function"==typeof URL&&A instanceof URL)&&(A=fetch(A));const{instance:I,module:B}=await async function(A,g){if("function"==typeof Response&&A instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(A,g)}catch(g){if("application/wasm"==A.headers.get("Content-Type"))throw g;console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",g)}const I=await A.arrayBuffer();return await WebAssembly.instantiate(I,g)}{const I=await WebAssembly.instantiate(A,g);return I instanceof WebAssembly.Instance?{instance:I,module:A}:I}}(await A,g);return dA(I,B)}var YA=Object.freeze({__proto__:null,VtWrapper:uA,create:function(A,g){const I=EA.create(A,g);return uA.__wrap(I)},default:fA,initSync:function(A){const g=FA();return A instanceof WebAssembly.Module||(A=new WebAssembly.Module(A)),dA(new WebAssembly.Instance(A,g),A)}});const RA=[62,0,0,0,63,52,53,54,55,56,57,58,59,60,61,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,0,0,0,0,0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];function JA(A){return RA[A-43]}const SA=function(A){let g,I=A.endsWith("==")?2:A.endsWith("=")?1:0,B=A.length,Q=new Uint8Array(B/4*3);for(let I=0,C=0;I>16,Q[C+1]=g>>8&255,Q[C+2]=255&g;return Q.subarray(0,Q.length-I)}("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IAFBDGoiCEEGaiEJA0AgASADQRRqNgIcAkAgAS0ADCICQQJGBEBBqcHAAC0AABpBBEEEELYBIgJFDQUgAiADKAIANgIAIAQgAykCBDcDACAEIANBCmopAQA3AQYCQCAILQAAQQJGDQAgASgCBEUNACABKAIAEBALIAFCgYCAgBA3AgQgASACNgIAIAggBCkDADcCACAJIAQpAQY3AQAMAQsgA0EEaiEHQQAgASACQQJGGyICQRFqLQAAIQUCQAJAAkACQCADQQlqLQAAIgZBAkYNACAFQQJGDQAgBSAGRw0CIAZFBEAgA0EKai0AACACQRJqLQAARg0CDAMLIANBCmotAAAgAkESai0AAEcNAiADQQtqLQAAIAJBE2otAABHDQIgA0EMai0AACACQRRqLQAARg0BDAILIAZBAkcNASAFQQJHDQELIAJBFWotAAAhBQJAAkAgA0ENai0AACIGQQJGDQAgBUECRg0AIAUgBkcNAiAGRQRAIANBDmotAAAgAkEWai0AAEYNAgwDCyADQQ5qLQAAIAJBFmotAABHDQIgA0EPai0AACACQRdqLQAARw0CIANBEGotAAAgAkEYai0AAEYNAQwCCyAGQQJHDQEgBUECRw0BCyADQRFqLQAAIAJBGWotAABHDQAgBy0AAEUgAi0ADEEAR0YNACADQQVqLQAARSACQQ1qLQAAQQBHRg0AIANBBmotAABFIAJBDmotAABBAEdGDQAgA0EHai0AAEUgAkEPai0AAEEAR0YNACADQQhqLQAARSACQRBqLQAAQQBHcw0BC0GpwcAALQAAGkEEQQQQtgEiAkUNBSACIAMoAgA2AgAgACABKQIANwIAIAdBBmopAQAhCiAHKQIAIQsgASACNgIAIAFBCGopAgAhDCABQoGAgIAQNwIEIABBCGogDDcCACAAQRBqIAFBEGopAgA3AgAgAEEYaiABQRhqKAIANgIAIAQgCzcDACAEIAo3AQYgCCAEKQMANwIAIAhBBmogBCkBBjcBAAwECyADKAIAIQcgAigCCCIDIAIoAgRGBEAgAiADEG0gAigCCCEDCyACKAIAIANBAnRqIAc2AgAgAiACKAIIQQFqNgIICyABKAIcIgMgASgCIEcNAAsLIAAgASkCADcCACAAQRhqIAFBGGooAgA2AgAgAEEQaiABQRBqKQIANwIAIABBCGog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CyEBIAIgADYCCCABIAA2AgwgACACNgIMIAAgATYCCAv0AwEGfyMAQTBrIgQkAAJAAkACQAJAAkACQCABKAIEIgJFDQAgASgCACEGIAJBAWtB/////wFxIgJBAWoiBUEHcSEHIAJBB0kEfyAGBSAGQTxqIQIgBUH4////A3EhBQNAIAIoAgAgAkEIaygCACACQRBrKAIAIAJBGGsoAgAgAkEgaygCACACQShrKAIAIAJBMGsoAgAgAkE4aygCACADampqampqamohAyACQUBrIQIgBUEIayIFDQALIAJBPGsLIQIgBwRAIAJBBGohAgNAIAIoAgAgA2ohAyACQQhqIQIgB0EBayIHDQALCyABQQxqKAIABEAgA0EASA0BIAYoAgRFIANBEElxDQEgA0EBdCEDCyADDQELQQEhAkEAIQMMAQsgA0EASA0BQanBwAAtAAAaIANBARC2ASICRQ0CCyAEQQA2AgggBCADNgIEIAQgAjYCACAEIAQ2AgwgBEEQaiICQRBqIAFBEGopAgA3AwAgAkEIaiABQQhqKQIANwMAIAQgASkCADcDECAEQQxqQeCjwAAgAhAXRQ0CQcCkwABBMyAEQShqQfSkwABBnKXAABBOAAsQgwEAC0EBIANBzMHAACgCACIAQdMAIAAbEQIAAAsgACAEKQMANwIAIABBCGogBEEIaigCADYCACAEQTBqJAAL7gMBBX8jAEEwayIDJAACQCAALQC9AUUNACAALQC/AUUNACAAQQA6AL8BIABBADYCKCAAKAIsQQFqIgIgACgCJEcEQCAAQQA6AL8BIAAgAjYCLAwBCyAAQQEQUgsCQAJAAkAgAAJ/AkAgACgCMCICQQJJBEACQCABQeAAayIFQR5LDQAgACACakG3AWotAABFDQAgBUECdEHslcAAaigCACEBCyADIAApAKkBNwMIIAMgAEGvAWopAAA3AQ4gACgCKCICQQFqIgUgACgCICIETw0BIAAtALsBBEAgAEHcAGooAgAiBiAAKAIsIgRNDQUgACgCVCAEQQxsaiIGKAIIIgQgAkkNBiAGKAIAIAJBFGxqIAQgAmtBARCJASAAKAIoIQILIAAoAiwhBCADQSJqIAMpAQ43AQAgAyABNgIYIAMgAykDCDcCHCAAIAIgBCADQRhqEFNBAAwCCyACQQJBrIjAABBXAAsgACgCLCEC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BkEBdCIFIAIgAiAFSRsiAkEIIAJBCEsbIgVBf3NBH3YhAgJAIAYEQCAAIAY2AhggAEEBNgIUIAAgAygCADYCEAwBCyAAQQA2AhQLIAAgAiAFIABBEGoQPCAAKAIEIQIgACgCAEUEQCADIAI2AgAgA0EEaiAFNgIADAILIAJBgYCAgHhGDQEgAkUNACACIABBCGooAgBBzMHAACgCACIAQdMAIAAbEQIAAAsQgwEACyAAQSBqJAAgAygCCCECCyADIAJBAWo2AgggAygCACACaiABOgAADAELIARBADYCDAJ/IAFBgBBPBEAgAUGAgARPBEAgBCABQT9xQYABcjoADyAEIAFBBnZBP3FBgAFyOgAOIAQgAUEMdkE/cUGAAXI6AA0gBCABQRJ2QQdxQfABcjoADEEEDAILIAQgAUE/cUGAAXI6AA4gBCABQQx2QeABcjoADCAEIAFBBnZBP3FBgAFyOgANQQMMAQsgBCABQT9xQYABcjoADSAEIAFBBnZBwAFyOgAMQQILIQAgACADKAIEIAMoAggiAmtLBEAgAyACIAAQNSADKAIIIQILIAMoAgAgAmogBEEMaiAAENkBGiADIAAgAmo2AggLIARBEGokAEEAC8ACAgV/AX4jAEEwayIEJABBJyECAkAgAEKQzgBUBEAgACEHDAELA0AgBEEJaiACaiIDQQRrIAAgAEKQzgCAIgdCkM4Afn2nIgVB//8DcUHkAG4iBkEBdEH6qcAAai8AADsAACADQQJrIAUgBkHkAGxrQf//A3FBAXRB+qnAAGovAAA7AAAgAkEEayECIABC/8HXL1YgByEADQALCyAHpyIDQeMASwRAIAenIgVB//8DcUHkAG4hAyACQQJrIgIgBEEJamogBSADQeQAbGtB//8DcUEBdEH6qcAAai8AADsAAAsCQCADQQpPBEAgAkECayICIARBCWpqIANBAXRB+qnAAGovAAA7AAAMAQsgAkEBayICIARBCWpqIANBMGo6AAALIAFB4KbAAEEAIARBCWogAmpBJyACaxAVIARBMGokAAvFAgEGfiAAKQMIIgQgATUCAEKAgICAgICAgASEIgaFQvPK0cunjNmy9ACFIgIgACkDACIDQuHklfPW7Nm87ACFfCIFIAJCEImFIQIgAiADQvXKzYPXrNu38wCFIARC7d6R85bM3LfkAIUiA3wi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AE4EQCADKAIERQ0CIANBCGooAgAiBA0BIAINAyABDAQLIABBADYCBAwFCyADKAIAIAQgASACEKwBDAILIAEgAkUNARoLQanBwAAtAAAaIAIgARC2AQsiAwRAIAAgAzYCBCAAQQhqIAI2AgAgAEEANgIADwsgACABNgIEIABBCGogAjYCAAwBCyAAQQA2AgQgAEEIaiACNgIACyAAQQE2AgALqgEBBH8jAEEQayICJAAgAkIENwMAQQghAwNAAkAgAiAENgIIAkAgBUUEQCABIANLDQEMAgsgAyADQQdqIgNLDQEgASADTQ0BCyACKAIEIARGBEAgAiAEEG0gAigCCCEECyACKAIAIARBAnRqIAM2AgBBASEFIAIoAghBAWohBCADQQFqIQMMAQsLIAAgAikDADcCACAAQQhqIAJBCGooAgA2AgAgAkEQaiQAC9ABAgN/AX4jAEHQAGsiACQAIABBMzYCBCAAQYiBwAA2AgAgAEEANgIgIABCATcDGCAAQShqIgFBAzoAICABQSA2AhAgAUEANgIcIAEgAEEYajYCFCABQQA2AgggAUEANgIAIAFBGGpBvIHAADYCACAAKAIAIAAoAgQgARDVAQRAQdSBwABBNyAAQQhqQYyCwABB6ILAABBOAAsgAEEIaiIBQQhqIABBIGooAgAiAjYCACAAIAApAxgiAzcDCCADpyACEAEgARCgASAAQdAAaiQAC6ABAQJ/IwBBQGoiAiQAAkAgAQRAIAEoAgAiA0F/Rg0BIAEgA0EBajYCACACQRxqQgE3AgAgAkEBNgIUIAJB6IPAADYCECACQQc2AiwgAiABQQhqNgIoIAIgAkEoajYCGCACQTBqIgMgAkEQahAcIAEgASgCAEEBazYCACACQQhqIAMQqQEgACACKQMINwMAIAJBQGskAA8LENABAAsQ0QEAC6YBAgV/AX4jAEEQayIDJAAgAC0AuQEEQCAAQQA6ALkBA0AgACABaiICQZABaiIEKAIAIQUgBCACQfgAaiICKAIANgIAIAIgBTYCACABQQRqIgFBGEcNAAsgACkCYCEGIAAgACkCVDcCYCAAIAY3AlQgAEHoAGoiASgCACECIAEgAEHcAGoiASgCADYCACABIAI2AgAgAEEAIAAoAiQQTwsgA0EQaiQAC5YBAQN/An8gAkUEQEEAIQNBAQwBCyADKAIAIQZBACEDIAIhBAJAA0ACQEF/IAEgAkEBdiADaiICQQJ0aigCACIFIAZHIAUgBkkbIgVBAUYEQCACIQQMAQsgBUH/AXFB/wFHDQIgAkEBaiEDCyAEIANrIQIgAyAESQ0AC0EBDAELIAIhA0EACyEEIAAgAzYCBCAAIAQ2AgALkgEBA38jAEGAAWsiAyQAIAAtAAAhAkEAIQADQCAAIANqQf8AaiACQQ9xIgRBMEE3IARBCkkbajoAACAAQQFrIQAgAkH/AXEiBEEEdiECIARBD0sNAAsgAEGAAWoiAkGBAU8EQCACQYABQeipwAAQWAALIAFB+KnAAEECIAAgA2pBgAFqQQAgAGsQFSADQYABaiQAC5MBAQN/IwBBgAFrIgMkACAALQAAIQJBACEAA0AgACADakH/AGogAkEPcSIEQTBB1wAgBEEKSRtqOgAAIABBAWshACACQf8BcSIEQQR2IQIgBEEPSw0ACyAAQYABaiICQYEBTwRAIAJBgAFB6KnAABBYAAsgAUH4qcAAQQIgACADakGAAWpBACAAaxAVIANBgAFqJAALiQEBA38jAEGAAWsiAyQAIAAoAgAhAANAIAIgA2pB/wBqIABBD3EiBEEwQdcAIARBCkkbajoAACACQQFrIQIgAEEPSyAAQQR2IQANAAsgAkGAAWoiAEGBAU8EQCAAQYABQeipwAAQWAALIAFB+KnAAEECIAIgA2pBgAFqQQAgAmsQFSADQYABaiQAC4gBAQN/IwBBgAFrIgMkACAAKAIAIQADQCACIANqQf8AaiAAQQ9xIgRBMEE3IARBCkkbajoAACACQQFrIQIgAEEPSyAAQQR2IQANAAsgAkGAAWoiAEGBAU8EQCAAQYABQeipwAAQWAALIAFB+KnAAEECIAIgA2pBgAFqQQAgAmsQFSADQYABaiQAC64DAQd/IwBBMGsiBCQAIAQgAjcDCCAAIQgCQAJAIAEtAAJFBEAgAkKAgICAgICAEFQNASAEQRxqQgE3AgAgBEECNgIUIARBmIXAADYCECAEQQs2AiwgBCAEQShqNgIYIAQgBEEIajYCKEEBIQEjAEEgayIFJAAgBEEQaiIAQQxqKAIAIQMCQAJAAn8CQAJAIAAoAgQOAgABAwsgAw0CQQAhA0GohcAADAELIAMNASAAKAIAIgAoAgQhAyAAKAIACyEAIAVBCGohBgJAIANFBEBBASEHDAELIANBAE4iCQRAQanBwAAtAAAaIAMgCRC2ASIHDQEgCSADQczBwAAoAgAiAEHTACAAGxECAAALEIMBAAsgBiADNgIEIAYgBzYCACAFKAIMIQcgBSgCCCIGIAAgAxDZASEAIAUgAzYCGCAFIAc2AhQgBSAANgIQDAELIAVBEGogABAcIAUoAhghAyAFKAIQIQYLIAYgAxABIQAgBUEQahCgASAFQSBqJAAMAgtBACEBIAIQAyEADAELQQAhASACuhACIQALIAggADYCBCAIIAE2AgAgBEEwaiQAC5gBAgR/AX4jAEEgayICJAAgAUEEaiEDIAEoAgRFBEAgASgCACEBIAJBEGoiBEEIaiIFQQA2AgAgAkIBNwMQIAIgBDYCHCACQRxqQcSgwAAgARAXGiACQQhqIAUoAgAiATYCACACIAIpAxAiBjcDACADQQhqIAE2AgAgAyAGNwIACyAAQYCiwAA2AgQgACADNgIAIAJBIGokAAusBAEJfyMAQSBrIgIkAAJAIAEEQCABKAIAIgNBf0YNASABIANBAWo2AgAgAkEQaiEDIAFBCGohBEGpwcAALQAAGkEIQQQQtgEiBUUEQEEEQQhBzMHAACgCACIAQdMAIAAbEQIAAAsgA0KCgICAIDcCBCADIAU2AgAgBSAEKQMgNwIAIAJBCGoiCiADQQhqKAIANgIAIAIgAikDEDcDACABIAEoAgBBAWs2AgAjAEEQayIGJAACQAJAAkAgAigCCCIFIAIoAgRPDQAgBkEIaiEIIwBBIGsiBCQAAkAgBSACKAIETQRAIARBCGohAQJAIAIoAgQiAwRAIAFBBDYCBCABIANBAnQ2AgggASACKAIANgIADAELIAFBADYCBAsCQCAEKAIMIgMEQCAFQQJ0IQcgBCgCECEBIAQoAgghCQJ/IAVFBEAgAQRAIAkQEAsgAwwBCyAJIAEgAyAHEKwBCyIBRQ0BIAIgBTYCBCACIAE2AgALQYGAgIB4IQMLIAggBzYCBCAIIAM2AgAgBEEgaiQADAELIARBFGpCADcCACAEQQE2AgwgBEGkgMAANgIIIARBgIDAADYCECAEQQhqQfiAwAAQhAEACyAGKAIIIgFBgYCAgHhGDQAgAUUNASABIAYoAgxBzMHAACgCACIAQdMAIAAbEQIAAAsgBkEQaiQADAELEIMBAAsgACAKKAIANgIEIAAgAigCADYCACACQSBqJAAPCxDQAQALENEBAAvBAgEGfyMAQTBrIgQkACAEIAIQSyAEQQhqIgNBCGoiCEEANgIAIAQgBCkDADcDCCAEQRhqIgZBEGogAUEQaigCADYCACAGQQhqIAFBCGopAgA3AwAgBCABKQIANwMYIAMiASgCCCEDIAIgASgCBCADa0sEQCABIAMgAhBwIAEoAgghAwsgASgCACADQRRsaiEFIAJBAk8EQCACQQFrIQcDQCAFIAYpAgA3AgAgBUEQaiAGQRBqKAIANgIAIAVBCGogBkEIaikCADcCACAFQRRqIQUgB0EBayIHDQALIAIgA2pBAWshAwsgAgRAIAUgBikCADcCACAFQRBqIAZBEGooAgA2AgAgBUEIaiAGQQhqKQIANwIAIANBAWohAwsgASADNgIIIABBCGogCCgCADYCACAAIAQpAwg3AgAgBEEwaiQAC4QBAQN/AkAgAUUEQEEEIQIMAQsCfwJAAkAgAUGr1arVAEkiAkUNACABQQxsIgNBAEgNACACQQJ0IQQgA0UNAUGpwcAALQAAGiADIAQQtgEMAgsQgwEACyAECyICDQAgBCADQczBwAAoAgAiAEHTACAAGxECAAALIAAgATYCBCAAIAI2AgALgwEBA38CQCABRQRAQQQhAgwBCwJ/AkACQCABQefMmTNJIgJFDQAgAUEUbCIDQQBIDQAgAkECdCEEIANFDQFBqcHAAC0AABogAyAEELYBDAILEIMBAAsgBAsiAg0AIAQgA0HMwcAAKAIAIgBB0wAgABsRAgAACyAAIAE2AgQgACACNgIAC4QBAQN/AkAgAUUEQEECIQIMAQsCfwJAAkAgAUGAgICABEkiAkUNACABQQF0IgNBAEgNACACQQF0IQQgA0UNAUGpwcAALQAAGiADIAQQtgEMAgsQgwEACyAECyICDQAgBCADQczBwAAoAgAiAEHTACAAGxECAAALIAAgATYCBCAAIAI2AgALuFcCE38BfiMAQSBrIg8kAAJAIAAEQCAAKAIADQEgAEF/NgIAIA8gAjYCGCAPIAI2AhQgDyABNgIQIA9BCGogD0EQahCpASAPKAIIIRQgDygCDCMAQSBrIg4kACAOQQhqIRAgFCEIIRMjAEEgayIMJAAgAEEIaiIDKAIEIgEEQCADKAIAQf8BIAFBCWoQ1wEaCyADQQA6AMABIANBADYCDCADIAEgAUEBakEDdkEHbCABQQhJGzYCCCATBEAgCCATaiEVA0ACQAJ/IAgsAAAiAUEATgRAIAFB/wFxIQEgCEEBagwBCyAILQABQT9xIQQgAUEfcSECIAFBX00EQCACQQZ0IARyIQEgCEECagwBCyAILQACQT9xIARBBnRyIQQgAUFwSQRAIAQgAkEMdHIhASAIQQNqDAELIAJBEnRBgIDwAHEgCC0AA0E/cSAEQQZ0cnIiAUGAgMQARg0BIAhBBGoLIQgCQAJAAkACQAJAAkACQAJAAkACQAJAQcEAIAEgAUGfAUsbIgJB0ABrIgRBD01BAEEBIAR0QYH+A3EbDQACQAJAAkACQAJAAkACQAJAIAJBkAFrDhAKAQEBAQEBAQUCAgsMBAUFAAsgAkEYaw4EAQUBAgALIAJBcHFBgAFGDQAgAkGRAWtBBksNBQsgA0EAOgCoAQwGCyADQQE6AKgBIAMQaQwOCyADQQw6AKgBDA0LIANBDToAqAEMDAsgAy0AqAFFDQIMAQsgAy0AqAENACACQRhJDQEgAkF8cUEcRg0BCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAy0AqAEODQwLCgcGBQQDAgAdHQEdCyACQXBxIgRBIEYNEiAEQTBGDRggAkFAakE/Tw0cDBcLIAJBB0cNGwwVCyACQXBxQSBGDQogAkEwa0EKSQ0FAkAgAkE6aw4CFwYACyACQXxxQTxGDRYgAkFAakE+Sw0aDBULIAJBcHFBIEYNCgJAAkAgAkEwa0EKSQ0AIAJBOmsOAhcAAQsgA0EIOgCoAQwFCyACQXxxQTxGDQsgAkFAakE/Tw0ZDBQLIAJBGEkNDyACQRlGDQ8gAkF8cUEcRg0PIAJBQGpBPksNGAwSCyACQRhJDQ4gAkEZRg0OIAJBfHFBHEYNDiACQXBxIgRBMEYNFSAEQSBGDQ0gAkFAakE/Tw0XDBQLIAJBGEkNDQJAIAJBOmsOAhUCAAsgAkEZRg0NIAJBfHEiBEEcRg0NIAJBcHFBIEYNCSACQTBrQQpJDQEgBEE8Rg0UIAJBQGpBPksNFgwTCyACQRhJDQwCQAJAIAJBOmsOAhUBAAsgAkEZRg0NIAJBfHEiBEEcRg0NIAJBcHFBIEYNCiACQTBrQQpPDQILIANBBDoAqAELAkAgAUE7RgRAIANBxABqKAIAIgEgA0FAaygCAEYEQCADQTxqIAEQbiADKAJEIQELIAMoAjwgAUEBdGpBADsBACADIAMoAkRBAWo2AkQMAQsgA0HEAGooAgAiBEEBayECIAQEQCADKAI8IAJBAXRqIgIgAi8BAEEKbCABakEwazsBAAwBCyACQQBBzIjAABBXAAsMFAsgBEE8Rg0IIAJBQGpBP08NEwwQCyACQRhJDQkgAkEZRg0JIAJBfHFBHEYNCSACQXBxQSBGDQggAkEwa0HPAE8NEgwRCyACQRhJDQgCQAJAAkACQAJAIAJB0ABrDhAOAQEBAQEBAQMVFQ8VAgMDAAsgAkEZRg0MCyACQXxxQRxGDQsgAkFwcUEgRg0CIAJB4ABrQR9JDRMgAkEwa0EgSQ0TIAJB0QBrQQdPDRQMEwsgA0EMOgCoAQwTCyADQQ06AKgBDBILIANBAjoAqAEMBwsgAkEga0HgAE8NECADIAEQHQwQCyADQQk6AKgBDAULIANBCToAqAEMBAsgA0EIOgCoAQwDCyADQQU6AKgBDAILIANBBToAqAEMAQsgA0EEOgCoAQsgA0HQAGooAgAiAiADQcwAaigCAEYEQCADQcgAaiACEG0gAygCUCECCyADKAJIIAJBAnRqIAE2AgAgAyADKAJQQQFqNgJQDAkLIAMgARAeDAgLIANBBzoAqAEgAxBpDAcLIANBAzoAqAEgAxBpDAYLIANBADoAqAEMBQsgA0EKOgCoAQwECyADQQs6AKgBDAMLIANBADoAqAFBACEEQQAhBUEAIQojAEEQayILJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADQdAAaigCACICRQRAIAFBQGoONh8KHg0dHBsaCRkYFxYVIiIUIiITEiIiERAiDyIiIiIiDg0MIgsKCQgHIiIiBgUiIiIiBAMCASILIAMoAkhBACACGyECAkACQCABQewAaw4FASMjIyEACyABQegARg0hDCILIAIoAgBBP0cNISADKAI8IQIgC0EIaiADQcQAaigCACIBEEwgCygCDCALKAIIIAIgAUEBdCIEENkBIQIgAQRAIANBqQFqIQUgA0GAAWohBiACIQEDQAJAAkAgAS8BACIHQZYITQRAAkACQAJAAkAgB0EGaw4CAQIACyAHQRlGDQIgB0EvRg0EDAULIANBADoAvwEgA0IANwMoIANBADoAvAEMBAsgA0EAOgC9AQwDCyADQQA6ALoBDAILAkACQCAHQZcIaw4DAgEAAwsgAxBAIANBADoAvwEgAyADKQN4NwMoIAUgBikAADcAACAFQQZqIAZBBmopAAA3AAAgAyADLwGOATsBvAEgAxAYDAILIANBADoAvwEgAyADKQN4NwMoIAUgBikAADcAACADIAMvAY4BOwG8ASAFQQZqIAZBBmopAAA3AAAMAQsgAxBAIAMQGAsgAUECaiEBIARBAmsiBA0ACwtFDSEgAhAQDCELIANBADoAvwEgAyADKQN4NwMoIAMgA0GAAWopAAA3AKkBIANBrwFqIANBhgFqKQAANwAAIAMgA0GOAWovAQA7AbwBDCALIAMoAjwiAUGMisAAIANBxABqKAIAIgIbLwEAQQhGBEAgAUECakGMisAAIAJBAUsbLwEAIgYgAygCJCIFIAYbQf//A3EhByABQQRqQYyKwAAgAkECSxsvAQAiAiADKAIgIgEgAhtB//8DcSEGAkACQAJAAkBBfyABIAZHIAEgBksbQf8BcQ4CAwEACyADQfQAaigCACIBBEAgAygCbCEKIAEhAgNAIAogAUEBdiAEaiIBQQJ0aigCACAGSSEJIAIgASAJGyICIAFBAWogBCAJGyIEayEBIAIgBEsNAAsLIAMgBDYCdAwBCyADQewAaiEEQQAhAiABQXhxQQhqIQEDQAJAAkAgAkEBcUUEQCABIAZJDQEMAgsgASICQQdqIgEgAkkNASABIAZPDQELIAQoAggiAiAEKAIERgRAIAQgAhBtIAQoAgghAgsgBCgCACACQQJ0aiABNgIAQQEhAiAEIAQoAghBAWo2AgggAUEBaiEBDAELCyADKAIkIQULIANBAToAwAELIAUgB0cEQCADQQE6AMABIANBADYCNCADIAdBAWs2AjgLIAMgBzYCJCADIAY2AiAgAxAYCwwfCyADQfwAaiADKAIsNgIAIANBgAFqIAMpAKkBNwAAIANBjgFqIAMvAbwBOwEAIANBhgFqIANBrwFqKQAANwAAIAMgAygCKCIBIAMoAiBBAWsiAiABIAJJGzYCeAweCwJAQQAgAygCPCIBQYyKwAAgA0HEAGooAgAiAhsvAQAiBEEBayIFIAQgBUkbIgQgAUECakGMisAAIAJBAUsbLwEAIgEgAygCJCICIAEbQQFrQf//A3EiAUkgASACSXFFBEAgAygCNCEBDAELIAMgATYCOCADIARB//8DcSIBNgI0CyADQQA6AL8BIANBADYCKCADIAFBACADLQC8ARs2AiwMHQsCQCADQcQAaigCACIERQ0AIAMoAjwhASADQakBaiIFQQRqIQYgA0G1AWohByADQbEBaiEJA0ACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLwEAIgIOHAABAgMEBQ0GDQcNDQ0NDQ0NDQ0NDQgICQoLDQwNCyADQQA6ALYBIANBAjoAsgEgA0ECOgCuASAFQQA2AAAgBkEAOgAADA0LIANBAToAtgEMDAsgA0ECOgC2AQwLCyAFQQE6AAAMCgsgA0EBOgCqAQwJCyADQQE6AKwBDAgLIANBAToArQEMBwsgA0EBOgCrAQwGCyADQQA6ALYBDAULIAVBADoAAAwECyADQQA6AKoBDAMLIANBADoArAEMAgsgA0EAOgCtAQwBCyACQR5rIgpB//8DcUEITwRAAkACQAJAAkACQAJAAkACQAJAAkAgAkEmaw4CAAECCyAEQQJPDQIMDQsgA0ECOgCuAQwJCyACQfj/A3FBKEYNBgJAAkACQCACQTBrDgICAAELIANBAjoAsgEMCgsgAkHaAGtB//8DcUEISQ0GIAJB5ABrQf//A3FBB0sNCSADQQA6ALIBIAMgAkHcAGs6ALMBDAkLIARBAkkNCwJAAkACQCABQQJqIgIvAQBBAmsOBAIAAAEACyAEQQFrIQQgAgwLCyAEQQNJDQwgAyABLQAEOgCzASADQQA6ALIBDAULIARBBU8NAgwBCwJAAkACQCABQQJqIgIvAQBBAmsOBAIAAAEACyAEQQFrIQQgAgwKCyAEQQNJDQsgAyABLQAEOgCvASADQQA6AK4BDAQLIARBBUkNACABLQAEIQIgAS8BBiEKIAkgAS8BCDoAACADQQE6AK4BIAMgAiAKQQh0cjsArwEMAgsgBEECayEEIAFBBGoMBwsgAS0ABCECIAEvAQYhCiAHIAEvAQg6AAAgA0EBOgCyASADIAIgCkEIdHI7ALMBCyAEQQVrIQQgAUEKagwFCyAEQQNrIQQgAUEGagwECyADQQA6AK4BIAMgAkHSAGs6AK8BDAILIANBADoAsgEgAyACQShrOgCzAQwBCyADQQA6AK4BIAMgCjoArwELIARBAWshBCABQQJqCyEBIAQNAAsLDBwLIwBBEGsiBSQAIAMoAjwhAiAFQQhqIANBxABqKAIAIgEQTCAFKAIMIAUoAgggAiABQQF0IgQQ2QEhAiABBEAgAiEBA0ACQAJAIAEvAQAiB0EERwRAIAdBFEYNAQwCCyADQQA6ALsBDAELIANBADoAvgELIAFBAmohASAEQQJrIgQNAAsLBEAgAhAQCyAFQRBqJAAMGwsjAEEQayIFJAAgAygCPCECIAVBCGogA0HEAGooAgAiARBMIAUoAgwgBSgCCCACIAFBAXQiBBDZASECIAEEQCACIQEDQAJAAkAgAS8BACIHQQRHBEAgB0EURg0BDAILIANBAToAuwEMAQsgA0EBOgC+AQsgAUECaiEBIARBAmsiBA0ACwsEQCACEBALIAVBEGokAAwaCwJAAkACQCADKAI8QYyKwAAgA0HEAGooAgAbLwEADgQAAgIBAgsgA0HsAGogAygCKBB7DAELIANB9ABqQQA2AgALDBkLIANBADoAvwEgAyADKAI8IgJBjIrAACADQcQAaigCACIEGy8BACIBQQEgARsgAygCNEEAIAMtALwBIgUbIgFqQQFrIgYgASABIAZJGyIBIAMoAjggAygCJEEBayAFGyIFIAEgBUkbNgIsIAMgAkECakGMisAAIARBAUsbLwEAIgFBASABG0EBayICIAMoAiAiBEEBayIBIAIgBEkbIgIgASABIAJLGzYCKAwYCyADQQA6AL8BIAMgAygCKCIBIAMoAiBBAWsiAiABIAJJGzYCKCADQQAgAygCNCIBIAEgAygCLCIBSxsiAiABIAMoAjxBjIrAACADQcQAaigCABsvAQAiAUEBIAEbayIBIAEgAkgbNgIsDBcLIANBADoAvwEgAyADKAIoIgEgAygCIEEBayICIAEgAkkbNgIoIAMgAygCNEEAIAMtALwBIgIbIgFBACADKAI8QYyKwAAgA0HEAGooAgAbLwEAIgRBAWsiBSAEIAVJG2oiBCABIAEgBEkbIgEgAygCOCADKAIkQQFrIAIbIgIgASACSRs2AiwMFgsCQCADKAIoIgJFDQACQCADQdwAaigCACIEIAMoAiwiAUsEQCADKAJUIAFBDGxqIgQoAggiBSACQQFrIgFNDQEgBCgCACABQRRsaigCACEEQQAhASADKAI8QYyKwAAgA0HEAGooAgAbLwEAIQIDQCADIAQQHSACRQ0DIAIgAUEBaiIBQf//A3FLDQALDAILIAEgBEHMicAAEFcACyABIAVBzInAABBXAAsMFQsgA0EAOgC/ASADQQAgAygCKCADKAI8QYyKwAAgA0HEAGooAgAbLwEAIgFBASABG2oiASADKAIgIgJBAWsgASACSRsgAUEASBs2AigMFAsgA0EAOgC/ASADIAMoAjxBjIrAACADQcQAaigCABsvAQAiAUEBIAEbQQFrIgEgAygCICICQQFrIAEgAkkbNgIoDBMLIwBBEGsiCSQAIAlBCGohDSADKAIoIREgA0HsAGoiASgCACEFIAUgASgCCEECdGohAQJAAkACQCADKAI8QYyKwAAgA0HEAGooAgAbLwEAIgJBASACGyICQQFrIhJFDQBBASEHA0AgAUEEayECIAQiBkEBaiEEAkADQCACIgFBBGogBUYNASAHBEAgAUEEayECIAEoAgAgEU8NAQsLQQAhB0EBIQogBCASRw0BDAILCyAFIQEgBiASRw0BCwNAIAEgBUYNASABQQRrIgEoAgAhAkEBIQcgCg0CIAIgEU8NAAsMAQtBACEHCyANIAI2AgQgDSAHNgIAIAkoAgwhASAJKAIIIQIgA0EAOgC/ASADIAFBACACGyIBIAMoAiAiAkEBayABIAJJGzYCKCAJQRBqJAAMEgsgAygCICADKAIoIgFrIQIgAyABIAEgAygCPEGMisAAIANBxABqKAIAGy8BACIEQQEgBBsiBCACIAIgBEsbahB+IAMgAygCLBAuDBELAkACQAJAAkAgAygCPEGMisAAIANBxABqKAIAGy8BAA4GAAMBAwMCAwsgAygCKCIBRQ0CIAEgAygCIE8NAiADQewAaiABEHoMAgsgA0HsAGogAygCKBB7DAELIANB9ABqQQA2AgALDBALIAMgAygCPEGMisAAIANBxABqKAIAGy8BACIBQQEgARsQUQwPCyADIAMoAjxBjIrAACADQcQAaigCABsvAQAiAUEBIAEbEFIMDgsgAygCKCIBIAMoAiAiAk8EQCADQQA6AL8BIAMgAkEBayIBNgIoCwJAAkAgAygCLCIEIANB3ABqKAIAIgVJBEAgAygCVCAEQQxsaiIGKAIIIgUgAUkNASAGKAIAIAFBFGxqIQYCQCAFIAFrIgUgAygCPEGMisAAIANBxABqKAIAGy8BACIHQQEgBxtB//8DcSIHIAIgAWsiASABIAdLGyIBTwRAIAEgBiABQRRsaiAFIAFrEBYMAQtB8JvAAEEjQeCcwAAQfQALIAMgAiABayACEH4gAyAEEC4MAgsgBCAFQbyJwAAQVwALIAEgBUG8icAAEFgACwwNCyADKAI8QYyKwAAgA0HEAGooAgAbLwEAIgFBASABGyEEAkACQAJAAkACQAJAIAMoAiwiAiADKAI4IgFLBEAgAiADKAIkIgFLDQIgA0HcAGooAgAiBSABSQ0DDAELIAIgAUEBaiIBSw0DIANB3ABqKAIAIgUgAUkNBAsgBCABIAJrIgUgBCAFSRshBCADKAJUIAJBDGxqIAUgBBCPASADIAEgBGsgARApIAMgAiABEE8MBAsgAiABQayJwAAQWgALIAEgBUGsicAAEFkACyACIAFBnInAABBaAAsgASAFQZyJwAAQWQALDAwLIAMoAjxBjIrAACADQcQAaigCABsvAQAiAUEBIAEbIQQCQAJAAkACQAJAAkAgAygCLCIBIAMoAjgiBUsEQCADQdwAaigCACICIAFJDQIgAygCVCABQQxsaiACIAFrIAQgAygCJCICIAFrIgUgBCAFSRsiBBCIAQwBCyAFQQFqIgJFDQIgASACSw0DIAUgA0HcAGooAgAiBU8NBCAEIAIgAWsiBSAEIAVJGyEEIAMoAlQgAUEMbGogBSAEEIgBCyADIAEgASAEahApIAMgASACEE8MBAsgASACQYyJwAAQWAALIwBBIGsiACQAIABBFGpCADcCACAAQQE2AgwgAEHMrcAANgIIIABB4KbAADYCECAAQQhqQfyIwAAQhAEACyABIAJB/IjAABBaAAsgAiAFQfyIwAAQWQALDAsLAkACQAJAAkACQCADKAI8QYyKwAAgA0HEAGooAgAbLwEADgMAAQIECyADIAMoAiggAygCIBB+DAILIANBACADKAIoQQFqIgEgAygCICICIAEgAkkbEH4MAQsgA0EAIAMoAiAQfgsgAyADKAIsEC4LDAoLAkACQAJAAkAgAygCPEGMisAAIANBxABqKAIAGy8BAA4DAAECAwsgAyADKAIoIAMoAiAQfiADIAMoAiwiAUEBaiADKAIkIgIQKSADIAEgAhBPDAILIANBACADKAIoQQFqIgEgAygCICICIAEgAkkbEH4gA0EAIAMoAiwiARApIANBACABQQFqEE8MAQsgA0EAIAMoAiQiARApIANBACABEE8LDAkLIwBBEGsiBiQAIAZBCGohCSADKAIoIQogA0HsAGoiAigCACEBIAEgAigCCEECdGohBwJ/AkAgAygCPEGMisAAIANBxABqKAIAGy8BACICQQEgAhsiBEEBayINBEBBASEEA0AgBUEBaiEFA0AgByABIgJGDQMgBEEBcQRAIAJBBGohASACKAIAIApNDQELCyACQQRqIQFBACEEIAUgDUcNAAsgAkEEaiEBCyABIQICQANAAkAgDQ0AIAIgB0YNACACKAIAIQQgAkEEaiECIAQgCk0NAQwCCwsgAiAHRg0BIAEoAgAhBAtBAQwBC0EACyEBIAkgBDYCBCAJIAE2AgAgBigCDCEBIAYoAgghAiADQQA6AL8BIAMgASADKAIgIgFBAWsiBCACGyICIAQgASACSxs2AiggBkEQaiQADAgLIANBADoAvwEgAyADKAI8QYyKwAAgA0HEAGooAgAbLwEAIgFBASABG0EBayIBIAMoAiAiAkEBayABIAJJGzYCKAwHCyADQQA6AL8BIANBADYCKCADQQAgAygCNCIBIAEgAygCLCIBSxsiAiABIAMoAjxBjIrAACADQcQAaigCABsvAQAiAUEBIAEbayIBIAEgAkgbNgIsDAYLIANBADoAvwEgA0EANgIoIAMgAygCJEEBayADKAI4IgEgASADKAIsIgFJGyICIAEgAygCPEGMisAAIANBxABqKAIAGy8BACIEQQEgBBtqIgEgASACSxs2AiwMBQsgA0EAOgC/ASADQQAgAygCKCADKAI8QYyKwAAgA0HEAGooAgAbLwEAIgFBASABG2siASADKAIgIgJBAWsgASACSRsgAUEASBs2AigMBAsgA0EAOgC/ASADIAMoAigiASADKAIgQQFrIgIgASACSRs2AiggAyADKAIkQQFrIAMoAjgiASABIAMoAiwiAUkbIgIgASADKAI8QYyKwAAgA0HEAGooAgAbLwEAIgRBASAEG2oiASABIAJLGzYCLAwDCyMAQRBrIgQkACADKAI8QYyKwAAgA0HEAGooAgAbLwEAIQYgAygCKCEFIAMoAiAhCSAEIANBrwFqKQAANwEGIAQgAykAqQE3AwACQAJAAkAgAygCLCIBIANB3ABqKAIAIgJJBEAgAygCVCABQQxsaiICKAIIIgcgBUkNASACKAIAIAVBFGxqIgIgByAFayIHIAZBASAGGyIGIAkgBWsiBSAFIAZLGyIFEIkBIAUgB0sNAiAFBEAgAiAFQRRsaiEBA0AgAkEgNgIAIAIgBCkDADcCBCACQQpqIAQpAQY3AQAgASACQRRqIgJHDQALIAMoAiwhAQsgAyABEC4gBEEQaiQADAMLIAEgAkHciMAAEFcACyAFIAdB3IjAABBYAAsgBSAHQeyIwAAQWQALDAILIAIoAgBBIUcNASADQQE7AboBIANBADoAvAEgA0EANgCpASADQQA7ALcBIANCADcDMCADQgA3A3ggA0G2AWpBADoAACADQbIBakECOgAAIANBrQFqQYAEOwAAIANBjQFqQQA7AAAgA0GJAWpBAjoAACADQYUBakECOgAAIANB/QBqQgA3AAAgA0GPAWpBAToAACADIAMoAiRBAWs2AjgMAQsgAigCAEE/Rw0AIAMoAjwhAiALIANBxABqKAIAIgEQTCALKAIEIAsoAgAgAiABQQF0IgQQ2QEhAiABBEAgA0GAAWohBiADQakBaiEHIAIhAQNAAkACQAJAIAEvAQAiBUGWCE0EQAJAAkACQAJAIAVBBmsOAgECAAsgBUEZRg0CIAVBL0YNBAwGCyADQQE6ALwBIANBADoAvwEgA0EANgIoIAMgAygCNDYCLAwFCyADQQE6AL0BDAQLIANBAToAugEMAwsCQCAFQZcIaw4DAQIAAwsgAyADKAIsNgJ8IAYgBykAADcAACADIAMvAbwBOwGOASAGQQZqIAdBBmopAAA3AAAgAyADKAIoIgUgAygCIEEBayIKIAUgCkkbNgJ4C0EAIQUjAEEQayIKJAAgAy0AuQFFBEAgA0EBOgC5AQNAIAMgBWoiDUGQAWoiESgCACESIBEgDUH4AGoiDSgCADYCACANIBI2AgAgBUEEaiIFQRhHDQALIAMpAmAhFiADIAMpAlQ3AmAgAyAWNwJUIANB6ABqIgUoAgAhDSAFIANB3ABqIgUoAgA2AgAgBSANNgIAIANBACAFKAIAECkgA0EAIAMoAiQQTwsgCkEQaiQAIAMQGAwBCyADIAMoAiw2AnwgBiAHKQAANwAAIAMgAy8BvAE7AY4BIAZBBmogB0EGaikAADcAACADIAMoAigiBSADKAIgQQFrIgogBSAKSRs2AngLIAFBAmohASAEQQJrIgQNAAsLRQ0AIAIQEAsgC0EQaiQADAILIANBBjoAqAEMAQsgA0EAOgCoASMAQeAAayIEJAACQAJAAkACQAJAAkAgA0HQAGooAgAiAkUEQCABQWBxQcAARg0BIAFBN2sOAgIDBAsgAygCSEEAIAIbIQICQCABQTBHBEAgAUE4Rg0BIAIoAgAhAgwGCyACKAIAIgJBKEcNBSADQQE6ALcBDAYLIAIoAgAiAkEjRw0EIAMoAiQiC0UNBSAEQUBrQQRyIQZBACECA0AgAkEBaiEBIAMoAiAiBwRAQQAhBQNAIAZBADYCACAGQQRqQQA6AAAgBEEAOgBRIARBAjoATSAEQQI6AEkgBEHFADYCQCADIAUgAiAEQUBrEFMgByAFQQFqIgVHDQALCyADIAIQLiALIAEiAkcNAAsMBQsgAyABQUBrEB4MBAsgA0H8AGogAygCLDYCACADQYABaiADKQCpATcAACADQY4BaiADLwG8ATsBACADQYYBaiADQa8BaikAADcAACADIAMoAigiASADKAIgQQFrIgIgASACSRs2AngMAwsgA0EAOgC/ASADIAMpA3g3AyggAyADQYABaikAADcAqQEgA0GvAWogA0GGAWopAAA3AAAgAyADQY4Bai8BADsBvAEMAgsgAUHjAEcNASAEQRBqIgEgAygCICADKAIkEGcgBEFAayABEDggA0EAOgCoASADQTxqIQIgA0FAaygCAARAIAIoAgAQEAsgA0ICNwI8IANBxABqIgFBADYCACACQQAQbiADKAI8IAEoAgBBAXRqQQA7AQAgASABKAIAQQFqNgIAIANBzABqKAIABEAgAygCSBAQCyADQQA2AlAgA0IENwNIIANB1ABqIgEQdSADQdgAaigCAARAIAEoAgAQEAsgASAEKQMQNwIAIAFBCGogBEEYaigCADYCACADQeAAaiIBEHUgA0HkAGooAgAEQCABKAIAEBALIAEgBCkDQDcCACABQQhqIARBQGsiAUEIaigCADYCACADQQA6ALkBIAEgAygCIBA9IANB7ABqIQEgA0HwAGooAgAEQCABKAIAEBALIAEgBCkDQDcCACABQQhqIARBQGsiAUEIaiICKAIANgIAIANBAToAugEgA0IANwMoIANBADYAqQEgA0G4AWpBADoAACADQbYBakEAOwEAIANBsgFqQQI6AAAgA0GtAWpBgAQ7AAAgA0EAOgC/ASADQYCABDYAuwEgA0IANwMwIANB/QBqQgA3AAAgA0IANwN4IANBjQFqQQA7AAAgA0GPAWpBAToAACADQYkBakECOgAAIANBhQFqQQI6AAAgAyADKAIkIgVBAWs2AjggA0GVAWpCADcAACADQgA3A5ABIANBpQFqQQA7AAAgA0GnAWpBAToAACADQaEBakECOgAAIANBnQFqQQI6AAAgBBBoIAFBGGoiBiAEKQMINwMAIAFBEGoiCyAEKQMANwMAIARBADYCTCAEQgA3AkQgBEGAh8AANgJAIAFBACAFEE8gBEEgaiIBQRhqIgUgBikDADcDACABQRBqIgYgCykDADcDACABQQhqIgEgAikDADcDACAEIAQpA0A3AyAgAygCBARAIAMQggELIAMgBCkDIDcDACADQRhqIAUpAwA3AwAgA0EQaiAGKQMANwMAIANBCGogASkDADcDACADQQA6AMABDAELAkACQCACQShrDgIAAQILIANBADoAtwEMAQsgAUEwRgRAIANBAToAuAEMAQsgA0EAOgC4AQsgBEHgAGokAAsgCCAVRw0BCwsgAygCDCEFCyADKAIAIgEpAwAhFiADKAIEIQIgDCAFNgIYIAwgATYCECAMIAEgAmpBAWo2AgwgDCABQQhqNgIIIAwgFkJ/hUKAgYKEiJCgwIB/gzcDACMAQUBqIgIkAAJAIAwoAhhFBEAgEEEANgIIIBBCBDcCAAwBCyAMEFAgDEEYaiIGKAIAIQEgBiABQQFrNgIAQQRrKAIAIQcgAkEIaiELAkAgAUF/IAEbIgFBBCABQQRLGyIERQRAQQQhCAwBCwJ/AkACQCAEQYCAgIACSSIBRQ0AIARBAnQiBUEASA0AIAFBAnQhASAFRQ0BQanBwAAtAAAaIAUgARC2AQwCCxCDAQALIAELIggNACABIAVBzMHAACgCACIAQdMAIAAbEQIAAAsgCyAENgIEIAsgCDYCACACKAIMIQEgAigCCCIEIAc2AgAgAkEQaiIIQQhqIgtBATYCACACIAE2AhQgAiAENgIQIAJBIGoiAUEYaiAGKQMANwMAIAFBEGogDEEQaikDADcDACABQQhqIAxBCGopAwA3AwAgAiAMKQMANwMgIAEoAhgEQCAIKAIIIgVBAnQhBANAIAEQUCABIAEoAhhBAWsiBjYCGEEEaygCACEHIAgoAgQgBUYEQCAIIAUgBkEBaiIJQX8gCRsQbwsgCCAFQQFqIgU2AgggCCgCACAEaiAHNgIAIARBBGohBCAGDQALCyAQQQhqIAsoAgA2AgAgECACKQMQNwIACyACQUBrJAAgECADLQDAAToADCAMQSBqJAAjAEFAaiICJAAgAkEAOwEYIAJBADoAGiACQTBqIAJBGGoQpwECfwJAAkACfwJAIAIoAjAEQCACQSBqIgNBCGogAkE4aigCADYCACACIAIpAzA3AyAgAkEQaiELIwBBEGsiBCQAIAMoAgghDSAEQQhqIQcgAygCACEFIwBBMGsiASQAIBAoAgAhCCABQSBqIAUgECgCCCIFEKYBAn8CQAJAIAEoAiAEQCABQRhqIAFBKGooAgA2AgAgASABKQMgNwMQIAVBAnQhDANAIAxFDQMgDEEEayEMIAEgCDYCICAIQQRqIQggAUEIaiEJIwBBEGsiBSQAIAFBEGoiBigCCCERIAVBCGogBigCACABQSBqKAIANQIAEEYgBSgCDCEKIAUoAggiEkUEQCAGQQRqIBEgChDAASAGIAYoAghBAWo2AggLIAkgEjYCACAJIAo2AgQgBUEQaiQAIAEoAghFDQALIAEoAgwhCCABKAIUIgVBhAFJDQEgBRAADAELIAEoAiQhCAtBAQwBCyABQSBqIghBCGogAUEYaigCADYCACABIAEpAxA3AyAgASAIKAIENgIEIAFBADYCACABKAIEIQggASgCAAshBSAHIAg2AgQgByAFNgIAIAFBMGokACAEKAIMIQEgBCgCCCIIRQRAIANBBGogDSABEMABIAMgAygCCEEBajYCCAsgCyAINgIAIAsgATYCBCAEQRBqJAAgAigCEEUNASACKAIUDAILIAIoAjQhAQwDCyACQQhqIQMjAEEQayIBJAAgAkEgaiIIKAIIIQUgCCgCABogAUEIaiIEQYIBQYMBIBBBDGotAAAbNgIEIARBADYCACABKAIMIQQgASgCCCIGRQRAIAhBBGogBSAE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DQAgAUEIaiABQdAAakG/hMAAQQcQZCABKAIIRQ0AIAEoAgwhAgwBCyABQfgAaiICQRBqIAFB0ABqIgVBEGooAgA2AgAgAkEIaiAFQQhqKQMANwMAIAEgASkDUDcDeCACKAIEIQUCQCACKAIIRQ0AIAJBDGooAgAiAkGEAUkNACACEAALIAEgBTYCBCABQQA2AgAgASgCBCECIAEoAgAMAgsgASgCVCIFQYQBTwRAIAUQAAsgASgCWEUNACABQdwAaigCACIFQYQBSQ0AIAUQAAtBAQshBSAQIAI2AgQgECAFNgIAIAFBkAFqJAAgBCgCDCEBIAQoAggiAkUEQCAGQQRqIBUgARDAASAGIAYoAghBAWo2AggLIAsgAjYCACALIAE2AgQgBEEQaiQAIAMoAhBFDQEgAygCFAshASADQTBqEKABIAMoAiQiAkGEAUkNASACEAAMAQsgA0FAayIBQQhqIANBKGooAgA2AgAgAyADKQMgNwNAIANBCGoiAiABKAIENgIEIAJBADYCACADKAIMIQEgAygCCCECIANBMGoQoAEMAQtBASECCyAPIAE2AgQgDyACNgIAIANB0ABqJAAgDCgCDCEBIAwoAggiAkUEQCAKQQRqIBQgARDAASAKIAooAghBAWo2AggLIBEgAjYCACARIAE2AgQgDEEQaiQAIAcoAghFDQALIAcoAgwhCCAHKAIUIgFBhAFJDQEgARAADAELIAcoAiQhCAtBAQwBCyAHQSBqIgFBCGogB0EYaigCADYCACAHIAcpAxA3AyAgByABKAIENgIEIAdBADYCACAHKAIEIQggBygCAAshASAJIAg2AgQgCSABNgIAIAdBMGokACAJKAIEIQECQCAJKAIARQRAIAlBCGoiBCgCCCICBEAgBCgCACEIA0AgCBCgASAIQRxqIQggAkEBayICDQALCyAJKAIMBEAgCSgCCBAQCyAJQUBrJAAMAQsgCSABNgIYQZCDwABBKyAJQRhqQbyDwABB8IPAABBOAAsgACAAKAIAQQFrNgIAIAEPCxDQAQALENEBAAs6AQF/IAAoAggiAQRAIAAoAgAhAANAIABBBGooAgAEQCAAKAIAEBALIABBDGohACABQQFrIgENAAsLC6cEAQd/AkAgAARAIAAoAgAiAkF/Rg0BIAAgAkEBajYCACMAQSBrIgQkACAEQRBq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AjoAACACQa0BakGABDsAACACQY0BakEAOwAAIAJBiQFqQQI6AAAgAkGFAWpBAjoAACACQgA3A3ggAkH9AGpCADcAACACQaEBakECOgAAIAJBnQFqQQI6AAAgAkGPAWpBAToAACACQgA3A5ABIAJBlQFqQgA3AAAgAkGlAWpCgIAENwAAIAJBzABqQgA3AgAgAkHEAGpCgICAgMAANwIAIAJCAjcCPCACIAA2AiAgAiABNgIkIAJBADoAuQEgAkEBOgC6ASACQgA3AyggAkEAOwC3ASACQYCABDYAuwEgAkEAOwC/ASACQgA3AzAgAiABQQFrNgI4IAIgAykDIDcDACACQQhqIAQpAwA3AwAgAkEQaiAGKQMANwMAIAJBGGogCikDADcDACADQeAAaiQAIwBB0AFrIgAkACAAQQhqIAJByAEQ2QEaQanBwAAtAAAaQdABQQgQtgEiAUUEQEEIQdABQczBwAAoAgAiAEHTACAAGxECAAALIAFBADYCACABQQRqIABBBGpBzAEQ2QEaIABB0AFqJAAgB0HQAWokACABCysAIAEgAk8EQCACIAAgAkEMbGogASACaxATDwtBpJnAAEEjQZSawAAQfQALNQEBfyABKAIUQaenwABBASABQRhqKAIAKAIMEQEAIQIgAEEAOgAFIAAgAjoABCAAIAE2AgALNgACQCABLQAcQRBxQQR2RQRAIAEtABxBIHFBBXYNASAAIAEQxAEPCyAAIAEQRA8LIAAgARBFCzYAAkAgAS0AHEEQcUEEdkUEQCABLQAcQSBxQQV2DQEgACABEMUBDwsgACABEEMPCyAAIAEQQgsgAQF/AkAgACgCBCIBRQ0AIABBCGooAgBFDQAgARAQCwsjAAJAIAFB/P///wdNBEAgACABQQQgAhCsASIADQELAAsgAAslACAARQRAQciGwABBMhDSAQALIAAgAiADIAQgBSABKAIQEQcACxUAIAAQdSAAKAIEBEAgACgCABAQCwsjACAARQRAQciGwABBMhDSAQALIAAgAiADIAQgASgCEBEFAAsjACAARQRAQciGwABBMhDSAQALIAAgAiADIAQgASgCEBENAAsjACAARQRAQciGwABBMhDSAQALIAAgAiADIAQgASgCEBEWAAsjACAARQRAQciGwABBMhDSAQALIAAgAiADIAQgASgCEBEYAAsjACAARQRAQciGwABBMhDSAQALIAAgAiADIAQgASgCEBEaAAszACABKAIUIAAtAABBAnQiAEHYkcAAaigCACAAQaCRwABqKAIAIAFBGGooAgAoAgwRAQALMwAgASgCFCAALQAAQQJ0IgBB8JTAAGooAgAgAEHklMAAaigCACABQRhqKAIAKAIMEQEACyEAIABFBEBByIbAAEEyENIBAAsgACACIAMgASgCEBEDAAuLAQICfwJ+QbDFwAApAwBQBEAjAEEQayIBJAACfgJAIABFDQAgACgCACAAQgA3AwBBAUcNACAAKQMQIQMgACkDCAwBCyABQgI3AwggAUIBNwMAIAEpAwghAyABKQMACyEEQcDFwAAgAzcDAEG4xcAAIAQ3AwBBsMXAAEIBNwMAIAFBEGokAAtBuMXAAAsRACAAKAIEBEAgACgCABAQCwsxACABKAIUQeiWwABB75bAACAAKAIALQAAIgAbQQdBBSAAGyABQRhqKAIAKAIMEQEACxQAIABBBGooAgAEQCAAKAIAEBALCyIAIAAtAABFBEAgAUGArMAAQQUQEg8LIAFB/KvAAEEEEBILHwAgAEUEQEHIhsAAQTIQ0gEACyAAIAIgASgCEBEAAAsuACABKAIUQeOLwABB7IvAACAALQAAIgAbQQlBByAAGyABQRhqKAIAKAIMEQEACxsAEAYhAiAAQQA2AgggACACNgIEIAAgATYCAAsdAQF/EAYhAiAAQQA2AgggACACNgIEIAAgATYCAAsSACAALQAMQQJHBEAgABCgAQsLsgIBBn8jAEEQayIFJAACQAJAAkAgASgCCCICIAEoAgRPDQAgBUEIaiEGIwBBIGsiBCQAAkAgASgCBCIDIAJPBEACf0GBgICAeCADRQ0AGiABKAIAIQcCQCACRQRAQQEhAyAHEBAMAQtBASAHIANBASACEKwBIgNFDQEaCyABIAI2AgQgASADNgIAQYGAgIB4CyEDIAYgAjYCBCAGIAM2AgAgBEEgaiQADAELIARBFGpCADcCACAEQQE2AgwgBEG0n8AANgIIIARBkJ/AADYCECAEQQhqQYigwAAQhAEACyAFKAIIIgJBgYCAgHhGDQAgAkUNASACIAUoAgxBzMHAACgCACIAQdMAIAAbEQIAAAsgBUEQaiQADAELEIMBAAsgACABKAIINgIEIAAgASgCADYCAAscACABKAIUQaC6wABBBSABQRhqKAIAKAIMEQEACxQAIAAoAgAiAEGEAU8EQCAAEAALC5MHAQd/IAAhCAJAAkACQCACQQlPBEAgAiADEB8iAA0BQQAhAAwDC0EAIQAgA0HN/3tPDQJBECADQQRqIANBC0kbQQdqQXhxIQUgCEEIayIEKAIEQXhxIQEgASAEaiEHAkACQAJAAkACQAJAAkAgBC0ABEEDcQRAIAEgBU8NASAHQZDFwAAoAgBGDQIgB0GMxcAAKAIARg0DIActAARBAnFBAXYNByAHKAIEQXhxIgYgAWoiCiAFSQ0HIAogBWshCSAGQYACSQ0EIAcQJgwFCyAEKAIEQXhxIQEgBUGAAkkNBiABIAVrQYGACEkgBUEEaiABTXENBSAEKAIAGgwGCyABIAVrIgJBEEkNBCAEIAQoAgRBAXEgBXJBAnI2AgQgBCAFaiIGIAYoAgRBAXI2AgQgBiAGKAIEQQFxIAJyQQJyNgIEIAIgBmoiASABKAIEQQFyNgIEIAYgAhAbDAQLQYjFwAAoAgAgAWoiASAFTQ0EIAQgBCgCBEEBcSAFckECcjYCBCAEIAVqIgIgAigCBEEBcjYCBCACIAEgBWsiAUEBcjYCBEGIxcAAIAE2AgBBkMXAACACNgIADAMLQYTFwAAoAgAgAWoiASAFSQ0DAkAgASAFayIGQRBJBEAgBCAEKAIEQQFxIAFyQQJyNgIEIAEgBGoiASABKAIEQQFyNgIEQQAhBkEAIQIMAQsgBCAEKAIEQQFxIAVyQQJyNgIEIAQgBWoiAiACKAIEQQFyNgIEIAIgBkEBcjYCBCACIAZqIgEgBjYCACABIAEoAgRBfnE2AgQLQYzFwAAgAjYCAEGExcAAIAY2AgAMAgsgB0EMaigCACICIAdBCGooAgAiAUcEQCABIAI2AgwgAiABNgIIDAELQfzEwABB/MTAACgCAEF+IAZBA3Z3cTYCAAsgCUEQTwRAIAQgBCgCBEEBcSAFckECcjYCBCAEIAVqIgIgAigCBEEBcjYCBCACIAIoAgRBAXEgCXJBAnI2AgQgAiAJaiIBIAEoAgRBAXI2AgQgAiAJEBsMAQsgBCAEKAIEQQFxIApyQQJyNgIEIAQgCmoiASABKAIEQQFyNgIECyAEDQILIAMQDiIBRQ0CIAEgCCAEKAIEQXhxQXxBeCAELQAEQQNxG2oiACADIAAgA0kbENkBIQAgCBAQDAILIAAgCCABIAMgASADSRsQ2QEaIAgQEAwBCyAELQAEGiAEQQhqIQALIAALFAAgACACIAMQBDYCBCAAQQA2AgALjQEBAn8gACgCACIAKAIAIQIgACgCCCEDIwBBEGsiACQAIAAgARCQASADBEAgA0ECdCEBA0AgACACNgIMIAAgAEEMakGsmMAAEMYBIAJBBGohAiABQQRrIgENAAsLIAAtAAQEf0EBBSAAKAIAIgEoAhRBy6nAAEEBIAFBGGooAgAoAgwRAQALIABBEGokAAuNAQECfyAAKAIAIgAoAgAhAiAAKAIIIQMjAEEQayIAJAAgACABEJABIAMEQCADQRRsIQEDQCAAIAI2AgwgACAAQQxqQcyYwAAQxgEgAkEUaiECIAFBFGsiAQ0ACwsgAC0ABAR/QQEFIAAoAgAiASgCFEHLqcAAQQEgAUEYaigCACgCDBEBAAsgAEEQaiQACwsAIAEEQCAAEBALCxIAIAAoAgAgASABIAJqEHdBAAsTACABKAIUIAFBGGooAgAgABAXCxMAIAAoAgAgASgCACACKAIAEAsLDwAgACgCBARAIAAQggELCxQAIAAoAgAgASAAKAIEKAIMEQAACxkAAn8gAUEJTwRAIAEgABAfDAELIAAQDgsLiAEBAn8gACgCACECIAAoAgghAyMAQRBrIgAkACAAIAEQkAEgAwRAIANBDGwhAQNAIAAgAjYCDCAAIABBDGpB3JjAABDGASACQQxqIQIgAUEMayIBDQALCyAALQAEBH9BAQUgACgCACIBKAIUQcupwABBASABQRhqKAIAKAIMEQEACyAAQRBqJAALiAEBAn8gACgCACECIAAoAgghAyMAQRBrIgAkACAAIAEQkAEgAwRAIANBAXQhAQNAIAAgAjYCDCAAIABBDGpB7JjAABDGASACQQJqIQIgAUECayIBDQALCyAALQAEBH9BAQUgACgCACIBKAIUQcupwABBASABQRhqKAIAKAIMEQEACyAAQRBqJAALiAEBAn8gACgCACECIAAoAgghAyMAQRBrIgAkACAAIAEQkAEgAwRAIANBAnQhAQNAIAAgAjYCDCAAIABBDGpB/JjAABDGASACQQRqIQIgAUEEayIBDQALCyAALQAEBH9BAQUgACgCACIBKAIUQcupwABB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YXAga2V5IGlzIG5vdCBhIHN0cmluZyBhbmQgY2Fubm90IGJlIGFuIG9iamVjdCBrZXkAAQAAAAwAAAAEAAAAAgAAAAMAAAAEAAAAYSBEaXNwbGF5IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9yIHVuZXhwZWN0ZWRseQAFAAAAAAAAAAEAAAAGAAAAL3J1c3RjL2ViMjYyOTZiNTU2Y2VmMTBmYjcxM2EzOGYzZDE2Yjk4ODYwODBmMjYvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzABwBEABLAAAA3AkAAA4AAABgdW53cmFwX3Rocm93YCBmYWlsZWQAAABjYWxsZWQgYFJlc3VsdDo6dW53cmFwKClgIG9uIGFuIGBFcnJgIHZhbHVlAAgAAAAEAAAABAAAAAkAAABzcmMvbGliLnJzAADMARAACgAAABsAAAAwAAAAkAEQAAAAAADMARAACgAAACgAAAAtAAAAzAEQAAoAAAAtAAAALwAAAGZnYmdmYWludAFib2xkaXRhbGljdW5kZXJsaW5lc3RyaWtldGhyb3VnaGJsaW5raW52ZXJzZXJnYigsKUYCEAAEAAAASgIQAAEAAABKAhAAAQAAAEsCEAABAAAAIGNhbid0IGJlIHJlcHJlc2VudGVkIGFzIGEgSmF2YVNjcmlwdCBudW1iZXJsAhAAAAAAAGwCEAAsAAAARXJyb3IAAAAMAAAABAAAAAQAAAANAAAAVHJpZWQgdG8gc2hyaW5rIHRvIGEgbGFyZ2VyIGNhcGFjaXR5wAIQACQAAAAvcnVzdGMvZWIyNjI5NmI1NTZjZWYxMGZiNzEzYTM4ZjNkMTZiOTg4NjA4MGYyNi9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjLnJz7AIQAEwAAACuAQAACQAAAGNsb3N1cmUgaW52b2tlZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkAAAAAAAA//////////8aAAAAYXNzZXJ0aW9uIGZhaWxlZDogY29scyA+IDAvaG9tZS9tYXJjaW4vLmNhcmdvL2dpdC9jaGVja291dHMvYXZ0LTY4MzM5Nzg4YmE3ZDY3M2UvYWRkNTRkYS9zcmMvdnQucnMAAKYDEABIAAAATQAAAAkAAABhc3NlcnRpb24gZmFpbGVkOiByb3dzID4gMAAApgMQAEgAAABOAAAACQAAAKYDEABIAAAA1AEAABEAAACmAxAASAAAAOIBAAARAAAApgMQAEgAAAAFAgAAGgAAAKYDEABIAAAAjgIAABoAAACmAxAASAAAAJECAAAaAAAApgMQAEgAAAD2AgAADQAAAKYDEABIAAAA/AIAAA0AAACmAxAASAAAAAgDAAANAAAApgMQAEgAAAANAwAADQAAAKYDEABIAAAAGgMAAAkAAACmAxAASAAAADoDAAAYAAAApgMQAEgAAACOBAAACQAAAKYDEABIAAAAoAQAAAkAAACmAxAASAAAAKYEAAAaAAAAAAAAAKYDEABIAAAAMAUAAAkAAACmAxAASAAAADgFAAAJAAAApgMQAEgAAABTBQAAFAAAAKYDEABIAAAA4QYAAAoAAABTb3NQbUFwY1N0cmluZ09zY1N0cmluZ0Rjc0lnbm9yZURjc1Bhc3N0aHJvdWdoRGNzSW50ZXJtZWRpYXRlRGNzUGFyYW1EY3NFbnRyeUNzaUlnbm9yZUNzaUludGVybWVkaWF0ZUNzaVBhcmFtQ3NpRW50cnlFc2NhcGVJbnRlcm1lZGlhdGVFc2NhcGVHcm91bmRBbHRlcm5hdGVQcmltYXJ5c3RhdGVwYXJhbXNpbnRlcm1lZGlhdGVzY29sc3Jvd3NidWZmZXJhbHRlcm5hdGVfYnVmZmVyYWN0aXZlX2J1ZmZlcl90eXBlY3Vyc29yX3hjdXJzb3JfeWN1cnNvcl92aXNpYmxlcGVuY2hhcnNldHNhY3RpdmVfY2hhcnNldHRhYnNpbnNlcnRfbW9kZW9yaWdpbl9tb2RlYXV0b193cmFwX21vZGVuZXdfbGluZV9tb2RlbmV4dF9wcmludF93cmFwc3RvcF9tYXJnaW5ib3R0b21fbWFyZ2luc2F2ZWRfY3R4YWx0ZXJuYXRlX3NhdmVkX2N0eGRpcnR5X2xpbmVzcmVzaXplZPMFEAAFAAAA+AUQAAYAAAD+BRAADQAAAAsGEAAEAAAADwYQAAQAAAATBhAABgAAABkGEAAQAAAAKQYQABIAAAA7BhAACAAAAEMGEAAIAAAASwYQAA4AAABZBhAAAwAAAFwGEAAIAAAAZAYQAA4AAAByBhAABAAAAHYGEAALAAAAgQYQAAsAAACMBhAADgAAAJoGEAANAAAApwYQABAAAAC3BhAACgAAAMEGEAANAAAAzgYQAAkAAADXBhAAEwAAAOoGEAALAAAA9QYQAAcAAAAbAAAAAQAAAAEAAAAcAAAAHQAAAAwAAAAEAAAAHgAAAB8AAAAMAAAABAAAACAAAAAhAAAABAAAAAQAAAAiAAAAIwAAAAwAAAAEAAAAJAAAABsAAAABAAAAAQAAACUAAAAbAAAAAQAAAAEAAAAmAAAAGwAAAA4AAAABAAAAJwAAABsAAAACAAAAAQAAACgAAAAfAAAADAAAAAQAAAApAAAAIQAAABgAAAAEAAAAKgAAACsAAAAgAAAACAAAACwAAAAhAAAABAAAAAQAAAAtAAAAVnQAAAYAAAAGAAAAEgAAAAgAAAAIAAAADwAAAAkAAAAIAAAACAAAAA8AAAAOAAAACQAAAAkAAAAOAAAA3QUQANcFEADFBRAAvQUQALUFEACmBRAAnQUQAJUFEACNBRAAfgUQAHAFEABnBRAAXgUQAFAFEABTYXZlZEN0eGN1cnNvcl94LgAAAAQAAAAEAAAALwAAAGN1cnNvcl95cGVuADAAAAAOAAAAAQAAACcAAABvcmlnaW5fbW9kZQAwAAAAAQAAAAEAAAAxAAAAYXV0b193cmFwX21vZGUAAC4AAAAEAAAABAAAAC0AAABmb3JlZ3JvdW5kYmFja2dyb3VuZGludGVuc2l0eWl0YWxpY3VuZGVybGluZXN0cmlrZXRocm91Z2hibGlua2ludmVyc2UAAACICRAACgAAAJIJEAAKAAAAnAkQAAkAAAClCRAABgAAAKsJEAAJAAAAtAkQAA0AAADBCRAABQAAAMYJEAAHAAAAMgAAAAQAAAABAAAAMwAAADIAAAABAAAAAQAAADQAAAAyAAAAAQAAAAEAAAA1AAAANgAAAAQAAAAEAAAALQAAAFBlbkZhaW50Qm9sZE5vcm1hbAAABgAAAAQAAAAFAAAAXAoQAFgKEABTChAAL2hvbWUvbWFyY2luLy5jYXJnby9naXQvY2hlY2tvdXRzL2F2dC02ODMzOTc4OGJhN2Q2NzNlL2FkZDU0ZGEvc3JjL3RhYnMucnMAAHwKEABKAAAAFwAAABQAAABUYWJzNwAAAAQAAAAEAAAAOAAAAGYmAACSJQAACSQAAAwkAAANJAAACiQAALAAAACxAAAAJCQAAAskAAAYJQAAECUAAAwlAAAUJQAAPCUAALojAAC7IwAAACUAALwjAAC9IwAAHCUAACQlAAA0JQAALCUAAAIlAABkIgAAZSIAAMADAABgIgAAowAAAMUiAABEcmF3aW5nQXNjaWljYW5ub3QgYWNjZXNzIGEgVGhyZWFkIExvY2FsIFN0b3JhZ2UgdmFsdWUgZHVyaW5nIG9yIGFmdGVyIGRlc3RydWN0aW9uAAA5AAAAAAAAAAEAAAA6AAAAL3J1c3RjL2ViMjYyOTZiNTU2Y2VmMTBmYjcxM2EzOGYzZDE2Yjk4ODYwODBmMjYvbGlicmFyeS9zdGQvc3JjL3RocmVhZC9sb2NhbC5ycwDMCxAATwAAAPYAAAAaAAAAOwAAAAQAAAAEAAAAPAAAADsAAAAEAAAABAAAAD0AAAA7AAAABAAAAAQAAAA+AAAAOwAAAAQAAAAEAAAAPwAAADsAAAAEAAAABAAAAEAAAAA7AAAABAAAAAQAAABBAAAAU29tZTsAAAAEAAAABAAAAEIAAABOb25lYXNzZXJ0aW9uIGZhaWxlZDogbWlkIDw9IHNlbGYubGVuKCkvcnVzdGMvZWIyNjI5NmI1NTZjZWYxMGZiNzEzYTM4ZjNkMTZiOTg4NjA4MGYyNi9saWJyYXJ5L2NvcmUvc3JjL3NsaWNlL21vZC5yc8cMEABNAAAAMA0AAAkAAABhc3NlcnRpb24gZmFpbGVkOiBrIDw9IHNlbGYubGVuKCkAAADHDBAATQAAAFsNAAAJAAAAL2hvbWUvbWFyY2luLy5jYXJnby9naXQvY2hlY2tvdXRzL2F2dC02ODMzOTc4OGJhN2Q2NzNlL2FkZDU0ZGEvc3JjL2xpbmUucnMAAFgNEABKAAAAEwAAABoAAABMaW5lQwAAAAQAAAAEAAAARAAAAFJHQnJFAAAAAQAAAAEAAABGAAAAZ2IAAEcAAAAEAAAABAAAAEgAAABhc3NlcnRpb24gZmFpbGVkOiBtaWQgPD0gc2VsZi5sZW4oKS9ydXN0Yy9lYjI2Mjk2YjU1NmNlZjEwZmI3MTNhMzhmM2QxNmI5ODg2MDgwZjI2L2xpYnJhcnkvY29yZS9zcmMvc2xpY2UvbW9kLnJzEw4QAE0AAAAwDQAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IGsgPD0gc2VsZi5sZW4oKQAAABMOEABNAAAAWw0AAAkAAABDZWxsSQAAAAQAAAAEAAAASgAAAEkAAAAEAAAABAAAAEsAAABSR0IASQAAAAQAAAAEAAAATAAAAEluZGV4ZWQASQAAAAQAAAAEAAAASAAAAG51bGwgcG9pbnRlciBwYXNzZWQgdG8gcnVzdHJlY3Vyc2l2ZSB1c2Ugb2YgYW4gb2JqZWN0IGRldGVjdGVkIHdoaWNoIHdvdWxkIGxlYWQgdG8gdW5zYWZlIGFsaWFzaW5nIGluIHJ1c3RKc1ZhbHVlKCkAXg8QAAgAAABmDxAAAQAAAE4AAAAEAAAABAAAAE8AAABQAAAAUQAAAFRyaWVkIHRvIHNocmluayB0byBhIGxhcmdlciBjYXBhY2l0eZAPEAAkAAAAL3J1c3RjL2ViMjYyOTZiNTU2Y2VmMTBmYjcxM2EzOGYzZDE2Yjk4ODYwODBmMjYvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5yc7wPEABMAAAArgEAAAkAAABjYWxsZWQgYE9wdGlvbjo6dW53cmFwKClgIG9uIGEgYE5vbmVgIHZhbHVlAFQAAAAEAAAABAAAAFUAAABWAAAAVwAAAEFjY2Vzc0Vycm9ybWVtb3J5IGFsbG9jYXRpb24gb2YgIGJ5dGVzIGZhaWxlZAAAAGcQEAAVAAAAfBAQAA0AAABsaWJyYXJ5L3N0ZC9zcmMvYWxsb2MucnOcEBAAGAAAAFUBAAAJAAAAbGlicmFyeS9zdGQvc3JjL3Bhbmlja2luZy5yc8QQEAAcAAAAUAIAAB4AAADEEBAAHAAAAE8CAAAfAAAAWAAAAAwAAAAEAAAAWQAAAFQAAAAIAAAABAAAAFoAAABbAAAAEAAAAAQAAABcAAAAXQAAAFQAAAAIAAAABAAAAF4AAABfAAAAYAAAAAAAAAABAAAAYQAAAEhhc2ggdGFibGUgY2FwYWNpdHkgb3ZlcmZsb3dYERAAHAAAAC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvaGFzaGJyb3duLTAuMTMuMS9zcmMvcmF3L21vZC5yc3wREABUAAAAWgAAACgAAABiAAAABAAAAAQAAABjAAAAZAAAAGUAAABsaWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjLnJzY2FwYWNpdHkg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");function pA(A){return"number"==typeof A?A:"string"==typeof A?A.split(":").reverse().map(parseFloat).reduce(((A,g,I)=>A+g*Math.pow(60,I))):void 0}class LA{constructor(){let A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.speed=A,this.startTime=performance.now()}getTime(){return this.speed*(performance.now()-this.startTime)/1e3}setTime(A){this.startTime=performance.now()-A/this.speed*1e3}}class UA{constructor(){}getTime(A){}setTime(A){}}const KA=(async()=>(await fA(SA),YA))();class mA{constructor(A){this.core=A,this.driver=A.driver}onEnter(A){}init(){}play(){}pause(){}togglePlay(){}seek(A){return!1}step(){}stop(){this.driver.stop()}}class HA extends mA{async init(){try{return await this.core.initializeDriver(),this.core.setState("stopped")}catch(A){throw this.core.setState("errored"),A}}async play(){this.core.dispatchEvent("play");const A=await this.init();return await A.doPlay()}togglePlay(){return this.play()}async seek(A){const g=await this.init();return await g.seek(A)}async step(){const A=await this.init();return await A.step()}stop(){}}class qA extends mA{onEnter(A){this.core.dispatchEvent("stopped"),"paused"===A.reason?this.core.dispatchEvent("pause"):"ended"===A.reason&&this.core.dispatchEvent("ended")}play(){return this.core.dispatchEvent("play"),this.doPlay()}async doPlay(){const A=await this.driver.play();!0===A?this.core.setState("playing"):"function"==typeof A&&(this.core.setState("playing"),this.driver.stop=A)}togglePlay(){return this.play()}seek(A){return this.driver.seek(A)}step(){this.driver.step()}}class bA extends mA{onEnter(){this.core.dispatchEvent("playing")}pause(){!0===this.driver.pause()&&this.core.setState("stopped",{reason:"paused"})}togglePlay(){return this.pause()}seek(A){return this.driver.seek(A)}}class vA extends mA{onEnter(){this.core.dispatchEvent("loading")}}class xA extends mA{onEnter(){this.core.dispatchEvent("offline")}}class TA extends mA{onEnter(){this.core.dispatchEvent("errored")}}class jA{constructor(A,g){this.logger=g.logger,this.state=new HA(this),this.stateName="uninitialized",this.driver=null,this.driverFn=A,this.changedLines=new Set,this.cursor=void 0,this.duration=void 0,this.cols=g.cols,this.rows=g.rows,this.speed=g.speed??1,this.loop=g.loop,this.idleTimeLimit=g.idleTimeLimit,this.preload=g.preload,this.startAt=pA(g.startAt),this.poster=this.parsePoster(g.poster),this.markers=this.normalizeMarkers(g.markers),this.pauseOnMarkers=g.pauseOnMarkers,this.commandQueue=Promise.resolve(),this.eventHandlers=new Map([["marker",[]],["ended",[]],["errored",[]],["init",[]],["input",[]],["loading",[]],["offline",[]],["pause",[]],["play",[]],["playing",[]],["reset",[]],["resize",[]],["seeked",[]],["stopped",[]],["terminalUpdate",[]]])}addEventListener(A,g){this.eventHandlers.get(A).push(g)}dispatchEvent(A){let g=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const I of this.eventHandlers.get(A))I(g)}async init(){this.wasm=await KA;const A=this.feed.bind(this),g=this.now.bind(this),I=this.resetVt.bind(this),B=this.setState.bind(this),Q="npt"===this.poster.type?this.poster.value:void 0;this.driver=this.driverFn({feed:A,onInput:A=>{this.dispatchEvent("input",{data:A})},onMarker:A=>{let{index:g,time:I,label:B}=A;this.dispatchEvent("marker",{index:g,time:I,label:B})},reset:I,now:g,setTimeout:(A,g)=>window.setTimeout(A,g/this.speed),setInterval:(A,g)=>window.setInterval(A,g/this.speed),setState:B,logger:this.logger},{cols:this.cols,rows:this.rows,idleTimeLimit:this.idleTimeLimit,startAt:this.startAt,loop:this.loop,posterTime:Q,markers:this.markers,pauseOnMarkers:this.pauseOnMarkers}),"function"==typeof this.driver&&(this.driver={play:this.driver}),(this.preload||void 0!==Q)&&this.withState((A=>A.init()));const C="text"===this.poster.type?this.renderPoster(this.poster.value):void 0,E={isPausable:!!this.driver.pause,isSeekable:!!this.driver.seek,poster:C};if(void 0===this.driver.init&&(this.driver.init=()=>({})),void 0===this.driver.pause&&(this.driver.pause=()=>{}),void 0===this.driver.seek&&(this.driver.seek=A=>!1),void 0===this.driver.step&&(this.driver.step=()=>{}),void 0===this.driver.stop&&(this.driver.stop=()=>{}),void 0===this.driver.getCurrentTime){const A=this.driver.play;let g=new UA;this.driver.play=()=>(g=new LA(this.speed),A()),this.driver.getCurrentTime=()=>g.getTime()}return E}play(){return this.withState((A=>A.play()))}pause(){return this.withState((A=>A.pause()))}togglePlay(){return this.withState((A=>A.togglePlay()))}seek(A){return this.withState((async g=>{await g.seek(A)&&this.dispatchEvent("seeked")}))}step(){return this.withState((A=>A.step()))}stop(){return this.withState((A=>A.stop()))}withState(A){return this.enqueueCommand((()=>A(this.state)))}enqueueCommand(A){return this.commandQueue=this.commandQueue.then(A),this.commandQueue}getChangedLines(){if(this.changedLines.size>0){const A=new Map,g=this.vt.rows;for(const I of this.changedLines)I1&&void 0!==arguments[1]?arguments[1]:{};if(this.stateName===A)return this.state;if(this.stateName=A,"playing"===A)this.state=new bA(this);else if("stopped"===A)this.state=new qA(this);else if("loading"===A)this.state=new vA(this);else if("offline"===A)this.state=new xA(this);else{if("errored"!==A)throw`invalid state: ${A}`;this.state=new TA(this)}return this.state.onEnter(g),this.state}feed(A){this.doFeed(A),this.dispatchEvent("terminalUpdate")}doFeed(A){const[g,I]=this.vt.feed(A);if(g.forEach((A=>this.changedLines.add(A))),this.cursor=void 0,I){const[A,g]=this.vt.get_size();this.vt.cols=A,this.vt.rows=g,this.logger.debug(`core: vt resize (${A}x${g})`),this.dispatchEvent("resize",{cols:A,rows:g})}}now(){return performance.now()*this.speed}async initializeDriver(){const A=await this.driver.init();this.cols=this.cols??A.cols??80,this.rows=this.rows??A.rows??24,this.duration=this.duration??A.duration,this.markers=this.normalizeMarkers(A.markers)??this.markers??[],this.initializeVt(this.cols,this.rows);const g=void 0!==A.poster?this.renderPoster(A.poster):void 0;this.dispatchEvent("init",{cols:this.cols,rows:this.rows,duration:this.duration,markers:this.markers,poster:g})}resetVt(A,g){let I=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.cols=A,this.rows=g,this.cursor=void 0,this.initializeVt(A,g),void 0!==I&&""!==I&&this.doFeed(I),this.dispatchEvent("reset",{cols:A,rows:g})}initializeVt(A,g){this.logger.debug(`core: vt init (${A}x${g})`),this.vt=this.wasm.create(A,g),this.vt.cols=A,this.vt.rows=g,this.changedLines.clear();for(let A=0;AB.feed(A)));const Q=B.get_cursor()??!1,C=[];for(let A=0;A"number"==typeof A?[A,""]:A))}}const WA=Symbol("store-raw"),ZA=Symbol("store-node"),XA=Symbol("store-name");function OA(A,g){let B=A[I];if(!B&&(Object.defineProperty(A,I,{value:B=new Proxy(A,gg)}),!Array.isArray(A))){const g=Object.keys(A),I=Object.getOwnPropertyDescriptors(A);for(let Q=0,C=g.length;Q!0,deleteProperty:()=>!0,ownKeys:function(A){return $A(A),Reflect.ownKeys(A)},getOwnPropertyDescriptor:function(A,g){const B=Reflect.getOwnPropertyDescriptor(A,g);return B&&!B.get&&B.configurable&&g!==I&&g!==ZA&&g!==XA?(delete B.value,delete B.writable,B.get=()=>A[I][g],B):B}};function Ig(A,g,I,B=!1){if(!B&&A[g]===I)return;const Q=A[g],C=A.length;void 0===I?delete A[g]:A[g]=I;let E,i=PA(A);(E=_A(i,g,Q))&&E.$((()=>I)),Array.isArray(A)&&A.length!==C&&(E=_A(i,"length",C))&&E.$(A.length),(E=i._)&&E.$()}function Bg(A,g){const I=Object.keys(g);for(let B=0;B1){B=g.shift();const C=typeof B,E=Array.isArray(A);if(Array.isArray(B)){for(let Q=0;Q1)return void Qg(A[B],g,[B].concat(I));Q=A[B],I=[B].concat(I)}let C=g[0];"function"==typeof C&&(C=C(Q,I),C===Q)||void 0===B&&null==C||(C=VA(C),void 0===B||zA(Q)&&zA(C)&&!Array.isArray(C)?Bg(Q,C):Ig(A,B,C))}function Cg(...[A,g]){const I=VA(A||{}),B=Array.isArray(I);return[OA(I),function(...A){y((()=>{B&&1===A.length?function(A,g){if("function"==typeof g&&(g=g(A)),g=VA(g),Array.isArray(g)){if(A===g)return;let I=0,B=g.length;for(;I=E&&e>=E&&(C[i]===A[e]||Q&&C[E]&&A[E]&&C[i][Q]===A[e][Q]);i--,e--)n[e]=C[i];if(E>e||E>i){for(I=E;I<=e;I++)Ig(C,I,A[I]);for(;IA.length&&Ig(C,"length",A.length))}for(o=new Array(e+1),I=e;I>=E;I--)t=A[I],s=Q&&t?t[Q]:t,g=r.get(s),o[I]=void 0===g?-1:g,r.set(s,I);for(g=E;g<=i;g++)t=C[g],s=Q&&t?t[Q]:t,I=r.get(s),void 0!==I&&-1!==I&&(n[I]=C[g],I=o[I],r.set(s,I));for(I=E;IA.length&&Ig(C,"length",A.length))}const E=Object.keys(A);for(let g=0,I=E.length;g{if(!zA(A)||!zA(Q))return Q;const g=ig(Q,{[Eg]:A},Eg,I,B);return void 0===g?A:g}}const tg=O("");var og=A=>(()=>{const g=tg.cloneNode(!0);return AA(g,(()=>A.text)),w((I=>{const B=function(A,g){const I=A.get("inverse")?A.has("bg")?A.get("bg"):"bg":A.get("fg"),B=A.get("inverse")?A.has("fg")?A.get("fg"):"fg":A.get("bg"),Q=sg(I,A.get("bold"),"fg-"),C=sg(B,A.get("blink"),"bg-");let E=g??"";Q&&(E+=" "+Q);C&&(E+=" "+C);A.has("bold")&&(E+=" ap-bright");A.has("faint")&&(E+=" ap-faint");A.has("italic")&&(E+=" ap-italic");A.has("underline")&&(E+=" ap-underline");A.has("blink")&&(E+=" ap-blink");return E}(A.attrs,A.extraClass),Q=function(A){const g=A.get("inverse")?A.get("bg"):A.get("fg"),I=A.get("inverse")?A.get("fg"):A.get("bg");let B={};"string"==typeof g&&(B.color=g);"string"==typeof I&&(B["background-color"]=I);return B}(A.attrs);return B!==I._v$&&V(g,I._v$=B),I._v$2=_(g,Q,I._v$2),I}),{_v$:void 0,_v$2:void 0}),g})();function sg(A,g,I){return"number"==typeof A?(g&&A<8&&(A+=8),`${I}${A}`):"fg"==A||"bg"==A?`${I}${A}`:void 0}const ng=O('');var rg=A=>(()=>{const g=ng.cloneNode(!0);return AA(g,b(x,{get each(){return(()=>{if("number"==typeof A.cursor){const g=[];let I=0,B=0;for(;B0&&g.push([Q[0].substring(0,i),Q[1]]),g.push([Q[0][i],C," ap-cursor-a"]),g.push([Q[0][i],E," ap-cursor-b"]),ib(og,{get text(){return A()[0]},get attrs(){return A()[1]},get extraClass(){return A()[2]}})})),w((()=>g.style.setProperty("height",A.height))),g})();const ag=O('');var cg=A=>{const g=()=>A.lineHeight??1.3333333333,I=h((()=>({width:`${A.cols}ch`,height:g()*A.rows+"em","font-size":100*(A.scale||1)+"%","font-family":A.fontFamily,"line-height":`${g()}em`})));return(()=>{const B=ag.cloneNode(!0),Q=A.ref;return"function"==typeof Q?$(Q,B):A.ref=B,AA(B,b(v,{get each(){return A.lines},children:(I,B)=>b(rg,{get segments(){return I.segments},get cursor(){return h((()=>B()===A.cursor?.[1]))()?A.cursor?.[0]:null},get height(){return`${g()}em`}})})),w((g=>{const Q=!(!A.blink&&!A.cursorHold),C=!!A.blink,E=I();return Q!==g._v$&&B.classList.toggle("ap-cursor",g._v$=Q),C!==g._v$2&&B.classList.toggle("ap-blink",g._v$2=C),g._v$3=_(B,E,g._v$3),g}),{_v$:void 0,_v$2:void 0,_v$3:void 0}),B})()};const Dg=O(''),wg=O(''),hg=O(''),yg=O(''),lg=O(''),Gg=O('');function Ng(A){let g=Math.floor(A);const I=Math.floor(g/86400);g%=86400;const B=Math.floor(g/3600);g%=3600;const Q=Math.floor(g/60);return g%=60,I>0?`${kg(I)}:${kg(B)}:${kg(Q)}:${kg(g)}`:B>0?`${kg(B)}:${kg(Q)}:${kg(g)}`:`${kg(Q)}:${kg(g)}`}function kg(A){return A<10?`0${A}`:A.toString()}var Mg=A=>{const g=A=>g=>{g.preventDefault(),A(g)},I=()=>"number"==typeof A.currentTime?Ng(A.currentTime):"--:--",B=()=>"number"==typeof A.remainingTime?"-"+Ng(A.remainingTime):I(),Q=h((()=>"number"==typeof A.duration?A.markers.filter((g=>g[0]{const g=A.currentTarget.offsetWidth,I=A.currentTarget.getBoundingClientRect(),B=A.clientX-I.left;return 100*Math.max(0,B/g)+"%"},[E,i]=D(!1),e=function(A,g){let I=!0;return function(){if(I){I=!1;for(var B=arguments.length,Q=new Array(B),C=0;CI=!0),g)}}}(A.onSeekClick,50),t=g=>{g.altKey||g.shiftKey||g.metaKey||g.ctrlKey||0!==g.button||(i(!0),A.onSeekClick(C(g)))},o=A=>{A.altKey||A.shiftKey||A.metaKey||A.ctrlKey||E()&&e(C(A))},s=()=>{i(!1)},n=g((A=>{A.stopPropagation()}));return document.addEventListener("mouseup",s),N((()=>{document.removeEventListener("mouseup",s)})),(()=>{const C=lg.cloneNode(!0),E=C.firstChild,i=E.firstChild,e=i.nextSibling,s=E.nextSibling,r=A.ref;return"function"==typeof r?$(r,C):A.ref=C,AA(C,b(T,{get when(){return A.isPausable},get children(){const I=hg.cloneNode(!0);return P(I,"click",g(A.onPlayClick),!0),AA(I,b(j,{get children(){return[b(W,{get when(){return A.isPlaying},get children(){return Dg.cloneNode(!0)}}),b(W,{get when(){return!A.isPlaying},get children(){return wg.cloneNode(!0)}})]}})),I}}),E),AA(i,I),AA(e,B),AA(C,b(T,{get when(){return"number"==typeof A.progress||A.isSeekable},get children(){const I=yg.cloneNode(!0),B=I.firstChild,C=B.firstChild.firstChild;return B.$$mousemove=o,B.$$mousedown=t,AA(B,b(v,{get each(){return Q()},children:(I,B)=>(()=>{const Q=Gg.cloneNode(!0),C=Q.firstChild,E=C.nextSibling;var i;return P(Q,"mousedown",n,!0),P(Q,"click",(i=B(),g((()=>{A.onSeekClick({marker:i})}))),!0),AA(E,(()=>(A=>""===A[1]?Ng(A[0]):`${Ng(A[0])} - ${A[1]}`)(I))),w((g=>{const B=(g=>g[0]/A.duration*100+"%")(I),E=!!(g=>"number"==typeof A.currentTime&&g[0]<=A.currentTime)(I);return B!==g._v$&&Q.style.setProperty("left",g._v$=B),E!==g._v$2&&C.classList.toggle("ap-marker-past",g._v$2=E),g}),{_v$:void 0,_v$2:void 0}),Q})()}),null),w((g=>_(C,{width:"100%",transform:`scaleX(${A.progress||0}`,"transform-origin":"left center"},g))),I}}),s),P(s,"click",g(A.onFullscreenClick),!0),w((()=>C.classList.toggle("ap-seekable",!!A.isSeekable))),C})()};z(["click","mousedown","mousemove"]);const ug=O('💥
');var Fg=A=>ug.cloneNode(!0);const dg=O('
');var fg=A=>dg.cloneNode(!0);const Yg=O('Stream offline
');var Rg=A=>(()=>{const g=Yg.cloneNode(!0),I=g.firstChild;return w((g=>_(I,{"font-family":A.fontFamily},g))),g})();const Jg=O('');var Sg=A=>(()=>{const g=Jg.cloneNode(!0);var I;return P(g,"click",(I=A.onClick,A=>{A.preventDefault(),I(A)}),!0),g})();z(["click"]);const pg=O('');var Lg=A=>{const g=A.logger,I=A.core,B=A.autoPlay,[Q,C]=Cg({coreState:"stopped",lines:[],cursor:void 0,charW:A.charW,charH:A.charH,bordersW:A.bordersW,bordersH:A.bordersH,containerW:0,containerH:0,showStartOverlay:!B,isPausable:!0,isSeekable:!0,isFullscreen:!1,currentTime:null,remainingTime:null,progress:null,blink:!0,cursorHold:!1}),[E,i]=D({cols:A.cols,rows:A.rows}),[e,t]=D(void 0),[o,s]=Cg([]),[n,r]=D(!1),a=()=>E().cols||80,c=()=>E().rows||24,l=()=>!1===A.controls?0:32;let k,M,u,F,d,f,Y,R,J;function S(){gA(),O(),z()}function p(A){A.rows{let{cols:g,rows:I,duration:B,poster:Q,markers:C}=A;p({cols:g,rows:I}),t(B),s(C),L(Q)})),I.addEventListener("play",(()=>{C("showStartOverlay",!1)})),I.addEventListener("playing",(()=>{C("coreState","playing"),K(),P(),X()})),I.addEventListener("stopped",(()=>{C("coreState","stopped"),S()})),I.addEventListener("loading",(()=>{C("coreState","loading"),S()})),I.addEventListener("offline",(()=>{C("coreState","offline"),S()})),I.addEventListener("errored",(()=>{C({coreState:"errored",showStartOverlay:!1})})),I.addEventListener("resize",p),I.addEventListener("reset",(A=>{p(A),K()})),I.addEventListener("seeked",(()=>{z()})),I.addEventListener("terminalUpdate",(()=>{void 0===k&&(k=requestAnimationFrame(K))}));const U=()=>{J=new ResizeObserver(function(A,g){let I;return function(){for(var B=arguments.length,Q=new Array(B),C=0;CA.apply(this,Q)),g)}}((A=>{C({containerW:d.offsetWidth,containerH:d.offsetHeight}),d.dispatchEvent(new CustomEvent("resize",{detail:{el:f}}))}),10)),J.observe(d)};G((async()=>{g.info("player mounted"),g.debug("font measurements",{charW:Q.charW,charH:Q.charH}),U();const{isPausable:A,isSeekable:E,poster:i}=await I.init();C({isPausable:A,isSeekable:E,containerW:d.offsetWidth,containerH:d.offsetHeight}),L(i),B&&I.play()})),N((()=>{I.stop(),gA(),O(),J.disconnect()}));const K=()=>{const A=I.getChangedLines();A&&y((()=>{A.forEach(((A,g)=>{C("lines",g,eg(A))}))})),C("cursor",eg(I.getCursor())),C("cursorHold",!0),k=void 0},m=h((()=>{g.debug(`containerW = ${Q.containerW}`);const I=Q.charW*a()+Q.bordersW,B=Q.charH*c()+Q.bordersH;let C=A.fit??"width";if("both"===C||Q.isFullscreen){C=Q.containerW/(Q.containerH-l())>I/B?"height":"width"}if(!1===C||"none"===C)return{};if("width"===C){const A=Q.containerW/I;return{scale:A,width:Q.containerW,height:B*A+l()}}if("height"===C){const A=(Q.containerH-l())/B;return{scale:A,width:I*A,height:Q.containerH}}throw`unsupported fit mode: ${C}`})),H=()=>{C("isFullscreen",document.fullscreenElement??document.webkitFullscreenElement)},q=()=>{Q.isFullscreen?(document.exitFullscreen??document.webkitExitFullscreen??(()=>{})).apply(document):(d.requestFullscreen??d.webkitRequestFullscreen??(()=>{})).apply(d)},v=A=>{if(!(A.altKey||A.metaKey||A.ctrlKey))if(A.shiftKey){if("ArrowLeft"==A.key)I.seek("<<<");else{if("ArrowRight"!=A.key)return;I.seek(">>>")}A.preventDefault()}else{if(" "==A.key)I.togglePlay();else if("."==A.key)I.step(),z();else if("f"==A.key)q();else if("ArrowLeft"==A.key)I.seek("<<");else if("ArrowRight"==A.key)I.seek(">>");else if("["==A.key)I.seek({marker:"prev"});else if("]"==A.key)I.seek({marker:"next"});else{if(!(A.key.charCodeAt(0)>=48&&A.key.charCodeAt(0)<=57))return;{const g=(A.key.charCodeAt(0)-48)/10;I.seek(100*g+"%")}}A.preventDefault()}},x=()=>{Q.isFullscreen&&IA(!0)},Z=()=>{Q.isFullscreen||IA(!1)},X=()=>{u=setInterval(z,100)},O=()=>{clearInterval(u)},z=()=>{const A=I.getCurrentTime(),g=I.getRemainingTime(),B=I.getProgress();C({currentTime:A,remainingTime:g,progress:B})},P=()=>{F=setInterval((()=>{C((A=>{const g={blink:!A.blink};return g.blink&&(g.cursorHold=!1),g}))}),500)},gA=()=>{clearInterval(F),C("blink",!0)},IA=A=>{clearTimeout(M),A&&(M=setTimeout((()=>IA(!1)),2e3)),r(A)},BA=(()=>{const g=pg.cloneNode(!0),B=g.firstChild;"function"==typeof d?$(d,g):d=g,g.addEventListener("webkitfullscreenchange",H),g.addEventListener("fullscreenchange",H),g.$$mousemove=x,g.$$keydown=v,g.addEventListener("keypress",v);return"function"==typeof f?$(f,B):f=B,B.$$mousemove=()=>IA(!0),B.addEventListener("mouseleave",Z),AA(B,b(cg,{get cols(){return a()},get rows(){return c()},get scale(){return m()?.scale},get blink(){return Q.blink},get lines(){return Q.lines},get cursor(){return Q.cursor},get cursorHold(){return Q.cursorHold},get fontFamily(){return A.terminalFontFamily},get lineHeight(){return A.terminalLineHeight},ref(A){"function"==typeof Y?Y(A):Y=A}}),null),AA(B,b(T,{get when(){return!1!==A.controls},get children(){return b(Mg,{get duration(){return e()},get currentTime(){return Q.currentTime},get remainingTime(){return Q.remainingTime},get progress(){return Q.progress},markers:o,get isPlaying(){return"playing"==Q.coreState},get isPausable(){return Q.isPausable},get isSeekable(){return Q.isSeekable},onPlayClick:()=>I.togglePlay(),onFullscreenClick:q,onSeekClick:A=>I.seek(A),ref(A){"function"==typeof R?R(A):R=A}})}}),null),AA(B,b(j,{get children(){return[b(W,{get when(){return Q.showStartOverlay},get children(){return b(Sg,{onClick:()=>I.play()})}}),b(W,{get when(){return"loading"==Q.coreState},get children(){return b(fg,{})}}),b(W,{get when(){return"offline"==Q.coreState},get children(){return b(Rg,{get fontFamily(){return A.terminalFontFamily}})}}),b(W,{get when(){return"errored"==Q.coreState},get children(){return b(Fg,{})}})]}}),null),w((I=>{const Q=!!(!0===A.controls||"auto"===A.controls&&n()),C=`ap-player asciinema-theme-${A.theme??"asciinema"}`,E=(()=>{const g={};!1!==A.fit&&"none"!==A.fit||void 0===A.terminalFontSize||("small"===A.terminalFontSize?g["font-size"]="12px":"medium"===A.terminalFontSize?g["font-size"]="18px":"big"===A.terminalFontSize?g["font-size"]="24px":g["font-size"]=A.terminalFontSize);const I=m();return void 0!==I.width&&(g.width=`${I.width}px`,g.height=`${I.height}px`),g})();return Q!==I._v$&&g.classList.toggle("ap-hud",I._v$=Q),C!==I._v$2&&V(B,I._v$2=C),I._v$3=_(B,E,I._v$3),I}),{_v$:void 0,_v$2:void 0,_v$3:void 0}),g})();return BA};z(["keydown","mousemove"]);class Ug{log(){}debug(){}info(){}warn(){}error(){}}class Kg{constructor(A,g){this.logger=A,this.prefix=g}log(A){for(var g=arguments.length,I=new Array(g>1?g-1:0),B=1;B1?g-1:0),B=1;B1?g-1:0),B=1;B1?g-1:0),B=1;B1?g-1:0),B=1;BI=>{g(A(I))}}(A))}flatMap(A){return this.transform(function(A){return g=>I=>{A(I).forEach(g)}}(A))}filter(A){return this.transform(function(A){return g=>I=>{A(I)&&g(I)}}(A))}take(A){return this.transform(function(A){let g=0;return I=>B=>{gB=>{g+=1,g>A&&I(B)}}(A))}transform(A){return new mg(this.input,this.xfs.concat([A]))}multiplex(A,g){return new mg(new qg(this[Symbol.iterator](),A[Symbol.iterator](),g))}toArray(){return Array.from(this)}[Symbol.iterator](){let A=0,g=[],I=!1;const B=(Q=this.xfs,C=A=>g.push(A),Q.reverse().reduce(((A,g)=>{const I=Hg(g(A.step));return{step:I.step,flush:()=>{I.flush(),A.flush()}}}),Hg(C)));var Q,C;return{next:()=>{for(A===g.length&&(g=[],A=0);0===g.length;){const A=this.input.next();if(A.done)break;B.step(A.value)}return 0!==g.length||I||(B.flush(),I=!0),g.length>0?{done:!1,value:g[A++]}:{done:!0}}}}}function Hg(A){return"function"==typeof A?{step:A,flush:()=>{}}:A}class qg{constructor(A,g,I){this.left=A,this.right=g,this.comparator=I}[Symbol.iterator](){let A,g;return{next:()=>{if(void 0===A&&void 0!==this.left){const g=this.left.next();g.done?this.left=void 0:A=g.value}if(void 0===g&&void 0!==this.right){const A=this.right.next();A.done?this.right=void 0:g=A.value}if(void 0===A&&void 0===g)return{done:!0};if(void 0===A){const A=g;return g=void 0,{done:!1,value:A}}if(void 0===g){const g=A;return A=void 0,{done:!1,value:g}}if(this.comparator(A,g)){const g=A;return A=void 0,{done:!1,value:g}}{const A=g;return g=void 0,{done:!1,value:A}}}}}}async function bg(A){let g,I;if(A instanceof Response){const B=await A.text(),Q=function(A){const g=A.split("\n");let I;try{I=JSON.parse(g[0])}catch(A){return}const B=new mg(g).drop(1).filter((A=>"["===A[0])).map(JSON.parse).toArray();return{header:I,events:B}}(B);void 0!==Q?(g=Q.header,I=Q.events):g=JSON.parse(B)}else if("object"==typeof A&&"number"==typeof A.version)g=A;else{if(!Array.isArray(A))throw"invalid data";g=A[0],I=A.slice(1,A.length)}if(1===g.version)return function(A){let g=0;const I=new mg(A.stdout).map((A=>(g+=A[0],[g,"o",A[1]])));return{cols:A.width,rows:A.height,events:I}}(g);if(2===g.version)return function(A,g){return{cols:A.width,rows:A.height,events:g,idleTimeLimit:A.idle_time_limit}}(g,I);throw`asciicast v${g.version} format not supported`}function vg(A){if("r"===A[1]){const[g,I]=A[2].split("x");return[A[0],"o",`[8;${I};${g};t`]}return A}function xg(A){return"number"==typeof A?[A,"m",""]:[A[0],"m",A[1]]}function Tg(){let A=0;return function(g){return"m"===g[1]?[g[0],g[1],{index:A++,time:g[0],label:g[2]}]:g}}class jg{constructor(){this.items=[],this.onPush=void 0}push(A){this.items.push(A),void 0!==this.onPush&&(this.onPush(this.popAll()),this.onPush=void 0)}popAll(){if(this.items.length>0){const A=this.items;return this.items=[],A}{const A=this;return new Promise((g=>{A.onPush=g}))}}}function Wg(A,g,I,B,Q){return I>0?function(A,g,I,B){let Q=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1/60;const C=new jg,E=Zg();let i=!1,e=-Q;return setTimeout((async()=>{for(;!i;){const t=await C.popAll();if(i)return;for(const C of t){const t=C[0]-B+I;if(t-e0&&(await Xg(o),i))return;g(C[0]),A(C[2]),e=t}}}),0),{pushEvent(A){if("o"===A[1])C.push(A);else if("r"===A[1]){const[g,I]=A[2].split("x");C.push([A[0],"o",`[8;${I};${g};t`])}},pushText(A){const g=(Zg()-E)/1e3;C.push([g,"o",A])},stop(){i=!0,C.push(void 0)}}}(A,g,I,B??0,Q):function(A){return{pushEvent(g){"o"===g[1]&&A(g[2])},pushText(g){A(g)},stop(){}}}(A)}function Zg(){return(new Date).getTime()}function Xg(A){return new Promise((g=>{setTimeout(g,1e3*A)}))}function Og(A){return Math.min(500*Math.pow(2,A),5e3)}function zg(A){if(A.length<13)return;const g=function(A){const g=Vg(A.subarray(0,4)),I=Vg(A.subarray(4,8));return g+I/1e6}(A.subarray(0,8)),I=Vg(A.subarray(8,12));return{time:g,data:A.subarray(12,12+I),len:I+12}}function Vg(A){return A[0]+256*A[1]+256*A[2]*256+256*A[3]*256*256}const Pg=new Map([["benchmark",function(A,g){let I,{url:B,iterations:Q=10}=A,{feed:C,now:E}=g,i=0;return{async init(){const A=await bg(await fetch(B)),{cols:g,rows:Q}=A;I=Array.from(A.output);const C=I[I.length-1][0];for(const[A,g]of I)i+=new Blob([g]).size;return{cols:g,rows:Q,duration:C}},play(){const A=E();for(let A=0;A{const A=new Date,g=A.getHours(),I=A.getMinutes(),E=[];E.push("\r");for(let A=0;A{r().forEach(E)};return{init:()=>{const A=[s].concat(r());return{cols:i,rows:e,duration:1440,poster:A}},play:()=>(E(s),a(),n=setInterval(a,1e3),!0),stop:()=>{clearInterval(n)},getCurrentTime:()=>{const A=new Date;return 60*A.getHours()+A.getMinutes()}}}],["eventsource",function(A,g){let I,B,{url:Q,bufferTime:C=.1,minFrameTime:E}=A,{feed:i,reset:e,setState:t,logger:o}=g;o=new Kg(o,"eventsource: ");let s=new UA;function n(A){void 0!==B&&B.stop(),B=Wg(i,(A=>s.setTime(A)),C,A,E)}return{play:()=>{I=new EventSource(Q),I.addEventListener("open",(()=>{o.info("opened"),n()})),I.addEventListener("error",(A=>{o.info("errored"),o.debug({e:A}),t("loading")})),I.addEventListener("message",(A=>{const g=JSON.parse(A.data);if(Array.isArray(g))B.pushEvent(g);else if(void 0!==g.cols||void 0!==g.width){const A=g.cols??g.width,I=g.rows??g.height;o.debug(`vt reset (${A}x${I})`),t("playing"),n(g.time),e(A,I,g.init??void 0),s=new LA,"number"==typeof g.time&&s.setTime(g.time)}else"offline"===g.state&&(o.info("stream offline"),t("offline"),s=new UA)})),I.addEventListener("done",(()=>{o.info("closed"),I.close(),t("stopped",{reason:"ended"})}))},stop:()=>{void 0!==B&&B.stop(),void 0!==I&&I.close()},getCurrentTime:()=>s.getTime()}}],["random",function(A,g){let{feed:I,setTimeout:B}=g;const Q=" ".charCodeAt(0),C="~".charCodeAt(0)-Q;let E;const i=()=>{const A=Math.pow(5,4*Math.random());E=B(e,A)},e=()=>{i();const A=String.fromCharCode(Q+Math.floor(Math.random()*C));I(A)};return()=>(i(),()=>clearInterval(E))}],["recording",function(A,g,I){let B,Q,C,E,i,e,t,o,s,{feed:n,onInput:r,onMarker:a,now:c,setTimeout:D,setState:w,logger:h}=g,{idleTimeLimit:y,startAt:l,loop:G,posterTime:N,markers:k,pauseOnMarkers:M,cols:u,rows:F}=I,d=0,f=0,Y=0;async function R(A,g){const I=await fetch(A,g);if(!I.ok)throw`failed fetching recording from ${A}: ${I.status} ${I.statusText}`;return I}function J(){const A=C[d];A?t=D(S,function(A){let g=1e3*A-(c()-o);return g<0&&(g=0),g}(A[0])):(p(),Y++,!0===G||"number"==typeof G&&Y1e3*g[0]);J()}function p(){clearTimeout(t),t=null}function L(A){const[g,I,B]=A;if("o"===I)n(B);else if("i"===I)r(B);else if("m"===I&&(a(B),M))return U(),s=1e3*g,w("stopped",{reason:"paused"}),!0;return!1}function U(){return!t||(p(),s=c()-o,!0)}function K(){o=c()-s,s=null,J()}function m(A){const g=!!t;U();const I=(s??0)/1e3;if("string"==typeof A)"<<"===A?A=I-5:">>"===A?A=I+5:"<<<"===A?A=I-.1*i:">>>"===A?A=I+.1*i:"%"===A[A.length-1]&&(A=parseFloat(A.substring(0,A.length-1))/100*i);else if("object"==typeof A)if("prev"===A.marker)A=H(I)??0,g&&I-A<1&&(A=H(A)??0);else if("next"===A.marker)A=function(A){if(0==E.length)return;let g,I=E.length-1,B=E[I];for(;B&&B[0]>A;)g=B[0],B=E[--I];return g}(I)??i;else if("number"==typeof A.marker){const g=E[A.marker];if(void 0===g)throw`invalid marker index: ${A.marker}`;A=g[0]}const B=Math.min(Math.max(A,0),i);B[A[0],"o",A[1]])),C=new mg(I).map((A=>[A[0],"i",A[1]])),E=new mg(B).map(xg);return Q.multiplex(C,((A,g)=>A[0]A[0]1&&void 0!==arguments[1]?arguments[1]:1/60;return B=>{let Q=0,C=0;return{step:A=>{Q++,void 0!==g?A[1]===g[1]&&A[0]-g[0]{void 0!==g&&(B(g),C++),A.debug(`batched ${Q} frames to ${C} frames`)}}}}(g,C)).map(function(A,g,I){let B=0,Q=0;return function(C){const E=C[0]-B-A;return B=C[0],E>0&&(Q+=E,C[0]"m"!==A[1])).multiplex(i,((A,g)=>A[0]"i"===A[1]?[A[0]+E,A[1],A[2]]:A)),e.sort(((A,g)=>A[0]-g[0])));const o=e[e.length-1][0],s=B-t.offset;return{...A,events:e,duration:o,effectiveStartAt:s}}(await g(await function(A){let{url:g,data:I,fetchOpts:B={}}=A;if("string"==typeof g)return R(g,B);if(Array.isArray(g))return Promise.all(g.map((A=>R(A,B))));if(void 0!==I)return"function"==typeof I&&(I=I()),I instanceof Promise||(I=Promise.resolve(I)),I.then((A=>"string"==typeof A||A instanceof ArrayBuffer?new Response(A):A));throw"failed fetching recording file: url/data missing in src"}(A),{encoding:s}),h,{idleTimeLimit:y,startAt:l,minFrameTime:I,inputOffset:t,markers_:k});if(({cols:B,rows:Q,events:C,duration:i,effectiveStartAt:e}=n),u=u??B,F=F??Q,0===C.length)throw"recording is missing events";void 0!==o&&function(A,g){const I=document.createElement("a"),B=A.events.map((A=>"m"===A[1]?[A[0],A[1],A[2].label]:A)),Q=function(A){return`${JSON.stringify({version:2,width:A.cols,height:A.rows})}\n${A.events.map(JSON.stringify).join("\n")}\n`}({...A,events:B});I.href=URL.createObjectURL(new Blob([Q],{type:"text/plain"})),I.download=g,I.click()}(n,o);const r=void 0!==N?(a=N,C.filter((A=>A[0]A[2]))):void 0;var a;return E=C.filter((A=>"m"===A[1])).map((A=>[A[0],A[2].label])),{cols:B,rows:Q,duration:i,poster:r,markers:E}},play:function(){return t||(void 0===C[d]&&(e=0),null!==e&&m(e),K()),!0},pause:U,seek:m,step:function(){let A=C[d++];for(;void 0!==A&&"o"!==A[1];)A=C[d++];if(void 0===A)return;n(A[2]);const g=A[0];f=g,s=1e3*g,e=null},stop:U,getCurrentTime:function(){return t?(c()-o)/1e3:(s??0)/1e3}}}],["websocket",function(A,g){let{url:I,bufferTime:B=.1,reconnectDelay:Q=Og,minFrameTime:C}=A,{feed:E,reset:i,setState:e,logger:t}=g;t=new Kg(t,"websocket: ");const o=new TextDecoder;let s,n,r,a=new UA,c=0,D=!1;function w(A){void 0!==n&&n.stop(),n=Wg(E,(A=>a.setTime(A)),B,A,C)}function h(A){if("string"==typeof A.data)t.info("activating asciicast-compatible handler"),s.onmessage=y,y(A);else{const g=new Uint8Array(A.data);if(65==g[0]&&76==g[1]&&105==g[2]&&83==g[3])if(1==g[4]){t.info("activating ALiS v1 handler");const A=g[5];0==A?t.debug("text compression: none"):(t.error(`unsupported compression algorithm (${A})`),s.close()),s.onmessage=l}else t.warn(`unsupported ALiS version (${g[4]})`),s.close();else{t.info("activating raw text handler");const I=o.decode(g),B=function(A){const g=A.match(/\x1b\[8;(\d+);(\d+)t/);if(null!==g)return[parseInt(g[2],10),parseInt(g[1],10)]}(I)??function(A){const g=A.match(/\[.*COLUMNS="(\d{1,3})" LINES="(\d{1,3})".*\]/);if(null!==g)return[parseInt(g[1],10),parseInt(g[2],10)]}(I);if(void 0!==B){const[A,g]=B;N(A,g,0,void 0)}s.onmessage=G,G(A)}}}function y(A){const g=JSON.parse(A.data);Array.isArray(g)?n.pushEvent(g):void 0!==g.cols||void 0!==g.width?N(g.cols??g.width,g.rows??g.height,g.time,g.init??void 0):"offline"===g.status&&k()}function l(A){const g=A.data,I=new DataView(g),B=I.getUint8(0);if(1===B){const A=I.getUint16(1,!0),B=I.getUint16(3,!0),Q=I.getFloat32(5,!0),C=I.getUint32(9,!0);N(A,B,Q,C>0?o.decode(new Uint8Array(g,13,C)):void 0)}else if(111===B){const A=I.getFloat32(1,!0),B=I.getUint32(5,!0),Q=o.decode(new Uint8Array(g,9,B));n.pushEvent([A,"o",Q])}else if(114===B){const A=I.getFloat32(1,!0),g=I.getUint16(5,!0),B=I.getUint16(7,!0);n.pushEvent([A,"r",`${g}x${B}`])}else 4===B?k():t.debug(`unknown frame type: ${B}`)}function G(A){n.pushText(o.decode(A.data))}function N(A,g,I,B){t.debug(`stream reset (${A}x${g} @${I})`),e("playing"),w(I),i(A,g,B),a=new LA,"number"==typeof I&&a.setTime(I)}function k(){t.info("stream offline"),e("offline"),a=new UA}function M(){s=new WebSocket(I),s.binaryType="arraybuffer",s.onopen=()=>{t.info("opened"),w(),r=setTimeout((()=>{c=0}),1e3)},s.onmessage=h,s.onclose=A=>{if(D||1e3===A.code||1005===A.code)t.info("closed"),e("stopped",{reason:"ended"});else{clearTimeout(r);const A=Q(c++);t.info(`unclean close, reconnecting in ${A}...`),e("loading"),setTimeout(M,A)}}}return{play:()=>{M()},stop:()=>{D=!0,void 0!==n&&n.stop(),void 0!==s&&s.close()},getCurrentTime:()=>a.getTime()}}]]),_g=new Map([["asciicast",bg],["typescript",async function(A,g){let{encoding:I}=g;const B=new TextDecoder(I);let Q,C,E=(await A[0].text()).split("\n").filter((A=>A.length>0)).map((A=>A.split(" ")));E[0].length<3&&(E=E.map((A=>["O",A[0],A[1]])));const i=await A[1].arrayBuffer(),e=new Uint8Array(i),t=e.findIndex((A=>10==A))+1,o=B.decode(e.subarray(0,t)).match(/COLUMNS="(\d+)" LINES="(\d+)"/);null!==o&&(Q=parseInt(o[1],10),C=parseInt(o[2],10));const s={array:e,cursor:t};let n=s;if(void 0!==A[2]){const g=await A[2].arrayBuffer();n={array:new Uint8Array(g),cursor:t}}const r=[];let a=0;for(const A of E)if(a+=parseFloat(A[1]),"O"===A[0]){const g=parseInt(A[2],10),I=s.array.subarray(s.cursor,s.cursor+g),Q=B.decode(I);r.push([a,"o",Q]),s.cursor+=g}else if("I"===A[0]){const g=parseInt(A[2],10),I=n.array.subarray(n.cursor,n.cursor+g),Q=B.decode(I);r.push([a,"i",Q]),n.cursor+=g}else if("S"===A[0]&&"SIGWINCH"===A[2]){const g=parseInt(A[4].slice(5),10),I=parseInt(A[3].slice(5),10);r.push([a,"r",`${g}x${I}`])}else"H"===A[0]&&"COLUMNS"===A[2]?Q=parseInt(A[3],10):"H"===A[0]&&"LINES"===A[2]&&(C=parseInt(A[3],10));return Q=Q??80,C=C??24,{cols:Q,rows:C,events:r}}],["ttyrec",async function(A,g){let{encoding:I}=g;const B=new TextDecoder(I),Q=await A.arrayBuffer(),C=new Uint8Array(Q),E=zg(C),i=E.time,e=B.decode(E.data).match(/\x1b\[8;(\d+);(\d+)t/),t=[];let o=80,s=24;null!==e&&(o=parseInt(e[2],10),s=parseInt(e[1],10));let n=0,r=zg(C);for(;void 0!==r;){const A=r.time-i,g=B.decode(r.data);t.push([A,"o",g]),n+=r.len,r=zg(C.subarray(n))}return{cols:o,rows:s,events:t}}]]);return A.create=function(A,g){let I=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const B=I.logger??new Ug,Q=new jA(function(A){if("function"==typeof A)return A;"string"==typeof A&&(A="ws://"==A.substring(0,5)||"wss://"==A.substring(0,6)?{driver:"websocket",url:A}:"clock:"==A.substring(0,6)?{driver:"clock"}:"random:"==A.substring(0,7)?{driver:"random"}:"benchmark:"==A.substring(0,10)?{driver:"benchmark",url:A.substring(10)}:{driver:"recording",url:A});void 0===A.driver&&(A.driver="recording");if("recording"==A.driver&&(void 0===A.parser&&(A.parser="asciicast"),"string"==typeof A.parser)){if(!_g.has(A.parser))throw`unknown parser: ${A.parser}`;A.parser=_g.get(A.parser)}if(Pg.has(A.driver)){const g=Pg.get(A.driver);return(I,B)=>g(A,I,B)}throw`unsupported driver: ${JSON.stringify(A)}`}(A),{logger:B,cols:I.cols,rows:I.rows,loop:I.loop,speed:I.speed,preload:I.preload,startAt:I.startAt,poster:I.poster,markers:I.markers,pauseOnMarkers:I.pauseOnMarkers,idleTimeLimit:I.idleTimeLimit}),C=function(A,g){const I=80,B=24,Q=document.createElement("div");let C;Q.style.height="0px",Q.style.overflow="hidden",Q.style.fontSize="15px",document.body.appendChild(Q);const E=X((()=>(C=b(cg,{cols:I,rows:B,lineHeight:g,fontFamily:A,lines:[]}),C)),Q),i={charW:C.clientWidth/I,charH:C.clientHeight/B,bordersW:C.offsetWidth-C.clientWidth,bordersH:C.offsetHeight-C.clientHeight};return E(),document.body.removeChild(Q),i}(I.terminalFontFamily,I.terminalLineHeight),E={logger:B,core:Q,cols:I.cols,rows:I.rows,fit:I.fit,controls:I.controls??"auto",autoPlay:I.autoPlay??I.autoplay,terminalFontSize:I.terminalFontSize,terminalFontFamily:I.terminalFontFamily,terminalLineHeight:I.terminalLineHeight,theme:I.theme,...C};let i;const e=X((()=>(i=b(Lg,E),i)),g),t={el:i,dispose:e,getCurrentTime:()=>Q.getCurrentTime(),getDuration:()=>Q.getDuration(),play:()=>Q.play(),pause:()=>Q.pause(),seek:A=>Q.seek(A),addEventListener:(A,g)=>Q.addEventListener(A,g.bind(t))};return t},A}({});
diff --git a/src/resources/js/vendor/marked.min.js b/src/resources/js/vendor/marked.min.js
new file mode 100644
index 0000000..9402998
--- /dev/null
+++ b/src/resources/js/vendor/marked.min.js
@@ -0,0 +1,6 @@
+/**
+ * marked v4.3.0 - a markdown parser
+ * Copyright (c) 2011-2023, Christopher Jeffrey. (MIT Licensed)
+ * https://github.com/markedjs/marked
+ */
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).marked={})}(this,function(r){"use strict";function i(e,t){for(var u=0;ue.length)&&(t=e.length);for(var u=0,n=new Array(t);u=e.length?{done:!0}:{done:!1,value:e[u++]}};throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function e(){return{async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,hooks:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}r.defaults=e();function u(e){return t[e]}var n=/[&<>"']/,l=new RegExp(n.source,"g"),o=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,a=new RegExp(o.source,"g"),t={"&":"&","<":"<",">":">",'"':""","'":"'"};function A(e,t){if(t){if(n.test(e))return e.replace(l,u)}else if(o.test(e))return e.replace(a,u);return e}var c=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function x(e){return e.replace(c,function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}var h=/(^|[^\[])\^/g;function p(u,e){u="string"==typeof u?u:u.source,e=e||"";var n={replace:function(e,t){return t=(t=t.source||t).replace(h,"$1"),u=u.replace(e,t),n},getRegex:function(){return new RegExp(u,e)}};return n}var Z=/[^\w:]/g,O=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function f(e,t,u){if(e){try{n=decodeURIComponent(x(u)).replace(Z,"").toLowerCase()}catch(e){return null}if(0===n.indexOf("javascript:")||0===n.indexOf("vbscript:")||0===n.indexOf("data:"))return null}var n;t&&!O.test(u)&&(e=u,g[" "+(n=t)]||(q.test(n)?g[" "+n]=n+"/":g[" "+n]=C(n,"/",!0)),t=-1===(n=g[" "+n]).indexOf(":"),u="//"===e.substring(0,2)?t?e:n.replace(j,"$1")+e:"/"===e.charAt(0)?t?e:n.replace(P,"$1")+e:n+e);try{u=encodeURI(u).replace(/%25/g,"%")}catch(e){return null}return u}var g={},q=/^[^:]+:\/*[^/]*$/,j=/^([^:]+:)[\s\S]*$/,P=/^([^:]+:\/*[^/]*)[\s\S]*$/;var k={exec:function(){}};function d(e,t){var u=e.replace(/\|/g,function(e,t,u){for(var n=!1,r=t;0<=--r&&"\\"===u[r];)n=!n;return n?"|":" |"}).split(/ \|/),n=0;if(u[0].trim()||u.shift(),0t)u.splice(t);else for(;u.length>=1,e+=e;return u+e}function m(e,t,u,n){var r=t.href,t=t.title?A(t.title):null,i=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?(n.state.inLink=!0,e={type:"link",raw:u,href:r,title:t,text:i,tokens:n.inlineTokens(i)},n.state.inLink=!1,e):{type:"image",raw:u,href:r,title:t,text:A(i)}}var b=function(){function e(e){this.options=e||r.defaults}var t=e.prototype;return t.space=function(e){e=this.rules.block.newline.exec(e);if(e&&0=r.length?e.slice(r.length):e}).join("\n")),{type:"code",raw:t,lang:e[2]&&e[2].trim().replace(this.rules.inline._escapes,"$1"),text:u}},t.heading=function(e){var t,u,e=this.rules.block.heading.exec(e);if(e)return t=e[2].trim(),/#$/.test(t)&&(u=C(t,"#"),!this.options.pedantic&&u&&!/ $/.test(u)||(t=u.trim())),{type:"heading",raw:e[0],depth:e[1].length,text:t,tokens:this.lexer.inline(t)}},t.hr=function(e){e=this.rules.block.hr.exec(e);if(e)return{type:"hr",raw:e[0]}},t.blockquote=function(e){var t,u,n,e=this.rules.block.blockquote.exec(e);if(e)return t=e[0].replace(/^ *>[ \t]?/gm,""),u=this.lexer.state.top,this.lexer.state.top=!0,n=this.lexer.blockTokens(t),this.lexer.state.top=u,{type:"blockquote",raw:e[0],tokens:n,text:t}},t.list=function(e){var t=this.rules.block.list.exec(e);if(t){var u,n,r,i,s,l,o,a,D,c,h,p=1<(g=t[1].trim()).length,f={type:"list",raw:"",ordered:p,start:p?+g.slice(0,-1):"",loose:!1,items:[]},g=p?"\\d{1,9}\\"+g.slice(-1):"\\"+g;this.options.pedantic&&(g=p?g:"[*+-]");for(var F=new RegExp("^( {0,3}"+g+")((?:[\t ][^\\n]*)?(?:\\n|$))");e&&(h=!1,t=F.exec(e))&&!this.rules.block.hr.test(e);){if(u=t[0],e=e.substring(u.length),o=t[2].split("\n",1)[0].replace(/^\t+/,function(e){return" ".repeat(3*e.length)}),a=e.split("\n",1)[0],this.options.pedantic?(i=2,c=o.trimLeft()):(i=t[2].search(/[^ ]/),c=o.slice(i=4=i||!a.trim())c+="\n"+a.slice(i);else{if(s)break;if(4<=o.search(/[^ ]/))break;if(d.test(o))break;if(C.test(o))break;if(k.test(o))break;c+="\n"+a}s||a.trim()||(s=!0),u+=D+"\n",e=e.substring(D.length+1),o=a.slice(i)}f.loose||(l?f.loose=!0:/\n *\n *$/.test(u)&&(l=!0)),this.options.gfm&&(n=/^\[[ xX]\] /.exec(c))&&(r="[ ] "!==n[0],c=c.replace(/^\[[ xX]\] +/,"")),f.items.push({type:"list_item",raw:u,task:!!n,checked:r,loose:!1,text:c}),f.raw+=u}f.items[f.items.length-1].raw=u.trimRight(),f.items[f.items.length-1].text=c.trimRight(),f.raw=f.raw.trimRight();for(var E,x=f.items.length,m=0;m$/,"$1").replace(this.rules.inline._escapes,"$1"):"",n=e[3]&&e[3].substring(1,e[3].length-1).replace(this.rules.inline._escapes,"$1"),{type:"def",tag:t,raw:e[0],href:u,title:n}},t.table=function(e){e=this.rules.block.table.exec(e);if(e){var t={type:"table",header:d(e[1]).map(function(e){return{text:e}}),align:e[2].replace(/^ *|\| *$/g,"").split(/ *\| */),rows:e[3]&&e[3].trim()?e[3].replace(/\n[ \t]*$/,"").split("\n"):[]};if(t.header.length===t.align.length){t.raw=e[0];for(var u,n,r,i=t.align.length,s=0;s/i.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):A(e[0]):e[0]}},t.link=function(e){e=this.rules.inline.link.exec(e);if(e){var t=e[2].trim();if(!this.options.pedantic&&/^$/.test(t))return;var u=C(t.slice(0,-1),"\\");if((t.length-u.length)%2==0)return}else{u=function(e,t){if(-1!==e.indexOf(t[1]))for(var u=e.length,n=0,r=0;r$/.test(t)?u.slice(1):u.slice(1,-1):u)&&u.replace(this.rules.inline._escapes,"$1"),title:r&&r.replace(this.rules.inline._escapes,"$1")},e[0],this.lexer)}},t.reflink=function(e,t){var u;if(u=(u=this.rules.inline.reflink.exec(e))||this.rules.inline.nolink.exec(e))return(e=t[(e=(u[2]||u[1]).replace(/\s+/g," ")).toLowerCase()])?m(u,e,u[0],this.lexer):{type:"text",raw:t=u[0].charAt(0),text:t}},t.emStrong=function(e,t,u){void 0===u&&(u="");var n=this.rules.inline.emStrong.lDelim.exec(e);if(n&&(!n[3]||!u.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/))){var r=n[1]||n[2]||"";if(!r||""===u||this.rules.inline.punctuation.exec(u)){var i=n[0].length-1,s=i,l=0,o="*"===n[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(o.lastIndex=0,t=t.slice(-1*e.length+i);null!=(n=o.exec(t));){var a,D=n[1]||n[2]||n[3]||n[4]||n[5]||n[6];if(D)if(a=D.length,n[3]||n[4])s+=a;else if((n[5]||n[6])&&i%3&&!((i+a)%3))l+=a;else if(!(0<(s-=a)))return a=Math.min(a,a+s+l),D=e.slice(0,i+n.index+(n[0].length-D.length)+a),Math.min(i,a)%2?(a=D.slice(1,-1),{type:"em",raw:D,text:a,tokens:this.lexer.inlineTokens(a)}):(a=D.slice(2,-2),{type:"strong",raw:D,text:a,tokens:this.lexer.inlineTokens(a)})}}}},t.codespan=function(e){var t,u,n,e=this.rules.inline.code.exec(e);if(e)return n=e[2].replace(/\n/g," "),t=/[^ ]/.test(n),u=/^ /.test(n)&&/ $/.test(n),n=A(n=t&&u?n.substring(1,n.length-1):n,!0),{type:"codespan",raw:e[0],text:n}},t.br=function(e){e=this.rules.inline.br.exec(e);if(e)return{type:"br",raw:e[0]}},t.del=function(e){e=this.rules.inline.del.exec(e);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2])}},t.autolink=function(e,t){var u,e=this.rules.inline.autolink.exec(e);if(e)return t="@"===e[2]?"mailto:"+(u=A(this.options.mangle?t(e[1]):e[1])):u=A(e[1]),{type:"link",raw:e[0],text:u,href:t,tokens:[{type:"text",raw:u,text:u}]}},t.url=function(e,t){var u,n,r,i;if(u=this.rules.inline.url.exec(e)){if("@"===u[2])r="mailto:"+(n=A(this.options.mangle?t(u[0]):u[0]));else{for(;i=u[0],u[0]=this.rules.inline._backpedal.exec(u[0])[0],i!==u[0];);n=A(u[0]),r="www."===u[1]?"http://"+u[0]:u[0]}return{type:"link",raw:u[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}},t.inlineText=function(e,t){e=this.rules.inline.text.exec(e);if(e)return t=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):A(e[0]):e[0]:A(this.options.smartypants?t(e[0]):e[0]),{type:"text",raw:e[0],text:t}},e}(),B={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:k,lheading:/^((?:.|\n(?!\n))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\.|[^\[\]\\])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/},w=(B.def=p(B.def).replace("label",B._label).replace("title",B._title).getRegex(),B.bullet=/(?:[*+-]|\d{1,9}[.)])/,B.listItemStart=p(/^( *)(bull) */).replace("bull",B.bullet).getRegex(),B.list=p(B.list).replace(/bull/g,B.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+B.def.source+")").getRegex(),B._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",B._comment=/|$)/,B.html=p(B.html,"i").replace("comment",B._comment).replace("tag",B._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),B.paragraph=p(B._paragraph).replace("hr",B.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",B._tag).getRegex(),B.blockquote=p(B.blockquote).replace("paragraph",B.paragraph).getRegex(),B.normal=F({},B),B.gfm=F({},B.normal,{table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),B.gfm.table=p(B.gfm.table).replace("hr",B.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",B._tag).getRegex(),B.gfm.paragraph=p(B._paragraph).replace("hr",B.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("table",B.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",B._tag).getRegex(),B.pedantic=F({},B.normal,{html:p("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?\\1> *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",B._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:k,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:p(B.normal._paragraph).replace("hr",B.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",B.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()}),{escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:k,tag:"^comment|^[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/^(?:[^_*\\]|\\.)*?\_\_(?:[^_*\\]|\\.)*?\*(?:[^_*\\]|\\.)*?(?=\_\_)|(?:[^*\\]|\\.)+(?=[^*])|[punct_](\*+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|(?:[^punct*_\s\\]|\\.)(\*+)(?=[^punct*_\s])/,rDelimUnd:/^(?:[^_*\\]|\\.)*?\*\*(?:[^_*\\]|\\.)*?\_(?:[^_*\\]|\\.)*?(?=\*\*)|(?:[^_\\]|\\.)+(?=[^_])|[punct*](\_+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:k,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~",w.punctuation=p(w.punctuation).replace(/punctuation/g,w._punctuation).getRegex(),w.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,w.escapedEmSt=/(?:^|[^\\])(?:\\\\)*\\[*_]/g,w._comment=p(B._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),w.emStrong.lDelim=p(w.emStrong.lDelim).replace(/punct/g,w._punctuation).getRegex(),w.emStrong.rDelimAst=p(w.emStrong.rDelimAst,"g").replace(/punct/g,w._punctuation).getRegex(),w.emStrong.rDelimUnd=p(w.emStrong.rDelimUnd,"g").replace(/punct/g,w._punctuation).getRegex(),w._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,w._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,w._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,w.autolink=p(w.autolink).replace("scheme",w._scheme).replace("email",w._email).getRegex(),w._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,w.tag=p(w.tag).replace("comment",w._comment).replace("attribute",w._attribute).getRegex(),w._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,w._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,w._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,w.link=p(w.link).replace("label",w._label).replace("href",w._href).replace("title",w._title).getRegex(),w.reflink=p(w.reflink).replace("label",w._label).replace("ref",B._label).getRegex(),w.nolink=p(w.nolink).replace("ref",B._label).getRegex(),w.reflinkSearch=p(w.reflinkSearch,"g").replace("reflink",w.reflink).replace("nolink",w.nolink).getRegex(),w.normal=F({},w),w.pedantic=F({},w.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:p(/^!?\[(label)\]\((.*?)\)/).replace("label",w._label).getRegex(),reflink:p(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",w._label).getRegex()}),w.gfm=F({},w.normal,{escape:p(w.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\'+(u?e:A(e,!0))+"
\n":""+(u?e:A(e,!0))+"
\n"},t.blockquote=function(e){return"\n"+e+"
\n"},t.html=function(e){return e},t.heading=function(e,t,u,n){return this.options.headerIds?"\n":""+e+"\n"},t.hr=function(){return this.options.xhtml?"
\n":"
\n"},t.list=function(e,t,u){var n=t?"ol":"ul";return"<"+n+(t&&1!==u?' start="'+u+'"':"")+">\n"+e+""+n+">\n"},t.listitem=function(e){return""+e+"\n"},t.checkbox=function(e){return" "},t.paragraph=function(e){return""+e+"
\n"},t.table=function(e,t){return"\n\n"+e+"\n"+(t=t&&""+t+"")+"
\n"},t.tablerow=function(e){return"\n"+e+"
\n"},t.tablecell=function(e,t){var u=t.header?"th":"td";return(t.align?"<"+u+' align="'+t.align+'">':"<"+u+">")+e+""+u+">\n"},t.strong=function(e){return""+e+""},t.em=function(e){return""+e+""},t.codespan=function(e){return""+e+"
"},t.br=function(){return this.options.xhtml?"
":"
"},t.del=function(e){return""+e+""},t.link=function(e,t,u){return null===(e=f(this.options.sanitize,this.options.baseUrl,e))?u:(e='"+u+"")},t.image=function(e,t,u){return null===(e=f(this.options.sanitize,this.options.baseUrl,e))?u:(e='
":">"))},t.text=function(e){return e},e}(),z=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,u){return""+u},t.image=function(e,t,u){return""+u},t.br=function(){return""},e}(),$=function(){function e(){this.seen={}}var t=e.prototype;return t.serialize=function(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")},t.getNextSafeSlug=function(e,t){var u=e,n=0;if(this.seen.hasOwnProperty(u))for(n=this.seen[e];u=e+"-"+ ++n,this.seen.hasOwnProperty(u););return t||(this.seen[e]=n,this.seen[u]=0),u},t.slug=function(e,t){void 0===t&&(t={});e=this.serialize(e);return this.getNextSafeSlug(e,t.dryrun)},e}(),S=function(){function u(e){this.options=e||r.defaults,this.options.renderer=this.options.renderer||new _,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new z,this.slugger=new $}u.parse=function(e,t){return new u(t).parse(e)},u.parseInline=function(e,t){return new u(t).parseInline(e)};var e=u.prototype;return e.parse=function(e,t){void 0===t&&(t=!0);for(var u,n,r,i,s,l,o,a,D,c,h,p,f,g,F,A,k="",d=e.length,C=0;C",i?Promise.resolve(t):s?void s(null,t):t;if(i)return Promise.reject(e);if(!s)throw e;s(e)});if(null==e)return l(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof e)return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));if((t=u)&&t.sanitize&&!t.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options"),u.hooks&&(u.hooks.options=u),n){var o,a=u.highlight;try{u.hooks&&(e=u.hooks.preprocess(e)),o=f(e,u)}catch(e){return l(e)}var D,c=function(t){var e;if(!t)try{u.walkTokens&&I.walkTokens(o,u.walkTokens),e=g(o,u),u.hooks&&(e=u.hooks.postprocess(e))}catch(e){t=e}return u.highlight=a,t?l(t):n(null,e)};return!a||a.length<3?c():(delete u.highlight,o.length?(D=0,I.walkTokens(o,function(u){"code"===u.type&&(D++,setTimeout(function(){a(u.text,u.lang,function(e,t){if(e)return c(e);null!=t&&t!==u.text&&(u.text=t,u.escaped=!0),0===--D&&c()})},0))}),void(0===D&&c())):c())}if(u.async)return Promise.resolve(u.hooks?u.hooks.preprocess(e):e).then(function(e){return f(e,u)}).then(function(e){return u.walkTokens?Promise.all(I.walkTokens(e,u.walkTokens)).then(function(){return e}):e}).then(function(e){return g(e,u)}).then(function(e){return u.hooks?u.hooks.postprocess(e):e}).catch(l);try{u.hooks&&(e=u.hooks.preprocess(e));var h=f(e,u),p=(u.walkTokens&&I.walkTokens(h,u.walkTokens),g(h,u));return p=u.hooks?u.hooks.postprocess(p):p}catch(e){return l(e)}}}function I(e,t,u){return R(v.lex,S.parse)(e,t,u)}T.passThroughHooks=new Set(["preprocess","postprocess"]),I.options=I.setOptions=function(e){return I.defaults=F({},I.defaults,e),e=I.defaults,r.defaults=e,I},I.getDefaults=e,I.defaults=r.defaults,I.use=function(){for(var D=I.defaults.extensions||{renderers:{},childTokens:{}},e=arguments.length,t=new Array(e),u=0;u
+
+
+ Sponsor the Caddy Project
+ {{import "/includes/head.html"}}
+ {{template "head" .}}
+
+
+
+
+
+ {{include "/includes/header.html" "dark-header"}}
+
+
+
+
+
+ Lead your industry
+
+
+ Open source sponsors lead the way to a sustainable solution that doesn't compromise on freedom or functionality.
+
+
+
+
+
+
Caddy has no paywalled features
+
+ Competing products generate profits by selling commodity features with expensive* proprietary licenses. Only Caddy is 100% truly open source with ALL its functionality. Since nothing is proprietary, you have more control than any enterprise-licensed software.
+
+
+
+
+
You wouldn't purchase software that has no support
+
+ So why would you rely on free software without support? Open source licenses grant you freedom but not assurances of help. A sponsorship ensures your tech stack gets supported and stays maintained.
+
+
+
+
Sponsorships benefit businesses and the community
+
+ With sponsorships, we don't have to restrict functionality or instances. Your business exceeds its product support requirements at lower costs, and can scale indefinitely. And the technology stays truly open source. Everyone wins.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Individuals
+
+ Whether you're a hobbyist, using Caddy professionally, or you just want to support the project, the Individual tiers are designed so you can be meaningfully involved.
+
+
+ If you would like some basic support at this level, be sure to go with the Pro tier.
+
+
+
+
+
+
+
+ Perfect for the individual developer to help sustain the project's ongoing progress.
+
+
Benefits:
+
+
+
+
+
+
+
+
+
+ Independent professionals find this valuable for private support over email.
+
+
Benefits:
+
+ - Exclusive access to Expert Caddy
+ - Occasional email support
+
+
+
+
+
+
+
+
+
+
+
+
+
Startups
+
+ You're a-hustlin'! We get it. And we got your backend.
+
+
+ These tiers are must-haves for any new business ventures. They provide extreme value to bootstrapped companies that are growing organically.
+
+
+ Established businesses should look into the Business tiers below for more ample support and priority response.
+
+
+
+
+
+
+
+
+ The ideal choice for bootstrapped, early-stage startups.
+
+
Benefits:
+
+ - Exclusive access to Expert Caddy
+ - Occasional email support
+
+
Professional services:
+
+ - No discount
+ - Free onboarding call
+
+
+
+
+
+
+
+
+
+ Perfect if you want some extra assurance, services, and/or publicity.
+
+
Benefits:
+
+ - Exclusive access to Expert Caddy
+ - Occasional email support
+ - Publicity
+ - Triage priority
+
+
Professional services:
+
+ - 10% discount
+ - Free onboarding call
+
+
+
+
+
+
+
+
+
+
+
+
Businesses
+
+ Our professional sponsorships are prime for businesses of all sizes that count on Caddy.
+
+
+ With an active sponsorship, we can respond to incidents more efficiently. We can prioritize your features and patches. And you'll have stronger guarantees that your web server will continue to be maintained.
+
+
+ Business+ covers more services resulting in fewer bills, and offers a bigger discount on custom development.
+
+
+
+
+
+
+
+
+ A must-have plan for any use of Caddy within companies.
+
+
Benefits:
+
+ - Exclusive access to Expert Caddy for everyone on your team
+ - Exclusive access to private development chat
+ - Email support
+ - Marketing
+
+
Professional services:
+
+ - 20% discount (with 6 mo. commitment)
+ - Free onboarding call
+
+
+
+
+
+
+
+
+
+ The must-have plan for any serious use of Caddy within companies. Covers support, patches, and onboarding.
+
+
Benefits:
+
+ - Exclusive access to Expert Caddy for everyone on your team
+ - Exclusive access to private development chat
+ - Limited dedicated support (email, chat, phone and video calls)
+ - Marketing
+ - Triage priority
+ - Development priority
+ - Custom branches/patches
+
+
Professional services:
+
+ - 35% discount (with 6 mo. commitment)
+ - Free onboarding calls
+ - Custom legal (extra)
+ - Custom billing and invoicing
+
+
+
+
+
+
+
+
+
+
+
+
Enterprises
+
+ You have enterprise requirements—and we have enterprise solutions. These are our ultimate support and development offerings which provide peace of mind that no other open source plan does.
+
+
+ We advise that all large companies and enterprise organizations using Caddy should have an active plan which can mitigate costly incidents, train relevant teams, and provide the assurance of ongoing project maintenance.
+
+
+ Enterpise+ is the only plan that guarantees continued development without other sponsors.
+
+
+ ⚠️ Limited stock. These tiers can sell-out in order to preserve service quality for existing customers.
+
+
+
+
+
+
+
+
+ This premium sponsorship package offers everything most organizations need, and can be customized for your company.
+
+
+ ⚠️ Only 2 1 remaining.
+
+
Benefits:
+
+ - Exclusive access to Expert Caddy for everyone in your company
+ - Exclusive access to private development chat
+ - Limited dedicated support (email, chat, phone and video calls)
+ - Marketing
+ - Triage priority
+ - Development priority
+ - Custom branches/patches
+ - Guaranteed response within 2 business days (excluding vacation)
+
+
Professional services:
+
+ - 50-100% discount (with 6 mo. commitment)
+ - Free onboarding calls
+ - Custom legal (extra)
+ - Custom billing and invoicing
+
+
+
+
+
+
+
+
+
+ The ultimate plan to support the Caddy project, and the ONLY one that does not rely on other sponsors.
+
+
+ ⚠️ Only 1 available.
+
+
Benefits:
+
+ - Exclusive access to Expert Caddy for everyone in your company
+ - Exclusive access to private development chat
+ - Dedicated support (email, chat, phone and video calls)
+ - Marketing
+ - Top triage priority
+ - Top development priority
+ - Custom branches/patches
+ - Guaranteed response within 1 business day (excluding vacation)
+ - Regular check-ins/standups
+ - Influence over project roadmap
+ - Custom supply chain controls
+ - On-sites
+
+
Professional services:
+
+ - ✨ Included (except on-call or extreme cases; with 1 year commitment)
+ - Free onboarding calls
+ - Custom legal (most without extra fee)
+ - Custom billing and invoicing
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sponsorship answers
+
+
+ Too often we see the catastrophic results of deploying a web server haphazardly in a commercial environment, only to appeal to the community too late with too little information for a problem that takes too long to solve at that point—an incident that could have been mitigated with proper training and support.
+
+
+ Our take on sponsorships is that all professional and business users of Caddy are expected to invest in a sponsorship, just as we expect tree branches to provide nutrition to their trunk and roots. Our sponsorships are not just feel-good donations. They provide crucial value to companies while sustaining ongoing maintenance.
+
+
+ The original author of Caddy, Matt Holt, operates Dyanim, LLC to maintain the project and direct development alongside a global community. Sponsorships are fulfilled by Dyanim, LLC.
+
+
+
+
Are these software licenses?
+
+ NO. Sponsorships are separate products which provide support, development and training services, marketing, and various project management features for individuals, organizations, and companies. Your license to the software remains the same regardless of sponsorship status.
+
+
+
What are professional services?
+
+ These include any services that are supplemental to routine project maintenance, such as onboarding, training, presenting, and custom development work.
+
+
+
I need something not listed above.
+
+ That's OK - contact us and tell us what you need!
+
+
+
Is the only way to pay through GitHub?
+
+ Nope, our higher tiers can accommodate various forms of payment such as invoices, ACH, wire transfer, or even physical check if needed.
+
+
+
Will we have to approve a new vendor?
+
+ Not likely! Our sponsorship subscriptions are managed by GitHub, which is often already an approved vendor for most businesses.
+
+
+
+
Why sponsorships?
+
+ Professionals and businesses have numerous requirements that are not satisfied by open source licenses, but the wider community has numerous requirements that are not satisfied by proprietary licenses. For example, companies require support and advanced features that are simply too difficult to provide or develop without a business relationship.
+
+
+ To bridge that gap, we offer sponsorships so that our software can remain freely usable while providing businesses the assurances they need when committing to such a crucial technology choice.
+
+
+ We also have a lower tier for individuals who just want to support the project without the means of company funding.
+
+
+ Our software is compelling because sponsorships keep it fully open without expensive, paid-only features that segment and divide the community. Instead, everyone running Caddy for their homelab or school project is using the same version of the software deployed by large enterprises around the world. That's really amazing, and sponsors make it possible.
+
+
+
What if we fall into a category we can't budget for?
+
+ We would ask your product manager why they are deploying software without the means to support it. That said, a well-established business, for example, could sign up for a Startup-tier sponsorship if that is all the budget allows; it would be better than no safety net at all. However, your overall satisfaction will be higher with an appropriate sponsorship tier since we will be able to accommodate your situation better.
+
+
+
Can we do a one-time sponsorship?
+
+ Yes! We call those donations, and welcome them warmly with gratitude.
+
+
+
+
+
+
+
+
+
+
+ Sponsorships are better
+
+
+ Neither companies nor projects are sustainable at scale by open source licenses alone. Some sort of business relationship must be entered to support the company's operations as well as the project's ongoing development.
+
+
+ Typically this is solved by charging for the software or specific features, purchasing insurance, hiring a consultant, or tasking an in-house developer to learn and maintain the technology.
+
+
+ Sponsorships offer a simple and profound solution to this problem with many advantages over the alternatives:
+
+
+
+
Consultants
+
+ Consulting fees are high ($250-500/hr.) to offset the variable nature of the profession, and typically billed hourly, which can be stressful for customers trying to minimize their costs.
+
+
+ Consultants vary and may have mixed skill sets rather than expertise in the topic at hand, for example a specific web server. You may also need to approve them as a vendor before doing business.
+
+
+ Sponsorships have an affordable regular rate without a hard limit of hours to dispell stress lower your costs. You'll get direct access to the world experts on the software, and you can pay through a known vendor, GitHub.
+
+
+
+
Insurance
+
+ Sponsorships are not insurance -- they don't pay back money when there's an incident and can't legally be classified as any kind of coverage. Instead, they help reduce the likelihood and magnitude of incidents in the first place with a comprehensive integration strategy. We'll get to know your setup and help you deploy in the best way possible.
+
+
+ Working with insurance is tedious and expensive, but sponsorships are much easier with less paperwork and legal complications.
+
+
+
+
In-house hire
+
+ The math is simple: a skilled, in-house developer salary may be $180,000/year. A sponsorship is one or two orders of magnitude less, usually $3k-12k/year, and it gives you access to the world experts.
+
+
+ Sponsorships circumvent HR and hiring processes, and because of their ability to train your existing employees, you can still retain that knowledge in-house.
+
+
+ If a hire leaves your company, so often does that knowledge. A sponsorship ensures that the skills can persist with your organization through turnover.
+
+
+
+
Nothing
+
+ It should go without saying that having direct access to the maintainers of the software you rely on is better than having no support, no safety net, and no influence over the project's priorities.
+
+
+ With open source software, you're solely on your own. You can appeal to the community, but you won't have a high-attention relationship that can adjust the priorities of the maintainers.
+
+
+
+
+
+
+
+
+
+
+
+ Tangible business results
+
+
+ Sponsorships help you keep your competitive edge, reduce your costs, and may even increase customer loyalty. You'll be able to meet requirements you never thought possible with pure open source.
+
+
+
+
Software assurance
+
+ It's not insurance. It's better. Gain the peace of mind knowing that your sponsorship helps sustain continued development of the project and that you have direct access to the maintainer.
+
+
+
+
Increased customer loyalty
+
+ Customers feel more loyal toward companies that openly sponsor projects, especially those they use. Tens of thousands of Caddy users are more likely to become and stay your customers when you sponsor the project.
+
+
+
+
Lower costs, higher margins
+
+ Operate more efficiently with a Caddy sponsorship, which can prevent consulting fees, hiring expenses, catastrophic production failures, and inefficient configurations.
+
+
+
+
+
+
+
+
+ {{include "/includes/footer.html"}}
+
+
+
+
+
+
+
diff --git a/src/support.html b/src/support.html
new file mode 100644
index 0000000..386001e
--- /dev/null
+++ b/src/support.html
@@ -0,0 +1,78 @@
+
+
+
+ Caddy help & support
+ {{import "/includes/head.html"}}
+ {{template "head" .}}
+
+
+
+
+
+ {{include "/includes/header.html" "dark-header"}}
+
+
+
+
+ Support
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{include "/includes/footer.html"}}
+
+
diff --git a/src/v2.html b/src/v2.html
deleted file mode 100644
index c300746..0000000
--- a/src/v2.html
+++ /dev/null
@@ -1,487 +0,0 @@
-
-
-
- Caddy 2
- {{import "/includes/head.html"}}
- {{template "head"}}
-
-
-
-
-
-
-
-
-
-
-
-

-
a

project
-
- {{include "/includes/header-nav.html"}}
-
-
-

-
-
A new kind of extensible platform for server apps.
-
-
Still the only web server to use TLS automatically and by default. Deploy and scale HTTPS effortlessly with Caddy 2.
-
-
-
-
-
-
-
-
-
-
All-new core ✨
-
- After 14 months of redesign, Caddy 2 has a whole new architecture inspired by 5 years of experience and feedback from v1.
-
-
-
-
-
Fewer moving parts ⚙️
-
- Caddy saves money, increases developer productivity, and reduces problems in production.
-
-
-
-
-
-
-
-
-
-
-
-
-
A whole new server experience
-
-
-
-
-
- Play screencast to see Caddy serve HTTPS in < 1 minute.
-
-
-
-
-
- Caddy is "really fun to use" and helps make complex deployments simpler. Your Caddy site will have fewer moving parts which lowers costs, increases productivity, and improves reliability.
-
-
- Use Caddy's native JSON configuration to customize every inch of your server, or use the Caddyfile to stand up a production site in just a few easy lines.
-
-
- With Caddy, HTTPS just works; and you can configure and deploy your site in more ways than you ever thought possible. The days of hacking your deployment workflows around the limitations of your web server are over!
-
-
HTTPS quick-start
-
-
Upgrade guide
-
-
-
-
-
-
-
-
-
-
-
-
More than just a web server
-
-
-
- Caddy 2 is a highly extensible, self-hosted platform on which you can build, configure, and deploy long-running services ("apps").
-
-
- Caddy ships with apps for an HTTPS server (static files, reverse proxying, load balancing, etc.), TLS certificate manager, and fully-managed internal PKI. Caddy apps collaborate to make complex infrastructure just work with fewer moving parts.
-
-
- For example, the config shown here keeps your TLS certificates renewed for other programs to use; no external tools or HTTP daemon required!
-
-
- Providing a unified configuration, on-line config API, and automatic documentation for all apps, Caddy is nearly infinitely extensible. Thanks to its unique modular architecture, we can offer unlimited features without bloating the code base.
-
-
-
-
- {
- "apps": {
- "tls": {
- "certificates": {
- "automate": [
- "example.com",
- "example.net"
- ]
- }
- }
- }
-}
-
-
-
-
-
-
-
-
-
Thank you
-
-
-
-
-
-
- As I feel our contributors and sponsors do not get enough recognition or appreciation, allow me to interrupt this release announcement with a personal, open letter to the above named...
-
-
- If you're reading this: thank you. You were the primary collaborators on Caddy 2, and this would not have been possible without you. You gave Caddy new distribution packages, containers, docs, features, field testing; and helped countless users. I think almost no topic in our community forums has gone unanswered. That's truly amazing!
-
-
- Thanks for sticking with the project and believing in it enough to yield a second version. We've solved some hard problems together—usually during nights and weekends—and in days of isolation during this pandemic, no less.
-
-
- Now look at what we have made! Caddy is the only server that grants privacy to its sites' visitors by default. We've raised the bar for the rest of the Web. I hope you are as pleased with our results as I am. Millions more people will soon benefit from your contributions.
-
-
- – Matt
-
-
-
-
-
-
-
-
- Twenty
- beta versions
-
-
- Thousands
- of businesses
-
-
- Millions
- of production hours
-
-
- Billions
- of connections secured
-
-
- Trillions
- of requests served
-
-
-
-
- Caddy 2 is production-ready. It is already serving thousands of sites for businesses and has an unparalleled reliability record in the face of external factors that negatively affect HTTPS uptime. Caddy stays up when other servers let you down.
-
-
- Try your current server with tens of thousands of sites and certificates, then try them with Caddy – you'll see what we mean.
-
-
-
- Deploy with Docker
-
- Deploy anywhere
-
-
-
-
-
-
-
-
-
-
Familiar Caddyfile, now even better
-
-
-
-
caddyserver.com
-
-root * src
-
-file_server
-templates
-encode zstd gzip
-
-redir /docs/json /docs/json/
-rewrite /docs/json/* /docs/json/index.html
-rewrite /docs/* /docs/index.html
-
-reverse_proxy /api/* localhost:9002
-
Actual config used by this site.
-
-
-
-
-
-
-
-
-
-
-
Config API for dynamic, on-line updates
-
-
-
- Caddy is configured through an intuitive REST API that offers ACID guarantees:
-
-
- - Atomic: Multiple changes in a single request are treated as a single unit; any failed change aborts all the other changes.
- - Consistent: No invalid configurations can be loaded; your server will never break if a problem is detected at config load.
- - Isolated: No config changes rely on another. (It helps that HTTP is a stateless protocol!)
- - Durable: Caddy automatically persists the current, valid configuration to disk and can safely resume it after a power cycle if the
--resume
flag is used.
-
-
- In addition, Caddy's API is safely scoped, meaning the URI path restricts changes, making it impossible to accidentally alter other parts of your config.
-
-
API tutorial
-
-
API reference
-
-
-
-
$ caddy start --config caddy.json
-
-$ curl localhost:2019/id/my_handler \
- -X PATCH \
- -H "Content-Type: application/json" \
- -d '{
- "handler": "static_response",
- "body": "Work smarter, not harder."
- }'
-
-$ curl localhost:2019/config/ | jq
-
-
-
-
-
-
-
-
-
-
-
Powered by ... nginx.conf? 🤔
-
-
-
- $ caddy run \
- --config nginx.conf \
- --adapter nginx
-
-
-
-
- Sure, why not!
-
-
- With first-class support for config adaptation, you can use whatever configuration language you prefer, such as NGINX config files! Several other config adapters are already available, including JSONC, JSON5, YAML, and CUE.
-
-
- Our NGINX adapter is still a work in progress, but for some of you Caddy could be a drop-in replacement upgrade for NGINX, with memory safety!
-
-
-
Config adapters
-
-
-
-
-
-
-
-
-
-
Every site on HTTPS – including local and internal sites
-
-
-
- Caddy has always been known for serving sites over HTTPS by default, and now we're extending that to internal and local development sites, too.
-
-
- Powered by open source Smallstep libraries, Caddy automatically acts as a fully-featured, self-hosted CA when necessary. If you configure sites with local or internal addresses (e.g. localhost or IP addresses), Caddy will still serve them over HTTPS using its locally-trusted certificate authority with short-lived, auto-renewing certificates. This makes it easy to mimic production environments in dev!
-
-

-
-
-
- 192.168.1.10 {
- respond "Hello from HTTPS!"
-}
-
-http://localhost {
- respond "Plain HTTP"
-}
-
-
-
-
-
-
-
-
-
-
-
We fixed all known limitations of v1
-
- With an all-new architecture, the development of Caddy 2 closed about 400 issues and solved all known limitations on Caddy 1 caused by fundamental design constraints.
-
-
- Caddy 2 is designed to be highly flexible when needed, but also highly focused on its core competency. If there was anything in Caddy 1 that felt out of place or hacky, it won't in v2.
-
-
- This design was an incredible undertaking: of the approximate 14 months spent developing Caddy 2, only about 7 of them actually consisted of writing code; the other half was solely focused on the design of the underlying architecture.
-
-
-
-
-
-
-
-
Keeps your sites online when other servers... don't
-
- Caddy has the most robust TLS stack on the market. With stronger memory safety guarantees than OpenSSL (Apache & NGINX) and more advanced certificate automation logic than any other server or utility, Caddy keeps your sites online through problems that other servers don't handle.
-
-
-
-
-
Advanced TLS automation
-
- Caddy was the first server to fully automate public certificate management—so we've been doing this longer than anyone. With more than 5 million certificates under management, Caddy has set the gold standard for other servers to live up to:
-
-
- - Async management. Certificate automation never blocks the main thread of the web server.
- - Gentle retries. Failed validation attempts are retried with exponential backoff for up to 1 month. They don't count against normal rate limits; Caddy uses staging/test endpoints during retries.
- - OCSP stapling and caching. Caddy staples OCSP to all qualifying certificates and keeps them conservatively fresh. It even caches them to disk in case of extended OCSP responder outages.
- - Auto-replace after revocation. If the latest OCSP staple indicates a revocation, Caddy automatically replaces the revoked certificate with a new one.
- - Storage pre-checks. Before attempting costly or valuable ACME transactions, Caddy checks to ensure its storage space is sufficient and writeable.
- - Internal throttling and job scheduling. Give Caddy a million certs to manage: no problem, it will gracefully manage them as fast as it can without hammering the CA or duplicating jobs over a long period of time.
- - TLS session ticket key rotation. Caddy automatically rotates TLS 1.2 session ticket keys for better privacy. It can even do this across a cluster!
- - Fleet coordination. All Caddy instances configured for the same storage backend will automatically share certificate and coordinate management in its cluster.
-
-
-
-
Real-life examples
-
- In 2018, several popular sites went down for many users of mainstream clients because crucial OCSP infrastructure had an extended outage. Only Caddy staples and caches OCSP responses by default, so all Caddy sites were unaffected.
-
-
- More recently in 2020, a mass certificate revocation event left many sysadmins scrambling to renew their certificates ahead of schedule. Caddy automatically renews certificates that get revoked, and all Caddy sites were unaffected.
-
-
- Companies have deployed Caddy in front of their site just hours before important audits—potentially saving their compliance status—because of Caddy's safe defaults and "batteries included" approach.
-
-
-
-
Recommended by experts
-
- "TLS must be enabled by default ... and the Caddy web server is a good and usable example." —Krombholz et al., USENIX 2017
-
-
- "Caddy is impressive. This is what we want, setting up a secure website." —Josh Aas, Executive Director, Let's Encrypt
-
-
- "No popular server software does [session ticket key rotation], with the exception of Caddy." —Springall et al., ACM IMC 2016
-
-
-
-
-
-
-
-
-
-
-
- {{include "/includes/footer.html"}}
-
-
-
-