:root{color-scheme:light;--serif:"Newsreader Variable", "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;--sans:"Inter Variable", "Inter Fallback", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--mono:"JetBrains Mono Variable", ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;--fs-name:56px;--lh-name:64px;--fs-claim:32px;--lh-claim:40px;--fs-title:96px;--lh-title:96px;--fs-title-long:64px;--lh-title-long:72px;--fs-h2:40px;--lh-h2:48px;--fs-case-h2:32px;--lh-case-h2:40px;--fs-h3:24px;--lh-h3:32px;--fs-standfirst:24px;--lh-standfirst:32px;--fs-lead:20px;--lh-lead:32px;--fs-prose:18px;--lh-prose:28px;--fs-body:16px;--lh-body:24px;--fs-card:15px;--lh-card:24px;--fs-small:14px;--lh-small:24px;--fs-dense:14px;--lh-dense:20px;--fs-caption:13px;--lh-caption:20px;--fs-label:12px;--lh-label:16px;--fs-figure:20px;--lh-figure:32px;--fs-metric:24px;--lh-metric:32px;--track-label:.08em;--s-0:4px;--s-1:8px;--s-2:16px;--s-3:24px;--s-4:32px;--s-5:40px;--s-6:48px;--s-7:56px;--s-8:64px;--s-10:80px;--s-12:96px;--s-16:128px;--section-gap:96px;--content:1152px;--gutter:24px;--pad:48px;--measure:68ch;--header-h:56px;--r-1:2px;--r-2:4px;--bw:1px;--bw-heavy:2px;--dur:.15s;--dur-slow:.3s;--paper:#faf8f3;--paper-2:#f2efe7;--surface:#fff;--ink:#1b1a17;--ink-2:#47443d;--ink-3:#68645b;--rule:#e3ded3;--rule-strong:#8f897d;--accent:#1e4a7a;--accent-soft:#e7edf5;--mark:#a3382a;--public:#2b6747;--plate:#fff;--chart-1:#2b66ad;--chart-2:#b4412c;--grid-minor:#1e4a7a0d;--grid-major:#1e4a7a1a;--focus:var(--accent);--i-mail:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.5'%3E%3Crect x='1.75' y='3.25' width='12.5' height='9.5' rx='1'/%3E%3Cpath d='M2 4l6 4.75L14 4'/%3E%3C/svg%3E");--i-doc:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.5'%3E%3Cpath d='M3.75 1.75h5.5l3 3v9.5h-8.5z'/%3E%3Cpath d='M9 1.75v3.25h3.25M6 8.5h4M6 11h4'/%3E%3C/svg%3E");--i-ext:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.6'%3E%3Cpath d='M5 11L11.5 4.5M6 4.25h5.75V10'/%3E%3C/svg%3E");--i-arrow:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.6'%3E%3Cpath d='M2.5 8h10.5M9 4l4 4-4 4'/%3E%3C/svg%3E");--i-down:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.6'%3E%3Cpath d='M8 2.5v10.5M4 9l4 4 4-4'/%3E%3C/svg%3E");--i-back:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.6'%3E%3Cpath d='M13.5 8H3M7 4L3 8l4 4'/%3E%3C/svg%3E")}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--paper:#141413;--paper-2:#1a1917;--surface:#22201d;--ink:#ece8df;--ink-2:#c3beb3;--ink-3:#a09b90;--rule:#2f2d29;--rule-strong:#6f6a60;--accent:#9dbfea;--accent-soft:#1e2a3a;--mark:#ec9a88;--public:#8ccba6;--plate:#faf8f3;--chart-1:#5f92d6;--chart-2:#d4705c;--grid-minor:#9dbfea0b;--grid-major:#9dbfea17}}:root[data-theme=dark]{color-scheme:dark;--paper:#141413;--paper-2:#1a1917;--surface:#22201d;--ink:#ece8df;--ink-2:#c3beb3;--ink-3:#a09b90;--rule:#2f2d29;--rule-strong:#6f6a60;--accent:#9dbfea;--accent-soft:#1e2a3a;--mark:#ec9a88;--public:#8ccba6;--plate:#faf8f3;--chart-1:#5f92d6;--chart-2:#d4705c;--grid-minor:#9dbfea0b;--grid-major:#9dbfea17}@media (width<=1023px){:root{--pad:32px;--section-gap:80px;--fs-name:48px;--lh-name:56px;--fs-claim:30px;--lh-claim:40px;--fs-title:80px;--lh-title:80px;--fs-title-long:56px;--lh-title-long:64px;--fs-h2:36px;--lh-h2:40px}}@media (width<=639px){:root{--pad:20px;--gutter:16px;--section-gap:64px;--fs-name:36px;--lh-name:40px;--fs-claim:22px;--lh-claim:32px;--fs-title:56px;--lh-title:64px;--fs-title-long:40px;--lh-title-long:48px;--fs-h2:30px;--lh-h2:40px;--fs-case-h2:26px;--lh-case-h2:32px;--fs-h3:22px;--lh-h3:32px;--fs-standfirst:20px;--lh-standfirst:28px;--fs-lead:17px;--lh-lead:24px;--fs-prose:17px;--lh-prose:28px;--fs-figure:18px;--lh-figure:24px;--fs-metric:20px;--lh-metric:28px}}@font-face{font-family:Inter Fallback;src:local(Arial);size-adjust:107.12%;ascent-override:90.44%;descent-override:22.52%;line-gap-override:0%}@font-face{font-family:Newsreader Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/newsreader-vietnamese-wght-normal.Czsa-EzN.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-wght-normal.C-3rgBeH.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-wght-normal.CCVVNp6i.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-wght-italic.xAqemagA.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-wght-italic.DFS986qL.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-wght-italic.Bxi8ein9.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: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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(data:font/woff2;base64,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)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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/_astro/jetbrains-mono-cyrillic-wght-normal.D73BlboJ.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/_astro/jetbrains-mono-greek-wght-normal.Bw9x6K1M.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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/_astro/jetbrains-mono-vietnamese-wght-normal.Bt-aOZkq.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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/_astro/jetbrains-mono-latin-ext-wght-normal.DBQx-q_a.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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/_astro/jetbrains-mono-latin-wght-normal.B9CIFXIH.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}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}@media (width>=640px) and (height>=560px){html{scroll-padding-top:calc(var(--header-h) + 16px)}}body{background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:var(--fs-body);line-height:var(--lh-body);font-optical-sizing:auto;font-kerning:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0}h1,h2,h3,h4,p,ol,ul,dl,dd,figure,table,blockquote{margin:0}ol,ul{padding:0;list-style:none}svg{display:block}img{max-width:100%;height:auto}b,strong{font-weight:600}code{font-family:var(--mono);font-size:.88em}a{color:inherit;text-underline-offset:.24em;text-decoration-thickness:1px;text-decoration-color:var(--rule-strong);transition:color var(--dur) ease, text-decoration-color var(--dur) ease}a:hover{color:var(--accent);text-decoration-color:currentColor}::selection{background:var(--accent-soft);color:var(--ink)}:focus-visible{outline:2px solid var(--focus);outline-offset:3px;border-radius:2px}[id]{scroll-margin-top:24px}@media (width>=640px) and (height>=560px){[id]{scroll-margin-top:calc(var(--header-h) + 24px)}}.vh{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.skip{z-index:100;background:var(--ink);color:var(--paper);font-size:var(--fs-small);line-height:var(--lh-small);border-radius:var(--r-2);padding:8px 16px;text-decoration:none;position:absolute;top:-64px;left:16px}.skip:focus{color:var(--paper);top:16px}.wrap{max-width:calc(var(--content) + 2 * var(--pad));padding-inline:var(--pad);margin-inline:auto}.label{font-family:var(--mono);font-size:var(--fs-label);line-height:var(--lh-label);letter-spacing:var(--track-label);text-transform:uppercase;color:var(--ink-3);font-weight:500}.num{font-variant-numeric:lining-nums tabular-nums;white-space:nowrap}.nw{white-space:nowrap}.dot-list,.dot-list li{display:inline}.dot-list li+li:before{content:" · ";content:" · " / "";color:var(--ink-3)}.icon{width:1em;height:1em;-webkit-mask:var(--i) center / contain no-repeat;mask:var(--i) center / contain no-repeat;vertical-align:-.125em;background:currentColor;flex:none;display:inline-block}.icon--mail{--i:var(--i-mail)}.icon--doc{--i:var(--i-doc)}.icon--ext{--i:var(--i-ext);width:.9em;height:.9em}.icon--arrow{--i:var(--i-arrow)}.icon--down{--i:var(--i-down)}.icon--back{--i:var(--i-back)}.site-header{background:var(--paper);border-bottom:1px solid var(--rule);z-index:50}@media (width>=640px) and (height>=560px){.site-header{position:sticky;top:0}}.site-header__inner{min-height:var(--header-h);flex-wrap:wrap;align-items:center;column-gap:32px;display:flex}.wordmark{font-family:var(--mono);letter-spacing:var(--track-label);text-transform:uppercase;color:var(--ink);white-space:nowrap;margin-right:auto;padding-block:16px;font-size:13px;font-weight:500;line-height:24px;text-decoration:none}.wordmark:before{content:"";background:var(--accent);vertical-align:1px;width:8px;height:8px;margin-right:12px;display:inline-block}.wordmark:hover{color:var(--accent)}.wordmark__mono,.is-home .wordmark__full{display:none}.is-home .wordmark__mono{display:inline}@media (width>=640px) and (width<=767px){.wordmark__full{display:none}.wordmark__mono{display:inline}}.site-nav ul{gap:24px;display:flex}.site-nav a{font-size:var(--fs-small);line-height:var(--lh-small);color:var(--ink-2);padding-block:8px;text-decoration:none;display:block}.site-nav a:hover,.site-nav a[aria-current]{color:var(--ink);text-decoration:underline;text-decoration-color:var(--accent)}.site-nav__cv{display:none}.site-actions{align-items:center;gap:16px;display:flex}.site-email{font-size:var(--fs-small);line-height:var(--lh-small);color:var(--ink-2);align-items:center;gap:8px;padding-block:8px;text-decoration:none;display:none}.site-email:hover{color:var(--ink);text-decoration:underline;text-decoration-color:var(--accent)}@media (width>=1024px){.site-email{display:inline-flex}}.theme-toggle{border:1px solid var(--rule);border-radius:var(--r-2);width:40px;height:40px;color:var(--ink-2);cursor:pointer;transition:border-color var(--dur) ease, color var(--dur) ease;background:0 0;justify-content:center;align-items:center;padding:0;display:none}.js .theme-toggle{display:inline-flex}.theme-toggle:hover{color:var(--ink);border-color:var(--rule-strong)}.theme-toggle svg{transition:transform var(--dur-slow) ease}.theme-toggle[aria-pressed=true] svg{transform:rotate(180deg)}@supports (timeline-scope:--a) and (animation-timeline:view()){html{timeline-scope:--hero-cta}.hero__cta{view-timeline:--hero-cta block}.is-home .header-cv{animation:linear both cv-in;animation-duration:auto;animation-timeline:--hero-cta;animation-range:exit}@keyframes cv-in{0%{opacity:0;visibility:hidden}to{opacity:1;visibility:visible}}}@media (prefers-reduced-motion:reduce){.is-home .header-cv{animation-timing-function:step-end}}.btn{border:1px solid var(--rule-strong);border-radius:var(--r-2);height:40px;font-size:var(--fs-small);line-height:var(--lh-small);color:var(--ink);white-space:nowrap;transition:background-color var(--dur) ease, border-color var(--dur) ease, color var(--dur) ease;background:0 0;justify-content:center;align-items:center;gap:8px;padding-inline:16px;font-weight:500;text-decoration:none;display:inline-flex}.btn:hover{color:var(--ink);background:var(--surface);border-color:var(--ink)}.btn--primary{background:var(--ink);border-color:var(--ink);color:var(--paper)}.btn--primary:hover{background:var(--accent);border-color:var(--accent);color:var(--paper)}.btn--sm{height:32px;padding-inline:12px;font-size:13px}.btn .obf{font-family:var(--mono);letter-spacing:0;font-size:13px}.arrow-link{text-decoration-color:var(--accent);font-weight:500}.arrow-link .icon{transition:transform var(--dur) ease;margin-left:6px}.arrow-link:hover .icon{transform:translate(3px)}a.is-public:before,.st:before{content:"";vertical-align:1px;border-radius:50%;flex:none;width:8px;height:8px;margin-right:8px;display:inline-block}a.is-public:before{background:var(--public)}a .icon--ext{color:var(--ink-3);margin-left:4px}.btn .icon--ext{color:inherit}.st{font-family:var(--mono);font-size:var(--fs-label);line-height:var(--lh-label);color:var(--ink-3);align-items:center;display:inline-flex}.st:before{border:1.5px solid}.st--public{color:var(--public)}.st--public:before{background:currentColor}.st--competition:before{border-radius:1px}.legend{flex-wrap:wrap;gap:8px 24px;display:flex}.legend .st--public-key:before{background:var(--public);border-color:var(--public)}.roles{flex-wrap:wrap;gap:8px 20px;display:flex}.role{font-size:var(--fs-card);line-height:var(--lh-card);color:var(--ink);align-items:center;gap:8px;font-weight:500;display:inline-flex}.role:before{content:"";background:var(--accent);flex:none;width:8px;height:8px}.chip{border:1px solid var(--rule-strong);border-radius:var(--r-1);height:24px;font-family:var(--mono);font-size:var(--fs-label);line-height:var(--lh-label);color:var(--ink-2);white-space:nowrap;align-items:center;gap:8px;padding-inline:8px;display:inline-flex}.chip b{color:var(--ink);font-weight:600}.hero{padding-block:56px 80px}.hero__grid{column-gap:var(--gutter);grid-template-columns:repeat(12,minmax(0,1fr));align-items:start;row-gap:48px;display:grid}.hero__main{grid-column:1/span 7;min-width:0}.hero__aside{grid-column:9/span 4;min-width:0}.hero__name{font-family:var(--serif);font-size:var(--fs-name);line-height:var(--lh-name);letter-spacing:-.022em;font-weight:500}.hero__claim{max-width:22em;font-family:var(--serif);font-size:var(--fs-claim);line-height:var(--lh-claim);letter-spacing:-.012em;text-wrap:balance;margin-top:16px;font-weight:400}.hero__claim em{font-style:italic}.hero__affil{font-size:var(--fs-lead);line-height:var(--lh-lead);color:var(--ink-2);margin-top:24px}.hero__affil .line{display:block}.facts{border-top:1px solid var(--rule);margin-top:24px}.facts>div{border-bottom:1px solid var(--rule);grid-template-columns:112px minmax(0,1fr);column-gap:16px;padding-block:12px;display:grid}.facts dt{padding-top:4px}.facts dd{font-size:var(--fs-body);line-height:var(--lh-body);color:var(--ink)}.hero__cta{flex-wrap:wrap;gap:8px;margin-top:32px;display:flex}.hero__cta .btn{gap:6px;padding-inline:12px}.hero__start{font-size:var(--fs-card);line-height:var(--lh-card);flex-wrap:wrap;align-items:baseline;gap:4px 16px;margin-top:16px;display:flex}.hero__bio{border-top:1px solid var(--rule);max-width:60ch;font-size:var(--fs-lead);line-height:var(--lh-lead);color:var(--ink-2);margin-top:32px;padding-top:24px}.lens-bar{border-bottom:1px solid var(--rule);font-size:var(--fs-small);line-height:var(--lh-small);flex-wrap:wrap;align-items:center;gap:8px 24px;padding-block:16px;display:flex}.lens-bar .label{color:var(--accent);margin-right:auto}.keyfig{border-top:2px solid var(--ink);border-bottom:2px solid var(--ink)}.keyfig__head{border-bottom:1px solid var(--ink);justify-content:space-between;gap:16px;padding-block:8px;display:flex}.keyfig li+li{border-top:1px solid var(--rule)}.kf{color:inherit;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"src arrow""val stat""desc desc";column-gap:16px;padding-block:16px;text-decoration:none;display:grid}.kf:focus-visible{outline-offset:-2px}.kf__src{font-family:var(--mono);font-size:var(--fs-label);line-height:var(--lh-label);letter-spacing:var(--track-label);text-transform:uppercase;color:var(--ink-3);grid-area:src;font-weight:500}.kf__arrow{color:var(--ink-3);transition:transform var(--dur) ease, color var(--dur) ease;grid-area:arrow;justify-self:end}.kf__val{font-family:var(--mono);font-size:var(--fs-figure);line-height:var(--lh-figure);letter-spacing:-.02em;color:var(--ink);grid-area:val;margin-top:4px;font-weight:500}.kf__stat{text-align:right;grid-area:stat;max-width:136px;margin-top:4px}.kf__stat b{font-family:var(--mono);font-size:var(--fs-figure);line-height:var(--lh-figure);letter-spacing:-.02em;color:var(--ink);font-weight:500;display:block}.kf__stat .label{letter-spacing:.04em;display:block}.kf__desc{font-size:var(--fs-dense);line-height:var(--lh-dense);color:var(--ink-2);grid-area:desc;margin-top:4px}.kf:hover{color:inherit}.kf:hover .kf__val,.kf:hover .kf__arrow{color:var(--accent)}.kf:hover .kf__arrow{transform:translate(2px)}.section{padding-bottom:var(--section-gap)}.sec-head{column-gap:var(--gutter);grid-template-columns:repeat(12,minmax(0,1fr));align-items:end;margin-bottom:48px;display:grid}.sec-kicker{font-family:var(--mono);font-size:var(--fs-label);line-height:var(--lh-label);letter-spacing:var(--track-label);text-transform:uppercase;color:var(--accent);grid-column:1/-1;align-items:center;gap:16px;font-weight:500;display:flex}.sec-kicker:after{content:"";background:var(--ink);flex:1;height:1px}.sec-title{font-family:var(--serif);font-size:var(--fs-h2);line-height:var(--lh-h2);letter-spacing:-.015em;grid-column:1/span 8;margin-top:24px;font-weight:400}.sec-aside{text-align:right;grid-column:9/-1;justify-self:end;padding-bottom:8px}.sec-intro{max-width:var(--measure);font-size:var(--fs-lead);line-height:var(--lh-lead);color:var(--ink-2);grid-column:1/span 8;margin-top:16px}.page-head{padding-top:56px}.sec-foot{font-size:var(--fs-card);margin-top:32px}.sub-title{font-family:var(--serif);font-size:var(--fs-h3);line-height:var(--lh-h3);letter-spacing:-.01em;margin-bottom:16px;font-weight:500}.disclaimer{font-size:var(--fs-caption);line-height:var(--lh-caption);color:var(--ink-3);margin-top:24px}.filter{border:0;border-bottom:1px solid var(--rule);flex-wrap:wrap;gap:0 24px;margin:0 0 8px;padding:0;display:flex}.filter legend{padding:0}.filter input{opacity:0;pointer-events:none;width:1px;height:1px;margin:0;position:absolute}.filter label{font-family:var(--mono);font-size:var(--fs-label);line-height:var(--lh-label);letter-spacing:var(--track-label);text-transform:uppercase;color:var(--ink-3);cursor:pointer;border-bottom:2px solid #0000;gap:8px;margin-bottom:-1px;padding:12px 0;font-weight:500;display:inline-flex}.filter label:hover{color:var(--ink)}.filter label .n{color:var(--ink-3);font-weight:400}.filter input:checked+label{color:var(--ink);border-bottom-color:var(--accent)}.filter input:focus-visible+label{outline:2px solid var(--focus);outline-offset:2px}.filter__bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 24px;margin-bottom:40px;display:flex}.filter__status{font-family:var(--mono);font-size:var(--fs-label);color:var(--ink-3);line-height:24px}.filter__status span{display:none}.filter__status .s-all{display:inline}.works:has(#f-ai:checked) .filter__status .s-all,.works:has(#f-quant:checked) .filter__status .s-all{display:none}.works:has(#f-ai:checked) .filter__status .s-ai,.works:has(#f-quant:checked) .filter__status .s-quant{display:inline}.work-grid>.card[hidden],.mini li[hidden]{display:none}@media (width>=1024px){.work-grid>.card.lg-w4{grid-column:span 4}.work-grid>.card.lg-w6{grid-column:span 6}.work-grid>.card.lg-w8{grid-column:span 8}.work-grid>.card.lg-w12{grid-column:1/-1}}@media (width>=640px) and (width<=1023px){.work-grid>.card.md-w12{grid-column:1/-1}}@supports not selector(:has(a)){.filter,.filter__status{display:none}}.work-grid{grid-template-columns:repeat(12,minmax(0,1fr));grid-auto-flow:dense;column-gap:var(--gutter);row-gap:64px;display:grid}.card{flex-direction:column;grid-column:span 4;min-width:0;display:flex}.card--feature{grid-column:span 6}.card__head{border-top:1px solid var(--ink);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;padding-top:16px;display:flex}.card__meta{font-family:var(--mono);font-size:var(--fs-label);line-height:var(--lh-label);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}.card__idx{color:var(--ink);margin-right:8px;font-weight:500}.card__status{flex-wrap:wrap;gap:8px 16px;display:flex}.card__title{font-family:var(--serif);font-size:var(--fs-h3);line-height:var(--lh-h3);letter-spacing:-.01em;margin-top:16px;font-weight:500}.card__title a{text-decoration:none}.card__title a:hover{text-decoration:underline 1px}.card__fig{margin-top:24px}.card__result{font-size:var(--fs-card);line-height:var(--lh-card);color:var(--ink);margin-top:8px}.card--feature .card__result{font-size:var(--fs-body);max-width:var(--measure)}.card__facts{margin-top:16px}.card__facts>div{border-top:1px solid var(--rule);grid-template-columns:88px minmax(0,1fr);column-gap:12px;padding-block:8px;display:grid}.card__facts dt{padding-top:2px}.card__facts dd{font-size:var(--fs-dense);line-height:var(--lh-dense);color:var(--ink-2)}.card__stack{font-family:var(--mono);font-size:var(--fs-label);line-height:var(--lh-label);color:var(--ink-3);margin-top:12px}.card__links{font-size:var(--fs-small);line-height:var(--lh-small);flex-wrap:wrap;gap:8px 24px;padding-top:16px;font-weight:500;display:flex}@media (width>=640px){.card--feature .card__fig{order:-1;margin-top:0;margin-bottom:24px}}.mini{margin-top:8px}.mini li{border-bottom:1px dashed var(--rule-strong);font-size:var(--fs-card);line-height:var(--lh-card);flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:0 16px;padding-block:8px;display:flex}.mini li:last-child{border-bottom:0}.mini__name{color:var(--ink);font-weight:600}.mini__desc{color:var(--ink-2)}.mini__links{font-size:var(--fs-small);flex-wrap:wrap;gap:0 16px;font-weight:500;display:inline-flex}.card--all .card__head{border-top-style:dashed;border-top-color:var(--rule-strong)}.all-link{font-family:var(--serif);font-size:var(--fs-h3);line-height:var(--lh-h3);margin-top:16px;text-decoration:none;display:block}.all-link:hover .icon{transform:translate(3px)}.all-link .icon{transition:transform var(--dur) ease;margin-left:8px}.fig{min-width:0;margin:0}.fig__canvas{border:1px solid var(--rule);border-radius:var(--r-1);background-color:var(--paper-2);background-image:linear-gradient(var(--grid-major) 1px, transparent 1px), linear-gradient(90deg, var(--grid-major) 1px, transparent 1px), linear-gradient(var(--grid-minor) 1px, transparent 1px), linear-gradient(90deg, var(--grid-minor) 1px, transparent 1px);background-position:-1px -1px;background-size:40px 40px,40px 40px,8px 8px,8px 8px;padding:24px 16px;position:relative;container-type:inline-size}.fig__canvas--plate{background:var(--plate);background-image:none;padding:16px}.fig__canvas--plate img{width:100%;max-width:960px;height:auto;margin-inline:auto;display:block}.fig figcaption{font-size:var(--fs-caption);line-height:var(--lh-caption);color:var(--ink-3);text-wrap:pretty;max-width:var(--measure);margin-top:8px}.fig__no{font-family:var(--mono);font-size:var(--fs-label);color:var(--ink-2);margin-right:8px;font-weight:500}.dg{width:100%;height:auto;max-width:calc(var(--w,560) * 1.1px);margin-inline:auto;overflow:visible}.dg--tall{display:none}@container (width<=479px){.dg--wide.sw-480{display:none}.dg--tall.sw-480{display:block}}@container (width<=559px){.dg--wide.sw-560{display:none}.dg--tall.sw-560{display:block}}@container (width<=679px){.dg--wide.sw-680{display:none}.dg--tall.sw-680{display:block}}.dg text{font-family:var(--mono);fill:var(--ink);font-size:12px}.dg .t--s{fill:var(--ink-3);font-size:11px}.dg .t--cap{letter-spacing:.08em;fill:var(--ink-3);font-size:10px}.dg .t--accent{fill:var(--accent)}.dg .t--mark{fill:var(--mark)}.dg .n{fill:var(--surface);stroke:var(--ink-3);stroke-width:1px;vector-effect:non-scaling-stroke}.dg .n--key{stroke:var(--accent);stroke-width:1.5px}.dg .n--finding{fill:var(--paper-2);stroke:var(--mark);stroke-dasharray:4 3}.dg .n--plate{fill:var(--paper-2);stroke:none}.dg .b{fill:none;stroke:var(--rule-strong);stroke-width:1px;stroke-dasharray:3 3;vector-effect:non-scaling-stroke}.dg .e{fill:none;stroke:var(--ink-3);stroke-width:1px;vector-effect:non-scaling-stroke}.dg .e--key,.dg .e--dim{stroke:var(--accent)}.dg .ah{fill:var(--ink-3)}.tl__org{border-top:1px solid var(--rule);padding-block:32px}.tl__org:first-child{border-top:0;padding-top:0}.tl__head,.tl__role{column-gap:var(--gutter);grid-template-columns:repeat(12,minmax(0,1fr));display:grid}.tl__head>*,.tl__role>.tl__body{grid-column:4/-1}.tl__kind{margin-bottom:4px;display:block}.tl__name{font-family:var(--serif);font-size:var(--fs-h3);line-height:var(--lh-h3);letter-spacing:-.01em;font-weight:500}.tl__desc{font-size:var(--fs-small);line-height:var(--lh-small);color:var(--ink-3);margin-top:4px}.tl__role{margin-top:24px}.tl__when{font-family:var(--mono);color:var(--ink-3);font-variant-numeric:tabular-nums;grid-column:1/span 3;font-size:13px;line-height:24px}.tl__current{font-family:var(--mono);font-size:var(--fs-label);line-height:var(--lh-label);letter-spacing:var(--track-label);text-transform:uppercase;color:var(--accent);align-items:center;gap:8px;margin-top:4px;font-weight:500;display:flex}.tl__current:before{content:"";background:var(--accent);border-radius:50%;width:8px;height:8px}.tl__title{color:var(--ink);font-weight:600}.tl__bullets{max-width:var(--measure);margin-top:8px}.tl__bullets li{color:var(--ink-2);margin-top:8px;padding-left:20px;position:relative}.tl__bullets li:before{content:"–";content:"–" / "";color:var(--ink-3);position:absolute;left:0}.tl__chips{flex-wrap:wrap;gap:8px;margin-top:16px;display:flex}.tl__fig{margin-top:32px}.tl__link{font-size:var(--fs-card);margin-top:12px}.tl__earlier li{column-gap:var(--gutter);border-top:1px dashed var(--rule-strong);grid-template-columns:repeat(12,minmax(0,1fr));padding-block:8px;display:grid}.tl__earlier li:first-child{border-top:0}.tl__earlier .tl__when{grid-column:1/span 3}.tl__earlier .tl__body{color:var(--ink-2);grid-column:4/-1}.tl__earlier .tl__body b{color:var(--ink)}.split{column-gap:var(--gutter);grid-template-columns:repeat(12,minmax(0,1fr));row-gap:64px;display:grid}.split>*{grid-column:span 6;min-width:0}.tbl{border-collapse:collapse;border-top:2px solid var(--ink);border-bottom:2px solid var(--ink);font-variant-numeric:tabular-nums;width:100%}.tbl th{border-bottom:1px solid var(--ink);text-align:left;vertical-align:bottom;padding:8px 16px 8px 0}.tbl td{vertical-align:top;font-size:var(--fs-card);line-height:var(--lh-card);color:var(--ink-2);padding:16px 16px 16px 0}.tbl th:last-child,.tbl td:last-child{padding-right:0}.tbl tbody tr+tr td{border-top:1px solid var(--rule)}.tbl--keyed th:first-child,.tbl--keyed td:first-child{width:128px}.tbl__k{font-family:var(--mono);color:var(--ink);white-space:nowrap;font-size:13px}.tbl__k small{font-size:var(--fs-label);line-height:var(--lh-label);color:var(--ink-3);white-space:normal;display:block}.tbl__t{color:var(--ink);font-weight:600;display:block}.tbl__d{font-size:var(--fs-dense);line-height:var(--lh-dense);margin-top:4px;display:block}.tbl__d+.tbl__d{margin-top:6px}.tbl-wrap{overflow-x:auto}.tbl--prose td{font-size:var(--fs-small);line-height:var(--lh-small)}.tbl--prose th{font-family:var(--mono);font-size:var(--fs-label);line-height:var(--lh-label);letter-spacing:var(--track-label);text-transform:uppercase;color:var(--ink-3);font-weight:500}.skills{column-gap:var(--gutter);grid-template-columns:repeat(2,minmax(0,1fr));row-gap:24px;display:grid}.skills>div{border-top:1px solid var(--ink);min-width:0;padding-top:8px}.skills dd{font-size:var(--fs-card);line-height:var(--lh-card);color:var(--ink);margin-top:8px}.skills dd li{display:inline}.skills dd li+li:before{content:" · ";content:" · " / "";color:var(--ink-3)}.langs{flex-wrap:wrap;gap:8px 32px;display:flex}.langs dt{display:inline}.langs div{align-items:baseline;gap:12px;display:flex}.langs dd{color:var(--ink)}.contact{column-gap:var(--gutter);grid-template-columns:repeat(12,minmax(0,1fr));align-items:start;row-gap:32px;display:grid}.contact__text{grid-column:1/span 6}.contact__lead{font-family:var(--serif);font-size:var(--fs-h3);line-height:var(--lh-h3);color:var(--ink)}.contact__text .roles{margin-top:16px}.contact__loc{color:var(--ink-2);margin-top:16px}.contact__list{border-top:2px solid var(--ink);border-bottom:2px solid var(--ink);grid-column:8/-1}.contact__list>div{grid-template-columns:96px minmax(0,1fr);column-gap:16px;padding-block:12px;display:grid}.contact__list>div+div{border-top:1px solid var(--rule)}.contact__list dt{padding-top:4px}.contact__list dd{min-width:0;font-family:var(--mono);font-size:var(--fs-small);line-height:var(--lh-small);overflow-wrap:anywhere}.site-footer{border-top:1px solid var(--rule)}.site-footer__contact{font-family:var(--mono);flex-wrap:wrap;gap:8px 24px;padding-top:24px;font-size:13px;line-height:24px;display:flex}.site-footer__colophon{font-family:var(--mono);font-size:var(--fs-label);color:var(--ink-3);flex-wrap:wrap;gap:4px 24px;padding-block:24px 48px;line-height:24px;display:flex}.site-footer__colophon a{color:var(--ink-2)}.note{border-left:2px solid var(--accent);font-size:var(--fs-dense);line-height:var(--lh-dense);color:var(--ink-2);padding:8px 0 8px 16px}.note .label{color:var(--accent);margin-bottom:4px;display:block}.note--lg{font-size:var(--fs-body);line-height:var(--lh-body);max-width:var(--measure);padding-block:12px}.errata{background:var(--paper-2);border-left:2px solid var(--mark);font-size:var(--fs-card);line-height:var(--lh-card);color:var(--ink-2);max-width:var(--measure);padding:16px 16px 16px 20px}.errata>.label{color:var(--mark);margin-bottom:8px;display:block}.errata p+p,.errata ul{margin-top:8px}.errata li{margin-top:6px;padding-left:18px;position:relative}.errata li:before{content:"–";content:"–" / "";color:var(--ink-3);position:absolute;left:0}.crumb{padding-top:32px}.crumb ol{font-family:var(--mono);font-size:var(--fs-label);color:var(--ink-3);flex-wrap:wrap;gap:8px;line-height:24px;display:flex}.crumb li+li:before{content:"/";content:"/" / "";color:var(--rule-strong);margin-right:8px}.crumb a{color:var(--ink-2)}.case-hero{column-gap:var(--gutter);grid-template-columns:repeat(12,minmax(0,1fr));align-items:end;row-gap:40px;padding-block:40px 0;display:grid}.case-hero__main{grid-column:1/span 8;min-width:0}.case-hero__side{grid-column:9/span 4;min-width:0}.case-kicker{flex-wrap:wrap;gap:8px 24px;display:flex}.case-kicker .label:first-child{color:var(--accent)}.case-title{font-family:var(--serif);font-size:var(--fs-title);line-height:var(--lh-title);letter-spacing:-.035em;overflow-wrap:break-word;margin-top:16px;font-weight:400}.case-title--long{font-size:var(--fs-title-long);line-height:var(--lh-title-long);letter-spacing:-.025em;text-wrap:balance}.case-standfirst{max-width:30em;font-family:var(--serif);font-size:var(--fs-standfirst);line-height:var(--lh-standfirst);color:var(--ink-2);text-wrap:pretty;margin-top:24px}.case-cta{flex-wrap:wrap;align-items:center;gap:12px 24px;margin-top:32px;display:flex}.case-cta__links{flex-wrap:wrap;gap:8px;display:flex}.case-cta .st{font-size:13px}.case-meta{column-gap:var(--gutter);border-top:2px solid var(--ink);border-bottom:1px solid var(--ink);grid-column:1/-1;grid-template-columns:repeat(6,minmax(0,1fr));row-gap:24px;padding-block:16px 24px;display:grid}.case-meta>div{min-width:0}.case-meta dd{font-size:var(--fs-dense);line-height:var(--lh-dense);color:var(--ink);overflow-wrap:break-word;margin-top:8px}.case-body{column-gap:var(--gutter);grid-template-columns:repeat(12,minmax(0,1fr));padding-block:64px 32px;display:grid}.case-toc-col{grid-column:1/span 3}.case-main{grid-column:4/-1;min-width:0}.toc{top:calc(var(--header-h) + 24px);position:sticky}.toc ol{border-left:1px solid var(--rule);margin-top:16px}.toc a{font-size:var(--fs-small);line-height:var(--lh-small);color:var(--ink-2);border-left:1px solid #0000;gap:16px;margin-left:-1px;padding:4px 0 4px 16px;text-decoration:none;display:flex}.toc a:hover{color:var(--ink);border-left-color:var(--accent)}.toc .n{font-family:var(--mono);font-size:var(--fs-label);color:var(--ink-3)}.case-sec{padding-bottom:64px}.case-sec>h2{font-family:var(--serif);font-size:var(--fs-case-h2);line-height:var(--lh-case-h2);letter-spacing:-.012em;align-items:baseline;gap:16px;font-weight:400;display:flex}.case-sec>h2 .n{font-family:var(--mono);font-size:var(--fs-small);color:var(--accent);font-weight:500}.prose>p,.prose>ul,.prose>ol{max-width:var(--measure);font-size:var(--fs-prose);line-height:var(--lh-prose);color:var(--ink-2);margin-top:16px}.prose strong{color:var(--ink);font-weight:600}.prose em{font-style:italic}.prose>ul li,.prose>ol li{margin-top:8px;padding-left:22px;position:relative}.prose>ul li:before{content:"–";content:"–" / "";color:var(--ink-3);position:absolute;left:0}.prose>ol{counter-reset:step}.prose>ol li{counter-increment:step;padding-left:32px}.prose>ol li:before{content:counter(step) ".";font-family:var(--mono);color:var(--accent);font-size:.8em;position:absolute;left:0}.prose>ul.learned li{padding-left:48px}.prose>ul.learned{counter-reset:learned}.prose>ul.learned li:before{counter-increment:learned;content:counter(learned, decimal-leading-zero);font-family:var(--mono);color:var(--accent);font-size:13px}.prose>.fig,.prose>.tbl-wrap,.prose>.metric-strip,.prose>.errata,.prose>.link-rows{margin-top:24px}.prose>.tbl-wrap{max-width:none}.prose a{text-decoration-color:var(--rule-strong)}.metric-strip{column-gap:var(--gutter);border-top:2px solid var(--ink);border-bottom:1px solid var(--rule);grid-template-columns:repeat(4,minmax(0,1fr));row-gap:16px;padding-block:16px;display:grid}.metric-strip--3{grid-template-columns:repeat(3,minmax(0,1fr))}.metric-strip--2{grid-template-columns:repeat(2,minmax(0,1fr))}.metric-strip>div{min-width:0}.metric-strip dd{margin-top:4px}.metric-strip .m-val{font-family:var(--mono);font-size:var(--fs-metric);line-height:var(--lh-metric);letter-spacing:-.02em;color:var(--ink);overflow-wrap:anywhere;font-weight:500;display:block}.metric-strip .m-val--finding{color:var(--mark)}.metric-strip .m-label{font-size:var(--fs-caption);line-height:var(--lh-caption);color:var(--ink-2);margin-top:4px;display:block}.link-rows{border-top:2px solid var(--ink);border-bottom:2px solid var(--ink);max-width:none}.link-rows li{grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:24px;padding-block:16px;display:grid}.link-rows li+li{border-top:1px solid var(--rule)}.link-rows__title{color:var(--ink);font-weight:600;font-size:var(--fs-body);line-height:var(--lh-body)}.link-rows__meta{font-family:var(--mono);font-size:var(--fs-label);line-height:var(--lh-label);color:var(--ink-3);margin-top:4px;display:block}.case-pager{column-gap:var(--gutter);border-top:1px solid var(--ink);grid-template-columns:1fr 1fr;padding-block:24px 96px;display:grid}.case-pager a{text-decoration:none;display:block}.case-pager a:focus-visible{outline-offset:-2px}.case-pager .next{text-align:right;grid-column:2}.case-pager .label{align-items:center;gap:8px;display:flex}.case-pager .next .label{justify-content:flex-end}.case-pager b{font-family:var(--serif);font-size:var(--fs-h3);line-height:var(--lh-h3);margin-top:8px;font-weight:500;display:block}.pubs>li{border-top:1px solid var(--rule);grid-template-columns:48px minmax(0,1fr);padding-block:32px;display:grid}.pubs>li:first-child{border-top:2px solid var(--ink)}.pubs>li:last-child{border-bottom:2px solid var(--ink)}.pub__idx{font-family:var(--mono);color:var(--ink-3);font-size:13px;line-height:32px}.pub__title{font-family:var(--serif);font-size:var(--fs-h3);line-height:var(--lh-h3);letter-spacing:-.01em;font-weight:500}.pub__venue{font-style:italic;font-size:var(--fs-card);line-height:var(--lh-card);color:var(--ink-2);margin-top:4px}.pub__summary{max-width:var(--measure);color:var(--ink-2);margin-top:12px}.pub__links{font-size:var(--fs-small);flex-wrap:wrap;gap:8px 24px;margin-top:12px;font-weight:500;display:flex}.prose-block>p{max-width:var(--measure);font-size:var(--fs-prose);line-height:var(--lh-prose);color:var(--ink-2);margin-top:16px}.prose-block>p:first-child{margin-top:0}.notfound{padding-block:64px 96px}.notfound__links{flex-wrap:wrap;gap:8px;margin-top:32px;display:flex}@media (width<=1023px){.hero{padding-block:48px 64px}.hero__main,.hero__aside{grid-column:1/-1}.card{grid-column:span 6}.card--feature,.tl__head>*,.tl__role>.tl__body,.tl__when{grid-column:1/-1}.tl__role{row-gap:4px}.tl__earlier .tl__when,.tl__earlier .tl__body,.split>*,.contact__text,.contact__list,.case-hero__main,.case-hero__side{grid-column:1/-1}.case-meta{grid-template-columns:repeat(3,minmax(0,1fr))}.case-toc-col,.case-main{grid-column:1/-1}.toc{margin-bottom:48px;position:static}.metric-strip,.metric-strip--3{grid-template-columns:repeat(2,minmax(0,1fr))}.sec-title,.sec-intro{grid-column:1/-1}.sec-aside{text-align:left;grid-column:1/-1;justify-self:start;padding-top:16px}}@media (width>=640px) and (width<=1023px){.keyfig ol{column-gap:var(--gutter);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.keyfig li{border-top:1px solid var(--rule)}.keyfig li:nth-child(-n+2){border-top:0}}@media (width<=1023px) and (width>=640px){.skills{grid-template-columns:1fr}}@media (width<=639px){.site-header__inner{column-gap:16px;min-height:48px}.wordmark{padding-block:12px}.site-nav{border-top:1px solid var(--rule);order:3;width:100%}.site-nav ul{flex-wrap:wrap;gap:20px}.site-nav a{padding-block:8px}.site-nav__cv{display:block}.header-cv{display:none}.hero{padding-block:24px 48px}.hero__claim{margin-top:12px}.hero__affil{margin-top:16px}.facts>div{grid-template-columns:1fr;row-gap:4px}.facts dt{padding-top:0}.hero__cta{grid-template-columns:repeat(3,minmax(0,1fr));margin-top:24px;display:grid}.hero__cta .btn{padding-inline:8px}.hero__cta .btn--primary{grid-column:1/-1;height:48px}.skills{grid-template-columns:1fr}.sec-head{margin-bottom:32px}.sec-title{margin-top:16px}.work-grid{row-gap:48px}.card,.card--feature{grid-column:1/-1}.fig__canvas{padding:16px 12px}.tbl--keyed th:first-child,.tbl--keyed td:first-child{width:96px}.contact__list>div{grid-template-columns:minmax(0,1fr);row-gap:4px}.contact__list dt{padding-top:0}.case-title{letter-spacing:-.03em}.case-hero{padding-top:24px}.case-meta{grid-template-columns:repeat(2,minmax(0,1fr))}.case-body{padding-top:48px}.case-sec{padding-bottom:48px}.prose>ul.learned li{padding-left:40px}.link-rows li{grid-template-columns:1fr;row-gap:12px}.case-pager{grid-template-columns:1fr;row-gap:24px}.case-pager .next{text-align:left;grid-column:1}.case-pager .next .label{justify-content:flex-start}.pubs>li{grid-template-columns:32px minmax(0,1fr)}}@media (width<=359px){.email-long{display:none}.email-short{display:inline}}.email-short{display:none}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media (forced-colors:active){.fig__canvas{background:canvas;border:1px solid canvastext}.dg .n,.dg .b,.dg .e,.dg .e--key,.dg .e--dim{stroke:canvastext}.dg .n,.dg .n--plate,.dg .n--finding{fill:canvas}.dg text,.dg .ah{fill:canvastext}.st:before,a.is-public:before,.role:before,.icon,.wordmark:before,.tl__current:before{forced-color-adjust:none;background-color:canvastext}.st--private:before,.st--competition:before{background-color:canvas;border:1.5px solid canvastext}.btn,.chip,.theme-toggle{border:1px solid buttontext}}@media print{:root,:root[data-theme],:root:not([data-theme=light]){color-scheme:light;--paper:#fff;--paper-2:#f2efe7;--surface:#fff;--ink:#1b1a17;--ink-2:#47443d;--ink-3:#68645b;--rule:#e3ded3;--rule-strong:#8f897d;--accent:#1e4a7a;--accent-soft:#e7edf5;--mark:#a3382a;--public:#2b6747;--plate:#fff}@page{size:A4;margin:16mm 14mm}body{font-size:10.5pt;line-height:14pt}.site-header,.skip,.theme-toggle,.filter,.filter__bar,.case-pager,.toc,.lens-bar{display:none!important}.fig__canvas{background-image:none}.section{padding-bottom:24px}a[href^=http]:after{content:" (" attr(href) ")";color:var(--ink-3);font-size:.85em}.tl__org,tr,.card{break-inside:avoid}}
