@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-cyrillic-ext-wght-normal.DjL33-gN.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-cyrillic-wght-normal.BEAKL7Jp.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-vietnamese-wght-normal.6IgcOCM7.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-latin-ext-wght-normal.DC-KSUi6.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-latin-wght-normal.BgDaEnEv.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{color-scheme:dark;--bg: #08090b;--text: #efefec;--muted: #a2a6af;--accent: #83e8de;--line: rgb(255 255 255 / 12%);font-family:Geist Variable,system-ui,sans-serif;background:var(--bg);color:var(--text);scroll-behavior:smooth;scroll-padding-top:var(--site-banner-height, 0px)}*{box-sizing:border-box}body{margin:0}body:before{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;background:url(/grain.png) repeat;background-size:256px;image-rendering:pixelated}@media(min-resolution:1.25dppx){body:before{background-size:204.8px}}@media(min-resolution:1.5dppx){body:before{background-size:170.667px}}@media(min-resolution:2dppx){body:before{background-size:128px}}@media(min-resolution:3dppx){body:before{background-size:85.333px}}a{color:inherit;text-decoration:none}button{font:inherit}button,a{-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:7px}::selection{background:#7adfd3;color:#08090b}.frame{width:calc(100% - 112px);max-width:1440px;margin-inline:auto}.mono{font-family:ui-monospace,Cascadia Code,SFMono-Regular,Consolas,monospace;font-size:10px;letter-spacing:.11em}.skip-link{position:fixed;top:12px;left:12px;z-index:10;padding:14px;background:var(--text);color:var(--bg);transform:translateY(-160%)}.skip-link:focus{transform:none}.landing{position:relative;margin-top:calc(-1 * var(--site-banner-height, 0px));padding-top:var(--site-banner-height, 0px);min-height:max(800px,100svh);overflow:hidden;isolation:isolate;display:flex;flex-direction:column}.sky{position:absolute;inset:0;z-index:-2}canvas{display:block;width:100%;height:100%;image-rendering:pixelated}.header{display:flex;align-items:center;justify-content:space-between;padding-block:32px;gap:24px}.site-banner{position:sticky;top:0;z-index:5}#main.dither-dissolve{--dither-band: 96px;mask-image:url(/dither-dissolve.svg),linear-gradient(to bottom,rgb(0 0 0 / var(--dither-clear, 1)) calc(var(--dither-y, 0px) + var(--dither-band)),#000 0);mask-size:8px var(--dither-band),100% 100%;mask-position:0 var(--dither-y, 0px),0 0;mask-repeat:repeat-x,no-repeat;mask-composite:add}@media(max-width:700px){#main.dither-dissolve{--dither-band: 64px}}@media(prefers-reduced-transparency:reduce){#main.dither-dissolve{mask-image:none}body:has(#main.dither-dissolve) .site-banner{background:var(--bg)}}.site-header{--brand-font-size: 28px;flex-wrap:wrap}.header-identity{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px}.header-brand{display:inline-flex;align-items:center;gap:14px}.header-name,.header-affiliation{color:#c3c8d0}.header-name{white-space:nowrap;border-left:1px solid #65717c;padding-left:14px;font-family:"Redaction 50",serif;font-style:normal;font-weight:400;font-size:18px;line-height:1.2;letter-spacing:0}.header-affiliation{display:inline-flex;align-items:baseline;gap:8px;max-width:100%}.wordmark{display:inline-flex;align-items:center;gap:9px;font-family:Manufacturing Consent,serif;font-weight:400;font-size:var(--brand-font-size);line-height:1;letter-spacing:0}.wordmark svg{flex:none;width:26px;height:26px;color:var(--accent);margin-right:-3px}.wordmark-dot{color:var(--accent);margin-left:-7px}.nav-link{color:#c3c8d0;transition:color .2s}.navigation{display:flex;align-items:center;gap:20px}.navigation .nav-link{display:inline-flex;align-items:center;min-height:44px}.nav-link:hover{color:var(--accent)}.nav-link span{margin-left:18px}.header-links{display:flex;align-items:center;flex-shrink:0;gap:14px;margin-left:auto}.social-links{display:flex;align-items:center;gap:4px}.header-links:has(.navigation) .social-links{border-left:1px solid var(--line);padding-left:10px;gap:0}.social-link{display:inline-flex;width:44px;height:44px;align-items:center;justify-content:center;color:#c3c8d0;border-radius:6px}.social-link:hover{color:var(--accent);background:#ffffff0a}.social-link svg{width:18px;height:18px;flex-shrink:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.blog-main{max-width:1000px;min-height:65svh;padding-block:70px 100px}.blog-heading{margin-bottom:50px}.blog-heading .eyebrow{margin-bottom:20px}.post-list{list-style:none;padding:0;margin:0 0 20px}.post-row{display:grid;grid-template-columns:1fr auto;gap:24px;padding-block:26px;border-bottom:1px solid var(--line)}.post-row h3{font-size:21px;color:var(--text)}.post-row:hover h3{color:var(--accent)}.post-row p,.empty-posts{font-size:15px;line-height:1.8;color:var(--muted)}.post-row p{margin:9px 0 0}.post-row time{margin-top:5px}.post-heading{margin-bottom:45px}.post-heading h1{font-size:clamp(32px,4.5vw,58px);line-height:1.15;margin-top:25px;overflow-wrap:anywhere}.post-description{font-size:18px;line-height:1.7;color:#bdc3cd;max-width:750px}.post-meta{color:var(--muted);line-height:1.8}.post-meta span{margin-inline:8px}.prose{max-width:750px;font-size:16px;line-height:1.8;color:#bdc3cd;overflow-wrap:anywhere}.prose h2{font-size:30px;margin:44px 0 20px}.prose h3{font-size:22px;margin:32px 0 15px}.prose h2,.prose h3,.prose strong{color:var(--text)}.prose a{color:var(--accent);text-decoration:underline;text-underline-offset:3px}.prose pre{overflow-x:auto;padding:20px;background:#101215;border:1px solid var(--line);border-radius:6px;font-size:13px;line-height:1.7}.prose code{font-family:ui-monospace,Consolas,monospace}.prose img{max-width:100%;height:auto}.prose blockquote{margin-inline:0;padding-left:20px;border-left:2px solid var(--accent)}.prose table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse}.prose th,.prose td{border:1px solid var(--line);padding:8px 12px}.hero{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;padding-block:80px 100px}.eyebrow{display:flex;gap:12px;align-items:center;color:#bcc5d0;margin:0 0 35px;font-size:9px}.signal-chain{display:flex;align-items:center;list-style:none;margin:0;padding:0;flex-wrap:wrap;gap:8px 12px;font-size:9px}.signal-chain li{display:inline-flex;align-items:center;gap:8px;white-space:nowrap}.signal-chain .chain-arrow{color:var(--muted)}h1{font-size:clamp(40px,4.5vw,72px);line-height:1.05;font-weight:450;letter-spacing:-.06em;margin:0}.hero-title{max-width:min(100%,19ch);font-family:"Redaction 50",serif;font-size:clamp(56px,6.8vw,104px);font-weight:400;letter-spacing:-.035em;line-height:1.1}.landing:has(#motion-toggle:not([hidden])[aria-pressed=false]) .hero-period{animation:hero-period-blink 1.4s step-end infinite}@keyframes hero-period-blink{50%{opacity:0}}.hero-description{max-width:560px;color:#c2c7cf;font-size:17px;line-height:1.7;margin:24px 0 0}.hero-actions{display:flex;flex-wrap:wrap;align-items:center;gap:16px 30px;margin-top:26px}.hero-link{--hero-arrow-y: 0px;position:relative;display:inline-flex;align-items:center;gap:24px;padding-block:10px;border-bottom:1px solid #667481;color:var(--text);font-size:12px;transition:color .2s}.hero-link[href^="#"]{--hero-arrow-y: 3px}.hero-link:after{content:"";position:absolute;inset-inline:0;bottom:-1px;height:1px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .2s}.hero-link span{color:var(--accent);font-size:18px;transition:transform .2s}.hero-link-primary{gap:28px;padding:13px 20px;border-bottom:0;background:var(--text);color:var(--bg);font-size:15px;font-weight:550;transition:none}.hero-link-primary:after{display:none}.hero-link-primary span{color:var(--bg)}.hero-link-primary:hover,.hero-link-primary:focus-visible{background:var(--accent);color:var(--bg)}.hero-link:hover,.hero-link:focus-visible{color:var(--accent)}.hero-link:hover:after,.hero-link:focus-visible:after{transform:scaleX(1)}.hero-link:hover span,.hero-link:focus-visible span{transform:translate(3px,var(--hero-arrow-y))}.landing-footer{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:20px 24px;padding-block:25px;color:#a2a8b3;font-size:9px}.landing-signals{display:grid;gap:16px}#motion-toggle{display:inline-flex;align-items:center;gap:10px;margin-left:auto;border:1px solid var(--line);background:#08090b99;color:#c9cbd0;border-radius:30px;padding:11px 15px;cursor:pointer;font-size:10px;letter-spacing:.02em}#motion-toggle[hidden]{display:none}#motion-toggle:hover{border-color:#83e8de80}.motion-icon{color:var(--accent)}.content-section{display:grid;grid-template-columns:1fr 2fr;gap:64px;padding-block:90px;border-top:1px solid var(--line);scroll-margin-top:24px}.section-label{color:var(--accent);padding-top:14px}.index{color:#929aa8;margin-right:20px}h2{font-family:"Redaction 50",serif;font-size:clamp(36px,4.2vw,64px);letter-spacing:-.035em;line-height:1.12;font-weight:400;margin:0 0 30px}.section-content>p{max-width:650px;font-size:16px;line-height:1.8;color:#b6bbc4;margin-block:0 18px}.about-block+.about-block{margin-top:30px}.about-block p{max-width:650px;font-size:16px;line-height:1.8;color:#b6bbc4;margin:12px 0 0}.text-link{display:inline-flex;align-items:center;gap:18px;color:var(--accent);padding-block:10px;font-size:12px}.about-block+.text-link{margin-top:26px}.text-link:hover,.contact-links a:hover,.cv a:hover{text-decoration:underline;text-underline-offset:4px}.project-entry{padding-block:27px;border-bottom:1px solid var(--line)}.project-entry:last-child{border-bottom:0}.entry-heading{display:flex;justify-content:space-between;align-items:baseline;gap:18px}h3{margin:0;font-size:20px;line-height:1.4;letter-spacing:-.025em;font-weight:500}.period{color:var(--muted);margin:0 0 12px;line-height:1.6;white-space:nowrap;font-size:10px}.entry-heading .period{margin:0}.entry-subtitle{color:#bdc3cd;font-size:13px;line-height:1.7;margin:7px 0 12px}.entry-institution{display:block}.project-entry>p:not(.period):not(.entry-subtitle){color:#aeb5c0;font-size:15px;line-height:1.8}.skills-list{margin:0}.skills-list>div{display:grid;grid-template-columns:155px 1fr;gap:25px;border-bottom:1px solid var(--line);padding-block:17px;font-size:14px;line-height:1.8}.skills-list>div:last-child{border-bottom:0}.skills-list dt{color:#e1e4e9}.skills-list dd{margin:0;color:#aeb5c0}.contact-links{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.contact-links .social-links{display:contents}.cv{max-width:1000px;padding-block:50px 100px}.cv-heading{padding-bottom:35px;border-bottom:1px solid var(--line)}.cv-heading h1{font-family:"Redaction 50",serif;font-size:clamp(38px,5vw,64px);font-weight:400;letter-spacing:-.035em;line-height:1.15}.cv-role{color:var(--accent);font-size:18px;margin-bottom:8px}.cv-location{color:var(--muted);margin-block:0 20px;font-size:14px}.cv-contact{display:flex;flex-wrap:wrap;gap:10px 25px;font-size:12px;color:#bdc3cd;overflow-wrap:anywhere}.cv-section{margin-top:45px}.cv-section h2{font-size:28px;margin-bottom:24px}.cv-section h3{font-size:17px}.cv-section p,.cv-section li{color:#b6bbc4;font-size:14px;line-height:1.8}.cv-section .period{font-size:10px}.cv-entry{margin-top:26px}.cv-entry ul{padding-left:20px}.cv-entry li{padding-left:4px;margin-bottom:6px}.project-link{font-size:12px;color:var(--accent);overflow-wrap:anywhere}.print-button{background:transparent;border:1px solid var(--line);color:var(--text);padding:12px 15px;border-radius:6px;cursor:pointer}.print-button:hover{border-color:var(--accent)}.print-button[hidden]{display:none}.site-footer{display:flex;justify-content:space-between;gap:20px;border-top:1px solid var(--line);padding-block:28px;color:#979eaa;font-size:9px}@media(min-width:1700px){.frame{width:calc(100% - 160px)}}@media(max-width:700px){.frame{width:calc(100% - 44px)}.landing{min-height:max(740px,100svh)}.header{padding-block:26px}.nav-link,.header-affiliation{font-size:9px;letter-spacing:.04em}.nav-link span{margin-left:6px}.hero{padding-block:60px 70px}.eyebrow{font-size:8px;letter-spacing:.07em;gap:8px;margin-bottom:32px}h1{font-size:clamp(35px,8vw,52px)}.hero-title{font-size:clamp(40px,9.5vw,56px)}.navigation{gap:12px}.site-header{--brand-font-size: 24px;row-gap:16px}.header-name{font-size:14px}.wordmark svg{width:24px;height:24px}.header-identity{width:100%}.header-links{width:100%;justify-content:flex-start;gap:10px;margin-left:0}.blog-main{padding-block:40px 70px}.post-row{grid-template-columns:1fr;gap:12px}.post-heading h1{font-size:34px}.hero-description{max-width:340px;font-size:15px}.hero-actions{gap:24px}.landing-footer{font-size:8px}#motion-toggle{font-size:9px;padding:10px 12px}.content-section{grid-template-columns:1fr;gap:28px;padding-block:55px}.entry-heading{flex-direction:column;align-items:flex-start;gap:6px}.skills-list>div{grid-template-columns:1fr;gap:4px}.cv{padding-top:30px}.cv-contact{flex-direction:column}.cv-section h2{font-size:24px}.cv-toolbar{gap:12px}.print-button{font-size:9px;letter-spacing:.02em}.site-footer{font-size:8px}}@media(prefers-reduced-motion:reduce){:root{scroll-behavior:auto}*{transition:none!important}}@media print{@page{size:A4;margin:14mm}:root{color-scheme:light;background:#fff;color:#000}:root{--site-banner-height: 0px !important}.site-banner{position:static;background:transparent;backdrop-filter:none}#main.dither-dissolve{mask-image:none}.hero-period{animation:none!important;opacity:1}body:before{display:none}.cv-toolbar,.cv-footer,.skip-link{display:none}.cv{width:100%;max-width:none;padding:0}.cv-heading{padding-bottom:12pt;border-color:#bbb}.cv-heading h1,.cv-section h2{font-family:Geist Variable,system-ui,sans-serif;font-weight:450}.cv-heading .eyebrow{margin-bottom:8pt;color:#333;font-size:8pt}.cv-heading h1{font-size:24pt;letter-spacing:-.035em}.cv-role{font-size:12pt;color:#000;margin-block:6pt}.cv-location{font-size:9pt;color:#333;margin-bottom:8pt}.cv-contact{flex-direction:row;font-size:8pt;gap:4pt 14pt;color:#333}.cv-section{margin-top:16pt}.cv-section h2{font-size:13pt;margin-bottom:8pt;break-after:avoid}.cv-section h3{font-size:10pt}.cv-section p,.cv-section li,.cv .skills-list>div{font-size:9pt;line-height:1.45;color:#222}.cv .entry-heading{flex-direction:row;gap:12pt}.cv-section .period{font-size:8pt;color:#333}.cv-entry{margin-top:10pt;break-inside:avoid}.cv-entry ul{margin-block:5pt;padding-left:13pt}.cv-entry li{margin-bottom:3pt}.cv-entry .entry-subtitle{margin-block:3pt}.cv .skills-list>div{grid-template-columns:110pt 1fr;gap:12pt;padding-block:4pt;border-color:#ddd;break-inside:avoid}.cv .skills-list dt,.cv .skills-list dd{color:#222}.cv .project-link{color:#222;font-size:8pt}.cv a{color:inherit}}@font-face{font-family:"Redaction 50";font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/redaction-50-latin-400-normal.DkNaVhPh.woff2) format("woff2"),url(/_astro/redaction-50-latin-400-normal.DXnNyOhp.woff) format("woff")}
