/* Joint translations live in SVG wrappers, rotations in CSS; they never overwrite each other. */
.stu-svg {
  width: 100%;
  height: 100%;
  overflow: visible;
  display: block;
}
.stu-svg .hip,
.stu-svg .knee,
.stu-svg .ankle,
.stu-svg .shoulder,
.stu-svg .elbow {
  transform-box: view-box;
  transform-origin: 0 0;
}
.stu-anim-idle .leg-front .hip {
  transform: rotate(-6deg);
}
.stu-anim-idle .leg-back .hip {
  transform: rotate(6deg);
}
.stu-anim-idle .arm-front .shoulder {
  transform: rotate(-12deg);
}
.stu-anim-idle .arm-front .elbow {
  transform: rotate(-15deg);
}
.stu-anim-idle {
  animation: breathe 3s ease-in-out infinite;
  animation-delay: var(--stride-delay, 0s);
}
.stu-anim-run .hip {
  animation: hip 0.65s ease-in-out infinite;
}
.stu-anim-run .knee {
  animation: knee 0.65s ease-in-out infinite;
}
.stu-anim-run .shoulder {
  animation: arm 0.65s ease-in-out infinite;
}
.stu-anim-run .elbow {
  transform: rotate(-80deg);
}
.stu-anim-run .leg-back .hip,
.stu-anim-run .leg-back .knee,
.stu-anim-run .arm-front .shoulder {
  animation-delay: calc(var(--stride-delay, 0s) - 0.325s);
}
.stu-anim-run .leg-front .hip,
.stu-anim-run .leg-front .knee,
.stu-anim-run .arm-back .shoulder {
  animation-delay: var(--stride-delay, 0s);
}
.stu-anim-run {
  animation: stride 0.325s ease-in-out infinite;
  animation-delay: var(--stride-delay, 0s);
}
.stu-anim-win .arm-front .shoulder {
  transform: rotate(-155deg);
}
.stu-anim-win .arm-front .elbow {
  transform: rotate(-20deg);
}
.stu-anim-win .arm-back .shoulder {
  transform: rotate(20deg);
}
.stu-anim-win {
  animation: celebrate 0.7s ease-out 2;
}
.stu-anim-dance {
  transform-origin: 50% 100%;
  animation: dance-bounce 1.2s ease-in-out infinite;
  animation-delay: var(--stride-delay, 0s);
}
.stu-anim-dance .arm-front .shoulder {
  animation: dance-wave 1.2s ease-in-out infinite;
}
.stu-anim-dance .arm-back .shoulder {
  animation: dance-wave-left 1.2s ease-in-out -0.6s infinite;
}
.stu-anim-dance .elbow {
  transform: rotate(-65deg);
}
.stu-anim-dance .arm-back .elbow {
  transform: rotate(65deg);
}
.stu-anim-front .arm-back .shoulder {
  transform: rotate(12deg);
}
.stu-anim-front .arm-front .shoulder {
  transform: rotate(-12deg);
}
.stu-anim-dance .leg-front .hip {
  animation: dance-step 1.2s ease-in-out infinite;
}
.stu-anim-dance .leg-back .hip {
  animation: dance-step 1.2s ease-in-out -0.6s infinite;
}
.stu-anim-dance .knee {
  animation: dance-knee 0.6s ease-in-out infinite;
}
.stu-anim-dance .head {
  transform-origin: 26px 20px;
  animation: dance-nod 0.6s ease-in-out infinite;
}
@keyframes dance-bounce {
  0%,
  100% {
    transform: translate(-3px, 0) rotate(-3deg);
  }
  25% {
    transform: translate(0, -5px) rotate(0);
  }
  50% {
    transform: translate(3px, 0) rotate(3deg);
  }
  75% {
    transform: translate(0, -5px) rotate(0);
  }
}
@keyframes dance-wave {
  0%,
  100% {
    transform: rotate(-115deg);
  }
  50% {
    transform: rotate(-165deg);
  }
}
@keyframes dance-wave-left {
  0%,
  100% {
    transform: rotate(115deg);
  }
  50% {
    transform: rotate(165deg);
  }
}
@keyframes dance-step {
  0%,
  100% {
    transform: rotate(-15deg);
  }
  50% {
    transform: rotate(18deg);
  }
}
@keyframes dance-knee {
  0%,
  100% {
    transform: rotate(6deg);
  }
  50% {
    transform: rotate(25deg);
  }
}
@keyframes dance-nod {
  0%,
  100% {
    transform: rotate(-4deg);
  }
  50% {
    transform: rotate(5deg);
  }
}
@keyframes hip {
  0%,
  100% {
    transform: rotate(-40deg);
  }
  50% {
    transform: rotate(38deg);
  }
}
@keyframes knee {
  0%,
  100% {
    transform: rotate(12deg);
  }
  30% {
    transform: rotate(60deg);
  }
  65% {
    transform: rotate(8deg);
  }
}
@keyframes arm {
  0%,
  100% {
    transform: rotate(30deg);
  }
  50% {
    transform: rotate(-40deg);
  }
}
@keyframes stride {
  50% {
    translate: 0 -2px;
  }
}
@keyframes breathe {
  50% {
    translate: 0 -0.6px;
  }
}
@keyframes celebrate {
  45% {
    translate: 0 -5px;
  }
}
@media (prefers-reduced-motion: reduce) {
  .stu-svg,
  .stu-svg * {
    animation: none !important;
  }
}
