:root{--font-sans:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-display:"Bodoni Moda", "Didot", "Bodoni MT", "Playfair Display", Georgia, serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--text-xs:.75rem;--text-sm:.875rem;--text-base:1rem;--text-lg:1.125rem;--text-xl:1.25rem;--text-2xl:clamp(1.6rem, 1.25rem + 1.4vw, 2.2rem);--text-3xl:clamp(2.1rem, 1.5rem + 2.6vw, 3.1rem);--text-4xl:clamp(2.8rem, 1.6rem + 5vw, 5rem);--leading-tight:1.08;--leading-snug:1.35;--leading-normal:1.65;--tracking-tight:.005em;--tracking-wide:.08em;--opsz-text:16;--opsz-display:10;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.5rem;--space-6:2rem;--space-7:3rem;--space-8:4rem;--space-9:6rem;--space-10:8rem;--section-gap:clamp(4.5rem, 3rem + 7vw, 8rem);--container:1140px;--container-narrow:780px;--gutter:clamp(1.25rem, .5rem + 3vw, 2.5rem);--radius-sm:8px;--radius-md:14px;--radius-lg:20px;--radius-pill:999px;--ease-out:cubic-bezier(.22, 1, .36, 1);--ease-in-out:cubic-bezier(.65, 0, .35, 1);--dur-fast:.15s;--dur-mid:.28s;--dur-slow:.62s;--head-h:52px;--nav-h:var(--head-h);--rail-w:84px;--page-max:1340px;--col-gap:clamp(1.25rem, .9rem + 1.6vw, 2.75rem);--rule:1px;--measure:34rem;--tracking-caps:.18em;--brand:#6f74dc}:root,:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0e0e12;--bg-soft:#121217;--surface:#17171d;--surface-2:#1d1d24;--surface-hover:#23232b;--text:#f2efe9;--text-muted:#a4a19b;--text-faint:#8a8781;--border:#f2efe917;--border-strong:#f2efe92b;--accent:#7c81e6;--accent-hover:#979bee;--accent-contrast:#0b0b10;--accent-2:#b9bcf3;--accent-text:#b9bcf3;--accent-soft:#7c81e626;--accent-ring:#7c81e66b;--shadow-sm:0 1px 2px #0006;--shadow-md:0 12px 30px -12px #000000b3;--shadow-lg:0 30px 60px -22px #000c;--glow:radial-gradient(60% 60% at 50% 0%, #7c81e629, transparent 70%);--nav-bg:#0e0e12d1;--nav-bg-solid:#0e0e12f0;--ambient-1:#7c81e629;--ambient-2:#b9bcf314;--ambient-3:#f2efe90b;--grain-opacity:.07;--ring-line:#f2efe90d}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#faf7f2;--bg-soft:#f4f0e9;--surface:#fffdf9;--surface-2:#f6f2ec;--surface-hover:#f1ece4;--text:#111114;--text-muted:#57555a;--text-faint:#66646a;--border:#1111141a;--border-strong:#1111142e;--accent:#5257c9;--accent-hover:#4348b3;--accent-contrast:#fff;--accent-2:#7e83e3;--accent-text:#5257c9;--accent-soft:#5257c91a;--accent-ring:#5257c959;--shadow-sm:0 1px 2px #1111140f;--shadow-md:0 12px 28px -14px #11111438;--shadow-lg:0 28px 56px -24px #11111442;--glow:radial-gradient(60% 60% at 50% 0%, #5257c91a, transparent 70%);--nav-bg:#faf7f2d6;--nav-bg-solid:#faf7f2f2;--ambient-1:#5257c91c;--ambient-2:#7e83e312;--ambient-3:#e6c49624;--grain-opacity:.05;--ring-line:#1111140f}*,:before,:after{box-sizing:border-box}*{margin:0}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:calc(var(--nav-h) + var(--space-4))}body{background-color:var(--bg);min-height:100vh;color:var(--text);font-family:var(--font-sans);font-size:var(--text-base);line-height:var(--leading-normal);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-optical-sizing:none;font-variation-settings:"opsz" var(--opsz-text);transition:background-color var(--dur-mid) var(--ease-out), color var(--dur-mid) var(--ease-out)}body:before{content:"";z-index:-1;pointer-events:none;background:radial-gradient(1100px 700px at 8% -12%, var(--ambient-1), transparent 62%), radial-gradient(900px 800px at 104% 18%, var(--ambient-2), transparent 62%), radial-gradient(800px 600px at 50% 112%, var(--ambient-3), transparent 64%);position:fixed;inset:0}body:after{content:"";z-index:-1;pointer-events:none;opacity:var(--grain-opacity);mix-blend-mode:overlay;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0.5 0 0 0 0 0.5 0 0 0 0 0.5 0 0 0 0.9 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-size:180px 180px;position:fixed;inset:0}img,picture,svg{max-width:100%;display:block}input,button,textarea,select{font:inherit;color:inherit}h1,h2,h3,h4{font-family:var(--font-display);font-variation-settings:"opsz" var(--opsz-display);font-weight:600;line-height:var(--leading-tight);letter-spacing:var(--tracking-tight);text-wrap:balance}p{text-wrap:pretty}a{color:inherit;text-decoration:none}ul,ol{padding:0;list-style:none}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:var(--radius-sm)}::selection{background:var(--accent-soft);color:var(--text)}*{scrollbar-color:var(--border-strong) transparent;scrollbar-width:thin}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:var(--radius-pill);background-clip:content-box;border:3px solid #0000}.container{width:100%;max-width:var(--container);padding-inline:var(--gutter);margin-inline:auto}.section{padding-block:var(--section-gap);position:relative}.section--alt{background:var(--bg-soft);border-block:1px solid var(--border)}.section__head{margin-bottom:var(--space-7);max-width:62ch}.eyebrow{align-items:center;gap:var(--space-2);font-family:var(--font-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--accent);margin-bottom:var(--space-3);display:inline-flex}.eyebrow:before{content:"";opacity:.6;background:currentColor;width:22px;height:1px}.section__title{font-size:var(--text-3xl)}.section__lead{margin-top:var(--space-3);color:var(--text-muted);font-size:var(--text-lg)}.skip-link{left:var(--space-4);top:var(--space-3);z-index:200;padding:var(--space-2) var(--space-4);border-radius:var(--radius-sm);background:var(--accent);color:var(--accent-contrast);transition:transform var(--dur-fast) var(--ease-out);font-weight:600;position:absolute;transform:translateY(-160%)}.skip-link:focus-visible{transform:translateY(0)}.visually-hidden{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;padding:0;overflow:hidden;position:absolute!important}[data-reveal]{opacity:0;transition:opacity var(--dur-slow) var(--ease-out), transform var(--dur-slow) var(--ease-out);transition-delay:var(--reveal-delay,0s);transform:translateY(18px)}[data-reveal].is-revealed{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}[data-reveal]{opacity:1;transform:none}}@media print{:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#fff;--bg-soft:#fff;--surface:#fff;--surface-2:#fff;--text:#000;--text-muted:#333;--text-faint:#555;--border:#ccc;--border-strong:#999;--accent:#1d3fb8;--accent-2:#0b7a70;--accent-text:#1d3fb8}body:before,body:after,.nav,.nav__scrim,.skip-link,.hero__visual,.hero__actions,.footer__top{display:none!important}body{color:#000;background:#fff}[data-reveal]{opacity:1!important;transition:none!important;transform:none!important}.hero{padding-top:0}.section{break-inside:avoid;padding-block:1.5rem}.section--alt{border:0}.project-card,.skill-card,.timeline__card,.contact-card{box-shadow:none;break-inside:avoid}a[href^=http]:after{content:" (" attr(href) ")";color:#555;font-size:.8em}}.icon,.btn__icon,.contact-card__arrow,.footer__top-icon{flex:none;display:inline-flex}.icon svg,.btn__icon svg,.contact-card__arrow svg,.footer__top-icon svg{width:1.15em;height:1.15em}.nav{z-index:100;height:var(--nav-h);background:var(--nav-bg);-webkit-backdrop-filter:blur(16px)saturate(160%);border-bottom:1px solid var(--border);transition:background-color var(--dur-mid) var(--ease-out), border-color var(--dur-mid) var(--ease-out), box-shadow var(--dur-mid) var(--ease-out);align-items:center;display:flex;position:fixed;inset:0 0 auto}.nav.is-scrolled{background:var(--nav-bg-solid);border-bottom-color:var(--border-strong);box-shadow:var(--shadow-md)}.nav__inner{justify-content:space-between;align-items:center;gap:var(--space-4);display:flex}.nav__brand{align-items:center;gap:var(--space-3);font-family:var(--font-display);letter-spacing:var(--tracking-tight);color:var(--text);font-weight:600;display:inline-flex}.nav__mark{height:30px;transition:transform var(--dur-mid) var(--ease-out);display:inline-flex}.nav__mark svg{width:auto;height:100%}.nav__brand:hover .nav__mark{transform:translateY(-1px)}.nav__brand-text{font-size:var(--text-lg);padding-top:2px}.nav__list{align-items:center;gap:var(--space-1);display:flex}.nav__link{padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);font-size:var(--text-sm);color:var(--text-muted);transition:color var(--dur-fast) var(--ease-out), background-color var(--dur-fast) var(--ease-out);font-weight:500;display:block;position:relative}.nav__link:hover{color:var(--text);background:var(--surface)}.nav__link.is-active{color:var(--text)}.nav__link.is-active:after{content:"";border-radius:var(--radius-pill);background:var(--accent);width:16px;height:2px;position:absolute;bottom:2px;left:50%;transform:translate(-50%)}.nav__actions{align-items:center;gap:var(--space-2);z-index:96;display:flex;position:relative}.nav__progress{transform-origin:0;background:linear-gradient(90deg, var(--accent), var(--accent-2));width:100%;height:2px;position:absolute;bottom:-1px;left:0;transform:scaleX(0)}.nav__scrim{z-index:90;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#04060a99;position:fixed;inset:0}.icon-btn{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);width:40px;height:40px;color:var(--text-muted);cursor:pointer;transition:color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out), background-color var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out);place-items:center;display:grid;position:relative}.icon-btn:hover{color:var(--text);border-color:var(--border-strong);background:var(--surface-hover)}.icon-btn:active{transform:scale(.94)}.icon-btn__icon{transition:opacity var(--dur-mid) var(--ease-out), transform var(--dur-mid) var(--ease-out);display:inline-flex;position:absolute}.icon-btn__icon svg{width:18px;height:18px}.icon-btn__icon--sun{opacity:1;transform:rotate(0)scale(1)}.icon-btn__icon--moon{opacity:0;transform:rotate(-70deg)scale(.6)}:root[data-theme=light] .icon-btn__icon--sun{opacity:0;transform:rotate(70deg)scale(.6)}:root[data-theme=light] .icon-btn__icon--moon{opacity:1;transform:rotate(0)scale(1)}.icon-btn__icon--close{opacity:0;transform:scale(.6)}.icon-btn.nav__toggle{display:none}.nav.is-open .nav__toggle .icon-btn__icon--open{opacity:0;transform:scale(.6)}.nav.is-open .nav__toggle .icon-btn__icon--close{opacity:1;transform:scale(1)}.btn{justify-content:center;align-items:center;gap:var(--space-2);border-radius:var(--radius-pill);font-size:var(--text-sm);letter-spacing:.01em;cursor:pointer;white-space:nowrap;transition:transform var(--dur-fast) var(--ease-out), background-color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out);border:1px solid #0000;padding:.75rem 1.4rem;font-weight:600;display:inline-flex}.btn:hover{transform:translateY(-2px)}.btn:active{transform:translateY(0)}.btn--primary{background:var(--accent);color:var(--accent-contrast);box-shadow:0 8px 22px -12px var(--accent-ring)}.btn--primary:hover{background:var(--accent-hover);box-shadow:0 14px 30px -12px var(--accent-ring)}.btn--ghost{border-color:var(--border-strong);color:var(--text);background:0 0}.btn--ghost:hover{background:var(--surface-hover);border-color:var(--accent);color:var(--text)}.btn--sm{font-size:var(--text-xs);padding:.55rem 1.05rem}.btn--block{width:100%}.btn__icon{transition:transform var(--dur-fast) var(--ease-out)}.btn:hover .btn__icon{transform:translate(3px)}.chip{border:1px solid var(--border);border-radius:var(--radius-pill);background:var(--surface-2);color:var(--text-muted);font-size:var(--text-xs);transition:color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out);align-items:center;padding:.3rem .7rem;font-weight:500;display:inline-flex}.chip--accent{font-family:var(--font-mono);color:var(--accent);border-color:var(--accent-soft);background:var(--accent-soft);font-weight:400}.hero{padding-top:calc(var(--nav-h) + var(--space-8));padding-bottom:var(--space-9);position:relative;overflow:hidden}.hero:before{content:"";background:var(--glow);pointer-events:none;height:70vh;position:absolute;inset:-30% 0 auto}.hero__inner{grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);align-items:center;gap:clamp(2rem,1rem + 4vw,4.5rem);display:grid}.hero__name{font-size:var(--text-4xl);font-weight:650}.hero__title{margin-top:var(--space-3);font-family:var(--font-display);font-size:var(--text-2xl);font-variation-settings:"opsz" var(--opsz-display);color:var(--text-muted);font-style:italic;font-weight:600}.hero__title-text{background:linear-gradient(100deg, var(--accent), var(--accent-2));color:#0000;-webkit-background-clip:text;background-clip:text}.hero__intro{margin-top:var(--space-5);max-width:56ch;font-size:var(--text-lg);color:var(--text-muted)}.hero__location{align-items:center;gap:var(--space-2);margin-top:var(--space-4);color:var(--text-faint);font-size:var(--text-sm);display:flex}.hero__actions{gap:var(--space-3);margin-top:var(--space-6);flex-wrap:wrap;display:flex}.hero__stats{gap:var(--space-6);margin-top:var(--space-7);padding-top:var(--space-5);border-top:1px solid var(--border);flex-wrap:wrap;display:flex}.hero__stat{flex-direction:column;display:flex}.hero__stat-value{font-family:var(--font-display);font-size:var(--text-xl);color:var(--text);font-weight:600}.hero__stat-label{font-size:var(--text-xs);color:var(--text-faint);letter-spacing:.02em}.hero__visual{position:relative}.hero__portrait img{border-radius:var(--radius-lg);border:1px solid var(--border);width:100%;box-shadow:var(--shadow-lg);object-fit:cover;aspect-ratio:4/5}.hero__panel{border:1px solid var(--border);border-radius:var(--radius-lg);background:linear-gradient(160deg, var(--surface), var(--bg-soft));box-shadow:var(--shadow-lg);position:relative;overflow:hidden}.hero__panel-bar{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border);background:var(--surface-2);align-items:center;gap:6px;display:flex}.hero__panel-bar>span:not(.hero__panel-name){border-radius:50%;width:10px;height:10px;box-shadow:inset 0 0 0 1px #0000001f}.hero__panel-bar>span:first-child{background:#ff5f57}.hero__panel-bar>span:nth-child(2){background:#febc2e}.hero__panel-bar>span:nth-child(3){background:#28c840}.hero__panel-name{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-faint);margin-left:auto}.hero__code{gap:var(--space-4);padding:var(--space-5);font-family:var(--font-mono);font-size:var(--text-xs);line-height:1.5;display:grid}.hero__code li{opacity:0;animation:code-in var(--dur-slow) var(--ease-out) forwards;animation-delay:calc(.3s + var(--i) * .13s);gap:2px;display:grid}@keyframes code-in{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:none}}.hero__code-key{color:var(--accent-text)}.hero__code-key:after{content:":";color:var(--text-faint)}.hero__code-val{color:var(--text-muted);padding-left:var(--space-4)}.hero__panel-glow{background:radial-gradient(50% 100% at 50% 100%, var(--accent-soft), transparent 70%);pointer-events:none;height:180px;position:absolute;inset:auto -20% -60%}@media (prefers-reduced-motion:reduce){.hero__panel{animation:none}.hero__code li{opacity:1;animation:none}}.about__body{grid-template-columns:minmax(0,1.4fr) minmax(0,.85fr);align-items:start;gap:clamp(2rem,1rem + 4vw,4rem);display:grid}.about__prose{gap:var(--space-4);font-size:var(--text-lg);color:var(--text-muted);max-width:62ch;display:grid}.about__prose p:first-child{color:var(--text)}.about__aside{top:calc(var(--nav-h) + var(--space-5));gap:var(--space-4);padding:var(--space-5);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-md);display:grid;position:sticky}.about__highlights{gap:var(--space-4);display:grid}.about__highlight{padding-left:var(--space-4);border-left:2px solid var(--accent-soft);gap:2px;display:grid}.about__highlight-label{font-family:var(--font-mono);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:var(--tracking-wide);color:var(--text-faint)}.about__highlight-value{font-size:var(--text-sm);color:var(--text)}.about__cta{justify-content:center;align-items:center;gap:var(--space-2);border:1px solid var(--border);border-radius:var(--radius-md);font-size:var(--text-sm);color:var(--text);transition:border-color var(--dur-fast) var(--ease-out), background-color var(--dur-fast) var(--ease-out);padding:.7rem 1rem;font-weight:500;display:inline-flex}.about__cta:hover{border-color:var(--accent);background:var(--accent-soft)}.skill-grid{gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(260px,1fr));display:grid}.skill-card{gap:var(--space-4);padding:var(--space-5);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);transition:transform var(--dur-mid) var(--ease-out), border-color var(--dur-mid) var(--ease-out), box-shadow var(--dur-mid) var(--ease-out);align-content:start;display:grid;position:relative;overflow:hidden}.skill-card:after{content:"";background:linear-gradient(90deg, transparent, var(--accent), transparent);opacity:0;height:1px;transition:opacity var(--dur-mid) var(--ease-out);position:absolute;inset:0 0 auto}.skill-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md);transform:translateY(-4px)}.skill-card:hover:after{opacity:.8}.skill-card__head{align-items:center;gap:var(--space-3);display:flex}.skill-card__icon{border-radius:var(--radius-md);background:var(--accent-soft);width:40px;height:40px;color:var(--accent);place-items:center;display:grid}.skill-card__icon svg{width:20px;height:20px}.skill-card__title{font-size:var(--text-base);font-weight:600}.skill-card__list{gap:var(--space-2);flex-wrap:wrap;display:flex}.skill-card:hover .chip{color:var(--text);border-color:var(--border-strong)}.project-grid{gap:var(--space-5);grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));display:grid}.project-card{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);transition:transform var(--dur-mid) var(--ease-out), border-color var(--dur-mid) var(--ease-out), box-shadow var(--dur-mid) var(--ease-out);flex-direction:column;display:flex;overflow:hidden}.project-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-lg);transform:translateY(-5px)}.project-card__media{aspect-ratio:16/10;background:var(--surface-2);position:relative;overflow:hidden}.project-card__image{object-fit:cover;width:100%;height:100%;transition:transform var(--dur-slow) var(--ease-out)}.project-card:hover .project-card__image{transform:scale(1.05)}.project-card__cover{background:radial-gradient(circle at 50% 60%, transparent 30%, var(--ring-line) 30.5%, transparent 31%), radial-gradient(circle at 50% 60%, transparent 48%, var(--ring-line) 48.5%, transparent 49%), radial-gradient(120% 90% at 20% 0%, var(--accent-soft), transparent 60%), linear-gradient(160deg, var(--surface-2), var(--bg-soft));height:100%;transition:transform var(--dur-slow) var(--ease-out);place-items:center;display:grid;position:relative}.project-card:hover .project-card__cover{transform:scale(1.04)}.project-card__monogram{font-family:var(--font-display);font-variation-settings:"opsz" var(--opsz-display);letter-spacing:-.04em;background:linear-gradient(140deg, var(--accent), var(--accent-2));color:#0000;-webkit-background-clip:text;background-clip:text;font-size:3.5rem;font-weight:650}.project-card__category{top:var(--space-3);left:var(--space-3);border-radius:var(--radius-pill);background:var(--nav-bg);-webkit-backdrop-filter:blur(8px);border:1px solid var(--border);font-family:var(--font-mono);letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--accent);padding:.25rem .6rem;font-size:.68rem;position:absolute}.project-card__body{gap:var(--space-3);padding:var(--space-5);flex-direction:column;flex:1;display:flex}.project-card__name{font-size:var(--text-xl)}.project-card__desc{color:var(--text-muted);font-size:var(--text-sm)}.project-card__tech{gap:var(--space-2);flex-wrap:wrap;display:flex}.project-card__actions{gap:var(--space-2);padding-top:var(--space-2);flex-wrap:wrap;margin-top:auto;display:flex}.container--narrow{max-width:var(--container-narrow)}.timeline{gap:var(--space-5);padding-left:var(--space-7);display:grid;position:relative}.timeline:before{content:"";background:linear-gradient(var(--accent), var(--border), transparent);width:1px;position:absolute;top:8px;bottom:8px;left:19px}.timeline__item{position:relative}.timeline__dot{left:calc(var(--space-7) * -1);border:1px solid var(--border);background:var(--surface);width:40px;height:40px;color:var(--accent);border-radius:50%;place-items:center;display:grid;position:absolute;top:4px}.timeline__dot svg{width:18px;height:18px}.timeline__card{padding:var(--space-5);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);transition:transform var(--dur-mid) var(--ease-out), border-color var(--dur-mid) var(--ease-out)}.timeline__card:hover{border-color:var(--border-strong);transform:translate(4px)}.timeline__period{align-items:center;gap:var(--space-2);font-family:var(--font-mono);font-size:var(--text-xs);color:var(--accent);margin-bottom:var(--space-2);display:inline-flex}.timeline__dash{opacity:.5;background:currentColor;width:14px;height:1px}.timeline__title{font-size:var(--text-xl)}.timeline__institution{margin-top:var(--space-1);color:var(--text-muted);font-size:var(--text-sm)}.timeline__details{gap:var(--space-2);margin-top:var(--space-4);display:grid}.timeline__details li{padding-left:var(--space-4);font-size:var(--text-sm);color:var(--text-muted);position:relative}.timeline__details li:before{content:"";background:var(--accent-2);border-radius:50%;width:5px;height:5px;position:absolute;top:.62em;left:0}.contact__list{gap:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(280px,1fr));display:grid}.contact-card{align-items:center;gap:var(--space-4);padding:var(--space-4);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);transition:transform var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out), background-color var(--dur-fast) var(--ease-out);display:flex}.contact-card:hover{border-color:var(--accent);background:var(--surface-hover);transform:translateY(-3px)}.contact-card__icon{border-radius:var(--radius-md);background:var(--accent-soft);width:40px;height:40px;color:var(--accent);flex:none;place-items:center;display:grid}.contact-card__icon svg{width:19px;height:19px}.contact-card__text{gap:1px;min-width:0;display:grid}.contact-card__label{font-size:var(--text-xs);color:var(--text-faint);text-transform:uppercase;letter-spacing:var(--tracking-wide)}.contact-card__value{font-size:var(--text-sm);color:var(--text);overflow-wrap:anywhere}.contact-card__arrow{color:var(--text-faint);transition:transform var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out);margin-left:auto}.contact-card:hover .contact-card__arrow{color:var(--accent);transform:translate(3px)}.contact__location{align-items:center;gap:var(--space-2);margin-top:var(--space-5);font-size:var(--text-sm);color:var(--text-faint);display:flex}.footer{border-top:1px solid var(--border);background:var(--bg-soft);padding-top:var(--space-7)}.footer__inner{justify-content:space-between;align-items:center;gap:var(--space-5);padding-bottom:var(--space-6);flex-wrap:wrap;display:flex}.footer__brand{align-items:center;gap:var(--space-4);color:var(--text);display:flex}.footer__mark{height:44px;transition:transform var(--dur-mid) var(--ease-out);display:inline-flex}.footer__mark svg{width:auto;height:100%}.footer__brand:hover .footer__mark{transform:translateY(-2px)}.footer__name{font-family:var(--font-display);font-size:var(--text-xl);font-weight:600;display:block}.footer__tagline{margin-top:var(--space-1);color:var(--text-muted);font-size:var(--text-sm);display:block}.footer__top-icon{transform:rotate(-90deg)}.footer__bottom{justify-content:space-between;align-items:center;gap:var(--space-3);padding-block:var(--space-4);border-top:1px solid var(--border);font-size:var(--text-xs);color:var(--text-faint);flex-wrap:wrap;display:flex}.footer__source{align-items:center;gap:var(--space-2);color:var(--text-muted);transition:color var(--dur-fast) var(--ease-out);display:inline-flex}.footer__source:hover{color:var(--accent)}@media (max-width:1000px){.hero__inner{gap:var(--space-7);grid-template-columns:1fr}.hero__visual{max-width:460px}.hero__portrait img{aspect-ratio:3/2}.about__body{grid-template-columns:1fr}.about__aside{position:static}}@media (max-width:859px){.icon-btn.nav__toggle{display:grid}.icon-btn{width:44px;height:44px}.nav__brand-text{display:none}.nav__menu{z-index:95;width:min(320px,84vw);height:100dvh;padding:calc(var(--nav-h) + var(--space-5)) var(--space-5) var(--space-5);background:var(--bg-soft);border-left:1px solid var(--border);box-shadow:var(--shadow-lg);visibility:hidden;transition:transform var(--dur-mid) var(--ease-out), visibility var(--dur-mid);position:fixed;top:0;right:0;transform:translate(100%)}.nav.is-open .nav__menu{visibility:visible;transform:translate(0)}.nav__list{align-items:stretch;gap:var(--space-1);flex-direction:column}.nav__link{padding:var(--space-3) var(--space-4);font-size:var(--text-base);border-radius:var(--radius-md)}.nav__link.is-active{background:var(--surface)}.nav__link.is-active:after{width:3px;height:18px;top:50%;bottom:auto;left:6px;transform:translateY(-50%)}body.is-menu-open{overflow:hidden}}@media (max-width:640px){.hero{padding-top:calc(var(--nav-h) + var(--space-6))}.hero__stats{gap:var(--space-5)}.hero__actions .btn{flex:auto}.timeline{padding-left:var(--space-6)}.timeline__dot{left:calc(var(--space-6) * -1);width:34px;height:34px}.timeline:before{left:16px}.footer__inner{flex-direction:column;align-items:flex-start}}[data-reveal=left]{transform:translate(-26px)}[data-reveal=right]{transform:translate(26px)}[data-reveal=scale]{transform:scale(.94)}[data-reveal=blur]{filter:blur(12px);transition-property:opacity,transform,filter;transform:translateY(14px)}[data-reveal=blur].is-revealed{filter:none}.word{vertical-align:bottom;margin-bottom:-.14em;padding-bottom:.14em;display:inline-block;overflow:hidden}.word__inner{transition:transform .76s var(--ease-out);transition-delay:calc(.14s + var(--i) * 65ms);display:inline-block;transform:translateY(115%)}.is-revealed .word__inner{transform:none}[data-spotlight]{isolation:isolate}:where([data-spotlight]){position:relative}[data-spotlight]:before{content:"";z-index:-1;border-radius:inherit;pointer-events:none;opacity:var(--spot,0);transition:opacity var(--dur-mid) var(--ease-out);background:radial-gradient(240px circle at var(--spot-x,50%) var(--spot-y,50%), var(--accent-soft), transparent 70%);position:absolute;inset:0}.sheen{position:relative;overflow:hidden}.sheen:after{content:"";pointer-events:none;background:linear-gradient(105deg, transparent 40%, color-mix(in srgb, var(--text) 8%, transparent) 50%, transparent 60%);transition:transform .9s var(--ease-out);position:absolute;inset:0;transform:translate(-120%)}.sheen:hover:after,.sheen:focus-visible:after{transform:translate(120%)}@keyframes drift{0%,to{transform:translate(0,0)scale(1)}33%{transform:translate(4%,-6%)scale(1.08)}66%{transform:translate(-5%,4%)scale(.96)}}@keyframes shimmer{0%{background-position:0%}to{background-position:200%}}@keyframes char-in{0%{opacity:0;filter:blur(8px);transform:translateY(.5em)rotate(4deg)}to{opacity:1;filter:blur();transform:none}}@keyframes blink{0%,45%{opacity:1}55%,to{opacity:0}}@keyframes ping{0%{opacity:.55;transform:scale(.75)}to{opacity:0;transform:scale(1.9)}}@keyframes cue-slide{0%{transform-origin:50% 0;transform:scaleY(0)}45%{transform-origin:50% 0;transform:scaleY(1)}55%{transform-origin:50% 100%;transform:scaleY(1)}to{transform-origin:50% 100%;transform:scaleY(0)}}@keyframes page-in{0%{opacity:0}to{opacity:1}}body{animation:page-in .5s var(--ease-out) both}@media (prefers-reduced-motion:reduce){.word__inner{transform:none}[data-spotlight]:before,.sheen:after{display:none}body{animation:none}}.hero__aurora{z-index:-1;pointer-events:none;height:120%;transform:translate3d(0, calc(var(--parallax-y,0px) * -1), 0);position:absolute;inset:-10% -10% auto;overflow:hidden}.hero__blob{will-change:transform;border-radius:50%;display:block;position:absolute}.hero__blob--1{background:radial-gradient(circle at 50% 50%, var(--ambient-1) 0%, transparent 68%);width:46vw;max-width:620px;height:46vw;max-height:620px;animation:drift 26s var(--ease-in-out) infinite;top:-8%;left:2%}.hero__blob--2{background:radial-gradient(circle at 50% 50%, var(--ambient-2) 0%, transparent 68%);width:40vw;max-width:540px;height:40vw;max-height:540px;animation:drift 32s var(--ease-in-out) infinite reverse;top:6%;right:-6%}.hero__blob--3{background:radial-gradient(circle at 50% 50%, var(--ambient-3) 0%, transparent 68%);width:34vw;max-width:460px;height:34vw;max-height:460px;animation:drift 38s var(--ease-in-out) infinite;bottom:-14%;left:34%}.hero__badge{align-items:center;gap:var(--space-2);margin-bottom:var(--space-5);border:1px solid var(--border);border-radius:var(--radius-pill);background:var(--surface);box-shadow:var(--shadow-sm);font-size:var(--text-xs);color:var(--text-muted);opacity:0;animation:char-in .7s var(--ease-out) .12s forwards;padding:.35rem .85rem .35rem .6rem;display:inline-flex}.hero__badge-dot{background:var(--accent);border-radius:50%;width:7px;height:7px;position:relative}.hero__badge-dot:after{content:"";background:var(--accent);animation:ping 2.4s var(--ease-out) infinite;border-radius:50%;position:absolute;inset:0}.char{opacity:0;animation:char-in .8s var(--ease-out) forwards;animation-delay:calc(.24s + var(--i) * 38ms);display:inline-block}.char-word{white-space:nowrap;display:inline-block}.char-space{width:.28em;display:inline-block}.hero__title-text{background-image:linear-gradient(100deg, var(--accent) 0%, var(--accent-2) 25%, var(--accent) 50%, var(--accent-2) 75%, var(--accent) 100%);color:#0000;background-size:200% 100%;-webkit-background-clip:text;background-clip:text;animation:7s linear infinite shimmer}.hero__stat{padding-left:var(--space-4);position:relative}.hero__stat:before{content:"";border-radius:var(--radius-pill);background:linear-gradient(var(--accent), transparent);transform-origin:50% 0;width:2px;transition:transform var(--dur-slow) var(--ease-out);transition-delay:calc(var(--i) * .12s);position:absolute;top:.35em;bottom:.35em;left:0;transform:scaleY(0)}.hero__stats.is-revealed .hero__stat:before{transform:scaleY(1)}.hero__stat-value{font-variant-numeric:tabular-nums}@property --float-y{syntax:"<length>";inherits:false;initial-value:0}@keyframes float-y{50%{--float-y:-9px}}.hero__visual{perspective:1100px}.hero__panel,.hero__portrait{transform:rotateX(var(--tilt-x,0deg)) rotateY(var(--tilt-y,0deg)) translateY(calc(var(--float-y,0px) + var(--tilt-lift,0) * -6px));transform-style:preserve-3d;transition:transform var(--dur-mid) var(--ease-out);animation:float-y 9s var(--ease-in-out) infinite}.hero__prompt{align-items:center;gap:var(--space-2);padding:0 var(--space-5) var(--space-5);font-family:var(--font-mono);font-size:var(--text-xs);color:var(--accent-text);display:flex}.hero__caret{background:var(--accent);width:8px;height:1.05em;animation:1.15s step-end infinite blink;display:inline-block}.hero__panel-sheen{pointer-events:none;background:linear-gradient(115deg, transparent 42%, color-mix(in srgb, var(--text) 7%, transparent) 50%, transparent 58%);transition:transform 1.1s var(--ease-out);position:absolute;inset:0;transform:translate(-130%)}.hero__visual:hover .hero__panel-sheen{transform:translate(130%)}.hero__cue{left:50%;bottom:var(--space-5);justify-items:center;gap:var(--space-2);color:var(--text-faint);font-family:var(--font-mono);letter-spacing:var(--tracking-wide);text-transform:uppercase;opacity:0;animation:char-in .8s var(--ease-out) 1.2s forwards;transition:color var(--dur-fast) var(--ease-out);font-size:.68rem;display:grid;position:absolute;transform:translate(-50%)}.hero__cue:hover{color:var(--accent)}.hero__cue-rail{background:linear-gradient(var(--border-strong), transparent);width:1px;height:42px;position:relative;overflow:hidden}.hero__cue-dot{animation:cue-slide 2.4s var(--ease-in-out) infinite;background:currentColor;position:absolute;inset:0}@media (max-width:1000px){.hero__cue{display:none}}.skill-card__index{top:var(--space-4);right:var(--space-5);font-family:var(--font-display);font-size:var(--text-2xl);font-variation-settings:"opsz" var(--opsz-display);color:var(--text);opacity:.07;transition:opacity var(--dur-mid) var(--ease-out), transform var(--dur-mid) var(--ease-out);font-weight:600;line-height:1;position:absolute}.skill-card:hover .skill-card__index{opacity:.16;transform:translateY(-2px)}.skill-card__icon{transition:transform var(--dur-mid) var(--ease-out), background-color var(--dur-mid) var(--ease-out), color var(--dur-mid) var(--ease-out)}.skill-card:hover .skill-card__icon{background:var(--accent);color:var(--accent-contrast);transform:rotate(-8deg)scale(1.08)}.skill-card .chip{opacity:0;transition:opacity var(--dur-mid) var(--ease-out), transform var(--dur-mid) var(--ease-out), color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out);transition-delay:calc(.22s + var(--i) * 60ms);transform:translateY(8px)}.skill-card.is-revealed .chip{opacity:1;transform:none}.chip:hover{border-color:var(--accent);color:var(--accent)}.project-card__badge{top:var(--space-3);right:var(--space-3);border-radius:var(--radius-pill);background:var(--accent);color:var(--accent-contrast);font-family:var(--font-mono);letter-spacing:var(--tracking-wide);text-transform:uppercase;padding:.25rem .6rem;font-size:.64rem;position:absolute}.project-card__rings{background:radial-gradient(circle at 50% 50%, transparent 21%, var(--ring-line) 21.4%, transparent 22%), radial-gradient(circle at 50% 50%, transparent 33%, var(--ring-line) 33.4%, transparent 34%), radial-gradient(circle at 50% 50%, transparent 45%, var(--ring-line) 45.4%, transparent 46%);animation:42s linear infinite paused spin;position:absolute;inset:-20%}.project-card:hover .project-card__rings{animation-play-state:running}@keyframes spin{to{transform:rotate(360deg)}}.project-card__monogram{transition:transform var(--dur-slow) var(--ease-out);position:relative}.project-card:hover .project-card__monogram{transform:scale(1.06)translateY(-3px)}.project-card--featured{grid-column:1/-1}@media (min-width:860px){.project-card--featured{flex-direction:row;align-items:stretch}.project-card--featured .project-card__media{aspect-ratio:auto;flex:0 0 44%}.project-card--featured .project-card__body{padding:var(--space-6)}.project-card--featured .project-card__name{font-size:var(--text-2xl)}}.project-card__tech .chip{transition:color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out)}.project-card__tech .chip:hover{transform:translateY(-2px)}.timeline:after{content:"";background:linear-gradient(var(--accent), var(--accent-2));width:1px;transform:scaleY(var(--timeline-progress,1));transform-origin:50% 0;position:absolute;top:8px;bottom:8px;left:19px}.timeline__dot{z-index:1;transition:transform var(--dur-mid) var(--ease-out), border-color var(--dur-mid) var(--ease-out);overflow:visible}.timeline__item.is-revealed .timeline__dot{border-color:var(--accent-ring)}.timeline__item:hover .timeline__dot{transform:scale(1.08)}.timeline__ping{border:1px solid var(--accent);opacity:0;border-radius:50%;position:absolute;inset:-1px}.timeline__item.is-revealed .timeline__ping{animation:ping 1.6s var(--ease-out) .4s 2}@media (max-width:640px){.timeline:after{left:16px}}.scroll-top{z-index:80;border:1px solid var(--border);background:var(--nav-bg-solid);-webkit-backdrop-filter:blur(12px);width:48px;height:48px;box-shadow:var(--shadow-md);color:var(--text-muted);cursor:pointer;opacity:0;visibility:hidden;transition:opacity var(--dur-mid) var(--ease-out), visibility var(--dur-mid), transform var(--dur-mid) var(--ease-out), color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out);border-radius:50%;place-items:center;padding:0;display:grid;position:fixed;bottom:clamp(1rem,2vw,2rem);right:clamp(1rem,2vw,2rem);transform:translateY(14px)scale(.9)}.scroll-top.is-visible{opacity:1;visibility:visible;transform:none}.scroll-top:hover{color:var(--accent);border-color:var(--accent-ring)}.scroll-top:active{transform:scale(.94)}.scroll-top__ring{background:conic-gradient(var(--accent) calc(var(--scroll-progress,0) * 360deg), var(--border) 0);-webkit-mask-composite:xor;border-radius:50%;padding:2px;position:absolute;inset:-4px;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0)}.scroll-top__icon{transition:transform var(--dur-fast) var(--ease-out);transform:rotate(-90deg)}.scroll-top:hover .scroll-top__icon{transform:rotate(-90deg)translate(2px)}.scroll-top__icon svg{width:18px;height:18px}.nav__link:before{content:"";left:var(--space-3);right:var(--space-3);transform-origin:0;opacity:.5;height:1px;transition:transform var(--dur-mid) var(--ease-out);background:currentColor;position:absolute;bottom:4px;transform:scaleX(0)}.nav__link:hover:before{transform:scaleX(1)}.nav__link.is-active:before{transform:scaleX(0)}.nav__progress{box-shadow:0 0 12px var(--accent-ring)}@media (prefers-reduced-motion:reduce){.hero__blob,.hero__badge-dot:after,.hero__title-text,.hero__caret,.hero__cue-dot,.project-card__rings,.timeline__ping,.hero__panel,.hero__portrait{animation:none}.char,.hero__badge,.hero__cue{opacity:1;animation:none}.hero__stat:before,.skill-card .chip{opacity:1;transform:none}.hero__panel-sheen{display:none}.timeline:after{transform:none}}@media print{.hero__aurora,.hero__cue,.scroll-top,.project-card__rings,.hero__panel-sheen,.timeline__ping{display:none!important}.char,.hero__badge{opacity:1!important;animation:none!important}.word__inner{transform:none!important}}
