/* Animated voice state indicator — CSS-only concentric pulse rings */

@layer components {

  .voice-indicator {
    position: relative;
    width: 72px;
    height: 72px;
    display: flex;
    align-items: center;
    justify-content: center;
    margin: 0 auto;
  }

  .voice-indicator-icon {
    position: relative;
    z-index: 2;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--surface-3);
    color: var(--text-muted);
    transition: background var(--transition-base), color var(--transition-base);
  }

  .voice-indicator-ring {
    position: absolute;
    inset: 0;
    border-radius: 50%;
    border: 2px solid transparent;
    transition: border-color var(--transition-base), opacity var(--transition-base);
    opacity: 0;
  }
  .voice-indicator-ring:nth-child(2) {
    inset: 4px;
  }
  .voice-indicator-ring:nth-child(3) {
    inset: -4px;
  }

  /* ---- Idle ---- */
  .voice-indicator[data-state="idle"] .voice-indicator-icon {
    background: var(--surface-3);
    color: var(--text-muted);
  }

  /* ---- Listening ---- */
  .voice-indicator[data-state="listening"] .voice-indicator-icon {
    background: var(--color-success);
    color: #fff;
  }
  .voice-indicator[data-state="listening"] .voice-indicator-ring {
    border-color: var(--color-success);
    opacity: 1;
    animation: pulse-ring 1.8s ease-out infinite;
  }
  .voice-indicator[data-state="listening"] .voice-indicator-ring:nth-child(2) {
    animation-delay: 0.3s;
  }
  .voice-indicator[data-state="listening"] .voice-indicator-ring:nth-child(3) {
    animation-delay: 0.6s;
  }

  /* ---- Processing ---- */
  .voice-indicator[data-state="processing"] .voice-indicator-icon {
    background: var(--color-warning-subtle);
    color: var(--color-warning);
  }
  .voice-indicator[data-state="processing"] .voice-indicator-ring:first-child {
    opacity: 1;
    border-color: var(--color-warning);
    border-top-color: transparent;
    border-right-color: transparent;
    animation: spin-ring 1s linear infinite;
  }

  /* ---- Speaking ---- */
  .voice-indicator[data-state="speaking"] .voice-indicator-icon {
    background: var(--color-primary);
    color: #fff;
  }
  .voice-indicator[data-state="speaking"] .voice-indicator-ring {
    border-color: var(--color-primary);
    opacity: 1;
    animation: breathe-ring 2s ease-in-out infinite;
  }
  .voice-indicator[data-state="speaking"] .voice-indicator-ring:nth-child(2) {
    animation-delay: 0.4s;
  }
  .voice-indicator[data-state="speaking"] .voice-indicator-ring:nth-child(3) {
    animation-delay: 0.8s;
  }

  @keyframes pulse-ring {
    0% { transform: scale(0.85); opacity: 0.7; }
    70% { transform: scale(1.15); opacity: 0; }
    100% { transform: scale(1.15); opacity: 0; }
  }

  @keyframes spin-ring {
    to { transform: rotate(360deg); }
  }

  @keyframes breathe-ring {
    0%, 100% { transform: scale(0.92); opacity: 0.4; }
    50% { transform: scale(1.08); opacity: 0.8; }
  }

  /* ---- State text bar ---- */
  .state-label {
    text-align: center;
    font-size: var(--text-sm);
    font-weight: var(--weight-semibold);
    padding: var(--space-2) var(--space-3);
    border-radius: var(--radius-sm);
    transition: background var(--transition-base), color var(--transition-base);
  }
  .state-label[data-state="idle"] {
    background: rgba(96, 165, 250, 0.1);
    color: #60a5fa;
  }
  .state-label[data-state="listening"] {
    background: var(--color-success-subtle);
    color: var(--color-success);
  }
  .state-label[data-state="processing"] {
    background: var(--color-warning-subtle);
    color: var(--color-warning);
  }
  .state-label[data-state="speaking"] {
    background: var(--color-primary-subtle);
    color: var(--color-primary);
  }
}
