/* Original articulated SVG doodles. Every joint uses 120×120 viewBox coordinates. */
.pj-puppet{display:block;width:100%;height:100%;overflow:visible;fill:var(--puppet-paper,#fffaf0);stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;isolation:isolate;--puppet-speed:1;--puppet-phase:0s}
.pj-puppet[data-side="cho"]{color:var(--puppet-cho,#315a79)}
.pj-puppet[data-side="han"]{color:var(--puppet-han,#a84f48)}
.pj-puppet .pj-part,.pj-puppet .pj-eye,.pj-puppet .pj-far-leg{transform-box:view-box}
.pj-puppet .pj-open,.pj-puppet .pj-hatch,.pj-puppet .pj-tail-line,.pj-puppet .pj-tail-outline,.pj-puppet .pj-tail-stripe{fill:none}
.pj-puppet .pj-ink{fill:currentColor;stroke:none}
.pj-puppet .pj-highlight{fill:#fffdf5;stroke:none}
.pj-puppet .pj-eye-white{fill:#fffdf5;stroke-width:1.5}
.pj-puppet .pj-hatch{stroke-width:1.15;opacity:.7}
.pj-puppet .pj-paper-stroke{stroke:var(--puppet-paper,#fffaf0);stroke-width:1.5}
.pj-puppet .pj-ground-shadow{fill:currentColor;stroke:none;opacity:.12;transform-box:view-box;transform-origin:60px 110px}
.pj-puppet .pj-tail-outline{stroke-width:8;stroke-linecap:round}
.pj-puppet .pj-tail-stripe{stroke:var(--puppet-paper,#fffaf0);stroke-width:2.5}
.pj-puppet .pj-tail-line{stroke-width:3}
.pj-puppet .pj-bird-leg{stroke-width:3.2}
.pj-puppet .pj-spear-shaft,.pj-puppet .pj-pole{stroke-width:3}
.pj-puppet .pj-far-leg{opacity:.6}
.pj-puppet .pj-puppet-label{font:700 11px/1 system-ui,sans-serif;fill:currentColor;stroke:var(--puppet-paper,#fffaf0);stroke-width:3;paint-order:stroke fill}
.pj-puppet .pj-sweat,.pj-puppet .pj-mouth-alert,.pj-puppet .pj-attack-brow,.pj-puppet .pj-dizzy-eye,.pj-puppet .pj-stun-stars{display:none}
.pj-puppet .pj-mouth-alert{fill:currentColor;stroke:none}
.pj-puppet .pj-sweat{fill:#edf8fb;stroke:var(--puppet-sweat,#568ca7);stroke-width:1.9;transform-box:view-box;transform-origin:96px 24px}
.pj-puppet .pj-attack-brow{fill:none;stroke-width:3.4}
.pj-puppet .pj-dizzy-eye{fill:none;stroke-width:2.8}
.pj-puppet .pj-stun-stars{fill:var(--puppet-paper,#fffaf0);stroke-width:1.9}
.pj-puppet .pj-stun-orbit{stroke-dasharray:3 4;stroke-width:1.1;opacity:.55}
.pj-puppet[data-mood="alert"] .pj-sweat{display:block;animation:pj-puppet-sweat .8s ease-in infinite}
.pj-puppet[data-mood="alert"] .pj-mouth-alert{display:block}
.pj-puppet[data-mood="alert"] .pj-mouth-calm{display:none}
.pj-puppet[data-mood="alert"] .pj-eye{transform:scale(1.12,1.13)}
.pj-puppet[data-mood="alert"] .pj-pupil{transform:scale(.82,1.05)}
.pj-puppet[data-motion="attack"] .pj-attack-brow{display:block}
.pj-puppet[data-motion="attack"] .pj-pupil{transform:translateX(1px) scale(.95,1.08)}
.pj-puppet[data-motion="attack"] .pj-brow{opacity:0}
.pj-puppet[data-motion="hurt"] .pj-dizzy-eye,.pj-puppet[data-motion="hurt"] .pj-stun-stars{display:block}
.pj-puppet[data-motion="hurt"] .pj-pupil,.pj-puppet[data-motion="hurt"] .pj-highlight{display:none}
.pj-puppet[data-motion="hurt"] .pj-stun-star{animation:pj-puppet-star-turn .8s linear infinite}

/* Rank ornamentation is local to a rig; team ink remains the dominant color. */
.pj-puppet .pj-growth,.pj-puppet .pj-growth *{pointer-events:none}
.pj-puppet .pj-rank-band,.pj-puppet .pj-rank-armor{fill:currentColor;stroke-width:1.8}
.pj-puppet .pj-rank-ribbon,.pj-puppet .pj-rank-plume,.pj-puppet .pj-rank-metal{fill:var(--puppet-paper,#fffaf0);stroke-width:2.2}
.pj-puppet .pj-rank-etch{fill:none;stroke:var(--puppet-paper,#fffaf0);stroke-width:1.4}
.pj-puppet .pj-rank-etch-ink{fill:none;stroke:currentColor;stroke-width:1.35}
.pj-puppet .pj-rank-cape{fill:currentColor;stroke-width:2;opacity:.93}
.pj-puppet .pj-rank-cape-fold{fill:none;stroke:var(--puppet-paper,#fffaf0);stroke-width:1.7;opacity:.8}
.pj-puppet .pj-growth-cape{transform-box:view-box;transform-origin:60px 65px}
.pj-puppet .pj-rank-wing{fill:var(--puppet-paper,#fffaf0);stroke-width:2.3;transform-box:view-box}
.pj-puppet .pj-rank-wing-left{transform-origin:36px 65px}
.pj-puppet .pj-rank-wing-right{transform-origin:84px 65px}
.pj-puppet .pj-rank-wing-quill{fill:none;stroke:var(--puppet-gold-ink,#987025);stroke-width:1.7}
.pj-puppet .pj-rank-star{fill:currentColor;stroke:currentColor;stroke-width:1.1}
.pj-puppet .pj-rank-crown{fill:var(--puppet-gold,#e8bd58);stroke:currentColor;stroke-width:2}
.pj-puppet[data-level="5"] .pj-rank-star{fill:var(--puppet-gold,#e8bd58);stroke:var(--puppet-gold-ink,#987025);stroke-width:1.2}
.pj-puppet .pj-rank-halo{fill:none;stroke:var(--puppet-gold,#e8bd58);stroke-width:2;stroke-dasharray:5 5;opacity:.65}
.pj-puppet .pj-rank-spark{transform-box:view-box;transform-origin:60px 58px}
.pj-puppet[data-motion="idle"] .pj-growth-cape{animation:pj-rank-cape-settle 2.6s ease-in-out infinite}
.pj-puppet[data-motion="walk"] .pj-growth-cape,.pj-puppet[data-motion="selected"] .pj-growth-cape{animation:pj-rank-cape-run .45s ease-in-out infinite}
.pj-puppet[data-motion="idle"] .pj-rank-wing-left{animation:pj-rank-wing-fold 2.8s ease-in-out infinite}
.pj-puppet[data-motion="idle"] .pj-rank-wing-right{animation:pj-rank-wing-fold 2.8s ease-in-out infinite reverse}
.pj-puppet[data-motion="walk"] .pj-rank-wing-left,.pj-puppet[data-motion="attack"] .pj-rank-wing-left{animation:pj-rank-wing-flap .48s ease-in-out infinite}
.pj-puppet[data-motion="walk"] .pj-rank-wing-right,.pj-puppet[data-motion="attack"] .pj-rank-wing-right{animation:pj-rank-wing-flap .48s ease-in-out infinite reverse}
.pj-puppet[data-motion="idle"] .pj-rank-spark{animation:pj-rank-glimmer 2.4s ease-in-out infinite}
.pj-puppet[data-motion="idle"] .pj-rank-spark:nth-child(3){animation-delay:-.8s}
.pj-puppet[data-motion="idle"] .pj-rank-spark:nth-child(4){animation-delay:-1.6s}

/* Idle is articulated: torso breathing, head curiosity, hands and tails settling. */
.pj-puppet[data-motion="idle"] [data-part="body"]{animation:pj-puppet-breathe 2.1s ease-in-out infinite;animation-delay:var(--idle-delay,var(--puppet-phase))}
.pj-puppet[data-motion="idle"] [data-part="head"]{animation:pj-puppet-look 3.3s ease-in-out infinite;animation-delay:var(--idle-delay,var(--puppet-phase))}
.pj-puppet[data-motion="idle"] [data-part="arm-front"]{animation:pj-puppet-hand 2.1s ease-in-out infinite}
.pj-puppet[data-motion="idle"] [data-part="arm-back"]{animation:pj-puppet-hand 2.1s ease-in-out -.9s infinite reverse}
.pj-puppet[data-motion="idle"] [data-part="tail"]{animation:pj-puppet-tail 1.9s ease-in-out infinite}
.pj-puppet[data-motion="idle"] [data-part="trunk"]{animation:pj-puppet-trunk 2.4s ease-in-out infinite}
.pj-puppet[data-motion="idle"] .pj-eye{animation:pj-puppet-blink 4.7s linear infinite;animation-delay:var(--idle-delay,var(--puppet-phase))}
.pj-puppet[data-motion="idle"][data-type="cannon"] [data-part="weapon"]{animation:pj-puppet-cannon-breathe 2.1s ease-in-out infinite}
.pj-puppet[data-motion="idle"][data-type="rook"] [data-part="weapon"]{animation:pj-puppet-flag 1.6s ease-in-out infinite}

/* Walk is a full run cycle, separate from board-level translation. */
.pj-puppet[data-motion="walk"] [data-part="body"]{animation:pj-puppet-run-body .24s ease-in-out infinite}
.pj-puppet[data-motion="walk"] [data-part="head"]{animation:pj-puppet-run-head .24s ease-in-out infinite}
.pj-puppet[data-motion="walk"] [data-part="leg-front"]{animation:pj-puppet-run-leg .36s ease-in-out infinite}
.pj-puppet[data-motion="walk"] [data-part="leg-back"]{animation:pj-puppet-run-leg .36s ease-in-out -.18s infinite}
.pj-puppet[data-motion="walk"] [data-part="arm-front"]{animation:pj-puppet-run-arm .36s ease-in-out -.18s infinite}
.pj-puppet[data-motion="walk"] [data-part="arm-back"]{animation:pj-puppet-run-arm .36s ease-in-out infinite}
.pj-puppet[data-motion="walk"] [data-part="tail"]{animation:pj-puppet-run-tail .27s ease-in-out infinite}
.pj-puppet[data-motion="walk"] [data-part="trunk"]{animation:pj-puppet-run-trunk .32s ease-in-out infinite}
.pj-puppet[data-motion="walk"] [data-part="wheel-front"],.pj-puppet[data-motion="walk"] [data-part="wheel-back"]{animation:pj-puppet-wheel .31s linear infinite}
.pj-puppet[data-motion="walk"] .pj-ground-shadow{animation:pj-puppet-shadow .24s ease-in-out infinite}
.pj-puppet[data-motion="walk"] .pj-front-far{animation:pj-puppet-run-leg .36s ease-in-out -.18s infinite}
.pj-puppet[data-motion="walk"] .pj-back-far{animation:pj-puppet-run-leg .36s ease-in-out infinite}
.pj-puppet[data-motion="walk"][data-type="horse"] [data-part="body"]{animation-name:pj-puppet-gallop;animation-duration:.34s}
.pj-puppet[data-motion="walk"][data-type="horse"] [data-part="leg-front"]{animation-name:pj-puppet-gallop-front;animation-duration:.34s}
.pj-puppet[data-motion="walk"][data-type="horse"] [data-part="leg-back"]{animation-name:pj-puppet-gallop-back;animation-duration:.34s}
.pj-puppet[data-motion="walk"][data-type="elephant"] [data-part="body"]{animation-duration:.42s}
.pj-puppet[data-motion="walk"][data-type="elephant"] [data-part="leg-front"],.pj-puppet[data-motion="walk"][data-type="elephant"] [data-part="leg-back"],.pj-puppet[data-motion="walk"][data-type="elephant"] .pj-far-leg{animation-duration:.62s}
.pj-puppet[data-motion="walk"][data-type="cannon"] [data-part="weapon"]{animation:pj-puppet-cannon-rattle .22s ease-in-out infinite}
.pj-puppet[data-motion="walk"][data-type="rook"] [data-part="weapon"]{animation:pj-puppet-flag .2s ease-in-out infinite}
.pj-puppet[data-motion="walk"][data-type="soldier"] [data-part="arm-back"]{animation:pj-puppet-wing .18s ease-in-out infinite}

/* Attack is also usable without the cinematic layer. WAAPI can override joints. */
.pj-puppet[data-motion="attack"] [data-part="body"]{animation:pj-puppet-strike-body .52s ease-out both}
.pj-puppet[data-motion="attack"] [data-part="head"]{animation:pj-puppet-strike-head .52s ease-out both}
.pj-puppet[data-motion="attack"] [data-part="arm-front"]{animation:pj-puppet-strike-arm .52s cubic-bezier(.2,.8,.2,1) both}
.pj-puppet[data-motion="attack"] [data-part="arm-back"]{animation:pj-puppet-counter-arm .52s ease-out both}
.pj-puppet[data-motion="attack"] [data-part="leg-front"]{animation:pj-puppet-brace-front .52s ease-out both}
.pj-puppet[data-motion="attack"] [data-part="leg-back"]{animation:pj-puppet-brace-back .52s ease-out both}
.pj-puppet[data-motion="attack"] [data-part="weapon"]{animation:pj-puppet-weapon .52s ease-out both}
.pj-puppet[data-motion="attack"] [data-part="tail"]{animation:pj-puppet-tail-whip .52s ease-out both}
.pj-puppet[data-motion="attack"][data-type="king"] [data-part="weapon"]{animation-name:pj-puppet-fan-snap}
.pj-puppet[data-motion="attack"][data-type="guard"] [data-part="weapon"]{animation-name:pj-puppet-shield-bash}
.pj-puppet[data-motion="attack"][data-type="cannon"] [data-part="weapon"]{animation-name:pj-puppet-cannon-fire}
.pj-puppet[data-motion="attack"][data-type="cannon"] [data-part="wheel-front"],.pj-puppet[data-motion="attack"][data-type="cannon"] [data-part="wheel-back"]{animation:pj-puppet-wheel-kick .52s ease-out both}
.pj-puppet[data-motion="attack"][data-type="rook"] [data-part="wheel-front"],.pj-puppet[data-motion="attack"][data-type="rook"] [data-part="wheel-back"]{animation:pj-puppet-wheel .23s linear infinite}
.pj-puppet[data-motion="attack"][data-type="horse"] [data-part="leg-front"]{animation-name:pj-puppet-horse-kick}
.pj-puppet[data-motion="attack"][data-type="elephant"] [data-part="trunk"]{animation:pj-puppet-trunk-hit .52s ease-out both}
.pj-puppet[data-motion="attack"][data-type="elephant"] [data-part="leg-front"]{animation-name:pj-puppet-stomp}
.pj-puppet[data-motion="attack"][data-type="soldier"] [data-part="weapon"]{animation-name:pj-puppet-spear-jab}

.pj-puppet[data-motion="hurt"] [data-part="body"]{animation:pj-puppet-hurt-body .56s ease-out both}
.pj-puppet[data-motion="hurt"] [data-part="head"]{animation:pj-puppet-hurt-head .56s ease-out both}
.pj-puppet[data-motion="hurt"] [data-part="arm-front"],.pj-puppet[data-motion="hurt"] [data-part="arm-back"]{animation:pj-puppet-hurt-arm .56s ease-out both}
.pj-puppet[data-motion="hurt"] [data-part="weapon"]{animation:pj-puppet-hurt-weapon .56s ease-out both}
.pj-puppet[data-motion="hurt"] [data-part="tail"],.pj-puppet[data-motion="hurt"] [data-part="trunk"]{animation:pj-puppet-hurt-appendage .56s ease-out both}
.pj-puppet[data-motion="hurt"] .pj-eye{transform:scale(1.02,.9)}
.pj-puppet[data-motion="hurt"] .pj-mouth-calm{display:none}
.pj-puppet[data-motion="hurt"] .pj-mouth-alert{display:block}
.pj-puppet[data-motion="selected"] [data-part="body"]{animation:pj-puppet-ready .72s ease-in-out infinite}
.pj-puppet[data-motion="selected"] [data-part="head"]{animation:pj-puppet-ready-head .72s ease-in-out infinite}
.pj-puppet[data-motion="selected"] [data-part="weapon"]{animation:pj-puppet-ready-weapon .72s ease-in-out infinite}
.pj-puppet[data-motion="selected"] [data-part="tail"]{animation:pj-puppet-run-tail .35s ease-in-out infinite}
.pj-puppet[data-motion="selected"] [data-part="trunk"]{animation:pj-puppet-trunk .8s ease-in-out infinite}
.pj-puppet[data-motion="selected"] .pj-eye{transform:scale(1.12,1.06)}

@keyframes pj-puppet-breathe{0%,100%{transform:translateY(0) scale(1,1)}50%{transform:translateY(-1.7px) scale(1.018,.985)}}
@keyframes pj-puppet-look{0%,100%{transform:rotate(-1.8deg)}32%{transform:rotate(2.2deg)}64%{transform:rotate(-.7deg)}}
@keyframes pj-puppet-hand{0%,100%{transform:rotate(-2deg)}50%{transform:rotate(4deg)}}
@keyframes pj-puppet-tail{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(9deg)}}
@keyframes pj-puppet-trunk{0%,100%{transform:rotate(-3deg)}50%{transform:rotate(6deg) translateY(1px)}}
@keyframes pj-puppet-blink{0%,41%,45%,78%,82%,100%{transform:scaleY(1)}43%,80%{transform:scaleY(.08)}}
@keyframes pj-puppet-sweat{0%,100%{transform:translateY(-2px);opacity:.2}25%{opacity:1}90%{transform:translateY(4px);opacity:.5}}
@keyframes pj-puppet-cannon-breathe{0%,100%{transform:rotate(0deg)}50%{transform:rotate(-1.7deg) translateY(-1px)}}
@keyframes pj-puppet-flag{0%,100%{transform:rotate(-3deg) skewX(-2deg)}50%{transform:rotate(4deg) skewX(3deg)}}
@keyframes pj-puppet-run-body{0%,100%{transform:translateY(0) rotate(-3deg) scale(1.04,.97)}50%{transform:translateY(-4px) rotate(3deg) scale(.98,1.03)}}
@keyframes pj-puppet-run-head{0%,100%{transform:rotate(4deg) translateY(1px)}50%{transform:rotate(-4deg) translateY(-1px)}}
@keyframes pj-puppet-run-leg{0%,100%{transform:rotate(-24deg) translateY(-1px)}50%{transform:rotate(25deg) translateY(-3px)}}
@keyframes pj-puppet-run-arm{0%,100%{transform:rotate(21deg)}50%{transform:rotate(-24deg)}}
@keyframes pj-puppet-run-tail{0%,100%{transform:rotate(-15deg)}50%{transform:rotate(18deg)}}
@keyframes pj-puppet-run-trunk{0%,100%{transform:rotate(8deg)}50%{transform:rotate(-15deg) translateY(-1px)}}
@keyframes pj-puppet-wheel{to{transform:rotate(360deg)}}
@keyframes pj-puppet-shadow{0%,100%{transform:scaleX(1);opacity:.14}50%{transform:scaleX(.84);opacity:.08}}
@keyframes pj-puppet-gallop{0%,100%{transform:translateY(0) rotate(4deg)}35%{transform:translateY(-6px) rotate(-5deg)}70%{transform:translateY(-3px) rotate(-1deg)}}
@keyframes pj-puppet-gallop-front{0%,100%{transform:rotate(-32deg)}50%{transform:rotate(30deg) translateY(-2px)}}
@keyframes pj-puppet-gallop-back{0%,100%{transform:rotate(29deg)}50%{transform:rotate(-30deg) translateY(-3px)}}
@keyframes pj-puppet-cannon-rattle{0%,100%{transform:translateY(-1px) rotate(-2deg)}50%{transform:translateY(2px) rotate(2deg)}}
@keyframes pj-puppet-wing{0%,100%{transform:rotate(25deg)}50%{transform:rotate(-32deg)}}
@keyframes pj-puppet-strike-body{0%{transform:translateX(-2px) rotate(-5deg) scale(1.05,.95)}35%{transform:translateX(4px) rotate(6deg) scale(.98,1.03)}65%{transform:translateX(1px) rotate(1deg)}100%{transform:none}}
@keyframes pj-puppet-strike-head{0%{transform:rotate(-5deg)}38%{transform:rotate(8deg) translateX(2px)}100%{transform:none}}
@keyframes pj-puppet-strike-arm{0%{transform:rotate(-18deg)}34%{transform:rotate(27deg) translateX(2px)}58%{transform:rotate(14deg)}100%{transform:none}}
@keyframes pj-puppet-counter-arm{0%{transform:rotate(15deg)}36%{transform:rotate(-23deg)}100%{transform:none}}
@keyframes pj-puppet-brace-front{0%{transform:rotate(0deg)}38%{transform:rotate(-15deg)}100%{transform:none}}
@keyframes pj-puppet-brace-back{0%{transform:rotate(0deg)}38%{transform:rotate(18deg)}100%{transform:none}}
@keyframes pj-puppet-weapon{0%{transform:rotate(-9deg)}36%{transform:rotate(10deg)}100%{transform:none}}
@keyframes pj-puppet-tail-whip{0%{transform:rotate(10deg)}38%{transform:rotate(-21deg)}100%{transform:none}}
@keyframes pj-puppet-fan-snap{0%{transform:rotate(-18deg) scale(.85,1)}32%{transform:rotate(21deg) scale(1.08,1)}55%{transform:rotate(8deg)}100%{transform:none}}
@keyframes pj-puppet-shield-bash{0%{transform:translateX(-3px) rotate(-9deg)}34%{transform:translateX(6px) rotate(5deg)}52%{transform:translateX(2px) rotate(-2deg)}100%{transform:none}}
@keyframes pj-puppet-cannon-fire{0%{transform:translateX(0) rotate(-4deg)}28%{transform:translateX(-8px) rotate(5deg) scale(.96,1.05)}44%{transform:translateX(-3px) rotate(-2deg)}100%{transform:none}}
@keyframes pj-puppet-wheel-kick{0%{transform:rotate(0deg)}28%{transform:rotate(-22deg)}60%{transform:rotate(7deg)}100%{transform:none}}
@keyframes pj-puppet-horse-kick{0%{transform:rotate(16deg)}35%{transform:rotate(-42deg) translateY(-2px)}60%{transform:rotate(-25deg)}100%{transform:none}}
@keyframes pj-puppet-trunk-hit{0%{transform:rotate(8deg)}36%{transform:rotate(-24deg) translateY(-3px)}60%{transform:rotate(-8deg)}100%{transform:none}}
@keyframes pj-puppet-stomp{0%{transform:translateY(0)}24%{transform:translateY(-9px) rotate(-12deg)}40%{transform:translateY(1px) rotate(2deg)}100%{transform:none}}
@keyframes pj-puppet-spear-jab{0%{transform:rotate(-9deg)}34%{transform:rotate(24deg) translateX(2px)}58%{transform:rotate(12deg)}100%{transform:none}}
@keyframes pj-puppet-hurt-body{0%{transform:none}22%{transform:translateX(-5px) rotate(-8deg) scale(.96,1.04)}55%{transform:translateX(1px) rotate(4deg)}100%{transform:rotate(-3deg) scale(1.03,.97)}}
@keyframes pj-puppet-hurt-head{0%{transform:none}25%{transform:rotate(-13deg) translateY(-2px)}65%{transform:rotate(8deg)}100%{transform:rotate(7deg) translateY(2px)}}
@keyframes pj-puppet-hurt-arm{0%{transform:none}25%{transform:rotate(-26deg)}100%{transform:rotate(14deg)}}
@keyframes pj-puppet-hurt-weapon{0%{transform:none}35%{transform:rotate(-16deg)}100%{transform:rotate(12deg) translateY(3px)}}
@keyframes pj-puppet-hurt-appendage{0%{transform:none}35%{transform:rotate(18deg)}100%{transform:rotate(-8deg) translateY(2px)}}
@keyframes pj-puppet-ready{0%,100%{transform:translateY(0) scale(1.02,.98)}50%{transform:translateY(-3px) scale(.99,1.025)}}
@keyframes pj-puppet-ready-head{0%,100%{transform:rotate(-2deg)}50%{transform:rotate(3deg) translateY(-1px)}}
@keyframes pj-puppet-ready-weapon{0%,100%{transform:rotate(-4deg)}50%{transform:rotate(5deg)}}
@keyframes pj-puppet-star-turn{to{transform:rotate(360deg)}}
@keyframes pj-rank-cape-settle{0%,100%{transform:rotate(-1deg)}50%{transform:rotate(1.5deg)}}
@keyframes pj-rank-cape-run{0%,100%{transform:rotate(-3deg) skewX(-2deg)}50%{transform:rotate(2deg) skewX(2deg)}}
@keyframes pj-rank-wing-fold{0%,100%{transform:rotate(-1deg)}50%{transform:rotate(2deg)}}
@keyframes pj-rank-wing-flap{0%,100%{transform:rotate(-4deg)}50%{transform:rotate(5deg)}}
@keyframes pj-rank-glimmer{0%,100%{opacity:.5}50%{opacity:1}}

/* State and artwork stay visible, but all nonessential motion stops. */
.motion-off .pj-puppet *,.pj-puppet[data-motion="off"] *{animation:none!important;transition:none!important}
@media(prefers-reduced-motion:reduce){.pj-puppet *{animation:none!important;transition:none!important}}
