@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}@font-face{font-family:Newsreader Variable;font-style:italic;font-display:swap;font-weight:200 800;src:url(/_astro/newsreader-vietnamese-opsz-italic.DTr-ymY4.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:italic;font-display:swap;font-weight:200 800;src:url(/_astro/newsreader-latin-ext-opsz-italic.CSPGnFdO.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:italic;font-display:swap;font-weight:200 800;src:url(/_astro/newsreader-latin-opsz-italic.kJKFiXvB.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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-cyrillic-ext-400-normal.xuaO2J-f.woff2)format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-400-normal.DMdlQ8Kv.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2)format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-400-normal.CEL4l2ZJ.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-vietnamese-400-normal.BulugwFq.woff2)format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-400-normal.DDuiU_S-.woff)format("woff");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-ext-400-normal.BmRBH3aV.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-400-normal.D3D2R8hC.woff)format("woff");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff)format("woff");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-cyrillic-ext-500-normal.BqneJy0T.woff2)format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-500-normal.BIfNGwUT.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-cyrillic-500-normal.Bq9vWWag.woff2)format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-500-normal.Ael50iVv.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-vietnamese-500-normal.DZ4AoWbu.woff2)format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-500-normal.C8zxqsMH.woff)format("woff");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-latin-ext-500-normal.CAhNIIs5.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-500-normal.CZ70TYgx.woff)format("woff");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff)format("woff");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{--paper:#faf9f6;--panel:#f4f2ec;--ink:#17181c;--body:#3a3935;--muted:#5c5a55;--rule:#d9d5cc;--accent:#b8321f;--serif:"Newsreader Variable", Georgia, serif;--mono:"IBM Plex Mono", ui-monospace, Menlo, monospace;--gutter:clamp(20px, 4vw, 48px);--page-max:1120px;--measure:660px;--ease:cubic-bezier(.2, .7, .2, 1);--lift:0 1px 2px #17181c0d, 0 18px 40px -28px #17181c59}html{scroll-behavior:smooth}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{background:var(--paper);color:var(--ink);font-family:var(--serif);-webkit-font-smoothing:antialiased;flex-direction:column;min-height:100vh;margin:0;display:flex}main{flex:1;padding-bottom:56px}a{color:var(--ink);text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:3px;text-decoration-thickness:1px;transition:color .15s}a:hover{color:var(--accent)}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}h1,h2,h3,p{text-wrap:pretty;margin:0}h1,h2,h3,.toc__teaser{text-wrap:balance}::selection{background:color-mix(in srgb, var(--accent) 18%, var(--paper));color:var(--ink)}@view-transition{navigation:auto}::view-transition-old(root),::view-transition-new(root){animation-duration:.2s}@keyframes rise{0%{opacity:0;transform:translateY(8px)}}@media (prefers-reduced-motion:reduce){@view-transition{navigation:none}}.skip-link{background:var(--ink);color:var(--paper);font-family:var(--mono);padding:8px 12px;font-size:12px;position:absolute;top:8px;left:-9999px}.skip-link:focus{z-index:100;color:var(--paper);left:8px}.wrap{max-width:var(--page-max);padding-inline:var(--gutter);margin:0 auto}.page{padding-top:48px}.cols{flex-wrap:wrap;align-items:start;gap:28px 40px;display:flex}.cols--baseline{align-items:baseline;gap:16px 40px}.side{max-width:240px;font-family:var(--mono);color:var(--muted);flex:180px;font-size:11.5px;line-height:1.75}.main{flex:4 440px;min-width:0;max-width:760px}.side-block{border-top:1px solid var(--rule);margin-top:14px;padding-top:12px}.side-links{flex-direction:column;gap:2px;display:flex}.side-field{margin-top:10px}.ink{color:var(--ink)}.accent{color:var(--accent)}.eyebrow{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--accent);font-size:11px;font-weight:500}.eyebrow--muted{color:var(--muted);font-weight:400}h2.eyebrow{margin-bottom:10px}.h2{letter-spacing:-.01em;margin-bottom:18px;font-size:clamp(30px,3.4vw,42px);font-weight:400;line-height:1.1}.h3{margin-bottom:14px;font-size:clamp(24px,2.6vw,32px);font-weight:400;line-height:1.15}.lede,.prose,.prose-sm{color:var(--body);line-height:1.55}.lede{max-width:var(--measure);margin-bottom:16px;font-size:18px}.prose{max-width:var(--measure);margin-bottom:14px;font-size:17px}.prose-sm{font-size:16px}.two-up{grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:24px 40px;display:grid}.ruled-top{border-top:1px solid var(--rule);padding-top:20px}.site-header{z-index:10;background:var(--paper);border-bottom:1px solid var(--ink);view-transition-name:site-header;position:sticky;top:0}@supports (backdrop-filter:blur(1px)){.site-header{background:color-mix(in srgb, var(--paper) 84%, transparent);backdrop-filter:saturate(1.5)blur(14px)}}.site-nav{font-family:var(--mono);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px 28px;padding-block:14px;font-size:12px;display:flex}.site-nav a{text-decoration:none}.site-nav__brand{letter-spacing:.02em;align-items:center;gap:10px;font-weight:500;display:inline-flex}.site-nav__mark{border-radius:3px;flex:none}.site-nav__links{flex-wrap:wrap;gap:10px 22px;display:flex}.site-nav__links a{color:var(--muted)}.site-nav__links a:hover{color:var(--accent)}@media (width<=720px){.site-header{top:-52px}.site-nav{flex-flow:column;align-items:stretch;gap:0;padding-block:12px 0}.site-nav__brand{height:32px;margin-bottom:8px}.site-nav__links{scrollbar-width:none;flex-wrap:nowrap;justify-content:space-between;gap:0 10px;font-size:clamp(10.5px,3.1vw,12px);overflow-x:auto}.site-nav__links a{white-space:nowrap;padding-block:14px}}.site-nav__links a[aria-current=page]{color:var(--ink);text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:6px}.site-footer{border-top:1px solid var(--ink);background:var(--panel)}.site-footer__inner{font-family:var(--mono);color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:10px 24px;padding-block:22px;font-size:11.5px;line-height:1.6;display:flex}.site-footer__note{max-width:560px}.hero{padding-top:clamp(28px,6vw,64px)}.hero__grid{gap:22px;display:grid}.hero__main{min-width:0}@media (width>=721px){.hero__grid{grid-template-columns:minmax(0,1fr) clamp(200px,26vw,264px);align-items:start;gap:clamp(36px,7vw,96px)}.hero__portrait{order:1;margin-top:10px}}@media (prefers-reduced-motion:no-preference){.hero__main>*,.hero__portrait,.currently{animation:rise .7s var(--ease) both}.hero__main>:nth-child(2){animation-delay:60ms}.hero__main>:nth-child(n+3),.hero__portrait{animation-delay:.12s}.currently{animation-delay:.18s}}.hero h1{letter-spacing:-.015em;margin-bottom:24px;font-size:clamp(34px,4.6vw,58px);font-weight:400;line-height:1.04}.hero__intro{color:var(--body);max-width:600px;margin-bottom:20px;font-size:clamp(17px,1.4vw,19px);line-height:1.5}.hero__research{border-left:3px solid var(--accent);width:fit-content;max-width:100%;margin-bottom:24px;padding:10px 14px;font-size:17px;line-height:1.5;display:block}.currently{border-left:1px solid var(--rule);max-width:34em;color:var(--muted);margin-top:30px;padding-left:18px;font-size:15px;line-height:1.5}@media (width>=721px){.currently{border-left:0;border-top:1px solid var(--rule);flex-wrap:wrap;align-items:baseline;gap:10px 40px;max-width:none;margin-top:clamp(36px,5vw,56px);padding:18px 0 0;display:flex}.currently__label{flex:180px;max-width:240px}.currently__notes{flex:4 440px;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 32px;min-width:0;display:grid}.currently .currently__notes p{margin-bottom:0}.currently+nav .toc{margin-top:26px}}@media (width>=721px) and (width<=959px){.currently__label{flex-basis:100%;max-width:none}}.portrait{margin:0}.portrait img{background:var(--panel);outline-offset:-1px;border-radius:2px;outline:1px solid #17181c24;width:100%;height:auto;display:block}.portrait figcaption{font-family:var(--mono);color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:0 12px;margin-top:10px;font-size:11px;line-height:1.6;display:flex}@media (width<=720px){.portrait{align-items:center;gap:14px;display:flex}.portrait img{width:72px}.portrait figcaption{flex-direction:column;margin-top:0}}.currently p{margin-bottom:12px}.currently p:last-child{margin-bottom:0}.currently__label{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;font-size:10px}.toc{border-top:1px solid var(--ink);margin:44px 0 0;padding:0;list-style:none}.toc a{border-bottom:1px solid var(--rule);flex-wrap:wrap;align-items:baseline;gap:6px 40px;padding:18px 0 20px;text-decoration:none;display:flex;position:relative}.toc a:after{content:"";background:var(--accent);transform-origin:0;height:1px;position:absolute;inset:auto 0 -1px;transform:scaleX(0)}.toc a:hover{color:var(--ink)}.toc a:hover:after{transform:scaleX(1)}.toc__num{max-width:240px;font-family:var(--mono);color:var(--accent);flex:180px;font-size:11px}.toc__teaser{flex:4 440px;min-width:0;font-size:21px;line-height:1.25}.toc__arrow{font-family:var(--mono);color:var(--muted);font-size:13px;transition:color .15s}.toc a:hover .toc__arrow{color:var(--accent);transform:translate(4px)}.work{margin-top:56px}.work__grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:36px 40px;margin:16px 0 0;padding:0;list-style:none;display:grid}.work a{text-decoration:none;display:block}.work a:hover{color:var(--ink)}.work__frame{aspect-ratio:16/10;border:1px solid var(--rule);background:var(--panel);box-shadow:var(--lift);transition:border-color .25s;display:block;overflow:hidden}.work__frame img{object-fit:cover;object-position:center top;width:100%;height:100%;display:block}.work__kicker{font-family:var(--mono);color:var(--accent);margin-top:14px;font-size:11px;display:block}.work__title{justify-content:space-between;align-items:baseline;gap:16px;margin-top:4px;font-size:21px;line-height:1.25;display:flex}@media (width<=780px){.toc__arrow{display:none}}.next{margin-top:56px}.next a{border-top:1px solid var(--ink);flex-wrap:wrap;align-items:baseline;gap:6px 40px;padding-top:18px;text-decoration:none;display:flex}.next a:hover{color:var(--ink)}.next a:hover .toc__arrow{color:var(--accent);transform:translate(4px)}.steps{border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);grid-template-columns:repeat(4,1fr);margin:0 0 20px;padding:0;list-style:none;display:grid}.steps li{border-right:1px solid var(--rule);padding:14px 14px 16px}.steps li:first-child{padding-left:0}.steps li:last-child{border-right:0;padding-right:0}@media (width<=720px){.steps{grid-template-columns:repeat(2,1fr)}.steps li:nth-child(odd){padding-left:0}.steps li:nth-child(2n){border-right:0;padding-right:0}}.steps__n{font-family:var(--mono);color:var(--accent);font-size:11px}.steps p{margin-top:6px;font-size:16px;line-height:1.35}.example{border:1px solid var(--rule);background:var(--panel);margin:0 0 32px;padding:18px 20px 16px}.example figcaption{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:8px;margin-bottom:12px;font-size:11px;display:flex}.example__scroll{overflow-x:auto}.example table{border-collapse:collapse;width:100%;font-family:var(--mono);text-align:left;font-size:15px;line-height:1.4}.example th{color:var(--muted);border-bottom:1px solid var(--rule);padding:0 12px 6px 0;font-size:11px;font-weight:400}.example td{padding:8px 12px 0 0;font-weight:400}.example tbody th{color:var(--ink);white-space:nowrap;border-bottom:0;padding:8px 12px 0 0;font-size:15px}.example tfoot th,.example tfoot td{border-top:1px solid var(--rule);border-bottom:0;padding-top:8px;font-size:15px}.example tfoot td{font-weight:500}.example__note{color:var(--muted);margin-top:12px;font-size:14px;line-height:1.5}.questions{color:var(--body);gap:10px;margin:0;padding:0;font-size:17px;line-height:1.45;list-style:none;display:grid}.questions li{grid-template-columns:24px 1fr;gap:8px;display:grid}.questions__key{font-family:var(--mono);color:var(--accent);padding-top:5px;font-size:11px}.project{border-top:1px solid var(--ink);gap:24px 40px;padding:28px 0 36px;scroll-margin-top:80px}.evidence-slot{border:1px dashed var(--rule);text-align:center;font-family:var(--mono);color:var(--muted);margin-top:20px;padding:28px 20px;font-size:11.5px;line-height:1.6}.pipeline{font-family:var(--mono);grid-template-columns:repeat(auto-fit,minmax(min(100%,120px),1fr));gap:8px;margin:18px 0;font-size:11.5px;line-height:1.5;display:grid}.pipeline div{border:1px solid var(--rule);padding:12px}.shot{margin:22px 0 8px}.shot img{border:1px solid var(--rule);width:100%;height:auto;box-shadow:var(--lift);display:block}.shot figcaption{font-family:var(--mono);color:var(--muted);margin-top:8px;font-size:11.5px;line-height:1.5}.skills{border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);margin:18px 0 0;padding:12px 0 14px}.skills figcaption{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:10px;font-size:11px}.skills ul{flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none;display:flex}.skills code{font-family:var(--mono);color:var(--ink);background:var(--panel);border:1px solid var(--rule);padding:4px 9px;font-size:13px;display:inline-block}.skills li:first-child code{border-color:var(--accent);color:var(--accent)}.also-built{border-top:1px solid var(--rule);gap:16px 40px;padding-top:24px}.also-built ul{color:var(--body);gap:12px;margin:0;padding:0;font-size:16px;line-height:1.5;list-style:none;display:grid}.timeline{border-top:1px solid var(--rule);gap:10px;margin:14px 0 0;padding:12px 0 0 18px;list-style:none;display:grid;position:relative}.timeline:before{content:"";background:var(--rule);width:1px;position:absolute;top:22px;bottom:8px;left:3px}.timeline li{position:relative}.timeline li:before{content:"";box-sizing:border-box;border:1px solid var(--muted);background:var(--paper);width:7px;height:7px;position:absolute;top:7px;left:-18px}.timeline li:first-child:before{border-color:var(--accent);background:var(--accent)}@media (width<=720px){.cols--main-first>.side{display:contents}.cols--main-first>.side>*{flex:100%}.cols--main-first>.main{order:1}.cols--main-first .timeline{order:2;margin-top:8px;padding-top:20px}}.page-note{font-family:var(--mono);color:var(--muted);margin-top:40px;font-size:12px}.pubs{border-top:1px solid var(--ink);margin:0;padding:0;list-style:none}.pubs li{border-bottom:1px solid var(--rule);flex-wrap:wrap;align-items:baseline;gap:6px 24px;padding:16px 0;display:flex}.pubs__venue{font-family:var(--mono);color:var(--muted);flex:0 0 150px;font-size:11.5px}.pubs__item{flex:320px}.pubs__item a{font-size:20px;line-height:1.3}.pubs__item p{color:var(--muted);margin-top:4px;font-size:14.5px}.contact__portrait{margin-top:16px}.contact__lead{margin-bottom:28px}.contact__lead a{letter-spacing:-.01em;text-underline-offset:6px;overflow-wrap:anywhere;font-size:clamp(24px,3.2vw,36px);line-height:1.2}.contacts{grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr));gap:14px 32px;margin:0;padding:0;font-size:17px;line-height:1.5;list-style:none;display:grid}.contacts.ruled-top{padding-top:22px}.contacts__label{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-bottom:4px;font-size:10.5px;display:block}.work a:hover .work__frame{border-color:var(--ink)}.work a:hover .work__frame img{transform:scale(1.025)}.work a:hover .toc__arrow{color:var(--accent);transform:translate(4px)}.toc a:active .toc__teaser,.next a:active .toc__teaser,.work a:active .work__title{color:var(--accent)}@media (prefers-reduced-motion:no-preference){.toc a:after{transition:transform .45s var(--ease)}.toc__arrow{transition:transform .25s var(--ease), color .15s ease}.work__frame img{transition:transform .7s var(--ease)}}
