/* =========================================================
   S.P.O.T. — ROBÔ ANIMADO
   Estados:
   idle | listening | thinking | responding | error
   ========================================================= */

.spot-robot-shell{
  position:relative;
  width:22px;
  height:22px;
  min-width:22px;
  display:inline-grid;
  place-items:center;
  color:inherit;
  flex:0 0 22px;
  transform-origin:center;
  isolation:isolate;
}

.spot-robot-svg{
  width:18px;
  height:18px;
  display:block;
  color:inherit;
  overflow:visible;
  transform-origin:50% 50%;
  will-change:transform,filter;
}

.spot-robot-aura{
  position:absolute;
  inset:2px;
  border-radius:10px;
  border:1px solid currentColor;
  opacity:0;
  transform:scale(.72);
  pointer-events:none;
}

.spot-robot-status-dot{
  position:absolute;
  right:-1px;
  bottom:0;
  width:4px;
  height:4px;
  border-radius:50%;
  background:currentColor;
  opacity:.28;
  transform:scale(.75);
  box-shadow:0 0 0 0 currentColor;
  pointer-events:none;
}

.spot-robot-eye{
  transform-box:fill-box;
  transform-origin:center;
}

.spot-robot-antenna{
  transform-box:fill-box;
  transform-origin:center;
}

.spot-robot-face{
  transform-box:fill-box;
  transform-origin:center;
}

/* ---------------------------------------------------------
   IDLE — respiração e piscada discretas
   --------------------------------------------------------- */
.spot-robot-shell[data-state="idle"] .spot-robot-svg{
  animation:spotRobotBreathe 3.8s ease-in-out infinite;
}

.spot-robot-shell[data-state="idle"] .spot-robot-eye{
  animation:spotRobotBlink 5.4s ease-in-out infinite;
}

.spot-robot-shell[data-state="idle"] .spot-robot-antenna{
  animation:spotRobotAntennaIdle 2.8s ease-in-out infinite;
}

/* ---------------------------------------------------------
   LISTENING — usuário digitando/focado
   --------------------------------------------------------- */
.spot-robot-shell[data-state="listening"] .spot-robot-svg{
  animation:spotRobotListen .95s ease-in-out infinite alternate;
}

.spot-robot-shell[data-state="listening"] .spot-robot-aura{
  animation:spotRobotAura 1.4s ease-out infinite;
}

.spot-robot-shell[data-state="listening"] .spot-robot-status-dot{
  opacity:.62;
  animation:spotRobotDot 1.1s ease-in-out infinite;
}

/* ---------------------------------------------------------
   THINKING — chamada Gemini / análise / Action Bridge
   --------------------------------------------------------- */
.spot-robot-shell[data-state="thinking"] .spot-robot-svg{
  animation:spotRobotThinking .82s cubic-bezier(.45,.05,.55,.95) infinite;
}

.spot-robot-shell[data-state="thinking"] .spot-robot-face{
  animation:spotRobotFacePulse .82s ease-in-out infinite alternate;
}

.spot-robot-shell[data-state="thinking"] .spot-robot-eye-left{
  animation:spotRobotScanLeft .62s ease-in-out infinite alternate;
}

.spot-robot-shell[data-state="thinking"] .spot-robot-eye-right{
  animation:spotRobotScanRight .62s ease-in-out infinite alternate;
}

.spot-robot-shell[data-state="thinking"] .spot-robot-antenna{
  animation:spotRobotAntennaThink .52s ease-in-out infinite alternate;
}

.spot-robot-shell[data-state="thinking"] .spot-robot-aura{
  animation:spotRobotAura .95s ease-out infinite;
}

.spot-robot-shell[data-state="thinking"] .spot-robot-status-dot{
  opacity:1;
  animation:spotRobotDot .55s ease-in-out infinite alternate;
}

/* ---------------------------------------------------------
   RESPONDING — resposta concluída / falando
   --------------------------------------------------------- */
.spot-robot-shell[data-state="responding"] .spot-robot-svg{
  animation:spotRobotRespond .46s ease-in-out infinite alternate;
}

.spot-robot-shell[data-state="responding"] .spot-robot-eye-left{
  animation:spotRobotTalkEye .7s ease-in-out infinite alternate;
}

.spot-robot-shell[data-state="responding"] .spot-robot-eye-right{
  animation:spotRobotTalkEye .7s ease-in-out .16s infinite alternate;
}

.spot-robot-shell[data-state="responding"] .spot-robot-antenna{
  animation:spotRobotAntennaRespond .7s ease-in-out infinite;
}

.spot-robot-shell[data-state="responding"] .spot-robot-status-dot{
  opacity:.88;
  animation:spotRobotDot .7s ease-in-out infinite;
}

/* ---------------------------------------------------------
   ERROR — erro rápido, depois retorna ao idle via JS
   --------------------------------------------------------- */
.spot-robot-shell[data-state="error"] .spot-robot-svg{
  animation:spotRobotError .15s linear 0s 4;
}

.spot-robot-shell[data-state="error"] .spot-robot-aura{
  opacity:.32;
  animation:spotRobotErrorAura .6s ease-out 1;
}

.spot-robot-shell[data-state="error"] .spot-robot-status-dot{
  opacity:1;
  animation:spotRobotDot .22s ease-in-out 4 alternate;
}

/* ---------------------------------------------------------
   MODO BOLINHA
   --------------------------------------------------------- */
.ai-command-container.spot-mode-bubble .spot-robot-shell{
  width:28px;
  height:28px;
  min-width:28px;
}

.ai-command-container.spot-mode-bubble .spot-robot-svg{
  width:22px !important;
  height:22px !important;
}

.ai-command-container.spot-mode-bubble .spot-robot-aura{
  inset:0;
}

.ai-command-container.spot-mode-bubble .spot-robot-status-dot{
  width:5px;
  height:5px;
  right:0;
  bottom:1px;
}

/* ---------------------------------------------------------
   ANIMAÇÕES
   --------------------------------------------------------- */
@keyframes spotRobotBreathe{
  0%,100%{transform:translateY(0) scale(1)}
  50%{transform:translateY(-.35px) scale(1.012)}
}

@keyframes spotRobotBlink{
  0%,43%,47%,100%{transform:scaleY(1)}
  44%,46%{transform:scaleY(.08)}
}

@keyframes spotRobotAntennaIdle{
  0%,100%{transform:scale(1);opacity:.88}
  50%{transform:scale(1.12);opacity:1}
}

@keyframes spotRobotListen{
  from{transform:translateY(0) rotate(-0.8deg)}
  to{transform:translateY(-0.5px) rotate(0.8deg)}
}

@keyframes spotRobotThinking{
  0%,100%{transform:translateX(0) rotate(-2deg)}
  25%{transform:translateX(.7px) rotate(0)}
  50%{transform:translateX(0) rotate(2deg)}
  75%{transform:translateX(-.7px) rotate(0)}
}

@keyframes spotRobotFacePulse{
  from{opacity:.74}
  to{opacity:1}
}

@keyframes spotRobotScanLeft{
  from{transform:translateX(-.5px) scaleY(1)}
  to{transform:translateX(1.2px) scaleY(.72)}
}

@keyframes spotRobotScanRight{
  from{transform:translateX(-1.2px) scaleY(.72)}
  to{transform:translateX(.5px) scaleY(1)}
}

@keyframes spotRobotAntennaThink{
  from{transform:scale(.82);opacity:.55}
  to{transform:scale(1.28);opacity:1}
}

@keyframes spotRobotRespond{
  from{transform:translateY(0) scale(1)}
  to{transform:translateY(-1px) scale(1.045)}
}

@keyframes spotRobotTalkEye{
  from{transform:scaleY(.55)}
  to{transform:scaleY(1.22)}
}

@keyframes spotRobotAntennaRespond{
  0%,100%{transform:scale(.95)}
  50%{transform:scale(1.22)}
}

@keyframes spotRobotAura{
  0%{opacity:.28;transform:scale(.68)}
  75%,100%{opacity:0;transform:scale(1.32)}
}

@keyframes spotRobotDot{
  0%,100%{transform:scale(.72);opacity:.3;box-shadow:0 0 0 0 currentColor}
  50%{transform:scale(1.18);opacity:1;box-shadow:0 0 0 3px transparent}
}

@keyframes spotRobotError{
  0%,100%{transform:translateX(0)}
  25%{transform:translateX(-1.5px)}
  75%{transform:translateX(1.5px)}
}

@keyframes spotRobotErrorAura{
  from{opacity:.38;transform:scale(.72)}
  to{opacity:0;transform:scale(1.45)}
}

/* Acessibilidade */
@media (prefers-reduced-motion: reduce){
  .spot-robot-shell *,
  .spot-robot-shell{
    animation:none !important;
    transition:none !important;
  }

  .spot-robot-shell[data-state="thinking"] .spot-robot-status-dot,
  .spot-robot-shell[data-state="responding"] .spot-robot-status-dot{
    opacity:.8;
  }
}
