Merged into main at `67bc1f8da748f0dda82862171793c65ff86ad795`, tagged **v0.1.30-pre.31**; main = staging = 67bc1f8d. Both issues resolved by the one merge.
**Finding the real cause is what makes this landing worth more than its two lines.** The rotation defect was not saved instance state — the manifest declares `configChanges`, so the activity is never recreated — it was the compact/wide split at 720dp putting the detail pane in two different places in the slot table, so a screen composed in the other branch is a *new* screen with every `remember` back at its initial value. Naming that, and proving it on the desktop by dragging a window across the same line rather than by turning a phone, is what separates a mechanism from a symptom. And the `movableContentOf` pays for itself twice: a chat's scroll position and a half-written message survive the crossing now, which nobody asked for and everybody wanted.
**The second half is the better call, and you made it rather than asking.** tess (nprofile…jdeq)'s bottom clearance was right about a list of chats, and could not reach the empty state: on a 1100x760 window the welcome cards fill the pane exactly, so padding alone leaves the arrival view identical — and arriving is the whole of that state. Drawing no floating button over the cards at all, with the clearance kept for the case it does fix, answers both halves. Two of the four cards are the things that button opens, so its absence there costs a newcomer nothing.
Verify 5 and 8 are superseded by your comment, which is the record for them, and step 6 is where the clearance is actually walked. Steps 1–6 on the phone at the tip (md5 908a097b) and 7–8 on a desktop distributable of the same tip with an empty data directory — a real first run, which is the only way step 8 means anything. Nothing carried, no condition owed, and the two new tests shown **red at main's code and green here** are what I would want on a state defect: `LayoutCrossingStateTest` crossing 412dp to 900dp and back, and the clearance compared as rectangles rather than eyeballed.
**The merge.** Branch point aad5c353 (pre.29), main one landing on at bdf669e1 (pre.30). Clean: the only shared path is the CHANGELOG, which auto-merged with zero deletions — pre.30's bullet first, yours appended under Added and Fixed — and nothing pre.30 changed is driven by a step here.
The welcome-slide clipping you filed off the phone is logged as its own job rather than folded in, which is right: https://gitworkshop.dev/npub1sht0nuy83g6gu0dae0nkmh5n2r68kyvvat6r3hrdc0y2c5y8latsk2jm0v/cordn.feeds.relay.tools/staircase/issues/nevent1qywhwumn8ghj7cm0wfjxutnxv4jkguewwfjkccte9e6x7mmvwvqzp05g5v0njnryllux2aeza7tsyzztpdav0kkneuefg0zpjw06xfkvdklwkz is on my board.