@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff)format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-latin-700-normal-BYuf6tUa.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-700-normal-D3wTyLJW.woff)format("woff")}@font-face{font-family:Space Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/space-mono-latin-700-normal-mWgeinG7.woff2)format("woff2"),url(/assets/space-mono-latin-700-normal-D7A851RN.woff)format("woff")}html.lenis,html.lenis body{height:auto}.lenis:not(.lenis-autoToggle).lenis-stopped{overflow:clip}.lenis [data-lenis-prevent],.lenis [data-lenis-prevent-wheel],.lenis [data-lenis-prevent-touch],.lenis [data-lenis-prevent-vertical],.lenis [data-lenis-prevent-horizontal]{overscroll-behavior:contain}.lenis.lenis-smooth iframe{pointer-events:none}.lenis.lenis-autoToggle{transition-behavior:allow-discrete;transition-property:overflow;transition-duration:1ms}:root{--fg:#e8e8e8;--dim:#8f8f8f;--faint:#343434;--head:#fff;--r:1;--mono:"JetBrains Mono", ui-monospace, Menlo, monospace;--display:"Space Mono", "JetBrains Mono", ui-monospace, monospace}[data-theme=green]{--fg:#00ff41;--dim:#00b52e;--faint:#0b3f18;--head:#d9ffe3}*,:before,:after{box-sizing:border-box}html{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;-webkit-text-size-adjust:100%;background:#000}body{color:var(--fg);font:400 15px/1.65 var(--mono);background:#000;margin:0;overflow-x:hidden}.js body:not(.ready){visibility:hidden;animation:0s 4s forwards failsafe}@keyframes failsafe{to{visibility:visible}}h1,h2,h3,h4,p,ul,ol,dl,dd,figure{margin:0;padding:0}ul,ol{list-style:none}a{color:inherit}img{max-width:100%;display:block}:focus-visible{outline:2px solid var(--head);outline-offset:3px}::selection{background:var(--fg);color:#000}.sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.skip{z-index:2000;background:var(--fg);color:#000;padding:8px 14px;position:fixed;top:-60px;left:12px}.skip:focus{top:12px}.bg-rain{z-index:0;opacity:.055;pointer-events:none;width:100%;height:100%;position:fixed;inset:0}.shape{--dim:0;z-index:0;pointer-events:none;aspect-ratio:1;width:min(92vh,58vw);transform:translate(calc(var(--dim) * 24%), -50%);opacity:calc(1 - var(--dim) * .84);position:fixed;top:50%;right:-1vw}.overlay{z-index:1000;pointer-events:none;width:100%;height:100%;position:fixed;inset:0}body:after{content:"";z-index:900;pointer-events:none;background:repeating-linear-gradient(0deg,#00000029 0 1px,#0000 1px 3px),radial-gradient(#0000 55%,#0000008c 100%);position:fixed;inset:0}body:before{content:"";z-index:899;pointer-events:none;opacity:.05;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");position:fixed;inset:0}.top{z-index:50;background:linear-gradient(#000 55%,#0000);align-items:center;gap:24px;padding:14px clamp(16px,3vw,32px);display:flex;position:fixed;inset:0 0 auto}.logo{font:700 1.1rem var(--display);margin-right:auto;text-decoration:none}.logo span{animation:1.1s step-end infinite blink}.top ul{gap:22px;display:flex}.top nav a{letter-spacing:.08em;text-transform:uppercase;color:var(--dim);font-size:.78rem;text-decoration:none}.top nav a:hover{color:var(--head)}@keyframes blink{50%{opacity:0}}.btn{font:inherit;letter-spacing:.08em;text-transform:uppercase;color:var(--fg);border:1px solid var(--dim);cursor:pointer;white-space:nowrap;background:#000;padding:.55em 1.1em;font-size:.78rem;text-decoration:none;display:inline-block}.btn:hover,.btn--solid{background:var(--fg);color:#000;border-color:var(--fg)}.btn--solid:hover{color:var(--fg);background:#000}.kbd{padding:.3em .7em}.links{z-index:1;flex-wrap:wrap;gap:10px;margin-top:20px;display:flex;position:relative}.badge{text-transform:uppercase;letter-spacing:.08em;border:1px dashed var(--dim);color:var(--dim);padding:.55em 1.1em;font-size:.72rem}.meta{color:var(--dim);letter-spacing:.04em;font-size:.8rem}.chips{flex-wrap:wrap;gap:8px;margin-top:14px;display:flex}.chips li{border:1px solid var(--faint);color:var(--dim);padding:.15em .75em;font-size:.76rem}.label{font:400 .76rem var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--dim);margin-top:26px}.label:first-child{margin-top:0}.label--big{font:700 1.3rem var(--display);color:var(--fg);margin:56px 0 18px}.num{font-family:var(--display);color:var(--head);font-variant-numeric:tabular-nums;font-weight:700}kbd{font:inherit;border:1px solid var(--faint);color:var(--fg);padding:0 .4em}[data-construct]{position:relative}.c-layer{z-index:2;pointer-events:none;width:100%;height:100%;position:absolute;inset:0}[data-construct=rain]>:not(.c-layer){-webkit-mask-image:linear-gradient(90deg, #000 calc(var(--r) * 115% - 15%), transparent calc(var(--r) * 115%));-webkit-mask-image:linear-gradient(90deg, #000 calc(var(--r) * 115% - 15%), transparent calc(var(--r) * 115%));mask-image:linear-gradient(90deg, #000 calc(var(--r) * 115% - 15%), transparent calc(var(--r) * 115%))}[data-construct=scan]>:not(.c-layer){-webkit-mask-image:linear-gradient(180deg, #000 calc(var(--r) * 100%), transparent calc(var(--r) * 100% + 2px));-webkit-mask-image:linear-gradient(180deg, #000 calc(var(--r) * 100%), transparent calc(var(--r) * 100% + 2px));mask-image:linear-gradient(180deg, #000 calc(var(--r) * 100%), transparent calc(var(--r) * 100% + 2px))}[data-construct=assemble]>:not(.c-layer){opacity:var(--r)}[data-construct].is-built>:not(.c-layer){opacity:1;-webkit-mask-image:none;mask-image:none}[data-construct].is-built>img{transition:opacity .25s}[data-construct].is-ascii>img{opacity:0}[data-construct=decode]{white-space:pre-wrap}.card{border:1px solid color-mix(in srgb, var(--dim) calc(var(--r) * 55%), transparent);background:rgb(0 0 0/calc(var(--r) * .8));padding:clamp(18px,3vw,32px)}.hero{z-index:1;touch-action:pan-y;-webkit-user-select:none;user-select:none;flex-direction:column;justify-content:flex-end;min-height:100svh;padding:18vh clamp(16px,5vw,72px) 9vh;display:flex;position:relative}.hero>*{max-width:44rem}.hero__name{font:700 clamp(2.5rem, 8.2vw, 7.2rem) / .98 var(--display);letter-spacing:-.03em;color:var(--head);text-shadow:0 0 24px #000,0 0 4px #000;margin:10px 0 22px;display:block}.hero__name span{white-space:pre;display:block}.hero__tag{min-height:1.7em;font-size:clamp(1rem,2.2vw,1.4rem)}.caret{animation:1s step-end infinite blink}.hero__status{color:var(--fg);text-shadow:0 0 8px #000;margin:14px 0 6px}.hero__hint{margin-top:34px}main{z-index:1;position:relative}.sec{max-width:1160px;margin:0 auto;padding:16vh clamp(16px,3vw,32px) 4vh}.sec-head{align-items:baseline;gap:18px;margin-bottom:36px;display:flex}.sec-no{color:var(--dim);font-size:.85rem}h2{font:700 clamp(1.9rem, 5.6vw, 3.8rem) / 1.05 var(--display);letter-spacing:-.02em;text-transform:uppercase;color:var(--head)}h3{font:700 1.35rem/1.25 var(--display);color:var(--head)}h4{font:700 1rem/1.3 var(--display);color:var(--head)}.lead{font-size:1.02rem;line-height:1.8}.bullets{margin-top:14px}.bullets li{margin-top:8px;padding-left:1.6em;position:relative}.bullets li:before{content:">";color:var(--dim);position:absolute;left:0}.grid{grid-template-columns:repeat(3,1fr);gap:20px;margin-top:20px;display:grid}.grid--2{grid-template-columns:1fr 1fr}.grid--contact{grid-template-columns:1.6fr 1fr}.about{grid-template-columns:1.55fr 1fr;align-items:start;gap:28px;display:grid}.portrait{aspect-ratio:4/5}[data-ascii=keep]>img{opacity:0!important}.portrait img{object-fit:cover;filter:grayscale()brightness(1.15)drop-shadow(0 0 1px #ffffff8c);width:100%;height:100%}.readout>div{border-bottom:1px dashed var(--faint);grid-template-columns:13rem 1fr;gap:16px;padding:12px 0;display:grid}.readout dt{text-transform:uppercase;letter-spacing:.1em;color:var(--dim);padding-top:2px;font-size:.78rem}.readout dt:before{content:"[ok] ";color:var(--head)}.readout i{color:var(--faint);font-style:normal}.scan .meta{margin:4px 0}.timeline{gap:24px;padding-left:44px;display:grid;position:relative}.tl{pointer-events:none;width:18px;height:100%;position:absolute;top:0;left:6px}.project__tag{color:var(--dim);margin:2px 0 12px}.project{flex-direction:column;gap:20px;display:flex;position:relative}.project--hero{grid-template-columns:1.1fr 1fr;align-items:center;gap:28px;display:grid}.project h3 a{text-decoration:none}.project--hero h3{font-size:clamp(1.8rem,4vw,3rem)}.stretch:after{content:"";position:absolute;inset:0}.project:hover{border-color:var(--head)}.shot{aspect-ratio:16/10;border:1px solid var(--faint);z-index:1;background:#000;overflow:hidden}.shot img{object-fit:cover;filter:grayscale();width:100%;height:100%}.stats{flex-wrap:wrap;gap:18px 34px;margin:18px 0 4px;display:flex}.stats dt{font-size:clamp(1.7rem,3.4vw,2.5rem);line-height:1.1}.stats dd{color:var(--dim);max-width:15ch;font-size:.76rem}.more{grid-template-columns:1fr 1fr;gap:20px;display:grid}.more h4 a{text-decoration:none}.more p{margin-top:8px}.edu li+li{border-top:1px dashed var(--faint);margin-top:22px;padding-top:22px}.term{padding:0;font-size:.86rem}.term__bar{border-bottom:1px solid var(--faint);color:var(--dim);padding:8px 16px;font-size:.76rem}.term__bar:before{content:"● ● ●  ";letter-spacing:2px}.term__out{white-space:pre-wrap;overflow-wrap:anywhere;height:320px;padding:14px 16px 0;overflow-y:auto}.term__out a{color:var(--head)}.term__out .cmd{color:var(--dim)}.term__in{align-items:center;gap:10px;padding:10px 16px 14px;display:flex}.term__in label{color:var(--dim);white-space:nowrap}.term__in input{min-width:0;color:var(--head);font:inherit;caret-color:var(--head);background:0 0;border:0;outline:none;flex:1;padding:0;font-size:max(16px,.86rem)}.term:focus-within{border-color:var(--head)}.plain li{overflow-wrap:anywhere;margin-top:12px}.plain+.meta{margin-top:22px}.foot{z-index:1;text-align:center;color:var(--dim);padding:12vh 16px 8vh;font-size:.8rem;position:relative}.case{z-index:800;overscroll-behavior:contain;background:#000;padding:12vh clamp(16px,4vw,40px) 10vh;position:fixed;inset:0;overflow-y:auto}.case[hidden]{display:none}.case__inner{max-width:880px;margin:0 auto}.case__close{margin-bottom:40px}.case h2{margin:6px 0}.case .shot{margin-top:30px}.case .bullets{margin:26px 0;font-size:1rem}.surge{border:1px solid var(--faint);font:400 clamp(7px, 1.25vw, 13px) / 1.2 var(--mono);color:var(--fg);margin:26px 0 8px;padding:14px;overflow:hidden}.palette{width:min(560px,92vw);color:var(--fg);border:1px solid var(--fg);font:inherit;background:#000;margin:0 auto;padding:0;top:18vh}.palette::backdrop{background:#000000bf}.palette input{border:0;border-bottom:1px solid var(--faint);width:100%;color:var(--head);font:inherit;background:0 0;outline:none;padding:14px 16px;font-size:16px}.palette ul{max-height:46vh;overflow-y:auto}.palette li{cursor:pointer;justify-content:space-between;gap:12px;padding:9px 16px;display:flex}.palette li small{color:var(--dim)}.palette li[aria-selected=true]{background:var(--fg);color:#000}.palette li[aria-selected=true] small{color:#000}.boot{z-index:1100;white-space:pre-wrap;visibility:visible;cursor:pointer;background:#000;padding:14vh 8vw;font-size:clamp(.85rem,2vw,1.15rem);position:fixed;inset:0}.boot small{color:var(--dim);position:absolute;bottom:8vh;right:8vw}.has-cursor,.has-cursor *{cursor:none!important}.cursor,.cursor-trail{z-index:1200;pointer-events:none;font:400 16px/1 var(--mono);color:#fff;mix-blend-mode:difference;will-change:transform;position:fixed;top:0;left:0}.cursor-trail{color:var(--fg);mix-blend-mode:normal;opacity:0;font-size:12px}@media (width<=900px){.top nav{display:none}.grid,.grid--2,.grid--contact,.about,.project--hero,.more{grid-template-columns:1fr}.portrait{grid-row:1;justify-self:center;max-width:300px}.readout>div{grid-template-columns:1fr;gap:4px}}@media (width<=720px){body{font-size:14px}.shape{width:100vw;opacity:calc(1 - var(--dim) * .88);top:5vh;left:0;right:auto;transform:none}.hero{background:linear-gradient(#0000 22%,#000 40%);padding-bottom:7vh}.sec{padding-top:12vh}.timeline{padding-left:28px}.tl{left:0}.term__out{height:260px}.term__in label span[aria-hidden]{font-size:0}.term__in label span[aria-hidden]:after{content:"$";font-size:.86rem}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}
