@font-face{font-display:swap;font-family:InterVariable;font-style:normal;font-weight:100 900;src:url(res/InterVariable.woff2) format("woff2-variations"),url(res/InterVariable.woff2) format("woff2");src:url(res/InterVariable.woff2) format("woff2") tech("variations")}@font-face{font-display:swap;font-family:InterVariable;font-style:italic;font-weight:100 900;src:url(res/InterVariable-Italic.woff2) format("woff2-variations"),url(res/InterVariable-Italic.woff2) format("woff2");src:url(res/InterVariable-Italic.woff2) format("woff2") tech("variations")}@font-face{font-display:swap;font-family:JetBrainsMono;font-style:normal;font-weight:100 800;src:url(res/JetBrainsMono.woff2) format("woff2")}@font-face{font-display:swap;font-family:JetBrainsMono;font-style:italic;font-weight:100 800;src:url(res/JetBrainsMono-Italic.woff2) format("woff2")}@font-feature-values "InterVariable"{@character-variant{cv01:1;cv02:2;cv03:3;cv04:4;cv05:5;cv06:6;cv07:7;cv08:8;cv09:9;cv10:10;cv11:11;cv12:12;cv13:13;alt-1:1;alt-3:9;open-4:2;open-6:3;open-9:4;lc-l-with-tail:5;simplified-u:6;alt-double-s:7;uc-i-with-serif:8;uc-g-with-spur:10;single-story-a:11;compact-lc-f:12;compact-lc-t:13}@styleset{ss01:1;ss02:2;ss03:3;ss04:4;ss05:5;ss06:6;ss07:7;ss08:8;open-digits:1;disambiguation:2;disambiguation-except-zero:4;round-quotes-and-commas:3;square-punctuation:7;square-quotes:8;circled-characters:5;squared-characters:6}}:root{--spacing:4rem;--spacing-x:2rem;--mono-font-family:JetBrainsMono,SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;--line-height:1.5rem;--header-height:4rem;--menu-width:260px;--bgcolor:#f0f0f2;--bgcolor-block:#fff;--fg:80,81,82;--fgcolor:rgb(var(--fg));--fgcolor-neg:#fff;--fgcolor-h1:#000;--fgcolor-h2:#000;--fgcolor-h3:#000;--fgcolor-hover:#000;--bgcolor-hover:rgba(var(--fg),0.05);--bgcolor-active:rgba(var(--fg),0.12);--bgcolor-highlight:#c8fff3;--fgcolor-dim:rgba(var(--fg),0.4);--fgcolor-dim2:rgba(var(--fg),0.6);--border-color:color-mix(in oklab,var(--fgcolor) 10%,var(--bgcolor));--link-color:#1f56a3;--link-color-hover:var(--fgcolor-hover);--link-color-visited:var(--link-color);--bgcolor-include-rubric:var(--fgcolor);--fgcolor-include-rubric:var(--fgcolor-neg);--fgcolor-include-rubric-hover:var(--fgcolor-neg);--goto-popover-bg:#fff;--goto-popover-shadow:rgba(0,0,0,.12);--goto-popover-selection-bg:#fff2d4;--code-bgcolor:#fafafa;--code-bgcolor-inline:#eee;--code-border-color:color-mix(in oklab,var(--code-bgcolor) 96%,#000);--code-shadow-color:color-mix(in srgb,var(--code-border-color) 20%,transparent);--code-fgcolor-keyword:#72577c;--code-fgcolor-type:#005981;--code-fgcolor-builtin:var(--code-fgcolor-keyword);--anchor-highlight-bgcolor:#fe0;--anchor-highlight-fgcolor:#000;font-family:InterVariable,-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;font-size:16px;font-variant-alternates:character-variant(simplified-u,uc-g-with-spur);font-weight:430;line-height:var(--line-height)}@media (prefers-color-scheme:dark){:root{--bgcolor:#0e0f10;--bgcolor-block:#0e0f10;--fg:174,174,174;--fgcolor-neg:#000;--fgcolor-h1:#fff;--fgcolor-h2:#fff;--fgcolor-h3:#fff;--fgcolor-hover:#fff;--bgcolor-highlight:#004745;--border-color:color-mix(in oklab,var(--fgcolor) 18%,var(--bgcolor));--link-color:#5f9d5c;--link-color-hover:#69f261;--goto-popover-bg:color-mix(in oklab,#fff 10%,var(--bgcolor));--goto-popover-shadow:rgba(0,0,0,.45);--goto-popover-selection-bg:color-mix(in oklab,orange 40%,var(--goto-popover-bg));--code-bgcolor:color-mix(in oklab,var(--fgcolor) 5%,var(--bgcolor));--code-bgcolor-inline:color-mix(in oklab,var(--fgcolor) 15%,var(--bgcolor));--code-border-color:color-mix(in oklab,var(--fgcolor) 12%,var(--bgcolor));--code-shadow-color:rgba(0,0,0,.3);--code-fgcolor-keyword:#b3c7db;--code-fgcolor-type:#aaeae3;--anchor-highlight-bgcolor:color-mix(in oklab,orange 60%,var(--goto-popover-bg));--anchor-highlight-fgcolor:#fff;--anchor-highlight-fgcolor2:#000;font-weight:420;letter-spacing:.01em}}:root.debug *{outline:1px solid hsla(0,0%,50%,.3)}body{background-color:var(--bgcolor);color:var(--fgcolor);display:block;line-height:1.4;margin:0;min-height:100vh;padding:0;position:relative;scrollbar-gutter:stable}body>.grain{background-image:url(res/grain.png);background-repeat:repeat;background-size:256px;inset:0;opacity:.018;pointer-events:none;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:105}@media only screen and (max-width:600px){body>.grain{display:none}}body>.main{--spacing:min(4rem,3vw);--block-padding:2rem;--block-size:320px;--block-size-full-width:var(--block-size)}@media only screen and (max-width:500px){body>.main{--spacing:1.5rem;--block-padding:1.5rem;--block-size:100%}}body>.main{align-content:start;box-sizing:border-box;display:grid;gap:var(--spacing);grid-template-columns:repeat(auto-fill,minmax(var(--block-size),1fr));margin:0;padding:var(--spacing);padding-bottom:calc(var(--spacing)*2)}@media only screen and (min-width:1920px){body>.main{--padding-x:calc(50vw - 960px + var(--spacing));padding-left:var(--padding-x);padding-right:var(--padding-x)}}@media (prefers-color-scheme:dark){body>.main.alt1{background-image:linear-gradient(to bottom,var(--bgcolor),var(--bgcolor) 10%,#18191a)}}body>.main.alt2{background:#fff}@media (prefers-color-scheme:dark){body>.main.alt2{background:#333435}}body>.main.footer{opacity:.5;padding-bottom:var(--spacing)}body>.main.footer a[href]{color:inherit}body>.main.footer{grid-template-columns:1fr 1fr}body>.main>div,body>.main>h1,body>.main>h2,body>.main>h3,body>.main>p{border-radius:1.5px;box-sizing:border-box;display:block;margin:0;padding:0}body>.main>.new-row{grid-column:1}body>.main>.block{background:var(--bgcolor-block);padding:var(--block-padding)}body>.main>div{box-sizing:border-box}body>.main>div.span-2{grid-column:span 2}@media only screen and (max-width:800px){body>.main>div.span-2{grid-column:1/-1}}body>.main>div>:first-child{margin-top:0}body>.main>div>pre{background:none;border:none;border-radius:0;padding:0}body>.main>.full-width,body>.main>h1,body>.main>h2,body>.main>h3{grid-column:1/-1}body>.main>.full-width.collapse,body>.main>h1.collapse,body>.main>h2.collapse,body>.main>h3.collapse{aspect-ratio:auto;height:auto}body>.main>.start-column-2{grid-column:2/-1}@media only screen and (max-width:1200px){body>.main>.start-column-2{grid-column:1/-1}}body>.main>.end-of-row{grid-column:-2/-1}body>.main>h1,body>.main>h2,body>.main>h3{aspect-ratio:auto;background:none;font-size:3rem;font-weight:440;height:auto;letter-spacing:-.01em;line-height:1.1;margin-top:var(--spacing);padding:0}body>.main>h1:first-child,body>.main>h2:first-child,body>.main>h3:first-child{margin-top:0}body>.main>h1>a[href],body>.main>h2>a[href],body>.main>h3>a[href]{color:inherit}body>.main>h1>a:hover,body>.main>h2>a:hover,body>.main>h3>a:hover{color:inherit;text-decoration:none}body>.main>.logo h1{display:none}body>.main>.logo svg{--top-slack-in-svg:3px;height:90px;width:116px}@media (prefers-color-scheme:light){body>.main>.logo svg{--fgcolor:#fff}}body>.main>.logo svg{zoom:min(4,calc(4vw / 1rem));margin:calc(var(--top-slack-in-svg)*-1) 0 0 0;transform-origin:top left}@media only screen and (max-width:600px){body>.main>.logo svg{zoom:2}}body>.main>.menu{display:flex;flex-direction:column;grid-column:3/-1;justify-content:center;list-style:none;margin:-.5rem 0 0;padding-inline-start:0}@media only screen and (max-width:1200px){body>.main>.menu{grid-column:-2/-1}}@media only screen and (max-width:720px){body>.main>.menu{border-bottom:1px solid var(--fgcolor);border-top:1px solid var(--fgcolor);padding:1rem 0}}body>.main>.menu>li{font-weight:450;margin:0;padding:0}body>.main>.menu>li>a[href]{border-radius:3px;color:inherit;display:inline-block;margin-left:-.5rem;padding:.25rem .5rem}body>.main>.menu>li>a[href]:hover{background:#fff;color:#000}@media (prefers-color-scheme:dark){body>.main>.menu>li>a[href]:hover{background:#333;color:#fff}}body>.main>.menu>li>a[href]:hover{text-decoration:none}body>.main>.menu>li>a[href].download{background-color:#ff0;color:#000;color:#fff;font-weight:500}@media (prefers-color-scheme:dark){body>.main>.menu>li>a[href].download{color:#000}}body>.main>.menu>li>a[href].download{background-color:#25d560}@supports (color:color(display-p3 1 1 1)){body>.main>.menu>li>a[href].download{background-color:color(display-p3 .145 .8 .3765)}}body>.main>.menu>li>a[href].download:hover{background:#000;color:#fff}@media (prefers-color-scheme:dark){body>.main>.menu>li>a[href].download:hover{background:#fff;color:#000}}body>.main>.diagram{grid-column:span 2;margin-bottom:var(--line-height);transform-origin:top left}body>.main>.diagram>svg{max-width:100%}body>.main>.diagram>svg circle[fill],body>.main>.diagram>svg path[fill],body>.main>.diagram>svg rect[fill]{fill:var(--fgcolor)}body>.main>.diagram>svg circle[stroke],body>.main>.diagram>svg line[stroke],body>.main>.diagram>svg path[stroke],body>.main>.diagram>svg rect[stroke]{stroke:var(--fgcolor)}body>.main>.diagram>.complement{display:none;margin-left:var(--spacing)}body>.main{container-name:grid1;container-type:inline-size}body ul{padding-inline-start:.9rem}body ul>li>:first-child{margin-top:0}body ul>li>:last-child{margin-bottom:0}body ul>li{margin:1em 0}body .example1{grid-column:span 2;overflow:hidden;overflow-x:auto}@media only screen and (min-width:1505px){body .example1{grid-column:3/-1}}@media only screen and (max-width:1260px){body .example1{grid-column:1/-1}}@media only screen and (max-width:820px){body .example1{grid-column:span 1}}body .example-app-warning{font-size:2rem;padding:4px}body .example-app-warning-symbol{background-color:var(--code-bgcolor);display:block;font-family:JetBrainsMono,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:2rem;padding:4px}@container grid1 (max-width: calc(1355px + min(4rem, 4vw))){body>.main>.diagram{display:flex;grid-column:1/-1}body>.main>.diagram>.complement{display:block}body>.main>.diagram.complement{display:none}}@container grid1 (max-width: calc(1200px)){body>.main>.diagram>.complement{display:none}}h1,h2,h3,hr,p,pre{text-wrap-style:pretty;text-wrap-style:balance;margin:var(--line-height) 0}h1,h2,h3{color:var(--fgcolor-h1);font-size:1rem;font-weight:inherit;font-weight:500}a[href]{color:var(--link-color);text-decoration:none}a[href]:visited{color:var(--link-color-visited)}a[href]:hover{color:var(--link-color-hover);text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--link-color-hover) 25%,transparent)}code,pre{font-family:JetBrainsMono,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:94%;font-variant-ligatures:no-contextual;font-weight:400;line-height:inherit;padding:0}pre{background:var(--code-bgcolor);border:1px solid var(--code-border-color);border-radius:3px;overflow-x:auto;padding:.8em 1em}pre code{background:none;padding:0;word-break:normal}pre{color:#111}pre .hl-comment{color:#868685}pre .hl-type{color:var(--code-fgcolor-type)}pre .hl-type a[href],pre .hl-type a[href]:hover,pre .hl-type a[href]:visited{color:inherit}pre .hl-title{color:#000;font-weight:700}pre .hl-keyword{color:var(--code-fgcolor-keyword)}pre .hl-constant,pre .hl-number{color:#760054}pre .hl-string{color:#0d6431}pre .hl-built_in{color:var(--code-fgcolor-builtin)}@media (prefers-color-scheme:dark){pre{color:#eee}pre .hl-comment{color:#888}pre .hl-title{color:#fff}pre .hl-keyword{color:var(--code-fgcolor-keyword)}pre .hl-constant,pre .hl-number,pre .hl-string{color:#92ccb0}pre .hl-built_in{color:var(--code-fgcolor-builtin)}}.letter{grid-column:1/span 2}@media only screen and (max-width:1090px){.letter{grid-column:1/span 1}}body>.main>.download-square{--bgcolor:#505152;--fgcolor:#bebfc0;--link-color-hover:#fff;background:var(--bgcolor);background:url(res/ziggy.png);background-repeat:repeat;background-size:30px;border-radius:3px;color:var(--fgcolor);grid-column:span 2;padding:2rem 1rem 1rem}@media only screen and (max-width:1505px){body>.main>.download-square{aspect-ratio:1/1;grid-column-end:-1;grid-column-start:3}}@media only screen and (max-width:1090px){body>.main>.download-square{grid-column:2/span 1}}@media only screen and (max-width:703px){body>.main>.download-square{aspect-ratio:auto;grid-column:1/-1;padding:3rem 1rem 2rem}}body>.main>.download-square>p{align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;margin:0}body>.main>.download-square>p>a{align-items:center;align-self:start;align-self:center;color:var(--fgcolor);display:flex;flex-direction:column}body>.main>.download-square>p>a[href]:hover{color:var(--link-color-hover);text-decoration:none}body>.main>.download-square>p>a[href]:hover>span{text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--link-color-hover) 30%,transparent)}body>.main>.download-square>p>a img{max-width:256px}@media only screen and (max-width:1350px){body>.main>.download-square>p>a img{max-width:200px}}@media only screen and (max-width:703px){body>.main>.download-square>p>a img{max-width:128px}}body>.main>.download-square>p>a span{font-weight:500}body>.main>.download-square>p>a small{display:block;margin-top:.5rem;text-decoration:none}body>.main>.download-square>p>small{margin-top:1rem}svg{display:block}a>svg{display:inline-block}svg.glyph circle[fill],svg.glyph path[fill],svg.glyph rect[fill]{fill:var(--fgcolor)}svg.glyph circle[stroke],svg.glyph line[stroke],svg.glyph path[stroke],svg.glyph rect[stroke]{stroke:var(--fgcolor)}.main2{--spacing:min(4rem,3vw);--block-padding:2rem;--block-size:320px;--block-size-full-width:var(--block-size)}@media only screen and (max-width:500px){.main2{--spacing:1.5rem;--block-padding:1.5rem;--block-size:100%}}.main2 h1,.main2 h2,.main2 h3{aspect-ratio:auto;background:none;font-size:3rem;font-weight:440;height:auto;letter-spacing:-.01em;line-height:1.1;margin-top:var(--spacing);padding:0}.main2 h1:first-child,.main2 h2:first-child,.main2 h3:first-child{margin-top:0}.main2 h1>a[href],.main2 h2>a[href],.main2 h3>a[href]{color:inherit}.main2 h1>a:hover,.main2 h2>a:hover,.main2 h3>a:hover{color:inherit;text-decoration:none}.main2.alt3{border-bottom:2px solid var(--fgcolor-dim)}.main2{align-content:start;box-sizing:border-box;display:flex;flex-direction:column;gap:var(--spacing);margin:0;padding:var(--spacing);padding-bottom:calc(var(--spacing)*2)}.emailform input{background:transparent;border:2px solid var(--fgcolor);border-radius:3px;color:var(--fgcolor);font-size:16px;padding:.5rem 1rem}.emailform .content{display:flex;flex-direction:column;gap:16px;max-width:800px;width:100%}.emailform .btn{background:var(--fgcolor);border-radius:3px;box-sizing:border-box;color:var(--bgcolor);display:inline-block;font-size:16px;font-weight:700;padding:.5rem .75rem}