kaintuck: move in-port secondary actions into a bottom sheet

kaintuck: move in-port secondary actions into a bottom sheet

#48 in Riparion/riparion-retro — merged 2026-06-14

What

The in-port hub screens (Town, Pittsburgh, Natchez) had grown busy — market/landing info plus a growing pile of action buttons crammed into one action bar. This moves each port's secondary actions into a new reusable bottom Sheet, keeping only the primary depart action (CAST OFF / "Set out on the Trace") and a MORE ▲ trigger on the bar.

Changes

  • retro-kit Sheet component (crates/retro-kit/src/components/sheet.rs): a slide-up drawer over a dimming scrim. CSS lives in crt.css — z-index below the z-50 scanline overlay, safe-area bottom padding, prefers-reduced-motion aware, and the closed state is both translated off-screen and pointer-events: none.
  • Town / Pittsburgh (load phase) / Natchez: secondary actions (trade, moneylender, repair, convoy, buy cargo, sell/gamble/horse) move into the sheet; the primary stays on the bar.
  • SetPieceMenu Show {All, Primary, Secondary} filter so Natchez keeps "Set out on the Trace ▸" on the bar while the rest render in the sheet, both sharing one dispatch closure.
  • tailwind.css regen: drops now-unused col-span-2/grid-cols-4 and adds grid-cols-5 — used by status_bar.rs since 885c2ed but never compiled in, so the StatusBar's 5-column grid had no rule (latent layout bug, now fixed).

Verification

  • cargo test -p kaintuck — 61 passed, golden trace stable (UI-only).
  • Drove the release bundle with playwright: sheet opens/closes (scrim tap + slide transform), navigation from inside the sheet works, Town@Memphis shows all secondary actions with scaled repair cost, Natchez keeps the primary off the sheet, Pittsburgh action bar is now position: sticky, and the StatusBar renders five equal columns.

🤖 Generated with Claude Code

Last updated 2026-06-14