@keyframes qEar{0%,86%,100%{transform:rotate(0)}89%{transform:rotate(-16deg)}93%{transform:rotate(5deg)}}
@keyframes qShake{0%{transform:translate(0,0)}25%{transform:translate(-2px,1px)}50%{transform:translate(2px,-1px)}75%{transform:translate(-1px,-2px)}100%{transform:translate(1px,2px)}}
@keyframes qFlash{0%,49%{opacity:1}50%,100%{opacity:0}}
@keyframes qRise{from{transform:translateY(40px);opacity:0}to{transform:none;opacity:1}}
@keyframes qPop{0%{transform:scale(.4) translateY(10px);opacity:0}100%{transform:none;opacity:1}}
@keyframes qTear{0%{transform:translateY(0);opacity:1}100%{transform:translateY(16px);opacity:0}}
@keyframes qShiver{0%{transform:translate(0,0)}25%{transform:translate(-.8px,.4px)}50%{transform:translate(.8px,-.3px)}75%{transform:translate(-.4px,-.6px)}100%{transform:translate(.5px,.6px)}}
@keyframes qZ{0%{opacity:0;transform:translate(0,0)}30%{opacity:.8}100%{opacity:0;transform:translate(6px,-14px)}}
/* Quiet, staggered cat behaviour. Feet remain planted through the idle breath. */
@keyframes qBlink{0%,43%,46%,92%,95%,100%{transform:scaleY(1)}44.5%,93.5%{transform:scaleY(.08)}}
@keyframes qBreathe{0%,100%{transform:scale(1,1)}50%{transform:scale(1.006,1.014)}}
@keyframes qTail{0%,65%,100%{transform:rotate(0)}78%{transform:rotate(6deg)}89%{transform:rotate(-3deg)}}
@keyframes pawseLook{0%,12%,33%,70%,100%{transform:rotate(0)}19%,26%{transform:rotate(-4deg)}48%,56%{transform:rotate(3deg)}82%,89%{transform:rotate(-2deg)}}
@keyframes pawseBreath{0%,100%{transform:scaleY(1)}50%{transform:scaleY(1.012)}}
.pawse-head{transform-box:view-box;transform-origin:50px 53px;animation:pawseLook 19s ease-in-out infinite}
.pawse-breath{transform-box:view-box;transform-origin:50px 96px;animation:pawseBreath 4.6s ease-in-out infinite}
/* Posture, foot contact and travel share the renderer's single timeline. */
.pawse-stroll{will-change:transform}
.pawse-rig-leg{transform-box:view-box}
.pawse-paused *, .pawse-paused *::before{animation-play-state:paused!important}
@media(prefers-reduced-motion:reduce){#room *{animation:none!important;transition:none!important}}

@keyframes pawsePurr{0%,6%,24%,100%{opacity:0}9%,20%{opacity:.8}}
@keyframes pawsePetPurr{0%,100%{opacity:0}10%,85%{opacity:1}}
.pawse-purr{opacity:0;animation:pawsePurr 48s ease-in-out infinite}
.pawse-petted{animation-play-state:paused}
.pawse-petted .pawse-head,.pawse-petted .pawse-breath{animation-play-state:paused}
.pawse-petted .pawse-idle{animation-play-state:paused;opacity:1!important}
.pawse-petted .pawse-purr{animation:pawsePetPurr .9s ease-in-out 1}
.pawse-speech{pointer-events:none}
@media(prefers-reduced-motion:reduce){.pawse-purr{display:none}}

/* A slow, small grooming stroke, never a whole-room movement. */
@keyframes pawseWash{0%,20%,75%,100%{transform:rotate(0)}35%,55%{transform:rotate(-9deg)}}
.pawse-wash{transform-box:view-box;transform-origin:59px 68px;animation:pawseWash 4.8s ease-in-out infinite}
@media(prefers-reduced-motion:reduce){.pawse-wash{animation:none!important}}
