@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/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(/_astro/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(/_astro/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(/_astro/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(/_astro/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(/_astro/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(/_astro/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}@font-face{font-family:Newsreader Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/newsreader-vietnamese-opsz-normal.BjhtXyW2.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:Newsreader Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/newsreader-latin-ext-opsz-normal.BQn1nviT.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:Newsreader Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/newsreader-latin-opsz-normal.s-izfB6B.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{color-scheme:light dark;--bg:light-dark(#fbfbfd,#0b0b0d);--surface:light-dark(#fff,#141417);--surface-hover:light-dark(#f2f2f6,#18181c);--text:light-dark(#1d1d1f,#f5f5f7);--muted:light-dark(#5e5e66,#a6a6ae);--line:light-dark(#e4e4ea,#2a2a30);--accent:light-dark(#0071e3,#2997ff);--accent-fill:#0071e3;--accent-fill-hover:#0077ed;--terminal-bg:#111114;--terminal-text:#d6d6dc;--terminal-dim:#8e8e98;--sans:"Inter Variable", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--serif:"Newsreader Variable", Georgia, "Times New Roman", serif;--mono:ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;--radius:14px;--ease:cubic-bezier(.2, .7, .2, 1);--nav-height:56px}:root[data-theme=light]{color-scheme:light}:root[data-theme=dark]{color-scheme:dark}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-padding-top:calc(var(--nav-height) + 24px)}body{background:var(--bg);color:var(--text);font:400 1.0625rem/1.65 var(--sans);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0}h1,h2,h3,p,ul,ol,dl,dd,figure{margin:0;padding:0}ul,ol{list-style:none}h1,h2{font-family:var(--serif);letter-spacing:-.022em;text-wrap:balance;font-weight:400}h3{letter-spacing:-.012em;font-size:1.125rem;font-weight:600;line-height:1.35}p{text-wrap:pretty}img,svg,picture{max-width:100%;display:block}img{height:auto}a{color:inherit;text-decoration:none}strong{color:var(--text);font-weight:600}code{font-family:var(--mono);font-size:.875em}p code,li code{background:var(--surface-hover);border-radius:5px;padding:.1em .35em}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}.skip-link{z-index:20;background:var(--accent-fill);color:#fff;border-radius:8px;padding:8px 14px;position:fixed;top:8px;left:8px;transform:translateY(-200%)}.skip-link:focus{transform:none}.icon{vertical-align:-.15em;flex:none;display:inline-block}.eyebrow{color:var(--muted);font-size:.8125rem;font-weight:500}.column{width:100%;max-width:752px;margin-inline:auto;padding-inline:16px}.nav{z-index:10;height:var(--nav-height);border-bottom:1px solid var(--line);background:color-mix(in srgb, var(--bg) 82%, transparent);backdrop-filter:saturate(180%)blur(16px);align-items:center;gap:4px;padding-inline:16px;display:flex;position:sticky;top:0}.nav-mark{font:500 1.125rem/1 var(--serif);letter-spacing:-.01em;flex:none;padding:6px 8px 6px 0}.nav nav{flex:1;min-width:0}.nav ul{scrollbar-width:none;gap:2px;display:flex;position:relative;overflow-x:auto;mask-image:linear-gradient(90deg,#000 calc(100% - 20px),#0000)}.nav ul::-webkit-scrollbar{display:none}.nav li a{color:var(--muted);white-space:nowrap;padding:10px;font-size:.875rem;font-weight:500;transition:color .2s;display:block}.nav li a:hover,.nav li a[aria-current]{color:var(--text)}.theme-toggle{width:44px;height:44px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:50%;flex:none;place-items:center;margin-right:-10px;transition:color .2s;display:grid}.theme-toggle:hover{color:var(--text)}@media (width>=1040px){.shell{grid-template-columns:148px minmax(0,720px);justify-content:center;gap:72px;padding-inline:32px;display:grid}html{scroll-padding-top:64px}.column{max-width:none;padding-inline:0}.nav{backdrop-filter:none;background:0 0;border:0;flex-direction:column;align-items:flex-start;gap:40px;height:100dvh;padding:72px 0 32px;top:0}.nav-mark{padding:0;font-size:1.375rem}.nav ul{flex-direction:column;gap:0;overflow:visible;mask-image:none}.nav li a{align-items:center;gap:12px;padding:7px 0;display:flex}.nav li a:before{content:"";background:var(--line);width:16px;height:1px;transition:width .25s var(--ease), background .25s}.nav li a:hover:before,.nav li a[aria-current]:before{background:var(--text);width:32px}.theme-toggle{margin:auto 0 0 -13px}}.hero{padding-block:56px 72px}.avatar{object-fit:cover;border-radius:50%;width:80px;height:80px;display:block}.avatar-monogram{border:1px solid var(--line);background:var(--surface);font:400 1.75rem/1 var(--serif);place-items:center;display:grid}.hero h1{letter-spacing:-.032em;margin-top:28px;font-size:clamp(3.5rem,13vw,6.5rem);line-height:1}.hero-intro{letter-spacing:-.016em;margin-top:20px;font-size:clamp(1.3125rem,3.4vw,1.625rem);font-weight:500;line-height:1.3}.hero-bio{max-width:680px;color:var(--muted);margin-top:20px}.hero-actions{flex-wrap:wrap;gap:10px;margin-top:28px;display:flex}.button{overflow-wrap:anywhere;border:1px solid var(--line);background:var(--surface);border-radius:999px;align-items:center;gap:8px;min-height:44px;padding:8px 18px;font-size:.9375rem;font-weight:500;transition:background .2s,border-color .2s;display:inline-flex}.button:hover{border-color:var(--muted)}.button-primary{border-color:var(--accent-fill);background:var(--accent-fill);color:#fff}.button-primary:hover{border-color:var(--accent-fill-hover);background:var(--accent-fill-hover)}.currently{border-top:1px solid var(--line);max-width:680px;color:var(--muted);gap:12px;margin-top:40px;padding-top:20px;font-size:.9375rem;display:flex}.currently-dot{background:var(--accent);border-radius:50%;flex:none;width:8px;height:8px;margin-top:.56em}.section{padding-block:56px}.section>h2{margin-bottom:28px;font-size:clamp(2.125rem,6vw,2.75rem);line-height:1.1}.tags{flex-wrap:wrap;gap:6px;display:flex}.tags li{background:var(--surface-hover);color:var(--muted);border-radius:999px;padding:2px 10px;font-size:.8125rem;font-weight:500;line-height:1.6}.jobs{gap:8px;margin-inline:-16px;display:grid}.job{border-radius:var(--radius);transition:opacity .6s var(--ease), transform .6s var(--ease), background .25s, border-color .25s;border:1px solid #0000;grid-template-columns:44px minmax(0,1fr);gap:16px;padding:20px 16px;display:grid}.job-logo{border:1px solid var(--line);background:#fff;border-radius:10px;place-items:center;width:44px;height:44px;display:grid;overflow:hidden}.job-logo img{width:24px;height:24px}.job-company{color:var(--muted);font-size:.9375rem}.job-company a{color:var(--text);font-weight:500}.job-company a .icon{width:13px;height:13px;color:var(--muted);transition:transform .2s var(--ease)}.job-company a:hover{color:var(--accent)}.job-company a:hover .icon{transform:translate(2px,-2px)}.job-meta{color:var(--muted);font-size:.875rem}.job-summary{margin-top:12px;font-weight:500}.job-bullets{color:var(--muted);gap:10px;margin-top:10px;margin-bottom:16px;display:grid}.job-bullets li{padding-left:16px;position:relative}.job-bullets li:before{content:"";background:var(--muted);width:5px;height:1px;position:absolute;top:.72em;left:0}@media (hover:hover){.job:hover{border-color:var(--line);background:var(--surface)}}.cards{gap:16px;display:grid}.card{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);transition:opacity .6s var(--ease), transform .6s var(--ease), border-color .25s, box-shadow .25s;flex-direction:column;display:flex;position:relative;overflow:hidden}.card-body{flex-direction:column;flex:1;align-items:flex-start;gap:8px;padding:18px 20px 20px;display:flex}.card h3{font-size:1.25rem}.card-featured h3{font:400 clamp(1.875rem, 5vw, 2.25rem) / 1.15 var(--serif);letter-spacing:-.02em}.card-tagline{color:var(--muted);font-size:.9688rem;line-height:1.55}.card .tags{margin-top:6px}.card-link:after{content:"";position:absolute;inset:0}.card-actions{flex-wrap:wrap;gap:4px 18px;margin-top:auto;padding-top:10px;font-size:.9375rem;font-weight:500;display:flex}.card-more{color:var(--accent)}.card-more .icon{transition:transform .2s var(--ease)}.card-actions a{z-index:1;color:var(--muted);padding-block:2px;transition:color .2s;position:relative}.card-actions a:hover{color:var(--text)}@media (hover:hover){.card:hover{border-color:color-mix(in srgb, var(--muted) 45%, var(--line));box-shadow:0 10px 30px -18px #00000059}.card:hover .card-more .icon{transform:translate(3px)}.card:hover .media-preview img{transform:scale(1.012)}}@media (width>=640px){.cards{grid-template-columns:repeat(2,minmax(0,1fr))}.card-featured{grid-column:1/-1}.card:last-child:nth-child(2n){flex-direction:row;grid-column:1/-1}.card:last-child:nth-child(2n)>*{flex:50%;min-width:0}.card:last-child:nth-child(2n) .media-preview{aspect-ratio:auto}}.media{background:var(--surface-hover);overflow:hidden}.media-preview{aspect-ratio:16/10;border-bottom:1px solid var(--line)}.card-featured .media-preview{aspect-ratio:16/9.5}.media-preview picture,.media-preview img{width:100%;height:100%}.media-preview img{object-fit:cover;object-position:top left;transition:transform .5s var(--ease)}.media-contain{background:#f5f5f7}.media-contain.media-preview img{object-fit:contain;object-position:center}.terminal{background:var(--terminal-bg);height:100%;color:var(--terminal-text)}.terminal-title{color:var(--terminal-dim);font:500 .75rem/1.4 var(--mono);padding:10px 16px 0}.terminal pre{font:400 .8125rem/1.6 var(--mono);margin:0;padding:10px 16px 16px;overflow-x:auto}.terminal pre:focus-visible{outline-offset:-3px}.media-preview .terminal pre{font-size:.6875rem;overflow:hidden}.terminal code{font-size:inherit;display:block}.term-line{color:var(--terminal-dim)}.term-input{color:#fff}.term-comment{color:#5ba9ff}.skills{gap:20px;display:grid}.skills dt{margin-bottom:8px;font-size:.9375rem;font-weight:600}@media (width>=640px){.skills>div{grid-template-columns:124px minmax(0,1fr);align-items:baseline;display:grid}.skills dt{margin:0}}.notes li{border-top:1px solid var(--line);flex-direction:column;gap:4px;padding-block:16px;display:flex}.notes li:last-child{border-bottom:1px solid var(--line)}.notes h3{font-size:1.0625rem}.notes h3 a:hover{color:var(--accent)}.notes p,.note-date{color:var(--muted);font-size:.9375rem}.note-date{flex:none;font-size:.875rem}@media (width>=640px){.notes li{flex-direction:row;justify-content:space-between;align-items:baseline;gap:32px}}.contact-line{max-width:680px;font-size:1.1875rem}.section:last-child{padding-bottom:72px}.footer{border-top:1px solid var(--line);color:var(--muted);padding-block:24px 40px;font-size:.875rem}.study{padding-block:32px 64px}.back-link{min-height:44px;color:var(--muted);align-items:center;gap:8px;font-size:.9375rem;font-weight:500;transition:color .2s;display:inline-flex}.back-link:hover{color:var(--text)}.study-header{margin-top:28px}.study-header h1{letter-spacing:-.03em;margin-top:6px;font-size:clamp(3rem,11vw,4.75rem);line-height:1.05}.study-tagline{letter-spacing:-.012em;max-width:680px;margin-block:16px 20px;font-size:clamp(1.1875rem,3vw,1.375rem);line-height:1.4}.study-figure{margin-top:40px}.study-figure .media{border:1px solid var(--line);border-radius:var(--radius)}.study-figure figcaption{max-width:680px;color:var(--muted);margin-top:10px;font-size:.875rem}.study-section{max-width:680px;margin-top:56px}.study-section h2{margin-bottom:14px;font-size:2rem;line-height:1.15}.study-section p+p{margin-top:14px}.study-list{gap:12px;display:grid}.study-list li{padding-left:18px;position:relative}.study-list li:before{content:"";background:var(--muted);width:6px;height:1px;position:absolute;top:.75em;left:0}.flow{gap:26px;margin-block:8px 28px;display:grid}.flow-row{grid-template-columns:repeat(var(--boxes), minmax(0, 1fr));gap:10px;display:grid;position:relative}.flow-row:not(:last-child):after{content:"";border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);width:8px;height:8px;position:absolute;bottom:-19px;left:calc(50% - 5px);transform:rotate(45deg)}.flow-row:not(:last-child):before{content:"";background:var(--muted);width:1.5px;height:17px;position:absolute;bottom:-19px;left:calc(50% - .75px)}.flow-box{border:1px solid var(--line);background:var(--surface);text-align:center;border-radius:10px;align-content:center;gap:1px;padding:11px 14px;display:grid}.flow-box strong{font-size:.9375rem;line-height:1.35}.flow-box span{color:var(--muted);font-size:.8125rem;line-height:1.4}.next-project{border-top:1px solid var(--line);gap:2px;max-width:680px;margin-top:64px;padding-top:20px;display:grid}.next-title{font:400 2rem/1.2 var(--serif);letter-spacing:-.02em;transition:color .2s}.next-title .icon{vertical-align:-.1em;width:22px;height:22px}.next-project:hover .next-title{color:var(--accent)}.not-found{min-height:62vh;padding-block:96px}.not-found h1{margin-block:8px 16px;font-size:clamp(2.75rem,9vw,4.5rem);line-height:1.05}.not-found>p:not(.eyebrow){color:var(--muted)}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}.js .reveal{opacity:0;transition:opacity .6s var(--ease), transform .6s var(--ease), background .25s, border-color .25s, box-shadow .25s;transform:translateY(14px)}.js .reveal.is-in{opacity:1;transform:none}.js .reveal .term-line{opacity:0}.js .reveal.is-in .term-line{animation:.2s linear forwards term-line;animation-delay:calc(.2s + var(--i) * .11s)}@keyframes term-line{to{opacity:1}}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important}}
