@layer reset{*,:before,:after{box-sizing:border-box}:not(dialog){margin:0}@media (prefers-reduced-motion:no-preference){@view-transition{navigation:auto}}@media screen{:root{--theme:light;color-scheme:light dark;@media (prefers-color-scheme:dark){--theme:dark}}[data-theme]{color-scheme:var(--theme)}[data-theme=light]{--theme:light}[data-theme=dark]{--theme:dark}@container style(--theme:light){[data-theme=inverted]{--theme:dark}}@container style(--theme:dark){[data-theme=inverted]{--theme:light}}}html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;scroll-behavior:smooth;scrollbar-gutter:stable;block-size:100%;@media (prefers-reduced-motion:no-preference){interpolate-size:allow-keywords}}body{background:var(--body-bg-color,canvas);min-block-size:100%;color:var(--text-color,canvasText);font-size:var(--step-0,1rem);font-weight:var(--font-weight-normal);font-family:var(--font-body,system-ui, sans-serif);font-synthesis-weight:none;line-height:var(--leading-normal,1.5);hanging-punctuation:first last;-webkit-font-smoothing:var(--font-smoothing,antialiased);overflow-wrap:break-word}h1,h2,h3,h4,h5,h6{font-family:var(--font-heading,inherit);text-box:trim-both cap alphabetic;text-wrap:balance}h1{font-size:var(--step-6,2.986rem);font-weight:var(--font-weight-bold,700);line-height:var(--leading-none,1)}h2{font-size:var(--step-4,2.0736rem);font-weight:var(--font-weight-bold,700);line-height:var(--leading-tight,1.15)}h3{font-size:var(--step-2,1.44rem);font-weight:var(--font-weight-semibold,600);line-height:var(--leading-snug,1.3)}h4{font-size:var(--step-1,1.2rem);font-weight:var(--font-weight-medium,500);line-height:var(--leading-snug,1.3)}h5{font-size:var(--step-0,1rem);font-weight:var(--font-weight-medium,500);line-height:var(--leading-normal,1.45)}h6{font-size:var(--step--1,.8333rem);font-weight:var(--font-weight-medium,500);line-height:var(--leading-normal,1.6)}hgroup p{text-wrap:balance}p,li,dd{max-inline-size:var(--measure,70ch);text-wrap:pretty}strong,b{font-weight:var(--font-weight-semibold,600)}small{font-size:var(--step--1,.8333em)}sub,sup{vertical-align:baseline;font-size:var(--step--1,.8333em);display:inline-block}sub{transform:translateY(.75ex)}sup{transform:translateY(-.75ex)}address{font-style:normal}blockquote{& p:first-of-type:before{content:open-quote}& p:last-of-type:after{content:close-quote}}q{font-style:italic}hr{color:inherit;border:0;border-block-start:var(--hr-border-width,1px) var(--hr-border,solid) var(--hr-border-color,currentColor)}abbr{cursor:help;text-underline-offset:.125em}ol[role=list],ul[role=list]{padding-inline-start:0;list-style:none}dt{font-weight:var(--font-weight-bold,bold)}dd{margin-inline-start:var(--space-s,1rem)}a[href],area,button,:where(input:not([type=text],[type=email],[type=number],[type=password],[type=""],[type=tel],[type=url])),label[for],label:has(input),select,summary,[tabindex]:not([tabindex*=\-],pre){cursor:pointer}::file-selector-button{cursor:pointer}a[href],area,button,input,label[for],select,summary,textarea,[tabindex]:not([tabindex*=\-]){touch-action:manipulation;-webkit-tap-highlight-color:transparent}a,summary{background:var(--link-bg-color,#0000);color:var(--link-color,LinkText);-webkit-text-decoration-line:var(--link-decoration-line,underline);text-decoration-line:var(--link-decoration-line,underline);-webkit-text-decoration-style:var(--link-decoration-style,solid);text-decoration-style:var(--link-decoration-style,solid);-webkit-text-decoration-color:var(--link-decoration-color,currentColor);text-decoration-color:var(--link-decoration-color,currentColor);text-decoration-thickness:var(--link-decoration-thickness,auto);text-underline-offset:var(--link-underline-offset,.1625em);&:visited{color:var(--link-visited-color,VisitedText)}&:hover{color:var(--link-hover-color,currentColor);-webkit-text-decoration-style:var(--link-decoration-style-hover,solid);text-decoration-style:var(--link-decoration-style-hover,solid);-webkit-text-decoration-color:var(--link-decoration-color-hover,currentColor);text-decoration-color:var(--link-decoration-color-hover,currentColor);text-decoration-thickness:var(--link-decoration-thickness-hover,3px);-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}&:active{color:var(--link-active-color,canvasText)}&:focus-visible{box-shadow:0 var(--focus-ring-width,3px) var(--focus-color,canvasText);background:var(--focus-bg-color);color:var(--focus-color,canvasText);text-decoration:none}}input,button,textarea,select{font:inherit;color:inherit;letter-spacing:inherit;word-spacing:inherit}input,textarea,select{&:focus-visible{box-shadow:inset 0 0 0 var(--fc-border-width,1px) var(--focus-color,canvasText)}}fieldset{border:none;padding:0}legend,label{font-weight:var(--font-weight-medium,500);line-height:var(--fc-label-line-height,1.3);text-wrap:balance;display:block}legend{padding-inline:unset;font-size:var(--step-1,1.2rem)}:has(>:is([type=radio],[type=checkbox])+label){flex-wrap:nowrap;align-items:center;display:flex;position:relative;&:has(input:hover,label:hover) label:before{box-shadow:0 0 0 var(--focus-ring-width,3px) var(--fc-shadow-color,oklch(from currentColor l c h / .25))}& input{opacity:0;z-index:1;flex-shrink:0;block-size:2.75rem;inline-size:2.75rem;margin-inline-start:-.625rem}& label{--_fc-radio-size:1.5rem;flex-grow:99999;padding-block:.625rem;&:before,&:after{content:"";margin-block:auto;position:absolute;inset-block:0;inset-inline-start:0}&:before{inline-size:var(--_fc-radio-size);block-size:var(--_fc-radio-size);border:var(--fc-border-width,1px) var(--fc-border-style,solid) var(--fc-border-color,currentColor)}}& [type=radio]+label:before{border-radius:var(--radius-full,50%)}& [type=radio]+label:after{inline-size:calc(var(--_fc-radio-size) / 2);block-size:calc(var(--_fc-radio-size) / 2);border-radius:var(--radius-full,50%);background:var(--brand-color,LinkText);opacity:0;inset-inline-start:calc(var(--_fc-radio-size) / 2);translate:-50%}& [type=checkbox]+label:after{border:solid;border-color:var(--brand-color,LinkText);border-block-start-color:#0000;border-inline-end-color:#0000;border-width:0 0 calc(var(--fc-border-width,1px) + 1px) calc(var(--fc-border-width,1px) + 1px);block-size:.375rem;inline-size:.75rem;transform:rotate(-45deg);translate:0 calc(-1 / 2 * var(--fc-border-width,1px));opacity:0;inset-block-start:0;inset-inline-start:.375rem}& :where([type=radio],[type=checkbox]):checked+label:after{opacity:1}& :where([type=radio],[type=checkbox]):focus-visible+label:before{border-width:calc(var(--fc-border-width,1px) + 1px);box-shadow:0 0 0 var(--focus-ring-width,3px) var(--focus-bg-color)}}input[type=checkbox],input[type=radio],input[type=range],progress{accent-color:var(--brand-color,LinkText)}input[type=file]{max-inline-size:100%}input:not([type=button],[type=checkbox],[type=color],[type=file],[type=hidden],[type=image],[type=radio],[type=range],[type=reset],[type=submit]),textarea,select{padding-block:var(--fc-padding-block,.5rem);padding-inline:var(--fc-padding-inline,.75rem);border:var(--fc-border-width,1px) var(--fc-border-style,solid) var(--fc-border-color,currentColor);border-radius:var(--fc-radius,.25rem);background-color:var(--fc-background-color,#0000);color:var(--fc-value-color,inherit);&::placeholder{color:var(--fc-placeholder-color,currentColor);opacity:.5;-webkit-user-select:none;user-select:none}&:disabled{opacity:.37;cursor:not-allowed}}select,textarea{field-sizing:content}textarea{resize:block}textarea:not([rows]){min-block-size:var(--fc-textarea-height,5lh)}input[type=color]{min-block-size:2.5rem;padding:calc(var(--fc-border-width,1px) * 2);border:var(--fc-border-width,1px) var(--fc-border-style,solid) var(--fc-border-color,currentColor);border-radius:var(--fc-radius,.25rem);background:0 0;&::-webkit-color-swatch-wrapper{border-radius:inherit;padding:0}&::-webkit-color-swatch{border-radius:calc(var(--fc-radius,.25rem) - var(--fc-border-width,1px) * 3);border:none}&::-moz-color-swatch{border-radius:calc(var(--fc-radius,.25rem) - var(--fc-border-width,1px) * 3);border:none}}input[type=range]{&:disabled{opacity:.37;cursor:not-allowed}}select:not([size]):not([multiple]){appearance:none;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 1em),calc(100% - .75em);background-repeat:no-repeat;background-size:.25em .25em}select[size],select[multiple]{& optgroup+optgroup,& option{margin-block-start:var(--space-3xs,.25rem)}}optgroup{font-weight:var(--font-weight-medium,500)}button,[type=button],[type=submit],[type=reset]{padding-block:.125em;padding-inline:.5em}::file-selector-button{padding-block:.125em;padding-inline:.5em;@supports (text-box:trim-both cap alphabetic){text-box:trim-both cap alphabetic;padding-block:var(--btn-padding-block,.5em);padding-inline:var(--btn-padding-inline,.5em)}border:var(--btn-border-width,1px) var(--btn-border-style,solid) var(--btn-border-color,#0000);border-radius:var(--btn-radius,.25rem);background:var(--btn-color-bg,ButtonFace);color:var(--btn-color-text,ButtonText);box-shadow:var(--btn-shadow,0 var(--border-width-medium,1px) 0 var(--text-color,canvasText));transition-property:background,scale;transition-duration:var(--transition-fast,75ms);transition-timing-function:var(--ease-in,cubic-bezier(.4, 0, 1, 1));&:hover{background:var(--btn-color-bg-hover,oklch(from ButtonFace .75 c h))}&:active{scale:.98}&:focus-visible{box-shadow:var(--btn-shadow-focus,0 var(--focus-ring-width,3px) 0 var(--focus-color,canvasText));background:var(--focus-bg-color);color:var(--focus-color,canvasText);outline-color:#0000}&:disabled{opacity:.37;cursor:not-allowed}}button,[type=button],[type=submit],[type=reset]{@supports (text-box:trim-both cap alphabetic){text-box:trim-both cap alphabetic;padding-block:var(--btn-padding-block,.5em);padding-inline:var(--btn-padding-inline,.5em)}border:var(--btn-border-width,1px) var(--btn-border-style,solid) var(--btn-border-color,#0000);border-radius:var(--btn-radius,.25rem);background:var(--btn-color-bg,ButtonFace);color:var(--btn-color-text,ButtonText);box-shadow:var(--btn-shadow,0 var(--border-width-medium,1px) 0 var(--text-color,canvasText));transition-property:background,scale;transition-duration:var(--transition-fast,75ms);transition-timing-function:var(--ease-in,cubic-bezier(.4, 0, 1, 1));&:hover{background:var(--btn-color-bg-hover,oklch(from ButtonFace .75 c h))}&:active{scale:.98}&:focus-visible{box-shadow:var(--btn-shadow-focus,0 var(--focus-ring-width,3px) 0 var(--focus-color,canvasText));background:var(--focus-bg-color);color:var(--focus-color,canvasText);outline-color:#0000}&:disabled{opacity:.37;cursor:not-allowed}}code,kbd,samp{padding-inline:var(--code-padding-inline,.25em);border:var(--code-border-width,1px) var(--code-border-style,solid) var(--code-border-color,currentColor);border-radius:var(--code-radius,.25rem);background:var(--code-color-bg);font-family:var(--font-mono,ui-monospace, monospace);font-size:var(--step--1,.8em);line-height:var(--code-line-height,1.15);hyphens:none;tab-size:2;text-align:start;word-spacing:normal;word-break:normal;word-wrap:normal;-webkit-box-decoration-break:clone;box-decoration-break:clone;&:has(>&){padding-inline:unset;background:0 0;border:none;font-size:1em}}pre{inline-size:100%;max-inline-size:fit-content;padding:var(--pre-padding,.875rem);border:var(--pre-border-width,1px) var(--pre-border-style,solid) var(--pre-border-color,currentColor);border-radius:var(--pre-radius,.25em);background:var(--pre-color-bg,#0000);line-height:var(--pre-line-height,1.3);overflow-inline:auto;writing-mode:lr;direction:ltr}pre :where(code,samp,kbd){color:inherit;background:0 0;border:none;padding:0}img,picture,svg,video,canvas,audio,iframe,embed,object{display:block}img,svg,video,iframe{block-size:auto;max-inline-size:100%}figcaption{font-size:var(--step--1,.8333em);font-family:var(--font-mono,monospace)}iframe{border:none}svg{inline-size:var(--icon-size,1em);block-size:var(--icon-size,1em);vertical-align:middle;flex-shrink:0}svg:not([class]){block-size:1lh;inline-size:auto}svg[role=img]{inline-size:revert;block-size:revert}summary{inline-size:fit-content;padding-inline-start:var(--summary-padding-inline-start,1rem);display:block;position:relative;&:before{content:"";clip-path:polygon(0 0,100% 50%,0 100%);border:.4rem solid #0000;border-width:.4rem 0 .4rem .5625rem;border-inline-start-color:inherit;block-size:0;inline-size:0;transition:rotate var(--transition-slow,.2s);margin-block:auto;position:absolute;inset-block:0;inset-inline-start:0}}details::details-content{opacity:0;block-size:0;transition:content-visibility var(--transition-slow,.2s) allow-discrete, block-size var(--transition-slow,.2s), opacity var(--transition-slow,.2s);overflow-y:clip}summary+*{padding-block-start:var(--details-content-padding-block,.5rem);padding-inline-start:var(--summary-padding-inline-start,1rem)}details[open]{& summary:before{rotate:90deg}&::details-content{opacity:1;block-size:auto}}dialog{background-color:var(--dialog-color-bg,Canvas);border:var(--dialog-border-width,1px) var(--dialog-border-style,solid) var(--dialog-border-color,currentColor);border-radius:var(--dialog-radius,.5rem);max-block-size:calc(100vb - (2 * var(--region-space,1lh)));max-inline-size:min(var(--dialog-max-width,45ch), calc(100vi - (2 * var(--wrapper-padding-inline,1lh))));overscroll-behavior:contain;transform:translateY(-1rem);&,&::backdrop{transition:display var(--dialog-transition-duration,.6s) allow-discrete, overlay var(--dialog-transition-duration,.6s) allow-discrete, opacity var(--dialog-transition-duration,.6s) ease, transform var(--dialog-transition-duration,.6s) ease;opacity:0}&[open]{opacity:1;transform:translateY(0);&::backdrop{opacity:.8}}html:has(&[open]){overflow:hidden}@starting-style{&[open],&[open]::backdrop{opacity:0}&[open]{transform:translateY(1rem)}}&::backdrop{background-color:var(--dialog-color-overlay,black);overscroll-behavior:contain;overflow:hidden}}table{border-collapse:collapse;inline-size:100%}caption,th,td{text-align:start}caption,th{font-weight:var(--font-weight-bold,700)}caption{font-size:var(--step-1,1.2rem);line-height:var(--leading-snug,1.3);text-box:trim-both cap alphabetic;text-wrap:balance;margin-block-end:var(--space-s,1rem)}th,td{padding-block:var(--table-cell-padding-block,.25rem);padding-inline:0 var(--table-cell-padding-inline,.5rem);border-block-end:var(--table-border-width,1px) var(--table-border-style,solid) var(--table-border-color,currentColor);text-align:start;vertical-align:text-top;&:last-child{padding-inline-end:0}}:focus-visible{outline-width:var(--focus-ring-width,3px);outline-style:var(--focus-ring-style,solid);outline-color:var(--focus-ring-color,#0000);outline-offset:var(--focus-ring-offset,0px)}::selection{background:var(--color-selection-bg,Highlight);color:var(--color-selection-text,HighlightText);text-shadow:none}:target{scroll-margin-block:var(--target-margin-block,1lh)}[hidden]{display:none!important}@media (prefers-reduced-motion:reduce){*,:after,:before{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}}@layer theme;@layer compositions{.cluster{gap:var(--cluster-gap,1rem);justify-content:var(--cluster-horizontal-alignment,flex-start);align-items:var(--cluster-vertical-alignment,center);flex-wrap:wrap;display:flex}.flow>*+*{margin-block-start:var(--flow-space,1lh)}.grid-auto{grid-template-columns:repeat(var(--grid-placement,auto-fill), minmax(var(--grid-item-min,min(16rem, 100%)), 1fr));gap:var(--grid-gap,1rem);align-items:var(--grid-align-items,stretch);display:grid}.repel{justify-content:space-between;align-items:var(--repel-vertical-alignment,center);gap:var(--repel-gap,1rem);flex-wrap:wrap;display:flex}:has(>.sidebar){gap:var(--sidebar-gap,1rem);align-items:var(--sidebar-vertical-alignment,flex-start);flex-wrap:wrap;display:flex}.sidebar{flex-basis:var(--sidebar-content-min-width,20rem);flex-grow:1}:has(>.sidebar)>:not(.sidebar){min-inline-size:var(--sidebar-wrap-at,50%);flex-grow:99999;flex-basis:0}:has(>.sidebar)>:only-child,:has(>.sidebar)>:nth-child(3){--error:"Sidebar layouts must include exactly two child elements.";outline:var(--border-width-thin,1px) var(--border-style,solid) var(--error-color)}.stack{gap:var(--stack-gap,1lh);justify-content:var(--stack-vertical-alignment,flex-start);align-items:var(--stack-horizontal-alignment,flex-start);flex-direction:column;display:flex}.switcher{gap:var(--switcher-gap,1rem);align-items:var(--switcher-vertical-alignment,flex-start);flex-wrap:wrap;display:flex}.switcher>*{flex-grow:1;flex-basis:calc((var(--switcher-inline-at,40rem) - 100%) * 999)}.switcher>:nth-child(n+3){flex-basis:100%}.wrapper{max-inline-size:var(--wrapper-max-width,80rem);padding-inline:var(--wrapper-padding-inline,1lh);margin-inline:auto}}@layer components{.with-ghost-sidebar{gap:var(--sidebar-gap,1rem);align-items:var(--sidebar-vertical-alignment,flex-start);flex-wrap:wrap;display:flex;&:before{content:"";flex-basis:var(--sidebar-content-min-width,20rem);flex-grow:1}&>*{min-inline-size:var(--sidebar-wrap-at,50%);flex-grow:99999;flex-basis:0}}body{font-size:var(--step-1)}h1,h2,h3{--font-heading:var(--font-display);text-transform:uppercase}h1{font-size:var(--step-8)}h2{font-size:var(--step-5-4)}h3,.heading-3{font-size:var(--step-3-2);letter-spacing:var(--tracking-wide)}.skip-link-container{& a{inline-size:fit-content;font-size:var(--site-header-link-font-size);font-weight:var(--site-header-link-font-weight);display:block}&:focus-within{padding-block:var(--site-header-padding-block);border-block-end:var(--border-width-hairline) var(--border-style) var(--border-color);background:var(--focus-bg-color);color:var(--focus-color)}}html{container:root-scroller/scroll-state}.site-header{border-block-end:var(--border-width-hairline) var(--border-style) var(--border-color);background:var(--body-bg-color);z-index:1;transition:translate var(--transition-slow);position:sticky;inset-block-start:0;translate:0;@container root-scroller scroll-state(scrolled:block-end){translate:0 -100%}&:focus-within{translate:0}}.site-nav{& li{padding-block:var(--site-header-padding-block);position:relative}& a{--link-decoration-line:none;font-size:var(--site-header-link-font-size);font-weight:var(--site-header-link-font-weight);display:block;&:hover{--link-decoration-line:underline}&:after{content:"";inset:0 calc(-1 / 2 * var(--cluster-gap));position:absolute}}}.project-list-container{isolation:isolate;max-inline-size:var(--wrapper-max-width,80rem);padding-inline:var(--wrapper-padding-inline,1lh);margin-inline:auto;container-type:inline-size}.project-list{--grid-item-min:min(19rem, calc(100% - (1.5 * var(--wrapper-padding-inline))));--grid-gap:var(--wrapper-padding-inline);grid-auto-rows:1fr;&>li,&>li>*{--measure:none;display:grid}}.project-card-container{container-type:inline-size}[data-project-type=personal]{position:relative;&:before{content:attr(data-project-type) " project";translate:calc(1 / 2 * var(--wrapper-padding-inline)) calc(-2 / 3 * var(--wrapper-padding-inline));text-align:center;inline-size:6em;padding:var(--space-2xs);aspect-ratio:1;clip-path:polygon(100% 50%,91.48% 56.57%,97.55% 65.45%,87.42% 69.07%,90.45% 79.39%,79.7% 79.7%,79.39% 90.45%,69.07% 87.42%,65.45% 97.55%,56.57% 91.48%,50% 100%,43.43% 91.48%,34.55% 97.55%,30.93% 87.42%,20.61% 90.45%,20.3% 79.7%,9.55% 79.39%,12.58% 69.07%,2.45% 65.45%,8.52% 56.57%,0% 50%,8.52% 43.43%,2.45% 34.55%,12.58% 30.93%,9.55% 20.61%,20.3% 20.3%,20.61% 9.55%,30.93% 12.58%,34.55% 2.45%,43.43% 8.52%,50% 0%,56.57% 8.52%,65.45% 2.45%,69.07% 12.58%,79.39% 9.55%,79.7% 20.3%,90.45% 20.61%,87.42% 30.93%,97.55% 34.55%,91.48% 43.43%);place-content:center;display:grid;position:absolute;inset-block-start:0;inset-inline-end:0;rotate:12deg;@supports (border-shape:shape(from 100% 50%, close)){clip-path:none;border-shape:shape(from 100% 50%, line to 91.48% 56.57%, line to 97.55% 65.45%, line to 87.42% 69.07%, line to 90.45% 79.39%, line to 79.7% 79.7%, line to 79.39% 90.45%, line to 69.07% 87.42%, line to 65.45% 97.55%, line to 56.57% 91.48%, line to 50% 100%, line to 43.43% 91.48%, line to 34.55% 97.55%, line to 30.93% 87.42%, line to 20.61% 90.45%, line to 20.3% 79.7%, line to 9.55% 79.39%, line to 12.58% 69.07%, line to 2.45% 65.45%, line to 8.52% 56.57%, line to 0% 50%, line to 8.52% 43.43%, line to 2.45% 34.55%, line to 12.58% 30.93%, line to 9.55% 20.61%, line to 20.3% 20.3%, line to 20.61% 9.55%, line to 30.93% 12.58%, line to 34.55% 2.45%, line to 43.43% 8.52%, line to 50% 0%, line to 56.57% 8.52%, line to 65.45% 2.45%, line to 69.07% 12.58%, line to 79.39% 9.55%, line to 79.7% 20.3%, line to 90.45% 20.61%, line to 87.42% 30.93%, line to 97.55% 34.55%, line to 91.48% 43.43%, close);@media (prefers-color-scheme:dark){outline:var(--border-width-thin) var(--border-style) var(--border-color)}}background:var(--text-color);color:var(--body-bg-color);font-family:var(--font-display);font-size:var(--step--1);font-weight:var(--font-weight-semibold);letter-spacing:var(--tracking-wide);text-transform:uppercase;-webkit-font-smoothing:antialiased;z-index:1;pointer-events:none;@media (prefers-color-scheme:dark){-webkit-font-smoothing:auto}}}.project-card{row-gap:var(--space-m);padding:var(--space-m);outline:var(--border-width-hairline) var(--border-style) var(--border-color);outline-offset:calc(-1 * var(--border-width-hairline));grid-template-rows:1fr;display:grid;position:relative;overflow:clip;@supports not (text-box:trim-both cap alphabetic){row-gap:var(--space-xs)}}.project-card-content{row-gap:var(--space-s-m);grid-template-rows:auto auto 1fr;display:grid;&>:not(h3){font-size:.8333em}& a{inline-size:fit-content;&:before{content:"";z-index:1;position:absolute;inset:0}&:hover:before{background:#1212120d;background:oklch(from currentColor l c h / .05)}}}.project-card-thumbnail{aspect-ratio:1.67;z-index:-1;min-block-size:5.4lh;position:relative;& img{object-fit:cover;object-position:top;inline-size:100%;filter:drop-shadow(0rem 1ex 1ex light-dark(oklch(from var(--text-color) l c h / .25),var(--black)));position:absolute;inset:0}}@container (width>30rem){.project-card{column-gap:var(--space-s);grid-template-columns:25ch minmax(0,1fr);&>*{grid-row:1/-1}}.project-card-content a{align-self:end}.project-card-thumbnail{align-self:stretch}}@media screen and (width<54rem){.project-list-container{--flow-space:0px;padding-inline:unset}.project-list-scrollport{grid-template-columns:var(--wrapper-padding-inline) 1fr var(--wrapper-padding-inline);scroll-padding-inline:var(--wrapper-padding-inline);scroll-snap-type:x mandatory;scrollbar-width:none;overscroll-behavior-inline:contain;gap:0;padding-block-start:var(--space-l);padding-block-end:var(--border-width-hairline);display:grid;overflow-x:auto;@media (prefers-reduced-motion:no-preference){scroll-behavior:smooth}&:before{display:none}&>*{grid-column:2/3}&::scroll-button(*){--focus-ring-width:var(--border-width-thick);block-size:2.75rem;inline-size:2.75rem;padding:unset;outline:var(--border-width-hairline) var(--border-style) var(--border-color);outline-offset:calc(-1 * var(--border-width-hairline));font-family:var(--font-body);font-size:var(--step-3);cursor:pointer;transition-property:opacity,scale,border-color;transition-duration:var(--transition-fast);background:0 0;border:none;margin-block-start:var(--grid-gap)}&::scroll-button(*):hover{outline-width:var(--border-width-medium);outline-offset:calc(-1 * var(--border-width-medium));outline-color:currentColor}&::scroll-button(*):focus-visible{outline-width:var(--border-width-medium);outline-offset:calc(-1 * var(--border-width-medium));outline-color:currentColor}&::scroll-button(*):active{scale:.98}&::scroll-button(*):focus-visible{background:var(--focus-bg-color);color:var(--focus-color)}&::scroll-button(*):disabled{opacity:.67;cursor:not-allowed}&::scroll-button(left){content:"‹" / "Scroll Left";margin-inline-start:var(--wrapper-padding-inline);margin-inline-end:var(--grid-gap)}&::scroll-button(right){content:"›" / "Scroll Right"}}.project-list{grid-template-columns:unset;grid-auto-flow:column;grid-auto-columns:var(--grid-item-min);&>li{scroll-snap-align:start;&:last-child{scroll-snap-align:end}}&:after{content:"";block-size:1px}}}@media (width>=80rem){.project-list-container{--flow-space:var(--region-space)}.project-list{grid-auto-rows:max-content}[data-project-type=personal]:before{translate:calc(-1 / 2 * var(--wrapper-padding-inline)) calc(-2 / 3 * var(--wrapper-padding-inline));inset-inline-start:0;inset-inline-end:unset;rotate:-12deg}.project-card{padding:unset;outline:none;grid-template-columns:minmax(0,1fr) 30ch}.project-card-content{order:2;align-self:center}.project-card-thumbnail{aspect-ratio:unset;min-block-size:unset;& img{inset:unset;filter:unset;position:static}}}[href^=mailto]{--flow-space:var(--space-m);font-family:var(--font-display);text-transform:uppercase;display:inline-flex}[href^=mailto]~ul{--flow-space:var(--space-s)}.site-footer{--region-space:var(--site-header-padding-block);border-block-start:var(--border-width-hairline) var(--border-style) var(--border-color);font-size:var(--step-0)}}@layer utilities{.region{padding-block:var(--region-space,1lh)}.visually-hidden:not(:focus):not(:active){clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.step-2{font-size:var(--step-2)}.step-1{font-size:var(--step-1)}.step-0{font-size:var(--step-0)}.step--1{font-size:var(--step--1)}.step--2{font-size:var(--step--2)}.text-balance{text-wrap:balance}.text-box-trim-both{text-box:trim-both cap alphabetic}.text-box-trim-start{text-box:trim-start cap alphabetic}}@layer exceptions{.homepage{@supports (font:-apple-system-body){--measure:none}@media (width>=80rem){--site-header-link-font-size:.8333em;--target-margin-block:var(--region-space);& .site-header{border-color:#0000;position:relative;inset-block-start:unset}& .skip-link-container:focus-within{border-block-color:#0000;position:absolute;inset-inline:0}& .site-nav{--_offset:15rem;translate:calc(-50% - (var(--space-m) + var(--_offset))) var(--_offset);position:absolute;inset-block-start:0;inset-inline-start:50%}& .site-nav ul{--cluster-gap:var(--space-2xs);flex-direction:column}& .site-nav li{text-align:end;inline-size:100%;padding-block:0}& .site-nav a{--link-decoration-line:underline;&:after{inset:calc(-1 / 2 * var(--cluster-gap))}}}& main{--sidebar-row-gap:var(--space-l);--sidebar-column-gap:var(--space-m);--sidebar-gap:var(--sidebar-row-gap) var(--sidebar-column-gap);--sidebar-content-min-width:19rem;--sidebar-wrap-at:60%;&>*+*{border-block-start:var(--border-width-hairline) var(--border-style) var(--border-color)}@media (width>=80rem){--_vertical-separator-size:1.875rem;--_magic-number:3px;isolation:isolate;position:relative;&:before,&:after{--_offset:-8.5em;content:"";translate:calc(-50% + var(--_offset) - var(--_magic-number)) 0;pointer-events:none;position:absolute;inset-inline-start:50%}&:before{block-size:calc(100% - (2 * var(--region-space)));inline-size:var(--_vertical-separator-size);background:var(--text-color);z-index:1;inset-block-start:var(--region-space)}&:after{block-size:calc(2.5 * var(--border-width-thick));inline-size:calc(var(--_vertical-separator-size) + 1px);background:var(--body-bg-color);z-index:2;inset-block-end:calc(var(--region-space) + var(--_vertical-separator-size))}&>*+*{border-color:#0000}& .desc-container>*,& .sidebar:has(>h2)+*{position:relative;&:before{content:"";inline-size:var(--_vertical-separator-size);aspect-ratio:1;background-color:var(--body-bg-color);scale:.8;translate:calc(var(--_magic-number) / 2) -20%;pointer-events:none;z-index:3;border-radius:100vmax;position:absolute;inset-block-start:0;inset-inline-end:calc(100% + var(--sidebar-column-gap))}}& h2[id]{text-align:end;padding-inline-end:calc(var(--sidebar-column-gap) + var(--_vertical-separator-size))}}}& #hero{@media (width>=80rem){&>div{position:relative}}& h1{row-gap:var(--space-s);font-size:var(--step-9-8);letter-spacing:-.00625em;@media (width>=80rem){font-size:var(--step-9);letter-spacing:-.008em}& .first-name{align-items:center;gap:calc(.33 * var(--sidebar-column-gap));text-shadow:-1px 0px var(--body-bg-color);display:inline-flex;position:relative;&:after{content:"";pointer-events:none;background:currentColor;flex-grow:999;block-size:.125em}@media (width>=80rem){&:after{display:none}&>span{translate:calc(-1 * var(--_magic-number)) 0}}}& .last-name{@media (width>=80rem){text-align:end}}}& picture,& img{display:inline-block}& img{border:min(.025em, var(--border-width-medium)) var(--border-style) currentColor;block-size:.7em;inline-size:auto;@media (width>=80rem){z-index:-1;position:absolute;inset-block-start:calc(-1 * var(--wrapper-padding-inline));inset-inline-start:0;translate:-50%;rotate:-10deg;scale:.75}}& .desc-container{--flow-space:var(--space-l);--sidebar-gap:0 var(--sidebar-column-gap);@media (width>=80rem){--flow-space:var(--region-space)}@supports not (text-box:trim-both cap alphabetic){--flow-space:0px}}}}}@layer theme.base{:root{--step--2:round(up, clamp(.5628rem, .6457rem + -.1037vw, .625rem), 2px);--step--1:round(up, clamp(.75rem, .7499rem + .0003vw, .7502rem), 2px);--step-0:round(up, clamp(.9rem, .8667rem + .1667vw, 1rem), 2px);--step-1:round(up, clamp(1.08rem, .9957rem + .4217vw, 1.333rem), 2px);--step-2:round(up, clamp(1.296rem, 1.1357rem + .8015vw, 1.7769rem), 2px);--step-3:round(up, clamp(1.5552rem, 1.2841rem + 1.3557vw, 2.3686rem), 2px);--step-4:round(up, clamp(1.8662rem, 1.4359rem + 2.1518vw, 3.1573rem), 2px);--step-5:round(up, clamp(2.2395rem, 1.5831rem + 3.2821vw, 4.2087rem), 2px);--step-6:round(up, clamp(2.6874rem, 1.7131rem + 4.8714vw, 5.6102rem), 2px);--step-7:round(up, clamp(3.2249rem, 1.807rem + 7.0893vw, 7.4784rem), 2px);--step-8:round(up, clamp(3.8698rem, 1.8369rem + 10.1649vw, 9.9688rem), 2px);--step-9:round(up, clamp(4.6438rem, 1.7623rem + 14.4076vw, 13.2884rem), 2px);--step-9-8:round(up, clamp(4.6438rem, 2.8687rem + 8.875vw, 9.9688rem), 2px);--step-5-4:round(up, clamp(2.2394rem, 1.9333rem + 1.5302vw, 3.1575rem), 2px);--step-4-3:round(up, clamp(1.8663rem, 1.6988rem + .8375vw, 2.3688rem), 2px);--step-3-2:round(up, clamp(1.555rem, 1.481rem + .3698vw, 1.7769rem), 2px);--space-4xs:round(up, clamp(.125rem, .125rem + 0vw, .125rem), 2px);--space-3xs:round(up, clamp(.25rem, .25rem + 0vw, .25rem), 2px);--space-2xs:round(up, clamp(.4375rem, .4167rem + .1042vw, .5rem), 2px);--space-xs:round(up, clamp(.6875rem, .6667rem + .1042vw, .75rem), 2px);--space-s:round(up, clamp(.875rem, .8333rem + .2083vw, 1rem), 2px);--space-m:round(up, clamp(1.375rem, 1.3333rem + .2083vw, 1.5rem), 2px);--space-l:round(up, clamp(1.8125rem, 1.75rem + .3125vw, 2rem), 2px);--space-xl:round(up, clamp(2.6875rem, 2.5833rem + .5208vw, 3rem), 2px);--space-2xl:round(up, clamp(3.625rem, 3.5rem + .625vw, 4rem), 2px);--space-3xl:round(up, clamp(5.375rem, 5.1667rem + 1.0417vw, 6rem), 2px);--space-4xs-3xs:round(up, clamp(.125rem, .0833rem + .2083vw, .25rem), 2px);--space-3xs-2xs:round(up, clamp(.25rem, .1667rem + .4167vw, .5rem), 2px);--space-2xs-xs:round(up, clamp(.4375rem, .3333rem + .5208vw, .75rem), 2px);--space-xs-s:round(up, clamp(.6875rem, .5833rem + .5208vw, 1rem), 2px);--space-s-m:round(up, clamp(.875rem, .6667rem + 1.0417vw, 1.5rem), 2px);--space-m-l:round(up, clamp(1.375rem, 1.1667rem + 1.0417vw, 2rem), 2px);--space-l-xl:round(up, clamp(1.8125rem, 1.4167rem + 1.9792vw, 3rem), 2px);--space-xl-2xl:round(up, clamp(2.6875rem, 2.25rem + 2.1875vw, 4rem), 2px);--space-2xl-3xl:round(up, clamp(3.625rem, 2.8333rem + 3.9583vw, 6rem), 2px);--space-s-l:round(up, clamp(.875rem, .5rem + 1.875vw, 2rem), 2px);--white:#fff;--black:#0b0c0c;--black-tint-5:color-mix(in oklab, var(--black), var(--white) 5%);--black-tint-25:color-mix(in oklab, var(--black), var(--white) 25%);--black-tint-50:color-mix(in oklab, var(--black), var(--white) 50%);--black-tint-80:color-mix(in oklab, var(--black), var(--white) 80%);--black-tint-95:color-mix(in oklab, var(--black), var(--white) 95%);--red:#ca3535;--green:#0f7a52;--fluorescent-green:#00ff19;--orange:oklch(80% .19 67.28);--orange-tint-25:color-mix(in oklab, var(--orange), var(--white) 25%);--orange-tint-50:color-mix(in oklab, var(--orange), var(--white) 50%);--orange-tint-80:color-mix(in oklab, var(--orange), var(--white) 80%);--orange-tint-95:color-mix(in oklab, var(--orange), var(--white) 95%);--orange-shade-25:color-mix(in oklab, var(--orange), var(--black) 25%);--orange-shade-50:color-mix(in oklab, var(--orange), var(--black) 50%);--yellow:#fd0;--yellow-shade-50:color-mix(in oklab, var(--yellow), var(--black) 50%);--blue:#1d70b8;--blue-tint-25:color-mix(in oklab, var(--blue), var(--white) 25%);--blue-tint-50:color-mix(in oklab, var(--blue), var(--white) 50%);--blue-tint-80:color-mix(in oklab, var(--blue), var(--white) 80%);--blue-tint-95:color-mix(in oklab, var(--blue), var(--white) 95%);--blue-shade-25:color-mix(in oklab, var(--blue), var(--black) 25%);--blue-shade-50:color-mix(in oklab, var(--blue), var(--black) 50%);--font-display:"Jakob Semi-Condensed", "Adjusted Impact Fallback", system-ui, sans-serif;--font-sans:"Source Sans 3", "Adjusted Arial Fallback", ui-sans-serif, system-ui, sans-serif;--font-mono:ui-monospace, monospace;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--leading-none:1;--leading-tight:1.125;--leading-snug:1.26563;--leading-normal:1.42383;--leading-relaxed:1.60181;--tracking-tight:-.0125em;--tracking-normal:0em;--tracking-wide:.0125em;--font-smoothing:auto;@media (prefers-color-scheme:dark){--font-weight-normal:350;--font-weight-medium:450;--font-weight-semibold:550;--font-weight-bold:650;--font-smoothing:antialiased}--border-width-hairline:1px;--border-width-thin:1.5px;--border-width-medium:3px;--border-width-thick:5px;--border-style:solid;--radius-none:0px;--radius-s:.125rem;--radius-m:.25rem;--radius-l:.5rem;--radius-full:100vmax;--transition-fast:75ms;--transition-normal:.15s;--transition-slow:.3s;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1)}}@layer theme.semantic{:root{--measure:60ch;--wrapper-max-width:64rem;--wrapper-padding-inline:var(--space-m-l);--region-space:var(--space-l-xl);--cluster-gap:var(--space-s);--grid-gap:var(--space-s);--repel-gap:var(--space-s);--sidebar-gap:var(--space-s);--stack-gap:var(--space-s);--switcher-gap:var(--space-s);--font-body:var(--font-sans);--font-heading:var(--font-sans);--focus-ring-width:var(--border-width-thick);--body-bg-color:light-dark(var(--white),var(--black-tint-5));--text-color:light-dark(var(--black-tint-5),var(--black-tint-95));--secondary-text-color:light-dark(var(--black-tint-25),var(--black-tint-80));--brand-color:var(--blue);--link-color:var(--text-color);--link-bg-color:var(--body-bg-color);--link-visited-color:var(--text-color);--link-hover-color:var(--text-color);--link-active-color:var(--text-color);--border-color:light-dark(var(--black-tint-80),var(--black-tint-25));--input-border-color:var(--text-color);--focus-bg-color:var(--fluorescent-green);--focus-color:var(--black);--error-color:var(--red);--success-color:var(--green);--hover-bg-color:light-dark(var(--black-tint-80),var(--black-tint-25))}}@layer theme.components{:root{--site-header-padding-block:var(--space-s);--site-header-link-font-size:1em;--site-header-link-font-weight:var(--font-weight-medium);--site-header-height:calc(1rlh + (2 * var(--site-header-padding-block)));--target-margin-block:calc(var(--site-header-height) + var(--region-space))}a,summary{--link-decoration-line:underline;--link-decoration-style:solid;--link-decoration-style-hover:solid;--link-decoration-color:currentColor;--link-decoration-color-hover:var(--fluorescent-green);--link-decoration-thickness:max(var(--border-width-thin), (1 * .0625 * 1em));--link-decoration-thickness-hover:max(var(--border-width-medium), 2 * (.0625 * 1em));--link-underline-offset:.16em}.btn,button,[type=button],[type=submit],[type=reset]{--btn-padding-block:.5em;--btn-padding-inline:.625em;--btn-border-width:var(--border-width-thin);--btn-border-style:var(--border-style);--btn-radius:var(--radius-none)}::file-selector-button{--btn-padding-block:.5em;--btn-padding-inline:.625em;--btn-border-width:var(--border-width-thin);--btn-border-style:var(--border-style);--btn-radius:var(--radius-none)}hr{--hr-border-width:var(--border-width-thick);--hr-border-style:var(--border-style)}form{--fc-padding-block:var(--space-3xs);--fc-padding-inline:var(--space-2xs);--fc-border-width:var(--border-width-medium);--fc-border-style:var(--border-style);--fc-radius:var(--radius-none);--fc-label-line-height:var(--leading-snug)}code,kbd,samp{--code-padding-inline:var(--space-4xs);--code-border-width:var(--border-width-thin);--code-border-style:var(--border-style);--code-border-color:color-mix(in oklch, var(--text-color,currentColor) 5%, #0000);--code-radius:var(--radius-none);--code-color-bg:color-mix(in oklch, currentColor 5%, transparent);--code-line-height:var(--leading-tight);@media (prefers-color-scheme:dark){--code-color-bg:color-mix(in oklch, currentColor 15%, transparent)}}pre{--pre-padding:var(--space-s);--pre-border-width:var(--border-width-thin);--pre-border-style:var(--border-style);--pre-radius:var(--radius-none);--pre-line-height:var(--leading-snug)}details{--summary-padding-inline-start:var(--space-s);--details-content-padding-block:var(--space-2xs)}dialog{--dialog-max-width:45ch;--dialog-padding:var(--space-s);--dialog-border-width:var(--border-width-thin);--dialog-border-style:var(--border-style);--dialog-radius:var(--radius-none);--dialog-transition-duration:calc(2 * var(--transition-slow))}table{--table-cell-padding-block:var(--space-2xs);--table-cell-padding-inline:var(--space-s);--table-border-width:var(--border-width-thin);--table-border-style:var(--border-style)}}.link-with-icon{align-items:center;gap:.25ch;display:inline-flex;& svg path{fill:currentColor}}