@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(../media/archivo-vietnamese-wght-normal.3cb37nm8mowb2.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:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(../media/archivo-latin-ext-wght-normal.3m-fabn93du09.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:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(../media/archivo-latin-wght-normal.1_q0qa17ptz5n.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:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(../media/hanken-grotesk-cyrillic-ext-wght-normal.07ewmub69jyjv.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:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(../media/hanken-grotesk-vietnamese-wght-normal.3rx-smsylr51a.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:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(../media/hanken-grotesk-latin-ext-wght-normal.23qn2_caajicl.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:Hanken Grotesk Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(../media/hanken-grotesk-latin-wght-normal.3241148m1u9do.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:Fragment Mono;font-style:normal;font-display:swap;font-weight:400;src:url(../media/fragment-mono-cyrillic-ext-400-normal.1rf2iey7w_v53.woff2)format("woff2"),url(../media/fragment-mono-cyrillic-ext-400-normal.2qymmv2ayrso7.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Fragment Mono;font-style:normal;font-display:swap;font-weight:400;src:url(../media/fragment-mono-latin-ext-400-normal.3d0vj9v5mo1hw.woff2)format("woff2"),url(../media/fragment-mono-latin-ext-400-normal.3zvauxhahlag8.woff)format("woff");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:Fragment Mono;font-style:normal;font-display:swap;font-weight:400;src:url(../media/fragment-mono-latin-400-normal.2v-t370is4vd7.woff2)format("woff2"),url(../media/fragment-mono-latin-400-normal.08g3b72h_fogd.woff)format("woff");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{--paper:#fff;--ink:#141414;--accent:#ff3b1f;--muted:#555;--soft:#9a9a9a;--light:#d9d9d9;--display:"Archivo Variable",sans-serif;--body:"Hanken Grotesk Variable",sans-serif;--mono:"Fragment Mono",monospace;--unit:min(1vw,16px);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:24px}body{background:var(--paper);color:var(--ink);font-family:var(--body);margin:0;font-size:18px;line-height:1.4}a{color:inherit;text-underline-offset:.22em;text-decoration:none}button{font:inherit}a:hover{text-decoration:underline}button,a{-webkit-tap-highlight-color:transparent}button{cursor:pointer}::selection{background:var(--accent);color:var(--paper)}:focus-visible{outline:3px solid var(--accent);outline-offset:5px}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-thumb{background:var(--muted);border:2px solid var(--paper)}h1,h2,h3,p,figure{margin:0}h1,h2,h3{font-family:var(--display);font-weight:900}ul,ol{margin:0;padding:0;list-style:none}img{width:100%;display:block}svg{flex-shrink:0}.site-shell{max-width:1600px;margin:auto;overflow:clip}.mono{font-family:var(--mono);letter-spacing:.04em;text-transform:uppercase;font-size:12px;line-height:1.6}.button{background:var(--ink);color:var(--paper);border-radius:4px;justify-content:center;align-items:center;gap:12px;padding:16px 22px;font-size:16px;font-weight:700;line-height:1.2;transition:background .18s;display:inline-flex}.button:hover{background:var(--muted);text-decoration:none}.button-red{background:var(--accent);color:var(--paper)}.skip-link{background:var(--ink);color:var(--paper);z-index:20;padding:12px;position:absolute;top:20px;left:20px;transform:translateY(-180%)}.skip-link:focus{transform:none}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.halftone{background:var(--paper);width:100%;height:100%;position:relative;overflow:hidden}.halftone img,.halftone canvas{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.halftone .unscreened{filter:grayscale()contrast(1.1)}.halftone canvas{opacity:0;transition:opacity .6s}.halftone.is-ready canvas{opacity:1}.js .halftone img{opacity:0;transition:opacity .8s}.js .halftone.is-failed img{opacity:1}.hero{height:calc(75 * var(--unit));min-height:720px;position:relative;overflow:hidden}.hero-photo{transform-origin:0 0;width:90.278%;height:83.333%;position:absolute;top:-23.148%;left:26.389%;transform:rotate(-8deg)}.hero-nav{z-index:2;max-width:300px;position:absolute;top:4.074%;left:3.333%}.identity{font-family:var(--display);letter-spacing:-.027em;font-size:22px;font-weight:900;line-height:1.2}.identity span{font-family:var(--mono);letter-spacing:.045em;color:var(--muted);text-transform:uppercase;margin-top:4px;font-size:11px;font-weight:400;line-height:1.5;display:block}.hero-github{z-index:2;padding:14px 20px;position:absolute;top:4.074%;right:3.333%}.hero-intro{border-top:2px solid var(--ink);flex-direction:column;align-items:flex-start;gap:20px;width:22.917%;padding-top:20px;display:flex;position:absolute;top:32.407%;left:3.333%}.hero-intro>p:first-child{font-size:18px;line-height:1.4}.update-date{white-space:nowrap;align-items:center;gap:6px;font-size:15px;font-weight:600;display:flex}.update-date svg{color:var(--accent);margin-right:4px}.hero-title{width:75%;font-size:calc(9.3056 * var(--unit));letter-spacing:-.0373em;transform-origin:0 0;z-index:1;line-height:.9;position:absolute;top:68.056%;left:2.778%;transform:rotate(-8deg)}.hero-title span{white-space:normal;text-wrap:balance;display:block}.hero-title span+span{color:var(--accent);margin-top:calc(.8 * var(--unit));margin-left:calc(1.111 * var(--unit))}.projects{height:calc(120.833 * var(--unit));min-height:1450px;position:relative;overflow:hidden}.controller-photo{width:47.222%;height:41.38%;position:absolute;top:58.62%;left:52.778%}.diagonal-score{transform-origin:0 0;width:138.889%;position:absolute;top:25.287%;left:-17.361%;transform:rotate(-18deg)}.projects-heading{background:var(--paper);align-items:flex-end;gap:32px;padding:0 0 20px 15%;display:flex}.projects-heading h2{font-size:calc(11.6667 * var(--unit));letter-spacing:-.036em;line-height:.9}.code-photo{height:calc(20.8333 * var(--unit))}.project-row{border-top:1px solid var(--ink);background:var(--paper)}.project-row>a{padding:calc(1.875 * var(--unit)) 18% calc(1.875 * var(--unit));align-items:flex-end;gap:24px;transition:background .15s;display:flex}.project-row>a:hover{background:#f3f3f3;text-decoration:none}.project-row h3{font-size:calc(6.6667 * var(--unit));letter-spacing:-.031em;overflow-wrap:anywhere;max-width:38%;line-height:1}.project-scale-1 h3{font-size:calc(5.4167 * var(--unit))}.project-scale-2 h3{font-size:calc(4.3056 * var(--unit))}.project-scale-3 h3{font-size:calc(3.3333 * var(--unit))}.project-scale-1>a{padding-top:calc(1.528 * var(--unit));padding-bottom:calc(1.528 * var(--unit))}.project-scale-2>a{padding-top:calc(1.181 * var(--unit));padding-bottom:calc(1.181 * var(--unit))}.project-scale-3>a{padding-top:calc(.903 * var(--unit));padding-bottom:calc(.903 * var(--unit))}.project-copy{flex-direction:column;gap:4px;max-width:36%;display:flex}.project-copy .mono{color:var(--muted)}.project-copy p{font-size:18px;font-weight:600}.project-copy .project-detail{color:var(--muted);font-size:15px;font-weight:400}.project-arrow{width:30px;height:30px;margin-left:0}.project-empty{background:var(--paper);padding:30px 18%}.writing-band{background:var(--accent);color:var(--paper);padding:calc(2.5 * var(--unit)) 18% calc(2.778 * var(--unit));scroll-margin-top:70px}.writing-band h2{font-size:calc(7.778 * var(--unit));letter-spacing:-.0357em;text-wrap:balance;max-width:85%;margin:12px 0;line-height:.95}.writing-band p{font-weight:600}.projects-actions{align-items:center;gap:28px;font-size:16px;font-weight:600;display:flex;position:absolute;bottom:3.5%;left:4.444%}.extra-sections{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:48px;padding:64px;display:grid}.extra-sections h2{margin-bottom:20px;font-size:36px;line-height:1.1}.extra-sections p{white-space:pre-line}.background{background:var(--ink);color:var(--paper)}.background-meta{border-bottom:1px solid var(--muted);justify-content:space-between;gap:20px;padding:36px 4.444% 18px;display:flex}.background-meta span:not(:first-child){color:var(--soft)}.background-head{gap:calc(3.889 * var(--unit));grid-template-columns:1fr 1fr;padding:64px 0 0 4.444%;display:grid}.background-copy{min-width:0}.number-stack{--step:calc(2.361 * var(--unit));font-variant-numeric:tabular-nums;height:calc(34.722 * var(--unit));font-family:var(--display);font-size:calc(23.611 * var(--unit));letter-spacing:-.04em;font-weight:900;line-height:.78;position:relative}.number-stack span{color:#2a2a2a;position:absolute;top:0;left:0}.number-stack span:nth-child(2){color:#3c3c3c}.number-stack span:nth-child(3){color:#555}.number-stack span:nth-child(4){color:#777}.number-stack span:nth-child(5){color:#9a9a9a}.number-stack span:nth-child(6){color:#d9d9d9}.number-stack span:nth-child(7){color:var(--paper)}.background-copy h2{font-size:calc(4.444 * var(--unit));letter-spacing:-.031em;white-space:pre-line;margin:36px 0 20px;line-height:.98}.background-copy>p{max-width:520px;color:var(--light);font-size:19px;line-height:1.5}.studio-photo{min-width:0}.studio-photo .halftone{height:calc(52.778 * var(--unit))}.studio-photo figcaption{color:var(--soft);margin-top:14px;padding-right:64px;font-size:11px}.archive{padding-top:120px}.archive-heading{flex-direction:column;gap:10px;padding:0 4.444%;display:flex}.archive-heading .mono{color:var(--soft)}.archive-heading h2{letter-spacing:-.025em;font-size:40px;line-height:1.1}.timeline{scrollbar-color:var(--muted) var(--ink);gap:0;padding:40px 4.444%;display:flex;overflow-x:auto}.timeline-item{border-left:1px solid var(--muted);min-width:260px;font-family:var(--mono);color:var(--soft);flex:1;padding:0 24px 0 20px;font-size:12px}.month-stack{height:104px;font-family:var(--display);letter-spacing:-.035em;font-size:60px;font-weight:900;line-height:1;display:block;position:relative}.month-stack>span{color:#353535;position:absolute;top:0;left:0}.month-stack>span:nth-child(2){color:#555;top:12px}.month-stack>span:nth-child(3){color:#9a9a9a;top:24px}.month-stack>span:nth-child(4){color:var(--paper);top:36px}.archive-empty{color:var(--soft);padding:22px 0}.timeline-track{border-top:1px solid var(--muted);text-align:right;height:50px;margin:0 4.444%;position:relative}.timeline-track:after{content:"";background:var(--accent);width:4px;height:40px;position:absolute;top:-1px;right:0}.timeline-track span{padding:10px 20px;font-size:11px;display:inline-block}.contact{border-top:1px solid var(--muted);margin-top:120px;padding:56px 4.444% 0}.contact h2{letter-spacing:-.035em;white-space:pre-line;margin:0 0 28px;font-size:72px;line-height:.95}.contact-actions{align-items:center;gap:28px;font-size:16px;display:flex}.contact-actions>a{align-items:center;gap:12px;display:inline-flex}.wordmark{--step:calc(1.528 * var(--unit));font-family:var(--display);font-size:calc(16.25 * var(--unit));letter-spacing:-.04em;height:calc(22.917 * var(--unit));margin-top:72px;font-weight:900;line-height:.8;position:relative;overflow:hidden}.wordmark span{color:#202020;position:absolute;top:0;left:2.917%}.wordmark span:nth-child(2){color:#2a2a2a}.wordmark span:nth-child(3){color:#353535}.wordmark span:nth-child(4){color:#444}.wordmark span:nth-child(5){color:#555}.wordmark span:nth-child(6){color:#7a7a7a}.wordmark span:nth-child(7){color:var(--paper)}.bottom-bar{border-top:1px solid var(--muted);color:var(--soft);justify-content:space-between;align-items:center;gap:24px;padding:22px 4.444% 28px;font-size:11px;display:flex}.bottom-links a+a:before{content:" · ";color:var(--soft)}.detail-page{max-width:1000px;min-height:100vh;margin:auto;padding:64px 28px 120px}.detail-nav{border-bottom:1px solid var(--ink);justify-content:space-between;margin-bottom:80px;padding-bottom:28px;display:flex}.detail-page h1{letter-spacing:-.035em;overflow-wrap:anywhere;font-size:clamp(56px,9vw,120px);line-height:.95}.detail-page .detail-summary{max-width:32ch;margin:32px 0;font-size:28px;line-height:1.35}.detail-body{white-space:pre-line;max-width:65ch;font-size:20px;line-height:1.5}.detail-page section{margin:64px 0}.detail-page section h2{margin-bottom:20px;font-size:36px}.detail-links{flex-wrap:wrap;gap:24px;margin-top:40px;display:flex}.detail-image{object-fit:cover;max-height:600px;margin:40px 0}.detail-page ul{flex-direction:column;gap:12px;margin-top:24px;display:flex}.detail-error{place-content:center;gap:24px;min-height:100svh;padding:48px;display:grid}@media (min-width:769px) and (max-width:1150px){.hero-intro>p:first-child{font-size:16px}.hero-intro .update-date{font-size:12px}.hero-title{top:72.6%}.hero{min-height:800px}.projects{min-height:1500px}.project-copy p{font-size:16px}.project-copy .project-detail{font-size:13px}.project-copy .mono{font-size:10px}.contact h2{font-size:56px}.contact-actions{flex-direction:column;align-items:flex-start;gap:18px}.background-copy>p{font-size:17px}.background-copy h2{font-size:48px}.studio-photo .halftone{height:600px}}@media (max-width:768px){:root{--unit:1vw}body{font-size:17px}.hero{flex-direction:column;height:auto;min-height:0;padding:20px 20px 44px;display:flex;overflow:hidden}.hero-nav{order:0;max-width:none;padding-right:121px;position:relative;inset:auto}.hero-github{gap:8px;padding:10px 14px;top:20px;right:20px}.hero-photo{aspect-ratio:550/320;order:1;width:141vw;height:auto;margin:-8px 0 0 -60px;position:relative;inset:auto}.hero-title{letter-spacing:-.042em;order:2;width:calc(100% + 24px);margin:26px 0 44px 4px;font-size:clamp(56px,18.5vw,80px);position:relative;inset:auto}.hero-title span+span{margin-top:5px;margin-left:16px}.hero-intro{order:3;gap:20px;width:100%;padding-top:20px;position:relative;inset:auto}.projects{flex-direction:column;height:auto;min-height:0;padding:56px 0 40px;display:flex;overflow:hidden}.diagonal-score{z-index:1;order:1;width:100%;margin:0;position:relative;inset:auto;transform:none}.projects-heading,.code-photo,.project-row,.writing-band{width:125%;margin-left:-12%;transform:rotate(-8deg)}.projects-heading{margin-bottom:12px;padding:0 12% 20px 15.5%}.projects-heading h2{font-size:clamp(66px,23.6vw,120px)}.code-photo{height:31vw}.project-row>a{grid-template-columns:auto 1fr;align-items:center;gap:6px 10px;padding:16px 12% 16px 15.5%;display:grid}.project-copy{display:contents}.project-copy .mono{grid-area:1/1/2/3;font-size:11px}.project-row h3{grid-area:2/1;max-width:none;font-size:clamp(48px,15.4vw,80px)}.project-scale-1 h3{font-size:clamp(42px,12.8vw,68px)}.project-scale-2 h3{font-size:clamp(36px,11.3vw,60px)}.project-scale-3 h3{font-size:clamp(32px,9.7vw,52px)}.project-copy p{grid-column:1/3;font-size:16px}.project-copy .project-detail{font-size:14px}.project-arrow{grid-area:2/2;width:.4em;height:.4em;font-size:clamp(48px,15.4vw,80px)}.project-scale-1 .project-arrow{font-size:clamp(42px,12.8vw,68px)}.project-scale-2 .project-arrow{font-size:clamp(36px,11.3vw,60px)}.project-scale-3 .project-arrow{font-size:clamp(32px,9.7vw,52px)}.project-empty{padding:30px 12% 30px 15.5%}.writing-band{padding:22px 12% 26px 20%}.writing-band .mono{font-size:11px}.writing-band h2{overflow-wrap:normal;max-width:68vw;margin:8px 0;font-size:clamp(48px,16.4vw,84px);line-height:.9}.writing-band p{max-width:58vw;font-size:16px;line-height:1.35}.controller-photo{aspect-ratio:390/446;order:2;width:100%;height:auto;margin-top:-84px;position:relative;inset:auto}.projects-actions{flex-direction:column;order:3;align-items:flex-start;gap:16px;margin:24px 20px 0;position:relative;inset:auto}.extra-sections{padding:48px 20px}.background-meta{border:0;gap:12px;padding:28px 20px 0;font-size:12px}.background-meta span:nth-child(2){display:none}.background-head{grid-template-columns:1fr;gap:40px;padding:40px 0 0}.background-copy{padding:0 20px}.number-stack{--step:3.59vw;height:67.2vw;margin-left:-1vw;font-size:56.4vw}.background-copy h2{letter-spacing:-.034em;margin:24px 0;font-size:44px;line-height:.98}.background-copy>p{font-size:17px}.studio-photo .halftone{aspect-ratio:390/446;height:auto}.studio-photo figcaption{margin-top:12px;padding:0 20px;font-size:11px}.archive{padding-top:72px}.archive-heading{padding:0 20px}.archive-heading h2{font-size:34px}.timeline{grid-template-columns:1fr 1fr;gap:28px 16px;padding:28px 20px 0;display:grid;overflow:visible}.timeline-item{min-width:0;padding:0 8px 0 14px}.month-stack{height:84px;font-size:52px}.archive-empty{grid-column:1/-1;font-size:16px}.timeline-track{display:none}.contact{border:0;margin-top:0;padding:96px 20px 0}.contact h2{font-size:60px}.contact-actions{flex-direction:column;align-items:flex-start;gap:16px;font-size:17px}.wordmark{--step:2.05vw;height:31.8vw;margin-top:48px;font-size:17.4vw}.wordmark span{left:4.1%}.bottom-bar{flex-direction:column;align-items:flex-start;gap:8px;padding:20px 20px 28px}.detail-nav{margin-bottom:56px;font-size:14px}.detail-page{padding:32px 24px 80px}.detail-page .detail-summary{font-size:24px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition:none!important;animation:none!important}}@media (min-width:769px){.projects{height:calc(120.833 * var(--unit) + var(--project-extra-space,0px))}.diagonal-score{top:calc(30.556 * var(--unit))}.hero-title-long{font-size:calc(7 * var(--unit))}}:root{--accent-control:#d82e16}.button-red{background:var(--accent-control)}.button-red:hover{background:#b9210c}.writing-band>.mono,.writing-band>p{color:var(--ink)}:root{--ease-out:cubic-bezier(.16,1,.3,1)}@keyframes fade-rise{0%{opacity:0;translate:0 28px}}@keyframes ink-wipe{0%{opacity:0;clip-path:inset(-10% 100% -10% 0);translate:-24px}to{clip-path:inset(-10% -4% -10% 0)}}[data-intro]{animation:fade-rise 1.1s var(--ease-out) var(--d,0s) backwards}[data-intro=wipe]{animation:ink-wipe 1.3s var(--ease-out) var(--d,0s) backwards}.js [data-reveal]{opacity:0;transition:opacity 1s ease var(--d,0s),translate 1.2s var(--ease-out) var(--d,0s);translate:0 36px}.js [data-reveal].is-in{opacity:1;translate:none}.echo-stack span{translate:0 calc(var(--i) * var(--step) * var(--fan,1));will-change:translate}.echo-stack span:not(:last-child){opacity:calc(.25 + .75 * var(--fan,1))}@media (prefers-reduced-motion:reduce){.js [data-reveal]{opacity:1;translate:none}}
