diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 8bd7f27..5d6333b 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -2579,9 +2579,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001239", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz", - "integrity": "sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==", + "version": "1.0.30001466", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001466.tgz", + "integrity": "sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w==", "dev": true }, "caseless": { diff --git a/static/css/_commons.css b/static/css/_commons.css index c153d52..bf9463f 100644 --- a/static/css/_commons.css +++ b/static/css/_commons.css @@ -1,13 +1,13 @@ -@font-face{font-family:MediaCmsVideoJsIcons;src:url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAT4AAsAAAAACMQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPAAAAFY6l0dNY21hcAAAAYAAAABqAAABxPJEI45nbHlmAAAB7AAAANIAAAG4T61UQGhlYWQAAALAAAAALgAAADYZHmTsaGhlYQAAAvAAAAAYAAAAJABcADlobXR4AAADCAAAAA4AAAAgAVAAAGxvY2EAAAMYAAAAEgAAABIBvAEqbWF4cAAAAywAAAAfAAAAIAEVAExuYW1lAAADTAAAAUkAAAKmImr7xXBvc3QAAASYAAAAXwAAAIf4no6XeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGTQYpzAwMrAwCDHoAgk2aC0OAMTAw8DkGBlZsAKAtJcUxgcPjJ+ZGcwAHJZwCQDAyOIAADEDQVjeJztkUEKxEAIBGsyZoSwT1n2QTnlkP/DvGBi6z4jQrXYiIcW2IEefAODdtFQneG29DtH+sYvd0z+9LVCmzRmS91i1+LiwGMcvPVJvf+TK7EiM9wK1HuhX0wrlOrcC/1pjgJ1L/AHpD8V1QAAeJyNkFtvwjAMhe2Y9aJGgFja8gCCNZAweKNcHtC0//+vOAlBDGlIJNEn28cnikOKwtqRpxF9Ep1tl83ZNBfen3744HJ77N1MYd0wc0qZEAFTA+fdb9/0d0rpEAFjDSdH/4JW9AG3z9uzX4jWUn5FJn2Z9LxFg5GyFL2KTPqW1g//pJBqKuPIpDvsKuo+XoEuJ1V1P/ZPjG5JM31jJk+//05l6/7Y1ybbcedQOkFq6vZF/fEDExkMhDljjhg+pxt8augEhshVKBcB6inD467W0Bp+AAB4nGNgZGBgAOJNl8rq4vltvjJwMxgARRjuvJp8Gplm0GbQBJIcDEwgDgBWfAr7AAB4nGNgZGBgMGBggJPaDIwMqIADAA4RAJZ4nGNgAAID3BgAE9ABUQAAAAAAAAAgAEAAUABgAHAAigDcAAB4nGNgZGBg4GBwYGBmAAEmIOYCQgaG/2A+AwAPpwFiAHicjZJNasJAGIbf1J9ShVJo6aabWYlQSNSldCcoCnbhIvuYTDSSZMJkFDxE79Bz9AClJ+hxSl+nsym4cAKT53u+n4RkANzhEx5Oy8OD3U/rCteM/rhBenLcJAeOW+hi4rhN/+q4g2esHXdxjzdO8Jo3NH28O77CLb4cN+i/HTfJP45bePR6jtvoey+OOwi9xHEXPe9jKZMsmhR1mCVSLep5rMp6JTf7PNLnUudcKHWdqVIM/cG59EyWUkdGJmJ9FPVhMzImFalWhZiq0sg8V6LSaidj42+NqcZBkDrvx6rAEhIJMkT8XgVqhOSETmHBaI6YVJJWdBvskbNSX9x1aV1Ip3nPbCwwhI/Bxd0zutJOiGBsj+BfPnKvceBbj2gNUsYpaxRnCUxt76k656VoKpvb0cT0Pra2q8KYpypg5/963z69+AXA8YLbAAAAeJx9x0kKgDAQBdHuOIPDSXKoaL4akERiOxxfceHSWhQ8UvRfyYoTTjnjnAsuuaLaYjT7IvpwOGuZYQTxRefN4aaHuscYIprPHpekNnhkwxI2tO+tHswqLniiGzpGHqcA) format("woff");font-weight:normal;font-style:normal}.vjs-icon-default-view{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.vjs-icon-default-view:before{content:""}.vjs-icon-theater-view{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.vjs-icon-theater-view:before{content:""}.vjs-icon-navigate-before{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.vjs-icon-navigate-before:before{content:""}.vjs-icon-navigate-next{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.vjs-icon-navigate-next:before{content:""}.vjs-icon-done{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.vjs-icon-done:before{content:""}.vjs-icon-close{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.vjs-icon-close:before{content:""}.vjs-icon-closed-caption{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.vjs-icon-closed-caption:before{content:""}@keyframes onHoverFullscreenToggle{50%{font-size:14px;margin-top:-1px}100%{font-size:13px;margin-top:0}}@-webkit-keyframes onHoverFullscreenToggle{50%{font-size:14px;margin-top:-1px}100%{font-size:13px;margin-top:0}}@keyframes onFullscreenHoverFullscreenToggle{50%{font-size:15px;margin-top:1px}100%{font-size:16px;margin-top:0}}@-webkit-keyframes onFullscreenHoverFullscreenToggle{50%{font-size:15px;margin-top:1px}100%{font-size:16px;margin-top:0}}@keyframes onDisplayingActionAnimation{0%{transform:scale(0.5)}10%{opacity:1}100%{opacity:0;transform:scale(1.05)}}@-webkit-keyframes onDisplayingActionAnimation{0%{transform:scale(0.5)}10%{opacity:1}100%{opacity:0;transform:scale(1.05)}}@-webkit-keyframes spinner-linear-spin{to{-webkit-transform:rotate(360deg)}}@keyframes spinner-linear-spin{to{transform:rotate(360deg)}}@-webkit-keyframes spinner-ease-spin{12.5%{-webkit-transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg)}}@keyframes spinner-ease-spin{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(1080deg)}}@-webkit-keyframes spinner-left-spin{0%{-webkit-transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg)}}@keyframes spinner-left-spin{0%{transform:rotate(130deg)}50%{transform:rotate(-5deg)}to{transform:rotate(130deg)}}@-webkit-keyframes spinner-right-spin{0%{-webkit-transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg)}}@keyframes spinner-right-spin{0%{transform:rotate(-130deg)}50%{transform:rotate(5deg)}to{transform:rotate(-130deg)}}@keyframes showPreviewThumb{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes showPreviewThumb{0%{opacity:0}100%{opacity:1}}.video-js.vjs-mediacms .vjs-subtitles-control .vjs-icon-placeholder{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.video-js.vjs-mediacms .vjs-subtitles-control .vjs-icon-placeholder:before{content:""}.video-js.vjs-mediacms .vjs-theater-mode-control .vjs-icon-placeholder{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.video-js.vjs-mediacms .vjs-theater-mode-control .vjs-icon-placeholder:before{content:""}.video-js.vjs-mediacms .vjs-theater-mode .vjs-theater-mode-control .vjs-icon-placeholder:before{content:""}.video-js.vjs-mediacms{font-size:13px;color:#fff;width:100%;height:100%;overflow:hidden;outline-color:rgba(0,0,0,0);outline-color:transparent}.video-js.vjs-mediacms video{width:100%;height:100%;max-width:100%;max-height:100%;outline-color:rgba(0,0,0,0);outline-color:transparent}.video-js.vjs-mediacms.vjs-native-dimensions video{width:auto;height:auto}.video-js.vjs-mediacms.vjs-error .vjs-error-display{display:table;color:#eee;text-shadow:.05em .05em .1em #000}.video-js.vjs-mediacms.vjs-error .vjs-error-display:before,.video-js.vjs-mediacms.vjs-error .vjs-error-display:after{position:absolute;top:50%;left:.25em;display:block;width:52px;height:52px;line-height:52px;margin-top:-26px;text-align:center;font-size:3em}.video-js.vjs-mediacms.vjs-error .vjs-error-display:before{content:"";border-radius:50%;border:4px solid #fff}.video-js.vjs-mediacms.vjs-error .vjs-error-display:after{content:"!"}.video-js.vjs-mediacms.vjs-error .vjs-error-display .vjs-modal-dialog-content{position:relative;display:table-cell;vertical-align:middle;text-align:initial;padding:16px 1em 16px 80px;font-size:1.384615em;word-break:break-all}.video-js.vjs-mediacms .vjs-left-controls,.video-js.vjs-mediacms .vjs-right-controls{position:relative;width:auto;display:inline-block;height:36px;overflow:hidden}.video-js.vjs-mediacms .vjs-right-controls{float:right}.video-js.vjs-mediacms .vjs-subtitles-control{cursor:pointer}.video-js.vjs-mediacms.vjs-subtitles-on .vjs-subtitles-control .vjs-icon-placeholder:after{content:"";display:block;position:absolute;width:45%;left:27.5%;height:.18em;bottom:50%;margin-bottom:-1em;background-color:#093}.video-js.vjs-mediacms.vjs-subtitles-on.vjs-fullscreen .vjs-subtitles-control .vjs-icon-placeholder:after{width:42%;left:29%}.video-js.vjs-mediacms .vjs-text-track-cue>*{color:#fff !important;fill:#fff;background-color:#080808 !important;background-color:rgba(8,8,8,.75) !important;font-family:Roboto,"Arial Unicode Ms",Arial,Helvetica,Verdana,"PT Sans Caption",sans-serif !important}.video-js.vjs-mediacms .vjs-settings-control{font-size:1.375em;cursor:pointer}.video-js.vjs-mediacms .vjs-settings-panel{position:absolute;bottom:30px;right:0;width:23.75em;min-width:210px;display:none;font-size:.8125em;z-index:1}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-panel-title>[role=button]{position:relative}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-panel-title>[role=button]:focus{outline-color:#fff;outline-style:solid;outline-width:1px}.video-js.vjs-mediacms .vjs-settings-panel:focus{outline:0}.video-js.vjs-mediacms .vjs-settings-panel.vjs-visible-panel{display:block}.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-panel-inner{display:block;margin:0 0 1em;padding:.5em 0;border-radius:.2em;background-color:rgba(28,28,28,.9);text-shadow:0 0 2px rgba(0,0,0,.5);max-height:210px;max-height:50vh;overflow:auto}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-panel-title{color:#eee;padding-bottom:.25em;margin-bottom:.5em;border-bottom:1px solid rgba(255,255,255,.2)}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-panel-title>*:first-child{display:inline-block;padding:.75em 1em;font-size:118%;font-weight:500}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-panel-title>*:first-child[role=button]{padding:.5em 1em .5em 0;margin-left:.75em;margin-bottom:.25em .25em .5em}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-panel-title.vjs-settings-back>*:first-child{cursor:pointer}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-panel-title.vjs-settings-back>*:first-child:before{content:"";font-family:"MediaCmsVideoJsIcons";font-size:1.25em;vertical-align:text-bottom;padding-right:.5em}.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu{display:table;width:100%}.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item{position:relative;display:table-row;width:100%;cursor:pointer;height:3em}.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item:hover,.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item:focus{outline:0;background-color:rgba(255,255,255,.1)}.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item.vjs-selected-quality,.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item.vjs-selected-speed{position:relative}.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item.vjs-selected-quality .vjs-setting-menu-item-content:after,.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item.vjs-selected-speed .vjs-setting-menu-item-content:after{content:"";font-family:"MediaCmsVideoJsIcons";font-size:1.25em;font-weight:normal;vertical-align:text-bottom;padding-left:.5em}.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item.vjs-selected-quality .vjs-setting-menu-item-content .auto-resolution-title,.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item.vjs-selected-speed .vjs-setting-menu-item-content .auto-resolution-title{font-weight:lighter;color:#eee}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-menu-item-label,.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-menu-item-content{display:table-cell;vertical-align:middle;padding:0 1em;line-height:1;font-size:118%}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-menu-item-label{font-weight:500}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-menu-item-content{text-align:right;font-weight:700}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-menu-item-content.auto-resolution{font-size:109%;font-weight:400}.video-js.vjs-mediacms .vjs-settings-panel.vjs-playback-speed-panel,.video-js.vjs-mediacms .vjs-settings-panel.vjs-resolutions-panel,.video-js.vjs-mediacms .vjs-settings-panel.vjs-subtitles-panel{z-index:1}.video-js.vjs-mediacms .vjs-settings-panel.vjs-playback-speed-panel .vjs-settings-menu-item .vjs-setting-menu-item-content,.video-js.vjs-mediacms .vjs-settings-panel.vjs-resolutions-panel .vjs-settings-menu-item .vjs-setting-menu-item-content,.video-js.vjs-mediacms .vjs-settings-panel.vjs-subtitles-panel .vjs-settings-menu-item .vjs-setting-menu-item-content{text-align:left;padding-left:2.75em}.video-js.vjs-mediacms .vjs-settings-panel.vjs-playback-speed-panel .vjs-settings-menu-item.vjs-selected-menu-item .vjs-setting-menu-item-content,.video-js.vjs-mediacms .vjs-settings-panel.vjs-resolutions-panel .vjs-settings-menu-item.vjs-selected-menu-item .vjs-setting-menu-item-content,.video-js.vjs-mediacms .vjs-settings-panel.vjs-subtitles-panel .vjs-settings-menu-item.vjs-selected-menu-item .vjs-setting-menu-item-content{position:relative;padding-left:.75em}.video-js.vjs-mediacms .vjs-settings-panel.vjs-playback-speed-panel .vjs-settings-menu-item.vjs-selected-menu-item .vjs-setting-menu-item-content:before,.video-js.vjs-mediacms .vjs-settings-panel.vjs-resolutions-panel .vjs-settings-menu-item.vjs-selected-menu-item .vjs-setting-menu-item-content:before,.video-js.vjs-mediacms .vjs-settings-panel.vjs-subtitles-panel .vjs-settings-menu-item.vjs-selected-menu-item .vjs-setting-menu-item-content:before{content:"";font-family:"MediaCmsVideoJsIcons";font-size:1.25em;line-height:.75;padding-right:.5em;float:left}.video-js.vjs-mediacms .vjs-button.vjs-play-control,.video-js.vjs-mediacms .vjs-button.vjs-next-button,.video-js.vjs-mediacms .vjs-button.vjs-previous-button{overflow:hidden;cursor:pointer}.video-js.vjs-mediacms .vjs-button.vjs-next-button,.video-js.vjs-mediacms .vjs-button.vjs-previous-button{font-family:VideoJS;font-weight:400;font-style:normal}.video-js.vjs-mediacms .vjs-button.vjs-next-button .vjs-icon-placeholder:before{content:""}.video-js.vjs-mediacms .vjs-button.vjs-previous-button .vjs-icon-placeholder:before{content:""}.video-js.vjs-mediacms .vjs-big-play-button{width:2.65em;height:1.49062em;line-height:1.49062em;font-size:2.5em;outline:0;border:0;border-radius:.15em;background-color:#000;background-color:rgba(0,0,0,.7);transition-duration:.2s;top:50%;left:50%;margin-left:-1.325em;margin-top:-0.74531em}.video-js.vjs-mediacms.vjs-changing-resolution .vjs-big-play-button{display:none}.video-js.vjs-mediacms .vjs-bottom-bg{position:absolute;bottom:0;left:-12px;right:-12px;height:36px;display:block;pointer-events:none;background:rgba(0,0,0,.1);background:-webkit-gradient(left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(0, 0, 0, 0.55)));background:linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.55) 100%)}.video-js.vjs-mediacms .vjs-control-bar{z-index:4;width:auto;left:12px;right:12px;background:none;text-shadow:0 1px 3px rgba(0,0,0,.05)}.video-js.vjs-mediacms .vjs-control-bar .vjs-button:focus{outline-width:0}.video-js.vjs-mediacms .vjs-control-bar .vjs-button[key-focus]:focus:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;display:block;border-radius:1px;border:2px solid rgba(255,255,255,.75)}.video-js.vjs-mediacms .vjs-control-bar .vjs-button .vjs-icon-placeholder:before{margin-top:-2px}.video-js.vjs-mediacms .vjs-menu-button .vjs-menu-content{background-color:#000;background-color:rgba(0,0,0,.7)}.video-js.vjs-mediacms .vjs-slider{background-color:#fff;background-color:rgba(255,255,255,.25)}.video-js.vjs-mediacms .vjs-slider:focus{text-shadow:none;box-shadow:none}.video-js.vjs-mediacms .vjs-slider-bar{background:rgba(255,255,255,.25)}.video-js.vjs-mediacms .vjs-slider-bar.vjs-play-progress{background-color:#fff}.video-js.vjs-mediacms .vjs-load-progress{background:none}.video-js.vjs-mediacms .vjs-load-progress div{background-color:#fff;background-color:rgba(255,255,255,.25)}.video-js.vjs-mediacms .vjs-volume-level{background:#fff}.video-js.vjs-mediacms .vjs-volume-level:before{line-height:1;top:-4px;font-size:12px}.video-js.vjs-mediacms .vjs-time-divider,.video-js.vjs-mediacms .vjs-duration,.video-js.vjs-mediacms .vjs-current-time,.video-js.vjs-mediacms.vjs-no-flex .vjs-duration,.video-js.vjs-mediacms.vjs-no-flex .vjs-current-time{display:block}.video-js.vjs-mediacms .vjs-current-time{margin-left:.45em}.video-js.vjs-mediacms .vjs-control{display:inline-block;float:left;padding:0;min-width:0;width:36px;line-height:34px;text-shadow:0 1px 3px rgba(0,0,0,.05)}.video-js.vjs-mediacms .vjs-control:focus:before,.video-js.vjs-mediacms .vjs-control:hover:before,.video-js.vjs-mediacms .vjs-control:focus{text-shadow:0 1px 3px rgba(0,0,0,.05)}.video-js.vjs-mediacms .vjs-control.vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before{margin-left:-0.17em}.video-js.vjs-mediacms .vjs-control.vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before{margin-left:-0.08em}.video-js.vjs-mediacms .vjs-control.vjs-disabled.vjs-picture-in-picture-control{display:none}.video-js.vjs-mediacms .vjs-progress-control{position:absolute;top:-0.3em;left:0;display:block;flex:none;width:100%;height:auto;z-index:1;padding-top:29px;height:30px;-webkit-tap-highlight-color:transparent;-moz-tap-highlight-color:transparent;-o-tap-highlight-color:transparent;tap-highlight-color:transparent}.video-js.vjs-mediacms .vjs-progress-control .vjs-play-progress .vjs-time-tooltip,.video-js.vjs-mediacms .vjs-progress-control .vjs-mouse-display .vjs-time-tooltip{line-height:1;font-size:11px;font-weight:600;height:auto;padding:8px 12px;border-radius:2px}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder{height:.3em;margin:0;box-shadow:0 1px 3px 0 rgba(0,0,0,.05)}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder:focus{outline-width:0}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder[key-focus]:focus:after{content:"";position:absolute;top:-3px;left:-3px;right:-3px;bottom:-3px;display:block;border-radius:1px;border:2px solid rgba(255,255,255,.75)}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder .vjs-play-progress{line-height:1em}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder .vjs-play-progress:before{top:50%;margin-top:-0.5em;text-shadow:0 1px 3px rgba(0,0,0,.05)}.video-js.vjs-mediacms .vjs-progress-control .vjs-play-progress:before{font-size:1em;display:none}.video-js.vjs-mediacms .vjs-progress-control:hover .vjs-play-progress:before,.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder:focus .vjs-play-progress:before{display:block}.video-js.vjs-mediacms .vjs-progress-control:hover .vjs-progress-holder,.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder:focus{font-size:1.2875em}.video-js.vjs-mediacms .vjs-progress-control:hover .vjs-play-progress .vjs-time-tooltip,.video-js.vjs-mediacms .vjs-progress-control:hover .vjs-progress-holder:focus .vjs-play-progress .vjs-time-tooltip{display:none}.video-js.vjs-mediacms .vjs-time-control{display:inline-block;float:left;min-width:0;height:36px;line-height:34px;width:auto;padding:1px 0 0;text-align:center;font-size:.975em}.video-js.vjs-mediacms .vjs-time-control.vjs-time-divider{min-width:1em;text-align:center}.video-js.vjs-mediacms .vjs-fullscreen-control{overflow:hidden;cursor:pointer}.video-js.vjs-mediacms .vjs-fullscreen-control:hover{-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-name:onHoverFullscreenToggle;animation-name:onHoverFullscreenToggle}.video-js.vjs-mediacms .vjs-theater-mode-control{overflow:hidden;cursor:pointer}.video-js.vjs-mediacms .vjs-volume-panel.vjs-volume-panel-horizontal{min-width:36px;width:0;overflow:hidden}.video-js.vjs-mediacms .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-mediacms .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-mediacms .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active{width:9em;transition:all 0s}.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control{position:absolute;top:0;left:36px;height:36px;width:0;visibility:visible;opacity:1}.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{margin-left:.45em;margin-right:.45em;transition:all 0s}.video-js.vjs-mediacms .vjs-volume-panel:hover .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control:hover.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-mute-control:hover~.vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal{position:absolute;width:5.5em;height:36px}.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-bar:focus{outline-width:0}.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-bar[key-focus]:focus:after{content:"";position:absolute;top:-1em;left:-0.5em;right:-0.5em;bottom:-1em;display:block;border-radius:1px;border:2px solid rgba(255,255,255,.75)}.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-bar.vjs-slider-horizontal{margin:16.5px .45em 16.5px 0}.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-bar.vjs-slider-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{height:3px}.video-js.vjs-mediacms .vjs-volume-panel.vjs-volume-panel-horizontal,.video-js.vjs-mediacms .vjs-volume-panel.vjs-volume-panel-horizontal:hover{transition:width .35s linear}.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel:hover .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control:hover.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-mute-control:hover~.vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal{transition:width .2s linear;transition-delay:.15s}.video-js.vjs-mediacms .vjs-actions-anim{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:absolute;top:50%;left:50%;width:7.375em;height:7.375em;line-height:7.375em;margin-top:-3.6875em;margin-left:-3.6875em;display:block;text-align:center;border-radius:50%;color:#eee;background-color:rgba(0,0,0,.25);visibility:hidden;opacity:0}.video-js.vjs-mediacms .vjs-actions-anim span{display:block}.video-js.vjs-mediacms .vjs-actions-anim span:after{content:"";font-family:VideoJS;font-weight:normal;font-style:normal;font-size:42px}.video-js.vjs-mediacms .vjs-actions-anim.just-paused span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.started-playing span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.volume-high span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.volume-mid span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.volume-low span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.volume-mute span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.moving-backward span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.moving-forward span{transform:scale(-1, 1)}.video-js.vjs-mediacms .vjs-actions-anim.moving-forward span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.moving-backward:before,.video-js.vjs-mediacms .vjs-actions-anim.moving-forward:before{content:"5";position:absolute;top:2px;left:0;right:0;bottom:0;display:block;font-size:10px;font-weight:700;font-family:Arial,sans-serif}.video-js.vjs-mediacms .vjs-actions-anim.play_previous span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.play_next span:after{content:""}.video-js.vjs-mediacms .vjs-corner-layer{position:absolute;display:block;z-index:1}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-left,.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-right{top:12px}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-bottom-left,.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-bottom-right{bottom:12px;transition-duration:.1s;transition-property:bottom}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-left,.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-bottom-left{left:12px}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-right,.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-bottom-right{right:12px}.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel.vjs-volume-panel-horizontal,.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel.vjs-volume-panel-horizontal:hover{transition:width 0s linear}.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel:hover .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel .vjs-volume-control:hover.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel .vjs-mute-control:hover~.vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal{transition:width 0s linear;transition-delay:0s}.video-js.vjs-mediacms.vjs-has-started .vjs-control-bar,.video-js.vjs-mediacms.vjs-changing-resolution .vjs-control-bar{display:block;height:66px;padding-top:30px;transition-duration:.1s;transition-property:transform,opacity,visibility}.video-js.vjs-mediacms.vjs-has-started .vjs-actions-anim.active-anim,.video-js.vjs-mediacms.vjs-changing-resolution .vjs-actions-anim.active-anim{visibility:visible;-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:onDisplayingActionAnimation;animation-name:onDisplayingActionAnimation}.video-js.vjs-mediacms.vjs-has-started .vjs-corner-layer.vjs-corner-bottom-left,.video-js.vjs-mediacms.vjs-has-started .vjs-corner-layer.vjs-corner-bottom-right,.video-js.vjs-mediacms.vjs-changing-resolution .vjs-corner-layer.vjs-corner-bottom-left,.video-js.vjs-mediacms.vjs-changing-resolution .vjs-corner-layer.vjs-corner-bottom-right{bottom:48px}.video-js.vjs-mediacms.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-corner-layer.vjs-corner-bottom-left,.video-js.vjs-mediacms.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-corner-layer.vjs-corner-bottom-right,.video-js.vjs-mediacms.vjs-changing-resolution.vjs-user-inactive.vjs-playing .vjs-corner-layer.vjs-corner-bottom-left,.video-js.vjs-mediacms.vjs-changing-resolution.vjs-user-inactive.vjs-playing .vjs-corner-layer.vjs-corner-bottom-right{bottom:12px}.video-js.vjs-mediacms.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar,.video-js.vjs-mediacms.vjs-changing-resolution.vjs-user-inactive.vjs-playing .vjs-control-bar{transform:translate(0px, 36px)}.video-js.vjs-mediacms.vjs-fullscreen{font-size:16px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-left-controls,.video-js.vjs-mediacms.vjs-fullscreen .vjs-right-controls{height:52px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-theater-mode-control{display:none}.video-js.vjs-mediacms.vjs-fullscreen .vjs-bottom-bg{height:52px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-settings-panel{bottom:45px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-control{width:52px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-time-control{width:auto}.video-js.vjs-mediacms.vjs-fullscreen .vjs-control,.video-js.vjs-mediacms.vjs-fullscreen .vjs-time-control{height:52px;line-height:50px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-progress-control.vjs-control{width:100%;height:auto}.video-js.vjs-mediacms.vjs-fullscreen .vjs-control-bar .vjs-button .vjs-icon-placeholder:before{margin-top:2px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-control-bar .vjs-button.vjs-fullscreen-control .vjs-icon-placeholder:before{font-size:2em;line-height:1.5}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-level:before{top:-5px;font-size:14px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-fullscreen-control:hover{-webkit-animation-name:onFullscreenHoverFullscreenToggle;animation-name:onFullscreenHoverFullscreenToggle}.video-js.vjs-mediacms.vjs-fullscreen .vjs-play-progress .vjs-time-tooltip,.video-js.vjs-mediacms.vjs-fullscreen .vjs-mouse-display .vjs-time-tooltip{font-size:12px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-bar.vjs-slider-horizontal{margin:23.5px .45em 23.5px 0}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-bar.vjs-slider-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{height:5px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel.vjs-volume-panel-horizontal{min-width:52px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active{width:10em;transition:all 0s}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control{left:52px;height:36px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel:hover .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control:hover.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-mute-control:hover~.vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal{height:52px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel.vjs-volume-panel-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel.vjs-volume-panel-horizontal:hover{transition:width .3s linear}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel:hover .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control:hover.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-mute-control:hover~.vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal{transition:width .2s linear;transition-delay:.1s}.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel.vjs-volume-panel-horizontal,.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel.vjs-volume-panel-horizontal:hover{transition:width 0s linear}.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel:hover .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel .vjs-volume-control:hover.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel .vjs-mute-control:hover~.vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal{transition:width 0s linear;transition-delay:0s}.video-js.vjs-mediacms.vjs-fullscreen .vjs-corner-layer.vjs-corner-bottom-left,.video-js.vjs-mediacms.vjs-fullscreen .vjs-corner-layer.vjs-corner-bottom-right{bottom:64px}.video-js.vjs-mediacms.vjs-has-started.vjs-fullscreen .vjs-control-bar,.video-js.vjs-mediacms.vjs-changing-resolution.vjs-fullscreen .vjs-control-bar{height:82px}.video-js.vjs-mediacms.vjs-has-started.vjs-fullscreen.vjs-user-inactive.vjs-playing .vjs-control-bar,.video-js.vjs-mediacms.vjs-changing-resolution.vjs-fullscreen.vjs-user-inactive.vjs-playing .vjs-control-bar{transform:translate(0px, 52px)}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls{-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;pointer-events:none;z-index:2;position:absolute;display:block;top:0;left:0;right:0;bottom:0;width:100%;background-color:rgba(0,0,0,.6);visibility:hidden;opacity:0;transition-timing-function:linear;transition-duration:.1s;transition-property:opacity,visibility}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls button{pointer-events:auto;display:inline-block;width:auto;height:auto;line-height:1;float:none;margin:1rem;font-size:2.625em;width:56px;height:56px;line-height:56px;outline:0;border-radius:50%}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls>*{position:absolute;display:block;top:50%;left:0;margin-top:-44px;display:table;width:100%}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls>*>*{display:table-cell;text-align:center;vertical-align:middle}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls .vjs-touch-previous-button{text-align:right}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls .vjs-touch-play-button{width:10.5em;text-align:center}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls .vjs-touch-play-button button{font-size:56px}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls .vjs-touch-next-button{text-align:left}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls .vjs-touch-hidden-button *{visibility:hidden;opacity:0}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls .vjs-touch-disabled-button *{color:#404040;color:rgba(255,255,255,.25);cursor:disabled}.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-seeking .vjs-actions-anim,.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-waiting .vjs-actions-anim,.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled .vjs-actions-anim{display:none}.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled .vjs-play-control,.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled .vjs-next-button,.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled .vjs-previous-button{display:none}.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled.vjs-has-started.vjs-playing.vjs-user-active .vjs-touch-controls,.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled.vjs-has-started.vjs-paused .vjs-touch-controls{visibility:visible;opacity:1}.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled.vjs-playing .vjs-icon-play:before{content:""}.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled.vjs-ended .more-media.full-wrapper{visibility:hidden}.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled.vjs-ended .vjs-icon-play:before{content:""}.video-js.vjs-mediacms{padding-top:50%}.video-js.vjs-mediacms video[poster]{-o-object-fit:fill;object-fit:fill}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder .vjs-play-progress{background-color:#093}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder .vjs-play-progress:before{color:#093}.video-js.vjs-mediacms .vjs-poster{background-size:cover}.video-js.vjs-mediacms.vjs-changing-resolution .vjs-poster{display:none}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-left,.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-right{top:16px}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-left{max-width:80%}.video-js.vjs-mediacms .vjs-corner-layer .title-link,.video-js.vjs-mediacms .vjs-corner-layer .user-thumb-link{outline:0;transition-duration:.1s;transition-property:opacity,visibility}.video-js.vjs-mediacms .vjs-corner-layer .title-link{display:inline-block;font-size:16px;font-stretch:100%;text-decoration:none;text-shadow:0 0 2px rgba(0,0,0,.5);line-height:23.4px;overflow:hidden;text-overflow:ellipsis;background-color:transparent;display:block;max-height:46.8px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal;color:#eee}.video-js.vjs-mediacms .vjs-corner-layer .title-link:hover{color:#fff}@media screen and (min-width: 768px){.video-js.vjs-mediacms .vjs-corner-layer .title-link{font-size:18px}}.video-js.vjs-mediacms .vjs-corner-layer .user-thumb-link{position:relative;display:block;width:36px;height:36px;overflow:hidden;border-radius:50%;margin-bottom:4px;background-size:cover;background-position:center;background-repeat:no-repeat}.video-js.vjs-mediacms .vjs-corner-layer .media-links-top-left{display:block}.video-js.vjs-mediacms .vjs-corner-layer .media-links-top-left .title-link{padding-left:48px;padding-top:7px}.video-js.vjs-mediacms .vjs-corner-layer .media-links-top-left .user-thumb-link{position:absolute;top:0;left:0;display:inline-block}.video-js.vjs-mediacms.vjs-fullscreen .vjs-corner-layer .title-link{font-size:16px}@media screen and (min-width: 768px){.video-js.vjs-mediacms.vjs-fullscreen .vjs-corner-layer .title-link{font-size:18px}}@media screen and (min-width: 992px){.video-js.vjs-mediacms.vjs-fullscreen .vjs-corner-layer .title-link{font-size:20px}}@media screen and (min-width: 1040px){.video-js.vjs-mediacms.vjs-fullscreen .vjs-corner-layer .title-link{font-size:22px}}.video-js.vjs-mediacms.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-corner-layer .title-link,.video-js.vjs-mediacms.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-corner-layer .user-thumb-link{opacity:0;visibility:hidden}.video-js.vjs-mediacms:hover .vjs-big-play-button{background-color:#093}.video-js.vjs-mediacms .vjs-progress-control .vjs-mouse-display .vjs-time-tooltip,.video-js.vjs-mediacms .vjs-preview-thumb .vjs-preview-thumb-time-display{font-size:.776699em;font-weight:500;line-height:1}.video-js.vjs-mediacms .vjs-progress-control .vjs-mouse-display .vjs-time-tooltip,.video-js.vjs-mediacms .vjs-preview-thumb .vjs-preview-thumb-time-display>*{padding:.5em .65em .4em;color:rgba(255,255,255,.9);background-color:rgba(28,28,28,.95);border-radius:2px}.video-js.vjs-mediacms .vjs-progress-control .vjs-mouse-display{background-color:rgba(28,28,28,.9)}.video-js.vjs-mediacms .vjs-progress-control .vjs-mouse-display .vjs-time-tooltip{top:auto;bottom:.5em}.video-js.vjs-mediacms .vjs-preview-thumb{display:none}.video-js.vjs-mediacms.vjs-enabled-preview-thumb .vjs-preview-thumb{position:relative;opacity:0;visibility:hidden;display:block}.video-js.vjs-mediacms.vjs-enabled-preview-thumb .vjs-preview-thumb .vjs-preview-thumb-inner{position:absolute;bottom:1em;left:-80px;width:160px;height:120px;overflow:hidden;background-position:center 0;background-size:cover;background-color:rgba(28,28,28,.9);border:2px solid rgba(28,28,28,.9);border-radius:1px}.video-js.vjs-mediacms.vjs-enabled-preview-thumb .vjs-preview-thumb .vjs-preview-thumb-time-display{position:absolute;bottom:-2px;left:0;width:100%;line-height:1;font-size:1em;font-weight:600;display:inline-block}.video-js.vjs-mediacms.vjs-enabled-preview-thumb .vjs-preview-thumb .vjs-preview-thumb-time-display>*{display:inline-block;padding:.5em .65em .45em}.video-js.vjs-mediacms.vjs-enabled-preview-thumb .vjs-progress-control.andrd-active .vjs-preview-thumb,.video-js.vjs-mediacms.vjs-enabled-preview-thumb .vjs-progress-control:hover .vjs-preview-thumb,.video-js.vjs-mediacms.vjs-enabled-preview-thumb .vjs-progress-control:active .vjs-preview-thumb{visibility:visible;-webkit-animation-name:showPreviewThumb;animation-name:showPreviewThumb;-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-delay:.1s;animation-delay:.1s;-webkit-animation-direction:alternate;animation-direction:alternate;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.video-js.vjs-mediacms.vjs-enabled-preview-thumb.vjs-user-inactive .vjs-progress-control .vjs-preview-thumb{opacity:0;visibility:hidden;transition:visibility 1s linear,opacity 1s linear}.video-js.vjs-mediacms.vjs-enabled-preview-thumb.vjs-touch-enabled .vjs-preview-thumb{display:none}.video-js.vjs-mediacms .vjs-loading-spinner{width:64px;height:64px;margin:-32px 0 0 -32px;border:0;border-radius:0;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);opacity:1;-webkit-animation-delay:.44s;animation-delay:.44s}.video-js.vjs-mediacms .vjs-loading-spinner:after,.video-js.vjs-mediacms .vjs-loading-spinner:before{display:none}.video-js.vjs-mediacms .vjs-loading-spinner .spinner{z-index:1;position:absolute;left:50%;top:50%;width:100%;margin-left:-32px;pointer-events:none;background-color:#eee}.video-js.vjs-mediacms .vjs-loading-spinner .spinner-container{pointer-events:none;position:absolute;width:100%;top:50%;left:50%;margin-top:-50%;margin-left:-50%;padding-bottom:100%;animation:spinner-linear-spin 1568.23529647ms linear infinite;-webkit-animation:spinner-linear-spin 1568.23529647ms linear infinite}.video-js.vjs-mediacms .vjs-loading-spinner .spinner-rotator{position:absolute;width:100%;height:100%;-webkit-animation:spinner-ease-spin 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:spinner-ease-spin 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.video-js.vjs-mediacms .vjs-loading-spinner .spinner-left,.video-js.vjs-mediacms .vjs-loading-spinner .spinner-right{position:absolute;top:0;bottom:0;overflow:hidden}.video-js.vjs-mediacms .vjs-loading-spinner .spinner-circle{position:absolute;width:200%;height:100%;box-sizing:border-box;border-radius:50%;border-style:solid;border-width:6px;border-color:#eee #eee transparent}.video-js.vjs-mediacms .vjs-loading-spinner .spinner-left{left:0;right:49%}.video-js.vjs-mediacms .vjs-loading-spinner .spinner-left .spinner-circle{left:0;right:-100%;border-right-color:transparent;-webkit-animation:spinner-left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:spinner-left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.video-js.vjs-mediacms .vjs-loading-spinner .spinner-right{left:49%;right:0}.video-js.vjs-mediacms .vjs-loading-spinner .spinner-right .spinner-circle{left:-100%;right:0;border-left-color:transparent;-webkit-animation:spinner-right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:spinner-right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1 1) infinite both}.video-js.vjs-mediacms.vjs-fullscreen .vjs-loading-spinner{width:96px;height:96px;margin:-48px 0 0 -48px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-loading-spinner .spinner{margin-left:-48px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-loading-spinner .spinner-circle{border-width:9px}.video-js.vjs-mediacms.vjs-error .vjs-loading-spinner{display:none} -@charset "UTF-8";.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.video-js .vjs-modal-dialog,.vjs-button>.vjs-icon-placeholder:before,.vjs-modal-dialog .vjs-modal-dialog-content{position:absolute;top:0;left:0;width:100%;height:100%}.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.vjs-button>.vjs-icon-placeholder:before{text-align:center}@font-face{font-family:VideoJS;src:url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAABDkAAsAAAAAG6gAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPgAAAFZRiV3hY21hcAAAAYQAAADaAAADPv749/pnbHlmAAACYAAAC3AAABHQZg6OcWhlYWQAAA3QAAAAKwAAADYZw251aGhlYQAADfwAAAAdAAAAJA+RCLFobXR4AAAOHAAAABMAAACM744AAGxvY2EAAA4wAAAASAAAAEhF6kqubWF4cAAADngAAAAfAAAAIAE0AIFuYW1lAAAOmAAAASUAAAIK1cf1oHBvc3QAAA/AAAABJAAAAdPExYuNeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGS7wTiBgZWBgaWQ5RkDA8MvCM0cwxDOeI6BgYmBlZkBKwhIc01hcPjI+FGJHcRdyA4RZgQRADK3CxEAAHic7dFZbsMgAEXRS0ycyZnnOeG7y+qC8pU1dHusIOXxuoxaOlwZYWQB0Aea4quIEN4E9LzKbKjzDeM6H/mua6Lmc/p8yhg0lvdYx15ZG8uOLQOGjMp3EzqmzJizYMmKNRu27Nhz4MiJMxeu3Ljz4Ekqm7T8P52G8PP3lnTOVk++Z6iN6QZzNN1F7ptuN7eGOjDUoaGODHVsuvU8MdTO9Hd5aqgzQ50b6sJQl4a6MtS1oW4MdWuoO0PdG+rBUI+GejLUs6FeDPVqqDdDvRvqw1CfhpqM9At0iFLaAAB4nJ1YDXBTVRZ+5/22TUlJ8we0pHlJm7RJf5O8F2j6EymlSPkpxaL8U2xpa3DKj0CBhc2IW4eWKSokIoLsuMqssM64f+jA4HSdWXXXscBq67IOs3FXZ1ZYWVyRFdo899yXtIBQZ90k7717zz3v3HPPOfd854YCCj9cL9dL0RQFOqCbGJnrHb5EayiKIWN8iA/hWBblo6hUWm8TtCDwE80WMJus/irwyxOdxeB0MDb14VNJHnXYoLLSl6FfCUYO9nYPTA8Epg9090LprfbBbZ2hY0UlJUXHQp3/vtWkS6EBv8+rPMq5u9692f/dNxJNiqwC1xPE9TCUgCsSdQWgE3XQD25lkG4CN2xmTcOXWBOyser6RN6KnGbKSbmQ3+d0OI1m2W8QzLLkI2sykrWAgJJEtA8vGGW/2Q+CmT3n8zS9wZwu2DCvtuZKZN3xkrLh36yCZuUomQSqGpY8t/25VfHVhw8z4ebGBtfLb0ya9PCaDc+8dGTvk2dsh6z7WzvowlXKUSWo9MJ15a3KrEP2loOr2Ojhw6iW6hf2BDdEccQvZGpaAy7YovSwq8kr7HGllxpd71rkS6G0Sf11sl9OvMK1+jwPPODxjUwkOim9CU3ix1wNjXDfmJSEn618Bs6lpWwUpU+8PCqLMY650zjq8VhCIP17NEKTx3eaLL+s5Pi6yJWaWjTHLR1jYzPSV9VF/6Ojdb/1kO3Mk3uhHC0x6gc1BjlKQ+nQFxTYdaJkZ7ySVxLBbhR1dsboNXp1tCYKW2LRaEzpYcIx2BKNxaL0ZaUnSqfFoiNhHKR/GkX6PWUSAaJelQaqZL1EpoHNsajSEyPSoJ9IjhIxTdjHLmwZvhRDOiFTY/YeQnvrVZmiTQtGncECXtFTBZLOVwwMRgoXHAkXzMzPn1nAJJ8jYSbMDaqN2waGLzNhih/bZynUBMpIWSg7VYi7DRx2m8ALkIdRCJwI6ArJx2EI8kaDWeTQKeAFk9fjl/1AvwktjQ1P7NjyMGQyfd4vjipX6M/i52D7Cq80kqlcxEcGXRr/FEcgs0u5uGgB4VWuMFfpdn2Re6Hi3PqzmxWKsz6+ae2Pn9hXXw/fqM859UiGC0oKYYILJBqJrsn1Z1E5qOs9rQCiUQRREjm8yJcbHF5cUJufX1vAHlefw0XgUoboS3ETfQlTxBC4SOtuE8VPRJTBSCQSjZCpk7Gqzu+masaZ2y7Zjehho4F3g82BNDkAHpORG4+OCS+f6JTPmtRn/PH1kch6d04sp7AQb25aQ/pqUyXeQ8vrebG8OYQdXOQ+585u0sdW9rqalzRURiJ+9F4MweRFrKUjl1GUYhH1A27WOHw5cTFSFPMo9EeUIGnQTZHIaJ7AHLaOKsOODaNF9jkBjYG2QEsQ2xjMUAx2bBEbeTBWMHwskBjngq56S/yfgkBnWBa4K9sqKtq2t1UI8S9He5XuBRbawAdatrQEAi30Aks2+LM8WeCbalVZkWNylvJ+dqJnzVb+OHlSoKW8nPCP7Rd+CcZ2DdWAGqJ2CBFOphgywFFCFBNtfAbGtNPBCwxvygHeYMZMY9ZboBqwq/pVrsbgN5tkv152ODlbMfiqwGMBgxa4Exz3QhovRIUp6acqZmQzRq0ypDXS2TPLT02YIkQETnOE445oOGxOmXAqUJNNG7XgupMjPq2ua9asrj5yY/yuKteO1Kx0YNJTufrirLe1mZnat7OL6rnUdCWenpW6I8mAnbsY8KWs1PuSovCW9A/Z25PQ24a7cNOqgmTkLmBMgh4THgc4b9k2IVv1/g/F5nGljwPLfOgHAzJzh45V/4+WenTzmMtR5Z7us2Tys909UHqrPY7KbckoxRvRHhmVc3cJGE97uml0R1S0jdULVl7EvZtDFVBF35N9cEdjpgmAiOlFZ+Dtoh93+D3zzHr8RRNZQhnCNMNbcegOvpEwZoL+06cJQ07h+th3fZ/7PVbVC6ngTAV/KoLFuO6+2KFcU651gEb5ugPSIb1D+Xp8V4+k3sEIGnw5mYe4If4k1lFYr6SCzmM2EQ8iWtmwjnBI9kTwe1TlfAmXh7H02by9fW2gsjKwtv0aaURKil4OdV7rDL1MXIFNrhdxohcZXYTnq47WisrKitaObbf5+yvkLi5J6lCNZZ+B6GC38VNBZBDidSS/+mSvh6s+srgC8pyKMvDtt+de3c9fU76ZPfuM8ud4Kv0fyP/LqfepMT/3oZxSqpZaTa1DaQYLY8TFsHYbWYsPoRhRWfL5eSSQbhUGgGC3YLbVMk6PitTFNGpAsNrC6D1VNBKgBHMejaiuRWEWGgsSDBTJjqWIl8kJLlsaLJ2tXDr6xGfT85bM2Q06a46x2HTgvdnV8z5YDy/27J4zt6x2VtkzjoYpkq36kaBr4eQSg7tyiVweWubXZugtadl58ydapfbORfKsDTuZ0OBgx4cfdjCf5tbWNITnL120fdOi1RV1C3uKGzNdwYLcMvZ3BxoPyTOCD1XvXTp7U10gWCVmTV9b3r2z0SkGWovb2hp9I89O8a2smlyaO8muMU+dRmtzp60IzAoFpjLr1n388boLyf0dRvxhsHZ0qbWqDkwqvvpkj4l0fY6EIXRi5sQSrAvsVYwXRy4qJ2EVtD1AN7a0HWth9ymvL1xc3WTUKK/TAHA/bXDVtVWfOMfuGxGZv4Ln/jVr9jc3j1yMv0tndmyt9Vq88Y9gH1wtLX3KWjot5++jWHgAoZZkQ14wGQ20Fli71UmKJAy4xKMSTGbVdybW7FDDAut9XpD5AzWrYO7zQ8qffqF8+Ynd/clrHcdyxGy3a/3+mfNnzC/cBsveTjnTvXf1o6vzOlZw7WtqtdmPK/Errz/6NNtD72zmNOZfbmYdTGHfoofqI79Oc+R2n1lrnL6pOm0Up7kwxhTW12Amm7WYkXR2qYrF2AmgmbAsxZjwy1xpg/m1Je2vrp8v/nz2xpmlBg4E9hrMU341wVpTOh/OfmGvAnra8q6uctr60ZQHV3Q+WMQJykMj8ZsWn2QBOmmHMB+m5pDIpTFonYigiaKAhGEiAHF7EliVnQkjoLVIMPtJpBKHYd3A8GYH9jJzrWwmHx5Qjp7vDAX0suGRym1vtm/9W1/HyR8vczfMs6Sk8DSv855/5dlX9oQq52hT8syyp2rx5Id17IAyAM3wIjQPMOHzytEB64q6D5zT91yNbnx3V/nqnd017S9Y0605k3izoXLpsxde2n38yoOV9s1LcjwzNjbdX6asnBVaBj/6/DwKwPkpcqbDG7BnsXoSqWnUAmottYF6jMSdVyYZh3zVXCjwTiwwHH6sGuRiEHQGzuRX6whZkp123oy1BWE2mEfJ/tvIRtM4ZM5bDXiMsPMaAKOTyc5uL57rqyyc5y5JE5pm1i2S2iUX0CcaQ6lC6Zog7JqSqZmYlosl2K6pwNA84zRnQW6SaALYZQGW5lhCtU/W34N6o+bKfZ8cf3/Cl/+iTX3wBzpOY4mRkeNf3rptycGSshQWgGbYt5jFc2e0+DglIrwl6DVWQ7BuwaJ3Xk1J4VL5urnLl/Wf+gHU/hZoZdKNym6lG+I34FaNeZKcSpJIo2IeCVvpdsDGfKvzJnAwmeD37Ow65ZWwSowpgwX5T69s/rB55dP5BcpgDKFV8p7q2sn/1uc93bVzT/w6UrCqDTWvfCq/oCD/qZXNoUj8BL5Kp6GU017frfNXkAtiiyf/SOCEeLqnd8R/Ql9GlCRfctS6k5chvIBuQ1zCCjoCHL2DHNHIXxMJ3kQeO8lbsUXONeSfA5EjcG6/E+KdhN4bP04vBhdi883+BFBzQbxFbvZzQeY9LNBZc0FNfn5NwfDn6rCTnTw6R8o+gfpf5hCom33cRuiTlss3KHmZjD+BPN+5gXuA2ziS/Q73mLxUkpbKN/eqwz5uK0X9F3h2d1V4nGNgZGBgAOJd776+iue3+crAzc4AAje5Bfcg0xz9YHEOBiYQBQA8FQlFAHicY2BkYGBnAAGOPgaG//85+hkYGVCBMgBGGwNYAAAAeJxjYGBgYB8EmKOPgQEAQ04BfgAAAAAAAA4AaAB+AMwA4AECAUIBbAGYAcICGAJYArQC4AMwA7AD3gQwBJYE3AUkBWYFigYgBmYGtAbqB1gIEghYCG4IhAi2COh4nGNgZGBgUGYoZWBnAAEmIOYCQgaG/2A+AwAYCQG2AHicXZBNaoNAGIZfE5PQCKFQ2lUps2oXBfOzzAESyDKBQJdGR2NQR3QSSE/QE/QEPUUPUHqsvsrXjTMw83zPvPMNCuAWP3DQDAejdm1GjzwS7pMmwi75XngAD4/CQ/oX4TFe4Qt7uMMbOzjuDc0EmXCP/C7cJ38Iu+RP4QEe8CU8pP8WHmOPX2EPz87TPo202ey2OjlnQSXV/6arOjWFmvszMWtd6CqwOlKHq6ovycLaWMWVydXKFFZnmVFlZU46tP7R2nI5ncbi/dDkfDtFBA2DDXbYkhKc+V0Bqs5Zt9JM1HQGBRTm/EezTmZNKtpcAMs9Yu6AK9caF76zoLWIWcfMGOSkVduvSWechqZsz040Ib2PY3urxBJTzriT95lipz+TN1fmAAAAeJxtkMl2wjAMRfOAhABlKm2h80C3+ajgCKKDY6cegP59TYBzukAL+z1Zsq8ctaJTTKPrsUQLbXQQI0EXKXroY4AbDDHCGBNMcYsZ7nCPB8yxwCOe8IwXvOIN7/jAJ76wxHfUqWX+OzgumWAjJMV17i0Ndlr6irLKO+qftdT7i6y4uFSUvCknay+lFYZIZaQcmfH/xIFdYn98bqhra1aKTM/6lWMnyaYirx1rFUQZFBkb2zJUtoXeJCeg0WnLtHeSFc3OtrnozNwqi0TkSpBMDB1nSde5oJXW23hTS2/T0LilglXX7dmFVxLnq5U0vYATHFk3zX3BOisoQHNDFDeZnqKDy9hRNawN7Vh727hFzcJ5c8TILrKZfH7tIPxAFP0BpLeJPA==) format("woff");font-weight:400;font-style:normal}.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.video-js .vjs-play-control .vjs-icon-placeholder,.vjs-icon-play{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.video-js .vjs-play-control .vjs-icon-placeholder:before,.vjs-icon-play:before{content:"\f101"}.vjs-icon-play-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-play-circle:before{content:"\f102"}.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder,.vjs-icon-pause{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before,.vjs-icon-pause:before{content:"\f103"}.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder,.vjs-icon-volume-mute{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before,.vjs-icon-volume-mute:before{content:"\f104"}.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder,.vjs-icon-volume-low{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before,.vjs-icon-volume-low:before{content:"\f105"}.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder,.vjs-icon-volume-mid{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before,.vjs-icon-volume-mid:before{content:"\f106"}.video-js .vjs-mute-control .vjs-icon-placeholder,.vjs-icon-volume-high{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control .vjs-icon-placeholder:before,.vjs-icon-volume-high:before{content:"\f107"}.video-js .vjs-fullscreen-control .vjs-icon-placeholder,.vjs-icon-fullscreen-enter{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-fullscreen-control .vjs-icon-placeholder:before,.vjs-icon-fullscreen-enter:before{content:"\f108"}.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder,.vjs-icon-fullscreen-exit{font-family:VideoJS;font-weight:400;font-style:normal}.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before,.vjs-icon-fullscreen-exit:before{content:"\f109"}.vjs-icon-square{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-square:before{content:"\f10a"}.vjs-icon-spinner{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-spinner:before{content:"\f10b"}.video-js .vjs-subs-caps-button .vjs-icon-placeholder,.video-js .vjs-subtitles-button .vjs-icon-placeholder,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder,.vjs-icon-subtitles{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js .vjs-subtitles-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder:before,.vjs-icon-subtitles:before{content:"\f10c"}.video-js .vjs-captions-button .vjs-icon-placeholder,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder,.vjs-icon-captions{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-captions-button .vjs-icon-placeholder:before,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder:before,.vjs-icon-captions:before{content:"\f10d"}.video-js .vjs-chapters-button .vjs-icon-placeholder,.vjs-icon-chapters{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-chapters-button .vjs-icon-placeholder:before,.vjs-icon-chapters:before{content:"\f10e"}.vjs-icon-share{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-share:before{content:"\f10f"}.vjs-icon-cog{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-cog:before{content:"\f110"}.video-js .vjs-play-progress,.video-js .vjs-volume-level,.vjs-icon-circle,.vjs-seek-to-live-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-play-progress:before,.video-js .vjs-volume-level:before,.vjs-icon-circle:before,.vjs-seek-to-live-control .vjs-icon-placeholder:before{content:"\f111"}.vjs-icon-circle-outline{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-outline:before{content:"\f112"}.vjs-icon-circle-inner-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-inner-circle:before{content:"\f113"}.vjs-icon-hd{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-hd:before{content:"\f114"}.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder,.vjs-icon-cancel{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder:before,.vjs-icon-cancel:before{content:"\f115"}.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder,.vjs-icon-replay{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before,.vjs-icon-replay:before{content:"\f116"}.vjs-icon-facebook{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-facebook:before{content:"\f117"}.vjs-icon-gplus{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-gplus:before{content:"\f118"}.vjs-icon-linkedin{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-linkedin:before{content:"\f119"}.vjs-icon-twitter{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-twitter:before{content:"\f11a"}.vjs-icon-tumblr{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-tumblr:before{content:"\f11b"}.vjs-icon-pinterest{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-pinterest:before{content:"\f11c"}.video-js .vjs-descriptions-button .vjs-icon-placeholder,.vjs-icon-audio-description{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-descriptions-button .vjs-icon-placeholder:before,.vjs-icon-audio-description:before{content:"\f11d"}.video-js .vjs-audio-button .vjs-icon-placeholder,.vjs-icon-audio{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-audio-button .vjs-icon-placeholder:before,.vjs-icon-audio:before{content:"\f11e"}.vjs-icon-next-item{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-next-item:before{content:"\f11f"}.vjs-icon-previous-item{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-previous-item:before{content:"\f120"}.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder,.vjs-icon-picture-in-picture-enter{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder:before,.vjs-icon-picture-in-picture-enter:before{content:"\f121"}.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder,.vjs-icon-picture-in-picture-exit{font-family:VideoJS;font-weight:400;font-style:normal}.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder:before,.vjs-icon-picture-in-picture-exit:before{content:"\f122"}.video-js{display:block;vertical-align:top;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#fff;background-color:#000;position:relative;padding:0;font-size:10px;line-height:1;font-weight:400;font-style:normal;font-family:Arial,Helvetica,sans-serif;word-break:initial}.video-js:-moz-full-screen{position:absolute}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.video-js[tabindex="-1"]{outline:0}.video-js *,.video-js :after,.video-js :before{-webkit-box-sizing:inherit;-moz-box-sizing:inherit;box-sizing:inherit}.video-js ul{font-family:inherit;font-size:inherit;line-height:inherit;list-style-position:outside;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.video-js.vjs-1-1,.video-js.vjs-16-9,.video-js.vjs-4-3,.video-js.vjs-9-16,.video-js.vjs-fluid{width:100%;max-width:100%}.video-js.vjs-1-1:not(.vjs-audio-only-mode),.video-js.vjs-16-9:not(.vjs-audio-only-mode),.video-js.vjs-4-3:not(.vjs-audio-only-mode),.video-js.vjs-9-16:not(.vjs-audio-only-mode),.video-js.vjs-fluid:not(.vjs-audio-only-mode){height:0}.video-js.vjs-16-9:not(.vjs-audio-only-mode){padding-top:56.25%}.video-js.vjs-4-3:not(.vjs-audio-only-mode){padding-top:75%}.video-js.vjs-9-16:not(.vjs-audio-only-mode){padding-top:177.7777777778%}.video-js.vjs-1-1:not(.vjs-audio-only-mode){padding-top:100%}.video-js.vjs-fill:not(.vjs-audio-only-mode){width:100%;height:100%}.video-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%}.video-js.vjs-audio-only-mode .vjs-tech{display:none}body.vjs-full-window{padding:0;margin:0;height:100%}.vjs-full-window .video-js.vjs-fullscreen{position:fixed;overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0}.video-js.vjs-fullscreen:not(.vjs-ios-native-fs){width:100%!important;height:100%!important;padding-top:0!important}.video-js.vjs-fullscreen.vjs-user-inactive{cursor:none}.vjs-hidden{display:none!important}.vjs-disabled{opacity:.5;cursor:default}.video-js .vjs-offscreen{height:1px;left:-9999px;position:absolute;top:0;width:1px}.vjs-lock-showing{display:block!important;opacity:1!important;visibility:visible!important}.vjs-no-js{padding:20px;color:#fff;background-color:#000;font-size:18px;font-family:Arial,Helvetica,sans-serif;text-align:center;width:300px;height:150px;margin:0 auto}.vjs-no-js a,.vjs-no-js a:visited{color:#66a8cc}.video-js .vjs-big-play-button{font-size:3em;line-height:1.5em;height:1.63332em;width:3em;display:block;position:absolute;top:10px;left:10px;padding:0;cursor:pointer;opacity:1;border:.06666em solid #fff;background-color:#2b333f;background-color:rgba(43,51,63,.7);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;-webkit-transition:all .4s;-o-transition:all .4s;-moz-transition:all .4s;transition:all .4s}.vjs-big-play-centered .vjs-big-play-button{top:50%;left:50%;margin-top:-.81666em;margin-left:-1.5em}.video-js .vjs-big-play-button:focus,.video-js:hover .vjs-big-play-button{border-color:#fff;background-color:#73859f;background-color:rgba(115,133,159,.5);-webkit-transition:all 0s;-o-transition:all 0s;-moz-transition:all 0s;transition:all 0s}.vjs-controls-disabled .vjs-big-play-button,.vjs-error .vjs-big-play-button,.vjs-has-started .vjs-big-play-button,.vjs-using-native-controls .vjs-big-play-button{display:none}.vjs-has-started.vjs-paused.vjs-show-big-play-button-on-pause .vjs-big-play-button{display:block}.video-js button{background:0 0;border:none;color:inherit;display:inline-block;font-size:inherit;line-height:inherit;text-transform:none;text-decoration:none;-webkit-transition:none;-o-transition:none;-moz-transition:none;transition:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.vjs-control .vjs-button{width:100%;height:100%}.video-js .vjs-control.vjs-close-button{cursor:pointer;height:3em;position:absolute;right:0;top:.5em;z-index:2}.video-js .vjs-modal-dialog{background:rgba(0,0,0,.8);background:-webkit-gradient(linear,left top, left bottom,from(rgba(0,0,0,.8)),to(rgba(255,255,255,0)));background:-webkit-linear-gradient(top,rgba(0,0,0,.8),rgba(255,255,255,0));background:-moz-linear-gradient(top,rgba(0,0,0,.8),rgba(255,255,255,0));background:-o-linear-gradient(top,rgba(0,0,0,.8),rgba(255,255,255,0));background:linear-gradient(180deg,rgba(0,0,0,.8),rgba(255,255,255,0));overflow:auto}.video-js .vjs-modal-dialog>*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.vjs-modal-dialog .vjs-modal-dialog-content{font-size:1.2em;line-height:1.5;padding:20px 24px;z-index:1}.vjs-menu-button{cursor:pointer}.vjs-menu-button.vjs-disabled{cursor:default}.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu{display:none}.vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;font-family:Arial,Helvetica,sans-serif;overflow:auto}.vjs-menu .vjs-menu-content>*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.vjs-scrubbing .vjs-control.vjs-menu-button:hover .vjs-menu{display:none}.vjs-menu li{list-style:none;margin:0;padding:.2em 0;line-height:1.4em;font-size:1.2em;text-align:center;text-transform:lowercase}.js-focus-visible .vjs-menu li.vjs-menu-item:hover,.vjs-menu li.vjs-menu-item:focus,.vjs-menu li.vjs-menu-item:hover{background-color:#73859f;background-color:rgba(115,133,159,.5)}.js-focus-visible .vjs-menu li.vjs-selected:hover,.vjs-menu li.vjs-selected,.vjs-menu li.vjs-selected:focus,.vjs-menu li.vjs-selected:hover{background-color:#fff;color:#2b333f}.js-focus-visible .vjs-menu :not(.vjs-selected):focus:not(.focus-visible),.video-js .vjs-menu :not(.vjs-selected):focus:not(:focus-visible){background:0 0}.vjs-menu li.vjs-menu-title{text-align:center;text-transform:uppercase;font-size:1em;line-height:2em;padding:0;margin:0 0 .3em 0;font-weight:700;cursor:default}.vjs-menu-button-popup .vjs-menu{display:none;position:absolute;bottom:0;width:10em;left:-3em;height:0;margin-bottom:1.5em;border-top-color:rgba(43,51,63,.7)}.vjs-menu-button-popup .vjs-menu .vjs-menu-content{background-color:#2b333f;background-color:rgba(43,51,63,.7);position:absolute;width:100%;bottom:1.5em;max-height:15em}.vjs-layout-tiny .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:5em}.vjs-layout-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:10em}.vjs-layout-medium .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:14em}.vjs-layout-huge .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:25em}.vjs-menu-button-popup .vjs-menu.vjs-lock-showing,.vjs-workinghover .vjs-menu-button-popup.vjs-hover .vjs-menu{display:block}.video-js .vjs-menu-button-inline{-webkit-transition:all .4s;-o-transition:all .4s;-moz-transition:all .4s;transition:all .4s;overflow:hidden}.video-js .vjs-menu-button-inline:before{width:2.222222222em}.video-js .vjs-menu-button-inline.vjs-slider-active,.video-js .vjs-menu-button-inline:focus,.video-js .vjs-menu-button-inline:hover,.video-js.vjs-no-flex .vjs-menu-button-inline{width:12em}.vjs-menu-button-inline .vjs-menu{opacity:0;height:100%;width:auto;position:absolute;left:4em;top:0;padding:0;margin:0;-webkit-transition:all .4s;-o-transition:all .4s;-moz-transition:all .4s;transition:all .4s}.vjs-menu-button-inline.vjs-slider-active .vjs-menu,.vjs-menu-button-inline:focus .vjs-menu,.vjs-menu-button-inline:hover .vjs-menu{display:block;opacity:1}.vjs-no-flex .vjs-menu-button-inline .vjs-menu{display:block;opacity:1;position:relative;width:auto}.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu,.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu,.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu{width:auto}.vjs-menu-button-inline .vjs-menu-content{width:auto;height:100%;margin:0;overflow:hidden}.video-js .vjs-control-bar{display:none;width:100%;position:absolute;bottom:0;left:0;right:0;height:3em;background-color:#2b333f;background-color:rgba(43,51,63,.7)}.vjs-audio-only-mode .vjs-control-bar,.vjs-has-started .vjs-control-bar{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;visibility:visible;opacity:1;-webkit-transition:visibility .1s,opacity .1s;-o-transition:visibility .1s,opacity .1s;-moz-transition:visibility .1s,opacity .1s;transition:visibility .1s,opacity .1s}.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{visibility:visible;opacity:0;pointer-events:none;-webkit-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.vjs-controls-disabled .vjs-control-bar,.vjs-error .vjs-control-bar,.vjs-using-native-controls .vjs-control-bar{display:none!important}.vjs-audio-only-mode.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar,.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:1;visibility:visible;pointer-events:auto}.vjs-has-started.vjs-no-flex .vjs-control-bar{display:table}.video-js .vjs-control{position:relative;text-align:center;margin:0;padding:0;height:100%;width:4em;-webkit-box-flex:0;-webkit-flex:none;-moz-box-flex:0;-ms-flex:none;flex:none}.video-js .vjs-control.vjs-visible-text{width:auto;padding-left:1em;padding-right:1em}.vjs-button>.vjs-icon-placeholder:before{font-size:1.8em;line-height:1.67}.vjs-button>.vjs-icon-placeholder{display:block}.video-js .vjs-control:focus,.video-js .vjs-control:focus:before,.video-js .vjs-control:hover:before{text-shadow:0 0 1em #fff}.video-js :not(.vjs-visible-text)>.vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.vjs-no-flex .vjs-control{display:table-cell;vertical-align:middle}.video-js .vjs-custom-control-spacer{display:none}.video-js .vjs-progress-control{cursor:pointer;-webkit-box-flex:1;-webkit-flex:auto;-moz-box-flex:1;-ms-flex:auto;flex:auto;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-moz-box-align:center;-ms-flex-align:center;align-items:center;min-width:4em;-ms-touch-action:none;touch-action:none}.video-js .vjs-progress-control.disabled{cursor:default}.vjs-live .vjs-progress-control{display:none}.vjs-liveui .vjs-progress-control{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-moz-box-align:center;-ms-flex-align:center;align-items:center}.vjs-no-flex .vjs-progress-control{width:auto}.video-js .vjs-progress-holder{-webkit-box-flex:1;-webkit-flex:auto;-moz-box-flex:1;-ms-flex:auto;flex:auto;-webkit-transition:all .2s;-o-transition:all .2s;-moz-transition:all .2s;transition:all .2s;height:.3em}.video-js .vjs-progress-control .vjs-progress-holder{margin:0 10px}.video-js .vjs-progress-control:hover .vjs-progress-holder{font-size:1.6666666667em}.video-js .vjs-progress-control:hover .vjs-progress-holder.disabled{font-size:1em}.video-js .vjs-progress-holder .vjs-load-progress,.video-js .vjs-progress-holder .vjs-load-progress div,.video-js .vjs-progress-holder .vjs-play-progress{position:absolute;display:block;height:100%;margin:0;padding:0;width:0}.video-js .vjs-play-progress{background-color:#fff}.video-js .vjs-play-progress:before{font-size:.9em;position:absolute;right:-.5em;top:-.3333333333em;z-index:1}.video-js .vjs-load-progress{background:rgba(115,133,159,.5)}.video-js .vjs-load-progress div{background:rgba(115,133,159,.75)}.video-js .vjs-time-tooltip{background-color:#fff;background-color:rgba(255,255,255,.8);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;color:#000;float:right;font-family:Arial,Helvetica,sans-serif;font-size:1em;padding:6px 8px 8px 8px;pointer-events:none;position:absolute;top:-3.4em;visibility:hidden;z-index:1}.video-js .vjs-progress-holder:focus .vjs-time-tooltip{display:none}.video-js .vjs-progress-control:hover .vjs-progress-holder:focus .vjs-time-tooltip,.video-js .vjs-progress-control:hover .vjs-time-tooltip{display:block;font-size:.6em;visibility:visible}.video-js .vjs-progress-control.disabled:hover .vjs-time-tooltip{font-size:1em}.video-js .vjs-progress-control .vjs-mouse-display{display:none;position:absolute;width:1px;height:100%;background-color:#000;z-index:1}.vjs-no-flex .vjs-progress-control .vjs-mouse-display{z-index:0}.video-js .vjs-progress-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display{visibility:hidden;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display{display:none}.vjs-mouse-display .vjs-time-tooltip{color:#fff;background-color:#000;background-color:rgba(0,0,0,.8)}.video-js .vjs-slider{position:relative;cursor:pointer;padding:0;margin:0 .45em 0 .45em;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#73859f;background-color:rgba(115,133,159,.5)}.video-js .vjs-slider.disabled{cursor:default}.video-js .vjs-slider:focus{text-shadow:0 0 1em #fff;-webkit-box-shadow:0 0 1em #fff;-moz-box-shadow:0 0 1em #fff;box-shadow:0 0 1em #fff}.video-js .vjs-mute-control{cursor:pointer;-webkit-box-flex:0;-webkit-flex:none;-moz-box-flex:0;-ms-flex:none;flex:none}.video-js .vjs-volume-control{cursor:pointer;margin-right:1em;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex}.video-js .vjs-volume-control.vjs-volume-horizontal{width:5em}.video-js .vjs-volume-panel .vjs-volume-control{visibility:visible;opacity:0;width:1px;height:1px;margin-left:-1px}.video-js .vjs-volume-panel{-webkit-transition:width 1s;-o-transition:width 1s;-moz-transition:width 1s;transition:width 1s}.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active,.video-js .vjs-volume-panel .vjs-volume-control:active,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control,.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control,.video-js .vjs-volume-panel:active .vjs-volume-control,.video-js .vjs-volume-panel:focus .vjs-volume-control{visibility:visible;opacity:1;position:relative;-webkit-transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s;-o-transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s;-moz-transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s;transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s}.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal{width:5em;height:3em;margin-right:0}.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-vertical,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-vertical,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-vertical{left:-3.5em;-webkit-transition:left 0s;-o-transition:left 0s;-moz-transition:left 0s;transition:left 0s}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal:active{width:10em;-webkit-transition:width .1s;-o-transition:width .1s;-moz-transition:width .1s;transition:width .1s}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-mute-toggle-only{width:4em}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical{height:8em;width:3em;left:-3000em;-webkit-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s;-o-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s;-moz-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s;transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{-webkit-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s;-o-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s;-moz-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s;transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s}.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{width:5em;height:3em;visibility:visible;opacity:1;position:relative;-webkit-transition:none;-o-transition:none;-moz-transition:none;transition:none}.video-js.vjs-no-flex .vjs-volume-control.vjs-volume-vertical,.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical{position:absolute;bottom:3em;left:.5em}.video-js .vjs-volume-panel{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex}.video-js .vjs-volume-bar{margin:1.35em .45em}.vjs-volume-bar.vjs-slider-horizontal{width:5em;height:.3em}.vjs-volume-bar.vjs-slider-vertical{width:.3em;height:5em;margin:1.35em auto}.video-js .vjs-volume-level{position:absolute;bottom:0;left:0;background-color:#fff}.video-js .vjs-volume-level:before{position:absolute;font-size:.9em;z-index:1}.vjs-slider-vertical .vjs-volume-level{width:.3em}.vjs-slider-vertical .vjs-volume-level:before{top:-.5em;left:-.3em;z-index:1}.vjs-slider-horizontal .vjs-volume-level{height:.3em}.vjs-slider-horizontal .vjs-volume-level:before{top:-.3em;right:-.5em}.video-js .vjs-volume-panel.vjs-volume-panel-vertical{width:4em}.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level{height:100%}.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{width:100%}.video-js .vjs-volume-vertical{width:3em;height:8em;bottom:8em;background-color:#2b333f;background-color:rgba(43,51,63,.7)}.video-js .vjs-volume-horizontal .vjs-menu{left:-2em}.video-js .vjs-volume-tooltip{background-color:#fff;background-color:rgba(255,255,255,.8);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;color:#000;float:right;font-family:Arial,Helvetica,sans-serif;font-size:1em;padding:6px 8px 8px 8px;pointer-events:none;position:absolute;top:-3.4em;visibility:hidden;z-index:1}.video-js .vjs-volume-control:hover .vjs-progress-holder:focus .vjs-volume-tooltip,.video-js .vjs-volume-control:hover .vjs-volume-tooltip{display:block;font-size:1em;visibility:visible}.video-js .vjs-volume-vertical:hover .vjs-progress-holder:focus .vjs-volume-tooltip,.video-js .vjs-volume-vertical:hover .vjs-volume-tooltip{left:1em;top:-12px}.video-js .vjs-volume-control.disabled:hover .vjs-volume-tooltip{font-size:1em}.video-js .vjs-volume-control .vjs-mouse-display{display:none;position:absolute;width:100%;height:1px;background-color:#000;z-index:1}.video-js .vjs-volume-horizontal .vjs-mouse-display{width:1px;height:100%}.vjs-no-flex .vjs-volume-control .vjs-mouse-display{z-index:0}.video-js .vjs-volume-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-volume-control .vjs-mouse-display{visibility:hidden;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.video-js.vjs-user-inactive.vjs-no-flex .vjs-volume-control .vjs-mouse-display{display:none}.vjs-mouse-display .vjs-volume-tooltip{color:#fff;background-color:#000;background-color:rgba(0,0,0,.8)}.vjs-poster{display:inline-block;vertical-align:middle;background-repeat:no-repeat;background-position:50% 50%;-moz-background-size:contain;background-size:contain;background-color:#000;cursor:pointer;margin:0;padding:0;position:absolute;top:0;right:0;bottom:0;left:0;height:100%}.vjs-has-started .vjs-poster,.vjs-using-native-controls .vjs-poster{display:none}.vjs-audio.vjs-has-started .vjs-poster,.vjs-has-started.vjs-audio-poster-mode .vjs-poster{display:block}.video-js .vjs-live-control{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-moz-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-flex:1;-webkit-flex:auto;-moz-box-flex:1;-ms-flex:auto;flex:auto;font-size:1em;line-height:3em}.vjs-no-flex .vjs-live-control{display:table-cell;width:auto;text-align:left}.video-js.vjs-liveui .vjs-live-control,.video-js:not(.vjs-live) .vjs-live-control{display:none}.video-js .vjs-seek-to-live-control{-webkit-box-align:center;-webkit-align-items:center;-moz-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;-webkit-box-flex:0;-webkit-flex:none;-moz-box-flex:0;-ms-flex:none;flex:none;display:-webkit-inline-box;display:-webkit-inline-flex;display:-moz-inline-box;display:-ms-inline-flexbox;display:inline-flex;height:100%;padding-left:.5em;padding-right:.5em;font-size:1em;line-height:3em;width:auto;min-width:4em}.vjs-no-flex .vjs-seek-to-live-control{display:table-cell;width:auto;text-align:left}.video-js.vjs-live:not(.vjs-liveui) .vjs-seek-to-live-control,.video-js:not(.vjs-live) .vjs-seek-to-live-control{display:none}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge{cursor:auto}.vjs-seek-to-live-control .vjs-icon-placeholder{margin-right:.5em;color:#888}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge .vjs-icon-placeholder{color:red}.video-js .vjs-time-control{-webkit-box-flex:0;-webkit-flex:none;-moz-box-flex:0;-ms-flex:none;flex:none;font-size:1em;line-height:3em;min-width:2em;width:auto;padding-left:1em;padding-right:1em}.vjs-live .vjs-time-control{display:none}.video-js .vjs-current-time,.vjs-no-flex .vjs-current-time{display:none}.video-js .vjs-duration,.vjs-no-flex .vjs-duration{display:none}.vjs-time-divider{display:none;line-height:3em}.vjs-live .vjs-time-divider{display:none}.video-js .vjs-play-control{cursor:pointer}.video-js .vjs-play-control .vjs-icon-placeholder{-webkit-box-flex:0;-webkit-flex:none;-moz-box-flex:0;-ms-flex:none;flex:none}.vjs-text-track-display{position:absolute;bottom:3em;left:0;right:0;top:0;pointer-events:none}.video-js.vjs-controls-disabled .vjs-text-track-display,.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display{bottom:1em}.video-js .vjs-text-track{font-size:1.4em;text-align:center;margin-bottom:.1em}.vjs-subtitles{color:#fff}.vjs-captions{color:#fc6}.vjs-tt-cue{display:block}video::-webkit-media-text-track-display{-webkit-transform:translateY(-3em);transform:translateY(-3em)}.video-js.vjs-controls-disabled video::-webkit-media-text-track-display,.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display{-webkit-transform:translateY(-1.5em);transform:translateY(-1.5em)}.video-js .vjs-picture-in-picture-control{cursor:pointer;-webkit-box-flex:0;-webkit-flex:none;-moz-box-flex:0;-ms-flex:none;flex:none}.video-js.vjs-audio-only-mode .vjs-picture-in-picture-control{display:none}.video-js .vjs-fullscreen-control{cursor:pointer;-webkit-box-flex:0;-webkit-flex:none;-moz-box-flex:0;-ms-flex:none;flex:none}.video-js.vjs-audio-only-mode .vjs-fullscreen-control{display:none}.vjs-playback-rate .vjs-playback-rate-value,.vjs-playback-rate>.vjs-menu-button{position:absolute;top:0;left:0;width:100%;height:100%}.vjs-playback-rate .vjs-playback-rate-value{pointer-events:none;font-size:1.5em;line-height:2;text-align:center}.vjs-playback-rate .vjs-menu{width:4em;left:0}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:1.4em;text-align:center}.vjs-error .vjs-error-display:before{color:#fff;content:"X";font-family:Arial,Helvetica,sans-serif;font-size:4em;left:0;line-height:1;margin-top:-.5em;position:absolute;text-shadow:.05em .05em .1em #000;text-align:center;top:50%;vertical-align:middle;width:100%}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;margin:-25px 0 0 -25px;opacity:.85;text-align:left;border:6px solid rgba(43,51,63,.7);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;width:50px;height:50px;-webkit-border-radius:25px;-moz-border-radius:25px;border-radius:25px;visibility:hidden}.vjs-seeking .vjs-loading-spinner,.vjs-waiting .vjs-loading-spinner{display:block;-webkit-animation:vjs-spinner-show 0s linear .3s forwards;-moz-animation:vjs-spinner-show 0s linear .3s forwards;animation:vjs-spinner-show 0s linear .3s forwards}.vjs-loading-spinner:after,.vjs-loading-spinner:before{content:"";position:absolute;margin:-6px;-webkit-box-sizing:inherit;-moz-box-sizing:inherit;box-sizing:inherit;width:inherit;height:inherit;-webkit-border-radius:inherit;-moz-border-radius:inherit;border-radius:inherit;opacity:1;border:inherit;border-color:transparent;border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:after,.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:before{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;-moz-animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:before{border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:after{border-top-color:#fff;-webkit-animation-delay:.44s;-moz-animation-delay:.44s;animation-delay:.44s}@-moz-keyframes vjs-spinner-show{to{visibility:visible}}@keyframes vjs-spinner-show{to{visibility:visible}}@-webkit-keyframes vjs-spinner-show{to{visibility:visible}}@-moz-keyframes vjs-spinner-spin{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes vjs-spinner-spin{100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes vjs-spinner-spin{100%{-webkit-transform:rotate(360deg)}}@-moz-keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}@keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}@-webkit-keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}.video-js.vjs-audio-only-mode .vjs-captions-button{display:none}.vjs-chapters-button .vjs-menu ul{width:24em}.video-js.vjs-audio-only-mode .vjs-descriptions-button{display:none}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder{vertical-align:middle;display:inline-block;margin-bottom:-.1em}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{font-family:VideoJS;content:"";font-size:1.5em;line-height:inherit}.video-js.vjs-audio-only-mode .vjs-subs-caps-button{display:none}.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder{vertical-align:middle;display:inline-block;margin-bottom:-.1em}.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{font-family:VideoJS;content:" ";font-size:1.5em;line-height:inherit}.video-js.vjs-layout-small .vjs-current-time,.video-js.vjs-layout-small .vjs-duration,.video-js.vjs-layout-small .vjs-playback-rate,.video-js.vjs-layout-small .vjs-remaining-time,.video-js.vjs-layout-small .vjs-time-divider,.video-js.vjs-layout-small .vjs-volume-control,.video-js.vjs-layout-tiny .vjs-current-time,.video-js.vjs-layout-tiny .vjs-duration,.video-js.vjs-layout-tiny .vjs-playback-rate,.video-js.vjs-layout-tiny .vjs-remaining-time,.video-js.vjs-layout-tiny .vjs-time-divider,.video-js.vjs-layout-tiny .vjs-volume-control,.video-js.vjs-layout-x-small .vjs-current-time,.video-js.vjs-layout-x-small .vjs-duration,.video-js.vjs-layout-x-small .vjs-playback-rate,.video-js.vjs-layout-x-small .vjs-remaining-time,.video-js.vjs-layout-x-small .vjs-time-divider,.video-js.vjs-layout-x-small .vjs-volume-control{display:none}.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover{width:auto;width:initial}.video-js.vjs-layout-tiny .vjs-progress-control,.video-js.vjs-layout-x-small .vjs-progress-control{display:none}.video-js.vjs-layout-x-small .vjs-custom-control-spacer{-webkit-box-flex:1;-webkit-flex:auto;-moz-box-flex:1;-ms-flex:auto;flex:auto;display:block}.video-js.vjs-layout-x-small.vjs-no-flex .vjs-custom-control-spacer{width:auto}.vjs-modal-dialog.vjs-text-track-settings{background-color:#2b333f;background-color:rgba(43,51,63,.75);color:#fff;height:70%}.vjs-text-track-settings .vjs-modal-dialog-content{display:table}.vjs-text-track-settings .vjs-track-settings-colors,.vjs-text-track-settings .vjs-track-settings-controls,.vjs-text-track-settings .vjs-track-settings-font{display:table-cell}.vjs-text-track-settings .vjs-track-settings-controls{text-align:right;vertical-align:bottom}@supports (display:grid){.vjs-text-track-settings .vjs-modal-dialog-content{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr;padding:20px 24px 0 24px}.vjs-track-settings-controls .vjs-default-button{margin-bottom:20px}.vjs-text-track-settings .vjs-track-settings-controls{grid-column:1/-1}.vjs-layout-small .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-tiny .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-x-small .vjs-text-track-settings .vjs-modal-dialog-content{grid-template-columns:1fr}}.vjs-track-setting>select{margin-right:1em;margin-bottom:.5em}.vjs-text-track-settings fieldset{margin:5px;padding:3px;border:none}.vjs-text-track-settings fieldset span{display:inline-block}.vjs-text-track-settings fieldset span>select{max-width:7.3em}.vjs-text-track-settings legend{color:#fff;margin:0 0 5px 0}.vjs-text-track-settings .vjs-label{position:absolute;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);display:block;margin:0 0 5px 0;padding:0;border:0;height:1px;width:1px;overflow:hidden}.vjs-track-settings-controls button:active,.vjs-track-settings-controls button:focus{outline-style:solid;outline-width:medium;background-image:-webkit-gradient(linear,left bottom, left top,color-stop(88%, #fff),to(#73859f));background-image:-webkit-linear-gradient(bottom,#fff 88%,#73859f 100%);background-image:-moz-linear-gradient(bottom,#fff 88%,#73859f 100%);background-image:-o-linear-gradient(bottom,#fff 88%,#73859f 100%);background-image:linear-gradient(0deg,#fff 88%,#73859f 100%)}.vjs-track-settings-controls button:hover{color:rgba(43,51,63,.75)}.vjs-track-settings-controls button{background-color:#fff;background-image:-webkit-gradient(linear,left top, left bottom,color-stop(88%, #fff),to(#73859f));background-image:-webkit-linear-gradient(top,#fff 88%,#73859f 100%);background-image:-moz-linear-gradient(top,#fff 88%,#73859f 100%);background-image:-o-linear-gradient(top,#fff 88%,#73859f 100%);background-image:linear-gradient(-180deg,#fff 88%,#73859f 100%);color:#2b333f;cursor:pointer;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.vjs-track-settings-controls .vjs-default-button{margin-right:1em}@media print{.video-js>:not(.vjs-tech):not(.vjs-poster){visibility:hidden}}.vjs-resize-manager{position:absolute;top:0;left:0;width:100%;height:100%;border:none;z-index:-1000}.js-focus-visible .video-js :focus:not(.focus-visible){outline:0}.video-js :focus:not(:focus-visible){outline:0} -@-webkit-keyframes up-next-circle-countdown{from{stroke-dashoffset:185;stroke-dasharray:185}to{stroke-dashoffset:0;stroke-dasharray:185}}@-moz-keyframes up-next-circle-countdown{from{stroke-dashoffset:185;stroke-dasharray:185}to{stroke-dashoffset:0;stroke-dasharray:185}}@keyframes up-next-circle-countdown{from{stroke-dashoffset:185;stroke-dasharray:185}to{stroke-dashoffset:0;stroke-dasharray:185}}@-webkit-keyframes media-slider-reveal{0%{opacity:0}100%{opacity:1}}@-moz-keyframes media-slider-reveal{0%{opacity:0}100%{opacity:1}}@keyframes media-slider-reveal{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes media-item-reveal{0%{opacity:0;-webkit-transform:scale(0.2);transform:scale(0.2)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@-moz-keyframes media-item-reveal{0%{opacity:0;-moz-transform:scale(0.2);transform:scale(0.2)}100%{opacity:1;-moz-transform:scale(1);transform:scale(1)}}@keyframes media-item-reveal{0%{opacity:0;-webkit-transform:scale(0.2);-moz-transform:scale(0.2);-o-transform:scale(0.2);transform:scale(0.2)}100%{opacity:1;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}.video-player{position:relative;height:100%}.video-player{outline-color:rgba(0,0,0,0);outline-color:transparent}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-left{z-index:3}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-bottom-right{bottom:16px}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-right{opacity:0;visibility:hidden;display:block;-webkit-animation:media-slider-reveal .4s linear;-moz-animation:media-slider-reveal .4s linear;animation:media-slider-reveal .4s linear;top:12px;left:12px;bottom:48px;z-index:3}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-bottom-left{display:none;-webkit-animation:media-slider-reveal .1s linear;-moz-animation:media-slider-reveal .1s linear;animation:media-slider-reveal .1s linear;top:12px;right:12px;z-index:2}.embed-wrap .video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-bottom-left{top:52px;top:3.25rem}.video-js.vjs-mediacms.vjs-has-started.vjs-paused .vjs-corner-layer.vjs-corner-bottom-left{display:block}.video-js.vjs-mediacms .up-next-loader{position:absolute;top:-12px;left:-12px;right:-12px;bottom:-48px;display:block;background-color:#000}.video-js.vjs-mediacms .up-next-loader .next-media-poster{position:absolute;top:0;left:0;right:0;bottom:0;display:block;opacity:.4;background-position:center;background-repeat:no-repeat;-moz-background-size:contain;background-size:contain;-webkit-filter:blur(4px);filter:blur(4px)}.video-js.vjs-mediacms .up-next-loader-inner{position:relative;width:100%;height:100%;display:table;text-align:center;line-height:1.3;font-family:Roboto,Arial,Helvetica,sans-serif}.video-js.vjs-mediacms .up-next-loader-inner>div{width:100%;height:100%;padding:6px 12px 48px 12px;display:table-cell;vertical-align:middle}.video-js.vjs-mediacms .up-next-loader-inner .up-next-label{margin-bottom:8px;font-size:1.184615em;color:rgba(255,255,255,.7)}.video-js.vjs-mediacms .up-next-loader-inner .next-media-title{margin:0 20px;padding:0 0 2px;font-weight:500;font-size:1.69231em;color:#eee;line-height:1.3;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;background-color:transparent;display:block;max-height:3.9;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;white-space:normal}@media screen and (max-width: 688px){.video-js.vjs-mediacms .up-next-loader-inner .next-media-title{font-size:21px;line-height:1.3;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;background-color:transparent;display:block;max-height:1.3;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;white-space:normal}}@media screen and (max-width: 491px){.video-js.vjs-mediacms .up-next-loader-inner .next-media-title{font-size:19px}}.video-js.vjs-mediacms .up-next-loader-inner .next-media-author{margin-bottom:10px;font-size:1.1em;color:#fff}@media screen and (max-width: 491px){.video-js.vjs-mediacms .up-next-loader-inner .next-media-author{margin-bottom:5px}}.video-js.vjs-mediacms .up-next-loader-inner .up-next-cancel button{padding:10px 20px;font-size:15.4px;font-weight:500;line-height:20.02px;word-spacing:0;color:#eee;outline-width:0;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.video-js.vjs-mediacms .up-next-loader-inner .up-next-cancel button:hover{background-color:rgba(255,255,255,.15)}@media screen and (max-width: 688px){.video-js.vjs-mediacms .up-next-loader-inner .up-next-cancel button{padding:8px 16px;font-size:14.3px;line-height:18.59px}}.video-js.vjs-mediacms .up-next-loader-inner .go-next{padding:16px 0}@media screen and (max-width: 688px){.video-js.vjs-mediacms .up-next-loader-inner .go-next{padding:12px 0}}.video-js.vjs-mediacms .up-next-loader-inner .go-next a{position:relative;display:inline-block;text-decoration:none;width:56px;height:56px;line-height:56px;overflow:visible;color:#fff;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}@media screen and (max-width: 688px){.video-js.vjs-mediacms .up-next-loader-inner .go-next a{width:48px;height:48px;line-height:48px}}.video-js.vjs-mediacms .up-next-loader-inner .go-next a span{position:absolute;top:0;left:0;width:100%;height:100%;display:block;background-color:#fff;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;opacity:.3}.video-js.vjs-mediacms .up-next-loader-inner .go-next a i.material-icons{margin-top:-1px;font-size:32px}@media screen and (max-width: 688px){.video-js.vjs-mediacms .up-next-loader-inner .go-next a i.material-icons{font-size:32px}}.video-js.vjs-mediacms .up-next-loader-inner .go-next svg.radial-timer{display:none;position:absolute;top:-4px;left:-4px;width:64px;height:64px;-webkit-transform:rotateZ(-90deg);-moz-transform:rotateZ(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotateZ(-90deg);transform:rotateZ(-90deg)}.video-js.vjs-mediacms .up-next-loader-inner .go-next svg.radial-timer circle{visibility:hidden;stroke-dasharray:0;stroke-dashoffset:185;stroke-linecap:square;stroke-width:4px;stroke:#fff;fill:none;-webkit-animation:up-next-circle-countdown 10s linear forwards;-moz-animation:up-next-circle-countdown 10s linear forwards;animation:up-next-circle-countdown 10s linear forwards}.video-js.vjs-mediacms .up-next-loader-inner .go-next svg.radial-timer circle:first-child{visibility:visible}@media screen and (max-width: 688px){.video-js.vjs-mediacms .up-next-loader-inner .go-next svg.radial-timer{width:56px;height:56px}.video-js.vjs-mediacms .up-next-loader-inner .go-next svg.radial-timer circle{stroke-width:3px;visibility:visible}.video-js.vjs-mediacms .up-next-loader-inner .go-next svg.radial-timer circle:first-child{visibility:hidden}}.video-js.vjs-mediacms.vjs-mediacms-canceled-next .up-next-loader-inner .go-next svg.radial-timer circle{display:none;-webkit-animation:none;-moz-animation:none;animation:none}.video-js.vjs-mediacms .more-media{display:block;font-family:Roboto,Arial,Helvetica,sans-serif}.video-js.vjs-mediacms.vjs-fullscreen .more-media{font-size:.8125em}.video-js.vjs-mediacms .more-media-item{position:relative;display:inline-block}.video-js.vjs-mediacms .more-media-item>*{display:block;color:#fff;text-decoration:none}.video-js.vjs-mediacms .more-media-item.before-more-media-item-load{opacity:0;-webkit-transform:scale(0.2);-moz-transform:scale(0.2);-ms-transform:scale(0.2);-o-transform:scale(0.2);transform:scale(0.2);-webkit-animation:media-item-reveal .3s linear forwards;-moz-animation:media-item-reveal .3s linear forwards;animation:media-item-reveal .3s linear forwards;-webkit-animation-delay:-webkit-calc(var(--n) * 0.075s);-moz-animation-delay:-moz-calc(var(--n) * 0.075s);animation-delay:calc(var(--n) * 0.075s)}.video-js.vjs-mediacms .more-media-item-thumb{display:block;background-position:center;-moz-background-size:cover;background-size:cover}.video-js.vjs-mediacms .more-media-duration{position:absolute;bottom:0;right:0;padding:4px}.video-js.vjs-mediacms .more-media-duration>*{display:inline-block;padding:.181819em;font-size:.84615em;line-height:1;font-weight:500;background-color:#000;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;opacity:.75}.video-js.vjs-mediacms .more-media-item-content{position:relative;display:block;width:100%}.video-js.vjs-mediacms .more-media-title{font-weight:500}.video-js.vjs-mediacms .more-media-meta{display:block;font-size:.84615em;line-height:1.30001;margin-top:2px}.video-js.vjs-mediacms .more-media-meta>*~*:before{content:"•";content:"•";margin:0 4px}.video-js.vjs-mediacms .more-media.full-wrapper{position:absolute;top:4px;left:0;right:0;bottom:4px;padding:1em 1.5em 1.5em}.embed-wrap .video-js.vjs-mediacms .more-media.full-wrapper{padding:2em 3em 3em}.video-js.vjs-mediacms .more-media.full-wrapper:before{content:"";position:absolute;top:-100%;left:-100%;right:-100%;bottom:-100%;display:block;background-color:rgba(0,0,0,.9)}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-1 .more-media-item{width:100%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-2 .more-media-item{width:50%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-3 .more-media-item{width:33.3333333333%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-4 .more-media-item{width:25%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-5 .more-media-item{width:20%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-6 .more-media-item{width:16.6666666667%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-row-1 .more-media-item{height:100%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-row-2 .more-media-item{height:50%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-row-3 .more-media-item{height:33.3333333333%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-row-4 .more-media-item{height:25%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-row-5 .more-media-item{height:20%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-row-6 .more-media-item{height:16.6666666667%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-1.grid-row-1 .more-media-item:nth-child(n+2){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-1.grid-row-2 .more-media-item:nth-child(n+3){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-1.grid-row-3 .more-media-item:nth-child(n+4){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-1.grid-row-4 .more-media-item:nth-child(n+5){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-1.grid-row-5 .more-media-item:nth-child(n+6){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-1.grid-row-6 .more-media-item:nth-child(n+7){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-2.grid-row-1 .more-media-item:nth-child(n+3){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-2.grid-row-2 .more-media-item:nth-child(n+5){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-2.grid-row-3 .more-media-item:nth-child(n+7){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-2.grid-row-4 .more-media-item:nth-child(n+9){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-2.grid-row-5 .more-media-item:nth-child(n+11){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-2.grid-row-6 .more-media-item:nth-child(n+13){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-3.grid-row-1 .more-media-item:nth-child(n+4){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-3.grid-row-2 .more-media-item:nth-child(n+7){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-3.grid-row-3 .more-media-item:nth-child(n+10){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-3.grid-row-4 .more-media-item:nth-child(n+13){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-3.grid-row-5 .more-media-item:nth-child(n+16){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-3.grid-row-6 .more-media-item:nth-child(n+19){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-4.grid-row-1 .more-media-item:nth-child(n+5){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-4.grid-row-2 .more-media-item:nth-child(n+9){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-4.grid-row-3 .more-media-item:nth-child(n+13){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-4.grid-row-4 .more-media-item:nth-child(n+17){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-4.grid-row-5 .more-media-item:nth-child(n+21){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-4.grid-row-6 .more-media-item:nth-child(n+25){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-5.grid-row-1 .more-media-item:nth-child(n+6){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-5.grid-row-2 .more-media-item:nth-child(n+11){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-5.grid-row-3 .more-media-item:nth-child(n+16){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-5.grid-row-4 .more-media-item:nth-child(n+21){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-5.grid-row-5 .more-media-item:nth-child(n+26){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-5.grid-row-6 .more-media-item:nth-child(n+31){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-6.grid-row-1 .more-media-item:nth-child(n+7){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-6.grid-row-2 .more-media-item:nth-child(n+13){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-6.grid-row-3 .more-media-item:nth-child(n+19){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-6.grid-row-4 .more-media-item:nth-child(n+25){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-6.grid-row-5 .more-media-item:nth-child(n+31){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-6.grid-row-6 .more-media-item:nth-child(n+37){display:none}.video-js.vjs-mediacms .more-media.full-wrapper>div{position:relative;width:100%;height:100%;display:block}.video-js.vjs-mediacms .more-media.full-wrapper>div>*{position:relative;width:100%;height:100%;display:block}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-item{float:left}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-item>*{top:2px;left:2px;right:2px;bottom:2px}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-wrap-title,.video-js.vjs-mediacms .more-media.full-wrapper .prev-slide,.video-js.vjs-mediacms .more-media.full-wrapper .next-slide,.video-js.vjs-mediacms .more-media.full-wrapper .close-more-videos,.video-js.vjs-mediacms .more-media.full-wrapper .open-more-videos,.video-js.vjs-mediacms .more-media.inline-slider-small .more-media-wrap-title,.video-js.vjs-mediacms .more-media.inline-slider-small .prev-slide,.video-js.vjs-mediacms .more-media.inline-slider-small .next-slide,.video-js.vjs-mediacms .more-media.inline-slider-small .close-more-videos,.video-js.vjs-mediacms .more-media.inline-slider-small .open-more-videos{display:none}.video-js.vjs-mediacms .more-media.inline-slider,.video-js.vjs-mediacms .more-media.inline-slider-small{position:absolute;bottom:4px;left:0;right:0}.video-js.vjs-mediacms .more-media.inline-slider>div,.video-js.vjs-mediacms .more-media.inline-slider-small>div{position:relative}.video-js.vjs-mediacms .more-media.inline-slider>div>*,.video-js.vjs-mediacms .more-media.inline-slider-small>div>*{position:relative;overflow:hidden;white-space:nowrap;-webkit-overflow-scrolling:touch;scroll-behavior:smooth}.video-js.vjs-mediacms .more-media.inline-slider .more-media-item,.video-js.vjs-mediacms .more-media.inline-slider-small .more-media-item{vertical-align:top;width:188px}.video-js.vjs-mediacms .more-media.inline-slider{padding:12px 26px 16px;background-color:rgba(23,23,23,.9);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.video-js.vjs-mediacms .more-media.inline-slider .more-media-wrap-title{position:relative;display:block;font-size:1.076925em;font-weight:600;font-stretch:100%;line-height:1.428574;margin:0 0 12px;color:#eee}.video-js.vjs-mediacms .more-media.inline-slider .more-media-item{height:100px}.video-js.vjs-mediacms .more-media.inline-slider .more-media-item>*{top:0;left:0;right:8px;bottom:0}.video-js.vjs-mediacms .more-media.inline-slider .prev-slide,.video-js.vjs-mediacms .more-media.inline-slider .next-slide{position:absolute;top:50%;margin-top:-20px;font-size:1.75em}.video-js.vjs-mediacms .more-media.inline-slider .prev-slide button,.video-js.vjs-mediacms .more-media.inline-slider .next-slide button{width:40px;height:40px;line-height:40px;background-color:#333;-webkit-box-shadow:0 1px 5px rgba(0,0,0,.2);-moz-box-shadow:0 1px 5px rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.2)}.video-js.vjs-mediacms .more-media.inline-slider .prev-slide{left:-20px}.video-js.vjs-mediacms .more-media.inline-slider .next-slide{right:-20px}.video-js.vjs-mediacms .more-media.inline-slider-small>div>*{overflow:auto}.video-js.vjs-mediacms .more-media.inline-slider-small .more-media-item>*{margin-right:10px}.video-js.vjs-mediacms .more-media.inline-slider-small .more-media-item-thumb{position:relative;height:100px}.video-js.vjs-mediacms .more-media.inline-slider-small .more-media-item-content{padding:10px 0}.video-js.vjs-mediacms .more-media.inline-slider-small .more-media-duration>*{padding:.4545475em .363638em;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.video-js.vjs-mediacms .more-media.inline-slider-small .more-media-title{line-height:1.198155;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;background-color:transparent;display:block;max-height:1.198155;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;white-space:normal}.video-js.vjs-mediacms .more-media.inline-slider-small .more-media-views{display:none}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-item>*,.video-js.vjs-mediacms .more-media.inline-slider .more-media-item>*{position:absolute}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-item-thumb,.video-js.vjs-mediacms .more-media.inline-slider .more-media-item-thumb{position:absolute;top:0;left:0;width:100%;height:100%}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-item-content,.video-js.vjs-mediacms .more-media.inline-slider .more-media-item-content{height:100%;padding:10px;background-image:-moz-linear-gradient(top, rgba(12, 12, 12, 0.8) 0, transparent 100px);background-image:-o-linear-gradient(top, rgba(12, 12, 12, 0.8) 0, transparent 100px);background-image:-webkit-linear-gradient(top, rgba(12, 12, 12, 0.8) 0, transparent 100px);background-image:linear-gradient(to bottom, rgba(12, 12, 12, 0.8) 0, transparent 100px)}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-item-content,.video-js.vjs-mediacms .more-media.full-wrapper .more-media-duration,.video-js.vjs-mediacms .more-media.inline-slider .more-media-item-content,.video-js.vjs-mediacms .more-media.inline-slider .more-media-duration{opacity:0;will-change:opacity;-webkit-transition-property:opacity;-o-transition-property:opacity;-moz-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:.3s;-moz-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-item>*:hover .more-media-item-content,.video-js.vjs-mediacms .more-media.full-wrapper .more-media-item>*:hover .more-media-duration,.video-js.vjs-mediacms .more-media.inline-slider .more-media-item>*:hover .more-media-item-content,.video-js.vjs-mediacms .more-media.inline-slider .more-media-item>*:hover .more-media-duration{opacity:1}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-title,.video-js.vjs-mediacms .more-media.inline-slider .more-media-title{line-height:1.198155;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;background-color:transparent;display:block;max-height:2.39631;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal}.video-js.vjs-mediacms .more-media.inline-slider.hidden-inline-more-media{right:auto;padding:0}.video-js.vjs-mediacms .more-media.inline-slider.hidden-inline-more-media>div,.video-js.vjs-mediacms .more-media.inline-slider.hidden-inline-more-media .more-media-wrap-title,.video-js.vjs-mediacms .more-media.inline-slider.hidden-inline-more-media .close-more-videos{display:none}.video-js.vjs-mediacms .more-media.inline-slider.hidden-inline-more-media .open-more-videos{display:inline-block}.video-js.vjs-mediacms .open-more-videos{display:none;padding:.85714em 1em;font-size:1.076925em;font-weight:500;font-stretch:100%;line-height:1.428574;color:#eee;border:0;background:none}.video-js.vjs-mediacms .close-more-videos{position:absolute;right:14px;top:0;padding:4px;margin:8px 4px 8px 8px;display:inline-block;font-size:1.538475em;font-weight:500;line-height:1;border:0;background:0}.video-js.vjs-mediacms .more-media{display:none}.embed-wrap .video-js.vjs-mediacms .more-media,.media-embed-wrap .video-js.vjs-mediacms .more-media{display:block}.video-js.vjs-mediacms.vjs-ended .more-media{display:block}.video-js.vjs-mediacms.vjs-ended .vjs-corner-layer.vjs-corner-bottom-left{display:block}.video-js.vjs-mediacms.vjs-ended.vjs-mediacms-has-up-next-view .more-media,.video-js.vjs-mediacms.vjs-ended.vjs-mediacms-has-up-next-view .vjs-corner-layer.vjs-corner-bottom-left{visibility:hidden}.video-js.vjs-mediacms.vjs-ended.vjs-mediacms-has-up-next-view .vjs-corner-layer.vjs-corner-top-right{-webkit-transition-property:all;-o-transition-property:all;-moz-transition-property:all;transition-property:all;-webkit-transition-duration:.4s;-moz-transition-duration:.4s;-o-transition-duration:.4s;transition-duration:.4s;visibility:visible;opacity:1}.video-js.vjs-mediacms.vjs-ended.vjs-mediacms-has-up-next-view .vjs-corner-layer.vjs-corner-top-right svg.radial-timer{display:block}.video-js.vjs-mediacms.vjs-ended.vjs-mediacms-has-up-next-view.vjs-mediacms-up-next-hidden .more-media,.video-js.vjs-mediacms.vjs-ended.vjs-mediacms-has-up-next-view.vjs-mediacms-up-next-hidden .vjs-corner-layer.vjs-corner-bottom-left{visibility:visible}.video-js.vjs-mediacms.vjs-ended.vjs-mediacms-has-up-next-view.vjs-mediacms-up-next-hidden .vjs-corner-layer.vjs-corner-top-right{visibility:hidden;opacity:0}.video-js.vjs-mediacms.vjs-ended.vjs-mediacms-has-up-next-view.vjs-mediacms-up-next-hidden svg.radial-timer{display:none}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder .vjs-play-progress{background-color:var(--brand-color, var(--default-brand-color))}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder .vjs-play-progress:before{color:var(--brand-color, var(--default-brand-color))}.video-js.vjs-mediacms:hover .vjs-big-play-button{background-color:var(--brand-color, var(--default-brand-color))}.video-js.vjs-mediacms.vjs-subtitles-on .vjs-subtitles-control .vjs-icon-placeholder:after{background-color:var(--brand-color, var(--default-brand-color))}.video-js.vjs-mediacms.vjs-audio .vjs-poster{-moz-background-size:contain;background-size:contain}.vjs-corner-layer.vjs-corner-top-left{z-index:4}.vjs-corner-layer.vjs-corner-bottom-right{top:16px}.vjs-visible-share-options .vjs-corner-layer.vjs-corner-bottom-right{z-index:5;display:block;left:16px;bottom:0 !important}button.share-video-btn{position:absolute;top:0;right:0;display:inline-block;text-align:center;padding:0 6px}.vjs-has-started.vjs-user-inactive.vjs-playing button.share-video-btn{display:none !important}button.share-video-btn i.material-icons{font-size:28px}button.share-video-btn span{display:block;padding:4px 0 0;font-size:14px;font-weight:normal}.share-options-wrapper{position:absolute;top:-16px;left:-16px;right:-16px;bottom:-16px;display:none;background-color:rgba(0,0,0,.8)}.vjs-visible-share-options .share-options-wrapper{display:block}.share-options-wrapper .share-options{display:table;table-layout:fixed;width:100%;height:100%;padding-top:12px}.share-options-wrapper .share-options .share-options-inner{position:relative;display:block;display:table-cell;vertical-align:middle;text-align:center;overflow:hidden}.share-options-wrapper .share-options .sh-option{vertical-align:top;position:relative;display:inline-block;padding-right:8px;text-align:center}.share-options-wrapper .share-options .sh-option a,.share-options-wrapper .share-options .sh-option button{padding:5px 5px 2px;margin:1px 0;display:block;text-decoration:none;color:inherit;outline:0;border:0;background:none}.share-options-wrapper .share-options .sh-option a>*:first-child,.share-options-wrapper .share-options .sh-option button>*:first-child{display:block;width:60px;height:60px;line-height:60px;margin:0 auto 8px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;background-position:center;background-repeat:no-repeat}.share-options-wrapper .share-options .sh-option a>*:last-child,.share-options-wrapper .share-options .sh-option button>*:last-child{font-size:13px;line-height:18px;overflow:hidden}.share-options-wrapper .share-options .sh-option a .material-icons,.share-options-wrapper .share-options .sh-option button .material-icons{padding:0;margin:0 0 0 1px;line-height:1;font-size:30px;overflow:hidden;color:#fff}@media screen and (max-width: 1024px){.share-options-wrapper .share-options .sh-option a>*:first-child,.share-options-wrapper .share-options .sh-option button>*:first-child{width:48px;height:48px;line-height:48px;-moz-background-size:24px 24px;background-size:24px 24px}.share-options-wrapper .share-options .sh-option a>*:last-child,.share-options-wrapper .share-options .sh-option button>*:last-child{font-size:13px;line-height:16px}.share-options-wrapper .share-options .sh-option a .material-icons,.share-options-wrapper .share-options .sh-option button .material-icons{font-size:24px}}@media screen and (max-width: 767px){.share-options-wrapper .share-options .sh-option:nth-child(n+6){display:none}}@media screen and (max-width: 479px){.share-options-wrapper .share-options .sh-option:nth-child(n+4){display:none}}@media screen and (max-width: 379px){.share-options-wrapper .share-options .sh-option:nth-child(n+3){display:none}}@media screen and (max-width: 279px){.share-options-wrapper .share-options .sh-option:nth-child(n+2){display:none}}.share-options-wrapper .share-options .share-embed-opt a>*:first-child,.share-options-wrapper .share-options .share-embed-opt button>*:first-child{background-color:#f4f4f4}.share-options-wrapper .share-options .share-embed-opt a .material-icons,.share-options-wrapper .share-options .share-embed-opt button .material-icons{color:#6f6f6f}.share-options-wrapper .share-options .share-fb a>*:first-child,.share-options-wrapper .share-options .share-fb button>*:first-child{background-color:#3b5998;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAMAAAANmfvwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAByUExURQAAAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////15YQcQAAAAldFJOUwDv/H2h5Av1HIP08a9dXifgIuUbCoCsBBDStN7ykomBlOcZgiYhB3iQAAAAdUlEQVQ4y+3QuwKCMAyF4ZYmAYsXBFS8Iuh5/1e0Do5NdvVf+w0nde6fc5tljcJrYtvgnUYIFulbwIf1SiFdCdz1sVUio06GCAR1K+0L4Eh0zRJ8OtvklCXMU3q/MO+yROSZLrqJHJTBcyIP+18W30WiSX6jFy5aDFqlCyGCAAAAAElFTkSuQmCC)}.share-options-wrapper .share-options .share-tw a>*:first-child,.share-options-wrapper .share-options .share-tw button>*:first-child{background-color:#1da1f2;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAMAAAANmfvwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAEmUExURQAAAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9wGqaEAAABhdFJOUwDkQe3zAQL+D3YMY/CuGGX0hz05lLgcNZmSoSn47tyr5+gyfrcdYUW7yOnQjVcNS7qa1QrP5gX9UlnDgW53xQbBetrjCGi+RIlJbYPGJQNOwurgn9Ei9d17fSeoj/ErQILt/8VjAAAA8ElEQVQ4y2NgGLGAjRWJIy3PkmjqwcHAIOSLJGpjiWCryyaCgI9XgJsLkhKrRAsYU1UxEQqcPZkQKuyNEs2tzSBsZZiKxEBGfyRTHIAiJvpsIKYKXAmzO7JzbcFi2pxKXAwacCXeKD4ytoOIsitoasGVOCKr0NMRZEnEAGoophgksmMqEUZRooupIJGRAzV4DTGVSKHFgJ+rE7oSJjQlXMEhaCpEMSIyAU2FjDhmZAuiKuHEliDiIoIQKiSwphmOSAG4ChFWdNkooXjuaB64Ah5uTANCY2IRdjBLimG1hY+fNzwskV1Ajpefj2EUMDAAAAd7bXotJnBBAAAAAElFTkSuQmCC)}.share-options-wrapper .share-options .share-reddit a>*:first-child,.share-options-wrapper .share-options .share-reddit button>*:first-child{background-color:#ff4500;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAMAAAANmfvwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFBUExURQAAAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////26H9vQAAABqdFJOUwDF5PXttuge4gwT9zHUThZf2vMD8UXAeFfLmmxaNwrb6q+iqtYCCLEZYxC1aIJvuyog52Vdh88BBTrMM4+ocKfVKKwl9Lmj3Eot8rec+d2pMBpQ/lSknrJ3s/bYXHrTsPzwaXGS35bmgfvR//llAAAA/klEQVQ4y2NgGAVAwC9mK+AsyubuiVuJhIiTA5NXVpY9biVSbgzCjhxZWay4lVjZAQlRMVdrnCo42SwJudaAA7+8IZ8uK4upCY85Nkk5di4GD2+XLDAIljS2UAMKoABZFW4jxiwkYMbLrSCAooQ3CwsQQlECEZP08QNLhYVD+ChKFEEiHJwMAb5AWpqBIRLEF0SNGG2IUCAzkJZhYAgFUvI8qO7VAWnzDwI7mUkiAqRSGc3TmpiuVUJToiGCoYQPPez0QKJpUqmZCemssVFAtroqRvjaAIXZUqSTZJIz4oBMfS0scRASDTKIORFEsogLY08HMfFMYHlGcfaRnj0B5hlVM2lFOakAAAAASUVORK5CYII=)}.share-options-wrapper .share-options .share-tumblr a>*:first-child,.share-options-wrapper .share-options .share-tumblr button>*:first-child{background-color:#35465c;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAMAAAANmfvwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAACNUExURQAAAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wOLM4UAAAAudFJOUwBZI01MWOMB1PjN4fpX6AJFKgaxvN/84kie9VUJ3iB+3Ar7B1/zr0tWE8O71brPIxWiAAAAlElEQVQ4y+3T2Q6CQAwF0AGVzgAK7gsqCrjr/f/PkxmNby0kPmqfT9J7m1Sp/6ixMZksRlPAk8kCQE8UZViTviQux1rASxLiRL6xAoG+3ziCzwy+IKGOXov0gyNEHReXiPhKJzSVVl00nq4tOYvExa1Eklpy3e7XPPFn1hyiHU9o8j6vsGk4d6KQ0vjLwMTx6ucf9An38RQWgYRfawAAAABJRU5ErkJggg==)}.share-options-wrapper .share-options .share-pinterest a>*:first-child,.share-options-wrapper .share-options .share-pinterest button>*:first-child{background-color:#bd081c;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAMAAAANmfvwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAEvUExURQAAAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////6vRm/YAAABkdFJOUwDUHSjBZQX0/fXce78bwhKp8ife/sBVooz6bM7GqtWAAWtRiREh2/c5le8ZYjUIEMlyMJKU7Abi7mf28yxg+z5v4XY8KgdXX0ywIiBkU6ihAytd3x9QslJ98S27aS74W6NhSyVzU6IoAAAA8ElEQVQ4y+2TRXIDQRAEW9KiGM3MzEwyMzNj/v8Nng3r2Ot9gF2n7Ig8zEzXiPz57Oc31lhI22NhwtEttUyM6sbhFRzsbVUX01AY0AzH4uHmByehr0dRLuFO5DoX8CCkFMXiSeTeny8a7u0npigFnuXRHLUpGGI0Kgp8im2UumBoAUXxeZMPWIob7mjDVZQK7/LiUQl42KVZUU54/boosxnwCLRrD3NG8Rh2DY0nGYpryo59fgrZjDOVhc6QJTklXJaT5lrdYXvc9lhPzeJbXaFdWKW8IrlE5pe6zFCai2hUnumo0rV6iSilof7/b9byDZ5WLQHgKwvDAAAAAElFTkSuQmCC)}.share-options-wrapper .share-options .share-vk a>*:first-child,.share-options-wrapper .share-options .share-vk button>*:first-child{background-color:#4680c2;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAMAAAANmfvwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAEyUExURQAAAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////y3XQVoAAABldFJOUwD58/UHdPfeCA/73AbGQNLASif4Iu9q32O19ioCUm20Pk7LA+rZ5oJRZjIJuUY510RcqJlrF4BghVR85JgLMd3OV76GOPCD+uHb8SCmpIR3/fSd7dC3reLMFQFkN47Rwn+ifuctQEA1MAAAASpJREFUOMvlk2VyAzEMhbXQbbwbarBJyszMlCZlxqTM9f2v0FpyKu9MbxD92feeP2vGshegGete/pY3gzomsbppZTOpTLEHbjAtYDhHSNlFN0ouDjX8eikVLq6jaY0o4ybQxDqgndgl3DhvIHphFeDhDlVeqPiCEXGEekLFL0QvKN3CyDnK9JiKSx6aQISQZwvlMB3umtp8MuKCuEXVFyEkZaO1vxtIPvpYR2FNNaa3Qm3eXI0UnwqUrP0NWAxS8gHv0qwhwZfQq7PXrxAiR4yL2pD/ltPGiEiElq7SWngGs5U1iGwpc6bl8S4zkw4janS5S9KHJ8zEBxhRj6Hik6lGmckkzS4As9rtG8fqX56mMKCNOXJ7oUc63nkaOAf2jrZdtm9Z/nZT/q8/+2CSW2b1+zIAAAAASUVORK5CYII=)}.share-options-wrapper .share-options .share-linkedin a>*:first-child,.share-options-wrapper .share-options .share-linkedin button>*:first-child{background-color:#0077b5;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAMAAAANmfvwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAADAUExURQAAAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wOj5kwAAAA/dFJOUwDtO9fWOjRj0LlD/kr9K9OTvzCLBjNc+B45YpJxQIoP4U7R34kSVVKH8AnO3UYvCB3mLEVoSeh+PCo9Qdk1wa0WUTEAAACgSURBVDjL5dBHDsJADAVQQwglCb333nvv/PvfCpslaJwtUrwY64+eLM8QBbgKmWQ6p5M6gF5bJZBaqqQvZKeS8ALu2Wff9fHqIzb7y/1JdPM8h2ajQatW+SEHXuVF9AC2q7nsFSp9kxjfJojiwMn6vA7llJHIBFfOvJlMx0O7wz1rJhOODe4RM+lydLhbZtKUn9SnVDkWdWJzjP45CVS9AX9hKlcwUFOvAAAAAElFTkSuQmCC)}.share-options-wrapper .share-options .share-mix a>*:first-child,.share-options-wrapper .share-options .share-mix button>*:first-child{background-color:#ff8226;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAMAAAANmfvwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAACTUExURQAAAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9E7JV4AAAAwdFJOUwAV7vMX/P76JPECqkdDdSb3cYwcciM4cPXhTukYEA7vdynyKF/lCeL7OnjtT3MSHhkh8ZcAAACHSURBVDjL7dK3DsJQDIXhPwlpdEKvoSWUBPD7Px0XBqYbs8AEZ7P1SZasAz8cseRrpDhfDjoJSjgdVRLe4BrrJILa58h8PZ7qJJjBKFSJP4RlqpMdrNxq4plDGzMnIg07yTORifNYtJp1O2HvbgfVZXgSFn3eEbVSfkcn5lWxo5Oe123zzyt3Bd0ph0DZVBoAAAAASUVORK5CYII=)}.share-options-wrapper .share-options .share-email a>*:first-child,.share-options-wrapper .share-options .share-email button>*:first-child{background-color:#888}.share-options-wrapper .share-options .share-whatsapp a>*:first-child,.share-options-wrapper .share-options .share-whatsapp button>*:first-child{background-color:#25d366;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3xJREFUeNrMmGtIFFEUx91V0R5m5pYfRNKwtxlh5YcMelAYlEVSURAYQRFFIGWhCEKEQWkRJRFEH4JAoaLHh+yBRiGlIgmlVJhkiGKSVJaaptv/wn/gdJvZnZ3xgxd+3Nk759z9z70755y7Hr/fHzYRWoQD+0ywln0q8AEvGAE94D2oAzXgje2Z1YrYIAYcBc1++20EPAXb7XyHx8bWbAVnwEIx9gW8Bh9AL1djCkgEi8ESMEnYPwLHwVunK1KqPeVzsBvMDOI3F5wE7cK3D+yw8gk02RUxSQ/Is7mNkhmgXMwzCvaFIuS0cG4A8xyIkOwEP4WYbXaE5AoRz0CcSxEG2WBQbNPcQEISQDeNW0H8OIkwyBMPWQ08VkIu0mgIZGr3osEhcAFkuBBzTYjZbCYkCfTT4LLmrJTfEBM0gQiHQnygi/PUmgkp4M0BkKo5q89/tFc528WqFHEONWeaGvOKkJLDXoXnNi3cpIBwbewg8DhMLTfBAOfcGMYcoVoCo2EYc8R/cc9kLB1EOhTSAZp4vVoKSQaxvG4xcWwF/eLzECgCwy4SbjP7+VLILGHQa+LUBe6Iz0pslcvM38neJ4XIBDVi4VgKfvF6KdjjUshv9uFSyIAwmGrhqDJtiahLKkCGCyEx7MekkB5hkBjA+Ty4xevp4D7I0mzUg5SBXJM3TbbZ7L/KMsDH+K/aORtF0gsRT1TcKRE5qVLce8XCyCz41dPmgR7QakTU9NhI70+0APcJ1FlUa2s0/2Q+gGqFupB8Ee1W2oiO0cw7ozbKxjTN9xjHx4y8ZZVrqkII11ngtkjxeivX7CeDNt5rBF6z7HtVFC8bQswfC5ivqllkq73fZWJXLETutSoDtgijChdJzWsxvkqsnFqNSOOeV3ul5ojruy5ixJjJ2CJQCaKZGo78Ezw1xcZr2c4f43hVZutAp1jtw4FqVrXHwzQs0161A3YPShpxLMSHhYjiYFV8oTih7WdZ+Bj8EJPU8GwyLYiAFHACfBS+g5wz4ElP/VbqwXLur9q7qCD1xEuebbtpH8sCahlYIXKJao0gn0VXwJNeukkpqNo7cAnkgFOgwx9aa+HvIcru2fcsKOBqqDPtQ9Ik0rWR6NaDTVy9JCY549+A71ytBvrXsogK2gwh18FncI+Vk50/TdSXx4M4loyDoA98c/K+eybKHzV/BRgAh7+w9CsbY+IAAAAASUVORK5CYII=)}.share-options-wrapper .share-options .share-telegram a>*:first-child,.share-options-wrapper .share-options .share-telegram button>*:first-child{background-color:#08c;background-position:11px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAqtJREFUeNrsmE9LVFEYxueOM6NJiqLpVDgLFaONklBiVBQolZqRJRZlH6Ft22pXy75A+BVs0SaohkrBibDEINLShf0RG7O0dNLb88pz43C9M3POHbNZ+MKPweG95z7n/XfOaNm2HcgHCwbyxPJGSOg/vXcnOAWugmYwYG1xjTSBPtAL6pXvv21FRMpAF+gHJ0DYw2f+Xwo5BC6Dc6Ami+/4ZgupBme4+6PA0nwusRlC5GVH+PKzoCqN3yLZ5SHwRS5CJNw94BJoyeC3BmbBDxD1ELEMxkI+2v04204KsDyLv0TgM8WI8EIPnykwrSukji0nu2/U8F9lFJJgB4hlmFljIJVJSDFoA1fAaQ4hHVugiF+gFOwBBRn8R9JN1v3gIgfPPoO0pShggakoZ01kO0YSqpAS0MHdSxSKDGtHUjBHMWIVbOWARg29cYRI3m+5Rq6uScV/4YIWqWCL6tg78NERchdUGgqQA+oro7CmtGS1RiepNsrn1/MnI/ietJDmw0v0naUgR0TUUMT6IPs7FZXTVyr8MOgG7R6pWmUEkhQQVD53G3SVajKRn7mFqCa9fxB0klrwiTURVCZmiO1Z7EOEpLaBmwvo3EdE1H2KSSkiImBvmmmpY8Og1eSq+BM8V1raZgRiOYgQe+nnzhpnjagHWa6W8CNEqnuGNRHkQSat992nCJvPGwtJMpSFyh1EjvXXzkAyNCn8t35/TjxRWtbmQSYpmuSYnjNYa9wdTRMhQ3LJZTScGgkzXdd4R33sp1BNhUxxJxFGxLmN3wQPGZmT4I7GWiO5CJGXP2UEwvz7Bnig+KyA6+ACC9rLfrO2XKtjoBnQBCZAHLRn8a0Hj+yN9gEUuf1NhcgkPgBimv4RcNslZNDL11SIX86DV+A9OOblY23/f8RlfwQYAHTF0+BsYemdAAAAAElFTkSuQmCC)}.share-options-wrapper .share-options .share-more{display:inline-block !important}@media screen and (min-width: 768px){.share-options-wrapper .share-options .share-more{display:none !important}}.share-options-wrapper .share-options .share-more a>*:first-child,.share-options-wrapper .share-options .share-more button>*:first-child{background-color:rgba(255,255,255,.1)} +@font-face{font-family:MediaCmsVideoJsIcons;src:url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAT4AAsAAAAACMQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPAAAAFY6l0dNY21hcAAAAYAAAABqAAABxPJEI45nbHlmAAAB7AAAANIAAAG4T61UQGhlYWQAAALAAAAALgAAADYZHmTsaGhlYQAAAvAAAAAYAAAAJABcADlobXR4AAADCAAAAA4AAAAgAVAAAGxvY2EAAAMYAAAAEgAAABIBvAEqbWF4cAAAAywAAAAfAAAAIAEVAExuYW1lAAADTAAAAUkAAAKmImr7xXBvc3QAAASYAAAAXwAAAIf4no6XeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGTQYpzAwMrAwCDHoAgk2aC0OAMTAw8DkGBlZsAKAtJcUxgcPjJ+ZGcwAHJZwCQDAyOIAADEDQVjeJztkUEKxEAIBGsyZoSwT1n2QTnlkP/DvGBi6z4jQrXYiIcW2IEefAODdtFQneG29DtH+sYvd0z+9LVCmzRmS91i1+LiwGMcvPVJvf+TK7EiM9wK1HuhX0wrlOrcC/1pjgJ1L/AHpD8V1QAAeJyNkFtvwjAMhe2Y9aJGgFja8gCCNZAweKNcHtC0//+vOAlBDGlIJNEn28cnikOKwtqRpxF9Ep1tl83ZNBfen3744HJ77N1MYd0wc0qZEAFTA+fdb9/0d0rpEAFjDSdH/4JW9AG3z9uzX4jWUn5FJn2Z9LxFg5GyFL2KTPqW1g//pJBqKuPIpDvsKuo+XoEuJ1V1P/ZPjG5JM31jJk+//05l6/7Y1ybbcedQOkFq6vZF/fEDExkMhDljjhg+pxt8augEhshVKBcB6inD467W0Bp+AAB4nGNgZGBgAOJNl8rq4vltvjJwMxgARRjuvJp8Gplm0GbQBJIcDEwgDgBWfAr7AAB4nGNgZGBgMGBggJPaDIwMqIADAA4RAJZ4nGNgAAID3BgAE9ABUQAAAAAAAAAgAEAAUABgAHAAigDcAAB4nGNgZGBg4GBwYGBmAAEmIOYCQgaG/2A+AwAPpwFiAHicjZJNasJAGIbf1J9ShVJo6aabWYlQSNSldCcoCnbhIvuYTDSSZMJkFDxE79Bz9AClJ+hxSl+nsym4cAKT53u+n4RkANzhEx5Oy8OD3U/rCteM/rhBenLcJAeOW+hi4rhN/+q4g2esHXdxjzdO8Jo3NH28O77CLb4cN+i/HTfJP45bePR6jtvoey+OOwi9xHEXPe9jKZMsmhR1mCVSLep5rMp6JTf7PNLnUudcKHWdqVIM/cG59EyWUkdGJmJ9FPVhMzImFalWhZiq0sg8V6LSaidj42+NqcZBkDrvx6rAEhIJMkT8XgVqhOSETmHBaI6YVJJWdBvskbNSX9x1aV1Ip3nPbCwwhI/Bxd0zutJOiGBsj+BfPnKvceBbj2gNUsYpaxRnCUxt76k656VoKpvb0cT0Pra2q8KYpypg5/963z69+AXA8YLbAAAAeJx9x0kKgDAQBdHuOIPDSXKoaL4akERiOxxfceHSWhQ8UvRfyYoTTjnjnAsuuaLaYjT7IvpwOGuZYQTxRefN4aaHuscYIprPHpekNnhkwxI2tO+tHswqLniiGzpGHqcA) format("woff");font-weight:normal;font-style:normal}.vjs-icon-default-view{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.vjs-icon-default-view:before{content:""}.vjs-icon-theater-view{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.vjs-icon-theater-view:before{content:""}.vjs-icon-navigate-before{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.vjs-icon-navigate-before:before{content:""}.vjs-icon-navigate-next{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.vjs-icon-navigate-next:before{content:""}.vjs-icon-done{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.vjs-icon-done:before{content:""}.vjs-icon-close{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.vjs-icon-close:before{content:""}.vjs-icon-closed-caption{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.vjs-icon-closed-caption:before{content:""}@keyframes onHoverFullscreenToggle{50%{font-size:14px;margin-top:-1px}100%{font-size:13px;margin-top:0}}@keyframes onFullscreenHoverFullscreenToggle{50%{font-size:15px;margin-top:1px}100%{font-size:16px;margin-top:0}}@keyframes onDisplayingActionAnimation{0%{transform:scale(0.5)}10%{opacity:1}100%{opacity:0;transform:scale(1.05)}}@keyframes spinner-linear-spin{to{transform:rotate(360deg)}}@keyframes spinner-ease-spin{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(1080deg)}}@keyframes spinner-left-spin{0%{transform:rotate(130deg)}50%{transform:rotate(-5deg)}to{transform:rotate(130deg)}}@keyframes spinner-right-spin{0%{transform:rotate(-130deg)}50%{transform:rotate(5deg)}to{transform:rotate(-130deg)}}@keyframes showPreviewThumb{0%{opacity:0}100%{opacity:1}}.video-js.vjs-mediacms .vjs-subtitles-control .vjs-icon-placeholder{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.video-js.vjs-mediacms .vjs-subtitles-control .vjs-icon-placeholder:before{content:""}.video-js.vjs-mediacms .vjs-theater-mode-control .vjs-icon-placeholder{font-family:MediaCmsVideoJsIcons;font-weight:normal;font-style:normal}.video-js.vjs-mediacms .vjs-theater-mode-control .vjs-icon-placeholder:before{content:""}.video-js.vjs-mediacms .vjs-theater-mode .vjs-theater-mode-control .vjs-icon-placeholder:before{content:""}.video-js.vjs-mediacms{font-size:13px;color:#fff;width:100%;height:100%;overflow:hidden;outline-color:rgba(0,0,0,0);outline-color:transparent}.video-js.vjs-mediacms video{width:100%;height:100%;max-width:100%;max-height:100%;outline-color:rgba(0,0,0,0);outline-color:transparent}.video-js.vjs-mediacms.vjs-native-dimensions video{width:auto;height:auto}.video-js.vjs-mediacms.vjs-error .vjs-error-display{display:table;color:#eee;text-shadow:.05em .05em .1em #000}.video-js.vjs-mediacms.vjs-error .vjs-error-display:before,.video-js.vjs-mediacms.vjs-error .vjs-error-display:after{position:absolute;top:50%;left:.25em;display:block;width:52px;height:52px;line-height:52px;margin-top:-26px;text-align:center;font-size:3em}.video-js.vjs-mediacms.vjs-error .vjs-error-display:before{content:"";border-radius:50%;border:4px solid #fff}.video-js.vjs-mediacms.vjs-error .vjs-error-display:after{content:"!"}.video-js.vjs-mediacms.vjs-error .vjs-error-display .vjs-modal-dialog-content{position:relative;display:table-cell;vertical-align:middle;text-align:initial;padding:16px 1em 16px 80px;font-size:1.384615em;word-break:break-all}.video-js.vjs-mediacms .vjs-left-controls,.video-js.vjs-mediacms .vjs-right-controls{position:relative;width:auto;display:inline-block;height:36px;overflow:hidden}.video-js.vjs-mediacms .vjs-right-controls{float:right}.video-js.vjs-mediacms .vjs-subtitles-control{cursor:pointer}.video-js.vjs-mediacms.vjs-subtitles-on .vjs-subtitles-control .vjs-icon-placeholder:after{content:"";display:block;position:absolute;width:45%;left:27.5%;height:.18em;bottom:50%;margin-bottom:-1em;background-color:#093}.video-js.vjs-mediacms.vjs-subtitles-on.vjs-fullscreen .vjs-subtitles-control .vjs-icon-placeholder:after{width:42%;left:29%}.video-js.vjs-mediacms .vjs-text-track-cue>*{color:#fff !important;fill:#fff;background-color:#080808 !important;background-color:rgba(8,8,8,.75) !important;font-family:Roboto,"Arial Unicode Ms",Arial,Helvetica,Verdana,"PT Sans Caption",sans-serif !important}.video-js.vjs-mediacms .vjs-settings-control{font-size:1.375em;cursor:pointer}.video-js.vjs-mediacms .vjs-settings-panel{position:absolute;bottom:30px;right:0;width:23.75em;min-width:210px;display:none;font-size:.8125em;z-index:1}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-panel-title>[role=button]{position:relative}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-panel-title>[role=button]:focus{outline-color:#fff;outline-style:solid;outline-width:1px}.video-js.vjs-mediacms .vjs-settings-panel:focus{outline:0}.video-js.vjs-mediacms .vjs-settings-panel.vjs-visible-panel{display:block}.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-panel-inner{display:block;margin:0 0 1em;padding:.5em 0;border-radius:.2em;background-color:rgba(28,28,28,.9);text-shadow:0 0 2px rgba(0,0,0,.5);max-height:210px;max-height:50vh;overflow:auto}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-panel-title{color:#eee;padding-bottom:.25em;margin-bottom:.5em;border-bottom:1px solid rgba(255,255,255,.2)}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-panel-title>*:first-child{display:inline-block;padding:.75em 1em;font-size:118%;font-weight:500}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-panel-title>*:first-child[role=button]{padding:.5em 1em .5em 0;margin-left:.75em;margin-bottom:.25em .25em .5em}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-panel-title.vjs-settings-back>*:first-child{cursor:pointer}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-panel-title.vjs-settings-back>*:first-child:before{content:"";font-family:"MediaCmsVideoJsIcons";font-size:1.25em;vertical-align:text-bottom;padding-right:.5em}.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu{display:table;width:100%}.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item{position:relative;display:table-row;width:100%;cursor:pointer;height:3em}.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item:hover,.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item:focus{outline:0;background-color:rgba(255,255,255,.1)}.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item.vjs-selected-quality,.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item.vjs-selected-speed{position:relative}.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item.vjs-selected-quality .vjs-setting-menu-item-content:after,.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item.vjs-selected-speed .vjs-setting-menu-item-content:after{content:"";font-family:"MediaCmsVideoJsIcons";font-size:1.25em;font-weight:normal;vertical-align:text-bottom;padding-left:.5em}.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item.vjs-selected-quality .vjs-setting-menu-item-content .auto-resolution-title,.video-js.vjs-mediacms .vjs-settings-panel .vjs-settings-menu-item.vjs-selected-speed .vjs-setting-menu-item-content .auto-resolution-title{font-weight:lighter;color:#eee}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-menu-item-label,.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-menu-item-content{display:table-cell;vertical-align:middle;padding:0 1em;line-height:1;font-size:118%}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-menu-item-label{font-weight:500}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-menu-item-content{text-align:right;font-weight:700}.video-js.vjs-mediacms .vjs-settings-panel .vjs-setting-menu-item-content.auto-resolution{font-size:109%;font-weight:400}.video-js.vjs-mediacms .vjs-settings-panel.vjs-playback-speed-panel,.video-js.vjs-mediacms .vjs-settings-panel.vjs-resolutions-panel,.video-js.vjs-mediacms .vjs-settings-panel.vjs-subtitles-panel{z-index:1}.video-js.vjs-mediacms .vjs-settings-panel.vjs-playback-speed-panel .vjs-settings-menu-item .vjs-setting-menu-item-content,.video-js.vjs-mediacms .vjs-settings-panel.vjs-resolutions-panel .vjs-settings-menu-item .vjs-setting-menu-item-content,.video-js.vjs-mediacms .vjs-settings-panel.vjs-subtitles-panel .vjs-settings-menu-item .vjs-setting-menu-item-content{text-align:left;padding-left:2.75em}.video-js.vjs-mediacms .vjs-settings-panel.vjs-playback-speed-panel .vjs-settings-menu-item.vjs-selected-menu-item .vjs-setting-menu-item-content,.video-js.vjs-mediacms .vjs-settings-panel.vjs-resolutions-panel .vjs-settings-menu-item.vjs-selected-menu-item .vjs-setting-menu-item-content,.video-js.vjs-mediacms .vjs-settings-panel.vjs-subtitles-panel .vjs-settings-menu-item.vjs-selected-menu-item .vjs-setting-menu-item-content{position:relative;padding-left:.75em}.video-js.vjs-mediacms .vjs-settings-panel.vjs-playback-speed-panel .vjs-settings-menu-item.vjs-selected-menu-item .vjs-setting-menu-item-content:before,.video-js.vjs-mediacms .vjs-settings-panel.vjs-resolutions-panel .vjs-settings-menu-item.vjs-selected-menu-item .vjs-setting-menu-item-content:before,.video-js.vjs-mediacms .vjs-settings-panel.vjs-subtitles-panel .vjs-settings-menu-item.vjs-selected-menu-item .vjs-setting-menu-item-content:before{content:"";font-family:"MediaCmsVideoJsIcons";font-size:1.25em;line-height:.75;padding-right:.5em;float:left}.video-js.vjs-mediacms .vjs-button.vjs-play-control,.video-js.vjs-mediacms .vjs-button.vjs-next-button,.video-js.vjs-mediacms .vjs-button.vjs-previous-button{overflow:hidden;cursor:pointer}.video-js.vjs-mediacms .vjs-button.vjs-next-button,.video-js.vjs-mediacms .vjs-button.vjs-previous-button{font-family:VideoJS;font-weight:400;font-style:normal}.video-js.vjs-mediacms .vjs-button.vjs-next-button .vjs-icon-placeholder:before{content:""}.video-js.vjs-mediacms .vjs-button.vjs-previous-button .vjs-icon-placeholder:before{content:""}.video-js.vjs-mediacms .vjs-big-play-button{width:2.65em;height:1.49062em;line-height:1.49062em;font-size:2.5em;outline:0;border:0;border-radius:.15em;background-color:#000;background-color:rgba(0,0,0,.7);transition-duration:.2s;top:50%;left:50%;margin-left:-1.325em;margin-top:-0.74531em}.video-js.vjs-mediacms.vjs-changing-resolution .vjs-big-play-button{display:none}.video-js.vjs-mediacms .vjs-bottom-bg{position:absolute;bottom:0;left:-12px;right:-12px;height:36px;display:block;pointer-events:none;background:rgba(0,0,0,.1);background:-webkit-gradient(left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(0, 0, 0, 0.55)));background:linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.55) 100%)}.video-js.vjs-mediacms .vjs-control-bar{z-index:4;width:auto;left:12px;right:12px;background:none;text-shadow:0 1px 3px rgba(0,0,0,.05)}.video-js.vjs-mediacms .vjs-control-bar .vjs-button:focus{outline-width:0}.video-js.vjs-mediacms .vjs-control-bar .vjs-button[key-focus]:focus:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;display:block;border-radius:1px;border:2px solid rgba(255,255,255,.75)}.video-js.vjs-mediacms .vjs-control-bar .vjs-button .vjs-icon-placeholder:before{margin-top:-2px}.video-js.vjs-mediacms .vjs-menu-button .vjs-menu-content{background-color:#000;background-color:rgba(0,0,0,.7)}.video-js.vjs-mediacms .vjs-slider{background-color:#fff;background-color:rgba(255,255,255,.25)}.video-js.vjs-mediacms .vjs-slider:focus{text-shadow:none;box-shadow:none}.video-js.vjs-mediacms .vjs-slider-bar{background:rgba(255,255,255,.25)}.video-js.vjs-mediacms .vjs-slider-bar.vjs-play-progress{background-color:#fff}.video-js.vjs-mediacms .vjs-load-progress{background:none}.video-js.vjs-mediacms .vjs-load-progress div{background-color:#fff;background-color:rgba(255,255,255,.25)}.video-js.vjs-mediacms .vjs-volume-level{background:#fff}.video-js.vjs-mediacms .vjs-volume-level:before{line-height:1;top:-4px;font-size:12px}.video-js.vjs-mediacms .vjs-time-divider,.video-js.vjs-mediacms .vjs-duration,.video-js.vjs-mediacms .vjs-current-time,.video-js.vjs-mediacms.vjs-no-flex .vjs-duration,.video-js.vjs-mediacms.vjs-no-flex .vjs-current-time{display:block}.video-js.vjs-mediacms .vjs-current-time{margin-left:.45em}.video-js.vjs-mediacms .vjs-control{display:inline-block;float:left;padding:0;min-width:0;width:36px;line-height:34px;text-shadow:0 1px 3px rgba(0,0,0,.05)}.video-js.vjs-mediacms .vjs-control:focus:before,.video-js.vjs-mediacms .vjs-control:hover:before,.video-js.vjs-mediacms .vjs-control:focus{text-shadow:0 1px 3px rgba(0,0,0,.05)}.video-js.vjs-mediacms .vjs-control.vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before{margin-left:-0.17em}.video-js.vjs-mediacms .vjs-control.vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before{margin-left:-0.08em}.video-js.vjs-mediacms .vjs-control.vjs-disabled.vjs-picture-in-picture-control{display:none}.video-js.vjs-mediacms .vjs-progress-control{position:absolute;top:-0.3em;left:0;display:block;flex:none;width:100%;height:auto;z-index:1;padding-top:29px;height:30px;-webkit-tap-highlight-color:transparent;-moz-tap-highlight-color:transparent;-o-tap-highlight-color:transparent;tap-highlight-color:transparent}.video-js.vjs-mediacms .vjs-progress-control .vjs-play-progress .vjs-time-tooltip,.video-js.vjs-mediacms .vjs-progress-control .vjs-mouse-display .vjs-time-tooltip{line-height:1;font-size:11px;font-weight:600;height:auto;padding:8px 12px;border-radius:2px}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder{height:.3em;margin:0;box-shadow:0 1px 3px 0 rgba(0,0,0,.05)}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder:focus{outline-width:0}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder[key-focus]:focus:after{content:"";position:absolute;top:-3px;left:-3px;right:-3px;bottom:-3px;display:block;border-radius:1px;border:2px solid rgba(255,255,255,.75)}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder .vjs-play-progress{line-height:1em}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder .vjs-play-progress:before{top:50%;margin-top:-0.5em;text-shadow:0 1px 3px rgba(0,0,0,.05)}.video-js.vjs-mediacms .vjs-progress-control .vjs-play-progress:before{font-size:1em;display:none}.video-js.vjs-mediacms .vjs-progress-control:hover .vjs-play-progress:before,.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder:focus .vjs-play-progress:before{display:block}.video-js.vjs-mediacms .vjs-progress-control:hover .vjs-progress-holder,.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder:focus{font-size:1.2875em}.video-js.vjs-mediacms .vjs-progress-control:hover .vjs-play-progress .vjs-time-tooltip,.video-js.vjs-mediacms .vjs-progress-control:hover .vjs-progress-holder:focus .vjs-play-progress .vjs-time-tooltip{display:none}.video-js.vjs-mediacms .vjs-time-control{display:inline-block;float:left;min-width:0;height:36px;line-height:34px;width:auto;padding:1px 0 0;text-align:center;font-size:.975em}.video-js.vjs-mediacms .vjs-time-control.vjs-time-divider{min-width:1em;text-align:center}.video-js.vjs-mediacms .vjs-fullscreen-control{overflow:hidden;cursor:pointer}.video-js.vjs-mediacms .vjs-fullscreen-control:hover{animation-duration:.4s;animation-name:onHoverFullscreenToggle}.video-js.vjs-mediacms .vjs-theater-mode-control{overflow:hidden;cursor:pointer}.video-js.vjs-mediacms .vjs-volume-panel.vjs-volume-panel-horizontal{min-width:36px;width:0;overflow:hidden}.video-js.vjs-mediacms .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-mediacms .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-mediacms .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active{width:9em;transition:all 0s}.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control{position:absolute;top:0;left:36px;height:36px;width:0;visibility:visible;opacity:1}.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{margin-left:.45em;margin-right:.45em;transition:all 0s}.video-js.vjs-mediacms .vjs-volume-panel:hover .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control:hover.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-mute-control:hover~.vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal{position:absolute;width:5.5em;height:36px}.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-bar:focus{outline-width:0}.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-bar[key-focus]:focus:after{content:"";position:absolute;top:-1em;left:-0.5em;right:-0.5em;bottom:-1em;display:block;border-radius:1px;border:2px solid rgba(255,255,255,.75)}.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-bar.vjs-slider-horizontal{margin:16.5px .45em 16.5px 0}.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-bar.vjs-slider-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{height:3px}.video-js.vjs-mediacms .vjs-volume-panel.vjs-volume-panel-horizontal,.video-js.vjs-mediacms .vjs-volume-panel.vjs-volume-panel-horizontal:hover{transition:width .35s linear}.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel:hover .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control:hover.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-mute-control:hover~.vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal{transition:width .2s linear;transition-delay:.15s}.video-js.vjs-mediacms .vjs-actions-anim{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:absolute;top:50%;left:50%;width:7.375em;height:7.375em;line-height:7.375em;margin-top:-3.6875em;margin-left:-3.6875em;display:block;text-align:center;border-radius:50%;color:#eee;background-color:rgba(0,0,0,.25);visibility:hidden;opacity:0}.video-js.vjs-mediacms .vjs-actions-anim span{display:block}.video-js.vjs-mediacms .vjs-actions-anim span:after{content:"";font-family:VideoJS;font-weight:normal;font-style:normal;font-size:42px}.video-js.vjs-mediacms .vjs-actions-anim.just-paused span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.started-playing span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.volume-high span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.volume-mid span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.volume-low span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.volume-mute span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.moving-backward span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.moving-forward span{transform:scale(-1, 1)}.video-js.vjs-mediacms .vjs-actions-anim.moving-forward span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.moving-backward:before,.video-js.vjs-mediacms .vjs-actions-anim.moving-forward:before{content:"5";position:absolute;top:2px;left:0;right:0;bottom:0;display:block;font-size:10px;font-weight:700;font-family:Arial,sans-serif}.video-js.vjs-mediacms .vjs-actions-anim.play_previous span:after{content:""}.video-js.vjs-mediacms .vjs-actions-anim.play_next span:after{content:""}.video-js.vjs-mediacms .vjs-corner-layer{position:absolute;display:block;z-index:1}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-left,.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-right{top:12px}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-bottom-left,.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-bottom-right{bottom:12px;transition-duration:.1s;transition-property:bottom}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-left,.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-bottom-left{left:12px}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-right,.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-bottom-right{right:12px}.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel.vjs-volume-panel-horizontal,.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel.vjs-volume-panel-horizontal:hover{transition:width 0s linear}.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel:hover .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel .vjs-volume-control:hover.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel .vjs-mute-control:hover~.vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen-change .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal{transition:width 0s linear;transition-delay:0s}.video-js.vjs-mediacms.vjs-has-started .vjs-control-bar,.video-js.vjs-mediacms.vjs-changing-resolution .vjs-control-bar{display:block;height:66px;padding-top:30px;transition-duration:.1s;transition-property:transform,opacity,visibility}.video-js.vjs-mediacms.vjs-has-started .vjs-actions-anim.active-anim,.video-js.vjs-mediacms.vjs-changing-resolution .vjs-actions-anim.active-anim{visibility:visible;animation-duration:.75s;animation-name:onDisplayingActionAnimation}.video-js.vjs-mediacms.vjs-has-started .vjs-corner-layer.vjs-corner-bottom-left,.video-js.vjs-mediacms.vjs-has-started .vjs-corner-layer.vjs-corner-bottom-right,.video-js.vjs-mediacms.vjs-changing-resolution .vjs-corner-layer.vjs-corner-bottom-left,.video-js.vjs-mediacms.vjs-changing-resolution .vjs-corner-layer.vjs-corner-bottom-right{bottom:48px}.video-js.vjs-mediacms.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-corner-layer.vjs-corner-bottom-left,.video-js.vjs-mediacms.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-corner-layer.vjs-corner-bottom-right,.video-js.vjs-mediacms.vjs-changing-resolution.vjs-user-inactive.vjs-playing .vjs-corner-layer.vjs-corner-bottom-left,.video-js.vjs-mediacms.vjs-changing-resolution.vjs-user-inactive.vjs-playing .vjs-corner-layer.vjs-corner-bottom-right{bottom:12px}.video-js.vjs-mediacms.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar,.video-js.vjs-mediacms.vjs-changing-resolution.vjs-user-inactive.vjs-playing .vjs-control-bar{transform:translate(0px, 36px)}.video-js.vjs-mediacms.vjs-fullscreen{font-size:16px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-left-controls,.video-js.vjs-mediacms.vjs-fullscreen .vjs-right-controls{height:52px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-theater-mode-control{display:none}.video-js.vjs-mediacms.vjs-fullscreen .vjs-bottom-bg{height:52px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-settings-panel{bottom:45px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-control{width:52px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-time-control{width:auto}.video-js.vjs-mediacms.vjs-fullscreen .vjs-control,.video-js.vjs-mediacms.vjs-fullscreen .vjs-time-control{height:52px;line-height:50px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-progress-control.vjs-control{width:100%;height:auto}.video-js.vjs-mediacms.vjs-fullscreen .vjs-control-bar .vjs-button .vjs-icon-placeholder:before{margin-top:2px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-control-bar .vjs-button.vjs-fullscreen-control .vjs-icon-placeholder:before{font-size:2em;line-height:1.5}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-level:before{top:-5px;font-size:14px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-fullscreen-control:hover{animation-name:onFullscreenHoverFullscreenToggle}.video-js.vjs-mediacms.vjs-fullscreen .vjs-play-progress .vjs-time-tooltip,.video-js.vjs-mediacms.vjs-fullscreen .vjs-mouse-display .vjs-time-tooltip{font-size:12px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-bar.vjs-slider-horizontal{margin:23.5px .45em 23.5px 0}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-bar.vjs-slider-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{height:5px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel.vjs-volume-panel-horizontal{min-width:52px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active{width:10em;transition:all 0s}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control{left:52px;height:36px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel:hover .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control:hover.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-mute-control:hover~.vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal{height:52px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel.vjs-volume-panel-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel.vjs-volume-panel-horizontal:hover{transition:width .3s linear}.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel:hover .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control:hover.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-mute-control:hover~.vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal{transition:width .2s linear;transition-delay:.1s}.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel.vjs-volume-panel-horizontal,.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel.vjs-volume-panel-horizontal:hover{transition:width 0s linear}.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel:hover .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel .vjs-volume-control:hover.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel .vjs-mute-control:hover~.vjs-volume-control.vjs-volume-horizontal,.video-js.vjs-mediacms.vjs-fullscreen.vjs-fullscreen-change .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal{transition:width 0s linear;transition-delay:0s}.video-js.vjs-mediacms.vjs-fullscreen .vjs-corner-layer.vjs-corner-bottom-left,.video-js.vjs-mediacms.vjs-fullscreen .vjs-corner-layer.vjs-corner-bottom-right{bottom:64px}.video-js.vjs-mediacms.vjs-has-started.vjs-fullscreen .vjs-control-bar,.video-js.vjs-mediacms.vjs-changing-resolution.vjs-fullscreen .vjs-control-bar{height:82px}.video-js.vjs-mediacms.vjs-has-started.vjs-fullscreen.vjs-user-inactive.vjs-playing .vjs-control-bar,.video-js.vjs-mediacms.vjs-changing-resolution.vjs-fullscreen.vjs-user-inactive.vjs-playing .vjs-control-bar{transform:translate(0px, 52px)}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls{-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;pointer-events:none;z-index:2;position:absolute;display:block;top:0;left:0;right:0;bottom:0;width:100%;background-color:rgba(0,0,0,.6);visibility:hidden;opacity:0;transition-timing-function:linear;transition-duration:.1s;transition-property:opacity,visibility}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls button{pointer-events:auto;display:inline-block;width:auto;height:auto;line-height:1;float:none;margin:1rem;font-size:2.625em;width:56px;height:56px;line-height:56px;outline:0;border-radius:50%}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls>*{position:absolute;display:block;top:50%;left:0;margin-top:-44px;display:table;width:100%}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls>*>*{display:table-cell;text-align:center;vertical-align:middle}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls .vjs-touch-previous-button{text-align:right}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls .vjs-touch-play-button{width:10.5em;text-align:center}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls .vjs-touch-play-button button{font-size:56px}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls .vjs-touch-next-button{text-align:left}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls .vjs-touch-hidden-button *{visibility:hidden;opacity:0}.video-js.vjs-mediacms.vjs-enabled-touch-controls .vjs-touch-controls .vjs-touch-disabled-button *{color:#404040;color:rgba(255,255,255,.25);cursor:disabled}.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-seeking .vjs-actions-anim,.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-waiting .vjs-actions-anim,.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled .vjs-actions-anim{display:none}.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled .vjs-play-control,.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled .vjs-next-button,.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled .vjs-previous-button{display:none}.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled.vjs-has-started.vjs-playing.vjs-user-active .vjs-touch-controls,.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled.vjs-has-started.vjs-paused .vjs-touch-controls{visibility:visible;opacity:1}.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled.vjs-playing .vjs-icon-play:before{content:""}.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled.vjs-ended .more-media.full-wrapper{visibility:hidden}.video-js.vjs-mediacms.vjs-enabled-touch-controls.vjs-touch-enabled.vjs-ended .vjs-icon-play:before{content:""}.video-js.vjs-mediacms{padding-top:50%}.video-js.vjs-mediacms video[poster]{-o-object-fit:fill;object-fit:fill}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder .vjs-play-progress{background-color:#093}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder .vjs-play-progress:before{color:#093}.video-js.vjs-mediacms .vjs-poster{background-size:cover}.video-js.vjs-mediacms.vjs-changing-resolution .vjs-poster{display:none}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-left,.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-right{top:16px}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-left{max-width:80%}.video-js.vjs-mediacms .vjs-corner-layer .title-link,.video-js.vjs-mediacms .vjs-corner-layer .user-thumb-link{outline:0;transition-duration:.1s;transition-property:opacity,visibility}.video-js.vjs-mediacms .vjs-corner-layer .title-link{display:inline-block;font-size:16px;font-stretch:100%;text-decoration:none;text-shadow:0 0 2px rgba(0,0,0,.5);line-height:23.4px;overflow:hidden;text-overflow:ellipsis;background-color:transparent;display:block;max-height:46.8px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal;color:#eee}.video-js.vjs-mediacms .vjs-corner-layer .title-link:hover{color:#fff}@media screen and (min-width: 768px){.video-js.vjs-mediacms .vjs-corner-layer .title-link{font-size:18px}}.video-js.vjs-mediacms .vjs-corner-layer .user-thumb-link{position:relative;display:block;width:36px;height:36px;overflow:hidden;border-radius:50%;margin-bottom:4px;background-size:cover;background-position:center;background-repeat:no-repeat}.video-js.vjs-mediacms .vjs-corner-layer .media-links-top-left{display:block}.video-js.vjs-mediacms .vjs-corner-layer .media-links-top-left .title-link{padding-left:48px;padding-top:7px}.video-js.vjs-mediacms .vjs-corner-layer .media-links-top-left .user-thumb-link{position:absolute;top:0;left:0;display:inline-block}.video-js.vjs-mediacms.vjs-fullscreen .vjs-corner-layer .title-link{font-size:16px}@media screen and (min-width: 768px){.video-js.vjs-mediacms.vjs-fullscreen .vjs-corner-layer .title-link{font-size:18px}}@media screen and (min-width: 992px){.video-js.vjs-mediacms.vjs-fullscreen .vjs-corner-layer .title-link{font-size:20px}}@media screen and (min-width: 1040px){.video-js.vjs-mediacms.vjs-fullscreen .vjs-corner-layer .title-link{font-size:22px}}.video-js.vjs-mediacms.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-corner-layer .title-link,.video-js.vjs-mediacms.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-corner-layer .user-thumb-link{opacity:0;visibility:hidden}.video-js.vjs-mediacms:hover .vjs-big-play-button{background-color:#093}.video-js.vjs-mediacms .vjs-progress-control .vjs-mouse-display .vjs-time-tooltip,.video-js.vjs-mediacms .vjs-preview-thumb .vjs-preview-thumb-time-display{font-size:.776699em;font-weight:500;line-height:1}.video-js.vjs-mediacms .vjs-progress-control .vjs-mouse-display .vjs-time-tooltip,.video-js.vjs-mediacms .vjs-preview-thumb .vjs-preview-thumb-time-display>*{padding:.5em .65em .4em;color:rgba(255,255,255,.9);background-color:rgba(28,28,28,.95);border-radius:2px}.video-js.vjs-mediacms .vjs-progress-control .vjs-mouse-display{background-color:rgba(28,28,28,.9)}.video-js.vjs-mediacms .vjs-progress-control .vjs-mouse-display .vjs-time-tooltip{top:auto;bottom:.5em}.video-js.vjs-mediacms .vjs-preview-thumb{display:none}.video-js.vjs-mediacms.vjs-enabled-preview-thumb .vjs-preview-thumb{position:relative;opacity:0;visibility:hidden;display:block}.video-js.vjs-mediacms.vjs-enabled-preview-thumb .vjs-preview-thumb .vjs-preview-thumb-inner{position:absolute;bottom:1em;left:-80px;width:160px;height:120px;overflow:hidden;background-position:center 0;background-size:cover;background-color:rgba(28,28,28,.9);border:2px solid rgba(28,28,28,.9);border-radius:1px}.video-js.vjs-mediacms.vjs-enabled-preview-thumb .vjs-preview-thumb .vjs-preview-thumb-time-display{position:absolute;bottom:-2px;left:0;width:100%;line-height:1;font-size:1em;font-weight:600;display:inline-block}.video-js.vjs-mediacms.vjs-enabled-preview-thumb .vjs-preview-thumb .vjs-preview-thumb-time-display>*{display:inline-block;padding:.5em .65em .45em}.video-js.vjs-mediacms.vjs-enabled-preview-thumb .vjs-progress-control.andrd-active .vjs-preview-thumb,.video-js.vjs-mediacms.vjs-enabled-preview-thumb .vjs-progress-control:hover .vjs-preview-thumb,.video-js.vjs-mediacms.vjs-enabled-preview-thumb .vjs-progress-control:active .vjs-preview-thumb{visibility:visible;animation-name:showPreviewThumb;animation-duration:.2s;animation-timing-function:ease-out;animation-delay:.1s;animation-direction:alternate;animation-fill-mode:forwards}.video-js.vjs-mediacms.vjs-enabled-preview-thumb.vjs-user-inactive .vjs-progress-control .vjs-preview-thumb{opacity:0;visibility:hidden;transition:visibility 1s linear,opacity 1s linear}.video-js.vjs-mediacms.vjs-enabled-preview-thumb.vjs-touch-enabled .vjs-preview-thumb{display:none}.video-js.vjs-mediacms .vjs-loading-spinner{width:64px;height:64px;margin:-32px 0 0 -32px;border:0;border-radius:0;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);opacity:1;animation-delay:.44s}.video-js.vjs-mediacms .vjs-loading-spinner:after,.video-js.vjs-mediacms .vjs-loading-spinner:before{display:none}.video-js.vjs-mediacms .vjs-loading-spinner .spinner{z-index:1;position:absolute;left:50%;top:50%;width:100%;margin-left:-32px;pointer-events:none;background-color:#eee}.video-js.vjs-mediacms .vjs-loading-spinner .spinner-container{pointer-events:none;position:absolute;width:100%;top:50%;left:50%;margin-top:-50%;margin-left:-50%;padding-bottom:100%;animation:spinner-linear-spin 1568.23529647ms linear infinite;-webkit-animation:spinner-linear-spin 1568.23529647ms linear infinite}.video-js.vjs-mediacms .vjs-loading-spinner .spinner-rotator{position:absolute;width:100%;height:100%;animation:spinner-ease-spin 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.video-js.vjs-mediacms .vjs-loading-spinner .spinner-left,.video-js.vjs-mediacms .vjs-loading-spinner .spinner-right{position:absolute;top:0;bottom:0;overflow:hidden}.video-js.vjs-mediacms .vjs-loading-spinner .spinner-circle{position:absolute;width:200%;height:100%;box-sizing:border-box;border-radius:50%;border-style:solid;border-width:6px;border-color:#eee #eee transparent}.video-js.vjs-mediacms .vjs-loading-spinner .spinner-left{left:0;right:49%}.video-js.vjs-mediacms .vjs-loading-spinner .spinner-left .spinner-circle{left:0;right:-100%;border-right-color:transparent;animation:spinner-left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.video-js.vjs-mediacms .vjs-loading-spinner .spinner-right{left:49%;right:0}.video-js.vjs-mediacms .vjs-loading-spinner .spinner-right .spinner-circle{left:-100%;right:0;border-left-color:transparent;animation:spinner-right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1 1) infinite both}.video-js.vjs-mediacms.vjs-fullscreen .vjs-loading-spinner{width:96px;height:96px;margin:-48px 0 0 -48px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-loading-spinner .spinner{margin-left:-48px}.video-js.vjs-mediacms.vjs-fullscreen .vjs-loading-spinner .spinner-circle{border-width:9px}.video-js.vjs-mediacms.vjs-error .vjs-loading-spinner{display:none} +.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.video-js .vjs-modal-dialog,.vjs-button>.vjs-icon-placeholder:before,.vjs-modal-dialog .vjs-modal-dialog-content{position:absolute;top:0;left:0;width:100%;height:100%}.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.vjs-button>.vjs-icon-placeholder:before{text-align:center}@font-face{font-family:VideoJS;src:url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAABUgAAsAAAAAItAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPgAAAFZRiV33Y21hcAAAAYQAAAEJAAAD5p42+VxnbHlmAAACkAAADwwAABdk9R/WHmhlYWQAABGcAAAAKwAAADYn8kSnaGhlYQAAEcgAAAAdAAAAJA+RCL1obXR4AAAR6AAAABMAAAC8Q44AAGxvY2EAABH8AAAAYAAAAGB7SIHGbWF4cAAAElwAAAAfAAAAIAFAAI9uYW1lAAASfAAAASUAAAIK1cf1oHBvc3QAABOkAAABfAAAAnXdFqh1eJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGR7xDiBgZWBgaWQ5RkDA8MvCM0cwxDOeI6BgYmBlZkBKwhIc01hcPjI+FGPHcRdyA4RZgQRADbZCycAAHic7dPXbcMwAEXRK1vuvffem749XAbKV3bjBA6fXsaIgMMLEWoQJaAEFKNnlELyQ4K27zib5PNF6vl8yld+TKr5kH0+cUw0xv00Hwvx2DResUyFKrV4XoMmLdp06NKjz4AhI8ZMmDJjzoIlK9Zs2LJjz4EjJ85cuHLjziPe/0UWL17mf2tqKLz/9jK9f8tXpGCoRdPKhtS0RqFkWvVQNtSKoVYNtWaoddPXEBqG2jQ9XWgZattQO4baNdSeofYNdWCoQ0MdGerYUCeGOjXUmaHODXVhqEtDXRnq2lA3hro11J2h7g31YKhHQz0Z6tlQL4Z6NdSbod4N9WGoT9MfHF6GmhnZLxyDcRMAAAB4nJ1YC1gUV5auc6urCmxEGrq6VRD6ATQP5dHPKK8GRIyoKApoEBUDAiGzGmdUfKNRM4qLZrUZdGKcGN/GZJKd0SyOWTbfbmZ2NxqzM5IxRtNZd78vwYlJdtREoO7sudVNq6PmmxmKqrqPU+eee173P80Bh39Cu9DOEY4DHZBK3i20D/QRLcfxbE5sEVtwLpZzclw4ibFIkSCJUcZ4MBpMnnzwuKNsGWBL5i3qy6kO2dVpvUpKbkAP9fq62rdeGJ+TM/7C1nbIutfuWrWk5ci4zMxxR1qW/N+9JsmCGXj9VKWhFx/6tr/nz78INDm2C9yPF/fDcxLuyKxLBZ1ZBz2QTi+RSkiH5RrDQJ/GgGQadX9m0YSURs7GpSG905Zsk41uj14yul1OtieZ7QUk5GRG/YiS7PYYPSAZNRed9sq3+bOpz00rKb7pe/ZEZvbALxZAHT3AFoH8GXP3rt67QFn40kt8W13FjLTDb48c+fSi5/7h0P4dL5yz7DPtbmgmYxfQA9RL2+EOfTcvdp+1vmuBpvOll1As1S6ak0IvJzC7sKWJFtJgBd2uWcg+0Zyg7dzQfhcjXRgXGZRf5/a4A58IDU777Nl252AUk4m2ByRRjqTNqIDCEJeAnU3iCFwrkrNwXEzg4yFevBwypzxkcX+AIfk3VEKl3XmWbT8788SzvpvFJaiOezL6QyuSr9VNf97csNu0z3LuhR0wATUxZAfVBwVOy+nQFhxYdWaXlXe4HC4zWGWzzsrLDtmhI9pOWOHv7PTT7XybH1Z0+v2d5Abd3kmG+TsH23CS/KwTxx/JkzEwx6jcQOUc42LLwHJ/J93uZ9ygh3HuZGwqsY9dWDHQ58dxNqyqKRQTYdxwTubiOSs3FiMDkq0WSZQgCT0GBDOg2lxOAd1FlPVGs4AKBAcYHHaP2wPkHaivmLF5zYqnIZrvcHx5gN4k/6tchNW1DtdgNL2KrxEkS/kfnIHoVnp1VjmjpTf5r0lTzLj0mdS28tX+XGorU364eMPmnWVl8J36nlKGw3CZhjEiuMw8h8mKvhGD+4/lElBWjAhLJMg6fTw4zPZ8cOmcGQBm2Qxml1nAm13CpYGq1JKUlJJUzQn1PTAO0mgv6VMMpA/DuRfSWEu4lDIxdbAtdWIKvnn2Vk766CWfz9fpY0sH/UpdP50rfszaVpdVRmvIejEdLMk45s4Bu0EWHjeOySmFyZSiMahvZdNSn29peoI/YexYfKQTLeurTXXwEVLeSfInTWHkkMaeUx7sBvOCSTSj3AlcKjfueyS36tCrXDlgRtF0etFq9jhc1kfKuBT/OwMr0F4UUTTh1AN0g20+H/ScPcsIEsYu9d/zN5PmjprPtNwI1ZZcDK6iC97Mcjp2y2aX36f+QbpGHrgRuHlXJ+Zf6PFRL2uQSp8vxHeF2IoRb8Rd2rhMzsNxSRmEuKK4JFnkojhMcx6jzqHzGMGFcW+MhBj0bhf6cowN+45I4LHvwT6fteu7M42wGRI/pxcg6/MZdEvt1U1XaulHFXuLmqov/MukvRVL35/b3ODM1+4aPjtzeK7zmUkV2h3DN54HaQ9GzJvxHRb6Ks2gB81fwqraT+A7GvZJrRLRofU6G0urNL+zFw3v0FaVDFxsKEZW56F31r6ip6vOL+FCObBPuIMRiXld9RaMdLzRIOGhPey2T9vA/35DmZPK9IWaT9d/WgOGMieYqJ/dzjLIhZU118gbysxrNUGefxD6UO/hyNNllpFTOIbx32kSFQctnweV5PxTMHLjRqiAN+fQE9gL+Xy5WB6MOS4GJJuYbDUHhcKDhHGRbLzOpjsjdM1+iwAZLGeieehACX2hhI7SjK/ZUTNrvVje31TxJiFBGYViWFkCn9PMeX9fS6qVbzfCj4fOCTzDnuWy2c4xA7mdNkA3RS9FH2VeqzdCBlixxbzXjvkHU1I8BOYFb1pZvPIHSSIj4svT8xpzcxtXN+ZKyjdDvbz08niiF3PqV9Tn5NST8vg48MTaY8E5xqSSIsWoWHo+LtAzxdH/GDUyp37CBEYfso04F/NlMTcDJUTpECLY0HFGQHImE8xsEUdgnrQlixIvGhJA1BvxpDHGxEMBYFeNOHcBJlSjwe2JcSfbBEsGOPPBHg/6SBBOCsLLw0SpUxod0Z1bFMfLkbQ3UiZxEyd0Dx8t+SRBu18Q9msFbI4e3p1THEfkSEh7kEJ5orR10qTWDvbgPWn5aWvCYyOAjwgXyjJi34uMjo58L25cmRAeQZWI2PA1QQLsPESAH8WGFwZZ4SPoR73BHPzIPMJj9AreBzKUmrH4todT18ANvi1oc3YGjUT/0j+ExUwq8PI9BLaCQIpvewwYu2evAG/Vo/5avPdY7o+BemLLXw3y+AdkzP9bpIxB1wm5EYq8fesHbPEPtm6HrHvtx4jcGPR8fDDpkZBefIjB46QnlUNRltv4Z/pO/J6dxEjhYAtmoMeq+GozvUVvNYOW3m6GCIhoprcfr97B8AcIQYsfD8ljUvGNjvkrpj0ETA48ZMIxCeqsRIsQALE0gi2GB+glSOfbOjW3GSBM9yPq8/rpJXrJDz0BPxV6xdN4uiCGDQed3WhgFkBUZEFsmeyyBpzXrm7UGTBZG8Lh5aubFufk5eUsbrrFGr7McYdbltxa0nKYqRKbQjvikXYkTGM0f2xuyM3Ly21oXnWfvf6I1BmZwfh7EWWIYsg2nHhsDhOnczhJcmI6eBAmy3jZ3RiJmKQR/JA99FcwsfaVbNDDyi1rL9NPj9hfo61wjM6BjzOLijLpeTgk/pL+ip6tfYWupzeOgPny2tcUu9J/9mhxJlgyi985NFRbvCVewXUNXLJaW0RxZqtRYtnfYdcYomXQWdnJHQA3jiEEkeTQWcWxdDP9IvvVWvo2TK553XEMEq+s69/QDU1Q7p0zxwsm9qS379whr8NI2PJqLUyGyfNeX3eFfnJU2U+uHR9cVV1IqgurqwuV44XVp0h2qN55X5XJwtk59yP0IZuHrqBOBIuIYhkcoT6Kx79Pu2HS/IPZIMOqLWs/pteOOk4NPgEb6QAIdAPsyZk5Mwd+wVaHMexJv719W7xCu2l37UG6lvYdBcvHa08p89741zd63phTRGqL5ggo6SlvdbWXzCqsPq78NnSu7wnKy2HNZbVoRCI7UJEOyRj+sPE002tOOY7Qa5fXboFWkLNeqYUSZRocp9XwSUZxcQZ9Hw6LV2pOoVmvHQEDbGIENEG5i6bLgMSM4n8+FNLTtAds99DaWEvgcf4o5SyYe9x+kF6/tGoTPAdRmS/XQIEy//QxKC2oqioAI3tS5auvxCtzT6y6RK8fhChYcwCJaMJhxc0vqSxQ/qmgsrKAlBZUHlauheTpvd9uj5DnLzJct6qfq5fXbYHVIGcfrIVJihbaVLu1wW7Vbs8zK0A8e9Jvb91S9cVMjPrazD6gpfeZTXzYbCFMcppVRsGMpp55OWgx1/3JeAxW1Y7AORgM/m3rWrsdLkQVmEVSU16cX/e7uvkvpqRiQsG06XJ0t64Tf+l0nG1dt025gyOIZlvq5u9KSU1N2TW/rsWnnMRPyTDkctbhvIcNvYIXWyLzdwYLoYesUbaQG4iK2cWO2gdpeUYLqDD0MUTOPhDIGnZEs58yArR86FznuWEsU4YDi2x26dA4klkn8Qa6vhk2QUfX4Jxm/ngX9r7ogn1dmlmwqZmuhxtdg9XN/DEcUgqb+9hMyNansfaQET2mcROCmGEMVqxm5u+h6kN2MOwgqykV2wH9yQG9DvVFU38Pogaf4FVuE62KI/oJ02RDdWW2w5dqQwU/8+N1q1DlvsL863u61KLE7x/o8w0VJQM/Y/SQ3unIrqxueEa1BqT5VFNsO7p39/UC771a77RowpaKe9nvJQIT1Pog5LGx8XblBKmCNGTf3xMogAQvPnz9PYKX/08sVDTG1OKUlOLUgS/UaZtm1NAaYTsl7i9ZQ+L6O4Rl0OGa577LuWvc+C+x96/vYh0lLBuM+7XwI/dTLtdT7v4d6rRTWDnku0IBrqFnZ5bVIqKP8lasJlithWnaLhTsr8qFJBulF/70p4undou36HeTJ5+jv1fCybeQ8nH3+Xv6aENczmOFlab+hqMDg1rLOt12A+tiUFrYDwQ6c3RUJp601nzegTNX6WlYAI2zSUV945F6zU56ZmZVQaWspWcIADxJ9GmljQUnL2p2Dpr5T8H+5KJFu+vqBq8qvyHRzStLHPEO5SPYCV9nZe0yZT2RcH0oHvegSzNEJ0oGWU8iQWM12dgPEugngVceGIwZgPFp0BiT1a0a3R5Rcot7ihfA1J/20v96jX7zmTX9s583H0kwx6WnLd09cXrR9LGroOa9sHNbdyz8wcKk5lqhaVFJZNwmqtw884MXNdvJujpBa3xzuSaZH9sxa06Z7x+HJSduPbdYHv/DgmEhfbehvlmGN7JUkcG78GDM12CeyFFTPNqVeNxC1gzjz+c2nVo63Xxs8rKJWXoBJM0tmEbfGm4qzpoOH3xpzQfyxLzW1gnE9NHo6tol1eMEic4ZVPrjnVi0kqAe2sQ2bgqupScaq8WGlUWgWHI51SKJl/UYT6zccNsCSkBtiVZLsiefuFSDYT3Fi8Zk7EUnmjTRYtsFeuDDJS05MW79M3mr3mla+d8dzac31KTPmBYfFiYSUef48PhPjm9ryZsSGZZkdNvzq0Y9rdNcwDq5Dg5C3QW+7UN64IKptvS3tvHbvu5c9pv1Exau21rc9LIpwpQwUjTq8576yeVDz5+4WZ1nXT43wV60rPLJbDp/UksNrP3iQ2SA63Pst058gOYDbhRnRUw8l/sRt4HbxPzO4WYpInCpuVgSbVh6JXuwnnJngKTTCwaPWmG5Xbhpm1U0Yt3FyBGpGYemPM77p2TD904JjgJ2QFpFLeYpGx8X15Qx1Zk31p5ki9ZLUuXE0lmuJlcakJMVLeFS1iIvrB8drY0aloilakqCZwzwRORtxlgwxS4IThggJd4TDxoiaAIT80fFPGrCPPru+puFn504P/ybr4ihA/6dKASLshEJic7xE8tmzu3KzA7TABBe8y5fNbWo3ilQn/SuFKM16b2l5bOeayqfGhYmhIulU+fVNDdWVv4NMzX10MBHyPR5uhWUu8D9P1VnIMt4nGNgZGBgAOJ/1bf64vltvjJwszOAwAOlmqvINEc/WJyDgQlEAQA+dgnjAHicY2BkYGBnAAGOPgaG//85+hkYGVCBPgBGJwNkAAAAeJxjYGBgYB/EmKMPtxwAhg4B0gAAAAAAAA4AaAB+AMwA4AECAUIBbAGYAe4CLgKKAtAC/ANiA4wDqAPgBDAEsATaBQgFWgXABggGLgZwBqwG9gdOB4oH0ggqCHAIhgicCMgJJAlWCYgJrAnyCkAKdgrkC7J4nGNgZGBg0GdoZmBnAAEmIOYCQgaG/2A+AwAaqwHQAHicXZBNaoNAGIZfE5PQCKFQ2lUps2oXBfOzzAESyDKBQJdGR2NQR3QSSE/QE/QEPUUPUHqsvsrXjTMw83zPvPMNCuAWP3DQDAejdm1GjzwS7pMmwi75XngAD4/CQ/oX4TFe4Qt7uMMbOzjuDc0EmXCP/C7cJ38Iu+RP4QEe8CU8pP8WHmOPX2EPz87TPo202ey2OjlnQSXV/6arOjWFmvszMWtd6CqwOlKHq6ovycLaWMWVydXKFFZnmVFlZU46tP7R2nI5ncbi/dDkfDtFBA2DDXbYkhKc+V0Bqs5Zt9JM1HQGBRTm/EezTmZNKtpcAMs9Yu6AK9caF76zoLWIWcfMGOSkVduvSWechqZsz040Ib2PY3urxBJTzriT95lipz+TN1fmAAAAeJxtkXlT2zAQxf1C4thJAwRajt4HRy8VMwwfSJHXsQZZcnUQ+PYoTtwpM+wf2t9brWZ2n5JBsol58nJcYYAdDDFCijEy5JhgileYYRd72MccBzjEa7zBEY5xglO8xTu8xwd8xCd8xhd8xTec4RwXuMR3/MBP/MJvMPzBFYpk2Cr+OF0fTEgrFI1aHhxN740KDbEmeJpsWZlVj40s+45aLuv9KijlhCXSjLQnu/d/4UH6sWul1mRzFxZeekUuE7z10mg3qMtM1FGQddPSrLQyvJR6OaukItYXDp6pCJrmz0umqkau5pZ2hFmm7m+ImG5W2t0kZoJXUtPhVnYTbbdOBdeCVGqpJe7XKTqSbRK7zbdwXfR0U+SVsStuS3Y76em6+Ic3xYiHUppc04Nn0lMzay3dSxNcp8auDlWlaCi48yetFD7Y9USsx87G45cuop1ZxQUtjLnL4j53FO0a+5X08UXqQ7NQNo92R0XOz7sxWEnxN2TneJI8Acttu4Q=) format("woff");font-weight:400;font-style:normal}.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.video-js .vjs-play-control .vjs-icon-placeholder,.vjs-icon-play{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.video-js .vjs-play-control .vjs-icon-placeholder:before,.vjs-icon-play:before{content:"\f101"}.vjs-icon-play-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-play-circle:before{content:"\f102"}.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder,.vjs-icon-pause{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before,.vjs-icon-pause:before{content:"\f103"}.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder,.vjs-icon-volume-mute{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before,.vjs-icon-volume-mute:before{content:"\f104"}.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder,.vjs-icon-volume-low{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before,.vjs-icon-volume-low:before{content:"\f105"}.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder,.vjs-icon-volume-mid{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before,.vjs-icon-volume-mid:before{content:"\f106"}.video-js .vjs-mute-control .vjs-icon-placeholder,.vjs-icon-volume-high{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control .vjs-icon-placeholder:before,.vjs-icon-volume-high:before{content:"\f107"}.video-js .vjs-fullscreen-control .vjs-icon-placeholder,.vjs-icon-fullscreen-enter{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-fullscreen-control .vjs-icon-placeholder:before,.vjs-icon-fullscreen-enter:before{content:"\f108"}.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder,.vjs-icon-fullscreen-exit{font-family:VideoJS;font-weight:400;font-style:normal}.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before,.vjs-icon-fullscreen-exit:before{content:"\f109"}.vjs-icon-spinner{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-spinner:before{content:"\f10a"}.video-js .vjs-subs-caps-button .vjs-icon-placeholder,.video-js .vjs-subtitles-button .vjs-icon-placeholder,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder,.vjs-icon-subtitles{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js .vjs-subtitles-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder:before,.vjs-icon-subtitles:before{content:"\f10b"}.video-js .vjs-captions-button .vjs-icon-placeholder,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder,.vjs-icon-captions{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-captions-button .vjs-icon-placeholder:before,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder:before,.vjs-icon-captions:before{content:"\f10c"}.vjs-icon-hd{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-hd:before{content:"\f10d"}.video-js .vjs-chapters-button .vjs-icon-placeholder,.vjs-icon-chapters{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-chapters-button .vjs-icon-placeholder:before,.vjs-icon-chapters:before{content:"\f10e"}.vjs-icon-downloading{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-downloading:before{content:"\f10f"}.vjs-icon-file-download{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-file-download:before{content:"\f110"}.vjs-icon-file-download-done{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-file-download-done:before{content:"\f111"}.vjs-icon-file-download-off{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-file-download-off:before{content:"\f112"}.vjs-icon-share{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-share:before{content:"\f113"}.vjs-icon-cog{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-cog:before{content:"\f114"}.vjs-icon-square{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-square:before{content:"\f115"}.video-js .vjs-play-progress,.video-js .vjs-volume-level,.vjs-icon-circle,.vjs-seek-to-live-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-play-progress:before,.video-js .vjs-volume-level:before,.vjs-icon-circle:before,.vjs-seek-to-live-control .vjs-icon-placeholder:before{content:"\f116"}.vjs-icon-circle-outline{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-outline:before{content:"\f117"}.vjs-icon-circle-inner-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-inner-circle:before{content:"\f118"}.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder,.vjs-icon-cancel{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder:before,.vjs-icon-cancel:before{content:"\f119"}.vjs-icon-repeat{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-repeat:before{content:"\f11a"}.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder,.vjs-icon-replay{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before,.vjs-icon-replay:before{content:"\f11b"}.video-js .vjs-skip-backward-5 .vjs-icon-placeholder,.vjs-icon-replay-5{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-skip-backward-5 .vjs-icon-placeholder:before,.vjs-icon-replay-5:before{content:"\f11c"}.video-js .vjs-skip-backward-10 .vjs-icon-placeholder,.vjs-icon-replay-10{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-skip-backward-10 .vjs-icon-placeholder:before,.vjs-icon-replay-10:before{content:"\f11d"}.video-js .vjs-skip-backward-30 .vjs-icon-placeholder,.vjs-icon-replay-30{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-skip-backward-30 .vjs-icon-placeholder:before,.vjs-icon-replay-30:before{content:"\f11e"}.video-js .vjs-skip-forward-5 .vjs-icon-placeholder,.vjs-icon-forward-5{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-skip-forward-5 .vjs-icon-placeholder:before,.vjs-icon-forward-5:before{content:"\f11f"}.video-js .vjs-skip-forward-10 .vjs-icon-placeholder,.vjs-icon-forward-10{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-skip-forward-10 .vjs-icon-placeholder:before,.vjs-icon-forward-10:before{content:"\f120"}.video-js .vjs-skip-forward-30 .vjs-icon-placeholder,.vjs-icon-forward-30{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-skip-forward-30 .vjs-icon-placeholder:before,.vjs-icon-forward-30:before{content:"\f121"}.video-js .vjs-audio-button .vjs-icon-placeholder,.vjs-icon-audio{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-audio-button .vjs-icon-placeholder:before,.vjs-icon-audio:before{content:"\f122"}.vjs-icon-next-item{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-next-item:before{content:"\f123"}.vjs-icon-previous-item{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-previous-item:before{content:"\f124"}.vjs-icon-shuffle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-shuffle:before{content:"\f125"}.vjs-icon-cast{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-cast:before{content:"\f126"}.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder,.vjs-icon-picture-in-picture-enter{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder:before,.vjs-icon-picture-in-picture-enter:before{content:"\f127"}.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder,.vjs-icon-picture-in-picture-exit{font-family:VideoJS;font-weight:400;font-style:normal}.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder:before,.vjs-icon-picture-in-picture-exit:before{content:"\f128"}.vjs-icon-facebook{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-facebook:before{content:"\f129"}.vjs-icon-linkedin{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-linkedin:before{content:"\f12a"}.vjs-icon-twitter{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-twitter:before{content:"\f12b"}.vjs-icon-tumblr{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-tumblr:before{content:"\f12c"}.vjs-icon-pinterest{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-pinterest:before{content:"\f12d"}.video-js .vjs-descriptions-button .vjs-icon-placeholder,.vjs-icon-audio-description{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-descriptions-button .vjs-icon-placeholder:before,.vjs-icon-audio-description:before{content:"\f12e"}.video-js{display:inline-block;vertical-align:top;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#fff;background-color:#000;position:relative;padding:0;font-size:10px;line-height:1;font-weight:400;font-style:normal;font-family:Arial,Helvetica,sans-serif;word-break:initial}.video-js:-moz-full-screen{position:absolute}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.video-js[tabindex="-1"]{outline:0}.video-js *,.video-js :after,.video-js :before{-webkit-box-sizing:inherit;-moz-box-sizing:inherit;box-sizing:inherit}.video-js ul{font-family:inherit;font-size:inherit;line-height:inherit;list-style-position:outside;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.video-js.vjs-1-1,.video-js.vjs-16-9,.video-js.vjs-4-3,.video-js.vjs-9-16,.video-js.vjs-fluid{width:100%;max-width:100%}.video-js.vjs-1-1:not(.vjs-audio-only-mode),.video-js.vjs-16-9:not(.vjs-audio-only-mode),.video-js.vjs-4-3:not(.vjs-audio-only-mode),.video-js.vjs-9-16:not(.vjs-audio-only-mode),.video-js.vjs-fluid:not(.vjs-audio-only-mode){height:0}.video-js.vjs-16-9:not(.vjs-audio-only-mode){padding-top:56.25%}.video-js.vjs-4-3:not(.vjs-audio-only-mode){padding-top:75%}.video-js.vjs-9-16:not(.vjs-audio-only-mode){padding-top:177.7777777778%}.video-js.vjs-1-1:not(.vjs-audio-only-mode){padding-top:100%}.video-js.vjs-fill:not(.vjs-audio-only-mode){width:100%;height:100%}.video-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%}.video-js.vjs-audio-only-mode .vjs-tech{display:none}body.vjs-full-window{padding:0;margin:0;height:100%}.vjs-full-window .video-js.vjs-fullscreen{position:fixed;overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0}.video-js.vjs-fullscreen:not(.vjs-ios-native-fs){width:100%!important;height:100%!important;padding-top:0!important}.video-js.vjs-fullscreen.vjs-user-inactive{cursor:none}.vjs-hidden{display:none!important}.vjs-disabled{opacity:.5;cursor:default}.video-js .vjs-offscreen{height:1px;left:-9999px;position:absolute;top:0;width:1px}.vjs-lock-showing{display:block!important;opacity:1!important;visibility:visible!important}.vjs-no-js{padding:20px;color:#fff;background-color:#000;font-size:18px;font-family:Arial,Helvetica,sans-serif;text-align:center;width:300px;height:150px;margin:0 auto}.vjs-no-js a,.vjs-no-js a:visited{color:#66a8cc}.video-js .vjs-big-play-button{font-size:3em;line-height:1.5em;height:1.63332em;width:3em;display:block;position:absolute;top:50%;left:50%;padding:0;margin-top:-.81666em;margin-left:-1.5em;cursor:pointer;opacity:1;border:.06666em solid #fff;background-color:#2b333f;background-color:rgba(43,51,63,.7);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;-webkit-transition:all .4s;-o-transition:all .4s;-moz-transition:all .4s;transition:all .4s}.video-js .vjs-big-play-button:focus,.video-js:hover .vjs-big-play-button{border-color:#fff;background-color:#73859f;background-color:rgba(115,133,159,.5);-webkit-transition:all 0s;-o-transition:all 0s;-moz-transition:all 0s;transition:all 0s}.vjs-controls-disabled .vjs-big-play-button,.vjs-error .vjs-big-play-button,.vjs-has-started .vjs-big-play-button,.vjs-using-native-controls .vjs-big-play-button{display:none}.vjs-has-started.vjs-paused.vjs-show-big-play-button-on-pause .vjs-big-play-button{display:block}.video-js button{background:0 0;border:none;color:inherit;display:inline-block;font-size:inherit;line-height:inherit;text-transform:none;text-decoration:none;-webkit-transition:none;-o-transition:none;-moz-transition:none;transition:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.vjs-control .vjs-button{width:100%;height:100%}.video-js .vjs-control.vjs-close-button{cursor:pointer;height:3em;position:absolute;right:0;top:.5em;z-index:2}.video-js .vjs-modal-dialog{background:rgba(0,0,0,.8);background:-webkit-gradient(linear,left top, left bottom,from(rgba(0,0,0,.8)),to(rgba(255,255,255,0)));background:-webkit-linear-gradient(top,rgba(0,0,0,.8),rgba(255,255,255,0));background:-moz-linear-gradient(top,rgba(0,0,0,.8),rgba(255,255,255,0));background:-o-linear-gradient(top,rgba(0,0,0,.8),rgba(255,255,255,0));background:linear-gradient(180deg,rgba(0,0,0,.8),rgba(255,255,255,0));overflow:auto}.video-js .vjs-modal-dialog>*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.vjs-modal-dialog .vjs-modal-dialog-content{font-size:1.2em;line-height:1.5;padding:20px 24px;z-index:1}.vjs-menu-button{cursor:pointer}.vjs-menu-button.vjs-disabled{cursor:default}.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu{display:none}.vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;font-family:Arial,Helvetica,sans-serif;overflow:auto}.vjs-menu .vjs-menu-content>*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.vjs-scrubbing .vjs-control.vjs-menu-button:hover .vjs-menu{display:none}.vjs-menu li{list-style:none;margin:0;padding:.2em 0;line-height:1.4em;font-size:1.2em;text-align:center;text-transform:lowercase}.js-focus-visible .vjs-menu li.vjs-menu-item:hover,.vjs-menu li.vjs-menu-item:focus,.vjs-menu li.vjs-menu-item:hover{background-color:#73859f;background-color:rgba(115,133,159,.5)}.js-focus-visible .vjs-menu li.vjs-selected:hover,.vjs-menu li.vjs-selected,.vjs-menu li.vjs-selected:focus,.vjs-menu li.vjs-selected:hover{background-color:#fff;color:#2b333f}.js-focus-visible .vjs-menu :not(.vjs-selected):focus:not(.focus-visible),.video-js .vjs-menu :not(.vjs-selected):focus:not(:focus-visible){background:0 0}.vjs-menu li.vjs-menu-title{text-align:center;text-transform:uppercase;font-size:1em;line-height:2em;padding:0;margin:0 0 .3em 0;font-weight:700;cursor:default}.vjs-menu-button-popup .vjs-menu{display:none;position:absolute;bottom:0;width:10em;left:-3em;height:0;margin-bottom:1.5em;border-top-color:rgba(43,51,63,.7)}.vjs-menu-button-popup .vjs-menu .vjs-menu-content{background-color:#2b333f;background-color:rgba(43,51,63,.7);position:absolute;width:100%;bottom:1.5em;max-height:15em}.vjs-layout-tiny .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:5em}.vjs-layout-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:10em}.vjs-layout-medium .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:14em}.vjs-layout-huge .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:25em}.vjs-menu-button-popup .vjs-menu.vjs-lock-showing,.vjs-workinghover .vjs-menu-button-popup.vjs-hover .vjs-menu{display:block}.video-js .vjs-menu-button-inline{-webkit-transition:all .4s;-o-transition:all .4s;-moz-transition:all .4s;transition:all .4s;overflow:hidden}.video-js .vjs-menu-button-inline:before{width:2.222222222em}.video-js .vjs-menu-button-inline.vjs-slider-active,.video-js .vjs-menu-button-inline:focus,.video-js .vjs-menu-button-inline:hover{width:12em}.vjs-menu-button-inline .vjs-menu{opacity:0;height:100%;width:auto;position:absolute;left:4em;top:0;padding:0;margin:0;-webkit-transition:all .4s;-o-transition:all .4s;-moz-transition:all .4s;transition:all .4s}.vjs-menu-button-inline.vjs-slider-active .vjs-menu,.vjs-menu-button-inline:focus .vjs-menu,.vjs-menu-button-inline:hover .vjs-menu{display:block;opacity:1}.vjs-menu-button-inline .vjs-menu-content{width:auto;height:100%;margin:0;overflow:hidden}.video-js .vjs-control-bar{display:none;width:100%;position:absolute;bottom:0;left:0;right:0;height:3em;background-color:#2b333f;background-color:rgba(43,51,63,.7)}.vjs-audio-only-mode .vjs-control-bar,.vjs-has-started .vjs-control-bar{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;visibility:visible;opacity:1;-webkit-transition:visibility .1s,opacity .1s;-o-transition:visibility .1s,opacity .1s;-moz-transition:visibility .1s,opacity .1s;transition:visibility .1s,opacity .1s}.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{visibility:visible;opacity:0;pointer-events:none;-webkit-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.vjs-controls-disabled .vjs-control-bar,.vjs-error .vjs-control-bar,.vjs-using-native-controls .vjs-control-bar{display:none!important}.vjs-audio-only-mode.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar,.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:1;visibility:visible;pointer-events:auto}.video-js .vjs-control{position:relative;text-align:center;margin:0;padding:0;height:100%;width:4em;-webkit-box-flex:0;-webkit-flex:none;-moz-box-flex:0;-ms-flex:none;flex:none}.video-js .vjs-control.vjs-visible-text{width:auto;padding-left:1em;padding-right:1em}.vjs-button>.vjs-icon-placeholder:before{font-size:1.8em;line-height:1.67}.vjs-button>.vjs-icon-placeholder{display:block}.video-js .vjs-control:focus,.video-js .vjs-control:focus:before,.video-js .vjs-control:hover:before{text-shadow:0 0 1em #fff}.video-js :not(.vjs-visible-text)>.vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.video-js .vjs-custom-control-spacer{display:none}.video-js .vjs-progress-control{cursor:pointer;-webkit-box-flex:1;-webkit-flex:auto;-moz-box-flex:1;-ms-flex:auto;flex:auto;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-moz-box-align:center;-ms-flex-align:center;align-items:center;min-width:4em;-ms-touch-action:none;touch-action:none}.video-js .vjs-progress-control.disabled{cursor:default}.vjs-live .vjs-progress-control{display:none}.vjs-liveui .vjs-progress-control{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-moz-box-align:center;-ms-flex-align:center;align-items:center}.video-js .vjs-progress-holder{-webkit-box-flex:1;-webkit-flex:auto;-moz-box-flex:1;-ms-flex:auto;flex:auto;-webkit-transition:all .2s;-o-transition:all .2s;-moz-transition:all .2s;transition:all .2s;height:.3em}.video-js .vjs-progress-control .vjs-progress-holder{margin:0 10px}.video-js .vjs-progress-control:hover .vjs-progress-holder{font-size:1.6666666667em}.video-js .vjs-progress-control:hover .vjs-progress-holder.disabled{font-size:1em}.video-js .vjs-progress-holder .vjs-load-progress,.video-js .vjs-progress-holder .vjs-load-progress div,.video-js .vjs-progress-holder .vjs-play-progress{position:absolute;display:block;height:100%;margin:0;padding:0;width:0}.video-js .vjs-play-progress{background-color:#fff}.video-js .vjs-play-progress:before{font-size:.9em;position:absolute;right:-.5em;line-height:.35em;z-index:1}.video-js .vjs-load-progress{background:rgba(115,133,159,.5)}.video-js .vjs-load-progress div{background:rgba(115,133,159,.75)}.video-js .vjs-time-tooltip{background-color:#fff;background-color:rgba(255,255,255,.8);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;color:#000;float:right;font-family:Arial,Helvetica,sans-serif;font-size:1em;padding:6px 8px 8px 8px;pointer-events:none;position:absolute;top:-3.4em;visibility:hidden;z-index:1}.video-js .vjs-progress-holder:focus .vjs-time-tooltip{display:none}.video-js .vjs-progress-control:hover .vjs-progress-holder:focus .vjs-time-tooltip,.video-js .vjs-progress-control:hover .vjs-time-tooltip{display:block;font-size:.6em;visibility:visible}.video-js .vjs-progress-control.disabled:hover .vjs-time-tooltip{font-size:1em}.video-js .vjs-progress-control .vjs-mouse-display{display:none;position:absolute;width:1px;height:100%;background-color:#000;z-index:1}.video-js .vjs-progress-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display{visibility:hidden;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.vjs-mouse-display .vjs-time-tooltip{color:#fff;background-color:#000;background-color:rgba(0,0,0,.8)}.video-js .vjs-slider{position:relative;cursor:pointer;padding:0;margin:0 .45em 0 .45em;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#73859f;background-color:rgba(115,133,159,.5)}.video-js .vjs-slider.disabled{cursor:default}.video-js .vjs-slider:focus{text-shadow:0 0 1em #fff;-webkit-box-shadow:0 0 1em #fff;-moz-box-shadow:0 0 1em #fff;box-shadow:0 0 1em #fff}.video-js .vjs-mute-control{cursor:pointer;-webkit-box-flex:0;-webkit-flex:none;-moz-box-flex:0;-ms-flex:none;flex:none}.video-js .vjs-volume-control{cursor:pointer;margin-right:1em;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex}.video-js .vjs-volume-control.vjs-volume-horizontal{width:5em}.video-js .vjs-volume-panel .vjs-volume-control{visibility:visible;opacity:0;width:1px;height:1px;margin-left:-1px}.video-js .vjs-volume-panel{-webkit-transition:width 1s;-o-transition:width 1s;-moz-transition:width 1s;transition:width 1s}.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active,.video-js .vjs-volume-panel .vjs-volume-control:active,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control,.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control,.video-js .vjs-volume-panel:active .vjs-volume-control,.video-js .vjs-volume-panel:focus .vjs-volume-control{visibility:visible;opacity:1;position:relative;-webkit-transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s;-o-transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s;-moz-transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s;transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s}.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal{width:5em;height:3em;margin-right:0}.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-vertical,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-vertical,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-vertical{left:-3.5em;-webkit-transition:left 0s;-o-transition:left 0s;-moz-transition:left 0s;transition:left 0s}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal:active{width:10em;-webkit-transition:width .1s;-o-transition:width .1s;-moz-transition:width .1s;transition:width .1s}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-mute-toggle-only{width:4em}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical{height:8em;width:3em;left:-3000em;-webkit-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s;-o-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s;-moz-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s;transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{-webkit-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s;-o-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s;-moz-transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s;transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s}.video-js .vjs-volume-panel{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex}.video-js .vjs-volume-bar{margin:1.35em .45em}.vjs-volume-bar.vjs-slider-horizontal{width:5em;height:.3em}.vjs-volume-bar.vjs-slider-vertical{width:.3em;height:5em;margin:1.35em auto}.video-js .vjs-volume-level{position:absolute;bottom:0;left:0;background-color:#fff}.video-js .vjs-volume-level:before{position:absolute;font-size:.9em;z-index:1}.vjs-slider-vertical .vjs-volume-level{width:.3em}.vjs-slider-vertical .vjs-volume-level:before{top:-.5em;left:-.3em;z-index:1}.vjs-slider-horizontal .vjs-volume-level{height:.3em}.vjs-slider-horizontal .vjs-volume-level:before{line-height:.35em;right:-.5em}.video-js .vjs-volume-panel.vjs-volume-panel-vertical{width:4em}.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level{height:100%}.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{width:100%}.video-js .vjs-volume-vertical{width:3em;height:8em;bottom:8em;background-color:#2b333f;background-color:rgba(43,51,63,.7)}.video-js .vjs-volume-horizontal .vjs-menu{left:-2em}.video-js .vjs-volume-tooltip{background-color:#fff;background-color:rgba(255,255,255,.8);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;color:#000;float:right;font-family:Arial,Helvetica,sans-serif;font-size:1em;padding:6px 8px 8px 8px;pointer-events:none;position:absolute;top:-3.4em;visibility:hidden;z-index:1}.video-js .vjs-volume-control:hover .vjs-progress-holder:focus .vjs-volume-tooltip,.video-js .vjs-volume-control:hover .vjs-volume-tooltip{display:block;font-size:1em;visibility:visible}.video-js .vjs-volume-vertical:hover .vjs-progress-holder:focus .vjs-volume-tooltip,.video-js .vjs-volume-vertical:hover .vjs-volume-tooltip{left:1em;top:-12px}.video-js .vjs-volume-control.disabled:hover .vjs-volume-tooltip{font-size:1em}.video-js .vjs-volume-control .vjs-mouse-display{display:none;position:absolute;width:100%;height:1px;background-color:#000;z-index:1}.video-js .vjs-volume-horizontal .vjs-mouse-display{width:1px;height:100%}.video-js .vjs-volume-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-volume-control .vjs-mouse-display{visibility:hidden;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.vjs-mouse-display .vjs-volume-tooltip{color:#fff;background-color:#000;background-color:rgba(0,0,0,.8)}.vjs-poster{display:inline-block;vertical-align:middle;cursor:pointer;margin:0;padding:0;position:absolute;top:0;right:0;bottom:0;left:0;height:100%}.vjs-has-started .vjs-poster,.vjs-using-native-controls .vjs-poster{display:none}.vjs-audio.vjs-has-started .vjs-poster,.vjs-has-started.vjs-audio-poster-mode .vjs-poster{display:block}.vjs-poster img{width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.video-js .vjs-live-control{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-moz-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-flex:1;-webkit-flex:auto;-moz-box-flex:1;-ms-flex:auto;flex:auto;font-size:1em;line-height:3em}.video-js.vjs-liveui .vjs-live-control,.video-js:not(.vjs-live) .vjs-live-control{display:none}.video-js .vjs-seek-to-live-control{-webkit-box-align:center;-webkit-align-items:center;-moz-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;-webkit-box-flex:0;-webkit-flex:none;-moz-box-flex:0;-ms-flex:none;flex:none;display:-webkit-inline-box;display:-webkit-inline-flex;display:-moz-inline-box;display:-ms-inline-flexbox;display:inline-flex;height:100%;padding-left:.5em;padding-right:.5em;font-size:1em;line-height:3em;width:auto;min-width:4em}.video-js.vjs-live:not(.vjs-liveui) .vjs-seek-to-live-control,.video-js:not(.vjs-live) .vjs-seek-to-live-control{display:none}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge{cursor:auto}.vjs-seek-to-live-control .vjs-icon-placeholder{margin-right:.5em;color:#888}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge .vjs-icon-placeholder{color:red}.video-js .vjs-time-control{-webkit-box-flex:0;-webkit-flex:none;-moz-box-flex:0;-ms-flex:none;flex:none;font-size:1em;line-height:3em;min-width:2em;width:auto;padding-left:1em;padding-right:1em}.video-js .vjs-current-time,.video-js .vjs-duration,.vjs-live .vjs-time-control,.vjs-live .vjs-time-divider{display:none}.vjs-time-divider{display:none;line-height:3em}.video-js .vjs-play-control{cursor:pointer}.video-js .vjs-play-control .vjs-icon-placeholder{-webkit-box-flex:0;-webkit-flex:none;-moz-box-flex:0;-ms-flex:none;flex:none}.vjs-text-track-display{position:absolute;bottom:3em;left:0;right:0;top:0;pointer-events:none}.video-js.vjs-controls-disabled .vjs-text-track-display,.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display{bottom:1em}.video-js .vjs-text-track{font-size:1.4em;text-align:center;margin-bottom:.1em}.vjs-subtitles{color:#fff}.vjs-captions{color:#fc6}.vjs-tt-cue{display:block}video::-webkit-media-text-track-display{-webkit-transform:translateY(-3em);transform:translateY(-3em)}.video-js.vjs-controls-disabled video::-webkit-media-text-track-display,.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display{-webkit-transform:translateY(-1.5em);transform:translateY(-1.5em)}.video-js .vjs-picture-in-picture-control{cursor:pointer;-webkit-box-flex:0;-webkit-flex:none;-moz-box-flex:0;-ms-flex:none;flex:none}.video-js.vjs-audio-only-mode .vjs-picture-in-picture-control{display:none}.video-js .vjs-fullscreen-control{cursor:pointer;-webkit-box-flex:0;-webkit-flex:none;-moz-box-flex:0;-ms-flex:none;flex:none}.video-js.vjs-audio-only-mode .vjs-fullscreen-control{display:none}.vjs-playback-rate .vjs-playback-rate-value,.vjs-playback-rate>.vjs-menu-button{position:absolute;top:0;left:0;width:100%;height:100%}.vjs-playback-rate .vjs-playback-rate-value{pointer-events:none;font-size:1.5em;line-height:2;text-align:center}.vjs-playback-rate .vjs-menu{width:4em;left:0}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:1.4em;text-align:center}.vjs-error .vjs-error-display:before{color:#fff;content:"X";font-family:Arial,Helvetica,sans-serif;font-size:4em;left:0;line-height:1;margin-top:-.5em;position:absolute;text-shadow:.05em .05em .1em #000;text-align:center;top:50%;vertical-align:middle;width:100%}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;margin:-25px 0 0 -25px;opacity:.85;text-align:left;border:6px solid rgba(43,51,63,.7);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-clip:padding-box;width:50px;height:50px;-webkit-border-radius:25px;-moz-border-radius:25px;border-radius:25px;visibility:hidden}.vjs-seeking .vjs-loading-spinner,.vjs-waiting .vjs-loading-spinner{display:block;-webkit-animation:vjs-spinner-show 0s linear .3s forwards;-moz-animation:vjs-spinner-show 0s linear .3s forwards;-o-animation:vjs-spinner-show 0s linear .3s forwards;animation:vjs-spinner-show 0s linear .3s forwards}.vjs-loading-spinner:after,.vjs-loading-spinner:before{content:"";position:absolute;margin:-6px;-webkit-box-sizing:inherit;-moz-box-sizing:inherit;box-sizing:inherit;width:inherit;height:inherit;-webkit-border-radius:inherit;-moz-border-radius:inherit;border-radius:inherit;opacity:1;border:inherit;border-color:transparent;border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:after,.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:before{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;-moz-animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;-o-animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:before{border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:after{border-top-color:#fff;-webkit-animation-delay:.44s;-moz-animation-delay:.44s;-o-animation-delay:.44s;animation-delay:.44s}@-webkit-keyframes vjs-spinner-show{to{visibility:visible}}@-moz-keyframes vjs-spinner-show{to{visibility:visible}}@-o-keyframes vjs-spinner-show{to{visibility:visible}}@keyframes vjs-spinner-show{to{visibility:visible}}@-webkit-keyframes vjs-spinner-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes vjs-spinner-spin{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes vjs-spinner-spin{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes vjs-spinner-spin{100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}@-moz-keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}@-o-keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}@keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}.video-js.vjs-audio-only-mode .vjs-captions-button{display:none}.vjs-chapters-button .vjs-menu ul{width:24em}.video-js.vjs-audio-only-mode .vjs-descriptions-button{display:none}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder{vertical-align:middle;display:inline-block;margin-bottom:-.1em}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{font-family:VideoJS;content:"\f10c";font-size:1.5em;line-height:inherit}.video-js.vjs-audio-only-mode .vjs-subs-caps-button{display:none}.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder{vertical-align:middle;display:inline-block;margin-bottom:-.1em}.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{font-family:VideoJS;content:" \f12e";font-size:1.5em;line-height:inherit}.video-js.vjs-layout-small .vjs-current-time,.video-js.vjs-layout-small .vjs-duration,.video-js.vjs-layout-small .vjs-playback-rate,.video-js.vjs-layout-small .vjs-remaining-time,.video-js.vjs-layout-small .vjs-time-divider,.video-js.vjs-layout-small .vjs-volume-control,.video-js.vjs-layout-tiny .vjs-current-time,.video-js.vjs-layout-tiny .vjs-duration,.video-js.vjs-layout-tiny .vjs-playback-rate,.video-js.vjs-layout-tiny .vjs-remaining-time,.video-js.vjs-layout-tiny .vjs-time-divider,.video-js.vjs-layout-tiny .vjs-volume-control,.video-js.vjs-layout-x-small .vjs-current-time,.video-js.vjs-layout-x-small .vjs-duration,.video-js.vjs-layout-x-small .vjs-playback-rate,.video-js.vjs-layout-x-small .vjs-remaining-time,.video-js.vjs-layout-x-small .vjs-time-divider,.video-js.vjs-layout-x-small .vjs-volume-control{display:none}.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover{width:auto;width:initial}.video-js.vjs-layout-tiny .vjs-progress-control,.video-js.vjs-layout-x-small .vjs-progress-control{display:none}.video-js.vjs-layout-x-small .vjs-custom-control-spacer{-webkit-box-flex:1;-webkit-flex:auto;-moz-box-flex:1;-ms-flex:auto;flex:auto;display:block}.vjs-modal-dialog.vjs-text-track-settings{background-color:#2b333f;background-color:rgba(43,51,63,.75);color:#fff;height:70%}.vjs-text-track-settings .vjs-modal-dialog-content{display:table}.vjs-text-track-settings .vjs-track-settings-colors,.vjs-text-track-settings .vjs-track-settings-controls,.vjs-text-track-settings .vjs-track-settings-font{display:table-cell}.vjs-text-track-settings .vjs-track-settings-controls{text-align:right;vertical-align:bottom}@supports (display:grid){.vjs-text-track-settings .vjs-modal-dialog-content{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr;padding:20px 24px 0 24px}.vjs-track-settings-controls .vjs-default-button{margin-bottom:20px}.vjs-text-track-settings .vjs-track-settings-controls{grid-column:1/-1}.vjs-layout-small .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-tiny .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-x-small .vjs-text-track-settings .vjs-modal-dialog-content{grid-template-columns:1fr}}.vjs-track-setting>select{margin-right:1em;margin-bottom:.5em}.vjs-text-track-settings fieldset{margin:10px;border:none}.vjs-text-track-settings fieldset span{display:inline-block;padding:0 6px 8px}.vjs-text-track-settings fieldset span>select{max-width:7.3em}.vjs-text-track-settings legend{color:#fff;font-weight:700;font-size:14px}.vjs-text-track-settings .vjs-label{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);margin:0 5px 5px 0;border:0;height:1px;width:1px;overflow:hidden}.vjs-track-settings-controls button:active,.vjs-track-settings-controls button:focus{outline-style:solid;outline-width:medium;background-image:-webkit-gradient(linear,left bottom, left top,color-stop(88%, #fff),to(#73859f));background-image:-webkit-linear-gradient(bottom,#fff 88%,#73859f 100%);background-image:-moz-linear-gradient(bottom,#fff 88%,#73859f 100%);background-image:-o-linear-gradient(bottom,#fff 88%,#73859f 100%);background-image:linear-gradient(0deg,#fff 88%,#73859f 100%)}.vjs-track-settings-controls button:hover{color:rgba(43,51,63,.75)}.vjs-track-settings-controls button{background-color:#fff;background-image:-webkit-gradient(linear,left top, left bottom,color-stop(88%, #fff),to(#73859f));background-image:-webkit-linear-gradient(top,#fff 88%,#73859f 100%);background-image:-moz-linear-gradient(top,#fff 88%,#73859f 100%);background-image:-o-linear-gradient(top,#fff 88%,#73859f 100%);background-image:linear-gradient(-180deg,#fff 88%,#73859f 100%);color:#2b333f;cursor:pointer;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.vjs-track-settings-controls .vjs-default-button{margin-right:1em}.vjs-title-bar{background:rgba(0,0,0,.9);background:-webkit-gradient(linear,left top, left bottom,color-stop(0, rgba(0,0,0,.9)),color-stop(60%, rgba(0,0,0,.7)),to(rgba(0,0,0,0)));background:-webkit-linear-gradient(top,rgba(0,0,0,.9) 0,rgba(0,0,0,.7) 60%,rgba(0,0,0,0) 100%);background:-moz-linear-gradient(top,rgba(0,0,0,.9) 0,rgba(0,0,0,.7) 60%,rgba(0,0,0,0) 100%);background:-o-linear-gradient(top,rgba(0,0,0,.9) 0,rgba(0,0,0,.7) 60%,rgba(0,0,0,0) 100%);background:linear-gradient(180deg,rgba(0,0,0,.9) 0,rgba(0,0,0,.7) 60%,rgba(0,0,0,0) 100%);font-size:1.2em;line-height:1.5;-webkit-transition:opacity .1s;-o-transition:opacity .1s;-moz-transition:opacity .1s;transition:opacity .1s;padding:.666em 1.333em 4em;pointer-events:none;position:absolute;top:0;width:100%}.vjs-title-bar-description,.vjs-title-bar-title{margin:0;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.vjs-title-bar-title{font-weight:700;margin-bottom:.333em}.vjs-playing.vjs-user-inactive .vjs-title-bar{opacity:0;-webkit-transition:opacity 1s;-o-transition:opacity 1s;-moz-transition:opacity 1s;transition:opacity 1s}.video-js .vjs-skip-forward-5{cursor:pointer}.video-js .vjs-skip-forward-10{cursor:pointer}.video-js .vjs-skip-forward-30{cursor:pointer}.video-js .vjs-skip-backward-5{cursor:pointer}.video-js .vjs-skip-backward-10{cursor:pointer}.video-js .vjs-skip-backward-30{cursor:pointer}@media print{.video-js>:not(.vjs-tech):not(.vjs-poster){visibility:hidden}}.vjs-resize-manager{position:absolute;top:0;left:0;width:100%;height:100%;border:none;z-index:-1000}.js-focus-visible .video-js :focus:not(.focus-visible){outline:0}.video-js :focus:not(:focus-visible){outline:0} +@-webkit-keyframes up-next-circle-countdown{from{stroke-dashoffset:185;stroke-dasharray:185}to{stroke-dashoffset:0;stroke-dasharray:185}}@-moz-keyframes up-next-circle-countdown{from{stroke-dashoffset:185;stroke-dasharray:185}to{stroke-dashoffset:0;stroke-dasharray:185}}@-o-keyframes up-next-circle-countdown{from{stroke-dashoffset:185;stroke-dasharray:185}to{stroke-dashoffset:0;stroke-dasharray:185}}@keyframes up-next-circle-countdown{from{stroke-dashoffset:185;stroke-dasharray:185}to{stroke-dashoffset:0;stroke-dasharray:185}}@-webkit-keyframes media-slider-reveal{0%{opacity:0}100%{opacity:1}}@-moz-keyframes media-slider-reveal{0%{opacity:0}100%{opacity:1}}@-o-keyframes media-slider-reveal{0%{opacity:0}100%{opacity:1}}@keyframes media-slider-reveal{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes media-item-reveal{0%{opacity:0;-webkit-transform:scale(0.2);transform:scale(0.2)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@-moz-keyframes media-item-reveal{0%{opacity:0;-moz-transform:scale(0.2);transform:scale(0.2)}100%{opacity:1;-moz-transform:scale(1);transform:scale(1)}}@-o-keyframes media-item-reveal{0%{opacity:0;-o-transform:scale(0.2);transform:scale(0.2)}100%{opacity:1;-o-transform:scale(1);transform:scale(1)}}@keyframes media-item-reveal{0%{opacity:0;-webkit-transform:scale(0.2);-moz-transform:scale(0.2);-o-transform:scale(0.2);transform:scale(0.2)}100%{opacity:1;-webkit-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}.video-player{position:relative;height:100%}.video-player{outline-color:rgba(0,0,0,0);outline-color:transparent}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-left{z-index:3}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-bottom-right{bottom:16px}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-top-right{opacity:0;visibility:hidden;display:block;-webkit-animation:media-slider-reveal .4s linear;-moz-animation:media-slider-reveal .4s linear;-o-animation:media-slider-reveal .4s linear;animation:media-slider-reveal .4s linear;top:12px;left:12px;bottom:48px;z-index:3}.video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-bottom-left{display:none;-webkit-animation:media-slider-reveal .1s linear;-moz-animation:media-slider-reveal .1s linear;-o-animation:media-slider-reveal .1s linear;animation:media-slider-reveal .1s linear;top:12px;right:12px;z-index:2}.embed-wrap .video-js.vjs-mediacms .vjs-corner-layer.vjs-corner-bottom-left{top:52px;top:3.25rem}.video-js.vjs-mediacms.vjs-has-started.vjs-paused .vjs-corner-layer.vjs-corner-bottom-left{display:block}.video-js.vjs-mediacms .up-next-loader{position:absolute;top:-12px;left:-12px;right:-12px;bottom:-48px;display:block;background-color:#000}.video-js.vjs-mediacms .up-next-loader .next-media-poster{position:absolute;top:0;left:0;right:0;bottom:0;display:block;opacity:.4;background-position:center;background-repeat:no-repeat;-moz-background-size:contain;background-size:contain;-webkit-filter:blur(4px);filter:blur(4px)}.video-js.vjs-mediacms .up-next-loader-inner{position:relative;width:100%;height:100%;display:table;text-align:center;line-height:1.3;font-family:Roboto,Arial,Helvetica,sans-serif}.video-js.vjs-mediacms .up-next-loader-inner>div{width:100%;height:100%;padding:6px 12px 48px 12px;display:table-cell;vertical-align:middle}.video-js.vjs-mediacms .up-next-loader-inner .up-next-label{margin-bottom:8px;font-size:1.184615em;color:rgba(255,255,255,.7)}.video-js.vjs-mediacms .up-next-loader-inner .next-media-title{margin:0 20px;padding:0 0 2px;font-weight:500;font-size:1.69231em;color:#eee;line-height:1.3;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;background-color:transparent;display:block;max-height:3.9;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;white-space:normal}@media screen and (max-width: 688px){.video-js.vjs-mediacms .up-next-loader-inner .next-media-title{font-size:21px;line-height:1.3;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;background-color:transparent;display:block;max-height:1.3;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;white-space:normal}}@media screen and (max-width: 491px){.video-js.vjs-mediacms .up-next-loader-inner .next-media-title{font-size:19px}}.video-js.vjs-mediacms .up-next-loader-inner .next-media-author{margin-bottom:10px;font-size:1.1em;color:#fff}@media screen and (max-width: 491px){.video-js.vjs-mediacms .up-next-loader-inner .next-media-author{margin-bottom:5px}}.video-js.vjs-mediacms .up-next-loader-inner .up-next-cancel button{padding:10px 20px;font-size:15.4px;font-weight:500;line-height:20.02px;word-spacing:0;color:#eee;outline-width:0;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.video-js.vjs-mediacms .up-next-loader-inner .up-next-cancel button:hover{background-color:rgba(255,255,255,.15)}@media screen and (max-width: 688px){.video-js.vjs-mediacms .up-next-loader-inner .up-next-cancel button{padding:8px 16px;font-size:14.3px;line-height:18.59px}}.video-js.vjs-mediacms .up-next-loader-inner .go-next{padding:16px 0}@media screen and (max-width: 688px){.video-js.vjs-mediacms .up-next-loader-inner .go-next{padding:12px 0}}.video-js.vjs-mediacms .up-next-loader-inner .go-next a{position:relative;display:inline-block;text-decoration:none;width:56px;height:56px;line-height:56px;overflow:visible;color:#fff;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}@media screen and (max-width: 688px){.video-js.vjs-mediacms .up-next-loader-inner .go-next a{width:48px;height:48px;line-height:48px}}.video-js.vjs-mediacms .up-next-loader-inner .go-next a span{position:absolute;top:0;left:0;width:100%;height:100%;display:block;background-color:#fff;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;opacity:.3}.video-js.vjs-mediacms .up-next-loader-inner .go-next a i.material-icons{margin-top:-1px;font-size:32px}@media screen and (max-width: 688px){.video-js.vjs-mediacms .up-next-loader-inner .go-next a i.material-icons{font-size:32px}}.video-js.vjs-mediacms .up-next-loader-inner .go-next svg.radial-timer{display:none;position:absolute;top:-4px;left:-4px;width:64px;height:64px;-webkit-transform:rotateZ(-90deg);-moz-transform:rotateZ(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotateZ(-90deg);transform:rotateZ(-90deg)}.video-js.vjs-mediacms .up-next-loader-inner .go-next svg.radial-timer circle{visibility:hidden;stroke-dasharray:0;stroke-dashoffset:185;stroke-linecap:square;stroke-width:4px;stroke:#fff;fill:none;-webkit-animation:up-next-circle-countdown 10s linear forwards;-moz-animation:up-next-circle-countdown 10s linear forwards;-o-animation:up-next-circle-countdown 10s linear forwards;animation:up-next-circle-countdown 10s linear forwards}.video-js.vjs-mediacms .up-next-loader-inner .go-next svg.radial-timer circle:first-child{visibility:visible}@media screen and (max-width: 688px){.video-js.vjs-mediacms .up-next-loader-inner .go-next svg.radial-timer{width:56px;height:56px}.video-js.vjs-mediacms .up-next-loader-inner .go-next svg.radial-timer circle{stroke-width:3px;visibility:visible}.video-js.vjs-mediacms .up-next-loader-inner .go-next svg.radial-timer circle:first-child{visibility:hidden}}.video-js.vjs-mediacms.vjs-mediacms-canceled-next .up-next-loader-inner .go-next svg.radial-timer circle{display:none;-webkit-animation:none;-moz-animation:none;-o-animation:none;animation:none}.video-js.vjs-mediacms .more-media{display:block;font-family:Roboto,Arial,Helvetica,sans-serif}.video-js.vjs-mediacms.vjs-fullscreen .more-media{font-size:.8125em}.video-js.vjs-mediacms .more-media-item{position:relative;display:inline-block}.video-js.vjs-mediacms .more-media-item>*{display:block;color:#fff;text-decoration:none}.video-js.vjs-mediacms .more-media-item.before-more-media-item-load{opacity:0;-webkit-transform:scale(0.2);-moz-transform:scale(0.2);-ms-transform:scale(0.2);-o-transform:scale(0.2);transform:scale(0.2);-webkit-animation:media-item-reveal .3s linear forwards;-moz-animation:media-item-reveal .3s linear forwards;-o-animation:media-item-reveal .3s linear forwards;animation:media-item-reveal .3s linear forwards;-webkit-animation-delay:-webkit-calc(var(--n) * 0.075s);-moz-animation-delay:-moz-calc(var(--n) * 0.075s);-o-animation-delay:calc(var(--n) * 0.075s);animation-delay:calc(var(--n) * 0.075s)}.video-js.vjs-mediacms .more-media-item-thumb{display:block;background-position:center;-moz-background-size:cover;background-size:cover}.video-js.vjs-mediacms .more-media-duration{position:absolute;bottom:0;right:0;padding:4px}.video-js.vjs-mediacms .more-media-duration>*{display:inline-block;padding:.181819em;font-size:.84615em;line-height:1;font-weight:500;background-color:#000;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;opacity:.75}.video-js.vjs-mediacms .more-media-item-content{position:relative;display:block;width:100%}.video-js.vjs-mediacms .more-media-title{font-weight:500}.video-js.vjs-mediacms .more-media-meta{display:block;font-size:.84615em;line-height:1.30001;margin-top:2px}.video-js.vjs-mediacms .more-media-meta>*~*:before{content:"•";content:"•";margin:0 4px}.video-js.vjs-mediacms .more-media.full-wrapper{position:absolute;top:4px;left:0;right:0;bottom:4px;padding:1em 1.5em 1.5em}.embed-wrap .video-js.vjs-mediacms .more-media.full-wrapper{padding:2em 3em 3em}.video-js.vjs-mediacms .more-media.full-wrapper:before{content:"";position:absolute;top:-100%;left:-100%;right:-100%;bottom:-100%;display:block;background-color:rgba(0,0,0,.9)}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-1 .more-media-item{width:100%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-2 .more-media-item{width:50%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-3 .more-media-item{width:33.3333333333%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-4 .more-media-item{width:25%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-5 .more-media-item{width:20%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-6 .more-media-item{width:16.6666666667%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-row-1 .more-media-item{height:100%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-row-2 .more-media-item{height:50%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-row-3 .more-media-item{height:33.3333333333%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-row-4 .more-media-item{height:25%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-row-5 .more-media-item{height:20%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-row-6 .more-media-item{height:16.6666666667%}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-1.grid-row-1 .more-media-item:nth-child(n+2){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-1.grid-row-2 .more-media-item:nth-child(n+3){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-1.grid-row-3 .more-media-item:nth-child(n+4){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-1.grid-row-4 .more-media-item:nth-child(n+5){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-1.grid-row-5 .more-media-item:nth-child(n+6){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-1.grid-row-6 .more-media-item:nth-child(n+7){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-2.grid-row-1 .more-media-item:nth-child(n+3){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-2.grid-row-2 .more-media-item:nth-child(n+5){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-2.grid-row-3 .more-media-item:nth-child(n+7){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-2.grid-row-4 .more-media-item:nth-child(n+9){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-2.grid-row-5 .more-media-item:nth-child(n+11){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-2.grid-row-6 .more-media-item:nth-child(n+13){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-3.grid-row-1 .more-media-item:nth-child(n+4){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-3.grid-row-2 .more-media-item:nth-child(n+7){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-3.grid-row-3 .more-media-item:nth-child(n+10){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-3.grid-row-4 .more-media-item:nth-child(n+13){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-3.grid-row-5 .more-media-item:nth-child(n+16){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-3.grid-row-6 .more-media-item:nth-child(n+19){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-4.grid-row-1 .more-media-item:nth-child(n+5){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-4.grid-row-2 .more-media-item:nth-child(n+9){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-4.grid-row-3 .more-media-item:nth-child(n+13){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-4.grid-row-4 .more-media-item:nth-child(n+17){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-4.grid-row-5 .more-media-item:nth-child(n+21){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-4.grid-row-6 .more-media-item:nth-child(n+25){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-5.grid-row-1 .more-media-item:nth-child(n+6){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-5.grid-row-2 .more-media-item:nth-child(n+11){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-5.grid-row-3 .more-media-item:nth-child(n+16){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-5.grid-row-4 .more-media-item:nth-child(n+21){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-5.grid-row-5 .more-media-item:nth-child(n+26){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-5.grid-row-6 .more-media-item:nth-child(n+31){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-6.grid-row-1 .more-media-item:nth-child(n+7){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-6.grid-row-2 .more-media-item:nth-child(n+13){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-6.grid-row-3 .more-media-item:nth-child(n+19){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-6.grid-row-4 .more-media-item:nth-child(n+25){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-6.grid-row-5 .more-media-item:nth-child(n+31){display:none}.video-js.vjs-mediacms .more-media.full-wrapper.grid-col-6.grid-row-6 .more-media-item:nth-child(n+37){display:none}.video-js.vjs-mediacms .more-media.full-wrapper>div{position:relative;width:100%;height:100%;display:block}.video-js.vjs-mediacms .more-media.full-wrapper>div>*{position:relative;width:100%;height:100%;display:block}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-item{float:left}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-item>*{top:2px;left:2px;right:2px;bottom:2px}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-wrap-title,.video-js.vjs-mediacms .more-media.full-wrapper .prev-slide,.video-js.vjs-mediacms .more-media.full-wrapper .next-slide,.video-js.vjs-mediacms .more-media.full-wrapper .close-more-videos,.video-js.vjs-mediacms .more-media.full-wrapper .open-more-videos,.video-js.vjs-mediacms .more-media.inline-slider-small .more-media-wrap-title,.video-js.vjs-mediacms .more-media.inline-slider-small .prev-slide,.video-js.vjs-mediacms .more-media.inline-slider-small .next-slide,.video-js.vjs-mediacms .more-media.inline-slider-small .close-more-videos,.video-js.vjs-mediacms .more-media.inline-slider-small .open-more-videos{display:none}.video-js.vjs-mediacms .more-media.inline-slider,.video-js.vjs-mediacms .more-media.inline-slider-small{position:absolute;bottom:4px;left:0;right:0}.video-js.vjs-mediacms .more-media.inline-slider>div,.video-js.vjs-mediacms .more-media.inline-slider-small>div{position:relative}.video-js.vjs-mediacms .more-media.inline-slider>div>*,.video-js.vjs-mediacms .more-media.inline-slider-small>div>*{position:relative;overflow:hidden;white-space:nowrap;-webkit-overflow-scrolling:touch;scroll-behavior:smooth}.video-js.vjs-mediacms .more-media.inline-slider .more-media-item,.video-js.vjs-mediacms .more-media.inline-slider-small .more-media-item{vertical-align:top;width:188px}.video-js.vjs-mediacms .more-media.inline-slider{padding:12px 26px 16px;background-color:rgba(23,23,23,.9);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.video-js.vjs-mediacms .more-media.inline-slider .more-media-wrap-title{position:relative;display:block;font-size:1.076925em;font-weight:600;font-stretch:100%;line-height:1.428574;margin:0 0 12px;color:#eee}.video-js.vjs-mediacms .more-media.inline-slider .more-media-item{height:100px}.video-js.vjs-mediacms .more-media.inline-slider .more-media-item>*{top:0;left:0;right:8px;bottom:0}.video-js.vjs-mediacms .more-media.inline-slider .prev-slide,.video-js.vjs-mediacms .more-media.inline-slider .next-slide{position:absolute;top:50%;margin-top:-20px;font-size:1.75em}.video-js.vjs-mediacms .more-media.inline-slider .prev-slide button,.video-js.vjs-mediacms .more-media.inline-slider .next-slide button{width:40px;height:40px;line-height:40px;background-color:#333;-webkit-box-shadow:0 1px 5px rgba(0,0,0,.2);-moz-box-shadow:0 1px 5px rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.2)}.video-js.vjs-mediacms .more-media.inline-slider .prev-slide{left:-20px}.video-js.vjs-mediacms .more-media.inline-slider .next-slide{right:-20px}.video-js.vjs-mediacms .more-media.inline-slider-small>div>*{overflow:auto}.video-js.vjs-mediacms .more-media.inline-slider-small .more-media-item>*{margin-right:10px}.video-js.vjs-mediacms .more-media.inline-slider-small .more-media-item-thumb{position:relative;height:100px}.video-js.vjs-mediacms .more-media.inline-slider-small .more-media-item-content{padding:10px 0}.video-js.vjs-mediacms .more-media.inline-slider-small .more-media-duration>*{padding:.4545475em .363638em;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.video-js.vjs-mediacms .more-media.inline-slider-small .more-media-title{line-height:1.198155;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;background-color:transparent;display:block;max-height:1.198155;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;white-space:normal}.video-js.vjs-mediacms .more-media.inline-slider-small .more-media-views{display:none}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-item>*,.video-js.vjs-mediacms .more-media.inline-slider .more-media-item>*{position:absolute}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-item-thumb,.video-js.vjs-mediacms .more-media.inline-slider .more-media-item-thumb{position:absolute;top:0;left:0;width:100%;height:100%}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-item-content,.video-js.vjs-mediacms .more-media.inline-slider .more-media-item-content{height:100%;padding:10px;background-image:-moz-linear-gradient(top, rgba(12, 12, 12, 0.8) 0, transparent 100px);background-image:-o-linear-gradient(top, rgba(12, 12, 12, 0.8) 0, transparent 100px);background-image:-webkit-linear-gradient(top, rgba(12, 12, 12, 0.8) 0, transparent 100px);background-image:linear-gradient(to bottom, rgba(12, 12, 12, 0.8) 0, transparent 100px)}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-item-content,.video-js.vjs-mediacms .more-media.full-wrapper .more-media-duration,.video-js.vjs-mediacms .more-media.inline-slider .more-media-item-content,.video-js.vjs-mediacms .more-media.inline-slider .more-media-duration{opacity:0;will-change:opacity;-webkit-transition-property:opacity;-o-transition-property:opacity;-moz-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:.3s;-moz-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-item>*:hover .more-media-item-content,.video-js.vjs-mediacms .more-media.full-wrapper .more-media-item>*:hover .more-media-duration,.video-js.vjs-mediacms .more-media.inline-slider .more-media-item>*:hover .more-media-item-content,.video-js.vjs-mediacms .more-media.inline-slider .more-media-item>*:hover .more-media-duration{opacity:1}.video-js.vjs-mediacms .more-media.full-wrapper .more-media-title,.video-js.vjs-mediacms .more-media.inline-slider .more-media-title{line-height:1.198155;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;background-color:transparent;display:block;max-height:2.39631;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal}.video-js.vjs-mediacms .more-media.inline-slider.hidden-inline-more-media{right:auto;padding:0}.video-js.vjs-mediacms .more-media.inline-slider.hidden-inline-more-media>div,.video-js.vjs-mediacms .more-media.inline-slider.hidden-inline-more-media .more-media-wrap-title,.video-js.vjs-mediacms .more-media.inline-slider.hidden-inline-more-media .close-more-videos{display:none}.video-js.vjs-mediacms .more-media.inline-slider.hidden-inline-more-media .open-more-videos{display:inline-block}.video-js.vjs-mediacms .open-more-videos{display:none;padding:.85714em 1em;font-size:1.076925em;font-weight:500;font-stretch:100%;line-height:1.428574;color:#eee;border:0;background:none}.video-js.vjs-mediacms .close-more-videos{position:absolute;right:14px;top:0;padding:4px;margin:8px 4px 8px 8px;display:inline-block;font-size:1.538475em;font-weight:500;line-height:1;border:0;background:0}.video-js.vjs-mediacms .more-media{display:none}.embed-wrap .video-js.vjs-mediacms .more-media,.media-embed-wrap .video-js.vjs-mediacms .more-media{display:block}.video-js.vjs-mediacms.vjs-ended .more-media{display:block}.video-js.vjs-mediacms.vjs-ended .vjs-corner-layer.vjs-corner-bottom-left{display:block}.video-js.vjs-mediacms.vjs-ended.vjs-mediacms-has-up-next-view .more-media,.video-js.vjs-mediacms.vjs-ended.vjs-mediacms-has-up-next-view .vjs-corner-layer.vjs-corner-bottom-left{visibility:hidden}.video-js.vjs-mediacms.vjs-ended.vjs-mediacms-has-up-next-view .vjs-corner-layer.vjs-corner-top-right{-webkit-transition-property:all;-o-transition-property:all;-moz-transition-property:all;transition-property:all;-webkit-transition-duration:.4s;-moz-transition-duration:.4s;-o-transition-duration:.4s;transition-duration:.4s;visibility:visible;opacity:1}.video-js.vjs-mediacms.vjs-ended.vjs-mediacms-has-up-next-view .vjs-corner-layer.vjs-corner-top-right svg.radial-timer{display:block}.video-js.vjs-mediacms.vjs-ended.vjs-mediacms-has-up-next-view.vjs-mediacms-up-next-hidden .more-media,.video-js.vjs-mediacms.vjs-ended.vjs-mediacms-has-up-next-view.vjs-mediacms-up-next-hidden .vjs-corner-layer.vjs-corner-bottom-left{visibility:visible}.video-js.vjs-mediacms.vjs-ended.vjs-mediacms-has-up-next-view.vjs-mediacms-up-next-hidden .vjs-corner-layer.vjs-corner-top-right{visibility:hidden;opacity:0}.video-js.vjs-mediacms.vjs-ended.vjs-mediacms-has-up-next-view.vjs-mediacms-up-next-hidden svg.radial-timer{display:none}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder .vjs-play-progress{background-color:var(--brand-color, var(--default-brand-color))}.video-js.vjs-mediacms .vjs-progress-control .vjs-progress-holder .vjs-play-progress:before{color:var(--brand-color, var(--default-brand-color))}.video-js.vjs-mediacms:hover .vjs-big-play-button{background-color:var(--brand-color, var(--default-brand-color))}.video-js.vjs-mediacms.vjs-subtitles-on .vjs-subtitles-control .vjs-icon-placeholder:after{background-color:var(--brand-color, var(--default-brand-color))}.video-js.vjs-mediacms.vjs-audio .vjs-poster{-moz-background-size:contain;background-size:contain}.vjs-corner-layer.vjs-corner-top-left{z-index:4}.vjs-corner-layer.vjs-corner-bottom-right{top:16px}.vjs-visible-share-options .vjs-corner-layer.vjs-corner-bottom-right{z-index:5;display:block;left:16px;bottom:0 !important}button.share-video-btn{position:absolute;top:0;right:0;display:inline-block;text-align:center;padding:0 6px}.vjs-has-started.vjs-user-inactive.vjs-playing button.share-video-btn{display:none !important}button.share-video-btn i.material-icons{font-size:28px}button.share-video-btn span{display:block;padding:4px 0 0;font-size:14px;font-weight:normal}.share-options-wrapper{position:absolute;top:-16px;left:-16px;right:-16px;bottom:-16px;display:none;background-color:rgba(0,0,0,.8)}.vjs-visible-share-options .share-options-wrapper{display:block}.share-options-wrapper .share-options{display:table;table-layout:fixed;width:100%;height:100%;padding-top:12px}.share-options-wrapper .share-options .share-options-inner{position:relative;display:block;display:table-cell;vertical-align:middle;text-align:center;overflow:hidden}.share-options-wrapper .share-options .sh-option{vertical-align:top;position:relative;display:inline-block;padding-right:8px;text-align:center}.share-options-wrapper .share-options .sh-option a,.share-options-wrapper .share-options .sh-option button{padding:5px 5px 2px;margin:1px 0;display:block;text-decoration:none;color:inherit;outline:0;border:0;background:none}.share-options-wrapper .share-options .sh-option a>*:first-child,.share-options-wrapper .share-options .sh-option button>*:first-child{display:block;width:60px;height:60px;line-height:60px;margin:0 auto 8px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;background-position:center;background-repeat:no-repeat}.share-options-wrapper .share-options .sh-option a>*:last-child,.share-options-wrapper .share-options .sh-option button>*:last-child{font-size:13px;line-height:18px;overflow:hidden}.share-options-wrapper .share-options .sh-option a .material-icons,.share-options-wrapper .share-options .sh-option button .material-icons{padding:0;margin:0 0 0 1px;line-height:1;font-size:30px;overflow:hidden;color:#fff}@media screen and (max-width: 1024px){.share-options-wrapper .share-options .sh-option a>*:first-child,.share-options-wrapper .share-options .sh-option button>*:first-child{width:48px;height:48px;line-height:48px;-moz-background-size:24px 24px;background-size:24px 24px}.share-options-wrapper .share-options .sh-option a>*:last-child,.share-options-wrapper .share-options .sh-option button>*:last-child{font-size:13px;line-height:16px}.share-options-wrapper .share-options .sh-option a .material-icons,.share-options-wrapper .share-options .sh-option button .material-icons{font-size:24px}}@media screen and (max-width: 767px){.share-options-wrapper .share-options .sh-option:nth-child(n+6){display:none}}@media screen and (max-width: 479px){.share-options-wrapper .share-options .sh-option:nth-child(n+4){display:none}}@media screen and (max-width: 379px){.share-options-wrapper .share-options .sh-option:nth-child(n+3){display:none}}@media screen and (max-width: 279px){.share-options-wrapper .share-options .sh-option:nth-child(n+2){display:none}}.share-options-wrapper .share-options .share-embed-opt a>*:first-child,.share-options-wrapper .share-options .share-embed-opt button>*:first-child{background-color:#f4f4f4}.share-options-wrapper .share-options .share-embed-opt a .material-icons,.share-options-wrapper .share-options .share-embed-opt button .material-icons{color:#6f6f6f}.share-options-wrapper .share-options .share-fb a>*:first-child,.share-options-wrapper .share-options .share-fb button>*:first-child{background-color:#3b5998;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAMAAAANmfvwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAByUExURQAAAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////15YQcQAAAAldFJOUwDv/H2h5Av1HIP08a9dXifgIuUbCoCsBBDStN7ykomBlOcZgiYhB3iQAAAAdUlEQVQ4y+3QuwKCMAyF4ZYmAYsXBFS8Iuh5/1e0Do5NdvVf+w0nde6fc5tljcJrYtvgnUYIFulbwIf1SiFdCdz1sVUio06GCAR1K+0L4Eh0zRJ8OtvklCXMU3q/MO+yROSZLrqJHJTBcyIP+18W30WiSX6jFy5aDFqlCyGCAAAAAElFTkSuQmCC)}.share-options-wrapper .share-options .share-tw a>*:first-child,.share-options-wrapper .share-options .share-tw button>*:first-child{background-color:#1da1f2;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAMAAAANmfvwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAEmUExURQAAAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9wGqaEAAABhdFJOUwDkQe3zAQL+D3YMY/CuGGX0hz05lLgcNZmSoSn47tyr5+gyfrcdYUW7yOnQjVcNS7qa1QrP5gX9UlnDgW53xQbBetrjCGi+RIlJbYPGJQNOwurgn9Ei9d17fSeoj/ErQILt/8VjAAAA8ElEQVQ4y2NgGLGAjRWJIy3PkmjqwcHAIOSLJGpjiWCryyaCgI9XgJsLkhKrRAsYU1UxEQqcPZkQKuyNEs2tzSBsZZiKxEBGfyRTHIAiJvpsIKYKXAmzO7JzbcFi2pxKXAwacCXeKD4ytoOIsitoasGVOCKr0NMRZEnEAGoophgksmMqEUZRooupIJGRAzV4DTGVSKHFgJ+rE7oSJjQlXMEhaCpEMSIyAU2FjDhmZAuiKuHEliDiIoIQKiSwphmOSAG4ChFWdNkooXjuaB64Ah5uTANCY2IRdjBLimG1hY+fNzwskV1Ajpefj2EUMDAAAAd7bXotJnBBAAAAAElFTkSuQmCC)}.share-options-wrapper .share-options .share-reddit a>*:first-child,.share-options-wrapper .share-options .share-reddit button>*:first-child{background-color:#ff4500;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAMAAAANmfvwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFBUExURQAAAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////26H9vQAAABqdFJOUwDF5PXttuge4gwT9zHUThZf2vMD8UXAeFfLmmxaNwrb6q+iqtYCCLEZYxC1aIJvuyog52Vdh88BBTrMM4+ocKfVKKwl9Lmj3Eot8rec+d2pMBpQ/lSknrJ3s/bYXHrTsPzwaXGS35bmgfvR//llAAAA/klEQVQ4y2NgGAVAwC9mK+AsyubuiVuJhIiTA5NXVpY9biVSbgzCjhxZWay4lVjZAQlRMVdrnCo42SwJudaAA7+8IZ8uK4upCY85Nkk5di4GD2+XLDAIljS2UAMKoABZFW4jxiwkYMbLrSCAooQ3CwsQQlECEZP08QNLhYVD+ChKFEEiHJwMAb5AWpqBIRLEF0SNGG2IUCAzkJZhYAgFUvI8qO7VAWnzDwI7mUkiAqRSGc3TmpiuVUJToiGCoYQPPez0QKJpUqmZCemssVFAtroqRvjaAIXZUqSTZJIz4oBMfS0scRASDTKIORFEsogLY08HMfFMYHlGcfaRnj0B5hlVM2lFOakAAAAASUVORK5CYII=)}.share-options-wrapper .share-options .share-tumblr a>*:first-child,.share-options-wrapper .share-options .share-tumblr button>*:first-child{background-color:#35465c;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAMAAAANmfvwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAACNUExURQAAAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wOLM4UAAAAudFJOUwBZI01MWOMB1PjN4fpX6AJFKgaxvN/84kie9VUJ3iB+3Ar7B1/zr0tWE8O71brPIxWiAAAAlElEQVQ4y+3T2Q6CQAwF0AGVzgAK7gsqCrjr/f/PkxmNby0kPmqfT9J7m1Sp/6ixMZksRlPAk8kCQE8UZViTviQux1rASxLiRL6xAoG+3ziCzwy+IKGOXov0gyNEHReXiPhKJzSVVl00nq4tOYvExa1Eklpy3e7XPPFn1hyiHU9o8j6vsGk4d6KQ0vjLwMTx6ucf9An38RQWgYRfawAAAABJRU5ErkJggg==)}.share-options-wrapper .share-options .share-pinterest a>*:first-child,.share-options-wrapper .share-options .share-pinterest button>*:first-child{background-color:#bd081c;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAMAAAANmfvwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAEvUExURQAAAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////6vRm/YAAABkdFJOUwDUHSjBZQX0/fXce78bwhKp8ife/sBVooz6bM7GqtWAAWtRiREh2/c5le8ZYjUIEMlyMJKU7Abi7mf28yxg+z5v4XY8KgdXX0ywIiBkU6ihAytd3x9QslJ98S27aS74W6NhSyVzU6IoAAAA8ElEQVQ4y+2TRXIDQRAEW9KiGM3MzEwyMzNj/v8Nng3r2Ot9gF2n7Ig8zEzXiPz57Oc31lhI22NhwtEttUyM6sbhFRzsbVUX01AY0AzH4uHmByehr0dRLuFO5DoX8CCkFMXiSeTeny8a7u0npigFnuXRHLUpGGI0Kgp8im2UumBoAUXxeZMPWIob7mjDVZQK7/LiUQl42KVZUU54/boosxnwCLRrD3NG8Rh2DY0nGYpryo59fgrZjDOVhc6QJTklXJaT5lrdYXvc9lhPzeJbXaFdWKW8IrlE5pe6zFCai2hUnumo0rV6iSilof7/b9byDZ5WLQHgKwvDAAAAAElFTkSuQmCC)}.share-options-wrapper .share-options .share-vk a>*:first-child,.share-options-wrapper .share-options .share-vk button>*:first-child{background-color:#4680c2;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAMAAAANmfvwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAEyUExURQAAAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////y3XQVoAAABldFJOUwD58/UHdPfeCA/73AbGQNLASif4Iu9q32O19ioCUm20Pk7LA+rZ5oJRZjIJuUY510RcqJlrF4BghVR85JgLMd3OV76GOPCD+uHb8SCmpIR3/fSd7dC3reLMFQFkN47Rwn+ifuctQEA1MAAAASpJREFUOMvlk2VyAzEMhbXQbbwbarBJyszMlCZlxqTM9f2v0FpyKu9MbxD92feeP2vGshegGete/pY3gzomsbppZTOpTLEHbjAtYDhHSNlFN0ouDjX8eikVLq6jaY0o4ybQxDqgndgl3DhvIHphFeDhDlVeqPiCEXGEekLFL0QvKN3CyDnK9JiKSx6aQISQZwvlMB3umtp8MuKCuEXVFyEkZaO1vxtIPvpYR2FNNaa3Qm3eXI0UnwqUrP0NWAxS8gHv0qwhwZfQq7PXrxAiR4yL2pD/ltPGiEiElq7SWngGs5U1iGwpc6bl8S4zkw4janS5S9KHJ8zEBxhRj6Hik6lGmckkzS4As9rtG8fqX56mMKCNOXJ7oUc63nkaOAf2jrZdtm9Z/nZT/q8/+2CSW2b1+zIAAAAASUVORK5CYII=)}.share-options-wrapper .share-options .share-linkedin a>*:first-child,.share-options-wrapper .share-options .share-linkedin button>*:first-child{background-color:#0077b5;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAMAAAANmfvwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAADAUExURQAAAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wOj5kwAAAA/dFJOUwDtO9fWOjRj0LlD/kr9K9OTvzCLBjNc+B45YpJxQIoP4U7R34kSVVKH8AnO3UYvCB3mLEVoSeh+PCo9Qdk1wa0WUTEAAACgSURBVDjL5dBHDsJADAVQQwglCb333nvv/PvfCpslaJwtUrwY64+eLM8QBbgKmWQ6p5M6gF5bJZBaqqQvZKeS8ALu2Wff9fHqIzb7y/1JdPM8h2ajQatW+SEHXuVF9AC2q7nsFSp9kxjfJojiwMn6vA7llJHIBFfOvJlMx0O7wz1rJhOODe4RM+lydLhbZtKUn9SnVDkWdWJzjP45CVS9AX9hKlcwUFOvAAAAAElFTkSuQmCC)}.share-options-wrapper .share-options .share-mix a>*:first-child,.share-options-wrapper .share-options .share-mix button>*:first-child{background-color:#ff8226;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAMAAAANmfvwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAACTUExURQAAAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9E7JV4AAAAwdFJOUwAV7vMX/P76JPECqkdDdSb3cYwcciM4cPXhTukYEA7vdynyKF/lCeL7OnjtT3MSHhkh8ZcAAACHSURBVDjL7dK3DsJQDIXhPwlpdEKvoSWUBPD7Px0XBqYbs8AEZ7P1SZasAz8cseRrpDhfDjoJSjgdVRLe4BrrJILa58h8PZ7qJJjBKFSJP4RlqpMdrNxq4plDGzMnIg07yTORifNYtJp1O2HvbgfVZXgSFn3eEbVSfkcn5lWxo5Oe123zzyt3Bd0ph0DZVBoAAAAASUVORK5CYII=)}.share-options-wrapper .share-options .share-email a>*:first-child,.share-options-wrapper .share-options .share-email button>*:first-child{background-color:#888}.share-options-wrapper .share-options .share-whatsapp a>*:first-child,.share-options-wrapper .share-options .share-whatsapp button>*:first-child{background-color:#25d366;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3xJREFUeNrMmGtIFFEUx91V0R5m5pYfRNKwtxlh5YcMelAYlEVSURAYQRFFIGWhCEKEQWkRJRFEH4JAoaLHh+yBRiGlIgmlVJhkiGKSVJaaptv/wn/gdJvZnZ3xgxd+3Nk759z9z70755y7Hr/fHzYRWoQD+0ywln0q8AEvGAE94D2oAzXgje2Z1YrYIAYcBc1++20EPAXb7XyHx8bWbAVnwEIx9gW8Bh9AL1djCkgEi8ESMEnYPwLHwVunK1KqPeVzsBvMDOI3F5wE7cK3D+yw8gk02RUxSQ/Is7mNkhmgXMwzCvaFIuS0cG4A8xyIkOwEP4WYbXaE5AoRz0CcSxEG2WBQbNPcQEISQDeNW0H8OIkwyBMPWQ08VkIu0mgIZGr3osEhcAFkuBBzTYjZbCYkCfTT4LLmrJTfEBM0gQiHQnygi/PUmgkp4M0BkKo5q89/tFc528WqFHEONWeaGvOKkJLDXoXnNi3cpIBwbewg8DhMLTfBAOfcGMYcoVoCo2EYc8R/cc9kLB1EOhTSAZp4vVoKSQaxvG4xcWwF/eLzECgCwy4SbjP7+VLILGHQa+LUBe6Iz0pslcvM38neJ4XIBDVi4VgKfvF6KdjjUshv9uFSyIAwmGrhqDJtiahLKkCGCyEx7MekkB5hkBjA+Ty4xevp4D7I0mzUg5SBXJM3TbbZ7L/KMsDH+K/aORtF0gsRT1TcKRE5qVLce8XCyCz41dPmgR7QakTU9NhI70+0APcJ1FlUa2s0/2Q+gGqFupB8Ee1W2oiO0cw7ozbKxjTN9xjHx4y8ZZVrqkII11ngtkjxeivX7CeDNt5rBF6z7HtVFC8bQswfC5ivqllkq73fZWJXLETutSoDtgijChdJzWsxvkqsnFqNSOOeV3ul5ojruy5ixJjJ2CJQCaKZGo78Ezw1xcZr2c4f43hVZutAp1jtw4FqVrXHwzQs0161A3YPShpxLMSHhYjiYFV8oTih7WdZ+Bj8EJPU8GwyLYiAFHACfBS+g5wz4ElP/VbqwXLur9q7qCD1xEuebbtpH8sCahlYIXKJao0gn0VXwJNeukkpqNo7cAnkgFOgwx9aa+HvIcru2fcsKOBqqDPtQ9Ik0rWR6NaDTVy9JCY549+A71ytBvrXsogK2gwh18FncI+Vk50/TdSXx4M4loyDoA98c/K+eybKHzV/BRgAh7+w9CsbY+IAAAAASUVORK5CYII=)}.share-options-wrapper .share-options .share-telegram a>*:first-child,.share-options-wrapper .share-options .share-telegram button>*:first-child{background-color:#08c;background-position:11px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAqtJREFUeNrsmE9LVFEYxueOM6NJiqLpVDgLFaONklBiVBQolZqRJRZlH6Ft22pXy75A+BVs0SaohkrBibDEINLShf0RG7O0dNLb88pz43C9M3POHbNZ+MKPweG95z7n/XfOaNm2HcgHCwbyxPJGSOg/vXcnOAWugmYwYG1xjTSBPtAL6pXvv21FRMpAF+gHJ0DYw2f+Xwo5BC6Dc6Ami+/4ZgupBme4+6PA0nwusRlC5GVH+PKzoCqN3yLZ5SHwRS5CJNw94BJoyeC3BmbBDxD1ELEMxkI+2v04204KsDyLv0TgM8WI8EIPnykwrSukji0nu2/U8F9lFJJgB4hlmFljIJVJSDFoA1fAaQ4hHVugiF+gFOwBBRn8R9JN1v3gIgfPPoO0pShggakoZ01kO0YSqpAS0MHdSxSKDGtHUjBHMWIVbOWARg29cYRI3m+5Rq6uScV/4YIWqWCL6tg78NERchdUGgqQA+oro7CmtGS1RiepNsrn1/MnI/ietJDmw0v0naUgR0TUUMT6IPs7FZXTVyr8MOgG7R6pWmUEkhQQVD53G3SVajKRn7mFqCa9fxB0klrwiTURVCZmiO1Z7EOEpLaBmwvo3EdE1H2KSSkiImBvmmmpY8Og1eSq+BM8V1raZgRiOYgQe+nnzhpnjagHWa6W8CNEqnuGNRHkQSat992nCJvPGwtJMpSFyh1EjvXXzkAyNCn8t35/TjxRWtbmQSYpmuSYnjNYa9wdTRMhQ3LJZTScGgkzXdd4R33sp1BNhUxxJxFGxLmN3wQPGZmT4I7GWiO5CJGXP2UEwvz7Bnig+KyA6+ACC9rLfrO2XKtjoBnQBCZAHLRn8a0Hj+yN9gEUuf1NhcgkPgBimv4RcNslZNDL11SIX86DV+A9OOblY23/f8RlfwQYAHTF0+BsYemdAAAAAElFTkSuQmCC)}.share-options-wrapper .share-options .share-more{display:inline-block !important}@media screen and (min-width: 768px){.share-options-wrapper .share-options .share-more{display:none !important}}.share-options-wrapper .share-options .share-more a>*:first-child,.share-options-wrapper .share-options .share-more button>*:first-child{background-color:rgba(255,255,255,.1)} body{--body-text-color: #111;--body-bg-color: #fafafa;--hr-color: #e1e1e1;--dotted-outline-color: rgba(0, 0, 0, 0.4);--input-color: hsl(0, 0%, 7%);--input-bg-color: hsl(0, 0%, 100%);--input-border-color: hsl(0, 0%, 80%);--header-bg-color: #fff;--header-circle-button-color: #606060;--header-popup-menu-color: rgb(13, 13, 13);--header-popup-menu-icon-color: rgb(144, 144, 144);--sidebar-bg-color: #f5f5f5;--sidebar-nav-border-color: #eee;--sidebar-nav-item-text-color: rgb(13, 13, 13);--sidebar-nav-item-icon-color: rgb(144, 144, 144);--sidebar-bottom-link-color: initial;--spinner-loader-color: rgba(17, 17, 17, 0.8);--nav-menu-active-item-bg-color: rgba(0, 0, 0, 0.1);--nav-menu-item-hover-bg-color: rgba(0, 0, 0, 0.04);--in-popup-nav-menu-item-hover-bg-color: #eee;--search-field-input-text-color: #111;--search-field-input-bg-color: #fff;--search-field-input-border-color: #ccc;--search-field-submit-text-color: #333;--search-field-submit-bg-color: #f8f8f8;--search-field-submit-border-color: #d3d3d3;--search-field-submit-hover-bg-color: #f0f0f0;--search-field-submit-hover-border-color: #c6c6c6;--search-results-item-content-link-title-text-color: rgb(17, 17, 17);--logged-in-user-thumb-bg-color: rgba(0, 0, 0, 0.07);--popup-bg-color: #fff;--popup-hr-bg-color: #eee;--popup-top-text-color: rgb(13, 13, 13);--popup-top-bg-color: #eee;--popup-msg-title-text-color: rgb(17, 17, 17);--popup-msg-main-text-color: rgba(17, 17, 17, 0.8);--comments-textarea-wrapper-border-color: #eeeeee;--comments-textarea-wrapper-after-bg-color: #0a0a0a;--comments-textarea-text-color: #0a0a0a;--comments-textarea-text-placeholder-color: rgba(17, 17, 17, 0.6);--comments-list-inner-border-color: #eee;--comment-author-text-color: #111;--comment-date-text-color: #606060;--comment-date-hover-text-color: #0a0a0a;--comment-text-color: #111;--comment-text-mentions-background-color-highlight:#00cc44;--comment-actions-material-icon-text-color: rgba(17, 17, 17, 0.8);--comment-actions-likes-num-text-color: rgba(17, 17, 17, 0.6);--comment-actions-reply-button-text-color: rgba(17, 17, 17, 0.6);--comment-actions-reply-button-hover-text-color: #111;--comment-actions-cancel-removal-button-text-color: rgba(17, 17, 17, 0.6);--comment-actions-cancel-removal-button-hover-text-color: #111;--item-bg-color: #fafafa;--item-title-text-color: #111;--item-thumb-bg-color: var(--sidebar-bg-color);--item-meta-text-color: rgba(17, 17, 17, 0.6);--item-meta-link-text-color: var(--item-text-color);--item-meta-link-hover-text-color: rgba(17, 17, 17, 0.8);--profile-page-item-content-title-bg-color: #fff;--playlist-item-main-view-full-link-text-color: rgb(96, 96, 96);--playlist-item-main-view-full-link-hover-text-color: rgb(13, 13, 13);--item-list-load-more-text-color: rgba(17, 17, 17, 0.6);--item-list-load-more-hover-text-color: rgba(17, 17, 17, 0.8);--media-list-row-border-color: #eee;--media-list-header-title-link-text-color: rgba(17, 17, 17, 0.6);--playlist-form-title-focused-bg-color: #111;--playlist-privacy-border-color: #888;--playlist-form-cancel-button-text-color: rgba(17, 17, 17, 0.6);--playlist-form-cancel-button-hover-text-color: #111;--playlist-form-field-text-color: #000;--playlist-form-field-border-color: #888;--playlist-save-popup-text-color: #111;--playlist-save-popup-border-color: #eee;--playlist-save-popup-create-icon-text-color: #909090;--playlist-save-popup-create-focus-bg-color: rgba(136, 136, 136, 0.14);--playlist-view-header-bg-color: #fafafa;--playlist-view-header-toggle-text-color: rgb(96, 96, 96);--playlist-view-header-toggle-bg-color: #fafafa;--playlist-view-title-link-text-color: rgb(13, 13, 13);--playlist-view-meta-text-color: rgba(17, 17, 17, 0.6);--playlist-view-meta-link-color: rgba(17, 17, 17, 0.6);--playlist-view-meta-link-hover-text-color: rgb(13, 13, 13);--playlist-view-status-text-color: rgba(17, 17, 17, 0.6);--playlist-view-status-bg-color: rgba(0, 0, 0, 0.05);--playlist-view-status-icon-text-color: rgba(17, 17, 17, 0.4);--playlist-view-actions-bg-color: #fafafa;--playlist-view-media-bg-color: var(--sidebar-bg-color);--playlist-view-media-order-number-color: rgb(136, 136, 136);--playlist-view-item-title-text-color: rgb(13, 13, 13);--playlist-view-item-author-text-color: rgb(13, 13, 13);--playlist-view-item-author-bg-color: var(--sidebar-bg-color);--profile-page-bg-color: #fff;--profile-page-header-bg-color: var(--body-bg-color);--profile-page-info-videos-number-text-color: rgba(17, 17, 17, 0.6);--profile-page-nav-link-text-color: rgba(17, 17, 17, 0.6);--profile-page-nav-link-hover-text-color: #111;--profile-page-nav-link-active-text-color: #111;--profile-page-nav-link-active-after-bg-color: rgba(17, 17, 17, 0.6);--add-media-page-tmplt-dialog-bg-color: #fff;--add-media-page-tmplt-uploader-bg-color: #fff;--add-media-page-tmplt-dropzone-bg-color: rgba(255, 255, 255, 0.5);--add-media-page-tmplt-drag-drop-inner-text-color: rgba(17, 17, 17, 0.4);--add-media-page-tmplt-upload-item-spiner-text-color: rgba(17, 17, 17, 0.32);--add-media-page-tmplt-upload-item-actions-text-color: rgba(17, 17, 17, 0.4);--add-media-page-qq-gallery-upload-button-text-color: rgba(17, 17, 17, 0.6);--add-media-page-qq-gallery-upload-button-icon-text-color: rgba(17, 17, 17, 0.6);--add-media-page-qq-gallery-upload-button-hover-text-color: rgba(17, 17, 17, 1);--add-media-page-qq-gallery-upload-button-hover-icon-text-color: rgba(17, 17, 17, 1);--add-media-page-qq-gallery-upload-button-focus-text-color: rgba(17, 17, 17, 0.4);--playlist-page-bg-color: rgb(250, 250, 250);--playlist-page-details-text-color: rgb(96, 96, 96);--playlist-page-thumb-bg-color: rgba(0, 0, 0, 0.07);--playlist-page-title-link-text-color: rgb(13, 13, 13);--playlist-page-actions-circle-icon-text-color: rgb(144, 144, 144);--playlist-page-actions-circle-icon-bg-color: rgb(250, 250, 250);--playlist-page-actions-nav-item-button-text-color: rgb(10, 10, 10);--playlist-page-actions-popup-message-bottom-cancel-button-text-color: rgba(17, 17, 17, 0.6);--playlist-page-actions-popup-message-bottom-cancel-button-hover-text-color: #111;--playlist-page-actions-popup-message-bottom-cancel-button-icon-hover-text-color: #111;--playlist-page-status-text-color: rgba(17, 17, 17, 0.6);--playlist-page-status-bg-color: rgba(0, 0, 0, 0.1);--playlist-page-status-icon-text-color: rgba(17, 17, 17, 0.4);--playlist-page-author-border-top-color: rgba(0, 0, 0, 0.1);--playlist-page-author-name-link-color: rgb(13, 13, 13);--playlist-page-author-edit-playlist-icon-button-text-color: rgb(96, 96, 96);--playlist-page-author-edit-playlist-icon-button-bg-color: #fafafa;--playlist-page-author-edit-playlist-icon-button-active-text-color: rgb(13, 13, 13);--playlist-page-author-edit-playlist-form-wrap-text-color: rgb(13, 13, 13);--playlist-page-author-edit-playlist-form-wrap-bg-color: #fff;--playlist-page-author-edit-playlist-form-wrap-border-color: #eee;--playlist-page-author-edit-playlist-form-wrap-title-circle-icon-hover-text-color: #111;--playlist-page-author-edit-playlist-author-thumb-text-color: #606060;--playlist-page-author-edit-playlist-author-thumb-bg-color: rgba(0, 0, 0, 0.07);--playlist-page-details-bg-color: #fafafa;--playlist-page-video-list-bg-color: #f5f5f5;--playlist-page-video-list-item-title-bg-color: #f5f5f5;--playlist-page-video-list-item-hover-bg-color: #ebebeb;--playlist-page-video-list-item-title-hover-bg-color: #ebebeb;--playlist-page-video-list-item-after-bg-color: rgba(0, 0, 0, 0.1);--playlist-page-video-list-item-order-text-color: rgb(96, 96, 96);--playlist-page-video-list-item-options-icon-hover-color: #111;--playlist-page-video-list-item-options-popup-cancel-removal-button-text-color: rgba(17, 17, 17, 0.6);--playlist-page-video-list-item-options-popup-cancel-removal-button-hover-text-color: #111;--playlist-page-video-list-item-options-popup-cancel-removal-button-hover-icon-text-color: #111;--media-author-actions-popup-bottom-cancel-removal-button-text-color: rgba(17, 17, 17, 0.6);--media-author-actions-popup-bottom-cancel-removal-button-hover-text-color: #111;--media-author-actions-popup-bottom-cancel-removal-button-hover-icon-text-color: #111;--profile-banner-wrap-popup-bottom-cancel-removal-button-text-color: rgba(17, 17, 17, 0.6);--profile-banner-wrap-popup-bottom-cancel-removal-button-hover-text-color: #111;--profile-banner-wrap-popup-bottom-cancel-removal-button-hover-icon-text-color: #111;--media-title-banner-border-color: #eee;--media-title-labels-area-text-color: rgba(17, 17, 17, 0.6);--media-title-labels-area-bg-color: rgba(238, 238, 238, 0.6);--media-title-views-text-color: rgba(17, 17, 17, 0.6);--media-actions-not-popup-circle-icon-focus-bg-color: rgba(0, 0, 0, 0.04);--media-actions-not-popup-circle-icon-active-bg-color: rgba(0, 0, 0, 0.07);--media-actions-like-before-border-color: rgba(17, 17, 17, 0.4);--media-actions-share-title-text-color: #111;--media-actions-share-options-nav-button-text-color: rgba(17, 17, 17, 0.4);--media-actions-share-options-link-text-color: rgb(17, 17, 17);--media-actions-share-copy-field-border-color: rgb(237, 237, 237);--media-actions-share-copy-field-bg-color: rgb(250, 250, 250);--media-actions-share-copy-field-input-text-color: rgb(17, 17, 17);--media-actions-more-options-popup-bg-color: #fff;--media-actions-more-options-popup-nav-link-text-color: rgb(10, 10, 10);--media-actions-share-fullscreen-popup-main-bg-color: #fff;--report-form-title-text-color: #111;--report-form-field-label-text-color: rgba(17, 17, 17, 0.6);--report-form-field-input-text-color: #111;--report-form-field-input-border-color: rgb(237, 237, 237);--report-form-field-input-bg-color: rgb(250, 250, 250);--report-form-help-text-color: rgba(17, 17, 17, 0.6);--form-actions-bottom-border-top-color: rgb(238, 238, 238);--media-author-banner-name-text-color: #0a0a0a;--media-author-banner-date-text-color: rgba(17, 17, 17, 0.6);--media-content-banner-border-color: #eee;--share-embed-inner-on-right-border-color: rgb(238, 238, 238);--share-embed-inner-on-right-ttl-text-color: #111;--share-embed-inner-on-right-icon-text-color: rgba(17, 17, 17, 0.4);--share-embed-inner-textarea-text-color: rgba(17, 17, 17, 0.8);--share-embed-inner-textarea-border-color: rgb(237, 237, 237);--share-embed-inner-textarea-bg-color: rgb(250, 250, 250);--share-embed-inner-embed-wrap-iconn-text-color: rgba(17, 17, 17, 0.4);--media-status-info-item-text-color: #111;--viewer-sidebar-auto-play-border-bottom-color: rgba(0, 0, 0, 0.1);--viewer-sidebar-auto-play-next-label-text-color: #0a0a0a;--viewer-sidebar-auto-play-option-text-color: #606060;--user-action-form-inner-bg-color: #fff;--user-action-form-inner-title-border-bottom-color: var(--sidebar-nav-border-color);--user-action-form-inner-input-border-color: #d3d3d3;--user-action-form-inner-input-text-color: #000;--user-action-form-inner-input-bg-color: #fff}body.dark_theme{--body-text-color: rgba(255, 255, 255, 0.88);--body-bg-color: #121212;--hr-color: #2a2a2a;--dotted-outline-color: rgba(255, 255, 255, 0.4);--input-color: hsla(0, 0%, 100%, 0.88);--input-bg-color: hsla(0, 0%, 0%, 0.55);--input-border-color: hsl(0, 0%, 19%);--header-bg-color: #272727;--header-circle-button-color: #fff;--header-popup-menu-color: #fff;--header-popup-menu-icon-color: rgb(144, 144, 144);--sidebar-bg-color: #1c1c1c;--sidebar-nav-border-color: rgba(255, 255, 255, 0.1);--sidebar-nav-item-text-color: #fff;--sidebar-nav-item-icon-color: rgb(144, 144, 144);--sidebar-bottom-link-color: rgba(255, 255, 255, 0.88);--spinner-loader-color: rgba(255, 255, 255, 0.74);--nav-menu-active-item-bg-color: rgba(255, 255, 255, 0.1);--nav-menu-item-hover-bg-color: rgba(255, 255, 255, 0.1);--in-popup-nav-menu-item-hover-bg-color: rgba(255, 255, 255, 0.1);--search-field-input-text-color: rgba(255, 255, 255, 0.88);--search-field-input-bg-color: #121212;--search-field-input-border-color: #303030;--search-field-submit-text-color: rgba(255, 255, 255, 0.5);--search-field-submit-bg-color: rgba(255, 255, 255, 0.08);--search-field-submit-border-color: #2e2e2e;--search-field-submit-hover-bg-color: rgba(255, 255, 255, 0.08);--search-field-submit-hover-border-color: #2e2e2e;--search-results-item-content-link-title-text-color: rgba(255, 255, 255, 0.88);--logged-in-user-thumb-bg-color: rgba(255, 255, 255, 0.14);--popup-bg-color: #242424;--popup-hr-bg-color: rgba(255, 255, 255, 0.08);--popup-top-text-color: #fff;--popup-top-bg-color: rgba(136, 136, 136, 0.4);--popup-msg-title-text-color: rgba(255, 255, 255, 0.88);--popup-msg-main-text-color: rgba(255, 255, 255, 0.5);--comments-textarea-wrapper-border-color: #898989;--comments-textarea-wrapper-after-bg-color: #fff;--comments-textarea-text-color: #fff;--comments-textarea-text-placeholder-color: #898989;--comments-list-inner-border-color: rgba(255, 255, 255, 0.08);--comment-author-text-color: rgba(255, 255, 255, 0.88);--comment-date-text-color: #888;--comment-date-hover-text-color: #fff;--comment-text-color: rgba(255, 255, 255, 0.88);--comment-text-mentions-background-color-highlight:#006622;--comment-actions-material-icon-text-color: rgba(255, 255, 255, 0.74);--comment-actions-likes-num-text-color: rgba(255, 255, 255, 0.5);--comment-actions-reply-button-text-color: rgba(255, 255, 255, 0.5);--comment-actions-reply-button-hover-text-color: rgba(255, 255, 255, 0.74);--comment-actions-cancel-removal-button-text-color: rgba(255, 255, 255, 0.5);--comment-actions-cancel-removal-button-hover-text-color: rgba(255, 255, 255, 0.74);--item-bg-color: #121212;--item-title-text-color: rgba(255, 255, 255, 0.88);--item-thumb-bg-color: var(--sidebar-bg-color);--item-meta-text-color: #888;--item-meta-link-text-color: var(--item-text-color);--item-meta-link-hover-text-color: rgba(255, 255, 255, 0.74);--profile-page-item-content-title-bg-color: #121212;--playlist-item-main-view-full-link-text-color: rgb(170, 170, 170);--playlist-item-main-view-full-link-hover-text-color: #fff;--item-list-load-more-text-color: #888;--item-list-load-more-hover-text-color: rgba(255, 255, 255, 0.74);--media-list-row-border-color: rgba(255, 255, 255, 0.08);--media-list-header-title-link-text-color: rgba(255, 255, 255, 0.5);--playlist-form-title-focused-bg-color: rgba(255, 255, 255, 0.88);--playlist-privacy-border-color: #888;--playlist-form-cancel-button-text-color: rgba(255, 255, 255, 0.5);--playlist-form-cancel-button-hover-text-color: rgba(255, 255, 255, 0.74);--playlist-form-field-text-color: #fff;--playlist-form-field-border-color: #888;--playlist-save-popup-text-color: rgba(255, 255, 255, 0.88);--playlist-save-popup-border-color: rgba(255, 255, 255, 0.1);--playlist-save-popup-create-icon-text-color: #909090;--playlist-save-popup-create-focus-bg-color: rgba(255, 255, 255, 0.14);--playlist-view-header-bg-color: #252525;--playlist-view-header-toggle-text-color: #fff;--playlist-view-header-toggle-bg-color: #252525;--playlist-view-title-link-text-color: rgba(255, 255, 255, 0.88);--playlist-view-meta-text-color: rgb(238, 238, 238);--playlist-view-meta-link-color: #fff;--playlist-view-meta-link-hover-text-color: #fff;--playlist-view-status-text-color: rgba(255, 255, 255, 0.6);--playlist-view-status-bg-color: rgba(255, 255, 255, 0.1);--playlist-view-status-icon-text-color: rgba(255, 255, 255, 0.6);--playlist-view-actions-bg-color: #252525;--playlist-view-media-bg-color: var(--sidebar-bg-color);--playlist-view-media-order-number-color: rgb(136, 136, 136);--playlist-view-item-title-text-color: #fff;--playlist-view-item-author-text-color: #fff;--playlist-view-item-author-bg-color: var(--sidebar-bg-color);--profile-page-bg-color: var(--body-bg-color);--profile-page-header-bg-color: #1a1a1a;--profile-page-info-videos-number-text-color: #888;--profile-page-nav-link-text-color: #888;--profile-page-nav-link-hover-text-color: rgba(255, 255, 255, 0.88);--profile-page-nav-link-active-text-color: rgba(255, 255, 255, 0.88);--profile-page-nav-link-active-after-bg-color: #888;--add-media-page-tmplt-dialog-bg-color: #242424;--add-media-page-tmplt-uploader-bg-color: #242424;--add-media-page-tmplt-dropzone-bg-color: rgba(28, 28, 28, 0.5);--add-media-page-tmplt-drag-drop-inner-text-color: rgba(255, 255, 255, 0.5);--add-media-page-tmplt-upload-item-spiner-text-color: rgba(255, 255, 255, 0.4);--add-media-page-tmplt-upload-item-actions-text-color: rgba(255, 255, 255, 0.5);--add-media-page-qq-gallery-upload-button-text-color: rgba(255, 255, 255, 0.528);--add-media-page-qq-gallery-upload-button-icon-text-color: rgba(255, 255, 255, 0.528);--add-media-page-qq-gallery-upload-button-hover-text-color: rgba(255, 255, 255, 0.88);--add-media-page-qq-gallery-upload-button-hover-icon-text-color: rgba(255, 255, 255, 0.88);--add-media-page-qq-gallery-upload-button-focus-text-color: rgba(255, 255, 255, 0.704);--playlist-page-bg-color: #1a1a1a;--playlist-page-details-text-color: rgb(170, 170, 170);--playlist-page-thumb-bg-color: #272727;--playlist-page-title-link-text-color: #fff;--playlist-page-actions-circle-icon-text-color: #1a1a1a;--playlist-page-actions-circle-icon-bg-color: inherit;--playlist-page-actions-nav-item-button-text-color: rgba(255, 255, 255, 0.88);--playlist-page-actions-popup-message-bottom-cancel-button-text-color: rgba(255, 255, 255, 0.5);--playlist-page-actions-popup-message-bottom-cancel-button-hover-text-color: rgba(255, 255, 255, 0.74);--playlist-page-actions-popup-message-bottom-cancel-button-icon-hover-text-color: rgba(255, 255, 255, 0.74);--playlist-page-status-text-color: rgba(255, 255, 255, 0.6);--playlist-page-status-bg-color: rgba(255, 255, 255, 0.1);--playlist-page-status-icon-text-color: rgba(255, 255, 255, 0.4);--playlist-page-author-border-top-color: rgba(255, 255, 255, 0.1);--playlist-page-author-name-link-color: rgba(255, 255, 255, 0.88);--playlist-page-author-edit-playlist-icon-button-text-color: rgb(170, 170, 170);--playlist-page-author-edit-playlist-icon-button-bg-color: #252525;--playlist-page-author-edit-playlist-icon-button-active-text-color: rgba(255, 255, 255, 0.88);--playlist-page-author-edit-playlist-form-wrap-text-color: rgba(255, 255, 255, 0.88);--playlist-page-author-edit-playlist-form-wrap-bg-color: #242424;--playlist-page-author-edit-playlist-form-wrap-border-color: rgba(255, 255, 255, 0.1);--playlist-page-author-edit-playlist-form-wrap-title-circle-icon-hover-text-color: rgba(255, 255, 255, 0.88);--playlist-page-author-edit-playlist-author-thumb-text-color: #fff;--playlist-page-author-edit-playlist-author-thumb-bg-color: #272727;--playlist-page-details-bg-color: #252525;--playlist-page-video-list-bg-color: #1c1c1c;--playlist-page-video-list-item-title-bg-color: #1c1c1c;--playlist-page-video-list-item-hover-bg-color: #333;--playlist-page-video-list-item-title-hover-bg-color: #333;--playlist-page-video-list-item-after-bg-color: rgba(255, 255, 255, 0.1);--playlist-page-video-list-item-order-text-color: rgb(170, 170, 170);--playlist-page-video-list-item-options-icon-hover-color: rgba(255, 255, 255, 0.88);--playlist-page-video-list-item-options-popup-cancel-removal-button-text-color: rgba(255, 255, 255, 0.5);--playlist-page-video-list-item-options-popup-cancel-removal-button-hover-text-color: rgba(255, 255, 255, 0.74);--playlist-page-video-list-item-options-popup-cancel-removal-button-hover-icon-text-color: rgba(255, 255, 255, 0.74);--media-author-actions-popup-bottom-cancel-removal-button-text-color: rgba(255, 255, 255, 0.5);--media-author-actions-popup-bottom-cancel-removal-button-hover-text-color: rgba(255, 255, 255, 0.74);--media-author-actions-popup-bottom-cancel-removal-button-hover-icon-text-color: rgba(255, 255, 255, 0.74);--profile-banner-wrap-popup-bottom-cancel-removal-button-text-color: rgba(255, 255, 255, 0.5);--profile-banner-wrap-popup-bottom-cancel-removal-button-hover-text-color: rgba(255, 255, 255, 0.74);--profile-banner-wrap-popup-bottom-cancel-removal-button-hover-icon-text-color: rgba(255, 255, 255, 0.74);--media-title-banner-border-color: rgba(255, 255, 255, 0.08);--media-title-labels-area-text-color: rgba(255, 255, 255, 0.6);--media-title-labels-area-bg-color: rgba(255, 255, 255, 0.08);--media-title-views-text-color: rgb(136, 136, 136);--media-actions-not-popup-circle-icon-focus-bg-color: rgba(255, 255, 255, 0.07);--media-actions-not-popup-circle-icon-active-bg-color: rgba(255, 255, 255, 0.14);--media-actions-like-before-border-color: rgba(255, 255, 255, 0.5);--media-actions-share-title-text-color: rgba(255, 255, 255, 0.88);--media-actions-share-options-nav-button-text-color: rgba(255, 255, 255, 0.5);--media-actions-share-options-link-text-color: rgba(255, 255, 255, 0.88);--media-actions-share-copy-field-border-color: rgb(41, 41, 41);--media-actions-share-copy-field-bg-color: rgb(28, 28, 28);--media-actions-share-copy-field-input-text-color: rgba(255, 255, 255, 0.88);--media-actions-more-options-popup-bg-color: #242424;--media-actions-more-options-popup-nav-link-text-color: rgba(255, 255, 255, 0.88);--media-actions-share-fullscreen-popup-main-bg-color: #242424;--report-form-title-text-color: rgba(255, 255, 255, 0.88);--report-form-field-label-text-color: rgba(255, 255, 255, 0.88);--report-form-field-input-text-color: rgba(255, 255, 255, 0.88);--report-form-field-input-border-color: rgb(41, 41, 41);--report-form-field-input-bg-color: rgb(28, 28, 28);--report-form-help-text-color: rgb(136, 136, 136);--form-actions-bottom-border-top-color: rgba(255, 255, 255, 0.08);--media-author-banner-name-text-color: rgba(255, 255, 255, 0.88);--media-author-banner-date-text-color: rgba(255, 255, 255, 0.6);--media-content-banner-border-color: rgba(255, 255, 255, 0.08);--share-embed-inner-on-right-border-color: rgba(255, 255, 255, 0.08);--share-embed-inner-on-right-ttl-text-color: rgba(255, 255, 255, 0.88);--share-embed-inner-on-right-icon-text-color: rgba(255, 255, 255, 0.5);--share-embed-inner-textarea-text-color: rgba(255, 255, 255, 0.55);--share-embed-inner-textarea-border-color: rgb(41, 41, 41);--share-embed-inner-textarea-bg-color: rgb(28, 28, 28);--share-embed-inner-embed-wrap-iconn-text-color: rgba(255, 255, 255, 0.5);--media-status-info-item-text-color: rgba(255, 255, 255, 0.88);--viewer-sidebar-auto-play-border-bottom-color: rgba(255, 255, 255, 0.1);--viewer-sidebar-auto-play-next-label-text-color: #fff;--viewer-sidebar-auto-play-option-text-color: #aaa;--user-action-form-inner-bg-color: #242424;--user-action-form-inner-title-border-bottom-color: var(--sidebar-nav-border-color);--user-action-form-inner-input-border-color: #303030;--user-action-form-inner-input-text-color: rgba(255, 255, 255, 0.88);--user-action-form-inner-input-bg-color: #121212}body{--default-logo-height: 18px;--default-theme-color: #009933;--default-brand-color: #009933;--success-color: #00a28b;--warning-color: #e09f1f;--danger-color: #de623b;--input-disabled-bg-color: hsla(0, 0%, 0%, 0.05);--dotted-outline: 1px dotted var(--dotted-outline-color);--header-height: 56px;--sidebar-width: 240px;--item-title-font-size: 14px;--item-title-max-lines: 2;--item-title-line-height: 18px;--horizontal-item-title-line-height: 21px;--playlist-item-title-line-height: 20px;--large-item-title-font-size: 16px;--large-item-title-line-height: 22px;--links-color: var(--default-theme-color)}body{--default-item-width: 218px;--default-max-item-width: 344px;--default-max-row-items: 6;--default-item-margin-right-width: 4px;--default-item-margin-bottom-width: 24px;--default-horizontal-item-margin-right-width: 12px;--default-horizontal-item-margin-bottom-width: 12px}.items-list-outer{position:relative;display:block}.items-list-outer.list-inline.list-slider{margin:0 8px}.items-list-outer.list-inline.list-slider .previous-slide,.items-list-outer.list-inline.list-slider .next-slide{position:absolute;z-index:1;top:0;bottom:0;padding-top:28.125%}.items-list-outer.list-inline.list-slider .previous-slide .circle-icon-button,.items-list-outer.list-inline.list-slider .next-slide .circle-icon-button{margin-top:-20px}.items-list-outer.list-inline.list-slider .previous-slide{left:-12px}.items-list-outer.list-inline.list-slider .next-slide{right:-12px}@media(min-width: 420px){.items-list-outer.list-inline.list-slider{margin:0}.items-list-outer.list-inline.list-slider .previous-slide{left:-20px}.items-list-outer.list-inline.list-slider .next-slide{right:-20px}}@media(min-width: 600px){.items-list-outer.list-inline.list-slider .previous-slide,.items-list-outer.list-inline.list-slider .next-slide{padding-top:-webkit-calc(0.28125 * -webkit-calc(var(--item-width, var(--default-item-width))));padding-top:-moz-calc(0.28125 * -moz-calc(var(--item-width, var(--default-item-width))));padding-top:calc(0.28125 * calc(var(--item-width, var(--default-item-width))))}.items-list-outer.list-inline.list-slider .next-slide{right:-webkit-calc(-20px + var(--item-margin-right-width, var(--default-item-margin-right-width)));right:-moz-calc(-20px + var(--item-margin-right-width, var(--default-item-margin-right-width)));right:calc(-20px + var(--item-margin-right-width, var(--default-item-margin-right-width)))}}.items-list-header,.media-list-header{display:block;padding:12px 0}.items-list-header h2,.items-list-header h3,.media-list-header h2,.media-list-header h3{display:inline-block;margin:12px 0;font-weight:500}.items-list-header h2,.media-list-header h2{font-size:16px;line-height:1.25}.items-list-header h3,.media-list-header h3{font-size:14px}.items-list-header h3 a,.media-list-header h3 a{margin:10px 16px;text-decoration:none;color:var(--media-list-header-title-link-text-color)}.items-list-wrap{position:relative;display:block;min-height:218px}.list-inline .items-list-wrap{overflow:auto;white-space:nowrap;will-change:width,scroll-position,scroll-behavior}.list-inline .items-list-wrap .item{display:inline-block}.list-slider .items-list-wrap{overflow:hidden;-webkit-overflow-scrolling:touch;scroll-behavior:smooth}.list-slider .items-list-wrap.resizing{scroll-behavior:unset}.items-list{max-width:100%;word-break:break-word}.items-list img,.items-list picture{display:block;width:100%;border:0}button.load-more{font-size:13px;font-weight:500;letter-spacing:.007px;margin:0 auto 24px 0;padding:0;border:0;background:none;color:var(--item-list-load-more-text-color)}button.load-more:hover,button.load-more:focus{color:var(--item-list-load-more-hover-text-color);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}body{--body-text-color: #111;--body-bg-color: #fafafa;--hr-color: #e1e1e1;--dotted-outline-color: rgba(0, 0, 0, 0.4);--input-color: hsl(0, 0%, 7%);--input-bg-color: hsl(0, 0%, 100%);--input-border-color: hsl(0, 0%, 80%);--header-bg-color: #fff;--header-circle-button-color: #606060;--header-popup-menu-color: rgb(13, 13, 13);--header-popup-menu-icon-color: rgb(144, 144, 144);--sidebar-bg-color: #f5f5f5;--sidebar-nav-border-color: #eee;--sidebar-nav-item-text-color: rgb(13, 13, 13);--sidebar-nav-item-icon-color: rgb(144, 144, 144);--sidebar-bottom-link-color: initial;--spinner-loader-color: rgba(17, 17, 17, 0.8);--nav-menu-active-item-bg-color: rgba(0, 0, 0, 0.1);--nav-menu-item-hover-bg-color: rgba(0, 0, 0, 0.04);--in-popup-nav-menu-item-hover-bg-color: #eee;--search-field-input-text-color: #111;--search-field-input-bg-color: #fff;--search-field-input-border-color: #ccc;--search-field-submit-text-color: #333;--search-field-submit-bg-color: #f8f8f8;--search-field-submit-border-color: #d3d3d3;--search-field-submit-hover-bg-color: #f0f0f0;--search-field-submit-hover-border-color: #c6c6c6;--search-results-item-content-link-title-text-color: rgb(17, 17, 17);--logged-in-user-thumb-bg-color: rgba(0, 0, 0, 0.07);--popup-bg-color: #fff;--popup-hr-bg-color: #eee;--popup-top-text-color: rgb(13, 13, 13);--popup-top-bg-color: #eee;--popup-msg-title-text-color: rgb(17, 17, 17);--popup-msg-main-text-color: rgba(17, 17, 17, 0.8);--comments-textarea-wrapper-border-color: #eeeeee;--comments-textarea-wrapper-after-bg-color: #0a0a0a;--comments-textarea-text-color: #0a0a0a;--comments-textarea-text-placeholder-color: rgba(17, 17, 17, 0.6);--comments-list-inner-border-color: #eee;--comment-author-text-color: #111;--comment-date-text-color: #606060;--comment-date-hover-text-color: #0a0a0a;--comment-text-color: #111;--comment-text-mentions-background-color-highlight:#00cc44;--comment-actions-material-icon-text-color: rgba(17, 17, 17, 0.8);--comment-actions-likes-num-text-color: rgba(17, 17, 17, 0.6);--comment-actions-reply-button-text-color: rgba(17, 17, 17, 0.6);--comment-actions-reply-button-hover-text-color: #111;--comment-actions-cancel-removal-button-text-color: rgba(17, 17, 17, 0.6);--comment-actions-cancel-removal-button-hover-text-color: #111;--item-bg-color: #fafafa;--item-title-text-color: #111;--item-thumb-bg-color: var(--sidebar-bg-color);--item-meta-text-color: rgba(17, 17, 17, 0.6);--item-meta-link-text-color: var(--item-text-color);--item-meta-link-hover-text-color: rgba(17, 17, 17, 0.8);--profile-page-item-content-title-bg-color: #fff;--playlist-item-main-view-full-link-text-color: rgb(96, 96, 96);--playlist-item-main-view-full-link-hover-text-color: rgb(13, 13, 13);--item-list-load-more-text-color: rgba(17, 17, 17, 0.6);--item-list-load-more-hover-text-color: rgba(17, 17, 17, 0.8);--media-list-row-border-color: #eee;--media-list-header-title-link-text-color: rgba(17, 17, 17, 0.6);--playlist-form-title-focused-bg-color: #111;--playlist-privacy-border-color: #888;--playlist-form-cancel-button-text-color: rgba(17, 17, 17, 0.6);--playlist-form-cancel-button-hover-text-color: #111;--playlist-form-field-text-color: #000;--playlist-form-field-border-color: #888;--playlist-save-popup-text-color: #111;--playlist-save-popup-border-color: #eee;--playlist-save-popup-create-icon-text-color: #909090;--playlist-save-popup-create-focus-bg-color: rgba(136, 136, 136, 0.14);--playlist-view-header-bg-color: #fafafa;--playlist-view-header-toggle-text-color: rgb(96, 96, 96);--playlist-view-header-toggle-bg-color: #fafafa;--playlist-view-title-link-text-color: rgb(13, 13, 13);--playlist-view-meta-text-color: rgba(17, 17, 17, 0.6);--playlist-view-meta-link-color: rgba(17, 17, 17, 0.6);--playlist-view-meta-link-hover-text-color: rgb(13, 13, 13);--playlist-view-status-text-color: rgba(17, 17, 17, 0.6);--playlist-view-status-bg-color: rgba(0, 0, 0, 0.05);--playlist-view-status-icon-text-color: rgba(17, 17, 17, 0.4);--playlist-view-actions-bg-color: #fafafa;--playlist-view-media-bg-color: var(--sidebar-bg-color);--playlist-view-media-order-number-color: rgb(136, 136, 136);--playlist-view-item-title-text-color: rgb(13, 13, 13);--playlist-view-item-author-text-color: rgb(13, 13, 13);--playlist-view-item-author-bg-color: var(--sidebar-bg-color);--profile-page-bg-color: #fff;--profile-page-header-bg-color: var(--body-bg-color);--profile-page-info-videos-number-text-color: rgba(17, 17, 17, 0.6);--profile-page-nav-link-text-color: rgba(17, 17, 17, 0.6);--profile-page-nav-link-hover-text-color: #111;--profile-page-nav-link-active-text-color: #111;--profile-page-nav-link-active-after-bg-color: rgba(17, 17, 17, 0.6);--add-media-page-tmplt-dialog-bg-color: #fff;--add-media-page-tmplt-uploader-bg-color: #fff;--add-media-page-tmplt-dropzone-bg-color: rgba(255, 255, 255, 0.5);--add-media-page-tmplt-drag-drop-inner-text-color: rgba(17, 17, 17, 0.4);--add-media-page-tmplt-upload-item-spiner-text-color: rgba(17, 17, 17, 0.32);--add-media-page-tmplt-upload-item-actions-text-color: rgba(17, 17, 17, 0.4);--add-media-page-qq-gallery-upload-button-text-color: rgba(17, 17, 17, 0.6);--add-media-page-qq-gallery-upload-button-icon-text-color: rgba(17, 17, 17, 0.6);--add-media-page-qq-gallery-upload-button-hover-text-color: rgba(17, 17, 17, 1);--add-media-page-qq-gallery-upload-button-hover-icon-text-color: rgba(17, 17, 17, 1);--add-media-page-qq-gallery-upload-button-focus-text-color: rgba(17, 17, 17, 0.4);--playlist-page-bg-color: rgb(250, 250, 250);--playlist-page-details-text-color: rgb(96, 96, 96);--playlist-page-thumb-bg-color: rgba(0, 0, 0, 0.07);--playlist-page-title-link-text-color: rgb(13, 13, 13);--playlist-page-actions-circle-icon-text-color: rgb(144, 144, 144);--playlist-page-actions-circle-icon-bg-color: rgb(250, 250, 250);--playlist-page-actions-nav-item-button-text-color: rgb(10, 10, 10);--playlist-page-actions-popup-message-bottom-cancel-button-text-color: rgba(17, 17, 17, 0.6);--playlist-page-actions-popup-message-bottom-cancel-button-hover-text-color: #111;--playlist-page-actions-popup-message-bottom-cancel-button-icon-hover-text-color: #111;--playlist-page-status-text-color: rgba(17, 17, 17, 0.6);--playlist-page-status-bg-color: rgba(0, 0, 0, 0.1);--playlist-page-status-icon-text-color: rgba(17, 17, 17, 0.4);--playlist-page-author-border-top-color: rgba(0, 0, 0, 0.1);--playlist-page-author-name-link-color: rgb(13, 13, 13);--playlist-page-author-edit-playlist-icon-button-text-color: rgb(96, 96, 96);--playlist-page-author-edit-playlist-icon-button-bg-color: #fafafa;--playlist-page-author-edit-playlist-icon-button-active-text-color: rgb(13, 13, 13);--playlist-page-author-edit-playlist-form-wrap-text-color: rgb(13, 13, 13);--playlist-page-author-edit-playlist-form-wrap-bg-color: #fff;--playlist-page-author-edit-playlist-form-wrap-border-color: #eee;--playlist-page-author-edit-playlist-form-wrap-title-circle-icon-hover-text-color: #111;--playlist-page-author-edit-playlist-author-thumb-text-color: #606060;--playlist-page-author-edit-playlist-author-thumb-bg-color: rgba(0, 0, 0, 0.07);--playlist-page-details-bg-color: #fafafa;--playlist-page-video-list-bg-color: #f5f5f5;--playlist-page-video-list-item-title-bg-color: #f5f5f5;--playlist-page-video-list-item-hover-bg-color: #ebebeb;--playlist-page-video-list-item-title-hover-bg-color: #ebebeb;--playlist-page-video-list-item-after-bg-color: rgba(0, 0, 0, 0.1);--playlist-page-video-list-item-order-text-color: rgb(96, 96, 96);--playlist-page-video-list-item-options-icon-hover-color: #111;--playlist-page-video-list-item-options-popup-cancel-removal-button-text-color: rgba(17, 17, 17, 0.6);--playlist-page-video-list-item-options-popup-cancel-removal-button-hover-text-color: #111;--playlist-page-video-list-item-options-popup-cancel-removal-button-hover-icon-text-color: #111;--media-author-actions-popup-bottom-cancel-removal-button-text-color: rgba(17, 17, 17, 0.6);--media-author-actions-popup-bottom-cancel-removal-button-hover-text-color: #111;--media-author-actions-popup-bottom-cancel-removal-button-hover-icon-text-color: #111;--profile-banner-wrap-popup-bottom-cancel-removal-button-text-color: rgba(17, 17, 17, 0.6);--profile-banner-wrap-popup-bottom-cancel-removal-button-hover-text-color: #111;--profile-banner-wrap-popup-bottom-cancel-removal-button-hover-icon-text-color: #111;--media-title-banner-border-color: #eee;--media-title-labels-area-text-color: rgba(17, 17, 17, 0.6);--media-title-labels-area-bg-color: rgba(238, 238, 238, 0.6);--media-title-views-text-color: rgba(17, 17, 17, 0.6);--media-actions-not-popup-circle-icon-focus-bg-color: rgba(0, 0, 0, 0.04);--media-actions-not-popup-circle-icon-active-bg-color: rgba(0, 0, 0, 0.07);--media-actions-like-before-border-color: rgba(17, 17, 17, 0.4);--media-actions-share-title-text-color: #111;--media-actions-share-options-nav-button-text-color: rgba(17, 17, 17, 0.4);--media-actions-share-options-link-text-color: rgb(17, 17, 17);--media-actions-share-copy-field-border-color: rgb(237, 237, 237);--media-actions-share-copy-field-bg-color: rgb(250, 250, 250);--media-actions-share-copy-field-input-text-color: rgb(17, 17, 17);--media-actions-more-options-popup-bg-color: #fff;--media-actions-more-options-popup-nav-link-text-color: rgb(10, 10, 10);--media-actions-share-fullscreen-popup-main-bg-color: #fff;--report-form-title-text-color: #111;--report-form-field-label-text-color: rgba(17, 17, 17, 0.6);--report-form-field-input-text-color: #111;--report-form-field-input-border-color: rgb(237, 237, 237);--report-form-field-input-bg-color: rgb(250, 250, 250);--report-form-help-text-color: rgba(17, 17, 17, 0.6);--form-actions-bottom-border-top-color: rgb(238, 238, 238);--media-author-banner-name-text-color: #0a0a0a;--media-author-banner-date-text-color: rgba(17, 17, 17, 0.6);--media-content-banner-border-color: #eee;--share-embed-inner-on-right-border-color: rgb(238, 238, 238);--share-embed-inner-on-right-ttl-text-color: #111;--share-embed-inner-on-right-icon-text-color: rgba(17, 17, 17, 0.4);--share-embed-inner-textarea-text-color: rgba(17, 17, 17, 0.8);--share-embed-inner-textarea-border-color: rgb(237, 237, 237);--share-embed-inner-textarea-bg-color: rgb(250, 250, 250);--share-embed-inner-embed-wrap-iconn-text-color: rgba(17, 17, 17, 0.4);--media-status-info-item-text-color: #111;--viewer-sidebar-auto-play-border-bottom-color: rgba(0, 0, 0, 0.1);--viewer-sidebar-auto-play-next-label-text-color: #0a0a0a;--viewer-sidebar-auto-play-option-text-color: #606060;--user-action-form-inner-bg-color: #fff;--user-action-form-inner-title-border-bottom-color: var(--sidebar-nav-border-color);--user-action-form-inner-input-border-color: #d3d3d3;--user-action-form-inner-input-text-color: #000;--user-action-form-inner-input-bg-color: #fff}body.dark_theme{--body-text-color: rgba(255, 255, 255, 0.88);--body-bg-color: #121212;--hr-color: #2a2a2a;--dotted-outline-color: rgba(255, 255, 255, 0.4);--input-color: hsla(0, 0%, 100%, 0.88);--input-bg-color: hsla(0, 0%, 0%, 0.55);--input-border-color: hsl(0, 0%, 19%);--header-bg-color: #272727;--header-circle-button-color: #fff;--header-popup-menu-color: #fff;--header-popup-menu-icon-color: rgb(144, 144, 144);--sidebar-bg-color: #1c1c1c;--sidebar-nav-border-color: rgba(255, 255, 255, 0.1);--sidebar-nav-item-text-color: #fff;--sidebar-nav-item-icon-color: rgb(144, 144, 144);--sidebar-bottom-link-color: rgba(255, 255, 255, 0.88);--spinner-loader-color: rgba(255, 255, 255, 0.74);--nav-menu-active-item-bg-color: rgba(255, 255, 255, 0.1);--nav-menu-item-hover-bg-color: rgba(255, 255, 255, 0.1);--in-popup-nav-menu-item-hover-bg-color: rgba(255, 255, 255, 0.1);--search-field-input-text-color: rgba(255, 255, 255, 0.88);--search-field-input-bg-color: #121212;--search-field-input-border-color: #303030;--search-field-submit-text-color: rgba(255, 255, 255, 0.5);--search-field-submit-bg-color: rgba(255, 255, 255, 0.08);--search-field-submit-border-color: #2e2e2e;--search-field-submit-hover-bg-color: rgba(255, 255, 255, 0.08);--search-field-submit-hover-border-color: #2e2e2e;--search-results-item-content-link-title-text-color: rgba(255, 255, 255, 0.88);--logged-in-user-thumb-bg-color: rgba(255, 255, 255, 0.14);--popup-bg-color: #242424;--popup-hr-bg-color: rgba(255, 255, 255, 0.08);--popup-top-text-color: #fff;--popup-top-bg-color: rgba(136, 136, 136, 0.4);--popup-msg-title-text-color: rgba(255, 255, 255, 0.88);--popup-msg-main-text-color: rgba(255, 255, 255, 0.5);--comments-textarea-wrapper-border-color: #898989;--comments-textarea-wrapper-after-bg-color: #fff;--comments-textarea-text-color: #fff;--comments-textarea-text-placeholder-color: #898989;--comments-list-inner-border-color: rgba(255, 255, 255, 0.08);--comment-author-text-color: rgba(255, 255, 255, 0.88);--comment-date-text-color: #888;--comment-date-hover-text-color: #fff;--comment-text-color: rgba(255, 255, 255, 0.88);--comment-text-mentions-background-color-highlight:#006622;--comment-actions-material-icon-text-color: rgba(255, 255, 255, 0.74);--comment-actions-likes-num-text-color: rgba(255, 255, 255, 0.5);--comment-actions-reply-button-text-color: rgba(255, 255, 255, 0.5);--comment-actions-reply-button-hover-text-color: rgba(255, 255, 255, 0.74);--comment-actions-cancel-removal-button-text-color: rgba(255, 255, 255, 0.5);--comment-actions-cancel-removal-button-hover-text-color: rgba(255, 255, 255, 0.74);--item-bg-color: #121212;--item-title-text-color: rgba(255, 255, 255, 0.88);--item-thumb-bg-color: var(--sidebar-bg-color);--item-meta-text-color: #888;--item-meta-link-text-color: var(--item-text-color);--item-meta-link-hover-text-color: rgba(255, 255, 255, 0.74);--profile-page-item-content-title-bg-color: #121212;--playlist-item-main-view-full-link-text-color: rgb(170, 170, 170);--playlist-item-main-view-full-link-hover-text-color: #fff;--item-list-load-more-text-color: #888;--item-list-load-more-hover-text-color: rgba(255, 255, 255, 0.74);--media-list-row-border-color: rgba(255, 255, 255, 0.08);--media-list-header-title-link-text-color: rgba(255, 255, 255, 0.5);--playlist-form-title-focused-bg-color: rgba(255, 255, 255, 0.88);--playlist-privacy-border-color: #888;--playlist-form-cancel-button-text-color: rgba(255, 255, 255, 0.5);--playlist-form-cancel-button-hover-text-color: rgba(255, 255, 255, 0.74);--playlist-form-field-text-color: #fff;--playlist-form-field-border-color: #888;--playlist-save-popup-text-color: rgba(255, 255, 255, 0.88);--playlist-save-popup-border-color: rgba(255, 255, 255, 0.1);--playlist-save-popup-create-icon-text-color: #909090;--playlist-save-popup-create-focus-bg-color: rgba(255, 255, 255, 0.14);--playlist-view-header-bg-color: #252525;--playlist-view-header-toggle-text-color: #fff;--playlist-view-header-toggle-bg-color: #252525;--playlist-view-title-link-text-color: rgba(255, 255, 255, 0.88);--playlist-view-meta-text-color: rgb(238, 238, 238);--playlist-view-meta-link-color: #fff;--playlist-view-meta-link-hover-text-color: #fff;--playlist-view-status-text-color: rgba(255, 255, 255, 0.6);--playlist-view-status-bg-color: rgba(255, 255, 255, 0.1);--playlist-view-status-icon-text-color: rgba(255, 255, 255, 0.6);--playlist-view-actions-bg-color: #252525;--playlist-view-media-bg-color: var(--sidebar-bg-color);--playlist-view-media-order-number-color: rgb(136, 136, 136);--playlist-view-item-title-text-color: #fff;--playlist-view-item-author-text-color: #fff;--playlist-view-item-author-bg-color: var(--sidebar-bg-color);--profile-page-bg-color: var(--body-bg-color);--profile-page-header-bg-color: #1a1a1a;--profile-page-info-videos-number-text-color: #888;--profile-page-nav-link-text-color: #888;--profile-page-nav-link-hover-text-color: rgba(255, 255, 255, 0.88);--profile-page-nav-link-active-text-color: rgba(255, 255, 255, 0.88);--profile-page-nav-link-active-after-bg-color: #888;--add-media-page-tmplt-dialog-bg-color: #242424;--add-media-page-tmplt-uploader-bg-color: #242424;--add-media-page-tmplt-dropzone-bg-color: rgba(28, 28, 28, 0.5);--add-media-page-tmplt-drag-drop-inner-text-color: rgba(255, 255, 255, 0.5);--add-media-page-tmplt-upload-item-spiner-text-color: rgba(255, 255, 255, 0.4);--add-media-page-tmplt-upload-item-actions-text-color: rgba(255, 255, 255, 0.5);--add-media-page-qq-gallery-upload-button-text-color: rgba(255, 255, 255, 0.528);--add-media-page-qq-gallery-upload-button-icon-text-color: rgba(255, 255, 255, 0.528);--add-media-page-qq-gallery-upload-button-hover-text-color: rgba(255, 255, 255, 0.88);--add-media-page-qq-gallery-upload-button-hover-icon-text-color: rgba(255, 255, 255, 0.88);--add-media-page-qq-gallery-upload-button-focus-text-color: rgba(255, 255, 255, 0.704);--playlist-page-bg-color: #1a1a1a;--playlist-page-details-text-color: rgb(170, 170, 170);--playlist-page-thumb-bg-color: #272727;--playlist-page-title-link-text-color: #fff;--playlist-page-actions-circle-icon-text-color: #1a1a1a;--playlist-page-actions-circle-icon-bg-color: inherit;--playlist-page-actions-nav-item-button-text-color: rgba(255, 255, 255, 0.88);--playlist-page-actions-popup-message-bottom-cancel-button-text-color: rgba(255, 255, 255, 0.5);--playlist-page-actions-popup-message-bottom-cancel-button-hover-text-color: rgba(255, 255, 255, 0.74);--playlist-page-actions-popup-message-bottom-cancel-button-icon-hover-text-color: rgba(255, 255, 255, 0.74);--playlist-page-status-text-color: rgba(255, 255, 255, 0.6);--playlist-page-status-bg-color: rgba(255, 255, 255, 0.1);--playlist-page-status-icon-text-color: rgba(255, 255, 255, 0.4);--playlist-page-author-border-top-color: rgba(255, 255, 255, 0.1);--playlist-page-author-name-link-color: rgba(255, 255, 255, 0.88);--playlist-page-author-edit-playlist-icon-button-text-color: rgb(170, 170, 170);--playlist-page-author-edit-playlist-icon-button-bg-color: #252525;--playlist-page-author-edit-playlist-icon-button-active-text-color: rgba(255, 255, 255, 0.88);--playlist-page-author-edit-playlist-form-wrap-text-color: rgba(255, 255, 255, 0.88);--playlist-page-author-edit-playlist-form-wrap-bg-color: #242424;--playlist-page-author-edit-playlist-form-wrap-border-color: rgba(255, 255, 255, 0.1);--playlist-page-author-edit-playlist-form-wrap-title-circle-icon-hover-text-color: rgba(255, 255, 255, 0.88);--playlist-page-author-edit-playlist-author-thumb-text-color: #fff;--playlist-page-author-edit-playlist-author-thumb-bg-color: #272727;--playlist-page-details-bg-color: #252525;--playlist-page-video-list-bg-color: #1c1c1c;--playlist-page-video-list-item-title-bg-color: #1c1c1c;--playlist-page-video-list-item-hover-bg-color: #333;--playlist-page-video-list-item-title-hover-bg-color: #333;--playlist-page-video-list-item-after-bg-color: rgba(255, 255, 255, 0.1);--playlist-page-video-list-item-order-text-color: rgb(170, 170, 170);--playlist-page-video-list-item-options-icon-hover-color: rgba(255, 255, 255, 0.88);--playlist-page-video-list-item-options-popup-cancel-removal-button-text-color: rgba(255, 255, 255, 0.5);--playlist-page-video-list-item-options-popup-cancel-removal-button-hover-text-color: rgba(255, 255, 255, 0.74);--playlist-page-video-list-item-options-popup-cancel-removal-button-hover-icon-text-color: rgba(255, 255, 255, 0.74);--media-author-actions-popup-bottom-cancel-removal-button-text-color: rgba(255, 255, 255, 0.5);--media-author-actions-popup-bottom-cancel-removal-button-hover-text-color: rgba(255, 255, 255, 0.74);--media-author-actions-popup-bottom-cancel-removal-button-hover-icon-text-color: rgba(255, 255, 255, 0.74);--profile-banner-wrap-popup-bottom-cancel-removal-button-text-color: rgba(255, 255, 255, 0.5);--profile-banner-wrap-popup-bottom-cancel-removal-button-hover-text-color: rgba(255, 255, 255, 0.74);--profile-banner-wrap-popup-bottom-cancel-removal-button-hover-icon-text-color: rgba(255, 255, 255, 0.74);--media-title-banner-border-color: rgba(255, 255, 255, 0.08);--media-title-labels-area-text-color: rgba(255, 255, 255, 0.6);--media-title-labels-area-bg-color: rgba(255, 255, 255, 0.08);--media-title-views-text-color: rgb(136, 136, 136);--media-actions-not-popup-circle-icon-focus-bg-color: rgba(255, 255, 255, 0.07);--media-actions-not-popup-circle-icon-active-bg-color: rgba(255, 255, 255, 0.14);--media-actions-like-before-border-color: rgba(255, 255, 255, 0.5);--media-actions-share-title-text-color: rgba(255, 255, 255, 0.88);--media-actions-share-options-nav-button-text-color: rgba(255, 255, 255, 0.5);--media-actions-share-options-link-text-color: rgba(255, 255, 255, 0.88);--media-actions-share-copy-field-border-color: rgb(41, 41, 41);--media-actions-share-copy-field-bg-color: rgb(28, 28, 28);--media-actions-share-copy-field-input-text-color: rgba(255, 255, 255, 0.88);--media-actions-more-options-popup-bg-color: #242424;--media-actions-more-options-popup-nav-link-text-color: rgba(255, 255, 255, 0.88);--media-actions-share-fullscreen-popup-main-bg-color: #242424;--report-form-title-text-color: rgba(255, 255, 255, 0.88);--report-form-field-label-text-color: rgba(255, 255, 255, 0.88);--report-form-field-input-text-color: rgba(255, 255, 255, 0.88);--report-form-field-input-border-color: rgb(41, 41, 41);--report-form-field-input-bg-color: rgb(28, 28, 28);--report-form-help-text-color: rgb(136, 136, 136);--form-actions-bottom-border-top-color: rgba(255, 255, 255, 0.08);--media-author-banner-name-text-color: rgba(255, 255, 255, 0.88);--media-author-banner-date-text-color: rgba(255, 255, 255, 0.6);--media-content-banner-border-color: rgba(255, 255, 255, 0.08);--share-embed-inner-on-right-border-color: rgba(255, 255, 255, 0.08);--share-embed-inner-on-right-ttl-text-color: rgba(255, 255, 255, 0.88);--share-embed-inner-on-right-icon-text-color: rgba(255, 255, 255, 0.5);--share-embed-inner-textarea-text-color: rgba(255, 255, 255, 0.55);--share-embed-inner-textarea-border-color: rgb(41, 41, 41);--share-embed-inner-textarea-bg-color: rgb(28, 28, 28);--share-embed-inner-embed-wrap-iconn-text-color: rgba(255, 255, 255, 0.5);--media-status-info-item-text-color: rgba(255, 255, 255, 0.88);--viewer-sidebar-auto-play-border-bottom-color: rgba(255, 255, 255, 0.1);--viewer-sidebar-auto-play-next-label-text-color: #fff;--viewer-sidebar-auto-play-option-text-color: #aaa;--user-action-form-inner-bg-color: #242424;--user-action-form-inner-title-border-bottom-color: var(--sidebar-nav-border-color);--user-action-form-inner-input-border-color: #303030;--user-action-form-inner-input-text-color: rgba(255, 255, 255, 0.88);--user-action-form-inner-input-bg-color: #121212}body{--default-logo-height: 18px;--default-theme-color: #009933;--default-brand-color: #009933;--success-color: #00a28b;--warning-color: #e09f1f;--danger-color: #de623b;--input-disabled-bg-color: hsla(0, 0%, 0%, 0.05);--dotted-outline: 1px dotted var(--dotted-outline-color);--header-height: 56px;--sidebar-width: 240px;--item-title-font-size: 14px;--item-title-max-lines: 2;--item-title-line-height: 18px;--horizontal-item-title-line-height: 21px;--playlist-item-title-line-height: 20px;--large-item-title-font-size: 16px;--large-item-title-line-height: 22px;--links-color: var(--default-theme-color)}body{--default-item-width: 218px;--default-max-item-width: 344px;--default-max-row-items: 6;--default-item-margin-right-width: 4px;--default-item-margin-bottom-width: 24px;--default-horizontal-item-margin-right-width: 12px;--default-horizontal-item-margin-bottom-width: 12px}.item{vertical-align:top;display:block;width:100%;max-width:var(--max-item-width, var(--default-max-item-width));margin-bottom:var(--item-margin-bottom-width, var(--default-item-margin-bottom-width))}.item-thumb,a.item-thumb{position:relative;display:block;height:auto;padding-bottom:56.11%;overflow:hidden;text-decoration:none;background-position:center;-moz-background-size:cover;background-size:cover;background-color:var(--item-thumb-bg-color)}.item-thumb.no-thumb:before{position:absolute;top:50%;left:50%;margin:0;margin-top:-1rem;margin-left:-1rem;font-size:2rem;line-height:1;padding:0;font-family:"Material Icons";text-decoration:none;color:#888}.item.video-item .item-thumb.no-thumb:before{content:"";content:"";content:""}.item.image-item .item-thumb.no-thumb:before{content:"";content:""}.item.audio-item .item-thumb.no-thumb:before{content:""}.item.pdf-item .item-thumb.no-thumb:before,.item.attachment-item .item-thumb.no-thumb:before{content:"";content:""}.item.playlist-item .item-thumb.no-thumb:before{content:""}.item.category-item .item-thumb.no-thumb:before{content:"";content:"list_alt"}.item.tag-item .item-thumb.no-thumb:before{content:""}.item.other-item .item-thumb.no-thumb:before{content:"";content:""}.item.member-item .item-thumb.no-thumb:before{content:"person"}.item-img{position:absolute;top:0;left:0;right:0;bottom:0;display:block}.item-img img{width:100%;max-height:100%;pointer-events:none;visibility:hidden}.item-img-preview{position:absolute;top:0;right:0;left:0;bottom:0;display:block;pointer-events:none;visibility:hidden;opacity:0;-webkit-transition:all 750ms;-o-transition:all 750ms;-moz-transition:all 750ms;transition:all 750ms}.item-duration,.item-type-icon{position:absolute;bottom:0;right:0;pointer-events:none}.item-duration>*,.item-type-icon>*{display:inline-block;margin:4px;padding:2px 4px;color:#fff;background-color:#111;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;opacity:.8}.item-duration{font-size:12px;font-weight:500;line-height:13.5px;letter-spacing:.5px}.item-type-icon>*{float:left}.item-type-icon>*:before{font-family:"Material Icons";font-weight:normal;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;float:left;padding:0;margin:0;text-align:center}.item.video-item .item-type-icon>*:before{content:"";content:"";content:""}.item.audio-item .item-type-icon>*:before{content:""}.item.image-item .item-type-icon>*:before{content:"";content:""}.item.pdf-item .item-type-icon>*:before,.item.attachment-item .item-type-icon>*:before{content:""}.item.category-item .item-type-icon>*:before{content:"";content:"list_alt"}.item.tag-item .item-type-icon>*:before{content:""}.item.other-item .item-type-icon>*:before{content:""}.item-meta{clear:left;float:left;font-family:Arial,sans-serif;line-height:18px;font-size:13px;width:100%;color:var(--item-meta-text-color)}.item-meta>*{vertical-align:top}.item-meta a,.item-meta a{color:var(--item-meta-link-text-color)}.item-meta a:hover,.item-meta a:focus,.item-meta a:hover,.item-meta a:focus{color:var(--item-meta-link-hover-text-color)}.item-author{display:block}.item-author a{width:auto;display:inline-block}.item-views+.item-date:before{content:"•";content:"•";margin:0 4px}.item-description{color:#888;font-size:13px;line-height:1em;width:100%;float:left;margin:10px 0 8px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;max-height:36px}.item-description div{line-height:18px;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;background-color:transparent;display:block;max-height:36px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal}.item.on-hover-preview:hover .item-img-preview{visibility:visible;opacity:1}.item-content{position:relative;display:block;overflow:hidden}.item-content h3{display:inline-block;clear:right;width:auto;position:relative;max-height:-webkit-calc(var(--item-title-max-lines) * var(--item-title-line-height));max-height:-moz-calc(var(--item-title-max-lines) * var(--item-title-line-height));max-height:calc(var(--item-title-max-lines) * var(--item-title-line-height))}.item-content h3 a{width:auto;max-width:100%;color:inherit}.item-content h3 span{line-height:var(--item-title-line-height);overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;background-color:var(--item-bg-color);display:block;max-height:-webkit-calc(var(--item-title-max-lines) * var(--item-title-line-height));max-height:-moz-calc(var(--item-title-max-lines) * var(--item-title-line-height));max-height:calc(var(--item-title-max-lines) * var(--item-title-line-height));display:-webkit-box;-webkit-line-clamp:var(--item-title-max-lines);-webkit-box-orient:vertical;white-space:normal}.item-content-link h3{text-decoration:none;color:var(--item-title-text-color)}.item-main{display:inline-block;width:100%;line-height:var(--item-title-line-height)}.item-main h3{font-weight:500;font-size:var(--item-title-font-size);line-height:var(--item-title-line-height);margin-top:12px;margin-bottom:8px}.item-main a{text-decoration:none}a.item-edit-link{display:block;line-height:1;padding:8px 0;font-size:.928571429em;text-align:center;text-decoration:none;-webkit-border-radius:1px 1px 0 0;-moz-border-radius:1px 1px 0 0;border-radius:1px 1px 0 0;color:#fff;background-color:var(--brand-color, var(--default-brand-color))}.playlist-item .playlist-count{position:absolute;top:0;right:0;bottom:0;width:92px;display:block;line-height:1.25;color:rgba(255,255,255,.8);background-color:rgba(17,17,17,.8)}.playlist-item .playlist-count span{display:inline-block;width:100%}.playlist-item .playlist-count .material-icons{font-size:29px;margin:1px 0 0 4px;padding:0;line-height:1}.playlist-item .playlist-hover-play-all{position:absolute;top:0;right:0;bottom:0;left:0;font-size:13px;font-weight:500;color:rgba(255,255,255,.8);background-color:rgba(17,17,17,.8);letter-spacing:.007px;line-height:1;opacity:0;-webkit-transition:opacity .3s ease;-o-transition:opacity .3s ease;-moz-transition:opacity .3s ease;transition:opacity .3s ease}.playlist-item .playlist-hover-play-all span{display:inline-block;margin-right:2px}.playlist-item .playlist-hover-play-all .material-icons{margin-bottom:4px}.playlist-item .playlist-count>*,.playlist-item .playlist-hover-play-all>*{display:table;width:100%;height:100%;text-align:center}.playlist-item .playlist-count>*>*,.playlist-item .playlist-hover-play-all>*>*{display:table-cell;vertical-align:middle}.playlist-item:hover .playlist-hover-play-all{opacity:1}.playlist-item .item-main a.view-full-playlist{position:relative;float:left;clear:both;display:inline-block;margin-top:4px;font-size:12.5px;font-weight:500}.playlist-item .item-main a.view-full-playlist{color:var(--playlist-item-main-view-full-link-text-color)}.playlist-item .item-main a.view-full-playlist:hover{color:var(--playlist-item-main-view-full-link-hover-text-color)}.hover-overlay-title .item .item-main,.hover-overlay-title .item .item-content-link{position:absolute;top:0;left:0;right:0;bottom:0}.hover-overlay-title .item .item-main{display:block}.hover-overlay-title .item .item-content-link{display:table;width:100%;height:100%;-webkit-transition-property:color,background-color;-o-transition-property:color,background-color;-moz-transition-property:color,background-color;transition-property:color,background-color;-webkit-transition-duration:.2s;-moz-transition-duration:.2s;-o-transition-duration:.2s;transition-duration:.2s}.hover-overlay-title .item .item-content-link h3{z-index:1;color:#fff;font-weight:400}.hover-overlay-title .item .item-content-link:after,.hover-overlay-title .item .item-content-link:before{position:absolute;top:-1px;left:-1px;right:-1px;bottom:-1px;content:"";display:block;-webkit-transition-property:opacity;-o-transition-property:opacity;-moz-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:.2s;-moz-transition-duration:.2s;-o-transition-duration:.2s;transition-duration:.2s}.hover-overlay-title .item .item-content-link:before{opacity:1;background:-webkit-radial-gradient(circle, rgba(0, 0, 0, 0.75) 0%, rgba(74, 74, 74, 0.75) 100%);background:-moz-radial-gradient(circle, rgba(0, 0, 0, 0.75) 0%, rgba(74, 74, 74, 0.75) 100%);background:-o-radial-gradient(circle, rgba(0, 0, 0, 0.75) 0%, rgba(74, 74, 74, 0.75) 100%);background:radial-gradient(circle, rgba(0, 0, 0, 0.75) 0%, rgba(74, 74, 74, 0.75) 100%)}.hover-overlay-title .item .item-content-link:after{opacity:0;background:-webkit-radial-gradient(circle, rgba(255, 255, 255, 0.75) 0%, rgba(198, 198, 198, 0.75) 100%);background:-moz-radial-gradient(circle, rgba(255, 255, 255, 0.75) 0%, rgba(198, 198, 198, 0.75) 100%);background:-o-radial-gradient(circle, rgba(255, 255, 255, 0.75) 0%, rgba(198, 198, 198, 0.75) 100%);background:radial-gradient(circle, rgba(255, 255, 255, 0.75) 0%, rgba(198, 198, 198, 0.75) 100%)}.hover-overlay-title .item .item-content-link:hover h3{color:#000}.hover-overlay-title .item .item-content-link:hover:before{opacity:0}.hover-overlay-title .item .item-content-link:hover:after{opacity:1}.hover-overlay-title .item h3{display:table-cell;vertical-align:middle;text-align:center;max-height:100% !important;margin:0 !important;padding:8px;font-size:1.5em}.hover-overlay-title .item h3 span{max-height:100% !important;line-height:1.15;background:none}.hover-overlay-title .item .item-meta,.hover-overlay-title .item .item-description{display:none}body{--body-text-color: #111;--body-bg-color: #fafafa;--hr-color: #e1e1e1;--dotted-outline-color: rgba(0, 0, 0, 0.4);--input-color: hsl(0, 0%, 7%);--input-bg-color: hsl(0, 0%, 100%);--input-border-color: hsl(0, 0%, 80%);--header-bg-color: #fff;--header-circle-button-color: #606060;--header-popup-menu-color: rgb(13, 13, 13);--header-popup-menu-icon-color: rgb(144, 144, 144);--sidebar-bg-color: #f5f5f5;--sidebar-nav-border-color: #eee;--sidebar-nav-item-text-color: rgb(13, 13, 13);--sidebar-nav-item-icon-color: rgb(144, 144, 144);--sidebar-bottom-link-color: initial;--spinner-loader-color: rgba(17, 17, 17, 0.8);--nav-menu-active-item-bg-color: rgba(0, 0, 0, 0.1);--nav-menu-item-hover-bg-color: rgba(0, 0, 0, 0.04);--in-popup-nav-menu-item-hover-bg-color: #eee;--search-field-input-text-color: #111;--search-field-input-bg-color: #fff;--search-field-input-border-color: #ccc;--search-field-submit-text-color: #333;--search-field-submit-bg-color: #f8f8f8;--search-field-submit-border-color: #d3d3d3;--search-field-submit-hover-bg-color: #f0f0f0;--search-field-submit-hover-border-color: #c6c6c6;--search-results-item-content-link-title-text-color: rgb(17, 17, 17);--logged-in-user-thumb-bg-color: rgba(0, 0, 0, 0.07);--popup-bg-color: #fff;--popup-hr-bg-color: #eee;--popup-top-text-color: rgb(13, 13, 13);--popup-top-bg-color: #eee;--popup-msg-title-text-color: rgb(17, 17, 17);--popup-msg-main-text-color: rgba(17, 17, 17, 0.8);--comments-textarea-wrapper-border-color: #eeeeee;--comments-textarea-wrapper-after-bg-color: #0a0a0a;--comments-textarea-text-color: #0a0a0a;--comments-textarea-text-placeholder-color: rgba(17, 17, 17, 0.6);--comments-list-inner-border-color: #eee;--comment-author-text-color: #111;--comment-date-text-color: #606060;--comment-date-hover-text-color: #0a0a0a;--comment-text-color: #111;--comment-text-mentions-background-color-highlight:#00cc44;--comment-actions-material-icon-text-color: rgba(17, 17, 17, 0.8);--comment-actions-likes-num-text-color: rgba(17, 17, 17, 0.6);--comment-actions-reply-button-text-color: rgba(17, 17, 17, 0.6);--comment-actions-reply-button-hover-text-color: #111;--comment-actions-cancel-removal-button-text-color: rgba(17, 17, 17, 0.6);--comment-actions-cancel-removal-button-hover-text-color: #111;--item-bg-color: #fafafa;--item-title-text-color: #111;--item-thumb-bg-color: var(--sidebar-bg-color);--item-meta-text-color: rgba(17, 17, 17, 0.6);--item-meta-link-text-color: var(--item-text-color);--item-meta-link-hover-text-color: rgba(17, 17, 17, 0.8);--profile-page-item-content-title-bg-color: #fff;--playlist-item-main-view-full-link-text-color: rgb(96, 96, 96);--playlist-item-main-view-full-link-hover-text-color: rgb(13, 13, 13);--item-list-load-more-text-color: rgba(17, 17, 17, 0.6);--item-list-load-more-hover-text-color: rgba(17, 17, 17, 0.8);--media-list-row-border-color: #eee;--media-list-header-title-link-text-color: rgba(17, 17, 17, 0.6);--playlist-form-title-focused-bg-color: #111;--playlist-privacy-border-color: #888;--playlist-form-cancel-button-text-color: rgba(17, 17, 17, 0.6);--playlist-form-cancel-button-hover-text-color: #111;--playlist-form-field-text-color: #000;--playlist-form-field-border-color: #888;--playlist-save-popup-text-color: #111;--playlist-save-popup-border-color: #eee;--playlist-save-popup-create-icon-text-color: #909090;--playlist-save-popup-create-focus-bg-color: rgba(136, 136, 136, 0.14);--playlist-view-header-bg-color: #fafafa;--playlist-view-header-toggle-text-color: rgb(96, 96, 96);--playlist-view-header-toggle-bg-color: #fafafa;--playlist-view-title-link-text-color: rgb(13, 13, 13);--playlist-view-meta-text-color: rgba(17, 17, 17, 0.6);--playlist-view-meta-link-color: rgba(17, 17, 17, 0.6);--playlist-view-meta-link-hover-text-color: rgb(13, 13, 13);--playlist-view-status-text-color: rgba(17, 17, 17, 0.6);--playlist-view-status-bg-color: rgba(0, 0, 0, 0.05);--playlist-view-status-icon-text-color: rgba(17, 17, 17, 0.4);--playlist-view-actions-bg-color: #fafafa;--playlist-view-media-bg-color: var(--sidebar-bg-color);--playlist-view-media-order-number-color: rgb(136, 136, 136);--playlist-view-item-title-text-color: rgb(13, 13, 13);--playlist-view-item-author-text-color: rgb(13, 13, 13);--playlist-view-item-author-bg-color: var(--sidebar-bg-color);--profile-page-bg-color: #fff;--profile-page-header-bg-color: var(--body-bg-color);--profile-page-info-videos-number-text-color: rgba(17, 17, 17, 0.6);--profile-page-nav-link-text-color: rgba(17, 17, 17, 0.6);--profile-page-nav-link-hover-text-color: #111;--profile-page-nav-link-active-text-color: #111;--profile-page-nav-link-active-after-bg-color: rgba(17, 17, 17, 0.6);--add-media-page-tmplt-dialog-bg-color: #fff;--add-media-page-tmplt-uploader-bg-color: #fff;--add-media-page-tmplt-dropzone-bg-color: rgba(255, 255, 255, 0.5);--add-media-page-tmplt-drag-drop-inner-text-color: rgba(17, 17, 17, 0.4);--add-media-page-tmplt-upload-item-spiner-text-color: rgba(17, 17, 17, 0.32);--add-media-page-tmplt-upload-item-actions-text-color: rgba(17, 17, 17, 0.4);--add-media-page-qq-gallery-upload-button-text-color: rgba(17, 17, 17, 0.6);--add-media-page-qq-gallery-upload-button-icon-text-color: rgba(17, 17, 17, 0.6);--add-media-page-qq-gallery-upload-button-hover-text-color: rgba(17, 17, 17, 1);--add-media-page-qq-gallery-upload-button-hover-icon-text-color: rgba(17, 17, 17, 1);--add-media-page-qq-gallery-upload-button-focus-text-color: rgba(17, 17, 17, 0.4);--playlist-page-bg-color: rgb(250, 250, 250);--playlist-page-details-text-color: rgb(96, 96, 96);--playlist-page-thumb-bg-color: rgba(0, 0, 0, 0.07);--playlist-page-title-link-text-color: rgb(13, 13, 13);--playlist-page-actions-circle-icon-text-color: rgb(144, 144, 144);--playlist-page-actions-circle-icon-bg-color: rgb(250, 250, 250);--playlist-page-actions-nav-item-button-text-color: rgb(10, 10, 10);--playlist-page-actions-popup-message-bottom-cancel-button-text-color: rgba(17, 17, 17, 0.6);--playlist-page-actions-popup-message-bottom-cancel-button-hover-text-color: #111;--playlist-page-actions-popup-message-bottom-cancel-button-icon-hover-text-color: #111;--playlist-page-status-text-color: rgba(17, 17, 17, 0.6);--playlist-page-status-bg-color: rgba(0, 0, 0, 0.1);--playlist-page-status-icon-text-color: rgba(17, 17, 17, 0.4);--playlist-page-author-border-top-color: rgba(0, 0, 0, 0.1);--playlist-page-author-name-link-color: rgb(13, 13, 13);--playlist-page-author-edit-playlist-icon-button-text-color: rgb(96, 96, 96);--playlist-page-author-edit-playlist-icon-button-bg-color: #fafafa;--playlist-page-author-edit-playlist-icon-button-active-text-color: rgb(13, 13, 13);--playlist-page-author-edit-playlist-form-wrap-text-color: rgb(13, 13, 13);--playlist-page-author-edit-playlist-form-wrap-bg-color: #fff;--playlist-page-author-edit-playlist-form-wrap-border-color: #eee;--playlist-page-author-edit-playlist-form-wrap-title-circle-icon-hover-text-color: #111;--playlist-page-author-edit-playlist-author-thumb-text-color: #606060;--playlist-page-author-edit-playlist-author-thumb-bg-color: rgba(0, 0, 0, 0.07);--playlist-page-details-bg-color: #fafafa;--playlist-page-video-list-bg-color: #f5f5f5;--playlist-page-video-list-item-title-bg-color: #f5f5f5;--playlist-page-video-list-item-hover-bg-color: #ebebeb;--playlist-page-video-list-item-title-hover-bg-color: #ebebeb;--playlist-page-video-list-item-after-bg-color: rgba(0, 0, 0, 0.1);--playlist-page-video-list-item-order-text-color: rgb(96, 96, 96);--playlist-page-video-list-item-options-icon-hover-color: #111;--playlist-page-video-list-item-options-popup-cancel-removal-button-text-color: rgba(17, 17, 17, 0.6);--playlist-page-video-list-item-options-popup-cancel-removal-button-hover-text-color: #111;--playlist-page-video-list-item-options-popup-cancel-removal-button-hover-icon-text-color: #111;--media-author-actions-popup-bottom-cancel-removal-button-text-color: rgba(17, 17, 17, 0.6);--media-author-actions-popup-bottom-cancel-removal-button-hover-text-color: #111;--media-author-actions-popup-bottom-cancel-removal-button-hover-icon-text-color: #111;--profile-banner-wrap-popup-bottom-cancel-removal-button-text-color: rgba(17, 17, 17, 0.6);--profile-banner-wrap-popup-bottom-cancel-removal-button-hover-text-color: #111;--profile-banner-wrap-popup-bottom-cancel-removal-button-hover-icon-text-color: #111;--media-title-banner-border-color: #eee;--media-title-labels-area-text-color: rgba(17, 17, 17, 0.6);--media-title-labels-area-bg-color: rgba(238, 238, 238, 0.6);--media-title-views-text-color: rgba(17, 17, 17, 0.6);--media-actions-not-popup-circle-icon-focus-bg-color: rgba(0, 0, 0, 0.04);--media-actions-not-popup-circle-icon-active-bg-color: rgba(0, 0, 0, 0.07);--media-actions-like-before-border-color: rgba(17, 17, 17, 0.4);--media-actions-share-title-text-color: #111;--media-actions-share-options-nav-button-text-color: rgba(17, 17, 17, 0.4);--media-actions-share-options-link-text-color: rgb(17, 17, 17);--media-actions-share-copy-field-border-color: rgb(237, 237, 237);--media-actions-share-copy-field-bg-color: rgb(250, 250, 250);--media-actions-share-copy-field-input-text-color: rgb(17, 17, 17);--media-actions-more-options-popup-bg-color: #fff;--media-actions-more-options-popup-nav-link-text-color: rgb(10, 10, 10);--media-actions-share-fullscreen-popup-main-bg-color: #fff;--report-form-title-text-color: #111;--report-form-field-label-text-color: rgba(17, 17, 17, 0.6);--report-form-field-input-text-color: #111;--report-form-field-input-border-color: rgb(237, 237, 237);--report-form-field-input-bg-color: rgb(250, 250, 250);--report-form-help-text-color: rgba(17, 17, 17, 0.6);--form-actions-bottom-border-top-color: rgb(238, 238, 238);--media-author-banner-name-text-color: #0a0a0a;--media-author-banner-date-text-color: rgba(17, 17, 17, 0.6);--media-content-banner-border-color: #eee;--share-embed-inner-on-right-border-color: rgb(238, 238, 238);--share-embed-inner-on-right-ttl-text-color: #111;--share-embed-inner-on-right-icon-text-color: rgba(17, 17, 17, 0.4);--share-embed-inner-textarea-text-color: rgba(17, 17, 17, 0.8);--share-embed-inner-textarea-border-color: rgb(237, 237, 237);--share-embed-inner-textarea-bg-color: rgb(250, 250, 250);--share-embed-inner-embed-wrap-iconn-text-color: rgba(17, 17, 17, 0.4);--media-status-info-item-text-color: #111;--viewer-sidebar-auto-play-border-bottom-color: rgba(0, 0, 0, 0.1);--viewer-sidebar-auto-play-next-label-text-color: #0a0a0a;--viewer-sidebar-auto-play-option-text-color: #606060;--user-action-form-inner-bg-color: #fff;--user-action-form-inner-title-border-bottom-color: var(--sidebar-nav-border-color);--user-action-form-inner-input-border-color: #d3d3d3;--user-action-form-inner-input-text-color: #000;--user-action-form-inner-input-bg-color: #fff}body.dark_theme{--body-text-color: rgba(255, 255, 255, 0.88);--body-bg-color: #121212;--hr-color: #2a2a2a;--dotted-outline-color: rgba(255, 255, 255, 0.4);--input-color: hsla(0, 0%, 100%, 0.88);--input-bg-color: hsla(0, 0%, 0%, 0.55);--input-border-color: hsl(0, 0%, 19%);--header-bg-color: #272727;--header-circle-button-color: #fff;--header-popup-menu-color: #fff;--header-popup-menu-icon-color: rgb(144, 144, 144);--sidebar-bg-color: #1c1c1c;--sidebar-nav-border-color: rgba(255, 255, 255, 0.1);--sidebar-nav-item-text-color: #fff;--sidebar-nav-item-icon-color: rgb(144, 144, 144);--sidebar-bottom-link-color: rgba(255, 255, 255, 0.88);--spinner-loader-color: rgba(255, 255, 255, 0.74);--nav-menu-active-item-bg-color: rgba(255, 255, 255, 0.1);--nav-menu-item-hover-bg-color: rgba(255, 255, 255, 0.1);--in-popup-nav-menu-item-hover-bg-color: rgba(255, 255, 255, 0.1);--search-field-input-text-color: rgba(255, 255, 255, 0.88);--search-field-input-bg-color: #121212;--search-field-input-border-color: #303030;--search-field-submit-text-color: rgba(255, 255, 255, 0.5);--search-field-submit-bg-color: rgba(255, 255, 255, 0.08);--search-field-submit-border-color: #2e2e2e;--search-field-submit-hover-bg-color: rgba(255, 255, 255, 0.08);--search-field-submit-hover-border-color: #2e2e2e;--search-results-item-content-link-title-text-color: rgba(255, 255, 255, 0.88);--logged-in-user-thumb-bg-color: rgba(255, 255, 255, 0.14);--popup-bg-color: #242424;--popup-hr-bg-color: rgba(255, 255, 255, 0.08);--popup-top-text-color: #fff;--popup-top-bg-color: rgba(136, 136, 136, 0.4);--popup-msg-title-text-color: rgba(255, 255, 255, 0.88);--popup-msg-main-text-color: rgba(255, 255, 255, 0.5);--comments-textarea-wrapper-border-color: #898989;--comments-textarea-wrapper-after-bg-color: #fff;--comments-textarea-text-color: #fff;--comments-textarea-text-placeholder-color: #898989;--comments-list-inner-border-color: rgba(255, 255, 255, 0.08);--comment-author-text-color: rgba(255, 255, 255, 0.88);--comment-date-text-color: #888;--comment-date-hover-text-color: #fff;--comment-text-color: rgba(255, 255, 255, 0.88);--comment-text-mentions-background-color-highlight:#006622;--comment-actions-material-icon-text-color: rgba(255, 255, 255, 0.74);--comment-actions-likes-num-text-color: rgba(255, 255, 255, 0.5);--comment-actions-reply-button-text-color: rgba(255, 255, 255, 0.5);--comment-actions-reply-button-hover-text-color: rgba(255, 255, 255, 0.74);--comment-actions-cancel-removal-button-text-color: rgba(255, 255, 255, 0.5);--comment-actions-cancel-removal-button-hover-text-color: rgba(255, 255, 255, 0.74);--item-bg-color: #121212;--item-title-text-color: rgba(255, 255, 255, 0.88);--item-thumb-bg-color: var(--sidebar-bg-color);--item-meta-text-color: #888;--item-meta-link-text-color: var(--item-text-color);--item-meta-link-hover-text-color: rgba(255, 255, 255, 0.74);--profile-page-item-content-title-bg-color: #121212;--playlist-item-main-view-full-link-text-color: rgb(170, 170, 170);--playlist-item-main-view-full-link-hover-text-color: #fff;--item-list-load-more-text-color: #888;--item-list-load-more-hover-text-color: rgba(255, 255, 255, 0.74);--media-list-row-border-color: rgba(255, 255, 255, 0.08);--media-list-header-title-link-text-color: rgba(255, 255, 255, 0.5);--playlist-form-title-focused-bg-color: rgba(255, 255, 255, 0.88);--playlist-privacy-border-color: #888;--playlist-form-cancel-button-text-color: rgba(255, 255, 255, 0.5);--playlist-form-cancel-button-hover-text-color: rgba(255, 255, 255, 0.74);--playlist-form-field-text-color: #fff;--playlist-form-field-border-color: #888;--playlist-save-popup-text-color: rgba(255, 255, 255, 0.88);--playlist-save-popup-border-color: rgba(255, 255, 255, 0.1);--playlist-save-popup-create-icon-text-color: #909090;--playlist-save-popup-create-focus-bg-color: rgba(255, 255, 255, 0.14);--playlist-view-header-bg-color: #252525;--playlist-view-header-toggle-text-color: #fff;--playlist-view-header-toggle-bg-color: #252525;--playlist-view-title-link-text-color: rgba(255, 255, 255, 0.88);--playlist-view-meta-text-color: rgb(238, 238, 238);--playlist-view-meta-link-color: #fff;--playlist-view-meta-link-hover-text-color: #fff;--playlist-view-status-text-color: rgba(255, 255, 255, 0.6);--playlist-view-status-bg-color: rgba(255, 255, 255, 0.1);--playlist-view-status-icon-text-color: rgba(255, 255, 255, 0.6);--playlist-view-actions-bg-color: #252525;--playlist-view-media-bg-color: var(--sidebar-bg-color);--playlist-view-media-order-number-color: rgb(136, 136, 136);--playlist-view-item-title-text-color: #fff;--playlist-view-item-author-text-color: #fff;--playlist-view-item-author-bg-color: var(--sidebar-bg-color);--profile-page-bg-color: var(--body-bg-color);--profile-page-header-bg-color: #1a1a1a;--profile-page-info-videos-number-text-color: #888;--profile-page-nav-link-text-color: #888;--profile-page-nav-link-hover-text-color: rgba(255, 255, 255, 0.88);--profile-page-nav-link-active-text-color: rgba(255, 255, 255, 0.88);--profile-page-nav-link-active-after-bg-color: #888;--add-media-page-tmplt-dialog-bg-color: #242424;--add-media-page-tmplt-uploader-bg-color: #242424;--add-media-page-tmplt-dropzone-bg-color: rgba(28, 28, 28, 0.5);--add-media-page-tmplt-drag-drop-inner-text-color: rgba(255, 255, 255, 0.5);--add-media-page-tmplt-upload-item-spiner-text-color: rgba(255, 255, 255, 0.4);--add-media-page-tmplt-upload-item-actions-text-color: rgba(255, 255, 255, 0.5);--add-media-page-qq-gallery-upload-button-text-color: rgba(255, 255, 255, 0.528);--add-media-page-qq-gallery-upload-button-icon-text-color: rgba(255, 255, 255, 0.528);--add-media-page-qq-gallery-upload-button-hover-text-color: rgba(255, 255, 255, 0.88);--add-media-page-qq-gallery-upload-button-hover-icon-text-color: rgba(255, 255, 255, 0.88);--add-media-page-qq-gallery-upload-button-focus-text-color: rgba(255, 255, 255, 0.704);--playlist-page-bg-color: #1a1a1a;--playlist-page-details-text-color: rgb(170, 170, 170);--playlist-page-thumb-bg-color: #272727;--playlist-page-title-link-text-color: #fff;--playlist-page-actions-circle-icon-text-color: #1a1a1a;--playlist-page-actions-circle-icon-bg-color: inherit;--playlist-page-actions-nav-item-button-text-color: rgba(255, 255, 255, 0.88);--playlist-page-actions-popup-message-bottom-cancel-button-text-color: rgba(255, 255, 255, 0.5);--playlist-page-actions-popup-message-bottom-cancel-button-hover-text-color: rgba(255, 255, 255, 0.74);--playlist-page-actions-popup-message-bottom-cancel-button-icon-hover-text-color: rgba(255, 255, 255, 0.74);--playlist-page-status-text-color: rgba(255, 255, 255, 0.6);--playlist-page-status-bg-color: rgba(255, 255, 255, 0.1);--playlist-page-status-icon-text-color: rgba(255, 255, 255, 0.4);--playlist-page-author-border-top-color: rgba(255, 255, 255, 0.1);--playlist-page-author-name-link-color: rgba(255, 255, 255, 0.88);--playlist-page-author-edit-playlist-icon-button-text-color: rgb(170, 170, 170);--playlist-page-author-edit-playlist-icon-button-bg-color: #252525;--playlist-page-author-edit-playlist-icon-button-active-text-color: rgba(255, 255, 255, 0.88);--playlist-page-author-edit-playlist-form-wrap-text-color: rgba(255, 255, 255, 0.88);--playlist-page-author-edit-playlist-form-wrap-bg-color: #242424;--playlist-page-author-edit-playlist-form-wrap-border-color: rgba(255, 255, 255, 0.1);--playlist-page-author-edit-playlist-form-wrap-title-circle-icon-hover-text-color: rgba(255, 255, 255, 0.88);--playlist-page-author-edit-playlist-author-thumb-text-color: #fff;--playlist-page-author-edit-playlist-author-thumb-bg-color: #272727;--playlist-page-details-bg-color: #252525;--playlist-page-video-list-bg-color: #1c1c1c;--playlist-page-video-list-item-title-bg-color: #1c1c1c;--playlist-page-video-list-item-hover-bg-color: #333;--playlist-page-video-list-item-title-hover-bg-color: #333;--playlist-page-video-list-item-after-bg-color: rgba(255, 255, 255, 0.1);--playlist-page-video-list-item-order-text-color: rgb(170, 170, 170);--playlist-page-video-list-item-options-icon-hover-color: rgba(255, 255, 255, 0.88);--playlist-page-video-list-item-options-popup-cancel-removal-button-text-color: rgba(255, 255, 255, 0.5);--playlist-page-video-list-item-options-popup-cancel-removal-button-hover-text-color: rgba(255, 255, 255, 0.74);--playlist-page-video-list-item-options-popup-cancel-removal-button-hover-icon-text-color: rgba(255, 255, 255, 0.74);--media-author-actions-popup-bottom-cancel-removal-button-text-color: rgba(255, 255, 255, 0.5);--media-author-actions-popup-bottom-cancel-removal-button-hover-text-color: rgba(255, 255, 255, 0.74);--media-author-actions-popup-bottom-cancel-removal-button-hover-icon-text-color: rgba(255, 255, 255, 0.74);--profile-banner-wrap-popup-bottom-cancel-removal-button-text-color: rgba(255, 255, 255, 0.5);--profile-banner-wrap-popup-bottom-cancel-removal-button-hover-text-color: rgba(255, 255, 255, 0.74);--profile-banner-wrap-popup-bottom-cancel-removal-button-hover-icon-text-color: rgba(255, 255, 255, 0.74);--media-title-banner-border-color: rgba(255, 255, 255, 0.08);--media-title-labels-area-text-color: rgba(255, 255, 255, 0.6);--media-title-labels-area-bg-color: rgba(255, 255, 255, 0.08);--media-title-views-text-color: rgb(136, 136, 136);--media-actions-not-popup-circle-icon-focus-bg-color: rgba(255, 255, 255, 0.07);--media-actions-not-popup-circle-icon-active-bg-color: rgba(255, 255, 255, 0.14);--media-actions-like-before-border-color: rgba(255, 255, 255, 0.5);--media-actions-share-title-text-color: rgba(255, 255, 255, 0.88);--media-actions-share-options-nav-button-text-color: rgba(255, 255, 255, 0.5);--media-actions-share-options-link-text-color: rgba(255, 255, 255, 0.88);--media-actions-share-copy-field-border-color: rgb(41, 41, 41);--media-actions-share-copy-field-bg-color: rgb(28, 28, 28);--media-actions-share-copy-field-input-text-color: rgba(255, 255, 255, 0.88);--media-actions-more-options-popup-bg-color: #242424;--media-actions-more-options-popup-nav-link-text-color: rgba(255, 255, 255, 0.88);--media-actions-share-fullscreen-popup-main-bg-color: #242424;--report-form-title-text-color: rgba(255, 255, 255, 0.88);--report-form-field-label-text-color: rgba(255, 255, 255, 0.88);--report-form-field-input-text-color: rgba(255, 255, 255, 0.88);--report-form-field-input-border-color: rgb(41, 41, 41);--report-form-field-input-bg-color: rgb(28, 28, 28);--report-form-help-text-color: rgb(136, 136, 136);--form-actions-bottom-border-top-color: rgba(255, 255, 255, 0.08);--media-author-banner-name-text-color: rgba(255, 255, 255, 0.88);--media-author-banner-date-text-color: rgba(255, 255, 255, 0.6);--media-content-banner-border-color: rgba(255, 255, 255, 0.08);--share-embed-inner-on-right-border-color: rgba(255, 255, 255, 0.08);--share-embed-inner-on-right-ttl-text-color: rgba(255, 255, 255, 0.88);--share-embed-inner-on-right-icon-text-color: rgba(255, 255, 255, 0.5);--share-embed-inner-textarea-text-color: rgba(255, 255, 255, 0.55);--share-embed-inner-textarea-border-color: rgb(41, 41, 41);--share-embed-inner-textarea-bg-color: rgb(28, 28, 28);--share-embed-inner-embed-wrap-iconn-text-color: rgba(255, 255, 255, 0.5);--media-status-info-item-text-color: rgba(255, 255, 255, 0.88);--viewer-sidebar-auto-play-border-bottom-color: rgba(255, 255, 255, 0.1);--viewer-sidebar-auto-play-next-label-text-color: #fff;--viewer-sidebar-auto-play-option-text-color: #aaa;--user-action-form-inner-bg-color: #242424;--user-action-form-inner-title-border-bottom-color: var(--sidebar-nav-border-color);--user-action-form-inner-input-border-color: #303030;--user-action-form-inner-input-text-color: rgba(255, 255, 255, 0.88);--user-action-form-inner-input-bg-color: #121212}body{--default-logo-height: 18px;--default-theme-color: #009933;--default-brand-color: #009933;--success-color: #00a28b;--warning-color: #e09f1f;--danger-color: #de623b;--input-disabled-bg-color: hsla(0, 0%, 0%, 0.05);--dotted-outline: 1px dotted var(--dotted-outline-color);--header-height: 56px;--sidebar-width: 240px;--item-title-font-size: 14px;--item-title-max-lines: 2;--item-title-line-height: 18px;--horizontal-item-title-line-height: 21px;--playlist-item-title-line-height: 20px;--large-item-title-font-size: 16px;--large-item-title-line-height: 22px;--links-color: var(--default-theme-color)}body{--default-item-width: 218px;--default-max-item-width: 344px;--default-max-row-items: 6;--default-item-margin-right-width: 4px;--default-item-margin-bottom-width: 24px;--default-horizontal-item-margin-right-width: 12px;--default-horizontal-item-margin-bottom-width: 12px}.items-list-ver .feat-first-item .items-list-wrap,.items-list-ver .feat-first-item .items-list{width:100%;display:inline-block}.items-list-ver .feat-first-item.no-title{margin-top:var(--default-item-margin-bottom-width)}.items-list-ver .feat-first-item .item:first-child .item-player-wrapper{position:relative;width:100%;height:auto;padding-bottom:56.11%}.items-list-ver .feat-first-item .item:first-child .item-player-wrapper-inner{position:absolute;top:0;left:0;right:0;bottom:0;display:block;background-color:var(--item-thumb-bg-color)}@media(min-width: 600px){.items-list-ver.media-list-wrapper .media-list-row .item{display:inline-block;max-width:var(--item-width, var(--default-item-width))}.items-list-ver.media-list-wrapper .media-list-row .item-content{margin-right:var(--item-margin-right-width, var(--default-item-margin-right-width))}.items-list-ver.media-list-wrapper .media-list-row .item-main h3{margin:.5714285em 0}}@media(min-width: 600px){.items-list-ver .feat-first-item .item:first-child{float:left;max-width:-webkit-calc(3 * var(--item-width, var(--default-item-width)));max-width:-moz-calc(3 * var(--item-width, var(--default-item-width)));max-width:calc(3 * var(--item-width, var(--default-item-width)))}}@media(min-width: 952px){.items-list-ver .feat-first-item .item:nth-child(4n+4){clear:left}.items-list-ver .feat-first-item .item:nth-child(2){min-height:232px;margin-bottom:13px}}@media(min-width: 1170px){.items-list-ver .feat-first-item .item:nth-child(4n+4){clear:none}.items-list-ver .feat-first-item .item:nth-child(5n+6){clear:left}.items-list-ver .feat-first-item .item:nth-child(2){min-height:0;margin-bottom:var(--default-item-margin-bottom-width)}.items-list-ver .feat-first-item .item:nth-child(3){min-height:232px;margin-bottom:13px}}@media(min-width: 1388px){.items-list-ver .feat-first-item .item:nth-child(5n+6){clear:none}.items-list-ver .feat-first-item .item:nth-child(6n+8){clear:left}.items-list-ver .feat-first-item .item:nth-child(3){min-height:0;margin-bottom:var(--default-item-margin-bottom-width)}.items-list-ver .feat-first-item .item:nth-child(4){min-height:232px;margin-bottom:13px}}@media(min-width: 952px){.sliding-sidebar .items-list-ver .feat-first-item .item:nth-child(4n+4),.visible-sidebar .items-list-ver .feat-first-item .item:nth-child(4n+4){clear:none}.sliding-sidebar .items-list-ver .feat-first-item .item:nth-child(2),.visible-sidebar .items-list-ver .feat-first-item .item:nth-child(2){min-height:0;margin-bottom:var(--default-item-margin-bottom-width)}}@media(min-width: 1170px){.sliding-sidebar .items-list-ver .feat-first-item .item:nth-child(4n+4),.visible-sidebar .items-list-ver .feat-first-item .item:nth-child(4n+4){clear:left}.sliding-sidebar .items-list-ver .feat-first-item .item:nth-child(3),.visible-sidebar .items-list-ver .feat-first-item .item:nth-child(3){min-height:0;margin-bottom:var(--default-item-margin-bottom-width)}.sliding-sidebar .items-list-ver .feat-first-item .item:nth-child(2),.visible-sidebar .items-list-ver .feat-first-item .item:nth-child(2){min-height:232px;margin-bottom:13px}}@media(min-width: 1388px){.sliding-sidebar .items-list-ver .feat-first-item .item:nth-child(4n+4),.visible-sidebar .items-list-ver .feat-first-item .item:nth-child(4n+4){clear:none}.sliding-sidebar .items-list-ver .feat-first-item .item:nth-child(5n+6),.visible-sidebar .items-list-ver .feat-first-item .item:nth-child(5n+6){clear:left}.sliding-sidebar .items-list-ver .feat-first-item .item:nth-child(2),.sliding-sidebar .items-list-ver .feat-first-item .item:nth-child(4),.visible-sidebar .items-list-ver .feat-first-item .item:nth-child(2),.visible-sidebar .items-list-ver .feat-first-item .item:nth-child(4){min-height:0;margin-bottom:var(--default-item-margin-bottom-width)}.sliding-sidebar .items-list-ver .feat-first-item .item:nth-child(3),.visible-sidebar .items-list-ver .feat-first-item .item:nth-child(3){min-height:232px;margin-bottom:13px}}@media(min-width: 1606px){.sliding-sidebar .items-list-ver .feat-first-item .item:nth-child(5n+6),.visible-sidebar .items-list-ver .feat-first-item .item:nth-child(5n+6){clear:none}.sliding-sidebar .items-list-ver .feat-first-item .item:nth-child(6n+8),.visible-sidebar .items-list-ver .feat-first-item .item:nth-child(6n+8){clear:left}.sliding-sidebar .items-list-ver .feat-first-item .item:nth-child(3),.visible-sidebar .items-list-ver .feat-first-item .item:nth-child(3){min-height:0;margin-bottom:var(--default-item-margin-bottom-width)}.sliding-sidebar .items-list-ver .feat-first-item .item:nth-child(4),.visible-sidebar .items-list-ver .feat-first-item .item:nth-child(4){min-height:232px;margin-bottom:13px}}body{--body-text-color: #111;--body-bg-color: #fafafa;--hr-color: #e1e1e1;--dotted-outline-color: rgba(0, 0, 0, 0.4);--input-color: hsl(0, 0%, 7%);--input-bg-color: hsl(0, 0%, 100%);--input-border-color: hsl(0, 0%, 80%);--header-bg-color: #fff;--header-circle-button-color: #606060;--header-popup-menu-color: rgb(13, 13, 13);--header-popup-menu-icon-color: rgb(144, 144, 144);--sidebar-bg-color: #f5f5f5;--sidebar-nav-border-color: #eee;--sidebar-nav-item-text-color: rgb(13, 13, 13);--sidebar-nav-item-icon-color: rgb(144, 144, 144);--sidebar-bottom-link-color: initial;--spinner-loader-color: rgba(17, 17, 17, 0.8);--nav-menu-active-item-bg-color: rgba(0, 0, 0, 0.1);--nav-menu-item-hover-bg-color: rgba(0, 0, 0, 0.04);--in-popup-nav-menu-item-hover-bg-color: #eee;--search-field-input-text-color: #111;--search-field-input-bg-color: #fff;--search-field-input-border-color: #ccc;--search-field-submit-text-color: #333;--search-field-submit-bg-color: #f8f8f8;--search-field-submit-border-color: #d3d3d3;--search-field-submit-hover-bg-color: #f0f0f0;--search-field-submit-hover-border-color: #c6c6c6;--search-results-item-content-link-title-text-color: rgb(17, 17, 17);--logged-in-user-thumb-bg-color: rgba(0, 0, 0, 0.07);--popup-bg-color: #fff;--popup-hr-bg-color: #eee;--popup-top-text-color: rgb(13, 13, 13);--popup-top-bg-color: #eee;--popup-msg-title-text-color: rgb(17, 17, 17);--popup-msg-main-text-color: rgba(17, 17, 17, 0.8);--comments-textarea-wrapper-border-color: #eeeeee;--comments-textarea-wrapper-after-bg-color: #0a0a0a;--comments-textarea-text-color: #0a0a0a;--comments-textarea-text-placeholder-color: rgba(17, 17, 17, 0.6);--comments-list-inner-border-color: #eee;--comment-author-text-color: #111;--comment-date-text-color: #606060;--comment-date-hover-text-color: #0a0a0a;--comment-text-color: #111;--comment-text-mentions-background-color-highlight:#00cc44;--comment-actions-material-icon-text-color: rgba(17, 17, 17, 0.8);--comment-actions-likes-num-text-color: rgba(17, 17, 17, 0.6);--comment-actions-reply-button-text-color: rgba(17, 17, 17, 0.6);--comment-actions-reply-button-hover-text-color: #111;--comment-actions-cancel-removal-button-text-color: rgba(17, 17, 17, 0.6);--comment-actions-cancel-removal-button-hover-text-color: #111;--item-bg-color: #fafafa;--item-title-text-color: #111;--item-thumb-bg-color: var(--sidebar-bg-color);--item-meta-text-color: rgba(17, 17, 17, 0.6);--item-meta-link-text-color: var(--item-text-color);--item-meta-link-hover-text-color: rgba(17, 17, 17, 0.8);--profile-page-item-content-title-bg-color: #fff;--playlist-item-main-view-full-link-text-color: rgb(96, 96, 96);--playlist-item-main-view-full-link-hover-text-color: rgb(13, 13, 13);--item-list-load-more-text-color: rgba(17, 17, 17, 0.6);--item-list-load-more-hover-text-color: rgba(17, 17, 17, 0.8);--media-list-row-border-color: #eee;--media-list-header-title-link-text-color: rgba(17, 17, 17, 0.6);--playlist-form-title-focused-bg-color: #111;--playlist-privacy-border-color: #888;--playlist-form-cancel-button-text-color: rgba(17, 17, 17, 0.6);--playlist-form-cancel-button-hover-text-color: #111;--playlist-form-field-text-color: #000;--playlist-form-field-border-color: #888;--playlist-save-popup-text-color: #111;--playlist-save-popup-border-color: #eee;--playlist-save-popup-create-icon-text-color: #909090;--playlist-save-popup-create-focus-bg-color: rgba(136, 136, 136, 0.14);--playlist-view-header-bg-color: #fafafa;--playlist-view-header-toggle-text-color: rgb(96, 96, 96);--playlist-view-header-toggle-bg-color: #fafafa;--playlist-view-title-link-text-color: rgb(13, 13, 13);--playlist-view-meta-text-color: rgba(17, 17, 17, 0.6);--playlist-view-meta-link-color: rgba(17, 17, 17, 0.6);--playlist-view-meta-link-hover-text-color: rgb(13, 13, 13);--playlist-view-status-text-color: rgba(17, 17, 17, 0.6);--playlist-view-status-bg-color: rgba(0, 0, 0, 0.05);--playlist-view-status-icon-text-color: rgba(17, 17, 17, 0.4);--playlist-view-actions-bg-color: #fafafa;--playlist-view-media-bg-color: var(--sidebar-bg-color);--playlist-view-media-order-number-color: rgb(136, 136, 136);--playlist-view-item-title-text-color: rgb(13, 13, 13);--playlist-view-item-author-text-color: rgb(13, 13, 13);--playlist-view-item-author-bg-color: var(--sidebar-bg-color);--profile-page-bg-color: #fff;--profile-page-header-bg-color: var(--body-bg-color);--profile-page-info-videos-number-text-color: rgba(17, 17, 17, 0.6);--profile-page-nav-link-text-color: rgba(17, 17, 17, 0.6);--profile-page-nav-link-hover-text-color: #111;--profile-page-nav-link-active-text-color: #111;--profile-page-nav-link-active-after-bg-color: rgba(17, 17, 17, 0.6);--add-media-page-tmplt-dialog-bg-color: #fff;--add-media-page-tmplt-uploader-bg-color: #fff;--add-media-page-tmplt-dropzone-bg-color: rgba(255, 255, 255, 0.5);--add-media-page-tmplt-drag-drop-inner-text-color: rgba(17, 17, 17, 0.4);--add-media-page-tmplt-upload-item-spiner-text-color: rgba(17, 17, 17, 0.32);--add-media-page-tmplt-upload-item-actions-text-color: rgba(17, 17, 17, 0.4);--add-media-page-qq-gallery-upload-button-text-color: rgba(17, 17, 17, 0.6);--add-media-page-qq-gallery-upload-button-icon-text-color: rgba(17, 17, 17, 0.6);--add-media-page-qq-gallery-upload-button-hover-text-color: rgba(17, 17, 17, 1);--add-media-page-qq-gallery-upload-button-hover-icon-text-color: rgba(17, 17, 17, 1);--add-media-page-qq-gallery-upload-button-focus-text-color: rgba(17, 17, 17, 0.4);--playlist-page-bg-color: rgb(250, 250, 250);--playlist-page-details-text-color: rgb(96, 96, 96);--playlist-page-thumb-bg-color: rgba(0, 0, 0, 0.07);--playlist-page-title-link-text-color: rgb(13, 13, 13);--playlist-page-actions-circle-icon-text-color: rgb(144, 144, 144);--playlist-page-actions-circle-icon-bg-color: rgb(250, 250, 250);--playlist-page-actions-nav-item-button-text-color: rgb(10, 10, 10);--playlist-page-actions-popup-message-bottom-cancel-button-text-color: rgba(17, 17, 17, 0.6);--playlist-page-actions-popup-message-bottom-cancel-button-hover-text-color: #111;--playlist-page-actions-popup-message-bottom-cancel-button-icon-hover-text-color: #111;--playlist-page-status-text-color: rgba(17, 17, 17, 0.6);--playlist-page-status-bg-color: rgba(0, 0, 0, 0.1);--playlist-page-status-icon-text-color: rgba(17, 17, 17, 0.4);--playlist-page-author-border-top-color: rgba(0, 0, 0, 0.1);--playlist-page-author-name-link-color: rgb(13, 13, 13);--playlist-page-author-edit-playlist-icon-button-text-color: rgb(96, 96, 96);--playlist-page-author-edit-playlist-icon-button-bg-color: #fafafa;--playlist-page-author-edit-playlist-icon-button-active-text-color: rgb(13, 13, 13);--playlist-page-author-edit-playlist-form-wrap-text-color: rgb(13, 13, 13);--playlist-page-author-edit-playlist-form-wrap-bg-color: #fff;--playlist-page-author-edit-playlist-form-wrap-border-color: #eee;--playlist-page-author-edit-playlist-form-wrap-title-circle-icon-hover-text-color: #111;--playlist-page-author-edit-playlist-author-thumb-text-color: #606060;--playlist-page-author-edit-playlist-author-thumb-bg-color: rgba(0, 0, 0, 0.07);--playlist-page-details-bg-color: #fafafa;--playlist-page-video-list-bg-color: #f5f5f5;--playlist-page-video-list-item-title-bg-color: #f5f5f5;--playlist-page-video-list-item-hover-bg-color: #ebebeb;--playlist-page-video-list-item-title-hover-bg-color: #ebebeb;--playlist-page-video-list-item-after-bg-color: rgba(0, 0, 0, 0.1);--playlist-page-video-list-item-order-text-color: rgb(96, 96, 96);--playlist-page-video-list-item-options-icon-hover-color: #111;--playlist-page-video-list-item-options-popup-cancel-removal-button-text-color: rgba(17, 17, 17, 0.6);--playlist-page-video-list-item-options-popup-cancel-removal-button-hover-text-color: #111;--playlist-page-video-list-item-options-popup-cancel-removal-button-hover-icon-text-color: #111;--media-author-actions-popup-bottom-cancel-removal-button-text-color: rgba(17, 17, 17, 0.6);--media-author-actions-popup-bottom-cancel-removal-button-hover-text-color: #111;--media-author-actions-popup-bottom-cancel-removal-button-hover-icon-text-color: #111;--profile-banner-wrap-popup-bottom-cancel-removal-button-text-color: rgba(17, 17, 17, 0.6);--profile-banner-wrap-popup-bottom-cancel-removal-button-hover-text-color: #111;--profile-banner-wrap-popup-bottom-cancel-removal-button-hover-icon-text-color: #111;--media-title-banner-border-color: #eee;--media-title-labels-area-text-color: rgba(17, 17, 17, 0.6);--media-title-labels-area-bg-color: rgba(238, 238, 238, 0.6);--media-title-views-text-color: rgba(17, 17, 17, 0.6);--media-actions-not-popup-circle-icon-focus-bg-color: rgba(0, 0, 0, 0.04);--media-actions-not-popup-circle-icon-active-bg-color: rgba(0, 0, 0, 0.07);--media-actions-like-before-border-color: rgba(17, 17, 17, 0.4);--media-actions-share-title-text-color: #111;--media-actions-share-options-nav-button-text-color: rgba(17, 17, 17, 0.4);--media-actions-share-options-link-text-color: rgb(17, 17, 17);--media-actions-share-copy-field-border-color: rgb(237, 237, 237);--media-actions-share-copy-field-bg-color: rgb(250, 250, 250);--media-actions-share-copy-field-input-text-color: rgb(17, 17, 17);--media-actions-more-options-popup-bg-color: #fff;--media-actions-more-options-popup-nav-link-text-color: rgb(10, 10, 10);--media-actions-share-fullscreen-popup-main-bg-color: #fff;--report-form-title-text-color: #111;--report-form-field-label-text-color: rgba(17, 17, 17, 0.6);--report-form-field-input-text-color: #111;--report-form-field-input-border-color: rgb(237, 237, 237);--report-form-field-input-bg-color: rgb(250, 250, 250);--report-form-help-text-color: rgba(17, 17, 17, 0.6);--form-actions-bottom-border-top-color: rgb(238, 238, 238);--media-author-banner-name-text-color: #0a0a0a;--media-author-banner-date-text-color: rgba(17, 17, 17, 0.6);--media-content-banner-border-color: #eee;--share-embed-inner-on-right-border-color: rgb(238, 238, 238);--share-embed-inner-on-right-ttl-text-color: #111;--share-embed-inner-on-right-icon-text-color: rgba(17, 17, 17, 0.4);--share-embed-inner-textarea-text-color: rgba(17, 17, 17, 0.8);--share-embed-inner-textarea-border-color: rgb(237, 237, 237);--share-embed-inner-textarea-bg-color: rgb(250, 250, 250);--share-embed-inner-embed-wrap-iconn-text-color: rgba(17, 17, 17, 0.4);--media-status-info-item-text-color: #111;--viewer-sidebar-auto-play-border-bottom-color: rgba(0, 0, 0, 0.1);--viewer-sidebar-auto-play-next-label-text-color: #0a0a0a;--viewer-sidebar-auto-play-option-text-color: #606060;--user-action-form-inner-bg-color: #fff;--user-action-form-inner-title-border-bottom-color: var(--sidebar-nav-border-color);--user-action-form-inner-input-border-color: #d3d3d3;--user-action-form-inner-input-text-color: #000;--user-action-form-inner-input-bg-color: #fff}body.dark_theme{--body-text-color: rgba(255, 255, 255, 0.88);--body-bg-color: #121212;--hr-color: #2a2a2a;--dotted-outline-color: rgba(255, 255, 255, 0.4);--input-color: hsla(0, 0%, 100%, 0.88);--input-bg-color: hsla(0, 0%, 0%, 0.55);--input-border-color: hsl(0, 0%, 19%);--header-bg-color: #272727;--header-circle-button-color: #fff;--header-popup-menu-color: #fff;--header-popup-menu-icon-color: rgb(144, 144, 144);--sidebar-bg-color: #1c1c1c;--sidebar-nav-border-color: rgba(255, 255, 255, 0.1);--sidebar-nav-item-text-color: #fff;--sidebar-nav-item-icon-color: rgb(144, 144, 144);--sidebar-bottom-link-color: rgba(255, 255, 255, 0.88);--spinner-loader-color: rgba(255, 255, 255, 0.74);--nav-menu-active-item-bg-color: rgba(255, 255, 255, 0.1);--nav-menu-item-hover-bg-color: rgba(255, 255, 255, 0.1);--in-popup-nav-menu-item-hover-bg-color: rgba(255, 255, 255, 0.1);--search-field-input-text-color: rgba(255, 255, 255, 0.88);--search-field-input-bg-color: #121212;--search-field-input-border-color: #303030;--search-field-submit-text-color: rgba(255, 255, 255, 0.5);--search-field-submit-bg-color: rgba(255, 255, 255, 0.08);--search-field-submit-border-color: #2e2e2e;--search-field-submit-hover-bg-color: rgba(255, 255, 255, 0.08);--search-field-submit-hover-border-color: #2e2e2e;--search-results-item-content-link-title-text-color: rgba(255, 255, 255, 0.88);--logged-in-user-thumb-bg-color: rgba(255, 255, 255, 0.14);--popup-bg-color: #242424;--popup-hr-bg-color: rgba(255, 255, 255, 0.08);--popup-top-text-color: #fff;--popup-top-bg-color: rgba(136, 136, 136, 0.4);--popup-msg-title-text-color: rgba(255, 255, 255, 0.88);--popup-msg-main-text-color: rgba(255, 255, 255, 0.5);--comments-textarea-wrapper-border-color: #898989;--comments-textarea-wrapper-after-bg-color: #fff;--comments-textarea-text-color: #fff;--comments-textarea-text-placeholder-color: #898989;--comments-list-inner-border-color: rgba(255, 255, 255, 0.08);--comment-author-text-color: rgba(255, 255, 255, 0.88);--comment-date-text-color: #888;--comment-date-hover-text-color: #fff;--comment-text-color: rgba(255, 255, 255, 0.88);--comment-text-mentions-background-color-highlight:#006622;--comment-actions-material-icon-text-color: rgba(255, 255, 255, 0.74);--comment-actions-likes-num-text-color: rgba(255, 255, 255, 0.5);--comment-actions-reply-button-text-color: rgba(255, 255, 255, 0.5);--comment-actions-reply-button-hover-text-color: rgba(255, 255, 255, 0.74);--comment-actions-cancel-removal-button-text-color: rgba(255, 255, 255, 0.5);--comment-actions-cancel-removal-button-hover-text-color: rgba(255, 255, 255, 0.74);--item-bg-color: #121212;--item-title-text-color: rgba(255, 255, 255, 0.88);--item-thumb-bg-color: var(--sidebar-bg-color);--item-meta-text-color: #888;--item-meta-link-text-color: var(--item-text-color);--item-meta-link-hover-text-color: rgba(255, 255, 255, 0.74);--profile-page-item-content-title-bg-color: #121212;--playlist-item-main-view-full-link-text-color: rgb(170, 170, 170);--playlist-item-main-view-full-link-hover-text-color: #fff;--item-list-load-more-text-color: #888;--item-list-load-more-hover-text-color: rgba(255, 255, 255, 0.74);--media-list-row-border-color: rgba(255, 255, 255, 0.08);--media-list-header-title-link-text-color: rgba(255, 255, 255, 0.5);--playlist-form-title-focused-bg-color: rgba(255, 255, 255, 0.88);--playlist-privacy-border-color: #888;--playlist-form-cancel-button-text-color: rgba(255, 255, 255, 0.5);--playlist-form-cancel-button-hover-text-color: rgba(255, 255, 255, 0.74);--playlist-form-field-text-color: #fff;--playlist-form-field-border-color: #888;--playlist-save-popup-text-color: rgba(255, 255, 255, 0.88);--playlist-save-popup-border-color: rgba(255, 255, 255, 0.1);--playlist-save-popup-create-icon-text-color: #909090;--playlist-save-popup-create-focus-bg-color: rgba(255, 255, 255, 0.14);--playlist-view-header-bg-color: #252525;--playlist-view-header-toggle-text-color: #fff;--playlist-view-header-toggle-bg-color: #252525;--playlist-view-title-link-text-color: rgba(255, 255, 255, 0.88);--playlist-view-meta-text-color: rgb(238, 238, 238);--playlist-view-meta-link-color: #fff;--playlist-view-meta-link-hover-text-color: #fff;--playlist-view-status-text-color: rgba(255, 255, 255, 0.6);--playlist-view-status-bg-color: rgba(255, 255, 255, 0.1);--playlist-view-status-icon-text-color: rgba(255, 255, 255, 0.6);--playlist-view-actions-bg-color: #252525;--playlist-view-media-bg-color: var(--sidebar-bg-color);--playlist-view-media-order-number-color: rgb(136, 136, 136);--playlist-view-item-title-text-color: #fff;--playlist-view-item-author-text-color: #fff;--playlist-view-item-author-bg-color: var(--sidebar-bg-color);--profile-page-bg-color: var(--body-bg-color);--profile-page-header-bg-color: #1a1a1a;--profile-page-info-videos-number-text-color: #888;--profile-page-nav-link-text-color: #888;--profile-page-nav-link-hover-text-color: rgba(255, 255, 255, 0.88);--profile-page-nav-link-active-text-color: rgba(255, 255, 255, 0.88);--profile-page-nav-link-active-after-bg-color: #888;--add-media-page-tmplt-dialog-bg-color: #242424;--add-media-page-tmplt-uploader-bg-color: #242424;--add-media-page-tmplt-dropzone-bg-color: rgba(28, 28, 28, 0.5);--add-media-page-tmplt-drag-drop-inner-text-color: rgba(255, 255, 255, 0.5);--add-media-page-tmplt-upload-item-spiner-text-color: rgba(255, 255, 255, 0.4);--add-media-page-tmplt-upload-item-actions-text-color: rgba(255, 255, 255, 0.5);--add-media-page-qq-gallery-upload-button-text-color: rgba(255, 255, 255, 0.528);--add-media-page-qq-gallery-upload-button-icon-text-color: rgba(255, 255, 255, 0.528);--add-media-page-qq-gallery-upload-button-hover-text-color: rgba(255, 255, 255, 0.88);--add-media-page-qq-gallery-upload-button-hover-icon-text-color: rgba(255, 255, 255, 0.88);--add-media-page-qq-gallery-upload-button-focus-text-color: rgba(255, 255, 255, 0.704);--playlist-page-bg-color: #1a1a1a;--playlist-page-details-text-color: rgb(170, 170, 170);--playlist-page-thumb-bg-color: #272727;--playlist-page-title-link-text-color: #fff;--playlist-page-actions-circle-icon-text-color: #1a1a1a;--playlist-page-actions-circle-icon-bg-color: inherit;--playlist-page-actions-nav-item-button-text-color: rgba(255, 255, 255, 0.88);--playlist-page-actions-popup-message-bottom-cancel-button-text-color: rgba(255, 255, 255, 0.5);--playlist-page-actions-popup-message-bottom-cancel-button-hover-text-color: rgba(255, 255, 255, 0.74);--playlist-page-actions-popup-message-bottom-cancel-button-icon-hover-text-color: rgba(255, 255, 255, 0.74);--playlist-page-status-text-color: rgba(255, 255, 255, 0.6);--playlist-page-status-bg-color: rgba(255, 255, 255, 0.1);--playlist-page-status-icon-text-color: rgba(255, 255, 255, 0.4);--playlist-page-author-border-top-color: rgba(255, 255, 255, 0.1);--playlist-page-author-name-link-color: rgba(255, 255, 255, 0.88);--playlist-page-author-edit-playlist-icon-button-text-color: rgb(170, 170, 170);--playlist-page-author-edit-playlist-icon-button-bg-color: #252525;--playlist-page-author-edit-playlist-icon-button-active-text-color: rgba(255, 255, 255, 0.88);--playlist-page-author-edit-playlist-form-wrap-text-color: rgba(255, 255, 255, 0.88);--playlist-page-author-edit-playlist-form-wrap-bg-color: #242424;--playlist-page-author-edit-playlist-form-wrap-border-color: rgba(255, 255, 255, 0.1);--playlist-page-author-edit-playlist-form-wrap-title-circle-icon-hover-text-color: rgba(255, 255, 255, 0.88);--playlist-page-author-edit-playlist-author-thumb-text-color: #fff;--playlist-page-author-edit-playlist-author-thumb-bg-color: #272727;--playlist-page-details-bg-color: #252525;--playlist-page-video-list-bg-color: #1c1c1c;--playlist-page-video-list-item-title-bg-color: #1c1c1c;--playlist-page-video-list-item-hover-bg-color: #333;--playlist-page-video-list-item-title-hover-bg-color: #333;--playlist-page-video-list-item-after-bg-color: rgba(255, 255, 255, 0.1);--playlist-page-video-list-item-order-text-color: rgb(170, 170, 170);--playlist-page-video-list-item-options-icon-hover-color: rgba(255, 255, 255, 0.88);--playlist-page-video-list-item-options-popup-cancel-removal-button-text-color: rgba(255, 255, 255, 0.5);--playlist-page-video-list-item-options-popup-cancel-removal-button-hover-text-color: rgba(255, 255, 255, 0.74);--playlist-page-video-list-item-options-popup-cancel-removal-button-hover-icon-text-color: rgba(255, 255, 255, 0.74);--media-author-actions-popup-bottom-cancel-removal-button-text-color: rgba(255, 255, 255, 0.5);--media-author-actions-popup-bottom-cancel-removal-button-hover-text-color: rgba(255, 255, 255, 0.74);--media-author-actions-popup-bottom-cancel-removal-button-hover-icon-text-color: rgba(255, 255, 255, 0.74);--profile-banner-wrap-popup-bottom-cancel-removal-button-text-color: rgba(255, 255, 255, 0.5);--profile-banner-wrap-popup-bottom-cancel-removal-button-hover-text-color: rgba(255, 255, 255, 0.74);--profile-banner-wrap-popup-bottom-cancel-removal-button-hover-icon-text-color: rgba(255, 255, 255, 0.74);--media-title-banner-border-color: rgba(255, 255, 255, 0.08);--media-title-labels-area-text-color: rgba(255, 255, 255, 0.6);--media-title-labels-area-bg-color: rgba(255, 255, 255, 0.08);--media-title-views-text-color: rgb(136, 136, 136);--media-actions-not-popup-circle-icon-focus-bg-color: rgba(255, 255, 255, 0.07);--media-actions-not-popup-circle-icon-active-bg-color: rgba(255, 255, 255, 0.14);--media-actions-like-before-border-color: rgba(255, 255, 255, 0.5);--media-actions-share-title-text-color: rgba(255, 255, 255, 0.88);--media-actions-share-options-nav-button-text-color: rgba(255, 255, 255, 0.5);--media-actions-share-options-link-text-color: rgba(255, 255, 255, 0.88);--media-actions-share-copy-field-border-color: rgb(41, 41, 41);--media-actions-share-copy-field-bg-color: rgb(28, 28, 28);--media-actions-share-copy-field-input-text-color: rgba(255, 255, 255, 0.88);--media-actions-more-options-popup-bg-color: #242424;--media-actions-more-options-popup-nav-link-text-color: rgba(255, 255, 255, 0.88);--media-actions-share-fullscreen-popup-main-bg-color: #242424;--report-form-title-text-color: rgba(255, 255, 255, 0.88);--report-form-field-label-text-color: rgba(255, 255, 255, 0.88);--report-form-field-input-text-color: rgba(255, 255, 255, 0.88);--report-form-field-input-border-color: rgb(41, 41, 41);--report-form-field-input-bg-color: rgb(28, 28, 28);--report-form-help-text-color: rgb(136, 136, 136);--form-actions-bottom-border-top-color: rgba(255, 255, 255, 0.08);--media-author-banner-name-text-color: rgba(255, 255, 255, 0.88);--media-author-banner-date-text-color: rgba(255, 255, 255, 0.6);--media-content-banner-border-color: rgba(255, 255, 255, 0.08);--share-embed-inner-on-right-border-color: rgba(255, 255, 255, 0.08);--share-embed-inner-on-right-ttl-text-color: rgba(255, 255, 255, 0.88);--share-embed-inner-on-right-icon-text-color: rgba(255, 255, 255, 0.5);--share-embed-inner-textarea-text-color: rgba(255, 255, 255, 0.55);--share-embed-inner-textarea-border-color: rgb(41, 41, 41);--share-embed-inner-textarea-bg-color: rgb(28, 28, 28);--share-embed-inner-embed-wrap-iconn-text-color: rgba(255, 255, 255, 0.5);--media-status-info-item-text-color: rgba(255, 255, 255, 0.88);--viewer-sidebar-auto-play-border-bottom-color: rgba(255, 255, 255, 0.1);--viewer-sidebar-auto-play-next-label-text-color: #fff;--viewer-sidebar-auto-play-option-text-color: #aaa;--user-action-form-inner-bg-color: #242424;--user-action-form-inner-title-border-bottom-color: var(--sidebar-nav-border-color);--user-action-form-inner-input-border-color: #303030;--user-action-form-inner-input-text-color: rgba(255, 255, 255, 0.88);--user-action-form-inner-input-bg-color: #121212}body{--default-logo-height: 18px;--default-theme-color: #009933;--default-brand-color: #009933;--success-color: #00a28b;--warning-color: #e09f1f;--danger-color: #de623b;--input-disabled-bg-color: hsla(0, 0%, 0%, 0.05);--dotted-outline: 1px dotted var(--dotted-outline-color);--header-height: 56px;--sidebar-width: 240px;--item-title-font-size: 14px;--item-title-max-lines: 2;--item-title-line-height: 18px;--horizontal-item-title-line-height: 21px;--playlist-item-title-line-height: 20px;--large-item-title-font-size: 16px;--large-item-title-line-height: 22px;--links-color: var(--default-theme-color)}body{--default-item-width: 218px;--default-max-item-width: 344px;--default-max-row-items: 6;--default-item-margin-right-width: 4px;--default-item-margin-bottom-width: 24px;--default-horizontal-item-margin-right-width: 12px;--default-horizontal-item-margin-bottom-width: 12px}@media(min-width: 390px){.items-list-hor .item{max-width:100%;margin-bottom:8px}.items-list-hor .item-content{padding-left:-webkit-calc(218px - 4px);padding-left:-moz-calc(218px - 4px);padding-left:calc(218px - 4px)}.items-list-hor .item-thumb{position:absolute;top:0;left:0;width:-webkit-calc(218px - 4px);width:-moz-calc(218px - 4px);width:calc(218px - 4px);height:-webkit-calc(0.5611 * -webkit-calc(218px - 4px));height:-moz-calc(0.5611 * -moz-calc(218px - 4px));height:calc(0.5611 * calc(218px - 4px));padding-bottom:0}.items-list-hor .item-main{min-height:-webkit-calc(0.5611 * -webkit-calc(218px - 4px));min-height:-moz-calc(0.5611 * -moz-calc(218px - 4px));min-height:calc(0.5611 * calc(218px - 4px));padding-left:var(--horizontal-item-margin-right-width, var(--default-horizontal-item-margin-right-width))}.items-list-hor .item-main h3{margin-top:0;margin-bottom:0;font-size:16px;line-height:1em;max-height:initial}.items-list-hor .item-main h3 span{line-height:var(--horizontal-item-title-line-height);max-height:-webkit-calc(var(--horizontal-item-title-max-lines) * var(--default-horizontal-item-title-line-height));max-height:-moz-calc(var(--horizontal-item-title-max-lines) * var(--default-horizontal-item-title-line-height));max-height:calc(var(--horizontal-item-title-max-lines) * var(--default-horizontal-item-title-line-height))}.items-list-hor .item-author{display:inline}.items-list-hor .item-views:before{content:"•";content:"•";margin:0 4px}.items-list-hor .item-description{margin-top:8px}}@media(min-width: 390px)and (max-width: 599px){.items-list-hor .items-list{max-width:100%}.items-list-hor .item-content{padding-left:168px}.items-list-hor .item-thumb,.items-list-hor a.item-thumb{width:168px;height:-webkit-calc(0.5611 * 168px);height:-moz-calc(0.5611 * 168px);height:calc(0.5611 * 168px)}.items-list-hor .item-main{min-height:-webkit-calc(0.5611 * 168px);min-height:-moz-calc(0.5611 * 168px);min-height:calc(0.5611 * 168px)}.items-list-hor .item-main h3{line-height:20px;font-size:15px}.items-list-hor .item-author{display:block}.items-list-hor .item-views:before{display:none}.items-list-hor .item-meta>.item-views+.item-date:before{content:"•";content:"•";margin:0 4px}.items-list-hor .item-description{display:none}}@media(min-width: 600px){.items-list-hor .item-date:before{content:"•";content:"•";margin:0 4px}.items-list-hor .item{margin-bottom:var(--horizontal-item-margin-bottom-width, var(--default-horizontal-item-margin-bottom-width))}} .circle-icon-button{--txt-color: rgba(17, 17, 17, 0.4);--bg-color: #fff;--bg-focus-color: rgba(0, 0, 0, 0.07);--bg-active-color: rgba(0, 0, 0, 0.11)}body.dark_theme .circle-icon-button{--txt-color: rgba(255, 255, 255, 0.5);--bg-color: #272727;--bg-focus-color: rgba(255, 255, 255, 0.14);--bg-active-color: rgba(255, 255, 255, 0.34)}.circle-icon-button{color:var(--txt-color);background-color:var(--bg-color)}a.circle-icon-button:focus>*,button.circle-icon-button:focus>*{background-color:var(--bg-focus-color)}a.circle-icon-button:active>*,button.circle-icon-button:active>*{background-color:var(--bg-active-color)}.video-player .more-media a.circle-icon-button:focus>*,.video-player .more-media button.circle-icon-button:focus>*{background-color:rgba(0,0,0,.07)}.video-player .more-media a.circle-icon-button:active>*,.video-player .more-media button.circle-icon-button:active>*{background-color:rgba(0,0,0,.11)}.circle-icon-button{display:block;padding:0;width:40px;height:40px;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap;text-align:center;text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-tap-highlight-color:transparent;outline-width:0;border-width:0;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.circle-icon-button>*{display:table;width:100%;height:100%;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.circle-icon-button>*>*{display:table-cell;vertical-align:middle;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.circle-icon-button.button-shadow{-webkit-box-shadow:0 4px 4px rgba(0,0,0,.3),0 0 4px rgba(0,0,0,.2);-moz-box-shadow:0 4px 4px rgba(0,0,0,.3),0 0 4px rgba(0,0,0,.2);box-shadow:0 4px 4px rgba(0,0,0,.3),0 0 4px rgba(0,0,0,.2)}.circle-icon-button i{overflow:hidden} .material-icons{vertical-align:middle;margin:0;padding:0;font-size:1.5rem}.material-icons[data-icon]::after{display:block;content:attr(data-icon)} .nav-menu{padding:12px 0}.nav-menu.pv0{padding-top:0;padding-bottom:0}.nav-menu ul{padding:0;margin:0;list-style:none}.nav-menu li>*{width:100%;display:block;padding:0 1.5rem;outline:0;border:0;background:none}.nav-menu li>*>*{display:inline-block;vertical-align:middle}.nav-menu li.label-item button{font-weight:500;cursor:default}.nav-menu li.label-item button:hover,.nav-menu li.label-item button:focus{background-color:transparent}.nav-menu li .reported-label{padding:0 1rem;line-height:48px;font-size:13px;color:initial;color:red}.nav-menu li .reported-label:before{content:"";display:inline-block;vertical-align:middle;width:1rem;padding:0;margin:0 1.5rem 0 0;font-family:"Material Icons";font-size:24px}.nav-menu a,.nav-menu button{color:inherit}.nav-menu .menu-item-icon{margin-right:24px;color:#888}.nav-menu .menu-item-icon .material-icons{margin-bottom:2px}.nav-menu .menu-item-icon-right{float:right;margin-left:24px}.nav-menu li.link-item.active{background-color:var(--nav-menu-active-item-bg-color)}.nav-menu li a:hover,.nav-menu li a:focus,.nav-menu li button:hover,.nav-menu li button:focus{background-color:var(--nav-menu-item-hover-bg-color)}.popup .nav-menu li a:hover,.popup .nav-menu li a:focus,.popup .nav-menu li button:hover,.popup .nav-menu li button:focus{background-color:var(--in-popup-nav-menu-item-hover-bg-color)}.nav-menu li>*{text-align:initial;text-decoration:none}.nav-menu li>*>*{line-height:40px}.nav-menu li.link-item.active{font-weight:500}.nav-menu .menu-item-icon .material-icons{font-size:1.715em} .notifications{position:fixed;bottom:0;left:0;height:auto !important;max-width:100%;-webkit-box-pack:justify;-webkit-justify-content:space-between;-moz-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:14px;z-index:5}.notifications>*{position:relative}.notification-item{display:table;width:288px;max-width:100%;min-height:48px;margin:12px;color:#f1f1f1;background-color:#323232;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 2px 5px 0 rgba(0,0,0,.26);-moz-box-shadow:0 2px 5px 0 rgba(0,0,0,.26);box-shadow:0 2px 5px 0 rgba(0,0,0,.26);-webkit-transition:opacity 500ms linear;-o-transition:opacity 500ms linear;-moz-transition:opacity 500ms linear;transition:opacity 500ms linear}.notification-item>*{display:table-cell;vertical-align:middle;line-height:20px;padding:8px 24px;overflow:hidden}.notification-item.hidden{opacity:0} .popup{background-color:var(--popup-bg-color)}.popup hr{background-color:var(--popup-hr-bg-color)}.popup-top{color:var(--popup-top-text-color);background-color:var(--popup-top-bg-color)}.popup-top .circle-icon-button.menu-item-icon{color:inherit;background:none}.popup-message-title{color:var(--popup-msg-title-text-color)}.popup-message-main{color:var(--popup-msg-main-text-color)}.popup{z-index:4;display:block;width:300px;text-align:initial;cursor:default;-webkit-box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.4);-moz-box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.4);box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.4)}.popup hr{display:block;width:100%;height:1px;border:0;margin:0}.popup-top{padding:4px 4px}.popup-top>*{position:relative;display:table}.popup-top>*>*{display:table-cell;vertical-align:middle;min-width:44px}.popup-top .circle-icon-button.menu-item-icon{background:none}.popup-main{overflow:hidden}.popup-message{display:inline-block;width:100%}.popup-message-title{display:block;font-size:16px;margin-bottom:16px;margin-top:24px;padding:0 24px;line-height:20px}.popup-message-main{display:block;font-size:14px;margin-bottom:32px;margin-top:4px;padding:0 24px;line-height:21px}.popup-message-bottom{display:inline-block;width:100%;float:left;margin-bottom:16px;margin-top:16px;padding:0 24px}.popup-fullscreen{z-index:4;position:fixed;display:table;top:0;left:0;right:0;bottom:0;width:100%;height:100%;padding:24px 40px;padding-top:-webkit-calc(var(--header-height) + 24px);padding-top:-moz-calc(var(--header-height) + 24px);padding-top:calc(var(--header-height) + 24px);background:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.popup-fullscreen .popup-main{width:100%;height:100%;max-width:1840px;max-height:940px;margin:0 auto;display:table-cell;vertical-align:middle;text-align:center}.popup-fullscreen .popup-main .popup-fullscreen-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background-color:#000;opacity:.6} -.spinner-loader{position:relative;width:48px;height:48px}.spinner-loader.tiny{width:16px;height:16px}.spinner-loader.x-small{width:24px;height:24px}.spinner-loader.small{width:32px;height:32px}.spinner-loader.large{width:56px;height:56px}.spinner-loader.x-large{width:64px;height:64px}.spinner-loader:before{content:"";display:block;padding-top:100%}.spinner-loader svg{position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:100%;margin:auto;-webkit-transform-origin:center center;-moz-transform-origin:center center;-ms-transform-origin:center center;-o-transform-origin:center center;transform-origin:center center;-webkit-animation:rotate 2s linear infinite;-moz-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite}.spinner-loader circle{stroke:var(--spinner-loader-color);stroke-dasharray:1,200;stroke-dashoffset:0;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;-moz-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes rotate{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@-moz-keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}} +.spinner-loader{position:relative;width:48px;height:48px}.spinner-loader.tiny{width:16px;height:16px}.spinner-loader.x-small{width:24px;height:24px}.spinner-loader.small{width:32px;height:32px}.spinner-loader.large{width:56px;height:56px}.spinner-loader.x-large{width:64px;height:64px}.spinner-loader:before{content:"";display:block;padding-top:100%}.spinner-loader svg{position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:100%;margin:auto;-webkit-transform-origin:center center;-moz-transform-origin:center center;-ms-transform-origin:center center;-o-transform-origin:center center;transform-origin:center center;-webkit-animation:rotate 2s linear infinite;-moz-animation:rotate 2s linear infinite;-o-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite}.spinner-loader circle{stroke:var(--spinner-loader-color);stroke-dasharray:1,200;stroke-dashoffset:0;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;-moz-animation:dash 1.5s ease-in-out infinite;-o-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes rotate{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes rotate{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@-moz-keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@-o-keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}} .thumbnail,.thumbnail.circle-icon-button{background-color:var(--logged-in-user-thumb-bg-color)}a.thumbnail.circle-icon-button:focus,a.thumbnail.circle-icon-button:active,button.thumbnail.circle-icon-button:focus,button.thumbnail.circle-icon-button:active{background-color:var(--logged-in-user-thumb-bg-color)}.thumbnail,.thumbnail.circle-icon-button,.thumbnail img{width:40px;height:40px}.thumbnail.small-thumb,.thumbnail.small-thumb img,.thumbnail.circle-icon-button.small-thumb,.thumbnail.circle-icon-button.small-thumb img,.thumbnail img.small-thumb,.thumbnail img.small-thumb img{width:32px;height:32px}.thumbnail.large-thumb,.thumbnail.large-thumb img,.thumbnail.circle-icon-button.large-thumb,.thumbnail.circle-icon-button.large-thumb img,.thumbnail img.large-thumb,.thumbnail img.large-thumb img{width:48px;height:48px}.thumbnail.circle-icon-button .material-icons{font-size:1.5em}.thumbnail.circle-icon-button.small-thumb .material-icons{font-size:1.25em}.thumbnail.circle-icon-button.large-thumb .material-icons{font-size:2em}.thumbnail{margin:0 auto;-webkit-box-shadow:0 0 16px 0 rgba(0,0,0,.1);-moz-box-shadow:0 0 16px 0 rgba(0,0,0,.1);box-shadow:0 0 16px 0 rgba(0,0,0,.1)}.thumbnail img{vertical-align:inherit;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%} .search-field-wrap input[type=text],.search-field-wrap button[type=submit]{border-color:var(--search-field-input-border-color)}.search-field-wrap input[type=text]{color:var(--search-field-input-text-color);background-color:var(--search-field-input-bg-color)}.search-field-wrap button[type=submit]{color:var(--search-field-submit-text-color);background-color:var(--search-field-submit-bg-color);border-color:var(--search-field-submit-border-color)}.search-field-wrap button[type=submit]:hover,.search-field-wrap button[type=submit]:focus{background-color:var(--search-field-submit-bg-color);border-color:var(--search-field-submit-border-color)}.search-field-wrap{position:relative;display:table;width:480px;max-width:48%;max-width:40%;height:100%;margin:0 auto;text-align:center}.search-field-wrap>div{width:100%;display:table-cell;vertical-align:middle}.search-field-wrap form{position:relative;width:100%;text-align:right}.search-field-wrap .text-field-wrap{display:block;padding-right:64px}.search-field-wrap .text-field-wrap .popup{z-index:-1;position:absolute;top:100%;left:0;right:64px;width:auto;margin-top:12px;color:#222;border-width:0px 1px 1px;border-style:solid;border-color:#ccc;background-color:#fff;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2);-moz-box-shadow:0 2px 4px rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,.2)}.search-field-wrap input[type=text],.search-field-wrap button[type=submit]{border-style:solid}.search-field-wrap input[type=text]{width:100%;padding:0 10px;font-size:16.52px;border-width:1px;-webkit-border-radius:2px 0 0 2px;-moz-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.search-field-wrap button[type=submit]{position:absolute;top:0;bottom:0;right:0;width:64px;padding:0;border-width:1px 1px 1px 0;-webkit-border-radius:0 2px 2px 0;-moz-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.search-field-wrap button[type=submit] .material-icons{opacity:.6;margin-bottom:1px;overflow:hidden}.search-field-wrap button[type=submit]:hover,.search-field-wrap button[type=submit]:focus{outline:0}.search-field-wrap button[type=submit]:hover .material-icons,.search-field-wrap button[type=submit]:focus .material-icons{opacity:1}@media screen and (max-width: 1023px){.search-field-wrap{display:none}.mobile-search-field .search-field-wrap{position:absolute;right:0;top:0;right:16px;display:block;left:72px;margin:auto 0;width:auto;max-width:100%}.mobile-search-field .search-field-wrap>div{display:table;height:100%}.mobile-search-field .search-field-wrap form{display:table-cell;vertical-align:middle}.mobile-search-field .search-field-wrap form>div{position:relative}}@media screen and (max-width: 709px){.mobile-search-field .search-field-wrap{left:48px}}@media screen and (min-width: 1220px){.search-field-wrap{width:640px}}.search-field-wrap input[type=text],.search-field-wrap button[type=submit]{line-height:1.875}.search-field-wrap button[type=submit] .material-icons{font-size:22px;line-height:1}.search-predictions-list{position:relative;padding-top:16px;padding-bottom:8px;line-height:1.375;overflow:auto}.search-predictions-item{display:block;padding:4px 24px 4px 10px}.search-predictions-item b{font-weight:500}.search-predictions-item:hover,.search-predictions-item:focus{outline:0;background-color:#eee} .theme-switch{position:relative;display:table;width:100%;padding:0 1.5rem;margin:.75rem 0}.theme-switch:focus{outline:var(--dotted-outline)}.theme-switch>*{display:table-cell;vertical-align:middle;line-height:40px;cursor:pointer}.theme-switch>*:last-child{text-align:right}.theme-switch .checkbox-label.right-selectbox{margin:0}.theme-switch .checkbox-label.right-selectbox .selectbox{margin:0} diff --git a/static/css/add-media.css b/static/css/add-media.css index 0707399..ff31a30 100644 --- a/static/css/add-media.css +++ b/static/css/add-media.css @@ -1 +1 @@ -dialog{background-color:var(--add-media-page-tmplt-dialog-bg-color)}.media-uploader{background-color:var(--add-media-page-tmplt-uploader-bg-color)}.media-dropzone{background-color:var(--add-media-page-tmplt-dropzone-bg-color)}.media-drag-drop-content-inner{color:var(--add-media-page-tmplt-drag-drop-inner-text-color)}.media-upload-item-spinner i{color:var(--add-media-page-tmplt-upload-item-spiner-text-color)}.media-upload-item-top-actions>*,.media-upload-item-bottom-actions>*{color:var(--add-media-page-tmplt-upload-item-actions-text-color)}.media-upload-item-upload-size{color:var(--add-media-page-tmplt-upload-item-actions-text-color)}.media-drag-drop-inner,.media-upload-item-thumb,.media-upload-item-spinner,.media-upload-item-name .media-upload-item-filename-input,.media-upload-item-bottom-actions>*,.retry-media-upload-item,.media-upload-item-progress-bar-container{background-color:var(--sidebar-bg-color)}@-moz-keyframes spin{from{-moz-transform:rotate(0deg)}to{-moz-transform:rotate(360deg)}}@-webkit-keyframes spin{from{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes spin{from{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.media-uploader-wrap{position:relative;width:100%;max-width:1324px;padding:8px 8px;margin:0 auto 1em auto}.pre-upload-msg{display:block;margin:16px 0;font-size:14px;font-weight:400;text-align:center}.media-uploader{position:relative;display:block;padding:.75rem;width:100%}.media-uploader:after{content:"";position:absolute;bottom:-5px;right:0;width:100%;height:5px;left:0;opacity:1;pointer-events:none;-webkit-box-shadow:inset 0px 4px 8px -3px rgba(17,17,17,.06);-moz-box-shadow:inset 0px 4px 8px -3px rgba(17,17,17,.06);box-shadow:inset 0px 4px 8px -3px rgba(17,17,17,.06)}.media-uploader-top-wrap{position:relative;padding:0 0 1.5em}.media-uploader-top-wrap h1{display:block;font-size:16px;font-weight:500;line-height:1.25em;margin:0;white-space:pre-wrap;overflow-wrap:break-word}.media-uploader-bottom-wrap{position:relative;display:inline-block;width:100%}.media-uploader-top-left-wrap,.media-uploader-top-right-wrap{position:relative;width:50%}.media-uploader-bottom-left-wrap,.media-uploader-bottom-right-wrap{position:relative;display:inline-block;vertical-align:top;width:100%}.media-uploader-bottom-left-wrap{min-height:225px;height:0;padding-top:75%}@media screen and (min-width: 480px){.media-uploader-bottom-left-wrap{padding-top:62.5%}}@media screen and (min-width: 768px){.media-uploader-bottom-left-wrap{padding-top:56.25%}}@media screen and (min-width: 1024px){.media-uploader-bottom-left-wrap{position:absolute;top:0;left:0;width:40%;height:100%;padding:0}}.media-uploader-bottom-right-wrap{float:right}@media screen and (min-width: 1024px){.media-uploader-bottom-right-wrap{width:60%}}dialog{padding:32px 24px 16px;border:0;-webkit-box-shadow:rgba(0,0,0,.14) 0px 16px 24px 2px,rgba(0,0,0,.12) 0px 6px 30px 5px,rgba(0,0,0,.4) 0px 8px 10px -5px;-moz-box-shadow:rgba(0,0,0,.14) 0px 16px 24px 2px,rgba(0,0,0,.12) 0px 6px 30px 5px,rgba(0,0,0,.4) 0px 8px 10px -5px;box-shadow:rgba(0,0,0,.14) 0px 16px 24px 2px,rgba(0,0,0,.12) 0px 6px 30px 5px,rgba(0,0,0,.4) 0px 8px 10px -5px;display:none}dialog[open]{display:block}dialog::-webkit-backdrop{background-color:rgba(0,0,0,.5)}dialog::backdrop{background-color:rgba(0,0,0,.5)}dialog .qq-dialog-buttons{padding-top:16px;text-align:center}dialog .qq-dialog-buttons button{font-size:14px;font-stretch:100%;font-weight:500;line-height:20px;letter-spacing:.007px;text-align:center;padding:10px 16px;margin:0;border:0;background:none;text-transform:uppercase}dialog .qq-dialog-message-selector{padding-bottom:16px}.media-drag-drop-wrap{position:absolute;top:0;left:0;width:100%;height:100%;padding-top:.75rem;padding-left:.75rem;padding-right:.75rem;padding-bottom:.75rem}@media screen and (min-width: 1024px){.media-drag-drop-wrap{position:relative;padding-right:0}}.media-drag-drop-inner{height:100%;display:block}.media-drag-drop-content{display:table;width:100%;height:100%}.media-drag-drop-content-inner{position:relative;display:table-cell;text-align:center;vertical-align:middle;padding-bottom:1rem;font-family:Arial,sans-serif}.media-drag-drop-content-inner span{display:block}.media-drag-drop-content-inner span:nth-child(2){margin-top:.25rem;margin-bottom:.25rem}.media-drag-drop-content-inner .material-icons{padding:0;margin:0;font-size:4em;line-height:1;opacity:.5}.media-drag-drop-content-inner .browse-files-btn-wrap{margin-top:.75rem;font-size:14px}.media-drag-drop-content-inner .browse-files-btn-wrap span{display:inline-block;padding:.75rem 1rem;color:#fff;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.media-dropzone{position:absolute;top:0;left:0;right:0;bottom:0;display:block}.media-upload-items-list{position:relative;display:block;margin:0 .75rem .75rem .75rem;padding:0;overflow:auto;max-height:80vh;list-style:none}@media screen and (min-width: 1024px){.media-upload-items-list{min-height:320px}}.media-upload-items-list li{position:relative;float:left;width:100%;padding:.75rem 0 0;margin:0 0 1.5rem}@media screen and (min-width: 1024px){.media-upload-items-list li{padding:.75rem .75rem 0}}.media-upload-items-list li:before{content:"";position:absolute;top:-0.375rem;left:0;right:0;display:block;height:1px;background-color:rgba(17,17,17,.06)}@media screen and (min-width: 1024px){.media-upload-items-list li:before{left:.75rem;right:.75rem}}.media-upload-items-list li:first-child:before{display:none}.media-upload-items-list li:last-child{margin-bottom:0}.media-upload-item-thumb{position:absolute;top:0;left:0;display:inline-block;width:80px;height:80px;overflow:hidden;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}@media screen and (min-width: 480px){.media-upload-item-thumb{width:100px;height:100px}}.media-upload-item-thumb img{height:100%;min-width:100%;width:auto}.qq-upload-fail .media-upload-item-thumb img{display:none}.media-upload-item-spinner{position:absolute;top:0;left:0;display:block;width:80px;height:80px;line-height:78px;text-align:center}@media screen and (min-width: 480px){.media-upload-item-spinner{width:100px;height:100px;line-height:98px}}.media-upload-item-spinner i{padding:0;line-height:1;font-size:1.5em;-webkit-animation-name:spin;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-timing-function:linear;-moz-animation-name:spin;-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-timing-function:linear;-ms-animation-name:spin;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-timing-function:linear;animation-name:spin;animation-duration:2s;animation-iteration-count:infinite;animation-timing-function:linear}.media-upload-item-details{position:relative;display:block;min-height:80px;margin:0 auto 0 96px}@media screen and (min-width: 480px){.media-upload-item-details{min-height:100px;margin:0 auto 0 116px}}.media-upload-item-name{position:relative;font-size:14px;line-height:20px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;max-height:40px;display:block;padding-right:.75rem;margin-bottom:.5rem;margin-right:8rem;font-weight:500}.media-upload-item-name.qq-editable{margin-right:10rem}.media-upload-item-name>span{line-height:20px;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;background-color:transparent;display:block;max-height:40px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal}.media-upload-item-name .media-upload-item-filename-input{width:100%;height:30px;line-height:30px;padding:0 .5rem;display:none}.media-upload-item-name .media-upload-item-filename-input.qq-editing{display:inline-block}.view-uploaded-media-link{font-weight:500}.media-upload-item-top-actions>*,.media-upload-item-bottom-actions>*{margin:0;border:0;background:none;text-decoration:none}.media-upload-item-top-actions .material-icons,.media-upload-item-bottom-actions .material-icons{padding:0;display:inline-block}.media-upload-item-top-actions{position:absolute;top:0;right:0}.media-upload-item-top-actions>*{padding:.125rem .25rem;font-size:13px}.media-upload-item-top-actions>*:not(.qq-hide)~*{margin-left:.25rem}.media-upload-item-top-actions>*:last-child{padding-right:0}.media-upload-item-top-actions>* .material-icons{font-size:15px;line-height:1em;vertical-align:middle;vertical-align:text-bottom}.media-upload-item-top-actions .filename-edit{display:none}.media-upload-item-top-actions .filename-edit.qq-editable{display:block}.media-upload-item-bottom-actions{position:relative;width:100%;float:left}.media-upload-item-bottom-actions>*{float:left;line-height:2;padding:0 .5rem 0 .25rem;margin-top:.5rem;font-family:Arial,sans-serif;font-size:13px;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.media-upload-item-bottom-actions>*:not(.qq-hide)~*{margin-left:.5rem}.media-upload-item-bottom-actions>*:hover{color:#fff}.media-upload-item-bottom-actions>* .material-icons{font-size:20px;vertical-align:middle}.retry-media-upload-item{position:absolute;top:50%;left:50%;width:4rem;line-height:1.75rem;margin-top:-0.875rem;margin-left:-2rem;padding:0 .25rem 0 0;font-family:Arial,sans-serif;font-size:12px;font-weight:bold;border:0;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.retry-media-upload-item:hover{color:#fff}.retry-media-upload-item .material-icons{font-size:20px;vertical-align:middle}.media-upload-item-main{position:relative;width:100%;float:left}.media-upload-item-progress-bar-container{position:relative;width:100%;display:inline-block;margin-bottom:.5rem;overflow:hidden;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.media-upload-item-progress-bar-container .media-upload-item-progress-bar{position:relative;height:.5rem}.media-upload-item-details-bottom{position:relative;width:100%;float:left;padding-bottom:.25rem}.media-upload-item-upload-size{position:relative;width:auto;float:left;font-size:12px;font-family:Arial,sans-serif}.media-upload-item-status-text{position:relative;width:auto;float:right;font-size:12px;font-weight:500;font-family:Arial,sans-serif}.qq-upload-fail .media-upload-item-status-text{font-weight:bold}.qq-hide{display:none} +dialog{background-color:var(--add-media-page-tmplt-dialog-bg-color)}.media-uploader{background-color:var(--add-media-page-tmplt-uploader-bg-color)}.media-dropzone{background-color:var(--add-media-page-tmplt-dropzone-bg-color)}.media-drag-drop-content-inner{color:var(--add-media-page-tmplt-drag-drop-inner-text-color)}.media-upload-item-spinner i{color:var(--add-media-page-tmplt-upload-item-spiner-text-color)}.media-upload-item-top-actions>*,.media-upload-item-bottom-actions>*{color:var(--add-media-page-tmplt-upload-item-actions-text-color)}.media-upload-item-upload-size{color:var(--add-media-page-tmplt-upload-item-actions-text-color)}.media-drag-drop-inner,.media-upload-item-thumb,.media-upload-item-spinner,.media-upload-item-name .media-upload-item-filename-input,.media-upload-item-bottom-actions>*,.retry-media-upload-item,.media-upload-item-progress-bar-container{background-color:var(--sidebar-bg-color)}@-moz-keyframes spin{from{-moz-transform:rotate(0deg)}to{-moz-transform:rotate(360deg)}}@-webkit-keyframes spin{from{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@-o-keyframes spin{from{-o-transform:rotate(0deg);transform:rotate(0deg)}to{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spin{from{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.media-uploader-wrap{position:relative;width:100%;max-width:1324px;padding:8px 8px;margin:0 auto 1em auto}.pre-upload-msg{display:block;margin:16px 0;font-size:14px;font-weight:400;text-align:center}.media-uploader{position:relative;display:block;padding:.75rem;width:100%}.media-uploader:after{content:"";position:absolute;bottom:-5px;right:0;width:100%;height:5px;left:0;opacity:1;pointer-events:none;-webkit-box-shadow:inset 0px 4px 8px -3px rgba(17,17,17,.06);-moz-box-shadow:inset 0px 4px 8px -3px rgba(17,17,17,.06);box-shadow:inset 0px 4px 8px -3px rgba(17,17,17,.06)}.media-uploader-top-wrap{position:relative;padding:0 0 1.5em}.media-uploader-top-wrap h1{display:block;font-size:16px;font-weight:500;line-height:1.25em;margin:0;white-space:pre-wrap;overflow-wrap:break-word}.media-uploader-bottom-wrap{position:relative;display:inline-block;width:100%}.media-uploader-top-left-wrap,.media-uploader-top-right-wrap{position:relative;width:50%}.media-uploader-bottom-left-wrap,.media-uploader-bottom-right-wrap{position:relative;display:inline-block;vertical-align:top;width:100%}.media-uploader-bottom-left-wrap{min-height:225px;height:0;padding-top:75%}@media screen and (min-width: 480px){.media-uploader-bottom-left-wrap{padding-top:62.5%}}@media screen and (min-width: 768px){.media-uploader-bottom-left-wrap{padding-top:56.25%}}@media screen and (min-width: 1024px){.media-uploader-bottom-left-wrap{position:absolute;top:0;left:0;width:40%;height:100%;padding:0}}.media-uploader-bottom-right-wrap{float:right}@media screen and (min-width: 1024px){.media-uploader-bottom-right-wrap{width:60%}}dialog{padding:32px 24px 16px;border:0;-webkit-box-shadow:rgba(0,0,0,.14) 0px 16px 24px 2px,rgba(0,0,0,.12) 0px 6px 30px 5px,rgba(0,0,0,.4) 0px 8px 10px -5px;-moz-box-shadow:rgba(0,0,0,.14) 0px 16px 24px 2px,rgba(0,0,0,.12) 0px 6px 30px 5px,rgba(0,0,0,.4) 0px 8px 10px -5px;box-shadow:rgba(0,0,0,.14) 0px 16px 24px 2px,rgba(0,0,0,.12) 0px 6px 30px 5px,rgba(0,0,0,.4) 0px 8px 10px -5px;display:none}dialog[open]{display:block}dialog::-webkit-backdrop{background-color:rgba(0,0,0,.5)}dialog::backdrop{background-color:rgba(0,0,0,.5)}dialog .qq-dialog-buttons{padding-top:16px;text-align:center}dialog .qq-dialog-buttons button{font-size:14px;font-stretch:100%;font-weight:500;line-height:20px;letter-spacing:.007px;text-align:center;padding:10px 16px;margin:0;border:0;background:none;text-transform:uppercase}dialog .qq-dialog-message-selector{padding-bottom:16px}.media-drag-drop-wrap{position:absolute;top:0;left:0;width:100%;height:100%;padding-top:.75rem;padding-left:.75rem;padding-right:.75rem;padding-bottom:.75rem}@media screen and (min-width: 1024px){.media-drag-drop-wrap{position:relative;padding-right:0}}.media-drag-drop-inner{height:100%;display:block}.media-drag-drop-content{display:table;width:100%;height:100%}.media-drag-drop-content-inner{position:relative;display:table-cell;text-align:center;vertical-align:middle;padding-bottom:1rem;font-family:Arial,sans-serif}.media-drag-drop-content-inner span{display:block}.media-drag-drop-content-inner span:nth-child(2){margin-top:.25rem;margin-bottom:.25rem}.media-drag-drop-content-inner .material-icons{padding:0;margin:0;font-size:4em;line-height:1;opacity:.5}.media-drag-drop-content-inner .browse-files-btn-wrap{margin-top:.75rem;font-size:14px}.media-drag-drop-content-inner .browse-files-btn-wrap span{display:inline-block;padding:.75rem 1rem;color:#fff;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.media-dropzone{position:absolute;top:0;left:0;right:0;bottom:0;display:block}.media-upload-items-list{position:relative;display:block;margin:0 .75rem .75rem .75rem;padding:0;overflow:auto;max-height:80vh;list-style:none}@media screen and (min-width: 1024px){.media-upload-items-list{min-height:320px}}.media-upload-items-list li{position:relative;float:left;width:100%;padding:.75rem 0 0;margin:0 0 1.5rem}@media screen and (min-width: 1024px){.media-upload-items-list li{padding:.75rem .75rem 0}}.media-upload-items-list li:before{content:"";position:absolute;top:-0.375rem;left:0;right:0;display:block;height:1px;background-color:rgba(17,17,17,.06)}@media screen and (min-width: 1024px){.media-upload-items-list li:before{left:.75rem;right:.75rem}}.media-upload-items-list li:first-child:before{display:none}.media-upload-items-list li:last-child{margin-bottom:0}.media-upload-item-thumb{position:absolute;top:0;left:0;display:inline-block;width:80px;height:80px;overflow:hidden;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}@media screen and (min-width: 480px){.media-upload-item-thumb{width:100px;height:100px}}.media-upload-item-thumb img{height:100%;min-width:100%;width:auto}.qq-upload-fail .media-upload-item-thumb img{display:none}.media-upload-item-spinner{position:absolute;top:0;left:0;display:block;width:80px;height:80px;line-height:78px;text-align:center}@media screen and (min-width: 480px){.media-upload-item-spinner{width:100px;height:100px;line-height:98px}}.media-upload-item-spinner i{padding:0;line-height:1;font-size:1.5em;-webkit-animation-name:spin;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-timing-function:linear;-moz-animation-name:spin;-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-timing-function:linear;-ms-animation-name:spin;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-timing-function:linear;-o-animation-name:spin;animation-name:spin;-o-animation-duration:2s;animation-duration:2s;-o-animation-iteration-count:infinite;animation-iteration-count:infinite;-o-animation-timing-function:linear;animation-timing-function:linear}.media-upload-item-details{position:relative;display:block;min-height:80px;margin:0 auto 0 96px}@media screen and (min-width: 480px){.media-upload-item-details{min-height:100px;margin:0 auto 0 116px}}.media-upload-item-name{position:relative;font-size:14px;line-height:20px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;max-height:40px;display:block;padding-right:.75rem;margin-bottom:.5rem;margin-right:8rem;font-weight:500}.media-upload-item-name.qq-editable{margin-right:10rem}.media-upload-item-name>span{line-height:20px;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;background-color:transparent;display:block;max-height:40px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal}.media-upload-item-name .media-upload-item-filename-input{width:100%;height:30px;line-height:30px;padding:0 .5rem;display:none}.media-upload-item-name .media-upload-item-filename-input.qq-editing{display:inline-block}.view-uploaded-media-link{font-weight:500}.media-upload-item-top-actions>*,.media-upload-item-bottom-actions>*{margin:0;border:0;background:none;text-decoration:none}.media-upload-item-top-actions .material-icons,.media-upload-item-bottom-actions .material-icons{padding:0;display:inline-block}.media-upload-item-top-actions{position:absolute;top:0;right:0}.media-upload-item-top-actions>*{padding:.125rem .25rem;font-size:13px}.media-upload-item-top-actions>*:not(.qq-hide)~*{margin-left:.25rem}.media-upload-item-top-actions>*:last-child{padding-right:0}.media-upload-item-top-actions>* .material-icons{font-size:15px;line-height:1em;vertical-align:middle;vertical-align:text-bottom}.media-upload-item-top-actions .filename-edit{display:none}.media-upload-item-top-actions .filename-edit.qq-editable{display:block}.media-upload-item-bottom-actions{position:relative;width:100%;float:left}.media-upload-item-bottom-actions>*{float:left;line-height:2;padding:0 .5rem 0 .25rem;margin-top:.5rem;font-family:Arial,sans-serif;font-size:13px;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.media-upload-item-bottom-actions>*:not(.qq-hide)~*{margin-left:.5rem}.media-upload-item-bottom-actions>*:hover{color:#fff}.media-upload-item-bottom-actions>* .material-icons{font-size:20px;vertical-align:middle}.retry-media-upload-item{position:absolute;top:50%;left:50%;width:4rem;line-height:1.75rem;margin-top:-0.875rem;margin-left:-2rem;padding:0 .25rem 0 0;font-family:Arial,sans-serif;font-size:12px;font-weight:bold;border:0;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.retry-media-upload-item:hover{color:#fff}.retry-media-upload-item .material-icons{font-size:20px;vertical-align:middle}.media-upload-item-main{position:relative;width:100%;float:left}.media-upload-item-progress-bar-container{position:relative;width:100%;display:inline-block;margin-bottom:.5rem;overflow:hidden;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.media-upload-item-progress-bar-container .media-upload-item-progress-bar{position:relative;height:.5rem}.media-upload-item-details-bottom{position:relative;width:100%;float:left;padding-bottom:.25rem}.media-upload-item-upload-size{position:relative;width:auto;float:left;font-size:12px;font-family:Arial,sans-serif}.media-upload-item-status-text{position:relative;width:auto;float:right;font-size:12px;font-weight:500;font-family:Arial,sans-serif}.qq-upload-fail .media-upload-item-status-text{font-weight:bold}.qq-hide{display:none} diff --git a/static/lib/video-js/8.2.0/video.cjs.js b/static/lib/video-js/8.2.0/video.cjs.js index 39858e6..3ca2da0 100644 --- a/static/lib/video-js/8.2.0/video.cjs.js +++ b/static/lib/video-js/8.2.0/video.cjs.js @@ -1,49953 +1,2 @@ -/** - * @license - * Video.js 8.2.0 - * Copyright Brightcove, Inc. - * Available under Apache License Version 2.0 - * - * - * Includes vtt.js - * Available under Apache License Version 2.0 - * - */ - -'use strict'; - -var window$1 = require('global/window'); -var document = require('global/document'); -var keycode = require('keycode'); -var safeParseTuple = require('safe-json-parse/tuple'); -var XHR = require('@videojs/xhr'); -var vtt = require('videojs-vtt.js'); -var _resolveUrl = require('@videojs/vhs-utils/cjs/resolve-url.js'); -var _extends = require('@babel/runtime/helpers/extends'); -var m3u8Parser = require('m3u8-parser'); -var codecs_js = require('@videojs/vhs-utils/cjs/codecs.js'); -var mediaTypes_js = require('@videojs/vhs-utils/cjs/media-types.js'); -var byteHelpers = require('@videojs/vhs-utils/cjs/byte-helpers'); -var mpdParser = require('mpd-parser'); -var parseSidx = require('mux.js/lib/tools/parse-sidx'); -var id3Helpers = require('@videojs/vhs-utils/cjs/id3-helpers'); -var containers = require('@videojs/vhs-utils/cjs/containers'); -var clock = require('mux.js/lib/utils/clock'); - -function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } - -var window__default = /*#__PURE__*/_interopDefaultLegacy(window$1); -var document__default = /*#__PURE__*/_interopDefaultLegacy(document); -var keycode__default = /*#__PURE__*/_interopDefaultLegacy(keycode); -var safeParseTuple__default = /*#__PURE__*/_interopDefaultLegacy(safeParseTuple); -var XHR__default = /*#__PURE__*/_interopDefaultLegacy(XHR); -var vtt__default = /*#__PURE__*/_interopDefaultLegacy(vtt); -var _resolveUrl__default = /*#__PURE__*/_interopDefaultLegacy(_resolveUrl); -var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends); -var parseSidx__default = /*#__PURE__*/_interopDefaultLegacy(parseSidx); - -var version$6 = "8.2.0"; - -/** - * An Object that contains lifecycle hooks as keys which point to an array - * of functions that are run when a lifecycle is triggered - * - * @private - */ -const hooks_ = {}; - -/** - * Get a list of hooks for a specific lifecycle - * - * @param {string} type - * the lifecyle to get hooks from - * - * @param {Function|Function[]} [fn] - * Optionally add a hook (or hooks) to the lifecycle that your are getting. - * - * @return {Array} - * an array of hooks, or an empty array if there are none. - */ -const hooks = function (type, fn) { - hooks_[type] = hooks_[type] || []; - if (fn) { - hooks_[type] = hooks_[type].concat(fn); - } - return hooks_[type]; -}; - -/** - * Add a function hook to a specific videojs lifecycle. - * - * @param {string} type - * the lifecycle to hook the function to. - * - * @param {Function|Function[]} - * The function or array of functions to attach. - */ -const hook = function (type, fn) { - hooks(type, fn); -}; - -/** - * Remove a hook from a specific videojs lifecycle. - * - * @param {string} type - * the lifecycle that the function hooked to - * - * @param {Function} fn - * The hooked function to remove - * - * @return {boolean} - * The function that was removed or undef - */ -const removeHook = function (type, fn) { - const index = hooks(type).indexOf(fn); - if (index <= -1) { - return false; - } - hooks_[type] = hooks_[type].slice(); - hooks_[type].splice(index, 1); - return true; -}; - -/** - * Add a function hook that will only run once to a specific videojs lifecycle. - * - * @param {string} type - * the lifecycle to hook the function to. - * - * @param {Function|Function[]} - * The function or array of functions to attach. - */ -const hookOnce = function (type, fn) { - hooks(type, [].concat(fn).map(original => { - const wrapper = (...args) => { - removeHook(type, wrapper); - return original(...args); - }; - return wrapper; - })); -}; - -/** - * @file fullscreen-api.js - * @module fullscreen-api - */ - -/** - * Store the browser-specific methods for the fullscreen API. - * - * @type {Object} - * @see [Specification]{@link https://fullscreen.spec.whatwg.org} - * @see [Map Approach From Screenfull.js]{@link https://github.com/sindresorhus/screenfull.js} - */ -const FullscreenApi = { - prefixed: true -}; - -// browser API methods -const apiMap = [['requestFullscreen', 'exitFullscreen', 'fullscreenElement', 'fullscreenEnabled', 'fullscreenchange', 'fullscreenerror', 'fullscreen'], -// WebKit -['webkitRequestFullscreen', 'webkitExitFullscreen', 'webkitFullscreenElement', 'webkitFullscreenEnabled', 'webkitfullscreenchange', 'webkitfullscreenerror', '-webkit-full-screen'], -// Mozilla -['mozRequestFullScreen', 'mozCancelFullScreen', 'mozFullScreenElement', 'mozFullScreenEnabled', 'mozfullscreenchange', 'mozfullscreenerror', '-moz-full-screen'], -// Microsoft -['msRequestFullscreen', 'msExitFullscreen', 'msFullscreenElement', 'msFullscreenEnabled', 'MSFullscreenChange', 'MSFullscreenError', '-ms-fullscreen']]; -const specApi = apiMap[0]; -let browserApi; - -// determine the supported set of functions -for (let i = 0; i < apiMap.length; i++) { - // check for exitFullscreen function - if (apiMap[i][1] in document__default["default"]) { - browserApi = apiMap[i]; - break; - } -} - -// map the browser API names to the spec API names -if (browserApi) { - for (let i = 0; i < browserApi.length; i++) { - FullscreenApi[specApi[i]] = browserApi[i]; - } - FullscreenApi.prefixed = browserApi[0] !== specApi[0]; -} - -/** - * @file create-logger.js - * @module create-logger - */ - -// This is the private tracking variable for the logging history. -let history = []; - -/** - * Log messages to the console and history based on the type of message - * - * @private - * @param {string} type - * The name of the console method to use. - * - * @param {Array} args - * The arguments to be passed to the matching console method. - */ -const LogByTypeFactory = (name, log) => (type, level, args) => { - const lvl = log.levels[level]; - const lvlRegExp = new RegExp(`^(${lvl})$`); - if (type !== 'log') { - // Add the type to the front of the message when it's not "log". - args.unshift(type.toUpperCase() + ':'); - } - - // Add console prefix after adding to history. - args.unshift(name + ':'); - - // Add a clone of the args at this point to history. - if (history) { - history.push([].concat(args)); - - // only store 1000 history entries - const splice = history.length - 1000; - history.splice(0, splice > 0 ? splice : 0); - } - - // If there's no console then don't try to output messages, but they will - // still be stored in history. - if (!window__default["default"].console) { - return; - } - - // Was setting these once outside of this function, but containing them - // in the function makes it easier to test cases where console doesn't exist - // when the module is executed. - let fn = window__default["default"].console[type]; - if (!fn && type === 'debug') { - // Certain browsers don't have support for console.debug. For those, we - // should default to the closest comparable log. - fn = window__default["default"].console.info || window__default["default"].console.log; - } - - // Bail out if there's no console or if this type is not allowed by the - // current logging level. - if (!fn || !lvl || !lvlRegExp.test(type)) { - return; - } - fn[Array.isArray(args) ? 'apply' : 'call'](window__default["default"].console, args); -}; -function createLogger$1(name) { - // This is the private tracking variable for logging level. - let level = 'info'; - - // the curried logByType bound to the specific log and history - let logByType; - - /** - * Logs plain debug messages. Similar to `console.log`. - * - * Due to [limitations](https://github.com/jsdoc3/jsdoc/issues/955#issuecomment-313829149) - * of our JSDoc template, we cannot properly document this as both a function - * and a namespace, so its function signature is documented here. - * - * #### Arguments - * ##### *args - * *[] - * - * Any combination of values that could be passed to `console.log()`. - * - * #### Return Value - * - * `undefined` - * - * @namespace - * @param {(*|*[])} args - * One or more messages or objects that should be logged. - */ - const log = function (...args) { - logByType('log', level, args); - }; - - // This is the logByType helper that the logging methods below use - logByType = LogByTypeFactory(name, log); - - /** - * Create a new sublogger which chains the old name to the new name. - * - * For example, doing `videojs.log.createLogger('player')` and then using that logger will log the following: - * ```js - * mylogger('foo'); - * // > VIDEOJS: player: foo - * ``` - * - * @param {string} name - * The name to add call the new logger - * @return {Object} - */ - log.createLogger = subname => createLogger$1(name + ': ' + subname); - - /** - * Enumeration of available logging levels, where the keys are the level names - * and the values are `|`-separated strings containing logging methods allowed - * in that logging level. These strings are used to create a regular expression - * matching the function name being called. - * - * Levels provided by Video.js are: - * - * - `off`: Matches no calls. Any value that can be cast to `false` will have - * this effect. The most restrictive. - * - `all`: Matches only Video.js-provided functions (`debug`, `log`, - * `log.warn`, and `log.error`). - * - `debug`: Matches `log.debug`, `log`, `log.warn`, and `log.error` calls. - * - `info` (default): Matches `log`, `log.warn`, and `log.error` calls. - * - `warn`: Matches `log.warn` and `log.error` calls. - * - `error`: Matches only `log.error` calls. - * - * @type {Object} - */ - log.levels = { - all: 'debug|log|warn|error', - off: '', - debug: 'debug|log|warn|error', - info: 'log|warn|error', - warn: 'warn|error', - error: 'error', - DEFAULT: level - }; - - /** - * Get or set the current logging level. - * - * If a string matching a key from {@link module:log.levels} is provided, acts - * as a setter. - * - * @param {string} [lvl] - * Pass a valid level to set a new logging level. - * - * @return {string} - * The current logging level. - */ - log.level = lvl => { - if (typeof lvl === 'string') { - if (!log.levels.hasOwnProperty(lvl)) { - throw new Error(`"${lvl}" in not a valid log level`); - } - level = lvl; - } - return level; - }; - - /** - * Returns an array containing everything that has been logged to the history. - * - * This array is a shallow clone of the internal history record. However, its - * contents are _not_ cloned; so, mutating objects inside this array will - * mutate them in history. - * - * @return {Array} - */ - log.history = () => history ? [].concat(history) : []; - - /** - * Allows you to filter the history by the given logger name - * - * @param {string} fname - * The name to filter by - * - * @return {Array} - * The filtered list to return - */ - log.history.filter = fname => { - return (history || []).filter(historyItem => { - // if the first item in each historyItem includes `fname`, then it's a match - return new RegExp(`.*${fname}.*`).test(historyItem[0]); - }); - }; - - /** - * Clears the internal history tracking, but does not prevent further history - * tracking. - */ - log.history.clear = () => { - if (history) { - history.length = 0; - } - }; - - /** - * Disable history tracking if it is currently enabled. - */ - log.history.disable = () => { - if (history !== null) { - history.length = 0; - history = null; - } - }; - - /** - * Enable history tracking if it is currently disabled. - */ - log.history.enable = () => { - if (history === null) { - history = []; - } - }; - - /** - * Logs error messages. Similar to `console.error`. - * - * @param {(*|*[])} args - * One or more messages or objects that should be logged as an error - */ - log.error = (...args) => logByType('error', level, args); - - /** - * Logs warning messages. Similar to `console.warn`. - * - * @param {(*|*[])} args - * One or more messages or objects that should be logged as a warning. - */ - log.warn = (...args) => logByType('warn', level, args); - - /** - * Logs debug messages. Similar to `console.debug`, but may also act as a comparable - * log if `console.debug` is not available - * - * @param {(*|*[])} args - * One or more messages or objects that should be logged as debug. - */ - log.debug = (...args) => logByType('debug', level, args); - return log; -} - -/** - * @file log.js - * @module log - */ -const log$1 = createLogger$1('VIDEOJS'); -const createLogger = log$1.createLogger; - -/** - * @file obj.js - * @module obj - */ - -/** - * @callback obj:EachCallback - * - * @param {*} value - * The current key for the object that is being iterated over. - * - * @param {string} key - * The current key-value for object that is being iterated over - */ - -/** - * @callback obj:ReduceCallback - * - * @param {*} accum - * The value that is accumulating over the reduce loop. - * - * @param {*} value - * The current key for the object that is being iterated over. - * - * @param {string} key - * The current key-value for object that is being iterated over - * - * @return {*} - * The new accumulated value. - */ -const toString = Object.prototype.toString; - -/** - * Get the keys of an Object - * - * @param {Object} - * The Object to get the keys from - * - * @return {string[]} - * An array of the keys from the object. Returns an empty array if the - * object passed in was invalid or had no keys. - * - * @private - */ -const keys = function (object) { - return isObject(object) ? Object.keys(object) : []; -}; - -/** - * Array-like iteration for objects. - * - * @param {Object} object - * The object to iterate over - * - * @param {obj:EachCallback} fn - * The callback function which is called for each key in the object. - */ -function each(object, fn) { - keys(object).forEach(key => fn(object[key], key)); -} - -/** - * Array-like reduce for objects. - * - * @param {Object} object - * The Object that you want to reduce. - * - * @param {Function} fn - * A callback function which is called for each key in the object. It - * receives the accumulated value and the per-iteration value and key - * as arguments. - * - * @param {*} [initial = 0] - * Starting value - * - * @return {*} - * The final accumulated value. - */ -function reduce(object, fn, initial = 0) { - return keys(object).reduce((accum, key) => fn(accum, object[key], key), initial); -} - -/** - * Returns whether a value is an object of any kind - including DOM nodes, - * arrays, regular expressions, etc. Not functions, though. - * - * This avoids the gotcha where using `typeof` on a `null` value - * results in `'object'`. - * - * @param {Object} value - * @return {boolean} - */ -function isObject(value) { - return !!value && typeof value === 'object'; -} - -/** - * Returns whether an object appears to be a "plain" object - that is, a - * direct instance of `Object`. - * - * @param {Object} value - * @return {boolean} - */ -function isPlain(value) { - return isObject(value) && toString.call(value) === '[object Object]' && value.constructor === Object; -} - -/** - * Merge two objects recursively. - * - * Performs a deep merge like - * {@link https://lodash.com/docs/4.17.10#merge|lodash.merge}, but only merges - * plain objects (not arrays, elements, or anything else). - * - * Non-plain object values will be copied directly from the right-most - * argument. - * - * @param {Object[]} sources - * One or more objects to merge into a new object. - * - * @return {Object} - * A new object that is the merged result of all sources. - */ -function merge$1(...sources) { - const result = {}; - sources.forEach(source => { - if (!source) { - return; - } - each(source, (value, key) => { - if (!isPlain(value)) { - result[key] = value; - return; - } - if (!isPlain(result[key])) { - result[key] = {}; - } - result[key] = merge$1(result[key], value); - }); - }); - return result; -} - -/** - * Object.defineProperty but "lazy", which means that the value is only set after - * it is retrieved the first time, rather than being set right away. - * - * @param {Object} obj the object to set the property on - * @param {string} key the key for the property to set - * @param {Function} getValue the function used to get the value when it is needed. - * @param {boolean} setter whether a setter should be allowed or not - */ -function defineLazyProperty(obj, key, getValue, setter = true) { - const set = value => Object.defineProperty(obj, key, { - value, - enumerable: true, - writable: true - }); - const options = { - configurable: true, - enumerable: true, - get() { - const value = getValue(); - set(value); - return value; - } - }; - if (setter) { - options.set = set; - } - return Object.defineProperty(obj, key, options); -} - -var Obj = /*#__PURE__*/Object.freeze({ - __proto__: null, - each: each, - reduce: reduce, - isObject: isObject, - isPlain: isPlain, - merge: merge$1, - defineLazyProperty: defineLazyProperty -}); - -/** - * @file browser.js - * @module browser - */ - -/** - * Whether or not this device is an iPod. - * - * @static - * @type {Boolean} - */ -let IS_IPOD = false; - -/** - * The detected iOS version - or `null`. - * - * @static - * @type {string|null} - */ -let IOS_VERSION = null; - -/** - * Whether or not this is an Android device. - * - * @static - * @type {Boolean} - */ -let IS_ANDROID = false; - -/** - * The detected Android version - or `null` if not Android or indeterminable. - * - * @static - * @type {number|string|null} - */ -let ANDROID_VERSION; - -/** - * Whether or not this is Mozilla Firefox. - * - * @static - * @type {Boolean} - */ -let IS_FIREFOX = false; - -/** - * Whether or not this is Microsoft Edge. - * - * @static - * @type {Boolean} - */ -let IS_EDGE = false; - -/** - * Whether or not this is any Chromium Browser - * - * @static - * @type {Boolean} - */ -let IS_CHROMIUM = false; - -/** - * Whether or not this is any Chromium browser that is not Edge. - * - * This will also be `true` for Chrome on iOS, which will have different support - * as it is actually Safari under the hood. - * - * Depreacted, as the behaviour to not match Edge was to prevent Legacy Edge's UA matching. - * IS_CHROMIUM should be used instead. - * "Chromium but not Edge" could be explicitly tested with IS_CHROMIUM && !IS_EDGE - * - * @static - * @deprecated - * @type {Boolean} - */ -let IS_CHROME = false; - -/** - * The detected Chromium version - or `null`. - * - * @static - * @type {number|null} - */ -let CHROMIUM_VERSION = null; - -/** - * The detected Google Chrome version - or `null`. - * This has always been the _Chromium_ version, i.e. would return on Chromium Edge. - * Depreacted, use CHROMIUM_VERSION instead. - * - * @static - * @deprecated - * @type {number|null} - */ -let CHROME_VERSION = null; - -/** - * The detected Internet Explorer version - or `null`. - * - * @static - * @deprecated - * @type {number|null} - */ -let IE_VERSION = null; - -/** - * Whether or not this is desktop Safari. - * - * @static - * @type {Boolean} - */ -let IS_SAFARI = false; - -/** - * Whether or not this is a Windows machine. - * - * @static - * @type {Boolean} - */ -let IS_WINDOWS = false; - -/** - * Whether or not this device is an iPad. - * - * @static - * @type {Boolean} - */ -let IS_IPAD = false; - -/** - * Whether or not this device is an iPhone. - * - * @static - * @type {Boolean} - */ -// The Facebook app's UIWebView identifies as both an iPhone and iPad, so -// to identify iPhones, we need to exclude iPads. -// http://artsy.github.io/blog/2012/10/18/the-perils-of-ios-user-agent-sniffing/ -let IS_IPHONE = false; - -/** - * Whether or not this device is touch-enabled. - * - * @static - * @const - * @type {Boolean} - */ -const TOUCH_ENABLED = Boolean(isReal() && ('ontouchstart' in window__default["default"] || window__default["default"].navigator.maxTouchPoints || window__default["default"].DocumentTouch && window__default["default"].document instanceof window__default["default"].DocumentTouch)); -const UAD = window__default["default"].navigator && window__default["default"].navigator.userAgentData; -if (UAD) { - // If userAgentData is present, use it instead of userAgent to avoid warnings - // Currently only implemented on Chromium - // userAgentData does not expose Android version, so ANDROID_VERSION remains `null` - - IS_ANDROID = UAD.platform === 'Android'; - IS_EDGE = Boolean(UAD.brands.find(b => b.brand === 'Microsoft Edge')); - IS_CHROMIUM = Boolean(UAD.brands.find(b => b.brand === 'Chromium')); - IS_CHROME = !IS_EDGE && IS_CHROMIUM; - CHROMIUM_VERSION = CHROME_VERSION = (UAD.brands.find(b => b.brand === 'Chromium') || {}).version || null; - IS_WINDOWS = UAD.platform === 'Windows'; -} - -// If the broser is not Chromium, either userAgentData is not present which could be an old Chromium browser, -// or it's a browser that has added userAgentData since that we don't have tests for yet. In either case, -// the checks need to be made agiainst the regular userAgent string. -if (!IS_CHROMIUM) { - const USER_AGENT = window__default["default"].navigator && window__default["default"].navigator.userAgent || ''; - IS_IPOD = /iPod/i.test(USER_AGENT); - IOS_VERSION = function () { - const match = USER_AGENT.match(/OS (\d+)_/i); - if (match && match[1]) { - return match[1]; - } - return null; - }(); - IS_ANDROID = /Android/i.test(USER_AGENT); - ANDROID_VERSION = function () { - // This matches Android Major.Minor.Patch versions - // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned - const match = USER_AGENT.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i); - if (!match) { - return null; - } - const major = match[1] && parseFloat(match[1]); - const minor = match[2] && parseFloat(match[2]); - if (major && minor) { - return parseFloat(match[1] + '.' + match[2]); - } else if (major) { - return major; - } - return null; - }(); - IS_FIREFOX = /Firefox/i.test(USER_AGENT); - IS_EDGE = /Edg/i.test(USER_AGENT); - IS_CHROMIUM = /Chrome/i.test(USER_AGENT) || /CriOS/i.test(USER_AGENT); - IS_CHROME = !IS_EDGE && IS_CHROMIUM; - CHROMIUM_VERSION = CHROME_VERSION = function () { - const match = USER_AGENT.match(/(Chrome|CriOS)\/(\d+)/); - if (match && match[2]) { - return parseFloat(match[2]); - } - return null; - }(); - IE_VERSION = function () { - const result = /MSIE\s(\d+)\.\d/.exec(USER_AGENT); - let version = result && parseFloat(result[1]); - if (!version && /Trident\/7.0/i.test(USER_AGENT) && /rv:11.0/.test(USER_AGENT)) { - // IE 11 has a different user agent string than other IE versions - version = 11.0; - } - return version; - }(); - IS_SAFARI = /Safari/i.test(USER_AGENT) && !IS_CHROME && !IS_ANDROID && !IS_EDGE; - IS_WINDOWS = /Windows/i.test(USER_AGENT); - IS_IPAD = /iPad/i.test(USER_AGENT) || IS_SAFARI && TOUCH_ENABLED && !/iPhone/i.test(USER_AGENT); - IS_IPHONE = /iPhone/i.test(USER_AGENT) && !IS_IPAD; -} - -/** - * Whether or not this is an iOS device. - * - * @static - * @const - * @type {Boolean} - */ -const IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD; - -/** - * Whether or not this is any flavor of Safari - including iOS. - * - * @static - * @const - * @type {Boolean} - */ -const IS_ANY_SAFARI = (IS_SAFARI || IS_IOS) && !IS_CHROME; - -var browser = /*#__PURE__*/Object.freeze({ - __proto__: null, - get IS_IPOD () { return IS_IPOD; }, - get IOS_VERSION () { return IOS_VERSION; }, - get IS_ANDROID () { return IS_ANDROID; }, - get ANDROID_VERSION () { return ANDROID_VERSION; }, - get IS_FIREFOX () { return IS_FIREFOX; }, - get IS_EDGE () { return IS_EDGE; }, - get IS_CHROMIUM () { return IS_CHROMIUM; }, - get IS_CHROME () { return IS_CHROME; }, - get CHROMIUM_VERSION () { return CHROMIUM_VERSION; }, - get CHROME_VERSION () { return CHROME_VERSION; }, - get IE_VERSION () { return IE_VERSION; }, - get IS_SAFARI () { return IS_SAFARI; }, - get IS_WINDOWS () { return IS_WINDOWS; }, - get IS_IPAD () { return IS_IPAD; }, - get IS_IPHONE () { return IS_IPHONE; }, - TOUCH_ENABLED: TOUCH_ENABLED, - IS_IOS: IS_IOS, - IS_ANY_SAFARI: IS_ANY_SAFARI -}); - -/** - * @file dom.js - * @module dom - */ - -/** - * Detect if a value is a string with any non-whitespace characters. - * - * @private - * @param {string} str - * The string to check - * - * @return {boolean} - * Will be `true` if the string is non-blank, `false` otherwise. - * - */ -function isNonBlankString(str) { - // we use str.trim as it will trim any whitespace characters - // from the front or back of non-whitespace characters. aka - // Any string that contains non-whitespace characters will - // still contain them after `trim` but whitespace only strings - // will have a length of 0, failing this check. - return typeof str === 'string' && Boolean(str.trim()); -} - -/** - * Throws an error if the passed string has whitespace. This is used by - * class methods to be relatively consistent with the classList API. - * - * @private - * @param {string} str - * The string to check for whitespace. - * - * @throws {Error} - * Throws an error if there is whitespace in the string. - */ -function throwIfWhitespace(str) { - // str.indexOf instead of regex because str.indexOf is faster performance wise. - if (str.indexOf(' ') >= 0) { - throw new Error('class has illegal whitespace characters'); - } -} - -/** - * Whether the current DOM interface appears to be real (i.e. not simulated). - * - * @return {boolean} - * Will be `true` if the DOM appears to be real, `false` otherwise. - */ -function isReal() { - // Both document and window will never be undefined thanks to `global`. - return document__default["default"] === window__default["default"].document; -} - -/** - * Determines, via duck typing, whether or not a value is a DOM element. - * - * @param {*} value - * The value to check. - * - * @return {boolean} - * Will be `true` if the value is a DOM element, `false` otherwise. - */ -function isEl(value) { - return isObject(value) && value.nodeType === 1; -} - -/** - * Determines if the current DOM is embedded in an iframe. - * - * @return {boolean} - * Will be `true` if the DOM is embedded in an iframe, `false` - * otherwise. - */ -function isInFrame() { - // We need a try/catch here because Safari will throw errors when attempting - // to get either `parent` or `self` - try { - return window__default["default"].parent !== window__default["default"].self; - } catch (x) { - return true; - } -} - -/** - * Creates functions to query the DOM using a given method. - * - * @private - * @param {string} method - * The method to create the query with. - * - * @return {Function} - * The query method - */ -function createQuerier(method) { - return function (selector, context) { - if (!isNonBlankString(selector)) { - return document__default["default"][method](null); - } - if (isNonBlankString(context)) { - context = document__default["default"].querySelector(context); - } - const ctx = isEl(context) ? context : document__default["default"]; - return ctx[method] && ctx[method](selector); - }; -} - -/** - * Creates an element and applies properties, attributes, and inserts content. - * - * @param {string} [tagName='div'] - * Name of tag to be created. - * - * @param {Object} [properties={}] - * Element properties to be applied. - * - * @param {Object} [attributes={}] - * Element attributes to be applied. - * - * @param {ContentDescriptor} [content] - * A content descriptor object. - * - * @return {Element} - * The element that was created. - */ -function createEl(tagName = 'div', properties = {}, attributes = {}, content) { - const el = document__default["default"].createElement(tagName); - Object.getOwnPropertyNames(properties).forEach(function (propName) { - const val = properties[propName]; - - // Handle textContent since it's not supported everywhere and we have a - // method for it. - if (propName === 'textContent') { - textContent(el, val); - } else if (el[propName] !== val || propName === 'tabIndex') { - el[propName] = val; - } - }); - Object.getOwnPropertyNames(attributes).forEach(function (attrName) { - el.setAttribute(attrName, attributes[attrName]); - }); - if (content) { - appendContent(el, content); - } - return el; -} - -/** - * Injects text into an element, replacing any existing contents entirely. - * - * @param {Element} el - * The element to add text content into - * - * @param {string} text - * The text content to add. - * - * @return {Element} - * The element with added text content. - */ -function textContent(el, text) { - if (typeof el.textContent === 'undefined') { - el.innerText = text; - } else { - el.textContent = text; - } - return el; -} - -/** - * Insert an element as the first child node of another - * - * @param {Element} child - * Element to insert - * - * @param {Element} parent - * Element to insert child into - */ -function prependTo(child, parent) { - if (parent.firstChild) { - parent.insertBefore(child, parent.firstChild); - } else { - parent.appendChild(child); - } -} - -/** - * Check if an element has a class name. - * - * @param {Element} element - * Element to check - * - * @param {string} classToCheck - * Class name to check for - * - * @return {boolean} - * Will be `true` if the element has a class, `false` otherwise. - * - * @throws {Error} - * Throws an error if `classToCheck` has white space. - */ -function hasClass(element, classToCheck) { - throwIfWhitespace(classToCheck); - return element.classList.contains(classToCheck); -} - -/** - * Add a class name to an element. - * - * @param {Element} element - * Element to add class name to. - * - * @param {...string} classesToAdd - * One or more class name to add. - * - * @return {Element} - * The DOM element with the added class name. - */ -function addClass(element, ...classesToAdd) { - element.classList.add(...classesToAdd.reduce((prev, current) => prev.concat(current.split(/\s+/)), [])); - return element; -} - -/** - * Remove a class name from an element. - * - * @param {Element} element - * Element to remove a class name from. - * - * @param {...string} classesToRemove - * One or more class name to remove. - * - * @return {Element} - * The DOM element with class name removed. - */ -function removeClass(element, ...classesToRemove) { - // Protect in case the player gets disposed - if (!element) { - log$1.warn("removeClass was called with an element that doesn't exist"); - return null; - } - element.classList.remove(...classesToRemove.reduce((prev, current) => prev.concat(current.split(/\s+/)), [])); - return element; -} - -/** - * The callback definition for toggleClass. - * - * @callback module:dom~PredicateCallback - * @param {Element} element - * The DOM element of the Component. - * - * @param {string} classToToggle - * The `className` that wants to be toggled - * - * @return {boolean|undefined} - * If `true` is returned, the `classToToggle` will be added to the - * `element`. If `false`, the `classToToggle` will be removed from - * the `element`. If `undefined`, the callback will be ignored. - */ - -/** - * Adds or removes a class name to/from an element depending on an optional - * condition or the presence/absence of the class name. - * - * @param {Element} element - * The element to toggle a class name on. - * - * @param {string} classToToggle - * The class that should be toggled. - * - * @param {boolean|module:dom~PredicateCallback} [predicate] - * See the return value for {@link module:dom~PredicateCallback} - * - * @return {Element} - * The element with a class that has been toggled. - */ -function toggleClass(element, classToToggle, predicate) { - if (typeof predicate === 'function') { - predicate = predicate(element, classToToggle); - } - if (typeof predicate !== 'boolean') { - predicate = undefined; - } - classToToggle.split(/\s+/).forEach(className => element.classList.toggle(className, predicate)); - return element; -} - -/** - * Apply attributes to an HTML element. - * - * @param {Element} el - * Element to add attributes to. - * - * @param {Object} [attributes] - * Attributes to be applied. - */ -function setAttributes(el, attributes) { - Object.getOwnPropertyNames(attributes).forEach(function (attrName) { - const attrValue = attributes[attrName]; - if (attrValue === null || typeof attrValue === 'undefined' || attrValue === false) { - el.removeAttribute(attrName); - } else { - el.setAttribute(attrName, attrValue === true ? '' : attrValue); - } - }); -} - -/** - * Get an element's attribute values, as defined on the HTML tag. - * - * Attributes are not the same as properties. They're defined on the tag - * or with setAttribute. - * - * @param {Element} tag - * Element from which to get tag attributes. - * - * @return {Object} - * All attributes of the element. Boolean attributes will be `true` or - * `false`, others will be strings. - */ -function getAttributes(tag) { - const obj = {}; - - // known boolean attributes - // we can check for matching boolean properties, but not all browsers - // and not all tags know about these attributes, so, we still want to check them manually - const knownBooleans = ',' + 'autoplay,controls,playsinline,loop,muted,default,defaultMuted' + ','; - if (tag && tag.attributes && tag.attributes.length > 0) { - const attrs = tag.attributes; - for (let i = attrs.length - 1; i >= 0; i--) { - const attrName = attrs[i].name; - let attrVal = attrs[i].value; - - // check for known booleans - // the matching element property will return a value for typeof - if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(',' + attrName + ',') !== -1) { - // the value of an included boolean attribute is typically an empty - // string ('') which would equal false if we just check for a false value. - // we also don't want support bad code like autoplay='false' - attrVal = attrVal !== null ? true : false; - } - obj[attrName] = attrVal; - } - } - return obj; -} - -/** - * Get the value of an element's attribute. - * - * @param {Element} el - * A DOM element. - * - * @param {string} attribute - * Attribute to get the value of. - * - * @return {string} - * The value of the attribute. - */ -function getAttribute(el, attribute) { - return el.getAttribute(attribute); -} - -/** - * Set the value of an element's attribute. - * - * @param {Element} el - * A DOM element. - * - * @param {string} attribute - * Attribute to set. - * - * @param {string} value - * Value to set the attribute to. - */ -function setAttribute(el, attribute, value) { - el.setAttribute(attribute, value); -} - -/** - * Remove an element's attribute. - * - * @param {Element} el - * A DOM element. - * - * @param {string} attribute - * Attribute to remove. - */ -function removeAttribute(el, attribute) { - el.removeAttribute(attribute); -} - -/** - * Attempt to block the ability to select text. - */ -function blockTextSelection() { - document__default["default"].body.focus(); - document__default["default"].onselectstart = function () { - return false; - }; -} - -/** - * Turn off text selection blocking. - */ -function unblockTextSelection() { - document__default["default"].onselectstart = function () { - return true; - }; -} - -/** - * Identical to the native `getBoundingClientRect` function, but ensures that - * the method is supported at all (it is in all browsers we claim to support) - * and that the element is in the DOM before continuing. - * - * This wrapper function also shims properties which are not provided by some - * older browsers (namely, IE8). - * - * Additionally, some browsers do not support adding properties to a - * `ClientRect`/`DOMRect` object; so, we shallow-copy it with the standard - * properties (except `x` and `y` which are not widely supported). This helps - * avoid implementations where keys are non-enumerable. - * - * @param {Element} el - * Element whose `ClientRect` we want to calculate. - * - * @return {Object|undefined} - * Always returns a plain object - or `undefined` if it cannot. - */ -function getBoundingClientRect(el) { - if (el && el.getBoundingClientRect && el.parentNode) { - const rect = el.getBoundingClientRect(); - const result = {}; - ['bottom', 'height', 'left', 'right', 'top', 'width'].forEach(k => { - if (rect[k] !== undefined) { - result[k] = rect[k]; - } - }); - if (!result.height) { - result.height = parseFloat(computedStyle(el, 'height')); - } - if (!result.width) { - result.width = parseFloat(computedStyle(el, 'width')); - } - return result; - } -} - -/** - * Represents the position of a DOM element on the page. - * - * @typedef {Object} module:dom~Position - * - * @property {number} left - * Pixels to the left. - * - * @property {number} top - * Pixels from the top. - */ - -/** - * Get the position of an element in the DOM. - * - * Uses `getBoundingClientRect` technique from John Resig. - * - * @see http://ejohn.org/blog/getboundingclientrect-is-awesome/ - * - * @param {Element} el - * Element from which to get offset. - * - * @return {module:dom~Position} - * The position of the element that was passed in. - */ -function findPosition(el) { - if (!el || el && !el.offsetParent) { - return { - left: 0, - top: 0, - width: 0, - height: 0 - }; - } - const width = el.offsetWidth; - const height = el.offsetHeight; - let left = 0; - let top = 0; - while (el.offsetParent && el !== document__default["default"][FullscreenApi.fullscreenElement]) { - left += el.offsetLeft; - top += el.offsetTop; - el = el.offsetParent; - } - return { - left, - top, - width, - height - }; -} - -/** - * Represents x and y coordinates for a DOM element or mouse pointer. - * - * @typedef {Object} module:dom~Coordinates - * - * @property {number} x - * x coordinate in pixels - * - * @property {number} y - * y coordinate in pixels - */ - -/** - * Get the pointer position within an element. - * - * The base on the coordinates are the bottom left of the element. - * - * @param {Element} el - * Element on which to get the pointer position on. - * - * @param {Event} event - * Event object. - * - * @return {module:dom~Coordinates} - * A coordinates object corresponding to the mouse position. - * - */ -function getPointerPosition(el, event) { - const translated = { - x: 0, - y: 0 - }; - if (IS_IOS) { - let item = el; - while (item && item.nodeName.toLowerCase() !== 'html') { - const transform = computedStyle(item, 'transform'); - if (/^matrix/.test(transform)) { - const values = transform.slice(7, -1).split(/,\s/).map(Number); - translated.x += values[4]; - translated.y += values[5]; - } else if (/^matrix3d/.test(transform)) { - const values = transform.slice(9, -1).split(/,\s/).map(Number); - translated.x += values[12]; - translated.y += values[13]; - } - item = item.parentNode; - } - } - const position = {}; - const boxTarget = findPosition(event.target); - const box = findPosition(el); - const boxW = box.width; - const boxH = box.height; - let offsetY = event.offsetY - (box.top - boxTarget.top); - let offsetX = event.offsetX - (box.left - boxTarget.left); - if (event.changedTouches) { - offsetX = event.changedTouches[0].pageX - box.left; - offsetY = event.changedTouches[0].pageY + box.top; - if (IS_IOS) { - offsetX -= translated.x; - offsetY -= translated.y; - } - } - position.y = 1 - Math.max(0, Math.min(1, offsetY / boxH)); - position.x = Math.max(0, Math.min(1, offsetX / boxW)); - return position; -} - -/** - * Determines, via duck typing, whether or not a value is a text node. - * - * @param {*} value - * Check if this value is a text node. - * - * @return {boolean} - * Will be `true` if the value is a text node, `false` otherwise. - */ -function isTextNode(value) { - return isObject(value) && value.nodeType === 3; -} - -/** - * Empties the contents of an element. - * - * @param {Element} el - * The element to empty children from - * - * @return {Element} - * The element with no children - */ -function emptyEl(el) { - while (el.firstChild) { - el.removeChild(el.firstChild); - } - return el; -} - -/** - * This is a mixed value that describes content to be injected into the DOM - * via some method. It can be of the following types: - * - * Type | Description - * -----------|------------- - * `string` | The value will be normalized into a text node. - * `Element` | The value will be accepted as-is. - * `Text` | A TextNode. The value will be accepted as-is. - * `Array` | A one-dimensional array of strings, elements, text nodes, or functions. These functions should return a string, element, or text node (any other return value, like an array, will be ignored). - * `Function` | A function, which is expected to return a string, element, text node, or array - any of the other possible values described above. This means that a content descriptor could be a function that returns an array of functions, but those second-level functions must return strings, elements, or text nodes. - * - * @typedef {string|Element|Text|Array|Function} ContentDescriptor - */ - -/** - * Normalizes content for eventual insertion into the DOM. - * - * This allows a wide range of content definition methods, but helps protect - * from falling into the trap of simply writing to `innerHTML`, which could - * be an XSS concern. - * - * The content for an element can be passed in multiple types and - * combinations, whose behavior is as follows: - * - * @param {ContentDescriptor} content - * A content descriptor value. - * - * @return {Array} - * All of the content that was passed in, normalized to an array of - * elements or text nodes. - */ -function normalizeContent(content) { - // First, invoke content if it is a function. If it produces an array, - // that needs to happen before normalization. - if (typeof content === 'function') { - content = content(); - } - - // Next up, normalize to an array, so one or many items can be normalized, - // filtered, and returned. - return (Array.isArray(content) ? content : [content]).map(value => { - // First, invoke value if it is a function to produce a new value, - // which will be subsequently normalized to a Node of some kind. - if (typeof value === 'function') { - value = value(); - } - if (isEl(value) || isTextNode(value)) { - return value; - } - if (typeof value === 'string' && /\S/.test(value)) { - return document__default["default"].createTextNode(value); - } - }).filter(value => value); -} - -/** - * Normalizes and appends content to an element. - * - * @param {Element} el - * Element to append normalized content to. - * - * @param {ContentDescriptor} content - * A content descriptor value. - * - * @return {Element} - * The element with appended normalized content. - */ -function appendContent(el, content) { - normalizeContent(content).forEach(node => el.appendChild(node)); - return el; -} - -/** - * Normalizes and inserts content into an element; this is identical to - * `appendContent()`, except it empties the element first. - * - * @param {Element} el - * Element to insert normalized content into. - * - * @param {ContentDescriptor} content - * A content descriptor value. - * - * @return {Element} - * The element with inserted normalized content. - */ -function insertContent(el, content) { - return appendContent(emptyEl(el), content); -} - -/** - * Check if an event was a single left click. - * - * @param {Event} event - * Event object. - * - * @return {boolean} - * Will be `true` if a single left click, `false` otherwise. - */ -function isSingleLeftClick(event) { - // Note: if you create something draggable, be sure to - // call it on both `mousedown` and `mousemove` event, - // otherwise `mousedown` should be enough for a button - - if (event.button === undefined && event.buttons === undefined) { - // Why do we need `buttons` ? - // Because, middle mouse sometimes have this: - // e.button === 0 and e.buttons === 4 - // Furthermore, we want to prevent combination click, something like - // HOLD middlemouse then left click, that would be - // e.button === 0, e.buttons === 5 - // just `button` is not gonna work - - // Alright, then what this block does ? - // this is for chrome `simulate mobile devices` - // I want to support this as well - - return true; - } - if (event.button === 0 && event.buttons === undefined) { - // Touch screen, sometimes on some specific device, `buttons` - // doesn't have anything (safari on ios, blackberry...) - - return true; - } - - // `mouseup` event on a single left click has - // `button` and `buttons` equal to 0 - if (event.type === 'mouseup' && event.button === 0 && event.buttons === 0) { - return true; - } - if (event.button !== 0 || event.buttons !== 1) { - // This is the reason we have those if else block above - // if any special case we can catch and let it slide - // we do it above, when get to here, this definitely - // is-not-left-click - - return false; - } - return true; -} - -/** - * Finds a single DOM element matching `selector` within the optional - * `context` of another DOM element (defaulting to `document`). - * - * @param {string} selector - * A valid CSS selector, which will be passed to `querySelector`. - * - * @param {Element|String} [context=document] - * A DOM element within which to query. Can also be a selector - * string in which case the first matching element will be used - * as context. If missing (or no element matches selector), falls - * back to `document`. - * - * @return {Element|null} - * The element that was found or null. - */ -const $ = createQuerier('querySelector'); - -/** - * Finds a all DOM elements matching `selector` within the optional - * `context` of another DOM element (defaulting to `document`). - * - * @param {string} selector - * A valid CSS selector, which will be passed to `querySelectorAll`. - * - * @param {Element|String} [context=document] - * A DOM element within which to query. Can also be a selector - * string in which case the first matching element will be used - * as context. If missing (or no element matches selector), falls - * back to `document`. - * - * @return {NodeList} - * A element list of elements that were found. Will be empty if none - * were found. - * - */ -const $$ = createQuerier('querySelectorAll'); - -/** - * A safe getComputedStyle. - * - * This is needed because in Firefox, if the player is loaded in an iframe with - * `display:none`, then `getComputedStyle` returns `null`, so, we do a - * null-check to make sure that the player doesn't break in these cases. - * - * @param {Element} el - * The element you want the computed style of - * - * @param {string} prop - * The property name you want - * - * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397 - */ -function computedStyle(el, prop) { - if (!el || !prop) { - return ''; - } - if (typeof window__default["default"].getComputedStyle === 'function') { - let computedStyleValue; - try { - computedStyleValue = window__default["default"].getComputedStyle(el); - } catch (e) { - return ''; - } - return computedStyleValue ? computedStyleValue.getPropertyValue(prop) || computedStyleValue[prop] : ''; - } - return ''; -} - -var Dom = /*#__PURE__*/Object.freeze({ - __proto__: null, - isReal: isReal, - isEl: isEl, - isInFrame: isInFrame, - createEl: createEl, - textContent: textContent, - prependTo: prependTo, - hasClass: hasClass, - addClass: addClass, - removeClass: removeClass, - toggleClass: toggleClass, - setAttributes: setAttributes, - getAttributes: getAttributes, - getAttribute: getAttribute, - setAttribute: setAttribute, - removeAttribute: removeAttribute, - blockTextSelection: blockTextSelection, - unblockTextSelection: unblockTextSelection, - getBoundingClientRect: getBoundingClientRect, - findPosition: findPosition, - getPointerPosition: getPointerPosition, - isTextNode: isTextNode, - emptyEl: emptyEl, - normalizeContent: normalizeContent, - appendContent: appendContent, - insertContent: insertContent, - isSingleLeftClick: isSingleLeftClick, - $: $, - $$: $$, - computedStyle: computedStyle -}); - -/** - * @file setup.js - Functions for setting up a player without - * user interaction based on the data-setup `attribute` of the video tag. - * - * @module setup - */ -let _windowLoaded = false; -let videojs$1; - -/** - * Set up any tags that have a data-setup `attribute` when the player is started. - */ -const autoSetup = function () { - if (videojs$1.options.autoSetup === false) { - return; - } - const vids = Array.prototype.slice.call(document__default["default"].getElementsByTagName('video')); - const audios = Array.prototype.slice.call(document__default["default"].getElementsByTagName('audio')); - const divs = Array.prototype.slice.call(document__default["default"].getElementsByTagName('video-js')); - const mediaEls = vids.concat(audios, divs); - - // Check if any media elements exist - if (mediaEls && mediaEls.length > 0) { - for (let i = 0, e = mediaEls.length; i < e; i++) { - const mediaEl = mediaEls[i]; - - // Check if element exists, has getAttribute func. - if (mediaEl && mediaEl.getAttribute) { - // Make sure this player hasn't already been set up. - if (mediaEl.player === undefined) { - const options = mediaEl.getAttribute('data-setup'); - - // Check if data-setup attr exists. - // We only auto-setup if they've added the data-setup attr. - if (options !== null) { - // Create new video.js instance. - videojs$1(mediaEl); - } - } - - // If getAttribute isn't defined, we need to wait for the DOM. - } else { - autoSetupTimeout(1); - break; - } - } - - // No videos were found, so keep looping unless page is finished loading. - } else if (!_windowLoaded) { - autoSetupTimeout(1); - } -}; - -/** - * Wait until the page is loaded before running autoSetup. This will be called in - * autoSetup if `hasLoaded` returns false. - * - * @param {number} wait - * How long to wait in ms - * - * @param {module:videojs} [vjs] - * The videojs library function - */ -function autoSetupTimeout(wait, vjs) { - // Protect against breakage in non-browser environments - if (!isReal()) { - return; - } - if (vjs) { - videojs$1 = vjs; - } - window__default["default"].setTimeout(autoSetup, wait); -} - -/** - * Used to set the internal tracking of window loaded state to true. - * - * @private - */ -function setWindowLoaded() { - _windowLoaded = true; - window__default["default"].removeEventListener('load', setWindowLoaded); -} -if (isReal()) { - if (document__default["default"].readyState === 'complete') { - setWindowLoaded(); - } else { - /** - * Listen for the load event on window, and set _windowLoaded to true. - * - * We use a standard event listener here to avoid incrementing the GUID - * before any players are created. - * - * @listens load - */ - window__default["default"].addEventListener('load', setWindowLoaded); - } -} - -/** - * @file stylesheet.js - * @module stylesheet - */ - -/** - * Create a DOM syle element given a className for it. - * - * @param {string} className - * The className to add to the created style element. - * - * @return {Element} - * The element that was created. - */ -const createStyleElement = function (className) { - const style = document__default["default"].createElement('style'); - style.className = className; - return style; -}; - -/** - * Add text to a DOM element. - * - * @param {Element} el - * The Element to add text content to. - * - * @param {string} content - * The text to add to the element. - */ -const setTextContent = function (el, content) { - if (el.styleSheet) { - el.styleSheet.cssText = content; - } else { - el.textContent = content; - } -}; - -/** - * @file dom-data.js - * @module dom-data - */ - -/** - * Element Data Store. - * - * Allows for binding data to an element without putting it directly on the - * element. Ex. Event listeners are stored here. - * (also from jsninja.com, slightly modified and updated for closure compiler) - * - * @type {Object} - * @private - */ -var DomData = new WeakMap(); - -/** - * @file guid.js - * @module guid - */ - -// Default value for GUIDs. This allows us to reset the GUID counter in tests. -// -// The initial GUID is 3 because some users have come to rely on the first -// default player ID ending up as `vjs_video_3`. -// -// See: https://github.com/videojs/video.js/pull/6216 -const _initialGuid = 3; - -/** - * Unique ID for an element or function - * - * @type {Number} - */ -let _guid = _initialGuid; - -/** - * Get a unique auto-incrementing ID by number that has not been returned before. - * - * @return {number} - * A new unique ID. - */ -function newGUID() { - return _guid++; -} - -/** - * @file events.js. An Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/) - * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible) - * This should work very similarly to jQuery's events, however it's based off the book version which isn't as - * robust as jquery's, so there's probably some differences. - * - * @file events.js - * @module events - */ - -/** - * Clean up the listener cache and dispatchers - * - * @param {Element|Object} elem - * Element to clean up - * - * @param {string} type - * Type of event to clean up - */ -function _cleanUpEvents(elem, type) { - if (!DomData.has(elem)) { - return; - } - const data = DomData.get(elem); - - // Remove the events of a particular type if there are none left - if (data.handlers[type].length === 0) { - delete data.handlers[type]; - // data.handlers[type] = null; - // Setting to null was causing an error with data.handlers - - // Remove the meta-handler from the element - if (elem.removeEventListener) { - elem.removeEventListener(type, data.dispatcher, false); - } else if (elem.detachEvent) { - elem.detachEvent('on' + type, data.dispatcher); - } - } - - // Remove the events object if there are no types left - if (Object.getOwnPropertyNames(data.handlers).length <= 0) { - delete data.handlers; - delete data.dispatcher; - delete data.disabled; - } - - // Finally remove the element data if there is no data left - if (Object.getOwnPropertyNames(data).length === 0) { - DomData.delete(elem); - } -} - -/** - * Loops through an array of event types and calls the requested method for each type. - * - * @param {Function} fn - * The event method we want to use. - * - * @param {Element|Object} elem - * Element or object to bind listeners to - * - * @param {string} type - * Type of event to bind to. - * - * @param {Function} callback - * Event listener. - */ -function _handleMultipleEvents(fn, elem, types, callback) { - types.forEach(function (type) { - // Call the event method for each one of the types - fn(elem, type, callback); - }); -} - -/** - * Fix a native event to have standard property values - * - * @param {Object} event - * Event object to fix. - * - * @return {Object} - * Fixed event object. - */ -function fixEvent(event) { - if (event.fixed_) { - return event; - } - function returnTrue() { - return true; - } - function returnFalse() { - return false; - } - - // Test if fixing up is needed - // Used to check if !event.stopPropagation instead of isPropagationStopped - // But native events return true for stopPropagation, but don't have - // other expected methods like isPropagationStopped. Seems to be a problem - // with the Javascript Ninja code. So we're just overriding all events now. - if (!event || !event.isPropagationStopped || !event.isImmediatePropagationStopped) { - const old = event || window__default["default"].event; - event = {}; - // Clone the old object so that we can modify the values event = {}; - // IE8 Doesn't like when you mess with native event properties - // Firefox returns false for event.hasOwnProperty('type') and other props - // which makes copying more difficult. - // TODO: Probably best to create a whitelist of event props - for (const key in old) { - // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y - // Chrome warns you if you try to copy deprecated keyboardEvent.keyLocation - // and webkitMovementX/Y - // Lighthouse complains if Event.path is copied - if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation' && key !== 'webkitMovementX' && key !== 'webkitMovementY' && key !== 'path') { - // Chrome 32+ warns if you try to copy deprecated returnValue, but - // we still want to if preventDefault isn't supported (IE8). - if (!(key === 'returnValue' && old.preventDefault)) { - event[key] = old[key]; - } - } - } - - // The event occurred on this element - if (!event.target) { - event.target = event.srcElement || document__default["default"]; - } - - // Handle which other element the event is related to - if (!event.relatedTarget) { - event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; - } - - // Stop the default browser action - event.preventDefault = function () { - if (old.preventDefault) { - old.preventDefault(); - } - event.returnValue = false; - old.returnValue = false; - event.defaultPrevented = true; - }; - event.defaultPrevented = false; - - // Stop the event from bubbling - event.stopPropagation = function () { - if (old.stopPropagation) { - old.stopPropagation(); - } - event.cancelBubble = true; - old.cancelBubble = true; - event.isPropagationStopped = returnTrue; - }; - event.isPropagationStopped = returnFalse; - - // Stop the event from bubbling and executing other handlers - event.stopImmediatePropagation = function () { - if (old.stopImmediatePropagation) { - old.stopImmediatePropagation(); - } - event.isImmediatePropagationStopped = returnTrue; - event.stopPropagation(); - }; - event.isImmediatePropagationStopped = returnFalse; - - // Handle mouse position - if (event.clientX !== null && event.clientX !== undefined) { - const doc = document__default["default"].documentElement; - const body = document__default["default"].body; - event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); - event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); - } - - // Handle key presses - event.which = event.charCode || event.keyCode; - - // Fix button for mouse clicks: - // 0 == left; 1 == middle; 2 == right - if (event.button !== null && event.button !== undefined) { - // The following is disabled because it does not pass videojs-standard - // and... yikes. - /* eslint-disable */ - event.button = event.button & 1 ? 0 : event.button & 4 ? 1 : event.button & 2 ? 2 : 0; - /* eslint-enable */ - } - } - - event.fixed_ = true; - // Returns fixed-up instance - return event; -} - -/** - * Whether passive event listeners are supported - */ -let _supportsPassive; -const supportsPassive = function () { - if (typeof _supportsPassive !== 'boolean') { - _supportsPassive = false; - try { - const opts = Object.defineProperty({}, 'passive', { - get() { - _supportsPassive = true; - } - }); - window__default["default"].addEventListener('test', null, opts); - window__default["default"].removeEventListener('test', null, opts); - } catch (e) { - // disregard - } - } - return _supportsPassive; -}; - -/** - * Touch events Chrome expects to be passive - */ -const passiveEvents = ['touchstart', 'touchmove']; - -/** - * Add an event listener to element - * It stores the handler function in a separate cache object - * and adds a generic handler to the element's event, - * along with a unique id (guid) to the element. - * - * @param {Element|Object} elem - * Element or object to bind listeners to - * - * @param {string|string[]} type - * Type of event to bind to. - * - * @param {Function} fn - * Event listener. - */ -function on(elem, type, fn) { - if (Array.isArray(type)) { - return _handleMultipleEvents(on, elem, type, fn); - } - if (!DomData.has(elem)) { - DomData.set(elem, {}); - } - const data = DomData.get(elem); - - // We need a place to store all our handler data - if (!data.handlers) { - data.handlers = {}; - } - if (!data.handlers[type]) { - data.handlers[type] = []; - } - if (!fn.guid) { - fn.guid = newGUID(); - } - data.handlers[type].push(fn); - if (!data.dispatcher) { - data.disabled = false; - data.dispatcher = function (event, hash) { - if (data.disabled) { - return; - } - event = fixEvent(event); - const handlers = data.handlers[event.type]; - if (handlers) { - // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off. - const handlersCopy = handlers.slice(0); - for (let m = 0, n = handlersCopy.length; m < n; m++) { - if (event.isImmediatePropagationStopped()) { - break; - } else { - try { - handlersCopy[m].call(elem, event, hash); - } catch (e) { - log$1.error(e); - } - } - } - } - }; - } - if (data.handlers[type].length === 1) { - if (elem.addEventListener) { - let options = false; - if (supportsPassive() && passiveEvents.indexOf(type) > -1) { - options = { - passive: true - }; - } - elem.addEventListener(type, data.dispatcher, options); - } else if (elem.attachEvent) { - elem.attachEvent('on' + type, data.dispatcher); - } - } -} - -/** - * Removes event listeners from an element - * - * @param {Element|Object} elem - * Object to remove listeners from. - * - * @param {string|string[]} [type] - * Type of listener to remove. Don't include to remove all events from element. - * - * @param {Function} [fn] - * Specific listener to remove. Don't include to remove listeners for an event - * type. - */ -function off(elem, type, fn) { - // Don't want to add a cache object through getElData if not needed - if (!DomData.has(elem)) { - return; - } - const data = DomData.get(elem); - - // If no events exist, nothing to unbind - if (!data.handlers) { - return; - } - if (Array.isArray(type)) { - return _handleMultipleEvents(off, elem, type, fn); - } - - // Utility function - const removeType = function (el, t) { - data.handlers[t] = []; - _cleanUpEvents(el, t); - }; - - // Are we removing all bound events? - if (type === undefined) { - for (const t in data.handlers) { - if (Object.prototype.hasOwnProperty.call(data.handlers || {}, t)) { - removeType(elem, t); - } - } - return; - } - const handlers = data.handlers[type]; - - // If no handlers exist, nothing to unbind - if (!handlers) { - return; - } - - // If no listener was provided, remove all listeners for type - if (!fn) { - removeType(elem, type); - return; - } - - // We're only removing a single handler - if (fn.guid) { - for (let n = 0; n < handlers.length; n++) { - if (handlers[n].guid === fn.guid) { - handlers.splice(n--, 1); - } - } - } - _cleanUpEvents(elem, type); -} - -/** - * Trigger an event for an element - * - * @param {Element|Object} elem - * Element to trigger an event on - * - * @param {EventTarget~Event|string} event - * A string (the type) or an event object with a type attribute - * - * @param {Object} [hash] - * data hash to pass along with the event - * - * @return {boolean|undefined} - * Returns the opposite of `defaultPrevented` if default was - * prevented. Otherwise, returns `undefined` - */ -function trigger(elem, event, hash) { - // Fetches element data and a reference to the parent (for bubbling). - // Don't want to add a data object to cache for every parent, - // so checking hasElData first. - const elemData = DomData.has(elem) ? DomData.get(elem) : {}; - const parent = elem.parentNode || elem.ownerDocument; - // type = event.type || event, - // handler; - - // If an event name was passed as a string, creates an event out of it - if (typeof event === 'string') { - event = { - type: event, - target: elem - }; - } else if (!event.target) { - event.target = elem; - } - - // Normalizes the event properties. - event = fixEvent(event); - - // If the passed element has a dispatcher, executes the established handlers. - if (elemData.dispatcher) { - elemData.dispatcher.call(elem, event, hash); - } - - // Unless explicitly stopped or the event does not bubble (e.g. media events) - // recursively calls this function to bubble the event up the DOM. - if (parent && !event.isPropagationStopped() && event.bubbles === true) { - trigger.call(null, parent, event, hash); - - // If at the top of the DOM, triggers the default action unless disabled. - } else if (!parent && !event.defaultPrevented && event.target && event.target[event.type]) { - if (!DomData.has(event.target)) { - DomData.set(event.target, {}); - } - const targetData = DomData.get(event.target); - - // Checks if the target has a default action for this event. - if (event.target[event.type]) { - // Temporarily disables event dispatching on the target as we have already executed the handler. - targetData.disabled = true; - // Executes the default action. - if (typeof event.target[event.type] === 'function') { - event.target[event.type](); - } - // Re-enables event dispatching. - targetData.disabled = false; - } - } - - // Inform the triggerer if the default was prevented by returning false - return !event.defaultPrevented; -} - -/** - * Trigger a listener only once for an event. - * - * @param {Element|Object} elem - * Element or object to bind to. - * - * @param {string|string[]} type - * Name/type of event - * - * @param {Event~EventListener} fn - * Event listener function - */ -function one(elem, type, fn) { - if (Array.isArray(type)) { - return _handleMultipleEvents(one, elem, type, fn); - } - const func = function () { - off(elem, type, func); - fn.apply(this, arguments); - }; - - // copy the guid to the new function so it can removed using the original function's ID - func.guid = fn.guid = fn.guid || newGUID(); - on(elem, type, func); -} - -/** - * Trigger a listener only once and then turn if off for all - * configured events - * - * @param {Element|Object} elem - * Element or object to bind to. - * - * @param {string|string[]} type - * Name/type of event - * - * @param {Event~EventListener} fn - * Event listener function - */ -function any(elem, type, fn) { - const func = function () { - off(elem, type, func); - fn.apply(this, arguments); - }; - - // copy the guid to the new function so it can removed using the original function's ID - func.guid = fn.guid = fn.guid || newGUID(); - - // multiple ons, but one off for everything - on(elem, type, func); -} - -var Events = /*#__PURE__*/Object.freeze({ - __proto__: null, - fixEvent: fixEvent, - on: on, - off: off, - trigger: trigger, - one: one, - any: any -}); - -/** - * @file fn.js - * @module fn - */ -const UPDATE_REFRESH_INTERVAL = 30; - -/** - * A private, internal-only function for changing the context of a function. - * - * It also stores a unique id on the function so it can be easily removed from - * events. - * - * @private - * @function - * @param {*} context - * The object to bind as scope. - * - * @param {Function} fn - * The function to be bound to a scope. - * - * @param {number} [uid] - * An optional unique ID for the function to be set - * - * @return {Function} - * The new function that will be bound into the context given - */ -const bind_ = function (context, fn, uid) { - // Make sure the function has a unique ID - if (!fn.guid) { - fn.guid = newGUID(); - } - - // Create the new function that changes the context - const bound = fn.bind(context); - - // Allow for the ability to individualize this function - // Needed in the case where multiple objects might share the same prototype - // IF both items add an event listener with the same function, then you try to remove just one - // it will remove both because they both have the same guid. - // when using this, you need to use the bind method when you remove the listener as well. - // currently used in text tracks - bound.guid = uid ? uid + '_' + fn.guid : fn.guid; - return bound; -}; - -/** - * Wraps the given function, `fn`, with a new function that only invokes `fn` - * at most once per every `wait` milliseconds. - * - * @function - * @param {Function} fn - * The function to be throttled. - * - * @param {number} wait - * The number of milliseconds by which to throttle. - * - * @return {Function} - */ -const throttle = function (fn, wait) { - let last = window__default["default"].performance.now(); - const throttled = function (...args) { - const now = window__default["default"].performance.now(); - if (now - last >= wait) { - fn(...args); - last = now; - } - }; - return throttled; -}; - -/** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. - * - * Inspired by lodash and underscore implementations. - * - * @function - * @param {Function} func - * The function to wrap with debounce behavior. - * - * @param {number} wait - * The number of milliseconds to wait after the last invocation. - * - * @param {boolean} [immediate] - * Whether or not to invoke the function immediately upon creation. - * - * @param {Object} [context=window] - * The "context" in which the debounced function should debounce. For - * example, if this function should be tied to a Video.js player, - * the player can be passed here. Alternatively, defaults to the - * global `window` object. - * - * @return {Function} - * A debounced function. - */ -const debounce = function (func, wait, immediate, context = window__default["default"]) { - let timeout; - const cancel = () => { - context.clearTimeout(timeout); - timeout = null; - }; - - /* eslint-disable consistent-this */ - const debounced = function () { - const self = this; - const args = arguments; - let later = function () { - timeout = null; - later = null; - if (!immediate) { - func.apply(self, args); - } - }; - if (!timeout && immediate) { - func.apply(self, args); - } - context.clearTimeout(timeout); - timeout = context.setTimeout(later, wait); - }; - /* eslint-enable consistent-this */ - - debounced.cancel = cancel; - return debounced; -}; - -var Fn = /*#__PURE__*/Object.freeze({ - __proto__: null, - UPDATE_REFRESH_INTERVAL: UPDATE_REFRESH_INTERVAL, - bind_: bind_, - throttle: throttle, - debounce: debounce -}); - -/** - * @file src/js/event-target.js - */ -let EVENT_MAP; - -/** - * `EventTarget` is a class that can have the same API as the DOM `EventTarget`. It - * adds shorthand functions that wrap around lengthy functions. For example: - * the `on` function is a wrapper around `addEventListener`. - * - * @see [EventTarget Spec]{@link https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventTarget} - * @class EventTarget - */ -class EventTarget$2 { - /** - * Adds an `event listener` to an instance of an `EventTarget`. An `event listener` is a - * function that will get called when an event with a certain name gets triggered. - * - * @param {string|string[]} type - * An event name or an array of event names. - * - * @param {Function} fn - * The function to call with `EventTarget`s - */ - on(type, fn) { - // Remove the addEventListener alias before calling Events.on - // so we don't get into an infinite type loop - const ael = this.addEventListener; - this.addEventListener = () => {}; - on(this, type, fn); - this.addEventListener = ael; - } - /** - * Removes an `event listener` for a specific event from an instance of `EventTarget`. - * This makes it so that the `event listener` will no longer get called when the - * named event happens. - * - * @param {string|string[]} type - * An event name or an array of event names. - * - * @param {Function} fn - * The function to remove. - */ - off(type, fn) { - off(this, type, fn); - } - /** - * This function will add an `event listener` that gets triggered only once. After the - * first trigger it will get removed. This is like adding an `event listener` - * with {@link EventTarget#on} that calls {@link EventTarget#off} on itself. - * - * @param {string|string[]} type - * An event name or an array of event names. - * - * @param {Function} fn - * The function to be called once for each event name. - */ - one(type, fn) { - // Remove the addEventListener aliasing Events.on - // so we don't get into an infinite type loop - const ael = this.addEventListener; - this.addEventListener = () => {}; - one(this, type, fn); - this.addEventListener = ael; - } - /** - * This function will add an `event listener` that gets triggered only once and is - * removed from all events. This is like adding an array of `event listener`s - * with {@link EventTarget#on} that calls {@link EventTarget#off} on all events the - * first time it is triggered. - * - * @param {string|string[]} type - * An event name or an array of event names. - * - * @param {Function} fn - * The function to be called once for each event name. - */ - any(type, fn) { - // Remove the addEventListener aliasing Events.on - // so we don't get into an infinite type loop - const ael = this.addEventListener; - this.addEventListener = () => {}; - any(this, type, fn); - this.addEventListener = ael; - } - /** - * This function causes an event to happen. This will then cause any `event listeners` - * that are waiting for that event, to get called. If there are no `event listeners` - * for an event then nothing will happen. - * - * If the name of the `Event` that is being triggered is in `EventTarget.allowedEvents_`. - * Trigger will also call the `on` + `uppercaseEventName` function. - * - * Example: - * 'click' is in `EventTarget.allowedEvents_`, so, trigger will attempt to call - * `onClick` if it exists. - * - * @param {string|EventTarget~Event|Object} event - * The name of the event, an `Event`, or an object with a key of type set to - * an event name. - */ - trigger(event) { - const type = event.type || event; - - // deprecation - // In a future version we should default target to `this` - // similar to how we default the target to `elem` in - // `Events.trigger`. Right now the default `target` will be - // `document` due to the `Event.fixEvent` call. - if (typeof event === 'string') { - event = { - type - }; - } - event = fixEvent(event); - if (this.allowedEvents_[type] && this['on' + type]) { - this['on' + type](event); - } - trigger(this, event); - } - queueTrigger(event) { - // only set up EVENT_MAP if it'll be used - if (!EVENT_MAP) { - EVENT_MAP = new Map(); - } - const type = event.type || event; - let map = EVENT_MAP.get(this); - if (!map) { - map = new Map(); - EVENT_MAP.set(this, map); - } - const oldTimeout = map.get(type); - map.delete(type); - window__default["default"].clearTimeout(oldTimeout); - const timeout = window__default["default"].setTimeout(() => { - map.delete(type); - // if we cleared out all timeouts for the current target, delete its map - if (map.size === 0) { - map = null; - EVENT_MAP.delete(this); - } - this.trigger(event); - }, 0); - map.set(type, timeout); - } -} - -/** - * A Custom DOM event. - * - * @typedef {CustomEvent} Event - * @see [Properties]{@link https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent} - */ - -/** - * All event listeners should follow the following format. - * - * @callback EventTarget~EventListener - * @this {EventTarget} - * - * @param {Event} event - * the event that triggered this function - * - * @param {Object} [hash] - * hash of data sent during the event - */ - -/** - * An object containing event names as keys and booleans as values. - * - * > NOTE: If an event name is set to a true value here {@link EventTarget#trigger} - * will have extra functionality. See that function for more information. - * - * @property EventTarget.prototype.allowedEvents_ - * @private - */ -EventTarget$2.prototype.allowedEvents_ = {}; - -/** - * An alias of {@link EventTarget#on}. Allows `EventTarget` to mimic - * the standard DOM API. - * - * @function - * @see {@link EventTarget#on} - */ -EventTarget$2.prototype.addEventListener = EventTarget$2.prototype.on; - -/** - * An alias of {@link EventTarget#off}. Allows `EventTarget` to mimic - * the standard DOM API. - * - * @function - * @see {@link EventTarget#off} - */ -EventTarget$2.prototype.removeEventListener = EventTarget$2.prototype.off; - -/** - * An alias of {@link EventTarget#trigger}. Allows `EventTarget` to mimic - * the standard DOM API. - * - * @function - * @see {@link EventTarget#trigger} - */ -EventTarget$2.prototype.dispatchEvent = EventTarget$2.prototype.trigger; - -/** - * @file mixins/evented.js - * @module evented - */ -const objName = obj => { - if (typeof obj.name === 'function') { - return obj.name(); - } - if (typeof obj.name === 'string') { - return obj.name; - } - if (obj.name_) { - return obj.name_; - } - if (obj.constructor && obj.constructor.name) { - return obj.constructor.name; - } - return typeof obj; -}; - -/** - * Returns whether or not an object has had the evented mixin applied. - * - * @param {Object} object - * An object to test. - * - * @return {boolean} - * Whether or not the object appears to be evented. - */ -const isEvented = object => object instanceof EventTarget$2 || !!object.eventBusEl_ && ['on', 'one', 'off', 'trigger'].every(k => typeof object[k] === 'function'); - -/** - * Adds a callback to run after the evented mixin applied. - * - * @param {Object} object - * An object to Add - * @param {Function} callback - * The callback to run. - */ -const addEventedCallback = (target, callback) => { - if (isEvented(target)) { - callback(); - } else { - if (!target.eventedCallbacks) { - target.eventedCallbacks = []; - } - target.eventedCallbacks.push(callback); - } -}; - -/** - * Whether a value is a valid event type - non-empty string or array. - * - * @private - * @param {string|Array} type - * The type value to test. - * - * @return {boolean} - * Whether or not the type is a valid event type. - */ -const isValidEventType = type => -// The regex here verifies that the `type` contains at least one non- -// whitespace character. -typeof type === 'string' && /\S/.test(type) || Array.isArray(type) && !!type.length; - -/** - * Validates a value to determine if it is a valid event target. Throws if not. - * - * @private - * @throws {Error} - * If the target does not appear to be a valid event target. - * - * @param {Object} target - * The object to test. - * - * @param {Object} obj - * The evented object we are validating for - * - * @param {string} fnName - * The name of the evented mixin function that called this. - */ -const validateTarget = (target, obj, fnName) => { - if (!target || !target.nodeName && !isEvented(target)) { - throw new Error(`Invalid target for ${objName(obj)}#${fnName}; must be a DOM node or evented object.`); - } -}; - -/** - * Validates a value to determine if it is a valid event target. Throws if not. - * - * @private - * @throws {Error} - * If the type does not appear to be a valid event type. - * - * @param {string|Array} type - * The type to test. - * - * @param {Object} obj -* The evented object we are validating for - * - * @param {string} fnName - * The name of the evented mixin function that called this. - */ -const validateEventType = (type, obj, fnName) => { - if (!isValidEventType(type)) { - throw new Error(`Invalid event type for ${objName(obj)}#${fnName}; must be a non-empty string or array.`); - } -}; - -/** - * Validates a value to determine if it is a valid listener. Throws if not. - * - * @private - * @throws {Error} - * If the listener is not a function. - * - * @param {Function} listener - * The listener to test. - * - * @param {Object} obj - * The evented object we are validating for - * - * @param {string} fnName - * The name of the evented mixin function that called this. - */ -const validateListener = (listener, obj, fnName) => { - if (typeof listener !== 'function') { - throw new Error(`Invalid listener for ${objName(obj)}#${fnName}; must be a function.`); - } -}; - -/** - * Takes an array of arguments given to `on()` or `one()`, validates them, and - * normalizes them into an object. - * - * @private - * @param {Object} self - * The evented object on which `on()` or `one()` was called. This - * object will be bound as the `this` value for the listener. - * - * @param {Array} args - * An array of arguments passed to `on()` or `one()`. - * - * @param {string} fnName - * The name of the evented mixin function that called this. - * - * @return {Object} - * An object containing useful values for `on()` or `one()` calls. - */ -const normalizeListenArgs = (self, args, fnName) => { - // If the number of arguments is less than 3, the target is always the - // evented object itself. - const isTargetingSelf = args.length < 3 || args[0] === self || args[0] === self.eventBusEl_; - let target; - let type; - let listener; - if (isTargetingSelf) { - target = self.eventBusEl_; - - // Deal with cases where we got 3 arguments, but we are still listening to - // the evented object itself. - if (args.length >= 3) { - args.shift(); - } - [type, listener] = args; - } else { - [target, type, listener] = args; - } - validateTarget(target, self, fnName); - validateEventType(type, self, fnName); - validateListener(listener, self, fnName); - listener = bind_(self, listener); - return { - isTargetingSelf, - target, - type, - listener - }; -}; - -/** - * Adds the listener to the event type(s) on the target, normalizing for - * the type of target. - * - * @private - * @param {Element|Object} target - * A DOM node or evented object. - * - * @param {string} method - * The event binding method to use ("on" or "one"). - * - * @param {string|Array} type - * One or more event type(s). - * - * @param {Function} listener - * A listener function. - */ -const listen = (target, method, type, listener) => { - validateTarget(target, target, method); - if (target.nodeName) { - Events[method](target, type, listener); - } else { - target[method](type, listener); - } -}; - -/** - * Contains methods that provide event capabilities to an object which is passed - * to {@link module:evented|evented}. - * - * @mixin EventedMixin - */ -const EventedMixin = { - /** - * Add a listener to an event (or events) on this object or another evented - * object. - * - * @param {string|Array|Element|Object} targetOrType - * If this is a string or array, it represents the event type(s) - * that will trigger the listener. - * - * Another evented object can be passed here instead, which will - * cause the listener to listen for events on _that_ object. - * - * In either case, the listener's `this` value will be bound to - * this object. - * - * @param {string|Array|Function} typeOrListener - * If the first argument was a string or array, this should be the - * listener function. Otherwise, this is a string or array of event - * type(s). - * - * @param {Function} [listener] - * If the first argument was another evented object, this will be - * the listener function. - */ - on(...args) { - const { - isTargetingSelf, - target, - type, - listener - } = normalizeListenArgs(this, args, 'on'); - listen(target, 'on', type, listener); - - // If this object is listening to another evented object. - if (!isTargetingSelf) { - // If this object is disposed, remove the listener. - const removeListenerOnDispose = () => this.off(target, type, listener); - - // Use the same function ID as the listener so we can remove it later it - // using the ID of the original listener. - removeListenerOnDispose.guid = listener.guid; - - // Add a listener to the target's dispose event as well. This ensures - // that if the target is disposed BEFORE this object, we remove the - // removal listener that was just added. Otherwise, we create a memory leak. - const removeRemoverOnTargetDispose = () => this.off('dispose', removeListenerOnDispose); - - // Use the same function ID as the listener so we can remove it later - // it using the ID of the original listener. - removeRemoverOnTargetDispose.guid = listener.guid; - listen(this, 'on', 'dispose', removeListenerOnDispose); - listen(target, 'on', 'dispose', removeRemoverOnTargetDispose); - } - }, - /** - * Add a listener to an event (or events) on this object or another evented - * object. The listener will be called once per event and then removed. - * - * @param {string|Array|Element|Object} targetOrType - * If this is a string or array, it represents the event type(s) - * that will trigger the listener. - * - * Another evented object can be passed here instead, which will - * cause the listener to listen for events on _that_ object. - * - * In either case, the listener's `this` value will be bound to - * this object. - * - * @param {string|Array|Function} typeOrListener - * If the first argument was a string or array, this should be the - * listener function. Otherwise, this is a string or array of event - * type(s). - * - * @param {Function} [listener] - * If the first argument was another evented object, this will be - * the listener function. - */ - one(...args) { - const { - isTargetingSelf, - target, - type, - listener - } = normalizeListenArgs(this, args, 'one'); - - // Targeting this evented object. - if (isTargetingSelf) { - listen(target, 'one', type, listener); - - // Targeting another evented object. - } else { - // TODO: This wrapper is incorrect! It should only - // remove the wrapper for the event type that called it. - // Instead all listners are removed on the first trigger! - // see https://github.com/videojs/video.js/issues/5962 - const wrapper = (...largs) => { - this.off(target, type, wrapper); - listener.apply(null, largs); - }; - - // Use the same function ID as the listener so we can remove it later - // it using the ID of the original listener. - wrapper.guid = listener.guid; - listen(target, 'one', type, wrapper); - } - }, - /** - * Add a listener to an event (or events) on this object or another evented - * object. The listener will only be called once for the first event that is triggered - * then removed. - * - * @param {string|Array|Element|Object} targetOrType - * If this is a string or array, it represents the event type(s) - * that will trigger the listener. - * - * Another evented object can be passed here instead, which will - * cause the listener to listen for events on _that_ object. - * - * In either case, the listener's `this` value will be bound to - * this object. - * - * @param {string|Array|Function} typeOrListener - * If the first argument was a string or array, this should be the - * listener function. Otherwise, this is a string or array of event - * type(s). - * - * @param {Function} [listener] - * If the first argument was another evented object, this will be - * the listener function. - */ - any(...args) { - const { - isTargetingSelf, - target, - type, - listener - } = normalizeListenArgs(this, args, 'any'); - - // Targeting this evented object. - if (isTargetingSelf) { - listen(target, 'any', type, listener); - - // Targeting another evented object. - } else { - const wrapper = (...largs) => { - this.off(target, type, wrapper); - listener.apply(null, largs); - }; - - // Use the same function ID as the listener so we can remove it later - // it using the ID of the original listener. - wrapper.guid = listener.guid; - listen(target, 'any', type, wrapper); - } - }, - /** - * Removes listener(s) from event(s) on an evented object. - * - * @param {string|Array|Element|Object} [targetOrType] - * If this is a string or array, it represents the event type(s). - * - * Another evented object can be passed here instead, in which case - * ALL 3 arguments are _required_. - * - * @param {string|Array|Function} [typeOrListener] - * If the first argument was a string or array, this may be the - * listener function. Otherwise, this is a string or array of event - * type(s). - * - * @param {Function} [listener] - * If the first argument was another evented object, this will be - * the listener function; otherwise, _all_ listeners bound to the - * event type(s) will be removed. - */ - off(targetOrType, typeOrListener, listener) { - // Targeting this evented object. - if (!targetOrType || isValidEventType(targetOrType)) { - off(this.eventBusEl_, targetOrType, typeOrListener); - - // Targeting another evented object. - } else { - const target = targetOrType; - const type = typeOrListener; - - // Fail fast and in a meaningful way! - validateTarget(target, this, 'off'); - validateEventType(type, this, 'off'); - validateListener(listener, this, 'off'); - - // Ensure there's at least a guid, even if the function hasn't been used - listener = bind_(this, listener); - - // Remove the dispose listener on this evented object, which was given - // the same guid as the event listener in on(). - this.off('dispose', listener); - if (target.nodeName) { - off(target, type, listener); - off(target, 'dispose', listener); - } else if (isEvented(target)) { - target.off(type, listener); - target.off('dispose', listener); - } - } - }, - /** - * Fire an event on this evented object, causing its listeners to be called. - * - * @param {string|Object} event - * An event type or an object with a type property. - * - * @param {Object} [hash] - * An additional object to pass along to listeners. - * - * @return {boolean} - * Whether or not the default behavior was prevented. - */ - trigger(event, hash) { - validateTarget(this.eventBusEl_, this, 'trigger'); - const type = event && typeof event !== 'string' ? event.type : event; - if (!isValidEventType(type)) { - throw new Error(`Invalid event type for ${objName(this)}#trigger; ` + 'must be a non-empty string or object with a type key that has a non-empty value.'); - } - return trigger(this.eventBusEl_, event, hash); - } -}; - -/** - * Applies {@link module:evented~EventedMixin|EventedMixin} to a target object. - * - * @param {Object} target - * The object to which to add event methods. - * - * @param {Object} [options={}] - * Options for customizing the mixin behavior. - * - * @param {string} [options.eventBusKey] - * By default, adds a `eventBusEl_` DOM element to the target object, - * which is used as an event bus. If the target object already has a - * DOM element that should be used, pass its key here. - * - * @return {Object} - * The target object. - */ -function evented(target, options = {}) { - const { - eventBusKey - } = options; - - // Set or create the eventBusEl_. - if (eventBusKey) { - if (!target[eventBusKey].nodeName) { - throw new Error(`The eventBusKey "${eventBusKey}" does not refer to an element.`); - } - target.eventBusEl_ = target[eventBusKey]; - } else { - target.eventBusEl_ = createEl('span', { - className: 'vjs-event-bus' - }); - } - Object.assign(target, EventedMixin); - if (target.eventedCallbacks) { - target.eventedCallbacks.forEach(callback => { - callback(); - }); - } - - // When any evented object is disposed, it removes all its listeners. - target.on('dispose', () => { - target.off(); - [target, target.el_, target.eventBusEl_].forEach(function (val) { - if (val && DomData.has(val)) { - DomData.delete(val); - } - }); - window__default["default"].setTimeout(() => { - target.eventBusEl_ = null; - }, 0); - }); - return target; -} - -/** - * @file mixins/stateful.js - * @module stateful - */ - -/** - * Contains methods that provide statefulness to an object which is passed - * to {@link module:stateful}. - * - * @mixin StatefulMixin - */ -const StatefulMixin = { - /** - * A hash containing arbitrary keys and values representing the state of - * the object. - * - * @type {Object} - */ - state: {}, - /** - * Set the state of an object by mutating its - * {@link module:stateful~StatefulMixin.state|state} object in place. - * - * @fires module:stateful~StatefulMixin#statechanged - * @param {Object|Function} stateUpdates - * A new set of properties to shallow-merge into the plugin state. - * Can be a plain object or a function returning a plain object. - * - * @return {Object|undefined} - * An object containing changes that occurred. If no changes - * occurred, returns `undefined`. - */ - setState(stateUpdates) { - // Support providing the `stateUpdates` state as a function. - if (typeof stateUpdates === 'function') { - stateUpdates = stateUpdates(); - } - let changes; - each(stateUpdates, (value, key) => { - // Record the change if the value is different from what's in the - // current state. - if (this.state[key] !== value) { - changes = changes || {}; - changes[key] = { - from: this.state[key], - to: value - }; - } - this.state[key] = value; - }); - - // Only trigger "statechange" if there were changes AND we have a trigger - // function. This allows us to not require that the target object be an - // evented object. - if (changes && isEvented(this)) { - /** - * An event triggered on an object that is both - * {@link module:stateful|stateful} and {@link module:evented|evented} - * indicating that its state has changed. - * - * @event module:stateful~StatefulMixin#statechanged - * @type {Object} - * @property {Object} changes - * A hash containing the properties that were changed and - * the values they were changed `from` and `to`. - */ - this.trigger({ - changes, - type: 'statechanged' - }); - } - return changes; - } -}; - -/** - * Applies {@link module:stateful~StatefulMixin|StatefulMixin} to a target - * object. - * - * If the target object is {@link module:evented|evented} and has a - * `handleStateChanged` method, that method will be automatically bound to the - * `statechanged` event on itself. - * - * @param {Object} target - * The object to be made stateful. - * - * @param {Object} [defaultState] - * A default set of properties to populate the newly-stateful object's - * `state` property. - * - * @return {Object} - * Returns the `target`. - */ -function stateful(target, defaultState) { - Object.assign(target, StatefulMixin); - - // This happens after the mixing-in because we need to replace the `state` - // added in that step. - target.state = Object.assign({}, target.state, defaultState); - - // Auto-bind the `handleStateChanged` method of the target object if it exists. - if (typeof target.handleStateChanged === 'function' && isEvented(target)) { - target.on('statechanged', target.handleStateChanged); - } - return target; -} - -/** - * @file str.js - * @module to-lower-case - */ - -/** - * Lowercase the first letter of a string. - * - * @param {string} string - * String to be lowercased - * - * @return {string} - * The string with a lowercased first letter - */ -const toLowerCase = function (string) { - if (typeof string !== 'string') { - return string; - } - return string.replace(/./, w => w.toLowerCase()); -}; - -/** - * Uppercase the first letter of a string. - * - * @param {string} string - * String to be uppercased - * - * @return {string} - * The string with an uppercased first letter - */ -const toTitleCase$1 = function (string) { - if (typeof string !== 'string') { - return string; - } - return string.replace(/./, w => w.toUpperCase()); -}; - -/** - * Compares the TitleCase versions of the two strings for equality. - * - * @param {string} str1 - * The first string to compare - * - * @param {string} str2 - * The second string to compare - * - * @return {boolean} - * Whether the TitleCase versions of the strings are equal - */ -const titleCaseEquals = function (str1, str2) { - return toTitleCase$1(str1) === toTitleCase$1(str2); -}; - -var Str = /*#__PURE__*/Object.freeze({ - __proto__: null, - toLowerCase: toLowerCase, - toTitleCase: toTitleCase$1, - titleCaseEquals: titleCaseEquals -}); - -/** - * Player Component - Base class for all UI objects - * - * @file component.js - */ - -/** - * @typedef { import('./player').default } Player - * @typedef { import('./event-target').Event} Event -*/ - -/** - * Base class for all UI Components. - * Components are UI objects which represent both a javascript object and an element - * in the DOM. They can be children of other components, and can have - * children themselves. - * - * Components can also use methods from {@link EventTarget} - */ -class Component$1 { - /** - * A callback that is called when a component is ready. Does not have any - * parameters and any callback value will be ignored. - * - * @callback ReadyCallback - * @this Component - */ - - /** - * Creates an instance of this class. - * - * @param {Player} player - * The `Player` that this class should be attached to. - * - * @param {Object} [options] - * The key/value store of component options. - * - * @param {Object[]} [options.children] - * An array of children objects to intialize this component with. Children objects have - * a name property that will be used if more than one component of the same type needs to be - * added. - * - * @param {string} [options.className] - * A class or space separated list of classes to add the component - * - * @param {ReadyCallback} [ready] - * Function that gets called when the `Component` is ready. - */ - constructor(player, options, ready) { - // The component might be the player itself and we can't pass `this` to super - if (!player && this.play) { - this.player_ = player = this; // eslint-disable-line - } else { - this.player_ = player; - } - this.isDisposed_ = false; - - // Hold the reference to the parent component via `addChild` method - this.parentComponent_ = null; - - // Make a copy of prototype.options_ to protect against overriding defaults - this.options_ = merge$1({}, this.options_); - - // Updated options with supplied options - options = this.options_ = merge$1(this.options_, options); - - // Get ID from options or options element if one is supplied - this.id_ = options.id || options.el && options.el.id; - - // If there was no ID from the options, generate one - if (!this.id_) { - // Don't require the player ID function in the case of mock players - const id = player && player.id && player.id() || 'no_player'; - this.id_ = `${id}_component_${newGUID()}`; - } - this.name_ = options.name || null; - - // Create element if one wasn't provided in options - if (options.el) { - this.el_ = options.el; - } else if (options.createEl !== false) { - this.el_ = this.createEl(); - } - if (options.className && this.el_) { - options.className.split(' ').forEach(c => this.addClass(c)); - } - - // Remove the placeholder event methods. If the component is evented, the - // real methods are added next - ['on', 'off', 'one', 'any', 'trigger'].forEach(fn => { - this[fn] = undefined; - }); - - // if evented is anything except false, we want to mixin in evented - if (options.evented !== false) { - // Make this an evented object and use `el_`, if available, as its event bus - evented(this, { - eventBusKey: this.el_ ? 'el_' : null - }); - this.handleLanguagechange = this.handleLanguagechange.bind(this); - this.on(this.player_, 'languagechange', this.handleLanguagechange); - } - stateful(this, this.constructor.defaultState); - this.children_ = []; - this.childIndex_ = {}; - this.childNameIndex_ = {}; - this.setTimeoutIds_ = new Set(); - this.setIntervalIds_ = new Set(); - this.rafIds_ = new Set(); - this.namedRafs_ = new Map(); - this.clearingTimersOnDispose_ = false; - - // Add any child components in options - if (options.initChildren !== false) { - this.initChildren(); - } - - // Don't want to trigger ready here or it will go before init is actually - // finished for all children that run this constructor - this.ready(ready); - if (options.reportTouchActivity !== false) { - this.enableTouchActivity(); - } - } - - // `on`, `off`, `one`, `any` and `trigger` are here so tsc includes them in definitions. - // They are replaced or removed in the constructor - - /** - * Adds an `event listener` to an instance of an `EventTarget`. An `event listener` is a - * function that will get called when an event with a certain name gets triggered. - * - * @param {string|string[]} type - * An event name or an array of event names. - * - * @param {Function} fn - * The function to call with `EventTarget`s - */ - on(type, fn) {} - - /** - * Removes an `event listener` for a specific event from an instance of `EventTarget`. - * This makes it so that the `event listener` will no longer get called when the - * named event happens. - * - * @param {string|string[]} type - * An event name or an array of event names. - * - * @param {Function} fn - * The function to remove. - */ - off(type, fn) {} - - /** - * This function will add an `event listener` that gets triggered only once. After the - * first trigger it will get removed. This is like adding an `event listener` - * with {@link EventTarget#on} that calls {@link EventTarget#off} on itself. - * - * @param {string|string[]} type - * An event name or an array of event names. - * - * @param {Function} fn - * The function to be called once for each event name. - */ - one(type, fn) {} - - /** - * This function will add an `event listener` that gets triggered only once and is - * removed from all events. This is like adding an array of `event listener`s - * with {@link EventTarget#on} that calls {@link EventTarget#off} on all events the - * first time it is triggered. - * - * @param {string|string[]} type - * An event name or an array of event names. - * - * @param {Function} fn - * The function to be called once for each event name. - */ - any(type, fn) {} - - /** - * This function causes an event to happen. This will then cause any `event listeners` - * that are waiting for that event, to get called. If there are no `event listeners` - * for an event then nothing will happen. - * - * If the name of the `Event` that is being triggered is in `EventTarget.allowedEvents_`. - * Trigger will also call the `on` + `uppercaseEventName` function. - * - * Example: - * 'click' is in `EventTarget.allowedEvents_`, so, trigger will attempt to call - * `onClick` if it exists. - * - * @param {string|Event|Object} event - * The name of the event, an `Event`, or an object with a key of type set to - * an event name. - */ - trigger(event) {} - - /** - * Dispose of the `Component` and all child components. - * - * @fires Component#dispose - * - * @param {Object} options - * @param {Element} options.originalEl element with which to replace player element - */ - dispose(options = {}) { - // Bail out if the component has already been disposed. - if (this.isDisposed_) { - return; - } - if (this.readyQueue_) { - this.readyQueue_.length = 0; - } - - /** - * Triggered when a `Component` is disposed. - * - * @event Component#dispose - * @type {Event} - * - * @property {boolean} [bubbles=false] - * set to false so that the dispose event does not - * bubble up - */ - this.trigger({ - type: 'dispose', - bubbles: false - }); - this.isDisposed_ = true; - - // Dispose all children. - if (this.children_) { - for (let i = this.children_.length - 1; i >= 0; i--) { - if (this.children_[i].dispose) { - this.children_[i].dispose(); - } - } - } - - // Delete child references - this.children_ = null; - this.childIndex_ = null; - this.childNameIndex_ = null; - this.parentComponent_ = null; - if (this.el_) { - // Remove element from DOM - if (this.el_.parentNode) { - if (options.restoreEl) { - this.el_.parentNode.replaceChild(options.restoreEl, this.el_); - } else { - this.el_.parentNode.removeChild(this.el_); - } - } - this.el_ = null; - } - - // remove reference to the player after disposing of the element - this.player_ = null; - } - - /** - * Determine whether or not this component has been disposed. - * - * @return {boolean} - * If the component has been disposed, will be `true`. Otherwise, `false`. - */ - isDisposed() { - return Boolean(this.isDisposed_); - } - - /** - * Return the {@link Player} that the `Component` has attached to. - * - * @return {Player} - * The player that this `Component` has attached to. - */ - player() { - return this.player_; - } - - /** - * Deep merge of options objects with new options. - * > Note: When both `obj` and `options` contain properties whose values are objects. - * The two properties get merged using {@link module:obj.merge} - * - * @param {Object} obj - * The object that contains new options. - * - * @return {Object} - * A new object of `this.options_` and `obj` merged together. - */ - options(obj) { - if (!obj) { - return this.options_; - } - this.options_ = merge$1(this.options_, obj); - return this.options_; - } - - /** - * Get the `Component`s DOM element - * - * @return {Element} - * The DOM element for this `Component`. - */ - el() { - return this.el_; - } - - /** - * Create the `Component`s DOM element. - * - * @param {string} [tagName] - * Element's DOM node type. e.g. 'div' - * - * @param {Object} [properties] - * An object of properties that should be set. - * - * @param {Object} [attributes] - * An object of attributes that should be set. - * - * @return {Element} - * The element that gets created. - */ - createEl(tagName, properties, attributes) { - return createEl(tagName, properties, attributes); - } - - /** - * Localize a string given the string in english. - * - * If tokens are provided, it'll try and run a simple token replacement on the provided string. - * The tokens it looks for look like `{1}` with the index being 1-indexed into the tokens array. - * - * If a `defaultValue` is provided, it'll use that over `string`, - * if a value isn't found in provided language files. - * This is useful if you want to have a descriptive key for token replacement - * but have a succinct localized string and not require `en.json` to be included. - * - * Currently, it is used for the progress bar timing. - * ```js - * { - * "progress bar timing: currentTime={1} duration={2}": "{1} of {2}" - * } - * ``` - * It is then used like so: - * ```js - * this.localize('progress bar timing: currentTime={1} duration{2}', - * [this.player_.currentTime(), this.player_.duration()], - * '{1} of {2}'); - * ``` - * - * Which outputs something like: `01:23 of 24:56`. - * - * - * @param {string} string - * The string to localize and the key to lookup in the language files. - * @param {string[]} [tokens] - * If the current item has token replacements, provide the tokens here. - * @param {string} [defaultValue] - * Defaults to `string`. Can be a default value to use for token replacement - * if the lookup key is needed to be separate. - * - * @return {string} - * The localized string or if no localization exists the english string. - */ - localize(string, tokens, defaultValue = string) { - const code = this.player_.language && this.player_.language(); - const languages = this.player_.languages && this.player_.languages(); - const language = languages && languages[code]; - const primaryCode = code && code.split('-')[0]; - const primaryLang = languages && languages[primaryCode]; - let localizedString = defaultValue; - if (language && language[string]) { - localizedString = language[string]; - } else if (primaryLang && primaryLang[string]) { - localizedString = primaryLang[string]; - } - if (tokens) { - localizedString = localizedString.replace(/\{(\d+)\}/g, function (match, index) { - const value = tokens[index - 1]; - let ret = value; - if (typeof value === 'undefined') { - ret = match; - } - return ret; - }); - } - return localizedString; - } - - /** - * Handles language change for the player in components. Should be overriden by sub-components. - * - * @abstract - */ - handleLanguagechange() {} - - /** - * Return the `Component`s DOM element. This is where children get inserted. - * This will usually be the the same as the element returned in {@link Component#el}. - * - * @return {Element} - * The content element for this `Component`. - */ - contentEl() { - return this.contentEl_ || this.el_; - } - - /** - * Get this `Component`s ID - * - * @return {string} - * The id of this `Component` - */ - id() { - return this.id_; - } - - /** - * Get the `Component`s name. The name gets used to reference the `Component` - * and is set during registration. - * - * @return {string} - * The name of this `Component`. - */ - name() { - return this.name_; - } - - /** - * Get an array of all child components - * - * @return {Array} - * The children - */ - children() { - return this.children_; - } - - /** - * Returns the child `Component` with the given `id`. - * - * @param {string} id - * The id of the child `Component` to get. - * - * @return {Component|undefined} - * The child `Component` with the given `id` or undefined. - */ - getChildById(id) { - return this.childIndex_[id]; - } - - /** - * Returns the child `Component` with the given `name`. - * - * @param {string} name - * The name of the child `Component` to get. - * - * @return {Component|undefined} - * The child `Component` with the given `name` or undefined. - */ - getChild(name) { - if (!name) { - return; - } - return this.childNameIndex_[name]; - } - - /** - * Returns the descendant `Component` following the givent - * descendant `names`. For instance ['foo', 'bar', 'baz'] would - * try to get 'foo' on the current component, 'bar' on the 'foo' - * component and 'baz' on the 'bar' component and return undefined - * if any of those don't exist. - * - * @param {...string[]|...string} names - * The name of the child `Component` to get. - * - * @return {Component|undefined} - * The descendant `Component` following the given descendant - * `names` or undefined. - */ - getDescendant(...names) { - // flatten array argument into the main array - names = names.reduce((acc, n) => acc.concat(n), []); - let currentChild = this; - for (let i = 0; i < names.length; i++) { - currentChild = currentChild.getChild(names[i]); - if (!currentChild || !currentChild.getChild) { - return; - } - } - return currentChild; - } - - /** - * Add a child `Component` inside the current `Component`. - * - * - * @param {string|Component} child - * The name or instance of a child to add. - * - * @param {Object} [options={}] - * The key/value store of options that will get passed to children of - * the child. - * - * @param {number} [index=this.children_.length] - * The index to attempt to add a child into. - * - * @return {Component} - * The `Component` that gets added as a child. When using a string the - * `Component` will get created by this process. - */ - addChild(child, options = {}, index = this.children_.length) { - let component; - let componentName; - - // If child is a string, create component with options - if (typeof child === 'string') { - componentName = toTitleCase$1(child); - const componentClassName = options.componentClass || componentName; - - // Set name through options - options.name = componentName; - - // Create a new object & element for this controls set - // If there's no .player_, this is a player - const ComponentClass = Component$1.getComponent(componentClassName); - if (!ComponentClass) { - throw new Error(`Component ${componentClassName} does not exist`); - } - - // data stored directly on the videojs object may be - // misidentified as a component to retain - // backwards-compatibility with 4.x. check to make sure the - // component class can be instantiated. - if (typeof ComponentClass !== 'function') { - return null; - } - component = new ComponentClass(this.player_ || this, options); - - // child is a component instance - } else { - component = child; - } - if (component.parentComponent_) { - component.parentComponent_.removeChild(component); - } - this.children_.splice(index, 0, component); - component.parentComponent_ = this; - if (typeof component.id === 'function') { - this.childIndex_[component.id()] = component; - } - - // If a name wasn't used to create the component, check if we can use the - // name function of the component - componentName = componentName || component.name && toTitleCase$1(component.name()); - if (componentName) { - this.childNameIndex_[componentName] = component; - this.childNameIndex_[toLowerCase(componentName)] = component; - } - - // Add the UI object's element to the container div (box) - // Having an element is not required - if (typeof component.el === 'function' && component.el()) { - // If inserting before a component, insert before that component's element - let refNode = null; - if (this.children_[index + 1]) { - // Most children are components, but the video tech is an HTML element - if (this.children_[index + 1].el_) { - refNode = this.children_[index + 1].el_; - } else if (isEl(this.children_[index + 1])) { - refNode = this.children_[index + 1]; - } - } - this.contentEl().insertBefore(component.el(), refNode); - } - - // Return so it can stored on parent object if desired. - return component; - } - - /** - * Remove a child `Component` from this `Component`s list of children. Also removes - * the child `Component`s element from this `Component`s element. - * - * @param {Component} component - * The child `Component` to remove. - */ - removeChild(component) { - if (typeof component === 'string') { - component = this.getChild(component); - } - if (!component || !this.children_) { - return; - } - let childFound = false; - for (let i = this.children_.length - 1; i >= 0; i--) { - if (this.children_[i] === component) { - childFound = true; - this.children_.splice(i, 1); - break; - } - } - if (!childFound) { - return; - } - component.parentComponent_ = null; - this.childIndex_[component.id()] = null; - this.childNameIndex_[toTitleCase$1(component.name())] = null; - this.childNameIndex_[toLowerCase(component.name())] = null; - const compEl = component.el(); - if (compEl && compEl.parentNode === this.contentEl()) { - this.contentEl().removeChild(component.el()); - } - } - - /** - * Add and initialize default child `Component`s based upon options. - */ - initChildren() { - const children = this.options_.children; - if (children) { - // `this` is `parent` - const parentOptions = this.options_; - const handleAdd = child => { - const name = child.name; - let opts = child.opts; - - // Allow options for children to be set at the parent options - // e.g. videojs(id, { controlBar: false }); - // instead of videojs(id, { children: { controlBar: false }); - if (parentOptions[name] !== undefined) { - opts = parentOptions[name]; - } - - // Allow for disabling default components - // e.g. options['children']['posterImage'] = false - if (opts === false) { - return; - } - - // Allow options to be passed as a simple boolean if no configuration - // is necessary. - if (opts === true) { - opts = {}; - } - - // We also want to pass the original player options - // to each component as well so they don't need to - // reach back into the player for options later. - opts.playerOptions = this.options_.playerOptions; - - // Create and add the child component. - // Add a direct reference to the child by name on the parent instance. - // If two of the same component are used, different names should be supplied - // for each - const newChild = this.addChild(name, opts); - if (newChild) { - this[name] = newChild; - } - }; - - // Allow for an array of children details to passed in the options - let workingChildren; - const Tech = Component$1.getComponent('Tech'); - if (Array.isArray(children)) { - workingChildren = children; - } else { - workingChildren = Object.keys(children); - } - workingChildren - // children that are in this.options_ but also in workingChildren would - // give us extra children we do not want. So, we want to filter them out. - .concat(Object.keys(this.options_).filter(function (child) { - return !workingChildren.some(function (wchild) { - if (typeof wchild === 'string') { - return child === wchild; - } - return child === wchild.name; - }); - })).map(child => { - let name; - let opts; - if (typeof child === 'string') { - name = child; - opts = children[name] || this.options_[name] || {}; - } else { - name = child.name; - opts = child; - } - return { - name, - opts - }; - }).filter(child => { - // we have to make sure that child.name isn't in the techOrder since - // techs are registerd as Components but can't aren't compatible - // See https://github.com/videojs/video.js/issues/2772 - const c = Component$1.getComponent(child.opts.componentClass || toTitleCase$1(child.name)); - return c && !Tech.isTech(c); - }).forEach(handleAdd); - } - } - - /** - * Builds the default DOM class name. Should be overriden by sub-components. - * - * @return {string} - * The DOM class name for this object. - * - * @abstract - */ - buildCSSClass() { - // Child classes can include a function that does: - // return 'CLASS NAME' + this._super(); - return ''; - } - - /** - * Bind a listener to the component's ready state. - * Different from event listeners in that if the ready event has already happened - * it will trigger the function immediately. - * - * @param {ReadyCallback} fn - * Function that gets called when the `Component` is ready. - * - * @return {Component} - * Returns itself; method can be chained. - */ - ready(fn, sync = false) { - if (!fn) { - return; - } - if (!this.isReady_) { - this.readyQueue_ = this.readyQueue_ || []; - this.readyQueue_.push(fn); - return; - } - if (sync) { - fn.call(this); - } else { - // Call the function asynchronously by default for consistency - this.setTimeout(fn, 1); - } - } - - /** - * Trigger all the ready listeners for this `Component`. - * - * @fires Component#ready - */ - triggerReady() { - this.isReady_ = true; - - // Ensure ready is triggered asynchronously - this.setTimeout(function () { - const readyQueue = this.readyQueue_; - - // Reset Ready Queue - this.readyQueue_ = []; - if (readyQueue && readyQueue.length > 0) { - readyQueue.forEach(function (fn) { - fn.call(this); - }, this); - } - - // Allow for using event listeners also - /** - * Triggered when a `Component` is ready. - * - * @event Component#ready - * @type {Event} - */ - this.trigger('ready'); - }, 1); - } - - /** - * Find a single DOM element matching a `selector`. This can be within the `Component`s - * `contentEl()` or another custom context. - * - * @param {string} selector - * A valid CSS selector, which will be passed to `querySelector`. - * - * @param {Element|string} [context=this.contentEl()] - * A DOM element within which to query. Can also be a selector string in - * which case the first matching element will get used as context. If - * missing `this.contentEl()` gets used. If `this.contentEl()` returns - * nothing it falls back to `document`. - * - * @return {Element|null} - * the dom element that was found, or null - * - * @see [Information on CSS Selectors](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Selectors) - */ - $(selector, context) { - return $(selector, context || this.contentEl()); - } - - /** - * Finds all DOM element matching a `selector`. This can be within the `Component`s - * `contentEl()` or another custom context. - * - * @param {string} selector - * A valid CSS selector, which will be passed to `querySelectorAll`. - * - * @param {Element|string} [context=this.contentEl()] - * A DOM element within which to query. Can also be a selector string in - * which case the first matching element will get used as context. If - * missing `this.contentEl()` gets used. If `this.contentEl()` returns - * nothing it falls back to `document`. - * - * @return {NodeList} - * a list of dom elements that were found - * - * @see [Information on CSS Selectors](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Selectors) - */ - $$(selector, context) { - return $$(selector, context || this.contentEl()); - } - - /** - * Check if a component's element has a CSS class name. - * - * @param {string} classToCheck - * CSS class name to check. - * - * @return {boolean} - * - True if the `Component` has the class. - * - False if the `Component` does not have the class` - */ - hasClass(classToCheck) { - return hasClass(this.el_, classToCheck); - } - - /** - * Add a CSS class name to the `Component`s element. - * - * @param {...string} classesToAdd - * One or more CSS class name to add. - */ - addClass(...classesToAdd) { - addClass(this.el_, ...classesToAdd); - } - - /** - * Remove a CSS class name from the `Component`s element. - * - * @param {...string} classesToRemove - * One or more CSS class name to remove. - */ - removeClass(...classesToRemove) { - removeClass(this.el_, ...classesToRemove); - } - - /** - * Add or remove a CSS class name from the component's element. - * - `classToToggle` gets added when {@link Component#hasClass} would return false. - * - `classToToggle` gets removed when {@link Component#hasClass} would return true. - * - * @param {string} classToToggle - * The class to add or remove based on (@link Component#hasClass} - * - * @param {boolean|Dom~predicate} [predicate] - * An {@link Dom~predicate} function or a boolean - */ - toggleClass(classToToggle, predicate) { - toggleClass(this.el_, classToToggle, predicate); - } - - /** - * Show the `Component`s element if it is hidden by removing the - * 'vjs-hidden' class name from it. - */ - show() { - this.removeClass('vjs-hidden'); - } - - /** - * Hide the `Component`s element if it is currently showing by adding the - * 'vjs-hidden` class name to it. - */ - hide() { - this.addClass('vjs-hidden'); - } - - /** - * Lock a `Component`s element in its visible state by adding the 'vjs-lock-showing' - * class name to it. Used during fadeIn/fadeOut. - * - * @private - */ - lockShowing() { - this.addClass('vjs-lock-showing'); - } - - /** - * Unlock a `Component`s element from its visible state by removing the 'vjs-lock-showing' - * class name from it. Used during fadeIn/fadeOut. - * - * @private - */ - unlockShowing() { - this.removeClass('vjs-lock-showing'); - } - - /** - * Get the value of an attribute on the `Component`s element. - * - * @param {string} attribute - * Name of the attribute to get the value from. - * - * @return {string|null} - * - The value of the attribute that was asked for. - * - Can be an empty string on some browsers if the attribute does not exist - * or has no value - * - Most browsers will return null if the attibute does not exist or has - * no value. - * - * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttribute} - */ - getAttribute(attribute) { - return getAttribute(this.el_, attribute); - } - - /** - * Set the value of an attribute on the `Component`'s element - * - * @param {string} attribute - * Name of the attribute to set. - * - * @param {string} value - * Value to set the attribute to. - * - * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttribute} - */ - setAttribute(attribute, value) { - setAttribute(this.el_, attribute, value); - } - - /** - * Remove an attribute from the `Component`s element. - * - * @param {string} attribute - * Name of the attribute to remove. - * - * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/removeAttribute} - */ - removeAttribute(attribute) { - removeAttribute(this.el_, attribute); - } - - /** - * Get or set the width of the component based upon the CSS styles. - * See {@link Component#dimension} for more detailed information. - * - * @param {number|string} [num] - * The width that you want to set postfixed with '%', 'px' or nothing. - * - * @param {boolean} [skipListeners] - * Skip the componentresize event trigger - * - * @return {number|string} - * The width when getting, zero if there is no width. Can be a string - * postpixed with '%' or 'px'. - */ - width(num, skipListeners) { - return this.dimension('width', num, skipListeners); - } - - /** - * Get or set the height of the component based upon the CSS styles. - * See {@link Component#dimension} for more detailed information. - * - * @param {number|string} [num] - * The height that you want to set postfixed with '%', 'px' or nothing. - * - * @param {boolean} [skipListeners] - * Skip the componentresize event trigger - * - * @return {number|string} - * The width when getting, zero if there is no width. Can be a string - * postpixed with '%' or 'px'. - */ - height(num, skipListeners) { - return this.dimension('height', num, skipListeners); - } - - /** - * Set both the width and height of the `Component` element at the same time. - * - * @param {number|string} width - * Width to set the `Component`s element to. - * - * @param {number|string} height - * Height to set the `Component`s element to. - */ - dimensions(width, height) { - // Skip componentresize listeners on width for optimization - this.width(width, true); - this.height(height); - } - - /** - * Get or set width or height of the `Component` element. This is the shared code - * for the {@link Component#width} and {@link Component#height}. - * - * Things to know: - * - If the width or height in an number this will return the number postfixed with 'px'. - * - If the width/height is a percent this will return the percent postfixed with '%' - * - Hidden elements have a width of 0 with `window.getComputedStyle`. This function - * defaults to the `Component`s `style.width` and falls back to `window.getComputedStyle`. - * See [this]{@link http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/} - * for more information - * - If you want the computed style of the component, use {@link Component#currentWidth} - * and {@link {Component#currentHeight} - * - * @fires Component#componentresize - * - * @param {string} widthOrHeight - 8 'width' or 'height' - * - * @param {number|string} [num] - 8 New dimension - * - * @param {boolean} [skipListeners] - * Skip componentresize event trigger - * - * @return {number} - * The dimension when getting or 0 if unset - */ - dimension(widthOrHeight, num, skipListeners) { - if (num !== undefined) { - // Set to zero if null or literally NaN (NaN !== NaN) - if (num === null || num !== num) { - num = 0; - } - - // Check if using css width/height (% or px) and adjust - if (('' + num).indexOf('%') !== -1 || ('' + num).indexOf('px') !== -1) { - this.el_.style[widthOrHeight] = num; - } else if (num === 'auto') { - this.el_.style[widthOrHeight] = ''; - } else { - this.el_.style[widthOrHeight] = num + 'px'; - } - - // skipListeners allows us to avoid triggering the resize event when setting both width and height - if (!skipListeners) { - /** - * Triggered when a component is resized. - * - * @event Component#componentresize - * @type {Event} - */ - this.trigger('componentresize'); - } - return; - } - - // Not setting a value, so getting it - // Make sure element exists - if (!this.el_) { - return 0; - } - - // Get dimension value from style - const val = this.el_.style[widthOrHeight]; - const pxIndex = val.indexOf('px'); - if (pxIndex !== -1) { - // Return the pixel value with no 'px' - return parseInt(val.slice(0, pxIndex), 10); - } - - // No px so using % or no style was set, so falling back to offsetWidth/height - // If component has display:none, offset will return 0 - // TODO: handle display:none and no dimension style using px - return parseInt(this.el_['offset' + toTitleCase$1(widthOrHeight)], 10); - } - - /** - * Get the computed width or the height of the component's element. - * - * Uses `window.getComputedStyle`. - * - * @param {string} widthOrHeight - * A string containing 'width' or 'height'. Whichever one you want to get. - * - * @return {number} - * The dimension that gets asked for or 0 if nothing was set - * for that dimension. - */ - currentDimension(widthOrHeight) { - let computedWidthOrHeight = 0; - if (widthOrHeight !== 'width' && widthOrHeight !== 'height') { - throw new Error('currentDimension only accepts width or height value'); - } - computedWidthOrHeight = computedStyle(this.el_, widthOrHeight); - - // remove 'px' from variable and parse as integer - computedWidthOrHeight = parseFloat(computedWidthOrHeight); - - // if the computed value is still 0, it's possible that the browser is lying - // and we want to check the offset values. - // This code also runs wherever getComputedStyle doesn't exist. - if (computedWidthOrHeight === 0 || isNaN(computedWidthOrHeight)) { - const rule = `offset${toTitleCase$1(widthOrHeight)}`; - computedWidthOrHeight = this.el_[rule]; - } - return computedWidthOrHeight; - } - - /** - * An object that contains width and height values of the `Component`s - * computed style. Uses `window.getComputedStyle`. - * - * @typedef {Object} Component~DimensionObject - * - * @property {number} width - * The width of the `Component`s computed style. - * - * @property {number} height - * The height of the `Component`s computed style. - */ - - /** - * Get an object that contains computed width and height values of the - * component's element. - * - * Uses `window.getComputedStyle`. - * - * @return {Component~DimensionObject} - * The computed dimensions of the component's element. - */ - currentDimensions() { - return { - width: this.currentDimension('width'), - height: this.currentDimension('height') - }; - } - - /** - * Get the computed width of the component's element. - * - * Uses `window.getComputedStyle`. - * - * @return {number} - * The computed width of the component's element. - */ - currentWidth() { - return this.currentDimension('width'); - } - - /** - * Get the computed height of the component's element. - * - * Uses `window.getComputedStyle`. - * - * @return {number} - * The computed height of the component's element. - */ - currentHeight() { - return this.currentDimension('height'); - } - - /** - * Set the focus to this component - */ - focus() { - this.el_.focus(); - } - - /** - * Remove the focus from this component - */ - blur() { - this.el_.blur(); - } - - /** - * When this Component receives a `keydown` event which it does not process, - * it passes the event to the Player for handling. - * - * @param {Event} event - * The `keydown` event that caused this function to be called. - */ - handleKeyDown(event) { - if (this.player_) { - // We only stop propagation here because we want unhandled events to fall - // back to the browser. Exclude Tab for focus trapping. - if (!keycode__default["default"].isEventKey(event, 'Tab')) { - event.stopPropagation(); - } - this.player_.handleKeyDown(event); - } - } - - /** - * Many components used to have a `handleKeyPress` method, which was poorly - * named because it listened to a `keydown` event. This method name now - * delegates to `handleKeyDown`. This means anyone calling `handleKeyPress` - * will not see their method calls stop working. - * - * @param {Event} event - * The event that caused this function to be called. - */ - handleKeyPress(event) { - this.handleKeyDown(event); - } - - /** - * Emit a 'tap' events when touch event support gets detected. This gets used to - * support toggling the controls through a tap on the video. They get enabled - * because every sub-component would have extra overhead otherwise. - * - * @private - * @fires Component#tap - * @listens Component#touchstart - * @listens Component#touchmove - * @listens Component#touchleave - * @listens Component#touchcancel - * @listens Component#touchend - */ - emitTapEvents() { - // Track the start time so we can determine how long the touch lasted - let touchStart = 0; - let firstTouch = null; - - // Maximum movement allowed during a touch event to still be considered a tap - // Other popular libs use anywhere from 2 (hammer.js) to 15, - // so 10 seems like a nice, round number. - const tapMovementThreshold = 10; - - // The maximum length a touch can be while still being considered a tap - const touchTimeThreshold = 200; - let couldBeTap; - this.on('touchstart', function (event) { - // If more than one finger, don't consider treating this as a click - if (event.touches.length === 1) { - // Copy pageX/pageY from the object - firstTouch = { - pageX: event.touches[0].pageX, - pageY: event.touches[0].pageY - }; - // Record start time so we can detect a tap vs. "touch and hold" - touchStart = window__default["default"].performance.now(); - // Reset couldBeTap tracking - couldBeTap = true; - } - }); - this.on('touchmove', function (event) { - // If more than one finger, don't consider treating this as a click - if (event.touches.length > 1) { - couldBeTap = false; - } else if (firstTouch) { - // Some devices will throw touchmoves for all but the slightest of taps. - // So, if we moved only a small distance, this could still be a tap - const xdiff = event.touches[0].pageX - firstTouch.pageX; - const ydiff = event.touches[0].pageY - firstTouch.pageY; - const touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff); - if (touchDistance > tapMovementThreshold) { - couldBeTap = false; - } - } - }); - const noTap = function () { - couldBeTap = false; - }; - - // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s - this.on('touchleave', noTap); - this.on('touchcancel', noTap); - - // When the touch ends, measure how long it took and trigger the appropriate - // event - this.on('touchend', function (event) { - firstTouch = null; - // Proceed only if the touchmove/leave/cancel event didn't happen - if (couldBeTap === true) { - // Measure how long the touch lasted - const touchTime = window__default["default"].performance.now() - touchStart; - - // Make sure the touch was less than the threshold to be considered a tap - if (touchTime < touchTimeThreshold) { - // Don't let browser turn this into a click - event.preventDefault(); - /** - * Triggered when a `Component` is tapped. - * - * @event Component#tap - * @type {Event} - */ - this.trigger('tap'); - // It may be good to copy the touchend event object and change the - // type to tap, if the other event properties aren't exact after - // Events.fixEvent runs (e.g. event.target) - } - } - }); - } - - /** - * This function reports user activity whenever touch events happen. This can get - * turned off by any sub-components that wants touch events to act another way. - * - * Report user touch activity when touch events occur. User activity gets used to - * determine when controls should show/hide. It is simple when it comes to mouse - * events, because any mouse event should show the controls. So we capture mouse - * events that bubble up to the player and report activity when that happens. - * With touch events it isn't as easy as `touchstart` and `touchend` toggle player - * controls. So touch events can't help us at the player level either. - * - * User activity gets checked asynchronously. So what could happen is a tap event - * on the video turns the controls off. Then the `touchend` event bubbles up to - * the player. Which, if it reported user activity, would turn the controls right - * back on. We also don't want to completely block touch events from bubbling up. - * Furthermore a `touchmove` event and anything other than a tap, should not turn - * controls back on. - * - * @listens Component#touchstart - * @listens Component#touchmove - * @listens Component#touchend - * @listens Component#touchcancel - */ - enableTouchActivity() { - // Don't continue if the root player doesn't support reporting user activity - if (!this.player() || !this.player().reportUserActivity) { - return; - } - - // listener for reporting that the user is active - const report = bind_(this.player(), this.player().reportUserActivity); - let touchHolding; - this.on('touchstart', function () { - report(); - // For as long as the they are touching the device or have their mouse down, - // we consider them active even if they're not moving their finger or mouse. - // So we want to continue to update that they are active - this.clearInterval(touchHolding); - // report at the same interval as activityCheck - touchHolding = this.setInterval(report, 250); - }); - const touchEnd = function (event) { - report(); - // stop the interval that maintains activity if the touch is holding - this.clearInterval(touchHolding); - }; - this.on('touchmove', report); - this.on('touchend', touchEnd); - this.on('touchcancel', touchEnd); - } - - /** - * A callback that has no parameters and is bound into `Component`s context. - * - * @callback Component~GenericCallback - * @this Component - */ - - /** - * Creates a function that runs after an `x` millisecond timeout. This function is a - * wrapper around `window.setTimeout`. There are a few reasons to use this one - * instead though: - * 1. It gets cleared via {@link Component#clearTimeout} when - * {@link Component#dispose} gets called. - * 2. The function callback will gets turned into a {@link Component~GenericCallback} - * - * > Note: You can't use `window.clearTimeout` on the id returned by this function. This - * will cause its dispose listener not to get cleaned up! Please use - * {@link Component#clearTimeout} or {@link Component#dispose} instead. - * - * @param {Component~GenericCallback} fn - * The function that will be run after `timeout`. - * - * @param {number} timeout - * Timeout in milliseconds to delay before executing the specified function. - * - * @return {number} - * Returns a timeout ID that gets used to identify the timeout. It can also - * get used in {@link Component#clearTimeout} to clear the timeout that - * was set. - * - * @listens Component#dispose - * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout} - */ - setTimeout(fn, timeout) { - // declare as variables so they are properly available in timeout function - // eslint-disable-next-line - var timeoutId; - fn = bind_(this, fn); - this.clearTimersOnDispose_(); - timeoutId = window__default["default"].setTimeout(() => { - if (this.setTimeoutIds_.has(timeoutId)) { - this.setTimeoutIds_.delete(timeoutId); - } - fn(); - }, timeout); - this.setTimeoutIds_.add(timeoutId); - return timeoutId; - } - - /** - * Clears a timeout that gets created via `window.setTimeout` or - * {@link Component#setTimeout}. If you set a timeout via {@link Component#setTimeout} - * use this function instead of `window.clearTimout`. If you don't your dispose - * listener will not get cleaned up until {@link Component#dispose}! - * - * @param {number} timeoutId - * The id of the timeout to clear. The return value of - * {@link Component#setTimeout} or `window.setTimeout`. - * - * @return {number} - * Returns the timeout id that was cleared. - * - * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearTimeout} - */ - clearTimeout(timeoutId) { - if (this.setTimeoutIds_.has(timeoutId)) { - this.setTimeoutIds_.delete(timeoutId); - window__default["default"].clearTimeout(timeoutId); - } - return timeoutId; - } - - /** - * Creates a function that gets run every `x` milliseconds. This function is a wrapper - * around `window.setInterval`. There are a few reasons to use this one instead though. - * 1. It gets cleared via {@link Component#clearInterval} when - * {@link Component#dispose} gets called. - * 2. The function callback will be a {@link Component~GenericCallback} - * - * @param {Component~GenericCallback} fn - * The function to run every `x` seconds. - * - * @param {number} interval - * Execute the specified function every `x` milliseconds. - * - * @return {number} - * Returns an id that can be used to identify the interval. It can also be be used in - * {@link Component#clearInterval} to clear the interval. - * - * @listens Component#dispose - * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval} - */ - setInterval(fn, interval) { - fn = bind_(this, fn); - this.clearTimersOnDispose_(); - const intervalId = window__default["default"].setInterval(fn, interval); - this.setIntervalIds_.add(intervalId); - return intervalId; - } - - /** - * Clears an interval that gets created via `window.setInterval` or - * {@link Component#setInterval}. If you set an inteval via {@link Component#setInterval} - * use this function instead of `window.clearInterval`. If you don't your dispose - * listener will not get cleaned up until {@link Component#dispose}! - * - * @param {number} intervalId - * The id of the interval to clear. The return value of - * {@link Component#setInterval} or `window.setInterval`. - * - * @return {number} - * Returns the interval id that was cleared. - * - * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearInterval} - */ - clearInterval(intervalId) { - if (this.setIntervalIds_.has(intervalId)) { - this.setIntervalIds_.delete(intervalId); - window__default["default"].clearInterval(intervalId); - } - return intervalId; - } - - /** - * Queues up a callback to be passed to requestAnimationFrame (rAF), but - * with a few extra bonuses: - * - * - Supports browsers that do not support rAF by falling back to - * {@link Component#setTimeout}. - * - * - The callback is turned into a {@link Component~GenericCallback} (i.e. - * bound to the component). - * - * - Automatic cancellation of the rAF callback is handled if the component - * is disposed before it is called. - * - * @param {Component~GenericCallback} fn - * A function that will be bound to this component and executed just - * before the browser's next repaint. - * - * @return {number} - * Returns an rAF ID that gets used to identify the timeout. It can - * also be used in {@link Component#cancelAnimationFrame} to cancel - * the animation frame callback. - * - * @listens Component#dispose - * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame} - */ - requestAnimationFrame(fn) { - this.clearTimersOnDispose_(); - - // declare as variables so they are properly available in rAF function - // eslint-disable-next-line - var id; - fn = bind_(this, fn); - id = window__default["default"].requestAnimationFrame(() => { - if (this.rafIds_.has(id)) { - this.rafIds_.delete(id); - } - fn(); - }); - this.rafIds_.add(id); - return id; - } - - /** - * Request an animation frame, but only one named animation - * frame will be queued. Another will never be added until - * the previous one finishes. - * - * @param {string} name - * The name to give this requestAnimationFrame - * - * @param {Component~GenericCallback} fn - * A function that will be bound to this component and executed just - * before the browser's next repaint. - */ - requestNamedAnimationFrame(name, fn) { - if (this.namedRafs_.has(name)) { - return; - } - this.clearTimersOnDispose_(); - fn = bind_(this, fn); - const id = this.requestAnimationFrame(() => { - fn(); - if (this.namedRafs_.has(name)) { - this.namedRafs_.delete(name); - } - }); - this.namedRafs_.set(name, id); - return name; - } - - /** - * Cancels a current named animation frame if it exists. - * - * @param {string} name - * The name of the requestAnimationFrame to cancel. - */ - cancelNamedAnimationFrame(name) { - if (!this.namedRafs_.has(name)) { - return; - } - this.cancelAnimationFrame(this.namedRafs_.get(name)); - this.namedRafs_.delete(name); - } - - /** - * Cancels a queued callback passed to {@link Component#requestAnimationFrame} - * (rAF). - * - * If you queue an rAF callback via {@link Component#requestAnimationFrame}, - * use this function instead of `window.cancelAnimationFrame`. If you don't, - * your dispose listener will not get cleaned up until {@link Component#dispose}! - * - * @param {number} id - * The rAF ID to clear. The return value of {@link Component#requestAnimationFrame}. - * - * @return {number} - * Returns the rAF ID that was cleared. - * - * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/window/cancelAnimationFrame} - */ - cancelAnimationFrame(id) { - if (this.rafIds_.has(id)) { - this.rafIds_.delete(id); - window__default["default"].cancelAnimationFrame(id); - } - return id; - } - - /** - * A function to setup `requestAnimationFrame`, `setTimeout`, - * and `setInterval`, clearing on dispose. - * - * > Previously each timer added and removed dispose listeners on it's own. - * For better performance it was decided to batch them all, and use `Set`s - * to track outstanding timer ids. - * - * @private - */ - clearTimersOnDispose_() { - if (this.clearingTimersOnDispose_) { - return; - } - this.clearingTimersOnDispose_ = true; - this.one('dispose', () => { - [['namedRafs_', 'cancelNamedAnimationFrame'], ['rafIds_', 'cancelAnimationFrame'], ['setTimeoutIds_', 'clearTimeout'], ['setIntervalIds_', 'clearInterval']].forEach(([idName, cancelName]) => { - // for a `Set` key will actually be the value again - // so forEach((val, val) =>` but for maps we want to use - // the key. - this[idName].forEach((val, key) => this[cancelName](key)); - }); - this.clearingTimersOnDispose_ = false; - }); - } - - /** - * Register a `Component` with `videojs` given the name and the component. - * - * > NOTE: {@link Tech}s should not be registered as a `Component`. {@link Tech}s - * should be registered using {@link Tech.registerTech} or - * {@link videojs:videojs.registerTech}. - * - * > NOTE: This function can also be seen on videojs as - * {@link videojs:videojs.registerComponent}. - * - * @param {string} name - * The name of the `Component` to register. - * - * @param {Component} ComponentToRegister - * The `Component` class to register. - * - * @return {Component} - * The `Component` that was registered. - */ - static registerComponent(name, ComponentToRegister) { - if (typeof name !== 'string' || !name) { - throw new Error(`Illegal component name, "${name}"; must be a non-empty string.`); - } - const Tech = Component$1.getComponent('Tech'); - - // We need to make sure this check is only done if Tech has been registered. - const isTech = Tech && Tech.isTech(ComponentToRegister); - const isComp = Component$1 === ComponentToRegister || Component$1.prototype.isPrototypeOf(ComponentToRegister.prototype); - if (isTech || !isComp) { - let reason; - if (isTech) { - reason = 'techs must be registered using Tech.registerTech()'; - } else { - reason = 'must be a Component subclass'; - } - throw new Error(`Illegal component, "${name}"; ${reason}.`); - } - name = toTitleCase$1(name); - if (!Component$1.components_) { - Component$1.components_ = {}; - } - const Player = Component$1.getComponent('Player'); - if (name === 'Player' && Player && Player.players) { - const players = Player.players; - const playerNames = Object.keys(players); - - // If we have players that were disposed, then their name will still be - // in Players.players. So, we must loop through and verify that the value - // for each item is not null. This allows registration of the Player component - // after all players have been disposed or before any were created. - if (players && playerNames.length > 0 && playerNames.map(pname => players[pname]).every(Boolean)) { - throw new Error('Can not register Player component after player has been created.'); - } - } - Component$1.components_[name] = ComponentToRegister; - Component$1.components_[toLowerCase(name)] = ComponentToRegister; - return ComponentToRegister; - } - - /** - * Get a `Component` based on the name it was registered with. - * - * @param {string} name - * The Name of the component to get. - * - * @return {Component} - * The `Component` that got registered under the given name. - */ - static getComponent(name) { - if (!name || !Component$1.components_) { - return; - } - return Component$1.components_[name]; - } -} -Component$1.registerComponent('Component', Component$1); - -/** - * @file time.js - * @module time - */ - -/** - * Returns the time for the specified index at the start or end - * of a TimeRange object. - * - * @typedef {Function} TimeRangeIndex - * - * @param {number} [index=0] - * The range number to return the time for. - * - * @return {number} - * The time offset at the specified index. - * - * @deprecated The index argument must be provided. - * In the future, leaving it out will throw an error. - */ - -/** - * An object that contains ranges of time, which mimics {@link TimeRanges}. - * - * @typedef {Object} TimeRange - * - * @property {number} length - * The number of time ranges represented by this object. - * - * @property {module:time~TimeRangeIndex} start - * Returns the time offset at which a specified time range begins. - * - * @property {module:time~TimeRangeIndex} end - * Returns the time offset at which a specified time range ends. - * - * @see https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges - */ - -/** - * Check if any of the time ranges are over the maximum index. - * - * @private - * @param {string} fnName - * The function name to use for logging - * - * @param {number} index - * The index to check - * - * @param {number} maxIndex - * The maximum possible index - * - * @throws {Error} if the timeRanges provided are over the maxIndex - */ -function rangeCheck(fnName, index, maxIndex) { - if (typeof index !== 'number' || index < 0 || index > maxIndex) { - throw new Error(`Failed to execute '${fnName}' on 'TimeRanges': The index provided (${index}) is non-numeric or out of bounds (0-${maxIndex}).`); - } -} - -/** - * Get the time for the specified index at the start or end - * of a TimeRange object. - * - * @private - * @param {string} fnName - * The function name to use for logging - * - * @param {string} valueIndex - * The property that should be used to get the time. should be - * 'start' or 'end' - * - * @param {Array} ranges - * An array of time ranges - * - * @param {Array} [rangeIndex=0] - * The index to start the search at - * - * @return {number} - * The time that offset at the specified index. - * - * @deprecated rangeIndex must be set to a value, in the future this will throw an error. - * @throws {Error} if rangeIndex is more than the length of ranges - */ -function getRange(fnName, valueIndex, ranges, rangeIndex) { - rangeCheck(fnName, rangeIndex, ranges.length - 1); - return ranges[rangeIndex][valueIndex]; -} - -/** - * Create a time range object given ranges of time. - * - * @private - * @param {Array} [ranges] - * An array of time ranges. - * - * @return {TimeRange} - */ -function createTimeRangesObj(ranges) { - let timeRangesObj; - if (ranges === undefined || ranges.length === 0) { - timeRangesObj = { - length: 0, - start() { - throw new Error('This TimeRanges object is empty'); - }, - end() { - throw new Error('This TimeRanges object is empty'); - } - }; - } else { - timeRangesObj = { - length: ranges.length, - start: getRange.bind(null, 'start', 0, ranges), - end: getRange.bind(null, 'end', 1, ranges) - }; - } - if (window__default["default"].Symbol && window__default["default"].Symbol.iterator) { - timeRangesObj[window__default["default"].Symbol.iterator] = () => (ranges || []).values(); - } - return timeRangesObj; -} - -/** - * Create a `TimeRange` object which mimics an - * {@link https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges|HTML5 TimeRanges instance}. - * - * @param {number|Array[]} start - * The start of a single range (a number) or an array of ranges (an - * array of arrays of two numbers each). - * - * @param {number} end - * The end of a single range. Cannot be used with the array form of - * the `start` argument. - * - * @return {TimeRange} - */ -function createTimeRanges$1(start, end) { - if (Array.isArray(start)) { - return createTimeRangesObj(start); - } else if (start === undefined || end === undefined) { - return createTimeRangesObj(); - } - return createTimeRangesObj([[start, end]]); -} - -/** - * Format seconds as a time string, H:MM:SS or M:SS. Supplying a guide (in - * seconds) will force a number of leading zeros to cover the length of the - * guide. - * - * @private - * @param {number} seconds - * Number of seconds to be turned into a string - * - * @param {number} guide - * Number (in seconds) to model the string after - * - * @return {string} - * Time formatted as H:MM:SS or M:SS - */ -const defaultImplementation = function (seconds, guide) { - seconds = seconds < 0 ? 0 : seconds; - let s = Math.floor(seconds % 60); - let m = Math.floor(seconds / 60 % 60); - let h = Math.floor(seconds / 3600); - const gm = Math.floor(guide / 60 % 60); - const gh = Math.floor(guide / 3600); - - // handle invalid times - if (isNaN(seconds) || seconds === Infinity) { - // '-' is false for all relational operators (e.g. <, >=) so this setting - // will add the minimum number of fields specified by the guide - h = m = s = '-'; - } - - // Check if we need to show hours - h = h > 0 || gh > 0 ? h + ':' : ''; - - // If hours are showing, we may need to add a leading zero. - // Always show at least one digit of minutes. - m = ((h || gm >= 10) && m < 10 ? '0' + m : m) + ':'; - - // Check if leading zero is need for seconds - s = s < 10 ? '0' + s : s; - return h + m + s; -}; - -// Internal pointer to the current implementation. -let implementation = defaultImplementation; - -/** - * Replaces the default formatTime implementation with a custom implementation. - * - * @param {Function} customImplementation - * A function which will be used in place of the default formatTime - * implementation. Will receive the current time in seconds and the - * guide (in seconds) as arguments. - */ -function setFormatTime(customImplementation) { - implementation = customImplementation; -} - -/** - * Resets formatTime to the default implementation. - */ -function resetFormatTime() { - implementation = defaultImplementation; -} - -/** - * Delegates to either the default time formatting function or a custom - * function supplied via `setFormatTime`. - * - * Formats seconds as a time string (H:MM:SS or M:SS). Supplying a - * guide (in seconds) will force a number of leading zeros to cover the - * length of the guide. - * - * @example formatTime(125, 600) === "02:05" - * @param {number} seconds - * Number of seconds to be turned into a string - * - * @param {number} guide - * Number (in seconds) to model the string after - * - * @return {string} - * Time formatted as H:MM:SS or M:SS - */ -function formatTime(seconds, guide = seconds) { - return implementation(seconds, guide); -} - -var Time = /*#__PURE__*/Object.freeze({ - __proto__: null, - createTimeRanges: createTimeRanges$1, - createTimeRange: createTimeRanges$1, - setFormatTime: setFormatTime, - resetFormatTime: resetFormatTime, - formatTime: formatTime -}); - -/** - * @file buffer.js - * @module buffer - */ - -/** - * @typedef { import('./time').TimeRange } TimeRange - */ - -/** - * Compute the percentage of the media that has been buffered. - * - * @param {TimeRange} buffered - * The current `TimeRanges` object representing buffered time ranges - * - * @param {number} duration - * Total duration of the media - * - * @return {number} - * Percent buffered of the total duration in decimal form. - */ -function bufferedPercent(buffered, duration) { - let bufferedDuration = 0; - let start; - let end; - if (!duration) { - return 0; - } - if (!buffered || !buffered.length) { - buffered = createTimeRanges$1(0, 0); - } - for (let i = 0; i < buffered.length; i++) { - start = buffered.start(i); - end = buffered.end(i); - - // buffered end can be bigger than duration by a very small fraction - if (end > duration) { - end = duration; - } - bufferedDuration += end - start; - } - return bufferedDuration / duration; -} - -/** - * @file media-error.js - */ - -/** - * A Custom `MediaError` class which mimics the standard HTML5 `MediaError` class. - * - * @param {number|string|Object|MediaError} value - * This can be of multiple types: - * - number: should be a standard error code - * - string: an error message (the code will be 0) - * - Object: arbitrary properties - * - `MediaError` (native): used to populate a video.js `MediaError` object - * - `MediaError` (video.js): will return itself if it's already a - * video.js `MediaError` object. - * - * @see [MediaError Spec]{@link https://dev.w3.org/html5/spec-author-view/video.html#mediaerror} - * @see [Encrypted MediaError Spec]{@link https://www.w3.org/TR/2013/WD-encrypted-media-20130510/#error-codes} - * - * @class MediaError - */ -function MediaError(value) { - // Allow redundant calls to this constructor to avoid having `instanceof` - // checks peppered around the code. - if (value instanceof MediaError) { - return value; - } - if (typeof value === 'number') { - this.code = value; - } else if (typeof value === 'string') { - // default code is zero, so this is a custom error - this.message = value; - } else if (isObject(value)) { - // We assign the `code` property manually because native `MediaError` objects - // do not expose it as an own/enumerable property of the object. - if (typeof value.code === 'number') { - this.code = value.code; - } - Object.assign(this, value); - } - if (!this.message) { - this.message = MediaError.defaultMessages[this.code] || ''; - } -} - -/** - * The error code that refers two one of the defined `MediaError` types - * - * @type {Number} - */ -MediaError.prototype.code = 0; - -/** - * An optional message that to show with the error. Message is not part of the HTML5 - * video spec but allows for more informative custom errors. - * - * @type {String} - */ -MediaError.prototype.message = ''; - -/** - * An optional status code that can be set by plugins to allow even more detail about - * the error. For example a plugin might provide a specific HTTP status code and an - * error message for that code. Then when the plugin gets that error this class will - * know how to display an error message for it. This allows a custom message to show - * up on the `Player` error overlay. - * - * @type {Array} - */ -MediaError.prototype.status = null; - -/** - * Errors indexed by the W3C standard. The order **CANNOT CHANGE**! See the - * specification listed under {@link MediaError} for more information. - * - * @enum {array} - * @readonly - * @property {string} 0 - MEDIA_ERR_CUSTOM - * @property {string} 1 - MEDIA_ERR_ABORTED - * @property {string} 2 - MEDIA_ERR_NETWORK - * @property {string} 3 - MEDIA_ERR_DECODE - * @property {string} 4 - MEDIA_ERR_SRC_NOT_SUPPORTED - * @property {string} 5 - MEDIA_ERR_ENCRYPTED - */ -MediaError.errorTypes = ['MEDIA_ERR_CUSTOM', 'MEDIA_ERR_ABORTED', 'MEDIA_ERR_NETWORK', 'MEDIA_ERR_DECODE', 'MEDIA_ERR_SRC_NOT_SUPPORTED', 'MEDIA_ERR_ENCRYPTED']; - -/** - * The default `MediaError` messages based on the {@link MediaError.errorTypes}. - * - * @type {Array} - * @constant - */ -MediaError.defaultMessages = { - 1: 'You aborted the media playback', - 2: 'A network error caused the media download to fail part-way.', - 3: 'The media playback was aborted due to a corruption problem or because the media used features your browser did not support.', - 4: 'The media could not be loaded, either because the server or network failed or because the format is not supported.', - 5: 'The media is encrypted and we do not have the keys to decrypt it.' -}; - -// Add types as properties on MediaError -// e.g. MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = 4; -for (let errNum = 0; errNum < MediaError.errorTypes.length; errNum++) { - MediaError[MediaError.errorTypes[errNum]] = errNum; - // values should be accessible on both the class and instance - MediaError.prototype[MediaError.errorTypes[errNum]] = errNum; -} - -/** - * Returns whether an object is `Promise`-like (i.e. has a `then` method). - * - * @param {Object} value - * An object that may or may not be `Promise`-like. - * - * @return {boolean} - * Whether or not the object is `Promise`-like. - */ -function isPromise(value) { - return value !== undefined && value !== null && typeof value.then === 'function'; -} - -/** - * Silence a Promise-like object. - * - * This is useful for avoiding non-harmful, but potentially confusing "uncaught - * play promise" rejection error messages. - * - * @param {Object} value - * An object that may or may not be `Promise`-like. - */ -function silencePromise(value) { - if (isPromise(value)) { - value.then(null, e => {}); - } -} - -/** - * @file text-track-list-converter.js Utilities for capturing text track state and - * re-creating tracks based on a capture. - * - * @module text-track-list-converter - */ - -/** - * @typedef { import('../tech/tech').default } Tech - */ - -/** - * Examine a single {@link TextTrack} and return a JSON-compatible javascript object that - * represents the {@link TextTrack}'s state. - * - * @param {TextTrack} track - * The text track to query. - * - * @return {Object} - * A serializable javascript representation of the TextTrack. - * @private - */ -const trackToJson_ = function (track) { - const ret = ['kind', 'label', 'language', 'id', 'inBandMetadataTrackDispatchType', 'mode', 'src'].reduce((acc, prop, i) => { - if (track[prop]) { - acc[prop] = track[prop]; - } - return acc; - }, { - cues: track.cues && Array.prototype.map.call(track.cues, function (cue) { - return { - startTime: cue.startTime, - endTime: cue.endTime, - text: cue.text, - id: cue.id - }; - }) - }); - return ret; -}; - -/** - * Examine a {@link Tech} and return a JSON-compatible javascript array that represents the - * state of all {@link TextTrack}s currently configured. The return array is compatible with - * {@link text-track-list-converter:jsonToTextTracks}. - * - * @param {Tech} tech - * The tech object to query - * - * @return {Array} - * A serializable javascript representation of the {@link Tech}s - * {@link TextTrackList}. - */ -const textTracksToJson = function (tech) { - const trackEls = tech.$$('track'); - const trackObjs = Array.prototype.map.call(trackEls, t => t.track); - const tracks = Array.prototype.map.call(trackEls, function (trackEl) { - const json = trackToJson_(trackEl.track); - if (trackEl.src) { - json.src = trackEl.src; - } - return json; - }); - return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function (track) { - return trackObjs.indexOf(track) === -1; - }).map(trackToJson_)); -}; - -/** - * Create a set of remote {@link TextTrack}s on a {@link Tech} based on an array of javascript - * object {@link TextTrack} representations. - * - * @param {Array} json - * An array of `TextTrack` representation objects, like those that would be - * produced by `textTracksToJson`. - * - * @param {Tech} tech - * The `Tech` to create the `TextTrack`s on. - */ -const jsonToTextTracks = function (json, tech) { - json.forEach(function (track) { - const addedTrack = tech.addRemoteTextTrack(track).track; - if (!track.src && track.cues) { - track.cues.forEach(cue => addedTrack.addCue(cue)); - } - }); - return tech.textTracks(); -}; -var textTrackConverter = { - textTracksToJson, - jsonToTextTracks, - trackToJson_ -}; - -/** - * @file modal-dialog.js - */ - -/** - * @typedef { import('./player').default } Player - * @typedef { import('./utils/dom').ContentDescriptor} ContentDescriptor - */ - -const MODAL_CLASS_NAME = 'vjs-modal-dialog'; - -/** - * The `ModalDialog` displays over the video and its controls, which blocks - * interaction with the player until it is closed. - * - * Modal dialogs include a "Close" button and will close when that button - * is activated - or when ESC is pressed anywhere. - * - * @extends Component - */ -class ModalDialog extends Component$1 { - /** - * Create an instance of this class. - * - * @param {Player} player - * The `Player` that this class should be attached to. - * - * @param {Object} [options] - * The key/value store of player options. - * - * @param {ContentDescriptor} [options.content=undefined] - * Provide customized content for this modal. - * - * @param {string} [options.description] - * A text description for the modal, primarily for accessibility. - * - * @param {boolean} [options.fillAlways=false] - * Normally, modals are automatically filled only the first time - * they open. This tells the modal to refresh its content - * every time it opens. - * - * @param {string} [options.label] - * A text label for the modal, primarily for accessibility. - * - * @param {boolean} [options.pauseOnOpen=true] - * If `true`, playback will will be paused if playing when - * the modal opens, and resumed when it closes. - * - * @param {boolean} [options.temporary=true] - * If `true`, the modal can only be opened once; it will be - * disposed as soon as it's closed. - * - * @param {boolean} [options.uncloseable=false] - * If `true`, the user will not be able to close the modal - * through the UI in the normal ways. Programmatic closing is - * still possible. - */ - constructor(player, options) { - super(player, options); - this.handleKeyDown_ = e => this.handleKeyDown(e); - this.close_ = e => this.close(e); - this.opened_ = this.hasBeenOpened_ = this.hasBeenFilled_ = false; - this.closeable(!this.options_.uncloseable); - this.content(this.options_.content); - - // Make sure the contentEl is defined AFTER any children are initialized - // because we only want the contents of the modal in the contentEl - // (not the UI elements like the close button). - this.contentEl_ = createEl('div', { - className: `${MODAL_CLASS_NAME}-content` - }, { - role: 'document' - }); - this.descEl_ = createEl('p', { - className: `${MODAL_CLASS_NAME}-description vjs-control-text`, - id: this.el().getAttribute('aria-describedby') - }); - textContent(this.descEl_, this.description()); - this.el_.appendChild(this.descEl_); - this.el_.appendChild(this.contentEl_); - } - - /** - * Create the `ModalDialog`'s DOM element - * - * @return {Element} - * The DOM element that gets created. - */ - createEl() { - return super.createEl('div', { - className: this.buildCSSClass(), - tabIndex: -1 - }, { - 'aria-describedby': `${this.id()}_description`, - 'aria-hidden': 'true', - 'aria-label': this.label(), - 'role': 'dialog' - }); - } - dispose() { - this.contentEl_ = null; - this.descEl_ = null; - this.previouslyActiveEl_ = null; - super.dispose(); - } - - /** - * Builds the default DOM `className`. - * - * @return {string} - * The DOM `className` for this object. - */ - buildCSSClass() { - return `${MODAL_CLASS_NAME} vjs-hidden ${super.buildCSSClass()}`; - } - - /** - * Returns the label string for this modal. Primarily used for accessibility. - * - * @return {string} - * the localized or raw label of this modal. - */ - label() { - return this.localize(this.options_.label || 'Modal Window'); - } - - /** - * Returns the description string for this modal. Primarily used for - * accessibility. - * - * @return {string} - * The localized or raw description of this modal. - */ - description() { - let desc = this.options_.description || this.localize('This is a modal window.'); - - // Append a universal closeability message if the modal is closeable. - if (this.closeable()) { - desc += ' ' + this.localize('This modal can be closed by pressing the Escape key or activating the close button.'); - } - return desc; - } - - /** - * Opens the modal. - * - * @fires ModalDialog#beforemodalopen - * @fires ModalDialog#modalopen - */ - open() { - if (!this.opened_) { - const player = this.player(); - - /** - * Fired just before a `ModalDialog` is opened. - * - * @event ModalDialog#beforemodalopen - * @type {Event} - */ - this.trigger('beforemodalopen'); - this.opened_ = true; - - // Fill content if the modal has never opened before and - // never been filled. - if (this.options_.fillAlways || !this.hasBeenOpened_ && !this.hasBeenFilled_) { - this.fill(); - } - - // If the player was playing, pause it and take note of its previously - // playing state. - this.wasPlaying_ = !player.paused(); - if (this.options_.pauseOnOpen && this.wasPlaying_) { - player.pause(); - } - this.on('keydown', this.handleKeyDown_); - - // Hide controls and note if they were enabled. - this.hadControls_ = player.controls(); - player.controls(false); - this.show(); - this.conditionalFocus_(); - this.el().setAttribute('aria-hidden', 'false'); - - /** - * Fired just after a `ModalDialog` is opened. - * - * @event ModalDialog#modalopen - * @type {Event} - */ - this.trigger('modalopen'); - this.hasBeenOpened_ = true; - } - } - - /** - * If the `ModalDialog` is currently open or closed. - * - * @param {boolean} [value] - * If given, it will open (`true`) or close (`false`) the modal. - * - * @return {boolean} - * the current open state of the modaldialog - */ - opened(value) { - if (typeof value === 'boolean') { - this[value ? 'open' : 'close'](); - } - return this.opened_; - } - - /** - * Closes the modal, does nothing if the `ModalDialog` is - * not open. - * - * @fires ModalDialog#beforemodalclose - * @fires ModalDialog#modalclose - */ - close() { - if (!this.opened_) { - return; - } - const player = this.player(); - - /** - * Fired just before a `ModalDialog` is closed. - * - * @event ModalDialog#beforemodalclose - * @type {Event} - */ - this.trigger('beforemodalclose'); - this.opened_ = false; - if (this.wasPlaying_ && this.options_.pauseOnOpen) { - player.play(); - } - this.off('keydown', this.handleKeyDown_); - if (this.hadControls_) { - player.controls(true); - } - this.hide(); - this.el().setAttribute('aria-hidden', 'true'); - - /** - * Fired just after a `ModalDialog` is closed. - * - * @event ModalDialog#modalclose - * @type {Event} - */ - this.trigger('modalclose'); - this.conditionalBlur_(); - if (this.options_.temporary) { - this.dispose(); - } - } - - /** - * Check to see if the `ModalDialog` is closeable via the UI. - * - * @param {boolean} [value] - * If given as a boolean, it will set the `closeable` option. - * - * @return {boolean} - * Returns the final value of the closable option. - */ - closeable(value) { - if (typeof value === 'boolean') { - const closeable = this.closeable_ = !!value; - let close = this.getChild('closeButton'); - - // If this is being made closeable and has no close button, add one. - if (closeable && !close) { - // The close button should be a child of the modal - not its - // content element, so temporarily change the content element. - const temp = this.contentEl_; - this.contentEl_ = this.el_; - close = this.addChild('closeButton', { - controlText: 'Close Modal Dialog' - }); - this.contentEl_ = temp; - this.on(close, 'close', this.close_); - } - - // If this is being made uncloseable and has a close button, remove it. - if (!closeable && close) { - this.off(close, 'close', this.close_); - this.removeChild(close); - close.dispose(); - } - } - return this.closeable_; - } - - /** - * Fill the modal's content element with the modal's "content" option. - * The content element will be emptied before this change takes place. - */ - fill() { - this.fillWith(this.content()); - } - - /** - * Fill the modal's content element with arbitrary content. - * The content element will be emptied before this change takes place. - * - * @fires ModalDialog#beforemodalfill - * @fires ModalDialog#modalfill - * - * @param {ContentDescriptor} [content] - * The same rules apply to this as apply to the `content` option. - */ - fillWith(content) { - const contentEl = this.contentEl(); - const parentEl = contentEl.parentNode; - const nextSiblingEl = contentEl.nextSibling; - - /** - * Fired just before a `ModalDialog` is filled with content. - * - * @event ModalDialog#beforemodalfill - * @type {Event} - */ - this.trigger('beforemodalfill'); - this.hasBeenFilled_ = true; - - // Detach the content element from the DOM before performing - // manipulation to avoid modifying the live DOM multiple times. - parentEl.removeChild(contentEl); - this.empty(); - insertContent(contentEl, content); - /** - * Fired just after a `ModalDialog` is filled with content. - * - * @event ModalDialog#modalfill - * @type {Event} - */ - this.trigger('modalfill'); - - // Re-inject the re-filled content element. - if (nextSiblingEl) { - parentEl.insertBefore(contentEl, nextSiblingEl); - } else { - parentEl.appendChild(contentEl); - } - - // make sure that the close button is last in the dialog DOM - const closeButton = this.getChild('closeButton'); - if (closeButton) { - parentEl.appendChild(closeButton.el_); - } - } - - /** - * Empties the content element. This happens anytime the modal is filled. - * - * @fires ModalDialog#beforemodalempty - * @fires ModalDialog#modalempty - */ - empty() { - /** - * Fired just before a `ModalDialog` is emptied. - * - * @event ModalDialog#beforemodalempty - * @type {Event} - */ - this.trigger('beforemodalempty'); - emptyEl(this.contentEl()); - - /** - * Fired just after a `ModalDialog` is emptied. - * - * @event ModalDialog#modalempty - * @type {Event} - */ - this.trigger('modalempty'); - } - - /** - * Gets or sets the modal content, which gets normalized before being - * rendered into the DOM. - * - * This does not update the DOM or fill the modal, but it is called during - * that process. - * - * @param {ContentDescriptor} [value] - * If defined, sets the internal content value to be used on the - * next call(s) to `fill`. This value is normalized before being - * inserted. To "clear" the internal content value, pass `null`. - * - * @return {ContentDescriptor} - * The current content of the modal dialog - */ - content(value) { - if (typeof value !== 'undefined') { - this.content_ = value; - } - return this.content_; - } - - /** - * conditionally focus the modal dialog if focus was previously on the player. - * - * @private - */ - conditionalFocus_() { - const activeEl = document__default["default"].activeElement; - const playerEl = this.player_.el_; - this.previouslyActiveEl_ = null; - if (playerEl.contains(activeEl) || playerEl === activeEl) { - this.previouslyActiveEl_ = activeEl; - this.focus(); - } - } - - /** - * conditionally blur the element and refocus the last focused element - * - * @private - */ - conditionalBlur_() { - if (this.previouslyActiveEl_) { - this.previouslyActiveEl_.focus(); - this.previouslyActiveEl_ = null; - } - } - - /** - * Keydown handler. Attached when modal is focused. - * - * @listens keydown - */ - handleKeyDown(event) { - // Do not allow keydowns to reach out of the modal dialog. - event.stopPropagation(); - if (keycode__default["default"].isEventKey(event, 'Escape') && this.closeable()) { - event.preventDefault(); - this.close(); - return; - } - - // exit early if it isn't a tab key - if (!keycode__default["default"].isEventKey(event, 'Tab')) { - return; - } - const focusableEls = this.focusableEls_(); - const activeEl = this.el_.querySelector(':focus'); - let focusIndex; - for (let i = 0; i < focusableEls.length; i++) { - if (activeEl === focusableEls[i]) { - focusIndex = i; - break; - } - } - if (document__default["default"].activeElement === this.el_) { - focusIndex = 0; - } - if (event.shiftKey && focusIndex === 0) { - focusableEls[focusableEls.length - 1].focus(); - event.preventDefault(); - } else if (!event.shiftKey && focusIndex === focusableEls.length - 1) { - focusableEls[0].focus(); - event.preventDefault(); - } - } - - /** - * get all focusable elements - * - * @private - */ - focusableEls_() { - const allChildren = this.el_.querySelectorAll('*'); - return Array.prototype.filter.call(allChildren, child => { - return (child instanceof window__default["default"].HTMLAnchorElement || child instanceof window__default["default"].HTMLAreaElement) && child.hasAttribute('href') || (child instanceof window__default["default"].HTMLInputElement || child instanceof window__default["default"].HTMLSelectElement || child instanceof window__default["default"].HTMLTextAreaElement || child instanceof window__default["default"].HTMLButtonElement) && !child.hasAttribute('disabled') || child instanceof window__default["default"].HTMLIFrameElement || child instanceof window__default["default"].HTMLObjectElement || child instanceof window__default["default"].HTMLEmbedElement || child.hasAttribute('tabindex') && child.getAttribute('tabindex') !== -1 || child.hasAttribute('contenteditable'); - }); - } -} - -/** - * Default options for `ModalDialog` default options. - * - * @type {Object} - * @private - */ -ModalDialog.prototype.options_ = { - pauseOnOpen: true, - temporary: true -}; -Component$1.registerComponent('ModalDialog', ModalDialog); - -/** - * @file track-list.js - */ - -/** - * @typedef { import('./track').default } Track - */ - -/** - * Common functionaliy between {@link TextTrackList}, {@link AudioTrackList}, and - * {@link VideoTrackList} - * - * @extends EventTarget - */ -class TrackList extends EventTarget$2 { - /** - * Create an instance of this class - * - * @param {Track[]} tracks - * A list of tracks to initialize the list with. - * - * @abstract - */ - constructor(tracks = []) { - super(); - this.tracks_ = []; - - /** - * @memberof TrackList - * @member {number} length - * The current number of `Track`s in the this Trackist. - * @instance - */ - Object.defineProperty(this, 'length', { - get() { - return this.tracks_.length; - } - }); - for (let i = 0; i < tracks.length; i++) { - this.addTrack(tracks[i]); - } - } - - /** - * Add a {@link Track} to the `TrackList` - * - * @param {Track} track - * The audio, video, or text track to add to the list. - * - * @fires TrackList#addtrack - */ - addTrack(track) { - const index = this.tracks_.length; - if (!('' + index in this)) { - Object.defineProperty(this, index, { - get() { - return this.tracks_[index]; - } - }); - } - - // Do not add duplicate tracks - if (this.tracks_.indexOf(track) === -1) { - this.tracks_.push(track); - /** - * Triggered when a track is added to a track list. - * - * @event TrackList#addtrack - * @type {Event} - * @property {Track} track - * A reference to track that was added. - */ - this.trigger({ - track, - type: 'addtrack', - target: this - }); - } - - /** - * Triggered when a track label is changed. - * - * @event TrackList#addtrack - * @type {Event} - * @property {Track} track - * A reference to track that was added. - */ - track.labelchange_ = () => { - this.trigger({ - track, - type: 'labelchange', - target: this - }); - }; - if (isEvented(track)) { - track.addEventListener('labelchange', track.labelchange_); - } - } - - /** - * Remove a {@link Track} from the `TrackList` - * - * @param {Track} rtrack - * The audio, video, or text track to remove from the list. - * - * @fires TrackList#removetrack - */ - removeTrack(rtrack) { - let track; - for (let i = 0, l = this.length; i < l; i++) { - if (this[i] === rtrack) { - track = this[i]; - if (track.off) { - track.off(); - } - this.tracks_.splice(i, 1); - break; - } - } - if (!track) { - return; - } - - /** - * Triggered when a track is removed from track list. - * - * @event TrackList#removetrack - * @type {Event} - * @property {Track} track - * A reference to track that was removed. - */ - this.trigger({ - track, - type: 'removetrack', - target: this - }); - } - - /** - * Get a Track from the TrackList by a tracks id - * - * @param {string} id - the id of the track to get - * @method getTrackById - * @return {Track} - * @private - */ - getTrackById(id) { - let result = null; - for (let i = 0, l = this.length; i < l; i++) { - const track = this[i]; - if (track.id === id) { - result = track; - break; - } - } - return result; - } -} - -/** - * Triggered when a different track is selected/enabled. - * - * @event TrackList#change - * @type {Event} - */ - -/** - * Events that can be called with on + eventName. See {@link EventHandler}. - * - * @property {Object} TrackList#allowedEvents_ - * @private - */ -TrackList.prototype.allowedEvents_ = { - change: 'change', - addtrack: 'addtrack', - removetrack: 'removetrack', - labelchange: 'labelchange' -}; - -// emulate attribute EventHandler support to allow for feature detection -for (const event in TrackList.prototype.allowedEvents_) { - TrackList.prototype['on' + event] = null; -} - -/** - * @file audio-track-list.js - */ - -/** - * @typedef { import('./audio-track').default } AudioTrack - */ - -/** - * Anywhere we call this function we diverge from the spec - * as we only support one enabled audiotrack at a time - * - * @param {AudioTrackList} list - * list to work on - * - * @param {AudioTrack} track - * The track to skip - * - * @private - */ -const disableOthers$1 = function (list, track) { - for (let i = 0; i < list.length; i++) { - if (!Object.keys(list[i]).length || track.id === list[i].id) { - continue; - } - // another audio track is enabled, disable it - list[i].enabled = false; - } -}; - -/** - * The current list of {@link AudioTrack} for a media file. - * - * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist} - * @extends TrackList - */ -class AudioTrackList extends TrackList { - /** - * Create an instance of this class. - * - * @param {AudioTrack[]} [tracks=[]] - * A list of `AudioTrack` to instantiate the list with. - */ - constructor(tracks = []) { - // make sure only 1 track is enabled - // sorted from last index to first index - for (let i = tracks.length - 1; i >= 0; i--) { - if (tracks[i].enabled) { - disableOthers$1(tracks, tracks[i]); - break; - } - } - super(tracks); - this.changing_ = false; - } - - /** - * Add an {@link AudioTrack} to the `AudioTrackList`. - * - * @param {AudioTrack} track - * The AudioTrack to add to the list - * - * @fires TrackList#addtrack - */ - addTrack(track) { - if (track.enabled) { - disableOthers$1(this, track); - } - super.addTrack(track); - // native tracks don't have this - if (!track.addEventListener) { - return; - } - track.enabledChange_ = () => { - // when we are disabling other tracks (since we don't support - // more than one track at a time) we will set changing_ - // to true so that we don't trigger additional change events - if (this.changing_) { - return; - } - this.changing_ = true; - disableOthers$1(this, track); - this.changing_ = false; - this.trigger('change'); - }; - - /** - * @listens AudioTrack#enabledchange - * @fires TrackList#change - */ - track.addEventListener('enabledchange', track.enabledChange_); - } - removeTrack(rtrack) { - super.removeTrack(rtrack); - if (rtrack.removeEventListener && rtrack.enabledChange_) { - rtrack.removeEventListener('enabledchange', rtrack.enabledChange_); - rtrack.enabledChange_ = null; - } - } -} - -/** - * @file video-track-list.js - */ - -/** - * @typedef { import('./video-track').default } VideoTrack - */ - -/** - * Un-select all other {@link VideoTrack}s that are selected. - * - * @param {VideoTrackList} list - * list to work on - * - * @param {VideoTrack} track - * The track to skip - * - * @private - */ -const disableOthers = function (list, track) { - for (let i = 0; i < list.length; i++) { - if (!Object.keys(list[i]).length || track.id === list[i].id) { - continue; - } - // another video track is enabled, disable it - list[i].selected = false; - } -}; - -/** - * The current list of {@link VideoTrack} for a video. - * - * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist} - * @extends TrackList - */ -class VideoTrackList extends TrackList { - /** - * Create an instance of this class. - * - * @param {VideoTrack[]} [tracks=[]] - * A list of `VideoTrack` to instantiate the list with. - */ - constructor(tracks = []) { - // make sure only 1 track is enabled - // sorted from last index to first index - for (let i = tracks.length - 1; i >= 0; i--) { - if (tracks[i].selected) { - disableOthers(tracks, tracks[i]); - break; - } - } - super(tracks); - this.changing_ = false; - - /** - * @member {number} VideoTrackList#selectedIndex - * The current index of the selected {@link VideoTrack`}. - */ - Object.defineProperty(this, 'selectedIndex', { - get() { - for (let i = 0; i < this.length; i++) { - if (this[i].selected) { - return i; - } - } - return -1; - }, - set() {} - }); - } - - /** - * Add a {@link VideoTrack} to the `VideoTrackList`. - * - * @param {VideoTrack} track - * The VideoTrack to add to the list - * - * @fires TrackList#addtrack - */ - addTrack(track) { - if (track.selected) { - disableOthers(this, track); - } - super.addTrack(track); - // native tracks don't have this - if (!track.addEventListener) { - return; - } - track.selectedChange_ = () => { - if (this.changing_) { - return; - } - this.changing_ = true; - disableOthers(this, track); - this.changing_ = false; - this.trigger('change'); - }; - - /** - * @listens VideoTrack#selectedchange - * @fires TrackList#change - */ - track.addEventListener('selectedchange', track.selectedChange_); - } - removeTrack(rtrack) { - super.removeTrack(rtrack); - if (rtrack.removeEventListener && rtrack.selectedChange_) { - rtrack.removeEventListener('selectedchange', rtrack.selectedChange_); - rtrack.selectedChange_ = null; - } - } -} - -/** - * @file text-track-list.js - */ - -/** - * @typedef { import('./text-track').default } TextTrack - */ - -/** - * The current list of {@link TextTrack} for a media file. - * - * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist} - * @extends TrackList - */ -class TextTrackList extends TrackList { - /** - * Add a {@link TextTrack} to the `TextTrackList` - * - * @param {TextTrack} track - * The text track to add to the list. - * - * @fires TrackList#addtrack - */ - addTrack(track) { - super.addTrack(track); - if (!this.queueChange_) { - this.queueChange_ = () => this.queueTrigger('change'); - } - if (!this.triggerSelectedlanguagechange) { - this.triggerSelectedlanguagechange_ = () => this.trigger('selectedlanguagechange'); - } - - /** - * @listens TextTrack#modechange - * @fires TrackList#change - */ - track.addEventListener('modechange', this.queueChange_); - const nonLanguageTextTrackKind = ['metadata', 'chapters']; - if (nonLanguageTextTrackKind.indexOf(track.kind) === -1) { - track.addEventListener('modechange', this.triggerSelectedlanguagechange_); - } - } - removeTrack(rtrack) { - super.removeTrack(rtrack); - - // manually remove the event handlers we added - if (rtrack.removeEventListener) { - if (this.queueChange_) { - rtrack.removeEventListener('modechange', this.queueChange_); - } - if (this.selectedlanguagechange_) { - rtrack.removeEventListener('modechange', this.triggerSelectedlanguagechange_); - } - } - } -} - -/** - * @file html-track-element-list.js - */ - -/** - * The current list of {@link HtmlTrackElement}s. - */ -class HtmlTrackElementList { - /** - * Create an instance of this class. - * - * @param {HtmlTrackElement[]} [tracks=[]] - * A list of `HtmlTrackElement` to instantiate the list with. - */ - constructor(trackElements = []) { - this.trackElements_ = []; - - /** - * @memberof HtmlTrackElementList - * @member {number} length - * The current number of `Track`s in the this Trackist. - * @instance - */ - Object.defineProperty(this, 'length', { - get() { - return this.trackElements_.length; - } - }); - for (let i = 0, length = trackElements.length; i < length; i++) { - this.addTrackElement_(trackElements[i]); - } - } - - /** - * Add an {@link HtmlTrackElement} to the `HtmlTrackElementList` - * - * @param {HtmlTrackElement} trackElement - * The track element to add to the list. - * - * @private - */ - addTrackElement_(trackElement) { - const index = this.trackElements_.length; - if (!('' + index in this)) { - Object.defineProperty(this, index, { - get() { - return this.trackElements_[index]; - } - }); - } - - // Do not add duplicate elements - if (this.trackElements_.indexOf(trackElement) === -1) { - this.trackElements_.push(trackElement); - } - } - - /** - * Get an {@link HtmlTrackElement} from the `HtmlTrackElementList` given an - * {@link TextTrack}. - * - * @param {TextTrack} track - * The track associated with a track element. - * - * @return {HtmlTrackElement|undefined} - * The track element that was found or undefined. - * - * @private - */ - getTrackElementByTrack_(track) { - let trackElement_; - for (let i = 0, length = this.trackElements_.length; i < length; i++) { - if (track === this.trackElements_[i].track) { - trackElement_ = this.trackElements_[i]; - break; - } - } - return trackElement_; - } - - /** - * Remove a {@link HtmlTrackElement} from the `HtmlTrackElementList` - * - * @param {HtmlTrackElement} trackElement - * The track element to remove from the list. - * - * @private - */ - removeTrackElement_(trackElement) { - for (let i = 0, length = this.trackElements_.length; i < length; i++) { - if (trackElement === this.trackElements_[i]) { - if (this.trackElements_[i].track && typeof this.trackElements_[i].track.off === 'function') { - this.trackElements_[i].track.off(); - } - if (typeof this.trackElements_[i].off === 'function') { - this.trackElements_[i].off(); - } - this.trackElements_.splice(i, 1); - break; - } - } - } -} - -/** - * @file text-track-cue-list.js - */ - -/** - * @typedef {Object} TextTrackCueList~TextTrackCue - * - * @property {string} id - * The unique id for this text track cue - * - * @property {number} startTime - * The start time for this text track cue - * - * @property {number} endTime - * The end time for this text track cue - * - * @property {boolean} pauseOnExit - * Pause when the end time is reached if true. - * - * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcue} - */ - -/** - * A List of TextTrackCues. - * - * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist} - */ -class TextTrackCueList { - /** - * Create an instance of this class.. - * - * @param {Array} cues - * A list of cues to be initialized with - */ - constructor(cues) { - TextTrackCueList.prototype.setCues_.call(this, cues); - - /** - * @memberof TextTrackCueList - * @member {number} length - * The current number of `TextTrackCue`s in the TextTrackCueList. - * @instance - */ - Object.defineProperty(this, 'length', { - get() { - return this.length_; - } - }); - } - - /** - * A setter for cues in this list. Creates getters - * an an index for the cues. - * - * @param {Array} cues - * An array of cues to set - * - * @private - */ - setCues_(cues) { - const oldLength = this.length || 0; - let i = 0; - const l = cues.length; - this.cues_ = cues; - this.length_ = cues.length; - const defineProp = function (index) { - if (!('' + index in this)) { - Object.defineProperty(this, '' + index, { - get() { - return this.cues_[index]; - } - }); - } - }; - if (oldLength < l) { - i = oldLength; - for (; i < l; i++) { - defineProp.call(this, i); - } - } - } - - /** - * Get a `TextTrackCue` that is currently in the `TextTrackCueList` by id. - * - * @param {string} id - * The id of the cue that should be searched for. - * - * @return {TextTrackCueList~TextTrackCue|null} - * A single cue or null if none was found. - */ - getCueById(id) { - let result = null; - for (let i = 0, l = this.length; i < l; i++) { - const cue = this[i]; - if (cue.id === id) { - result = cue; - break; - } - } - return result; - } -} - -/** - * @file track-kinds.js - */ - -/** - * All possible `VideoTrackKind`s - * - * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-videotrack-kind - * @typedef VideoTrack~Kind - * @enum - */ -const VideoTrackKind = { - alternative: 'alternative', - captions: 'captions', - main: 'main', - sign: 'sign', - subtitles: 'subtitles', - commentary: 'commentary' -}; - -/** - * All possible `AudioTrackKind`s - * - * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-audiotrack-kind - * @typedef AudioTrack~Kind - * @enum - */ -const AudioTrackKind = { - 'alternative': 'alternative', - 'descriptions': 'descriptions', - 'main': 'main', - 'main-desc': 'main-desc', - 'translation': 'translation', - 'commentary': 'commentary' -}; - -/** - * All possible `TextTrackKind`s - * - * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-texttrack-kind - * @typedef TextTrack~Kind - * @enum - */ -const TextTrackKind = { - subtitles: 'subtitles', - captions: 'captions', - descriptions: 'descriptions', - chapters: 'chapters', - metadata: 'metadata' -}; - -/** - * All possible `TextTrackMode`s - * - * @see https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode - * @typedef TextTrack~Mode - * @enum - */ -const TextTrackMode = { - disabled: 'disabled', - hidden: 'hidden', - showing: 'showing' -}; - -/** - * @file track.js - */ - -/** - * A Track class that contains all of the common functionality for {@link AudioTrack}, - * {@link VideoTrack}, and {@link TextTrack}. - * - * > Note: This class should not be used directly - * - * @see {@link https://html.spec.whatwg.org/multipage/embedded-content.html} - * @extends EventTarget - * @abstract - */ -class Track extends EventTarget$2 { - /** - * Create an instance of this class. - * - * @param {Object} [options={}] - * Object of option names and values - * - * @param {string} [options.kind=''] - * A valid kind for the track type you are creating. - * - * @param {string} [options.id='vjs_track_' + Guid.newGUID()] - * A unique id for this AudioTrack. - * - * @param {string} [options.label=''] - * The menu label for this track. - * - * @param {string} [options.language=''] - * A valid two character language code. - * - * @abstract - */ - constructor(options = {}) { - super(); - const trackProps = { - id: options.id || 'vjs_track_' + newGUID(), - kind: options.kind || '', - language: options.language || '' - }; - let label = options.label || ''; - - /** - * @memberof Track - * @member {string} id - * The id of this track. Cannot be changed after creation. - * @instance - * - * @readonly - */ - - /** - * @memberof Track - * @member {string} kind - * The kind of track that this is. Cannot be changed after creation. - * @instance - * - * @readonly - */ - - /** - * @memberof Track - * @member {string} language - * The two letter language code for this track. Cannot be changed after - * creation. - * @instance - * - * @readonly - */ - - for (const key in trackProps) { - Object.defineProperty(this, key, { - get() { - return trackProps[key]; - }, - set() {} - }); - } - - /** - * @memberof Track - * @member {string} label - * The label of this track. Cannot be changed after creation. - * @instance - * - * @fires Track#labelchange - */ - Object.defineProperty(this, 'label', { - get() { - return label; - }, - set(newLabel) { - if (newLabel !== label) { - label = newLabel; - - /** - * An event that fires when label changes on this track. - * - * > Note: This is not part of the spec! - * - * @event Track#labelchange - * @type {Event} - */ - this.trigger('labelchange'); - } - } - }); - } -} - -/** - * @file url.js - * @module url - */ - -/** - * @typedef {Object} url:URLObject - * - * @property {string} protocol - * The protocol of the url that was parsed. - * - * @property {string} hostname - * The hostname of the url that was parsed. - * - * @property {string} port - * The port of the url that was parsed. - * - * @property {string} pathname - * The pathname of the url that was parsed. - * - * @property {string} search - * The search query of the url that was parsed. - * - * @property {string} hash - * The hash of the url that was parsed. - * - * @property {string} host - * The host of the url that was parsed. - */ - -/** - * Resolve and parse the elements of a URL. - * - * @function - * @param {String} url - * The url to parse - * - * @return {url:URLObject} - * An object of url details - */ -const parseUrl = function (url) { - // This entire method can be replace with URL once we are able to drop IE11 - - const props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host']; - - // add the url to an anchor and let the browser parse the URL - const a = document__default["default"].createElement('a'); - a.href = url; - - // Copy the specific URL properties to a new object - // This is also needed for IE because the anchor loses its - // properties when it's removed from the dom - const details = {}; - for (let i = 0; i < props.length; i++) { - details[props[i]] = a[props[i]]; - } - - // IE adds the port to the host property unlike everyone else. If - // a port identifier is added for standard ports, strip it. - if (details.protocol === 'http:') { - details.host = details.host.replace(/:80$/, ''); - } - if (details.protocol === 'https:') { - details.host = details.host.replace(/:443$/, ''); - } - if (!details.protocol) { - details.protocol = window__default["default"].location.protocol; - } - - /* istanbul ignore if */ - if (!details.host) { - details.host = window__default["default"].location.host; - } - return details; -}; - -/** - * Get absolute version of relative URL. - * - * @function - * @param {string} url - * URL to make absolute - * - * @return {string} - * Absolute URL - * - * @see http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue - */ -const getAbsoluteURL = function (url) { - // Check if absolute URL - if (!url.match(/^https?:\/\//)) { - // Add the url to an anchor and let the browser parse it to convert to an absolute url - const a = document__default["default"].createElement('a'); - a.href = url; - url = a.href; - } - return url; -}; - -/** - * Returns the extension of the passed file name. It will return an empty string - * if passed an invalid path. - * - * @function - * @param {string} path - * The fileName path like '/path/to/file.mp4' - * - * @return {string} - * The extension in lower case or an empty string if no - * extension could be found. - */ -const getFileExtension = function (path) { - if (typeof path === 'string') { - const splitPathRe = /^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/; - const pathParts = splitPathRe.exec(path); - if (pathParts) { - return pathParts.pop().toLowerCase(); - } - } - return ''; -}; - -/** - * Returns whether the url passed is a cross domain request or not. - * - * @function - * @param {string} url - * The url to check. - * - * @param {Object} [winLoc] - * the domain to check the url against, defaults to window.location - * - * @param {string} [winLoc.protocol] - * The window location protocol defaults to window.location.protocol - * - * @param {string} [winLoc.host] - * The window location host defaults to window.location.host - * - * @return {boolean} - * Whether it is a cross domain request or not. - */ -const isCrossOrigin = function (url, winLoc = window__default["default"].location) { - const urlInfo = parseUrl(url); - - // IE8 protocol relative urls will return ':' for protocol - const srcProtocol = urlInfo.protocol === ':' ? winLoc.protocol : urlInfo.protocol; - - // Check if url is for another domain/origin - // IE8 doesn't know location.origin, so we won't rely on it here - const crossOrigin = srcProtocol + urlInfo.host !== winLoc.protocol + winLoc.host; - return crossOrigin; -}; - -var Url = /*#__PURE__*/Object.freeze({ - __proto__: null, - parseUrl: parseUrl, - getAbsoluteURL: getAbsoluteURL, - getFileExtension: getFileExtension, - isCrossOrigin: isCrossOrigin -}); - -/** - * @file text-track.js - */ - -/** - * @typedef { import('../tech/tech').default } Tech - */ - -/** - * Takes a webvtt file contents and parses it into cues - * - * @param {string} srcContent - * webVTT file contents - * - * @param {TextTrack} track - * TextTrack to add cues to. Cues come from the srcContent. - * - * @private - */ -const parseCues = function (srcContent, track) { - const parser = new window__default["default"].WebVTT.Parser(window__default["default"], window__default["default"].vttjs, window__default["default"].WebVTT.StringDecoder()); - const errors = []; - parser.oncue = function (cue) { - track.addCue(cue); - }; - parser.onparsingerror = function (error) { - errors.push(error); - }; - parser.onflush = function () { - track.trigger({ - type: 'loadeddata', - target: track - }); - }; - parser.parse(srcContent); - if (errors.length > 0) { - if (window__default["default"].console && window__default["default"].console.groupCollapsed) { - window__default["default"].console.groupCollapsed(`Text Track parsing errors for ${track.src}`); - } - errors.forEach(error => log$1.error(error)); - if (window__default["default"].console && window__default["default"].console.groupEnd) { - window__default["default"].console.groupEnd(); - } - } - parser.flush(); -}; - -/** - * Load a `TextTrack` from a specified url. - * - * @param {string} src - * Url to load track from. - * - * @param {TextTrack} track - * Track to add cues to. Comes from the content at the end of `url`. - * - * @private - */ -const loadTrack = function (src, track) { - const opts = { - uri: src - }; - const crossOrigin = isCrossOrigin(src); - if (crossOrigin) { - opts.cors = crossOrigin; - } - const withCredentials = track.tech_.crossOrigin() === 'use-credentials'; - if (withCredentials) { - opts.withCredentials = withCredentials; - } - XHR__default["default"](opts, bind_(this, function (err, response, responseBody) { - if (err) { - return log$1.error(err, response); - } - track.loaded_ = true; - - // Make sure that vttjs has loaded, otherwise, wait till it finished loading - // NOTE: this is only used for the alt/video.novtt.js build - if (typeof window__default["default"].WebVTT !== 'function') { - if (track.tech_) { - // to prevent use before define eslint error, we define loadHandler - // as a let here - track.tech_.any(['vttjsloaded', 'vttjserror'], event => { - if (event.type === 'vttjserror') { - log$1.error(`vttjs failed to load, stopping trying to process ${track.src}`); - return; - } - return parseCues(responseBody, track); - }); - } - } else { - parseCues(responseBody, track); - } - })); -}; - -/** - * A representation of a single `TextTrack`. - * - * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack} - * @extends Track - */ -class TextTrack extends Track { - /** - * Create an instance of this class. - * - * @param {Object} options={} - * Object of option names and values - * - * @param {Tech} options.tech - * A reference to the tech that owns this TextTrack. - * - * @param {TextTrack~Kind} [options.kind='subtitles'] - * A valid text track kind. - * - * @param {TextTrack~Mode} [options.mode='disabled'] - * A valid text track mode. - * - * @param {string} [options.id='vjs_track_' + Guid.newGUID()] - * A unique id for this TextTrack. - * - * @param {string} [options.label=''] - * The menu label for this track. - * - * @param {string} [options.language=''] - * A valid two character language code. - * - * @param {string} [options.srclang=''] - * A valid two character language code. An alternative, but deprioritized - * version of `options.language` - * - * @param {string} [options.src] - * A url to TextTrack cues. - * - * @param {boolean} [options.default] - * If this track should default to on or off. - */ - constructor(options = {}) { - if (!options.tech) { - throw new Error('A tech was not provided.'); - } - const settings = merge$1(options, { - kind: TextTrackKind[options.kind] || 'subtitles', - language: options.language || options.srclang || '' - }); - let mode = TextTrackMode[settings.mode] || 'disabled'; - const default_ = settings.default; - if (settings.kind === 'metadata' || settings.kind === 'chapters') { - mode = 'hidden'; - } - super(settings); - this.tech_ = settings.tech; - this.cues_ = []; - this.activeCues_ = []; - this.preload_ = this.tech_.preloadTextTracks !== false; - const cues = new TextTrackCueList(this.cues_); - const activeCues = new TextTrackCueList(this.activeCues_); - let changed = false; - this.timeupdateHandler = bind_(this, function (event = {}) { - if (this.tech_.isDisposed()) { - return; - } - if (!this.tech_.isReady_) { - if (event.type !== 'timeupdate') { - this.rvf_ = this.tech_.requestVideoFrameCallback(this.timeupdateHandler); - } - return; - } - - // Accessing this.activeCues for the side-effects of updating itself - // due to its nature as a getter function. Do not remove or cues will - // stop updating! - // Use the setter to prevent deletion from uglify (pure_getters rule) - this.activeCues = this.activeCues; - if (changed) { - this.trigger('cuechange'); - changed = false; - } - if (event.type !== 'timeupdate') { - this.rvf_ = this.tech_.requestVideoFrameCallback(this.timeupdateHandler); - } - }); - const disposeHandler = () => { - this.stopTracking(); - }; - this.tech_.one('dispose', disposeHandler); - if (mode !== 'disabled') { - this.startTracking(); - } - Object.defineProperties(this, { - /** - * @memberof TextTrack - * @member {boolean} default - * If this track was set to be on or off by default. Cannot be changed after - * creation. - * @instance - * - * @readonly - */ - default: { - get() { - return default_; - }, - set() {} - }, - /** - * @memberof TextTrack - * @member {string} mode - * Set the mode of this TextTrack to a valid {@link TextTrack~Mode}. Will - * not be set if setting to an invalid mode. - * @instance - * - * @fires TextTrack#modechange - */ - mode: { - get() { - return mode; - }, - set(newMode) { - if (!TextTrackMode[newMode]) { - return; - } - if (mode === newMode) { - return; - } - mode = newMode; - if (!this.preload_ && mode !== 'disabled' && this.cues.length === 0) { - // On-demand load. - loadTrack(this.src, this); - } - this.stopTracking(); - if (mode !== 'disabled') { - this.startTracking(); - } - /** - * An event that fires when mode changes on this track. This allows - * the TextTrackList that holds this track to act accordingly. - * - * > Note: This is not part of the spec! - * - * @event TextTrack#modechange - * @type {Event} - */ - this.trigger('modechange'); - } - }, - /** - * @memberof TextTrack - * @member {TextTrackCueList} cues - * The text track cue list for this TextTrack. - * @instance - */ - cues: { - get() { - if (!this.loaded_) { - return null; - } - return cues; - }, - set() {} - }, - /** - * @memberof TextTrack - * @member {TextTrackCueList} activeCues - * The list text track cues that are currently active for this TextTrack. - * @instance - */ - activeCues: { - get() { - if (!this.loaded_) { - return null; - } - - // nothing to do - if (this.cues.length === 0) { - return activeCues; - } - const ct = this.tech_.currentTime(); - const active = []; - for (let i = 0, l = this.cues.length; i < l; i++) { - const cue = this.cues[i]; - if (cue.startTime <= ct && cue.endTime >= ct) { - active.push(cue); - } - } - changed = false; - if (active.length !== this.activeCues_.length) { - changed = true; - } else { - for (let i = 0; i < active.length; i++) { - if (this.activeCues_.indexOf(active[i]) === -1) { - changed = true; - } - } - } - this.activeCues_ = active; - activeCues.setCues_(this.activeCues_); - return activeCues; - }, - // /!\ Keep this setter empty (see the timeupdate handler above) - set() {} - } - }); - if (settings.src) { - this.src = settings.src; - if (!this.preload_) { - // Tracks will load on-demand. - // Act like we're loaded for other purposes. - this.loaded_ = true; - } - if (this.preload_ || settings.kind !== 'subtitles' && settings.kind !== 'captions') { - loadTrack(this.src, this); - } - } else { - this.loaded_ = true; - } - } - startTracking() { - // More precise cues based on requestVideoFrameCallback with a requestAnimationFram fallback - this.rvf_ = this.tech_.requestVideoFrameCallback(this.timeupdateHandler); - // Also listen to timeupdate in case rVFC/rAF stops (window in background, audio in video el) - this.tech_.on('timeupdate', this.timeupdateHandler); - } - stopTracking() { - if (this.rvf_) { - this.tech_.cancelVideoFrameCallback(this.rvf_); - this.rvf_ = undefined; - } - this.tech_.off('timeupdate', this.timeupdateHandler); - } - - /** - * Add a cue to the internal list of cues. - * - * @param {TextTrack~Cue} cue - * The cue to add to our internal list - */ - addCue(originalCue) { - let cue = originalCue; - if (window__default["default"].vttjs && !(originalCue instanceof window__default["default"].vttjs.VTTCue)) { - cue = new window__default["default"].vttjs.VTTCue(originalCue.startTime, originalCue.endTime, originalCue.text); - for (const prop in originalCue) { - if (!(prop in cue)) { - cue[prop] = originalCue[prop]; - } - } - - // make sure that `id` is copied over - cue.id = originalCue.id; - cue.originalCue_ = originalCue; - } - const tracks = this.tech_.textTracks(); - for (let i = 0; i < tracks.length; i++) { - if (tracks[i] !== this) { - tracks[i].removeCue(cue); - } - } - this.cues_.push(cue); - this.cues.setCues_(this.cues_); - } - - /** - * Remove a cue from our internal list - * - * @param {TextTrack~Cue} removeCue - * The cue to remove from our internal list - */ - removeCue(removeCue) { - let i = this.cues_.length; - while (i--) { - const cue = this.cues_[i]; - if (cue === removeCue || cue.originalCue_ && cue.originalCue_ === removeCue) { - this.cues_.splice(i, 1); - this.cues.setCues_(this.cues_); - break; - } - } - } -} - -/** - * cuechange - One or more cues in the track have become active or stopped being active. - */ -TextTrack.prototype.allowedEvents_ = { - cuechange: 'cuechange' -}; - -/** - * A representation of a single `AudioTrack`. If it is part of an {@link AudioTrackList} - * only one `AudioTrack` in the list will be enabled at a time. - * - * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotrack} - * @extends Track - */ -class AudioTrack extends Track { - /** - * Create an instance of this class. - * - * @param {Object} [options={}] - * Object of option names and values - * - * @param {AudioTrack~Kind} [options.kind=''] - * A valid audio track kind - * - * @param {string} [options.id='vjs_track_' + Guid.newGUID()] - * A unique id for this AudioTrack. - * - * @param {string} [options.label=''] - * The menu label for this track. - * - * @param {string} [options.language=''] - * A valid two character language code. - * - * @param {boolean} [options.enabled] - * If this track is the one that is currently playing. If this track is part of - * an {@link AudioTrackList}, only one {@link AudioTrack} will be enabled. - */ - constructor(options = {}) { - const settings = merge$1(options, { - kind: AudioTrackKind[options.kind] || '' - }); - super(settings); - let enabled = false; - - /** - * @memberof AudioTrack - * @member {boolean} enabled - * If this `AudioTrack` is enabled or not. When setting this will - * fire {@link AudioTrack#enabledchange} if the state of enabled is changed. - * @instance - * - * @fires VideoTrack#selectedchange - */ - Object.defineProperty(this, 'enabled', { - get() { - return enabled; - }, - set(newEnabled) { - // an invalid or unchanged value - if (typeof newEnabled !== 'boolean' || newEnabled === enabled) { - return; - } - enabled = newEnabled; - - /** - * An event that fires when enabled changes on this track. This allows - * the AudioTrackList that holds this track to act accordingly. - * - * > Note: This is not part of the spec! Native tracks will do - * this internally without an event. - * - * @event AudioTrack#enabledchange - * @type {Event} - */ - this.trigger('enabledchange'); - } - }); - - // if the user sets this track to selected then - // set selected to that true value otherwise - // we keep it false - if (settings.enabled) { - this.enabled = settings.enabled; - } - this.loaded_ = true; - } -} - -/** - * A representation of a single `VideoTrack`. - * - * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotrack} - * @extends Track - */ -class VideoTrack extends Track { - /** - * Create an instance of this class. - * - * @param {Object} [options={}] - * Object of option names and values - * - * @param {string} [options.kind=''] - * A valid {@link VideoTrack~Kind} - * - * @param {string} [options.id='vjs_track_' + Guid.newGUID()] - * A unique id for this AudioTrack. - * - * @param {string} [options.label=''] - * The menu label for this track. - * - * @param {string} [options.language=''] - * A valid two character language code. - * - * @param {boolean} [options.selected] - * If this track is the one that is currently playing. - */ - constructor(options = {}) { - const settings = merge$1(options, { - kind: VideoTrackKind[options.kind] || '' - }); - super(settings); - let selected = false; - - /** - * @memberof VideoTrack - * @member {boolean} selected - * If this `VideoTrack` is selected or not. When setting this will - * fire {@link VideoTrack#selectedchange} if the state of selected changed. - * @instance - * - * @fires VideoTrack#selectedchange - */ - Object.defineProperty(this, 'selected', { - get() { - return selected; - }, - set(newSelected) { - // an invalid or unchanged value - if (typeof newSelected !== 'boolean' || newSelected === selected) { - return; - } - selected = newSelected; - - /** - * An event that fires when selected changes on this track. This allows - * the VideoTrackList that holds this track to act accordingly. - * - * > Note: This is not part of the spec! Native tracks will do - * this internally without an event. - * - * @event VideoTrack#selectedchange - * @type {Event} - */ - this.trigger('selectedchange'); - } - }); - - // if the user sets this track to selected then - // set selected to that true value otherwise - // we keep it false - if (settings.selected) { - this.selected = settings.selected; - } - } -} - -/** - * @file html-track-element.js - */ - -/** - * @typedef { import('../tech/tech').default } Tech - */ - -/** - * A single track represented in the DOM. - * - * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#htmltrackelement} - * @extends EventTarget - */ -class HTMLTrackElement extends EventTarget$2 { - /** - * Create an instance of this class. - * - * @param {Object} options={} - * Object of option names and values - * - * @param {Tech} options.tech - * A reference to the tech that owns this HTMLTrackElement. - * - * @param {TextTrack~Kind} [options.kind='subtitles'] - * A valid text track kind. - * - * @param {TextTrack~Mode} [options.mode='disabled'] - * A valid text track mode. - * - * @param {string} [options.id='vjs_track_' + Guid.newGUID()] - * A unique id for this TextTrack. - * - * @param {string} [options.label=''] - * The menu label for this track. - * - * @param {string} [options.language=''] - * A valid two character language code. - * - * @param {string} [options.srclang=''] - * A valid two character language code. An alternative, but deprioritized - * version of `options.language` - * - * @param {string} [options.src] - * A url to TextTrack cues. - * - * @param {boolean} [options.default] - * If this track should default to on or off. - */ - constructor(options = {}) { - super(); - let readyState; - const track = new TextTrack(options); - this.kind = track.kind; - this.src = track.src; - this.srclang = track.language; - this.label = track.label; - this.default = track.default; - Object.defineProperties(this, { - /** - * @memberof HTMLTrackElement - * @member {HTMLTrackElement~ReadyState} readyState - * The current ready state of the track element. - * @instance - */ - readyState: { - get() { - return readyState; - } - }, - /** - * @memberof HTMLTrackElement - * @member {TextTrack} track - * The underlying TextTrack object. - * @instance - * - */ - track: { - get() { - return track; - } - } - }); - readyState = HTMLTrackElement.NONE; - - /** - * @listens TextTrack#loadeddata - * @fires HTMLTrackElement#load - */ - track.addEventListener('loadeddata', () => { - readyState = HTMLTrackElement.LOADED; - this.trigger({ - type: 'load', - target: this - }); - }); - } -} -HTMLTrackElement.prototype.allowedEvents_ = { - load: 'load' -}; - -/** - * The text track not loaded state. - * - * @type {number} - * @static - */ -HTMLTrackElement.NONE = 0; - -/** - * The text track loading state. - * - * @type {number} - * @static - */ -HTMLTrackElement.LOADING = 1; - -/** - * The text track loaded state. - * - * @type {number} - * @static - */ -HTMLTrackElement.LOADED = 2; - -/** - * The text track failed to load state. - * - * @type {number} - * @static - */ -HTMLTrackElement.ERROR = 3; - -/* - * This file contains all track properties that are used in - * player.js, tech.js, html5.js and possibly other techs in the future. - */ - -const NORMAL = { - audio: { - ListClass: AudioTrackList, - TrackClass: AudioTrack, - capitalName: 'Audio' - }, - video: { - ListClass: VideoTrackList, - TrackClass: VideoTrack, - capitalName: 'Video' - }, - text: { - ListClass: TextTrackList, - TrackClass: TextTrack, - capitalName: 'Text' - } -}; -Object.keys(NORMAL).forEach(function (type) { - NORMAL[type].getterName = `${type}Tracks`; - NORMAL[type].privateName = `${type}Tracks_`; -}); -const REMOTE = { - remoteText: { - ListClass: TextTrackList, - TrackClass: TextTrack, - capitalName: 'RemoteText', - getterName: 'remoteTextTracks', - privateName: 'remoteTextTracks_' - }, - remoteTextEl: { - ListClass: HtmlTrackElementList, - TrackClass: HTMLTrackElement, - capitalName: 'RemoteTextTrackEls', - getterName: 'remoteTextTrackEls', - privateName: 'remoteTextTrackEls_' - } -}; -const ALL = Object.assign({}, NORMAL, REMOTE); -REMOTE.names = Object.keys(REMOTE); -NORMAL.names = Object.keys(NORMAL); -ALL.names = [].concat(REMOTE.names).concat(NORMAL.names); - -/** - * @file tech.js - */ - -/** - * @typedef { import('../utils/time').TimeRange } TimeRange - */ - -/** - * An Object containing a structure like: `{src: 'url', type: 'mimetype'}` or string - * that just contains the src url alone. - * * `var SourceObject = {src: 'http://ex.com/video.mp4', type: 'video/mp4'};` - * `var SourceString = 'http://example.com/some-video.mp4';` - * - * @typedef {Object|string} Tech~SourceObject - * - * @property {string} src - * The url to the source - * - * @property {string} type - * The mime type of the source - */ - -/** - * A function used by {@link Tech} to create a new {@link TextTrack}. - * - * @private - * - * @param {Tech} self - * An instance of the Tech class. - * - * @param {string} kind - * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata) - * - * @param {string} [label] - * Label to identify the text track - * - * @param {string} [language] - * Two letter language abbreviation - * - * @param {Object} [options={}] - * An object with additional text track options - * - * @return {TextTrack} - * The text track that was created. - */ -function createTrackHelper(self, kind, label, language, options = {}) { - const tracks = self.textTracks(); - options.kind = kind; - if (label) { - options.label = label; - } - if (language) { - options.language = language; - } - options.tech = self; - const track = new ALL.text.TrackClass(options); - tracks.addTrack(track); - return track; -} - -/** - * This is the base class for media playback technology controllers, such as - * {@link HTML5} - * - * @extends Component - */ -class Tech extends Component$1 { - /** - * Create an instance of this Tech. - * - * @param {Object} [options] - * The key/value store of player options. - * - * @param {Function} [ready] - * Callback function to call when the `HTML5` Tech is ready. - */ - constructor(options = {}, ready = function () {}) { - // we don't want the tech to report user activity automatically. - // This is done manually in addControlsListeners - options.reportTouchActivity = false; - super(null, options, ready); - this.onDurationChange_ = e => this.onDurationChange(e); - this.trackProgress_ = e => this.trackProgress(e); - this.trackCurrentTime_ = e => this.trackCurrentTime(e); - this.stopTrackingCurrentTime_ = e => this.stopTrackingCurrentTime(e); - this.disposeSourceHandler_ = e => this.disposeSourceHandler(e); - this.queuedHanders_ = new Set(); - - // keep track of whether the current source has played at all to - // implement a very limited played() - this.hasStarted_ = false; - this.on('playing', function () { - this.hasStarted_ = true; - }); - this.on('loadstart', function () { - this.hasStarted_ = false; - }); - ALL.names.forEach(name => { - const props = ALL[name]; - if (options && options[props.getterName]) { - this[props.privateName] = options[props.getterName]; - } - }); - - // Manually track progress in cases where the browser/tech doesn't report it. - if (!this.featuresProgressEvents) { - this.manualProgressOn(); - } - - // Manually track timeupdates in cases where the browser/tech doesn't report it. - if (!this.featuresTimeupdateEvents) { - this.manualTimeUpdatesOn(); - } - ['Text', 'Audio', 'Video'].forEach(track => { - if (options[`native${track}Tracks`] === false) { - this[`featuresNative${track}Tracks`] = false; - } - }); - if (options.nativeCaptions === false || options.nativeTextTracks === false) { - this.featuresNativeTextTracks = false; - } else if (options.nativeCaptions === true || options.nativeTextTracks === true) { - this.featuresNativeTextTracks = true; - } - if (!this.featuresNativeTextTracks) { - this.emulateTextTracks(); - } - this.preloadTextTracks = options.preloadTextTracks !== false; - this.autoRemoteTextTracks_ = new ALL.text.ListClass(); - this.initTrackListeners(); - - // Turn on component tap events only if not using native controls - if (!options.nativeControlsForTouch) { - this.emitTapEvents(); - } - if (this.constructor) { - this.name_ = this.constructor.name || 'Unknown Tech'; - } - } - - /** - * A special function to trigger source set in a way that will allow player - * to re-trigger if the player or tech are not ready yet. - * - * @fires Tech#sourceset - * @param {string} src The source string at the time of the source changing. - */ - triggerSourceset(src) { - if (!this.isReady_) { - // on initial ready we have to trigger source set - // 1ms after ready so that player can watch for it. - this.one('ready', () => this.setTimeout(() => this.triggerSourceset(src), 1)); - } - - /** - * Fired when the source is set on the tech causing the media element - * to reload. - * - * @see {@link Player#event:sourceset} - * @event Tech#sourceset - * @type {Event} - */ - this.trigger({ - src, - type: 'sourceset' - }); - } - - /* Fallbacks for unsupported event types - ================================================================================ */ - - /** - * Polyfill the `progress` event for browsers that don't support it natively. - * - * @see {@link Tech#trackProgress} - */ - manualProgressOn() { - this.on('durationchange', this.onDurationChange_); - this.manualProgress = true; - - // Trigger progress watching when a source begins loading - this.one('ready', this.trackProgress_); - } - - /** - * Turn off the polyfill for `progress` events that was created in - * {@link Tech#manualProgressOn} - */ - manualProgressOff() { - this.manualProgress = false; - this.stopTrackingProgress(); - this.off('durationchange', this.onDurationChange_); - } - - /** - * This is used to trigger a `progress` event when the buffered percent changes. It - * sets an interval function that will be called every 500 milliseconds to check if the - * buffer end percent has changed. - * - * > This function is called by {@link Tech#manualProgressOn} - * - * @param {Event} event - * The `ready` event that caused this to run. - * - * @listens Tech#ready - * @fires Tech#progress - */ - trackProgress(event) { - this.stopTrackingProgress(); - this.progressInterval = this.setInterval(bind_(this, function () { - // Don't trigger unless buffered amount is greater than last time - - const numBufferedPercent = this.bufferedPercent(); - if (this.bufferedPercent_ !== numBufferedPercent) { - /** - * See {@link Player#progress} - * - * @event Tech#progress - * @type {Event} - */ - this.trigger('progress'); - } - this.bufferedPercent_ = numBufferedPercent; - if (numBufferedPercent === 1) { - this.stopTrackingProgress(); - } - }), 500); - } - - /** - * Update our internal duration on a `durationchange` event by calling - * {@link Tech#duration}. - * - * @param {Event} event - * The `durationchange` event that caused this to run. - * - * @listens Tech#durationchange - */ - onDurationChange(event) { - this.duration_ = this.duration(); - } - - /** - * Get and create a `TimeRange` object for buffering. - * - * @return {TimeRange} - * The time range object that was created. - */ - buffered() { - return createTimeRanges$1(0, 0); - } - - /** - * Get the percentage of the current video that is currently buffered. - * - * @return {number} - * A number from 0 to 1 that represents the decimal percentage of the - * video that is buffered. - * - */ - bufferedPercent() { - return bufferedPercent(this.buffered(), this.duration_); - } - - /** - * Turn off the polyfill for `progress` events that was created in - * {@link Tech#manualProgressOn} - * Stop manually tracking progress events by clearing the interval that was set in - * {@link Tech#trackProgress}. - */ - stopTrackingProgress() { - this.clearInterval(this.progressInterval); - } - - /** - * Polyfill the `timeupdate` event for browsers that don't support it. - * - * @see {@link Tech#trackCurrentTime} - */ - manualTimeUpdatesOn() { - this.manualTimeUpdates = true; - this.on('play', this.trackCurrentTime_); - this.on('pause', this.stopTrackingCurrentTime_); - } - - /** - * Turn off the polyfill for `timeupdate` events that was created in - * {@link Tech#manualTimeUpdatesOn} - */ - manualTimeUpdatesOff() { - this.manualTimeUpdates = false; - this.stopTrackingCurrentTime(); - this.off('play', this.trackCurrentTime_); - this.off('pause', this.stopTrackingCurrentTime_); - } - - /** - * Sets up an interval function to track current time and trigger `timeupdate` every - * 250 milliseconds. - * - * @listens Tech#play - * @triggers Tech#timeupdate - */ - trackCurrentTime() { - if (this.currentTimeInterval) { - this.stopTrackingCurrentTime(); - } - this.currentTimeInterval = this.setInterval(function () { - /** - * Triggered at an interval of 250ms to indicated that time is passing in the video. - * - * @event Tech#timeupdate - * @type {Event} - */ - this.trigger({ - type: 'timeupdate', - target: this, - manuallyTriggered: true - }); - - // 42 = 24 fps // 250 is what Webkit uses // FF uses 15 - }, 250); - } - - /** - * Stop the interval function created in {@link Tech#trackCurrentTime} so that the - * `timeupdate` event is no longer triggered. - * - * @listens {Tech#pause} - */ - stopTrackingCurrentTime() { - this.clearInterval(this.currentTimeInterval); - - // #1002 - if the video ends right before the next timeupdate would happen, - // the progress bar won't make it all the way to the end - this.trigger({ - type: 'timeupdate', - target: this, - manuallyTriggered: true - }); - } - - /** - * Turn off all event polyfills, clear the `Tech`s {@link AudioTrackList}, - * {@link VideoTrackList}, and {@link TextTrackList}, and dispose of this Tech. - * - * @fires Component#dispose - */ - dispose() { - // clear out all tracks because we can't reuse them between techs - this.clearTracks(NORMAL.names); - - // Turn off any manual progress or timeupdate tracking - if (this.manualProgress) { - this.manualProgressOff(); - } - if (this.manualTimeUpdates) { - this.manualTimeUpdatesOff(); - } - super.dispose(); - } - - /** - * Clear out a single `TrackList` or an array of `TrackLists` given their names. - * - * > Note: Techs without source handlers should call this between sources for `video` - * & `audio` tracks. You don't want to use them between tracks! - * - * @param {string[]|string} types - * TrackList names to clear, valid names are `video`, `audio`, and - * `text`. - */ - clearTracks(types) { - types = [].concat(types); - // clear out all tracks because we can't reuse them between techs - types.forEach(type => { - const list = this[`${type}Tracks`]() || []; - let i = list.length; - while (i--) { - const track = list[i]; - if (type === 'text') { - this.removeRemoteTextTrack(track); - } - list.removeTrack(track); - } - }); - } - - /** - * Remove any TextTracks added via addRemoteTextTrack that are - * flagged for automatic garbage collection - */ - cleanupAutoTextTracks() { - const list = this.autoRemoteTextTracks_ || []; - let i = list.length; - while (i--) { - const track = list[i]; - this.removeRemoteTextTrack(track); - } - } - - /** - * Reset the tech, which will removes all sources and reset the internal readyState. - * - * @abstract - */ - reset() {} - - /** - * Get the value of `crossOrigin` from the tech. - * - * @abstract - * - * @see {Html5#crossOrigin} - */ - crossOrigin() {} - - /** - * Set the value of `crossOrigin` on the tech. - * - * @abstract - * - * @param {string} crossOrigin the crossOrigin value - * @see {Html5#setCrossOrigin} - */ - setCrossOrigin() {} - - /** - * Get or set an error on the Tech. - * - * @param {MediaError} [err] - * Error to set on the Tech - * - * @return {MediaError|null} - * The current error object on the tech, or null if there isn't one. - */ - error(err) { - if (err !== undefined) { - this.error_ = new MediaError(err); - this.trigger('error'); - } - return this.error_; - } - - /** - * Returns the `TimeRange`s that have been played through for the current source. - * - * > NOTE: This implementation is incomplete. It does not track the played `TimeRange`. - * It only checks whether the source has played at all or not. - * - * @return {TimeRange} - * - A single time range if this video has played - * - An empty set of ranges if not. - */ - played() { - if (this.hasStarted_) { - return createTimeRanges$1(0, 0); - } - return createTimeRanges$1(); - } - - /** - * Start playback - * - * @abstract - * - * @see {Html5#play} - */ - play() {} - - /** - * Set whether we are scrubbing or not - * - * @abstract - * @param {boolean} _isScrubbing - * - true for we are currently scrubbing - * - false for we are no longer scrubbing - * - * @see {Html5#setScrubbing} - */ - setScrubbing(_isScrubbing) {} - - /** - * Get whether we are scrubbing or not - * - * @abstract - * - * @see {Html5#scrubbing} - */ - scrubbing() {} - - /** - * Causes a manual time update to occur if {@link Tech#manualTimeUpdatesOn} was - * previously called. - * - * @param {number} _seconds - * Set the current time of the media to this. - * @fires Tech#timeupdate - */ - setCurrentTime(_seconds) { - // improve the accuracy of manual timeupdates - if (this.manualTimeUpdates) { - /** - * A manual `timeupdate` event. - * - * @event Tech#timeupdate - * @type {Event} - */ - this.trigger({ - type: 'timeupdate', - target: this, - manuallyTriggered: true - }); - } - } - - /** - * Turn on listeners for {@link VideoTrackList}, {@link {AudioTrackList}, and - * {@link TextTrackList} events. - * - * This adds {@link EventTarget~EventListeners} for `addtrack`, and `removetrack`. - * - * @fires Tech#audiotrackchange - * @fires Tech#videotrackchange - * @fires Tech#texttrackchange - */ - initTrackListeners() { - /** - * Triggered when tracks are added or removed on the Tech {@link AudioTrackList} - * - * @event Tech#audiotrackchange - * @type {Event} - */ - - /** - * Triggered when tracks are added or removed on the Tech {@link VideoTrackList} - * - * @event Tech#videotrackchange - * @type {Event} - */ - - /** - * Triggered when tracks are added or removed on the Tech {@link TextTrackList} - * - * @event Tech#texttrackchange - * @type {Event} - */ - NORMAL.names.forEach(name => { - const props = NORMAL[name]; - const trackListChanges = () => { - this.trigger(`${name}trackchange`); - }; - const tracks = this[props.getterName](); - tracks.addEventListener('removetrack', trackListChanges); - tracks.addEventListener('addtrack', trackListChanges); - this.on('dispose', () => { - tracks.removeEventListener('removetrack', trackListChanges); - tracks.removeEventListener('addtrack', trackListChanges); - }); - }); - } - - /** - * Emulate TextTracks using vtt.js if necessary - * - * @fires Tech#vttjsloaded - * @fires Tech#vttjserror - */ - addWebVttScript_() { - if (window__default["default"].WebVTT) { - return; - } - - // Initially, Tech.el_ is a child of a dummy-div wait until the Component system - // signals that the Tech is ready at which point Tech.el_ is part of the DOM - // before inserting the WebVTT script - if (document__default["default"].body.contains(this.el())) { - // load via require if available and vtt.js script location was not passed in - // as an option. novtt builds will turn the above require call into an empty object - // which will cause this if check to always fail. - if (!this.options_['vtt.js'] && isPlain(vtt__default["default"]) && Object.keys(vtt__default["default"]).length > 0) { - this.trigger('vttjsloaded'); - return; - } - - // load vtt.js via the script location option or the cdn of no location was - // passed in - const script = document__default["default"].createElement('script'); - script.src = this.options_['vtt.js'] || 'https://vjs.zencdn.net/vttjs/0.14.1/vtt.min.js'; - script.onload = () => { - /** - * Fired when vtt.js is loaded. - * - * @event Tech#vttjsloaded - * @type {Event} - */ - this.trigger('vttjsloaded'); - }; - script.onerror = () => { - /** - * Fired when vtt.js was not loaded due to an error - * - * @event Tech#vttjsloaded - * @type {Event} - */ - this.trigger('vttjserror'); - }; - this.on('dispose', () => { - script.onload = null; - script.onerror = null; - }); - // but have not loaded yet and we set it to true before the inject so that - // we don't overwrite the injected window.WebVTT if it loads right away - window__default["default"].WebVTT = true; - this.el().parentNode.appendChild(script); - } else { - this.ready(this.addWebVttScript_); - } - } - - /** - * Emulate texttracks - * - */ - emulateTextTracks() { - const tracks = this.textTracks(); - const remoteTracks = this.remoteTextTracks(); - const handleAddTrack = e => tracks.addTrack(e.track); - const handleRemoveTrack = e => tracks.removeTrack(e.track); - remoteTracks.on('addtrack', handleAddTrack); - remoteTracks.on('removetrack', handleRemoveTrack); - this.addWebVttScript_(); - const updateDisplay = () => this.trigger('texttrackchange'); - const textTracksChanges = () => { - updateDisplay(); - for (let i = 0; i < tracks.length; i++) { - const track = tracks[i]; - track.removeEventListener('cuechange', updateDisplay); - if (track.mode === 'showing') { - track.addEventListener('cuechange', updateDisplay); - } - } - }; - textTracksChanges(); - tracks.addEventListener('change', textTracksChanges); - tracks.addEventListener('addtrack', textTracksChanges); - tracks.addEventListener('removetrack', textTracksChanges); - this.on('dispose', function () { - remoteTracks.off('addtrack', handleAddTrack); - remoteTracks.off('removetrack', handleRemoveTrack); - tracks.removeEventListener('change', textTracksChanges); - tracks.removeEventListener('addtrack', textTracksChanges); - tracks.removeEventListener('removetrack', textTracksChanges); - for (let i = 0; i < tracks.length; i++) { - const track = tracks[i]; - track.removeEventListener('cuechange', updateDisplay); - } - }); - } - - /** - * Create and returns a remote {@link TextTrack} object. - * - * @param {string} kind - * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata) - * - * @param {string} [label] - * Label to identify the text track - * - * @param {string} [language] - * Two letter language abbreviation - * - * @return {TextTrack} - * The TextTrack that gets created. - */ - addTextTrack(kind, label, language) { - if (!kind) { - throw new Error('TextTrack kind is required but was not provided'); - } - return createTrackHelper(this, kind, label, language); - } - - /** - * Create an emulated TextTrack for use by addRemoteTextTrack - * - * This is intended to be overridden by classes that inherit from - * Tech in order to create native or custom TextTracks. - * - * @param {Object} options - * The object should contain the options to initialize the TextTrack with. - * - * @param {string} [options.kind] - * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata). - * - * @param {string} [options.label]. - * Label to identify the text track - * - * @param {string} [options.language] - * Two letter language abbreviation. - * - * @return {HTMLTrackElement} - * The track element that gets created. - */ - createRemoteTextTrack(options) { - const track = merge$1(options, { - tech: this - }); - return new REMOTE.remoteTextEl.TrackClass(track); - } - - /** - * Creates a remote text track object and returns an html track element. - * - * > Note: This can be an emulated {@link HTMLTrackElement} or a native one. - * - * @param {Object} options - * See {@link Tech#createRemoteTextTrack} for more detailed properties. - * - * @param {boolean} [manualCleanup=false] - * - When false: the TextTrack will be automatically removed from the video - * element whenever the source changes - * - When True: The TextTrack will have to be cleaned up manually - * - * @return {HTMLTrackElement} - * An Html Track Element. - * - */ - addRemoteTextTrack(options = {}, manualCleanup) { - const htmlTrackElement = this.createRemoteTextTrack(options); - if (typeof manualCleanup !== 'boolean') { - manualCleanup = false; - } - - // store HTMLTrackElement and TextTrack to remote list - this.remoteTextTrackEls().addTrackElement_(htmlTrackElement); - this.remoteTextTracks().addTrack(htmlTrackElement.track); - if (manualCleanup === false) { - // create the TextTrackList if it doesn't exist - this.ready(() => this.autoRemoteTextTracks_.addTrack(htmlTrackElement.track)); - } - return htmlTrackElement; - } - - /** - * Remove a remote text track from the remote `TextTrackList`. - * - * @param {TextTrack} track - * `TextTrack` to remove from the `TextTrackList` - */ - removeRemoteTextTrack(track) { - const trackElement = this.remoteTextTrackEls().getTrackElementByTrack_(track); - - // remove HTMLTrackElement and TextTrack from remote list - this.remoteTextTrackEls().removeTrackElement_(trackElement); - this.remoteTextTracks().removeTrack(track); - this.autoRemoteTextTracks_.removeTrack(track); - } - - /** - * Gets available media playback quality metrics as specified by the W3C's Media - * Playback Quality API. - * - * @see [Spec]{@link https://wicg.github.io/media-playback-quality} - * - * @return {Object} - * An object with supported media playback quality metrics - * - * @abstract - */ - getVideoPlaybackQuality() { - return {}; - } - - /** - * Attempt to create a floating video window always on top of other windows - * so that users may continue consuming media while they interact with other - * content sites, or applications on their device. - * - * @see [Spec]{@link https://wicg.github.io/picture-in-picture} - * - * @return {Promise|undefined} - * A promise with a Picture-in-Picture window if the browser supports - * Promises (or one was passed in as an option). It returns undefined - * otherwise. - * - * @abstract - */ - requestPictureInPicture() { - return Promise.reject(); - } - - /** - * A method to check for the value of the 'disablePictureInPicture'