*,*::before,*::after{scrollbar-width:none;-ms-overflow-style:none;box-sizing:border-box}*::-webkit-scrollbar{display:none}*{margin:0;font-feature-settings:var(--font--feature-settings)}@media(prefers-reduced-motion:no-preference){html{interpolate-size:allow-keywords}}body{line-height:1.5;-webkit-font-smoothing:antialiased;position:relative}img,picture,video,canvas,svg,.video-wrapper{display:block;max-width:100%}input,button,textarea,select{font:inherit;border:none}small,p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:optimizeSpeed}html{--fs-ratio:1.2;--fs-1:calc(var(--fs-2) / var(--fs-ratio));--fs-2:1rem;--fs-3:calc(var(--fs-2) * var(--fs-ratio));--fs-4:calc(var(--fs-3) * var(--fs-ratio));--fs-5:calc(var(--fs-4) * var(--fs-ratio));--fs-6:calc(var(--fs-5) * var(--fs-ratio));--fs-7:calc(var(--fs-6) * var(--fs-ratio));--fs-8:calc(var(--fs-7) * var(--fs-ratio));--c-bg:238 238 238;--c-fg:28 28 28;--c-hl:255 221 0;--c-bg-100:rgb(var(--c-bg));--c-bg-80:rgba(var(--c-bg) / .8);--c-bg-60:rgba(var(--c-bg) / .6);--c-bg-40:rgba(var(--c-bg) / .4);--c-bg-20:rgba(var(--c-bg) / .2);--c-bg-0:rgba(var(--c-bg) / 0);--c-fg-100:rgb(var(--c-fg));--c-fg-80:rgba(var(--c-fg) / .8);--c-fg-60:rgba(var(--c-fg) / .6);--c-fg-40:rgba(var(--c-fg) / .4);--c-fg-20:rgba(var(--c-fg) / .2);--c-hl-100:rgb(var(--c-hl));--timing:330ms;--bezier:cubic-bezier(0.9, 0, 0.1, 1);--transition:var(--timing) var(--bezier);--g-ct:min(1920px, 100% - var(--gap-m) * 2);--g-body:minmax(var(--gap-m), 1fr) [content-start] var(--g-ct) [content-end] minmax(var(--gap-m), 1fr);--gap-s:min(0.5rem, 10px);--gap-m:min(1rem, 20px);--gap-l:min(2rem, 32px);--gap-top:10rem;--gs-1:1fr;--gs-2:repeat(2, 1fr);--gs-3:repeat(3, 1fr);--gs-4:repeat(5, 1fr)}html:has(.theme-0){--c-bg:28 28 28;--c-fg:238 238 238}html:has(.theme-1){--c-fg:238 238 238;--c-bg:228 47 37}html:has(.theme-2){--c-fg:238 238 238;--c-bg:37 0 201}html:has(.theme-3){--c-bg:238 238 238;--c-fg:28 28 28}html:has(.theme-4){--c-bg:238 238 238;--c-fg:228 47 37}html:has(.theme-5){--c-bg:238 238 238;--c-fg:37 0 201}html:has(.theme-6){--c-bg:28 28 28;--c-fg:238 238 238}@import 'https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:ital,wght@0,100..700;1,100..700&display=swap';html{font-family:ibm plex sans,system-ui,sans-serif;font-size:max(97.5%,16px);font-weight:400;line-height:1.425;background-color:var(--c-bg-100);color:var(--c-fg-100);-webkit-font-smoothing:antialiased;font-optical-sizing:auto;font-variation-settings:"wdth" 57.5}h1,.fs-8{font-size:var(--fs-8)}h2,.fs-7{font-size:var(--fs-7)}h3,.fs-6{font-size:var(--fs-6)}h4,.fs-5{font-size:var(--fs-5)}h5,.fs-4{font-size:var(--fs-4)}h6,.fs-3{font-size:var(--fs-3)}p,.fs-2{font-size:var(--fs-2)}small,.fs-1{font-size:var(--fs-1);font-variation-settings:"wdth" 100;color:var(--c-fg-60)}h1,h2,h3,h4,h5,h6,.fs-8,.fs-7,.fs-6,.fs-5,.fs-4{font-weight:450;text-wrap:balance;line-height:1.125;font-variation-settings:"wdth" 87.5;letter-spacing:-.0333em}p,.fs-3{line-height:1.25;letter-spacing:.0222em;margin-block:0;text-wrap:pretty}a{color:inherit;text-decoration:none}p>a{--timing:125ms;text-decoration:underline;background-image:linear-gradient(var(--c-hl-100),var(--c-hl-100));background-position:0 100%;background-repeat:no-repeat;background-size:100% 2px;padding:0 1px;transition:background-size var(--timing)var(--bezier);line-height:inherit;letter-spacing:inherit}p>a:hover{background-size:100% 100%}a:focus-visible{outline:2px solid currentColor;outline-offset:2px;border-radius:2px}a:active{opacity:.75}a:target{scroll-margin-top:2rem;outline:2px solid currentColor}button{background-color:var(--c-fg-100);color:var(--c-bg-100);padding:.6rem 1.2rem}body{display:grid;grid-template-columns:var(--g-body);padding-top:var(--gap-top)}main{grid-column:content;display:grid;gap:var(--gap-m);gap:33lvh;grid-template-columns:var(--gs-4)}.ui-frame{position:fixed;inset:0;display:grid;grid-template-columns:var(--g-body);pointer-events:none;z-index:97}.ui-chrome{grid-column:content;position:relative}.nav-logo,nav,.cntrls,.menu-tgl{pointer-events:auto}.nav-logo{position:absolute;top:1rem;left:0;padding:.75rem;backdrop-filter:blur(4px);transform:translateX(round(-.75rem,1px));z-index:98}.nav-logo a{text-decoration:none;color:var(--c-fg-100)}nav{position:absolute;top:10rem;left:0}nav ul{list-style:none;padding:0}nav li{color:var(--c-fg-60);font-weight:400}nav li a{color:inherit;text-decoration:none}nav li a.active{color:var(--c-fg-100)}.cntrls{position:absolute;bottom:1rem;left:0;display:flex;flex-direction:column;align-items:flex-start;gap:1rem;z-index:98}.cntrl-btn{position:relative;display:flex;justify-content:center;width:3rem;min-height:3rem;padding:.75rem;-webkit-tap-highlight-color:transparent;touch-action:manipulation;background-color:var(--c-bg-40);backdrop-filter:blur(4px);transform:translateX(round(-.5rem,1px));border:none;cursor:pointer}.menu-tgl{display:none;position:absolute;top:1rem;right:0;gap:.5rem;flex-direction:column;transition:gap var(--transition);z-index:98}.menu-tgl>span{display:block;height:round(.15rem,1px);background-color:var(--c-fg-100);width:100%;transition:transform var(--transition)}.menu-tgl.active{gap:0}.menu-tgl.active>span{transform:rotate(45deg)translateX(.1rem)}.menu-tgl.active>span:last-child{transform:rotate(-45deg)translateX(.1rem)}.grid-tgl{height:3rem;justify-content:space-between}.grid-tgl>span{height:100%;width:round(.15rem,1px);background-color:var(--c-fg-100);transition:height var(--transition)}body:has(.grid-tgl.active) .grid-tgl span{height:0}body:has(.grid-tgl.active) .grid-tgl span:nth-child(odd){height:100%;animation:gridBounce var(--timing)2 alternate;animation-delay:calc(var(--bd) * .06s)}@keyframes gridBounce{0%{height:100%}75%{height:0%}100%{height:0%}}.grid-tgl:hover,.menu-tgl:hover{background-color:var(--c-bg-60)}.grid-tgl:active,.menu-tgl:active{background-color:var(--c-bg-100)}.theme-tgl{flex-direction:column;align-items:center;overflow:hidden;height:3rem;transition:height var(--transition)}.theme-tgl.expanded{height:18rem;touch-action:pan-y;background-color:var(--c-bg-60)}.dots-wrapper{position:relative;display:flex;flex-direction:column;justify-content:space-between;align-items:center;width:100%;height:100%;padding:.75rem 0}.dot{width:.25rem;height:.25rem;background-color:var(--c-fg-40)}.dot:nth-child(3n+1){background-color:var(--c-fg-100)}.integer{position:absolute;width:1.33rem;height:1.33rem;border:round(.15rem,1px)solid var(--c-fg-100);top:calc(var(--index,0) * (100% - 1.5rem)/6 + .75rem);transform:translateY(-50%);transition:top 220ms ease-out;pointer-events:none}.theme-tgl.expanded .integer{top:calc(.75rem + var(--index,0) * (100% - 1.5rem)/6)}input[type=range]{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;writing-mode:vertical-lr;direction:rtl;appearance:none;-webkit-appearance:none;pointer-events:none}.theme-tgl.expanded input[type=range]{pointer-events:all}body:has(.theme-tgl.expanded){overflow:hidden}.grid-overlay{position:absolute;inset:0;display:grid;grid-template-columns:var(--gs-4);gap:var(--gap-m);pointer-events:none;z-index:99}.grid-overlay>div{display:flex;justify-content:space-between}.grid-overlay span{width:1px;background-color:var(--c-fg-20);height:0;transition:height var(--transition);transition-delay:calc(var(--bd) * .06s)}body:has(.grid-tgl.active) .grid-overlay span{height:100%}main>*{grid-column:2/-1}.s-body{display:flex;flex-direction:column;gap:var(--gap-l)}.option-slide{position:relative}.option-slide::before,.option-slide::after{content:"";position:absolute;top:0;height:100%;aspect-ratio:4/1;pointer-events:none;opacity:0;transition:opacity 150ms ease-in-out;z-index:1}.option-slide.mask-left::before{opacity:1}.option-slide.mask-right::after{opacity:1}.option-slide::before{left:0;background:linear-gradient(to right,var(--c-bg-100),var(--c-bg-0))}.option-slide::after{right:0;background:linear-gradient(to left,var(--c-bg-100),var(--c-bg-0))}.option-slider{display:flex;gap:var(--gap-m);overflow-x:auto;scrollbar-width:none}.option-slider::-webkit-scrollbar{display:none}.option-slider>p{flex-shrink:0;color:var(--c-fg-40);font-weight:400;cursor:pointer;margin:0}.option-slider>p.selected{color:var(--c-fg-100)}.option-display>*{display:none}.option-display>*.selected{display:block}.option-display h1{font-size:var(--fs-8);line-height:1.1}.option-display p{font-size:var(--fs-5);line-height:1.4;color:var(--c-fg-80)}.work-listing-items{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--gap-l)var(--gap-m)}.work-item{display:flex;flex-direction:column;gap:var(--gap-s);text-decoration:none;color:var(--c-fg-100)}.work-item img{display:block;width:100%;aspect-ratio:3/2;object-fit:cover;transition:opacity var(--transition)}.work-item:hover img{opacity:.8}.work-item .post-title{font-size:var(--fs-1);font-weight:450;letter-spacing:-.033em;line-height:1.15}.work-item .post-meta{font-size:var(--fs-1);color:var(--c-fg-40)}.writing-listing-items{display:flex;flex-direction:column}.blog-item{display:grid;grid-template-columns:6rem 1fr;align-items:baseline;gap:var(--gap-m);padding-block:var(--gap-m);border-top:1px solid var(--c-fg-20);text-decoration:none;color:var(--c-fg-100)}.blog-item:last-child{border-bottom:1px solid var(--c-fg-20)}.blog-item .post-meta{font-size:var(--fs-1);color:var(--c-fg-40)}.blog-item .post-title{font-size:var(--fs-3);font-weight:450;letter-spacing:-.02em}.blog-item:hover .post-title{color:var(--c-fg-60)}.experience-item{display:grid;grid-template-columns:1fr 4fr;column-gap:var(--gap-m);row-gap:var(--gap-s);padding-block:var(--gap-m)}.experience-item:first-child{padding-top:0}.experience-company{grid-column:1/2;color:var(--c-fg-60);font-weight:400}.experience-role{font-size:var(--fs-8);grid-column:2/3;font-weight:400}.experience-meta{grid-column:2/3;display:flex;gap:var(--gap-m);color:var(--c-fg-60)}.experience-desc{grid-column:2/3;color:var(--c-fg-60)}.reference-item{display:flex;flex-direction:column;gap:var(--gap-s);padding-block:var(--gap-m);border-top:1px solid var(--c-fg-20)}.reference-item:first-child{border-top:none;padding-top:0}.reference-item blockquote{font-size:var(--fs-7);line-height:1.4;margin:0;color:var(--c-fg-100)}.reference-item cite{display:flex;gap:var(--gap-m);font-style:normal;color:var(--c-fg-60)}.reference-name{color:var(--c-fg-100)}.contact-links{display:flex;flex-direction:column;gap:var(--gap-s)}.contact-links a{color:var(--c-fg-100);text-decoration:none}.contact-links a:hover{color:var(--c-fg-60)}@media(max-width:1024px){.work-listing-items{grid-template-columns:1fr}}@media(max-width:768px){.s-label{grid-column:1/-1;margin-bottom:var(--gap-m)}.s-body{grid-column:1/-1}.experience-item{grid-template-columns:1fr}.experience-company,.experience-role,.experience-meta,.experience-desc{grid-column:1/-1}}.post{display:flex;flex-direction:column;gap:var(--gap-l)}.post-header{display:flex;flex-direction:column;gap:var(--gap-m);padding-bottom:var(--gap-l);border-bottom:1px solid var(--c-fg-20)}.post-header h1{font-size:var(--fs-8);line-height:1}.post-meta-row{display:flex;gap:var(--gap-m);align-items:baseline;font-size:var(--fs-1);color:var(--c-fg-40);text-transform:uppercase;letter-spacing:.08em}.post-preamble{font-size:var(--fs-4);line-height:1.35;max-width:52ch;color:var(--c-fg-80);margin:0}.post-banner{display:block;width:100%;aspect-ratio:16/9;object-fit:cover}.post-content{display:flex;flex-direction:column;gap:var(--gap-m);max-width:65ch}.post-content p{color:var(--c-fg-80)}.post-content h2{margin-top:var(--gap-l)}.post-content h3{margin-top:var(--gap-m)}.case{display:flex;flex-direction:column;gap:var(--gap-l)}.module-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--gap-m)}.module-grid>.module{grid-column:span var(--span,1)}.module--image img{display:block;width:100%;aspect-ratio:var(--ratio,16/9);object-fit:cover}.module--text p{font-size:var(--fs-4);line-height:1.35;color:var(--c-fg-80);max-width:52ch;margin:0}.module--video{position:relative;overflow:hidden;padding-top:calc(100%/(var(--ratio,1.7778)))}.module--video iframe,.module--video video{position:absolute;inset:0;width:100%;height:100%;border:none;object-fit:cover}.next-project{padding-top:var(--gap-l);}.next-project a{display:flex;flex-direction:column;gap:var(--gap-s);text-decoration:none;color:var(--c-fg-100)}.next-project .next-label{font-size:var(--fs-1);color:var(--c-fg-40);text-transform:uppercase;letter-spacing:.08em}.next-project img{display:block;width:100%;aspect-ratio:3/2;object-fit:cover;transition:opacity var(--transition)}.next-project a:hover img{opacity:.8}.next-project .post-title{font-size:var(--fs-5);font-weight:450;letter-spacing:-.033em}.next-project .post-meta{font-size:var(--fs-1);color:var(--c-fg-40);text-transform:uppercase;letter-spacing:.08em}@media(max-width:768px){.module-grid{grid-template-columns:1fr}.module-grid>.module{grid-column:1/-1}}body.is-home .nav-page{display:none}body:not(.is-home) .nav-home{display:none}#swup{opacity:1;filter:blur(0);transition:opacity .66s var(--bezier),filter .66s var(--bezier)}html.is-animating #swup{opacity:0;filter:blur(12px)}@media(max-width:1280px){:root{--gs-1:1fr;--gs-2:repeat(2, 1fr);--gs-3:repeat(3, 1fr);--gs-4:repeat(6, 1fr);--fs-ratio:1.25}.grid-overlay div:nth-child(n+7){display:none}}@media(max-width:1024px){:root{--gs-1:1fr;--gs-2:1fr;--gs-3:1fr 1fr;--gs-4:repeat(3, 1fr);--fs-ratio:1.2}html{font-size:max(95%,15px)}.grid-overlay div:nth-child(n+4){display:none}}@media(max-width:768px){:root{--gap-top:5rem}header{position:absolute}.menu-tgl{display:flex}body:has(.menu-tgl.active){overflow:hidden}nav{z-index:97}nav ul{position:fixed;inset:0;background:var(--c-bg-100);display:flex;flex-direction:column;padding:7rem 1rem;z-index:-1;gap:.35rem;opacity:0;transition:opacity var(--transition);backdrop-filter:blur(4px);pointer-events:none}body:has(.menu-tgl.active) nav ul{opacity:1;pointer-events:all}nav li{font-size:var(--fs-2);transform:translateY(2ch);opacity:0}body:has(.menu-tgl.active) nav li{transform:translateY(0);opacity:1;transition-delay:calc(.033s * var(--i));transition-property:opacity,transform;transition-duration:var(--timing);transition-timing-function:var(--bezier)}main>*{grid-column:1/-1}}@media(max-width:625px){:root{--gs-1:1fr;--gs-2:1fr;--gs-3:1fr;--gs-4:repeat(2, 1fr)}.option-display h1,.option-display .fs-8{--fs-8:calc(var(--fs-5) * var(--fs-ratio))}.grid-overlay div:nth-child(n+3){display:none}}@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}