/** * BlockSplitter — string-level block scanner shared across surfaces. * * Lifted from the edge proxy's `translate-html.ts` scanner (webhook Phase 10) * so non-DOM surfaces (edge Worker, webhook Worker) split HTML into the SAME * block boundaries instead of hand-rolling a second parser. The browser DOM * path (`browser/block-extractor.ts`) mirrors the same tag sets via * `querySelectorAll`. * * Structural only: finds innermost block elements (p, h1–h6, li, td, …) and * orphan inline `` outside any block, returning each block's opening tag, * raw attribute string, and byte-exact innerHTML with source offsets. No * keying, no exclude filtering, no translation — callers layer their own * policy (edge: data-i18n precedence + ExcludeFilter + replacement stamping; * webhook P13: `toContentUnit(inner)` + `generateAutoKey` per block). Blocks * inside skip tags (`