Modal reliability fix
- Fix: replaced native <dialog> elements with custom overlays — iOS Safari has known bugs where dialogs could open spontaneously or refuse to close; all modals now use plain div overlays controlled via the hidden attribute
- Fix: close button and backdrop tap now work reliably on iPad
Error log, update prompt, offline fix
- Error log panel — a ⚠ badge appears in the bottom-right corner when something goes wrong; tap to see all errors with timestamps and stack traces; catches uncaught JS exceptions, unhandled promise rejections, and explicit errors from the import flow
- App update prompt — when a new version is downloaded in the background, a dialog asks whether to update now or later; choosing Later will re-ask on the next launch
- Fix: offline crash — the MuPDF WASM file was not included in the service worker precache, causing the entire app to crash on startup when offline; WASM is now precached and PDF parsing is lazy-loaded so a missing WASM only breaks import, not search or previously stored data
Initial release
- PWA shell — installable to iPad home screen via Safari "Add to Home Screen"; works fully offline after first load
- OurAirports database — global coverage (~80,000 airports) bundled as CSV; parsed on first run and stored in IndexedDB; includes runways, comm frequencies, and navaids
- Search — instant lookup by ICAO, IATA code, or airport name; exact → prefix → name ranking
- Tabbed detail view — OurAirports and Jeppesen shown in separate source-isolated tabs; no data merging between sources
- Jeppesen PDF import — upload per-region Jeppesen Airport Directory PDFs; text extracted locally via MuPDF (no network calls); parsed fields include declared distances (TORA/TODA/ASDA/LDA), fuel grades, hours, customs, contacts, PCN, and beacons
- Raw text viewer — collapsible section in the Jeppesen tab showing extracted source text for verification
- iOS Safari compatibility — switched PDF engine from pdf.js to mupdf-js to resolve worker/WASM issues on iPadOS
- Debug console — add
?debug to the URL to enable the Eruda in-app console for on-device debugging