Functional fixes:
- Add isDirtyRef to distinguish user edits from note selection; auto-save now
only fires after the user actually modifies content, not on every click
- Add selected and isNew to auto-save effect deps so the closure is never stale
when switching between notes (previously could save to the wrong note)
- Double-check isDirtyRef inside the debounce callback to handle rapid note
switches within the 1-second window
- Reset isDirtyRef to false after every successful save (manual and auto)
CSS fixes:
- Add button.ghost and button.ghost.danger styles to buttons.css; delete button
was invisible/identical to the save button because .ghost was never defined
- Add select element styling to base.css to match input/textarea theming;
language picker was unstyled browser-default in both dark and light mode
- Add .error class (red text) to base.css; error messages had no colour
- Add .notes-layout grid class with responsive media query (stacks below 680px);
remove inline gridTemplateColumns that overflowed on small screens
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>