BUG-05: Speichern-Button weg, Save-Status-Indikator mit States
Der 'Speichern'-Button war redundant — debouncedSave() lief schon
bei jedem Drop/Resize/Add/Delete. Klick auf den Button machte nur
einen sofortigen POST statt 500ms-debounce. Verwirrend statt hilfreich.
Fix:
- Speichern-Button aus dem Toolbar entfernt.
- Stattdessen: <div id='saveIndicator' data-state='idle'> mit .save-dot
und .save-label — rechtsbündig im Toolbar (margin-left:auto).
- States: idle | pending | saving | error (CSS-Data-Attr-basiert).
- idle: grüner Punkt, 'Gespeichert'
- pending: warn-gelber Punkt pulsiert, 'Ungespeichert…' (debouncedSave-Start)
- saving: info-blauer Punkt pulsiert schneller, 'Speichern…' (saveLayout-Start)
- error: alert-roter Punkt, 'Fehler: ...' (j.ok=false)
- setSaveState(state, label?) als zentraler Helper.
- saveLayout() macht jetzt success-toast weg — der Indicator reicht.
- Fehlerfall: error-toast bleibt (kritisch, separat sichtbar).
Vorteile:
- Toolbar ist aufgeräumter, +Button ist eindeutig der primäre Action.
- User sieht Save-Status ohne Klick auf irgendwas — visuelles Feedback
für Auto-Save.
- Fehler-State zeigt sofort 'Fehler: ...' mit Details.
Beweis: tests/test_save_indicator.js (11/11 grün)
1. Speichern-Button entfernt
2. Save-Indicator #saveIndicator vorhanden
3. setSaveState() Funktion definiert
4. setSaveState setzt dataset.state
5. debouncedSave setzt pending-Status
6. saveLayout setzt saving am Anfang
7. saveLayout setzt idle bei Erfolg
8. saveLayout setzt error bei j.ok=false
9. CSS für alle 4 Indicator-States
10. Kein success-toast in saveLayout mehr
11. Save-Indicator rechtsbündig (margin-left:auto)
Closes #7