.portfolio{overflow-x:clip}.portfolio-hero{position:relative}.hero-scene{position:absolute;z-index:-1;top:-40px;bottom:-90px;left:50%;width:100vw;transform:translateX(-50%);pointer-events:none;opacity:0;transition:opacity 1.4s var(--ease-smooth-out);-webkit-mask-image:radial-gradient(ellipse 56% 62% at 72% 48%,#000 20%,transparent 72%);mask-image:radial-gradient(ellipse 56% 62% at 72% 48%,#000 20%,transparent 72%)}.hero-scene.is-ready{opacity:1}.hero-scene canvas{display:block}.hero-copy,.hero-focus{position:relative}.hero-focus{background:color-mix(in srgb,var(--background) 62%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-radius:0 8px 8px 0;padding-right:28px}.scroll-progress{position:fixed;inset:0 0 auto;height:2px;z-index:40;background:var(--accent);transform-origin:left;transform:scaleX(var(--scroll,0));pointer-events:none}.portfolio-nav a{position:relative}.portfolio-nav a[data-active]{color:var(--accent)}@media (min-width:768px){.portfolio-nav a:not(.nav-contact):after{content:"";position:absolute;left:0;right:0;bottom:-6px;height:1px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform var(--duration-slow) var(--ease-smooth-out)}.portfolio-nav a[data-active]:after{transform:scaleX(1)}}@media (prefers-reduced-motion:no-preference){.reveal-ready [data-reveal=stagger]>*,.reveal-ready [data-reveal]:not([data-reveal=stagger]){opacity:0}.reveal-ready [data-reveal=stagger].is-inview>*,.reveal-ready [data-reveal].is-inview:not([data-reveal=stagger]){animation:immersive-in 1s var(--ease-smooth-out) both;animation-delay:calc(var(--i, 0) * .11s)}}@keyframes immersive-in{0%{opacity:0;translate:0 32px;filter:blur(4px)}to{opacity:1;translate:0 0;filter:blur(0)}}@media (min-width:768px){.career-intro{position:sticky;top:130px;align-self:start}}.career-details{position:relative;padding-left:36px}.career-details:after,.career-details:before{content:"";position:absolute;left:0;top:10px;bottom:0;width:1px;background:var(--border)}.career-details:after{background:var(--accent);transform-origin:top;transform:scaleY(var(--rail,0))}.career-entry{position:relative}.career-entry:before{content:"";position:absolute;left:-40px;top:30px;width:9px;height:9px;border-radius:50%;background:var(--background);border:1px solid var(--border);transition:background-color var(--duration-slow) var(--ease-smooth-out),border-color var(--duration-slow) var(--ease-smooth-out),box-shadow var(--duration-slow) var(--ease-smooth-out)}.career-entry.is-inview:before{background:var(--accent);border-color:var(--accent);box-shadow:0 0 0 5px color-mix(in srgb,var(--accent) 18%,transparent)}.project-item{position:relative;overflow:hidden}.project-item:after{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;background:radial-gradient(420px circle at var(--gx,50%) var(--gy,50%),color-mix(in srgb,#fff 22%,transparent),transparent 60%);transition:opacity var(--tilt-glare-fade) var(--tilt-glare-ease)}.dark .project-item:after{background:radial-gradient(420px circle at var(--gx,50%) var(--gy,50%),color-mix(in srgb,var(--accent) 12%,transparent),transparent 60%)}@media (hover:hover) and (pointer:fine) and (prefers-reduced-motion:no-preference){.project-grid .project-item:hover{transform:perspective(1100px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg)) translateY(-4px);box-shadow:0 24px 50px -24px rgba(20,32,70,.26)}.dark .project-grid .project-item:hover{box-shadow:0 24px 50px -20px rgba(0,0,0,.6)}.project-item:hover:after{opacity:1}.project-item:hover .project-motif svg{transform:translate(calc(var(--tx, 0) * -10px),calc(var(--ty, 0) * -6px))}}.labs-link,.work-heading{align-items:center}.labs-link{display:inline-flex;gap:10px;padding:10px 16px;border:1px solid var(--border);border-radius:999px;font-size:13px;font-weight:500;white-space:nowrap;transition:border-color var(--duration-fast) var(--ease-smooth-out),color var(--duration-fast) var(--ease-smooth-out),background-color var(--duration-fast) var(--ease-smooth-out)}.portfolio .labs-link:hover{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}.hobby-intro a{color:var(--foreground);text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--accent) 60%,transparent);text-underline-offset:3px}.project-group+.project-group{margin-top:48px}.portfolio .project-group-label{display:flex;align-items:center;gap:14px;margin-bottom:18px;font-family:var(--font-jetbrains-mono),monospace;font-size:11px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--accent)}.project-group-label:after{content:"";flex:1;height:1px;background:var(--border)}.project-grid--labs{grid-template-columns:repeat(3,1fr);gap:20px}.project-grid--labs .project-item{padding:20px}.project-grid--labs .project-motif{height:116px}.project-status{padding:2px 8px;border-radius:999px;border:1px solid color-mix(in srgb,var(--accent) 45%,var(--border));color:var(--accent);font-family:var(--font-jetbrains-mono),monospace;font-size:10px;letter-spacing:.04em}@media (max-width:1023px){.project-grid--labs{grid-template-columns:1fr 1fr}}.project-motif{height:132px;margin:-8px -8px 22px;border:1px solid var(--border);border-radius:6px;overflow:hidden;color:var(--muted-foreground);background:radial-gradient(120% 90% at 50% 0,color-mix(in srgb,var(--accent) 7%,transparent),transparent 70%),repeating-linear-gradient(90deg,color-mix(in srgb,var(--border) 70%,transparent) 0 1px,transparent 1px 22px),repeating-linear-gradient(0deg,color-mix(in srgb,var(--border) 70%,transparent) 0 1px,transparent 1px 22px);transition:border-color var(--duration-fast) var(--ease-smooth-out)}.project-item:hover .project-motif{border-color:color-mix(in srgb,var(--accent) 45%,var(--border))}.project-motif svg{display:block;width:100%;height:100%;transition:transform .9s var(--ease-smooth-out);stroke-linecap:round;stroke-linejoin:round}.m-line{stroke:currentColor;stroke-width:1.5}.m-faint{opacity:.45}.m-accent{stroke:var(--accent)}.m-bar{stroke:currentColor;stroke-width:4;opacity:.35}.m-box{fill:var(--accent);stroke:var(--accent);stroke-width:1.5}.m-check,.m-tick{stroke:var(--accent-foreground);stroke-width:2.2}.m-check{stroke-dasharray:1}.m-flow,.m-runner{fill:var(--accent)}.m-trail{stroke:var(--accent);stroke-width:1.5}.m-cell{fill:currentColor;opacity:.6}.m-scan{stroke:var(--accent);stroke-width:2}.m-frame{fill:var(--card);stroke:currentColor;stroke-width:1.5}.m-flash{fill:var(--accent);opacity:0;pointer-events:none}.m-node{fill:var(--card);stroke:currentColor;stroke-width:1.5}.m-node-on{fill:var(--accent);stroke:var(--accent);stroke-width:1.5}.m-progress{stroke:var(--accent);stroke-width:2;stroke-dasharray:1}.m-label{fill:currentColor;font-family:var(--font-jetbrains-mono),monospace;font-size:11px;letter-spacing:.04em}.m-result{fill:var(--accent)}.m-pop,.m-runner,.m-scan{transform-box:fill-box;transform-origin:center}.m-app{fill:none;stroke:var(--accent);stroke-width:2}.m-cycle{opacity:0}.m-cycle-first{opacity:1}.m-check,.m-progress{stroke-dashoffset:0}@media (prefers-reduced-motion:no-preference){.m-parse{animation:m-parse 6s ease-in-out infinite}.m-flow{animation:m-flow 1.2s var(--ease-smooth-out) infinite}.m-pop{opacity:0;animation:m-pop 6s var(--ease-smooth-out) infinite}.m-draw{stroke-dashoffset:1;animation:m-draw 6s var(--ease-smooth-out) infinite}.m-trail{animation:m-trail 8s linear infinite}.m-scan{animation:m-scan 6s var(--ease-smooth-out) infinite}.m-flash{animation:m-flash 6s ease-out infinite}.m-runner{animation:m-run 6s cubic-bezier(.45,0,.55,1) infinite}.m-progress{stroke-dashoffset:1;animation:m-progress 6s cubic-bezier(.45,0,.55,1) infinite}.m-result{animation:m-result 6s ease infinite}.m-cycle{opacity:0;animation:m-cycle 6s var(--ease-smooth-out) infinite}.reveal-ready .project-grid:not(.is-inview) .project-motif *{animation-play-state:paused}}@keyframes m-parse{0%,30%,to{opacity:.35;stroke:currentColor}8%{opacity:1;stroke:var(--accent)}}@keyframes m-flow{0%{transform:translateX(0);opacity:0}30%{opacity:1}to{transform:translateX(80px);opacity:0}}@keyframes m-pop{0%{opacity:0;transform:scale(.7)}5%,55%{opacity:1;transform:scale(1)}62%,to{opacity:0;transform:scale(1)}}@keyframes m-draw{0%{stroke-dashoffset:1}55%,6%{stroke-dashoffset:0}62%,to{stroke-dashoffset:1}}@keyframes m-trail{to{transform:translateX(var(--period))}}@keyframes m-scan{0%{transform:translateY(0);opacity:0}4%{opacity:1}24%{transform:translateY(80px);opacity:1}28%,to{transform:translateY(80px);opacity:0}}@keyframes m-flash{0%,25%{opacity:0}27%{opacity:.12}34%,to{opacity:0}}@keyframes m-run{0%{transform:translateX(0);opacity:1}70%{transform:translateX(440px);opacity:1}76%,to{transform:translateX(440px);opacity:0}}@keyframes m-progress{0%{stroke-dashoffset:1;opacity:1}70%{stroke-dashoffset:0;opacity:1}90%{stroke-dashoffset:0;opacity:0}to{stroke-dashoffset:1;opacity:0}}@keyframes m-cycle{0%{opacity:0}3%,31%{opacity:1}34%,to{opacity:0}}@keyframes m-result{0%,64%{opacity:0}70%,92%{opacity:1}to{opacity:0}}@media (max-width:767px){.hero-scene{top:auto;bottom:-40px;height:70%;opacity:0;-webkit-mask-image:linear-gradient(0deg,transparent,#000 35%,#000 60%,transparent);mask-image:linear-gradient(0deg,transparent,#000 35%,#000 60%,transparent)}.hero-scene.is-ready{opacity:.7}.portfolio .hero-focus{padding:24px 22px 26px;border:1px solid var(--border);border-radius:10px}.career-details{padding-left:26px}.career-entry:before{left:-30px}.project-grid--labs{grid-template-columns:1fr}.work-heading{flex-wrap:wrap}}.kinetic-title{position:relative}.kt-word{clip-path:inset(-.2em -.15em -.24em -.15em)}.kt-word,.kt-word>span{display:inline-block}.kt-accent{background:linear-gradient(currentColor,currentColor) no-repeat 0 100% /100% .05em;-webkit-box-decoration-break:clone;box-decoration-break:clone}.kinetic-title:after{content:"";position:absolute;top:-.04em;bottom:.04em;left:-3em;width:3em;pointer-events:none;opacity:0;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--accent) 13%,transparent) calc(100% - 2px),var(--accent) calc(100% - 2px))}@media (prefers-reduced-motion:no-preference){.kt-word>span{animation:kt-rise 1.1s var(--ease-smooth-out) both;animation-delay:calc(.12s + var(--w, 0) * 75ms)}.kinetic-title:after{animation:kt-scan 1.5s cubic-bezier(.6,0,.3,1) 1s both}.kt-accent{animation:kt-underline 1s var(--ease-smooth-out) 2.1s both}}@keyframes kt-rise{0%{transform:translateY(135%) rotate(5deg)}to{transform:none}}@keyframes kt-scan{0%{left:-3em;opacity:0}12%,80%{opacity:1}to{left:100%;opacity:0}}@keyframes kt-underline{0%{background-size:0 .05em}to{background-size:100% .05em}}.section-motif{height:112px;margin:0 0 30px}.m-flag{stroke:var(--accent);opacity:0}.m-accent-text{fill:var(--accent)}.m-label-on{fill:var(--accent-foreground)}.m-bug{opacity:0}.m-arc-track{stroke:var(--border);stroke-width:7;stroke-linecap:round}.m-arc{stroke:var(--accent);stroke-width:7;stroke-dasharray:1;stroke-dashoffset:.04}.m-needle{stroke:currentColor;stroke-width:2;transform-box:view-box;transform-origin:120px 104px;transform:rotate(83deg)}.m-bug,.m-fixed{transform-box:fill-box;transform-origin:center}@media (prefers-reduced-motion:no-preference){.m-scan-code{animation-name:m-scan-code}.m-flag{animation:m-flag 6s ease infinite}.m-bug{animation:m-bug 6s var(--ease-smooth-out) infinite}.m-fixed{animation:m-fixed 6s var(--ease-smooth-out) infinite}.m-runner-pipe{animation-name:m-run-pipe}.m-stage{opacity:0;transform-box:fill-box;transform-origin:center}.m-stage-0{animation:m-stage-0 6s var(--ease-smooth-out) infinite}.m-stage-1{animation:m-stage-1 6s var(--ease-smooth-out) infinite}.m-stage-2{animation:m-stage-2 6s var(--ease-smooth-out) infinite}.m-stage-3{animation:m-stage-3 6s var(--ease-smooth-out) infinite}.m-arc{animation:m-gauge 6s var(--ease-smooth-out) infinite}.m-needle{animation:m-needle 6s var(--ease-smooth-out) infinite}.reveal-ready [data-reveal]:not(.is-inview) .section-motif *{animation-play-state:paused}}@keyframes m-scan-code{0%{transform:translateY(0);opacity:0}3%{opacity:1}30%{transform:translateY(60px);opacity:1}34%,to{transform:translateY(60px);opacity:0}}@keyframes m-flag{0%,16%{opacity:0}19%,50%{opacity:1}58%,to{opacity:0}}@keyframes m-bug{0%,18%{opacity:0;transform:scale(.7)}22%,50%{opacity:1;transform:scale(1)}54%,to{opacity:0;transform:scale(1)}}@keyframes m-fixed{0%,54%{opacity:0;transform:scale(.7)}58%,90%{opacity:1;transform:scale(1)}96%,to{opacity:0;transform:scale(1)}}@keyframes m-run-pipe{0%{transform:translateX(0);opacity:1}70%{transform:translateX(372px);opacity:1}76%,to{transform:translateX(372px);opacity:0}}@keyframes m-stage-0{0%{opacity:0;transform:scale(.85)}4%,90%{opacity:1;transform:scale(1)}96%,to{opacity:0}}@keyframes m-stage-1{0%,23%{opacity:0;transform:scale(.85)}27%,90%{opacity:1;transform:scale(1)}96%,to{opacity:0}}@keyframes m-stage-2{0%,46%{opacity:0;transform:scale(.85)}50%,90%{opacity:1;transform:scale(1)}96%,to{opacity:0}}@keyframes m-stage-3{0%,69%{opacity:0;transform:scale(.85)}73%,90%{opacity:1;transform:scale(1)}96%,to{opacity:0}}@keyframes m-gauge{0%{stroke-dashoffset:1}55%,90%{stroke-dashoffset:.04}to{stroke-dashoffset:1}}@keyframes m-needle{0%{transform:rotate(-90deg)}55%,90%{transform:rotate(83deg)}to{transform:rotate(-90deg)}}.stat-chart{display:grid;margin-top:16px;font-family:var(--font-jetbrains-mono),monospace;font-size:9px;letter-spacing:.04em;color:var(--muted-foreground)}.stat-chart i{display:block;border-radius:2px;background:color-mix(in srgb,var(--accent) 28%,var(--border))}.stat-years{grid-auto-flow:column;grid-auto-columns:1fr;gap:6px;align-items:end;max-width:180px}.stat-years>span{display:grid;gap:6px;justify-items:start}.stat-years i{width:100%;transform-origin:bottom}.stat-years>span:last-child i{background:var(--accent)}.stat-compare{gap:7px;max-width:220px}.stat-compare>span{display:grid;grid-template-columns:44px 1fr;align-items:center}.stat-compare i{height:6px;transform-origin:left}.stat-compare>span:last-child i{background:var(--accent)}@media (prefers-reduced-motion:no-preference){.reveal-ready .stat-chart i{transform:scale(0)}.reveal-ready .stat-years.is-inview i{animation:stat-grow-y .9s var(--ease-smooth-out) both;animation-delay:calc(.25s + var(--i, 0) * 90ms)}.reveal-ready .stat-compare.is-inview i{animation:stat-grow-x 1.1s var(--ease-smooth-out) both;animation-delay:calc(.25s + var(--i, 0) * .22s)}}@keyframes stat-grow-y{0%{transform:scaleY(0)}to{transform:none}}@keyframes stat-grow-x{0%{transform:scaleX(0)}to{transform:none}}.career-trajectory{margin-top:48px;max-width:300px}.ct-readout{display:grid;gap:2px}.ct-year{font-size:64px;font-weight:500;line-height:1.05;letter-spacing:-.06em;color:var(--accent);font-variant-numeric:tabular-nums}.ct-role{font-size:13px;font-weight:500;margin-top:6px}.ct-org{font-size:12px;color:var(--muted-foreground);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.career-trajectory svg{display:block;width:100%;margin-top:20px;overflow:visible}.ct-track{stroke:var(--border);stroke-width:1.5}.ct-reach{stroke:var(--accent);stroke-width:2;transform-box:fill-box;transform-origin:right;transform:scaleX(var(--reach,0))}.ct-tick{fill:var(--muted-foreground);font-family:var(--font-jetbrains-mono),monospace;font-size:9px}.ct-dot{fill:var(--background);stroke:var(--muted-foreground);stroke-width:1.5}.ct-dot[data-on]{fill:var(--accent);stroke:var(--accent)}.ct-pulse{fill:color-mix(in srgb,var(--accent) 22%,transparent);transform-box:fill-box;transform-origin:center}@media (prefers-reduced-motion:no-preference){.ct-reach{transition:transform .8s var(--ease-smooth-out)}.ct-dot{transition:fill var(--duration-slow) var(--ease-smooth-out),stroke var(--duration-slow) var(--ease-smooth-out)}.ct-pulse{animation:ct-pulse 2.4s var(--ease-smooth-out) infinite}.ct-readout.is-ticking>*{animation:ct-tick .55s var(--ease-smooth-out) both}.ct-readout.is-ticking>:nth-child(2){animation-delay:60ms}.ct-readout.is-ticking>:nth-child(3){animation-delay:.11s}}@keyframes ct-pulse{0%{transform:scale(.6);opacity:1}to{transform:scale(3);opacity:0}}@keyframes ct-tick{0%{opacity:0;translate:0 .4em;filter:blur(3px)}}@media (max-width:767px){.career-trajectory{display:none}.section-motif{height:92px;margin-bottom:24px}}