/* Puce « dictée non transcrite » (v1.123) : une transcription échouée ne
   perd plus l'audio — réessayer, télécharger l'enregistrement, ou l'écarter.
   Fichier séparé de la feuille principale : la dictée sert deux hôtes. */

/* Sélecteurs de CLASSE (v1.126) : la dictée sert deux champs — le composer
   et les corrections du journal — avec un seul code et un seul style.

   L'appui long sur 🎤 ouvre le sélecteur de fichier : neutraliser la
   sélection de texte et le callout natifs pendant le maintien. */
.mic-button {
  -webkit-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;
  touch-action: manipulation;
}

.dictation-chip {
  max-width: 90vw;
  margin: 0 auto 0.4rem;
  width: fit-content;
  display: none;
  align-items: center;
  gap: 0.45rem;
  font-size: 13px;
  color: var(--danger);
  background: var(--danger-soft);
  border: 1px solid var(--danger-line);
  border-radius: var(--r-3);
  padding: 4px 4px 4px 12px;
}
.dictation-chip.visible { display: flex; }
.dictation-label { white-space: normal; text-align: left; }
.dictation-chip button {
  border: none;
  background: none;
  color: var(--ink-2);
  cursor: pointer;
  font-size: 14px;
  min-height: 40px;
  display: inline-flex;
  align-items: center;
  /* cible tactile : la puce n'apparaît qu'en situation d'échec, souvent
     au téléphone — les trois gestes doivent rester atteignables au pouce. */
  padding: 0.4rem 0.5rem;
}
.dictation-retry { font-weight: 600; }
@media (hover: hover) {
  .dictation-chip button:hover { color: var(--ink); }
}

/* --- La dictée en cours (refonte 10/2026) : tout l'hôte change d'état —
   le composer entier, ou le bloc des corrections du journal. Fond vert
   pâle, phrase explicite, onde qui suit la voix, chrono, deux issues. --- */
.dictation-live { display: none; flex-direction: column; gap: 6px; }
.dictating .dictation-live, .transcribing .dictation-live { display: flex; }
#chat-form.dictating, #chat-form.transcribing,
.journal-revision.dictating .dictation-live, .journal-revision.transcribing .dictation-live {
  background: var(--accent-soft);
  border-color: var(--accent-line);
}
.journal-revision .dictation-live {
  border: 1px solid var(--accent-line);
  border-radius: var(--r-4);
  padding: 12px 10px 8px 16px;
}
#chat-form.dictating > :not(.dictation-live),
#chat-form.transcribing > :not(.dictation-live),
.journal-revision.dictating .journal-revision-foot,
.journal-revision.transcribing .journal-revision-foot { display: none; }
.dl-line {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 6px 0;
  font: 500 16px/24px var(--font-ui);
  color: var(--accent-text);
}
.dl-dot {
  width: 9px;
  height: 9px;
  margin-top: 7px;
  flex: none;
  border-radius: var(--r-full);
  background: var(--accent);
  animation: pp-live 1.4s ease-in-out infinite;
}
.dl-controls { display: flex; align-items: center; gap: 10px; margin-left: -8px; }
.dl-cancel, .dl-done {
  width: 40px;
  height: 40px;
  flex: none;
  border: 0;
  border-radius: var(--r-full);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  cursor: pointer;
}
.dl-cancel { background: transparent; color: var(--accent-text); }
.dl-done { background: var(--accent); color: var(--on-accent); }
.dl-time { font: 500 13px/1 var(--font-machine); color: var(--accent-text); }
/* L'onde : vingt-deux barres qui ondulent, leur amplitude suit le niveau
   réel du micro (--level, posé par app-dictation.js). */
.pp-wave {
  --level: .5;
  flex: 1;
  height: 28px;
  display: flex;
  align-items: center;
  gap: 3px;
  overflow: hidden;
}
.pp-wave span {
  width: 3px;
  flex: none;
  height: calc(28px * var(--level));
  border-radius: var(--r-full);
  background: var(--accent);
  transform-origin: 50% 50%;
  animation: pp-wave .9s var(--ease-loop) infinite;
  transition: height 80ms linear;
}
.pp-wave span:nth-child(3n) { animation-delay: -.3s; }
.pp-wave span:nth-child(3n+1) { animation-delay: -.6s; }
.pp-wave span:nth-child(4n) { animation-duration: 1.1s; }
.pp-wave span:nth-child(5n) { animation-duration: .75s; }
.transcribing .pp-wave span { animation-play-state: paused; opacity: .5; }
.transcribing .dl-done, .transcribing .dl-cancel { visibility: hidden; }
