When a layoutId consumer mounts inside a layoutScroll ancestor that
has been scrolled, its first FLIP starts from the donor's pre-scroll
viewport position instead of the donor's last-rendered position. The
donor's bcr is captured in viewport coords; the consumer's subsequent
measureLocal runs in projection-parent-local coords with each
layoutScroll ancestor's scrollTop / scrollLeft added back. The two
ends of the handoff lived in different frames, so the first delta was
offset by every intermediate scroller's scroll amount — visibly, the
indicator jumped to wherever the donor had been before the user
scrolled, then slid into place.
Fix: apply the same scroll-ancestor offsets to initialFirst that
measureLocal applies to last, so both ends share one coord frame.
Refactors the duplicated rect→initialFirst conversion in both handoff
branches (findLive and consume) into a single local helper, computed
lazily so the non-handoff path stays free of the extra bcr + scroll
reads.
Demo update: examples/basic AppShell marks the desktop sidebar with
layoutScroll so the nav indicator behaves correctly while the sidebar
is scrolled — same fix exposed both bugs (stale baseline + handoff
offset) and the demo now covers the full scrolled flow.