@font-face{font-family:Space Grotesk;font-style:normal;font-weight:300 700;font-display:swap;src:url(../media/32687112bd2dd8db-s.cfdd66c2.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:300 700;font-display:swap;src:url(../media/28868e710e86be81-s.c30238d4.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:300 700;font-display:swap;src:url(../media/0c89a48fa5027cee-s.p.4564287c.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk Fallback;src:local(Arial);ascent-override:89.71%;descent-override:26.62%;line-gap-override:0.0%;size-adjust:109.69%}.space_grotesk_1c74a485-module__Rhx65a__className{font-family:Space Grotesk,Space Grotesk Fallback;font-style:normal}.space_grotesk_1c74a485-module__Rhx65a__variable{--font-display:"Space Grotesk","Space Grotesk Fallback"}
@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/13bf9871fe164e7f-s.f2220059.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/cc545e633e20c56d-s.f6f1950f.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/71b036adf157cdcf-s.bd5f4d11.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/89b21bb081cb7469-s.51c18f09.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/3fe682a82f50d426-s.23358719.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/70bc3e132a0a741e-s.p.15008bfb.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Fallback;src:local(Arial);ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.0%;size-adjust:134.59%}.jetbrains_mono_8be3b53a-module__CxiPNW__className{font-family:JetBrains Mono,JetBrains Mono Fallback;font-style:normal}.jetbrains_mono_8be3b53a-module__CxiPNW__variable{--font-mono:"JetBrains Mono","JetBrains Mono Fallback"}
:root{--bg:#04060c;--ink:#eef2f8;--muted:#9aa5b8;--dim:#5d6880;--line:#a0b9ff21;--panel:#070a13bd;--accent:#4d8dff;--accent-soft:#4d8dff24;--tail:#ff3b47;--head:#ffe9c2;--pad:clamp(1.25rem,5vw,4.5rem);--gutter:max(var(--pad),calc((100vw - 1240px)/2));--display:var(--font-display,"Space Grotesk"),system-ui,-apple-system,"Segoe UI",sans-serif;--mono:var(--font-mono,"JetBrains Mono"),ui-monospace,"SFMono-Regular",Menlo,monospace}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;background:var(--bg)}body{background:var(--bg);min-height:100vh;color:var(--ink);font-family:var(--display);-webkit-font-smoothing:antialiased;line-height:1.6;overflow-x:hidden}a{color:inherit;text-decoration:none}ul,ol{list-style:none}img{max-width:100%;display:block}::selection{background:var(--accent);color:#04060c}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:#1b2540;border-radius:4px}.scene{z-index:0;opacity:0;transition:opacity 1.2s;position:fixed;inset:0}.scene--ready{opacity:1}.scene canvas{width:100%;height:100%;display:block}.scene--fallback{opacity:1;background:radial-gradient(120% 60% at 50% 100%,#3c6eff59,#0000 70%),linear-gradient(#04060c,#070b18)}.scene-shade{z-index:1;pointer-events:none;background:linear-gradient(#04060c00 54%,#04060ce6),linear-gradient(#04060c99,#04060c00 18%),radial-gradient(130% 100% at 50% 40%,#0000 55%,#04060cb3);transition:background-color .6s;position:fixed;inset:0}.scene-shade--sub{background-color:#04060ca8}main{z-index:2;position:relative}.eyebrow{font-family:var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--muted);font-size:.72rem}.eyebrow b{color:var(--accent);margin-right:.6em;font-weight:500}.panel{background:var(--panel);border:1px solid var(--line);-webkit-backdrop-filter:blur(16px)saturate(1.3);backdrop-filter:blur(16px)saturate(1.3);border-radius:16px}.tags{flex-wrap:wrap;gap:.4rem;display:flex}.tags li{font-family:var(--mono);letter-spacing:.02em;color:#b9cdfb;background:var(--accent-soft);border:1px solid #4d8dff38;border-radius:6px;padding:.22rem .55rem;font-size:.68rem}.tags--lg li{padding:.32rem .7rem;font-size:.76rem}.btn{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#070a1380;border:1px solid #ffffff38;border-radius:999px;align-items:center;gap:.5rem;width:fit-content;padding:.8rem 1.35rem;font-size:.92rem;font-weight:500;transition:border-color .2s,background .2s,transform .2s,box-shadow .2s;display:inline-flex}.btn:hover{border-color:#fff;transform:translateY(-2px)}.btn--primary{background:var(--accent);border-color:var(--accent);color:#03060d;font-weight:600;box-shadow:0 0 34px -6px #4d8dffcc}.btn--primary:hover{background:#74a6ff;border-color:#74a6ff}.reveal{opacity:0;transition:opacity .8s,transform .8s cubic-bezier(.2,.7,.2,1);transform:translateY(32px)}.reveal.is-in{opacity:1;transform:none}.topbar{z-index:20;padding:1rem var(--gutter);border-bottom:1px solid #0000;justify-content:space-between;align-items:center;transition:background .3s,border-color .3s;display:flex;position:fixed;inset:0 0 auto}.topbar--solid{border-bottom-color:var(--line);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#04060cb8}.brand{letter-spacing:-.01em;align-items:center;gap:.7rem;font-weight:600;display:flex}.brand__mark{width:34px;height:34px;font-family:var(--mono);color:#03060d;background:var(--ink);border-radius:9px;place-items:center;font-size:.78rem;font-weight:700;display:grid}.topbar__links{color:var(--muted);align-items:center;gap:1.7rem;font-size:.88rem;display:flex}.topbar__links a{transition:color .2s}.topbar__links a:hover,.topbar__links a.is-active{color:var(--ink)}.topbar__links .topbar__cta{color:var(--ink);border:1px solid #ffffff38;border-radius:999px;padding:.42rem .95rem}.topbar__links .topbar__cta:hover{border-color:#fff}.rail{z-index:15;width:14px;height:min(320px,44vh);display:none;position:fixed;top:50%;right:34px;transform:translateY(-50%)}.rail__line,.rail__fill{width:1px;margin-left:-.5px;position:absolute;top:0;left:50%}.rail__line{background:#ffffff29;bottom:0}.rail__fill{height:calc(var(--p,0)*100%);background:var(--accent);box-shadow:0 0 10px var(--accent)}.rail__car{left:50%;top:calc(var(--p,0)*100%);z-index:2;background:#eef2f8;border-radius:3px;width:10px;height:18px;margin:-9px 0 0 -5px;position:absolute;box-shadow:0 13px 14px 1px #ffe9c299,0 -4px 7px #ff3b47f2}.rail__stop{place-items:center;width:14px;height:14px;display:grid;position:absolute;left:50%;transform:translate(-50%,-50%)}.rail__dot{background:var(--bg);border:1px solid #fff6;border-radius:50%;width:7px;height:7px;transition:background .3s,border-color .3s,transform .3s}.rail__stop.is-past .rail__dot,.rail__stop.is-active .rail__dot{background:var(--accent);border-color:var(--accent)}.rail__stop.is-active .rail__dot{transform:scale(1.5)}.rail__label{white-space:nowrap;font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:#8792a8;text-shadow:0 0 12px var(--bg),0 0 4px var(--bg);font-size:.66rem;transition:color .3s,transform .3s;position:absolute;right:26px}.rail__label i{opacity:.7;margin-right:.7em;font-style:normal}.rail__stop:hover .rail__label,.rail__stop.is-active .rail__label{color:var(--ink);transform:translate(-4px)}.dock{z-index:20;border:1px solid var(--line);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);color:var(--muted);background:#070a13d1;border-radius:999px;gap:.15rem;padding:.3rem;font-size:.76rem;display:flex;position:fixed;bottom:14px;left:50%;transform:translate(-50%)}.dock a{border-radius:999px;padding:.5rem .8rem}.dock a.is-active{background:var(--accent);color:#03060d;font-weight:600}.hero{min-height:100svh;padding:7rem var(--gutter)clamp(1.5rem,4vh,2.5rem);flex-direction:column;justify-content:flex-end;gap:clamp(2rem,6vh,4rem);display:flex}.hero__eyebrow{color:#c4cee0}.hero__name{letter-spacing:-.05em;text-shadow:0 4px 60px #04060ccc;margin:1rem 0 1.2rem -.04em;font-size:clamp(3.3rem,11.5vw,10rem);font-weight:700;line-height:.86}.hero__name span{display:block}.hero__name span:last-child{background:linear-gradient(100deg,#fff 20%,#8fb4ff 95%);color:#0000;-webkit-background-clip:text;background-clip:text;padding-bottom:.08em}.hero__tagline{color:#d5dcea;max-width:30ch;font-size:clamp(1.1rem,2.1vw,1.5rem);line-height:1.35}.hero__actions{flex-wrap:wrap;gap:.75rem;margin-top:1.8rem;display:flex}.hero__foot{border-top:1px solid var(--line);font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);justify-content:space-between;align-items:center;gap:1rem;padding-top:1.1rem;font-size:.7rem;display:flex}.status{align-items:center;gap:.7rem;display:flex}.status__dot{background:#3ddc84;border-radius:50%;flex:none;width:8px;height:8px;animation:2.2s infinite pulse;box-shadow:0 0 #3ddc8499}.scrollcue{white-space:nowrap;align-items:center;gap:.8rem;display:flex}.scrollcue span{background:#fff3;width:1px;height:34px;position:relative;overflow:hidden}.scrollcue span:after{content:"";background:var(--head);width:1px;height:12px;animation:1.8s cubic-bezier(.6,0,.4,1) infinite drive;position:absolute;top:0;left:0}@keyframes pulse{70%{box-shadow:0 0 0 9px #3ddc8400}to{box-shadow:0 0 #3ddc8400}}@keyframes drive{0%{transform:translateY(-14px)}to{transform:translateY(36px)}}.section{min-height:100vh;padding:7.5rem var(--gutter);align-items:center;display:flex}.section__col{width:min(100%,660px)}.section--right{justify-content:flex-end}.section--wide .section__col{width:100%}.section--center{flex-direction:column;justify-content:center;padding-bottom:0}.section--center .section__col{width:min(100%,780px);margin:auto 0;position:relative}.section--center .section__col:before{content:"";z-index:-1;pointer-events:none;background:radial-gradient(closest-side,#04060cd1,#04060c00);position:absolute;inset:-12% -18%}.section__head{margin-bottom:1.6rem}.section__head h2,.contact__title{letter-spacing:-.035em;text-wrap:balance;text-shadow:0 2px 40px #04060ce6;margin-top:.7rem;font-size:clamp(2rem,4.6vw,3.4rem);font-weight:700;line-height:1.02}.about{grid-template-columns:220px 1fr;gap:1.5rem;padding:1.25rem;display:grid}.about__photo{border:1px solid var(--line);border-radius:10px;position:relative;overflow:hidden}.about__photo img{object-fit:cover;object-position:center 30%;width:100%;height:100%}.about__photo:after{content:"";pointer-events:none;background:linear-gradient(#0000 60%,#04060c8c);position:absolute;inset:0;box-shadow:inset 0 0 0 1px #ffffff0f}.about__text{color:#c6cfdf;flex-direction:column;gap:.9rem;font-size:.98rem;display:flex}.facts{border-top:1px solid var(--line);grid-template-columns:1fr 1fr;gap:.9rem 1rem;margin-top:auto;padding-top:1rem;display:grid}.facts dt{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--dim);font-size:.64rem}.facts dd{color:var(--ink);font-size:.88rem;line-height:1.35}.timeline{grid-template-columns:1fr 1fr;gap:.8rem;display:grid}.timeline__item{padding:1.1rem 1.15rem 1.15rem;position:relative}.timeline__kind{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--accent);font-size:.62rem}.timeline__item h3{letter-spacing:-.01em;margin-top:.45rem;font-size:1.05rem;font-weight:600;line-height:1.25}.timeline__org{color:var(--muted);font-size:.9rem}.timeline__note{color:#c6cfdf;margin-top:.6rem;font-size:.85rem;line-height:1.5}.skills{margin-top:.8rem;padding:.4rem 1.15rem}.skills__row{grid-template-columns:96px 1fr;align-items:baseline;gap:1rem;padding:.8rem 0;display:grid}.skills__row+.skills__row{border-top:1px solid var(--line)}.skills__row h3{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--dim);font-size:.66rem;font-weight:500}.filters{flex-wrap:wrap;gap:.5rem;margin-bottom:1.4rem;display:flex}.filters button{border:1px solid var(--line);background:var(--panel);color:var(--muted);font:inherit;cursor:pointer;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:999px;align-items:center;gap:.6rem;padding:.5rem .95rem;font-size:.84rem;transition:color .2s,border-color .2s,background .2s;display:inline-flex}.filters button i{font-family:var(--mono);opacity:.6;font-size:.68rem;font-style:normal}.filters button:hover{color:var(--ink);border-color:#ffffff59}.filters button.is-active{background:var(--ink);border-color:var(--ink);color:#03060d;font-weight:600}.cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.4rem;display:grid}.card{border:1px solid var(--line);transform:perspective(1100px)rotateX(var(--rx,0deg))rotateY(var(--ry,0deg));will-change:transform;background:#080b15e6;border-radius:18px;flex-direction:column;transition:transform .25s ease-out,border-color .25s,box-shadow .25s;display:flex;position:relative;overflow:hidden}.card:hover{border-color:#4d8dff99;box-shadow:0 34px 60px -24px #000000d9,0 0 60px -14px #4d8dff80}.card__media{aspect-ratio:16/8.5;border-bottom:1px solid var(--line);background:#060912;position:relative;overflow:hidden}.card__media img{object-fit:cover;object-position:center 38%;filter:saturate(.9)brightness(.86);transition:transform .6s,filter .4s}.card:hover .card__media img{filter:none;transform:scale(1.05)}.card__code{height:100%;font-family:var(--mono);color:#b9cdfb;background:linear-gradient(#4d8dff12 1px,#0000 1px) 0 0/100% 28px,#060912;flex-direction:column;justify-content:center;gap:.55rem;padding:0 1.5rem;font-size:clamp(.72rem,1.25vw,.92rem);display:flex}.card__code span:before{content:"$ ";color:var(--dim)}.card__cat{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ink);border:1px solid var(--line);background:#04060cc7;border-radius:6px;padding:.28rem .6rem;font-size:.64rem;position:absolute;top:.9rem;left:.9rem}.card__body{flex-direction:column;flex:1;gap:.75rem;padding:1.25rem 1.3rem 1.3rem;display:flex}.card__body h3{letter-spacing:-.02em;font-size:1.3rem;font-weight:600;line-height:1.2}.card__body p{color:var(--muted);font-size:.92rem}.card__go{color:var(--accent);margin-top:auto;padding-top:.5rem;font-size:.86rem;font-weight:500}.card__go b{font-weight:400;transition:transform .25s;display:inline-block}.card:hover .card__go b{transform:translate(6px)}.card__glare{pointer-events:none;opacity:0;background:radial-gradient(circle at var(--gx,50%)var(--gy,50%),#96b9ff2b,transparent 46%);transition:opacity .3s;position:absolute;inset:0}.card:hover .card__glare{opacity:1}.contact__title{font-size:clamp(2.6rem,8vw,6rem);line-height:.95}.contact__lede{color:#c6cfdf;max-width:44ch;margin-top:1.1rem;font-size:1.05rem}.contact__list{border-top:1px solid var(--line);margin-top:2.2rem}.contact__list a{border-bottom:1px solid var(--line);grid-template-columns:96px 1fr auto;align-items:baseline;gap:1rem;padding:1.15rem .2rem;transition:padding .25s,background .25s,border-color .25s;display:grid}.contact__list span{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--dim);font-size:.68rem}.contact__list b{letter-spacing:-.015em;overflow-wrap:anywhere;font-size:clamp(1.05rem,2.4vw,1.5rem);font-weight:500}.contact__list i{color:var(--accent);font-style:normal;transition:transform .25s}.contact__list a:hover{background:var(--accent-soft);border-bottom-color:var(--accent);padding-left:.9rem;padding-right:.9rem}.contact__list a:hover i{transform:translate(6px)}.footer{border-top:1px solid var(--line);width:100%;font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--dim);flex-wrap:wrap;justify-content:space-between;gap:.5rem 2rem;margin-top:4rem;padding:1.4rem 0 5.5rem;font-size:.66rem;display:flex}.intro{z-index:100;background:var(--bg);pointer-events:none;flex-direction:column;justify-content:center;align-items:center;gap:1.1rem;animation:.55s 1.5s forwards intro-out;display:flex;position:fixed;inset:0}.intro__label{font-family:var(--mono);letter-spacing:.3em;text-transform:uppercase;color:var(--dim);font-size:.68rem}.intro__name{letter-spacing:-.04em;font-size:clamp(2rem,6vw,3.4rem);font-weight:700}.intro__bar{background:#121829;width:220px;height:2px;overflow:hidden}.intro__bar span{background:linear-gradient(90deg,var(--tail),var(--head));transform-origin:0;height:100%;animation:1.4s cubic-bezier(.7,0,.2,1) forwards intro-bar;display:block}@keyframes intro-bar{0%{transform:scaleX(0)}to{transform:scaleX(1)}}@keyframes intro-out{to{opacity:0;visibility:hidden}}.project{flex-direction:column;gap:2.4rem;max-width:860px;margin:0 auto;padding:8rem 1.5rem 6rem;display:flex}.project__back{width:fit-content;font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-size:.72rem;transition:color .2s}.project__back:hover{color:var(--ink)}.project__head h1{letter-spacing:-.04em;text-wrap:balance;margin:.7rem 0 .8rem;font-size:clamp(2.3rem,6.5vw,4.4rem);font-weight:700;line-height:.98}.project__meta{color:var(--muted)}.project__figure{border:1px solid var(--line);background:#060912;border-radius:16px;width:fit-content;max-width:100%;overflow:hidden}.project__figure img{width:auto;max-width:100%;height:auto;max-height:620px}.block h2{letter-spacing:-.02em;margin-bottom:.8rem;font-size:1.3rem;font-weight:600}.block__body{color:#c6cfdf;flex-direction:column;gap:.85rem;padding:1.3rem 1.4rem;font-size:.98rem;display:flex}.bullets{gap:.7rem;display:grid}.bullets li{padding-left:1.3rem;position:relative}.bullets li:before{content:"";background:var(--accent);width:8px;height:1px;position:absolute;top:.72em;left:0}.defs{gap:1rem;display:grid}.defs dt{font-family:var(--mono);color:#8fb4ff;font-size:.86rem}.defs dd{margin-top:.2rem}@media (min-width:1100px){.rail{display:block}.dock{display:none}.footer{padding-bottom:1.6rem}}@media (min-width:1100px) and (max-width:1620px){.section,.hero{padding-right:max(var(--gutter),190px)}}@media (max-width:860px){.topbar__links a:not(.topbar__cta){display:none}.section{padding-top:5.5rem;padding-bottom:5.5rem}.cards,.timeline{grid-template-columns:1fr}.hero__foot{padding-bottom:3.6rem}.scrollcue{display:none}}@media (max-width:600px){.about{grid-template-columns:1fr}.about__photo{aspect-ratio:4/5;max-width:200px}.brand__name{display:none}.contact__list a{grid-template-columns:1fr auto}.contact__list span{grid-column:1/-1}.skills__row{grid-template-columns:1fr;gap:.5rem}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.reveal{opacity:1;transition:none;transform:none}.card{transform:none}.status__dot,.scrollcue span:after{animation:none}.intro{animation-delay:.2s}}
