/* Joint origins are local SVG user units. Stage translation is never animated here. */
.cat-performer{--cp-period:1800ms;overflow:visible;}
.cat-performer g,.cat-performer path,.cat-performer ellipse{transform-box:view-box;}
.cat-performer .cp-body{transform-origin:150px 290px;}
.cat-performer .cp-head{transform-origin:150px 175px;}
.cat-performer .cp-ear-left{transform-origin:94px 88px;}
.cat-performer .cp-ear-right{transform-origin:207px 88px;}
.cat-performer .cp-tail{transform-origin:210px 274px;animation:cp-tail 3.7s ease-in-out infinite;}
.cat-performer .cp-tail-tip{transform-origin:260px 236px;animation:cp-tail-tip 2.5s ease-in-out infinite;}
.cat-performer .cp-arm-left{transform-origin:98px 194px;}
.cat-performer .cp-arm-right{transform-origin:201px 194px;}
.cat-performer .cp-paw-left{transform-origin:85px 231px;}
.cat-performer .cp-paw-right{transform-origin:232px 221px;}
.cat-performer .cp-leg-left{transform-origin:112px 279px;}
.cat-performer .cp-leg-right{transform-origin:189px 279px;}
.cat-performer .cp-pupil{animation:cp-gaze 6s ease-in-out infinite;}
.cat-performer .cp-lid{transform:scaleY(0);transform-origin:0 102px;animation:cp-blink 5.3s linear infinite;}
.cat-performer .cp-lid-right{animation-delay:60ms;}
.cat-performer .cp-sleep-eye,.cat-performer .cp-mouth-talk,.cat-performer .cp-prop{display:none;}
.cat-performer .cp-page{transform-origin:151px 240px;}
.cat-performer[data-pose=idle] .cp-head{animation:cp-head-idle 4.2s ease-in-out infinite;}
.cat-performer[data-pose=idle] .cp-ear-right{animation:cp-ear-perk 7s ease-in-out infinite;}
.cat-performer[data-pose=greet] .cp-arm-right,.cat-performer[data-pose=goodbye] .cp-arm-right{transform:rotate(-118deg);animation:cp-wave var(--cp-period) ease-in-out infinite;}
.cat-performer[data-pose=greet] .cp-paw-right,.cat-performer[data-pose=goodbye] .cp-paw-right{animation:cp-wrist .42s ease-in-out infinite;}
.cat-performer[data-pose=greet] .cp-head{animation:cp-nod 1.8s ease-in-out infinite;}
.cat-performer[data-pose=ready] .cp-arm-left{transform:rotate(-25deg);animation:cp-pump 1s ease-in-out infinite;}
.cat-performer[data-pose=ready] .cp-arm-right{transform:rotate(25deg);animation:cp-pump-right 1s ease-in-out infinite;}
.cat-performer[data-pose=ready] .cp-ear{animation:cp-ear-perk 1.4s ease-in-out infinite;}
.cat-performer[data-pose=scan] .cp-lens,.cat-performer[data-pose=inspect] .cp-lens{display:inline;animation:cp-lens var(--cp-period) ease-in-out infinite;transform-origin:210px 220px;}
.cat-performer[data-pose=scan] .cp-head{transform:rotate(6deg);animation:cp-search var(--cp-period) ease-in-out infinite;}
.cat-performer[data-pose=scan] .cp-arm-right,.cat-performer[data-pose=inspect] .cp-arm-right{transform:rotate(18deg);animation:cp-hold-lens var(--cp-period) ease-in-out infinite;}
.cat-performer[data-pose=scan] .cp-pupil,.cat-performer[data-pose=compare] .cp-pupil{animation:cp-compare var(--cp-period) ease-in-out infinite;}
.cat-performer[data-pose=draw] .cp-pen{display:inline;}
.cat-performer[data-pose=draw] .cp-head{transform:rotate(9deg);animation:cp-concentrate 2.3s ease-in-out infinite;}
.cat-performer[data-pose=draw] .cp-pupil{transform:translate(4px,5px);animation:none;}
.cat-performer[data-pose=draw] .cp-arm-right{transform:translate(17px,-24px) rotate(-6deg);}
.cat-performer[data-pose=draw] .cp-upper-right{transform-origin:232px 225px;animation:cp-elbow .7s ease-in-out infinite;}
.cat-performer[data-pose=draw] .cp-arm-left{animation:cp-balance 2s ease-in-out infinite;}
.cat-performer[data-pose=draw] .cp-ink{animation:cp-ink .7s ease-in-out infinite;}
.cat-performer[data-pose=inspect] .cp-head{transform:translate(9px,4px) rotate(9deg);animation:cp-inspect 2s ease-in-out infinite;}
.cat-performer[data-pose=inspect] .cp-pupil{transform:translate(5px,2px);animation:none;}
.cat-performer[data-pose=inspect] .cp-ear-left{transform:rotate(-14deg);}
.cat-performer[data-pose=listen] .cp-head{transform:rotate(-12deg);animation:cp-listen 2.8s ease-in-out infinite;}
.cat-performer[data-pose=listen] .cp-ear-left{transform:rotate(-18deg);animation:cp-ear-perk 1.2s ease-in-out infinite;}
.cat-performer[data-pose=listen] .cp-arm-left{transform:rotate(125deg);}
.cat-performer[data-pose=think] .cp-thought{display:inline;animation:cp-thought 2.4s ease-in-out infinite;}
.cat-performer[data-pose=think] .cp-arm-right{transform:translate(-27px,-13px) rotate(103deg);}
.cat-performer[data-pose=think] .cp-head{transform:rotate(-8deg);animation:cp-think 3s ease-in-out infinite;}
.cat-performer[data-pose=think] .cp-pupil{transform:translate(-3px,-4px);animation:none;}
.cat-performer[data-pose=read] .cp-book,.cat-performer[data-pose=compare] .cp-book{display:inline;}
.cat-performer[data-pose=read] .cp-head{transform:translateY(7px) rotate(3deg);animation:cp-read 3s ease-in-out infinite;}
.cat-performer[data-pose=read] .cp-pupil{transform:translateY(6px);animation:cp-reading-gaze 2.1s ease-in-out infinite;}
.cat-performer[data-pose=read] .cp-page,.cat-performer[data-pose=compare] .cp-page{animation:cp-page 3.8s ease-in-out infinite;}
.cat-performer[data-pose=read] .cp-arm-left,.cat-performer[data-pose=compare] .cp-arm-left{transform:rotate(-24deg);}
.cat-performer[data-pose=read] .cp-arm-right,.cat-performer[data-pose=compare] .cp-arm-right{transform:rotate(24deg);}
.cat-performer[data-pose=compare] .cp-head{animation:cp-compare-head var(--cp-period) ease-in-out infinite;}
.cat-performer[data-pose=discover] .cp-spark,.cat-performer[data-pose=celebrate] .cp-spark{display:inline;animation:cp-spark 1.2s ease-in-out infinite;transform-origin:150px 150px;}
.cat-performer[data-pose=discover] .cp-ear-left{transform:rotate(-9deg);animation:cp-ear-alert .8s ease-in-out infinite;}
.cat-performer[data-pose=discover] .cp-ear-right{transform:rotate(9deg);animation:cp-ear-alert .8s ease-in-out infinite;}
.cat-performer[data-pose=discover] .cp-arm-right{transform:rotate(-98deg);animation:cp-found 1s ease-in-out infinite;}
.cat-performer[data-pose=discover] .cp-head{animation:cp-surprise 1.5s ease-in-out infinite;}
.cat-performer[data-pose=confirm] .cp-check{display:inline;animation:cp-seal var(--cp-period) ease-in-out infinite;transform-origin:253px 190px;}
.cat-performer[data-pose=confirm] .cp-head,.cat-performer[data-pose=nod] .cp-head{animation:cp-nod var(--cp-period) ease-in-out infinite;}
.cat-performer[data-pose=confirm] .cp-arm-right{transform:rotate(-35deg);}
.cat-performer[data-pose=explain] .cp-arm-left{animation:cp-explain var(--cp-period) ease-in-out infinite;}
.cat-performer[data-pose=explain] .cp-arm-right{animation:cp-explain-right var(--cp-period) ease-in-out infinite;}
.cat-performer[data-pose=explain] .cp-mouth-smile{display:none;}
.cat-performer[data-pose=explain] .cp-mouth-talk{display:inline;animation:cp-talk .36s ease-in-out infinite;transform-origin:151px 158px;}
.cat-performer[data-pose=explain] .cp-head{animation:cp-nod 2.8s ease-in-out infinite;}
.cat-performer[data-pose=point] .cp-arm-right{transform:rotate(-72deg);animation:cp-point var(--cp-period) ease-in-out infinite;}
.cat-performer[data-pose=point] .cp-pupil{transform:translateX(5px);animation:none;}
.cat-performer[data-pose=point] .cp-head{transform:rotate(8deg);}
.cat-performer[data-pose=walk] .cp-leg-left{animation:cp-step .65s ease-in-out infinite;}
.cat-performer[data-pose=walk] .cp-leg-right{animation:cp-step .65s ease-in-out -.325s infinite;}
.cat-performer[data-pose=walk] .cp-arm-left{animation:cp-arm-walk .65s ease-in-out -.325s infinite;}
.cat-performer[data-pose=walk] .cp-arm-right{animation:cp-arm-walk .65s ease-in-out infinite;}
.cat-performer[data-pose=walk] .cp-head{animation:cp-walk-head .65s ease-in-out infinite;}
.cat-performer[data-pose=hop] .cp-body{animation:cp-hop var(--cp-period) ease-in-out infinite;}
.cat-performer[data-pose=hop] .cp-leg-left{animation:cp-crouch var(--cp-period) ease-in-out infinite;}
.cat-performer[data-pose=hop] .cp-leg-right{animation:cp-crouch var(--cp-period) ease-in-out infinite reverse;}
.cat-performer[data-pose=hop] .cp-arm-left{animation:cp-jump-arm var(--cp-period) ease-in-out infinite;}
.cat-performer[data-pose=hop] .cp-arm-right{animation:cp-jump-arm var(--cp-period) ease-in-out infinite reverse;}
.cat-performer[data-pose=celebrate] .cp-arm-left{transform:rotate(140deg);animation:cp-cheer-left .7s ease-in-out infinite;}
.cat-performer[data-pose=celebrate] .cp-arm-right{transform:rotate(-140deg);animation:cp-cheer-right .7s ease-in-out infinite;}
.cat-performer[data-pose=celebrate] .cp-head{animation:cp-happy 1.1s ease-in-out infinite;}
.cat-performer[data-pose=uncertain] .cp-question{display:inline;animation:cp-question 2s ease-in-out infinite;transform-origin:266px 74px;}
.cat-performer[data-pose=uncertain] .cp-head{transform:rotate(-12deg);animation:cp-doubt 2.6s ease-in-out infinite;}
.cat-performer[data-pose=uncertain] .cp-ear-right{transform:rotate(24deg);}
.cat-performer[data-pose=uncertain] .cp-arm-left{transform:rotate(46deg);}
.cat-performer[data-pose=rest] .cp-head{transform:translateY(10px) rotate(6deg);animation:cp-sleep 4s ease-in-out infinite;}
.cat-performer[data-pose=rest] .cp-eye>ellipse,.cat-performer[data-pose=rest] .cp-pupil,.cat-performer[data-pose=rest] .cp-lid{display:none;}
.cat-performer[data-pose=rest] .cp-sleep-eye{display:inline;}
.cat-performer[data-pose=rest] .cp-tail{animation-duration:7s;}
.cat-performer[data-pose=goodbye] .cp-head{transform:rotate(-8deg);}
.cat-performer[data-pose=stretch] .cp-arm-left{transform:rotate(165deg);animation:cp-stretch-left 3s ease-in-out infinite;}
.cat-performer[data-pose=stretch] .cp-arm-right{transform:rotate(-165deg);animation:cp-stretch-right 3s ease-in-out infinite;}
.cat-performer[data-pose=stretch] .cp-head{animation:cp-stretch-head 3s ease-in-out infinite;}
.cat-performer[data-pose=nod] .cp-ear{animation:cp-ear-alert var(--cp-period) ease-in-out infinite;}
.cat-performer[data-pose=lookAround] .cp-head{animation:cp-look-around 4s ease-in-out infinite;}
.cat-performer[data-pose=lookAround] .cp-pupil{animation:cp-compare 4s ease-in-out infinite;}
.cat-performer[data-pose=bow] .cp-head{transform:translateY(12px) rotate(12deg);animation:cp-bow var(--cp-period) ease-in-out infinite;}
.cat-performer[data-pose=bow] .cp-arm-left{transform:rotate(-28deg);}
.cat-performer[data-pose=bow] .cp-arm-right{transform:rotate(28deg);}
@keyframes cp-tail{50%{transform:rotate(-12deg)}}
@keyframes cp-tail-tip{50%{transform:rotate(17deg)}}
@keyframes cp-gaze{0%,40%,100%{transform:translate(0)}45%,65%{transform:translate(3px,1px)}70%,90%{transform:translate(-2px,0)}}
@keyframes cp-blink{0%,43%,48%,100%{transform:scaleY(0)}45%,46%{transform:scaleY(1)}}
@keyframes cp-head-idle{50%{transform:rotate(-3deg) translateY(2px)}}
@keyframes cp-ear-perk{0%,70%,100%{transform:rotate(0)}78%,87%{transform:rotate(-10deg)}}
@keyframes cp-wave{0%,100%{transform:rotate(-110deg)}50%{transform:rotate(-145deg)}}
@keyframes cp-wrist{50%{transform:rotate(18deg)}}
@keyframes cp-nod{0%,100%{transform:rotate(0)}35%,55%{transform:translateY(5px) rotate(5deg)}}
@keyframes cp-pump{50%{transform:rotate(-45deg)}}
@keyframes cp-pump-right{50%{transform:rotate(45deg)}}
@keyframes cp-lens{50%{transform:rotate(9deg) translate(2px,-3px)}}
@keyframes cp-search{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(9deg)}}
@keyframes cp-hold-lens{0%,100%{transform:rotate(18deg)}50%{transform:rotate(28deg)}}
@keyframes cp-compare{0%,100%{transform:translate(-5px,2px)}50%{transform:translate(5px,3px)}}
@keyframes cp-concentrate{0%,100%{transform:rotate(9deg)}50%{transform:rotate(13deg) translateY(2px)}}
@keyframes cp-elbow{50%{transform:rotate(4deg)}}
@keyframes cp-balance{50%{transform:rotate(-12deg)}}
@keyframes cp-ink{50%{opacity:.45}}
@keyframes cp-inspect{0%,100%{transform:translate(9px,4px) rotate(9deg)}50%{transform:translate(13px,8px) rotate(12deg)}}
@keyframes cp-listen{0%,100%{transform:rotate(-12deg)}50%{transform:rotate(-17deg)}}
@keyframes cp-thought{50%{opacity:.4;transform:translateY(-4px)}}
@keyframes cp-think{0%,100%{transform:rotate(-8deg)}50%{transform:rotate(-12deg) translateY(-2px)}}
@keyframes cp-read{0%,100%{transform:translateY(7px) rotate(3deg)}50%{transform:translateY(10px) rotate(-2deg)}}
@keyframes cp-reading-gaze{0%,100%{transform:translate(-4px,6px)}70%{transform:translate(4px,6px)}}
@keyframes cp-page{0%,62%,100%{transform:scaleX(1)}80%{transform:scaleX(.04)}}
@keyframes cp-compare-head{0%,100%{transform:rotate(-8deg)}50%{transform:rotate(9deg) translateY(4px)}}
@keyframes cp-spark{50%{opacity:.5;transform:scale(1.06)}}
@keyframes cp-ear-alert{50%{transform:translateY(-4px)}}
@keyframes cp-found{0%,100%{transform:rotate(-98deg)}50%{transform:rotate(-116deg)}}
@keyframes cp-surprise{50%{transform:translateY(-7px)}}
@keyframes cp-seal{0%,100%{transform:scale(.92)}50%{transform:scale(1.08)}}
@keyframes cp-explain{0%,100%{transform:rotate(-18deg)}50%{transform:rotate(35deg)}}
@keyframes cp-explain-right{0%,100%{transform:rotate(-40deg)}50%{transform:rotate(18deg)}}
@keyframes cp-talk{50%{transform:scaleY(.35)}}
@keyframes cp-point{0%,100%{transform:rotate(-72deg)}50%{transform:rotate(-79deg)}}
@keyframes cp-step{0%,100%{transform:rotate(-15deg)}50%{transform:rotate(18deg) translateY(-6px)}}
@keyframes cp-arm-walk{0%,100%{transform:rotate(20deg)}50%{transform:rotate(-25deg)}}
@keyframes cp-walk-head{50%{transform:translateY(3px) rotate(2deg)}}
@keyframes cp-hop{0%,100%{transform:translateY(0)}20%{transform:translateY(5px)}55%{transform:translateY(-22px)}}
@keyframes cp-crouch{20%{transform:rotate(15deg)}55%{transform:rotate(-10deg)}}
@keyframes cp-jump-arm{55%{transform:rotate(90deg)}}
@keyframes cp-cheer-left{0%,100%{transform:rotate(140deg)}50%{transform:rotate(162deg)}}
@keyframes cp-cheer-right{0%,100%{transform:rotate(-140deg)}50%{transform:rotate(-162deg)}}
@keyframes cp-happy{50%{transform:rotate(6deg) translateY(-3px)}}
@keyframes cp-question{50%{transform:rotate(9deg)}}
@keyframes cp-doubt{0%,100%{transform:rotate(-12deg)}50%{transform:rotate(-18deg)}}
@keyframes cp-sleep{0%,100%{transform:translateY(10px) rotate(6deg)}50%{transform:translateY(13px) rotate(7deg)}}
@keyframes cp-stretch-left{50%{transform:rotate(175deg) translateY(-6px)}}
@keyframes cp-stretch-right{50%{transform:rotate(-175deg) translateY(-6px)}}
@keyframes cp-stretch-head{50%{transform:translateY(-7px)}}
@keyframes cp-look-around{0%,100%{transform:rotate(-10deg)}50%{transform:rotate(12deg)}}
@keyframes cp-bow{0%,100%{transform:translateY(12px) rotate(12deg)}50%{transform:translateY(19px) rotate(17deg)}}
.cat-performer[data-reduced-motion=true] *{animation:none!important;transition:none!important;}
.cat-performer[data-paused=true] *{animation-play-state:paused!important;}
@media(prefers-reduced-motion:reduce){.cat-performer *{animation:none!important;transition:none!important;}}

.cat-performer[data-action=penLift] .cp-pen{display:inline;transform:translate(-10px,-35px) rotate(-10deg);transform-origin:273px 232px;animation:cp-pen-lift 1.3s ease-in-out infinite;}
.cat-performer[data-action=penLift] .cp-arm-right{transform:translate(15px,-35px);animation:cp-pen-arm 1.3s ease-in-out infinite;}
.cat-performer[data-action=run] .cp-leg,.cat-performer[data-action=run] .cp-arm,.cat-performer[data-action=run] .cp-head{animation-duration:.36s;}
.cat-performer[data-action=arrive] .cp-check{display:none;}
.cat-performer[data-action=arrive] .cp-arm-left{animation:cp-explain 1.6s ease-in-out infinite;}
.cat-performer[data-action=turnPage] .cp-page{animation:cp-turn-page .6s ease-in-out 1 forwards;}
.cat-performer[data-action=turnPage] .cp-arm-right{animation:cp-page-arm 1.1s ease-in-out infinite;}
.cat-performer[data-action=magnify] .cp-head{animation:cp-magnify-head 2.2s ease-in-out infinite;}
.cat-performer[data-action=welcome] .cp-arm-left{animation:cp-explain 1.8s ease-in-out infinite;}
.cat-performer[data-action=present] .cp-arm-left{animation:cp-present-left 2s ease-in-out infinite;}
@keyframes cp-pen-lift{50%{transform:translate(-10px,-46px) rotate(-15deg)}}
@keyframes cp-pen-arm{50%{transform:translate(15px,-46px)}}
@keyframes cp-page-arm{0%,100%{transform:rotate(24deg)}50%{transform:translate(-15px,-5px) rotate(40deg)}}
@keyframes cp-turn-page{0%{transform:scaleX(1)}45%{transform:scaleX(.05)}80%,100%{transform:scaleX(-1)}}
@keyframes cp-magnify-head{0%,100%{transform:translate(13px,8px) rotate(12deg)}50%{transform:translate(19px,4px) rotate(15deg)}}
@keyframes cp-present-left{50%{transform:rotate(55deg)}}
.cat-performer[data-action=magnify] .cp-lens{animation:none;transform:none;}

/* Longer bent forearms bring greeting and celebration paws outside the face. */
.cat-performer[data-pose=greet] .cp-arm-right,.cat-performer[data-pose=goodbye] .cp-arm-right{transform:rotate(-5deg);animation-name:cp-wave-visible;}
.cat-performer[data-pose=celebrate] .cp-arm-right{transform:rotate(-14deg);animation-name:cp-cheer-visible-right;}
.cat-performer[data-pose=celebrate] .cp-arm-left{transform:rotate(14deg);animation-name:cp-cheer-visible-left;}
.cat-performer[data-pose=stretch] .cp-arm-right{transform:rotate(-22deg);animation-name:cp-cheer-visible-right;}
.cat-performer[data-pose=stretch] .cp-arm-left{transform:rotate(22deg);animation-name:cp-cheer-visible-left;}
@keyframes cp-wave-visible{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(-24deg)}}
@keyframes cp-cheer-visible-right{0%,100%{transform:rotate(-14deg)}50%{transform:rotate(-28deg)}}
@keyframes cp-cheer-visible-left{0%,100%{transform:rotate(14deg)}50%{transform:rotate(28deg)}}

/* Original Yuejian artwork uses its original 500 x 570 coordinate system.
   Only this internal art group is scaled .6; stage prop anchors stay 300 x 360. */
.cat-performer .cp-original .cp-body{transform-origin:250px 480px;}
.cat-performer .cp-original .cp-head{transform-origin:250px 310px;}
.cat-performer .cp-original .cp-ear-left{transform-origin:180px 165px;}
.cat-performer .cp-original .cp-ear-right{transform-origin:326px 165px;}
.cat-performer .cp-original .cp-tail{transform-origin:326px 426px;}
.cat-performer .cp-original .cp-arm-left{transform-origin:176px 346px;}
.cat-performer .cp-original .cp-arm-right{transform-origin:325px 346px;}
.cat-performer .cp-original .cp-paw-left{transform-origin:204px 420px;}
.cat-performer .cp-original .cp-paw-right{transform-origin:296px 420px;}
.cat-performer .cp-original .cp-leg-left{transform-origin:208px 475px;}
.cat-performer .cp-original .cp-leg-right{transform-origin:296px 475px;}
.cat-performer .cp-original .cp-lid{transform-origin:0 191px;}
.cat-performer .cp-original .cp-mouth-talk{transform-origin:250px 268px;}
.cat-performer .cp-orb{display:none;}
.cat-performer[data-action=idle] .cp-orb,.cat-performer[data-action=welcome] .cp-orb{display:inline;}
.cat-performer[data-action=welcome] .cp-arm{transform:none;animation:none;}
.cat-performer[data-action=welcome] .cp-paw-right{animation:none;}
.cat-performer[data-action=welcome] .cp-head{animation:cp-head-idle 4.2s ease-in-out infinite;}
.cat-performer[data-action=welcome] .cp-ear-right{animation:cp-ear-perk 7s ease-in-out infinite;}
.cat-performer[data-action=draw] .cp-arm-right{transform:none;}
.cat-performer[data-action=draw] .cp-paw-right{animation:cp-original-draw-wrist .8s ease-in-out infinite;}
.cat-performer[data-action=penLift] .cp-arm-right{transform:none;animation:cp-original-lift 1.3s ease-in-out infinite;}
.cat-performer[data-action=read] .cp-arm-left,.cat-performer[data-action=compare] .cp-arm-left{transform:none;}
.cat-performer[data-action=read] .cp-arm-right,.cat-performer[data-action=compare] .cp-arm-right{transform:none;}
@keyframes cp-original-draw-wrist{50%{transform:rotate(6deg)}}
@keyframes cp-original-lift{50%{transform:translateY(-12px)}}

/* Opening invocation keeps Yuejian's original moon orb visible and reactive. */
.cat-stage[data-intro-beat] .cat-performer .cp-orb{display:inline}.cat-stage[data-intro-beat=summon] .cat-performer .cp-orb{animation:intro-orb-charge 1.7s cubic-bezier(.18,.8,.2,1) both;transform-origin:250px 409px}.cat-stage[data-intro-beat=reveal] .cat-performer .cp-orb{animation:intro-orb-release 1s ease-out both;transform-origin:250px 409px}.cat-stage[data-intro-beat=reveal] .cat-performer .cp-spark,.cat-stage[data-intro-beat=invite] .cat-performer .cp-spark{display:inline}.cat-stage[data-intro-beat=summon] .cat-performer .cp-arm-left{animation:cp-cheer-visible-left .7s ease-in-out infinite}.cat-stage[data-intro-beat=summon] .cat-performer .cp-arm-right{animation:cp-cheer-visible-right .7s ease-in-out infinite}
@keyframes intro-orb-charge{0%{opacity:.35;transform:scale(.65)}55%{opacity:1;transform:scale(1.18)}75%{transform:scale(.92)}100%{opacity:1;transform:scale(1.08);filter:drop-shadow(0 0 22px #fff0af)}}@keyframes intro-orb-release{0%{opacity:1;transform:scale(1.08)}45%{opacity:1;transform:scale(1.35)}100%{opacity:.15;transform:scale(2.3)}}

/* The very first painted frame must already look complete. */
@keyframes intro-orb-charge{0%{opacity:.82;transform:scale(.92);filter:drop-shadow(0 0 8px #ffe8a0)}55%{opacity:1;transform:scale(1.18)}75%{transform:scale(.96)}100%{opacity:1;transform:scale(1.08);filter:drop-shadow(0 0 22px #fff0af)}}
