/* ==== 动画 ==== */

@keyframes powerGlow {
  0%, 100% { box-shadow: 0 0 8px 2px rgba(120,255,160,0.5); }
  50%      { box-shadow: 0 0 20px 6px rgba(120,255,160,0.9); }
}

@keyframes floatZ {
  0%, 100% { transform: translateY(0) rotate(-6deg); opacity: 0.85; }
  50%      { transform: translateY(-6px) rotate(6deg); opacity: 1; }
}

@keyframes summonIn {
  0%   { transform: scale(0.2); opacity: 0; }
  60%  { transform: scale(1.12); opacity: 1; }
  100% { transform: scale(1); opacity: 1; }
}
.anim-summon { animation: summonIn 0.32s ease-out; }

@keyframes deathOut {
  0%   { transform: scale(1); opacity: 1; filter: brightness(1); }
  40%  { filter: brightness(2.2) saturate(0.3); }
  100% { transform: scale(0.25) rotate(10deg); opacity: 0; filter: brightness(3) saturate(0); }
}
.anim-death { animation: deathOut 0.45s ease-in forwards; }

@keyframes hitShake {
  0%, 100% { transform: translate(0, 0); }
  20% { transform: translate(-7px, 2px); }
  40% { transform: translate(6px, -3px); }
  60% { transform: translate(-5px, 2px); }
  80% { transform: translate(4px, -1px); }
}
.anim-hit { animation: hitShake 0.3s ease-out; }

@keyframes flashRed {
  0%   { filter: brightness(1); }
  30%  { filter: brightness(1.5) sepia(1) hue-rotate(-50deg) saturate(4); }
  100% { filter: brightness(1); }
}
.anim-flash-red { animation: flashRed 0.4s ease-out; }

@keyframes shieldPopAnim {
  0%   { filter: brightness(1); }
  40%  { filter: brightness(2.4) sepia(1) hue-rotate(10deg) saturate(3); }
  100% { filter: brightness(1); }
}
.anim-shield-pop { animation: shieldPopAnim 0.45s ease-out; }

@keyframes spellGlow {
  0%   { filter: brightness(1); }
  35%  { filter: brightness(1.9) saturate(1.6); }
  100% { filter: brightness(1); }
}
.anim-spell { animation: spellGlow 0.5s ease-out; }

@keyframes bannerIn {
  0%   { opacity: 0; transform: translate(-50%, -50%) scale(0.55); }
  18%  { opacity: 1; transform: translate(-50%, -50%) scale(1.05); }
  26%  { transform: translate(-50%, -50%) scale(1); }
  78%  { opacity: 1; transform: translate(-50%, -50%) scale(1); }
  100% { opacity: 0; transform: translate(-50%, -50%) scale(1.08); }
}
.anim-banner { animation: bannerIn 1.5s ease-out forwards; }

@keyframes toastIn {
  0%   { opacity: 0; transform: translateX(-50%) translateY(8px); }
  15%  { opacity: 1; transform: translateX(-50%) translateY(0); }
  80%  { opacity: 1; }
  100% { opacity: 0; }
}
.anim-toast { animation: toastIn 1.6s ease-out forwards; }

/* 伤害/治疗飘字 */
.float-num {
  position: fixed;
  z-index: 96;
  pointer-events: none;
  font-family: Georgia, 'Times New Roman', serif;
  font-size: 44px;
  font-weight: bold;
  color: #ff3b30;
  text-shadow: -2px 0 #000, 2px 0 #000, 0 -2px #000, 0 2px #000, 0 3px 6px #000;
  transform: translate(-50%, -50%);
  animation: floatNum 0.9s ease-out forwards;
}
.float-num.heal { color: #66e07a; }
.float-num.armor-num { color: #cfd8dc; font-size: 34px; }
@keyframes floatNum {
  0%   { opacity: 0; transform: translate(-50%, -50%) scale(0.4); }
  18%  { opacity: 1; transform: translate(-50%, -50%) scale(1.25); }
  30%  { transform: translate(-50%, -50%) scale(1); }
  100% { opacity: 0; transform: translate(-50%, -110%) scale(0.95); }
}

/* 攻击冲撞（由 JS 设定位移变量） */
.anim-lunge {
  animation: lunge 0.42s cubic-bezier(0.3, 0, 0.6, 1);
  z-index: 45 !important;
  position: relative;
}
@keyframes lunge {
  0%   { transform: translate(0, 0) scale(1); }
  35%  { transform: translate(calc(var(--lx) * 0.18), calc(var(--ly) * 0.18)) scale(1.12); }
  62%  { transform: translate(var(--lx), var(--ly)) scale(1.06); }
  100% { transform: translate(0, 0) scale(1); }
}

/* AI 打出的卡展示 */
.played-card-show {
  position: fixed;
  left: 50%;
  top: 38%;
  z-index: 92;
  transform: translate(-50%, -50%) scale(1.6);
  filter: drop-shadow(0 12px 30px rgba(0,0,0,0.85));
  animation: showPlayed 1.15s ease-out forwards;
  pointer-events: none;
}
@keyframes showPlayed {
  0%   { opacity: 0; transform: translate(-50%, -50%) scale(0.7) rotate(-5deg); }
  16%  { opacity: 1; transform: translate(-50%, -50%) scale(1.65) rotate(0deg); }
  82%  { opacity: 1; transform: translate(-50%, -50%) scale(1.6); }
  100% { opacity: 0; transform: translate(-50%, -56%) scale(1.45); }
}

/* 抽牌飞入 */
.draw-fly {
  position: fixed;
  z-index: 91;
  pointer-events: none;
  transition: transform 0.5s cubic-bezier(0.25, 0.7, 0.4, 1), opacity 0.5s;
}
