@font-face{font-family:Instrument Serif;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/instrument-serif-latin-400-normal.DnYpCC2O.woff2)format("woff2"),url(/_astro/instrument-serif-latin-400-normal.BVbkICAY.woff)format("woff")}@font-face{font-family:Instrument Serif;font-style:italic;font-display:swap;font-weight:400;src:url(/_astro/instrument-serif-latin-400-italic.DKMiL14s.woff2)format("woff2"),url(/_astro/instrument-serif-latin-400-italic.u__WvvIK.woff)format("woff")}@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+460-52F,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+301,U+400-45F,U+490-491,U+4B0-4B1,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+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: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+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: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+??,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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-cyrillic-ext-wght-normal.X_5orZeX.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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-cyrillic-wght-normal.DiZS0aHC.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-symbols2-wght-normal.CO5SzqOn.woff2)format("woff2-variations");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-vietnamese-wght-normal.DadHysG0.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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-latin-ext-wght-normal.Bwz-egvJ.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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-mono-latin-wght-normal.XN7g48iV.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;--paper:#f6f4ef;--paper-2:#efece5;--ink:#1c1b18;--ink-muted:#6a665e;--rule:#dedad1;--accent:#b4471d;--accent-ink:#8f3614;--lab:#1c1b18;--lab-ink:#ece8df;--lab-muted:#bdb7ac;--lab-rule:#34312b;--lab-accent:#e0703f;--serif:"Instrument Serif", "Instrument Fallback", Georgia, serif;--sans:"Geist Variable", "Geist Fallback", system-ui, sans-serif;--mono:"Geist Mono Variable", ui-monospace, monospace;--gutter:clamp(1.25rem, 5vw, 3rem);--section-space:clamp(5rem, 10vw, 8rem)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--paper:#151412;--paper-2:#1c1b18;--ink:#ece8df;--ink-muted:#9c978c;--rule:#2e2c28;--accent:#e0703f;--accent-ink:#e88a5e}}:root[data-theme=dark]{color-scheme:dark;--paper:#151412;--paper-2:#1c1b18;--ink:#ece8df;--ink-muted:#9c978c;--rule:#2e2c28;--accent:#e0703f;--accent-ink:#e88a5e}@font-face{font-family:Instrument Fallback;src:local(Georgia);size-adjust:79%;ascent-override:100%;descent-override:25%;line-gap-override:0%}@font-face{font-family:Geist Fallback;src:local(Segoe UI);size-adjust:101%;ascent-override:95%;descent-override:24%;line-gap-override:0%}*{box-sizing:border-box}html{scroll-padding-top:2rem}body{background:var(--paper);color:var(--ink);font:400 1.0625rem/1.65 var(--sans);-webkit-font-smoothing:antialiased;margin:0}::selection{color:var(--paper);background:var(--accent-ink)}a{color:inherit;text-underline-offset:.2em;text-decoration-thickness:1px;transition:color .15s}a:hover{color:var(--accent-ink)}button{color:inherit;font:inherit;cursor:pointer}a,button{touch-action:manipulation;-webkit-tap-highlight-color:color-mix(in srgb, var(--accent) 15%, transparent)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}h1,h2,h3,p,figure,dl,dd{margin:0}h1,h2,h3{font-family:var(--serif);text-wrap:balance;font-weight:400}h1{letter-spacing:-.02em;font-size:clamp(3rem,7vw,5.75rem);line-height:1}h2{font-size:clamp(2rem,3.6vw,2.75rem);line-height:1.1}h3{font-size:clamp(1.5rem,2.4vw,1.875rem);line-height:1.2}p{text-wrap:pretty;max-width:64ch}img,svg{max-width:100%}[hidden]{display:none!important}.wrap{width:min(1120px, calc(100% - 2 * var(--gutter)));margin-inline:auto}.mono{font:400 .8125rem/1.65 var(--mono);letter-spacing:.01em;color:var(--ink-muted)}.sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip{z-index:3;background:var(--paper);padding:.5rem 1rem;position:fixed;top:1rem;left:1rem;transform:translateY(-200%)}.skip:focus{transform:translateY(0)}.site-header{border-bottom:1px solid var(--ink-muted);justify-content:space-between;align-items:center;gap:2rem;min-height:90px;display:flex}.brand{white-space:nowrap;font-size:.875rem;text-decoration:none}.navigation{align-items:center;gap:2rem;font-size:.875rem;display:flex}.anchors,.language{align-items:center;gap:1.75rem;display:flex}.anchors a,.language a{padding-block:.75rem;text-decoration:none}.anchors a:hover,.anchors a[aria-current]{text-decoration:underline}.anchors a[aria-current]{text-underline-offset:.5em}.language{font-family:var(--mono);gap:.6rem;margin-left:1rem;font-size:.8125rem}.language a{color:var(--ink-muted)}.language a[aria-current]{color:var(--ink);text-underline-offset:.5em;text-decoration:underline}.hero{grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);align-items:center;gap:clamp(2rem,4vw,4rem);padding-block:3rem;display:grid}.hero h1 span{display:block}.hero h1 em{font-style:normal;font-weight:400;display:block}.hero-copy>p{margin-top:1.65rem}.hero-copy .headline{letter-spacing:-.01em;text-wrap:balance;max-width:30ch;margin-top:1.6rem;font-size:clamp(1.25rem,1.9vw,1.5rem);line-height:1.35}.hero-copy .intro{max-width:45ch;color:var(--ink-muted);margin-top:.9rem}.hero-copy .hero-meta{max-width:48ch;margin-top:1.5rem}.hero-links{flex-wrap:wrap;align-items:center;gap:1.5rem;margin-top:1.8rem;font-size:.875rem;display:flex}.cv-link{border:1px solid var(--ink);border-radius:4px;padding:.6rem 1rem;text-decoration:none;transition:color .15s,background-color .15s}.cv-link:hover{background:var(--ink);color:var(--paper)}.section{border-top:1px solid var(--rule);padding-block:var(--section-space)}#about{padding-top:5rem}.section-heading{grid-template-columns:1fr 1.7fr;align-items:start;gap:3rem;margin-bottom:3.5rem;display:grid}.section-title{padding-left:0}.section-heading p{max-width:52ch}.about-layout{grid-template-columns:1fr 1.7fr;align-items:start;gap:3rem;display:grid}.prose p+p{margin-top:1.25rem}.prose p:last-child:not(:first-child){color:var(--ink-muted)}.about-method{border-top:1px solid var(--rule);margin-top:2.5rem;padding-top:2rem}.about-method h3{margin-bottom:.75rem}.section-note{margin:1.5rem 0 0 1.4rem}.entry{border-bottom:1px solid var(--rule);grid-template-columns:180px minmax(0,1fr);gap:2.75rem;padding-block:3rem;display:grid}.entry:first-child{padding-top:0}.entry:last-child{border-bottom:0;padding-bottom:0}.entry-meta{flex-direction:column;gap:.25rem;display:flex}.status{align-items:center;gap:.5rem;display:inline-flex}.status:before{content:"";background:var(--ink-muted);border-radius:50%;flex:0 0 6px;width:6px;height:6px}.status.running:before{background:var(--accent)}.entry-content{min-width:0}.entry-content h3{margin-bottom:1rem}.entry-content>p{max-width:64ch}.entry-content .tech{margin-top:1.5rem}.project-links{flex-wrap:wrap;gap:0 1.75rem;margin-top:.5rem;font-size:.875rem;display:flex}.project-links a{padding-block:.6rem;display:inline-block}.project-facts{margin-top:1.75rem}.project-facts>div{border-top:1px solid var(--rule);grid-template-columns:11rem minmax(0,1fr);gap:1.5rem;padding-block:.85rem;display:grid}.project-facts dt{padding-top:.15rem}.project-facts ul{margin:0;padding-left:1.1rem}.project-facts li+li{margin-top:.35rem}.flow{margin-top:1.75rem}.flow figcaption{margin-bottom:.6rem}.flow-row+.flow-row{margin-top:.75rem}.flow-row.labelled{grid-template-columns:5.5rem minmax(0,1fr);align-items:start;gap:1rem;display:grid}.flow-label{padding-top:.4rem}.flow-nodes{font:400 .8125rem/1.3 var(--mono);flex-wrap:wrap;align-items:center;row-gap:.5rem;margin:0;padding:0;list-style:none;display:flex}.flow-nodes li{align-items:center;display:flex}.flow-nodes li+li:before{content:"→";content:"→" / "";color:var(--accent-ink);padding-inline:.5rem}.flow-nodes span{border:1px solid var(--rule);background:var(--paper-2);color:var(--ink);padding:.4rem .6rem}.datasheet{background:var(--paper-2);grid-template-columns:minmax(180px,max-content) minmax(0,1fr);gap:1.5rem;margin-top:1.75rem;padding:1.5rem;display:grid}.datasheet.plain{grid-template-columns:minmax(0,1fr)}.measurement{flex-direction:column;justify-content:center;gap:.5rem;display:flex}.measurement strong{font:400 clamp(2.75rem, 4vw, 3.5rem)/1 var(--serif);color:var(--accent-ink);white-space:nowrap}.measurement span{max-width:22ch}table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%}th,td{text-align:left;vertical-align:top;border-bottom:1px solid var(--rule);overflow-wrap:anywhere;padding:.55rem 0}th{width:42%;padding-right:1rem;font-weight:400}td{color:var(--ink)}tr:last-child>*{border-bottom:0}.skill-list>div{border-bottom:1px solid var(--rule);grid-template-columns:180px minmax(0,1fr);gap:2.75rem;padding-block:1.5rem;display:grid}.skill-list>div:first-child{padding-top:0}.skill-list>div:last-child{border:0;padding-bottom:0}.skill-list dd{max-width:64ch}.contact-links{flex-wrap:wrap;gap:1rem 2rem;margin-top:1.75rem;display:flex}.site-footer{border-top:1px solid var(--rule);flex-wrap:wrap;justify-content:space-between;gap:1rem 2rem;padding-block:2rem 2.5rem;display:flex}.footer-links{flex-wrap:wrap;gap:1.5rem;display:flex}.legal-page{max-width:740px;padding-block:4.5rem 6rem}.legal-page h1{overflow-wrap:anywhere;margin:1.5rem 0 3rem;font-size:clamp(2.5rem,6vw,4rem)}.legal-prose h2{margin:2.5rem 0 1rem;font-size:1.75rem}.legal-prose p{margin-block:1rem}.legal-prose a{overflow-wrap:anywhere}.page{padding-block:clamp(3.5rem, 7vw, 5rem) var(--section-space)}.page-title{font-size:clamp(2.5rem,5vw,3.5rem);line-height:1.05}.note-entry-title{margin-bottom:1rem;font-size:clamp(1.5rem,2.4vw,1.875rem);line-height:1.2}.note-entry-title a{text-decoration:none}.note-entry-title a:hover{text-decoration:underline}.notes-empty{border-top:1px solid var(--rule);max-width:none;padding-top:1.5rem}.disclosure{border-top:1px solid var(--rule);max-width:72ch;margin-top:clamp(3rem,6vw,4.5rem);padding-top:1.25rem}.note{max-width:760px;padding-block:3rem var(--section-space)}.note-back{padding-block:.6rem;text-decoration:none;display:inline-block}.note-back:hover{text-decoration:underline}.note-header{border-bottom:1px solid var(--rule);margin-top:1.5rem;padding-bottom:2rem}.note-header h1{overflow-wrap:anywhere;font-size:clamp(2.25rem,5vw,3.25rem);line-height:1.08}.note-summary{margin-top:1.25rem;font-size:1.1875rem;line-height:1.6}.note-meta{flex-wrap:wrap;gap:.25rem 2rem;margin-top:1.5rem;display:flex}.note-meta div{gap:.5rem;display:flex}.note-meta dd{color:var(--ink)}.note-toc{border-block:1px solid var(--rule);margin-top:2.5rem;padding-block:1.25rem}.note-toc ol{columns:2 15rem;column-gap:2.5rem;margin:.5rem 0 0;padding-left:1.5rem;font-size:.9375rem}.note-toc li{break-inside:avoid;padding-block:.2rem}.note-toc li::marker{color:var(--ink-muted);font-family:var(--mono);font-size:.8125rem}.note-toc a{text-decoration-color:var(--rule)}.note-toc a:hover{text-decoration-color:currentColor}.note-prose{margin-top:2.5rem}.note-prose>:first-child{margin-top:0}.note-prose h2{border-top:1px solid var(--rule);margin:4rem 0 1.25rem;padding-top:1.75rem;font-size:clamp(1.75rem,3vw,2.25rem)}.note-prose>h2:first-child{border-top:0;padding-top:0}.note-prose h3{margin:2.75rem 0 .75rem;font-size:clamp(1.3rem,2.2vw,1.5rem);line-height:1.25}.note-prose :is(p,ul,ol,pre,blockquote,table,figure){margin-block:1rem}.note-prose ul{padding-left:1.25rem}.note-prose li+li{margin-top:.5rem}.note-prose img{height:auto}.note-prose code{font:.875em/1.6 var(--mono);background:var(--paper-2);overflow-wrap:anywhere;padding:.1em .3em}.note-prose pre{background:var(--paper-2);padding:1rem 1.25rem;overflow-x:auto}.note-prose pre code{overflow-wrap:normal;background:0 0;padding:0;font-size:.8125rem;line-height:1.5}.note-prose blockquote{border-left:2px solid var(--accent);margin:1.5rem 0;padding-left:1.25rem}.note-prose blockquote p{max-width:none}.note-prose table{width:max-content;max-width:100%;font:400 .8125rem/1.5 var(--mono);margin-block:1.5rem;display:block;overflow-x:auto}.note-prose :is(th,td){overflow-wrap:normal;width:auto;padding:.55rem 1.5rem .55rem 0}.note-prose thead tr>*{color:var(--ink-muted);vertical-align:bottom;border-bottom:1px solid var(--ink-muted)}.note-prose td strong{font-weight:600}.astro-code,.astro-code span{color:var(--shiki-light)}:root[data-theme=dark] :is(.astro-code,.astro-code span){color:var(--shiki-dark)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) :is(.astro-code,.astro-code span){color:var(--shiki-dark)}}.reveal-ready{opacity:0;transform:translateY(12px)}.reveal-ready:focus-within{opacity:1;transform:none}.reveal-ready.is-visible{opacity:1;transition:opacity .5s cubic-bezier(.16,1,.3,1),transform .5s cubic-bezier(.16,1,.3,1);transform:translateY(0)}@media (width<=899px){.site-header{flex-wrap:wrap;gap:.25rem;padding-top:.75rem}.navigation{display:contents}.language{order:1;margin:0 0 0 auto}.anchors{flex-wrap:wrap;order:2;justify-content:space-between;gap:0 .75rem;width:100%}.hero{grid-template-columns:1fr;gap:2.5rem;padding-block:3rem 4rem}.hero-copy{max-width:620px}.hero h1{font-size:clamp(3rem,8.5vw,4.5rem)}.hero-figure{width:100%;max-width:620px}.section-heading,.about-layout{grid-template-columns:1fr;gap:2rem}.section-heading{margin-bottom:2.5rem}.entry{grid-template-columns:1fr;gap:1rem;padding-block:2.5rem}.entry-meta{flex-flow:wrap;gap:.35rem 1rem}.skill-list>div{grid-template-columns:1fr;gap:.5rem}.datasheet{grid-template-columns:1fr;gap:1.25rem;padding:1.25rem}.measurement{border-bottom:1px solid var(--rule);padding-bottom:.75rem}.measurement span{max-width:none}.project-facts>div{grid-template-columns:1fr;gap:.25rem}}@media (width<=599px){.flow-row.labelled{grid-template-columns:1fr;gap:.35rem}.flow-label{padding-top:0}.flow-nodes{flex-direction:column;align-items:flex-start;row-gap:0}.flow-nodes li{flex-direction:column;align-items:flex-start}.flow-nodes li+li:before{content:"↓";content:"↓" / "";padding:.15rem 0 .15rem .75rem}}@media (width<=420px){.hero-links{gap:1rem}.cv-link{padding:.55rem .7rem}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition:none!important;animation:none!important}.reveal-ready{opacity:1;transform:none}}[data-design=experiment] .hero h1 em{color:var(--accent-ink);font-style:italic}[data-design=experiment] .section-title{border-left:2px solid var(--accent);padding-left:1.25rem}[data-design=experiment] .lab{--lab:#1c1b18;--lab-ink:#ece8df;--lab-muted:#bdb7ac;--lab-rule:#34312b;--lab-accent:#e0703f}[data-design=classic] .hero h1 em{color:var(--ink);font-style:normal}[data-design=classic] .section-title{border-left:0;padding-left:0}[data-design=classic] .section-heading,[data-design=classic] .about-layout{grid-template-columns:180px minmax(0,1fr);gap:2.75rem}[data-design=classic] .datasheet{background:0 0;padding:0;display:block}[data-design=classic] .measurement{display:none}[data-design=classic] .lab{--lab:var(--paper-2);--lab-ink:var(--ink);--lab-muted:var(--ink-muted);--lab-rule:var(--rule);--lab-accent:var(--accent)}[data-design=classic] .lab-grid{opacity:0}@media (width<=899px){[data-design=classic] .section-heading,[data-design=classic] .about-layout{grid-template-columns:1fr}}.theme-switch[data-astro-cid-hds7qqbe]{border:1px solid var(--rule);background:0 0;border-radius:4px;min-width:4.5rem;min-height:44px;padding:.5rem .6rem;font-size:.8125rem}.theme-switch[data-astro-cid-hds7qqbe]:hover{color:var(--accent-ink);border-color:var(--accent-ink)}@media (width<=899px){.theme-switch[data-astro-cid-hds7qqbe]{order:1;margin:.25rem 0 .25rem .75rem}}
