Status filter: chip tap → immediate server request (loading bar atop stale
list, never blank page); "All" resets.
Client-side filters (S1 source / my-leads): filter current loaded page
instantly; label "filtered on device" hint when server filter unavailable
(04 §6).
Pull-to-refresh: resets page 1, bypasses cache; S5 also refetches stats.
Infinite scroll:loadMore when hasNext (mixin 00-shared/06 §3.2); row
tap → detail push (phone) / detail pane (tablet).
Row press feedback:m-fast ripple; no long-press actions (no delete/duplicate
today).
Documents:Add document sheet (08 §6); after success, status badge may
flip submitted → documents_pending (admission.service.ts:112-114) — refresh
detail; snackbar notes the transition.
Interview:Schedule sheet (08 §7); re-schedule allowed while open
(overwrites, admission.service.ts:124-129); after save, status →
interview_scheduled when not already (admission.service.ts:130-132).
Decision: S9 dialog; selection required; confirm disabled until choice;
waitlist/reject warnings per choice; success → status + workflow timeline update.
No WS topics for CRM today (00-shared/07 §8) → no live updates; refetch on
app foreground + pull-to-refresh. (forward-looking): subscribe
crm.lead.updated / crm.admission.updated topics when gateway adds them.