@hopeplayer/core 1.0.11 → 1.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/HopePlayerElement.d.ts +29 -0
  2. package/dist/HopePlayerElement.d.ts.map +1 -1
  3. package/dist/chunks/index-Br_RybXV.js +835 -0
  4. package/dist/chunks/index-Br_RybXV.js.map +1 -0
  5. package/dist/chunks/{index-lwFM1iPV.js → index-C3s21eZa.js} +2 -2
  6. package/dist/chunks/{index-lwFM1iPV.js.map → index-C3s21eZa.js.map} +1 -1
  7. package/dist/chunks/{index-BHO8Gbrj.js → index-D2aXO0eh.js} +711 -400
  8. package/dist/chunks/index-D2aXO0eh.js.map +1 -0
  9. package/dist/chunks/{index-DGSYKljQ.js → index-DBwvWiuK.js} +2 -2
  10. package/dist/chunks/{index-DGSYKljQ.js.map → index-DBwvWiuK.js.map} +1 -1
  11. package/dist/chunks/index-DCXX1ZJG.js +108 -0
  12. package/dist/chunks/index-DCXX1ZJG.js.map +1 -0
  13. package/dist/chunks/{index-d_U9dcN6.js → index-_-pYIxvh.js} +2 -2
  14. package/dist/chunks/{index-d_U9dcN6.js.map → index-_-pYIxvh.js.map} +1 -1
  15. package/dist/chunks/{index-BeBmx35F.js → index-adiWYyto.js} +2 -2
  16. package/dist/chunks/{index-BeBmx35F.js.map → index-adiWYyto.js.map} +1 -1
  17. package/dist/chunks/{index-C6ONQXlF.js → index-nvfNBIM_.js} +2 -2
  18. package/dist/chunks/{index-C6ONQXlF.js.map → index-nvfNBIM_.js.map} +1 -1
  19. package/dist/controls/ControlBar.d.ts +28 -0
  20. package/dist/controls/ControlBar.d.ts.map +1 -1
  21. package/dist/controls/VolumePanel.d.ts +0 -2
  22. package/dist/controls/VolumePanel.d.ts.map +1 -1
  23. package/dist/debug/ErrorLog.d.ts +29 -0
  24. package/dist/debug/ErrorLog.d.ts.map +1 -0
  25. package/dist/hls/SourceManager.d.ts +9 -0
  26. package/dist/hls/SourceManager.d.ts.map +1 -1
  27. package/dist/hope-player.js +1 -1
  28. package/dist/i18n/locales/en.d.ts.map +1 -1
  29. package/dist/i18n/locales/tr.d.ts.map +1 -1
  30. package/dist/i18n/types.d.ts +17 -0
  31. package/dist/i18n/types.d.ts.map +1 -1
  32. package/dist/index.d.ts +2 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/keyboard/KeyboardController.d.ts +2 -0
  35. package/dist/keyboard/KeyboardController.d.ts.map +1 -1
  36. package/dist/plugins/ads/AdSurfaceGuard.d.ts +39 -0
  37. package/dist/plugins/ads/AdSurfaceGuard.d.ts.map +1 -0
  38. package/dist/plugins/ads/AdsController.d.ts +101 -1
  39. package/dist/plugins/ads/AdsController.d.ts.map +1 -1
  40. package/dist/plugins/ads/PrerollGate.d.ts +51 -0
  41. package/dist/plugins/ads/PrerollGate.d.ts.map +1 -0
  42. package/dist/plugins/ads/preconnect.d.ts +2 -0
  43. package/dist/plugins/ads/preconnect.d.ts.map +1 -0
  44. package/dist/plugins/debug/DebugPanel.d.ts +37 -0
  45. package/dist/plugins/debug/DebugPanel.d.ts.map +1 -0
  46. package/dist/plugins/debug/index.d.ts +5 -0
  47. package/dist/plugins/debug/index.d.ts.map +1 -0
  48. package/dist/subtitles/CaptionRenderer.d.ts +6 -0
  49. package/dist/subtitles/CaptionRenderer.d.ts.map +1 -1
  50. package/dist/subtitles/attachTracks.d.ts.map +1 -1
  51. package/dist/types/index.d.ts +50 -1
  52. package/dist/types/index.d.ts.map +1 -1
  53. package/package.json +1 -1
  54. package/dist/chunks/index-BHO8Gbrj.js.map +0 -1
  55. package/dist/chunks/index-glxDu2eJ.js +0 -531
  56. package/dist/chunks/index-glxDu2eJ.js.map +0 -1
@@ -1,22 +1,22 @@
1
- var ue = Object.defineProperty;
2
- var me = (a, t, e) => t in a ? ue(a, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : a[t] = e;
3
- var s = (a, t, e) => me(a, typeof t != "symbol" ? t + "" : t, e);
4
- const be = '/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial}}}@layer theme{:root,:host{--hp-font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--hp-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--hp-color-black:#000;--hp-color-white:#fff;--hp-spacing:.25rem;--hp-container-xs:20rem;--hp-text-xs:.75rem;--hp-text-xs--line-height:calc(1 / .75);--hp-text-sm:.875rem;--hp-text-sm--line-height:calc(1.25 / .875);--hp-text-base:1rem;--hp-text-base--line-height: 1.5 ;--hp-text-lg:1.125rem;--hp-text-lg--line-height:calc(1.75 / 1.125);--hp-text-xl:1.25rem;--hp-text-xl--line-height:calc(1.75 / 1.25);--hp-text-2xl:1.5rem;--hp-text-2xl--line-height:calc(2 / 1.5);--hp-font-weight-medium:500;--hp-font-weight-semibold:600;--hp-radius-lg:.5rem;--hp-animate-spin:spin 1s linear infinite;--hp-aspect-video:16 / 9;--hp-default-transition-duration:.15s;--hp-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--hp-default-font-family:var(--hp-font-sans);--hp-default-mono-font-family:var(--hp-font-mono);--hp-color-accent:#fff;--hp-color-on-accent:#0a0a0a;--hp-color-surface:#0a0a0a;--hp-color-surface-elev:#1a1a1a;--hp-color-on-surface:#fff;--hp-color-on-surface-muted:#a3a3a3}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--hp-default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--hp-default-font-feature-settings,normal);font-variation-settings:var(--hp-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--hp-default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--hp-default-mono-font-feature-settings,normal);font-variation-settings:var(--hp-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.hp\\:pointer-events-auto{pointer-events:auto}.hp\\:pointer-events-none{pointer-events:none}.hp\\:absolute{position:absolute}.hp\\:relative{position:relative}.hp\\:sticky{position:sticky}.hp\\:inset-0{top:0;right:0;bottom:0;left:0}.hp\\:inset-x-0{inset-inline:0}.hp\\:inset-y-0{inset-block:0}.hp\\:top-0{top:0}.hp\\:top-1{top:var(--hp-spacing)}.hp\\:top-1\\/2{top:50%}.hp\\:right-0{right:0}.hp\\:right-1{right:var(--hp-spacing)}.hp\\:right-2{right:calc(var(--hp-spacing) * 2)}.hp\\:bottom-0{bottom:0}.hp\\:bottom-full{bottom:100%}.hp\\:left-1\\/2{left:50%}.hp\\:z-10{z-index:10}.hp\\:z-20{z-index:20}.hp\\:z-30{z-index:30}.hp\\:z-40{z-index:40}.hp\\:m-0{margin:0}.hp\\:mt-0\\.5{margin-top:calc(var(--hp-spacing) * .5)}.hp\\:mt-1{margin-top:var(--hp-spacing)}.hp\\:mt-2{margin-top:calc(var(--hp-spacing) * 2)}.hp\\:mt-8{margin-top:calc(var(--hp-spacing) * 8)}.hp\\:mb-1{margin-bottom:var(--hp-spacing)}.hp\\:mb-2{margin-bottom:calc(var(--hp-spacing) * 2)}.hp\\:mb-16{margin-bottom:calc(var(--hp-spacing) * 16)}.hp\\:ml-1{margin-left:var(--hp-spacing)}.hp\\:block{display:block}.hp\\:flex{display:flex}.hp\\:grid{display:grid}.hp\\:hidden{display:none}.hp\\:aspect-\\[9\\/16\\]{aspect-ratio:9/16}.hp\\:aspect-video{aspect-ratio:var(--hp-aspect-video)}.hp\\:h-0\\.5{height:calc(var(--hp-spacing) * .5)}.hp\\:h-1{height:var(--hp-spacing)}.hp\\:h-1\\/3{height:33.3333%}.hp\\:h-6{height:calc(var(--hp-spacing) * 6)}.hp\\:h-7{height:calc(var(--hp-spacing) * 7)}.hp\\:h-8{height:calc(var(--hp-spacing) * 8)}.hp\\:h-9{height:calc(var(--hp-spacing) * 9)}.hp\\:h-10{height:calc(var(--hp-spacing) * 10)}.hp\\:h-16{height:calc(var(--hp-spacing) * 16)}.hp\\:h-20{height:calc(var(--hp-spacing) * 20)}.hp\\:h-\\[var\\(--hp-ctrl-btn-size\\)\\]{height:var(--hp-ctrl-btn-size)}.hp\\:h-\\[var\\(--hp-seek-hit-h\\)\\]{height:var(--hp-seek-hit-h)}.hp\\:h-\\[var\\(--hp-seek-track-h\\)\\]{height:var(--hp-seek-track-h)}.hp\\:h-full{height:100%}.hp\\:max-h-64{max-height:calc(var(--hp-spacing) * 64)}.hp\\:max-h-80{max-height:calc(var(--hp-spacing) * 80)}.hp\\:w-0{width:0}.hp\\:w-0\\.5{width:calc(var(--hp-spacing) * .5)}.hp\\:w-1{width:var(--hp-spacing)}.hp\\:w-1\\.5{width:calc(var(--hp-spacing) * 1.5)}.hp\\:w-6{width:calc(var(--hp-spacing) * 6)}.hp\\:w-7{width:calc(var(--hp-spacing) * 7)}.hp\\:w-8{width:calc(var(--hp-spacing) * 8)}.hp\\:w-9{width:calc(var(--hp-spacing) * 9)}.hp\\:w-10{width:calc(var(--hp-spacing) * 10)}.hp\\:w-14{width:calc(var(--hp-spacing) * 14)}.hp\\:w-16{width:calc(var(--hp-spacing) * 16)}.hp\\:w-48{width:calc(var(--hp-spacing) * 48)}.hp\\:w-72{width:calc(var(--hp-spacing) * 72)}.hp\\:w-\\[var\\(--hp-ctrl-btn-size\\)\\]{width:var(--hp-ctrl-btn-size)}.hp\\:w-full{width:100%}.hp\\:max-w-\\[50\\%\\]{max-width:50%}.hp\\:max-w-\\[80\\%\\]{max-width:80%}.hp\\:max-w-\\[85\\%\\]{max-width:85%}.hp\\:max-w-full{max-width:100%}.hp\\:max-w-xs{max-width:var(--hp-container-xs)}.hp\\:min-w-0{min-width:0}.hp\\:flex-1{flex:1}.hp\\:flex-shrink-0,.hp\\:shrink-0{flex-shrink:0}.hp\\:animate-spin{animation:var(--hp-animate-spin)}.hp\\:cursor-pointer{cursor:pointer}.hp\\:touch-none{touch-action:none}.hp\\:list-none{list-style-type:none}.hp\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.hp\\:flex-col{flex-direction:column}.hp\\:flex-wrap{flex-wrap:wrap}.hp\\:items-center{align-items:center}.hp\\:items-end{align-items:flex-end}.hp\\:justify-between{justify-content:space-between}.hp\\:justify-center{justify-content:center}.hp\\:gap-0\\.5{gap:calc(var(--hp-spacing) * .5)}.hp\\:gap-1{gap:var(--hp-spacing)}.hp\\:gap-1\\.5{gap:calc(var(--hp-spacing) * 1.5)}.hp\\:gap-2{gap:calc(var(--hp-spacing) * 2)}.hp\\:gap-3{gap:calc(var(--hp-spacing) * 3)}.hp\\:self-end{align-self:flex-end}.hp\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.hp\\:overflow-hidden{overflow:hidden}.hp\\:overflow-y-auto{overflow-y:auto}.hp\\:rounded{border-radius:.25rem}.hp\\:rounded-full{border-radius:3.40282e38px}.hp\\:rounded-lg{border-radius:var(--hp-radius-lg)}.hp\\:border{border-style:var(--tw-border-style);border-width:1px}.hp\\:border-0{border-style:var(--tw-border-style);border-width:0}.hp\\:border-2{border-style:var(--tw-border-style);border-width:2px}.hp\\:border-\\[3px\\]{border-style:var(--tw-border-style);border-width:3px}.hp\\:border-on-surface\\/20{border-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:border-on-surface\\/20{border-color:color-mix(in oklab,var(--hp-color-on-surface) 20%,transparent)}}.hp\\:border-on-surface\\/30{border-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:border-on-surface\\/30{border-color:color-mix(in oklab,var(--hp-color-on-surface) 30%,transparent)}}.hp\\:border-t-accent{border-top-color:var(--hp-color-accent)}.hp\\:bg-accent,.hp\\:bg-accent\\/15{background-color:var(--hp-color-accent)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-accent\\/15{background-color:color-mix(in oklab,var(--hp-color-accent) 15%,transparent)}}.hp\\:bg-black,.hp\\:bg-black\\/30{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/30{background-color:color-mix(in oklab,var(--hp-color-black) 30%,transparent)}}.hp\\:bg-black\\/40{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/40{background-color:color-mix(in oklab,var(--hp-color-black) 40%,transparent)}}.hp\\:bg-black\\/60{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/60{background-color:color-mix(in oklab,var(--hp-color-black) 60%,transparent)}}.hp\\:bg-black\\/70{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/70{background-color:color-mix(in oklab,var(--hp-color-black) 70%,transparent)}}.hp\\:bg-black\\/85{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/85{background-color:color-mix(in oklab,var(--hp-color-black) 85%,transparent)}}.hp\\:bg-on-surface,.hp\\:bg-on-surface\\/20{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-on-surface\\/20{background-color:color-mix(in oklab,var(--hp-color-on-surface) 20%,transparent)}}.hp\\:bg-on-surface\\/25{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-on-surface\\/25{background-color:color-mix(in oklab,var(--hp-color-on-surface) 25%,transparent)}}.hp\\:bg-on-surface\\/40{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-on-surface\\/40{background-color:color-mix(in oklab,var(--hp-color-on-surface) 40%,transparent)}}.hp\\:bg-surface{background-color:var(--hp-color-surface)}.hp\\:bg-surface-elev{background-color:var(--hp-color-surface-elev)}.hp\\:bg-transparent{background-color:#0000}.hp\\:bg-white,.hp\\:bg-white\\/15{background-color:var(--hp-color-white)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-white\\/15{background-color:color-mix(in oklab,var(--hp-color-white) 15%,transparent)}}.hp\\:bg-white\\/30{background-color:var(--hp-color-white)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-white\\/30{background-color:color-mix(in oklab,var(--hp-color-white) 30%,transparent)}}.hp\\:bg-white\\/40{background-color:var(--hp-color-white)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-white\\/40{background-color:color-mix(in oklab,var(--hp-color-white) 40%,transparent)}}.hp\\:bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.hp\\:from-black\\/80{--tw-gradient-from:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:from-black\\/80{--tw-gradient-from:color-mix(in oklab, var(--hp-color-black) 80%, transparent)}}.hp\\:from-black\\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hp\\:to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hp\\:bg-cover{background-size:cover}.hp\\:bg-center{background-position:50%}.hp\\:object-cover{object-fit:cover}.hp\\:p-0{padding:0}.hp\\:p-1\\.5{padding:calc(var(--hp-spacing) * 1.5)}.hp\\:p-2{padding:calc(var(--hp-spacing) * 2)}.hp\\:p-3{padding:calc(var(--hp-spacing) * 3)}.hp\\:p-4{padding:calc(var(--hp-spacing) * 4)}.hp\\:px-1{padding-inline:var(--hp-spacing)}.hp\\:px-1\\.5{padding-inline:calc(var(--hp-spacing) * 1.5)}.hp\\:px-2{padding-inline:calc(var(--hp-spacing) * 2)}.hp\\:px-3{padding-inline:calc(var(--hp-spacing) * 3)}.hp\\:px-4{padding-inline:calc(var(--hp-spacing) * 4)}.hp\\:py-1{padding-block:var(--hp-spacing)}.hp\\:py-1\\.5{padding-block:calc(var(--hp-spacing) * 1.5)}.hp\\:py-2{padding-block:calc(var(--hp-spacing) * 2)}.hp\\:pt-6{padding-top:calc(var(--hp-spacing) * 6)}.hp\\:pb-2{padding-bottom:calc(var(--hp-spacing) * 2)}.hp\\:text-center{text-align:center}.hp\\:text-left{text-align:left}.hp\\:font-mono{font-family:var(--hp-font-mono)}.hp\\:text-2xl{font-size:var(--hp-text-2xl);line-height:var(--tw-leading,var(--hp-text-2xl--line-height))}.hp\\:text-base{font-size:var(--hp-text-base);line-height:var(--tw-leading,var(--hp-text-base--line-height))}.hp\\:text-lg{font-size:var(--hp-text-lg);line-height:var(--tw-leading,var(--hp-text-lg--line-height))}.hp\\:text-sm{font-size:var(--hp-text-sm);line-height:var(--tw-leading,var(--hp-text-sm--line-height))}.hp\\:text-xl{font-size:var(--hp-text-xl);line-height:var(--tw-leading,var(--hp-text-xl--line-height))}.hp\\:text-xs{font-size:var(--hp-text-xs);line-height:var(--tw-leading,var(--hp-text-xs--line-height))}.hp\\:text-\\[length\\:var\\(--hp-ctrl-icon-size\\)\\]{font-size:var(--hp-ctrl-icon-size)}.hp\\:leading-none{--tw-leading:1;line-height:1}.hp\\:font-medium{--tw-font-weight:var(--hp-font-weight-medium);font-weight:var(--hp-font-weight-medium)}.hp\\:font-semibold{--tw-font-weight:var(--hp-font-weight-semibold);font-weight:var(--hp-font-weight-semibold)}.hp\\:whitespace-nowrap{white-space:nowrap}.hp\\:text-accent{color:var(--hp-color-accent)}.hp\\:text-on-accent{color:var(--hp-color-on-accent)}.hp\\:text-on-surface{color:var(--hp-color-on-surface)}.hp\\:text-on-surface-muted{color:var(--hp-color-on-surface-muted)}.hp\\:text-white{color:var(--hp-color-white)}.hp\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.hp\\:no-underline{text-decoration-line:none}.hp\\:underline{text-decoration-line:underline}.hp\\:opacity-0{opacity:0}.hp\\:opacity-60{opacity:.6}.hp\\:opacity-70{opacity:.7}.hp\\:opacity-80{opacity:.8}.hp\\:opacity-90{opacity:.9}.hp\\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hp\\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hp\\:drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.hp\\:transition-\\[height\\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--hp-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hp-default-transition-duration))}.hp\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--hp-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hp-default-transition-duration))}.hp\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hp-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hp-default-transition-duration))}.hp\\:duration-100{--tw-duration:.1s;transition-duration:.1s}.hp\\:duration-150{--tw-duration:.15s;transition-duration:.15s}.hp\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.hp\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.hp\\:will-change-\\[opacity\\]{will-change:opacity}.hp\\:select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.hp\\:group-hover\\:h-\\[var\\(--hp-seek-track-h-hover\\)\\]:is(:where(.hp\\:group):hover *){height:var(--hp-seek-track-h-hover)}.hp\\:hover\\:bg-on-surface\\/5:hover{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:hover\\:bg-on-surface\\/5:hover{background-color:color-mix(in oklab,var(--hp-color-on-surface) 5%,transparent)}}.hp\\:hover\\:bg-on-surface\\/10:hover{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:hover\\:bg-on-surface\\/10:hover{background-color:color-mix(in oklab,var(--hp-color-on-surface) 10%,transparent)}}.hp\\:hover\\:opacity-80:hover{opacity:.8}}.hp\\:focus-visible\\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hp\\:focus-visible\\:ring-accent:focus-visible{--tw-ring-color:var(--hp-color-accent)}.hp\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.hp\\:data-\\[active\\=true\\]\\:bg-accent\\/15[data-active=true]{background-color:var(--hp-color-accent)}@supports (color:color-mix(in lab,red,red)){.hp\\:data-\\[active\\=true\\]\\:bg-accent\\/15[data-active=true]{background-color:color-mix(in oklab,var(--hp-color-accent) 15%,transparent)}}.hp\\:data-\\[active\\=true\\]\\:text-on-surface[data-active=true]{color:var(--hp-color-on-surface)}}.hp-icon{font-variant:normal;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:hope-icons;font-style:normal;font-weight:400;line-height:1}.hp-icon-check:before{content:""}.hp-icon-chevron-left:before{content:""}.hp-icon-close:before{content:""}.hp-icon-fullscreen-enter:before{content:""}.hp-icon-fullscreen-exit:before{content:""}.hp-icon-grid:before{content:""}.hp-icon-loop:before{content:""}.hp-icon-pause:before{content:""}.hp-icon-pip:before{content:""}.hp-icon-play:before{content:""}.hp-icon-settings:before{content:""}.hp-icon-skip-back:before{content:""}.hp-icon-skip-forward:before{content:""}.hp-icon-volume-high:before{content:""}.hp-icon-volume-low:before{content:""}.hp-icon-volume-muted:before{content:""}.hp-icon-warning:before{content:""}:host{--hp-radius:8px;--hp-chip-bg:#ffffff14;--hp-chip-bg-hover:#ffffff2e;--hp-chip-bg-active:#ffffff42;--hp-chip-border:#ffffff29;--hp-chip-border-hover:#ffffff4d;--hp-chip-blur:14px;--hp-chip-shadow:0 4px 18px #00000047, inset 0 1px 0 #ffffff12;--hp-chip-radius:10px;--hp-chip-text:var(--hp-color-on-surface,#fff);--hp-chrome-scrim:linear-gradient(to top, #00000080 0%, #0000003d 50%, #0000 100%);--hp-chrome-scrim-height:min(150px, 45%);--hp-chip-backdrop-brightness:.78;--hp-ctrl-shadow:drop-shadow(0 1px 1.5px #0000008c);--hp-panel-bg:#ffffffb8;--hp-panel-blur:26px;--hp-panel-border:#0f11171a;--hp-panel-text:#15171c;--hp-panel-text-muted:#5b6270;--hp-panel-text-shadow:none;--hp-ctrl-btn-size:32px;--hp-ctrl-icon-size:16px;--hp-seek-hit-h:16px;--hp-seek-track-h:4px;--hp-seek-track-h-hover:6px;--hp-seek-thumb-size:12px;--hp-tooltip-bg:#ffffffe6;--hp-tooltip-text:#15171c;--hp-tooltip-key-bg:#0f11171a;--hp-tooltip-key-text:#15171c;--hp-caption-font-size:16px;--hp-caption-bg:#000000bf;--hp-caption-text:#fff;--hp-caption-radius:4px;background:var(--hp-color-surface,#0a0a0a);width:100%;color:var(--hp-color-on-surface,#fff);border-radius:var(--hp-radius);font-family:system-ui,-apple-system,sans-serif;line-height:1;display:block}.hp-chip{background:var(--hp-chip-bg);border:1px solid var(--hp-chip-border);border-radius:var(--hp-chip-radius);-webkit-backdrop-filter:blur(var(--hp-chip-blur)) saturate(160%);box-shadow:var(--hp-chip-shadow);color:var(--hp-chip-text);transition:background-color .16s,border-color .16s,box-shadow .16s,transform .12s}.hp-chip:hover{background:var(--hp-chip-bg-hover);border-color:var(--hp-chip-border-hover)}button.hp-chip:active{background:var(--hp-chip-bg-active);transform:scale(.94)}.hp-chip:focus-visible{outline:2px solid var(--hp-color-accent,#fff);outline-offset:2px}.hp-chip-panel,.hp-chip-panel:hover{background:var(--hp-panel-bg);border-color:var(--hp-panel-border);-webkit-backdrop-filter:blur(var(--hp-panel-blur)) saturate(160%);text-shadow:var(--hp-panel-text-shadow,none)}.hp-chip-panel{--hp-color-on-surface:var(--hp-panel-text);--hp-color-on-surface-muted:var(--hp-panel-text-muted);color:var(--hp-panel-text)}.hp-tooltip{background:var(--hp-tooltip-bg);color:var(--hp-tooltip-text);border-radius:calc(var(--hp-radius) * .75);-webkit-backdrop-filter:blur(12px)saturate(160%);font-weight:500;box-shadow:0 4px 14px #00000059}.hp-tooltip-key{background:var(--hp-tooltip-key-bg);min-width:16px;height:16px;color:var(--hp-tooltip-key-text);text-transform:uppercase;border-radius:4px;justify-content:center;align-items:center;padding:0 4px;font-size:10px;font-weight:700;line-height:16px;display:inline-flex}.hp-group{background:var(--hp-chip-bg);border:1px solid var(--hp-chip-border);-webkit-backdrop-filter:blur(var(--hp-chip-blur)) saturate(160%) brightness(var(--hp-chip-backdrop-brightness,1));box-shadow:var(--hp-chip-shadow);border-radius:9999px}.hp-group-left{position:relative}.hp-loading-ring{border-radius:inherit;pointer-events:none;opacity:0;filter:drop-shadow(0 0 3px var(--hp-color-accent,#fff));transition:opacity .22s;position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px}@supports (color:color-mix(in lab,red,red)){.hp-loading-ring{filter:drop-shadow(0 0 3px color-mix(in srgb,var(--hp-color-accent,#fff) 70%,transparent))}}.hp-loading-ring-mask{border-radius:inherit;-webkit-mask-composite:xor;padding:2px;position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor,source-over;mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0)}.hp-loading-ring-mask>span{aspect-ratio:1;background:conic-gradient(from 0deg,transparent 0deg 150deg,var(--hp-color-accent,#fff) 260deg,var(--hp-color-accent,#fff) 340deg,transparent 360deg);width:max(100%,160px);position:absolute;top:50%;left:50%;translate:-50% -50%}@supports (color:color-mix(in lab,red,red)){.hp-loading-ring-mask>span{background:conic-gradient(from 0deg,transparent 0deg 150deg,color-mix(in srgb,var(--hp-color-accent,#fff) 30%,transparent) 260deg,var(--hp-color-accent,#fff) 340deg,transparent 360deg)}}.hp-loading-ring-mask>span{animation:1.1s linear infinite paused hp-loading-ring-spin}.hp-group-left[data-loading]>.hp-loading-ring{opacity:1}.hp-group-left[data-loading]>.hp-loading-ring .hp-loading-ring-mask>span{animation-play-state:running}@keyframes hp-loading-ring-spin{to{rotate:360deg}}@media(prefers-reduced-motion:reduce){.hp-loading-ring-mask>span{background:var(--hp-color-accent,#fff);animation:none}.hp-group-left[data-loading]>.hp-loading-ring{animation:1.6s ease-in-out infinite hp-loading-ring-pulse}}@keyframes hp-loading-ring-pulse{50%{opacity:.35}}.hp-center-play>.hp-chip{-webkit-backdrop-filter:blur(var(--hp-chip-blur)) saturate(160%) brightness(var(--hp-chip-backdrop-brightness,1))}.hp-group .hp-icon,.hp-group [part=time-display],.hp-group .hp-live-badge,.hp-group [part=live-clock],.hp-group .hp-skip-num,.hp-center-play .hp-icon{filter:var(--hp-ctrl-shadow,none)}.hp-chrome:before{content:"";height:var(--hp-chrome-scrim-height);background:var(--hp-chrome-scrim);pointer-events:none;position:absolute;bottom:0;left:0;right:0}.video-area[data-compact]>.hp-chrome:after{content:"";background:var(--hp-chrome-scrim);opacity:.7;pointer-events:none;height:min(90px,30%);position:absolute;top:0;left:0;right:0;transform:scaleY(-1)}.hp-group button.hp-chip{box-shadow:none;-webkit-backdrop-filter:none;background:0 0;border-color:#0000}.hp-group button.hp-chip:hover{background:var(--hp-chip-bg-hover)}.hp-group button.hp-chip:active{background:var(--hp-chip-bg-active)}:host([data-theme=glass-dark]),:host([data-theme=neo-dark]),:host([data-theme=mono]){--hp-panel-bg:#0a0a0e8c;--hp-panel-border:#ffffff1a;--hp-panel-text:#fff;--hp-panel-text-muted:#a3a3a3;--hp-panel-text-shadow:0 1px 3px #000000a6;--hp-tooltip-bg:#0a0a0aeb;--hp-tooltip-text:#fff;--hp-tooltip-key-bg:#ffffff2e;--hp-tooltip-key-text:#fff}:host([data-theme=glass-dark]){--hp-chip-bg:#0a0a0e73;--hp-chip-bg-hover:#0a0a0e9e;--hp-chip-bg-active:#0a0a0ebf;--hp-chip-border:#ffffff14;--hp-chip-border-hover:#ffffff29;--hp-chip-shadow:0 4px 18px #0006, inset 0 1px 0 #ffffff0a;--hp-panel-bg:#08080cb8;--hp-chip-backdrop-brightness:1}:host([data-theme=neo-dark]){--hp-chip-bg:#24242a;--hp-chip-bg-hover:#2a2a31;--hp-chip-bg-active:#1e1e23;--hp-chip-border:transparent;--hp-chip-border-hover:transparent;--hp-chip-blur:0px;--hp-chip-shadow:5px 5px 10px #00000080, -4px -4px 9px #ffffff09;--hp-chip-radius:12px;--hp-color-surface:#1b1b20;--hp-panel-bg:#1e1e23;--hp-panel-text-shadow:none;--hp-chrome-scrim:none;--hp-chip-backdrop-brightness:1;--hp-ctrl-shadow:none}:host([data-theme=neo-dark]) button.hp-chip:active{box-shadow:inset 3px 3px 6px #00000080,inset -2px -2px 5px #ffffff08}:host([data-theme=mono]){--hp-chip-bg:#ffffff0a;--hp-chip-bg-hover:#ffffff1a;--hp-chip-border:#ffffff14;--hp-chip-border-hover:#ffffff24;--hp-chip-blur:0px;--hp-chip-shadow:none;--hp-panel-bg:#0a0a0aeb;--hp-panel-text-shadow:none}@media(pointer:coarse){:host{--hp-ctrl-btn-size:40px;--hp-ctrl-icon-size:18px;--hp-seek-hit-h:22px;--hp-seek-track-h:5px;--hp-seek-track-h-hover:7px;--hp-seek-thumb-size:14px;--hp-caption-font-size:19px}}:host(:fullscreen),:host(:-webkit-full-screen){--hp-ctrl-btn-size:44px;--hp-ctrl-icon-size:20px;--hp-seek-hit-h:26px;--hp-seek-track-h:6px;--hp-seek-track-h-hover:8px;--hp-seek-thumb-size:18px;--hp-caption-font-size:22px}:host(:fullscreen) [part=control-bar],:host(:-webkit-full-screen) [part=control-bar]{padding:28px 20px 18px}.video-area{aspect-ratio:16/9;border-radius:var(--hp-radius);background:var(--hp-color-surface,#0a0a0a);width:100%;position:relative;overflow:hidden}.video-area[data-compact]{--hp-caption-font-size:13px}.video-area[data-story]{aspect-ratio:9/16;max-width:49.5vh;max-height:88vh;margin:0 auto}:host(:fullscreen),:host(:-webkit-full-screen){background:#000;border-radius:0}:host(:fullscreen) .hp-root,:host(:-webkit-full-screen) .hp-root{height:100%}:host(:fullscreen) .video-area,:host(:-webkit-full-screen) .video-area{aspect-ratio:auto;background:#000;border-radius:0;width:100%;height:100%}:host(:fullscreen) .video-area[data-story],:host(:-webkit-full-screen) .video-area[data-story]{aspect-ratio:9/16;width:auto;max-width:100%;height:100%;max-height:none;margin:0 auto}.media-layer{position:absolute;top:0;right:0;bottom:0;left:0}.media-layer video{object-fit:contain;background:#000;width:100%;height:100%}.hp-center-x{transform:translate(-50%)}.hp-center-y{transform:translateY(-50%)}.hp-chip-panel[data-drop]{margin-top:8px;margin-bottom:0;top:100%;bottom:auto}.hp-top-bar{pointer-events:none;display:flex;position:absolute;top:8px;right:8px}.hp-top-bar>*{pointer-events:auto}.hp-story-list-btn{top:calc(8px + var(--hp-ctrl-btn-size) + 18px);right:12px}:host([data-cursor-hidden]),:host([data-cursor-hidden]) *{cursor:none!important}.hp-unmute-badge{z-index:25;background:var(--hp-tooltip-bg);color:var(--hp-tooltip-text);-webkit-backdrop-filter:blur(12px)saturate(160%);font:inherit;cursor:pointer;border:0;border-radius:9999px;align-items:center;gap:6px;padding:6px 12px 6px 10px;font-size:13px;font-weight:600;display:none;position:absolute;top:10px;left:10px;box-shadow:0 4px 14px #00000059}@media(hover:none)and (pointer:coarse){.hp-volume{display:none!important}.hp-unmute-badge[data-visible]{display:inline-flex}}.hp-error-screen{z-index:30;background:var(--hp-color-surface);justify-content:center;align-items:center;padding:12px;display:none;position:absolute;top:0;right:0;bottom:0;left:0}@supports (color:color-mix(in lab,red,red)){.hp-error-screen{background:color-mix(in srgb,var(--hp-color-surface) 94%,transparent)}}.hp-error-screen{-webkit-backdrop-filter:blur(16px)saturate(140%);color:var(--hp-color-on-surface);text-align:center;container-type:size}.hp-error-screen[data-visible]{animation:.22s hp-error-in;display:flex}@keyframes hp-error-in{0%{opacity:0}}.hp-error-card{flex-direction:column;align-items:center;gap:10px;max-width:340px;display:flex}.hp-error-icon{border:1px solid var(--hp-color-on-surface);border-radius:9999px;place-items:center;width:48px;height:48px;display:grid}@supports (color:color-mix(in lab,red,red)){.hp-error-icon{border:1px solid color-mix(in srgb,var(--hp-color-on-surface) 18%,transparent)}}.hp-error-icon{background:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-error-icon{background:color-mix(in srgb,var(--hp-color-on-surface) 8%,transparent)}}.hp-error-icon{margin-bottom:2px;font-size:22px}.hp-error-message{margin:0;font-size:14px;font-weight:600;line-height:1.45}.hp-error-code{color:var(--hp-color-on-surface-muted);font-variant-numeric:tabular-nums;margin:-4px 0 0;font-size:12px}.hp-error-retry{border:1px solid var(--hp-chip-border);background:var(--hp-chip-bg);color:var(--hp-color-on-surface);font:inherit;cursor:pointer;border-radius:9999px;align-items:center;gap:6px;margin-top:6px;padding:7px 14px 7px 12px;font-size:13px;font-weight:600;transition:background-color .15s,border-color .15s;display:inline-flex}.hp-error-retry:hover{background:var(--hp-chip-bg-hover);border-color:var(--hp-chip-border-hover)}.hp-error-retry:focus-visible{outline:2px solid var(--hp-color-accent);outline-offset:2px}@container (max-height:240px){.hp-error-card{gap:6px}.hp-error-icon{width:36px;height:36px;margin-bottom:0;font-size:16px}.hp-error-message{font-size:13px}.hp-error-code{margin-top:-2px;font-size:11px}.hp-error-retry{margin-top:2px;padding:5px 12px 5px 10px;font-size:12px}}.hp-context-menu,.hp-stats{border:1px solid var(--hp-panel-border);background:var(--hp-panel-bg);-webkit-backdrop-filter:blur(var(--hp-panel-blur)) saturate(160%);color:var(--hp-panel-text);text-shadow:var(--hp-panel-text-shadow,none);border-radius:10px;position:absolute;box-shadow:0 8px 28px #00000059}.hp-context-menu{z-index:40;min-width:200px;padding:4px;font-size:13px;display:none}.hp-context-menu[data-open]{animation:.12s hp-context-menu-in;display:block}@keyframes hp-context-menu-in{0%{opacity:0;transform:scale(.97)}}.hp-context-menu-item{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:space-between;align-items:center;gap:16px;padding:8px 10px;display:flex}.hp-context-menu-item[data-info]{cursor:default;font-weight:600}button.hp-context-menu-item:hover,button.hp-context-menu-item:focus-visible{background:var(--hp-panel-text)}@supports (color:color-mix(in lab,red,red)){button.hp-context-menu-item:hover,button.hp-context-menu-item:focus-visible{background:color-mix(in srgb,var(--hp-panel-text) 10%,transparent)}}button.hp-context-menu-item:hover,button.hp-context-menu-item:focus-visible{outline:none}.hp-context-menu-item+.hp-context-menu-item{margin-top:2px}.hp-context-menu-meta{color:var(--hp-panel-text-muted);font-variant-numeric:tabular-nums;font-weight:500}.hp-stats{z-index:28;width:min(360px,100% - 20px);max-height:calc(100% - 20px);padding:8px 12px 10px;font-size:11.5px;top:10px;left:10px;overflow:auto}.hp-stats-header{justify-content:space-between;align-items:center;margin-bottom:6px;font-size:12px;font-weight:700;display:flex}.hp-stats-close{color:inherit;cursor:pointer;background:0 0;border:0;border-radius:9999px;padding:4px;display:inline-flex}.hp-stats-close:hover{background:var(--hp-panel-text)}@supports (color:color-mix(in lab,red,red)){.hp-stats-close:hover{background:color-mix(in srgb,var(--hp-panel-text) 12%,transparent)}}.hp-stats-body{grid-template-columns:auto 1fr;gap:3px 12px;margin:0;display:grid}.hp-stats-body dt{color:var(--hp-panel-text-muted);white-space:nowrap}.hp-stats-body dd{text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:hidden}.hp-seek-fb{z-index:8;border:1px solid var(--hp-chip-border);background:var(--hp-chip-bg);-webkit-backdrop-filter:blur(var(--hp-chip-blur)) saturate(160%);box-shadow:var(--hp-chip-shadow);color:var(--hp-chip-text);pointer-events:none;opacity:0;border-radius:9999px;align-items:center;gap:10px;padding:12px 20px 12px 16px;transition:opacity .18s,translate .22s cubic-bezier(.2,.8,.2,1);display:flex;position:absolute;top:50%}.hp-seek-fb[data-side=forward]{right:7%;translate:14px -50%}.hp-seek-fb[data-side=back]{flex-direction:row-reverse;padding:12px 16px 12px 20px;left:7%;translate:-14px -50%}.hp-seek-fb[data-visible]{opacity:1;translate:0 -50%}.hp-seek-fb-chevrons{display:flex}.hp-seek-fb-chevrons svg{fill:currentColor;opacity:.25;width:16px;height:16px;margin:0 -3px;animation:.9s ease-in-out infinite hp-seek-fb-chevron}.hp-seek-fb[data-side=back] .hp-seek-fb-chevrons{transform:scaleX(-1)}.hp-seek-fb-chevrons svg:nth-child(2){animation-delay:.15s}.hp-seek-fb-chevrons svg:nth-child(3){animation-delay:.3s}@keyframes hp-seek-fb-chevron{0%,to{opacity:.25}40%{opacity:1}}.hp-seek-fb-value{white-space:nowrap;align-items:baseline;gap:3px;display:flex}.hp-seek-fb-num{font-variant-numeric:tabular-nums;font-size:20px;font-weight:700;line-height:1;display:inline-block}.hp-seek-fb-unit{opacity:.75;font-size:12px;font-weight:600}.hp-seek-fb-bump{animation:.26s cubic-bezier(.2,.8,.2,1) hp-seek-fb-bump}@keyframes hp-seek-fb-bump{0%{transform:scale(1.25)}to{transform:scale(1)}}.video-area[data-compact] .hp-seek-fb{padding:8px 12px}.video-area[data-compact] .hp-seek-fb[data-side=forward]{right:4%}.video-area[data-compact] .hp-seek-fb[data-side=back]{padding:8px 12px;left:4%}.video-area[data-compact] .hp-seek-fb-chevrons{display:none}.video-area[data-compact] .hp-seek-fb-num{font-size:16px}.hp-sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}@media(prefers-reduced-motion:reduce){.hp-seek-fb,.hp-seek-fb-chevrons svg,.hp-seek-fb-bump{transition:none;animation:none}.hp-seek-fb-chevrons svg{opacity:.8}}.hp-skip-btn{position:relative}.hp-skip-btn>.hp-icon{font-size:calc(var(--hp-ctrl-icon-size) * 1.45)}.hp-skip-num{padding-top:calc(var(--hp-ctrl-icon-size) * .14);font-size:calc(var(--hp-ctrl-icon-size) * .56);letter-spacing:-.02em;font-variant-numeric:tabular-nums;pointer-events:none;justify-content:center;align-items:center;font-weight:700;line-height:1;display:flex;position:absolute;top:0;right:0;bottom:0;left:0}.hp-skip-num[data-long]{font-size:calc(var(--hp-ctrl-icon-size) * .42)}.hp-skip-btn:disabled{opacity:.4;cursor:default}.hp-center-play>.hp-chip{z-index:7;position:relative}.video-area[data-center-play-shifted] .hp-center-play>.hp-chip{width:var(--hp-center-play-size);height:var(--hp-center-play-size);translate:var(--hp-center-play-shift-x,0px) var(--hp-center-play-shift)}.video-area[data-pause-ad-ready]>:is(.media-layer,.hp-chrome,.hp-center-play,.hp-caption-layer,.hp-error-screen,.hp-mini-progress){right:var(--hp-pause-ad-w,0px);transition:right .38s cubic-bezier(.2,.8,.2,1),opacity .2s}.video-area[data-pause-ad] .media-layer video{object-fit:cover}.hp-pause-ad{z-index:25;width:var(--hp-pause-ad-panel-w,332px);box-sizing:border-box;background:var(--hp-color-surface,#0a0a0a);color:var(--hp-color-on-surface,#fff);visibility:hidden;flex-direction:column;justify-content:center;gap:10px;padding:12px 16px;transition:transform .38s cubic-bezier(.2,.8,.2,1),visibility 0s linear .38s;display:flex;position:absolute;top:0;bottom:0;right:0;transform:translate(100%)}.hp-pause-ad[data-open]{visibility:visible;transition:transform .38s cubic-bezier(.2,.8,.2,1);transform:none}.hp-pause-ad-header{justify-content:space-between;align-items:center;gap:8px;display:flex}.hp-pause-ad-label{color:var(--hp-color-on-surface-muted,#ffffffb3);font-size:13px;font-weight:600}.hp-pause-ad-close{width:28px;height:28px;color:var(--hp-color-on-surface,#fff);cursor:pointer;background:0 0;border:0;border-radius:9999px;justify-content:center;align-items:center;padding:0;transition:background-color .15s;display:inline-flex}.hp-pause-ad-close:hover{background:var(--hp-chip-bg-hover)}.hp-pause-ad-body{border-radius:8px;justify-content:center;display:flex;overflow:hidden}.hp-pause-ad-resume{border:1px solid var(--hp-chip-border);background:var(--hp-chip-bg);color:var(--hp-color-on-surface,#fff);font:inherit;cursor:pointer;border-radius:9999px;align-self:stretch;padding:9px 14px;font-size:13px;font-weight:600;transition:background-color .15s,border-color .15s}.hp-pause-ad-resume:hover{background:var(--hp-chip-bg-hover);border-color:var(--hp-chip-border-hover)}.hp-pause-ad-close:focus-visible,.hp-pause-ad-resume:focus-visible{outline:2px solid var(--hp-color-accent);outline-offset:2px}@media(prefers-reduced-motion:reduce){.video-area[data-pause-ad-ready]>:is(.media-layer,.hp-chrome,.hp-center-play,.hp-caption-layer,.hp-error-screen,.hp-mini-progress),.hp-pause-ad,.hp-pause-ad[data-open]{transition:none}}.hp-seek-thumb{width:var(--hp-seek-thumb-size);height:var(--hp-seek-thumb-size);background:var(--hp-color-accent);will-change:translate,scale;pointer-events:none;z-index:2;border-radius:9999px;transition:scale .15s;position:absolute;left:0;scale:.5}.hp-seekbar:hover .hp-seek-thumb,.hp-seekbar:active .hp-seek-thumb,.hp-seekbar:focus-visible .hp-seek-thumb{scale:1}.hp-seekbar[data-no-duration] .hp-seek-thumb{display:none}.hp-seek-hover-dot{width:var(--hp-seek-track-h-hover);height:var(--hp-seek-track-h-hover);background:var(--hp-color-on-surface);opacity:0;pointer-events:none;z-index:1;border-radius:9999px;transition:opacity .12s;position:absolute;top:50%;left:0;box-shadow:0 0 0 1px #00000073}.hp-seek-hover-dot[data-visible]{opacity:.9}.hp-mini-progress{z-index:6;pointer-events:none;background:var(--hp-color-on-surface);height:1px;position:absolute;bottom:0;left:0;right:0}@supports (color:color-mix(in lab,red,red)){.hp-mini-progress{background:color-mix(in srgb,var(--hp-color-on-surface) 25%,transparent)}}.hp-mini-progress{opacity:0;transition:opacity .2s}.hp-mini-progress[data-visible]:not([data-disabled]){opacity:1}.hp-mini-progress-fill{transform-origin:0;will-change:transform;position:absolute;top:0;right:0;bottom:0;left:0;transform:scaleX(0)}.hp-mini-progress-buffered{background:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-mini-progress-buffered{background:color-mix(in srgb,var(--hp-color-on-surface) 40%,transparent)}}.hp-mini-progress-played{background:var(--hp-color-accent)}.hp-seek-time{border-radius:calc(var(--hp-radius) * .75);background:var(--hp-tooltip-bg);color:var(--hp-tooltip-text);-webkit-backdrop-filter:blur(12px)saturate(160%);font-variant-numeric:tabular-nums;white-space:nowrap;pointer-events:none;visibility:hidden;z-index:20;padding:3px 7px;font-size:12px;font-weight:500;position:absolute;bottom:calc(100% + 8px);left:0;box-shadow:0 4px 14px #00000059}.hp-seek-time[data-visible]{visibility:visible}.hp-sprite-tooltip{pointer-events:none;visibility:hidden;z-index:20;flex-direction:column;align-items:center;gap:4px;display:flex;position:absolute;bottom:calc(100% + 8px);left:0}.hp-sprite-tooltip[data-visible]{visibility:visible}.hp-sprite-image{border-radius:calc(var(--hp-radius) * .75);border:2px solid var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-sprite-image{border:2px solid color-mix(in srgb,var(--hp-color-on-surface) 85%,transparent)}}.hp-sprite-image{background-color:#000;background-repeat:no-repeat;box-shadow:0 4px 14px #00000059}.hp-sprite-time{background:var(--hp-tooltip-bg);color:var(--hp-tooltip-text);font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:4px;padding:2px 6px;font-size:12px}.hp-live-badge{height:var(--hp-ctrl-btn-size);color:var(--hp-color-on-surface);font:inherit;letter-spacing:.04em;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:9999px;align-items:center;gap:6px;padding:0 8px;font-size:12px;font-weight:600;display:inline-flex}.hp-live-badge:hover{background:var(--hp-chip-bg-hover)}.hp-live-badge:focus-visible{outline:2px solid var(--hp-color-accent);outline-offset:2px}.hp-live-dot{background:var(--hp-live-color,red);border-radius:50%;width:8px;height:8px;transition:background-color .16s}.hp-live-badge[data-behind]{color:var(--hp-color-on-surface-muted)}.hp-live-badge[data-behind] .hp-live-dot{background:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-live-badge[data-behind] .hp-live-dot{background:color-mix(in srgb,var(--hp-color-on-surface) 45%,transparent)}}.hp-chapters{pointer-events:none;inset-inline:0;align-items:center;gap:2px;display:flex;position:absolute;top:0;bottom:0}.hp-chapter{min-width:1px;height:var(--hp-seek-track-h);background:var(--hp-color-on-surface);border-radius:1px;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.hp-chapter{background:color-mix(in srgb,var(--hp-color-on-surface) 25%,transparent)}}.hp-chapter{transition:height .15s}.hp-seekbar:hover .hp-chapter{height:var(--hp-seek-track-h-hover)}.hp-seekbar .hp-chapter[data-hover]{height:calc(var(--hp-seek-track-h-hover) * 1.6)}.hp-chapter-fill{transform-origin:0;will-change:transform;position:absolute;top:0;right:0;bottom:0;left:0;transform:scaleX(0)}.hp-chapter-buffered{background:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-chapter-buffered{background:color-mix(in srgb,var(--hp-color-on-surface) 40%,transparent)}}.hp-chapter-played{background:var(--hp-color-accent)}.hp-chapter-tooltip{background:var(--hp-tooltip-bg);max-width:240px;color:var(--hp-tooltip-text);border-radius:calc(var(--hp-radius) * .75);-webkit-backdrop-filter:blur(12px)saturate(160%);text-align:center;pointer-events:none;white-space:nowrap;visibility:hidden;z-index:40;flex-direction:column;align-items:center;gap:2px;padding:4px 8px;font-size:12px;line-height:1.3;display:flex;position:absolute;bottom:calc(100% + 6px);left:0;box-shadow:0 4px 14px #00000059}.hp-chapter-tooltip[data-visible]{visibility:visible}.hp-chapter-tooltip-title{text-overflow:ellipsis;max-width:100%;font-weight:600;overflow:hidden}.hp-chapter-tooltip-time{opacity:.75;font-variant-numeric:tabular-nums}:host([data-sticky]){z-index:2147483000;border-radius:var(--hp-radius);box-shadow:0 8px 28px #00000073;aspect-ratio:16/9!important;width:min(360px,92vw)!important;position:fixed!important}:host([data-sticky][data-sticky-corner=br]){inset:auto 16px 16px auto}:host([data-sticky][data-sticky-corner=bl]){inset:auto auto 16px 16px}:host([data-sticky][data-sticky-corner=tr]){inset:16px 16px auto auto}:host([data-sticky][data-sticky-corner=tl]){inset:16px auto auto 16px}.hp-caption-layer{z-index:5;pointer-events:none;position:absolute;top:0;right:0;bottom:0;left:0}.hp-caption-bubble{background:var(--hp-caption-bg);width:max-content;max-width:86%;color:var(--hp-caption-text);border-radius:var(--hp-caption-radius);font-size:calc(var(--hp-caption-font-size) * var(--hp-caption-size-multiplier,1));text-align:center;white-space:pre-line;cursor:grab;pointer-events:auto;touch-action:none;-webkit-user-select:none;user-select:none;padding:.3em .6em;line-height:1.4;transition:transform .24s cubic-bezier(.25,.8,.25,1);display:none;position:absolute;bottom:0;left:50%;transform:translate(-50%)}.hp-caption-bubble.hp-caption-visible{display:inline-block}.hp-caption-bubble.hp-caption-dragging,.hp-caption-bubble.hp-caption-no-transition{transition:none}.hp-caption-bubble.hp-caption-dragging{cursor:grabbing}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}';
5
- function D() {
1
+ var fe = Object.defineProperty;
2
+ var ve = (o, t, e) => t in o ? fe(o, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : o[t] = e;
3
+ var s = (o, t, e) => ve(o, typeof t != "symbol" ? t + "" : t, e);
4
+ const ye = '/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial}}}@layer theme{:root,:host{--hp-font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--hp-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--hp-color-black:#000;--hp-color-white:#fff;--hp-spacing:.25rem;--hp-container-xs:20rem;--hp-text-xs:.75rem;--hp-text-xs--line-height:calc(1 / .75);--hp-text-sm:.875rem;--hp-text-sm--line-height:calc(1.25 / .875);--hp-text-base:1rem;--hp-text-base--line-height: 1.5 ;--hp-text-lg:1.125rem;--hp-text-lg--line-height:calc(1.75 / 1.125);--hp-text-xl:1.25rem;--hp-text-xl--line-height:calc(1.75 / 1.25);--hp-text-2xl:1.5rem;--hp-text-2xl--line-height:calc(2 / 1.5);--hp-font-weight-medium:500;--hp-font-weight-semibold:600;--hp-radius-lg:.5rem;--hp-animate-spin:spin 1s linear infinite;--hp-aspect-video:16 / 9;--hp-default-transition-duration:.15s;--hp-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--hp-default-font-family:var(--hp-font-sans);--hp-default-mono-font-family:var(--hp-font-mono);--hp-color-accent:#fff;--hp-color-on-accent:#0a0a0a;--hp-color-surface:#0a0a0a;--hp-color-surface-elev:#1a1a1a;--hp-color-on-surface:#fff;--hp-color-on-surface-muted:#a3a3a3}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--hp-default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--hp-default-font-feature-settings,normal);font-variation-settings:var(--hp-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--hp-default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--hp-default-mono-font-feature-settings,normal);font-variation-settings:var(--hp-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.hp\\:pointer-events-auto{pointer-events:auto}.hp\\:pointer-events-none{pointer-events:none}.hp\\:absolute{position:absolute}.hp\\:relative{position:relative}.hp\\:sticky{position:sticky}.hp\\:inset-0{top:0;right:0;bottom:0;left:0}.hp\\:inset-x-0{inset-inline:0}.hp\\:inset-y-0{inset-block:0}.hp\\:top-0{top:0}.hp\\:top-1{top:var(--hp-spacing)}.hp\\:top-1\\/2{top:50%}.hp\\:right-0{right:0}.hp\\:right-1{right:var(--hp-spacing)}.hp\\:right-2{right:calc(var(--hp-spacing) * 2)}.hp\\:bottom-0{bottom:0}.hp\\:bottom-full{bottom:100%}.hp\\:left-1\\/2{left:50%}.hp\\:z-10{z-index:10}.hp\\:z-20{z-index:20}.hp\\:z-30{z-index:30}.hp\\:z-40{z-index:40}.hp\\:m-0{margin:0}.hp\\:mt-0\\.5{margin-top:calc(var(--hp-spacing) * .5)}.hp\\:mt-1{margin-top:var(--hp-spacing)}.hp\\:mt-2{margin-top:calc(var(--hp-spacing) * 2)}.hp\\:mt-8{margin-top:calc(var(--hp-spacing) * 8)}.hp\\:mb-1{margin-bottom:var(--hp-spacing)}.hp\\:mb-2{margin-bottom:calc(var(--hp-spacing) * 2)}.hp\\:mb-16{margin-bottom:calc(var(--hp-spacing) * 16)}.hp\\:ml-1{margin-left:var(--hp-spacing)}.hp\\:block{display:block}.hp\\:flex{display:flex}.hp\\:grid{display:grid}.hp\\:hidden{display:none}.hp\\:aspect-\\[9\\/16\\]{aspect-ratio:9/16}.hp\\:aspect-video{aspect-ratio:var(--hp-aspect-video)}.hp\\:h-0\\.5{height:calc(var(--hp-spacing) * .5)}.hp\\:h-1{height:var(--hp-spacing)}.hp\\:h-1\\/3{height:33.3333%}.hp\\:h-6{height:calc(var(--hp-spacing) * 6)}.hp\\:h-7{height:calc(var(--hp-spacing) * 7)}.hp\\:h-8{height:calc(var(--hp-spacing) * 8)}.hp\\:h-9{height:calc(var(--hp-spacing) * 9)}.hp\\:h-10{height:calc(var(--hp-spacing) * 10)}.hp\\:h-16{height:calc(var(--hp-spacing) * 16)}.hp\\:h-20{height:calc(var(--hp-spacing) * 20)}.hp\\:h-\\[var\\(--hp-ctrl-btn-size\\)\\]{height:var(--hp-ctrl-btn-size)}.hp\\:h-\\[var\\(--hp-seek-hit-h\\)\\]{height:var(--hp-seek-hit-h)}.hp\\:h-\\[var\\(--hp-seek-track-h\\)\\]{height:var(--hp-seek-track-h)}.hp\\:h-full{height:100%}.hp\\:max-h-64{max-height:calc(var(--hp-spacing) * 64)}.hp\\:max-h-80{max-height:calc(var(--hp-spacing) * 80)}.hp\\:w-0{width:0}.hp\\:w-0\\.5{width:calc(var(--hp-spacing) * .5)}.hp\\:w-1{width:var(--hp-spacing)}.hp\\:w-1\\.5{width:calc(var(--hp-spacing) * 1.5)}.hp\\:w-6{width:calc(var(--hp-spacing) * 6)}.hp\\:w-7{width:calc(var(--hp-spacing) * 7)}.hp\\:w-8{width:calc(var(--hp-spacing) * 8)}.hp\\:w-9{width:calc(var(--hp-spacing) * 9)}.hp\\:w-10{width:calc(var(--hp-spacing) * 10)}.hp\\:w-14{width:calc(var(--hp-spacing) * 14)}.hp\\:w-16{width:calc(var(--hp-spacing) * 16)}.hp\\:w-48{width:calc(var(--hp-spacing) * 48)}.hp\\:w-72{width:calc(var(--hp-spacing) * 72)}.hp\\:w-\\[var\\(--hp-ctrl-btn-size\\)\\]{width:var(--hp-ctrl-btn-size)}.hp\\:w-full{width:100%}.hp\\:max-w-\\[50\\%\\]{max-width:50%}.hp\\:max-w-\\[80\\%\\]{max-width:80%}.hp\\:max-w-\\[85\\%\\]{max-width:85%}.hp\\:max-w-full{max-width:100%}.hp\\:max-w-xs{max-width:var(--hp-container-xs)}.hp\\:min-w-0{min-width:0}.hp\\:flex-1{flex:1}.hp\\:flex-shrink-0,.hp\\:shrink-0{flex-shrink:0}.hp\\:animate-spin{animation:var(--hp-animate-spin)}.hp\\:cursor-pointer{cursor:pointer}.hp\\:touch-none{touch-action:none}.hp\\:list-none{list-style-type:none}.hp\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.hp\\:flex-col{flex-direction:column}.hp\\:flex-wrap{flex-wrap:wrap}.hp\\:items-center{align-items:center}.hp\\:items-end{align-items:flex-end}.hp\\:justify-between{justify-content:space-between}.hp\\:justify-center{justify-content:center}.hp\\:gap-0\\.5{gap:calc(var(--hp-spacing) * .5)}.hp\\:gap-1{gap:var(--hp-spacing)}.hp\\:gap-1\\.5{gap:calc(var(--hp-spacing) * 1.5)}.hp\\:gap-2{gap:calc(var(--hp-spacing) * 2)}.hp\\:gap-3{gap:calc(var(--hp-spacing) * 3)}.hp\\:self-end{align-self:flex-end}.hp\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.hp\\:overflow-hidden{overflow:hidden}.hp\\:overflow-y-auto{overflow-y:auto}.hp\\:rounded{border-radius:.25rem}.hp\\:rounded-full{border-radius:3.40282e38px}.hp\\:rounded-lg{border-radius:var(--hp-radius-lg)}.hp\\:border{border-style:var(--tw-border-style);border-width:1px}.hp\\:border-0{border-style:var(--tw-border-style);border-width:0}.hp\\:border-2{border-style:var(--tw-border-style);border-width:2px}.hp\\:border-\\[3px\\]{border-style:var(--tw-border-style);border-width:3px}.hp\\:border-on-surface\\/20{border-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:border-on-surface\\/20{border-color:color-mix(in oklab,var(--hp-color-on-surface) 20%,transparent)}}.hp\\:border-on-surface\\/30{border-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:border-on-surface\\/30{border-color:color-mix(in oklab,var(--hp-color-on-surface) 30%,transparent)}}.hp\\:border-t-accent{border-top-color:var(--hp-color-accent)}.hp\\:bg-accent,.hp\\:bg-accent\\/15{background-color:var(--hp-color-accent)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-accent\\/15{background-color:color-mix(in oklab,var(--hp-color-accent) 15%,transparent)}}.hp\\:bg-black,.hp\\:bg-black\\/30{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/30{background-color:color-mix(in oklab,var(--hp-color-black) 30%,transparent)}}.hp\\:bg-black\\/40{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/40{background-color:color-mix(in oklab,var(--hp-color-black) 40%,transparent)}}.hp\\:bg-black\\/60{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/60{background-color:color-mix(in oklab,var(--hp-color-black) 60%,transparent)}}.hp\\:bg-black\\/70{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/70{background-color:color-mix(in oklab,var(--hp-color-black) 70%,transparent)}}.hp\\:bg-black\\/85{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/85{background-color:color-mix(in oklab,var(--hp-color-black) 85%,transparent)}}.hp\\:bg-on-surface,.hp\\:bg-on-surface\\/20{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-on-surface\\/20{background-color:color-mix(in oklab,var(--hp-color-on-surface) 20%,transparent)}}.hp\\:bg-on-surface\\/25{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-on-surface\\/25{background-color:color-mix(in oklab,var(--hp-color-on-surface) 25%,transparent)}}.hp\\:bg-on-surface\\/40{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-on-surface\\/40{background-color:color-mix(in oklab,var(--hp-color-on-surface) 40%,transparent)}}.hp\\:bg-surface{background-color:var(--hp-color-surface)}.hp\\:bg-surface-elev{background-color:var(--hp-color-surface-elev)}.hp\\:bg-transparent{background-color:#0000}.hp\\:bg-white,.hp\\:bg-white\\/15{background-color:var(--hp-color-white)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-white\\/15{background-color:color-mix(in oklab,var(--hp-color-white) 15%,transparent)}}.hp\\:bg-white\\/30{background-color:var(--hp-color-white)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-white\\/30{background-color:color-mix(in oklab,var(--hp-color-white) 30%,transparent)}}.hp\\:bg-white\\/40{background-color:var(--hp-color-white)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-white\\/40{background-color:color-mix(in oklab,var(--hp-color-white) 40%,transparent)}}.hp\\:bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.hp\\:from-black\\/80{--tw-gradient-from:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:from-black\\/80{--tw-gradient-from:color-mix(in oklab, var(--hp-color-black) 80%, transparent)}}.hp\\:from-black\\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hp\\:to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hp\\:bg-cover{background-size:cover}.hp\\:bg-center{background-position:50%}.hp\\:object-cover{object-fit:cover}.hp\\:p-0{padding:0}.hp\\:p-1\\.5{padding:calc(var(--hp-spacing) * 1.5)}.hp\\:p-2{padding:calc(var(--hp-spacing) * 2)}.hp\\:p-3{padding:calc(var(--hp-spacing) * 3)}.hp\\:p-4{padding:calc(var(--hp-spacing) * 4)}.hp\\:px-1{padding-inline:var(--hp-spacing)}.hp\\:px-1\\.5{padding-inline:calc(var(--hp-spacing) * 1.5)}.hp\\:px-2{padding-inline:calc(var(--hp-spacing) * 2)}.hp\\:px-3{padding-inline:calc(var(--hp-spacing) * 3)}.hp\\:px-4{padding-inline:calc(var(--hp-spacing) * 4)}.hp\\:py-1{padding-block:var(--hp-spacing)}.hp\\:py-1\\.5{padding-block:calc(var(--hp-spacing) * 1.5)}.hp\\:py-2{padding-block:calc(var(--hp-spacing) * 2)}.hp\\:pt-6{padding-top:calc(var(--hp-spacing) * 6)}.hp\\:pb-2{padding-bottom:calc(var(--hp-spacing) * 2)}.hp\\:text-center{text-align:center}.hp\\:text-left{text-align:left}.hp\\:font-mono{font-family:var(--hp-font-mono)}.hp\\:text-2xl{font-size:var(--hp-text-2xl);line-height:var(--tw-leading,var(--hp-text-2xl--line-height))}.hp\\:text-base{font-size:var(--hp-text-base);line-height:var(--tw-leading,var(--hp-text-base--line-height))}.hp\\:text-lg{font-size:var(--hp-text-lg);line-height:var(--tw-leading,var(--hp-text-lg--line-height))}.hp\\:text-sm{font-size:var(--hp-text-sm);line-height:var(--tw-leading,var(--hp-text-sm--line-height))}.hp\\:text-xl{font-size:var(--hp-text-xl);line-height:var(--tw-leading,var(--hp-text-xl--line-height))}.hp\\:text-xs{font-size:var(--hp-text-xs);line-height:var(--tw-leading,var(--hp-text-xs--line-height))}.hp\\:text-\\[length\\:var\\(--hp-ctrl-icon-size\\)\\]{font-size:var(--hp-ctrl-icon-size)}.hp\\:leading-none{--tw-leading:1;line-height:1}.hp\\:font-medium{--tw-font-weight:var(--hp-font-weight-medium);font-weight:var(--hp-font-weight-medium)}.hp\\:font-semibold{--tw-font-weight:var(--hp-font-weight-semibold);font-weight:var(--hp-font-weight-semibold)}.hp\\:whitespace-nowrap{white-space:nowrap}.hp\\:text-accent{color:var(--hp-color-accent)}.hp\\:text-on-accent{color:var(--hp-color-on-accent)}.hp\\:text-on-surface{color:var(--hp-color-on-surface)}.hp\\:text-on-surface-muted{color:var(--hp-color-on-surface-muted)}.hp\\:text-white{color:var(--hp-color-white)}.hp\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.hp\\:no-underline{text-decoration-line:none}.hp\\:underline{text-decoration-line:underline}.hp\\:opacity-0{opacity:0}.hp\\:opacity-60{opacity:.6}.hp\\:opacity-70{opacity:.7}.hp\\:opacity-80{opacity:.8}.hp\\:opacity-90{opacity:.9}.hp\\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hp\\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hp\\:drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.hp\\:transition-\\[height\\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--hp-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hp-default-transition-duration))}.hp\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--hp-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hp-default-transition-duration))}.hp\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hp-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hp-default-transition-duration))}.hp\\:duration-100{--tw-duration:.1s;transition-duration:.1s}.hp\\:duration-150{--tw-duration:.15s;transition-duration:.15s}.hp\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.hp\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.hp\\:will-change-\\[opacity\\]{will-change:opacity}.hp\\:select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.hp\\:group-hover\\:h-\\[var\\(--hp-seek-track-h-hover\\)\\]:is(:where(.hp\\:group):hover *){height:var(--hp-seek-track-h-hover)}.hp\\:hover\\:bg-on-surface\\/5:hover{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:hover\\:bg-on-surface\\/5:hover{background-color:color-mix(in oklab,var(--hp-color-on-surface) 5%,transparent)}}.hp\\:hover\\:bg-on-surface\\/10:hover{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:hover\\:bg-on-surface\\/10:hover{background-color:color-mix(in oklab,var(--hp-color-on-surface) 10%,transparent)}}.hp\\:hover\\:opacity-80:hover{opacity:.8}}.hp\\:focus-visible\\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hp\\:focus-visible\\:ring-accent:focus-visible{--tw-ring-color:var(--hp-color-accent)}.hp\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.hp\\:data-\\[active\\=true\\]\\:bg-accent\\/15[data-active=true]{background-color:var(--hp-color-accent)}@supports (color:color-mix(in lab,red,red)){.hp\\:data-\\[active\\=true\\]\\:bg-accent\\/15[data-active=true]{background-color:color-mix(in oklab,var(--hp-color-accent) 15%,transparent)}}.hp\\:data-\\[active\\=true\\]\\:text-on-surface[data-active=true]{color:var(--hp-color-on-surface)}}.hp-icon{font-variant:normal;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:hope-icons;font-style:normal;font-weight:400;line-height:1}.hp-icon-check:before{content:""}.hp-icon-chevron-left:before{content:""}.hp-icon-close:before{content:""}.hp-icon-fullscreen-enter:before{content:""}.hp-icon-fullscreen-exit:before{content:""}.hp-icon-grid:before{content:""}.hp-icon-loop:before{content:""}.hp-icon-pause:before{content:""}.hp-icon-pip:before{content:""}.hp-icon-play:before{content:""}.hp-icon-settings:before{content:""}.hp-icon-skip-back:before{content:""}.hp-icon-skip-forward:before{content:""}.hp-icon-volume-high:before{content:""}.hp-icon-volume-low:before{content:""}.hp-icon-volume-muted:before{content:""}.hp-icon-warning:before{content:""}:host{--hp-radius:8px;--hp-chip-bg:#ffffff14;--hp-chip-bg-hover:#ffffff2e;--hp-chip-bg-active:#ffffff42;--hp-chip-border:#ffffff29;--hp-chip-border-hover:#ffffff4d;--hp-chip-blur:14px;--hp-chip-shadow:0 4px 18px #00000047, inset 0 1px 0 #ffffff12;--hp-chip-radius:10px;--hp-chip-text:var(--hp-color-on-surface,#fff);--hp-chrome-scrim:linear-gradient(to top, #00000080 0%, #0000003d 50%, #0000 100%);--hp-chrome-scrim-height:min(150px, 45%);--hp-chip-backdrop-brightness:.78;--hp-ctrl-shadow:drop-shadow(0 1px 1.5px #0000008c);--hp-panel-bg:#ffffffb8;--hp-panel-blur:26px;--hp-panel-border:#0f11171a;--hp-panel-text:#15171c;--hp-panel-text-muted:#5b6270;--hp-panel-text-shadow:none;--hp-ctrl-btn-size:32px;--hp-ctrl-icon-size:16px;--hp-seek-hit-h:16px;--hp-seek-track-h:4px;--hp-seek-track-h-hover:6px;--hp-seek-thumb-size:12px;--hp-tooltip-bg:#ffffffe6;--hp-tooltip-text:#15171c;--hp-tooltip-key-bg:#0f11171a;--hp-tooltip-key-text:#15171c;--hp-caption-font-size:16px;--hp-caption-bg:#000000bf;--hp-caption-text:#fff;--hp-caption-radius:4px;background:var(--hp-color-surface,#0a0a0a);width:100%;color:var(--hp-color-on-surface,#fff);border-radius:var(--hp-radius);font-family:system-ui,-apple-system,sans-serif;line-height:1;display:block}.hp-chip{background:var(--hp-chip-bg);border:1px solid var(--hp-chip-border);border-radius:var(--hp-chip-radius);-webkit-backdrop-filter:blur(var(--hp-chip-blur)) saturate(160%);box-shadow:var(--hp-chip-shadow);color:var(--hp-chip-text);transition:background-color .16s,border-color .16s,box-shadow .16s,transform .12s}.hp-chip:hover{background:var(--hp-chip-bg-hover);border-color:var(--hp-chip-border-hover)}button.hp-chip:active{background:var(--hp-chip-bg-active);transform:scale(.94)}.hp-chip:focus-visible{outline:2px solid var(--hp-color-accent,#fff);outline-offset:2px}.hp-chip-panel,.hp-chip-panel:hover{background:var(--hp-panel-bg);border-color:var(--hp-panel-border);-webkit-backdrop-filter:blur(var(--hp-panel-blur)) saturate(160%);text-shadow:var(--hp-panel-text-shadow,none)}.hp-chip-panel{--hp-color-on-surface:var(--hp-panel-text);--hp-color-on-surface-muted:var(--hp-panel-text-muted);color:var(--hp-panel-text)}.hp-tooltip{background:var(--hp-tooltip-bg);color:var(--hp-tooltip-text);border-radius:calc(var(--hp-radius) * .75);-webkit-backdrop-filter:blur(12px)saturate(160%);font-weight:500;box-shadow:0 4px 14px #00000059}.hp-tooltip-key{background:var(--hp-tooltip-key-bg);min-width:16px;height:16px;color:var(--hp-tooltip-key-text);text-transform:uppercase;border-radius:4px;justify-content:center;align-items:center;padding:0 4px;font-size:10px;font-weight:700;line-height:16px;display:inline-flex}.hp-group{background:var(--hp-chip-bg);border:1px solid var(--hp-chip-border);-webkit-backdrop-filter:blur(var(--hp-chip-blur)) saturate(160%) brightness(var(--hp-chip-backdrop-brightness,1));box-shadow:var(--hp-chip-shadow);border-radius:9999px}.hp-group-left{position:relative}.hp-loading-ring{border-radius:inherit;pointer-events:none;opacity:0;filter:drop-shadow(0 0 3px var(--hp-color-accent,#fff));transition:opacity .22s;position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px}@supports (color:color-mix(in lab,red,red)){.hp-loading-ring{filter:drop-shadow(0 0 3px color-mix(in srgb,var(--hp-color-accent,#fff) 70%,transparent))}}.hp-loading-ring-mask{border-radius:inherit;-webkit-mask-composite:xor;padding:2px;position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor,source-over;mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0)}.hp-loading-ring-mask>span{aspect-ratio:1;background:conic-gradient(from 0deg,transparent 0deg 150deg,var(--hp-color-accent,#fff) 260deg,var(--hp-color-accent,#fff) 340deg,transparent 360deg);width:max(100%,160px);position:absolute;top:50%;left:50%;translate:-50% -50%}@supports (color:color-mix(in lab,red,red)){.hp-loading-ring-mask>span{background:conic-gradient(from 0deg,transparent 0deg 150deg,color-mix(in srgb,var(--hp-color-accent,#fff) 30%,transparent) 260deg,var(--hp-color-accent,#fff) 340deg,transparent 360deg)}}.hp-loading-ring-mask>span{animation:1.1s linear infinite paused hp-loading-ring-spin}.hp-group-left[data-loading]>.hp-loading-ring{opacity:1}.hp-group-left[data-loading]>.hp-loading-ring .hp-loading-ring-mask>span{animation-play-state:running}@keyframes hp-loading-ring-spin{to{rotate:360deg}}@media(prefers-reduced-motion:reduce){.hp-loading-ring-mask>span{background:var(--hp-color-accent,#fff);animation:none}.hp-group-left[data-loading]>.hp-loading-ring{animation:1.6s ease-in-out infinite hp-loading-ring-pulse}}@keyframes hp-loading-ring-pulse{50%{opacity:.35}}.hp-center-play>.hp-chip{-webkit-backdrop-filter:blur(var(--hp-chip-blur)) saturate(160%) brightness(var(--hp-chip-backdrop-brightness,1))}.hp-group .hp-icon,.hp-group [part=time-display],.hp-group .hp-live-badge,.hp-group [part=live-clock],.hp-group .hp-skip-num,.hp-center-play .hp-icon{filter:var(--hp-ctrl-shadow,none)}.hp-chrome:before{content:"";height:var(--hp-chrome-scrim-height);background:var(--hp-chrome-scrim);pointer-events:none;position:absolute;bottom:0;left:0;right:0}.video-area[data-compact]>.hp-chrome:after{content:"";background:var(--hp-chrome-scrim);opacity:.7;pointer-events:none;height:min(90px,30%);position:absolute;top:0;left:0;right:0;transform:scaleY(-1)}.hp-group button.hp-chip{box-shadow:none;-webkit-backdrop-filter:none;background:0 0;border-color:#0000}.hp-group button.hp-chip:hover{background:var(--hp-chip-bg-hover)}.hp-group button.hp-chip:active{background:var(--hp-chip-bg-active)}:host([data-theme=glass-dark]),:host([data-theme=neo-dark]),:host([data-theme=mono]){--hp-panel-bg:#0a0a0e8c;--hp-panel-border:#ffffff1a;--hp-panel-text:#fff;--hp-panel-text-muted:#a3a3a3;--hp-panel-text-shadow:0 1px 3px #000000a6;--hp-tooltip-bg:#0a0a0aeb;--hp-tooltip-text:#fff;--hp-tooltip-key-bg:#ffffff2e;--hp-tooltip-key-text:#fff}:host([data-theme=glass-dark]){--hp-chip-bg:#0a0a0e73;--hp-chip-bg-hover:#0a0a0e9e;--hp-chip-bg-active:#0a0a0ebf;--hp-chip-border:#ffffff14;--hp-chip-border-hover:#ffffff29;--hp-chip-shadow:0 4px 18px #0006, inset 0 1px 0 #ffffff0a;--hp-panel-bg:#08080cb8;--hp-chip-backdrop-brightness:1}:host([data-theme=neo-dark]){--hp-chip-bg:#24242a;--hp-chip-bg-hover:#2a2a31;--hp-chip-bg-active:#1e1e23;--hp-chip-border:transparent;--hp-chip-border-hover:transparent;--hp-chip-blur:0px;--hp-chip-shadow:5px 5px 10px #00000080, -4px -4px 9px #ffffff09;--hp-chip-radius:12px;--hp-color-surface:#1b1b20;--hp-panel-bg:#1e1e23;--hp-panel-text-shadow:none;--hp-chrome-scrim:none;--hp-chip-backdrop-brightness:1;--hp-ctrl-shadow:none}:host([data-theme=neo-dark]) button.hp-chip:active{box-shadow:inset 3px 3px 6px #00000080,inset -2px -2px 5px #ffffff08}:host([data-theme=mono]){--hp-chip-bg:#ffffff0a;--hp-chip-bg-hover:#ffffff1a;--hp-chip-border:#ffffff14;--hp-chip-border-hover:#ffffff24;--hp-chip-blur:0px;--hp-chip-shadow:none;--hp-panel-bg:#0a0a0aeb;--hp-panel-text-shadow:none}@media(pointer:coarse){:host{--hp-ctrl-btn-size:40px;--hp-ctrl-icon-size:18px;--hp-seek-hit-h:22px;--hp-seek-track-h:5px;--hp-seek-track-h-hover:7px;--hp-seek-thumb-size:14px;--hp-caption-font-size:19px}}:host(:fullscreen),:host(:-webkit-full-screen){--hp-ctrl-btn-size:44px;--hp-ctrl-icon-size:20px;--hp-seek-hit-h:26px;--hp-seek-track-h:6px;--hp-seek-track-h-hover:8px;--hp-seek-thumb-size:18px;--hp-caption-font-size:22px}:host(:fullscreen) [part=control-bar],:host(:-webkit-full-screen) [part=control-bar]{padding:28px 20px 18px}.video-area{aspect-ratio:16/9;border-radius:var(--hp-radius);background:var(--hp-color-surface,#0a0a0a);width:100%;position:relative;overflow:hidden}.video-area[data-compact]{--hp-caption-font-size:13px}.video-area[data-story]{aspect-ratio:9/16;max-width:49.5vh;max-height:88vh;margin:0 auto}:host(:fullscreen),:host(:-webkit-full-screen){background:#000;border-radius:0}:host(:fullscreen) .hp-root,:host(:-webkit-full-screen) .hp-root{height:100%}:host(:fullscreen) .video-area,:host(:-webkit-full-screen) .video-area{aspect-ratio:auto;background:#000;border-radius:0;width:100%;height:100%}:host(:fullscreen) .video-area[data-story],:host(:-webkit-full-screen) .video-area[data-story]{aspect-ratio:9/16;width:auto;max-width:100%;height:100%;max-height:none;margin:0 auto}.media-layer{position:absolute;top:0;right:0;bottom:0;left:0}.media-layer video{object-fit:contain;background:#000;width:100%;height:100%}.hp-center-x{transform:translate(-50%)}.hp-center-y{transform:translateY(-50%)}.hp-chip-panel[data-drop]{margin-top:8px;margin-bottom:0;top:100%;bottom:auto}.hp-top-bar{pointer-events:none;display:flex;position:absolute;top:8px;right:8px}.hp-top-bar>*{pointer-events:auto}.hp-story-list-btn{top:calc(8px + var(--hp-ctrl-btn-size) + 18px);right:12px}:host([data-cursor-hidden]),:host([data-cursor-hidden]) *{cursor:none!important}.hp-unmute-badge{z-index:25;background:var(--hp-tooltip-bg);color:var(--hp-tooltip-text);-webkit-backdrop-filter:blur(12px)saturate(160%);font:inherit;cursor:pointer;border:0;border-radius:9999px;align-items:center;gap:6px;padding:6px 12px 6px 10px;font-size:13px;font-weight:600;display:none;position:absolute;top:10px;left:10px;box-shadow:0 4px 14px #00000059}@media(hover:none)and (pointer:coarse){.hp-volume{display:none!important}.hp-unmute-badge[data-visible]{display:inline-flex}}.hp-error-screen{z-index:30;background:var(--hp-color-surface);justify-content:center;align-items:center;padding:12px;display:none;position:absolute;top:0;right:0;bottom:0;left:0}@supports (color:color-mix(in lab,red,red)){.hp-error-screen{background:color-mix(in srgb,var(--hp-color-surface) 94%,transparent)}}.hp-error-screen{-webkit-backdrop-filter:blur(16px)saturate(140%);color:var(--hp-color-on-surface);text-align:center;container-type:size}.hp-error-screen[data-visible]{animation:.22s hp-error-in;display:flex}@keyframes hp-error-in{0%{opacity:0}}.hp-error-card{flex-direction:column;align-items:center;gap:10px;max-width:340px;display:flex}.hp-error-icon{border:1px solid var(--hp-color-on-surface);border-radius:9999px;place-items:center;width:48px;height:48px;display:grid}@supports (color:color-mix(in lab,red,red)){.hp-error-icon{border:1px solid color-mix(in srgb,var(--hp-color-on-surface) 18%,transparent)}}.hp-error-icon{background:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-error-icon{background:color-mix(in srgb,var(--hp-color-on-surface) 8%,transparent)}}.hp-error-icon{margin-bottom:2px;font-size:22px}.hp-error-message{margin:0;font-size:14px;font-weight:600;line-height:1.45}.hp-error-code{color:var(--hp-color-on-surface-muted);font-variant-numeric:tabular-nums;margin:-4px 0 0;font-size:12px}.hp-error-retry{border:1px solid var(--hp-chip-border);background:var(--hp-chip-bg);color:var(--hp-color-on-surface);font:inherit;cursor:pointer;border-radius:9999px;align-items:center;gap:6px;margin-top:6px;padding:7px 14px 7px 12px;font-size:13px;font-weight:600;transition:background-color .15s,border-color .15s;display:inline-flex}.hp-error-retry:hover{background:var(--hp-chip-bg-hover);border-color:var(--hp-chip-border-hover)}.hp-error-retry:focus-visible{outline:2px solid var(--hp-color-accent);outline-offset:2px}@container (max-height:240px){.hp-error-card{gap:6px}.hp-error-icon{width:36px;height:36px;margin-bottom:0;font-size:16px}.hp-error-message{font-size:13px}.hp-error-code{margin-top:-2px;font-size:11px}.hp-error-retry{margin-top:2px;padding:5px 12px 5px 10px;font-size:12px}}.hp-context-menu,.hp-stats,.hp-debug{border:1px solid var(--hp-panel-border);background:var(--hp-panel-bg);-webkit-backdrop-filter:blur(var(--hp-panel-blur)) saturate(160%);color:var(--hp-panel-text);text-shadow:var(--hp-panel-text-shadow,none);border-radius:10px;position:absolute;box-shadow:0 8px 28px #00000059}.hp-context-menu{z-index:40;min-width:200px;padding:4px;font-size:13px;display:none}.hp-context-menu[data-open]{animation:.12s hp-context-menu-in;display:block}@keyframes hp-context-menu-in{0%{opacity:0;transform:scale(.97)}}.hp-context-menu-item{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:space-between;align-items:center;gap:16px;padding:8px 10px;display:flex}.hp-context-menu-item[data-info]{cursor:default;font-weight:600}button.hp-context-menu-item:hover,button.hp-context-menu-item:focus-visible{background:var(--hp-panel-text)}@supports (color:color-mix(in lab,red,red)){button.hp-context-menu-item:hover,button.hp-context-menu-item:focus-visible{background:color-mix(in srgb,var(--hp-panel-text) 10%,transparent)}}button.hp-context-menu-item:hover,button.hp-context-menu-item:focus-visible{outline:none}.hp-context-menu-item+.hp-context-menu-item{margin-top:2px}.hp-context-menu-meta{color:var(--hp-panel-text-muted);font-variant-numeric:tabular-nums;font-weight:500}.hp-stats{z-index:28;width:min(360px,100% - 20px);max-height:calc(100% - 20px);padding:8px 12px 10px;font-size:11.5px;top:10px;left:10px;overflow:auto}.hp-stats-header{justify-content:space-between;align-items:center;margin-bottom:6px;font-size:12px;font-weight:700;display:flex}.hp-stats-close{color:inherit;cursor:pointer;background:0 0;border:0;border-radius:9999px;padding:4px;display:inline-flex}.hp-stats-close:hover{background:var(--hp-panel-text)}@supports (color:color-mix(in lab,red,red)){.hp-stats-close:hover{background:color-mix(in srgb,var(--hp-panel-text) 12%,transparent)}}.hp-stats-body{grid-template-columns:auto 1fr;gap:3px 12px;margin:0;display:grid}.hp-stats-body dt{color:var(--hp-panel-text-muted);white-space:nowrap}.hp-stats-body dd{text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:hidden}.hp-seek-fb{z-index:8;border:1px solid var(--hp-chip-border);background:var(--hp-chip-bg);-webkit-backdrop-filter:blur(var(--hp-chip-blur)) saturate(160%);box-shadow:var(--hp-chip-shadow);color:var(--hp-chip-text);pointer-events:none;opacity:0;border-radius:9999px;align-items:center;gap:10px;padding:12px 20px 12px 16px;transition:opacity .18s,translate .22s cubic-bezier(.2,.8,.2,1);display:flex;position:absolute;top:50%}.hp-seek-fb[data-side=forward]{right:7%;translate:14px -50%}.hp-seek-fb[data-side=back]{flex-direction:row-reverse;padding:12px 16px 12px 20px;left:7%;translate:-14px -50%}.hp-seek-fb[data-visible]{opacity:1;translate:0 -50%}.hp-seek-fb-chevrons{display:flex}.hp-seek-fb-chevrons svg{fill:currentColor;opacity:.25;width:16px;height:16px;margin:0 -3px;animation:.9s ease-in-out infinite hp-seek-fb-chevron}.hp-seek-fb[data-side=back] .hp-seek-fb-chevrons{transform:scaleX(-1)}.hp-seek-fb-chevrons svg:nth-child(2){animation-delay:.15s}.hp-seek-fb-chevrons svg:nth-child(3){animation-delay:.3s}@keyframes hp-seek-fb-chevron{0%,to{opacity:.25}40%{opacity:1}}.hp-seek-fb-value{white-space:nowrap;align-items:baseline;gap:3px;display:flex}.hp-seek-fb-num{font-variant-numeric:tabular-nums;font-size:20px;font-weight:700;line-height:1;display:inline-block}.hp-seek-fb-unit{opacity:.75;font-size:12px;font-weight:600}.hp-seek-fb-bump{animation:.26s cubic-bezier(.2,.8,.2,1) hp-seek-fb-bump}@keyframes hp-seek-fb-bump{0%{transform:scale(1.25)}to{transform:scale(1)}}.video-area[data-compact] .hp-seek-fb{padding:8px 12px}.video-area[data-compact] .hp-seek-fb[data-side=forward]{right:4%}.video-area[data-compact] .hp-seek-fb[data-side=back]{padding:8px 12px;left:4%}.video-area[data-compact] .hp-seek-fb-chevrons{display:none}.video-area[data-compact] .hp-seek-fb-num{font-size:16px}.hp-sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}@media(prefers-reduced-motion:reduce){.hp-seek-fb,.hp-seek-fb-chevrons svg,.hp-seek-fb-bump{transition:none;animation:none}.hp-seek-fb-chevrons svg{opacity:.8}}.hp-skip-btn{position:relative}.hp-skip-btn>.hp-icon{font-size:calc(var(--hp-ctrl-icon-size) * 1.45)}.hp-skip-num{padding-top:calc(var(--hp-ctrl-icon-size) * .14);font-size:calc(var(--hp-ctrl-icon-size) * .56);letter-spacing:-.02em;font-variant-numeric:tabular-nums;pointer-events:none;justify-content:center;align-items:center;font-weight:700;line-height:1;display:flex;position:absolute;top:0;right:0;bottom:0;left:0}.hp-skip-num[data-long]{font-size:calc(var(--hp-ctrl-icon-size) * .42)}.hp-skip-btn:disabled{opacity:.4;cursor:default}.hp-center-play>.hp-chip{z-index:7;position:relative}.video-area[data-center-play-shifted] .hp-center-play>.hp-chip{width:var(--hp-center-play-size);height:var(--hp-center-play-size);translate:var(--hp-center-play-shift-x,0px) var(--hp-center-play-shift)}.video-area[data-pause-ad-ready]>:is(.media-layer,.hp-chrome,.hp-center-play,.hp-caption-layer,.hp-error-screen,.hp-mini-progress){right:var(--hp-pause-ad-w,0px);transition:right .38s cubic-bezier(.2,.8,.2,1),opacity .2s}.video-area[data-pause-ad] .media-layer video{object-fit:cover}.hp-pause-ad{z-index:25;width:var(--hp-pause-ad-panel-w,332px);box-sizing:border-box;background:var(--hp-color-surface,#0a0a0a);color:var(--hp-color-on-surface,#fff);visibility:hidden;flex-direction:column;justify-content:center;gap:10px;padding:12px 16px;transition:transform .38s cubic-bezier(.2,.8,.2,1),visibility 0s linear .38s;display:flex;position:absolute;top:0;bottom:0;right:0;transform:translate(100%)}.hp-pause-ad[data-open]{visibility:visible;transition:transform .38s cubic-bezier(.2,.8,.2,1);transform:none}.hp-pause-ad-header{justify-content:space-between;align-items:center;gap:8px;display:flex}.hp-pause-ad-label{color:var(--hp-color-on-surface-muted,#ffffffb3);font-size:13px;font-weight:600}.hp-pause-ad-close{width:28px;height:28px;color:var(--hp-color-on-surface,#fff);cursor:pointer;background:0 0;border:0;border-radius:9999px;justify-content:center;align-items:center;padding:0;transition:background-color .15s;display:inline-flex}.hp-pause-ad-close:hover{background:var(--hp-chip-bg-hover)}.hp-pause-ad-body{border-radius:8px;justify-content:center;display:flex;overflow:hidden}.hp-pause-ad-resume{border:1px solid var(--hp-chip-border);background:var(--hp-chip-bg);color:var(--hp-color-on-surface,#fff);font:inherit;cursor:pointer;border-radius:9999px;align-self:stretch;padding:9px 14px;font-size:13px;font-weight:600;transition:background-color .15s,border-color .15s}.hp-pause-ad-resume:hover{background:var(--hp-chip-bg-hover);border-color:var(--hp-chip-border-hover)}.hp-pause-ad-close:focus-visible,.hp-pause-ad-resume:focus-visible{outline:2px solid var(--hp-color-accent);outline-offset:2px}@media(prefers-reduced-motion:reduce){.video-area[data-pause-ad-ready]>:is(.media-layer,.hp-chrome,.hp-center-play,.hp-caption-layer,.hp-error-screen,.hp-mini-progress),.hp-pause-ad,.hp-pause-ad[data-open]{transition:none}}.hp-seek-thumb{width:var(--hp-seek-thumb-size);height:var(--hp-seek-thumb-size);background:var(--hp-color-accent);will-change:translate,scale;pointer-events:none;z-index:2;border-radius:9999px;transition:scale .15s;position:absolute;left:0;scale:.5}.hp-seekbar:hover .hp-seek-thumb,.hp-seekbar:active .hp-seek-thumb,.hp-seekbar:focus-visible .hp-seek-thumb{scale:1}.hp-seekbar[data-no-duration] .hp-seek-thumb{display:none}.hp-seek-hover-dot{width:var(--hp-seek-track-h-hover);height:var(--hp-seek-track-h-hover);background:var(--hp-color-on-surface);opacity:0;pointer-events:none;z-index:1;border-radius:9999px;transition:opacity .12s;position:absolute;top:50%;left:0;box-shadow:0 0 0 1px #00000073}.hp-seek-hover-dot[data-visible]{opacity:.9}.hp-mini-progress{z-index:6;pointer-events:none;background:var(--hp-color-on-surface);height:1px;position:absolute;bottom:0;left:0;right:0}@supports (color:color-mix(in lab,red,red)){.hp-mini-progress{background:color-mix(in srgb,var(--hp-color-on-surface) 25%,transparent)}}.hp-mini-progress{opacity:0;transition:opacity .2s}.hp-mini-progress[data-visible]:not([data-disabled]){opacity:1}.hp-mini-progress-fill{transform-origin:0;will-change:transform;position:absolute;top:0;right:0;bottom:0;left:0;transform:scaleX(0)}.hp-mini-progress-buffered{background:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-mini-progress-buffered{background:color-mix(in srgb,var(--hp-color-on-surface) 40%,transparent)}}.hp-mini-progress-played{background:var(--hp-color-accent)}.hp-seek-time{border-radius:calc(var(--hp-radius) * .75);background:var(--hp-tooltip-bg);color:var(--hp-tooltip-text);-webkit-backdrop-filter:blur(12px)saturate(160%);font-variant-numeric:tabular-nums;white-space:nowrap;pointer-events:none;visibility:hidden;z-index:20;padding:3px 7px;font-size:12px;font-weight:500;position:absolute;bottom:calc(100% + 8px);left:0;box-shadow:0 4px 14px #00000059}.hp-seek-time[data-visible]{visibility:visible}.hp-sprite-tooltip{pointer-events:none;visibility:hidden;z-index:20;flex-direction:column;align-items:center;gap:4px;display:flex;position:absolute;bottom:calc(100% + 8px);left:0}.hp-sprite-tooltip[data-visible]{visibility:visible}.hp-sprite-image{border-radius:calc(var(--hp-radius) * .75);border:2px solid var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-sprite-image{border:2px solid color-mix(in srgb,var(--hp-color-on-surface) 85%,transparent)}}.hp-sprite-image{background-color:#000;background-repeat:no-repeat;box-shadow:0 4px 14px #00000059}.hp-sprite-time{background:var(--hp-tooltip-bg);color:var(--hp-tooltip-text);font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:4px;padding:2px 6px;font-size:12px}.hp-live-badge{height:var(--hp-ctrl-btn-size);color:var(--hp-color-on-surface);font:inherit;letter-spacing:.04em;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:9999px;align-items:center;gap:6px;padding:0 8px;font-size:12px;font-weight:600;display:inline-flex}.hp-live-badge:hover{background:var(--hp-chip-bg-hover)}.hp-live-badge:focus-visible{outline:2px solid var(--hp-color-accent);outline-offset:2px}.hp-live-dot{background:var(--hp-live-color,red);border-radius:50%;width:8px;height:8px;transition:background-color .16s}.hp-live-badge[data-behind]{color:var(--hp-color-on-surface-muted)}.hp-live-badge[data-behind] .hp-live-dot{background:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-live-badge[data-behind] .hp-live-dot{background:color-mix(in srgb,var(--hp-color-on-surface) 45%,transparent)}}.hp-chapters{pointer-events:none;inset-inline:0;align-items:center;gap:2px;display:flex;position:absolute;top:0;bottom:0}.hp-chapter{min-width:1px;height:var(--hp-seek-track-h);background:var(--hp-color-on-surface);border-radius:1px;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.hp-chapter{background:color-mix(in srgb,var(--hp-color-on-surface) 25%,transparent)}}.hp-chapter{transition:height .15s}.hp-seekbar:hover .hp-chapter{height:var(--hp-seek-track-h-hover)}.hp-seekbar .hp-chapter[data-hover]{height:calc(var(--hp-seek-track-h-hover) * 1.6)}.hp-chapter-fill{transform-origin:0;will-change:transform;position:absolute;top:0;right:0;bottom:0;left:0;transform:scaleX(0)}.hp-chapter-buffered{background:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-chapter-buffered{background:color-mix(in srgb,var(--hp-color-on-surface) 40%,transparent)}}.hp-chapter-played{background:var(--hp-color-accent)}.hp-chapter-tooltip{background:var(--hp-tooltip-bg);max-width:240px;color:var(--hp-tooltip-text);border-radius:calc(var(--hp-radius) * .75);-webkit-backdrop-filter:blur(12px)saturate(160%);text-align:center;pointer-events:none;white-space:nowrap;visibility:hidden;z-index:40;flex-direction:column;align-items:center;gap:2px;padding:4px 8px;font-size:12px;line-height:1.3;display:flex;position:absolute;bottom:calc(100% + 6px);left:0;box-shadow:0 4px 14px #00000059}.hp-chapter-tooltip[data-visible]{visibility:visible}.hp-chapter-tooltip-title{text-overflow:ellipsis;max-width:100%;font-weight:600;overflow:hidden}.hp-chapter-tooltip-time{opacity:.75;font-variant-numeric:tabular-nums}:host([data-sticky]){z-index:2147483000;border-radius:var(--hp-radius);box-shadow:0 8px 28px #00000073;aspect-ratio:16/9!important;width:min(360px,92vw)!important;position:fixed!important}:host([data-sticky][data-sticky-corner=br]){inset:auto 16px 16px auto}:host([data-sticky][data-sticky-corner=bl]){inset:auto auto 16px 16px}:host([data-sticky][data-sticky-corner=tr]){inset:16px 16px auto auto}:host([data-sticky][data-sticky-corner=tl]){inset:16px auto auto 16px}.hp-caption-layer{z-index:5;pointer-events:none;position:absolute;top:0;right:0;bottom:0;left:0}.hp-caption-bubble{background:var(--hp-caption-bg);width:max-content;max-width:86%;color:var(--hp-caption-text);border-radius:var(--hp-caption-radius);font-size:calc(var(--hp-caption-font-size) * var(--hp-caption-size-multiplier,1));text-align:center;white-space:pre-line;cursor:grab;pointer-events:auto;touch-action:none;-webkit-user-select:none;user-select:none;padding:.3em .6em;line-height:1.4;transition:transform .24s cubic-bezier(.25,.8,.25,1);display:none;position:absolute;bottom:0;left:50%;transform:translate(-50%)}.hp-caption-bubble.hp-caption-visible{display:inline-block}.hp-caption-bubble.hp-caption-dragging,.hp-caption-bubble.hp-caption-no-transition{transition:none}.hp-caption-bubble.hp-caption-dragging{cursor:grabbing}[part=ad-layer][data-nonlinear]{top:auto;bottom:var(--hp-nonlinear-ad-offset,72px);height:var(--hp-nonlinear-ad-height,33%);pointer-events:none}[part=ad-layer][data-nonlinear] *{pointer-events:none}[part=ad-layer][data-nonlinear] :is(iframe,img,a,button){pointer-events:auto}.hp-debug{--hp-panel-text:#f1f1f4;--hp-panel-text-muted:#f1f1f49e;--hp-panel-border:#ffffff1f;text-shadow:none;z-index:30;background:#0e0e12f2;flex-direction:column;min-width:0;font-size:12px;line-height:1.45;display:flex;top:8px;right:8px;bottom:8px;left:8px;overflow:hidden}.hp-debug:focus{outline:none}.hp-debug-header{border-bottom:1px solid var(--hp-panel-border);flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;padding:8px 8px 8px 12px;display:flex}.hp-debug-title{white-space:nowrap;align-items:center;gap:8px;min-width:0;font-size:13px;font-weight:700;display:flex}.hp-debug-count{font-variant-numeric:tabular-nums;background:#f8717138;border-radius:9999px;padding:1px 7px;font-size:11px}.hp-debug-count:empty{display:none}.hp-debug-actions{flex-shrink:0;align-items:center;gap:4px;display:flex}.hp-debug-btn{border:1px solid var(--hp-panel-border);color:inherit;font:inherit;cursor:pointer;background:0 0;border-radius:9999px;padding:4px 10px;font-size:11.5px}.hp-debug-btn:hover:not(:disabled){background:var(--hp-panel-text)}@supports (color:color-mix(in lab,red,red)){.hp-debug-btn:hover:not(:disabled){background:color-mix(in srgb,var(--hp-panel-text) 12%,transparent)}}.hp-debug-btn:disabled{opacity:.45;cursor:default}.hp-debug-list{overscroll-behavior:contain;flex:1;min-height:0;margin:0;padding:6px 12px 10px;list-style:none;overflow:hidden auto}.hp-debug-row{border-left:2px solid var(--hp-panel-text);padding:8px 0 8px 10px}@supports (color:color-mix(in lab,red,red)){.hp-debug-row{border-left:2px solid color-mix(in srgb,var(--hp-panel-text) 25%,transparent)}}.hp-debug-row{min-width:0}.hp-debug-row+.hp-debug-row{margin-top:6px}.hp-debug-row[data-fatal]{border-left-color:#f87171}.hp-debug-row-head{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:2px;display:flex}.hp-debug-time{color:var(--hp-panel-text-muted);font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.hp-debug-source,.hp-debug-fatal{background:var(--hp-panel-text);border-radius:9999px;padding:1px 7px;font-size:10.5px;font-weight:600}@supports (color:color-mix(in lab,red,red)){.hp-debug-source,.hp-debug-fatal{background:color-mix(in srgb,var(--hp-panel-text) 12%,transparent)}}.hp-debug-source[data-source=ads]{background:#f5c4513d}.hp-debug-source[data-source=stream],.hp-debug-source[data-source=media]{background:#60a5fa3d}.hp-debug-fatal{background:#f8717147}.hp-debug-message{overflow-wrap:anywhere;font-weight:600}.hp-debug-repeat{color:var(--hp-panel-text-muted);font-weight:500}.hp-debug-details{grid-template-columns:max-content minmax(0,1fr);gap:1px 10px;margin:4px 0 0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;display:grid}.hp-debug-details dt{color:var(--hp-panel-text-muted)}.hp-debug-details dd{overflow-wrap:anywhere;min-width:0;margin:0}.hp-debug-empty{color:var(--hp-panel-text-muted);margin:auto;padding:16px}.hp-debug-empty[hidden]{display:none}.hp-ad-return{z-index:25;color:#fff;cursor:pointer;-webkit-tap-highlight-color:transparent;background:#0e0e12d1;border:1px solid #ffffff40;border-radius:999px;padding:10px 16px;font:600 14px/1.2 system-ui,-apple-system,sans-serif;animation:.2s ease-out hp-ad-return-in;position:absolute;bottom:64px;right:12px}@keyframes hp-ad-return-in{0%{opacity:0;transform:translateY(6px)}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}';
5
+ function _() {
6
6
  if (typeof navigator > "u") return !1;
7
- const a = navigator.userAgent, t = /iP(hone|od|ad)/.test(a) || navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1, e = /^((?!chrome|chromium|android|crios|fxios|edg|opr).)*safari/i.test(a);
7
+ const o = navigator.userAgent, t = /iP(hone|od|ad)/.test(o) || navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1, e = /^((?!chrome|chromium|android|crios|fxios|edg|opr).)*safari/i.test(o);
8
8
  return t || e;
9
9
  }
10
- function H() {
11
- const a = window;
12
- return typeof a.MediaSource < "u" || typeof a.ManagedMediaSource < "u";
10
+ function V() {
11
+ const o = window;
12
+ return typeof o.MediaSource < "u" || typeof o.ManagedMediaSource < "u";
13
13
  }
14
- function ge(a, t) {
14
+ function ke(o, t) {
15
15
  var i;
16
16
  const e = (i = t == null ? void 0 : t.split(";")[0]) == null ? void 0 : i.trim().toLowerCase();
17
- return e === "application/vnd.apple.mpegurl" || e === "application/x-mpegurl" || /\.m3u8(?:$|[?#])/i.test(a) ? "hls" : e === "video/mp4" || /\.mp4(?:$|[?#])/i.test(a) ? "mp4" : "unknown";
17
+ return e === "application/vnd.apple.mpegurl" || e === "application/x-mpegurl" || /\.m3u8(?:$|[?#])/i.test(o) ? "hls" : e === "video/mp4" || /\.mp4(?:$|[?#])/i.test(o) ? "mp4" : "unknown";
18
18
  }
19
- class ve {
19
+ class xe {
20
20
  constructor(t, e) {
21
21
  s(this, "hls", null);
22
22
  s(this, "video");
@@ -37,18 +37,18 @@ class ve {
37
37
  }
38
38
  async load(t, e) {
39
39
  this.last = { src: t, type: e }, this.destroy(), this.video.pause();
40
- const i = ge(t, e);
40
+ const i = ke(t, e);
41
41
  if (this.callbacks.onLevelsChanged([], -1), this.callbacks.onAudioTracksChanged([], -1), this.streamTextTracks.clear(), this.callbacks.onTextTracksFound([]), i !== "hls") {
42
42
  this.engineInfo = { engine: "native" }, this.video.src = t;
43
43
  return;
44
44
  }
45
- const r = this.hlsOptions.engine ?? "auto", o = this.video.canPlayType("application/vnd.apple.mpegurl") !== "";
46
- if (r === "native" && o) {
45
+ const r = this.hlsOptions.engine ?? "auto", n = this.video.canPlayType("application/vnd.apple.mpegurl") !== "";
46
+ if (r === "native" && n) {
47
47
  this.loadNativeHls(t, "option");
48
48
  return;
49
49
  }
50
- if (r !== "hls.js" && o && (D() || !H())) {
51
- this.loadNativeHls(t, D() ? "apple-native" : "no-mse");
50
+ if (r !== "hls.js" && n && (_() || !V())) {
51
+ this.loadNativeHls(t, _() ? "apple-native" : "no-mse");
52
52
  return;
53
53
  }
54
54
  await this.attachHlsJs(t);
@@ -73,11 +73,11 @@ class ve {
73
73
  * İlk metadata'dan önce kod 4 gelirse ve MSE varsa hls.js'e geç.
74
74
  */
75
75
  probeNativeHls(t) {
76
- if (!H() || this.engineInfo.reason === "hlsjs-failed" || this.engineInfo.reason === "option") return;
76
+ if (!V() || this.engineInfo.reason === "hlsjs-failed" || this.engineInfo.reason === "option") return;
77
77
  const e = () => r(), i = () => {
78
- var n, l;
79
- const o = ((n = this.video.error) == null ? void 0 : n.code) === 4;
80
- r(), o && ((l = this.nativeAudioCleanup) == null || l.call(this), this.attachHlsJs(t));
78
+ var a, l;
79
+ const n = ((a = this.video.error) == null ? void 0 : a.code) === 4;
80
+ r(), n && ((l = this.nativeAudioCleanup) == null || l.call(this), this.attachHlsJs(t));
81
81
  }, r = () => {
82
82
  this.video.removeEventListener("loadedmetadata", e), this.video.removeEventListener("error", i), this.nativeHlsProbe = null;
83
83
  };
@@ -88,7 +88,7 @@ class ve {
88
88
  const t = this.video.audioTracks;
89
89
  if (!t) return;
90
90
  const e = () => {
91
- const i = Array.from(t, (r, o) => ({ index: o, label: r.label || r.language || `${o + 1}`, lang: r.language }));
91
+ const i = Array.from(t, (r, n) => ({ index: n, label: r.label || r.language || `${n + 1}`, lang: r.language }));
92
92
  this.callbacks.onAudioTracksChanged(i, Array.from(t).findIndex((r) => r.enabled));
93
93
  };
94
94
  for (const i of ["addtrack", "removetrack", "change"]) t.addEventListener(i, e);
@@ -107,25 +107,37 @@ class ve {
107
107
  }
108
108
  const i = new e(this.buildHlsConfig());
109
109
  this.hls = i, this.engineInfo = { engine: "hls.js" };
110
- let r = !1, o = !1;
110
+ let r = !1, n = !1;
111
111
  i.on(e.Events.ERROR, (m, c) => {
112
+ var p, u, b, g, v, y;
113
+ if (this.hls === i) {
114
+ const f = c;
115
+ (y = (v = this.callbacks).onStreamError) == null || y.call(v, {
116
+ type: String(c.type),
117
+ details: String(c.details),
118
+ fatal: !!c.fatal,
119
+ url: f.url ?? ((p = f.frag) == null ? void 0 : p.url) ?? ((u = f.context) == null ? void 0 : u.url),
120
+ httpStatus: (b = f.response) == null ? void 0 : b.code,
121
+ reason: f.reason ?? ((g = f.error) == null ? void 0 : g.message)
122
+ });
123
+ }
112
124
  if (!c.fatal || this.hls !== i) return;
113
125
  const h = [e.ErrorDetails.MANIFEST_LOAD_ERROR, e.ErrorDetails.MANIFEST_LOAD_TIMEOUT].includes(c.details);
114
126
  if (!r && h && this.video.canPlayType("application/vnd.apple.mpegurl") !== "") {
115
127
  i.destroy(), this.hls = null, this.loadNativeHls(t, "hlsjs-failed");
116
128
  return;
117
129
  }
118
- if (c.type === e.ErrorTypes.MEDIA_ERROR && !o) {
119
- o = !0, i.recoverMediaError();
130
+ if (c.type === e.ErrorTypes.MEDIA_ERROR && !n) {
131
+ n = !0, i.recoverMediaError();
120
132
  return;
121
133
  }
122
134
  i.stopLoad(), this.callbacks.onFatalError(c.type === e.ErrorTypes.NETWORK_ERROR ? "network" : "media");
123
135
  });
124
- const n = () => i.levels.map((m, c) => ({ index: c, height: m.height, bitrate: m.bitrate }));
136
+ const a = () => i.levels.map((m, c) => ({ index: c, height: m.height, bitrate: m.bitrate }));
125
137
  i.on(e.Events.MANIFEST_PARSED, () => {
126
- r = !0, this.callbacks.onLevelsChanged(n(), i.currentLevel);
138
+ r = !0, this.callbacks.onLevelsChanged(a(), i.currentLevel);
127
139
  }), i.on(e.Events.LEVEL_SWITCHED, (m, c) => {
128
- this.callbacks.onLevelsChanged(n(), i.autoLevelEnabled ? -1 : c.level);
140
+ this.callbacks.onLevelsChanged(a(), i.autoLevelEnabled ? -1 : c.level);
129
141
  });
130
142
  const l = () => i.audioTracks.map((m, c) => ({ index: c, label: m.name || m.lang || `${c + 1}`, lang: m.lang ?? "" }));
131
143
  i.on(e.Events.AUDIO_TRACKS_UPDATED, () => this.callbacks.onAudioTracksChanged(l(), i.audioTrack)), i.on(e.Events.AUDIO_TRACK_SWITCHED, (m, c) => this.callbacks.onAudioTracksChanged(l(), c.id)), i.on(e.Events.NON_NATIVE_TEXT_TRACKS_FOUND, (m, c) => {
@@ -144,9 +156,9 @@ class ve {
144
156
  const t = this.hlsOptions.config ?? {}, e = { enableWorker: !0, renderTextTracksNatively: !1, liveDurationInfinity: !0, ...t };
145
157
  if (this.hlsOptions.withCredentials) {
146
158
  const { xhrSetup: i, fetchSetup: r } = t;
147
- e.xhrSetup = (o, n, l) => (o.withCredentials = !0, i == null ? void 0 : i(o, n, l)), e.fetchSetup = (o, n) => {
148
- const l = { ...n, credentials: "include" };
149
- return r ? r(o, l) : new Request(o.url, l);
159
+ e.xhrSetup = (n, a, l) => (n.withCredentials = !0, i == null ? void 0 : i(n, a, l)), e.fetchSetup = (n, a) => {
160
+ const l = { ...a, credentials: "include" };
161
+ return r ? r(n, l) : new Request(n.url, l);
150
162
  };
151
163
  }
152
164
  return e;
@@ -183,13 +195,13 @@ class ve {
183
195
  (t = this.nativeHlsProbe) == null || t.call(this), (e = this.nativeAudioCleanup) == null || e.call(this), this.hls && (this.hls.destroy(), this.hls = null);
184
196
  }
185
197
  }
186
- function x(a) {
187
- if (!Number.isFinite(a) || a < 0) return "0:00";
188
- const t = Math.floor(a), e = Math.floor(t / 3600), i = Math.floor(t % 3600 / 60), r = t % 60, o = e > 0 ? String(i).padStart(2, "0") : String(i), n = String(r).padStart(2, "0");
189
- return e > 0 ? `${e}:${o}:${n}` : `${o}:${n}`;
198
+ function x(o) {
199
+ if (!Number.isFinite(o) || o < 0) return "0:00";
200
+ const t = Math.floor(o), e = Math.floor(t / 3600), i = Math.floor(t % 3600 / 60), r = t % 60, n = e > 0 ? String(i).padStart(2, "0") : String(i), a = String(r).padStart(2, "0");
201
+ return e > 0 ? `${e}:${n}:${a}` : `${n}:${a}`;
190
202
  }
191
- const fe = 10, ye = 1;
192
- class ke {
203
+ const we = 10, Ee = 1;
204
+ class Ce {
193
205
  constructor(t, e) {
194
206
  s(this, "el");
195
207
  s(this, "trackEl");
@@ -219,7 +231,7 @@ class ke {
219
231
  }
220
232
  const r = e.start + i * (e.end - e.start);
221
233
  this.hoverTimeEl.textContent = e.live ? `-${x(e.end - r)}` : x(r), this.hoverTimeEl.setAttribute("data-visible", "");
222
- const o = this.el.getBoundingClientRect(), n = this.hoverTimeEl.offsetWidth, l = Math.min(Math.max(t.clientX - o.left - n / 2, 0), Math.max(o.width - n, 0));
234
+ const n = this.el.getBoundingClientRect(), a = this.hoverTimeEl.offsetWidth, l = Math.min(Math.max(t.clientX - n.left - a / 2, 0), Math.max(n.width - a, 0));
223
235
  this.hoverTimeEl.style.transform = `translateX(${l}px)`;
224
236
  });
225
237
  s(this, "onHoverLeave", () => {
@@ -261,17 +273,17 @@ class ke {
261
273
  }
262
274
  const e = t.end - t.start, i = (l) => Math.min(1, Math.max(0, (l - t.start) / e)), r = i(this.video.currentTime);
263
275
  this.thumbEl.style.translate = `calc(${this.xAtRatio(r)}px - 50%) 0`;
264
- let o = 0;
276
+ let n = 0;
265
277
  for (let l = 0; l < this.video.buffered.length; l++)
266
- this.video.buffered.start(l) <= this.video.currentTime && (o = Math.max(o, this.video.buffered.end(l)));
267
- const n = i(o);
278
+ this.video.buffered.start(l) <= this.video.currentTime && (n = Math.max(n, this.video.buffered.end(l)));
279
+ const a = i(n);
268
280
  if (this.chapters.length)
269
281
  for (const l of this.chapters) {
270
282
  const d = l.end - l.start, m = (c) => d > 0 ? Math.min(1, Math.max(0, (c - l.start) / d)) : 0;
271
- l.playedEl.style.transform = `scaleX(${m(r)})`, l.bufferedEl.style.transform = `scaleX(${m(n)})`;
283
+ l.playedEl.style.transform = `scaleX(${m(r)})`, l.bufferedEl.style.transform = `scaleX(${m(a)})`;
272
284
  }
273
285
  else
274
- this.playedEl.style.transform = `scaleX(${r})`, this.bufferedEl.style.transform = `scaleX(${n})`;
286
+ this.playedEl.style.transform = `scaleX(${r})`, this.bufferedEl.style.transform = `scaleX(${a})`;
275
287
  this.el.setAttribute("aria-valuemin", String(Math.floor(t.start))), this.el.setAttribute("aria-valuemax", String(Math.floor(t.end))), this.el.setAttribute("aria-valuenow", String(Math.floor(this.video.currentTime)));
276
288
  });
277
289
  this.video = t, this.labels = e, this.el = document.createElement("div"), this.el.setAttribute("part", "seek-bar"), this.el.className = "hp-seekbar hp:relative hp:h-[var(--hp-seek-hit-h)] hp:flex hp:items-center hp:cursor-pointer hp:group hp:touch-none", this.el.setAttribute("role", "slider"), this.el.setAttribute("tabindex", "0"), this.el.setAttribute("aria-label", e.seekBar), this.el.setAttribute("aria-valuemin", "0");
@@ -291,7 +303,7 @@ class ke {
291
303
  const { seekable: e } = this.video;
292
304
  if (!e.length) return null;
293
305
  const i = e.start(0), r = e.end(e.length - 1);
294
- return r - i >= fe ? { start: i, end: r, live: !0 } : null;
306
+ return r - i >= we ? { start: i, end: r, live: !0 } : null;
295
307
  }
296
308
  /** Kendi zamanını gösteren plugin'ler (sprite/segments) varsayılan hover zamanını gizler — keyed set. */
297
309
  suppressHoverTime(t, e) {
@@ -305,10 +317,10 @@ class ke {
305
317
  const e = this.el.getBoundingClientRect(), i = t - e.left;
306
318
  if (!this.chapters.length) return Math.min(1, Math.max(0, i / e.width));
307
319
  for (let r = 0; r < this.chapters.length; r++) {
308
- const o = this.chapters[r], n = this.chapters[r + 1], l = n ? n.left : 1 / 0;
309
- if (i < l || !n) {
310
- const d = o.width > 0 ? Math.min(1, Math.max(0, (i - o.left) / o.width)) : 0;
311
- return o.start + d * (o.end - o.start);
320
+ const n = this.chapters[r], a = this.chapters[r + 1], l = a ? a.left : 1 / 0;
321
+ if (i < l || !a) {
322
+ const d = n.width > 0 ? Math.min(1, Math.max(0, (i - n.left) / n.width)) : 0;
323
+ return n.start + d * (n.end - n.start);
312
324
  }
313
325
  }
314
326
  return 1;
@@ -316,7 +328,7 @@ class ke {
316
328
  /** 0–1 zaman oranının seek bar üzerindeki px konumu (thumb için). */
317
329
  xAtRatio(t) {
318
330
  if (!this.chapters.length) return t * this.trackWidth;
319
- const e = this.chapters.find((o) => t < o.end) ?? this.chapters[this.chapters.length - 1], i = e.end - e.start, r = i > 0 ? Math.min(1, Math.max(0, (t - e.start) / i)) : 0;
331
+ const e = this.chapters.find((n) => t < n.end) ?? this.chapters[this.chapters.length - 1], i = e.end - e.start, r = i > 0 ? Math.min(1, Math.max(0, (t - e.start) / i)) : 0;
320
332
  return e.left + r * e.width;
321
333
  }
322
334
  /** Track'i sıralı, 0→1'i kesintisiz kapsayan oran aralıklarına göre ayrı parçalara böler. */
@@ -326,10 +338,10 @@ class ke {
326
338
  return e.className = "hp-chapters", this.chapters = t.map((i) => {
327
339
  const r = document.createElement("div");
328
340
  r.className = "hp-chapter", r.setAttribute("part", "segment-band"), r.style.flex = `${Math.max(i.end - i.start, 0)} 1 0px`;
329
- const o = document.createElement("div");
330
- o.className = "hp-chapter-fill hp-chapter-buffered";
331
341
  const n = document.createElement("div");
332
- return n.className = "hp-chapter-fill hp-chapter-played", i.color && (n.style.background = i.color), r.append(o, n), e.appendChild(r), { ...i, el: r, bufferedEl: o, playedEl: n, left: 0, width: 0 };
342
+ n.className = "hp-chapter-fill hp-chapter-buffered";
343
+ const a = document.createElement("div");
344
+ return a.className = "hp-chapter-fill hp-chapter-played", i.color && (a.style.background = i.color), r.append(n, a), e.appendChild(r), { ...i, el: r, bufferedEl: n, playedEl: a, left: 0, width: 0 };
333
345
  }), this.trackEl.style.display = "none", this.trackEl.after(e), this.chaptersEl = e, this.measureChapters(), this.render(), this.chapters.map((i) => i.el);
334
346
  }
335
347
  clearChapters() {
@@ -348,7 +360,7 @@ class ke {
348
360
  const e = this.timeline();
349
361
  if (!e) return;
350
362
  const i = e.start + t * (e.end - e.start);
351
- this.video.currentTime = e.live ? Math.min(i, e.end - ye) : i, this.render();
363
+ this.video.currentTime = e.live ? Math.min(i, e.end - Ee) : i, this.render();
352
364
  }
353
365
  /** 0–1 arası oranda, seek bar üzerine ince bir işaret çizgisi ekler (ör. loop A/B noktaları). */
354
366
  addMarker(t, e = "") {
@@ -366,15 +378,15 @@ class ke {
366
378
  this.rafId !== null && cancelAnimationFrame(this.rafId), this.resizeObserver.disconnect(), this.el.removeEventListener("pointermove", this.onHoverMove), this.el.removeEventListener("pointerleave", this.onHoverLeave), this.video.removeEventListener("play", this.startLoop), this.video.removeEventListener("pause", this.stopLoop), this.video.removeEventListener("ended", this.stopLoop), this.video.removeEventListener("timeupdate", this.render), this.video.removeEventListener("progress", this.render), this.video.removeEventListener("loadedmetadata", this.render), this.clearMarkers(), (t = this.chaptersEl) == null || t.remove();
367
379
  }
368
380
  }
369
- function k(a, t = "") {
381
+ function w(o, t = "") {
370
382
  const e = document.createElement("i");
371
- return e.className = `hp-icon hp-icon-${a}${t ? ` ${t}` : ""}`, e.setAttribute("aria-hidden", "true"), e;
383
+ return e.className = `hp-icon hp-icon-${o}${t ? ` ${t}` : ""}`, e.setAttribute("aria-hidden", "true"), e;
372
384
  }
373
- function C(a, t) {
374
- a.className = a.className.replace(/hp-icon-[\w-]+/, `hp-icon-${t}`);
385
+ function A(o, t) {
386
+ o.className = o.className.replace(/hp-icon-[\w-]+/, `hp-icon-${t}`);
375
387
  }
376
- const A = 0.05, we = 150;
377
- class xe {
388
+ const L = 0.05, Te = 150;
389
+ class Ae {
378
390
  constructor(t, e, i) {
379
391
  s(this, "el");
380
392
  /** Dokunmatikte ses butonu gizli; sessiz oynarken görünen "Sesi aç" rozeti (chrome dışında monte edilir, otomatik gizlenmez). */
@@ -395,15 +407,15 @@ class xe {
395
407
  s(this, "scheduleHide", () => {
396
408
  this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = setTimeout(() => {
397
409
  this.hideTimer = null, this.slider.style.opacity = "0", this.slider.style.pointerEvents = "none";
398
- }, we);
410
+ }, Te);
399
411
  });
400
412
  s(this, "onWheel", (t) => {
401
413
  if (t.preventDefault(), this.adHooks.isAdActive()) {
402
414
  const r = this.adHooks.getVolume();
403
- this.adHooks.setVolume(Math.min(1, Math.max(0, r + (t.deltaY < 0 ? A : -A)))), this.render();
415
+ this.adHooks.setVolume(Math.min(1, Math.max(0, r + (t.deltaY < 0 ? L : -L)))), this.render();
404
416
  return;
405
417
  }
406
- const e = this.video.muted ? 0 : this.video.volume, i = Math.min(1, Math.max(0, e + (t.deltaY < 0 ? A : -A)));
418
+ const e = this.video.muted ? 0 : this.video.volume, i = Math.min(1, Math.max(0, e + (t.deltaY < 0 ? L : -L)));
407
419
  this.video.volume = i, this.video.muted = i === 0;
408
420
  });
409
421
  s(this, "onToggleMute", () => {
@@ -441,11 +453,11 @@ class xe {
441
453
  const e = t === 0 ? this.labels.unmute : this.labels.mute;
442
454
  this.button.setAttribute("aria-label", e);
443
455
  const i = this.adHooks.isAdActive() || !this.video.paused;
444
- this.unmuteBadge.toggleAttribute("data-visible", t === 0 && i), this.unmuteText.textContent = this.labels.unmute, t === 0 ? C(this.iconEl, "volume-muted") : t < 0.5 ? C(this.iconEl, "volume-low") : C(this.iconEl, "volume-high");
456
+ this.unmuteBadge.toggleAttribute("data-visible", t === 0 && i), this.unmuteText.textContent = this.labels.unmute, t === 0 ? A(this.iconEl, "volume-muted") : t < 0.5 ? A(this.iconEl, "volume-low") : A(this.iconEl, "volume-high");
445
457
  });
446
- this.video = t, this.labels = e, this.adHooks = i, this.el = document.createElement("div"), this.el.className = "hp-volume hp:relative hp:flex hp:items-center", this.unmuteBadge = document.createElement("button"), this.unmuteBadge.type = "button", this.unmuteBadge.className = "hp-unmute-badge", this.unmuteBadge.setAttribute("part", "unmute-badge"), this.unmuteBadge.appendChild(k("volume-muted", "hp:text-base")), this.unmuteText = document.createElement("span"), this.unmuteText.textContent = e.unmute, this.unmuteBadge.appendChild(this.unmuteText), this.unmuteBadge.addEventListener("pointerdown", (o) => o.stopPropagation()), this.unmuteBadge.addEventListener("click", (o) => {
447
- o.stopPropagation(), this.unmute();
448
- }), this.button = document.createElement("button"), this.button.type = "button", this.button.setAttribute("part", "volume-button"), this.button.className = "hp-chip hp:flex hp:items-center hp:justify-center hp:w-[var(--hp-ctrl-btn-size)] hp:h-[var(--hp-ctrl-btn-size)] hp:cursor-pointer", this.button.setAttribute("aria-label", e.mute), this.button.dataset.shortcut = "M", this.iconEl = k("volume-high", "hp:text-[length:var(--hp-ctrl-icon-size)]"), this.button.appendChild(this.iconEl), this.el.appendChild(this.button), this.slider = document.createElement("div"), this.slider.setAttribute("part", "volume-slider"), this.slider.className = "hp-chip hp:absolute hp:bottom-full hp:left-1/2 hp-center-x hp:mb-2 hp:w-7 hp:h-20 hp:rounded-full hp:cursor-pointer hp:flex hp:items-end hp:justify-center hp:p-1.5 hp:pointer-events-none hp:transition-opacity hp:duration-150 hp:will-change-[opacity]", this.slider.style.opacity = "0", this.slider.style.borderRadius = "9999px", this.slider.setAttribute("role", "slider"), this.slider.setAttribute("tabindex", "0"), this.slider.setAttribute("aria-label", e.volume), this.slider.setAttribute("aria-orientation", "vertical"), this.slider.setAttribute("aria-valuemin", "0"), this.slider.setAttribute("aria-valuemax", "100");
458
+ this.video = t, this.labels = e, this.adHooks = i, this.el = document.createElement("div"), this.el.className = "hp-volume hp:relative hp:flex hp:items-center", this.unmuteBadge = document.createElement("button"), this.unmuteBadge.type = "button", this.unmuteBadge.className = "hp-unmute-badge", this.unmuteBadge.setAttribute("part", "unmute-badge"), this.unmuteBadge.appendChild(w("volume-muted", "hp:text-base")), this.unmuteText = document.createElement("span"), this.unmuteText.textContent = e.unmute, this.unmuteBadge.appendChild(this.unmuteText), this.unmuteBadge.addEventListener("pointerdown", (n) => n.stopPropagation()), this.unmuteBadge.addEventListener("click", (n) => {
459
+ n.stopPropagation(), this.unmute();
460
+ }), this.button = document.createElement("button"), this.button.type = "button", this.button.setAttribute("part", "volume-button"), this.button.className = "hp-chip hp:flex hp:items-center hp:justify-center hp:w-[var(--hp-ctrl-btn-size)] hp:h-[var(--hp-ctrl-btn-size)] hp:cursor-pointer", this.button.setAttribute("aria-label", e.mute), this.button.dataset.shortcut = "M", this.iconEl = w("volume-high", "hp:text-[length:var(--hp-ctrl-icon-size)]"), this.button.appendChild(this.iconEl), this.el.appendChild(this.button), this.slider = document.createElement("div"), this.slider.setAttribute("part", "volume-slider"), this.slider.className = "hp-chip hp:absolute hp:bottom-full hp:left-1/2 hp-center-x hp:mb-2 hp:w-7 hp:h-20 hp:rounded-full hp:cursor-pointer hp:flex hp:items-end hp:justify-center hp:p-1.5 hp:pointer-events-none hp:transition-opacity hp:duration-150 hp:will-change-[opacity]", this.slider.style.opacity = "0", this.slider.style.borderRadius = "9999px", this.slider.setAttribute("role", "slider"), this.slider.setAttribute("tabindex", "0"), this.slider.setAttribute("aria-label", e.volume), this.slider.setAttribute("aria-orientation", "vertical"), this.slider.setAttribute("aria-valuemin", "0"), this.slider.setAttribute("aria-valuemax", "100");
449
461
  const r = document.createElement("div");
450
462
  r.className = "hp:relative hp:w-1.5 hp:h-full hp:rounded-full hp:bg-on-surface/25 hp:overflow-hidden", this.slider.appendChild(r), this.sliderFill = document.createElement("div"), this.sliderFill.className = "hp:absolute hp:inset-x-0 hp:bottom-0 hp:bg-accent", r.appendChild(this.sliderFill), this.el.appendChild(this.slider), this.button.addEventListener("click", this.onToggleMute), this.slider.addEventListener("pointerdown", this.onSliderPointerDown), this.slider.addEventListener("keydown", this.onSliderKeyDown), this.el.addEventListener("mouseenter", this.openNow), this.el.addEventListener("mouseleave", this.scheduleHide), this.el.addEventListener("focusin", this.openNow), this.el.addEventListener("focusout", this.scheduleHide), this.el.addEventListener("wheel", this.onWheel, { passive: !1 }), t.addEventListener("volumechange", this.render), t.addEventListener("play", this.render), t.addEventListener("pause", this.render), this.render();
451
463
  }
@@ -473,18 +485,12 @@ class xe {
473
485
  refreshForAdMode() {
474
486
  this.render();
475
487
  }
476
- setIconColor(t) {
477
- this.iconEl.style.color = t;
478
- }
479
- setSliderFillColor(t) {
480
- this.sliderFill.style.background = t;
481
- }
482
488
  destroy() {
483
489
  this.hideTimer && clearTimeout(this.hideTimer), this.el.removeEventListener("mouseenter", this.openNow), this.el.removeEventListener("mouseleave", this.scheduleHide), this.el.removeEventListener("focusin", this.openNow), this.el.removeEventListener("focusout", this.scheduleHide), this.el.removeEventListener("wheel", this.onWheel), this.video.removeEventListener("volumechange", this.render), this.video.removeEventListener("play", this.render), this.video.removeEventListener("pause", this.render), this.unmuteBadge.remove();
484
490
  }
485
491
  }
486
- const Ee = 8, S = 8, Ce = 100, V = 256;
487
- class Te {
492
+ const Se = 8, P = 8, Le = 100, G = 256;
493
+ class Pe {
488
494
  constructor(t, e, i) {
489
495
  s(this, "el");
490
496
  s(this, "button");
@@ -512,19 +518,19 @@ class Te {
512
518
  if (!this.open) return;
513
519
  const t = this.el.closest(".video-area");
514
520
  if (!t) return;
515
- const e = t.getBoundingClientRect(), i = this.button.getBoundingClientRect(), r = this.el.getBoundingClientRect(), o = !!this.el.closest(".hp-top-bar");
516
- this.panel.toggleAttribute("data-drop", o), Object.assign(this.panel.style, { top: "", bottom: "", marginTop: "", marginBottom: "" });
517
- const n = this.panel.scrollHeight, l = (o ? e.bottom - i.bottom : i.top - e.top) - Ee - S;
518
- if (n <= l || l >= Ce) {
519
- this.panel.style.maxHeight = `${Math.min(V, l)}px`;
521
+ const e = t.getBoundingClientRect(), i = this.button.getBoundingClientRect(), r = this.el.getBoundingClientRect(), n = !!this.el.closest(".hp-top-bar");
522
+ this.panel.toggleAttribute("data-drop", n), Object.assign(this.panel.style, { top: "", bottom: "", marginTop: "", marginBottom: "" });
523
+ const a = this.panel.scrollHeight, l = (n ? e.bottom - i.bottom : i.top - e.top) - Se - P;
524
+ if (a <= l || l >= Le) {
525
+ this.panel.style.maxHeight = `${Math.min(G, l)}px`;
520
526
  return;
521
527
  }
522
- this.panel.style.maxHeight = `${Math.min(V, e.height - 2 * S)}px`, o ? Object.assign(this.panel.style, { top: `${e.top + S - r.top}px`, marginTop: "0" }) : Object.assign(this.panel.style, { bottom: `${r.bottom - (e.bottom - S)}px`, marginBottom: "0" });
528
+ this.panel.style.maxHeight = `${Math.min(G, e.height - 2 * P)}px`, n ? Object.assign(this.panel.style, { top: `${e.top + P - r.top}px`, marginTop: "0" }) : Object.assign(this.panel.style, { bottom: `${r.bottom - (e.bottom - P)}px`, marginBottom: "0" });
523
529
  });
524
530
  s(this, "onDocumentClick", (t) => {
525
531
  this.open && !t.composedPath().includes(this.el) && this.close();
526
532
  });
527
- this.video = t, this.playbackRates = e, this.labels = i, this.activeQualityLabel = i.autoQuality, this.activeCaptionLabel = i.captionsOff, this.el = document.createElement("div"), this.el.className = "hp:relative", this.button = document.createElement("button"), this.button.type = "button", this.button.setAttribute("aria-label", i.settings), this.button.className = "hp-chip hp:flex hp:items-center hp:justify-center hp:w-[var(--hp-ctrl-btn-size)] hp:h-[var(--hp-ctrl-btn-size)] hp:cursor-pointer", this.button.appendChild(k("settings", "hp:text-[length:var(--hp-ctrl-icon-size)]")), this.panel = document.createElement("div"), this.panel.className = "hp-chip hp-chip-panel hp:hidden hp:absolute hp:bottom-full hp:right-0 hp:mb-2 hp:w-48 hp:max-h-64 hp:overflow-y-auto hp:text-sm hp:py-1", this.panelObserver = new MutationObserver(this.fitToPlayer), this.panelObserver.observe(this.panel, { childList: !0 }), this.el.appendChild(this.button), this.el.appendChild(this.panel), this.button.addEventListener("click", (r) => {
533
+ this.video = t, this.playbackRates = e, this.labels = i, this.activeQualityLabel = i.autoQuality, this.activeCaptionLabel = i.captionsOff, this.el = document.createElement("div"), this.el.className = "hp:relative", this.button = document.createElement("button"), this.button.type = "button", this.button.setAttribute("aria-label", i.settings), this.button.className = "hp-chip hp:flex hp:items-center hp:justify-center hp:w-[var(--hp-ctrl-btn-size)] hp:h-[var(--hp-ctrl-btn-size)] hp:cursor-pointer", this.button.appendChild(w("settings", "hp:text-[length:var(--hp-ctrl-icon-size)]")), this.panel = document.createElement("div"), this.panel.className = "hp-chip hp-chip-panel hp:hidden hp:absolute hp:bottom-full hp:right-0 hp:mb-2 hp:w-48 hp:max-h-64 hp:overflow-y-auto hp:text-sm hp:py-1", this.panelObserver = new MutationObserver(this.fitToPlayer), this.panelObserver.observe(this.panel, { childList: !0 }), this.el.appendChild(this.button), this.el.appendChild(this.panel), this.button.addEventListener("click", (r) => {
528
534
  r.stopPropagation(), this.toggle();
529
535
  }), document.addEventListener("click", this.onDocumentClick, !0), this.renderMain();
530
536
  }
@@ -581,7 +587,7 @@ class Te {
581
587
  }
582
588
  backRow(t, e) {
583
589
  const i = document.createElement("button");
584
- i.type = "button", i.className = "hp:flex hp:items-center hp:gap-2 hp:w-full hp:px-3 hp:py-2 hp:text-left hp:bg-transparent hp:border-0 hp:cursor-pointer hp:text-on-surface hp:font-medium hp:hover:bg-on-surface/10", i.appendChild(k("chevron-left", "hp:text-sm"));
590
+ i.type = "button", i.className = "hp:flex hp:items-center hp:gap-2 hp:w-full hp:px-3 hp:py-2 hp:text-left hp:bg-transparent hp:border-0 hp:cursor-pointer hp:text-on-surface hp:font-medium hp:hover:bg-on-surface/10", i.appendChild(w("chevron-left", "hp:text-sm"));
585
591
  const r = document.createElement("span");
586
592
  return r.textContent = t, i.appendChild(r), i.addEventListener("click", e), i;
587
593
  }
@@ -705,11 +711,11 @@ class Te {
705
711
  if (this.panel.appendChild(this.backRow(i, () => this.renderCaptions())), !e) return;
706
712
  const r = document.createElement("div");
707
713
  r.className = "hp:flex hp:flex-wrap hp:gap-2 hp:px-3 hp:py-2";
708
- const o = t === "bg" ? e.getBgColorOptions() : e.getTextColorOptions();
709
- for (const n of o) {
714
+ const n = t === "bg" ? e.getBgColorOptions() : e.getTextColorOptions();
715
+ for (const a of n) {
710
716
  const l = document.createElement("button");
711
- l.type = "button", l.setAttribute("aria-label", n.ariaLabel), l.className = "hp:w-7 hp:h-7 hp:rounded-full hp:cursor-pointer hp:flex-shrink-0 hp:border hp:border-on-surface/20", l.style.background = n.value, l.style.outline = n.active ? "2px solid currentColor" : "2px solid transparent", l.style.outlineOffset = "2px", l.addEventListener("click", () => {
712
- n.onSelect(), this.render();
717
+ l.type = "button", l.setAttribute("aria-label", a.ariaLabel), l.className = "hp:w-7 hp:h-7 hp:rounded-full hp:cursor-pointer hp:flex-shrink-0 hp:border hp:border-on-surface/20", l.style.background = a.value, l.style.outline = a.active ? "2px solid currentColor" : "2px solid transparent", l.style.outlineOffset = "2px", l.addEventListener("click", () => {
718
+ a.onSelect(), this.render();
713
719
  }), r.appendChild(l);
714
720
  }
715
721
  this.panel.appendChild(r);
@@ -722,27 +728,27 @@ class Te {
722
728
  document.removeEventListener("click", this.onDocumentClick, !0), this.panelObserver.disconnect();
723
729
  }
724
730
  }
725
- function se(a, t) {
726
- const e = a.seekable.length ? a.seekable.start(0) : 0, i = Number.isFinite(a.duration) ? a.duration : a.seekable.length ? a.seekable.end(a.seekable.length - 1) : a.currentTime;
727
- a.currentTime = Math.max(e, Math.min(i, a.currentTime + t));
731
+ function ae(o, t) {
732
+ const e = o.seekable.length ? o.seekable.start(0) : 0, i = Number.isFinite(o.duration) ? o.duration : o.seekable.length ? o.seekable.end(o.seekable.length - 1) : o.currentTime;
733
+ o.currentTime = Math.max(e, Math.min(i, o.currentTime + t));
728
734
  }
729
- const Ae = 15, Se = 480, Le = 150, _ = ["waiting", "seeking"], G = ["playing", "canplay", "canplaythrough", "seeked", "pause", "error", "emptied"];
730
- function q(a, t) {
731
- const { btn: e } = E("", `skip-${a}`);
735
+ const Me = 15, Re = 480, Be = 150, q = ["waiting", "seeking"], W = ["playing", "canplay", "canplaythrough", "seeked", "pause", "error", "emptied"];
736
+ function X(o, t) {
737
+ const { btn: e } = T("", `skip-${o}`);
732
738
  e.classList.add("hp-skip-btn"), e.setAttribute("part", t);
733
739
  const i = document.createElement("span");
734
740
  return i.className = "hp-skip-num", i.setAttribute("aria-hidden", "true"), e.appendChild(i), e.style.display = "none", { btn: e, num: i };
735
741
  }
736
- function w(a, t) {
737
- a.setAttribute("aria-label", t);
742
+ function E(o, t) {
743
+ o.setAttribute("aria-label", t);
738
744
  }
739
- function E(a, t, e) {
745
+ function T(o, t, e) {
740
746
  const i = document.createElement("button");
741
- i.type = "button", w(i, a), e && (i.dataset.shortcut = e), i.className = "hp-chip hp:flex hp:items-center hp:justify-center hp:w-[var(--hp-ctrl-btn-size)] hp:h-[var(--hp-ctrl-btn-size)] hp:cursor-pointer hp:shrink-0";
742
- const r = k(t, "hp:text-[length:var(--hp-ctrl-icon-size)]");
747
+ i.type = "button", E(i, o), e && (i.dataset.shortcut = e), i.className = "hp-chip hp:flex hp:items-center hp:justify-center hp:w-[var(--hp-ctrl-btn-size)] hp:h-[var(--hp-ctrl-btn-size)] hp:cursor-pointer hp:shrink-0";
748
+ const r = w(t, "hp:text-[length:var(--hp-ctrl-icon-size)]");
743
749
  return i.appendChild(r), { btn: i, icon: r };
744
750
  }
745
- class Pe {
751
+ class ze {
746
752
  constructor(t, e, i, r) {
747
753
  s(this, "el");
748
754
  s(this, "seekBar");
@@ -760,11 +766,17 @@ class Pe {
760
766
  s(this, "seekingEnabled", !0);
761
767
  s(this, "leftGroup");
762
768
  s(this, "loadingTimer", null);
769
+ /** Halkayı açık tutan sebepler: 'media' (buffer bekleniyor) ve player'ın verdikleri (ör. 'preroll'). */
770
+ s(this, "loadingReasons", /* @__PURE__ */ new Set());
771
+ /** Preroll beklenirken video duraklatılmış olsa da kullanıcı oynatmak istedi — buton "duraklat" görünür. */
772
+ s(this, "pendingPlay", !1);
763
773
  /** Sarma butonuyla sarıldığında (sn, negatif = geri) — sarma bildirimi için. */
764
774
  s(this, "onSkip", null);
765
775
  s(this, "fullscreenButton");
766
776
  s(this, "fullscreenIcon");
767
777
  s(this, "timeLabel");
778
+ /** Reklam sırasında süre etiketinin yerinde: "Reklam 2/3 · 0:12". */
779
+ s(this, "adInfoEl");
768
780
  s(this, "showRemaining", !1);
769
781
  /** Kompakt düzende (player < 480px) sağ grubun taşındığı üst bar; tam ekran altta kalır. */
770
782
  s(this, "topEl");
@@ -784,32 +796,32 @@ class Pe {
784
796
  t.stopPropagation(), this.toggleTimeMode();
785
797
  });
786
798
  s(this, "renderPlayState", () => {
787
- const t = this.callbacks.isAdActive() ? this.callbacks.adIsPaused() : this.video.paused;
788
- C(this.playIcon, t ? "play" : "pause"), w(this.playButton, t ? this.labels.play : this.labels.pause);
799
+ const t = this.callbacks.isAdActive() ? this.callbacks.adIsPaused() : this.video.paused && !this.pendingPlay;
800
+ A(this.playIcon, t ? "play" : "pause"), E(this.playButton, t ? this.labels.play : this.labels.pause);
789
801
  });
790
802
  s(this, "renderTime", () => {
791
- var r, o;
803
+ var r, n;
792
804
  const t = this.video.duration === 1 / 0;
793
805
  if (this.timeLabel.style.display = this.adMode || t ? "none" : "", this.liveBadge.style.display = !this.adMode && t ? "" : "none", !t) {
794
- const n = this.video.duration, l = this.video.currentTime;
806
+ const a = this.video.duration, l = this.video.currentTime;
795
807
  if (this.showRemaining) {
796
- const d = Number.isFinite(n) ? Math.floor(n) : 0, m = Math.max(0, d - Math.floor(l));
797
- this.timeLabel.textContent = `-${x(m)} / ${x(n)}`;
808
+ const d = Number.isFinite(a) ? Math.floor(a) : 0, m = Math.max(0, d - Math.floor(l));
809
+ this.timeLabel.textContent = `-${x(m)} / ${x(a)}`;
798
810
  } else
799
- this.timeLabel.textContent = `${x(l)} / ${x(n)}`;
811
+ this.timeLabel.textContent = `${x(l)} / ${x(a)}`;
800
812
  return;
801
813
  }
802
- const e = ((o = (r = this.callbacks).liveSyncPosition) == null ? void 0 : o.call(r)) ?? this.liveEdge(), i = e !== null && e - this.video.currentTime > Ae;
814
+ const e = ((n = (r = this.callbacks).liveSyncPosition) == null ? void 0 : n.call(r)) ?? this.liveEdge(), i = e !== null && e - this.video.currentTime > Me;
803
815
  this.liveBadge.toggleAttribute("data-behind", i);
804
816
  });
805
817
  /** Buffer bekleniyor (oynarken takılma ya da buffer'lanmamış bir yere atlama). */
806
818
  s(this, "onLoadingStart", (t) => {
807
- t.type === "seeking" && this.video.readyState >= HTMLMediaElement.HAVE_FUTURE_DATA || this.loadingTimer || this.leftGroup.hasAttribute("data-loading") || (this.loadingTimer = setTimeout(() => {
808
- this.loadingTimer = null, this.leftGroup.setAttribute("data-loading", "");
809
- }, Le));
819
+ t.type === "seeking" && this.video.readyState >= HTMLMediaElement.HAVE_FUTURE_DATA || this.loadingTimer || this.loadingReasons.has("media") || (this.loadingTimer = setTimeout(() => {
820
+ this.loadingTimer = null, this.setLoading("media", !0);
821
+ }, Be));
810
822
  });
811
823
  s(this, "onLoadingEnd", (t) => {
812
- t.type === "seeked" && this.video.readyState < HTMLMediaElement.HAVE_FUTURE_DATA && !this.video.paused || (this.loadingTimer && clearTimeout(this.loadingTimer), this.loadingTimer = null, this.leftGroup.removeAttribute("data-loading"));
824
+ t.type === "seeked" && this.video.readyState < HTMLMediaElement.HAVE_FUTURE_DATA && !this.video.paused || (this.loadingTimer && clearTimeout(this.loadingTimer), this.loadingTimer = null, this.setLoading("media", !1));
813
825
  });
814
826
  s(this, "goToLive", () => {
815
827
  var i, r;
@@ -817,29 +829,29 @@ class Pe {
817
829
  e === null && t == null || (this.video.currentTime = t ?? Math.max(0, e - 1), this.video.paused && this.video.play().catch(() => {
818
830
  }), this.renderTime());
819
831
  });
820
- this.video = t, this.callbacks = i, this.labels = r, this.el = document.createElement("div"), this.el.setAttribute("part", "control-bar"), this.el.className = "hp:absolute hp:inset-x-0 hp:bottom-0 hp:flex hp:flex-col hp:gap-1 hp:px-3 hp:pb-2 hp:pt-6 hp:pointer-events-none hp:transition-opacity hp:duration-200", this.seekBar = new ke(t, r), this.seekBar.el.classList.add("hp:pointer-events-auto"), this.el.appendChild(this.seekBar.el);
821
- const o = document.createElement("div");
822
- o.className = "hp:flex hp:items-center hp:gap-2", this.el.appendChild(o), this.bottomRow = o;
832
+ this.video = t, this.callbacks = i, this.labels = r, this.el = document.createElement("div"), this.el.setAttribute("part", "control-bar"), this.el.className = "hp:absolute hp:inset-x-0 hp:bottom-0 hp:flex hp:flex-col hp:gap-1 hp:px-3 hp:pb-2 hp:pt-6 hp:pointer-events-none hp:transition-opacity hp:duration-200", this.seekBar = new Ce(t, r), this.seekBar.el.classList.add("hp:pointer-events-auto"), this.el.appendChild(this.seekBar.el);
823
833
  const n = document.createElement("div");
824
- n.className = "hp-group hp-group-left hp:flex hp:items-center hp:gap-1 hp:px-1.5 hp:py-1 hp:shrink-0 hp:pointer-events-auto", o.appendChild(n), this.leftGroup = n;
834
+ n.className = "hp:flex hp:items-center hp:gap-2", this.el.appendChild(n), this.bottomRow = n;
835
+ const a = document.createElement("div");
836
+ a.className = "hp-group hp-group-left hp:flex hp:items-center hp:gap-1 hp:px-1.5 hp:py-1 hp:shrink-0 hp:pointer-events-auto", n.appendChild(a), this.leftGroup = a;
825
837
  const l = document.createElement("span");
826
838
  l.className = "hp-loading-ring", l.setAttribute("aria-hidden", "true");
827
839
  const d = document.createElement("span");
828
- d.className = "hp-loading-ring-mask", d.appendChild(document.createElement("span")), l.appendChild(d), n.appendChild(l);
829
- const m = E(r.play, "play", "K");
830
- this.playButton = m.btn, this.playIcon = m.icon, this.playButton.setAttribute("part", "play-pause-button"), this.playButton.addEventListener("click", () => this.togglePlay()), n.appendChild(this.playButton), this.skipBack = q("back", "skip-back-button"), this.skipBack.btn.addEventListener("click", () => this.skip(-(this.skipSeconds.back ?? 0))), this.skipForward = q("forward", "skip-forward-button"), this.skipForward.btn.addEventListener("click", () => this.skip(this.skipSeconds.forward ?? 0)), n.append(this.skipBack.btn, this.skipForward.btn), this.volumePanel = new xe(t, r, i.adVolume), n.appendChild(this.volumePanel.el), this.timeLabel = document.createElement("button"), this.timeLabel.type = "button", this.timeLabel.setAttribute("part", "time-display"), this.timeLabel.className = "hp:text-xs hp:text-on-surface hp:tabular-nums hp:whitespace-nowrap hp:px-1 hp:bg-transparent hp:border-0 hp:cursor-pointer hp:select-none hp:p-0 hp:hover:opacity-80 hp:transition-opacity hp:focus-visible:outline-none hp:focus-visible:ring-1 hp:focus-visible:ring-accent hp:rounded", this.timeLabel.textContent = "0:00 / 0:00", this.timeLabel.addEventListener("click", this.onTimeClick), n.appendChild(this.timeLabel), this.liveBadge = document.createElement("button"), this.liveBadge.type = "button", this.liveBadge.className = "hp-live-badge", this.liveBadge.setAttribute("part", "live-badge"), this.liveBadge.setAttribute("aria-label", r.goToLive);
840
+ d.className = "hp-loading-ring-mask", d.appendChild(document.createElement("span")), l.appendChild(d), a.appendChild(l);
841
+ const m = T(r.play, "play", "K");
842
+ this.playButton = m.btn, this.playIcon = m.icon, this.playButton.setAttribute("part", "play-pause-button"), this.playButton.addEventListener("click", () => this.togglePlay()), a.appendChild(this.playButton), this.skipBack = X("back", "skip-back-button"), this.skipBack.btn.addEventListener("click", () => this.skip(-(this.skipSeconds.back ?? 0))), this.skipForward = X("forward", "skip-forward-button"), this.skipForward.btn.addEventListener("click", () => this.skip(this.skipSeconds.forward ?? 0)), a.append(this.skipBack.btn, this.skipForward.btn), this.volumePanel = new Ae(t, r, i.adVolume), a.appendChild(this.volumePanel.el), this.timeLabel = document.createElement("button"), this.timeLabel.type = "button", this.timeLabel.setAttribute("part", "time-display"), this.timeLabel.className = "hp:text-xs hp:text-on-surface hp:tabular-nums hp:whitespace-nowrap hp:px-1 hp:bg-transparent hp:border-0 hp:cursor-pointer hp:select-none hp:p-0 hp:hover:opacity-80 hp:transition-opacity hp:focus-visible:outline-none hp:focus-visible:ring-1 hp:focus-visible:ring-accent hp:rounded", this.timeLabel.textContent = "0:00 / 0:00", this.timeLabel.addEventListener("click", this.onTimeClick), a.appendChild(this.timeLabel), this.adInfoEl = document.createElement("span"), this.adInfoEl.setAttribute("part", "ad-countdown"), this.adInfoEl.className = "hp:text-xs hp:text-on-surface hp:tabular-nums hp:whitespace-nowrap hp:px-1 hp:select-none", this.adInfoEl.setAttribute("aria-live", "off"), this.adInfoEl.style.display = "none", this.liveBadge = document.createElement("button"), this.liveBadge.type = "button", this.liveBadge.className = "hp-live-badge", this.liveBadge.setAttribute("part", "live-badge"), this.liveBadge.setAttribute("aria-label", r.goToLive);
831
843
  const c = document.createElement("span");
832
- c.className = "hp-live-dot", this.liveText = document.createElement("span"), this.liveText.textContent = r.live, this.liveBadge.append(c, this.liveText), this.liveBadge.style.display = "none", this.liveBadge.addEventListener("click", this.goToLive), n.appendChild(this.liveBadge);
844
+ c.className = "hp-live-dot", this.liveText = document.createElement("span"), this.liveText.textContent = r.live, this.liveBadge.append(c, this.liveText), this.liveBadge.style.display = "none", this.liveBadge.addEventListener("click", this.goToLive), a.appendChild(this.liveBadge), a.appendChild(this.adInfoEl);
833
845
  const h = document.createElement("div");
834
- h.className = "hp:flex-1", o.appendChild(h);
846
+ h.className = "hp:flex-1", n.appendChild(h);
835
847
  const p = document.createElement("div");
836
- p.className = "hp-group hp:flex hp:items-center hp:gap-1 hp:px-1.5 hp:py-1 hp:shrink-0 hp:pointer-events-auto", o.appendChild(p), this.rightGroup = p, this.settingsMenu = new Te(t, e, r), p.appendChild(this.settingsMenu.el), this.extraButtonAnchor = this.settingsMenu.el, this.row = p;
837
- const u = E(r.pip, "pip");
848
+ p.className = "hp-group hp:flex hp:items-center hp:gap-1 hp:px-1.5 hp:py-1 hp:shrink-0 hp:pointer-events-auto", n.appendChild(p), this.rightGroup = p, this.settingsMenu = new Pe(t, e, r), p.appendChild(this.settingsMenu.el), this.extraButtonAnchor = this.settingsMenu.el, this.row = p;
849
+ const u = T(r.pip, "pip");
838
850
  this.pipButton = u.btn, this.pipButton.addEventListener("click", () => this.togglePip()), document.pictureInPictureEnabled || (this.pipButton.style.display = "none"), p.appendChild(this.pipButton);
839
- const b = E(r.fullscreenEnter, "fullscreen-enter", "F");
840
- this.fullscreenButton = b.btn, this.fullscreenIcon = b.icon, this.fullscreenButton.addEventListener("click", () => this.toggleFullscreen()), p.appendChild(this.fullscreenButton), this.topEl = document.createElement("div"), this.topEl.className = "hp-top-bar", this.topEl.setAttribute("part", "top-bar"), this.fullscreenSlot = document.createElement("div"), this.fullscreenSlot.className = "hp-group hp:items-center hp:px-1.5 hp:py-1 hp:shrink-0 hp:pointer-events-auto", this.fullscreenSlot.style.display = "none", o.appendChild(this.fullscreenSlot), this.resizeObserver = new ResizeObserver(() => this.updateLayout()), this.resizeObserver.observe(this.el), t.addEventListener("play", this.renderPlayState), t.addEventListener("pause", this.renderPlayState), t.addEventListener("timeupdate", this.renderTime), t.addEventListener("loadedmetadata", this.renderTime), t.addEventListener("durationchange", this.renderTime), t.addEventListener("progress", this.renderTime), t.addEventListener("emptied", this.renderTime);
841
- for (const g of _) t.addEventListener(g, this.onLoadingStart);
842
- for (const g of G) t.addEventListener(g, this.onLoadingEnd);
851
+ const b = T(r.fullscreenEnter, "fullscreen-enter", "F");
852
+ this.fullscreenButton = b.btn, this.fullscreenIcon = b.icon, this.fullscreenButton.addEventListener("click", () => this.toggleFullscreen()), p.appendChild(this.fullscreenButton), this.topEl = document.createElement("div"), this.topEl.className = "hp-top-bar", this.topEl.setAttribute("part", "top-bar"), this.fullscreenSlot = document.createElement("div"), this.fullscreenSlot.className = "hp-group hp:items-center hp:px-1.5 hp:py-1 hp:shrink-0 hp:pointer-events-auto", this.fullscreenSlot.style.display = "none", n.appendChild(this.fullscreenSlot), this.resizeObserver = new ResizeObserver(() => this.updateLayout()), this.resizeObserver.observe(this.el), t.addEventListener("play", this.renderPlayState), t.addEventListener("pause", this.renderPlayState), t.addEventListener("timeupdate", this.renderTime), t.addEventListener("loadedmetadata", this.renderTime), t.addEventListener("durationchange", this.renderTime), t.addEventListener("progress", this.renderTime), t.addEventListener("emptied", this.renderTime);
853
+ for (const g of q) t.addEventListener(g, this.onLoadingStart);
854
+ for (const g of W) t.addEventListener(g, this.onLoadingEnd);
843
855
  this.renderPlayState(), this.renderTime();
844
856
  }
845
857
  /** Player genişliğine göre normal / kompakt (mobil) düzen arasında geçiş — yalnızca eşik geçilince DOM taşınır. */
@@ -847,11 +859,11 @@ class Pe {
847
859
  var i;
848
860
  const t = this.el.getBoundingClientRect().width;
849
861
  if (t === 0) return;
850
- const e = t < Se;
862
+ const e = t < Re;
851
863
  e !== this.compact && (this.compact = e, this.settingsMenu.closeMenu(), this.el.toggleAttribute("data-compact", e), (i = this.el.closest(".video-area")) == null || i.toggleAttribute("data-compact", e), e ? (this.fullscreenSlot.appendChild(this.fullscreenButton), this.fullscreenSlot.style.display = this.adMode ? "none" : "flex", this.topEl.appendChild(this.rightGroup)) : (this.rightGroup.appendChild(this.fullscreenButton), this.bottomRow.insertBefore(this.rightGroup, this.fullscreenSlot), this.fullscreenSlot.style.display = "none"));
852
864
  }
853
865
  setFullscreenState(t) {
854
- C(this.fullscreenIcon, t ? "fullscreen-exit" : "fullscreen-enter"), w(this.fullscreenButton, t ? this.labels.fullscreenExit : this.labels.fullscreenEnter);
866
+ A(this.fullscreenIcon, t ? "fullscreen-exit" : "fullscreen-enter"), E(this.fullscreenButton, t ? this.labels.fullscreenExit : this.labels.fullscreenEnter);
855
867
  }
856
868
  /** Dil sonradan değişince (`options.locale`/`labels`) statik (reaktif olarak yeniden render edilmeyen) etiketleri tazeler. */
857
869
  /** Geri/ileri sarma butonları — `null` süre o butonu gizler. */
@@ -864,23 +876,33 @@ class Pe {
864
876
  }
865
877
  renderSkipButtons() {
866
878
  const t = (e, i, r) => {
867
- e.btn.style.display = i === null || this.adMode ? "none" : "", i !== null && (e.num.textContent = String(i), e.num.toggleAttribute("data-long", String(i).length > 2), w(e.btn, r(i)));
879
+ e.btn.style.display = i === null || this.adMode ? "none" : "", i !== null && (e.num.textContent = String(i), e.num.toggleAttribute("data-long", String(i).length > 2), E(e.btn, r(i)));
868
880
  };
869
881
  t(this.skipBack, this.skipSeconds.back, this.labels.skipBack), t(this.skipForward, this.skipSeconds.forward, this.labels.skipForward);
870
882
  }
871
883
  skip(t) {
872
884
  var e;
873
- !t || !this.seekingEnabled || (se(this.video, t), (e = this.onSkip) == null || e.call(this, t));
885
+ !t || !this.seekingEnabled || (ae(this.video, t), (e = this.onSkip) == null || e.call(this, t));
874
886
  }
875
887
  refreshLabels() {
876
- this.renderPlayState(), this.renderSkipButtons(), w(this.pipButton, this.labels.pip), w(this.liveBadge, this.labels.goToLive), this.liveText.textContent = this.labels.live, this.setFullscreenState(this.callbacks.isFullscreen()), this.seekBar.refreshLabels(), this.volumePanel.refreshLabels(), this.settingsMenu.refreshLabels();
888
+ this.renderPlayState(), this.renderSkipButtons(), E(this.pipButton, this.labels.pip), E(this.liveBadge, this.labels.goToLive), this.liveText.textContent = this.labels.live, this.setFullscreenState(this.callbacks.isFullscreen()), this.seekBar.refreshLabels(), this.volumePanel.refreshLabels(), this.settingsMenu.refreshLabels();
877
889
  }
878
890
  /** Reklam modu: seek bar, süre ve sağ grup gizlenir; oynat/duraklat + ses kalır. */
879
891
  setAdMode(t) {
880
892
  const e = t ? "none" : "";
881
- this.adMode = t, this.renderSkipButtons(), this.seekBar.el.style.display = e, this.row.style.display = e, this.compact && (this.fullscreenSlot.style.display = t ? "none" : "flex"), this.renderTime();
882
- const i = t ? "#202020" : "";
883
- this.playIcon.style.color = i, this.volumePanel.setIconColor(i), this.volumePanel.setSliderFillColor(i), this.renderPlayState(), this.volumePanel.refreshForAdMode();
893
+ this.adMode = t, this.renderSkipButtons(), this.seekBar.el.style.display = e, this.row.style.display = e, this.compact && (this.fullscreenSlot.style.display = t ? "none" : "flex"), this.renderTime(), t || this.setAdInfo(null), this.renderPlayState(), this.volumePanel.refreshForAdMode();
894
+ }
895
+ /**
896
+ * Reklam geri sayımı + pod göstergesi ("Reklam 2/3 · 0:12"). `null` → gizle. Pod tek reklamsa yalnızca "Reklam · 0:12";
897
+ * kalan süre bilinmiyorsa (bazı VPAID reklamları) yalnızca etiket.
898
+ */
899
+ setAdInfo(t) {
900
+ if (!t || !this.adMode) {
901
+ this.adInfoEl.style.display = "none", this.adInfoEl.textContent = "";
902
+ return;
903
+ }
904
+ const e = t.total > 1 ? ` ${t.position}/${t.total}` : "", i = t.remaining >= 0 ? ` · ${x(Math.ceil(t.remaining))}` : "";
905
+ this.adInfoEl.textContent = `${this.labels.adLabel}${e}${i}`, this.adInfoEl.style.display = "";
884
906
  }
885
907
  /** `AdsController`'ın IMA'nın KENDİ UI'ı üzerinden (ör. reklam video'suna tıklama) gelen PAUSED/RESUMED event'leri için — oynat/duraklat ikonunu tazeler. */
886
908
  refreshAdPlayState() {
@@ -894,8 +916,8 @@ class Pe {
894
916
  }
895
917
  /** Plugin'lerin (loop-section vb.) kontrol çubuğuna kendi butonlarını eklemesi için — ayarlar menüsünden önce yerleştirilir. */
896
918
  addButton(t, e, i) {
897
- const { btn: r, icon: o } = E(t, e);
898
- return r.addEventListener("click", i), this.row.insertBefore(r, this.extraButtonAnchor), { btn: r, icon: o };
919
+ const { btn: r, icon: n } = T(t, e);
920
+ return r.addEventListener("click", i), this.row.insertBefore(r, this.extraButtonAnchor), { btn: r, icon: n };
899
921
  }
900
922
  toggleTimeMode() {
901
923
  this.showRemaining = !this.showRemaining, this.renderTime();
@@ -911,6 +933,11 @@ class Pe {
911
933
  this.row.insertBefore(t, this.extraButtonAnchor);
912
934
  }
913
935
  togglePlay() {
936
+ var t, e;
937
+ if ((e = (t = this.callbacks).interceptTogglePlay) != null && e.call(t)) {
938
+ this.renderPlayState();
939
+ return;
940
+ }
914
941
  if (this.callbacks.isAdActive()) {
915
942
  this.callbacks.adTogglePlay(), this.renderPlayState();
916
943
  return;
@@ -926,6 +953,22 @@ class Pe {
926
953
  toggleFullscreen() {
927
954
  this.callbacks.isFullscreen() ? this.callbacks.onExitFullscreen() : this.callbacks.onRequestFullscreen();
928
955
  }
956
+ /** Preroll beklemesi: video duraklatılmış ama oynatma istendi — buton "duraklat" görünsün. */
957
+ setPendingPlay(t) {
958
+ this.pendingPlay = t, this.renderPlayState();
959
+ }
960
+ /** Player'ın kendi bekleme durumları (ör. 'preroll') için yükleme halkası — medya takılmasından bağımsız. */
961
+ setLoading(t, e) {
962
+ e ? this.loadingReasons.add(t) : this.loadingReasons.delete(t), this.renderLoading();
963
+ }
964
+ get isLoading() {
965
+ return this.loadingReasons.size > 0;
966
+ }
967
+ renderLoading() {
968
+ var e, i;
969
+ const t = this.loadingReasons.size > 0;
970
+ t !== this.leftGroup.hasAttribute("data-loading") && (this.leftGroup.toggleAttribute("data-loading", t), (i = (e = this.callbacks).onLoadingChange) == null || i.call(e, t));
971
+ }
929
972
  /** Canlı uç (media-time) — seekable sonu; native HLS'te DVR'sız canlıda seekable boş kalabildiği için buffered sonu (bkz. LiveWallClock.isLive notu). */
930
973
  liveEdge() {
931
974
  const { seekable: t, buffered: e } = this.video;
@@ -933,16 +976,16 @@ class Pe {
933
976
  }
934
977
  destroy() {
935
978
  this.timeLabel.removeEventListener("click", this.onTimeClick), this.video.removeEventListener("play", this.renderPlayState), this.video.removeEventListener("pause", this.renderPlayState), this.video.removeEventListener("timeupdate", this.renderTime), this.video.removeEventListener("loadedmetadata", this.renderTime), this.video.removeEventListener("durationchange", this.renderTime), this.video.removeEventListener("progress", this.renderTime), this.video.removeEventListener("emptied", this.renderTime);
936
- for (const t of _) this.video.removeEventListener(t, this.onLoadingStart);
937
- for (const t of G) this.video.removeEventListener(t, this.onLoadingEnd);
979
+ for (const t of q) this.video.removeEventListener(t, this.onLoadingStart);
980
+ for (const t of W) this.video.removeEventListener(t, this.onLoadingEnd);
938
981
  this.loadingTimer && clearTimeout(this.loadingTimer), this.resizeObserver.disconnect(), this.topEl.remove(), this.seekBar.destroy(), this.settingsMenu.destroy();
939
982
  }
940
983
  }
941
- const Me = 450, Be = 60, X = 8, M = 6, Re = /* @__PURE__ */ new Set(["seek-bar", "time-display"]);
942
- function ze() {
984
+ const Ie = 450, Ne = 60, $ = 8, z = 6, Oe = /* @__PURE__ */ new Set(["seek-bar", "time-display"]);
985
+ function De() {
943
986
  return typeof window.matchMedia != "function" || window.matchMedia("(hover: hover)").matches;
944
987
  }
945
- class Ne {
988
+ class Fe {
946
989
  constructor(t) {
947
990
  s(this, "el");
948
991
  s(this, "labelEl");
@@ -992,22 +1035,22 @@ class Ne {
992
1035
  this.currentTarget && this.el.style.visibility === "visible" && ((t = this.isOccluded) != null && t.call(this, this.el.getBoundingClientRect())) && this.hideNow();
993
1036
  }
994
1037
  matchTarget(t) {
995
- var o;
996
- const e = t, i = (o = e == null ? void 0 : e.closest) == null ? void 0 : o.call(e, 'button[aria-label], [role="slider"][aria-label]');
1038
+ var n;
1039
+ const e = t, i = (n = e == null ? void 0 : e.closest) == null ? void 0 : n.call(e, 'button[aria-label], [role="slider"][aria-label]');
997
1040
  if (!i) return null;
998
1041
  const r = i.getAttribute("part");
999
- return r && Re.has(r) || i.offsetParent === null && i !== document.activeElement ? null : i;
1042
+ return r && Oe.has(r) || i.offsetParent === null && i !== document.activeElement ? null : i;
1000
1043
  }
1001
1044
  scheduleShow(t) {
1002
1045
  this.hideTimer && (clearTimeout(this.hideTimer), this.hideTimer = null), this.showTimer && clearTimeout(this.showTimer), this.pendingTarget = t, this.showTimer = setTimeout(() => {
1003
1046
  this.showTimer = null, this.pendingTarget = null, this.show(t);
1004
- }, Me);
1047
+ }, Ie);
1005
1048
  }
1006
1049
  scheduleHide() {
1007
- this.showTimer && (clearTimeout(this.showTimer), this.showTimer = null), this.pendingTarget = null, this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = setTimeout(() => this.hideNow(), Be);
1050
+ this.showTimer && (clearTimeout(this.showTimer), this.showTimer = null), this.pendingTarget = null, this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = setTimeout(() => this.hideNow(), Ne);
1008
1051
  }
1009
1052
  show(t) {
1010
- if (!ze()) return;
1053
+ if (!De()) return;
1011
1054
  const e = t.getAttribute("aria-label");
1012
1055
  if (!e) return;
1013
1056
  this.currentTarget = t, this.labelEl.textContent = e;
@@ -1019,14 +1062,14 @@ class Ne {
1019
1062
  }
1020
1063
  position(t) {
1021
1064
  const e = this.mountEl.getBoundingClientRect(), i = t.getBoundingClientRect(), r = this.el.getBoundingClientRect();
1022
- let o = i.top - e.top - r.height - X;
1023
- o < M && (o = i.bottom - e.top + X);
1024
- let n = i.left - e.left + i.width / 2 - r.width / 2;
1025
- const l = e.width - r.width - M;
1026
- n = Math.max(M, Math.min(n, l)), this.el.style.top = `${o}px`, this.el.style.left = `${n}px`;
1065
+ let n = i.top - e.top - r.height - $;
1066
+ n < z && (n = i.bottom - e.top + $);
1067
+ let a = i.left - e.left + i.width / 2 - r.width / 2;
1068
+ const l = e.width - r.width - z;
1069
+ a = Math.max(z, Math.min(a, l)), this.el.style.top = `${n}px`, this.el.style.left = `${a}px`;
1027
1070
  }
1028
1071
  }
1029
- class Oe {
1072
+ class He {
1030
1073
  constructor(t, e, i) {
1031
1074
  s(this, "host");
1032
1075
  s(this, "video");
@@ -1035,8 +1078,10 @@ class Oe {
1035
1078
  s(this, "seekStep", 5);
1036
1079
  /** Klavyeyle sarıldığında (sn, negatif = geri) — sarma bildirimi için. */
1037
1080
  s(this, "onSeek", null);
1081
+ /** Space/K'den önce sorulur — true dönerse işlenmiştir (ör. preroll beklemesini iptal). */
1082
+ s(this, "interceptTogglePlay", null);
1038
1083
  s(this, "onKeyDown", (t) => {
1039
- var r, o;
1084
+ var r, n, a;
1040
1085
  if (t.defaultPrevented) return;
1041
1086
  const e = t.composedPath()[0];
1042
1087
  if ((t.key === " " || t.key === "Enter") && e instanceof HTMLButtonElement) return;
@@ -1044,15 +1089,19 @@ class Oe {
1044
1089
  switch (t.key) {
1045
1090
  case " ":
1046
1091
  case "k":
1092
+ if ((r = this.interceptTogglePlay) != null && r.call(this)) {
1093
+ t.preventDefault();
1094
+ break;
1095
+ }
1047
1096
  this.video.paused ? this.video.play() : this.video.pause(), t.preventDefault();
1048
1097
  break;
1049
1098
  case "ArrowRight":
1050
1099
  case "l":
1051
- Number.isFinite(i) && (this.video.currentTime = Math.min(i, this.video.currentTime + this.seekStep), (r = this.onSeek) == null || r.call(this, this.seekStep)), t.preventDefault();
1100
+ Number.isFinite(i) && (this.video.currentTime = Math.min(i, this.video.currentTime + this.seekStep), (n = this.onSeek) == null || n.call(this, this.seekStep)), t.preventDefault();
1052
1101
  break;
1053
1102
  case "ArrowLeft":
1054
1103
  case "j":
1055
- this.video.currentTime = Math.max(0, this.video.currentTime - this.seekStep), (o = this.onSeek) == null || o.call(this, -this.seekStep), t.preventDefault();
1104
+ this.video.currentTime = Math.max(0, this.video.currentTime - this.seekStep), (a = this.onSeek) == null || a.call(this, -this.seekStep), t.preventDefault();
1056
1105
  break;
1057
1106
  case "ArrowUp":
1058
1107
  this.video.volume = Math.min(1, this.video.volume + 0.1), this.video.muted = !1, t.preventDefault();
@@ -1074,7 +1123,7 @@ class Oe {
1074
1123
  this.host.removeEventListener("keydown", this.onKeyDown);
1075
1124
  }
1076
1125
  }
1077
- class Fe {
1126
+ class _e {
1078
1127
  constructor(t) {
1079
1128
  s(this, "el");
1080
1129
  s(this, "video");
@@ -1086,8 +1135,8 @@ class Fe {
1086
1135
  this.video.removeEventListener("waiting", this.show), this.video.removeEventListener("playing", this.hide), this.video.removeEventListener("canplay", this.hide), this.video.removeEventListener("pause", this.hide);
1087
1136
  }
1088
1137
  }
1089
- const Ie = '<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 11a8 8 0 1 0-2.3 5.7"/><path d="M20 4v7h-7"/></svg>';
1090
- class De {
1138
+ const Ve = '<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 11a8 8 0 1 0-2.3 5.7"/><path d="M20 4v7h-7"/></svg>';
1139
+ class Ge {
1091
1140
  constructor(t, e) {
1092
1141
  s(this, "el");
1093
1142
  s(this, "video");
@@ -1107,9 +1156,9 @@ class De {
1107
1156
  const i = document.createElement("div");
1108
1157
  i.className = "hp-error-card";
1109
1158
  const r = document.createElement("div");
1110
- r.className = "hp-error-icon", r.appendChild(k("warning")), i.appendChild(r), this.messageEl = document.createElement("p"), this.messageEl.className = "hp-error-message", i.appendChild(this.messageEl), this.codeEl = document.createElement("p"), this.codeEl.className = "hp-error-code", i.appendChild(this.codeEl), this.retryBtn = document.createElement("button"), this.retryBtn.type = "button", this.retryBtn.className = "hp-error-retry", this.retryBtn.innerHTML = Ie, this.retryText = document.createElement("span"), this.retryText.textContent = e.retry, this.retryBtn.appendChild(this.retryText), this.retryBtn.addEventListener("click", () => {
1111
- var o;
1112
- this.dismiss(), (o = this.onRetry) == null || o.call(this);
1159
+ r.className = "hp-error-icon", r.appendChild(w("warning")), i.appendChild(r), this.messageEl = document.createElement("p"), this.messageEl.className = "hp-error-message", i.appendChild(this.messageEl), this.codeEl = document.createElement("p"), this.codeEl.className = "hp-error-code", i.appendChild(this.codeEl), this.retryBtn = document.createElement("button"), this.retryBtn.type = "button", this.retryBtn.className = "hp-error-retry", this.retryBtn.innerHTML = Ve, this.retryText = document.createElement("span"), this.retryText.textContent = e.retry, this.retryBtn.appendChild(this.retryText), this.retryBtn.addEventListener("click", () => {
1160
+ var n;
1161
+ this.dismiss(), (n = this.onRetry) == null || n.call(this);
1113
1162
  }), i.appendChild(this.retryBtn), this.el.appendChild(i), t.addEventListener("error", this.show);
1114
1163
  }
1115
1164
  setOnRetry(t) {
@@ -1153,129 +1202,129 @@ class De {
1153
1202
  this.video.removeEventListener("error", this.show);
1154
1203
  }
1155
1204
  }
1156
- const R = /* @__PURE__ */ new WeakMap(), re = /* @__PURE__ */ new WeakSet(), P = /* @__PURE__ */ new WeakMap();
1157
- function He(a) {
1158
- return re.has(a);
1205
+ const I = /* @__PURE__ */ new WeakMap(), le = /* @__PURE__ */ new WeakSet(), B = /* @__PURE__ */ new WeakMap();
1206
+ function qe(o) {
1207
+ return le.has(o);
1159
1208
  }
1160
- function oe(a, t, e, i, r) {
1161
- let o = R.get(a);
1162
- o || R.set(a, o = /* @__PURE__ */ new Map());
1163
- const n = `${t}\0${e}\0${i}\0${r}`;
1164
- let l = o.get(n);
1165
- return l || (l = a.addTextTrack(e, i, r), re.add(l), o.set(n, l)), l;
1209
+ function he(o, t, e, i, r) {
1210
+ let n = I.get(o);
1211
+ n || I.set(o, n = /* @__PURE__ */ new Map());
1212
+ const a = `${t}\0${e}\0${i}\0${r}`;
1213
+ let l = n.get(a);
1214
+ return l || (l = o.addTextTrack(e, i, r), le.add(l), n.set(a, l)), l;
1166
1215
  }
1167
- function ne(a, t) {
1168
- for (const [e, i] of R.get(a) ?? [])
1216
+ function pe(o, t) {
1217
+ for (const [e, i] of I.get(o) ?? [])
1169
1218
  if (e.startsWith(`${t}\0`)) {
1170
1219
  i.mode = "hidden";
1171
1220
  for (const r of Array.from(i.cues ?? [])) i.removeCue(r);
1172
1221
  i.mode = "disabled";
1173
1222
  }
1174
1223
  }
1175
- function Ve(a, t) {
1176
- ae(a);
1177
- const e = P.get(a), i = [];
1224
+ function We(o, t) {
1225
+ ce(o);
1226
+ const e = B.get(o), i = [];
1178
1227
  for (const r of t) {
1179
- const o = oe(a, "options", "subtitles", r.label, r.srclang);
1180
- o.mode = r.default ? "hidden" : "disabled", i.push({ label: r.label, track: o }), Ge(a, o, r.src, e);
1228
+ const n = he(o, "options", "subtitles", r.label, r.srclang);
1229
+ n.mode = r.default ? "hidden" : "disabled", i.push({ label: r.label, track: n }), $e(o, n, r.src, e);
1181
1230
  }
1182
1231
  return i;
1183
1232
  }
1184
- function ae(a) {
1185
- P.set(a, (P.get(a) ?? 0) + 1), ne(a, "options");
1233
+ function ce(o) {
1234
+ B.set(o, (B.get(o) ?? 0) + 1), pe(o, "options");
1186
1235
  }
1187
- function _e(a, t) {
1236
+ function Xe(o, t) {
1188
1237
  let e = null;
1189
- for (const { label: i, track: r } of a) {
1190
- const o = i === t;
1191
- r.mode = o ? "hidden" : "disabled", o && (e = r);
1238
+ for (const { label: i, track: r } of o) {
1239
+ const n = i === t;
1240
+ r.mode = n ? "hidden" : "disabled", n && (e = r);
1192
1241
  }
1193
1242
  return e;
1194
1243
  }
1195
- async function Ge(a, t, e, i) {
1244
+ async function $e(o, t, e, i) {
1196
1245
  let r;
1197
1246
  try {
1198
- const o = await fetch(e);
1199
- if (!o.ok) throw new Error(`HTTP ${o.status}`);
1200
- r = await o.text();
1201
- } catch (o) {
1202
- console.warn("[HopePlayer] altyazı yüklenemedi:", e, o);
1247
+ const n = await fetch(e);
1248
+ if (!n.ok) throw new Error(`HTTP ${n.status}`);
1249
+ r = await n.text();
1250
+ } catch (n) {
1251
+ console.warn("[HopePlayer] altyazı yüklenemedi:", e, n), o.dispatchEvent(new CustomEvent("hp-internal:subtitle-error", { detail: { src: e, message: String(n) } }));
1203
1252
  return;
1204
1253
  }
1205
- if (!(P.get(a) !== i || typeof VTTCue != "function"))
1206
- for (const o of Xe(r)) {
1207
- const n = new VTTCue(o.start, o.end, o.text);
1208
- Ue(n, o.settings), t.addCue(n);
1254
+ if (!(B.get(o) !== i || typeof VTTCue != "function"))
1255
+ for (const n of Ke(r)) {
1256
+ const a = new VTTCue(n.start, n.end, n.text);
1257
+ Qe(a, n.settings), t.addCue(a);
1209
1258
  }
1210
1259
  }
1211
- const U = "(?:\\d+:)?\\d{1,2}:\\d{2}(?:[.,]\\d{1,3})?", qe = new RegExp(`^(${U})\\s+-->\\s+(${U})(.*)$`);
1212
- function Q(a) {
1213
- return a.replace(",", ".").split(":").reduce((t, e) => t * 60 + Number(e), 0);
1260
+ const U = "(?:\\d+:)?\\d{1,2}:\\d{2}(?:[.,]\\d{1,3})?", Ue = new RegExp(`^(${U})\\s+-->\\s+(${U})(.*)$`);
1261
+ function K(o) {
1262
+ return o.replace(",", ".").split(":").reduce((t, e) => t * 60 + Number(e), 0);
1214
1263
  }
1215
- function Xe(a) {
1216
- const t = [], e = a.replace(/^/, "").replace(/\r\n?/g, `
1264
+ function Ke(o) {
1265
+ const t = [], e = o.replace(/^/, "").replace(/\r\n?/g, `
1217
1266
  `).split(/\n{2,}/);
1218
1267
  for (const i of e) {
1219
1268
  const r = i.split(`
1220
- `), o = r.findIndex((d) => d.includes("-->"));
1221
- if (o < 0) continue;
1222
- const n = qe.exec(r[o].trim());
1223
- if (!n) continue;
1224
- const l = r.slice(o + 1).join(`
1269
+ `), n = r.findIndex((d) => d.includes("-->"));
1270
+ if (n < 0) continue;
1271
+ const a = Ue.exec(r[n].trim());
1272
+ if (!a) continue;
1273
+ const l = r.slice(n + 1).join(`
1225
1274
  `);
1226
- l.trim() && t.push({ start: Q(n[1]), end: Q(n[2]), settings: n[3].trim(), text: l });
1275
+ l.trim() && t.push({ start: K(a[1]), end: K(a[2]), settings: a[3].trim(), text: l });
1227
1276
  }
1228
1277
  return t;
1229
1278
  }
1230
- function Ue(a, t) {
1279
+ function Qe(o, t) {
1231
1280
  for (const e of t.split(/\s+/)) {
1232
1281
  const [i, r] = e.split(":");
1233
1282
  if (!i || !r) continue;
1234
- const [o] = r.split(",");
1283
+ const [n] = r.split(",");
1235
1284
  try {
1236
- i === "align" ? a.align = o : i === "vertical" ? a.vertical = o : i === "size" ? a.size = parseFloat(o) : i === "position" ? a.position = parseFloat(o) : i === "line" && (a.snapToLines = !o.endsWith("%"), a.line = parseFloat(o));
1285
+ i === "align" ? o.align = n : i === "vertical" ? o.vertical = n : i === "size" ? o.size = parseFloat(n) : i === "position" ? o.position = parseFloat(n) : i === "line" && (o.snapToLines = !n.endsWith("%"), o.line = parseFloat(n));
1237
1286
  } catch {
1238
1287
  }
1239
1288
  }
1240
1289
  }
1241
- const L = 6, Qe = 20, Ke = 14, We = 6, je = 10, Ye = 3, le = "hope-caption-row", he = "hope-caption-font-size", K = "hope-caption-bg-color", W = "hope-caption-text-color", $e = {
1290
+ const R = 6, je = 20, Ye = 14, Ze = 6, Je = 10, et = 3, de = "hope-caption-row", ue = "hope-caption-font-size", Q = "hope-caption-bg-color", j = "hope-caption-text-color", tt = {
1242
1291
  small: 0.78,
1243
1292
  normal: 1,
1244
1293
  large: 1.35
1245
- }, j = [
1294
+ }, Y = [
1246
1295
  "rgba(0, 0, 0, 0.75)",
1247
1296
  "rgba(0, 0, 0, 0)",
1248
1297
  "rgba(255, 255, 255, 0.85)",
1249
1298
  "rgba(183, 28, 28, 0.8)",
1250
1299
  "rgba(13, 71, 161, 0.8)",
1251
1300
  "rgba(27, 94, 32, 0.8)"
1252
- ], Y = ["#ffffff", "#000000", "#ffeb3b", "#ff5252", "#18ffff", "#69f0ae"];
1253
- function Ze() {
1301
+ ], Z = ["#ffffff", "#000000", "#ffeb3b", "#ff5252", "#18ffff", "#69f0ae"];
1302
+ function it() {
1254
1303
  try {
1255
- const a = window.localStorage.getItem(le), t = a === null ? 0 : Number(a);
1256
- return Number.isFinite(t) && t >= 0 && t < L ? t : 0;
1304
+ const o = window.localStorage.getItem(de), t = o === null ? 0 : Number(o);
1305
+ return Number.isFinite(t) && t >= 0 && t < R ? t : 0;
1257
1306
  } catch {
1258
1307
  return 0;
1259
1308
  }
1260
1309
  }
1261
- function Je() {
1310
+ function st() {
1262
1311
  try {
1263
- const a = window.localStorage.getItem(he);
1264
- return a === "small" || a === "normal" || a === "large" ? a : "normal";
1312
+ const o = window.localStorage.getItem(ue);
1313
+ return o === "small" || o === "normal" || o === "large" ? o : "normal";
1265
1314
  } catch {
1266
1315
  return "normal";
1267
1316
  }
1268
1317
  }
1269
- function $(a, t) {
1318
+ function J(o, t) {
1270
1319
  const e = t[0] ?? "";
1271
1320
  try {
1272
- const i = window.localStorage.getItem(a);
1321
+ const i = window.localStorage.getItem(o);
1273
1322
  return i !== null && t.includes(i) ? i : e;
1274
1323
  } catch {
1275
1324
  return e;
1276
1325
  }
1277
1326
  }
1278
- class T {
1327
+ class S {
1279
1328
  constructor(t, e, i, r) {
1280
1329
  s(this, "layerEl");
1281
1330
  s(this, "bubbleEl");
@@ -1283,10 +1332,10 @@ class T {
1283
1332
  s(this, "seekBarEl");
1284
1333
  s(this, "labels");
1285
1334
  s(this, "activeTrack", null);
1286
- s(this, "fontSize", Je());
1287
- s(this, "bgColor", $(K, j));
1288
- s(this, "textColor", $(W, Y));
1289
- s(this, "rowIndex", Ze());
1335
+ s(this, "fontSize", st());
1336
+ s(this, "bgColor", J(Q, Y));
1337
+ s(this, "textColor", J(j, Z));
1338
+ s(this, "rowIndex", it());
1290
1339
  s(this, "dragging", !1);
1291
1340
  /** Kontrol çubuğu görünür mü — görünürken altyazı seek bar'ın üstünde, değilken en altta. */
1292
1341
  s(this, "chromeVisible", !0);
@@ -1315,7 +1364,7 @@ class T {
1315
1364
  t.button !== 0 && t.pointerType === "mouse" || (t.preventDefault(), this.dragging = !0, this.dragMoved = !1, this.dragStartClientY = t.clientY, this.dragStartBottomPx = this.pxForRow(this.rowIndex), this.bubbleEl.setPointerCapture(t.pointerId), this.bubbleEl.classList.add("hp-caption-dragging"), this.bubbleEl.addEventListener("pointermove", this.onPointerMove), this.bubbleEl.addEventListener("pointerup", this.onPointerUp), this.bubbleEl.addEventListener("pointercancel", this.onPointerUp));
1316
1365
  });
1317
1366
  s(this, "onPointerMove", (t) => {
1318
- this.dragging && (this.pendingDeltaPx = t.clientY - this.dragStartClientY, Math.abs(this.pendingDeltaPx) > Ye && (this.dragMoved = !0), this.rafId === null && (this.rafId = requestAnimationFrame(this.applyPendingDrag)));
1367
+ this.dragging && (this.pendingDeltaPx = t.clientY - this.dragStartClientY, Math.abs(this.pendingDeltaPx) > et && (this.dragMoved = !0), this.rafId === null && (this.rafId = requestAnimationFrame(this.applyPendingDrag)));
1319
1368
  });
1320
1369
  s(this, "applyPendingDrag", () => {
1321
1370
  if (this.rafId = null, !this.dragging) return;
@@ -1324,8 +1373,8 @@ class T {
1324
1373
  });
1325
1374
  s(this, "onPointerUp", (t) => {
1326
1375
  if (!this.dragging || (this.dragging = !1, this.bubbleEl.releasePointerCapture(t.pointerId), this.bubbleEl.removeEventListener("pointermove", this.onPointerMove), this.bubbleEl.removeEventListener("pointerup", this.onPointerUp), this.bubbleEl.removeEventListener("pointercancel", this.onPointerUp), this.rafId !== null && (cancelAnimationFrame(this.rafId), this.rafId = null), this.bubbleEl.classList.remove("hp-caption-dragging"), !this.dragMoved)) return;
1327
- const { min: e, max: i } = this.bounds(), r = Math.min(i, Math.max(e, this.dragStartBottomPx - this.pendingDeltaPx)), o = i > e ? (r - e) / (i - e) : 0, n = Math.round(o * (L - 1));
1328
- this.setRowIndex(n, !0, r);
1376
+ const { min: e, max: i } = this.bounds(), r = Math.min(i, Math.max(e, this.dragStartBottomPx - this.pendingDeltaPx)), n = i > e ? (r - e) / (i - e) : 0, a = Math.round(n * (R - 1));
1377
+ this.setRowIndex(a, !0);
1329
1378
  });
1330
1379
  this.videoArea = e, this.seekBarEl = i, this.labels = r, this.layerEl = document.createElement("div"), this.layerEl.className = "hp-caption-layer", this.layerEl.setAttribute("part", "caption-layer"), this.bubbleEl = document.createElement("div"), this.bubbleEl.className = "hp-caption-bubble", this.bubbleEl.setAttribute("part", "caption-bubble"), this.bubbleEl.setAttribute("role", "note"), this.bubbleEl.setAttribute("aria-label", r.captionDragHandle), this.bubbleEl.tabIndex = -1, this.applyFontSizeVar(), this.bubbleEl.style.setProperty("--hp-caption-bg", this.bgColor), this.bubbleEl.style.setProperty("--hp-caption-text", this.textColor), this.layerEl.appendChild(this.bubbleEl), this.bubbleEl.addEventListener("pointerdown", this.onPointerDown), this.resizeObserver = new ResizeObserver(() => this.recomputePosition()), this.resizeObserver.observe(this.videoArea), this.recomputePosition();
1331
1380
  }
@@ -1339,7 +1388,7 @@ class T {
1339
1388
  setFontSize(t) {
1340
1389
  this.fontSize = t, this.applyFontSizeVar(), this.recomputePosition();
1341
1390
  try {
1342
- window.localStorage.setItem(he, t);
1391
+ window.localStorage.setItem(ue, t);
1343
1392
  } catch {
1344
1393
  }
1345
1394
  }
@@ -1349,7 +1398,7 @@ class T {
1349
1398
  setBgColor(t) {
1350
1399
  this.bgColor = t, this.bubbleEl.style.setProperty("--hp-caption-bg", t);
1351
1400
  try {
1352
- window.localStorage.setItem(K, t);
1401
+ window.localStorage.setItem(Q, t);
1353
1402
  } catch {
1354
1403
  }
1355
1404
  }
@@ -1359,7 +1408,7 @@ class T {
1359
1408
  setTextColor(t) {
1360
1409
  this.textColor = t, this.bubbleEl.style.setProperty("--hp-caption-text", t);
1361
1410
  try {
1362
- window.localStorage.setItem(W, t);
1411
+ window.localStorage.setItem(j, t);
1363
1412
  } catch {
1364
1413
  }
1365
1414
  }
@@ -1372,23 +1421,37 @@ class T {
1372
1421
  this.labels = t, this.bubbleEl.setAttribute("aria-label", t.captionDragHandle);
1373
1422
  }
1374
1423
  applyFontSizeVar() {
1375
- this.bubbleEl.style.setProperty("--hp-caption-size-multiplier", String($e[this.fontSize]));
1424
+ this.bubbleEl.style.setProperty("--hp-caption-size-multiplier", String(tt[this.fontSize]));
1376
1425
  }
1377
1426
  bounds() {
1378
- const t = this.videoArea.getBoundingClientRect(), e = this.seekBarEl.getBoundingClientRect(), r = (this.bubbleEl.getBoundingClientRect().height || 32) + Qe, o = Math.max(je, Math.round(t.height * 0.04)), n = this.chromeVisible && e.height > 0 ? Math.max(0, Math.round(t.bottom - e.top + (this.videoArea.hasAttribute("data-compact") ? We : Ke))) : o, l = Math.max(n, Math.round(t.height - r));
1379
- return { min: n, max: l };
1427
+ const t = this.videoArea.getBoundingClientRect(), e = this.seekBarEl.getBoundingClientRect(), r = (this.bubbleEl.getBoundingClientRect().height || 32) + je, n = Math.max(Je, Math.round(t.height * 0.04)), a = this.chromeVisible && e.height > 0 ? Math.max(0, Math.round(t.bottom - e.top + (this.videoArea.hasAttribute("data-compact") ? Ze : Ye))) : n, l = Math.max(a, Math.round(t.height - r));
1428
+ return { min: a, max: l };
1380
1429
  }
1381
1430
  pxForRow(t) {
1382
- const { min: e, max: i } = this.bounds(), r = t / (L - 1);
1431
+ const { min: e, max: i } = this.bounds(), r = t / (R - 1);
1383
1432
  return Math.round(e + r * (i - e));
1384
1433
  }
1434
+ /**
1435
+ * Balonun EKRANDA şu an durduğu konum (bottom, px): yazılı `bottom` + o anki transform'un dikey kayması.
1436
+ * Sürükleme her karede bir kez çiziliyor — hızlı fırlatmada son hareket çizilmeden bırakılınca, son fare konumundan
1437
+ * başlayan animasyon balonu önce oraya ışınlıyordu (zıplama). Süren bir kayma animasyonunun ortası da böyle okunur.
1438
+ */
1439
+ visualBottomPx() {
1440
+ const t = parseFloat(this.bubbleEl.style.bottom || "0");
1441
+ try {
1442
+ const e = getComputedStyle(this.bubbleEl).transform;
1443
+ return !e || e === "none" ? t : t - new DOMMatrixReadOnly(e).m42;
1444
+ } catch {
1445
+ return t;
1446
+ }
1447
+ }
1385
1448
  /** FLIP: bottom anında yazılır, yalnızca transform animasyonlanır — bottom'u animasyonlamak bırakınca zıplatıyordu. */
1386
- setRowIndex(t, e, i) {
1387
- this.rowIndex = Math.min(L - 1, Math.max(0, t));
1388
- const r = this.pxForRow(this.rowIndex), o = i ?? parseFloat(this.bubbleEl.style.bottom || `${r}`);
1389
- e && o !== r ? (this.bubbleEl.classList.add("hp-caption-no-transition"), this.bubbleEl.style.bottom = `${r}px`, this.bubbleEl.style.transform = `translateX(-50%) translateY(${r - o}px)`, this.bubbleEl.offsetHeight, this.bubbleEl.classList.remove("hp-caption-no-transition"), this.bubbleEl.style.transform = "translateX(-50%)") : (this.bubbleEl.style.transform = "translateX(-50%)", this.bubbleEl.style.bottom = `${r}px`);
1449
+ setRowIndex(t, e) {
1450
+ this.rowIndex = Math.min(R - 1, Math.max(0, t));
1451
+ const i = this.pxForRow(this.rowIndex), r = this.visualBottomPx();
1452
+ e && Math.abs(r - i) > 0.5 ? (this.bubbleEl.classList.add("hp-caption-no-transition"), this.bubbleEl.style.bottom = `${i}px`, this.bubbleEl.style.transform = `translateX(-50%) translateY(${i - r}px)`, this.bubbleEl.offsetHeight, this.bubbleEl.classList.remove("hp-caption-no-transition"), this.bubbleEl.style.transform = "translateX(-50%)") : (this.bubbleEl.classList.add("hp-caption-no-transition"), this.bubbleEl.style.transform = "translateX(-50%)", this.bubbleEl.style.bottom = `${i}px`, this.bubbleEl.offsetHeight, this.bubbleEl.classList.remove("hp-caption-no-transition"));
1390
1453
  try {
1391
- window.localStorage.setItem(le, String(this.rowIndex));
1454
+ window.localStorage.setItem(de, String(this.rowIndex));
1392
1455
  } catch {
1393
1456
  }
1394
1457
  }
@@ -1404,8 +1467,8 @@ class T {
1404
1467
  this.activeTrack && this.activeTrack.removeEventListener("cuechange", this.onCueChange), this.resizeObserver.disconnect(), this.rafId !== null && cancelAnimationFrame(this.rafId), this.bubbleEl.removeEventListener("pointerdown", this.onPointerDown);
1405
1468
  }
1406
1469
  }
1407
- s(T, "BG_COLOR_PRESETS", j), s(T, "TEXT_COLOR_PRESETS", Y);
1408
- class et {
1470
+ s(S, "BG_COLOR_PRESETS", Y), s(S, "TEXT_COLOR_PRESETS", Z);
1471
+ class rt {
1409
1472
  constructor(t) {
1410
1473
  s(this, "el");
1411
1474
  s(this, "bufferedEl");
@@ -1421,8 +1484,8 @@ class et {
1421
1484
  this.playedEl.style.transform = `scaleX(${Math.min(1, this.video.currentTime / t)})`;
1422
1485
  const { buffered: i } = this.video;
1423
1486
  let r = 0;
1424
- for (let o = 0; o < i.length; o++)
1425
- i.start(o) <= this.video.currentTime && (r = Math.max(r, i.end(o)));
1487
+ for (let n = 0; n < i.length; n++)
1488
+ i.start(n) <= this.video.currentTime && (r = Math.max(r, i.end(n)));
1426
1489
  this.bufferedEl.style.transform = `scaleX(${Math.min(1, r / t)})`;
1427
1490
  });
1428
1491
  this.video = t, this.el = document.createElement("div"), this.el.className = "hp-mini-progress", this.el.setAttribute("part", "mini-progress"), this.el.setAttribute("aria-hidden", "true"), this.bufferedEl = document.createElement("div"), this.bufferedEl.className = "hp-mini-progress-fill hp-mini-progress-buffered", this.playedEl = document.createElement("div"), this.playedEl.className = "hp-mini-progress-fill hp-mini-progress-played", this.el.append(this.bufferedEl, this.playedEl), t.addEventListener("play", this.sync), t.addEventListener("pause", this.sync), t.addEventListener("timeupdate", this.render), t.addEventListener("progress", this.render), t.addEventListener("durationchange", this.render);
@@ -1444,8 +1507,8 @@ class et {
1444
1507
  this.rafId !== null && cancelAnimationFrame(this.rafId), this.rafId = null;
1445
1508
  }
1446
1509
  }
1447
- const tt = 1e3, it = 800, st = '<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M9.3 5.3a1.2 1.2 0 0 1 1.7 0l5.8 5.8a1.2 1.2 0 0 1 0 1.8l-5.8 5.8a1.2 1.2 0 0 1-1.7-1.7l4.9-5-4.9-5a1.2 1.2 0 0 1 0-1.7z"/></svg>';
1448
- class rt {
1510
+ const nt = 1e3, ot = 800, at = '<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M9.3 5.3a1.2 1.2 0 0 1 1.7 0l5.8 5.8a1.2 1.2 0 0 1 0 1.8l-5.8 5.8a1.2 1.2 0 0 1-1.7-1.7l4.9-5-4.9-5a1.2 1.2 0 0 1 0-1.7z"/></svg>';
1511
+ class lt {
1449
1512
  constructor(t) {
1450
1513
  s(this, "el");
1451
1514
  s(this, "valueEl");
@@ -1456,7 +1519,7 @@ class rt {
1456
1519
  s(this, "hideTimer", null);
1457
1520
  this.labels = t, this.el = document.createElement("div"), this.el.className = "hp-seek-fb", this.el.setAttribute("part", "seek-feedback");
1458
1521
  const e = document.createElement("span");
1459
- e.className = "hp-seek-fb-chevrons", e.innerHTML = st.repeat(3);
1522
+ e.className = "hp-seek-fb-chevrons", e.innerHTML = at.repeat(3);
1460
1523
  const i = document.createElement("span");
1461
1524
  i.className = "hp-seek-fb-value", this.valueEl = document.createElement("span"), this.valueEl.className = "hp-seek-fb-num", this.unitEl = document.createElement("span"), this.unitEl.className = "hp-seek-fb-unit", i.append(this.valueEl, this.unitEl), this.liveEl = document.createElement("span"), this.liveEl.className = "hp-sr-only", this.liveEl.setAttribute("aria-live", "polite"), this.el.append(e, i, this.liveEl);
1462
1525
  }
@@ -1464,17 +1527,17 @@ class rt {
1464
1527
  show(t) {
1465
1528
  if (!t) return;
1466
1529
  const e = Date.now(), i = Math.sign(t) === Math.sign(this.total);
1467
- this.total = i && e - this.lastAt < tt ? this.total + t : t, this.lastAt = e;
1468
- const r = Math.round(Math.abs(this.total) * 10) / 10, o = this.total > 0;
1469
- this.el.dataset.side = o ? "forward" : "back", this.valueEl.textContent = `${o ? "+" : "−"}${r}`, this.unitEl.textContent = this.labels.secondsShort, this.liveEl.textContent = (o ? this.labels.skipForward : this.labels.skipBack)(r), this.valueEl.classList.remove("hp-seek-fb-bump"), this.valueEl.offsetWidth, this.valueEl.classList.add("hp-seek-fb-bump"), this.el.setAttribute("data-visible", ""), this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = setTimeout(() => {
1530
+ this.total = i && e - this.lastAt < nt ? this.total + t : t, this.lastAt = e;
1531
+ const r = Math.round(Math.abs(this.total) * 10) / 10, n = this.total > 0;
1532
+ this.el.dataset.side = n ? "forward" : "back", this.valueEl.textContent = `${n ? "+" : "−"}${r}`, this.unitEl.textContent = this.labels.secondsShort, this.liveEl.textContent = (n ? this.labels.skipForward : this.labels.skipBack)(r), this.valueEl.classList.remove("hp-seek-fb-bump"), this.valueEl.offsetWidth, this.valueEl.classList.add("hp-seek-fb-bump"), this.el.setAttribute("data-visible", ""), this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = setTimeout(() => {
1470
1533
  this.el.removeAttribute("data-visible"), this.total = 0;
1471
- }, it);
1534
+ }, ot);
1472
1535
  }
1473
1536
  destroy() {
1474
1537
  this.hideTimer && clearTimeout(this.hideTimer), this.el.remove();
1475
1538
  }
1476
1539
  }
1477
- class ot {
1540
+ class ht {
1478
1541
  constructor(t) {
1479
1542
  s(this, "el");
1480
1543
  s(this, "open", !1);
@@ -1509,20 +1572,52 @@ class ot {
1509
1572
  return h;
1510
1573
  })
1511
1574
  ), this.el.setAttribute("data-open", ""), this.open = !0;
1512
- const r = this.container.getBoundingClientRect(), { width: o, height: n } = this.el.getBoundingClientRect(), l = Math.max(4, Math.min(t - r.left, r.width - o - 4)), d = Math.max(4, Math.min(e - r.top, r.height - n - 4));
1575
+ const r = this.container.getBoundingClientRect(), { width: n, height: a } = this.el.getBoundingClientRect(), l = Math.max(4, Math.min(t - r.left, r.width - n - 4)), d = Math.max(4, Math.min(e - r.top, r.height - a - 4));
1513
1576
  this.el.style.left = `${l}px`, this.el.style.top = `${d}px`, (m = this.el.querySelector("button")) == null || m.focus({ preventScroll: !0 }), document.addEventListener("pointerdown", this.onOutside, !0), document.addEventListener("keydown", this.onKeyDown, !0), window.addEventListener("blur", this.close), window.addEventListener("resize", this.close), window.addEventListener("scroll", this.close, !0);
1514
1577
  }
1515
1578
  destroy() {
1516
1579
  this.close(), this.el.remove();
1517
1580
  }
1518
1581
  }
1519
- const nt = '@font-face{font-family:hope-icons;src:url(data:font/woff2;base64,d09GMgABAAAAAAq4AAsAAAAAIQwAAAprAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACEUAqySKthATYCJANICyYABCAFhC4HgWgbvBwzo8LGASCo7UymWhxkcsp3plRjG4rgPXRJJ9fVhsrU04g9KovY4vJpzld+YERwXGwRdmsE0Nr/Zk+ea/0/eUbEQ4UkolEzJRAyHrJGXayR33zvZk3CzJDWKUloHZmgFSSUioXQOu8CNQvUV7Fz8RXl3Ff898T9fqr+cyupw8KUzXXM2Pc+Y3RIJIjjFblsLVvy9ORekUJtZff2i6NK8HjGMyiHsTj9XUbnwv7/5kp7XCD8BeOOdcGZSfIPsrM5QkzeZXkOQfZVEUhABwAKUDggdBWmwp5bI3wNxmYesGjMYIr2ErZ95PkIqFi1QbLtbd8xjZO6BExkeO9AXDacdLVGaREsKykblAQF2QOGr+GZnLCNToCd/mP/b+whiTzFT+iQ3V55GcVWeDl7aTn8s6k7GfaeIEeKxYmFhovl0aeRhuKiTyui6MwWuvtMILZmMyJXmPauCBKpTL74D15RSVlFVU1dQ1NLm1DAaQ2OX3LaRDYIRJAQQUoEGRHkRFAggiIRlIigTAQVIqgSQY0I6kTQIIImEbSI1bRBx608h/NQqSHkKT7yEZrrR2RPz6ctjRGDG5nJdrydkGbZiKODliytnkQsNhY5zUiogdvU37V1d09VV/e/414obRN7aOtEcNuERYBt776fN6bYNjY63h7GWD6eyOzdToMjKDRrjCXJZr6PdPyOdIdliibDmY2DqAUiWGJXYrWbDrSyw7NEkZiDxS9mCaRGQoacgc4Vp4BTwymzoEiV7PaZGCgBITVhA7JtEsZc5ASmgO2SkAMyMFgQmuq5iujoEyqvKQfh+ukR7o4c9Ap115TXFY7qFaoorcaYFmYCFyoiBGkBrw9PQZUv3e3GSCR5o5UBQA8LWNGSDhBOBCPsUr6WQw5qT07UrqNN4zsQ4OlmQZFen2wp7PHCFdfIKYioSnqbs3Pk8WigFxYQNeXWa0IbetamJN7LPsyq18kUrjtzOiK77e168SK3kAwhq8pHFH0E2shMekcD9uECvCfHMxqJQIxCafozKBVerE1Atb0FbZuybniE50mGWDJmhE8a4XPlCFeJYw+K6N7pjtZhdEynJ3U6GuWotlP9NzzMceyjTscMc0nDXJ5TjnLsQQBE2kRA25Uu056bc3Guzv00q35/s2NVVdXVNWVfE8XGxhZnfXV1b++sw95W2m7MHXcIgm2uy1VR0TF0wsriUh5VSuLUKzGzoYAqoVzXDm0Ogm2nRdc41sTVGggQ7XUWXSh3kOjR8GZS0i4NL6TUQCoshWvmQL3wmWstTCYUjGn1s4Ga9/gWSblci2NEZu58tHd2LLw71dOjP9jOQ0+Drd5R+1jgk4rnOo2qkX/55OIpo0pBCZg/vx40NI+GyPM2iJ6KUOblTr92xmfF2KzavOf/0LpOlQ/ELz1GcdPDYYhvaNSjw6iqRIdF7mkRC345pqgR2S8gPCyGIqoSC4nCnp3IJIZpG3lpruEwRS3IwfXGpVcd0uCnq7yif/c06tJhXFxEFDAaEeWHPslZ3z+Nw2IfXCJd0GqHKyRediMy8NPoIVoRKcjB72WtBlblT8QteSs5oihS/gURYkVZUpSILLK//5swQZT+3MTuXDyGQPRkf/03YYwqVAF9/6v1Kn+K8+B9WCDBKMbRIBFwzDIl6sg8mgWuFrcVeArvNKm3HsuyqHGXTNBTl0ffUumpqqqrEQTm27Kevu6Cz0VnzDtWccpph/F3jdEqrrk5jXwa+tWhImBggMGCgl+3qMqEGTUuyaKgWBvWYp6IcjCmJsIJNRKVRdaKmYtpQMMiH6UHHg0Fr8FazAkrGq+niSp6oICj4tjKinI0QobGnjab8Fi7+8wiy+H67e8e6ttyeJyHA4ZeCDlDlmHdj7qSnk9cn+QrCJ+GV1K6Il5CECYWX6RLkXw+tkM0nHhneUW2di9SkLAIsiQoGR35BM4+PpBMJncxoGAKAlBMS5JPJsgSyu2aQstGZVjn2Hm/ghoboGAd+QgVPuRysUlHECWGxLEcldmFXozgeEZ6TrdFyozDykOVqQlbdM+F3H+wxHuH8Jb7/IFTKKho7htfuvDG57eYtzx/44VL433NFQXvC176RgRtFpPnAqv7QpNFX/px6kOge5cgtJpNpuQGd9xkpg1DyDgtjQGC+52MliNeCSup9HNrmRE/gZD4RzLz+ySdUrDkJZyWAd+8qyk2lHg86r7njTrdE60ajWWLn4WawM/ZtAZKw/let8adzehoWFWv15uMXZ9cnzTp9bi+gq665Isatzd/WJqaLnwqkMH6t1g0PPKpXp1M4j6Pp6SB1ZZ1/Ccpvg1pbYGensXFdCpx3nmJVHpxsacnYCsyjOgmgf9nMxu4t4I7m3q/iGXJ+tTJs/a07xHbyoHkCeatcPXZx7qvz36+b8+zizl3hevv+mv03uy+bqwRCnUS4jYyzZvhPt+/Rbaw+006C7LoRhol2khxm5DeRNNR8L93X/be0b/uqg/flbP47J59n2ev7z52dnX4LeZE8sCK7RHf0/zsyWk9yca+6G3aGXyL25A5qScTNIISJ9eLRZYUvwWC+loJzuQYJdoEhivMGmkpIspTODwZdO7HGpvZnHLb79t30cVdjRljyxxG85x/DY2ZrsaLL9qn1LlTZrNNg/PWxNDa+tbFWn5t6/y6y8WPTBP9jkJH/xWdZzccoxSEWMtZJ/pYkJzh4FiYJEsIT2rXthduO+20tXUDA60uVz4nrm9r/KVZt3baabfd9/7Y+LWKvZSmS+3KteNj7zdcxQGAo+gsB+X56HHIjIp1mzb9aLF0vF56bE6jQuU9pJNN3NPpro2XARycHu8OSV1dUqh7/HFrnxVD6PPGEzljOYm41wchzl+mpyeggcgJJiETQ5IncpJJyqQkx/0oJBbZE0Eo4pEtBGZQ+hgROPf/LQAAAKhnqTYAAKDGqBVjwk3USO/XqNP8Ca9Qp0x4iZqecBY1NuFLav2ubqbCAPx/iPqWusMQf5ehV8LuRaEL+7C0Ho6fZn1ApQE1+0AAPNz25r/zRW2/MlHVBNycf+4uvLuNUXIsOvAfhHfS3Ked1y/GzZ3Y+xPQCZv0tCdWaBozPLbl/dA0CDGOTBQXCDENpTZsM8cp5KrmoaBiFSoWrDlwVddxqZCVBT1XDUg0PIJUz3PbzPEF5AZeQ0HPB6i4/wf/QHM8hKdGIq+ckZA/1J3XKSMjD/IjZSdB7dbbgtvxLnDShSt1uKh8rPcVq2ySVr1JKOy9qJjkj01ZN6XEx83Grv7SayMtGogItuIYiICMD1Cj46Gl0gbz1X9AQobbbb6yw2ylbN9pkFxaK2DVuR9wgZJxRI09QoGFYpEgWihvzXhkenjInEbxnv7ADArWmgaZEY82pjkrS9cDS62yrgIwBL+yd9SjPg1oSCMa04SmNKM5LWhJV3RNN3RLd3SPoWnY/C/cn3dMElaebRkaL5lvbOd9Nok5rDgUTteZK3t2ZVAnVw28SBxG3WXuRxcH0evLJHMpLtR5mv9dXB1010J4QlbSSadqfhTftbxqXN3MFqleTgtWqO0KV+NKYmgeBAA=) format("woff2");font-weight:400;font-style:normal;font-display:block}', Z = "hope-player-icon-font";
1520
- function at() {
1521
- if (typeof document > "u" || document.getElementById(Z)) return;
1522
- const a = document.createElement("style");
1523
- a.id = Z, a.textContent = nt, document.head.appendChild(a);
1582
+ const pt = 3e3, ee = 200;
1583
+ class ct {
1584
+ constructor() {
1585
+ s(this, "list", []);
1586
+ /** Kayıt eklenince / temizlenince (açık panel canlı güncellenir). */
1587
+ s(this, "onChange", null);
1588
+ }
1589
+ get entries() {
1590
+ return this.list;
1591
+ }
1592
+ add(t) {
1593
+ var r, n;
1594
+ const e = Date.now(), i = this.list[this.list.length - 1];
1595
+ if (i && e - i.time < pt && i.source === t.source && i.message === t.message && JSON.stringify(i.details ?? {}) === JSON.stringify(t.details ?? {})) {
1596
+ i.count = (i.count ?? 1) + 1, i.time = e, (r = this.onChange) == null || r.call(this);
1597
+ return;
1598
+ }
1599
+ this.list.push({ time: e, ...t }), this.list.length > ee && this.list.splice(0, this.list.length - ee), (n = this.onChange) == null || n.call(this);
1600
+ }
1601
+ clear() {
1602
+ var t;
1603
+ this.list.length = 0, (t = this.onChange) == null || t.call(this);
1604
+ }
1605
+ /** Destek ekibine yapıştırılabilir düz metin. */
1606
+ toText() {
1607
+ return this.list.map((t) => {
1608
+ const e = Object.entries(t.details ?? {}).filter(([, r]) => r !== void 0 && r !== "").map(([r, n]) => `${r}=${n}`).join(" "), i = t.count && t.count > 1 ? ` (x${t.count})` : "";
1609
+ return `${new Date(t.time).toISOString()} [${t.source}]${t.fatal ? " [fatal]" : ""} ${t.message}${i}${e ? ` | ${e}` : ""}`;
1610
+ }).join(`
1611
+ `);
1612
+ }
1613
+ }
1614
+ const dt = '@font-face{font-family:hope-icons;src:url(data:font/woff2;base64,d09GMgABAAAAAAq4AAsAAAAAIQwAAAprAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACEUAqySKthATYCJANICyYABCAFhC4HgWgbvBwzo8LGASCo7UymWhxkcsp3plRjG4rgPXRJJ9fVhsrU04g9KovY4vJpzld+YERwXGwRdmsE0Nr/Zk+ea/0/eUbEQ4UkolEzJRAyHrJGXayR33zvZk3CzJDWKUloHZmgFSSUioXQOu8CNQvUV7Fz8RXl3Ff898T9fqr+cyupw8KUzXXM2Pc+Y3RIJIjjFblsLVvy9ORekUJtZff2i6NK8HjGMyiHsTj9XUbnwv7/5kp7XCD8BeOOdcGZSfIPsrM5QkzeZXkOQfZVEUhABwAKUDggdBWmwp5bI3wNxmYesGjMYIr2ErZ95PkIqFi1QbLtbd8xjZO6BExkeO9AXDacdLVGaREsKykblAQF2QOGr+GZnLCNToCd/mP/b+whiTzFT+iQ3V55GcVWeDl7aTn8s6k7GfaeIEeKxYmFhovl0aeRhuKiTyui6MwWuvtMILZmMyJXmPauCBKpTL74D15RSVlFVU1dQ1NLm1DAaQ2OX3LaRDYIRJAQQUoEGRHkRFAggiIRlIigTAQVIqgSQY0I6kTQIIImEbSI1bRBx608h/NQqSHkKT7yEZrrR2RPz6ctjRGDG5nJdrydkGbZiKODliytnkQsNhY5zUiogdvU37V1d09VV/e/414obRN7aOtEcNuERYBt776fN6bYNjY63h7GWD6eyOzdToMjKDRrjCXJZr6PdPyOdIdliibDmY2DqAUiWGJXYrWbDrSyw7NEkZiDxS9mCaRGQoacgc4Vp4BTwymzoEiV7PaZGCgBITVhA7JtEsZc5ASmgO2SkAMyMFgQmuq5iujoEyqvKQfh+ukR7o4c9Ap115TXFY7qFaoorcaYFmYCFyoiBGkBrw9PQZUv3e3GSCR5o5UBQA8LWNGSDhBOBCPsUr6WQw5qT07UrqNN4zsQ4OlmQZFen2wp7PHCFdfIKYioSnqbs3Pk8WigFxYQNeXWa0IbetamJN7LPsyq18kUrjtzOiK77e168SK3kAwhq8pHFH0E2shMekcD9uECvCfHMxqJQIxCafozKBVerE1Atb0FbZuybniE50mGWDJmhE8a4XPlCFeJYw+K6N7pjtZhdEynJ3U6GuWotlP9NzzMceyjTscMc0nDXJ5TjnLsQQBE2kRA25Uu056bc3Guzv00q35/s2NVVdXVNWVfE8XGxhZnfXV1b++sw95W2m7MHXcIgm2uy1VR0TF0wsriUh5VSuLUKzGzoYAqoVzXDm0Ogm2nRdc41sTVGggQ7XUWXSh3kOjR8GZS0i4NL6TUQCoshWvmQL3wmWstTCYUjGn1s4Ga9/gWSblci2NEZu58tHd2LLw71dOjP9jOQ0+Drd5R+1jgk4rnOo2qkX/55OIpo0pBCZg/vx40NI+GyPM2iJ6KUOblTr92xmfF2KzavOf/0LpOlQ/ELz1GcdPDYYhvaNSjw6iqRIdF7mkRC345pqgR2S8gPCyGIqoSC4nCnp3IJIZpG3lpruEwRS3IwfXGpVcd0uCnq7yif/c06tJhXFxEFDAaEeWHPslZ3z+Nw2IfXCJd0GqHKyRediMy8NPoIVoRKcjB72WtBlblT8QteSs5oihS/gURYkVZUpSILLK//5swQZT+3MTuXDyGQPRkf/03YYwqVAF9/6v1Kn+K8+B9WCDBKMbRIBFwzDIl6sg8mgWuFrcVeArvNKm3HsuyqHGXTNBTl0ffUumpqqqrEQTm27Kevu6Cz0VnzDtWccpph/F3jdEqrrk5jXwa+tWhImBggMGCgl+3qMqEGTUuyaKgWBvWYp6IcjCmJsIJNRKVRdaKmYtpQMMiH6UHHg0Fr8FazAkrGq+niSp6oICj4tjKinI0QobGnjab8Fi7+8wiy+H67e8e6ttyeJyHA4ZeCDlDlmHdj7qSnk9cn+QrCJ+GV1K6Il5CECYWX6RLkXw+tkM0nHhneUW2di9SkLAIsiQoGR35BM4+PpBMJncxoGAKAlBMS5JPJsgSyu2aQstGZVjn2Hm/ghoboGAd+QgVPuRysUlHECWGxLEcldmFXozgeEZ6TrdFyozDykOVqQlbdM+F3H+wxHuH8Jb7/IFTKKho7htfuvDG57eYtzx/44VL433NFQXvC176RgRtFpPnAqv7QpNFX/px6kOge5cgtJpNpuQGd9xkpg1DyDgtjQGC+52MliNeCSup9HNrmRE/gZD4RzLz+ySdUrDkJZyWAd+8qyk2lHg86r7njTrdE60ajWWLn4WawM/ZtAZKw/let8adzehoWFWv15uMXZ9cnzTp9bi+gq665Isatzd/WJqaLnwqkMH6t1g0PPKpXp1M4j6Pp6SB1ZZ1/Ccpvg1pbYGensXFdCpx3nmJVHpxsacnYCsyjOgmgf9nMxu4t4I7m3q/iGXJ+tTJs/a07xHbyoHkCeatcPXZx7qvz36+b8+zizl3hevv+mv03uy+bqwRCnUS4jYyzZvhPt+/Rbaw+006C7LoRhol2khxm5DeRNNR8L93X/be0b/uqg/flbP47J59n2ev7z52dnX4LeZE8sCK7RHf0/zsyWk9yca+6G3aGXyL25A5qScTNIISJ9eLRZYUvwWC+loJzuQYJdoEhivMGmkpIspTODwZdO7HGpvZnHLb79t30cVdjRljyxxG85x/DY2ZrsaLL9qn1LlTZrNNg/PWxNDa+tbFWn5t6/y6y8WPTBP9jkJH/xWdZzccoxSEWMtZJ/pYkJzh4FiYJEsIT2rXthduO+20tXUDA60uVz4nrm9r/KVZt3baabfd9/7Y+LWKvZSmS+3KteNj7zdcxQGAo+gsB+X56HHIjIp1mzb9aLF0vF56bE6jQuU9pJNN3NPpro2XARycHu8OSV1dUqh7/HFrnxVD6PPGEzljOYm41wchzl+mpyeggcgJJiETQ5IncpJJyqQkx/0oJBbZE0Eo4pEtBGZQ+hgROPf/LQAAAKhnqTYAAKDGqBVjwk3USO/XqNP8Ca9Qp0x4iZqecBY1NuFLav2ubqbCAPx/iPqWusMQf5ehV8LuRaEL+7C0Ho6fZn1ApQE1+0AAPNz25r/zRW2/MlHVBNycf+4uvLuNUXIsOvAfhHfS3Ked1y/GzZ3Y+xPQCZv0tCdWaBozPLbl/dA0CDGOTBQXCDENpTZsM8cp5KrmoaBiFSoWrDlwVddxqZCVBT1XDUg0PIJUz3PbzPEF5AZeQ0HPB6i4/wf/QHM8hKdGIq+ckZA/1J3XKSMjD/IjZSdB7dbbgtvxLnDShSt1uKh8rPcVq2ySVr1JKOy9qJjkj01ZN6XEx83Grv7SayMtGogItuIYiICMD1Cj46Gl0gbz1X9AQobbbb6yw2ylbN9pkFxaK2DVuR9wgZJxRI09QoGFYpEgWihvzXhkenjInEbxnv7ADArWmgaZEY82pjkrS9cDS62yrgIwBL+yd9SjPg1oSCMa04SmNKM5LWhJV3RNN3RLd3SPoWnY/C/cn3dMElaebRkaL5lvbOd9Nok5rDgUTteZK3t2ZVAnVw28SBxG3WXuRxcH0evLJHMpLtR5mv9dXB1010J4QlbSSadqfhTftbxqXN3MFqleTgtWqO0KV+NKYmgeBAA=) format("woff2");font-weight:400;font-style:normal;font-display:block}', te = "hope-player-icon-font";
1615
+ function ut() {
1616
+ if (typeof document > "u" || document.getElementById(te)) return;
1617
+ const o = document.createElement("style");
1618
+ o.id = te, o.textContent = dt, document.head.appendChild(o);
1524
1619
  }
1525
- const pe = {
1620
+ const me = {
1526
1621
  play: "Oynat",
1527
1622
  pause: "Duraklat",
1528
1623
  mute: "Sessize al",
@@ -1531,8 +1626,8 @@ const pe = {
1531
1626
  seekBar: "Video konumu",
1532
1627
  settings: "Ayarlar",
1533
1628
  pip: "Resim içinde resim",
1534
- skipBack: (a) => `${a} saniye geri`,
1535
- skipForward: (a) => `${a} saniye ileri`,
1629
+ skipBack: (o) => `${o} saniye geri`,
1630
+ skipForward: (o) => `${o} saniye ileri`,
1536
1631
  secondsShort: "sn",
1537
1632
  audioTrack: "Ses",
1538
1633
  statsTitle: "İstatistikler",
@@ -1548,6 +1643,21 @@ const pe = {
1548
1643
  statsSpeedVolume: "Hız / ses",
1549
1644
  statsSource: "Kaynak",
1550
1645
  statsVersion: "Sürüm",
1646
+ debugTitle: "Hata ayıklama",
1647
+ debugClose: "Hata ayıklamayı kapat",
1648
+ debugCopy: "Kopyala",
1649
+ debugCopied: "Kopyalandı",
1650
+ debugClear: "Temizle",
1651
+ debugEmpty: "Kayıtlı hata yok.",
1652
+ debugFatal: "Oynatmayı durdurdu",
1653
+ debugSourceMedia: "Medya",
1654
+ debugSourceStream: "Yayın",
1655
+ debugSourceAds: "Reklam",
1656
+ debugSourceSubtitles: "Altyazı",
1657
+ debugSourcePlayer: "Player",
1658
+ adLabel: "Reklam",
1659
+ adReturnFullscreen: "Tam ekrana dön",
1660
+ adReturnPip: "Küçük pencereye dön",
1551
1661
  fullscreenEnter: "Tam ekran",
1552
1662
  fullscreenExit: "Tam ekrandan çık",
1553
1663
  playbackSpeed: "Oynatma Hızı",
@@ -1578,7 +1688,7 @@ const pe = {
1578
1688
  geoUnknownCountry: "Ülke bilgisi bulunamadı.",
1579
1689
  redirectCancel: "İptal",
1580
1690
  redirectPlayNow: "Şimdi Oynat",
1581
- redirectCountdown: (a) => `Sıradaki video ${a} saniye içinde oynatılacak.`,
1691
+ redirectCountdown: (o) => `Sıradaki video ${o} saniye içinde oynatılacak.`,
1582
1692
  redirectNowPlaying: "Video oynatılıyor...",
1583
1693
  qrResumeTitle: "Devam etmek için kodu telefonunuzla okutun",
1584
1694
  qrResumeDontShowAgain: "Bir daha gösterme",
@@ -1594,7 +1704,7 @@ const pe = {
1594
1704
  playlistTitle: "Oynatma Listesi",
1595
1705
  playlistPrev: "Önceki",
1596
1706
  playlistNext: "Sonraki",
1597
- videoFallbackTitle: (a) => `Video ${a + 1}`,
1707
+ videoFallbackTitle: (o) => `Video ${o + 1}`,
1598
1708
  storyPrev: "Önceki video",
1599
1709
  storyNext: "Sonraki video",
1600
1710
  storyAllVideos: "Tüm videolar",
@@ -1602,7 +1712,7 @@ const pe = {
1602
1712
  liveClock: "Canlı saat",
1603
1713
  live: "CANLI",
1604
1714
  goToLive: "Canlıya git"
1605
- }, lt = {
1715
+ }, mt = {
1606
1716
  play: "Play",
1607
1717
  pause: "Pause",
1608
1718
  mute: "Mute",
@@ -1611,8 +1721,8 @@ const pe = {
1611
1721
  seekBar: "Seek",
1612
1722
  settings: "Settings",
1613
1723
  pip: "Picture-in-picture",
1614
- skipBack: (a) => `Back ${a} seconds`,
1615
- skipForward: (a) => `Forward ${a} seconds`,
1724
+ skipBack: (o) => `Back ${o} seconds`,
1725
+ skipForward: (o) => `Forward ${o} seconds`,
1616
1726
  secondsShort: "s",
1617
1727
  audioTrack: "Audio",
1618
1728
  statsTitle: "Stats",
@@ -1628,6 +1738,21 @@ const pe = {
1628
1738
  statsSpeedVolume: "Speed / volume",
1629
1739
  statsSource: "Source",
1630
1740
  statsVersion: "Version",
1741
+ debugTitle: "Debug log",
1742
+ debugClose: "Close debug log",
1743
+ debugCopy: "Copy",
1744
+ debugCopied: "Copied",
1745
+ debugClear: "Clear",
1746
+ debugEmpty: "No errors logged.",
1747
+ debugFatal: "Stopped playback",
1748
+ debugSourceMedia: "Media",
1749
+ debugSourceStream: "Stream",
1750
+ debugSourceAds: "Ads",
1751
+ debugSourceSubtitles: "Subtitles",
1752
+ debugSourcePlayer: "Player",
1753
+ adLabel: "Ad",
1754
+ adReturnFullscreen: "Back to full screen",
1755
+ adReturnPip: "Back to picture-in-picture",
1631
1756
  fullscreenEnter: "Fullscreen",
1632
1757
  fullscreenExit: "Exit fullscreen",
1633
1758
  playbackSpeed: "Playback speed",
@@ -1658,7 +1783,7 @@ const pe = {
1658
1783
  geoUnknownCountry: "No country information found.",
1659
1784
  redirectCancel: "Cancel",
1660
1785
  redirectPlayNow: "Play now",
1661
- redirectCountdown: (a) => `Next video will play in ${a} seconds.`,
1786
+ redirectCountdown: (o) => `Next video will play in ${o} seconds.`,
1662
1787
  redirectNowPlaying: "Now playing...",
1663
1788
  qrResumeTitle: "Scan to continue watching on your phone",
1664
1789
  qrResumeDontShowAgain: "Don't show again",
@@ -1674,7 +1799,7 @@ const pe = {
1674
1799
  playlistTitle: "Playlist",
1675
1800
  playlistPrev: "Previous",
1676
1801
  playlistNext: "Next",
1677
- videoFallbackTitle: (a) => `Video ${a + 1}`,
1802
+ videoFallbackTitle: (o) => `Video ${o + 1}`,
1678
1803
  storyPrev: "Previous video",
1679
1804
  storyNext: "Next video",
1680
1805
  storyAllVideos: "All videos",
@@ -1682,14 +1807,107 @@ const pe = {
1682
1807
  liveClock: "Live clock",
1683
1808
  live: "LIVE",
1684
1809
  goToLive: "Go to live"
1685
- }, ht = { tr: pe, en: lt };
1686
- function ce(a, t) {
1687
- return { ...ht[a ?? "tr"] ?? pe, ...t };
1810
+ }, bt = { tr: me, en: mt };
1811
+ function be(o, t) {
1812
+ return { ...bt[o ?? "tr"] ?? me, ...t };
1813
+ }
1814
+ function gt(o, t, e) {
1815
+ Object.assign(o, be(t, e));
1816
+ }
1817
+ const N = 8e3;
1818
+ function ft(o) {
1819
+ var t;
1820
+ return (t = o.live) != null && t.scte35 && !o.adTagPreroll && !o.adTagVmap ? !1 : !!(o.adTagPreroll || o.adTagVmap);
1821
+ }
1822
+ class vt {
1823
+ constructor(t) {
1824
+ /** Kapı kurulu (preroll bekleniyor) mu. */
1825
+ s(this, "armed", !1);
1826
+ /** Kapı kuruluyken kullanıcı / autoplay oynatmak istedi mi. */
1827
+ s(this, "playIntent", !1);
1828
+ /** Kapının kendi pause() çağrısının ürettiği 'pause' olayı yutulsun. */
1829
+ s(this, "swallowNextPause", !1);
1830
+ s(this, "timeoutMs", N);
1831
+ s(this, "timer", null);
1832
+ /** İlk oynatma isteği (reklam plugin'i bekleyen preroll'u başlatır). */
1833
+ s(this, "onPlayIntent", null);
1834
+ /** Zaman aşımı — reklam plugin'i geç gelecek cevabı iptal eder. Kapı bundan sonra içeriği başlatarak açılır. */
1835
+ s(this, "onTimeout", null);
1836
+ /** "Preroll bekleniyor" durumu değişti (UI: yükleme halkası, merkez buton). */
1837
+ s(this, "onWaitChange", null);
1838
+ s(this, "onPlay", (t) => {
1839
+ this.armed && (t.stopImmediatePropagation(), this.swallowNextPause = !0, this.video.pause(), this.registerIntent());
1840
+ });
1841
+ s(this, "onPause", (t) => {
1842
+ this.swallowNextPause && (this.swallowNextPause = !1, t.stopImmediatePropagation());
1843
+ });
1844
+ this.video = t, t.addEventListener("play", this.onPlay), t.addEventListener("pause", this.onPause);
1845
+ }
1846
+ get isArmed() {
1847
+ return this.armed;
1848
+ }
1849
+ /** Kapı kurulu ve oynatma istendi — kullanıcı preroll'u bekliyor. */
1850
+ get isWaiting() {
1851
+ return this.armed && this.playIntent;
1852
+ }
1853
+ get hasPlayIntent() {
1854
+ return this.playIntent;
1855
+ }
1856
+ arm(t = N) {
1857
+ this.clearTimer(), this.armed = !0, this.playIntent = !1, this.timeoutMs = t;
1858
+ }
1859
+ /**
1860
+ * Elementin `play()`'i için: kapı kuruluysa videoya dokunmadan oynatma isteği kaydedilir (play() promise'i
1861
+ * pause() ile reddedilip konsola "interrupted by a call to pause()" düşmesin). true → istek kapıda.
1862
+ */
1863
+ interceptPlay() {
1864
+ return this.armed ? (this.registerIntent(), !0) : !1;
1865
+ }
1866
+ /** Bekleme sırasında kullanıcı vazgeçti (duraklat'a bastı). Kapı kurulu kalır; preroll geri döner ama başlatılmaz. */
1867
+ cancelIntent() {
1868
+ var t;
1869
+ this.isWaiting && (this.playIntent = !1, this.clearTimer(), (t = this.onWaitChange) == null || t.call(this, !1));
1870
+ }
1871
+ /** Preroll sonuçlandı. `resume`: oynatma istenmişse içerik şimdi başlasın (reklam yok / hata / zaman aşımı). */
1872
+ release(t) {
1873
+ var i;
1874
+ if (!this.armed) return;
1875
+ const e = this.playIntent;
1876
+ this.armed = !1, this.playIntent = !1, this.clearTimer(), e && ((i = this.onWaitChange) == null || i.call(this, !1)), t && e && this.video.play().catch(() => {
1877
+ });
1878
+ }
1879
+ destroy() {
1880
+ this.clearTimer(), this.video.removeEventListener("play", this.onPlay), this.video.removeEventListener("pause", this.onPause);
1881
+ }
1882
+ registerIntent() {
1883
+ var t, e;
1884
+ this.playIntent || (this.playIntent = !0, (t = this.onWaitChange) == null || t.call(this, !0), this.timer = setTimeout(() => {
1885
+ var i;
1886
+ this.timer = null, (i = this.onTimeout) == null || i.call(this), this.release(!0);
1887
+ }, this.timeoutMs), (e = this.onPlayIntent) == null || e.call(this));
1888
+ }
1889
+ clearTimer() {
1890
+ this.timer && clearTimeout(this.timer), this.timer = null;
1891
+ }
1688
1892
  }
1689
- function pt(a, t, e) {
1690
- Object.assign(a, ce(t, e));
1893
+ const yt = [
1894
+ "https://imasdk.googleapis.com",
1895
+ "https://pubads.g.doubleclick.net",
1896
+ "https://securepubads.g.doubleclick.net",
1897
+ "https://pagead2.googlesyndication.com"
1898
+ ];
1899
+ let ie = !1;
1900
+ function kt() {
1901
+ if (!(ie || typeof document > "u")) {
1902
+ ie = !0;
1903
+ for (const o of yt) {
1904
+ if (document.head.querySelector(`link[rel="preconnect"][href="${o}"]`)) continue;
1905
+ const t = document.createElement("link");
1906
+ t.rel = "preconnect", t.href = o, document.head.appendChild(t);
1907
+ }
1908
+ }
1691
1909
  }
1692
- const ct = [0.5, 0.75, 1, 1.25, 1.5, 2], J = 1200, dt = 3e3, ee = 5e3, ut = 10, te = 10, mt = 5, ie = "stream-audio", B = "1.0.11", bt = (
1910
+ const xt = [0.5, 0.75, 1, 1.25, 1.5, 2], se = 1200, wt = 3e3, re = 5e3, Et = 10, ne = 10, Ct = 5, oe = "stream-audio", M = "1.0.12", Tt = (
1693
1911
  /* html */
1694
1912
  `
1695
1913
  <div class="video-area">
@@ -1700,7 +1918,7 @@ const ct = [0.5, 0.75, 1, 1.25, 1.5, 2], J = 1200, dt = 3e3, ee = 5e3, ut = 10,
1700
1918
  </div>
1701
1919
  `
1702
1920
  );
1703
- class de extends HTMLElement {
1921
+ class ge extends HTMLElement {
1704
1922
  constructor() {
1705
1923
  super();
1706
1924
  s(this, "root");
@@ -1718,6 +1936,15 @@ class de extends HTMLElement {
1718
1936
  s(this, "tooltip");
1719
1937
  s(this, "keyboard");
1720
1938
  s(this, "loadingSpinner");
1939
+ /**
1940
+ * Preroll kapısı — reklam plugin'i yüklenmeden önce kurulur ki autoplay / ilk play araya kaçmasın.
1941
+ * Video'nun 'play'/'pause' dinleyicilerinin İLKİ olmalı (yuttuğu olayları UI ve hp:play görmesin).
1942
+ */
1943
+ s(this, "prerollGate");
1944
+ /** Ads plugin kurulumu sürüyor — erken başlatılan kurulum ile sonraki bekleme aynı promise'i paylaşır. */
1945
+ s(this, "adsInstall", null);
1946
+ /** Yükleme halkası açık (medya takıldı / preroll bekleniyor) — kontroller bu sırada otomatik gizlenmez. */
1947
+ s(this, "loadingActive", !1);
1721
1948
  s(this, "errorScreen");
1722
1949
  /** İleri/geri sarmada sağda/solda beliren anlık bildirim. */
1723
1950
  s(this, "seekFeedback");
@@ -1726,6 +1953,11 @@ class de extends HTMLElement {
1726
1953
  s(this, "contextMenuConfig", { stats: !1 });
1727
1954
  /** İlk açılışta yüklenir (plugins/stats). */
1728
1955
  s(this, "statsPanel", null);
1956
+ s(this, "debugPanel", null);
1957
+ /** options.debug — sağ tık menüsündeki "Hata ayıklama" girişini açar. */
1958
+ s(this, "debugEnabled", !1);
1959
+ /** Player'ın tüm hataları (medya, yayın, reklam, altyazı) — her zaman tutulur; bkz. `errorLog`. */
1960
+ s(this, "log", new ct());
1729
1961
  /** Son basılan işaretçi türü — sağ tık menüsü yalnızca fareyle (dokunmatikte uzun basma gesture'a ait). */
1730
1962
  s(this, "lastPointerType", "mouse");
1731
1963
  /** options.tapGestures kuruluysa (plugins/tap-gestures). */
@@ -1796,21 +2028,36 @@ class de extends HTMLElement {
1796
2028
  s(this, "hideTimer", null);
1797
2029
  s(this, "cursorTimer", null);
1798
2030
  /** null = imleç hiç gizlenmez (options.cursorHideDelayMs: false). */
1799
- s(this, "cursorHideDelayMs", ee);
2031
+ s(this, "cursorHideDelayMs", re);
1800
2032
  /** Fare kontrollerin (buton/seek bar) üzerinde mi — üzerindeyken otomatik gizlenmez; videonun üstünde hareketsizse gizlenir. */
1801
2033
  s(this, "pointerOverControls", !1);
1802
2034
  /** Kalite menüsünde şu an HLS seviyeleri mi var (kaynak değişince temizlemek için). */
1803
2035
  s(this, "hlsQualitiesShown", !1);
1804
2036
  /** Son uygulanan options.showRemainingTime — bkz. applyOptions. */
1805
2037
  s(this, "appliedShowRemaining");
1806
- s(this, "autoHideDelayMs", J);
2038
+ s(this, "autoHideDelayMs", se);
1807
2039
  s(this, "tapCandidate", !1);
1808
2040
  s(this, "tapStartX", 0);
1809
2041
  s(this, "tapStartY", 0);
1810
2042
  /** Tüm UI'ın paylaştığı tek, mutable sözlük — dil değişince referans değil alanlar güncellenir. */
1811
- s(this, "i18n", ce("tr"));
2043
+ s(this, "i18n", be("tr"));
1812
2044
  /** IMA SDK'nın kendi ad-UI dili (skip butonu/sayaç metni) de aynı dili takip etsin diye — bkz. plugins/ads/AdsController. */
1813
2045
  s(this, "localeCode", "tr");
2046
+ s(this, "onMediaError", () => {
2047
+ const e = this.videoEl.error;
2048
+ if (!e) return;
2049
+ const i = { 1: "MEDIA_ERR_ABORTED", 2: "MEDIA_ERR_NETWORK", 3: "MEDIA_ERR_DECODE", 4: "MEDIA_ERR_SRC_NOT_SUPPORTED" }, r = this.videoEl.currentSrc;
2050
+ this.log.add({
2051
+ source: "media",
2052
+ message: e.message || i[e.code] || `MediaError ${e.code}`,
2053
+ fatal: !0,
2054
+ details: { code: e.code, name: i[e.code], src: r && !r.startsWith("blob:") ? r : r ? "MediaSource (hls.js)" : void 0 }
2055
+ });
2056
+ });
2057
+ s(this, "onSubtitleError", (e) => {
2058
+ const i = e.detail;
2059
+ this.log.add({ source: "subtitles", message: `Subtitle file could not be loaded: ${i.message}`, details: { src: i.src } });
2060
+ });
1814
2061
  s(this, "onPointerTypeTrack", (e) => {
1815
2062
  this.lastPointerType = e.pointerType;
1816
2063
  });
@@ -1818,64 +2065,66 @@ class de extends HTMLElement {
1818
2065
  s(this, "onContextMenu", (e) => {
1819
2066
  const i = this.contextMenuConfig;
1820
2067
  !i || this.lastPointerType !== "mouse" || (e.preventDefault(), this.contextMenu.show(e.clientX, e.clientY, [
1821
- { label: "HopeCorePlayer", meta: `v${B}` },
1822
- ...i.stats ? [{ label: this.i18n.statsTitle, onSelect: () => void this.toggleStats(!0) }] : []
2068
+ { label: "HopeCorePlayer", meta: `v${M}` },
2069
+ ...i.stats ? [{ label: this.i18n.statsTitle, onSelect: () => void this.toggleStats(!0) }] : [],
2070
+ // Yalnızca debug açıkken ve kayıtlı bir hata varsa.
2071
+ ...this.debugEnabled && this.log.entries.length ? [{ label: this.i18n.debugTitle, meta: String(this.log.entries.length), onSelect: () => void this.showDebugLog() }] : []
1823
2072
  ]));
1824
2073
  });
1825
2074
  s(this, "onStreamTextTracks", (e) => {
1826
2075
  const i = this.streamTracks.filter((r) => r.id.startsWith("native:"));
1827
2076
  if (!e.length)
1828
- ne(this.videoEl, "stream"), this.streamCueKeys.clear(), this.streamTracks = i;
2077
+ pe(this.videoEl, "stream"), this.streamCueKeys.clear(), this.streamTracks = i;
1829
2078
  else {
1830
- const r = new Set([...this.optionTracks, ...i].map((o) => o.label));
2079
+ const r = new Set([...this.optionTracks, ...i].map((n) => n.label));
1831
2080
  this.streamTracks = [
1832
2081
  ...i,
1833
- ...e.map((o) => {
1834
- const n = this.uniqueLabel(this.streamTrackLabel(o.label, o.lang) || o.id, o.kind === "captions" ? "CC" : o.lang || o.kind, r);
1835
- return { id: o.id, label: n, track: oe(this.videoEl, "stream", o.kind, n, o.lang) };
2082
+ ...e.map((n) => {
2083
+ const a = this.uniqueLabel(this.streamTrackLabel(n.label, n.lang) || n.id, n.kind === "captions" ? "CC" : n.lang || n.kind, r);
2084
+ return { id: n.id, label: a, track: he(this.videoEl, "stream", n.kind, a, n.lang) };
1836
2085
  })
1837
2086
  ];
1838
2087
  }
1839
2088
  this.rebuildCaptions(this.activeCaptionLabel);
1840
2089
  });
1841
2090
  s(this, "onStreamCues", (e, i) => {
1842
- var n;
1843
- const r = (n = this.streamTracks.find((l) => l.id === e)) == null ? void 0 : n.track;
2091
+ var a;
2092
+ const r = (a = this.streamTracks.find((l) => l.id === e)) == null ? void 0 : a.track;
1844
2093
  if (!r) return;
1845
- let o = this.streamCueKeys.get(r);
1846
- o || this.streamCueKeys.set(r, o = /* @__PURE__ */ new Set());
2094
+ let n = this.streamCueKeys.get(r);
2095
+ n || this.streamCueKeys.set(r, n = /* @__PURE__ */ new Set());
1847
2096
  for (const l of i) {
1848
2097
  const d = `${l.startTime}|${l.endTime}|${l.text}`;
1849
- o.has(d) || (o.add(d), r.addCue(l));
2098
+ n.has(d) || (n.add(d), r.addCue(l));
1850
2099
  }
1851
2100
  });
1852
2101
  /** Tarayıcının kendi (native HLS) altyazı izleri — bizim havuz izlerimiz ve metadata izleri hariç. */
1853
2102
  s(this, "onNativeTextTracksChanged", () => {
1854
- const e = Array.from(this.videoEl.textTracks).filter((n) => (n.kind === "subtitles" || n.kind === "captions") && !He(n)), i = this.streamTracks.some((n) => n.id.startsWith("native:"));
2103
+ const e = Array.from(this.videoEl.textTracks).filter((a) => (a.kind === "subtitles" || a.kind === "captions") && !qe(a)), i = this.streamTracks.some((a) => a.id.startsWith("native:"));
1855
2104
  if (!e.length && !i) return;
1856
- const r = this.streamTracks.filter((n) => !n.id.startsWith("native:")), o = new Set([...this.optionTracks, ...r].map((n) => n.label));
2105
+ const r = this.streamTracks.filter((a) => !a.id.startsWith("native:")), n = new Set([...this.optionTracks, ...r].map((a) => a.label));
1857
2106
  this.streamTracks = [
1858
2107
  ...r,
1859
- ...e.map((n, l) => ({
2108
+ ...e.map((a, l) => ({
1860
2109
  id: `native:${l}`,
1861
- label: this.uniqueLabel(n.label || n.language || `${this.i18n.captions} ${l + 1}`, n.language || String(l + 1), o),
1862
- track: n
2110
+ label: this.uniqueLabel(a.label || a.language || `${this.i18n.captions} ${l + 1}`, a.language || String(l + 1), n),
2111
+ track: a
1863
2112
  }))
1864
2113
  ], this.rebuildCaptions(this.activeCaptionLabel);
1865
2114
  });
1866
2115
  /** Yayında birden fazla ses izi varsa ayarlarda "Ses" alt menüsü (HLS alternatif ses / Safari audioTracks). */
1867
2116
  s(this, "onStreamAudioTracks", (e, i) => {
1868
2117
  this.streamAudio = { tracks: e, active: i };
1869
- const r = this.controlBar.settingsMenu, o = /* @__PURE__ */ new Set(), n = new Map(e.map((l) => [l.index, this.uniqueLabel(this.streamTrackLabel(l.label, l.lang), String(l.index + 1), o)]));
2118
+ const r = this.controlBar.settingsMenu, n = /* @__PURE__ */ new Set(), a = new Map(e.map((l) => [l.index, this.uniqueLabel(this.streamTrackLabel(l.label, l.lang), String(l.index + 1), n)]));
1870
2119
  if (e.length <= 1) {
1871
- r.unregisterSubmenu(ie);
2120
+ r.unregisterSubmenu(oe);
1872
2121
  return;
1873
2122
  }
1874
2123
  r.registerSubmenu({
1875
- key: ie,
2124
+ key: oe,
1876
2125
  title: this.i18n.audioTrack,
1877
- getValueLabel: () => n.get(i) ?? "",
1878
- getItems: () => e.map((l) => ({ label: n.get(l.index), active: l.index === i, onSelect: () => this.sourceManager.setAudioTrack(l.index) }))
2126
+ getValueLabel: () => a.get(i) ?? "",
2127
+ getItems: () => e.map((l) => ({ label: a.get(l.index), active: l.index === i, onSelect: () => this.sourceManager.setAudioTrack(l.index) }))
1879
2128
  });
1880
2129
  });
1881
2130
  /** Playlist panelinin monte edileceği, .video-area'nın ALTINDAKİ (shadow root içi) kapsayıcı — ilk ihtiyaçta oluşturulur. */
@@ -1887,12 +2136,12 @@ class de extends HTMLElement {
1887
2136
  }
1888
2137
  if (e.length <= 1) return;
1889
2138
  this.hlsQualitiesShown = !0;
1890
- const r = (o) => `${o.height}p`;
2139
+ const r = (n) => `${n.height}p`;
1891
2140
  this.controlBar.setQualities(
1892
2141
  [
1893
2142
  { label: this.i18n.autoQuality, onSelect: () => this.sourceManager.setLevel(-1) },
1894
2143
  // Yüksekten düşüğe (hls.js artan sıralıyor) — l.index hls.js'teki gerçek seviye numarası, sıradan bağımsız.
1895
- ...[...e].sort((o, n) => n.height - o.height).map((o) => ({ label: r(o), onSelect: () => this.sourceManager.setLevel(o.index) }))
2144
+ ...[...e].sort((n, a) => a.height - n.height).map((n) => ({ label: r(n), onSelect: () => this.sourceManager.setLevel(n.index) }))
1896
2145
  ],
1897
2146
  i === -1 ? this.i18n.autoQuality : r(e[i])
1898
2147
  );
@@ -1925,15 +2174,15 @@ class de extends HTMLElement {
1925
2174
  if (!i && Date.now() - this.lastTouchEndAt < 800) return;
1926
2175
  i && (this.lastTouchEndAt = Date.now());
1927
2176
  const r = i ? e.changedTouches[0] : e;
1928
- if (r && Math.hypot(r.clientX - this.tapStartX, r.clientY - this.tapStartY) > ut) {
2177
+ if (r && Math.hypot(r.clientX - this.tapStartX, r.clientY - this.tapStartY) > Et) {
1929
2178
  i && !this.isChromeBlocked && this.scheduleAutoHide();
1930
2179
  return;
1931
2180
  }
1932
- const o = i ? "touch" : this.lastPointerType, n = () => this.onBackgroundTap(o, () => {
2181
+ const n = i ? "touch" : this.lastPointerType, a = () => this.onBackgroundTap(n, () => {
1933
2182
  this.videoEl.paused ? this.videoEl.play().catch(() => {
1934
2183
  }) : this.videoEl.pause();
1935
2184
  });
1936
- r && ((d = this.tapGestures) != null && d.handleTap(r.clientX, o === "pen" ? "pen" : o, n)) || n();
2185
+ r && ((d = this.tapGestures) != null && d.handleTap(r.clientX, n === "pen" ? "pen" : n, a)) || a();
1937
2186
  });
1938
2187
  s(this, "onVideoPressCancel", () => {
1939
2188
  this.tapCandidate = !1;
@@ -1949,71 +2198,79 @@ class de extends HTMLElement {
1949
2198
  e.pointerType === "mouse" && (this.pointerOverControls = !1, this.scheduleAutoHide(), this.showCursor());
1950
2199
  });
1951
2200
  s(this, "scheduleAutoHide", () => {
1952
- this.showChrome(), this.hideTimer && clearTimeout(this.hideTimer), !this.videoEl.paused && (this.hideTimer = setTimeout(() => {
1953
- this.videoEl.paused || this.pointerOverControls || this.controlBar.settingsMenu.isOpen || this.setChromeOpacity("0");
1954
- }, this.lastPointerType === "mouse" ? this.autoHideDelayMs : Math.max(this.autoHideDelayMs, dt)));
2201
+ this.showChrome(), this.hideTimer && clearTimeout(this.hideTimer), !(this.videoEl.paused || this.loadingActive) && (this.hideTimer = setTimeout(() => {
2202
+ this.videoEl.paused || this.loadingActive || this.pointerOverControls || this.controlBar.settingsMenu.isOpen || this.setChromeOpacity("0");
2203
+ }, this.lastPointerType === "mouse" ? this.autoHideDelayMs : Math.max(this.autoHideDelayMs, wt)));
1955
2204
  });
1956
- at(), this.root = this.attachShadow({ mode: "open" });
2205
+ ut(), this.root = this.attachShadow({ mode: "open" });
1957
2206
  const e = document.createElement("style");
1958
- e.textContent = be, this.root.appendChild(e);
2207
+ e.textContent = ye, this.root.appendChild(e);
1959
2208
  const i = document.createElement("div");
1960
- i.className = "hp-root", i.innerHTML = bt, this.root.appendChild(i), this.videoArea = this.root.querySelector(".video-area"), this.videoEl = this.root.querySelector("video"), this.adLayerEl = this.root.querySelector('[part="ad-layer"]'), this.instanceKey = `hp-${Math.random().toString(36).slice(2, 10)}`, this.loadingSpinner = new Fe(this.videoEl), this.root.querySelector(".media-layer").appendChild(this.loadingSpinner.el), this.errorScreen = new De(this.videoEl, this.i18n), this.errorScreen.setOnRetry(() => void this.sourceManager.reload()), this.videoArea.appendChild(this.errorScreen.el), this.centerPlayButton = document.createElement("button"), this.centerPlayButton.type = "button", this.centerPlayButton.setAttribute("part", "center-play-button"), this.centerPlayButton.setAttribute("aria-label", this.i18n.play), this.centerPlayButton.className = "hp-center-play hp:absolute hp:inset-0 hp:flex hp:items-center hp:justify-center hp:bg-transparent hp:border-0 hp:cursor-pointer hp:text-on-surface hp:transition-opacity";
2209
+ i.className = "hp-root", i.innerHTML = Tt, this.root.appendChild(i), this.videoArea = this.root.querySelector(".video-area"), this.videoEl = this.root.querySelector("video"), this.adLayerEl = this.root.querySelector('[part="ad-layer"]'), this.instanceKey = `hp-${Math.random().toString(36).slice(2, 10)}`, this.prerollGate = new vt(this.videoEl), this.prerollGate.onWaitChange = (n) => this.onPrerollWaitChange(n), this.videoEl.addEventListener("error", this.onMediaError), this.videoEl.addEventListener("hp-internal:subtitle-error", this.onSubtitleError), this.loadingSpinner = new _e(this.videoEl), this.root.querySelector(".media-layer").appendChild(this.loadingSpinner.el), this.errorScreen = new Ge(this.videoEl, this.i18n), this.errorScreen.setOnRetry(() => void this.sourceManager.reload()), this.videoArea.appendChild(this.errorScreen.el), this.centerPlayButton = document.createElement("button"), this.centerPlayButton.type = "button", this.centerPlayButton.setAttribute("part", "center-play-button"), this.centerPlayButton.setAttribute("aria-label", this.i18n.play), this.centerPlayButton.className = "hp-center-play hp:absolute hp:inset-0 hp:flex hp:items-center hp:justify-center hp:bg-transparent hp:border-0 hp:cursor-pointer hp:text-on-surface hp:transition-opacity";
1961
2210
  const r = document.createElement("span");
1962
- r.className = "hp-chip hp:flex hp:items-center hp:justify-center hp:w-16 hp:h-16", r.style.borderRadius = "9999px", r.appendChild(k("play", "hp:text-2xl")), this.centerPlayButton.appendChild(r), this.centerPlayButton.addEventListener("click", (o) => {
2211
+ r.className = "hp-chip hp:flex hp:items-center hp:justify-center hp:w-16 hp:h-16", r.style.borderRadius = "9999px", r.appendChild(w("play", "hp:text-2xl")), this.centerPlayButton.appendChild(r), this.centerPlayButton.addEventListener("click", (n) => {
1963
2212
  var c;
1964
- const n = () => {
2213
+ const a = () => {
1965
2214
  this.videoEl.paused && this.videoEl.play();
1966
- }, l = this.lastPointerType === "pen" ? "pen" : this.lastPointerType === "touch" ? "touch" : null, m = o.composedPath().includes(r) ? n : () => this.onBackgroundTap(l ?? "mouse", n);
1967
- l && ((c = this.tapGestures) != null && c.handleTap(o.clientX, l, m)) || m();
1968
- }), this.videoArea.appendChild(this.centerPlayButton), this.centerPlayObserver = new ResizeObserver(() => requestAnimationFrame(() => this.layoutCenterPlay())), this.centerPlayObserver.observe(this.videoArea), this.chromeEl = document.createElement("div"), this.chromeEl.className = "hp-chrome hp:absolute hp:inset-0 hp:z-20 hp:pointer-events-none", this.videoArea.appendChild(this.chromeEl), this.sourceManager = new ve(this.videoEl, {
2215
+ }, l = this.lastPointerType === "pen" ? "pen" : this.lastPointerType === "touch" ? "touch" : null, m = n.composedPath().includes(r) ? a : () => this.onBackgroundTap(l ?? "mouse", a);
2216
+ l && ((c = this.tapGestures) != null && c.handleTap(n.clientX, l, m)) || m();
2217
+ }), this.videoArea.appendChild(this.centerPlayButton), this.centerPlayObserver = new ResizeObserver(() => requestAnimationFrame(() => this.layoutCenterPlay())), this.centerPlayObserver.observe(this.videoArea), this.chromeEl = document.createElement("div"), this.chromeEl.className = "hp-chrome hp:absolute hp:inset-0 hp:z-20 hp:pointer-events-none", this.videoArea.appendChild(this.chromeEl), this.sourceManager = new xe(this.videoEl, {
1969
2218
  onLevelsChanged: this.onHlsLevelsChanged,
1970
2219
  onAudioTracksChanged: this.onStreamAudioTracks,
1971
2220
  onTextTracksFound: this.onStreamTextTracks,
1972
2221
  onCues: this.onStreamCues,
1973
- onFatalError: (o) => this.errorScreen.showStreamError(o === "network" ? 2 : 3)
1974
- }), this.errorScreen.setShouldShow(() => !this.sourceManager.isRecovering()), this.controlBar = new Pe(
2222
+ onFatalError: (n) => this.errorScreen.showStreamError(n === "network" ? 2 : 3),
2223
+ onStreamError: (n) => this.log.add({
2224
+ source: "stream",
2225
+ message: `${n.type}: ${n.details}`,
2226
+ fatal: n.fatal,
2227
+ details: { url: n.url, httpStatus: n.httpStatus, reason: n.reason, engine: "hls.js" }
2228
+ })
2229
+ }), this.errorScreen.setShouldShow(() => !this.sourceManager.isRecovering()), this.controlBar = new ze(
1975
2230
  this.videoEl,
1976
- ct,
2231
+ xt,
1977
2232
  {
1978
2233
  onRequestFullscreen: () => this.requestFullscreenCompat(),
1979
2234
  liveSyncPosition: () => {
1980
- var o;
1981
- return ((o = this.sourceManager.hlsInstance) == null ? void 0 : o.liveSyncPosition) ?? null;
2235
+ var n;
2236
+ return ((n = this.sourceManager.hlsInstance) == null ? void 0 : n.liveSyncPosition) ?? null;
1982
2237
  },
1983
2238
  onExitFullscreen: () => this.exitFullscreenCompat(),
1984
2239
  isFullscreen: () => this.isFullscreenActive(),
1985
2240
  // adsController sonradan kurulur — closure'lar her çağrıda güncel this.adsController'ı okur.
1986
2241
  isAdActive: () => this.isAdPlaying(),
2242
+ interceptTogglePlay: () => this.cancelPrerollWait(),
2243
+ onLoadingChange: (n) => this.onLoadingChange(n),
1987
2244
  adTogglePlay: () => {
1988
- var o;
1989
- return (o = this.adsController) == null ? void 0 : o.toggleAdPlayPause();
2245
+ var n;
2246
+ return (n = this.adsController) == null ? void 0 : n.toggleAdPlayPause();
1990
2247
  },
1991
2248
  adIsPaused: () => {
1992
- var o;
1993
- return ((o = this.adsController) == null ? void 0 : o.isAdPaused()) ?? !0;
2249
+ var n;
2250
+ return ((n = this.adsController) == null ? void 0 : n.isAdPaused()) ?? !0;
1994
2251
  },
1995
2252
  adVolume: {
1996
2253
  isAdActive: () => this.isAdPlaying(),
1997
2254
  getVolume: () => {
1998
- var o;
1999
- return ((o = this.adsController) == null ? void 0 : o.getAdVolume()) ?? 1;
2000
- },
2001
- setVolume: (o) => {
2002
2255
  var n;
2003
- return (n = this.adsController) == null ? void 0 : n.setAdVolume(o);
2256
+ return ((n = this.adsController) == null ? void 0 : n.getAdVolume()) ?? 1;
2257
+ },
2258
+ setVolume: (n) => {
2259
+ var a;
2260
+ return (a = this.adsController) == null ? void 0 : a.setAdVolume(n);
2004
2261
  },
2005
2262
  toggleMute: () => {
2006
- var o;
2007
- return (o = this.adsController) == null ? void 0 : o.toggleAdMute();
2263
+ var n;
2264
+ return (n = this.adsController) == null ? void 0 : n.toggleAdMute();
2008
2265
  }
2009
2266
  }
2010
2267
  },
2011
2268
  this.i18n
2012
- ), this.chromeEl.appendChild(this.controlBar.el), this.chromeEl.appendChild(this.controlBar.topEl), this.videoArea.appendChild(this.controlBar.volumePanel.unmuteBadge), this.captionRenderer = new T(this.videoEl, this.videoArea, this.controlBar.seekBar.el, this.i18n), this.videoArea.appendChild(this.captionRenderer.layerEl), this.keyboard = new Oe(
2269
+ ), this.chromeEl.appendChild(this.controlBar.el), this.chromeEl.appendChild(this.controlBar.topEl), this.videoArea.appendChild(this.controlBar.volumePanel.unmuteBadge), this.captionRenderer = new S(this.videoEl, this.videoArea, this.controlBar.seekBar.el, this.i18n), this.videoArea.appendChild(this.captionRenderer.layerEl), this.keyboard = new He(
2013
2270
  this,
2014
2271
  this.videoEl,
2015
2272
  () => this.isFullscreenActive() ? this.exitFullscreenCompat() : this.requestFullscreenCompat()
2016
- ), this.tooltip = new Ne(this.videoArea), this.contextMenu = new ot(this.videoArea), this.seekFeedback = new rt(this.i18n), this.videoArea.appendChild(this.seekFeedback.el), this.controlBar.onSkip = (o) => this.seekFeedback.show(o), this.keyboard.onSeek = (o) => this.seekFeedback.show(o), this.controlBar.seekBar.onKeyboardSeek = (o) => this.seekFeedback.show(o), this.blockChrome("boot");
2273
+ ), this.tooltip = new Fe(this.videoArea), this.contextMenu = new ht(this.videoArea), this.seekFeedback = new lt(this.i18n), this.videoArea.appendChild(this.seekFeedback.el), this.controlBar.onSkip = (n) => this.seekFeedback.show(n), this.keyboard.onSeek = (n) => this.seekFeedback.show(n), this.keyboard.interceptTogglePlay = () => this.cancelPrerollWait(), this.controlBar.seekBar.onKeyboardSeek = (n) => this.seekFeedback.show(n), this.blockChrome("boot");
2017
2274
  }
2018
2275
  static get observedAttributes() {
2019
2276
  return ["src", "poster", "autoplay", "muted", "loop", "theme", "locale"];
@@ -2029,8 +2286,8 @@ class de extends HTMLElement {
2029
2286
  }), this.videoEl.addEventListener("mousedown", this.onVideoPressStart), this.videoEl.addEventListener("mouseup", this.onVideoPressEnd), this.videoEl.addEventListener("mouseleave", this.onVideoPressCancel), this.videoEl.addEventListener("touchstart", this.onVideoPressStart, { passive: !0 }), this.videoEl.addEventListener("touchend", this.onVideoPressEnd), this.videoEl.addEventListener("touchcancel", this.onVideoPressCancel), this.dispatchEvent(new CustomEvent("hp:ready"));
2030
2287
  }
2031
2288
  disconnectedCallback() {
2032
- var e, i, r, o, n, l, d, m, c, h, p, u, b, g, f, v, y, z, N, O, F, I;
2033
- (e = this.centerPlayObserver) == null || e.disconnect(), this.showCursor(), (i = this.miniProgress) == null || i.destroy(), this.miniProgress = null, this.videoEl.removeEventListener("play", this.onPlay), this.videoEl.removeEventListener("pause", this.onPause), this.removeEventListener("pointermove", this.onPointerMove), this.removeEventListener("pointerleave", this.onPointerLeave), this.removeEventListener("pointerdown", this.onPointerDownFocus), this.controlBar.settingsMenu.onOpenChange = null, document.removeEventListener("fullscreenchange", this.onFullscreenChange), document.removeEventListener("webkitfullscreenchange", this.onFullscreenChange), this.videoEl.removeEventListener("webkitbeginfullscreen", this.onFullscreenChange), this.videoEl.removeEventListener("webkitendfullscreen", this.onFullscreenChange), this.removeEventListener("contextmenu", this.onContextMenu), this.removeEventListener("pointerdown", this.onPointerTypeTrack, !0), this.videoEl.textTracks.removeEventListener("addtrack", this.onNativeTextTracksChanged), this.videoEl.textTracks.removeEventListener("removetrack", this.onNativeTextTracksChanged), this.videoEl.removeEventListener("mousedown", this.onVideoPressStart), this.videoEl.removeEventListener("mouseup", this.onVideoPressEnd), this.videoEl.removeEventListener("mouseleave", this.onVideoPressCancel), this.videoEl.removeEventListener("touchstart", this.onVideoPressStart), this.videoEl.removeEventListener("touchend", this.onVideoPressEnd), this.videoEl.removeEventListener("touchcancel", this.onVideoPressCancel), this.controlBar.destroy(), this.captionRenderer.destroy(), this.keyboard.destroy(), this.tooltip.destroy(), this.loadingSpinner.destroy(), this.errorScreen.destroy(), this.seekFeedback.destroy(), this.contextMenu.destroy(), (r = this.statsPanel) == null || r.destroy(), (o = this.tapGestures) == null || o.destroy(), this.sourceManager.destroy(), (n = this.adsController) == null || n.destroy(), (l = this.gestureControls) == null || l.destroy(), (d = this.loopSection) == null || d.destroy(), (m = this.inViewAutoplay) == null || m.destroy(), (c = this.unregisterSticky) == null || c.call(this), (h = this.playlistRunner) == null || h.destroy(), (p = this.hopeStory) == null || p.destroy(), (u = this.markProgress) == null || u.destroy(), (b = this.segments) == null || b.destroy(), (g = this.spriteThumbnails) == null || g.destroy(), (f = this.countdownScreen) == null || f.destroy(), (v = this.geoChecker) == null || v.destroy(), (y = this.redirectScreen) == null || y.destroy(), (z = this.qrResume) == null || z.destroy(), (N = this.pauseAd) == null || N.destroy(), this.pauseAd = null, (O = this.dubbing) == null || O.destroy(), (F = this.liveWallClock) == null || F.destroy(), (I = this.daiController) == null || I.destroy(), this.hideTimer && clearTimeout(this.hideTimer), this.bootGraceTimer && clearTimeout(this.bootGraceTimer), this.lastSynced = null;
2289
+ var e, i, r, n, a, l, d, m, c, h, p, u, b, g, v, y, f, k, C, O, D, F, H;
2290
+ (e = this.centerPlayObserver) == null || e.disconnect(), this.showCursor(), (i = this.miniProgress) == null || i.destroy(), this.miniProgress = null, this.videoEl.removeEventListener("play", this.onPlay), this.videoEl.removeEventListener("pause", this.onPause), this.removeEventListener("pointermove", this.onPointerMove), this.removeEventListener("pointerleave", this.onPointerLeave), this.removeEventListener("pointerdown", this.onPointerDownFocus), this.controlBar.settingsMenu.onOpenChange = null, document.removeEventListener("fullscreenchange", this.onFullscreenChange), document.removeEventListener("webkitfullscreenchange", this.onFullscreenChange), this.videoEl.removeEventListener("webkitbeginfullscreen", this.onFullscreenChange), this.videoEl.removeEventListener("webkitendfullscreen", this.onFullscreenChange), this.removeEventListener("contextmenu", this.onContextMenu), this.removeEventListener("pointerdown", this.onPointerTypeTrack, !0), this.videoEl.textTracks.removeEventListener("addtrack", this.onNativeTextTracksChanged), this.videoEl.textTracks.removeEventListener("removetrack", this.onNativeTextTracksChanged), this.videoEl.removeEventListener("mousedown", this.onVideoPressStart), this.videoEl.removeEventListener("mouseup", this.onVideoPressEnd), this.videoEl.removeEventListener("mouseleave", this.onVideoPressCancel), this.videoEl.removeEventListener("touchstart", this.onVideoPressStart), this.videoEl.removeEventListener("touchend", this.onVideoPressEnd), this.videoEl.removeEventListener("touchcancel", this.onVideoPressCancel), this.controlBar.destroy(), this.captionRenderer.destroy(), this.keyboard.destroy(), this.tooltip.destroy(), this.loadingSpinner.destroy(), this.errorScreen.destroy(), this.seekFeedback.destroy(), this.contextMenu.destroy(), (r = this.statsPanel) == null || r.destroy(), (n = this.debugPanel) == null || n.destroy(), this.videoEl.removeEventListener("error", this.onMediaError), this.videoEl.removeEventListener("hp-internal:subtitle-error", this.onSubtitleError), (a = this.tapGestures) == null || a.destroy(), this.sourceManager.destroy(), (l = this.adsController) == null || l.destroy(), (d = this.gestureControls) == null || d.destroy(), (m = this.loopSection) == null || m.destroy(), (c = this.inViewAutoplay) == null || c.destroy(), (h = this.unregisterSticky) == null || h.call(this), (p = this.playlistRunner) == null || p.destroy(), (u = this.hopeStory) == null || u.destroy(), (b = this.markProgress) == null || b.destroy(), (g = this.segments) == null || g.destroy(), (v = this.spriteThumbnails) == null || v.destroy(), (y = this.countdownScreen) == null || y.destroy(), (f = this.geoChecker) == null || f.destroy(), (k = this.redirectScreen) == null || k.destroy(), (C = this.qrResume) == null || C.destroy(), (O = this.pauseAd) == null || O.destroy(), this.pauseAd = null, (D = this.dubbing) == null || D.destroy(), (F = this.liveWallClock) == null || F.destroy(), (H = this.daiController) == null || H.destroy(), this.prerollGate.release(!1), this.hideTimer && clearTimeout(this.hideTimer), this.bootGraceTimer && clearTimeout(this.bootGraceTimer), this.lastSynced = null;
2034
2291
  }
2035
2292
  /** Reklam/consent-farkında plugin'lerin (gesture/sticky/in-view-autoplay) ortak sorgusu. */
2036
2293
  isAdPlaying() {
@@ -2046,7 +2303,7 @@ class de extends HTMLElement {
2046
2303
  this._options = e ?? {}, this.bootGraceTimer && (clearTimeout(this.bootGraceTimer), this.bootGraceTimer = null), this.bootResolved = !0, this.lastSynced = null, this.syncFromAttributes();
2047
2304
  }
2048
2305
  play() {
2049
- return this.videoEl.play();
2306
+ return this.prerollGate.interceptPlay() ? Promise.resolve() : this.videoEl.play();
2050
2307
  }
2051
2308
  pause() {
2052
2309
  this.videoEl.pause();
@@ -2055,6 +2312,18 @@ class de extends HTMLElement {
2055
2312
  get playbackEngine() {
2056
2313
  return this.sourceManager.engine;
2057
2314
  }
2315
+ /** Player'ın hata kaydı (medya, yayın, reklam, altyazı) — `options.debug` kapalıyken de tutulur. */
2316
+ get errorLog() {
2317
+ return this.log;
2318
+ }
2319
+ /** Hata ayıklama penceresini aç (sağ tık menüsündeki "Hata ayıklama" ile aynı). */
2320
+ async showDebugLog() {
2321
+ if (!this.debugPanel) {
2322
+ const { installDebugPanel: e } = await import("./index-DCXX1ZJG.js");
2323
+ this.debugPanel ?? (this.debugPanel = e({ containerEl: this.videoArea, i18n: this.i18n, log: this.log, version: M }));
2324
+ }
2325
+ this.debugPanel.show();
2326
+ }
2058
2327
  /** Teknik istatistik panelini aç/kapat (`force`: true = aç, false = kapat). Sağ tık menüsündeki "İstatistikler" ile aynı. */
2059
2328
  async toggleStats(e) {
2060
2329
  if (!this.statsPanel) {
@@ -2064,7 +2333,7 @@ class de extends HTMLElement {
2064
2333
  videoEl: this.videoEl,
2065
2334
  containerEl: this.videoArea,
2066
2335
  i18n: this.i18n,
2067
- version: B,
2336
+ version: M,
2068
2337
  getEngine: () => this.sourceManager.engine,
2069
2338
  getHls: () => this.sourceManager.hlsInstance
2070
2339
  }));
@@ -2122,18 +2391,22 @@ class de extends HTMLElement {
2122
2391
  })), this.pluginApplyRun;
2123
2392
  }
2124
2393
  async applyOptions(e) {
2125
- var o, n, l, d, m, c, h, p, u, b, g, f, v, y;
2126
- e.poster && (this.videoEl.poster = e.poster), this.videoEl.autoplay = !!e.autoplay, this.videoEl.muted = !!e.muted, this.videoEl.loop = !!e.loop, this.videoEl.preload = e.preload ?? "metadata", this.videoEl.playsInline = !0, this.videoEl.setAttribute("webkit-playsinline", ""), this.autoHideDelayMs = e.autoHideDelayMs ?? J, this.tapToPlay = e.tapToPlay ?? "auto", this.cursorHideDelayMs = e.cursorHideDelayMs === !1 ? null : e.cursorHideDelayMs ?? ee, this.cursorHideDelayMs === null && this.showCursor(), e.miniProgress && !this.miniProgress ? (this.miniProgress = new et(this.videoEl), this.videoArea.appendChild(this.miniProgress.el), this.updateMiniProgress()) : !e.miniProgress && this.miniProgress && (this.miniProgress.destroy(), this.miniProgress = null), this.contextMenuConfig = e.contextMenu === !1 ? null : { stats: typeof e.contextMenu == "object" && e.contextMenu.stats === !0 }, this.contextMenuConfig || this.contextMenu.close();
2127
- const i = e.keyboardSeekStep && e.keyboardSeekStep > 0 ? e.keyboardSeekStep : mt;
2394
+ var n, a, l, d, m, c, h, p, u, b, g, v, y, f, k, C;
2395
+ e.poster && (this.videoEl.poster = e.poster), this.videoEl.autoplay = !!e.autoplay, this.videoEl.muted = !!e.muted, this.videoEl.loop = !!e.loop, this.videoEl.preload = e.preload ?? "metadata", this.videoEl.playsInline = !0, this.videoEl.setAttribute("webkit-playsinline", ""), this.autoHideDelayMs = e.autoHideDelayMs ?? se, this.tapToPlay = e.tapToPlay ?? "auto", this.cursorHideDelayMs = e.cursorHideDelayMs === !1 ? null : e.cursorHideDelayMs ?? re, this.cursorHideDelayMs === null && this.showCursor(), e.miniProgress && !this.miniProgress ? (this.miniProgress = new rt(this.videoEl), this.videoArea.appendChild(this.miniProgress.el), this.updateMiniProgress()) : !e.miniProgress && this.miniProgress && (this.miniProgress.destroy(), this.miniProgress = null), this.debugEnabled = !!e.debug, this.debugEnabled || (n = this.debugPanel) == null || n.hide(), this.contextMenuConfig = e.contextMenu === !1 ? null : { stats: typeof e.contextMenu == "object" && e.contextMenu.stats === !0 }, this.contextMenuConfig || this.contextMenu.close();
2396
+ const i = e.keyboardSeekStep && e.keyboardSeekStep > 0 ? e.keyboardSeekStep : Ct;
2128
2397
  this.keyboard.seekStep = i, this.controlBar.seekBar.keyboardStep = i;
2129
2398
  const r = e.skipButtons === !0 ? {} : e.skipButtons || null;
2130
2399
  this.controlBar.setSkipButtons(
2131
- r && r.back !== !1 ? r.back ?? te : null,
2132
- r && r.forward !== !1 ? r.forward ?? te : null
2133
- ), e.showRemainingTime !== void 0 && e.showRemainingTime !== this.appliedShowRemaining && (this.appliedShowRemaining = e.showRemainingTime, this.controlBar.setShowRemaining(e.showRemainingTime)), e.theme ? this.setAttribute("data-theme", e.theme) : this.removeAttribute("data-theme"), this.localeCode = e.locale ?? "tr", pt(this.i18n, e.locale, e.labels), this.centerPlayButton.setAttribute("aria-label", this.i18n.play), this.controlBar.refreshLabels(), this.captionRenderer.refreshLabels(this.i18n), this.captionTrackActive && this.controlBar.settingsMenu.setCaptionAppearance(this.buildCaptionAppearance()), this.errorScreen.refreshLabels(), (o = this.playlistRunner) == null || o.refreshLabels(), (n = this.hopeStory) == null || n.refreshLabels(), (l = this.countdownScreen) == null || l.refreshLabels(), (d = this.geoChecker) == null || d.refreshLabels(), (m = this.redirectScreen) == null || m.refreshLabels(), (c = this.qrResume) == null || c.refreshLabels(), (h = this.pauseAd) == null || h.refreshLabels(), (p = this.dubbing) == null || p.refreshLabels(), this.onStreamAudioTracks(this.streamAudio.tracks, this.streamAudio.active), (u = this.statsPanel) == null || u.refreshLabels(), (b = this.liveWallClock) == null || b.refreshLabels(), (g = this.loopSection) == null || g.refreshLabels(), (f = this.markProgress) == null || f.refreshLabels(), (y = (v = this.unregisterSticky) == null ? void 0 : v.refreshLabels) == null || y.call(v), this.bootResolved && await this.queuePluginApply(e);
2400
+ r && r.back !== !1 ? r.back ?? ne : null,
2401
+ r && r.forward !== !1 ? r.forward ?? ne : null
2402
+ ), e.showRemainingTime !== void 0 && e.showRemainingTime !== this.appliedShowRemaining && (this.appliedShowRemaining = e.showRemainingTime, this.controlBar.setShowRemaining(e.showRemainingTime)), e.theme ? this.setAttribute("data-theme", e.theme) : this.removeAttribute("data-theme"), this.localeCode = e.locale ?? "tr", gt(this.i18n, e.locale, e.labels), this.centerPlayButton.setAttribute("aria-label", this.i18n.play), this.controlBar.refreshLabels(), this.captionRenderer.refreshLabels(this.i18n), this.captionTrackActive && this.controlBar.settingsMenu.setCaptionAppearance(this.buildCaptionAppearance()), this.errorScreen.refreshLabels(), (a = this.playlistRunner) == null || a.refreshLabels(), (l = this.hopeStory) == null || l.refreshLabels(), (d = this.countdownScreen) == null || d.refreshLabels(), (m = this.geoChecker) == null || m.refreshLabels(), (c = this.redirectScreen) == null || c.refreshLabels(), (h = this.qrResume) == null || h.refreshLabels(), (p = this.pauseAd) == null || p.refreshLabels(), (u = this.dubbing) == null || u.refreshLabels(), this.onStreamAudioTracks(this.streamAudio.tracks, this.streamAudio.active), (b = this.statsPanel) == null || b.refreshLabels(), (g = this.debugPanel) == null || g.refreshLabels(), (v = this.liveWallClock) == null || v.refreshLabels(), (y = this.loopSection) == null || y.refreshLabels(), (f = this.markProgress) == null || f.refreshLabels(), (C = (k = this.unregisterSticky) == null ? void 0 : k.refreshLabels) == null || C.call(k), this.bootResolved && await this.queuePluginApply(e);
2134
2403
  }
2135
2404
  /** applyOptions'ın asenkron kısmı — yalnızca queuePluginApply üzerinden, sırayla çalışır. */
2136
2405
  async applyPluginsAndPlayback(e) {
2406
+ if (e.ads && !this.adsController) {
2407
+ const r = e.ads === !0 ? {} : e.ads;
2408
+ ft(r) && !this.prerollGate.isArmed && this.prerollGate.arm(r.prerollTimeoutMs ?? N), kt(), e.countdownScreen || this.installAdsOnce(e);
2409
+ }
2137
2410
  const i = () => ({
2138
2411
  videoEl: this.videoEl,
2139
2412
  overlayContainerEl: this.videoArea,
@@ -2155,7 +2428,7 @@ class de extends HTMLElement {
2155
2428
  }))) : await this.initPlayback(e);
2156
2429
  }
2157
2430
  async initPlayback(e) {
2158
- var r, o, n, l, d, m, c;
2431
+ var r, n, a, l, d, m, c;
2159
2432
  this.sourceManager.configure(e.hls), this.errorScreen.dismiss();
2160
2433
  const i = (r = e.sources) != null && r.length ? e.sources : e.src ? [{ src: e.src, label: this.i18n.autoQuality }] : [];
2161
2434
  if (i.length <= 1 && (this.controlBar.setQualities([], ""), this.hlsQualitiesShown = !1), i.length > 0) {
@@ -2168,26 +2441,8 @@ class de extends HTMLElement {
2168
2441
  label: h.label,
2169
2442
  onSelect: () => void this.switchQualitySource(h)
2170
2443
  })),
2171
- ((o = i.find((h) => h.selected)) == null ? void 0 : o.label) ?? i[0].label
2172
- ), e.ads && !this.adsController) {
2173
- const h = e.ads === !0 ? {} : e.ads, { installAds: p } = await import("./index-glxDu2eJ.js");
2174
- this.adsController = await p(
2175
- {
2176
- videoEl: this.videoEl,
2177
- hostEl: this,
2178
- adLayerEl: this.adLayerEl,
2179
- hideChrome: () => this.blockChrome("ads", "reduced"),
2180
- showChrome: () => this.unblockChrome("ads"),
2181
- // IMA'nın KENDİ UI'ı üzerinden (ör. reklam video'suna
2182
- // tıklama) duraklatılır/devam ettirilirse toolbar'ımızın
2183
- // ikonu da senkron kalsın diye.
2184
- onAdPlayStateChange: () => this.controlBar.refreshAdPlayState(),
2185
- locale: this.localeCode
2186
- },
2187
- h
2188
- );
2189
- }
2190
- if (e.gesture && !this.gestureControls) {
2444
+ ((n = i.find((h) => h.selected)) == null ? void 0 : n.label) ?? i[0].label
2445
+ ), await this.installAdsOnce(e), e.gesture && !this.gestureControls) {
2191
2446
  const h = e.gesture === !0 ? {} : e.gesture, { installGesture: p } = await import("./index-Ca8hocby.js");
2192
2447
  this.gestureControls = p(
2193
2448
  { videoEl: this.videoEl, overlayContainerEl: this.videoArea, isAdActive: () => this.isAdPlaying() },
@@ -2230,7 +2485,7 @@ class de extends HTMLElement {
2230
2485
  );
2231
2486
  }
2232
2487
  if (e.playlist && !this.playlistRunner) {
2233
- const { installPlaylist: h } = await import("./index-lwFM1iPV.js");
2488
+ const { installPlaylist: h } = await import("./index-C3s21eZa.js");
2234
2489
  this.playlistRunner = h(
2235
2490
  {
2236
2491
  videoEl: this.videoEl,
@@ -2250,7 +2505,7 @@ class de extends HTMLElement {
2250
2505
  );
2251
2506
  }
2252
2507
  if (e.story && !this.hopeStory) {
2253
- const { installStory: h } = await import("./index-d_U9dcN6.js");
2508
+ const { installStory: h } = await import("./index-_-pYIxvh.js");
2254
2509
  this.hopeStory = h(
2255
2510
  {
2256
2511
  videoEl: this.videoEl,
@@ -2271,7 +2526,7 @@ class de extends HTMLElement {
2271
2526
  );
2272
2527
  }
2273
2528
  if (e.markers && !this.markProgress) {
2274
- const { installMarkers: h } = await import("./index-BeBmx35F.js");
2529
+ const { installMarkers: h } = await import("./index-adiWYyto.js");
2275
2530
  this.markProgress = h(
2276
2531
  {
2277
2532
  videoEl: this.videoEl,
@@ -2282,12 +2537,12 @@ class de extends HTMLElement {
2282
2537
  e.markers
2283
2538
  );
2284
2539
  }
2285
- if ((n = e.segments) != null && n.length && !this.segments) {
2286
- const { installSegments: h } = await import("./index-C6ONQXlF.js");
2540
+ if ((a = e.segments) != null && a.length && !this.segments) {
2541
+ const { installSegments: h } = await import("./index-nvfNBIM_.js");
2287
2542
  this.segments = h({ videoEl: this.videoEl, seekBar: this.controlBar.seekBar }, e.segments);
2288
2543
  }
2289
2544
  if (e.spriteThumbnails && !this.spriteThumbnails) {
2290
- const { installSpriteThumbnails: h } = await import("./index-DGSYKljQ.js");
2545
+ const { installSpriteThumbnails: h } = await import("./index-DBwvWiuK.js");
2291
2546
  this.spriteThumbnails = h(
2292
2547
  {
2293
2548
  videoEl: this.videoEl,
@@ -2322,7 +2577,7 @@ class de extends HTMLElement {
2322
2577
  {
2323
2578
  areaEl: this.videoArea,
2324
2579
  seekBy: (p) => {
2325
- this.controlBar.seekBar.el.style.pointerEvents !== "none" && (se(this.videoEl, p), this.seekFeedback.show(p));
2580
+ this.controlBar.seekBar.el.style.pointerEvents !== "none" && (ae(this.videoEl, p), this.seekFeedback.show(p));
2326
2581
  },
2327
2582
  togglePlay: () => this.videoEl.paused ? void this.videoEl.play().catch(() => {
2328
2583
  }) : this.videoEl.pause(),
@@ -2367,10 +2622,10 @@ class de extends HTMLElement {
2367
2622
  addControlElement: (u) => this.controlBar.addElement(u),
2368
2623
  i18n: this.i18n,
2369
2624
  getPlayingDate: () => {
2370
- var f, v, y;
2371
- const u = (f = this.sourceManager.hlsInstance) == null ? void 0 : f.playingDate;
2625
+ var v, y, f;
2626
+ const u = (v = this.sourceManager.hlsInstance) == null ? void 0 : v.playingDate;
2372
2627
  if (u) return u;
2373
- const b = (y = (v = this.videoEl).getStartDate) == null ? void 0 : y.call(v), g = (b == null ? void 0 : b.getTime()) ?? NaN;
2628
+ const b = (f = (y = this.videoEl).getStartDate) == null ? void 0 : f.call(y), g = (b == null ? void 0 : b.getTime()) ?? NaN;
2374
2629
  return Number.isFinite(g) && g > 0 ? new Date(g + this.videoEl.currentTime * 1e3) : null;
2375
2630
  }
2376
2631
  },
@@ -2391,7 +2646,7 @@ class de extends HTMLElement {
2391
2646
  e.dai
2392
2647
  );
2393
2648
  }
2394
- (d = e.subtitles) != null && d.length ? this.optionTracks = Ve(this.videoEl, e.subtitles) : (ae(this.videoEl), this.optionTracks = []), this.rebuildCaptions(((c = (m = e.subtitles) == null ? void 0 : m.find((h) => h.default)) == null ? void 0 : c.label) ?? null);
2649
+ (d = e.subtitles) != null && d.length ? this.optionTracks = We(this.videoEl, e.subtitles) : (ce(this.videoEl), this.optionTracks = []), this.rebuildCaptions(((c = (m = e.subtitles) == null ? void 0 : m.find((h) => h.default)) == null ? void 0 : c.label) ?? null);
2395
2650
  }
2396
2651
  /** Altyazı menüsünü `options.subtitles` + yayın izlerinden kurar; `activeLabel` varsa onu seçer. */
2397
2652
  rebuildCaptions(e) {
@@ -2399,17 +2654,17 @@ class de extends HTMLElement {
2399
2654
  this.selectCaption = null, this.activeCaptionLabel = null, this.controlBar.setCaptions([], this.i18n.captionsOff), this.captionRenderer.setActiveTrack(null), this.captionTrackActive = !1, this.controlBar.settingsMenu.setCaptionAppearance(null), this.sourceManager.selectTextTrack(null);
2400
2655
  return;
2401
2656
  }
2402
- const i = (o) => {
2657
+ const i = (n) => {
2403
2658
  var l;
2404
- const n = _e(this.subtitleTracks, o);
2405
- this.activeCaptionLabel = n ? o : null, this.sourceManager.selectTextTrack(((l = this.streamTracks.find((d) => d.label === o)) == null ? void 0 : l.id) ?? null), this.captionRenderer.setActiveTrack(n), this.captionTrackActive = n !== null, this.controlBar.settingsMenu.setActiveCaption(n ? o : this.i18n.captionsOff), this.controlBar.settingsMenu.setCaptionAppearance(n !== null ? this.buildCaptionAppearance() : null);
2659
+ const a = Xe(this.subtitleTracks, n);
2660
+ this.activeCaptionLabel = a ? n : null, this.sourceManager.selectTextTrack(((l = this.streamTracks.find((d) => d.label === n)) == null ? void 0 : l.id) ?? null), this.captionRenderer.setActiveTrack(a), this.captionTrackActive = a !== null, this.controlBar.settingsMenu.setActiveCaption(a ? n : this.i18n.captionsOff), this.controlBar.settingsMenu.setCaptionAppearance(a !== null ? this.buildCaptionAppearance() : null);
2406
2661
  };
2407
2662
  this.selectCaption = i;
2408
- const r = e && this.subtitleTracks.some((o) => o.label === e) ? e : null;
2663
+ const r = e && this.subtitleTracks.some((n) => n.label === e) ? e : null;
2409
2664
  this.controlBar.setCaptions(
2410
2665
  [
2411
2666
  { label: this.i18n.captionsOff, onSelect: () => i(null) },
2412
- ...this.subtitleTracks.map(({ label: o }) => ({ label: o, onSelect: () => i(o) }))
2667
+ ...this.subtitleTracks.map(({ label: n }) => ({ label: n, onSelect: () => i(n) }))
2413
2668
  ],
2414
2669
  r ?? this.i18n.captionsOff
2415
2670
  ), i(r);
@@ -2421,24 +2676,24 @@ class de extends HTMLElement {
2421
2676
  streamTrackLabel(e, i) {
2422
2677
  if (!(!e || e.toLowerCase() === i.toLowerCase() || /^(stream|audio|track|text|sub|subtitle|und)[\s_-]*\d*$/i.test(e)) || !i || i === "und") return e || i;
2423
2678
  try {
2424
- const o = new Intl.DisplayNames([this.localeCode], { type: "language" }).of(i);
2425
- if (o) return o.charAt(0).toLocaleUpperCase(this.localeCode) + o.slice(1);
2679
+ const n = new Intl.DisplayNames([this.localeCode], { type: "language" }).of(i);
2680
+ if (n) return n.charAt(0).toLocaleUpperCase(this.localeCode) + n.slice(1);
2426
2681
  } catch {
2427
2682
  }
2428
2683
  return e || i;
2429
2684
  }
2430
2685
  /** Aynı adlı iz varsa (ör. options.subtitles'ta da "English") dil/sırayla ayırt edilir. */
2431
2686
  uniqueLabel(e, i, r) {
2432
- const o = r.has(e) ? `${e} (${i})` : e;
2433
- return r.add(o), o;
2687
+ const n = r.has(e) ? `${e} (${i})` : e;
2688
+ return r.add(n), n;
2434
2689
  }
2435
2690
  /** Ayarlar menüsünün "Altyazı" alt menüsüne eklenen Boyut/Renk/Konum satırları — her zaman GÜNCEL `this.i18n`'i okur (dil sonradan değişse bile). */
2436
2691
  buildCaptionAppearance() {
2437
- const e = ["small", "normal", "large"], i = (r, o, n, l) => r.map((d, m) => ({
2692
+ const e = ["small", "normal", "large"], i = (r, n, a, l) => r.map((d, m) => ({
2438
2693
  value: d,
2439
- active: o() === d,
2694
+ active: n() === d,
2440
2695
  ariaLabel: `${l} ${m + 1}`,
2441
- onSelect: () => n(d)
2696
+ onSelect: () => a(d)
2442
2697
  }));
2443
2698
  return {
2444
2699
  sizeLabel: this.i18n.captionSize,
@@ -2449,14 +2704,14 @@ class de extends HTMLElement {
2449
2704
  })),
2450
2705
  bgColorLabel: this.i18n.captionBgColor,
2451
2706
  getBgColorOptions: () => i(
2452
- T.BG_COLOR_PRESETS,
2707
+ S.BG_COLOR_PRESETS,
2453
2708
  () => this.captionRenderer.getBgColor(),
2454
2709
  (r) => this.captionRenderer.setBgColor(r),
2455
2710
  this.i18n.captionBgColor
2456
2711
  ),
2457
2712
  textColorLabel: this.i18n.captionTextColor,
2458
2713
  getTextColorOptions: () => i(
2459
- T.TEXT_COLOR_PRESETS,
2714
+ S.TEXT_COLOR_PRESETS,
2460
2715
  () => this.captionRenderer.getTextColor(),
2461
2716
  (r) => this.captionRenderer.setTextColor(r),
2462
2717
  this.i18n.captionTextColor
@@ -2481,8 +2736,8 @@ class de extends HTMLElement {
2481
2736
  }
2482
2737
  requestFullscreenCompat() {
2483
2738
  const e = this, i = () => {
2484
- var r, o;
2485
- return (o = (r = this.iosVideo).webkitEnterFullscreen) == null ? void 0 : o.call(r);
2739
+ var r, n;
2740
+ return (n = (r = this.iosVideo).webkitEnterFullscreen) == null ? void 0 : n.call(r);
2486
2741
  };
2487
2742
  e.requestFullscreen ? e.requestFullscreen().catch(i) : e.webkitRequestFullscreen ? e.webkitRequestFullscreen() : i();
2488
2743
  }
@@ -2527,12 +2782,12 @@ class de extends HTMLElement {
2527
2782
  * alanın ortasına alınır, sığmazsa küçülür (en az 40px).
2528
2783
  */
2529
2784
  layoutCenterPlay() {
2530
- const e = this.videoArea, i = e.getBoundingClientRect(), r = this.controlBar.seekBar.el.getBoundingClientRect(), o = () => {
2785
+ const e = this.videoArea, i = e.getBoundingClientRect(), r = this.controlBar.seekBar.el.getBoundingClientRect(), n = () => {
2531
2786
  e.removeAttribute("data-center-play-shifted"), e.style.removeProperty("--hp-center-play-size"), e.style.removeProperty("--hp-center-play-shift"), e.style.removeProperty("--hp-center-play-shift-x");
2532
2787
  };
2533
- if (!i.height || !r.height || !e.hasAttribute("data-compact")) return o();
2534
- const n = 64, l = r.top - i.top - 8;
2535
- if (i.height / 2 + n / 2 <= l) return o();
2788
+ if (!i.height || !r.height || !e.hasAttribute("data-compact")) return n();
2789
+ const a = 64, l = r.top - i.top - 8;
2790
+ if (i.height / 2 + a / 2 <= l) return n();
2536
2791
  const d = Math.max(40, Math.min(56, l - 12)), m = Math.max(d / 2 + 6, l - d / 2), c = Math.round(m - i.height / 2);
2537
2792
  let h = 0;
2538
2793
  const p = this.controlBar.topEl.getBoundingClientRect();
@@ -2598,14 +2853,70 @@ class de extends HTMLElement {
2598
2853
  showCursor() {
2599
2854
  this.cursorTimer && clearTimeout(this.cursorTimer), this.cursorTimer = null, this.removeAttribute("data-cursor-hidden");
2600
2855
  }
2856
+ /** Ads plugin'ini bir kez kurar; erken (paralel) başlatılan kurulum varsa onu bekler. */
2857
+ installAdsOnce(e) {
2858
+ if (!e.ads || this.adsController) return Promise.resolve();
2859
+ if (!this.adsInstall) {
2860
+ const i = e.ads === !0 ? {} : e.ads;
2861
+ this.adsInstall = (async () => {
2862
+ const { installAds: r } = await import("./index-Br_RybXV.js");
2863
+ this.adsController = await r(
2864
+ {
2865
+ videoEl: this.videoEl,
2866
+ hostEl: this,
2867
+ adLayerEl: this.adLayerEl,
2868
+ hideChrome: () => this.blockChrome("ads", "reduced"),
2869
+ showChrome: () => this.unblockChrome("ads"),
2870
+ // IMA'nın KENDİ UI'ı üzerinden (ör. reklam video'suna
2871
+ // tıklama) duraklatılır/devam ettirilirse toolbar'ımızın
2872
+ // ikonu da senkron kalsın diye.
2873
+ onAdPlayStateChange: () => this.controlBar.refreshAdPlayState(),
2874
+ locale: this.localeCode,
2875
+ prerollGate: this.prerollGate,
2876
+ log: (n) => this.log.add({ source: "ads", ...n }),
2877
+ onAdProgress: (n) => this.controlBar.setAdInfo(n),
2878
+ // Sürekli oynatma (vconp): playlist / story bir sonraki içeriği kendiliğinden başlatıyorsa.
2879
+ isContinuousPlayback: () => {
2880
+ const n = this._options, a = (l) => !!l && l.autoplayNext !== !1;
2881
+ return a(n.playlist) || a(n.story);
2882
+ },
2883
+ surface: {
2884
+ videoEl: this.videoEl,
2885
+ containerEl: this.videoArea,
2886
+ enterFullscreen: () => this.requestFullscreenCompat(),
2887
+ labels: () => this.i18n
2888
+ }
2889
+ },
2890
+ i
2891
+ );
2892
+ })().catch((r) => {
2893
+ this.prerollGate.release(!0), this.adsInstall = null, this.dispatchEvent(new CustomEvent("hp:aderror", { detail: { message: String(r) } }));
2894
+ });
2895
+ }
2896
+ return this.adsInstall;
2897
+ }
2898
+ /** Preroll beklemesi başladı / bitti: halka döner, toolbar görünür kalır, oynat butonu "duraklat" görünür. */
2899
+ onPrerollWaitChange(e) {
2900
+ if (this.controlBar.setPendingPlay(e), this.controlBar.setLoading("preroll", e), this.isChromeBlocked) return;
2901
+ const i = !e && this.videoEl.paused;
2902
+ this.centerPlayButton.style.opacity = i ? "1" : "0", this.centerPlayButton.style.pointerEvents = i ? "auto" : "none";
2903
+ }
2904
+ /** Preroll beklenirken basılan oynat/duraklat (buton, Space/K) beklemeyi iptal eder. */
2905
+ cancelPrerollWait() {
2906
+ return this.prerollGate.isWaiting ? (this.prerollGate.cancelIntent(), !0) : !1;
2907
+ }
2908
+ /** Yükleme halkası açılınca kontroller görünür kalır ve gizlenmez; kapanınca normal otomatik gizleme sürer. */
2909
+ onLoadingChange(e) {
2910
+ this.loadingActive = e, e ? (this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = null, this.isChromeFullyHidden || this.showChrome()) : !this.videoEl.paused && !this.isChromeBlocked && this.scheduleAutoHide();
2911
+ }
2601
2912
  }
2602
2913
  /** Paket sürümü (ör. "1.0.4"). */
2603
- s(de, "version", B);
2604
- typeof window < "u" && !customElements.get("hope-player") && customElements.define("hope-player", de);
2914
+ s(ge, "version", M);
2915
+ typeof window < "u" && !customElements.get("hope-player") && customElements.define("hope-player", ge);
2605
2916
  export {
2606
- B as H,
2607
- de as a,
2608
- k as c,
2917
+ M as H,
2918
+ ge as a,
2919
+ w as c,
2609
2920
  x as f
2610
2921
  };
2611
- //# sourceMappingURL=index-BHO8Gbrj.js.map
2922
+ //# sourceMappingURL=index-D2aXO0eh.js.map