What changed
- keep the active scrollspy entry inside the visible desktop outline
- mirror active state into the responsive inline outline
- recompute its position when the responsive outline opens
- add a focused regression test
Root cause
The scrollspy selected the correct heading, but the independently scrolling fixed outline stayed at scrollTop = 0. On long pages the active link and marker moved below the outline viewport, making the scrollspy appear inactive.
Validation
bun run lintbun run buildbun run typecheckbun test(542 passing)