.survivor-sprite{overflow:hidden;image-rendering:pixelated;pointer-events:none}.survivor-strip{image-rendering:pixelated;animation:survivor-frames var(--sprite-duration) steps(var(--sprite-steps),end) infinite;transform-box:view-box;transform-origin:0 0}.survivor-strip.once{animation-iteration-count:1;animation-fill-mode:forwards}.survivor-strip.still{animation:none}.sprite-paused .survivor-strip{animation-play-state:paused}.survivor-orientation{transform-box:view-box}.emblem .survivor-sprite{width:74px;height:90px;max-width:none}.survivor .emblem{width:64px;overflow:visible}.gear-survivor .survivor-sprite{width:160px;max-width:160%;height:174px;flex-shrink:0}#world-sprite,#local-sprite{overflow:hidden}
@keyframes survivor-frames{from{transform:translateX(0)}to{transform:translateX(var(--sprite-distance))}}
.survivor-breath{transform-box:view-box;animation:survivor-breathe 3.2s ease-in-out infinite}.survivor-planted{transform:none;animation:none}.sprite-paused .survivor-breath{animation-play-state:paused}
@keyframes survivor-breathe{0%,100%{transform:scaleY(1)}50%{transform:scaleY(1.015)}}
#activity-sprite{width:72px;height:81px;flex-shrink:0;background:#141d15;border-bottom:2px solid #7d8c5b}
@media(max-width:700px){.gear-survivor .survivor-sprite{width:142px;height:150px}}
@media(prefers-reduced-motion:reduce){.survivor-strip,.survivor-breath{animation:none}.survivor-sprite[data-animation=death] .survivor-strip{transform:translateX(var(--sprite-distance))}}

/* jump-none gives once clips equal pose holds, including the final recovery. */
.survivor-strip.once{animation-timing-function:steps(var(--sprite-steps),jump-none)}
.battle-unit .survivor-strip{animation-delay:calc(0ms - var(--fx-elapsed,0ms))}
@media(prefers-reduced-motion:reduce){.enemy-collapse{transform:translateX(var(--sprite-distance))}}
