:root{--bg:#000;--bg-alt:#111;--text:#f5f5f7;--text-secondary:#f5f5f7b3;--text-tertiary:#f5f5f780;--hairline:#ffffff0f;--card-fill:#ffffff08;--card-fill-hover:#ffffff0f;--link:#2997ff;--nav-height:52px;--font-stack:-apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "Helvetica Neue", Helvetica, Arial, sans-serif}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--text);font-family:var(--font-stack);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-size:17px;line-height:1.5}::selection{background:#2997ff4d}a{color:inherit;text-decoration:none}.nav{z-index:100;-webkit-backdrop-filter:blur(16px)saturate(1.8);backdrop-filter:blur(16px)saturate(1.8);border-bottom:.5px solid var(--hairline);background:#000000b8;position:sticky;top:0}.nav-inner{max-width:980px;height:var(--nav-height);justify-content:space-between;align-items:center;margin:0 auto;padding:0 22px;display:flex}.nav-name{letter-spacing:-.01em;color:var(--text);font-size:15px;font-weight:600}.nav-links{gap:28px;display:flex}.nav-links a{color:var(--text-secondary);font-size:12.5px;transition:color .2s}.nav-links a:hover{color:var(--text)}.container{max-width:980px;margin:0 auto;padding:0 22px}.section{background:var(--bg);scroll-margin-top:var(--nav-height);padding:96px 0}.section-alt{background:var(--bg-alt)}.section-label,.eyebrow{text-transform:uppercase;letter-spacing:.12em;color:var(--text-tertiary);margin-bottom:14px;font-size:11px;font-weight:600}.section-title{letter-spacing:-.03em;font-size:clamp(32px,5vw,48px);font-weight:600;line-height:1.08}.section-subtitle{letter-spacing:-.01em;color:var(--text-tertiary);margin-top:10px;font-size:clamp(17px,2.2vw,21px);font-weight:400}.section-title+.grid,.section-subtitle+.grid{margin-top:48px}.hero{text-align:center;padding:140px 0 120px}.hero-portrait{object-fit:cover;border-radius:50%;width:116px;height:116px;margin:0 auto 26px;display:block;box-shadow:0 0 0 1px #ffffff24}.hero-name{letter-spacing:-.03em;font-size:clamp(48px,9vw,88px);font-weight:600;line-height:1.03}.hero-role{letter-spacing:-.01em;color:var(--text-secondary);margin-top:14px;font-size:clamp(19px,2.6vw,24px);font-weight:400}.hero-location{color:var(--text-tertiary);margin-top:5px;font-size:16px}.lang-row{flex-wrap:wrap;justify-content:center;gap:8px;margin-top:26px;display:flex}.lang{color:var(--text-secondary);border:1px solid var(--hairline);background:var(--card-fill);font-variant-numeric:tabular-nums;border-radius:999px;padding:6px 14px;font-size:14px}.lang-name{color:var(--text);font-weight:600}.hero-intro{max-width:620px;color:var(--text-secondary);margin:28px auto 0;font-size:clamp(16px,2.1vw,18px);font-weight:300;line-height:1.6}.hero-cta{color:var(--link);margin-top:30px;font-size:17px;transition:opacity .2s;display:inline-block}.hero-cta:hover{opacity:.75}.grid{gap:18px;display:grid}.grid-2{grid-template-columns:repeat(2,1fr)}.grid-3{grid-template-columns:repeat(3,1fr)}.card{background:var(--card-fill);border:.5px solid var(--hairline);border-radius:16px;padding:28px;transition:background .2s}.card:hover{background:var(--card-fill-hover)}.card-title{letter-spacing:-.02em;font-size:19px;font-weight:600}.card-meta{color:var(--text-secondary);margin-top:4px;font-size:14px}.card-dates{text-transform:uppercase;letter-spacing:.08em;color:var(--text-tertiary);margin-top:2px;font-size:12px;font-weight:500}.card-body{color:var(--text-secondary);margin-top:12px;font-size:14.5px;line-height:1.55}.project-card .card-title{margin-top:18px}.app-icon{border-radius:12px;justify-content:center;align-items:center;width:56px;height:56px;display:flex}.app-icon span{letter-spacing:-.02em;color:#fffffff2;font-size:24px;font-weight:700}.gradient-green{background:linear-gradient(135deg,#30d158 0%,#0a8f3c 100%)}.gradient-purple{background:linear-gradient(135deg,#bf5af2 0%,#5e2d91 100%)}.gradient-purple span{font-size:15px}.gradient-orange{background:linear-gradient(135deg,#ff9f0a 0%,#d15a00 100%)}.pill-row{flex-wrap:wrap;gap:8px;margin-top:16px;display:flex}.pill{letter-spacing:0;color:var(--text-secondary);white-space:nowrap;background:#ffffff0f;border-radius:999px;padding:5px 12px;font-size:12px;font-weight:500}.skill-groups{flex-direction:column;gap:36px;margin-top:48px;display:flex}.skill-group-label{text-transform:uppercase;letter-spacing:.12em;color:var(--text-tertiary);font-size:11px;font-weight:600}.skill-group .pill-row{margin-top:12px}.skill-group .pill{padding:7px 14px;font-size:13px}.contact-inner{grid-template-columns:210px minmax(0,1fr);align-items:start;gap:34px;margin-top:40px;display:grid}.contact-figure{margin:0}.contact-photo{aspect-ratio:931/1400;object-fit:cover;border:.5px solid var(--hairline);border-radius:16px;width:100%;display:block}.contact-caption{color:var(--text-tertiary);margin-top:12px;font-size:13px;line-height:1.45}.contact-links{grid-template-columns:minmax(0,1fr);gap:14px;display:grid}.contact-card{border:.5px solid var(--hairline);background:var(--card-fill);border-radius:14px;align-items:center;gap:14px;padding:17px 22px;transition:border-color .2s,background .2s,transform .2s;display:flex}.contact-card:hover{border-color:var(--text-tertiary);background:#ffffff0d;transform:translateY(-2px)}.contact-card:focus-visible{outline:2px solid var(--link);outline-offset:3px}.contact-icon{width:40px;height:40px;color:var(--text-secondary);background:#ffffff0f;border-radius:11px;flex:none;justify-content:center;align-items:center;transition:color .2s;display:flex}.contact-card:hover .contact-icon{color:var(--text)}.contact-icon:after{content:"";width:20px;height:20px;-webkit-mask:var(--icon) center / contain no-repeat;-webkit-mask:var(--icon) center / contain no-repeat;mask:var(--icon) center / contain no-repeat;background-color:currentColor}.icon-email{--icon:url(/assets/icons/email.svg)}.icon-resume{--icon:url(/assets/icons/resume.svg)}.icon-github{--icon:url(/assets/icons/github.svg)}.icon-linkedin{--icon:url(/assets/icons/linkedin.svg)}.contact-text{flex:1;justify-content:space-between;align-items:baseline;gap:18px;min-width:0;display:flex}.contact-label{color:var(--text);font-size:15px;font-weight:600}.contact-detail{color:var(--text-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}@media (width<=820px){.contact-inner{grid-template-columns:168px minmax(0,1fr);gap:24px}.contact-links{gap:12px}.contact-text{flex-direction:column;justify-content:center;align-items:flex-start;gap:2px}.contact-detail{max-width:100%}}@media (width<=560px){.contact-inner{grid-template-columns:minmax(0,1fr);justify-items:center;gap:26px}.contact-figure{text-align:center;max-width:200px}.contact-links{width:100%}}.footer{background:var(--bg);border-top:.5px solid var(--hairline);padding:28px 0 34px}.footer-copy{color:var(--text-tertiary);font-size:12px}.js-reveal .reveal{opacity:0;transition:opacity .8s,transform .8s;transform:translateY(24px)}.js-reveal .reveal.is-visible{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.js-reveal .reveal{opacity:1;transition:none;transform:none}}@media (width<=900px){.grid-3{grid-template-columns:repeat(2,1fr)}}@media (width<=640px){.section{padding:64px 0}.hero{padding:96px 0 80px}.grid-2,.grid-3{grid-template-columns:1fr}.nav-links{gap:18px}.card{padding:24px}}@media (width<=430px){.nav-links{gap:10px}.nav-links a{font-size:11.5px}}.showcase-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:center;gap:64px;padding:64px 0;display:grid}.showcase-row.flipped .showcase-devices{order:2}.showcase-devices{justify-content:center;display:flex;position:relative}.phone{background:linear-gradient(160deg,#3a3a3d,#131315 45%,#2a2a2d);border-radius:42px;width:min(268px,70vw);padding:10px;position:relative;box-shadow:0 0 0 1px #ffffff17,0 30px 70px -20px #000000e6}.phone-screen{aspect-ratio:1206/2622;background:#000;border-radius:33px;position:relative;overflow:hidden}.phone-notch{background:#000;border-radius:12px;width:27%;height:21px;position:absolute;top:20px;left:50%;transform:translate(-50%)}.phone-inset{border-radius:26px;width:34%;padding:6px;position:absolute;bottom:-28px;right:0}.phone-inset .phone-screen{border-radius:21px}.phone-inset .phone-notch{height:13px;top:12px}.mac{background:#1c1c1e;border-radius:12px;width:100%;max-width:560px;overflow:hidden;box-shadow:0 0 0 1px #ffffff17,0 30px 70px -24px #000000e6}.mac-screen{aspect-ratio:1800/1280;background:#000}.device-shot{object-fit:contain;width:100%;height:100%;display:block}.showcase-name{letter-spacing:-.022em;flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:10px;font-size:38px;font-weight:600;display:flex}.pill-platform{color:var(--text-secondary);letter-spacing:.01em;background:#ffffff14;padding:5px 11px;font-size:11.5px;font-weight:600}.showcase-line{color:var(--text-secondary);margin-bottom:14px;font-size:21px}.showcase-detail{color:var(--text-tertiary);max-width:46ch;margin-bottom:18px;font-size:17px}.showcase-link{color:var(--link);margin-top:16px;font-size:16px;display:inline-block}.showcase-link:hover{text-decoration:underline}.js-reveal .showcase-row .showcase-devices{opacity:0;transition:opacity .9s,transform .9s;transform:translate(-40px)scale(.96)}.js-reveal .showcase-row.flipped .showcase-devices{transform:translate(40px)scale(.96)}.js-reveal .showcase-row .showcase-copy{opacity:0;transition:opacity .9s .12s,transform .9s .12s;transform:translateY(20px)}.js-reveal .showcase-row.is-visible .showcase-devices,.js-reveal .showcase-row.is-visible .showcase-copy{opacity:1;transform:none}@keyframes device-drift{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.showcase-row.is-visible .phone:not(.phone-inset),.showcase-row.is-visible .mac{animation:7s ease-in-out 1s infinite device-drift}.showcase-row.is-visible .phone-inset{animation:7s ease-in-out 1.6s infinite device-drift}@media (width<=900px){.showcase-row{grid-template-columns:minmax(0,1fr);gap:40px;padding:44px 0}.showcase-row.flipped .showcase-devices{order:0}.showcase-copy{text-align:center}.showcase-copy .pill-row,.showcase-name{justify-content:center}.showcase-detail{margin-inline:auto}.showcase-name{font-size:30px}.showcase-line{font-size:18px}.phone-inset{width:min(150px,40vw);margin-top:18px;position:static}.showcase-devices{flex-direction:column;align-items:center}}@media (prefers-reduced-motion:reduce){.js-reveal .showcase-row .showcase-devices,.js-reveal .showcase-row .showcase-copy{opacity:1;transition:none;transform:none}.showcase-row .phone,.showcase-row .mac,.showcase-row .phone-inset{animation:none}}
