/* Full assistant: VA-07, React Bits Orb; see voice-ring.LICENSE. */
.voice-orb {
  --size: clamp(220px, 27vw, 300px);
  position: relative;
  display: block;
  width: var(--size);
  height: var(--size);
  flex: 0 0 auto;
  margin: 32px auto;
  isolation: isolate;
}
.voice-orb__canvas {
  position: absolute;
  inset: 0;
  display: block;
  width: 100%;
  height: 100%;
}
.voice-orb:not(.voice-orb--compact)::before {
  content: '';
  position: absolute;
  inset: 21%;
  border-radius: 50%;
  background: conic-gradient(from 35deg, #41e6a0, #a7ffda, #28b98b, #56e4d6, #41e6a0);
  -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 2px));
  mask: radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 2px));
}
.voice-orb--rendered:not(.voice-orb--still)::before {
  display: none;
}
.voice-orb--still .voice-orb__canvas {
  display: none;
}
@media (max-width: 859px) {
  .voice-orb:not(.voice-orb--compact) {
    --size: min(58vw, 250px);
  }
}
/* Existing compact microphone appearance, independent of the full assistant. */
.voice-orb--compact {
  --size: 28px;
  position: absolute;
  left: 50%;
  top: 50%;
  margin: 0;
  transform: translate(-50%, -50%);
  pointer-events: none;
  border-radius: 50%;
  background:
    radial-gradient(circle at 32% 34%, rgb(255 255 255 / 0.8), transparent 38%),
    radial-gradient(circle at 65% 65%, rgb(34 201 181 / 0.65), transparent 65%);
}
.voice-orb--compact .voice-orb__layer {
  display: none;
}
.voice-input > .ico {
  position: relative;
  z-index: 2;
}
.voice-input.is-recording .voice-orb--compact {
  animation: voice-mic-breathe 1.8s ease-in-out infinite alternate;
}
@keyframes voice-mic-breathe {
  from {
    transform: translate(-50%, -50%) scale(0.9);
    opacity: 0.55;
  }
  to {
    transform: translate(-50%, -50%) scale(1.12);
    opacity: 1;
  }
}
html[data-resources='economy'] .voice-orb--compact {
  transform: translate(-50%, -50%) scale(0.85);
}
html[data-resources='economy'] .voice-input.is-recording .voice-orb--compact {
  animation: none;
}
@media (prefers-reduced-motion: reduce) {
  .voice-input.is-recording .voice-orb--compact {
    animation: none;
  }
}

html[data-theme='light'] .voice-orb:not(.voice-orb--compact)::before {
  background: conic-gradient(from 35deg, #15734f, #368568, #126b50, #277e73, #15734f);
}

/* Static green light keeps the assistant recognizable without a render loop. */
.voice-orb--still:not(.voice-orb--compact)::after {
  content: '';
  position: absolute;
  inset: 10%;
  border-radius: 50%;
  background: radial-gradient(
    circle,
    transparent 41%,
    rgb(50 204 133 / 0.07) 46%,
    rgb(50 204 133 / 0.24) 50%,
    rgb(50 204 133 / 0.09) 57%,
    transparent 69%
  );
  pointer-events: none;
}
