/* ========================================
   动画关键帧
   ======================================== */

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

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

@keyframes slideInRight {
  from { opacity: 0; transform: translateX(30px); }
  to { opacity: 1; transform: translateX(0); }
}

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

@keyframes scaleIn {
  from { opacity: 0; transform: scale(0.9); }
  to { opacity: 1; transform: scale(1); }
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

@keyframes statBounce {
  0% { transform: scale(1); }
  40% { transform: scale(1.4); }
  70% { transform: scale(0.9); }
  100% { transform: scale(1); }
}

@keyframes typeCursor {
  0%, 100% { opacity: 1; }
  50% { opacity: 0; }
}

@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.6; }
}

@keyframes glow {
  0%, 100% { box-shadow: 0 0 5px var(--gold-glow); }
  50% { box-shadow: 0 0 20px var(--gold-glow), 0 0 40px var(--gold-glow); }
}

@keyframes diceShake {
  0% { transform: rotate(0deg) translate(0, 0); }
  20% { transform: rotate(-15deg) translate(-3px, 2px); }
  40% { transform: rotate(10deg) translate(3px, -2px); }
  60% { transform: rotate(-8deg) translate(-2px, 1px); }
  80% { transform: rotate(5deg) translate(2px, -1px); }
  100% { transform: rotate(0deg) translate(0, 0); }
}

@keyframes diceRoll {
  0% { transform: rotateX(0) rotateY(0); }
  25% { transform: rotateX(180deg) rotateY(90deg); }
  50% { transform: rotateX(360deg) rotateY(180deg); }
  75% { transform: rotateX(540deg) rotateY(270deg); }
  100% { transform: rotateX(720deg) rotateY(360deg); }
}

@keyframes barFill {
  from { width: 0%; }
}

@keyframes shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

@keyframes float {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-6px); }
}

@keyframes cardFlip {
  0% { transform: rotateY(0); }
  100% { transform: rotateY(180deg); }
}

/* 页面切换 */
.page-enter {
  animation: fadeIn 0.5s ease forwards;
}

.page-exit {
  animation: fadeOut 0.3s ease forwards;
}

/* 打字机光标 */
.typewriter-cursor {
  display: inline-block;
  width: 2px;
  height: 1.1em;
  background: var(--secondary);
  margin-left: 2px;
  vertical-align: text-bottom;
  animation: typeCursor 0.8s step-end infinite;
}

/* 选项出现动画 */
.choice-card {
  animation: slideInUp 0.4s ease backwards;
}

.choice-card:nth-child(1) { animation-delay: 0.1s; }
.choice-card:nth-child(2) { animation-delay: 0.2s; }
.choice-card:nth-child(3) { animation-delay: 0.3s; }
.choice-card:nth-child(4) { animation-delay: 0.4s; }

/* 属性变化动画 */
.stat-change-pop {
  position: absolute;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 0.8rem;
  pointer-events: none;
  animation: floatUp 1s ease forwards;
  z-index: 50;
}

.stat-change-pop.positive { color: var(--success); }
.stat-change-pop.negative { color: var(--accent); }

@keyframes floatUp {
  0% { opacity: 1; transform: translateY(0) scale(1); }
  100% { opacity: 0; transform: translateY(-30px) scale(1.2); }
}

/* 结局页入场 */
.ending-content {
  animation: scaleIn 0.8s ease backwards;
}

/* 碎片收集闪光 */
.fragment-item.collected {
  animation: glow 2s ease infinite;
}

/* 加载动画 */
.loading p {
  animation: pulse 1.5s ease infinite;
}

/* 悬停微动 */
.choice-card:hover:not(.locked) .choice-text {
  transform: translateX(4px);
  transition: transform var(--transition);
}
