Bug Fixes
- Upgrade error messages now show the actual reason — previously displayed a generic "Upgrade failed. See log below" with no visible log; now the flash message includes the specific error (e.g., jobs still running)
- Upgrade logs are now saved on all failure paths — failed upgrade attempts now persist the log to the database so it's visible in the Upgrade Log section
- Fixed schedule hour picker not responding to clicks — editing a backup plan and selecting run hours for "Every Day" frequency had no effect due to event listeners being double-bound on edit forms