@keyframes breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.02)}}
@keyframes drift{0%,100%{transform:translate3d(0,0,0) rotate(-4deg)}50%{transform:translate3d(8px,-12px,0) rotate(5deg)}}
@keyframes enter{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
@keyframes ringGlow{0%,100%{filter:saturate(.95)}50%{filter:saturate(1.1)}}
@keyframes pop{0%{transform:translate(-50%,-50%) scale(.5);opacity:0}35%{opacity:1}100%{transform:translate(var(--x),var(--y)) rotate(var(--r));opacity:0}}
.character{animation:breathe 4.6s ease-in-out infinite}.float{animation:drift 8s ease-in-out infinite}.a2{animation-duration:10s;animation-delay:-3s}.a3{animation-duration:12s;animation-delay:-6s}.screen{animation:enter .48s cubic-bezier(.22,1,.36,1)}.ring{animation:ringGlow 5s ease-in-out infinite}
.pill,.icon-btn,.tab,.streak,.row-button,.choice,.reward,.card-button,.back-btn,.text-action{transform-origin:center;transition:transform .36s cubic-bezier(.34,1.56,.64,1),filter .18s ease,background .18s ease}.pill:active,.icon-btn:active,.tab:active,.streak:active,.row-button:active,.choice:active,.reward:active,.card-button:active,.back-btn:active,.text-action:active{transform:scale(.96);filter:brightness(.96);transition-duration:.08s}.confetti-piece{animation:pop 1.05s cubic-bezier(.2,.8,.2,1) forwards}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
