observer: move freshness classification to the server
Classify registered-observer freshness in `apps/observer/routes.py` via
_classify_observer_freshness(). /app/observer/api/list now returns
state/group/label/elapsed_ms/clock_skew per observer; workspace.html
consumes them directly and the client-side freshness() computation
is deleted. FUTURE_CLOCK_DRIFT_TOLERANCE_MS (5 min) clamps obviously
bad client timestamps.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>