pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
  Theme: GitHub Dark
  Description: Dark theme as seen on github.com
  Author: github.com
  Maintainer: @Hirse
  Updated: 2021-05-15

  Outdated base version: https://github.com/primer/github-syntax-dark
  Current colors taken from GitHub's CSS
*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#79c0ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-code,.hljs-comment,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}@keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide--draggable>.splide__slider>.splide__track,.splide--draggable>.splide__track{-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide--fade>.splide__slider>.splide__track>.splide__list,.splide--fade>.splide__track>.splide__list{display:block}.splide--fade>.splide__slider>.splide__track>.splide__list>.splide__slide,.splide--fade>.splide__track>.splide__list>.splide__slide{left:0;opacity:0;position:absolute;top:0;z-index:0}.splide--fade>.splide__slider>.splide__track>.splide__list>.splide__slide.is-active,.splide--fade>.splide__track>.splide__list>.splide__slide.is-active{opacity:1;position:relative;z-index:1}.splide--rtl{direction:rtl}.splide--ttb.is-active>.splide__slider>.splide__track>.splide__list,.splide--ttb.is-active>.splide__track>.splide__list{display:block}.splide__container{box-sizing:border-box;position:relative}.splide__list{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important;transform-style:preserve-3d}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide__progress__bar{width:0}.splide{outline:none;position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;list-style-type:none!important;margin:0;outline:none;position:relative}.splide__slide img{vertical-align:bottom}.splide__slider{position:relative}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #999;border-left-color:transparent;border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__track{overflow:hidden;position:relative;z-index:0}/*! PhotoSwipe main CSS by Dmitry Semenov | photoswipe.com | MIT license */.pswp{display:none;position:absolute;width:100%;height:100%;left:0;top:0;overflow:hidden;-ms-touch-action:none;touch-action:none;z-index:1500;-webkit-text-size-adjust:100%;-webkit-backface-visibility:hidden;outline:none}.pswp *{-webkit-box-sizing:border-box;box-sizing:border-box}.pswp img{max-width:none}.pswp--animate_opacity{opacity:0.001;will-change:opacity;-webkit-transition:opacity 333ms cubic-bezier(0.4, 0, 0.22, 1);transition:opacity 333ms cubic-bezier(0.4, 0, 0.22, 1)}.pswp--open{display:block}.pswp--zoom-allowed .pswp__img{cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.pswp--zoomed-in .pswp__img{cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.pswp--dragging .pswp__img{cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.pswp__bg{position:absolute;left:0;top:0;width:100%;height:100%;background:#000;opacity:0;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-backface-visibility:hidden;will-change:opacity}.pswp__scroll-wrap{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden}.pswp__container,.pswp__zoom-wrap{-ms-touch-action:none;touch-action:none;position:absolute;left:0;right:0;top:0;bottom:0}.pswp__container,.pswp__img{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}.pswp__zoom-wrap{position:absolute;width:100%;-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top;-webkit-transition:-webkit-transform 333ms cubic-bezier(0.4, 0, 0.22, 1);transition:transform 333ms cubic-bezier(0.4, 0, 0.22, 1)}.pswp__bg{will-change:opacity;-webkit-transition:opacity 333ms cubic-bezier(0.4, 0, 0.22, 1);transition:opacity 333ms cubic-bezier(0.4, 0, 0.22, 1)}.pswp--animated-in .pswp__bg,.pswp--animated-in .pswp__zoom-wrap{-webkit-transition:none;transition:none}.pswp__container,.pswp__zoom-wrap{-webkit-backface-visibility:hidden}.pswp__item{position:absolute;left:0;right:0;top:0;bottom:0;overflow:hidden}.pswp__img{position:absolute;width:auto;height:auto;top:0;left:0}.pswp__img--placeholder{-webkit-backface-visibility:hidden}.pswp__img--placeholder--blank{background:#222}.pswp--ie .pswp__img{width:100% !important;height:auto !important;left:0;top:0}.pswp__error-msg{position:absolute;left:0;top:50%;width:100%;text-align:center;font-size:14px;line-height:16px;margin-top:-8px;color:#CCC}.pswp__error-msg a{color:#CCC;text-decoration:underline}/*! PhotoSwipe Default UI CSS by Dmitry Semenov | photoswipe.com | MIT license */.pswp__button{width:44px;height:44px;position:relative;background:none;cursor:pointer;overflow:visible;-webkit-appearance:none;display:block;border:0;padding:0;margin:0;float:right;opacity:0.75;-webkit-transition:opacity 0.2s;transition:opacity 0.2s;-webkit-box-shadow:none;box-shadow:none}.pswp__button:focus,.pswp__button:hover{opacity:1}.pswp__button:active{outline:none;opacity:0.9}.pswp__button::-moz-focus-inner{padding:0;border:0}.pswp__ui--over-close .pswp__button--close{opacity:1}.pswp__button,.pswp__button--arrow--left:before,.pswp__button--arrow--right:before{background:url(default-skin.png) 0 0 no-repeat;background-size:264px 88px;width:44px;height:44px}@media (-webkit-min-device-pixel-ratio: 1.1), (-webkit-min-device-pixel-ratio: 1.09375), (min-resolution: 105dpi), (min-resolution: 1.1dppx){.pswp--svg .pswp__button,.pswp--svg .pswp__button--arrow--left:before,.pswp--svg .pswp__button--arrow--right:before{background-image:url(default-skin.svg)}.pswp--svg .pswp__button--arrow--left,.pswp--svg .pswp__button--arrow--right{background:none}}.pswp__button--close{background-position:0 -44px}.pswp__button--share{background-position:-44px -44px}.pswp__button--fs{display:none}.pswp--supports-fs .pswp__button--fs{display:block}.pswp--fs .pswp__button--fs{background-position:-44px 0}.pswp__button--zoom{display:none;background-position:-88px 0}.pswp--zoom-allowed .pswp__button--zoom{display:block}.pswp--zoomed-in .pswp__button--zoom{background-position:-132px 0}.pswp--touch .pswp__button--arrow--left,.pswp--touch .pswp__button--arrow--right{visibility:hidden}.pswp__button--arrow--left,.pswp__button--arrow--right{background:none;top:50%;margin-top:-50px;width:70px;height:100px;position:absolute}.pswp__button--arrow--left{left:0}.pswp__button--arrow--right{right:0}.pswp__button--arrow--left:before,.pswp__button--arrow--right:before{content:'';top:35px;background-color:rgba(0,0,0,0.3);height:30px;width:32px;position:absolute}.pswp__button--arrow--left:before{left:6px;background-position:-138px -44px}.pswp__button--arrow--right:before{right:6px;background-position:-94px -44px}.pswp__counter,.pswp__share-modal{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pswp__share-modal{display:block;background:rgba(0,0,0,0.5);width:100%;height:100%;top:0;left:0;padding:10px;position:absolute;z-index:1600;opacity:0;-webkit-transition:opacity 0.25s ease-out;transition:opacity 0.25s ease-out;-webkit-backface-visibility:hidden;will-change:opacity}.pswp__share-modal--hidden{display:none}.pswp__share-tooltip{z-index:1620;position:absolute;background:#FFF;top:56px;border-radius:2px;display:block;width:auto;right:44px;-webkit-box-shadow:0 2px 5px rgba(0,0,0,0.25);box-shadow:0 2px 5px rgba(0,0,0,0.25);-webkit-transform:translateY(6px);-ms-transform:translateY(6px);transform:translateY(6px);-webkit-transition:-webkit-transform 0.25s;transition:transform 0.25s;-webkit-backface-visibility:hidden;will-change:transform}.pswp__share-tooltip a{display:block;padding:8px 12px;color:#000;text-decoration:none;font-size:14px;line-height:18px}.pswp__share-tooltip a:hover{text-decoration:none;color:#000}.pswp__share-tooltip a:first-child{border-radius:2px 2px 0 0}.pswp__share-tooltip a:last-child{border-radius:0 0 2px 2px}.pswp__share-modal--fade-in{opacity:1}.pswp__share-modal--fade-in .pswp__share-tooltip{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.pswp--touch .pswp__share-tooltip a{padding:16px 12px}a.pswp__share--facebook:before{content:'';display:block;width:0;height:0;position:absolute;top:-12px;right:15px;border:6px solid transparent;border-bottom-color:#FFF;-webkit-pointer-events:none;-moz-pointer-events:none;pointer-events:none}a.pswp__share--facebook:hover{background:#3E5C9A;color:#FFF}a.pswp__share--facebook:hover:before{border-bottom-color:#3E5C9A}a.pswp__share--twitter:hover{background:#55ACEE;color:#FFF}a.pswp__share--pinterest:hover{background:#CCC;color:#CE272D}a.pswp__share--download:hover{background:#DDD}.pswp__counter{position:absolute;left:0;top:0;height:44px;font-size:13px;line-height:44px;color:#FFF;opacity:0.75;padding:0 10px}.pswp__caption{position:absolute;left:0;bottom:0;width:100%;min-height:44px}.pswp__caption small{font-size:11px;color:#BBB}.pswp__caption__center{text-align:left;max-width:420px;margin:0 auto;font-size:13px;padding:10px;line-height:20px;color:#CCC}.pswp__caption--empty{display:none}.pswp__caption--fake{visibility:hidden}.pswp__preloader{width:44px;height:44px;position:absolute;top:0;left:50%;margin-left:-22px;opacity:0;-webkit-transition:opacity 0.25s ease-out;transition:opacity 0.25s ease-out;will-change:opacity;direction:ltr}.pswp__preloader__icn{width:20px;height:20px;margin:12px}.pswp__preloader--active{opacity:1}.pswp__preloader--active .pswp__preloader__icn{background:url(preloader.gif) 0 0 no-repeat}.pswp--css_animation .pswp__preloader--active{opacity:1}.pswp--css_animation .pswp__preloader--active .pswp__preloader__icn{-webkit-animation:clockwise 500ms linear infinite;animation:clockwise 500ms linear infinite}.pswp--css_animation .pswp__preloader--active .pswp__preloader__donut{-webkit-animation:donut-rotate 1000ms cubic-bezier(0.4, 0, 0.22, 1) infinite;animation:donut-rotate 1000ms cubic-bezier(0.4, 0, 0.22, 1) infinite}.pswp--css_animation .pswp__preloader__icn{background:none;opacity:0.75;width:14px;height:14px;position:absolute;left:15px;top:15px;margin:0}.pswp--css_animation .pswp__preloader__cut{position:relative;width:7px;height:14px;overflow:hidden}.pswp--css_animation .pswp__preloader__donut{-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;border:2px solid #FFF;border-radius:50%;border-left-color:transparent;border-bottom-color:transparent;position:absolute;top:0;left:0;background:none;margin:0}@media screen and (max-width: 1024px){.pswp__preloader{position:relative;left:auto;top:auto;margin:0;float:right}}@-webkit-keyframes clockwise{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes clockwise{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes donut-rotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}50%{-webkit-transform:rotate(-140deg);transform:rotate(-140deg)}100%{-webkit-transform:rotate(0);transform:rotate(0)}}@keyframes donut-rotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}50%{-webkit-transform:rotate(-140deg);transform:rotate(-140deg)}100%{-webkit-transform:rotate(0);transform:rotate(0)}}.pswp__ui{-webkit-font-smoothing:auto;visibility:visible;opacity:1;z-index:1550}.pswp__top-bar{position:absolute;left:0;top:0;height:44px;width:100%}.pswp__caption,.pswp__top-bar,.pswp--has_mouse .pswp__button--arrow--left,.pswp--has_mouse .pswp__button--arrow--right{-webkit-backface-visibility:hidden;will-change:opacity;-webkit-transition:opacity 333ms cubic-bezier(0.4, 0, 0.22, 1);transition:opacity 333ms cubic-bezier(0.4, 0, 0.22, 1)}.pswp--has_mouse .pswp__button--arrow--left,.pswp--has_mouse .pswp__button--arrow--right{visibility:visible}.pswp__top-bar,.pswp__caption{background-color:rgba(0,0,0,0.5)}.pswp__ui--fit .pswp__top-bar,.pswp__ui--fit .pswp__caption{background-color:rgba(0,0,0,0.3)}.pswp__ui--idle .pswp__top-bar{opacity:0}.pswp__ui--idle .pswp__button--arrow--left,.pswp__ui--idle .pswp__button--arrow--right{opacity:0}.pswp__ui--hidden .pswp__top-bar,.pswp__ui--hidden .pswp__caption,.pswp__ui--hidden .pswp__button--arrow--left,.pswp__ui--hidden .pswp__button--arrow--right{opacity:0.001}.pswp__ui--one-slide .pswp__button--arrow--left,.pswp__ui--one-slide .pswp__button--arrow--right,.pswp__ui--one-slide .pswp__counter{display:none}.pswp__element--disabled{display:none !important}.pswp--minimal--dark .pswp__top-bar{background:none}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,main,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote::before,blockquote::after,q::before,q::after{content:'';content:none}a:hover,a:active{outline:none}table{border-collapse:collapse;border-spacing:0}@font-face{font-family:'Friction Mono';font-display:auto;src:url("/assets/fonts/friction-mono.woff2") format("woff2"),url("/assets/fonts/friction-mono.woff") format("woff"),url("/assets/fonts/friction-mono.otf") format("opentype");font-style:normal;font-weight:normal}@font-face{font-family:'Styrene';font-display:auto;src:url("/assets/fonts/styrenea-regular.woff2") format("woff2"),url("/assets/fonts/styrenea-regular.woff") format("woff"),url("/assets/fonts/styrenea-regular.otf") format("opentype");font-style:normal;font-weight:normal}@font-face{font-family:'Styrene';font-display:auto;src:url("/assets/fonts/styrenea-regularitalic.woff2") format("woff2"),url("/assets/fonts/styrenea-regularitalic.woff") format("woff"),url("/assets/fonts/styrenea-regularitalic.otf") format("opentype");font-style:italic;font-weight:normal}@font-face{font-family:'Styrene';font-display:auto;src:url("/assets/fonts/styrenea-medium.woff2") format("woff2"),url("/assets/fonts/styrenea-medium.woff") format("woff"),url("/assets/fonts/styrenea-medium.otf") format("opentype");font-style:normal;font-weight:bold}@font-face{font-family:'Styrene';font-display:auto;src:url("/assets/fonts/styrenea-mediumitalic.woff2") format("woff2"),url("/assets/fonts/styrenea-mediumitalic.woff") format("woff"),url("/assets/fonts/styrenea-mediumitalic.otf") format("opentype");font-style:italic;font-weight:bold}:root{--theme: var(--lightgray);--white: #FFFFFF;--black: #141414;--dimmed-text: #A5A5A5;--lightgray: #F0F0F0;--green: #74ffb0;--blue: #1ea1ed;--yellow: #f9eb0b;--font-family: 'Styrene', sans-serif;--font-family--monospace: 'Friction Mono', monospace;--font-size: 2.0rem;--line-height: 1.6;--font-size--small: 1.4rem;--line-height--small: 1.4;--font-size--large: 3.4rem;--line-height--large: 1.2;--font-size--xlarge: 6rem;--line-height--xlarge: 1.0;--gutter: 3rem;--vertical-spacing: 11rem;--navbar-height: 5rem;--max-width: 1280px;--max-width--article: 75rem}@media only screen and (max-width: 768px){:root{--gutter: 2rem;--vertical-spacing: 6rem;--navbar-height: 4rem;--font-size: 1.9rem;--font-size--large: 2.4rem;--font-size--xlarge: 3.8rem}}html{font-size:62.5%;box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}body{font-size:var(--font-size--, var(--font-size));line-height:var(--line-height--, var(--line-height));min-height:100%;margin:0;padding:0;font-family:var(--font-family, serif);background:var(--theme, var(--lightgray));text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%}::selection{background:var(--color, var(--black));color:var(--theme, var(--lightgray))}a,u{color:inherit;text-decoration:underline;text-underline-offset:0.2em;text-decoration-thickness:1px}hr{border:0;border-top:1px solid var(--color, currentColor);margin:var(--gutter) 0}button{width:auto;margin:0;padding:0;overflow:visible;color:inherit;font:inherit;line-height:inherit;background:transparent;border:none;appearance:none;-webkit-appearance:none;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);resize:none;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:pointer;font-family:var(--font-family--monospace)}button::-moz-focus-inner{padding:0;border:0}button:focus{outline:none}button[disabled]{opacity:0.3;pointer-events:none}h1,h2,h3,h4,h5,h6{font-weight:normal}img{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;border:0;-ms-interpolation-mode:bicubic;vertical-align:bottom;width:100%;height:auto}[data-lazyload]{opacity:0.1;background:var(--black)}[data-lazyload][data-decoded=true]{transition:opacity 1s cubic-bezier(0.215, 0.61, 0.355, 1);opacity:1;background:rgba(var(--black), 0.1)}figure.has-photoswipe{cursor:pointer;cursor:zoom-in}svg{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;width:auto;vertical-align:middle;fill:var(--color);overflow:visible}svg,svg *{pointer-events:visibleFill;vector-effect:non-scaling-stroke;transform-box:fill-box}.flexgroup{display:flex;gap:var(--gutter)}.article{font-size:var(--font-size--, var(--font-size));line-height:var(--line-height--, var(--line-height));margin:0 auto;max-width:var(--max-width--article)}.article>*:first-child{margin-top:0}.article a{color:var(--accent)}.article a:hover{text-decoration:none}.article h3{font-size:2em;line-height:1.2}.article h4{font-size:1.5em;line-height:1.2}.article h5{font-size:1em;line-height:1.2;font-weight:bold}.article h6{font-size:0.8em;line-height:1.2;font-weight:bold}.article h3,.article h4,.article h5,.article h6{margin:3em 0 1em}.article table,.article img,.article ul,.article ol,.article p,.article blockquote{margin:1em 0}.article img,.article iframe{border:0;background:black;display:block;margin:2em auto;vertical-align:bottom}.article img{max-width:100%}.article figure,.article pre,.article .gallery{margin:calc(2 * var(--gutter)) calc(-2 * var(--gutter))}@media only screen and (max-width: 768px){.article figure,.article pre,.article .gallery{margin-left:0;margin-right:0}}.article figure img{height:auto;margin:0}.article figure iframe{background:var(--black);width:100%;margin:0;aspect-ratio:16/10}.article figure figcaption{font-size:var(--font-size--small, var(--font-size));line-height:var(--line-height--small, var(--line-height));text-align:center;color:var(--dimmed-text);margin-top:1em;padding:0 calc(2 * var(--gutter))}.article figure figcaption:empty{display:none}.article .gallery{display:flex;flex-wrap:wrap;gap:calc(var(--gutter) / 2)}.article .gallery li{flex:1;display:flex;aspect-ratio:1;min-width:25%}@media only screen and (max-width: 768px){.article .gallery li{min-width:33%}}.article .gallery figure{margin:0;width:100%}.article .gallery figure img{width:100%;height:100%;object-fit:cover;object-position:var(--focus-x, 50%) var(--focus-y, 50%)}.article code,.article pre{font-family:var(--font-family--monospace);background:var(--black);color:white}.article code ::selection,.article pre ::selection{background:var(--accent)}.article code{font-size:80%;vertical-align:0.1em;padding:0.25em 0.4em 0.2em;border-radius:3px}.article pre{position:relative;border-radius:5px}.article pre code{scrollbar-width:none;-ms-overflow-style:none;overflow-x:scroll;overflow-y:hidden;display:block;padding:var(--gutter);color:inherit;background:none}.article pre code::-webkit-scrollbar{height:0;background:transparent}.article pre code[data-language]:not([data-language=text])::after{content:attr(data-language);position:absolute;top:0;right:0;padding:0.15em 0.5em;font-variant:small-caps}@media only screen and (max-width: 768px){.article pre code[data-language]:not([data-language=text])::after{display:none}}.article blockquote{margin:3em 0;font-size:110%;line-height:1.5;font-style:italic}.article blockquote .blockquote__content{margin-left:calc(-1 * var(--gutter));padding-left:var(--gutter);border-left:1px solid}@media only screen and (max-width: 768px){.article blockquote .blockquote__content{margin-left:0;padding-right:var(--gutter)}}.article blockquote i,.article blockquote em,.article blockquote code{font-style:normal}.article blockquote footer{font-size:var(--font-size--small, var(--font-size));line-height:var(--line-height--small, var(--line-height));margin-top:1em;font-style:normal;text-align:right}.article blockquote footer::before{content:'\2015'}.button{transition:transform 120ms cubic-bezier(0.215, 0.61, 0.355, 1);will-change:transform;--scale: 1;--offset-x: 0;--offset-y: 0;--pressed: 0;display:inline;outline:1px solid transparent;background:var(--theme) !important;transform:translate3d(var(--offset-x, 0), var(--offset-y, 0), 0) scale(var(--scale)) translateY(var(--pressed));transform-origin:center}.button:hover{outline:1px solid var(--black) !important}.button:not(.is-sticked){transition-duration:300ms;transition-timing-function:cubic-bezier(0, 3, 0.5, 0)}.button:active{--scale: 0.9;--pressed: 3px}.button.is-loading{outline:1px solid var(--black);color:transparent}.button.is-loading::after{position:absolute;top:50%;left:50%;width:1em;height:1em;border:1px solid rgba(0,0,0,0);border-top:1px solid var(--black);border-left:1px solid var(--black);border-radius:50%;animation:loader-spin 1s linear infinite;content:'';pointer-events:none}@keyframes loader-spin{0%{transform:translate(-50%, -50%) rotate(0deg)}100%{transform:translate(-50%, -50%) rotate(360deg)}}button.button{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;font-family:var(--font-family--monospace);font-size:70%;padding:0.4em 0.4em 0.2em;cursor:pointer;vertical-align:2px}input[type=checkbox].button{width:auto;margin:0;padding:0;overflow:visible;color:inherit;font:inherit;line-height:inherit;background:transparent;border:none;appearance:none;-webkit-appearance:none;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);resize:none;position:relative;display:inline-block;width:1em;height:1em;vertical-align:-3px;cursor:pointer}input[type=checkbox].button::-moz-focus-inner{padding:0;border:0}input[type=checkbox].button:focus{outline:none}input[type=checkbox].button::after{position:absolute;top:-.25em;left:-.25em;right:-.25em;bottom:-.25em;content:''}input[type=checkbox].button::before{content:'\2713';opacity:0;left:0;position:absolute;text-align:center;width:100%;top:-0.15em}input[type=checkbox].button:checked::before{opacity:1}.marquee{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;--offset-x: 0%;width:100%;will-change:transform;overflow:hidden}.marquee__content{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:default;width:fit-content;display:flex;white-space:nowrap;transform:translate3d(var(--offset-x), 0, 0)}.marquee__content>*{margin-right:var(--gutter);font-size:inherit}.menu{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;transition:background-color 300ms cubic-bezier(0.215, 0.61, 0.355, 1);content:'';z-index:2;position:fixed;top:0;width:100vw;padding:calc(var(--gutter) / 2) var(--gutter);background:transparent;color:var(--color);display:flex;gap:var(--gutter);justify-content:space-between;align-items:center;line-height:0;text-transform:lowercase;pointer-events:none}.menu a{pointer-events:auto}body:not(.has-scrolled) .menu.home-safe{background:var(--theme)}@media only screen and (max-width: 768px){.menu.article-safe{background:var(--theme)}}@media only screen and (min-width: 768px){body.has-scrolled .menu.article-safe{pointer-events:auto}body.has-scrolled .menu.article-safe .flexgroup{opacity:0}body.has-scrolled .menu.article-safe.is-forced-visible,body.has-scrolled .menu.article-safe:hover{background:var(--theme)}body.has-scrolled .menu.article-safe.is-forced-visible .flexgroup,body.has-scrolled .menu.article-safe:hover .flexgroup{opacity:1}}.menu a{font-size:var(--font-size--small, var(--font-size));line-height:var(--line-height--small, var(--line-height))}.menu a:not(:hover){text-decoration:none}.menu svg{height:1em;width:auto;fill:var(--color)}.menu .flexgroup{transition:opacity 300ms cubic-bezier(0.215, 0.61, 0.355, 1);margin-bottom:-2px}.menu.is-forced-visible,.menu.is-forced-visible .flexgroup{transition-delay:200ms;transition-duration:500ms}.paper{position:relative;display:flex;flex-direction:column;height:fit-content;align-self:center}.paper svg{width:100%;height:auto;overflow:hidden}.paper svg .bounding-box,.paper svg .bounds,.paper svg .guide{display:none}.paper .paper-info{position:absolute;bottom:-1em;transform:translateY(100%)}@media only screen and (max-width: 768px){.paper .paper-info{position:static;transform:none;margin:1em 0}}.paper.debug svg .guide,.paper.debug svg .no-export,.paper.debug svg .debug{display:block}.paper.debug svg image{display:none}.paper.debug svg rect{fill:none}.paper.debug svg path{fill:none;stroke:var(--black)}.paper.debug svg .guide{transition:opacity 200ms cubic-bezier(0.215, 0.61, 0.355, 1);stroke:#ff44ff;stroke-width:1px}.paper.debug svg .debug{stroke:#9a1fff}.paper.debug svg .paper__background{stroke:black;stroke-dasharray:1 1}.paper.debug svg .bounding-box{stroke:#4b96ff;stroke-dasharray:1 1}.paper-info{font-size:var(--font-size--small, var(--font-size));line-height:var(--line-height--small, var(--line-height))}.paper-info *{width:fit-content}@media only screen and (max-width: 768px){.paper-info *{margin:0 auto;text-align:center}}.paper-info__label{font-weight:bold}.paper-info__file{cursor:pointer;color:var(--blue);text-decoration:underline;width:fit-content}.paper-info__file.is-loading{position:relative}.paper-info__file.is-loading::before{position:absolute;top:50%;left:50%;width:1em;height:1em;border:1px solid rgba(0,0,0,0);border-top:1px solid var(--black);border-left:1px solid var(--black);border-radius:50%;animation:loader-spin 1s linear infinite;content:'';pointer-events:none;content:'';left:unset;right:-2em}@keyframes loader-spin{0%{transform:translate(-50%, -50%) rotate(0deg)}100%{transform:translate(-50%, -50%) rotate(360deg)}}.pswp{cursor:zoom-out;cursor:url("/assets/cursors/close.png"),auto}.pswp__bg{background-color:var(--lightgray)}.pswp__top-bar{background:none !important;opacity:1 !important;height:100vh;cursor:url("/assets/cursors/close.png"),auto;display:flex !important;justify-content:center}.pswp__button--close{background-image:url("/assets/cursors/close.png") !important;background-size:auto !important;background-position:center !important;height:var(--navbar-height);padding:0 var(--gutter)}.pswp__img{background:var(--lightgray);padding:var(--gutter)}.pswp__button--arrow--left,.pswp__button--arrow--right{z-index:2;margin-top:0;top:0;height:100vh;width:33vw}.pswp__button--arrow--left::before,.pswp__button--arrow--right::before{content:none}.pswp__button--arrow--left{cursor:url("/assets/cursors/prev.png"),auto}.pswp__button--arrow--right{cursor:url("/assets/cursors/next.png"),auto}.view{position:relative;z-index:1;width:100vw;padding:var(--vertical-spacing) var(--gutter);background:var(--background, var(--theme));color:var(--color, var(--black));display:flex;flex-direction:column;justify-content:center;align-items:center;box-sizing:border-box}.view:empty{display:none}.view.transparent{--background: var(--lightgray)}.view.has-separator::before{content:'';position:absolute;left:var(--gutter);right:var(--gutter);top:0;border-top:1px solid var(--color, var(--black))}.view__content{flex:1;width:100%;max-width:var(--max-width)}.view svg .accent{fill:var(--accent, var(--color))}.nut-grid__frame{display:block !important}.view[data-view=contact]{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;font-size:var(--font-size--large, var(--font-size));line-height:var(--line-height--large, var(--line-height))}.view[data-view=contact] .view__content{text-align:center}.view[data-view=footer]{padding:var(--gutter)}.view[data-view=footer] .view__content{max-width:unset}.view[data-view=footer] a:not(:hover){text-decoration:none}.view[data-view=footer] footer{font-size:var(--font-size--small, var(--font-size));line-height:var(--line-height--small, var(--line-height));display:flex;justify-content:space-between;text-transform:lowercase;white-space:nowrap}.view[data-view=footer] #go-up{font-family:var(--font-family--monospace);text-decoration:none}@media only screen and (max-width: 768px){.view[data-view=footer] #go-up{display:none}}@media only screen and (max-width: 768px){.view[data-view=footer] a[hreflang]{font-size:0}.view[data-view=footer] a[hreflang]::after{font-size:var(--font-size--small, var(--font-size));line-height:var(--line-height--small, var(--line-height));content:attr(hreflang)}}@keyframes float{from{transform:translate3d(var(--offset-x, 0), -50%, 0)}to{transform:translate3d(var(--offset-x, 0), 0, 0)}}.view[data-view=home]{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;--color: var(--black);z-index:0;background-position:center;background-size:cover;position:sticky;top:0;height:100vh}@media only screen and (max-width: 768px){.view[data-view=home]{height:calc(100vh - var(--vertical-spacing))}}.view[data-view=home].compact{height:unset}.menu.home-safe ~ main .view[data-view=home].compact .view__content{margin-top:var(--navbar-height)}.view[data-view=home].has-wireframe{--color: white}.view[data-view=home] .view__content{flex:0;display:grid;place-items:center}.view[data-view=home].has-marquee .view__content{padding-bottom:var(--navbar-height)}body.has-scrolled .view[data-view=home].has-running-matter .view_content{display:none}.view[data-view=home] canvas{position:fixed;top:0;left:0;right:0;bottom:0;z-index:-1}.view[data-view=home] h1{pointer-events:none;font-size:9rem;line-height:0;padding:0 var(--gutter)}@media only screen and (max-width: 768px){.view[data-view=home] h1{padding:0 calc(2 * var(--gutter))}}.view[data-view=home] h1 svg{height:1em;max-width:100%;fill:currentColor}.view[data-view=home] h1 svg .nut{vector-effect:non-scaling-stroke;fill:white}.view[data-view=home].monochrome svg .nut{stroke:none;fill:var(--color)}.view[data-view=home] h2{font-size:var(--font-size--large, var(--font-size));line-height:var(--line-height--large, var(--line-height));pointer-events:none;margin-top:var(--gutter);text-align:center}.view[data-view=home] #go-down{--offset-x: -50%;pointer-events:auto;position:fixed;bottom:var(--gutter);left:50%;will-change:transform;animation:float 2s ease-in-out infinite alternate;font-family:var(--font-family--monospace);text-decoration:none}.view[data-view=home] #go-down::after{position:absolute;top:-3rem;left:-3rem;right:-3rem;bottom:-3rem;content:''}body.has-scrolled .view[data-view=home] #go-down{display:none}.view[data-view=home].has-marquee #go-down{bottom:calc(var(--gutter) + var(--navbar-height))}@keyframes appears{from{transform:translateY(100%)}to{transform:none}}.view[data-view=intro]{--color: var(--black)}.view[data-view=intro]+.view[data-view=intro]{padding-top:var(--gutter);margin-top:calc(var(--vertical-spacing) * -1)}.view[data-view=intro] .view__content{display:grid;grid-template-columns:1fr 1fr;gap:var(--gutter);align-items:center}@media only screen and (max-width: 768px){.view[data-view=intro] .view__content{grid-template-columns:1fr}}.view[data-view=intro] h2{font-size:var(--font-size--xlarge, var(--font-size));line-height:var(--line-height--xlarge, var(--line-height));padding-right:var(--gutter)}.view[data-view=intro] h2 .desktop-br{display:block}@media only screen and (max-width: 768px){.view[data-view=intro] h2 .desktop-br{display:inline}.view[data-view=intro] h2 .desktop-br::after{content:' '}}.view[data-view=intro] p{margin-top:var(--gutter)}@media only screen and (min-width: 768px){.view[data-view=intro] p{padding-right:var(--gutter)}}.view[data-view=intro] video,.view[data-view=intro] img{aspect-ratio:1;width:100%;object-fit:cover}.view[data-view=intro] video{mix-blend-mode:multiply}.view[data-view=intro] .fake-svg{aspect-ratio:1;background:var(--lightgray)}@media only screen and (max-width: 768px){.view[data-view=intro] .fake-svg{order:-1;margin-bottom:var(--gutter)}}.view[data-view=keywords]{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.view[data-view=keywords] .view__content{max-width:unset}.view[data-view=keywords] .marquee{font-size:var(--font-size--large, var(--font-size));line-height:var(--line-height--large, var(--line-height))}@media only screen and (max-width: 768px){.view[data-view=keywords] .marquee{font-size:var(--font-size--, var(--font-size));line-height:var(--line-height--, var(--line-height))}}.view[data-view=keywords] .marquee+.marquee{margin-top:calc(var(--gutter))}.view[data-view=keywords] svg{height:1.5em;line-height:0;width:auto}.view[data-view=playground]{--format-height: calc(3em)}.view[data-view=playground] .view__content::after{content:'';display:block;height:var(--format-height, 0)}@media only screen and (max-width: 768px){.view[data-view=playground] .view__content::after{display:none}}.view[data-view=playground] h2{font-size:var(--font-size--large, var(--font-size));line-height:var(--line-height--large, var(--line-height));text-align:center;margin-bottom:var(--vertical-spacing)}@media only screen and (max-width: 768px){.view[data-view=playground] h2{font-size:var(--font-size--large, var(--font-size));line-height:var(--line-height--large, var(--line-height))}}.view[data-view=playground] .playground__content{display:grid;grid-template-columns:1fr 1fr;gap:var(--gutter)}@media only screen and (max-width: 768px){.view[data-view=playground] .playground__content{grid-template-columns:1fr}}.view[data-view=playground] .paper{max-height:calc(100vh - var(--format-height) - var(--vertical-spacing))}.view[data-view=playground] .playground__ui{align-self:center}.view[data-view=playground] p{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;padding-right:var(--gutter)}.view[data-view=playground] p+p{margin-top:1em}.view[data-view=project]{--accent: var(--blue)}.view[data-view=project] .marquee{font-size:var(--font-size--small, var(--font-size));line-height:var(--line-height--small, var(--line-height));position:absolute;top:calc(-1 * var(--navbar-height));left:0;right:0;background:var(--theme);height:var(--navbar-height);padding:calc(var(--gutter) / 2) var(--gutter)}.view[data-view=projects] h2{font-size:var(--font-size--large, var(--font-size));line-height:var(--line-height--large, var(--line-height));text-align:center;margin-bottom:var(--vertical-spacing)}.view[data-view=projects] nav{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;white-space:nowrap;margin-left:-0.7rem;margin-bottom:1em}@media only screen and (max-width: 768px){.view[data-view=projects] nav{font-size:var(--font-size--large, var(--font-size));line-height:var(--line-height--large, var(--line-height));text-align:center}}.view[data-view=projects] nav button{position:relative;width:var(--gutter)}@media only screen and (max-width: 768px){.view[data-view=projects] nav button{display:none}}.view[data-view=projects] nav button::after{position:absolute;top:-1rem;left:-1rem;right:-1rem;bottom:-1rem;content:''}.view[data-view=projects] nav button:first-child::after{right:0}.view[data-view=projects] nav button:last-child::after{left:0}.view[data-view=projects] .projects__dots{display:flex;justify-content:center;gap:1.6rem;flex-wrap:wrap;padding:0 var(--gutter)}@media only screen and (min-width: 768px){.view[data-view=projects] .projects__dots{display:none}}.view[data-view=projects] .projects__dot{position:relative;cursor:pointer;text-align:center}.view[data-view=projects] .projects__dot::before{position:absolute;top:-.8rem;left:-.8rem;right:-.8rem;bottom:-.8rem;content:''}.view[data-view=projects] .projects__dot:not(.is-active){opacity:0.2}.view[data-view=projects] .project{position:relative;flex:0;min-width:100%;scroll-snap-align:start}.view[data-view=projects] .project__content{display:grid;grid-template-columns:repeat(2, 1fr);gap:var(--gutter)}@media only screen and (max-width: 768px){.view[data-view=projects] .project__content{display:block}}.view[data-view=projects] .project figure{aspect-ratio:70/100}@media only screen and (max-width: 768px){.view[data-view=projects] .project figure{margin-bottom:var(--gutter)}}.view[data-view=projects] .project figure img{width:100%;height:100%;object-fit:cover}.view[data-view=projects] .project__abstract header{font-size:var(--font-size--small, var(--font-size));line-height:var(--line-height--small, var(--line-height));margin-bottom:var(--gutter);border-bottom:1px solid;padding-bottom:var(--gutter)}@media only screen and (max-width: 768px){.view[data-view=projects] .project__abstract header{border:0;padding-bottom:0}}.view[data-view=projects] .project__abstract h3{font-size:var(--font-size--large, var(--font-size));line-height:var(--line-height--large, var(--line-height));margin-bottom:var(--gutter);padding-right:var(--gutter);overflow:hidden;text-overflow:ellipsis}.view[data-view=projects] .project__abstract h3 a:not(:hover){text-decoration:none}.view[data-view=projects] .project__abstract p{margin-top:1em;padding-right:var(--gutter)}.view[data-view=projects] .project__abstract footer{font-size:var(--font-size--small, var(--font-size));line-height:var(--line-height--small, var(--line-height));margin-top:var(--gutter)}

/*# sourceMappingURL=bundle.css.map*/