:root{--reveal-duration: .6s;--reveal-easing: cubic-bezier(.2, .9, .2, 1);--reveal-easing-bounce: cubic-bezier(.34, .1, .68, .55);--reveal-easing-smooth: cubic-bezier(.25, .46, .45, .94)}.reveal{transition:transform var(--reveal-duration) var(--reveal-easing),opacity var(--reveal-duration) var(--reveal-easing);transform:translateY(8px);opacity:.95;will-change:transform,opacity}.reveal.in-view{transform:translateY(0);opacity:1}.reveal .reveal-item{opacity:0;transform:translateY(16px);transition:opacity var(--reveal-duration) var(--reveal-easing),transform var(--reveal-duration) var(--reveal-easing),color .3s ease;transition-delay:var(--delay, 0ms);will-change:opacity,transform}.reveal.in-view .reveal-item{opacity:1;transform:translateY(0)}.reveal .reveal-scale{opacity:0;transform:scale(.94) translateY(12px);transition:opacity var(--reveal-duration) var(--reveal-easing),transform var(--reveal-duration) var(--reveal-easing);transition-delay:var(--delay, 0ms);will-change:opacity,transform}.reveal.in-view .reveal-scale{opacity:1;transform:scale(1) translateY(0)}.reveal .reveal-rotate{opacity:0;transform:rotate(-3deg) translateY(14px);transition:opacity var(--reveal-duration) var(--reveal-easing),transform var(--reveal-duration) var(--reveal-easing);transition-delay:var(--delay, 0ms);will-change:opacity,transform}.reveal.in-view .reveal-rotate{opacity:1;transform:rotate(0) translateY(0)}.reveal .reveal-slide-left{opacity:0;transform:translate(-20px) translateY(8px);transition:opacity var(--reveal-duration) var(--reveal-easing),transform var(--reveal-duration) var(--reveal-easing);transition-delay:var(--delay, 0ms);will-change:opacity,transform}.reveal.in-view .reveal-slide-left{opacity:1;transform:translate(0) translateY(0)}.reveal .reveal-slide-right{opacity:0;transform:translate(20px) translateY(8px);transition:opacity var(--reveal-duration) var(--reveal-easing),transform var(--reveal-duration) var(--reveal-easing);transition-delay:var(--delay, 0ms);will-change:opacity,transform}.reveal.in-view .reveal-slide-right{opacity:1;transform:translate(0) translateY(0)}.reveal.hero .reveal-item{transition-duration:.7s}.reveal-cascade{opacity:0;transform:translateY(20px);transition:opacity var(--reveal-duration) var(--reveal-easing),transform var(--reveal-duration) var(--reveal-easing);will-change:opacity,transform}.reveal.in-view .reveal-cascade{opacity:1;transform:translateY(0)}.reveal-cascade:nth-child(1){transition-delay:0ms}.reveal-cascade:nth-child(2){transition-delay:60ms}.reveal-cascade:nth-child(3){transition-delay:.12s}.reveal-cascade:nth-child(4){transition-delay:.18s}.reveal-cascade:nth-child(5){transition-delay:.24s}.reveal-cascade:nth-child(6){transition-delay:.3s}.reveal-cascade:nth-child(n+7){transition-delay:.36s}#home{scroll-margin-top:0}#about,#skills,#experience,#projects{scroll-margin-top:56px}.fade-in{opacity:0;transition:opacity .42s var(--reveal-easing) var(--delay, 0ms)}.reveal.in-view .fade-in{opacity:1}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}.float-on-scroll{animation:float 3s ease-in-out infinite;animation-play-state:paused}.reveal.in-view .float-on-scroll{animation-play-state:running}@keyframes pulse{0%,to{opacity:1}50%{opacity:.7}}.pulse{animation:pulse 2s ease-in-out infinite}@keyframes glow{0%,to{box-shadow:0 0 #fff0;border-color:#ffffff1a}50%{box-shadow:0 0 12px #ffffff14;border-color:#fff3}}.glow-on-hover{transition:all .3s ease}.glow-on-hover:hover{animation:glow 2s ease-in-out infinite}.typing-caret{display:inline-block;width:1px;height:1em;background:currentColor;margin-left:3px;vertical-align:text-bottom;animation:typing-blink 1s steps(1,start) infinite}@keyframes typing-blink{50%{opacity:0}}@keyframes shine{0%{background-position:-1000px 0}to{background-position:1000px 0}}.shine-effect{background-image:linear-gradient(90deg,transparent,rgba(255,255,255,.15),transparent);background-position:-1000px 0;background-size:1000px 100%;background-repeat:no-repeat}@keyframes slideInUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@keyframes slideInDown{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}@keyframes slideInLeft{0%{opacity:0;transform:translate(-30px)}to{opacity:1;transform:translate(0)}}@keyframes slideInRight{0%{opacity:0;transform:translate(30px)}to{opacity:1;transform:translate(0)}}@keyframes bounce-in{0%{opacity:0;transform:scale(.8) translateY(20px)}50%{opacity:1}to{transform:scale(1) translateY(0)}}@keyframes blurFade{0%{opacity:0;filter:blur(8px)}to{opacity:1;filter:blur(0)}}.blur-fade-in{animation:blurFade .8s cubic-bezier(.2,.9,.2,1) forwards}@keyframes skillFade{0%{color:#ffffffe6;background-color:transparent;border-color:transparent}20%{color:#61dafb;background-color:#61dafb0f;border-color:#61dafb47}45%{color:#f90;background-color:#ff99000f;border-color:#ff990047}70%{color:#47a248;background-color:#47a2480f;border-color:#47a24847}to{color:#ffffffe6;background-color:transparent;border-color:transparent}}.skill-fade{border:1px solid transparent;border-radius:2px;padding:2px 6px;font-family:DM Mono,monospace;font-size:11.5px;cursor:default;will-change:color,background-color,border-color;transition:all .18s}.skill-fade:hover{animation:skillFade 6s ease-in-out infinite}.experience-item,.project-item{transition:all .3s cubic-bezier(.2,.9,.2,1)}.experience-item:hover,.project-item:hover{border-color:#ffffff40;background:#ffffff1f;box-shadow:0 4px 12px #0000004d}button,[role=button]{transition:all .25s ease}html,body{overflow-x:hidden}.section-wrap{padding:40px 24px 60px;max-width:760px;margin:0 auto 80px;scroll-behavior:smooth;scroll-margin-top:56px;background:#0a0a0c66;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);border-radius:12px}@media(max-width:600px){.section-wrap{padding:32px 16px 40px;margin:0 auto 60px;scroll-margin-top:56px}}@media(max-width:520px){.nav-link{padding:0 8px!important}.nav-link-label{display:none}}@media(max-width:480px){.hero-role{font-size:14px!important}}@media(max-width:480px){.theme-switcher-container{top:auto!important;bottom:20px!important;left:14px!important}}.app-footer{position:relative;z-index:1;border-top:1px solid rgba(255,255,255,.06);padding:24px;text-align:center;font-family:DM Mono,monospace;font-size:11px;color:#ffffff2e;letter-spacing:.06em}@media(max-width:600px){.app-footer{padding:16px;font-size:10px}}
