:root{--text:#4a454e;--text-h:#111;--bg:#fbfaf7;--border:#dcdcdc;--code-bg:#f4f3ec;--accent:#111;--accent-bg:#0000000d;--accent-border:#00000026;--social-bg:#f4f3ec80;--shadow:#0000000a 0 8px 24px -4px, #00000005 0 2px 8px -2px;--sans:"Josefin Slab", serif;--heading:"Josefin Slab", serif;--mono:ui-monospace, Consolas, monospace;font:18px/180% var(--sans);letter-spacing:.2px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (width<=1024px){:root{font-size:16px}}#root{box-sizing:border-box;flex-direction:column;width:1100px;max-width:100%;min-height:100svh;margin:0 auto;padding:40px 24px 0;display:flex}html{scroll-behavior:smooth}html,body{margin:0;overflow-x:hidden}h1,h2{font-family:var(--heading);color:var(--text-h);font-weight:500}h1{letter-spacing:-1.68px;margin:32px 0;font-size:56px}@media (width<=1024px){h1{margin:20px 0;font-size:36px}}h2{letter-spacing:-.24px;margin:0 0 8px;font-size:24px;line-height:118%}@media (width<=1024px){h2{font-size:20px}}p{margin:0}code,.counter{font-family:var(--mono);color:var(--text-h);border-radius:4px;display:inline-flex}code{background:var(--code-bg);padding:4px 8px;font-size:15px;line-height:135%}.portfolio-banner{opacity:0;animation:1.2s cubic-bezier(.16,1,.3,1) forwards bannerFadeIn}.avatar-container{opacity:0;animation:1s cubic-bezier(.16,1,.3,1) .2s forwards heroReveal}.profile-details{opacity:0;animation:1s cubic-bezier(.16,1,.3,1) .3s forwards heroReveal}.status-pills{opacity:0;animation:1s cubic-bezier(.16,1,.3,1) .4s forwards heroReveal}.profile-bio{opacity:0;animation:1s cubic-bezier(.16,1,.3,1) .5s forwards heroReveal}@keyframes bannerFadeIn{0%{opacity:0;transform:scale(.98)translateY(10px)}to{opacity:1;transform:scale(1)translateY(0)}}@keyframes heroReveal{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}.scroll-reveal{opacity:0;transition:opacity 1.2s cubic-bezier(.16,1,.3,1),transform 1.2s cubic-bezier(.16,1,.3,1);transform:translateY(32px)}.scroll-reveal.revealed{opacity:1;transform:translateY(0)}.portfolio-container{box-sizing:border-box;flex-direction:column;width:100%;display:flex}.portfolio-banner{background:url(/assets/banner-B92uLFtx.png) 50%/cover no-repeat;border-radius:28px;width:110%;height:360px;margin-left:-5%;position:relative;overflow:hidden;box-shadow:0 10px 30px -10px #0000001a}.nav-capsule{-webkit-backdrop-filter:blur(12px);z-index:10;background:#2b3e3973;border:1px solid #ffffff14;border-radius:50px;gap:28px;padding:8px 32px;display:flex;position:absolute;top:24px;left:50%;transform:translate(-50%);box-shadow:0 4px 20px #00000026}.nav-item{color:#fffc;font-family:Josefin Slab,serif;font-size:16px;font-weight:500;text-decoration:none}.nav-item.active{color:#fff;font-weight:600}.profile-header{z-index:5;align-items:flex-end;gap:28px;margin-top:-60px;padding:0 16px;display:flex;position:relative}.avatar-container{perspective:1000px;box-sizing:border-box;flex-shrink:0;width:172px;height:172px}.avatar-card{width:100%;height:100%;transform-style:preserve-3d;border-radius:28px;transition:transform 1.2s cubic-bezier(.2,.8,.2,1);position:relative;box-shadow:0 8px 24px #00000014}.avatar-container:hover .avatar-card{transform:rotateY(180deg)}.avatar-face{backface-visibility:hidden;border-radius:28px;width:100%;height:100%;position:absolute;overflow:hidden}.avatar-face.front{transform:rotateY(0)}.avatar-face.back{transform:rotateY(180deg)}.avatar-image{object-fit:cover;width:100%;height:100%;display:block}.avatar-placeholder{box-sizing:border-box;background:linear-gradient(135deg,#eceff1 0%,#cfd8dc 100%);border-radius:28px;justify-content:center;align-items:center;width:100%;height:100%;display:flex}.avatar-placeholder-text{color:#78909c;text-transform:uppercase;letter-spacing:1px;font-family:Josefin Slab,serif;font-size:15px;font-weight:600}.profile-details{flex-grow:1;grid-template-rows:auto auto;grid-template-columns:1fr auto;align-items:center;column-gap:24px;padding-bottom:8px;display:grid}.profile-name{color:var(--text-h);letter-spacing:-.5px;grid-area:1/1/2/2;margin:0;font-family:Josefin Slab,serif;font-size:42px;font-weight:700;line-height:1.1}.profile-role{color:#616161;grid-area:2/1/3/2;margin:4px 0 0;font-family:Josefin Slab,serif;font-size:20px;font-weight:400}.social-links{grid-area:1/2/2/3;align-items:center;gap:24px;display:flex}.social-icon-link{justify-content:center;align-items:center;text-decoration:none;transition:transform .3s cubic-bezier(.2,.8,.2,1),filter .3s;display:flex}.social-icon-link:hover{filter:drop-shadow(0 4px 8px #c49b6340);transform:scale(1.22)translateY(-2px)}.social-icon-link:first-child:hover{transform:scale(1.22)translateY(-2px)rotate(-6deg)}.social-icon-link:nth-child(2):hover{transform:scale(1.22)translateY(-2px)rotate(6deg)}.social-icon-link:nth-child(3):hover{transform:scale(1.22)translateY(-2px)rotate(-6deg)}.social-icon{width:20px;height:20px;transition:opacity .3s;display:block}.social-icon-link:hover .social-icon{opacity:.85}.status-pills{flex-wrap:wrap;gap:32px;margin:32px 0 36px 16px;display:flex}.status-pill{color:#424242;box-sizing:border-box;background:#00000003;border:1px solid #d0d0d0;border-radius:50px;align-items:center;gap:6px;padding:0 24px;font-family:Josefin Slab,serif;font-size:13px;font-weight:500;display:inline-flex;box-shadow:0 1px 2px #00000005}.status-pill.status-pill-teal{color:#336e65;background-color:#f2f7f6;border-color:#c2d9d6}.status-pill.status-pill-rose{color:#8c4b3e;background-color:#fff5f3;border-color:#ffd1c8}.status-pill.status-pill-amber{color:#7c622d;background-color:#fff9e6;border-color:#ffeab3}.pill-icon{width:14px;height:14px;display:block}.profile-bio{color:#333;text-align:left;border-left:2px solid #555;margin:28px 0 28px 16px;padding:2px 0 2px 24px;font-family:Josefin Slab,serif;font-size:20px;font-weight:400;line-height:2}.profile-bio em{color:#111;font-style:italic;font-weight:600}.portfolio-divider{border:none;border-top:1px solid #e0e0e0;margin:64px 0 64px 16px}.experience-section,.projects-section{text-align:left;flex-direction:column;margin-left:16px;display:flex}.section-title{color:var(--text-h);align-items:center;gap:12px;margin:0 0 20px;font-family:Josefin Slab,serif;font-size:28px;font-weight:700;display:flex}.section-title-icon{width:24px;height:24px;display:block}.experience-card{background:#fff;border:1px solid #eaeaea;border-radius:18px;margin-top:32px;padding:24px;box-shadow:0 8px 30px #00000005}.experience-card.experience-card-teal .quote-icon,.experience-card.experience-card-teal .card-tag,.experience-card.experience-card-teal .card-description em strong,.experience-card.experience-card-teal .card-description strong em{color:#336e65}.experience-card.experience-card-rose .quote-icon,.experience-card.experience-card-rose .card-tag,.experience-card.experience-card-rose .card-description em strong,.experience-card.experience-card-rose .card-description strong em{color:#8c4b3e}.card-header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.card-header-left{align-items:center;gap:12px;display:flex}.card-company{color:#757575;font-family:Josefin Slab,serif;font-size:18px;font-weight:500}.card-date{color:#8c8c8c;font-family:Josefin Slab,serif;font-size:15px;font-weight:500}.quote-icon{color:#111;width:22px;height:22px;display:block}.card-tag{color:#424242;font-family:Josefin Slab,serif;font-size:22px;font-weight:700}.card-content{flex-direction:column;display:flex}.card-description{color:#424242;text-align:left;margin:0;font-family:Josefin Slab,serif;font-size:17px;line-height:2}strong{font-style:italic;font-weight:500}.card-description em strong,.card-description strong em{color:#111;font-style:italic;font-weight:500}.projects-grid{grid-template-columns:repeat(3,1fr);gap:24px;margin-top:16px;display:grid}.project-card{box-sizing:border-box;background:#fff;border:1px solid #eaeaea;border-radius:18px;flex-direction:column;padding:24px;display:flex;box-shadow:0 8px 30px #00000005}.project-card-image{object-fit:cover;box-sizing:border-box;border:1px solid #eaeaea;border-radius:12px;width:100%;height:140px;margin-bottom:16px;display:block}.project-card-title{color:var(--text-h);margin:0 0 12px;font-family:Josefin Slab,serif;font-size:22px;font-weight:700}.project-card-description{color:#555;flex-grow:1;margin:0 0 16px;font-family:Josefin Slab,serif;font-size:17px;line-height:2}.project-link{color:#424242;align-items:center;gap:5px;margin-top:auto;font-family:Josefin Slab,serif;font-size:14px;font-weight:600;text-decoration:none;display:inline-flex}.link-arrow-icon{display:block}.tech-marquee-section{box-sizing:border-box;flex-direction:column;gap:36px;width:110%;margin-left:-5%;padding:24px 0;display:flex;position:relative;overflow:hidden}.marquee-container{width:100%;display:flex;position:relative;overflow:hidden}.marquee-container:before,.marquee-container:after{content:"";z-index:2;pointer-events:none;width:120px;height:100%;position:absolute;top:0}.marquee-container:before{background:linear-gradient(to right, var(--bg) 0%, #fafafa00 100%);left:0}.marquee-container:after{background:linear-gradient(to left, var(--bg) 0%, #fafafa00 100%);right:0}.marquee-track{align-items:center;gap:60px;width:max-content;display:flex}.marquee-row-1{animation:25s linear infinite marquee-left}.marquee-row-2{animation:25s linear infinite marquee-right}.marquee-item{flex-shrink:0;align-items:center;gap:12px;display:flex}.tech-name{-webkit-user-select:none;user-select:none;font-family:Josefin Slab,serif}.fastapi-text{color:#009485;font-size:32px;font-weight:700}.express-text{color:#111;letter-spacing:-.5px;font-size:36px;font-weight:300}.git-text{color:#3f2c22;font-size:32px;font-weight:700}@keyframes marquee-left{0%{transform:translate(0)}to{transform:translate(-33.333%)}}@keyframes marquee-right{0%{transform:translate(-33.333%)}to{transform:translate(0)}}.contact-section{text-align:left;flex-direction:column;margin-left:16px;display:flex}.contact-form{flex-direction:column;gap:24px;width:100%;max-width:100%;margin-top:16px;display:flex}.form-group{flex-direction:column;gap:10px;display:flex}.form-label{color:#424242;text-align:left;margin:0;font-family:Josefin Slab,serif;font-size:19px;font-weight:700}.form-input{height:52px;color:var(--text-h);box-sizing:border-box;background:#fff;border:1px solid #eaeaea;border-radius:14px;width:100%;padding:0 20px;font-family:Josefin Slab,serif;font-size:17px}.form-textarea{height:180px;color:var(--text-h);box-sizing:border-box;resize:vertical;background:#fff;border:1px solid #eaeaea;border-radius:14px;width:100%;padding:16px 20px;font-family:Josefin Slab,serif;font-size:17px}.form-input:focus,.form-textarea:focus{border-color:#9e9e9e;outline:none}.form-submit-btn{color:#fff;cursor:pointer;box-sizing:border-box;background:#111;border:1px solid #0000;border-radius:50px;width:100%;padding:12px 32px;font-family:Josefin Slab,serif;font-size:16px;font-weight:600;transition:background-color .25s,color .25s,border-color .25s,box-shadow .25s;box-shadow:0 4px 12px #0000000d}.form-submit-btn:hover{background:var(--bg);color:#000;border-color:#111}.btn-content-wrapper{justify-content:center;align-items:center;gap:10px;width:100%;display:inline-flex}.submit-spinner{box-sizing:border-box;border:2.5px solid #ffffff4d;border-top-color:#fff;border-radius:50%;width:16px;height:16px;animation:.75s linear infinite submitSpin;display:inline-block}@keyframes submitSpin{to{transform:rotate(360deg)}}.success-checkmark{animation:.4s cubic-bezier(.175,.885,.32,1.275) both checkPop;display:inline-block}@keyframes checkPop{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}.form-submit-btn.loading{color:#fff;cursor:not-allowed;pointer-events:none;background:#555}.form-submit-btn.success{cursor:default;pointer-events:none;box-shadow:0 4px 15px #336e654d;color:#fff!important;background:#336e65!important;border-color:#0000!important}.form-submit-btn.error{cursor:default;pointer-events:none;color:#fff!important;background:#8c4b3e!important;border-color:#0000!important}.portfolio-footer{box-sizing:border-box;background:#0e1b21;border:none;border-radius:0;width:100vw;margin-top:80px;margin-left:-50vw;margin-right:-50vw;padding:96px 0;position:relative;left:50%;right:50%}.footer-content{box-sizing:border-box;justify-content:space-between;align-items:center;width:1100px;max-width:100%;margin:0 auto;padding:0 24px;display:flex}.footer-left{align-items:center;gap:26px;display:flex}.footer-logo-circle{box-sizing:border-box;border-radius:50%;justify-content:center;align-items:center;width:70px;height:70px;display:flex;overflow:hidden;box-shadow:0 4px 10px #00000026}.footer-logo-img{object-fit:cover;width:100%;height:100%;display:block}.footer-identity{flex-direction:column;gap:10px;display:flex}.footer-name{color:#fff;letter-spacing:-.5px;font-family:Josefin Slab,serif;font-size:31px;font-weight:600}.footer-socials{align-items:center;gap:21px;display:flex}.footer-social-link{align-items:center;display:flex}.footer-social-icon{filter:invert()brightness(.9);width:21px;height:21px}.footer-right{flex-direction:column;align-items:flex-end;gap:10px;display:flex}.footer-email{color:#ffffffd9;font-family:Josefin Slab,serif;font-size:21px;font-weight:400;text-decoration:none}.footer-email:hover{color:#fff;text-decoration:underline}.footer-copyright{color:#fff9;font-family:Josefin Slab,serif;font-size:18px}@media (width<=768px){.portfolio-banner{width:100%;height:240px;margin-left:0}.nav-capsule{gap:16px;padding:6px 20px;top:16px}.nav-item{font-size:15px}.profile-header{text-align:center;flex-direction:column;align-items:center;margin-top:-80px;padding:0}.avatar-container{width:140px;height:140px}.profile-details{flex-direction:column;align-items:center;gap:8px;display:flex}.profile-name{grid-area:auto;font-size:32px}.profile-role{grid-area:auto}.social-links{grid-area:auto;justify-content:center}.status-pills{justify-content:center;margin-left:0}.profile-bio{margin-left:0;padding-left:16px;font-size:19px}.portfolio-divider{margin:44px 0}.experience-section,.projects-section,.contact-section{margin-left:0}.projects-grid{grid-template-columns:1fr;gap:20px}.tech-marquee-section{gap:20px;width:100%;margin-left:0;padding:16px 0}.marquee-container:before,.marquee-container:after{width:40px}.portfolio-footer{border-radius:0;width:100vw;margin-left:-50vw;margin-right:-50vw;padding:36px 0;position:relative;left:50%;right:50%}.footer-content{text-align:center;flex-direction:column;align-items:center;gap:32px;padding:0 24px}.footer-left{flex-direction:column;gap:16px}.footer-identity{align-items:center}.footer-right{align-items:center;gap:8px}.card-header{flex-direction:column;align-items:flex-start;gap:8px}.card-header-left{flex-wrap:wrap;gap:8px}.card-date{margin-left:28px}}.back-to-top-btn{color:#fff;cursor:pointer;z-index:1000;opacity:0;pointer-events:none;background:#111;border:1px solid #ffffff26;border-radius:50%;justify-content:center;align-items:center;width:48px;height:48px;transition:opacity .4s cubic-bezier(.16,1,.3,1),transform .4s cubic-bezier(.16,1,.3,1),background-color .2s;display:flex;position:fixed;bottom:24px;right:24px;transform:translateY(24px)scale(.8);box-shadow:0 4px 12px #00000026}.back-to-top-btn.visible{opacity:1;pointer-events:auto;transform:translateY(0)scale(1)}.back-to-top-btn:hover{background:#222;transform:translateY(-2px)scale(1.05)}.custom-cursor{pointer-events:none;z-index:10000;color:#111;width:32px;height:32px;transition:transform .18s cubic-bezier(.16,1,.3,1),color .2s;display:none;position:fixed;transform:translate(-17.2px,-16px)}@media (width>=769px){html,body,a,button,input,textarea,select,.social-icon-link{cursor:none!important}.custom-cursor{display:block}}.custom-cursor.hovered{color:#336e65;transform:translate(-17.2px,-16px)scale(1.25)rotate(4deg)}.custom-cursor.clicked,.custom-cursor.hovered.clicked{color:#d66853;transform:translate(-17.2px,-16px)scale(.8)rotate(-4deg)}.custom-cursor.in-footer,.custom-cursor.in-footer.hovered,.custom-cursor.in-footer.clicked{color:#fff!important}.spark-particle{pointer-events:none;z-index:9999;border-radius:50%;animation:.6s cubic-bezier(.25,1,.5,1) forwards sparkMove;position:fixed;transform:translate(-50%,-50%)}@keyframes sparkMove{0%{transform:translate(-50%, -50%) rotate(var(--angle)) translateY(0) scale(1);opacity:1}to{transform:translate(-50%, -50%) rotate(var(--angle)) translateY(var(--distance)) scale(0);opacity:0}}.cursor-canvas{pointer-events:none;z-index:9998;width:100vw;height:100vh;position:fixed;top:0;left:0}
