/* Shared companion motion. Generated copies are maintained by sync-characters.mjs.
   Move the whole SVG horizontally; lift only the artwork, never its ground.
   One ten-second timeline coordinates rest, weight shift, steps, and shadow. */
.pet-walk, .gs.on .gs-chick, .peep { animation: none; }
.roster-equipped-art svg, .peep .mascot { animation: none; }
.mascot .mascot-3d {
  transform-box: fill-box;
  transform-origin: 50% 100%;
  animation: fa-companion-breathe 4s ease-in-out infinite;
  rotate: none;
}
.mascot .mascot-3d-ground {
  animation: none;
  transform: none;
  opacity: .48;
}
:is(.peep, .pet-walk, .roster-equipped-art) .mascot {
  animation: fa-companion-travel 10s linear infinite;
}
:is(.peep, .pet-walk, .roster-equipped-art) .mascot-3d {
  animation: fa-companion-step 10s ease-in-out infinite;
}
:is(.peep, .pet-walk, .roster-equipped-art) .mascot-3d-ground {
  animation: fa-companion-contact 10s ease-in-out infinite;
}
/* Sleep/paused poses stay planted. Small selection thumbnails also remain calm. */
.mascot[data-exp="sleep"], .roster-stage-art .mascot, .roster-next-art .mascot { animation: none; }
.mascot[data-exp="sleep"] .mascot-3d { animation: fa-companion-breathe 5s ease-in-out infinite; }
.mascot[data-exp="sleep"] .mascot-3d-ground { animation: none; }
@keyframes fa-companion-breathe {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.008, 1.012); }
}
@keyframes fa-companion-travel {
  0%, 10% { transform: translateX(-6%); }
  45%, 60% { transform: translateX(6%); }
  95%, 100% { transform: translateX(-6%); }
}
@keyframes fa-companion-step {
  0%, 10%, 45%, 60%, 95%, 100% { transform: translateY(0) rotate(0deg) scale(1); }
  12.5% { transform: translateY(-1.8px) rotate(-1.4deg) scale(1,1.008); }
  15% { transform: translateY(0) rotate(0deg) scale(1.005,.997); }
  17.5% { transform: translateY(-1.8px) rotate(1.4deg) scale(1,1.008); }
  20% { transform: translateY(0) rotate(0deg) scale(1.005,.997); }
  22.5% { transform: translateY(-1.8px) rotate(-1.4deg) scale(1,1.008); }
  25% { transform: translateY(0) rotate(0deg) scale(1.005,.997); }
  27.5% { transform: translateY(-1.8px) rotate(1.4deg) scale(1,1.008); }
  30% { transform: translateY(0) rotate(0deg) scale(1.005,.997); }
  32.5% { transform: translateY(-1.8px) rotate(-1.4deg) scale(1,1.008); }
  35% { transform: translateY(0) rotate(0deg) scale(1.005,.997); }
  37.5% { transform: translateY(-1.8px) rotate(1.4deg) scale(1,1.008); }
  40% { transform: translateY(0) rotate(0deg) scale(1.005,.997); }
  42.5% { transform: translateY(-1.8px) rotate(-1.4deg) scale(1,1.008); }
  45% { transform: translateY(0) rotate(0deg) scale(1.005,.997); }
  62.5% { transform: translateY(-1.8px) rotate(-1.4deg) scale(1,1.008); }
  65% { transform: translateY(0) rotate(0deg) scale(1.005,.997); }
  67.5% { transform: translateY(-1.8px) rotate(1.4deg) scale(1,1.008); }
  70% { transform: translateY(0) rotate(0deg) scale(1.005,.997); }
  72.5% { transform: translateY(-1.8px) rotate(-1.4deg) scale(1,1.008); }
  75% { transform: translateY(0) rotate(0deg) scale(1.005,.997); }
  77.5% { transform: translateY(-1.8px) rotate(1.4deg) scale(1,1.008); }
  80% { transform: translateY(0) rotate(0deg) scale(1.005,.997); }
  82.5% { transform: translateY(-1.8px) rotate(-1.4deg) scale(1,1.008); }
  85% { transform: translateY(0) rotate(0deg) scale(1.005,.997); }
  87.5% { transform: translateY(-1.8px) rotate(1.4deg) scale(1,1.008); }
  90% { transform: translateY(0) rotate(0deg) scale(1.005,.997); }
  92.5% { transform: translateY(-1.8px) rotate(-1.4deg) scale(1,1.008); }
  95% { transform: translateY(0) rotate(0deg) scale(1.005,.997); }
}
@keyframes fa-companion-contact {
  0%, 10%, 45%, 60%, 95%, 100% { transform: scaleX(1); opacity: .48; }
  12.5% { transform: scaleX(.94); opacity: .39; }
  15% { transform: scaleX(1); opacity: .48; }
  17.5% { transform: scaleX(.94); opacity: .39; }
  20% { transform: scaleX(1); opacity: .48; }
  22.5% { transform: scaleX(.94); opacity: .39; }
  25% { transform: scaleX(1); opacity: .48; }
  27.5% { transform: scaleX(.94); opacity: .39; }
  30% { transform: scaleX(1); opacity: .48; }
  32.5% { transform: scaleX(.94); opacity: .39; }
  35% { transform: scaleX(1); opacity: .48; }
  37.5% { transform: scaleX(.94); opacity: .39; }
  40% { transform: scaleX(1); opacity: .48; }
  42.5% { transform: scaleX(.94); opacity: .39; }
  45% { transform: scaleX(1); opacity: .48; }
  62.5% { transform: scaleX(.94); opacity: .39; }
  65% { transform: scaleX(1); opacity: .48; }
  67.5% { transform: scaleX(.94); opacity: .39; }
  70% { transform: scaleX(1); opacity: .48; }
  72.5% { transform: scaleX(.94); opacity: .39; }
  75% { transform: scaleX(1); opacity: .48; }
  77.5% { transform: scaleX(.94); opacity: .39; }
  80% { transform: scaleX(1); opacity: .48; }
  82.5% { transform: scaleX(.94); opacity: .39; }
  85% { transform: scaleX(1); opacity: .48; }
  87.5% { transform: scaleX(.94); opacity: .39; }
  90% { transform: scaleX(1); opacity: .48; }
  92.5% { transform: scaleX(.94); opacity: .39; }
  95% { transform: scaleX(1); opacity: .48; }
}
@media (prefers-reduced-motion: reduce) {
  .pet-walk, .gs.on .gs-chick, .peep,
  :is(.peep, .pet-walk, .roster-equipped-art) .mascot,
  .mascot .mascot-3d, .mascot .mascot-3d-ground,
  .mascot .mascot-3d-sparkles { animation: none !important; rotate: none; }
}
