/*
IC SHIP PASS — generated by icpass.py from the map. edit the CODE; rerun to refresh this.

══════════════════════════════════════════════════════════════════════
 PAGE 0 — TABLE OF CONTENTS  (goldfish pointers)
 jump by SEARCHING the anchor phrase — line numbers drift, names don't.
══════════════════════════════════════════════════════════════════════
  📝 transcript-mode affordance ... search: "📝 transcript-mode"
══════════════════════════════════════════════════════════════════════

 FOR AI
 ───────
   **OWNS** — The visual styling for `.ab-ear` (the 👂 listening-state toggle button on the nurse
   **bar) and `.ab-transcript` (the 📝 affordance button). These class names are the contract:
   **`transcript-mode.js` mounts `.ab-transcript` expecting this file's styles; `voice.js`
   **toggles `.ab-ear.on` expecting the pulse animation.
   
   **TOUCH HERE** —
   - Change ear button's idle opacity or grayscale → `.ab-ear` L3–15
   - Change ear button's hover/active feedback → `.ab-ear:hover` L16, `.ab-ear:active` L17
   - Change the "listening" glow color, timing, or intensity → `@keyframes ab-ear-pulse` L25–28
   - Change transcript button's idle opacity or spacing → `.agent-bar .ab-transcript` L34–45
   - Change transcript button's hover scale or active scale → `.agent-bar .ab-transcript:hover`
   - L46, `.agent-bar .ab-transcript:active` L47
   - Change the recording-state glow (red tint) → `.agent-bar .ab-transcript.recording` L50
   
   **TRAPS** —
   - `.ab-ear.on` class name is toggled by external code; renaming it breaks the listening state
   - (L20).
   - `.ab-transcript.recording` class is set by "whoever wires the chrome" (L48–49 comment); the
   - class must exist and the filter must produce a red glow or the affordance vanishes.
   - The pulse animation name `ab-ear-pulse` is hardcoded in the animation property (L23); if you
   - rename the keyframes, update both places.
   - `var(--fs-ui)` is a CSS variable defined elsewhere; if it doesn't exist, both buttons render
   - at browser default size (L7, L38).
   
   **DO NOT** —
   - Change `.ab-ear` to match `.ab-mic` or `.ab-speak` styling; this file documents that they
   - are separate (L2 comment).
   - Add JavaScript logic or state management; this is styling only.
   - Move the transcript-mode styles to a separate file without updating the comment at L31–33
   - that says they live here.
   - Rename `.agent-bar` or `.ab-transcript` without checking `transcript-mode.js` first.
   
   
   
   ---

END IC SHIP PASS
*/

/* 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)); }