@import"https://fonts.googleapis.com/css2?family=Fraunces:wght@700;900&family=DM+Sans:wght@400;500;700&display=swap";.header{position:fixed;top:0;left:0;right:0;z-index:1000;padding:20px 0;transition:all .4s cubic-bezier(.16,1,.3,1)}.header.scrolled{padding:12px 0;box-shadow:0 4px 30px #1a1a2e1a}.header-container{max-width:1400px;margin:0 auto;padding:0 40px;display:flex;justify-content:space-between;align-items:center}.logo{display:flex;flex-direction:column;text-decoration:none;color:var(--ink);gap:2px}.logo-name{font-family:var(--font-display);font-size:1.5rem;font-weight:900;letter-spacing:-.02em}.logo-title{font-size:.75rem;color:var(--muted);text-transform:uppercase;letter-spacing:.1em;font-weight:500}.nav{display:flex;align-items:center;gap:40px}.nav-link{text-decoration:none;color:var(--ink);font-weight:500;font-size:.95rem;position:relative;padding:8px 0}.nav-link:after{content:"";position:absolute;bottom:0;left:0;width:0;height:2px;background:var(--accent1);transition:width .3s ease}.nav-link:hover:after{width:100%}.nav-link:hover{color:var(--accent1)}.nav-cta{padding:12px 28px;background:var(--ink);color:var(--cream);text-decoration:none;border-radius:50px;font-weight:600;font-size:.95rem;border:2px solid var(--ink);cursor:pointer;position:relative;overflow:hidden}.nav-cta:before{content:"";position:absolute;top:50%;left:50%;width:0;height:0;border-radius:50%;background:var(--accent1);transform:translate(-50%,-50%);transition:width .5s ease,height .5s ease;z-index:-1}.nav-cta:hover:before{width:300px;height:300px}.nav-cta:hover{border-color:var(--accent1);transform:translateY(-2px);box-shadow:0 8px 20px #e85d4a4d}.menu-toggle{display:none;background:none;border:none;color:var(--ink);cursor:pointer;padding:8px}@media (max-width: 968px){.header-container{padding:0 20px}.menu-toggle{display:block}.nav{position:fixed;top:0;right:0;height:100vh;width:300px;background:var(--cream);flex-direction:column;justify-content:center;align-items:flex-start;padding:60px 40px;gap:30px;transform:translate(100%);transition:transform .4s cubic-bezier(.16,1,.3,1);box-shadow:-4px 0 30px #1a1a2e1a}.nav.open{transform:translate(0)}.nav-link{font-size:1.5rem;padding:12px 0}.nav-cta{margin-top:20px;width:100%;text-align:center}}.hero{position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden;background:linear-gradient(135deg,var(--cream) 0%,#ebe5da 100%)}.hero-background{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;pointer-events:none}.floating-shape{position:absolute;border-radius:50%;filter:blur(60px);opacity:.4;animation:float 6s ease-in-out infinite}.shape-1{width:400px;height:400px;background:var(--accent1);top:10%;left:10%;animation-delay:0s}.shape-2{width:300px;height:300px;background:var(--accent2);bottom:20%;right:15%;animation-delay:2s}.shape-3{width:250px;height:250px;background:var(--accent3);top:50%;left:50%;animation-delay:4s}.hero-container{max-width:1400px;width:100%;padding:0 40px;display:grid;grid-template-columns:1fr 1fr;gap:80px;align-items:center;position:relative;z-index:1}.hero-content{display:flex;flex-direction:column;gap:30px}.hero-badge{display:inline-flex;align-items:center;gap:8px;padding:12px 24px;background:rgba(26,26,46,.05);border:1px solid rgba(26,26,46,.1);border-radius:50px;font-size:.9rem;font-weight:600;color:var(--ink);width:fit-content;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);position:relative;overflow:hidden;align-self:center}.hero-badge:after{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);animation:shimmerSlide 4s ease-in-out infinite}@keyframes shimmerSlide{0%{left:-100%}to{left:100%}}.hero-title{display:flex;flex-direction:column;gap:8px}.hero-title-line{font-size:clamp(3rem,8vw,5.5rem);font-weight:900;line-height:1;letter-spacing:-.03em;color:var(--ink);opacity:0}.gradient-text{background:linear-gradient(135deg,var(--accent1) 0%,var(--accent2) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.hero-subtitle{font-size:1.25rem;color:var(--muted);max-width:500px;line-height:1.6;opacity:0;min-height:2em}.cursor{animation:blink 1s step-end infinite;color:var(--accent1)}@keyframes blink{0%,50%{opacity:1}51%,to{opacity:0}}.hero-cta{display:flex;gap:20px;flex-wrap:wrap;opacity:0}.btn-primary,.btn-secondary{padding:16px 36px;border-radius:50px;font-weight:600;font-size:1rem;cursor:pointer;border:2px solid var(--ink);display:inline-flex;align-items:center;gap:8px;text-decoration:none;transition:all .3s cubic-bezier(.16,1,.3,1);position:relative;overflow:hidden;background:var(--ink);color:var(--cream)}.btn-primary:before,.btn-secondary:before{content:"";position:absolute;top:50%;left:50%;width:0;height:0;border-radius:50%;background:var(--accent1);transform:translate(-50%,-50%);transition:width .5s ease,height .5s ease;z-index:-1}.btn-primary:hover:before,.btn-secondary:hover:before{width:300px;height:300px}.btn-primary:hover,.btn-secondary:hover{border-color:var(--accent1);transform:translateY(-2px);box-shadow:0 8px 20px #e85d4a4d}.hero-social{display:flex;gap:16px;opacity:0;justify-content:center}.social-link{width:48px;height:48px;border-radius:50%;border:2px solid var(--ink);display:flex;align-items:center;justify-content:center;color:var(--cream)!important;background:var(--ink)!important;transition:all .3s cubic-bezier(.16,1,.3,1);position:relative;overflow:hidden}.social-link svg{position:relative;z-index:2;color:var(--cream)}.social-link:before{content:"";position:absolute;top:50%;left:50%;width:0;height:0;border-radius:50%;background:var(--accent1);transform:translate(-50%,-50%);transition:width .5s ease,height .5s ease;z-index:1}.social-link:hover:before{width:100px;height:100px}.social-link:hover{border-color:var(--accent1);transform:translateY(-3px) rotate(5deg);box-shadow:0 8px 20px #e85d4a4d}.hero-image{opacity:0;display:flex;flex-direction:column;gap:30px}.image-container{padding:40px;border-radius:24px;box-shadow:0 20px 60px #1a1a2e26;position:relative;overflow:hidden}.image-container:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,rgba(220,38,38,.7),rgba(234,88,12,.7),rgba(202,138,4,.7),rgba(217,119,6,.7),rgba(220,38,38,.7));mix-blend-mode:screen;opacity:0;transform:skew(-15deg) translate(-120%);border-radius:24px;pointer-events:none;filter:blur(8px)}.image-container:hover:before{opacity:.7;animation:prismMove 3s ease}@keyframes prismMove{0%{transform:skew(-20deg) translate(-100%)}to{transform:skew(-15deg) translate(220%)}}.code-preview{font-family:Fira Code,Courier New,monospace;font-size:1rem;line-height:1.8;color:var(--ink);background:rgba(26,26,46,.03);padding:30px;border-radius:12px}.code-line{display:block;white-space:pre}.indent{padding-left:20px}.indent-2{padding-left:40px}.code-keyword{color:var(--accent1);font-weight:600}.code-variable{color:var(--accent2);font-weight:600}.code-property{color:var(--accent3)}.code-string{color:#2ecc71}.scroll-indicator{position:absolute;bottom:40px;left:50%;transform:translate(-50%);animation:float 3s ease-in-out infinite}.mouse{width:26px;height:42px;border:2px solid var(--ink);border-radius:15px;position:relative;opacity:.6}.wheel{width:4px;height:8px;background:var(--ink);border-radius:2px;position:absolute;top:8px;left:50%;transform:translate(-50%);animation:scroll 2s ease-in-out infinite}@keyframes scroll{0%{top:8px;opacity:1}to{top:24px;opacity:0}}@media (max-width: 968px){.hero-container{grid-template-columns:1fr;gap:60px;padding:0 20px;text-align:center}.hero-content{align-items:center}.hero-badge,.hero-subtitle{max-width:100%}.hero-title-line{font-size:clamp(2.5rem,10vw,4rem)}.hero-cta{justify-content:center}.btn-primary,.btn-secondary{flex:1;min-width:160px;justify-content:center}.hero-social{justify-content:center}.image-container{padding:20px}.code-preview{font-size:.85rem;padding:20px}}.hero-badge-right{display:inline-flex;align-items:center;gap:12px;padding:12px 24px;background:rgba(26,26,46,.05);border:1px solid rgba(26,26,46,.1);border-radius:50px;font-size:.9rem;font-weight:600;color:var(--ink);width:fit-content;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);position:relative;overflow:hidden;align-self:center;opacity:0}.hero-badge-right:after{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);animation:shimmerSlide 4s ease-in-out infinite}.status-dot{width:10px;height:10px;background:#22c55e;border-radius:50%;animation:pulse 2s ease-in-out infinite;box-shadow:0 0 8px #22c55e99}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(1.1)}}.about{position:relative;padding:120px 0;background:linear-gradient(180deg,var(--cream) 0%,#ebe5da 50%,var(--cream) 100%);overflow:hidden}.about-container{max-width:1200px;margin:0 auto;padding:0 40px}.section-badge{display:inline-block;padding:10px 20px;background:rgba(26,26,46,.05);border:1px solid rgba(26,26,46,.1);border-radius:50px;font-size:.85rem;font-weight:600;color:var(--accent1);text-transform:uppercase;letter-spacing:.05em;margin-bottom:20px}.section-title{font-size:clamp(3rem,6vw,4rem);font-weight:900;line-height:1.2;letter-spacing:-.02em;color:var(--ink)}.about-steps{display:flex;flex-direction:column;gap:30px}.about-band{display:flex;align-items:center;gap:40px;padding:40px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:20px;box-shadow:0 10px 40px #1a1a2e14;transition:all .4s cubic-bezier(.16,1,.3,1);opacity:0}.about-band:hover{transform:translateY(-5px);box-shadow:0 20px 60px #1a1a2e1f}.band-icon{width:80px;height:80px;border-radius:16px;display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0;transition:transform .4s cubic-bezier(.16,1,.3,1)}.about-band:hover .band-icon{transform:rotate(5deg) scale(1.1)}.band-content{flex:1}.band-title{font-size:2rem;font-weight:900;color:var(--ink);margin-bottom:12px;letter-spacing:-.01em}.band-description{font-size:1.15rem;line-height:1.8;color:var(--muted)}@media (max-width: 968px){.about{padding:80px 0}.about-container{padding:0 20px}.section-header{margin-bottom:60px}.about-steps{gap:20px}.about-band{flex-direction:column;text-align:center;padding:30px;gap:20px}.band-icon{width:64px;height:64px}.band-title{font-size:1.6rem}.band-description{font-size:1.05rem}}.parcours{position:relative;background:linear-gradient(180deg,var(--cream) 0%,#ebe5da 50%,var(--cream) 100%);overflow:hidden}.parcours-background{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;transition:transform .1s ease-out}.bg-shape{position:absolute;border-radius:50%;filter:blur(100px);opacity:.2}.bg-shape.shape-1{width:500px;height:500px;background:var(--accent2);top:20%;left:-10%}.bg-shape.shape-2{width:400px;height:400px;background:var(--accent3);bottom:10%;right:-5%}.parcours-container{max-width:1200px;margin:0 auto;padding:0 40px;position:relative;z-index:1}.timeline{position:relative;padding:60px 0}.timeline-line{position:absolute;left:50%;top:0;bottom:0;width:4px;background:rgba(26,26,46,.1);transform:translate(-50%);border-radius:2px}.timeline-progress{position:absolute;top:0;left:0;right:0;background:linear-gradient(180deg,var(--accent1),var(--accent2),var(--accent3));border-radius:2px;transition:height .6s cubic-bezier(.16,1,.3,1)}.timeline-item{position:relative;display:grid;grid-template-columns:1fr 80px 1fr;gap:40px;margin-bottom:100px;align-items:center}.timeline-item:nth-child(2n) .timeline-content{grid-column:1;grid-row:1}.timeline-item:nth-child(2n) .timeline-dot{grid-column:2}.timeline-item:nth-child(odd) .timeline-content{grid-column:3}.timeline-dot{grid-column:2;position:relative;width:80px;height:80px;display:flex;align-items:center;justify-content:center;z-index:2}.dot-inner{width:60px;height:60px;border-radius:50%;background:var(--cream);border:3px solid var(--item-color);display:flex;align-items:center;justify-content:center;color:var(--item-color);transition:all .4s cubic-bezier(.16,1,.3,1);position:relative;z-index:2}.timeline-item.active .dot-inner{background:var(--item-color);color:#fff;transform:scale(1.1);box-shadow:0 0 30px var(--item-color)}.dot-ring{position:absolute;top:-10px;right:-10px;bottom:-10px;left:-10px;border:2px solid var(--item-color);border-radius:50%;opacity:0;transform:scale(.8);transition:all .6s cubic-bezier(.16,1,.3,1)}.timeline-item.active .dot-ring{opacity:.3;transform:scale(1.2);animation:pulse 2s ease-in-out infinite}@keyframes pulse{0%,to{opacity:.3;transform:scale(1.2)}50%{opacity:0;transform:scale(1.5)}}.timeline-content{padding:32px;border-radius:20px;box-shadow:0 10px 40px #1a1a2e14;opacity:.3;transform:translate(0);transition:all .6s cubic-bezier(.16,1,.3,1);position:relative;overflow:hidden}.timeline-item.active .timeline-content{opacity:1;transform:translate(0)}.timeline-item:nth-child(2n):not(.active) .timeline-content{transform:translate(30px)}.timeline-item:nth-child(odd):not(.active) .timeline-content{transform:translate(-30px)}.content-glow{position:absolute;top:-100%;right:-50%;width:200%;height:200%;border-radius:50%;filter:blur(80px);opacity:0;transition:opacity .6s ease;pointer-events:none}.timeline-item.active .content-glow{opacity:.1}.content-header{margin-bottom:16px}.timeline-year{display:inline-block;padding:6px 16px;background:rgba(26,26,46,.05);border:1px solid rgba(26,26,46,.1);border-radius:50px;font-size:.85rem;font-weight:600;color:var(--muted);margin-bottom:12px}.timeline-title{font-size:1.75rem;font-weight:900;color:var(--ink);margin-bottom:8px}.timeline-description{color:var(--muted);line-height:1.7;margin-bottom:20px}.timeline-skills{display:flex;flex-wrap:wrap;gap:8px}.skill-tag{padding:8px 16px;background:rgba(26,26,46,.03);border:2px solid rgba(26,26,46,.1);border-radius:50px;font-size:.85rem;font-weight:600;color:var(--ink);opacity:0;transform:translateY(10px);transition:all .3s ease}.timeline-item.active .skill-tag{opacity:1;transform:translateY(0)}.parcours-cta{margin-top:80px}.cta-box{padding:50px;border-radius:24px;box-shadow:0 20px 60px #1a1a2e1a;text-align:center}.cta-title{font-size:2.5rem;font-weight:900;margin-bottom:40px;background:linear-gradient(135deg,var(--accent1),var(--accent2));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.cta-points{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:30px;text-align:left}.cta-point{display:flex;gap:16px;align-items:flex-start}.point-icon{font-size:2rem;flex-shrink:0}.cta-point strong{display:block;font-size:1.1rem;font-weight:700;color:var(--ink);margin-bottom:4px}.cta-point p{color:var(--muted);font-size:.95rem;line-height:1.5}@media (max-width: 968px){.parcours-container{padding:0 20px}.timeline-item{grid-template-columns:60px 1fr;gap:20px;margin-bottom:60px}.timeline-item:nth-child(2n) .timeline-content,.timeline-item:nth-child(odd) .timeline-content{grid-column:2;grid-row:1}.timeline-dot{grid-column:1;width:60px;height:60px}.dot-inner{width:50px;height:50px}.timeline-line{left:30px}.timeline-content{padding:24px}.timeline-title{font-size:1.5rem}.cta-box{padding:30px 20px}.cta-title{font-size:2rem}.cta-points{grid-template-columns:1fr;gap:24px}}.stack{background:var(--cream);padding:100px 0}.stack-container{max-width:1400px;margin:0 auto;padding:0 40px}.stack-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:30px;margin-bottom:60px}.stack-card{padding:32px;border-radius:20px;box-shadow:0 10px 40px #1a1a2e14;transition:all .4s cubic-bezier(.16,1,.3,1);opacity:0;transform:translateY(30px);position:relative;overflow:hidden;border:2px solid}.stack-card.visible{animation:fadeInUp .6s cubic-bezier(.16,1,.3,1) forwards}.stack-card:hover{transform:translateY(-8px);box-shadow:0 20px 60px #1a1a2e26}.stack-card:nth-child(1){background:rgba(74,158,218,.08);border-color:#4a9eda4d}.stack-card:nth-child(2){background:rgba(232,93,74,.08);border-color:#e85d4a4d}.stack-card:nth-child(3){background:rgba(240,165,0,.08);border-color:#f0a5004d}.stack-card:nth-child(4){background:rgba(74,158,218,.08);border-color:#4a9eda4d}.stack-card.highlight{background:rgba(232,93,74,.08);border-color:#e85d4a4d}.card-header{display:flex;align-items:center;gap:16px;margin-bottom:24px}.card-icon{width:50px;height:50px;border-radius:12px;display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0}.card-title-wrapper{flex:1}.card-title{font-size:1.5rem;font-weight:900;color:var(--ink);margin-bottom:4px}.card-subtitle{font-size:.9rem;color:var(--muted);font-weight:600}.skills-list{display:flex;flex-direction:column;gap:16px}.skill-item{display:flex;align-items:flex-start;gap:12px}.skill-icon{font-size:1.5rem;flex-shrink:0;line-height:1}.skill-info{flex:1;display:flex;flex-direction:column;gap:4px}.skill-name{font-weight:700;color:var(--ink);font-size:1rem}.skill-description{font-size:.9rem;color:var(--muted);line-height:1.5}.card-footer{margin-top:24px;padding-top:20px;border-top:2px solid rgba(26,26,46,.1);font-size:.95rem;color:var(--muted);font-style:italic;font-weight:500}.skill-logo{flex-shrink:0;width:24px;height:24px}.logo-react{color:#61dafb!important}.logo-typescript{color:#3178c6!important}.logo-nextjs{color:#000!important}.logo-tailwindcss{color:#06b6d4!important}.logo-jest{color:#c21325!important}.logo-reacttestinglibrary{color:#e33332!important}.logo-gitgithub{color:#181717!important}.logo-vitewebpack{color:#646cff!important}.logo-eslintprettier{color:#4b32c3!important}.formation-section{margin-top:60px;text-align:center}.formation-header{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:16px}.formation-icon{font-size:2rem}.formation-title{font-size:1.75rem;font-weight:900;color:var(--ink)}.formation-link{display:inline-block;color:var(--accent2);font-weight:600;text-decoration:none;margin-bottom:32px;transition:all .3s ease}.formation-link:hover{color:var(--accent1);text-decoration:underline}.formation-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:20px;max-width:1000px;margin:0 auto}.formation-card{padding:24px;border-radius:16px;border:2px solid;display:flex;align-items:center;gap:12px;transition:all .3s cubic-bezier(.16,1,.3,1)}.formation-card.completed{background:rgba(34,197,94,.1);border-color:#22c55e}.formation-card.in-progress{background:rgba(59,130,246,.1);border-color:#3b82f6}.formation-card:hover{transform:translateY(-4px);box-shadow:0 8px 24px #1a1a2e1f}.formation-status{font-size:1.5rem}.formation-name{font-weight:700;color:var(--ink);font-size:1rem}@keyframes fadeInUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.stack-container{padding:0 20px}.stack-grid{grid-template-columns:1fr;gap:24px}.formation-grid{grid-template-columns:1fr}}.projets{background:linear-gradient(180deg,#ebe5da 0%,var(--cream) 100%);padding:100px 0}.projets-container{max-width:1400px;margin:0 auto;padding:0 40px}.section-header{text-align:center;margin-bottom:80px}.section-badge{display:inline-block;padding:8px 20px;background:rgba(26,26,46,.05);border:1px solid rgba(26,26,46,.1);border-radius:50px;font-size:.85rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.1em;margin-bottom:20px}.section-title{font-size:clamp(2.5rem,6vw,4rem);font-weight:900;margin-bottom:20px;line-height:1.1}.section-subtitle{font-size:1.25rem;color:var(--muted);max-width:600px;margin:0 auto}.projects-grid{display:flex;flex-direction:column;gap:50px;margin-bottom:80px;max-width:900px;margin-left:auto;margin-right:auto}.flip-card-wrapper{perspective:1000px;height:580px;opacity:0}.flip-card-wrapper.visible{animation:fadeIn .8s cubic-bezier(.16,1,.3,1) forwards}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.flip-card{position:relative;width:100%;height:100%;transition:transform 2s cubic-bezier(.16,1,.3,1);transform-style:preserve-3d}.flip-card-wrapper:hover .flip-card{transform:rotateY(180deg)}.flip-card-front,.flip-card-back{position:absolute;width:100%;height:100%;backface-visibility:hidden;border-radius:24px;overflow:hidden;box-shadow:0 10px 40px #1a1a2e14}.flip-card-front{display:flex;flex-direction:column}.project-image{width:100%;height:400px;overflow:hidden;position:relative;background:rgba(26,26,46,.02)}.project-image img{width:100%;height:100%;object-fit:cover;object-position:top;display:block}.front-content{padding:30px 35px 35px;display:flex;flex-direction:column;gap:8px;flex:1;background:rgba(255,255,255,.85)}.project-number{font-size:2.5rem;font-weight:900;font-family:var(--font-display);line-height:1;margin-bottom:4px}.project-title{font-size:1.75rem;font-weight:900;font-family:var(--font-display);color:var(--ink);line-height:1.2;margin-top:0}.flip-card-back{transform:rotateY(180deg);padding:40px;display:flex;flex-direction:column;gap:16px}.flip-card-back:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:rgba(255,255,255,.85);z-index:0;pointer-events:none}.flip-card-back>*{position:relative;z-index:1}.back-number{font-size:2.5rem;font-weight:900;font-family:var(--font-display);line-height:1}.back-title{font-size:1.75rem;font-weight:900;font-family:var(--font-display);margin-bottom:10px;line-height:1.2;color:var(--ink)}.back-description{color:var(--muted);line-height:1.7;font-size:1rem;flex:1;overflow-y:auto;padding-right:8px}.back-description::-webkit-scrollbar{width:4px}.back-description::-webkit-scrollbar-thumb{background:rgba(26,26,46,.2);border-radius:10px}.highlights{display:flex;flex-direction:column;gap:8px;margin-bottom:10px}.highlight-item{font-size:.95rem;display:flex;align-items:center;gap:8px;color:var(--ink);font-weight:500}.tech-stack{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}.tech-badge{padding:6px 14px;background:rgba(26,26,46,.05);border:1px solid rgba(26,26,46,.1);border-radius:50px;font-size:.85rem;font-weight:500;color:var(--ink)}.project-links{display:flex;gap:12px;margin-top:auto}.project-link{flex:1;padding:12px 20px;border:2px solid rgba(26,26,46,.2);border-radius:50px;display:flex;align-items:center;justify-content:center;gap:8px;text-decoration:none;color:var(--ink);font-weight:600;font-size:.9rem;transition:all .3s cubic-bezier(.16,1,.3,1);background:rgba(255,255,255,.6)}.project-link:hover{transform:translateY(-2px);box-shadow:0 4px 12px #1a1a2e26;border-color:var(--ink);background:rgba(255,255,255,.9)}.project-link.primary{color:#fff;border-color:transparent}.project-link.primary:hover{transform:translateY(-2px) scale(1.02)}.cta-section{max-width:900px;margin:0 auto;text-align:center;padding:60px 40px;background:rgba(26,26,46,.03);border-radius:24px;border:1px solid rgba(26,26,46,.1)}.cta-text{font-size:1.25rem;color:var(--muted);margin-bottom:24px}.btn-github{display:inline-flex;align-items:center;gap:10px;padding:16px 36px;background:var(--ink);color:var(--cream);border:2px solid var(--ink);border-radius:50px;font-weight:600;font-size:1rem;text-decoration:none;transition:all .3s cubic-bezier(.16,1,.3,1);position:relative;overflow:hidden;cursor:pointer}.btn-github:before{content:"";position:absolute;top:50%;left:50%;width:0;height:0;border-radius:50%;background:var(--accent1);transform:translate(-50%,-50%);transition:width .5s ease,height .5s ease;z-index:-1}.btn-github:hover:before{width:300px;height:300px}.btn-github:hover{border-color:var(--accent1);transform:translateY(-2px);box-shadow:0 8px 20px #e85d4a4d}@media (max-width: 768px){.projets-container{padding:0 20px}.projects-grid{max-width:100%;gap:40px}.flip-card-wrapper{height:520px}.project-image{height:320px}.front-content,.flip-card-back{padding:24px}.project-number,.back-number{font-size:2rem}.project-title,.back-title{font-size:1.5rem}.section-header{margin-bottom:60px}.cta-section{padding:40px 20px}}.contact{background:linear-gradient(180deg,#ebe5da 0%,var(--cream) 100%)}.contact-container{max-width:1400px;margin:0 auto;padding:0 40px}.contact-content{display:grid;grid-template-columns:1fr 1.5fr;gap:40px;align-items:start}.info-card{padding:40px;border-radius:24px;box-shadow:0 20px 60px #1a1a2e1a;position:sticky;top:100px}.info-title{font-size:2rem;font-weight:900;color:var(--ink);margin-bottom:16px}.info-text{color:var(--muted);line-height:1.7;margin-bottom:32px}.contact-details{display:flex;flex-direction:column;gap:20px;margin-bottom:32px}.detail-item{display:flex;align-items:center;gap:16px;padding:16px;background:rgba(26,26,46,.02);border-radius:12px;transition:all .3s ease;text-decoration:none;color:inherit}.detail-item:hover{background:rgba(26,26,46,.05);transform:translate(4px)}.detail-icon{width:48px;height:48px;border-radius:12px;display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0}.detail-item>div{display:flex;flex-direction:column;gap:4px}.detail-label{font-size:.85rem;color:var(--muted);font-weight:500}.detail-value{font-size:1rem;color:var(--ink);font-weight:600}.contact-social{display:flex;gap:12px;margin-bottom:32px}.social-btn{flex:1;padding:14px 20px;border:2px solid var(--ink);border-radius:50px;display:flex;align-items:center;justify-content:center;gap:8px;text-decoration:none;color:var(--cream);font-weight:600;font-size:.9rem;background:var(--ink);transition:all .3s cubic-bezier(.16,1,.3,1);position:relative;overflow:hidden}.social-btn:before{content:"";position:absolute;top:50%;left:50%;width:0;height:0;border-radius:50%;background:var(--accent1);transform:translate(-50%,-50%);transition:width .5s ease,height .5s ease;z-index:-1}.social-btn:hover:before{width:300px;height:300px}.social-btn:hover{border-color:var(--accent1);transform:translateY(-2px);box-shadow:0 8px 20px #e85d4a4d}.cv-notice{padding:20px;background:linear-gradient(135deg,rgba(240,165,0,.1),rgba(232,93,74,.1));border:2px solid rgba(240,165,0,.2);border-radius:12px;text-align:center}.cv-notice p{margin:0;color:var(--ink);font-size:.95rem}.contact-form-wrapper{position:relative}.contact-form{padding:40px;border-radius:24px;box-shadow:0 20px 60px #1a1a2e1a}.form-title{font-size:1.75rem;font-weight:900;color:var(--ink);margin-bottom:30px}.success-message{padding:20px;background:rgba(46,204,113,.1);border:2px solid #2ecc71;border-radius:12px;display:flex;align-items:center;gap:12px;color:#27ae60;margin-bottom:24px;animation:slideInRight .5s ease}.success-message p{margin:0;font-weight:600}.form-group{margin-bottom:24px;width:100%}.form-group label{display:block;font-weight:600;color:var(--ink);margin-bottom:8px;font-size:.95rem}.form-group input,.form-group textarea{width:100%;padding:14px 18px;border:2px solid rgba(26,26,46,.1);border-radius:12px;font-family:var(--font-body);font-size:1rem;background:rgba(245,240,232,.5);color:var(--ink);transition:all .3s ease}.form-group input:focus,.form-group textarea:focus{outline:none;border-color:var(--accent2);box-shadow:0 0 0 4px #4a9eda1a;background:rgba(245,240,232,.8)}.form-group textarea{resize:vertical;min-height:120px}.btn-submit{width:100%;padding:16px 32px;background:var(--ink);color:var(--cream);border:2px solid var(--ink);border-radius:50px;font-weight:600;font-size:1rem;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:10px;transition:all .3s cubic-bezier(.16,1,.3,1)}.btn-submit:hover:not(:disabled){background:var(--accent1);border-color:var(--accent1);transform:translateY(-2px);box-shadow:0 12px 30px #e85d4a4d}.btn-submit:disabled{opacity:.7;cursor:not-allowed}.spinner{width:20px;height:20px;border:3px solid rgba(245,240,232,.3);border-top-color:var(--cream);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media (max-width: 968px){.contact-container{padding:0 20px}.contact-content{grid-template-columns:1fr;gap:30px}.info-card{position:static;padding:30px 24px}.contact-form{padding:30px 24px}.contact-social{flex-direction:column}.social-btn{width:100%}}.availability{display:flex;align-items:center;gap:12px;justify-content:center}.status-indicator{width:12px;height:12px;background:#22c55e;border-radius:50%;animation:pulse 2s ease-in-out infinite;box-shadow:0 0 #22c55eb3}.error-message{display:flex;align-items:center;gap:.75rem;padding:1rem;background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.3);border-radius:8px;color:#ef4444;margin-bottom:1.5rem;animation:slideIn .3s ease-out}.error-message svg{flex-shrink:0}@keyframes pulse{0%,to{box-shadow:0 0 #22c55eb3}50%{box-shadow:0 0 0 8px #22c55e00}}.footer{background:var(--ink);color:var(--cream);padding:80px 0 40px;position:relative;overflow:hidden}.footer:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--accent1),var(--accent2),var(--accent3),transparent)}.footer-container{max-width:1400px;margin:0 auto;padding:0 40px}.footer-content{display:grid;grid-template-columns:1.5fr 2fr;gap:60px;margin-bottom:60px;padding-bottom:60px;border-bottom:1px solid rgba(245,240,232,.1)}.footer-brand{display:flex;flex-direction:column;gap:16px}.footer-logo{font-family:var(--font-display);font-size:2rem;font-weight:900;color:var(--cream);margin-bottom:8px}.footer-tagline{color:var(--accent2);font-weight:600;font-size:1rem;text-transform:uppercase;letter-spacing:.05em}.footer-description{color:#f5f0e8b3;line-height:1.7;max-width:400px}.footer-links{display:grid;grid-template-columns:repeat(3,1fr);gap:40px}.footer-section{display:flex;flex-direction:column;gap:16px}.footer-title{font-family:var(--font-display);font-size:1.1rem;font-weight:900;color:var(--cream);margin-bottom:8px}.footer-list{list-style:none;display:flex;flex-direction:column;gap:12px}.footer-list li{color:#f5f0e8b3;font-size:.95rem;transition:all .3s ease}.footer-list a{color:#f5f0e8b3;text-decoration:none;transition:all .3s ease;display:inline-block}.footer-list a:hover{color:var(--accent1);transform:translate(4px)}.footer-social{display:flex;justify-content:center;gap:16px;margin-bottom:40px}.social-link{width:48px;height:48px;border-radius:50%;border:2px solid rgba(245,240,232,.2);display:flex;align-items:center;justify-content:center;color:var(--cream);transition:all .3s cubic-bezier(.16,1,.3,1);background:rgba(245,240,232,.05)}.social-link:hover{background:var(--accent1);border-color:var(--accent1);color:#fff;transform:translateY(-3px) rotate(5deg);box-shadow:0 8px 20px #e85d4a4d}.footer-bottom{display:flex;flex-direction:column;align-items:center;gap:12px;padding-top:40px;border-top:1px solid rgba(245,240,232,.1)}.footer-copyright{color:#f5f0e8b3;font-size:.9rem;display:flex;align-items:center;gap:6px}.heart{color:var(--accent1);animation:heartbeat 1.5s ease-in-out infinite}@keyframes heartbeat{0%,to{transform:scale(1)}10%,30%{transform:scale(1.2)}20%,40%{transform:scale(1)}}.footer-tech{color:#f5f0e880;font-size:.85rem;font-weight:500}@media (max-width: 968px){.footer{padding:60px 0 30px}.footer-container{padding:0 20px}.footer-content{grid-template-columns:1fr;gap:40px;margin-bottom:40px;padding-bottom:40px}.footer-links{grid-template-columns:1fr;gap:32px}.footer-bottom{padding-top:30px;text-align:center}.footer-copyright,.footer-tech{text-align:center}}.app{width:100%;min-height:100vh}section{min-height:100vh;padding:120px 20px 80px;position:relative}@media (max-width: 768px){section{padding:100px 16px 60px;min-height:auto}}*{margin:0;padding:0;box-sizing:border-box}:root{--ink: #1a1a2e;--cream: #f5f0e8;--accent1: #e85d4a;--accent2: #4a9eda;--accent3: #f0a500;--muted: #7a7a8a;--font-display: "Fraunces", serif;--font-body: "DM Sans", sans-serif}html{scroll-behavior:smooth;scroll-padding-top:80px}body{font-family:var(--font-body);background-color:var(--cream);color:var(--ink);overflow-x:hidden;line-height:1.6}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);font-weight:900;line-height:1.1}@keyframes fadeInUp{0%{opacity:0;transform:translateY(40px)}to{opacity:1;transform:translateY(0)}}@keyframes scaleIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}@keyframes slideInLeft{0%{opacity:0;transform:translate(-60px)}to{opacity:1;transform:translate(0)}}@keyframes slideInRight{0%{opacity:0;transform:translate(60px)}to{opacity:1;transform:translate(0)}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}@keyframes glow{0%,to{box-shadow:0 0 20px #e85d4a4d}50%{box-shadow:0 0 40px #e85d4a99}}.animate-in{animation:fadeInUp .8s cubic-bezier(.16,1,.3,1) forwards}.animate-scale{animation:scaleIn .6s cubic-bezier(.16,1,.3,1) forwards}.glass{background:rgba(245,240,232,.7);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(26,26,46,.1)}.glass-dark{background:rgba(26,26,46,.8);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(245,240,232,.1)}*{transition:background-color .3s ease,color .3s ease,transform .3s ease}button,a{transition:all .3s cubic-bezier(.16,1,.3,1)}
