/* ===== 基础动画 ===== */

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

@keyframes fadeOut {
  from { opacity: 1; }
  to   { opacity: 0; }
}

@keyframes dissolve {
  0%   { opacity: 0; filter: blur(4px); }
  100% { opacity: 1; filter: blur(0); }
}

@keyframes slideLeft {
  from { transform: translateX(100%); }
  to   { transform: translateX(0); }
}

@keyframes slideRight {
  from { transform: translateX(-100%); }
  to   { transform: translateX(0); }
}

/* ===== 立绘动画 ===== */

@keyframes spriteEnter {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes spriteExit {
  from { opacity: 1; transform: translateY(0); }
  to   { opacity: 0; transform: translateY(-20px); }
}

@keyframes spriteBounce {
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.05); }
}

/* ===== 选项卡片动画 ===== */

@keyframes choiceCardIn {
  from { opacity: 0; transform: translateY(15px) scale(0.95); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}

/* ===== 点击指示器脉冲 ===== */

@keyframes pulse {
  0%, 100% { opacity: 0.3; transform: translateX(0); }
  50%      { opacity: 1; transform: translateX(5px); }
}

/* ===== 屏幕震动 ===== */

@keyframes shake {
  0%, 100% { transform: translate(0); }
  25%      { transform: translate(-5px, 3px); }
  50%      { transform: translate(5px, -3px); }
  75%      { transform: translate(-3px, 5px); }
}

/* ===== 标题光晕 ===== */

@keyframes titleGlow {
  0%, 100% { text-shadow: 0 0 20px rgba(123, 104, 238, 0.3); }
  50%      { text-shadow: 0 0 40px rgba(123, 104, 238, 0.6); }
}

/* ===== 菜单按钮入场 ===== */

@keyframes menuBtnIn {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* ===== 工具动画类 ===== */

.transition-fade-in   { animation: fadeIn var(--transition-scene) ease-out forwards; }
.transition-fade-out  { animation: fadeOut var(--transition-scene) ease-in forwards; }
.transition-dissolve  { animation: dissolve 1200ms ease-in-out forwards; }
.transition-slide-l   { animation: slideLeft 600ms ease-out forwards; }
.transition-slide-r   { animation: slideRight 600ms ease-out forwards; }

.sprite-enter  { animation: spriteEnter 500ms ease-out forwards; }
.sprite-exit   { animation: spriteExit 400ms ease-in forwards; }
.sprite-bounce { animation: spriteBounce 300ms ease-out; }

.choice-card-enter {
  animation: choiceCardIn 400ms ease-out forwards;
  opacity: 0;
}

.click-indicator-pulse {
  animation: pulse 1.5s ease-in-out infinite;
}

.screen-shake {
  animation: shake 300ms ease-out;
}

.title-glow {
  animation: titleGlow 3s ease-in-out infinite;
}
