*,:after,:before{box-sizing:border-box;margin:0;padding:0}:root{--wood:#8b5e3c;--wood-light:#c4906a;--wood-pale:#f5ede3;--wood-dark:#5c3a1e;--dot:#1a1a2e;--dot-mid:#2d3561;--dot-accent:#4a90d9;--cream:#fdfaf6;--light-border:#e8ddd5;--text-primary:#1a1a1e;--text-secondary:#5a5560;--section-alt:#f8f3ee;--tr:.4s cubic-bezier(.25,.46,.45,.94)}html{scroll-behavior:smooth}body{background:var(--cream);color:var(--text-primary);font-family:DM Sans,sans-serif;line-height:1.6;overflow-x:hidden}nav{z-index:100;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-bottom:1px solid var(--light-border);background:#fdfaf6eb;transition:box-shadow .3s;position:fixed;top:0;left:0;right:0}nav.scrolled{box-shadow:0 4px 32px #8b5e3c1a}.nav-inner{justify-content:space-between;max-width:1300px;height:64px;margin:0 auto;padding:0 2rem}.nav-inner,.nav-right{align-items:center;display:flex}.nav-right{gap:2rem}.lang-switcher{align-items:center;gap:.5rem;font-family:JetBrains Mono,monospace;font-size:.75rem;display:flex}.lang-btn{color:var(--text-secondary);cursor:pointer;background:0 0;border:none;padding:.2rem .4rem;font-weight:500;transition:color .3s}.lang-btn.active,.lang-btn:hover{color:var(--wood)}.lang-btn.active{font-weight:600}.lang-sep{color:var(--light-border);font-size:.7rem}.nav-logo{color:var(--dot);letter-spacing:-.02em;font-family:DM Serif Display,serif;font-size:1.5rem;text-decoration:none}.nav-logo span{color:var(--wood)}.nav-links{gap:2rem;list-style:none;display:flex}.nav-links a{color:var(--text-secondary);letter-spacing:.04em;text-transform:uppercase;transition:color var(--tr);font-size:.8125rem;font-weight:500;text-decoration:none}.nav-links a:hover{color:var(--wood)}.nav-cta{background:var(--dot);color:#fff;transition:background var(--tr),transform var(--tr);border-radius:100px;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;text-decoration:none}.nav-cta:hover{background:var(--wood);transform:translateY(-1px)}#hero{align-items:center;min-height:100vh;padding:6rem 2rem 4rem;display:flex;position:relative;overflow:hidden}.hero-bg{pointer-events:none;inset:0}.hc,.hero-bg{position:absolute}.hc{opacity:.07;border-radius:50%}.hc1{background:var(--wood);width:700px;height:700px;animation:8s ease-in-out infinite f1;top:-200px;right:-150px}.hc2{background:var(--dot-accent);width:400px;height:400px;animation:10s ease-in-out infinite f2;bottom:-100px;left:-80px}@keyframes f1{0%,to{transform:translateY(0)scale(1)}50%{transform:translateY(-30px)scale(1.02)}}@keyframes f2{0%,to{transform:translateY(0)scale(1)}50%{transform:translateY(20px)scale(.98)}}.hero-inner{z-index:1;width:100%;max-width:1100px;margin:0 auto;position:relative}.hero-tag{background:var(--wood-pale);border:1px solid var(--light-border);color:var(--wood-dark);letter-spacing:.04em;text-transform:uppercase;border-radius:100px;align-items:center;gap:8px;margin-bottom:2rem;padding:.375rem 1rem;font-size:.8125rem;font-weight:500;animation:.8s both fadeUp;display:inline-flex}.hero-tag:before{content:"";background:var(--wood);border-radius:50%;width:8px;height:8px;animation:2s infinite pulse;display:inline-block}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(.7)}}h1{letter-spacing:-.03em;color:var(--dot);font-family:DM Serif Display,serif;font-size:clamp(2.75rem,6.5vw,5rem);line-height:1.05;animation:.8s .1s both fadeUp}h1 em{color:var(--wood);font-style:normal}.hero-sub{color:var(--text-secondary);max-width:600px;margin-top:1.5rem;font-size:1.0625rem;line-height:1.75;animation:.8s .2s both fadeUp}.hero-actions{flex-wrap:wrap;gap:1rem;margin-top:2.5rem;animation:.8s .3s both fadeUp;display:flex}.btn-primary{background:var(--dot);color:#fff;transition:all var(--tr);border-radius:100px;align-items:center;gap:8px;padding:.875rem 2rem;font-size:.9375rem;font-weight:500;text-decoration:none;display:inline-flex}.btn-primary:hover{background:var(--wood);transform:translateY(-2px);box-shadow:0 8px 32px #8b5e3c40}.btn-secondary{border:1.5px solid var(--light-border);color:var(--text-primary);transition:all var(--tr);border-radius:100px;align-items:center;gap:8px;padding:.875rem 2rem;font-size:.9375rem;font-weight:500;text-decoration:none;display:inline-flex}.btn-secondary:hover{border-color:var(--wood);color:var(--wood);background:var(--wood-pale)}.hero-stats{flex-wrap:wrap;gap:3rem;margin-top:4rem;animation:.8s .4s both fadeUp;display:flex}.stat{flex-direction:column;gap:4px;display:flex}.stat-num{color:var(--dot);letter-spacing:-.03em;font-family:DM Serif Display,serif;font-size:2.25rem}.stat-num span{color:var(--wood)}.stat-label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.06em;font-size:.75rem;font-weight:500}.stat-divider{background:var(--light-border);width:1px}@keyframes fadeUp{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}.scroll-line{background:linear-gradient(to bottom,var(--light-border),transparent);width:1px;height:48px;animation:2s infinite sd}@keyframes sd{0%{transform-origin:top;transform:scaleY(0)}50%{transform-origin:top;transform:scaleY(1)}51%{transform-origin:bottom;transform:scaleY(1)}to{transform-origin:bottom;transform:scaleY(0)}}section{padding:6rem 2rem}.section-inner{max-width:1100px;margin:0 auto}.section-tag{color:var(--wood);text-transform:uppercase;letter-spacing:.12em;margin-bottom:.75rem;font-family:JetBrains Mono,monospace;font-size:.75rem}.section-title{color:var(--dot);letter-spacing:-.02em;margin-bottom:1.25rem;font-family:DM Serif Display,serif;font-size:clamp(1.875rem,4vw,2.75rem);line-height:1.1}.section-lead{color:var(--text-secondary);max-width:560px;font-size:1rem;line-height:1.75}.reveal{opacity:0;transition:opacity .65s,transform .65s;transform:translateY(28px)}.reveal.visible{opacity:1;transform:none}#about{background:var(--section-alt)}.about-grid{grid-template-columns:1fr 1.2fr;align-items:start;gap:5rem;margin-top:3rem;display:grid}.about-card{border:1px solid var(--light-border);background:#fff;border-radius:20px;padding:2rem;position:relative;overflow:hidden}.about-card:before{content:"";background:linear-gradient(90deg,var(--wood),var(--dot-accent));height:4px;position:absolute;top:0;left:0;right:0}.about-avatar{background:var(--wood-pale);width:64px;height:64px;color:var(--wood-dark);border-radius:14px;justify-content:center;align-items:center;margin-bottom:1.25rem;font-family:DM Serif Display,serif;font-size:1.5rem;display:flex}.about-avatar img{-o-object-fit:cover;object-fit:cover;width:100%;height:100%}.about-name{color:var(--dot);font-family:DM Serif Display,serif;font-size:1.25rem}.about-role{color:var(--text-secondary);margin-top:4px;font-size:.875rem}.about-divider{background:var(--light-border);height:1px;margin:1.25rem 0}.about-meta{flex-direction:column;gap:.5rem;display:flex}.about-meta-item{color:var(--text-secondary);align-items:center;gap:10px;font-size:.875rem;display:flex}.about-meta-item strong{color:var(--text-primary);font-weight:500}.profile-chips{flex-wrap:wrap;gap:8px;margin-top:1.25rem;display:flex}.chip{border-radius:100px;padding:4px 12px;font-size:.8rem;font-weight:500}.chip-wood{background:var(--wood-pale);color:var(--wood-dark);border:1px solid var(--light-border)}.chip-dot{color:#3730a3;background:#eef0ff;border:1px solid #dddaff}.chip-sky{color:#1d4ed8;background:#eff6ff;border:1px solid #dbeafe}.about-text h3{color:var(--dot);margin-bottom:1rem;font-family:DM Serif Display,serif;font-size:1.75rem}.about-text p{color:var(--text-secondary);margin-bottom:1rem;font-size:.9375rem;line-height:1.8}.about-caps{grid-template-columns:1fr 1fr;gap:.875rem;margin-top:1.5rem;display:grid}.cap-item{border:1px solid var(--light-border);background:#fff;border-radius:12px;align-items:flex-start;gap:10px;padding:1rem;display:flex}.cap-icon{flex-shrink:0;margin-top:2px;font-size:1.25rem}.cap-text strong{color:var(--dot);font-size:.875rem;font-weight:600;display:block}.cap-text span{color:var(--text-secondary);font-size:.8rem}.formation-block{background:var(--wood-pale);border:1px solid var(--light-border);border-radius:12px;margin-top:1.25rem;padding:1.25rem}.formation-block h4{text-transform:uppercase;letter-spacing:.08em;color:var(--wood);margin-bottom:.75rem;font-family:JetBrains Mono,monospace;font-size:.75rem}.formation-item{color:var(--text-secondary);align-items:center;gap:8px;padding:4px 0;font-size:.875rem;display:flex}.formation-item:before{content:"";background:var(--wood);border-radius:50%;flex-shrink:0;width:6px;height:6px}.skills-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:2rem;margin-bottom:3rem;display:flex}.skills-grid{grid-template-columns:repeat(3,1fr);gap:1.25rem;display:grid}.skill-card{border:1px solid var(--light-border);transition:all var(--tr);background:#fff;border-radius:16px;padding:1.5rem;position:relative;overflow:hidden}.skill-card:after{content:"";background:var(--sc,var(--wood));transform-origin:0;height:3px;transition:transform var(--tr);position:absolute;bottom:0;left:0;right:0;transform:scaleX(0)}.skill-card:hover{border-color:#0000;transform:translateY(-4px);box-shadow:0 12px 40px #00000014}.skill-card:hover:after{transform:scaleX(1)}.skill-cat{text-transform:uppercase;letter-spacing:.1em;color:var(--text-secondary);margin-bottom:.625rem;font-family:JetBrains Mono,monospace;font-size:.7rem}.skill-name{color:var(--dot);margin-bottom:.625rem;font-family:DM Serif Display,serif;font-size:1.0625rem}.skill-desc{color:var(--text-secondary);margin-bottom:.875rem;font-size:.875rem;line-height:1.6}.skill-pills{flex-wrap:wrap;gap:5px;display:flex}.sp{border-radius:100px;padding:3px 9px;font-size:.72rem;font-weight:500}.sp-b{color:#3730a3;background:#eef0ff}.sp-f{color:#166534;background:#f0fdf4}.sp-c{color:#1d4ed8;background:#eff6ff}.sp-d{color:#c2410c;background:#fff7ed}.sp-m{color:#7e22ce;background:#fdf4ff}.sp-g{color:#5c3a1e;background:#f8f3ee}.sp-gr{color:#374151;background:#f3f4f6}#experience{background:var(--section-alt)}.exp-intro{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:2rem;margin-bottom:3rem;display:flex}.timeline{position:relative}.timeline:before{content:"";background:var(--light-border);width:1px;position:absolute;top:0;bottom:0;left:190px}.tl-item{grid-template-columns:190px 1fr;gap:2.5rem;padding:0 0 2.5rem;display:grid;position:relative}.tl-item:last-child{padding-bottom:0}.tl-item:before{content:"";background:var(--wood);border:2px solid var(--section-alt);z-index:1;width:12px;height:12px;transition:transform var(--tr);border-radius:50%;position:absolute;top:10px;left:190px;transform:translate(-50%)}.tl-item:hover:before{transform:translate(-50%)scale(1.5)}.tl-date{text-align:right;padding-top:6px;padding-right:2.5rem}.tl-year{color:var(--dot);font-family:DM Serif Display,serif;font-size:1.25rem}.tl-period{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-top:2px;font-family:JetBrains Mono,monospace;font-size:.72rem}.tl-box{border:1px solid var(--light-border);transition:border-color var(--tr);background:#fff;border-radius:16px;padding:1.5rem}.tl-box:hover{border-color:var(--wood-light)}.tl-role{color:var(--dot);font-size:1rem;font-weight:600}.tl-company{color:var(--wood);margin-top:3px;font-size:.875rem;font-weight:500}.tl-desc{color:var(--text-secondary);margin-top:.75rem;font-size:.875rem;line-height:1.7}.tl-tech{flex-wrap:wrap;gap:5px;margin-top:.875rem;display:flex}.tb{background:var(--wood-pale);color:var(--wood-dark);border-radius:100px;padding:2px 9px;font-family:JetBrains Mono,monospace;font-size:.7rem;font-weight:500}.proj-tabs{flex-wrap:wrap;gap:8px;margin-bottom:2.5rem;display:flex}.proj-tab{cursor:pointer;border:1.5px solid var(--light-border);color:var(--text-secondary);transition:all var(--tr);background:0 0;border-radius:100px;padding:6px 16px;font-family:DM Sans,sans-serif;font-size:.8125rem;font-weight:500}.proj-tab:hover{border-color:var(--wood);color:var(--wood)}.proj-tab.active{background:var(--dot);color:#fff;border-color:var(--dot)}.proj-tab-perso.active{background:var(--wood);border-color:var(--wood)}.projects-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:2rem;margin-bottom:2rem;display:flex}.projects-grid{grid-template-columns:repeat(3,1fr);gap:1.25rem;display:grid}.proj-card{border:1px solid var(--light-border);transition:all var(--tr);cursor:pointer;background:#fff;border-radius:20px;flex-direction:column;display:flex;overflow:hidden}.proj-card:hover{border-color:#0000;transform:translateY(-6px);box-shadow:0 20px 56px #0000001a}.proj-card[data-cat=perso]{border:1.5px solid var(--light-border)}.proj-card[data-cat=perso] .proj-thumb{position:relative}.proj-card[data-cat=perso] .proj-thumb:before{content:"Projet perso";background:var(--wood);color:#fff;letter-spacing:.04em;text-transform:uppercase;border-radius:100px;padding:3px 9px;font-family:JetBrains Mono,monospace;font-size:.65rem;font-weight:600;position:absolute;top:12px;right:12px}.proj-thumb{flex-shrink:0;justify-content:center;align-items:center;height:150px;font-size:2.5rem;display:flex;position:relative;overflow:hidden}.pt1{background:linear-gradient(135deg,#0c2547,#0369a1)}.pt2{background:linear-gradient(135deg,#1a3a1e,#166534)}.pt3{background:linear-gradient(135deg,#1a1a2e,#3730a3)}.pt4{background:linear-gradient(135deg,#3a1a1a,#8b5e3c)}.pt5{background:linear-gradient(135deg,#0c3547,#185fa5)}.pt6{background:linear-gradient(135deg,#2d1a3a,#7e22ce)}.pt7{background:linear-gradient(135deg,#1a2e1a,#2d6a2d)}.pt8{background:linear-gradient(135deg,#1a1a2e,#c4906a)}.proj-body{flex-direction:column;flex:1;padding:1.25rem;display:flex}.proj-type{text-transform:uppercase;letter-spacing:.1em;color:var(--text-secondary);margin-bottom:.375rem;font-family:JetBrains Mono,monospace;font-size:.68rem}.proj-client{color:var(--wood);margin-bottom:.375rem;font-size:.75rem;font-weight:500}.proj-title{color:var(--dot);font-family:DM Serif Display,serif;font-size:1.0625rem;line-height:1.2}.proj-desc{color:var(--text-secondary);flex:1;margin-top:.5rem;font-size:.8125rem;line-height:1.65}.proj-stack{flex-wrap:wrap;gap:4px;margin-top:.875rem;display:flex}.proj-footer{border-top:1px solid var(--light-border);justify-content:space-between;align-items:center;gap:8px;padding:.875rem 1.25rem;display:flex}.proj-period{color:var(--text-secondary);font-family:JetBrains Mono,monospace;font-size:.72rem}.proj-role-badge{white-space:nowrap;border-radius:100px;padding:2px 8px;font-size:.72rem;font-weight:600}.rb-lead{color:#166534;background:#f0fdf4}.rb-senior{color:#3730a3;background:#eef0ff}.rb-ref{color:#c2410c;background:#fff7ed}.rb-perso{background:var(--wood-pale);color:var(--wood-dark)}.proj-card.hidden{display:none}.modal-overlay{z-index:200;opacity:0;pointer-events:none;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#1a1a1eb3;justify-content:center;align-items:center;padding:2rem;transition:opacity .3s;display:flex;position:fixed;inset:0}.modal-overlay.open{opacity:1;pointer-events:all}.modal{background:var(--cream);border-radius:24px;width:100%;max-width:720px;max-height:85vh;transition:transform .3s;position:relative;overflow-y:auto;transform:translateY(20px)}.modal-overlay.open .modal{transform:none}.modal-header{border-bottom:1px solid var(--light-border);background:var(--cream);z-index:1;border-radius:24px 24px 0 0;padding:2rem 2rem 1.5rem;position:sticky;top:0}.modal-link-btn{border:1.5px solid var(--light-border);color:var(--text-primary);transition:all var(--tr);border-radius:100px;align-items:center;gap:6px;margin-top:10px;padding:.4rem 1rem;font-size:.8125rem;font-weight:500;text-decoration:none;display:inline-flex}.modal-link-btn:hover{border-color:var(--wood);color:var(--wood);background:var(--wood-pale)}.modal-close{border:1px solid var(--light-border);cursor:pointer;width:36px;height:36px;color:var(--text-secondary);transition:all var(--tr);background:0 0;border-radius:50%;justify-content:center;align-items:center;font-size:1.125rem;display:flex;position:absolute;top:1.5rem;right:1.5rem}.modal-close:hover{background:var(--wood);color:#fff;border-color:var(--wood)}.modal-body{padding:2rem}.modal-section{margin-bottom:1.75rem}.modal-section h4{text-transform:uppercase;letter-spacing:.1em;color:var(--wood);margin-bottom:.75rem;font-family:JetBrains Mono,monospace;font-size:.72rem}.modal-section ul{flex-direction:column;gap:6px;list-style:none;display:flex}.modal-section ul li{color:var(--text-secondary);align-items:flex-start;gap:8px;font-size:.875rem;display:flex}.modal-section ul li:before{content:"→";color:var(--wood);flex-shrink:0;margin-top:1px}.modal-results{flex-wrap:wrap;gap:8px;display:flex}.result-chip{padding:5px 12px;font-size:.8rem}.modal-perso-tag,.result-chip{background:var(--wood-pale);border:1px solid var(--light-border);color:var(--wood-dark);border-radius:100px}.modal-perso-tag{text-transform:uppercase;letter-spacing:.04em;align-items:center;gap:6px;margin-bottom:8px;padding:3px 10px;font-family:JetBrains Mono,monospace;font-size:.75rem;font-weight:600;display:inline-flex}#contact{background:var(--dot);color:#fff;position:relative;overflow:hidden}.cbg{opacity:.04;border-radius:50%;position:absolute}.cbg1{background:#fff;width:600px;height:600px;top:-200px;right:-150px}.cbg2{background:var(--wood);width:300px;height:300px;bottom:-100px;left:-80px}.contact-inner{z-index:1;max-width:1100px;margin:0 auto;position:relative}.contact-tag{color:#ffffff80;text-transform:uppercase;letter-spacing:.12em;margin-bottom:.75rem;font-family:JetBrains Mono,monospace;font-size:.75rem}.contact-title{letter-spacing:-.03em;margin-bottom:1.25rem;font-family:DM Serif Display,serif;font-size:clamp(2.25rem,5vw,3.75rem);line-height:1.05}.contact-title span{color:var(--wood-light)}.contact-lead{color:#ffffffa6;max-width:500px;margin-bottom:3rem;font-size:1rem;line-height:1.75}.contact-info{grid-template-columns:repeat(2,1fr);gap:1rem;max-width:640px;display:grid}.c-item-wide{grid-column:1/-1}.c-item{color:#fff;transition:all var(--tr);background:#ffffff0f;border:1px solid #ffffff1a;border-radius:12px;align-items:center;gap:1rem;padding:1rem 1.25rem;text-decoration:none;display:flex}.c-item:hover{background:#ffffff1a;transform:translate(4px)}.c-icon{background:var(--wood);border-radius:9px;flex-shrink:0;justify-content:center;align-items:center;width:38px;height:38px;font-size:1rem;display:flex}.c-text strong{font-size:.875rem;display:block}.c-text span{color:#ffffff8c;font-size:.8rem}.contact-form{background:#ffffff0f;border:1px solid #ffffff1f;border-radius:20px;padding:2rem}.fg{margin-bottom:1.125rem}.fg label{color:#ffffffa6;text-transform:uppercase;letter-spacing:.05em;margin-bottom:5px;font-size:.75rem;display:block}.fg input,.fg textarea{color:#fff;width:100%;transition:border-color var(--tr);background:#ffffff14;border:1px solid #ffffff26;border-radius:9px;outline:none;padding:.7rem 1rem;font-family:DM Sans,sans-serif;font-size:.9375rem}.fg input::-moz-placeholder{color:#ffffff4d}.fg textarea::-moz-placeholder{color:#ffffff4d}.fg input::placeholder,.fg textarea::placeholder{color:#ffffff4d}.fg input:focus,.fg textarea:focus{border-color:var(--wood-light);background:#ffffff1a}.fg textarea{resize:none;height:110px}.hcaptcha-container{margin-bottom:1.125rem}.hcaptcha-container .h-captcha{transform-origin:0;transform:scale(.95)}@media (width<=600px){.hcaptcha-container .h-captcha{transform-origin:0;transform:scale(.85)}}.form-btn{background:var(--wood);color:#fff;cursor:pointer;width:100%;transition:all var(--tr);border:none;border-radius:9px;padding:.875rem;font-family:DM Sans,sans-serif;font-size:.9375rem;font-weight:600}.form-btn:hover{background:var(--wood-light);transform:translateY(-1px)}.form-btn.success{background:#10b981!important;border-color:#10b981!important}footer{text-align:center;background:#111017;padding:2rem}.footer-logo{color:#fff;margin-bottom:4px;font-family:DM Serif Display,serif;font-size:1.0625rem}.footer-logo span{color:var(--wood-light)}footer p{color:#fff6;font-size:.8125rem}footer small{color:#fff3;margin-top:4px;font-family:JetBrains Mono,monospace;font-size:.68rem;display:block}@media (width<=900px){.projects-grid,.skills-grid{grid-template-columns:repeat(2,1fr)}.about-grid,.contact-grid{grid-template-columns:1fr;gap:2.5rem}.about-caps{grid-template-columns:1fr}}@media (width<=600px){.nav-links{display:none}.projects-grid,.skills-grid{grid-template-columns:1fr}.timeline:before{left:0}.tl-item{grid-template-columns:1fr;gap:.375rem}.tl-item:before{top:0;left:0}.tl-date{text-align:left;padding:0 0 .25rem 1.5rem}.hero-stats{gap:1.5rem}.stat-divider{display:none}.contact-info{grid-template-columns:1fr;max-width:400px}}
