.provvy-orb {
  --orb-core: oklch(0.74 0.16 293);
  --orb-mid: oklch(0.56 0.2 292);
  --orb-deep: oklch(0.32 0.14 292);
  --orb-glow: oklch(0.68 0.2 293);
  --orb-intensity: 0.38;
  --orb-pulse: 5.2s;
  position: relative;
  display: grid;
  place-items: center;
  isolation: isolate;
}

.provvy-orb__bloom,
.provvy-orb__halo,
.provvy-orb__core,
.provvy-orb__sheen,
.provvy-orb__ring,
.provvy-orb__orbit,
.provvy-orb__voice {
  position: absolute;
  border-radius: 9999px;
  pointer-events: none;
}

.provvy-orb__bloom,
.provvy-orb__halo,
.provvy-orb__core,
.provvy-orb__sheen {
  inset: 0;
}

.provvy-orb__bloom {
  inset: -30%;
  background: radial-gradient(
    circle,
    color-mix(in oklch, var(--orb-glow) 52%, transparent) 0%,
    transparent 68%
  );
  opacity: var(--orb-intensity);
  filter: blur(18px);
  animation: provvy-orb-breathe var(--orb-pulse) ease-in-out infinite;
}

.provvy-orb__halo {
  inset: 8%;
  border: 1px solid color-mix(in oklch, var(--orb-glow) 32%, transparent);
  box-shadow:
    0 0 24px color-mix(in oklch, var(--orb-glow) 22%, transparent),
    inset 0 0 18px color-mix(in oklch, var(--orb-glow) 14%, transparent);
  opacity: 0.8;
}

.provvy-orb__core {
  inset: 20%;
  background:
    radial-gradient(circle at 34% 30%, oklch(0.96 0.03 293 / 0.9), transparent 36%),
    radial-gradient(circle at 50% 55%, var(--orb-core), var(--orb-mid) 48%, var(--orb-deep) 100%);
  box-shadow: 0 10px 28px color-mix(in oklch, var(--orb-deep) 45%, transparent);
  animation: provvy-orb-breathe var(--orb-pulse) ease-in-out infinite;
}

.provvy-orb__sheen {
  inset: 24%;
  background: linear-gradient(
    160deg,
    oklch(1 0 0 / 0.28),
    transparent 42%,
    oklch(0.3 0.08 292 / 0.12) 100%
  );
  mix-blend-mode: soft-light;
}

.provvy-orb__ring,
.provvy-orb__orbit,
.provvy-orb__voice {
  opacity: 0;
}

.provvy-orb__ring {
  inset: 2%;
  border: 1.5px solid color-mix(in oklch, var(--orb-glow) 55%, transparent);
}

.provvy-orb__orbit {
  inset: 4%;
  background: conic-gradient(
    from 0deg,
    transparent 0 72%,
    color-mix(in oklch, var(--orb-glow) 80%, white) 78%,
    transparent 86% 100%
  );
  mask: radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 2px));
}

.provvy-orb__voice {
  inset: 28%;
  box-shadow: 0 0 0 0 color-mix(in oklch, var(--orb-glow) 0%, transparent);
}

/* Idle — calm breathing */
.provvy-orb[data-state='idle'] {
  --orb-intensity: 0.32;
  --orb-pulse: 5.4s;
}

/* Listening — receiving: expanding field */
.provvy-orb[data-state='listening'] {
  --orb-intensity: 0.55;
  --orb-pulse: 2.2s;
}

.provvy-orb[data-state='listening'] .provvy-orb__ring {
  opacity: 0.7;
  animation: provvy-orb-listen-ring 1.6s ease-out infinite;
}

.provvy-orb[data-state='listening'] .provvy-orb__ring--late {
  animation-delay: 0.8s;
}

.provvy-orb[data-state='listening'] .provvy-orb__halo {
  animation: provvy-orb-listen-halo 1.6s ease-in-out infinite;
}

/* Thinking — processing: orbit, not louder glow */
.provvy-orb[data-state='thinking'] {
  --orb-intensity: 0.4;
  --orb-pulse: 4s;
}

.provvy-orb[data-state='thinking'] .provvy-orb__orbit {
  opacity: 0.95;
  animation: provvy-orb-orbit 2.4s linear infinite;
}

.provvy-orb[data-state='thinking'] .provvy-orb__sheen {
  animation: provvy-orb-orbit 3.6s linear infinite reverse;
}

/* Speaking — vocal rhythm */
.provvy-orb[data-state='speaking'] {
  --orb-intensity: 0.58;
  --orb-pulse: 0.55s;
}

.provvy-orb[data-state='speaking'] .provvy-orb__core {
  animation: provvy-orb-speak-core 0.55s ease-in-out infinite;
}

.provvy-orb[data-state='speaking'] .provvy-orb__voice {
  opacity: 1;
  animation: provvy-orb-speak-ripple 0.7s ease-out infinite;
}

.provvy-orb[data-state='speaking'] .provvy-orb__bloom {
  animation: provvy-orb-speak-bloom 0.7s ease-in-out infinite;
}

/* Executing — purposeful energy, distinct from speech */
.provvy-orb[data-state='executing'] {
  --orb-intensity: 0.5;
  --orb-pulse: 3s;
}

.provvy-orb[data-state='executing'] .provvy-orb__orbit {
  opacity: 1;
  inset: 0%;
  animation: provvy-orb-orbit 0.9s linear infinite;
}

.provvy-orb[data-state='executing'] .provvy-orb__halo {
  inset: 12%;
  border-color: color-mix(in oklch, var(--orb-glow) 70%, white);
  animation: provvy-orb-execute-halo 0.9s ease-in-out infinite;
}

.provvy-orb[data-state='executing'] .provvy-orb__core {
  animation: provvy-orb-execute-core 1.1s ease-in-out infinite;
}

/* Success — resolved, settled */
.provvy-orb[data-state='success'] {
  --orb-intensity: 0.48;
  --orb-pulse: 6s;
}

.provvy-orb[data-state='success'] .provvy-orb__halo {
  inset: 6%;
  border-width: 2px;
  border-color: color-mix(in oklch, var(--orb-glow) 75%, white);
  box-shadow:
    0 0 32px color-mix(in oklch, var(--orb-glow) 40%, transparent),
    inset 0 0 16px color-mix(in oklch, var(--orb-glow) 22%, transparent);
  animation: provvy-orb-success-settle 0.7s ease-out 1 both;
}

.provvy-orb[data-state='success'] .provvy-orb__core {
  animation: provvy-orb-success-settle 0.7s ease-out 1 both;
}

@keyframes provvy-orb-breathe {
  0%,
  100% {
    transform: scale(0.98);
    opacity: calc(var(--orb-intensity) * 0.82);
  }
  50% {
    transform: scale(1.03);
    opacity: var(--orb-intensity);
  }
}

@keyframes provvy-orb-listen-ring {
  0% {
    transform: scale(0.86);
    opacity: 0.65;
  }
  100% {
    transform: scale(1.28);
    opacity: 0;
  }
}

@keyframes provvy-orb-listen-halo {
  0%,
  100% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.06);
  }
}

@keyframes provvy-orb-orbit {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

@keyframes provvy-orb-speak-core {
  0%,
  100% {
    transform: scale(1);
  }
  40% {
    transform: scale(1.07);
  }
  70% {
    transform: scale(0.98);
  }
}

@keyframes provvy-orb-speak-ripple {
  0% {
    box-shadow: 0 0 0 0 color-mix(in oklch, var(--orb-glow) 45%, transparent);
  }
  100% {
    box-shadow: 0 0 0 14px color-mix(in oklch, var(--orb-glow) 0%, transparent);
  }
}

@keyframes provvy-orb-speak-bloom {
  0%,
  100% {
    transform: scale(0.98);
    opacity: calc(var(--orb-intensity) * 0.75);
  }
  50% {
    transform: scale(1.08);
    opacity: var(--orb-intensity);
  }
}

@keyframes provvy-orb-execute-halo {
  0%,
  100% {
    transform: scale(1);
    opacity: 0.85;
  }
  50% {
    transform: scale(1.04);
    opacity: 1;
  }
}

@keyframes provvy-orb-execute-core {
  0%,
  100% {
    transform: scale(1) rotate(0deg);
  }
  50% {
    transform: scale(1.03) rotate(8deg);
  }
}

@keyframes provvy-orb-success-settle {
  0% {
    transform: scale(1.08);
  }
  100% {
    transform: scale(1);
  }
}

@media (prefers-reduced-motion: reduce) {
  .provvy-orb__bloom,
  .provvy-orb__halo,
  .provvy-orb__core,
  .provvy-orb__sheen,
  .provvy-orb__ring,
  .provvy-orb__orbit,
  .provvy-orb__voice {
    animation: none;
  }
}

