- content-editor.js: extract the /save handler to scripts/cms-save.js
- cms-logo-page.js: inline the ~280-line canvas editor script to
scripts/cms-logo-client.js (page is now the HTML/CSS shell only)
- cms-editor-client.js: move the keyboard-shortcut section to
scripts/cms-editor-shortcuts.js, inlined after the main client
All modules now under the hard limit; full pre-deploy suite green.
Closes MITHOME-80
Closes MITHOME-76:
- Interactive Canvas-based modal for logo editing in CMS
- Crop with presets (1:1, 3:1, 4:1, 16:9, free)
- Drag-to-pan positioning and wheel/slider zoom
- 90 deg rotation and horizontal/vertical flip
- Configurable padding/margins around logo
- Brightness, contrast, and color invert filters
- Direct high-DPI (2x retina) PNG export and atomic save
- 🎨 Logó page in the CMS bottom bar: replace the website header logo and
the CMS login icon with a PNG upload (magic-byte validation, 1 MiB cap)
- the replaced logo gets a timestamped backup in .content-backups; every
upload is audited (logo_updated)
- /logo.png?variant=header serves the header variant for the preview
- publish stages proto/public too, so logo changes ride the same
commit+deploy pipeline as content
- route handling extracted to scripts/cms-logo.js to stay under the
400-line limit
- integration test: upload+replace+backup, variant preview, 415/413/400,
CSRF, auth
Closes MITHOME-65