@font-face{font-family:Geist;src:url(/fonts/Geist-Variable.woff2)format("woff2");font-style:normal;font-weight:100 900;font-display:swap}@font-face{font-family:Geist Mono;src:url(/fonts/GeistMono-Variable.woff2)format("woff2");font-style:normal;font-weight:100 900;font-display:swap}:root{color-scheme:dark;--bg:#0c0c0c;--panel:#131313;--panel-2:#181818;--ink:#ededed;--soft:#b4b4b4;--muted:#999;--faint:#777;--line:#232323;--line-2:#2e2e2e;--accent:#ff9f45;--accent-dim:#ff9f4533;--ease:cubic-bezier(.2,.7,.2,1);--sans:"Geist",ui-sans-serif,system-ui,sans-serif;--mono:"Geist Mono",ui-monospace,Consolas,monospace}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;font-size:15px;line-height:1.6}body{margin:0}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;padding:0}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}.wrap{max-width:1080px;margin:0 auto;padding-inline:clamp(16px,4vw,40px)}.ul{transition:color .2s}.ul:hover{color:var(--accent)}html{scroll-padding-top:72px}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}.nav{z-index:10;-webkit-backdrop-filter:blur(12px)saturate(1.2);background:#0c0c0ccc;border-bottom:1px solid #0000;transition:border-color .3s,background .3s;position:sticky;top:0}.nav.stuck{border-bottom-color:var(--line);background:#0c0c0ce6}.nav .wrap{justify-content:space-between;align-items:center;gap:16px;height:60px;font-size:14px;display:flex}.brand{letter-spacing:-.01em;font-weight:600;transition:color .2s}.brand:hover,.accent-word{color:var(--accent)}.nav nav{color:var(--muted);gap:2px;margin-right:-10px;display:flex}.nav nav a{white-space:nowrap;border-radius:6px;padding:6px 10px;transition:color .2s,background .2s}.nav nav a:hover{color:var(--ink);background:var(--panel)}.nav nav a[aria-current=true]{color:var(--ink)}@media (width<=640px){.nav .wrap{gap:8px;height:54px}.brand{font-size:13.5px}.nav nav a{padding:6px}.nav nav{margin-right:-6px}}.intro{padding-top:clamp(40px,8vh,96px)}.intro h1{letter-spacing:-.02em;margin:0;font-size:clamp(32px,4.2vw,48px);font-weight:600;line-height:1.1}.intro p{max-width:54ch;color:var(--soft);margin:18px 0 0;font-size:17px}.intro .more{gap:22px;margin-top:22px;font-size:14px;display:flex}.js .rv{transition:transform .8s var(--ease);transition-delay:calc(var(--i,0)*90ms);transform:translateY(18px)}.js .rv.in{transform:none}section{padding-top:clamp(72px,10vh,110px)}.sh{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:16px;min-height:48px;margin-bottom:36px;padding-bottom:14px;display:flex}.sh h2{margin:0;font-size:15px;font-weight:600}.sh>span,.ctrl>span{color:var(--muted);font-size:13px}.ctrl{align-items:center;gap:4px;display:flex}.tabs{gap:4px;margin-right:8px;display:flex}.tab{color:var(--muted);border-radius:6px;padding:6px 12px 9px;font-size:14px;transition:color .25s,background .25s;position:relative}.tab:hover{color:var(--ink);background:var(--panel)}.tab[aria-selected=true]{color:var(--ink)}.tab .prog{background:var(--line-2);opacity:0;border-radius:1px;height:2px;transition:opacity .25s;position:absolute;bottom:3px;left:12px;right:12px;overflow:hidden}.tab[aria-selected=true] .prog{opacity:1}.tab .prog i{background:var(--accent);width:0;height:100%;display:block}.ib{width:32px;height:32px;color:var(--muted);border-radius:6px;place-items:center;transition:color .2s,background .2s;display:grid}.ib:hover{color:var(--ink);background:var(--panel)}.ib svg{width:16px;height:16px}.stage{touch-action:pan-y;gap:72px;display:grid}.js .slide{opacity:0;visibility:hidden;transition:opacity .45s var(--ease),transform .55s var(--ease),visibility 0s linear .55s;grid-area:1/1}.js .slide.on{opacity:1;visibility:visible;transition:opacity .45s var(--ease),visibility 0s}html:not(.js) #work .ctrl,html:not(.js) #ppause{display:none}.js .slide.out{transform:translateX(calc(var(--dir,1)*-40px))}.js .slide.enter [data-s]{animation:rise .7s var(--ease) both;animation-delay:calc(var(--s)*60ms + 80ms)}.js .slide.enter .win{animation:slidein .8s var(--ease) both;animation-delay:.12s}.project-copy>:first-child{--s:0}.project-copy>:nth-child(2){--s:1}.project-copy>:nth-child(3){--s:2}.project-copy>:nth-child(4){--s:3}.project-copy>:nth-child(5){--s:4}.project-copy>:nth-child(6){--s:5}@keyframes rise{0%{transform:translateY(14px)}}@keyframes slidein{0%{opacity:0;transform:translateX(calc(var(--dir,1)*48px)) scale(.985)}}.project{grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);align-items:start;gap:clamp(24px,5vw,64px);display:grid}.project h3{letter-spacing:-.02em;margin:0;font-size:clamp(40px,5vw,56px);font-weight:600;line-height:1}.project .one{color:var(--ink);max-width:32ch;margin:14px 0 0;font-size:17px}.project .did{color:var(--soft);max-width:40ch;margin:16px 0 0}.project .meta{color:var(--muted);margin-top:18px;font-size:13px}.project .links{gap:20px;margin-top:18px;font-size:14px;display:flex}.project .note{color:var(--muted);margin-top:12px;font-size:12px}@media (width<=820px){.project{grid-template-columns:1fr}}.win{--ok:#57c78f;--warn:#f0cc5a;--bad:#ef7a72;border:1px solid var(--line-2);background:var(--panel);border-radius:10px;overflow:hidden}.bar{border-bottom:1px solid var(--line);height:34px;color:var(--muted);justify-content:space-between;align-items:center;padding:0 4px 0 12px;font-size:12px;display:flex}.bar .c{display:flex}.bar .c span{text-align:center;width:34px;color:var(--faint);font-size:11px}.body{padding:16px}.cap{color:var(--muted);margin-top:10px;font-size:12px}.row{justify-content:space-between;align-items:center;gap:12px;display:flex}.h{font-size:13px;font-weight:600}.onair{font-family:var(--mono);color:var(--soft);align-items:center;gap:7px;font-size:12px;display:inline-flex}.onair i{background:var(--bad);border-radius:50%;width:7px;height:7px;animation:1.6s infinite blink}@keyframes blink{50%{opacity:.3}}.stats{background:var(--line);border:1px solid var(--line);border-radius:8px;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;margin-top:14px;display:grid;overflow:hidden}.stat{background:var(--panel-2);padding:12px}.stat .l{color:var(--muted);font-size:11.5px}.stat .v{font-variant-numeric:tabular-nums;letter-spacing:-.01em;margin-top:2px;font-size:20px;font-weight:600}.stat .v small{color:var(--muted);margin-left:2px;font-size:12px;font-weight:500}.stat svg{width:100%;height:30px;margin-top:4px;display:block}.lanes{gap:8px;margin-top:14px;display:grid}.lane-row{color:var(--muted);grid-template-columns:58px minmax(0,1fr);align-items:center;gap:10px;font-size:11.5px;display:grid}.lane{border:1px solid var(--line);background:#0e0e0e;border-radius:5px;height:24px;position:relative;overflow:hidden}.lane i{background:#3a3a3a;border-radius:1px;width:2px;position:absolute;top:6px;bottom:6px}.lane i.m{background:var(--accent)}.hold{background:repeating-linear-gradient(135deg,#1c1c1c 0 5px,#141414 5px 10px);position:absolute;inset:0 auto 0 0}.dests{border:1px solid var(--line);border-radius:8px;margin-top:14px;font-size:12.5px;overflow:hidden}.d{border-top:1px solid var(--line);grid-template-columns:minmax(0,1fr) 120px 44px;align-items:center;gap:10px;padding:9px 12px;transition:background .4s;display:grid}.d:first-child{color:var(--muted);border-top:0;font-size:11.5px}.win .d.flag{background:#1a1712}.st{align-items:center;gap:7px;transition:color .3s;display:inline-flex}.st i{background:var(--ok);border-radius:50%;width:6px;height:6px;transition:background .3s}.st.re{color:var(--warn)}.st.re i{background:var(--warn);animation:.9s infinite blink}.n{font-family:var(--mono);color:var(--soft);text-align:right;font-size:11.5px}.teams{grid-template-columns:1fr 1fr;gap:12px;margin-top:12px;display:grid}.team{gap:4px;font-size:12.5px;display:grid}.team .t{color:var(--muted);margin-bottom:2px;font-size:11.5px}.pl{background:var(--panel-2);transition:opacity .45s var(--ease),background .3s;transition-delay:calc(var(--p,0)*70ms);border-radius:5px;justify-content:space-between;align-items:center;padding:6px 9px;display:flex}.pl.wait{opacity:.35}.win .pl.retry{background:#1d1912}.pl em{font-style:normal;font-family:var(--mono);color:var(--muted);font-size:11px}.pl.w em,.pl.retry em{color:var(--warn)}.log{border-top:1px solid var(--line);font-family:var(--mono);align-content:start;gap:4px;min-height:62px;margin-top:12px;padding-top:10px;font-size:11.5px;display:grid}.log span{color:var(--muted);animation:fadein .4s var(--ease) both}.log .a{color:var(--warn)}.log .b{color:var(--ok)}@keyframes fadein{0%{opacity:0}}@media (width<=520px){.stats{grid-template-columns:1fr 1fr}.stats .stat:last-child{grid-column:span 2}.d{grid-template-columns:minmax(0,1fr) auto}.d .n{display:none}.teams{grid-template-columns:1fr}.tabs{margin-right:0}.ib.arrow{display:none}}.nodes{grid-template-columns:repeat(7,minmax(0,1fr));display:grid;position:relative}.rail{background:var(--line-2);height:1px;position:absolute;top:7px;left:7.14286%;right:7.14286%}.rail i{background:var(--accent);width:0;height:1px;transition:opacity .4s;position:absolute;top:0;left:0}.flow.restarting .rail i,.flow.restarting .node .dot{opacity:0}.node{text-align:center;justify-items:center;gap:8px;display:grid}.node .dot{z-index:1;background:var(--bg);border:1px solid var(--line-2);border-radius:50%;width:15px;height:15px;transition:background .3s,border-color .3s,box-shadow .3s,opacity .35s;position:relative}.node.done .dot{background:var(--accent);border-color:var(--accent)}.node.on .dot{border-color:var(--accent);box-shadow:0 0 0 5px var(--accent-dim)}.node b{color:var(--muted);font-size:14.5px;font-weight:500;transition:color .3s}.node.on b,.node.done b{color:var(--ink)}.who{font-family:var(--mono);border:1px solid var(--line-2);color:var(--muted);border-radius:4px;padding:1px 7px;font-size:11px}.who.me{color:var(--accent);border-color:var(--accent-dim)}.catch{--bad:#ef7a72;--ok:#57c78f;border:1px solid var(--line-2);background:var(--panel);border-radius:10px;width:71.4286%;margin:36px 0 0 14.2857%;transition:border-color .5s;position:relative}.catch .r{grid-template-columns:110px minmax(0,1fr);align-items:baseline;gap:14px;padding:13px 16px;font-size:14.5px;transition:opacity .5s,background .5s;display:grid}.catch .r span{color:var(--soft);transition:color .4s}.catch.caught .f span,.catch.decided .dc span,.catch.fixed .x span{color:var(--ink)}.catch .r:first-child{border-radius:9px 9px 0 0}.catch .r:last-child{border-radius:0 0 9px 9px}.catch .r+.r{border-top:1px solid var(--line)}.catch .r b{font-family:var(--mono);font-size:12px;font-weight:400}.catch .f b{color:var(--bad)}.catch .dc b{color:var(--accent)}.catch .x b{color:var(--ok)}.js .catch.caught .f,.js .catch.decided .dc,.js .catch.fixed .x{opacity:1}.catch.caught{border-color:#ef7a7266}.catch.caught .f{background:#1c1414}.catch.decided{border-color:var(--accent-dim)}.catch.decided .f{background:0 0}.catch.decided .dc{background:#1d1710}.catch.fixed{border-color:#57c78f66}.catch.fixed .dc{background:0 0}.catch.fixed .x{background:#141b17}.flow-note{color:var(--muted);text-align:center;margin:14px 0 0;font-size:12.5px}@media (width<=760px){.nodes{grid-template-columns:1fr;row-gap:16px}.rail{width:1px;height:auto;inset:12px auto 12px 7px}.rail i{width:1px;height:0}.node{text-align:left;grid-template-columns:15px auto auto;justify-content:start;place-items:center start;gap:14px}.catch{width:auto;margin:24px 0 0}.catch .r{grid-template-columns:1fr;gap:2px}.flow-note{text-align:left}}.intro{grid-template-columns:minmax(0,1.2fr) minmax(0,.8fr);align-items:center;gap:clamp(32px,6vw,80px);display:grid}.path .lbl{color:var(--muted);margin-bottom:14px;font-size:13px}.path ol{gap:18px;margin:0;padding:0;list-style:none;display:grid;position:relative}.ch:not(:last-child):before,.ch:not(:last-child):after{content:"";background:var(--line-2);width:1px;height:calc(100% + 18px);position:absolute;top:22px;left:21.5px}.ch:not(:last-child):after{background:var(--accent);transform-origin:top;transition:transform .6s var(--ease);transition-delay:calc(var(--e)*.5s + .6s);transform:scaleY(0)}.path.in .ch:after,html:not(.js) .ch:after{transform:none}.ch{grid-template-columns:44px minmax(0,1fr);align-items:start;gap:16px;display:grid;position:relative}.ch svg{z-index:1;background:var(--bg);border-radius:50%;width:44px;height:44px;display:block;position:relative;overflow:visible}.ch svg *{fill:none;stroke:var(--soft);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.ch svg .a{stroke:var(--accent)}.ch svg .af{fill:var(--accent);stroke:none}.ch .yr{font-family:var(--mono);color:var(--muted);font-size:11.5px}.ch b{margin-top:1px;font-size:15px;font-weight:600;display:block}.ch span.o{color:var(--soft);font-size:13.5px;line-height:1.5;display:block}.ch span.o+span.o{color:var(--muted)}.ch.now b{color:var(--accent)}.arm1,.arm2{transform-box:view-box}.arm1{transform-origin:17px 36px;animation:arm1 5s var(--ease) infinite}.arm2{transform-origin:17px 17px;animation:arm2 5s var(--ease) infinite}@keyframes arm1{0%,to{transform:rotate(-8deg)}50%{transform:rotate(14deg)}}@keyframes arm2{0%,to{transform:rotate(18deg)}50%{transform:rotate(-26deg)}}.flick{animation:flick 3.2s var(--ease) infinite}@keyframes flick{0%,15%{transform:translate(9px,-7px)}30%,85%{transform:none}to{transform:translate(9px,-7px)}}.hit{transform-box:fill-box;transform-origin:50%;animation:hit 3.2s var(--ease) infinite}@keyframes hit{0%,28%{opacity:0;transform:scale(.4)}34%{opacity:1;transform:scale(1.3)}60%,to{opacity:0;transform:scale(1.6)}}.cur{animation:1s step-end infinite cur}@keyframes cur{50%{opacity:0}}.typed{stroke-dasharray:9;stroke-dashoffset:9px;animation:3s steps(6,end) infinite typed}@keyframes typed{0%{stroke-dashoffset:9px}60%,to{stroke-dashoffset:0}}@media (width<=820px){.intro{grid-template-columns:1fr;align-items:start}}footer{border-top:1px solid var(--line);margin-top:64px;padding-block:18px}footer .wrap{color:var(--muted);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;font-size:12.5px;display:flex}.skip-link{z-index:30;background:var(--ink);color:var(--bg);padding:8px 12px;position:absolute;top:-80px;left:12px}.skip-link:focus{top:8px}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}figure{min-width:0;margin:0}.win .bar,.win .stat .l,.win .lane-row,.win .team .t,.win .d:first-child{color:var(--muted)}.win .onair i,.win .st.re i{animation-play-state:paused}.win.motion-active .onair i,.win.motion-active .st.re i{animation-play-state:running}.path:not(.motion-active) .arm1,.path:not(.motion-active) .arm2,.path:not(.motion-active) .flick,.path:not(.motion-active) .hit,.path:not(.motion-active) .cur,.path:not(.motion-active) .typed{animation-play-state:paused}.footer-actions{align-items:center;gap:22px;display:flex}.palette-trigger{color:var(--muted);align-items:center;gap:6px;font-size:12.5px;display:inline-flex}html:not(.js) .palette-trigger{display:none}.palette-trigger:hover{color:var(--accent)}.palette-trigger kbd{font:inherit;border:1px solid var(--line-2);border-radius:4px;padding:1px 4px}.palette-overlay{z-index:30;background:#000b;position:fixed;inset:0}.palette-dialog{z-index:31;background:var(--panel);border:1px solid var(--line-2);border-radius:10px;width:min(92vw,520px);position:fixed;top:min(22vh,180px);left:50%;overflow:hidden;transform:translate(-50%);box-shadow:0 24px 80px #0008}.palette-inner{padding:20px}.palette-dialog h2{margin:0 0 12px;font-size:16px}.palette-dialog [cmdk-input]{background:var(--panel-2);border:1px solid var(--line-2);width:100%;color:var(--ink);font:inherit;border-radius:6px;padding:10px 12px}.palette-dialog [cmdk-list]{max-height:300px;margin-top:12px;overflow:auto}.palette-dialog [cmdk-group-heading]{color:var(--muted);padding:5px 8px;font-size:12px}.palette-dialog [cmdk-item]{cursor:pointer;border-radius:6px;justify-content:space-between;padding:8px;display:flex}.palette-dialog [cmdk-item][data-selected=true]{background:var(--panel-2);color:var(--accent)}.palette-help{color:var(--muted);margin:12px 0 0;font-size:12px}@media (width<=380px){.nav-github{display:none}.nav .wrap{gap:4px}.brand{font-size:12.5px}}@media (width<=640px){.footer-actions{gap:12px}.palette-trigger kbd{display:none}.sh .ctrl{gap:2px}.sh>span,.ctrl>span{font-size:11px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.2s!important;transition-delay:0s!important;animation-duration:0s!important;animation-iteration-count:1!important}.js .rv,.js .slide.out,.js .slide.enter [data-s],.js .slide.enter .win{transform:none!important}.win .onair i,.win .st.re i{animation:none!important}.hold{transition:none!important}}@media (forced-colors:active){.tab .prog i,.rail i,.node .dot,.hold{forced-color-adjust:auto}.win,.catch,.palette-dialog{border:1px solid canvastext}}.win .bar .c span{color:#999}.palette-overlay{background:0 0}
