@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2)format("woff2-variations");unicode-range:U+1F??}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-wght-normal-CkhJZR-_.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-wght-normal-Dx4kXJAl.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{font-synthesis:none;font-optical-sizing:auto;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;color:var(--primary);background:var(--background);--background:#fff;--primary:#212121;--secondary:#707070;--border:#00000014;--underline:#bababa;--focus:var(--primary);--icon-background:#fff;font-family:Inter Variable,Inter,sans-serif}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--background:#0a0a0a;--primary:#ededed;--secondary:#b5b5b5;--border:#ffffff14;--underline:#616161}}*{box-sizing:border-box}body{margin:0;font-size:.875rem;line-height:1.25rem}h1,h2,p,ul{margin:0;padding:0}.profile{flex-direction:column;gap:3rem;width:min(32.5rem,100% - 3rem);margin-inline:auto;padding-block:6rem;display:flex}.home-profile{font-size:1rem;line-height:1.25rem}.home-profile .intro{gap:1rem}.home-profile h2{color:var(--primary);text-transform:none;font-size:1rem;line-height:1.5rem}.home-profile .entry{line-height:1.5rem}.home-profile .entry-brand img{align-self:center}.home-profile #writings+.entries .entry-meta{flex:none}.intro{flex-direction:column;gap:1.5rem;display:flex}.profile-header{align-items:center;gap:.75rem;display:flex}.avatar{border:1px solid var(--border);object-fit:cover;border-radius:50%;flex-shrink:0;width:2.5rem;height:2.5rem}h1{font-size:inherit;font-weight:500;line-height:inherit}.profile-header p,.bio{color:var(--secondary)}.bio{flex-direction:column;gap:1rem;display:flex}a{color:inherit}.bio a,.contact-label{color:var(--primary);text-decoration:underline;-webkit-text-decoration-color:var(--underline);text-decoration-color:var(--underline);text-underline-offset:.15em}a:hover{text-decoration-color:currentColor}a:focus-visible{outline:2px solid var(--focus);outline-offset:4px;border-radius:2px}.skip-link{z-index:10;background:var(--primary);color:var(--background);border-radius:4px;padding:.75rem 1rem;position:fixed;top:.75rem;left:.75rem;transform:translateY(-200%)}.skip-link:focus{transform:translateY(0)}#main-content:focus{outline:none}.email-copy{display:inline-block;position:relative}.email-button{font:inherit;cursor:pointer;background:0 0;border:0;padding:0}.email-button:hover{text-decoration-color:currentColor}.email-button:focus-visible{outline:2px solid var(--focus);outline-offset:4px;border-radius:2px}.email-tooltip{z-index:1;background:var(--primary);color:var(--background);white-space:nowrap;visibility:hidden;border-radius:5px;padding:4px 8px;font-size:.75rem;line-height:1rem;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%)}.email-tooltip:after{content:"";width:100%;height:8px;position:absolute;top:100%;left:0}.email-copy:not([data-dismissed=true]):is(:hover,:focus-within,[data-feedback=true]) .email-tooltip{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.section{flex-direction:column;gap:1rem;display:flex}h2{color:var(--secondary);text-transform:uppercase;font-size:.6875rem;font-weight:500;line-height:.75rem}.entries{flex-direction:column;gap:1rem;list-style:none;display:flex}.entry{width:100%;color:inherit;font:inherit;text-align:left;background:0 0;border:0;border-radius:3px;justify-content:space-between;align-items:center;gap:1rem;padding:0;text-decoration:none;display:flex}.entry:focus-visible{outline:2px solid var(--focus);outline-offset:4px}.entry-brand{align-items:center;gap:.5rem;min-width:0;display:flex}.entry-brand img{object-fit:cover;border-radius:6px;flex-shrink:0;align-self:flex-start;width:1.25rem;height:1.25rem}#projects+.entries .entry-brand img{background:var(--icon-background)}.entry-meta{min-width:0;color:var(--secondary);justify-content:flex-end;align-items:baseline;margin-left:auto;display:flex}.entry-detail{text-align:right;min-width:0}.entry-meta{position:relative}.entry-arrow{opacity:0;pointer-events:none;transition:opacity .14s;position:absolute;left:calc(100% + .35rem)}.entry:focus-visible .entry-arrow{opacity:1}.entry[aria-disabled=true]{color:var(--secondary);cursor:default}@media (hover:hover){a.entry:hover .entry-arrow{opacity:1}}@media (width<=540px){.profile{padding-block:3rem}.entry{align-items:flex-start}.entry-meta.has-detail{flex:0 46%}#selected-work+.entries .entry-meta{flex:none}}@media (width<=360px){.entry{flex-wrap:wrap;gap:.25rem 1rem}.entry-meta.has-detail,#selected-work+.entries .entry-meta.has-detail{flex-basis:100%}.entry-detail{text-align:left;flex:1}}.back-link{color:var(--secondary);align-self:flex-start;text-decoration:none}.back-link:hover{color:var(--primary)}.case-intro{flex-direction:column;gap:1rem;display:flex}.case-eyebrow{color:var(--secondary)}.case-intro h1{letter-spacing:-.045em;text-wrap:balance;font-size:clamp(2rem,6vw,2.75rem);line-height:1.12}.case-summary{color:var(--secondary);font-size:1rem;line-height:1.6}.case-note{color:var(--secondary);font-size:.75rem}.case-study .section p,.case-points{text-wrap:pretty;line-height:1.65}.case-points{gap:.75rem;padding-left:1.1rem;display:grid}.case-points strong{font-weight:500}.accord-preview{border:1px solid var(--border);border-radius:12px;margin:0;padding:clamp(1rem,4vw,1.5rem)}.preview-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.5rem;display:flex}.preview-header span,.preview-metrics span,.preview-metrics small,.accord-preview figcaption{color:var(--secondary);font-size:.6875rem}.preview-metrics{grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;margin-block:2rem;display:grid}.preview-metrics>div{flex-direction:column;gap:.4rem;display:flex}.preview-metrics strong{letter-spacing:-.04em;font-variant-numeric:tabular-nums;font-size:clamp(1.3rem,5vw,1.75rem);font-weight:500;line-height:1.25}.preview-chart{gap:.75rem;height:150px;display:flex}.preview-chart>div{flex-direction:column;flex:1;justify-content:flex-end;align-items:center;gap:.5rem;display:flex}.preview-chart span{background:var(--primary);opacity:.8;border-radius:3px 3px 0 0;width:100%}.preview-chart small{color:var(--secondary);font-size:.625rem}.accord-preview figcaption{margin-top:1.5rem}.reading-layout{position:relative}.reading-content{gap:2.75rem}.reading-content h1,.reading-content h2,.reading-content h3{scroll-margin-top:3rem}.reading-content h2{color:var(--primary);letter-spacing:-.025em;text-transform:none;text-wrap:balance;font-size:1.25rem;font-weight:500;line-height:1.4}.reading-content h3{letter-spacing:-.015em;margin:1rem 0 0;font-size:1rem;font-weight:500;line-height:1.5}.reading-content :is(h1,h2,h3):focus{outline:none}.article-prose{text-wrap:pretty;flex-direction:column;gap:1rem;font-size:1rem;line-height:1.75;display:flex}.reading-content .article-prose p{line-height:inherit}.article-byline{color:var(--secondary);align-items:center;gap:.5rem;margin-top:.5rem;font-size:.75rem;display:flex}.article-byline img{border-radius:50%}.article-figure{border:1px solid var(--border);border-radius:10px;margin:1.25rem 0;font-size:.75rem;line-height:1.5;overflow:hidden}.article-figure figcaption{border-top:1px solid var(--border);color:var(--secondary);padding:.875rem 1rem;font-size:.6875rem}.website-figure>img{background:#fff;width:100%;height:auto;display:block}.figure-window{border-bottom:1px solid var(--border);align-items:center;gap:5px;padding:.75rem 1rem;display:flex}.figure-window>span:not(.figure-window-label){background:var(--underline);border-radius:50%;width:5px;height:5px}.figure-window-label{color:var(--secondary);margin-left:.5rem;font-size:.625rem}.prototype-states{grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.prototype-states>div{flex-direction:column;gap:1.25rem;padding:1.25rem .875rem;display:flex}.prototype-states>div+div{border-left:1px solid var(--border)}.diagram-label{letter-spacing:.06em;text-transform:uppercase;color:var(--secondary);font-size:.625rem;display:block}.diagram-field,.diagram-selection{border:1px solid var(--border);border-radius:4px;justify-content:space-between;align-items:center;gap:.25rem;min-height:3rem;padding:.5rem;font-size:.625rem;display:flex}.diagram-selection{background:var(--primary);color:var(--background)}.diagram-results{flex-direction:column;justify-content:center;gap:6px;height:3rem;display:flex}.diagram-results i{background:var(--border);border-radius:2px;width:100%;height:8px;display:block}.diagram-results i:nth-child(2){width:80%}.diagram-results i:nth-child(3){width:60%}.prototype-states p{color:var(--secondary);font-size:.6875rem}.library-heading{justify-content:space-between;align-items:center;gap:.5rem;padding:1.25rem;display:flex}.local-label{color:var(--secondary);font-size:.625rem}.local-label>span{font-size:.5rem}.library-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem;padding:0 1.25rem 1.25rem;display:grid}.library-grid>div{border:1px solid var(--border);border-radius:6px;flex-direction:column;align-items:flex-start;gap:.375rem;padding:1rem;display:flex}.library-symbol{color:var(--secondary);margin-bottom:.5rem;font-size:1.25rem;line-height:1.5}.library-grid strong{font-weight:500}.library-grid>div>span:last-child{color:var(--secondary);font-size:.6875rem}.prompt-example{border-left:2px solid var(--underline);flex-direction:column;gap:.75rem;margin:.75rem 0;padding:.25rem 0 .25rem 1.25rem;display:flex}.article-footer{border-top:1px solid var(--border);color:var(--secondary);flex-direction:column;gap:1.5rem;padding-top:1.5rem;font-size:.75rem;display:flex}.reading-layout-wide .reading-content{gap:3rem;width:min(60rem,100% - 3rem)}.reading-layout-wide .reading-content>:not(.case-section):not(.case-image){width:min(32.5rem,100%);margin-inline:auto}.case-section{text-wrap:pretty;flex-direction:column;gap:1rem;width:100%;font-size:1rem;line-height:1.75;display:flex}.case-section>:not(.case-image){width:min(32.5rem,100%);margin-inline:auto}.case-section h3{margin-top:1rem}.case-section-number{letter-spacing:0;color:var(--secondary);font-variant-numeric:tabular-nums;margin-right:.5rem;font-size:.75rem}.case-facts{flex-wrap:wrap;gap:1rem 2rem;margin:.5rem 0 0;font-size:.75rem;line-height:1.5;display:flex}.case-facts dt{color:var(--secondary);margin-bottom:.25rem}.case-facts dd{margin:0}.case-image{width:100%;margin:1rem 0}.case-image>a{border-radius:10px;display:block}.case-image img{outline:1px solid var(--border);outline-offset:-1px;border-radius:10px;width:100%;height:auto;display:block}.case-image figcaption{color:var(--secondary);flex-wrap:wrap;justify-content:space-between;gap:.5rem 1rem;padding:.875rem 0;font-size:.75rem;line-height:1.5;display:flex}.case-image figcaption a{text-underline-offset:.2em;-webkit-text-decoration-color:var(--underline);text-decoration-color:var(--underline);flex-shrink:0}.error-number{color:var(--secondary);letter-spacing:-.07em;margin-block:2rem 1rem;font-size:5rem;font-weight:500;line-height:1}.error-links{flex-direction:column;display:flex}.error-links a{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;min-height:52px;text-decoration:none;display:flex}.error-links a:hover{color:var(--secondary)}.beach-footer{contain:layout paint;width:100%;height:clamp(220px,23vw,340px);position:relative;overflow:hidden}.beach-canvas{width:100%;height:100%;display:block}@media (width<=420px){.prototype-states{grid-template-columns:1fr}.prototype-states>div{gap:.75rem;padding:1rem}.prototype-states>div+div{border-left:0;border-top:1px solid var(--border)}.library-heading{flex-direction:column;align-items:flex-start}.library-grid{gap:.5rem;padding:0 1rem 1rem}.library-grid>div{padding:.75rem}}.reading-nav{z-index:5;width:4rem;font-size:.75rem;line-height:1.5;position:fixed;top:6rem;left:max(.5rem,50% - 36rem)}.reading-layout-wide .reading-nav{left:max(1.5rem,50% - 36rem)}.toc-toggle{width:100%;min-height:44px;color:var(--secondary);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:6px;padding:.75rem;display:block}.toc-toggle:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.toc-lines{flex-direction:column;align-items:flex-start;gap:8px;display:flex}.toc-line{background:var(--secondary);opacity:.4;border-radius:2px;width:24px;height:2px;display:block}.toc-line-child{width:14px}.toc-line[data-active=true]{background:var(--primary);opacity:1}.toc-mobile-label{display:none}.reading-nav nav{background:var(--background);border:1px solid var(--border);visibility:hidden;opacity:0;border-radius:10px;width:min(240px,50vw - 21.5rem);max-height:calc(100dvh - 8rem);padding:12px;transition:opacity .14s,visibility .14s;position:absolute;top:0;left:100%;overflow-y:auto;box-shadow:0 4px 20px #0000000d}.reading-nav[data-open=true] nav{visibility:visible;opacity:1}.toc-label{color:var(--secondary);padding:4px 8px 8px}.toc-tree{list-style:none}.toc-tree .toc-tree{border-left:1px solid var(--border);margin-left:12px;padding-left:4px}.toc-tree a{color:var(--secondary);border-radius:4px;padding:8px;text-decoration:none;display:block}.toc-tree a:hover,.toc-tree a[aria-current=location]{color:var(--primary);background:var(--border)}.toc-tree a[aria-current=location]{font-weight:500}@media (width<=1479px){.reading-layout-wide .reading-nav{background:var(--background);width:min(32.5rem,100% - 3rem);margin-inline:auto;padding-block:.5rem;position:sticky;top:0;left:auto}.reading-layout-wide .toc-toggle{border-bottom:1px solid var(--border);border-radius:0;padding:0}.reading-layout-wide .toc-mobile-label{justify-content:space-between;align-items:center;display:flex}.reading-layout-wide .toc-lines,.reading-layout-wide .toc-label{display:none}.reading-layout-wide .reading-nav nav{width:100%;max-height:65dvh;box-shadow:none;border:0;padding:12px 0;display:none;position:static}.reading-layout-wide .reading-nav[data-open=true] nav{display:block}.reading-layout-wide .toc-tree a{min-height:44px}.reading-layout-wide .reading-content{padding-top:2rem}.reading-layout-wide .reading-content :is(h1,h2,h3){scroll-margin-top:5rem}}@media (width<=1120px),(hover:none){.reading-nav,.reading-layout-wide .reading-nav{background:var(--background);width:min(32.5rem,100% - 3rem);margin-inline:auto;padding-block:.5rem;position:sticky;top:0;left:auto}.toc-toggle{border-bottom:1px solid var(--border);border-radius:0;padding:0}.toc-mobile-label{justify-content:space-between;align-items:center;display:flex}.toc-lines,.toc-label{display:none}.reading-nav nav{width:100%;max-height:65dvh;box-shadow:none;border:0;padding:12px 0;display:none;position:static}.reading-nav[data-open=true] nav{display:block}.toc-tree a{min-height:44px}.reading-content,.reading-layout-wide .reading-content{padding-top:2rem}.reading-content :is(h1,h2,h3){scroll-margin-top:5rem}}.home-profile :is(h1,h2,li,.bio p>span,.bio p>a){transition:opacity .14s}.home-profile:has(:focus-visible:is(a,button)) :is(h1,h2,li,.bio p>span,.bio p>a):not(:has(:focus-visible)):not(:focus-visible){opacity:.55}@media (hover:hover) and (pointer:fine){.home-profile:has(:is(a,button):hover) :is(h1,h2,li,.bio p>span,.bio p>a):not(:has(:is(a,button):hover)):not(:is(a,button):hover){opacity:.55}}@media (prefers-reduced-motion:reduce){.home-profile :is(h1,h2,li,.bio p>span,.bio p>a),.entry-arrow,.reading-nav nav{transition:none}}
