summaryrefslogtreecommitdiff
path: root/source/infra
diff options
context:
space:
mode:
Diffstat (limited to 'source/infra')
-rw-r--r--source/infra/css/katex.min.css1
-rw-r--r--source/infra/css/main.css99
-rw-r--r--source/infra/css/syntax.css147
-rw-r--r--source/infra/font/KaTeX_AMS-Regular.ttfbin0 -> 63632 bytes
-rw-r--r--source/infra/font/KaTeX_AMS-Regular.woffbin0 -> 33516 bytes
-rw-r--r--source/infra/font/KaTeX_AMS-Regular.woff2bin0 -> 28076 bytes
-rw-r--r--source/infra/font/KaTeX_Caligraphic-Bold.ttfbin0 -> 12368 bytes
-rw-r--r--source/infra/font/KaTeX_Caligraphic-Bold.woffbin0 -> 7716 bytes
-rw-r--r--source/infra/font/KaTeX_Caligraphic-Bold.woff2bin0 -> 6912 bytes
-rw-r--r--source/infra/font/KaTeX_Caligraphic-Regular.ttfbin0 -> 12344 bytes
-rw-r--r--source/infra/font/KaTeX_Caligraphic-Regular.woffbin0 -> 7656 bytes
-rw-r--r--source/infra/font/KaTeX_Caligraphic-Regular.woff2bin0 -> 6908 bytes
-rw-r--r--source/infra/font/KaTeX_Fraktur-Bold.ttfbin0 -> 19584 bytes
-rw-r--r--source/infra/font/KaTeX_Fraktur-Bold.woffbin0 -> 13296 bytes
-rw-r--r--source/infra/font/KaTeX_Fraktur-Bold.woff2bin0 -> 11348 bytes
-rw-r--r--source/infra/font/KaTeX_Fraktur-Regular.ttfbin0 -> 19572 bytes
-rw-r--r--source/infra/font/KaTeX_Fraktur-Regular.woffbin0 -> 13208 bytes
-rw-r--r--source/infra/font/KaTeX_Fraktur-Regular.woff2bin0 -> 11316 bytes
-rw-r--r--source/infra/font/KaTeX_Main-Bold.ttfbin0 -> 51336 bytes
-rw-r--r--source/infra/font/KaTeX_Main-Bold.woffbin0 -> 29912 bytes
-rw-r--r--source/infra/font/KaTeX_Main-Bold.woff2bin0 -> 25324 bytes
-rw-r--r--source/infra/font/KaTeX_Main-BoldItalic.ttfbin0 -> 32968 bytes
-rw-r--r--source/infra/font/KaTeX_Main-BoldItalic.woffbin0 -> 19412 bytes
-rw-r--r--source/infra/font/KaTeX_Main-BoldItalic.woff2bin0 -> 16780 bytes
-rw-r--r--source/infra/font/KaTeX_Main-Italic.ttfbin0 -> 33580 bytes
-rw-r--r--source/infra/font/KaTeX_Main-Italic.woffbin0 -> 19676 bytes
-rw-r--r--source/infra/font/KaTeX_Main-Italic.woff2bin0 -> 16988 bytes
-rw-r--r--source/infra/font/KaTeX_Main-Regular.ttfbin0 -> 53580 bytes
-rw-r--r--source/infra/font/KaTeX_Main-Regular.woffbin0 -> 30772 bytes
-rw-r--r--source/infra/font/KaTeX_Main-Regular.woff2bin0 -> 26272 bytes
-rw-r--r--source/infra/font/KaTeX_Math-BoldItalic.ttfbin0 -> 31196 bytes
-rw-r--r--source/infra/font/KaTeX_Math-BoldItalic.woffbin0 -> 18668 bytes
-rw-r--r--source/infra/font/KaTeX_Math-BoldItalic.woff2bin0 -> 16400 bytes
-rw-r--r--source/infra/font/KaTeX_Math-Italic.ttfbin0 -> 31308 bytes
-rw-r--r--source/infra/font/KaTeX_Math-Italic.woffbin0 -> 18748 bytes
-rw-r--r--source/infra/font/KaTeX_Math-Italic.woff2bin0 -> 16440 bytes
-rw-r--r--source/infra/font/KaTeX_SansSerif-Bold.ttfbin0 -> 24504 bytes
-rw-r--r--source/infra/font/KaTeX_SansSerif-Bold.woffbin0 -> 14408 bytes
-rw-r--r--source/infra/font/KaTeX_SansSerif-Bold.woff2bin0 -> 12216 bytes
-rw-r--r--source/infra/font/KaTeX_SansSerif-Italic.ttfbin0 -> 22364 bytes
-rw-r--r--source/infra/font/KaTeX_SansSerif-Italic.woffbin0 -> 14112 bytes
-rw-r--r--source/infra/font/KaTeX_SansSerif-Italic.woff2bin0 -> 12028 bytes
-rw-r--r--source/infra/font/KaTeX_SansSerif-Regular.ttfbin0 -> 19436 bytes
-rw-r--r--source/infra/font/KaTeX_SansSerif-Regular.woffbin0 -> 12316 bytes
-rw-r--r--source/infra/font/KaTeX_SansSerif-Regular.woff2bin0 -> 10344 bytes
-rw-r--r--source/infra/font/KaTeX_Script-Regular.ttfbin0 -> 16648 bytes
-rw-r--r--source/infra/font/KaTeX_Script-Regular.woffbin0 -> 10588 bytes
-rw-r--r--source/infra/font/KaTeX_Script-Regular.woff2bin0 -> 9644 bytes
-rw-r--r--source/infra/font/KaTeX_Size1-Regular.ttfbin0 -> 12228 bytes
-rw-r--r--source/infra/font/KaTeX_Size1-Regular.woffbin0 -> 6496 bytes
-rw-r--r--source/infra/font/KaTeX_Size1-Regular.woff2bin0 -> 5468 bytes
-rw-r--r--source/infra/font/KaTeX_Size2-Regular.ttfbin0 -> 11508 bytes
-rw-r--r--source/infra/font/KaTeX_Size2-Regular.woffbin0 -> 6188 bytes
-rw-r--r--source/infra/font/KaTeX_Size2-Regular.woff2bin0 -> 5208 bytes
-rw-r--r--source/infra/font/KaTeX_Size3-Regular.ttfbin0 -> 7588 bytes
-rw-r--r--source/infra/font/KaTeX_Size3-Regular.woffbin0 -> 4420 bytes
-rw-r--r--source/infra/font/KaTeX_Size3-Regular.woff2bin0 -> 3624 bytes
-rw-r--r--source/infra/font/KaTeX_Size4-Regular.ttfbin0 -> 10364 bytes
-rw-r--r--source/infra/font/KaTeX_Size4-Regular.woffbin0 -> 5980 bytes
-rw-r--r--source/infra/font/KaTeX_Size4-Regular.woff2bin0 -> 4928 bytes
-rw-r--r--source/infra/font/KaTeX_Typewriter-Regular.ttfbin0 -> 27556 bytes
-rw-r--r--source/infra/font/KaTeX_Typewriter-Regular.woffbin0 -> 16028 bytes
-rw-r--r--source/infra/font/KaTeX_Typewriter-Regular.woff2bin0 -> 13568 bytes
-rw-r--r--source/infra/image/favicon.icobin0 -> 2494 bytes
-rw-r--r--source/infra/image/logo256.pngbin0 -> 7152 bytes
-rw-r--r--source/infra/image/logo96x64.gifbin0 -> 467 bytes
-rw-r--r--source/infra/js/katex.min.js1
67 files changed, 248 insertions, 0 deletions
diff --git a/source/infra/css/katex.min.css b/source/infra/css/katex.min.css
new file mode 100644
index 0000000..6281a70
--- /dev/null
+++ b/source/infra/css/katex.min.css
@@ -0,0 +1 @@
+@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(/infra/font/KaTeX_AMS-Regular.woff2) format("woff2"),url(/infra/font/KaTeX_AMS-Regular.woff) format("woff"),url(/infra/font/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(/infra/font/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(/infra/font/KaTeX_Caligraphic-Bold.woff) format("woff"),url(/infra/font/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(/infra/font/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(/infra/font/KaTeX_Caligraphic-Regular.woff) format("woff"),url(/infra/font/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(/infra/font/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(/infra/font/KaTeX_Fraktur-Bold.woff) format("woff"),url(/infra/font/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(/infra/font/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(/infra/font/KaTeX_Fraktur-Regular.woff) format("woff"),url(/infra/font/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(/infra/font/KaTeX_Main-Bold.woff2) format("woff2"),url(/infra/font/KaTeX_Main-Bold.woff) format("woff"),url(/infra/font/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(/infra/font/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(/infra/font/KaTeX_Main-BoldItalic.woff) format("woff"),url(/infra/font/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(/infra/font/KaTeX_Main-Italic.woff2) format("woff2"),url(/infra/font/KaTeX_Main-Italic.woff) format("woff"),url(/infra/font/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(/infra/font/KaTeX_Main-Regular.woff2) format("woff2"),url(/infra/font/KaTeX_Main-Regular.woff) format("woff"),url(/infra/font/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(/infra/font/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(/infra/font/KaTeX_Math-BoldItalic.woff) format("woff"),url(/infra/font/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(/infra/font/KaTeX_Math-Italic.woff2) format("woff2"),url(/infra/font/KaTeX_Math-Italic.woff) format("woff"),url(/infra/font/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(/infra/font/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(/infra/font/KaTeX_SansSerif-Bold.woff) format("woff"),url(/infra/font/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(/infra/font/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(/infra/font/KaTeX_SansSerif-Italic.woff) format("woff"),url(/infra/font/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(/infra/font/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(/infra/font/KaTeX_SansSerif-Regular.woff) format("woff"),url(/infra/font/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(/infra/font/KaTeX_Script-Regular.woff2) format("woff2"),url(/infra/font/KaTeX_Script-Regular.woff) format("woff"),url(/infra/font/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(/infra/font/KaTeX_Size1-Regular.woff2) format("woff2"),url(/infra/font/KaTeX_Size1-Regular.woff) format("woff"),url(/infra/font/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(/infra/font/KaTeX_Size2-Regular.woff2) format("woff2"),url(/infra/font/KaTeX_Size2-Regular.woff) format("woff"),url(/infra/font/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(/infra/font/KaTeX_Size3-Regular.woff2) format("woff2"),url(/infra/font/KaTeX_Size3-Regular.woff) format("woff"),url(/infra/font/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(/infra/font/KaTeX_Size4-Regular.woff2) format("woff2"),url(/infra/font/KaTeX_Size4-Regular.woff) format("woff"),url(/infra/font/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(/infra/font/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(/infra/font/KaTeX_Typewriter-Regular.woff) format("woff"),url(/infra/font/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{text-rendering:auto;font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.2"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}
diff --git a/source/infra/css/main.css b/source/infra/css/main.css
new file mode 100644
index 0000000..5127873
--- /dev/null
+++ b/source/infra/css/main.css
@@ -0,0 +1,99 @@
+/* Colour scheme */
+:root {
+ --b: #ededed;
+ --f: #121212;
+ --a: #0000ff;
+}
+.darkinv {}
+@media only screen and (prefers-color-scheme: dark) {
+ :root {
+ --b: #121212;
+ --f: #ededed;
+ --a: #ffff00;
+ }
+ .darkinv {filter: invert(100%)}
+}
+
+/* Basic elements */
+body {
+ background: #ededed;
+ background: var(--b);
+ color: #121212;
+ color: var(--f);
+
+ max-width: 80ch;
+ margin: auto;
+ padding: 1rem 0;
+
+ font-family: sans-serif;
+ line-height: 1.5;
+}
+h1,h2,h3 {text-align: center;}
+h1 {font-size: 2.0rem;}
+h2 {font-size: 1.6rem;}
+h3 {font-size: 1.2rem;}
+a {
+ text-decoration: none;
+ color: #0000ff;
+ color: var(--a);
+}
+img {
+ display: block;
+ max-width: 100%;
+ height: auto;
+ margin: auto;
+}
+
+/* Header and footer */
+.nav {
+ height: 3rem;
+ font-size: 2.4rem;
+ padding: 0.25rem 0;
+}
+.navl {
+ float: left;
+ text-align: left;
+}
+.navr {
+ float: right;
+ text-align: right;
+}
+.footl {
+ float: left;
+ text-align: left;
+}
+.footr {
+ float: right;
+ text-align: right;
+}
+@media only screen and (max-width: 72ch) {
+ .navl, .footl, .footr {width: 100%;}
+ .navr {
+ width: 100%;
+ font-size: 1.8rem;
+ }
+}
+.noha a:link, .noha a:visited {
+ color: #121212;
+ color: var(--f);
+}
+.noha a:hover, .noha a:focus, .noha a:active {
+ color: #0000ff;
+ color: var(--a);
+}
+
+/* Collapsible boxes */
+label {
+ color: #0000ff;
+ color: var(--a);
+ cursor: pointer;
+}
+.accordion {
+ display: block;
+ padding: 0.3rem 0.5rem;
+ border-style: dotted;
+}
+input {display: none;}
+input + label + .hidden {display: none;}
+input:checked + label {display: none;}
+input:checked + label + .hidden {display: block;}
diff --git a/source/infra/css/syntax.css b/source/infra/css/syntax.css
new file mode 100644
index 0000000..8772351
--- /dev/null
+++ b/source/infra/css/syntax.css
@@ -0,0 +1,147 @@
+/* From https://github.com/brazacz/rouge-themes/blob/main/css/github.css */
+.highlight { background-color: #f8f8f8; }
+.highlight .bp { color: #999999; }
+.highlight .c { color: #999988; font-style: italic; }
+.highlight .c1 { color: #999988; font-style: italic; }
+.highlight .cd { color: #999988; font-style: italic; }
+.highlight .ch { color: #999988; font-style: italic; }
+.highlight .cm { color: #999988; font-style: italic; }
+.highlight .cp { color: #999999; font-weight: bold; }
+.highlight .cpf { color: #999988; font-style: italic; }
+.highlight .cs { color: #999999; font-weight: bold; font-style: italic; }
+.highlight .dl { color: #dd1144; }
+.highlight .err { color: #a61717; background-color: #e3d2d2; }
+.highlight .fm { color: #990000; font-weight: bold; }
+.highlight .gd { color: #000000; background-color: #ffdddd; }
+.highlight .ge { color: #000000; font-style: italic; }
+.highlight .gh { color: #999999; }
+.highlight .gi { color: #000000; background-color: #ddffdd; }
+.highlight .go { color: #888888; }
+.highlight .gp { color: #555555; }
+.highlight .gr { color: #aa0000; }
+.highlight .gs { font-weight: bold; }
+.highlight .gt { color: #aa0000; }
+.highlight .gu { color: #aaaaaa; }
+.highlight .il { color: #009999; }
+.highlight .k { color: #000000; font-weight: bold; }
+.highlight .kc { color: #000000; font-weight: bold; }
+.highlight .kd { color: #000000; font-weight: bold; }
+.highlight .kn { color: #000000; font-weight: bold; }
+.highlight .kp { color: #000000; font-weight: bold; }
+.highlight .kr { color: #000000; font-weight: bold; }
+.highlight .kt { color: #445588; font-weight: bold; }
+.highlight .kv { color: #000000; font-weight: bold; }
+.highlight .m { color: #009999; }
+.highlight .mb { color: #009999; }
+.highlight .mf { color: #009999; }
+.highlight .mh { color: #009999; }
+.highlight .mi { color: #009999; }
+.highlight .mo { color: #009999; }
+.highlight .mx { color: #009999; }
+.highlight .na { color: #008080; }
+.highlight .nb { color: #0086B3; }
+.highlight .nc { color: #445588; font-weight: bold; }
+.highlight .nd { color: #3c5d5d; font-weight: bold; }
+.highlight .ne { color: #990000; font-weight: bold; }
+.highlight .nf { color: #990000; font-weight: bold; }
+.highlight .ni { color: #800080; }
+.highlight .nl { color: #990000; font-weight: bold; }
+.highlight .nn { color: #555555; }
+.highlight .no { color: #008080; }
+.highlight .nt { color: #000080; }
+.highlight .nv { color: #008080; }
+.highlight .o { color: #000000; font-weight: bold; }
+.highlight .ow { color: #000000; font-weight: bold; }
+.highlight .s { color: #dd1144; }
+.highlight .s1 { color: #dd1144; }
+.highlight .s2 { color: #dd1144; }
+.highlight .sa { color: #000000; font-weight: bold; }
+.highlight .sb { color: #dd1144; }
+.highlight .sc { color: #dd1144; }
+.highlight .sd { color: #dd1144; }
+.highlight .se { color: #dd1144; }
+.highlight .sh { color: #dd1144; }
+.highlight .si { color: #dd1144; }
+.highlight .sr { color: #009926; }
+.highlight .ss { color: #990073; }
+.highlight .sx { color: #dd1144; }
+.highlight .vc { color: #008080; }
+.highlight .vg { color: #008080; }
+.highlight .vi { color: #008080; }
+.highlight .vm { color: #008080; }
+.highlight .w { color: #bbbbbb; }
+
+@media only screen and (prefers-color-scheme: dark) {
+/* From https://github.com/numist/highlight-css/blob/main/Pygments/github-dark.css */
+.highlight { background-color: #0d1117; }
+.highlight .bp { color: #c9d1d9; } /* Name.Builtin.Pseudo */
+.highlight .c { color: #8b949e; font-style: italic; } /* Comment */
+.highlight .c1 { color: #8b949e; font-style: italic; } /* Comment.Single */
+.highlight .cd { color: #8b949e; font-style: italic; } /* ? */
+.highlight .ch { color: #8b949e; font-style: italic; } /* Comment.Hashbang */
+.highlight .cm { color: #8b949e; font-style: italic; } /* Comment.Multiline */
+.highlight .cp { color: #8b949e; font-weight: bold; font-style: italic; } /* Comment.Preproc */
+.highlight .cpf { color: #8b949e; font-style: italic; } /* Comment.PreprocFile */
+.highlight .cs { color: #8b949e; font-weight: bold; font-style: italic; } /* Comment.Special */
+.highlight .dl { color: #79c0ff; } /* Literal.String.Delimiter */
+.highlight .err { color: #f85149; } /* Error */
+.highlight .fm { color: #d2a8ff; font-weight: bold; } /* Name.Function.Magic */
+.highlight .gd { color: #ffa198; background-color: #490202; } /* Generic.Deleted */
+.highlight .ge { color: #c9d1d9; font-style: italic; } /* Generic.Emph */
+.highlight .gh { color: #79c0ff; font-weight: bold; } /* Generic.Heading */
+.highlight .gi { color: #56d364; background-color: #0f5323; } /* Generic.Inserted */
+.highlight .go { color: #8b949e; } /* Generic.Output */
+.highlight .gp { color: #8b949e; } /* Generic.Prompt */
+.highlight .gr { color: #ffa198; } /* Generic.Error */
+.highlight .gs { font-weight: bold; } /* Generic.Strong */
+.highlight .gt { color: #ff7b72; } /* Generic.Traceback */
+.highlight .gu { color: #79c0ff; } /* Generic.Subheading */
+.highlight .il { color: #a5d6ff; } /* Literal.Number.Integer.Long */
+.highlight .k { color: #ff7b72; } /* Keyword */
+.highlight .kc { color: #79c0ff; } /* Keyword.Constant */
+.highlight .kd { color: #ff7b72; } /* Keyword.Declaration */
+.highlight .kn { color: #ff7b72; } /* Keyword.Namespace */
+.highlight .kp { color: #79c0ff; } /* Keyword.Pseudo */
+.highlight .kr { color: #ff7b72; } /* Keyword.Reserved */
+.highlight .kt { color: #ff7b72; } /* Keyword.Type */
+.highlight .kv { color: #ff7b72; } /* ? */
+.highlight .m { color: #a5d6ff; } /* Literal.Number */
+.highlight .mb { color: #a5d6ff; } /* Literal.Number.Bin */
+.highlight .mf { color: #a5d6ff; } /* Literal.Number.Float */
+.highlight .mh { color: #a5d6ff; } /* Literal.Number.Hex */
+.highlight .mi { color: #a5d6ff; } /* Literal.Number.Integer */
+.highlight .mo { color: #a5d6ff; } /* Literal.Number.Oct */
+.highlight .mx { color: #a5d6ff; } /* ? */
+.highlight .na { color: #c9d1d9; } /* Name.Attribute */
+.highlight .nb { color: #c9d1d9; } /* Name.Builtin */
+.highlight .nc { color: #f0883e; font-weight: bold; } /* Name.Class */
+.highlight .nd { color: #d2a8ff; font-weight: bold; } /* Name.Decorator */
+.highlight .ne { color: #f0883e; font-weight: bold; } /* Name.Exception */
+.highlight .nf { color: #d2a8ff; font-weight: bold; } /* Name.Function */
+.highlight .ni { color: #ffa657; } /* Name.Entity */
+.highlight .nl { color: #79c0ff; font-weight: bold; } /* Name.Label */
+.highlight .nn { color: #ff7b72; } /* Name.Namespace */
+.highlight .no { color: #79c0ff; font-weight: bold; } /* Name.Constant */
+.highlight .nt { color: #7ee787; } /* Name.Tag */
+.highlight .nv { color: #79c0ff; } /* Name.Variable */
+.highlight .o { color: #ff7b72; font-weight: bold; } /* Operator */
+.highlight .ow { color: #ff7b72; font-weight: bold; } /* Operator.Word */
+.highlight .s { color: #a5d6ff; } /* Literal.String */
+.highlight .s1 { color: #a5d6ff; } /* Literal.String.Single */
+.highlight .s2 { color: #a5d6ff; } /* Literal.String.Double */
+.highlight .sa { color: #79c0ff; } /* Literal.String.Affix */
+.highlight .sb { color: #a5d6ff; } /* Literal.String.Backtick */
+.highlight .sc { color: #a5d6ff; } /* Literal.String.Char */
+.highlight .sd { color: #a5d6ff; } /* Literal.String.Doc */
+.highlight .se { color: #79c0ff; } /* Literal.String.Escape */
+.highlight .sh { color: #79c0ff; } /* Literal.String.Heredoc */
+.highlight .si { color: #a5d6ff; } /* Literal.String.Interpol */
+.highlight .sr { color: #79c0ff; } /* Literal.String.Regex */
+.highlight .ss { color: #a5d6ff; } /* Literal.String.Symbol */
+.highlight .sx { color: #a5d6ff; } /* Literal.String.Other */
+.highlight .vc { color: #79c0ff; } /* Name.Variable.Class */
+.highlight .vg { color: #79c0ff; } /* Name.Variable.Global */
+.highlight .vi { color: #79c0ff; } /* Name.Variable.Instance */
+.highlight .vm { color: #79c0ff; } /* Name.Variable.Magic */
+.highlight .w { color: #6e7681; } /* Text.Whitespace */
+}
diff --git a/source/infra/font/KaTeX_AMS-Regular.ttf b/source/infra/font/KaTeX_AMS-Regular.ttf
new file mode 100644
index 0000000..c6f9a5e
--- /dev/null
+++ b/source/infra/font/KaTeX_AMS-Regular.t