/* animations.css — R104 12组动画 */
@keyframes heroFadeIn {
  from { opacity: 0; transform: translateY(-20px); }
  to { opacity: 1; transform: translateY(0); }
}
.hero { animation: heroFadeIn 0.6s ease-out; }

@keyframes cardFadeInUp {
  from { opacity: 0; transform: translateY(16px); }
  to { opacity: 1; transform: translateY(0); }
}
.service-card { animation: cardFadeInUp 0.4s ease-out both; }
.service-card:nth-child(1) { animation-delay: 0.05s; }
.service-card:nth-child(2) { animation-delay: 0.10s; }
.service-card:nth-child(3) { animation-delay: 0.15s; }
.service-card:nth-child(4) { animation-delay: 0.20s; }
.service-card:nth-child(5) { animation-delay: 0.25s; }
.service-card:nth-child(6) { animation-delay: 0.30s; }

@keyframes stepFill {
  from { transform: scaleX(0); }
  to { transform: scaleX(1); }
}
.step-connector.done { transform-origin: left; animation: stepFill 0.4s ease-in-out; }

@keyframes monthSlideIn {
  from { opacity: 0; transform: translateX(20px); }
  to { opacity: 1; transform: translateX(0); }
}
.calendar-grid { animation: monthSlideIn 0.3s ease; }

@keyframes datePulse {
  0% { transform: scale(0.8); }
  50% { transform: scale(1.1); }
  100% { transform: scale(1); }
}
.calendar-day.selected { animation: datePulse 0.2s ease-out; }

@keyframes slotGlow {
  0% { box-shadow: 0 0 0 0 rgba(26,86,219,0.4); }
  100% { box-shadow: 0 0 0 6px rgba(26,86,219,0); }
}
.timeslot-item.selected { animation: slotGlow 0.2s ease-out; }

@keyframes barSlideUp {
  from { transform: translateY(100%); opacity: 0; }
  to { transform: translateY(0); opacity: 1; }
}
.bottom-bar { animation: barSlideUp 0.3s ease-out; }

@keyframes fieldFadeInUp {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
.form-group { animation: fieldFadeInUp 0.35s ease-out both; }
.form-group:nth-child(1) { animation-delay: 0.05s; }
.form-group:nth-child(2) { animation-delay: 0.10s; }
.form-group:nth-child(3) { animation-delay: 0.15s; }
.form-group:nth-child(4) { animation-delay: 0.20s; }
.form-group:nth-child(5) { animation-delay: 0.25s; }

@keyframes modalPopIn {
  0% { transform: scale(0.8); opacity: 0; }
  60% { transform: scale(1.04); }
  100% { transform: scale(1); opacity: 1; }
}
.confirm-box { animation: modalPopIn 0.4s cubic-bezier(0.34, 1.56, 0.64, 1); }

@keyframes confettiDrop {
  0% { transform: translateY(-100%) rotate(0deg); opacity: 1; }
  100% { transform: translateY(100vh) rotate(720deg); opacity: 0; }
}
.confetti { position: fixed; width: 8px; height: 8px; border-radius: 2px; z-index: 9999; animation: confettiDrop 1.5s linear forwards; }

@keyframes cardSlideInRight {
  from { transform: translateX(30px); opacity: 0; }
  to { transform: translateX(0); opacity: 1; }
}
.booking-card.new { animation: cardSlideInRight 0.4s ease-out; }

@keyframes shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}
.skeleton { background: linear-gradient(90deg, #f1f5f9 25%, #e2e8f0 50%, #f1f5f9 75%); background-size: 200% 100%; animation: shimmer 1.5s infinite; }

@keyframes contentFadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
.page-content { animation: contentFadeIn 0.3s ease; }
