@hopeplayer/core 1.0.11 → 1.0.13

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 (72) hide show
  1. package/dist/HopePlayerElement.d.ts +34 -0
  2. package/dist/HopePlayerElement.d.ts.map +1 -1
  3. package/dist/chunks/ScratchSound-0XKHUcJK.js +174 -0
  4. package/dist/chunks/ScratchSound-0XKHUcJK.js.map +1 -0
  5. package/dist/chunks/{index-BHO8Gbrj.js → index-01P9jpUY.js} +819 -418
  6. package/dist/chunks/index-01P9jpUY.js.map +1 -0
  7. package/dist/chunks/{index-BeBmx35F.js → index-048h1-5X.js} +2 -2
  8. package/dist/chunks/{index-BeBmx35F.js.map → index-048h1-5X.js.map} +1 -1
  9. package/dist/chunks/{index-C6ONQXlF.js → index-9NzklChR.js} +2 -2
  10. package/dist/chunks/{index-C6ONQXlF.js.map → index-9NzklChR.js.map} +1 -1
  11. package/dist/chunks/index-BCMVXNL0.js +845 -0
  12. package/dist/chunks/index-BCMVXNL0.js.map +1 -0
  13. package/dist/chunks/{index-d_U9dcN6.js → index-BO0tjMR6.js} +2 -2
  14. package/dist/chunks/{index-d_U9dcN6.js.map → index-BO0tjMR6.js.map} +1 -1
  15. package/dist/chunks/index-BgJJr55r.js +311 -0
  16. package/dist/chunks/index-BgJJr55r.js.map +1 -0
  17. package/dist/chunks/{index-lwFM1iPV.js → index-CP1Y6U0c.js} +2 -2
  18. package/dist/chunks/{index-lwFM1iPV.js.map → index-CP1Y6U0c.js.map} +1 -1
  19. package/dist/chunks/index-DCXX1ZJG.js +108 -0
  20. package/dist/chunks/index-DCXX1ZJG.js.map +1 -0
  21. package/dist/chunks/{index-DGSYKljQ.js → index-n-1IIClr.js} +2 -2
  22. package/dist/chunks/{index-DGSYKljQ.js.map → index-n-1IIClr.js.map} +1 -1
  23. package/dist/controls/ControlBar.d.ts +32 -0
  24. package/dist/controls/ControlBar.d.ts.map +1 -1
  25. package/dist/controls/SeekBar.d.ts +8 -0
  26. package/dist/controls/SeekBar.d.ts.map +1 -1
  27. package/dist/controls/SettingsMenu.d.ts +3 -0
  28. package/dist/controls/SettingsMenu.d.ts.map +1 -1
  29. package/dist/controls/VolumePanel.d.ts +0 -2
  30. package/dist/controls/VolumePanel.d.ts.map +1 -1
  31. package/dist/debug/ErrorLog.d.ts +29 -0
  32. package/dist/debug/ErrorLog.d.ts.map +1 -0
  33. package/dist/hls/SourceManager.d.ts +11 -0
  34. package/dist/hls/SourceManager.d.ts.map +1 -1
  35. package/dist/hope-player.js +1 -1
  36. package/dist/i18n/locales/en.d.ts.map +1 -1
  37. package/dist/i18n/locales/tr.d.ts.map +1 -1
  38. package/dist/i18n/types.d.ts +19 -0
  39. package/dist/i18n/types.d.ts.map +1 -1
  40. package/dist/index.d.ts +2 -1
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/keyboard/KeyboardController.d.ts +2 -0
  43. package/dist/keyboard/KeyboardController.d.ts.map +1 -1
  44. package/dist/plugins/ads/AdSurfaceGuard.d.ts +39 -0
  45. package/dist/plugins/ads/AdSurfaceGuard.d.ts.map +1 -0
  46. package/dist/plugins/ads/AdsController.d.ts +103 -1
  47. package/dist/plugins/ads/AdsController.d.ts.map +1 -1
  48. package/dist/plugins/ads/PrerollGate.d.ts +51 -0
  49. package/dist/plugins/ads/PrerollGate.d.ts.map +1 -0
  50. package/dist/plugins/ads/preconnect.d.ts +2 -0
  51. package/dist/plugins/ads/preconnect.d.ts.map +1 -0
  52. package/dist/plugins/audio/AudioStage.d.ts +80 -0
  53. package/dist/plugins/audio/AudioStage.d.ts.map +1 -0
  54. package/dist/plugins/audio/ScratchSound.d.ts +48 -0
  55. package/dist/plugins/audio/ScratchSound.d.ts.map +1 -0
  56. package/dist/plugins/audio/index.d.ts +7 -0
  57. package/dist/plugins/audio/index.d.ts.map +1 -0
  58. package/dist/plugins/audio/vinylSvg.d.ts +12 -0
  59. package/dist/plugins/audio/vinylSvg.d.ts.map +1 -0
  60. package/dist/plugins/debug/DebugPanel.d.ts +37 -0
  61. package/dist/plugins/debug/DebugPanel.d.ts.map +1 -0
  62. package/dist/plugins/debug/index.d.ts +5 -0
  63. package/dist/plugins/debug/index.d.ts.map +1 -0
  64. package/dist/subtitles/CaptionRenderer.d.ts +6 -0
  65. package/dist/subtitles/CaptionRenderer.d.ts.map +1 -1
  66. package/dist/subtitles/attachTracks.d.ts.map +1 -1
  67. package/dist/types/index.d.ts +108 -1
  68. package/dist/types/index.d.ts.map +1 -1
  69. package/package.json +1 -1
  70. package/dist/chunks/index-BHO8Gbrj.js.map +0 -1
  71. package/dist/chunks/index-glxDu2eJ.js +0 -531
  72. 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 ve = Object.defineProperty;
2
+ var ye = (n, t, e) => t in n ? ve(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
+ var s = (n, t, e) => ye(n, typeof t != "symbol" ? t + "" : t, e);
4
+ const ke = '/*! 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\\:my-1{margin-block:var(--hp-spacing)}.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\\:inline-block{display:inline-block}.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-3{height:calc(var(--hp-spacing) * 3)}.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-3{width:calc(var(--hp-spacing) * 3)}.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-t{border-top-style:var(--tw-border-style);border-top-width:1px}.hp\\:border-on-surface\\/10{border-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:border-on-surface\\/10{border-color:color-mix(in oklab,var(--hp-color-on-surface) 10%,transparent)}}.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{width:100%;aspect-ratio:var(--hp-aspect-ratio,16 / 9);border-radius:var(--hp-radius);background:var(--hp-color-surface,#0a0a0a);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;width:min(360px,92vw)!important;aspect-ratio:var(--hp-aspect-ratio,16 / 9)!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)}}:host([data-audio]) .hp-center-play{display:none}.hp-audio{z-index:1;text-align:left;pointer-events:none;color:#fff;background:radial-gradient(80% 90% at 20% 10%,var(--hp-color-accent,#e5484d),transparent 70%),linear-gradient(160deg,#1d1d24,#0c0c10);position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;container-type:size}@supports (color:color-mix(in lab,red,red)){.hp-audio{background:radial-gradient(80% 90% at 20% 10%,color-mix(in srgb,var(--hp-color-accent,#e5484d) 38%,transparent),transparent 70%),linear-gradient(160deg,#1d1d24,#0c0c10)}}.hp-audio-backdrop{position:absolute;top:-8%;right:-8%;bottom:-8%;left:-8%}.hp-audio-backdrop img{object-fit:cover;filter:blur(28px)saturate(1.3)brightness(.55);width:100%;height:100%;transform:scale(1.08)}.hp-audio:not([data-cover]) .hp-audio-backdrop,.hp-audio:not([data-cover]) .hp-audio-sleeve img{display:none}.hp-audio-meta{z-index:3;text-shadow:0 1px 6px #0009;line-height:1.25;display:none;position:absolute;top:12px;left:14px;right:64px}.hp-audio[data-meta] .hp-audio-meta{display:block}.hp-audio-title{white-space:nowrap;text-overflow:ellipsis;font-size:15px;font-weight:700;overflow:hidden}.hp-audio-artist{opacity:.8;white-space:nowrap;text-overflow:ellipsis;margin-top:2px;font-size:12.5px;overflow:hidden}.hp-audio-area{inset:0 0 var(--hp-audio-bottom-space,66px) 0;justify-content:center;align-items:center;display:flex;position:absolute;container-type:size}.hp-audio[data-meta] .hp-audio-area{top:44px}.hp-audio-deck{--hp-deck-h:min(calc(var(--hp-vinyl-size,.78) * 100cqh), 62cqw);height:var(--hp-deck-h);align-items:center;display:flex;position:relative}.hp-audio[data-position=center] .hp-audio-deck,.hp-audio[data-position=none] .hp-audio-deck{--hp-deck-h:min(calc(var(--hp-vinyl-size,.78) * 100cqh), 90cqw)}.hp-audio[data-position=left] .hp-audio-deck{flex-direction:row-reverse}.hp-audio-sleeve{z-index:2;aspect-ratio:1;background:radial-gradient(70% 70% at 30% 25%,var(--hp-color-accent,#e5484d),transparent 75%),#26262d;border-radius:6px;flex:none;height:100%;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.hp-audio-sleeve{background:radial-gradient(70% 70% at 30% 25%,color-mix(in srgb,var(--hp-color-accent,#e5484d) 70%,#fff 0%),transparent 75%),#26262d}}.hp-audio-sleeve{box-shadow:0 18px 40px -12px #000000bf,0 0 0 1px #ffffff14}.hp-audio-sleeve img{object-fit:cover;width:100%;height:100%;display:block}.hp-audio-sleeve[hidden],.hp-vinyl[hidden],.hp-tonearm-holder[hidden]{display:none}.hp-vinyl{z-index:1;aspect-ratio:1;pointer-events:auto;touch-action:none;-webkit-tap-highlight-color:transparent;filter:drop-shadow(0 14px 26px #0009);border-radius:50%;outline:none;flex:none;height:96%;transition:margin .45s cubic-bezier(.2,.8,.2,1);position:relative}.hp-audio[data-position=right] .hp-vinyl{margin-left:calc(var(--hp-deck-h) * -.56)}.hp-audio[data-position=left] .hp-vinyl{margin-right:calc(var(--hp-deck-h) * -.56)}.hp-audio[data-position=right][data-playing] .hp-vinyl{margin-left:calc(var(--hp-deck-h) * -.46)}.hp-audio[data-position=left][data-playing] .hp-vinyl{margin-right:calc(var(--hp-deck-h) * -.46)}.hp-vinyl[data-scratch]:not([data-live]){cursor:grab}.hp-audio[data-scratching] .hp-vinyl{cursor:grabbing}.hp-vinyl:focus-visible{box-shadow:0 0 0 3px var(--hp-color-accent,#e5484d)}@supports (color:color-mix(in lab,red,red)){.hp-vinyl:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--hp-color-accent,#e5484d) 80%,transparent)}}.hp-vinyl-disc{will-change:transform;position:absolute;top:0;right:0;bottom:0;left:0}.hp-vinyl-disc svg,.hp-tonearm svg{width:100%;height:100%;display:block}.hp-vinyl-sheen{pointer-events:none;background:conic-gradient(from 200deg,#0000,#ffffff21 22deg,#0000 48deg,#0000 180deg,#ffffff17 205deg,#0000 232deg);border-radius:50%;position:absolute;top:0;right:0;bottom:0;left:0;-webkit-mask:radial-gradient(circle,#0000 0 35%,#000 36% 99%,#0000 100%);mask:radial-gradient(circle,#0000 0 35%,#000 36% 99%,#0000 100%)}.hp-tonearm-holder{pointer-events:none;position:absolute;top:0;right:0;bottom:0;left:0}.hp-audio[data-position=left] .hp-tonearm-holder{transform:scaleX(-1)}.hp-tonearm{transform-origin:70% 11%;filter:drop-shadow(0 6px 8px #00000080);width:46%;height:92%;transition:transform .6s cubic-bezier(.3,.7,.2,1);position:absolute;top:-6%;right:-14%;transform:rotate(-26deg)}.hp-audio[data-playing] .hp-tonearm{transform:rotate(0)}@media(prefers-reduced-motion:reduce){.hp-vinyl,.hp-tonearm{transition:none}}@container (max-height:230px){.hp-audio[data-meta] .hp-audio-meta{display:none}.hp-audio[data-meta] .hp-audio-area{top:6px}}[part=ad-layer][data-audio-ad]{background:0 0}[part=ad-layer][data-audio-ad] video{opacity:0}.hp-audio:after{content:"";pointer-events:none;z-index:2;background:linear-gradient(#0000,#00000047 45%,#0000009e);height:min(140px,45%);position:absolute;bottom:0;left:0;right:0}@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 V() {
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 n = navigator.userAgent, t = /iP(hone|od|ad)/.test(n) || navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1, e = /^((?!chrome|chromium|android|crios|fxios|edg|opr).)*safari/i.test(n);
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 G() {
11
+ const n = window;
12
+ return typeof n.MediaSource < "u" || typeof n.ManagedMediaSource < "u";
13
13
  }
14
- function ge(a, t) {
14
+ function xe(n, 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(n) ? "hls" : e === "video/mp4" || /\.mp4(?:$|[?#])/i.test(n) ? "mp4" : "unknown";
18
18
  }
19
- class ve {
19
+ class we {
20
20
  constructor(t, e) {
21
21
  s(this, "hls", null);
22
22
  s(this, "video");
@@ -35,9 +35,13 @@ class ve {
35
35
  configure(t) {
36
36
  this.hlsOptions = t ?? {};
37
37
  }
38
+ /** Bu kaynak zaten yüklü ve hatasız mı — aynı kaynak için yeniden yükleme (başa sarma) gerekmez. */
39
+ isLoaded(t, e) {
40
+ return !!this.last && this.last.src === t && this.last.type === e && !this.video.error && this.video.readyState > 0;
41
+ }
38
42
  async load(t, e) {
39
43
  this.last = { src: t, type: e }, this.destroy(), this.video.pause();
40
- const i = ge(t, e);
44
+ const i = xe(t, e);
41
45
  if (this.callbacks.onLevelsChanged([], -1), this.callbacks.onAudioTracksChanged([], -1), this.streamTextTracks.clear(), this.callbacks.onTextTracksFound([]), i !== "hls") {
42
46
  this.engineInfo = { engine: "native" }, this.video.src = t;
43
47
  return;
@@ -47,8 +51,8 @@ class ve {
47
51
  this.loadNativeHls(t, "option");
48
52
  return;
49
53
  }
50
- if (r !== "hls.js" && o && (D() || !H())) {
51
- this.loadNativeHls(t, D() ? "apple-native" : "no-mse");
54
+ if (r !== "hls.js" && o && (V() || !G())) {
55
+ this.loadNativeHls(t, V() ? "apple-native" : "no-mse");
52
56
  return;
53
57
  }
54
58
  await this.attachHlsJs(t);
@@ -73,10 +77,10 @@ class ve {
73
77
  * İlk metadata'dan önce kod 4 gelirse ve MSE varsa hls.js'e geç.
74
78
  */
75
79
  probeNativeHls(t) {
76
- if (!H() || this.engineInfo.reason === "hlsjs-failed" || this.engineInfo.reason === "option") return;
80
+ if (!G() || this.engineInfo.reason === "hlsjs-failed" || this.engineInfo.reason === "option") return;
77
81
  const e = () => r(), i = () => {
78
- var n, l;
79
- const o = ((n = this.video.error) == null ? void 0 : n.code) === 4;
82
+ var a, l;
83
+ const o = ((a = this.video.error) == null ? void 0 : a.code) === 4;
80
84
  r(), o && ((l = this.nativeAudioCleanup) == null || l.call(this), this.attachHlsJs(t));
81
85
  }, r = () => {
82
86
  this.video.removeEventListener("loadedmetadata", e), this.video.removeEventListener("error", i), this.nativeHlsProbe = null;
@@ -108,10 +112,22 @@ class ve {
108
112
  const i = new e(this.buildHlsConfig());
109
113
  this.hls = i, this.engineInfo = { engine: "hls.js" };
110
114
  let r = !1, o = !1;
111
- i.on(e.Events.ERROR, (m, c) => {
115
+ i.on(e.Events.ERROR, (u, c) => {
116
+ var h, p, m, b, v, y;
117
+ if (this.hls === i) {
118
+ const f = c;
119
+ (y = (v = this.callbacks).onStreamError) == null || y.call(v, {
120
+ type: String(c.type),
121
+ details: String(c.details),
122
+ fatal: !!c.fatal,
123
+ url: f.url ?? ((h = f.frag) == null ? void 0 : h.url) ?? ((p = f.context) == null ? void 0 : p.url),
124
+ httpStatus: (m = f.response) == null ? void 0 : m.code,
125
+ reason: f.reason ?? ((b = f.error) == null ? void 0 : b.message)
126
+ });
127
+ }
112
128
  if (!c.fatal || this.hls !== i) return;
113
- const h = [e.ErrorDetails.MANIFEST_LOAD_ERROR, e.ErrorDetails.MANIFEST_LOAD_TIMEOUT].includes(c.details);
114
- if (!r && h && this.video.canPlayType("application/vnd.apple.mpegurl") !== "") {
129
+ const g = [e.ErrorDetails.MANIFEST_LOAD_ERROR, e.ErrorDetails.MANIFEST_LOAD_TIMEOUT].includes(c.details);
130
+ if (!r && g && this.video.canPlayType("application/vnd.apple.mpegurl") !== "") {
115
131
  i.destroy(), this.hls = null, this.loadNativeHls(t, "hlsjs-failed");
116
132
  return;
117
133
  }
@@ -121,31 +137,31 @@ class ve {
121
137
  }
122
138
  i.stopLoad(), this.callbacks.onFatalError(c.type === e.ErrorTypes.NETWORK_ERROR ? "network" : "media");
123
139
  });
124
- const n = () => i.levels.map((m, c) => ({ index: c, height: m.height, bitrate: m.bitrate }));
140
+ const a = () => i.levels.map((u, c) => ({ index: c, height: u.height, bitrate: u.bitrate }));
125
141
  i.on(e.Events.MANIFEST_PARSED, () => {
126
- r = !0, this.callbacks.onLevelsChanged(n(), i.currentLevel);
127
- }), i.on(e.Events.LEVEL_SWITCHED, (m, c) => {
128
- this.callbacks.onLevelsChanged(n(), i.autoLevelEnabled ? -1 : c.level);
129
- });
130
- const l = () => i.audioTracks.map((m, c) => ({ index: c, label: m.name || m.lang || `${c + 1}`, lang: m.lang ?? "" }));
131
- 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) => {
132
- var h;
133
- for (const p of c.tracks) {
134
- const u = p.subtitleTrack, b = u ? `sub:${u.id}` : `cc:${p._id ?? p.label}`, g = p.kind === "captions" ? "captions" : "subtitles";
135
- this.streamTextTracks.set(b, { id: b, kind: g, label: p.label, lang: (u == null ? void 0 : u.lang) ?? ((h = p.closedCaptions) == null ? void 0 : h.lang) ?? "" });
142
+ r = !0, this.callbacks.onLevelsChanged(a(), i.currentLevel);
143
+ }), i.on(e.Events.LEVEL_SWITCHED, (u, c) => {
144
+ this.callbacks.onLevelsChanged(a(), i.autoLevelEnabled ? -1 : c.level);
145
+ });
146
+ const l = () => i.audioTracks.map((u, c) => ({ index: c, label: u.name || u.lang || `${c + 1}`, lang: u.lang ?? "" }));
147
+ i.on(e.Events.AUDIO_TRACKS_UPDATED, () => this.callbacks.onAudioTracksChanged(l(), i.audioTrack)), i.on(e.Events.AUDIO_TRACK_SWITCHED, (u, c) => this.callbacks.onAudioTracksChanged(l(), c.id)), i.on(e.Events.NON_NATIVE_TEXT_TRACKS_FOUND, (u, c) => {
148
+ var g;
149
+ for (const h of c.tracks) {
150
+ const p = h.subtitleTrack, m = p ? `sub:${p.id}` : `cc:${h._id ?? h.label}`, b = h.kind === "captions" ? "captions" : "subtitles";
151
+ this.streamTextTracks.set(m, { id: m, kind: b, label: h.label, lang: (p == null ? void 0 : p.lang) ?? ((g = h.closedCaptions) == null ? void 0 : g.lang) ?? "" });
136
152
  }
137
153
  this.callbacks.onTextTracksFound([...this.streamTextTracks.values()]);
138
- }), i.on(e.Events.CUES_PARSED, (m, c) => {
139
- const h = c.type === "subtitles" && c.subtitleTrack ? `sub:${c.subtitleTrack.id}` : `cc:${c.track}`;
140
- this.callbacks.onCues(h, c.cues);
154
+ }), i.on(e.Events.CUES_PARSED, (u, c) => {
155
+ const g = c.type === "subtitles" && c.subtitleTrack ? `sub:${c.subtitleTrack.id}` : `cc:${c.track}`;
156
+ this.callbacks.onCues(g, c.cues);
141
157
  }), i.attachMedia(this.video), i.loadSource(t);
142
158
  }
143
159
  buildHlsConfig() {
144
160
  const t = this.hlsOptions.config ?? {}, e = { enableWorker: !0, renderTextTracksNatively: !1, liveDurationInfinity: !0, ...t };
145
161
  if (this.hlsOptions.withCredentials) {
146
162
  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" };
163
+ e.xhrSetup = (o, a, l) => (o.withCredentials = !0, i == null ? void 0 : i(o, a, l)), e.fetchSetup = (o, a) => {
164
+ const l = { ...a, credentials: "include" };
149
165
  return r ? r(o, l) : new Request(o.url, l);
150
166
  };
151
167
  }
@@ -183,13 +199,13 @@ class ve {
183
199
  (t = this.nativeHlsProbe) == null || t.call(this), (e = this.nativeAudioCleanup) == null || e.call(this), this.hls && (this.hls.destroy(), this.hls = null);
184
200
  }
185
201
  }
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}`;
202
+ function w(n) {
203
+ if (!Number.isFinite(n) || n < 0) return "0:00";
204
+ const t = Math.floor(n), e = Math.floor(t / 3600), i = Math.floor(t % 3600 / 60), r = t % 60, o = e > 0 ? String(i).padStart(2, "0") : String(i), a = String(r).padStart(2, "0");
205
+ return e > 0 ? `${e}:${o}:${a}` : `${o}:${a}`;
190
206
  }
191
- const fe = 10, ye = 1;
192
- class ke {
207
+ const Ee = 10, Ce = 1;
208
+ class Te {
193
209
  constructor(t, e) {
194
210
  s(this, "el");
195
211
  s(this, "trackEl");
@@ -218,9 +234,9 @@ class ke {
218
234
  return;
219
235
  }
220
236
  const r = e.start + i * (e.end - e.start);
221
- 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));
223
- this.hoverTimeEl.style.transform = `translateX(${l}px)`;
237
+ this.hoverTimeEl.textContent = e.live ? `-${w(e.end - r)}` : w(r), this.hoverTimeEl.setAttribute("data-visible", "");
238
+ const o = this.hoverTimeEl.offsetWidth, a = Math.min(Math.max(this.layoutXAtClientX(t.clientX) - o / 2, 0), Math.max(this.trackWidth - o, 0));
239
+ this.hoverTimeEl.style.transform = `translateX(${a}px)`;
224
240
  });
225
241
  s(this, "onHoverLeave", () => {
226
242
  this.hoverTimeEl.removeAttribute("data-visible"), this.hoverDotEl.removeAttribute("data-visible");
@@ -264,21 +280,21 @@ class ke {
264
280
  let o = 0;
265
281
  for (let l = 0; l < this.video.buffered.length; l++)
266
282
  this.video.buffered.start(l) <= this.video.currentTime && (o = Math.max(o, this.video.buffered.end(l)));
267
- const n = i(o);
283
+ const a = i(o);
268
284
  if (this.chapters.length)
269
285
  for (const l of this.chapters) {
270
- 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)})`;
286
+ const d = l.end - l.start, u = (c) => d > 0 ? Math.min(1, Math.max(0, (c - l.start) / d)) : 0;
287
+ l.playedEl.style.transform = `scaleX(${u(r)})`, l.bufferedEl.style.transform = `scaleX(${u(a)})`;
272
288
  }
273
289
  else
274
- this.playedEl.style.transform = `scaleX(${r})`, this.bufferedEl.style.transform = `scaleX(${n})`;
290
+ this.playedEl.style.transform = `scaleX(${r})`, this.bufferedEl.style.transform = `scaleX(${a})`;
275
291
  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
292
  });
277
293
  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");
278
294
  const i = document.createElement("div");
279
295
  i.className = "hp:absolute hp:inset-x-0 hp:h-[var(--hp-seek-track-h)] hp:rounded-full hp:bg-on-surface/25 hp:group-hover:h-[var(--hp-seek-track-h-hover)] hp:transition-[height] hp:duration-150", this.el.appendChild(i), this.trackEl = i, this.bufferedEl = document.createElement("div"), this.bufferedEl.className = "hp:absolute hp:inset-0 hp:rounded-full hp:bg-on-surface/40", this.bufferedEl.style.transformOrigin = "left", this.bufferedEl.style.willChange = "transform", i.appendChild(this.bufferedEl), this.playedEl = document.createElement("div"), this.playedEl.className = "hp:absolute hp:inset-0 hp:rounded-full hp:bg-accent", this.playedEl.style.transformOrigin = "left", this.playedEl.style.willChange = "transform", i.appendChild(this.playedEl), this.thumbEl = document.createElement("div"), this.thumbEl.className = "hp-seek-thumb", this.thumbEl.setAttribute("part", "seek-thumb"), this.el.appendChild(this.thumbEl), this.hoverDotEl = document.createElement("div"), this.hoverDotEl.className = "hp-seek-hover-dot", this.hoverDotEl.setAttribute("part", "seek-hover-dot"), this.el.appendChild(this.hoverDotEl), this.hoverTimeEl = document.createElement("div"), this.hoverTimeEl.className = "hp-seek-time", this.hoverTimeEl.setAttribute("part", "seek-time"), this.el.appendChild(this.hoverTimeEl), this.el.addEventListener("pointerdown", this.onPointerDown), this.el.addEventListener("pointermove", this.onHoverMove), this.el.addEventListener("pointerleave", this.onHoverLeave), this.el.addEventListener("keydown", this.onKeyDown), t.addEventListener("play", this.startLoop), t.addEventListener("pause", this.stopLoop), t.addEventListener("ended", this.stopLoop), t.addEventListener("timeupdate", this.render), t.addEventListener("progress", this.render), t.addEventListener("loadedmetadata", this.render), t.paused || this.startLoop(), this.resizeObserver = new ResizeObserver(() => {
280
- this.trackWidth = this.el.getBoundingClientRect().width, this.measureChapters(), this.render();
281
- }), this.resizeObserver.observe(this.el), this.trackWidth = this.el.getBoundingClientRect().width;
296
+ this.trackWidth = this.layoutWidth(), this.measureChapters(), this.render();
297
+ }), this.resizeObserver.observe(this.el), this.trackWidth = this.layoutWidth();
282
298
  }
283
299
  /**
284
300
  * Seek bar'ın temsil ettiği zaman aralığı: VOD'da 0 → süre; canlıda (duration Infinity) yayının izin verdiği
@@ -291,7 +307,7 @@ class ke {
291
307
  const { seekable: e } = this.video;
292
308
  if (!e.length) return null;
293
309
  const i = e.start(0), r = e.end(e.length - 1);
294
- return r - i >= fe ? { start: i, end: r, live: !0 } : null;
310
+ return r - i >= Ee ? { start: i, end: r, live: !0 } : null;
295
311
  }
296
312
  /** Kendi zamanını gösteren plugin'ler (sprite/segments) varsayılan hover zamanını gizler — keyed set. */
297
313
  suppressHoverTime(t, e) {
@@ -302,13 +318,13 @@ class ke {
302
318
  }
303
319
  /** Ekran x koordinatını 0–1 zaman oranına çevirir — chapter modunda parça boşluklarını hesaba katar (segments plugin'inin hover popup'ı da bunu kullanıyor). */
304
320
  ratioAtClientX(t) {
305
- const e = this.el.getBoundingClientRect(), i = t - e.left;
306
- if (!this.chapters.length) return Math.min(1, Math.max(0, i / e.width));
307
- 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);
321
+ const e = this.layoutXAtClientX(t);
322
+ if (!this.chapters.length) return this.trackWidth > 0 ? Math.min(1, Math.max(0, e / this.trackWidth)) : 0;
323
+ for (let i = 0; i < this.chapters.length; i++) {
324
+ const r = this.chapters[i], o = this.chapters[i + 1], a = o ? o.left : 1 / 0;
325
+ if (e < a || !o) {
326
+ const l = r.width > 0 ? Math.min(1, Math.max(0, (e - r.left) / r.width)) : 0;
327
+ return r.start + l * (r.end - r.start);
312
328
  }
313
329
  }
314
330
  return 1;
@@ -328,27 +344,40 @@ class ke {
328
344
  r.className = "hp-chapter", r.setAttribute("part", "segment-band"), r.style.flex = `${Math.max(i.end - i.start, 0)} 1 0px`;
329
345
  const o = document.createElement("div");
330
346
  o.className = "hp-chapter-fill hp-chapter-buffered";
331
- 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 };
347
+ const a = document.createElement("div");
348
+ return a.className = "hp-chapter-fill hp-chapter-played", i.color && (a.style.background = i.color), r.append(o, a), e.appendChild(r), { ...i, el: r, bufferedEl: o, playedEl: a, left: 0, width: 0 };
333
349
  }), this.trackEl.style.display = "none", this.trackEl.after(e), this.chaptersEl = e, this.measureChapters(), this.render(), this.chapters.map((i) => i.el);
334
350
  }
335
351
  clearChapters() {
336
352
  var t;
337
353
  (t = this.chaptersEl) == null || t.remove(), this.chaptersEl = null, this.chapters = [], this.trackEl.style.display = "", this.render();
338
354
  }
355
+ /**
356
+ * Seek bar'ın DÜZEN genişliği (px). getBoundingClientRect() ata elementlerin CSS transform'undan etkilenir: player
357
+ * ölçekli bir giriş animasyonuyla (ör. scale(0.985)) gösterilirken ölçülürse genişlik küçük kalıyor, animasyon
358
+ * bitince düzen boyutu değişmediği için ResizeObserver tekrar tetiklenmiyor ve thumb dolu kısmın gerisinde kalıyordu.
359
+ */
360
+ /** Ekran x koordinatının seek bar içindeki DÜZEN px'i (ata transform'u ölçekliyorsa ona göre düzeltilmiş). */
361
+ layoutXAtClientX(t) {
362
+ const e = this.el.getBoundingClientRect();
363
+ return e.width > 0 ? (t - e.left) * this.trackWidth / e.width : 0;
364
+ }
365
+ layoutWidth() {
366
+ return parseFloat(getComputedStyle(this.el).width) || this.el.offsetWidth;
367
+ }
339
368
  measureChapters() {
340
369
  if (!this.chapters.length) return;
341
- const t = this.el.getBoundingClientRect().left;
342
- for (const e of this.chapters) {
343
- const i = e.el.getBoundingClientRect();
344
- e.left = i.left - t, e.width = i.width;
370
+ const t = this.el.getBoundingClientRect(), e = t.width > 0 ? this.trackWidth / t.width : 1;
371
+ for (const i of this.chapters) {
372
+ const r = i.el.getBoundingClientRect();
373
+ i.left = (r.left - t.left) * e, i.width = r.width * e;
345
374
  }
346
375
  }
347
376
  seekToRatio(t) {
348
377
  const e = this.timeline();
349
378
  if (!e) return;
350
379
  const i = e.start + t * (e.end - e.start);
351
- this.video.currentTime = e.live ? Math.min(i, e.end - ye) : i, this.render();
380
+ this.video.currentTime = e.live ? Math.min(i, e.end - Ce) : i, this.render();
352
381
  }
353
382
  /** 0–1 arası oranda, seek bar üzerine ince bir işaret çizgisi ekler (ör. loop A/B noktaları). */
354
383
  addMarker(t, e = "") {
@@ -366,15 +395,15 @@ class ke {
366
395
  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
396
  }
368
397
  }
369
- function k(a, t = "") {
398
+ function E(n, t = "") {
370
399
  const e = document.createElement("i");
371
- return e.className = `hp-icon hp-icon-${a}${t ? ` ${t}` : ""}`, e.setAttribute("aria-hidden", "true"), e;
400
+ return e.className = `hp-icon hp-icon-${n}${t ? ` ${t}` : ""}`, e.setAttribute("aria-hidden", "true"), e;
372
401
  }
373
- function C(a, t) {
374
- a.className = a.className.replace(/hp-icon-[\w-]+/, `hp-icon-${t}`);
402
+ function L(n, t) {
403
+ n.className = n.className.replace(/hp-icon-[\w-]+/, `hp-icon-${t}`);
375
404
  }
376
- const A = 0.05, we = 150;
377
- class xe {
405
+ const M = 0.05, Se = 150;
406
+ class Ae {
378
407
  constructor(t, e, i) {
379
408
  s(this, "el");
380
409
  /** Dokunmatikte ses butonu gizli; sessiz oynarken görünen "Sesi aç" rozeti (chrome dışında monte edilir, otomatik gizlenmez). */
@@ -395,15 +424,15 @@ class xe {
395
424
  s(this, "scheduleHide", () => {
396
425
  this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = setTimeout(() => {
397
426
  this.hideTimer = null, this.slider.style.opacity = "0", this.slider.style.pointerEvents = "none";
398
- }, we);
427
+ }, Se);
399
428
  });
400
429
  s(this, "onWheel", (t) => {
401
430
  if (t.preventDefault(), this.adHooks.isAdActive()) {
402
431
  const r = this.adHooks.getVolume();
403
- this.adHooks.setVolume(Math.min(1, Math.max(0, r + (t.deltaY < 0 ? A : -A)))), this.render();
432
+ this.adHooks.setVolume(Math.min(1, Math.max(0, r + (t.deltaY < 0 ? M : -M)))), this.render();
404
433
  return;
405
434
  }
406
- const e = this.video.muted ? 0 : this.video.volume, i = Math.min(1, Math.max(0, e + (t.deltaY < 0 ? A : -A)));
435
+ const e = this.video.muted ? 0 : this.video.volume, i = Math.min(1, Math.max(0, e + (t.deltaY < 0 ? M : -M)));
407
436
  this.video.volume = i, this.video.muted = i === 0;
408
437
  });
409
438
  s(this, "onToggleMute", () => {
@@ -441,11 +470,11 @@ class xe {
441
470
  const e = t === 0 ? this.labels.unmute : this.labels.mute;
442
471
  this.button.setAttribute("aria-label", e);
443
472
  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");
473
+ this.unmuteBadge.toggleAttribute("data-visible", t === 0 && i), this.unmuteText.textContent = this.labels.unmute, t === 0 ? L(this.iconEl, "volume-muted") : t < 0.5 ? L(this.iconEl, "volume-low") : L(this.iconEl, "volume-high");
445
474
  });
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) => {
475
+ 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(E("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
476
  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");
477
+ }), 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 = E("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
478
  const r = document.createElement("div");
450
479
  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
480
  }
@@ -473,18 +502,12 @@ class xe {
473
502
  refreshForAdMode() {
474
503
  this.render();
475
504
  }
476
- setIconColor(t) {
477
- this.iconEl.style.color = t;
478
- }
479
- setSliderFillColor(t) {
480
- this.sliderFill.style.background = t;
481
- }
482
505
  destroy() {
483
506
  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
507
  }
485
508
  }
486
- const Ee = 8, S = 8, Ce = 100, V = 256;
487
- class Te {
509
+ const Le = 8, R = 8, Pe = 100, q = 256;
510
+ class Me {
488
511
  constructor(t, e, i) {
489
512
  s(this, "el");
490
513
  s(this, "button");
@@ -514,17 +537,20 @@ class Te {
514
537
  if (!t) return;
515
538
  const e = t.getBoundingClientRect(), i = this.button.getBoundingClientRect(), r = this.el.getBoundingClientRect(), o = !!this.el.closest(".hp-top-bar");
516
539
  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`;
540
+ const a = this.panel.scrollHeight, l = (o ? e.bottom - i.bottom : i.top - e.top) - Le - R;
541
+ if (a <= l || l >= Pe) {
542
+ this.panel.style.maxHeight = `${Math.min(q, l)}px`;
520
543
  return;
521
544
  }
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" });
545
+ this.panel.style.maxHeight = `${Math.min(q, e.height - 2 * R)}px`, o ? Object.assign(this.panel.style, { top: `${e.top + R - r.top}px`, marginTop: "0" }) : Object.assign(this.panel.style, { bottom: `${r.bottom - (e.bottom - R)}px`, marginBottom: "0" });
523
546
  });
524
547
  s(this, "onDocumentClick", (t) => {
525
548
  this.open && !t.composedPath().includes(this.el) && this.close();
526
549
  });
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) => {
550
+ s(this, "backToCaptionSettings", () => {
551
+ this.currentPanel = "captions-settings", this.renderCaptionSettings();
552
+ });
553
+ 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(E("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
554
  r.stopPropagation(), this.toggle();
529
555
  }), document.addEventListener("click", this.onDocumentClick, !0), this.renderMain();
530
556
  }
@@ -540,7 +566,7 @@ class Te {
540
566
  }
541
567
  /** Altyazı AÇIKKEN "Altyazı" alt menüsüne eklenecek Boyut/Renk/Konum satırları — `null` kaldırır. */
542
568
  setCaptionAppearance(t) {
543
- this.captionAppearance = t, (this.currentPanel === "captions" || this.currentPanel === "captions-size" || this.currentPanel === "captions-bg" || this.currentPanel === "captions-text") && this.render();
569
+ this.captionAppearance = t, (this.currentPanel === "captions" || this.currentPanel === "captions-settings" || this.currentPanel === "captions-size" || this.currentPanel === "captions-bg" || this.currentPanel === "captions-text") && this.render();
544
570
  }
545
571
  /** Ana menüye tek aç/kapa satırı ekler (ör. QrResume). */
546
572
  setQrResumeToggle(t) {
@@ -581,7 +607,7 @@ class Te {
581
607
  }
582
608
  backRow(t, e) {
583
609
  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"));
610
+ 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(E("chevron-left", "hp:text-sm"));
585
611
  const r = document.createElement("span");
586
612
  return r.textContent = t, i.appendChild(r), i.addEventListener("click", e), i;
587
613
  }
@@ -590,6 +616,7 @@ class Te {
590
616
  else if (this.currentPanel === "speed") this.renderSpeed();
591
617
  else if (this.currentPanel === "quality") this.renderQuality();
592
618
  else if (this.currentPanel === "captions") this.renderCaptions();
619
+ else if (this.currentPanel === "captions-settings") this.renderCaptionSettings();
593
620
  else if (this.currentPanel === "captions-size") this.renderCaptionsSize();
594
621
  else if (this.currentPanel === "captions-bg") this.renderCaptionColorPanel("bg");
595
622
  else if (this.currentPanel === "captions-text") this.renderCaptionColorPanel("text");
@@ -667,30 +694,47 @@ class Te {
667
694
  );
668
695
  }
669
696
  if (this.captionAppearance && this.activeCaptionLabel !== this.labels.captionsOff) {
670
- const t = this.captionAppearance;
671
- this.panel.appendChild(
672
- this.row(t.sizeLabel, "", () => {
673
- this.currentPanel = "captions-size", this.renderCaptionsSize();
674
- })
675
- ), this.panel.appendChild(
676
- this.row(t.bgColorLabel, "", () => {
677
- this.currentPanel = "captions-bg", this.renderCaptionColorPanel("bg");
678
- })
679
- ), this.panel.appendChild(
680
- this.row(t.textColorLabel, "", () => {
681
- this.currentPanel = "captions-text", this.renderCaptionColorPanel("text");
682
- })
683
- ), this.panel.appendChild(
684
- this.row(t.resetPositionLabel, "", () => {
685
- t.onResetPosition(), this.close();
697
+ const t = document.createElement("div");
698
+ t.className = "hp:my-1 hp:border-t hp:border-on-surface/10", t.setAttribute("role", "separator"), this.panel.appendChild(t), this.panel.appendChild(
699
+ this.row(this.labels.captionSettings, "", () => {
700
+ this.currentPanel = "captions-settings", this.renderCaptionSettings();
686
701
  })
687
702
  );
688
703
  }
689
704
  }
705
+ /** Altyazı → Altyazı ayarları: boyut, arka plan / yazı rengi, konumu sıfırla — her satırda o anki değer. */
706
+ renderCaptionSettings() {
707
+ var i, r, o;
708
+ this.panel.innerHTML = "", this.panel.appendChild(
709
+ this.backRow(this.labels.captionSettings, () => {
710
+ this.currentPanel = "captions", this.renderCaptions();
711
+ })
712
+ );
713
+ const t = this.captionAppearance;
714
+ if (!t) return;
715
+ const e = (a) => a ? `<span class="hp:inline-block hp:w-3 hp:h-3 hp:rounded-full hp:border hp:border-on-surface/30" style="background:${a}"></span>` : "";
716
+ this.panel.appendChild(
717
+ this.row(t.sizeLabel, ((i = t.getSizeOptions().find((a) => a.active)) == null ? void 0 : i.label) ?? "", () => {
718
+ this.currentPanel = "captions-size", this.renderCaptionsSize();
719
+ })
720
+ ), this.panel.appendChild(
721
+ this.row(t.bgColorLabel, e((r = t.getBgColorOptions().find((a) => a.active)) == null ? void 0 : r.value), () => {
722
+ this.currentPanel = "captions-bg", this.renderCaptionColorPanel("bg");
723
+ })
724
+ ), this.panel.appendChild(
725
+ this.row(t.textColorLabel, e((o = t.getTextColorOptions().find((a) => a.active)) == null ? void 0 : o.value), () => {
726
+ this.currentPanel = "captions-text", this.renderCaptionColorPanel("text");
727
+ })
728
+ ), this.panel.appendChild(
729
+ this.row(t.resetPositionLabel, "", () => {
730
+ t.onResetPosition(), this.close();
731
+ })
732
+ );
733
+ }
690
734
  renderCaptionsSize() {
691
735
  this.panel.innerHTML = "";
692
736
  const t = this.captionAppearance;
693
- if (this.panel.appendChild(this.backRow((t == null ? void 0 : t.sizeLabel) ?? this.labels.captionSize, () => this.renderCaptions())), !!t)
737
+ if (this.panel.appendChild(this.backRow((t == null ? void 0 : t.sizeLabel) ?? this.labels.captionSize, this.backToCaptionSettings)), !!t)
694
738
  for (const e of t.getSizeOptions())
695
739
  this.panel.appendChild(
696
740
  this.row(e.label, e.active ? '<i class="hp-icon hp-icon-check"></i>' : "", () => {
@@ -702,14 +746,14 @@ class Te {
702
746
  renderCaptionColorPanel(t) {
703
747
  this.panel.innerHTML = "";
704
748
  const e = this.captionAppearance, i = t === "bg" ? (e == null ? void 0 : e.bgColorLabel) ?? this.labels.captionBgColor : (e == null ? void 0 : e.textColorLabel) ?? this.labels.captionTextColor;
705
- if (this.panel.appendChild(this.backRow(i, () => this.renderCaptions())), !e) return;
749
+ if (this.panel.appendChild(this.backRow(i, this.backToCaptionSettings)), !e) return;
706
750
  const r = document.createElement("div");
707
751
  r.className = "hp:flex hp:flex-wrap hp:gap-2 hp:px-3 hp:py-2";
708
752
  const o = t === "bg" ? e.getBgColorOptions() : e.getTextColorOptions();
709
- for (const n of o) {
753
+ for (const a of o) {
710
754
  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();
755
+ 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", () => {
756
+ a.onSelect(), this.render();
713
757
  }), r.appendChild(l);
714
758
  }
715
759
  this.panel.appendChild(r);
@@ -722,27 +766,27 @@ class Te {
722
766
  document.removeEventListener("click", this.onDocumentClick, !0), this.panelObserver.disconnect();
723
767
  }
724
768
  }
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));
769
+ function le(n, t) {
770
+ const e = n.seekable.length ? n.seekable.start(0) : 0, i = Number.isFinite(n.duration) ? n.duration : n.seekable.length ? n.seekable.end(n.seekable.length - 1) : n.currentTime;
771
+ n.currentTime = Math.max(e, Math.min(i, n.currentTime + t));
728
772
  }
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}`);
773
+ const Re = 15, Be = 480, ze = 150, W = ["waiting", "seeking"], X = ["playing", "canplay", "canplaythrough", "seeked", "pause", "error", "emptied"];
774
+ function $(n, t) {
775
+ const { btn: e } = A("", `skip-${n}`);
732
776
  e.classList.add("hp-skip-btn"), e.setAttribute("part", t);
733
777
  const i = document.createElement("span");
734
778
  return i.className = "hp-skip-num", i.setAttribute("aria-hidden", "true"), e.appendChild(i), e.style.display = "none", { btn: e, num: i };
735
779
  }
736
- function w(a, t) {
737
- a.setAttribute("aria-label", t);
780
+ function C(n, t) {
781
+ n.setAttribute("aria-label", t);
738
782
  }
739
- function E(a, t, e) {
783
+ function A(n, t, e) {
740
784
  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)]");
785
+ i.type = "button", C(i, n), 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";
786
+ const r = E(t, "hp:text-[length:var(--hp-ctrl-icon-size)]");
743
787
  return i.appendChild(r), { btn: i, icon: r };
744
788
  }
745
- class Pe {
789
+ class Ne {
746
790
  constructor(t, e, i, r) {
747
791
  s(this, "el");
748
792
  s(this, "seekBar");
@@ -760,11 +804,17 @@ class Pe {
760
804
  s(this, "seekingEnabled", !0);
761
805
  s(this, "leftGroup");
762
806
  s(this, "loadingTimer", null);
807
+ /** Halkayı açık tutan sebepler: 'media' (buffer bekleniyor) ve player'ın verdikleri (ör. 'preroll'). */
808
+ s(this, "loadingReasons", /* @__PURE__ */ new Set());
809
+ /** Preroll beklenirken video duraklatılmış olsa da kullanıcı oynatmak istedi — buton "duraklat" görünür. */
810
+ s(this, "pendingPlay", !1);
763
811
  /** Sarma butonuyla sarıldığında (sn, negatif = geri) — sarma bildirimi için. */
764
812
  s(this, "onSkip", null);
765
813
  s(this, "fullscreenButton");
766
814
  s(this, "fullscreenIcon");
767
815
  s(this, "timeLabel");
816
+ /** Reklam sırasında süre etiketinin yerinde: "Reklam 2/3 · 0:12". */
817
+ s(this, "adInfoEl");
768
818
  s(this, "showRemaining", !1);
769
819
  /** Kompakt düzende (player < 480px) sağ grubun taşındığı üst bar; tam ekran altta kalır. */
770
820
  s(this, "topEl");
@@ -776,6 +826,8 @@ class Pe {
776
826
  s(this, "liveBadge");
777
827
  s(this, "liveText");
778
828
  s(this, "adMode", !1);
829
+ /** Ses modu: tam ekran / PiP yok — dar düzende tam ekran kutusu da boş kalmasın. */
830
+ s(this, "audioMode", !1);
779
831
  s(this, "callbacks");
780
832
  s(this, "row");
781
833
  s(this, "extraButtonAnchor");
@@ -784,32 +836,32 @@ class Pe {
784
836
  t.stopPropagation(), this.toggleTimeMode();
785
837
  });
786
838
  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);
839
+ const t = this.callbacks.isAdActive() ? this.callbacks.adIsPaused() : this.video.paused && !this.pendingPlay;
840
+ L(this.playIcon, t ? "play" : "pause"), C(this.playButton, t ? this.labels.play : this.labels.pause);
789
841
  });
790
842
  s(this, "renderTime", () => {
791
843
  var r, o;
792
844
  const t = this.video.duration === 1 / 0;
793
845
  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;
846
+ const a = this.video.duration, l = this.video.currentTime;
795
847
  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)}`;
848
+ const d = Number.isFinite(a) ? Math.floor(a) : 0, u = Math.max(0, d - Math.floor(l));
849
+ this.timeLabel.textContent = `-${w(u)} / ${w(a)}`;
798
850
  } else
799
- this.timeLabel.textContent = `${x(l)} / ${x(n)}`;
851
+ this.timeLabel.textContent = `${w(l)} / ${w(a)}`;
800
852
  return;
801
853
  }
802
- const e = ((o = (r = this.callbacks).liveSyncPosition) == null ? void 0 : o.call(r)) ?? this.liveEdge(), i = e !== null && e - this.video.currentTime > Ae;
854
+ const e = ((o = (r = this.callbacks).liveSyncPosition) == null ? void 0 : o.call(r)) ?? this.liveEdge(), i = e !== null && e - this.video.currentTime > Re;
803
855
  this.liveBadge.toggleAttribute("data-behind", i);
804
856
  });
805
857
  /** Buffer bekleniyor (oynarken takılma ya da buffer'lanmamış bir yere atlama). */
806
858
  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));
859
+ t.type === "seeking" && this.video.readyState >= HTMLMediaElement.HAVE_FUTURE_DATA || this.loadingTimer || this.loadingReasons.has("media") || (this.loadingTimer = setTimeout(() => {
860
+ this.loadingTimer = null, this.setLoading("media", !0);
861
+ }, ze));
810
862
  });
811
863
  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"));
864
+ 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
865
  });
814
866
  s(this, "goToLive", () => {
815
867
  var i, r;
@@ -817,29 +869,29 @@ class Pe {
817
869
  e === null && t == null || (this.video.currentTime = t ?? Math.max(0, e - 1), this.video.paused && this.video.play().catch(() => {
818
870
  }), this.renderTime());
819
871
  });
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);
872
+ 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 Te(t, r), this.seekBar.el.classList.add("hp:pointer-events-auto"), this.el.appendChild(this.seekBar.el);
821
873
  const o = document.createElement("div");
822
874
  o.className = "hp:flex hp:items-center hp:gap-2", this.el.appendChild(o), this.bottomRow = o;
823
- 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;
875
+ const a = document.createElement("div");
876
+ 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", o.appendChild(a), this.leftGroup = a;
825
877
  const l = document.createElement("span");
826
878
  l.className = "hp-loading-ring", l.setAttribute("aria-hidden", "true");
827
879
  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);
880
+ d.className = "hp-loading-ring-mask", d.appendChild(document.createElement("span")), l.appendChild(d), a.appendChild(l);
881
+ const u = A(r.play, "play", "K");
882
+ this.playButton = u.btn, this.playIcon = u.icon, this.playButton.setAttribute("part", "play-pause-button"), this.playButton.addEventListener("click", () => this.togglePlay()), a.appendChild(this.playButton), this.skipBack = $("back", "skip-back-button"), this.skipBack.btn.addEventListener("click", () => this.skip(-(this.skipSeconds.back ?? 0))), this.skipForward = $("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
883
  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);
884
+ 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);
885
+ const g = document.createElement("div");
886
+ g.className = "hp:flex-1", o.appendChild(g);
833
887
  const h = document.createElement("div");
834
- h.className = "hp:flex-1", o.appendChild(h);
835
- 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");
838
- 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);
888
+ h.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(h), this.rightGroup = h, this.settingsMenu = new Me(t, e, r), h.appendChild(this.settingsMenu.el), this.extraButtonAnchor = this.settingsMenu.el, this.row = h;
889
+ const p = A(r.pip, "pip");
890
+ this.pipButton = p.btn, this.pipButton.addEventListener("click", () => this.togglePip()), document.pictureInPictureEnabled || (this.pipButton.style.display = "none"), h.appendChild(this.pipButton);
891
+ const m = A(r.fullscreenEnter, "fullscreen-enter", "F");
892
+ this.fullscreenButton = m.btn, this.fullscreenIcon = m.icon, this.fullscreenButton.addEventListener("click", () => this.toggleFullscreen()), h.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);
893
+ for (const b of W) t.addEventListener(b, this.onLoadingStart);
894
+ for (const b of X) t.addEventListener(b, this.onLoadingEnd);
843
895
  this.renderPlayState(), this.renderTime();
844
896
  }
845
897
  /** 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 +899,15 @@ class Pe {
847
899
  var i;
848
900
  const t = this.el.getBoundingClientRect().width;
849
901
  if (t === 0) return;
850
- const e = t < Se;
851
- 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"));
902
+ const e = t < Be;
903
+ 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 || this.audioMode ? "none" : "flex", this.topEl.appendChild(this.rightGroup)) : (this.rightGroup.appendChild(this.fullscreenButton), this.bottomRow.insertBefore(this.rightGroup, this.fullscreenSlot), this.fullscreenSlot.style.display = "none"));
904
+ }
905
+ /** Ses modu: görüntü olmadığı için tam ekran ve PiP butonları gizlenir. */
906
+ setAudioMode(t) {
907
+ this.audioMode = t, this.fullscreenButton.style.display = t ? "none" : "", this.compact && (this.fullscreenSlot.style.display = t || this.adMode ? "none" : "flex"), this.pipButton.style.display = t || !document.pictureInPictureEnabled ? "none" : "";
852
908
  }
853
909
  setFullscreenState(t) {
854
- C(this.fullscreenIcon, t ? "fullscreen-exit" : "fullscreen-enter"), w(this.fullscreenButton, t ? this.labels.fullscreenExit : this.labels.fullscreenEnter);
910
+ L(this.fullscreenIcon, t ? "fullscreen-exit" : "fullscreen-enter"), C(this.fullscreenButton, t ? this.labels.fullscreenExit : this.labels.fullscreenEnter);
855
911
  }
856
912
  /** Dil sonradan değişince (`options.locale`/`labels`) statik (reaktif olarak yeniden render edilmeyen) etiketleri tazeler. */
857
913
  /** Geri/ileri sarma butonları — `null` süre o butonu gizler. */
@@ -864,23 +920,33 @@ class Pe {
864
920
  }
865
921
  renderSkipButtons() {
866
922
  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)));
923
+ 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), C(e.btn, r(i)));
868
924
  };
869
925
  t(this.skipBack, this.skipSeconds.back, this.labels.skipBack), t(this.skipForward, this.skipSeconds.forward, this.labels.skipForward);
870
926
  }
871
927
  skip(t) {
872
928
  var e;
873
- !t || !this.seekingEnabled || (se(this.video, t), (e = this.onSkip) == null || e.call(this, t));
929
+ !t || !this.seekingEnabled || (le(this.video, t), (e = this.onSkip) == null || e.call(this, t));
874
930
  }
875
931
  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();
932
+ this.renderPlayState(), this.renderSkipButtons(), C(this.pipButton, this.labels.pip), C(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
933
  }
878
934
  /** Reklam modu: seek bar, süre ve sağ grup gizlenir; oynat/duraklat + ses kalır. */
879
935
  setAdMode(t) {
880
936
  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();
937
+ this.adMode = t, this.renderSkipButtons(), this.seekBar.el.style.display = e, this.row.style.display = e, this.compact && (this.fullscreenSlot.style.display = t || this.audioMode ? "none" : "flex"), this.renderTime(), t || this.setAdInfo(null), this.renderPlayState(), this.volumePanel.refreshForAdMode();
938
+ }
939
+ /**
940
+ * Reklam geri sayımı + pod göstergesi ("Reklam 2/3 · 0:12"). `null` → gizle. Pod tek reklamsa yalnızca "Reklam · 0:12";
941
+ * kalan süre bilinmiyorsa (bazı VPAID reklamları) yalnızca etiket.
942
+ */
943
+ setAdInfo(t) {
944
+ if (!t || !this.adMode) {
945
+ this.adInfoEl.style.display = "none", this.adInfoEl.textContent = "";
946
+ return;
947
+ }
948
+ const e = t.total > 1 ? ` ${t.position}/${t.total}` : "", i = t.remaining >= 0 ? ` · ${w(Math.ceil(t.remaining))}` : "";
949
+ this.adInfoEl.textContent = `${this.labels.adLabel}${e}${i}`, this.adInfoEl.style.display = "";
884
950
  }
885
951
  /** `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
952
  refreshAdPlayState() {
@@ -894,7 +960,7 @@ class Pe {
894
960
  }
895
961
  /** Plugin'lerin (loop-section vb.) kontrol çubuğuna kendi butonlarını eklemesi için — ayarlar menüsünden önce yerleştirilir. */
896
962
  addButton(t, e, i) {
897
- const { btn: r, icon: o } = E(t, e);
963
+ const { btn: r, icon: o } = A(t, e);
898
964
  return r.addEventListener("click", i), this.row.insertBefore(r, this.extraButtonAnchor), { btn: r, icon: o };
899
965
  }
900
966
  toggleTimeMode() {
@@ -911,6 +977,11 @@ class Pe {
911
977
  this.row.insertBefore(t, this.extraButtonAnchor);
912
978
  }
913
979
  togglePlay() {
980
+ var t, e;
981
+ if ((e = (t = this.callbacks).interceptTogglePlay) != null && e.call(t)) {
982
+ this.renderPlayState();
983
+ return;
984
+ }
914
985
  if (this.callbacks.isAdActive()) {
915
986
  this.callbacks.adTogglePlay(), this.renderPlayState();
916
987
  return;
@@ -926,6 +997,22 @@ class Pe {
926
997
  toggleFullscreen() {
927
998
  this.callbacks.isFullscreen() ? this.callbacks.onExitFullscreen() : this.callbacks.onRequestFullscreen();
928
999
  }
1000
+ /** Preroll beklemesi: video duraklatılmış ama oynatma istendi — buton "duraklat" görünsün. */
1001
+ setPendingPlay(t) {
1002
+ this.pendingPlay = t, this.renderPlayState();
1003
+ }
1004
+ /** Player'ın kendi bekleme durumları (ör. 'preroll') için yükleme halkası — medya takılmasından bağımsız. */
1005
+ setLoading(t, e) {
1006
+ e ? this.loadingReasons.add(t) : this.loadingReasons.delete(t), this.renderLoading();
1007
+ }
1008
+ get isLoading() {
1009
+ return this.loadingReasons.size > 0;
1010
+ }
1011
+ renderLoading() {
1012
+ var e, i;
1013
+ const t = this.loadingReasons.size > 0;
1014
+ t !== this.leftGroup.hasAttribute("data-loading") && (this.leftGroup.toggleAttribute("data-loading", t), (i = (e = this.callbacks).onLoadingChange) == null || i.call(e, t));
1015
+ }
929
1016
  /** 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
1017
  liveEdge() {
931
1018
  const { seekable: t, buffered: e } = this.video;
@@ -933,16 +1020,16 @@ class Pe {
933
1020
  }
934
1021
  destroy() {
935
1022
  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);
1023
+ for (const t of W) this.video.removeEventListener(t, this.onLoadingStart);
1024
+ for (const t of X) this.video.removeEventListener(t, this.onLoadingEnd);
938
1025
  this.loadingTimer && clearTimeout(this.loadingTimer), this.resizeObserver.disconnect(), this.topEl.remove(), this.seekBar.destroy(), this.settingsMenu.destroy();
939
1026
  }
940
1027
  }
941
- const Me = 450, Be = 60, X = 8, M = 6, Re = /* @__PURE__ */ new Set(["seek-bar", "time-display"]);
942
- function ze() {
1028
+ const Ie = 450, Oe = 60, U = 8, I = 6, De = /* @__PURE__ */ new Set(["seek-bar", "time-display"]);
1029
+ function Fe() {
943
1030
  return typeof window.matchMedia != "function" || window.matchMedia("(hover: hover)").matches;
944
1031
  }
945
- class Ne {
1032
+ class He {
946
1033
  constructor(t) {
947
1034
  s(this, "el");
948
1035
  s(this, "labelEl");
@@ -996,18 +1083,18 @@ class Ne {
996
1083
  const e = t, i = (o = e == null ? void 0 : e.closest) == null ? void 0 : o.call(e, 'button[aria-label], [role="slider"][aria-label]');
997
1084
  if (!i) return null;
998
1085
  const r = i.getAttribute("part");
999
- return r && Re.has(r) || i.offsetParent === null && i !== document.activeElement ? null : i;
1086
+ return r && De.has(r) || i.offsetParent === null && i !== document.activeElement ? null : i;
1000
1087
  }
1001
1088
  scheduleShow(t) {
1002
1089
  this.hideTimer && (clearTimeout(this.hideTimer), this.hideTimer = null), this.showTimer && clearTimeout(this.showTimer), this.pendingTarget = t, this.showTimer = setTimeout(() => {
1003
1090
  this.showTimer = null, this.pendingTarget = null, this.show(t);
1004
- }, Me);
1091
+ }, Ie);
1005
1092
  }
1006
1093
  scheduleHide() {
1007
- this.showTimer && (clearTimeout(this.showTimer), this.showTimer = null), this.pendingTarget = null, this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = setTimeout(() => this.hideNow(), Be);
1094
+ this.showTimer && (clearTimeout(this.showTimer), this.showTimer = null), this.pendingTarget = null, this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = setTimeout(() => this.hideNow(), Oe);
1008
1095
  }
1009
1096
  show(t) {
1010
- if (!ze()) return;
1097
+ if (!Fe()) return;
1011
1098
  const e = t.getAttribute("aria-label");
1012
1099
  if (!e) return;
1013
1100
  this.currentTarget = t, this.labelEl.textContent = e;
@@ -1019,14 +1106,14 @@ class Ne {
1019
1106
  }
1020
1107
  position(t) {
1021
1108
  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`;
1109
+ let o = i.top - e.top - r.height - U;
1110
+ o < I && (o = i.bottom - e.top + U);
1111
+ let a = i.left - e.left + i.width / 2 - r.width / 2;
1112
+ const l = e.width - r.width - I;
1113
+ a = Math.max(I, Math.min(a, l)), this.el.style.top = `${o}px`, this.el.style.left = `${a}px`;
1027
1114
  }
1028
1115
  }
1029
- class Oe {
1116
+ class _e {
1030
1117
  constructor(t, e, i) {
1031
1118
  s(this, "host");
1032
1119
  s(this, "video");
@@ -1035,8 +1122,10 @@ class Oe {
1035
1122
  s(this, "seekStep", 5);
1036
1123
  /** Klavyeyle sarıldığında (sn, negatif = geri) — sarma bildirimi için. */
1037
1124
  s(this, "onSeek", null);
1125
+ /** Space/K'den önce sorulur — true dönerse işlenmiştir (ör. preroll beklemesini iptal). */
1126
+ s(this, "interceptTogglePlay", null);
1038
1127
  s(this, "onKeyDown", (t) => {
1039
- var r, o;
1128
+ var r, o, a;
1040
1129
  if (t.defaultPrevented) return;
1041
1130
  const e = t.composedPath()[0];
1042
1131
  if ((t.key === " " || t.key === "Enter") && e instanceof HTMLButtonElement) return;
@@ -1044,15 +1133,19 @@ class Oe {
1044
1133
  switch (t.key) {
1045
1134
  case " ":
1046
1135
  case "k":
1136
+ if ((r = this.interceptTogglePlay) != null && r.call(this)) {
1137
+ t.preventDefault();
1138
+ break;
1139
+ }
1047
1140
  this.video.paused ? this.video.play() : this.video.pause(), t.preventDefault();
1048
1141
  break;
1049
1142
  case "ArrowRight":
1050
1143
  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();
1144
+ Number.isFinite(i) && (this.video.currentTime = Math.min(i, this.video.currentTime + this.seekStep), (o = this.onSeek) == null || o.call(this, this.seekStep)), t.preventDefault();
1052
1145
  break;
1053
1146
  case "ArrowLeft":
1054
1147
  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();
1148
+ this.video.currentTime = Math.max(0, this.video.currentTime - this.seekStep), (a = this.onSeek) == null || a.call(this, -this.seekStep), t.preventDefault();
1056
1149
  break;
1057
1150
  case "ArrowUp":
1058
1151
  this.video.volume = Math.min(1, this.video.volume + 0.1), this.video.muted = !1, t.preventDefault();
@@ -1074,7 +1167,7 @@ class Oe {
1074
1167
  this.host.removeEventListener("keydown", this.onKeyDown);
1075
1168
  }
1076
1169
  }
1077
- class Fe {
1170
+ class Ve {
1078
1171
  constructor(t) {
1079
1172
  s(this, "el");
1080
1173
  s(this, "video");
@@ -1086,8 +1179,8 @@ class Fe {
1086
1179
  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
1180
  }
1088
1181
  }
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 {
1182
+ const Ge = '<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>';
1183
+ class qe {
1091
1184
  constructor(t, e) {
1092
1185
  s(this, "el");
1093
1186
  s(this, "video");
@@ -1107,7 +1200,7 @@ class De {
1107
1200
  const i = document.createElement("div");
1108
1201
  i.className = "hp-error-card";
1109
1202
  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", () => {
1203
+ r.className = "hp-error-icon", r.appendChild(E("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 = Ge, this.retryText = document.createElement("span"), this.retryText.textContent = e.retry, this.retryBtn.appendChild(this.retryText), this.retryBtn.addEventListener("click", () => {
1111
1204
  var o;
1112
1205
  this.dismiss(), (o = this.onRetry) == null || o.call(this);
1113
1206
  }), i.appendChild(this.retryBtn), this.el.appendChild(i), t.addEventListener("error", this.show);
@@ -1153,129 +1246,129 @@ class De {
1153
1246
  this.video.removeEventListener("error", this.show);
1154
1247
  }
1155
1248
  }
1156
- const R = /* @__PURE__ */ new WeakMap(), re = /* @__PURE__ */ new WeakSet(), P = /* @__PURE__ */ new WeakMap();
1157
- function He(a) {
1158
- return re.has(a);
1249
+ const O = /* @__PURE__ */ new WeakMap(), he = /* @__PURE__ */ new WeakSet(), N = /* @__PURE__ */ new WeakMap();
1250
+ function We(n) {
1251
+ return he.has(n);
1159
1252
  }
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;
1253
+ function pe(n, t, e, i, r) {
1254
+ let o = O.get(n);
1255
+ o || O.set(n, o = /* @__PURE__ */ new Map());
1256
+ const a = `${t}\0${e}\0${i}\0${r}`;
1257
+ let l = o.get(a);
1258
+ return l || (l = n.addTextTrack(e, i, r), he.add(l), o.set(a, l)), l;
1166
1259
  }
1167
- function ne(a, t) {
1168
- for (const [e, i] of R.get(a) ?? [])
1260
+ function ce(n, t) {
1261
+ for (const [e, i] of O.get(n) ?? [])
1169
1262
  if (e.startsWith(`${t}\0`)) {
1170
1263
  i.mode = "hidden";
1171
1264
  for (const r of Array.from(i.cues ?? [])) i.removeCue(r);
1172
1265
  i.mode = "disabled";
1173
1266
  }
1174
1267
  }
1175
- function Ve(a, t) {
1176
- ae(a);
1177
- const e = P.get(a), i = [];
1268
+ function Xe(n, t) {
1269
+ de(n);
1270
+ const e = N.get(n), i = [];
1178
1271
  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);
1272
+ const o = pe(n, "options", "subtitles", r.label, r.srclang);
1273
+ o.mode = r.default ? "hidden" : "disabled", i.push({ label: r.label, track: o }), Ue(n, o, r.src, e);
1181
1274
  }
1182
1275
  return i;
1183
1276
  }
1184
- function ae(a) {
1185
- P.set(a, (P.get(a) ?? 0) + 1), ne(a, "options");
1277
+ function de(n) {
1278
+ N.set(n, (N.get(n) ?? 0) + 1), ce(n, "options");
1186
1279
  }
1187
- function _e(a, t) {
1280
+ function $e(n, t) {
1188
1281
  let e = null;
1189
- for (const { label: i, track: r } of a) {
1282
+ for (const { label: i, track: r } of n) {
1190
1283
  const o = i === t;
1191
1284
  r.mode = o ? "hidden" : "disabled", o && (e = r);
1192
1285
  }
1193
1286
  return e;
1194
1287
  }
1195
- async function Ge(a, t, e, i) {
1288
+ async function Ue(n, t, e, i) {
1196
1289
  let r;
1197
1290
  try {
1198
1291
  const o = await fetch(e);
1199
1292
  if (!o.ok) throw new Error(`HTTP ${o.status}`);
1200
1293
  r = await o.text();
1201
1294
  } catch (o) {
1202
- console.warn("[HopePlayer] altyazı yüklenemedi:", e, o);
1295
+ console.warn("[HopePlayer] altyazı yüklenemedi:", e, o), n.dispatchEvent(new CustomEvent("hp-internal:subtitle-error", { detail: { src: e, message: String(o) } }));
1203
1296
  return;
1204
1297
  }
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);
1298
+ if (!(N.get(n) !== i || typeof VTTCue != "function"))
1299
+ for (const o of je(r)) {
1300
+ const a = new VTTCue(o.start, o.end, o.text);
1301
+ Qe(a, o.settings), t.addCue(a);
1209
1302
  }
1210
1303
  }
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);
1304
+ const K = "(?:\\d+:)?\\d{1,2}:\\d{2}(?:[.,]\\d{1,3})?", Ke = new RegExp(`^(${K})\\s+-->\\s+(${K})(.*)$`);
1305
+ function j(n) {
1306
+ return n.replace(",", ".").split(":").reduce((t, e) => t * 60 + Number(e), 0);
1214
1307
  }
1215
- function Xe(a) {
1216
- const t = [], e = a.replace(/^/, "").replace(/\r\n?/g, `
1308
+ function je(n) {
1309
+ const t = [], e = n.replace(/^/, "").replace(/\r\n?/g, `
1217
1310
  `).split(/\n{2,}/);
1218
1311
  for (const i of e) {
1219
1312
  const r = i.split(`
1220
1313
  `), o = r.findIndex((d) => d.includes("-->"));
1221
1314
  if (o < 0) continue;
1222
- const n = qe.exec(r[o].trim());
1223
- if (!n) continue;
1315
+ const a = Ke.exec(r[o].trim());
1316
+ if (!a) continue;
1224
1317
  const l = r.slice(o + 1).join(`
1225
1318
  `);
1226
- l.trim() && t.push({ start: Q(n[1]), end: Q(n[2]), settings: n[3].trim(), text: l });
1319
+ l.trim() && t.push({ start: j(a[1]), end: j(a[2]), settings: a[3].trim(), text: l });
1227
1320
  }
1228
1321
  return t;
1229
1322
  }
1230
- function Ue(a, t) {
1323
+ function Qe(n, t) {
1231
1324
  for (const e of t.split(/\s+/)) {
1232
1325
  const [i, r] = e.split(":");
1233
1326
  if (!i || !r) continue;
1234
1327
  const [o] = r.split(",");
1235
1328
  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));
1329
+ i === "align" ? n.align = o : i === "vertical" ? n.vertical = o : i === "size" ? n.size = parseFloat(o) : i === "position" ? n.position = parseFloat(o) : i === "line" && (n.snapToLines = !o.endsWith("%"), n.line = parseFloat(o));
1237
1330
  } catch {
1238
1331
  }
1239
1332
  }
1240
1333
  }
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 = {
1334
+ const z = 6, Ye = 20, Ze = 14, Je = 6, et = 10, tt = 3, ue = "hope-caption-row", me = "hope-caption-font-size", Q = "hope-caption-bg-color", Y = "hope-caption-text-color", it = {
1242
1335
  small: 0.78,
1243
1336
  normal: 1,
1244
1337
  large: 1.35
1245
- }, j = [
1338
+ }, Z = [
1246
1339
  "rgba(0, 0, 0, 0.75)",
1247
1340
  "rgba(0, 0, 0, 0)",
1248
1341
  "rgba(255, 255, 255, 0.85)",
1249
1342
  "rgba(183, 28, 28, 0.8)",
1250
1343
  "rgba(13, 71, 161, 0.8)",
1251
1344
  "rgba(27, 94, 32, 0.8)"
1252
- ], Y = ["#ffffff", "#000000", "#ffeb3b", "#ff5252", "#18ffff", "#69f0ae"];
1253
- function Ze() {
1345
+ ], J = ["#ffffff", "#000000", "#ffeb3b", "#ff5252", "#18ffff", "#69f0ae"];
1346
+ function st() {
1254
1347
  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;
1348
+ const n = window.localStorage.getItem(ue), t = n === null ? 0 : Number(n);
1349
+ return Number.isFinite(t) && t >= 0 && t < z ? t : 0;
1257
1350
  } catch {
1258
1351
  return 0;
1259
1352
  }
1260
1353
  }
1261
- function Je() {
1354
+ function rt() {
1262
1355
  try {
1263
- const a = window.localStorage.getItem(he);
1264
- return a === "small" || a === "normal" || a === "large" ? a : "normal";
1356
+ const n = window.localStorage.getItem(me);
1357
+ return n === "small" || n === "normal" || n === "large" ? n : "normal";
1265
1358
  } catch {
1266
1359
  return "normal";
1267
1360
  }
1268
1361
  }
1269
- function $(a, t) {
1362
+ function ee(n, t) {
1270
1363
  const e = t[0] ?? "";
1271
1364
  try {
1272
- const i = window.localStorage.getItem(a);
1365
+ const i = window.localStorage.getItem(n);
1273
1366
  return i !== null && t.includes(i) ? i : e;
1274
1367
  } catch {
1275
1368
  return e;
1276
1369
  }
1277
1370
  }
1278
- class T {
1371
+ class P {
1279
1372
  constructor(t, e, i, r) {
1280
1373
  s(this, "layerEl");
1281
1374
  s(this, "bubbleEl");
@@ -1283,10 +1376,10 @@ class T {
1283
1376
  s(this, "seekBarEl");
1284
1377
  s(this, "labels");
1285
1378
  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());
1379
+ s(this, "fontSize", rt());
1380
+ s(this, "bgColor", ee(Q, Z));
1381
+ s(this, "textColor", ee(Y, J));
1382
+ s(this, "rowIndex", st());
1290
1383
  s(this, "dragging", !1);
1291
1384
  /** Kontrol çubuğu görünür mü — görünürken altyazı seek bar'ın üstünde, değilken en altta. */
1292
1385
  s(this, "chromeVisible", !0);
@@ -1315,7 +1408,7 @@ class T {
1315
1408
  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
1409
  });
1317
1410
  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)));
1411
+ this.dragging && (this.pendingDeltaPx = t.clientY - this.dragStartClientY, Math.abs(this.pendingDeltaPx) > tt && (this.dragMoved = !0), this.rafId === null && (this.rafId = requestAnimationFrame(this.applyPendingDrag)));
1319
1412
  });
1320
1413
  s(this, "applyPendingDrag", () => {
1321
1414
  if (this.rafId = null, !this.dragging) return;
@@ -1324,8 +1417,8 @@ class T {
1324
1417
  });
1325
1418
  s(this, "onPointerUp", (t) => {
1326
1419
  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);
1420
+ 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, a = Math.round(o * (z - 1));
1421
+ this.setRowIndex(a, !0);
1329
1422
  });
1330
1423
  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
1424
  }
@@ -1339,7 +1432,7 @@ class T {
1339
1432
  setFontSize(t) {
1340
1433
  this.fontSize = t, this.applyFontSizeVar(), this.recomputePosition();
1341
1434
  try {
1342
- window.localStorage.setItem(he, t);
1435
+ window.localStorage.setItem(me, t);
1343
1436
  } catch {
1344
1437
  }
1345
1438
  }
@@ -1349,7 +1442,7 @@ class T {
1349
1442
  setBgColor(t) {
1350
1443
  this.bgColor = t, this.bubbleEl.style.setProperty("--hp-caption-bg", t);
1351
1444
  try {
1352
- window.localStorage.setItem(K, t);
1445
+ window.localStorage.setItem(Q, t);
1353
1446
  } catch {
1354
1447
  }
1355
1448
  }
@@ -1359,7 +1452,7 @@ class T {
1359
1452
  setTextColor(t) {
1360
1453
  this.textColor = t, this.bubbleEl.style.setProperty("--hp-caption-text", t);
1361
1454
  try {
1362
- window.localStorage.setItem(W, t);
1455
+ window.localStorage.setItem(Y, t);
1363
1456
  } catch {
1364
1457
  }
1365
1458
  }
@@ -1372,23 +1465,37 @@ class T {
1372
1465
  this.labels = t, this.bubbleEl.setAttribute("aria-label", t.captionDragHandle);
1373
1466
  }
1374
1467
  applyFontSizeVar() {
1375
- this.bubbleEl.style.setProperty("--hp-caption-size-multiplier", String($e[this.fontSize]));
1468
+ this.bubbleEl.style.setProperty("--hp-caption-size-multiplier", String(it[this.fontSize]));
1376
1469
  }
1377
1470
  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 };
1471
+ const t = this.videoArea.getBoundingClientRect(), e = this.seekBarEl.getBoundingClientRect(), r = (this.bubbleEl.getBoundingClientRect().height || 32) + Ye, o = Math.max(et, 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") ? Je : Ze))) : o, l = Math.max(a, Math.round(t.height - r));
1472
+ return { min: a, max: l };
1380
1473
  }
1381
1474
  pxForRow(t) {
1382
- const { min: e, max: i } = this.bounds(), r = t / (L - 1);
1475
+ const { min: e, max: i } = this.bounds(), r = t / (z - 1);
1383
1476
  return Math.round(e + r * (i - e));
1384
1477
  }
1478
+ /**
1479
+ * Balonun EKRANDA şu an durduğu konum (bottom, px): yazılı `bottom` + o anki transform'un dikey kayması.
1480
+ * Sürükleme her karede bir kez çiziliyor — hızlı fırlatmada son hareket çizilmeden bırakılınca, son fare konumundan
1481
+ * başlayan animasyon balonu önce oraya ışınlıyordu (zıplama). Süren bir kayma animasyonunun ortası da böyle okunur.
1482
+ */
1483
+ visualBottomPx() {
1484
+ const t = parseFloat(this.bubbleEl.style.bottom || "0");
1485
+ try {
1486
+ const e = getComputedStyle(this.bubbleEl).transform;
1487
+ return !e || e === "none" ? t : t - new DOMMatrixReadOnly(e).m42;
1488
+ } catch {
1489
+ return t;
1490
+ }
1491
+ }
1385
1492
  /** 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`);
1493
+ setRowIndex(t, e) {
1494
+ this.rowIndex = Math.min(z - 1, Math.max(0, t));
1495
+ const i = this.pxForRow(this.rowIndex), r = this.visualBottomPx();
1496
+ 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
1497
  try {
1391
- window.localStorage.setItem(le, String(this.rowIndex));
1498
+ window.localStorage.setItem(ue, String(this.rowIndex));
1392
1499
  } catch {
1393
1500
  }
1394
1501
  }
@@ -1404,8 +1511,8 @@ class T {
1404
1511
  this.activeTrack && this.activeTrack.removeEventListener("cuechange", this.onCueChange), this.resizeObserver.disconnect(), this.rafId !== null && cancelAnimationFrame(this.rafId), this.bubbleEl.removeEventListener("pointerdown", this.onPointerDown);
1405
1512
  }
1406
1513
  }
1407
- s(T, "BG_COLOR_PRESETS", j), s(T, "TEXT_COLOR_PRESETS", Y);
1408
- class et {
1514
+ s(P, "BG_COLOR_PRESETS", Z), s(P, "TEXT_COLOR_PRESETS", J);
1515
+ class ot {
1409
1516
  constructor(t) {
1410
1517
  s(this, "el");
1411
1518
  s(this, "bufferedEl");
@@ -1444,8 +1551,8 @@ class et {
1444
1551
  this.rafId !== null && cancelAnimationFrame(this.rafId), this.rafId = null;
1445
1552
  }
1446
1553
  }
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 {
1554
+ const nt = 1e3, at = 800, lt = '<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>';
1555
+ class ht {
1449
1556
  constructor(t) {
1450
1557
  s(this, "el");
1451
1558
  s(this, "valueEl");
@@ -1456,7 +1563,7 @@ class rt {
1456
1563
  s(this, "hideTimer", null);
1457
1564
  this.labels = t, this.el = document.createElement("div"), this.el.className = "hp-seek-fb", this.el.setAttribute("part", "seek-feedback");
1458
1565
  const e = document.createElement("span");
1459
- e.className = "hp-seek-fb-chevrons", e.innerHTML = st.repeat(3);
1566
+ e.className = "hp-seek-fb-chevrons", e.innerHTML = lt.repeat(3);
1460
1567
  const i = document.createElement("span");
1461
1568
  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
1569
  }
@@ -1464,17 +1571,17 @@ class rt {
1464
1571
  show(t) {
1465
1572
  if (!t) return;
1466
1573
  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;
1574
+ this.total = i && e - this.lastAt < nt ? this.total + t : t, this.lastAt = e;
1468
1575
  const r = Math.round(Math.abs(this.total) * 10) / 10, o = this.total > 0;
1469
1576
  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(() => {
1470
1577
  this.el.removeAttribute("data-visible"), this.total = 0;
1471
- }, it);
1578
+ }, at);
1472
1579
  }
1473
1580
  destroy() {
1474
1581
  this.hideTimer && clearTimeout(this.hideTimer), this.el.remove();
1475
1582
  }
1476
1583
  }
1477
- class ot {
1584
+ class pt {
1478
1585
  constructor(t) {
1479
1586
  s(this, "el");
1480
1587
  s(this, "open", !1);
@@ -1494,35 +1601,67 @@ class ot {
1494
1601
  }
1495
1602
  /** `clientX/Y` ekran koordinatı — menü player'ın içinde kalacak şekilde kaydırılır. */
1496
1603
  show(t, e, i) {
1497
- var m;
1604
+ var u;
1498
1605
  this.el.replaceChildren(
1499
1606
  ...i.map((c) => {
1500
- const h = document.createElement(c.onSelect ? "button" : "div");
1501
- h.className = "hp-context-menu-item", c.onSelect ? (h.type = "button", h.setAttribute("role", "menuitem"), h.addEventListener("click", () => {
1607
+ const g = document.createElement(c.onSelect ? "button" : "div");
1608
+ g.className = "hp-context-menu-item", c.onSelect ? (g.type = "button", g.setAttribute("role", "menuitem"), g.addEventListener("click", () => {
1502
1609
  this.close(), c.onSelect();
1503
- })) : h.setAttribute("data-info", "");
1504
- const p = document.createElement("span");
1505
- if (p.textContent = c.label, h.appendChild(p), c.meta) {
1506
- const u = document.createElement("span");
1507
- u.className = "hp-context-menu-meta", u.textContent = c.meta, h.appendChild(u);
1610
+ })) : g.setAttribute("data-info", "");
1611
+ const h = document.createElement("span");
1612
+ if (h.textContent = c.label, g.appendChild(h), c.meta) {
1613
+ const p = document.createElement("span");
1614
+ p.className = "hp-context-menu-meta", p.textContent = c.meta, g.appendChild(p);
1508
1615
  }
1509
- return h;
1616
+ return g;
1510
1617
  })
1511
1618
  ), 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));
1513
- 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);
1619
+ const r = this.container.getBoundingClientRect(), { width: o, height: a } = 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 - a - 4));
1620
+ this.el.style.left = `${l}px`, this.el.style.top = `${d}px`, (u = this.el.querySelector("button")) == null || u.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
1621
  }
1515
1622
  destroy() {
1516
1623
  this.close(), this.el.remove();
1517
1624
  }
1518
1625
  }
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);
1626
+ const ct = 3e3, te = 200;
1627
+ class dt {
1628
+ constructor() {
1629
+ s(this, "list", []);
1630
+ /** Kayıt eklenince / temizlenince (açık panel canlı güncellenir). */
1631
+ s(this, "onChange", null);
1632
+ }
1633
+ get entries() {
1634
+ return this.list;
1635
+ }
1636
+ add(t) {
1637
+ var r, o;
1638
+ const e = Date.now(), i = this.list[this.list.length - 1];
1639
+ if (i && e - i.time < ct && i.source === t.source && i.message === t.message && JSON.stringify(i.details ?? {}) === JSON.stringify(t.details ?? {})) {
1640
+ i.count = (i.count ?? 1) + 1, i.time = e, (r = this.onChange) == null || r.call(this);
1641
+ return;
1642
+ }
1643
+ this.list.push({ time: e, ...t }), this.list.length > te && this.list.splice(0, this.list.length - te), (o = this.onChange) == null || o.call(this);
1644
+ }
1645
+ clear() {
1646
+ var t;
1647
+ this.list.length = 0, (t = this.onChange) == null || t.call(this);
1648
+ }
1649
+ /** Destek ekibine yapıştırılabilir düz metin. */
1650
+ toText() {
1651
+ return this.list.map((t) => {
1652
+ const e = Object.entries(t.details ?? {}).filter(([, r]) => r !== void 0 && r !== "").map(([r, o]) => `${r}=${o}`).join(" "), i = t.count && t.count > 1 ? ` (x${t.count})` : "";
1653
+ return `${new Date(t.time).toISOString()} [${t.source}]${t.fatal ? " [fatal]" : ""} ${t.message}${i}${e ? ` | ${e}` : ""}`;
1654
+ }).join(`
1655
+ `);
1656
+ }
1657
+ }
1658
+ const ut = '@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}', ie = "hope-player-icon-font";
1659
+ function mt() {
1660
+ if (typeof document > "u" || document.getElementById(ie)) return;
1661
+ const n = document.createElement("style");
1662
+ n.id = ie, n.textContent = ut, document.head.appendChild(n);
1524
1663
  }
1525
- const pe = {
1664
+ const ge = {
1526
1665
  play: "Oynat",
1527
1666
  pause: "Duraklat",
1528
1667
  mute: "Sessize al",
@@ -1531,8 +1670,8 @@ const pe = {
1531
1670
  seekBar: "Video konumu",
1532
1671
  settings: "Ayarlar",
1533
1672
  pip: "Resim içinde resim",
1534
- skipBack: (a) => `${a} saniye geri`,
1535
- skipForward: (a) => `${a} saniye ileri`,
1673
+ skipBack: (n) => `${n} saniye geri`,
1674
+ skipForward: (n) => `${n} saniye ileri`,
1536
1675
  secondsShort: "sn",
1537
1676
  audioTrack: "Ses",
1538
1677
  statsTitle: "İstatistikler",
@@ -1548,6 +1687,22 @@ const pe = {
1548
1687
  statsSpeedVolume: "Hız / ses",
1549
1688
  statsSource: "Kaynak",
1550
1689
  statsVersion: "Sürüm",
1690
+ debugTitle: "Hata ayıklama",
1691
+ debugClose: "Hata ayıklamayı kapat",
1692
+ debugCopy: "Kopyala",
1693
+ debugCopied: "Kopyalandı",
1694
+ debugClear: "Temizle",
1695
+ debugEmpty: "Kayıtlı hata yok.",
1696
+ debugFatal: "Oynatmayı durdurdu",
1697
+ debugSourceMedia: "Medya",
1698
+ debugSourceStream: "Yayın",
1699
+ debugSourceAds: "Reklam",
1700
+ debugSourceSubtitles: "Altyazı",
1701
+ debugSourcePlayer: "Player",
1702
+ adLabel: "Reklam",
1703
+ adReturnFullscreen: "Tam ekrana dön",
1704
+ adReturnPip: "Küçük pencereye dön",
1705
+ audioVinyl: "Plak — ileri / geri sarmak için çevirin",
1551
1706
  fullscreenEnter: "Tam ekran",
1552
1707
  fullscreenExit: "Tam ekrandan çık",
1553
1708
  playbackSpeed: "Oynatma Hızı",
@@ -1555,6 +1710,7 @@ const pe = {
1555
1710
  quality: "Kalite",
1556
1711
  captions: "Altyazı",
1557
1712
  captionsOff: "Kapalı",
1713
+ captionSettings: "Altyazı ayarları",
1558
1714
  captionSize: "Yazı Boyutu",
1559
1715
  captionSizeSmall: "Küçük",
1560
1716
  captionSizeNormal: "Normal",
@@ -1578,7 +1734,7 @@ const pe = {
1578
1734
  geoUnknownCountry: "Ülke bilgisi bulunamadı.",
1579
1735
  redirectCancel: "İptal",
1580
1736
  redirectPlayNow: "Şimdi Oynat",
1581
- redirectCountdown: (a) => `Sıradaki video ${a} saniye içinde oynatılacak.`,
1737
+ redirectCountdown: (n) => `Sıradaki video ${n} saniye içinde oynatılacak.`,
1582
1738
  redirectNowPlaying: "Video oynatılıyor...",
1583
1739
  qrResumeTitle: "Devam etmek için kodu telefonunuzla okutun",
1584
1740
  qrResumeDontShowAgain: "Bir daha gösterme",
@@ -1594,7 +1750,7 @@ const pe = {
1594
1750
  playlistTitle: "Oynatma Listesi",
1595
1751
  playlistPrev: "Önceki",
1596
1752
  playlistNext: "Sonraki",
1597
- videoFallbackTitle: (a) => `Video ${a + 1}`,
1753
+ videoFallbackTitle: (n) => `Video ${n + 1}`,
1598
1754
  storyPrev: "Önceki video",
1599
1755
  storyNext: "Sonraki video",
1600
1756
  storyAllVideos: "Tüm videolar",
@@ -1602,7 +1758,7 @@ const pe = {
1602
1758
  liveClock: "Canlı saat",
1603
1759
  live: "CANLI",
1604
1760
  goToLive: "Canlıya git"
1605
- }, lt = {
1761
+ }, gt = {
1606
1762
  play: "Play",
1607
1763
  pause: "Pause",
1608
1764
  mute: "Mute",
@@ -1611,8 +1767,8 @@ const pe = {
1611
1767
  seekBar: "Seek",
1612
1768
  settings: "Settings",
1613
1769
  pip: "Picture-in-picture",
1614
- skipBack: (a) => `Back ${a} seconds`,
1615
- skipForward: (a) => `Forward ${a} seconds`,
1770
+ skipBack: (n) => `Back ${n} seconds`,
1771
+ skipForward: (n) => `Forward ${n} seconds`,
1616
1772
  secondsShort: "s",
1617
1773
  audioTrack: "Audio",
1618
1774
  statsTitle: "Stats",
@@ -1628,6 +1784,22 @@ const pe = {
1628
1784
  statsSpeedVolume: "Speed / volume",
1629
1785
  statsSource: "Source",
1630
1786
  statsVersion: "Version",
1787
+ debugTitle: "Debug log",
1788
+ debugClose: "Close debug log",
1789
+ debugCopy: "Copy",
1790
+ debugCopied: "Copied",
1791
+ debugClear: "Clear",
1792
+ debugEmpty: "No errors logged.",
1793
+ debugFatal: "Stopped playback",
1794
+ debugSourceMedia: "Media",
1795
+ debugSourceStream: "Stream",
1796
+ debugSourceAds: "Ads",
1797
+ debugSourceSubtitles: "Subtitles",
1798
+ debugSourcePlayer: "Player",
1799
+ adLabel: "Ad",
1800
+ adReturnFullscreen: "Back to full screen",
1801
+ adReturnPip: "Back to picture-in-picture",
1802
+ audioVinyl: "Record — turn it to scrub",
1631
1803
  fullscreenEnter: "Fullscreen",
1632
1804
  fullscreenExit: "Exit fullscreen",
1633
1805
  playbackSpeed: "Playback speed",
@@ -1635,6 +1807,7 @@ const pe = {
1635
1807
  quality: "Quality",
1636
1808
  captions: "Captions",
1637
1809
  captionsOff: "Off",
1810
+ captionSettings: "Subtitle settings",
1638
1811
  captionSize: "Font Size",
1639
1812
  captionSizeSmall: "Small",
1640
1813
  captionSizeNormal: "Normal",
@@ -1658,7 +1831,7 @@ const pe = {
1658
1831
  geoUnknownCountry: "No country information found.",
1659
1832
  redirectCancel: "Cancel",
1660
1833
  redirectPlayNow: "Play now",
1661
- redirectCountdown: (a) => `Next video will play in ${a} seconds.`,
1834
+ redirectCountdown: (n) => `Next video will play in ${n} seconds.`,
1662
1835
  redirectNowPlaying: "Now playing...",
1663
1836
  qrResumeTitle: "Scan to continue watching on your phone",
1664
1837
  qrResumeDontShowAgain: "Don't show again",
@@ -1674,7 +1847,7 @@ const pe = {
1674
1847
  playlistTitle: "Playlist",
1675
1848
  playlistPrev: "Previous",
1676
1849
  playlistNext: "Next",
1677
- videoFallbackTitle: (a) => `Video ${a + 1}`,
1850
+ videoFallbackTitle: (n) => `Video ${n + 1}`,
1678
1851
  storyPrev: "Previous video",
1679
1852
  storyNext: "Next video",
1680
1853
  storyAllVideos: "All videos",
@@ -1682,14 +1855,107 @@ const pe = {
1682
1855
  liveClock: "Live clock",
1683
1856
  live: "LIVE",
1684
1857
  goToLive: "Go to live"
1685
- }, ht = { tr: pe, en: lt };
1686
- function ce(a, t) {
1687
- return { ...ht[a ?? "tr"] ?? pe, ...t };
1858
+ }, bt = { tr: ge, en: gt };
1859
+ function be(n, t) {
1860
+ return { ...bt[n ?? "tr"] ?? ge, ...t };
1688
1861
  }
1689
- function pt(a, t, e) {
1690
- Object.assign(a, ce(t, e));
1862
+ function ft(n, t, e) {
1863
+ Object.assign(n, be(t, e));
1691
1864
  }
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 = (
1865
+ const D = 8e3;
1866
+ function vt(n) {
1867
+ var t;
1868
+ return (t = n.live) != null && t.scte35 && !n.adTagPreroll && !n.adTagVmap ? !1 : !!(n.adTagPreroll || n.adTagVmap);
1869
+ }
1870
+ class yt {
1871
+ constructor(t) {
1872
+ /** Kapı kurulu (preroll bekleniyor) mu. */
1873
+ s(this, "armed", !1);
1874
+ /** Kapı kuruluyken kullanıcı / autoplay oynatmak istedi mi. */
1875
+ s(this, "playIntent", !1);
1876
+ /** Kapının kendi pause() çağrısının ürettiği 'pause' olayı yutulsun. */
1877
+ s(this, "swallowNextPause", !1);
1878
+ s(this, "timeoutMs", D);
1879
+ s(this, "timer", null);
1880
+ /** İlk oynatma isteği (reklam plugin'i bekleyen preroll'u başlatır). */
1881
+ s(this, "onPlayIntent", null);
1882
+ /** Zaman aşımı — reklam plugin'i geç gelecek cevabı iptal eder. Kapı bundan sonra içeriği başlatarak açılır. */
1883
+ s(this, "onTimeout", null);
1884
+ /** "Preroll bekleniyor" durumu değişti (UI: yükleme halkası, merkez buton). */
1885
+ s(this, "onWaitChange", null);
1886
+ s(this, "onPlay", (t) => {
1887
+ this.armed && (t.stopImmediatePropagation(), this.swallowNextPause = !0, this.video.pause(), this.registerIntent());
1888
+ });
1889
+ s(this, "onPause", (t) => {
1890
+ this.swallowNextPause && (this.swallowNextPause = !1, t.stopImmediatePropagation());
1891
+ });
1892
+ this.video = t, t.addEventListener("play", this.onPlay), t.addEventListener("pause", this.onPause);
1893
+ }
1894
+ get isArmed() {
1895
+ return this.armed;
1896
+ }
1897
+ /** Kapı kurulu ve oynatma istendi — kullanıcı preroll'u bekliyor. */
1898
+ get isWaiting() {
1899
+ return this.armed && this.playIntent;
1900
+ }
1901
+ get hasPlayIntent() {
1902
+ return this.playIntent;
1903
+ }
1904
+ arm(t = D) {
1905
+ this.clearTimer(), this.armed = !0, this.playIntent = !1, this.timeoutMs = t;
1906
+ }
1907
+ /**
1908
+ * Elementin `play()`'i için: kapı kuruluysa videoya dokunmadan oynatma isteği kaydedilir (play() promise'i
1909
+ * pause() ile reddedilip konsola "interrupted by a call to pause()" düşmesin). true → istek kapıda.
1910
+ */
1911
+ interceptPlay() {
1912
+ return this.armed ? (this.registerIntent(), !0) : !1;
1913
+ }
1914
+ /** Bekleme sırasında kullanıcı vazgeçti (duraklat'a bastı). Kapı kurulu kalır; preroll geri döner ama başlatılmaz. */
1915
+ cancelIntent() {
1916
+ var t;
1917
+ this.isWaiting && (this.playIntent = !1, this.clearTimer(), (t = this.onWaitChange) == null || t.call(this, !1));
1918
+ }
1919
+ /** Preroll sonuçlandı. `resume`: oynatma istenmişse içerik şimdi başlasın (reklam yok / hata / zaman aşımı). */
1920
+ release(t) {
1921
+ var i;
1922
+ if (!this.armed) return;
1923
+ const e = this.playIntent;
1924
+ this.armed = !1, this.playIntent = !1, this.clearTimer(), e && ((i = this.onWaitChange) == null || i.call(this, !1)), t && e && this.video.play().catch(() => {
1925
+ });
1926
+ }
1927
+ destroy() {
1928
+ this.clearTimer(), this.video.removeEventListener("play", this.onPlay), this.video.removeEventListener("pause", this.onPause);
1929
+ }
1930
+ registerIntent() {
1931
+ var t, e;
1932
+ this.playIntent || (this.playIntent = !0, (t = this.onWaitChange) == null || t.call(this, !0), this.timer = setTimeout(() => {
1933
+ var i;
1934
+ this.timer = null, (i = this.onTimeout) == null || i.call(this), this.release(!0);
1935
+ }, this.timeoutMs), (e = this.onPlayIntent) == null || e.call(this));
1936
+ }
1937
+ clearTimer() {
1938
+ this.timer && clearTimeout(this.timer), this.timer = null;
1939
+ }
1940
+ }
1941
+ const kt = [
1942
+ "https://imasdk.googleapis.com",
1943
+ "https://pubads.g.doubleclick.net",
1944
+ "https://securepubads.g.doubleclick.net",
1945
+ "https://pagead2.googlesyndication.com"
1946
+ ];
1947
+ let se = !1;
1948
+ function xt() {
1949
+ if (!(se || typeof document > "u")) {
1950
+ se = !0;
1951
+ for (const n of kt) {
1952
+ if (document.head.querySelector(`link[rel="preconnect"][href="${n}"]`)) continue;
1953
+ const t = document.createElement("link");
1954
+ t.rel = "preconnect", t.href = n, document.head.appendChild(t);
1955
+ }
1956
+ }
1957
+ }
1958
+ const wt = [0.5, 0.75, 1, 1.25, 1.5, 2], re = 1200, Et = 3e3, oe = 5e3, Ct = 10, ne = 10, Tt = 5, ae = "stream-audio", B = "1.0.13", St = (
1693
1959
  /* html */
1694
1960
  `
1695
1961
  <div class="video-area">
@@ -1700,7 +1966,13 @@ const ct = [0.5, 0.75, 1, 1.25, 1.5, 2], J = 1200, dt = 3e3, ee = 5e3, ut = 10,
1700
1966
  </div>
1701
1967
  `
1702
1968
  );
1703
- class de extends HTMLElement {
1969
+ function At(n) {
1970
+ if (typeof n == "number") return Number.isFinite(n) && n > 0 ? String(n) : null;
1971
+ if (typeof n != "string") return null;
1972
+ const t = n.trim().match(/^(\d+(?:\.\d+)?)\s*(?:[:/]\s*(\d+(?:\.\d+)?))?$/);
1973
+ return !t || Number(t[1]) <= 0 || t[2] !== void 0 && Number(t[2]) <= 0 ? null : t[2] !== void 0 ? `${t[1]} / ${t[2]}` : t[1];
1974
+ }
1975
+ class fe extends HTMLElement {
1704
1976
  constructor() {
1705
1977
  super();
1706
1978
  s(this, "root");
@@ -1718,6 +1990,15 @@ class de extends HTMLElement {
1718
1990
  s(this, "tooltip");
1719
1991
  s(this, "keyboard");
1720
1992
  s(this, "loadingSpinner");
1993
+ /**
1994
+ * Preroll kapısı — reklam plugin'i yüklenmeden önce kurulur ki autoplay / ilk play araya kaçmasın.
1995
+ * Video'nun 'play'/'pause' dinleyicilerinin İLKİ olmalı (yuttuğu olayları UI ve hp:play görmesin).
1996
+ */
1997
+ s(this, "prerollGate");
1998
+ /** Ads plugin kurulumu sürüyor — erken başlatılan kurulum ile sonraki bekleme aynı promise'i paylaşır. */
1999
+ s(this, "adsInstall", null);
2000
+ /** Yükleme halkası açık (medya takıldı / preroll bekleniyor) — kontroller bu sırada otomatik gizlenmez. */
2001
+ s(this, "loadingActive", !1);
1721
2002
  s(this, "errorScreen");
1722
2003
  /** İleri/geri sarmada sağda/solda beliren anlık bildirim. */
1723
2004
  s(this, "seekFeedback");
@@ -1726,6 +2007,11 @@ class de extends HTMLElement {
1726
2007
  s(this, "contextMenuConfig", { stats: !1 });
1727
2008
  /** İlk açılışta yüklenir (plugins/stats). */
1728
2009
  s(this, "statsPanel", null);
2010
+ s(this, "debugPanel", null);
2011
+ /** options.debug — sağ tık menüsündeki "Hata ayıklama" girişini açar. */
2012
+ s(this, "debugEnabled", !1);
2013
+ /** Player'ın tüm hataları (medya, yayın, reklam, altyazı) — her zaman tutulur; bkz. `errorLog`. */
2014
+ s(this, "log", new dt());
1729
2015
  /** Son basılan işaretçi türü — sağ tık menüsü yalnızca fareyle (dokunmatikte uzun basma gesture'a ait). */
1730
2016
  s(this, "lastPointerType", "mouse");
1731
2017
  /** options.tapGestures kuruluysa (plugins/tap-gestures). */
@@ -1738,6 +2024,9 @@ class de extends HTMLElement {
1738
2024
  s(this, "adsController", null);
1739
2025
  s(this, "gestureControls", null);
1740
2026
  s(this, "loopSection", null);
2027
+ s(this, "audioStage", null);
2028
+ /** options.audio — kapak + plak sahnesi, kontroller hep görünür, tam ekran yok. */
2029
+ s(this, "audioMode", !1);
1741
2030
  s(this, "inViewAutoplay", null);
1742
2031
  s(this, "unregisterSticky", null);
1743
2032
  s(this, "playlistRunner", null);
@@ -1796,21 +2085,36 @@ class de extends HTMLElement {
1796
2085
  s(this, "hideTimer", null);
1797
2086
  s(this, "cursorTimer", null);
1798
2087
  /** null = imleç hiç gizlenmez (options.cursorHideDelayMs: false). */
1799
- s(this, "cursorHideDelayMs", ee);
2088
+ s(this, "cursorHideDelayMs", oe);
1800
2089
  /** Fare kontrollerin (buton/seek bar) üzerinde mi — üzerindeyken otomatik gizlenmez; videonun üstünde hareketsizse gizlenir. */
1801
2090
  s(this, "pointerOverControls", !1);
1802
2091
  /** Kalite menüsünde şu an HLS seviyeleri mi var (kaynak değişince temizlemek için). */
1803
2092
  s(this, "hlsQualitiesShown", !1);
1804
2093
  /** Son uygulanan options.showRemainingTime — bkz. applyOptions. */
1805
2094
  s(this, "appliedShowRemaining");
1806
- s(this, "autoHideDelayMs", J);
2095
+ s(this, "autoHideDelayMs", re);
1807
2096
  s(this, "tapCandidate", !1);
1808
2097
  s(this, "tapStartX", 0);
1809
2098
  s(this, "tapStartY", 0);
1810
2099
  /** 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"));
2100
+ s(this, "i18n", be("tr"));
1812
2101
  /** IMA SDK'nın kendi ad-UI dili (skip butonu/sayaç metni) de aynı dili takip etsin diye — bkz. plugins/ads/AdsController. */
1813
2102
  s(this, "localeCode", "tr");
2103
+ s(this, "onMediaError", () => {
2104
+ const e = this.videoEl.error;
2105
+ if (!e) return;
2106
+ const i = { 1: "MEDIA_ERR_ABORTED", 2: "MEDIA_ERR_NETWORK", 3: "MEDIA_ERR_DECODE", 4: "MEDIA_ERR_SRC_NOT_SUPPORTED" }, r = this.videoEl.currentSrc;
2107
+ this.log.add({
2108
+ source: "media",
2109
+ message: e.message || i[e.code] || `MediaError ${e.code}`,
2110
+ fatal: !0,
2111
+ details: { code: e.code, name: i[e.code], src: r && !r.startsWith("blob:") ? r : r ? "MediaSource (hls.js)" : void 0 }
2112
+ });
2113
+ });
2114
+ s(this, "onSubtitleError", (e) => {
2115
+ const i = e.detail;
2116
+ this.log.add({ source: "subtitles", message: `Subtitle file could not be loaded: ${i.message}`, details: { src: i.src } });
2117
+ });
1814
2118
  s(this, "onPointerTypeTrack", (e) => {
1815
2119
  this.lastPointerType = e.pointerType;
1816
2120
  });
@@ -1819,28 +2123,30 @@ class de extends HTMLElement {
1819
2123
  const i = this.contextMenuConfig;
1820
2124
  !i || this.lastPointerType !== "mouse" || (e.preventDefault(), this.contextMenu.show(e.clientX, e.clientY, [
1821
2125
  { label: "HopeCorePlayer", meta: `v${B}` },
1822
- ...i.stats ? [{ label: this.i18n.statsTitle, onSelect: () => void this.toggleStats(!0) }] : []
2126
+ ...i.stats ? [{ label: this.i18n.statsTitle, onSelect: () => void this.toggleStats(!0) }] : [],
2127
+ // Yalnızca debug açıkken ve kayıtlı bir hata varsa.
2128
+ ...this.debugEnabled && this.log.entries.length ? [{ label: this.i18n.debugTitle, meta: String(this.log.entries.length), onSelect: () => void this.showDebugLog() }] : []
1823
2129
  ]));
1824
2130
  });
1825
2131
  s(this, "onStreamTextTracks", (e) => {
1826
2132
  const i = this.streamTracks.filter((r) => r.id.startsWith("native:"));
1827
2133
  if (!e.length)
1828
- ne(this.videoEl, "stream"), this.streamCueKeys.clear(), this.streamTracks = i;
2134
+ ce(this.videoEl, "stream"), this.streamCueKeys.clear(), this.streamTracks = i;
1829
2135
  else {
1830
2136
  const r = new Set([...this.optionTracks, ...i].map((o) => o.label));
1831
2137
  this.streamTracks = [
1832
2138
  ...i,
1833
2139
  ...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) };
2140
+ const a = this.uniqueLabel(this.streamTrackLabel(o.label, o.lang) || o.id, o.kind === "captions" ? "CC" : o.lang || o.kind, r);
2141
+ return { id: o.id, label: a, track: pe(this.videoEl, "stream", o.kind, a, o.lang) };
1836
2142
  })
1837
2143
  ];
1838
2144
  }
1839
2145
  this.rebuildCaptions(this.activeCaptionLabel);
1840
2146
  });
1841
2147
  s(this, "onStreamCues", (e, i) => {
1842
- var n;
1843
- const r = (n = this.streamTracks.find((l) => l.id === e)) == null ? void 0 : n.track;
2148
+ var a;
2149
+ const r = (a = this.streamTracks.find((l) => l.id === e)) == null ? void 0 : a.track;
1844
2150
  if (!r) return;
1845
2151
  let o = this.streamCueKeys.get(r);
1846
2152
  o || this.streamCueKeys.set(r, o = /* @__PURE__ */ new Set());
@@ -1851,31 +2157,31 @@ class de extends HTMLElement {
1851
2157
  });
1852
2158
  /** Tarayıcının kendi (native HLS) altyazı izleri — bizim havuz izlerimiz ve metadata izleri hariç. */
1853
2159
  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:"));
2160
+ const e = Array.from(this.videoEl.textTracks).filter((a) => (a.kind === "subtitles" || a.kind === "captions") && !We(a)), i = this.streamTracks.some((a) => a.id.startsWith("native:"));
1855
2161
  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));
2162
+ const r = this.streamTracks.filter((a) => !a.id.startsWith("native:")), o = new Set([...this.optionTracks, ...r].map((a) => a.label));
1857
2163
  this.streamTracks = [
1858
2164
  ...r,
1859
- ...e.map((n, l) => ({
2165
+ ...e.map((a, l) => ({
1860
2166
  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
2167
+ label: this.uniqueLabel(a.label || a.language || `${this.i18n.captions} ${l + 1}`, a.language || String(l + 1), o),
2168
+ track: a
1863
2169
  }))
1864
2170
  ], this.rebuildCaptions(this.activeCaptionLabel);
1865
2171
  });
1866
2172
  /** Yayında birden fazla ses izi varsa ayarlarda "Ses" alt menüsü (HLS alternatif ses / Safari audioTracks). */
1867
2173
  s(this, "onStreamAudioTracks", (e, i) => {
1868
2174
  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)]));
2175
+ const r = this.controlBar.settingsMenu, o = /* @__PURE__ */ new Set(), a = new Map(e.map((l) => [l.index, this.uniqueLabel(this.streamTrackLabel(l.label, l.lang), String(l.index + 1), o)]));
1870
2176
  if (e.length <= 1) {
1871
- r.unregisterSubmenu(ie);
2177
+ r.unregisterSubmenu(ae);
1872
2178
  return;
1873
2179
  }
1874
2180
  r.registerSubmenu({
1875
- key: ie,
2181
+ key: ae,
1876
2182
  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) }))
2183
+ getValueLabel: () => a.get(i) ?? "",
2184
+ getItems: () => e.map((l) => ({ label: a.get(l.index), active: l.index === i, onSelect: () => this.sourceManager.setAudioTrack(l.index) }))
1879
2185
  });
1880
2186
  });
1881
2187
  /** Playlist panelinin monte edileceği, .video-area'nın ALTINDAKİ (shadow root içi) kapsayıcı — ilk ihtiyaçta oluşturulur. */
@@ -1892,7 +2198,7 @@ class de extends HTMLElement {
1892
2198
  [
1893
2199
  { label: this.i18n.autoQuality, onSelect: () => this.sourceManager.setLevel(-1) },
1894
2200
  // 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) }))
2201
+ ...[...e].sort((o, a) => a.height - o.height).map((o) => ({ label: r(o), onSelect: () => this.sourceManager.setLevel(o.index) }))
1896
2202
  ],
1897
2203
  i === -1 ? this.i18n.autoQuality : r(e[i])
1898
2204
  );
@@ -1925,15 +2231,15 @@ class de extends HTMLElement {
1925
2231
  if (!i && Date.now() - this.lastTouchEndAt < 800) return;
1926
2232
  i && (this.lastTouchEndAt = Date.now());
1927
2233
  const r = i ? e.changedTouches[0] : e;
1928
- if (r && Math.hypot(r.clientX - this.tapStartX, r.clientY - this.tapStartY) > ut) {
2234
+ if (r && Math.hypot(r.clientX - this.tapStartX, r.clientY - this.tapStartY) > Ct) {
1929
2235
  i && !this.isChromeBlocked && this.scheduleAutoHide();
1930
2236
  return;
1931
2237
  }
1932
- const o = i ? "touch" : this.lastPointerType, n = () => this.onBackgroundTap(o, () => {
2238
+ const o = i ? "touch" : this.lastPointerType, a = () => this.onBackgroundTap(o, () => {
1933
2239
  this.videoEl.paused ? this.videoEl.play().catch(() => {
1934
2240
  }) : this.videoEl.pause();
1935
2241
  });
1936
- r && ((d = this.tapGestures) != null && d.handleTap(r.clientX, o === "pen" ? "pen" : o, n)) || n();
2242
+ r && ((d = this.tapGestures) != null && d.handleTap(r.clientX, o === "pen" ? "pen" : o, a)) || a();
1937
2243
  });
1938
2244
  s(this, "onVideoPressCancel", () => {
1939
2245
  this.tapCandidate = !1;
@@ -1949,31 +2255,37 @@ class de extends HTMLElement {
1949
2255
  e.pointerType === "mouse" && (this.pointerOverControls = !1, this.scheduleAutoHide(), this.showCursor());
1950
2256
  });
1951
2257
  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)));
2258
+ this.showChrome(), this.hideTimer && clearTimeout(this.hideTimer), !(this.videoEl.paused || this.loadingActive) && (this.audioMode || (this.hideTimer = setTimeout(() => {
2259
+ this.audioMode || this.videoEl.paused || this.loadingActive || this.pointerOverControls || this.controlBar.settingsMenu.isOpen || this.setChromeOpacity("0");
2260
+ }, this.lastPointerType === "mouse" ? this.autoHideDelayMs : Math.max(this.autoHideDelayMs, Et))));
1955
2261
  });
1956
- at(), this.root = this.attachShadow({ mode: "open" });
2262
+ mt(), this.root = this.attachShadow({ mode: "open" });
1957
2263
  const e = document.createElement("style");
1958
- e.textContent = be, this.root.appendChild(e);
2264
+ e.textContent = ke, this.root.appendChild(e);
1959
2265
  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";
2266
+ i.className = "hp-root", i.innerHTML = St, 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 yt(this.videoEl), this.prerollGate.onWaitChange = (o) => this.onPrerollWaitChange(o), this.videoEl.addEventListener("error", this.onMediaError), this.videoEl.addEventListener("hp-internal:subtitle-error", this.onSubtitleError), this.loadingSpinner = new Ve(this.videoEl), this.root.querySelector(".media-layer").appendChild(this.loadingSpinner.el), this.errorScreen = new qe(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
2267
  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) => {
2268
+ r.className = "hp-chip hp:flex hp:items-center hp:justify-center hp:w-16 hp:h-16", r.style.borderRadius = "9999px", r.appendChild(E("play", "hp:text-2xl")), this.centerPlayButton.appendChild(r), this.centerPlayButton.addEventListener("click", (o) => {
1963
2269
  var c;
1964
- const n = () => {
2270
+ const a = () => {
1965
2271
  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, {
2272
+ }, l = this.lastPointerType === "pen" ? "pen" : this.lastPointerType === "touch" ? "touch" : null, u = o.composedPath().includes(r) ? a : () => this.onBackgroundTap(l ?? "mouse", a);
2273
+ l && ((c = this.tapGestures) != null && c.handleTap(o.clientX, l, u)) || u();
2274
+ }), 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 we(this.videoEl, {
1969
2275
  onLevelsChanged: this.onHlsLevelsChanged,
1970
2276
  onAudioTracksChanged: this.onStreamAudioTracks,
1971
2277
  onTextTracksFound: this.onStreamTextTracks,
1972
2278
  onCues: this.onStreamCues,
1973
- onFatalError: (o) => this.errorScreen.showStreamError(o === "network" ? 2 : 3)
1974
- }), this.errorScreen.setShouldShow(() => !this.sourceManager.isRecovering()), this.controlBar = new Pe(
2279
+ onFatalError: (o) => this.errorScreen.showStreamError(o === "network" ? 2 : 3),
2280
+ onStreamError: (o) => this.log.add({
2281
+ source: "stream",
2282
+ message: `${o.type}: ${o.details}`,
2283
+ fatal: o.fatal,
2284
+ details: { url: o.url, httpStatus: o.httpStatus, reason: o.reason, engine: "hls.js" }
2285
+ })
2286
+ }), this.errorScreen.setShouldShow(() => !this.sourceManager.isRecovering()), this.controlBar = new Ne(
1975
2287
  this.videoEl,
1976
- ct,
2288
+ wt,
1977
2289
  {
1978
2290
  onRequestFullscreen: () => this.requestFullscreenCompat(),
1979
2291
  liveSyncPosition: () => {
@@ -1984,6 +2296,8 @@ class de extends HTMLElement {
1984
2296
  isFullscreen: () => this.isFullscreenActive(),
1985
2297
  // adsController sonradan kurulur — closure'lar her çağrıda güncel this.adsController'ı okur.
1986
2298
  isAdActive: () => this.isAdPlaying(),
2299
+ interceptTogglePlay: () => this.cancelPrerollWait(),
2300
+ onLoadingChange: (o) => this.onLoadingChange(o),
1987
2301
  adTogglePlay: () => {
1988
2302
  var o;
1989
2303
  return (o = this.adsController) == null ? void 0 : o.toggleAdPlayPause();
@@ -1999,8 +2313,8 @@ class de extends HTMLElement {
1999
2313
  return ((o = this.adsController) == null ? void 0 : o.getAdVolume()) ?? 1;
2000
2314
  },
2001
2315
  setVolume: (o) => {
2002
- var n;
2003
- return (n = this.adsController) == null ? void 0 : n.setAdVolume(o);
2316
+ var a;
2317
+ return (a = this.adsController) == null ? void 0 : a.setAdVolume(o);
2004
2318
  },
2005
2319
  toggleMute: () => {
2006
2320
  var o;
@@ -2009,11 +2323,11 @@ class de extends HTMLElement {
2009
2323
  }
2010
2324
  },
2011
2325
  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(
2326
+ ), this.chromeEl.appendChild(this.controlBar.el), this.chromeEl.appendChild(this.controlBar.topEl), this.videoArea.appendChild(this.controlBar.volumePanel.unmuteBadge), this.captionRenderer = new P(this.videoEl, this.videoArea, this.controlBar.seekBar.el, this.i18n), this.videoArea.appendChild(this.captionRenderer.layerEl), this.keyboard = new _e(
2013
2327
  this,
2014
2328
  this.videoEl,
2015
2329
  () => 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");
2330
+ ), this.tooltip = new He(this.videoArea), this.contextMenu = new pt(this.videoArea), this.seekFeedback = new ht(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.keyboard.interceptTogglePlay = () => this.cancelPrerollWait(), this.controlBar.seekBar.onKeyboardSeek = (o) => this.seekFeedback.show(o), this.blockChrome("boot");
2017
2331
  }
2018
2332
  static get observedAttributes() {
2019
2333
  return ["src", "poster", "autoplay", "muted", "loop", "theme", "locale"];
@@ -2029,8 +2343,8 @@ class de extends HTMLElement {
2029
2343
  }), 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
2344
  }
2031
2345
  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;
2346
+ var e, i, r, o, a, l, d, u, c, g, h, p, m, b, v, y, f, k, T, x, S, F, H, _;
2347
+ (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.debugPanel) == null || o.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(), (u = this.loopSection) == null || u.destroy(), (c = this.audioStage) == null || c.destroy(), this.audioStage = null, (g = this.inViewAutoplay) == null || g.destroy(), (h = this.unregisterSticky) == null || h.call(this), (p = this.playlistRunner) == null || p.destroy(), (m = this.hopeStory) == null || m.destroy(), (b = this.markProgress) == null || b.destroy(), (v = this.segments) == null || v.destroy(), (y = this.spriteThumbnails) == null || y.destroy(), (f = this.countdownScreen) == null || f.destroy(), (k = this.geoChecker) == null || k.destroy(), (T = this.redirectScreen) == null || T.destroy(), (x = this.qrResume) == null || x.destroy(), (S = this.pauseAd) == null || S.destroy(), this.pauseAd = null, (F = this.dubbing) == null || F.destroy(), (H = this.liveWallClock) == null || H.destroy(), (_ = this.daiController) == null || _.destroy(), this.prerollGate.release(!1), this.hideTimer && clearTimeout(this.hideTimer), this.bootGraceTimer && clearTimeout(this.bootGraceTimer), this.lastSynced = null;
2034
2348
  }
2035
2349
  /** Reklam/consent-farkında plugin'lerin (gesture/sticky/in-view-autoplay) ortak sorgusu. */
2036
2350
  isAdPlaying() {
@@ -2046,7 +2360,7 @@ class de extends HTMLElement {
2046
2360
  this._options = e ?? {}, this.bootGraceTimer && (clearTimeout(this.bootGraceTimer), this.bootGraceTimer = null), this.bootResolved = !0, this.lastSynced = null, this.syncFromAttributes();
2047
2361
  }
2048
2362
  play() {
2049
- return this.videoEl.play();
2363
+ return this.prerollGate.interceptPlay() ? Promise.resolve() : this.videoEl.play();
2050
2364
  }
2051
2365
  pause() {
2052
2366
  this.videoEl.pause();
@@ -2055,6 +2369,18 @@ class de extends HTMLElement {
2055
2369
  get playbackEngine() {
2056
2370
  return this.sourceManager.engine;
2057
2371
  }
2372
+ /** Player'ın hata kaydı (medya, yayın, reklam, altyazı) — `options.debug` kapalıyken de tutulur. */
2373
+ get errorLog() {
2374
+ return this.log;
2375
+ }
2376
+ /** Hata ayıklama penceresini aç (sağ tık menüsündeki "Hata ayıklama" ile aynı). */
2377
+ async showDebugLog() {
2378
+ if (!this.debugPanel) {
2379
+ const { installDebugPanel: e } = await import("./index-DCXX1ZJG.js");
2380
+ this.debugPanel ?? (this.debugPanel = e({ containerEl: this.videoArea, i18n: this.i18n, log: this.log, version: B }));
2381
+ }
2382
+ this.debugPanel.show();
2383
+ }
2058
2384
  /** Teknik istatistik panelini aç/kapat (`force`: true = aç, false = kapat). Sağ tık menüsündeki "İstatistikler" ile aynı. */
2059
2385
  async toggleStats(e) {
2060
2386
  if (!this.statsPanel) {
@@ -2122,18 +2448,25 @@ class de extends HTMLElement {
2122
2448
  })), this.pluginApplyRun;
2123
2449
  }
2124
2450
  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;
2451
+ var a, l, d, u, c, g, h, p, m, b, v, y, f, k, T, x, S;
2452
+ 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 ?? re, this.tapToPlay = e.tapToPlay ?? "auto", this.cursorHideDelayMs = e.cursorHideDelayMs === !1 ? null : e.cursorHideDelayMs ?? oe, this.cursorHideDelayMs === null && this.showCursor(), e.miniProgress && !this.miniProgress ? (this.miniProgress = new ot(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 || (a = this.debugPanel) == null || a.hide(), this.contextMenuConfig = e.contextMenu === !1 ? null : { stats: typeof e.contextMenu == "object" && e.contextMenu.stats === !0 }, this.contextMenuConfig || this.contextMenu.close();
2453
+ const i = e.keyboardSeekStep && e.keyboardSeekStep > 0 ? e.keyboardSeekStep : Tt;
2128
2454
  this.keyboard.seekStep = i, this.controlBar.seekBar.keyboardStep = i;
2129
2455
  const r = e.skipButtons === !0 ? {} : e.skipButtons || null;
2130
2456
  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);
2457
+ r && r.back !== !1 ? r.back ?? ne : null,
2458
+ r && r.forward !== !1 ? r.forward ?? ne : null
2459
+ ), e.showRemainingTime !== void 0 && e.showRemainingTime !== this.appliedShowRemaining && (this.appliedShowRemaining = e.showRemainingTime, this.controlBar.setShowRemaining(e.showRemainingTime));
2460
+ const o = At(e.aspectRatio);
2461
+ o ? this.style.setProperty("--hp-aspect-ratio", o) : this.style.removeProperty("--hp-aspect-ratio"), e.theme ? this.setAttribute("data-theme", e.theme) : this.removeAttribute("data-theme"), this.localeCode = e.locale ?? "tr", ft(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(), (l = this.playlistRunner) == null || l.refreshLabels(), (d = this.hopeStory) == null || d.refreshLabels(), (u = this.countdownScreen) == null || u.refreshLabels(), (c = this.geoChecker) == null || c.refreshLabels(), (g = this.redirectScreen) == null || g.refreshLabels(), (h = this.qrResume) == null || h.refreshLabels(), (p = this.pauseAd) == null || p.refreshLabels(), (m = this.dubbing) == null || m.refreshLabels(), this.onStreamAudioTracks(this.streamAudio.tracks, this.streamAudio.active), (b = this.statsPanel) == null || b.refreshLabels(), (v = this.debugPanel) == null || v.refreshLabels(), (y = this.liveWallClock) == null || y.refreshLabels(), (f = this.loopSection) == null || f.refreshLabels(), (k = this.audioStage) == null || k.refreshLabels(), (T = this.markProgress) == null || T.refreshLabels(), (S = (x = this.unregisterSticky) == null ? void 0 : x.refreshLabels) == null || S.call(x), this.bootResolved && await this.queuePluginApply(e);
2134
2462
  }
2135
2463
  /** applyOptions'ın asenkron kısmı — yalnızca queuePluginApply üzerinden, sırayla çalışır. */
2136
2464
  async applyPluginsAndPlayback(e) {
2465
+ if (e.ads && !this.adsController) {
2466
+ const r = e.ads === !0 ? {} : e.ads;
2467
+ vt(r) && !this.prerollGate.isArmed && this.prerollGate.arm(r.prerollTimeoutMs ?? D), xt(), e.countdownScreen || this.installAdsOnce(e);
2468
+ }
2469
+ await this.applyAudioMode(e);
2137
2470
  const i = () => ({
2138
2471
  videoEl: this.videoEl,
2139
2472
  overlayContainerEl: this.videoArea,
@@ -2155,39 +2488,17 @@ class de extends HTMLElement {
2155
2488
  }))) : await this.initPlayback(e);
2156
2489
  }
2157
2490
  async initPlayback(e) {
2158
- var r, o, n, l, d, m, c;
2491
+ var o, a, l, d, u, c, g;
2159
2492
  this.sourceManager.configure(e.hls), this.errorScreen.dismiss();
2160
- const i = (r = e.sources) != null && r.length ? e.sources : e.src ? [{ src: e.src, label: this.i18n.autoQuality }] : [];
2161
- if (i.length <= 1 && (this.controlBar.setQualities([], ""), this.hlsQualitiesShown = !1), i.length > 0) {
2162
- const h = i.find((p) => p.selected) ?? i[0];
2163
- await this.sourceManager.load(h.src, h.type), e.autoplay && this.videoEl.play().catch(() => {
2164
- });
2165
- }
2166
- if (i.length > 1 && this.controlBar.setQualities(
2493
+ const i = (o = e.sources) != null && o.length ? e.sources : e.src ? [{ src: e.src, label: this.i18n.autoQuality }] : [], r = i.find((h) => h.selected) ?? i[0];
2494
+ if (r && !this.sourceManager.isLoaded(r.src, r.type) && (i.length <= 1 && (this.controlBar.setQualities([], ""), this.hlsQualitiesShown = !1), await this.sourceManager.load(r.src, r.type), e.autoplay && this.videoEl.play().catch(() => {
2495
+ })), i.length > 1 && this.controlBar.setQualities(
2167
2496
  i.map((h) => ({
2168
2497
  label: h.label,
2169
2498
  onSelect: () => void this.switchQualitySource(h)
2170
2499
  })),
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) {
2500
+ ((a = i.find((h) => h.selected)) == null ? void 0 : a.label) ?? i[0].label
2501
+ ), await this.installAdsOnce(e), e.gesture && !this.gestureControls) {
2191
2502
  const h = e.gesture === !0 ? {} : e.gesture, { installGesture: p } = await import("./index-Ca8hocby.js");
2192
2503
  this.gestureControls = p(
2193
2504
  { videoEl: this.videoEl, overlayContainerEl: this.videoArea, isAdActive: () => this.isAdPlaying() },
@@ -2201,7 +2512,7 @@ class de extends HTMLElement {
2201
2512
  videoEl: this.videoEl,
2202
2513
  seekBarEl: this.controlBar.seekBar.el,
2203
2514
  markers: this.controlBar.seekBar,
2204
- addControlButton: (u, b, g) => this.controlBar.addButton(u, b, g),
2515
+ addControlButton: (m, b, v) => this.controlBar.addButton(m, b, v),
2205
2516
  i18n: this.i18n
2206
2517
  },
2207
2518
  h
@@ -2230,19 +2541,19 @@ class de extends HTMLElement {
2230
2541
  );
2231
2542
  }
2232
2543
  if (e.playlist && !this.playlistRunner) {
2233
- const { installPlaylist: h } = await import("./index-lwFM1iPV.js");
2544
+ const { installPlaylist: h } = await import("./index-CP1Y6U0c.js");
2234
2545
  this.playlistRunner = h(
2235
2546
  {
2236
2547
  videoEl: this.videoEl,
2237
2548
  hostEl: this,
2238
2549
  panelEl: this.getOrCreatePanelContainer(),
2239
- loadSource: (p, u) => this.sourceManager.load(p, u),
2550
+ loadSource: (p, m) => this.sourceManager.load(p, m),
2240
2551
  setPoster: (p) => {
2241
2552
  this.videoEl.poster = p;
2242
2553
  },
2243
2554
  requestFreshAd: (p) => {
2244
- var u;
2245
- return (u = this.adsController) == null ? void 0 : u.resetForNewItem(p);
2555
+ var m;
2556
+ return (m = this.adsController) == null ? void 0 : m.resetForNewItem(p);
2246
2557
  },
2247
2558
  i18n: this.i18n
2248
2559
  },
@@ -2250,20 +2561,20 @@ class de extends HTMLElement {
2250
2561
  );
2251
2562
  }
2252
2563
  if (e.story && !this.hopeStory) {
2253
- const { installStory: h } = await import("./index-d_U9dcN6.js");
2564
+ const { installStory: h } = await import("./index-BO0tjMR6.js");
2254
2565
  this.hopeStory = h(
2255
2566
  {
2256
2567
  videoEl: this.videoEl,
2257
2568
  hostEl: this,
2258
2569
  videoAreaEl: this.videoArea,
2259
2570
  playerBodyEls: [this.root.querySelector(".media-layer"), this.chromeEl, this.centerPlayButton],
2260
- loadSource: (p, u) => this.sourceManager.load(p, u),
2571
+ loadSource: (p, m) => this.sourceManager.load(p, m),
2261
2572
  setPoster: (p) => {
2262
2573
  this.videoEl.poster = p;
2263
2574
  },
2264
2575
  requestFreshAd: (p) => {
2265
- var u;
2266
- return (u = this.adsController) == null ? void 0 : u.resetForNewItem(p);
2576
+ var m;
2577
+ return (m = this.adsController) == null ? void 0 : m.resetForNewItem(p);
2267
2578
  },
2268
2579
  i18n: this.i18n
2269
2580
  },
@@ -2271,23 +2582,23 @@ class de extends HTMLElement {
2271
2582
  );
2272
2583
  }
2273
2584
  if (e.markers && !this.markProgress) {
2274
- const { installMarkers: h } = await import("./index-BeBmx35F.js");
2585
+ const { installMarkers: h } = await import("./index-048h1-5X.js");
2275
2586
  this.markProgress = h(
2276
2587
  {
2277
2588
  videoEl: this.videoEl,
2278
2589
  overlayContainerEl: this.videoArea,
2279
- addSeekBarMarker: (p, u) => this.controlBar.seekBar.addMarker(p, u),
2590
+ addSeekBarMarker: (p, m) => this.controlBar.seekBar.addMarker(p, m),
2280
2591
  i18n: this.i18n
2281
2592
  },
2282
2593
  e.markers
2283
2594
  );
2284
2595
  }
2285
- if ((n = e.segments) != null && n.length && !this.segments) {
2286
- const { installSegments: h } = await import("./index-C6ONQXlF.js");
2596
+ if ((l = e.segments) != null && l.length && !this.segments) {
2597
+ const { installSegments: h } = await import("./index-9NzklChR.js");
2287
2598
  this.segments = h({ videoEl: this.videoEl, seekBar: this.controlBar.seekBar }, e.segments);
2288
2599
  }
2289
2600
  if (e.spriteThumbnails && !this.spriteThumbnails) {
2290
- const { installSpriteThumbnails: h } = await import("./index-DGSYKljQ.js");
2601
+ const { installSpriteThumbnails: h } = await import("./index-n-1IIClr.js");
2291
2602
  this.spriteThumbnails = h(
2292
2603
  {
2293
2604
  videoEl: this.videoEl,
@@ -2322,7 +2633,7 @@ class de extends HTMLElement {
2322
2633
  {
2323
2634
  areaEl: this.videoArea,
2324
2635
  seekBy: (p) => {
2325
- this.controlBar.seekBar.el.style.pointerEvents !== "none" && (se(this.videoEl, p), this.seekFeedback.show(p));
2636
+ this.controlBar.seekBar.el.style.pointerEvents !== "none" && (le(this.videoEl, p), this.seekFeedback.show(p));
2326
2637
  },
2327
2638
  togglePlay: () => this.videoEl.paused ? void this.videoEl.play().catch(() => {
2328
2639
  }) : this.videoEl.pause(),
@@ -2338,7 +2649,7 @@ class de extends HTMLElement {
2338
2649
  const { DEFAULT_TAP_GESTURES: h } = await import("./index-C5oGMHF_.js");
2339
2650
  this.tapGestures.setGestures(e.tapGestures === !0 ? h : e.tapGestures || []);
2340
2651
  }
2341
- if ((l = e.pauseAd) != null && l.adUnitPath && !this.pauseAd) {
2652
+ if ((d = e.pauseAd) != null && d.adUnitPath && !this.pauseAd) {
2342
2653
  const { installPauseAd: h } = await import("./index-CaMVTgh0.js");
2343
2654
  this.pauseAd = h(
2344
2655
  { videoEl: this.videoEl, hostEl: this, videoArea: this.videoArea, i18n: this.i18n, isBlocked: () => this.isChromeBlocked },
@@ -2350,7 +2661,7 @@ class de extends HTMLElement {
2350
2661
  this.dubbing = h(
2351
2662
  {
2352
2663
  videoEl: this.videoEl,
2353
- loadSource: (p, u) => this.sourceManager.load(p, u),
2664
+ loadSource: (p, m) => this.sourceManager.load(p, m),
2354
2665
  registerSubmenu: (p) => this.controlBar.settingsMenu.registerSubmenu(p),
2355
2666
  unregisterSubmenu: (p) => this.controlBar.settingsMenu.unregisterSubmenu(p),
2356
2667
  i18n: this.i18n
@@ -2364,14 +2675,14 @@ class de extends HTMLElement {
2364
2675
  {
2365
2676
  videoEl: this.videoEl,
2366
2677
  seekBarEl: this.controlBar.seekBar.el,
2367
- addControlElement: (u) => this.controlBar.addElement(u),
2678
+ addControlElement: (m) => this.controlBar.addElement(m),
2368
2679
  i18n: this.i18n,
2369
2680
  getPlayingDate: () => {
2370
- var f, v, y;
2371
- const u = (f = this.sourceManager.hlsInstance) == null ? void 0 : f.playingDate;
2372
- 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;
2374
- return Number.isFinite(g) && g > 0 ? new Date(g + this.videoEl.currentTime * 1e3) : null;
2681
+ var y, f, k;
2682
+ const m = (y = this.sourceManager.hlsInstance) == null ? void 0 : y.playingDate;
2683
+ if (m) return m;
2684
+ const b = (k = (f = this.videoEl).getStartDate) == null ? void 0 : k.call(f), v = (b == null ? void 0 : b.getTime()) ?? NaN;
2685
+ return Number.isFinite(v) && v > 0 ? new Date(v + this.videoEl.currentTime * 1e3) : null;
2375
2686
  }
2376
2687
  },
2377
2688
  h
@@ -2391,7 +2702,7 @@ class de extends HTMLElement {
2391
2702
  e.dai
2392
2703
  );
2393
2704
  }
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);
2705
+ (u = e.subtitles) != null && u.length ? this.optionTracks = Xe(this.videoEl, e.subtitles) : (de(this.videoEl), this.optionTracks = []), this.rebuildCaptions(((g = (c = e.subtitles) == null ? void 0 : c.find((h) => h.default)) == null ? void 0 : g.label) ?? null);
2395
2706
  }
2396
2707
  /** Altyazı menüsünü `options.subtitles` + yayın izlerinden kurar; `activeLabel` varsa onu seçer. */
2397
2708
  rebuildCaptions(e) {
@@ -2401,8 +2712,8 @@ class de extends HTMLElement {
2401
2712
  }
2402
2713
  const i = (o) => {
2403
2714
  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);
2715
+ const a = $e(this.subtitleTracks, o);
2716
+ this.activeCaptionLabel = a ? o : null, this.sourceManager.selectTextTrack(((l = this.streamTracks.find((d) => d.label === o)) == null ? void 0 : l.id) ?? null), this.captionRenderer.setActiveTrack(a), this.captionTrackActive = a !== null, this.controlBar.settingsMenu.setActiveCaption(a ? o : this.i18n.captionsOff), this.controlBar.settingsMenu.setCaptionAppearance(a !== null ? this.buildCaptionAppearance() : null);
2406
2717
  };
2407
2718
  this.selectCaption = i;
2408
2719
  const r = e && this.subtitleTracks.some((o) => o.label === e) ? e : null;
@@ -2434,11 +2745,11 @@ class de extends HTMLElement {
2434
2745
  }
2435
2746
  /** 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
2747
  buildCaptionAppearance() {
2437
- const e = ["small", "normal", "large"], i = (r, o, n, l) => r.map((d, m) => ({
2748
+ const e = ["small", "normal", "large"], i = (r, o, a, l) => r.map((d, u) => ({
2438
2749
  value: d,
2439
2750
  active: o() === d,
2440
- ariaLabel: `${l} ${m + 1}`,
2441
- onSelect: () => n(d)
2751
+ ariaLabel: `${l} ${u + 1}`,
2752
+ onSelect: () => a(d)
2442
2753
  }));
2443
2754
  return {
2444
2755
  sizeLabel: this.i18n.captionSize,
@@ -2449,14 +2760,14 @@ class de extends HTMLElement {
2449
2760
  })),
2450
2761
  bgColorLabel: this.i18n.captionBgColor,
2451
2762
  getBgColorOptions: () => i(
2452
- T.BG_COLOR_PRESETS,
2763
+ P.BG_COLOR_PRESETS,
2453
2764
  () => this.captionRenderer.getBgColor(),
2454
2765
  (r) => this.captionRenderer.setBgColor(r),
2455
2766
  this.i18n.captionBgColor
2456
2767
  ),
2457
2768
  textColorLabel: this.i18n.captionTextColor,
2458
2769
  getTextColorOptions: () => i(
2459
- T.TEXT_COLOR_PRESETS,
2770
+ P.TEXT_COLOR_PRESETS,
2460
2771
  () => this.captionRenderer.getTextColor(),
2461
2772
  (r) => this.captionRenderer.setTextColor(r),
2462
2773
  this.i18n.captionTextColor
@@ -2480,6 +2791,7 @@ class de extends HTMLElement {
2480
2791
  return this.videoEl;
2481
2792
  }
2482
2793
  requestFullscreenCompat() {
2794
+ if (this.audioMode) return;
2483
2795
  const e = this, i = () => {
2484
2796
  var r, o;
2485
2797
  return (o = (r = this.iosVideo).webkitEnterFullscreen) == null ? void 0 : o.call(r);
@@ -2531,16 +2843,16 @@ class de extends HTMLElement {
2531
2843
  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
2844
  };
2533
2845
  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();
2536
- 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
- let h = 0;
2538
- const p = this.controlBar.topEl.getBoundingClientRect();
2539
- if (p.width > 0 && m - d / 2 < p.bottom - i.top) {
2540
- const u = p.left - i.left - 8 - d / 2;
2541
- i.width / 2 > u && (h = Math.round(Math.max(d / 2 + 8, u) - i.width / 2));
2846
+ const a = 64, l = r.top - i.top - 8;
2847
+ if (i.height / 2 + a / 2 <= l) return o();
2848
+ const d = Math.max(40, Math.min(56, l - 12)), u = Math.max(d / 2 + 6, l - d / 2), c = Math.round(u - i.height / 2);
2849
+ let g = 0;
2850
+ const h = this.controlBar.topEl.getBoundingClientRect();
2851
+ if (h.width > 0 && u - d / 2 < h.bottom - i.top) {
2852
+ const p = h.left - i.left - 8 - d / 2;
2853
+ i.width / 2 > p && (g = Math.round(Math.max(d / 2 + 8, p) - i.width / 2));
2542
2854
  }
2543
- e.setAttribute("data-center-play-shifted", ""), e.style.setProperty("--hp-center-play-shift-x", `${h}px`), e.style.setProperty("--hp-center-play-size", `${d}px`), e.style.setProperty("--hp-center-play-shift", `${c}px`);
2855
+ e.setAttribute("data-center-play-shifted", ""), e.style.setProperty("--hp-center-play-shift-x", `${g}px`), e.style.setProperty("--hp-center-play-size", `${d}px`), e.style.setProperty("--hp-center-play-shift", `${c}px`);
2544
2856
  }
2545
2857
  /** Dar player'da dokunmatikte oynat/duraklat yerine kontrolleri göster/gizle (options.tapToPlay). */
2546
2858
  tapTogglesPlay(e) {
@@ -2598,14 +2910,103 @@ class de extends HTMLElement {
2598
2910
  showCursor() {
2599
2911
  this.cursorTimer && clearTimeout(this.cursorTimer), this.cursorTimer = null, this.removeAttribute("data-cursor-hidden");
2600
2912
  }
2913
+ /** options.audio: sahneyi kurar, günceller (konum / boyut / devir canlı değişebilir) ya da kaldırır. */
2914
+ async applyAudioMode(e) {
2915
+ var r;
2916
+ const i = e.audio ? e.audio === !0 ? {} : e.audio : null;
2917
+ if (this.audioMode = !!i, this.toggleAttribute("data-audio", !!i), this.controlBar.setAudioMode(!!i), !i) {
2918
+ (r = this.audioStage) == null || r.destroy(), this.audioStage = null;
2919
+ return;
2920
+ }
2921
+ if (this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = null, this.isChromeBlocked || this.showChrome(), this.audioStage)
2922
+ this.audioStage.update(i);
2923
+ else {
2924
+ const { installAudioStage: o } = await import("./index-BgJJr55r.js");
2925
+ if (!this.audioMode) return;
2926
+ this.audioStage ?? (this.audioStage = o(
2927
+ {
2928
+ videoEl: this.videoEl,
2929
+ layerEl: this.root.querySelector(".media-layer"),
2930
+ poster: () => this._options.poster ?? this.getAttribute("poster") ?? void 0,
2931
+ togglePlay: () => this.videoEl.paused ? void this.play().catch(() => {
2932
+ }) : this.videoEl.pause(),
2933
+ play: () => void this.play().catch(() => {
2934
+ }),
2935
+ i18n: this.i18n
2936
+ },
2937
+ i
2938
+ ));
2939
+ }
2940
+ }
2941
+ /** Ads plugin'ini bir kez kurar; erken (paralel) başlatılan kurulum varsa onu bekler. */
2942
+ installAdsOnce(e) {
2943
+ if (!e.ads || this.adsController) return Promise.resolve();
2944
+ if (!this.adsInstall) {
2945
+ const i = e.ads === !0 ? {} : e.ads;
2946
+ this.adsInstall = (async () => {
2947
+ const { installAds: r } = await import("./index-BCMVXNL0.js");
2948
+ this.adsController = await r(
2949
+ {
2950
+ videoEl: this.videoEl,
2951
+ hostEl: this,
2952
+ adLayerEl: this.adLayerEl,
2953
+ hideChrome: () => this.blockChrome("ads", "reduced"),
2954
+ showChrome: () => this.unblockChrome("ads"),
2955
+ // IMA'nın KENDİ UI'ı üzerinden (ör. reklam video'suna
2956
+ // tıklama) duraklatılır/devam ettirilirse toolbar'ımızın
2957
+ // ikonu da senkron kalsın diye.
2958
+ onAdPlayStateChange: () => this.controlBar.refreshAdPlayState(),
2959
+ locale: this.localeCode,
2960
+ prerollGate: this.prerollGate,
2961
+ log: (o) => this.log.add({ source: "ads", ...o }),
2962
+ onAdProgress: (o) => this.controlBar.setAdInfo(o),
2963
+ // Sürekli oynatma (vconp): playlist / story bir sonraki içeriği kendiliğinden başlatıyorsa.
2964
+ isContinuousPlayback: () => {
2965
+ const o = this._options, a = (l) => !!l && l.autoplayNext !== !1;
2966
+ return a(o.playlist) || a(o.story);
2967
+ },
2968
+ audioPoster: (() => {
2969
+ if (!e.audio) return;
2970
+ const o = e.audio === !0 ? {} : e.audio;
2971
+ return o.adPoster ? new URL(o.adPoster, document.baseURI).href : void 0;
2972
+ })(),
2973
+ surface: {
2974
+ videoEl: this.videoEl,
2975
+ containerEl: this.videoArea,
2976
+ enterFullscreen: () => this.requestFullscreenCompat(),
2977
+ labels: () => this.i18n
2978
+ }
2979
+ },
2980
+ i
2981
+ );
2982
+ })().catch((r) => {
2983
+ this.prerollGate.release(!0), this.adsInstall = null, this.dispatchEvent(new CustomEvent("hp:aderror", { detail: { message: String(r) } }));
2984
+ });
2985
+ }
2986
+ return this.adsInstall;
2987
+ }
2988
+ /** Preroll beklemesi başladı / bitti: halka döner, toolbar görünür kalır, oynat butonu "duraklat" görünür. */
2989
+ onPrerollWaitChange(e) {
2990
+ if (this.controlBar.setPendingPlay(e), this.controlBar.setLoading("preroll", e), this.isChromeBlocked) return;
2991
+ const i = !e && this.videoEl.paused;
2992
+ this.centerPlayButton.style.opacity = i ? "1" : "0", this.centerPlayButton.style.pointerEvents = i ? "auto" : "none";
2993
+ }
2994
+ /** Preroll beklenirken basılan oynat/duraklat (buton, Space/K) beklemeyi iptal eder. */
2995
+ cancelPrerollWait() {
2996
+ return this.prerollGate.isWaiting ? (this.prerollGate.cancelIntent(), !0) : !1;
2997
+ }
2998
+ /** Yükleme halkası açılınca kontroller görünür kalır ve gizlenmez; kapanınca normal otomatik gizleme sürer. */
2999
+ onLoadingChange(e) {
3000
+ this.loadingActive = e, e ? (this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = null, this.isChromeFullyHidden || this.showChrome()) : !this.videoEl.paused && !this.isChromeBlocked && this.scheduleAutoHide();
3001
+ }
2601
3002
  }
2602
3003
  /** 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);
3004
+ s(fe, "version", B);
3005
+ typeof window < "u" && !customElements.get("hope-player") && customElements.define("hope-player", fe);
2605
3006
  export {
2606
3007
  B as H,
2607
- de as a,
2608
- k as c,
2609
- x as f
3008
+ fe as a,
3009
+ E as c,
3010
+ w as f
2610
3011
  };
2611
- //# sourceMappingURL=index-BHO8Gbrj.js.map
3012
+ //# sourceMappingURL=index-01P9jpUY.js.map