*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(147,197,253,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(147,197,253,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }*,:after,:before{box-sizing:border-box}blockquote,body,dd,dl,figure,h1,h2,h3,h4,p{margin:0}ol[role=list],ul[role=list]{list-style:none}html{-moz-text-size-adjust:none;text-size-adjust:none;-webkit-text-size-adjust:none}html:focus-within{scroll-behavior:smooth}body{line-height:1.5;min-height:100vh;text-rendering:optimizeSpeed}a:not([class]){-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto}img,picture{display:block;max-width:100%}button,input,select,textarea{font:inherit}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:100 900;src:local(""),url(/assets/fonts/inter/inter-variable.woff2) format("woff2")}@font-face{font-display:swap;font-family:Redhat;font-style:normal;font-weight:700;src:local(""),url(/assets/fonts/redhat/red-hat-display-v7-latin-900.woff2) format("woff2"),url(/assets/fonts/redhat/red-hat-display-v7-latin-900.woff) format("woff")}@font-face{font-display:swap;font-family:RobotoMono;font-style:normal;font-weight:400;src:local(""),url(/assets/fonts/robotomono/robotomono-variablefont_wght-webfont.woff2) format("woff2"),url(/assets/fonts/robotomono/robotomono-variablefont_wght-webfont.woff) format("woff")}@font-face{font-display:swap;font-family:Roboto Flex;font-stretch:100%;font-style:normal;font-weight:100 1000;src:url(https://fonts.gstatic.com/s/robotoflex/v9/NaNeepOXO_NexZs0b5QrzlOHb8wCikXpYqmZsWI-__OGfttPZktqc2VdZ80KvCLZaPcSBZtOx2MifRuWR28sPJtUMbsFEK6cRrleUx9Xgbm3WLHa_F4Ep4Fm0PN19Ik5Dntczx0wZGzhPlL1YNMYKbv9_1IQXOw7AiUJVXRrV8cWW4O8LJCoXjCnwSRSaLshNP1d9-8mF8tqHbFvug.woff2) format("woff2");unicode-range:u+0100-024f,u+0259,u+1e??,u+2020,u+20a0-20ab,u+20ad-20cf,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Roboto Flex;font-stretch:100%;font-style:normal;font-weight:100 1000;src:url(https://fonts.gstatic.com/s/robotoflex/v9/NaNeepOXO_NexZs0b5QrzlOHb8wCikXpYqmZsWI-__OGfttPZktqc2VdZ80KvCLZaPcSBZtOx2MifRuWR28sPJtUMbsFEK6cRrleUx9Xgbm3WLHa_F4Ep4Fm0PN19Ik5Dntczx0wZGzhPlL1YNMYKbv9_1IQXOw7AiUJVXRrV8cWW4O8LJCoXjCnwSRSaLshNP1d9-EmF8tqHbE.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}:root{--color-dark:#000;--color-light:#fff;--color-light-glare:#dcdddd;--color-primary:#1e50a2;--color-primary-glare:#4e4f97;--color-secondary:#ec6d71;--color-secondary-glare:#c099a0;--space-xs:clamp(0.5625rem,0.50rem + 0.29vw,0.75rem);--space-s:clamp(0.75rem,0.67rem + 0.39vw,1rem);--space-m:clamp(1.5rem,1.34rem + 0.78vw,2rem);--space-l:clamp(2.25rem,2.02rem + 1.17vw,3rem);--space-xl:clamp(3.75rem,3.36rem + 1.94vw,5rem);--space-2xl:clamp(6rem,5.38rem + 3.11vw,8rem);--space-3xl:clamp(9.75rem,8.74rem + 5.05vw,13rem);--space-xs-s:clamp(0.5625rem,0.43rem + 0.68vw,1rem);--space-s-m:clamp(0.75rem,0.36rem + 1.94vw,2rem);--space-m-l:clamp(1.5rem,1.03rem + 2.33vw,3rem);--space-l-xl:clamp(2.25rem,1.40rem + 4.27vw,5rem);--space-l-2xl:clamp(2.25rem,0.46rem + 8.93vw,8rem);--space-xl-2xl:clamp(3.75rem,2.43rem + 6.60vw,8rem);--space-2xl-3xl:clamp(6rem,3.83rem + 10.87vw,13rem);--size-step-0:clamp(0.75rem,0.67rem + 0.39vw,1rem);--size-step-1:clamp(0.9rem,0.73rem + 0.83vw,1.4375rem);--size-step-2:clamp(1.08125rem,0.80rem + 1.43vw,2rem);--size-step-3:clamp(1.29375rem,0.82rem + 2.36vw,2.8125rem);--size-step-4:clamp(1.5625rem,0.81rem + 3.79vw,4rem);--size-step-5:clamp(1.875rem,0.71rem + 5.83vw,5.625rem);--size-step-6:clamp(1.625rem,-0.34rem + 9.81vw,7.9375rem);--font-display:Roboto Flex,Inter,NYTCheltenham,Redhat,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;--font-base:Roboto Flex,Inter,NYTFranklin,Inter,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;--font-mono:RobotoMono,monospace;--gutter:var(--space-s-m);--border-radius:0.5rem;--transition-base:250ms ease;--transition-movement:200ms linear;--transition-fade:200ms ease;--transition-bounce:500ms cubic-bezier(0.5,0.05,0.2,1.5);--tracking:-0.0ch;--tracking-s:-0.02ch}body{background:var(--color-light);color:var(--color-dark);font-family:var(--font-base);font-size:var(--size-step-1);letter-spacing:var(--tracking);line-height:1.4}h1,h2,h3{font-family:var(--font-display);letter-spacing:var(--tracking-s);line-height:1}h1{font-size:var(--size-step-5)}h2{font-size:var(--size-step-4)}h3{font-size:var(--size-step-3)}blockquote:not([class]),li,p{max-width:60ch}h1,h2,h3{max-width:30ch}blockquote{-webkit-border-start:.8rem solid var(--color-primary);border-inline-start:.8rem solid var(--color-primary);font-size:var(--size-step-2);padding:var(--space-m-l)}blockquote>*+*{margin-top:var(--space-m-l)}blockquote :last-child{font-family:var(--font-base);font-size:var(--size-step-1);font-style:normal}svg{flex:none;height:2ex;width:auto}[role=list]{padding:0}a{color:currentcolor}a:hover{text-decoration:none}:focus{outline:3px solid;outline-offset:.3ch}:target{scroll-margin-top:2ex}main:focus{outline:none}::-moz-selection{background:var(--color-dark);color:var(--color-light)}::selection{background:var(--color-dark);color:var(--color-light)}.preload-transitions *{transition:none!important}.blog h1{font-size:var(--size-step-4)}.blog h2{font-size:var(--size-step-3)}.blog h3{font-size:var(--size-step-2)}.blog img{height:auto;width:100%}.card{background:var(--color-dark);border:4px solid var(--color-dark);border-radius:var(--border-radius);color:var(--color-light);max-width:unset;padding:var(--space-m-l)}.card ::-moz-selection{background:var(--color-secondary);color:var(--color-dark)}.card ::selection{background:var(--color-secondary);color:var(--color-dark)}.card h2{font-size:var(--size-step-3)}.card h2 a,.card h3 a{text-decoration:none}.card:focus-within,.card:hover{border:4px solid var(--color-primary)}.card a{text-decoration:none}.card:focus-within a:focus{outline:none}.card{position:relative}.card a:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0}code,pre{background:var(--color-dark);border-radius:var(--border-radius);color:var(--color-light);font-family:var(--font-mono);font-size:var(--size-step-0);padding:.125em .4em}pre[class*=language-]{padding:var(--space-s-m)}code[class*=language-]{padding:0}code[class*=language-],pre[class*=language-]{word-wrap:normal;background:var(--color-dark);border-radius:var(--border-radius);color:var(--color-light);-webkit-hyphens:none;hyphens:none;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;text-align:left;white-space:pre;word-break:normal;word-spacing:normal}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{background:var(--color-dark)}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{background:var(--color-dark)}:not(pre)>code[class*=language-]{border-radius:var(--border-radius);padding:.1em;white-space:normal}pre[class*=language-]{overflow:auto;position:relative}.language-css>code,.language-sass>code,.language-scss>code{color:#fd9170}[class*=language-] .namespace{opacity:.7}.token.atrule{color:#d2b1e7}.token.attr-name{color:#ffcb6b}.token.attr-value,.token.attribute{color:#80cbc4}.token.boolean{color:#d2b1e7}.token.builtin{color:#ffcb6b}.token.cdata,.token.char{color:#80cbc4}.token.class{color:#ffcb6b}.token.class-name,.token.color{color:#ff8b59}.token.comment{color:#779daf}.token.constant{color:#d2b1e7}.token.deleted{color:#ee979c}.token.doctype{color:#546e7a}.token.entity{color:#ee979c}.token.function{color:#d2b1e7}.token.hexcode{color:#ff8b59}.token.id,.token.important{color:#d2b1e7;font-weight:700}.token.inserted{color:#80cbc4}.token.keyword{color:#d2b1e7;font-style:italic}.token.number{color:#fd9170}.token.operator{color:#89ddff}.token.prolog{color:#546e7a}.token.property,.token.pseudo-class,.token.pseudo-element,.token.punctuation{color:#80cbc4}.token.regex{color:#ff8b59}.token.selector{color:#ee979c}.token.string{color:#f48ea2}.token.symbol{color:#d2b1e7}.token.tag,.token.unit{color:#ee979c}.token.url{color:#fd9170}.token.variable{color:#ee979c}.codepen{border:2px dashed var(--color-bg-accent);color:var(--color-text-accent);padding:var(--space-xs)}.cp_embed_wrapper{display:grid;grid-template-areas:"container";overflow:auto;place-items:center;position:relative}.cp_embed_wrapper iframe{grid-area:container;width:100%}@media (min-width:48em){nav.navbar{--nav-button-display:none;--nav-position:static}nav.navbar ul{--nav-list-background:transparent;--nav-list-layout:row;--nav-list-position:static;--nav-list-padding:0;--nav-list-height:auto;--nav-list-width:100%;--nav-list-shadow:none;--nav-list-transform:none;--nav-list-visibility:visible}}.ontop{position:relative;z-index:1}nav.navbar{inset-inline-end:.1rem;position:var(--nav-position,absolute)}nav.navbar ul{background:var(--nav-list-background,var(--color-light));box-shadow:var(--nav-list-shadow,-5px 0 11px 0 rgba(0,0,0,.2));display:flex;flex-direction:var(--nav-list-layout,column);flex-wrap:wrap;gap:.9rem;height:var(--nav-list-height,100vh);inset-block-start:0;inset-inline-end:0;list-style:none;margin:0;padding:var(--nav-list-padding,2rem);position:var(--nav-list-position,fixed);visibility:var(--nav-list-visibility,visible);width:var(--nav-list-width,min(22rem,100vw))}nav.navbar [aria-expanded=false]+ul{transform:var(--nav-list-transform,translateX(100%));visibility:var(--nav-list-visibility,hidden)}@media (prefers-reduced-motion:no-preference){nav.navbar [aria-expanded=true]+ul,nav.navbar svg{transition:transform .4s cubic-bezier(.68,-.55,.27,1.55),visibility .05s linear}}nav.navbar a{--text-color:var(--color-dark);-webkit-border-after:3px solid var(--border-color,transparent);border-block-end:3px solid var(--border-color,transparent);color:var(--text-color);padding:.1rem;text-decoration:none}nav.navbar a:where(:hover,:focus){--border-color:var(--text-color)}nav.navbar [aria-current=page]{--border-color:var(--color-primary);--text-color:var(--color-primary)}nav.navbar button{all:unset;align-items:center;cursor:pointer;display:var(--nav-button-display,flex);padding:var(--space-xs) 0;position:relative;z-index:2}nav.navbar span{-webkit-padding-end:var(--space-xs);font-size:var(--size-step-0);font-weight:700;padding-inline-end:var(--space-xs);text-transform:uppercase}nav.navbar svg{height:100%;width:auto}header svg{transform:translateY(-.1em)}nav.navbar [aria-expanded=true] svg{transform:var(--nav-list-rotate,rotate(45deg))}.page img{height:auto;width:100%}.post-tag{align-items:center;border:solid var(--color-dark);border-radius:.3em;color:var(--color-dark);display:inline-flex;font-family:var(--font-mono);font-size:var(--size-step-0);justify-content:center;line-height:1.3em;margin-left:.2em;padding:.05em .2em;text-decoration:none;text-transform:lowercase}a[href].post-tag,a[href].post-tag:visited{color:inherit}a[href].post-tag:focus,a[href].post-tag:hover{background-color:var(--color-light-glare)}.postlist-item>.post-tag{align-self:center}.prose{--flow-space:var(--space-m-l);--wrapper-max-width:55rem}.prose :is(h2,h3,h4)+*{--flow-space:var(--space-s-m)}.prose h3 a :is(:hover,:focus){text-decoration:underline}.prose h3 a{text-decoration:none}.prose .heading-anchor:is(:hover,:focus){text-decoration:underline}.prose .heading-anchor{text-decoration:none}.prose mark{background:var(--color-primary-glare)}.section>.seperator:first-child{transform:rotate(180deg) translateY(-1px)}.section__inner{background:var(--spot-color,var(--color-dark));color:var(--color-light)}.section blockquote{font-size:var(--size-step-4);font-weight:700;letter-spacing:var(--tracking-s);line-height:1}.section :is(h1,h2,h3,blockquote){opacity:95%}.seperator{fill:var(--spot-color,var(--color-light));display:block;height:3.5em;width:100%}.site-foot{background:var(--color-dark);color:var(--color-light);padding:var(--space-s-m)}.site-foot__inner{align-items:center;display:flex;flex-wrap:wrap;gap:var(--space-xs-s);justify-content:center}.site-foot svg{height:1em;width:1em}.site-head{background-color:var(--color-light)}.site-head__inner{flex-wrap:wrap;justify-content:space-between}.logo,.site-head__inner{align-items:center;display:flex}.logo{font-weight:700;gap:var(--space-xs);letter-spacing:-.02rem;padding:var(--space-xs) 0;text-transform:uppercase}.skip-link{clip:rect(1px,1px,1px,1px);display:block;height:1px;left:1rem;overflow:hidden;position:absolute;top:1rem;width:1px;z-index:999}.skip-link:focus{clip:auto;background-color:var(--color-dark);color:var(--color-light);height:auto;line-height:1;overflow:visible;padding:var(--space-s-m);width:auto}.skip-link:not(:focus){clip:rect(0 0 0 0);border:0;height:auto;margin:0;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.gradient-text{background:conic-gradient(at 35% 55%,var(--color-primary) 12%,var(--color-primary) 33%,var(--color-secondary) 33%,var(--color-secondary) 50%,var(--color-primary) 50%,var(--color-primary) 70%,var(--color-secondary) 70%,var(--color-secondary) 95%,var(--color-primary) 95%);-webkit-background-clip:text;background-clip:text;background-size:50%;color:transparent;padding:.6rem 0}.youtube-embed{aspect-ratio:16/9}.cluster>*{display:flex;flex-wrap:wrap;margin:calc(var(--space-s-l)/2*-1)}.cluster>*>*{margin:calc(var(--space-s-l)/2)}.grid{display:grid;gap:var(--gutter,var(--space-s-l));grid-template-columns:repeat(var(--grid-placement,auto-fill),minmax(var(--grid-min-item-size,16rem),1fr))}.grid[data-rows=masonry]{align-items:start;grid-template-rows:masonry}.grid[data-layout="50-50"]{--grid-placement:auto-fit;--grid-min-item-size:clamp(16rem,50vw,26rem)}.content{--wrapper-max-width:75rem;display:grid;grid-template-columns:1fr min(48ch,100%) 1fr}.content>*{grid-column:2}.content .breakout{grid-column:1/4;width:100%}.flow>*+*{margin-top:var(--flow-space,1em)}.region{padding-bottom:var(--region-space-bottom,var(--space-l-2xl));padding-top:var(--region-space-top,var(--space-l-2xl))}.wrapper{margin-left:auto;margin-right:auto;max-width:var(--wrapper-max-width,85rem);padding-left:var(--gutter);padding-right:var(--gutter)}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.mt-l-xl{margin-top:clamp(2.25rem,1.4rem + 4.27vw,5rem)}.inline{display:inline}.table{display:table}.grid{display:grid}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.overflow-hidden{overflow:hidden}.text-center{text-align:center}.no-underline{text-decoration-line:none}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.spot-color-primary{--spot-color:#1e50a2}.spot-color-secondary{--spot-color:#ec6d71}