# Focus Desk A small, dependency-free task manager. Vanilla HTML, CSS and JavaScript; all data is stored in `localStorage` in your browser. ## Run ```sh python3 -m http.server 8000 ``` Then open . Stop the server with `Ctrl+C` when done. ## Features - Create tasks with a required title, optional notes, priority (low/medium/high) and optional due date. - Edit any task (title, notes, priority, due date), delete it, or toggle complete/incomplete at any time. - Search across titles **and** notes, case-insensitively. - Filter by status (all/active/completed) and by priority; search and filters combine. - Counts for total, active and completed tasks. - Everything persists across reloads. The app starts empty and never seeds demo data; corrupt or invalid saved JSON is ignored safely. - Responsive from 390px to 1440px with no horizontal overflow. ## Manual verification 1. Load the page: counts read 0/0/0 and the empty state is visible. 2. Submit the form with an empty title: nothing is added and an inline error appears. 3. Add "Write report" (notes "Q3 numbers", priority high, due date tomorrow). It appears at the top of the list; total = 1, active = 1. 4. Add "Buy milk" (notes "from the corner shop", priority low). Total = 2. 5. Search `corner`: only "Buy milk" remains. Search `REPORT`: only "Write report" remains. 6. Clear search, set status to **Completed**: empty state shows the "no tasks match" message. 7. Toggle "Write report" complete: total = 2, active = 1, completed = 1; its title is struck through. Toggle it back to confirm the toggle is reversible. 8. Set status to **Active** and priority to **low**: only "Buy milk" shows. Reset both filters to **All**. 9. Edit "Buy milk" and change its title to "Buy oat milk"; save. The new title is shown. 10. Reload the page: all tasks, titles, notes, priorities, due dates and completion states persist. 11. Delete a task: it disappears and the counts update. 12. Delete all tasks: the empty state returns with the "first task" message. 13. Paste `` into a title: it renders as literal text, not HTML. 14. Resize to 390px and 1440px: layout reflows with no horizontal scrollbar; tab through the form and list to see visible focus rings. ## Files - `index.html` — markup and structure - `style.css` — light theme with an indigo accent - `app.js` — state, persistence, filtering and rendering