Previously the "+" snapped to any seam within 18 px of the cursor's
Y — which meant it appeared even when the cursor was hovering on a
block's body (near its top/bottom edge) or in the rail aligned with
the block. That clashed with the grip's territory.
Per user spec: when the cursor is on a block (text or rail-aligned),
the grip is the actor — the "+" should be hidden. The "+" only
surfaces when the cursor is in the rail column AND vertically
positioned in a gap BETWEEN two blocks.
Two new gates added to `findSeamForCursor`:
1. **Out-of-content X**: if `e.clientX` falls inside the content
box's horizontal extent (the editor's text area), return null
immediately. The cursor is reading text or near the toolbar/
status row, not the rail.
2. **Out-of-block Y**: if `e.clientY` falls inside ANY top-level
block's vertical band, return null. The block-handle owns that
slot.
Only when both gates pass do we snap to the nearest seam. The
existing `dragover` path is untouched — drag indicator still works
inside the content area because the drag operation has different
ergonomics (you're actively moving a block, the line is the drop
target, not a discoverability cue).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>