body[data-page=software]{--phos:#4dff91;--phos-dim:#4dff918c;--phos-mute:#4dff9124;--phos-line:#4dff912e;--bg-s:#050806;background:var(--bg-s)}body[data-page=software] ::selection{background:var(--phos);color:var(--bg-s)}.s-eyebrow{color:var(--phos-dim);text-transform:none;letter-spacing:.04em}.s-eyebrow:before{background:var(--phos)}.display .serif{color:var(--bone-dim)}.btn--phos{--bg:var(--phos);--fg:var(--bg-s);--hover:var(--bone)}.btn--ghost{--hover:var(--phos)}.chip{border:1px solid var(--phos-line);color:#f3efe7cc;font-family:var(--f-mono);white-space:nowrap;background:#4dff910a;border-radius:999px;align-items:center;padding:6px 12px;font-size:12px;display:inline-flex}.s-hero{min-height:100vh;min-height:100svh;padding:calc(var(--nav-h) + 24px) 0 32px;flex-direction:column;display:flex;overflow:hidden}.s-hero__grid{background-image:linear-gradient(var(--phos-line) 1px, transparent 1px), linear-gradient(90deg, var(--phos-line) 1px, transparent 1px);opacity:.35;background-size:56px 56px;animation:20s linear infinite grid-drift;position:absolute;inset:0;-webkit-mask-image:radial-gradient(70% 60% at 70% 40%,#000,#0000 75%);mask-image:radial-gradient(70% 60% at 70% 40%,#000,#0000 75%)}@keyframes grid-drift{to{background-position:56px 56px}}.s-hero__inner{grid-template-columns:1.1fr 1fr;align-items:center;gap:clamp(30px,5vw,80px);margin-block:auto;display:grid;position:relative}.s-hero__name{margin-top:22px;font-size:clamp(56px,min(10.5vw,17svh),176px);line-height:.82}.s-hero__role{color:var(--bone-dim);margin-top:26px;font-size:clamp(18px,1.7vw,24px)}.s-hero__role .serif{color:var(--phos);font-size:1.3em}.s-dot{color:var(--phos-dim);margin:0 6px}.s-hero__ctas{flex-wrap:wrap;gap:12px;margin-top:34px;display:flex}.term-win{border:1px solid var(--phos-line);-webkit-backdrop-filter:blur(14px);background:#060c08db;border-radius:20px;overflow:hidden;box-shadow:0 40px 100px #0009,0 0 80px #4dff910f,inset 0 1px #ffffff0a}.term-win__bar{border-bottom:1px solid var(--phos-line);color:var(--phos-dim);align-items:center;gap:8px;padding:12px 16px;display:flex}.term-win__bar i{background:#ff5f57;border-radius:50%;width:11px;height:11px}.term-win__bar i:nth-child(2){background:#febc2e}.term-win__bar i:nth-child(3){background:#28c840}.term-win__bar .mono{text-transform:none;margin-left:8px;font-size:12px}.term-win__hint{color:var(--bone-mute);margin-left:auto!important}.term-win__hint b{color:var(--phos);font-weight:500}.term-win__body{height:clamp(320px,44vh,440px);font-family:var(--f-mono);color:#c9f7d9;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--phos-line) transparent;cursor:text;padding:18px 20px;font-size:13.5px;line-height:1.65;overflow-y:auto}.term-win__body .o{white-space:pre-wrap;word-break:break-word}.term-win__body .c{color:var(--bone)}.term-win__body .ps{color:var(--phos)}.term-win__body .dim{color:#c9f7d980}.term-win__body .hl{color:var(--phos)}.term-win__body .warn{color:#ffb03a}.term-win__body .err{color:#ff6b6b}.term-win__body a{color:var(--phos);text-underline-offset:3px;text-decoration:underline}.term-win__body .neo{grid-template-columns:112px 1fr;align-items:start;gap:18px;margin:6px 0;display:grid}.term-win__body .neo img{width:112px;image-rendering:pixelated;border:1px solid var(--phos-line)}.term-line{align-items:center;gap:10px;display:flex}.term-ps{color:var(--phos);white-space:nowrap}.term-line input{min-width:0;color:var(--bone);font:inherit;caret-color:var(--phos);background:0 0;border:0;outline:none;flex:1}.s-stack{--gap:10px;margin-top:clamp(40px,6vw,80px)}@media (max-width:960px){.s-hero__inner{grid-template-columns:1fr}.term-win__body{height:300px;font-size:12.5px}}.s-about{padding-block:clamp(120px,16vw,220px) clamp(60px,8vw,100px)}.s-about__lead{letter-spacing:-.035em;max-width:22ch;margin-top:30px;font-size:clamp(28px,4vw,64px);font-weight:500;line-height:1.06}.s-about__grid{grid-template-columns:1fr 1fr;gap:clamp(30px,6vw,100px);margin-top:clamp(50px,7vw,100px);display:grid}.s-about__text{color:var(--bone-dim);max-width:44ch;font-size:clamp(17px,1.4vw,21px)}.s-label{color:var(--phos-dim);text-transform:none;margin-bottom:14px}.s-do li{border-top:1px solid var(--line);grid-template-columns:40px 1fr;gap:10px;padding:14px 0;display:grid}.s-do .mono{color:var(--phos);padding-top:3px}.s-quote{border-left:2px solid var(--phos);margin-top:clamp(80px,10vw,140px);padding-left:clamp(20px,3vw,40px)}.s-quote p{max-width:22ch;font-size:clamp(34px,4.6vw,76px);line-height:1.02}@media (max-width:860px){.s-about__grid{grid-template-columns:1fr}}.arch{height:280vh}.arch__sticky{height:100vh;height:100svh;padding-top:var(--nav-h);background:radial-gradient(60% 50% at 45% 60%,#4dff9112,#0000 70%);flex-direction:column;justify-content:center;gap:clamp(20px,3vw,40px);display:flex;position:sticky;top:0;overflow:hidden}.arch__head{grid-template-columns:auto 1fr;align-items:end;column-gap:60px;display:grid}.arch__head .s-cmd{grid-column:1/-1}.arch__title{margin-top:16px;font-size:clamp(36px,min(6vw,10svh),100px)}.arch__head .lede{justify-self:end;max-width:40ch}.arch__canvas{position:relative}.arch__svg{width:100%;height:auto;max-height:52vh;overflow:visible}.arch__edges path{fill:none;stroke:var(--phos-dim);stroke-width:2px;stroke-linecap:round}.node rect{fill:#08100b;stroke:var(--phos-line);stroke-width:1.5px;transition:fill .5s,stroke .5s}.node text{fill:var(--bone);font-family:var(--f-sans);text-anchor:middle;letter-spacing:-.01em;font-size:17px;font-weight:600}.node text.sub{fill:var(--bone-mute);font-family:var(--f-mono);letter-spacing:.04em;font-size:11px;font-weight:400}.node.is-lit rect{stroke:var(--phos);fill:#0b1a10}.node--hero.is-lit rect{fill:var(--phos)}.node--hero.is-lit text{fill:var(--bg-s)}.arch__packets circle{fill:var(--phos);filter:drop-shadow(0 0 6px var(--phos))}.arch__readout{color:var(--bone-mute);justify-content:flex-end;gap:28px;margin-top:14px;display:flex}.arch__readout b{color:var(--phos);font-weight:500}@media (max-width:860px) and (orientation:portrait){.arch{height:auto}.arch__sticky{height:auto;padding-block:120px 60px;position:relative}.arch__head{grid-template-columns:1fr}.arch__head .lede{justify-self:start;margin-top:16px}.arch__canvas{padding-bottom:10px;overflow-x:auto}.arch__svg{min-width:760px;max-height:none}}.s-head{margin-bottom:clamp(40px,5vw,70px)}.s-head--row{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:30px;display:flex}.s-head .lede{margin-top:22px}.s-title{margin-top:16px;font-size:clamp(52px,7.6vw,128px)}.s-skills{padding-block:clamp(100px,12vw,180px)}.skills{border-top:1px solid var(--phos-line);border-left:1px solid var(--phos-line);grid-template-columns:repeat(3,1fr);display:grid}.skill{border-right:1px solid var(--phos-line);border-bottom:1px solid var(--phos-line);isolation:isolate;flex-direction:column;gap:16px;min-height:300px;padding:clamp(22px,2.6vw,36px);display:flex;position:relative;overflow:hidden}.skill:before{content:"";z-index:-1;background:radial-gradient(400px circle at var(--mx,50%) var(--my,50%), #4dff911f, transparent 60%);opacity:0;transition:opacity .4s;position:absolute;inset:0}.skill:hover:before{opacity:1}.skill header{justify-content:space-between;align-items:flex-start;display:flex}.skill__glyph{font-family:var(--f-mono);color:var(--phos);font-size:34px;line-height:1}.skill__n{color:var(--bone-mute)}.skill h3{font-family:var(--f-display);text-transform:uppercase;margin-top:auto;font-size:clamp(28px,2.4vw,38px);font-weight:800;line-height:.95}.skill ul{color:var(--bone-dim);flex-wrap:wrap;gap:6px 14px;font-size:14px;display:flex}.skill li:before{content:"› ";color:var(--phos-dim)}@media (max-width:960px){.skills{grid-template-columns:1fr 1fr}}@media (max-width:600px){.skills{grid-template-columns:1fr}.skill{min-height:0}}.s-exp{padding-block:clamp(60px,8vw,120px)}.exp{grid-template-columns:minmax(200px,.8fr) minmax(0,1.6fr);gap:clamp(30px,5vw,80px);display:grid}.exp__rail{top:calc(var(--nav-h) + 40px);height:calc(100vh - var(--nav-h) - 80px);align-self:start;gap:24px;display:flex;position:sticky}.exp__year{color:#0000;-webkit-text-stroke:1.5px var(--phos);font-variant-numeric:tabular-nums;font-size:clamp(90px,11vw,190px);line-height:.8}.exp__line{background:var(--phos-line);width:2px;margin-left:auto;position:relative}.exp__line span{background:var(--phos);transform-origin:top;box-shadow:0 0 12px var(--phos);position:absolute;inset:0;transform:scaleY(0)}.job{border-top:1px solid var(--line);opacity:.25;min-height:70vh;transition:opacity .6s var(--ease-out);flex-direction:column;gap:14px;padding:40px 0;display:flex}.job.is-active{opacity:1}.job__meta{color:var(--phos-dim);text-transform:none;justify-content:space-between;display:flex}.job__company{font-family:var(--f-display);text-transform:uppercase;overflow-wrap:anywhere;font-size:clamp(34px,7vw,116px);font-weight:900;line-height:.85}.job__role{color:var(--phos);font-size:clamp(26px,2.6vw,38px)}.job__desc{color:var(--bone-dim);max-width:46ch;font-size:clamp(17px,1.35vw,20px)}.job__tech{flex-wrap:wrap;gap:8px;margin-top:8px;display:flex}@media (max-width:860px){.exp{grid-template-columns:minmax(0,1fr)}.exp__rail{display:none}.job{opacity:1;min-height:0}}.s-proj{padding-block:clamp(100px,12vw,180px) clamp(60px,8vw,100px)}.projs{border-top:1px solid var(--line-2)}.proj{border-bottom:1px solid var(--line-2)}.proj__row{isolation:isolate;grid-template-columns:60px 1fr auto 48px;align-items:center;gap:20px;padding:clamp(20px,2.4vw,32px) 0;display:grid;position:relative}.proj__row:before{content:"";inset:0 calc(var(--gutter) * -1);background:var(--phos);transform-origin:bottom;transition:transform .6s var(--ease-out);z-index:-1;position:absolute;transform:scaleY(0)}a.proj__row:hover:before{transform-origin:top;transform:scaleY(1)}a.proj__row:hover{color:var(--bg-s)}a.proj__row:hover .proj__n,a.proj__row:hover .proj__tech{color:#050806b3}.proj__n{color:var(--phos-dim);transition:color .3s}.proj__title{font-family:var(--f-display);text-transform:uppercase;transition:transform .6s var(--ease-out);font-size:clamp(28px,3.4vw,56px);font-weight:800;line-height:.95}a.proj__row:hover .proj__title{transform:translate(14px)}.proj__tech{color:var(--bone-mute);text-transform:none;transition:color .3s}.proj__go svg{width:28px;height:28px;transition:transform .5s var(--ease-out)}a.proj__row:hover .proj__go svg{transform:rotate(45deg)}.proj__go .mono{color:var(--bone-mute);font-size:10px}.proj__more{transition:grid-template-rows .6s var(--ease-out);grid-template-rows:0fr;display:grid}.proj__more>*{overflow:hidden}.proj__more p{max-width:calc(60ch + 80px);color:var(--bone-dim);padding-left:80px}.proj:hover .proj__more,.proj:focus-within .proj__more{grid-template-rows:1fr}.proj:hover .proj__more p{padding-bottom:26px}.proj__code{display:none}.s-more{color:var(--bone-mute);text-transform:none;margin-top:28px}.s-more a{color:var(--phos)}@media (max-width:760px){.proj__row{grid-template-columns:34px 1fr auto}.proj__go .mono{text-align:right;max-width:52px;line-height:1.3;display:block}.proj__tech{display:none}.proj__more{grid-template-rows:1fr}.proj__more p{padding:0 0 22px 54px}}.s-writing{padding-block:clamp(80px,10vw,140px)}.posts{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px;display:grid}.post{border:1px solid var(--line);height:100%;min-height:260px;transition:border-color .4s, transform .6s var(--ease-out), background-color .4s;background:linear-gradient(#ffffff06,#0000);border-radius:24px;flex-direction:column;gap:18px;padding:26px;display:flex;position:relative}.post:hover{border-color:var(--phos);background-color:#4dff910a;transform:translateY(-6px)}.post time{color:var(--phos-dim);text-transform:none}.post h3{letter-spacing:-.025em;font-size:clamp(21px,1.7vw,26px);font-weight:600;line-height:1.15}.post__tags{color:var(--bone-mute);text-transform:none;margin-top:auto;font-size:11px}.post__go{opacity:.4;width:24px;transition:opacity .3s, transform .5s var(--ease-out);position:absolute;top:22px;right:22px}.post:hover .post__go{opacity:1;color:var(--phos);transform:rotate(45deg)}.s-tweets{padding-block:clamp(60px,8vw,120px)}.s-tweets__status{color:var(--bone-mute);text-transform:none}.s-tweets__status b{color:var(--phos);font-weight:500}.tweets{columns:3 300px;column-gap:14px}.tweet{break-inside:avoid;border:1px solid var(--line);background:#ffffff05;border-radius:22px;margin-bottom:14px;padding:22px;transition:border-color .4s;display:block}.tweet:hover{border-color:var(--phos-line)}.tweet__head{font-family:var(--f-mono);color:var(--bone-mute);justify-content:space-between;font-size:12px;display:flex}.tweet__head b{color:var(--phos);font-weight:500}.tweet p{white-space:pre-line;word-break:break-word;margin-top:12px;font-size:16px;line-height:1.5}.tweet__stats{font-family:var(--f-mono);color:var(--bone-mute);gap:18px;margin-top:14px;font-size:12px;display:flex}.tweet--skeleton{background:linear-gradient(100deg,#ffffff05 30%,#4dff910f 50%,#ffffff05 70%) 0 0/300% 100%;height:160px;animation:1.4s linear infinite shine}@keyframes shine{to{background-position:-150% 0}}.tweets__empty{color:var(--bone-mute)}.tweets__empty a{color:var(--phos)}.s-contact{background:radial-gradient(60% 60% at 50% 100%,#4dff911a,#0000 70%);padding-block:clamp(120px,14vw,200px)}.s-contact__title{margin-top:18px;font-size:clamp(64px,10vw,170px)}.s-contact .lede{max-width:44ch;margin-top:26px}.mails{flex-direction:column;align-items:flex-start;gap:6px;margin-top:clamp(40px,5vw,64px);display:flex}.mail{font-family:var(--f-sans);letter-spacing:-.035em;background:linear-gradient(var(--phos), var(--phos)) 0 100% / 0 3px no-repeat;transition:background-size .6s var(--ease-out), color .3s;word-break:break-all;font-size:clamp(22px,3.6vw,56px);font-weight:500;line-height:1.2}.mail:hover{color:var(--phos);background-size:100% 3px}.s-socials{flex-wrap:wrap;gap:10px;margin-top:40px;display:flex}.s-socials a{border:1px solid var(--line-2);border-radius:999px;padding:10px 16px;transition:border-color .3s,color .3s;display:inline-block}.s-socials a:hover{border-color:var(--phos);color:var(--phos)}body[data-page=software]:before{content:"";z-index:89;pointer-events:none;opacity:.5;background:repeating-linear-gradient(0deg,#0000 0 2px,#00000029 2px 4px);position:fixed;inset:0}.s-cmd{font-family:var(--f-mono);min-height:1.5em;color:var(--bone);white-space:pre;font-size:13px;line-height:1.5}.s-cmd .ps{color:var(--phos)}.s-cmd .path{color:#6ea8ff}.s-cmd--role{margin-top:26px}.s-cur,.s-cmd .cur{vertical-align:-.15em;background:var(--phos);width:.6em;height:1.05em;margin-left:2px;animation:1s step-end infinite s-blink;display:inline-block;box-shadow:0 0 10px #4dff9199}.s-hero__role .s-cur{height:.9em}@keyframes s-blink{50%{opacity:0}}.s-hero__role{min-height:1.6em;margin-top:8px}.js [data-boot]{opacity:0;clip-path:inset(0 0 100%)}.is-booted [data-boot],[data-boot].is-booted{animation:.55s steps(10,end) forwards s-boot;animation-delay:calc(var(--d,0) * .11s)}@keyframes s-boot{0%{opacity:0;clip-path:inset(0 0 100%)}10%{opacity:1}to{opacity:1;clip-path:inset(0)}}.skill__load{color:var(--phos-dim);text-transform:none;letter-spacing:.02em;min-height:1.4em;margin-bottom:-4px;font-size:11px}.skill__load .ok{color:var(--phos)}@media (prefers-reduced-motion:reduce){.js [data-boot]{opacity:1;clip-path:none}}.s-hero__name .line-mask{margin-top:-.14em;padding-top:.14em}@media (max-height:520px) and (orientation:landscape){.arch__sticky{padding-top:calc(var(--nav-h) + 4px);gap:8px}.arch__head .lede,.arch__readout{display:none}.arch__title{margin-top:4px}.arch__svg{max-height:calc(100svh - var(--nav-h) - 120px)}}
