@import url(https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap);.App{box-sizing:border-box}.top-nav{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--color-border);left:0;padding:.65rem 1.5rem;position:fixed;top:0;transition:background .2s ease,border-color .2s ease;width:100%;z-index:10}.top-nav,.top-nav.dark,.top-nav.light{background:color-mix(in srgb,var(--color-bg) 82%,#0000);color:var(--color-text)}.top-nav.dark,.top-nav.light{border-color:var(--color-border)}.nav-content{align-items:center;display:flex;gap:1rem;justify-content:space-between;margin:0 auto;max-width:1200px}.brand{color:inherit;display:inline-flex;font-size:.95rem;font-weight:650;letter-spacing:-.015em;text-decoration:none}.brand,.nav-left{align-items:center}.nav-left{display:flex;gap:.75rem}.mobile-toggle{background:#0000;border:none;color:var(--color-text);cursor:pointer;display:none;flex-direction:column;gap:5px;padding:.25rem}.mobile-toggle span{background:currentColor;border-radius:var(--radius-md);height:3px;transition:transform .2s ease;width:26px}.nav-links{align-items:center;display:flex;gap:1.25rem}.nav-link-group{position:relative}.nav-links a{text-decoration:none}.nav-link-toggle,.nav-links a{color:inherit;font-size:.95rem;font-weight:500;letter-spacing:0;position:relative}.nav-link-toggle{align-items:center;background:none;border:none;cursor:pointer;display:inline-flex;gap:.4rem}.nav-links a:after{background:currentColor;bottom:-4px;content:"";height:2px;left:0;position:absolute;transform:scaleX(0);transform-origin:left;transition:transform .2s ease;width:100%}.nav-links a:hover:after{transform:scaleX(1)}.nav-dropdown{border:1px solid var(--panel-border);border-radius:12px;display:flex;flex-direction:column;gap:.4rem;left:0;min-width:220px;opacity:0;padding:.75rem;pointer-events:none;position:absolute;top:calc(100% + .5rem);transform:translateY(-6px);transition:opacity .2s ease,transform .2s ease;z-index:5}.nav-dropdown,.top-nav.light .nav-dropdown{background:var(--panel-bg);box-shadow:var(--shadow-strong)}.nav-link-group.open .nav-dropdown{opacity:1;pointer-events:auto;transform:translateY(0)}.nav-dropdown a{border-radius:6px;color:inherit;font-weight:500;padding:.35rem .25rem;text-decoration:none}.nav-dropdown a:hover,.top-nav.light .nav-dropdown a:hover{background:var(--color-surface-alt)}.chevron{border-bottom:2px solid;border-left:2px solid;display:inline-block;height:.5rem;transform:rotate(-45deg);transition:transform .2s ease;width:.5rem}.mobile-link-toggle[aria-expanded=true] .chevron,.nav-link-group.open .chevron{transform:rotate(135deg)}.nav-actions{align-items:center;display:flex;gap:.75rem}.resume-link{border:1px solid;border-radius:var(--radius-md);font-weight:600;padding:.4rem .9rem;text-decoration:none;transition:background .2s ease,color .2s ease}.top-nav.dark .resume-link:hover,.top-nav.light .resume-link:hover{background:var(--color-surface-alt);color:var(--color-text)}.theme-toggle{align-items:center;border:none;border-radius:var(--radius-md);color:inherit;cursor:pointer;display:inline-flex;font-weight:600;gap:.35rem;padding:.35rem .85rem;transition:transform .2s ease,background .2s ease}.theme-toggle,.top-nav.light .theme-toggle{background:var(--color-surface-alt)}.theme-toggle:hover{transform:translateY(-1px)}.toggle-text{font-size:.85rem;letter-spacing:0}.mobile-only{display:none;position:relative}@media (max-width:900px){.nav-content{gap:.5rem;justify-content:flex-start}.nav-left{flex:1 1;position:relative}.nav-actions,.nav-links{display:none}.mobile-drawer{display:block}.mobile-toggle{display:flex}}.nav-left .brand{margin-left:.75rem}@media (max-width:900px){.nav-left .brand{left:50%;position:absolute;transform:translateX(-50%)}}.mobile-backdrop{background:#00000059;display:none;inset:0;position:fixed;z-index:998}.mobile-backdrop.open{display:block}.mobile-drawer{background:var(--panel-bg);display:none;height:100vh;left:0;padding:var(--spacing-lg);position:fixed;top:0;transform:translateX(-100%);transition:transform .3s ease;width:260px;z-index:999}.mobile-drawer.open{display:block;transform:translateX(0)}.mobile-drawer-content nav{display:flex;flex-direction:column;gap:1rem;margin:2rem 0}.mobile-drawer-content a{color:var(--color-text);font-size:1.1rem;text-decoration:none}.mobile-link-group{display:flex;flex-direction:column;gap:.4rem}.mobile-link-toggle{align-items:center;background:none;border:1px solid var(--color-border-strong);border-radius:12px;color:var(--color-text);cursor:pointer;display:flex;font-size:1.1rem;justify-content:space-between;padding:.65rem 1rem;width:100%}.mobile-sub-links{display:none;flex-direction:column;gap:.35rem;padding-left:.5rem}.mobile-sub-links.open{display:flex}.mobile-sub-links a{color:var(--color-text);font-size:1rem;padding-left:.5rem}.mobile-close{background:none;border:none;color:var(--color-text);cursor:pointer;font-size:2rem;margin-left:auto}.mobile-resume,.mobile-theme{background:#0000;border:1px solid var(--color-border-strong);border-radius:var(--radius-md);color:var(--color-text);cursor:pointer;display:block;font:inherit;font-weight:600;margin-top:1rem;padding:.6rem;text-align:center;text-decoration:none;width:100%}.mobile-resume.ghost{border-color:var(--color-border);font-weight:500;opacity:.85}.landing-page{background:var(--color-bg);color:var(--color-text);isolation:isolate;overflow:hidden;padding:clamp(6.5rem,11vh,9rem) clamp(1.25rem,6vw,5rem) 0;position:relative;width:100%}.hero-grid{background-image:linear-gradient(to right,var(--color-border) 1px,#0000 1px),linear-gradient(to bottom,var(--color-border) 1px,#0000 1px);background-size:64px 64px;inset:0;-webkit-mask-image:radial-gradient(120% 80% at 50% 0,#000 20%,#0000 72%);mask-image:radial-gradient(120% 80% at 50% 0,#000 20%,#0000 72%);opacity:.7;position:absolute;z-index:-4}.hero-aurora{filter:blur(58px);height:145%;inset:-25% -15% auto -15%;pointer-events:none;position:absolute;z-index:-3}.aurora-blob{border-radius:50%;display:block;position:absolute;will-change:transform}.aurora-blob.a{animation:aurora-a 26s ease-in-out infinite alternate;background:radial-gradient(circle,var(--mesh-a),#0000 68%);height:34rem;left:-6%;top:-6%;width:46rem}.aurora-blob.b{animation:aurora-b 32s ease-in-out infinite alternate;background:radial-gradient(circle,var(--mesh-b),#0000 68%);height:30rem;right:-8%;top:2%;width:40rem}.aurora-blob.c{animation:aurora-c 38s ease-in-out infinite alternate;background:radial-gradient(circle,var(--mesh-a),#0000 70%);bottom:-8%;height:26rem;left:38%;width:34rem}@keyframes aurora-a{0%{transform:translateZ(0) scale(1)}to{transform:translate3d(9vw,5vh,0) scale(1.16)}}@keyframes aurora-b{0%{transform:translateZ(0) scale(1.1)}to{transform:translate3d(-8vw,7vh,0) scale(.94)}}@keyframes aurora-c{0%{transform:translateZ(0) scale(.95)}to{transform:translate3d(-6vw,-6vh,0) scale(1.2)}}.hero-spotlight{background:radial-gradient(22rem 22rem at 50% 12%,color-mix(in srgb,var(--color-primary) 16%,#0000),#0000 70%);background:radial-gradient(22rem 22rem at var(--mx,50%) var(--my,12%),color-mix(in srgb,var(--color-primary) 16%,#0000),#0000 70%);transition:opacity .3s ease;z-index:-2}.hero-grain,.hero-spotlight{inset:0;pointer-events:none;position:absolute}.hero-grain{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Cpath filter='url(%23a)' d='M0 0h140v140H0z'/%3E%3C/svg%3E");opacity:var(--grain-opacity);z-index:-1}.hero-inner{grid-gap:clamp(2.5rem,5vw,4rem);align-items:center;display:grid;gap:clamp(2.5rem,5vw,4rem);margin:0 auto;max-width:1180px;position:relative;width:100%}.hero-kicker{align-items:center;background:var(--panel-bg);color:var(--color-text);display:inline-flex;font-size:var(--text-sm);font-weight:500;gap:.55rem;justify-self:start;margin:0 0 1.5rem;padding:.3rem .9rem .3rem .35rem;width:-webkit-fit-content;width:fit-content}.hero-avatar,.hero-kicker{border:1px solid var(--color-border);border-radius:999px}.hero-avatar{flex-shrink:0;height:30px;object-fit:cover;width:30px}.hero-kicker-sep{background:var(--color-text-muted);border-radius:999px;height:3px;opacity:.6;width:3px}.hero-kicker-muted{color:var(--color-text-muted)}.hero-inner>h1{font-size:clamp(2.6rem,6.6vw,5.4rem);letter-spacing:-.04em;line-height:1.02;margin:0 0 1.75rem;max-width:18ch}.hero-inner>h1 em{animation:headline-shimmer 9s ease-in-out infinite;background:linear-gradient(100deg,var(--color-primary) 0,var(--color-primary-strong) 42%,var(--color-primary) 100%);-webkit-background-clip:text;background-clip:text;background-size:220% 100%;color:#0000;font-style:normal}@keyframes headline-shimmer{0%,to{background-position:0 50%}50%{background-position:100% 50%}}.hero-columns{grid-gap:clamp(1.75rem,4vw,3.5rem);align-items:start;display:grid;gap:clamp(1.75rem,4vw,3.5rem)}.hero-subtitle{color:var(--color-text-muted);font-size:clamp(1.05rem,1.5vw,1.2rem);margin:0 0 1.5rem;max-width:44ch}.hero-highlights{grid-gap:.55rem;display:grid;gap:.55rem;list-style:none;margin:0;max-width:44ch;padding:0}.hero-highlights li{align-items:flex-start;color:var(--color-text-muted);display:flex;font-size:var(--text-sm);gap:.65rem;line-height:1.55}.hero-highlights li:before{background:var(--color-primary);border-radius:999px;content:"";display:block;flex-shrink:0;height:5px;margin-top:.6rem;width:5px}.cta-group{display:flex;flex-wrap:wrap;gap:.6rem}.landing-page .btn{align-items:center;border:1px solid #0000;border-radius:var(--radius-md);cursor:pointer;display:inline-flex;font-size:var(--text-sm);font-weight:600;justify-content:center;padding:.72rem 1.3rem;transition:background .18s ease,border-color .18s ease,color .18s ease,transform .18s ease}.landing-page .btn.primary{background:var(--color-primary);color:var(--color-primary-contrast)}.landing-page .btn.primary:hover{background:var(--color-primary-strong);color:var(--color-primary-contrast);transform:translateY(-1px)}.landing-page .btn.secondary{border-color:var(--color-border-strong);color:var(--color-text)}.landing-page .btn.secondary:hover{border-color:var(--color-primary);color:var(--color-primary)}.landing-page .btn.ghost{color:var(--color-text-muted)}.landing-page .btn.ghost:hover{color:var(--color-text)}.hero-stats{grid-gap:1px;background:var(--color-border);border:1px solid var(--color-border);border-radius:var(--radius-lg);display:grid;gap:1px;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));margin:clamp(3.5rem,7vw,5.5rem) auto 0;max-width:1180px;overflow:hidden;position:relative}.hero-stat{background:var(--color-bg);padding:var(--spacing-md) var(--spacing-md) 1.1rem}.hero-stat-value{color:var(--color-primary);font-size:clamp(1.9rem,3.4vw,2.7rem);font-weight:700;letter-spacing:-.04em;line-height:1;margin:0 0 .4rem;text-shadow:0 0 28px color-mix(in srgb,var(--color-primary) 38%,#0000)}.hero-stat-label{color:var(--color-text);font-size:var(--text-sm);font-weight:600;margin:0 0 .15rem}.hero-stat-detail{color:var(--color-text-muted);font-size:var(--text-xs);line-height:1.45;margin:0}.hero-marquee{margin:clamp(2.5rem,5vw,4rem) -6vw 0;-webkit-mask-image:linear-gradient(90deg,#0000,#000 8%,#000 92%,#0000);mask-image:linear-gradient(90deg,#0000,#000 8%,#000 92%,#0000);overflow:hidden;padding:1.1rem 0 clamp(2.5rem,5vw,3.5rem);position:relative}.hero-marquee-track{animation:hero-marquee 48s linear infinite;display:flex;width:-webkit-max-content;width:max-content}.hero-marquee:hover .hero-marquee-track{animation-play-state:paused}.hero-marquee-group{align-items:center;display:flex;gap:2.5rem;padding-right:2.5rem}.hero-marquee-item{align-items:center;color:var(--color-text-muted);display:inline-flex;font-size:var(--text-sm);font-weight:500;gap:.5rem;white-space:nowrap}.hero-marquee-item img{height:20px;object-fit:contain;width:20px}@keyframes hero-marquee{0%{transform:translateX(0)}to{transform:translateX(-50%)}}@media (min-width:860px){.hero-columns{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}@media (max-width:640px){.hero-kicker-muted,.hero-kicker-sep{display:none}}@media (prefers-reduced-motion:reduce){.hero-marquee-track{animation:none;transform:none}.hero-marquee{-webkit-mask-image:none;mask-image:none;overflow-x:auto}.landing-page .btn:hover{transform:none}}.tech-stack{background:var(--color-bg);border-top:1px solid var(--color-border);color:var(--color-text);padding:var(--spacing-xl) clamp(1.25rem,6vw,5rem)}.tech-stack-hero{margin:0 auto var(--spacing-lg);max-width:1180px}.tech-stack-header{font-size:var(--text-2xl);margin:0}.tech-card-grid{grid-gap:var(--spacing-md);align-items:start;display:grid;gap:var(--spacing-md);grid-template-columns:repeat(auto-fit,minmax(260px,1fr));margin:0 auto;max-width:1180px}.tech-card{background:var(--panel-bg);border:1px solid var(--panel-border);border-radius:var(--radius-lg);padding:var(--spacing-md)}.tech-card h2{color:var(--color-text-muted);font-size:var(--text-base);font-weight:600;margin:0 0 var(--spacing-sm)}.tech-logo-grid{grid-gap:2px;display:grid;gap:2px}.tech-logo-grid a{align-items:center;border-radius:var(--radius-sm);color:var(--color-text);display:flex;font-size:var(--text-sm);gap:.7rem;padding:.35rem .5rem;transition:background .18s ease}.tech-logo-grid a:hover{background:var(--color-surface-alt);color:var(--color-text)}.tech-logo-grid span{font-weight:500}.tech-logo-grid img{flex-shrink:0;height:24px;object-fit:contain;width:24px}.tech-logo-grid img.tech-icon-mono{filter:invert(1)}:root[data-theme=light] .tech-logo-grid img.tech-icon-mono{filter:none}.tech-wordmark-tile{align-items:center;background:var(--color-surface-alt);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-primary);display:inline-flex;flex-shrink:0;font-size:.6rem;font-weight:700;height:24px;justify-content:center;letter-spacing:.01em;width:24px}@media (max-width:640px){.tech-card-grid{gap:var(--spacing-sm);grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}}.about-me{background:var(--color-bg);color:var(--color-text);padding:var(--spacing-xl) clamp(1.25rem,6vw,5rem)}.about-hero{grid-gap:var(--spacing-lg);align-items:center;display:grid;gap:var(--spacing-lg);margin:0 auto var(--spacing-xl);max-width:1180px}.about-text{min-width:0}.about-me-header{font-size:var(--text-2xl);margin-bottom:var(--spacing-sm);max-width:26ch}.about-summary{color:var(--color-text-muted);font-size:var(--text-lg);margin:0;max-width:60ch}.about-image-wrapper{grid-gap:var(--spacing-sm);display:grid;gap:var(--spacing-sm);justify-items:start}.profile-image{border:1px solid var(--color-border);border-radius:var(--radius-lg);height:250px;object-fit:cover;width:200px}.profile-caption{color:var(--color-text-muted);font-size:var(--text-sm);margin:0}.about-grid{grid-gap:var(--spacing-md);display:grid;gap:var(--spacing-md);grid-template-columns:repeat(auto-fit,minmax(280px,1fr));margin:0 auto;max-width:1180px}.about-card{background:var(--panel-bg);border:1px solid var(--panel-border);border-radius:var(--radius-lg);color:var(--color-text);padding:var(--spacing-lg)}.about-card h3{font-size:var(--text-xl);margin-bottom:var(--spacing-sm)}.about-card p{color:var(--color-text-muted);font-size:var(--text-sm);margin-bottom:var(--spacing-md)}.about-card ul{grid-gap:.5rem;display:grid;gap:.5rem;list-style:none;margin:0;padding:0}.about-card li{color:var(--color-text-muted);font-size:var(--text-sm);line-height:1.55;padding-left:1.1rem;position:relative}.about-card li:before{background:var(--color-primary);border-radius:999px;content:"";height:5px;left:0;position:absolute;top:.62rem;width:5px}@media (min-width:900px){.about-hero{grid-template-columns:minmax(0,1fr) auto}.about-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}.contact-section{background:var(--color-bg);border-top:1px solid var(--color-border);color:var(--color-text);padding:var(--spacing-xl) clamp(1.25rem,6vw,5rem)}.contact-card{margin:0 auto;max-width:1180px}.contact-header{margin-bottom:var(--spacing-lg)}.contact-header h2{margin:0 0 var(--spacing-xs)}.contact-header p{color:var(--color-text-muted);margin:0}.contact-grid{grid-gap:var(--spacing-sm);display:grid;gap:var(--spacing-sm);grid-template-columns:repeat(auto-fit,minmax(240px,1fr));margin-bottom:var(--spacing-lg)}.contact-channel{align-items:center;background:var(--panel-bg);border:1px solid var(--panel-border);border-radius:var(--radius-lg);color:var(--color-text);display:flex;gap:var(--spacing-sm);padding:var(--spacing-md);transition:border-color .18s ease}.contact-channel:hover{border-color:var(--color-primary);color:var(--color-text)}.channel-icon{color:var(--color-primary);font-size:1.15rem;text-align:center;width:1.5rem}.channel-label{display:block;font-size:var(--text-sm);font-weight:600}.channel-action{color:var(--color-text-muted);font-size:var(--text-sm)}.contact-socials{display:flex;flex-wrap:wrap;gap:.5rem}.contact-socials a{align-items:center;border:1px solid var(--panel-border);border-radius:var(--radius-md);color:var(--color-text-muted);display:inline-flex;font-size:var(--text-sm);font-weight:500;gap:.45rem;padding:.45rem .9rem;transition:border-color .18s ease,color .18s ease}.contact-socials a:hover{border-color:var(--color-primary);color:var(--color-primary)}.social-icon{font-size:1rem}.projects{background:var(--color-surface-alt);color:var(--color-text);padding:var(--spacing-xl) clamp(1.25rem,6vw,5rem)}.projects-intro{margin:0 auto var(--spacing-xl);max-width:1180px}.projects-header{font-size:var(--text-2xl);margin:0 0 var(--spacing-sm);max-width:28ch}.projects-summary{color:var(--color-text-muted);font-size:var(--text-lg);margin:0;max-width:62ch}.project-section{margin:0 auto var(--spacing-xl);max-width:1180px}.project-section:last-child{margin-bottom:0}.project-section-header{margin-bottom:var(--spacing-md)}.project-section-header .eyebrow{color:var(--color-primary);display:block;margin:0 0 .2rem}.project-section-header h3{font-size:var(--text-xl);margin:0 0 var(--spacing-xs)}.project-section-header p{color:var(--color-text-muted);margin:0;max-width:62ch}@media (max-width:600px){.projects{padding:var(--spacing-lg) 1rem}}.project-feature,.project-layout{grid-gap:var(--spacing-lg);display:grid;gap:var(--spacing-lg)}.project-feature{background:var(--panel-bg);border:1px solid var(--panel-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-strong);color:var(--color-text);padding:var(--spacing-lg)}.project-feature>.tech-list-container{grid-column:1/-1}.feature-media{border:1px solid var(--panel-border);border-radius:var(--radius-md);box-shadow:var(--shadow-soft);overflow:hidden;position:relative;width:100%}.feature-media img{height:340px;object-fit:contain;width:100%}.feature-media-overlay{background:linear-gradient(135deg,#0000001a,#0000);inset:0;pointer-events:none;position:absolute}.feature-body h3{font-size:var(--text-2xl);margin:var(--spacing-xs) 0;text-align:left}.feature-body p{color:var(--color-text-muted);margin-bottom:var(--spacing-sm);text-align:left}.project-links{display:flex;flex-wrap:wrap;gap:var(--spacing-sm);justify-content:flex-start;margin:var(--spacing-md) 0}.project-link{align-items:center;border-radius:var(--radius-md);display:inline-flex;font-weight:600;justify-content:center;padding:.45rem 1rem;text-decoration:none;transition:background .2s ease,color .2s ease}.project-link.primary{background:var(--color-primary);border:none;color:var(--color-primary-contrast)}.project-link.secondary{border:1px solid var(--panel-border);color:var(--color-text)}.project-link.secondary:hover{border-color:var(--color-primary);color:var(--color-primary)}.project-archived{align-items:center;background:#0000;border:1px dashed var(--color-border);border-radius:var(--radius-md);color:var(--color-accent);display:inline-flex;font-size:var(--text-xs);font-weight:600;letter-spacing:.02em;padding:.45rem 1.2rem}.project-list-label{color:var(--color-text-muted);font-size:var(--text-sm);margin:0}.project-list{align-self:stretch;background:var(--panel-bg-soft);border:1px solid var(--panel-border);border-radius:var(--radius-lg);display:flex;flex-direction:column;gap:var(--spacing-xs);height:min(647px,647px);height:min(var(--project-list-height,var(--project-list-max,647px)),var(--project-list-max,647px));max-height:647px;max-height:var(--project-list-max,647px);min-height:0;overflow:hidden;padding:var(--spacing-md);position:relative}.project-list.scrollable{box-shadow:none}.project-list-header{align-items:center;display:flex;gap:var(--spacing-sm);justify-content:space-between;margin-bottom:var(--spacing-sm)}.project-list-hint{align-items:center;border:1px dashed var(--color-border-strong);border-radius:var(--radius-md);color:var(--color-text-muted);display:inline-flex;font-size:var(--text-xs);gap:.35rem;letter-spacing:.02em;padding:.15rem .65rem}.project-list-hint-icon{font-size:.9rem}.project-list-scroll{flex:1 1;height:100%;min-height:0;position:relative}.project-list-items{display:flex;flex-direction:column;gap:var(--spacing-sm);height:100%;overflow-y:auto;padding-right:.35rem;scrollbar-color:var(--color-primary) #0000;scrollbar-width:thin}.project-list-items::-webkit-scrollbar{width:6px}.project-list-items::-webkit-scrollbar-track{background:#0000}.project-list-items::-webkit-scrollbar-thumb{background:var(--color-primary);border-radius:var(--radius-md)}.project-list-fade{border-radius:var(--radius-md);display:block;height:32px;left:var(--spacing-sm);pointer-events:none;position:absolute;right:var(--spacing-sm)}.project-list-fade.top{background:linear-gradient(180deg,var(--panel-bg-soft) 0,color-mix(in srgb,var(--panel-bg-soft) 0,#0000) 100%);top:var(--spacing-xs)}.project-list-fade.bottom{background:linear-gradient(0deg,var(--panel-bg-soft) 0,color-mix(in srgb,var(--panel-bg-soft) 0,#0000) 100%);bottom:var(--spacing-xs)}.project-list-item{align-items:center;background:var(--panel-bg-soft);border:1px solid var(--panel-border);border-radius:var(--radius-md);color:var(--color-text);cursor:pointer;display:flex;gap:var(--spacing-md);justify-content:space-between;padding:var(--spacing-md);text-align:left;transition:border .2s ease,background .2s ease;width:100%}.project-list-item.active{background:var(--panel-bg);border-color:var(--color-primary)}.project-list-item h4{font-size:var(--text-xl);margin:var(--spacing-xs) 0}.project-list-item p{-webkit-line-clamp:2;-webkit-box-orient:vertical;color:var(--color-text-muted);display:-webkit-box;margin:0;overflow:hidden}.project-list-tag{color:var(--color-primary);font-size:var(--text-xs);letter-spacing:.02em}.project-list-toggle{color:var(--color-primary);font-size:var(--text-sm)}.projects-empty{color:var(--color-text-muted);font-size:var(--text-lg);padding:var(--spacing-lg);text-align:center}@media (min-width:900px){.project-layout{align-items:start;grid-template-columns:1.7fr 1fr}.project-feature{align-items:start;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.project-feature>.tech-list-container{grid-column:1/-1}}@media (max-width:600px){.project-feature,.project-layout{grid-template-columns:1fr}.project-feature{gap:0;padding:var(--spacing-md)}.project-list{--project-list-height:auto;border:none;height:auto;max-height:none;min-height:auto;overflow:visible;padding:0}.project-list-header{margin-bottom:var(--spacing-xs)}.project-list-hint{display:none}.project-list-scroll{height:auto;min-height:auto;position:static}.project-list-fade{display:none}.project-list-items{flex-direction:column;gap:var(--spacing-sm);overflow:visible;padding:0;width:100%}.project-list-label{display:block;margin-bottom:var(--spacing-xs)}.feature-media img{height:200px}.feature-body h3{font-size:var(--text-xl)}.feature-body p{-webkit-line-clamp:3;font-size:var(--text-base)}.feature-body{padding-bottom:var(--spacing-sm)}.tech-list-container{margin-top:var(--spacing-xs);padding-top:var(--spacing-xs)}.project-links{margin:var(--spacing-sm) 0}.project-link{padding:.35rem 1rem}.project-list-item{border-radius:var(--radius-md);flex:1 1 auto;gap:var(--spacing-sm);justify-content:space-between;padding:var(--spacing-sm)}.project-list-item.active{background:var(--panel-bg);border-color:var(--color-primary)}}.project-tag{color:var(--color-primary);display:block;font-size:var(--text-xs);letter-spacing:.02em;text-align:center}.tech-list-container{border-top:1px solid var(--panel-border);display:flex;flex-direction:column;margin-top:var(--spacing-md);padding-top:var(--spacing-sm);width:100%}.tech-eyebrow{color:var(--color-text-muted);font-size:var(--text-xs);margin:0 0 var(--spacing-xs)}.tech-list{display:flex;flex-wrap:wrap;gap:.35rem;width:100%}.tech-chip{background:#0000;border:1px solid var(--panel-border);border-radius:var(--radius-sm);color:var(--color-text-muted);font-size:var(--text-xs);padding:.2rem .55rem}@media (max-width:600px){.tech-list-container{margin-top:0;padding-top:var(--spacing-xs)}}.resume-page{background:var(--color-surface-alt);color:var(--color-text);min-height:100vh;padding:clamp(5.5rem,8vw,7rem) clamp(1rem,4vw,3rem) clamp(3rem,6vw,5rem)}.resume-sheet{background:var(--panel-bg);border:1px solid var(--panel-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-strong);margin:0 auto;max-width:1080px;padding:clamp(1.5rem,4vw,3.5rem);text-align:left}.resume-masthead{grid-gap:var(--spacing-lg);align-items:center;border-bottom:1px solid var(--panel-border);display:grid;gap:var(--spacing-lg);grid-template-columns:auto minmax(0,1fr);padding-bottom:var(--spacing-lg)}.resume-headshot{border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-soft);height:132px;object-fit:cover;width:132px}.resume-identity h1{font-size:clamp(2rem,4vw,2.9rem);margin-bottom:.35rem}.resume-title{color:var(--color-primary);font-size:var(--text-xl);font-weight:600;margin:0 0 .25rem}.resume-location{color:var(--color-text-muted);font-size:var(--text-xs);letter-spacing:.02em;margin:0 0 var(--spacing-sm);text-transform:uppercase}.resume-contacts{display:flex;flex-wrap:wrap;gap:.5rem 1.25rem;list-style:none;margin:0;padding:0}.resume-contacts a{align-items:center;color:var(--color-text-muted);display:inline-flex;font-size:var(--text-sm);font-weight:500;gap:.5rem;transition:color .2s ease}.resume-contacts a:hover,.resume-contacts i{color:var(--color-primary)}.resume-contacts i{text-align:center;width:1rem}.resume-actions{display:flex;flex-wrap:wrap;gap:.75rem;grid-column:1/-1}.resume-btn{align-items:center;border-radius:var(--radius-md);display:inline-flex;font-size:var(--text-sm);font-weight:600;padding:.7rem 1.6rem;transition:transform .2s ease,box-shadow .2s ease,background .2s ease}.resume-btn.primary{background:var(--color-primary);color:var(--color-primary-contrast)}.resume-btn.ghost{border:1px solid var(--color-border);color:var(--color-text-muted)}.resume-btn:hover{transform:translateY(-2px)}.resume-btn.ghost:hover{border-color:var(--color-primary);color:var(--color-primary)}@media (min-width:900px){.resume-masthead{grid-template-columns:auto minmax(0,1fr) auto}.resume-actions{flex-direction:column;grid-column:auto}}@media (max-width:640px){.resume-masthead{gap:var(--spacing-md);grid-template-columns:minmax(0,1fr)}.resume-headshot{height:96px;width:96px}.resume-identity h1{font-size:1.85rem}.resume-contacts{gap:.4rem .9rem}.resume-contacts a{overflow-wrap:anywhere}.resume-btn{flex:1 1 auto;justify-content:center}}.resume-section{grid-gap:var(--spacing-md);border-bottom:1px solid var(--panel-border);display:grid;gap:var(--spacing-md);padding:var(--spacing-lg) 0}.resume-section:last-child{border-bottom:none;padding-bottom:0}.resume-section>h2{color:var(--color-text-muted);font-size:var(--text-xs);font-weight:600;letter-spacing:.08em;text-transform:uppercase}.resume-section-body p{color:var(--color-text-muted);font-size:var(--text-base)}.resume-section-body p:last-child{margin-bottom:0}@media (min-width:900px){.resume-section{align-items:start;gap:var(--spacing-lg);grid-template-columns:180px minmax(0,1fr)}.resume-section>h2{position:-webkit-sticky;position:sticky;top:96px}}.resume-skills{grid-gap:.6rem;display:grid;gap:.6rem;margin:0}.resume-skill-row{grid-gap:.15rem 1rem;display:grid;gap:.15rem 1rem}.resume-skill-row dt{color:var(--color-primary);font-size:var(--text-xs);font-weight:600;letter-spacing:.02em;text-transform:uppercase}.resume-skill-row dd{color:var(--color-text);font-size:var(--text-sm);margin:0}@media (min-width:640px){.resume-skill-row{align-items:baseline;grid-template-columns:120px minmax(0,1fr)}}.resume-timeline{grid-gap:var(--spacing-lg);display:grid;gap:var(--spacing-lg);list-style:none;margin:0;padding:0}.resume-job{grid-gap:.5rem;display:grid;gap:.5rem;padding-left:1.5rem;position:relative}.resume-job:before{background:var(--color-primary);border-radius:var(--radius-md);content:"";height:10px;left:0;position:absolute;top:.55rem;width:10px}.resume-job:after{background:var(--panel-border);bottom:calc(var(--spacing-lg)*-1);content:"";left:4px;position:absolute;top:1.5rem;width:1px}.resume-job:last-child:after{display:none}.resume-job-meta{align-items:center;display:flex;flex-wrap:wrap;gap:.6rem}.resume-dates{font-feature-settings:"tnum";color:var(--color-text-muted);font-size:var(--text-xs);font-variant-numeric:tabular-nums}.resume-badge,.resume-dates{letter-spacing:.02em;text-transform:uppercase}.resume-badge{background:#0000;border:1px solid var(--color-border-strong);border-radius:var(--radius-md);color:var(--color-primary);font-size:.68rem;font-weight:600;padding:.15rem .6rem}.resume-badge.subtle{background:#0000;border-color:var(--color-border);color:var(--color-accent);margin-left:.6rem}.resume-job-body h3{align-items:baseline;display:flex;flex-wrap:wrap;font-size:var(--text-lg);gap:.5rem}.resume-company{color:var(--color-text-muted);font-size:var(--text-base);font-weight:500}.resume-company:before{color:var(--color-text-muted);content:"· "}.resume-job-location{color:var(--color-text-muted);font-size:var(--text-xs);letter-spacing:.02em;margin:.2rem 0 .6rem}.resume-edu-entry ul,.resume-job-body ul{grid-gap:.45rem;display:grid;gap:.45rem;list-style:none;margin:0;padding:0}.resume-edu-entry li,.resume-job-body li{color:var(--color-text-muted);font-size:var(--text-sm);line-height:1.55;padding-left:1.15rem;position:relative}.resume-edu-entry li:before,.resume-job-body li:before{background:var(--color-primary);border-radius:var(--radius-md);content:"";height:5px;left:0;position:absolute;top:.6rem;width:5px}.resume-projects{grid-gap:var(--spacing-md);display:grid;gap:var(--spacing-md);grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.resume-project{background:var(--panel-bg-soft);border:1px solid var(--panel-border);border-radius:var(--radius-md);padding:var(--spacing-md)}.resume-project h3{font-size:var(--text-base);margin-bottom:.4rem}.resume-project p{font-size:var(--text-sm);line-height:1.55;margin:0}.resume-education{grid-gap:var(--spacing-md);display:grid;gap:var(--spacing-md)}.resume-edu-entry h3{align-items:center;display:flex;flex-wrap:wrap;font-size:var(--text-base)}.resume-credential{color:var(--color-text-muted);font-size:var(--text-sm);margin:.15rem 0 .4rem}@media print{.resume-page{background:#fff;color:#111;padding:0}.resume-sheet{background:#fff;border:none;box-shadow:none;max-width:none;padding:0}.resume-actions,.top-nav{display:none}.resume-job,.resume-section{break-inside:avoid;page-break-inside:avoid}.resume-section>h2{position:static}.resume-page *,.resume-page a{color:#111!important}}@media (prefers-reduced-motion:reduce){.resume-btn{transition:none}.resume-btn:hover{transform:none}}:root{--color-bg:#0a1020;--color-surface:#111a2e;--color-surface-alt:#16223a;--color-text:#eef4ff;--color-text-muted:#97a8c4;--color-primary:#38bdf8;--color-primary-strong:#7dd3fc;--color-primary-contrast:#04121f;--color-secondary:#7dd3fc;--color-accent:#fbbf24;--color-border:#ffffff1c;--color-border-strong:#fff3;--mesh-a:#38bdf842;--mesh-b:#3b82f62e;--grain-opacity:0.035;--panel-bg:#111a2e;--panel-bg-soft:#16223a;--panel-border:#ffffff1c;--spacing-xs:0.4rem;--spacing-sm:0.8rem;--spacing-md:1.25rem;--spacing-lg:2rem;--spacing-xl:3.5rem;--radius-sm:6px;--radius-md:10px;--radius-lg:16px;--shadow-soft:0 1px 2px #00000047;--shadow-strong:0 2px 6px #00000059;--font-base:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Arial,sans-serif;--font-display:var(--font-base);--text-xs:0.8rem;--text-sm:0.9rem;--text-base:1rem;--text-lg:1.075rem;--text-xl:1.35rem;--text-2xl:clamp(1.6rem,2.4vw,2.1rem);--text-3xl:clamp(2.1rem,3.4vw,3rem)}:root[data-theme=light]{--color-bg:#f5f9ff;--color-surface:#fff;--color-surface-alt:#e9f1fd;--color-text:#0d1a2b;--color-text-muted:#4a5c73;--color-primary:#0284c7;--color-primary-strong:#0369a1;--color-primary-contrast:#fff;--color-secondary:#0369a1;--color-accent:#b45309;--color-border:#0d1a2b1a;--color-border-strong:#0d1a2b30;--mesh-a:#38bdf82e;--mesh-b:#3b82f61f;--grain-opacity:0.022;--panel-bg:#fff;--panel-bg-soft:#e9f1fd;--panel-border:#0d1a2b1a;--shadow-soft:0 1px 2px #09090b0d;--shadow-strong:0 2px 8px #09090b12}html{overflow-x:hidden}#root,body{min-height:100%}#root,body,html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#0a1020;background-color:var(--color-bg);box-sizing:border-box;color:#eef4ff;color:var(--color-text);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Arial,sans-serif;font-family:var(--font-base);line-height:1.6;margin:0;width:100%}*,:after,:before{box-sizing:inherit}body{font-size:1rem;font-size:var(--text-base)}h1,h2,h3,h4,h5,h6{text-wrap:balance;color:#eef4ff;color:var(--color-text);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Arial,sans-serif;font-family:var(--font-base);font-weight:600;letter-spacing:-.021em;line-height:1.15;margin:0}h1{font-size:clamp(2.1rem,3.4vw,3rem);font-size:var(--text-3xl);font-weight:700;letter-spacing:-.032em}h2{font-size:clamp(1.6rem,2.4vw,2.1rem);font-size:var(--text-2xl);letter-spacing:-.026em}h3{font-size:1.35rem;font-size:var(--text-xl)}p{text-wrap:pretty;font-size:1rem;font-size:var(--text-base);margin:0 0 1.25rem;margin:0 0 var(--spacing-md)}.caption,.eyebrow,p,small{color:#97a8c4;color:var(--color-text-muted)}.caption,.eyebrow,small{font-size:.9rem;font-size:var(--text-sm);font-weight:500;letter-spacing:0;text-transform:none}a{color:#38bdf8;color:var(--color-primary);font-weight:500;text-decoration:none}a:hover{color:#7dd3fc;color:var(--color-primary-strong)}:where(a,button,[tabindex]):focus-visible{border-radius:6px;border-radius:var(--radius-sm);outline:2px solid #38bdf8;outline:2px solid var(--color-primary);outline-offset:2px}section[id]{scroll-margin-top:96px}@media (max-width:600px){section[id]{scroll-margin-top:78px}}[data-reveal]{opacity:0;transform:translateY(14px);transition:opacity .55s cubic-bezier(.22,1,.36,1),transform .55s cubic-bezier(.22,1,.36,1)}[data-reveal].is-visible{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){[data-reveal],[data-reveal].is-visible{opacity:1;transform:none;transition:none}*,:after,:before{animation-duration:.001ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.001ms!important}}
/*# sourceMappingURL=main.c3db4c6c.css.map*/