.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}@font-face{font-family:IBM Plex Sans;src:url(/assets/fonts/IBM%20Plex%20Sans%20Var-Roman.woff2) format("woff2")}@font-face{font-family:IBM Plex Sans;font-style:italic;src:url(/assets/fonts/IBM%20Plex%20Sans%20Var-Italic.woff2) format("woff2")}@font-face{font-family:IBM Plex Mono;font-weight:400;src:url(/assets/fonts/IBMPlexMono-Regular.woff2) format("woff2")}@font-face{font-family:IBM Plex Mono;font-weight:400;font-style:italic;src:url(/assets/fonts/IBMPlexMono-Italic.woff2) format("woff2")}@font-face{font-family:IBM Plex Mono;font-weight:450;src:url(/assets/fonts/IBMPlexMono-Text.woff2) format("woff2")}@font-face{font-family:IBM Plex Mono;font-weight:450;font-style:italic;src:url(/assets/fonts/IBMPlexMono-TextItalic.woff2) format("woff2")}@font-face{font-family:IBM Plex Mono;font-weight:500;src:url(/assets/fonts/IBMPlexMono-Medium.woff2) format("woff2")}@font-face{font-family:IBM Plex Mono;font-weight:500;font-style:italic;src:url(/assets/fonts/IBMPlexMono-MediumItalic.woff2) format("woff2")}:root{--step--2: clamp(.6944rem, .6856rem + .0444vw, .72rem);--step--1: clamp(.8333rem, .8101rem + .1159vw, .9rem);--step-0: clamp(1rem, .9565rem + .2174vw, 1.125rem);--step-1: clamp(1.2rem, 1.1283rem + .3587vw, 1.4063rem);--step-2: clamp(1.44rem, 1.3295rem + .5527vw, 1.7578rem);--step-3: clamp(1.728rem, 1.5648rem + .8161vw, 2.1973rem);--step-4: clamp(2.0736rem, 1.8395rem + 1.1704vw, 2.7466rem);--step-5: clamp(2.4883rem, 2.1597rem + 1.6433vw, 3.4332rem);--space-3xs: clamp(.25rem, .2283rem + .1087vw, .3125rem);--space-2xs: clamp(.5rem, .4783rem + .1087vw, .5625rem);--space-xs: clamp(.75rem, .7065rem + .2174vw, .875rem);--space-s: clamp(1rem, .9565rem + .2174vw, 1.125rem);--space-m: clamp(1.5rem, 1.4348rem + .3261vw, 1.6875rem);--space-l: clamp(2rem, 1.913rem + .4348vw, 2.25rem);--space-xl: clamp(3rem, 2.8696rem + .6522vw, 3.375rem);--space-2xl: clamp(4rem, 3.8261rem + .8696vw, 4.5rem);--space-3xl: clamp(6rem, 5.7391rem + 1.3043vw, 6.75rem);--space-3xs-2xs: clamp(.25rem, .1413rem + .5435vw, .5625rem);--space-2xs-xs: clamp(.5rem, .3696rem + .6522vw, .875rem);--space-xs-s: clamp(.75rem, .6196rem + .6522vw, 1.125rem);--space-m-l: clamp(1.5rem, 1.2391rem + 1.3043vw, 2.25rem);--space-l-xl: clamp(2rem, 1.5217rem + 2.3913vw, 3.375rem);--space-xl-2xl: clamp(3rem, 2.4783rem + 2.6087vw, 4.5rem);--space-2xl-3xl: clamp(4rem, 3.0435rem + 4.7826vw, 6.75rem);--space-s-m: clamp(1rem, .7609rem + 1.1957vw, 1.6875rem);--space-s-l: clamp(1rem, .5652rem + 2.1739vw, 2.25rem);--space-s-xl: clamp(1rem, .1739rem + 4.1304vw, 3.375rem);--space-s-2xl: clamp(1rem, -.2174rem + 6.087vw, 4.5rem);--space-s-3xl: clamp(1rem, -1rem + 10vw, 6.75rem);--space-m-2xl: clamp(1.5rem, .4565rem + 5.2174vw, 4.5rem);--flow-space: var(--space-m-l);--flow-space-lg: var(--space-m-2xl);--flow-space-xl: var(--space-s-3xl);--font-stack: "IBM Plex Sans", -apple-system, "BlinkMacSystemFont", "Segoe UI", "Roboto", "Helvetica Neue", "Arial", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--font-stack-mono: "IBM Plex Mono", ui-monospace, "SFMono-Regular", "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--background-color: #fdfdfd;--background-color-secondary: #f5f5f5;--background-color-tertiary: #e0e0e0;--text-color: #303030;--text-color-muted: #707070;--link-color: #3c7a9e;--link-color-hover: #2d5c77;font-family:var(--font-stack)}[data-user-theme=dark]{--background-color: #303030;--background-color-secondary: #1e1e1e;--background-color-tertiary: #2c2c2c;--text-color: #e0e0e0;--text-color-muted: #b0b0b0;--link-color: #65c8ff;--link-color-hover: #4ca1d2}*,*:before,*:after{box-sizing:border-box}html{-moz-text-size-adjust:none;-webkit-text-size-adjust:none;text-size-adjust:none}body,h1,h2,h3,h4,p,figure,blockquote,dl,dd{margin-block-end:0}ul[role=list],ol[role=list]{list-style:none}body{margin:0;min-height:100vh;line-height:1.618}h1,h2,h3,h4,button,input,label{line-height:1.2}h1,h2,h3,h4{text-wrap:balance}a:not([class]){text-decoration-skip-ink:auto}img,picture{max-width:100%;display:block;height:auto}input,button,textarea,select{font-family:inherit;font-size:inherit}textarea:not([rows]){min-height:10em}:target{scroll-margin-block:5ex}body{background-color:var(--background-color);font-size:var(--step-0);font-weight:450;color:var(--text-color)}.iframe iframe{width:100%}h1,h2,h3,h4,h5,h6{font-family:var(--font-stack);font-weight:600;text-wrap:balance;letter-spacing:-.01em;word-break:break-word}h1,.h1{font-size:var(--step-4);letter-spacing:-.035em;font-variation-settings:"wdth" 100}h2,.h2{font-size:var(--step-3)}h3,.h3{font-size:var(--step-2)}h4,.h4{font-size:var(--step-1)}code{font-family:var(--font-stack-mono);font-weight:450;font-size:var(--step-0);background-color:var(--background-color-secondary);font-size:calc(var(--step-0) - 2px);text-wrap-mode:wrap;text-wrap-style:pretty;margin-inline:calc(-1 * var(--flow-space))}p code,li code{display:inline;margin-inline:initial;padding:2px 4px}a{font-weight:inherit;color:var(--link-color);text-underline-offset:1.5px;transition:color .2s ease-in-out,text-underline-offset .2s ease-in-out}a:hover,a:focus{color:var(--link-color-hover);text-underline-offset:3px}p,li{text-wrap:pretty}p.lead,li.lead{font-size:var(--step-1);font-weight:550;letter-spacing:-.01em;font-variation-settings:"wdth" 100}figure{margin:0;padding:0}@media (min-width: 800px){figure{margin-right:calc(-1 * var(--flow-space-xl));margin-left:calc(-1 * var(--flow-space-xl))}}figure img{border-radius:.5rem;overflow:hidden}figure figcaption{font-size:var(--step--1);color:var(--text-color-muted);margin-top:.5rem;font-style:italic;text-wrap:pretty}@media (min-width: 800px){figure figcaption{padding-right:var(--flow-space-xl);padding-left:var(--flow-space-xl)}}time{font-family:var(--font-stack-mono);font-size:var(--step--1);font-weight:500;color:var(--text-color-muted)}lite-youtube{max-width:100%!important}.o-container{max-width:75ch;margin:0 auto;padding:0 var(--flow-space)}.o-btn{display:inline-flex;justify-content:center;align-items:center;padding:.5rem 1rem;background-color:var(--background-color-secondary);color:var(--text-color);border:none;border-radius:.5rem;cursor:pointer;text-decoration:none;box-shadow:0 1px 2px var(--background-color-tertiary);transition:background-color .2s ease-in-out,box-shadow .2s ease-in-out}.o-btn svg{width:24px;height:24px;margin-right:8px}.o-btn:hover,.o-btn:focus{background-color:var(--background-color-tertiary)}.o-dropdown{position:absolute;background-color:var(--background-color-secondary)}.o-dropdown.hidden{display:none}.o-list{margin:0;padding:0;list-style:none}.o-list--inline{display:inline-flex;flex-wrap:wrap;gap:var(--space-s)}.o-list--inline li{display:flex;align-items:center}.o-list--inline li svg{width:32px;margin-right:var(--space-2xs)}.c-flow>*+*{margin-block-start:var(--flow-space)}.c-flow>:is(h2,h3,h4):not(:first-child){margin-block-start:var(--flow-space-lg)}.c-flow>:is(h1,h2,h3)+p,.c-flow>:is(h1,h2,h3)+ul{margin-block-start:var(--space-xs-s)}.c-flow>time+:is(h1,h2,h3,h4):not(:first-child){margin-block-start:var(--space-2xs)}.hidden{display:none!important}.c-header{padding:var(--space-s-xl) 0}.c-header__inner{display:flex;justify-content:space-between;align-items:flex-start}@media (min-width: 768px){.c-header__inner{align-items:center}}.c-header__logo{font-size:var(--step-1)}.c-header__right{position:relative;padding-left:1rem}.c-header__right svg{margin-right:0}@media (min-width: 768px){.c-header__right svg{margin-right:.5rem}}.c-header__right #theme-toggle{padding:.5rem;display:flex;align-items:center;justify-content:center;transition:all .2s ease}@media (min-width: 768px){.c-header__right #theme-toggle{padding:.5rem 1rem}}.c-header__right #theme-toggle svg{margin-right:0;transition:opacity .2s ease}.c-header__right #theme-toggle:hover{opacity:.7}.c-header__right #theme-toggle .hidden{display:none}.c-nav{display:flex;flex-direction:row;justify-content:space-between;margin-top:.5rem}.c-nav ul{display:flex;flex-direction:row;list-style:none;padding:0;margin:0}.c-nav ul li{margin-right:1rem}.c-nav ul li:last-of-type{margin-right:0}nav,.logo{font-family:var(--font-stack)}.c-footer{padding:var(--space-s-xl) 0;font-size:var(--step--1);text-align:center}.c-footer ul{display:flex;margin:0 0 1rem;padding:0;justify-content:center;list-style:none}.c-footer ul li{margin:0 1rem}.c-footer ul li a{color:var(--link-color);text-decoration:none;transition:color .2s ease-in-out}.c-footer ul li a:hover,.c-footer ul li a:focus{color:var(--link-color-hover)}.c-footer ul li a svg path{fill:currentColor}.c-article+.c-article{margin-block-start:var(--flow-space-lg)}.c-article--project{display:flex;align-items:flex-start}.c-article--project .c-article__left{flex-grow:1}.c-article--project .c-article__left h2{margin-block-start:0}.c-article--project .c-article__right{margin-block-start:0;width:20%;flex-shrink:0;padding-left:var(--space-m)}@media (min-width: 980px){.c-article pre{margin-right:calc(-1 * var(--flow-space-xl));margin-left:calc(-1 * var(--flow-space-xl))}}.c-alert{padding:var(--space-m);border-radius:var(--border-radius)}.c-alert time{margin-bottom:.5rem;font-weight:500;display:block}.c-alert--update{background-color:var(--background-color-secondary);border-radius:.25rem}.c-gallery{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;-webkit-overflow-scrolling:touch}@media (min-width: 800px){.c-gallery{margin-right:calc(-1 * var(--flow-space-xl));margin-left:calc(-1 * var(--flow-space-xl))}}.c-gallery::-webkit-scrollbar{width:10px;height:10px}.c-gallery::-webkit-scrollbar-thumb{background:#000;border-radius:10px}.c-gallery::-webkit-scrollbar-track{background:transparent}.c-gallery>figure{display:flex;flex-direction:column;justify-content:center;align-items:center;margin:0 var(--flow-space) 0 0;width:100%;flex-shrink:0;scroll-snap-align:center}.u-flex-direction-column{flex-direction:column}
