- Add isProgrammaticScroll guard so observeUserScrollPosition does not
break follow mode during our own scroll commands (the new item lays
out below the viewport transiently, causing isAtBottom=false)
- Replace immediate scrollToBottom with scrollToBottomAwaitingLayout:
yields twice for recomposition+layout, scrolls, retries if still not
at bottom (up to 150ms wait via snapshotFlow on totalItemsCount)
- Increase bottomPixelTolerance 8→48px to cover LazyColumn contentPadding
(8dp ≈ 24px on hdpi) plus margin for keyboard/fractional rendering