@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;--bg:#f3f3ef;--surface:#fafaf7;--surface-strong:#fff;--text:#1b1d1c;--muted:#656b68;--faint:#686f6b;--line:#1b1d1c24;--line-strong:#1b1d1c3d;--accent:#b63d34;--accent-strong:#a7332a;--button-text:#f8f8f4;--shadow:#12141329;--radius:6px;--font-sans:"Geist Variable", ui-sans-serif, system-ui, sans-serif;--font-mono:"Geist Mono Variable", ui-monospace, monospace}:root[data-theme=dark]{color-scheme:dark;--bg:#151716;--surface:#1b1e1c;--surface-strong:#222522;--text:#eff0eb;--muted:#a9afaa;--faint:#7f8681;--line:#eff0eb24;--line-strong:#eff0eb3d;--accent:#e0675c;--accent-strong:#ef8277;--button-text:#171918;--shadow:#00000057}*{box-sizing:border-box}html{background:var(--bg);scroll-behavior:smooth}::view-transition-image-pair(root){isolation:auto}::view-transition-old(root),::view-transition-new(root){mix-blend-mode:normal;animation:none;display:block}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2}body{color:var(--text);background:var(--bg);font-family:var(--font-sans);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;margin:0}body,button,a{letter-spacing:0}a{color:inherit;text-decoration:none}button{font:inherit}img{max-width:100%;display:block}.icon{flex:none;display:block}:focus-visible{outline:3px solid color-mix(in srgb, var(--accent), transparent 35%);outline-offset:3px}.site-header{z-index:20;background:var(--bg);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;width:min(100%,1440px);height:68px;margin:0 auto;padding:0 28px;display:flex;position:relative}.wordmark{font-size:18px;font-weight:760}.site-header nav{align-items:center;gap:24px;display:flex}.site-header nav>a{color:var(--muted);font-size:14px;font-weight:600}.site-header nav>a:hover,.site-header nav>a[aria-current=page]{color:var(--text)}.icon-button{width:36px;height:36px;color:var(--text);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:50%;place-items:center;padding:0;display:inline-grid}.icon-button:hover{background:var(--surface-strong);border-color:var(--line)}.icon-button .icon{font-size:20px}.theme-sun,:root[data-theme=dark] .theme-moon{display:none}:root[data-theme=dark] .theme-sun{display:inline-block}.home-intro{border-bottom:1px solid var(--line-strong);width:min(100% - 48px,1240px);min-height:calc(100dvh - 68px);margin:0 auto;padding:clamp(56px,7vw,92px) 0 clamp(64px,8vw,104px);position:relative;overflow:clip}.home-intro:after{background:var(--accent);content:"";width:min(31vw,420px);height:1px;position:absolute;bottom:0;right:0}.intro-rail{color:var(--faint);font-family:var(--font-mono);font-variant-numeric:tabular-nums;justify-content:space-between;margin-bottom:clamp(44px,5vw,66px);font-size:11px;display:flex}.intro-rail p{margin:0}.home-intro h1{letter-spacing:-.065em;text-wrap:balance;max-width:1160px;margin:0;font-size:clamp(60px,7vw,100px);font-weight:760;line-height:.9}.home-intro h1 span{color:var(--muted);font-weight:560;display:block}.intro-bottom{grid-template-columns:minmax(0,1.2fr) minmax(280px,.8fr);align-items:end;gap:clamp(42px,8vw,132px);margin-top:clamp(44px,6vw,74px);display:grid}.intro-statement{max-width:600px;color:var(--muted);text-wrap:pretty;margin:0;font-size:clamp(19px,1.8vw,25px);line-height:1.4}.intro-links{justify-content:flex-end;align-items:center;gap:26px;display:flex}.intro-links a{align-items:center;gap:8px;padding:8px 0;font-size:14px;font-weight:680;display:inline-flex}.intro-links a:first-child{color:var(--accent)}.intro-links .icon,.project-links .icon{transition:transform .18s cubic-bezier(.16,1,.3,1)}.intro-links a:hover .icon,.project-links a:hover .icon{transform:translate(3px,-1px)}.detail-actions,.project-links{flex-wrap:wrap;align-items:center;gap:10px;margin-top:28px;display:flex}.button{border-radius:var(--radius);white-space:nowrap;border:1px solid #0000;justify-content:center;align-items:center;gap:8px;min-height:44px;padding:0 16px;font-size:14px;font-weight:680;transition:transform .16s,background .16s,border-color .16s;display:inline-flex}.button:active{transform:translateY(1px)}.button-primary{color:var(--button-text);background:var(--accent)}.button-primary:hover{background:var(--accent-strong)}.button-outline{color:var(--text);border-color:var(--line-strong);background:0 0}.button-outline:hover{background:var(--surface-strong)}.section,.page-shell,.article-shell{width:min(100% - 48px,1240px);margin:0 auto}.section{padding:112px 0}.section-heading{margin-bottom:46px}.compact-heading h2{margin:0;font-size:clamp(34px,5vw,64px);line-height:1}.compact-heading p{max-width:570px;color:var(--muted);margin:18px 0 0;font-size:18px;line-height:1.5}.project-artwork{background:var(--surface-strong);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 20px 48px var(--shadow);margin:0;position:relative;overflow:hidden}.project-artwork img{object-fit:cover;width:100%;height:100%;transition:transform .42s cubic-bezier(.16,1,.3,1)}.project-artwork.has-portrait-art{box-shadow:none;background:0 0;border:0;border-radius:0}.project-artwork.has-portrait-art img{object-fit:contain}a:hover>.project-artwork img{transform:scale(1.012)}.project-meta{color:var(--faint);font-family:var(--font-mono);gap:12px;font-size:12px;display:flex}.project-meta span+span:before{content:"/";margin-right:12px}.project-index-copy p{color:var(--muted);line-height:1.55}.project-links a,.text-link,.back-link{color:var(--text);align-items:center;gap:7px;font-size:14px;font-weight:680;display:inline-flex}.project-links a:first-child,.text-link:hover,.back-link:hover{color:var(--accent)}.work-heading{max-width:620px;margin-bottom:clamp(54px,7vw,88px)}.work-heading h2{letter-spacing:-.055em;margin:0;font-size:clamp(42px,5.3vw,68px);line-height:1}.work-heading p{max-width:520px;color:var(--muted);margin:18px 0 0;font-size:17px;line-height:1.5}.work-stage{--work-pull:0px;--work-visual-pull:0px;grid-template-columns:minmax(0,1.5fr) minmax(280px,.58fr);align-items:stretch;gap:clamp(48px,7vw,104px);display:grid}.work-visual{min-height:100%;position:relative}.work-visual-pin{place-items:center;height:100dvh;display:grid;position:sticky;top:0}.work-visual-canvas{aspect-ratio:16/10;width:100%;position:relative}.work-frame{pointer-events:none;opacity:0;will-change:transform, opacity;transition:opacity .52s,transform .72s cubic-bezier(.22,1,.36,1);position:absolute;inset:0;transform:translateY(24px)scale(.97)}.work-frame.is-active{z-index:1;opacity:1;transform:translate3d(0, var(--work-visual-pull), 0) scale(1)}.work-frame .project-artwork{width:100%;height:100%}.work-entry{opacity:.24;flex-direction:column;justify-content:center;min-height:100dvh;transition:opacity .48s,transform .52s cubic-bezier(.22,1,.36,1);display:flex;transform:translate(0,0)}.work-entry.is-active{opacity:1;transform:translate3d(0, var(--work-pull), 0)}.work-stage.is-wheel-pulling .work-frame.is-active,.work-stage.is-wheel-pulling .work-entry.is-active{transition-duration:80ms;transition-timing-function:linear}.work-stage.is-wheel-settling .work-frame.is-active,.work-stage.is-wheel-settling .work-entry.is-active{transition-duration:.52s;transition-timing-function:cubic-bezier(.22,1.38,.36,1)}.work-entry-media{display:none}.work-entry h3{letter-spacing:-.05em;margin:16px 0 0;font-size:clamp(38px,4vw,56px);line-height:.96}.work-entry h3 a{transition:color .18s}.work-entry h3 a:hover,.work-entry.is-active h3 a:focus-visible{color:var(--accent)}.work-entry>p{max-width:38ch;color:var(--muted);margin:18px 0 0;font-size:16px;line-height:1.55}.work-demo-link{color:var(--accent);align-self:flex-start;align-items:center;gap:7px;margin-top:24px;font-size:14px;font-weight:680;display:inline-flex}.work-demo-link .icon{transition:transform .18s cubic-bezier(.16,1,.3,1)}.work-demo-link:hover .icon{transform:translate(3px,-2px)}@media (width>=861px) and (prefers-reduced-motion:no-preference){html.has-work-navigation.is-work-animating{scroll-behavior:auto}}.notes-preview{border-top:1px solid var(--line)}.note-list{max-width:940px}.note-row{border-bottom:1px solid var(--line);grid-template-columns:150px minmax(0,1fr) 24px;align-items:center;gap:24px;padding:24px 0;display:grid}.note-row time,.article-header time,.notes-index-row time{color:var(--faint);font-family:var(--font-mono);font-size:12px}.note-row span{gap:5px;display:grid}.note-row strong{font-size:18px}.note-row small{color:var(--muted);font-size:14px}.note-row .icon{transition:transform .16s}.note-row:hover .icon{transform:translate(4px)}.notes-preview>.text-link{margin-top:28px}.site-footer{width:min(100% - 48px,1240px);color:var(--muted);border-top:1px solid var(--line);justify-content:space-between;align-items:center;margin:0 auto;padding:28px 0 40px;font-size:13px;display:flex}.site-footer p{margin:0}.site-footer div{gap:20px;display:flex}.site-footer a:hover{color:var(--text)}.page-shell{padding:88px 0 120px}.page-intro{max-width:800px;margin-bottom:88px}.page-intro h1,.project-detail-header h1,.article-header h1,.not-found h1{margin:0;font-size:clamp(52px,8vw,96px);line-height:.96}.page-intro p,.project-detail-header>p,.article-header>p,.not-found p{max-width:620px;color:var(--muted);margin:24px 0 0;font-size:20px;line-height:1.45}.project-index{gap:100px;display:grid}.project-index-row{grid-template-columns:minmax(0,1.25fr) minmax(280px,.75fr);align-items:center;gap:clamp(32px,6vw,88px);display:grid}.project-index-row:nth-child(2n) .project-index-media{grid-column:2}.project-index-row:nth-child(2n) .project-index-copy{grid-area:1/1}.project-index-media .project-artwork{aspect-ratio:16/10}.project-index-copy h2{margin:14px 0 0;font-size:clamp(34px,5vw,58px);line-height:1}.project-index-copy p{margin:18px 0 0;font-size:16px}.stack-list{flex-wrap:wrap;gap:8px;margin-top:24px;display:flex}.stack-list span{color:var(--muted);background:var(--surface);border:1px solid var(--line);font-family:var(--font-mono);border-radius:4px;padding:6px 9px;font-size:11px}.project-detail-header{max-width:900px;margin-bottom:54px}.project-detail-header h1{margin-top:20px}.detail-artwork{aspect-ratio:16/9}.project-detail-body{grid-template-columns:minmax(0,1.35fr) minmax(280px,.65fr);gap:clamp(54px,9vw,130px);padding:86px 0 20px;display:grid}.project-detail-body h2{margin:0;font-size:22px}.project-detail-body p{max-width:720px;color:var(--muted);margin:20px 0 0;font-size:19px;line-height:1.65}.install-block{gap:8px;margin-top:36px;display:grid}.install-block>span{color:var(--faint);font-size:12px}.install-block code{color:var(--text);background:var(--surface-strong);border:1px solid var(--line);border-radius:var(--radius);font-family:var(--font-mono);white-space:nowrap;padding:14px;font-size:12px;display:block;overflow-x:auto}.notes-index{max-width:1000px}.notes-index-row{border-bottom:1px solid var(--line);grid-template-columns:160px minmax(0,1fr) 24px;align-items:start;gap:28px;padding:30px 0;display:grid}.notes-index-row h2{margin:0;font-size:26px}.notes-index-row p{max-width:620px;color:var(--muted);margin:10px 0 0;line-height:1.5}.empty-state{color:var(--muted)}.article-shell{max-width:940px;padding:80px 0 120px}.article-header{border-bottom:1px solid var(--line);padding-bottom:54px}.article-header h1{margin-top:42px;font-size:clamp(45px,7vw,76px)}.article-header time{margin-top:26px;display:block}.prose{max-width:720px;padding-top:58px}.prose h2{margin:52px 0 18px;font-size:28px}.prose p,.prose li{color:color-mix(in srgb, var(--text), var(--muted) 28%);font-size:18px;line-height:1.75}.prose ul{padding-left:22px}.prose code{font-family:var(--font-mono);font-size:.88em}.prose pre{border-radius:var(--radius);padding:20px;overflow-x:auto}.not-found{align-content:center;justify-items:start;width:min(100% - 48px,900px);min-height:calc(100dvh - 150px);margin:0 auto;display:grid}.not-found .button{margin-top:28px}@media (prefers-reduced-motion:no-preference){.intro-rail,.home-intro h1,.intro-statement,.intro-links{animation:.56s cubic-bezier(.16,1,.3,1) both enter}.home-intro h1{animation-delay:90ms}.intro-statement{animation-delay:.17s}.intro-links{animation-delay:.23s}@keyframes enter{0%{opacity:0;transform:translateY(16px)}}}@media (width<=860px){.site-header{padding:0 18px}.site-header nav{gap:12px}.intro-bottom,.project-index-row,.project-detail-body{grid-template-columns:1fr}.home-intro{min-height:auto;padding:72px 0 86px}.intro-links{justify-content:flex-start}.project-index-row{gap:28px}.work-stage{display:block}.work-visual{display:none}.work-entries{gap:94px;display:grid}.work-entry,.work-entry.is-active{opacity:1;min-height:0;transform:none}.work-entry-media{margin-bottom:28px;display:block}.work-entry-media .project-artwork{aspect-ratio:16/10}.work-entry>p{max-width:58ch}.project-index-row:nth-child(2n) .project-index-media,.project-index-row:nth-child(2n) .project-index-copy{grid-area:auto}}@media (width<=640px){.site-header{height:60px}.site-header nav>a{font-size:13px}.github-link{display:none}.home-intro,.section,.page-shell,.article-shell,.site-footer{width:calc(100% - 32px)}.home-intro{padding:52px 0 72px}.intro-rail{margin-bottom:36px}.home-intro h1{letter-spacing:-.055em;font-size:clamp(48px,13vw,62px);line-height:.94}.intro-bottom{gap:26px;margin-top:38px}.intro-statement{max-width:34ch;margin:0;font-size:18px}.intro-links{gap:22px}.section{padding:78px 0}.compact-heading p{font-size:16px}.work-heading{margin-bottom:50px}.work-heading p{font-size:15px}.work-entries{gap:70px}.work-entry h3{font-size:38px}.work-entry>p{font-size:15px}.note-row,.notes-index-row{grid-template-columns:1fr 24px;gap:14px}.note-row time,.notes-index-row time{grid-column:1/-1}.page-shell{padding:64px 0 90px}.page-intro{margin-bottom:64px}.page-intro h1,.project-detail-header h1,.not-found h1{font-size:48px}.page-intro p,.project-detail-header>p,.not-found p{font-size:17px}.project-index{gap:72px}.project-detail-body{gap:54px;padding-top:58px}.article-header h1{margin-top:34px;font-size:42px}.prose p,.prose li{font-size:17px}.site-footer{flex-direction:column;align-items:flex-start;gap:18px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.work-frame,.work-entry,.project-artwork img,.intro-links .icon,.project-links .icon,.work-demo-link .icon,.note-row .icon{transition:none;animation:none}}
