/* ===== ANIMATIONS D'ATTAQUE PRÉCISES (lot D, 23/10/2026, retours de Valentin) : rpg/rpg-animations.js =====
   Tout vit dans la couche d'effets du plateau (#rpg-visuel, aria-hidden), jamais cliquable. Seuls transform et opacity sont animés (compositeur).
   Chaque sorte a sa couleur ET sa forme (dessins SVG du module) : flèche (tir), orbe (ki), étoile à quatre branches (magie), bombe (feu), onde (glas),
   étoile de choc (contact), croix de soin et anneau pointillé (soin), écu et hexagone (protection), cercle barré et « Raté » (raté).
   24/10/2026 : ripostes (copie qui bondit, mot « Riposte »), riposte mortelle (étoile rouge à 6 branches), grenade (une bombe, l'explosion, éclats du souffle,
   triangle « ! » sur un allié touché), esquive acrobatique (saut arrière, « Esquive »). */
#rpg-visuel .ra-fx { position: absolute; left: 0; top: 0; box-sizing: border-box; pointer-events: none; will-change: transform, opacity; }
#rpg-visuel .ra-fx svg { display: block; overflow: visible; }

/* La copie du médaillon qui bondit au contact (la bordure et l'image sont recopiées de l'original par le module). */
#rpg-visuel .ra-copie { border-radius: 50%; border: 4px solid #6fbcff; background: #101322; z-index: 3;
  box-shadow: 0 0 0 3px rgba(0,0,0,.7), 0 14px 24px -6px rgba(0,0,0,.9); }
#rpg-visuel .ra-copie-img { position: absolute; inset: 0; border-radius: 50%; background: center / cover no-repeat; }

/* Projectiles : un halo sombre puis coloré autour de la forme, pour la voir sur tous les décors. */
#rpg-visuel .ra-projectile { filter: drop-shadow(0 0 2px #000) drop-shadow(0 0 8px var(--ra-c, #fff)); }
#rpg-visuel .ra-projectile[data-sorte="tir"] { --ra-c: #ffe08a; }
#rpg-visuel .ra-projectile[data-sorte="ki"] { --ra-c: #b98aff; }
#rpg-visuel .ra-projectile[data-sorte="magie"] { --ra-c: #6fc3ff; }
#rpg-visuel .ra-projectile[data-sorte="feu"] { --ra-c: #ff8a3c; }
#rpg-visuel .ra-projectile[data-sorte="son"] { --ra-c: #f2df7a; }

/* Le trait doux d'un soin (vert, pointillés longs) ou d'une protection (bleu clair, pointillés courts), bordé de noir. */
#rpg-visuel .ra-trait { height: 8px; border-radius: 4px; transform-origin: 0 50%; --ra-c: #5be38a;
  background: repeating-linear-gradient(90deg, var(--ra-c) 0 14px, transparent 14px 22px); filter: drop-shadow(0 0 1px #000) drop-shadow(0 0 1px #000); }
#rpg-visuel .ra-trait[data-genre="protection"] { --ra-c: #8fd8ff; background: repeating-linear-gradient(90deg, var(--ra-c) 0 6px, transparent 6px 11px); }
#rpg-visuel .ra-signe, #rpg-visuel .ra-halo { filter: drop-shadow(0 0 2px #000); }

/* L'éclat de la cible touchée : une lueur ronde sur son médaillon (opacité seule). */
#rpg-visuel .ra-eclat { border-radius: 50%; --ra-c: 255,190,80;
  background: radial-gradient(circle, rgba(255,255,255,.95) 0 22%, rgba(var(--ra-c),.6) 48%, rgba(var(--ra-c),0) 70%); }
#rpg-visuel .ra-eclat[data-sorte="ki"] { --ra-c: 185,138,255; }
#rpg-visuel .ra-eclat[data-sorte="magie"] { --ra-c: 111,195,255; }
#rpg-visuel .ra-eclat[data-sorte="feu"], #rpg-visuel .ra-eclat[data-sorte="souffle"] { --ra-c: 255,138,60; }
#rpg-visuel .ra-eclat[data-sorte="mortelle"] { --ra-c: 255,79,79; }
#rpg-visuel .ra-eclat[data-sorte="allie"] { --ra-c: 255,194,61; }
#rpg-visuel .ra-choc { z-index: 4; filter: drop-shadow(0 0 2px #000); }
/* L'explosion de la grenade au point de chute, sous les étoiles de choc. */
#rpg-visuel .ra-explosion { z-index: 3; filter: drop-shadow(0 0 3px #000) drop-shadow(0 0 14px rgba(255,138,60,.8)); }
/* La copie d'un médaillon qui riposte : un liseré clair de plus (rouge pour la riposte mortelle), pour la distinguer d'une attaque à son tour. */
#rpg-visuel .ra-copie[data-riposte] { box-shadow: 0 0 0 3px rgba(0,0,0,.75), 0 0 0 6px #ffcf4a, 0 14px 24px -6px rgba(0,0,0,.9); }
#rpg-visuel .ra-copie[data-riposte="mortelle"] { box-shadow: 0 0 0 3px rgba(0,0,0,.75), 0 0 0 6px #ff4f4f, 0 14px 24px -6px rgba(0,0,0,.9); }
/* Les mots « Riposte », « Riposte mortelle », « Esquive » (fond sombre et bordure de vue-pro.css : contraste fort sur tous les décors). */
#rpg-visuel .fx-mot-riposte { color: #ffcf4a; z-index: 5; }   /* au-dessus de la copie qui bondit : le mot reste lisible pendant le trajet */
#rpg-visuel .fx-mot-riposte.fx-mot-mortelle { color: #ff7d7d; }
#rpg-visuel .fx-mot-esquive { color: #8fe9ff; }

/* « Raté » et « Critique ! » immobiles quand le système réduit les animations (fondu seul). */
body.images-actives.vue-pro.rpg-visuel #rpg-visuel .fx-mot[data-calme] { animation: rv-fondu 1.1s linear forwards; }

/* Case « Effets visuels » décochée : rien ne s'affiche. Le réglage d'animations du SYSTÈME n'est PAS suivi ici (décision de Med du 18/10/2026 : la case fait foi) :
   une règle @media (prefers-reduced-motion) masquait les gestes mobiles alors que le module les joue (24/10/2026 : retirée). Le module seul en décide (SUIT_SYSTEME). */
body.fx-off #rpg-visuel .ra-fx { display: none !important; }
