/* nurse-ear.css — the 👂 toggle on the nurse bar's .ab-head, sitting beside voice.js's 🎤/🔈.
   (Optional: inline the button via JS if you'd rather not ship a stylesheet. Matches .ab-mic/.ab-speak.) */
.ab-ear {
  background: none;
  border: 0;
  cursor: pointer;
  font-size: var(--fs-ui);
  line-height: 1;
  padding: 2px 4px;
  opacity: .55;
  filter: grayscale(1);
  transition: opacity .15s, filter .15s, transform .1s;
  -webkit-user-select: none;
  user-select: none;
}
.ab-ear:hover { opacity: .9; }
.ab-ear:active { transform: scale(.9); }

/* ON = always-listening: full color + a soft pulse so you can see the ear is live */
.ab-ear.on {
  opacity: 1;
  filter: none;
  animation: ab-ear-pulse 2.4s ease-in-out infinite;
}
@keyframes ab-ear-pulse {
  0%, 100% { text-shadow: 0 0 0 transparent; }
  50%      { text-shadow: 0 0 7px rgba(124, 108, 255, .75); }
}

/* ── 📝 transcript-mode affordance (transcript-mode.js) ── */
/* transcript-mode.css — OPTIONAL. The 📝 affordance the module mounts on every .agent-bar head.
   Mirrors the .ab-ear button styling from nurse-ear.css so it slots in cleanly next to 👂 / 🔈 / 🎤.
   If you don't ship this, the button still works (unstyled) and the SPOKEN trigger needs no UI at all. */
.agent-bar .ab-transcript {
  border: 0;
  background: transparent;
  cursor: pointer;
  font-size: var(--fs-ui);
  line-height: 1;
  padding: 2px 4px;
  opacity: 0.7;
  transition: opacity 0.15s ease, transform 0.1s ease;
  -webkit-user-select: none;
  user-select: none;
}
.agent-bar .ab-transcript:hover { opacity: 1; transform: scale(1.1); }
.agent-bar .ab-transcript:active { transform: scale(0.94); }
/* live-session tint — set .recording on the bar's button from your own UI if you want the glow;
   the module itself doesn't toggle this class (kept additive), it's here for whoever wires the chrome. */
.agent-bar .ab-transcript.recording { opacity: 1; filter: drop-shadow(0 0 3px rgba(220, 40, 40, 0.7)); }