@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/bricolage-grotesque-vietnamese-wght-normal-BUzh504Q.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:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/bricolage-grotesque-latin-ext-wght-normal-CcLUaPy7.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:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/bricolage-grotesque-latin-wght-normal-DLoelf7F.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 Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/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(/assets/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(/assets/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(/assets/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(/assets/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(/assets/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(/assets/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(/assets/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(/assets/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(/assets/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(/assets/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{--bg:#07080a;--text:#edece8;--muted:#a6a7ab;--line:#ffffff24;--accent:#ff5a2e;--accent-ink:#0a0a0b;--font-display:"Bricolage Grotesque Variable", "Geist Variable", system-ui, sans-serif;--font-body:"Geist Variable", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:"Geist Mono Variable", ui-monospace, "SFMono-Regular", Menlo, monospace;--gutter:clamp(20px, 4.5vw, 64px);--nav-h:64px;--radius:10px;--ease:cubic-bezier(.16, 1, .3, 1);--z-canvas:0;--z-content:1;--z-nav:10;--z-loader:100;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}html{background:var(--bg);overflow-x:clip}body{background:var(--bg);color:var(--text);font-family:var(--font-body);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:1.0625rem;line-height:1.6;overflow-x:clip}h1,h2,h3{font-family:var(--font-display);letter-spacing:-.035em;margin:0;font-weight:650;line-height:1.04}p,ul,dl,dd,figure{margin:0}ul{padding:0;list-style:none}a{color:inherit}img,video{max-width:100%;height:auto;display:block}:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:4px}::selection{background:var(--accent);color:var(--accent-ink)}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;position:absolute;overflow:hidden}.skip-link{z-index:calc(var(--z-loader) + 1);background:var(--text);color:var(--bg);border-radius:999px;padding:10px 18px;font-weight:600;text-decoration:none;position:fixed;top:-80px;left:16px}.skip-link:focus{top:12px}#gl{z-index:var(--z-canvas);opacity:0;width:100%;height:100lvh;transition:opacity .7s var(--ease);display:none;position:fixed;top:0;bottom:0;left:0;right:0}[data-view="3d"] #gl{display:block}.gl-ready #gl{opacity:1}.no-webgl #gl{display:none}[data-view=simple] body,.no-webgl body{background:radial-gradient(60% 50% at 78% 12%, #ff5a2e24, transparent 70%), var(--bg);background-attachment:fixed}.is-screen-hover,.is-screen-hover body{cursor:pointer}main,.site-footer{z-index:var(--z-content);position:relative}.progress{z-index:var(--z-loader);opacity:0;pointer-events:none;height:2px;transition:opacity .4s var(--ease);position:fixed;top:0;left:0;right:0}.progress.is-active{opacity:1}.progress span{background:var(--accent);transform-origin:0;height:100%;transition:transform .4s var(--ease);display:block;transform:scaleX(0)}.site-nav{z-index:var(--z-nav);height:var(--nav-h);padding-inline:var(--gutter);justify-content:space-between;align-items:center;gap:16px;display:flex;position:fixed;top:0;left:0;right:0}[data-view=simple] .site-nav,.no-webgl .site-nav,.past-hero .site-nav{border-bottom:1px solid var(--line);background:#07080af0}.wordmark{font-family:var(--font-display);letter-spacing:-.03em;white-space:nowrap;font-size:1.15rem;font-weight:700;text-decoration:none}.nav-links{gap:clamp(16px,3vw,36px);display:flex}.nav-links a{color:var(--muted);transition:color .3s var(--ease);padding-block-start:8px;padding-block-end:8px;font-size:.95rem;font-weight:500;text-decoration:none;display:inline-block;position:relative}.nav-links a:after{content:"";background:var(--accent);transform-origin:0;height:1.5px;transition:transform .4s var(--ease);position:absolute;bottom:2px;left:0;right:0;transform:scaleX(0)}.nav-links a:hover,.nav-links a[aria-current=true]{color:var(--text)}.nav-links a[aria-current=true]:after{transform:scaleX(1)}.no-work [data-goto=work],.no-work #work{display:none}.view-toggle{z-index:var(--z-nav);border:1px solid var(--line);height:36px;color:var(--text);font-family:var(--font-mono);transition:border-color .3s var(--ease), color .3s var(--ease);background:#07080aeb;border-radius:999px;align-items:center;padding:0 16px;font-size:.74rem;text-decoration:none;display:inline-flex;position:fixed;bottom:14px;right:14px}html:not(.js) .view-toggle{display:none}.view-toggle:hover{border-color:var(--accent);color:var(--accent)}.rail{right:calc(var(--gutter) * .45);z-index:var(--z-nav);flex-direction:column;gap:4px;display:none;position:fixed;top:50%;transform:translateY(-50%)}.journey .rail{display:flex}.rail button{min-height:26px;color:var(--muted);font-family:var(--font-mono);cursor:pointer;background:0 0;border:0;justify-content:flex-end;align-items:center;gap:10px;padding:0;font-size:.7rem;display:flex}.rail button span{opacity:0;transition:opacity .3s var(--ease), transform .3s var(--ease);transform:translate(6px)}.rail button:after{content:"";width:14px;height:1.5px;transition:width .4s var(--ease), background-color .3s var(--ease);background:currentColor}.rail button:hover span{opacity:1;transform:none}.rail button.is-active{color:var(--text)}.rail button.is-active:after{background:var(--accent);width:30px}.btn{white-space:nowrap;height:50px;transition:transform .3s var(--ease), background-color .3s var(--ease), border-color .3s var(--ease);border-radius:999px;justify-content:center;align-items:center;gap:8px;padding:0 26px;font-size:.98rem;font-weight:600;text-decoration:none;display:inline-flex}.btn:active{transform:translateY(1px)scale(.98)}.btn-primary{background:var(--accent);color:var(--accent-ink)}.btn-primary:hover{background:#ff7a55}.btn-ghost{border:1px solid var(--line);color:var(--text);background:#07080a80}.btn-ghost:hover{border-color:var(--text)}.text-link{color:var(--accent);border-bottom:1.5px solid;gap:6px;padding-bottom:3px;font-weight:600;text-decoration:none;display:inline-flex}.quiet-link{border-bottom:1.5px solid var(--line);color:var(--text);transition:border-color .3s var(--ease);gap:6px;padding-bottom:3px;font-weight:500;text-decoration:none;display:inline-flex}.quiet-link:hover{border-color:var(--text)}.i{width:1em;height:1em;transition:transform .3s var(--ease);flex:none}.text-link,.quiet-link{align-items:center}.text-link:hover .i,.btn:hover .i{transform:translate(3px)}.quiet-link:hover .i{transform:translate(2px,-2px)}.contact-links .i{vertical-align:-.12em}.tags{flex-wrap:wrap;gap:8px;display:flex}.tags li{border:1px solid var(--line);font-family:var(--font-mono);color:var(--muted);background:#07080a80;border-radius:999px;padding:4px 12px;font-size:.76rem}.kind{font-family:var(--font-mono);color:var(--accent);font-size:.78rem}.site-footer{min-height:72px;padding:12px calc(var(--gutter) + 110px) 12px var(--gutter);border-top:1px solid var(--line);color:var(--muted);background:#07080adb;justify-content:space-between;align-items:center;gap:16px;font-size:.9rem;display:flex}.site-footer a{text-decoration:none}.site-footer a:hover{color:var(--text)}@media (max-width:760px){.journey .rail{display:none}.site-footer{padding-right:var(--gutter);padding-bottom:62px}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}.case{background:radial-gradient(60% 40% at 80% 0%, color-mix(in srgb, var(--tone,var(--accent)) 14%, transparent), transparent 70%), var(--bg)}[data-view="3d"]:not(.no-webgl) .case{background:var(--bg)}.past-hero #gl{opacity:.22}.case-main{max-width:980px;padding:calc(var(--nav-h) + clamp(40px, 8vh, 88px)) var(--gutter) 72px;margin-inline-start:auto;margin-inline-end:auto;position:relative}.case-head{flex-direction:column;gap:18px;display:flex}.case-head h1{font-size:clamp(2.8rem,7vw,5.2rem)}.case-summary{max-width:34ch;font-family:var(--font-display);letter-spacing:-.015em;font-size:clamp(1.25rem,2.1vw,1.6rem);font-weight:500;line-height:1.3}.case-head .project-facts{border-top:1px solid color-mix(in srgb, var(--tone,var(--accent)) 55%, transparent);grid-template-columns:repeat(3,auto);justify-content:start;gap:6px 34px;margin:0;padding-top:16px;display:grid}.case-head .project-facts dt{color:var(--muted);font-size:.78rem}.case-head .project-facts dd{font-size:.95rem;font-weight:600}.case-head .stack-line{font-family:var(--font-mono);color:var(--muted);font-size:.76rem}.case-head .actions{flex-wrap:wrap;gap:12px;margin-top:6px;display:flex}[data-view="3d"]:not(.no-webgl) .case-main{max-width:1120px;padding-top:var(--nav-h)}[data-view="3d"]:not(.no-webgl) .case-head h1{font-size:clamp(2.6rem,5vw,4.2rem)}[data-view="3d"]:not(.no-webgl) .case-head{min-height:calc(100vh - var(--nav-h));min-height:calc(100svh - var(--nav-h));text-shadow:0 1px 2px #07080ae6,0 0 9px #07080a8c;justify-content:center;max-width:420px;padding-bottom:48px}[data-view="3d"]:not(.no-webgl) .case-head .btn{text-shadow:none}[data-view="3d"]:not(.no-webgl) .case-cover.is-image{display:none}[data-view="3d"]:not(.no-webgl) .case-cover{margin-top:0}.case-cover{margin-top:clamp(32px,6vh,56px)}.case-cover img,.case-cover video{border:1px solid var(--line);border-radius:var(--radius);background:#000;width:100%}.case-cover figcaption{color:var(--muted);margin-top:10px;font-size:.88rem}.case-section{border-top:1px solid var(--line);grid-template-columns:200px minmax(0,1fr);gap:16px 40px;margin-top:clamp(36px,6vh,60px);padding-top:clamp(28px,4vh,40px);display:grid}.case-section h2{font-family:var(--font-display);letter-spacing:-.02em;color:var(--tone,var(--accent));font-size:1.15rem;font-weight:600;line-height:1.3}.case-body{flex-direction:column;gap:14px;max-width:62ch;display:flex}.case-body ul{flex-direction:column;gap:14px;display:flex}.case-body li{padding-left:22px;position:relative}.case-body li:before{content:"";background:var(--tone,var(--accent));width:10px;height:1.5px;position:absolute;top:.72em;left:0}.case-gallery{gap:16px;display:grid}.case-gallery.is-tall{grid-template-columns:repeat(4,minmax(0,1fr))}.case-gallery img{border:1px solid var(--line);border-radius:var(--radius);width:100%}.case-next{border-top:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-top:clamp(48px,8vh,80px);padding-top:28px;display:flex}@media (max-width:820px),(max-aspect-ratio:9/10){[data-view="3d"]:not(.no-webgl) .case-head{justify-content:flex-end;max-width:none;padding-bottom:72px;position:relative}[data-view="3d"]:not(.no-webgl) .case-head:before{content:"";inset:46% calc(var(--gutter) * -1) 0;z-index:-1;pointer-events:none;background:linear-gradient(#0000,#07080ab3 70px,#07080ac7);position:absolute}.case-head .project-facts{grid-template-columns:repeat(3,minmax(0,auto));gap:4px 18px}.case-section{grid-template-columns:1fr}.case-gallery.is-tall{grid-template-columns:repeat(2,minmax(0,1fr))}}
