@layer modules{
/* ════════ MODE VOCAL DU CERVEAU « PILOTE » ════════
   Conversation 100 % vocale : on parle, le cerveau répond en voix, avec une waveform
   live réactive au son (micro en écoute, voix de sortie en lecture). Overlay propre
   au-dessus du chat (dans .brain-main) - n'altère aucun style existant.
   Micro générique (.dh-mic) des champs [data-dh-voice]. ── */

/* - Bouton « mode vocal » dans le composer (à côté du micro de dictée) - */
  margin:0 0 var(--sp-1);border-radius:var(--radius);border:1px solid var(--line);background:transparent;color:var(--mut);
  cursor:pointer;padding:0;transition:color .15s,border-color .15s,background .15s}

/* - Scène vocale : overlay plein panneau, par-dessus le log du cerveau - */
.bv-stage{position:absolute;inset:0;z-index:30;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:var(--sp-26);padding:var(--sp-30) var(--sp-24) var(--sp-26);
  background:radial-gradient(120% 80% at 50% 18%, color-mix(in srgb,var(--accent) 12%,var(--bg)) 0%, var(--bg) 62%);
  animation:bvFade .28s cubic-bezier(.32,.72,0,1)}
.bv-stage[hidden]{display:none}
@keyframes bvFade{from{opacity:0;transform:scale(.985)}to{opacity:1;transform:none}}
/* .brain-main doit pouvoir ancrer l'overlay */
.brain-main{position:relative}

/* - Orbe + waveform centrale - */
.bv-orb{position:relative;width:min(280px,72%);aspect-ratio:1;display:grid;place-items:center}
.bv-orb::before{content:"";position:absolute;inset:8%;border-radius:50%;
  background:radial-gradient(circle at 50% 38%, color-mix(in srgb,var(--accent) 60%,#fff) 0%, var(--accent) 46%, color-mix(in srgb,var(--accent) 70%,#000) 100%);
  filter:blur(2px);opacity:.92;
  box-shadow:0 18px 60px -12px color-mix(in srgb,var(--accent) 55%,transparent);
  transform:scale(var(--bv-level,1));transition:transform .08s ease-out}
.bv-orb::after{content:"";position:absolute;inset:0;border-radius:50%;
  border:1px solid color-mix(in srgb,var(--accent) 40%,transparent);
  transform:scale(calc(.9 + var(--bv-ring,0) * .55));opacity:calc(.5 - var(--bv-ring,0) * .4);
  transition:transform .12s ease-out,opacity .12s ease-out}
.bv-wave{position:relative;width:78%;height:64%;display:block}
/* halo « écoute » (anneau pulsé) vs « parle » (lueur) vs « réfléchit » (rotation douce) */
.bv-stage.st-listening .bv-orb::before{animation:bvBreath 2.4s ease-in-out infinite}
.bv-stage.st-thinking  .bv-orb::before{animation:bvSpin 3.6s linear infinite}
.bv-stage.st-speaking  .bv-orb::before{animation:bvGlow 1.1s ease-in-out infinite}
@keyframes bvBreath{0%,100%{filter:blur(2px) brightness(1)}50%{filter:blur(3px) brightness(1.08)}}
@keyframes bvSpin{0%{filter:blur(2px) hue-rotate(0)}100%{filter:blur(2px) hue-rotate(20deg)}}
@keyframes bvGlow{0%,100%{box-shadow:0 18px 60px -12px color-mix(in srgb,var(--accent) 45%,transparent)}
  50%{box-shadow:0 22px 80px -8px color-mix(in srgb,var(--accent) 75%,transparent)}}

/* - Statut + transcript live - */
.bv-status{font-size:var(--fs-base);font-weight:var(--fw-bold);letter-spacing:-.01em;color:var(--txt);text-align:center;min-height:20px}
.bv-status .bv-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--accent);
  margin-right:var(--sp-6);vertical-align:middle;animation:cwdot 1s infinite}
.bv-stage.st-listening .bv-status .bv-dot{background:var(--ok)}
.bv-stage.st-speaking  .bv-status .bv-dot{background:var(--accent);animation:none}
.bv-transcript{max-width:440px;text-align:center;font-size:var(--fs-base);line-height:var(--lh-normal);color:var(--mut);
  min-height:44px;max-height:128px;overflow:auto;padding:0 var(--sp-6)}
.bv-transcript .bv-final{color:var(--txt)} .bv-transcript .bv-interim{color:var(--mut2)}
.bv-transcript:empty{display:none}
/* Réponse du Cerveau, lue à voix haute ET affichée (utile si la voix est coupée/indispo) */
.bv-answer{max-width:480px;text-align:center;font-size:var(--fs-base);line-height:1.55;color:var(--txt);
  max-height:200px;overflow:auto;padding:0 var(--sp-8);white-space:pre-wrap}
.bv-answer:empty{display:none}
.bv-stage.st-speaking .bv-answer{color:var(--txt)}

/* - Contrôles bas - */
.bv-controls{display:flex;align-items:center;gap:var(--sp-12)}
.bv-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-6);height:46px;padding:0 var(--sp-18);
  border-radius:var(--radius-pill);border:1px solid var(--line);background:var(--card);color:var(--txt);cursor:pointer;
  font-size:var(--fs-md);font-weight:var(--fw-strong);transition:border-color .15s,background .15s,color .15s,transform .08s}
.bv-btn:hover{border-color:var(--line2)} .bv-btn:active{transform:scale(.96)}
.bv-btn svg{width:18px;height:18px;display:block}
.bv-btn.round{width:46px;padding:0}
.bv-btn.mic.muted{background:var(--err);border-color:var(--err);color:var(--on-solid)}
.bv-btn.interrupt{background:var(--card2)}
.bv-stage:not(.st-thinking):not(.st-speaking) .bv-btn.interrupt{opacity:.45;pointer-events:none}
.bv-btn.end{background:var(--err);border-color:var(--err);color:var(--on-solid)}
.bv-btn.end:hover{background:#b91c1c;border-color:#b91c1c}

/* - Réglages discrets (langue / voix) en haut à droite de la scène - */
.bv-top{position:absolute;top:12px;right:14px;left:14px;display:flex;align-items:center;gap:var(--sp-8);justify-content:flex-end}
.bv-hint{margin-right:auto;font-size:var(--fs-xs);color:var(--mut2)}
.bv-sel{font-size:var(--fs-xs);color:var(--mut);background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:var(--sp-4) var(--sp-8);max-width:180px}
.bv-sel:focus{outline:none;border-color:var(--accent)}

/* - En plein écran, l'overlay s'étale dans .brain-main aussi (rien à changer : inset:0). - */

}
