PluginProbe
WpStream – Live Streaming, Video on Demand, Pay Per View / 4.14.1
WpStream – Live Streaming, Video on Demand, Pay Per View v4.14.1
4.14.1 4.14.0 4.13.2 4.13.1 4.13 4.12.5 4.12.4 4.12.3 4.12.2 4.12.1 4.12 4.4.4 4.4.5 4.4.6 4.4.7 4.4.8 4.4.9 4.5 4.5.1 4.5.11 4.5.11.1 4.5.11.2 4.5.11.4 4.5.11.5 4.5.11.6 All 181 releases
wpstream / public / css / broadcaster.css

broadcaster.css in WpStream – Live Streaming, Video on Demand, Pay Per View 4.14.1, at public/css/broadcaster.css

492 lines 11.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /*
2 * Broadcaster ("go live" in-browser) page styles.
3 *
4 * Chrome for the WebRTC/WHIP browser-broadcasting page: full-bleed body reset,
5 * page header/logo/nav, the local video preview and live badge, the control
6 * buttons (start/stop), the status indicator dots, the settings panel
7 * (bitrate/device selectors), info/error/success message banners, connection
8 * stats, and the mobile video expand/collapse behaviour.
9 */
10
11 /* Additional styles for the broadcaster */
12 /* Remove the admin-bar top offset WordPress would otherwise add. */
13 html {
14 margin-top: 0 !important;
15 }
16
17 /* Page background. */
18 body {
19 background: #F8F8F8;
20 }
21
22 /* Broadcaster page body: system font stack, neutral background, side padding. */
23 body.wpstream-broadcaster-page {
24 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
25 background-color: #F8F8F8;
26 margin: 0;
27 color: #333;
28 padding: 0 15px;
29 }
30
31 /* Hide the WordPress admin bar on the broadcaster page. */
32 body.wpstream-broadcaster-page #wpadminbar {
33 display: none;
34 }
35
36 /* Style for the header */
37 /* Sticky-style page header bar with a subtle drop shadow. */
38 .broadcaster-header {
39 background-color: #f8f9fa!important;
40 box-shadow: 0px 3px 3px rgba(0, 0, 0, 0.05);
41 padding: 10px 0;
42 top: 0;
43 left: 0;
44 right: 0;
45 z-index: 100;
46 }
47
48 /* Header inner row: logo on the left, nav on the right, vertically centred. */
49 .header-container {
50 display: flex;
51 justify-content: space-between;
52 align-items: center;
53 margin: 0 auto;
54 padding: 0 20px;
55 }
56
57 /* Logo cell padding. */
58 .header-logo {
59 padding: .3125rem 0;
60 }
61
62 /* Logo image keeps its intrinsic aspect ratio. */
63 .header-logo img {
64 width: auto;
65 }
66
67 /* Header navigation cluster. */
68 .header-nav {
69 display: flex;
70 align-items: center;
71 }
72
73 /* Individual nav link styling. */
74 .nav-item {
75 font-size: 16px;
76 font-weight: 500;
77 color: #333;
78 }
79
80 /* Centred container for status/notice messages under the header. */
81 #messageContainer {
82 display: flex;
83 margin-top: 1rem;
84 justify-content: center;
85 }
86
87 /* Adjust the main container to account for the fixed header */
88 .broadcaster-container {
89 margin-top: 70px;
90 }
91
92 /* Style for the main broadcaster container */
93 /* Centred, max-width page content wrapper. */
94 .broadcaster-container {
95 max-width: 1500px;
96 margin: 0 auto;
97 padding: 20px;
98 }
99
100 /* "LIVE" badge overlay anchored to the top-left of the video preview. */
101 .broadcaster-container .video-live-indicator {
102 position: absolute;
103 top: 0.5em;
104 left: 1.5em;
105 opacity: 90%;
106 z-index: 3;
107 }
108
109 /* Base pill/badge styling for the live indicator. */
110 .broadcaster-container .video-live-indicator .badge {
111 display: inline-block;
112 padding: .25em .4em;
113 font-size: 75%;
114 font-weight: 700;
115 line-height: 1;
116 text-align: center;
117 white-space: nowrap;
118 vertical-align: baseline;
119 border-radius: .25rem;
120 transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
121 }
122
123 /* Rounded pill variant of the badge. */
124 .broadcaster-container .video-live-indicator .badge.badge-pill {
125 padding-right: .6em;
126 padding-left: .6em;
127 border-radius: 10rem;
128 }
129
130 /* Danger (live) badge: red. */
131 .broadcaster-container .video-live-indicator .badge.badge-danger {
132 color: #fff;
133 background-color: #d63638;
134 }
135
136 /* Warning (connecting) badge: amber. */
137 .broadcaster-container .video-live-indicator .badge.badge-warning {
138 color: #212529;
139 background-color: #ffc107;
140 }
141
142 /* Video preview box: relative host for overlays, clipped rounded corners. */
143 .video-container {
144 flex: 2;
145 position: relative;
146 width: 100%;
147 height: auto;
148 background-color: #EEEEEE;
149 margin-bottom: 20px;
150 border-radius: 4px;
151 overflow: hidden;
152 }
153
154 /* Small screens: stack and cap the preview height. */
155 @media screen and (max-width: 600px) {
156 .video-container {
157 display: flex;
158 flex-direction: column;
159 justify-content: center;
160 max-height: 60vh;
161 }
162 }
163
164 /* The actual <video> element showing the local camera feed. */
165 #localVideo {
166 position: relative;
167 z-index: 2;
168 width: 100%;
169 background-color: #EEEEEE;
170 }
171
172 /* Row of broadcast control buttons; wraps on narrow widths. */
173 .controls-container {
174 display: flex;
175 flex-wrap: wrap;
176 gap: 15px;
177 margin-bottom: 20px;
178 }
179
180 /* Base button styling. */
181 .button {
182 background-color: #2271b1;
183 border: none;
184 color: white;
185 padding: 10px 20px;
186 text-align: center;
187 text-decoration: none;
188 display: inline-block;
189 font-size: 16px;
190 margin: 4px 2px;
191 cursor: pointer;
192 border-radius: 4px;
193 transition: background-color 0.3s;
194 }
195
196 /* Button hover: darker blue. */
197 .button:hover {
198 background-color: #135e96;
199 }
200
201 /* Full-width "Start broadcast" primary button. */
202 .button.start-broadcast {
203 background-color: #066AA6;
204 width: 100%;
205 }
206
207 /* Full-width "Stop broadcast" button (dark). */
208 .button.stop-broadcast {
209 background-color: #2c3338;
210 width: 100%;
211 }
212
213 /* Status panel: hidden until broadcasting begins. */
214 .status-container {
215 display: none;
216 padding: 15px;
217 background-color: #fff;
218 border-radius: 4px;
219 margin-bottom: 20px;
220 box-shadow: 0 1px 3px rgba(0,0,0,0.1);
221 }
222
223 /* Two-column wrapper (video + settings); collapses on tablet widths. */
224 .wrapper {
225 display: flex;
226 gap: 15px;
227 }
228
229 /* Tablet and below: stack the wrapper columns. */
230 @media screen and (max-width: 768px) {
231 .wrapper {
232 flex-direction: column;
233 }
234 }
235
236 /* Connection status dot: grey by default. */
237 .status-indicator {
238 display: inline-block;
239 width: 12px;
240 height: 12px;
241 border-radius: 50%;
242 margin-right: 8px;
243 background-color: #ccc;
244 }
245
246 /* Connected: green dot. */
247 .status-indicator.connected {
248 background-color: #00a32a;
249 }
250
251 /* Disconnected: red dot. */
252 .status-indicator.disconnected {
253 background-color: #d63638;
254 }
255
256 /* Connecting: amber dot. */
257 .status-indicator.connecting {
258 background-color: #f0c33c;
259 }
260
261 /* Settings side panel container. */
262 .settings-panel {
263 flex: 1;
264 background-color: #fff;
265 border-radius: 4px;
266 padding: 15px;
267 margin-bottom: 20px;
268 box-shadow: 0 1px 3px rgba(0,0,0,0.1);
269 }
270
271 /* A row of settings groups; wraps and gaps between them. */
272 .settings-row {
273 display: flex;
274 flex-wrap: wrap;
275 gap: 20px;
276 margin-bottom: 15px;
277 }
278
279 /* Horizontal input + suffix grouping (e.g. bitrate + unit). */
280 .settings-row .settings-group .input-group {
281 display: flex;
282 flex-direction: row;
283 align-items: center;
284 }
285
286 /* Square off the audio-bitrate input's right corners to join its suffix. */
287 .settings-row .settings-group .input-group #audioBitrate {
288 border-top-right-radius: 0;
289 border-bottom-right-radius: 0;
290 }
291
292 /* Inputs inside an input-group flex to fill available width. */
293 .settings-row .settings-group .input-group input {
294 flex: 1;
295 font-size: 1rem;
296 }
297
298 /* Media (device) selection row stacks vertically. */
299 .settings-row.media-row {
300 display: flex;
301 flex-direction: column;
302 gap: 10px;
303 }
304
305 /* Static unit/suffix appended to an input (e.g. "kbps"). */
306 .settings-row .settings-group .input-group .input-suffix {
307 background-color: #e9ecef;
308 padding: .375rem .75rem;
309 border: 1px solid #ced4da;
310 border-radius: .25rem;
311 font-size: 1rem;
312 border-top-left-radius: 0;
313 border-bottom-left-radius: 0;
314 border-left: 0;
315 }
316
317 /* A single settings group cell. */
318 .settings-group {
319 flex: 1;
320 /*min-width: 250px;*/
321 }
322
323 /* Settings group label. */
324 .settings-group label {
325 display: block;
326 margin-bottom: 5px;
327 font-weight: 500;
328 font-size: 1rem;
329 }
330
331 /* Inline group of small control buttons within a settings group. */
332 .settings-group .controls-group {
333 display: flex;
334 gap: 10px;
335 }
336
337 /* Those small control buttons: light, bordered, rounded. */
338 .settings-group .controls-group button {
339 background: #FFFFFF;
340 border: 1px solid #B2B3B5;
341 box-sizing: border-box;
342 border-radius: 6px;
343 }
344
345 /* Utility: fully hide an element. */
346 .hidden {
347 display: none;
348 }
349
350 /* Info banner: blue, left-accented. */
351 .info-message {
352 color: #0056b3;
353 background-color: #e9f5ff;
354 padding: 10px;
355 border-left: 4px solid #0056b3;
356 margin-bottom: 15px;
357 }
358
359 /* Error banner: red, left-accented, constrained width. */
360 .error-message {
361 color: #d63638;
362 background-color: #fcf0f1;
363 padding: 10px;
364 border-left: 4px solid #d63638;
365 margin-bottom: 15px;
366 max-width: 83.33%;
367 flex: 0 0 83.333333%;
368 }
369
370 /* Links inside an error banner keep the red tone, underlined. */
371 .error-message a {
372 color: #d63638;
373 text-decoration: underline;
374 }
375
376 /* Shared layout for info/error banners: relative host with room for the close button. */
377 .info-message,
378 .error-message {
379 position: relative;
380 padding: 1rem;
381 padding-right: 2.5rem; /* Make space for the close button */
382 }
383
384 /* Dismiss (x) button pinned to the right edge of the error banner. */
385 .error-message .dismiss-message {
386 position: absolute;
387 top: 50%;
388 right: 0.5rem;
389 transform: translateY(-50%);
390 background: none;
391 border: none;
392 font-size: 1.5rem;
393 line-height: 1;
394 color: inherit;
395 cursor: pointer;
396 opacity: 0.7;
397 padding: 0.5rem;
398 }
399
400 /* Dismiss button hover: full opacity. */
401 .error-message .dismiss-message:hover {
402 opacity: 1;
403 }
404
405
406 /* Success banner: green, left-accented. */
407 .success-message {
408 color: #00a32a;
409 background-color: #edfaef;
410 padding: 10px;
411 border-left: 4px solid #00a32a;
412 margin-bottom: 15px;
413 }
414
415 /* Connection statistics list (bitrate, resolution, etc.). */
416 .stats-container {
417 display: flex;
418 flex-direction: column;
419 gap: 10px;
420 font-size: 14px;
421 }
422
423 /* One stat pill. */
424 .stat-item {
425 background-color: #f0f0f1;
426 padding: 5px 10px;
427 border-radius: 4px;
428 }
429
430 /* Device/quality <select> dropdowns in the settings panel. */
431 .settings-group select {
432 color: #495057;
433 width: 100%;
434 padding: 8px 12px;
435 border-radius: 4px;
436 border: 1px solid #ccc;
437 background-color: #fff;
438 font-size: 1rem;
439 appearance: menulist;
440 background-image: none;
441 -webkit-appearance: menulist;
442 }
443
444 /* Focused select: blue outline ring. */
445 .settings-group select:focus {
446 outline: none;
447 border-color: #2271b1;
448 box-shadow: 0 0 0 1px #2271b1;
449 }
450
451 /* Code to expand portrait video on mobile */
452 /* Disabled select: greyed and non-interactive. */
453 .settings-group select:disabled {
454 background-color: #f0f0f1;
455 cursor: not-allowed;
456 opacity: 0.7;
457 }
458
459 /* Mobile Expand/Collapse Button */
460 /* Overlay toggle to expand the video preview; hidden on desktop. */
461 .video-expand-toggle {
462 display: none;
463 position: absolute;
464 top: 10px;
465 right: 10px;
466 z-index: 10;
467 background: rgba(0, 0, 0, 0.5);
468 border: none;
469 border-radius: 4px;
470 color: white;
471 padding: 6px;
472 cursor: pointer;
473 line-height: 0;
474 transition: background 0.3s;
475 }
476
477 /* Expand toggle hover: darker background. */
478 .video-expand-toggle:hover {
479 background: rgba(0, 0, 0, 0.8);
480 }
481
482 /* Small screens: show the expand toggle and allow the video to grow when expanded. */
483 @media screen and (max-width: 600px) {
484 .video-expand-toggle {
485 display: block;
486 }
487
488 .video-container.expanded {
489 max-height: none !important;
490 height: auto;
491 }
492 }