utils/chapterField owns the per-zone reading (header = the chapter at the page top, footer = the last begun) so the probed LibreOffice semantics is unit-tested; the DOM measurement feeding atTop stays in Editor.svelte.