feat: 无限画布 — infinite canvas with generation integration
Backend:
- canvases table + owner-scoped CRUD under /admin/api/canvas
(list/create/get/save/delete, 50 docs/user, 4MiB cap, JSON validation)
Frontend:
- /canvas full-screen workspace: DOM+CSS-transform infinite pan/zoom
(GPU-composited world layer, viewport culling, rAF-batched pointer moves)
- nodes: image (thumb display, natural-size correction), note
(uncontrolled contenteditable), generation placeholder with edges
- generate on canvas: prompt from panel or selected notes, selected image
nodes as references, results auto-placed + bezier edges to sources
- multi-canvas management, debounced autosave + keepalive flush,
snapshot undo/redo (60 steps), marquee/keyboard interactions