/* ═══════════════════════════════════════════════════════════════
   LE STUDIO — feuille différée (15/10/2026)
   Le mouvement des quatre visuels de l'équipe, au survol seulement :
   le code se tape, la palette s'ouvre, le rang monte, la courbe se
   trace. Rien ne bouge tant qu'on ne survole pas.
   ═══════════════════════════════════════════════════════════════ */
@keyframes ab-clignote { 50% { opacity: 0; } }
@keyframes ab-trace { from { stroke-dashoffset: 260; } }
@keyframes ab-monte { from { transform: translateY(78px); } }
.ab-membre:hover .ab-v-caret { animation: ab-clignote 0.9s steps(1) infinite; }
.ab-membre:hover .ab-v-code { animation: ab-tape 1.2s steps(28) both; }
@keyframes ab-tape { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0 0 0); } }
.ab-v-palette i { transition: transform 450ms var(--ressort); }
.ab-membre:hover .ab-v-palette i:nth-child(1) { transform: translateY(-6px) rotate(-6deg); }
.ab-membre:hover .ab-v-palette i:nth-child(2) { transform: translateY(4px) rotate(4deg); }
.ab-membre:hover .ab-v-palette i:nth-child(3) { transform: translateY(-3px) rotate(-3deg); }
.ab-membre:hover .ab-v-palette i:nth-child(4) { transform: translateY(5px) rotate(5deg); }
.ab-v-rang .est-nous { transition: transform 700ms var(--ressort); }
.ab-membre:hover .ab-v-rang .est-nous { animation: ab-monte 900ms var(--ressort) both; }
.ab-v-courbe path { stroke-dasharray: 260; }
.ab-membre:hover .ab-v-courbe path { animation: ab-trace 1.1s cubic-bezier(0.65, 0, 0.35, 1) both; }
@media (prefers-reduced-motion: reduce) {
  .ab-membre * { animation: none !important; transition: none !important; }
}
