@layer reset{*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:var(--site-header-height)}body,h1,h2,h3,p,ol,ul{margin:0}body{min-height:100vh;overflow-x:hidden}ol,ul{padding:0;list-style:none}a{color:inherit}:where([hidden]){display:none!important}}@layer base{body{background:var(--color-paper);color:var(--color-ink);font-family:var(--font-serif);font-synthesis:none;font-size:var(--text-body);letter-spacing:var(--tracking-body);font-weight:400;line-height:var(--leading-body)}h1,h2,h3{font-weight:400}h1{font-size:var(--text-display);letter-spacing:var(--tracking-display);line-height:var(--leading-display);text-wrap:balance;max-width:11ch}h2{font-size:var(--text-headline);letter-spacing:var(--tracking-headline);line-height:var(--leading-headline)}h3{font-size:var(--text-title);letter-spacing:var(--tracking-title);line-height:var(--leading-title);text-wrap:balance}p{max-width:var(--reading-max)}::selection{background:var(--color-ink);color:var(--color-emulsion)}}@layer components{.skip-link{background:var(--color-ink);color:var(--color-paper);font:400 var(--text-label) / 1 var(--font-mono);left:var(--space-md);padding:var(--space-sm) var(--space-md);top:var(--space-md);transition:transform var(--motion-quick) var(--ease-standard);z-index:100;text-decoration:none;position:fixed;transform:translateY(-200%)}.skip-link:focus{transform:translateY(0)}.site-header{background:var(--color-paper);border-bottom:var(--rule-hairline);z-index:20;position:fixed;top:0;left:0;right:0}.site-header__inner{max-width:var(--page-width);min-height:calc(var(--site-header-height) - 1px);padding-inline:var(--gutter);grid-template-columns:minmax(min-content,1fr) auto;align-items:center;gap:clamp(6px,2vw,13px);margin-inline:auto;display:grid}.site-name,.subject-nav a{font:400 var(--text-nav) / 1.1 var(--font-mono);align-items:center;min-width:44px;min-height:44px;text-decoration:none;display:flex}.site-name{overflow-wrap:anywhere;justify-self:start}@media screen{.site-header.is-undocked{background:0 0;border-bottom-color:#0000}.site-header.is-undocked .site-name{opacity:0}}.subject-nav{background:var(--color-paper);border:var(--rule-hairline);border-radius:var(--radius-pill);justify-self:end;min-width:0;padding:.1875rem}.subject-nav ul{display:flex;position:relative}.subject-nav li{min-width:0}.subject-nav a{border-radius:var(--radius-pill);overflow-wrap:anywhere;text-align:center;transition:color var(--motion-pill) var(--ease-standard);z-index:1;justify-content:center;padding-inline:clamp(.25rem,1.2vw,1.1rem);position:relative}.site-name:hover,.subject-nav a:hover{text-underline-offset:.3em;text-decoration:underline}.subject-nav a:focus-visible{outline:2px solid var(--color-ink);outline-offset:1px}.subject-nav.is-enhanced ul:before{background:var(--color-ink);border-radius:var(--radius-pill);content:"";transform:translateX(var(--pill-x,0));transition:transform var(--motion-pill) var(--ease-standard), width var(--motion-pill) var(--ease-standard);width:var(--pill-width,0);position:absolute;top:0;bottom:0;left:0}.subject-nav.is-enhanced a[aria-current=location]{color:var(--color-paper)}.site-footer{font:400 var(--text-evidence) / var(--leading-evidence) var(--font-mono)}.visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.projects-section:focus{outline:none}#main-content{padding-top:var(--site-header-height);grid-template-columns:minmax(0,1fr);display:grid}.portfolio-section{max-width:var(--page-width);min-width:0;padding:clamp(4rem, 9vw, 8rem) var(--gutter);width:100%;margin-inline:auto}.portfolio-section:not(.landing){contain-intrinsic-block-size:100svh;animation:1ms portfolio-first-render}.portfolio-section:not(.landing):is(:target,:has(:target)){animation-duration:0s}@keyframes portfolio-first-render{0%,to{content-visibility:hidden}}.site-footer{background:var(--color-ink);color:var(--color-paper);letter-spacing:var(--tracking-evidence);min-height:5rem;padding:var(--space-md) var(--gutter);text-transform:uppercase;justify-content:space-between;align-items:center;display:flex}.site-footer a{align-items:center;min-height:2.75rem;display:inline-flex}:focus-visible{outline-offset:4px;outline:2px solid}}@layer responsive{@media (width<=680px){.portfolio-section{padding-block:clamp(3.5rem,16vw,6rem)}.site-footer{flex-direction:column;align-items:flex-start}}}@layer accessibility{@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.subject-nav.is-enhanced ul:before,.subject-nav a,.skip-link{transition-duration:.001ms!important}}@media (forced-colors:active){.site-footer{forced-color-adjust:auto;border:1px solid canvastext}.subject-nav a[aria-current=location]{outline-offset:-3px;outline:3px solid highlight}}}@font-face{font-family:Newsreader;font-display:swap;font-style:normal;font-weight:400;src:url(/fonts/Newsreader16pt-Regular.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-display:swap;font-style:normal;font-weight:400;src:url(/fonts/JetBrainsMono-Regular.woff2)format("woff2")}:root{color-scheme:light dark;--color-ink:#0a0a0a;--color-paper:#fff;--color-silver:#f0f0ed;--color-emulsion:#f7f4ed;--color-muted:#5f5953;--color-safelight:#f0522b;--font-serif:"Newsreader", "Iowan Old Style", Baskerville, Georgia, serif;--font-mono:"JetBrains Mono", "Courier New", Courier, monospace;--text-display:clamp(3.2rem, min(12vw, 15vh), 9.6rem);--text-headline:clamp(3.5rem, 6.5vw, 7rem);--text-title:clamp(1.8rem, 3.4vw, 3.5rem);--text-case-study-title:clamp(2.4rem, 6vw, 4.4rem);--text-body:clamp(1rem, 1.4vw, 1.25rem);--text-label:.78rem;--text-nav:clamp(.62rem, .5rem + .6vw, .78rem);--text-micro:.62rem;--text-evidence:.72rem;--text-proof-record:clamp(1rem, 1.5vw, 1.25rem);--text-hobby-title:clamp(1.45rem, 2.4vw, 2.7rem);--leading-display:.92;--leading-headline:.8;--leading-title:.9;--leading-case-study-title:1;--leading-body:1.45;--leading-label:1;--leading-micro:1.35;--leading-evidence:1.3;--tracking-display:-.045em;--tracking-invitation:-.065em;--tracking-headline:-.07em;--tracking-title:-.045em;--tracking-case-study-title:-.04em;--tracking-body:normal;--tracking-label:normal;--tracking-micro:.08em;--tracking-evidence:.06em;--space-xs:.45rem;--space-sm:.8rem;--space-md:1.2rem;--space-lg:2rem;--space-xl:4rem;--radius-none:0;--radius-pill:999px;--rule-hairline:1px solid var(--color-ink);--motion-quick:.18s;--ease-standard:cubic-bezier(.2, .7, .2, 1);--ease-out:cubic-bezier(.16, 1, .3, 1);--motion-pill:.45s;--page-width:1120px;--gutter:clamp(16px, 4vw, 48px);--reading-max:72ch;--site-header-height:3.6rem}@media (prefers-color-scheme:dark){:root{--color-ink:#deded8;--color-paper:#111;--color-silver:#1b1a18;--color-emulsion:#1f1c18;--color-muted:#a39d95;--color-safelight:#ff6a45}}.portfolio-section:not(.landing),.case-study-page{overflow-x:clip}[data-portfolio-reveal-state]:not([data-portfolio-reveal=cascade],[data-portfolio-split-heading]){transition:opacity var(--reveal-duration) var(--ease-out), translate var(--reveal-duration) var(--ease-out)}[data-portfolio-reveal=left][data-portfolio-reveal-state=out]{opacity:0;translate:calc(-1 * var(--reveal-sideways)) 0}[data-portfolio-reveal=right][data-portfolio-reveal-state=out]{opacity:0;translate:var(--reveal-sideways) 0}[data-portfolio-reveal=up][data-portfolio-reveal-state=out]{opacity:0;translate:0 var(--reveal-up)}[data-portfolio-reveal=cascade][data-portfolio-reveal-state] [data-portfolio-reveal-item]{transition:opacity var(--reveal-duration) var(--ease-out), translate var(--reveal-duration) var(--ease-out)}[data-portfolio-reveal=cascade][data-portfolio-reveal-state=in] [data-portfolio-reveal-item]{transition-delay:calc(var(--reveal-index,0) * var(--reveal-stagger))}[data-portfolio-reveal=cascade][data-portfolio-reveal-state=out] [data-portfolio-reveal-item]{opacity:0;translate:0 var(--reveal-up)}.split-word{vertical-align:top;max-width:100%;margin:-.3em -.06em;padding:.3em .06em;display:inline-block;overflow:clip}.split-word__inner{max-width:100%;display:inline-block}.split-letters__reader:before{content:attr(data-portfolio-text)}.split-letters__word{white-space:nowrap;display:inline-block}.split-letters__letter{display:inline-block}[data-portfolio-split-heading][data-portfolio-reveal-state] .split-word__inner{transition:translate var(--reveal-duration) var(--ease-out)}[data-portfolio-split-heading][data-portfolio-reveal-state=in] .split-word__inner{transition-delay:calc(var(--word-index,0) * var(--reveal-word-stagger))}[data-portfolio-split-heading][data-portfolio-reveal-state=out] .split-word__inner{translate:0 calc(100% + .35em)}[data-portfolio-reveal-state=out]:focus-within,[data-portfolio-reveal-state=out] [data-portfolio-reveal-item]:focus-within{opacity:1;translate:none}@media (prefers-reduced-motion:reduce),print{[data-portfolio-reveal-state],[data-portfolio-reveal-state] [data-portfolio-reveal-item],[data-portfolio-reveal-state] .split-word__inner{opacity:1!important;transition:none!important;translate:none!important}}body:after{content:"";opacity:.04;pointer-events:none;z-index:40;background-image:url(/ambient/grain.png);background-size:96px 96px;position:fixed;inset:0}@media (prefers-color-scheme:dark){body:after{opacity:.05}}.ambient-cursor{border:1px solid var(--color-ink);box-sizing:border-box;pointer-events:none;transition:border-color .2s var(--ease-standard), border-radius .2s var(--ease-standard);z-index:60;border-radius:50%;position:fixed;top:0;left:0}.ambient-cursor[hidden],.ambient-leak[hidden]{display:none}.ambient-cursor[data-portfolio-ambient-mode=brackets]{border-color:#0000;border-radius:0}.ambient-cursor__corner{border:0 solid var(--color-ink);opacity:0;height:9px;transition:opacity .2s var(--ease-standard);width:9px;position:absolute}.ambient-cursor[data-portfolio-ambient-mode=brackets] .ambient-cursor__corner{opacity:1}.ambient-cursor__corner{top:-1px;left:-1px}.ambient-cursor__corner:first-child{border-top-width:1px;border-left-width:1px}.ambient-cursor__corner:nth-child(2){translate:calc(var(--ambient-w,28px) - 9px) 0;border-top-width:1px;border-right-width:1px}.ambient-cursor__corner:nth-child(3){translate:0 calc(var(--ambient-h,28px) - 9px);border-bottom-width:1px;border-left-width:1px}.ambient-cursor__corner:nth-child(4){translate:calc(var(--ambient-w,28px) - 9px) calc(var(--ambient-h,28px) - 9px);border-bottom-width:1px;border-right-width:1px}.ambient-cursor__label{background:var(--color-paper);color:var(--color-ink);font:400 var(--text-micro) / 1 var(--font-mono);letter-spacing:var(--tracking-micro);text-transform:uppercase;translate:calc(var(--ambient-w,28px) + 6px) calc(var(--ambient-h,28px) + 6px);white-space:nowrap;padding:2px 4px;position:absolute;top:-1px;left:-1px}.ambient-cursor__label:empty{display:none}@media (prefers-reduced-motion:no-preference){[data-portfolio-magnetic]{transition:translate .35s var(--ease-out)}}.ambient-counter{bottom:var(--space-md);color:var(--color-muted);font:400 var(--text-evidence) / 1 var(--font-mono);font-variant-numeric:tabular-nums;left:var(--space-md);letter-spacing:var(--tracking-evidence);pointer-events:none;z-index:30;display:none;position:fixed}@media (width>=1200px){.ambient-counter{display:block}}.ambient-leak{background:radial-gradient(closest-side, var(--color-safelight), transparent);opacity:0;pointer-events:none;height:64vmax;transition:opacity .6s var(--ease-standard);z-index:39;border-radius:50%;width:64vmax;margin:-32vmax 0 0 -32vmax;position:fixed;top:0;left:0}.ambient-leak[data-portfolio-ambient-on]{opacity:.09}@media (prefers-color-scheme:light){.ambient-leak{display:none}}@media (prefers-reduced-motion:reduce){.ambient-cursor,.ambient-leak{display:none!important}[data-portfolio-magnetic]{translate:none!important}}@media print{body:after,.ambient-cursor,.ambient-counter,.ambient-leak{display:none!important}[data-portfolio-magnetic]{translate:none!important}}@media (scripting:enabled) and (prefers-reduced-motion:no-preference){@view-transition{navigation:auto}::view-transition-group(root){animation-duration:.56s}::view-transition-old(root){animation:none}::view-transition-new(root){animation:.56s cubic-bezier(.16,1,.3,1) both route-wipe}@keyframes route-wipe{0%{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0)}}}
