- Pointer down on selected furniture starts drag mode - OrbitControls disabled during drag - Floor plane (Y=0) raycasting for cursor projection - Drag offset preserves grab point (no cursor jump) - Grid snapping at 0.25m intervals (configurable) - Room bounds constraint keeps furniture inside walls - On pointer up, commits new position to DesignState - Wall-mounted items excluded from drag