Target spec applied to both surfaces: the variable table (leveled up to match) and the canvas step. Drag a row in either panel to see the custom ghost, the drop indicator, and the invalid-drop state. Tab to a handle to see the focus ring; hover a handle for the tooltip. The 🔒 row is a locked drop target — drag over it to see the red invalid state.
Both panels now share: 6-dot grip · ring focus · directive tooltip · elevated drag ghost · 2px line + dot drop indicator · red invalid state.
Handles always visible (dense editor).
Handles reveal on hover (reduces canvas clutter).
Every state in the shared spec, isolated for review.
Mockup only — approximated Horizon/daisyUI tokens (--b1/--b3/--bc/--p/--error). Not wired to Karuna. Once approved, this becomes PR A (canvas: tooltip directive + focus ring) and PR B (table: custom ghost + drop-indicator dot + invalid state + ring focus).