diff --git a/.gitignore b/.gitignore
index 69da481..0201865 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,5 @@
build/
-assets/
-content/
-layouts/
-settings.toml
+#assets/
+#content/
+#layouts/
+#settings.toml
diff --git a/assets/css/custom.css b/assets/css/custom.css
new file mode 100644
index 0000000..3737b10
--- /dev/null
+++ b/assets/css/custom.css
@@ -0,0 +1,33 @@
+body {
+ padding: 2rem;
+ max-width: 70ch;
+ font-family: 'Source Code Pro', monospace;
+ font-size: 18px;
+ line-height: 1.3;
+}
+
+ul#posts li {
+ list-style: none;
+ padding: 0;
+ margin: .5rem 0;
+}
+
+ul#posts {
+ padding: 0;
+}
+
+span.meta {
+ font-size: 80%;
+}
+
+header {
+ margin: 2rem 0;
+}
+
+footer {
+ margin-top: 2rem;
+}
+
+p {
+ text-align: justify;
+}
diff --git a/assets/css/html5_polyglot/README.txt b/assets/css/html5_polyglot/README.txt
new file mode 100644
index 0000000..bd0e5f3
--- /dev/null
+++ b/assets/css/html5_polyglot/README.txt
@@ -0,0 +1,2 @@
+Source URL:
+https://docutils.sourceforge.io/docutils/writers/html5_polyglot/
diff --git a/assets/css/html5_polyglot/math.css b/assets/css/html5_polyglot/math.css
new file mode 100644
index 0000000..1891a79
--- /dev/null
+++ b/assets/css/html5_polyglot/math.css
@@ -0,0 +1,332 @@
+/*
+* math2html: convert LaTeX equations to HTML output.
+*
+* Copyright (C) 2009,2010 Alex Fernández
+* 2021 Günter Milde
+*
+* Released under the terms of the `2-Clause BSD license'_, in short:
+* Copying and distribution of this file, with or without modification,
+* are permitted in any medium without royalty provided the copyright
+* notice and this notice are preserved.
+* This file is offered as-is, without any warranty.
+*
+* .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause
+*
+* Based on eLyXer: convert LyX source files to HTML output.
+* http://elyxer.nongnu.org/
+*
+*
+* CSS file for LaTeX formulas.
+*
+* References: http://www.zipcon.net/~swhite/docs/math/math.html
+* http://www.cs.tut.fi/~jkorpela/math/
+*/
+
+/* Formulas */
+.formula {
+ text-align: center;
+ margin: 1.2em 0;
+ line-height: 1.4;
+}
+span.formula {
+ white-space: nowrap;
+}
+div.formula {
+ padding: 0.5ex;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+/* Basic features */
+a.eqnumber {
+ display: inline-block;
+ float: right;
+ clear: right;
+ font-weight: bold;
+}
+span.unknown {
+ color: #800000;
+}
+span.ignored, span.arraydef {
+ display: none;
+}
+.phantom {
+ visibility: hidden;
+}
+.formula i {
+ letter-spacing: 0.1ex;
+}
+
+/* Alignment */
+.align-left, .align-l {
+ text-align: left;
+}
+.align-right, .align-r {
+ text-align: right;
+}
+.align-center, .align-c {
+ text-align: center;
+}
+
+/* Structures */
+span.hspace {
+ display: inline-block;
+}
+span.overline, span.bar {
+ text-decoration: overline;
+}
+.fraction, .fullfraction, .textfraction {
+ display: inline-block;
+ vertical-align: middle;
+ text-align: center;
+}
+span.formula .fraction,
+.textfraction,
+span.smallmatrix {
+ font-size: 80%;
+ line-height: 1;
+}
+span.numerator {
+ display: block;
+ line-height: 1;
+}
+span.denominator {
+ display: block;
+ line-height: 1;
+ padding: 0ex;
+ border-top: thin solid;
+}
+.formula sub, .formula sup {
+ font-size: 80%;
+}
+sup.numerator, sup.unit {
+ vertical-align: 80%;
+}
+sub.denominator, sub.unit {
+ vertical-align: -20%;
+}
+span.smallsymbol {
+ font-size: 75%;
+ line-height: 75%;
+}
+span.boldsymbol {
+ font-weight: bold;
+}
+span.sqrt {
+ display: inline-block;
+ vertical-align: middle;
+ padding: 0.1ex;
+}
+sup.root {
+ position: relative;
+ left: 1.4ex;
+}
+span.radical {
+ display: inline-block;
+ padding: 0ex;
+ /* font-size: 160%; for DejaVu, not required with STIX */
+ line-height: 100%;
+ vertical-align: top;
+ vertical-align: middle;
+}
+
+span.root {
+ display: inline-block;
+ border-top: thin solid;
+ padding: 0ex;
+ vertical-align: middle;
+}
+div.formula .bigoperator,
+.displaystyle .bigoperator,
+.displaystyle .bigoperator {
+ line-height: 120%;
+ font-size: 140%;
+ padding-right: 0.2ex;
+}
+span.fraction .bigoperator,
+span.scriptstyle .bigoperator {
+ line-height: inherit;
+ font-size: inherit;
+ padding-right: 0;
+}
+span.bigdelimiter {
+ display: inline-block;
+}
+span.bigdelimiter.size1 {
+ transform: scale(1, 1.2);
+ line-height: 1.2;
+}
+span.bigdelimiter.size2 {
+ transform: scale(1, 1.62);
+ line-height: 1.62%;
+
+}
+span.bigdelimiter.size3 {
+ transform: scale(1, 2.05);
+ line-height: 2.05%;
+}
+span.bigdelimiter.size4 {
+ transform: scale(1, 2.47);
+ line-height: 2.47%;
+}
+/* vertically stacked sub and superscript */
+span.scripts {
+ display: inline-table;
+ vertical-align: middle;
+ padding-right: 0.2ex;
+}
+.script {
+ display: table-row;
+ text-align: left;
+ line-height: 150%;
+}
+span.limits {
+ display: inline-table;
+ vertical-align: middle;
+}
+.limit {
+ display: table-row;
+ line-height: 99%;
+}
+sup.limit, sub.limit {
+ line-height: 100%;
+}
+span.embellished,
+span.embellished > .base {
+ display: inline-block;
+}
+span.embellished > sup,
+span.embellished > sub {
+ display: inline-block;
+ font-size: 100%;
+ position: relative;
+ bottom: 0.3em;
+ width: 0px;
+}
+span.embellished > sub {
+ top: 0.4em;
+}
+
+/* Environments */
+span.array, span.bracketcases, span.binomial, span.environment {
+ display: inline-table;
+ text-align: center;
+ vertical-align: middle;
+}
+span.arrayrow, span.binomrow {
+ display: table-row;
+ padding: 0;
+ border: 0;
+}
+span.arraycell, span.bracket, span.case, span.binomcell, span.environmentcell {
+ display: table-cell;
+ padding: 0ex 0.2ex;
+ line-height: 1; /* 99%; */
+ border: 0ex;
+}
+.environment.align > .arrayrow > .arraycell.align-l {
+ padding-right: 2em;
+}
+
+/* Inline binomials */
+span.binom {
+ display: inline-block;
+ vertical-align: middle;
+ text-align: center;
+ font-size: 80%;
+}
+span.binomstack {
+ display: block;
+ padding: 0em;
+}
+
+/* Over- and underbraces */
+span.overbrace {
+ border-top: 2pt solid;
+}
+span.underbrace {
+ border-bottom: 2pt solid;
+}
+
+/* Stackrel */
+span.stackrel {
+ display: inline-block;
+ text-align: center;
+}
+span.upstackrel {
+ display: block;
+ padding: 0em;
+ font-size: 80%;
+ line-height: 64%;
+ position: relative;
+ top: 0.15em;
+
+}
+span.downstackrel {
+ display: block;
+ vertical-align: bottom;
+ padding: 0em;
+}
+
+/* Fonts */
+.formula {
+ font-family: STIX, "DejaVu Serif", "DejaVu Math TeX Gyre", serif;
+}
+span.radical, /* ensure correct size of square-root sign */
+span.integral { /* upright integral signs for better alignment of indices */
+ font-family: "STIXIntegralsUp", STIX;
+ /* font-size: 115%; match apparent size with DejaVu */
+}
+span.bracket {
+ /* some "STIX" and "DejaVu Math TeX Gyre" bracket pieces don't fit */
+ font-family: "DejaVu Serif", serif;
+}
+span.mathsf, span.textsf {
+ font-family: sans-serif;
+}
+span.mathrm, span.textrm {
+ font-family: STIX, "DejaVu Serif", "DejaVu Math TeX Gyre", serif;
+}
+span.mathtt, span.texttt {
+ font-family: monospace;
+}
+span.text, span.textnormal,
+span.mathsf, span.mathtt, span.mathrm {
+ font-style: normal;
+}
+span.fraktur {
+ font-family: "Lucida Blackletter", eufm10, blackletter;
+}
+span.blackboard {
+ font-family: Blackboard, msbm10, serif;
+}
+span.scriptfont {
+ font-family: "Monotype Corsiva", "Apple Chancery", "URW Chancery L", cursive;
+ font-style: italic;
+}
+span.mathscr {
+ font-family: MathJax_Script, rsfs10, cursive;
+ font-style: italic;
+}
+span.textsc {
+ font-variant: small-caps;
+}
+span.textsl {
+ font-style: oblique;
+}
+
+/* Colors */
+span.colorbox {
+ display: inline-block;
+ padding: 5px;
+}
+span.fbox {
+ display: inline-block;
+ border: thin solid black;
+ padding: 2px;
+}
+span.boxed, span.framebox {
+ display: inline-block;
+ border: thin solid black;
+ padding: 5px;
+}
diff --git a/assets/css/html5_polyglot/minimal.css b/assets/css/html5_polyglot/minimal.css
new file mode 100644
index 0000000..5f11426
--- /dev/null
+++ b/assets/css/html5_polyglot/minimal.css
@@ -0,0 +1,276 @@
+/* Minimal style sheet for the HTML output of Docutils. */
+/* */
+/* :Author: Günter Milde, based on html4css1.css by David Goodger */
+/* :Id: $Id: minimal.css 9079 2022-06-19 14:00:56Z milde $ */
+/* :Copyright: © 2015, 2021 Günter Milde. */
+/* :License: Released under the terms of the `2-Clause BSD license`_, */
+/* in short: */
+/* */
+/* Copying and distribution of this file, with or without modification, */
+/* are permitted in any medium without royalty provided the copyright */
+/* notice and this notice are preserved. */
+/* */
+/* This file is offered as-is, without any warranty. */
+/* */
+/* .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause */
+
+/* This CSS3 stylesheet defines rules for Docutils elements without */
+/* HTML equivalent. It is required to make the document semantics visible. */
+/* */
+/* .. _validates: http://jigsaw.w3.org/css-validator/validator$link */
+
+/* titles */
+p.topic-title,
+p.admonition-title,
+p.system-message-title {
+ font-weight: bold;
+}
+p.sidebar-title,
+p.rubric {
+ font-weight: bold;
+ font-size: larger;
+}
+p.rubric {
+ color: maroon;
+}
+p.subtitle,
+p.section-subtitle,
+p.sidebar-subtitle {
+ font-weight: bold;
+ margin-top: -0.5em;
+}
+h1 + p.subtitle {
+ font-size: 1.6em;
+}
+a.toc-backref {
+ color: inherit;
+ text-decoration: none;
+}
+
+/* Warnings, Errors */
+.system-messages h2,
+.system-message-title,
+span.problematic {
+ color: red;
+}
+
+/* Inline Literals */
+.docutils.literal {
+ font-family: monospace;
+ white-space: pre-wrap;
+}
+/* do not wrap at hyphens and similar: */
+.literal > span.pre { white-space: nowrap; }
+
+/* Lists */
+
+/* compact and simple lists: no margin between items */
+.simple li, .simple ul, .simple ol,
+.compact li, .compact ul, .compact ol,
+.simple > li p, dl.simple > dd,
+.compact > li p, dl.compact > dd {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+/* Nested Paragraphs */
+p:first-child { margin-top: 0; }
+p:last-child { margin-bottom: 0; }
+details > p:last-child { margin-bottom: 1em; }
+
+/* Table of Contents */
+.contents ul.auto-toc { /* section numbers present */
+ list-style-type: none;
+}
+
+/* Enumerated Lists */
+ol.arabic { list-style: decimal }
+ol.loweralpha { list-style: lower-alpha }
+ol.upperalpha { list-style: upper-alpha }
+ol.lowerroman { list-style: lower-roman }
+ol.upperroman { list-style: upper-roman }
+
+/* Definition Lists and Derivatives */
+dt .classifier { font-style: italic }
+dt .classifier:before {
+ font-style: normal;
+ margin: 0.5em;
+ content: ":";
+}
+/* Field Lists and similar */
+/* bold field name, content starts on the same line */
+dl.field-list,
+dl.option-list,
+dl.docinfo {
+ display: flow-root;
+}
+dl.field-list > dt,
+dl.option-list > dt,
+dl.docinfo > dt {
+ font-weight: bold;
+ clear: left;
+ float: left;
+ margin: 0;
+ padding: 0;
+ padding-right: 0.2em;
+}
+/* Offset for field content (corresponds to the --field-name-limit option) */
+dl.field-list > dd,
+dl.option-list > dd,
+dl.docinfo > dd {
+ margin-left: 9em; /* ca. 14 chars in the test examples, fit all Docinfo fields */
+}
+/* start nested lists on new line */
+dd > dl:first-child,
+dd > ul:first-child,
+dd > ol:first-child {
+ clear: left;
+}
+/* start field-body on a new line after long field names */
+dl.field-list > dd > *:first-child,
+dl.option-list > dd > *:first-child
+{
+ display: inline-block;
+ width: 100%;
+ margin: 0;
+}
+
+/* Bibliographic Fields (docinfo) */
+dl.docinfo pre.address {
+ font: inherit;
+ margin: 0.5em 0;
+}
+dl.docinfo > dd.authors > p { margin: 0; }
+
+/* Option Lists */
+dl.option-list > dt { font-weight: normal; }
+span.option { white-space: nowrap; }
+
+/* Footnotes and Citations */
+
+.footnote, .citation { margin: 1em 0; } /* default paragraph skip (Firefox) */
+/* hanging indent */
+.citation { padding-left: 2em; }
+.footnote { padding-left: 1.7em; }
+.footnote.superscript { padding-left: 1.0em; }
+.citation > .label { margin-left: -2em; }
+.footnote > .label { margin-left: -1.7em; }
+.footnote.superscript > .label { margin-left: -1.0em; }
+
+.footnote > .label + *,
+.citation > .label + * {
+ display: inline-block;
+ margin-top: 0;
+ vertical-align: top;
+}
+.footnote > .backrefs + *,
+.citation > .backrefs + * {
+ margin-top: 0;
+}
+.footnote > .label + p, .footnote > .backrefs + p,
+.citation > .label + p, .citation > .backrefs + p {
+ display: inline;
+ vertical-align: inherit;
+}
+
+.backrefs { user-select: none; }
+.backrefs > a { font-style: italic; }
+
+/* superscript footnotes */
+a[role="doc-noteref"].superscript,
+.footnote.superscript > .label,
+.footnote.superscript > .backrefs {
+ vertical-align: super;
+ font-size: smaller;
+ line-height: 1;
+}
+a[role="doc-noteref"].superscript > .fn-bracket,
+.footnote.superscript > .label > .fn-bracket {
+ /* hide brackets in display but leave for copy/paste */
+ display: inline-block;
+ width: 0;
+ overflow: hidden;
+}
+[role="doc-noteref"].superscript + [role="doc-noteref"].superscript {
+ padding-left: 0.15em; /* separate consecutive footnote references */
+ /* TODO: unfortunately, "+" also selects with text between the references. */
+}
+
+/* Alignment */
+.align-left {
+ text-align: left;
+ margin-right: auto;
+}
+.align-center {
+ text-align: center;
+ margin-left: auto;
+ margin-right: auto;
+}
+.align-right {
+ text-align: right;
+ margin-left: auto;
+}
+.align-top { vertical-align: top; }
+.align-middle { vertical-align: middle; }
+.align-bottom { vertical-align: bottom; }
+
+/* reset inner alignment in figures and tables */
+figure.align-left, figure.align-right,
+table.align-left, table.align-center, table.align-right {
+ text-align: inherit;
+}
+
+/* Text Blocks */
+.topic { margin: 1em 2em; }
+.sidebar,
+.admonition,
+.system-message {
+ margin: 1em 2em;
+ border: thin solid;
+ padding: 0.5em 1em;
+}
+div.line-block { display: block; }
+div.line-block div.line-block, pre { margin-left: 2em; }
+
+/* Code line numbers: dropped when copying text from the page */
+pre.code .ln { display: none; }
+pre.code code:before {
+ content: attr(data-lineno); /* …, none) fallback not supported by any browser */
+ color: gray;
+}
+
+/* Tables */
+table {
+ border-collapse: collapse;
+}
+td, th {
+ border: thin solid silver;
+ padding: 0 1ex;
+}
+.borderless td, .borderless th {
+ border: 0;
+ padding: 0;
+ padding-right: 0.5em /* separate table cells */
+}
+
+table > caption {
+ text-align: left;
+ margin-top: 0.2em;
+ margin-bottom: 0.2em;
+}
+table.captionbelow {
+ caption-side: bottom;
+}
+
+/* Document Header and Footer */
+header { border-bottom: 1px solid black; }
+footer { border-top: 1px solid black; }
+
+/* Images are block-level by default in Docutils */
+/* New HTML5 block elements: set display for older browsers */
+img, header, footer, main, aside, nav, section, figure, video, details {
+ display: block;
+}
+/* inline images */
+p img, p video, figure img, figure video {
+ display: inline;
+}
diff --git a/assets/css/html5_polyglot/plain.css b/assets/css/html5_polyglot/plain.css
new file mode 100644
index 0000000..70f1641
--- /dev/null
+++ b/assets/css/html5_polyglot/plain.css
@@ -0,0 +1,312 @@
+/* CSS31_ style sheet for the output of Docutils HTML writers. */
+/* Rules for easy reading and pre-defined style variants. */
+/* */
+/* :Author: Günter Milde, based on html4css1.css by David Goodger */
+/* :Id: $Id: plain.css 9081 2022-06-19 20:23:12Z milde $ */
+/* :Copyright: © 2015 Günter Milde. */
+/* :License: Released under the terms of the `2-Clause BSD license`_, */
+/* in short: */
+/* */
+/* Copying and distribution of this file, with or without modification, */
+/* are permitted in any medium without royalty provided the copyright */
+/* notice and this notice are preserved. */
+/* */
+/* This file is offered as-is, without any warranty. */
+/* */
+/* .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause */
+/* .. _CSS3: https://www.w3.org/Style/CSS/ */
+
+
+/* Document Structure */
+/* ****************** */
+
+/* "page layout" */
+body {
+ margin: 0;
+ background-color: #dbdbdb;
+ --field-indent: 9em; /* default indent of fields in field lists */
+}
+main, footer, header {
+ line-height:1.6;
+ /* avoid long lines --> better reading */
+ /* optimum is 45…75 characters/line */
+ /* OTOH: lines should not be too short because of missing hyphenation, */
+ max-width: 50rem;
+ padding: 1px 2%; /* 1px on top avoids grey bar above title (mozilla) */
+ margin: auto;
+}
+main {
+ counter-reset: table figure;
+ background-color: white;
+}
+footer, header {
+ font-size: smaller;
+ padding: 0.5em 2%;
+ border: none;
+}
+
+/* Table of Contents */
+ul.auto-toc > li > p {
+ padding-left: 1em;
+ text-indent: -1em;
+}
+nav.contents ul {
+ padding-left: 1em;
+}
+main > nav.contents ul ul ul ul:not(.auto-toc) {
+ list-style-type: '\2B29\ ';
+}
+main > nav.contents ul ul ul ul ul:not(.auto-toc) {
+ list-style-type: '\2B1D\ ';
+}
+
+/* Transitions */
+hr.docutils {
+ width: 80%;
+ margin-top: 1em;
+ margin-bottom: 1em;
+ clear: both;
+}
+
+/* Paragraphs */
+
+/* vertical space (parskip) */
+p, ol, ul, dl, li,
+div.line-block,
+.footnote, .citation,
+div > math,
+table {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+
+h1, h2, h3, h4, h5, h6,
+dd, details > p:last-child {
+ margin-bottom: 0.5em;
+}
+
+/* Lists */
+/* ===== */
+
+/* Definition Lists */
+/* Indent lists nested in definition lists */
+dd > ul:only-child, dd > ol:only-child { padding-left: 1em; }
+
+/* Description Lists */
+/* styled like in most dictionaries, encyclopedias etc. */
+dl.description {
+ display: flow-root;
+}
+dl.description > dt {
+ font-weight: bold;
+ clear: left;
+ float: left;
+ margin: 0;
+ padding: 0;
+ padding-right: 0.3em;
+}
+dl.description > dd:after {
+ display: table;
+ content: "";
+ clear: left; /* clearfix for empty descriptions */
+}
+
+/* Field Lists */
+
+dl.field-list > dd,
+dl.docinfo > dd {
+ margin-left: var(--field-indent); /* adapted in media queries or HTML */
+}
+
+/* example for custom field-name width */
+dl.field-list.narrow > dd {
+ --field-indent: 5em;
+}
+/* run-in: start field-body on same line after long field names */
+dl.field-list.run-in > dd p {
+ display: block;
+}
+
+/* Bibliographic Fields */
+
+/* generally, bibliographic fields use dl.docinfo */
+/* but dedication and abstract are placed into divs */
+div.abstract p.topic-title {
+ text-align: center;
+}
+div.dedication {
+ margin: 2em 5em;
+ text-align: center;
+ font-style: italic;
+}
+div.dedication p.topic-title {
+ font-style: normal;
+}
+
+/* disclosures */
+details { padding-left: 1em; }
+summary { margin-left: -1em; }
+
+/* Text Blocks */
+/* =========== */
+
+/* Literal Blocks */
+pre.literal-block, pre.doctest-block,
+pre.math, pre.code {
+ font-family: monospace;
+}
+
+/* Block Quotes and Topics */
+bockquote { margin: 1em 2em; }
+blockquote p.attribution,
+.topic p.attribution {
+ text-align: right;
+ margin-left: 20%;
+}
+
+/* Tables */
+/* ====== */
+
+/* th { vertical-align: bottom; } */
+
+table tr { text-align: left; }
+
+/* "booktabs" style (no vertical lines) */
+table.booktabs {
+ border: 0;
+ border-top: 2px solid;
+ border-bottom: 2px solid;
+ border-collapse: collapse;
+}
+table.booktabs * {
+ border: 0;
+}
+table.booktabs th {
+ border-bottom: thin solid;
+}
+
+/* numbered tables (counter defined in div.document) */
+table.numbered > caption:before {
+ counter-increment: table;
+ content: "Table " counter(table) ": ";
+ font-weight: bold;
+}
+
+/* Explicit Markup Blocks */
+/* ====================== */
+
+/* Footnotes and Citations */
+/* ----------------------- */
+
+/* line on the left */
+.footnote-list {
+ border-left: solid thin;
+ padding-left: 0.25em;
+}
+
+/* Directives */
+/* ---------- */
+
+/* Body Elements */
+/* ~~~~~~~~~~~~~ */
+
+/* Images and Figures */
+
+/* let content flow to the side of aligned images and figures */
+figure.align-left,
+img.align-left,
+video.align-left,
+object.align-left {
+ clear: left;
+ float: left;
+ margin-right: 1em;
+}
+figure.align-right,
+img.align-right,
+video.align-right,
+object.align-right {
+ clear: right;
+ float: right;
+ margin-left: 1em;
+}
+/* Stop floating sidebars, images and figures */
+h1, h2, h3, h4, footer, header { clear: both; }
+
+/* Numbered figures */
+figure.numbered > figcaption > p:before {
+ counter-increment: figure;
+ content: "Figure " counter(figure) ": ";
+ font-weight: bold;
+}
+
+/* Admonitions and System Messages */
+.caution p.admonition-title,
+.attention p.admonition-title,
+.danger p.admonition-title,
+.error p.admonition-title,
+.warning p.admonition-title,
+div.error {
+ color: red;
+}
+
+/* Sidebar */
+/* Move right. In a layout with fixed margins, */
+/* it can be moved into the margin. */
+aside.sidebar {
+ width: 30%;
+ max-width: 26em;
+ float: right;
+ clear: right;
+ margin-left: 1em;
+ margin-right: -1%;
+ background-color: #fffffa;
+}
+
+
+/* Code */
+pre.code { padding: 0.7ex }
+pre.code, code { background-color: #eeeeee }
+/* basic highlighting: for a complete scheme, see */
+/* https://docutils.sourceforge.io/sandbox/stylesheets/ */
+pre.code .comment, code .comment { color: #5C6576 }
+pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
+pre.code .literal.string, code .literal.string { color: #0C5404 }
+pre.code .name.builtin, code .name.builtin { color: #352B84 }
+pre.code .deleted, code .deleted { background-color: #DEB0A1}
+pre.code .inserted, code .inserted { background-color: #A3D289}
+
+/* Math */
+/* for math-output=MathML (for math-output=HTML, see math.css) */
+math .boldsymbol {
+ font-weight: bold;
+}
+mstyle.mathscr, mi.mathscr {
+ font-family: STIX;
+}
+
+/* Epigraph */
+/* Highlights */
+/* Pull-Quote */
+/* Compound Paragraph */
+/* Container */
+
+/* Inline Markup */
+/* ============= */
+
+sup, sub { line-height: 0.8; } /* do not add leading for lines with sup/sub */
+
+/* Inline Literals */
+/* possible values: normal, nowrap, pre, pre-wrap, pre-line */
+/* span.docutils.literal { white-space: pre-wrap; } */
+
+/* Hyperlink References */
+a { text-decoration: none; }
+
+/* External Targets */
+/* span.target.external */
+/* Internal Targets */
+/* span.target.internal */
+/* Footnote References */
+/* a[role="doc-noteref"] */
+/* Citation References */
+/* a.citation-reference */
diff --git a/assets/css/html5_polyglot/responsive.css b/assets/css/html5_polyglot/responsive.css
new file mode 100644
index 0000000..86062d4
--- /dev/null
+++ b/assets/css/html5_polyglot/responsive.css
@@ -0,0 +1,495 @@
+/* CSS3_ style sheet for the output of Docutils HTML5 writer. */
+/* Generic responsive design for all screen sizes. */
+/* */
+/* :Author: Günter Milde */
+/* */
+/* :Id: $Id: responsive.css 9079 2022-06-19 14:00:56Z milde $ */
+/* :Copyright: © 2021 Günter Milde. */
+/* :License: Released under the terms of the `2-Clause BSD license`_, */
+/* in short: */
+/* */
+/* Copying and distribution of this file, with or without modification, */
+/* are permitted in any medium without royalty provided the copyright */
+/* notice and this notice are preserved. */
+/* */
+/* This file is offered as-is, without any warranty. */
+/* */
+/* .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause */
+/* .. _CSS3: https://www.w3.org/Style/CSS/ */
+
+/* Note: */
+/* This style sheet is provisional: */
+/* the API is not settled and may change with any minor Docutils version. */
+
+
+
+/* General Settings */
+/* ================ */
+
+
+* { box-sizing: border-box; }
+
+body {
+ background-color: #fafaf6;
+ margin: auto;
+ --field-indent: 6.6em; /* indent of fields in field lists */
+ --sidebar-margin-right: 0; /* adapted in media queries below */
+}
+main {
+ counter-reset: figure table;
+}
+body > * {
+ background-color: white;
+ line-height: 1.6;
+ padding: 0.5rem calc(29% - 7.2rem); /* go from 5% to 15% (8.15em/54em) */
+ margin: auto;
+ max-width: 100rem;
+}
+sup, sub { /* avoid additional inter-line space for lines with sup/sub */
+ line-height: 1;
+}
+
+/* Vertical Space (Parskip) */
+p, ol, ul, dl, li,
+div.line-block,
+.topic,
+.footnote, .citation,
+div > math,
+table {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+h1, h2, h3, h4, h5, h6,
+dl > dd, details > p:last-child {
+ margin-bottom: 0.5em;
+}
+
+/* Indented Blocks */
+blockquote, figure, .topic {
+ margin: 1em 2%;
+ padding-left: 1em;
+}
+div.line-block div.line-block,
+pre, dd, dl.option-list {
+ margin-left: calc(2% + 1em);
+}
+
+/* Object styling */
+/* ============== */
+
+footer, header {
+ font-size: small;
+}
+
+/* Frontmatter */
+div.dedication {
+ padding: 0;
+ margin: 1.4em 0;
+ font-style: italic;
+ font-size: large;
+}
+.dedication p.topic-title {
+ display: none;
+}
+
+blockquote p.attribution,
+.topic p.attribution {
+ text-align: right;
+}
+
+/* Table of Contents */
+nav.contents ul {
+ padding-left: 1em;
+}
+ul.auto-toc > li > p { /* hanging indent */
+ padding-left: 1em;
+ text-indent: -1em;
+}
+main > nav.contents ul:not(.auto-toc) {
+ list-style-type: square;
+}
+main > nav.contents ul ul:not(.auto-toc) {
+ list-style-type: disc;
+}
+main > nav.contents ul ul ul:not(.auto-toc) {
+ list-style-type: '\2B29\ ';
+}
+main > nav.contents ul ul ul ul:not(.auto-toc) {
+ list-style-type: '\2B1D\ ';
+}
+main > nav.contents ul ul ul ul ul:not(.auto-toc) {
+ list-style-type: '\2B2A\ ';
+}
+nav.contents ul > li::marker {
+ color: grey;
+}
+
+/* Transitions */
+hr {
+ margin: 1em 10%;
+}
+
+/* Lists */
+
+ul, ol {
+ padding-left: 1.1em; /* indent by bullet width (Firefox, DejaVu fonts) */
+}
+dl.field-list > dd,
+dl.docinfo > dd {
+ margin-left: var(--field-indent); /* adapted in media queries or HTML */
+}
+dl.option-list > dd {
+ margin-left: 20%;
+}
+/* run-in: start field-body on same line after long field names */
+dl.field-list.run-in > dd p {
+ display: block;
+}
+/* "description style" like in most dictionaries, encyclopedias etc. */
+dl.description {
+ display: flow-root;
+}
+dl.description > dt {
+ clear: left;
+ float: left;
+ margin: 0;
+ padding: 0;
+ padding-right: 0.3em;
+ font-weight: bold;
+}
+dl.description > dd:after {
+ display: table;
+ content: "";
+ clear: left; /* clearfix for empty descriptions */
+}
+/* start lists nested in description/field lists on new line */
+dd > dl:first-child,
+dd > ul:first-child,
+dd > ol:first-child {
+ clear: left;
+}
+
+/* disclosures */
+details { padding-left: 1em; }
+summary { margin-left: -1em; }
+
+/* Footnotes and Citations */
+.footnote {
+ font-size: small;
+}
+
+/* Images, Figures, and Tables */
+img {
+ display: block;
+}
+p > img, p > a > img,
+figure > img, figure > a > img {
+ display: inline;
+}
+
+figcaption,
+table > caption {
+ /* font-size: small; */
+ font-style: italic;
+}
+figcaption > .legend {
+ font-size: small;
+ font-style: initial;
+}
+figure.numbered > figcaption > p:before {
+ counter-increment: figure;
+ content: "Figure " counter(figure) ": ";
+ font-weight: bold;
+ font-style: initial;
+}
+
+table tr {
+ text-align: left;
+ vertical-align: baseline;
+}
+table.booktabs { /* "booktabs" style (no vertical lines) */
+ border-top: 2px solid;
+ border-bottom: 2px solid;
+}
+table.booktabs * {
+ border: 0;
+}
+table.booktabs th {
+ border-bottom: thin solid;
+}
+table.numbered > caption:before {
+ counter-increment: table;
+ content: "Table " counter(table) ": ";
+ font-weight: bold;
+ font-style: initial;
+}
+
+/* Admonitions and System Messages */
+.admonition,
+div.system-message {
+ border: thin solid silver;
+ margin: 1em 2%;
+ padding: 0.5em 1em;
+}
+.caution p.admonition-title,
+.attention p.admonition-title,
+.danger p.admonition-title,
+.warning p.admonition-title,
+div.error {
+ color: maroon;
+}
+div.system-message > p > span.literal {
+ overflow-wrap: break-word;
+}
+
+/* Literal and Code */
+pre.literal-block, pre.doctest{
+ padding: 0.2em;
+ overflow-x: auto;
+}
+.literal-block, .doctest, span.literal {
+ background-color: #f6f9f8;
+}
+.system-message span.literal {
+ background-color: inherit;
+}
+
+/* basic highlighting: for a complete scheme, see */
+/* https://docutils.sourceforge.io/sandbox/stylesheets/ */
+pre.code .comment, code .comment { color: #5C6576 }
+pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
+pre.code .literal.string, code .literal.string { color: #0C5404 }
+pre.code .name.builtin, code .name.builtin { color: #352B84 }
+pre.code .deleted, code .deleted { background-color: #DEB0A1}
+pre.code .inserted, code .inserted { background-color: #A3D289}
+
+/* Hyperlink References */
+a {
+ text-decoration: none; /* for chromium */
+ /* Wrap links at any place, if this is the only way to prevent overflow */
+ overflow-wrap: break-word;
+}
+.contents a, a.toc-backref, a.citation-reference {
+ overflow-wrap: inherit;
+}
+/* Undecorated Links (see also minimal.css) */
+/* a.citation-reference, */
+.citation a.fn-backref {
+ color: inherit;
+}
+a:hover {
+ text-decoration: underline;
+}
+*:hover > a.toc-backref:after {
+ content: " \2191"; /* ↑ UPWARDS ARROW */
+ color: grey;
+}
+*:hover > a.self-link:after {
+ content: "\1F517"; /* LINK SYMBOL */
+ color: grey;
+ font-size: smaller;
+ margin-left: 0.2em;
+}
+/* highlight the target of the current URL */
+section:target > h2, section:target > h3, section:target > h4,
+section:target > h5, section:target > h6,
+.contents :target,
+.contents:target > .topic-title,
+[role="doc-biblioentry"]:target > .label,
+[role="doc-biblioref"]:target,
+[role="note"]:target, /* Docutils 0.18 ... 0.19 */
+[role="doc-footnote"]:target, /* Docutils >= 0.20 */
+[role="doc-noteref"]:target {
+ background-color: #d2e6ec;
+}
+
+/* Block Alignment */
+/* Let content flow to the side of aligned images and figures */
+
+/* no floats around this elements */
+footer, header, hr,
+h1, h2, h3 {
+ clear: both;
+}
+
+img.align-left,
+video.align-left,
+figure.align-left,
+table.align-left {
+ margin-left: 0;
+ padding-left: 0;
+ margin-right: 0.5em;
+ clear: left;
+ float: left;
+}
+img.align-right,
+video.align-right,
+figure.align-right,
+table.align-right {
+ margin-left: 0.5em;
+ margin-right: 0;
+ clear: right;
+ float: right;
+}
+
+/* Margin Elements */
+/* see below for screen size dependent rules */
+.sidebar,
+.marginal,
+.admonition.marginal {
+ max-width: 40%;
+ border: none;
+ background-color: #efefea;
+ margin: 0.5em var(--sidebar-margin-right) 0.5em 1em;
+ padding: 0.5em;
+ padding-left: 0.7em;
+ clear: right;
+ float: right;
+ font-size: small;
+}
+.sidebar {
+ width: 40%;
+}
+
+/* Math */
+/* for math-output=MathML (for math-output=HTML, see math.css) */
+math .boldsymbol {
+ font-weight: bold;
+}
+mstyle.mathscr, mi.mathscr {
+ font-family: STIX;
+}
+
+/* Adaptive page layout */
+/* ==================== */
+
+@media (max-width: 30em) {
+ /* Smaller margins and no floating elements for small screens */
+ /* (main text less than 40 characters/line) */
+ body > * {
+ padding: 0.5rem 5%;
+ line-height: 1.4
+ }
+ .sidebar,
+ .marginal,
+ .admonition.marginal {
+ width: auto;
+ max-width: 100%;
+ float: none;
+ }
+ dl.option-list,
+ pre {
+ margin-left: 0;
+ }
+ body {
+ --field-indent: 4em;
+ }
+ dl.field-list.narrow, dl.docinfo, dl.option-list {
+ --field-indent: 2.4em;
+ }
+ pre, pre * {
+ font-size: 0.9em;
+ /* overflow: auto; */
+ }
+}
+
+@media (min-width: 54em) {
+ /* Move ToC to the left */
+ /* Main text width before: 70% ≙ 35em ≙ 75…95 chrs (Dejavu/Times) */
+ /* after: ≳ 30em ≙ 54…70 chrs (Dejavu/Times) */
+ body.with-toc {
+ padding-left: 8%;
+ }
+ body.with-toc > * {
+ margin-left: 0;
+ padding-left: 22rem; /* fallback for webkit */
+ padding-left: min(22%, 22rem);
+ padding-right: 7%;
+ }
+ main > nav.contents { /* global ToC */
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: min(25%, 25em);
+ height: 100vh;
+ margin: 0;
+ background-color: #fafaf6;
+ padding: 1em 2% 0 2%;
+ overflow: auto;
+ }
+ main > nav.contents > * {
+ padding-left: 0;
+ line-height: 1.4;
+ }
+ main > nav.contents a {
+ color: inherit;
+ }
+}
+
+@media (min-width: 70em) {
+ body {
+ --field-indent: 9em;
+ }
+}
+
+@media (min-width: 77em) {
+ /* Move marginalia to 6rem from right border */
+ /* .sidebar, */
+ /* .marginal, */
+ /* .admonition.marginal { */
+ /* margin-right: calc(6rem - 15%); */
+ /* } */
+ /* BUG: margin is calculated for break point width */
+ /* workaround: variable + many breakpoints */
+ body > * {
+ padding-left: 18%;
+ padding-right: 28%; /* fallback for webkit */
+ padding-right: min(28%, 28rem);
+ --sidebar-margin-right: -20rem;
+ }
+ /* limit main text to ~ 50em ≙ 85…100 characters DejaVu rsp. …120 Times */
+ body.with-toc > * {
+ padding-left: min(22%, 22rem);
+ padding-right: calc(78% - 50rem); /* fallback for webkit */
+ padding-right: min(78% - 50rem, 28rem);
+ --sidebar-margin-right: 0;
+ }
+}
+
+@media (min-width: 85em) {
+ body.with-toc > * {
+ --sidebar-margin-right: -9rem;
+ }
+}
+
+@media (min-width: 90em) {
+ /* move marginalia into the margin */
+ body > * {
+ padding-left: min(22%, 22rem);
+ --sidebar-margin-right: -23rem;
+ }
+ body.with-toc > * {
+ --sidebar-margin-right: -14rem;
+ }
+}
+
+@media (min-width: 99em) {
+ /* move marginalia out of main text area */
+ body.with-toc > * {
+ --sidebar-margin-right: -20rem;
+ }
+ body > *, body.with-toc > * { /* for webkit */
+ padding-left: 22rem;
+ padding-right: 28rem;
+ }
+ .admonition.marginal,
+ .marginal {
+ width: 40%; /* make marginal figures, ... "full width" */
+ }
+}
+
+@media (min-width: 104em) {
+ body.with-toc > * {
+ --sidebar-margin-right: -23rem;
+ }
+}
diff --git a/assets/css/html5_polyglot/tuftig.css b/assets/css/html5_polyglot/tuftig.css
new file mode 100644
index 0000000..ac50be3
--- /dev/null
+++ b/assets/css/html5_polyglot/tuftig.css
@@ -0,0 +1,568 @@
+/* CSS3_ style sheet for the output of Docutils HTML writers. */
+/* Rules inspired by Edward Tufte's layout design. */
+/* */
+/* :Author: Günter Milde */
+/* based on tufte.css_ by Dave Liepmann */
+/* and the tufte-latex_ package. */
+/* */
+/* :Id: $Id: tuftig.css 9081 2022-06-19 20:23:12Z milde $ */
+/* :Copyright: © 2020 Günter Milde. */
+/* :License: Released under the terms of the `2-Clause BSD license`_, */
+/* in short: */
+/* */
+/* Copying and distribution of this file, with or without modification, */
+/* are permitted in any medium without royalty provided the copyright */
+/* notice and this notice are preserved. */
+/* */
+/* This file is offered as-is, without any warranty. */
+/* */
+/* .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause */
+/* .. _CSS3: https://www.w3.org/Style/CSS/ */
+/* .. _tufte.css: https://edwardtufte.github.io/tufte-css/ */
+/* .. _tufte-latex_: https://www.ctan.org/pkg/tufte-latex */
+
+
+/* General Settings */
+/* ================ */
+
+body {
+ font-family: et-book, Palatino, Georgia, serif;
+ background-color: #fafaf6;
+ font-size: 1.2em;
+ line-height: 1.4;
+ margin: auto;
+}
+main {
+ counter-reset: figure table;
+}
+main, header, footer {
+ padding: 0.5em 5%;
+ background-color: #fefef8;
+ max-width: 100rem;
+}
+
+/* Spacing */
+
+/* vertical space (parskip) */
+p, ol, ul, dl, li,
+h1, h2, h3, h4, h5, h6,
+div.line-block,
+.topic,
+.footnote, .citation,
+table {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+dl > dd {
+ margin-bottom: 0.5em;
+}
+/* exceptions */
+p:first-child {
+ margin-top: 0;
+}
+p:last-child {
+ margin-bottom: 0;
+}
+
+/* Indented Blocks */
+blockquote,
+.topic {
+ /* background-color: Honeydew; */
+ margin: 0.5em 2%;
+ padding-left: 1em;
+}
+div.line-block div.line-block,
+dl.option-list,
+figure > img,
+pre.literal-block, pre.math,
+pre.doctest-block, pre.code {
+ /* background-color: LightCyan; */
+ margin-left: calc(2% + 1em);
+}
+
+/* Object styling */
+/* ============== */
+
+footer, header {
+ font-size: smaller;
+}
+
+/* Titles and Headings */
+
+h2, h3, h4, p.subtitle, p.section-subtitle,
+p.topic-title, p.sidebar-title, p.sidebar-subtitle {
+ font-weight: normal;
+ font-style: italic;
+ text-align: left;
+}
+.sectnum {
+ font-style: normal;
+}
+
+h1.title {
+ text-align: left;
+ margin-top: 2.4em;
+ margin-bottom: 2em;
+ font-size: 2.4em;
+}
+h1 + p.subtitle {
+ margin-top: -2em;
+ margin-bottom: 2em;
+ font-size: 2.0em;
+}
+section {
+ margin-top: 2em;
+}
+h2, .contents > p.topic-title {
+ font-size: 2.2em;
+}
+h2 + p.section-subtitle {
+ font-size: 1.6em;
+}
+h3 {
+ font-size: 1.2em;
+}
+h3 + p.section-subtitle {
+ font-size: 1.1em;
+}
+h4 {
+ font-size: 1em;
+}
+p.section-subtitle {
+ font-size: 1em;
+}
+
+/* Dedication and Abstract */
+div.dedication {
+ padding: 0;
+ margin-left: 0;
+ font-style: italic;
+ font-size: 1.2em;
+}
+/* div.abstract p.topic-title, */
+div.dedication p.topic-title {
+ display: none;
+}
+
+/* Attribution */
+blockquote p.attribution,
+.topic p.attribution {
+ text-align: right;
+}
+
+/* Table of Contents */
+nav.contents {
+ padding: 0;
+ font-style: italic;
+}
+ul.auto-toc > li > p {
+ padding-left: 1em;
+ text-indent: -1em;
+}
+nav.contents ul {
+ padding-left: 1em;
+}
+
+
+/* Transitions */
+hr {
+ border: 0;
+ border-top: 1px solid #ccc;
+ margin: 1em 10%;
+}
+
+/* Lists */
+/* Less indent per level */
+ul, ol {
+ padding-left: 1.1em;
+}
+dd {
+ margin-left: 1.5em;
+}
+dd > dl:first-child,
+dd > ul:first-child,
+dd > ol:first-child {
+ /* lists nested in definition/description/field lists */
+ clear: left;
+}
+
+dl.field-list > dd,
+dl.docinfo > dd,
+dl.option-list > dd {
+ margin-left: 4em;
+}
+/* example for custom field-name width */
+dl.field-list.narrow > dd {
+ margin-left: 3em;
+}
+/* run-in: start field-body on same line after long field names */
+dl.field-list.run-in > dd p {
+ display: block;
+}
+/* italic field name */
+dl.description > dt,
+dl.field-list > dt,
+dl.docinfo > dt {
+ font-weight: normal;
+ font-style: italic;
+}
+
+/* "description style" like in most dictionaries, encyclopedias etc. */
+dl.description > dt {
+ clear: left;
+ float: left;
+ margin: 0;
+ padding: 0;
+ padding-right: 0.5em;
+}
+dl.description > dd:after {
+ display: block;
+ content: "";
+ clear: both;
+}
+
+/* Citation list (style as description list) */
+.citation-list,
+.footnote-list {
+ display: contents;
+}
+.citation {
+ padding-left: 1.5em;
+}
+.citation .label {
+ margin-left: -1.5em;
+}
+
+/* Images and Figures */
+img {
+ display: block;
+}
+p > img, p > a > img,
+figure > img, figure > a > img {
+ display: inline;
+}
+/* Caption to the left (if there is space) or below: */
+figure {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: flex-start;
+ margin: 0.5em 2%;
+ padding-left: 1em;
+}
+figure > img,
+figure.fullwidth > img {
+ margin: 0 0.5em 0.5em 0;
+ padding: 0;
+}
+figcaption {
+ font-size: 0.8em;
+}
+.fullwidth > figcaption {
+ font-size: inherit;
+}
+figure.numbered > figcaption > p:before {
+ counter-increment: figure;
+ content: "Figure " counter(figure) ": ";
+}
+
+/* Tables */
+table tr {
+ text-align: left;
+}
+/* th { vertical-align: bottom; } */
+/* "booktabs" style (no vertical lines) */
+table.booktabs {
+ border-top: 2px solid;
+ border-bottom: 2px solid;
+}
+table.booktabs * {
+ border: 0;
+}
+table.booktabs th {
+ border-bottom: thin solid;
+}
+table.numbered > caption:before {
+ counter-increment: table;
+ content: "Table " counter(table) ": ";
+}
+
+/* Admonitions and System Messages */
+.admonition, .system-message {
+ border-style: solid;
+ border-color: silver;
+ border-width: thin;
+ margin: 1em 0;
+ padding: 0.5em;
+}
+.caution p.admonition-title,
+.attention p.admonition-title,
+.danger p.admonition-title,
+.warning p.admonition-title,
+div.error {
+ color: maroon;
+}
+
+/* Literal and Code */
+pre.literal-block, pre.doctest-block,
+pre.math, pre.code {
+ /* font-family: Consolas, "Liberation Mono", Menlo, monospace; */
+ /* font-size: 0.9em; */
+ overflow: auto;
+}
+/* basic highlighting: for a complete scheme, see */
+/* https://docutils.sourceforge.io/sandbox/stylesheets/ */
+pre.code .comment, code .comment { color: #5C6576 }
+pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
+pre.code .literal.string, code .literal.string { color: #0C5404 }
+pre.code .name.builtin, code .name.builtin { color: #352B84 }
+pre.code .deleted, code .deleted { background-color: #DEB0A1}
+pre.code .inserted, code .inserted { background-color: #A3D289}
+
+.sans {
+ font-family: "Gill Sans", "Gill Sans MT", Calibri, "Lucida Sans", "Noto Sans", sans-serif;
+ letter-spacing: .02em;
+}
+
+/* Hyperlink References */
+/* underline that clears descenders */
+a {
+ color: inherit;
+}
+a:link {
+ text-decoration: underline;
+ /* text-decoration-skip-ink: auto; nonstandard selector */
+}
+/* undecorated links */
+.contents a:link, a.toc-backref:link, a.image-reference:link,
+a[role="doc-noteref"]:link, a[role="doc-backlink"]:link, .backrefs a:link,
+a.citation-reference:link,
+a[href^="#system-message"] {
+ text-decoration: none;
+}
+a:link:hover {
+ text-decoration: underline;
+}
+
+/* Block Alignment */
+/* Let content flow to the side of aligned images and figures */
+/* (does not work if the image/figure is a grid element). */
+
+/* no floats around this elements */
+footer, header,
+hr.docutils,
+h1, h2, h3, .contents > p.topic-title,
+.fullwidth {
+ clear: both;
+}
+
+img.align-left,
+figure.align-left,
+table.align-left {
+ margin-left: 0;
+ padding-left: 0;
+ padding-right: 0.5em;
+ clear: left;
+ float: left;
+}
+figure.align-left > img {
+ margin-left: 0;
+ padding-left: 0;
+}
+
+
+img.align-right {
+ padding-left: 0.5em;
+ clear: right;
+ float: right;
+}
+figure.align-right {
+ clear: right;
+ float: right;
+}
+figure.align-right > img {
+ justify-self: right;
+ padding: 0;
+}
+table.align-right {
+ margin-right: 2.5%;
+}
+
+figure.align-center {
+ align-content: center;
+ justify-content: center;
+}
+figure.align-center > img {
+ padding-left: 0;
+ justify-self: center;
+}
+
+/* Margin Elements */
+/* see below for screen size dependent rules */
+aside.sidebar,
+.marginal,
+.admonition.marginal,
+.topic.marginal {
+ background-color: #efefea;
+ box-sizing: border-box;
+ margin-left: 2%;
+ margin-right: 0;
+ padding: 0.5em;
+ font-size: 0.8em;
+}
+aside.sidebar {
+ background-color: inherit;
+}
+figure.marginal > figcaption {
+ font-size: 1em;
+}
+.footnote {
+ font-size: smaller;
+ overflow: auto;
+}
+
+/* Adaptive page layout */
+
+/* no floating for very small Screens */
+/* (main text up to ca. 40 characters/line) */
+@media (min-width: 35em) {
+ main, header, footer {
+ padding: 0.5em calc(15% - 3rem);
+ line-height: 1.6
+ }
+ aside.sidebar,
+ .marginal,
+ .admonition.marginal,
+ .topic.marginal {
+ max-width: 45%;
+ float: right;
+ clear: right;
+ }
+ dl.field-list > dd,
+ dl.docinfo > dd {
+ margin-left: 6em;
+ }
+ dl.option-list > dd {
+ margin-left: 6em;
+ }
+}
+
+/* 2 column layout with wide margin */
+@media (min-width: 65em) {
+ /* use the same grid for main, all sections, and figures */
+ main, section {
+ display: grid;
+ grid-template-columns: [content] minmax(0, 6fr)
+ [margin] 3fr [end];
+ grid-column-gap: calc(3em + 1%);
+ }
+ main > section, section > section {
+ grid-column: 1 / end;
+ }
+ main, header, footer {
+ padding-right: 5%; /* less padding right of margin-column */
+ }
+ section > figure {
+ display: contents; /* to place caption in the margin */
+ }
+ /* Main text elements */
+ main > *, section > *,
+ figure > img,
+ .footnote.align-left, /* override the placement in the margin */
+ .citation.align-left {
+ grid-column: content;
+ }
+ .citation.align-left {
+ font-size: 1em;
+ padding-left: 1.5em;
+ }
+ .citation.align-left .label {
+ margin-left: -1.5em;
+ }
+ figure > img { /* indent */
+ margin: 0.5em 2%;
+ padding-left: 1em;
+ }
+
+ /* Margin Elements */
+ /* Sidebar, Footnotes, Citations, Captions */
+ aside.sidebar,
+ .citation,
+ .footnote,
+ figcaption,
+ /* table > caption, does not work :(*/
+ .marginal,
+ .admonition.marginal,
+ .topic.marginal {
+ /* color: red; */
+ grid-column: margin;
+ width: auto;
+ max-width: 55em;
+ margin: 0.5em 0;
+ border: none;
+ padding: 0;
+ font-size: 0.8em;
+ text-align: initial; /* overwrite align-* */
+ background-color: inherit;
+ }
+ .admonition.marginal {
+ padding: 0.5em;
+ }
+ figure.marginal {
+ display: block;
+ margin: 0.5em 0;
+ }
+ .citation,
+ .footnote {
+ padding-left: 0;
+ }
+ .citation .label,
+ .footnote .label {
+ margin-left: 0;
+ }
+
+ /* Fullwidth Elements */
+ h1.title, p.subtitle,
+ dl.docinfo,
+ div.abstract,
+ div.dedication,
+ nav.contents,
+ aside.system-message,
+ pre,
+ .fullwidth,
+ .fullwidth img,
+ .fullwidth figcaption {
+ /* background-color: Linen; */
+ grid-column: content / end;
+ margin-right: calc(10% - 3rem);
+ max-width: 55em;
+ }
+}
+
+/* 3 column layout */
+
+@media (min-width: 100em) {
+ main, header, footer {
+ padding-left: 30%;
+ }
+ main > nav.contents {
+ position: fixed;
+ top: 0;
+ left: 0;
+ box-sizing: border-box;
+ width: 25%;
+ height: 100vh;
+ margin: 0;
+ background-color: #fafaf6;
+ padding: 5.5em 2%;
+ overflow: auto;
+ }
+ main > nav.contents > * {
+ padding-left: 0;
+ }
+}
+
+/* wrap URLs */
+/* a:link { */
+/* white-space: normal; */
+/* hyphens: none; */
+/* } */
diff --git a/assets/css/normalize-8.0.1.css b/assets/css/normalize-8.0.1.css
new file mode 100644
index 0000000..192eb9c
--- /dev/null
+++ b/assets/css/normalize-8.0.1.css
@@ -0,0 +1,349 @@
+/*! 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;
+}
diff --git a/assets/css/old.css b/assets/css/old.css
new file mode 100644
index 0000000..756bacc
--- /dev/null
+++ b/assets/css/old.css
@@ -0,0 +1,73 @@
+/* С Bludit версии Nixhacks.
+ *
+ * Надо позаимствовать отсюда переключение тем день/ночь */
+
+:root {
+ --b: #000;
+ --g: #888;
+ --w: #fff
+}
+
+body {
+ font: 400 18px/1.6 sans-serif;
+ padding: 2rem;
+ background: var(--w);
+ color: var(--b)
+}
+
+.container { max-width: 70ch }
+.mbh { margin: 0 0 .5rem }
+.mb1 { margin: 0 0 1rem }
+.mb2 { margin: 0 0 2rem }
+.g, pre { color: var(--g); overflow: auto; }
+
+img { width: 100%; image-rendering: -moz-crisp-edges; image-rendering: pixelated }
+a, a:visited { color: var(--b); text-decoration-color: var(--g) }
+a:hover { text-decoration-color: var(--b) }
+pre, ul, ol, blockquote { margin: 0; padding: 0 1rem }
+/*pre { white-space: pre-wrap }*/
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --b: #fff;
+ --g: #888;
+ --w: #000
+ }
+}
+
+.links-content {
+ margin: 18px 0 28px 16px;
+ display: inline-block;
+}
+
+.links-content ul {
+ padding: 0;
+}
+
+.links-content ul li {
+ margin: 0;
+ padding: 0;
+ padding-right: 8px;
+ display: inline-block;
+ list-style: none;
+}
+
+.links-content ul li::before {
+ content: '|';
+ position: relative;
+ left: -6px;
+}
+
+.links-content ul li:first-child::before {
+ content: none;
+}
+
+.links-label {display: inline-block;}
+
+.separator::after {
+ content: '- - -';
+}
+
+.copyright {
+ margin-top: 28px;
+}
diff --git a/assets/css/pygments/default.css b/assets/css/pygments/default.css
new file mode 100644
index 0000000..4bf0582
--- /dev/null
+++ b/assets/css/pygments/default.css
@@ -0,0 +1,74 @@
+pre { line-height: 125%; }
+td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+.highlight .hll { background-color: #ffffcc }
+.highlight { background: #f8f8f8; }
+.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */
+.highlight .err { border: 1px solid #FF0000 } /* Error */
+.highlight .k { color: #008000; font-weight: bold } /* Keyword */
+.highlight .o { color: #666666 } /* Operator */
+.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #9C6500 } /* Comment.Preproc */
+.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #A00000 } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #E40000 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #008400 } /* Generic.Inserted */
+.highlight .go { color: #717171 } /* Generic.Output */
+.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #0044DD } /* Generic.Traceback */
+.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #008000 } /* Keyword.Pseudo */
+.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #B00040 } /* Keyword.Type */
+.highlight .m { color: #666666 } /* Literal.Number */
+.highlight .s { color: #BA2121 } /* Literal.String */
+.highlight .na { color: #687822 } /* Name.Attribute */
+.highlight .nb { color: #008000 } /* Name.Builtin */
+.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
+.highlight .no { color: #880000 } /* Name.Constant */
+.highlight .nd { color: #AA22FF } /* Name.Decorator */
+.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */
+.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #0000FF } /* Name.Function */
+.highlight .nl { color: #767600 } /* Name.Label */
+.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
+.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #19177C } /* Name.Variable */
+.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mb { color: #666666 } /* Literal.Number.Bin */
+.highlight .mf { color: #666666 } /* Literal.Number.Float */
+.highlight .mh { color: #666666 } /* Literal.Number.Hex */
+.highlight .mi { color: #666666 } /* Literal.Number.Integer */
+.highlight .mo { color: #666666 } /* Literal.Number.Oct */
+.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
+.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
+.highlight .sc { color: #BA2121 } /* Literal.String.Char */
+.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
+.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
+.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
+.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
+.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
+.highlight .sx { color: #008000 } /* Literal.String.Other */
+.highlight .sr { color: #A45A77 } /* Literal.String.Regex */
+.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
+.highlight .ss { color: #19177C } /* Literal.String.Symbol */
+.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #0000FF } /* Name.Function.Magic */
+.highlight .vc { color: #19177C } /* Name.Variable.Class */
+.highlight .vg { color: #19177C } /* Name.Variable.Global */
+.highlight .vi { color: #19177C } /* Name.Variable.Instance */
+.highlight .vm { color: #19177C } /* Name.Variable.Magic */
+.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
diff --git a/assets/css/pygments/monokai.css b/assets/css/pygments/monokai.css
new file mode 100644
index 0000000..bced4a6
--- /dev/null
+++ b/assets/css/pygments/monokai.css
@@ -0,0 +1,83 @@
+pre { line-height: 125%; }
+td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+.highlight .hll { background-color: #49483e }
+.highlight { background: #272822; color: #f8f8f2 }
+.highlight .c { color: #75715e } /* Comment */
+.highlight .err { color: #960050; background-color: #1e0010 } /* Error */
+.highlight .esc { color: #f8f8f2 } /* Escape */
+.highlight .g { color: #f8f8f2 } /* Generic */
+.highlight .k { color: #66d9ef } /* Keyword */
+.highlight .l { color: #ae81ff } /* Literal */
+.highlight .n { color: #f8f8f2 } /* Name */
+.highlight .o { color: #f92672 } /* Operator */
+.highlight .x { color: #f8f8f2 } /* Other */
+.highlight .p { color: #f8f8f2 } /* Punctuation */
+.highlight .ch { color: #75715e } /* Comment.Hashbang */
+.highlight .cm { color: #75715e } /* Comment.Multiline */
+.highlight .cp { color: #75715e } /* Comment.Preproc */
+.highlight .cpf { color: #75715e } /* Comment.PreprocFile */
+.highlight .c1 { color: #75715e } /* Comment.Single */
+.highlight .cs { color: #75715e } /* Comment.Special */
+.highlight .gd { color: #f92672 } /* Generic.Deleted */
+.highlight .ge { color: #f8f8f2; font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #f8f8f2 } /* Generic.Error */
+.highlight .gh { color: #f8f8f2 } /* Generic.Heading */
+.highlight .gi { color: #a6e22e } /* Generic.Inserted */
+.highlight .go { color: #66d9ef } /* Generic.Output */
+.highlight .gp { color: #f92672; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { color: #f8f8f2; font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #75715e } /* Generic.Subheading */
+.highlight .gt { color: #f8f8f2 } /* Generic.Traceback */
+.highlight .kc { color: #66d9ef } /* Keyword.Constant */
+.highlight .kd { color: #66d9ef } /* Keyword.Declaration */
+.highlight .kn { color: #f92672 } /* Keyword.Namespace */
+.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */
+.highlight .kr { color: #66d9ef } /* Keyword.Reserved */
+.highlight .kt { color: #66d9ef } /* Keyword.Type */
+.highlight .ld { color: #e6db74 } /* Literal.Date */
+.highlight .m { color: #ae81ff } /* Literal.Number */
+.highlight .s { color: #e6db74 } /* Literal.String */
+.highlight .na { color: #a6e22e } /* Name.Attribute */
+.highlight .nb { color: #f8f8f2 } /* Name.Builtin */
+.highlight .nc { color: #a6e22e } /* Name.Class */
+.highlight .no { color: #66d9ef } /* Name.Constant */
+.highlight .nd { color: #a6e22e } /* Name.Decorator */
+.highlight .ni { color: #f8f8f2 } /* Name.Entity */
+.highlight .ne { color: #a6e22e } /* Name.Exception */
+.highlight .nf { color: #a6e22e } /* Name.Function */
+.highlight .nl { color: #f8f8f2 } /* Name.Label */
+.highlight .nn { color: #f8f8f2 } /* Name.Namespace */
+.highlight .nx { color: #a6e22e } /* Name.Other */
+.highlight .py { color: #f8f8f2 } /* Name.Property */
+.highlight .nt { color: #f92672 } /* Name.Tag */
+.highlight .nv { color: #f8f8f2 } /* Name.Variable */
+.highlight .ow { color: #f92672 } /* Operator.Word */
+.highlight .w { color: #f8f8f2 } /* Text.Whitespace */
+.highlight .mb { color: #ae81ff } /* Literal.Number.Bin */
+.highlight .mf { color: #ae81ff } /* Literal.Number.Float */
+.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */
+.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */
+.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */
+.highlight .sa { color: #e6db74 } /* Literal.String.Affix */
+.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */
+.highlight .sc { color: #e6db74 } /* Literal.String.Char */
+.highlight .dl { color: #e6db74 } /* Literal.String.Delimiter */
+.highlight .sd { color: #e6db74 } /* Literal.String.Doc */
+.highlight .s2 { color: #e6db74 } /* Literal.String.Double */
+.highlight .se { color: #ae81ff } /* Literal.String.Escape */
+.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */
+.highlight .si { color: #e6db74 } /* Literal.String.Interpol */
+.highlight .sx { color: #e6db74 } /* Literal.String.Other */
+.highlight .sr { color: #e6db74 } /* Literal.String.Regex */
+.highlight .s1 { color: #e6db74 } /* Literal.String.Single */
+.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */
+.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #a6e22e } /* Name.Function.Magic */
+.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */
+.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */
+.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */
+.highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */
+.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */
diff --git a/assets/css/pygments/native.css b/assets/css/pygments/native.css
new file mode 100644
index 0000000..bb3cac4
--- /dev/null
+++ b/assets/css/pygments/native.css
@@ -0,0 +1,83 @@
+pre { line-height: 125%; }
+td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+.highlight .hll { background-color: #404040 }
+.highlight { background: #202020; color: #d0d0d0 }
+.highlight .c { color: #ababab; font-style: italic } /* Comment */
+.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+.highlight .esc { color: #d0d0d0 } /* Escape */
+.highlight .g { color: #d0d0d0 } /* Generic */
+.highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */
+.highlight .l { color: #d0d0d0 } /* Literal */
+.highlight .n { color: #d0d0d0 } /* Name */
+.highlight .o { color: #d0d0d0 } /* Operator */
+.highlight .x { color: #d0d0d0 } /* Other */
+.highlight .p { color: #d0d0d0 } /* Punctuation */
+.highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */
+.highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
+.highlight .gd { color: #d22323 } /* Generic.Deleted */
+.highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #d22323 } /* Generic.Error */
+.highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #589819 } /* Generic.Inserted */
+.highlight .go { color: #cccccc } /* Generic.Output */
+.highlight .gp { color: #aaaaaa } /* Generic.Prompt */
+.highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */
+.highlight .gt { color: #d22323 } /* Generic.Traceback */
+.highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */
+.highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */
+.highlight .ld { color: #d0d0d0 } /* Literal.Date */
+.highlight .m { color: #51b2fd } /* Literal.Number */
+.highlight .s { color: #ed9d13 } /* Literal.String */
+.highlight .na { color: #bbbbbb } /* Name.Attribute */
+.highlight .nb { color: #2fbccd } /* Name.Builtin */
+.highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */
+.highlight .no { color: #40ffff } /* Name.Constant */
+.highlight .nd { color: #ffa500 } /* Name.Decorator */
+.highlight .ni { color: #d0d0d0 } /* Name.Entity */
+.highlight .ne { color: #bbbbbb } /* Name.Exception */
+.highlight .nf { color: #71adff } /* Name.Function */
+.highlight .nl { color: #d0d0d0 } /* Name.Label */
+.highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */
+.highlight .nx { color: #d0d0d0 } /* Name.Other */
+.highlight .py { color: #d0d0d0 } /* Name.Property */
+.highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #40ffff } /* Name.Variable */
+.highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */
+.highlight .w { color: #666666 } /* Text.Whitespace */
+.highlight .mb { color: #51b2fd } /* Literal.Number.Bin */
+.highlight .mf { color: #51b2fd } /* Literal.Number.Float */
+.highlight .mh { color: #51b2fd } /* Literal.Number.Hex */
+.highlight .mi { color: #51b2fd } /* Literal.Number.Integer */
+.highlight .mo { color: #51b2fd } /* Literal.Number.Oct */
+.highlight .sa { color: #ed9d13 } /* Literal.String.Affix */
+.highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */
+.highlight .sc { color: #ed9d13 } /* Literal.String.Char */
+.highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */
+.highlight .sd { color: #ed9d13 } /* Literal.String.Doc */
+.highlight .s2 { color: #ed9d13 } /* Literal.String.Double */
+.highlight .se { color: #ed9d13 } /* Literal.String.Escape */
+.highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */
+.highlight .si { color: #ed9d13 } /* Literal.String.Interpol */
+.highlight .sx { color: #ffa500 } /* Literal.String.Other */
+.highlight .sr { color: #ed9d13 } /* Literal.String.Regex */
+.highlight .s1 { color: #ed9d13 } /* Literal.String.Single */
+.highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */
+.highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #71adff } /* Name.Function.Magic */
+.highlight .vc { color: #40ffff } /* Name.Variable.Class */
+.highlight .vg { color: #40ffff } /* Name.Variable.Global */
+.highlight .vi { color: #40ffff } /* Name.Variable.Instance */
+.highlight .vm { color: #40ffff } /* Name.Variable.Magic */
+.highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */
diff --git a/assets/css/pygments/pastie.css b/assets/css/pygments/pastie.css
new file mode 100644
index 0000000..50034ce
--- /dev/null
+++ b/assets/css/pygments/pastie.css
@@ -0,0 +1,73 @@
+pre { line-height: 125%; }
+td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+.highlight .hll { background-color: #ffffcc }
+.highlight { background: #ffffff; }
+.highlight .c { color: #888888 } /* Comment */
+.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+.highlight .k { color: #008800; font-weight: bold } /* Keyword */
+.highlight .ch { color: #888888 } /* Comment.Hashbang */
+.highlight .cm { color: #888888 } /* Comment.Multiline */
+.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
+.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
+.highlight .c1 { color: #888888 } /* Comment.Single */
+.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
+.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #aa0000 } /* Generic.Error */
+.highlight .gh { color: #333333 } /* Generic.Heading */
+.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #555555 } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #666666 } /* Generic.Subheading */
+.highlight .gt { color: #aa0000 } /* Generic.Traceback */
+.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #008800 } /* Keyword.Pseudo */
+.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
+.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
+.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
+.highlight .na { color: #336699 } /* Name.Attribute */
+.highlight .nb { color: #003388 } /* Name.Builtin */
+.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
+.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
+.highlight .nd { color: #555555 } /* Name.Decorator */
+.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
+.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
+.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
+.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
+.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #336699 } /* Name.Variable */
+.highlight .ow { color: #008800 } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
+.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
+.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
+.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
+.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
+.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
+.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
+.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
+.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
+.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
+.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
+.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
+.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
+.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
+.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
+.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
+.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
+.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
+.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
+.highlight .vc { color: #336699 } /* Name.Variable.Class */
+.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
+.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
+.highlight .vm { color: #336699 } /* Name.Variable.Magic */
+.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
diff --git a/assets/css/pygments/rrt.css b/assets/css/pygments/rrt.css
new file mode 100644
index 0000000..a542cfd
--- /dev/null
+++ b/assets/css/pygments/rrt.css
@@ -0,0 +1,83 @@
+pre { line-height: 125%; }
+td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+.highlight .hll { background-color: #0000ff }
+.highlight { background: #000000; color: #dddddd }
+.highlight .c { color: #00ff00 } /* Comment */
+.highlight .err { color: #dddddd } /* Error */
+.highlight .esc { color: #dddddd } /* Escape */
+.highlight .g { color: #dddddd } /* Generic */
+.highlight .k { color: #ff0000 } /* Keyword */
+.highlight .l { color: #dddddd } /* Literal */
+.highlight .n { color: #dddddd } /* Name */
+.highlight .o { color: #dddddd } /* Operator */
+.highlight .x { color: #dddddd } /* Other */
+.highlight .p { color: #dddddd } /* Punctuation */
+.highlight .ch { color: #00ff00 } /* Comment.Hashbang */
+.highlight .cm { color: #00ff00 } /* Comment.Multiline */
+.highlight .cp { color: #e5e5e5 } /* Comment.Preproc */
+.highlight .cpf { color: #00ff00 } /* Comment.PreprocFile */
+.highlight .c1 { color: #00ff00 } /* Comment.Single */
+.highlight .cs { color: #00ff00 } /* Comment.Special */
+.highlight .gd { color: #dddddd } /* Generic.Deleted */
+.highlight .ge { color: #dddddd } /* Generic.Emph */
+.highlight .gr { color: #dddddd } /* Generic.Error */
+.highlight .gh { color: #dddddd } /* Generic.Heading */
+.highlight .gi { color: #dddddd } /* Generic.Inserted */
+.highlight .go { color: #dddddd } /* Generic.Output */
+.highlight .gp { color: #dddddd } /* Generic.Prompt */
+.highlight .gs { color: #dddddd } /* Generic.Strong */
+.highlight .gu { color: #dddddd } /* Generic.Subheading */
+.highlight .gt { color: #dddddd } /* Generic.Traceback */
+.highlight .kc { color: #ff0000 } /* Keyword.Constant */
+.highlight .kd { color: #ff0000 } /* Keyword.Declaration */
+.highlight .kn { color: #ff0000 } /* Keyword.Namespace */
+.highlight .kp { color: #ff0000 } /* Keyword.Pseudo */
+.highlight .kr { color: #ff0000 } /* Keyword.Reserved */
+.highlight .kt { color: #ee82ee } /* Keyword.Type */
+.highlight .ld { color: #dddddd } /* Literal.Date */
+.highlight .m { color: #dddddd } /* Literal.Number */
+.highlight .s { color: #87ceeb } /* Literal.String */
+.highlight .na { color: #dddddd } /* Name.Attribute */
+.highlight .nb { color: #dddddd } /* Name.Builtin */
+.highlight .nc { color: #dddddd } /* Name.Class */
+.highlight .no { color: #7fffd4 } /* Name.Constant */
+.highlight .nd { color: #dddddd } /* Name.Decorator */
+.highlight .ni { color: #dddddd } /* Name.Entity */
+.highlight .ne { color: #dddddd } /* Name.Exception */
+.highlight .nf { color: #ffff00 } /* Name.Function */
+.highlight .nl { color: #dddddd } /* Name.Label */
+.highlight .nn { color: #dddddd } /* Name.Namespace */
+.highlight .nx { color: #dddddd } /* Name.Other */
+.highlight .py { color: #dddddd } /* Name.Property */
+.highlight .nt { color: #dddddd } /* Name.Tag */
+.highlight .nv { color: #eedd82 } /* Name.Variable */
+.highlight .ow { color: #dddddd } /* Operator.Word */
+.highlight .w { color: #dddddd } /* Text.Whitespace */
+.highlight .mb { color: #dddddd } /* Literal.Number.Bin */
+.highlight .mf { color: #dddddd } /* Literal.Number.Float */
+.highlight .mh { color: #dddddd } /* Literal.Number.Hex */
+.highlight .mi { color: #dddddd } /* Literal.Number.Integer */
+.highlight .mo { color: #dddddd } /* Literal.Number.Oct */
+.highlight .sa { color: #87ceeb } /* Literal.String.Affix */
+.highlight .sb { color: #87ceeb } /* Literal.String.Backtick */
+.highlight .sc { color: #87ceeb } /* Literal.String.Char */
+.highlight .dl { color: #87ceeb } /* Literal.String.Delimiter */
+.highlight .sd { color: #87ceeb } /* Literal.String.Doc */
+.highlight .s2 { color: #87ceeb } /* Literal.String.Double */
+.highlight .se { color: #87ceeb } /* Literal.String.Escape */
+.highlight .sh { color: #87ceeb } /* Literal.String.Heredoc */
+.highlight .si { color: #87ceeb } /* Literal.String.Interpol */
+.highlight .sx { color: #87ceeb } /* Literal.String.Other */
+.highlight .sr { color: #87ceeb } /* Literal.String.Regex */
+.highlight .s1 { color: #87ceeb } /* Literal.String.Single */
+.highlight .ss { color: #87ceeb } /* Literal.String.Symbol */
+.highlight .bp { color: #dddddd } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #ffff00 } /* Name.Function.Magic */
+.highlight .vc { color: #eedd82 } /* Name.Variable.Class */
+.highlight .vg { color: #eedd82 } /* Name.Variable.Global */
+.highlight .vi { color: #eedd82 } /* Name.Variable.Instance */
+.highlight .vm { color: #eedd82 } /* Name.Variable.Magic */
+.highlight .il { color: #dddddd } /* Literal.Number.Integer.Long */
diff --git a/assets/css/pygments/solarized-light.css b/assets/css/pygments/solarized-light.css
new file mode 100644
index 0000000..ddb31eb
--- /dev/null
+++ b/assets/css/pygments/solarized-light.css
@@ -0,0 +1,83 @@
+pre { line-height: 125%; }
+td.linenos .normal { color: #93a1a1; background-color: #eee8d5; padding-left: 5px; padding-right: 5px; }
+span.linenos { color: #93a1a1; background-color: #eee8d5; padding-left: 5px; padding-right: 5px; }
+td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+.highlight .hll { background-color: #eee8d5 }
+.highlight { background: #fdf6e3; color: #657b83 }
+.highlight .c { color: #93a1a1; font-style: italic } /* Comment */
+.highlight .err { color: #657b83; background-color: #dc322f } /* Error */
+.highlight .esc { color: #657b83 } /* Escape */
+.highlight .g { color: #657b83 } /* Generic */
+.highlight .k { color: #859900 } /* Keyword */
+.highlight .l { color: #657b83 } /* Literal */
+.highlight .n { color: #657b83 } /* Name */
+.highlight .o { color: #93a1a1 } /* Operator */
+.highlight .x { color: #657b83 } /* Other */
+.highlight .p { color: #657b83 } /* Punctuation */
+.highlight .ch { color: #93a1a1; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #93a1a1; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #d33682 } /* Comment.Preproc */
+.highlight .cpf { color: #93a1a1 } /* Comment.PreprocFile */
+.highlight .c1 { color: #93a1a1; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #93a1a1; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #dc322f } /* Generic.Deleted */
+.highlight .ge { color: #657b83; font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #dc322f } /* Generic.Error */
+.highlight .gh { color: #657b83; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #859900 } /* Generic.Inserted */
+.highlight .go { color: #657b83 } /* Generic.Output */
+.highlight .gp { color: #268bd2; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { color: #657b83; font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #657b83; text-decoration: underline } /* Generic.Subheading */
+.highlight .gt { color: #268bd2 } /* Generic.Traceback */
+.highlight .kc { color: #2aa198 } /* Keyword.Constant */
+.highlight .kd { color: #2aa198 } /* Keyword.Declaration */
+.highlight .kn { color: #cb4b16 } /* Keyword.Namespace */
+.highlight .kp { color: #859900 } /* Keyword.Pseudo */
+.highlight .kr { color: #859900 } /* Keyword.Reserved */
+.highlight .kt { color: #b58900 } /* Keyword.Type */
+.highlight .ld { color: #657b83 } /* Literal.Date */
+.highlight .m { color: #2aa198 } /* Literal.Number */
+.highlight .s { color: #2aa198 } /* Literal.String */
+.highlight .na { color: #657b83 } /* Name.Attribute */
+.highlight .nb { color: #268bd2 } /* Name.Builtin */
+.highlight .nc { color: #268bd2 } /* Name.Class */
+.highlight .no { color: #268bd2 } /* Name.Constant */
+.highlight .nd { color: #268bd2 } /* Name.Decorator */
+.highlight .ni { color: #268bd2 } /* Name.Entity */
+.highlight .ne { color: #268bd2 } /* Name.Exception */
+.highlight .nf { color: #268bd2 } /* Name.Function */
+.highlight .nl { color: #268bd2 } /* Name.Label */
+.highlight .nn { color: #268bd2 } /* Name.Namespace */
+.highlight .nx { color: #657b83 } /* Name.Other */
+.highlight .py { color: #657b83 } /* Name.Property */
+.highlight .nt { color: #268bd2 } /* Name.Tag */
+.highlight .nv { color: #268bd2 } /* Name.Variable */
+.highlight .ow { color: #859900 } /* Operator.Word */
+.highlight .w { color: #657b83 } /* Text.Whitespace */
+.highlight .mb { color: #2aa198 } /* Literal.Number.Bin */
+.highlight .mf { color: #2aa198 } /* Literal.Number.Float */
+.highlight .mh { color: #2aa198 } /* Literal.Number.Hex */
+.highlight .mi { color: #2aa198 } /* Literal.Number.Integer */
+.highlight .mo { color: #2aa198 } /* Literal.Number.Oct */
+.highlight .sa { color: #2aa198 } /* Literal.String.Affix */
+.highlight .sb { color: #2aa198 } /* Literal.String.Backtick */
+.highlight .sc { color: #2aa198 } /* Literal.String.Char */
+.highlight .dl { color: #2aa198 } /* Literal.String.Delimiter */
+.highlight .sd { color: #93a1a1 } /* Literal.String.Doc */
+.highlight .s2 { color: #2aa198 } /* Literal.String.Double */
+.highlight .se { color: #2aa198 } /* Literal.String.Escape */
+.highlight .sh { color: #2aa198 } /* Literal.String.Heredoc */
+.highlight .si { color: #2aa198 } /* Literal.String.Interpol */
+.highlight .sx { color: #2aa198 } /* Literal.String.Other */
+.highlight .sr { color: #cb4b16 } /* Literal.String.Regex */
+.highlight .s1 { color: #2aa198 } /* Literal.String.Single */
+.highlight .ss { color: #2aa198 } /* Literal.String.Symbol */
+.highlight .bp { color: #268bd2 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #268bd2 } /* Name.Function.Magic */
+.highlight .vc { color: #268bd2 } /* Name.Variable.Class */
+.highlight .vg { color: #268bd2 } /* Name.Variable.Global */
+.highlight .vi { color: #268bd2 } /* Name.Variable.Instance */
+.highlight .vm { color: #268bd2 } /* Name.Variable.Magic */
+.highlight .il { color: #2aa198 } /* Literal.Number.Integer.Long */
diff --git a/assets/css/restructuredtext.css b/assets/css/restructuredtext.css
new file mode 100644
index 0000000..b56038a
--- /dev/null
+++ b/assets/css/restructuredtext.css
@@ -0,0 +1,134 @@
+/* Typography
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+
+h1, h2, h3, h4, h5, h6 {
+ margin-top: 1rem;
+ margin-bottom: 1.2rem;
+ font-weight: 500;
+}
+
+h1 { font-size: 3.6rem; line-height: 1.2; letter-spacing: -.1rem;}
+h2 { font-size: 3.0rem; line-height: 1.25; letter-spacing: -.1rem; }
+h3 { font-size: 2.6rem; line-height: 1.3; letter-spacing: -.1rem; }
+h4 { font-size: 2.0rem; line-height: 1.35; letter-spacing: -.08rem; }
+h5 { font-size: 1.6rem; line-height: 1.5; letter-spacing: -.05rem; }
+h6 { font-size: 1.2rem; line-height: 1.6; letter-spacing: 0; }
+p { margin: 1rem 0; }
+
+/* Links
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+
+a {
+ color: #0b6adc;
+ text-decoration: none;
+}
+
+a:hover {
+ color: #0b6adc;
+ text-decoration: underline;
+}
+
+/* Code
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+
+pre {
+ font-size: 85%;
+}
+
+code {
+ padding: .2rem .5rem;
+ margin: 0 .2rem;
+ white-space: nowrap;
+ background: #f1f1f1;
+ border: 1px solid #e1e1e1;
+}
+
+pre > code {
+ display: block;
+ padding: 1rem;
+ white-space: pre;
+}
+
+.highlight {
+ border-radius: 8px;
+}
+
+.highlight pre {
+ padding: 1rem;
+ overflow-x: auto;
+}
+
+span.docutils.literal { /* Inline literal */
+ background-color: #d0d7de;
+ border-radius: 4px;
+ padding: 0 4px 2px 4px;
+ font-family: monospace;
+ font-size: 80%;
+}
+
+/* Lists
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+
+dt { /* Defenition list title */
+ font-weight: bold;
+}
+
+ol, ul {
+ margin: 0;
+}
+
+/* Blockquotes
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+
+blockquote {
+ padding: 0 1em;
+ border-left: .25em solid #d0d7de;
+}
+
+/* Tables
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+
+table, th, td {
+ border: 1px solid;
+ border-collapse: collapse;
+ border-color: #afb4b9;
+ padding: 0 8px;
+}
+
+th {
+ font-weight: 600;
+ background-color: #d0d7de;
+}
+
+td p {
+ margin: .5rem 0;
+}
+
+hr {
+ color: #d0d7de;
+}
+
+/* Admonitions
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+.admonition {
+ padding: .5rem 1rem;
+}
+.admonition-title {
+ font-weight: bold;
+}
+.attention {}
+.caution {}
+.danger {}
+.error {}
+.hint {}
+.important {}
+.note {
+ color: #3171b5;
+ background-color: #e5f1fb;
+}
+.tip {}
+.warning {}
+.topic {}
+.topic-title {
+ font-weight: bold;
+}
diff --git a/content/bash_prompt.rst b/content/bash_prompt.rst
new file mode 100644
index 0000000..377ad5f
--- /dev/null
+++ b/content/bash_prompt.rst
@@ -0,0 +1,49 @@
+:title: Функциональный и простой Bash prompt
+:date: 10 Jul 2022
+
+====================================
+Функциональный и простой Bash prompt
+====================================
+
+О промптинге в Bash написано очень много, в этой заметке я просто покажу
+лаконичный и функциональный вариант приглашения командной строки.
+
+Вот фрагмент из моего **~/.bashrc**:
+
+.. code-block:: shell
+
+ # Command line prompt
+ # Print a non-zero exit code
+ __exit_code_ps1() {
+ if [ "$1" -ne 0 ]; then
+ echo "$1 "
+ fi
+ }
+
+ PS1='\[\033[0;92m\]\w \[\033[0;31m\]$(__exit_code_ps1 $?)\[\033[0;15m\]\$ '
+
+ # Git prompt
+ # See /usr/share/git/completion/git-prompt.sh or download from:
+ # https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh
+ if [ -f /usr/share/git/completion/git-prompt.sh ]; then
+ . /usr/share/git/completion/git-prompt.sh
+ GIT_PS1_SHOWDIRTYSTATE=1
+ PS1='\[\033[0;96m\]$(__git_ps1 "(%s) ")\[\033[0;92m\]\w \[\033[0;31m\]$(__exit_code_ps1 $?)\[\033[0;15m\]\$ '
+ fi
+
+На GitHub можно найти много всяких скриптов или даже целых "фремворков" типа `этого`_
+или `отдельные скрипты`_ для Git. А вы знали, что скрипт для PS1 и так `поставляется`_
+в пакете Git? Не вижу смысла не использовать его, если только вам не надо
+как-то иначе работать с PS1.
+
+.. _этого: https://github.com/ohmybash/oh-my-bash
+.. _отдельные скрипты: https://github.com/magicmonty/bash-git-prompt
+.. _поставляется: https://github.com/git/git/tree/master/contrib/completion>
+
+Помимо **git-prompt.sh** я использую функцию ``__exit_code_ps1()``, которая просто
+печатает число, если оно не равно нулю. Это очень удобно — всегда видишь код выхода
+предыдущей запущенной команды, порой очень помогает при отладке скриптов.
+
+В итоге всё это дело у меня выглядит вот так:
+
+.. image:: https://i.nxhs.cloud/ovD.png
diff --git a/content/python_oop.rst b/content/python_oop.rst
new file mode 100644
index 0000000..6121bf3
--- /dev/null
+++ b/content/python_oop.rst
@@ -0,0 +1,54 @@
+:title: Питонячье ООП на уточках
+:date: 24 Jul 2021
+
+========================
+Питонячье ООП на уточках
+========================
+
+Это весьма скупая на информацию напоминалка о работе с классами. Более подробно написали на `proglib.io`_ и в `документации`_.
+
+.. _proglib.io: https://proglib.io/p/python-oop/
+.. _документации: https://docs.python.org/3/reference/compound_stmts.html#class-definitions
+
+Создал файл ``duck.py``:
+
+.. code-block:: python
+
+ # Объявляем класс "птица". От него в последствии будет унаследован
+ # класс "уточка". Здесь задаются общие характеристики для всех птиц
+ # и метод "летать". Аргумент `self` – это ссылка на объект, в контексте
+ # которого вызывается метод. Она обязательна для методов классов.
+
+ class Bird(object):
+ can_fly = True
+ wings = 2
+ def fly(self):
+ print('I\'m flying!')
+
+ # Уточка это уже конкретный биологический вид (опускам породы и
+ # виды уточек).
+ # У неё есть имя и цвет (хотя цвет мог быть и у абстрактной птицы).
+ # Также уточка обладает уникальным методом "сказать кря".
+
+ class Duck(Bird):
+ name = 'Duck'
+ color = 'Yellow'
+ def say_quack(self):
+ print('quack!')
+
+Как этим пользоваться:
+
+.. code-block:: text
+
+ >>> import duck
+ >>> bird = duck.Bird()
+ >>> duck = duck.Duck()
+ >>> bird.fly()
+ I'm flying!
+ >>> duck.fly()
+ I'm flying!
+ >>> duck.say_quack()
+ quack!
+ >>> duck.name = 'Cool Duck'
+ >>> duck.name
+ 'Cool Duck'
diff --git a/content/rst.rst b/content/rst.rst
new file mode 100644
index 0000000..990b70b
--- /dev/null
+++ b/content/rst.rst
@@ -0,0 +1,192 @@
+:title: Превью reStructuredText
+:date: 5 Aug 2022
+:not_a_post:
+
+===================================
+Превью *re*\ **Structured**\ *Text*
+===================================
+
+This document is the theme preview.
+
+Sphinx provides several different types of admonitions.
+
+.. topic:: This is a topic.
+
+ This is what admonitions are a special case of, according to the docutils
+ documentation.
+
+.. admonition:: The one with the custom titles
+
+ It's got a certain charm to it.
+
+.. attention::
+
+ Climate change is real.
+
+.. caution::
+
+ Cliff ahead: Don't drive off it.
+
+.. danger::
+
+ Mad scientist at work!
+
+.. error::
+
+ Does not compute.
+
+.. hint::
+
+ Insulators insulate, until they are subject to ______ voltage.
+
+.. important::
+
+ Tech is not neutral, nor is it apolitical.
+
+.. note::
+
+ This is a note.
+
+.. tip::
+
+ 25% if the service is good.
+
+.. warning::
+
+ Reader discretion is strongly advised.
+
+Subheading
+==========
+
+.. Press :kbd:`Ctrl+Alt+Del`.
+
+Subsubheading
+-------------
+
+Subsububheading
+```````````````
+
+Subsubsubsubheading
+'''''''''''''''''''
+
+Subsubsubsubsubheading
+~~~~~~~~~~~~~~~~~~~~~~
+
+`Python Docs`_.
+
+.. _Python Docs: https://docs.python.org/
+
+The area of a circle is :math:`A_\text{c} = (\pi/4) d^2`.
+
+.. math::
+
+ \frac{ \sum_{t=0}^{N}f(t,k) }{N}
+
+Python code block:
+
+.. code:: python
+
+ @app.get('/api/hello/{name}')
+ async def get_user_info(name: str) -> str:
+ return 'Hello, {}!'.format(name)
+
+There is an ``inline literal`` and `interpreted text`
+
+``code-block`` properties supported by Sphinx:
+
+::
+
+ :linenos: Show line numbers
+ :emphasize-lines: 3,5 Highlight specific lines
+
+------------
+
+Bullet lists:
+
+- This is item 1
+
+ - Sub item
+
+ - 3rd level sub item
+
+ - 4nd level
+
+- This is item 2
+
+- Bullets are "-", "*" or "+".
+ Continuing text must be aligned
+ after the bullet and whitespace.
+
+Note that a blank line is required
+before the first item and after the
+last, but is optional between items.
+
+Enumerated lists:
+
+3. This is the first item
+4. This is the second item
+5. Enumerators are arabic numbers,
+ single letters, or roman numerals
+6. List items should be sequentially
+ numbered, but need not start at 1
+ (although not all formatters will
+ honour the first index).
+#. This item is auto-enumerated
+
+Definition lists:
+
+what
+ Definition lists associate a term with
+ a definition.
+
+how
+ The term is a one-line phrase, and the
+ definition is one or more paragraphs or
+ body elements, indented relative to the
+ term. Blank lines are not allowed
+ between term and definition.
+
+Field Lists:
+
+:Authors:
+ Tony J. (Tibs) Ibbs,
+ David Goodger
+
+ (and sundry other good-natured folks)
+
+:Version: 1.0 of 2001/08/08
+:Dedication: To my father.
+
+Block quotes are just:
+
+ Indented paragraphs,
+
+ and they may nest.
+
+Grid table:
+
++------------+------------+-----------+
+| Header 1 | Header 2 | Header 3 |
++============+============+===========+
+| body row 1 | column 2 | column 3 |
++------------+------------+-----------+
+| body row 2 | Cells may span columns.|
++------------+------------+-----------+
+| body row 3 | Cells may | - Cells |
++------------+ span rows. | - contain |
+| body row 4 | | - blocks. |
++------------+------------+-----------+
+
+Simple table:
+
+===== ===== ======
+ Inputs Output
+------------ ------
+ A B A or B
+===== ===== ======
+False False False
+True False True
+False True True
+True True True
+===== ===== ======
+
diff --git a/content/this_blog.rst b/content/this_blog.rst
new file mode 100644
index 0000000..4231ab1
--- /dev/null
+++ b/content/this_blog.rst
@@ -0,0 +1,335 @@
+:title: Как я написал этот блог
+:date: 5 Aug 2022
+
+=======================
+Как я написал этот блог
+=======================
+
+Предыстория
+===========
+
+Я очень давно планировал написать блог. Именно что написать CMS для ведения
+блога. Если погуглить, то CMS для этих целей сотни на разных языках с разным
+позиционированием и фичами. Но мне хотелось своего.
+
+Первые попытки создать сайт были на `Flask`_, особым успехом не увенчались,
+но это была хорошая практика и я немного прокачал свой уровень программирования.
+
+Для блога я не хотел использовать базу данных. Вместо этого я хранил статьи в
+исходном Markdown, а метаданные по каждой статье писал в отдельный JSON, который
+заменял мне БД. С тем же успехом я мог бы использовать SQLite, но мне нужно было
+хранить контент в text/plain.
+
+Блог даже работал, но мне хотелось сделать админку, чтобы можно было писать
+прямо в браузере. На этой части разработка заглохла и я окончательно запутался в
+импортах в Python)
+
+Прошло ещё много времени, я вернулся к идее, но решил сделать ставку на простоту
+и начал писать на `Bottle`_. Здесь разработка остановилась не дойдя даже до
+варианта хоть как-то работающей системы. Причины скорее всего надо искать в
+лени.
+
+Устав я взял `CMS Bludit`_ и стал вести свои редкие заметки в нём. Решение не
+самое плохое, но и не супер отличное. Для простой кастомизации футера пришлось
+городить костыли.
+
+.. _Flask: https://flask.palletsprojects.com/
+.. _Bottle: https://bottlepy.org/
+.. _CMS Bludit: https://www.bludit.com/ru/
+
+Статика VS динамика
+===================
+
+Преимуществ у статических сайтов много. Об этом уже много написано. Мне больше
+всего в статических сайтах нравится то, что:
+
+* роутингом запросов не управляет какой-либо скрипт, я могу свободно
+ распоряжаться тем, что у меня есть в DocumentRoot;
+* не нужно настраивать application-сервер и реверс-прокси на него.
+
+С редактированием сайта чуть сложнее, так как сперва надо внести изменения
+локально, а затем заменить изменившиеся файлы на сервере. Но и тут есть
+какие-то решения.
+
+Я рассматривал уже готовые генераторы статических сайтов, но у них всех были
+фатальные недостатки:
+
+* они сложные и требуют изучения документации чтобы начать писать;
+* написать собственную тему задача весьма непростая;
+* они написаны не мной.
+
+Здесь и рождается мой велосипед, которому я не придумал названия. Буду называть
+его `генератором`.
+
+*re*\ **Structured**\ *Text*
+============================
+
+Я очень долго писал на Markdown, но в один момент понял, что возможностей языка
+стало нехватать. Тут пришёлся очень кстати `Python-Markdown`_ к которому можно
+было прикручивать `расширения`_. Одно даже сам `написал`_.
+
+Постепенно я пришёл к `reStructuredText`_. Все приколюхи, которые в нём есть
+существуют не за счёт расширения синтаксиса плагинами, а заложены в спецификации.
+Функциональности из коробки хватает чтобы писать даже `формулы`_.
+
+Такие вещи делаются через `роли` и `директивы`. Некоторые готовые директивы есть
+в системе документации `Sphinx`_. Их я собираюсь потихоньку скопировать к себе.
+
+Ещё одно большое преимущество перед Markdown состоит в том, что reStructuredText
+поддерживает атрибуты. Вот как это выглядит:
+
+.. code-block:: rst
+
+ :title: Как я написал этот блог
+ :date: 5 Aug 2022
+
+Это нативная фича, которую можно использовать в статьях для добавления метаданных.
+
+По сути это место, где можно сделать настройки, касающиеся отдельно взятой статьи.
+
+Большинство генераторов статических сайтов колхозят нечно подобное в Markdown, делая
+исходник статьи непригодным для парсинга другими инструментами. Это причина по
+которой в старой реализации блога мне пришлось использовать JSON для метаданных.
+
+.. _Sphinx: https://www.sphinx-doc.org/en/master/index.html
+.. _Python-Markdown: https://python-markdown.github.io/
+.. _расширения: https://python-markdown.github.io/extensions/
+.. _написал: https://pypi.org/project/markdown-alerts/
+.. _rST: https://docutils.sourceforge.io/rst.html
+.. _формулы: https://docutils.sourceforge.io/docs/ref/rst/mathematics.html
+
+Обзор
+=====
+
+Сайт состоит из следующих частей.
+
+rst_blg.py
+ Непосредственно код генератора. Сейчас там всего около 200 строк без учёта
+ комментариев.
+
+requirements.txt
+ Список зависимостей. Стараюсь держать минимум. Пока что там: `docutils`,
+ `jinja2`, `toml` и `pygments`.
+
+settings.toml
+ Файл с настройками. Здесь можно переопределить практически всё.
+
+Makefile
+ Через него запускаются команды для сборки сайта и некоторые другие. Не
+ является обязательным, но с ним удобнее.
+
+layouts
+ Директория для шаблонов Jinja2.
+
+assets
+ Директория для хранения статических файлов, будь то CSS, JS или изображения.
+ Всё что нужно для визуального оформления страниц. Внутренняя структура
+ каталога может быть произвольной.
+
+content
+ Директория с исходниками статей в reStructuredText. Сюда можно также
+ положить любые файлы и директории.
+
+build
+ В эту директорию копируются ассеты, файлы и сгенерированный HTML.
+
+Статьи, шаблоны и ассеты могут быть оформлены абсолютно любым образом. Скрипту
+безразлично что собирать. Пути и имена всех директорий можно переопределить в
+settings.toml.
+
+Написание постов
+================
+
+Тут всё предельно просто. Пишем файл и кладём в директорию `content`. В файле
+должны быть указаны обязательные атрибуты ``:title:`` и ``:date:``.
+
+Блог пока не умеет работать с вложенной структурой статей. Поэтому всё будет
+свалено в кучу в корневую директорию сайта.
+
+Все статьи добавляются в список постов и отображаются на главной странице.
+
+Для того, чтобы сделать "отдельную" страницу, надо добавить атрибут
+``:not_a_post:``.
+
+================= ======= =========== ====================================
+Атрибут Тип Умолчание Описание
+================= ======= =========== ====================================
+``:title:`` Строка Заголовок статьи
+``:date:`` Дата Дата публикации, формат задаётся в
+ settings.toml
+``:not_a_post:`` Флаг для одиночных страниц
+================= ======= =========== ====================================
+
+Темы оформления
+===============
+
+Никаких готовых тем. Пишем CSS вручную. Генератору сайтов всё равно что там
+будет. От уровеня представления он никак не зависит. Так что можно писать любые
+шаблоны и стили для них.
+
+Отдельно можно задать тему для блоков кода. Список тем для Pygments с превью
+есть на странице https://pygments.org/styles/
+
+Чтобы поменять тему, например, на `default` надо выполнить команду:
+
+.. code-block:: shell
+
+ make css default
+ # или
+ pygmentize -f html -S default -a .highlight > assets/css/pygments/default.css
+
+Затем поменять значение ``theme`` в секции ``pygments`` settings.toml.
+
+.. code-block:: toml
+
+ [pygments]
+ theme = 'default'
+
+Шаблоны
+========
+
+Шаблоны можно писать какие угодно. Для этогой сайта я написал три файла.
+Приведу их без лишних строк.
+
+**base.j2**
+
+.. code-block:: html+jinja
+
+
+
+
+
+
+
+
+
+
+ {{ page_title }} | {{ site_title }}
+
+
+
+
+
+
+ {% block content %}{% endblock %}
+
+
+
+
+
+
+**post.j2**
+
+.. code-block:: html+jinja
+
+ {% extends "base.j2" %}
+ {% block content %}
+
+
+ {{ post | safe }}
+
+
+ {% endblock %}
+
+**index.j2**
+
+.. code-block:: html+jinja
+
+ {% extends "base.j2" %}
+ {% block content %}
+
+
+
+ {% for post in posts %}
+
+ {{ post['title'] }}
+ — {{ post['date'] }}
+
+ {% endfor %}
+
+
+
+ {% endblock %}
+
+settings.toml
+=============
+
+Сначала я хотел использовать обычный INI, но мне нужно было получать из конфига
+словарь. Немного подумал и выбрал TOML. Он отлично сериализируется в словарь,
+визуально повторяет INI.
+
+**settings.toml** разделён на несколько секций.
+
+site
+ Данные касающиеся непосредственно сайта.
+
+ title
+ Название сайта
+
+ index_page_title
+ Заголовок главной страницы. Для всех остальных страниц заголовок
+ берётся из атрибута.
+
+ datatime_format
+ Формат даты для атрибута ``:date:``.
+
+build
+ Параметры, используетмые при сборке.
+
+ build_dir
+ Директория, куда будет сохранён собранный сайт.
+
+ content_dir
+ Директория с исходниками статей.
+
+ templates_dir
+ Директория с шаблонами Jinja2.
+
+ assets_dir
+ Директория с ассетами.
+
+pygments
+ Параметры подсветки синтаксиса в блоках кода.
+
+ theme
+ Стиль Pygments.
+
+docutils
+ Конфигурация для docutils. Здесь можно указать любые параметры, которые
+ есть здесь: https://docutils.sourceforge.io/docs/user/config.html
+
+ Мне достаточно:
+
+ .. code-block:: toml
+
+ [docutils]
+ initial_header_level = 2
+ section_self_link = true
+ syntax_highlight = 'short'
+
+Что ещё хочется сделать
+=======================
+
+В перспективе я планирую добавить следующие фичи.
+
+- RSS
+- OpenGraph
+- Webmention
+- Расширить возможности rST до уровня Sphinx
+- Улучшить CSS
+- Комментарии
+- Кастомный лейаут для отдельных статей
+- Поддержка вложенной структуры статей
+
+.. * https://jinja.palletsprojects.com/en/3.0.x/templates/
+ * https://docutils.sourceforge.io/docs/user/config.html
+
diff --git a/content/todo_text_markup.rst b/content/todo_text_markup.rst
new file mode 100644
index 0000000..a502f60
--- /dev/null
+++ b/content/todo_text_markup.rst
@@ -0,0 +1,43 @@
+:title: Менеджер задач в текстовом файле
+:date: 2 Sep 2021
+
+================================
+Менеджер задач в текстовом файле
+================================
+
+Кажется, я нашёл почти идеальную формулу для ведения списка задач. По сути я
+придумал новый формат разметки текста, специализированный для списков задач.
+Придумать для него название оказалось тяжело. Приложение Todo это второе по
+популярности приложение после Hello World и все хорошие названия уже давно
+заняты. Поэтому пусть будет просто **.todo**.
+
+Синтаксис выглядит таким образом
+
+.. code-block:: text
+
+ - Uncompleted task (light blue)
+ + Completed task (green)
+ x Rejected task (red)
+ # Comment
+ \Marked text (yellow background)\
+ `Code (magenta)`
+ Plain text
+
+.. image:: https://i.nxhs.cloud/MQ9.png
+
+Да, это все элементы синтаксиса. Предельно просто.
+
+Какие есть возможности (сравниваю с тем, что предлагают обычные
+todo-приложения):
+
+- Не нужно устанавливать никакого дополнительного ПО или каждый раз открывать
+ громоздкий веб-интерфейс. Всё что надо это текстовый редактор. В моём случае
+ идеально подошёл **vim**. Написал для него `скрипт для подсветки синтаксиса`_.
+ При желании можно написать подсветку для других редакторов.
+- Текстовая заметка и задача это одна сущность — один файл.
+- Всё управление полностью с клавиатуры.
+- Полная свобода включать в файл что угодно. Разумеется, текст, это не
+ специальный формат для встраивания изображений или других файлов, но можно
+ использовать элементы Markdown.
+
+.. _скрипт для подсветки синтаксиса: https://git.nxhs.cloud/ge/todolist-syntax
diff --git a/layouts/base.j2 b/layouts/base.j2
new file mode 100644
index 0000000..736e35d
--- /dev/null
+++ b/layouts/base.j2
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ page_title }} | {{ site_title }}
+
+
+
+
+
+ {% block content %}{% endblock %}
+
+
+
+ - - -
+
+
+ home |
+ projects |
+ code |
+ knowledge base |
+ writing |
+ my ip
+
+ About
+
+ Ещё один сайт про cисадмиство и программирование.
+ Пишу про софт, GNU/Linux и на смежные айтишные темы.
+
+
+ Copyright © 2021-2022 Материалы и исходные коды программ, представленные
+ на этом сайте, если не указано иное, распространяются по лицензии
+ CC0 1.0 .
+ Вы можете свободно копировать и использовать их.
+
+
+
+
+
diff --git a/layouts/index.j2 b/layouts/index.j2
new file mode 100644
index 0000000..cc80e60
--- /dev/null
+++ b/layouts/index.j2
@@ -0,0 +1,15 @@
+{% extends "base.j2" %}
+{% block content %}
+
+
+
+ {% for post in posts %}
+
+ {{post['title'] }}
+ — {{ post['date'] }}
+
+ {% endfor %}
+
+
+
+{% endblock %}
diff --git a/layouts/post.j2 b/layouts/post.j2
new file mode 100644
index 0000000..2eacd81
--- /dev/null
+++ b/layouts/post.j2
@@ -0,0 +1,8 @@
+{% extends "base.j2" %}
+{% block content %}
+
+
+ {{ post | safe }}
+
+
+{% endblock %}