body.theme-latte{--rosewater: 10.8 58.824% 66.667%;--flamingo: 0 59.763% 66.863%;--pink: 316.034 73.418% 69.02%;--mauve: 266.044 85.047% 58.039%;--red: 347.077 86.667% 44.118%;--maroon: 354.783 76.303% 58.627%;--peach: 21.975 99.184% 51.961%;--yellow: 34.948 76.984% 49.412%;--green: 109.231 57.635% 39.804%;--teal: 183.231 73.864% 34.51%;--sky: 197.067 96.567% 45.686%;--sapphire: 188.859 69.953% 41.765%;--blue: 219.907 91.489% 53.922%;--lavender: 230.935 97.203% 71.961%;--text: 233.793 16.022% 35.49%;--subtext1: 233.333 12.796% 41.373%;--subtext0: 232.8 10.373% 47.255%;--overlay2: 232.174 9.623% 53.137%;--overlay1: 231.429 10.048% 59.02%;--overlay0: 228 11.236% 65.098%;--surface2: 226.667 12.162% 70.98%;--surface1: 225 13.559% 76.863%;--surface0: 222.857 15.909% 82.745%;--base: 220 23.077% 94.902%;--mantle: 220 21.951% 91.961%;--crust: 220 20.69% 88.627%}body.theme-frappe{--rosewater: 10.286 57.377% 88.039%;--flamingo: 0 58.537% 83.922%;--pink: 316 73.171% 83.922%;--mauve: 276.667 59.016% 76.078%;--red: 358.812 67.785% 70.784%;--maroon: 357.778 65.854% 75.882%;--peach: 20.331 79.085% 70%;--yellow: 39.529 62.044% 73.137%;--green: 95.833 43.902% 67.843%;--teal: 171.549 39.227% 64.51%;--sky: 189.091 47.826% 72.941%;--sapphire: 198.621 55.414% 69.216%;--blue: 221.633 74.242% 74.118%;--lavender: 238.909 66.265% 83.725%;--text: 227.234 70.149% 86.863%;--subtext1: 226.667 43.689% 79.804%;--subtext0: 228.293 29.496% 72.745%;--overlay2: 227.692 22.286% 65.686%;--overlay1: 226.667 16.981% 58.431%;--overlay0: 229.091 13.36% 51.569%;--surface2: 228 13.274% 44.314%;--surface1: 227.143 14.737% 37.255%;--surface0: 230 15.584% 30.196%;--base: 229.091 18.644% 23.137%;--mantle: 230.526 18.812% 19.804%;--crust: 229.412 19.54% 17.059%}body.theme-macchiato{--rosewater: 10 57.692% 89.804%;--flamingo: 0 58.333% 85.882%;--pink: 316.071 73.684% 85.098%;--mauve: 266.512 82.692% 79.608%;--red: 351.176 73.913% 72.941%;--maroon: 355.059 71.429% 76.667%;--peach: 21.356 85.507% 72.941%;--yellow: 40.253 69.912% 77.843%;--green: 105.217 48.252% 71.961%;--teal: 171.081 46.835% 69.02%;--sky: 188.78 59.42% 72.941%;--sapphire: 198.641 65.605% 69.216%;--blue: 220.189 82.813% 74.902%;--lavender: 234.462 82.278% 84.51%;--text: 227.442 68.254% 87.647%;--subtext1: 228 39.216% 80%;--subtext0: 227.368 26.761% 72.157%;--overlay2: 228.333 20% 64.706%;--overlay1: 227.647 15.455% 56.863%;--overlay0: 230.323 12.351% 49.216%;--surface2: 229.655 13.744% 41.373%;--surface1: 231.111 15.607% 33.922%;--surface0: 230.4 18.797% 26.078%;--base: 231.818 23.404% 18.431%;--mantle: 233.333 23.077% 15.294%;--crust: 235.714 22.581% 12.157%}body.theme-mocha,body{--rosewater: 9.6 55.556% 91.176%;--flamingo: 0 58.73% 87.647%;--pink: 316.471 71.831% 86.078%;--mauve: 267.407 83.505% 80.98%;--red: 343.269 81.25% 74.902%;--maroon: 350.4 65.217% 77.451%;--peach: 22.957 92% 75.49%;--yellow: 41.351 86.047% 83.137%;--green: 115.455 54.098% 76.078%;--teal: 170 57.353% 73.333%;--sky: 189.184 71.014% 72.941%;--sapphire: 198.5 75.949% 69.02%;--blue: 217.168 91.87% 75.882%;--lavender: 231.892 97.368% 85.098%;--text: 226.154 63.934% 88.039%;--subtext1: 226.667 35.294% 80%;--subtext0: 227.647 23.611% 71.765%;--overlay2: 228.387 16.757% 63.725%;--overlay1: 229.655 12.775% 55.49%;--overlay0: 230.769 10.744% 47.451%;--surface2: 232.5 12% 39.216%;--surface1: 234.286 13.208% 31.176%;--surface0: 236.842 16.239% 22.941%;--base: 240 21.053% 14.902%;--mantle: 240 21.311% 11.961%;--crust: 240 22.727% 8.627%}@font-face{font-family:OpenDyslexic;src:url(/fonts/OpenDyslexic-Regular.woff2) format("woff2"),url(/fonts/OpenDyslexic-Regular.woff) format("woff");font-weight:400;font-style:normal;font-display:swap}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0;font-weight:400}body{background-color:hsl(var(--base));color:hsl(var(--text));font-family:sans-serif,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-size:15px;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*,*:before,*:after{--transition: .2s cubic-bezier(.4, 0, .2, 1);-webkit-tap-highlight-color:transparent;outline:2px solid transparent;outline-offset:4px;transition:color var(--transition),background-color var(--transition),box-shadow var(--transition),outline var(--transition),border-color var(--transition),border-radius var(--transition),font-weight var(--transition),opacity var(--transition),transform var(--transition),backdrop-filter var(--transition),filter var(--transition)}*:focus-visible{outline-color:hsl(var(--blue))}iframe{outline-offset:0px}iframe:focus-visible{outline-color:transparent}a{color:hsl(var(--blue));text-decoration:none}::selection{background-color:hsl(var(--overlay0));color:hsl(var(--text))}html.boxy *{border-radius:0!important}html.no-motion *{--transition: none}html.no-motion *:before,html.no-motion *:after{--transition: none}html.font-opendyslexic body{font-family:OpenDyslexic,system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif;line-height:1.5;letter-spacing:.01em}.navigation-bar{position:sticky;top:0;left:0;width:100%;z-index:1000;background-color:hsla(var(--crust) / 1)}.navigation-bar .navigation-bar__inner{display:flex;align-items:flex-end;justify-content:space-between;gap:.5rem;padding:.5rem 1rem;max-width:768px;margin:0 auto;width:100%}.navigation-bar .navigation-bar__brand{display:flex;align-items:flex-end;gap:.5rem;color:inherit;text-decoration:none;border-radius:.5rem}.navigation-bar .navigation-bar__brand .navigation-bar__icon{width:2.25rem;height:2.25rem;background-color:hsla(var(--surface0) / 1);border-radius:.5rem;overflow:hidden}.navigation-bar .navigation-bar__brand .navigation-bar__icon img{width:100%;height:100%;object-fit:cover}.navigation-bar .navigation-bar__brand .navigation-bar__title{font-size:1.25rem;font-weight:600;color:hsl(var(--text))}.navigation-bar .navigation-bar__nav{display:flex;gap:.75rem}.navigation-bar .navigation-bar__nav a{position:relative;border-bottom:2px solid transparent;text-decoration:none;color:hsl(var(--subtext0));border-radius:.2rem;padding:0 .25rem}.navigation-bar .navigation-bar__nav a:before{content:"";position:absolute;bottom:-2px;left:0;width:100%;height:2px;opacity:0;background-color:hsl(var(--blue));transform:scaleX(0);border-radius:.25rem;transition:background-color var(--transition),opacity var(--transition),transform var(--transition)}.navigation-bar .navigation-bar__nav a[data-active]{color:hsl(var(--text))}.navigation-bar .navigation-bar__nav a[data-active]:before{transform:scaleX(1);opacity:1;background-color:hsl(var(--flamingo))}.navigation-bar .navigation-bar__nav a:hover,.navigation-bar .navigation-bar__nav a:focus{color:hsl(var(--text))}.navigation-bar .navigation-bar__nav a:hover:before,.navigation-bar .navigation-bar__nav a:focus:before{transform:scaleX(1);opacity:1;background-color:hsl(var(--blue))}.layout{min-height:100vh;display:flex;flex-direction:column}.main-content{flex:1;max-width:768px;margin:0 auto;width:100%;padding:2rem 1rem}.main-content .page{width:100%;min-height:80vh}.main-content .page .page-header{display:flex;flex-direction:column;margin-bottom:2rem;padding:.75rem;overflow:hidden}.main-content .page .page-header .page-title{font-size:2rem;font-weight:700;color:hsl(var(--text));margin-bottom:.5rem;border-radius:.5rem}.main-content .page .page-header .page-subtitle{font-size:1rem;color:hsl(var(--subtext0));margin:0}.main-content .page .page-header .page-cta{margin-top:1rem;display:flex;gap:.5rem}.main-content .page .page-header .page-cta .button__pill:hover,.main-content .page .page-header .page-cta .button__pill:focus{background-color:hsla(var(--blue) / 1);color:hsl(var(--crust))}.main-content .page .page-header .page-cta .button__pill:active{background-color:hsla(var(--blue) / .8)}.main-content .page section{margin:auto;margin-bottom:2rem;padding:1rem;border-radius:.5rem;background-color:hsla(var(--surface0) / .25)}.main-content .page section h2{font-size:1.5rem;font-weight:700;color:hsl(var(--text));margin-bottom:.5rem}.main-content .page section.edge-to-edge{padding:0;background-color:transparent}.main-content .page section.edge-to-edge iframe{width:100%;border-radius:1rem;height:100%}.main-content .page section.arivertisement .arivertisement__hidden-content,.main-content .page section.arivertisement iframe{width:100%;height:100%;border-radius:.5rem;aspect-ratio:722 / 98;display:block;background-color:hsla(var(--surface0) / .25)}.main-content .page section.arivertisement .arivertisement__hidden-content{display:none;flex-direction:column;align-items:center;justify-content:center;padding:1rem}.main-content .page section.arivertisement .arivertisement__controls{display:flex;gap:.5rem;justify-content:center;margin-top:.25rem}.main-content .page section.arivertisement .arivertisement__controls p,.main-content .page section.arivertisement .arivertisement__controls button{color:hsl(var(--subtext0));font-size:.7rem;text-align:center;margin:0}.main-content .page section.arivertisement .arivertisement__controls button{border:none;background:none;padding:0;text-decoration:underline;cursor:pointer;outline-offset:2px}.main-content .page section.arivertisement--hidden iframe{display:none!important}.main-content .page section.arivertisement--hidden .arivertisement__hidden-content{display:flex!important}.main-content .page p{line-height:1.6;color:hsl(var(--subtext0))}.main-content .page p:not(:last-child){margin-bottom:1rem}.error h1{color:hsl(var(--red));font-size:2rem;margin-bottom:1rem}.error p{color:hsl(var(--subtext0));margin-bottom:2rem}.error .error__actions{display:flex;gap:.25rem}button.button__pill{display:inline-block;border-radius:5rem;border:1px solid transparent;color:hsl(var(--subtext0));text-decoration:none;background-color:hsl(var(--surface0));padding:.5rem 1rem}button.button__pill:hover,button.button__pill:focus{color:hsl(var(--text));background-color:hsl(var(--surface1))}button.button__pill:active{border-color:hsl(var(--surface2));background-color:hsla(var(--surface1) / .8)}footer{background-color:hsl(var(--crust));padding:1rem;max-width:768px;border-radius:1rem;margin:1rem auto;width:calc(100% - 2rem);display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}@media (max-width: 720px){footer{grid-template-columns:1fr}}footer .footer__column{min-width:0;display:flex;flex-direction:column;gap:.5rem}footer .footer__column h2{position:relative;font-size:1.75rem;font-weight:900}footer .footer__column h2:before{content:"";position:absolute;bottom:0;width:100%;height:.2rem;background:linear-gradient(to right,hsl(var(--flamingo)) 60%,transparent);border-radius:5rem}footer .footer__column h3{font-size:1.25rem;font-weight:600;color:hsl(var(--subtext1))}footer .footer__column p,footer .footer__column a{font-size:.75rem;font-weight:400;color:hsl(var(--subtext0))}footer .footer__column a{color:hsl(var(--blue));text-decoration:none}footer .footer__column-links{display:flex;flex-direction:column}footer .footer__column-links ul{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;border:2px solid hsl(var(--surface0));border-radius:.5rem;overflow:hidden}footer .footer__column-links ul li{font-size:1rem;font-weight:400;padding:0;width:100%}footer .footer__column-links ul li:not(:last-child){border-bottom:2px solid hsl(var(--surface0))}footer .footer__column-links ul li .footer__link{width:100%;display:flex;flex-direction:column;padding:.5rem;outline-offset:-2px}footer .footer__column-links ul li .footer__link p{color:inherit}footer .footer__column-links ul li .footer__link:hover,footer .footer__column-links ul li .footer__link:focus{background-color:hsla(var(--blue) / .05)}footer .footer__column-links ul li .footer__link .footer__link-container{display:flex;align-items:center}footer .footer__column-links ul li .footer__link .hint{color:hsl(var(--subtext0));font-size:.7rem;max-height:2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}footer .footer__column-links ul li .footer__link:hover .hint,footer .footer__column-links ul li .footer__link:focus .hint{max-height:100rem;overflow:visible;white-space:normal}footer .footer__column-links ul li:last-child .footer__link{border-radius:0 0 .5rem .5rem}footer .footer__column-links ul li:first-child .footer__link{border-radius:.5rem .5rem 0 0}footer .footer__column-links ul:focus-within a:not(:focus-visible):not(:hover),footer .footer__column-links ul:hover a:not(:focus-visible):not(:hover){filter:brightness(.85)}.projects-page{--card-radius: 1rem}.projects-page .projects-header{margin-bottom:1.5rem}.projects-page .projects-header h1{margin-bottom:.25rem}.projects-page .projects-header .projects-subtitle{font-size:.9rem;color:hsl(var(--subtext0));margin:0}.projects-page .projects{display:grid;gap:.5rem;grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}.projects-page .project{position:relative;display:flex;flex-direction:column;gap:.5rem;border:1px solid hsla(var(--accent) / .1);background:hsla(var(--surface0) / .25);border-radius:var(--card-radius);padding:.5rem;overflow:hidden;--accent: var(--blue)}.projects-page .project[data-accent-lang=typescript]{--accent: var(--blue)}.projects-page .project[data-accent-lang=rust]{--accent: var(--peach)}.projects-page .project[data-accent-lang=nix]{--accent: var(--sapphire)}.projects-page .project[data-accent-lang=bash]{--accent: var(--green)}.projects-page .project[data-accent-lang=css]{--accent: var(--pink)}.projects-page .project:hover,.projects-page .project:focus-within{background:hsla(var(--surface0) / .75);border-color:hsla(var(--accent) / .2)}.projects-page .project .project__header{display:flex;gap:.5rem;align-items:center}.projects-page .project .project__header .project__avatar{height:100%;aspect-ratio:1;border-radius:.5rem;background:hsla(var(--accent) / 1);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:1rem;color:hsl(var(--crust));-webkit-user-select:none;user-select:none}.projects-page .project .project__header .project__title-block{display:flex;flex-direction:column;gap:.15rem}.projects-page .project .project__header .project__title-block h2{font-size:1.05rem;font-weight:700;margin:0;line-height:1.2;color:hsl(var(--text))}.projects-page .project .project__header .project__title-block .project__meta{display:flex;gap:.4rem;flex-wrap:wrap}.projects-page .project .project__header .project__title-block .project__meta .meta-item{background:hsl(var(--surface0));color:hsl(var(--subtext1))}.projects-page .project .project__header .project__title-block .project__meta .status.status--active{background:hsla(var(--green) / .2);color:hsl(var(--green))}.projects-page .project .project__header .project__title-block .project__meta .status.status--wip{background:hsla(var(--yellow) / .25);color:hsl(var(--yellow))}.projects-page .project .project__header .project__title-block .project__meta .status.status--archived{background:hsla(var(--overlay0) / .3);color:hsl(var(--overlay1))}.projects-page .project .project__description{color:hsl(var(--subtext0));font-size:.75rem;margin:0;overflow:hidden}.projects-page .project .project__languages{list-style:none;display:flex;flex-wrap:wrap;gap:.35rem;padding:0}.projects-page .project .project__languages .language-tag{--lang-bg: var(--surface1);--lang-colour: var(--subtext1);background:hsl(var(--lang-colour));color:hsla(var(--crust))}.projects-page .project .project__languages .language-tag[data-lang=typescript]{--lang-colour: var(--blue)}.projects-page .project .project__languages .language-tag[data-lang=rust]{--lang-colour: var(--peach)}.projects-page .project .project__languages .language-tag[data-lang=nix]{--lang-colour: var(--sapphire)}.projects-page .project .project__languages .language-tag[data-lang=bash]{--lang-colour: var(--green)}.projects-page .project .project__languages .language-tag[data-lang=css]{--lang-colour: var(--pink)}.projects-page .project .project__meta .meta-item,.projects-page .project .project__languages .language-tag{padding:.15rem .45rem;letter-spacing:.05em;font-size:.5rem;font-weight:600;border-radius:1rem;-webkit-user-select:none;user-select:none}.projects-page .project .project__links{margin-top:auto;display:flex;flex-wrap:wrap;gap:.5rem}.projects-page .project .project__links .project-link{display:flex;align-items:center;text-decoration:none;font-size:.75rem;font-weight:600;gap:.25rem;padding:.25rem .75rem;border-radius:.25rem;background:hsla(var(--accent) / .05);color:hsl(var(--text));border:1px solid hsla(var(--accent) / .25)}.projects-page .project .project__links .project-link:hover,.projects-page .project .project__links .project-link:focus-visible{background:hsla(var(--accent) / .2);border-color:hsla(var(--accent) / .1)}.projects-page .project .project__links .project-link:active{background:hsla(var(--accent) / .1);border-color:hsla(var(--accent) / .2)}.theme-picker{display:flex;flex-direction:column;gap:.5rem}.input-container{display:flex;flex-direction:row;color:hsl(var(--subtext0));border:2px solid hsl(var(--surface0));background-color:transparent;border-radius:.5rem;font-size:.75rem;justify-content:space-apart;overflow:hidden}.input-container *{outline:none}.input-container .input-label{padding:.5rem .25rem .5rem .5rem;flex:1;-webkit-user-select:none;user-select:none;font-weight:600;color:hsl(var(--subtext1))}.input-container select,.input-container input{position:relative;border:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;text-align:center;font-size:.75rem;height:calc(100% - .4rem);background-color:hsl(var(--surface0));color:hsl(var(--subtext1));border-radius:.25rem;margin:.2rem;padding:0 .5rem;cursor:pointer}.input-container select[type=checkbox],.input-container input[type=checkbox]{aspect-ratio:1}.input-container select[type=checkbox]:after,.input-container input[type=checkbox]:after{content:"✓";position:absolute;top:50%;left:50%;color:hsl(var(--crust));opacity:0;font-size:1.25rem;font-weight:700;transform:translate(-50%,-50%) scale(.8)}.input-container select[type=checkbox]:checked,.input-container input[type=checkbox]:checked{background-color:hsl(var(--blue));border-color:hsl(var(--blue))}.input-container select[type=checkbox]:checked:after,.input-container input[type=checkbox]:checked:after{opacity:1;transform:translate(-50%,-50%) scale(1)}.input-container select[type=checkbox]:checked:hover,.input-container select[type=checkbox]:checked:focus-visible,.input-container input[type=checkbox]:checked:hover,.input-container input[type=checkbox]:checked:focus-visible{background-color:hsla(var(--blue) / .8);border-color:hsl(var(--blue))}.input-container select[type=checkbox]:checked:active,.input-container input[type=checkbox]:checked:active{background-color:hsla(var(--blue) / .6);border-color:hsl(var(--blue))}.input-container .input-container__input:hover,.input-container .input-container__input:focus-visible{background-color:hsl(var(--surface1));border-color:hsl(var(--surface1))}.input-container .input-container__input:active{background-color:hsl(var(--surface2));border-color:hsl(var(--surface2))}.input-container:hover,.input-container:focus-visible,.input-container:has(:focus-visible){background-color:hsla(var(--blue) / .05);border-color:hsl(var(--surface1));color:hsl(var(--text))}.input-container:focus-visible,.input-container:has(:focus-visible){outline-color:hsl(var(--blue))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.uses-grid{display:grid;grid-template-columns:200px 1fr;align-items:center;margin:0;padding:0;border:1px solid hsl(var(--surface1));border-radius:.5rem;overflow:hidden}.uses-grid .uses-row{display:contents}.uses-grid .uses-row .uses-key,.uses-grid .uses-row .uses-value{padding:.4rem .5rem;height:100%;transition:none}.uses-grid .uses-row .uses-key{font-weight:700;color:hsl(var(--subtext1));text-align:right;position:relative;z-index:1;background:hsla(var(--surface0) / .25)}.uses-grid .uses-row .uses-value{color:hsl(var(--subtext0))}.uses-grid .uses-row .uses-note{font-size:.8rem;color:hsl(var(--subtext0));margin-top:.25rem}.uses-grid .uses-row:nth-child(2n) .uses-key{background:hsla(var(--surface1) / .4)}.uses-grid .uses-row:nth-child(2n) .uses-value{background:hsla(var(--surface0) / .25)}.uses-grid .uses-row:hover .uses-value,.uses-grid .uses-row:hover .uses-key{background-color:hsla(var(--blue) / .2);border-color:hsl(var(--blue))}
