Thinking blocks expand by mouse-click only (ReasoningAction::Expand is an InteractionTarget; no keyboard path). Voice input should follow the same inline pattern: on-device speech recognition where the OS offers it, with a wired STT API-key fallback (add the key slot), a single keyboard command to start/stop, and a live level/listening animation in the composer while sound is accepted. Keep the collapsed transcript rendering untouched.
Thinking blocks expand by mouse-click only (ReasoningAction::Expand is an InteractionTarget; no keyboard path). Voice input should follow the same inline pattern: on-device speech recognition where the OS offers it, with a wired STT API-key fallback (add the key slot), a single keyboard command to start/stop, and a live level/listening animation in the composer while sound is accepted. Keep the collapsed transcript rendering untouched.