@keyframes lineIn {
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes soundInvitation {
  0%, 100% { opacity: 0.58; transform: translateY(0); }
  50% { opacity: 1; transform: translateY(-0.16rem); }
}

@keyframes petPeek {
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes petBreath {
  0%, 100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-0.16rem);
  }
}

@keyframes kimiLeanIn {
  0%, 100% { transform: translate(0, 0) rotate(0); }
  45% { transform: translate(-0.35rem, -0.18rem) rotate(-0.8deg); }
}

@keyframes ballMemoryNudge {
  0%, 100% { transform: translateX(0) rotate(0); }
  38% { transform: translateX(0.55rem) rotate(7deg); }
  68% { transform: translateX(0.2rem) rotate(2deg); }
}

@keyframes doorwayWarmth {
  0%, 100% { opacity: 0.35; }
  50% { opacity: 0.9; }
}

@keyframes kimiSlowRise {
  0%, 100% { transform: translateY(0) scaleY(1); }
  45% { transform: translateY(-0.4rem) scaleY(1.015); }
  68% { transform: translateY(-0.22rem) scaleY(1.008); }
}

@keyframes kimiSettleClose {
  0%, 100% { transform: translate(0, 0); }
  50% { transform: translate(-0.25rem, 0.12rem) scale(1.008); }
}

@keyframes nemoFollow {
  0%, 100% { transform: translateX(0) rotate(0); }
  38% { transform: translateX(-0.34rem) rotate(-1.2deg); }
  70% { transform: translateX(0.12rem) rotate(0.7deg); }
}

@keyframes nemoDoorWatch {
  0%, 100% { transform: translateY(0) rotate(0); }
  42% { transform: translateY(-0.28rem) rotate(-1.5deg); }
}

@keyframes nemoLeanOnKimi {
  0%, 100% { transform: translateX(0) rotate(0); }
  50% { transform: translateX(-0.45rem) rotate(-1.6deg); }
}

@keyframes nemoQuickAside {
  0%, 100% { transform: translateY(0) rotate(0); }
  32% { transform: translateY(-0.28rem) rotate(1.6deg); }
  60% { transform: translateY(-0.08rem) rotate(-0.8deg); }
}

@keyframes kimiTinyReaction {
  0%, 72%, 100% { transform: translateY(0); }
  82% { transform: translateY(-0.18rem); }
}

@keyframes starBreathe {
  0%, 100% {
    opacity: 0.64;
    transform: scale(0.92);
  }
  50% {
    opacity: 1;
    transform: scale(1.06);
  }
}

@keyframes starInvitation {
  0%, 100% {
    opacity: 0.78;
    transform: scale(0.94) rotate(0deg);
    filter: drop-shadow(0 0 10px rgba(255, 223, 137, 0.78));
  }
  45% {
    opacity: 1;
    transform: scale(1.32) rotate(5deg);
    filter: drop-shadow(0 0 24px rgba(255, 229, 151, 1));
  }
  65% {
    transform: scale(1.16) rotate(-2deg);
  }
}

@keyframes starHaloInvitation {
  0% {
    opacity: 0;
    transform: scale(0.45);
    border-color: rgba(255, 226, 151, 0.8);
    box-shadow: 0 0 18px rgba(255, 218, 125, 0.42);
  }
  65% {
    opacity: 0.72;
  }
  100% {
    opacity: 0;
    transform: scale(1.45);
    border-color: rgba(255, 226, 151, 0);
    box-shadow: 0 0 34px rgba(255, 218, 125, 0);
  }
}

@keyframes flameWake {
  to {
    opacity: 1;
    transform: rotate(-45deg) scale(1);
  }
}

@keyframes candleFlicker {
  0%, 100% {
    transform: rotate(-45deg) scale(1);
  }
  45% {
    transform: rotate(-40deg) scale(0.92);
  }
  70% {
    transform: rotate(-48deg) scale(1.04);
  }
}

@keyframes candleGlowWake {
  to { opacity: 1; transform: scale(1); }
}

@keyframes candleGlowBreathe {
  0%, 100% { opacity: 0.72; transform: scale(0.96); }
  50% { opacity: 1; transform: scale(1.08); }
}

@keyframes endingPetsSettle {
  from { opacity: 0; transform: translateY(0.8rem); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes softGlow {
  0%, 100% {
    filter: drop-shadow(0 0 14px rgba(255, 207, 110, 0.46));
  }
  50% {
    filter: drop-shadow(0 0 24px rgba(255, 220, 145, 0.72));
  }
}

@keyframes chapterAttention {
  0%, 100% {
    filter: saturate(1) brightness(1) drop-shadow(0 0 12px rgba(255, 218, 145, 0.38));
  }
  50% {
    filter: saturate(1.04) brightness(1.06) drop-shadow(0 0 22px rgba(255, 218, 145, 0.65));
  }
}

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

@keyframes petCurious {
  0%, 100% { transform: translateY(0) rotate(0); }
  45% { transform: translateY(-0.28rem) rotate(-0.7deg); }
  70% { transform: translateY(-0.1rem) rotate(0.5deg); }
}

@keyframes ballInvitation {
  0%, 100% { transform: translateX(0) rotate(0); }
  35% { transform: translateX(0.35rem) rotate(5deg); }
  65% { transform: translateX(-0.15rem) rotate(-2deg); }
}

@keyframes ballHalo {
  0%, 100% { opacity: 0.2; transform: scale(0.92); }
  50% { opacity: 0.85; transform: scale(1.13); }
}

@keyframes frameLightPass {
  0%, 100% { background-position: 120% 0; opacity: 0.45; }
  50% { background-position: -20% 0; opacity: 1; }
}

@keyframes petLookUp {
  0% { transform: translateY(0) rotate(0); }
  100% { transform: translateY(-0.35rem) rotate(-1deg); }
}

@keyframes nemoEarNotice {
  0%, 100% { transform: rotate(0); }
  35% { transform: rotate(-1.5deg) translateY(-0.18rem); }
  65% { transform: rotate(1deg) translateY(-0.1rem); }
}

@keyframes memoryRun {
  0% {
    opacity: 0;
    transform: translateX(-4rem) scale(0.9);
  }
  20% {
    opacity: 1;
  }
  68% {
    opacity: 1;
    transform: translateX(34vw) scale(1.02);
  }
  100% {
    opacity: 0.2;
    transform: translateX(44vw) scale(0.96);
  }
}

@keyframes memoryBall {
  0% {
    opacity: 0;
    transform: translateX(0) rotate(0deg);
  }
  22% {
    opacity: 1;
  }
  100% {
    opacity: 0.45;
    transform: translateX(-30vw) rotate(-260deg);
  }
}

@keyframes pageTurn {
  0% {
    opacity: 0;
    transform: rotateY(-12deg) translateX(-1.5rem);
  }
  100% {
    opacity: 1;
    transform: rotateY(0) translateX(0);
  }
}

@keyframes slowFloat {
  0%, 100% {
    transform: translateY(0);
    opacity: 0.72;
  }
  50% {
    transform: translateY(-0.8rem);
    opacity: 1;
  }
}

.footprints.big span:nth-child(1) { animation: footprintIn 900ms ease 1500ms forwards; }
.footprints.big span:nth-child(2) { animation: footprintIn 900ms ease 1950ms forwards; }
.footprints.big span:nth-child(3) { animation: footprintIn 900ms ease 2400ms forwards; }
.footprints.big span:nth-child(4) { animation: footprintIn 900ms ease 2850ms forwards; }
.footprints.small span:nth-child(1) { animation: footprintIn 850ms ease 3000ms forwards; }
.footprints.small span:nth-child(2) { animation: footprintIn 850ms ease 3400ms forwards; }
.footprints.small span:nth-child(3) { animation: footprintIn 850ms ease 3800ms forwards; }
.footprints.small span:nth-child(4) { animation: footprintIn 850ms ease 4200ms forwards; }

@keyframes footprintIn {
  to {
    opacity: 1;
    transform: rotate(-16deg) translateY(0);
  }
}

.memory-silhouette.is-running {
  animation: memoryRun 5000ms ease-in-out forwards;
}

.memory-ball.is-running {
  animation: memoryBall 4700ms ease-in-out 300ms forwards;
}

.overlay-paper.page-turn {
  animation: pageTurn 1100ms ease forwards;
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 1ms !important;
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
    transition-duration: 1ms !important;
  }
}
