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'