Normalize legacy WebView fallback highlights rather than accumulating per-clip text nodes. Keep active controls within the preview focus scope while another source loads and detach only before DOM replacement. Reopening controls preserves active speech; visible-start explicitly switches source. Exercise real long Unicode fallback DOM and actual first-control inline Tab escape.
feat: compact native preview reader with rolling long-text playback
One preview play icon, fixed female01, compact non-modal native controls and direct CORS audio. Start at visible source or double-clicked sentence; support locate, pitch/rate/sleep and pause-aware bounded prefetch. Remove document-wide 20k cap and iframe startup chain; first batch targets 80 codepoints, subsequent 480. Request opt-in pauses for unknown phones without changing originals.
test: walk full preview focus cycle including reader entry points
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.
2 days ago
fix(filters): use one stateful expand-collapse button