:root{
    --bg:#F5F5F1;
    --surface:#FFFFFF;
    --ink:#1C2321;
    --muted:#5B655F;
    --border:#E1E2DC;
    --pine:#16261F;
    --brass:#B3843C;
    --brass-soft:#F1E6D2;
    --brass-light:#D9AE63;
    --teal:#2F7D6D;
    --teal-soft:#DCEEE8;
    --slate:#3D6A8C;
    --slate-soft:#E0EAF2;
    --sage-band:#E6EEE9;
    --on-dark:#EEF1EC;
    --on-dark-muted:#A3B5AB;
  }
  *{box-sizing:border-box;}
  html{scroll-behavior:smooth;scroll-padding-top:5rem;}
  body{
    margin:0;
    background:var(--bg);
    color:var(--ink);
    font-family:'Inter',-apple-system,BlinkMacSystemFont,sans-serif;
    line-height:1.6;
  }
  h1,h2,h3{
    font-family:'Fraunces',serif;
    font-weight:500;
    margin:0;
  }
  a{color:inherit;}
  .wrap{max-width:1120px;margin:0 auto;padding:0 1.5rem;}

  /* ---- nav ---- */
  header{
    position:sticky;top:0;z-index:10;
    background:rgba(245,245,241,0.9);
    backdrop-filter:blur(6px);
    border-bottom:1px solid var(--border);
  }
  .nav-inner{
    max-width:1120px;margin:0 auto;padding:0.9rem 1.5rem;
    display:flex;align-items:center;justify-content:space-between;
    gap:1rem;
  }
  .nav-name{font-family:'Fraunces',serif;font-size:1.05rem;font-weight:600;text-decoration:none;}
  nav.links{display:flex;gap:1.4rem;flex-wrap:wrap;}
  nav.links a{font-size:0.88rem;text-decoration:none;color:var(--muted);}
  nav.links a:hover{color:var(--ink);}

  /* ---- hero ---- */
  .hero .kicker{font-size:0.9rem;color:var(--brass);font-weight:600;margin-bottom:0.9rem;}
  .hero h1{font-size:clamp(2.1rem,5vw,3rem);line-height:1.15;max-width:14ch;}
  .hero p.role{font-size:1.15rem;color:var(--muted);margin-top:0.8rem;}
  .hero p.bio{margin-top:1.4rem;max-width:56ch;font-size:1.02rem;}
  .hero .cta-row{margin-top:2rem;display:flex;gap:0.9rem;flex-wrap:wrap;}
  .btn{
    display:inline-block;padding:0.7rem 1.3rem;border-radius:3px;
    font-size:0.9rem;font-weight:600;text-decoration:none;
    border:1px solid var(--pine);
  }
  .btn.primary{background:var(--pine);color:#fff;}
  .btn.ghost{background:transparent;color:var(--pine);}

  /* ---- section shell ---- */
  section{padding:6.5rem 0;border-top:1px solid var(--border);}
  /* Espacement entre les sections (section.wrap l'emporte sur .wrap, qui remettait le padding vertical à 0) */
  section.wrap{padding-top:5.5rem;padding-bottom:5rem;}
  section.hero{padding-top:5rem;padding-bottom:5rem;border-top:0;}
  section h2{font-size:1.5rem;margin-bottom:2.2rem;}

  /* ---- parcours timeline ---- */
  .timeline{display:flex;flex-direction:column;gap:1.8rem;}
  .entry{position:relative;padding-left:1.5rem;border-left:2px solid var(--border);}
  .entry::before{
    content:"";position:absolute;left:-6px;top:0.3rem;
    width:10px;height:10px;border-radius:50%;
    background:var(--brass);
  }
  .entry .date{font-size:0.82rem;color:var(--muted);font-weight:600;letter-spacing:0.02em;}
  .entry h3{font-size:1.08rem;margin-top:0.25rem;}
  .entry .org{display:block;font-size:0.92rem;color:var(--muted);margin-top:0.15rem;}
  .entry p{margin:0.5rem 0 0;font-size:0.95rem;}
  .entry .to-edit{color:var(--brass);font-style:italic;}

  h3.sub{font-size:0.95rem;color:var(--muted);font-weight:600;margin:2rem 0 1rem;}
  h3.sub:first-child{margin-top:0;}

  /* ---- récompenses / certifications ---- */
  [hidden]{display:none !important;}
  h3.sub.tight{margin-top:0;}
  h3.sub.gap-top{margin-top:3.5rem;}
  .cert-tools{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:0.9rem 1.5rem;margin-bottom:1.8rem;}
  .chips{display:flex;flex-wrap:wrap;gap:0.5rem;}
  .chip{
    font:inherit;font-size:0.82rem;padding:0.4rem 0.85rem;border-radius:999px;
    border:1px solid var(--border);background:var(--surface);color:var(--muted);
    cursor:pointer;transition:background .15s,color .15s,border-color .15s;
  }
  .chip:hover{border-color:var(--pine);color:var(--ink);}
  .chip[aria-pressed="true"]{background:var(--pine);border-color:var(--pine);color:#fff;}
  .chip .n{margin-left:0.35rem;opacity:0.65;}
  .chip:focus-visible,.hex-btn:focus-visible,.copy:focus-visible,.switch input:focus-visible{outline:2px solid var(--brass);outline-offset:3px;}
  .switch{display:inline-flex;align-items:center;gap:0.5rem;font-size:0.85rem;color:var(--muted);cursor:pointer;}
  .switch input{accent-color:var(--pine);width:16px;height:16px;margin:0;cursor:pointer;}

  .hex-wall{display:flex;flex-wrap:wrap;gap:1.2rem 0.6rem;min-height:120px;}
  .hex-hint{font-size:0.8rem;color:var(--muted);margin:1.2rem 0 0;}
  .empty{color:var(--muted);font-style:italic;margin:0;}
  .hex-btn{
    width:98px;padding:0;border:0;background:none;color:inherit;font:inherit;cursor:pointer;
    display:flex;flex-direction:column;align-items:center;gap:0.4rem;
    animation:pop .4s both;animation-delay:calc(var(--i,0) * 45ms);
  }
  .hex-btn svg,.hex-btn img{width:88px;height:auto;display:block;transition:transform .2s ease,filter .2s ease;}
  .hex-btn img{height:99px;object-fit:contain;} /* même hauteur que les badges dessinés : légendes alignées */
  .hex-btn:hover svg,.hex-btn:hover img{transform:translateY(-4px) rotate(-3deg);}
  .hex-btn .cap{font-size:0.7rem;color:var(--muted);text-align:center;line-height:1.2;}
  .hex-btn[aria-pressed="true"] .cap{color:var(--ink);font-weight:600;}
  .hex-btn[aria-pressed="true"] svg,.hex-btn[aria-pressed="true"] img{transform:translateY(-4px);filter:drop-shadow(0 8px 10px rgba(22,38,31,0.3));}
  .hex-btn.expired svg,.hex-btn.expired img{filter:grayscale(1) opacity(0.55);}
  .hex-btn.expired:hover svg,.hex-btn.expired:hover img{filter:grayscale(0.4) opacity(0.85);}
  .hex-btn.expired[aria-pressed="true"] svg,.hex-btn.expired[aria-pressed="true"] img{filter:grayscale(0.7) opacity(0.85) drop-shadow(0 8px 10px rgba(22,38,31,0.3));}
  @keyframes pop{from{opacity:0;transform:scale(0.85);}to{opacity:1;transform:none;}}

  .cert-detail{
    margin-top:1.8rem;background:var(--surface);border:1px solid var(--border);
    border-radius:8px;padding:1.6rem;display:flex;gap:1.8rem;align-items:flex-start;
  }
  .cert-detail.swap{animation:fadeUp .35s ease;}
  @keyframes fadeUp{from{opacity:0;transform:translateY(8px);}to{opacity:1;transform:none;}}
  .detail-badge{flex:0 0 112px;}
  .detail-badge svg,.detail-badge img{width:112px;height:auto;display:block;}
  .detail-badge img{height:125px;object-fit:contain;}
  .detail-badge.expired svg,.detail-badge.expired img{filter:grayscale(1) opacity(0.6);}
  .detail-body{min-width:0;flex:1;}
  .detail-body h3{font-size:1.2rem;line-height:1.3;}
  .detail-body .org{display:block;color:var(--muted);font-size:0.92rem;margin-top:0.3rem;}
  .detail-body .btn{margin-top:1.3rem;}
  .pill{display:inline-block;font-size:0.72rem;font-weight:600;padding:0.2rem 0.6rem;border-radius:3px;margin-bottom:0.7rem;}
  .pill.brass{color:var(--brass);background:var(--brass-soft);}
  .pill.muted{color:var(--muted);background:#ECEDE8;}
  .pill.info{color:var(--pine);background:#E2EAE5;}
  .facts{display:grid;grid-template-columns:auto 1fr;gap:0.4rem 1.1rem;margin:1.1rem 0 0;font-size:0.9rem;}
  .facts dt{color:var(--muted);}
  .facts dd{margin:0;min-width:0;}
  .facts .rel{color:var(--muted);}
  .facts code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:0.82rem;word-break:break-all;}
  .copy{
    font:inherit;font-size:0.74rem;margin-left:0.6rem;padding:0.15rem 0.55rem;
    border:1px solid var(--border);background:var(--bg);color:var(--ink);border-radius:4px;cursor:pointer;
  }
  .copy:hover{border-color:var(--pine);}

  .award-card{
    display:flex;gap:1.2rem;align-items:flex-start;
    background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:1.4rem 1.6rem;
  }
  .award-icon{
    flex:0 0 44px;width:44px;height:44px;border-radius:8px;background:var(--brass-soft);
    display:flex;align-items:center;justify-content:center;
  }
  .award-icon svg{width:22px;height:22px;fill:none;stroke:var(--brass);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;}
  .award-card h3{font-size:1.05rem;line-height:1.35;}
  .award-card .org{display:block;font-size:0.9rem;color:var(--muted);margin-top:0.3rem;}
  .award-card .meta{font-size:0.88rem;color:var(--muted);margin:0.6rem 0 0;}

  @media (prefers-reduced-motion:reduce){
    .hex-btn,.cert-detail.swap{animation:none;}
    .hex-btn svg,.hex-btn img{transition:none;}
  }
  @media (max-width:560px){.cert-detail{flex-direction:column;}}


/* ---- compétences ---- */
  .skill-group{margin-bottom:1.6rem;}
  .skill-group:last-child{margin-bottom:0;}
  .tags{display:flex;flex-wrap:wrap;gap:0.55rem;margin-top:0.7rem;}
  .tag{
    font-size:0.85rem;padding:0.4rem 0.85rem;border-radius:999px;
    background:var(--surface);border:1px solid var(--border);
  }

  /* ---- contact ---- */
  .contact-intro{max-width:56ch;margin:-0.8rem 0 2rem;color:var(--muted);}
  .contact-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:1rem;}
  .contact-card{
    display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);
    border-radius:6px;padding:1.3rem 1.3rem 1.1rem;text-decoration:none;min-width:0;
  }
  .contact-icon{
    width:42px;height:42px;border-radius:8px;background:var(--brass-soft);
    display:flex;align-items:center;justify-content:center;margin-bottom:1rem;
    transition:background .25s ease;
  }
  .contact-icon svg{width:21px;height:21px;fill:none;stroke:var(--brass);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;transition:stroke .25s ease;}
  .contact-card:hover .contact-icon{background:var(--pine);}
  .contact-card:hover .contact-icon svg{stroke:#fff;}
  .contact-card .label{font-size:0.78rem;color:var(--muted);}
  .contact-card .value{display:block;margin-top:0.2rem;font-weight:600;font-size:0.98rem;overflow-wrap:break-word;}
  .contact-card .desc{font-size:0.86rem;color:var(--muted);margin:0.5rem 0 0;flex:1;}
  .contact-card .action{
    margin-top:1.1rem;padding-top:0.8rem;border-top:1px solid var(--border);
    font-size:0.82rem;font-weight:600;color:var(--pine);
  }

  .contact-facts{
    display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1rem 1.5rem;
    margin:1.6rem 0 0;padding:1.2rem 1.3rem;border:1px dashed var(--border);border-radius:6px;
  }
  .contact-facts div{min-width:0;}
  .contact-card .to-edit,.contact-facts .to-edit{color:var(--brass);font-style:italic;font-weight:500;}
  .contact-facts dt{font-size:0.78rem;color:var(--muted);}
  .contact-facts dd{margin:0.2rem 0 0;font-size:0.92rem;font-weight:500;}

  footer{padding:2.5rem 0;text-align:center;font-size:0.82rem;color:var(--muted);}

  @media (max-width:560px){
    section.wrap{padding-top:3.5rem;padding-bottom:3rem;}
    .nav-inner{flex-direction:column;align-items:flex-start;gap:0.6rem;}
  }

  /* =================================================================
     ANIMATIONS
     Tout ce qui cache un élément avant son apparition est préfixé par
     .anim : sans JS ou avec "réduire les animations", tout reste visible.
     ================================================================= */
  :root{--ease:cubic-bezier(.2,.7,.2,1);}

  /* ---- en-tête : ombre au défilement + lien actif ---- */
  header{transition:box-shadow .3s ease,background .3s ease;}
  header.scrolled{box-shadow:0 2px 18px rgba(22,38,31,0.25);background:rgba(22,38,31,0.97);}
  nav.links a{position:relative;transition:color .2s ease;}
  nav.links a::after{
    content:"";position:absolute;left:0;right:0;bottom:-5px;height:2px;border-radius:2px;
    background:var(--brass);transform:scaleX(0);transform-origin:left;transition:transform .35s var(--ease);
  }
  nav.links a:hover::after,nav.links a.active::after{transform:scaleX(1);}
  nav.links a.active{color:var(--ink);}

  /* ---- hero : séquence d'ouverture ---- */
  .hero h1::after{
    content:"";display:block;width:3.2rem;height:3px;margin-top:1.1rem;border-radius:2px;
    background:var(--brass);transform-origin:left;
  }
  @keyframes rise{from{opacity:0;transform:translateY(16px);}to{opacity:1;transform:none;}}
  @keyframes draw{from{transform:scaleX(0);}to{transform:scaleX(1);}}
  .anim .hero-text > *,.anim .hero-card{opacity:0;animation:rise .75s var(--ease) forwards;}
  .anim .hero-text > :nth-child(1){animation-delay:.08s;}
  .anim .hero-text > :nth-child(2){animation-delay:.2s;}
  .anim .hero-text > :nth-child(3){animation-delay:.36s;}
  .anim .hero-text > :nth-child(4){animation-delay:.48s;}
  .anim .hero-text > :nth-child(5){animation-delay:.6s;}
  .anim .hero-card{animation-duration:.9s;animation-delay:.7s;}
  .anim .hero h1::after{transform:scaleX(0);animation:draw .6s var(--ease) .75s forwards;}

  /* ---- boutons ---- */
  .btn{transition:transform .18s var(--ease),box-shadow .2s ease,background .2s ease,color .2s ease;}
  .btn:hover{transform:translateY(-2px);box-shadow:0 8px 16px -8px rgba(22,38,31,0.45);}
  .btn:active{transform:translateY(0);box-shadow:none;}
  .btn.primary:hover{background:#223a2f;}
  .btn.ghost:hover{background:var(--pine);color:#fff;}

  /* ---- parcours : la ligne se trace, les points apparaissent ---- */
  .entry::after{
    content:"";position:absolute;left:-2px;top:0;bottom:0;width:2px;
    background:var(--border);transform-origin:top;display:none;
  }
  @keyframes dot{0%{transform:scale(0);}60%{transform:scale(1.5);}100%{transform:scale(1);}}
  @keyframes ring{from{box-shadow:0 0 0 0 rgba(179,132,60,0.45);}to{box-shadow:0 0 0 10px rgba(179,132,60,0);}}
  .anim .entry{border-left-color:transparent;}
  .anim .entry::after{display:block;transform:scaleY(0);transition:transform .8s var(--ease);}
  .anim .entry::before{z-index:1;transform:scale(0);}
  .anim .entry > *{opacity:0;transform:translateX(-10px);transition:opacity .55s ease,transform .55s var(--ease);}
  .anim .timeline.in .entry::after{transform:scaleY(1);}
  .anim .timeline.in .entry::before{animation:dot .5s var(--ease) .15s forwards,ring 1.1s ease-out .55s;}
  .anim .timeline.in .entry > *{opacity:1;transform:none;}
  .anim .timeline.in .entry > :nth-child(1){transition-delay:.25s;}
  .anim .timeline.in .entry > :nth-child(2){transition-delay:.35s;}
  .anim .timeline.in .entry > :nth-child(3){transition-delay:.45s;}

  /* ---- badges : l'apparition démarre quand le mur arrive à l'écran ---- */
  .anim #cert-wall:not(.in) .hex-btn{animation:none;opacity:0;}
  .chip{transition:background .15s,color .15s,border-color .15s,transform .12s;}
  .chip:active{transform:scale(0.95);}
  .copy{transition:background .2s,color .2s,border-color .2s;}
  .copy.ok{background:var(--pine);border-color:var(--pine);color:#fff;}

  /* ---- récompense : la médaille se dessine ---- */
  .award-card{transition:border-color .25s ease,transform .25s var(--ease);}
  .award-card:hover{border-color:var(--brass);}
  .anim .award-icon svg *{stroke-dasharray:100;stroke-dashoffset:100;transition:stroke-dashoffset 1.1s var(--ease) .2s;}
  .anim .award-icon svg path{transition-delay:.7s;}
  .anim .award-card.in .award-icon svg *{stroke-dashoffset:0;}

  /* ---- compétences : cascade des étiquettes ---- */
  .tag{transition:opacity .45s ease,transform .45s var(--ease),border-color .2s ease,color .2s ease;}
  .tag:hover{border-color:var(--brass);}
  .anim .tags:not(.in) .tag{opacity:0;transform:translateY(8px) scale(0.96);}
  .anim .tags.in .tag{transition-delay:calc(var(--i,0) * 40ms),calc(var(--i,0) * 40ms),0s,0s;}
  .anim .tags.in .tag:hover{transform:translateY(-2px);transition-delay:0s;}

  /* ---- contact ---- */
  .contact-card{transition:opacity .5s ease,transform .5s var(--ease),border-color .2s ease,box-shadow .25s ease;}
  .contact-card .value{transition:color .2s ease;}
  .contact-card:hover{transform:translateY(-3px);border-color:var(--brass);box-shadow:0 12px 22px -14px rgba(22,38,31,0.4);}
  .contact-card:hover .value{color:var(--pine);}
  .anim .contact-row:not(.in) .contact-card{opacity:0;transform:translateY(12px);}
  .anim .contact-row.in .contact-card{transition-delay:calc(var(--i,0) * 90ms),calc(var(--i,0) * 90ms),0s,0s;}
  .anim .contact-row.in .contact-card:hover{transition-delay:0s;}

  @media (prefers-reduced-motion:reduce){
    header,nav.links a,nav.links a::after,.btn,.chip,.tag,.contact-card,.award-card{transition:none;}
    .btn:hover,.contact-card:hover{transform:none;}
  }
  /* =================================================================
     MISE EN PAGE RESPONSIVE
     ================================================================= */

  /* ---- hero : carte "En bref" ---- */
  .hero-card{
    margin-top:2.8rem;background:var(--surface);border:1px solid var(--border);
    border-radius:8px;padding:1.5rem 1.6rem;
  }
  .hero-card .card-title{font-family:'Fraunces',serif;font-size:1.1rem;font-weight:500;margin:0 0 1.1rem;}
  .brief{display:grid;gap:1rem 1.6rem;margin:0;}
  .brief dt{font-size:0.76rem;color:var(--muted);}
  .brief dd{margin:0.15rem 0 0;font-size:0.93rem;font-weight:500;line-height:1.4;}
  .brief .note{display:block;font-size:0.82rem;font-weight:400;color:var(--muted);margin-top:0.1rem;}
  .brief .to-edit,.hero-card .to-edit{color:var(--brass);font-style:italic;}
  .mini-badges{
    display:flex;flex-wrap:wrap;align-items:center;gap:0.5rem;margin-top:1.3rem;padding-top:1.1rem;
    border-top:1px solid var(--border);text-decoration:none;color:var(--muted);font-size:0.8rem;
  }
  .mini-badges:empty{display:none;}
  .mini-badges img,.mini-badges svg{width:40px;height:45px;object-fit:contain;display:block;transition:transform .2s var(--ease);}
  .mini-badges:hover img,.mini-badges:hover svg{transform:translateY(-3px);}
  .mini-badges .more{margin-left:auto;font-weight:600;color:var(--pine);}

  /* ---- grilles internes ---- */
  .parcours-grid{display:grid;gap:2.6rem;}
  .skills-grid{display:grid;gap:1.8rem;}
  .skills-grid .skill-group{margin:0;}

  @media (min-width:600px) and (max-width:959px){
    .brief{grid-template-columns:1fr 1fr;}
  }
  @media (min-width:720px){
    .skills-grid{grid-template-columns:2fr 1fr;gap:3rem;}
  }

  /* ---- PC : titre à gauche (collant), contenu à droite ---- */
  @media (min-width:960px){
    section.hero{
      display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);
      gap:4.5rem;align-items:center;padding-top:6rem;padding-bottom:6rem;
    }
    .hero h1{font-size:clamp(2.8rem,4.2vw,3.6rem);}
    .hero-card{margin-top:0;}

    section.wrap:not(.hero){
      display:grid;grid-template-columns:200px minmax(0,1fr);
      column-gap:4rem;align-items:start;
    }
    section.wrap:not(.hero) > *{grid-column:2;}
    section.wrap:not(.hero) > h2{
      grid-column:1;grid-row:1 / span 30;margin:0;
      position:sticky;top:6.5rem;font-size:1.7rem;line-height:1.2;
    }
    section.wrap:not(.hero) > h2::after{
      content:"";display:block;width:2rem;height:2px;margin-top:0.9rem;background:var(--brass);border-radius:2px;
    }
    .hex-wall{gap:1.4rem 0.4rem;}
    .hex-btn{width:94px;}
  }

  /* ---- mobile ---- */
  @media (max-width:560px){
    html{scroll-padding-top:6.5rem;}
    .nav-inner{padding:0.75rem 1.25rem 0.4rem;}
    .wrap{padding:0 1.25rem;}
    nav.links{
      flex-wrap:nowrap;overflow-x:auto;width:100%;gap:1.3rem;padding-bottom:0.45rem;
      scrollbar-width:none;-webkit-overflow-scrolling:touch;
    }
    nav.links::-webkit-scrollbar{display:none;}
    nav.links a{white-space:nowrap;font-size:0.9rem;}

    section.hero{padding-top:2.8rem;padding-bottom:3rem;}
    .hero p.role{font-size:1.05rem;}
    .hero .cta-row .btn{flex:1;text-align:center;padding:0.85rem 1rem;}
    .hero-card{padding:1.3rem;}
    section h2{margin-bottom:1.6rem;}

    /* certifications */
    .cert-tools{display:block;}
    .cert-tools .switch{margin-top:0.9rem;}
    .chips{flex-wrap:nowrap;overflow-x:auto;margin:0 -1.25rem;padding:0 1.25rem 4px;scrollbar-width:none;}
    .chips::-webkit-scrollbar{display:none;}
    .chip{flex:none;padding:0.5rem 0.95rem;}
    .hex-wall{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));justify-items:center;gap:1.2rem 0.4rem;}
    .cert-detail{padding:1.25rem;gap:1.1rem;}
    .detail-badge{flex:none;}
    .detail-body .btn{display:block;text-align:center;}
    .facts{grid-template-columns:1fr;gap:0.1rem;}
    .facts dd{margin-bottom:0.6rem;}
    .award-card{padding:1.2rem;gap:1rem;}

    /* contact : cartes horizontales, plus compactes */
    .contact-card{display:grid;grid-template-columns:42px minmax(0,1fr);column-gap:1rem;padding:1.1rem;}
    .contact-icon{grid-row:1 / span 4;margin:0;}
    .contact-card > :not(.contact-icon){grid-column:2;}
    .contact-card .action{margin-top:0.8rem;padding-top:0.6rem;}
    .contact-facts{padding:1rem 1.1rem;}
  }

  /* =================================================================
     COULEUR & VIE
     ================================================================= */
  .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;}

  /* ---- en-tête sombre ---- */
  header{background:rgba(22,38,31,0.92);border-bottom-color:rgba(255,255,255,0.07);}
  .nav-name{color:var(--on-dark);}
  nav.links a{color:var(--on-dark-muted);}
  nav.links a:hover,nav.links a.active{color:#fff;}
  nav.links a::after{background:var(--brass-light);}

  /* ---- bandeau du hero : fond vert profond + réseau animé ---- */
  .hero-band{
    position:relative;overflow:hidden;color:var(--on-dark);
    background:
      radial-gradient(circle at 82% 18%,rgba(47,125,109,0.45),transparent 55%),
      radial-gradient(circle at 8% 95%,rgba(179,132,60,0.22),transparent 50%),
      var(--pine);
  }
  #hero-net{position:absolute;inset:0;width:100%;height:100%;display:block;}
  .hero-band .hero{position:relative;z-index:1;}
  .hero-band + section{border-top:0;}
  .hero-band .hero .kicker{color:var(--brass-light);min-height:1.45em;}
  .hero-band .hero h1{color:#fff;}
  .hero-band .hero h1::after{background:var(--brass-light);}
  .hero-band .hero p.role{color:var(--on-dark-muted);}
  .hero-band .hero p.bio{color:#D3DCD6;}
  .hero-band .btn.primary{background:var(--brass-light);border-color:var(--brass-light);color:var(--pine);}
  .hero-band .btn.primary:hover{background:#E6BE77;border-color:#E6BE77;box-shadow:0 10px 24px -10px rgba(217,174,99,0.7);}
  .anim .typed::after{
    content:"";display:inline-block;width:2px;height:1em;margin-left:3px;vertical-align:-0.15em;
    background:currentColor;animation:blink 1s steps(1) infinite;
  }
  @keyframes blink{50%{opacity:0;}}

  .hero-band .hero-card{
    background:rgba(255,255,255,0.06);border-color:rgba(255,255,255,0.12);
    backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
    box-shadow:0 24px 48px -28px rgba(0,0,0,0.6);
  }
  .hero-band .hero-card .card-title{color:#fff;}
  .hero-band .brief dt{color:var(--on-dark-muted);}
  .hero-band .brief dd{color:var(--on-dark);}
  .hero-band .brief .note{color:var(--on-dark-muted);}
  .hero-band .brief .to-edit,.hero-band .hero-card .to-edit{color:var(--brass-light);}
  .hero-band .mini-badges{border-top-color:rgba(255,255,255,0.12);}
  .hero-band .mini-badges .more{color:var(--brass-light);}
  .hero-band .hero .btn:focus-visible,.hero-band a:focus-visible{outline:2px solid var(--brass-light);outline-offset:3px;}

  /* ---- parcours : points colorés ---- */
  .parcours-grid .entry::before{background:var(--teal);}
  .parcours-grid h3.sub{color:var(--teal);}
  .parcours-grid .entry .date,.parcours-grid .entry .org{color:var(--brass);font-style:italic;}
  /* Description d'une entrée : à droite sur grand écran, séparée par un filet */
  @media (min-width:720px){
    .parcours-grid .entry.has-logo:has(> p){grid-template-columns:56px minmax(0,0.9fr) minmax(0,1.3fr);grid-template-rows:auto auto 1fr;}
    .parcours-grid .entry.has-logo > p{grid-column:3;grid-row:1 / span 3;align-self:center;margin:0;padding-left:1.6rem;border-left:1px solid var(--border);}
  }

  /* ---- certifications : bande vert pâle pleine largeur ---- */
  #recompenses{
    border-top:0;background:var(--sage-band);
    box-shadow:0 0 0 100vmax var(--sage-band);clip-path:inset(0 -100vmax);
  }
  #recompenses + section{border-top:0;}
  #recompenses h3.sub{color:var(--teal);}
  .award-card{border-left:3px solid var(--brass);}

  /* ---- tons réutilisables (compétences, contact) ---- */
  .tone-teal{--tone:var(--teal);--tone-soft:var(--teal-soft);}
  .tone-slate{--tone:var(--slate);--tone-soft:var(--slate-soft);}
  .tone-brass{--tone:var(--brass);--tone-soft:var(--brass-soft);}

  .skills-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr)) !important;}
  .skill-group strong{display:inline-flex;align-items:center;gap:0.5rem;}
  .skill-group strong::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--tone,var(--brass));}
  .skill-group .tag{background:var(--tone-soft,var(--surface));border-color:transparent;color:var(--tone,var(--ink));font-weight:500;}
  .skill-group .tag:hover{border-color:var(--tone,var(--brass));background:#fff;}

  /* ---- logos : entreprise / école (parcours) et icônes des compétences ---- */
  .parcours-grid{--tone:var(--teal);--tone-soft:var(--teal-soft);}
  .entry.has-logo{display:grid;grid-template-columns:56px minmax(0,1fr);column-gap:1.1rem;align-items:start;}
  .entry.has-logo > :not(.entry-logo){grid-column:2;}
  .entry-logo{
    grid-column:1;grid-row:1 / span 3;position:relative;width:56px;height:56px;border-radius:14px;overflow:hidden;
    background:var(--tone-soft);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--tone) 22%,transparent);
    display:flex;align-items:center;justify-content:center;
    transition:transform .3s var(--ease),box-shadow .3s ease;
  }
  .entry-logo svg{width:26px;height:26px;fill:none;stroke:var(--tone);stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;}
  /* Vrai logo (logos/*.png) : il recouvre l'icône, sur fond blanc */
  .entry-logo img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;padding:7px;background:#fff;}
  .entry-logo:has(img){box-shadow:inset 0 0 0 1px var(--border),0 6px 14px -10px rgba(22,38,31,0.5);}
  .entry:hover .entry-logo{transform:translateY(-2px) rotate(-3deg);}

  /* Icônes des compétences : chaque logo dans une pastille blanche identique */
  .skill-group .tag{display:inline-flex;align-items:center;gap:0.5rem;padding:0.3rem 0.85rem 0.3rem 0.3rem;}
  .ti{
    flex:none;width:26px;height:26px;border-radius:50%;background:#fff;
    display:flex;align-items:center;justify-content:center;overflow:hidden;
    box-shadow:0 1px 3px rgba(22,38,31,0.12);transition:transform .25s var(--ease);
  }
  .ti img,.ti svg{width:16px;height:16px;display:block;}
  .ti.drawn svg{fill:none;stroke:var(--tone,var(--ink));stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
  .ti.flag svg{width:100%;height:100%;} /* le drapeau remplit toute la pastille (preserveAspectRatio slice) */
  .skill-group .tag:hover .ti{transform:rotate(-8deg) scale(1.08);}

  .contact-card .contact-icon{background:var(--tone-soft,var(--brass-soft));}
  .contact-card .contact-icon svg{stroke:var(--tone,var(--brass));}
  .contact-card:hover{border-color:var(--tone,var(--brass));}
  .contact-card:hover .contact-icon{background:var(--tone,var(--pine));}
  .contact-card:hover .value,.contact-card .action{color:var(--tone,var(--pine));}

  /* ---- pied de page sombre ---- */
  footer{background:var(--pine);color:var(--on-dark-muted);margin-top:4rem;}

  @media (prefers-reduced-motion:reduce){.typed::after{animation:none;}}

  /* =================================================================
     SERVICES, PORTFOLIO, FORMULAIRE
     ================================================================= */
  button.btn{font:inherit;font-size:0.9rem;font-weight:600;cursor:pointer;}
  .btn.small{padding:0.55rem 1rem;font-size:0.85rem;}
  .btn[disabled]{opacity:0.7;cursor:progress;transform:none;box-shadow:none;}
  .section-intro{max-width:60ch;margin:-0.8rem 0 2rem;color:var(--muted);}
  .to-edit{color:var(--brass);font-style:italic;}

  /* ---- bouton Services dans l'en-tête ---- */
  nav.links{margin-left:auto;}
  .nav-cta{
    display:inline-flex;align-items:center;gap:0.4rem;flex:none;
    padding:0.42rem 0.85rem;border:1px solid rgba(217,174,99,0.55);border-radius:999px;
    color:var(--brass-light);font-size:0.85rem;font-weight:600;text-decoration:none;
    transition:background .2s ease,color .2s ease,border-color .2s ease;
  }
  .nav-cta svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
  .nav-cta:hover,.nav-cta[aria-current="page"]{background:var(--brass-light);border-color:var(--brass-light);color:var(--pine);}
  .nav-actions{display:flex;align-items:center;gap:0.5rem;flex:none;}

  .hero-band .btn.ghost{background:transparent;color:#fff;border-color:rgba(255,255,255,0.35);}
  .hero-band .btn.ghost:hover{background:rgba(255,255,255,0.1);color:#fff;border-color:rgba(255,255,255,0.6);box-shadow:none;}

  /* ---- portfolio ---- */
  .projects{display:grid;gap:1.3rem;}
  .project{
    display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);
    border-radius:8px;overflow:hidden;
    transition:transform .3s var(--ease),box-shadow .3s ease,border-color .25s ease,opacity .5s ease;
  }
  .project:hover{transform:translateY(-4px);border-color:var(--tone);box-shadow:0 18px 32px -22px rgba(22,38,31,0.45);}
  .project-visual{
    position:relative;display:flex;align-items:center;justify-content:center;min-height:130px;
    background:var(--tone);
    background:
      radial-gradient(circle,rgba(255,255,255,0.22) 1px,transparent 1.5px) 0 0/16px 16px,
      linear-gradient(135deg,var(--tone),color-mix(in srgb,var(--tone) 55%,var(--pine)));
  }
  .project-visual svg{
    width:52px;height:52px;fill:none;stroke:#fff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;
    transition:transform .4s var(--ease);
  }
  .project:hover .project-visual svg{transform:scale(1.1) rotate(-4deg);}
  .project-body{padding:1.4rem 1.5rem 1.5rem;display:flex;flex-direction:column;flex:1;}
  .project-body > .project-kind{font-size:0.75rem;font-weight:600;letter-spacing:0.04em;text-transform:uppercase;color:var(--tone);margin:0 0 0.4rem;}
  .project h3{font-family:'Fraunces',serif;font-size:1.25rem;font-weight:500;margin:0 0 0.6rem;}
  .project-body > p{font-size:0.93rem;color:var(--muted);margin:0;}
  .project-points{margin:0.9rem 0 0;padding:0;list-style:none;display:grid;gap:0.45rem;}
  .project-points li{position:relative;padding-left:1.2rem;font-size:0.9rem;}
  .project-points li::before{content:"";position:absolute;left:0;top:0.55em;width:7px;height:7px;border-radius:2px;background:var(--tone);}
  .project-tags{display:flex;flex-wrap:wrap;gap:0.4rem;margin-top:auto;padding-top:1.1rem;}
  .project-tags span{font-size:0.78rem;font-weight:500;padding:0.25rem 0.65rem;border-radius:999px;background:var(--tone-soft);color:var(--tone);}
  .project-tags span.to-edit{color:var(--brass);background:var(--brass-soft);}
  .project-links{margin-top:1.1rem;}
  .project .btn.primary{background:var(--tone);border-color:var(--tone);}

  @media (min-width:720px){
    .projects{grid-template-columns:1fr 1fr;}
    .project.featured{grid-column:1 / -1;flex-direction:row;}
    .project.featured .project-visual{flex:0 0 36%;min-height:auto;}
    .project.featured .project-visual svg{width:72px;height:72px;}
    .project.featured .project-tags{margin-top:0;}
  }
  .anim .projects:not(.in) .project{opacity:0;transform:translateY(18px);}
  .anim .projects.in .project{transition-delay:calc(var(--i,0) * 110ms),0s,0s,calc(var(--i,0) * 110ms);}
  .anim .projects.in .project:hover{transition-delay:0s;}

  /* ---- formulaire de contact ---- */
  .contact-layout{display:grid;gap:2rem;}
  .contact-form{
    position:relative;display:grid;gap:1.1rem;background:var(--surface);
    border:1px solid var(--border);border-radius:8px;padding:1.6rem;
  }
  .hp{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden;}
  .form-row{display:grid;gap:1.1rem;}
  .field label{display:block;font-size:0.82rem;font-weight:600;margin-bottom:0.35rem;}
  .field-head{display:flex;justify-content:space-between;align-items:baseline;}
  .counter{font-size:0.75rem;color:var(--muted);font-variant-numeric:tabular-nums;}
  .field input,.field select,.field textarea{
    width:100%;font:inherit;font-size:0.95rem;color:var(--ink);background:var(--bg);
    border:1px solid var(--border);border-radius:5px;padding:0.7rem 0.85rem;
    transition:border-color .2s ease,box-shadow .2s ease,background .2s ease;
  }
  .field select{
    appearance:none;-webkit-appearance:none;padding-right:2.4rem;cursor:pointer;
    background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235B655F' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
    background-repeat:no-repeat;background-position:right 0.8rem center;background-size:16px;
  }
  .field textarea{min-height:150px;resize:vertical;line-height:1.5;}
  .field input:hover,.field select:hover,.field textarea:hover{border-color:#C9CCC3;}
  .field input:focus,.field select:focus,.field textarea:focus{
    outline:none;background:#fff;border-color:var(--teal);box-shadow:0 0 0 3px rgba(47,125,109,0.18);
  }
  .field.invalid input,.field.invalid select,.field.invalid textarea{border-color:#B4432F;}
  .field.invalid input:focus,.field.invalid select:focus,.field.invalid textarea:focus{box-shadow:0 0 0 3px rgba(180,67,47,0.15);}
  .field-error{display:none;margin:0.35rem 0 0;font-size:0.8rem;color:#A33A27;}
  .field.invalid .field-error{display:block;}
  .form-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:0.9rem;}
  .form-note{margin:0;font-size:0.8rem;color:var(--muted);}
  .form-status{display:none;margin:0;padding:0.85rem 1rem;border-radius:5px;font-size:0.9rem;}
  .form-status.ok{display:block;background:var(--teal-soft);color:#1D5A4D;}
  .form-status.err{display:block;background:#F7E4DF;color:#8E3322;}
  .form-status a{color:inherit;font-weight:600;}

  /* ---- formulaire : en-tête, sujets en cartes, icônes, états ---- */
  .contact-form{
    gap:1.25rem;padding:1.8rem;border-top:3px solid var(--teal);
    box-shadow:0 22px 44px -32px rgba(22,38,31,0.45);
  }
  .form-head{padding-bottom:1.1rem;border-bottom:1px solid var(--border);}
  .form-title{margin:0;font-family:'Fraunces',serif;font-size:1.3rem;font-weight:500;}
  .form-sub{margin:0.2rem 0 0;font-size:0.84rem;color:var(--muted);}

  .subject-field{border:0;margin:0;padding:0;min-width:0;}
  .subject-field legend{padding:0;font-size:0.82rem;font-weight:600;margin-bottom:0.45rem;}
  .subject-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0.6rem;}
  .subject-opt{
    position:relative;display:flex;align-items:center;gap:0.7rem;min-width:0;
    padding:0.65rem 0.8rem;border:1px solid var(--border);border-radius:7px;background:var(--bg);
    font-size:0.87rem;font-weight:500;line-height:1.3;cursor:pointer;
    transition:border-color .2s ease,background .2s ease,box-shadow .2s ease,transform .15s var(--ease);
  }
  .subject-opt input{position:absolute;opacity:0;width:1px;height:1px;margin:0;pointer-events:none;}
  .opt-icon{
    flex:none;width:32px;height:32px;border-radius:8px;background:var(--surface);border:1px solid var(--border);
    display:flex;align-items:center;justify-content:center;transition:background .2s ease,border-color .2s ease;
  }
  .opt-icon svg{width:17px;height:17px;fill:none;stroke:var(--teal);stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;transition:stroke .2s ease;}
  .subject-opt:hover{border-color:#C9CCC3;background:#fff;}
  .subject-opt:active{transform:scale(0.98);}
  .subject-opt:has(input:checked){border-color:var(--teal);background:var(--teal-soft);box-shadow:inset 0 0 0 1px var(--teal);}
  .subject-opt:has(input:checked) .opt-icon{background:var(--teal);border-color:var(--teal);}
  .subject-opt:has(input:checked) .opt-icon svg{stroke:#fff;}
  .subject-opt:has(input:focus-visible){outline:2px solid var(--brass);outline-offset:2px;}
  .subject-field.invalid .subject-opt{border-color:#D9A89C;}

  .input-wrap{position:relative;}
  .input-icon,.valid-mark{
    position:absolute;top:50%;width:17px;height:17px;pointer-events:none;
    fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;
  }
  .input-icon{left:0.85rem;transform:translateY(-50%);stroke:var(--muted);transition:stroke .2s ease;}
  .input-wrap input{padding-left:2.5rem;padding-right:2.4rem;}
  .input-wrap:focus-within .input-icon{stroke:var(--teal);}
  .field.invalid .input-icon{stroke:#B4432F;}
  .valid-mark{right:0.85rem;stroke:var(--teal);stroke-width:2.4;opacity:0;transform:translateY(-50%) scale(0.5);transition:opacity .2s ease,transform .3s var(--ease);}
  .field.valid .valid-mark{opacity:1;transform:translateY(-50%) scale(1);}
  .field.valid input,.field.valid textarea{border-color:color-mix(in srgb,var(--teal) 55%,var(--border));}
  .field input::placeholder,.field textarea::placeholder{color:#9CA39E;}

  .field textarea{overflow-y:auto;}
  .counter.warn{color:#A33A27;font-weight:600;}
  .field-hint{margin:0.4rem 0 0;font-size:0.76rem;color:var(--muted);}
  kbd{font:inherit;font-size:0.72rem;padding:0.05rem 0.35rem;border:1px solid var(--border);border-bottom-width:2px;border-radius:4px;background:var(--bg);}

  .form-foot{padding-top:0.3rem;}
  .form-note{display:inline-flex;align-items:center;gap:0.4rem;}
  .form-note svg{width:14px;height:14px;flex:none;fill:none;stroke:var(--teal);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
  #cf-submit{display:inline-flex;align-items:center;justify-content:center;gap:0.55rem;padding:0.8rem 1.4rem;}
  .btn-arrow{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:transform .25s var(--ease);}
  #cf-submit:hover .btn-arrow{transform:translateX(3px);}
  .spinner{display:none;width:16px;height:16px;border-radius:50%;border:2px solid rgba(255,255,255,0.35);border-top-color:#fff;animation:spin .75s linear infinite;}
  #cf-submit.sending .spinner{display:inline-block;}
  #cf-submit.sending .btn-arrow{display:none;}
  @keyframes spin{to{transform:rotate(360deg);}}

  @media (max-width:420px){
    .subject-grid{grid-template-columns:1fr;}
  }
  @media (prefers-reduced-motion:reduce){
    .spinner{animation-duration:2s;}
    .subject-opt,.entry-logo,.ti{transition:none;}
  }
  @keyframes pop-in{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:none;}}
  .anim .form-status.ok,.anim .form-status.err{animation:pop-in .35s var(--ease);}

  /* ---- colonne "Ou directement" ---- */
  .side-title{font-size:0.78rem;font-weight:600;letter-spacing:0.04em;text-transform:uppercase;color:var(--muted);margin:0 0 0.8rem;}
  .contact-row{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:0.8rem;}
  .contact-card{display:grid;grid-template-columns:42px minmax(0,1fr);column-gap:1rem;padding:1.1rem;}
  .contact-icon{grid-row:1 / span 4;margin:0;}
  .contact-card > :not(.contact-icon){grid-column:2;}
  .contact-card .desc{margin-top:0.3rem;font-size:0.84rem;}
  .contact-card .action{margin-top:0.7rem;padding-top:0.6rem;}
  .contact-side .contact-facts{margin-top:1rem;}

  @media (min-width:600px){
    .form-row{grid-template-columns:1fr 1fr;}
  }
  @media (min-width:1100px){
    .contact-layout{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:1.8rem;align-items:start;}
    .contact-row{grid-template-columns:1fr;}
    .contact-side .contact-facts{grid-template-columns:1fr;gap:0.8rem;}
  }
  @media (max-width:959px){
    nav.links{margin-left:0;}
  }
  @media (max-width:560px){
    .nav-inner{display:grid;grid-template-columns:1fr auto;align-items:center;row-gap:0.5rem;}
    .nav-actions{grid-column:2;grid-row:1;gap:0.4rem;}
    .nav-cta{padding:0.35rem 0.7rem;font-size:0.8rem;}
    nav.links{grid-column:1 / -1;grid-row:2;}
    .contact-form{padding:1.2rem;}
    .form-foot .btn{width:100%;}
    .project-body{padding:1.2rem;}
  }

/* =================================================================
   PLUS DE VIE : progression, haut de page, bandeau défilant,
   inclinaison 3D, apparitions, page portfolio
   ================================================================= */

/* ---- barre de progression de lecture (sous l'en-tête) ---- */
.read-progress{
  position:absolute;left:0;right:0;bottom:-1px;height:2px;pointer-events:none;
  background:linear-gradient(90deg,var(--teal),var(--brass-light));
  transform:scaleX(0);transform-origin:left;
}

/* ---- bouton haut de page avec anneau de progression ---- */
.to-top{
  position:fixed;right:1.25rem;bottom:1.25rem;z-index:40;width:48px;height:48px;border-radius:50%;
  background:var(--pine);box-shadow:0 10px 24px -10px rgba(22,38,31,0.6);
  display:flex;align-items:center;justify-content:center;
  opacity:0;transform:translateY(14px) scale(0.9);pointer-events:none;
  transition:opacity .3s ease,transform .3s var(--ease),background .2s ease;
}
.to-top.show{opacity:1;transform:none;pointer-events:auto;}
.to-top:hover{background:#223a2f;}
.to-top svg{width:48px;height:48px;fill:none;stroke-linecap:round;stroke-linejoin:round;}
.to-top .ring-bg{stroke:rgba(255,255,255,0.12);stroke-width:2.5;}
.to-top .ring{stroke:var(--brass-light);stroke-width:2.5;stroke-dasharray:100;stroke-dashoffset:100;transform:rotate(-90deg);transform-origin:center;}
.to-top .arrow{stroke:#fff;stroke-width:2.2;transition:transform .25s var(--ease);}
.to-top:hover .arrow{transform:translateY(-2px);}
.to-top:focus-visible{outline:2px solid var(--brass-light);outline-offset:3px;}

/* ---- bandeau défilant des technologies ---- */
.ticker{background:#1B3027;color:var(--on-dark-muted);border-top:1px solid rgba(255,255,255,0.06);}
.ticker + section{border-top:0;}
.ticker-mask{
  overflow:hidden;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);
          mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);
}
.ticker-track{display:flex;width:max-content;}
.anim .ticker-track{animation:ticker 80s linear infinite;}
.ticker:hover .ticker-track{animation-play-state:paused;}
.ticker ul{display:flex;list-style:none;margin:0;padding:0.9rem 0;}
.ticker li{display:flex;align-items:center;gap:2.2rem;padding-right:2.2rem;font-size:0.9rem;font-weight:500;white-space:nowrap;transition:color .2s;}
.ticker li:hover{color:#fff;}
.ticker li::after{content:"";width:6px;height:6px;background:var(--brass-light);transform:rotate(45deg);}
@keyframes ticker{to{transform:translateX(-50%);}}

/* ---- apparitions génériques ---- */
.anim .rv{opacity:0;transform:translateY(16px);transition:opacity .7s ease,transform .7s var(--ease);}
.anim .rv.in{opacity:1;transform:none;}
.anim section.wrap:not(.hero) > h2.rv::after{transform:scaleX(0);transform-origin:left;transition:transform .7s var(--ease) .35s;}
.anim section.wrap:not(.hero) > h2.rv.in::after{transform:scaleX(1);}

/* ---- inclinaison 3D + reflet ---- */
.hero{perspective:1400px;}
.projects{perspective:1100px;}
.hero-card{position:relative;transition:rotate .25s ease-out;}
.project{
  position:relative;
  transition:transform .3s var(--ease),box-shadow .3s ease,border-color .25s ease,opacity .5s ease,rotate .25s ease-out;
}
.anim .projects.in .project{transition-delay:calc(var(--i,0) * 110ms),0s,0s,calc(var(--i,0) * 110ms),0s;}
.tilt::after{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:2;
  background:radial-gradient(circle at var(--gx,50%) var(--gy,50%),rgba(255,255,255,0.28),transparent 55%);
  opacity:0;transition:opacity .3s ease;
}
.tilt:hover::after{opacity:1;}
.hero-band .tilt::after{background:radial-gradient(circle at var(--gx,50%) var(--gy,50%),rgba(255,255,255,0.12),transparent 55%);}

/* ---- formulaire : champ "Autre", coche de succès ---- */
.field-other.opening{animation:pop-in .35s var(--ease);}
.form-status.ok{display:flex;align-items:flex-start;gap:0.7rem;}
.form-status .check{width:22px;height:22px;flex:none;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
.anim .form-status .check circle{stroke-dasharray:63;stroke-dashoffset:63;animation:dash .6s var(--ease) forwards;}
.anim .form-status .check path{stroke-dasharray:14;stroke-dashoffset:14;animation:dash .35s var(--ease) .45s forwards;}
@keyframes dash{to{stroke-dashoffset:0;}}

/* ---- aperçu du portfolio sur l'accueil ---- */
a.project{text-decoration:none;color:inherit;}
.projects.teaser{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));}
.project.mini .project-visual{min-height:104px;}
.project.mini .project-visual svg{width:42px;height:42px;}
.project.mini h3{font-size:1.12rem;}
.more-link{display:inline-flex;align-items:center;gap:0.35rem;margin-top:auto;padding-top:1rem;font-size:0.86rem;font-weight:600;color:var(--tone);}
.more-link svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:transform .25s var(--ease);}
.project:hover .more-link svg{transform:translateX(4px);}
.teaser-foot{margin-top:1.8rem;}
/* ---- page portfolio ---- */
section.page-hero{padding-top:4.5rem;padding-bottom:4rem;}
.page-hero h1{font-size:clamp(2.2rem,5vw,3.4rem);line-height:1.1;max-width:none;}
.page-hero .lead{margin-top:1.1rem;max-width:58ch;font-size:1.05rem;color:#D3DCD6;}
.breadcrumb{display:inline-flex;align-items:center;gap:0.4rem;margin-bottom:1.2rem;font-size:0.85rem;color:var(--on-dark-muted);text-decoration:none;}
.breadcrumb svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:transform .25s var(--ease);}
.breadcrumb:hover{color:#fff;}
.breadcrumb:hover svg{transform:translateX(-3px);}
.stats{display:flex;flex-wrap:wrap;gap:1rem 2.8rem;margin-top:2.2rem;}
.stat strong{display:block;font-family:'Fraunces',serif;font-size:2.2rem;font-weight:500;line-height:1;color:var(--brass-light);font-variant-numeric:tabular-nums;}
.stat span{font-size:0.85rem;color:var(--on-dark-muted);}
.page-hero > *{max-width:760px;}
section.page-hero{display:block;}

.filter-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1.6rem;}
.filter-bar .hint{margin:0;font-size:0.85rem;color:var(--muted);}
.project[hidden]{display:none !important;}
.project.leaving{opacity:0 !important;transform:scale(0.96) !important;transition:opacity .2s ease,transform .2s ease !important;}
.project.entering{animation:card-in .45s var(--ease);}
@keyframes card-in{from{opacity:0;transform:translateY(12px) scale(0.98);}to{opacity:1;transform:none;}}
.projects-empty{padding:2rem;text-align:center;color:var(--muted);border:1px dashed var(--border);border-radius:8px;}

.cta-band{
  position:relative;overflow:hidden;margin-top:3rem;padding:2.2rem;border-radius:10px;color:var(--on-dark);
  background:
    radial-gradient(circle at 90% 10%,rgba(47,125,109,0.55),transparent 55%),
    radial-gradient(circle at 5% 100%,rgba(179,132,60,0.3),transparent 50%),
    var(--pine);
  display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1.4rem;
}
.cta-band h2{font-size:1.5rem;margin:0 0 0.4rem;color:#fff;}
.cta-band p{margin:0;color:var(--on-dark-muted);max-width:48ch;}
.cta-band .btn.primary{background:var(--brass-light);border-color:var(--brass-light);color:var(--pine);}
.cta-band .btn.primary:hover{background:#E6BE77;border-color:#E6BE77;}
.cta-band .btn.ghost{background:transparent;color:#fff;border-color:rgba(255,255,255,0.35);}
.cta-band .btn.ghost:hover{background:rgba(255,255,255,0.1);}
.cta-band .actions{display:flex;flex-wrap:wrap;gap:0.8rem;}

nav.links a[aria-current="page"]{color:#fff;}
nav.links a[aria-current="page"]::after{transform:scaleX(1);}

@media (max-width:560px){
  .to-top{right:0.9rem;bottom:0.9rem;width:44px;height:44px;}
  .to-top svg{width:44px;height:44px;}
  section.page-hero{padding-top:2.6rem;padding-bottom:2.8rem;}
  .stats{gap:1rem 2rem;}
  .stat strong{font-size:1.8rem;}
  .cta-band{padding:1.5rem;}
  .cta-band .actions,.cta-band .btn{width:100%;text-align:center;}
  .filter-bar .chips{margin:0 -1.25rem;}
}
@media (prefers-reduced-motion:reduce){
  .to-top,.read-progress,.project,.hero-card{transition:none;}
}

/* =================================================================
   PAGE "EN CONSTRUCTION" (portfolio.html, temporaire)
   ================================================================= */
.construction-band{min-height:calc(100vh - 62px);min-height:calc(100svh - 62px);display:flex;align-items:center;}
.construction-band .construction{width:100%;}
.construction h1{max-width:none;}
.construction .lead{margin-top:1.1rem;max-width:52ch;font-size:1.05rem;color:#D3DCD6;}
.anim .construction .hero-text > :nth-child(6){animation-delay:.7s;}
.anim .construction .hero-text > :nth-child(7){animation-delay:.8s;}

/* bande de chantier qui défile */
.build-bar{
  margin-top:2rem;max-width:420px;height:12px;border-radius:999px;overflow:hidden;
  background:rgba(255,255,255,0.08);box-shadow:inset 0 0 0 1px rgba(255,255,255,0.1);
}
.build-stripes{
  display:block;height:100%;width:100%;
  background:repeating-linear-gradient(-45deg,var(--brass-light) 0 12px,var(--pine) 12px 24px);
  background-size:34px 100%;opacity:0.9;
}
.anim .build-stripes{animation:stripes 1.2s linear infinite;}
@keyframes stripes{to{background-position:34px 0;}}

.build-note{display:flex;align-items:center;gap:0.5rem;margin:0.9rem 0 0;font-size:0.88rem;color:var(--on-dark-muted);}
.build-note svg{width:17px;height:17px;flex:none;fill:none;stroke:var(--brass-light);stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;}
.construction .cta-row{margin-top:2.2rem;}

/* engrenages */
.build-art{display:flex;justify-content:center;}
.build-art svg{width:100%;max-width:320px;height:auto;overflow:visible;filter:drop-shadow(0 18px 30px rgba(0,0,0,0.35));}
.gear-teeth{fill:none;stroke-width:14;}
.gear-small .gear-teeth{stroke-width:11;}
.gear-big .gear-teeth{stroke-dasharray:12.04 12.04;}   /* 2π×46 / 24 : 12 dents */
.gear-small .gear-teeth{stroke-dasharray:10.21 10.21;} /* 2π×26 / 16 : 8 dents */
.gear-big .gear-teeth{stroke:var(--brass-light);}
.gear-big .gear-body{fill:var(--brass-light);}
.gear-small .gear-teeth{stroke:#7FC4B4;}
.gear-small .gear-body{fill:#7FC4B4;}
.gear-hole{fill:var(--pine);}
.anim .gear-big{animation:gear-spin 12s linear infinite;}
.anim .gear-small{animation:gear-spin 8s linear infinite reverse;}
@keyframes gear-spin{to{transform:rotate(360deg);}}
.anim .build-art{opacity:0;animation:rise .9s var(--ease) .5s forwards;}

@media (max-width:959px){
  section.hero.construction{display:flex;flex-direction:column;}
  .build-art{order:-1;justify-content:flex-start;margin-bottom:1.5rem;}
  .build-art svg{max-width:150px;}
}
@media (max-width:560px){
  .construction .cta-row{flex-direction:column;}
  .construction .cta-row .btn{width:100%;text-align:center;}
  .build-art{margin-bottom:0.5rem;}
  .build-art svg{max-width:120px;}
}
@media (prefers-reduced-motion:reduce){
  .build-stripes,.gear{animation:none;}
}
