diff --git a/css/231.5650294b.css b/css/285.e29e1fc1.css similarity index 73% rename from css/231.5650294b.css rename to css/285.e29e1fc1.css index 128e8f2..ba1623d 100644 --- a/css/231.5650294b.css +++ b/css/285.e29e1fc1.css @@ -1 +1 @@ -@charset "UTF-8";@keyframes plyr-progress{to{background-position:25px 0;background-position:var(--plyr-progress-loading-size,25px) 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{0%{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;align-items:center;direction:ltr;display:flex;flex-direction:column;font-family:inherit;font-family:var(--plyr-font-family,inherit);font-variant-numeric:tabular-nums;font-weight:400;font-weight:var(--plyr-font-weight-regular,400);line-height:1.7;line-height:var(--plyr-line-height,1.7);max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease;z-index:0}.plyr audio,.plyr iframe,.plyr video{display:block;height:100%;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui :after,.plyr--full-ui :before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4a5464;background:var(--plyr-badge-background,#4a5464);border-radius:2px;border-radius:var(--plyr-badge-border-radius,2px);color:#fff;color:var(--plyr-badge-text-color,#fff);font-size:9px;font-size:var(--plyr-font-size-badge,9px);line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;display:none;font-size:13px;font-size:var(--plyr-font-size-small,13px);left:0;padding:10px;padding:var(--plyr-control-spacing,10px);position:absolute;text-align:center;transition:transform .4s ease-in-out;width:100%}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:15px;font-size:var(--plyr-font-size-base,15px);padding:20px;padding:calc(var(--plyr-control-spacing, 10px)*2)}}@media (min-width:768px){.plyr__captions{font-size:18px;font-size:var(--plyr-font-size-large,18px)}}.plyr--captions-active .plyr__captions{display:block}.plyr:not(.plyr--hide-controls) .plyr__controls:not(:empty)~.plyr__captions{transform:translateY(-40px);transform:translateY(calc(var(--plyr-control-spacing, 10px)*-4))}.plyr__caption{background:#000c;background:var(--plyr-captions-background,#000c);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;color:#fff;color:var(--plyr-captions-text-color,#fff);line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__caption div{display:inline}.plyr__control{background:#0000;border:0;border-radius:4px;border-radius:var(--plyr-control-radius,4px);color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;padding:calc(var(--plyr-control-spacing, 10px)*.7);position:relative;transition:all .1s ease-in-out}.plyr__control svg{display:block;fill:currentColor;height:18px;height:var(--plyr-control-icon-size,18px);pointer-events:none;width:18px;width:var(--plyr-control-icon-size,18px)}.plyr__control:focus{outline:0}.plyr__control:focus-visible{outline:2px dashed #00b2ff;outline:2px dashed var(--plyr-focus-visible-color,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)));outline-offset:2px}a.plyr__control{text-decoration:none}.plyr__control.plyr__control--pressed .icon--not-pressed,.plyr__control.plyr__control--pressed .label--not-pressed,.plyr__control:not(.plyr__control--pressed) .icon--pressed,.plyr__control:not(.plyr__control--pressed) .label--pressed,a.plyr__control:after,a.plyr__control:before{display:none}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;justify-content:flex-end;text-align:center}.plyr__controls .plyr__progress__container{flex:1;min-width:0}.plyr__controls .plyr__controls__item{margin-left:2.5px;margin-left:calc(var(--plyr-control-spacing, 10px)/4)}.plyr__controls .plyr__controls__item:first-child{margin-left:0;margin-right:auto}.plyr__controls .plyr__controls__item.plyr__progress__container{padding-left:2.5px;padding-left:calc(var(--plyr-control-spacing, 10px)/4)}.plyr__controls .plyr__controls__item.plyr__time{padding:0 5px;padding:0 calc(var(--plyr-control-spacing, 10px)/2)}.plyr__controls .plyr__controls__item.plyr__progress__container:first-child,.plyr__controls .plyr__controls__item.plyr__time+.plyr__time,.plyr__controls .plyr__controls__item.plyr__time:first-child{padding-left:0}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip],.plyr__controls:empty{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:#ffffffe6;background:var(--plyr-menu-background,#ffffffe6);border-radius:8px;border-radius:var(--plyr-menu-radius,8px);bottom:100%;box-shadow:0 1px 2px #00000026;box-shadow:var(--plyr-menu-shadow,0 1px 2px #00000026);color:#4a5464;color:var(--plyr-menu-color,#4a5464);font-size:15px;font-size:var(--plyr-font-size-base,15px);margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container:after{border:4px solid #0000;border-top-color:#ffffffe6;border:var(--plyr-menu-arrow-size,4px) solid #0000;border-top-color:var(--plyr-menu-background,#ffffffe6);content:"";height:0;position:absolute;right:14px;right:calc(var(--plyr-control-icon-size, 18px)/2 + var(--plyr-control-spacing, 10px)*.7 - var(--plyr-menu-arrow-size, 4px)/2);top:100%;width:0}.plyr__menu__container [role=menu]{padding:7px;padding:calc(var(--plyr-control-spacing, 10px)*.7)}.plyr__menu__container [role=menuitem],.plyr__menu__container [role=menuitemradio]{margin-top:2px}.plyr__menu__container [role=menuitem]:first-child,.plyr__menu__container [role=menuitemradio]:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4a5464;color:var(--plyr-menu-color,#4a5464);display:flex;font-size:13px;font-size:var(--plyr-font-size-menu,var(--plyr-font-size-small,13px));padding:4.66667px 10.5px;padding:calc(var(--plyr-control-spacing, 10px)*.7/1.5) calc(var(--plyr-control-spacing, 10px)*.7*1.5);-webkit-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control>span{align-items:inherit;display:flex;width:100%}.plyr__menu__container .plyr__control:after{border:4px solid #0000;border:var(--plyr-menu-item-arrow-size,4px) solid #0000;content:"";position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px;padding-right:calc(var(--plyr-control-spacing, 10px)*.7*4)}.plyr__menu__container .plyr__control--forward:after{border-left-color:#728197;border-left-color:var(--plyr-menu-arrow-color,#728197);right:6.5px;right:calc(var(--plyr-control-spacing, 10px)*.7*1.5 - var(--plyr-menu-item-arrow-size, 4px))}.plyr__menu__container .plyr__control--forward:focus-visible:after,.plyr__menu__container .plyr__control--forward:hover:after{border-left-color:initial}.plyr__menu__container .plyr__control--back{font-weight:400;font-weight:var(--plyr-font-weight-regular,400);margin:7px;margin:calc(var(--plyr-control-spacing, 10px)*.7);margin-bottom:3.5px;margin-bottom:calc(var(--plyr-control-spacing, 10px)*.7/2);padding-left:28px;padding-left:calc(var(--plyr-control-spacing, 10px)*.7*4);position:relative;width:calc(100% - 14px);width:calc(100% - var(--plyr-control-spacing, 10px)*.7*2)}.plyr__menu__container .plyr__control--back:after{border-right-color:#728197;border-right-color:var(--plyr-menu-arrow-color,#728197);left:6.5px;left:calc(var(--plyr-control-spacing, 10px)*.7*1.5 - var(--plyr-menu-item-arrow-size, 4px))}.plyr__menu__container .plyr__control--back:before{background:#dcdfe5;background:var(--plyr-menu-back-border-color,#dcdfe5);box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 var(--plyr-menu-back-border-shadow-color,#fff);content:"";height:1px;left:0;margin-top:3.5px;margin-top:calc(var(--plyr-control-spacing, 10px)*.7/2);overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back:focus-visible:after,.plyr__menu__container .plyr__control--back:hover:after{border-right-color:initial}.plyr__menu__container .plyr__control[role=menuitemradio]{padding-left:7px;padding-left:calc(var(--plyr-control-spacing, 10px)*.7)}.plyr__menu__container .plyr__control[role=menuitemradio]:after,.plyr__menu__container .plyr__control[role=menuitemradio]:before{border-radius:100%}.plyr__menu__container .plyr__control[role=menuitemradio]:before{background:#0000001a;content:"";display:block;flex-shrink:0;height:16px;margin-right:10px;margin-right:var(--plyr-control-spacing,10px);transition:all .3s ease;width:16px}.plyr__menu__container .plyr__control[role=menuitemradio]:after{background:#fff;border:0;height:6px;left:12px;opacity:0;top:50%;transform:translateY(-50%) scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]:before{background:#00b2ff;background:var(--plyr-control-toggle-checked-background,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)))}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]:after{opacity:1;transform:translateY(-50%) scale(1)}.plyr__menu__container .plyr__control[role=menuitemradio]:focus-visible:before,.plyr__menu__container .plyr__control[role=menuitemradio]:hover:before{background:#23282f1a}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-5px;margin-right:calc(var(--plyr-control-spacing, 10px)*.7*-1 + 2px);overflow:hidden;padding-left:24.5px;padding-left:calc(var(--plyr-control-spacing, 10px)*.7*3.5);pointer-events:none}.plyr--full-ui input[type=range]{appearance:none;background:#0000;border:0;border-radius:26px;border-radius:calc(var(--plyr-range-thumb-height, 13px)*2);color:#00b2ff;color:var(--plyr-range-fill-background,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)));display:block;height:19px;height:calc(var(--plyr-range-thumb-active-shadow-width, 3px)*2 + var(--plyr-range-thumb-height, 13px));margin:0;min-width:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:#0000;background-image:linear-gradient(90deg,currentColor,#0000 0);background-image:linear-gradient(to right,currentColor var(--value,0),#0000 var(--value,0));border:0;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height, 5px)/2);height:5px;height:var(--plyr-range-track-height,5px);-webkit-transition:box-shadow .3s ease;transition:box-shadow .3s ease;-webkit-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-webkit-slider-thumb{appearance:none;background:#fff;background:var(--plyr-range-thumb-background,#fff);border:0;border-radius:100%;box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33);height:13px;height:var(--plyr-range-thumb-height,13px);margin-top:-4px;margin-top:calc((var(--plyr-range-thumb-height, 13px) - var(--plyr-range-track-height, 5px))/2*-1);position:relative;-webkit-transition:all .2s ease;transition:all .2s ease;width:13px;width:var(--plyr-range-thumb-height,13px)}.plyr--full-ui input[type=range]::-moz-range-track{background:#0000;border:0;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height, 5px)/2);height:5px;height:var(--plyr-range-track-height,5px);-moz-transition:box-shadow .3s ease;transition:box-shadow .3s ease;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;background:var(--plyr-range-thumb-background,#fff);border:0;border-radius:100%;box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33);height:13px;height:var(--plyr-range-thumb-height,13px);position:relative;-moz-transition:all .2s ease;transition:all .2s ease;width:13px;width:var(--plyr-range-thumb-height,13px)}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height, 5px)/2);height:5px;height:var(--plyr-range-track-height,5px)}.plyr--full-ui input[type=range]::-ms-track{color:#0000}.plyr--full-ui input[type=range]::-ms-fill-upper,.plyr--full-ui input[type=range]::-ms-track{background:#0000;border:0;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height, 5px)/2);height:5px;height:var(--plyr-range-track-height,5px);-ms-transition:box-shadow .3s ease;transition:box-shadow .3s ease;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:#0000;background:currentColor;border:0;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height, 5px)/2);height:5px;height:var(--plyr-range-track-height,5px);-ms-transition:box-shadow .3s ease;transition:box-shadow .3s ease;user-select:none}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;background:var(--plyr-range-thumb-background,#fff);border:0;border-radius:100%;box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33);height:13px;height:var(--plyr-range-thumb-height,13px);margin-top:0;position:relative;-ms-transition:all .2s ease;transition:all .2s ease;width:13px;width:var(--plyr-range-thumb-height,13px)}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]:focus-visible::-webkit-slider-runnable-track{outline:2px dashed #00b2ff;outline:2px dashed var(--plyr-focus-visible-color,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)));outline-offset:2px}.plyr--full-ui input[type=range]:focus-visible::-moz-range-track{outline:2px dashed #00b2ff;outline:2px dashed var(--plyr-focus-visible-color,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)));outline-offset:2px}.plyr--full-ui input[type=range]:focus-visible::-ms-track{outline:2px dashed #00b2ff;outline:2px dashed var(--plyr-focus-visible-color,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)));outline-offset:2px}.plyr__poster{background-color:#000;background-color:var(--plyr-video-background,var(--plyr-video-background,#000));background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .2s ease;width:100%;z-index:1}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr--youtube.plyr--paused.plyr__poster-enabled:not(.plyr--stopped) .plyr__poster{display:none}.plyr__time{font-size:13px;font-size:var(--plyr-font-size-time,var(--plyr-font-size-small,13px))}.plyr__time+.plyr__time:before{content:"⁄";margin-right:10px;margin-right:var(--plyr-control-spacing,10px)}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr__tooltip{background:#fff;background:var(--plyr-tooltip-background,#fff);border-radius:5px;border-radius:var(--plyr-tooltip-radius,5px);bottom:100%;box-shadow:0 1px 2px #00000026;box-shadow:var(--plyr-tooltip-shadow,0 1px 2px #00000026);color:#4a5464;color:var(--plyr-tooltip-color,#4a5464);font-size:13px;font-size:var(--plyr-font-size-small,13px);font-weight:400;font-weight:var(--plyr-font-weight-regular,400);left:50%;line-height:1.3;margin-bottom:10px;margin-bottom:calc(var(--plyr-control-spacing, 10px)/2*2);opacity:0;padding:5px 7.5px;padding:calc(var(--plyr-control-spacing, 10px)/2) calc(var(--plyr-control-spacing, 10px)/2*1.5);pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s ease .1s,opacity .2s ease .1s;white-space:nowrap;z-index:2}.plyr__tooltip:before{border-left:4px solid #0000;border-left:var(--plyr-tooltip-arrow-size,4px) solid #0000;border-right:4px solid #0000;border-right:var(--plyr-tooltip-arrow-size,4px) solid #0000;border-top:4px solid #fff;border-top:var(--plyr-tooltip-arrow-size,4px) solid var(--plyr-tooltip-background,#fff);bottom:-4px;bottom:calc(var(--plyr-tooltip-arrow-size, 4px)*-1);content:"";height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control:focus-visible .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translateY(10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip:before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip:before{left:16px;left:calc(var(--plyr-control-icon-size, 18px)/2 + var(--plyr-control-spacing, 10px)*.7)}.plyr__controls>.plyr__control:last-child .plyr__tooltip{left:auto;right:0;transform:translateY(10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip:before{left:auto;right:16px;right:calc(var(--plyr-control-icon-size, 18px)/2 + var(--plyr-control-spacing, 10px)*.7);transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control:focus-visible .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child:focus-visible .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child:focus-visible .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0) scale(1)}.plyr__progress{left:6.5px;left:calc(var(--plyr-range-thumb-height, 13px)*.5);margin-right:13px;margin-right:var(--plyr-range-thumb-height,13px);position:relative}.plyr__progress input[type=range],.plyr__progress__buffer{margin-left:-6.5px;margin-left:calc(var(--plyr-range-thumb-height, 13px)*-.5);margin-right:-6.5px;margin-right:calc(var(--plyr-range-thumb-height, 13px)*-.5);width:calc(100% + 13px);width:calc(100% + var(--plyr-range-thumb-height, 13px))}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{left:0;max-width:120px;overflow-wrap:break-word}.plyr__progress__buffer{-webkit-appearance:none;background:#0000;border:0;border-radius:100px;height:5px;height:var(--plyr-range-track-height,5px);left:0;margin-top:-2.5px;margin-top:calc(var(--plyr-range-track-height, 5px)/2*-1);padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:#0000}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:5px;min-width:var(--plyr-range-track-height,5px);-webkit-transition:width .2s ease;transition:width .2s ease}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:5px;min-width:var(--plyr-range-track-height,5px);-moz-transition:width .2s ease;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;-ms-transition:width .2s ease;transition:width .2s ease}.plyr--loading .plyr__progress__buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,#23282f99 25%,#0000 0,#0000 50%,#23282f99 0,#23282f99 75%,#0000 0,#0000);background-image:linear-gradient(-45deg,var(--plyr-progress-loading-background,#23282f99) 25%,#0000 25%,#0000 50%,var(--plyr-progress-loading-background,#23282f99) 50%,var(--plyr-progress-loading-background,#23282f99) 75%,#0000 75%,#0000);background-repeat:repeat-x;background-size:25px 25px;background-size:var(--plyr-progress-loading-size,25px) var(--plyr-progress-loading-size,25px);color:#0000}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:#ffffff40;background-color:var(--plyr-video-progress-buffered-background,#ffffff40)}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:#c1c8d199;background-color:var(--plyr-audio-progress-buffered-background,#c1c8d199)}.plyr__progress__marker{background-color:#fff;background-color:var(--plyr-progress-marker-background,#fff);border-radius:1px;height:5px;height:var(--plyr-range-track-height,5px);position:absolute;top:50%;transform:translate(-50%,-50%);width:3px;width:var(--plyr-progress-marker-width,3px);z-index:3}.plyr__volume{align-items:center;display:flex;position:relative}.plyr__volume input[type=range]{margin-left:5px;margin-left:calc(var(--plyr-control-spacing, 10px)/2);margin-right:5px;margin-right:calc(var(--plyr-control-spacing, 10px)/2);max-width:90px;min-width:60px;position:relative;z-index:2}.plyr--audio{display:block}.plyr--audio .plyr__controls{background:#fff;background:var(--plyr-audio-controls-background,#fff);border-radius:inherit;color:#4a5464;color:var(--plyr-audio-control-color,#4a5464);padding:10px;padding:var(--plyr-control-spacing,10px)}.plyr--audio .plyr__control:focus-visible,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#00b2ff;background:var(--plyr-audio-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)));color:#fff;color:var(--plyr-audio-control-color-hover,#fff)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:#c1c8d199;background-color:var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,#c1c8d199))}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:#c1c8d199;background-color:var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,#c1c8d199))}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:#c1c8d199;background-color:var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,#c1c8d199))}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #23282f1a;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,#23282f1a)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #23282f1a;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,#23282f1a)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #23282f1a;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,#23282f1a)}.plyr--audio .plyr__progress__buffer{color:#c1c8d199;color:var(--plyr-audio-progress-buffered-background,#c1c8d199)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;background:var(--plyr-video-background,var(--plyr-video-background,#000));border-radius:inherit;height:100%;margin:auto;overflow:hidden;position:relative;width:100%}.plyr__video-embed,.plyr__video-wrapper--fixed-ratio{aspect-ratio:16/9}@supports not (aspect-ratio:16/9){.plyr__video-embed,.plyr__video-wrapper--fixed-ratio{height:0;padding-bottom:56.25%;position:relative}}.plyr__video-embed iframe,.plyr__video-wrapper--fixed-ratio video{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr--video .plyr__controls{background:linear-gradient(#0000,#000000bf);background:var(--plyr-video-controls-background,linear-gradient(#0000,#000000bf));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;color:var(--plyr-video-control-color,#fff);left:0;padding:5px;padding:calc(var(--plyr-control-spacing, 10px)/2);padding-top:20px;padding-top:calc(var(--plyr-control-spacing, 10px)*2);position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:3}@media (min-width:480px){.plyr--video .plyr__controls{padding:10px;padding:var(--plyr-control-spacing,10px);padding-top:35px;padding-top:calc(var(--plyr-control-spacing, 10px)*3.5)}}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr--video .plyr__control:focus-visible,.plyr--video .plyr__control:hover,.plyr--video .plyr__control[aria-expanded=true]{background:#00b2ff;background:var(--plyr-video-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)));color:#fff;color:var(--plyr-video-control-color-hover,#fff)}.plyr__control--overlaid{background:#00b2ff;background:var(--plyr-video-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)));border:0;border-radius:100%;color:#fff;color:var(--plyr-video-control-color,#fff);display:none;left:50%;opacity:.9;padding:15px;padding:calc(var(--plyr-control-spacing, 10px)*1.5);position:absolute;top:50%;transform:translate(-50%,-50%);transition:.3s;z-index:2}.plyr__control--overlaid svg{left:2px;position:relative}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{opacity:1}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:#ffffff40;background-color:var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,#ffffff40))}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:#ffffff40;background-color:var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,#ffffff40))}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:#ffffff40;background-color:var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,#ffffff40))}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #ffffff80;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,#ffffff80)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #ffffff80;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,#ffffff80)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #ffffff80;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,#ffffff80)}.plyr--video .plyr__progress__buffer{color:#ffffff40;color:var(--plyr-video-progress-buffered-background,#ffffff40)}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen video{height:100%}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:fullscreen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;inset:0;margin:0;position:fixed;width:100%;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr__ads{border-radius:inherit;cursor:pointer;inset:0;overflow:hidden;position:absolute;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads:after{background:#23282f;border-radius:2px;bottom:10px;bottom:var(--plyr-control-spacing,10px);color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;right:var(--plyr-control-spacing,10px);z-index:3}.plyr__ads:empty:after{display:none}.plyr__cues{background:currentColor;display:block;height:5px;height:var(--plyr-range-track-height,5px);left:0;opacity:.8;position:absolute;top:50%;transform:translateY(-50%);width:3px;z-index:3}.plyr__preview-thumb{background-color:#fff;background-color:var(--plyr-tooltip-background,#fff);border-radius:8px;border-radius:var(--plyr-menu-radius,8px);bottom:100%;box-shadow:0 1px 2px #00000026;box-shadow:var(--plyr-tooltip-shadow,0 1px 2px #00000026);margin-bottom:10px;margin-bottom:calc(var(--plyr-control-spacing, 10px)/2*2);opacity:0;padding:3px;pointer-events:none;position:absolute;transform:translateY(10px) scale(.8);transform-origin:50% 100%;transition:transform .2s ease .1s,opacity .2s ease .1s;z-index:2}.plyr__preview-thumb--is-shown{opacity:1;transform:translate(0) scale(1)}.plyr__preview-thumb:before{border-left:4px solid #0000;border-left:var(--plyr-tooltip-arrow-size,4px) solid #0000;border-right:4px solid #0000;border-right:var(--plyr-tooltip-arrow-size,4px) solid #0000;border-top:4px solid #fff;border-top:var(--plyr-tooltip-arrow-size,4px) solid var(--plyr-tooltip-background,#fff);bottom:-4px;bottom:calc(var(--plyr-tooltip-arrow-size, 4px)*-1);content:"";height:0;left:calc(50% + var(--preview-arrow-offset));position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr__preview-thumb__image-container{background:#c1c8d1;border-radius:7px;border-radius:calc(var(--plyr-menu-radius, 8px) - 1px);overflow:hidden;position:relative;z-index:0}.plyr__preview-thumb__image-container img,.plyr__preview-thumb__image-container:after{height:100%;left:0;position:absolute;top:0;width:100%}.plyr__preview-thumb__image-container:after{border-radius:inherit;box-shadow:inset 0 0 0 1px #00000026;content:"";pointer-events:none}.plyr__preview-thumb__image-container img{max-height:none;max-width:none}.plyr__preview-thumb__time-container{background:linear-gradient(#0000,#000000bf);background:var(--plyr-video-controls-background,linear-gradient(#0000,#000000bf));border-bottom-left-radius:7px;border-bottom-left-radius:calc(var(--plyr-menu-radius, 8px) - 1px);border-bottom-right-radius:7px;border-bottom-right-radius:calc(var(--plyr-menu-radius, 8px) - 1px);bottom:0;left:0;line-height:1.1;padding:20px 6px 6px;position:absolute;right:0;z-index:3}.plyr__preview-thumb__time-container span{color:#fff;font-size:13px;font-size:var(--plyr-font-size-time,var(--plyr-font-size-small,13px))}.plyr__preview-scrubbing{filter:blur(1px);height:100%;inset:0;margin:auto;opacity:0;overflow:hidden;pointer-events:none;position:absolute;transition:opacity .3s ease;width:100%;z-index:1}.plyr__preview-scrubbing--is-shown{opacity:1}.plyr__preview-scrubbing img{height:100%;left:0;max-height:none;max-width:none;object-fit:contain;position:absolute;top:0;width:100%}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);border:0!important;height:1px!important;overflow:hidden;padding:0!important;position:absolute!important;width:1px!important}.plyr [hidden]{display:none!important}.tm-viewport[data-v-6479d338]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.tm-media[data-v-6479d338]{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain;-webkit-user-drag:none}.tm-video-wrap[data-v-6479d338]{width:100%;max-width:800px;touch-action:auto}.plyr-video[data-v-6479d338]{width:100%}.tm-audio-wrap[data-v-6479d338]{display:flex;flex-direction:column;align-items:center;gap:20px;padding:24px;width:100%;max-width:400px;touch-action:auto}.plyr-audio[data-v-6479d338]{width:100%}.audio-cover[data-v-6479d338]{width:200px;height:200px;border-radius:12px;overflow:hidden;background:hsla(0,0%,100%,.1);display:flex;align-items:center;justify-content:center;box-shadow:0 8px 32px rgba(0,0,0,.3)}.cover-img[data-v-6479d338]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.audio-icon-large[data-v-6479d338]{width:80px;height:80px;color:hsla(0,0%,100%,.4)}.audio-info[data-v-6479d338]{text-align:center;width:100%}.audio-title[data-v-6479d338]{font-size:18px;font-weight:600;color:#fff;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.audio-artist[data-v-6479d338]{font-size:14px;color:hsla(0,0%,100%,.6)}.audio-placeholder[data-v-6479d338],.video-placeholder[data-v-6479d338]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;color:hsla(0,0%,100%,.4)}.video-placeholder svg[data-v-6479d338]{width:80px;height:80px}.audio-placeholder .audio-name[data-v-6479d338]{font-size:14px;color:hsla(0,0%,100%,.6);text-align:center;max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.plyr{--plyr-color-main:#3b82f6}.plyr--audio .plyr__controls{background:hsla(0,0%,100%,.1);border-radius:8px}.plyr-custom-menu{position:relative;display:flex;align-items:center}.plyr-menu-btn{background:none;border:none;cursor:pointer;padding:8px;color:inherit;display:flex;align-items:center;justify-content:center}.plyr-menu-btn:hover{opacity:.8}.plyr-menu-dropdown{position:absolute;bottom:100%;right:0;background:#fff;border-radius:8px;box-shadow:0 4px 20px rgba(0,0,0,.3);min-width:160px;display:none;z-index:100;overflow:hidden;margin-bottom:8px}.plyr-menu-dropdown.show{display:block}.plyr-menu-item{display:flex;align-items:center;gap:12px;padding:12px 16px;cursor:pointer;color:#333;font-size:14px;transition:background .15s}.plyr-menu-item:hover{background:#f5f5f5}.plyr-menu-item svg{flex-shrink:0}.plyr-menu-item .arrow{margin-left:auto}.plyr-playmode-submenu,.plyr-speed-submenu{display:none;border-top:1px solid #eee}.plyr-playmode-submenu.show,.plyr-speed-submenu.show{display:block}.plyr-playmode-option,.plyr-speed-option{padding-left:32px;position:relative}.plyr-playmode-option.active,.plyr-speed-option.active{color:#3b82f6;font-weight:600}.plyr-playmode-option.active:before,.plyr-speed-option.active:before{content:"✓";position:absolute;left:12px}@media (max-width:768px),(pointer:coarse){.plyr--audio .plyr__volume{position:relative}.plyr--audio .plyr__volume input[type=range]{position:absolute;bottom:100%;left:50%;transform:translateX(-50%) rotate(-90deg);transform-origin:center center;width:80px;margin-bottom:40px;display:none}.plyr--audio .plyr__volume:focus-within input[type=range],.plyr--audio .plyr__volume:hover input[type=range]{display:block}.plyr--audio .plyr__volume:before{content:"";position:absolute;bottom:100%;left:50%;transform:translateX(-50%);width:36px;height:100px;background:rgba(0,0,0,.8);border-radius:8px;display:none;margin-bottom:8px}.plyr--audio .plyr__volume:focus-within:before,.plyr--audio .plyr__volume:hover:before{display:block}}.public-browse[data-v-32f9a209]{min-height:100vh;background:#0a0a0a;color:#fff}.header[data-v-32f9a209]{position:sticky;top:0;z-index:100;display:flex;align-items:center;justify-content:space-between;padding:16px 32px;background:hsla(0,0%,6%,.95);backdrop-filter:blur(10px);border-bottom:1px solid #1a1a1a}.header-left[data-v-32f9a209]{flex:1;min-width:0;z-index:1}.header-right[data-v-32f9a209]{flex:1;min-width:0;text-align:right;z-index:1}.header-center[data-v-32f9a209]{position:absolute;left:50%;transform:translateX(-50%);z-index:0}.logo[data-v-32f9a209]{font-size:20px;font-weight:600;color:#fff;cursor:pointer;transition:opacity .2s}.logo[data-v-32f9a209]:hover{opacity:.8}.breadcrumb[data-v-32f9a209]{display:flex;align-items:center;gap:4px;font-size:14px}.breadcrumb-item[data-v-32f9a209]{padding:6px 12px;border-radius:6px;cursor:pointer;transition:background .2s;color:#ccc}.breadcrumb-item[data-v-32f9a209]:hover{background:#252525;color:#fff}.breadcrumb-sep[data-v-32f9a209]{color:#444}.file-count[data-v-32f9a209]{color:#666;font-size:14px}.error-container[data-v-32f9a209],.loading-container[data-v-32f9a209]{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;color:#666}.error-credit[data-v-32f9a209]{margin-top:40px;text-align:center;color:hsla(0,0%,100%,.4);font-size:14px}.error-credit p[data-v-32f9a209]{margin-bottom:12px}.error-credit-links[data-v-32f9a209]{display:flex;gap:24px;justify-content:center}.error-credit-links a[data-v-32f9a209]{display:flex;align-items:center;gap:6px;color:hsla(0,0%,100%,.5);text-decoration:none;transition:color .2s}.error-credit-links a[data-v-32f9a209]:hover{color:#3b82f6}.loading-spinner[data-v-32f9a209]{width:48px;height:48px;border:3px solid #222;border-top-color:#3b82f6;border-radius:50%;animation:spin-32f9a209 1s linear infinite}.loading-spinner-small[data-v-32f9a209]{width:24px;height:24px;border:2px solid #222;border-top-color:#3b82f6;border-radius:50%;animation:spin-32f9a209 1s linear infinite}@keyframes spin-32f9a209{to{transform:rotate(1turn)}}.retry-btn[data-v-32f9a209]{margin-top:20px;padding:10px 32px;background:#3b82f6;border:none;border-radius:8px;color:#fff;font-size:14px;cursor:pointer;transition:background .2s}.retry-btn[data-v-32f9a209]:hover{background:#2563eb}.gallery-container[data-v-32f9a209]{padding:8px}@media (min-width:1200px){.gallery-container[data-v-32f9a209]{max-width:1400px;margin:0 auto;padding:24px}}.folders-section[data-v-32f9a209]{margin-bottom:24px}.folders-grid[data-v-32f9a209]{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:16px}.folder-card[data-v-32f9a209]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px 16px;background:#141414;border-radius:12px;border:1px solid #1a1a1a;cursor:pointer;transition:all .2s}.folder-card[data-v-32f9a209]:hover{background:#1a1a1a;border-color:#333;transform:translateY(-2px)}.folder-icon[data-v-32f9a209]{width:48px;height:48px;margin-bottom:12px;color:#555}.folder-icon svg[data-v-32f9a209]{width:100%;height:100%}.folder-name[data-v-32f9a209]{font-size:14px;color:#999;text-align:center;word-break:break-all}.waterfall[data-v-32f9a209]{display:flex;gap:16px}.waterfall-column[data-v-32f9a209]{flex:1;display:flex;flex-direction:column;gap:16px}.waterfall-item[data-v-32f9a209]{cursor:pointer}.image-wrapper[data-v-32f9a209]{position:relative;border-radius:12px;overflow:hidden;background:#141414;border:1px solid #1a1a1a;min-height:180px}.image-wrapper[data-v-32f9a209]:before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,#141414 25%,#1a1a1a 50%,#141414 75%);background-size:200% 100%;animation:shimmer-32f9a209 1.5s infinite;z-index:1;pointer-events:none}.image-wrapper.loaded[data-v-32f9a209]:before{display:none}.image-wrapper.loaded[data-v-32f9a209]{min-height:auto}.image-wrapper img[data-v-32f9a209],.image-wrapper video[data-v-32f9a209]{width:100%;display:block;position:relative;z-index:2}@keyframes shimmer-32f9a209{0%{background-position:200% 0}to{background-position:-200% 0}}.image-wrapper[data-v-32f9a209]:hover{border-color:#333}.overlay[data-v-32f9a209]{position:absolute;inset:0;background:linear-gradient(transparent 50%,rgba(0,0,0,.85));opacity:0;transition:opacity .2s;display:flex;align-items:flex-end;justify-content:flex-end;padding:12px;z-index:10}.image-wrapper:hover .overlay[data-v-32f9a209]{opacity:1}.file-placeholder[data-v-32f9a209]{width:100%;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#141414;color:#555;gap:12px;padding:16px;box-sizing:border-box}.file-placeholder svg[data-v-32f9a209]{width:48px;height:48px}.file-name[data-v-32f9a209]{font-size:12px;color:hsla(0,0%,100%,.7);text-align:center;word-break:break-all;max-width:100%;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.audio-placeholder[data-v-32f9a209]{width:100%;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;background:linear-gradient(135deg,#1a1a2e,#16213e);gap:12px;padding:16px;box-sizing:border-box}.audio-icon[data-v-32f9a209]{width:48px;height:48px;color:hsla(0,0%,100%,.6)}.audio-name[data-v-32f9a209]{font-size:12px;color:hsla(0,0%,100%,.7);text-align:center;word-break:break-all;max-width:100%;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.overlay-actions[data-v-32f9a209]{display:flex;gap:8px}.action-btn[data-v-32f9a209]{width:32px;height:32px;border:none;border-radius:50%;background:hsla(0,0%,100%,.08);backdrop-filter:blur(8px);cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;color:hsla(0,0%,100%,.6)}.action-btn svg[data-v-32f9a209]{width:16px;height:16px}.action-btn[data-v-32f9a209]:hover{background:hsla(0,0%,100%,.2);color:#fff;transform:scale(1.1)}.load-trigger[data-v-32f9a209]{display:flex;justify-content:center;align-items:center;padding:48px;min-height:100px}.loading-more[data-v-32f9a209]{display:flex;align-items:center;gap:12px;color:#666;font-size:14px}.no-more[data-v-32f9a209]{color:#444;font-size:14px}.credit-link[data-v-32f9a209]{display:block;margin-top:8px;color:#555;font-size:12px;text-decoration:none;transition:color .2s;text-align:center}.credit-link[data-v-32f9a209]:hover{color:#888}.preview-modal[data-v-32f9a209]{position:fixed;inset:0;z-index:1000;background:rgba(0,0,0,.97);display:flex;align-items:center;justify-content:center;overflow:hidden}.preview-content[data-v-32f9a209]{padding:60px 80px;box-sizing:border-box;overflow:hidden}.preview-content-mobile[data-v-32f9a209],.preview-content[data-v-32f9a209]{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.preview-content-mobile[data-v-32f9a209]{flex-direction:column;padding:0;position:absolute;top:0;left:0}.mobile-video-native[data-v-32f9a209]{width:100%;height:100%;-o-object-fit:contain;object-fit:contain;background:#000}.mobile-audio-wrap[data-v-32f9a209]{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;box-sizing:border-box}.mobile-audio-wrap .swipe-hint[data-v-32f9a209]{margin-top:20px}.swipe-hint[data-v-32f9a209]{font-size:12px;color:hsla(0,0%,100%,.4)}.other-file-preview[data-v-32f9a209]{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;color:hsla(0,0%,100%,.6);gap:16px}.other-file-preview svg[data-v-32f9a209]{width:64px;height:64px}.other-file-preview .file-name[data-v-32f9a209]{font-size:14px;color:hsla(0,0%,100%,.7);text-align:center;padding:0 20px;word-break:break-all}.swipe-viewport[data-v-32f9a209]{width:100%;height:100%;overflow:hidden;position:relative}.swipe-track[data-v-32f9a209]{width:300%;height:100%;display:flex;will-change:transform}.swipe-slide[data-v-32f9a209]{width:33.333%;flex-shrink:0;height:100%;display:flex;align-items:center;justify-content:center}.preview-image[data-v-32f9a209],.preview-video[data-v-32f9a209]{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.preview-close[data-v-32f9a209]{position:fixed;top:20px;right:20px;background:hsla(0,0%,100%,.1);border:none;color:#fff;cursor:pointer;width:48px;height:48px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:background .2s;z-index:1010}.preview-close[data-v-32f9a209]:hover{background:hsla(0,0%,100%,.2)}.preview-close svg[data-v-32f9a209]{width:28px;height:28px}.page-indicator[data-v-32f9a209]{position:fixed;bottom:30px;left:50%;transform:translateX(-50%);background:rgba(0,0,0,.6);color:hsla(0,0%,100%,.8);padding:8px 16px;border-radius:20px;font-size:14px;z-index:1010}.preview-next[data-v-32f9a209],.preview-prev[data-v-32f9a209]{position:fixed;top:50%;transform:translateY(-50%);background:hsla(0,0%,100%,.1);border:none;color:#fff;padding:16px;cursor:pointer;border-radius:50%;width:56px;height:56px;display:flex;align-items:center;justify-content:center;transition:background .2s;z-index:1010}.preview-next[data-v-32f9a209]:hover,.preview-prev[data-v-32f9a209]:hover{background:hsla(0,0%,100%,.2)}.preview-next svg[data-v-32f9a209],.preview-prev svg[data-v-32f9a209]{width:32px;height:32px}.preview-prev[data-v-32f9a209]{left:20px}.preview-next[data-v-32f9a209]{right:20px}.rotate-btn[data-v-32f9a209]{position:fixed;bottom:30px;right:20px;background:hsla(0,0%,100%,.1);border:none;color:#fff;cursor:pointer;width:48px;height:48px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:background .2s;z-index:1010}.rotate-btn[data-v-32f9a209]:hover{background:hsla(0,0%,100%,.2)}.rotate-btn svg[data-v-32f9a209]{width:24px;height:24px}@media (max-width:768px){.page-indicator[data-v-32f9a209]{bottom:40px}}@media (max-width:1199px) and (min-width:601px){.gallery-container[data-v-32f9a209]{padding:12px}.waterfall-column[data-v-32f9a209],.waterfall[data-v-32f9a209]{gap:10px}.image-wrapper[data-v-32f9a209]{border-radius:8px}}@media (max-width:600px){.header[data-v-32f9a209]{padding:10px 12px}.header-left .logo[data-v-32f9a209]{font-size:16px}.breadcrumb[data-v-32f9a209]{font-size:12px}.breadcrumb-item[data-v-32f9a209]{padding:4px 8px}.file-count[data-v-32f9a209]{font-size:12px}.gallery-container[data-v-32f9a209]{padding:6px}.waterfall-column[data-v-32f9a209],.waterfall[data-v-32f9a209]{gap:6px}.image-wrapper[data-v-32f9a209]{border-radius:6px;min-height:120px}.folders-section[data-v-32f9a209]{margin-bottom:12px}.folders-grid[data-v-32f9a209]{grid-template-columns:repeat(2,1fr);gap:8px}.folder-card[data-v-32f9a209]{padding:16px 12px;border-radius:8px}.folder-icon[data-v-32f9a209]{width:36px;height:36px;margin-bottom:8px}.folder-name[data-v-32f9a209]{font-size:12px}.load-trigger[data-v-32f9a209]{padding:24px;min-height:60px}}.copy-toast{position:fixed;bottom:80px;left:50%;transform:translateX(-50%) translateY(20px);background:rgba(0,0,0,.8);color:#fff;padding:10px 24px;border-radius:20px;font-size:14px;opacity:0;transition:all .3s ease;z-index:9999;pointer-events:none}.copy-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}.public-browse.light-mode[data-v-32f9a209]{background:#f5f5f5;color:#333}.light-mode .header[data-v-32f9a209]{background:hsla(0,0%,100%,.95);border-bottom-color:#e0e0e0}.light-mode .logo[data-v-32f9a209]{color:#333}.light-mode .breadcrumb-item[data-v-32f9a209]{color:#666}.light-mode .breadcrumb-item[data-v-32f9a209]:hover{background:#e8e8e8;color:#333}.light-mode .breadcrumb-sep[data-v-32f9a209]{color:#ccc}.light-mode .error-container[data-v-32f9a209],.light-mode .file-count[data-v-32f9a209],.light-mode .loading-container[data-v-32f9a209]{color:#999}.light-mode .error-credit[data-v-32f9a209]{color:rgba(0,0,0,.4)}.light-mode .error-credit-links a[data-v-32f9a209]{color:rgba(0,0,0,.5)}.light-mode .loading-spinner-small[data-v-32f9a209],.light-mode .loading-spinner[data-v-32f9a209]{border-color:#ddd;border-top-color:#3b82f6}.light-mode .folder-card[data-v-32f9a209]{background:#fff;border-color:#e0e0e0}.light-mode .folder-card[data-v-32f9a209]:hover{background:#fafafa;border-color:#ccc}.light-mode .folder-icon[data-v-32f9a209]{color:#999}.light-mode .folder-name[data-v-32f9a209]{color:#666}.light-mode .image-wrapper[data-v-32f9a209]{background:#fff;border-color:#e0e0e0}.light-mode .image-wrapper[data-v-32f9a209]:before{background:linear-gradient(90deg,#f5f5f5 25%,#fff 50%,#f5f5f5 75%)}.light-mode .image-wrapper[data-v-32f9a209]:hover{border-color:#ccc}.light-mode .file-placeholder[data-v-32f9a209]{color:#ccc;background:#f5f5f5;color:#999}.light-mode .file-name[data-v-32f9a209]{color:rgba(0,0,0,.6)}.light-mode .audio-placeholder[data-v-32f9a209]{background:linear-gradient(135deg,#e8f4f8,#d4e5f7)}.light-mode .audio-icon[data-v-32f9a209]{color:rgba(0,0,0,.4)}.light-mode .audio-name[data-v-32f9a209]{color:rgba(0,0,0,.6)}.light-mode .no-more[data-v-32f9a209]{color:#bbb}.light-mode .credit-link[data-v-32f9a209]{color:#aaa}.light-mode .credit-link[data-v-32f9a209]:hover{color:#666}.light-mode .loading-more[data-v-32f9a209]{color:#999} \ No newline at end of file +@charset "UTF-8";@keyframes plyr-progress{to{background-position:25px 0;background-position:var(--plyr-progress-loading-size,25px) 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{0%{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;align-items:center;direction:ltr;display:flex;flex-direction:column;font-family:inherit;font-family:var(--plyr-font-family,inherit);font-variant-numeric:tabular-nums;font-weight:400;font-weight:var(--plyr-font-weight-regular,400);line-height:1.7;line-height:var(--plyr-line-height,1.7);max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease;z-index:0}.plyr audio,.plyr iframe,.plyr video{display:block;height:100%;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui :after,.plyr--full-ui :before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4a5464;background:var(--plyr-badge-background,#4a5464);border-radius:2px;border-radius:var(--plyr-badge-border-radius,2px);color:#fff;color:var(--plyr-badge-text-color,#fff);font-size:9px;font-size:var(--plyr-font-size-badge,9px);line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;display:none;font-size:13px;font-size:var(--plyr-font-size-small,13px);left:0;padding:10px;padding:var(--plyr-control-spacing,10px);position:absolute;text-align:center;transition:transform .4s ease-in-out;width:100%}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:15px;font-size:var(--plyr-font-size-base,15px);padding:20px;padding:calc(var(--plyr-control-spacing, 10px)*2)}}@media (min-width:768px){.plyr__captions{font-size:18px;font-size:var(--plyr-font-size-large,18px)}}.plyr--captions-active .plyr__captions{display:block}.plyr:not(.plyr--hide-controls) .plyr__controls:not(:empty)~.plyr__captions{transform:translateY(-40px);transform:translateY(calc(var(--plyr-control-spacing, 10px)*-4))}.plyr__caption{background:#000c;background:var(--plyr-captions-background,#000c);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;color:#fff;color:var(--plyr-captions-text-color,#fff);line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__caption div{display:inline}.plyr__control{background:#0000;border:0;border-radius:4px;border-radius:var(--plyr-control-radius,4px);color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;padding:calc(var(--plyr-control-spacing, 10px)*.7);position:relative;transition:all .1s ease-in-out}.plyr__control svg{display:block;fill:currentColor;height:18px;height:var(--plyr-control-icon-size,18px);pointer-events:none;width:18px;width:var(--plyr-control-icon-size,18px)}.plyr__control:focus{outline:0}.plyr__control:focus-visible{outline:2px dashed #00b2ff;outline:2px dashed var(--plyr-focus-visible-color,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)));outline-offset:2px}a.plyr__control{text-decoration:none}.plyr__control.plyr__control--pressed .icon--not-pressed,.plyr__control.plyr__control--pressed .label--not-pressed,.plyr__control:not(.plyr__control--pressed) .icon--pressed,.plyr__control:not(.plyr__control--pressed) .label--pressed,a.plyr__control:after,a.plyr__control:before{display:none}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;justify-content:flex-end;text-align:center}.plyr__controls .plyr__progress__container{flex:1;min-width:0}.plyr__controls .plyr__controls__item{margin-left:2.5px;margin-left:calc(var(--plyr-control-spacing, 10px)/4)}.plyr__controls .plyr__controls__item:first-child{margin-left:0;margin-right:auto}.plyr__controls .plyr__controls__item.plyr__progress__container{padding-left:2.5px;padding-left:calc(var(--plyr-control-spacing, 10px)/4)}.plyr__controls .plyr__controls__item.plyr__time{padding:0 5px;padding:0 calc(var(--plyr-control-spacing, 10px)/2)}.plyr__controls .plyr__controls__item.plyr__progress__container:first-child,.plyr__controls .plyr__controls__item.plyr__time+.plyr__time,.plyr__controls .plyr__controls__item.plyr__time:first-child{padding-left:0}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip],.plyr__controls:empty{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:#ffffffe6;background:var(--plyr-menu-background,#ffffffe6);border-radius:8px;border-radius:var(--plyr-menu-radius,8px);bottom:100%;box-shadow:0 1px 2px #00000026;box-shadow:var(--plyr-menu-shadow,0 1px 2px #00000026);color:#4a5464;color:var(--plyr-menu-color,#4a5464);font-size:15px;font-size:var(--plyr-font-size-base,15px);margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container:after{border:4px solid #0000;border-top-color:#ffffffe6;border:var(--plyr-menu-arrow-size,4px) solid #0000;border-top-color:var(--plyr-menu-background,#ffffffe6);content:"";height:0;position:absolute;right:14px;right:calc(var(--plyr-control-icon-size, 18px)/2 + var(--plyr-control-spacing, 10px)*.7 - var(--plyr-menu-arrow-size, 4px)/2);top:100%;width:0}.plyr__menu__container [role=menu]{padding:7px;padding:calc(var(--plyr-control-spacing, 10px)*.7)}.plyr__menu__container [role=menuitem],.plyr__menu__container [role=menuitemradio]{margin-top:2px}.plyr__menu__container [role=menuitem]:first-child,.plyr__menu__container [role=menuitemradio]:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4a5464;color:var(--plyr-menu-color,#4a5464);display:flex;font-size:13px;font-size:var(--plyr-font-size-menu,var(--plyr-font-size-small,13px));padding:4.66667px 10.5px;padding:calc(var(--plyr-control-spacing, 10px)*.7/1.5) calc(var(--plyr-control-spacing, 10px)*.7*1.5);-webkit-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control>span{align-items:inherit;display:flex;width:100%}.plyr__menu__container .plyr__control:after{border:4px solid #0000;border:var(--plyr-menu-item-arrow-size,4px) solid #0000;content:"";position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px;padding-right:calc(var(--plyr-control-spacing, 10px)*.7*4)}.plyr__menu__container .plyr__control--forward:after{border-left-color:#728197;border-left-color:var(--plyr-menu-arrow-color,#728197);right:6.5px;right:calc(var(--plyr-control-spacing, 10px)*.7*1.5 - var(--plyr-menu-item-arrow-size, 4px))}.plyr__menu__container .plyr__control--forward:focus-visible:after,.plyr__menu__container .plyr__control--forward:hover:after{border-left-color:initial}.plyr__menu__container .plyr__control--back{font-weight:400;font-weight:var(--plyr-font-weight-regular,400);margin:7px;margin:calc(var(--plyr-control-spacing, 10px)*.7);margin-bottom:3.5px;margin-bottom:calc(var(--plyr-control-spacing, 10px)*.7/2);padding-left:28px;padding-left:calc(var(--plyr-control-spacing, 10px)*.7*4);position:relative;width:calc(100% - 14px);width:calc(100% - var(--plyr-control-spacing, 10px)*.7*2)}.plyr__menu__container .plyr__control--back:after{border-right-color:#728197;border-right-color:var(--plyr-menu-arrow-color,#728197);left:6.5px;left:calc(var(--plyr-control-spacing, 10px)*.7*1.5 - var(--plyr-menu-item-arrow-size, 4px))}.plyr__menu__container .plyr__control--back:before{background:#dcdfe5;background:var(--plyr-menu-back-border-color,#dcdfe5);box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 var(--plyr-menu-back-border-shadow-color,#fff);content:"";height:1px;left:0;margin-top:3.5px;margin-top:calc(var(--plyr-control-spacing, 10px)*.7/2);overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back:focus-visible:after,.plyr__menu__container .plyr__control--back:hover:after{border-right-color:initial}.plyr__menu__container .plyr__control[role=menuitemradio]{padding-left:7px;padding-left:calc(var(--plyr-control-spacing, 10px)*.7)}.plyr__menu__container .plyr__control[role=menuitemradio]:after,.plyr__menu__container .plyr__control[role=menuitemradio]:before{border-radius:100%}.plyr__menu__container .plyr__control[role=menuitemradio]:before{background:#0000001a;content:"";display:block;flex-shrink:0;height:16px;margin-right:10px;margin-right:var(--plyr-control-spacing,10px);transition:all .3s ease;width:16px}.plyr__menu__container .plyr__control[role=menuitemradio]:after{background:#fff;border:0;height:6px;left:12px;opacity:0;top:50%;transform:translateY(-50%) scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]:before{background:#00b2ff;background:var(--plyr-control-toggle-checked-background,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)))}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]:after{opacity:1;transform:translateY(-50%) scale(1)}.plyr__menu__container .plyr__control[role=menuitemradio]:focus-visible:before,.plyr__menu__container .plyr__control[role=menuitemradio]:hover:before{background:#23282f1a}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-5px;margin-right:calc(var(--plyr-control-spacing, 10px)*.7*-1 + 2px);overflow:hidden;padding-left:24.5px;padding-left:calc(var(--plyr-control-spacing, 10px)*.7*3.5);pointer-events:none}.plyr--full-ui input[type=range]{appearance:none;background:#0000;border:0;border-radius:26px;border-radius:calc(var(--plyr-range-thumb-height, 13px)*2);color:#00b2ff;color:var(--plyr-range-fill-background,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)));display:block;height:19px;height:calc(var(--plyr-range-thumb-active-shadow-width, 3px)*2 + var(--plyr-range-thumb-height, 13px));margin:0;min-width:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:#0000;background-image:linear-gradient(90deg,currentColor,#0000 0);background-image:linear-gradient(to right,currentColor var(--value,0),#0000 var(--value,0));border:0;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height, 5px)/2);height:5px;height:var(--plyr-range-track-height,5px);-webkit-transition:box-shadow .3s ease;transition:box-shadow .3s ease;-webkit-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-webkit-slider-thumb{appearance:none;background:#fff;background:var(--plyr-range-thumb-background,#fff);border:0;border-radius:100%;box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33);height:13px;height:var(--plyr-range-thumb-height,13px);margin-top:-4px;margin-top:calc((var(--plyr-range-thumb-height, 13px) - var(--plyr-range-track-height, 5px))/2*-1);position:relative;-webkit-transition:all .2s ease;transition:all .2s ease;width:13px;width:var(--plyr-range-thumb-height,13px)}.plyr--full-ui input[type=range]::-moz-range-track{background:#0000;border:0;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height, 5px)/2);height:5px;height:var(--plyr-range-track-height,5px);-moz-transition:box-shadow .3s ease;transition:box-shadow .3s ease;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;background:var(--plyr-range-thumb-background,#fff);border:0;border-radius:100%;box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33);height:13px;height:var(--plyr-range-thumb-height,13px);position:relative;-moz-transition:all .2s ease;transition:all .2s ease;width:13px;width:var(--plyr-range-thumb-height,13px)}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height, 5px)/2);height:5px;height:var(--plyr-range-track-height,5px)}.plyr--full-ui input[type=range]::-ms-track{color:#0000}.plyr--full-ui input[type=range]::-ms-fill-upper,.plyr--full-ui input[type=range]::-ms-track{background:#0000;border:0;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height, 5px)/2);height:5px;height:var(--plyr-range-track-height,5px);-ms-transition:box-shadow .3s ease;transition:box-shadow .3s ease;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:#0000;background:currentColor;border:0;border-radius:2.5px;border-radius:calc(var(--plyr-range-track-height, 5px)/2);height:5px;height:var(--plyr-range-track-height,5px);-ms-transition:box-shadow .3s ease;transition:box-shadow .3s ease;user-select:none}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;background:var(--plyr-range-thumb-background,#fff);border:0;border-radius:100%;box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33);height:13px;height:var(--plyr-range-thumb-height,13px);margin-top:0;position:relative;-ms-transition:all .2s ease;transition:all .2s ease;width:13px;width:var(--plyr-range-thumb-height,13px)}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]:focus-visible::-webkit-slider-runnable-track{outline:2px dashed #00b2ff;outline:2px dashed var(--plyr-focus-visible-color,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)));outline-offset:2px}.plyr--full-ui input[type=range]:focus-visible::-moz-range-track{outline:2px dashed #00b2ff;outline:2px dashed var(--plyr-focus-visible-color,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)));outline-offset:2px}.plyr--full-ui input[type=range]:focus-visible::-ms-track{outline:2px dashed #00b2ff;outline:2px dashed var(--plyr-focus-visible-color,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)));outline-offset:2px}.plyr__poster{background-color:#000;background-color:var(--plyr-video-background,var(--plyr-video-background,#000));background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .2s ease;width:100%;z-index:1}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr--youtube.plyr--paused.plyr__poster-enabled:not(.plyr--stopped) .plyr__poster{display:none}.plyr__time{font-size:13px;font-size:var(--plyr-font-size-time,var(--plyr-font-size-small,13px))}.plyr__time+.plyr__time:before{content:"⁄";margin-right:10px;margin-right:var(--plyr-control-spacing,10px)}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr__tooltip{background:#fff;background:var(--plyr-tooltip-background,#fff);border-radius:5px;border-radius:var(--plyr-tooltip-radius,5px);bottom:100%;box-shadow:0 1px 2px #00000026;box-shadow:var(--plyr-tooltip-shadow,0 1px 2px #00000026);color:#4a5464;color:var(--plyr-tooltip-color,#4a5464);font-size:13px;font-size:var(--plyr-font-size-small,13px);font-weight:400;font-weight:var(--plyr-font-weight-regular,400);left:50%;line-height:1.3;margin-bottom:10px;margin-bottom:calc(var(--plyr-control-spacing, 10px)/2*2);opacity:0;padding:5px 7.5px;padding:calc(var(--plyr-control-spacing, 10px)/2) calc(var(--plyr-control-spacing, 10px)/2*1.5);pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s ease .1s,opacity .2s ease .1s;white-space:nowrap;z-index:2}.plyr__tooltip:before{border-left:4px solid #0000;border-left:var(--plyr-tooltip-arrow-size,4px) solid #0000;border-right:4px solid #0000;border-right:var(--plyr-tooltip-arrow-size,4px) solid #0000;border-top:4px solid #fff;border-top:var(--plyr-tooltip-arrow-size,4px) solid var(--plyr-tooltip-background,#fff);bottom:-4px;bottom:calc(var(--plyr-tooltip-arrow-size, 4px)*-1);content:"";height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control:focus-visible .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translateY(10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip:before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip:before{left:16px;left:calc(var(--plyr-control-icon-size, 18px)/2 + var(--plyr-control-spacing, 10px)*.7)}.plyr__controls>.plyr__control:last-child .plyr__tooltip{left:auto;right:0;transform:translateY(10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip:before{left:auto;right:16px;right:calc(var(--plyr-control-icon-size, 18px)/2 + var(--plyr-control-spacing, 10px)*.7);transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control:focus-visible .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child:focus-visible .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child:focus-visible .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0) scale(1)}.plyr__progress{left:6.5px;left:calc(var(--plyr-range-thumb-height, 13px)*.5);margin-right:13px;margin-right:var(--plyr-range-thumb-height,13px);position:relative}.plyr__progress input[type=range],.plyr__progress__buffer{margin-left:-6.5px;margin-left:calc(var(--plyr-range-thumb-height, 13px)*-.5);margin-right:-6.5px;margin-right:calc(var(--plyr-range-thumb-height, 13px)*-.5);width:calc(100% + 13px);width:calc(100% + var(--plyr-range-thumb-height, 13px))}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{left:0;max-width:120px;overflow-wrap:break-word}.plyr__progress__buffer{-webkit-appearance:none;background:#0000;border:0;border-radius:100px;height:5px;height:var(--plyr-range-track-height,5px);left:0;margin-top:-2.5px;margin-top:calc(var(--plyr-range-track-height, 5px)/2*-1);padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:#0000}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:5px;min-width:var(--plyr-range-track-height,5px);-webkit-transition:width .2s ease;transition:width .2s ease}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:5px;min-width:var(--plyr-range-track-height,5px);-moz-transition:width .2s ease;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;-ms-transition:width .2s ease;transition:width .2s ease}.plyr--loading .plyr__progress__buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,#23282f99 25%,#0000 0,#0000 50%,#23282f99 0,#23282f99 75%,#0000 0,#0000);background-image:linear-gradient(-45deg,var(--plyr-progress-loading-background,#23282f99) 25%,#0000 25%,#0000 50%,var(--plyr-progress-loading-background,#23282f99) 50%,var(--plyr-progress-loading-background,#23282f99) 75%,#0000 75%,#0000);background-repeat:repeat-x;background-size:25px 25px;background-size:var(--plyr-progress-loading-size,25px) var(--plyr-progress-loading-size,25px);color:#0000}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:#ffffff40;background-color:var(--plyr-video-progress-buffered-background,#ffffff40)}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:#c1c8d199;background-color:var(--plyr-audio-progress-buffered-background,#c1c8d199)}.plyr__progress__marker{background-color:#fff;background-color:var(--plyr-progress-marker-background,#fff);border-radius:1px;height:5px;height:var(--plyr-range-track-height,5px);position:absolute;top:50%;transform:translate(-50%,-50%);width:3px;width:var(--plyr-progress-marker-width,3px);z-index:3}.plyr__volume{align-items:center;display:flex;position:relative}.plyr__volume input[type=range]{margin-left:5px;margin-left:calc(var(--plyr-control-spacing, 10px)/2);margin-right:5px;margin-right:calc(var(--plyr-control-spacing, 10px)/2);max-width:90px;min-width:60px;position:relative;z-index:2}.plyr--audio{display:block}.plyr--audio .plyr__controls{background:#fff;background:var(--plyr-audio-controls-background,#fff);border-radius:inherit;color:#4a5464;color:var(--plyr-audio-control-color,#4a5464);padding:10px;padding:var(--plyr-control-spacing,10px)}.plyr--audio .plyr__control:focus-visible,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#00b2ff;background:var(--plyr-audio-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)));color:#fff;color:var(--plyr-audio-control-color-hover,#fff)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:#c1c8d199;background-color:var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,#c1c8d199))}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:#c1c8d199;background-color:var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,#c1c8d199))}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:#c1c8d199;background-color:var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,#c1c8d199))}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #23282f1a;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,#23282f1a)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #23282f1a;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,#23282f1a)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #23282f1a;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,#23282f1a)}.plyr--audio .plyr__progress__buffer{color:#c1c8d199;color:var(--plyr-audio-progress-buffered-background,#c1c8d199)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;background:var(--plyr-video-background,var(--plyr-video-background,#000));border-radius:inherit;height:100%;margin:auto;overflow:hidden;position:relative;width:100%}.plyr__video-embed,.plyr__video-wrapper--fixed-ratio{aspect-ratio:16/9}@supports not (aspect-ratio:16/9){.plyr__video-embed,.plyr__video-wrapper--fixed-ratio{height:0;padding-bottom:56.25%;position:relative}}.plyr__video-embed iframe,.plyr__video-wrapper--fixed-ratio video{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr--video .plyr__controls{background:linear-gradient(#0000,#000000bf);background:var(--plyr-video-controls-background,linear-gradient(#0000,#000000bf));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;color:var(--plyr-video-control-color,#fff);left:0;padding:5px;padding:calc(var(--plyr-control-spacing, 10px)/2);padding-top:20px;padding-top:calc(var(--plyr-control-spacing, 10px)*2);position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:3}@media (min-width:480px){.plyr--video .plyr__controls{padding:10px;padding:var(--plyr-control-spacing,10px);padding-top:35px;padding-top:calc(var(--plyr-control-spacing, 10px)*3.5)}}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr--video .plyr__control:focus-visible,.plyr--video .plyr__control:hover,.plyr--video .plyr__control[aria-expanded=true]{background:#00b2ff;background:var(--plyr-video-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)));color:#fff;color:var(--plyr-video-control-color-hover,#fff)}.plyr__control--overlaid{background:#00b2ff;background:var(--plyr-video-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b2ff)));border:0;border-radius:100%;color:#fff;color:var(--plyr-video-control-color,#fff);display:none;left:50%;opacity:.9;padding:15px;padding:calc(var(--plyr-control-spacing, 10px)*1.5);position:absolute;top:50%;transform:translate(-50%,-50%);transition:.3s;z-index:2}.plyr__control--overlaid svg{left:2px;position:relative}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{opacity:1}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:#ffffff40;background-color:var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,#ffffff40))}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:#ffffff40;background-color:var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,#ffffff40))}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:#ffffff40;background-color:var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,#ffffff40))}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #ffffff80;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,#ffffff80)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #ffffff80;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,#ffffff80)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px #23282f26,0 0 0 1px #23282f33,0 0 0 3px #ffffff80;box-shadow:var(--plyr-range-thumb-shadow,0 1px 1px #23282f26,0 0 0 1px #23282f33),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,#ffffff80)}.plyr--video .plyr__progress__buffer{color:#ffffff40;color:var(--plyr-video-progress-buffered-background,#ffffff40)}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen video{height:100%}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:fullscreen .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;inset:0;margin:0;position:fixed;width:100%;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px;font-size:var(--plyr-font-size-xlarge,21px)}}.plyr__ads{border-radius:inherit;cursor:pointer;inset:0;overflow:hidden;position:absolute;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads:after{background:#23282f;border-radius:2px;bottom:10px;bottom:var(--plyr-control-spacing,10px);color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;right:var(--plyr-control-spacing,10px);z-index:3}.plyr__ads:empty:after{display:none}.plyr__cues{background:currentColor;display:block;height:5px;height:var(--plyr-range-track-height,5px);left:0;opacity:.8;position:absolute;top:50%;transform:translateY(-50%);width:3px;z-index:3}.plyr__preview-thumb{background-color:#fff;background-color:var(--plyr-tooltip-background,#fff);border-radius:8px;border-radius:var(--plyr-menu-radius,8px);bottom:100%;box-shadow:0 1px 2px #00000026;box-shadow:var(--plyr-tooltip-shadow,0 1px 2px #00000026);margin-bottom:10px;margin-bottom:calc(var(--plyr-control-spacing, 10px)/2*2);opacity:0;padding:3px;pointer-events:none;position:absolute;transform:translateY(10px) scale(.8);transform-origin:50% 100%;transition:transform .2s ease .1s,opacity .2s ease .1s;z-index:2}.plyr__preview-thumb--is-shown{opacity:1;transform:translate(0) scale(1)}.plyr__preview-thumb:before{border-left:4px solid #0000;border-left:var(--plyr-tooltip-arrow-size,4px) solid #0000;border-right:4px solid #0000;border-right:var(--plyr-tooltip-arrow-size,4px) solid #0000;border-top:4px solid #fff;border-top:var(--plyr-tooltip-arrow-size,4px) solid var(--plyr-tooltip-background,#fff);bottom:-4px;bottom:calc(var(--plyr-tooltip-arrow-size, 4px)*-1);content:"";height:0;left:calc(50% + var(--preview-arrow-offset));position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr__preview-thumb__image-container{background:#c1c8d1;border-radius:7px;border-radius:calc(var(--plyr-menu-radius, 8px) - 1px);overflow:hidden;position:relative;z-index:0}.plyr__preview-thumb__image-container img,.plyr__preview-thumb__image-container:after{height:100%;left:0;position:absolute;top:0;width:100%}.plyr__preview-thumb__image-container:after{border-radius:inherit;box-shadow:inset 0 0 0 1px #00000026;content:"";pointer-events:none}.plyr__preview-thumb__image-container img{max-height:none;max-width:none}.plyr__preview-thumb__time-container{background:linear-gradient(#0000,#000000bf);background:var(--plyr-video-controls-background,linear-gradient(#0000,#000000bf));border-bottom-left-radius:7px;border-bottom-left-radius:calc(var(--plyr-menu-radius, 8px) - 1px);border-bottom-right-radius:7px;border-bottom-right-radius:calc(var(--plyr-menu-radius, 8px) - 1px);bottom:0;left:0;line-height:1.1;padding:20px 6px 6px;position:absolute;right:0;z-index:3}.plyr__preview-thumb__time-container span{color:#fff;font-size:13px;font-size:var(--plyr-font-size-time,var(--plyr-font-size-small,13px))}.plyr__preview-scrubbing{filter:blur(1px);height:100%;inset:0;margin:auto;opacity:0;overflow:hidden;pointer-events:none;position:absolute;transition:opacity .3s ease;width:100%;z-index:1}.plyr__preview-scrubbing--is-shown{opacity:1}.plyr__preview-scrubbing img{height:100%;left:0;max-height:none;max-width:none;object-fit:contain;position:absolute;top:0;width:100%}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);border:0!important;height:1px!important;overflow:hidden;padding:0!important;position:absolute!important;width:1px!important}.plyr [hidden]{display:none!important}.tm-viewport[data-v-6479d338]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.tm-media[data-v-6479d338]{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain;-webkit-user-drag:none}.tm-video-wrap[data-v-6479d338]{width:100%;max-width:800px;touch-action:auto}.plyr-video[data-v-6479d338]{width:100%}.tm-audio-wrap[data-v-6479d338]{display:flex;flex-direction:column;align-items:center;gap:20px;padding:24px;width:100%;max-width:400px;touch-action:auto}.plyr-audio[data-v-6479d338]{width:100%}.audio-cover[data-v-6479d338]{width:200px;height:200px;border-radius:12px;overflow:hidden;background:hsla(0,0%,100%,.1);display:flex;align-items:center;justify-content:center;box-shadow:0 8px 32px rgba(0,0,0,.3)}.cover-img[data-v-6479d338]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.audio-icon-large[data-v-6479d338]{width:80px;height:80px;color:hsla(0,0%,100%,.4)}.audio-info[data-v-6479d338]{text-align:center;width:100%}.audio-title[data-v-6479d338]{font-size:18px;font-weight:600;color:#fff;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.audio-artist[data-v-6479d338]{font-size:14px;color:hsla(0,0%,100%,.6)}.audio-placeholder[data-v-6479d338],.video-placeholder[data-v-6479d338]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;color:hsla(0,0%,100%,.4)}.video-placeholder svg[data-v-6479d338]{width:80px;height:80px}.audio-placeholder .audio-name[data-v-6479d338]{font-size:14px;color:hsla(0,0%,100%,.6);text-align:center;max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.plyr{--plyr-color-main:#3b82f6}.plyr--audio .plyr__controls{background:hsla(0,0%,100%,.1);border-radius:8px}.plyr-custom-menu{position:relative;display:flex;align-items:center}.plyr-menu-btn{background:none;border:none;cursor:pointer;padding:8px;color:inherit;display:flex;align-items:center;justify-content:center}.plyr-menu-btn:hover{opacity:.8}.plyr-menu-dropdown{position:absolute;bottom:100%;right:0;background:#fff;border-radius:8px;box-shadow:0 4px 20px rgba(0,0,0,.3);min-width:160px;display:none;z-index:100;overflow:hidden;margin-bottom:8px}.plyr-menu-dropdown.show{display:block}.plyr-menu-item{display:flex;align-items:center;gap:12px;padding:12px 16px;cursor:pointer;color:#333;font-size:14px;transition:background .15s}.plyr-menu-item:hover{background:#f5f5f5}.plyr-menu-item svg{flex-shrink:0}.plyr-menu-item .arrow{margin-left:auto}.plyr-playmode-submenu,.plyr-speed-submenu{display:none;border-top:1px solid #eee}.plyr-playmode-submenu.show,.plyr-speed-submenu.show{display:block}.plyr-playmode-option,.plyr-speed-option{padding-left:32px;position:relative}.plyr-playmode-option.active,.plyr-speed-option.active{color:#3b82f6;font-weight:600}.plyr-playmode-option.active:before,.plyr-speed-option.active:before{content:"✓";position:absolute;left:12px}@media (max-width:768px),(pointer:coarse){.plyr--audio .plyr__volume{position:relative}.plyr--audio .plyr__volume input[type=range]{position:absolute;bottom:100%;left:50%;transform:translateX(-50%) rotate(-90deg);transform-origin:center center;width:80px;margin-bottom:40px;display:none}.plyr--audio .plyr__volume:focus-within input[type=range],.plyr--audio .plyr__volume:hover input[type=range]{display:block}.plyr--audio .plyr__volume:before{content:"";position:absolute;bottom:100%;left:50%;transform:translateX(-50%);width:36px;height:100px;background:rgba(0,0,0,.8);border-radius:8px;display:none;margin-bottom:8px}.plyr--audio .plyr__volume:focus-within:before,.plyr--audio .plyr__volume:hover:before{display:block}}.public-browse[data-v-6da48de9]{min-height:100vh;background:#0a0a0a;color:#fff}.header[data-v-6da48de9]{position:sticky;top:0;z-index:100;display:flex;align-items:center;justify-content:space-between;padding:16px 24px;background:hsla(0,0%,6%,.95);backdrop-filter:blur(10px);border-bottom:1px solid #1a1a1a;position:relative}.header-left[data-v-6da48de9],.header-right[data-v-6da48de9]{flex:0 0 auto;z-index:1}.header-center[data-v-6da48de9]{position:absolute;left:50%;transform:translateX(-50%);z-index:0}.logo[data-v-6da48de9]{font-size:20px;font-weight:600;color:#fff;cursor:pointer;transition:opacity .2s}.logo[data-v-6da48de9]:hover{opacity:.8}.breadcrumb[data-v-6da48de9]{display:flex;align-items:center;gap:4px;font-size:14px}.breadcrumb-item[data-v-6da48de9]{padding:6px 12px;border-radius:6px;cursor:pointer;transition:background .2s;color:#ccc}.breadcrumb-item[data-v-6da48de9]:hover{background:#252525;color:#fff}.breadcrumb-sep[data-v-6da48de9]{color:#444}.file-count[data-v-6da48de9]{color:#666;font-size:14px}.error-container[data-v-6da48de9],.loading-container[data-v-6da48de9]{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;color:#666}.error-credit[data-v-6da48de9]{margin-top:40px;text-align:center;color:hsla(0,0%,100%,.4);font-size:14px}.error-credit p[data-v-6da48de9]{margin-bottom:12px}.error-credit-links[data-v-6da48de9]{display:flex;gap:24px;justify-content:center}.error-credit-links a[data-v-6da48de9]{display:flex;align-items:center;gap:6px;color:hsla(0,0%,100%,.5);text-decoration:none;transition:color .2s}.error-credit-links a[data-v-6da48de9]:hover{color:#3b82f6}.loading-spinner[data-v-6da48de9]{width:48px;height:48px;border:3px solid #222;border-top-color:#3b82f6;border-radius:50%;animation:spin-6da48de9 1s linear infinite}.loading-spinner-small[data-v-6da48de9]{width:24px;height:24px;border:2px solid #222;border-top-color:#3b82f6;border-radius:50%;animation:spin-6da48de9 1s linear infinite}@keyframes spin-6da48de9{to{transform:rotate(1turn)}}.retry-btn[data-v-6da48de9]{margin-top:20px;padding:10px 32px;background:#3b82f6;border:none;border-radius:8px;color:#fff;font-size:14px;cursor:pointer;transition:background .2s}.retry-btn[data-v-6da48de9]:hover{background:#2563eb}.gallery-container[data-v-6da48de9]{padding:8px}@media (min-width:1200px){.gallery-container[data-v-6da48de9]{max-width:1400px;margin:0 auto;padding:24px}}.folders-section[data-v-6da48de9]{margin-bottom:24px}.folders-grid[data-v-6da48de9]{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:16px}.folder-card[data-v-6da48de9]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px 16px;background:#141414;border-radius:12px;border:1px solid #1a1a1a;cursor:pointer;transition:all .2s}.folder-card[data-v-6da48de9]:hover{background:#1a1a1a;border-color:#333;transform:translateY(-2px)}.folder-icon[data-v-6da48de9]{width:48px;height:48px;margin-bottom:12px;color:#555}.folder-icon svg[data-v-6da48de9]{width:100%;height:100%}.folder-name[data-v-6da48de9]{font-size:14px;color:#999;text-align:center;word-break:break-all}.waterfall[data-v-6da48de9]{display:flex;gap:16px}.waterfall-column[data-v-6da48de9]{flex:1;display:flex;flex-direction:column;gap:16px}.waterfall-item[data-v-6da48de9]{cursor:pointer}.image-wrapper[data-v-6da48de9]{position:relative;border-radius:12px;overflow:hidden;background:#141414;border:1px solid #1a1a1a;min-height:180px}.image-wrapper[data-v-6da48de9]:before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,#141414 25%,#1a1a1a 50%,#141414 75%);background-size:200% 100%;animation:shimmer-6da48de9 1.5s infinite;z-index:1;pointer-events:none}.image-wrapper.loaded[data-v-6da48de9]:before{display:none}.image-wrapper.loaded[data-v-6da48de9]{min-height:auto}.image-wrapper img[data-v-6da48de9],.image-wrapper video[data-v-6da48de9]{width:100%;display:block;position:relative;z-index:2}@keyframes shimmer-6da48de9{0%{background-position:200% 0}to{background-position:-200% 0}}.image-wrapper[data-v-6da48de9]:hover{border-color:#333}.overlay[data-v-6da48de9]{position:absolute;inset:0;background:linear-gradient(transparent 50%,rgba(0,0,0,.85));opacity:0;transition:opacity .2s;display:flex;align-items:flex-end;justify-content:flex-end;padding:12px;z-index:10}.image-wrapper:hover .overlay[data-v-6da48de9]{opacity:1}.file-placeholder[data-v-6da48de9]{width:100%;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#141414;color:#555;gap:12px;padding:16px;box-sizing:border-box}.file-placeholder svg[data-v-6da48de9]{width:48px;height:48px}.file-name[data-v-6da48de9]{font-size:12px;color:hsla(0,0%,100%,.7);text-align:center;word-break:break-all;max-width:100%;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.audio-placeholder[data-v-6da48de9]{width:100%;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;background:linear-gradient(135deg,#1a1a2e,#16213e);gap:12px;padding:16px;box-sizing:border-box}.audio-icon[data-v-6da48de9]{width:48px;height:48px;color:hsla(0,0%,100%,.6)}.audio-name[data-v-6da48de9]{font-size:12px;color:hsla(0,0%,100%,.7);text-align:center;word-break:break-all;max-width:100%;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.overlay-actions[data-v-6da48de9]{display:flex;gap:8px}.action-btn[data-v-6da48de9]{width:32px;height:32px;border:none;border-radius:50%;background:hsla(0,0%,100%,.08);backdrop-filter:blur(8px);cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;color:hsla(0,0%,100%,.6)}.action-btn svg[data-v-6da48de9]{width:16px;height:16px}.action-btn[data-v-6da48de9]:hover{background:hsla(0,0%,100%,.2);color:#fff;transform:scale(1.1)}.load-trigger[data-v-6da48de9]{display:flex;justify-content:center;align-items:center;padding:48px;min-height:100px}.loading-more[data-v-6da48de9]{display:flex;align-items:center;gap:12px;color:#666;font-size:14px}.no-more[data-v-6da48de9]{color:#444;font-size:14px}.credit-link[data-v-6da48de9]{display:block;margin-top:8px;color:#555;font-size:12px;text-decoration:none;transition:color .2s;text-align:center}.credit-link[data-v-6da48de9]:hover{color:#888}.preview-modal[data-v-6da48de9]{position:fixed;inset:0;z-index:1000;background:rgba(0,0,0,.97);display:flex;align-items:center;justify-content:center;overflow:hidden}.preview-content[data-v-6da48de9]{padding:60px 80px;box-sizing:border-box;overflow:hidden}.preview-content-mobile[data-v-6da48de9],.preview-content[data-v-6da48de9]{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.preview-content-mobile[data-v-6da48de9]{flex-direction:column;padding:0;position:absolute;top:0;left:0}.mobile-video-native[data-v-6da48de9]{width:100%;height:100%;-o-object-fit:contain;object-fit:contain;background:#000}.mobile-audio-wrap[data-v-6da48de9]{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;box-sizing:border-box}.mobile-audio-wrap .swipe-hint[data-v-6da48de9]{margin-top:20px}.swipe-hint[data-v-6da48de9]{font-size:12px;color:hsla(0,0%,100%,.4)}.other-file-preview[data-v-6da48de9]{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;color:hsla(0,0%,100%,.6);gap:16px}.other-file-preview svg[data-v-6da48de9]{width:64px;height:64px}.other-file-preview .file-name[data-v-6da48de9]{font-size:14px;color:hsla(0,0%,100%,.7);text-align:center;padding:0 20px;word-break:break-all}.swipe-viewport[data-v-6da48de9]{width:100%;height:100%;overflow:hidden;position:relative}.swipe-track[data-v-6da48de9]{width:300%;height:100%;display:flex;will-change:transform}.swipe-slide[data-v-6da48de9]{width:33.333%;flex-shrink:0;height:100%;display:flex;align-items:center;justify-content:center}.preview-image[data-v-6da48de9],.preview-video[data-v-6da48de9]{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.preview-close[data-v-6da48de9]{position:fixed;top:20px;right:20px;background:hsla(0,0%,100%,.1);border:none;color:#fff;cursor:pointer;width:48px;height:48px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:background .2s;z-index:1010}.preview-close[data-v-6da48de9]:hover{background:hsla(0,0%,100%,.2)}.preview-close svg[data-v-6da48de9]{width:28px;height:28px}.page-indicator[data-v-6da48de9]{position:fixed;bottom:30px;left:50%;transform:translateX(-50%);background:rgba(0,0,0,.6);color:hsla(0,0%,100%,.8);padding:8px 16px;border-radius:20px;font-size:14px;z-index:1010}.preview-next[data-v-6da48de9],.preview-prev[data-v-6da48de9]{position:fixed;top:50%;transform:translateY(-50%);background:hsla(0,0%,100%,.1);border:none;color:#fff;padding:16px;cursor:pointer;border-radius:50%;width:56px;height:56px;display:flex;align-items:center;justify-content:center;transition:background .2s;z-index:1010}.preview-next[data-v-6da48de9]:hover,.preview-prev[data-v-6da48de9]:hover{background:hsla(0,0%,100%,.2)}.preview-next svg[data-v-6da48de9],.preview-prev svg[data-v-6da48de9]{width:32px;height:32px}.preview-prev[data-v-6da48de9]{left:20px}.preview-next[data-v-6da48de9]{right:20px}.rotate-btn[data-v-6da48de9]{position:fixed;bottom:30px;right:20px;background:hsla(0,0%,100%,.1);border:none;color:#fff;cursor:pointer;width:48px;height:48px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:background .2s;z-index:1010}.rotate-btn[data-v-6da48de9]:hover{background:hsla(0,0%,100%,.2)}.rotate-btn svg[data-v-6da48de9]{width:24px;height:24px}@media (max-width:768px){.page-indicator[data-v-6da48de9]{bottom:40px}}@media (max-width:1199px) and (min-width:601px){.gallery-container[data-v-6da48de9]{padding:12px}.waterfall-column[data-v-6da48de9],.waterfall[data-v-6da48de9]{gap:10px}.image-wrapper[data-v-6da48de9]{border-radius:8px}}@media (max-width:600px){.header[data-v-6da48de9]{padding:10px 12px}.header-left .logo[data-v-6da48de9]{font-size:16px}.breadcrumb[data-v-6da48de9]{font-size:12px}.breadcrumb-item[data-v-6da48de9]{padding:4px 8px}.file-count[data-v-6da48de9]{font-size:12px}.gallery-container[data-v-6da48de9]{padding:6px}.waterfall-column[data-v-6da48de9],.waterfall[data-v-6da48de9]{gap:6px}.image-wrapper[data-v-6da48de9]{border-radius:6px;min-height:120px}.folders-section[data-v-6da48de9]{margin-bottom:12px}.folders-grid[data-v-6da48de9]{grid-template-columns:repeat(2,1fr);gap:8px}.folder-card[data-v-6da48de9]{padding:16px 12px;border-radius:8px}.folder-icon[data-v-6da48de9]{width:36px;height:36px;margin-bottom:8px}.folder-name[data-v-6da48de9]{font-size:12px}.load-trigger[data-v-6da48de9]{padding:24px;min-height:60px}}.copy-toast{position:fixed;bottom:80px;left:50%;transform:translateX(-50%) translateY(20px);background:rgba(0,0,0,.8);color:#fff;padding:10px 24px;border-radius:20px;font-size:14px;opacity:0;transition:all .3s ease;z-index:9999;pointer-events:none}.copy-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}.public-browse.light-mode[data-v-6da48de9]{background:#f5f5f5;color:#333}.light-mode .header[data-v-6da48de9]{background:hsla(0,0%,100%,.95);border-bottom-color:#e0e0e0}.light-mode .logo[data-v-6da48de9]{color:#333}.light-mode .breadcrumb-item[data-v-6da48de9]{color:#666}.light-mode .breadcrumb-item[data-v-6da48de9]:hover{background:#e8e8e8;color:#333}.light-mode .breadcrumb-sep[data-v-6da48de9]{color:#ccc}.light-mode .error-container[data-v-6da48de9],.light-mode .file-count[data-v-6da48de9],.light-mode .loading-container[data-v-6da48de9]{color:#999}.light-mode .error-credit[data-v-6da48de9]{color:rgba(0,0,0,.4)}.light-mode .error-credit-links a[data-v-6da48de9]{color:rgba(0,0,0,.5)}.light-mode .loading-spinner-small[data-v-6da48de9],.light-mode .loading-spinner[data-v-6da48de9]{border-color:#ddd;border-top-color:#3b82f6}.light-mode .folder-card[data-v-6da48de9]{background:#fff;border-color:#e0e0e0}.light-mode .folder-card[data-v-6da48de9]:hover{background:#fafafa;border-color:#ccc}.light-mode .folder-icon[data-v-6da48de9]{color:#999}.light-mode .folder-name[data-v-6da48de9]{color:#666}.light-mode .image-wrapper[data-v-6da48de9]{background:#fff;border-color:#e0e0e0}.light-mode .image-wrapper[data-v-6da48de9]:before{background:linear-gradient(90deg,#f5f5f5 25%,#fff 50%,#f5f5f5 75%)}.light-mode .image-wrapper[data-v-6da48de9]:hover{border-color:#ccc}.light-mode .file-placeholder[data-v-6da48de9]{color:#ccc;background:#f5f5f5;color:#999}.light-mode .file-name[data-v-6da48de9]{color:rgba(0,0,0,.6)}.light-mode .audio-placeholder[data-v-6da48de9]{background:linear-gradient(135deg,#e8f4f8,#d4e5f7)}.light-mode .audio-icon[data-v-6da48de9]{color:rgba(0,0,0,.4)}.light-mode .audio-name[data-v-6da48de9]{color:rgba(0,0,0,.6)}.light-mode .no-more[data-v-6da48de9]{color:#bbb}.light-mode .credit-link[data-v-6da48de9]{color:#aaa}.light-mode .credit-link[data-v-6da48de9]:hover{color:#666}.light-mode .loading-more[data-v-6da48de9]{color:#999} \ No newline at end of file diff --git a/css/231.5650294b.css.gz b/css/285.e29e1fc1.css.gz similarity index 73% rename from css/231.5650294b.css.gz rename to css/285.e29e1fc1.css.gz index 5c6fb7b..7456dbc 100644 Binary files a/css/231.5650294b.css.gz and b/css/285.e29e1fc1.css.gz differ diff --git a/index.html b/index.html index 1198191..a8df2e7 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -Sanyue ImgHub
\ No newline at end of file +Sanyue ImgHub
\ No newline at end of file diff --git a/index.html.gz b/index.html.gz index 4059899..6500333 100644 Binary files a/index.html.gz and b/index.html.gz differ diff --git a/js/231.644ce035.js.gz b/js/231.644ce035.js.gz deleted file mode 100644 index 3083c99..0000000 Binary files a/js/231.644ce035.js.gz and /dev/null differ diff --git a/js/231.644ce035.js.map b/js/231.644ce035.js.map deleted file mode 100644 index 1958a65..0000000 --- a/js/231.644ce035.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"js/231.644ce035.js","mappings":"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","sources":["webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://sanyue_imghub/./node_modules/loadjs/dist/loadjs.umd.js","webpack://sanyue_imghub/src/js/rangetouch.js","webpack://sanyue_imghub/src/js/config.js","webpack://sanyue_imghub/src/js/utils/css.js","webpack://sanyue_imghub/src/js/utils/is.js","webpack://sanyue_imghub/src/js/utils/numbers.js","webpack://sanyue_imghub/src/js/utils/events.js","webpack://sanyue_imghub/./src/components/TransformMedia.vue?13e5","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/is.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/animation.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/objects.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/elements.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/support.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/events.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/promise.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/arrays.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/style.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/html5.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/browser.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/strings.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/i18n.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/storage.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/fetch.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/load-sprite.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/time.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/controls.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/urls.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/captions.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/config/defaults.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/config/states.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/config/types.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/console.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/fullscreen.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/load-image.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/ui.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/listeners.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/load-script.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/plugins/vimeo.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/plugins/youtube.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/media.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/plugins/ads.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/utils/numbers.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/plugins/preview-thumbnails.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/source.js","webpack://sanyue_imghub/./node_modules/plyr/src/js/plyr.js","webpack://sanyue_imghub/./src/utils/mediaManager.js","webpack://sanyue_imghub/./src/components/TransformMedia.vue","webpack://sanyue_imghub/./src/components/TransformMedia.vue?c392","webpack://sanyue_imghub/./src/views/PublicBrowse.vue?45ae","webpack://sanyue_imghub/./src/views/PublicBrowse.vue","webpack://sanyue_imghub/./src/views/PublicBrowse.vue?bab5"],"sourcesContent":["function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathname = path.replace(/[\\?|#].*$/, ''),\n pathStripped = path.replace(/^(css|img|module|nomodule)!/, ''),\n isLegacyIECss,\n hasModuleSupport,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(pathname)) {\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped;\n\n // tag IE9+\n isLegacyIECss = 'hideFocus' in e;\n\n // use preload in IE Edge (to detect load errors)\n if (isLegacyIECss && e.relList) {\n isLegacyIECss = 0;\n e.rel = 'preload';\n e.as = 'style';\n }\n } else if (/(^img!|\\.(png|gif|jpg|svg|webp)$)/.test(pathname)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = pathStripped;\n e.async = async === undefined ? true : async;\n\n // handle es modules\n // modern browsers:\n // module: add to dom with type=\"module\"\n // nomodule: call success() callback without adding to dom\n // legacy browsers:\n // module: call success() callback without adding to dom\n // nomodule: add to dom with default type (\"text/javascript\")\n hasModuleSupport = 'noModule' in e;\n if (/^module!/.test(pathname)) {\n if (!hasModuleSupport) return callbackFn(path, 'l');\n e.type = \"module\";\n } else if (/^nomodule!/.test(pathname) && hasModuleSupport) return callbackFn(path, 'l');\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // treat empty stylesheets as failures to get around lack of onerror\n // support in IE9-11\n if (isLegacyIECss) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText` (unless error is Code:18 SecurityError)\n if (x.code != 18) result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n } else if (e.rel == 'preload' && e.as == 'style') {\n // activate preloaded stylesheets\n return e.rel = 'stylesheet'; // jshint ignore:line\n }\n \n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function|Object)} [arg1] - The (1) bundleId or (2) success\n * callback or (3) object literal with success/error arguments, numRetries,\n * etc.\n * @param {(Function|Object)} [arg2] - The (1) success callback or (2) object\n * literal with success/error arguments, numRetries, etc.\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n function loadFn(resolve, reject) {\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n \n // resolve Promise\n if (resolve) {\n executeCallbacks({success: resolve, error: reject}, pathsNotFound);\n }\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n }\n \n if (args.returnPromise) return new Promise(loadFn);\n else loadFn();\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// rangetouch.js v2.0.0\n// Making work on touch devices\n// https://github.com/sampotts/rangetouch\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport defaults from './config';\nimport { matches } from './utils/css';\nimport { trigger } from './utils/events';\nimport is from './utils/is';\nimport { round } from './utils/numbers';\n\nclass RangeTouch {\n /**\n * Setup a new instance\n * @param {String|Element} target\n * @param {Object} options\n */\n constructor(target, options) {\n if (is.element(target)) {\n // An Element is passed, use it directly\n this.element = target;\n } else if (is.string(target)) {\n // A CSS Selector is passed, fetch it from the DOM\n this.element = document.querySelector(target);\n }\n\n if (!is.element(this.element) || !is.empty(this.element.rangeTouch)) {\n return;\n }\n\n this.config = { ...defaults, ...options };\n\n this.init();\n }\n\n static get enabled() {\n return 'ontouchstart' in document.documentElement;\n }\n\n /**\n * Setup multiple instances\n * @param {String|Element|NodeList|Array} target\n * @param {Object} options\n */\n static setup(target, options = {}) {\n let targets = null;\n\n if (is.empty(target) || is.string(target)) {\n targets = Array.from(document.querySelectorAll(is.string(target) ? target : 'input[type=\"range\"]'));\n } else if (is.element(target)) {\n targets = [target];\n } else if (is.nodeList(target)) {\n targets = Array.from(target);\n } else if (is.array(target)) {\n targets = target.filter(is.element);\n }\n\n if (is.empty(targets)) {\n return null;\n }\n\n const config = { ...defaults, ...options };\n\n if (is.string(target) && config.watch) {\n // Create an observer instance\n const observer = new MutationObserver(mutations => {\n Array.from(mutations).forEach(mutation => {\n Array.from(mutation.addedNodes).forEach(node => {\n if (!is.element(node) || !matches(node, target)) {\n return;\n }\n\n // eslint-disable-next-line no-unused-vars\n const range = new RangeTouch(node, config);\n });\n });\n });\n\n // Pass in the target node, as well as the observer options\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n\n return targets.map(t => new RangeTouch(t, options));\n }\n\n init() {\n // Bail if not a touch enabled device\n if (!RangeTouch.enabled) {\n return;\n }\n\n // Add useful CSS\n if (this.config.addCSS) {\n this.element.style.userSelect = 'none';\n this.element.style.webKitUserSelect = 'none';\n this.element.style.touchAction = 'manipulation';\n }\n\n this.listeners(true);\n\n this.element.rangeTouch = this;\n }\n\n destroy() {\n // Bail if not a touch enabled device\n if (!RangeTouch.enabled) {\n return;\n }\n\n // Remove useful CSS\n if (this.config.addCSS) {\n this.element.style.userSelect = '';\n this.element.style.webKitUserSelect = '';\n this.element.style.touchAction = '';\n }\n\n this.listeners(false);\n\n this.element.rangeTouch = null;\n }\n\n listeners(toggle) {\n const method = toggle ? 'addEventListener' : 'removeEventListener';\n\n // Listen for events\n ['touchstart', 'touchmove', 'touchend'].forEach(type => {\n this.element[method](type, event => this.set(event), false);\n });\n }\n\n /**\n * Get the value based on touch position\n * @param {Event} event\n */\n get(event) {\n if (!RangeTouch.enabled || !is.event(event)) {\n return null;\n }\n\n const input = event.target;\n const touch = event.changedTouches[0];\n const min = parseFloat(input.getAttribute('min')) || 0;\n const max = parseFloat(input.getAttribute('max')) || 100;\n const step = parseFloat(input.getAttribute('step')) || 1;\n const delta = max - min;\n\n // Calculate percentage\n let percent;\n const clientRect = input.getBoundingClientRect();\n const thumbWidth = ((100 / clientRect.width) * (this.config.thumbWidth / 2)) / 100;\n\n // Determine left percentage\n percent = (100 / clientRect.width) * (touch.clientX - clientRect.left);\n\n // Don't allow outside bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Factor in the thumb offset\n if (percent < 50) {\n percent -= (100 - percent * 2) * thumbWidth;\n } else if (percent > 50) {\n percent += (percent - 50) * 2 * thumbWidth;\n }\n\n // Find the closest step to the mouse position\n return min + round(delta * (percent / 100), step);\n }\n\n /**\n * Update range value based on position\n * @param {Event} event\n */\n set(event) {\n if (!RangeTouch.enabled || !is.event(event) || event.target.disabled) {\n return;\n }\n\n // Prevent text highlight on iOS\n event.preventDefault();\n\n // Set value\n // eslint-disable-next-line no-param-reassign\n event.target.value = this.get(event);\n\n // Trigger event\n trigger(event.target, event.type === 'touchend' ? 'change' : 'input');\n }\n}\n\nexport default RangeTouch;\n","const defaults = {\n addCSS: true, // Add CSS to the element to improve usability (required here or in your CSS!)\n thumbWidth: 15, // The width of the thumb handle\n watch: true, // Watch for new elements that match a string target\n};\n\nexport default defaults;","// Element matches a selector\nexport function matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const method =\n prototype.matches ||\n prototype.webkitMatchesSelector ||\n prototype.mozMatchesSelector ||\n prototype.msMatchesSelector ||\n match;\n\n return method.call(element, selector);\n}\n\nexport default { matches };\n","// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\n\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isEvent = input => instanceOf(input, Event);\nconst isEmpty = input =>\n isNullOrUndefined(input) ||\n ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n (isObject(input) && !Object.keys(input).length);\n\nexport default {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n nodeList: isNodeList,\n element: isElement,\n event: isEvent,\n empty: isEmpty,\n};\n","// Get the number of decimal places\nexport function getDecimalPlaces(value) {\n const match = `${value}`.match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n\n if (!match) {\n return 0;\n }\n\n return Math.max(\n 0,\n // Number of digits right of decimal point.\n (match[1] ? match[1].length : 0) -\n // Adjust for scientific notation.\n (match[2] ? +match[2] : 0),\n );\n}\n\n// Round to the nearest step\nexport function round(number, step) {\n if (step < 1) {\n const places = getDecimalPlaces(step);\n return parseFloat(number.toFixed(places));\n }\n return Math.round(number / step) * step;\n}\n\nexport default { getDecimalPlaces, round };\n","// Trigger event\nexport function trigger(element, type) {\n if (!element || !type) {\n return;\n }\n\n // Create and dispatch the event\n const event = new Event(type, { bubbles: true });\n\n // Dispatch the event\n element.dispatchEvent(event);\n}\n\nexport default { trigger };\n","import { normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, withModifiers as _withModifiers, toDisplayString as _toDisplayString } from \"vue\";\nconst _hoisted_1 = [\"src\"];\nconst _hoisted_2 = [\"src\"];\nconst _hoisted_3 = {\n key: 2,\n class: \"video-placeholder\"\n};\nconst _hoisted_4 = {\n class: \"audio-cover\"\n};\nconst _hoisted_5 = [\"src\"];\nconst _hoisted_6 = {\n key: 1,\n class: \"audio-icon-large\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n};\nconst _hoisted_7 = {\n class: \"audio-info\"\n};\nconst _hoisted_8 = {\n class: \"audio-title\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"audio-artist\"\n};\nconst _hoisted_10 = [\"src\"];\nconst _hoisted_11 = {\n key: 4,\n class: \"audio-placeholder\"\n};\nconst _hoisted_12 = {\n class: \"audio-name\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return _openBlock(), _createElementBlock(\"div\", {\n class: \"tm-viewport\",\n ref: \"viewport\",\n onPointerdown: _cache[3] || (_cache[3] = (...args) => $options.onPointerDown && $options.onPointerDown(...args)),\n onPointermove: _cache[4] || (_cache[4] = (...args) => $options.onPointerMove && $options.onPointerMove(...args)),\n onPointerup: _cache[5] || (_cache[5] = (...args) => $options.onPointerUp && $options.onPointerUp(...args)),\n onPointercancel: _cache[6] || (_cache[6] = (...args) => $options.onPointerUp && $options.onPointerUp(...args)),\n onDblclick: _cache[7] || (_cache[7] = _withModifiers((...args) => $options.onDblClick && $options.onDblClick(...args), [\"prevent\"]))\n }, [$props.isImage ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n class: \"tm-media\",\n src: $props.src,\n draggable: \"false\",\n style: _normalizeStyle($options.mediaStyle),\n onLoad: _cache[0] || (_cache[0] = (...args) => $options.onLoad && $options.onLoad(...args))\n }, null, 44, _hoisted_1)) : $props.isVideo && $props.isActive ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"tm-video-wrap\",\n onPointerdown: _cache[1] || (_cache[1] = _withModifiers(() => {}, [\"stop\"]))\n }, [_createElementVNode(\"video\", {\n ref: \"videoEl\",\n class: \"plyr-video\",\n src: $props.src,\n playsinline: \"\"\n }, null, 8, _hoisted_2)], 32)) : $props.isVideo ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [...(_cache[8] || (_cache[8] = [_createElementVNode(\"svg\", {\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n }, [_createElementVNode(\"path\", {\n d: \"M8 5v14l11-7z\"\n })], -1)]))])) : $props.isAudio && $props.isActive ? (_openBlock(), _createElementBlock(\"div\", {\n key: 3,\n class: \"tm-audio-wrap\",\n onPointerdown: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"stop\"]))\n }, [_createElementVNode(\"div\", _hoisted_4, [$data.audioCover ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: $data.audioCover,\n class: \"cover-img\"\n }, null, 8, _hoisted_5)) : (_openBlock(), _createElementBlock(\"svg\", _hoisted_6, [...(_cache[9] || (_cache[9] = [_createElementVNode(\"path\", {\n d: \"M12 3v10.55c-.59-.34-1.27-.55-2-.55-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4V7h4V3h-6z\"\n }, null, -1)]))]))]), _createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"div\", _hoisted_8, _toDisplayString($data.audioTitle), 1), $data.audioArtist ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, _toDisplayString($data.audioArtist), 1)) : _createCommentVNode(\"\", true)]), _createElementVNode(\"audio\", {\n ref: \"audioEl\",\n class: \"plyr-audio\",\n src: $props.src\n }, null, 8, _hoisted_10)], 32)) : $props.isAudio ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [_cache[10] || (_cache[10] = _createElementVNode(\"svg\", {\n class: \"audio-icon-large\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n }, [_createElementVNode(\"path\", {\n d: \"M12 3v10.55c-.59-.34-1.27-.55-2-.55-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4V7h4V3h-6z\"\n })], -1)), _createElementVNode(\"span\", _hoisted_12, _toDisplayString($data.audioTitle), 1)])) : _createCommentVNode(\"\", true)], 544);\n}","// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => typeof input === 'function';\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\nconst isPromise = input => instanceOf(input, Promise) && isFunction(input.then);\n\nfunction isElement(input) {\n return input !== null\n && typeof input === 'object'\n && input.nodeType === 1\n && typeof input.style === 'object'\n && typeof input.ownerDocument === 'object';\n}\n\nfunction isEmpty(input) {\n return isNullOrUndefined(input)\n || ((isString(input) || isArray(input) || isNodeList(input)) && !input.length)\n || (isObject(input) && !Object.keys(input).length);\n}\n\nfunction isUrl(input) {\n // Accept a URL object\n if (instanceOf(input, window.URL)) {\n return true;\n }\n\n // Must be string from here\n if (!isString(input)) {\n return false;\n }\n\n // Add the protocol if required\n let string = input;\n if (!input.startsWith('http://') || !input.startsWith('https://')) {\n string = `http://${input}`;\n }\n\n try {\n return !isEmpty(new URL(string).hostname);\n }\n catch {\n return false;\n }\n}\n\nexport default {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n weakMap: isWeakMap,\n nodeList: isNodeList,\n element: isElement,\n textNode: isTextNode,\n event: isEvent,\n keyboardEvent: isKeyboardEvent,\n cue: isCue,\n track: isTrack,\n promise: isPromise,\n url: isUrl,\n empty: isEmpty,\n};\n","// ==========================================================================\n// Animation utils\n// ==========================================================================\n\nimport is from './is';\n\nexport const transitionEndEvent = (() => {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element, delay) {\n setTimeout(() => {\n try {\n element.hidden = true;\n // eslint-disable-next-line no-unused-expressions\n element.offsetHeight;\n element.hidden = false;\n }\n catch {}\n }, delay);\n}\n","// ==========================================================================\n// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach((key) => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n extend(target[key], source[key]);\n }\n else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return extend(target, ...sources);\n}\n","// ==========================================================================\n// Element utils\n// ==========================================================================\n\nimport is from './is';\nimport { extend } from './objects';\n\n// Wrap an element\nexport function wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n }\n else {\n parent.appendChild(child);\n }\n });\n}\n\n// Set attributes\nexport function setAttributes(element, attributes) {\n if (!is.element(element) || is.empty(attributes)) return;\n\n // Assume null and undefined attributes should be left out,\n // Setting them would otherwise convert them to \"null\" and \"undefined\"\n Object.entries(attributes)\n .filter(([, value]) => !is.nullOrUndefined(value))\n .forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nexport function createElement(type, attributes, text) {\n // Create a new \n const element = document.createElement(type);\n\n // Set all passed attributes\n if (is.object(attributes)) {\n setAttributes(element, attributes);\n }\n\n // Add text node\n if (is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n}\n\n// Insert an element after another\nexport function insertAfter(element, target) {\n if (!is.element(element) || !is.element(target)) return;\n\n target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n if (!is.element(parent)) return;\n\n parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nexport function removeElement(element) {\n if (is.nodeList(element) || is.array(element)) {\n Array.from(element).forEach(removeElement);\n return;\n }\n\n if (!is.element(element) || !is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nexport function emptyElement(element) {\n if (!is.element(element)) return;\n\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n}\n\n// Replace element\nexport function replaceElement(newChild, oldChild) {\n if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) return null;\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n}\n\n// Get an attribute object from a string selector\nexport function getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!is.string(sel) || is.empty(sel)) return {};\n\n const attributes = {};\n const existing = extend({}, existingAttributes);\n\n sel.split(',').forEach((s) => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n // Get the parts and value\n const parts = stripped.split('=');\n const [key] = parts;\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (is.string(existing.class)) {\n attributes.class = `${existing.class} ${className}`;\n }\n else {\n attributes.class = className;\n }\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return extend(existing, attributes);\n}\n\n// Toggle hidden\nexport function toggleHidden(element, hidden) {\n if (!is.element(element)) return;\n\n let hide = hidden;\n\n if (!is.boolean(hide)) {\n hide = !element.hidden;\n }\n\n element.hidden = hide;\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\nexport function toggleClass(element, className, force) {\n if (is.nodeList(element)) {\n return Array.from(element).map(e => toggleClass(e, className, force));\n }\n\n if (is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return false;\n}\n\n// Has class name\nexport function hasClass(element, className) {\n return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nexport function matches(element, selector) {\n const { prototype } = Element;\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const method\n = prototype.matches\n || prototype.webkitMatchesSelector\n || prototype.mozMatchesSelector\n || prototype.msMatchesSelector\n || match;\n\n return method.call(element, selector);\n}\n\n// Closest ancestor element matching selector (also tests element itself)\nexport function closest(element, selector) {\n const { prototype } = Element;\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\n function closestElement() {\n let el = this;\n\n do {\n if (matches.matches(el, selector)) return el;\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n return null;\n }\n\n const method = prototype.closest || closestElement;\n\n return method.call(element, selector);\n}\n\n// Find all elements\nexport function getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nexport function getElement(selector) {\n return this.elements.container.querySelector(selector);\n}\n\n// Set focus and tab focus class\nexport function setFocus(element = null, focusVisible = false) {\n if (!is.element(element)) return;\n\n // Set regular focus\n element.focus({ preventScroll: true, focusVisible });\n}\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport { transitionEndEvent } from './utils/animation';\nimport { createElement } from './utils/elements';\nimport is from './utils/is';\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n 'audio/ogg': 'vorbis',\n 'audio/wav': '1',\n 'video/webm': 'vp8, vorbis',\n 'video/mp4': 'avc1.42E01E, mp4a.40.2',\n 'video/ogg': 'theora',\n};\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider) {\n const api = support[type] || provider !== 'html5';\n const ui = api && support.rangeInput;\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n pip: (() => {\n return (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(input) {\n if (is.empty(input)) {\n return false;\n }\n\n const [mediaType] = input.split('/');\n let type = input;\n\n // Verify we're using HTML5 and there's no media type mismatch\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n }\n\n // Add codec if required\n if (Object.keys(defaultCodecs).includes(type)) {\n type += `; codecs=\"${defaultCodecs[input]}\"`;\n }\n\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n }\n catch {\n return false;\n }\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Event utils\n// ==========================================================================\n\nimport is from './is';\n\n// Check for passive event listener support\n// https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n// https://www.youtube.com/watch?v=NPM6172J22g\nconst supportsPassiveListeners = (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n catch {}\n\n return supported;\n})();\n\n// Toggle event listener\nexport function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no element, event, or callback\n if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (supportsPassiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach((type) => {\n if (this && this.eventListeners && toggle) {\n // Cache event listener\n this.eventListeners.push({ element, type, callback, options });\n }\n\n element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n}\n\n// Bind event handler\nexport function on(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nexport function off(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nexport function once(element, events = '', callback, passive = true, capture = false) {\n const onceCallback = (...args) => {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n };\n\n toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nexport function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!is.element(element) || is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: { ...detail, plyr: this },\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nexport function unbindListeners() {\n if (this && this.eventListeners) {\n this.eventListeners.forEach((item) => {\n const { element, type, callback, options } = item;\n element.removeEventListener(type, callback, options);\n });\n\n this.eventListeners = [];\n }\n}\n\n// Run method when / if player is ready\nexport function ready() {\n return new Promise(resolve =>\n this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve),\n ).then(() => {});\n}\n","import is from './is';\n/**\n * Silence a Promise-like object.\n * This is useful for avoiding non-harmful, but potentially confusing \"uncaught\n * play promise\" rejection error messages.\n * @param {object} value An object that may or may not be `Promise`-like.\n */\nexport function silencePromise(value) {\n if (is.promise(value)) {\n value.then(null, () => {});\n }\n}\n\nexport default { silencePromise };\n","// ==========================================================================\n// Array utils\n// ==========================================================================\n\nimport is from './is';\n\n// Remove duplicates in an array\nexport function dedupe(array) {\n if (!is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n}\n\n// Get the closest value in an array\nexport function closest(array, value) {\n if (!is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n}\n","// ==========================================================================\n// Style utils\n// ==========================================================================\n\nimport { closest } from './arrays';\nimport is from './is';\n\n// Check support for a CSS declaration\nexport function supportsCSS(declaration) {\n if (!window || !window.CSS) {\n return false;\n }\n\n return window.CSS.supports(declaration);\n}\n\n// Standard/common aspect ratios\nconst standardRatios = [\n [1, 1],\n [4, 3],\n [3, 4],\n [5, 4],\n [4, 5],\n [3, 2],\n [2, 3],\n [16, 10],\n [10, 16],\n [16, 9],\n [9, 16],\n [21, 9],\n [9, 21],\n [32, 9],\n [9, 32],\n].reduce((out, [x, y]) => ({ ...out, [x / y]: [x, y] }), {});\n\n// Validate an aspect ratio\nexport function validateAspectRatio(input) {\n if (!is.array(input) && (!is.string(input) || !input.includes(':'))) {\n return false;\n }\n\n const ratio = is.array(input) ? input : input.split(':');\n\n return ratio.map(Number).every(is.number);\n}\n\n// Reduce an aspect ratio to it's lowest form\nexport function reduceAspectRatio(ratio) {\n if (!is.array(ratio) || !ratio.every(is.number)) {\n return null;\n }\n\n const [width, height] = ratio;\n const getDivider = (w, h) => (h === 0 ? w : getDivider(h, w % h));\n const divider = getDivider(width, height);\n\n return [width / divider, height / divider];\n}\n\n// Calculate an aspect ratio\nexport function getAspectRatio(input) {\n const parse = ratio => (validateAspectRatio(ratio) ? ratio.split(':').map(Number) : null);\n // Try provided ratio\n let ratio = parse(input);\n\n // Get from config\n if (ratio === null) {\n ratio = parse(this.config.ratio);\n }\n\n // Get from embed\n if (ratio === null && !is.empty(this.embed) && is.array(this.embed.ratio)) {\n ({ ratio } = this.embed);\n }\n\n // Get from HTML5 video\n if (ratio === null && this.isHTML5) {\n const { videoWidth, videoHeight } = this.media;\n ratio = [videoWidth, videoHeight];\n }\n\n return reduceAspectRatio(ratio);\n}\n\n// Set aspect ratio for responsive container\nexport function setAspectRatio(input) {\n if (!this.isVideo) {\n return {};\n }\n\n const { wrapper } = this.elements;\n const ratio = getAspectRatio.call(this, input);\n\n if (!is.array(ratio)) {\n return {};\n }\n\n const [x, y] = reduceAspectRatio(ratio);\n const useNative = supportsCSS(`aspect-ratio: ${x}/${y}`);\n const padding = (100 / x) * y;\n\n if (useNative) {\n wrapper.style.aspectRatio = `${x}/${y}`;\n }\n else {\n wrapper.style.paddingBottom = `${padding}%`;\n }\n\n // For Vimeo we have an extra
to hide the standard controls and UI\n if (this.isVimeo && !this.config.vimeo.premium && this.supported.ui) {\n const height = (100 / this.media.offsetWidth) * Number.parseInt(window.getComputedStyle(this.media).paddingBottom, 10);\n const offset = (height - padding) / (height / 50);\n\n if (this.fullscreen.active) {\n wrapper.style.paddingBottom = null;\n }\n else {\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n }\n else if (this.isHTML5) {\n wrapper.classList.add(this.config.classNames.videoFixedRatio);\n }\n\n return { padding, ratio };\n}\n\n// Round an aspect ratio to closest standard ratio\nexport function roundAspectRatio(x, y, tolerance = 0.05) {\n const ratio = x / y;\n const closestRatio = closest(Object.keys(standardRatios), ratio);\n\n // Check match is within tolerance\n if (Math.abs(closestRatio - ratio) <= tolerance) {\n return standardRatios[closestRatio];\n }\n\n // No match\n return [x, y];\n}\n\n// Get the size of the viewport\n// https://stackoverflow.com/questions/1248081/how-to-get-the-browser-viewport-dimensions\nexport function getViewportSize() {\n const width = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\n const height = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);\n return [width, height];\n}\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport { removeElement } from './utils/elements';\nimport { triggerEvent } from './utils/events';\nimport is from './utils/is';\nimport { silencePromise } from './utils/promise';\nimport { setAspectRatio } from './utils/style';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return [];\n }\n\n const sources = Array.from(this.media.querySelectorAll('source'));\n\n // Filter out unsupported sources (if type is specified)\n return sources.filter((source) => {\n const type = source.getAttribute('type');\n\n if (is.empty(type)) {\n return true;\n }\n\n return support.mime.call(this, type);\n });\n },\n\n // Get quality levels\n getQualityOptions() {\n // Whether we're forcing all options (e.g. for streaming)\n if (this.config.quality.forced) {\n return this.config.quality.options;\n }\n\n // Get sizes from elements\n return html5.getSources\n .call(this)\n .map(source => Number(source.getAttribute('size')))\n .filter(Boolean);\n },\n\n setup() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Set speed options from config\n player.options.speed = player.config.speed.options;\n\n // Set aspect ratio if fixed\n if (!is.empty(this.config.ratio)) {\n setAspectRatio.call(player);\n }\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n const source = sources.find(s => s.getAttribute('src') === player.source);\n\n // Return size, if match is found\n return source && Number(source.getAttribute('size'));\n },\n set(input) {\n if (player.quality === input) {\n return;\n }\n\n // If we're using an external handler...\n if (player.config.quality.forced && is.function(player.config.quality.onChange)) {\n player.config.quality.onChange(input);\n }\n else {\n // Get sources\n const sources = html5.getSources.call(player);\n // Get first match for requested size\n const source = sources.find(s => Number(s.getAttribute('size')) === input);\n\n // No matching source found\n if (!source) {\n return;\n }\n\n // Get current state\n const { currentTime, paused, preload, readyState, playbackRate } = player.media;\n\n // Set new source\n player.media.src = source.getAttribute('src');\n\n // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n if (preload !== 'none' || readyState) {\n // Restore time\n player.once('loadedmetadata', () => {\n player.speed = playbackRate;\n player.currentTime = currentTime;\n\n // Resume playing\n if (!paused) {\n silencePromise(player.play());\n }\n });\n\n // Load new source\n player.media.load();\n }\n }\n\n // Trigger change event\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n removeElement(html5.getSources.call(this));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst isIE = Boolean(window.document.documentMode);\nconst isEdge = /Edge/.test(navigator.userAgent);\nconst isWebKit = 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent);\nconst isIPhone = /iPhone|iPod/i.test(navigator.userAgent) && navigator.maxTouchPoints > 1;\n// navigator.platform may be deprecated but this check is still required\nconst isIPadOS = navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;\nconst isIos = /iPad|iPhone|iPod/i.test(navigator.userAgent) && navigator.maxTouchPoints > 1;\n\nexport default {\n isIE,\n isEdge,\n isWebKit,\n isIPhone,\n isIPadOS,\n isIos,\n};\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n if (is.empty(input)) return input;\n\n return input.toString().replace(/\\{(\\d+)\\}/g, (_, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return ((current / max) * 100).toFixed(2);\n}\n\n// Replace all occurrences of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.slice(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.textContent;\n}\n\n// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './is';\nimport { getDeep } from './objects';\nimport { replaceAll } from './strings';\n\n// Skip i18n for abbreviations and brand names\nconst resources = {\n pip: 'PIP',\n airplay: 'AirPlay',\n html5: 'HTML5',\n vimeo: 'Vimeo',\n youtube: 'YouTube',\n};\n\nconst i18n = {\n get(key = '', config = {}) {\n if (is.empty(key) || is.empty(config)) {\n return '';\n }\n\n let string = getDeep(config.i18n, key);\n\n if (is.empty(string)) {\n if (Object.keys(resources).includes(key)) {\n return resources[key];\n }\n\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([k, v]) => {\n string = replaceAll(string, k, v);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport is from './utils/is';\nimport { extend } from './utils/objects';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) return false;\n const test = '___test';\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n }\n catch {\n return false;\n }\n }\n\n get = (key) => {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n const store = window.localStorage.getItem(this.key);\n if (is.empty(store)) return null;\n const json = JSON.parse(store);\n return is.string(key) && key.length ? json[key] : json;\n };\n\n set = (object) => {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objects\n if (!is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n extend(storage, object);\n\n // Update storage\n try {\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n catch { }\n };\n}\n\nexport default Storage;\n","// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nexport default function fetch(url, responseType = 'text', withCredentials = false) {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) return;\n\n // Set to true if needed for CORS\n if (withCredentials) {\n request.withCredentials = true;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n }\n catch {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.status);\n });\n\n request.open('GET', url, true);\n request.responseType = responseType;\n request.send();\n }\n catch (error) {\n reject(error);\n }\n });\n}\n","// ==========================================================================\n// Sprite loader\n// ==========================================================================\n\nimport Storage from '../storage';\nimport fetch from './fetch';\nimport is from './is';\n\n// Load an external SVG sprite\nexport default function loadSprite(url, id) {\n if (!is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = is.string(id);\n let isCached = false;\n const exists = () => document.getElementById(id) !== null;\n\n const update = (container, data) => {\n container.innerHTML = data;\n\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject the SVG to the body\n document.body.insertAdjacentElement('afterbegin', container);\n };\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n // Create container\n const container = document.createElement('div');\n container.setAttribute('hidden', '');\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(`${prefix}-${id}`);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n }\n\n // Get the sprite\n fetch(url)\n .then((result) => {\n if (is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n try {\n window.localStorage.setItem(\n `${prefix}-${id}`,\n JSON.stringify({\n content: result,\n }),\n );\n }\n catch {}\n }\n\n update(container, result);\n })\n .catch(() => {});\n }\n}\n","// ==========================================================================\n// Time utils\n// ==========================================================================\n\nimport is from './is';\n\n// Time helpers\nexport const getHours = value => Math.trunc((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => Math.trunc((value / 60) % 60, 10);\nexport const getSeconds = value => Math.trunc(value % 60, 10);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return formatTime(undefined, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n // Breakdown to hours, mins, secs\n let hours = getHours(time);\n const mins = getMinutes(time);\n const secs = getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n }\n else {\n hours = '';\n }\n\n // Render\n return `${inverted && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n","// ==========================================================================\n// Plyr controls\n// TODO: This needs to be split into smaller files and cleaned up\n// ==========================================================================\n\nimport RangeTouch from 'rangetouch';\n\nimport captions from './captions';\nimport html5 from './html5';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n getElement,\n getElements,\n hasClass,\n matches,\n removeElement,\n setAttributes,\n setFocus,\n toggleClass,\n toggleHidden,\n} from './utils/elements';\nimport { off, on } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadSprite from './utils/load-sprite';\nimport { extend } from './utils/objects';\nimport { getPercentage, replaceAll, toCamelCase, toTitleCase } from './utils/strings';\nimport { formatTime, getHours } from './utils/time';\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const host = window.location.host ? window.location.host : window.top.location.host;\n const cors = url.host !== host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls\n findElements() {\n try {\n this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: getElements.call(this, this.config.selectors.buttons.play),\n pause: getElement.call(this, this.config.selectors.buttons.pause),\n restart: getElement.call(this, this.config.selectors.buttons.restart),\n rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: getElement.call(this, this.config.selectors.buttons.mute),\n pip: getElement.call(this, this.config.selectors.buttons.pip),\n airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n settings: getElement.call(this, this.config.selectors.buttons.settings),\n captions: getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: getElement.call(this, this.config.selectors.inputs.seek),\n volume: getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: getElement.call(this, this.config.selectors.display.buffer),\n currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n duration: getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n }\n catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n // Create \n const icon = document.createElementNS(namespace, 'svg');\n setAttributes(\n icon,\n extend(attributes, {\n 'aria-hidden': 'true',\n 'focusable': 'false',\n }),\n );\n\n // Create the to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n }\n\n // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n // Add to \n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(key, attr = {}) {\n const text = i18n.get(key, this.config);\n const attributes = { ...attr, class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' ') };\n\n return createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (is.empty(text)) {\n return null;\n }\n\n const badge = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a
`);\n }\n\n // Set position\n tipElement.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(\n this,\n this.elements.display.currentTime,\n invert ? this.duration - this.currentTime : this.currentTime,\n invert,\n );\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n return;\n }\n\n // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n if (this.duration >= 2 ** 32) {\n toggleHidden(this.elements.display.currentTime, true);\n toggleHidden(this.elements.progress, true);\n return;\n }\n\n // Update ARIA values\n if (is.element(this.elements.inputs.seek)) {\n this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n }\n\n // If there's a spot to display duration\n const hasDuration = is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n if (this.config.markers.enabled) {\n controls.setMarkers.call(this);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleMenuButton(setting, toggle) {\n toggleHidden(this.elements.settings.buttons[setting], !toggle);\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panels[setting];\n let value = null;\n let list = container;\n\n if (setting === 'captions') {\n value = this.currentTrack;\n }\n else {\n value = !is.empty(input) ? input : this[setting];\n\n // Get default\n if (is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n }\n\n // Get the list if we need to\n if (!is.element(list)) {\n list = pane && pane.querySelector('[role=\"menu\"]');\n }\n\n // If there's no list it means it's not been rendered...\n if (!is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}×`;\n\n case 'quality':\n if (is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n if (!label.length) {\n return `${value}p`;\n }\n\n return label;\n }\n\n return toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');\n\n // Set options if passed and filter based on uniqueness and config\n if (is.array(options)) {\n this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = (quality) => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach((quality) => {\n controls.createMenuItem.call(this, {\n value: quality,\n list,\n type,\n title: controls.getLabel.call(this, 'quality', quality),\n badge: getBadge(quality),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panels.loop.querySelector('[role=\"menu\"]');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.buttons.loop, false);\n toggleHidden(this.elements.settings.panels.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleMenuButton.call(this, 'loop', toggle);\n\n // Empty the menu\n emptyElement(list);\n\n options.forEach(option => {\n const item = createElement('li');\n\n const button = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.captions)) {\n return;\n }\n\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]');\n const tracks = captions.getTracks.call(this);\n const toggle = Boolean(tracks.length);\n\n // Toggle the pane and tab\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.toggled && this.currentTrack === value,\n title: captions.getLabel.call(this, track),\n badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n list,\n type: 'language',\n }));\n\n // Add the \"Disabled\" option to turn off captions\n options.unshift({\n value: -1,\n checked: !this.captions.toggled,\n title: i18n.get('disabled', this.config),\n list,\n type: 'language',\n });\n\n // Generate options\n options.forEach(controls.createMenuItem.bind(this));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.speed)) {\n return;\n }\n\n const type = 'speed';\n const list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');\n\n // Filter out invalid speeds\n this.options.speed = this.options.speed.filter(o => o >= this.minimumSpeed && o <= this.maximumSpeed);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Create items\n this.options.speed.forEach((speed) => {\n controls.createMenuItem.call(this, {\n value: speed,\n list,\n type,\n title: controls.getLabel.call(this, 'speed', speed),\n });\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const { buttons } = this.elements.settings;\n const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Focus the first menu item in a given (or visible) menu\n focusFirstMenuItem(pane, focusVisible = false) {\n if (this.elements.settings.popup.hidden) {\n return;\n }\n\n let target = pane;\n\n if (!is.element(target)) {\n target = Object.values(this.elements.settings.panels).find(p => !p.hidden);\n }\n\n const firstItem = target.querySelector('[role^=\"menuitem\"]');\n\n setFocus.call(this, firstItem, focusVisible);\n },\n\n // Show/hide menu\n toggleMenu(input) {\n const { popup } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(popup) || !is.element(button)) {\n return;\n }\n\n // True toggle by default\n const { hidden } = popup;\n let show = hidden;\n\n if (is.boolean(input)) {\n show = input;\n }\n else if (is.keyboardEvent(input) && input.key === 'Escape') {\n show = false;\n }\n else if (is.event(input)) {\n // If Plyr is in a shadowDOM, the event target is set to the component, instead of the\n // Element in the shadowDOM. The path, if available, is complete.\n const target = is.function(input.composedPath) ? input.composedPath()[0] : input.target;\n const isMenuItem = popup.contains(target);\n\n // If the click was inside the menu or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && input.target !== button && show)) {\n return;\n }\n }\n\n // Set button attributes\n button.setAttribute('aria-expanded', show);\n\n // Show the actual popup\n toggleHidden(popup, !show);\n\n // Add class hook\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.keyboardEvent(input)) {\n controls.focusFirstMenuItem.call(this, null, true);\n }\n else if (!show && !hidden) {\n // If closing, re-focus the button\n setFocus.call(this, button, is.keyboardEvent(input));\n }\n },\n\n // Get the natural size of a menu panel\n getMenuSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Show a panel in the menu\n showMenuPanel(type = '', focusVisible = false) {\n const target = this.elements.container.querySelector(`#plyr-settings-${this.id}-${type}`);\n\n // Nothing to show, bail\n if (!is.element(target)) {\n return;\n }\n\n // Hide all other panels\n const container = target.parentNode;\n const current = Array.from(container.children).find(node => !node.hidden);\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getMenuSize.call(this, target);\n\n // Restore auto height/width\n const restore = (event) => {\n // We're only bothered about height and width on the container\n if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n off.call(this, container, transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n on.call(this, container, transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n toggleHidden(current, true);\n\n // Set attributes on target\n toggleHidden(target, false);\n\n // Focus the first item\n controls.focusFirstMenuItem.call(this, target, focusVisible);\n },\n\n // Set the download URL\n setDownloadUrl() {\n const button = this.elements.buttons.download;\n\n // Bail if no button\n if (!is.element(button)) {\n return;\n }\n\n // Set attribute\n button.setAttribute('href', this.download);\n },\n\n // Build the default HTML\n create(data) {\n const {\n bindMenuItemShortcuts,\n createButton,\n createProgress,\n createRange,\n createTime,\n setQualityMenu,\n setSpeedMenu,\n showMenuPanel,\n } = controls;\n this.elements.controls = null;\n\n // Larger overlaid play button\n if (is.array(this.config.controls) && this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(createButton.call(this, 'play-large'));\n }\n\n // Create the container\n const container = createElement('div', getAttributesFromSelector(this.config.selectors.controls.wrapper));\n this.elements.controls = container;\n\n // Default item attributes\n const defaultAttributes = { class: 'plyr__controls__item' };\n\n // Loop through controls in order\n dedupe(is.array(this.config.controls) ? this.config.controls : []).forEach((control) => {\n // Restart button\n if (control === 'restart') {\n container.appendChild(createButton.call(this, 'restart', defaultAttributes));\n }\n\n // Rewind button\n if (control === 'rewind') {\n container.appendChild(createButton.call(this, 'rewind', defaultAttributes));\n }\n\n // Play/Pause button\n if (control === 'play') {\n container.appendChild(createButton.call(this, 'play', defaultAttributes));\n }\n\n // Fast forward button\n if (control === 'fast-forward') {\n container.appendChild(createButton.call(this, 'fast-forward', defaultAttributes));\n }\n\n // Progress\n if (control === 'progress') {\n const progressContainer = createElement('div', {\n class: `${defaultAttributes.class} plyr__progress__container`,\n });\n\n const progress = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n progress.appendChild(\n createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n }),\n );\n\n // Buffer progress\n progress.appendChild(createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n progressContainer.appendChild(this.elements.progress);\n container.appendChild(progressContainer);\n }\n\n // Media current time display\n if (control === 'current-time') {\n container.appendChild(createTime.call(this, 'currentTime', defaultAttributes));\n }\n\n // Media duration display\n if (control === 'duration') {\n container.appendChild(createTime.call(this, 'duration', defaultAttributes));\n }\n\n // Volume controls\n if (control === 'mute' || control === 'volume') {\n let { volume } = this.elements;\n\n // Create the volume container if needed\n if (!is.element(volume) || !container.contains(volume)) {\n volume = createElement(\n 'div',\n extend({}, defaultAttributes, {\n class: `${defaultAttributes.class} plyr__volume`.trim(),\n }),\n );\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle mute button\n if (control === 'mute') {\n volume.appendChild(createButton.call(this, 'mute'));\n }\n\n // Volume range control\n // Ignored on iOS as it's handled globally\n // https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html\n if (control === 'volume' && !browser.isIos && !browser.isIPadOS) {\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n volume.appendChild(\n createRange.call(\n this,\n 'volume',\n extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n ),\n );\n }\n }\n\n // Toggle captions button\n if (control === 'captions') {\n container.appendChild(createButton.call(this, 'captions', defaultAttributes));\n }\n\n // Settings button / menu\n if (control === 'settings' && !is.empty(this.config.settings)) {\n const wrapper = createElement(\n 'div',\n extend({}, defaultAttributes, {\n class: `${defaultAttributes.class} plyr__menu`.trim(),\n hidden: '',\n }),\n );\n\n wrapper.appendChild(\n createButton.call(this, 'settings', {\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n });\n\n // Create the menu\n const menu = createElement('div', {\n role: 'menu',\n });\n\n home.appendChild(menu);\n inner.appendChild(home);\n this.elements.settings.panels.home = home;\n\n // Build the menu items\n this.config.settings.forEach((type) => {\n // TODO: bundle this with the createMenuItem helper and bindings\n const menuItem = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n 'type': 'button',\n 'class': `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n 'role': 'menuitem',\n 'aria-haspopup': true,\n 'hidden': '',\n }),\n );\n\n // Bind menu shortcuts for keyboard users\n bindMenuItemShortcuts.call(this, menuItem, type);\n\n // Show menu on click\n on.call(this, menuItem, 'click', () => {\n showMenuPanel.call(this, type, false);\n });\n\n const flex = createElement('span', null, i18n.get(type, this.config));\n\n const value = createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n flex.appendChild(value);\n menuItem.appendChild(flex);\n menu.appendChild(menuItem);\n\n // Build the panes\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n });\n\n // Back button\n const backButton = createElement('button', {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n });\n\n // Visible label\n backButton.appendChild(\n createElement(\n 'span',\n {\n 'aria-hidden': true,\n },\n i18n.get(type, this.config),\n ),\n );\n\n // Screen reader label\n backButton.appendChild(\n createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get('menuBack', this.config),\n ),\n );\n\n // Go back via keyboard\n on.call(\n this,\n pane,\n 'keydown',\n (event) => {\n if (event.key !== 'ArrowLeft') return;\n\n // Prevent seek\n event.preventDefault();\n event.stopPropagation();\n\n // Show the respective menu\n showMenuPanel.call(this, 'home', true);\n },\n false,\n );\n\n // Go back via button click\n on.call(this, backButton, 'click', () => {\n showMenuPanel.call(this, 'home', false);\n });\n\n // Add to pane\n pane.appendChild(backButton);\n\n // Menu\n pane.appendChild(\n createElement('div', {\n role: 'menu',\n }),\n );\n\n inner.appendChild(pane);\n\n this.elements.settings.buttons[type] = menuItem;\n this.elements.settings.panels[type] = pane;\n });\n\n popup.appendChild(inner);\n wrapper.appendChild(popup);\n container.appendChild(wrapper);\n\n this.elements.settings.popup = popup;\n this.elements.settings.menu = wrapper;\n }\n\n // Picture in picture button\n if (control === 'pip' && support.pip) {\n container.appendChild(createButton.call(this, 'pip', defaultAttributes));\n }\n\n // Airplay button\n if (control === 'airplay' && support.airplay) {\n container.appendChild(createButton.call(this, 'airplay', defaultAttributes));\n }\n\n // Download button\n if (control === 'download') {\n const attributes = extend({}, defaultAttributes, {\n element: 'a',\n href: this.download,\n target: '_blank',\n });\n\n // Set download attribute for HTML5 only\n if (this.isHTML5) {\n attributes.download = '';\n }\n\n const { download } = this.config.urls;\n\n if (!is.url(download) && this.isEmbed) {\n extend(attributes, {\n icon: `logo-${this.provider}`,\n label: this.provider,\n });\n }\n\n container.appendChild(createButton.call(this, 'download', attributes));\n }\n\n // Toggle fullscreen button\n if (control === 'fullscreen') {\n container.appendChild(createButton.call(this, 'fullscreen', defaultAttributes));\n }\n });\n\n // Set available quality levels\n if (this.isHTML5) {\n setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n };\n let update = true;\n\n // If function, run it and use output\n if (is.function(this.config.controls)) {\n this.config.controls = this.config.controls.call(this, props);\n }\n\n // Convert falsy controls to empty array (primarily for empty strings)\n if (!this.config.controls) {\n this.config.controls = [];\n }\n\n if (is.element(this.config.controls) || is.string(this.config.controls)) {\n // HTMLElement or Non-empty string passed as the option\n container = this.config.controls;\n }\n else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n update = false;\n }\n\n // Replace props with their value\n const replace = (input) => {\n let result = input;\n\n Object.entries(props).forEach(([key, value]) => {\n result = replaceAll(result, `{${key}}`, value);\n });\n\n return result;\n };\n\n // Update markup\n if (update) {\n if (is.string(this.config.controls)) {\n container = replace(container);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n target[insertMethod]('afterbegin', container);\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Add pressed property to buttons\n if (!is.empty(this.elements.buttons)) {\n const addProperty = (button) => {\n const className = this.config.classNames.controlPressed;\n button.setAttribute('aria-pressed', 'false');\n\n Object.defineProperty(button, 'pressed', {\n configurable: true,\n enumerable: true,\n get() {\n return hasClass(button, className);\n },\n set(pressed = false) {\n toggleClass(button, className, pressed);\n button.setAttribute('aria-pressed', pressed ? 'true' : 'false');\n },\n });\n };\n\n // Toggle classname when pressed property is set\n Object.values(this.elements.buttons)\n .filter(Boolean)\n .forEach((button) => {\n if (is.array(button) || is.nodeList(button)) {\n Array.from(button).filter(Boolean).forEach(addProperty);\n }\n else {\n addProperty(button);\n }\n });\n }\n\n // Edge sometimes doesn't finish the paint so force a repaint\n if (browser.isEdge) {\n repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const { classNames, selectors } = this.config;\n const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n const labels = getElements.call(this, selector);\n\n Array.from(labels).forEach((label) => {\n toggleClass(label, this.config.classNames.hidden, false);\n toggleClass(label, this.config.classNames.tooltip, true);\n });\n }\n },\n\n // Set media metadata\n setMediaMetadata() {\n try {\n if ('mediaSession' in navigator) {\n navigator.mediaSession.metadata = new window.MediaMetadata({\n title: this.config.mediaMetadata.title,\n artist: this.config.mediaMetadata.artist,\n album: this.config.mediaMetadata.album,\n artwork: this.config.mediaMetadata.artwork,\n });\n }\n }\n catch {\n // Do nothing\n }\n },\n\n // Add markers\n setMarkers() {\n if (!this.duration || this.elements.markers) return;\n\n // Get valid points\n const points = this.config.markers?.points?.filter(({ time }) => time > 0 && time < this.duration);\n if (!points?.length) return;\n\n const containerFragment = document.createDocumentFragment();\n const pointsFragment = document.createDocumentFragment();\n let tipElement = null;\n const tipVisible = `${this.config.classNames.tooltip}--visible`;\n const toggleTip = show => toggleClass(tipElement, tipVisible, show);\n\n // Inject markers to progress container\n points.forEach((point) => {\n const markerElement = createElement(\n 'span',\n {\n class: this.config.classNames.marker,\n },\n '',\n );\n\n const left = `${(point.time / this.duration) * 100}%`;\n\n if (tipElement) {\n // Show on hover\n markerElement.addEventListener('mouseenter', () => {\n if (point.label) return;\n tipElement.style.left = left;\n tipElement.innerHTML = point.label;\n toggleTip(true);\n });\n\n // Hide on leave\n markerElement.addEventListener('mouseleave', () => {\n toggleTip(false);\n });\n }\n\n markerElement.addEventListener('click', () => {\n this.currentTime = point.time;\n });\n\n markerElement.style.left = left;\n pointsFragment.appendChild(markerElement);\n });\n\n containerFragment.appendChild(pointsFragment);\n\n // Inject a tooltip if needed\n if (!this.config.tooltips.seek) {\n tipElement = createElement(\n 'span',\n {\n class: this.config.classNames.tooltip,\n },\n '',\n );\n\n containerFragment.appendChild(tipElement);\n }\n\n this.elements.markers = {\n points: pointsFragment,\n tip: tipElement,\n };\n\n this.elements.progress.appendChild(containerFragment);\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// URL utils\n// ==========================================================================\n\nimport is from './is';\n\n/**\n * Parse a string to a URL object\n * @param {string} input - the URL to be parsed\n * @param {boolean} safe - failsafe parsing\n */\nexport function parseUrl(input, safe = true) {\n let url = input;\n\n if (safe) {\n const parser = document.createElement('a');\n parser.href = url;\n url = parser.href;\n }\n\n try {\n return new URL(url);\n }\n catch {\n return null;\n }\n}\n\n// Convert object to URLSearchParams\nexport function buildUrlParams(input) {\n const params = new URLSearchParams();\n\n if (is.object(input)) {\n Object.entries(input).forEach(([key, value]) => {\n params.set(key, value);\n });\n }\n\n return params;\n}\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport support from './support';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n insertAfter,\n removeElement,\n toggleClass,\n} from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport fetch from './utils/fetch';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport { getHTML } from './utils/strings';\nimport { parseUrl } from './utils/urls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (\n is.array(this.config.controls)\n && this.config.controls.includes('settings')\n && this.config.settings.includes('captions')\n ) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n\n // Inject the container\n if (!is.element(this.elements.captions)) {\n this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n this.elements.captions.setAttribute('dir', 'auto');\n\n insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach((track) => {\n const src = track.getAttribute('src');\n const url = parseUrl(src);\n\n if (\n url !== null\n && url.hostname !== window.location.href.hostname\n && ['http:', 'https:'].includes(url.protocol)\n ) {\n fetch(src, 'blob')\n .then((blob) => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n removeElement(track);\n });\n }\n });\n }\n\n // Get and set initial data\n // The \"preferred\" options are not realized unless / until the wanted language has a match\n // * languages: Array of user's browser languages.\n // * language: The language preferred by user settings or config\n // * active: The state preferred by user settings or config\n // * toggled: The real captions state\n\n const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n let language = (this.storage.get('language') || this.captions.language || this.config.captions.language || 'auto').toLowerCase();\n\n // Use first browser language when language is 'auto'\n if (language === 'auto') {\n [language] = languages;\n }\n\n let active = this.storage.get('captions') || this.captions.active;\n if (!is.boolean(active)) {\n ({ active } = this.config.captions);\n }\n\n Object.assign(this.captions, {\n toggled: false,\n active,\n language,\n languages,\n });\n\n // Watch changes to textTracks and update captions menu\n if (this.isHTML5) {\n const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n\n // Update available language options in settings based on tracks\n update() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const { active, language, meta, currentTrackNode } = this.captions;\n const languageExists = Boolean(tracks.find(track => track.language === language));\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks\n .filter(track => !meta.get(track))\n .forEach((track) => {\n this.debug.log('Track added', track);\n\n // Attempt to store if the original dom element was \"default\"\n meta.set(track, {\n default: track.mode === 'showing',\n });\n\n // Turn off native caption rendering to avoid double captions\n // Note: mode='hidden' forces a track to download. To ensure every track\n // isn't downloaded at once, only 'showing' tracks should be reassigned\n\n if (track.mode === 'showing') {\n track.mode = 'hidden';\n }\n\n // Add event listener for cue changes\n on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n // Update language first time it matches, or if the previous matching track was removed\n if ((languageExists && this.language !== language) || !tracks.includes(currentTrackNode)) {\n captions.setLanguage.call(this, language);\n captions.toggle.call(this, active && languageExists);\n }\n\n // Enable or disable captions based on track length\n if (this.elements) {\n toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n }\n\n // Update available languages in list\n if (\n is.array(this.config.controls)\n && this.config.controls.includes('settings')\n && this.config.settings.includes('captions')\n ) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Toggle captions display\n // Used internally for the toggleCaptions method, with the passive option forced to false\n toggle(input, passive = true) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n const { toggled } = this.captions; // Current state\n const activeClass = this.config.classNames.captions.active;\n // Get the next state\n // If the method is called without parameter, toggle based on current value\n const active = is.nullOrUndefined(input) ? !toggled : input;\n\n // Update state and trigger event\n if (active !== toggled) {\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.active = active;\n this.storage.set({ captions: active });\n }\n\n // Force language if the call isn't passive and there is no matching language to toggle to\n if (!this.language && active && !passive) {\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n // Override user preferences to avoid switching languages if a matching track is added\n this.captions.language = track.language;\n\n // Set caption, but don't store in localStorage as user preference\n captions.set.call(this, tracks.indexOf(track));\n return;\n }\n\n // Toggle button if it's enabled\n if (this.elements.buttons.captions) {\n this.elements.buttons.captions.pressed = active;\n }\n\n // Add class hook\n toggleClass(this.elements.container, activeClass, active);\n\n this.captions.toggled = active;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // Trigger event (not used internally)\n triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n // Wait for the call stack to clear before setting mode='hidden'\n // on the active track - forcing the browser to download it\n setTimeout(() => {\n if (active && this.captions.toggled) {\n this.captions.currentTrackNode.mode = 'hidden';\n }\n });\n },\n\n // Set captions by track index\n // Used internally for the currentTrack setter with the passive option forced to false\n set(index, passive = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n captions.toggle.call(this, false, passive);\n return;\n }\n\n if (!is.number(index)) {\n this.debug.warn('Invalid caption argument', index);\n return;\n }\n\n if (!(index in tracks)) {\n this.debug.warn('Track not found', index);\n return;\n }\n\n if (this.captions.currentTrack !== index) {\n this.captions.currentTrack = index;\n const track = tracks[index];\n const { language } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.language = language;\n this.storage.set({ language });\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n triggerEvent.call(this, this.media, 'languagechange');\n }\n\n // Show captions\n captions.toggle.call(this, true, passive);\n\n if (this.isHTML5 && this.isVideo) {\n // If we change the active track while a cue is already displayed we need to update it\n captions.updateCues.call(this);\n }\n },\n\n // Set captions by language\n // Used internally for the language setter with the passive option forced to false\n setLanguage(input, passive = true) {\n if (!is.string(input)) {\n this.debug.warn('Invalid language argument', input);\n return;\n }\n // Normalize\n const language = input.toLowerCase();\n this.captions.language = language;\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [language]);\n captions.set.call(this, tracks.indexOf(track), passive);\n },\n\n // Get current valid caption tracks\n // If update is false it will also ignore tracks without metadata\n // This is used to \"freeze\" the language options when captions.update is false\n getTracks(update = false) {\n // Handle media or textTracks missing or null\n const tracks = Array.from((this.media || {}).textTracks || []);\n // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n return tracks\n .filter(track => !this.isHTML5 || update || this.captions.meta.has(track))\n .filter(track => ['captions', 'subtitles'].includes(track.kind));\n },\n\n // Match tracks based on languages and get the first\n findTrack(languages, force = false) {\n const tracks = captions.getTracks.call(this);\n const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n let track;\n\n languages.every((language) => {\n track = sorted.find(t => t.language === language);\n return !track; // Break iteration if there is a match\n });\n\n // If no match is found but is required, get first\n return track || (force ? sorted[0] : undefined);\n },\n\n // Get the current track\n getCurrentTrack() {\n return captions.getTracks.call(this)[this.currentTrack];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (is.track(currentTrack)) {\n if (!is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\n\n // Update captions using current track's active cues\n // Also optional array argument in case there isn't any track (ex: vimeo)\n updateCues(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (!is.element(this.elements.captions)) {\n this.debug.warn('No captions element to render to');\n return;\n }\n\n // Only accept array or empty input\n if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n this.debug.warn('updateCues: Invalid input', input);\n return;\n }\n\n let cues = input;\n\n // Get cues from track\n if (!cues) {\n const track = captions.getCurrentTrack.call(this);\n\n cues = Array.from((track || {}).activeCues || [])\n .map(cue => cue.getCueAsHTML())\n .map(getHTML);\n }\n\n // Set new caption text\n const content = cues.map(cueText => cueText.trim()).join('\\n');\n const changed = content !== this.elements.captions.innerHTML;\n\n if (changed) {\n // Empty the container and create a new child element\n emptyElement(this.elements.captions);\n const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n triggerEvent.call(this, this.media, 'cuechange');\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Allow inline playback on iOS\n playsinline: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Force an aspect ratio\n // The format must be `'w:h'` (e.g. `'16:9'`)\n ratio: null,\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Reset to start when playback ended\n resetOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.8.3/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n // The options to display in the UI, if available for the source media\n options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\n forced: false,\n onChange: null,\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n // The options to display in the UI, if available for the source media (e.g. Vimeo and YouTube only support 0.5x-4x)\n options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 4],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false,\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback using full viewport/window\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n // Selector for the fullscreen container so contextual / non-player content can remain visible in fullscreen mode\n // Non-ancestors of the player element will be ignored\n // container: null, // defaults to the player element\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n // 'duration',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n // 'download',\n 'fullscreen',\n ],\n settings: ['captions', 'quality', 'speed'],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n seekLabel: '{currentTime} of {duration}',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n download: 'Download',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n pip: 'PIP',\n menuBack: 'Go back to previous menu',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD',\n },\n },\n\n // URLs\n urls: {\n download: null,\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/oembed.json?url={0}',\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://noembed.com/embed?url=https://www.youtube.com/watch?v={0}',\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n download: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'download',\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n\n // Quality\n 'qualitychange',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n download: '[data-plyr=\"download\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress__buffer',\n loop: '.plyr__progress__loop', // Used later\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption',\n },\n\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n videoFixedRatio: 'plyr__video-wrapper--fixed-ratio',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n controlPressed: 'plyr__control--pressed',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n marker: 'plyr__progress__marker',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n display: {\n time: 'plyr__time',\n },\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n previewThumbnails: {\n // Tooltip thumbs\n thumbContainer: 'plyr__preview-thumb',\n thumbContainerShown: 'plyr__preview-thumb--is-shown',\n imageContainer: 'plyr__preview-thumb__image-container',\n timeContainer: 'plyr__preview-thumb__time-container',\n // Scrubbing\n scrubbingContainer: 'plyr__preview-scrubbing',\n scrubbingContainerShown: 'plyr__preview-scrubbing--is-shown',\n },\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n hash: 'data-plyr-embed-hash',\n },\n },\n\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n tagUrl: '',\n },\n\n // Preview Thumbnails plugin\n previewThumbnails: {\n enabled: false,\n src: '',\n withCredentials: false,\n },\n\n // Vimeo plugin\n vimeo: {\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: false,\n // Custom settings from Plyr\n customControls: true,\n referrerPolicy: null, // https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy\n // Whether the owner of the video has a Pro or Business account\n // (which allows us to properly hide controls without CSS hacks, etc)\n premium: false,\n },\n\n // YouTube plugin\n youtube: {\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n // Custom settings from Plyr\n customControls: true,\n noCookie: false, // Whether to use an alternative version of YouTube without cookies\n },\n\n // Media Metadata\n mediaMetadata: {\n title: '',\n artist: '',\n album: '',\n artwork: [],\n },\n\n // Markers\n markers: {\n enabled: false,\n points: [],\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr states\n// ==========================================================================\n\nexport const pip = {\n active: 'picture-in-picture',\n inactive: 'inline',\n};\n\nexport default { pip };\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\n/**\n * Get provider by URL\n * @param {string} url\n */\nexport function getProviderByUrl(url) {\n // YouTube\n if (/^(?:https?:\\/\\/)?(?:www\\.)?(?:youtube\\.com|youtube-nocookie\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n}\n\nexport default { providers, types };\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nfunction noop() {}\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n\n get warn() {\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n\n get error() {\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// https://webkit.org/blog/7929/designing-websites-for-iphone-x/\n// ==========================================================================\n\nimport browser from './utils/browser';\nimport { closest, getElements, hasClass, toggleClass } from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport is from './utils/is';\nimport { silencePromise } from './utils/promise';\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Force the use of 'full window/browser' rather than fullscreen\n this.forceFallback = player.config.fullscreen.fallback === 'force';\n\n // Get the fullscreen element\n // Checks container is an ancestor, defaults to null\n this.player.elements.fullscreen\n = player.config.fullscreen.container && closest(this.player.elements.container, player.config.fullscreen.container);\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n on.call(\n this.player,\n document,\n this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`,\n () => {\n // TODO: Filter for target??\n this.onChange();\n },\n );\n\n // Fullscreen toggle on double click\n on.call(this.player, this.player.elements.container, 'dblclick', (event) => {\n // Ignore double click in controls\n if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.player.listeners.proxy(event, this.toggle, 'fullscreen');\n });\n\n // Tap focus when in fullscreen\n on.call(this, this.player.elements.container, 'keydown', event => this.trapFocus(event));\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get nativeSupported() {\n return !!(\n document.fullscreenEnabled\n || document.webkitFullscreenEnabled\n || document.mozFullScreenEnabled\n || document.msFullscreenEnabled\n );\n }\n\n // If we're actually using native\n get useNative() {\n return Fullscreen.nativeSupported && !this.forceFallback;\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (is.function(document.exitFullscreen)) return '';\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = ['webkit', 'moz', 'ms'];\n\n prefixes.some((pre) => {\n if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is supported\n get supported() {\n return [\n // Fullscreen is enabled in config\n this.player.config.fullscreen.enabled,\n // Must be a video\n this.player.isVideo,\n // Either native is supported or fallback enabled\n Fullscreen.nativeSupported || this.player.config.fullscreen.fallback,\n // YouTube has no way to trigger fullscreen, so on devices with no native support, playsinline\n // must be enabled and iosNative fullscreen must be disabled to offer the fullscreen fallback\n !this.player.isYouTube\n || Fullscreen.nativeSupported\n || !browser.isIos\n || (this.player.config.playsinline && !this.player.config.fullscreen.iosNative),\n ].every(Boolean);\n }\n\n // Get active state\n get active() {\n if (!this.supported) return false;\n\n // Fallback using classname\n if (!Fullscreen.nativeSupported || this.forceFallback) {\n return hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix\n ? this.target.getRootNode().fullscreenElement\n : this.target.getRootNode()[`${this.prefix}${this.property}Element`];\n\n return element && element.shadowRoot ? element === this.target.getRootNode().host : element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative\n ? this.player.media\n : this.player.elements.fullscreen ?? this.player.elements.container;\n }\n\n onChange = () => {\n if (!this.supported) return;\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (is.element(button)) {\n button.pressed = this.active;\n }\n\n // Always trigger events on the plyr / media element (not a fullscreen container) and let them bubble up\n const target = this.target === this.player.media ? this.target : this.player.elements.container;\n // Trigger an event\n triggerEvent.call(this.player, target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n };\n\n toggleFallback = (toggle = false) => {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX ?? 0,\n y: window.scrollY ?? 0,\n };\n }\n else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Force full viewport on iPhone X+\n if (browser.isIos) {\n let viewport = document.head.querySelector('meta[name=\"viewport\"]');\n const property = 'viewport-fit=cover';\n\n // Inject the viewport meta if required\n if (!viewport) {\n viewport = document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n }\n\n // Check if the property already exists\n const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n\n if (toggle) {\n this.cleanupViewport = !hasProperty;\n if (!hasProperty) viewport.content += `,${property}`;\n }\n else if (this.cleanupViewport) {\n viewport.content = viewport.content\n .split(',')\n .filter(part => part.trim() !== property)\n .join(',');\n }\n }\n\n // Toggle button and fire events\n this.onChange();\n };\n\n // Trap focus inside container\n trapFocus = (event) => {\n // Bail if iOS/iPadOS, not active, not the tab key\n if (browser.isIos || browser.isIPadOS || !this.active || event.key !== 'Tab') return;\n\n // Get the current focused element\n const focused = document.activeElement;\n const focusable = getElements.call(this.player, 'a[href], button:not(:disabled), input:not(:disabled), [tabindex]');\n const [first] = focusable;\n const last = focusable[focusable.length - 1];\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n }\n else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n // Update UI\n update = () => {\n if (this.supported) {\n let mode;\n\n if (this.forceFallback) mode = 'Fallback (forced)';\n else if (Fullscreen.nativeSupported) mode = 'Native';\n else mode = 'Fallback';\n\n this.player.debug.log(`${mode} fullscreen enabled`);\n }\n else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.supported);\n };\n\n // Make an element fullscreen\n enter = () => {\n if (!this.supported) return;\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.isVimeo) {\n this.player.embed.requestFullscreen();\n }\n else {\n this.target.webkitEnterFullscreen();\n }\n }\n else if (!Fullscreen.nativeSupported || this.forceFallback) {\n this.toggleFallback(true);\n }\n else if (!this.prefix) {\n this.target.requestFullscreen({ navigationUI: 'hide' });\n }\n else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n };\n\n // Bail from fullscreen\n exit = () => {\n if (!this.supported) return;\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.isVimeo) {\n this.player.embed.exitFullscreen();\n }\n else {\n this.target.webkitEnterFullscreen();\n }\n silencePromise(this.player.play());\n }\n else if (!Fullscreen.nativeSupported || this.forceFallback) {\n this.toggleFallback(false);\n }\n else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n }\n else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n };\n\n // Toggle state\n toggle = () => {\n if (!this.active) this.enter();\n else this.exit();\n };\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport support from './support';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadImage from './utils/load-image';\n\nconst ui = {\n addStyleHook() {\n toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n }\n else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Reset duration display\n controls.durationUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n toggleClass(\n this.elements.container,\n this.config.classNames.pip.supported,\n support.pip && this.isHTML5 && this.isVideo,\n );\n\n // Check for airplay support\n toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add touch class\n toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n triggerEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster) {\n ui.setPoster.call(this, this.poster, false).catch(() => {});\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n\n // Media metadata\n if (this.config.mediaMetadata) {\n controls.setMediaMetadata.call(this);\n }\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (is.string(this.config.title) && !is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n }\n\n // If there's a play button, set label\n Array.from(this.elements.buttons.play || []).forEach((button) => {\n button.setAttribute('aria-label', label);\n });\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = getElement.call(this, 'iframe');\n\n if (!is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n\n // Toggle poster\n togglePoster(enable) {\n toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n\n // Set the poster image (async)\n // Used internally for the poster setter, with the passive option forced to false\n setPoster(poster, passive = true) {\n // Don't override if call is passive\n if (passive && this.poster) {\n return Promise.reject(new Error('Poster already set'));\n }\n\n // Set property synchronously to respect the call order\n this.media.setAttribute('data-poster', poster);\n\n // Show the poster\n this.elements.poster.removeAttribute('hidden');\n\n // Wait until ui is ready\n return (\n ready\n .call(this)\n // Load image\n .then(() => loadImage(poster))\n .catch((error) => {\n // Hide poster on error unless it's been set by another call\n if (poster === this.poster) {\n ui.togglePoster.call(this, false);\n }\n // Rethrow\n throw error;\n })\n .then(() => {\n // Prevent race conditions\n if (poster !== this.poster) {\n throw new Error('setPoster cancelled by later call to setPoster');\n }\n })\n .then(() => {\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: '',\n });\n\n ui.togglePoster.call(this, true);\n\n return poster;\n })\n );\n },\n\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set state\n Array.from(this.elements.buttons.play || []).forEach((target) => {\n Object.assign(target, { pressed: this.playing });\n target.setAttribute('aria-label', i18n.get(this.playing ? 'pause' : 'play', this.config));\n });\n\n // Only update controls on non timeupdate events\n if (is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = ['stalled', 'waiting'].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(\n () => {\n // Update progress bar loading class state\n toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n },\n this.loading ? 250 : 0,\n );\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const { controls: controlsElement } = this.elements;\n\n if (controlsElement && this.config.hideControls) {\n // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n const recentTouchSeek = this.touch && this.lastSeekTime + 2000 > Date.now();\n\n // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n this.toggleControls(\n Boolean(\n force || this.loading || this.paused || controlsElement.pressed || controlsElement.hover || recentTouchSeek,\n ),\n );\n }\n },\n\n // Migrate any custom properties from the media to the parent\n migrateStyles() {\n // Loop through values (as they are the keys when the object is spread 🤔)\n Object.values({ ...this.media.style })\n // We're only fussed about Plyr specific properties\n .filter(key => !is.empty(key) && is.string(key) && key.startsWith('--plyr'))\n .forEach((key) => {\n // Set on the container\n this.elements.container.style.setProperty(key, this.media.style.getPropertyValue(key));\n\n // Clean up from media element\n this.media.style.removeProperty(key);\n });\n\n // Remove attribute if empty\n if (is.empty(this.media.style)) {\n this.media.removeAttribute('style');\n }\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { getElement, getElements, matches, toggleClass } from './utils/elements';\nimport { off, on, once, toggleListener, triggerEvent } from './utils/events';\nimport is from './utils/is';\nimport { silencePromise } from './utils/promise';\nimport { getAspectRatio, getViewportSize, supportsCSS } from './utils/style';\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n this.focusTimer = null;\n this.lastKeyDown = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const { player } = this;\n const { elements } = player;\n const { key, type, altKey, ctrlKey, metaKey, shiftKey } = event;\n const pressed = type === 'keydown';\n const repeat = pressed && key === this.lastKey;\n\n // Bail if a modifier key is set\n if (altKey || ctrlKey || metaKey || shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the key for whatever reason\n if (!key) {\n return;\n }\n\n // Seek by increment\n const seekByIncrement = (increment) => {\n // Divide the max duration into 10th's and times by the number value\n player.currentTime = (player.duration / 10) * increment;\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = document.activeElement;\n if (is.element(focused)) {\n const { editable } = player.config.selectors;\n const { seek } = elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (event.key === ' ' && matches(focused, 'button, [role^=\"menuitem\"]')) {\n return;\n }\n }\n\n // Which keys should we prevent default\n const preventDefault = [\n ' ',\n 'ArrowLeft',\n 'ArrowUp',\n 'ArrowRight',\n 'ArrowDown',\n\n '0',\n '1',\n '2',\n '3',\n '4',\n '5',\n '6',\n '7',\n '8',\n '9',\n\n 'c',\n 'f',\n 'k',\n 'l',\n 'm',\n ];\n\n // If the key is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(key)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (key) {\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n if (!repeat) {\n seekByIncrement(Number.parseInt(key, 10));\n }\n break;\n\n case ' ':\n case 'k':\n if (!repeat) {\n silencePromise(player.togglePlay());\n }\n break;\n\n case 'ArrowUp':\n player.increaseVolume(0.1);\n break;\n\n case 'ArrowDown':\n player.decreaseVolume(0.1);\n break;\n\n case 'm':\n if (!repeat) {\n player.muted = !player.muted;\n }\n break;\n\n case 'ArrowRight':\n player.forward();\n break;\n\n case 'ArrowLeft':\n player.rewind();\n break;\n\n case 'f':\n player.fullscreen.toggle();\n break;\n\n case 'c':\n if (!repeat) {\n player.toggleCaptions();\n }\n break;\n\n case 'l':\n player.loop = !player.loop;\n break;\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (key === 'Escape' && !player.fullscreen.usingNative && player.fullscreen.active) {\n player.fullscreen.toggle();\n }\n\n // Store last key for next cycle\n this.lastKey = key;\n }\n else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch = () => {\n const { player } = this;\n const { elements } = player;\n\n player.touch = true;\n\n // Add touch class\n toggleClass(elements.container, player.config.classNames.isTouch, true);\n };\n\n // Global window & document listeners\n global = (toggle = true) => {\n const { player } = this;\n\n // Keyboard shortcuts\n if (player.config.keyboard.global) {\n toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n };\n\n // Container listeners\n container = () => {\n const { player } = this;\n const { config, elements, timers } = player;\n\n // Keyboard shortcuts\n if (!config.keyboard.global && config.keyboard.focused) {\n on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n player,\n elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n (event) => {\n const { controls: controlsElement } = elements;\n\n // Remove button states for fullscreen\n if (controlsElement && event.type === 'enterfullscreen') {\n controlsElement.pressed = false;\n controlsElement.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(player, true);\n // Use longer timeout for touch devices\n delay = player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Set new timer to prevent flicker when seeking\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n },\n );\n\n // Set a gutter for Vimeo\n const setGutter = () => {\n if (!player.isVimeo || player.config.vimeo.premium) {\n return;\n }\n\n const target = elements.wrapper;\n const { active } = player.fullscreen;\n const [videoWidth, videoHeight] = getAspectRatio.call(player);\n const useNativeAspectRatio = supportsCSS(`aspect-ratio: ${videoWidth} / ${videoHeight}`);\n\n // If not active, remove styles\n if (!active) {\n if (useNativeAspectRatio) {\n target.style.width = null;\n target.style.height = null;\n }\n else {\n target.style.maxWidth = null;\n target.style.margin = null;\n }\n return;\n }\n\n // Determine which dimension will overflow and constrain view\n const [viewportWidth, viewportHeight] = getViewportSize();\n const overflow = viewportWidth / viewportHeight > videoWidth / videoHeight;\n\n if (useNativeAspectRatio) {\n target.style.width = overflow ? 'auto' : '100%';\n target.style.height = overflow ? '100%' : 'auto';\n }\n else {\n target.style.maxWidth = overflow ? `${(viewportHeight / videoHeight) * videoWidth}px` : null;\n target.style.margin = overflow ? '0 auto' : null;\n }\n };\n\n // Handle resizing\n const resized = () => {\n clearTimeout(timers.resized);\n timers.resized = setTimeout(setGutter, 50);\n };\n\n on.call(player, elements.container, 'enterfullscreen exitfullscreen', (event) => {\n const { target } = player.fullscreen;\n\n // Ignore events not from target\n if (target !== elements.container) {\n return;\n }\n\n // If it's not an embed and no ratio specified\n if (!player.isEmbed && is.empty(player.config.ratio)) {\n return;\n }\n\n // Set Vimeo gutter\n setGutter();\n\n // Watch for resizes\n const method = event.type === 'enterfullscreen' ? on : off;\n method.call(player, window, 'resize', resized);\n });\n };\n\n // Listen for media events\n media = () => {\n const { player } = this;\n const { elements } = player;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n // Display duration\n on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(player, event));\n\n // Handle the media finishing\n on.call(player, player.media, 'ended', () => {\n // Show poster on end\n if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n // Restart\n player.restart();\n\n // Call pause otherwise IE11 will start playing the video again\n player.pause();\n }\n });\n\n // Check for buffer progress\n on.call(player, player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(player, event));\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n // Handle play/pause\n on.call(player, player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(player, event));\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n // Click video\n if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!is.element(wrapper)) {\n return;\n }\n\n // On click play, pause or restart\n on.call(player, elements.container, 'click', (event) => {\n const targets = [elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n return;\n }\n\n // Touch devices will just show controls (if hidden)\n if (player.touch && player.config.hideControls) {\n return;\n }\n\n if (player.ended) {\n this.proxy(event, player.restart, 'restart');\n this.proxy(\n event,\n () => {\n silencePromise(player.play());\n },\n 'play',\n );\n }\n else {\n this.proxy(\n event,\n () => {\n silencePromise(player.togglePlay());\n },\n 'play',\n );\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(\n player,\n elements.wrapper,\n 'contextmenu',\n (event) => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(player, player.media, 'volumechange', () => {\n // Save to storage\n player.storage.set({\n volume: player.volume,\n muted: player.muted,\n });\n });\n\n // Speed change\n on.call(player, player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(player, 'speed');\n\n // Save to storage\n player.storage.set({ speed: player.speed });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', (event) => {\n // Update UI\n controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n });\n\n // Update download link when ready and if quality changes\n on.call(player, player.media, 'ready qualitychange', () => {\n controls.setDownloadUrl.call(player);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n\n on.call(player, player.media, proxyEvents, (event) => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = player.media.error;\n }\n\n triggerEvent.call(player, elements.container, event.type, true, detail);\n });\n };\n\n // Run default and custom handlers\n proxy = (event, defaultHandler, customHandlerKey) => {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned !== false && is.function(defaultHandler)) {\n defaultHandler.call(player, event);\n }\n };\n\n // Trigger custom and default handlers\n bind = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const { player } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n player,\n element,\n type,\n event => this.proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n };\n\n // Listen for control events\n controls = () => {\n const { player } = this;\n const { elements } = player;\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Play/pause toggle\n if (elements.buttons.play) {\n Array.from(elements.buttons.play).forEach((button) => {\n this.bind(\n button,\n 'click',\n () => {\n silencePromise(player.togglePlay());\n },\n 'play',\n );\n });\n }\n\n // Pause\n this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n // Rewind\n this.bind(\n elements.buttons.rewind,\n 'click',\n () => {\n // Record seek time so we can prevent hiding controls for a few seconds after rewind\n player.lastSeekTime = Date.now();\n player.rewind();\n },\n 'rewind',\n );\n\n // Rewind\n this.bind(\n elements.buttons.fastForward,\n 'click',\n () => {\n // Record seek time so we can prevent hiding controls for a few seconds after fast forward\n player.lastSeekTime = Date.now();\n player.forward();\n },\n 'fastForward',\n );\n\n // Mute toggle\n this.bind(\n elements.buttons.mute,\n 'click',\n () => {\n player.muted = !player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n // Download\n this.bind(\n elements.buttons.download,\n 'click',\n () => {\n triggerEvent.call(player, player.media, 'download');\n },\n 'download',\n );\n\n // Fullscreen toggle\n this.bind(\n elements.buttons.fullscreen,\n 'click',\n () => {\n player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n this.bind(\n elements.buttons.pip,\n 'click',\n () => {\n player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n // Settings menu - click toggle\n this.bind(\n elements.buttons.settings,\n 'click',\n (event) => {\n // Prevent the document click listener closing the menu\n event.stopPropagation();\n event.preventDefault();\n\n controls.toggleMenu.call(player, event);\n },\n null,\n false,\n ); // Can't be passive as we're preventing default\n\n // Settings menu - keyboard toggle\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n this.bind(\n elements.buttons.settings,\n 'keyup',\n (event) => {\n if (![' ', 'Enter'].includes(event.key)) {\n return;\n }\n\n // Because return triggers a click anyway, all we need to do is set focus\n if (event.key === 'Enter') {\n controls.focusFirstMenuItem.call(player, null, true);\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video (Firefox)\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n },\n null,\n false, // Can't be passive as we're preventing default\n );\n\n // Escape closes menu\n this.bind(elements.settings.menu, 'keydown', (event) => {\n if (event.key === 'Escape') {\n controls.toggleMenu.call(player, event);\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(elements.inputs.seek, 'mousedown mousemove', (event) => {\n const rect = elements.progress.getBoundingClientRect();\n const scrollLeft = event.pageX - event.clientX;\n const percent = (100 / rect.width) * (event.pageX - rect.left - scrollLeft);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', (event) => {\n const seek = event.currentTarget;\n const attribute = 'play-on-seeked';\n\n if (is.keyboardEvent(event) && !['ArrowLeft', 'ArrowRight'].includes(event.key)) {\n return;\n }\n\n // Record seek time so we can prevent hiding controls for a few seconds after seek\n player.lastSeekTime = Date.now();\n\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute(attribute);\n silencePromise(player.play());\n }\n else if (!done && player.playing) {\n seek.setAttribute(attribute, '');\n player.pause();\n }\n });\n\n // Fix range inputs on iOS\n // Super weird iOS bug where after you interact with an ,\n // it takes over further interactions on the page. This is a hack\n if (browser.isIos) {\n const inputs = getElements.call(player, 'input[type=\"range\"]');\n Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n }\n\n // Seek\n this.bind(\n elements.inputs.seek,\n inputEvent,\n (event) => {\n const seek = event.currentTarget;\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n\n player.currentTime = (seekTo / seek.max) * player.duration;\n },\n 'seek',\n );\n\n // Seek tooltip\n this.bind(elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(player, event));\n\n // Preview thumbnails plugin\n // TODO: Really need to work on some sort of plug-in wide event bus or pub-sub for this\n this.bind(elements.progress, 'mousemove touchmove', (event) => {\n const { previewThumbnails } = player;\n\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.startMove(event);\n }\n });\n\n // Hide thumbnail preview - on mouse click, mouse leave, and video play/seek. All four are required, e.g., for buffering\n this.bind(elements.progress, 'mouseleave touchend click', () => {\n const { previewThumbnails } = player;\n\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.endMove(false, true);\n }\n });\n\n // Show scrubbing preview\n this.bind(elements.progress, 'mousedown touchstart', (event) => {\n const { previewThumbnails } = player;\n\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.startScrubbing(event);\n }\n });\n\n this.bind(elements.progress, 'mouseup touchend', (event) => {\n const { previewThumbnails } = player;\n\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.endScrubbing(event);\n }\n });\n\n // Polyfill for lower fill in for webkit\n if (browser.isWebKit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach((element) => {\n this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n });\n }\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n this.bind(elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (player.currentTime === 0) {\n return;\n }\n\n player.config.invertTime = !player.config.invertTime;\n\n controls.timeUpdate.call(player);\n });\n }\n\n // Volume\n this.bind(\n elements.inputs.volume,\n inputEvent,\n (event) => {\n player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mouseenter mouseleave', (event) => {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n });\n\n // Also update controls.hover state for any non-player children of fullscreen element (as above)\n if (elements.fullscreen) {\n Array.from(elements.fullscreen.children)\n .filter(c => !c.contains(elements.container))\n .forEach((child) => {\n this.bind(child, 'mouseenter mouseleave', (event) => {\n if (elements.controls) {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n }\n });\n });\n }\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', (event) => {\n elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Show controls when they receive focus (e.g., when using keyboard tab key)\n this.bind(elements.controls, 'focusin', () => {\n const { config, timers } = player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, true);\n\n // Toggle\n ui.toggleControls.call(player, true);\n\n // Restore transition\n setTimeout(() => {\n toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for mouse users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Hide again after delay\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Mouse wheel for volume\n this.bind(\n elements.inputs.volume,\n 'wheel',\n (event) => {\n // Detect \"natural\" scroll - supported on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(value => (inverted ? -value : value));\n // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n // Change the volume by 2%\n player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = player.media;\n if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n };\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/load-script';\nimport { format, stripHTML } from '../utils/strings';\nimport { roundAspectRatio, setAspectRatio } from '../utils/style';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (is.number(Number(url))) {\n return url;\n }\n\n // eslint-disable-next-line regexp/optimal-quantifier-concatenation\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n const match = url.match(regex);\n return match ? match[2] : url;\n}\n\n// Try to extract a hash for private videos from the URL\nfunction parseHash(url) {\n /* This regex matches a hexadecimal hash if given in any of these forms:\n * - [https://player.]vimeo.com/video/{id}/{hash}[?params]\n * - [https://player.]vimeo.com/video/{id}?h={hash}[¶ms]\n * - [https://player.]vimeo.com/video/{id}?[params]&h={hash}\n * - video/{id}/{hash}\n * If matched, the hash is available in capture group 4\n */\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+)(\\?.*h=|\\/)+([\\d,a-f]+)/;\n const found = url.match(regex);\n\n return found && found.length === 5 ? found[4] : null;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n const player = this;\n\n // Add embed class for responsive\n toggleClass(player.elements.wrapper, player.config.classNames.embed, true);\n\n // Set speed options from config\n player.options.speed = player.config.speed.options;\n\n // Set initial ratio\n setAspectRatio.call(player);\n\n // Load the SDK if not already\n if (!is.object(window.Vimeo)) {\n loadScript(player.config.urls.vimeo.sdk)\n .then(() => {\n vimeo.ready.call(player);\n })\n .catch((error) => {\n player.debug.warn('Vimeo SDK (player.js) failed to load', error);\n });\n }\n else {\n vimeo.ready.call(player);\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n const config = player.config.vimeo;\n const { premium, referrerPolicy, ...frameParams } = config;\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n let hash = '';\n // Get from
if needed\n if (is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n // hash can also be set as attribute on the
\n hash = player.media.getAttribute(player.config.attributes.embed.hash);\n }\n else {\n hash = parseHash(source);\n }\n const hashParam = hash ? { h: hash } : {};\n\n // If the owner has a pro or premium account then we can hide controls etc\n if (premium) {\n Object.assign(frameParams, {\n controls: false,\n sidedock: false,\n });\n }\n\n // Get Vimeo params for the iframe\n const params = buildUrlParams({\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n muted: player.muted,\n gesture: 'media',\n playsinline: player.config.playsinline,\n // hash has to be added to iframe-URL\n ...hashParam,\n ...frameParams,\n });\n\n const id = parseId(source);\n // Build an iframe\n const iframe = createElement('iframe');\n const src = format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute(\n 'allow',\n ['autoplay', 'fullscreen', 'picture-in-picture', 'encrypted-media', 'accelerometer', 'gyroscope'].join('; '),\n );\n\n // Set the referrer policy if required\n if (!is.empty(referrerPolicy)) {\n iframe.setAttribute('referrerPolicy', referrerPolicy);\n }\n\n // Inject the package\n if (premium || !config.customControls) {\n iframe.setAttribute('data-poster', player.poster);\n player.media = replaceElement(iframe, player.media);\n }\n else {\n const wrapper = createElement('div', {\n 'class': player.config.classNames.embedContainer,\n 'data-poster': player.poster,\n });\n wrapper.appendChild(iframe);\n player.media = replaceElement(wrapper, player.media);\n }\n\n // Get poster image\n if (!config.customControls) {\n fetch(format(player.config.urls.vimeo.api, src)).then((response) => {\n if (is.empty(response) || !response.thumbnail_url) {\n return;\n }\n\n // Set and show poster\n ui.setPoster.call(player, response.thumbnail_url).catch(() => {});\n });\n }\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n const restorePause = paused && !embed.hasPlayed;\n\n // Set seeking state and trigger event\n media.seeking = true;\n triggerEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(restorePause && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => restorePause && embed.pause())\n // Restore volume\n .then(() => restorePause && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\n });\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n triggerEvent.call(player, player.media, 'ratechange');\n })\n .catch(() => {\n // Cannot set Playback Rate, Video is probably not on Pro account\n player.options.speed = [1];\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n triggerEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = is.boolean(input) ? input : false;\n\n player.embed.setMuted(toggle ? true : player.config.muted).then(() => {\n muted = toggle;\n triggerEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then((value) => {\n currentSrc = value;\n controls.setDownloadUrl.call(player);\n })\n .catch((error) => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then((dimensions) => {\n const [width, height] = dimensions;\n player.embed.ratio = roundAspectRatio(width, height);\n setAspectRatio.call(this);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then((state) => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then((title) => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then((value) => {\n currentTime = value;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then((value) => {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then((tracks) => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', ({ cues = [] }) => {\n const strippedCues = cues.map(cue => stripHTML(cue.text));\n captions.updateCues.call(player, strippedCues);\n });\n\n player.embed.on('loaded', () => {\n // Assure state and events are updated on autoplay\n player.embed.getPaused().then((paused) => {\n assurePlaybackState.call(player, !paused);\n if (!paused) {\n triggerEvent.call(player, player.media, 'playing');\n }\n });\n\n if (is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('bufferstart', () => {\n triggerEvent.call(player, player.media, 'waiting');\n });\n\n player.embed.on('bufferend', () => {\n triggerEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n triggerEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', (data) => {\n player.media.seeking = false;\n currentTime = data.seconds;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', (data) => {\n player.media.buffered = data.percent;\n triggerEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (Number.parseInt(data.percent, 10) === 1) {\n triggerEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then((value) => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n triggerEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', (detail) => {\n player.media.error = detail;\n triggerEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n if (config.customControls) {\n setTimeout(() => ui.build.call(player), 0);\n }\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadImage from '../utils/load-image';\nimport loadScript from '../utils/load-script';\nimport { extend } from '../utils/objects';\nimport { format, generateId } from '../utils/strings';\nimport { roundAspectRatio, setAspectRatio } from '../utils/style';\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n const match = url.match(regex);\n return match && match[2] ? match[2] : url;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nfunction getHost(config) {\n if (config.noCookie) {\n return 'https://www.youtube-nocookie.com';\n }\n\n if (window.location.protocol === 'http:') {\n return 'http://www.youtube.com';\n }\n\n // Use YouTube's default\n return undefined;\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Setup API\n if (is.object(window.YT) && is.function(window.YT.Player)) {\n youtube.ready.call(this);\n }\n else {\n // Reference current global callback\n const callback = window.onYouTubeIframeAPIReady;\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n // Call global callback if set\n if (is.function(callback)) {\n callback();\n }\n\n youtube.ready.call(this);\n };\n\n // Load the SDK\n loadScript(this.config.urls.youtube.sdk).catch((error) => {\n this.debug.warn('YouTube API failed to load', error);\n });\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n const url = format(this.config.urls.youtube.api, videoId);\n\n fetch(url)\n .then((data) => {\n if (is.object(data)) {\n const { title, height, width } = data;\n\n // Set title\n this.config.title = title;\n ui.setTitle.call(this);\n\n // Set aspect ratio\n this.embed.ratio = roundAspectRatio(width, height);\n }\n\n setAspectRatio.call(this);\n })\n .catch(() => {\n // Set aspect ratio\n setAspectRatio.call(this);\n });\n },\n\n // API ready\n ready() {\n const player = this;\n const config = player.config.youtube;\n // Ignore already setup (race condition)\n const currentId = player.media && player.media.getAttribute('id');\n if (!is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from
if needed\n if (is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the