Backend:
- sessions.rs: add is_superadmin bypass to list_sessions,
create_session, create_slot, update_slot_status, delete_slot
- rooms.rs: allow empty layout on create_room (layout is built
in editor after creation)
Frontend room editor:
- Fix drag coordinate sync: replace window mousemove delta calc
with SVG CTM inverse transform (getScreenCTM), eliminating
the 3x movement ratio bug
- Switch to pointer capture (setPointerCapture) per element;
remove svelte:window handlers
- Positions always snap to 0.5 grid on drop, preventing
backend validation errors
- Left floating sidebar toolbar (collapsible) with Sitz/Tisch/
Tür/Lücke buttons and inline SVG icons
- Room dimensions bar (Breite × Tiefe, 5–50 grid units)
- Zoom controls (25%–400%) via scroll wheel or +/- buttons;
SVG scales via width/height attrs so scrollbars work correctly
- Property panel inputs snap to 0.5 on blur (prevents save errors)
- Canvas bounded to room dimensions during drag