/* ===== R101 动画定义 ===== */

@keyframes marker-pulse {
  0%   { transform: translateX(-50%) scale(0.8); opacity: 1; }
  100% { transform: translateX(-50%) scale(2.5); opacity: 0; }
}

@keyframes btn-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(27, 115, 232, 0.3); }
  50%      { box-shadow: 0 0 0 12px rgba(27, 115, 232, 0); }
}

@keyframes pulse-warning {
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.02); }
}

@keyframes slide-up {
  from { opacity: 0; transform: translateY(24px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes fade-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}

@keyframes toast-in {
  from { opacity: 0; transform: translateY(-12px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes camera-flash {
  0%   { opacity: 1; }
  100% { opacity: 0; }
}

@keyframes nav-breathe {
  0%, 100% { box-shadow: 0 0 0 0 rgba(15, 157, 88, 0.4); }
  50%      { box-shadow: 0 0 0 16px rgba(15, 157, 88, 0); }
}

@keyframes number-flip {
  from { transform: translateY(-20%); opacity: 0; }
  to   { transform: translateY(0); opacity: 1; }
}

@keyframes slide-out-left {
  from { opacity: 1; transform: translateX(0); }
  to   { opacity: 0; transform: translateX(-100%); }
}

@keyframes empty-bounce {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-8px); }
}

@keyframes find-card-slide {
  from { transform: translateY(100%); }
  to   { transform: translateY(0); }
}

.page-enter { animation: fade-in 0.3s ease, slide-up 0.3s ease; }
.btn-pulse { animation: btn-pulse 2s ease-in-out infinite; }
.btn-navigate-breathe { animation: nav-breathe 2s ease-in-out infinite; }
.find-card-slide { animation: find-card-slide 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); }
.empty-bounce { animation: empty-bounce 0.5s ease infinite; }

.history-card { animation: slide-up 0.3s ease both; }
.history-card:nth-child(1) { animation-delay: 0ms; }
.history-card:nth-child(2) { animation-delay: 50ms; }
.history-card:nth-child(3) { animation-delay: 100ms; }
.history-card:nth-child(4) { animation-delay: 150ms; }
.history-card:nth-child(n+5) { animation-delay: 200ms; }

.camera-flash-overlay {
  position: fixed;
  inset: 0;
  background: white;
  z-index: 9999;
  animation: camera-flash 0.3s ease forwards;
  pointer-events: none;
}

.ring-time-updating { animation: number-flip 0.3s ease; }
.toast-visible { animation: toast-in 0.3s ease; }

.mark-step:not(.hidden) { animation: fade-in 0.25s ease; }

.pwa-banner:not(.hidden) { animation: slide-up 0.3s ease; }
