/* ==========================================================================
   秋泽吉数 · 网页前端 · 关键帧动画
   --------------------------------------------------------------------------
   本文件由 deploy/index.html 的内联 <style> 自动切分而来（split-css.mjs）。
   令牌与共享组件见 ../../shared/；主题映射见 themes.css。
   ========================================================================== */

@keyframes twinkle{0%,100%{opacity:.15}50%{opacity:.75}}

@keyframes clickFx{0%{transform:scale(.2);opacity:0}25%{transform:scale(1.25);opacity:1}100%{transform:scale(1);opacity:0}}

@keyframes starFly{0%{transform:translate(0,0) scale(1);opacity:1}100%{transform:translate(var(--dx),var(--dy)) scale(.3);opacity:0}}

@keyframes shake{0%,100%{transform:translateX(0)}20%{transform:translateX(-3px)}40%{transform:translateX(3px)}60%{transform:translateX(-2px)}80%{transform:translateX(2px)}}

@keyframes numRoll{from{transform:translateY(5px);opacity:.3}to{transform:translateY(-5px);opacity:1}}

@keyframes tilePulse{0%,100%{transform:scale(1)}50%{transform:scale(.96)}}

@keyframes pulse{0%,100%{opacity:.35}50%{opacity:1}}

@keyframes fadeIn{from{opacity:0}to{opacity:1}}

@keyframes pop{from{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}

@keyframes kbFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}

@keyframes winShake{0%,100%{transform:translate(0,0) scale(1)}20%{transform:translate(-3px,2px) scale(1.012)}40%{transform:translate(3px,-2px) scale(1.02)}60%{transform:translate(-2px,-2px) scale(1.012)}80%{transform:translate(2px,2px)}}

@keyframes loseDrop{0%{transform:translateY(0);filter:none}55%{transform:translateY(5px)}100%{transform:translateY(0);filter:grayscale(.9) brightness(.78)}}

@keyframes sparkFly{0%{transform:translate(0,0) scale(1);opacity:1}100%{transform:translate(var(--dx),var(--dy)) scale(.15);opacity:0}}

@keyframes sparkFall{0%{transform:translate(0,0) rotate(0);opacity:.95}100%{transform:translate(var(--dx),var(--dy)) rotate(240deg);opacity:0}}

@keyframes prizePop{0%{transform:scale(.8);opacity:0}100%{transform:scale(1);opacity:1}}

@keyframes kbIdle{0%,100%{transform:translateY(0) rotate(0)}50%{transform:translateY(-6px) rotate(1.2deg)}}

@keyframes kbHop{0%{transform:translateY(0) scale(1)}40%{transform:translateY(-14px) scale(1.08)}100%{transform:translateY(0) scale(1)}}
