:root{--duration-stagger:40ms;--duration-micro:80ms;--duration-quick:150ms;--duration-fast:250ms;--duration-medium:350ms;--duration-slow:400ms;--duration-very-slow:500ms;--ease-smooth-out:cubic-bezier(0.22,1,0.36,1);--ease-in-out:ease-in-out;--ease-out:ease-out;--ease-linear:linear;--ease-bounce:cubic-bezier(0.34,1.36,0.64,1);--ease-bounce-strong:cubic-bezier(0.34,3.85,0.64,1);--distance-micro:4px;--distance-small:6px;--distance-base:8px;--distance-medium:12px;--distance-large:30px;--scale-large:0.96;--scale-medium:0.97;--scale-small:0.98;--scale-tiny:0.99;--blur-small:2px;--blur-medium:3px;--blur-large:8px;--dropdown-open-dur:250ms;--dropdown-close-dur:150ms;--dropdown-pre-scale:0.97;--dropdown-closing-scale:0.99;--dropdown-ease:cubic-bezier(0.22,1,0.36,1);--modal-open-dur:250ms;--modal-close-dur:150ms;--modal-scale:0.96;--modal-scale-close:0.98;--modal-ease:cubic-bezier(0.22,1,0.36,1);--icon-swap-dur:250ms;--icon-swap-blur:2px;--icon-swap-start-scale:0.25;--icon-swap-ease:ease-in-out;--check-opacity-dur:500ms;--check-rotate-dur:500ms;--check-rotate-from:80deg;--check-bob-dur:500ms;--check-y-amount:40px;--check-blur-dur:500ms;--check-blur-from:10px;--check-path-dur:500ms;--check-path-delay:80ms;--check-ease-out:cubic-bezier(0.22,1,0.36,1);--check-ease-opacity:cubic-bezier(0.22,1,0.36,1);--check-ease-rotate:cubic-bezier(0.22,1,0.36,1);--check-ease-bob:cubic-bezier(0.34,1.35,0.64,1);--check-ease-path:cubic-bezier(0.22,1,0.36,1);--learn-shift:2px;--learn-in:350ms;--learn-out:250ms;--learn-ease:cubic-bezier(0.22,1,0.36,1);--stagger-dur:500ms;--stagger-distance:12px;--stagger-stagger:40ms;--stagger-blur:3px;--stagger-ease:cubic-bezier(0.22,1,0.36,1);--tilt-perspective:1000px;--tilt-return:1000ms;--tilt-return-ease:cubic-bezier(0.22,1,0.36,1);--tilt-follow:400ms;--tilt-follow-ease:cubic-bezier(0.22,1,0.36,1);--tilt-glare-opacity:0.25;--tilt-glare-fade:300ms;--tilt-glare-ease:cubic-bezier(0.22,1,0.36,1);--think-shimmer:2000ms;--tt-in-dur:150ms;--tt-out-dur:50ms;--tt-scale:0.98;--tt-delay:80ms;--tt-in-ease:ease-out;--tt-out-ease:ease-out;--tt-bg:var(--card);--tt-fg:var(--foreground)}.t-dropdown{transform-origin:top right;transform:scale(var(--dropdown-pre-scale)) translateY(-4px);opacity:0;pointer-events:none;visibility:hidden;transition:transform var(--dropdown-open-dur) var(--dropdown-ease),opacity var(--dropdown-open-dur) var(--dropdown-ease),visibility 0s var(--dropdown-open-dur);will-change:transform,opacity}.t-dropdown[data-origin=top-left]{transform-origin:top left}.t-dropdown[data-origin=top-center]{transform-origin:top center}.t-dropdown[data-origin=top-right]{transform-origin:top right}.t-dropdown[data-origin=bottom-left]{transform-origin:bottom left}.t-dropdown[data-origin=bottom-center]{transform-origin:bottom center}.t-dropdown[data-origin=bottom-right]{transform-origin:bottom right}.t-dropdown.is-open{transform:scale(1) translateY(0);opacity:1;pointer-events:auto;visibility:visible;transition:transform var(--dropdown-open-dur) var(--dropdown-ease),opacity var(--dropdown-open-dur) var(--dropdown-ease)}.t-dropdown.is-closing{transform:scale(var(--dropdown-closing-scale)) translateY(-2px);opacity:0;pointer-events:none;visibility:visible;transition:transform var(--dropdown-close-dur) var(--dropdown-ease),opacity var(--dropdown-close-dur) var(--dropdown-ease)}.t-modal-backdrop{opacity:0;pointer-events:none;transition:opacity var(--modal-open-dur) var(--modal-ease);will-change:opacity}.t-modal-backdrop.is-open{opacity:1;pointer-events:auto}.t-modal-backdrop.is-closing{opacity:0;pointer-events:none;transition:opacity var(--modal-close-dur) var(--modal-ease)}.t-modal{transform-origin:center;transform:scale(var(--modal-scale)) translateY(var(--distance-base));opacity:0;pointer-events:none;transition:transform var(--modal-open-dur) var(--modal-ease),opacity var(--modal-open-dur) var(--modal-ease);will-change:transform,opacity}.t-modal.is-open{transform:scale(1) translateY(0);opacity:1;pointer-events:auto}.t-modal.is-closing{transform:scale(var(--modal-scale-close)) translateY(var(--distance-micro));opacity:0;pointer-events:none;transition:transform var(--modal-close-dur) var(--modal-ease),opacity var(--modal-close-dur) var(--modal-ease)}.t-icon-swap{position:relative;display:inline-grid;place-items:center}.t-icon-swap .t-icon{grid-area:1/1;display:inline-flex;align-items:center;justify-content:center;transition:opacity var(--icon-swap-dur) var(--icon-swap-ease),filter var(--icon-swap-dur) var(--icon-swap-ease),transform var(--icon-swap-dur) var(--icon-swap-ease);will-change:opacity,filter,transform}.t-icon-swap[data-state=a] .t-icon[data-icon=a],.t-icon-swap[data-state=b] .t-icon[data-icon=b]{opacity:1;filter:blur(0);transform:scale(1) rotate(0deg);pointer-events:auto}.t-icon-swap[data-state=a] .t-icon[data-icon=b],.t-icon-swap[data-state=b] .t-icon[data-icon=a]{opacity:0;filter:blur(var(--icon-swap-blur));transform:scale(var(--icon-swap-start-scale)) rotate(-45deg);pointer-events:none}.t-success-check{display:inline-flex;align-items:center;justify-content:center;transform-origin:center;opacity:0;will-change:transform,opacity,filter}.t-success-check svg{display:block;overflow:visible}.t-success-check svg path{stroke-dasharray:24;stroke-dashoffset:24}.t-success-check[data-state=in]{animation:t-check-fade var(--check-opacity-dur) var(--check-ease-opacity) forwards,t-check-rotate var(--check-rotate-dur) var(--check-ease-rotate) forwards,t-check-blur var(--check-blur-dur) var(--check-ease-out) forwards,t-check-bob var(--check-bob-dur) var(--check-ease-bob) forwards}.t-success-check[data-state=in] svg path{animation:t-check-draw var(--check-path-dur) var(--check-ease-path) var(--check-path-delay,80ms) forwards}@keyframes t-check-fade{0%{opacity:0}to{opacity:1}}@keyframes t-check-rotate{0%{transform:rotate(var(--check-rotate-from))}to{transform:rotate(0deg)}}@keyframes t-check-blur{0%{filter:blur(var(--check-blur-from))}to{filter:blur(0)}}@keyframes t-check-bob{0%{translate:0 var(--check-y-amount)}to{translate:0 0}}@keyframes t-check-draw{to{stroke-dashoffset:0}}.t-arrow-glide{display:inline-flex;align-items:center;gap:6px}.t-arrow-glide svg,.t-arrow-icon{transform:translate(0);transition:transform var(--learn-out) var(--learn-ease);will-change:transform}.group:hover .t-arrow-glide svg,.group:hover .t-arrow-icon,.portfolio-button:hover svg,.project-item:hover .hobby-project-heading>svg:last-child,.project-item:hover .project-arrow-button .t-arrow-icon,.text-link:hover svg{transform:translate(2px,-2px);transition:transform var(--learn-in) var(--learn-ease)}.portfolio-button:hover svg[data-dir=down],a[href="#experience"]:hover svg{transform:translate(2px,2px)}.t-tt-wrap{position:relative;display:inline-flex}.t-tt{position:absolute;bottom:calc(100% + 8px);right:0;transform:translateY(0) scale(var(--tt-scale));transform-origin:bottom right;padding:6px 11px;border-radius:8px;background:var(--tt-bg);color:var(--tt-fg);border:1px solid var(--border);font-size:12px;font-weight:500;line-height:1.4;white-space:nowrap;box-shadow:0 4px 18px rgba(0,0,0,.08);opacity:0;pointer-events:none;transition:opacity var(--tt-out-dur) var(--tt-out-ease),transform var(--tt-out-dur) var(--tt-out-ease);will-change:transform,opacity;z-index:50}.t-tt[data-align=center]{left:50%;right:auto;transform:translate(-50%) scale(var(--tt-scale));transform-origin:bottom center}.t-tt-trigger:focus-visible+.t-tt,.t-tt-wrap:hover .t-tt{opacity:1;transform:translateY(-2px) scale(1);transition-duration:var(--tt-in-dur);transition-timing-function:var(--tt-in-ease);transition-delay:var(--tt-delay)}.t-tt-trigger:focus-visible+.t-tt[data-align=center],.t-tt-wrap:hover .t-tt[data-align=center]{transform:translate(-50%,-2px) scale(1)}.t-stagger-line{opacity:0;transform:translateY(var(--stagger-distance));filter:blur(var(--stagger-blur));transition:opacity var(--stagger-dur) var(--stagger-ease),transform var(--stagger-dur) var(--stagger-ease),filter var(--stagger-dur) var(--stagger-ease);will-change:transform,opacity,filter}.t-stagger-line--1{transition-delay:0s}.t-stagger-line--2{transition-delay:calc(var(--stagger-stagger) * 1)}.t-stagger-line--3{transition-delay:calc(var(--stagger-stagger) * 2)}.t-stagger-line--4{transition-delay:calc(var(--stagger-stagger) * 3)}.t-stagger.is-shown .t-stagger-line{opacity:1;transform:translateY(0);filter:blur(0)}.t-stagger.is-hiding .t-stagger-line{opacity:0;transform:translateY(0);filter:blur(0);transition:opacity .2s ease;transition-delay:0s}.t-card-tilt{transition:transform var(--tilt-follow) var(--tilt-follow-ease),border-color var(--duration-fast) var(--ease-smooth-out),background-color var(--duration-fast) var(--ease-smooth-out),box-shadow var(--duration-fast) var(--ease-smooth-out);will-change:transform,box-shadow}.t-card-tilt:hover{transform:translateY(-3px);box-shadow:0 12px 30px -10px rgba(0,0,0,.08)}.dark .t-card-tilt:hover{box-shadow:0 12px 30px -10px rgba(0,0,0,.35)}.availability-beacon{position:relative;display:inline-flex;align-items:center;justify-content:center;width:9px;height:9px}.availability-beacon:before{content:"";position:absolute;inset:-3px;border-radius:50%;background:var(--accent);opacity:.35;animation:t-beacon-pulse 2.8s var(--ease-smooth-out) infinite}.availability-beacon-dot{width:7px;height:7px;border-radius:50%;background:var(--accent);position:relative;z-index:1}@keyframes t-beacon-pulse{0%{transform:scale(.85);opacity:.6}50%{transform:scale(1.65);opacity:0}to{transform:scale(.85);opacity:0}}.t-shimmer-text{background:linear-gradient(90deg,var(--muted-foreground) 0,var(--foreground) 50%,var(--muted-foreground) 100%);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation:t-shimmer 2.2s linear infinite}@keyframes t-shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}@media (prefers-reduced-motion:reduce){.project-arrow-button,.project-arrow-button .t-arrow-icon,.t-arrow-glide svg,.t-arrow-icon,.t-card-tilt,.t-dropdown,.t-icon-swap .t-icon,.t-modal,.t-modal-backdrop,.t-stagger-line,.t-tt{transition:none!important;animation:none!important;transform:none!important;filter:none!important}.t-dropdown.is-open,.t-modal-backdrop.is-open,.t-modal.is-open,.t-stagger.is-shown .t-stagger-line,.t-success-check{opacity:1!important}.t-success-check{animation:none!important}.t-success-check svg path{animation:none!important;stroke-dashoffset:0!important}.availability-beacon:before{animation:none!important;display:none!important}.t-shimmer-text{animation:none!important;-webkit-text-fill-color:currentColor!important}}.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))}}.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-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}.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-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}}