Health dashboard: responsive breakpoints, card/CSS consolidation, table-driven observe
- Add @media queries at 768px and 480px for responsive grid reflow
- Extract shared .dashboard-card base CSS, removing 6 duplicated card styles
- Unify .dream-info-item/.sync-info-item into .info-item/.info-label
- Add renderInfoItems() helper used by updateDreamCard() and updateSyncCard()
- Refactor updateObserve() from per-channel if/else to table-driven channel array
- Add aria-label on status dots, aria-live on vitals, role=log on logs viewport