- assistant messages get a 🔊 button that fetches TTS audio and plays
it, toggling to stop
- ChatInput gains a mic button: MediaRecorder capture, base64 upload to
/voice/stt, recognized text fills the input
- api client: voice.tts (blob) and voice.stt helpers