@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+0460-052F,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+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,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+1F00-1FFF}@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+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@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+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: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+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: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+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:light;--paper: #FFFFFF;--ink: #000000;--ink-2: #5C5C5C;--line: #E2E2E2;--block: #F2F2F2;--accent: #2B44FF;--font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;--chip: #EDEDED;--font-sans: "Inter Variable", "Helvetica Neue", Helvetica, Arial, sans-serif;--step--1: clamp(.8125rem, .79rem + .1vw, .875rem);--step-0: clamp(1rem, .97rem + .15vw, 1.125rem);--step-1: clamp(1.25rem, 1.15rem + .5vw, 1.5rem);--step-2: clamp(1.5rem, 1.3rem + 1vw, 2.25rem);--step-3: clamp(2.25rem, 1.7rem + 2.7vw, 4.25rem);--weight-body: 400;--weight-strong: 600;--leading-body: 1.55;--leading-display: 1.04;--tracking-display: -.025em;--measure: 62ch;--space-1: .25rem;--space-2: .5rem;--space-3: 1rem;--space-4: 1.5rem;--space-5: 2.5rem;--space-6: 4rem;--space-7: 7rem;--gutter: clamp(1rem, .5rem + 2.5vw, 2.5rem);--max: 1200px;--radius: 8px;--radius-lg: 14px;--ratio-thumb: 16 / 10;--ease: .15s ease-out}:root[data-theme=dark]{color-scheme:dark;--paper: #000000;--ink: #FFFFFF;--ink-2: #A3A3A3;--line: #2A2A2A;--block: #161616;--accent: #8C9BFF;--chip: #262626}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-sans);font-size:var(--step-0);font-weight:var(--weight-body);line-height:var(--leading-body);-webkit-font-smoothing:antialiased}img{display:block;max-width:100%;height:auto}a{color:inherit;text-decoration-thickness:1px;text-underline-offset:.2em}a:hover{color:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.skip-link{position:absolute;left:var(--gutter);top:-4rem;background:var(--ink);color:var(--paper);padding:var(--space-2) var(--space-3);z-index:10}.skip-link:focus{top:var(--space-2)}.wrap{width:100%;max-width:var(--max);margin-inline:auto;padding-inline:var(--gutter)}.site-name{font-size:var(--step-1);font-weight:var(--weight-strong);letter-spacing:-.01em;text-decoration:none}.header-note{margin:0;text-align:right;font-size:var(--step--1);line-height:1.4}.clock{font-family:var(--font-mono);font-size:.75rem;color:var(--ink-2)}.site-nav{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-4);margin-top:var(--space-4);font-weight:var(--weight-strong);font-size:var(--step--1)}.site-nav a{text-decoration:none}.site-nav a:hover{text-decoration:underline}.site-nav a[aria-current=page]{text-decoration:underline;text-underline-offset:.35em;text-decoration-thickness:2px}.page-head{padding-top:var(--space-6)}.page-title{margin:0;font-size:var(--step-3);font-weight:var(--weight-strong);line-height:var(--leading-display);letter-spacing:var(--tracking-display)}.page-sub{margin:var(--space-2) 0 0;font-size:var(--step-2);font-weight:var(--weight-body);line-height:1.15;letter-spacing:var(--tracking-display)}.rule{border:0;border-top:1px solid var(--line);margin:var(--space-5) 0}.lead{max-width:40ch;margin:0;font-size:var(--step-1);line-height:1.45}.lead-prose{font-size:var(--step-1);line-height:1.45;max-width:40ch}.section-title{margin:var(--space-7) 0 var(--space-4);font-size:var(--step-2);font-weight:var(--weight-strong);letter-spacing:var(--tracking-display)}.more{margin:var(--space-5) 0 0}.btn{display:inline-flex;align-items:center;gap:var(--space-2);padding:.4rem .85rem;border:1px solid var(--ink);border-radius:var(--radius);font-size:var(--step--1);font-weight:var(--weight-strong);text-decoration:none}.btn:hover{color:var(--paper);background:var(--ink)}.chip{display:inline-block;margin:0 0 var(--space-3);padding:.1rem .55rem;background:var(--chip);border-radius:4px;font-family:var(--font-mono);font-size:.75rem;line-height:1.6}.row{display:grid;grid-template-columns:5fr 7fr;gap:var(--space-3) var(--space-5);padding-block:var(--space-5) var(--space-6);border-top:1px solid var(--line)}.work-list>.section-title+.row{border-top:0;padding-top:0}.work-list-flush{margin-top:var(--space-5)}.row-year{margin:0 0 var(--space-1);font-size:var(--step--1)}.row-title{margin:0 0 var(--space-3);font-size:var(--step-2);font-weight:var(--weight-strong);line-height:1.1;letter-spacing:var(--tracking-display)}.row-title a{text-decoration:none}.row-title a:hover{text-decoration:underline}.row-meta{margin:0 0 var(--space-2);font-size:var(--step--1);max-width:34ch}.row-sub{margin:0 0 var(--space-3);font-size:var(--step-1);font-weight:var(--weight-strong);line-height:1.2}.row-body p{margin:0 0 var(--space-3);font-size:var(--step--1);max-width:62ch}.row-body p.chip{margin-bottom:var(--space-3)}.row-body .btn{margin-top:var(--space-1)}@media(max-width:760px){.row{grid-template-columns:1fr;gap:var(--space-3)}}.project-head{display:grid;grid-template-columns:5fr 7fr;gap:var(--space-4) var(--space-5);padding-block:var(--space-6) var(--space-5)}@media(max-width:760px){.project-head{grid-template-columns:1fr}}.project-title{margin:0;font-size:var(--step-3);font-weight:var(--weight-strong);line-height:var(--leading-display);letter-spacing:var(--tracking-display)}.project-sub{margin:var(--space-2) 0 0;color:var(--ink-2)}.project-meta{margin:var(--space-4) 0 0;display:grid;grid-template-columns:auto 1fr;gap:var(--space-1) var(--space-3);font-size:var(--step--1)}.project-meta dt{color:var(--ink-2)}.project-meta dd{margin:0}.prose{max-width:var(--measure)}.prose>:first-child{margin-top:0}.prose p{margin:0 0 var(--space-3)}.prose h2{margin:var(--space-5) 0 var(--space-2);font-size:var(--step-1);font-weight:var(--weight-strong);line-height:1.2}.gallery{display:grid;gap:var(--space-3)}.gallery img{width:100%;height:auto;border-radius:var(--radius);background:var(--block)}.pager{display:flex;justify-content:space-between;gap:var(--space-4);margin-top:var(--space-6);font-size:var(--step-1);font-weight:var(--weight-strong)}.pager a{text-decoration:none}.pager a:hover{text-decoration:underline}.footer-panel{margin-top:var(--space-7);margin-bottom:var(--space-5);padding:var(--space-5);background:var(--block);border-radius:var(--radius-lg);display:grid;gap:var(--space-5)}.footer-top,.footer-bottom{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:var(--space-3)}.footer-top .site-nav{margin-top:0}.footer-bottom{font-size:var(--step--1);color:var(--ink-2)}@media(prefers-reduced-motion:no-preference){a,.btn{transition:color var(--ease),background-color var(--ease)}}.row-media{grid-column:1 / -1;margin-top:var(--space-4);min-width:0}.carousel{--carousel-h: clamp(220px, 38vw, 440px);min-width:0}.carousel-track{display:flex;gap:var(--space-3);margin:0;padding:0;list-style:none;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;-webkit-overflow-scrolling:touch;border-radius:var(--radius)}.carousel-track::-webkit-scrollbar{display:none}.carousel-track:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.slide{flex:0 0 auto;height:var(--carousel-h);scroll-snap-align:start;background:var(--block);border-radius:var(--radius);overflow:hidden}.slide img{height:100%;width:auto;max-width:none;object-fit:cover}.carousel-ui{display:flex;justify-content:space-between;align-items:center;margin-top:var(--space-3)}.carousel-count{font-family:var(--font-mono);font-size:.75rem;color:var(--ink-2)}.carousel-btns{display:flex;gap:var(--space-2)}.carousel-btn{display:grid;place-items:center;width:2.25rem;height:2.25rem;padding:0;background:transparent;color:var(--ink);border:1px solid var(--ink);border-radius:var(--radius);cursor:pointer}.carousel-btn:hover:not(:disabled){color:var(--paper);background:var(--ink)}.carousel-btn:disabled{opacity:.3;cursor:default}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.lead-first{padding-top:var(--space-6)}.site-header{padding-block:var(--space-4) 0}.header-top{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-4)}.header-note{text-align:right}.nav-row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:var(--space-3) var(--space-5);margin-top:var(--space-4)}.key-nav{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-5);font-size:var(--step-0);font-weight:var(--weight-strong)}.key-nav a{display:inline-flex;align-items:center;gap:.45em;text-decoration:none}.key{display:inline-grid;place-items:center;width:1.8em;height:1.8em;border:1.5px solid currentColor;border-radius:.38em;font-family:var(--font-sans);font-size:.62em;font-weight:700;line-height:1}.key-nav a:hover{color:var(--ink)}.key-nav a:hover .key{background:var(--block)}.key-nav a[aria-current=page] .key{background:var(--ink);border-color:var(--ink);color:var(--paper)}@media(max-width:480px){.key-nav{gap:var(--space-2) .9rem;font-size:var(--step--1)}.theme-switch{margin-left:auto}}.theme-switch{display:inline-flex;align-items:center;gap:.5em;padding:0;background:none;border:0;color:var(--ink);font:inherit;font-size:var(--step--1);cursor:pointer}.theme-track{position:relative;width:2.1em;height:1.2em;border:1.5px solid var(--ink);border-radius:999px}.theme-thumb{position:absolute;top:50%;left:.15em;width:.75em;height:.75em;border-radius:50%;background:var(--ink);transform:translateY(-50%)}:root[data-theme=dark] .theme-thumb{transform:translate(calc(1.05em - 3px),-50%)}.theme-switch:hover .theme-track{background:var(--block)}@media(prefers-reduced-motion:no-preference){.theme-thumb{transition:transform var(--ease)}body{transition:background-color .2s ease-out,color .2s ease-out}}@media(pointer:fine){.carousel-track{cursor:grab}.carousel-track.is-dragging{cursor:grabbing;scroll-snap-type:none;user-select:none}.carousel-track.is-dragging img{pointer-events:none}}.rule-section{margin:var(--space-6) 0 0}.rule-section+.section-title{margin-top:var(--space-5)}.label-to-light{display:none}:root[data-theme=dark] .label-to-dark{display:none}:root[data-theme=dark] .label-to-light{display:inline}.ts-lamp{display:block}.ts-lamp{width:2.05em;height:2.5em;margin-block:-.55em -.75em;overflow:visible}.ts-bulb{fill:currentColor}:root[data-theme=dark] .ts-bulb{fill:none}:root[data-theme=dark] .ts-rays{opacity:0}.ts-chain{transform-box:view-box}@media(prefers-reduced-motion:no-preference){.ts-rays{transition:opacity .15s ease-out}.theme-switch.is-pulled .ts-chain{animation:ts-tug .32s cubic-bezier(.3,.7,.4,1.4)}}@keyframes ts-tug{0%{transform:translateY(0)}35%{transform:translateY(3.5px)}to{transform:translateY(0)}}.ts-fader{position:relative;display:block;width:3em;height:1.35em}.ts-fader:before{content:"";position:absolute;left:0;right:0;top:50%;height:.42em;transform:translateY(-50%);border:1.5px solid currentColor;border-radius:2px;background:linear-gradient(90deg,transparent 50%,currentColor 50%)}.ts-fader-cap{position:absolute;top:0;left:0;width:.62em;height:100%;background:var(--paper);border:1.5px solid currentColor;border-radius:2px}.ts-fader-cap:after{content:"";position:absolute;left:50%;top:18%;bottom:18%;width:1.5px;background:currentColor;transform:translate(-50%)}:root[data-theme=dark] .ts-fader-cap{transform:translate(2.38em)}@media(prefers-reduced-motion:no-preference){.ts-fader-cap{transition:transform .18s cubic-bezier(.3,.7,.3,1)}}.ts-bulb-icon{display:block;width:1.75em;height:1.65em;margin-block:-.3em;overflow:visible}:root[data-theme=dark] .ts-glow{opacity:0}:root[data-theme=dark] .ts-filament{opacity:.45}@media(prefers-reduced-motion:no-preference){.ts-glow,.ts-filament{transition:opacity .12s ease-out}:root:not([data-theme=dark]) .theme-switch.is-pulled .ts-glow{animation:ts-flicker .38s steps(1,end)}}@keyframes ts-flicker{0%{opacity:0}25%{opacity:1}45%{opacity:.2}65%{opacity:1}80%{opacity:.5}to{opacity:1}}
