Back-navigating from an article detail view to the list and into the
same article again crashed with
TypeError: Cannot read properties of null (reading 'removeEventListener')
Sequence that triggered it:
1. ReaderView unmounts, its own $effect cleanup calls onscroller(null).
2. DetailView sets readerScroller = null.
3. HighlightLayer's prop `scroller` becomes null.
4. The old $effect's teardown fires and reads `scroller` — which now
points at null instead of the element it had attached listeners to.
5. null.removeEventListener(...) throws, Svelte can't finish tearing
down the tree, and the re-mount never happens.
Fix: snapshot the element reference at setup time so the teardown uses
the same element the setup used, regardless of what the reactive prop
is currently pointing at. Comment block in the file explains the trap
so a future cleanup doesn't re-introduce it.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>