- Create useCanvasRenderer composable (752 lines) for all rendering logic
- Create useCanvasInteraction composable (632 lines) for all interaction logic
- Reduce CanvasPreview.vue from 1659 to 169 lines (90% reduction)
- Maintain 100% functional equivalence
- Improve code organization and maintainability
- All TypeScript compilation passes with zero errors
- Add console logging to GPU rendering pipeline for debugging
- Fix selection border rotation to use rotationZ when available
- Fix mask overlay rotation to match layer's actual rotation
- Improve offscreen canvas initialization with desynchronized flag
- Fix layer drag freezing when keyframes exist (auto-create keyframe at current time)
- Fix timeline/keyframe alignment (add 60px margin for prop-name)
- Fix keyframe dragging in timeline
- Fix Mask initialization (start with white/visible)
- Fix layer render order in JS (background first, then foregrounds)
- Add Theatre.js style timeline with expandable layers and property rows
- Add editable params area with interpolated values
- Center toolbar buttons
- Update criticalCSS in timeline.js to match Vue styles