/* Five-scene action alignment fixes.
 * Keep these overrides isolated from scene art and weather layers. */

/* dog-run.webp carries intentional transparent padding below the paws. Pulling
 * that padding below the stage makes the visible dog meet the ground plane in
 * every scene while preserving the existing running bounce. */
.room-scene.scene-room.scene-action-run .dog-art-run,
.room-scene.scene-forest.scene-action-run .dog-art-run,
.room-scene.scene-beach.scene-action-run .dog-art-run,
.room-scene.scene-summit.scene-action-run .dog-art-run,
.room-scene.scene-creek.scene-action-run .dog-art-run {
  bottom: -25%;
}

/* The second disc used to be clipped to 60%, which left an obvious straight
 * cut edge whenever the catch frame appeared. Keep both discs whole and move
 * the hand-off closer to Xingchen's mouth. */
.frisbee-caught {
  clip-path: none;
}

@keyframes frisbee-flight {
  0%,
  13% {
    opacity: 0;
    top: 38%;
    left: 4%;
    transform: rotate(-18deg) scale(0.72);
  }
  18% {
    opacity: 1;
    top: 31%;
    left: 8%;
    transform: rotate(-12deg) scale(0.79);
  }
  30% {
    opacity: 1;
    top: 23%;
    left: 13%;
    transform: rotate(-6deg) scale(0.87);
  }
  43% {
    opacity: 1;
    top: 14%;
    left: 19%;
    transform: rotate(4deg) scale(0.95);
  }
  54% {
    opacity: 1;
    top: 17%;
    left: 22%;
    transform: rotate(10deg) scale(0.92);
  }
  58%,
  to {
    opacity: 0;
    top: 18%;
    left: 23%;
    transform: rotate(13deg) scale(0.88);
  }
}

@keyframes frisbee-caught {
  0%,
  52% {
    opacity: 0;
    top: 18%;
    left: 22%;
    transform: rotate(10deg) scale(0.88);
  }
  56%,
  63% {
    opacity: 1;
    top: 18%;
    left: 22%;
    transform: rotate(12deg) scale(0.92);
  }
  73% {
    opacity: 1;
    top: 23%;
    left: 23%;
    transform: rotate(9deg) scale(0.94);
  }
  81% {
    opacity: 1;
    top: 28%;
    left: 24%;
    transform: rotate(7deg) scale(0.96);
  }
  88%,
  to {
    opacity: 0;
    top: 27%;
    left: 24%;
    transform: rotate(4deg) scale(0.92);
  }
}
