/* Images des mots et créatures, nouvelle main (carte A1) : les mouvements. js/pic-kit.js, js/pics-*.js, js/creature2.js.
   Règle : un mouvement montre ce qu'est la chose ou ce que fait le verbe, en trois temps (préparation, action, retour).
   Les parties s'appellent .k-… (pas .p-…, qu'animent encore les anciens dessins de style.css). Au repos (.il) : clignements et petites respirations. Vivante (.il.alive, après une bonne réponse) : le mouvement qui dit le mot.
   Rien que transform et opacity. */

/* ---------- Images (svg.il.pk) ---------- */
.il.pk { overflow: visible; }
.pk.alive { animation: none; }
.il.pk g { transform-box: view-box; }
.il.pk .p-eyes:not(.c-e) { transform-box: fill-box; transform-origin: center; animation: ilBlink 4.2s infinite; }

/* Le chat : la queue ondule ; vivant, il penche la tête, une oreille frémit, la queue fouette, le grelot tinte */
.il-chat .k-tail { animation: pkSway 3.2s ease-in-out infinite; }
.il-chat.alive .k-tail { animation: pkSwish .9s ease-in-out infinite; }
.il-chat.alive .k-head { animation: pkTilt 1.8s ease-in-out infinite; }
.il-chat.alive .k-earR { animation: pkTwitch 1.8s ease-in-out infinite; }
.il-chat.alive .k-bell { animation: pkRing .45s ease-in-out infinite; }
/* La pomme : la feuille bouge ; vivante, elle rebondit (écrasée à l'atterrissage) */
.il-pomme .k-leaf { animation: pkSway 3s ease-in-out infinite; }
.il-pomme.alive { animation: pkBounce .9s cubic-bezier(.3, 0, .5, 1) infinite; transform-origin: 50% 94%; }
.il-pomme.alive .k-leaf { animation: pkSway .45s ease-in-out infinite; }
/* Le vélo : vivant, il roule (les roues tournent, il avance et recule), la sonnette tinte, les fleurs dansent */
.il-velo.alive { animation: pkRide 1.6s ease-in-out infinite; }
.il-velo.alive .k-wheel { animation: pkSpin .7s linear infinite; }
.il-velo.alive .k-bell { animation: pkRing .3s ease-in-out infinite; }
.il-velo .k-flower { animation: pkSway 2.6s ease-in-out infinite; }
.il-velo.alive .k-flower { animation-duration: .5s; }
/* Le violon : vivant, l'archet frotte les cordes, le violon se balance, les notes montent */
.il-violon .k-notes { opacity: 0; }
.il-violon.alive { animation: pkSway 1.6s ease-in-out infinite; transform-origin: 50% 90%; }
.il-violon.alive .k-bow { animation: pkBow .8s ease-in-out infinite alternate; }
.il-violon.alive .k-notes { animation: pkNotes 1.6s ease-out infinite; }

/* Étages 2-3 */
.il-lama .k-spit, .il-mur:not(.alive) .k-mouse, .il-lime:not(.alive) .k-drop, .il-farine:not(.alive) .k-puff, .il-piano:not(.alive) .k-notes,
.il-loup:not(.alive) .k-howl, .il-loup:not(.alive) .k-ahou, .il-loup.alive .k-calm, .il-moto:not(.alive) .k-smoke, .il-rame:not(.alive) .k-splash { opacity: 0; }
.il-lama.alive .k-head { animation: pkChew 1.6s ease-in-out infinite; }
.il-lama.alive .k-spit { animation: pkSpit 1.6s ease-out infinite; }
.il-mur .k-flower { animation: pkSway 3s ease-in-out infinite; }
.il-mur.alive .k-mouse { animation: pkPeek 2s ease-in-out infinite; }
.il-os.alive .k-bone { animation: pkToss 1.2s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-rat .k-tail { animation: pkSway 3s ease-in-out infinite; }
.il-rat.alive .k-nose { animation: pkSniff .3s ease-in-out infinite alternate; }
.il-rat.alive .k-head, .il-rat.alive .k-cheese { animation: pkNibble .4s ease-in-out infinite alternate; }
.il-fee .k-hover { animation: pkBob 2.4s ease-in-out infinite; }
.il-fee .k-wings { animation: pkFlutter 1.2s ease-in-out infinite; }
.il-fee.alive .k-wings { animation-duration: .18s; }
.il-fee .k-dust, .il-lune .k-twinkle, .il-flamme .k-sparks { animation: pkTwinkle 1.6s ease-in-out infinite; }
.il-fee.alive .k-armR { animation: pkWand .8s ease-in-out infinite; }
.il-lit .k-quilt { animation: pkBreathe 3s ease-in-out infinite; }
.il-lit .k-zzz, .il-riz .k-steam, .il-soupe .k-steam { animation: pkSteam 2.6s ease-in-out infinite; }
.il-lit.alive .k-quilt { animation-duration: 1.2s; }
.il-lit.alive .k-zzz { animation-duration: 1.2s; }
.il-mamie.alive .k-knit { animation: pkKnit .35s ease-in-out infinite alternate; }
.il-mamie.alive .k-yarn { animation: pkRoll 1.4s ease-in-out infinite; }
.il-sofa.alive .k-cushion { animation: pkPlop 1s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-fil .k-thread { animation: pkSway 2.8s ease-in-out infinite; }
.il-fil.alive .k-spool { animation: pkWobble .5s ease-in-out infinite; }
.il-fil.alive .k-thread { animation-duration: .5s; }
.il-flacon .k-bubbles { animation: pkBubbles 2s ease-in infinite; }
.il-flacon.alive .k-liquid { animation: pkSlosh .9s ease-in-out infinite; }
.il-flacon.alive .k-tag { animation: pkSway .6s ease-in-out infinite; }
.il-momie .k-loose { animation: pkSway 3s ease-in-out infinite; }
.il-momie.alive .k-shuffle { animation: pkShuffle 1.4s ease-in-out infinite; }
.il-momie.alive .k-armL, .il-momie.alive .k-armR { animation: pkTilt .7s ease-in-out infinite; }
.il-armure .k-plume { animation: pkSway 3s ease-in-out infinite; }
.il-armure.alive .k-visor { animation: pkVisor 2.2s ease-in-out infinite; }
.il-mule.alive .k-kick { animation: pkKick 1.4s ease-in-out infinite; }
.il-mule.alive .k-legB, .il-mule.alive .k-legB2 { animation: pkKickLeg 1.4s ease-in-out infinite; }
.il-mule.alive .k-head { animation: pkTilt 1.4s ease-in-out infinite; }
.il-rame.alive .k-row { animation: pkRow 1.4s ease-in-out infinite; }
.il-rame.alive .k-splash { animation: pkSplash 1.4s ease-out infinite; }
.il-lime.alive .k-slice { animation: pkSpin 2s linear infinite; }
.il-lime.alive .k-drop { animation: pkDrip 1s ease-in infinite; }
.il-lasso .k-loop { animation: pkTwirl 2.4s ease-in-out infinite; }
.il-lasso.alive .k-loop { animation-duration: .6s; }
.il-salami.alive .k-hop { animation: pkFlip 1.2s ease-in-out infinite; }
.il-sumo.alive { animation: pkStomp 1.6s ease-in-out infinite; transform-origin: 50% 94%; }
.il-flamme .k-flame { animation: pkFlicker 1s ease-in-out infinite; }
.il-flamme.alive .k-flame { animation-duration: .35s; }
.il-flamme.alive .k-face { animation: pkBob .7s ease-in-out infinite; }
.il-ruche .k-bee { animation: pkBuzz 2.4s ease-in-out infinite; }
.il-ruche .k-bee2 { animation: pkBuzz 2s ease-in-out infinite reverse; }
.il-ruche.alive .k-bee, .il-ruche.alive .k-bee2 { animation-duration: .7s; }
.il-roche.alive .k-bug { animation: pkStroll 3s ease-in-out infinite; }
/* Étage 4, première moitié */
.il-ananas .k-leaves { animation: pkSway 3s ease-in-out infinite; }
.il-ananas.alive .k-waddle { animation: pkWaddle .8s ease-in-out infinite; }
.il-ananas.alive .k-leaves { animation-duration: .4s; }
.il-lune .k-rock { animation: pkSway 5s ease-in-out infinite; }
.il-lune .k-cloud { animation: pkDrift 6s ease-in-out infinite; }
.il-lune.alive .k-rock { animation-duration: 1.6s; }
.il-moto.alive .k-wheel { animation: pkSpin .4s linear infinite; }
.il-moto.alive .k-rev { animation: pkRev 1.6s ease-in-out infinite; }
.il-moto.alive .k-smoke { animation: pkPuffOut 1.6s ease-out infinite; }
.il-loup.alive .k-head { animation: pkHowl 2.4s ease-in-out infinite; }
.il-loup.alive .k-ahou { animation: pkNotes 2.4s ease-out infinite; }
.il-tortue.alive .k-head { animation: pkPoke 2s ease-in-out infinite; }
.il-tortue.alive .k-walk { animation: pkCrawl 2s ease-in-out infinite; }
.il-nid.alive .k-egg { animation: pkWobble .5s ease-in-out infinite; }
.il-nid.alive .k-egg2 { animation: pkWobble .5s ease-in-out -.2s infinite; }
.il-nid.alive .k-egg3 { animation: pkHopSmall .8s ease-in-out infinite; }
.il-souris.alive .k-hop { animation: pkBounce .7s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-souris.alive .k-earL { animation: pkTwitch 1s ease-in-out infinite; }
.il-souris.alive .k-earR { animation: pkTwitch 1s ease-in-out -.4s infinite; }
.il-fourmi .k-legA { animation: pkStep 1.2s ease-in-out infinite alternate; }
.il-fourmi .k-legB { animation: pkStep 1.2s ease-in-out infinite alternate-reverse; }
.il-fourmi.alive .k-legA, .il-fourmi.alive .k-legB { animation-duration: .2s; }
.il-fourmi .k-ant { animation: pkSway 2s ease-in-out infinite; }
.il-fourmi.alive .k-leaf { animation: pkBob .4s ease-in-out infinite; }
.il-mouche .k-wings { animation: pkFlutter .5s ease-in-out infinite; }
.il-mouche.alive .k-wings { animation-duration: .08s; }
.il-mouche.alive .k-buzz { animation: pkBuzz 1.2s ease-in-out infinite; }
.il-mouche .k-hands { animation: pkRub 2.4s ease-in-out infinite; }
.il-tomate.alive .k-bounce { animation: pkBounce .8s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-tulipe .k-sway { animation: pkSway 4s ease-in-out infinite; }
.il-tulipe.alive .k-sway { animation-duration: 1.2s; }
.il-tulipe.alive .k-petL { animation: pkOpenL 2.4s ease-in-out infinite; }
.il-tulipe.alive .k-petR { animation: pkOpenR 2.4s ease-in-out infinite; }
.il-pirate .k-parrot { animation: pkBob 2.6s ease-in-out infinite; }
.il-pirate.alive .k-pwing { animation: pkFlutter .2s ease-in-out infinite; }
.il-pirate.alive .k-armL { animation: pkWand .9s ease-in-out infinite; }
.il-poule.alive .k-head { animation: pkPeck .9s ease-in-out infinite; }
.il-poule.alive .k-tail { animation: pkSway .45s ease-in-out infinite; }
.il-loupe.alive .k-scan { animation: pkScan 3s ease-in-out infinite; }
.il-loupe.alive .k-bug { animation: pkBreathe .8s ease-in-out infinite; }
.il-soupe.alive .k-spoon { animation: pkStir 1.2s ease-in-out infinite; }
.il-piano.alive .k-key0 { animation: pkPress .5s ease-in-out infinite; }
.il-piano.alive .k-key1 { animation: pkPress .5s ease-in-out -.12s infinite; }
.il-piano.alive .k-key2 { animation: pkPress .5s ease-in-out -.25s infinite; }
.il-piano.alive .k-key3 { animation: pkPress .5s ease-in-out -.37s infinite; }
.il-piano.alive .k-notes { animation: pkNotes 1.4s ease-out infinite; }
.il-ours.alive .k-tongue { animation: pkLick .6s ease-in-out infinite alternate; }
.il-ours.alive .k-drip { animation: pkDrip 1.2s ease-in infinite; }
.il-ours.alive .k-head { animation: pkTilt 1.6s ease-in-out infinite; }
.il-farine.alive .k-puff { animation: pkPuffOut 1.4s ease-out infinite; }
.il-farine.alive .k-scoop { animation: pkSway .7s ease-in-out infinite; }

@keyframes pkChew { 0%, 100% { transform: rotate(0); } 25% { transform: rotate(-3deg); } 50% { transform: rotate(1deg); } 70% { transform: rotate(-5deg); } }
@keyframes pkSpit { 0%, 60% { opacity: 0; transform: translateX(-8px); } 66% { opacity: 1; } 100% { opacity: 0; transform: translateX(22px) translateY(6px); } }
@keyframes pkPeek { 0%, 100% { opacity: 0; transform: translateY(10px); } 20%, 70% { opacity: 1; transform: translateY(0); } 40% { transform: translateY(0) rotate(-6deg); } 55% { transform: translateY(0) rotate(6deg); } }
@keyframes pkToss { 0%, 100% { transform: translateY(0) rotate(0); } 45% { transform: translateY(-26%) rotate(180deg); } 90% { transform: translateY(0) rotate(360deg); } }
@keyframes pkSniff { from { transform: translateY(0) scale(1); } to { transform: translateY(-1.5px) scale(1.12); } }
@keyframes pkNibble { from { transform: rotate(-2deg); } to { transform: rotate(3deg) translateY(1px); } }
@keyframes pkBob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-5px); } }
@keyframes pkFlutter { 0%, 100% { transform: scaleX(1); } 50% { transform: scaleX(.8); } }
@keyframes pkTwinkle { 0%, 100% { opacity: .35; transform: scale(.85); } 50% { opacity: 1; transform: scale(1.1); } }
@keyframes pkWand { 0%, 100% { transform: rotate(-10deg); } 50% { transform: rotate(16deg); } }
@keyframes pkBreathe { 0%, 100% { transform: scale(1, 1); } 50% { transform: scale(1.02, 1.05); } }
@keyframes pkSteam { 0% { opacity: 0; transform: translateY(8px); } 40% { opacity: 1; } 100% { opacity: 0; transform: translateY(-14px); } }
@keyframes pkKnit { from { transform: rotate(-4deg); } to { transform: rotate(4deg); } }
@keyframes pkRoll { 0%, 100% { transform: translateX(0) rotate(0); } 50% { transform: translateX(8px) rotate(80deg); } }
@keyframes pkPlop { 0%, 100% { transform: translateY(0) scale(1.06, .92); } 15% { transform: translateY(0) scale(.96, 1.05); } 50% { transform: translateY(-22px) rotate(-10deg); } 85% { transform: translateY(0) scale(1, 1); } }
@keyframes pkWobble { 0%, 100% { transform: rotate(-6deg); } 50% { transform: rotate(6deg); } }
@keyframes pkBubbles { 0% { opacity: 0; transform: translateY(6px); } 30% { opacity: 1; } 100% { opacity: 0; transform: translateY(-26px); } }
@keyframes pkSlosh { 0%, 100% { transform: rotate(-5deg); } 50% { transform: rotate(5deg); } }
@keyframes pkShuffle { 0%, 100% { transform: translateX(-6px) rotate(-3deg); } 50% { transform: translateX(6px) rotate(3deg); } }
@keyframes pkVisor { 0%, 15%, 85%, 100% { transform: translateY(0) scaleY(1); } 30%, 70% { transform: translateY(-16px) scaleY(.35); } }
@keyframes pkKick { 0%, 30%, 70%, 100% { transform: rotate(0); } 45% { transform: rotate(-9deg); } }
@keyframes pkKickLeg { 0%, 30%, 70%, 100% { transform: rotate(0); } 45% { transform: rotate(40deg); } }
@keyframes pkRow { 0%, 100% { transform: rotate(-8deg); } 50% { transform: rotate(10deg); } }
@keyframes pkSplash { 0%, 40% { opacity: 0; transform: scale(.6); } 55% { opacity: 1; transform: scale(1); } 100% { opacity: 0; transform: scale(1.4) translateY(-6px); } }
@keyframes pkDrip { 0% { opacity: 0; transform: translateY(-4px); } 20% { opacity: 1; } 100% { opacity: 0; transform: translateY(26px); } }
@keyframes pkTwirl { 0%, 100% { transform: scaleX(1) rotate(-4deg); } 50% { transform: scaleX(.6) rotate(4deg); } }
@keyframes pkFlip { 0%, 100% { transform: translateY(0) rotate(0); } 50% { transform: translateY(-40px) rotate(180deg); } 90% { transform: translateY(0) rotate(360deg); } }
@keyframes pkStomp { 0%, 100% { transform: rotate(0) scale(1); } 25% { transform: rotate(-8deg) translateY(-3%); } 40% { transform: rotate(0) scale(1.06, .94); } 65% { transform: rotate(8deg) translateY(-3%); } 80% { transform: rotate(0) scale(1.06, .94); } }
@keyframes pkFlicker { 0%, 100% { transform: scale(1, 1) skewX(0); } 30% { transform: scale(1.05, .95) skewX(-4deg); } 65% { transform: scale(.96, 1.06) skewX(4deg); } }
@keyframes pkBuzz { 0%, 100% { transform: translate(0, 0); } 25% { transform: translate(-10px, -8px); } 50% { transform: translate(-3px, 6px); } 75% { transform: translate(8px, -4px); } }
@keyframes pkStroll { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(-34px) translateY(10px); } }
@keyframes pkWaddle { 0%, 100% { transform: rotate(-6deg); } 50% { transform: rotate(6deg) translateY(-3px); } }
@keyframes pkDrift { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(14px); } }
@keyframes pkRev { 0%, 20%, 100% { transform: rotate(0) translateX(0); } 5%, 15% { transform: translateX(-2px); } 10% { transform: translateX(2px); } 45% { transform: rotate(-10deg) translateX(6px); } 70% { transform: rotate(0) translateX(10px); } }
@keyframes pkPuffOut { 0% { opacity: 0; transform: scale(.4); } 25% { opacity: 1; } 100% { opacity: 0; transform: scale(1.5) translate(-10px, -10px); } }
@keyframes pkHowl { 0%, 100% { transform: rotate(0); } 25%, 80% { transform: rotate(-18deg) translateY(-4px); } }
@keyframes pkPoke { 0%, 100% { transform: translateX(-12px); } 40%, 70% { transform: translateX(2px); } }
@keyframes pkCrawl { 0%, 100% { transform: translateX(-3px); } 50% { transform: translateX(3px) translateY(-1px); } }
@keyframes pkHopSmall { 0%, 100% { transform: translateY(0); } 40% { transform: translateY(-8px) rotate(-6deg); } 60% { transform: translateY(0) rotate(4deg); } }
@keyframes pkStep { from { transform: rotate(-12deg); } to { transform: rotate(12deg); } }
@keyframes pkRub { 0%, 60%, 100% { transform: translateY(0); } 70%, 90% { transform: translateY(-2px) scaleX(.9); } 80% { transform: translateY(1px) scaleX(1.1); } }
@keyframes pkOpenL { 0%, 100% { transform: rotate(0); } 40%, 70% { transform: rotate(-18deg); } }
@keyframes pkOpenR { 0%, 100% { transform: rotate(0); } 40%, 70% { transform: rotate(18deg); } }
@keyframes pkPeck { 0%, 40%, 100% { transform: rotate(0); } 55% { transform: rotate(38deg) translateY(10px); } 65% { transform: rotate(30deg) translateY(8px); } 75% { transform: rotate(38deg) translateY(10px); } }
@keyframes pkScan { 0%, 100% { transform: translate(0, 0) rotate(0); } 25% { transform: translate(-20px, 8px) rotate(-6deg); } 50% { transform: translate(-6px, 20px) rotate(4deg); } 75% { transform: translate(10px, 4px); } }
@keyframes pkStir { 0%, 100% { transform: rotate(-22deg); } 50% { transform: rotate(18deg); } }
@keyframes pkPress { 0%, 60%, 100% { transform: translateY(0); } 20%, 40% { transform: translateY(2.5px); } }
@keyframes pkLick { from { transform: scaleY(.6); } to { transform: scaleY(1.4); } }

/* Étage 4, deuxième moitié */
.il-renard .k-tail { animation: pkSway 3s ease-in-out infinite; }
.il-renard.alive .k-tail { animation: pkSwish .8s ease-in-out infinite; }
.il-renard.alive .k-head { animation: pkTilt 1.6s ease-in-out infinite; }
.il-roue.alive .k-roll { animation: pkRollAcross 2.4s ease-in-out infinite; }
.il-chou.alive .k-outL { animation: pkOpenL 1.6s ease-in-out infinite; }
.il-chou.alive .k-outR { animation: pkOpenR 1.6s ease-in-out infinite; }
.il-moufle .k-flakes { animation: pkSnow 3s linear infinite; }
.il-moufle.alive .k-mitt { animation: pkWave .5s ease-in-out infinite alternate; }
.il-tour .k-flag { animation: pkSway 2.4s ease-in-out infinite; }
.il-tour.alive .k-flag { animation: pkFlagSnap .4s ease-in-out infinite; }
.il-tour.alive .k-window { animation: pkTwinkle .9s ease-in-out infinite; }
.il-tutu.alive .k-twirl { animation: pkPirouette 1.2s ease-in-out infinite; }
.il-moustache.alive .k-mL { animation: pkTwitchL .5s ease-in-out infinite; }
.il-moustache.alive .k-mR { animation: pkTwitchR .5s ease-in-out -.25s infinite; }
.il-moustache.alive .k-hat { animation: pkHatTip 2s ease-in-out infinite; }
.il-tarte .k-steam, .il-tipi .k-smoke { animation: pkSteam 2.6s ease-in-out infinite; }
.il-tarte.alive .k-slice { animation: pkLift 1.6s ease-in-out infinite; }
.il-toupie:not(.alive) .k-lines { opacity: 0; }
.il-toupie.alive .k-top { animation: pkPrecess 1s ease-in-out infinite; }
.il-toupie.alive .k-stripes { animation: pkStripes .35s linear infinite; }
.il-toupie.alive .k-lines { animation: pkTwinkle .35s ease-in-out infinite; }
.il-poupee.alive .k-armL { animation: pkWaveL .5s ease-in-out infinite alternate; }
.il-poupee.alive .k-armR { animation: pkWaveR .5s ease-in-out infinite alternate; }
.il-poupee.alive .k-head { animation: pkTilt 1s ease-in-out infinite; }
.il-patate.alive .k-waddle { animation: pkWaddle .7s ease-in-out infinite; }
.il-patate .k-sprout { animation: pkSway 2.4s ease-in-out infinite; }
.il-patate.alive .k-sprout { animation-duration: .35s; }
.il-tipi.alive .k-flap { animation: pkSway .8s ease-in-out infinite; }
.il-tapis .k-fly { animation: pkCarpet 3s ease-in-out infinite; }
.il-tapis.alive .k-fly { animation-duration: 1.2s; }
.il-tapis .k-sparkle, .il-epee .k-glint { animation: pkTwinkle 1.4s ease-in-out infinite; }
.il-epee.alive .k-swish { animation: pkSwish2 1s cubic-bezier(.5, 0, .3, 1) infinite; }
.il-plume .k-fall { animation: pkSway 4s ease-in-out infinite; }
.il-plume.alive .k-fall { animation: pkFeather 2.4s ease-in-out infinite; }
.il-frite.alive .k-jump { animation: pkFlip 1.2s ease-in-out infinite; }
.il-prune.alive .k-bounce { animation: pkBounce .8s cubic-bezier(.3, 0, .5, 1) infinite; }

@keyframes pkRollAcross { 0%, 100% { transform: translateX(-22px) rotate(-90deg); } 50% { transform: translateX(22px) rotate(90deg); } }
@keyframes pkSnow { from { transform: translateY(-6px); opacity: 0; } 20% { opacity: 1; } to { transform: translateY(14px); opacity: 0; } }
@keyframes pkWave { from { transform: rotate(-12deg); } to { transform: rotate(12deg); } }
@keyframes pkWaveL { from { transform: rotate(20deg); } to { transform: rotate(150deg); } }
@keyframes pkWaveR { from { transform: rotate(-20deg); } to { transform: rotate(-150deg); } }
@keyframes pkFlagSnap { 0%, 100% { transform: scaleX(1) skewY(0); } 50% { transform: scaleX(.9) skewY(-6deg); } }
@keyframes pkPirouette { 0%, 100% { transform: scaleX(1) translateY(0); } 25% { transform: scaleX(.1) translateY(-4px); } 50% { transform: scaleX(-1) translateY(-6px); } 75% { transform: scaleX(-.1) translateY(-4px); } }
@keyframes pkTwitchL { 0%, 100% { transform: rotate(0); } 50% { transform: rotate(-10deg); } }
@keyframes pkTwitchR { 0%, 100% { transform: rotate(0); } 50% { transform: rotate(10deg); } }
@keyframes pkHatTip { 0%, 60%, 100% { transform: translateY(0) rotate(0); } 75% { transform: translateY(-12px) rotate(-12deg); } }
@keyframes pkLift { 0%, 100% { transform: translateY(0) rotate(0); } 50% { transform: translateY(-14px) rotate(-6deg); } }
@keyframes pkPrecess { 0%, 100% { transform: rotate(-6deg); } 50% { transform: rotate(6deg); } }
@keyframes pkStripes { from { transform: translateX(0); } to { transform: translateX(128px); } }
@keyframes pkCarpet { 0%, 100% { transform: translateY(0) skewY(-3deg); } 50% { transform: translateY(-12px) skewY(3deg); } }
@keyframes pkSwish2 { 0%, 100% { transform: rotate(-30deg); } 40% { transform: rotate(28deg); } 60% { transform: rotate(22deg); } }
@keyframes pkFeather { 0% { transform: translate(-10px, -18px) rotate(-14deg); } 50% { transform: translate(10px, 0) rotate(12deg); } 100% { transform: translate(-10px, -18px) rotate(-14deg); } }

/* Étage 5, première moitié */
.il-vache:not(.alive) .k-meuh, .il-vache:not(.alive) .k-moo, .il-mouton:not(.alive) .k-bee, .il-lion:not(.alive) .k-roar, .il-lion:not(.alive) .k-grr, .il-lion.alive .k-calm, .il-radio:not(.alive) .k-notes { opacity: 0; }
.il-melon.alive .k-slice { animation: pkWobble .8s ease-in-out infinite; }
.il-vache .k-tail { animation: pkSway 3s ease-in-out infinite; }
.il-vache.alive .k-tail { animation: pkSwish .7s ease-in-out infinite; }
.il-vache.alive .k-head { animation: pkMoo 2s ease-in-out infinite; }
.il-vache.alive .k-bell { animation: pkRing .4s ease-in-out infinite; }
.il-vache.alive .k-meuh { animation: pkNotes 2s ease-out infinite; }
.il-bonbon.alive .k-candy { animation: pkSpin 1.4s linear infinite; }
.il-bonbon.alive .k-wrapL { animation: pkTwitchL .35s ease-in-out infinite; }
.il-bonbon.alive .k-wrapR { animation: pkTwitchR .35s ease-in-out infinite; }
.il-bonbon .k-shine { animation: pkTwinkle 1.6s ease-in-out infinite; }
.il-de.alive .k-tumble { animation: pkTumble 1.4s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-bebe.alive .k-armL { animation: pkShake .2s ease-in-out infinite alternate; }
.il-bebe.alive .k-head { animation: pkTilt .8s ease-in-out infinite; }
.il-cheval .k-tail { animation: pkSway 3s ease-in-out infinite; }
.il-cheval.alive .k-rear { animation: pkRear 2s ease-in-out infinite; }
.il-cheval.alive .k-legF, .il-cheval.alive .k-legF2 { animation: pkPaw 2s ease-in-out infinite; }
.il-mouton.alive .k-hop { animation: pkBounce .8s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-mouton.alive .k-bee { animation: pkNotes 1.6s ease-out infinite; }
.il-lion .k-tail { animation: pkSway 3s ease-in-out infinite; }
.il-lion.alive .k-mane { animation: pkMane 1.6s ease-in-out infinite; }
.il-lion.alive .k-grr { animation: pkNotes 1.6s ease-out infinite; }
.il-avion .k-prop { animation: pkFlutter .5s linear infinite; }
.il-avion.alive .k-prop { animation: pkProp .08s linear infinite; }
.il-avion.alive .k-plane { animation: pkBank 2.4s ease-in-out infinite; }
.il-avion.alive .k-clouds { animation: pkClouds 1.6s linear infinite; }
.il-radio.alive .k-play { animation: pkJiggle .25s ease-in-out infinite alternate; }
.il-radio.alive .k-notes { animation: pkNotes 1.4s ease-out infinite; }
.il-radio.alive .k-dial { animation: pkTwinkle .7s ease-in-out infinite; }
.il-salade.alive .k-toss { animation: pkToss2 1s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-panda.alive .k-chew { animation: pkLick .3s ease-in-out infinite alternate; }
.il-panda.alive .k-bamboo { animation: pkNibble .3s ease-in-out infinite alternate; }
.il-pantalon.alive .k-legL { animation: pkWaveL2 .6s ease-in-out infinite alternate; }
.il-pantalon.alive .k-legR { animation: pkWaveR2 .6s ease-in-out infinite alternate; }
.il-banane.alive .k-peelL { animation: pkTwitchL .6s ease-in-out infinite; }
.il-banane.alive .k-peelR { animation: pkTwitchR .6s ease-in-out infinite; }
.il-robot .k-blink { animation: pkTwinkle 1.2s steps(2) infinite; }
.il-robot.alive .k-march { animation: pkMarch .8s ease-in-out infinite; }
.il-robot.alive .k-armL { animation: pkWaveL2 .4s ease-in-out infinite alternate; }
.il-robot.alive .k-armR { animation: pkWaveR2 .4s ease-in-out infinite alternate-reverse; }
.il-robot.alive .k-led { animation: pkTwinkle .4s steps(2) infinite; }
.il-bol.alive .k-spoon { animation: pkDip 1.2s ease-in-out infinite; }
.il-livre.alive .k-page { animation: pkPage 1.4s ease-in-out infinite; }
.il-olive .k-sway { animation: pkSway 4s ease-in-out infinite; }
.il-olive.alive .k-sway { animation-duration: 1s; }
.il-savon .k-bubbles { animation: pkBubbles 2.6s ease-in infinite; }
.il-savon.alive .k-slide { animation: pkSlide 1.4s ease-in-out infinite; }
.il-savon.alive .k-bubbles { animation-duration: 1s; }

@keyframes pkMoo { 0%, 100% { transform: rotate(0); } 30%, 70% { transform: rotate(-14deg) translateY(-3px); } }
@keyframes pkTumble { 0%, 100% { transform: translateY(0) rotate(0); } 45% { transform: translateY(-30px) rotate(-120deg); } 80% { transform: translateY(0) rotate(-180deg) scale(1.05, .95); } 90% { transform: rotate(-180deg); } }
@keyframes pkShake { from { transform: rotate(118deg); } to { transform: rotate(138deg); } }
@keyframes pkRear { 0%, 20%, 80%, 100% { transform: rotate(0); } 40%, 60% { transform: rotate(-16deg); } }
@keyframes pkPaw { 0%, 20%, 80%, 100% { transform: rotate(0); } 40% { transform: rotate(-30deg); } 50% { transform: rotate(10deg); } 60% { transform: rotate(-30deg); } }
@keyframes pkMane { 0%, 100% { transform: scale(1); } 30%, 70% { transform: scale(1.12) rotate(4deg); } }
@keyframes pkProp { from { transform: scaleY(1); } to { transform: scaleY(-1); } }
@keyframes pkBank { 0%, 100% { transform: translateY(0) rotate(-4deg); } 50% { transform: translateY(-10px) rotate(4deg); } }
@keyframes pkClouds { from { transform: translateX(30px); } to { transform: translateX(-30px); } }
@keyframes pkJiggle { from { transform: rotate(-1.5deg) translateY(0); } to { transform: rotate(1.5deg) translateY(-2px); } }
@keyframes pkToss2 { 0%, 100% { transform: translateY(0) scale(1); } 45% { transform: translateY(-26px) rotate(-4deg); } 85% { transform: translateY(0) scale(1.03, .97); } }
@keyframes pkWaveL2 { from { transform: rotate(-6deg); } to { transform: rotate(8deg); } }
@keyframes pkWaveR2 { from { transform: rotate(6deg); } to { transform: rotate(-8deg); } }
@keyframes pkMarch { 0%, 100% { transform: translateY(0) rotate(-2deg); } 50% { transform: translateY(-4px) rotate(2deg); } }
@keyframes pkDip { 0%, 100% { transform: rotate(0) translateY(0); } 40% { transform: rotate(14deg) translateY(10px); } 70% { transform: rotate(-6deg) translateY(-16px); } }
@keyframes pkPage { 0%, 15% { transform: scaleX(1); } 50% { transform: scaleX(-.2); } 85%, 100% { transform: scaleX(-1); } }
@keyframes pkSlide { 0%, 100% { transform: translateX(-10px) rotate(-2deg); } 50% { transform: translateX(10px) rotate(2deg); } }

/* Étage 5, deuxième moitié */
.il-potiron .k-vine { animation: pkSway 3s ease-in-out infinite; }
.il-potiron.alive .k-bounce { animation: pkBounce .9s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-domino.alive .k-d1 { animation: pkTopple 2.4s ease-in infinite; }
.il-domino.alive .k-d2 { animation: pkTopple 2.4s ease-in .25s infinite; }
.il-domino.alive .k-d3 { animation: pkTopple 2.4s ease-in .5s infinite; }
.il-radis .k-tops { animation: pkSway 3s ease-in-out infinite; }
.il-radis.alive .k-hop { animation: pkBounce .8s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-limonade .k-bubbles { animation: pkBubbles 1.8s ease-in infinite; }
.il-limonade.alive .k-bubbles { animation-duration: .7s; }
.il-limonade.alive .k-lemon { animation: pkWobble .6s ease-in-out infinite; }
.il-tornade .k-band { animation: pkBand 1.2s ease-in-out infinite alternate; }
.il-tornade.alive .k-band { animation-duration: .3s; }
.il-tornade.alive .k-twist { animation: pkShuffle 1.6s ease-in-out infinite; }
.il-tornade .k-debris { animation: pkOrbit 3s linear infinite; transform-origin: 100px 100px; }
.il-tornade.alive .k-debris { animation-duration: 1s; }
.il-pantoufle.alive .k-hop { animation: pkBounce .7s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-pantoufle.alive .k-earL { animation: pkTwitchL .5s ease-in-out infinite; }
.il-pantoufle.alive .k-earR { animation: pkTwitchR .5s ease-in-out -.2s infinite; }
.il-manchot.alive .k-waddle { animation: pkWaddle .6s ease-in-out infinite; }
.il-manchot.alive .k-flipL { animation: pkFlapL .3s ease-in-out infinite alternate; }
.il-manchot.alive .k-flipR { animation: pkFlapR .3s ease-in-out infinite alternate; }
.il-diamant .k-glints { animation: pkTwinkle 1.6s ease-in-out infinite; }
.il-diamant.alive .k-gem { animation: pkPirouette 1.6s ease-in-out infinite; }
.il-diamant.alive .k-glints { animation-duration: .4s; }
.il-flamant .k-neck { animation: pkSway 3.4s ease-in-out infinite; }
.il-flamant.alive .k-wing { animation: pkLift 1s ease-in-out infinite; }
.il-flamant.alive .k-leg2 { animation: pkKickLeg 1.4s ease-in-out infinite; }
.il-ballon.alive .k-ball { animation: pkBounce .8s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-ballon.alive .k-spin { animation: pkSpin 1.6s linear infinite; }
.il-bouton.alive .k-spin { animation: pkSpin 2s linear infinite; }
.il-bouton.alive .k-needle { animation: pkSew .6s ease-in-out infinite; }
.il-bulle .k-float { animation: pkBob 3s ease-in-out infinite; }
.il-bulle.alive .k-float { animation: pkJelly 1.2s ease-in-out infinite; }
.il-robe.alive .k-skirt { animation: pkSkirt .8s ease-in-out infinite alternate; }
.il-biberon:not(.alive) .k-drop { opacity: 0; }
.il-biberon.alive .k-tilt { animation: pkWobble 1.2s ease-in-out infinite; }
.il-biberon.alive .k-drop { animation: pkDrip 1.2s ease-in infinite; }
.il-bouee .k-bob { animation: pkBob 2.6s ease-in-out infinite; }
.il-bouee.alive .k-bob { animation: pkRock 1s ease-in-out infinite; }
.il-arbre .k-crown { animation: pkSway 5s ease-in-out infinite; }
.il-arbre.alive .k-crown { animation: pkRustle .3s ease-in-out infinite alternate; }
.il-arbre:not(.alive) .k-song { opacity: 0; }
.il-arbre.alive .k-bird { animation: pkHopSmall .6s ease-in-out infinite; }
.il-arbre.alive .k-song { animation: pkNotes 1.2s ease-out infinite; }
.il-brioche .k-steam { animation: pkSteam 2.6s ease-in-out infinite; }
.il-brioche.alive .k-puff { animation: pkBreathe .9s ease-in-out infinite; }
.il-brosse.alive .k-brush { animation: pkBrush .6s ease-in-out infinite alternate; }

@keyframes pkTopple { 0%, 10% { transform: rotate(0); } 30%, 80% { transform: rotate(-22deg); } 100% { transform: rotate(0); } }
@keyframes pkBand { from { transform: translateX(-4px); } to { transform: translateX(4px); } }
@keyframes pkOrbit { from { transform: rotate(0); } to { transform: rotate(360deg); } }
@keyframes pkFlapL { from { transform: rotate(0); } to { transform: rotate(30deg); } }
@keyframes pkFlapR { from { transform: rotate(0); } to { transform: rotate(-30deg); } }
@keyframes pkSew { 0%, 100% { transform: translate(0, 0); } 50% { transform: translate(-14px, 14px); } }
@keyframes pkJelly { 0%, 100% { transform: scale(1, 1) translateY(0); } 25% { transform: scale(1.06, .94) translateY(-6px); } 50% { transform: scale(.95, 1.05) translateY(-10px); } 75% { transform: scale(1.03, .97) translateY(-4px); } }
@keyframes pkSkirt { from { transform: skewX(-6deg); } to { transform: skewX(6deg); } }
@keyframes pkRock { 0%, 100% { transform: rotate(-8deg) translateY(0); } 50% { transform: rotate(8deg) translateY(-6px); } }
@keyframes pkRustle { from { transform: rotate(-1.5deg) scale(1); } to { transform: rotate(1.5deg) scale(1.02); } }
@keyframes pkBrush { from { transform: translate(-10px, 6px) rotate(-6deg); } to { transform: translate(10px, -6px) rotate(6deg); } }

/* Étage 6, première moitié */
.il-judo:not(.alive) .k-kiai, .il-jus:not(.alive) .k-drop, .il-jus:not(.alive) .k-sip, .il-camion:not(.alive) .k-smoke { opacity: 0; }
.il-canard .k-bob { animation: pkBob 2.6s ease-in-out infinite; }
.il-canard.alive .k-bob { animation: pkRock 1s ease-in-out infinite; }
.il-canard.alive .k-beak { animation: pkQuack .4s ease-in-out infinite alternate; }
.il-canard.alive .k-wing { animation: pkLift .4s ease-in-out infinite; }
.il-roi .k-shine, .il-etoile .k-twinkle { animation: pkTwinkle 1.6s ease-in-out infinite; }
.il-roi.alive .k-armR { animation: pkWand .8s ease-in-out infinite; }
.il-roi.alive .k-crown { animation: pkHopSmall .8s ease-in-out infinite; }
.il-jus.alive .k-squeeze { animation: pkSqueeze 1.2s ease-in-out infinite; }
.il-jus.alive .k-sip { animation: pkTwinkle 1.2s ease-in-out infinite; }
.il-jus.alive .k-drop { animation: pkDrip 1.2s ease-in infinite; }
.il-cafe .k-steam { animation: pkSteam 2.6s ease-in-out infinite; }
.il-cafe.alive .k-spoon { animation: pkStir 1s ease-in-out infinite; }
.il-cafe.alive .k-steam { animation-duration: 1.2s; }
.il-cochon .k-tail { animation: pkSway 2s ease-in-out infinite; }
.il-cochon.alive .k-tail { animation: pkSpring .3s ease-in-out infinite alternate; }
.il-cochon.alive .k-hop { animation: pkBounce .7s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-cochon.alive .k-snout { animation: pkSniff .25s ease-in-out infinite alternate; }
.il-camion.alive .k-wheel { animation: pkSpin .5s linear infinite; }
.il-camion.alive .k-drive { animation: pkRev 1.6s ease-in-out infinite; }
.il-camion.alive .k-smoke { animation: pkPuffOut 1.2s ease-out infinite; }
.il-sac.alive .k-swing { animation: pkSway .9s ease-in-out infinite; }
.il-chocolat.alive .k-piece { animation: pkFlip 1.2s ease-in-out infinite; }
.il-poire.alive .k-waddle { animation: pkWaddle .8s ease-in-out infinite; }
.il-etoile .k-spin { animation: pkSway 4s ease-in-out infinite; }
.il-etoile.alive .k-spin { animation: pkSpin 2.4s linear infinite; }
.il-judo.alive .k-throw { animation: pkJudo 1.8s ease-in-out infinite; }
.il-judo.alive .k-kiai { animation: pkTwinkle .3s ease-in-out infinite; }
.il-carotte .k-fronds { animation: pkSway 3s ease-in-out infinite; }
.il-carotte.alive .k-hop { animation: pkBounce .8s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-carotte.alive .k-fronds { animation-duration: .4s; }
.il-cactus.alive .k-armL { animation: pkTwitchL .6s ease-in-out infinite; }
.il-cactus.alive .k-armR { animation: pkTwitchR .6s ease-in-out infinite; }
.il-cactus.alive .k-flower { animation: pkTwinkle .9s ease-in-out infinite; }
.il-cabane .k-smoke { animation: pkSteam 3s ease-in-out infinite; }
.il-cabane.alive .k-win { animation: pkTwinkle .8s ease-in-out infinite; }
.il-cabane.alive .k-smoke { animation-duration: 1.2s; }
.il-crabe.alive .k-scuttle { animation: pkScuttle 1.2s ease-in-out infinite; }
.il-crabe.alive .k-pinch { animation: pkPinch .25s ease-in-out infinite alternate; }
.il-crabe.alive .k-clawL { animation: pkTwitchL .5s ease-in-out infinite; }
.il-crabe.alive .k-clawR { animation: pkTwitchR .5s ease-in-out infinite; }

@keyframes pkQuack { from { transform: rotate(0); } to { transform: rotate(14deg); } }
@keyframes pkSqueeze { 0%, 100% { transform: scale(1, 1); } 50% { transform: scale(.88, 1.04); } }
@keyframes pkSpring { from { transform: scale(1) rotate(-10deg); } to { transform: scale(1.2) rotate(14deg); } }
@keyframes pkJudo { 0%, 100% { transform: rotate(0); } 25% { transform: rotate(14deg) translateY(4px); } 50% { transform: rotate(0); } 70% { transform: rotate(-10deg) translateX(-6px); } 80% { transform: rotate(6deg) translateX(6px); } }
@keyframes pkScuttle { 0%, 100% { transform: translateX(-16px); } 25%, 75% { transform: translateX(0) translateY(-3px); } 50% { transform: translateX(16px); } }
@keyframes pkPinch { from { transform: rotate(0); } to { transform: rotate(-24deg); } }

/* Étage 6, deuxième moitié */
.il-castor:not(.alive) .k-chips, .il-voiture:not(.alive) .k-honk, .il-cloche:not(.alive) .k-waves { opacity: 0; }
.il-castor.alive .k-teeth { animation: pkLick .15s ease-in-out infinite alternate; }
.il-castor.alive .k-head { animation: pkNibble .3s ease-in-out infinite alternate; }
.il-castor.alive .k-chips { animation: pkPuffOut .6s ease-out infinite; }
.il-castor.alive .k-tail { animation: pkSlap .8s ease-in-out infinite; }
.il-canot .k-bob, .il-poisson .k-swim { animation: pkBob 2.6s ease-in-out infinite; }
.il-canot.alive .k-bob { animation: pkRock 1s ease-in-out infinite; }
.il-cloche.alive .k-ring { animation: pkSway .7s ease-in-out infinite; }
.il-cloche.alive .k-clapper { animation: pkSway .7s ease-in-out -.18s infinite; }
.il-cloche.alive .k-waves { animation: pkTwinkle .35s ease-in-out infinite; }
.il-voiture.alive .k-wheel { animation: pkSpin .5s linear infinite; }
.il-voiture.alive .k-drive { animation: pkRev 1.6s ease-in-out infinite; }
.il-voiture.alive .k-honk { animation: pkTwinkle .4s ease-in-out infinite; }
.il-poisson .k-tail { animation: pkSway 1.6s ease-in-out infinite; }
.il-poisson.alive .k-tail { animation-duration: .35s; }
.il-poisson.alive .k-swim { animation: pkSwimLoop 2s ease-in-out infinite; }
.il-poisson .k-bubbles { animation: pkBubbles 2.4s ease-in infinite; }
.il-oie.alive .k-neck { animation: pkHonk 1.2s ease-in-out infinite; }
.il-oie.alive .k-beak { animation: pkQuack .3s ease-in-out infinite alternate; }
.il-oie.alive .k-wing { animation: pkLift .35s ease-in-out infinite; }
.il-miroir .k-twinkle, .il-cle .k-twinkle { animation: pkTwinkle 1.8s ease-in-out infinite; }
.il-miroir.alive .k-gleam { animation: pkGleam 1.6s ease-in-out infinite; }
.il-armoire.alive .k-door { animation: pkDoor 2.4s ease-in-out infinite; }
.il-jupe.alive .k-skirt { animation: pkSkirt .5s ease-in-out infinite alternate; }
.il-cle.alive .k-turn { animation: pkKeyTurn 1.6s ease-in-out infinite; }
.il-crocodile.alive .k-jaw { animation: pkSnap .8s ease-in-out infinite; }
.il-flocon .k-flake { animation: pkSpin 12s linear infinite; }
.il-flocon.alive .k-flake { animation: pkSnowfall 2.4s ease-in-out infinite; }
.il-clou.alive .k-hammer { animation: pkHammer .8s ease-in infinite; }
.il-clou.alive .k-nail { animation: pkNail 2.4s steps(3) infinite; }
.il-cravate.alive .k-tie { animation: pkFlagSnap .35s ease-in-out infinite; }

@keyframes pkSlap { 0%, 60%, 100% { transform: rotate(0); } 75% { transform: rotate(-24deg); } 85% { transform: rotate(4deg); } }
@keyframes pkSwimLoop { 0%, 100% { transform: translateX(-10px) rotate(4deg); } 50% { transform: translateX(10px) rotate(-4deg); } }
@keyframes pkHonk { 0%, 100% { transform: rotate(0); } 40%, 60% { transform: rotate(14deg) translateX(6px); } }
@keyframes pkGleam { 0% { transform: translateX(-70px); } 60%, 100% { transform: translateX(110px); } }
@keyframes pkDoor { 0%, 15%, 85%, 100% { transform: scaleX(1); } 40%, 60% { transform: scaleX(.12); } }
@keyframes pkKeyTurn { 0%, 15% { transform: rotate(0); } 45%, 70% { transform: rotate(90deg); } 100% { transform: rotate(0); } }
@keyframes pkSnap { 0%, 30%, 100% { transform: rotate(0); } 50%, 65% { transform: rotate(22deg); } 70% { transform: rotate(-2deg); } }
@keyframes pkSnowfall { 0% { transform: translateY(-16px) rotate(0); } 50% { transform: translateY(6px) rotate(60deg) translateX(8px); } 100% { transform: translateY(-16px) rotate(120deg); } }
@keyframes pkHammer { 0%, 100% { transform: rotate(-30deg); } 70% { transform: rotate(6deg); } 80% { transform: rotate(0); } }
@keyframes pkNail { 0% { transform: translateY(0); } 100% { transform: translateY(30px); } }

/* Étage 7, première moitié */
.il-chevre:not(.alive) .k-bee, .il-tigre:not(.alive) .k-roar, .il-tigre:not(.alive) .k-grr, .il-tigre.alive .k-calm, .il-dragon:not(.alive) .k-fire, .il-lezard:not(.alive) .k-tongue, .il-fleche:not(.alive) .k-trail, .il-gomme:not(.alive) .k-crumbs { opacity: 0; }
.il-fleche.alive .k-arrow { animation: pkThwang 1.4s ease-out infinite; }
.il-fleche.alive .k-trail { animation: pkTwinkle .3s ease-in-out infinite; }
.il-chevre.alive .k-chew { animation: pkLick .25s ease-in-out infinite alternate; }
.il-chevre.alive .k-head { animation: pkButt 1.6s ease-in-out infinite; }
.il-chevre.alive .k-bee { animation: pkNotes 1.6s ease-out infinite; }
.il-planete .k-bands { animation: pkBandsMove 8s linear infinite; }
.il-planete .k-moon { animation: pkOrbit 10s linear infinite; }
.il-planete.alive .k-bands { animation-duration: 2s; }
.il-planete.alive .k-moon { animation-duration: 2.4s; }
.il-comete .k-tail { animation: pkFlicker 1.2s ease-in-out infinite; transform-origin: 150px 60px; }
.il-comete .k-twinkle, .il-diademe .k-twinkle { animation: pkTwinkle 1.6s ease-in-out infinite; }
.il-comete.alive .k-streak { animation: pkStreak 1.6s ease-in-out infinite; }
.il-diademe.alive .k-twinkle { animation-duration: .5s; }
.il-crepe.alive .k-flip { animation: pkCrepe 1.4s ease-in-out infinite; }
.il-fenetre .k-curtain { animation: pkSway 4s ease-in-out infinite; }
.il-fenetre.alive .k-shutL { animation: pkShutL 1.6s ease-in-out infinite; }
.il-fenetre.alive .k-shutR { animation: pkShutR 1.6s ease-in-out infinite; }
.il-fenetre.alive .k-curtain { animation-duration: .8s; }
.il-peche.alive .k-waddle { animation: pkWaddle .8s ease-in-out infinite; }
.il-zebre .k-tail { animation: pkSway 3s ease-in-out infinite; }
.il-zebre.alive .k-tail { animation: pkSwish .7s ease-in-out infinite; }
.il-zebre.alive .k-head { animation: pkMoo 1.2s ease-in-out infinite; }
.il-zero.alive .k-hoop { animation: pkRollAcross 2s ease-in-out infinite; }
.il-lezard .k-tail { animation: pkSway 3s ease-in-out infinite; }
.il-lezard.alive .k-tongue { animation: pkTongue .8s ease-in-out infinite; }
.il-lezard.alive .k-head { animation: pkNod .8s ease-in-out infinite; }
.il-dragon .k-smoke { animation: pkSteam 2.6s ease-in-out infinite; }
.il-dragon .k-tail { animation: pkSway 3s ease-in-out infinite; }
.il-dragon.alive .k-wingL { animation: pkFlapL .25s ease-in-out infinite alternate; }
.il-dragon.alive .k-wingR { animation: pkFlapR .25s ease-in-out infinite alternate; }
.il-dragon.alive .k-fire { animation: pkFire 1.4s ease-out infinite; }
.il-tigre .k-tail { animation: pkSway 3s ease-in-out infinite; }
.il-tigre.alive .k-tail { animation: pkSwish .6s ease-in-out infinite; }
.il-tigre.alive .k-head { animation: pkMane 1.6s ease-in-out infinite; }
.il-tigre.alive .k-grr { animation: pkNotes 1.6s ease-out infinite; }
.il-gomme.alive .k-rub { animation: pkRub2 .3s ease-in-out infinite alternate; }
.il-gomme.alive .k-line { animation: pkErase 2.4s linear infinite; }
.il-gomme.alive .k-crumbs { animation: pkPuffOut .6s ease-out infinite; }
.il-gant.alive .k-wave { animation: pkWave .45s ease-in-out infinite alternate; }
.il-gant.alive .k-f2 { animation: pkTwitchL .3s ease-in-out infinite; }
.il-gant.alive .k-f4 { animation: pkTwitchR .3s ease-in-out -.15s infinite; }

@keyframes pkThwang { 0% { transform: translate(-40px, 30px); opacity: 0; } 20% { opacity: 1; } 50% { transform: translate(0, 0); } 58% { transform: translate(0, 0) rotate(3deg); } 66% { transform: rotate(-2deg); } 74%, 100% { transform: rotate(0); } }
@keyframes pkButt { 0%, 50%, 100% { transform: rotate(0); } 65% { transform: rotate(16deg) translateX(-4px); } 75% { transform: rotate(-6deg) translateX(8px); } }
@keyframes pkBandsMove { from { transform: translateX(0); } 50% { transform: translateX(-8px); } to { transform: translateX(0); } }
@keyframes pkStreak { 0%, 100% { transform: translate(0, 0); } 50% { transform: translate(-16px, 14px); } }
@keyframes pkCrepe { 0%, 15%, 100% { transform: translateY(0) rotate(0) scaleY(1); } 45% { transform: translateY(-60px) rotate(160deg) scaleY(.4); } 75% { transform: translateY(0) rotate(360deg) scaleY(1); } 82% { transform: scale(1.06, .9); } }
@keyframes pkShutL { 0%, 100% { transform: scaleX(1); } 50% { transform: scaleX(.3); } }
@keyframes pkShutR { 0%, 100% { transform: scaleX(1); } 50% { transform: scaleX(.3); } }
@keyframes pkTongue { 0%, 40%, 100% { transform: scaleX(0); } 55%, 70% { transform: scaleX(1); } }
@keyframes pkNod { 0%, 100% { transform: rotate(0); } 25% { transform: rotate(-8deg); } 50% { transform: rotate(0); } 75% { transform: rotate(-8deg); } }
@keyframes pkFire { 0%, 30% { opacity: 0; transform: scale(.2); } 45% { opacity: 1; transform: scale(1.1); } 80% { opacity: 1; transform: scale(1); } 100% { opacity: 0; transform: scale(1.3); } }
@keyframes pkRub2 { from { transform: translateX(-14px) rotate(-2deg); } to { transform: translateX(14px) rotate(2deg); } }
@keyframes pkErase { 0% { opacity: 1; } 70% { opacity: 0; } 100% { opacity: 1; } }

/* Étage 7, deuxième moitié */
.il-crapaud:not(.alive) .k-croak, .il-goutte:not(.alive) .k-splash, .il-grotte:not(.alive) .k-bat { opacity: 0; }
.il-figue.alive .k-half { animation: pkWobble .8s ease-in-out infinite; }
.il-bague .k-twinkle { animation: pkTwinkle 1.6s ease-in-out infinite; }
.il-bague.alive .k-lid { animation: pkLidOpen 2s ease-in-out infinite; }
.il-bague.alive .k-twinkle { animation-duration: .45s; }
.il-goutte .k-ripple { animation: pkBreathe 2.4s ease-in-out infinite; }
.il-goutte.alive .k-fall { animation: pkDropFall 1.4s ease-in infinite; }
.il-goutte.alive .k-splash { animation: pkSplash 1.4s ease-out infinite; }
.il-gland.alive .k-swing { animation: pkSway .8s ease-in-out infinite; }
.il-grotte.alive .k-bat { animation: pkBatOut 2s ease-in-out infinite; }
.il-gazon .k-grass { animation: pkSway 4s ease-in-out infinite; }
.il-gazon.alive .k-grass { animation: pkRustle .5s ease-in-out infinite alternate; }
.il-gazon.alive .k-bug { animation: pkStroll 3s ease-in-out infinite; }
.il-zigzag .k-spark { animation: pkZig 3s linear infinite; }
.il-zigzag.alive .k-spark { animation-duration: 1.2s; }
.il-vague .k-roll { animation: pkSway 4s ease-in-out infinite; }
.il-vague.alive .k-roll { animation: pkCurl 1.4s ease-in-out infinite; }
.il-vague .k-gull { animation: pkDrift 4s ease-in-out infinite; }
.il-chaudron .k-flames { animation: pkFlicker .8s ease-in-out infinite; transform-origin: 100px 186px; }
.il-chaudron .k-bubbles { animation: pkBubbles 1.6s ease-in infinite; }
.il-chaudron .k-steam { animation: pkSteam 2.4s ease-in-out infinite; }
.il-chaudron.alive .k-bubbles { animation-duration: .6s; }
.il-chaudron.alive .k-flames { animation-duration: .3s; }
.il-dinosaure .k-tail { animation: pkSway 3s ease-in-out infinite; }
.il-dinosaure.alive .k-neck { animation: pkStretch 1.8s ease-in-out infinite; }
.il-dinosaure.alive .k-legB, .il-dinosaure.alive .k-legF2 { animation: pkStep .5s ease-in-out infinite alternate; }
.il-autruche.alive .k-legL { animation: pkStep .22s ease-in-out infinite alternate; }
.il-autruche.alive .k-legR { animation: pkStep .22s ease-in-out infinite alternate-reverse; }
.il-autruche.alive .k-neck { animation: pkNod .44s ease-in-out infinite; }
.il-taupe.alive .k-pop { animation: pkMole 1.6s ease-in-out infinite; }
.il-gaufre.alive .k-syrup { animation: pkDrip 1.4s ease-in infinite; }
.il-gaufre.alive .k-berry { animation: pkFlip 1.4s ease-in-out infinite; }
.il-autobus.alive .k-wheel { animation: pkSpin .5s linear infinite; }
.il-autobus.alive .k-drive { animation: pkRev 1.6s ease-in-out infinite; }
.il-autobus.alive .k-pass0 { animation: pkHopSmall .5s ease-in-out infinite; }
.il-autobus.alive .k-pass1 { animation: pkHopSmall .5s ease-in-out -.25s infinite; }
.il-crapaud .k-sac { animation: pkBreathe 2.6s ease-in-out infinite; }
.il-crapaud.alive .k-sac { animation: pkCroak .7s ease-in-out infinite; }
.il-crapaud.alive .k-croak { animation: pkNotes 1.4s ease-out infinite; }

@keyframes pkLidOpen { 0%, 15%, 85%, 100% { transform: scaleY(1); } 40%, 60% { transform: scaleY(-.3) translateY(-10px); } }
@keyframes pkDropFall { 0% { transform: translateY(-60px) scale(.9, 1.1); opacity: 0; } 15% { opacity: 1; } 70% { transform: translateY(0) scale(1); } 80% { transform: scale(1.2, .8); } 100% { transform: scale(1); } }
@keyframes pkBatOut { 0%, 20% { opacity: 0; transform: translate(0, 0) scale(.5); } 35% { opacity: 1; } 80% { opacity: 1; transform: translate(50px, -90px) scale(1.2); } 100% { opacity: 0; transform: translate(60px, -110px) scale(1.2); } }
@keyframes pkZig { 0% { transform: translate(0, 0); } 25% { transform: translate(40px, 80px); } 50% { transform: translate(80px, 0); } 75% { transform: translate(120px, 80px); } 100% { transform: translate(160px, 0); } }
@keyframes pkCurl { 0%, 100% { transform: translateX(-6px) skewX(4deg); } 50% { transform: translateX(6px) skewX(-6deg) scaleY(1.04); } }
@keyframes pkStretch { 0%, 100% { transform: rotate(0); } 40%, 60% { transform: rotate(-10deg) translateY(-6px); } }
@keyframes pkMole { 0%, 100% { transform: translateY(40px); } 30%, 70% { transform: translateY(0); } 45% { transform: translateY(-4px) rotate(-4deg); } 55% { transform: translateY(-4px) rotate(4deg); } }
@keyframes pkCroak { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.5, 1.4); } }

/* Étage 8, première moitié */
.il-oeuf:not(.alive) .k-crack, .il-patin:not(.alive) .k-sparkle, .il-timbre:not(.alive) .k-postmark, .il-tracteur:not(.alive) .k-smoke { opacity: 0; }
.il-oeuf.alive .k-wobble { animation: pkWobble .3s ease-in-out infinite; }
.il-oeuf.alive .k-crack { animation: pkTwinkle 1.2s steps(2) infinite; }
.il-lapin.alive .k-hop { animation: pkBounce .8s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-lapin.alive .k-nose { animation: pkSniff .2s ease-in-out infinite alternate; }
.il-lapin.alive .k-earR { animation: pkTwitchR .8s ease-in-out infinite; }
.il-lapin .k-earL { animation: pkSway 4s ease-in-out infinite; }
.il-moulin .k-sails { animation: pkSpin 8s linear infinite; }
.il-moulin.alive .k-sails { animation-duration: 1.4s; }
.il-lutin.alive .k-jump { animation: pkBounce .7s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-lutin.alive .k-hat { animation: pkSway .35s ease-in-out infinite; }
.il-lutin.alive .k-armL { animation: pkWaveL .35s ease-in-out infinite alternate; }
.il-marin.alive .k-armR { animation: pkSalute 1.6s ease-in-out infinite; }
.il-coussin.alive .k-squish { animation: pkPlop2 1s ease-in-out infinite; }
.il-poussin.alive .k-hop { animation: pkHopSmall .5s ease-in-out infinite; }
.il-poussin.alive .k-wingL { animation: pkFlapL .2s ease-in-out infinite alternate; }
.il-poussin.alive .k-wingR { animation: pkFlapR .2s ease-in-out infinite alternate; }
.il-poussin.alive .k-beak { animation: pkLick .2s ease-in-out infinite alternate; }
.il-patin.alive .k-glide { animation: pkGlide 1.8s ease-in-out infinite; }
.il-patin.alive .k-sparkle { animation: pkTwinkle .4s ease-in-out infinite; }
.il-patin .k-lace { animation: pkSway 2.4s ease-in-out infinite; }
.il-timbre.alive .k-postmark { animation: pkStamp 1.6s ease-out infinite; }
.il-chimpanze.alive .k-armR { animation: pkScratch 1.6s ease-in-out infinite; }
.il-chimpanze.alive .k-armL { animation: pkClap 1.6s ease-in-out infinite; }
.il-chimpanze.alive .k-head { animation: pkTilt 1.6s ease-in-out infinite; }
.il-fleur .k-sway { animation: pkSway 4s ease-in-out infinite; }
.il-fleur.alive .k-bloom { animation: pkBloom 1.6s ease-in-out infinite; }
.il-fleur.alive .k-sway { animation-duration: 1.4s; }
.il-beurre.alive .k-knife { animation: pkSpread 1s ease-in-out infinite; }
.il-tracteur.alive .k-wheel { animation: pkSpin .9s linear infinite; }
.il-tracteur.alive .k-drive { animation: pkJiggle .2s ease-in-out infinite alternate; }
.il-tracteur.alive .k-smoke { animation: pkPuffOut 1s ease-out infinite; }
.il-pneu.alive .k-roll { animation: pkRollAcross 2s ease-in-out infinite; }
.il-jongleur .k-b0 { animation: pkJuggle 1.8s linear infinite; }
.il-jongleur .k-b1 { animation: pkJuggle 1.8s linear -.6s infinite; }
.il-jongleur .k-b2 { animation: pkJuggle 1.8s linear -1.2s infinite; }
.il-jongleur:not(.alive) .k-ball { animation-play-state: paused; }
.il-jongleur.alive .k-ball { animation-duration: .9s; }
.il-jongleur.alive .k-b1 { animation-delay: -.3s; }
.il-jongleur.alive .k-b2 { animation-delay: -.6s; }
.il-pecheur.alive .k-fish { animation: pkWobble .25s ease-in-out infinite; }
.il-pecheur.alive .k-armR { animation: pkReel 1.2s ease-in-out infinite; }
.il-coeur .k-beat { animation: pkHeart 1.6s ease-in-out infinite; }
.il-coeur.alive .k-beat { animation-duration: .7s; }
.il-noeud.alive .k-wiggle { animation: pkWobble .4s ease-in-out infinite; }

@keyframes pkSalute { 0%, 20%, 80%, 100% { transform: rotate(0); } 40%, 60% { transform: rotate(-150deg); } }
@keyframes pkPlop2 { 0%, 100% { transform: scale(1, 1); } 30% { transform: scale(1.12, .8); } 60% { transform: scale(.96, 1.06); } }
@keyframes pkGlide { 0%, 100% { transform: translateX(-16px) rotate(-3deg); } 50% { transform: translateX(16px) rotate(3deg); } }
@keyframes pkStamp { 0% { opacity: 0; transform: translateY(-30px) scale(1.4); } 30% { opacity: 1; transform: translateY(0) scale(1); } 80% { opacity: 1; } 100% { opacity: 0; } }
@keyframes pkScratch { 0%, 100% { transform: rotate(0); } 30%, 70% { transform: rotate(-140deg); } 40%, 60% { transform: rotate(-150deg); } 50% { transform: rotate(-140deg); } }
@keyframes pkClap { 0%, 100% { transform: rotate(0); } 15%, 35% { transform: rotate(-40deg); } 25% { transform: rotate(-20deg); } }
@keyframes pkBloom { 0%, 100% { transform: scale(.92) rotate(0); } 50% { transform: scale(1.08) rotate(15deg); } }
@keyframes pkSpread { 0%, 100% { transform: translate(0, 0) rotate(0); } 50% { transform: translate(-20px, 8px) rotate(-6deg); } }
@keyframes pkJuggle { 0% { transform: rotate(0); } 100% { transform: rotate(360deg); } }
@keyframes pkReel { 0%, 100% { transform: rotate(0); } 50% { transform: rotate(-14deg); } }
@keyframes pkHeart { 0%, 40%, 100% { transform: scale(1); } 10%, 30% { transform: scale(1.1); } 20% { transform: scale(1.02); } }

/* Étage 8, deuxième moitié */
.il-casque:not(.alive) .k-stars, .il-karate:not(.alive) .k-kiai, .il-klaxon:not(.alive) .k-honk, .il-balai:not(.alive) .k-dust, .il-lait:not(.alive) .k-splash, .il-aimant:not(.alive) .k-field { opacity: 0; }
.il-masque .k-plumes { animation: pkSway 3s ease-in-out infinite; }
.il-masque.alive .k-sway { animation: pkWobble .8s ease-in-out infinite; }
.il-casque.alive .k-bonk { animation: pkBounce .9s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-casque.alive .k-stars { animation: pkOrbitStars .9s linear infinite; transform-origin: 100px 30px; }
.il-toque.alive .k-puff { animation: pkBreathe .8s ease-in-out infinite; }
.il-koala.alive .k-leaf { animation: pkNibble .3s ease-in-out infinite alternate; }
.il-koala.alive .k-head { animation: pkTilt 1.6s ease-in-out infinite; }
.il-karate.alive .k-kick { animation: pkKarate 1.2s ease-in-out infinite; }
.il-karate.alive .k-kiai { animation: pkTwinkle .3s ease-in-out infinite; }
.il-kangourou.alive .k-bound { animation: pkBounce .8s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-kangourou .k-joey { animation: pkPeek2 3s ease-in-out infinite; }
.il-kimono.alive .k-sleeveL { animation: pkTwitchL .8s ease-in-out infinite; }
.il-kimono.alive .k-sleeveR { animation: pkTwitchR .8s ease-in-out infinite; }
.il-balai.alive .k-sweep { animation: pkSweep .7s ease-in-out infinite alternate; }
.il-balai.alive .k-dust { animation: pkPuffOut .7s ease-out infinite; }
.il-lait.alive .k-splash { animation: pkSplash 1.2s ease-out infinite; }
.il-aigle .k-soar { animation: pkBob 3s ease-in-out infinite; }
.il-aigle.alive .k-wingL { animation: pkFlapL .4s ease-in-out infinite alternate; }
.il-aigle.alive .k-wingR { animation: pkFlapR .4s ease-in-out infinite alternate; }
.il-aile.alive .k-flap { animation: pkWingBeat .5s ease-in-out infinite alternate; }
.il-aimant.alive .k-clips { animation: pkPull 1.2s ease-in infinite; }
.il-aimant.alive .k-field { animation: pkTwinkle .6s ease-in-out infinite; }
.il-reine.alive .k-armL { animation: pkWaveL .6s ease-in-out infinite alternate; }
.il-reine.alive .k-head { animation: pkTilt 1.4s ease-in-out infinite; }
.il-baleine .k-swim { animation: pkBob 3s ease-in-out infinite; }
.il-baleine .k-spout { animation: pkBreathe 2s ease-in-out infinite; }
.il-baleine.alive .k-spout { animation: pkSpout 1.2s ease-out infinite; }
.il-baleine.alive .k-tail { animation: pkSlap .8s ease-in-out infinite; }
.il-taxi .k-sign { animation: pkTwinkle 1.6s steps(2) infinite; }
.il-taxi.alive .k-wheel { animation: pkSpin .5s linear infinite; }
.il-taxi.alive .k-drive { animation: pkRev 1.6s ease-in-out infinite; }
.il-mixeur.alive .k-whirl { animation: pkSpin .4s linear infinite; }
.il-mixeur.alive { animation: pkJiggle .1s ease-in-out infinite alternate; }
.il-klaxon.alive .k-bulb { animation: pkSqueezeBulb .5s ease-in-out infinite; }
.il-klaxon.alive .k-honk { animation: pkTwinkle .5s ease-in-out infinite; }
.il-boxeur.alive .k-bounce2 { animation: pkHopSmall .5s ease-in-out infinite; }
.il-boxeur.alive .k-armL { animation: pkJabL .5s ease-in-out infinite; }
.il-boxeur.alive .k-armR { animation: pkJabR .5s ease-in-out -.25s infinite; }

@keyframes pkOrbitStars { from { transform: rotate(0); } to { transform: rotate(360deg); } }
@keyframes pkKarate { 0%, 100% { transform: rotate(30deg); } 40%, 60% { transform: rotate(-6deg); } }
@keyframes pkPeek2 { 0%, 100% { transform: translateY(8px); } 40%, 70% { transform: translateY(-4px); } }
@keyframes pkSweep { from { transform: rotate(-12deg); } to { transform: rotate(8deg); } }
@keyframes pkWingBeat { from { transform: rotate(-12deg) scaleY(1); } to { transform: rotate(18deg) scaleY(.85); } }
@keyframes pkPull { 0% { transform: translateY(30px); opacity: 0; } 30% { opacity: 1; } 80%, 100% { transform: translateY(0); opacity: 1; } }
@keyframes pkSpout { 0% { transform: scaleY(.2); opacity: 0; } 30% { transform: scaleY(1.2); opacity: 1; } 80% { transform: scaleY(1); opacity: 1; } 100% { transform: scaleY(1.1); opacity: 0; } }
@keyframes pkSqueezeBulb { 0%, 100% { transform: scale(1); } 40% { transform: scale(.8, 1.1); } }
@keyframes pkJabL { 0%, 100% { transform: rotate(0); } 40% { transform: rotate(-50deg) translateY(-6px); } }
@keyframes pkJabR { 0%, 100% { transform: rotate(0); } 40% { transform: rotate(50deg) translateY(-6px); } }

/* Étage 9, première partie */
.il-elephant:not(.alive) .k-spray, .il-chapeau:not(.alive) .k-dove, .il-marteau:not(.alive) .k-bang, .il-cadeau:not(.alive) .k-sparks, .il-taureau:not(.alive) .k-snort, .il-corbeau:not(.alive) .k-croa, .il-gorille:not(.alive) .k-boom { opacity: 0; }
.il-elephant .k-ear { animation: pkSway 3s ease-in-out infinite; }
.il-elephant.alive .k-trunk { animation: pkTrunk 1.4s ease-in-out infinite; }
.il-elephant.alive .k-spray { animation: pkSplash 1.4s ease-out infinite; }
.il-elephant.alive .k-ear { animation: pkFlutter .4s ease-in-out infinite; }
.il-bateau .k-bob { animation: pkBob 2.6s ease-in-out infinite; }
.il-bateau .k-flag { animation: pkFlagSnap .5s ease-in-out infinite; }
.il-bateau.alive .k-bob { animation: pkRock 1.2s ease-in-out infinite; }
.il-bateau.alive .k-sail { animation: pkBreathe .6s ease-in-out infinite; }
.il-chapeau.alive .k-lift { animation: pkHatTip 2s ease-in-out infinite; }
.il-chapeau.alive .k-dove { animation: pkDove 2s ease-out infinite; }
.il-seau.alive .k-swing { animation: pkSway .9s ease-in-out infinite; }
.il-marteau.alive .k-hammer { animation: pkHammer .6s ease-in infinite; }
.il-marteau.alive .k-bang { animation: pkTwinkle .6s steps(2) infinite; }
.il-manteau.alive .k-swing { animation: pkSway 1.2s ease-in-out infinite; }
.il-rideau.alive .k-curL { animation: pkCurtL 2.4s ease-in-out infinite; }
.il-rideau.alive .k-curR { animation: pkCurtR 2.4s ease-in-out infinite; }
.il-cadeau.alive .k-lid { animation: pkGiftLid 1.6s ease-in-out infinite; }
.il-cadeau.alive .k-sparks { animation: pkPuffOut 1.6s ease-out infinite; }
.il-taureau.alive .k-paw { animation: pkPaw 1.4s ease-in-out infinite; }
.il-taureau.alive .k-charge { animation: pkRev 1.4s ease-in-out infinite; }
.il-taureau.alive .k-snort { animation: pkPuffOut .7s ease-out infinite; }
.il-taureau .k-tail { animation: pkSway 2s ease-in-out infinite; }
.il-chameau.alive .k-amble { animation: pkWaddle 1.2s ease-in-out infinite; }
.il-chameau.alive .k-chew { animation: pkLick .3s ease-in-out infinite alternate; }
.il-drapeau .k-flag { animation: pkFlagSnap 1.2s ease-in-out infinite; }
.il-drapeau.alive .k-flag { animation-duration: .35s; }
.il-corbeau.alive .k-beak { animation: pkQuack .3s ease-in-out infinite alternate; }
.il-corbeau.alive .k-wing { animation: pkLift .35s ease-in-out infinite; }
.il-corbeau.alive .k-croa { animation: pkNotes 1.2s ease-out infinite; }
.il-montagne .k-cloud { animation: pkDrift 5s ease-in-out infinite; }
.il-montagne.alive .k-sun { animation: pkSunrise 2.4s ease-in-out infinite; }
.il-montagne.alive .k-cloud { animation-duration: 1.6s; }
.il-araignee .k-drop { animation: pkSway 4s ease-in-out infinite; }
.il-araignee.alive .k-drop { animation: pkYoyo 1.6s ease-in-out infinite; }
.il-peigne.alive .k-comb { animation: pkBrush .5s ease-in-out infinite alternate; }
.il-vigne .k-bunch { animation: pkSway 3.4s ease-in-out infinite; }
.il-vigne.alive .k-bunch { animation-duration: .9s; }
.il-gnome.alive .k-hop { animation: pkBounce .8s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-gnome.alive .k-armR { animation: pkDig .8s ease-in-out infinite; }
.il-fille.alive .k-jump { animation: pkBounce .6s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-fille.alive .k-armL { animation: pkWaveL .3s ease-in-out infinite alternate; }
.il-fille.alive .k-armR { animation: pkWaveR .3s ease-in-out infinite alternate; }
.il-quille.alive .k-ball { animation: pkBowl 1.6s ease-in infinite; }
.il-quille.alive .k-wobble { animation: pkTopple2 1.6s ease-in-out infinite; }
.il-gorille.alive .k-armL { animation: pkChestL .4s ease-in-out infinite alternate; }
.il-gorille.alive .k-armR { animation: pkChestR .4s ease-in-out infinite alternate-reverse; }
.il-gorille.alive .k-boom { animation: pkTwinkle .4s ease-in-out infinite; }
.il-chenille .k-s0, .il-chenille .k-s2, .il-chenille .k-s4 { animation: pkInch 1.2s ease-in-out infinite; }
.il-chenille .k-s1, .il-chenille .k-s3 { animation: pkInch 1.2s ease-in-out -.6s infinite; }
.il-chenille.alive .k-seg { animation-duration: .4s; }
.il-chenille.alive .k-head { animation: pkNod .8s ease-in-out infinite; }
.il-coquille.alive .k-upper { animation: pkShellOpen 2s ease-in-out infinite; }

@keyframes pkTrunk { 0%, 100% { transform: rotate(0); } 40%, 60% { transform: rotate(-30deg); } }
@keyframes pkDove { 0%, 30% { opacity: 0; transform: translate(0, 10px) scale(.6); } 45% { opacity: 1; } 100% { opacity: 0; transform: translate(40px, -80px) scale(1); } }
@keyframes pkCurtL { 0%, 15%, 85%, 100% { transform: scaleX(1); } 40%, 60% { transform: scaleX(.45); } }
@keyframes pkCurtR { 0%, 15%, 85%, 100% { transform: scaleX(1); } 40%, 60% { transform: scaleX(.45); } }
@keyframes pkGiftLid { 0%, 20%, 80%, 100% { transform: translateY(0) rotate(0); } 40%, 60% { transform: translateY(-34px) rotate(-14deg); } }
@keyframes pkSunrise { 0%, 100% { transform: translateY(20px); } 50% { transform: translateY(-14px); } }
@keyframes pkYoyo { 0%, 100% { transform: translateY(-30px); } 50% { transform: translateY(20px); } }
@keyframes pkDig { 0%, 100% { transform: rotate(0); } 50% { transform: rotate(30deg) translateY(6px); } }
@keyframes pkBowl { 0% { transform: translateX(60px); } 45% { transform: translateX(-30px); } 46%, 100% { transform: translateX(-30px); opacity: 0; } }
@keyframes pkTopple2 { 0%, 42% { transform: rotate(0); } 55% { transform: rotate(-22deg); } 70% { transform: rotate(10deg); } 82% { transform: rotate(-4deg); } 100% { transform: rotate(0); } }
@keyframes pkChestL { from { transform: rotate(0); } to { transform: rotate(-50deg) translate(10px, -10px); } }
@keyframes pkChestR { from { transform: rotate(0); } to { transform: rotate(50deg) translate(-10px, -10px); } }
@keyframes pkInch { 0%, 100% { transform: translateY(0) scaleY(1); } 50% { transform: translateY(-8px) scaleY(1.06); } }
@keyframes pkShellOpen { 0%, 20%, 80%, 100% { transform: rotate(0); } 40%, 60% { transform: scaleY(.85) translateY(-6px) rotate(-6deg); } }

/* Étage 9, deuxième partie */
.il-hache:not(.alive) .k-chips, .il-harpe:not(.alive) .k-notes, .il-hippopotame:not(.alive) .k-mouth, .il-saxophone:not(.alive) .k-notes, .il-dauphin:not(.alive) .k-splash, .il-train:not(.alive) .k-smoke { opacity: 0; }
.il-grenouille .k-throat { animation: pkBreathe 2.4s ease-in-out infinite; }
.il-grenouille.alive .k-throat { animation: pkCroak .6s ease-in-out infinite; }
.il-grenouille.alive .k-hop { animation: pkBounce .9s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-feuille .k-fall { animation: pkSway 4s ease-in-out infinite; }
.il-feuille.alive .k-fall { animation: pkFeather 2.4s ease-in-out infinite; }
.il-grille.alive .k-gateL { animation: pkGateL 2.4s ease-in-out infinite; }
.il-grille.alive .k-gateR { animation: pkGateR 2.4s ease-in-out infinite; }
.il-hibou.alive .k-head { animation: pkOwlTurn 2s ease-in-out infinite; }
.il-hibou.alive .k-wingL { animation: pkFlapL .3s ease-in-out infinite alternate; }
.il-hibou.alive .k-wingR { animation: pkFlapR .3s ease-in-out infinite alternate; }
.il-hache.alive .k-chop { animation: pkChop 1s ease-in infinite; }
.il-hache.alive .k-chips { animation: pkPuffOut 1s ease-out infinite; }
.il-herisson.alive .k-trot { animation: pkScuttle 1.2s ease-in-out infinite; }
.il-herisson.alive .k-snout { animation: pkSniff .2s ease-in-out infinite alternate; }
.il-harpe.alive .k-str0 { animation: pkPluck .12s linear infinite alternate; }
.il-harpe.alive .k-str1 { animation: pkPluck .12s linear -.06s infinite alternate; }
.il-harpe.alive .k-notes { animation: pkNotes 1.4s ease-out infinite; }
.il-haricot.alive .k-beans { animation: pkHopSmall .5s ease-in-out infinite; }
.il-helicoptere .k-rotor { animation: pkProp .3s linear infinite; }
.il-helicoptere .k-tailrotor { animation: pkSpin .3s linear infinite; }
.il-helicoptere.alive .k-rotor { animation-duration: .06s; }
.il-helicoptere.alive .k-lift { animation: pkHeli 2s ease-in-out infinite; }
.il-hippopotame .k-bob { animation: pkBob 3s ease-in-out infinite; }
.il-hippopotame.alive .k-jaw { animation: pkYawn 1.8s ease-in-out infinite; }
.il-phoque.alive .k-ball { animation: pkBallBounce .6s ease-in-out infinite alternate; }
.il-phoque.alive .k-flipper { animation: pkClap .6s ease-in-out infinite; }
.il-dauphin.alive .k-leap { animation: pkLeap 1.8s ease-in-out infinite; }
.il-dauphin.alive .k-splash { animation: pkSplash 1.8s ease-out infinite; }
.il-phare .k-beam { animation: pkBeam 4s ease-in-out infinite; }
.il-phare.alive .k-beam { animation-duration: 1.4s; }
.il-saxophone.alive .k-swing { animation: pkSway .7s ease-in-out infinite; }
.il-saxophone.alive .k-notes { animation: pkNotes 1.2s ease-out infinite; }
.il-nenuphar .k-bob { animation: pkBob 3s ease-in-out infinite; }
.il-nenuphar.alive .k-bloom { animation: pkBloom 1.6s ease-in-out infinite; }
.il-main.alive .k-wave { animation: pkWave .4s ease-in-out infinite alternate; }
.il-main.alive .k-thumb { animation: pkTwitchL .4s ease-in-out infinite; }
.il-pain .k-steam { animation: pkSteam 2.6s ease-in-out infinite; }
.il-pain.alive .k-steam { animation-duration: 1.2s; }
.il-train.alive .k-wheel { animation: pkSpin .5s linear infinite; }
.il-train.alive .k-chug { animation: pkJiggle .25s ease-in-out infinite alternate; }
.il-train.alive .k-smoke { animation: pkPuffOut 1s ease-out infinite; }
.il-bain .k-bubbles { animation: pkBubbles 2.4s ease-in infinite; }
.il-bain .k-duck { animation: pkBob 2.4s ease-in-out infinite; }
.il-bain.alive .k-foam { animation: pkBreathe .8s ease-in-out infinite; }
.il-bain.alive .k-duck { animation: pkRock .8s ease-in-out infinite; }
.il-peintre.alive .k-armR { animation: pkPaint .6s ease-in-out infinite alternate; }
.il-medaille .k-twinkle { animation: pkTwinkle 1.6s ease-in-out infinite; }
.il-medaille.alive .k-turn { animation: pkPirouette 1.6s ease-in-out infinite; }

@keyframes pkGateL { 0%, 15%, 85%, 100% { transform: scaleX(1); } 40%, 60% { transform: scaleX(.3); } }
@keyframes pkGateR { 0%, 15%, 85%, 100% { transform: scaleX(1); } 40%, 60% { transform: scaleX(.3); } }
@keyframes pkOwlTurn { 0%, 100% { transform: rotate(0); } 25% { transform: rotate(-24deg); } 50% { transform: rotate(0); } 75% { transform: rotate(24deg); } }
@keyframes pkChop { 0%, 100% { transform: rotate(-40deg); } 60% { transform: rotate(4deg); } 70% { transform: rotate(0); } }
@keyframes pkPluck { from { transform: translateX(-1.5px); } to { transform: translateX(1.5px); } }
@keyframes pkHeli { 0%, 100% { transform: translateY(0); } 40%, 70% { transform: translateY(-30px) rotate(-4deg); } }
@keyframes pkYawn { 0%, 20%, 80%, 100% { transform: scaleY(1); } 40%, 60% { transform: scaleY(1.4) translateY(4px); } }
@keyframes pkBallBounce { from { transform: translateY(0) rotate(0); } to { transform: translateY(-24px) rotate(90deg); } }
@keyframes pkLeap { 0%, 100% { transform: translate(-10px, 20px) rotate(10deg); } 50% { transform: translate(10px, -20px) rotate(-14deg); } }
@keyframes pkBeam { 0%, 100% { transform: scaleX(1); } 50% { transform: scaleX(-1); } }
@keyframes pkPaint { from { transform: rotate(0); } to { transform: rotate(-40deg); } }

/* Étage 10, première partie */
.il-serpent:not(.alive) .k-hiss, .il-serpent:not(.alive) .k-tongue, .il-nuage:not(.alive) .k-rain, .il-citron:not(.alive) .k-drop, .il-cage:not(.alive) .k-song, .il-eponge:not(.alive) .k-squirt, .il-fromage:not(.alive) .k-crumbs, .il-glacon:not(.alive) .k-drop, .il-girafe:not(.alive) .k-tongue { opacity: 0; }
.il-serpent .k-rise { animation: pkSway 4s ease-in-out infinite; }
.il-serpent.alive .k-rise { animation: pkSlither 1s ease-in-out infinite; }
.il-serpent.alive .k-tongue { animation: pkTongue .5s ease-in-out infinite; }
.il-serpent.alive .k-hiss { animation: pkNotes 1.2s ease-out infinite; }
.il-nuage .k-puff { animation: pkBob 4s ease-in-out infinite; }
.il-nuage.alive .k-puff { animation: pkBreathe .8s ease-in-out infinite; }
.il-nuage.alive .k-rain { animation: pkRain .6s linear infinite; }
.il-citron.alive .k-half { animation: pkSqueeze .6s ease-in-out infinite; }
.il-citron.alive .k-drop { animation: pkDrip 1.2s ease-in infinite; }
.il-cerise .k-swing { animation: pkSway 3s ease-in-out infinite; }
.il-cerise.alive .k-swing { animation-duration: .7s; }
.il-glace.alive .k-drip { animation: pkDrip 1.6s ease-in infinite; }
.il-glace.alive { animation: pkWobble 1s ease-in-out infinite; transform-origin: 50% 94%; }
.il-cible.alive .k-arrow { animation: pkThwang2 1.4s ease-out infinite; }
.il-cible.alive .k-shake { animation: pkWobbleSmall 1.4s ease-out infinite; }
.il-cirque .k-flag { animation: pkFlagSnap .6s ease-in-out infinite; }
.il-cirque .k-lights { animation: pkTwinkle 1.4s ease-in-out infinite; }
.il-cirque.alive .k-lights { animation-duration: .4s; }
.il-ceinture.alive .k-buckle { animation: pkWobble .5s ease-in-out infinite; }
.il-balance.alive .k-beam { animation: pkSee 2s ease-in-out infinite; }
.il-balance.alive .k-panL, .il-balance.alive .k-panR { animation: pkSeeCounter 2s ease-in-out infinite; }
.il-garcon.alive .k-ball { animation: pkDribble .5s ease-in infinite alternate; }
.il-garcon.alive .k-armR { animation: pkTwitchR .5s ease-in-out infinite; }
.il-glacon.alive .k-slide { animation: pkSlide 1.4s ease-in-out infinite; }
.il-glacon.alive .k-drop { animation: pkDrip 1s ease-in infinite; }
.il-hamecon .k-float { animation: pkBob 2s ease-in-out infinite; }
.il-hamecon .k-worm { animation: pkWobble 1.4s ease-in-out infinite; }
.il-hamecon.alive .k-worm { animation-duration: .3s; }
.il-hamecon.alive .k-float { animation: pkBob .4s ease-in-out infinite; }
.il-girafe.alive .k-neck { animation: pkStretch 1.6s ease-in-out infinite; }
.il-girafe.alive .k-tongue { animation: pkTwinkle .4s ease-in-out infinite; }
.il-orange.alive .k-roll { animation: pkRollAcross 2s ease-in-out infinite; }
.il-cage .k-swing { animation: pkSway 3.4s ease-in-out infinite; }
.il-cage.alive .k-bird { animation: pkHopSmall .5s ease-in-out infinite; }
.il-cage.alive .k-song { animation: pkNotes 1.2s ease-out infinite; }
.il-eponge.alive .k-squeeze { animation: pkSqueeze .7s ease-in-out infinite; }
.il-eponge.alive .k-squirt { animation: pkPuffOut .7s ease-out infinite; }
.il-fromage.alive .k-mouse { animation: pkNibble .25s ease-in-out infinite alternate; }
.il-fromage.alive .k-crumbs { animation: pkDrip .8s ease-in infinite; }
.il-geant.alive .k-stomp { animation: pkGiantStep 1.6s ease-in-out infinite; }
.il-geant.alive .k-tree, .il-geant.alive .k-house { animation: pkQuake 1.6s ease-in-out infinite; }

@keyframes pkSlither { 0%, 100% { transform: skewX(-4deg) translateX(-3px); } 50% { transform: skewX(4deg) translateX(3px); } }
@keyframes pkRain { from { transform: translateY(-8px); opacity: 0; } 30% { opacity: 1; } to { transform: translateY(12px); opacity: 0; } }
@keyframes pkThwang2 { 0% { transform: translate(60px, -44px); opacity: 0; } 15% { opacity: 1; } 40% { transform: translate(0, 0); } 48% { transform: rotate(3deg); } 56% { transform: rotate(-2deg); } 64%, 100% { transform: rotate(0); } }
@keyframes pkWobbleSmall { 0%, 38%, 100% { transform: rotate(0); } 45% { transform: rotate(-3deg); } 55% { transform: rotate(2deg); } }
@keyframes pkSee { 0%, 100% { transform: rotate(-10deg); } 50% { transform: rotate(10deg); } }
@keyframes pkSeeCounter { 0%, 100% { transform: rotate(10deg); } 50% { transform: rotate(-10deg); } }
@keyframes pkDribble { from { transform: translateY(0) scale(1.06, .92); } to { transform: translateY(-34px); } }
@keyframes pkGiantStep { 0%, 100% { transform: rotate(0) translateY(0); } 30% { transform: rotate(-3deg) translateY(-6px); } 50% { transform: rotate(0) translateY(0) scale(1.02, .98); } }
@keyframes pkQuake { 0%, 45%, 70%, 100% { transform: translate(0, 0); } 50% { transform: translate(-2px, -3px); } 55% { transform: translate(2px, 0); } 60% { transform: translate(-1px, -2px); } }

/* Étage 10, deuxième partie */
.il-guitare:not(.alive) .k-notes, .il-arrosoir:not(.alive) .k-water, .il-sorcier:not(.alive) .k-magic, .il-policier:not(.alive) .k-tweet, .il-nez:not(.alive) .k-sniff, .il-maison:not(.alive) .k-light { opacity: 0; }
.il-bougie .k-flame { animation: pkFlicker 1.2s ease-in-out infinite; }
.il-bougie.alive .k-flame { animation-duration: .3s; }
.il-bougie.alive .k-wax { animation: pkDrip 2s ease-in infinite; }
.il-guitare.alive .k-strum { animation: pkSway .8s ease-in-out infinite; }
.il-guitare.alive .k-strings { animation: pkPluck .08s linear infinite alternate; }
.il-guitare.alive .k-notes { animation: pkNotes 1.2s ease-out infinite; }
.il-fusee .k-stars { animation: pkTwinkle 1.4s ease-in-out infinite; }
.il-fusee .k-thrust { animation: pkFlicker .4s ease-in-out infinite; }
.il-fusee.alive .k-launch { animation: pkLaunch 2s ease-in infinite; }
.il-fusee.alive .k-thrust { animation-duration: .12s; }
.il-chemise.alive .k-billow { animation: pkSkirt .6s ease-in-out infinite alternate; }
.il-valise.alive .k-hop { animation: pkBounce .6s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-maison .k-smoke { animation: pkSteam 3s ease-in-out infinite; }
.il-maison.alive .k-light { animation: pkTwinkle 1s steps(2) infinite; }
.il-arrosoir.alive .k-tip { animation: pkPour 2s ease-in-out infinite; }
.il-arrosoir.alive .k-water { animation: pkRain .5s linear infinite; }
.il-arrosoir.alive .k-sprout { animation: pkGrow 2s ease-in-out infinite; }
.il-ciseaux.alive .k-bladeA { animation: pkSnipA .4s ease-in-out infinite alternate; }
.il-ciseaux.alive .k-bladeB { animation: pkSnipB .4s ease-in-out infinite alternate; }
.il-poison .k-fume { animation: pkSteam 2.4s ease-in-out infinite; }
.il-poison.alive .k-fume { animation: pkCackle .8s ease-in-out infinite; }
.il-jardinier.alive .k-armR { animation: pkDig .8s ease-in-out infinite; }
.il-panier.alive .k-swing { animation: pkSway .9s ease-in-out infinite; }
.il-tablier .k-strings { animation: pkSway 3s ease-in-out infinite; }
.il-tablier.alive .k-strings { animation: pkFlagSnap .3s ease-in-out infinite; }
.il-sorcier .k-spark { animation: pkTwinkle 1.4s ease-in-out infinite; }
.il-sorcier.alive .k-armR { animation: pkCast 1.2s ease-in-out infinite; }
.il-sorcier.alive .k-magic { animation: pkPuffOut 1.2s ease-out infinite; }
.il-boulanger.alive .k-armR { animation: pkWand 1s ease-in-out infinite; }
.il-boulanger.alive .k-head { animation: pkTilt 1.4s ease-in-out infinite; }
.il-policier.alive .k-armL { animation: pkStop 1.2s ease-in-out infinite; }
.il-policier.alive .k-tweet { animation: pkTwinkle .3s ease-in-out infinite; }
.il-encrier.alive .k-quill { animation: pkWrite .9s ease-in-out infinite; }
.il-encrier.alive .k-ink { animation: pkErase 1.8s linear infinite; }
.il-nez.alive .k-nose { animation: pkSneeze 1.6s ease-in-out infinite; }
.il-nez.alive .k-sniff { animation: pkTwinkle .4s ease-in-out infinite; }
.il-dent .k-shine { animation: pkTwinkle 1.6s ease-in-out infinite; }
.il-dent.alive .k-hop { animation: pkBounce .7s cubic-bezier(.3, 0, .5, 1) infinite; }

@keyframes pkLaunch { 0% { transform: translateY(0); } 15% { transform: translate(-1px, 0); } 20% { transform: translate(1px, 0); } 100% { transform: translateY(-60px); opacity: .2; } }
@keyframes pkPour { 0%, 15%, 85%, 100% { transform: rotate(0); } 35%, 65% { transform: rotate(18deg); } }
@keyframes pkGrow { 0%, 30% { transform: scale(.7); } 70%, 100% { transform: scale(1.15); } }
@keyframes pkSnipA { from { transform: rotate(0); } to { transform: rotate(-16deg); } }
@keyframes pkSnipB { from { transform: rotate(0); } to { transform: rotate(16deg); } }
@keyframes pkCackle { 0%, 100% { transform: translateY(0) scale(1); } 50% { transform: translateY(-8px) scale(1.15) rotate(8deg); } }
@keyframes pkCast { 0%, 100% { transform: rotate(0); } 40% { transform: rotate(30deg); } 60% { transform: rotate(-24deg); } }
@keyframes pkStop { 0%, 100% { transform: rotate(0); } 50% { transform: rotate(-12deg); } }
@keyframes pkWrite { 0%, 100% { transform: translate(0, 0) rotate(0); } 25% { transform: translate(-6px, 4px) rotate(-4deg); } 50% { transform: translate(-12px, 0); } 75% { transform: translate(-6px, -3px) rotate(3deg); } }
@keyframes pkSneeze { 0%, 50%, 100% { transform: scale(1); } 10%, 30% { transform: scale(1.06, .96); } 20%, 40% { transform: scale(.96, 1.06); } 60% { transform: scale(1.18) translateY(-4px); } }

/* Étage 10, troisième partie */
.il-ventilateur:not(.alive) .k-wind, .il-dentifrice:not(.alive) .k-paste, .il-robinet:not(.alive) .k-water, .il-robinet:not(.alive) .k-drop, .il-oreille:not(.alive) .k-waves, .il-escargot:not(.alive) .k-trail { opacity: 0; }
.il-ventilateur .k-blades { animation: pkSpin 3s linear infinite; }
.il-ventilateur.alive .k-blades { animation-duration: .2s; }
.il-ventilateur.alive .k-wind { animation: pkClouds .5s linear infinite; }
.il-pendule .k-pendulum { animation: pkSway 2s ease-in-out infinite; }
.il-pendule .k-minute { animation: pkSpin 60s linear infinite; }
.il-pendule.alive .k-pendulum { animation-duration: .8s; }
.il-pendule.alive .k-minute { animation-duration: 2s; }
.il-pendule.alive .k-hour { animation: pkSpin 24s linear infinite; }
.il-dentifrice.alive .k-tube { animation: pkSqueeze 1.2s ease-in-out infinite; }
.il-dentifrice.alive .k-paste { animation: pkGrow 1.2s ease-out infinite; transform-origin: 140px 130px; }
.il-empreinte.alive .k-p0 { animation: pkStepIn 2.5s ease-out infinite; }
.il-empreinte.alive .k-p1 { animation: pkStepIn 2.5s ease-out .5s infinite; }
.il-empreinte.alive .k-p2 { animation: pkStepIn 2.5s ease-out 1s infinite; }
.il-empreinte.alive .k-p3 { animation: pkStepIn 2.5s ease-out 1.5s infinite; }
.il-empreinte.alive .k-p4 { animation: pkStepIn 2.5s ease-out 2s infinite; }
.il-poulet .k-steam { animation: pkSteam 2.6s ease-in-out infinite; }
.il-poulet.alive .k-steam { animation-duration: 1s; }
.il-bonnet .k-pompom { animation: pkSway 3s ease-in-out infinite; }
.il-bonnet.alive .k-pompom { animation: pkBounce .5s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-robinet.alive .k-handle { animation: pkKeyTurn 2s ease-in-out infinite; }
.il-robinet.alive .k-water { animation: pkTwinkle .3s ease-in-out infinite; }
.il-robinet.alive .k-drop { animation: pkDrip .5s ease-in infinite; }
.il-raquette.alive .k-swing { animation: pkSwing2 1s ease-in-out infinite; }
.il-raquette.alive .k-ball { animation: pkVolley 1s ease-in-out infinite; }
.il-fourchette.alive .k-stab { animation: pkStabUp 1.2s ease-in-out infinite; }
.il-assiette.alive .k-spin { animation: pkPlateSpin 1s ease-in-out infinite; }
.il-poubelle .k-fly { animation: pkBuzz 2s ease-in-out infinite; }
.il-poubelle.alive .k-lid { animation: pkLidFlip 1.2s ease-in-out infinite; }
.il-echelle.alive .k-teeter { animation: pkTeeter 1.6s ease-in-out infinite; }
.il-echelle .k-pot { animation: pkSway 2.4s ease-in-out infinite; }
.il-escargot .k-head { animation: pkSway 3s ease-in-out infinite; }
.il-escargot.alive .k-crawl { animation: pkCrawl2 2.4s ease-in-out infinite; }
.il-escargot.alive .k-trail { animation: pkTwinkle 1.2s ease-in-out infinite; }
.il-baguette .k-trail { animation: pkTwinkle 1.4s ease-in-out infinite; }
.il-baguette.alive .k-wave { animation: pkWandLoop 1s ease-in-out infinite; }
.il-baguette.alive .k-trail { animation-duration: .35s; }
.il-abeille .k-wings { animation: pkFlutter .3s ease-in-out infinite; }
.il-abeille .k-buzz { animation: pkBob 2s ease-in-out infinite; }
.il-abeille.alive .k-wings { animation-duration: .06s; }
.il-abeille.alive .k-buzz { animation: pkBuzzFlower 2s ease-in-out infinite; }
.il-oreille.alive .k-listen { animation: pkTilt .8s ease-in-out infinite; }
.il-oreille.alive .k-waves { animation: pkWaveIn 1s ease-in infinite; }
.il-bouteille .k-float { animation: pkRock 3s ease-in-out infinite; }
.il-bouteille.alive .k-float { animation-duration: 1s; }

@keyframes pkStepIn { 0% { opacity: 0; transform: scale(.4); } 15% { opacity: 1; transform: scale(1.1); } 25%, 85% { opacity: 1; transform: scale(1); } 100% { opacity: 0; } }
@keyframes pkSwing2 { 0%, 100% { transform: rotate(20deg); } 45% { transform: rotate(-30deg); } }
@keyframes pkVolley { 0%, 100% { transform: translate(-50px, 30px); } 45% { transform: translate(0, 0); } 70% { transform: translate(20px, -30px); } }
@keyframes pkStabUp { 0%, 100% { transform: translateY(0) rotate(0); } 50% { transform: translateY(-14px) rotate(-6deg); } }
@keyframes pkPlateSpin { 0%, 100% { transform: scaleX(1) rotate(0); } 50% { transform: scaleX(.6) rotate(8deg); } }
@keyframes pkLidFlip { 0%, 20%, 80%, 100% { transform: rotate(0); } 45%, 55% { transform: rotate(-40deg); } }
@keyframes pkTeeter { 0%, 100% { transform: rotate(0); } 30% { transform: rotate(-6deg); } 55% { transform: rotate(4deg); } 75% { transform: rotate(-2deg); } }
@keyframes pkCrawl2 { 0%, 100% { transform: translateX(-12px) scaleX(1); } 50% { transform: translateX(12px) scaleX(1.06); } }
@keyframes pkWandLoop { 0%, 100% { transform: rotate(-10deg); } 25% { transform: rotate(6deg) translateY(-6px); } 50% { transform: rotate(14deg); } 75% { transform: rotate(0) translateY(6px); } }
@keyframes pkBuzzFlower { 0%, 100% { transform: translate(0, 0); } 30% { transform: translate(-50px, 30px) rotate(-10deg); } 50% { transform: translate(-56px, 34px) rotate(-6deg); } 70% { transform: translate(-20px, -10px); } }
@keyframes pkWaveIn { 0% { transform: translateX(-20px); opacity: 0; } 40% { opacity: 1; } 100% { transform: translateX(30px); opacity: 0; } }

/* Étage 11 */
.il-parfum:not(.alive) .k-mist, .il-poing:not(.alive) .k-boom, .il-foin:not(.alive) .k-mouse, .il-chien:not(.alive) .k-woof, .il-musicien:not(.alive) .k-notes, .il-hexagone .k-side, .il-reveil:not(.alive) .k-drring, .il-eventail:not(.alive) .k-wind, .il-ail:not(.alive) .k-smell, .il-shampoing:not(.alive) .k-foam, .il-magicien:not(.alive) .k-rabbit { opacity: 0; }
.il-parfum.alive .k-bulb { animation: pkSqueezeBulb .8s ease-in-out infinite; }
.il-parfum.alive .k-mist { animation: pkPuffOut .8s ease-out infinite; }
.il-jungle .k-left { animation: pkSway 4s ease-in-out infinite; }
.il-jungle .k-right { animation: pkSway 4s ease-in-out -2s infinite; }
.il-jungle.alive .k-left { animation: pkPartL 2s ease-in-out infinite; }
.il-jungle.alive .k-right { animation: pkPartR 2s ease-in-out infinite; }
.il-jungle.alive .k-parrot { animation: pkBatOut 2s ease-in-out infinite; }
.il-lundi.alive .k-page { animation: pkPageFlip 1.6s ease-in-out infinite; }
.il-poing.alive .k-thump { animation: pkThump .7s cubic-bezier(.5, 0, .7, 1) infinite; }
.il-poing.alive .k-boom { animation: pkTwinkle .7s steps(2) infinite; }
.il-foin .k-wisps { animation: pkSway 3s ease-in-out infinite; }
.il-foin.alive .k-wisps { animation: pkPuffOut 1s ease-out infinite; }
.il-foin.alive .k-mouse { animation: pkPeek 2s ease-in-out infinite; }
.il-shampoing .k-bubbles { animation: pkBubbles 2.4s ease-in infinite; }
.il-shampoing.alive .k-squeeze { animation: pkSqueeze .8s ease-in-out infinite; }
.il-shampoing.alive .k-foam { animation: pkGrow .8s ease-out infinite; transform-origin: 100px 40px; }
.il-chien .k-tail { animation: pkSway 2s ease-in-out infinite; }
.il-chien.alive .k-tail { animation: pkSwish .25s ease-in-out infinite; }
.il-chien.alive .k-tongue { animation: pkLick .3s ease-in-out infinite alternate; }
.il-chien.alive .k-head { animation: pkTilt 1s ease-in-out infinite; }
.il-chien.alive .k-woof { animation: pkNotes 1s ease-out infinite; }
.il-magicien .k-spark { animation: pkTwinkle 1.4s ease-in-out infinite; }
.il-magicien.alive .k-armR { animation: pkCast 1s ease-in-out infinite; }
.il-magicien.alive .k-rabbit { animation: pkRabbit 2s ease-in-out infinite; }
.il-musicien.alive .k-cheeks { animation: pkBreathe .4s ease-in-out infinite; }
.il-musicien.alive .k-trumpet { animation: pkJiggle .25s ease-in-out infinite alternate; }
.il-musicien.alive .k-notes { animation: pkNotes 1s ease-out infinite; }
.il-mecanicien.alive .k-armR { animation: pkWrench .6s ease-in-out infinite alternate; }
.il-gardien.alive .k-dive { animation: pkJump .9s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-gardien.alive .k-ball { animation: pkCatch .9s ease-in-out infinite; }
.il-exercice.alive .k-jack { animation: pkBounce .6s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-exercice.alive .k-armL { animation: pkJackL .6s ease-in-out infinite; }
.il-exercice.alive .k-armR { animation: pkJackR .6s ease-in-out infinite; }
.il-hexagone.alive .k-spin { animation: pkSpin 3s linear infinite; }
.il-hexagone.alive .k-sd0 { animation: pkSideOn 1.8s linear infinite; }
.il-hexagone.alive .k-sd1 { animation: pkSideOn 1.8s linear .3s infinite; }
.il-hexagone.alive .k-sd2 { animation: pkSideOn 1.8s linear .6s infinite; }
.il-hexagone.alive .k-sd3 { animation: pkSideOn 1.8s linear .9s infinite; }
.il-hexagone.alive .k-sd4 { animation: pkSideOn 1.8s linear 1.2s infinite; }
.il-hexagone.alive .k-sd5 { animation: pkSideOn 1.8s linear 1.5s infinite; }
.il-examen.alive .k-stamp { animation: pkStamp 1.4s ease-out infinite; }
.il-soleil .k-rays { animation: pkSpin 20s linear infinite; }
.il-soleil.alive .k-rays { animation: pkSunPulse 1s ease-in-out infinite; }
.il-orteil.alive .k-toe1 { animation: pkToe .3s ease-in-out infinite alternate; }
.il-orteil.alive .k-toe2 { animation: pkToe .3s ease-in-out -.06s infinite alternate; }
.il-orteil.alive .k-toe3 { animation: pkToe .3s ease-in-out -.12s infinite alternate; }
.il-orteil.alive .k-toe4 { animation: pkToe .3s ease-in-out -.18s infinite alternate; }
.il-orteil.alive .k-toe5 { animation: pkToe .3s ease-in-out -.24s infinite alternate; }
.il-reveil.alive .k-ring { animation: pkJiggle .08s ease-in-out infinite alternate; }
.il-reveil.alive .k-hammer { animation: pkRing .1s ease-in-out infinite; }
.il-reveil.alive .k-drring { animation: pkTwinkle .2s ease-in-out infinite; }
.il-eventail.alive .k-fan { animation: pkFanWave .4s ease-in-out infinite alternate; }
.il-eventail.alive .k-wind { animation: pkClouds .6s linear infinite; }
.il-epouvantail .k-crow { animation: pkHopSmall 2s ease-in-out infinite; }
.il-epouvantail.alive .k-arms { animation: pkWobble .5s ease-in-out infinite; }
.il-epouvantail.alive .k-crow { animation: pkBatOut 1.6s ease-in infinite; }
.il-portail.alive .k-doorL { animation: pkGateL 2.4s ease-in-out infinite; }
.il-portail.alive .k-doorR { animation: pkGateR 2.4s ease-in-out infinite; }
.il-ail.alive .k-waddle { animation: pkWaddle .8s ease-in-out infinite; }
.il-ail.alive .k-smell { animation: pkSteam 1.4s ease-in-out infinite; }
.il-ecureuil .k-tail { animation: pkSway 3s ease-in-out infinite; }
.il-ecureuil.alive .k-tail { animation: pkSwish .4s ease-in-out infinite; }
.il-ecureuil.alive .k-chew, .il-ecureuil.alive .k-nut { animation: pkNibble .2s ease-in-out infinite alternate; }
.il-fauteuil.alive .k-rock { animation: pkWobble 1.2s ease-in-out infinite; }
.il-chevreuil.alive .k-leap { animation: pkBounce .9s cubic-bezier(.3, 0, .5, 1) infinite; }
.il-chevreuil.alive .k-ear { animation: pkTwitchL .6s ease-in-out infinite; }

@keyframes pkPartL { 0%, 100% { transform: rotate(0); } 40%, 70% { transform: rotate(-14deg); } }
@keyframes pkPartR { 0%, 100% { transform: rotate(0); } 40%, 70% { transform: rotate(14deg); } }
@keyframes pkPageFlip { 0%, 30% { transform: scaleY(1); } 55% { transform: scaleY(-.1); } 70%, 100% { transform: scaleY(1); } }
@keyframes pkThump { 0%, 100% { transform: translateY(-20px); } 50% { transform: translateY(0) scale(1.04, .96); } }
@keyframes pkRabbit { 0%, 20% { opacity: 0; transform: translateY(20px); } 40%, 80% { opacity: 1; transform: translateY(-10px); } 100% { opacity: 0; transform: translateY(20px); } }
@keyframes pkWrench { from { transform: rotate(0); } to { transform: rotate(-30deg); } }
@keyframes pkJump { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-20px); } }
@keyframes pkCatch { 0% { transform: translate(60px, 40px); } 50%, 100% { transform: translate(0, 0); } }
@keyframes pkJackL { 0%, 100% { transform: rotate(-90deg); } 50% { transform: rotate(0); } }
@keyframes pkJackR { 0%, 100% { transform: rotate(90deg); } 50% { transform: rotate(0); } }
@keyframes pkSideOn { 0%, 30%, 100% { opacity: 0; } 10% { opacity: 1; } }
@keyframes pkSunPulse { 0%, 100% { transform: scale(1) rotate(0); } 50% { transform: scale(1.12) rotate(12deg); } }
@keyframes pkToe { from { transform: translateY(0) rotate(-4deg); } to { transform: translateY(-4px) rotate(4deg); } }
@keyframes pkFanWave { from { transform: rotate(-10deg); } to { transform: rotate(10deg); } }

/* ---------- La gargouille du donjon (carte A2, js/gargouille.js) ----------
   Un visage par humeur ; le bouton .garg-btn porte l'humeur (.happy, .kissed, data-face). Au repos : ailes, oreilles, clignement. */
.garg-btn .garg .k-gf { opacity: 0; }
.garg-btn:not(.happy):not(.kissed):not([data-face]) .k-gf-norm,
.garg-btn.happy:not(.kissed):not([data-face]) .k-gf-happy,
.garg-btn.kissed:not([data-face]) .k-gf-kiss,
.garg-btn[data-face="mock"] .k-gf-mock, .garg-btn[data-face="shock"] .k-gf-shock,
.garg-btn[data-face="ouch"] .k-gf-ouch, .garg-btn[data-face="dizzy"] .k-gf-dizzy { opacity: 1; }
.garg .k-gwL { animation: gargStretchL 7s ease-in-out infinite; }
.garg .k-gwR { animation: gargStretchR 7s .15s ease-in-out infinite; }
.garg .k-gearL { animation: gargEarL 5.2s ease-in-out infinite; }
.garg .k-gearR { animation: gargEarR 6.1s 1.3s ease-in-out infinite; }
.garg .k-geyes { animation: gargBlink 4.4s infinite; }
/* Elle parle : la mâchoire bat tant que sa voix joue (body.speaking, js/audio.js) */
body.speaking .garg-btn.talk .k-gmouth { animation: gargJaw .17s ease-in-out infinite alternate; }
.garg-btn.talk .garg { animation: gargNod .6s ease-in-out infinite alternate; transform-origin: 50% 90%; }
.garg-btn.grr { animation: shake .45s; }
.garg-btn[data-face="mock"] { animation: gargLaugh .35s ease-in-out 4; }
.garg-btn[data-face="mock"] .k-gtongue { animation: gargTongue .22s ease-in-out infinite alternate; }
.garg-btn[data-face="shock"] .k-geyeball { transform-box: fill-box; transform-origin: center; animation: gargEyePop .5s cubic-bezier(.3, 2, .5, 1) both, gargEyeWob 1.2s .5s ease-in-out infinite; }
.garg-btn[data-face="dizzy"] .k-gspiral { animation: gargSpiral 1s linear infinite; }
.garg-btn[data-face="dizzy"] .garg { animation: gargWobble 1.4s ease-in-out infinite; transform-origin: 50% 95%; }
.garg .k-gstar { animation: gargOrbit 1.2s linear infinite; }
.garg .k-gstar1 { animation-delay: -.4s; } .garg .k-gstar2 { animation-delay: -.8s; }
/* Le bisou : il fond (s'affaisse, penche, se tortille), ses yeux-cœurs battent, des cœurs montent */
.garg-btn.kissed .garg { animation: gargMelt 1.6s ease-out both, gargSwoon 2.4s 1.6s ease-in-out infinite; transform-origin: 50% 96%; }
.garg-btn.kissed .k-gheart { animation: gargBeat .5s ease-in-out infinite alternate; }
.garg .k-gfloat { opacity: 0; }
.garg-btn.kissed .k-gfloat { transform-box: fill-box; transform-origin: center; animation: gargFloat 2.2s ease-out infinite; }
.garg-btn.kissed .k-gfloat1 { animation-delay: .7s; } .garg-btn.kissed .k-gfloat2 { animation-delay: 1.4s; }
@keyframes gargStretchL { 0%, 55%, 100% { transform: none; } 70% { transform: rotate(-9deg) scale(1.07); } 80% { transform: rotate(-11deg) scale(1.09); } }
@keyframes gargStretchR { 0%, 55%, 100% { transform: none; } 70% { transform: rotate(9deg) scale(1.07); } 80% { transform: rotate(11deg) scale(1.09); } }
@keyframes gargEarL { 0%, 78%, 90%, 100% { transform: none; } 82% { transform: rotate(-16deg); } 86% { transform: rotate(4deg); } }
@keyframes gargEarR { 0%, 80%, 92%, 100% { transform: none; } 84% { transform: rotate(16deg); } 88% { transform: rotate(-4deg); } }
@keyframes gargBlink { 0%, 90%, 96%, 100% { transform: none; } 93% { transform: scaleY(.08); } }
@keyframes gargJaw { from { transform: scaleY(1); } to { transform: scaleY(2.1); } }
@keyframes gargNod { from { transform: rotate(-2deg); } to { transform: rotate(2deg) translateY(-2%); } }
@keyframes gargLaugh { 50% { transform: translateY(-6%) rotate(-4deg); } }
@keyframes gargTongue { from { transform: rotate(-9deg) scaleY(.92); } to { transform: rotate(9deg) scaleY(1.06); } }
@keyframes gargEyePop { from { transform: scale(.3); } }
@keyframes gargEyeWob { 50% { transform: scale(1.12, .9); } }
@keyframes gargSpiral { to { transform: rotate(360deg); } }
@keyframes gargWobble { 0%, 100% { transform: rotate(-6deg); } 50% { transform: rotate(6deg); } }
@keyframes gargOrbit { 0% { transform: translate(-36px, 6px) scale(.9); } 25% { transform: translate(0, 13px) scale(1.1); } 50% { transform: translate(36px, 6px) scale(.9); } 75% { transform: translate(0, -2px) scale(.65); } 100% { transform: translate(-36px, 6px) scale(.9); } }
@keyframes gargMelt { 0% { transform: none; } 35% { transform: scale(1.1, .82) rotate(-4deg); } 60% { transform: scale(.94, 1.08) rotate(3deg); } 100% { transform: scale(1.06, .9) rotate(-3deg); } }
@keyframes gargSwoon { 0%, 100% { transform: scale(1.06, .9) rotate(-3deg); } 50% { transform: scale(1.04, .92) rotate(4deg); } }
@keyframes gargBeat { from { transform: scale(.9); } to { transform: scale(1.15); } }
@keyframes gargFloat { 0% { opacity: 0; transform: translateY(14px) scale(.5); } 20% { opacity: 1; } 100% { opacity: 0; transform: translateY(-40px) scale(1.1) rotate(10deg); } }
@media (prefers-reduced-motion: reduce) { .garg .k-gw, .garg .k-gear, .garg .k-gstar, .garg-btn .garg { animation: none !important; } }

@keyframes pkSway { 0%, 100% { transform: rotate(-4deg); } 50% { transform: rotate(4deg); } }
@keyframes pkSwish { 0%, 100% { transform: rotate(-10deg); } 50% { transform: rotate(14deg); } }
@keyframes pkTilt { 0%, 100% { transform: rotate(0); } 30%, 60% { transform: rotate(-9deg); } }
@keyframes pkTwitch { 0%, 70%, 100% { transform: rotate(0); } 76% { transform: rotate(14deg); } 82% { transform: rotate(-4deg); } 88% { transform: rotate(9deg); } }
@keyframes pkRing { 0%, 100% { transform: rotate(-16deg); } 50% { transform: rotate(16deg); } }
@keyframes pkSpin { to { transform: rotate(360deg); } }
@keyframes pkBounce { 0%, 100% { transform: translateY(0) scale(1.08, .9); } 12% { transform: translateY(0) scale(.94, 1.07); } 50% { transform: translateY(-16%) scale(1, 1); } 88% { transform: translateY(0) scale(1, 1); } }
@keyframes pkRide { 0%, 100% { transform: translateX(-5%); } 50% { transform: translateX(5%) rotate(-1.5deg); } }
@keyframes pkBow { from { transform: translate(-13px, -7px); } to { transform: translate(13px, 7px); } }
@keyframes pkNotes { 0% { opacity: 0; transform: translateY(10px) scale(.7); } 25% { opacity: 1; } 100% { opacity: 0; transform: translateY(-16px) scale(1.05); } }

/* ---------- Les dernières (pics-19.js) : île, usine, ange, et les verbes joués par une créature ---------- */
.il-ile .k-fronds { animation: pkSway 3.4s ease-in-out infinite; }
.il-ile.alive .k-fronds { animation: pkSway 1.4s ease-in-out infinite; }
.il-ile.alive .k-waves { animation: pkDrift 2.4s ease-in-out infinite; }
.il-ile .k-gull { animation: pkBob 3s ease-in-out infinite; }
.il-ile.alive .k-gull { animation: ilGull 4s ease-in-out infinite; }
.il-ile.alive .k-sun { animation: pkTwinkle 2.6s ease-in-out infinite; }
@keyframes ilGull { 0%, 100% { transform: translate(0, 0); } 25% { transform: translate(20px, -8px); } 50% { transform: translate(44px, 2px); } 75% { transform: translate(20px, 6px); } }
.il-usine:not(.alive) .k-smoke2 { opacity: .8; }
.il-usine.alive .k-smoke1 { animation: pkPuffOut 2s ease-out infinite; }
.il-usine.alive .k-smoke2 { animation: pkPuffOut 2s ease-out -1s infinite; }
.il-usine.alive .k-gear { animation: pkSpin 3s linear infinite; }
.il-ange .k-halo { animation: pkBob 3s ease-in-out infinite; }
.il-ange.alive .k-float { animation: ilAngelFloat 2.4s ease-in-out infinite; }
.il-ange.alive .k-wingL { animation: pkFlapL .45s ease-in-out infinite alternate; }
.il-ange.alive .k-wingR { animation: pkFlapR .45s ease-in-out infinite alternate; }
.il-ange.alive .k-star { animation: pkTwinkle 1.2s ease-in-out infinite; }
@keyframes ilAngelFloat { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } }
/* Les verbes : à l'arrêt, la créature est figée au moment clé du geste (--key) ; vivante, elle le joue en entier */
.il.pk:not(.alive) .pk-verb * { animation-play-state: paused !important; animation-delay: calc(var(--key, 0s) * -1) !important; }

/* ---------- Créatures (svg.cr2) ---------- */
.cr2 { overflow: visible; }
.cr2 g { transform-box: view-box; }
.cr2 .c-e-happy, .cr2 .c-e-sleep, .cr2 .c-m-ah, .cr2 .c-m-o, .cr2 .c-ahh, .cr2 .c-puff { opacity: 0; }
.cr2 .c-e-open { transform-box: fill-box; transform-origin: center; animation: ilBlink 4.4s infinite; }
.cr2 .c-body { animation: crBreath 3.6s ease-in-out infinite; }
@keyframes crBreath { 0%, 100% { transform: scale(1, 1); } 50% { transform: scale(1.015, .985); } }

/* Boire : il lève le verre à deux mains, le penche, avale trois gorgées (le niveau baisse), le repose… « Ahh ! » */
.ca-drink .c-armL { animation: crDrinkL 3.4s ease-in-out infinite; }
.ca-drink .c-armR { animation: crDrinkR 3.4s ease-in-out infinite; }
.ca-drink .c-cup { animation: crCup 3.4s ease-in-out infinite; }
.ca-drink .c-juice { animation: crJuice 3.4s ease-in-out infinite; }
.ca-drink .c-body { animation: crGulp 3.4s ease-in-out infinite; }
.ca-drink .c-e-open { animation: crShowOpen 3.4s step-end infinite; }
.ca-drink .c-e-sleep { animation: crShowDrink 3.4s step-end infinite; }
.ca-drink .c-e-happy, .ca-drink .c-m-ah { animation: crShowAh 3.4s step-end infinite; }
.ca-drink .c-m-rest { animation: crShowOpen 3.4s step-end infinite; }
.ca-drink .c-ahh { animation: crAhh 3.4s ease-out infinite; }
@keyframes crDrinkL { 0%, 8%, 74%, 100% { transform: rotate(var(--l0)); } 22%, 64% { transform: rotate(var(--l1)); } }
@keyframes crDrinkR { 0%, 8%, 74%, 100% { transform: rotate(var(--r0)); } 22%, 64% { transform: rotate(var(--r1)); } }
@keyframes crCup { 0%, 8%, 74%, 100% { transform: translateY(0) rotate(0); } 22% { transform: translateY(var(--cup1)) rotate(0); } 30%, 58% { transform: translateY(var(--cup1)) rotate(-30deg); } 64% { transform: translateY(var(--cup1)) rotate(0); } }
@keyframes crJuice { 0%, 30% { transform: scaleY(1); } 40% { transform: scaleY(.7); } 50% { transform: scaleY(.42); } 60%, 94% { transform: scaleY(.1); } 100% { transform: scaleY(1); } }
@keyframes crGulp { 0%, 100% { transform: rotate(0) scale(1); } 10% { transform: rotate(0) scale(1.03, .97); } 22% { transform: rotate(-3deg) scale(.99, 1.01); }
  34% { transform: rotate(-5deg) scale(1, 1); } 37% { transform: rotate(-5deg) scale(1.03, .97); } 44% { transform: rotate(-5deg) scale(1, 1); } 47% { transform: rotate(-5deg) scale(1.03, .97); } 54% { transform: rotate(-5deg) scale(1, 1); } 57% { transform: rotate(-5deg) scale(1.03, .97); }
  70% { transform: rotate(0) scale(1); } 78% { transform: rotate(2deg) scale(1.04, .95); } 84% { transform: rotate(0) scale(.98, 1.03); } 90% { transform: rotate(0) scale(1); } }
@keyframes crShowOpen { 0% { opacity: 1; } 24% { opacity: 0; } 66% { opacity: 1; } 76% { opacity: 0; } 94% { opacity: 1; } }
@keyframes crShowDrink { 0% { opacity: 0; } 24% { opacity: 1; } 66% { opacity: 0; } }
@keyframes crShowAh { 0% { opacity: 0; } 76% { opacity: 1; } 94% { opacity: 0; } }
@keyframes crAhh { 0%, 74% { opacity: 0; transform: scale(.3); } 80% { opacity: 1; transform: scale(1.2) rotate(20deg); } 92% { opacity: .9; transform: scale(1) rotate(40deg); } 100% { opacity: 0; transform: scale(.6) rotate(60deg); } }

/* Voler : il s'accroupit, bondit en battant des ailes, plane bras écartés (l'ombre rapetisse), redescend et atterrit */
.ca-fly .c-root { animation: crFly 3s cubic-bezier(.45, 0, .55, 1) infinite; }
.ca-fly .c-shadow { animation: crFlyShadow 3s cubic-bezier(.45, 0, .55, 1) infinite; }
.ca-fly .c-wing { animation: crWingOpen 3s ease-in-out infinite; }
.ca-fly .c-wingL .c-flap { animation: crFlapL .2s ease-in-out infinite alternate; }
.ca-fly .c-wingR .c-flap { animation: crFlapR .2s ease-in-out infinite alternate; }
.ca-fly .c-armL { animation: crFlyArmL 3s ease-in-out infinite; }
.ca-fly .c-armR { animation: crFlyArmR 3s ease-in-out infinite; }
.ca-fly .c-legL { animation: crDangle 3s ease-in-out infinite; }
.ca-fly .c-legR { animation: crDangle 3s ease-in-out -.15s infinite; }
.ca-fly .c-e-open, .ca-fly .c-m-rest { animation: crShowGround 3s step-end infinite; }
.ca-fly .c-e-happy, .ca-fly .c-m-ah { animation: crShowAir 3s step-end infinite; }
.ca-fly .c-puff { animation: crPuff 3s ease-out infinite; }
@keyframes crFly { 0%, 100% { transform: translateY(0) scale(1, 1); } 10% { transform: translateY(0) scale(1.1, .86); } 18% { transform: translateY(-26px) scale(.92, 1.1); }
  27% { transform: translateY(-46px) scale(1, 1); } 39% { transform: translateY(-52px) rotate(-3deg); } 51% { transform: translateY(-42px) rotate(2deg); } 63% { transform: translateY(-52px) rotate(-2deg); } 74% { transform: translateY(-42px) rotate(0); }
  86% { transform: translateY(0) scale(1, 1); } 89% { transform: translateY(0) scale(1.12, .86); } 94% { transform: translateY(0) scale(.97, 1.04); } }
@keyframes crFlyShadow { 0%, 10%, 89%, 100% { transform: scale(1); opacity: 1; } 27%, 74% { transform: scale(.55); opacity: .45; } 86% { transform: scale(.95); opacity: .9; } }
@keyframes crWingOpen { 0%, 6%, 94%, 100% { transform: scale(.62); } 16%, 84% { transform: scale(1.08); } }
@keyframes crFlapL { from { transform: rotate(24deg); } to { transform: rotate(-30deg); } }
@keyframes crFlapR { from { transform: rotate(-24deg); } to { transform: rotate(30deg); } }
@keyframes crFlyArmL { 0%, 12%, 88%, 100% { transform: rotate(0); } 24%, 76% { transform: rotate(78deg); } 50% { transform: rotate(64deg); } }
@keyframes crFlyArmR { 0%, 12%, 88%, 100% { transform: rotate(0); } 24%, 76% { transform: rotate(-78deg); } 50% { transform: rotate(-64deg); } }
@keyframes crDangle { 0%, 16%, 86%, 100% { transform: rotate(0); } 30% { transform: rotate(10deg); } 44% { transform: rotate(-8deg); } 58% { transform: rotate(9deg); } 72% { transform: rotate(-6deg); } }
@keyframes crShowGround { 0% { opacity: 1; } 18% { opacity: 0; } 86% { opacity: 1; } }
@keyframes crShowAir { 0% { opacity: 0; } 18% { opacity: 1; } 86% { opacity: 0; } }
@keyframes crPuff { 0%, 15% { opacity: 0; transform: scale(.5); } 20% { opacity: 1; transform: scale(1); } 34% { opacity: 0; transform: scale(1.5) translateY(-4px); } 100% { opacity: 0; } }

/* Ce qui ne se voit que pendant un geste */
.cr2 .c-m-oo, .cr2 .c-m-roar, .cr2 .c-backv, .cr2 .c-brow { opacity: 0; }
.c-dragon .c-tail { animation: crTail 2.6s ease-in-out infinite; }
@keyframes crTail { 0%, 100% { transform: rotate(0); } 50% { transform: rotate(-9deg); } }

/* Humeurs : le visage seulement, figé */
.cm-laugh .c-e-open, .cm-sing .c-e-open, .cm-sip .c-e-open, .cm-sleep .c-e-open, .cm-laugh .c-m-rest, .cm-sing .c-m-rest, .cm-sip .c-m-rest, .cm-sleep .c-m-rest, .cm-roar .c-m-rest { opacity: 0; }
.cm-laugh .c-e-happy, .cm-sing .c-e-happy, .cm-sip .c-e-happy, .cm-sleep .c-e-sleep, .cm-laugh .c-m-ah, .cm-sing .c-m-oo, .cm-sip .c-m-o, .cm-sleep .c-m-o, .cm-roar .c-m-roar, .cm-roar .c-brow { opacity: 1; }

/* Rire : il se tient le ventre à deux mains, part en arrière, se plie en avant, secoué de rire ; les larmes giclent */
.ca-laugh .c-root { animation: crLolRoot 3s ease-in-out infinite; }
.ca-laugh .c-body { animation: crLolShake 3s linear infinite; }
.ca-laugh .c-armL { animation: crLolL 3s ease-in-out infinite; }
.ca-laugh .c-armR { animation: crLolR 3s ease-in-out infinite; }
.ca-laugh .c-e-open, .ca-laugh .c-m-rest { animation: crLolOff 3s step-end infinite; }
.ca-laugh .c-e-happy, .ca-laugh .c-m-ah, .ca-laugh .c-lol { animation: crLolOn 3s step-end infinite; }
.ca-laugh .c-tearL { animation: crTearL .5s ease-in infinite; }
.ca-laugh .c-tearR { animation: crTearR .5s ease-in -.25s infinite; }
.ca-laugh .c-haha { animation: crHaha .25s ease-in-out infinite alternate; transform-origin: 100px 70px; }
@keyframes crLolRoot { 0%, 8%, 92%, 100% { transform: rotate(0) scale(1); } 14% { transform: rotate(0) scale(1.06, .92); } 24% { transform: rotate(-8deg) scale(1, 1.02); } 50% { transform: rotate(-4deg) scale(1); } 66% { transform: rotate(7deg) scale(1.03, .95); } 82% { transform: rotate(3deg) scale(1); } }
@keyframes crLolShake { 0%, 16%, 84%, 100% { transform: translateY(0) scale(1); }
  20%, 28%, 36%, 44%, 52%, 60%, 68%, 76% { transform: translateY(-4px) scale(.97, 1.04); } 24%, 32%, 40%, 48%, 56%, 64%, 72%, 80% { transform: translateY(0) scale(1.04, .95); } }
@keyframes crLolL { 0%, 8%, 90%, 100% { transform: rotate(0); } 16%, 82% { transform: rotate(var(--l0)); } }
@keyframes crLolR { 0%, 8%, 90%, 100% { transform: rotate(0); } 16%, 82% { transform: rotate(var(--r0)); } }
@keyframes crLolOff { 0% { opacity: 1; } 12% { opacity: 0; } 88% { opacity: 1; } }
@keyframes crLolOn { 0% { opacity: 0; } 12% { opacity: 1; } 88% { opacity: 0; } }
@keyframes crTearL { 0% { transform: translate(0, 0); opacity: 1; } 100% { transform: translate(-16px, 18px); opacity: 0; } }
@keyframes crTearR { 0% { transform: translate(0, 0); opacity: 1; } 100% { transform: translate(16px, 18px); opacity: 0; } }
@keyframes crHaha { from { transform: scale(.85); opacity: .5; } to { transform: scale(1.12); opacity: 1; } }

/* Rouler : il rentre les pattes, se met en boule, roule à droite d'un tour complet, revient en roulant, se déplie (un peu étourdi) */
.ca-roll .c-root { animation: crRoll 3.4s ease-in-out infinite; }
.ca-roll .c-shadow { animation: crRollShadow 3.4s ease-in-out infinite; }
.ca-roll .c-leg { animation: crTuckLeg 3.4s ease-in-out infinite; }
.ca-roll .c-armL { animation: crTuckL 3.4s ease-in-out infinite; }
.ca-roll .c-armR { animation: crTuckR 3.4s ease-in-out infinite; }
.ca-roll .c-wing { animation: crTuckWing 3.4s ease-in-out infinite; }
.ca-roll .c-e-open, .ca-roll .c-m-rest { animation: crRollOff 3.4s step-end infinite; }
.ca-roll .c-e-sleep, .ca-roll .c-m-o { animation: crRollOn 3.4s step-end infinite; }
.ca-roll .c-e-happy, .ca-roll .c-m-ah { animation: crRollEnd 3.4s step-end infinite; }
.ca-roll .c-dust { animation: crRollDust 3.4s ease-out infinite; transform-origin: 100px 186px; }
@keyframes crRoll {
  0%, 6%, 100% { transform: translate(0, 0) translateY(-76px) rotate(0) translateY(76px); }
  14% { transform: translate(0, var(--drop)) translateY(-76px) rotate(0) translateY(76px); }
  40% { transform: translate(46px, var(--drop)) translateY(-76px) rotate(360deg) translateY(76px); }
  46% { transform: translate(46px, var(--drop)) translateY(-76px) rotate(360deg) translateY(76px); }
  72% { transform: translate(0, var(--drop)) translateY(-76px) rotate(0) translateY(76px); }
  80% { transform: translate(0, -10px) translateY(-76px) rotate(0) translateY(76px); }
  86% { transform: translate(0, 0) translateY(-76px) rotate(-6deg) translateY(76px); }
  92% { transform: translate(0, 0) translateY(-76px) rotate(5deg) translateY(76px); } }
@keyframes crRollShadow { 0%, 6%, 72%, 100% { transform: translateX(0) scale(1); } 14% { transform: translateX(0) scale(.92); } 40%, 46% { transform: translateX(46px) scale(.92); } }
@keyframes crTuckLeg { 0%, 4%, 80%, 100% { transform: scaleY(1); } 12%, 72% { transform: scaleY(.15); } }
@keyframes crTuckL { 0%, 4%, 92%, 100% { transform: rotate(0); } 12%, 72% { transform: rotate(-52deg); } 80%, 86% { transform: rotate(150deg); } }
@keyframes crTuckR { 0%, 4%, 92%, 100% { transform: rotate(0); } 12%, 72% { transform: rotate(52deg); } 80%, 86% { transform: rotate(-150deg); } }
@keyframes crTuckWing { 0%, 4%, 80%, 100% { transform: scale(1); } 12%, 72% { transform: scale(.4); } }
@keyframes crRollOff { 0% { opacity: 1; } 12% { opacity: 0; } 94% { opacity: 1; } }
@keyframes crRollOn { 0% { opacity: 0; } 12% { opacity: 1; } 76% { opacity: 0; } }
@keyframes crRollEnd { 0% { opacity: 0; } 76% { opacity: 1; } 94% { opacity: 0; } }
@keyframes crRollDust { 0%, 16% { opacity: 0; transform: translateX(0) scale(.4); } 22% { opacity: 1; transform: translateX(0) scale(1); } 40% { opacity: 0; transform: translateX(-10px) scale(1.4); }
  46% { opacity: 0; transform: translateX(14px) scale(-.4, .4); } 52% { opacity: 1; transform: translateX(10px) scale(-1, 1); } 70%, 100% { opacity: 0; transform: translateX(4px) scale(-1.4, 1.4); } }

/* Tourner : il se hisse sur une patte, bras écartés, et fait trois pirouettes (on voit son dos) ; il s'arrête, tout étourdi */
.ca-spin .c-root { animation: crSpin 3s linear infinite; }
.ca-spin .c-face, .ca-spin .c-belly { animation: crSpinFace 3s step-end infinite; }
.ca-spin .c-backv { animation: crSpinBack 3s step-end infinite; }
.ca-spin .c-armL { animation: crSpinL 3s ease-in-out infinite; }
.ca-spin .c-armR { animation: crSpinR 3s ease-in-out infinite; }
.ca-spin .c-legR { animation: crSpinLeg 3s ease-in-out infinite; }
.ca-spin .c-e-open, .ca-spin .c-m-rest { animation: crSpinOff 3s step-end infinite; }
.ca-spin .c-e-happy, .ca-spin .c-m-ah { animation: crSpinOn 3s step-end infinite; }
.ca-spin .c-swirl { animation: crSwirl 3s ease-in-out infinite; transform-origin: 100px 130px; }
@keyframes crSpin { 0%, 6%, 100% { transform: translateY(0) scale(1, 1) rotate(0); } 12% { transform: translateY(2px) scale(1.04, .94) rotate(0); } 18% { transform: translateY(-8px) scale(1, 1) rotate(0); }
  21% { transform: translateY(-8px) scale(0, 1) rotate(0); } 24% { transform: translateY(-8px) scale(-1, 1) rotate(0); } 27% { transform: translateY(-8px) scale(0, 1) rotate(0); } 30% { transform: translateY(-8px) scale(1, 1) rotate(0); }
  33% { transform: translateY(-8px) scale(0, 1) rotate(0); } 36% { transform: translateY(-8px) scale(-1, 1) rotate(0); } 39% { transform: translateY(-8px) scale(0, 1) rotate(0); } 42% { transform: translateY(-8px) scale(1, 1) rotate(0); }
  46% { transform: translateY(-8px) scale(0, 1) rotate(0); } 50% { transform: translateY(-8px) scale(-1, 1) rotate(0); } 55% { transform: translateY(-8px) scale(0, 1) rotate(0); } 60% { transform: translateY(-6px) scale(1, 1) rotate(0); }
  64% { transform: translateY(0) scale(1.05, .95) rotate(0); } 70% { transform: translateY(0) scale(1) rotate(-7deg); } 78% { transform: translateY(0) scale(1) rotate(6deg); } 86% { transform: translateY(0) scale(1) rotate(-3deg); } 93% { transform: translateY(0) scale(1) rotate(0); } }
@keyframes crSpinFace { 0% { opacity: 1; } 22.5% { opacity: 0; } 28.5% { opacity: 1; } 34.5% { opacity: 0; } 40.5% { opacity: 1; } 48% { opacity: 0; } 57.5% { opacity: 1; } }
@keyframes crSpinBack { 0% { opacity: 0; } 22.5% { opacity: 1; } 28.5% { opacity: 0; } 34.5% { opacity: 1; } 40.5% { opacity: 0; } 48% { opacity: 1; } 57.5% { opacity: 0; } }
@keyframes crSpinL { 0%, 8%, 92%, 100% { transform: rotate(0); } 18%, 60% { transform: rotate(96deg); } 66% { transform: rotate(120deg); } 80% { transform: rotate(60deg); } }
@keyframes crSpinR { 0%, 8%, 92%, 100% { transform: rotate(0); } 18%, 60% { transform: rotate(-96deg); } 66% { transform: rotate(-120deg); } 80% { transform: rotate(-60deg); } }
@keyframes crSpinLeg { 0%, 12%, 62%, 100% { transform: rotate(0); } 18%, 58% { transform: rotate(-38deg); } }
@keyframes crSpinOff { 0% { opacity: 1; } 18% { opacity: 0; } 94% { opacity: 1; } }
@keyframes crSpinOn { 0% { opacity: 0; } 18% { opacity: 1; } 94% { opacity: 0; } }
@keyframes crSwirl { 0%, 16% { opacity: 0; transform: scale(.6) rotate(0); } 22% { opacity: 1; transform: scale(1) rotate(0); } 58% { opacity: 1; transform: scale(1.06) rotate(-8deg); } 66%, 100% { opacity: 0; transform: scale(1.2) rotate(-12deg); } }

/* Filer : il recule, s'élance, file hors du cadre à droite, revient en trombe par la gauche et dérape jusqu'à l'arrêt */
.ca-zoom .c-root { animation: crZoom 2.8s ease-in-out infinite; }
.ca-zoom .c-shadow { animation: crZoomShadow 2.8s ease-in-out infinite; }
.ca-zoom .c-legL { animation: crZoomLegL 2.8s linear infinite; }
.ca-zoom .c-legR { animation: crZoomLegR 2.8s linear infinite; }
.ca-zoom .c-armL { animation: crZoomL 2.8s ease-in-out infinite; }
.ca-zoom .c-armR { animation: crZoomR 2.8s ease-in-out infinite; }
.ca-zoom .c-e-open { animation: crZoomOpen 2.8s step-end infinite; }
.ca-zoom .c-m-rest { animation: crZoomRest 2.8s step-end infinite; }
.ca-zoom .c-m-o { animation: crZoomO 2.8s step-end infinite; }
.ca-zoom .c-e-happy, .ca-zoom .c-m-ah { animation: crZoomEnd 2.8s step-end infinite; }
.ca-zoom .c-lines { animation: crZoomLines 2.8s ease-out infinite; }
.ca-zoom .c-dust { animation: crZoomDust 2.8s ease-out infinite; transform-origin: 60px 186px; }
@keyframes crZoom { 0%, 4%, 100% { transform: translateX(0) rotate(0) scale(1, 1); opacity: 1; } 18% { transform: translateX(-10px) rotate(-12deg) scale(1.05, .9); opacity: 1; }
  24% { transform: translateX(50px) rotate(14deg) scale(1.22, .86); opacity: 1; } 30% { transform: translateX(230px) rotate(14deg) scale(1.3, .84); opacity: 0; } 30.1% { transform: translateX(-230px) rotate(14deg) scale(1.3, .84); opacity: 0; }
  40% { transform: translateX(-60px) rotate(14deg) scale(1.22, .86); opacity: 1; } 48% { transform: translateX(16px) rotate(-18deg) scale(.96, 1.04); opacity: 1; } 56% { transform: translateX(6px) rotate(-12deg) scale(1, 1); opacity: 1; }
  66% { transform: translateX(0) rotate(5deg) scale(1.03, .97); opacity: 1; } 76% { transform: translateX(0) rotate(0) scale(1); opacity: 1; } }
@keyframes crZoomShadow { 0%, 4%, 100% { transform: translateX(0); opacity: 1; } 18% { transform: translateX(-10px); opacity: 1; } 24% { transform: translateX(50px); opacity: 1; } 30% { transform: translateX(230px); opacity: 0; } 30.1% { transform: translateX(-230px); opacity: 0; }
  40% { transform: translateX(-60px); opacity: 1; } 48% { transform: translateX(16px); opacity: 1; } 66%, 76% { transform: translateX(0); opacity: 1; } }
@keyframes crZoomLegL { 0%, 18%, 50%, 100% { transform: rotate(0); } 21%, 27%, 36%, 42% { transform: rotate(34deg); } 24%, 33%, 39%, 45% { transform: rotate(-34deg); } }
@keyframes crZoomLegR { 0%, 18%, 50%, 100% { transform: rotate(0); } 21%, 27%, 36%, 42% { transform: rotate(-34deg); } 24%, 33%, 39%, 45% { transform: rotate(34deg); } }
@keyframes crZoomL { 0%, 4%, 80%, 100% { transform: rotate(0); } 18% { transform: rotate(-30deg); } 24%, 44% { transform: rotate(70deg); } 52% { transform: rotate(110deg); } 64% { transform: rotate(20deg); } }
@keyframes crZoomR { 0%, 4%, 80%, 100% { transform: rotate(0); } 18% { transform: rotate(30deg); } 24%, 44% { transform: rotate(-30deg); } 52% { transform: rotate(-120deg); } 64% { transform: rotate(-20deg); } }
@keyframes crZoomOpen { 0% { opacity: 1; } 62% { opacity: 0; } 92% { opacity: 1; } }
@keyframes crZoomRest { 0% { opacity: 1; } 16% { opacity: 0; } 92% { opacity: 1; } }
@keyframes crZoomO { 0% { opacity: 0; } 16% { opacity: 1; } 62% { opacity: 0; } }
@keyframes crZoomEnd { 0% { opacity: 0; } 62% { opacity: 1; } 92% { opacity: 0; } }
@keyframes crZoomLines { 0%, 32% { opacity: 0; transform: translateX(-30px); } 36% { opacity: 1; transform: translateX(-10px); } 52% { opacity: .9; transform: translateX(10px); } 62%, 100% { opacity: 0; transform: translateX(20px); } }
@keyframes crZoomDust { 0%, 46% { opacity: 0; transform: scale(.3); } 52% { opacity: 1; transform: scale(1); } 68%, 100% { opacity: 0; transform: scale(1.5) translateY(-6px); } }

/* Dormir (faire dodo) : il bâille en s'étirant, son bonnet de nuit tombe sur sa tête, il s'affaisse et ronfle ; les Z montent */
.ca-sleep .c-body { animation: crNap 4s ease-in-out infinite; }
.ca-sleep .c-armL { animation: crYawnL 4s ease-in-out infinite; }
.ca-sleep .c-armR { animation: crYawnR 4s ease-in-out infinite; }
.ca-sleep .c-cap { animation: crCap 4s ease-in-out infinite; transform-origin: 100px 60px; }
.ca-sleep .c-zzz { animation: crZzzOn 4s step-end infinite; }
.ca-sleep .c-z { animation: crZ 1.5s ease-out infinite; }
.ca-sleep .c-z2 { animation-delay: -.5s; } .ca-sleep .c-z3 { animation-delay: -1s; }
.ca-sleep .c-e-open, .ca-sleep .c-m-rest { animation: crNapOff 4s step-end infinite; }
.ca-sleep .c-e-sleep { animation: crNapEyes 4s step-end infinite; }
.ca-sleep .c-m-ah { animation: crYawnMouth 4s step-end infinite; }
.ca-sleep .c-m-o { animation: crSnore 4s ease-in-out infinite; transform-box: fill-box; transform-origin: center; }
@keyframes crNap { 0%, 4%, 100% { transform: rotate(0) translateY(0) scale(1, 1); } 12%, 18% { transform: rotate(0) translateY(-3px) scale(.96, 1.07); } 26% { transform: rotate(0) translateY(0) scale(1, 1); }
  34% { transform: rotate(-7deg) translateY(4px) scale(1.03, .95); } 46% { transform: rotate(-7deg) translateY(4px) scale(1.06, .92); } 58% { transform: rotate(-7deg) translateY(4px) scale(1.02, .96); }
  70% { transform: rotate(-7deg) translateY(4px) scale(1.06, .92); } 82% { transform: rotate(-7deg) translateY(4px) scale(1.02, .96); } 92% { transform: rotate(-7deg) translateY(4px) scale(1.04, .94); } }
@keyframes crYawnL { 0%, 4%, 26%, 100% { transform: rotate(0); } 12%, 18% { transform: rotate(150deg); } 34%, 94% { transform: rotate(-14deg); } }
@keyframes crYawnR { 0%, 4%, 26%, 100% { transform: rotate(0); } 12%, 18% { transform: rotate(-150deg); } 34%, 94% { transform: rotate(14deg); } }
@keyframes crCap { 0%, 22% { opacity: 0; transform: translateY(-76px) rotate(-30deg); } 24% { opacity: 1; } 30% { opacity: 1; transform: translateY(-4px) rotate(4deg); } 34%, 94% { opacity: 1; transform: translateY(-8px) rotate(0); } 99%, 100% { opacity: 0; transform: translateY(-14px) rotate(0); } }
@keyframes crZzzOn { 0% { opacity: 0; } 36% { opacity: 1; } 96% { opacity: 0; } }
@keyframes crZ { 0% { opacity: 0; transform: translate(-8px, 10px) scale(.5); } 30% { opacity: 1; } 100% { opacity: 0; transform: translate(6px, -12px) scale(1.1) rotate(10deg); } }
@keyframes crNapOff { 0% { opacity: 1; } 8% { opacity: 0; } 97% { opacity: 1; } }
@keyframes crNapEyes { 0% { opacity: 0; } 8% { opacity: 1; } 97% { opacity: 0; } }
@keyframes crYawnMouth { 0% { opacity: 0; } 8% { opacity: 1; } 24% { opacity: 0; } }
@keyframes crSnore { 0%, 26% { opacity: 0; transform: scale(1); } 27% { opacity: 1; } 40%, 64%, 88% { opacity: 1; transform: scale(1.6, 1.8); } 52%, 76% { opacity: 1; transform: scale(.8); } 96% { opacity: 1; transform: scale(1); } 97%, 100% { opacity: 0; } }

/* Danser : il sautille d'un pied sur l'autre, bras en l'air chacun son tour, une patte qui lance ; les notes et le parquet brillent */
.ca-dance .c-root { animation: crDance 1.6s ease-in-out infinite; }
.ca-dance .c-armL { animation: crDanceL 1.6s ease-in-out infinite; }
.ca-dance .c-armR { animation: crDanceR 1.6s ease-in-out infinite; }
.ca-dance .c-legL { animation: crDanceLegL 1.6s ease-in-out infinite; }
.ca-dance .c-legR { animation: crDanceLegR 1.6s ease-in-out infinite; }
.ca-dance .c-e-open, .ca-dance .c-m-rest { opacity: 0; }
.ca-dance .c-e-happy, .ca-dance .c-m-ah { opacity: 1; }
.ca-dance .c-n1, .ca-sing .c-n1 { animation: crNote 1.6s ease-out infinite; }
.ca-dance .c-n2, .ca-sing .c-n2 { animation: crNote 1.6s ease-out -.8s infinite; }
.ca-dance .c-floor path { animation: pkTwinkle 1.6s ease-in-out infinite; transform-box: fill-box; transform-origin: center; }
.ca-dance .c-floor path:nth-child(2) { animation-delay: -.53s; } .ca-dance .c-floor path:nth-child(3) { animation-delay: -1.06s; }
@keyframes crDance { 0%, 100% { transform: translate(-12px, 0) rotate(-8deg) scale(1.05, .94); } 10% { transform: translate(-10px, 0) rotate(-8deg) scale(1, 1); } 25% { transform: translate(0, -16px) rotate(0) scale(.96, 1.05); }
  40% { transform: translate(10px, 0) rotate(8deg) scale(1, 1); } 50% { transform: translate(12px, 0) rotate(8deg) scale(1.05, .94); } 60% { transform: translate(10px, 0) rotate(8deg) scale(1, 1); } 75% { transform: translate(0, -16px) rotate(0) scale(.96, 1.05); } 90% { transform: translate(-10px, 0) rotate(-8deg) scale(1, 1); } }
@keyframes crDanceL { 0%, 100% { transform: rotate(150deg); } 25%, 75% { transform: rotate(70deg); } 50% { transform: rotate(-10deg); } }
@keyframes crDanceR { 0%, 100% { transform: rotate(10deg); } 25%, 75% { transform: rotate(-70deg); } 50% { transform: rotate(-150deg); } }
@keyframes crDanceLegL { 0%, 25%, 75%, 100% { transform: rotate(0); } 50% { transform: rotate(32deg); } }
@keyframes crDanceLegR { 0%, 100% { transform: rotate(-32deg); } 25%, 50%, 75% { transform: rotate(0); } }
@keyframes crNote { 0% { opacity: 0; transform: translate(0, 10px) scale(.6) rotate(-10deg); } 20% { opacity: 1; } 100% { opacity: 0; transform: translate(4px, -26px) scale(1.05) rotate(10deg); } }

/* Chanter : une main sur le cœur, il se balance en chantant « oh », puis lance la grande note, bras levé, bouche grande ouverte */
.ca-sing .c-body { animation: crSing 3.2s ease-in-out infinite; }
.ca-sing .c-armL { transform: rotate(var(--l0)); }
.ca-sing .c-armR { animation: crSingR 3.2s ease-in-out infinite; }
.ca-sing .c-e-open, .ca-sing .c-m-rest { opacity: 0; }
.ca-sing .c-e-happy { opacity: 1; }
.ca-sing .c-m-oo { animation: crSingO 3.2s step-end infinite; }
.ca-sing .c-m-ah { animation: crSingAh 3.2s step-end infinite; }
@keyframes crSing { 0%, 100% { transform: rotate(-4deg) scale(1); } 22% { transform: rotate(4deg) scale(1); } 38% { transform: rotate(0) scale(1.03, .96); }
  48%, 62% { transform: rotate(0) scale(.97, 1.08); } 52%, 58% { transform: rotate(0) scale(.98, 1.06); } 78% { transform: rotate(-4deg) scale(1); } }
@keyframes crSingR { 0%, 100% { transform: rotate(-36deg); } 22% { transform: rotate(-20deg); } 38% { transform: rotate(-10deg); } 48%, 62% { transform: rotate(-150deg); } 55% { transform: rotate(-140deg); } 78% { transform: rotate(-36deg); } }
@keyframes crSingO { 0% { opacity: 1; } 44% { opacity: 0; } 66% { opacity: 1; } }
@keyframes crSingAh { 0% { opacity: 0; } 44% { opacity: 1; } 66% { opacity: 0; } }

/* Courir : penché en avant, les pattes moulinent, les bras battent, il rebondit ; traits de vitesse et petits nuages derrière */
.ca-run .c-root { animation: crRunBob .4s ease-in-out infinite; }
.ca-run .c-legL { animation: crRunLeg .4s ease-in-out infinite alternate; }
.ca-run .c-legR { animation: crRunLeg .4s ease-in-out -.4s infinite alternate-reverse; }
.ca-run .c-armL { animation: crRunArmL .4s ease-in-out infinite alternate; }
.ca-run .c-armR { animation: crRunArmR .4s ease-in-out infinite alternate; }
.ca-run .c-shadow { animation: crRunShadow .4s ease-in-out infinite; }
.ca-run .c-m-rest { opacity: 0; }
.ca-run .c-m-ah { opacity: 1; }
.ca-run .c-lines { animation: crRunLines .4s linear infinite; }
.ca-run .c-dust { animation: crRunDust .8s ease-out infinite; transform-origin: 50px 186px; }
@keyframes crRunBob { 0%, 50%, 100% { transform: rotate(8deg) translateY(0) scale(1.03, .97); } 25%, 75% { transform: rotate(8deg) translateY(-9px) scale(.98, 1.03); } }
@keyframes crRunLeg { from { transform: rotate(36deg) translateY(-3px); } to { transform: rotate(-36deg) translateY(0); } }
@keyframes crRunArmL { from { transform: rotate(-36deg); } to { transform: rotate(60deg); } }
@keyframes crRunArmR { from { transform: rotate(36deg); } to { transform: rotate(-60deg); } }
@keyframes crRunShadow { 0%, 50%, 100% { transform: scale(1); } 25%, 75% { transform: scale(.88); } }
@keyframes crRunLines { 0% { transform: translateX(10px); opacity: .3; } 50% { opacity: 1; } 100% { transform: translateX(-14px); opacity: .3; } }
@keyframes crRunDust { 0% { opacity: 0; transform: scale(.4); } 25% { opacity: 1; transform: scale(1); } 100% { opacity: 0; transform: translateX(-14px) scale(1.5); } }

/* Lire : le livre ouvert à deux mains, les yeux suivent les lignes, il tourne la page, lit la suivante… et « oh ! », il a compris */
.ca-read .c-armL { transform: rotate(var(--l0)); }
.ca-read .c-armR { transform: rotate(var(--r0)); }
.ca-read .c-body { animation: crRead 4s ease-in-out infinite; }
.ca-read .c-pupil { animation: crScan 4s linear infinite; }
.ca-read .c-page { animation: crPage 4s ease-in-out infinite; }
.ca-read .c-e-open, .ca-read .c-m-rest { animation: crReadOff 4s step-end infinite; }
.ca-read .c-e-happy, .ca-read .c-m-ah { animation: crReadOn 4s step-end infinite; }
.ca-read .c-idea { animation: crIdea 4s ease-out infinite; }
@keyframes crRead { 0%, 72%, 100% { transform: rotate(2deg) translateY(0); } 36% { transform: rotate(-1deg) translateY(0); } 80% { transform: rotate(0) translateY(-8px) scale(.98, 1.04); } 86% { transform: rotate(0) translateY(0) scale(1.03, .97); } 92% { transform: rotate(1deg) translateY(0); } }
@keyframes crScan { 0% { transform: translate(-4px, 2px); } 10% { transform: translate(3px, 2px); } 10.1% { transform: translate(-4px, 4px); } 20% { transform: translate(3px, 4px); } 20.1% { transform: translate(-4px, 6px); } 30% { transform: translate(3px, 6px); }
  36%, 44% { transform: translate(2px, 3px); } 46% { transform: translate(-4px, 2px); } 56% { transform: translate(3px, 2px); } 56.1% { transform: translate(-4px, 4px); } 66% { transform: translate(3px, 4px); } 72%, 100% { transform: translate(0, 0); } }
@keyframes crPage { 0%, 31% { opacity: 0; transform: scaleX(1); } 32% { opacity: 1; transform: scaleX(1) skewY(-4deg); } 38% { transform: scaleX(.05) skewY(-10deg); } 44% { opacity: 1; transform: scaleX(-1) skewY(0); } 45%, 100% { opacity: 0; transform: scaleX(-1); } }
@keyframes crReadOff { 0% { opacity: 1; } 74% { opacity: 0; } 96% { opacity: 1; } }
@keyframes crReadOn { 0% { opacity: 0; } 74% { opacity: 1; } 96% { opacity: 0; } }
@keyframes crIdea { 0%, 72% { opacity: 0; transform: scale(.3); } 78% { opacity: 1; transform: scale(1.3) rotate(25deg); } 92% { opacity: 1; transform: scale(1) rotate(50deg); } 100% { opacity: 0; transform: scale(.6) rotate(70deg); } }

/* Saluer : il lève le bras bien haut et fait « coucou » de grands gestes, la tête penchée, tout sourire */
.ca-wave .c-body { animation: crWave 2.8s ease-in-out infinite; }
.ca-wave .c-armR { animation: crWaveR 2.8s ease-in-out infinite; }
.ca-wave .c-armL { animation: crWaveL 2.8s ease-in-out infinite; }
.ca-wave .c-e-open, .ca-wave .c-m-rest { animation: crWaveOff 2.8s step-end infinite; }
.ca-wave .c-e-happy, .ca-wave .c-m-ah, .ca-wave .c-hi { animation: crWaveOn 2.8s step-end infinite; }
@keyframes crWave { 0%, 6%, 92%, 100% { transform: rotate(0) translateY(0); } 12% { transform: rotate(0) translateY(-8px); } 18%, 80% { transform: rotate(-5deg) translateY(0); } }
@keyframes crWaveR { 0%, 6%, 90%, 100% { transform: rotate(0); } 16% { transform: rotate(-122deg); } 23%, 37%, 51%, 65% { transform: rotate(-86deg); } 30%, 44%, 58%, 72% { transform: rotate(-136deg); } 80% { transform: rotate(-112deg); } }
@keyframes crWaveL { 0%, 6%, 90%, 100% { transform: rotate(0); } 16%, 80% { transform: rotate(20deg); } }
@keyframes crWaveOff { 0% { opacity: 1; } 14% { opacity: 0; } 86% { opacity: 1; } }
@keyframes crWaveOn { 0% { opacity: 0; } 14% { opacity: 1; } 86% { opacity: 0; } }

/* Cracher du feu (dragon) : il gonfle en prenant une grande inspiration (fumée aux narines), puis souffle un long jet de flammes */
.ca-fire .c-body { animation: crFireBody 3.2s ease-in-out infinite; }
.ca-fire .c-fire { animation: crFlame 3.2s ease-out infinite; }
.ca-fire .c-smoke { animation: crSmoke 3.2s ease-out infinite; }
.ca-fire .c-armL { animation: crFireL 3.2s ease-in-out infinite; }
.ca-fire .c-armR { animation: crFireR 3.2s ease-in-out infinite; }
.ca-fire .c-e-open { animation: crFireOpen 3.2s step-end infinite; }
.ca-fire .c-e-sleep, .ca-fire .c-m-o { animation: crFireIn 3.2s step-end infinite; }
.ca-fire .c-m-roar { animation: crFireOut 3.2s step-end infinite; }
.ca-fire .c-m-rest { animation: crFireRest 3.2s step-end infinite; }
.ca-fire .c-e-happy { animation: crFireEnd 3.2s step-end infinite; }
@keyframes crFireBody { 0%, 6%, 100% { transform: rotate(0) scale(1); } 28% { transform: rotate(-7deg) scale(1.08, 1.06); } 34% { transform: rotate(5deg) scale(.97, 1); } 40%, 70% { transform: rotate(4deg) scale(1, 1); } 54% { transform: rotate(5deg) scale(1.01, .99); } 82% { transform: rotate(0) scale(1); } }
@keyframes crFlame { 0%, 31% { opacity: 0; transform: scale(0, .5); } 33% { opacity: 1; transform: scale(.4, .8); } 39% { transform: scale(1.04, 1.05); } 45% { transform: scale(.94, .92); } 51% { transform: scale(1.06, 1.08); } 57% { transform: scale(.96, .94); } 63% { transform: scale(1.04, 1.04); } 70% { opacity: 1; transform: scale(1, 1); } 78%, 100% { opacity: 0; transform: scale(1.1, .3); } }
@keyframes crSmoke { 0%, 14% { opacity: 0; transform: translateY(6px) scale(.5); } 22% { opacity: .9; } 30% { opacity: 0; transform: translateY(-12px) scale(1.3); } 78% { opacity: 0; transform: translateY(6px) scale(.5); } 86% { opacity: .9; } 98%, 100% { opacity: 0; transform: translateY(-14px) scale(1.4); } }
@keyframes crFireL { 0%, 6%, 86%, 100% { transform: rotate(0); } 28% { transform: rotate(40deg); } 36%, 72% { transform: rotate(-20deg); } }
@keyframes crFireR { 0%, 6%, 86%, 100% { transform: rotate(0); } 28% { transform: rotate(-40deg); } 36%, 72% { transform: rotate(20deg); } }
@keyframes crFireOpen { 0% { opacity: 1; } 8% { opacity: 0; } 32% { opacity: 1; } 78% { opacity: 0; } 96% { opacity: 1; } }
@keyframes crFireIn { 0% { opacity: 0; } 8% { opacity: 1; } 32% { opacity: 0; } }
@keyframes crFireOut { 0% { opacity: 0; } 32% { opacity: 1; } 76% { opacity: 0; } }
@keyframes crFireRest { 0% { opacity: 1; } 8% { opacity: 0; } 76% { opacity: 1; } }
@keyframes crFireEnd { 0% { opacity: 0; } 78% { opacity: 1; } 96% { opacity: 0; } }

/* Rugir (dragon) : il se ramasse, puis se dresse gueule grande ouverte, griffes et ailes déployées ; tout tremble, les ondes partent */
.ca-roar .c-root { animation: crRoar 3s ease-in-out infinite; }
.ca-roar .c-armL { animation: crRoarL 3s ease-in-out infinite; }
.ca-roar .c-armR { animation: crRoarR 3s ease-in-out infinite; }
.ca-roar .c-wing { animation: crRoarWing 3s ease-in-out infinite; }
.ca-roar .c-m-rest { animation: crRoarRest 3s step-end infinite; }
.ca-roar .c-waves, .ca-roar .c-brow { animation: crRoarOn 3s step-end infinite; }
.ca-roar .c-m-roar { animation: crRoarMouth 3s ease-out infinite; }
.ca-roar .c-e-open { animation: crRoarOpen 3s step-end infinite; }
.ca-roar .c-e-happy { animation: crRoarEnd 3s step-end infinite; }
.ca-roar .c-wv { animation: crWaves .45s ease-out infinite; }
@keyframes crRoar { 0%, 6%, 100% { transform: translate(0, 0) rotate(0) scale(1, 1); } 20% { transform: translate(0, 0) rotate(-6deg) scale(1.06, .9); } 26% { transform: translate(0, -8px) rotate(0) scale(1.06, 1.1); }
  30%, 38%, 46%, 54%, 62% { transform: translate(-2.5px, -6px) rotate(0) scale(1.05, 1.08); } 34%, 42%, 50%, 58%, 66% { transform: translate(2.5px, -6px) rotate(0) scale(1.05, 1.08); } 74% { transform: translate(0, 0) rotate(0) scale(.98, 1.02); } 82% { transform: translate(0, 0) rotate(0) scale(1); } }
@keyframes crRoarL { 0%, 6%, 84%, 100% { transform: rotate(0); } 20% { transform: rotate(-30deg); } 26%, 70% { transform: rotate(124deg); } }
@keyframes crRoarR { 0%, 6%, 84%, 100% { transform: rotate(0); } 20% { transform: rotate(30deg); } 26%, 70% { transform: rotate(-124deg); } }
@keyframes crRoarWing { 0%, 16%, 80%, 100% { transform: scale(1); } 26%, 70% { transform: scale(1.18); } }
@keyframes crRoarRest { 0% { opacity: 1; } 24% { opacity: 0; } 74% { opacity: 1; } }
@keyframes crRoarMouth { 0%, 23.9% { opacity: 0; transform: scale(.6); } 24% { opacity: 1; transform: scale(.7); } 30%, 66% { opacity: 1; transform: scale(1.32); } 71.9% { opacity: 1; transform: scale(1); } 72%, 100% { opacity: 0; transform: scale(1); } }
@keyframes crRoarOn { 0% { opacity: 0; } 24% { opacity: 1; } 72% { opacity: 0; } }
@keyframes crRoarOpen { 0% { opacity: 1; } 78% { opacity: 0; } 96% { opacity: 1; } }
@keyframes crRoarEnd { 0% { opacity: 0; } 78% { opacity: 1; } 96% { opacity: 0; } }
@keyframes crWaves { 0% { opacity: 0; transform: scale(.75); } 30% { opacity: 1; } 100% { opacity: 0; transform: scale(1.35); } }

/* ---------- Objets ensorcelés (S.actScene, js/creature2.js) : l'objet s'éveille (yeux cousus) et joue le geste ---------- */
.scene.act .ob-thing { position: relative; display: block; width: 100%; }
.scene.act .ob { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; pointer-events: none; }
.scene.act .ob g { transform-box: view-box; }
.scene.act .ob .p-eyes { transform-box: fill-box; transform-origin: center; animation: ilBlink 4.4s infinite; }
.ob-e-happy, .ob-m-o, .ob-m-ah { opacity: 0; }

/* L'ombre au sol du dessin est remplacée par .ob-shadow quand il vole ou roule (sinon elle monte ou tourne avec lui) */
.act-fly .ob-thing .il ellipse[fill="#0A0B22"], .act-roll .ob-thing .il ellipse[fill="#0A0B22"] { opacity: 0; }
.act-fly .ob-shadow { animation: obFlyShadow 3s cubic-bezier(.45, 0, .55, 1) infinite; }
.act-roll .ob-shadow { animation: obRollShadow 3.2s ease-in-out infinite; }
@keyframes obFlyShadow { 0%, 12%, 89%, 100% { transform: scale(1); opacity: 1; } 34%, 74% { transform: scale(.55); opacity: .5; } }
@keyframes obRollShadow { 0%, 6%, 72%, 100% { transform: translateX(0); } 40%, 46% { transform: translateX(60px); } }

/* Voler : des ailes lui poussent, il s'accroupit, s'envole en battant des ailes, plane, redescend */
.act-fly .ob-thing { animation: obFly 3s cubic-bezier(.45, 0, .55, 1) infinite; transform-origin: 50% 90%; }
.act-fly .ob-wing { animation: obWingOut 3s ease-in-out infinite; }
.act-fly .ob-flapL { animation: crFlapL .2s ease-in-out infinite alternate; }
.act-fly .ob-flapR { animation: crFlapR .2s ease-in-out infinite alternate; }
.act-fly .ob-e-open, .act-fly .ob-m-rest { animation: crShowGround 3s step-end infinite; }
.act-fly .ob-e-happy, .act-fly .ob-m-ah { animation: crShowAir 3s step-end infinite; }
@keyframes obFly { 0%, 6%, 100% { transform: translateY(0) scale(1, 1) rotate(0); } 12% { transform: translateY(0) scale(1.06, .92) rotate(0); } 22% { transform: translateY(-30%) scale(.96, 1.05) rotate(0); }
  34% { transform: translateY(-38%) scale(1) rotate(-4deg); } 48% { transform: translateY(-30%) scale(1) rotate(3deg); } 62% { transform: translateY(-38%) scale(1) rotate(-3deg); } 74% { transform: translateY(-30%) scale(1) rotate(0); }
  86% { transform: translateY(0) scale(1) rotate(0); } 89% { transform: translateY(0) scale(1.08, .9) rotate(0); } 94% { transform: translateY(0) scale(.98, 1.03) rotate(0); } }
@keyframes obWingOut { 0%, 6%, 92%, 100% { transform: scale(0); opacity: 0; } 14%, 84% { transform: scale(1); opacity: 1; } }

/* Saluer : il se penche, une petite main de feutre sort et fait « coucou » */
.act-wave .ob-thing { animation: obWave 2.6s ease-in-out infinite; transform-origin: 50% 90%; }
.act-wave .ob-hand { animation: obHand 2.6s ease-in-out infinite; }
.act-wave .ob-hi, .act-wave .ob-e-happy, .act-wave .ob-m-ah { animation: crWaveOn 2.6s step-end infinite; }
.act-wave .ob-e-open, .act-wave .ob-m-rest { animation: crWaveOff 2.6s step-end infinite; }
@keyframes obWave { 0%, 8%, 92%, 100% { transform: rotate(0) translateY(0); } 13% { transform: rotate(0) translateY(-5%); } 20%, 80% { transform: rotate(-5deg) translateY(0); } 50% { transform: rotate(-3deg) translateY(-2%); } }
@keyframes obHand { 0%, 8%, 92%, 100% { transform: scale(0) rotate(0); } 16% { transform: scale(1) rotate(-6deg); } 23%, 37%, 51%, 65% { transform: scale(1) rotate(24deg); } 30%, 44%, 58%, 72% { transform: scale(1) rotate(-22deg); } 82% { transform: scale(1) rotate(0); } }

/* Chanter : il se balance en chantant « oh », puis s'étire pour la grande note, bouche grande ouverte ; les notes montent */
.act-sing .ob-thing { animation: obSing 3s ease-in-out infinite; transform-origin: 50% 90%; }
.act-sing .ob-e-open { opacity: 0; }
.act-sing .ob-e-happy { opacity: 1; }
.act-sing .ob-m-rest { opacity: 0; }
.act-sing .ob-m-o { animation: crSingO 3s step-end infinite; }
.act-sing .ob-m-ah { animation: crSingAh 3s step-end infinite; }
.act-sing .ob-n1, .act-dance .ob-n1 { animation: crNote 1.6s ease-out infinite; }
.act-sing .ob-n2, .act-dance .ob-n2 { animation: crNote 1.6s ease-out -.8s infinite; }
@keyframes obSing { 0%, 100% { transform: rotate(-4deg) scale(1); } 22% { transform: rotate(4deg) scale(1); } 38% { transform: rotate(0) scale(1.04, .95); } 48%, 62% { transform: rotate(0) scale(.96, 1.08); } 55% { transform: rotate(0) scale(.97, 1.06); } 78% { transform: rotate(-4deg) scale(1); } }

/* Danser : il sautille d'un pied sur l'autre en se dandinant ; notes et parquet qui brille */
.act-dance .ob-thing { animation: obDance 1.6s ease-in-out infinite; transform-origin: 50% 90%; }
.act-dance .ob-e-open, .act-dance .ob-m-rest { opacity: 0; }
.act-dance .ob-e-happy, .act-dance .ob-m-ah { opacity: 1; }
.act-dance .ob-floor path { animation: pkTwinkle 1.6s ease-in-out infinite; transform-box: fill-box; transform-origin: center; }
.act-dance .ob-floor path:nth-child(2) { animation-delay: -.53s; } .act-dance .ob-floor path:nth-child(3) { animation-delay: -1.06s; }
@keyframes obDance { 0%, 100% { transform: translate(-7%, 0) rotate(-9deg) scale(1.05, .94); } 10% { transform: translate(-6%, 0) rotate(-9deg) scale(1); } 25% { transform: translate(0, -9%) rotate(0) scale(.96, 1.05); }
  40% { transform: translate(6%, 0) rotate(9deg) scale(1); } 50% { transform: translate(7%, 0) rotate(9deg) scale(1.05, .94); } 60% { transform: translate(6%, 0) rotate(9deg) scale(1); } 75% { transform: translate(0, -9%) rotate(0) scale(.96, 1.05); } 90% { transform: translate(-6%, 0) rotate(-9deg) scale(1); } }

/* Tourner : il se soulève et fait trois pirouettes (le visage disparaît quand on voit son dos), puis titube, étourdi */
.act-spin .ob-thing { animation: obSpin 3s linear infinite; transform-origin: 50% 90%; }
.act-spin .ob-front { animation: crSpinFace 3s step-end infinite; }
.act-spin .ob-e-open, .act-spin .ob-m-rest { animation: crSpinOff 3s step-end infinite; }
.act-spin .ob-e-happy, .act-spin .ob-m-ah { animation: crSpinOn 3s step-end infinite; }
.act-spin .ob-swirl { animation: crSwirl 3s ease-in-out infinite; }
@keyframes obSpin { 0%, 6%, 100% { transform: translateY(0) scale(1, 1) rotate(0); } 12% { transform: translateY(1%) scale(1.04, .94) rotate(0); } 18% { transform: translateY(-5%) scale(1, 1) rotate(0); }
  21% { transform: translateY(-5%) scale(0, 1) rotate(0); } 24% { transform: translateY(-5%) scale(-1, 1) rotate(0); } 27% { transform: translateY(-5%) scale(0, 1) rotate(0); } 30% { transform: translateY(-5%) scale(1, 1) rotate(0); }
  33% { transform: translateY(-5%) scale(0, 1) rotate(0); } 36% { transform: translateY(-5%) scale(-1, 1) rotate(0); } 39% { transform: translateY(-5%) scale(0, 1) rotate(0); } 42% { transform: translateY(-5%) scale(1, 1) rotate(0); }
  46% { transform: translateY(-5%) scale(0, 1) rotate(0); } 50% { transform: translateY(-5%) scale(-1, 1) rotate(0); } 55% { transform: translateY(-5%) scale(0, 1) rotate(0); } 60% { transform: translateY(-4%) scale(1, 1) rotate(0); }
  64% { transform: translateY(0) scale(1.05, .95) rotate(0); } 70% { transform: translateY(0) scale(1) rotate(-7deg); } 78% { transform: translateY(0) scale(1) rotate(6deg); } 86% { transform: translateY(0) scale(1) rotate(-3deg); } 93% { transform: translateY(0) scale(1) rotate(0); } }

/* Filer : il recule, s'élance, file hors du cadre, revient en trombe de l'autre côté et dérape */
.act-zoom .ob-thing { animation: obZoom 2.8s ease-in-out infinite; transform-origin: 50% 90%; }
.act-zoom .ob-e-open { animation: crZoomOpen 2.8s step-end infinite; }
.act-zoom .ob-m-rest { animation: crZoomRest 2.8s step-end infinite; }
.act-zoom .ob-m-o { animation: crZoomO 2.8s step-end infinite; }
.act-zoom .ob-e-happy, .act-zoom .ob-m-ah { animation: crZoomEnd 2.8s step-end infinite; }
.act-zoom .ob-lines { animation: crZoomLines 2.8s ease-out infinite; }
.act-zoom .ob-dust { animation: crZoomDust 2.8s ease-out infinite; transform-origin: 30px 186px; }
@keyframes obZoom { 0%, 4%, 100% { transform: translateX(0) rotate(0) scale(1, 1); opacity: 1; } 18% { transform: translateX(-5%) rotate(-12deg) scale(1.05, .9); opacity: 1; }
  24% { transform: translateX(25%) rotate(12deg) scale(1.2, .86); opacity: 1; } 30% { transform: translateX(120%) rotate(12deg) scale(1.3, .84); opacity: 0; } 30.1% { transform: translateX(-120%) rotate(12deg) scale(1.3, .84); opacity: 0; }
  40% { transform: translateX(-30%) rotate(12deg) scale(1.2, .86); opacity: 1; } 48% { transform: translateX(8%) rotate(-16deg) scale(.96, 1.04); opacity: 1; } 56% { transform: translateX(3%) rotate(-10deg) scale(1, 1); opacity: 1; }
  66% { transform: translateX(0) rotate(5deg) scale(1.03, .97); opacity: 1; } 76% { transform: translateX(0) rotate(0) scale(1); opacity: 1; } }

/* Rouler : il roule d'un tour complet vers la droite, puis revient en roulant, et se redresse ; la poussière vole */
.act-roll .ob-thing { animation: obRoll 3.2s ease-in-out infinite; transform-origin: 50% 52%; }
.act-roll .ob-e-open, .act-roll .ob-m-rest { animation: crRollOff 3.2s step-end infinite; }
.act-roll .ob-e-happy, .act-roll .ob-m-o { animation: crRollOn 3.2s step-end infinite; }
.act-roll .ob-m-ah { animation: crRollEnd 3.2s step-end infinite; }
.act-roll .ob-dust { animation: obRollDust 3.2s ease-out infinite; }
@keyframes obRoll { 0%, 6%, 100% { transform: translate(0, 0) rotate(0) scale(1, 1); } 12% { transform: translate(-3%, 2%) rotate(-8deg) scale(1.04, .94); } 40%, 46% { transform: translate(30%, 0) rotate(360deg) scale(1); }
  72% { transform: translate(0, 0) rotate(0) scale(1); } 78% { transform: translate(0, -7%) rotate(0) scale(.97, 1.04); } 84% { transform: translate(0, 0) rotate(-6deg) scale(1.03, .97); } 92% { transform: translate(0, 0) rotate(4deg) scale(1); } }
@keyframes obRollDust { 0%, 14% { opacity: 0; transform: translateX(0) scale(.4); } 20% { opacity: 1; transform: translateX(0) scale(1); } 38% { opacity: 0; transform: translateX(-10px) scale(1.4); }
  46% { opacity: 0; transform: translateX(6px) scale(-.4, .4); } 52% { opacity: 1; transform: translateX(6px) scale(-1, 1); } 70%, 100% { opacity: 0; transform: translateX(0) scale(-1.4, 1.4); } }

/* Le dragon de la course : il bat des ailes en filant ; la mise des créatures dans les cartes d'ordres */
.rider-dragon .c-wingL .c-flap { animation: crFlapL .22s ease-in-out infinite alternate; }
.rider-dragon .c-wingR .c-flap { animation: crFlapR .22s ease-in-out infinite alternate; }

@media (prefers-reduced-motion: reduce) { .il.pk *, .il.pk, .cr2 *, .scene.act * { animation-duration: 0s !important; animation-iteration-count: 1 !important; } }
