:root{--punch-red: #e63946;--honeydew: #f1faee;--frosted-blue: #a8dadc;--cerulean: #457b9d;--oxford-navy: #1d3557;--deep-black: #1a1a1a;--accent: var(--punch-red);--accent-hover: #ef5560;--accent-secondary: var(--cerulean);--accent-secondary-hover: #5a8fb0;--accent-dim: rgb(230 57 70 / 14%);--accent-glow: rgb(230 57 70 / 22%);--accent-border: rgb(230 57 70 / 35%);--accent-secondary-dim: rgb(69 123 157 / 14%);--accent-secondary-glow: rgb(69 123 157 / 22%);--accent-secondary-border: rgb(69 123 157 / 35%);--success: #2a9d8f;--success-dim: rgb(42 157 143 / 14%);--error: var(--accent);--header-height: 4.5rem;--content-max: 68rem;--page-padding: clamp(1.25rem, 4vw, 2.5rem);--radius-sm: 10px;--radius-md: 14px;--radius-lg: 18px;--about-skills-inner-radius: var(--radius-sm);--about-skills-padding: clamp(1.35rem, 3vw, 1.75rem);--about-skills-outer-radius: calc(var(--about-skills-inner-radius) + var(--about-skills-padding));--band-fade: clamp(3rem, 8vw, 6rem);--hero-overlay-bg: rgb(255 255 255 / 10%);--hero-overlay-border: rgb(255 255 255 / 28%);--hero-overlay-bg-hover: rgb(255 255 255 / 18%);--hero-overlay-border-hover: rgb(255 255 255 / 40%);--font-display: Outfit, system-ui, sans-serif;--font-body: "IBM Plex Sans", system-ui, sans-serif;--font-mono: ui-monospace, "SF Mono", Monaco, Consolas, monospace;--ease-out: cubic-bezier(.22, 1, .36, 1);--duration-fast: .18s;--duration-normal: .28s;--duration-slow: .52s;--hero-text: #fff;--hero-text-muted: rgb(255 255 255 / 82%);--hero-scrim: linear-gradient( to top, rgb(13 27 42 / 92%) 0%, rgb(13 27 42 / 55%) 45%, rgb(13 27 42 / 18%) 100% )}.theme-dark{color:var(--text);--bg: var(--oxford-navy);--bg-elevated: var(--deep-black);--bg-soft: #152a45;--text: #fff;--text-muted: rgb(255 255 255 / 72%);--line: rgb(168 218 220 / 28%);--card: var(--deep-black);--card-hover: #222222;--surface-border: rgb(255 255 255 / 8%);--surface-border-strong: rgb(255 255 255 / 12%);--surface-overlay: rgb(255 255 255 / 6%);--surface-overlay-strong: rgb(255 255 255 / 18%);--grid-line: rgb(255 255 255 / 4%);--header-scrolled-bg: rgb(26 26 26 / 88%);--chip-bg: rgb(26 26 26 / 90%);--skill-chip-bg: rgb(29 53 87 / 70%);--mobile-nav-bg: rgb(26 26 26 / 96%);--about-skills-bg: rgb(26 26 26 / 78%);--about-skills-group-bg: rgb(0 0 0 / 18%);--about-radial: rgb(69 123 157 / 4%);--experience-radial: rgb(168 218 220 / 5%);--projects-radial: rgb(230 57 70 / 4%);--contact-radial: rgb(230 57 70 / 6%);--band-edge: rgb(168 218 220 / 12%);--shadow-card: 0 12px 40px rgb(0 0 0 / 32%);--shadow-glow: 0 0 48px rgb(230 57 70 / 12%);--contact-btn-shadow: 0 4px 20px rgb(230 57 70 / 25%);--contact-btn-shadow-hover: 0 6px 28px rgb(230 57 70 / 35%);--on-accent: #fff;--link: var(--frosted-blue);--link-hover: var(--accent-hover);--overlay-backdrop: rgb(0 0 0 / 48%);--section-edge-to: transparent}.theme-light{color:var(--text);--bg: var(--honeydew);--bg-elevated: #e8f4ea;--bg-soft: #dceee0;--text: #000;--text-muted: rgb(0 0 0 / 65%);--line: rgb(69 123 157 / 28%);--card: #fff;--card-hover: #f5fbf6;--surface-border: rgb(0 0 0 / 8%);--surface-border-strong: rgb(0 0 0 / 12%);--surface-overlay: rgb(0 0 0 / 4%);--surface-overlay-strong: rgb(0 0 0 / 8%);--grid-line: rgb(0 0 0 / 4%);--header-scrolled-bg: rgb(255 255 255 / 88%);--mobile-nav-bg: rgb(255 255 255 / 96%);--chip-bg: rgb(255 255 255 / 90%);--skill-chip-bg: rgb(241 250 238 / 70%);--about-skills-bg: rgb(255 255 255 / 78%);--about-skills-group-bg: rgb(168 218 220 / 18%);--about-radial: rgb(69 123 157 / 8%);--experience-radial: rgb(69 123 157 / 6%);--projects-radial: rgb(69 123 157 / 6%);--contact-radial: rgb(230 57 70 / 4%);--band-edge: rgb(69 123 157 / 14%);--shadow-card: 0 12px 40px rgb(0 0 0 / 8%);--shadow-glow: 0 0 48px rgb(230 57 70 / 8%);--contact-btn-shadow: 0 4px 20px rgb(230 57 70 / 18%);--contact-btn-shadow-hover: 0 6px 28px rgb(230 57 70 / 28%);--on-accent: #fff;--link: var(--cerulean);--link-hover: var(--accent);--overlay-backdrop: rgb(29 53 87 / 35%);--section-edge-to: transparent}*,*:before,*:after{box-sizing:border-box}html,body,#root{margin:0;min-height:100%}html{scroll-behavior:smooth;overflow-x:clip}body{background:var(--bg);color:var(--text);font-family:var(--font-body);font-size:1rem;line-height:1.6;-webkit-font-smoothing:antialiased;overflow-x:clip;max-width:100%}body.menu-open,body.shortcuts-open{overflow:hidden}button,input,textarea{font:inherit}.section a{color:var(--link);transition:color var(--duration-fast) ease}.section a:hover{color:var(--link-hover)}main{display:block;overflow-x:clip;max-width:100%}.surface-card{box-shadow:var(--shadow-card);transition:border-color var(--duration-fast) ease,background-color var(--duration-fast) ease,box-shadow var(--duration-fast) ease,transform var(--duration-fast) var(--ease-out)}.surface-card:hover,.surface-card:focus-within{box-shadow:var(--shadow-card),var(--shadow-glow)}.card-expand-hint{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-top:.85rem;padding-top:.75rem;border-top:1px solid var(--surface-border);font-size:.8125rem;font-weight:500;color:var(--text-muted)}.expand-chevron{width:.45rem;height:.45rem;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg);transition:transform var(--duration-normal) var(--ease-out);flex-shrink:0}.expand-chevron.is-open{transform:rotate(-135deg)}.btn{display:inline-flex;align-items:center;justify-content:center;padding:.72rem 1.25rem;font-size:.9375rem;font-weight:600;border-radius:var(--radius-sm);border:1px solid transparent;cursor:pointer;text-decoration:none;transition:background-color var(--duration-fast) ease,border-color var(--duration-fast) ease,color var(--duration-fast) ease,box-shadow var(--duration-fast) ease,transform .12s cubic-bezier(.2,0,0,1)}.btn:active{transform:scale(.96)}.btn-primary{color:var(--on-accent);background:var(--accent);box-shadow:var(--contact-btn-shadow)}.btn-primary:hover{background:var(--accent-hover);box-shadow:var(--contact-btn-shadow-hover)}.btn-ghost{color:var(--hero-text);background:var(--hero-overlay-bg);border-color:var(--hero-overlay-border)}.btn-ghost:hover{background:var(--hero-overlay-bg-hover);border-color:var(--hero-overlay-border-hover)}.site-header{position:fixed;inset:0 0 auto;z-index:40;height:var(--header-height);display:grid;grid-template-columns:1fr auto;align-items:center;gap:1rem;padding:0 var(--page-padding);transition:background-color var(--duration-normal) ease,border-color var(--duration-normal) ease,backdrop-filter var(--duration-normal) ease}.scroll-progress{position:absolute;bottom:0;left:0;width:100%;height:2px;background:var(--header-accent, var(--accent));transform-origin:left center;opacity:0;pointer-events:none;transition:opacity var(--duration-normal) ease,background-color var(--duration-normal) ease}.site-header.is-scrolled .scroll-progress{opacity:1}.site-header.is-scrolled{background:var(--header-scrolled-bg);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-bottom:1px solid var(--surface-border)}.site-header.is-scrolled.header-context--light{--header-accent: var(--accent-secondary);--header-scrolled-bg: rgb(241 250 238 / 92%);color:var(--oxford-navy);border-bottom-color:#00000014}.site-header.is-scrolled.header-context--light .nav-link{color:#1d3557db}.site-header.is-scrolled.header-context--light .nav-link:hover{color:var(--accent-secondary-hover);background:#457b9d1a}.site-header.is-scrolled.header-context--light .nav-link.active{color:var(--accent-secondary);background:var(--accent-secondary-dim)}.site-header.is-scrolled.header-context--light .shortcuts-trigger,.site-header.is-scrolled.header-context--light .menu-toggle{border-color:#0000001f;color:var(--oxford-navy)}.brand{border:0;background:transparent;cursor:pointer;padding:0;justify-self:start;text-decoration:none}.brand img{display:block;height:2.25rem;width:auto;max-width:min(200px,42vw);object-fit:contain}.nav{display:none;gap:.25rem}.nav-link,.mobile-nav-link{display:inline-flex;align-items:center;background:transparent;color:var(--text);border:0;cursor:pointer;border-radius:999px;padding:.5rem 1rem;font-size:.9375rem;font-weight:500;text-decoration:none;transition:color var(--duration-fast) ease,background-color var(--duration-fast) ease,transform .12s cubic-bezier(.2,0,0,1)}.nav-link:active,.mobile-nav-link:active{transform:scale(.96)}.site-header:not(.is-scrolled) .nav-link{color:#fffffff0}.site-header:not(.is-scrolled) .nav-link:hover{color:var(--hero-text);background:var(--surface-overlay-strong)}.site-header:not(.is-scrolled) .nav-link.active{color:var(--hero-text);background:var(--surface-overlay-strong)}.site-header.is-scrolled .nav-link:hover{color:var(--accent-hover);background:var(--surface-overlay)}.site-header.is-scrolled .nav-link.active{color:var(--accent);background:var(--accent-dim)}.mobile-nav-link{color:var(--text);text-align:left;width:100%}.mobile-nav-link:hover{color:var(--accent-hover);background:var(--surface-overlay)}.mobile-nav-link.active{color:var(--accent);background:var(--accent-dim)}.header-actions{display:flex;align-items:center;gap:.45rem;justify-self:end}.shortcuts-trigger{width:2.75rem;height:2.75rem;display:grid;place-items:center;border:1px solid var(--hero-overlay-border);border-radius:var(--radius-sm);background:#00000040;color:inherit;cursor:pointer;transition:border-color var(--duration-fast) ease,background-color var(--duration-fast) ease,transform .12s cubic-bezier(.2,0,0,1)}.shortcuts-trigger:active{transform:scale(.96)}.shortcuts-trigger kbd{font-family:var(--font-mono);font-size:.8125rem;font-weight:600;line-height:1;background:transparent;border:0;padding:0;color:inherit}.site-header:not(.is-scrolled) .shortcuts-trigger{color:var(--hero-text);border-color:var(--hero-overlay-border-hover)}.site-header.is-scrolled .shortcuts-trigger{background:transparent;border-color:var(--surface-border)}.menu-toggle{width:2.75rem;height:2.75rem;border-radius:var(--radius-sm);border:1px solid var(--hero-overlay-border);background:#00000040;display:grid;gap:5px;place-content:center;cursor:pointer;transition:border-color var(--duration-fast) ease,background-color var(--duration-fast) ease,transform .12s cubic-bezier(.2,0,0,1)}.menu-toggle:active{transform:scale(.96)}.site-header.is-scrolled .menu-toggle{background:transparent;border-color:var(--surface-border)}.menu-toggle span{width:1.15rem;height:2px;background:currentColor;color:var(--text);display:block;border-radius:1px;transition:transform var(--duration-normal) var(--ease-out),opacity var(--duration-fast) ease}.menu-toggle.is-open span:nth-child(1){transform:translateY(7px) rotate(45deg)}.menu-toggle.is-open span:nth-child(2){opacity:0}.menu-toggle.is-open span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.site-header:not(.is-scrolled) .menu-toggle{color:var(--hero-text);border-color:var(--hero-overlay-border-hover)}.mobile-nav-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:34;border:0;padding:0;background:var(--overlay-backdrop);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--duration-normal) ease,visibility var(--duration-normal) ease}.mobile-nav-backdrop.is-visible{opacity:1;visibility:visible;pointer-events:auto;cursor:pointer}.mobile-nav{position:fixed;inset:var(--header-height) 0 0;background:var(--mobile-nav-bg);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);padding:1.25rem var(--page-padding) 2rem;display:grid;align-content:start;gap:.35rem;transform:translateY(-100%);opacity:0;visibility:hidden;transition:transform var(--duration-normal) ease,opacity var(--duration-normal) ease,visibility var(--duration-normal) ease;z-index:35}.mobile-nav.is-open{transform:translateY(0);opacity:1;visibility:visible}.mobile-nav.is-open .mobile-nav-link{animation:navLinkIn var(--duration-normal) cubic-bezier(.2,0,0,1) both;animation-delay:var(--nav-stagger, 0ms)}.hero-section{position:relative;min-height:100dvh;overflow:hidden;display:flex;align-items:stretch;background:var(--honeydew)}.hero-cursor-glow{position:absolute;top:0;left:0;z-index:1;width:18rem;height:18rem;margin:-9rem 0 0 -9rem;border-radius:50%;background:radial-gradient(circle,rgb(230 57 70 / 12%) 0%,rgb(69 123 157 / 6%) 42%,transparent 72%);pointer-events:none;opacity:0;transition:opacity .4s ease;will-change:transform}.hero-layer{position:absolute;top:0;right:0;bottom:0;left:0}.hero-layer:before{content:"";position:absolute;top:0;right:0;bottom:0;left:-6%;width:112%;background:image-set(url(/hero-bg.webp) type("image/webp"),url(/hero-bg.jpg) type("image/jpeg")) center / cover no-repeat;-webkit-mask-image:linear-gradient(to bottom,#000 0%,#000 84%,rgb(0 0 0 / 45%) 94%,transparent 100%);mask-image:linear-gradient(to bottom,#000 0%,#000 84%,rgb(0 0 0 / 45%) 94%,transparent 100%)}.hero-layer:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:var(--hero-scrim);pointer-events:none;-webkit-mask-image:linear-gradient(to bottom,#000 0%,#000 82%,rgb(0 0 0 / 55%) 93%,transparent 100%);mask-image:linear-gradient(to bottom,#000 0%,#000 82%,rgb(0 0 0 / 55%) 93%,transparent 100%)}.hero-section.is-animated .hero-layer:before{animation:heroPan 22s ease-in-out infinite alternate}.hero-overlay{position:relative;z-index:1;display:flex;flex-direction:column;justify-content:flex-end;width:100%;max-width:36rem;margin:0 auto;padding:calc(var(--header-height) + 2rem) var(--page-padding) clamp(2.5rem,10vh,5rem);text-align:center}.hero-kicker{margin:0 0 .5rem;font-size:.75rem;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--accent)}.hero-section.is-animated .hero-kicker{animation:fadeUp .7s ease both}.hero-overlay h1{margin:0 0 .75rem;font-family:var(--font-display);font-size:clamp(2.25rem,7vw,4rem);font-weight:700;line-height:1.08;letter-spacing:-.02em;text-wrap:balance}.hero-name{color:var(--hero-text)}.hero-section.is-animated .hero-overlay h1{animation:fadeUp .9s ease both;animation-delay:80ms}.hero-copy{margin:0;font-size:clamp(1rem,2.2vw,1.125rem);color:var(--hero-text-muted);line-height:1.65;max-width:38ch;margin-inline:auto;text-wrap:pretty}.hero-section.is-animated .hero-copy{animation:fadeUp 1.1s ease both;animation-delay:.16s}.hero-section.is-animated .hero-tagline{animation:fadeUp .9s ease both;animation-delay:.24s}.hero-section.is-animated .hero-actions{animation:fadeUp 1.1s ease both;animation-delay:.32s}.hero-tagline{margin:1.25rem 0 0;font-size:.9375rem;font-weight:500;color:var(--hero-text-muted);letter-spacing:.04em;min-height:1.5rem}.hero-tagline-prefix{color:var(--hero-text-muted)}.hero-tagline-rotator{display:inline-grid;min-width:11.5ch;vertical-align:bottom}.hero-tagline-word{grid-area:1 / 1;display:inline-block;color:var(--accent);text-transform:lowercase;animation:taglineIn .48s cubic-bezier(.2,0,0,1) both}.hero-actions{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:1.75rem;justify-content:center}.section{position:relative;scroll-margin-top:calc(var(--header-height) + 12px);padding-block:clamp(4rem,10vw,6.5rem);max-width:100%;overflow-x:clip;content-visibility:auto;contain-intrinsic-size:auto 600px;background-color:var(--bg)}.section:before{content:"";position:absolute;top:0;left:0;right:0;height:var(--band-fade);background:linear-gradient(to bottom,var(--band-edge),var(--section-edge-to));pointer-events:none;z-index:0}.section:after{content:"";position:absolute;bottom:0;left:0;right:0;height:var(--band-fade);background:linear-gradient(to top,var(--band-edge),var(--section-edge-to));pointer-events:none;z-index:0}.section-atmosphere{isolation:isolate}.section-atmosphere-layer{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0}.section-atmosphere--about .section-atmosphere-layer{background:radial-gradient(ellipse 80% 60% at 12% 20%,var(--about-radial),transparent 70%),linear-gradient(var(--grid-line) 1px,transparent 1px),linear-gradient(90deg,var(--grid-line) 1px,transparent 1px);background-size:auto,32px 32px,32px 32px}.section-atmosphere--experience .section-atmosphere-layer{background:radial-gradient(ellipse 70% 50% at 50% 0%,var(--experience-radial),transparent 70%)}.section-atmosphere--projects .section-atmosphere-layer{background:radial-gradient(ellipse 60% 45% at 88% 12%,var(--projects-radial),transparent 65%),linear-gradient(var(--grid-line) 1px,transparent 1px),linear-gradient(90deg,var(--grid-line) 1px,transparent 1px);background-size:auto,28px 28px,28px 28px}.section-atmosphere--contact .section-atmosphere-layer{background:radial-gradient(ellipse 55% 40% at 80% 100%,var(--contact-radial),transparent 70%)}.section-inner{position:relative;z-index:1;width:100%;max-width:var(--content-max);margin-inline:auto;padding-inline:var(--page-padding);overflow-x:clip}.section-header{margin-bottom:clamp(2rem,5vw,3rem);max-width:40rem;opacity:0;transform:translateY(16px);transition:opacity .6s var(--ease-out),transform .6s var(--ease-out)}.section-header.is-visible{opacity:1;transform:translateY(0)}.section-eyebrow{margin:0 0 .35rem;font-size:.75rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}.section h2{margin:0;font-family:var(--font-display);font-size:clamp(1.75rem,4vw,2.375rem);font-weight:700;line-height:1.15;letter-spacing:-.02em;text-wrap:balance}.section-intro{margin:.85rem 0 0;max-width:42rem;font-size:clamp(1rem,2vw,1.0625rem);color:var(--text-muted);line-height:1.65;text-wrap:pretty}.about-layout{display:grid;grid-template-columns:minmax(0,14rem) minmax(0,1fr);gap:clamp(1.75rem,4vw,2.75rem);align-items:center;margin-bottom:clamp(2rem,4vw,2.75rem)}.about-photo-wrap{justify-self:start}.about-photo,.about-photo-placeholder{display:block;width:min(16rem,100%);aspect-ratio:1;border-radius:var(--radius-lg);object-fit:cover}.about-photo{outline:1px solid rgb(0 0 0 / 10%);outline-offset:-1px;box-shadow:var(--shadow-card)}.about-photo-placeholder{display:grid;place-items:center;background:var(--card);border:1px solid var(--accent-border);box-shadow:var(--shadow-card)}.about-photo-placeholder span{font-family:var(--font-display);font-size:2.5rem;font-weight:700;letter-spacing:.06em;color:var(--accent)}.about-copy{display:grid;gap:1.125rem}.about-copy p{margin:0;color:var(--text-muted);font-size:clamp(1rem,2vw,1.0625rem);line-height:1.7;max-width:58ch;text-wrap:pretty}.about-skills{position:relative;z-index:1;padding:var(--about-skills-padding);background:var(--about-skills-bg);border:1px solid var(--surface-border);border-radius:var(--about-skills-outer-radius);box-shadow:var(--shadow-card)}.about-skills-title{margin:0 0 1.35rem;font-family:var(--font-display);font-size:1.0625rem;font-weight:600;letter-spacing:-.01em}.about-skills-groups{display:grid;grid-template-columns:repeat(auto-fit,minmax(13rem,1fr));gap:1.25rem}.about-skills-group{padding:.85rem;background:var(--about-skills-group-bg);border:1px solid var(--surface-border);border-left:2px solid var(--accent-border);border-radius:var(--about-skills-inner-radius)}.about-skills-group:nth-child(2n){border-left-color:var(--accent-secondary-border)}.about-skills-label{margin:0 0 .75rem;font-family:var(--font-mono);font-size:.6875rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--accent-hover)}.about-skills-group:nth-child(2n) .about-skills-label{color:var(--accent-secondary)}.about-skills-list{display:flex;flex-wrap:wrap;gap:.45rem;margin:0;padding:0;list-style:none}.about-skills-list li{display:contents}.timeline{position:relative;display:flex;flex-direction:column;gap:1.5rem;width:100%;max-width:100%;overflow-x:clip}.timeline:before{content:"";position:absolute;left:.625rem;top:.5rem;bottom:.5rem;width:2px;background:var(--line);border-radius:2px;transform:translate(-50%);pointer-events:none}.timeline-row{display:grid;grid-template-columns:1.25rem 1fr;column-gap:1rem;align-items:start}.timeline-row-marker{display:flex;justify-content:center;padding-top:1.75rem}.timeline-row--project .timeline-row-marker{padding-top:3.15rem}.timeline-dot{flex-shrink:0;width:14px;height:14px;border-radius:50%;background:var(--accent);border:3px solid var(--bg)}.timeline-dot.project{background:var(--accent-secondary)}.timeline-row-side{min-width:0}.timeline-row-side--left:empty,.timeline-row-side--right:empty{display:none}.timeline-card{position:relative;width:100%;padding:1.25rem 1.35rem;background:var(--card);border:1px solid var(--surface-border);border-radius:var(--radius-md);cursor:pointer;opacity:0;transform:translateY(18px);transition:opacity var(--duration-slow) var(--ease-out),transform var(--duration-slow) var(--ease-out),border-color var(--duration-fast) ease,background-color var(--duration-fast) ease,box-shadow var(--duration-fast) ease}.timeline-card.is-visible,.timeline-card.expanded{opacity:1;transform:translateY(0)}.timeline-card.is-visible:hover,.timeline-card.expanded:hover{transform:translateY(-2px)}.timeline-card:hover{border-color:var(--accent-border);background:var(--card-hover);transform:translateY(-2px)}.timeline-card.expanded{border-color:var(--accent-border)}.timeline-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.timeline-connector{margin:0 0 .5rem;font-size:.8125rem;font-weight:500;color:var(--accent)}.timeline-type{margin:0 0 .35rem;font-size:.6875rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted)}.timeline-head h3{margin:0 0 .35rem;font-family:var(--font-display);font-size:1.125rem;font-weight:600;line-height:1.3}.timeline-meta{margin:0;font-size:.875rem;color:var(--text-muted);overflow-wrap:anywhere}.timeline-body{display:grid;grid-template-rows:0fr;margin-top:0;padding-top:0;color:var(--text-muted);font-size:.9375rem;overflow:hidden;transition:grid-template-rows var(--duration-normal) ease,margin-top var(--duration-normal) ease}.timeline-body.is-open{grid-template-rows:1fr;margin-top:.5rem}.timeline-body-inner{min-height:0;overflow:hidden}.timeline-card.left .timeline-body,.timeline-card.left .timeline-body-inner{text-align:left}.timeline-body ul{margin:.75rem 0 0;padding-left:1.15rem}.timeline-body.is-open .timeline-body-lead,.timeline-body.is-open .timeline-highlights li,.timeline-body.is-open .timeline-body-chips .chip,.timeline-body.is-open .timeline-body-link{animation:timelineItemIn .42s cubic-bezier(.2,0,0,1) both;animation-delay:var(--item-stagger, 0ms)}.timeline-body li+li{margin-top:.35rem}.timeline-body-link{display:inline-block;margin-top:.85rem;font-weight:500;text-decoration:none}.timeline-body a:hover{color:var(--accent-hover)}.chip-row{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.75rem}.chip{display:inline-flex;align-items:center;gap:.38rem;padding:.28rem .62rem .28rem .48rem;font-family:var(--font-mono);font-size:.6875rem;font-weight:500;letter-spacing:.03em;color:var(--text);background:var(--chip-bg);border:1px solid var(--surface-border-strong);border-radius:3px;transition:border-color var(--duration-fast) ease,transform var(--duration-fast) ease}.chip:before{content:"";flex-shrink:0;width:4px;height:4px;border-radius:1px;background:var(--accent)}.chip:hover{border-color:var(--accent-border);transform:translateY(-1px)}.skill-chip{display:inline-flex;align-items:center;padding:.32rem .55rem;font-size:.8125rem;font-weight:500;color:var(--text);background:var(--skill-chip-bg);border:1px solid var(--surface-border-strong);border-radius:4px;transition:border-color var(--duration-fast) ease,background-color var(--duration-fast) ease}.skill-chip:before,.skill-chip:after{font-family:var(--font-mono);font-size:.625rem;font-weight:600;line-height:1;opacity:.45;transition:opacity var(--duration-fast) ease,color var(--duration-fast) ease}.skill-chip:before{content:"[";margin-right:.28rem;color:var(--accent)}.skill-chip:after{content:"]";margin-left:.28rem;color:var(--accent-secondary)}.about-skills-group:hover .skill-chip{border-color:var(--accent-border)}.about-skills-group:nth-child(2n):hover .skill-chip{border-color:var(--accent-secondary-border)}.skill-chip:hover{background:var(--accent-dim);border-color:var(--accent-border)}.skill-chip:hover:before,.skill-chip:hover:after{opacity:.85}.about-skills-group:nth-child(2n) .skill-chip:hover{background:var(--accent-secondary-dim);border-color:var(--accent-secondary-border)}.projects-masonry{columns:1;column-gap:1.25rem}.project-tile{position:relative;display:block;break-inside:avoid;margin-bottom:1.25rem;padding:1.35rem 1.4rem;background:var(--card);border:1px solid var(--surface-border);border-radius:var(--radius-md);cursor:pointer;opacity:0;transform:translateY(1.25rem);transition:opacity var(--duration-slow) var(--ease-out),transform var(--duration-slow) var(--ease-out),border-color var(--duration-fast) ease,background-color var(--duration-fast) ease,box-shadow var(--duration-fast) ease}.project-tile.is-visible{opacity:1;transform:translateY(0)}.project-tile:hover,.project-tile.is-expanded{border-color:var(--accent-border);background:var(--card-hover)}.project-tile:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.project-tile-head{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.project-tile-head h3{margin:0;font-family:var(--font-display);font-size:1.0625rem;font-weight:600;line-height:1.35;letter-spacing:-.01em}.project-tile-year{flex-shrink:0;margin:.15rem 0 0;font-size:.8125rem;font-weight:500;color:var(--text-muted);white-space:nowrap;font-variant-numeric:tabular-nums}.project-tile-front .chip-row{margin-top:.9rem}.project-tile-detail{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--duration-normal) var(--ease-out)}.project-tile-detail-inner{overflow:hidden}.project-tile-detail-inner>p{margin:0;padding-top:.85rem;font-size:.9375rem;color:var(--text-muted);line-height:1.55}.project-tile-detail-inner>a{display:inline-block;margin-top:.75rem;font-size:.875rem;font-weight:600;color:var(--accent);text-decoration:none;transition:color var(--duration-fast) ease}.project-tile-detail-inner>a:hover{color:var(--accent-hover)}.project-tile.is-expanded .project-tile-detail,.project-tile-detail.is-open{grid-template-rows:1fr}@media(min-width:640px){.projects-masonry{columns:2}}@media(min-width:1024px){.projects-masonry{columns:3}}.contact-grid{display:grid;gap:2rem}.contact-links-heading,.contact-form-heading{margin:0 0 .85rem;font-size:.8125rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted)}.contact-links{display:grid;gap:.75rem}.contact-links a{display:flex;align-items:center;gap:.5rem;padding:.95rem 1.1rem;color:var(--text);text-decoration:none;background:var(--card);border:1px solid var(--surface-border);border-radius:var(--radius-md);font-weight:500;box-shadow:var(--shadow-card);transition:border-color var(--duration-fast) ease,color var(--duration-fast) ease,background-color var(--duration-fast) ease,box-shadow var(--duration-fast) ease,transform .12s cubic-bezier(.2,0,0,1)}.contact-links a:active{transform:scale(.96)}.contact-links a:hover{border-color:var(--accent-border);color:var(--accent-hover);background:var(--card-hover);box-shadow:var(--shadow-card),var(--shadow-glow)}.contact-form{display:grid;gap:.85rem}.form-field{display:grid;gap:.35rem}.form-field label{font-size:.8125rem;font-weight:500;color:var(--text-muted)}.contact-form input,.contact-form textarea{width:100%;padding:.85rem 1rem;font-size:1rem;color:var(--text);background:var(--bg-soft);border:1px solid var(--surface-border-strong);border-radius:var(--radius-sm);transition:border-color var(--duration-fast) ease,box-shadow var(--duration-fast) ease}.contact-form input:disabled,.contact-form textarea:disabled{opacity:.65;cursor:not-allowed}.contact-form input::placeholder,.contact-form textarea::placeholder{color:var(--text-muted)}.contact-form input:focus,.contact-form textarea:focus{outline:none;border-color:var(--accent-border);box-shadow:0 0 0 3px var(--accent-dim)}.contact-form button{margin-top:.25rem}.contact-form button:disabled{opacity:.72;cursor:not-allowed}.contact-form button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.hp{position:absolute;opacity:0;pointer-events:none;height:0;width:0}.form-status{margin:0;padding:.65rem .85rem;font-size:.875rem;border-radius:var(--radius-sm);border-left:3px solid var(--line);background:var(--surface-overlay);color:var(--text-muted)}.form-status--error{border-left-color:var(--error);background:var(--accent-dim);color:var(--text)}.form-status--success{border-left-color:var(--success);background:var(--success-dim);color:var(--text)}.contact-signoff{margin:clamp(2.5rem,6vw,3.5rem) 0 0;padding-top:clamp(1.75rem,4vw,2.25rem);border-top:1px solid var(--surface-border);font-size:.9375rem;color:var(--text-muted);text-align:center;text-wrap:pretty;max-width:36rem;margin-inline:auto}.scroll-to-top{position:fixed;right:clamp(1rem,3vw,1.5rem);bottom:clamp(1rem,3vw,1.5rem);z-index:30;width:2.75rem;height:2.75rem;display:grid;place-items:center;border:1px solid var(--surface-border);border-radius:999px;background:var(--card);color:var(--text);box-shadow:var(--shadow-card);cursor:pointer;opacity:0;visibility:hidden;pointer-events:none;transform:translateY(8px) scale(.96);transition:opacity var(--duration-normal) cubic-bezier(.2,0,0,1),visibility var(--duration-normal) cubic-bezier(.2,0,0,1),transform var(--duration-normal) cubic-bezier(.2,0,0,1),border-color var(--duration-fast) ease,background-color var(--duration-fast) ease}.scroll-to-top.is-visible{opacity:1;visibility:visible;pointer-events:auto;transform:translateY(0) scale(1)}.scroll-to-top:active{transform:translateY(0) scale(.96)}.scroll-to-top:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.scroll-to-top-icon{width:.55rem;height:.55rem;border-top:2px solid currentColor;border-right:2px solid currentColor;transform:translateY(2px) rotate(-45deg)}.shortcuts-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:44;border:0;padding:0;background:var(--overlay-backdrop);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);cursor:pointer}.shortcuts-dialog{position:fixed;z-index:45;top:50%;left:50%;width:min(22rem,calc(100vw - 2.5rem));padding:1.25rem 1.35rem 1.35rem;border:1px solid var(--surface-border);border-radius:var(--radius-md);background:var(--card);box-shadow:var(--shadow-card),var(--shadow-glow);transform:translate(-50%,-50%);animation:shortcutsIn .28s cubic-bezier(.2,0,0,1) both}.shortcuts-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem}.shortcuts-header h2{margin:0;font-family:var(--font-display);font-size:1.0625rem;font-weight:600;letter-spacing:-.01em}.shortcuts-close{width:2rem;height:2rem;display:grid;place-items:center;border:1px solid var(--surface-border);border-radius:var(--radius-sm);background:transparent;color:var(--text-muted);font-size:1.25rem;line-height:1;cursor:pointer;transition:border-color var(--duration-fast) ease,color var(--duration-fast) ease,transform .12s cubic-bezier(.2,0,0,1)}.shortcuts-close:active{transform:scale(.96)}.shortcuts-list{margin:0;padding:0;list-style:none;display:grid;gap:.55rem}.shortcuts-list li{display:flex;align-items:center;justify-content:space-between;gap:1rem;font-size:.9375rem;color:var(--text-muted)}.shortcuts-list kbd{min-width:1.75rem;padding:.2rem .45rem;font-family:var(--font-mono);font-size:.75rem;font-weight:600;text-align:center;color:var(--text);background:var(--surface-overlay);border:1px solid var(--surface-border-strong);border-radius:6px;font-variant-numeric:tabular-nums}@media(min-width:768px){.site-header{grid-template-columns:1fr auto 1fr}.nav{display:flex;justify-self:center}.menu-toggle,.mobile-nav,.mobile-nav-backdrop{display:none}.shortcuts-trigger{display:grid}.hero-overlay{margin:0;margin-left:clamp(1.5rem,6vw,5rem);margin-right:auto;max-width:34rem;text-align:left;align-items:flex-start}.hero-copy{margin-inline:0;max-width:none}.hero-actions{justify-content:flex-start}.timeline:before{left:50%;transform:translate(-50%)}.timeline-row{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);column-gap:clamp(1.5rem,4vw,2.5rem);row-gap:0}.timeline-row-marker{grid-column:2;grid-row:1;padding-top:1.75rem;z-index:1}.timeline-row--project .timeline-row-marker{padding-top:3.15rem}.timeline-row-side--left{grid-column:1;display:flex;justify-content:flex-end}.timeline-row-side--right{grid-column:3;display:flex;justify-content:flex-start}.timeline-row-side--left:empty,.timeline-row-side--right:empty{display:flex}.timeline-card{max-width:26rem;padding:1.35rem 1.5rem}.timeline-card.left{text-align:right}.timeline-card.right{text-align:left}.timeline-card.left .timeline-connector,.timeline-card.left .timeline-head{text-align:right}.timeline-card.left .timeline-body,.timeline-card.left .timeline-body-inner{text-align:left}.timeline-card.left .chip-row{justify-content:flex-start}.contact-grid{grid-template-columns:minmax(12rem,.9fr) 1.4fr;gap:2.5rem;align-items:start}}@media(max-width:767px){.about-layout{grid-template-columns:1fr;justify-items:center;text-align:left;align-items:start}.about-photo-wrap{justify-self:center}.about-copy p{max-width:none}.about-skills-groups{grid-template-columns:1fr}.timeline-row-side--left,.timeline-row-side--right{grid-column:2;grid-row:1;display:flex;justify-content:stretch}.timeline-row-side--left:empty,.timeline-row-side--right:empty{display:none}.timeline-card.left,.timeline-card.right,.timeline-card.left .timeline-connector,.timeline-card.left .timeline-head{text-align:left}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.section-header,.timeline-card{opacity:1;transform:none}.timeline-card:hover{transform:none}.project-tile{opacity:1;transform:none}.project-tile-detail,.timeline-body{transition:none}.timeline-body.is-open{grid-template-rows:1fr}.expand-chevron,.menu-toggle span{transition:none}.menu-toggle.is-open span:nth-child(1),.menu-toggle.is-open span:nth-child(3){transform:none}.menu-toggle.is-open span:nth-child(2){opacity:1}.timeline-body.is-open .timeline-body-lead,.timeline-body.is-open .timeline-highlights li,.timeline-body.is-open .timeline-body-chips .chip,.timeline-body.is-open .timeline-body-link{animation:none}.hero-cursor-glow{display:none}.shortcuts-dialog{animation:none}}@keyframes heroPan{0%{transform:translate(0)}to{transform:translate(-3.5%)}}@keyframes fadeUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes taglineIn{0%{opacity:0;transform:scale(.25);filter:blur(4px)}to{opacity:1;transform:scale(1);filter:blur(0)}}@keyframes navLinkIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes timelineItemIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes shortcutsIn{0%{opacity:0;transform:translate(-50%,calc(-50% + 8px)) scale(.98)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}
