Commit e078283
ui(player): drop native controls, branded camera-pulse loader
User feedback (with three reproduction screenshots): the live-feed
tiles look "ugly" during the connect window — refreshing the dashboard
shows a generic browser spinner stacked over the default HTML5 video
control bar (play/pause, scrubber, 0:00/0:00, mute, fullscreen icons),
which then keeps showing during steady-state playback too.
Two-line root cause:
1. <video controls /> renders the browser's default control bar.
None of those controls do anything useful here — every player is
`muted`, live streams aren't seekable, autoplay starts on
MANIFEST_PARSED so play/pause is moot, and the dedicated
Fullscreen button beneath the video already replaces the native
fullscreen icon. Pure visual noise.
2. .loading-spinner is the generic ring used everywhere (auth pages,
empty states, settings). It's correct but unbranded — it says
"something is loading" but not "this product is loading".
Changes:
- HlsPlayer.jsx: drop the `controls` attribute. Video element is now
chromeless. The custom Fullscreen button below the video stays
in place; it was already wired to video.requestFullscreen().
- HlsPlayer.jsx: replace the generic .loading-spinner div with an
inline SVG camera icon scoped to .hls-player-loading. Kept the
"Connecting to stream..." text underneath. SVG is the standard
feather-icons-style camera (rect + chevron); no external dep.
- index.css: add .hls-player-loading .camera-pulse (56×56, accent-
green, soft glow) plus a 1.6s opacity+scale pulse keyframe. The
rule is scoped under .hls-player-loading so the global
.loading-spinner stays untouched for every other use site.
- prefers-reduced-motion media query honors the OS setting — pulse
drops to a steady mid-opacity icon so vestibular-sensitive users
aren't forced to watch it breathe.
Side effects worth knowing:
- Right-click "Save video as" on the live feed is gone (the menu
was a side effect of the native controls). Considered a security
nicety, not a regression.
- On iOS Safari, native controls used to provide a tap-to-unmute
shortcut. We're already `muted` + `playsInline` so autoplay works
without it; the user can still long-press to access browser
actions if needed.
Risk: zero functional. Steady-state playback path unchanged. Connect
window is the only visual surface that moved, which is the surface
the user explicitly flagged.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent a457ac1 commit e078283
2 files changed
Lines changed: 71 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
252 | 252 | | |
253 | 253 | | |
254 | 254 | | |
255 | | - | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
256 | 274 | | |
257 | 275 | | |
258 | 276 | | |
259 | | - | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
260 | 292 | | |
261 | 293 | | |
262 | 294 | | |
263 | | - | |
264 | 295 | | |
265 | 296 | | |
266 | 297 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5678 | 5678 | | |
5679 | 5679 | | |
5680 | 5680 | | |
5681 | | - | |
| 5681 | + | |
5682 | 5682 | | |
5683 | 5683 | | |
5684 | 5684 | | |
5685 | 5685 | | |
5686 | 5686 | | |
| 5687 | + | |
| 5688 | + | |
| 5689 | + | |
| 5690 | + | |
| 5691 | + | |
| 5692 | + | |
| 5693 | + | |
| 5694 | + | |
| 5695 | + | |
| 5696 | + | |
| 5697 | + | |
| 5698 | + | |
| 5699 | + | |
| 5700 | + | |
| 5701 | + | |
| 5702 | + | |
| 5703 | + | |
| 5704 | + | |
| 5705 | + | |
| 5706 | + | |
| 5707 | + | |
| 5708 | + | |
| 5709 | + | |
| 5710 | + | |
| 5711 | + | |
| 5712 | + | |
| 5713 | + | |
| 5714 | + | |
| 5715 | + | |
| 5716 | + | |
| 5717 | + | |
| 5718 | + | |
| 5719 | + | |
| 5720 | + | |
| 5721 | + | |
| 5722 | + | |
5687 | 5723 | | |
5688 | 5724 | | |
5689 | 5725 | | |
| |||
0 commit comments