Split screen boundary usage into two sources:
1. walk / roam / run-to-target (unchanged):
- self.screen_* = WindowManager.get_work_area() (primary monitor, taskbar-aware)
- Cat autonomously roams the primary desktop floor only
2. drag clamping (new):
- self.vd_* = WindowManager.get_virtual_desktop_bounds() (all monitors)
- on_mouse_move() clamps to vd_left/right/top/bottom instead of
screen_left/right/top/bottom
- User can now pick up the cat and drag it to any connected monitor
Previously on_mouse_move() clamped to the primary work area rectangle
(0, 0, 1920, 1032), so moving the cursor past x=1776 would immediately
snap the cat back, making the second monitor unreachable.