3 @import './_player-variables';
6 --embedForegroundColor: #{$primary-foreground-color};
8 --embedBigPlayBackgroundColor: #{$primary-background-color};
11 @mixin big-play-button-triangle-size($triangle-size) {
12 width: $triangle-size;
13 height: $triangle-size;
14 top: calc(50% - #{$triangle-size / 2});
15 left: calc(53% - #{($triangle-size / 2)});
18 .video-js.vjs-peertube-skin {
19 font-size: $font-size;
20 color: var(--embedForegroundColor);
26 .vjs-dock-description {
29 .text::before, .text::after {
30 display: inline-block;
40 transform: scale(-1, 1);
44 .vjs-button > .vjs-icon-placeholder::before {
45 line-height: $control-bar-height;
48 .vjs-volume-level::before {
49 content: ''; /* Remove Circle From Progress Bar */
56 .vjs-big-play-button {
60 $big-play-width: 1.2em;
61 $big-play-height: 1.2em;
63 border: 4px solid #fff;
68 width: $big-play-width;
69 height: $big-play-height;
70 line-height: $big-play-height;
71 margin-left: -($big-play-width / 2);
72 margin-top: -($big-play-height / 2);
73 transition: 0.4s opacity;
80 .vjs-icon-placeholder::before {
81 @include big-play-button-triangle-size(45px);
84 background-image: url('#{$assets-path}/player/images/big-play-button.svg');
92 // Small effect when we click on the play button
93 &.vjs-has-big-play-button-clicked {
95 .vjs-big-play-button, .vjs-poster {
99 &.vjs-big-play-button, &.vjs-big-play-button::before {
101 transition: visibility 0.2s, opacity 0.2s;
104 &.vjs-poster, &.vjs-poster::before {
106 transition: visibility 0.3s, opacity 0.3s;
107 transition-delay: 0.05s;
112 // Hide the big play button on autoplay
114 .vjs-big-play-button {
115 display: none !important;
120 .vjs-big-play-button,
121 .vjs-settings-dialog {
122 background-color: var(--embedBigPlayBackgroundColor);
126 outline: none; /* Remove Blue Outline on Click*/
131 height: $control-bar-height;
132 background: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.6));
133 box-shadow: 0 -15px 40px 10px rgba(0, 0, 0, 0.2);
134 text-shadow: 0 0 2px rgba(0, 0, 0, 0.5);
136 .vjs-progress-control,
141 .vjs-resolution-control,
142 .vjs-fullscreen-control,
144 .vjs-theater-control,
147 color: var(--embedForegroundColor) !important;
149 opacity: $primary-foreground-opacity;
150 transition: opacity .1s;
153 opacity: $primary-foreground-opacity-hover;
160 color: var(--embedForegroundColor);
161 opacity: $primary-foreground-opacity;
164 .vjs-progress-control {
166 z-index: 100; // On top of the progress bar
168 width: calc(100% - (2 * #{$progress-margin}));
169 margin-left: $progress-margin;
175 background-color: rgba(255, 255, 255, .2);
180 background: var(--embedForegroundColor);
182 // Not display the circle if the progress is not hovered
185 transition: opacity 0.1s ease;
198 background: rgba(255, 255, 255, .2);
204 .vjs-progress-control:hover .vjs-slider,
205 .vjs-progress-control .vjs-slider.vjs-sliding {
208 .vjs-play-progress::before {
215 @include disable-outline;
218 font-size: $font-size;
223 line-height: inherit;
226 font-size: $font-size;
227 display: inline-block;
230 .vjs-current-time-display {
231 line-height: calc(#{$control-bar-height} + 1px);
241 font-size: $font-size;
242 display: inline-block;
244 .vjs-duration-display {
245 line-height: calc(#{$control-bar-height} + 1px);
249 &.vjs-remaining-time {
256 line-height: $control-bar-height;
259 .vjs-peertube-displayed {
263 .vjs-peertube-hidden {
267 .download-speed-number, .upload-speed-number, .peers-number, .http-fallback {
268 font-weight: $font-semibold;
271 .download-speed-text, .upload-speed-text, .peers-text, .http-fallback {
276 display: inline-block;
279 background-size: contain;
280 vertical-align: middle;
281 background-repeat: no-repeat;
287 background-image: url('#{$assets-path}/player/images/arrow-down.svg');
291 background-image: url('#{$assets-path}/player/images/arrow-up.svg');
298 width: 37px !important;
300 .vjs-playback-rate-value {
302 line-height: $control-bar-height;
305 .vjs-menu .vjs-menu-content {
306 width: 37px !important;
311 @include disable-outline;
313 line-height: $control-bar-height;
317 .vjs-icon-placeholder {
318 display: inline-block;
321 vertical-align: middle;
322 background: url('#{$assets-path}/player/images/volume.svg') no-repeat;
323 background-size: contain;
330 &.vjs-vol-0 .vjs-icon-placeholder {
331 background: url('#{$assets-path}/player/images/volume-mute.svg') no-repeat;
332 background-size: contain;
336 .vjs-volume-control {
342 background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAcCAQAAACw95UnAAAAMElEQVRIx2NgoBL4n4YKGUYNHkEG4zJg1OCRYDCpBowaPJwMppbLRg0eNXjUYBLEAXWNUA6QNm1lAAAAAElFTkSuQmCC) no-repeat;
343 background-size: 22px 14px;
353 background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAcAQAAAAAyhWABAAAAAnRSTlMAAHaTzTgAAAAZSURBVHgBYwAB/g9EUv+JokCqiaT+U4MCAPKPS7WUUOc1AAAAAElFTkSuQmCC) no-repeat;
354 background-size: 22px 14px;
366 .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,
367 .vjs-volume-panel.vjs-volume-panel-horizontal:active,
368 .vjs-volume-panel.vjs-volume-panel-horizontal:focus,
369 .vjs-volume-panel.vjs-volume-panel-horizontal:hover {
371 transition-property: none;
374 .vjs-volume-panel .vjs-mute-control:hover ~ .vjs-volume-control.vjs-volume-horizontal {
379 .vjs-volume-panel .vjs-mute-control:hover ~ .vjs-volume-control {
380 transition-property: none;
390 .vjs-volume-control {
391 display: inline-block;
401 @include disable-outline;
402 @include disable-default-a-behaviour;
404 text-decoration: none;
405 line-height: $control-bar-height;
406 font-weight: $font-semibold;
410 .vjs-theater-control {
411 @include disable-outline;
417 .vjs-icon-placeholder {
418 transition: transform 0.2s ease;
419 display: inline-block;
422 vertical-align: middle;
423 background: url('#{$assets-path}/player/images/theater.svg') no-repeat;
424 background-size: contain;
432 .vjs-fullscreen-control {
433 @include disable-outline;
438 .vjs-icon-placeholder {
439 display: inline-block;
442 vertical-align: middle;
443 background: url('#{$assets-path}/player/images/fullscreen.svg') no-repeat;
444 background-size: contain;
452 .vjs-menu-button-popup {
453 font-weight: $font-semibold;
456 .vjs-resolution-button {
457 @include disable-outline;
470 text-transform: none;
477 @media screen and (max-width: 750px) {
478 .vjs-theater-control {
486 .vjs-dock-description {
490 .vjs-big-play-button {
494 .vjs-icon-placeholder::before {
495 @include big-play-button-triangle-size(32px);
500 @media screen and (max-width: 570px) {
505 .vjs-big-play-button {
509 .vjs-icon-placeholder::before {
510 @include big-play-button-triangle-size(27px);
515 padding: 0 !important;
517 .vjs-peertube-displayed {
518 display: none !important;
523 @media screen and (max-width: 300px) {
528 .vjs-big-play-button {
532 .vjs-icon-placeholder::before {
533 @include big-play-button-triangle-size(20px);
537 .vjs-volume-control {
538 display: none !important;
542 padding: 0 !important;
550 // Theater mode is enabled
551 &.vjs-theater-enabled {
552 .vjs-theater-control {
555 .vjs-icon-placeholder {
556 transform: scale(0.8);
561 // On fullscreen, hide theater control
563 .vjs-theater-control {
569 // Play/pause animations
570 .vjs-has-started .vjs-play-control {
572 animation: remove-pause-button 0.25s ease;
576 animation: add-play-button 0.25s ease;
579 @keyframes remove-pause-button {
581 transform: rotate(90deg);
584 transform: rotate(0deg);
588 @keyframes add-play-button {
590 transform: rotate(-90deg);
593 transform: rotate(0deg);
598 // Error display disabled
599 .vjs-error:not(.vjs-error-display-enabled) {
604 .vjs-loading-spinner {
609 // Error display enabled
610 .vjs-error.vjs-error-display-enabled {