:root{--bg: #000000;--ink: #ece9e2;--ink-dim: #8b8780;--ink-faint: #4a4641;--ember: #c97a3a;--ember-deep: #7a3d1a;--rust: #b14a2a;--void: #0a0a0c;--pixel-readable: "VT323", "Courier New", monospace;--pixel: "Press Start 2P", "Courier New", monospace;--mono: "VT323", ui-monospace, monospace;--sans: "VT323", -apple-system, sans-serif;--serif: "VT323", serif;--ease-out-expo: cubic-bezier(.16, 1, .3, 1);--ease-in-expo: cubic-bezier(.7, 0, .84, 0);--ease-in-quart: cubic-bezier(.5, 0, .75, 0);--ease-fall: cubic-bezier(.55, 0, .85, .2)}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0}html{background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-feature-settings:"kern" 1,"liga" 1,"calt" 1;hyphens:auto}body{min-height:100dvh;overflow-x:hidden;cursor:default}body.is-locked{overflow:hidden}img{display:block;max-width:100%}button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}a{color:inherit;text-decoration:none}::selection{background:var(--ember);color:var(--bg)}#cosmos{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:1;image-rendering:pixelated;image-rendering:crisp-edges}.scene{position:relative;z-index:3}.scene[hidden]{display:none}.scene--intro{position:relative;min-height:100dvh;transition:opacity .8s var(--ease-out-expo)}.scene--intro.is-departing{opacity:0;pointer-events:none}.button-wrap{position:fixed;left:50%;bottom:13vh;transform:translate(-50%);z-index:10}.step-button{--bw: 2px;--gap: .85rem;--shadow-step: 5px;--btn-fg: #ece9e2;--btn-fg-bright: #ffffff;--btn-shadow: #2a2a2a;--btn-shadow-deep: #555;position:relative;display:inline-flex;align-items:center;gap:var(--gap);padding:.95rem 1.7rem .85rem 1.5rem;font-family:var(--pixel);font-size:11px;line-height:1;font-weight:400;letter-spacing:.05em;text-transform:uppercase;color:var(--btn-fg);background-color:#0a0807;background-image:repeating-linear-gradient(0deg,transparent 0,transparent 3px,rgba(0,0,0,.32) 3px,rgba(0,0,0,.32) 4px);border:var(--bw) solid var(--btn-fg);border-radius:0;box-shadow:inset 0 0 0 1px #000000b3,inset 0 0 18px #ffffff0a,var(--shadow-step) var(--shadow-step) 0 0 var(--btn-shadow),var(--shadow-step) var(--shadow-step) 0 var(--bw) var(--btn-shadow-deep),0 0 24px #ffffff1a;transition:transform .18s var(--ease-out-expo),box-shadow .18s var(--ease-out-expo),color .3s ease,background-color .3s ease;cursor:pointer;user-select:none}.step-button__corner{position:absolute;width:8px;height:8px;pointer-events:none}.step-button__corner:before,.step-button__corner:after{content:"";position:absolute;background:var(--btn-fg)}.step-button__corner:before{width:8px;height:1px}.step-button__corner:after{width:1px;height:8px}.step-button__corner--tl{top:-5px;left:-5px}.step-button__corner--tl:before{top:0;left:0}.step-button__corner--tl:after{top:0;left:0}.step-button__corner--tr{top:-5px;right:-5px}.step-button__corner--tr:before{top:0;right:0}.step-button__corner--tr:after{top:0;right:0}.step-button__corner--bl{bottom:-5px;left:-5px}.step-button__corner--bl:before{bottom:0;left:0}.step-button__corner--bl:after{bottom:0;left:0}.step-button__corner--br{bottom:-5px;right:-5px}.step-button__corner--br:before{bottom:0;right:0}.step-button__corner--br:after{bottom:0;right:0}.step-button__caret{font-family:var(--pixel);font-size:11px;letter-spacing:0;color:var(--btn-fg);opacity:.9}.step-button__label{position:relative;z-index:1}.step-button__cursor{display:inline-block;width:.6em;margin-left:.1em;color:var(--btn-fg);animation:blink 1.05s steps(1) infinite;letter-spacing:0}@keyframes blink{0%,50%{opacity:1}50.01%,to{opacity:0}}.step-button:hover{color:var(--btn-fg-bright);background-color:#15140f;transform:translate(2px,2px);box-shadow:inset 0 0 0 1px #000000b3,inset 0 0 22px #ffffff1a,3px 3px 0 0 var(--btn-shadow),3px 3px 0 var(--bw) var(--btn-shadow-deep),0 0 36px #fff3}.step-button:active{transform:translate(5px,5px);box-shadow:inset 0 0 0 1px #000000b3,inset 0 0 28px #ffffff29,0 0 0 0 var(--btn-shadow),0 0 0 var(--bw) var(--btn-shadow-deep),0 0 24px #ffffff40}.step-button:focus-visible{outline:1px solid var(--btn-fg);outline-offset:6px}.step-button.is-departing{animation:button-vanish .55s var(--ease-in-expo) forwards;pointer-events:none}@keyframes button-vanish{0%{opacity:1;transform:translate(0);filter:blur(0)}40%{opacity:1;transform:translateY(-2px) scale(1.04);filter:blur(.5px);color:#ffeacc}to{opacity:0;transform:translateY(6px) scale(.95);filter:blur(4px)}}.scene--portfolio{position:relative;min-height:100dvh;opacity:0;transition:opacity 1.6s var(--ease-out-expo);z-index:3;color:#ece9e2}.scene--portfolio.is-active{opacity:1}.nav{position:sticky;top:0;z-index:20;display:flex;flex-wrap:wrap;row-gap:.6rem;justify-content:space-between;align-items:center;padding:1rem clamp(1.25rem,4vw,3rem);background:linear-gradient(to bottom,#000000c7,#0000);font-family:var(--pixel);font-size:9px;letter-spacing:.18em;border-bottom:1px solid rgba(255,255,255,.08)}.nav__brand{display:inline-flex;align-items:center;gap:.7rem;color:#fff}.nav__mark{width:7px;height:7px;background:#fff;animation:pulse-mark 1.2s steps(1) infinite}@keyframes pulse-mark{0%,49%{opacity:1}50%,to{opacity:0}}.nav__right{display:flex;flex-wrap:wrap;row-gap:.5rem;align-items:center;gap:clamp(1.2rem,3.5vw,2.8rem)}.nav__links{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;row-gap:.5rem;gap:clamp(1rem,3vw,2.4rem)}.nav__links a{color:#999;position:relative;padding:.4rem 0;transition:color .2s steps(2)}.nav__links a:hover,.nav__links a:focus-visible{color:#fff}.nav__links a:hover:before{content:"> ";position:absolute;left:-1.2em;color:#fff}.nav__cta{display:inline-flex;align-items:center;padding:.45rem .75rem;border:1px solid var(--ember);color:var(--ember);letter-spacing:.16em;transition:color .2s ease,background-color .2s ease}.nav__cta:hover,.nav__cta:focus-visible{color:#000;background-color:var(--ember)}.section{position:relative;max-width:64rem;margin:0 auto;padding:clamp(3rem,10vh,7rem) clamp(1.5rem,5vw,4rem)}.section--welcome{min-height:92dvh;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;padding-bottom:clamp(2rem,6vh,4rem)}.eyebrow{font-family:var(--pixel);font-size:9px;letter-spacing:.16em;color:#fff;margin:0 0 1.8rem;border:1px solid rgba(255,255,255,.4);padding:.55rem .8rem;display:inline-block}.welcome-title{font-family:var(--pixel-readable);font-weight:400;font-size:clamp(3.5rem,13vw,10rem);line-height:.92;letter-spacing:.02em;margin:0 0 2rem;color:#fff;text-shadow:3px 3px 0 #000,-1px -1px 0 #000,1px -1px 0 #000,-1px 1px 0 #000,0 0 28px rgba(255,255,255,.08)}.welcome-title__line{display:block;min-height:1em}.welcome-sub{font-family:var(--pixel-readable);font-size:clamp(1.4rem,2.2vw,2rem);color:#cfcdc6;max-width:32ch;margin:0 0 2.6rem;line-height:1.25;text-shadow:2px 2px 0 #000;transition:opacity .5s ease}.welcome-sub__line{display:block;min-height:1em}.welcome-prompt{transition:opacity .5s ease}.welcome-prompt{font-family:var(--pixel);font-size:9px;letter-spacing:.18em;color:#fff;margin:0;display:inline-flex;align-items:baseline;gap:.6em}.welcome-prompt__caret{color:#fff}.blink{display:inline-block;margin-left:.1em;animation:blink 1s steps(1) infinite}.section__head{position:relative;padding:1.2rem 1.4rem;margin:0 0 2rem;border:1px solid rgba(255,255,255,.6);display:flex;flex-direction:column;gap:.5rem}.section__corner{position:absolute;width:8px;height:8px;pointer-events:none}.section__corner:before,.section__corner:after{content:"";position:absolute;background:#fff}.section__corner:before{width:8px;height:1px}.section__corner:after{width:1px;height:8px}.section__corner--tl{top:-5px;left:-5px}.section__corner--tl:before{top:0;left:0}.section__corner--tl:after{top:0;left:0}.section__corner--tr{top:-5px;right:-5px}.section__corner--tr:before{top:0;right:0}.section__corner--tr:after{top:0;right:0}.section__index{font-family:var(--pixel);font-size:9px;letter-spacing:.18em;color:#fff;margin:0}.section__title{font-family:var(--pixel-readable);font-weight:400;font-size:clamp(2.2rem,5vw,3.8rem);letter-spacing:.02em;margin:0;color:#fff;line-height:1;text-shadow:2px 2px 0 #000}.section__placeholder{font-family:var(--pixel-readable);color:#888;font-size:1.25rem;letter-spacing:.05em;margin:0}.about{display:flex;flex-direction:column;gap:1.5rem}.about__cmd{font-family:var(--pixel);font-size:10px;letter-spacing:.14em;color:var(--ember);margin:0}.about__list{display:flex;flex-direction:column;gap:.4rem}.about__row{display:grid;grid-template-columns:1.4rem 9rem 1fr;align-items:baseline;gap:.2rem 1rem;padding:.5rem 0}.about__caret{grid-column:1;display:inline-block;color:var(--ember);transition:transform .2s var(--ease-out-expo)}.about__label{grid-column:2;font-family:var(--pixel);font-size:9px;letter-spacing:.12em;color:var(--ink-dim)}.about__value{grid-column:3;font-family:var(--pixel-readable);font-size:1.3rem;color:var(--ink)}.about__item{border-bottom:1px solid rgba(255,255,255,.08)}.about__item>summary.about__row{cursor:pointer;list-style:none}.about__item>summary.about__row::-webkit-details-marker{display:none}.about__item>summary.about__row:hover .about__label,.about__item>summary.about__row:hover .about__value{color:#fff}.about__item[open]>summary .about__caret{transform:rotate(90deg)}.about__detail{grid-column:2 / -1;padding:0 0 1.1rem 2.6rem;max-width:52ch;animation:about-detail-in .25s var(--ease-out-expo)}.about__detail p{font-family:var(--pixel-readable);font-size:1.15rem;line-height:1.4;color:var(--ink-dim);margin:0}@keyframes about-detail-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.about__detail.about__detail--name{display:flex;flex-wrap:wrap;align-items:flex-start;gap:1.6rem;max-width:640px}.about__poster{display:block;width:100%;max-width:320px;flex:0 1 320px;margin:.2rem 0 0;border:1px solid rgba(255,255,255,.25);image-rendering:pixelated;image-rendering:crisp-edges}.about__interests-block{flex:1 1 180px;min-width:160px;padding-top:.2rem}.about__item[open] .about__poster{animation:poster-reveal .9s steps(16,end) both}@keyframes poster-reveal{0%{clip-path:inset(0 0 100% 0)}to{clip-path:inset(0 0 0% 0)}}.about__poster-caption,.about__status-caption{font-family:var(--pixel);font-size:9px;letter-spacing:.12em;color:var(--ink-dim);margin:0 0 .6rem}.about__status-caption{margin-top:.9rem}.about__interests,.about__courses{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.3rem}.about__interests li,.about__courses li{font-family:var(--pixel-readable);font-size:1.15rem;color:var(--ink)}.about__skills{margin:0;display:flex;flex-direction:column;gap:.9rem}.about__skills-row{display:flex;flex-direction:column;gap:.25rem}.about__skills-row dt{font-family:var(--pixel);font-size:9px;letter-spacing:.12em;color:var(--ink-dim);margin:0}.about__skills-row dd{font-family:var(--pixel-readable);font-size:1.15rem;line-height:1.4;color:var(--ink);margin:0}@media (max-width: 540px){.about__row{grid-template-columns:1.4rem 1fr;row-gap:.15rem}.about__label{grid-column:2;grid-row:1}.about__value{grid-column:2;grid-row:2}.about__detail{grid-column:1 / -1;padding-left:1.6rem}}.projects{display:flex;flex-direction:column;gap:1rem}.project{border:1px solid rgba(255,255,255,.15);padding:0 1.4rem}.project__row{display:flex;align-items:baseline;padding:1.1rem 0;cursor:pointer;list-style:none}.project__row::-webkit-details-marker{display:none}.project__row:hover .project__name{color:#fff}.project[open] .project__caret{transform:rotate(90deg)}.project__caret{display:inline-block;color:var(--ember);margin-right:.7em;transition:transform .2s var(--ease-out-expo)}.project__name{font-family:var(--pixel-readable);font-size:1.5rem;color:var(--ink);margin-right:auto}.project__date{font-family:var(--pixel);font-size:8px;letter-spacing:.12em;color:var(--ink-dim);white-space:nowrap;flex-shrink:0;padding-left:1rem}.project__detail{padding:0 0 1.4rem 2.3rem;animation:about-detail-in .25s var(--ease-out-expo)}.project__stack{font-family:var(--pixel);font-size:9px;letter-spacing:.1em;text-transform:uppercase;color:var(--ember);margin:0 0 1rem}.project__points{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:.7rem;max-width:62ch}.project__points li{position:relative;padding-left:1.1em;font-family:var(--pixel-readable);font-size:1.1rem;line-height:1.45;color:var(--ink-dim)}.project__points li:before{content:"–";position:absolute;left:0;color:var(--ink-faint)}.project__points strong{font-weight:inherit;color:var(--ink)}.project__points code{font-family:Courier New,monospace;font-size:.95em;color:var(--ink);background:#ffffff14;border:1px solid rgba(255,255,255,.15);padding:.05em .4em}@media (max-width: 540px){.project__row{flex-wrap:wrap;row-gap:.3rem}.project__name{flex:1 1 auto}.project__detail{padding-left:.2rem}}.contact{display:flex;flex-direction:column;gap:1.6rem}.contact__cmd{font-family:var(--pixel);font-size:10px;letter-spacing:.14em;color:var(--ember);margin:0}.contact__list{display:flex;flex-direction:column;gap:1rem}.contact__row{display:grid;grid-template-columns:9rem 1fr;gap:1rem;align-items:baseline}.contact__label{font-family:var(--pixel);font-size:9px;letter-spacing:.12em;color:var(--ink-dim)}.contact__value{position:relative;width:fit-content;font-family:var(--pixel-readable);font-size:1.3rem;color:var(--ink);transition:color .2s ease}.contact__value:hover,.contact__value:focus-visible{color:#fff}.contact__value:hover:before{content:"> ";position:absolute;left:-1.2em;color:var(--ember)}@media (max-width: 540px){.contact__row{grid-template-columns:1fr;gap:.2rem}}.footer{display:flex;justify-content:center;align-items:center;gap:.9rem;padding:4rem 1.5rem 3rem;font-family:var(--pixel);font-size:8px;letter-spacing:.18em;color:#888;border-top:1px solid rgba(255,255,255,.1);margin-top:4rem}.footer__sep{color:#fff}.reveal{opacity:0;transform:translateY(28px);transition:opacity .9s var(--ease-out-expo),transform .9s var(--ease-out-expo)}.reveal.is-in{opacity:1;transform:translateY(0)}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
