@keyframes pulse { 0%, 100% { transform: scale(1); opacity: .6; } 50% { transform: scale(1.7); opacity: 1; } }
@keyframes silk-breathe { 0%, 100% { transform: translateY(0) rotate(8deg); } 50% { transform: translateY(-8px) rotate(6deg); } }
@keyframes petal-burst {
  0% { opacity: 0; transform: translate(-50%, -50%) rotate(0) scale(.5); }
  12% { opacity: .9; }
  100% { opacity: 0; transform: translate(calc(-50% + var(--dx)), calc(-50% + var(--dy))) rotate(var(--rot)) scale(.8); }
}
@keyframes ken-burns {
  0% { transform: scale(1.08) translateY(-1.2%); }
  100% { transform: scale(1.17) translateY(1.4%); }
}
@keyframes spin-slow { to { transform: rotate(360deg); } }
@keyframes tick-pop {
  0% { transform: translateY(6px); opacity: .35; filter: blur(2px); }
  100% { transform: translateY(0); opacity: 1; filter: blur(0); }
}
@keyframes lb-in {
  0% { opacity: 0; transform: scale(.965); }
  100% { opacity: 1; transform: scale(1); }
}
@keyframes moment-flick {
  0% { transform: rotateY(180deg); }
  50% { transform: rotateY(252deg) scale(.965); }
  100% { transform: rotateY(180deg); }
}
@keyframes moment-develop {
  0% { opacity: 0; filter: sepia(.55) saturate(.6) blur(7px); transform: scale(1.07); }
  55% { opacity: 1; }
  100% { opacity: 1; filter: none; transform: scale(1); }
}
@keyframes fade-up {
  0% { opacity: 0; transform: translateY(9px); }
  100% { opacity: 1; transform: translateY(0); }
}
.silk--left { animation: silk-breathe 8s ease-in-out infinite; }
.silk--right { animation: silk-breathe 9s ease-in-out -2s infinite reverse; }
@media (prefers-reduced-motion: reduce) {
  .silk--left, .silk--right, .hint-pulse, .poster__bg, .poster__seal::before { animation: none; }
  .moment-card.is-flicking, .moment-card__photo img.is-developing,
  .moment-card__body.is-swapping .moment-card__date,
  .moment-card__body.is-swapping .moment-card__title,
  .moment-card__body.is-swapping .moment-card__text,
  .moment-card__body.is-swapping .moment-card__no { animation: none; }
}
