🐛 Bug Fix
- Speech Recognize: the recognition confirmation "beep" created a new
AudioContexton every result and never closed it. During continuous dictation these piled up — leaking until the browser's per-page limit was hit and the overlapping audio turned into a "roar" that could crash the tab. The sound helper now reuses a singleAudioContextper recognizer and releases it ondestruct. Recognizer cleanup is also tied to the editor lifecycle (previously the toolbar button'sbeforeDestruct), so it survives toolbar rebuilds and is freed when the editor is destroyed.