feat: replace toast system with persistent notification cards
Replace transient toast notifications with iOS-style persistent notification
cards that stack in top-right corner. Cards remain visible until dismissed
or clicked, providing better visibility for important events.
Notification Cards:
- Persistent until user dismisses or clicks
- Stack vertically below facet-bar (max 5 visible)
- Slide-in animation from right (only on new cards)
- Click card body → navigate to action URL
- Click X button → dismiss immediately
- Auto-dismiss optional per notification
- Relative timestamps updated every minute
- Badge counts on individual cards
- Browser notification integration
Implementation:
- Moved AppServices framework from app.html to app.js
- Added notification center container to app.html
- Complete notification styles in app.css
- Incremental DOM updates prevent re-animating existing cards
- AppServices.notifications.show/dismiss/update API
- Updated home service example to use cards
Dev Tools App:
- Created apps/dev/ for testing notification system
- Quick test buttons for common scenarios
- Custom notification builder with form
- Management controls (update, dismiss, stats)
- Stress tests (spawn multiple, sequential)
- Real-time console log of notification events
Documentation:
- Updated DESIGN.md with notification card components
- Complete API reference for notification system
- Usage examples and patterns
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>