/* MANA V2 — animaciones de personajes */
.chw{position:relative;display:inline-block;width:120px;height:180px;flex:none}
.chw svg.ch{width:100%;height:100%;overflow:visible;display:block}
svg.ch .fx{display:none}
.chw .mouthSad{display:none}
.chw .cb,.chw .hd,.chw .arm,.chw .leg,.chw .eyes{transform-box:view-box}
/* reposo */
.chw.idle .cb{animation:chBob 1.9s ease-in-out infinite;animation-delay:calc(var(--d,0s) * -1)}
.chw.idle .hd{animation:chTilt 3.8s ease-in-out infinite;animation-delay:calc(var(--d,0s) * -1)}
.chw.idle .armR{animation:chSwayR 2.6s ease-in-out infinite;animation-delay:calc(var(--d,0s) * -1)}
.chw.idle .armL{animation:chSwayL 2.9s ease-in-out infinite;animation-delay:calc(var(--d,0s) * -1)}
.chw .eyes{animation:chBlink 4.2s infinite;animation-delay:calc(var(--d,0s) * -2)}
.chw .ant{animation:chAnt 1s infinite alternate}
.chw .bub{animation:chBub 1.4s infinite}
.chw .flag,.chw .spark{animation:chWave .6s infinite alternate;transform-box:fill-box;transform-origin:left center}
@keyframes chBob{0%,100%{transform:translateY(0) scaleY(1)}50%{transform:translateY(-2.5px) scaleY(.985)}}
@keyframes chTilt{0%,100%{transform:rotate(-3deg)}50%{transform:rotate(3deg)}}
@keyframes chSwayR{0%,100%{transform:rotate(0)}50%{transform:rotate(-7deg)}}
@keyframes chSwayL{0%,100%{transform:rotate(0)}50%{transform:rotate(6deg)}}
@keyframes chBlink{0%,92%,100%{transform:scaleY(1)}95%{transform:scaleY(.1)}}
@keyframes chAnt{to{fill:#ffe14d}}
@keyframes chBub{0%{transform:translateY(0);opacity:.9}100%{transform:translateY(-14px);opacity:0}}
@keyframes chWave{to{transform:rotate(-14deg) scale(1.05)}}
/* salto */
.chw.hop .cb{animation:chHop .5s cubic-bezier(.3,1.6,.5,1)}
@keyframes chHop{0%{transform:translateY(0) scale(1.05,.9)}40%{transform:translateY(-26px) scale(.95,1.08)}80%{transform:translateY(0) scale(1.06,.92)}100%{transform:none}}
/* celebrar */
.chw.cheer .cb{animation:chJump .7s ease-in-out infinite}
.chw.cheer .armR{animation:none;transform:rotate(-128deg)}
.chw.cheer .armL{animation:none;transform:rotate(128deg)}
.chw.cheer .armR,.chw.cheer .armL{transition:transform .25s}
@keyframes chJump{0%,100%{transform:translateY(0) scale(1.04,.94)}45%{transform:translateY(-22px) scale(.96,1.06)}}
.chw.winner .fx-crown{display:inline}
/* triste */
.chw.sad .hd{animation:none;transform:rotate(14deg) translateY(4px)}
.chw.sad .cb{animation:none;transform:scaleY(.95)}
.chw.sad .armR{animation:none;transform:rotate(8deg)}.chw.sad .armL{animation:none;transform:rotate(-8deg)}
.chw.sad .mouth{display:none}.chw.sad .mouthSad{display:inline}
.chw.sad svg{filter:saturate(.45) brightness(.8)}
/* lanzar */
.chw.throw .armR{animation:chThrow .7s cubic-bezier(.5,0,.2,1)}
.chw.throw .cb{animation:chLean .7s ease-in-out}
@keyframes chThrow{0%{transform:rotate(0)}40%{transform:rotate(60deg)}70%{transform:rotate(-170deg)}100%{transform:rotate(-40deg)}}
@keyframes chLean{0%,100%{transform:none}40%{transform:rotate(-6deg)}70%{transform:rotate(8deg)}}
/* golpear pantalla (erupción) */
.chw.tap .armR{animation:chTapR .22s infinite alternate}
.chw.tap .armL{animation:chTapL .22s infinite alternate-reverse}
.chw.tap .cb{animation:chBob .44s infinite}
@keyframes chTapR{from{transform:rotate(-20deg)}to{transform:rotate(-120deg)}}
@keyframes chTapL{from{transform:rotate(20deg)}to{transform:rotate(120deg)}}
/* maldiciones */
.chw.frozen .fx-ice{display:inline;animation:chIceIn .35s cubic-bezier(.3,1.6,.5,1)}
.chw.frozen .cb{animation:chShiver .09s infinite}
.chw.frozen svg{filter:hue-rotate(160deg) saturate(.6) brightness(1.15)}
.chw.frozen .fx{filter:none}
@keyframes chIceIn{from{transform:scale(.3);opacity:0}to{transform:none;opacity:1}}
@keyframes chShiver{0%,100%{transform:translateX(-1.2px)}50%{transform:translateX(1.2px)}}
.chw.fallen .cb{animation:chFall 1s cubic-bezier(.5,0,.6,1.4) forwards}
.chw.fallen .fx-stars{display:inline;animation:chSpin 1s linear infinite}
@keyframes chFall{0%{transform:none}20%{transform:rotate(-12deg)}35%{transform:rotate(10deg)}100%{transform:rotate(88deg) translate(-14px,10px)}}
.chw.quake .cb{animation:chQuake .08s infinite}
@keyframes chQuake{0%{transform:translate(-3px,1px) rotate(-3deg)}50%{transform:translate(3px,-1px) rotate(3deg)}100%{transform:translate(-2px,0)}}
.chw.ashed svg{filter:grayscale(1) brightness(.62) contrast(1.1)}
.chw.ashed .fx-ash{display:inline}
.chw.ashed .fx-ash .ap{animation:chAsh 1.6s linear infinite}
.chw.ashed .cb{animation:chCough .9s infinite}
@keyframes chAsh{from{transform:translateY(-30px);opacity:0}30%{opacity:1}to{transform:translateY(40px);opacity:0}}
@keyframes chCough{0%,60%,100%{transform:none}70%{transform:scale(1.04,.94) translateY(2px)}80%{transform:scale(.97,1.03)}}
.chw.slimed .fx-slime{display:inline;animation:chSplat .3s cubic-bezier(.3,1.8,.5,1)}
.chw.slimed .hd{animation:chYuck .5s infinite alternate}
@keyframes chSplat{from{transform:scale(1.6);opacity:0;transform-box:fill-box;transform-origin:center}to{transform:none;opacity:1}}
@keyframes chYuck{from{transform:rotate(-8deg)}to{transform:rotate(8deg)}}
.chw.fogged .fx-fog{display:inline;animation:chFog 3s ease-in-out infinite alternate}
.chw.fogged .hd{animation:chLook 1.4s ease-in-out infinite alternate}
.chw.fogged > svg > .cb > :not(.fx){opacity:.4}
@keyframes chFog{to{transform:translateX(10px)}}
@keyframes chLook{from{transform:rotate(-12deg)}to{transform:rotate(12deg)}}
.chw.dizzy .fx-dizzy{display:inline;animation:chSpin 1.2s linear infinite}
.chw.dizzy .cb{animation:chDizzy 1.2s ease-in-out infinite}
@keyframes chSpin{to{transform:rotate(360deg)}}
@keyframes chDizzy{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(5deg)}}
/* llegada */
.chw.enterJump{animation:chEnter .7s cubic-bezier(.3,1.5,.5,1) both}
@keyframes chEnter{from{transform:translateY(-120px) scale(.6);opacity:0}to{transform:none;opacity:1}}
.chw.grey svg{filter:grayscale(1) brightness(.55)}
