@font-face{font-family:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/fef07dbb0973bf53-s.3p2_lha1f2xer.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:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/8a480f0b521d4e75-s.1qq4vpdcun5oj.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/53b9e256198e5412-s.390ncx5urfkfu.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:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/7178b3e590c64307-s.21jp631_3pja2.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.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:Geist Fallback;src:local(Arial);ascent-override:95.94%;descent-override:28.16%;line-gap-override:0.0%;size-adjust:104.76%}.geist_a71539c9-module__T19VSG__className{font-family:Geist,Geist Fallback;font-style:normal}.geist_a71539c9-module__T19VSG__variable{--font-geist-sans:"Geist", "Geist Fallback"}
:root{--bg:#0a0a0a;--ink:#e8e8e4;--ink-dim:#e8e8e48c;--ink-faint:#e8e8e44d;--line:#e8e8e41f}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);font-family:var(--font-geist-sans), "Helvetica Neue", Helvetica, Arial, sans-serif;letter-spacing:-.01em;-webkit-font-smoothing:antialiased;font-size:16px;line-height:1.6;overflow-x:hidden}a{color:inherit;text-decoration:none}::selection{background:var(--ink);color:var(--bg)}.word{vertical-align:bottom;display:inline-block;overflow:hidden}.char{will-change:transform;display:inline-block}.nav{z-index:50;opacity:0;justify-content:space-between;align-items:center;padding:22px 4vw;transition:background .4s,-webkit-backdrop-filter .4s,backdrop-filter .4s;display:flex;position:fixed;inset:0 0 auto}.nav--scrolled{-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--line);background:#0a0a0aa6}.nav__logo{letter-spacing:-.03em;font-size:20px;font-weight:700}.nav__links{gap:34px;display:flex}.nav__links a{color:var(--ink-dim);font-size:14px;transition:color .25s}.nav__links a:hover{color:var(--ink)}.hero{height:100svh;position:relative;overflow:hidden}.hero__canvas{width:100%;height:100%;display:block;position:absolute;inset:0}.hero:after{content:"";z-index:1;pointer-events:none;background:radial-gradient(62% 75% at 30%,#0a0a0ad9 0%,#0a0a0a73 45%,#0000 72%);position:absolute;inset:0}.hero__content{z-index:2;pointer-events:none;text-shadow:0 2px 28px #0a0a0ae6;max-width:720px;position:absolute;top:50%;left:7vw;transform:translateY(-50%)}.hero__content a{pointer-events:auto}.hero__eyebrow{color:var(--ink-dim);margin-bottom:10px;font-size:15px}.hero__name{letter-spacing:-.04em;font-size:clamp(44px,7.5vw,104px);font-weight:700;line-height:1.02}.hero__role{letter-spacing:-.02em;color:#e8e8e4bf;margin-top:8px;font-size:clamp(22px,3vw,40px);font-weight:400}.hero__tagline{color:#e8e8e4bf;max-width:460px;margin-top:26px;font-size:17px}.hero__cta{gap:14px;margin-top:34px;display:flex}.btn{border:1px solid var(--ink);border-radius:999px;padding:13px 26px;font-size:14px;font-weight:500;transition:background .3s,color .3s,transform .3s;display:inline-block}.btn:hover{transform:translateY(-2px)}.btn--solid{background:var(--ink);color:var(--bg)}.btn--solid:hover{color:var(--ink);background:0 0}.btn--ghost{border-color:var(--line);color:var(--ink-dim)}.btn--ghost:hover{border-color:var(--ink);color:var(--ink)}.hero__hint{z-index:2;color:var(--ink-faint);white-space:nowrap;align-items:center;gap:12px;font-size:13px;display:flex;position:absolute;bottom:4vh;left:50%;transform:translate(-50%)}.hero__hint-line{background:var(--ink-faint);transform-origin:0;width:44px;height:1px;display:block}.section{max-width:1160px;margin:0 auto;padding:18vh 5vw;position:relative}.section__index{color:var(--ink-faint);letter-spacing:.2em;margin-bottom:14px;font-size:13px}.section__title{letter-spacing:-.035em;margin-bottom:8vh;font-size:clamp(36px,5.5vw,72px);font-weight:700;line-height:1.05}.about__grid{grid-template-columns:1.1fr 1fr;gap:6vw;display:grid}.about__lead{letter-spacing:-.02em;font-size:clamp(22px,2.6vw,32px);font-weight:500;line-height:1.35}.about__body{color:var(--ink-dim);flex-direction:column;gap:20px;font-size:17px;display:flex}.skills__tabs{flex-wrap:wrap;gap:10px;margin-bottom:6vh;display:flex}.skills__tab{border:1px solid var(--line);font:inherit;color:var(--ink-faint);cursor:pointer;background:0 0;border-radius:999px;padding:9px 19px;font-size:14px;transition:color .3s,background .3s,border-color .3s}.skills__tab:hover{color:var(--ink);border-color:#e8e8e459}.skills__tab--active,.skills__tab--active:hover{background:var(--ink);border-color:var(--ink);color:var(--bg)}.skills__grid{flex-wrap:wrap;gap:14px;display:flex}.skill{opacity:0;border:1px solid var(--line);color:var(--ink-dim);cursor:default;will-change:transform;border-radius:999px;padding:12px 22px;font-size:15px;transition:border-color .3s,color .3s,opacity .45s}.skill:hover{border-color:var(--ink);color:var(--ink)}.skill--in{opacity:1}.skill--dim,.skill--dim:hover{opacity:.22;border-color:var(--line);color:var(--ink-dim)}.projects__list{flex-direction:column;gap:12vh;display:flex}.project{grid-template-columns:1fr 1fr;align-items:center;gap:5vw;display:grid}.project:nth-child(2n) .project__visual{order:2}.project__visual{aspect-ratio:4/3;border:1px solid var(--line);border-radius:14px;justify-content:center;align-items:center;transition:border-color .4s;display:flex;position:relative;overflow:hidden}.project:hover .project__visual{border-color:#e8e8e459}.project__visual-bg{background:radial-gradient(at 30% 20%,#e8e8e424,#0000 55%),radial-gradient(at 80% 90%,#e8e8e414,#0000 50%);transition:transform .6s;position:absolute;inset:-12%}.project:hover .project__visual-bg{transform:scale(1.06)}.project__visual-canvas{width:100%;height:100%;display:block;position:absolute;inset:0}.project__title{letter-spacing:-.03em;font-size:clamp(26px,3.2vw,42px);font-weight:600}.project__desc{color:var(--ink-dim);max-width:440px;margin-top:16px}.project__tags{flex-wrap:wrap;gap:8px;margin-top:22px;display:flex}.project__tag{border:1px solid var(--line);color:var(--ink-faint);border-radius:999px;padding:6px 13px;font-size:12.5px}.project__link{color:var(--ink-dim);border-bottom:1px solid var(--line);margin-top:26px;padding-bottom:3px;font-size:14.5px;transition:color .25s,border-color .25s;display:inline-block}.project__link:hover{color:var(--ink);border-color:var(--ink)}.contact{text-align:center;padding-bottom:12vh}.contact__status{color:var(--ink-dim);align-items:center;gap:12px;margin-bottom:5vh;font-size:15px;display:inline-flex}.contact__dot{background:#7ee787;border-radius:50%;width:9px;height:9px;position:relative}.contact__dot-ring{opacity:.6;background:#7ee787;border-radius:50%;position:absolute;inset:0}.contact__email{letter-spacing:-.03em;white-space:nowrap;font-size:clamp(26px,4.6vw,64px);font-weight:600;display:inline-block}.contact__socials{justify-content:center;gap:34px;margin-top:7vh;display:flex}.contact__socials a{color:var(--ink-dim);font-size:15px;transition:color .25s}.contact__socials a:hover{color:var(--ink)}.footer{border-top:1px solid var(--line);color:var(--ink-faint);justify-content:space-between;padding:28px 4vw;font-size:13px;display:flex}@media (max-width:820px){.nav__links{gap:20px}.about__grid,.project{grid-template-columns:1fr}.project:nth-child(2n) .project__visual{order:0}.contact__email{white-space:normal;word-break:break-all}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.skill:not(.skill--dim){opacity:1}}
