@font-face{font-family:"Source Serif 4 Variable";font-style:normal;font-display:swap;font-weight:200 900;src:url(/_astro/source-serif-4-cyrillic-ext-wght-normal.cHuGMAiY.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:"Source Serif 4 Variable";font-style:normal;font-display:swap;font-weight:200 900;src:url(/_astro/source-serif-4-cyrillic-wght-normal.DwHjdM4S.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Source Serif 4 Variable";font-style:normal;font-display:swap;font-weight:200 900;src:url(/_astro/source-serif-4-greek-wght-normal.ece1310W.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:"Source Serif 4 Variable";font-style:normal;font-display:swap;font-weight:200 900;src:url(/_astro/source-serif-4-vietnamese-wght-normal.D-yuW59g.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:"Source Serif 4 Variable";font-style:normal;font-display:swap;font-weight:200 900;src:url(/_astro/source-serif-4-latin-ext-wght-normal.CxNHBx-q.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:"Source Serif 4 Variable";font-style:normal;font-display:swap;font-weight:200 900;src:url(/_astro/source-serif-4-latin-wght-normal.D9elroTD.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{--bg: #faf8f4;--bg-raised: #f2efe8;--text: #21201d;--muted: #6f6a60;--line: #e3dfd5;--accent: #9a4423;--accent-soft: #b4562f;--chip-bg: #ffffff;--chip-line: #e8e4da;--font-serif: "Source Serif 4 Variable", "Source Serif 4", Georgia, "Times New Roman", serif;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--measure: 44rem;--wide: 66rem}:root[data-theme=dark]{--bg: #1b1a18;--bg-raised: #24221f;--text: #eae6dd;--muted: #a39c8e;--line: #35322c;--accent: #d98a5f;--accent-soft: #c47445;--chip-bg: #f4f1ea;--chip-line: #35322c}*{box-sizing:border-box;margin:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--text);font-family:var(--font-sans);font-size:1.0625rem;line-height:1.65;-webkit-font-smoothing:antialiased;min-height:100vh;display:flex;flex-direction:column}h1,h2,h3,h4{font-family:var(--font-serif);font-weight:560;line-height:1.2;text-wrap:balance}h1{font-size:clamp(2.1rem,5.5vw,3.1rem);letter-spacing:-.015em}h2{font-size:1.55rem}h3{font-size:1.2rem}p{text-wrap:pretty}a{color:inherit;text-decoration-color:color-mix(in srgb,var(--accent) 55%,transparent);text-decoration-thickness:1px;text-underline-offset:3px;transition:color .15s ease}a:hover{color:var(--accent)}img{max-width:100%;height:auto;display:block}hr{border:none;border-top:1px solid var(--line);margin:2.5rem 0}::selection{background:color-mix(in srgb,var(--accent) 25%,transparent)}.container{width:min(var(--wide),100% - 3rem);margin-inline:auto}main{flex:1;padding-block:3.5rem 5rem}.prose{max-width:var(--measure)}.prose p+p,.prose p+ul,.prose ul+p{margin-top:1rem}.prose h2{margin-top:2.5rem;margin-bottom:.75rem}.prose ul{padding-left:1.25rem}.prose li+li{margin-top:.35rem}.kicker{font-family:var(--font-sans);font-size:.78rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.section{margin-top:4.5rem}.section>.kicker{display:block;padding-bottom:.75rem;border-bottom:1px solid var(--line);margin-bottom:1.75rem}html.js .reveal{opacity:0;transform:translateY(16px);transition:opacity .55s ease,transform .55s ease;transition-delay:var(--reveal-delay, 0s)}html.js .reveal.in{opacity:1;transform:none}@media(prefers-reduced-motion:reduce){html.js .reveal{opacity:1;transform:none;transition:none}html{scroll-behavior:auto}}.site-header{border-bottom:1px solid var(--line)}.site-header .container{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:.5rem 1.5rem;padding-block:1.4rem}.site-title{font-family:var(--font-serif);font-size:1.15rem;font-weight:640;letter-spacing:.01em;text-decoration:none}.site-nav{display:flex;align-items:center;gap:1.4rem}.site-nav a{font-size:.92rem;text-decoration:none;color:var(--muted)}.site-nav a:hover{color:var(--accent)}.site-nav a[aria-current=page]{color:var(--text);text-decoration:underline;text-decoration-color:var(--accent);text-decoration-thickness:2px;text-underline-offset:6px}.theme-toggle{border:none;background:none;padding:.2rem;cursor:pointer;color:var(--muted);display:inline-flex;align-self:center}.theme-toggle:hover{color:var(--accent)}.theme-toggle svg{width:1.1rem;height:1.1rem}:root[data-theme=dark] .icon-moon,:root:not([data-theme=dark]) .icon-sun{display:none}.site-footer{border-top:1px solid var(--line);padding-block:2rem;font-size:.9rem;color:var(--muted)}.site-footer .container{display:flex;justify-content:space-between;flex-wrap:wrap;gap:.75rem 2rem}.site-footer nav{display:flex;gap:1.25rem}.site-footer a{text-decoration:none}.tool-row{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:.6rem 1.1rem}.tool{display:inline-flex;align-items:center;gap:.45rem}.tool-chip{display:inline-flex;align-items:center;justify-content:center;width:1.7rem;height:1.7rem;border-radius:50%;background:var(--chip-bg);border:1px solid var(--chip-line)}.tool-chip svg{width:1rem;height:1rem}.tool-name{font-size:.82rem;color:var(--muted)}.pub-list{list-style:none;padding:0;max-width:var(--measure)}.pub-item{display:grid;grid-template-columns:3.5rem 1fr;gap:1.25rem;padding-block:1.1rem}.pub-item+.pub-item{border-top:1px solid var(--line)}.pub-year{font-variant-numeric:tabular-nums;color:var(--muted);font-size:.9rem;padding-top:.2rem}.pub-title{font-family:var(--font-serif);font-size:1.08rem;font-weight:560;line-height:1.35}.pub-meta{margin-top:.3rem;font-size:.88rem;color:var(--muted)}.pub-meta em{font-style:italic}.pub-meta a{color:var(--accent);text-decoration:none}.pub-meta a:hover{text-decoration:underline}@media(max-width:480px){.pub-item{grid-template-columns:1fr;gap:.15rem}}.tab-row{display:flex;flex-wrap:wrap;gap:.25rem 1.9rem;border-bottom:1px solid var(--line);margin-block:2.5rem 2.25rem}.tab{border:none;background:none;cursor:pointer;padding:0 0 .85rem;font-family:var(--font-serif);font-size:1.05rem;font-weight:560;color:var(--muted);position:relative;display:inline-flex;align-items:baseline;gap:.5rem}.tab .tab-index{font-family:var(--font-sans);font-size:.7rem;font-variant-numeric:tabular-nums;letter-spacing:.08em;color:var(--muted);transition:color .2s ease}.tab:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .25s ease}.tab:hover,.tab[aria-selected=true]{color:var(--text)}.tab[aria-selected=true] .tab-index{color:var(--accent)}.tab[aria-selected=true]:after{transform:scaleX(1)}.tab-count{font-family:var(--font-sans);font-size:.72rem;font-variant-numeric:tabular-nums;color:var(--muted)}@keyframes panel-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}html.js .tab-panel:not([hidden]){animation:panel-in .4s ease both}@media(prefers-reduced-motion:reduce){html.js .tab-panel:not([hidden]){animation:none}}.project-list{list-style:none;padding:0;display:grid;gap:3.5rem}.project-entry{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:2.25rem;align-items:center}.project-entry:nth-child(2n){direction:rtl}.project-entry>*{direction:ltr}@media(max-width:720px){.project-entry,.project-entry:nth-child(2n){grid-template-columns:1fr;direction:ltr;gap:1.25rem}}.figure-frame{display:grid;place-items:center;aspect-ratio:16 / 10;padding:1.1rem;background:var(--bg-raised);border:1px solid var(--line);border-radius:6px;overflow:hidden}.figure-frame img{max-height:100%;width:auto;max-width:100%;object-fit:contain;border-radius:3px}.project-entry h2 a{text-decoration:none}.project-entry h2 a:hover{color:var(--accent)}.project-entry .meta{margin-top:.4rem;margin-bottom:.6rem}.project-entry .tool-row{margin-top:.9rem}.meta{font-size:.85rem;color:var(--muted)}.meta .sep{margin-inline:.45rem;color:var(--line)}.more-link{display:inline-block;margin-top:.75rem;font-size:.92rem;color:var(--accent);text-decoration:none}.more-link:hover{text-decoration:underline}.work-panel-header{max-width:var(--measure);margin-bottom:1.75rem}.work-panel-header h2{font-size:1.9rem}.work-panel-header .meta{margin-top:.6rem}.work-panel-header .tool-row{margin-top:1rem}.project-links{list-style:none;padding:0;margin-top:2.5rem;max-width:var(--measure);border-top:1px solid var(--line)}.project-links li{padding-top:.8rem}.work-body{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:3rem;align-items:start}.work-media{position:sticky;top:2rem;display:grid;gap:1.75rem}.work-gallery{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1.25rem;margin-top:2rem;max-width:var(--measure)}.work-gallery figure{margin:0}.work-media figure img,.work-gallery figure img{border:1px solid var(--line);border-radius:5px;background:var(--bg-raised);width:100%}.work-media figcaption,.work-gallery figcaption{margin-top:.5rem;font-size:.85rem;color:var(--muted)}@media(max-width:860px){.work-body{grid-template-columns:1fr}.work-media{position:static}}.slideshow{margin-block:.5rem 2.5rem}.slides-viewport{overflow:hidden;border-radius:6px}.slides{display:flex;transition:transform .45s ease}@media(prefers-reduced-motion:reduce){.slides{transition:none}}.slide{flex:0 0 100%;min-width:0}.slide-frame{display:grid;place-items:center;aspect-ratio:16 / 9;padding:1.25rem;background:var(--bg-raised);border:1px solid var(--line);border-radius:6px}.slide-frame img{max-height:100%;width:auto;max-width:100%;object-fit:contain;border-radius:3px}.slide figcaption{margin-top:.6rem;text-align:center;font-size:.85rem;color:var(--muted)}.slideshow-nav{margin-top:.9rem;display:flex;align-items:center;justify-content:center;gap:1.25rem}.slide-btn{border:1px solid var(--line);background:none;color:var(--muted);border-radius:50%;width:2.1rem;height:2.1rem;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:color .15s ease,border-color .15s ease}.slide-btn:hover{color:var(--accent);border-color:var(--accent)}.slide-btn svg{width:1.1rem;height:1.1rem}.dots{display:flex;gap:.55rem}.dot{width:.55rem;height:.55rem;border-radius:50%;border:none;padding:0;background:var(--line);cursor:pointer;transition:background .2s ease}.dot:hover{background:var(--accent-soft)}.dot[aria-current=true]{background:var(--accent)}.hero{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:3.5rem;align-items:center;padding-block:1.5rem}@media(max-width:720px){.hero{grid-template-columns:1fr}}.hero .kicker{color:var(--accent);margin-bottom:.9rem;display:block}.hero p{margin-top:1.25rem;max-width:36rem;font-size:1.1rem}.hero-links{margin-top:1.75rem;display:flex;gap:1.5rem;flex-wrap:wrap}.hero-links a{display:inline-flex;align-items:center;gap:.45rem;font-size:.92rem;text-decoration:none;color:var(--muted)}.hero-links a:hover{color:var(--accent)}.hero-links svg{width:1.05rem;height:1.05rem}.hero-portrait{position:relative;isolation:isolate;max-width:20rem;margin-inline:auto;--arch: 11rem 11rem .6rem .6rem}.hero-portrait:before{content:"";position:absolute;inset:0;border:1.5px solid var(--accent);border-radius:var(--arch);transform:translate(.85rem,.85rem);z-index:-1}.hero-portrait img{border-radius:var(--arch)}.skill-grid{list-style:none;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(19rem,1fr));gap:2rem 3rem;max-width:var(--wide)}.skill-grid h3{display:flex;align-items:center;gap:.6rem;margin-bottom:.35rem}.skill-grid h3 svg{width:1.15rem;height:1.15rem;color:var(--accent);flex-shrink:0}.skill-grid p{font-size:.97rem;color:color-mix(in srgb,var(--text) 82%,var(--muted))}.timeline{list-style:none;padding:0;max-width:var(--measure);position:relative}.timeline:before{content:"";position:absolute;left:.32rem;top:.5rem;bottom:.5rem;width:1px;background:var(--line)}.timeline li{position:relative;padding-left:1.9rem;padding-block:.85rem}.timeline li:before{content:"";position:absolute;left:0;top:1.35rem;width:.7rem;height:.7rem;border-radius:50%;background:var(--bg);border:2px solid var(--accent)}.timeline .tl-when{display:block;font-size:.78rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-variant-numeric:tabular-nums}.timeline .tl-what{font-weight:600}.timeline .tl-where{color:var(--muted);font-size:.95rem}.course-grid{list-style:none;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(17rem,1fr));gap:0 3rem;max-width:var(--wide)}.course-grid li{padding-block:.7rem;border-bottom:1px solid var(--line)}.course-grid .course-name{font-weight:600;font-size:.97rem}.course-grid .course-by{display:block;color:var(--muted);font-size:.85rem}
