1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 /*@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");*/
6 @namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
7 @namespace html url("http://www.w3.org/1999/xhtml");
11 background-color: rgba(156,156,255,0.75);
14 xul|button.playButton,
15 xul|button.muteButton,
16 xul|button.closedCaptionButton,
17 xul|button.fullscreenButton {
18 background-color: transparent;
19 background-repeat: no-repeat;
20 background-position: center;
28 xul|button.playButton:hover,
29 xul|button.muteButton:not([noAudio]):hover,
30 xul|button.closedCaptionButton:hover,
31 xul|button.fullscreenButton:hover {
32 background-color: rgba(255,207,0,0.75);
35 xul|button.playButton:hover:active,
36 xul|button.muteButton:not([noAudio]):hover:active,
37 xul|button.closedCaptionButton:hover:active,
38 xul|button.fullscreenButton:hover:active {
39 background-color: rgba(255,159,0,0.75);
42 xul|button.playButton {
43 background-image: url("chrome://global/skin/media/pauseButton.png");
44 margin-right: -22px; /* 1/2 of scrubber thumb width, for overhang. */
45 position: relative; /* Trick to work around negative margin interfering with clicking on the button. */
48 xul|button.playButton:hover {
49 background-image: url("chrome://global/skin/media/pauseButton-hover.png");
52 xul|button.playButton[paused] {
53 background-image: url("chrome://global/skin/media/playButton.png");
56 xul|button.playButton[paused]:hover {
57 background-image: url("chrome://global/skin/media/playButton-hover.png");
60 xul|button.muteButton {
61 background-image: url("chrome://global/skin/media/muteButton.png");
65 xul|button.muteButton:hover {
66 background-image: url("chrome://global/skin/media/muteButton-hover.png");
69 xul|button.muteButton[muted] {
70 background-image: url("chrome://global/skin/media/unmuteButton.png");
73 xul|button.muteButton[muted]:hover {
74 background-image: url("chrome://global/skin/media/unmuteButton-hover.png");
77 xul|button.muteButton[noAudio] {
78 background-image: url("chrome://global/skin/media/noAudio.png");
81 xul|button.muteButton[noAudio] + .volumeStack {
85 xul|button.closedCaptionButton {
86 background-image: url("chrome://global/skin/media/closeCaptionButton.png");
87 background-position: 4px;
90 xul|button.closedCaptionButton:hover {
91 background-image: url("chrome://global/skin/media/closeCaptionButton-hover.png");
94 xul|button.closedCaptionButton[enabled] {
98 xul|button.closedCaptionButton[hidden] {
102 xul|button.fullscreenButton {
103 background-image: -moz-image-rect(url("chrome://global/skin/media/fullscreenButton.png"), 0, 16, 16, 0);
106 xul|button.fullscreenButton:hover {
107 background-image: -moz-image-rect(url("chrome://global/skin/media/fullscreenButton-hover.png"), 0, 16, 16, 0);
110 xul|button.fullscreenButton[fullscreened] {
111 background-image: -moz-image-rect(url("chrome://global/skin/media/fullscreenButton.png"), 0, 32, 16, 16);
114 xul|button.fullscreenButton[fullscreened]:hover {
115 background-image: -moz-image-rect(url("chrome://global/skin/media/fullscreenButton-hover.png"), 0, 32, 16, 16);
118 xul|*.volumeControl {
123 xul|*.volumeBackground,
124 xul|*.volumeForeground {
125 background-repeat: no-repeat;
126 background-position: center;
130 xul|*.volumeBackground {
131 background-image: url("chrome://global/skin/media/volume-empty.png");
134 xul|*.volumeForeground {
135 background-image: url("chrome://global/skin/media/volume-full.png");
136 background-clip: content-box;
139 xul|*.textTrackList {
141 -moz-appearance: none;
147 xul|*.textTrackList[hidden] {
151 xul|*.textTrackList > html|*.textTrackItem {
152 -moz-appearance: none;
153 -moz-box-align: start;
158 -moz-margin-end: 10px;
160 color: rgba(255,255,255,.5);
161 background-color: rgba(35,31,32,.74);
165 xul|*.textTrackList > html|*.textTrackItem[on] {
167 background-color: black;
170 xul|*.textTrackList > html|*.textTrackItem:hover {
171 background-color: rgba(0,0,0,.55);
174 xul|*.controlBar[fullscreen-unavailable] {
175 /* This value is duplicated in the videocontrols.xml adjustControlSize function. */
176 padding-inline-end: 8px;
179 xul|*.volumeControl .scale-thumb {
185 -moz-box-pack: center;
188 xul|*.durationLabel {
189 margin-left: -22px; /* 1/2 of scrubber thumb width, for overhang. */
190 padding-left: 8px; /* don't bump into the scrubber bar */
191 padding-top: 0px; /* center vertically with scrubber bar */
192 color: rgba(0,0,0,0.75);
193 font-family: "Liberation Sans",Arial,Tahoma,Helvetica,sans-serif;
197 xul|*.positionLabel {
201 xul|*.backgroundBar {
202 /* margin top/bottom: make bar 8px tall (control height = 28, minus 2 * 10 margin) */
203 /* margin left/right: 1/2 of scrubber thumb width, for overhang. */
205 background-color: rgba(0,0,0,0.75);
206 border-radius: 2.5px;
211 /* margin top/bottom: make bar 8px tall (control height = 28, minus 2 * 10 margin) */
212 /* margin left/right: 1/2 of scrubber thumb width, for overhang. */
215 background-color: transparent;
220 /* .progress-bar is an element inside the <progressmeter> implementation. */
221 xul|*.bufferBar .progress-bar {
223 * Note that this is drawn on top of the .backgroundBar. So although this
224 * has the same background-color specified, the semitransparent
225 * compositing gives it a different visual appearance.
227 background-color: rgba(255,159,0,0.75);
228 border-radius: 2.5px;
229 -moz-appearance: none;
232 xul|*.progressBar .progress-bar {
233 background-color: #008484;
234 border-radius: 2.5px;
235 -moz-appearance: none;
238 /* .scale-slider is an element inside the <scale> implementation. */
239 xul|*.scrubber .scale-slider,
240 xul|*.volumeControl .scale-slider {
241 /* Hide the default horizontal bar. */
246 xul|*.scrubber .scale-slider {
247 /* abs(margin-top) + margin-bottom + bar height == timeThumb height */
252 /* .scale-thumb is an element inside the <scale> implementation. */
253 xul|*.scrubber .scale-thumb,
254 xul|*.volumeControl .scale-thumb {
255 /* Override the default thumb appearance with a custom image. */
256 background: transparent;
257 border: none !important;
261 background: url("chrome://global/skin/media/scrubberThumb.png") no-repeat center;
264 -moz-box-pack: center;
267 xul|*.timeThumb[showhours="true"] {
268 background-image: url("chrome://global/skin/media/scrubberThumbWide.png");
272 .timeThumb:hover, .timeThumb:active {
273 background-image: url("chrome://global/skin/media/scrubberThumb-hover.png");
278 color: rgba(0,0,0,0.75);
280 font-family: "Liberation Sans",Arial,Tahoma,Helvetica,sans-serif;
281 text-shadow: rgba(255,259,0, 0.3) 0 1px;
285 xul|*.statusOverlay {
286 -moz-box-align: center;
287 -moz-box-pack: center;
288 background-color: rgba(0,0,0,0.55);
292 margin-bottom: 28px; /* same height as .controlBar, to keep icon centered above it */
297 xul|*.statusIcon[type="throbber"] {
298 background: url("chrome://communicator/skin/brand/throbber-anim.png") no-repeat center;
301 .statusIcon[type="throbber"][stalled] {
302 background: url("chrome://global/skin/media/stalled.png") no-repeat center;
305 xul|*.statusIcon[type="error"] {
306 background: url("chrome://global/skin/icons/alert-error.gif") no-repeat center;
309 /* Overlay Play button */
313 -moz-box-pack: center;
314 -moz-box-align: center;
316 background-image: url("chrome://global/skin/media/videoClickToPlayButton.svg");
317 background-repeat: no-repeat;
318 background-position: center;
319 background-size: 64px 64px;
320 background-color: hsla(0,0%,10%,.5);
326 /* Statistics formatting */
336 font-family: "Liberation Sans",Arial,Tahoma,Helvetica,sans-serif;
345 background: rgba(68,68,111,.7);
347 border-collapse: collapse;
351 /* CSS Transitions */
353 transition-property: opacity, background-size;
354 transition-duration: 400ms, 400ms;
356 .clickToPlay[fadeout] {
357 background-size: auto, 192px 192px;
360 .clickToPlay[fadeout][immediate] {
361 transition-property: opacity, background-size;
362 transition-duration: 0s, 0s;
364 .controlBar:not([immediate]) {
365 transition-property: opacity;
366 transition-duration: 200ms;
368 .controlBar[fadeout] {
371 .volumeStack:not([immediate]) {
372 transition-property: opacity, margin-top;
373 transition-duration: 200ms, 200ms;
375 .volumeStack[fadeout] {
379 .statusOverlay:not([immediate]) {
380 transition-property: opacity;
381 transition-duration: 300ms;
382 transition-delay: 750ms;
384 .statusOverlay[fadeout] {
388 /* Error description formatting */
390 font-family: "Liberation Sans",Arial,Tahoma,Helvetica,sans-serif;
402 @media (min-resolution: 2dppx) {
404 background-image: url(chrome://global/skin/media/pauseButton@2x.png);
405 background-size: 28px 28px;
408 background-image: url(chrome://global/skin/media/pauseButton-hover@2x.png);
409 background-size: 28px 28px;
411 .playButton[paused] {
412 background-image: url(chrome://global/skin/media/playButton@2x.png);
413 background-size: 28px 28px;
415 .playButton[paused]:hover {
416 background-image: url(chrome://global/skin/media/playButton-hover@2x.png);
417 background-size: 28px 28px;
420 background-image: url(chrome://global/skin/media/volume-empty@2x.png);
421 background-size: 32px 16px;
423 .volumeForeground:hover {
424 background-image: url(chrome://global/skin/media/volume-full-hover@2x.png);
425 background-size: 32px 16px;
428 background-image: url(chrome://global/skin/media/muteButton@2x.png);
429 background-size: 33px 28px;
432 background-image: url(chrome://global/skin/media/muteButton-hover@2x.png);
433 background-size: 33px 28px;
436 background-image: url(chrome://global/skin/media/unmuteButton@2x.png);
437 background-size: 33px 28px;
439 .muteButton[muted]:hover {
440 background-image: url(chrome://global/skin/media/unmuteButton-hover@2x.png);
441 background-size: 33px 28px;
443 .muteButton[noAudio] {
444 background-image: url(chrome://global/skin/media/noAudio@2x.png);
445 background-size: 33px 28px;
447 .closedCaptionButton {
448 background-image: url(chrome://global/skin/media/closeCaptionButton@2x.png);
449 background-position: 4px;
450 background-size: 28px 28px;
452 .closedCaptionButton:hover {
453 background-image: url(chrome://global/skin/media/closeCaptionButton-hover@2x.png);
454 background-position: 4px;
455 background-size: 28px 28px;
458 background-image: -moz-image-rect(url("chrome://global/skin/media/fullscreenButton@2x.png"), 0, 32, 32, 0);
459 background-size: 16px 16px;
461 .fullscreenButton:hover {
462 background-image: -moz-image-rect(url("chrome://global/skin/media/fullscreenButton-hover@2x.png"), 0, 32, 32, 0);
463 background-size: 16px 16px;
465 .fullscreenButton[fullscreened] {
466 background-image: -moz-image-rect(url("chrome://global/skin/media/fullscreenButton@2x.png"), 0, 64, 32, 32);
467 background-size: 16px 16px;
469 .fullscreenButton[fullscreened]:hover {
470 background-image: -moz-image-rect(url("chrome://global/skin/media/fullscreenButton-hover@2x.png"), 0, 64, 32, 32);
471 background-size: 16px 16px;
474 background-image: url(chrome://global/skin/media/scrubberThumb@2x.png);
475 background-size: 33px 28px;
477 .timeThumb[showhours="true"] {
478 background-image: url(chrome://global/skin/media/scrubberThumbWide@2x.png);
479 background-size: 45px 28px;
484 /***** New HTML-based controls *****/
486 /*@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
487 @namespace url("http://www.w3.org/1999/xhtml");*/
489 video > xul|videocontrols,
490 audio > xul|videocontrols {
491 writing-mode: horizontal-tb;
494 /* display: inline-block; --->CRASHES XUL-based versions! */
498 div.controlsContainer [hidden="true"],
499 div.controlBar[hidden] {
503 div.controlBar[size="hidden"] {
507 div.controlsContainer,
508 div.progressContainer {
523 flex-direction: column;
524 justify-content: center;
526 background-color: rgb(160,144,144);
529 div.controlsOverlay {
531 flex-direction: column;
532 justify-content: center;
536 div.controlsSpacerStack {
538 flex-direction: column;
540 justify-content: center;
545 background-color: rgba(0,0,0,.4);
551 justify-content: center;
556 background-color: rgba(156,156,255,0.75);
560 html|button.playButton,
561 html|button.muteButton,
562 html|button.closedCaptionButton,
563 html|button.fullscreenButton {
570 background-color: transparent;
571 background-repeat: no-repeat;
572 background-position: center;
573 background-origin: content-box;
574 background-clip: content-box;
577 html|button.playButton:hover,
578 html|button.muteButton:not([noAudio]):hover,
579 html|button.closedCaptionButton:hover,
580 html|button.fullscreenButton:hover {
581 background-color: rgba(255,207,0,0.75);
584 html|button.playButton:hover:active,
585 html|button.muteButton:not([noAudio]):hover:active,
586 html|button.closedCaptionButton:hover:active,
587 html|button.fullscreenButton:hover:active {
588 background-color: rgba(255,159,0,0.75);
591 html|button.playButton {
592 background-image: url(chrome://global/skin/media/pauseButton.svg#pause);
595 html|butto background-image: url(chrome://global/skin/media/pauseButton.svg#pause-hover);
597 html|button.playButton:hover:active {
598 background-image: url(chrome://global/skin/media/pauseButton.svg#pause-active);
600 html|button.playButton[paused] {
601 background-image: url(chrome://global/skin/media/playButton.svg#play);
603 html|button.playButton[paused]:hover {
604 background-image: url(chrome://global/skin/media/playButton.svg#play-hover);
606 html|button.playButton[paused]:hover:active {
607 background-image: url(chrome://global/skin/media/playButton.svg#play-active);
610 html|button.muteButton {
611 background-image: url(chrome://global/skin/media/muteButton.svg#unmute);
613 html|button.muteButton:hover {
614 background-image: url(chrome://global/skin/media/muteButton.svg#unmute-hover);
616 html|button.muteButton:hover:active {
617 background-image: url(chrome://global/skin/media/muteButton.svg#unmute-active);
619 html|button.muteButton[muted] {
620 background-image: url(chrome://global/skin/media/muteButton.svg#mute);
622 html|button.muteButton[muted]:hover {
623 background-image: url(chrome://global/skin/media/muteButton.svg#mute-hover);
625 html|button.muteButton[muted]:hover:active {
626 background-image: url(chrome://global/skin/media/muteButton.svg#mute-active);
628 html|button.muteButton[noAudio],
629 html|button.muteButton[noAudio]:hover,
630 html|button.muteButton[noAudio]:hover:active {
631 background-image: url(chrome://global/skin/media/muteButton.svg#noaudio);
633 html|button.muteButton[noAudio] + .volumeStack {
637 html|button.closedCaptionButton {
638 background-image: url(chrome://global/skin/media/closedCaptionButton.svg#cc-off);
640 html|button.closedCaptionButton:hover {
641 background-image: url(chrome://global/skin/media/closedCaptionButton.svg#cc-off-hover);
643 html|button.closedCaptionButton:hover:active {
644 background-image: url(chrome://global/skin/media/closedCaptionButton.svg#cc-off-active);
646 html|button.closedCaptionButton[enabled] {
647 background-image: url(chrome://global/skin/media/closedCaptionButton.svg#cc);
649 html|button.closedCaptionButton[enabled]:hover {
650 background-image: url(chrome://global/skin/media/closedCaptionButton.svg#cc-hover);
652 html|button.closedCaptionButton[enabled]:hover:active {
653 background-image: url(chrome://global/skin/media/closedCaptionButton.svg#cc-active);
656 html|button.fullscreenButton {
657 background-image: url(chrome://global/skin/media/fullscreenButton.svg#fullscreen);
659 html|button.fullscreenButton:hover {
660 background-image: url(chrome://global/skin/media/fullscreenButton.svg#fullscreen-hover);
662 html|button.fullscreenButton:hover:active {
663 background-image: url(chrome://global/skin/media/fullscreenButton.svg#fullscreen-active);
665 html|button.fullscreenButton[fullscreened] {
666 background-image: url(chrome://global/skin/media/fullscreenButton.svg#unfullscreen);
668 html|button.fullscreenButton[fullscreened]:hover {
669 background-image: url(chrome://global/skin/media/fullscreenButton.svg#unfullscreen-hover);
671 html|button.fullscreenButton[fullscreened]:hover:active {
672 background-image: url(chrome://global/skin/media/fullscreenButton.svg#unfullscreen-active);
675 div.controlBarSpacer {
679 input.volumeControl::-moz-range-thumb,
680 input.scrubber::-moz-range-thumb {
685 background-color: #000000;
688 input.volumeControl::-moz-focus-outer,
689 input.scrubber::-moz-focus-outer {
693 div.progressBackgroundBar {
695 flex-direction: column;
696 justify-content: center;
724 progress.progressBar,
727 input.volumeControl {
735 border-radius: 2.5px;
738 background-color: transparent;
743 background-color: rgba(160,144,144,0.7);
746 progress.bufferBar::-moz-progress-bar,
747 progress.progressBar::-moz-progress-bar,
748 .volumeBackground::-moz-meter-bar {
753 border-radius: 2.5px;
757 input.scrubber:hover::-moz-range-thumb,
758 input.volumeControl:hover::-moz-range-thumb {
759 background-color: #FFCF00;
762 input.scrubber:active::-moz-range-thumb,
763 input.volumeControl:active::-moz-range-thumb {
764 background-color: #FF9F00;
767 input.scrubber::-moz-range-track,
768 input.scrubber::-moz-range-progress {
769 background-color: transparent;
772 input.volumeControl::-moz-range-progress,
773 input.volumeControl::-moz-range-track {
775 border-radius: 2.5px;
778 input.volumeControl::-moz-range-progress {
779 background-color: #008484;
782 input.volumeControl::-moz-range-track {
783 background-color: rgba(0,0,0,0.7);
787 progress.bufferBar::-moz-progress-bar {
788 background-color: rgba(160,144,144,0.3);
789 border-radius: 2.5px;
792 progress.progressBar::-moz-progress-bar {
793 background-color: #008484;
801 border: 1px solid #000000;
802 border-radius: 2.5px;
804 vertical-align: middle;
806 background-color: #000000;
810 .textTrackList > .textTrackItem {
820 text-overflow: ellipsis;
822 background-color: transparent;
825 .textTrackList > .textTrackItem:hover {
826 background-color: #FFCF00;
829 .textTrackList > .textTrackItem[on] {
838 span.positionDurationBox {
841 padding-inline-start: 1px;
842 padding-inline-end: 9px;
846 font-size-adjust: 0.6;
850 span.positionDurationBox[positionOnly] {
855 display: inline-block;
866 .statusIcon[type="throbber"] {
867 background: url("chrome://communicator/skin/brand/throbber-anim.png") no-repeat center;
870 .statusIcon[type="throbber"][stalled] {
871 background: url("chrome://global/skin/media/stalled.png") no-repeat center;
874 .statusIcon[type="error"] {
877 background: url("chrome://global/skin/icons/alert-error.gif") no-repeat center;
878 background-size: contain;
881 /* Overlay Play button */
886 background-image: url(chrome://global/skin/media/playButton.svg#play);
887 background-repeat: no-repeat;
888 background-position: 54% 50%;
889 background-size: 40% 40%;
890 background-color: #000000;
896 .controlsSpacerStack:hover > .clickToPlay,
901 .controlsSpacerStack:hover > .clickToPlay[fadeout] {
905 .controlBar[fullscreen-unavailable] .fullscreenButton {
909 /* CSS Transitions */
911 transition-property: transform, opacity;
912 transition-duration: 400ms, 400ms;
915 .controlsSpacer[fadeout] {
919 .clickToPlay[fadeout] {
924 .clickToPlay[fadeout][immediate] {
925 transition-property: opacity, background-size;
926 transition-duration: 0s, 0s;
928 .controlBar:not([immediate]) {
929 transition-property: opacity;
930 transition-duration: 200ms;
932 .controlBar[fadeout] {
935 .volumeStack:not([immediate]) {
936 transition-property: opacity, margin-top;
937 transition-duration: 200ms, 200ms;
939 .statusOverlay:not([immediate]) {
940 transition-property: opacity;
941 transition-duration: 300ms;
942 transition-delay: 750ms;
944 .statusOverlay[fadeout] {
948 /* Error description formatting */
952 font-family: "Liberation Sans",Arial,Tahoma,Helvetica,sans-serif;
961 [error="errorAborted"] > [anonid="errorAborted"],
962 [error="errorNetwork"] > [anonid="errorNetwork"],
963 [error="errorDecode"] > [anonid="errorDecode"],
964 [error="errorSrcNotSupported"] > [anonid="errorSrcNotSupported"],
965 [error="errorNoSource"] > [anonid="errorNoSource"],
966 [error="errorGeneric"] > [anonid="errorGeneric"] {