aboutsummaryrefslogtreecommitdiff
path: root/theme
diff options
context:
space:
mode:
authorChristian Cleberg <hello@cleberg.net>2024-03-29 01:42:38 -0500
committerChristian Cleberg <hello@cleberg.net>2024-03-29 01:42:38 -0500
commit00b2726e0561f174393ae600f0f11adb8afebaab (patch)
treea4733d553ce68f64277ffa3a52f800dc58ff72de /theme
parent8ba3d90a0f3db7e5ed29e25ff6d0c1b557ed3ca0 (diff)
parent41bd0ad58e44244fe67cb36e066d4bb68738516f (diff)
downloadcleberg.net-00b2726e0561f174393ae600f0f11adb8afebaab.tar.gz
cleberg.net-00b2726e0561f174393ae600f0f11adb8afebaab.tar.bz2
cleberg.net-00b2726e0561f174393ae600f0f11adb8afebaab.zip
merge org branch into main
Diffstat (limited to 'theme')
-rw-r--r--theme/static/gpg.txt52
-rw-r--r--theme/static/robots.txt3
-rw-r--r--theme/static/styles.css578
-rw-r--r--theme/static/styles.min.css1
-rw-r--r--theme/static/syntax-theme-dark.css280
-rw-r--r--theme/static/syntax-theme-light.css407
-rw-r--r--theme/templates/atom.xml42
-rw-r--r--theme/templates/base.html41
-rw-r--r--theme/templates/blog.html14
-rw-r--r--theme/templates/index.html55
-rw-r--r--theme/templates/page.html11
-rw-r--r--theme/templates/post.html30
-rw-r--r--theme/templates/wiki.html32
13 files changed, 1546 insertions, 0 deletions
diff --git a/theme/static/gpg.txt b/theme/static/gpg.txt
new file mode 100644
index 0000000..93b642d
--- /dev/null
+++ b/theme/static/gpg.txt
@@ -0,0 +1,52 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+0jZ4tA==
+=pl2G
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/theme/static/robots.txt b/theme/static/robots.txt
new file mode 100644
index 0000000..a252a5f
--- /dev/null
+++ b/theme/static/robots.txt
@@ -0,0 +1,3 @@
+User-agent: *
+Disallow:
+Allow: /
diff --git a/theme/static/styles.css b/theme/static/styles.css
new file mode 100644
index 0000000..123db20
--- /dev/null
+++ b/theme/static/styles.css
@@ -0,0 +1,578 @@
+/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
+
+/* Document
+ ========================================================================== */
+
+/**
+ * 1. Correct the line height in all browsers.
+ * 2. Prevent adjustments of font size after orientation changes in iOS.
+ */
+
+html {
+ line-height: 1.15; /* 1 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/* Sections
+ ========================================================================== */
+
+/**
+ * Remove the margin in all browsers.
+ */
+
+body {
+ margin: 0;
+}
+
+/**
+ * Render the `main` element consistently in IE.
+ */
+
+main {
+ display: block;
+}
+
+/**
+ * Correct the font size and margin on `h1` elements within `section` and
+ * `article` contexts in Chrome, Firefox, and Safari.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * 1. Add the correct box sizing in Firefox.
+ * 2. Show the overflow in Edge and IE.
+ */
+
+hr {
+ box-sizing: content-box; /* 1 */
+ height: 0; /* 1 */
+ overflow: visible; /* 2 */
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+pre {
+ font-family: monospace, monospace; /* 1 */
+ font-size: 1em; /* 2 */
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Remove the gray background on active links in IE 10.
+ */
+
+a {
+ background-color: transparent;
+}
+
+/**
+ * 1. Remove the bottom border in Chrome 57-
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
+ */
+
+abbr[title] {
+ border-bottom: none; /* 1 */
+ text-decoration: underline; /* 2 */
+ text-decoration: underline dotted; /* 2 */
+}
+
+/**
+ * Add the correct font weight in Chrome, Edge, and Safari.
+ */
+
+b,
+strong {
+ font-weight: bolder;
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+code,
+kbd,
+samp {
+ font-family: monospace, monospace; /* 1 */
+ font-size: 1em; /* 2 */
+}
+
+/**
+ * Add the correct font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` elements from affecting the line height in
+ * all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+sup {
+ top: -0.5em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove the border on images inside links in IE 10.
+ */
+
+img {
+ border-style: none;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * 1. Change the font styles in all browsers.
+ * 2. Remove the margin in Firefox and Safari.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: inherit; /* 1 */
+ font-size: 100%; /* 1 */
+ line-height: 1.15; /* 1 */
+ margin: 0; /* 2 */
+}
+
+/**
+ * Show the overflow in IE.
+ * 1. Show the overflow in Edge.
+ */
+
+button,
+input {
+ /* 1 */
+ overflow: visible;
+}
+
+/**
+ * Remove the inheritance of text transform in Edge, Firefox, and IE.
+ * 1. Remove the inheritance of text transform in Firefox.
+ */
+
+button,
+select {
+ /* 1 */
+ text-transform: none;
+}
+
+/**
+ * Correct the inability to style clickable types in iOS and Safari.
+ */
+
+button,
+[type="button"],
+[type="reset"],
+[type="submit"] {
+ -webkit-appearance: button;
+}
+
+/**
+ * Remove the inner border and padding in Firefox.
+ */
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+ border-style: none;
+ padding: 0;
+}
+
+/**
+ * Restore the focus styles unset by the previous rule.
+ */
+
+button:-moz-focusring,
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring {
+ outline: 1px dotted ButtonText;
+}
+
+/**
+ * Correct the padding in Firefox.
+ */
+
+fieldset {
+ padding: 0.35em 0.75em 0.625em;
+}
+
+/**
+ * 1. Correct the text wrapping in Edge and IE.
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
+ * 3. Remove the padding so developers are not caught out when they zero out
+ * `fieldset` elements in all browsers.
+ */
+
+legend {
+ box-sizing: border-box; /* 1 */
+ color: inherit; /* 2 */
+ display: table; /* 1 */
+ max-width: 100%; /* 1 */
+ padding: 0; /* 3 */
+ white-space: normal; /* 1 */
+}
+
+/**
+ * Add the correct vertical alignment in Chrome, Firefox, and Opera.
+ */
+
+progress {
+ vertical-align: baseline;
+}
+
+/**
+ * Remove the default vertical scrollbar in IE 10+.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * 1. Add the correct box sizing in IE 10.
+ * 2. Remove the padding in IE 10.
+ */
+
+[type="checkbox"],
+[type="radio"] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Correct the cursor style of increment and decrement buttons in Chrome.
+ */
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Correct the odd appearance in Chrome and Safari.
+ * 2. Correct the outline style in Safari.
+ */
+
+[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ outline-offset: -2px; /* 2 */
+}
+
+/**
+ * Remove the inner padding in Chrome and Safari on macOS.
+ */
+
+[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * 1. Correct the inability to style clickable types in iOS and Safari.
+ * 2. Change font properties to `inherit` in Safari.
+ */
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button; /* 1 */
+ font: inherit; /* 2 */
+}
+
+/* Interactive
+ ========================================================================== */
+
+/*
+ * Add the correct display in Edge, IE 10+, and Firefox.
+ */
+
+details {
+ display: block;
+}
+
+/*
+ * Add the correct display in all browsers.
+ */
+
+summary {
+ display: list-item;
+}
+
+/* Misc
+ ========================================================================== */
+
+/**
+ * Add the correct display in IE 10+.
+ */
+
+template {
+ display: none;
+}
+
+/**
+ * Add the correct display in IE 10.
+ */
+
+[hidden] {
+ display: none;
+}
+
+/* CUSTOM CSS */
+:root {
+ --bg: #fff;
+ --bg-bright: #eee;
+ --fg: #111;
+ --link: #00f;
+ --code: #f00;
+ --border: #ccc;
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ :root {
+ scroll-behavior: smooth;
+ }
+}
+
+body {
+ background-color: var(--bg);
+ color: var(--fg);
+ font-family:
+ Menlo,
+ Consolas,
+ Monaco,
+ Liberation Mono,
+ Lucida Console,
+ monospace;
+ font-size: 0.9rem;
+ line-height: 1.5;
+ max-width: 50em;
+ margin: 0 auto;
+ padding: 0 1rem;
+}
+
+.site-nav,
+footer {
+ border-color: var(--fg);
+}
+
+footer {
+ border-top: 1px dotted;
+ padding-top: 1rem;
+ margin: 1rem 0;
+}
+
+footer p {
+ margin: 0;
+}
+
+.site-nav {
+ border-bottom: 1px dotted;
+}
+
+.site-nav ul {
+ list-style-type: none;
+ display: flex;
+ align-items: center;
+ padding: 0;
+}
+
+.site-nav ul li {
+ margin-right: 0.5rem;
+}
+
+h1,
+h2,
+h3,
+h4 {
+ color: var(--fg);
+}
+
+a,
+a:visited {
+ color: var(--link);
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+img {
+ width: 100%;
+}
+
+table {
+ border-collapse: collapse;
+ color: var(--fg);
+ border-color: var(--bg-bright);
+ font-family:
+ Menlo,
+ Consolas,
+ Monaco,
+ Liberation Mono,
+ Lucida Console,
+ monospace;
+ font-size: 0.9rem;
+}
+
+thead,
+th,
+tr,
+td {
+ border: 1px solid var(--border);
+ padding: 0.25rem;
+}
+
+pre > code,
+time,
+code {
+ font-family:
+ Menlo,
+ Consolas,
+ Monaco,
+ Liberation Mono,
+ Lucida Console,
+ monospace;
+ font-size: inherit;
+}
+
+pre {
+ background-color: var(--bg-bright) !important;
+ margin: 0.5rem 0;
+ padding: 0.5rem;
+ overflow-x: auto;
+}
+
+:not(pre) > code {
+ color: var(--code);
+ font-family: inherit;
+}
+
+aside {
+ background-color: var(--bg-bright);
+ padding: 1rem;
+}
+
+blockquote {
+ background-color: var(--bg-bright);
+ border-left: 5px solid var(--link);
+ margin: 1rem 0;
+ padding: 0.5rem 1rem;
+}
+
+blockquote p {
+ margin: 0;
+}
+
+.post,
+.wiki-post {
+ display: flex;
+}
+
+.post time {
+ flex-shrink: 0;
+ margin-right: 0.5rem;
+}
+
+.wiki-post {
+justify-content: space-between;
+}
+
+.wiki-post:first-of-type {
+border-bottom: 1px dotted var(--fg);
+margin-bottom: 1rem;
+}
+
+.wiki-post p {
+margin: 0;
+}
+
+.post-metadata {
+ border: 1px dotted var(--fg);
+ border-top: none;
+ padding: 1rem;
+}
+
+.post-metadata h1 {
+ margin: 0;
+}
+
+.post-metadata p {
+ margin: 0;
+}
+
+details {
+ margin-top: 1rem;
+}
+
+summary {
+ font-weight: bold;
+}
+
+.footnote-definition {
+ display: flex;
+ justify-content: flex-start;
+ align-items: top;
+ margin: 1rem 0;
+}
+
+.footnote-definition sup {
+ font-size: inherit;
+ top: 0;
+ line-height: inherit;
+ padding-right: 0.5rem;
+}
+
+.footnote-definition sup::after {
+ content: ".";
+}
+
+.footnote-definition p {
+ display: inline-block;
+ margin: 0;
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --bg: #141617;
+ --bg-bright: #191c1d;
+ --fg: #b2aea9;
+ /* --link: #2b8ad9; */
+ --link: #ff79c6;
+ --code: #ffb454;
+ --border: #333;
+ }
+}
diff --git a/theme/static/styles.min.css b/theme/static/styles.min.css
new file mode 100644
index 0000000..f42cf24
--- /dev/null
+++ b/theme/static/styles.min.css
@@ -0,0 +1 @@
+/*!normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css*/html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:initial}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}:root{--bg:#fff;--bg-bright:#eee;--fg:#111;--link:#00f;--code:#f00;--border:#ccc}@media(prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{background-color:var(--bg);color:var(--fg);font-family:Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;font-size:.9rem;line-height:1.5;max-width:50em;margin:0 auto;padding:0 1rem}.site-nav,footer{border-color:var(--fg)}footer{border-top:1px dotted;padding-top:1rem;margin:1rem 0}footer p{margin:0}.site-nav{border-bottom:1px dotted}.site-nav ul{list-style-type:none;display:flex;align-items:center;padding:0}.site-nav ul li{margin-right:.5rem}h1,h2,h3,h4{color:var(--fg)}a,a:visited{color:var(--link);text-decoration:none}a:hover{text-decoration:underline}img{width:100%}table{border-collapse:collapse;color:var(--fg);border-color:var(--bg-bright);font-family:Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;font-size:.9rem}thead,th,tr,td{border:1px solid var(--border);padding:.25rem}pre>code,time,code{font-family:Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;font-size:inherit}pre{background-color:var(--bg-bright)!important;margin:.5rem 0;padding:.5rem;overflow-x:auto}:not(pre)>code{color:var(--code);font-family:inherit}aside{background-color:var(--bg-bright);padding:1rem}blockquote{background-color:var(--bg-bright);border-left:5px solid var(--link);margin:1rem 0;padding:.5rem 1rem}blockquote p{margin:0}.post,.wiki-post{display:flex}.post time{flex-shrink:0;margin-right:.5rem}.wiki-post{justify-content:space-between}.wiki-post:first-of-type{border-bottom:1px dotted var(--fg);margin-bottom:1rem}.wiki-post p{margin:0}.post-metadata{border:1px dotted var(--fg);border-top:none;padding:1rem}.post-metadata h1{margin:0}.post-metadata p{margin:0}details{margin-top:1rem}summary{font-weight:700}.footnote-definition{display:flex;justify-content:flex-start;align-items:top;margin:1rem 0}.footnote-definition sup{font-size:inherit;top:0;line-height:inherit;padding-right:.5rem}.footnote-definition sup::after{content:"."}.footnote-definition p{display:inline-block;margin:0}@media(prefers-color-scheme:dark){:root{--bg:#141617;--bg-bright:#191c1d;--fg:#b2aea9;--link:#ff79c6;--code:#ffb454;--border:#333}} \ No newline at end of file
diff --git a/theme/static/syntax-theme-dark.css b/theme/static/syntax-theme-dark.css
new file mode 100644
index 0000000..75cf13b
--- /dev/null
+++ b/theme/static/syntax-theme-dark.css
@@ -0,0 +1,280 @@
+/*
+ * theme "ayu" generated by syntect
+ */
+
+.z-code {
+ color: #bfbab0;
+ background-color: #0f1419;
+}
+
+.z-comment, .z-punctuation.z-definition.z-comment {
+ color: #5c6773;
+font-style: italic;
+}
+.z-variable {
+ color: #bfbab0;
+}
+.z-string, .z-constant.z-other.z-symbol {
+ color: #c2d94c;
+}
+.z-constant.z-numeric {
+ color: #f29718;
+}
+.z-string.z-regexp, .z-constant.z-character.z-escape {
+ color: #95e6cb;
+}
+.z-constant.z-language {
+ color: #f29718;
+}
+.z-constant.z-character, .z-constant.z-other {
+ color: #f29718;
+}
+.z-variable.z-member {
+ color: #ec5f67;
+}
+.z-keyword, .z-keyword.z-operator.z-word {
+ color: #ff7733;
+}
+.z-keyword.z-operator {
+ color: #f29668;
+}
+.z-punctuation.z-separator, .z-punctuation.z-terminator {
+ color: #bfbab0;
+}
+.z-punctuation.z-section {
+ color: #bfbab0;
+}
+.z-punctuation.z-accessor {
+ color: #f29668;
+}
+.z-punctuation.z-definition.z-annotation {
+ color: #bfbab0;
+}
+.z-variable.z-other.z-dollar.z-only.z-js, .z-variable.z-other.z-object.z-dollar.z-only.z-js, .z-variable.z-type.z-dollar.z-only.z-js, .z-support.z-class.z-dollar.z-only.z-js {
+ color: #e6b673;
+}
+.z-storage {
+ color: #ff7733;
+}
+.z-storage.z-type {
+ color: #ff7733;
+}
+.z-entity.z-name.z-function {
+ color: #ffb454;
+}
+.z-entity.z-name, .z-entity.z-name.z-tag, .z-entity.z-name.z-label) {
+ color: #59c2ff;
+}
+.z-entity.z-other.z-inherited-class {
+ color: #59c2ff;
+text-decoration: underline;
+}
+.z-variable.z-parameter {
+ color: #f29718;
+}
+.z-variable.z-language {
+ color: #39bae6;
+font-style: italic;
+}
+.z-entity.z-name.z-tag, .z-meta.z-tag.z-sgml {
+ color: #39bae6;
+}
+.z-punctuation.z-definition.z-tag.z-end, .z-punctuation.z-definition.z-tag.z-begin, .z-punctuation.z-definition.z-tag {
+ color: #39bae6;
+}
+.z-entity.z-other.z-attribute-name {
+ color: #ffb454;
+}
+.z-variable.z-function, .z-variable.z-annotation {
+ color: #ffb454;
+}
+.z-support.z-function, .z-support.z-macro {
+ color: #f07178;
+}
+.z-support.z-constant {
+ color: #f29668;
+font-style: italic;
+}
+.z-support.z-type, .z-support.z-class {
+ color: #39bae6;
+font-style: italic;
+}
+.z-invalid {
+ color: #ff3333;
+}
+.z-invalid.z-deprecated {
+ color: #ffffff;
+ background-color: #ff7733;
+}
+.z-meta.z-diff, .z-meta.z-diff.z-header {
+ color: #c594c5;
+}
+.z-source.z-ruby .z-variable.z-other.z-readwrite {
+ color: #ffb454;
+}
+.z-source.z-css .z-entity.z-name.z-tag, .z-source.z-sass .z-entity.z-name.z-tag, .z-source.z-scss .z-entity.z-name.z-tag, .z-source.z-less .z-entity.z-name.z-tag, .z-source.z-stylus .z-entity.z-name.z-tag {
+ color: #59c2ff;
+}
+.z-source.z-css .z-support.z-type, .z-source.z-sass .z-support.z-type, .z-source.z-scss .z-support.z-type, .z-source.z-less .z-support.z-type, .z-source.z-stylus .z-support.z-type {
+ color: #5c6773;
+}
+.z-support.z-type.z-property-name {
+ color: #39bae6;
+}
+.z-constant.z-numeric.z-line-number.z-find-in-files {
+ color: #5c6773;
+}
+.z-constant.z-numeric.z-line-number.z-match {
+ color: #ff7733;
+}
+.z-entity.z-name.z-filename.z-find-in-files {
+ color: #c2d94c;
+}
+.z-message.z-error {
+ color: #ff3333;
+}
+.z-source.z-json .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json, .z-source.z-json .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-punctuation.z-definition.z-string {
+ color: #39bae6;
+}
+.z-source.z-json .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json, .z-source.z-json .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-punctuation.z-definition.z-string {
+ color: #39bae6;
+}
+.z-source.z-json .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json, .z-source.z-json .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-punctuation.z-definition.z-string {
+ color: #39bae6;
+}
+.z-source.z-json .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json, .z-source.z-json .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-punctuation.z-definition.z-string {
+ color: #39bae6;
+}
+.z-source.z-json .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json, .z-source.z-json .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-punctuation.z-definition.z-string {
+ color: #39bae6;
+}
+.z-source.z-json .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json, .z-source.z-json .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-punctuation.z-definition.z-string {
+ color: #39bae6;
+}
+.z-source.z-json .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json, .z-source.z-json .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-punctuation.z-definition.z-string {
+ color: #39bae6;
+}
+.z-source.z-json .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json, .z-source.z-json .z-meta .z-meta.z-structure.z-dictionary.z-json .z-punctuation.z-definition.z-string {
+ color: #39bae6;
+}
+.z-source.z-json .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json, .z-source.z-json .z-meta.z-structure.z-dictionary.z-json .z-punctuation.z-definition.z-string {
+ color: #39bae6;
+}
+.z-markup.z-heading {
+ color: #ff7733;
+font-weight: bold;
+}
+.z-string.z-other.z-link, .z-markup.z-underline.z-link {
+ color: #95e6cb;
+text-decoration: underline;
+font-style: italic;
+}
+.z-punctuation.z-definition.z-image {
+ color: #ffb454;
+}
+.z-markup.z-italic {
+ color: #f07178;
+font-style: italic;
+}
+.z-markup.z-bold {
+ color: #f07178;
+font-weight: bold;
+}
+.z-markup.z-italic .z-markup.z-bold, .z-markup.z-bold .z-markup.z-italic {
+font-weight: bold;
+font-style: italic;
+}
+.z-markup.z-raw {
+ background-color: #bfbab0;
+}
+.z-markup.z-raw.z-inline {
+ background-color: #bfbab0;
+}
+.z-meta.z-separator {
+ color: #5c6773;
+ background-color: #bfbab0;
+font-weight: bold;
+}
+.z-markup.z-quote {
+ color: #f29718;
+font-style: italic;
+}
+.z-markup.z-list.z-numbered.z-bullet, .z-markup.z-list .z-punctuation.z-definition.z-list_item {
+ color: #95e6cb;
+}
+.z-markup.z-inserted {
+ color: #c2d94c;
+}
+.z-markup.z-changed {
+ color: #39bae6;
+}
+.z-markup.z-deleted {
+ color: #f07178;
+}
+.z-markup.z-strike {
+ color: #e6b673;
+}
+.z-markup.z-table {
+ color: #39bae6;
+ background-color: #bfbab0;
+}
+.z-text.z-html.z-markdown .z-markup.z-raw.z-inline {
+ color: #f29668;
+}
+.z-text.z-html.z-markdown .z-meta.z-dummy.z-line-break {
+ color: #5c6773;
+}
+.z-markup.z-raw.z-block.z-fenced.z-markdown {
+ color: #bfbab0;
+ background-color: #bfbab0;
+}
+.z-punctuation.z-definition.z-fenced.z-markdown, .z-variable.z-language.z-fenced.z-markdown {
+ color: #5c6773;
+ background-color: #bfbab0;
+}
+.z-variable.z-language.z-fenced.z-markdown {
+ color: #5c6773;
+}
+.z-markup.z-inserted.z-git_gutter {
+ color: #c2d94c;
+}
+.z-markup.z-changed.z-git_gutter {
+ color: #39bae6;
+}
+.z-markup.z-deleted.z-git_gutter {
+ color: #ff3333;
+}
+.z-markup.z-ignored.z-git_gutter {
+ color: #20272c;
+}
+.z-markup.z-untracked.z-git_gutter {
+ color: #20272c;
+}
+.z-gutter_color {
+ color: #ffffff;
+}
+.z-acejump.z-label.z-blue {
+ color: #ffffff;
+ background-color: #39bae6;
+}
+.z-acejump.z-label.z-green {
+ color: #ffffff;
+ background-color: #c2d94c;
+}
+.z-acejump.z-label.z-orange {
+ color: #ffffff;
+ background-color: #ff7733;
+}
+.z-acejump.z-label.z-purple {
+ color: #ffffff;
+ background-color: #f07178;
+}
+.z-sublimelinter.z-mark.z-warning {
+ color: #39bae6;
+}
+.z-sublimelinter.z-gutter-mark {
+ color: #ffffff;
+}
+.z-sublimelinter.z-mark.z-error {
+ color: #ff3333;
+}
diff --git a/theme/static/syntax-theme-light.css b/theme/static/syntax-theme-light.css
new file mode 100644
index 0000000..f7dfcb3
--- /dev/null
+++ b/theme/static/syntax-theme-light.css
@@ -0,0 +1,407 @@
+/*
+ * theme "GitHub" generated by syntect
+ */
+
+.z-code {
+ color: #323232;
+ background-color: #ffffff;
+}
+
+.z-comment {
+ color: #969896;
+font-style: italic;
+}
+.z-string {
+ color: #183691;
+}
+.z-regexp-operator {
+ color: #a71d5d;
+}
+.z-string.z-regexp.z-characterclass .z-punctuation.z-definition.z-string.z-begin, .z-string.z-regexp.z-characterclass .z-punctuation.z-definition.z-string.z-end {
+ color: #a71d5d;
+}
+.z-constant.z-numeric {
+ color: #0086b3;
+}
+.z-constant.z-language {
+ color: #0086b3;
+}
+.z-constant.z-character, .z-constant.z-other, .z-variable.z-other.z-constant {
+ color: #0086b3;
+}
+.z-variable {
+ color: #323232;
+}
+.z-keyword {
+ color: #a71d5d;
+font-weight: bold;
+}
+.z-bitwise-operator {
+ color: #a71d5d;
+font-weight: bold;
+}
+.z-storage {
+ color: #a71d5d;
+font-weight: bold;
+}
+.z-storage.z-type {
+ color: #a71d5d;
+font-weight: bold;
+}
+.z-entity.z-name.z-class {
+ color: #0086b3;
+}
+.z-entity.z-other.z-inherited-class {
+ color: #0086b3;
+}
+.z-entity.z-name.z-function {
+ color: #795da3;
+font-weight: bold;
+}
+.z-variable.z-parameter {
+ color: #323232;
+}
+.z-entity.z-name.z-tag {
+ color: #63a35c;
+}
+.z-entity.z-other.z-attribute-name {
+ color: #795da3;
+}
+.z-support.z-function {
+ color: #62a35c;
+}
+.z-support.z-constant {
+ color: #0086b3;
+}
+.z-support.z-type, .z-support.z-class {
+ color: #0086b3;
+}
+.z-support.z-other.z-variable {
+ color: #323232;
+}
+.z-invalid, .z-invalid.z-illegal, .z-invalid.z-deprecated {
+ color: #b52a1d;
+ background-color: #f5f5f5;
+font-weight: bold;
+}
+.z-entity.z-name.z-filename.z-find-in-files {
+ color: #323232;
+font-weight: bold;
+}
+.z-constant.z-numeric.z-line-number.z-find-in-files, .z-constant.z-numeric.z-line-number.z-match.z-find-in-files {
+ color: #b3b3b3;
+}
+.z-meta.z-diff.z-header {
+ color: #969896;
+ background-color: #ffffff;
+font-style: italic;
+}
+.z-meta.z-diff.z-header .z-punctuation.z-definition.z-from-file.z-diff {
+ color: #bd2c00;
+ background-color: #ffecec;
+font-weight: bold;
+font-style: italic;
+}
+.z-meta.z-diff.z-header .z-punctuation.z-definition.z-to-file.z-diff {
+ color: #55a532;
+ background-color: #eaffea;
+font-weight: bold;
+font-style: italic;
+}
+.z-meta.z-diff.z-range {
+ color: #969896;
+font-weight: bold;
+font-style: italic;
+}
+.z-markup.z-deleted {
+ background-color: #ffecec;
+}
+.z-markup.z-deleted .z-punctuation.z-definition.z-inserted {
+ color: #bd2c00;
+font-weight: bold;
+}
+.z-markup.z-inserted {
+ background-color: #eaffea;
+}
+.z-markup.z-inserted .z-punctuation.z-definition.z-inserted {
+ color: #55a532;
+font-weight: bold;
+}
+.z-markup.z-deleted.z-git_gutter {
+ color: #bd2c00;
+}
+.z-markup.z-inserted.z-git_gutter {
+ color: #55a532;
+}
+.z-markup.z-changed.z-git_gutter {
+ color: #0086b3;
+}
+.z-markup.z-ignored.z-git_gutter {
+ color: #b3b3b3;
+}
+.z-markup.z-untracked.z-git_gutter {
+ color: #b3b3b3;
+}
+.z-source.z-css .z-punctuation.z-definition.z-entity {
+ color: #323232;
+}
+.z-source.z-css .z-entity.z-other.z-attribute-name.z-pseudo-class, .z-source.z-css .z-entity.z-other.z-attribute-name.z-pseudo-element {
+ color: #a71d5d;
+}
+.z-source.z-css .z-meta.z-value, .z-source.z-css .z-support.z-constant, .z-source.z-css .z-support.z-function {
+ color: #323232;
+}
+.z-source.z-css .z-constant.z-other.z-color {
+ color: #ed6a43;
+}
+.z-source.z-scss .z-punctuation.z-definition.z-entity {
+ color: #323232;
+}
+.z-source.z-scss .z-entity.z-other.z-attribute-name.z-pseudo-class, .z-source.z-scss .z-entity.z-other.z-attribute-name.z-pseudo-element {
+ color: #a71d5d;
+}
+.z-source.z-scss .z-support.z-constant.z-property-value, .z-source.z-scss .z-support.z-function {
+ color: #323232;
+}
+.z-source.z-scss .z-variable {
+ color: #a71d5d;
+}
+.z-variable.z-language.z-this.z-js {
+ color: #ed6a43;
+}
+.z-source.z-js .z-entity.z-name.z-function {
+ color: #323232;
+}
+.z-source.z-js .z-meta.z-function .z-entity.z-name.z-function, .z-source.z-js .z-entity.z-name.z-function .z-meta.z-function {
+ color: #795da3;
+font-weight: bold;
+}
+.z-entity.z-name.z-type.z-new.z-js {
+ color: #795da3;
+}
+.z-variable.z-language.z-prototype.z-js {
+ color: #0086b3;
+}
+.z-source.z-js .z-support.z-function {
+ color: #0086b3;
+}
+.z-support.z-type.z-object.z-console.z-js {
+ color: #795da3;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #183691;
+font-weight: bold;
+}
+.z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #323232;
+}
+.z-source.z-python .z-keyword {
+font-weight: bold;
+}
+.z-source.z-python .z-storage {
+font-weight: bold;
+}
+.z-source.z-python .z-storage.z-type {
+font-weight: bold;
+}
+.z-source.z-python .z-entity.z-name.z-function {
+ color: #323232;
+font-weight: bold;
+}
+.z-source.z-php .z-entity.z-name.z-type.z-class {
+ color: #323232;
+font-weight: bold;
+}
+.z-variable.z-language.z-ruby {
+ color: #ed6a43;
+}
+.z-entity.z-name.z-type.z-module.z-ruby {
+ color: #795da3;
+font-weight: bold;
+}
+.z-entity.z-name.z-type.z-class.z-ruby {
+ color: #795da3;
+font-weight: bold;
+}
+.z-entity.z-other.z-inherited-class.z-ruby {
+ color: #795da3;
+font-weight: bold;
+}
+.z-punctuation.z-definition.z-heading.z-markdown, .z-punctuation.z-definition.z-italic.z-markdown, .z-punctuation.z-definition.z-bold.z-markdown, .z-punctuation.z-definition.z-string.z-begin.z-markdown, .z-punctuation.z-definition.z-string.z-end.z-markdown, .z-punctuation.z-definition.z-metadata.z-markdown, .z-punctuation.z-definition.z-link.z-markdown, .z-punctuation.z-definition.z-blockquote.z-markdown, .z-punctuation.z-definition.z-raw.z-markdown {
+ color: #a71d5d;
+}
+.z-text.z-html.z-markdown .z-meta.z-separator {
+ color: #b3b3b3;
+}
+.z-text.z-html.z-markdown .z-markup.z-heading {
+font-weight: bold;
+}
+.z-text.z-html.z-markdown .z-markup.z-raw.z-block {
+ color: #323232;
+}
+.z-text.z-html.z-markdown .z-markup.z-raw.z-inline {
+ color: #323232;
+}
+.z-text.z-html.z-markdown .z-meta.z-link, .z-text.z-html.z-markdown .z-meta.z-image {
+ color: #4183c4;
+}
+.z-text.z-html.z-markdown .z-markup.z-underline.z-link, .z-text.z-html.z-markdown .z-constant.z-other.z-reference {
+font-style: italic;
+}
+.z-text.z-html.z-markdown .z-markup.z-list {
+ color: #ed6a43;
+}
+.z-text.z-html.z-markdown .z-markup.z-bold {
+font-weight: bold;
+}
+.z-text.z-html.z-markdown .z-markup.z-italic {
+font-style: italic;
+}
+.z-text.z-html.z-markdown .z-markup.z-bold .z-markup.z-italic {
+font-weight: bold;
+font-style: italic;
+}
+.z-text.z-html.z-markdown .z-markup.z-italic .z-markup.z-bold {
+font-weight: bold;
+font-style: italic;
+}
diff --git a/theme/templates/atom.xml b/theme/templates/atom.xml
new file mode 100644
index 0000000..8ff1e30
--- /dev/null
+++ b/theme/templates/atom.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<rss version="2.0"
+ xmlns:content="http://purl.org/rss/1.0/modules/content/"
+ xmlns:wfw="http://wellformedweb.org/CommentAPI/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:atom="http://www.w3.org/2005/Atom"
+ xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
+ xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
+ xmlns:georss="http://www.georss.org/georss"
+ xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
+ xmlns:media="http://search.yahoo.com/mrss/">
+ <channel>
+ <title>{{ site_name | default("Simple Blog") }}</title>
+ <atom:link
+ href="{{ url_for("rss") }}"
+ rel="self" type="application/rss+xml" />
+ <link>{{ url_for("index") }}</link>
+ <description><![CDATA[]]></description>
+ <language>en</language>
+ <pubDate>{{ posts | first | getattr("date") | strftime("%a, %d %b %Y %H:%M:%S %z") }}</pubDate>
+ <lastBuildDate>{{ now() | strftime("%a, %d %b %Y %H:%M:%S %z") }}</lastBuildDate>
+ <generator>{{ meta.generator }}</generator>
+ <webMaster>{{ site_owner | default("hello@cleberg.net") }}</webMaster>
+ <image>
+ <url>{{ url_for("index") }}media/img/8bitme.png</url>
+ <title>Blog Author</title>
+ <link>{{ url_for("index") }}</link>
+ </image>
+
+ {% for post in posts %}
+ <item>
+ <title>{{ post.title }}</title>
+ <link>{{ url_for("blog", slug=post.slug) }}</link>
+ <author>{{ post.author|default("hello@cleberg.net") }}</author>
+ <guid isPermaLink="false">{{ url_for("blog", slug=post.slug) }}</guid>
+ <pubDate>{{ post.date|strftime("%a, %d %b %Y %H:%M:%S %z") }}</pubDate>
+ <description><![CDATA[{{ post.html|safe }}]]></description>
+ </item>
+ {% endfor %}
+
+ </channel>
+</rss>
diff --git a/theme/templates/base.html b/theme/templates/base.html
new file mode 100644
index 0000000..167883c
--- /dev/null
+++ b/theme/templates/base.html
@@ -0,0 +1,41 @@
+
+<!doctype html>
+<html lang="en-us">
+<head>
+ {% block head %}
+ <meta charset="utf-8">
+ <title>
+ {% block subtitle %}{% endblock %}
+ {% block title %}{{ site_name | default("weblorg website") }}{% endblock %}
+ </title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ {% if site_owner is defined %}<meta name="author" content="{{ site_owner }}" >{% endif %}
+ {% if site_description is defined %}<meta name="description" content="{{ site_description }}" >{% endif %}
+ {% if site_keywords is defined %}<meta name="keywords" content="{{ site_keywords }}" >{% endif %}
+ <link rel="stylesheet" href="{{ url_for("static", file="styles.min.css") }}" type="text/css">
+ {% block meta %}{% endblock %}
+ {% endblock %}
+</head>
+<body>
+ {% block nav %}
+ <nav class="site-nav" aria-label="site-nav" role="navigation">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ <li><a href="/services/">Services</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ </ul>
+ </nav>
+ {% endblock %}
+
+ <main>{% block main %}{% endblock %}</main>
+
+ {% block footer %}
+ <footer>
+ <p>Last Build: &lt;{{ now() | strftime("%Y-%m-%d %a %H:%M:%S") }}&gt;</p>
+ <p><a href="https://git.cleberg.net/cleberg.net.git" target="_blank" rel="noopener">Source Code</a></p>
+ <p><a href="/atom.xml">Atom RSS Feed</a></p>
+ </footer>
+ {% endblock %}
+</body>
+</html>
diff --git a/theme/templates/blog.html b/theme/templates/blog.html
new file mode 100644
index 0000000..b3b3a3f
--- /dev/null
+++ b/theme/templates/blog.html
@@ -0,0 +1,14 @@
+{% extends "base.html" %}
+
+{% block subtitle %}Blog | {% endblock %}
+{% block main %}
+ <h1>Blog</h1>
+ <p>Use <code>Ctrl + F</code> to search blog post titles for keywords.</p>
+ <p>You can also add the <a href="/feed.xml">RSS Feed</a> to your feed reader.</p>
+ {% for post in posts %}
+ <div class="post">
+ <time datetime="{{ post.date | strftime("%Y-%m-%d") }}">&lt;{{ post.date|strftime("%Y-%m-%d") }}&gt;</time>
+ <a href="{{ url_for("blog", slug=post.slug) }}">{{ post.title }}</a>
+ </div>
+ {% endfor %}
+{% endblock %}
diff --git a/theme/templates/index.html b/theme/templates/index.html
new file mode 100644
index 0000000..923d920
--- /dev/null
+++ b/theme/templates/index.html
@@ -0,0 +1,55 @@
+{% extends "base.html" %}
+
+{% block main %}
+<section>
+ <h1>cleberg.net</h1>
+ <blockquote>Do AIs dream in electric sheep?<br>He hoped it had nanosecond nightmares.</blockquote>
+</section>
+<section>
+ <h2>Recent Blog Posts</h2>
+<<<<<<< HEAD:templates/index.html
+ {% set section = get_section(path="blog/_index.md") %}
+ {% set i = 0 %}
+ {% for page in section.pages %}
+ {% if i < 3%}
+ {% set_global i = i + 1%}
+ <div class="post">
+ <time datetime="{{ page.date | date(format='%Y-%m-%d %H:%M:%S') }}">{{ page.date | date(format='%Y-%m-%d') }}</time>
+ <a href="/blog/{{ page.slug }}/">{{ page.title }}</a>
+ </div>
+ {% endif %}
+ {% endfor %}
+=======
+ <div class="post">
+ <time datetime="2024-03-15">&lt;2024-03-15&gt;</time>
+ <a href="/blog/self-hosting-ddns-updater.html">Self-Hosting DDNS Updater</a>
+ </div>
+ <div class="post">
+ <time datetime="2024-03-14">&lt;2024-03-14&gt;</time>
+ <a href="/blog/doom-emacs-org-mode.html">Doom Emacs & Org-Mode</a>
+ </div>
+ <div class="post">
+ <time datetime="2024-02-21">&lt;2024-02-21&gt;</time>
+ <a href="/blog/self-hosting-an-otter-wiki.html">Self-Hosting An Otter Wiki</a>
+ </div>
+>>>>>>> org:theme/templates/index.html
+ <br>
+ <a href="/blog/">All Posts &rarr;</a>
+</section>
+<section>
+ <h2>Everything Else</h2>
+ <ul>
+ <li><a href="/salary/">Salary</a></li>
+ <li><a href="/services/">Services</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ </ul>
+</section>
+<section>
+ <h2>Contact</h2>
+ <ul>
+ <li>hello [at] cleberg.net (<a href="/gpg.txt">GPG</a>)</li>
+ <li><a href="https://matrix.to/#/@cyborg:matrix.tchncs.de" target="_blank" rel="noopener">@cyborg:@matrix.tchncs.de</a></li>
+ <li><a href="https://git.cleberg.net/cleberg.net.git" target="_blank" rel="noopener">Git</a></li>
+ </ul>
+</section>
+{% endblock %}
diff --git a/theme/templates/page.html b/theme/templates/page.html
new file mode 100644
index 0000000..fb7afa9
--- /dev/null
+++ b/theme/templates/page.html
@@ -0,0 +1,11 @@
+{% extends "base.html" %}
+
+{% block subtitle %}
+ {{ post.title }} |
+{% endblock %}
+{% block main %}
+<article role="article">
+ <h1>{{ post.title }}</h1>
+ <section>{{ post.html | safe }}</section>
+</article>
+{% endblock %}
diff --git a/theme/templates/post.html b/theme/templates/post.html
new file mode 100644
index 0000000..d0b76db
--- /dev/null
+++ b/theme/templates/post.html
@@ -0,0 +1,30 @@
+{% extends "base.html" %}
+
+{% block subtitle %}
+ {{ post.title }} |
+{% endblock %}
+{% block meta %}
+<meta property="og:title" content="{{ post.title }}">
+<meta property="og:url" content="{{ post.url }}">
+{% if post.description is defined %}
+<meta property="og:description" content="{{ post.description }}">
+{% elif project_description is defined %}
+<meta property="og:description" content="{{ project_description }}">
+{% endif %}
+<link rel="stylesheet" href="/syntax-theme-dark.css" media="(prefers-color-scheme: dark)">
+<link rel="stylesheet" href="/syntax-theme-light.css" media="(prefers-color-scheme: light)">
+{% endblock %}
+
+{% block main %}
+<article role="article">
+ <section class="post-metadata">
+ <h1 class="post__title">{{ post.title }}</h1>
+ {% if post.date is defined %}
+ <time datetime="{{ post.date|strftime("%Y-%m-%d") }}">&lt;{{ post.date|strftime("%Y-%m-%d %a %H:%M:%S") }}&gt;</time>
+ {% endif %}
+ </section>
+ <section>
+ {{ post.html | safe }}
+ </section>
+</article>
+{% endblock %}
diff --git a/theme/templates/wiki.html b/theme/templates/wiki.html
new file mode 100644
index 0000000..ead64c4
--- /dev/null
+++ b/theme/templates/wiki.html
@@ -0,0 +1,32 @@
+{% extends "base.html" %}
+
+<<<<<<< HEAD:templates/wiki.html
+{% block content %}
+<h1>{{ section.title }}</h1>
+=======
+{% block subtitle %}Wiki | {% endblock %}
+{% block main %}
+<h1>Wiki</h1>
+>>>>>>> org:theme/templates/wiki.html
+<p>Use <code>Ctrl + F</code> to search wiki pages for keywords.</p>
+<div class="wiki-post">
+ <p>Wiki Page</p>
+ <p>Last Updated</p>
+</div>
+<<<<<<< HEAD:templates/wiki.html
+{% for page in section.pages %}
+ <div class="wiki-post">
+ <p><a href="/wiki/{{ page.slug }}/">{{ page.title }}</a></p>
+ <time datetime="{{ page.updated | date(format='%Y-%m-%d %H:%M:%S') }}">{{ page.updated | date(format='%Y-%m-%d')}}</p>
+ </div>
+{% endfor %}
+{% endblock content %}
+=======
+{% for post in posts %}
+ <div class="wiki-post">
+ <a href="{{ url_for("wiki", slug=post.slug) }}">{{ post.title }}</a>
+ <time datetime="{{ post.date | strftime("%Y-%m-%d") }}">&lt;{{ post.date|strftime("%Y-%m-%d") }}&gt;</time>
+ </div>
+{% endfor %}
+{% endblock %}
+>>>>>>> org:theme/templates/wiki.html