.spark,
.spark .mark,
.spark .inner,
.spark .rays,
.spark .ray {
  transform-box: fill-box;
  transform-origin: center;
}

.spark {
  display: inline-block;
  flex-shrink: 0;
  overflow: visible;
  vertical-align: middle;
}

.spark .mark {
  transform: rotate(-5deg);
}

@keyframes spark-wake {
  0% {
    transform: rotate(-150deg) scale(0.15);
  }
  45% {
    transform: rotate(6deg) scale(1.13);
  }
  68% {
    transform: rotate(-9deg) scale(0.97);
  }
  100% {
    transform: rotate(-5deg) scale(1);
  }
}

@keyframes spark-raypop {
  0% {
    transform: scale(0);
    opacity: 0;
  }
  40% {
    transform: scale(1.35);
    opacity: 1;
  }
  100% {
    transform: scale(1);
    opacity: 0.95;
  }
}

@keyframes spark-twinkle {
  0%,
  100% {
    transform: scale(1) rotate(0deg);
  }
  50% {
    transform: scale(0.6) rotate(45deg);
  }
}

@keyframes spark-breathe {
  0%,
  100% {
    transform: rotate(-5deg) scale(1);
  }
  50% {
    transform: rotate(-5deg) scale(1.05);
  }
}

@keyframes spark-rayfade {
  0%,
  100% {
    opacity: 0.95;
  }
  50% {
    opacity: 0.25;
  }
}

@keyframes spark-orbit {
  to {
    transform: rotate(360deg);
  }
}

@keyframes spark-sway {
  0%,
  100% {
    transform: rotate(-16deg) scale(1);
  }
  50% {
    transform: rotate(8deg) scale(1.04);
  }
}

.spark--wake .mark {
  animation: spark-wake 0.9s cubic-bezier(0.3, 1.4, 0.5, 1) both;
}

.spark--wake .ray {
  animation: spark-raypop 0.7s ease-out both;
}

.spark--wake .ray:nth-of-type(2) {
  animation-delay: 0.07s;
}

.spark--wake .ray:nth-of-type(3) {
  animation-delay: 0.14s;
}

.spark--wake .ray:nth-of-type(4) {
  animation-delay: 0.21s;
}

.spark--idle .mark {
  animation: spark-breathe 3.4s ease-in-out infinite;
}

.spark--idle .inner {
  animation: spark-twinkle 3.4s ease-in-out infinite;
}

.spark--idle .ray {
  animation: spark-rayfade 3.4s ease-in-out infinite;
}

.spark--idle .ray:nth-of-type(2) {
  animation-delay: 0.4s;
}

.spark--idle .ray:nth-of-type(3) {
  animation-delay: 0.85s;
}

.spark--idle .ray:nth-of-type(4) {
  animation-delay: 1.3s;
}

.spark--thinking .rays {
  animation: spark-orbit 5s linear infinite;
}

.spark--thinking .mark {
  animation: spark-sway 2.6s ease-in-out infinite;
}

.spark--thinking .inner {
  animation: spark-twinkle 1.2s ease-in-out infinite;
}

.spark--done .inner {
  animation: spark-twinkle 0.8s ease-in-out 1;
}

@media (prefers-reduced-motion: reduce) {
  .spark,
  .spark * {
    animation: none !important;
  }
}
