The new explicit speech buttons extend keyboard order. Retain close/fullscreen order checks and assert every visible Tab transition plus wrap instead of treating close/theme as the last focusable control. Production code and generated data unchanged.
Yesterday
feat: pilot explicit preview and selection reading with Hitokoto
Reuse the lazy independent CPU reader through a strict two-origin window/channel bridge. Preserve exact preview text and selection context, require explicit synthesis and active replacement, and keep search/filter/preview independent of the persistent player. No index/corpus/backend/model dependencies or SW cache-name changes.
fix(filters): use one stateful expand-collapse button
Remove system speech entry, settings, playback controls, styles and static module. Preserve fullscreen/restore button order and fullscreen share URLs. BHA removes only the obsolete TTS static-copy line. No backend, corpus, index, generated-data or runtime-configuration changes.
feat: add system TTS controls and shareable fullscreen previews
Frontend-only system speech, voice/rate/pitch preferences, position-aware playback, sleep timer and fullscreen URL restoration. BHA additionally copies the new static module into its frontend image output. No backend, corpus, generated data, index or runtime configuration changes.
ui: place preview fullscreen control before close
Swap only the fullscreen and close button order in preview toolbars, including the BHA proofreading toolbar. No backend, data, index, configuration or CSS changes.
Keep local guides, reports, benchmark outputs, caches, snapshots and Python artifacts out of the project working tree; test source files remain trackable.