/* --- Tara vectorielle : chaque calque tourne autour de son articulation --- */
.tv { width: 100%; max-width: 380px; overflow: visible; }
.tv-tout { transform-origin: 201px 330px; animation: tv-respire 2.6s ease-in-out infinite; }
@keyframes tv-respire { 0%,100% { transform: none; } 50% { transform: translateY(-4px) scale(.99,1.01); } }
.tv-brasG { transform-origin: 90px 190px; }
.tv-main { transform-origin: 62px 140px; }
.tv-brasD { transform-origin: 312px 180px; }
.tv-jambeG { transform-origin: 176px 268px; }
.tv-jambeD { transform-origin: 228px 268px; }
#tv-aiguille { transform-origin: 201px 158px; transition: transform .9s cubic-bezier(.34,1.56,.64,1); }
#tv-bande { transition: opacity .4s; }
.tv-pupille { transition: transform .25s ease-out; }
.tv-paupiere { transition: transform .08s ease-in; }
.tv.clignement .tv-paupiere { transform: translateY(58px); }
.tv-bouche, .tv-sourcils { opacity: 0; transition: opacity .15s; }
.tv .tv-sourire, .tv.inquiet .tv-sourcils, .tv.inquiet .tv-inquiet, .tv.surprise .tv-o { opacity: 1; }
.tv.inquiet .tv-sourire, .tv.surprise .tv-sourire { opacity: 0; }
.tv.coucou .tv-brasG { animation: tv-coucou .45s ease-in-out 4 alternate; }
.tv.coucou .tv-main { animation: tv-main .225s ease-in-out 8 alternate; }
@keyframes tv-coucou { from { transform: rotate(-8deg); } to { transform: rotate(18deg); } }
@keyframes tv-main { from { transform: rotate(-14deg); } to { transform: rotate(14deg); } }
.tv.marche .tv-tout { animation: tv-pas .3s ease-in-out 8 alternate; }
.tv.marche .tv-jambeG { animation: tv-jambe .6s ease-in-out 4; }
.tv.marche .tv-jambeD { animation: tv-jambe .6s ease-in-out -.3s 4; }
.tv.marche .tv-brasD { animation: tv-balance .6s ease-in-out 4; }
@keyframes tv-pas { from { transform: translateY(0) rotate(-2deg); } to { transform: translateY(-7px) rotate(2deg); } }
@keyframes tv-jambe { 0%,100% { transform: rotate(-22deg); } 50% { transform: rotate(18deg); } }
@keyframes tv-balance { 0%,100% { transform: rotate(10deg); } 50% { transform: rotate(-10deg); } }
.tv.saute .tv-tout { animation: tv-saute .75s cubic-bezier(.3,1.6,.5,1) 1; }
@keyframes tv-saute { 0% { transform: scale(1.08,.9); } 35% { transform: translateY(-34px) scale(.94,1.07) rotate(4deg); } 70% { transform: translateY(0) scale(1.05,.95); } 100% { transform: none; } }
.tv.saute .tv-brasG { animation: tv-coucou .2s ease-in-out 3 alternate; }
.tv.inquiet .tv-tout { animation: tv-tremble .5s linear 1; }
@keyframes tv-tremble { 0%,100% { transform: none; } 20% { transform: translateX(-6px) rotate(-3deg); } 40% { transform: translateX(6px) rotate(3deg); } 60% { transform: translateX(-4px) rotate(-2deg); } 80% { transform: translateX(2px); } }
.tv.surprise .tv-tout { animation: tv-surprise .5s cubic-bezier(.3,1.8,.5,1) 1; }
@keyframes tv-surprise { 0% { transform: none; } 40% { transform: translateY(-14px) scale(1.04,.97); } 100% { transform: none; } }


/* Poses selon la portion (RBH, 14 oct.) : permanentes (classe etat-<niveau>), les réactions passagères se jouent par-dessus */
.tv-brasMenton, .tv-brasCroises { display: none; }
.tv-neutre, .tv-sourcilLeve { opacity: 0; transition: opacity .15s; }
.tv.etat-un_peu_genereuse .tv-brasG, .tv.etat-un_peu_genereuse .tv-brasD { display: none; }
.tv.etat-un_peu_genereuse .tv-brasMenton { display: inline; }
.tv.etat-genereuse .tv-brasG, .tv.etat-genereuse .tv-brasD, .tv.etat-tres_genereuse .tv-brasG, .tv.etat-tres_genereuse .tv-brasD { display: none; }
.tv.etat-genereuse .tv-brasCroises, .tv.etat-tres_genereuse .tv-brasCroises { display: inline; }
.tv.etat-un_peu_genereuse .tv-sourire, .tv.etat-genereuse .tv-sourire, .tv.etat-tres_genereuse .tv-sourire { opacity: 0; }
.tv.etat-un_peu_genereuse .tv-neutre, .tv.etat-genereuse .tv-neutre { opacity: 1; }
.tv.etat-un_peu_genereuse .tv-sourcilLeve { opacity: 1; }
.tv.etat-un_peu_genereuse .tv-pupille { transform: translate(-5px, -9px); }
.tv.etat-genereuse .tv-sourcils, .tv.etat-tres_genereuse .tv-sourcils, .tv.etat-tres_genereuse .tv-inquiet { opacity: 1; }
.tv.etat-tres_genereuse:not(.inquiet):not(.surprise):not(.saute) .tv-tout { animation: tv-non 3.2s ease-in-out infinite; }
@keyframes tv-non { 0%, 55%, 100% { transform: none; } 65% { transform: rotate(-3deg); } 75% { transform: rotate(3deg); } 85% { transform: rotate(-2deg); } }
.tv.surprise .tv-neutre, .tv.surprise .tv-inquiet { opacity: 0; }
