feat(log): add captureError helper, wire Player onError to Sentry in all consumers master
The web app initialises @sentry/react in main.tsx but nothing in the codebase called Sentry.captureException — so player errors (and other caught errors) were invisible to Sentry. Add lib/log.ts with captureError(message, context?). Builds a real Error so Sentry can group by stack, preserves the message, attaches the context bag via withScope. Short-circuits to console.error in dev so local dev doesn't spam Sentry. Also adds log.warn / log.error helpers for one-off dev logs that shouldn't reach Sentry. Wire <Player onError> in all four consumers: - components/stream/video-section.tsx (live + VOD) - components/dashboard/stream-monitor.tsx (self-preview) - routes/embed/$user/index.tsx (live embed) - routes/embed/$user/video/$tid.tsx (VOD embed) Each handler calls captureError with context (user, tid where applicable, source tag). Previously, player errors only set local state and rendered a small red toast inside the player — no upstream trace, no Sentry capture, no toast in the app shell.