.preloader{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:26px;background:var(--bg);transition:opacity .5s ease,visibility .5s ease}.preloader.leaving{opacity:0;visibility:hidden}.preloader-logo{animation:pl-pop .5s ease both}.preloader-caption{font-family:var(--font-display);font-weight:600;color:var(--ink-soft);animation:pl-fade .8s ease both .3s}.preloader-bar{width:220px;height:4px;border-radius:99px;background:var(--line);overflow:hidden}.preloader-bar-fill{height:100%;border-radius:99px;background:var(--accent);animation:pl-bar 3.6s linear forwards}.scene{width:min(380px,86vw);height:auto}.scene-pipeline .pipe{stroke:var(--line);stroke-width:3}.scene-pipeline .pipe-fill{stroke:var(--accent);stroke-width:3;stroke-dasharray:60;stroke-dashoffset:60;animation:pl-draw .5s ease forwards;animation-delay:var(--d)}.scene-pipeline .node{opacity:0;animation:pl-fade .4s ease forwards;animation-delay:var(--d)}.scene-pipeline .node-dot{fill:var(--surface);stroke:var(--line);stroke-width:2.5;animation:pl-node-ok .35s ease forwards;animation-delay:calc(var(--d) + .4s)}.scene-pipeline .node-check{fill:none;stroke:#fff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:22;stroke-dashoffset:22;animation:pl-draw .3s ease forwards;animation-delay:calc(var(--d) + .5s)}.scene-pipeline .node-label{font-family:var(--font-body);font-size:13px;font-weight:600;fill:var(--ink-soft)}.scene-cloud .cloud-path{fill:none;stroke:var(--accent);stroke-width:3;stroke-linejoin:round;stroke-dasharray:400;stroke-dashoffset:400;animation:pl-draw 1.2s ease forwards .2s}.scene-cloud .cloud-link{stroke:var(--ink-soft);stroke-width:2;stroke-dasharray:80;stroke-dashoffset:80;animation:pl-draw .45s ease forwards;animation-delay:var(--d)}.scene-cloud .cloud-box{opacity:0;animation:pl-rise .45s ease forwards;animation-delay:var(--d)}.scene-cloud .cloud-box rect{fill:var(--surface);stroke:var(--ink);stroke-width:2}.scene-cloud .cloud-box text{font-family:var(--font-body);font-size:13px;font-weight:600;fill:var(--ink)}.scene-ai .ai-edge{stroke:var(--line);stroke-width:1.5}.scene-ai .ai-pulse{stroke:var(--accent);stroke-width:2;stroke-linecap:round;stroke-dasharray:10 110;stroke-dashoffset:120;animation:pl-pulse 1.4s linear infinite;animation-delay:var(--d)}.scene-ai .ai-node{fill:var(--surface);stroke:var(--ink);stroke-width:2;opacity:0;animation:pl-fade .35s ease forwards,pl-glow 1.6s ease-in-out infinite;animation-delay:var(--d),calc(var(--d) + .4s)}@keyframes pl-pop{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}@keyframes pl-fade{0%{opacity:0}to{opacity:1}}@keyframes pl-rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes pl-draw{to{stroke-dashoffset:0}}@keyframes pl-bar{0%{width:0}to{width:100%}}@keyframes pl-node-ok{to{fill:var(--ok);stroke:var(--ok)}}@keyframes pl-pulse{to{stroke-dashoffset:0}}@keyframes pl-glow{0%,to{stroke:var(--ink)}50%{stroke:var(--accent);fill:var(--accent-soft)}}.navbar{position:fixed;top:0;left:0;right:0;height:var(--nav-height);z-index:100;background:#faf3e9db;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);transition:box-shadow .3s ease}.navbar.scrolled{box-shadow:var(--shadow-sm)}.navbar-inner{display:flex;align-items:center;gap:20px;height:100%}.nav-logo{display:flex;transition:transform .25s ease}.nav-logo:hover{transform:rotate(-6deg) scale(1.05)}.nav-counter{display:inline-flex;align-items:center;gap:7px;padding:6px 14px;border:1px solid var(--line);border-radius:999px;background:var(--surface);font-size:.82rem;font-weight:500;color:var(--ink-soft);white-space:nowrap}.nav-menu{display:flex;align-items:center;gap:26px;margin-left:auto}.nav-link{position:relative;font-size:.95rem;font-weight:500;padding:4px 0}.nav-link:after{content:"";position:absolute;left:0;bottom:-2px;width:100%;height:2px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .3s ease}.nav-link:hover:after{transform:scaleX(1)}.nav-resume{padding:10px 22px;font-size:.9rem}.nav-toggle{display:none;flex-direction:column;gap:5px;margin-left:auto;padding:6px}.nav-toggle span{width:24px;height:2.5px;border-radius:2px;background:var(--ink);transition:transform .3s ease,opacity .3s ease}.nav-toggle.open span:nth-child(1){transform:translateY(7.5px) rotate(45deg)}.nav-toggle.open span:nth-child(2){opacity:0}.nav-toggle.open span:nth-child(3){transform:translateY(-7.5px) rotate(-45deg)}@media (max-width: 1024px){.nav-toggle{display:flex}.nav-counter{margin-left:auto}.nav-menu{position:fixed;top:var(--nav-height);left:0;right:0;flex-direction:column;align-items:stretch;gap:4px;margin:0;padding:18px 5% 28px;background:var(--bg);border-bottom:1px solid var(--line);box-shadow:var(--shadow-md);transform:translateY(-12px);opacity:0;visibility:hidden;transition:transform .3s ease,opacity .3s ease,visibility .3s ease}.nav-menu.open{transform:translateY(0);opacity:1;visibility:visible}.nav-link{padding:12px 4px;font-size:1.05rem;border-bottom:1px solid var(--line)}.nav-link:after{display:none}.nav-resume{margin-top:16px}}@media (max-width: 420px){.nav-counter{font-size:.75rem;padding:5px 10px}}.scroll-pipeline{position:fixed;left:26px;top:50%;transform:translateY(-50%);height:56vh;z-index:90;display:flex}.sp-track{position:relative;width:4px;border-radius:99px;background:var(--line)}.sp-fill{position:absolute;top:0;left:0;width:100%;border-radius:99px;background:linear-gradient(180deg,var(--accent),var(--accent-dark));transition:height .15s linear}.sp-packet{position:absolute;left:50%;width:12px;height:12px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 5px var(--accent-soft);transform:translate(-50%,-50%);transition:top .15s linear}.sp-stages{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;justify-content:space-between}.sp-stage{position:relative;display:flex;align-items:center;transform:translate(-4px)}.sp-dot{width:12px;height:12px;border-radius:50%;background:var(--bg);border:2.5px solid var(--line);transition:border-color .3s ease,background .3s ease,transform .3s ease}.sp-stage.done .sp-dot{border-color:var(--accent);background:var(--accent)}.sp-stage.current .sp-dot{transform:scale(1.35);box-shadow:0 0 0 5px var(--accent-soft)}.sp-label{margin-left:12px;padding:3px 10px;border-radius:8px;background:var(--ink);color:var(--bg);font-size:.72rem;font-weight:600;letter-spacing:.04em;white-space:nowrap;opacity:0;transform:translate(-6px);transition:opacity .25s ease,transform .25s ease;pointer-events:none}.sp-stage:hover .sp-label,.sp-stage.current .sp-label{opacity:1;transform:translate(0)}@media (max-width: 1280px){.scroll-pipeline{display:none}}.hero{position:relative;min-height:100vh;display:flex;align-items:center;padding-top:var(--nav-height);overflow:hidden}.hero-grid{position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);background-size:54px 54px;opacity:.4;mask-image:radial-gradient(ellipse at 50% 40%,black 25%,transparent 75%);-webkit-mask-image:radial-gradient(ellipse at 50% 40%,black 25%,transparent 75%)}.hero-blob{position:absolute;border-radius:50%;filter:blur(75px);animation:hero-float 13s ease-in-out infinite}.hero-blob-one{width:420px;height:420px;background:#e4003824;top:8%;right:-6%}.hero-blob-two{width:360px;height:360px;background:#f0b45a47;bottom:-4%;left:-8%;animation-delay:4s}.hero-inner{position:relative;display:flex;flex-direction:column;align-items:flex-start}.hero-kicker{font-size:.85rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:18px}.hero-title{font-size:clamp(2.4rem,6.5vw,4.3rem);font-weight:800}.hero-subtitle{display:block;margin-top:6px}.hero-role{display:inline-block;color:var(--accent);white-space:nowrap;animation:role-in .55s cubic-bezier(.2,.7,.3,1.1) both}.hero-pipeline{position:relative;display:flex;justify-content:space-between;width:200px;margin:26px 0 6px}.hero-pipe{position:absolute;top:4px;right:0;bottom:4px;left:0;height:4px;margin:auto 0;border-radius:99px;background:var(--line);overflow:hidden}.hero-pipe-fill{height:100%;background:var(--accent);animation:pipe-fill 3.2s linear forwards}.hero-stage{position:relative;width:12px;height:12px;border-radius:50%;background:var(--bg);border:2.5px solid var(--line);transition:border-color .3s ease,background .3s ease}.hero-stage.active{border-color:var(--accent);background:var(--accent);box-shadow:0 0 0 5px var(--accent-soft)}.hero-text{max-width:520px;color:var(--ink-soft);margin:18px 0 32px}.hero-actions{display:flex;flex-wrap:wrap;gap:16px}.hero-scroll{position:absolute;bottom:26px;left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:6px;font-size:.75rem;letter-spacing:.15em;text-transform:uppercase;color:var(--ink-soft)}.hero-mouse{width:24px;height:38px;border:2px solid var(--ink-soft);border-radius:14px;display:flex;justify-content:center;padding-top:7px}.hero-wheel{width:4px;height:8px;border-radius:4px;background:var(--accent);animation:wheel 1.6s ease-in-out infinite}@keyframes role-in{0%{opacity:0;transform:translateY(55%)}to{opacity:1;transform:translateY(0)}}@keyframes pipe-fill{0%{width:0}to{width:100%}}@keyframes hero-float{0%,to{transform:translate(0) scale(1)}50%{transform:translate(-24px,24px) scale(1.06)}}@keyframes wheel{0%{opacity:1;transform:translateY(0)}70%{opacity:0;transform:translateY(10px)}to{opacity:0;transform:translateY(0)}}@media (max-width: 640px){.hero-scroll{display:none}}.about{position:relative;padding-bottom:220px;overflow:hidden}.about-accent{color:var(--accent)}.about-text{max-width:640px;color:var(--ink-soft);font-size:1.05rem}.about-hobbies{display:flex;flex-wrap:wrap;gap:12px;margin-top:28px}.about-chip{display:inline-flex;align-items:center;gap:8px;padding:9px 18px;border-radius:999px;background:var(--surface);border:1px solid var(--line);font-weight:500;font-size:.92rem;transition:transform .25s ease,box-shadow .25s ease}.about-chip:hover{transform:translateY(-3px);box-shadow:var(--shadow-sm)}.about-waves{position:absolute;bottom:-1px;left:0;right:0;height:110px}.wave{position:absolute;bottom:0;left:0;width:200%;height:100%;animation:wave-move 16s linear infinite}.wave-back path{fill:#e4003812}.wave-front{animation-duration:10s;height:86%}.wave-front path{fill:var(--bg-soft)}@keyframes wave-move{to{transform:translate(-50%)}}.projects{background:var(--bg-soft)}.project{display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:center;margin-top:70px}.project.reverse .project-text{order:2}.project.reverse .project-visual{order:1}.project-kicker{font-size:.78rem;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-soft)}.project-title{font-size:clamp(1.4rem,2.6vw,1.85rem);margin:10px 0 14px}.project-badge{display:inline-block;padding:8px 16px;border-radius:999px;background:var(--accent);color:#fff;font-weight:600;font-size:.88rem;box-shadow:0 6px 18px #e400384d;margin-bottom:18px}.project-paragraph{color:var(--ink-soft);margin-bottom:14px}.project-stack{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.project-chip{padding:6px 13px;border-radius:999px;border:1px solid var(--line);background:var(--surface);font-size:.8rem;font-weight:500;transition:border-color .25s ease,transform .25s ease}.project-chip:hover{border-color:var(--accent);transform:translateY(-2px)}.project-frame{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-md);padding:18px;transition:transform .35s ease,box-shadow .35s ease}.project-frame:hover{transform:translateY(-6px) rotate(-.5deg);box-shadow:var(--shadow-lg)}.project-frame img{border-radius:10px}.project-frame figcaption{margin-top:12px;text-align:center;font-size:.82rem;color:var(--ink-soft)}.serverless-diagram{width:100%;height:auto}.serverless-diagram .sd-box rect{fill:var(--bg);stroke:var(--ink);stroke-width:1.6}.serverless-diagram .sd-label{font-family:var(--font-body);font-size:13px;font-weight:600;fill:var(--ink)}.serverless-diagram .sd-sub{font-family:var(--font-body);font-size:9.5px;fill:var(--ink-soft)}.serverless-diagram .sd-aws{fill:var(--accent-soft);stroke:var(--accent);stroke-width:1.6;stroke-dasharray:7 6}.serverless-diagram .sd-aws-label{font-family:var(--font-body);font-size:11px;font-weight:600;letter-spacing:.06em;fill:var(--accent)}.serverless-diagram .sd-flow{fill:none;stroke:var(--ink-soft);stroke-width:1.8;stroke-dasharray:5 5;animation:sd-march 1.2s linear infinite}.serverless-diagram .sd-dashed{stroke:var(--accent)}.serverless-diagram .sd-link{stroke:var(--ink-soft);stroke-width:1.5}.serverless-diagram .sd-note{font-family:var(--font-body);font-size:9.5px;fill:var(--ink-soft)}.serverless-diagram .sd-visitor{font-family:var(--font-body);font-size:13px;font-weight:600;fill:var(--ink)}@keyframes sd-march{to{stroke-dashoffset:-20}}@media (max-width: 920px){.project{grid-template-columns:1fr;gap:30px;margin-top:56px}.project.reverse .project-text{order:1}.project.reverse .project-visual{order:2}}.timeline{position:relative;margin-top:70px}.timeline-rail{position:absolute;left:50%;top:0;bottom:0;width:4px;transform:translate(-50%);border-radius:99px;background:var(--line)}.timeline-fill{position:relative;width:100%;border-radius:99px;background:linear-gradient(180deg,var(--accent),var(--accent-dark));transition:height .15s linear}.timeline-runner{position:absolute;bottom:-6px;left:50%;width:14px;height:14px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 6px var(--accent-soft);transform:translate(-50%)}.timeline-item{position:relative;width:50%;padding:0 50px 56px}.timeline-item.left{left:0}.timeline-item.right{left:50%}.timeline-node{position:absolute;top:4px;width:46px;height:46px;border-radius:50%;background:var(--surface);border:3px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:19px;z-index:1;transition:border-color .4s ease,transform .4s ease,box-shadow .4s ease}.timeline-item.left .timeline-node{right:-23px}.timeline-item.right .timeline-node{left:-23px}.timeline-item.in-view .timeline-node{border-color:var(--accent);transform:scale(1.08);box-shadow:0 0 0 6px var(--accent-soft)}.timeline-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:24px 26px;transition:transform .3s ease,box-shadow .3s ease}.timeline-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-md)}.timeline-meta{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:10px}.timeline-type{padding:3px 11px;border-radius:999px;font-size:.72rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:#fff}.timeline-type.work{background:var(--accent)}.timeline-type.education{background:var(--ink)}.timeline-type.certification{background:var(--gold)}.timeline-period{font-size:.82rem;font-weight:600;color:var(--ink-soft)}.timeline-now{color:var(--ok);font-style:normal}.timeline-title{font-size:1.15rem;margin-bottom:2px}.timeline-org{font-size:.9rem;font-weight:500;color:var(--ink-soft);margin-bottom:10px}.timeline-summary{font-size:.92rem;color:var(--ink-soft);margin-bottom:10px}.timeline-highlights li{position:relative;padding-left:18px;font-size:.88rem;color:var(--ink-soft);margin-bottom:8px}.timeline-highlights li:before{content:"▸";position:absolute;left:0;color:var(--accent);font-weight:700}.timeline-item.certification .timeline-card{padding:18px 22px}@media (max-width: 860px){.timeline-rail{left:22px;transform:none}.timeline-item,.timeline-item.right{width:100%;left:0;padding:0 0 44px 64px}.timeline-item.left .timeline-node,.timeline-item.right .timeline-node{left:0;right:auto}.timeline-runner{left:50%}}.skills-featured{display:grid;grid-template-columns:repeat(2,1fr);gap:26px;margin-top:50px}.skill-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:30px;transition:transform .3s ease,box-shadow .3s ease,border-color .3s ease}.skill-card:hover{transform:translateY(-5px);border-color:var(--accent);box-shadow:var(--shadow-md)}.skill-icon{width:52px;height:52px;border-radius:14px;background:var(--accent-soft);color:var(--accent);display:flex;align-items:center;justify-content:center;margin-bottom:18px}.skill-icon svg{width:28px;height:28px}.skill-title{font-size:1.15rem;margin-bottom:8px}.skill-text{font-size:.92rem;color:var(--ink-soft);margin-bottom:20px}.skill-meter{height:6px;border-radius:99px;background:var(--line);overflow:hidden}.skill-meter-fill{height:100%;width:0;border-radius:99px;background:linear-gradient(90deg,var(--accent),var(--accent-dark));transition:width 1.2s ease .4s}.skill-card.in-view .skill-meter-fill{width:var(--level)}.skills-toolbox{margin-top:60px;display:grid;gap:28px}.toolbox-title{font-family:var(--font-body);font-size:.78rem;font-weight:600;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:12px}.toolbox-chips{display:flex;flex-wrap:wrap;gap:10px}.toolbox-chip{padding:8px 16px;border-radius:999px;border:1px solid var(--line);background:var(--surface);font-size:.88rem;font-weight:500;transition:transform .2s ease,border-color .2s ease,background .2s ease}.toolbox-chip:hover{transform:translateY(-3px);border-color:var(--accent);background:var(--accent-soft)}@media (max-width: 760px){.skills-featured{grid-template-columns:1fr}}.contact{position:relative;background:var(--ink);color:#f5ece0;padding-bottom:0;overflow:hidden}.contact-glow{position:absolute;top:-120px;right:-100px;width:480px;height:480px;border-radius:50%;background:#e400382e;filter:blur(110px)}.contact .container{position:relative}.contact-title{color:#fff}.contact-intro{color:#f5ece0b3;margin-bottom:40px}.contact-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-bottom:44px}.contact-card{display:flex;flex-direction:column;gap:4px;padding:26px;border-radius:var(--radius);background:#ffffff0d;border:1px solid rgba(255,255,255,.12);transition:transform .3s ease,border-color .3s ease,background .3s ease}.contact-card:hover{transform:translateY(-5px);border-color:var(--accent);background:#ffffff14}.contact-icon{width:44px;height:44px;border-radius:12px;background:#e400382e;color:#ff5c7e;display:flex;align-items:center;justify-content:center;margin-bottom:12px}.contact-icon svg{width:22px;height:22px}.contact-label{font-weight:600;font-size:.95rem}.contact-value{font-size:.85rem;color:#f5ece0a6;word-break:break-all}.footer{border-top:1px solid rgba(255,255,255,.1);padding:26px 0}.footer-inner{display:flex;align-items:center;gap:16px;font-size:.82rem;color:#f5ece08c}@media (max-width: 760px){.contact-cards{grid-template-columns:1fr}.footer-inner{flex-direction:column;text-align:center}}:root{--bg: #faf3e9;--bg-soft: #fff9f1;--surface: #ffffff;--ink: #26201a;--ink-soft: #6b6157;--accent: #e40038;--accent-dark: #b4002d;--accent-soft: rgba(228, 0, 56, .08);--ok: #1d9e63;--gold: #c8861b;--line: #eadfce;--shadow-sm: 0 2px 10px rgba(38, 32, 26, .06);--shadow-md: 0 10px 30px rgba(38, 32, 26, .1);--shadow-lg: 0 24px 60px rgba(38, 32, 26, .14);--radius: 18px;--font-display: "Sora", sans-serif;--font-body: "Inter", sans-serif;--nav-height: 74px}*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:var(--font-body);background:var(--bg);color:var(--ink);line-height:1.6;overflow-x:hidden}body.no-scroll{overflow:hidden}img{max-width:100%;display:block}a{color:inherit;text-decoration:none}button{font:inherit;cursor:pointer;border:none;background:none}ul{list-style:none}h1,h2,h3{font-family:var(--font-display);line-height:1.15}section[id]{scroll-margin-top:calc(var(--nav-height) + 8px)}.container{width:min(1120px,92%);margin:0 auto}.section{padding:110px 0}.section-tag{display:inline-flex;align-items:center;gap:10px;font-size:.8rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}.section-tag:before{content:"";width:26px;height:2px;background:var(--accent)}.section-title{font-size:clamp(1.9rem,4vw,2.6rem);margin:14px 0 18px}.section-intro{color:var(--ink-soft);max-width:660px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:13px 26px;border-radius:999px;font-weight:600;font-size:.95rem;transition:transform .25s ease,box-shadow .25s ease,background .25s ease,color .25s ease}.btn-primary{background:var(--accent);color:#fff;box-shadow:0 8px 22px #e4003847}.btn-primary:hover{background:var(--accent-dark);transform:translateY(-2px)}.btn-ghost{border:2px solid var(--ink);color:var(--ink)}.btn-ghost:hover{background:var(--ink);color:var(--bg);transform:translateY(-2px)}.reveal{opacity:0;transform:translateY(30px);transition:opacity .7s ease,transform .7s ease}.reveal.in-view{opacity:1;transform:translateY(0)}.reveal-delay-1{transition-delay:.12s}.reveal-delay-2{transition-delay:.24s}.reveal-delay-3{transition-delay:.36s}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@media (max-width: 640px){.section{padding:80px 0}}
