.character-rig{position:relative;display:inline-block;width:76px;height:76px;vertical-align:middle;transform-origin:50% 70%;pointer-events:none}
.character-rig .rig-part{position:absolute;inset:0;width:100%;height:100%;object-fit:fill;pointer-events:none;filter:drop-shadow(0 2px 1px #0005)}
.rig-body{clip-path:polygon(0 0,100% 0,100% 71%,0 71%)}
.rig-left{clip-path:polygon(0 70%,50% 70%,50% 100%,0 100%);transform-origin:37% 71%}
.rig-right{clip-path:polygon(50% 70%,100% 70%,100% 100%,50% 100%);transform-origin:63% 71%}
.rig-shadow{position:absolute;left:23%;bottom:1%;width:54%;height:12%;border-radius:50%;background:#0005;filter:blur(2px)}
.walking .rig-left{animation:stepLeft .38s linear infinite}.walking .rig-right{animation:stepRight .38s linear infinite}.walking .rig-body{animation:strideBody .19s ease-in-out infinite alternate}
.attacking .rig-body{animation:strikeBody .55s ease-out infinite}.face-left .character-rig{transform:scaleX(-1)}
@keyframes stepLeft{0%,100%{transform:rotate(-12deg) translateY(-2px)}50%{transform:rotate(12deg) translateY(2px)}}
@keyframes stepRight{0%,100%{transform:rotate(12deg) translateY(2px)}50%{transform:rotate(-12deg) translateY(-2px)}}
@keyframes strideBody{from{transform:translateY(-1px) rotate(-1deg)}to{transform:translateY(-3px) rotate(1deg)}}
@keyframes strikeBody{0%,100%{transform:rotate(0)}30%{transform:translateY(-4px) rotate(-7deg)}55%{transform:translateY(1px) rotate(5deg)}}
@media(max-width:600px){.character-rig{width:58px;height:58px}}
@media(prefers-reduced-motion:reduce){.character-rig .rig-part{animation:none}}
html[dir=rtl] .battle,html[dir=rtl] .admin-overlay{direction:ltr}
