/* Visual playback only. Engine events/rewards must be committed elsewhere. */
.cm-fx{pointer-events:none;position:absolute;z-index:10}
.cm-fx-tap{animation:cm-tap 180ms ease-out}
.cm-fx-merge-glow{animation:cm-glow 420ms ease-out}
.cm-fx-merge-burst{animation:cm-burst 420ms ease-out forwards}
.cm-fx-spawn-flight{animation:cm-flight 260ms ease-out forwards}
.cm-fx-reward-flight{animation:cm-flight 480ms ease-in forwards}
.cm-fx-discovery-rays{animation:cm-rays 650ms ease-out}
.cm-fx-confetti{animation:cm-confetti 650ms ease-in forwards}
.cm-fx-claim-pulse{animation:cm-pulse 900ms ease-in-out 2}
.cm-fx-node-unlock{animation:cm-burst 500ms ease-out}
.cm-fx-water-sparkle{animation:cm-sparkle 900ms ease-in-out 2}
.cm-fx-hint-hand{animation:cm-hand 1200ms ease-in-out 2}
.cm-feedback-text{pointer-events:none;font:700 22px/1.5 "Leelawadee UI","Noto Sans Thai",Tahoma,sans-serif;color:#2f744c;text-shadow:0 1px 2px #fff;animation:cm-text 750ms ease-out forwards}
.cm-fx-error-nudge{animation:cm-nudge 180ms ease-out}
@keyframes cm-tap{50%{transform:scale(.94)}}
@keyframes cm-glow{0%,100%{opacity:0}50%{opacity:1}}
@keyframes cm-burst{from{transform:scale(.5);opacity:1}to{transform:scale(1.35);opacity:0}}
@keyframes cm-flight{from{transform:translate(0,0) scale(1);opacity:1}to{transform:translate(var(--cm-flight-x,80px),var(--cm-flight-y,-60px)) scale(.5);opacity:0}}
@keyframes cm-rays{from{transform:rotate(-8deg);opacity:0}50%{opacity:1}to{transform:rotate(8deg);opacity:0}}
@keyframes cm-confetti{from{transform:translateY(-20px);opacity:1}to{transform:translateY(80px) rotate(22deg);opacity:0}}
@keyframes cm-pulse{50%{transform:scale(1.04)}}
@keyframes cm-sparkle{0%,100%{opacity:0}50%{opacity:1}}
@keyframes cm-hand{50%{transform:translate(24px,-12px)}}
@keyframes cm-text{from{transform:translateY(0);opacity:1}to{transform:translateY(-36px);opacity:0}}
@keyframes cm-nudge{25%{transform:translateX(-3px)}75%{transform:translateX(3px)}}
@media(prefers-reduced-motion:reduce){.cm-fx,.cm-feedback-text,[class*=cm-fx-]{animation:none!important;transform:none!important}}
