Build Pocket Ledger, a complete local expense-tracker web app, in this starter repository using vanilla JavaScript ES modules, HTML, and CSS, with no external dependencies, APIs, CDNs, image generation, or deployment. Work directly with local files and native execution tools; do not delegate. Do not inspect sibling directories. You may use any task-scoped tools supplied by the launcher.

Implement src/ledger.js exporting parseAmount, validateExpense, filterExpenses, summarizeExpenses, and toCSV according to the fixed tests in test/ledger.test.js. Do not modify package.json or test/. Amounts use positive integer cents; accept at most two decimal places and reject exponents, trailing junk, zero and negative values. Categories are Food, Travel, Home, Other. Dates must be real YYYY-MM-DD calendar dates. CSV uses CRLF lines, standard quote escaping, two decimal amount formatting, and guards spreadsheet formulas beginning with =, +, -, or @.

Create index.html, src/app.js and styles.css for a polished, responsive app. Users can add an expense (description, amount, category, date), see an empty state or newest-date-first list, delete a row, search description, filter by category and month, see total and count for the filtered list, and export that filtered list as CSV. Persist expenses in localStorage under pocket-ledger-v1, restore after reload, and handle malformed stored JSON gracefully. Render user-provided descriptions as text, never HTML. Provide visible field labels, keyboard-accessible controls, a helpful inline error, and a layout usable at 375px and desktop widths. Use USD formatting. Start with no expenses. Confirm before clearing nothing: only individual deletion is required.

Use these exact DOM ids for verification: expense-form, description, amount, category, date, search, category-filter, month-filter, expense-list, total, count, export-csv, form-error. Delete buttons must have accessible names containing Delete. The search and filter controls should update results immediately. Include a short README explaining use and verification. Run npm test and fix failures. Finish with a concise description of the implemented features and actual test results. Do not leave a server running.
