:root{color-scheme:dark;--bg:#0d0b12;--panel:#121017;--text:#eeebf3;--muted:#9992a7;--faint:#71697f;--purple:#ba99ef;--line:#25202f;--mono:'JetBrains Mono',monospace;--sans:'DM Sans',sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:40px}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--sans);font-size:16px;line-height:1.7;-webkit-font-smoothing:antialiased}body:before{content:'';position:absolute;z-index:-1;inset:0 0 auto;height:760px;background:radial-gradient(ellipse at 70% 23%,#35204730,transparent 55%),radial-gradient(#8871a013 .8px,transparent .8px);background-size:auto,22px 22px;mask-image:linear-gradient(#000,transparent)}a{color:inherit;text-decoration:none}button,input{font:inherit}button{cursor:pointer}::selection{background:#6c448c;color:white}:focus-visible{outline:2px solid var(--purple);outline-offset:5px}.page{max-width:1040px;margin:auto;padding:0 42px}header{height:102px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.wordmark{display:flex;align-items:center;font-family:var(--mono);font-size:17px;font-weight:500;letter-spacing:-.6px}.mark{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:1px solid #453355;background:#271b34;color:var(--purple);border-radius:8px;margin-right:12px;font-size:17px}.muted{color:var(--faint)}nav{display:flex;gap:29px;font:13px var(--mono)}nav a{color:var(--muted);transition:color .2s}nav a:hover,nav a.active{color:var(--purple)}.intro{padding-top:64px}.eyebrow{font:12px var(--mono);color:var(--muted);display:flex;align-items:center;gap:9px}.spark{color:var(--purple);font-size:21px}.hero-grid{display:grid;grid-template-columns:1.2fr 1fr;gap:49px;margin-top:28px;align-items:center}.hello{margin:0 0 8px;color:#b2aabc;font-size:19px}.bio h1{font-size:55px;line-height:1.1;letter-spacing:-2.6px;font-weight:650;margin:0 0 24px}.bio h1>span{color:var(--purple)}.period{color:#e5d4fe}.lede{color:var(--muted);font-size:16px;line-height:1.8;margin:0 0 23px}.identity{display:flex;flex-wrap:wrap;gap:7px}.identity span{font:12px var(--mono);background:#191320;color:#bda9d4;border:1px solid #30233f;border-radius:5px;padding:5px 9px}.text-link{display:inline-flex;align-items:center;gap:14px;color:#d5c7e5;font-size:14px;margin-top:28px}.text-link:hover{color:var(--purple)}.text-link span{font-size:19px;transition:transform .2s}.text-link:hover span{transform:translate(2px,2px)}.terminal{border:1px solid #3a2c49;border-radius:10px;overflow:hidden;background:#110e17;box-shadow:0 20px 70px #0003,0 0 55px #a06edd06;transform:rotate(1deg);font:12px/1.85 var(--mono)}.terminal-bar{height:40px;display:flex;align-items:center;justify-content:space-between;padding:0 14px;background:#1a1422;border-bottom:1px solid #30243d;color:#94839f;font-size:11px}.window-dots{display:flex;gap:5px}.window-dots i{width:7px;height:7px;background:#655073;border-radius:50%}.window-dots i:nth-child(2){background:#4e3c5c}.window-dots i:nth-child(3){background:#3a2c48}.terminal-icon{font-size:15px}.terminal-body{padding:19px 21px 12px}.terminal-intro p{margin:0 0 12px;color:#cfc4db}.prompt{color:var(--purple);padding-right:8px}.json{white-space:pre;color:#82758f;line-height:1.9}.key{color:#c1a1eb}.number{color:#e5bb86}.value{color:#a5b7a4}.terminal-hint{margin-top:17px;color:#6d617d;font-size:11px}.terminal-hint button{background:none;border:0;padding:0;color:#a99bbd;font:inherit;text-decoration:underline;text-underline-offset:3px}.terminal-hint button:hover{color:var(--purple)}#terminal-form{display:flex;align-items:center;margin-top:8px}#command{width:100%;min-width:0;color:#dbceeb;background:transparent;border:0;outline:none;font:12px var(--mono);padding:5px 0}#command::placeholder{color:#736581}#terminal-form:focus-within{box-shadow:0 1px #645074}.run-command{color:#9b85b3;background:none;border:0;padding:0 3px}.terminal-bottom{display:flex;justify-content:space-between;background:#16101f;padding:6px 13px;color:#776486;font-size:10px;border-top:1px solid #241b2e}#terminal-output{max-height:130px;overflow:auto;color:#b4a7c1;white-space:pre-wrap;overflow-wrap:anywhere;font-size:11px}#terminal-output p{margin:8px 0}.annotation{display:flex;align-items:center;gap:11px;font:12px var(--mono);color:var(--faint);margin:39px 0 54px}.tiny-line{width:25px;height:1px;background:#70568e}.section-heading{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);padding-bottom:17px;gap:20px}.section-heading>div{display:flex;align-items:center;gap:15px}.section-index{color:#806991;font:12px var(--mono)}h2{font-size:19px;letter-spacing:-.4px;font-weight:550;margin:0}.section-note{font:11px var(--mono);color:var(--faint)}.skill-row{display:grid;grid-template-columns:42px 1fr 150px;gap:21px;padding:25px 0;border-bottom:1px solid #201c28}.skill-icon{width:39px;height:39px;display:grid;place-items:center;border-radius:9px;border:1px solid #3e304e;background:#20172b;color:var(--purple);font:14px var(--mono);margin-top:3px}.js{color:#d3bf93;background:#211e17;border-color:#383227}.re{color:#a5b1cf;background:#171b26;border-color:#2e3546}h3{margin:0 0 5px;font-size:16px;font-weight:550}.skill-row p{color:var(--muted);margin:0;font-size:14px;line-height:1.85;max-width:570px}.tags{display:flex;flex-wrap:wrap;gap:15px;margin-top:10px;font:11px var(--mono);color:#81738f}.skill-meta{text-align:right;color:var(--faint);font:11px/1.7 var(--mono);padding-top:5px}.little-section{margin-top:49px}.little-grid{display:grid;grid-template-columns:1fr 240px;gap:52px;align-items:center;padding:27px 0 39px}.personal-note p{margin:0 0 14px;color:var(--muted);font-size:15px;line-height:1.85}.note-signoff{font:12px var(--mono);color:#b59acb}.cat-card{width:100%;background:#15101d;border:1px dashed #42314f;border-radius:9px;padding:24px 12px;color:var(--purple);display:flex;flex-direction:column;align-items:center;transition:border-color .2s,background .2s}.cat-card:hover{border-color:#a984cc;background:#1d1429}.cat-face{font:31px var(--mono);margin-bottom:16px;white-space:nowrap}.cat-caption{font:10px var(--mono);color:#92829f}.cat-action{font:12px var(--mono);color:#b59acb;margin-top:9px}footer{border-top:1px solid var(--line);padding:24px 0 33px;display:flex;justify-content:space-between;gap:20px;color:var(--faint);font:11px/1.9 var(--mono)}.footer-dot{margin:0 9px}footer a:hover{color:var(--purple)}.toast{position:fixed;bottom:25px;left:50%;transform:translateX(-50%);background:#2c1e3c;border:1px solid #795995;color:#f2e7fc;padding:12px 20px;border-radius:8px;box-shadow:0 8px 35px #0008;font:13px/1.6 var(--mono);max-width:calc(100% - 32px);width:max-content;z-index:10}.skip{position:absolute;left:16px;top:-100px;background:var(--purple);color:#171020;padding:8px;z-index:10}.skip:focus{top:10px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
@media(min-width:1500px){.page{max-width:1100px}.intro{padding-top:78px}.hero-grid{gap:80px}}
@media(max-width:800px){.page{padding:0 28px}.hero-grid{gap:26px;grid-template-columns:1.05fr 1fr}.bio h1{font-size:43px;letter-spacing:-1.8px}.terminal-body{padding:15px}.identity span{font-size:10px}.skill-row{grid-template-columns:39px 1fr}.skill-meta{display:none}.section-note{display:none}.little-grid{gap:24px;grid-template-columns:1fr 210px}}
@media(max-width:600px){.page{padding:0 23px}header{height:82px;gap:15px}.wordmark{font-size:14px}.mark{width:27px;height:27px;font-size:14px;margin-right:8px}nav{gap:15px;font-size:11px}.intro{padding-top:40px}.eyebrow{font-size:11px}.hero-grid{grid-template-columns:1fr;gap:32px;margin-top:24px}.bio h1{font-size:clamp(43px,12vw,58px)}.lede{font-size:16px}.identity span{font-size:11px}.terminal{transform:none}.terminal-body{padding:20px}.terminal,.json,#command{font-size:13px}.terminal-hint{font-size:12px}.terminal-bottom{font-size:11px}.annotation{margin:28px 0 42px;font-size:10px}.skill-row{padding:22px 0;gap:14px}.skill-row p{font-size:14px}h2{font-size:17px}.section-heading>div{gap:10px}.little-grid{grid-template-columns:1fr;gap:22px}.cat-card{max-width:100%;padding:23px}.cat-caption{font-size:12px}.cat-action{font-size:13px}footer{flex-direction:column;gap:10px;font-size:10px}.desktop-br{display:none}}
.bio h1{font-size:83px;letter-spacing:-4px;margin:0 0 22px}.lede strong{font-weight:500;color:#d6ccdf}.socials{display:flex;flex-wrap:wrap;align-items:center;gap:22px;margin-top:31px;font:12px var(--mono)}.socials a,.socials button{display:inline-flex;gap:7px;align-items:center;color:#b4a7c4;background:none;border:0;padding:3px 0;font:inherit}.socials a:hover,.socials button:hover{color:#ddc5fb}.socials span{color:#776389}.socials svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.terminal-bar,.terminal-hint,.terminal-bottom,#terminal-output,.section-note,.tags,.skill-meta,.cat-caption,footer{font-size:12px}.identity span{font-size:12px}.skill-row p,.personal-note p{font-size:16px}.terminal{font-size:13px}#command{font-size:13px}nav{font-size:14px}.text-link{font-size:14px}.socials{font-size:14px}.terminal-bottom{padding:6px 13px}.cat-card{padding:24px 10px}.cat-caption{text-align:center}.section-note{font-size:12px}.little-grid{grid-template-columns:1fr 260px}
@media(max-width:800px){.bio h1{font-size:72px}.socials{gap:15px;font-size:13px}.little-grid{grid-template-columns:1fr 220px}.terminal-body{padding:14px}.terminal{font-size:12px}}
@media(max-width:600px){nav{gap:12px;font-size:12px}.page{padding:0 21px}.wordmark{font-size:13px}.mark{margin-right:7px}.bio h1{font-size:78px}.socials{font-size:14px;gap:23px}.terminal{font-size:13px}.terminal-body{padding:20px}.little-grid{grid-template-columns:1fr}.annotation{font-size:11px}.skill-row p{font-size:16px}.tags{gap:11px}footer{font-size:12px}.cat-action{font-size:14px}.cat-caption{font-size:12px}}
@media(max-width:350px){header{flex-wrap:wrap;height:auto;padding:18px 0;gap:15px}nav{width:100%;justify-content:space-between}.bio h1{font-size:65px}.socials{gap:14px}.annotation{line-height:1.8}}
.hero-grid{margin-top:0}.intro{padding-bottom:59px}.role{font-size:18px;color:#cdb8e6;line-height:1.5;margin:-7px 0 19px;font-weight:500}.lede{max-width:440px}.personal-note .text-link{margin-top:4px}.wordmark .muted{color:var(--purple)}.json{white-space:pre-wrap;overflow-wrap:anywhere}
@media(max-width:600px){.intro{padding-bottom:42px}.role{font-size:17px}}
.project-contact{margin:20px 0 0;color:var(--muted);font-size:16px;line-height:1.85}.project-contact a{color:var(--purple);text-decoration:underline;text-decoration-color:#66487e;text-underline-offset:4px;transition:color .2s}.project-contact a:hover{color:#ead8ff}.project-contact a span{display:inline-block;text-decoration:none}
.experience-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin-top:26px}.experience-card{--accent:#bb8bf1;display:grid;grid-template-columns:41px minmax(0,1fr);gap:17px;align-content:start;padding:26px 23px;background:#111017;border:1px solid #2c2535;border-radius:10px;position:relative;transition:border-color .25s,background .25s,box-shadow .25s,transform .25s}.experience-card:first-child{border-color:#4b2c65;background:linear-gradient(125deg,#1b1126,#111017 75%)}.experience-card:hover{border-color:var(--accent);background:#17121f;box-shadow:0 8px 32px #0002;transform:translateY(-3px)}.experience-icon{width:40px;height:40px;display:grid;place-items:center;border:1px solid color-mix(in srgb,var(--accent) 30%,transparent);color:var(--accent);background:color-mix(in srgb,var(--accent) 5%,#0e0b14);border-radius:8px}.experience-icon svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.experience-card h3{font-size:18px;font-weight:550;margin:0 0 9px;line-height:1.4;letter-spacing:-.3px}.experience-card p{font-size:16px;line-height:1.8;color:var(--muted);margin:0}.accent-blue{--accent:#779eea}.accent-cyan{--accent:#69bbcb}.accent-green{--accent:#79ba9d}.experience-languages{font:12px/1.9 var(--mono);color:#9b8aab;margin:19px 0 0}.experience-languages>span{color:#c6b3d8;margin-right:11px}.stack-section{position:relative}.stack-section:before{content:'';position:absolute;inset:-20px -28px;z-index:-1;pointer-events:none;background:radial-gradient(ellipse at center,#6c2a9a10,transparent 68%)}
@media(max-width:700px){.experience-grid{grid-template-columns:1fr;gap:15px}.experience-card{padding:23px 20px}.experience-languages{font-size:12px}.experience-languages>span{display:block;margin-bottom:3px}}
@media(prefers-reduced-motion:reduce){.experience-card:hover{transform:none}}
.journey-section{margin-top:52px}.journey-draft{font:12px var(--mono);color:#937aa8}.journey-list{list-style:none;padding:0;margin:31px 0 0 18px;position:relative}.journey-list:before{content:'';position:absolute;width:1px;left:20px;top:20px;bottom:65px;background:linear-gradient(#8a51bb66,#392846 88%,transparent)}.journey-entry{position:relative;display:grid;grid-template-columns:41px minmax(0,1fr);gap:27px;padding-bottom:25px}.journey-entry:last-child{padding-bottom:0}.journey-node{width:41px;height:41px;display:grid;place-items:center;margin-top:24px;border:1px solid #34273f;border-radius:50%;background:#100d16;color:#ac7bdd;z-index:1}.journey-node svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.journey-card{padding:25px 26px;border:1px solid #2b2434;background:#111017;border-radius:9px;transition:border-color .25s,background .25s}.journey-card-heading{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:12px}.journey-card h3{font-size:17px;line-height:1.5;font-weight:550;margin:0}.journey-card p{font-size:16px;line-height:1.85;color:var(--muted);margin:0}.journey-year{display:inline-flex;gap:7px;align-items:center;white-space:nowrap;font:12px var(--mono);color:#a68bb8;padding:5px 9px;border:1px solid #30213d;border-radius:20px;background:#100c17}.year-draft{color:#99859f;border-left:1px solid #3b2b46;padding-left:7px;font-size:12px}.year-now{color:#cfa5f4;border-left:1px solid #513062;padding-left:7px}.journey-current .journey-card{border-color:#513068;background:linear-gradient(120deg,#1d1229,#121018 85%)}.journey-current .journey-card h3{color:#c593f1}.journey-current .journey-node{border-color:#65358b;color:#cf9af9;box-shadow:0 0 25px #8e42c412}.journey-entry:hover .journey-card{border-color:#604078;background:#17101f}
@media(max-width:600px){.journey-section{margin-top:39px}.journey-list{margin-left:0}.journey-entry{grid-template-columns:31px minmax(0,1fr);gap:12px;padding-bottom:18px}.journey-node{width:31px;height:31px;margin-top:20px}.journey-node svg{width:15px;height:15px}.journey-list:before{left:15px;bottom:70px}.journey-card{padding:18px 17px}.journey-card-heading{align-items:flex-start;flex-direction:column;gap:10px;margin-bottom:11px}.journey-card h3{font-size:16px}.journey-year{font-size:12px}.journey-draft{font-size:12px}}
/* Project archive and subtle movement. */
body{isolation:isolate}.page{position:relative;z-index:1}.pointer-glow{position:fixed;inset:0;z-index:0;pointer-events:none;opacity:0;background:radial-gradient(400px circle at var(--pointer-x,70%) var(--pointer-y,20%),#ad69fa0b,transparent 75%);transition:opacity .5s}.pointer-glow.visible{opacity:1}
.bio h1>span{color:#c5a1f7;background:linear-gradient(110deg,#ac7ae7 8%,#d9bafc 45%,#bb8eef 72%,#ac7ae7);background-size:230% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:name-light 12s ease-in-out infinite}.period{-webkit-text-fill-color:#e5d4fe}.bio{animation:arrive .75s ease-out both}.terminal{transform:rotate(.65deg);border-color:#4b355c;box-shadow:0 20px 70px #0003,0 0 70px #9d53e80d;transition:transform .4s ease,border-color .4s ease,box-shadow .4s ease;animation:terminal-arrive .9s ease-out both}.terminal:hover,.terminal:focus-within{transform:rotate(0);border-color:#8f62b4;box-shadow:0 20px 70px #0004,0 0 55px #9d53e819}.terminal-intro>.json{line-height:1.8}.terminal-body{padding-top:17px}.terminal-hint{color:#998aa8}.terminal-hint button{padding:3px 0}.run-command{min-width:30px;min-height:32px}.identity span{transition:transform .22s,border-color .22s,background .22s}.identity span:hover{transform:translateY(-3px);border-color:#755093;background:#24172f}.socials a,.socials button{transition:color .2s,transform .2s}.socials a:hover,.socials button:hover{transform:translateY(-2px)}
.projects-section{margin-bottom:54px}.archive-count{color:#b598cd;font:12px var(--mono);white-space:nowrap;border:1px solid #382644;background:#1d1427;padding:5px 9px;border-radius:5px}.archive-intro{display:flex;align-items:center;justify-content:space-between;gap:20px;margin:18px 0 23px}.archive-intro p{font-size:16px;color:var(--muted);margin:0}.archive-label{font:12px var(--mono);color:#8a759d;white-space:nowrap}.project-archive{border:1px solid #33273e;background:linear-gradient(120deg,#17101fd9,#100d17d9);border-radius:10px;overflow:hidden;box-shadow:0 20px 60px #0002}.project-group{display:grid;grid-template-columns:185px minmax(0,1fr);gap:28px;padding:27px 26px;position:relative;transition:background .25s}.project-group+.project-group{border-top:1px solid #302338}.project-group:before{content:'';position:absolute;inset:22px auto 22px 0;width:2px;background:#c89afa;opacity:0;transition:opacity .25s}.project-group:hover{background:#be85f505}.project-group:hover:before{opacity:1}.project-category{display:grid;grid-template-columns:22px 1fr;column-gap:10px;align-content:start;row-gap:5px;padding-top:1px}.folder-mark{font:12px/1.9 var(--mono);color:#8c6bab}.project-category h3{font-size:16px;font-weight:500;color:#d0b9e3;margin:0;line-height:1.55}.group-count{grid-column:2;font:12px var(--mono);color:#877393}.project-list{margin:0;padding:0;list-style:none;display:flex;flex-wrap:wrap;align-content:start;gap:9px}.project-list li{font:13px/1.6 var(--mono);color:#b7a9c5;border:1px solid #3d2c49;background:#1b1423;border-radius:5px;padding:7px 11px;transition:color .2s,border-color .2s,background .2s,transform .2s;overflow-wrap:anywhere;max-width:100%}.project-list li:hover{color:#f0e3ff;border-color:#8c5cb4;background:#2c1c3b;transform:translateY(-2px)}.skill-row{transition:background .25s}.skill-row:hover{background:#ba99ef04}.skill-icon{transition:transform .3s}.skill-row:hover .skill-icon{transform:translateY(-3px)}.cat-card{transition:transform .3s,border-color .3s,background .3s}.cat-card:hover{transform:translateY(-3px)}.intro{padding-top:56px;padding-bottom:54px}
@keyframes arrive{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
@keyframes terminal-arrive{from{opacity:0;translate:0 14px}to{opacity:1;translate:0 0}}
@keyframes name-light{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
@media(max-width:800px){.project-group{grid-template-columns:155px minmax(0,1fr);gap:18px;padding:23px 20px}.archive-label{display:none}.project-list li{font-size:12px}.intro{padding-top:44px}}
@media(max-width:600px){.project-group{grid-template-columns:1fr;gap:17px;padding:22px 18px}.project-category{grid-template-columns:22px 1fr auto;align-items:center}.group-count{grid-column:auto;font-size:12px}.project-category h3{font-size:15px}.project-list{gap:8px}.project-list li{padding:7px 10px;font-size:12px}.archive-intro{margin-top:16px}.archive-intro p{font-size:16px}.archive-count{font-size:12px}.projects-section{margin-bottom:40px}.intro{padding-top:37px;padding-bottom:42px}.terminal{transform:none}.pointer-glow{display:none}.section-heading{gap:10px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{transition:none!important;animation:none!important}.pointer-glow{display:none}.terminal,.terminal:hover,.cat-card:hover,.project-list li:hover,.identity span:hover,.skill-row:hover .skill-icon,.socials a:hover,.socials button:hover{transform:none!important}}

/* Dedicated journey page and home link. */
.journey-link{display:flex;align-items:center;justify-content:space-between;gap:20px;width:fit-content;min-width:200px;padding:11px 17px;margin-top:23px;border:1px solid #503465;border-radius:8px;background:#21152e;color:#d8b9fa;font:13px var(--mono);transition:border-color .2s,background .2s}.journey-link:hover{background:#2b1b3c;border-color:#a071c6}.journey-link span{font-size:20px}.journey-back,.journey-return{font:12px var(--mono);color:#b2a0c4}.journey-back:hover,.journey-return:hover{color:#dab7ff}.journey-page .page{max-width:980px}.journey-intro{padding:65px 0 0}.journey-eyebrow{font:12px var(--mono);color:#a987c7;letter-spacing:1px;margin:0 0 17px}.journey-intro h1{font-size:clamp(36px,6vw,55px);font-weight:600;line-height:1.15;letter-spacing:-2px;margin:0 0 18px;color:#c9a3f2}.journey-intro h1 span{color:#e9d4ff}.journey-intro>p:last-child{margin:0;color:var(--muted);font-size:16px}.journey-page .journey-section{margin-top:38px}.journey-page .journey-list{margin-top:0}.journey-return{display:inline-flex;gap:12px;align-items:center;margin:36px 0 48px}.journey-return span{color:var(--purple)}
@media(max-width:600px){.journey-intro{padding-top:40px}.journey-intro h1{letter-spacing:-1.3px}.journey-back{font-size:11px}.journey-page .journey-section{margin-top:29px}.journey-return{margin:29px 0 35px}}
