summaryrefslogtreecommitdiffstats
path: root/docs/static
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--docs/static/docs.css413
-rw-r--r--docs/static/favicon.icobin0 -> 3481 bytes
-rw-r--r--docs/static/fonts/karla-bold-ext.woff2bin0 -> 11716 bytes
-rw-r--r--docs/static/fonts/karla-bold.woff2bin0 -> 24364 bytes
-rw-r--r--docs/static/fonts/karla-regular-.woff2bin0 -> 24364 bytes
-rw-r--r--docs/static/fonts/karla-regular-ext.woff2bin0 -> 11716 bytes
-rw-r--r--docs/static/fonts/material-symbols-rounded.woff2bin0 -> 499336 bytes
-rw-r--r--docs/static/img/anatomy-en.pngbin0 -> 242248 bytes
-rw-r--r--docs/static/img/anatomy-en.svg347
-rw-r--r--docs/static/img/anatomy-es.svg288
-rw-r--r--docs/static/img/anchors.pngbin0 -> 31908 bytes
-rw-r--r--docs/static/img/apple-touch-icon.pngbin0 -> 1156 bytes
-rw-r--r--docs/static/img/composable.svg3
-rw-r--r--docs/static/img/encapsulated.svg3
-rw-r--r--docs/static/img/favicon.pngbin0 -> 2785 bytes
-rw-r--r--docs/static/img/favicon.svg7
-rw-r--r--docs/static/img/jinjax-logo-w.pngbin0 -> 10048 bytes
-rw-r--r--docs/static/img/jinjax-logo-w.svg1
-rw-r--r--docs/static/img/jinjax-logo.pngbin0 -> 9300 bytes
-rw-r--r--docs/static/img/jinjax-logo.svg1
-rw-r--r--docs/static/img/logo.pngbin0 -> 2485 bytes
-rw-r--r--docs/static/img/logo.svg9
-rw-r--r--docs/static/img/modern.svg8
-rw-r--r--docs/static/img/practical.svg3
-rw-r--r--docs/static/img/simple.svg3
-rw-r--r--docs/static/img/slots-_slot.pngbin0 -> 316281 bytes
-rw-r--r--docs/static/img/slots-diagram.pngbin0 -> 93431 bytes
-rw-r--r--docs/static/img/spaghetti_code.pngbin0 -> 189680 bytes
-rw-r--r--docs/static/img/ui-accordion.pngbin0 -> 161561 bytes
-rw-r--r--docs/static/img/ui-linkedlist.pngbin0 -> 234533 bytes
-rw-r--r--docs/static/img/ui-menu.pngbin0 -> 197852 bytes
-rw-r--r--docs/static/img/ui-popover.pngbin0 -> 191576 bytes
-rw-r--r--docs/static/img/ui-reldate.pngbin0 -> 48315 bytes
-rw-r--r--docs/static/img/ui-tabs.pngbin0 -> 171052 bytes
-rw-r--r--docs/static/prose.css637
-rw-r--r--docs/static/theme.css1808
36 files changed, 3531 insertions, 0 deletions
diff --git a/docs/static/docs.css b/docs/static/docs.css
new file mode 100644
index 0000000..30c9898
--- /dev/null
+++ b/docs/static/docs.css
@@ -0,0 +1,413 @@
+.bg-cover {
+ position: absolute;
+ z-index: -1;
+ inset: 0;
+}
+
+.Logo {
+ display: flex;
+ height: 2.5rem;
+ align-items: center;
+ color: rgb(24 24 27);
+ opacity: 0.9;
+
+ &:hover {
+ opacity: 1;
+ }
+ & img.light {
+ display: block;
+ }
+ & img.dark {
+ display: none;
+ }
+ &:is(.dark *) img.light {
+ display: none;
+ }
+ &:is(.dark *) img.dark {
+ display: block;
+ }
+}
+
+.NavLinks {
+ & a {
+ padding: 0.25rem;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ color: rgb(82 82 91);
+ }
+ & a:hover {
+ color: rgb(24 24 27);
+ }
+
+ & a:is(.dark *) {
+ color: rgb(212 212 216);
+ }
+ & a:is(.dark *):hover {
+ color: rgb(255 255 255);
+ }
+}
+
+.homepage {
+ padding-top: 0;
+ padding-bottom: 0;
+ padding-left: var(--cd-padding-left);
+ padding-right: var(--cd-padding-right);
+}
+.homepage section.hero {
+ margin-left: auto;
+ margin-right: auto;
+ display: flex;
+ max-width: 56rem;
+ flex-direction: column;
+ padding-top: 2.25rem;
+ padding-bottom: 2.25rem;
+ color: rgb(23 23 23);
+
+ &:is(.dark *) {
+ color: rgb(245 245 245);
+ }
+
+ & h1 {
+ margin: 0 auto;
+ width: 300px;
+ height: 140px;
+ background-image: url("/static/img/jinjax-logo.svg");
+ background-position: center center;
+ background-repeat: no-repeat;
+ background-size: contain;
+ text-indent: -999px;
+ display: none;
+ }
+
+ & h2 {
+ font-size: 2.2rem;
+ font-weight: 600;
+ line-height: 1.2;
+ letter-spacing: -0.05em;
+ }
+ & h2 .g1 {
+ background-image: linear-gradient(to bottom right, #fbbf24, #fb923c);
+ background-clip: text;
+ color: transparent;
+ }
+
+ & h2 .g2 {
+ background-image: linear-gradient(to bottom right, #34d399, #3b82f6);
+ background-clip: text;
+ color: transparent;
+ }
+
+ @media (min-width: 768px) {
+ & {
+ padding-top: 2.5rem;
+ padding-bottom: 3rem;
+ }
+ & h1 {
+ display: block;
+ width: 300px;
+ height: 100px;
+ }
+ & h2 {
+ font-size: 2.4rem;
+ text-align: center;
+ }
+ & h2 .g2 {
+ white-space: nowrap;
+ }
+ }
+
+ @media (min-width: 1024px) {
+ & h1 {
+ width: 400px;
+ height: 140px;
+ }
+ & h2 {
+ font-size: 3rem;
+ }
+ }
+}
+
+.homepage section.code {
+ margin-left: -1rem;
+ margin-right: -1rem;
+ max-width: 72rem;
+ border-width: 1px;
+ border-color: rgb(212 212 212);
+ background-color: rgb(231 229 228);
+ padding: 1.5rem 0;
+
+ &:is(.dark *) {
+ border-color: rgb(82 82 82);
+ background-color: rgb(41 37 36);
+ }
+
+ & .panel {
+ display: flex;
+ flex-direction: column;
+ }
+ & .panel ~ .panel {
+ margin-top: 1.5rem;
+ }
+ & h2 {
+ margin-bottom: 0.5rem;
+ text-align: center;
+ font-size: 1.5rem;
+ line-height: 1.1;
+ font-weight: 700;
+ }
+ & .highlight {
+ flex-grow: 1;
+ }
+ & pre {
+ height: 100%;
+ }
+
+ @media (min-width: 1024px) {
+ & {
+ border-radius: 1rem;
+ padding: 1.5rem;
+ margin-bottom: 2.5rem;
+ margin-left: auto;
+ margin-right: auto;
+ }
+ & .stack {
+ display: flex;
+ align-items: stretch;
+ }
+ & .panel {
+ width: 50%;
+ }
+ & .panel ~ .panel {
+ margin-top: 0;
+ margin-left: 0.5rem;
+ }
+ }
+}
+
+.homepage section.features {
+ margin-left: auto;
+ margin-right: auto;
+ max-width: 56rem;
+ padding-top: 2rem;
+ padding-bottom: 2rem;
+
+ & h2 {
+ margin-bottom: 2rem;
+ text-align: center;
+ font-size: 2.2rem;
+ line-height: 1.2;
+ font-weight: 800;
+ }
+ & h2 code {
+ font-size: 0.9em;
+ }
+ & .cards {
+ margin-top: 2.5rem;
+ display: grid;
+ grid-template-columns: repeat(1, minmax(0, 1fr));
+ column-gap: 1rem;
+ row-gap: 1.5rem;
+ font-size: 1rem;
+ line-height: 1.4rem;
+ }
+ & .card {
+ margin-left: auto;
+ margin-right: auto;
+ display: flex;
+ flex-direction: column;
+ height: 9rem;
+ max-width: 28rem;
+ border-radius: 1rem;
+ border-width: 2px;
+ border-color: rgb(245 245 244);
+ background-color: rgb(250 250 249);
+ padding-top: 1rem;
+ padding-bottom: 1rem;
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+ box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+ }
+ & .card:is(.dark *) {
+ border-color: rgb(41 37 36);
+ background-color: rgb(41 37 36);
+ }
+ & .card > .header {
+ margin-bottom: 0.5rem;
+ display: flex;
+ align-items: center;
+ flex-direction: row-reverse;
+ }
+ & .card > .header img {
+ float: left;
+ max-height: 32px;
+ width: 2.5rem;
+ padding-right: 0.75rem;
+ }
+ & .card > .header img:is(.dark *) {
+ filter: invert(100%)
+ }
+ & .card > .header h3 {
+ font-size: 1.4rem;
+ font-weight: 600;
+ color: rgb(24 24 27);
+ }
+ & .card > .header h3:is(.dark *) {
+ color: rgb(228 228 231);
+ }
+ & .card > .body {
+ flex-grow: 1;
+ margin-top: 0.5rem;
+ font-size: 1rem;
+ line-height: 1.4;
+ color: rgb(82 82 91);
+ }
+ & .card a {
+ font-weight: 600;
+ }
+
+ @media (min-width: 768px) {
+ & .cards {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+ & .card {
+ height: 10rem;
+ }
+ }
+
+ @media (min-width: 1280px) {
+ & {
+ max-width: 1280px;
+ }
+ & .cards {
+ grid-template-columns: repeat(4, minmax(0, 1fr));
+ }
+ & .card {
+ height: 13rem;
+ align-items: flex-start;
+ padding-top: 1.5rem;
+ padding-bottom: 1.5rem;
+ }
+ }
+}
+
+.homepage section.spaghetti {
+ margin-bottom: 1.25rem;
+ padding-left: var(--cd-padding-left);
+ padding-right: var(--cd-padding-right);
+
+ & .wrapper {
+ margin-left: auto;
+ margin-right: auto;
+ max-width: 64rem;
+ padding-left: 0.75rem;
+ padding-right: 0.75rem;
+ padding-top: 2rem;
+ padding-bottom: 2rem;
+ }
+
+ & h2 {
+ margin-bottom: 2rem;
+ text-align: center;
+ font-size: 2.2rem;
+ line-height: 1.2;
+ font-weight: 800;
+ }
+
+ & .text {
+ position: relative;
+ font-size: 1.4rem;
+ line-height: 1.4;
+ }
+ & .text img {
+ position: absolute;
+ left: 0;
+ top: 0;
+ display: none;
+ height: 100%;
+ max-height: 24rem;
+ }
+ & .text p {
+ margin-bottom:1.5rem;
+ }
+
+ @media (min-width: 640px) {
+ & .wrapper {
+ padding-top: 3rem;
+ padding-bottom: 3rem;
+ }
+ }
+
+ @media (min-width: 1024px) {
+ & .wrapper {
+ max-width: 72rem;
+ }
+ & .text {
+ padding-left: 440px;
+ }
+ & .text img {
+ display: block;
+ }
+ }
+}
+
+.homepage section.engage {
+ background-image: linear-gradient(to bottom, #d6d3d1, #e7e5e4, #a8a29e);
+ margin-left: -1rem;
+ margin-right: -1rem;
+
+ &:is(.dark *) {
+ background-image: linear-gradient(to bottom, #000, #1c1917);
+ }
+
+ & .wrapper {
+ padding-top: 3rem;
+ padding-bottom: 3rem;
+ text-align: center;
+ }
+
+ & h3 {
+ margin-bottom: 2rem;
+ text-align: center;
+ font-size: 1.875rem;
+ line-height: 1.4;
+ font-weight: 800;
+ }
+
+ & a {
+ display: flex-inline;
+ align-items: center;
+ justify-content: center;
+ margin-left: auto;
+ margin-right: auto;
+ margin-bottom: 1.25rem;
+ display: inline-block;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ border-radius: 1rem;
+ background-image: linear-gradient(to top right, #a3e635, #65a30d);
+ padding: 1rem 2rem;
+ text-align: center;
+ font-family: var(--cd-font-sans);
+ font-size: 1.25rem;
+ line-height: 1.75rem;
+ font-weight: 700;
+ color: rgb(39 39 42);
+ text-decoration-line: none;
+ box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
+ }
+ & a:hover {
+ background-image: linear-gradient(to top right, #a3e635, #a3e635);
+ color: rgb(0 0 0);
+ }
+ & a i {
+ font-style: normal;
+ font-size: 1.2rem;
+ }
+
+ & .hint {
+ font-size: 0.75rem;
+ line-height: 1rem;
+ }
+} \ No newline at end of file
diff --git a/docs/static/favicon.ico b/docs/static/favicon.ico
new file mode 100644
index 0000000..3615f29
--- /dev/null
+++ b/docs/static/favicon.ico
Binary files differ
diff --git a/docs/static/fonts/karla-bold-ext.woff2 b/docs/static/fonts/karla-bold-ext.woff2
new file mode 100644
index 0000000..88c185a
--- /dev/null
+++ b/docs/static/fonts/karla-bold-ext.woff2
Binary files differ
diff --git a/docs/static/fonts/karla-bold.woff2 b/docs/static/fonts/karla-bold.woff2
new file mode 100644
index 0000000..244e69d
--- /dev/null
+++ b/docs/static/fonts/karla-bold.woff2
Binary files differ
diff --git a/docs/static/fonts/karla-regular-.woff2 b/docs/static/fonts/karla-regular-.woff2
new file mode 100644
index 0000000..244e69d
--- /dev/null
+++ b/docs/static/fonts/karla-regular-.woff2
Binary files differ
diff --git a/docs/static/fonts/karla-regular-ext.woff2 b/docs/static/fonts/karla-regular-ext.woff2
new file mode 100644
index 0000000..88c185a
--- /dev/null
+++ b/docs/static/fonts/karla-regular-ext.woff2
Binary files differ
diff --git a/docs/static/fonts/material-symbols-rounded.woff2 b/docs/static/fonts/material-symbols-rounded.woff2
new file mode 100644
index 0000000..0200f5e
--- /dev/null
+++ b/docs/static/fonts/material-symbols-rounded.woff2
Binary files differ
diff --git a/docs/static/img/anatomy-en.png b/docs/static/img/anatomy-en.png
new file mode 100644
index 0000000..d880437
--- /dev/null
+++ b/docs/static/img/anatomy-en.png
Binary files differ
diff --git a/docs/static/img/anatomy-en.svg b/docs/static/img/anatomy-en.svg
new file mode 100644
index 0000000..bacfb60
--- /dev/null
+++ b/docs/static/img/anatomy-en.svg
@@ -0,0 +1,347 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="420"
+ height="440"
+ version="1.1"
+ viewBox="0 0 420 440"
+ id="svg151"
+ sodipodi:docname="anatomy-en.svg"
+ inkscape:export-filename="/media/data/anatomy-en.png"
+ inkscape:export-xdpi="223.41818"
+ inkscape:export-ydpi="223.41818"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview153"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ showgrid="false"
+ inkscape:zoom="2.3136364"
+ inkscape:cx="172.45579"
+ inkscape:cy="357.66208"
+ inkscape:window-width="1280"
+ inkscape:window-height="740"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg151" />
+ <defs
+ id="defs5">
+ <marker
+ id="TriangleStart"
+ overflow="visible"
+ markerHeight="2.6867051"
+ markerWidth="2.3239999"
+ orient="auto-start-reverse"
+ preserveAspectRatio="xMidYMid"
+ viewBox="0 0 5.3244081 6.1553851">
+ <path
+ transform="scale(.6)"
+ d="m5.8 0-8.6 5v-10z"
+ fill="context-stroke"
+ fill-rule="evenodd"
+ stroke="context-stroke"
+ stroke-width="1pt"
+ id="path2" />
+ </marker>
+ </defs>
+ <rect
+ width="420"
+ height="440"
+ fill="#ffffff"
+ fill-opacity="0.85"
+ stroke="#dddddd"
+ id="rect7"
+ x="0.40752804"
+ y="1.6170791"
+ inkscape:export-filename="/home/jpsca/Code/jinjax/docs/static/img/anatomy-en.png"
+ inkscape:export-xdpi="223.418"
+ inkscape:export-ydpi="223.418" />
+ <path
+ d="m17 98h320"
+ stroke="#555"
+ stroke-width="1px"
+ id="path9"
+ inkscape:export-filename="/home/jpsca/Code/jinjax/docs/static/img/anatomy-en.png"
+ inkscape:export-xdpi="223.418"
+ inkscape:export-ydpi="223.418" />
+ <text
+ id="code"
+ fill="#444444"
+ font-family="'SF Mono', Monaco, monospace"
+ font-size="11px"
+ font-weight="bold"
+ stroke-width="1.4"
+ style="line-height:1.25;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
+ inkscape:export-filename="/home/jpsca/Code/jinjax/docs/static/img/anatomy-en.png"
+ inkscape:export-xdpi="223.418"
+ inkscape:export-ydpi="223.418"><tspan
+ sodipodi:role="line"
+ id="tspan83456"
+ x="17"
+ y="90"><tspan
+ x="17"
+ y="90"
+ font-style="italic"
+ font-weight="600"
+ id="tspan8">components/Form.jinja</tspan><tspan
+ x="17"
+ y="131"
+ id="tspan10">{#def action, label, method=&quot;post&quot; #}</tspan><tspan
+ x="17"
+ y="145"
+ id="tspan12" /></tspan><tspan
+ sodipodi:role="line"
+ id="tspan83458"
+ x="17"
+ y="103.75"><tspan
+ x="17"
+ y="145"
+ id="tspan83460" /></tspan><tspan
+ sodipodi:role="line"
+ x="17"
+ y="145"
+ id="tspan83494"><tspan
+ x="17"
+ y="145"
+ id="tspan83496">{#css form.css, /static/theme.css #}</tspan><tspan
+ x="17"
+ y="160"
+ id="tspan14">{#js form.js #}</tspan><tspan
+ x="17"
+ y="187"
+ fill="#555555"
+ id="tspan16">{% set method = method.lower() %}</tspan><tspan
+ x="17"
+ y="215"
+ fill="#3771c8"
+ id="tspan22"><tspan
+ id="tspan18">&lt;</tspan><tspan
+ id="tspan20">form</tspan></tspan><tspan
+ x="24"
+ y="229"
+ id="tspan32"><tspan
+ fill="#5f8dd3"
+ id="tspan24">method=</tspan><tspan
+ fill="#008800"
+ id="tspan26">&quot;</tspan><tspan
+ fill="#ff7f2a"
+ id="tspan28">{{ method }}</tspan><tspan
+ fill="#008800"
+ id="tspan30">&quot;</tspan></tspan><tspan
+ x="24"
+ y="244"
+ id="tspan42"><tspan
+ fill="#5f8dd3"
+ id="tspan34">action=</tspan><tspan
+ fill="#008800"
+ id="tspan36">&quot;</tspan><tspan
+ fill="#ff7f2a"
+ id="tspan38">{{ action }}</tspan><tspan
+ fill="#008800"
+ id="tspan40">&quot;</tspan></tspan><tspan
+ x="24"
+ y="257"
+ fill="#ff7f2a"
+ id="tspan46">{{ attrs.render(<tspan
+ id="tspan44">class=&quot;form&quot;</tspan>) }}</tspan><tspan
+ x="17"
+ y="272"
+ fill="#3771c8"
+ id="tspan48">&gt;</tspan><tspan
+ x="24"
+ y="286"
+ fill="#555555"
+ id="tspan50">{% if method == &quot;post&quot; -%}</tspan><tspan
+ x="24"
+ y="299"
+ fill="#3771c8"
+ id="tspan60">&lt;input <tspan
+ fill="#5f8dd3"
+ id="tspan58">type=<tspan
+ fill="#008800"
+ id="tspan52">&quot;hidden&quot;</tspan> name=<tspan
+ fill="#008800"
+ id="tspan54">&quot;csrf&quot;</tspan> value=&quot;<tspan
+ fill="#ff7f2a"
+ id="tspan56">{{token}}</tspan>&quot; /&gt;</tspan></tspan><tspan
+ x="24"
+ y="314"
+ fill="#555555"
+ id="tspan62">{% endif -%}</tspan><tspan
+ x="24"
+ y="341"
+ id="tspan66"><tspan
+ fill="#ff7f2a"
+ id="tspan64">{{ content }}</tspan></tspan><tspan
+ x="24"
+ y="370"
+ fill="#214478"
+ id="tspan72">&lt;Button :label=<tspan
+ fill="#008800"
+ id="tspan53">&quot;label&quot;</tspan> /&gt;</tspan><tspan
+ x="17"
+ y="386"
+ fill="#3771c8"
+ id="tspan76">&lt;/<tspan
+ fill="#3771c8"
+ font-weight="bold"
+ id="tspan74">form</tspan>&gt;</tspan></tspan></text>
+ <g
+ id="arrows"
+ transform="translate(0.44852325)"
+ inkscape:export-filename="/home/jpsca/Code/jinjax/docs/static/img/anatomy-en.png"
+ inkscape:export-xdpi="223.418"
+ inkscape:export-ydpi="223.418">
+ <path
+ d="m 96,49 c 13,28 24,0.84 25,24"
+ fill="none"
+ marker-end="url(#TriangleStart)"
+ stroke="#000000"
+ stroke-width="1.7"
+ id="path94" />
+ <path
+ d="m 263.05173,66.190373 c 3.21374,29.013609 -66.83732,10.210641 -66.83732,43.210637"
+ fill="none"
+ marker-end="url(#TriangleStart)"
+ stroke="#000000"
+ stroke-width="1.7"
+ id="path96"
+ sodipodi:nodetypes="cc" />
+ <path
+ d="m 299.74715,171.9951 c -24.29574,-13.93589 13.75099,-34.69573 -30.19646,-30.86252"
+ fill="none"
+ marker-end="url(#TriangleStart)"
+ stroke="#000000"
+ stroke-width="1.7"
+ id="path98"
+ sodipodi:nodetypes="cc" />
+ <path
+ d="M 299.74715,171.9951 C 282.96418,161.72557 170.13518,157.37012 132.6202,158.53979"
+ fill="none"
+ marker-end="url(#TriangleStart)"
+ stroke="#000000"
+ stroke-width="1.7"
+ id="path100"
+ sodipodi:nodetypes="cc" />
+ <path
+ d="m 169,404 c -11,-17 -39.53849,-5.19589 -47.53849,-23.49589"
+ fill="none"
+ marker-end="url(#TriangleStart)"
+ stroke="#000000"
+ stroke-width="1.7"
+ id="path102"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <text
+ style="font-size:12px;font-family:'Comic Neue'"
+ transform="matrix(0.99580394,0,0,0.99717236,22.306709,8.8220192)"
+ id="text111"
+ inkscape:export-filename="/home/jpsca/Code/jinjax/docs/static/img/anatomy-en.png"
+ inkscape:export-xdpi="223.418"
+ inkscape:export-ydpi="223.418"><tspan
+ x="0"
+ y="11"
+ id="tspan105">Everything before the </tspan><tspan
+ x="0"
+ y="30"
+ id="tspan107">first dot is the component </tspan><tspan
+ x="0"
+ y="48"
+ id="tspan109">name</tspan></text>
+ <text
+ style="font-size:12px;font-family:'Comic Neue'"
+ transform="matrix(0.99585975,0,0,0.94509234,216.62806,15.846205)"
+ id="text115"
+ inkscape:export-filename="/home/jpsca/Code/jinjax/docs/static/img/anatomy-en.png"
+ inkscape:export-xdpi="223.418"
+ inkscape:export-ydpi="223.418"><tspan
+ x="0"
+ y="6"
+ id="tspan113">Arguments definition</tspan></text>
+ <text
+ style="font-size:12px;font-family:'Comic Neue'"
+ transform="matrix(0.99962611,0,0,0.98554306,218.63043,28.835757)"
+ id="text121"
+ inkscape:export-filename="/home/jpsca/Code/jinjax/docs/static/img/anatomy-en.png"
+ inkscape:export-xdpi="223.418"
+ inkscape:export-ydpi="223.418"><tspan
+ x="0"
+ y="11"
+ id="tspan117">Arguments without a </tspan><tspan
+ x="0"
+ y="30"
+ id="tspan119">default value are required</tspan></text>
+ <text
+ style="font-size:12px;font-family:'Comic Neue';white-space:pre;inline-size:102.594"
+ transform="matrix(1.0036128,0,0,0.99557292,305.3546,154.45222)"
+ id="text127"
+ inkscape:export-filename="/home/jpsca/Code/jinjax/docs/static/img/anatomy-en.png"
+ inkscape:export-xdpi="223.418"
+ inkscape:export-ydpi="223.418"
+ xml:space="preserve"><tspan
+ x="0"
+ y="11"
+ id="tspan1018">Optional lists of </tspan><tspan
+ x="0"
+ y="26"
+ id="tspan1020">CSS and JS files</tspan></text>
+ <text
+ style="font-size:12px;font-family:'Comic Neue';white-space:pre;inline-size:138.046"
+ transform="translate(277.91845,188.39939)"
+ id="text135"
+ inkscape:export-filename="/home/jpsca/Code/jinjax/docs/static/img/anatomy-en.png"
+ inkscape:export-xdpi="223.418"
+ inkscape:export-ydpi="223.418"
+ xml:space="preserve"><tspan
+ x="0"
+ y="11"
+ id="tspan1022">Paths are absolute or </tspan><tspan
+ x="0"
+ y="26"
+ id="tspan1024">relative to the root of
+</tspan><tspan
+ x="0"
+ y="41"
+ id="tspan1026">the components folder</tspan></text>
+ <text
+ style="font-size:12px;font-family:'Comic Neue'"
+ transform="matrix(0.99764329,0,0,0.98692271,247.4097,314.31427)"
+ id="text143"
+ inkscape:export-filename="/home/jpsca/Code/jinjax/docs/static/img/anatomy-en.png"
+ inkscape:export-xdpi="223.418"
+ inkscape:export-ydpi="223.418"><tspan
+ x="0"
+ y="11"
+ id="tspan137">You can have more </tspan><tspan
+ x="0"
+ y="30"
+ id="tspan139">than one parent </tspan><tspan
+ x="0"
+ y="48"
+ id="tspan141">element, unlike React</tspan></text>
+ <text
+ style="font-size:12px;font-family:'Comic Neue';white-space:pre;inline-size:165.6"
+ transform="matrix(0.9980174,0,0,0.98858774,171.78044,387.36773)"
+ id="text149"
+ inkscape:export-filename="/home/jpsca/Code/jinjax/docs/static/img/anatomy-en.png"
+ inkscape:export-xdpi="223.418"
+ inkscape:export-ydpi="223.418"
+ xml:space="preserve"><tspan
+ x="0"
+ y="11"
+ id="tspan1028">You can call any other </tspan><tspan
+ x="0"
+ y="26"
+ id="tspan1030">component and pass attributes </tspan><tspan
+ x="0"
+ y="41"
+ id="tspan1032">to them</tspan></text>
+</svg>
diff --git a/docs/static/img/anatomy-es.svg b/docs/static/img/anatomy-es.svg
new file mode 100644
index 0000000..a3b3952
--- /dev/null
+++ b/docs/static/img/anatomy-es.svg
@@ -0,0 +1,288 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="420"
+ height="440"
+ version="1.1"
+ viewBox="0 0 420 440"
+ id="svg151"
+ sodipodi:docname="anatomy-es.svg"
+ inkscape:export-filename="/media/data/Code/jinjax-docs/static/img/anatomy-es.png"
+ inkscape:export-xdpi="223.41818"
+ inkscape:export-ydpi="223.41818"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview153"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ showgrid="false"
+ inkscape:zoom="1.1568182"
+ inkscape:cx="14.695481"
+ inkscape:cy="220.86444"
+ inkscape:window-width="2560"
+ inkscape:window-height="1357"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg151" />
+ <defs
+ id="defs5">
+ <marker
+ id="TriangleStart"
+ overflow="visible"
+ markerHeight="2.6867051"
+ markerWidth="2.3239999"
+ orient="auto-start-reverse"
+ preserveAspectRatio="xMidYMid"
+ viewBox="0 0 5.3244081 6.1553851">
+ <path
+ transform="scale(.6)"
+ d="m5.8 0-8.6 5v-10z"
+ fill="context-stroke"
+ fill-rule="evenodd"
+ stroke="context-stroke"
+ stroke-width="1pt"
+ id="path2" />
+ </marker>
+ </defs>
+ <rect
+ width="420"
+ height="440"
+ fill="#fff"
+ fill-opacity=".85"
+ stroke="#ddd"
+ id="rect7" />
+ <path
+ d="m17 98h320"
+ stroke="#555"
+ stroke-width="1px"
+ id="path9" />
+ <text
+ id="code"
+ fill="#444"
+ font-family="'SF Mono', Monaco, monospace"
+ font-size="11px"
+ font-weight="bold"
+ stroke-width="1.4"
+ style="font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;line-height:1.25"><tspan
+ x="17"
+ y="90"
+ font-style="italic"
+ font-weight="600"
+ id="tspan1151">components/Form.jinja</tspan><tspan
+ x="17"
+ y="131"
+ id="tspan1153">{#def action, label, method=&quot;post&quot; #}</tspan><tspan
+ x="17"
+ y="145"
+ id="tspan1155">{#css form.css %}</tspan><tspan
+ x="17"
+ y="160"
+ id="tspan1157">{#js form.js %}</tspan><tspan
+ x="17"
+ y="187"
+ fill="#555"
+ id="tspan1159">{% set method = method.lower() %}</tspan><tspan
+ x="17"
+ y="215"
+ fill="#3771c8"
+ id="tspan1165"><tspan
+ id="tspan1161">&lt;</tspan><tspan
+ id="tspan1163">form</tspan></tspan><tspan
+ x="24"
+ y="229"
+ id="tspan1175"><tspan
+ fill="#5f8dd3"
+ id="tspan1167">method=</tspan><tspan
+ fill="#080"
+ id="tspan1169">&quot;</tspan><tspan
+ fill="#ff7f2a"
+ id="tspan1171">{{ method }}</tspan><tspan
+ fill="#080"
+ id="tspan1173">&quot;</tspan></tspan><tspan
+ x="24"
+ y="244"
+ id="tspan1185"><tspan
+ fill="#5f8dd3"
+ id="tspan1177">action=</tspan><tspan
+ fill="#080"
+ id="tspan1179">&quot;</tspan><tspan
+ fill="#ff7f2a"
+ id="tspan1181">{{ action }}</tspan><tspan
+ fill="#080"
+ id="tspan1183">&quot;</tspan></tspan><tspan
+ x="24"
+ y="257"
+ fill="#ff7f2a"
+ id="tspan1189">{{ attrs.render(<tspan
+ id="tspan1187">class=&quot;form&quot;</tspan>) }}
+ </tspan><tspan
+ x="17"
+ y="272"
+ fill="#3771c8"
+ id="tspan1191">&gt;</tspan><tspan
+ x="24"
+ y="286"
+ fill="#555"
+ id="tspan1193">{% if method == &quot;post&quot; -%}</tspan><tspan
+ x="24"
+ y="299"
+ fill="#3771c8"
+ id="tspan1203">
+ &lt;input <tspan
+ fill="#5f8dd3"
+ id="tspan1201">type=<tspan
+ fill="#080"
+ id="tspan1195">&quot;hidden&quot;</tspan> name=<tspan
+ fill="#080"
+ id="tspan1197">&quot;csrf&quot;</tspan> value=&quot;<tspan
+ fill="#ff7f2a"
+ id="tspan1199">{{token}}</tspan>&quot; /&gt;</tspan></tspan><tspan
+ x="24"
+ y="314"
+ fill="#555"
+ id="tspan1205">{% endif -%}</tspan><tspan
+ x="24"
+ y="341"
+ id="tspan1209"><tspan
+ fill="#ff7f2a"
+ id="tspan1207">{{ content }}</tspan></tspan><tspan
+ x="24"
+ y="370"
+ fill="#214478"
+ id="tspan1215">
+ &lt;Button <tspan
+ fill="#5f8dd3"
+ id="tspan1211">label=</tspan><tspan
+ fill="#ff7f2a"
+ id="tspan1213">{label}</tspan>&gt;
+ </tspan><tspan
+ x="17"
+ y="386"
+ fill="#3771c8"
+ id="tspan1219">&lt;/<tspan
+ fill="#3771c8"
+ font-weight="bold"
+ id="tspan1217">form</tspan>&gt;</tspan></text>
+ <g
+ id="arrows">
+ <path
+ d="m96 49c13 28 24 .84 25 24"
+ fill="none"
+ marker-end="url(#TriangleStart)"
+ stroke="#000"
+ stroke-width="1.7"
+ id="path94" />
+ <path
+ d="m255 65c13 28-60 16-60 49"
+ fill="none"
+ marker-end="url(#TriangleStart)"
+ stroke="#000"
+ stroke-width="1.7"
+ id="path96" />
+ <path
+ d="m260 151c-26 6.7-74-7.6-108-9.2"
+ fill="none"
+ marker-end="url(#TriangleStart)"
+ stroke="#000"
+ stroke-width="1.7"
+ id="path98" />
+ <path
+ d="m262 158c-26 5.2-91-.74-124-2"
+ fill="none"
+ marker-end="url(#TriangleStart)"
+ stroke="#000"
+ stroke-width="1.7"
+ id="path100" />
+ <path
+ d="m169 404c-11-17-56-3.7-64-22"
+ fill="none"
+ marker-end="url(#TriangleStart)"
+ stroke="#000"
+ stroke-width="1.7"
+ id="path102" />
+ </g>
+ <text
+ style="font-size:12px;font-family:'Comic Neue'"
+ transform="matrix(0.99580394,0,0,0.99717236,22.306709,8.8220192)"
+ id="text111"><tspan
+ x="0"
+ y="11"
+ id="tspan105">Todo antes del primer </tspan><tspan
+ x="0"
+ y="30"
+ id="tspan107">punto es el nombre del </tspan><tspan
+ x="0"
+ y="48"
+ id="tspan109">componente</tspan></text>
+ <text
+ style="font-size:12px;font-family:'Comic Neue'"
+ transform="matrix(0.99585975,0,0,0.94509234,216.62806,15.846205)"
+ id="text115"><tspan
+ x="0"
+ y="6"
+ id="tspan113">Definición de argumentos</tspan></text>
+ <text
+ style="font-size:12px;font-family:'Comic Neue'"
+ transform="matrix(0.99962611,0,0,0.98554306,218.63043,28.835757)"
+ id="text121"><tspan
+ x="0"
+ y="11"
+ id="tspan117">Los argumentos sin valores </tspan><tspan
+ x="0"
+ y="30"
+ id="tspan119">predefinidos son obligatorios</tspan></text>
+ <text
+ style="font-size:12px;font-family:'Comic Neue'"
+ transform="matrix(1.0036128,0,0,0.99557292,276.36705,142.82391)"
+ id="text127"><tspan
+ x="0"
+ y="11"
+ id="tspan123">Listas opcionales de </tspan><tspan
+ x="0"
+ y="30"
+ id="tspan125">archivos CSS y JS</tspan></text>
+ <text
+ style="font-size:12px;font-family:'Comic Neue'"
+ transform="translate(275.93954,180.65106)"
+ id="text135"><tspan
+ x="0"
+ y="11"
+ id="tspan129">Las rutas son </tspan><tspan
+ x="0"
+ y="30"
+ id="tspan131">relativas al folder </tspan><tspan
+ x="0"
+ y="48"
+ id="tspan133">de componentes</tspan></text>
+ <text
+ style="font-size:12px;font-family:'Comic Neue'"
+ transform="matrix(0.99764329,0,0,0.98692271,247.4097,314.31427)"
+ id="text143"><tspan
+ x="0"
+ y="11"
+ id="tspan137">Puedes tener mas de </tspan><tspan
+ x="0"
+ y="30"
+ id="tspan139">un elemento padre, a </tspan><tspan
+ x="0"
+ y="48"
+ id="tspan141">diferencia de React</tspan></text>
+ <text
+ style="font-size:12px;font-family:'Comic Neue'"
+ transform="matrix(0.9980174,0,0,0.98858774,171.78044,387.36773)"
+ id="text149"><tspan
+ x="0"
+ y="11"
+ id="tspan145">Puedes llamar a cualquier </tspan><tspan
+ x="0"
+ y="30"
+ id="tspan147">otro componente</tspan></text>
+</svg>
diff --git a/docs/static/img/anchors.png b/docs/static/img/anchors.png
new file mode 100644
index 0000000..ba74fe5
--- /dev/null
+++ b/docs/static/img/anchors.png
Binary files differ
diff --git a/docs/static/img/apple-touch-icon.png b/docs/static/img/apple-touch-icon.png
new file mode 100644
index 0000000..aa04ca4
--- /dev/null
+++ b/docs/static/img/apple-touch-icon.png
Binary files differ
diff --git a/docs/static/img/composable.svg b/docs/static/img/composable.svg
new file mode 100644
index 0000000..c54628c
--- /dev/null
+++ b/docs/static/img/composable.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6">
+ <path stroke-linecap="round" stroke-linejoin="round" d="M14.25 6.087c0-.355.186-.676.401-.959.221-.29.349-.634.349-1.003 0-1.036-1.007-1.875-2.25-1.875s-2.25.84-2.25 1.875c0 .369.128.713.349 1.003.215.283.401.604.401.959v0a.64.64 0 01-.657.643 48.39 48.39 0 01-4.163-.3c.186 1.613.293 3.25.315 4.907a.656.656 0 01-.658.663v0c-.355 0-.676-.186-.959-.401a1.647 1.647 0 00-1.003-.349c-1.036 0-1.875 1.007-1.875 2.25s.84 2.25 1.875 2.25c.369 0 .713-.128 1.003-.349.283-.215.604-.401.959-.401v0c.31 0 .555.26.532.57a48.039 48.039 0 01-.642 5.056c1.518.19 3.058.309 4.616.354a.64.64 0 00.657-.643v0c0-.355-.186-.676-.401-.959a1.647 1.647 0 01-.349-1.003c0-1.035 1.008-1.875 2.25-1.875 1.243 0 2.25.84 2.25 1.875 0 .369-.128.713-.349 1.003-.215.283-.4.604-.4.959v0c0 .333.277.599.61.58a48.1 48.1 0 005.427-.63 48.05 48.05 0 00.582-4.717.532.532 0 00-.533-.57v0c-.355 0-.676.186-.959.401-.29.221-.634.349-1.003.349-1.035 0-1.875-1.007-1.875-2.25s.84-2.25 1.875-2.25c.37 0 .713.128 1.003.349.283.215.604.401.96.401v0a.656.656 0 00.658-.663 48.422 48.422 0 00-.37-5.36c-1.886.342-3.81.574-5.766.689a.578.578 0 01-.61-.58v0z" />
+</svg>
diff --git a/docs/static/img/encapsulated.svg b/docs/static/img/encapsulated.svg
new file mode 100644
index 0000000..afb9119
--- /dev/null
+++ b/docs/static/img/encapsulated.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6">
+ <path stroke-linecap="round" stroke-linejoin="round" d="M21 11.25v8.25a1.5 1.5 0 01-1.5 1.5H5.25a1.5 1.5 0 01-1.5-1.5v-8.25M12 4.875A2.625 2.625 0 109.375 7.5H12m0-2.625V7.5m0-2.625A2.625 2.625 0 1114.625 7.5H12m0 0V21m-8.625-9.75h18c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125h-18c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125z" />
+</svg>
diff --git a/docs/static/img/favicon.png b/docs/static/img/favicon.png
new file mode 100644
index 0000000..9b6ccd2
--- /dev/null
+++ b/docs/static/img/favicon.png
Binary files differ
diff --git a/docs/static/img/favicon.svg b/docs/static/img/favicon.svg
new file mode 100644
index 0000000..d243cf2
--- /dev/null
+++ b/docs/static/img/favicon.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg width="512" height="512" viewBox="0 0 135 135" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <rect style="fill:#ffffff" width="128.0000" height="112.0000" x="4.0000" y="12.0000" />
+ <rect style="fill:#55b2ff" width="128.0000" height="16.0000" x="4.0000" y="12.0000" />
+ <path style="fill:#000000" d="m 1.6901338,127.07004 v 3e-5 C 1.3828219,126.9448 0.8768176,126.51851 0.56568825,126.12275 L -6.9341144e-6,125.40319 V 67.874657 C -6.9341144e-6,23.83623 0.07409113,10.183354 0.31607229,9.6520087 1.0219463,8.1019542 -3.7115247,8.2034435 67.877153,8.2034435 h 65.786837 l 0.90134,0.9018238 0.90133,0.9018247 c 0,0 -0.0453,38.573404 -0.0679,57.860106 -0.0226,19.286701 -0.0679,57.860102 -0.0679,57.860102 l -0.7336,0.73399 -0.73359,0.73399 m -3.69215,-5.16205 V 33.351884 H 5.291517 V 122.03323 M 130.17158,13.497852 H 5.291517 V 28.057476 H 130.17158 Z" />
+ <rect style="fill:#d0ec7e;stroke:#000000;stroke-width:4.81818;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" width="58.46307" height="58.463062" x="55.0000" y="50.0000" />
+</svg>
diff --git a/docs/static/img/jinjax-logo-w.png b/docs/static/img/jinjax-logo-w.png
new file mode 100644
index 0000000..74f52c3
--- /dev/null
+++ b/docs/static/img/jinjax-logo-w.png
Binary files differ
diff --git a/docs/static/img/jinjax-logo-w.svg b/docs/static/img/jinjax-logo-w.svg
new file mode 100644
index 0000000..0b8c9bf
--- /dev/null
+++ b/docs/static/img/jinjax-logo-w.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="87mm" height="24mm" viewBox="0 0 87 24"><g style="fill:#f0f0f0;fill-opacity:1"><g style="font-size:40px;line-height:1.25;white-space:pre;shape-inside:url(#d);fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:1.44682;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" transform="matrix(.46943 0 0 .47617 -461.947 -45.454)"><path d="M1054.78 135.02c6.991 0 10.976-3.75 10.976-10.273v-18.691h-8.281v18.632c0 2.227-.957 3.399-2.813 3.399-1.836 0-3.027-1.27-3.027-3.496v-.04h-7.93v.06c0 6.523 4.316 10.41 11.074 10.41zm18.964-25.273c2.246 0 4.082-1.758 4.082-3.984 0-2.247-1.836-4.004-4.082-4.004-2.226 0-4.082 1.757-4.082 4.004 0 2.226 1.856 3.984 4.082 3.984zm-4.004 24.492h8.008v-21.953h-8.008zm11.29.001h8.007v-12.403c0-2.13 1.074-3.653 2.988-3.653 2.032 0 2.95 1.368 2.95 3.653v12.402h8.007v-14.18c0-5.273-2.5-8.32-7.343-8.32-3.047 0-5.313 1.602-6.211 4.024h-.39v-3.477h-8.009zm29.042-24.493c2.246 0 4.082-1.758 4.082-3.984 0-2.247-1.836-4.004-4.082-4.004-2.226 0-4.082 1.757-4.082 4.004 0 2.226 1.856 3.984 4.082 3.984zm-4.804 31.914c5.566 0 8.808-2.598 8.808-7.05v-22.325h-8.008v21.973c0 1.23-.703 1.757-2.324 1.757-.332 0-.683-.019-.918-.058v5.586c.469.058 1.64.117 2.442.117zm18.027-7.109c2.773 0 5.117-1.153 5.957-2.891h.39v2.578h7.852v-14.941c0-4.805-3.574-7.559-9.844-7.559-6.308 0-10.234 2.754-10.566 6.992l-.02.254h7.148l.04-.097c.37-.918 1.328-1.426 2.91-1.426 1.543 0 2.48.703 2.48 1.836v1.62l-4.336.255c-5.82.351-9.004 2.695-9.004 6.68v.038c0 4.004 2.793 6.66 6.992 6.66zm.645-7.266v-.04c0-1.054.976-1.757 2.656-1.874l3.047-.195v1.27c0 1.523-1.426 2.714-3.223 2.714-1.523 0-2.48-.742-2.48-1.875zm15.468 6.954h8.75l4.824-8.497h.157l4.863 8.496h9.219l-8.692-14.082v-.156l8.73-13.945h-9.179l-4.453 8.984h-.156l-4.434-8.984h-9.648l8.32 13.906v.156z" aria-label="JinjaX" style="font-weight:900;font-family:&quot;SF Pro Text&quot;;-inkscape-font-specification:&quot;SF Pro Text Heavy&quot;;fill:#f0f0f0;fill-opacity:1;stroke:none;stroke-width:1.44682;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/></g></g><g style="fill:#90d73b;stroke:#4d4d4d;stroke-width:4"><path fill="#fff" stroke="none" d="M1.74 1.616h23.704v20.906H1.741Z"/><path fill="#e6e6e6" stroke="none" d="M1.74 1.616h23.704v2.986H1.741Z"/><path fill="#4d4d4d" stroke="none" d="M1 23c.003-7.61 0-15.455 0-22h25v22m-.894-.846V5.601H1.98v16.553m23.126-18.9V1.897H1.98v2.718h23.126z"/><path d="M92.311 45.905h26.316v26.316H92.311Z" transform="matrix(.18519 0 0 .18666 1 -.624)"/><path fill="#fff" d="M17.147 45.887h64.319v64.319H17.147Z" transform="matrix(.18519 0 0 .18666 1 -.624)"/><path fill="#55b2ff" d="M25.854 53.803h35.304v35.304H25.854Z" transform="matrix(.18519 0 0 .18666 1 -.624)"/><path fill="#e6e6e6" d="M92.311 83.873h26.316v26.316H92.311Z" transform="matrix(.18519 0 0 .18666 1 -.624)"/></g></svg> \ No newline at end of file
diff --git a/docs/static/img/jinjax-logo.png b/docs/static/img/jinjax-logo.png
new file mode 100644
index 0000000..941df9f
--- /dev/null
+++ b/docs/static/img/jinjax-logo.png
Binary files differ
diff --git a/docs/static/img/jinjax-logo.svg b/docs/static/img/jinjax-logo.svg
new file mode 100644
index 0000000..4870abb
--- /dev/null
+++ b/docs/static/img/jinjax-logo.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="87mm" height="24mm" viewBox="0 0 87 24"><g style="fill:#000;fill-opacity:1"><g style="font-size:40px;line-height:1.25;white-space:pre;shape-inside:url(#d);fill:#000;fill-opacity:1;stroke:none;stroke-width:1.44682;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" transform="matrix(.46943 0 0 .47617 -461.947 -45.454)"><path d="M1054.78 135.02c6.991 0 10.976-3.75 10.976-10.273v-18.691h-8.281v18.632c0 2.227-.957 3.399-2.813 3.399-1.836 0-3.027-1.27-3.027-3.496v-.04h-7.93v.06c0 6.523 4.316 10.41 11.074 10.41zm18.964-25.273c2.246 0 4.082-1.758 4.082-3.984 0-2.247-1.836-4.004-4.082-4.004-2.226 0-4.082 1.757-4.082 4.004 0 2.226 1.856 3.984 4.082 3.984zm-4.004 24.492h8.008v-21.953h-8.008zm11.29.001h8.007v-12.403c0-2.13 1.074-3.653 2.988-3.653 2.032 0 2.95 1.368 2.95 3.653v12.402h8.007v-14.18c0-5.273-2.5-8.32-7.343-8.32-3.047 0-5.313 1.602-6.211 4.024h-.39v-3.477h-8.009zm29.042-24.493c2.246 0 4.082-1.758 4.082-3.984 0-2.247-1.836-4.004-4.082-4.004-2.226 0-4.082 1.757-4.082 4.004 0 2.226 1.856 3.984 4.082 3.984zm-4.804 31.914c5.566 0 8.808-2.598 8.808-7.05v-22.325h-8.008v21.973c0 1.23-.703 1.757-2.324 1.757-.332 0-.683-.019-.918-.058v5.586c.469.058 1.64.117 2.442.117zm18.027-7.109c2.773 0 5.117-1.153 5.957-2.891h.39v2.578h7.852v-14.941c0-4.805-3.574-7.559-9.844-7.559-6.308 0-10.234 2.754-10.566 6.992l-.02.254h7.148l.04-.097c.37-.918 1.328-1.426 2.91-1.426 1.543 0 2.48.703 2.48 1.836v1.62l-4.336.255c-5.82.351-9.004 2.695-9.004 6.68v.038c0 4.004 2.793 6.66 6.992 6.66zm.645-7.266v-.04c0-1.054.976-1.757 2.656-1.874l3.047-.195v1.27c0 1.523-1.426 2.714-3.223 2.714-1.523 0-2.48-.742-2.48-1.875zm15.468 6.954h8.75l4.824-8.497h.157l4.863 8.496h9.219l-8.692-14.082v-.156l8.73-13.945h-9.179l-4.453 8.984h-.156l-4.434-8.984h-9.648l8.32 13.906v.156z" aria-label="JinjaX" style="font-weight:900;font-family:&quot;SF Pro Text&quot;;-inkscape-font-specification:&quot;SF Pro Text Heavy&quot;;fill:#000;fill-opacity:1;stroke:none;stroke-width:1.44682;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/></g></g><g style="fill:#90d73b;stroke:#4d4d4d;stroke-width:4"><path fill="#fff" stroke="none" d="M1.74 1.616h23.704v20.906H1.741Z"/><path fill="#e6e6e6" stroke="none" d="M1.74 1.616h23.704v2.986H1.741Z"/><path fill="#4d4d4d" stroke="none" d="M1 23c.003-7.61 0-15.455 0-22h25v22m-.894-.846V5.601H1.98v16.553m23.126-18.9V1.897H1.98v2.718h23.126z"/><path d="M92.311 45.905h26.316v26.316H92.311Z" transform="matrix(.18519 0 0 .18666 1 -.624)"/><path fill="#fff" d="M17.147 45.887h64.319v64.319H17.147Z" transform="matrix(.18519 0 0 .18666 1 -.624)"/><path fill="#55b2ff" d="M25.854 53.803h35.304v35.304H25.854Z" transform="matrix(.18519 0 0 .18666 1 -.624)"/><path fill="#e6e6e6" d="M92.311 83.873h26.316v26.316H92.311Z" transform="matrix(.18519 0 0 .18666 1 -.624)"/></g></svg> \ No newline at end of file
diff --git a/docs/static/img/logo.png b/docs/static/img/logo.png
new file mode 100644
index 0000000..4b12c00
--- /dev/null
+++ b/docs/static/img/logo.png
Binary files differ
diff --git a/docs/static/img/logo.svg b/docs/static/img/logo.svg
new file mode 100644
index 0000000..ed5ce3f
--- /dev/null
+++ b/docs/static/img/logo.svg
@@ -0,0 +1,9 @@
+<svg width="512" height="512" viewBox="0 0 135 135" fill="#90d73b" stroke-width="4" stroke="#4d4d4d" xmlns="http://www.w3.org/2000/svg">
+<path d="M4 12h128v112H4z" fill="#fff" stroke-width="0"/>
+<path d="M4 12h128v16H4z" fill="#e6e6e6" stroke-width="0"/>
+<path d="M0 126.563C.014 85.794 0 43.763 0 8.7h135v117.862m-4.828-4.53V33.35H5.292v88.681M130.17 20.78V13.5H5.29v14.56h124.88z" fill="#4d4d4d" stroke-width="0"/>
+<path d="M92.311 45.905h26.316v26.316H92.311z"/>
+<path d="M17.147 45.887h64.319v64.319H17.147z" fill="#fff"/>
+<path d="M25.854 53.803h35.304v35.304H25.854z" fill="#55b2ff"/>
+<path d="M92.311 83.873h26.316v26.316H92.311z" fill="#e6e6e6"/>
+</svg> \ No newline at end of file
diff --git a/docs/static/img/modern.svg b/docs/static/img/modern.svg
new file mode 100644
index 0000000..e986962
--- /dev/null
+++ b/docs/static/img/modern.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg width="32mm" height="20mm" version="1.1" viewBox="0 0 32 20" xmlns="http://www.w3.org/2000/svg">
+ <text transform="matrix(.38398 0 0 .3722 -42.207 -42.291)" fill="#000000" font-family="sans-serif" font-size="40px" style="line-height:1.25;shape-inside:url(#rect2079);white-space:pre" xml:space="preserve"/>
+ <path d="m21.48 2.5704e-6h-3.3855l-7.4789 20h3.3986z" fill="#3465a4" stroke-width=".7728"/>
+ <path d="m32 8.6678-10.497-3.7261v2.6314l7.9024 2.5711-7.9024 2.5812v2.5711l10.497-3.7261z" fill="#333" stroke-width=".44679"/>
+ <path d="m1.3575e-7 8.6678 10.497-3.7261v2.6314l-7.9024 2.5711 7.9024 2.5812v2.5711l-10.497-3.7261z" fill="#333" stroke-width=".44679"/>
+</svg>
diff --git a/docs/static/img/practical.svg b/docs/static/img/practical.svg
new file mode 100644
index 0000000..702446c
--- /dev/null
+++ b/docs/static/img/practical.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6">
+ <path stroke-linecap="round" stroke-linejoin="round" d="M18.375 12.739l-7.693 7.693a4.5 4.5 0 01-6.364-6.364l10.94-10.94A3 3 0 1119.5 7.372L8.552 18.32m.009-.01l-.01.01m5.699-9.941l-7.81 7.81a1.5 1.5 0 002.112 2.13" />
+</svg>
diff --git a/docs/static/img/simple.svg b/docs/static/img/simple.svg
new file mode 100644
index 0000000..b69150b
--- /dev/null
+++ b/docs/static/img/simple.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6">
+ <path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
+</svg>
diff --git a/docs/static/img/slots-_slot.png b/docs/static/img/slots-_slot.png
new file mode 100644
index 0000000..93cbab3
--- /dev/null
+++ b/docs/static/img/slots-_slot.png
Binary files differ
diff --git a/docs/static/img/slots-diagram.png b/docs/static/img/slots-diagram.png
new file mode 100644
index 0000000..c085250
--- /dev/null
+++ b/docs/static/img/slots-diagram.png
Binary files differ
diff --git a/docs/static/img/spaghetti_code.png b/docs/static/img/spaghetti_code.png
new file mode 100644
index 0000000..df44455
--- /dev/null
+++ b/docs/static/img/spaghetti_code.png
Binary files differ
diff --git a/docs/static/img/ui-accordion.png b/docs/static/img/ui-accordion.png
new file mode 100644
index 0000000..adddd7b
--- /dev/null
+++ b/docs/static/img/ui-accordion.png
Binary files differ
diff --git a/docs/static/img/ui-linkedlist.png b/docs/static/img/ui-linkedlist.png
new file mode 100644
index 0000000..87667ba
--- /dev/null
+++ b/docs/static/img/ui-linkedlist.png
Binary files differ
diff --git a/docs/static/img/ui-menu.png b/docs/static/img/ui-menu.png
new file mode 100644
index 0000000..ee82e03
--- /dev/null
+++ b/docs/static/img/ui-menu.png
Binary files differ
diff --git a/docs/static/img/ui-popover.png b/docs/static/img/ui-popover.png
new file mode 100644
index 0000000..22507f5
--- /dev/null
+++ b/docs/static/img/ui-popover.png
Binary files differ
diff --git a/docs/static/img/ui-reldate.png b/docs/static/img/ui-reldate.png
new file mode 100644
index 0000000..e2258c5
--- /dev/null
+++ b/docs/static/img/ui-reldate.png
Binary files differ
diff --git a/docs/static/img/ui-tabs.png b/docs/static/img/ui-tabs.png
new file mode 100644
index 0000000..7b3bccd
--- /dev/null
+++ b/docs/static/img/ui-tabs.png
Binary files differ
diff --git a/docs/static/prose.css b/docs/static/prose.css
new file mode 100644
index 0000000..9a6531d
--- /dev/null
+++ b/docs/static/prose.css
@@ -0,0 +1,637 @@
+.prose {
+ --cd-prose-body: #3f3f46;
+ --cd-prose-headings: #18181b;
+ --cd-prose-lead: #52525b;
+ --cd-prose-links: #18181b;
+ --cd-prose-bold: #18181b;
+ --cd-prose-counters: #71717a;
+ --cd-prose-bullets: #d4d4d8;
+ --cd-prose-hr: #e4e4e7;
+ --cd-prose-quotes: #18181b;
+ --cd-prose-quote-borders: #e4e4e7;
+ --cd-prose-captions: #71717a;
+ --cd-prose-code: #18181b;
+ --cd-prose-pre-code: rgb(238 238 238);
+ --cd-prose-pre-border: rgb(51, 51, 51);
+ --cd-prose-pre-bg: rgb(24 24 24);
+ --cd-prose-th-borders: #ddd;
+ --cd-prose-td-borders: #eee;
+ --cd-prose-bg-hover: rgba(0,0,0,0.035);
+
+ --cd-prose-invert-body: #d4d4d8;
+ --cd-prose-invert-headings: #fff;
+ --cd-prose-invert-lead: #a1a1aa;
+ --cd-prose-invert-links: #fff;
+ --cd-prose-invert-bold: #fff;
+ --cd-prose-invert-counters: #a1a1aa;
+ --cd-prose-invert-bullets: #52525b;
+ --cd-prose-invert-hr: #3f3f46;
+ --cd-prose-invert-quotes: #f4f4f5;
+ --cd-prose-invert-quote-borders: #3f3f46;
+ --cd-prose-invert-captions: #a1a1aa;
+ --cd-prose-invert-code: #fff;
+ --cd-prose-invert-pre-code: rgb(238 238 238);
+ --cd-prose-invert-pre-border: rgb(51, 51, 51);
+ --cd-prose-invert-pre-bg: rgb(24 24 24);
+ --cd-prose-invert-th-borders: #52525b;
+ --cd-prose-invert-td-borders: #3f3f46;
+ --cd-prose-invert-bg-hover: rgba(0,0,0,0.035);
+}
+
+.dark .prose {
+ --cd-prose-body: var(--cd-prose-invert-body);
+ --cd-prose-headings: var(--cd-prose-invert-headings);
+ --cd-prose-lead: var(--cd-prose-invert-lead);
+ --cd-prose-links: var(--cd-prose-invert-links);
+ --cd-prose-bold: var(--cd-prose-invert-bold);
+ --cd-prose-counters: var(--cd-prose-invert-counters);
+ --cd-prose-bullets: var(--cd-prose-invert-bullets);
+ --cd-prose-hr: var(--cd-prose-invert-hr);
+ --cd-prose-quotes: var(--cd-prose-invert-quotes);
+ --cd-prose-quote-borders: var(--cd-prose-invert-quote-borders);
+ --cd-prose-captions: var(--cd-prose-invert-captions);
+ --cd-prose-code: var(--cd-prose-invert-code);
+ --cd-prose-pre-code: var(--cd-prose-invert-pre-code);
+ --cd-prose-pre-border: var(--cd-prose-invert-pre-border);
+ --cd-prose-pre-bg: var(--cd-prose-invert-pre-bg);
+ --cd-prose-th-borders: var(--cd-prose-invert-th-borders);
+ --cd-prose-td-borders: var(--cd-prose-invert-td-borders);
+ --cd-prose-bg-hover: var(--cd-prose-invert-bg-hover);
+}
+
+.prose {
+ font-size: 1em;
+ line-height: 1.75;
+ color: var(--cd-prose-body);
+}
+
+.prose h1:not(:where([class~="not-prose"] *)) ,
+.prose h2:not(:where([class~="not-prose"] *)) ,
+.prose h3:not(:where([class~="not-prose"] *)) ,
+.prose h4:not(:where([class~="not-prose"] *)) ,
+.prose h5:not(:where([class~="not-prose"] *)) ,
+.prose h6:not(:where([class~="not-prose"] *)) {
+ font-family: var(--cd-font-serif);
+}
+
+.prose :where(p):not(:where([class~="not-prose"] *)) {
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+}
+
+.prose :where([class~="lead"]):not(:where([class~="not-prose"] *)) {
+ color: var(--cd-prose-lead);
+ font-size: 1.25em;
+ line-height: 1.6;
+ margin-top: 1.2em;
+ margin-bottom: 1.2em;
+}
+
+.prose :where(a):not(:where([class~="not-prose"] *)) {
+ color: var(--cd-prose-links);
+ text-decoration: underline;
+ font-weight: 500;
+}
+
+.prose :where(strong):not(:where([class~="not-prose"] *)) {
+ color: var(--cd-prose-bold);
+ font-weight: 600;
+}
+
+.prose :where(a strong):not(:where([class~="not-prose"] *)) {
+ color: inherit;
+}
+
+.prose :where(blockquote strong):not(:where([class~="not-prose"] *)) {
+ color: inherit;
+}
+
+.prose :where(thead th strong):not(:where([class~="not-prose"] *)) {
+ color: inherit;
+}
+
+.prose :where(ol):not(:where([class~="not-prose"] *)) {
+ list-style-type: decimal;
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+ padding-left: 1.625em;
+}
+
+.prose :where(ol[type="A"]):not(:where([class~="not-prose"] *)) {
+ list-style-type: upper-alpha;
+}
+
+.prose :where(ol[type="a"]):not(:where([class~="not-prose"] *)) {
+ list-style-type: lower-alpha;
+}
+
+.prose :where(ol[type="A" s]):not(:where([class~="not-prose"] *)) {
+ list-style-type: upper-alpha;
+}
+
+.prose :where(ol[type="a" s]):not(:where([class~="not-prose"] *)) {
+ list-style-type: lower-alpha;
+}
+
+.prose :where(ol[type="I"]):not(:where([class~="not-prose"] *)) {
+ list-style-type: upper-roman;
+}
+
+.prose :where(ol[type="i"]):not(:where([class~="not-prose"] *)) {
+ list-style-type: lower-roman;
+}
+
+.prose :where(ol[type="I" s]):not(:where([class~="not-prose"] *)) {
+ list-style-type: upper-roman;
+}
+
+.prose :where(ol[type="i" s]):not(:where([class~="not-prose"] *)) {
+ list-style-type: lower-roman;
+}
+
+.prose :where(ol[type="1"]):not(:where([class~="not-prose"] *)) {
+ list-style-type: decimal;
+}
+
+.prose :where(ul):not(:where([class~="not-prose"] *)) {
+ list-style-type: disc;
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+ padding-left: 1.625em;
+}
+
+.prose :where(ol > li):not(:where([class~="not-prose"] *))::marker {
+ font-weight: 400;
+ color: var(--cd-prose-counters);
+}
+
+.prose :where(ul > li):not(:where([class~="not-prose"] *))::marker {
+ color: var(--cd-prose-bullets);
+}
+
+.prose :where(hr):not(:where([class~="not-prose"] *)) {
+ border-color: var(--cd-prose-hr);
+ border-top-width: 1px;
+ margin-top: 3em;
+ margin-bottom: 3em;
+}
+
+.prose :where(blockquote):not(:where([class~="not-prose"] *)) {
+ font-weight: 500;
+ font-style: italic;
+ color: var(--cd-prose-quotes);
+ border-left-width: 0.25em;
+ border-left-color: var(--cd-prose-quote-borders);
+ quotes: "\201C""\201D""\2018""\2019";
+ margin-top: 1.6em;
+ margin-bottom: 1.6em;
+ padding-left: 1em;
+}
+
+.prose :where(blockquote p:first-of-type):not(:where([class~="not-prose"] *))::before {
+ content: open-quote;
+}
+
+.prose :where(blockquote p:last-of-type):not(:where([class~="not-prose"] *))::after {
+ content: close-quote;
+}
+
+.prose :where(h1):not(:where([class~="not-prose"] *)) {
+ color: var(--cd-prose-headings);
+ font-weight: 800;
+ font-size: 2.2rem;
+ margin-top: 0;
+ margin-bottom: 0.8888889em;
+ line-height: 1.1111111;
+}
+
+.prose :where(h1 strong):not(:where([class~="not-prose"] *)) {
+ font-weight: 900;
+ color: inherit;
+}
+
+.prose :where(h2):not(:where([class~="not-prose"] *)) {
+ color: var(--cd-prose-headings);
+ font-weight: 700;
+ font-size: 1.8em;
+ margin-top: 1.2em;
+ margin-bottom: 0.5em;
+ line-height: 1.3333333;
+}
+
+.prose :where(h2 strong):not(:where([class~="not-prose"] *)) {
+ font-weight: 800;
+ color: inherit;
+}
+
+.prose :where(h3):not(:where([class~="not-prose"] *)) {
+ color: var(--cd-prose-headings);
+ font-weight: 600;
+ font-size: 1.4em;
+ margin-top: 1.6em;
+ margin-bottom: 0.4em;
+ line-height: 1.6;
+}
+
+.prose :where(h3 strong):not(:where([class~="not-prose"] *)) {
+ font-weight: 700;
+ color: inherit;
+}
+
+.prose :where(h4):not(:where([class~="not-prose"] *)) {
+ color: var(--cd-prose-headings);
+ font-weight: 600;
+ font-size: 1.2em;
+ margin-top: 1.5em;
+ margin-bottom: 0.5em;
+ line-height: 1.5;
+}
+
+.prose :where(h4 strong):not(:where([class~="not-prose"] *)) {
+ font-weight: 700;
+ color: inherit;
+}
+
+.prose :where(h5):not(:where([class~="not-prose"] *)) {
+ color: var(--cd-prose-headings);
+ font-weight: 600;
+ font-size: 1em;
+ margin-top: 1em;
+ margin-bottom: 0.5em;
+ line-height: 1.5;
+}
+
+
+.prose :where(h6):not(:where([class~="not-prose"] *)) {
+ color: var(--cd-prose-headings);
+ font-weight: 600;
+ font-size: 1em;
+ margin-top: 1em;
+ margin-bottom: 0.5em;
+ line-height: 1.4;
+}
+
+
+.prose :where(img):not(:where([class~="not-prose"] *)) {
+ margin-top: 2em;
+ margin-bottom: 2em;
+}
+
+.prose :where(figure > *):not(:where([class~="not-prose"] *)) {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.prose :where(figcaption):not(:where([class~="not-prose"] *)) {
+ color: var(--cd-prose-captions);
+ font-size: 0.875em;
+ line-height: 1.4285714;
+ margin-top: 0.8571429em;
+}
+
+.prose :where(code):not(:where([class~="not-prose"] *)) {
+ color: var(--cd-prose-code);
+ font-size: 0.98em;
+ letter-spacing: -0.02em;
+}
+.prose :where(code):not(:where(pre code)):not(:where([class~="not-prose"] *)) {
+ padding: 0.1em;
+ background: var(--cd-bg-color-hover);
+}
+
+.prose :where(a code):not(:where([class~="not-prose"] *)) {
+ color: inherit;
+}
+
+.prose :where(h1 code):not(:where([class~="not-prose"] *)) {
+ color: inherit;
+}
+
+.prose :where(h2 code):not(:where([class~="not-prose"] *)) {
+ color: inherit;
+ font-size: 0.875em;
+}
+
+.prose :where(h3 code):not(:where([class~="not-prose"] *)) {
+ color: inherit;
+ font-size: 0.9em;
+}
+
+.prose :where(h4 code):not(:where([class~="not-prose"] *)) {
+ color: inherit;
+}
+
+.prose :where(blockquote code):not(:where([class~="not-prose"] *)) {
+ color: inherit;
+}
+
+.prose :where(thead th code):not(:where([class~="not-prose"] *)) {
+ color: inherit;
+}
+
+.prose :where(table):not(:where([class~="not-prose"] *)) {
+ width: 100%;
+ table-layout: auto;
+ text-align: left;
+ margin-top: 2em;
+ margin-bottom: 2em;
+ font-size: 0.875em;
+ line-height: 1.7142857;
+ border-width: 1px;
+ border-color: var(--cd-prose-td-borders);
+}
+
+.prose :where(thead):not(:where([class~="not-prose"] *)) {
+ border-bottom-width: 1px;
+ border-bottom-color: var(--cd-prose-th-borders);
+}
+
+.prose :where(thead th):not(:where([class~="not-prose"] *)) {
+ color: var(--cd-prose-headings);
+ font-weight: 600;
+ vertical-align: bottom;
+ border-left-width: 1px;
+ border-left-color: var(--cd-prose-th-borders);
+ /* text-transform: uppercase; */
+}
+.prose :where(thead th:first-child):not(:where([class~="not-prose"] *)) {
+ border-left-width: 0;
+}
+
+.prose :where(tbody tr):not(:where([class~="not-prose"] *)) {
+ border-bottom-width: 1px;
+ border-bottom-color: var(--cd-prose-td-borders);
+ transition: background-color 125ms;
+}
+.prose :where(tbody tr:hover):not(:where([class~="not-prose"] *)) {
+ background-color: var(--cd-prose-bg-hover);
+}
+
+.prose :where(tbody tr:last-child):not(:where([class~="not-prose"] *)) {
+ border-bottom-width: 0;
+}
+
+.prose :where(tbody td):not(:where([class~="not-prose"] *)) {
+ vertical-align: baseline;
+ border-left-width: 1px;
+ border-left-color: var(--cd-prose-th-borders);
+}
+.prose :where(tbody td:first-child):not(:where([class~="not-prose"] *)) {
+ border-left-width: 0;
+}
+.prose :where(tbody td p:first-child):not(:where([class~="not-prose"] *)) {
+ margin-top: 0;
+}
+
+.prose :where(tfoot):not(:where([class~="not-prose"] *)) {
+ border-top-width: 1px;
+ border-top-color: var(--cd-prose-th-borders);
+}
+
+.prose :where(tfoot td):not(:where([class~="not-prose"] *)) {
+ vertical-align: top;
+}
+
+.prose :where(th, td):not(:where([class~="not-prose"] *)) {
+ padding: 0.5rem 1rem;
+}
+
+.prose :where(video):not(:where([class~="not-prose"] *)) {
+ margin-top: 2em;
+ margin-bottom: 2em;
+}
+
+.prose :where(figure):not(:where([class~="not-prose"] *)) {
+ margin-top: 2em;
+ margin-bottom: 2em;
+}
+
+.prose :where(li):not(:where([class~="not-prose"] *)) {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+
+.prose :where(ol > li):not(:where([class~="not-prose"] *)) {
+ padding-left: 0.375em;
+}
+
+.prose :where(ul > li):not(:where([class~="not-prose"] *)) {
+ padding-left: 0.375em;
+}
+
+.prose :where(.prose > ul > li p):not(:where([class~="not-prose"] *)) {
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+}
+
+.prose :where(.prose > ul > li > *:first-child):not(:where([class~="not-prose"] *)) {
+ margin-top: 1.25em;
+}
+
+.prose :where(.prose > ul > li > *:last-child):not(:where([class~="not-prose"] *)) {
+ margin-bottom: 1.25em;
+}
+
+.prose :where(.prose > ol > li > *:first-child):not(:where([class~="not-prose"] *)) {
+ margin-top: 1.25em;
+}
+
+.prose :where(.prose > ol > li > *:last-child):not(:where([class~="not-prose"] *)) {
+ margin-bottom: 1.25em;
+}
+
+.prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"] *)) {
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+}
+
+.prose :where(hr + *):not(:where([class~="not-prose"] *)) {
+ margin-top: 0;
+}
+
+.prose :where(h2 + *):not(:where([class~="not-prose"] *)) {
+ margin-top: 0;
+}
+
+.prose :where(h3 + *):not(:where([class~="not-prose"] *)) {
+ margin-top: 0;
+}
+
+.prose :where(h4 + *):not(:where([class~="not-prose"] *)) {
+ margin-top: 0;
+}
+
+.prose :where(.prose > :first-child):not(:where([class~="not-prose"] *)) {
+ margin-top: 0;
+}
+
+.prose :where(.prose > :last-child):not(:where([class~="not-prose"] *)) {
+ margin-bottom: 0;
+}
+
+.prose :where(.task-list .task-list):not(:where([class~="not-prose"] *)) {
+ padding-left: 1em;
+}
+
+.prose :where(dl):not(:where([class~="not-prose"] *)) {
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+}
+
+.prose :where(dt):not(:where([class~="not-prose"] *)) {
+ font-weight: bold;
+}
+
+.prose :where(dd):not(:where([class~="not-prose"] *)) {
+ padding-left: 1em;
+}
+
+pre {
+ border: 1px solid rgb(var(--cd-prose-pre-border));
+ overflow-x: auto;
+ font-weight: 400;
+ font-feature-settings: "kern";
+ white-space: pre;
+ scrollbar-width: thin;
+ padding: 1.25rem 1.5rem;
+}
+pre::-webkit-scrollbar {
+ width: 2px;
+ background-color: ButtonFace;
+}
+pre:has([data-linenos]) {
+ padding-left: 0;
+}
+pre code {
+ background-color: transparent;
+ border-width: 0;
+ border-radius: 0;
+ padding: 0;
+ font-weight: inherit;
+ color: inherit;
+ font-size: inherit;
+ font-family: inherit;
+ line-height: inherit;
+
+}
+pre a {
+ text-decoration: none;
+}
+
+.highlight {
+ margin-top: 0.5rem;
+ margin-bottom: 1rem;
+ border-radius: 6px;
+}
+.highlight:has(> .filename) {
+ background-color: rgb(249 250 251);
+ border: 1px solid rgb(153, 153, 153);
+}
+.highlight:is(.dark *):has(> .filename) {
+ background-color: rgb(55 65 81);
+ border-color: rgb(75 85 99);
+}
+.highlight > .filename {
+ border-radius: 6px 0 0 0;
+ display: inline-block;
+ border-right: 1px solid rgb(153, 153, 153);
+ background-color: #e7e9ed;
+ padding: 0.5rem;
+ color: #333;
+ font-weight: 500;
+ font-size: 0.9em;
+}
+.highlight:is(.dark *) > .filename {
+ border-color: rgb(75 85 99);
+ background-color: #111;
+ color: rgb(255 255 255);
+}
+.highlight pre {
+ background-color: rgba(0, 0, 0, 0.9);
+ border-radius: 6px;
+ font-size: 0.98rem;
+ line-height: 1.4;
+}
+.highlight .filename + pre {
+ border-radius: 0 0 6px 6px;
+}
+.highlight pre code { color: white; }
+
+.highlight pre code [data-linenos]:before {
+ content: attr(data-linenos);
+ display: inline-block;
+ width: 3rem;
+ text-align: right;
+ padding-right: 1rem;
+ white-space: nowrap;
+ color: rgb(82 82 91);
+ font-size: 0.75rem;
+}
+.highlight .hll {
+ background-color: #333;
+ display: block;
+}
+
+.highlight .c { color: hsl(31, 76%, 64%) } /* Comment */
+.highlight .err { color: #960050; background-color: #1e0010 } /* Error */
+.highlight .k { color: #66d9ef } /* Keyword */
+.highlight .l { color: #ae81ff } /* Literal */
+.highlight .n { color: #f8f8f2 } /* Name */
+.highlight .o { color: #f92672 } /* Operator */
+.highlight .p { color: #f8f8f2 } /* Punctuation */
+.highlight .cm { color: hsl(30, 20%, 50%) } /* Comment.Multiline */
+.highlight .cp { color: hsl(30, 20%, 50%) } /* Comment.Preproc */
+.highlight .c1 { color: hsl(30, 20%, 50%) } /* Comment.Single */
+.highlight .cs { color: hsl(30, 20%, 50%) } /* Comment.Special */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.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 .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 .sb { color: #e6db74 } /* Literal.String.Backtick */
+.highlight .sc { color: #e6db74 } /* Literal.String.Char */
+.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 .vc { color: #f8f8f2 } /* Name.Variable.Class */
+.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */
+.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */
+.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */
+
+.highlight .gh { } /* Generic Heading & Diff Header */
+.highlight .gu { color: hsl(30, 20%, 50%); } /* Generic.Subheading & Diff Unified/Comment? */
+.highlight .gd { color: #f92672; } /* Generic.Deleted & Diff Deleted */
+.highlight .gi { color: #a6e22e; } /* Generic.Inserted & Diff Inserted */
diff --git a/docs/static/theme.css b/docs/static/theme.css
new file mode 100644
index 0000000..8dad4aa
--- /dev/null
+++ b/docs/static/theme.css
@@ -0,0 +1,1808 @@
+/* latin */
+@font-face {
+ font-family: "Karla";
+ font-style: normal;
+ font-weight: 400;
+ src: url("./fonts/karla-regular-.woff2") format("woff2");
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* latin-ext */
+@font-face {
+ font-family: "Karla";
+ font-style: normal;
+ font-weight: 400;
+ src: url("./fonts/karla-regular-ext.woff2") format("woff2");
+ unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: "Karla";
+ font-style: normal;
+ font-weight: 700;
+ src: url("./fonts/karla-bold.woff2") format("woff2");
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+}
+/* latin-ext */
+@font-face {
+ font-family: "Karla";
+ font-style: normal;
+ font-weight: 700;
+ src: url("./fonts/karla-bold-ext.woff2") format("woff2");
+ unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
+}
+@font-face {
+ font-family: "Material Symbols Rounded";
+ font-style: normal;
+ font-weight: 100 700;
+ font-display: block;
+ src: url("./fonts/material-symbols-rounded.woff2") format("woff2");
+}
+
+/* ---------------------------------------------------------------------- */
+
+html {
+ --cd-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ --cd-font-sans: Karla, sans-serif;
+ --cd-font-icons: "Material Symbols Rounded";
+
+ --cd-padding-left: max(1rem, env(safe-area-inset-right));
+ --cd-padding-right: max(1rem, env(safe-area-inset-left));
+
+ --cd-brand-color: #fbbf24;
+ --cd-bg-color-light: rgb(255 255 255);
+ --cd-bg-color-dark: rgb(23 23 23);
+
+ --cd-bg-color: var(--cd-bg-color-light);
+ --cd-bg-color-hover: rgb(240, 240, 240);
+ --cd-text-color: rgb(23 23 23);
+ --cd-text-color-mild: rgb(63 63 70);
+ --cd-border-color: #e3e3e4;
+
+ --cd-nav-bg-color: rgba(255, 255, 255, 0.8);
+ --cd-nav-bg-color-hover: rgb(244, 244, 244);
+
+ --doc-symbol-parameter-fg-color: #df50af;
+ --doc-symbol-attribute-fg-color: #953800;
+ --doc-symbol-function-fg-color: #8250df;
+ --doc-symbol-method-fg-color: #8250df;
+ --doc-symbol-class-fg-color: #0550ae;
+ --doc-symbol-module-fg-color: #5cad0f;
+
+ --doc-symbol-parameter-bg-color: #df50af1a;
+ --doc-symbol-attribute-bg-color: #9538001a;
+ --doc-symbol-function-bg-color: #8250df1a;
+ --doc-symbol-method-bg-color: #8250df1a;
+ --doc-symbol-class-bg-color: #0550ae1a;
+ --doc-symbol-module-bg-color: #5cad0f1a;
+}
+
+html.dark {
+ --cd-brand-color: #3451b2;
+
+ --cd-bg-color: var(--cd-bg-color-dark);
+ --cd-bg-color-hover: rgb(40 40 40);
+ --cd-text-color: rgb(250 250 250);
+ --cd-text-color-mild: rgb(161 161 170);
+ --cd-border-color: rgb(60 60 60);
+
+ --cd-nav-bg-color: rgba(60, 60, 60, 0.8);
+ --cd-nav-bg-color-hover: rgb(70, 70, 70);
+
+ --doc-symbol-parameter-fg-color: #ffa8cc;
+ --doc-symbol-attribute-fg-color: #ffa657;
+ --doc-symbol-function-fg-color: #d2a8ff;
+ --doc-symbol-method-fg-color: #d2a8ff;
+ --doc-symbol-class-fg-color: #79c0ff;
+ --doc-symbol-module-fg-color: #baff79;
+
+ --doc-symbol-parameter-bg-color: #ffa8cc1a;
+ --doc-symbol-attribute-bg-color: #ffa6571a;
+ --doc-symbol-function-bg-color: #d2a8ff1a;
+ --doc-symbol-method-bg-color: #d2a8ff1a;
+ --doc-symbol-class-bg-color: #79c0ff1a;
+ --doc-symbol-module-bg-color: #baff791a;
+}
+
+/* ---------------------------------------------------------------------- */
+
+/*
+1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
+2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
+*/
+*,
+::before,
+::after {
+ /* 1 */
+ box-sizing: border-box;
+ /* 2 */
+ border-width: 0;
+ /* 2 */
+ border-style: solid;
+ /* 2 */
+ border-color: #e5e7eb;
+}
+::before,
+::after {
+ --cd-content: "";
+}
+
+/*
+1. Use a consistent sensible line-height in all browsers.
+2. Prevent adjustments of font size after orientation changes in iOS.
+3. Use a more readable tab size.
+4. Set default font sans
+4. Disable tap highlights on iOS
+*/
+html,
+:host {
+ /* 1 */
+ line-height: 1.5;
+ /* 2 */
+ tab-size: 4;
+ /* 3 */
+ -webkit-text-size-adjust: 100%;
+ /* 4 */
+ font-family: var(--cd-font-sans);
+ font-feature-settings: normal;
+ font-variation-settings: normal;
+ /* 5 */
+ -webkit-tap-highlight-color: transparent;
+}
+
+/*
+1. Remove the margin in all browsers.
+2. Inherit line-height from `html` so users can set them as a class
+ directly on the `html` element.
+*/
+body {
+ /* 1 */
+ margin: 0;
+ /* 2 */
+ line-height: inherit;
+}
+
+/*
+1. Add the correct height in Firefox.
+2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
+3. Ensure horizontal rules are visible by default.
+*/
+hr {
+ /* 1 */
+ height: 0;
+ /* 2 */
+ color: inherit;
+ /* 3 */
+ border-top-width: 1px;
+}
+
+/*
+Add the correct text decoration in Chrome, Edge, and Safari.
+*/
+abbr:where([title]) {
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+}
+
+/* Remove the default font size and weight for headings. */
+h1, h2, h3, h4, h5, h6 {
+ font-size: inherit;
+ font-weight: inherit;
+}
+
+/* Reset links to optimize for opt-in styling instead of opt-out. */
+a {
+ color: inherit;
+ text-decoration: inherit;
+}
+
+/* Add the correct font weight in Edge and Safari. */
+b, strong {
+ font-weight: bolder;
+}
+
+/*
+1. Use the user"s configured `mono` font-family by default.
+2. Correct the odd `em` font sizing in all browsers.
+*/
+code, kbd, samp, pre {
+ /* 1 */
+ font-family: var(--cd-font-mono);
+ font-feature-settings: normal;
+ font-variation-settings: normal;
+ /* 2 */
+ font-size: 1em;
+}
+
+/* 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;
+}
+
+/*
+1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
+2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
+3. Remove gaps between table borders by default.
+*/
+table {
+ /* 1 */
+ text-indent: 0;
+ /* 2 */
+ border-color: inherit;
+ /* 3 */
+ border-collapse: collapse;
+}
+
+/*
+1. Change the font styles in all browsers.
+2. Remove the margin in Firefox and Safari.
+3. Remove default padding in all browsers.
+*/
+button, input, optgroup, select, textarea {
+ /* 1 */
+ font-family: inherit;
+ font-feature-settings: inherit;
+ font-variation-settings: inherit;
+ font-size: 100%;
+ font-weight: inherit;
+ line-height: inherit;
+ letter-spacing: inherit;
+ color: inherit;
+ /* 2 */
+ margin: 0;
+ /* 3 */
+ padding: 0;
+}
+
+/* Remove the inheritance of text transform in Edge and Firefox. */
+button, select {
+ text-transform: none;
+}
+
+/*
+1. Correct the inability to style clickable types in iOS and Safari.
+2. Remove default button styles.
+*/
+button,
+input:where([type="button"]),
+input:where([type="reset"]),
+input:where([type="submit"]) {
+ /* 1 */
+ -webkit-appearance: button;
+ /* 2 */
+ background-color: transparent;
+ background-image: none;
+}
+
+/* Use the modern Firefox focus style for all focusable elements. */
+:-moz-focusring {
+ outline: auto;
+}
+
+/* Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) */
+:-moz-ui-invalid {
+ box-shadow: none;
+}
+
+/* Add the correct vertical alignment in Chrome and Firefox. */
+progress {
+ vertical-align: baseline;
+}
+
+/* Correct the cursor style of increment and decrement buttons in Safari. */
+::-webkit-inner-spin-button,
+::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/*
+1. Correct the odd appearance in Chrome and Safari.
+2. Correct the outline style in Safari.
+*/
+[type="search"] {
+ /* 1 */
+ -webkit-appearance: textfield;
+ /* 2 */
+ outline-offset: -2px;
+}
+
+/* Remove the inner padding in Chrome and Safari on macOS. */
+::-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 {
+ /* 1 */
+ -webkit-appearance: button;
+ /* 2 */
+ font: inherit;
+}
+
+/* Add the correct display in Chrome and Safari. */
+summary {
+ display: list-item;
+}
+
+/* Removes the default spacing and border for appropriate elements. */
+blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre {
+ margin: 0;
+}
+fieldset {
+ margin: 0;
+ padding: 0;
+}
+legend {
+ padding: 0;
+}
+ol, ul, menu {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+/* Reset default styling for dialogs. */
+dialog {
+ padding: 0;
+}
+
+/* Prevent resizing textareas horizontally by default. */
+textarea {
+ resize: vertical;
+}
+
+/*
+1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
+2. Set the default placeholder color to the user"s configured gray 400 color.
+*/
+input::-moz-placeholder,
+textarea::-moz-placeholder {
+ /* 1 */
+ opacity: 1;
+ /* 2 */
+ color: #9ca3af;
+}
+input::placeholder,
+textarea::placeholder {
+ /* 1 */
+ opacity: 1;
+ /* 2 */
+ color: #9ca3af;
+}
+
+/* Set the default cursor for buttons. */
+button,
+[role="button"] {
+ cursor: pointer;
+}
+
+/* Make sure disabled buttons don"t get the pointer cursor. */
+:disabled {
+ cursor: default;
+}
+
+/*
+1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
+2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
+ This can trigger a poorly considered lint error in some tools but is included by design.
+*/
+img, svg, video, canvas, audio, iframe, embed, object {
+ /* 1 */
+ display: block;
+ /* 2 */
+ vertical-align: middle;
+}
+
+/*
+Constrain images and videos to the parent width and preserve their
+intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
+*/
+img, video {
+ max-width: 100%;
+ height: auto;
+}
+
+/* Make elements with the HTML hidden attribute stay hidden by default */
+[hidden] {
+ display: none;
+}
+
+/* ---------------------------------------------------------------------- */
+
+html:has(.cd-nav-mobile:popover-open) {
+ overflow: hidden !important;
+ overflow-x: hidden !important;
+ overflow-y: hidden !important;
+}
+body {
+ position: relative;
+ min-height: 100vh;
+ color: var(--cd-text-color);
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ background-color: var(--cd-bg-color-light);
+ transition: background 100ms linear;
+}
+html.dark body {
+ background-color: var(--cd-bg-color-dark);
+}
+
+.keys,
+kbd:not(.keys > kbd) {
+ font-family: var(--cd-font-mono);
+ display: inline-block;
+ padding: 0.2rem 0.25rem;
+ margin-left: 0.1rem;
+ margin-right: 0.1rem;
+ font-size: 0.875rem;
+ line-height: 1;
+ font-weight: 500;
+ letter-spacing: -0.025em;
+ line-height: 1;
+ border-radius: 0.25rem;
+ border-width: 1px;
+ border-color: #ffffff;
+ box-shadow: 0 0 2px 0 #000;
+
+ &:is(.dark *) {
+ border-color: rgb(0 0 0);
+ background-color: rgb(24 24 27);
+ }
+}
+
+.scrollbar-thin {
+ scrollbar-width: thin; /* Firefox */
+}
+.scrollbar-thin::-webkit-scrollbar {
+ /* Safari and Chrome */
+ width: 2px;
+ background-color: ButtonFace;
+}
+.scrollbar-default {
+ -ms-overflow-style: auto; /* IE and Edge */
+ scrollbar-width: auto; /* Firefox */
+}
+.scrollbar-default::-webkit-scrollbar {
+ /* Safari and Chrome */
+ width: auto;
+}
+
+a.headerlink {
+ margin-left: .25rem;
+ display: inline-block;
+ text-decoration-line: none;
+ opacity: 0;
+ transition-property: opacity;
+ transition-timing-function: cubic-bezier(.4,0,.2,1);
+ transition-duration: .15s;
+}
+h2:hover a.headerlink,
+h3:hover a.headerlink,
+h4:hover a.headerlink,
+h5:hover a.headerlink,
+h6:hover a.headerlink {
+ opacity: 0.5;
+}
+
+/* ---------------------------------------------------------------------- */
+
+.doc-symbol {
+ border-radius: 0.1rem;
+ padding: 0 0.3em;
+ font-weight: bold;
+}
+.doc-symbol-attr {
+ color: var(--doc-symbol-attribute-fg-color) !important;
+ background-color: var(--doc-symbol-attribute-bg-color) !important;
+}
+.doc-symbol-function {
+ color: var(--doc-symbol-function-fg-color) !important;
+ background-color: var(--doc-symbol-function-bg-color) !important;
+}
+.doc-symbol-method {
+ color: var(--doc-symbol-method-fg-color) !important;
+ background-color: var(--doc-symbol-method-bg-color) !important;
+}
+.doc-symbol-class {
+ color: var(--doc-symbol-class-fg-color) !important;
+ background-color: var(--doc-symbol-class-bg-color) !important;
+}
+.doc-symbol-module {
+ color: var(--doc-symbol-module-fg-color) !important;
+ background-color: var(--doc-symbol-module-bg-color) !important;
+}
+
+.doc-oname {
+ font-weight: normal;
+}
+.doc-olabel {
+ font-size: 0.6em !important;
+ color: #36464e !important;
+ font-weight: 400;
+ padding: 0.1rem 0.4rem !important;
+}
+
+.doc-attrs ~ .doc-methods,
+.doc-properties ~ .doc-methods {
+ margin-top; 1rem;
+}
+
+/* ---------------------------------------------------------------------- */
+
+.icon {
+ font-family: var(--cd-font-icons);
+ font-weight: normal;
+ font-style: normal;
+ letter-spacing: normal;
+ text-transform: none;
+ display: inline-block;
+ white-space: nowrap;
+ word-wrap: normal;
+ direction: ltr;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-rendering: optimizeLegibility;
+ font-feature-settings: "liga";
+ cursor: default;
+ pointer-events: none;
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-source {
+ display: flex;
+ align-items: center;
+ font-size: 0.85rem;
+ line-height: 1.2;
+ white-space: nowrap;
+ cursor: pointer;
+ text-decoration: none;
+ padding: 0.5rem 0.75rem;
+ min-width: 150px;
+ backdrop-filter: blur(4px);
+ background-color: var(--cd-nav-bg-color);
+ border-radius: 1rem;
+ transition: background 300ms ease-in-out;
+
+ &:hover {
+ background-color: var(--cd-nav-bg-color-hover);
+ }
+ & > div {
+ opacity: 0.8;
+ transition: opacity 300ms ease-in-out;
+ }
+ &:hover > div {
+ opacity: 1;
+ }
+ & .cd-source__icon {
+ padding-right: 0.5rem;
+ }
+ & .cd-source__icon svg {
+ height: 1.5rem;
+ width: 1.5rem;
+ fill: currentcolor;
+ display: block;
+ }
+ & .cd-source__label {
+ font-size: 0.9rem;
+ font-weight: bold;
+ }
+ & .cd-source__repo {
+ display: inline-block;
+ max-width: calc(100% - 1.2rem);
+ overflow: hidden;
+ text-overflow: ellipsis;
+ vertical-align: middle;
+ }
+ @media (max-width: 480px) {
+ & {
+ min-width: 0;
+ }
+ & .cd-source__icon {
+ padding-right: 0;
+ }
+ & .cd-source__repo {
+ display: none;
+ }
+ }
+ & .cd-source__facts {
+ display: hidden;
+ gap: 0.4rem;
+ list-style-type: none;
+ margin: 0.1rem 0 0;
+ overflow: hidden;
+ padding: 0;
+ width: 100%;
+ opacity: 0;
+ transform: translateY(100%);
+ transition: all 0.5s ease-out;
+ }
+ & .cd-source__facts.cd-source__facts--visible {
+ display: flex;
+ opacity: 1;
+ transform: translateY(0);
+ }
+ & .cd-source__facts [data-fact] {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display: flex;
+ align-items: center;
+ line-height: 1;
+ }
+ & .cd-source__facts [data-fact]:nth-child(1n+2) {
+ flex-shrink: 0;
+ }
+ & .cd-source__facts [data-fact]:not([hidden]):before {
+ width: 0.6rem;
+ padding-right: 0.8rem;
+ font-family: var(--cd-font-icons);
+ font-weight: normal;
+ font-style: normal;
+ letter-spacing: normal;
+ text-transform: none;
+ display: inline-block;
+ white-space: nowrap;
+ word-wrap: normal;
+ direction: ltr;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-rendering: optimizeLegibility;
+ font-feature-settings: "liga";
+ cursor: default;
+ pointer-events: none;
+ }
+ & .cd-source__facts [data-fact="version"]:not([hidden]):before {
+ content: "tag";
+ }
+ & .cd-source__facts [data-fact="stars"]:not([hidden]):before {
+ content: "star";
+ }
+ & .cd-source__facts [data-fact="forks"]:not([hidden]):before {
+ content: "fork_right";
+ }
+ & .cd-source__facts [data-fact="numrepos"]:not([hidden]):before {
+ content: "numbers";
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-cards {
+ & {
+ display: grid;
+ grid-gap: 1rem;
+ }
+ @media (min-width: 480px) {
+ & { grid-template-columns: repeat(2, 1fr); }
+ }
+ @media (min-width: 900px) {
+ & { grid-template-columns: repeat(4, 1fr); }
+ }
+ & a.card {
+ display: block;
+ border: 1px solid var(--cd-border-color);
+ padding: 1rem;
+ border-radius: 6px;
+ background-color: var(--cd-bg-color);
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
+ }
+ & a.card:hover {
+ display: block;
+ background-color: var(--cd-bg-color-hover);
+ }
+ & a.card h2 {
+ text-decoration: none;
+ font-family: var(--cd-font-sans);
+ font-weight: bold;
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-text-button {
+ display: inline-flex;
+ cursor: pointer;
+ touch-action: manipulation;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ align-items: center;
+ justify-content: center;
+ white-space: nowrap;
+ border-radius: 0.25rem;
+ border-width: 1px;
+ border-color: rgb(228 228 231);
+ background-color: rgb(250 250 250);
+ padding: 0.25rem 0.5rem;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ font-weight: 600;
+ color: rgb(39 39 42);
+
+ &:hover {
+ border-color: rgb(212 212 216);
+ background-color: rgb(244 244 245);
+ color: rgb(24 24 27);
+ box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);;
+ }
+ &:focus {
+ outline-style: solid;
+ outline-offset: 1px;
+ outline-color: rgb(82 82 91 / 0.5);
+ }
+ &:active {
+ border-color: rgb(161 161 170);
+ }
+ &:disabled {
+ cursor: default;
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ }
+ &:is(.dark *) {
+ border-color: rgb(82 82 91);
+ background-color: rgb(82 82 91 / 0.1);
+ color: rgb(228 228 231);
+ }
+ &:is(.dark *):hover {
+ border-color: rgb(113 113 122);
+ background-color: rgb(24 24 27);
+ color: rgb(244 244 245);
+ }
+ &:is(.dark *):active {
+ border-color: var(--cd-bg-color);
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-callout {
+ --bg-color: rgb(244 244 245);
+ --border-color: rgb(212 212 216);
+ --text-color: rgb(39 39 42);
+
+ &.type-note,
+ &.type-info,
+ &.type-todo {
+ --bg-color: rgb(244 244 245);
+ --border-color: rgb(212 212 216);
+ --text-color: rgb(39 39 42);
+ }
+ &.type-tip {
+ --bg-color: rgb(254 249 195);
+ --border-color: rgb(254 240 138);
+ --text-color: rgb(133 77 14);
+ }
+ &.type-alert {
+ --bg-color: rgb(255 237 213);
+ --border-color: rgb(254 215 170);
+ --text-color: rgb(154 52 18);
+ }
+ &.type-warning {
+ --bg-color: rgb(255 237 213);
+ --border-color: rgb(254 215 170);
+ --text-color: rgb(154 52 18);
+ }
+ &.type-danger {
+ --bg-color: rgb(255 228 230);
+ --border-color: rgb(254 205 211);
+ --text-color: rgb(136 19 55);
+ }
+ &.type-error {
+ --bg-color: rgb(255 228 230);
+ --border-color: rgb(254 205 211);
+ --text-color: rgb(136 19 55);
+ }
+ &.type-internal {
+ --bg-color: rgb(231 229 228);
+ --border-color: rgb(214 211 209);
+ --text-color: rgb(28 25 23);
+ }
+ & {
+ position: relative;
+ border-top-width: 1px;
+ border-bottom-width: 1px;
+ overflow: hidden;
+ margin-left: -1rem;
+ margin-right: -1rem;
+ background-color: var(--bg-color);
+ border-color: var(--border-color);
+ color: var(--text-color);
+ }
+ @media (min-width: 640px) {
+ & {
+ border-left-width: 1px;
+ border-right-width: 1px;
+ border-radius: 0.25rem;
+ margin-left: 0;
+ margin-right: 0;
+ }
+ }
+ &:is(.dark *) {
+ background-color: oklch(from var(--bg-color) calc(l * 2) calc(c * 3) h / 0.8);
+ border-color: oklch(from var(--border-color) calc(l * 1.5) c h);
+ color: oklch(from var(--text-color) calc(l * 0.5) c h);
+ }
+ &:is(.dark *) ::selection {
+ background-color: oklch(from var(--bg-color) calc(l * 1.2) calc(c * 4) h)
+ }
+ &:is(aside) {
+ display: flex;
+ align-items: flex-start;
+ padding: 1.25rem 1rem 1rem;
+ }
+ @media (min-width: 640px) {
+ &:is(aside) {
+ padding-left: 1.25rem;
+ padding-right: 1.25rem;
+ }
+ }
+ & summary {
+ display: flex;
+ align-items: center;
+ font-weight: 700;
+ height: 3rem;
+ padding-left: 1.25rem;
+ padding-right: 1.25rem;
+ cursor: pointer;
+ }
+ & .icon {
+ margin: -0.1rem 1rem 0 -0.25rem;
+ opacity: 0.9;
+ font-size: 1.2rem;
+ line-height: 1.4;
+ }
+ @media (max-width: 639px) {
+ & .icon {
+ display: none;
+ }
+ }
+ & .icon.arrow {
+ margin-left: auto;
+ transition-property: transform;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 150ms;
+ }
+ & details&[open] .icon.arrow {
+ transform: rotate(180deg);
+ }
+ & .content {
+ line-height: 1.4;
+ }
+ & details& .content {
+ padding: 0 1rem 1rem;
+ }
+ @media (min-width: 640px) {
+ & details& .content {
+ padding: 0 1.25rem 1rem;
+ }
+ }
+}
+/* Cannot be nested */
+.cd-callout::selection {
+ background-color: oklch(from var(--bg-color) calc(l * 0.9) calc(c * 3) h);
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-example-tabs {
+ position: relative;
+ margin-top: 2rem;
+ margin-bottom: 3rem;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+
+ & .example-tabgroup {
+ width: 100%;
+ overflow: hidden;
+ position: relative;
+ border: 1px solid #999;
+ border-radius: 0.4rem;
+ }
+
+ & .example-tablist {
+ z-index: 0;
+ display: flex;
+ border-bottom: 1px solid #999;
+ background-color: rgb(249 250 251);
+ overflow-x: auto;
+ overflow-y: hidden;
+ -ms-scroll-chaining: none;
+ overscroll-behavior: contain;
+ width: 100%;
+ text-align: center;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ font-weight: 500;
+ color: rgb(107 114 128);
+ }
+ & .example-tablist:is(.dark *) {
+ border-color: rgb(75 85 99);
+ background-color: rgb(55 65 81);
+ color: rgb(156 173 175);
+ }
+
+ & .example-tab {
+ user-select: none;
+ border-right-width: 1px;
+ border-color: #999;
+ background-color: rgb(255 255 255);
+ padding: 0.5rem 1.6rem;
+ color: #333;
+ }
+ & .example-tab:is(.dark *) {
+ border-color: rgb(75 85 99);
+ background-color: rgb(31 41 55);
+ color: rgb(255 255 255);
+ }
+ & .example-tab:not(.ui-disabled):not(.ui-selected):hover {
+ background-color: rgb(249 250 251);
+ color: rgb(55 65 81);
+ }
+ & .example-tab:not(.ui-disabled):not(.ui-selected):hover:is(.dark *) {
+ background-color: rgb(55 65 81);
+ color: rgb(255 255 255);
+ }
+ & .example-tab.ui-disabled {
+ color: rgb(193 204 220);
+ }
+ & .example-tab.ui-selected {
+ color: black;
+ background-color: #e7e9ed;
+ }
+ & .example-tab.ui-selected:is(.dark *) {
+ color: white;
+ background-color: #111;
+ }
+
+ & .example-tabpanel {
+ width: 100%;
+ flex-grow: 0;`
+ z-index: 10;
+ overflow: auto;
+ position: relative;
+ max-height: 400px;
+ }
+ & .example-tabpanel.ui-hidden {
+ display: none;
+ }
+ & .example-tabpanel div.highlight {
+ margin: 0;
+ padding: 0;
+ border-radius: 0;
+ font-size: 0.9rem;
+ }
+ & .example-tabpanel div.highlight pre {
+ border-radius: 0;
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-footer {
+ padding-top: 1.25rem;
+ padding-bottom: 1.25rem;
+ padding-left: var(--cd-padding-left);
+ padding-right: var(--cd-padding-right);
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ text-align: center;
+ border-top: 1px solid rgb(228 228 231);
+
+ &:is(.dark *){
+ border-color: rgb(82 82 91);
+ }
+ & .wrapper {
+ display: flex;
+ align-items: center;
+ }
+ & .copy {
+ margin-right: auto;
+ text-align: left;
+ padding: 0 16px;
+ }
+ & .built-with {
+ height: 100%;
+ color: rgb(113 113 122);
+ }
+ & .built-with:is(.dark *) {
+ color: inherit;
+ }
+ & .built-with a {
+ text-decoration: underline;
+ cursor: pointer;
+ }
+ & .themeswitch {
+ margin-left: 1.5rem;
+ margin-right: 0;
+ opacity: 0.8;
+ border-radius: 1rem;
+ background-color: var(--cd-nav-bg-color);
+ transition: opacity 300ms ease-in-out, background 300ms ease-in-out;
+ padding-left: 0.5rem;
+ padding-right: 0.5rem;
+ }
+ & .themeswitch:hover {
+ opacity: 1;
+ background-color: var(--cd-nav-bg-color-hover);
+ }
+ @media (max-width: 640px) {
+ & .built-with,
+ & .themeswitch {
+ display: none;
+ }
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-header {
+ margin-bottom: 2rem;
+
+ & div p {
+ margin-bottom: 0.5rem;
+ font-size: 0.875rem;
+ line-height: 1;
+ font-weight: 600;
+ }
+ & h1 {
+ display: inline-block;
+ font-size: 1.9rem;
+ line-height: 1.25rem;
+ color: rgb(24 24 27);
+ font-weight: 800;
+ margin: 0;
+ }
+ & h1:is(.dark *) {
+ color: rgb(228 228 231);
+ }
+ @media (min-width: 640px) {
+ & h1 {
+ font-size: 2.2rem;
+ }
+ }
+ & p.description {
+ margin-top: 0.25rem;
+ font-size: 1.125rem;
+ line-height: 1.75rem;
+ color: var(--cd-text-color-mild);
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-navbar {
+ display: flex;
+ align-items: center;
+ border-radius: 1rem;
+ padding: 0 0.75rem;
+ font-size: 0.875rem;
+ font-weight: bold;
+ backdrop-filter: blur(4px);
+ background-color: var(--cd-nav-bg-color);
+ box-shadow: rgb(15, 15, 15) 0px 0px 0px 0px inset,
+ rgba(163, 163, 170, 0.3) 0px 0px 0px 1px inset,
+ rgba(255, 255, 255, 0.2) 0px 20px 25px -5px,
+ rgba(255, 255, 255, 0.2) 0px 8px 10px -6px;
+
+ &:is(.dark *) {
+ box-shadow: rgb(255, 255, 255) 0px 0px 0px 0px inset,
+ rgba(63, 63, 70, 0.3) 0px 0px 0px 1px inset,
+ rgba(0, 0, 0, 0.2) 0px 20px 25px -5px,
+ rgba(0, 0, 0, 0.2) 0px 8px 10px -6px;
+ }
+
+ & a {
+ white-space: nowrap;
+ padding: 0.75rem;
+ }
+ & a,
+ & button {
+ opacity: 0.8;
+ transition: opacity 300ms ease-in-out, background 300ms ease-in-out;
+ border-radius: 4px;
+ }
+ & a:hover,
+ & button:hover {
+ opacity: 1;
+ background-color: var(--cd-nav-bg-color-hover);
+ }
+ & a svg {
+ height: 20px;
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-nav-top {
+ z-index: 1000;
+ width: 100%;
+ margin-top: 1rem;
+
+ /* @media ((min-width: 1024px) and (min-height: 640px)) {
+ & {
+ position: sticky;
+ top: 1rem;
+ }
+ } */
+ & .wrapper {
+ margin-left: auto;
+ margin-right: auto;
+ display: flex;
+ max-width: 100rem;
+ align-items: center;
+ padding-left: var(--cd-padding-left);
+ padding-right: var(--cd-padding-right);
+ }
+
+ & .logo {
+ padding: 0.75rem;
+ margin-left: -0.75rem;
+ margin-right: auto;
+ background-color: transparent;
+ transition: background 300ms ease-in-out;
+ }
+ @media (min-width: 640px) {
+ & .logo {
+ border-radius: 4px;
+ backdrop-filter: blur(4px);
+ background-color: var(--cd-nav-bg-color);
+ }
+ }
+
+ & .nav-links {
+ display: none;
+ }
+ @media (min-width: 768px) {
+ & .nav-links {
+ display: inline-flex;
+ }
+ }
+ & .nav-extra {
+ margin-left: 0.75rem;
+ }
+ & .nav-links > .themeswitch {
+ border: none;
+ outline: none;
+ margin-left: 0.25rem;
+ }
+ & .cd-toggle-sidebar {
+ font-size: 1rem;
+ margin-left: 0.75rem;
+ width: 4.5rem;
+ line-height: 1;
+ padding: 0.75rem 0.5rem;
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-nav-global {
+ /* position: sticky; */
+ /* top: 0; */
+ z-index: 0;
+ width: 12rem;
+ border-right-width: 1px;
+ border-color: rgb(228 228 231);
+ padding-right: 1rem;
+ padding-bottom: 2rem;
+ font-size: 0.875rem;
+ line-height: 1.2;
+ flex-shrink: 0;
+ /*
+ @media (min-height: 640px) {
+ & {
+ overflow-y: auto;
+ height: 100vh;
+ top: 3rem;
+ min-height: calc(100vh - 3rem);
+ }
+ } */
+
+ @media (min-width: 1536px) {
+ & {
+ font-size: 1rem;
+ line-height: 1.5rem;
+ width: 18rem;
+ }
+ }
+ &:is(.dark *) {
+ border-color: rgb(82 82 91);
+ }
+
+ & nav {
+ display: flex;
+ width: 100%;
+ flex-direction: column;
+ padding-bottom: 3.5rem;
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-nav-local {
+ position: sticky;
+ top: 5rem;
+ z-index: 0;
+ width: 25rem;
+ height: calc(100vh - 6.5rem);
+ margin-right: -1rem;
+ overflow: hidden;
+ border-left-width: 1px;
+ border-color: rgb(228 228 231);
+
+ &:is(.dark *) {
+ border-color: rgb(82 82 91);
+ }
+ & .wrapper {
+ position: absolute;
+ inset: 0;
+ overflow-y: auto;
+ overflow-x: hidden;
+ -ms-scroll-chaining: none;
+ overscroll-behavior: contain;
+ scroll-behavior: smooth;
+ padding: 1.5rem 0.25rem;
+ font-size: 0.9rem;
+ line-height: 1.2;
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-nav-mobile {
+ position: fixed;
+ left: 0;
+ top: 0;
+ height: 100vh;
+ width: 100%;
+ min-width: 360px;
+ max-width: 640px;
+ -ms-scroll-chaining: none;
+ overscroll-behavior: contain;
+ margin: 0;
+ padding: 0 0 4rem 0;
+ background-color: var(--cd-bg-color-hover);
+ color: var(--cd-text-color);
+
+ transition: all 0.2s allow-discrete;
+ /* Final state of the exit animation */
+ opacity: 0;
+ transform: translateX(-100%);
+
+ &:popover-open {
+ opacity: 1;
+ transform: translateX(0);
+ }
+ /* Needs to be after the previous &:popover-open rule
+ to take effect, as the specificity is the same */
+ @starting-style {
+ &:popover-open {
+ opacity: 0;
+ transform: translateX(-100%);
+ }
+ }
+
+ @media (min-width: 640px) {
+ & {
+ border-right: 1px solid var(--cd-border-color);
+ }
+ }
+ & header {
+ margin: 1rem 0;
+ display: flex;
+ align-items: center;
+ padding-left: var(--cd-padding-left);
+ padding-right: var(--cd-padding-right);
+ }
+ & .logo {
+ margin-right: auto;
+ }
+ & .themeswitch {
+ border: none;
+ background: none;
+ outline: none;
+ }
+ & .cd-toggle-sidebar {
+ font-size: 1rem;
+ margin-left: 0.75rem;
+ width: 4.5rem;
+ line-height: 1;
+ padding: 0.75rem 0.5rem;
+ }
+
+ & .toc {
+ margin-bottom: 1.25rem;
+ display: flex;
+ flex-direction: column;
+ -ms-scroll-chaining: none;
+ overscroll-behavior: contain;
+ padding-left: var(--cd-padding-left);
+ padding-right: var(--cd-padding-right);
+ font-size: 1rem;
+ line-height: 1.5rem;
+ }
+}
+/* Transition for the popover's backdrop.
+ ::backdrop cannot be nested */
+.cd-nav-mobile::backdrop {
+ transition: all 0.5s allow-discrete;
+ /* Final state of the exit animation */
+ backdrop-filter: blur(0);
+ background-color: rgb(0 0 0 / 0%);
+}
+.cd-nav-mobile:popover-open::backdrop {
+ backdrop-filter: blur(2px);
+ background-color: rgb(0 0 0 / 15%);
+}
+@starting-style {
+ .cd-nav-mobile:popover-open::backdrop {
+ backdrop-filter: blur(0);
+ background-color: rgb(0 0 0 / 0%);
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-page-single > main {
+ margin: 0;
+ max-width: 100%;
+ padding: 0;
+}
+
+.cd-page {
+ & .page-wrapper {
+ z-index: 10;
+ margin-left: auto;
+ margin-right: auto;
+ display: flex;
+ max-width: 100rem;
+ padding-top: 1rem;
+ padding-left: var(--cd-padding-left);
+ padding-right: var(--cd-padding-right);
+ padding-bottom: 1.5rem;
+ min-width: 360px;
+ }
+ & .page-wrapper > main {
+ width: 100%;
+ padding-top: 1rem;
+ }
+ @media (min-width: 640px) {
+ & {
+ padding-bottom: 1rem;
+ }
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-prevnext {
+ display: flex;
+ align-items: stretch;
+ width: 100%;
+ margin-top: 2rem;
+ padding-top: 2rem;
+ padding-bottom: 2rem;
+ padding-left: var(--cd-padding-left);
+ padding-right: var(--cd-padding-right);
+ border-top: 1px solid var(--cd-border-color);
+ font-family: var(--cd-font-sans);
+
+ & a.prev,
+ & a.next {
+ display: flex;
+ align-items: center;
+ padding: 0.75rem 0.25rem;
+ text-decoration: none;
+ width: 50%;
+ border: 1px solid var(--cd-border-color);
+ color: var(--cd-text-color);
+ border-radius: 10px;
+ transition: all 0.2s ease-in;
+ }
+ & a.prev {
+ margin-right: 1.25rem;
+ justify-content: flex-start;
+ text-align: left;
+ }
+ & a.next {
+ margin-left: auto;
+ justify-content: flex-end;
+ text-align: right;
+ }
+ & a.prev:hover,
+ & a.next:hover {
+ border-color: rgb(113, 113, 122);
+ }
+ &:is(.dark *) a.prev:hover,
+ &:is(.dark *) a.next:hover {
+ border-color: rgb(150, 150, 150);
+ }
+ & .section {
+ font-size: 0.875rem;
+ line-height: 1;
+ color: rgb(113, 113, 122);
+ margin-bottom: 0.1rem;
+ }
+ &:is(.dark *) .section {
+ color: rgb(150, 150, 150);
+ }
+ & .title {
+ font-size: 1rem;
+ line-height: 1.1;
+ }
+ & i {
+ opacity: 0.8;
+ font-style: normal;
+ font-size: 1.4rem;
+ padding: 0 0.5rem;
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-theme-switch {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ -webkit-tap-highlight-color: transparent;
+
+ & {
+ font-weight: 400;
+ height: 2.5rem;
+ width: 2.5rem;
+ flex-grow: 0;
+ padding: 0.2rem;
+ }
+ @media (min-width: 1024px) {
+ & {
+ width: auto;
+ }
+ }
+ & svg {
+ padding: 0.3rem;
+ margin: 0;
+ }
+ &:is(.dark *) svg {
+ padding: 0.1rem;
+ }
+ & .sun-and-moon {
+ pointer-events: none;
+ display: block;
+ height: 100%;
+ width: 100%;
+ }
+ & .sun {
+ transform-origin: center;
+ transform: scale(1, 1);
+ transform: translate3d(0, 0, 0);
+ fill: #3f3f46;
+ stroke: transparent;
+ }
+ &:hover .sun {
+ fill: #27272a;
+ }
+ &:focus-visible .sun {
+ fill: #27272a;
+ }
+ @media (prefers-reduced-motion: no-preference) {
+ & .sun {
+ transition-property: transform;
+ transition-timing-function: cubic-bezier(0.5, 1.25, 0.75, 1.25);
+ transition-duration: 0.5s;
+ }
+ }
+ & .sun:is(.dark *) {
+ transform: scale(1.75, 1).75;
+ fill: #e4e4e7;
+ }
+ &:hover .sun:is(.dark *) {
+ fill: #f4f4f5;
+ }
+ &:focus-visible .sun:is(.dark *) {
+ fill: #f4f4f5;
+ }
+ @media (prefers-reduced-motion: no-preference) {
+ & .sun:is(.dark *) {
+ transition-timing-function: cubic-bezier(0.25, 0, 0.3, 1);
+ transition-duration: 250ms;
+ }
+ }
+ & .sun-beams {
+ transform-origin: center;
+ stroke: #3f3f46;
+ stroke-width: 2;
+ }
+ &:hover .sun-beams {
+ stroke: #27272a;
+ }
+ &:focus-visible .sun-beams {
+ stroke: #27272a;
+ }
+ @media (prefers-reduced-motion: no-preference) {
+ & .sun-beams {
+ transition-property: transform, opacity;
+ transition-timing-function: cubic-bezier(0.5, 1.5, 0.75, 1.25);
+ transition-duration: 400ms;
+ }
+ }
+ & .sun-beams:is(.dark *) {
+ transform: translate3d(0, 0, 0);
+ transform: rotate(-25deg);
+ stroke: #e4e4e7;
+ opacity: 0;
+ }
+ &:hover .sun-beams:is(.dark *) {
+ stroke: #f4f4f5;
+ }
+ &:focus-visible .sun-beams:is(.dark *) {
+ stroke: #f4f4f5;
+ }
+ @media (prefers-reduced-motion: no-preference) {
+ & .sun-beams:is(.dark *) {
+ transition-duration: 150ms;
+ }
+ }
+ & .moon {
+ transform-origin: center;
+ fill: #52525b;
+ }
+ &:hover .moon {
+ fill: #71717a;
+ }
+ & .moon circle {
+ transform: translate3d(0, 0, 0);
+ }
+ @media (prefers-reduced-motion: no-preference) {
+ & .moon circle {
+ transition-property: transform;
+ transition-timing-function: cubic-bezier(0, 0, 0, 1);
+ transition-duration: 0.3s;
+ }
+ }
+ & .moon circle:is(.dark *) {
+ transform: translateX(-7px);
+ }
+ @media (prefers-reduced-motion: no-preference) {
+ & .moon circle:is(.dark *) {
+ transition-delay: 0.3s;
+ }
+ }
+ & .light-text,
+ & .dark-text {
+ padding: 0.5rem;
+ padding-left: 0;
+ display: none;
+ white-space: nowrap;
+ font-weight: bold;
+ text-align: left;
+ }
+ @media (min-width: 1024px) {
+ & .light-text {
+ display: block;
+ }
+ & .light-text:is(.dark *) {
+ display: none;
+ }
+ & .dark-text:is(.dark *) {
+ display: block;
+ }
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-toc {
+ & details,
+ & section {
+ margin-top: 1.5rem;
+ }
+
+ & summary {
+ margin-bottom: 0.5rem;
+ font-weight: 600;
+ color: rgb(39 39 42);
+ }
+ & summary:is(.dark *) {
+ color: rgb(244 244 245);
+ }
+
+ & h2 {
+ margin-bottom: 0.5rem;
+ font-weight: 600;
+ color: rgb(39 39 42);
+ }
+ & h2:is(.dark *) {
+ color: rgb(244 244 245);
+ }
+
+ & .page {
+ border-left-width: 2px;
+ border-color: rgb(244 244 245);
+ padding-left: 0.5rem;
+ }
+ & .page:hover {
+ border-color: rgb(212 212 216);
+ }
+
+ & .page:is(.dark *) {
+ border-color: rgb(63 63 70 / 0.5);
+ }
+ & .page:is(.dark *):hover {
+ border-color: rgb(161 161 170);
+ }
+
+ & a {
+ position: relative;
+ display: flex;
+ align-items: center;
+ border-radius: 0.25rem;
+ border-width: 1px;
+ border-color: transparent;
+ line-height: 1.2;
+ margin: 0;
+ padding-top: 0.25rem;
+ padding-bottom: 0.25rem;
+ padding-left: 0.5rem;
+ padding-right: 0.5rem;
+ color: rgb(63 63 70);
+ }
+ & a:hover {
+ color: rgb(0 0 0);
+ }
+ & a:is(.dark *) {
+ color: rgb(161 161 170);
+ }
+ & a:is(.dark *):hover {
+ color: rgb(244 244 245);
+ }
+ & .active a {
+ border-color: rgb(228 228 231);
+ background-color: rgb(244 244 245);
+ font-weight: bold;
+ color: rgb(39 39 42);
+ }
+ & .active:is(.dark *) a {
+ color: black;
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-toc-page {
+ margin-top: -0.25rem;
+
+ & li {
+ position: relative;
+ display: flex;
+ align-items: center;
+ }
+
+ & li::after {
+ content: "";
+ display: block;
+ position: absolute;
+ inset: 0;
+ background-color: var(--cd-brand-color);
+ border-radius: 0.25rem;
+ opacity: 0;
+ transition: opacity 0.2s ease-in-out;
+ z-index: -1;
+ }
+
+ & li:has(a.active)::after {
+ opacity: 0.15;
+ }
+
+ & a {
+ display: flex;
+ align-items: center;
+ color: rgb(82 82 91);
+ padding: 0.3rem 0 0.3rem 0.5rem;
+ }
+ & a:is(.dark *) {
+ color: rgb(161 161 170);
+ }
+ & a:hover:not(.active) {
+ & span {
+ text-decoration: underline;
+ }
+ }
+
+ & li.indent-0 a {
+ padding-left: 0rem;
+ font-size: smaller;
+ text-transform: uppercase;
+ font-weight: bold;
+ border-bottom-width: 1px;
+ }
+ & li.indent-1 a {
+ padding-left: 0rem;
+ font-weight: bold;
+ }
+ & li.indent-2 a { padding-left: 1rem; }
+ & li.indent-3 a { padding-left: 1.5rem; }
+ & li.indent-4 a { padding-left: 2rem; }
+ & li.indent-5 a { padding-left: 2.5rem; }
+ & li.indent-6 a { padding-left: 3rem; }
+
+ & li a::before {
+ content: "";
+ display: inline-flex;
+ align-items: center;
+ justify-content: right;
+ line-height: 1;
+ height: 8px;
+ width: 8px;
+ margin: 0 0.5rem 0 0.5rem;
+ flex-grow: 0;
+ flex-shrink: 0;
+ }
+ li.indent-2 a::before { content: "○" }
+ li.indent-3 a::before { content: "•" }
+ li.indent-4 a::before { content: "·" }
+ li.indent-5 a::before { content: "⁃" }
+ li.indent-6 a::before { content: "·" }
+
+ & li a.active::before {
+ content: "";
+ border-radius: 3px;
+ background-color: var(--cd-brand-color);
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+.cd-nav-global,
+.cd-nav-local,
+.cd-nav-mobile {
+ display: none;
+}
+.cd-nav-mobile:popover-open,
+.cd-nav-top .cd-toggle-sidebar {
+ display: block;
+}
+
+@media (min-width: 924px) {
+ .cd-nav-mobile,
+ .cd-nav-top .cd-toggle-sidebar {
+ display: none;
+ }
+}
+
+@media (min-width: 924px) {
+ .cd-nav-global {
+ display: block;
+ }
+}
+
+@media (min-width: 1024px) {
+ .cd-page .page-wrapper > main {
+ margin-left: 2.5rem;
+ margin-right: 2.5rem;
+ }
+ .cd-nav-local {
+ display: block;
+ }
+}