@hopeplayer/core 1.3.1 → 1.5.0

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 (97) hide show
  1. package/README.md +4 -0
  2. package/dist/HopePlayerElement.d.ts +29 -4
  3. package/dist/HopePlayerElement.d.ts.map +1 -1
  4. package/dist/chunks/NativeEme-CXosVcw8.js +80 -0
  5. package/dist/chunks/NativeEme-CXosVcw8.js.map +1 -0
  6. package/dist/chunks/{accessibility-CehDBG3h.js → accessibility-DFx4CE0H.js} +45 -41
  7. package/dist/chunks/accessibility-DFx4CE0H.js.map +1 -0
  8. package/dist/chunks/{ads-BFmyld9u.js → ads-C4tDPsUs.js} +3 -3
  9. package/dist/chunks/ads-C4tDPsUs.js.map +1 -0
  10. package/dist/chunks/analytics-DEjTAJO9.js +281 -0
  11. package/dist/chunks/analytics-DEjTAJO9.js.map +1 -0
  12. package/dist/chunks/{cast-DJXOJLEZ.js → cast-Baxvu76A.js} +2 -2
  13. package/dist/chunks/{cast-DJXOJLEZ.js.map → cast-Baxvu76A.js.map} +1 -1
  14. package/dist/chunks/dash-CWjy-y7B.js +22 -0
  15. package/dist/chunks/dash-CWjy-y7B.js.map +1 -0
  16. package/dist/chunks/{history-YQ9A8HBv.js → history-CvydU0aN.js} +2 -2
  17. package/dist/chunks/{history-YQ9A8HBv.js.map → history-CvydU0aN.js.map} +1 -1
  18. package/dist/chunks/keySystems-CNzjRq6e.js +70 -0
  19. package/dist/chunks/keySystems-CNzjRq6e.js.map +1 -0
  20. package/dist/chunks/{markers-BmcD53SJ.js → markers-Dr4-CCxE.js} +2 -2
  21. package/dist/chunks/{markers-BmcD53SJ.js.map → markers-Dr4-CCxE.js.map} +1 -1
  22. package/dist/chunks/{player-BVkwkn4b.js → player-DV4Hf5Cw.js} +1320 -993
  23. package/dist/chunks/player-DV4Hf5Cw.js.map +1 -0
  24. package/dist/chunks/{playlist-jDbObKz3.js → playlist-DJsdK6xm.js} +29 -21
  25. package/dist/chunks/playlist-DJsdK6xm.js.map +1 -0
  26. package/dist/chunks/pluginHost-GxNfyP5E.js +566 -0
  27. package/dist/chunks/pluginHost-GxNfyP5E.js.map +1 -0
  28. package/dist/chunks/{redirectScreen-CFZKtEdv.js → redirectScreen-BT_26-5g.js} +2 -2
  29. package/dist/chunks/{redirectScreen-CFZKtEdv.js.map → redirectScreen-BT_26-5g.js.map} +1 -1
  30. package/dist/chunks/{rewardedUnlock-Cn4_68a3.js → rewardedUnlock-jFOdzfSq.js} +2 -2
  31. package/dist/chunks/{rewardedUnlock-Cn4_68a3.js.map → rewardedUnlock-jFOdzfSq.js.map} +1 -1
  32. package/dist/chunks/{segments-DXARAkpS.js → segments--hl_QVrI.js} +2 -2
  33. package/dist/chunks/{segments-DXARAkpS.js.map → segments--hl_QVrI.js.map} +1 -1
  34. package/dist/chunks/{skipSegments-U0aUwoDt.js → skipSegments-vJMhdiJn.js} +55 -42
  35. package/dist/chunks/{skipSegments-U0aUwoDt.js.map → skipSegments-vJMhdiJn.js.map} +1 -1
  36. package/dist/chunks/{spriteThumbnails-DLfTFsPU.js → spriteThumbnails-BoxVY--_.js} +76 -53
  37. package/dist/chunks/spriteThumbnails-BoxVY--_.js.map +1 -0
  38. package/dist/chunks/{statsPanel-DSClIwA3.js → statsPanel-D0DtoFgS.js} +2 -2
  39. package/dist/chunks/statsPanel-D0DtoFgS.js.map +1 -0
  40. package/dist/chunks/{story-Ce56rEaN.js → story-BRkhSDhR.js} +2 -2
  41. package/dist/chunks/{story-Ce56rEaN.js.map → story-BRkhSDhR.js.map} +1 -1
  42. package/dist/controls/ControlBar.d.ts +2 -0
  43. package/dist/controls/ControlBar.d.ts.map +1 -1
  44. package/dist/controls/SeekBar.d.ts.map +1 -1
  45. package/dist/controls/SettingsMenu.d.ts +5 -0
  46. package/dist/controls/SettingsMenu.d.ts.map +1 -1
  47. package/dist/drm/NativeEme.d.ts +23 -0
  48. package/dist/drm/NativeEme.d.ts.map +1 -0
  49. package/dist/drm/keySystems.d.ts +18 -0
  50. package/dist/drm/keySystems.d.ts.map +1 -0
  51. package/dist/hls/SourceManager.d.ts +31 -5
  52. package/dist/hls/SourceManager.d.ts.map +1 -1
  53. package/dist/hls/dashEngine.d.ts +85 -0
  54. package/dist/hls/dashEngine.d.ts.map +1 -0
  55. package/dist/hls/sourceGroups.d.ts.map +1 -1
  56. package/dist/hope-player.js +6 -3
  57. package/dist/i18n/locales/en.d.ts.map +1 -1
  58. package/dist/i18n/locales/tr.d.ts.map +1 -1
  59. package/dist/i18n/types.d.ts +3 -0
  60. package/dist/i18n/types.d.ts.map +1 -1
  61. package/dist/index.d.ts +4 -1
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/keyboard/KeyboardController.d.ts +14 -0
  64. package/dist/keyboard/KeyboardController.d.ts.map +1 -1
  65. package/dist/plugin-api/PluginAds.d.ts +61 -0
  66. package/dist/plugin-api/PluginAds.d.ts.map +1 -0
  67. package/dist/plugin-api/PluginHost.d.ts +71 -0
  68. package/dist/plugin-api/PluginHost.d.ts.map +1 -0
  69. package/dist/plugin-api/registry.d.ts +10 -0
  70. package/dist/plugin-api/registry.d.ts.map +1 -0
  71. package/dist/plugin-api/types.d.ts +209 -0
  72. package/dist/plugin-api/types.d.ts.map +1 -0
  73. package/dist/plugins/accessibility/Accessibility.d.ts +5 -0
  74. package/dist/plugins/accessibility/Accessibility.d.ts.map +1 -1
  75. package/dist/plugins/ads/AdsController.d.ts +2 -0
  76. package/dist/plugins/ads/AdsController.d.ts.map +1 -1
  77. package/dist/plugins/analytics/QoeTracker.d.ts +71 -0
  78. package/dist/plugins/analytics/QoeTracker.d.ts.map +1 -0
  79. package/dist/plugins/analytics/index.d.ts +6 -0
  80. package/dist/plugins/analytics/index.d.ts.map +1 -0
  81. package/dist/plugins/playlist/PlaylistRunner.d.ts +2 -0
  82. package/dist/plugins/playlist/PlaylistRunner.d.ts.map +1 -1
  83. package/dist/plugins/skip-segments/index.d.ts +2 -0
  84. package/dist/plugins/skip-segments/index.d.ts.map +1 -1
  85. package/dist/plugins/sprite-thumbnails/SpriteThumbnails.d.ts +8 -0
  86. package/dist/plugins/sprite-thumbnails/SpriteThumbnails.d.ts.map +1 -1
  87. package/dist/screens/ErrorScreen.d.ts +1 -1
  88. package/dist/screens/ErrorScreen.d.ts.map +1 -1
  89. package/dist/types/index.d.ts +159 -4
  90. package/dist/types/index.d.ts.map +1 -1
  91. package/package.json +2 -1
  92. package/dist/chunks/accessibility-CehDBG3h.js.map +0 -1
  93. package/dist/chunks/ads-BFmyld9u.js.map +0 -1
  94. package/dist/chunks/player-BVkwkn4b.js.map +0 -1
  95. package/dist/chunks/playlist-jDbObKz3.js.map +0 -1
  96. package/dist/chunks/spriteThumbnails-DLfTFsPU.js.map +0 -1
  97. package/dist/chunks/statsPanel-DSClIwA3.js.map +0 -1
@@ -1,64 +1,93 @@
1
- var De = Object.defineProperty;
2
- var He = (n, t, e) => t in n ? De(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
- var s = (n, t, e) => He(n, typeof t != "symbol" ? t + "" : t, e);
4
- const Ge = '/*! 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\\: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-\\[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\\: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\\: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\\: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-airplay:before{content:""}.hp-icon-cast-connected:before{content:""}.hp-icon-cast:before{content:""}.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(:is(:fullscreen,:-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(:is(:fullscreen,:-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(:is(:fullscreen,:-webkit-full-screen)){background:#000;border-radius:0}:host(:is(:fullscreen,:-webkit-full-screen)) .hp-root{height:100%}:host(:is(:fullscreen,:-webkit-full-screen)) .video-area{aspect-ratio:auto;background:#000;border-radius:0;width:100%;height:100%}:host(:is(:fullscreen,:-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,[part=time-display]:focus-visible{outline:2px solid var(--hp-color-accent,#fff);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:linear-gradient(160deg,#2a1f2b,#0c0c10);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}@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}.hp-audio[data-meta] .hp-audio-area{top:44px}.hp-audio-deck{height:var(--hp-deck-h,0px);flex:none;align-items:center;display:flex;position:relative}.hp-audio[data-position=left] .hp-audio-deck{flex-direction:row-reverse}.hp-audio-sleeve{z-index:2;width:var(--hp-deck-h,0px);height:var(--hp-deck-h,0px);background:radial-gradient(70% 70% at 30% 25%,#e5484d,#0000 75%),#26262d;background:radial-gradient(70% 70% at 30% 25%,var(--hp-color-accent,#e5484d),transparent 75%),#26262d;border-radius:6px;flex:none;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;width:calc(var(--hp-deck-h,0px) * .96);height:calc(var(--hp-deck-h,0px) * .96);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;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-audio:not([data-laid-out]) .hp-vinyl{transition:none}.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 #ffffffb3;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}}.hp-audio[data-short][data-meta] .hp-audio-meta{display:none}.hp-audio[data-short][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}:host([data-audio-compact]) .video-area{aspect-ratio:auto;height:var(--hp-audio-bar-height,84px);overflow:visible}:host([data-audio-compact]) .hp-audio{border-radius:var(--hp-radius);background:linear-gradient(120deg,#24242c,#141418);background:linear-gradient(120deg,var(--hp-color-accent,#e5484d),transparent 60%),var(--hp-color-surface,#141418)}@supports (color:color-mix(in lab,red,red)){:host([data-audio-compact]) .hp-audio{background:linear-gradient(120deg,color-mix(in srgb,var(--hp-color-accent,#e5484d) 16%,transparent),transparent 60%),var(--hp-color-surface,#141418)}}:host([data-audio-compact]) .hp-audio>*,:host([data-audio-compact]) .hp-audio:after,:host([data-audio-compact]) .hp-caption-layer,:host([data-audio-compact]) .hp-loading-spinner,:host([data-audio-compact]) .hp-chrome:before,:host([data-audio-compact]) .hp-chrome:after{display:none}.hp-bar-meta{min-width:0;color:var(--hp-color-on-surface,#fff);pointer-events:none;align-items:center;gap:10px;padding:0 6px;display:flex}.hp-bar-meta[data-empty] .hp-bar-text{display:none}.hp-bar-text{flex-direction:column;min-width:0;line-height:1.25;display:flex}.hp-bar-title{white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:700;overflow:hidden}.hp-bar-sub{opacity:.72;white-space:nowrap;text-overflow:ellipsis;font-size:11.5px;overflow:hidden}.hp-bar-sub:empty{display:none}.hp-bar-eq{flex:none;align-items:flex-end;gap:2px;width:14px;height:14px;display:inline-flex}.hp-bar-eq i{background:var(--hp-color-accent,#fff);border-radius:1px;flex:1;height:30%;transition:height .2s}.hp-bar-meta[data-playing] .hp-bar-eq i{animation:.9s ease-in-out infinite alternate hp-bar-eq}.hp-bar-meta[data-playing] .hp-bar-eq i:nth-child(2){animation-duration:.7s;animation-delay:-.3s}.hp-bar-meta[data-playing] .hp-bar-eq i:nth-child(3){animation-duration:1.1s;animation-delay:-.6s}@keyframes hp-bar-eq{0%{height:25%}to{height:100%}}@media(prefers-reduced-motion:reduce){.hp-bar-meta[data-playing] .hp-bar-eq i{height:70%;animation:none}}.hp-lock{vertical-align:-2px;display:inline-block}.hp-rw-button{color:#fff;cursor:pointer;pointer-events:auto;-webkit-tap-highlight-color:transparent;background:#0c0c10b8;border:1px solid #ffffff38;border-radius:999px;align-items:center;gap:6px;padding:7px 12px;font:600 12.5px/1 system-ui,-apple-system,sans-serif;display:inline-flex;position:absolute;top:12px;left:12px;box-shadow:0 6px 18px -8px #000000b3}.hp-rw-button:hover{background:#0c0c10e0}.hp-rw-button[hidden]{display:none}.hp-rw-button .hp-lock{color:var(--hp-color-accent,#fff)}.hp-rw-dialog{z-index:45;color:#fff;text-align:center;background:#0000009e;justify-content:center;align-items:center;padding:12px;animation:.18s ease-out hp-rw-fade;display:flex;position:absolute;top:0;right:0;bottom:0;left:0}.hp-rw-card{background:#14141af5;border:1px solid #ffffff24;border-radius:14px;width:min(360px,100%);max-height:100%;padding:18px 18px 16px;overflow:auto;box-shadow:0 20px 50px -20px #000c}.hp-rw-icon{color:var(--hp-color-accent,#fff);background:#ffffff14;border-radius:50%;padding:9px;display:inline-flex}.hp-rw-icon .hp-lock{width:18px;height:18px}.hp-rw-title{margin-top:10px;font-size:15px;font-weight:700}.hp-rw-text{opacity:.82;margin-top:6px;font-size:13px;line-height:1.45}.hp-rw-actions{justify-content:center;gap:8px;margin-top:14px;display:flex}.hp-rw-actions:empty{display:none}.hp-rw-btn{color:#fff;cursor:pointer;background:0 0;border:1px solid #fff3;border-radius:999px;padding:8px 14px;font:600 13px/1 system-ui,-apple-system,sans-serif}.hp-rw-btn-primary{background:var(--hp-color-accent,#fff);color:var(--hp-color-on-accent,#0a0a0a);border-color:#0000}.hp-rw-spinner{border:2px solid #ffffff40;border-top-color:#fff;border-radius:50%;width:22px;height:22px;margin:4px auto 0;animation:.8s linear infinite hp-rw-spin}.hp-rw-toast{z-index:45;color:#fff;pointer-events:none;background:#0c0c10d9;border-radius:999px;padding:8px 14px;font:600 13px/1 system-ui,-apple-system,sans-serif;animation:.2s ease-out hp-rw-fade;position:absolute;top:12px;left:50%;transform:translate(-50%)}@keyframes hp-rw-fade{0%{opacity:0}}@keyframes hp-rw-spin{to{transform:rotate(360deg)}}.hp-settings-panel [data-locked],.hp-chip-panel [data-locked]{opacity:.85}.hp-sponsor-logo{z-index:21;width:var(--hp-sponsor-logo-w,96px);color:#fff;filter:drop-shadow(0 2px 6px #0000008c);flex-direction:column;align-items:center;gap:4px;text-decoration:none;transition:opacity .25s,right .35s cubic-bezier(.2,.8,.2,1),bottom .35s cubic-bezier(.2,.8,.2,1);animation:.4s ease-out hp-rw-fade;display:flex;position:absolute}.hp-sponsor-logo[data-position=top-left]{top:12px;left:12px}.hp-sponsor-logo[data-position=top-right]{top:12px;right:var(--hp-sponsor-avoid-right,12px)}.hp-sponsor-logo[data-position=bottom-left]{bottom:var(--hp-sponsor-avoid-bottom,76px);left:12px}.hp-sponsor-logo[data-position=bottom-right]{bottom:var(--hp-sponsor-avoid-bottom,76px);right:12px}.video-area[data-chrome-hidden] .hp-sponsor-logo[data-position=top-right]{right:12px}.video-area[data-chrome-hidden] .hp-sponsor-logo[data-position=bottom-left],.video-area[data-chrome-hidden] .hp-sponsor-logo[data-position=bottom-right]{bottom:12px}.hp-sponsor-logo img{width:100%;height:auto;display:block}.hp-sponsor-label{text-align:center;white-space:nowrap;text-overflow:ellipsis;letter-spacing:.08em;text-transform:uppercase;opacity:.85;max-width:100%;font:600 10px/1 system-ui,-apple-system,sans-serif;overflow:hidden}.video-area:has(.hp-rw-button:not([hidden])) .hp-sponsor-logo[data-position=top-left]{top:52px}.hp-sponsor-intro{z-index:22;color:#fff;pointer-events:none;background:#0c0c10d1;border-radius:999px;align-items:center;gap:10px;max-width:calc(100% - 32px);padding:8px 16px 8px 8px;font:600 14px/1.2 system-ui,-apple-system,sans-serif;transition:opacity .35s,transform .35s;animation:.45s cubic-bezier(.2,.8,.2,1) hp-sponsor-in;display:flex;position:absolute;bottom:84px;left:50%;transform:translate(-50%);box-shadow:0 12px 30px -12px #000c}.hp-sponsor-intro[data-leaving]{opacity:0;transform:translate(-50%,8px)}.hp-sponsor-intro img{border-radius:6px;width:auto;max-width:96px;height:28px}.hp-sponsor-intro span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}@keyframes hp-sponsor-in{0%{opacity:0;transform:translate(-50%,12px)scale(.96)}}:host([data-sponsor-hidden]) .hp-sponsor-logo,:host([data-sponsor-hidden]) .hp-sponsor-intro{display:none}.hp-adtrigger{z-index:26;box-sizing:border-box;pointer-events:none;justify-content:center;align-items:center;padding:12px;display:none;position:absolute;top:0;right:0;bottom:0;left:0}.hp-adtrigger[data-open]{animation:.3s ease-out hp-adtrigger-in;display:flex}.hp-adtrigger[data-backdrop]{pointer-events:auto;background:#0000009e}.hp-adtrigger[data-layout=full]{padding:0}.hp-adtrigger[data-layout=none]{justify-content:flex-start;align-items:flex-start;padding:0}.hp-adtrigger[data-layout=none] .hp-adtrigger-frame{position:static}.hp-adtrigger[data-layout=top]{align-items:flex-start}.hp-adtrigger[data-layout=bottom]{align-items:flex-end;padding-bottom:72px}.hp-adtrigger[data-layout=top-left]{justify-content:flex-start;align-items:flex-start}.hp-adtrigger[data-layout=top-right]{justify-content:flex-end;align-items:flex-start}.hp-adtrigger[data-layout=bottom-left]{justify-content:flex-start;align-items:flex-end;padding-bottom:72px}.hp-adtrigger[data-layout=bottom-right]{justify-content:flex-end;align-items:flex-end;padding-bottom:72px}.hp-adtrigger-frame{pointer-events:auto;max-width:100%;max-height:100%;position:relative}.hp-adtrigger[data-layout=full] .hp-adtrigger-frame{width:100%;height:100%}.hp-adtrigger-frame[data-sized]{width:min(var(--hp-adtrigger-w),100%);height:min(var(--hp-adtrigger-h),100%)}.hp-adtrigger[data-layout=full] ::slotted(*),.hp-adtrigger-frame[data-sized] ::slotted(*){width:100%;height:100%;display:block}.hp-adtrigger-label{z-index:1;color:#fff;letter-spacing:.08em;text-transform:uppercase;pointer-events:none;background:#000000a8;border-radius:4px;padding:3px 7px;font:600 10px/1 system-ui,-apple-system,sans-serif;position:absolute;top:8px;left:8px}.hp-adtrigger-close{z-index:2;color:#fff;cursor:pointer;background:#000000b8;border:0;border-radius:999px;place-items:center;width:30px;height:30px;padding:0;display:grid;position:absolute;top:6px;right:6px}.hp-adtrigger-close[hidden]{display:none}.hp-adtrigger-close:focus-visible{outline:2px solid var(--hp-color-accent,#fff);outline-offset:2px}.hp-cast-overlay{z-index:12;color:#fff;text-align:center;pointer-events:none;background:radial-gradient(#14141adb,#060609f5);flex-direction:column;justify-content:center;align-items:center;gap:10px;padding:16px;font:600 15px/1.3 system-ui,-apple-system,sans-serif;display:none;position:absolute;top:0;right:0;bottom:0;left:0}.hp-cast-overlay[data-open]{display:flex}.hp-cast-overlay .hp-icon{color:var(--hp-color-accent,#fff);font-size:44px}.hp-cast-overlay-ad{background:#ffffff24;border-radius:999px;padding:4px 10px;font-size:12px;font-weight:600;display:none}.hp-cast-overlay[data-break] .hp-cast-overlay-ad{display:inline-block}.video-area[data-casting] video{visibility:hidden}[part=cast-button][data-connecting] .hp-icon{animation:1s ease-in-out infinite hp-cast-pulse}@keyframes hp-cast-pulse{50%{opacity:.35}}@keyframes hp-adtrigger-in{0%{opacity:0}}@media(prefers-reduced-motion:reduce){.hp-sponsor-intro,.hp-rw-dialog,.hp-rw-toast{animation:none}}@media(hover:none)and (pointer:coarse){.video-area:has(.hp-unmute-badge[data-visible]) .hp-rw-button,.video-area:has(.hp-unmute-badge[data-visible]) .hp-sponsor-logo[data-position=top-left]{top:52px}.video-area:has(.hp-unmute-badge[data-visible]):has(.hp-rw-button:not([hidden])) .hp-sponsor-logo[data-position=top-left]{top:92px}}.video-area[data-compact] .hp-rw-icon{display:none}.video-area[data-compact] .hp-rw-card{padding:12px 14px}.video-area[data-compact] .hp-rw-title{margin-top:0;font-size:14px}.video-area[data-compact] .hp-rw-text{font-size:12px;line-height:1.4}.video-area[data-compact] .hp-rw-actions{margin-top:10px}.hp-sponsor-logo[data-compact]{width:min(var(--hp-sponsor-logo-w,96px),48px);gap:2px}.hp-sponsor-logo[data-compact] .hp-sponsor-label{font-size:8.5px}:host([data-sponsor-intro]) .hp-sponsor-logo{pointer-events:none;opacity:0!important}.hp-redirect-thumb{aspect-ratio:16/9;background:#111;border-radius:8px;flex:none;display:block;position:relative;overflow:hidden}.hp-redirect-thumb img{object-fit:cover;width:100%;height:100%;transition:transform .3s;position:absolute;top:0;right:0;bottom:0;left:0}.hp-redirect-ring{filter:drop-shadow(0 2px 6px #0009);width:44px;height:44px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)rotate(-90deg)}.hp-redirect-ring-track{fill:#00000073;stroke:#ffffff47;stroke-width:3px}.hp-redirect-ring-bar{fill:none;stroke:var(--hp-color-accent,#fff);stroke-width:3px;stroke-linecap:round;transition:stroke-dashoffset .3s linear}.hp-redirect-play{color:#fff;font-size:18px;line-height:1;position:absolute;top:50%;left:50%;transform:translate(-45%,-50%)}.hp-redirect-duration{color:#fff;background:#000000c7;border-radius:4px;padding:1px 5px;font:600 10px/1.4 system-ui,-apple-system,sans-serif;position:absolute;bottom:5px;right:5px}.hp-redirect-label{color:var(--hp-color-accent,#fff);letter-spacing:.1em;text-transform:uppercase;font:700 10px/1.2 system-ui,-apple-system,sans-serif}.hp-redirect-title{-webkit-line-clamp:2;-webkit-box-orient:vertical;font:600 13px/1.3 system-ui,-apple-system,sans-serif;display:-webkit-box;overflow:hidden}.hp-redirect-sub{white-space:nowrap;text-overflow:ellipsis;opacity:.7;font:500 11px/1.3 system-ui,-apple-system,sans-serif;overflow:hidden}.hp-redirect-card{z-index:24;color:#fff;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#0e0e12e6;border-radius:12px;align-items:stretch;width:min(340px,100% - 24px);transition:bottom .25s,top .25s;animation:.35s cubic-bezier(.2,.8,.2,1) hp-redirect-in;display:flex;position:absolute;box-shadow:0 16px 36px -14px #000000d9}.hp-redirect-card[data-position=bottom-right]{bottom:76px;right:12px}.hp-redirect-card[data-position=bottom-left]{bottom:76px;left:12px}.hp-redirect-card[data-position=top-right]{top:12px;right:12px}.hp-redirect-card[data-position=top-left]{top:12px;left:12px}.video-area[data-chrome-hidden] .hp-redirect-card[data-position^=bottom]{bottom:12px}.hp-redirect-card-main{min-width:0;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;flex:1;align-items:center;gap:10px;padding:8px;display:flex}.hp-redirect-card-main .hp-redirect-thumb{width:42%}.hp-redirect-card-main:hover .hp-redirect-thumb img{transform:scale(1.04)}.hp-redirect-text{flex-direction:column;gap:3px;min-width:0;padding-right:22px;display:flex}.hp-redirect-close{color:#fff;cursor:pointer;background:#ffffff1f;border:0;border-radius:999px;place-items:center;width:24px;height:24px;padding:0;font-size:13px;display:grid;position:absolute;top:6px;right:6px}.hp-redirect-close:hover{background:#ffffff3d}.hp-redirect-card-main:focus-visible,.hp-redirect-close:focus-visible,.hp-redirect-poster:focus-visible,.hp-redirect-btn:focus-visible{outline:2px solid var(--hp-color-accent,#fff);outline-offset:2px}.video-area[data-compact] .hp-redirect-card{width:min(260px,100% - 16px)}.video-area[data-compact] .hp-redirect-card[data-position^=bottom]{bottom:56px}.video-area[data-compact][data-chrome-hidden] .hp-redirect-card[data-position^=bottom]{bottom:8px}.video-area[data-compact] .hp-redirect-card .hp-redirect-sub{display:none}.video-area[data-compact] .hp-redirect-card .hp-redirect-ring{width:34px;height:34px}.hp-redirect-screen{z-index:30;color:#fff;text-align:center;background:#060609e6;justify-content:center;align-items:center;padding:16px;animation:.3s ease-out hp-redirect-fade;display:flex;position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.hp-redirect-bg{object-fit:cover;opacity:.35;filter:blur(18px)saturate(1.2);width:calc(100% + 40px);height:calc(100% + 40px);position:absolute;top:-20px;right:-20px;bottom:-20px;left:-20px}.hp-redirect-panel{flex-direction:column;align-items:center;gap:8px;width:min(420px,100%);display:flex;position:relative}.hp-redirect-poster{cursor:pointer;background:0 0;border:0;border-radius:10px;width:min(320px,70%);padding:0;box-shadow:0 18px 40px -16px #000000e6}.hp-redirect-poster .hp-redirect-thumb{border-radius:10px;width:100%}.hp-redirect-poster .hp-redirect-ring{width:64px;height:64px}.hp-redirect-poster .hp-redirect-play{font-size:24px}.hp-redirect-screen .hp-redirect-title{font-size:16px}.hp-redirect-counter{opacity:.75;font:500 12px/1.4 system-ui,-apple-system,sans-serif}.hp-redirect-actions{gap:8px;margin-top:4px;display:flex}.hp-redirect-btn{color:#fff;cursor:pointer;background:#ffffff24;border:0;border-radius:999px;padding:7px 16px;font:600 13px/1 system-ui,-apple-system,sans-serif}.hp-redirect-btn:hover{background:#ffffff3d}.hp-redirect-btn-primary,.hp-redirect-btn-primary:hover{background:var(--hp-color-accent,#fff);color:var(--hp-color-on-accent,#000)}.video-area[data-compact] .hp-redirect-poster{width:min(200px,55%)}.video-area[data-compact] .hp-redirect-screen .hp-redirect-sub,.video-area[data-compact] .hp-redirect-counter{display:none}.hp-redirect-suggestions{z-index:30;background:#060609eb;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));align-content:center;gap:12px;padding:16px;display:grid;position:absolute;top:0;right:0;bottom:0;left:0;overflow-y:auto}.hp-redirect-suggestion{color:#fff;flex-direction:column;gap:6px;text-decoration:none;display:flex}.hp-redirect-suggestion .hp-redirect-play{opacity:0;font-size:22px;transition:opacity .2s}.hp-redirect-suggestion:hover .hp-redirect-play,.hp-redirect-suggestion:focus-visible .hp-redirect-play{opacity:1}.hp-redirect-suggestion:hover .hp-redirect-thumb,.hp-redirect-suggestion:focus-visible .hp-redirect-thumb{outline:2px solid var(--hp-color-accent,#fff)}@keyframes hp-redirect-in{0%{opacity:0;transform:translateY(10px)scale(.97)}}@keyframes hp-redirect-fade{0%{opacity:0}}@media(prefers-reduced-motion:reduce){.hp-redirect-card,.hp-redirect-screen{animation:none}}.hp-skip-segment{z-index:23;color:#fff;letter-spacing:.01em;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0e0e12b8;border:1px solid #ffffff8c;border-radius:8px;align-items:center;gap:8px;padding:10px 16px;font:600 14px/1.2 system-ui,-apple-system,sans-serif;transition:opacity .25s,bottom .25s,background-color .15s;animation:.3s cubic-bezier(.2,.8,.2,1) hp-redirect-in;display:inline-flex;position:absolute;overflow:hidden;box-shadow:0 10px 28px -12px #000c}.hp-skip-segment:hover{color:#111;background:#ffffffeb}.hp-skip-segment:focus-visible{outline:2px solid var(--hp-color-accent,#fff);outline-offset:2px}.hp-skip-segment>*{position:relative}.hp-skip-segment-icon{font-size:16px}.hp-skip-segment[data-auto]:before{content:"";transform-origin:0;transform:scaleX(var(--hp-skip-progress,0));background:#ffffff38;transition:transform .25s linear;position:absolute;top:0;right:0;bottom:0;left:0}.hp-skip-segment[data-position=bottom-right]{bottom:76px;right:16px}.hp-skip-segment[data-position=bottom-left]{bottom:76px;left:16px}.hp-skip-segment[data-position=top-right]{top:16px;right:16px}.hp-skip-segment[data-position=top-left]{top:16px;left:16px}.video-area[data-chrome-hidden] .hp-skip-segment[data-position^=bottom]{bottom:16px}.video-area[data-chrome-hidden] .hp-skip-segment[data-faded]{opacity:0;pointer-events:none}.video-area[data-compact] .hp-skip-segment{padding:7px 12px;font-size:12px}.video-area[data-compact] .hp-skip-segment[data-position^=bottom]{bottom:56px}.video-area[data-compact][data-chrome-hidden] .hp-skip-segment[data-position^=bottom]{bottom:10px}@media(prefers-reduced-motion:reduce){.hp-skip-segment{animation:none}}.hp-quality-badge{background:var(--hp-quality-badge-bg,var(--hp-color-accent,#fff));color:var(--hp-quality-badge-color,var(--hp-color-on-accent,#0a0a0a));letter-spacing:.02em;pointer-events:none;border-radius:3px;padding:0 2px;font:800 8px/1.3 system-ui,-apple-system,sans-serif;position:absolute;top:1px;right:-5px;box-shadow:0 1px 3px #00000073}.hp-quality-badge[hidden]{display:none}.video-area[data-compact] .hp-quality-badge{font-size:7px;top:0}.hp-quality-badge[data-low]{color:#0a0a0a;background:#ffffffb3}.hp-chevron-forward{font-size:11px;display:inline-block;transform:rotate(180deg)}:host([data-large-controls]){--hp-ctrl-btn-size:48px;--hp-ctrl-icon-size:22px;--hp-seek-hit-h:30px;--hp-seek-track-h:8px;--hp-seek-track-h-hover:10px;--hp-seek-thumb-size:20px;--hp-caption-font-size:24px}:host([data-large-controls]) .video-area[data-compact]{--hp-caption-font-size:17px}:host([data-zoomed]) video{cursor:grab}:host([data-zoomed]) video:active{cursor:grabbing}.hp-shortcuts{z-index:40;background:#0000008c;place-items:center;padding:12px;animation:.2s hp-redirect-fade;display:grid;position:absolute;top:0;right:0;bottom:0;left:0}.hp-shortcuts-box{color:#fff;background:#0e0e12f0;border-radius:12px;width:min(420px,100%);max-height:100%;padding:14px 16px 16px;font:400 13px/1.4 system-ui,-apple-system,sans-serif;overflow-y:auto;box-shadow:0 18px 40px -14px #000000e6}.hp-shortcuts-head{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.hp-shortcuts-head h2{margin:0;font-size:15px;font-weight:700}.hp-shortcuts-close{color:#fff;cursor:pointer;background:#ffffff1f;border:0;border-radius:999px;place-items:center;width:30px;height:30px;padding:0;font-size:13px;display:grid}.hp-shortcuts-close:hover{background:#ffffff3d}.hp-shortcuts-close:focus-visible{outline:2px solid var(--hp-color-accent,#fff);outline-offset:2px}.hp-shortcuts-list{grid-template-columns:auto 1fr;align-items:center;gap:8px 14px;margin:0;display:grid}.hp-shortcuts-list dt{white-space:nowrap;flex-wrap:wrap;align-items:center;gap:4px;margin:0;display:flex}.hp-shortcuts-list dd{color:#ffffffd1;margin:0}.hp-shortcuts-list kbd{text-align:center;background:#ffffff14;border:1px solid #ffffff47;border-bottom-width:2px;border-radius:5px;min-width:22px;padding:2px 6px;font:600 11.5px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace}.video-area[data-compact] .hp-shortcuts-box{padding:10px 12px 12px;font-size:12px}@media(prefers-reduced-motion:reduce){.hp-shortcuts{animation:none}}.hp-history-notice{z-index:23;color:#fff;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0e0e12d1;border-radius:999px;align-items:center;gap:12px;max-width:calc(100% - 32px);padding:8px 8px 8px 14px;font:500 13px/1.3 system-ui,-apple-system,sans-serif;transition:bottom .25s;animation:.3s cubic-bezier(.2,.8,.2,1) hp-redirect-in;display:inline-flex;position:absolute;bottom:76px;left:16px;box-shadow:0 10px 28px -12px #000c}.video-area[data-chrome-hidden] .hp-history-notice{bottom:16px}.hp-history-restart{background:var(--hp-color-accent,#fff);color:var(--hp-color-on-accent,#0a0a0a);cursor:pointer;border:0;border-radius:999px;flex-shrink:0;padding:6px 12px;font:600 12.5px/1.2 system-ui,-apple-system,sans-serif}.hp-history-restart:focus-visible{outline:2px solid var(--hp-color-accent,#fff);outline-offset:2px}.video-area[data-compact] .hp-history-notice{gap:8px;padding:6px 6px 6px 10px;font-size:11.5px;bottom:56px;left:8px}.video-area[data-compact][data-chrome-hidden] .hp-history-notice{bottom:10px}@media(prefers-reduced-motion:reduce){.hp-history-notice{animation:none}}@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 ee(n) {
1
+ var Ke = Object.defineProperty;
2
+ var je = (n, t, e) => t in n ? Ke(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
+ var o = (n, t, e) => je(n, typeof t != "symbol" ? t + "" : t, e);
4
+ const $e = '/*! 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\\: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-\\[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\\: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\\: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\\: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-airplay:before{content:""}.hp-icon-cast-connected:before{content:""}.hp-icon-cast:before{content:""}.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(:is(:fullscreen,:-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(:is(:fullscreen,:-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(:is(:fullscreen,:-webkit-full-screen)){background:#000;border-radius:0}:host(:is(:fullscreen,:-webkit-full-screen)) .hp-root{height:100%}:host(:is(:fullscreen,:-webkit-full-screen)) .video-area{aspect-ratio:auto;background:#000;border-radius:0;width:100%;height:100%}:host(:is(:fullscreen,:-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,[part=time-display]:focus-visible{outline:2px solid var(--hp-color-accent,#fff);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:linear-gradient(160deg,#2a1f2b,#0c0c10);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}@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}.hp-audio[data-meta] .hp-audio-area{top:44px}.hp-audio-deck{height:var(--hp-deck-h,0px);flex:none;align-items:center;display:flex;position:relative}.hp-audio[data-position=left] .hp-audio-deck{flex-direction:row-reverse}.hp-audio-sleeve{z-index:2;width:var(--hp-deck-h,0px);height:var(--hp-deck-h,0px);background:radial-gradient(70% 70% at 30% 25%,#e5484d,#0000 75%),#26262d;background:radial-gradient(70% 70% at 30% 25%,var(--hp-color-accent,#e5484d),transparent 75%),#26262d;border-radius:6px;flex:none;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;width:calc(var(--hp-deck-h,0px) * .96);height:calc(var(--hp-deck-h,0px) * .96);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;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-audio:not([data-laid-out]) .hp-vinyl{transition:none}.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 #ffffffb3;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}}.hp-audio[data-short][data-meta] .hp-audio-meta{display:none}.hp-audio[data-short][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}:host([data-audio-compact]) .video-area{aspect-ratio:auto;height:var(--hp-audio-bar-height,84px);overflow:visible}:host([data-audio-compact]) .hp-audio{border-radius:var(--hp-radius);background:linear-gradient(120deg,#24242c,#141418);background:linear-gradient(120deg,var(--hp-color-accent,#e5484d),transparent 60%),var(--hp-color-surface,#141418)}@supports (color:color-mix(in lab,red,red)){:host([data-audio-compact]) .hp-audio{background:linear-gradient(120deg,color-mix(in srgb,var(--hp-color-accent,#e5484d) 16%,transparent),transparent 60%),var(--hp-color-surface,#141418)}}:host([data-audio-compact]) .hp-audio>*,:host([data-audio-compact]) .hp-audio:after,:host([data-audio-compact]) .hp-caption-layer,:host([data-audio-compact]) .hp-loading-spinner,:host([data-audio-compact]) .hp-chrome:before,:host([data-audio-compact]) .hp-chrome:after{display:none}.hp-bar-meta{min-width:0;color:var(--hp-color-on-surface,#fff);pointer-events:none;align-items:center;gap:10px;padding:0 6px;display:flex}.hp-bar-meta[data-empty] .hp-bar-text{display:none}.hp-bar-text{flex-direction:column;min-width:0;line-height:1.25;display:flex}.hp-bar-title{white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:700;overflow:hidden}.hp-bar-sub{opacity:.72;white-space:nowrap;text-overflow:ellipsis;font-size:11.5px;overflow:hidden}.hp-bar-sub:empty{display:none}.hp-bar-eq{flex:none;align-items:flex-end;gap:2px;width:14px;height:14px;display:inline-flex}.hp-bar-eq i{background:var(--hp-color-accent,#fff);border-radius:1px;flex:1;height:30%;transition:height .2s}.hp-bar-meta[data-playing] .hp-bar-eq i{animation:.9s ease-in-out infinite alternate hp-bar-eq}.hp-bar-meta[data-playing] .hp-bar-eq i:nth-child(2){animation-duration:.7s;animation-delay:-.3s}.hp-bar-meta[data-playing] .hp-bar-eq i:nth-child(3){animation-duration:1.1s;animation-delay:-.6s}@keyframes hp-bar-eq{0%{height:25%}to{height:100%}}@media(prefers-reduced-motion:reduce){.hp-bar-meta[data-playing] .hp-bar-eq i{height:70%;animation:none}}.hp-lock{vertical-align:-2px;display:inline-block}.hp-rw-button{color:#fff;cursor:pointer;pointer-events:auto;-webkit-tap-highlight-color:transparent;background:#0c0c10b8;border:1px solid #ffffff38;border-radius:999px;align-items:center;gap:6px;padding:7px 12px;font:600 12.5px/1 system-ui,-apple-system,sans-serif;display:inline-flex;position:absolute;top:12px;left:12px;box-shadow:0 6px 18px -8px #000000b3}.hp-rw-button:hover{background:#0c0c10e0}.hp-rw-button[hidden]{display:none}.hp-rw-button .hp-lock{color:var(--hp-color-accent,#fff)}.hp-rw-dialog{z-index:45;color:#fff;text-align:center;background:#0000009e;justify-content:center;align-items:center;padding:12px;animation:.18s ease-out hp-rw-fade;display:flex;position:absolute;top:0;right:0;bottom:0;left:0}.hp-rw-card{background:#14141af5;border:1px solid #ffffff24;border-radius:14px;width:min(360px,100%);max-height:100%;padding:18px 18px 16px;overflow:auto;box-shadow:0 20px 50px -20px #000c}.hp-rw-icon{color:var(--hp-color-accent,#fff);background:#ffffff14;border-radius:50%;padding:9px;display:inline-flex}.hp-rw-icon .hp-lock{width:18px;height:18px}.hp-rw-title{margin-top:10px;font-size:15px;font-weight:700}.hp-rw-text{opacity:.82;margin-top:6px;font-size:13px;line-height:1.45}.hp-rw-actions{justify-content:center;gap:8px;margin-top:14px;display:flex}.hp-rw-actions:empty{display:none}.hp-rw-btn{color:#fff;cursor:pointer;background:0 0;border:1px solid #fff3;border-radius:999px;padding:8px 14px;font:600 13px/1 system-ui,-apple-system,sans-serif}.hp-rw-btn-primary{background:var(--hp-color-accent,#fff);color:var(--hp-color-on-accent,#0a0a0a);border-color:#0000}.hp-rw-spinner{border:2px solid #ffffff40;border-top-color:#fff;border-radius:50%;width:22px;height:22px;margin:4px auto 0;animation:.8s linear infinite hp-rw-spin}.hp-rw-toast{z-index:45;color:#fff;pointer-events:none;background:#0c0c10d9;border-radius:999px;padding:8px 14px;font:600 13px/1 system-ui,-apple-system,sans-serif;animation:.2s ease-out hp-rw-fade;position:absolute;top:12px;left:50%;transform:translate(-50%)}@keyframes hp-rw-fade{0%{opacity:0}}@keyframes hp-rw-spin{to{transform:rotate(360deg)}}.hp-settings-panel [data-locked],.hp-chip-panel [data-locked]{opacity:.85}.hp-sponsor-logo{z-index:21;width:var(--hp-sponsor-logo-w,96px);color:#fff;filter:drop-shadow(0 2px 6px #0000008c);flex-direction:column;align-items:center;gap:4px;text-decoration:none;transition:opacity .25s,right .35s cubic-bezier(.2,.8,.2,1),bottom .35s cubic-bezier(.2,.8,.2,1);animation:.4s ease-out hp-rw-fade;display:flex;position:absolute}.hp-sponsor-logo[data-position=top-left]{top:12px;left:12px}.hp-sponsor-logo[data-position=top-right]{top:12px;right:var(--hp-sponsor-avoid-right,12px)}.hp-sponsor-logo[data-position=bottom-left]{bottom:var(--hp-sponsor-avoid-bottom,76px);left:12px}.hp-sponsor-logo[data-position=bottom-right]{bottom:var(--hp-sponsor-avoid-bottom,76px);right:12px}.video-area[data-chrome-hidden] .hp-sponsor-logo[data-position=top-right]{right:12px}.video-area[data-chrome-hidden] .hp-sponsor-logo[data-position=bottom-left],.video-area[data-chrome-hidden] .hp-sponsor-logo[data-position=bottom-right]{bottom:12px}.hp-sponsor-logo img{width:100%;height:auto;display:block}.hp-sponsor-label{text-align:center;white-space:nowrap;text-overflow:ellipsis;letter-spacing:.08em;text-transform:uppercase;opacity:.85;max-width:100%;font:600 10px/1 system-ui,-apple-system,sans-serif;overflow:hidden}.video-area:has(.hp-rw-button:not([hidden])) .hp-sponsor-logo[data-position=top-left]{top:52px}.hp-sponsor-intro{z-index:22;color:#fff;pointer-events:none;background:#0c0c10d1;border-radius:999px;align-items:center;gap:10px;max-width:calc(100% - 32px);padding:8px 16px 8px 8px;font:600 14px/1.2 system-ui,-apple-system,sans-serif;transition:opacity .35s,transform .35s;animation:.45s cubic-bezier(.2,.8,.2,1) hp-sponsor-in;display:flex;position:absolute;bottom:84px;left:50%;transform:translate(-50%);box-shadow:0 12px 30px -12px #000c}.hp-sponsor-intro[data-leaving]{opacity:0;transform:translate(-50%,8px)}.hp-sponsor-intro img{border-radius:6px;width:auto;max-width:96px;height:28px}.hp-sponsor-intro span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}@keyframes hp-sponsor-in{0%{opacity:0;transform:translate(-50%,12px)scale(.96)}}:host([data-sponsor-hidden]) .hp-sponsor-logo,:host([data-sponsor-hidden]) .hp-sponsor-intro{display:none}.hp-adtrigger{z-index:26;box-sizing:border-box;pointer-events:none;justify-content:center;align-items:center;padding:12px;display:none;position:absolute;top:0;right:0;bottom:0;left:0}.hp-adtrigger[data-open]{animation:.3s ease-out hp-adtrigger-in;display:flex}.hp-adtrigger[data-backdrop]{pointer-events:auto;background:#0000009e}.hp-adtrigger[data-layout=full]{padding:0}.hp-adtrigger[data-layout=none]{justify-content:flex-start;align-items:flex-start;padding:0}.hp-adtrigger[data-layout=none] .hp-adtrigger-frame{position:static}.hp-adtrigger[data-layout=top]{align-items:flex-start}.hp-adtrigger[data-layout=bottom]{align-items:flex-end;padding-bottom:72px}.hp-adtrigger[data-layout=top-left]{justify-content:flex-start;align-items:flex-start}.hp-adtrigger[data-layout=top-right]{justify-content:flex-end;align-items:flex-start}.hp-adtrigger[data-layout=bottom-left]{justify-content:flex-start;align-items:flex-end;padding-bottom:72px}.hp-adtrigger[data-layout=bottom-right]{justify-content:flex-end;align-items:flex-end;padding-bottom:72px}.hp-adtrigger-frame{pointer-events:auto;max-width:100%;max-height:100%;position:relative}.hp-adtrigger[data-layout=full] .hp-adtrigger-frame{width:100%;height:100%}.hp-adtrigger-frame[data-sized]{width:min(var(--hp-adtrigger-w),100%);height:min(var(--hp-adtrigger-h),100%)}.hp-adtrigger[data-layout=full] ::slotted(*),.hp-adtrigger-frame[data-sized] ::slotted(*){width:100%;height:100%;display:block}.hp-adtrigger-label{z-index:1;color:#fff;letter-spacing:.08em;text-transform:uppercase;pointer-events:none;background:#000000a8;border-radius:4px;padding:3px 7px;font:600 10px/1 system-ui,-apple-system,sans-serif;position:absolute;top:8px;left:8px}.hp-adtrigger-close{z-index:2;color:#fff;cursor:pointer;background:#000000b8;border:0;border-radius:999px;place-items:center;width:30px;height:30px;padding:0;display:grid;position:absolute;top:6px;right:6px}.hp-adtrigger-close[hidden]{display:none}.hp-adtrigger-close:focus-visible{outline:2px solid var(--hp-color-accent,#fff);outline-offset:2px}.hp-cast-overlay{z-index:12;color:#fff;text-align:center;pointer-events:none;background:radial-gradient(#14141adb,#060609f5);flex-direction:column;justify-content:center;align-items:center;gap:10px;padding:16px;font:600 15px/1.3 system-ui,-apple-system,sans-serif;display:none;position:absolute;top:0;right:0;bottom:0;left:0}.hp-cast-overlay[data-open]{display:flex}.hp-cast-overlay .hp-icon{color:var(--hp-color-accent,#fff);font-size:44px}.hp-cast-overlay-ad{background:#ffffff24;border-radius:999px;padding:4px 10px;font-size:12px;font-weight:600;display:none}.hp-cast-overlay[data-break] .hp-cast-overlay-ad{display:inline-block}.video-area[data-casting] video{visibility:hidden}[part=cast-button][data-connecting] .hp-icon{animation:1s ease-in-out infinite hp-cast-pulse}@keyframes hp-cast-pulse{50%{opacity:.35}}@keyframes hp-adtrigger-in{0%{opacity:0}}@media(prefers-reduced-motion:reduce){.hp-sponsor-intro,.hp-rw-dialog,.hp-rw-toast{animation:none}}@media(hover:none)and (pointer:coarse){.video-area:has(.hp-unmute-badge[data-visible]) .hp-rw-button,.video-area:has(.hp-unmute-badge[data-visible]) .hp-sponsor-logo[data-position=top-left]{top:52px}.video-area:has(.hp-unmute-badge[data-visible]):has(.hp-rw-button:not([hidden])) .hp-sponsor-logo[data-position=top-left]{top:92px}}.video-area[data-compact] .hp-rw-icon{display:none}.video-area[data-compact] .hp-rw-card{padding:12px 14px}.video-area[data-compact] .hp-rw-title{margin-top:0;font-size:14px}.video-area[data-compact] .hp-rw-text{font-size:12px;line-height:1.4}.video-area[data-compact] .hp-rw-actions{margin-top:10px}.hp-sponsor-logo[data-compact]{width:min(var(--hp-sponsor-logo-w,96px),48px);gap:2px}.hp-sponsor-logo[data-compact] .hp-sponsor-label{font-size:8.5px}:host([data-sponsor-intro]) .hp-sponsor-logo{pointer-events:none;opacity:0!important}.hp-redirect-thumb{aspect-ratio:16/9;background:#111;border-radius:8px;flex:none;display:block;position:relative;overflow:hidden}.hp-redirect-thumb img{object-fit:cover;width:100%;height:100%;transition:transform .3s;position:absolute;top:0;right:0;bottom:0;left:0}.hp-redirect-ring{filter:drop-shadow(0 2px 6px #0009);width:44px;height:44px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)rotate(-90deg)}.hp-redirect-ring-track{fill:#00000073;stroke:#ffffff47;stroke-width:3px}.hp-redirect-ring-bar{fill:none;stroke:var(--hp-color-accent,#fff);stroke-width:3px;stroke-linecap:round;transition:stroke-dashoffset .3s linear}.hp-redirect-play{color:#fff;font-size:18px;line-height:1;position:absolute;top:50%;left:50%;transform:translate(-45%,-50%)}.hp-redirect-duration{color:#fff;background:#000000c7;border-radius:4px;padding:1px 5px;font:600 10px/1.4 system-ui,-apple-system,sans-serif;position:absolute;bottom:5px;right:5px}.hp-redirect-label{color:var(--hp-color-accent,#fff);letter-spacing:.1em;text-transform:uppercase;font:700 10px/1.2 system-ui,-apple-system,sans-serif}.hp-redirect-title{-webkit-line-clamp:2;-webkit-box-orient:vertical;font:600 13px/1.3 system-ui,-apple-system,sans-serif;display:-webkit-box;overflow:hidden}.hp-redirect-sub{white-space:nowrap;text-overflow:ellipsis;opacity:.7;font:500 11px/1.3 system-ui,-apple-system,sans-serif;overflow:hidden}.hp-redirect-card{z-index:24;color:#fff;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#0e0e12e6;border-radius:12px;align-items:stretch;width:min(340px,100% - 24px);transition:bottom .25s,top .25s;animation:.35s cubic-bezier(.2,.8,.2,1) hp-redirect-in;display:flex;position:absolute;box-shadow:0 16px 36px -14px #000000d9}.hp-redirect-card[data-position=bottom-right]{bottom:76px;right:12px}.hp-redirect-card[data-position=bottom-left]{bottom:76px;left:12px}.hp-redirect-card[data-position=top-right]{top:12px;right:12px}.hp-redirect-card[data-position=top-left]{top:12px;left:12px}.video-area[data-chrome-hidden] .hp-redirect-card[data-position^=bottom]{bottom:12px}.hp-redirect-card-main{min-width:0;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;flex:1;align-items:center;gap:10px;padding:8px;display:flex}.hp-redirect-card-main .hp-redirect-thumb{width:42%}.hp-redirect-card-main:hover .hp-redirect-thumb img{transform:scale(1.04)}.hp-redirect-text{flex-direction:column;gap:3px;min-width:0;padding-right:22px;display:flex}.hp-redirect-close{color:#fff;cursor:pointer;background:#ffffff1f;border:0;border-radius:999px;place-items:center;width:24px;height:24px;padding:0;font-size:13px;display:grid;position:absolute;top:6px;right:6px}.hp-redirect-close:hover{background:#ffffff3d}.hp-redirect-card-main:focus-visible,.hp-redirect-close:focus-visible,.hp-redirect-poster:focus-visible,.hp-redirect-btn:focus-visible{outline:2px solid var(--hp-color-accent,#fff);outline-offset:2px}.video-area[data-compact] .hp-redirect-card{width:min(260px,100% - 16px)}.video-area[data-compact] .hp-redirect-card[data-position^=bottom]{bottom:56px}.video-area[data-compact][data-chrome-hidden] .hp-redirect-card[data-position^=bottom]{bottom:8px}.video-area[data-compact] .hp-redirect-card .hp-redirect-sub{display:none}.video-area[data-compact] .hp-redirect-card .hp-redirect-ring{width:34px;height:34px}.hp-redirect-screen{z-index:30;color:#fff;text-align:center;background:#060609e6;justify-content:center;align-items:center;padding:16px;animation:.3s ease-out hp-redirect-fade;display:flex;position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.hp-redirect-bg{object-fit:cover;opacity:.35;filter:blur(18px)saturate(1.2);width:calc(100% + 40px);height:calc(100% + 40px);position:absolute;top:-20px;right:-20px;bottom:-20px;left:-20px}.hp-redirect-panel{flex-direction:column;align-items:center;gap:8px;width:min(420px,100%);display:flex;position:relative}.hp-redirect-poster{cursor:pointer;background:0 0;border:0;border-radius:10px;width:min(320px,70%);padding:0;box-shadow:0 18px 40px -16px #000000e6}.hp-redirect-poster .hp-redirect-thumb{border-radius:10px;width:100%}.hp-redirect-poster .hp-redirect-ring{width:64px;height:64px}.hp-redirect-poster .hp-redirect-play{font-size:24px}.hp-redirect-screen .hp-redirect-title{font-size:16px}.hp-redirect-counter{opacity:.75;font:500 12px/1.4 system-ui,-apple-system,sans-serif}.hp-redirect-actions{gap:8px;margin-top:4px;display:flex}.hp-redirect-btn{color:#fff;cursor:pointer;background:#ffffff24;border:0;border-radius:999px;padding:7px 16px;font:600 13px/1 system-ui,-apple-system,sans-serif}.hp-redirect-btn:hover{background:#ffffff3d}.hp-redirect-btn-primary,.hp-redirect-btn-primary:hover{background:var(--hp-color-accent,#fff);color:var(--hp-color-on-accent,#000)}.video-area[data-compact] .hp-redirect-poster{width:min(200px,55%)}.video-area[data-compact] .hp-redirect-screen .hp-redirect-sub,.video-area[data-compact] .hp-redirect-counter{display:none}.hp-redirect-suggestions{z-index:30;background:#060609eb;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));align-content:center;gap:12px;padding:16px;display:grid;position:absolute;top:0;right:0;bottom:0;left:0;overflow-y:auto}.hp-redirect-suggestion{color:#fff;flex-direction:column;gap:6px;text-decoration:none;display:flex}.hp-redirect-suggestion .hp-redirect-play{opacity:0;font-size:22px;transition:opacity .2s}.hp-redirect-suggestion:hover .hp-redirect-play,.hp-redirect-suggestion:focus-visible .hp-redirect-play{opacity:1}.hp-redirect-suggestion:hover .hp-redirect-thumb,.hp-redirect-suggestion:focus-visible .hp-redirect-thumb{outline:2px solid var(--hp-color-accent,#fff)}@keyframes hp-redirect-in{0%{opacity:0;transform:translateY(10px)scale(.97)}}@keyframes hp-redirect-fade{0%{opacity:0}}@media(prefers-reduced-motion:reduce){.hp-redirect-card,.hp-redirect-screen{animation:none}}.hp-skip-segment{z-index:23;color:#fff;letter-spacing:.01em;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0e0e12b8;border:1px solid #ffffff8c;border-radius:8px;align-items:center;gap:8px;padding:10px 16px;font:600 14px/1.2 system-ui,-apple-system,sans-serif;transition:opacity .25s,bottom .25s,background-color .15s;animation:.3s cubic-bezier(.2,.8,.2,1) hp-redirect-in;display:inline-flex;position:absolute;overflow:hidden;box-shadow:0 10px 28px -12px #000c}.hp-skip-segment:hover{color:#111;background:#ffffffeb}.hp-skip-segment:focus-visible{outline:2px solid var(--hp-color-accent,#fff);outline-offset:2px}.hp-skip-segment>*{position:relative}.hp-skip-segment-icon{font-size:16px}.hp-skip-segment[data-auto]:before{content:"";transform-origin:0;transform:scaleX(var(--hp-skip-progress,0));background:#ffffff38;transition:transform .25s linear;position:absolute;top:0;right:0;bottom:0;left:0}.hp-skip-segment[data-position=bottom-right]{bottom:76px;right:16px}.hp-skip-segment[data-position=bottom-left]{bottom:76px;left:16px}.hp-skip-segment[data-position=top-right]{top:16px;right:16px}.hp-skip-segment[data-position=top-left]{top:16px;left:16px}.video-area[data-chrome-hidden] .hp-skip-segment[data-position^=bottom]{bottom:16px}.video-area[data-chrome-hidden] .hp-skip-segment[data-faded]{opacity:0;pointer-events:none}.video-area[data-compact] .hp-skip-segment{padding:7px 12px;font-size:12px}.video-area[data-compact] .hp-skip-segment[data-position^=bottom]{bottom:56px}.video-area[data-compact][data-chrome-hidden] .hp-skip-segment[data-position^=bottom]{bottom:10px}@media(prefers-reduced-motion:reduce){.hp-skip-segment{animation:none}}.hp-quality-badge{background:var(--hp-quality-badge-bg,var(--hp-color-accent,#fff));color:var(--hp-quality-badge-color,var(--hp-color-on-accent,#0a0a0a));letter-spacing:.02em;pointer-events:none;border-radius:3px;padding:0 2px;font:800 8px/1.3 system-ui,-apple-system,sans-serif;position:absolute;top:1px;right:-5px;box-shadow:0 1px 3px #00000073}.hp-quality-badge[hidden]{display:none}.video-area[data-compact] .hp-quality-badge{font-size:7px;top:0}.hp-quality-badge[data-low]{color:#0a0a0a;background:#ffffffb3}.hp-chevron-forward{font-size:11px;display:inline-block;transform:rotate(180deg)}:host([data-large-controls]){--hp-ctrl-btn-size:48px;--hp-ctrl-icon-size:22px;--hp-seek-hit-h:30px;--hp-seek-track-h:8px;--hp-seek-track-h-hover:10px;--hp-seek-thumb-size:20px;--hp-caption-font-size:24px}:host([data-large-controls]) .video-area[data-compact]{--hp-caption-font-size:17px}:host([data-zoomed]) video{cursor:grab}:host([data-zoomed]) video:active{cursor:grabbing}.hp-shortcuts{z-index:40;background:#0000008c;place-items:center;padding:12px;animation:.2s hp-redirect-fade;display:grid;position:absolute;top:0;right:0;bottom:0;left:0}.hp-shortcuts-box{color:#fff;background:#0e0e12f0;border-radius:12px;width:min(420px,100%);max-height:100%;padding:14px 16px 16px;font:400 13px/1.4 system-ui,-apple-system,sans-serif;overflow-y:auto;box-shadow:0 18px 40px -14px #000000e6}.hp-shortcuts-head{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.hp-shortcuts-head h2{margin:0;font-size:15px;font-weight:700}.hp-shortcuts-close{color:#fff;cursor:pointer;background:#ffffff1f;border:0;border-radius:999px;place-items:center;width:30px;height:30px;padding:0;font-size:13px;display:grid}.hp-shortcuts-close:hover{background:#ffffff3d}.hp-shortcuts-close:focus-visible{outline:2px solid var(--hp-color-accent,#fff);outline-offset:2px}.hp-shortcuts-list{grid-template-columns:auto 1fr;align-items:center;gap:8px 14px;margin:0;display:grid}.hp-shortcuts-list dt{white-space:nowrap;flex-wrap:wrap;align-items:center;gap:4px;margin:0;display:flex}.hp-shortcuts-list dd{color:#ffffffd1;margin:0}.hp-shortcuts-list kbd{text-align:center;background:#ffffff14;border:1px solid #ffffff47;border-bottom-width:2px;border-radius:5px;min-width:22px;padding:2px 6px;font:600 11.5px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace}.video-area[data-compact] .hp-shortcuts-box{padding:10px 12px 12px;font-size:12px}@media(prefers-reduced-motion:reduce){.hp-shortcuts{animation:none}}.hp-history-notice{z-index:23;color:#fff;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0e0e12d1;border-radius:999px;align-items:center;gap:12px;max-width:calc(100% - 32px);padding:8px 8px 8px 14px;font:500 13px/1.3 system-ui,-apple-system,sans-serif;transition:bottom .25s;animation:.3s cubic-bezier(.2,.8,.2,1) hp-redirect-in;display:inline-flex;position:absolute;bottom:76px;left:16px;box-shadow:0 10px 28px -12px #000c}.video-area[data-chrome-hidden] .hp-history-notice{bottom:16px}.hp-history-restart{background:var(--hp-color-accent,#fff);color:var(--hp-color-on-accent,#0a0a0a);cursor:pointer;border:0;border-radius:999px;flex-shrink:0;padding:6px 12px;font:600 12.5px/1.2 system-ui,-apple-system,sans-serif}.hp-history-restart:focus-visible{outline:2px solid var(--hp-color-accent,#fff);outline-offset:2px}.video-area[data-compact] .hp-history-notice{gap:8px;padding:6px 6px 6px 10px;font-size:11.5px;bottom:56px;left:8px}.video-area[data-compact][data-chrome-hidden] .hp-history-notice{bottom:10px}@media(prefers-reduced-motion:reduce){.hp-history-notice{animation:none}}.hp-plugin-layer{z-index:5;transition:opacity .2s;position:absolute}.hp-plugin-layer[data-above]{z-index:30}.hp-plugin-layer[hidden]{display:none}.hp-plugin-layer:not([data-interactive]){pointer-events:none}.hp-plugin-layer:not([data-interactive]) :is(button,a,input,select,textarea,[data-interactive]){pointer-events:auto}.hp-plugin-layer[data-position=fill]{top:0;right:0;bottom:0;left:0}.hp-plugin-layer[data-position=top]{top:12px;left:50%;transform:translate(-50%)}.hp-plugin-layer[data-position=bottom]{bottom:76px;left:50%;transform:translate(-50%)}.hp-plugin-layer[data-position=center]{top:50%;left:50%;transform:translate(-50%,-50%)}.hp-plugin-layer[data-position=top-left]{top:12px;left:12px}.hp-plugin-layer[data-position=top-right]{top:12px;right:12px}.hp-plugin-layer[data-position=bottom-left]{bottom:76px;left:12px}.hp-plugin-layer[data-position=bottom-right]{bottom:76px;right:12px}.video-area[data-chrome-hidden] .hp-plugin-layer:is([data-position=bottom],[data-position=bottom-left],[data-position=bottom-right]){bottom:12px}.video-area[data-compact] .hp-plugin-layer:is([data-position=bottom],[data-position=bottom-left],[data-position=bottom-right]){bottom:56px}.video-area[data-chrome-hidden] .hp-plugin-layer[data-autohide]{opacity:0;pointer-events:none}.video-area[data-chrome-hidden] .hp-plugin-layer[data-autohide] *{pointer-events:none}.hp-plugin-btn svg{width:var(--hp-ctrl-icon-size);height:var(--hp-ctrl-icon-size)}.hp-plugin-btn[aria-pressed=true]{color:var(--hp-color-accent,#fff);background:var(--hp-color-accent,#fff)}@supports (color:color-mix(in lab,red,red)){.hp-plugin-btn[aria-pressed=true]{background:color-mix(in srgb,var(--hp-color-accent,#fff) 18%,transparent)}}.hp-plugin-toast{z-index:35;color:#fff;opacity:0;pointer-events:none;background:#0e0e12d9;border-radius:999px;max-width:calc(100% - 32px);padding:8px 14px;font:500 13px/1.3 system-ui,-apple-system,sans-serif;transition:opacity .2s,transform .2s;position:absolute;top:16px;left:50%;transform:translate(-50%,-6px)}.hp-plugin-toast[data-visible]{opacity:1;transform:translate(-50%)}@media(prefers-reduced-motion:reduce){.hp-plugin-layer,.hp-plugin-toast{transition:none}}@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 ie(n) {
6
6
  return !!n && /MediaSinkAudio/i.test(n.message || "");
7
7
  }
8
- function qe(n) {
9
- return !!n.error && !ee(n.error);
8
+ function Qe(n) {
9
+ return !!n.error && !ie(n.error);
10
10
  }
11
- function ie() {
11
+ function ne() {
12
+ try {
13
+ return crypto.randomUUID();
14
+ } catch {
15
+ return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
16
+ }
17
+ }
18
+ function le() {
12
19
  if (typeof navigator > "u") return !1;
13
20
  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);
14
21
  return t || e;
15
22
  }
16
- function re() {
23
+ function j(n) {
24
+ return !!n && Object.values(n).some((t) => !!(t != null && t.licenseUrl));
25
+ }
26
+ function $() {
17
27
  const n = window;
18
28
  return typeof n.MediaSource < "u" || typeof n.ManagedMediaSource < "u";
19
29
  }
20
- function Se(n, t) {
30
+ function Re(n, t) {
21
31
  var i;
22
32
  const e = (i = t == null ? void 0 : t.split(";")[0]) == null ? void 0 : i.trim().toLowerCase();
23
- return e === "application/vnd.apple.mpegurl" || e === "application/x-mpegurl" || /\.m3u8(?:$|[?#])/i.test(n) ? "hls" : e === "video/mp4" || /\.mp4(?:$|[?#])/i.test(n) ? "mp4" : "unknown";
33
+ return e === "application/vnd.apple.mpegurl" || e === "application/x-mpegurl" || /\.m3u8(?:$|[?#])/i.test(n) ? "hls" : e === "application/dash+xml" || /\.mpd(?:$|[?#])/i.test(n) ? "dash" : e === "video/mp4" || /\.mp4(?:$|[?#])/i.test(n) ? "mp4" : "unknown";
24
34
  }
25
- class Ve {
35
+ class We {
26
36
  constructor(t, e) {
27
- s(this, "hls", null);
28
- s(this, "video");
37
+ o(this, "hls", null);
38
+ o(this, "video");
29
39
  /** Son yüklenen kaynak — `reload()` (hata ekranındaki "Tekrar dene") için. */
30
- s(this, "last", null);
40
+ o(this, "last", null);
31
41
  /** Native HLS denemesi sürerken (ilk loadedmetadata'ya kadar) — başarısız olursa hls.js'e geçilir. */
32
- s(this, "nativeHlsProbe", null);
33
- s(this, "engineInfo", { engine: "native" });
34
- s(this, "hlsOptions", {});
35
- s(this, "streamTextTracks", /* @__PURE__ */ new Map());
42
+ o(this, "nativeHlsProbe", null);
43
+ o(this, "engineInfo", { engine: "native" });
44
+ o(this, "hlsOptions", {});
45
+ o(this, "streamTextTracks", /* @__PURE__ */ new Map());
36
46
  /** Safari native HLS ses izi dinleyicilerini kaldırır. */
37
- s(this, "nativeAudioCleanup", null);
47
+ o(this, "nativeAudioCleanup", null);
48
+ o(this, "dash", null);
49
+ o(this, "dashOptions");
50
+ o(this, "drm");
51
+ o(this, "nativeEme", null);
52
+ o(this, "qualityLimit");
53
+ o(this, "cmcd", null);
54
+ /** Her `load()`'da yenilenir. */
55
+ o(this, "sid", ne());
38
56
  this.callbacks = e, this.video = t;
39
57
  }
40
58
  /** `options.hls` — sonraki `load()`'da uygulanır. */
41
- configure(t) {
42
- this.hlsOptions = t ?? {};
59
+ configure(t, e) {
60
+ this.hlsOptions = t ?? {}, this.cmcd = (e == null ? void 0 : e.cmcd) ?? null, this.qualityLimit = e == null ? void 0 : e.qualityLimit, this.dashOptions = e == null ? void 0 : e.dash, this.drm = e == null ? void 0 : e.drm;
43
61
  }
44
62
  /** Bu kaynak zaten yüklü ve hatasız mı — aynı kaynak için yeniden yükleme (başa sarma) gerekmez. */
45
63
  isLoaded(t, e) {
46
- return !!this.last && this.last.src === t && this.last.type === e && !qe(this.video) && this.video.readyState > 0;
64
+ return !!this.last && this.last.src === t && this.last.type === e && !Qe(this.video) && this.video.readyState > 0;
65
+ }
66
+ /** O anki oynatma oturumu (CMCD `sid`). */
67
+ get sessionId() {
68
+ return this.sid;
47
69
  }
48
70
  async load(t, e) {
49
- this.last = { src: t, type: e }, this.destroy(), this.video.pause();
50
- const i = Se(t, e);
51
- if (this.callbacks.onLevelsChanged([], -1), this.callbacks.onAudioTracksChanged([], -1), this.streamTextTracks.clear(), this.callbacks.onTextTracksFound([]), i !== "hls") {
52
- this.engineInfo = { engine: "native" }, this.video.src = t;
71
+ var a, l;
72
+ this.last = { src: t, type: e }, this.sid = ne(), this.destroy(), this.video.pause();
73
+ const i = Re(t, e);
74
+ if (this.callbacks.onLevelsChanged([], -1), this.callbacks.onAudioTracksChanged([], -1), this.streamTextTracks.clear(), this.callbacks.onTextTracksFound([]), i === "dash") {
75
+ await this.attachDash(t);
76
+ return;
77
+ }
78
+ if (i !== "hls") {
79
+ if (this.engineInfo = { engine: "native" }, await this.prepareNativeDrm(), ((a = this.last) == null ? void 0 : a.src) !== t) return;
80
+ this.video.src = t;
53
81
  return;
54
82
  }
55
- const r = this.hlsOptions.engine ?? "auto", o = this.video.canPlayType("application/vnd.apple.mpegurl") !== "";
56
- if (r === "native" && o) {
57
- this.loadNativeHls(t, "option");
83
+ const r = this.hlsOptions.engine ?? "auto", s = this.video.canPlayType("application/vnd.apple.mpegurl") !== "";
84
+ if (r === "native" && s) {
85
+ await this.prepareNativeDrm(), this.loadNativeHls(t, "option");
58
86
  return;
59
87
  }
60
- if (r !== "hls.js" && o && (ie() || !re())) {
61
- this.loadNativeHls(t, ie() ? "apple-native" : "no-mse");
88
+ if (r !== "hls.js" && s && (le() || !$())) {
89
+ if (await this.prepareNativeDrm(), ((l = this.last) == null ? void 0 : l.src) !== t) return;
90
+ this.loadNativeHls(t, le() ? "apple-native" : "no-mse");
62
91
  return;
63
92
  }
64
93
  await this.attachHlsJs(t);
@@ -71,6 +100,56 @@ class Ve {
71
100
  get hlsInstance() {
72
101
  return this.hls;
73
102
  }
103
+ /** Native oynatmada şifreli içerik için EME işleyicisi (kaynak atanmadan önce). */
104
+ async prepareNativeDrm() {
105
+ var e;
106
+ if (!j(this.drm)) return;
107
+ const { NativeEme: t } = await import("./NativeEme-CXosVcw8.js");
108
+ (e = this.nativeEme) == null || e.destroy(), this.nativeEme = new t(this.video, this.drm, {
109
+ onError: (i, r) => {
110
+ var s, a;
111
+ (a = (s = this.callbacks).onStreamError) == null || a.call(s, { type: "drm", details: i, fatal: !0, engine: "eme", reason: r }), this.callbacks.onFatalError("drm");
112
+ },
113
+ onLicense: (i) => {
114
+ this.engineInfo = { ...this.engineInfo, drm: i };
115
+ }
116
+ });
117
+ }
118
+ async attachDash(t) {
119
+ var i, r;
120
+ if (!$()) {
121
+ this.engineInfo = { engine: "dash.js" }, this.video.removeAttribute("src"), this.video.load(), this.callbacks.onFatalError("unsupported");
122
+ return;
123
+ }
124
+ const { DashEngine: e } = await import("./dash-CWjy-y7B.js");
125
+ ((i = this.last) == null ? void 0 : i.src) === t && (this.engineInfo = { engine: "dash.js" }, this.dash = new e(this.video, t, { dash: this.dashOptions, drm: this.drm, autoplay: this.video.autoplay, fitPlayer: !!((r = this.qualityLimit) != null && r.fitPlayer), cmcd: this.cmcd ? { ...this.cmcd, sessionId: this.sid } : null }, {
126
+ onLevels: (s, a) => this.callbacks.onLevelsChanged(s, a),
127
+ onAudioTracks: (s, a) => this.callbacks.onAudioTracksChanged(s, a),
128
+ onFatal: (s) => this.callbacks.onFatalError(s),
129
+ onError: (s) => {
130
+ var a, l;
131
+ return (l = (a = this.callbacks).onStreamError) == null ? void 0 : l.call(a, { type: "dash", details: `${s.code}: ${s.message}`, fatal: s.fatal, engine: "dash.js" });
132
+ },
133
+ onTextTracks: (s) => {
134
+ this.streamTextTracks.clear();
135
+ for (const a of s) this.streamTextTracks.set(a.id, a);
136
+ this.callbacks.onTextTracksFound([...this.streamTextTracks.values()]);
137
+ },
138
+ onCues: (s, a) => this.callbacks.onCues(s, a),
139
+ onDrm: (s) => {
140
+ this.engineInfo = { ...this.engineInfo, drm: s };
141
+ }
142
+ }));
143
+ }
144
+ /** O an oynayan kalite (ABR'de de gerçek seviye). */
145
+ currentLevel() {
146
+ if (this.dash) return this.dash.currentLevel();
147
+ if (this.hls) {
148
+ const t = this.hls.levels[this.hls.currentLevel];
149
+ return t ? { height: t.height, bitrate: t.bitrate } : null;
150
+ }
151
+ return this.video.videoHeight ? { height: this.video.videoHeight, bitrate: null } : null;
152
+ }
74
153
  loadNativeHls(t, e) {
75
154
  this.engineInfo = { engine: "native-hls", reason: e }, this.probeNativeHls(t), this.watchNativeAudioTracks(), this.video.src = t;
76
155
  }
@@ -83,11 +162,11 @@ class Ve {
83
162
  * İlk metadata'dan önce kod 4 gelirse ve MSE varsa hls.js'e geç.
84
163
  */
85
164
  probeNativeHls(t) {
86
- if (!re() || this.engineInfo.reason === "hlsjs-failed" || this.engineInfo.reason === "option") return;
165
+ if (!$() || this.engineInfo.reason === "hlsjs-failed" || this.engineInfo.reason === "option") return;
87
166
  const e = () => r(), i = () => {
88
167
  var a, l;
89
- const o = ((a = this.video.error) == null ? void 0 : a.code) === 4;
90
- r(), o && ((l = this.nativeAudioCleanup) == null || l.call(this), this.attachHlsJs(t));
168
+ const s = ((a = this.video.error) == null ? void 0 : a.code) === 4;
169
+ r(), s && ((l = this.nativeAudioCleanup) == null || l.call(this), this.attachHlsJs(t));
91
170
  }, r = () => {
92
171
  this.video.removeEventListener("loadedmetadata", e), this.video.removeEventListener("error", i), this.nativeHlsProbe = null;
93
172
  };
@@ -98,7 +177,7 @@ class Ve {
98
177
  const t = this.video.audioTracks;
99
178
  if (!t) return;
100
179
  const e = () => {
101
- const i = Array.from(t, (r, o) => ({ index: o, label: r.label || r.language || `${o + 1}`, lang: r.language }));
180
+ const i = Array.from(t, (r, s) => ({ index: s, label: r.label || r.language || `${s + 1}`, lang: r.language }));
102
181
  this.callbacks.onAudioTracksChanged(i, Array.from(t).findIndex((r) => r.enabled));
103
182
  };
104
183
  for (const i of ["addtrack", "removetrack", "change"]) t.addEventListener(i, e);
@@ -108,70 +187,84 @@ class Ve {
108
187
  };
109
188
  }
110
189
  async attachHlsJs(t) {
111
- var m;
112
- const e = this.hlsOptions.build === "light" ? "light" : "full", { default: i } = e === "light" ? await import("./hlsLight-CCe_8eOw.js") : await import("./hls-DAtZkTUi.js");
113
- if (((m = this.last) == null ? void 0 : m.src) !== t) return;
190
+ var f, b;
191
+ const e = this.hlsOptions.build === "light" && !j(this.drm) && !this.cmcd ? "light" : "full", { default: i } = e === "light" ? await import("./hlsLight-CCe_8eOw.js") : await import("./hls-DAtZkTUi.js");
192
+ if (((f = this.last) == null ? void 0 : f.src) !== t) return;
114
193
  if (!i.isSupported()) {
115
194
  this.engineInfo = { engine: "native-hls", reason: "no-mse" }, this.video.src = t;
116
195
  return;
117
196
  }
118
- const r = new i(this.buildHlsConfig());
119
- this.hls = r, this.engineInfo = { engine: "hls.js", build: e };
120
- let o = !1, a = !1;
121
- r.on(i.Events.ERROR, (d, p) => {
122
- var f, x, v, y, w, C;
123
- if (this.hls === r) {
124
- const E = p;
125
- (C = (w = this.callbacks).onStreamError) == null || C.call(w, {
126
- type: String(p.type),
127
- details: String(p.details),
128
- fatal: !!p.fatal,
129
- url: E.url ?? ((f = E.frag) == null ? void 0 : f.url) ?? ((x = E.context) == null ? void 0 : x.url),
130
- httpStatus: (v = E.response) == null ? void 0 : v.code,
131
- reason: E.reason ?? ((y = E.error) == null ? void 0 : y.message)
197
+ const r = j(this.drm) ? (await import("./keySystems-CNzjRq6e.js")).hlsDrmConfig(this.drm, this.hlsOptions.config ?? {}) : {};
198
+ if (((b = this.last) == null ? void 0 : b.src) !== t) return;
199
+ const s = new i(this.buildHlsConfig(r));
200
+ this.hls = s, this.engineInfo = { engine: "hls.js", build: e };
201
+ let a = !1, l = !1;
202
+ s.on(i.Events.ERROR, (m, d) => {
203
+ var g, v, w, S, T, A;
204
+ if (this.hls === s) {
205
+ const E = d;
206
+ (A = (T = this.callbacks).onStreamError) == null || A.call(T, {
207
+ engine: "hls.js",
208
+ type: String(d.type),
209
+ details: String(d.details),
210
+ fatal: !!d.fatal,
211
+ url: E.url ?? ((g = E.frag) == null ? void 0 : g.url) ?? ((v = E.context) == null ? void 0 : v.url),
212
+ httpStatus: (w = E.response) == null ? void 0 : w.code,
213
+ reason: E.reason ?? ((S = E.error) == null ? void 0 : S.message)
132
214
  });
133
215
  }
134
- if (!p.fatal || this.hls !== r) return;
135
- const g = [i.ErrorDetails.MANIFEST_LOAD_ERROR, i.ErrorDetails.MANIFEST_LOAD_TIMEOUT].includes(p.details);
136
- if (!o && g && this.video.canPlayType("application/vnd.apple.mpegurl") !== "") {
137
- r.destroy(), this.hls = null, this.loadNativeHls(t, "hlsjs-failed");
216
+ if (!d.fatal || this.hls !== s) return;
217
+ const k = [i.ErrorDetails.MANIFEST_LOAD_ERROR, i.ErrorDetails.MANIFEST_LOAD_TIMEOUT].includes(d.details);
218
+ if (!a && k && this.video.canPlayType("application/vnd.apple.mpegurl") !== "") {
219
+ s.destroy(), this.hls = null, this.loadNativeHls(t, "hlsjs-failed");
138
220
  return;
139
221
  }
140
- if (p.type === i.ErrorTypes.MEDIA_ERROR && !a) {
141
- a = !0, r.recoverMediaError();
222
+ if (d.type === i.ErrorTypes.MEDIA_ERROR && !l) {
223
+ l = !0, s.recoverMediaError();
142
224
  return;
143
225
  }
144
- r.stopLoad(), this.callbacks.onFatalError(p.type === i.ErrorTypes.NETWORK_ERROR ? "network" : "media");
145
- });
146
- const l = () => r.levels.map((d, p) => ({ index: p, height: d.height, bitrate: d.bitrate }));
147
- r.on(i.Events.MANIFEST_PARSED, () => {
148
- o = !0, this.callbacks.onLevelsChanged(l(), r.currentLevel);
149
- }), r.on(i.Events.LEVEL_SWITCHED, (d, p) => {
150
- this.callbacks.onLevelsChanged(l(), r.autoLevelEnabled ? -1 : p.level);
151
- });
152
- const h = () => r.audioTracks.map((d, p) => ({ index: p, label: d.name || d.lang || `${p + 1}`, lang: d.lang ?? "" }));
153
- r.on(i.Events.AUDIO_TRACKS_UPDATED, () => this.callbacks.onAudioTracksChanged(h(), r.audioTrack)), r.on(i.Events.AUDIO_TRACK_SWITCHED, (d, p) => this.callbacks.onAudioTracksChanged(h(), p.id)), r.on(i.Events.NON_NATIVE_TEXT_TRACKS_FOUND, (d, p) => {
154
- var g;
155
- for (const f of p.tracks) {
156
- const x = f.subtitleTrack, v = x ? `sub:${x.id}` : `cc:${f._id ?? f.label}`, y = f.kind === "captions" ? "captions" : "subtitles";
157
- this.streamTextTracks.set(v, { id: v, kind: y, label: f.label, lang: (x == null ? void 0 : x.lang) ?? ((g = f.closedCaptions) == null ? void 0 : g.lang) ?? "" });
226
+ s.stopLoad();
227
+ const x = d.type === i.ErrorTypes.KEY_SYSTEM_ERROR ? "drm" : d.type === i.ErrorTypes.NETWORK_ERROR ? "network" : "media";
228
+ this.callbacks.onFatalError(x);
229
+ });
230
+ const h = () => s.levels.map((m, d) => ({ index: d, height: m.height, bitrate: m.bitrate }));
231
+ s.on(i.Events.MANIFEST_PARSED, () => {
232
+ a = !0, this.callbacks.onLevelsChanged(h(), s.currentLevel);
233
+ }), s.on(i.Events.LEVEL_SWITCHED, (m, d) => {
234
+ this.callbacks.onLevelsChanged(h(), s.autoLevelEnabled ? -1 : d.level);
235
+ });
236
+ const c = () => s.audioTracks.map((m, d) => ({ index: d, label: m.name || m.lang || `${d + 1}`, lang: m.lang ?? "" }));
237
+ s.on(i.Events.AUDIO_TRACKS_UPDATED, () => this.callbacks.onAudioTracksChanged(c(), s.audioTrack)), s.on(i.Events.AUDIO_TRACK_SWITCHED, (m, d) => this.callbacks.onAudioTracksChanged(c(), d.id)), s.on(i.Events.NON_NATIVE_TEXT_TRACKS_FOUND, (m, d) => {
238
+ var k;
239
+ for (const x of d.tracks) {
240
+ const g = x.subtitleTrack, v = g ? `sub:${g.id}` : `cc:${x._id ?? x.label}`, w = x.kind === "captions" ? "captions" : "subtitles";
241
+ this.streamTextTracks.set(v, { id: v, kind: w, label: x.label, lang: (g == null ? void 0 : g.lang) ?? ((k = x.closedCaptions) == null ? void 0 : k.lang) ?? "" });
158
242
  }
159
243
  this.callbacks.onTextTracksFound([...this.streamTextTracks.values()]);
160
- }), r.on(i.Events.CUES_PARSED, (d, p) => {
161
- const g = p.type === "subtitles" && p.subtitleTrack ? `sub:${p.subtitleTrack.id}` : `cc:${p.track}`;
162
- this.callbacks.onCues(g, p.cues);
163
- }), r.attachMedia(this.video), r.loadSource(t);
244
+ }), s.on(i.Events.CUES_PARSED, (m, d) => {
245
+ const k = d.type === "subtitles" && d.subtitleTrack ? `sub:${d.subtitleTrack.id}` : `cc:${d.track}`;
246
+ this.callbacks.onCues(k, d.cues);
247
+ }), s.attachMedia(this.video), s.loadSource(t);
164
248
  }
165
- buildHlsConfig() {
166
- const t = this.hlsOptions.config ?? {}, e = { enableWorker: !0, renderTextTracksNatively: !1, liveDurationInfinity: !0, ...t };
249
+ buildHlsConfig(t) {
250
+ var r;
251
+ const e = this.hlsOptions.config ?? {}, i = {
252
+ enableWorker: !0,
253
+ renderTextTracksNatively: !1,
254
+ liveDurationInfinity: !0,
255
+ ...(r = this.qualityLimit) != null && r.fitPlayer ? { capLevelToPlayerSize: !0 } : {},
256
+ ...this.cmcd ? { cmcd: { sessionId: this.sid, contentId: this.cmcd.contentId, useHeaders: this.cmcd.mode === "header" } } : {},
257
+ ...e,
258
+ ...t
259
+ };
167
260
  if (this.hlsOptions.withCredentials) {
168
- const { xhrSetup: i, fetchSetup: r } = t;
169
- e.xhrSetup = (o, a, l) => (o.withCredentials = !0, i == null ? void 0 : i(o, a, l)), e.fetchSetup = (o, a) => {
170
- const l = { ...a, credentials: "include" };
171
- return r ? r(o, l) : new Request(o.url, l);
261
+ const { xhrSetup: s, fetchSetup: a } = e;
262
+ i.xhrSetup = (l, h, c) => (l.withCredentials = !0, s == null ? void 0 : s(l, h, c)), i.fetchSetup = (l, h) => {
263
+ const c = { ...h, credentials: "include" };
264
+ return a ? a(l, c) : new Request(l.url, c);
172
265
  };
173
266
  }
174
- return e;
267
+ return i;
175
268
  }
176
269
  /** Son kaynağı baştan yükler — hls.js ile oynayan kaynakta da çalışır (çıplak video.load() blob'u yeniden açamaz). */
177
270
  /** Son `load()` edilen kaynak (playlist/dublaj gibi eklentilerin yüklediği dahil). */
@@ -184,13 +277,19 @@ class Ve {
184
277
  }
185
278
  /** ABR'nin çıkabileceği en yüksek seviye (kalite kilidi); -1 = sınır yok. */
186
279
  setMaxLevel(t) {
187
- this.hls && this.hls.autoLevelCapping !== t && (this.hls.autoLevelCapping = t);
280
+ var e;
281
+ (e = this.dash) == null || e.setMaxLevel(t), this.hls && this.hls.autoLevelCapping !== t && (this.hls.autoLevelCapping = t);
188
282
  }
189
283
  /** -1 = otomatik kalite (ABR). */
190
284
  setLevel(t) {
191
- this.hls && (this.hls.currentLevel = t);
285
+ var e;
286
+ (e = this.dash) == null || e.setLevel(t), this.hls && (this.hls.currentLevel = t);
192
287
  }
193
288
  setAudioTrack(t) {
289
+ if (this.dash) {
290
+ this.dash.setAudioTrack(t);
291
+ return;
292
+ }
194
293
  if (this.hls) {
195
294
  this.hls.audioTrack = t;
196
295
  return;
@@ -205,16 +304,20 @@ class Ve {
205
304
  * seçili `subtitleTrack` için indirir; CEA-608 cue'ları zaten video segmentlerinden sürekli gelir.
206
305
  */
207
306
  selectTextTrack(t) {
307
+ if (this.dash) {
308
+ this.dash.selectText(t);
309
+ return;
310
+ }
208
311
  if (!this.hls) return;
209
312
  const e = t != null && t.startsWith("sub:") ? Number(t.slice(4)) : NaN;
210
313
  this.hls.subtitleTrack = Number.isNaN(e) ? -1 : this.hls.subtitleTracks.findIndex((i) => i.id === e);
211
314
  }
212
315
  destroy() {
213
- var t, e;
214
- (t = this.nativeHlsProbe) == null || t.call(this), (e = this.nativeAudioCleanup) == null || e.call(this), this.hls && (this.hls.destroy(), this.hls = null);
316
+ var t, e, i, r;
317
+ (t = this.nativeHlsProbe) == null || t.call(this), (e = this.nativeAudioCleanup) == null || e.call(this), this.hls && (this.hls.destroy(), this.hls = null), (i = this.dash) == null || i.destroy(), this.dash = null, (r = this.nativeEme) == null || r.destroy(), this.nativeEme = null;
215
318
  }
216
319
  }
217
- const X = {
320
+ const Y = {
218
321
  mp4: "video/mp4",
219
322
  m4v: "video/mp4",
220
323
  webm: "video/webm",
@@ -227,125 +330,129 @@ const X = {
227
330
  wav: "audio/wav",
228
331
  flac: "audio/flac"
229
332
  };
230
- function Te(n) {
231
- var r, o;
232
- const t = Se(n.src, n.type);
333
+ function ze(n) {
334
+ var r, s;
335
+ const t = Re(n.src, n.type);
233
336
  if (t !== "unknown") return t;
234
- const e = (o = (r = n.type) == null ? void 0 : r.split(";")[0]) == null ? void 0 : o.trim().toLowerCase();
337
+ const e = (s = (r = n.type) == null ? void 0 : r.split(";")[0]) == null ? void 0 : s.trim().toLowerCase();
235
338
  if (e) {
236
- const a = Object.keys(X).find((l) => X[l] === e);
339
+ const a = Object.keys(Y).find((l) => Y[l] === e);
237
340
  if (a) return a;
238
341
  }
239
342
  const i = /\.([a-z0-9]{2,5})(?:$|[?#])/i.exec(n.src);
240
343
  return i ? i[1].toLowerCase() : "other";
241
344
  }
242
- function Ue(n, t) {
345
+ function Xe(n, t) {
243
346
  const e = [];
244
347
  for (const r of n) {
245
- const o = Te(r), a = e.find((l) => l.format === o);
246
- a ? a.sources.push(r) : e.push({ format: o, sources: [r] });
348
+ const s = ze(r), a = e.find((l) => l.format === s);
349
+ a ? a.sources.push(r) : e.push({ format: s, sources: [r] });
247
350
  }
248
351
  if (!(t != null && t.length)) return e;
249
352
  const i = (r) => {
250
- const o = t.findIndex((a) => a.toLowerCase() === r);
251
- return o === -1 ? t.length : o;
353
+ const s = t.findIndex((a) => a.toLowerCase() === r);
354
+ return s === -1 ? t.length : s;
252
355
  };
253
- return e.sort((r, o) => i(r.format) - i(o.format));
356
+ return e.sort((r, s) => i(r.format) - i(s.format));
254
357
  }
255
- function _e(n, t) {
358
+ function Ye(n, t) {
256
359
  var i;
360
+ if (n.format === "dash") {
361
+ const r = window;
362
+ return typeof r.MediaSource > "u" && typeof r.ManagedMediaSource > "u";
363
+ }
257
364
  if (n.format === "hls") {
258
365
  const r = window;
259
366
  return !(typeof r.MediaSource < "u" || typeof r.ManagedMediaSource < "u") && t.canPlayType("application/vnd.apple.mpegurl") === "";
260
367
  }
261
- const e = ((i = n.sources.find((r) => r.type)) == null ? void 0 : i.type) ?? X[n.format];
368
+ const e = ((i = n.sources.find((r) => r.type)) == null ? void 0 : i.type) ?? Y[n.format];
262
369
  return !!e && t.canPlayType(e) === "";
263
370
  }
264
- function R(n) {
371
+ function P(n) {
265
372
  if (!Number.isFinite(n) || n < 0) return "0:00";
266
- 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");
267
- return e > 0 ? `${e}:${o}:${a}` : `${o}:${a}`;
373
+ const t = Math.floor(n), e = Math.floor(t / 3600), i = Math.floor(t % 3600 / 60), r = t % 60, s = e > 0 ? String(i).padStart(2, "0") : String(i), a = String(r).padStart(2, "0");
374
+ return e > 0 ? `${e}:${s}:${a}` : `${s}:${a}`;
268
375
  }
269
- const se = 0.05;
270
- function K(n, t) {
376
+ const he = 0.05;
377
+ function U(n, t) {
271
378
  const e = n.duration;
272
- return !Number.isFinite(e) || e <= se * 2 ? t : Math.min(t, e - se);
379
+ return !Number.isFinite(e) || e <= he * 2 ? t : Math.min(t, e - he);
273
380
  }
274
- function Ae(n, t) {
381
+ function Fe(n, t) {
275
382
  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;
276
- n.currentTime = K(n, Math.max(e, Math.min(i, n.currentTime + t)));
383
+ n.currentTime = U(n, Math.max(e, Math.min(i, n.currentTime + t)));
277
384
  }
278
- const Ke = 10, je = 1, Le = 15;
279
- class $e {
385
+ const Je = 10, Ze = 1, Oe = 15;
386
+ class et {
280
387
  constructor(t, e) {
281
- s(this, "el");
282
- s(this, "trackEl");
283
- s(this, "chaptersEl", null);
284
- s(this, "chapters", []);
388
+ o(this, "el");
389
+ o(this, "trackEl");
390
+ o(this, "chaptersEl", null);
391
+ o(this, "chapters", []);
285
392
  /** İmlecin üstündeki zaman (varsayılan, plugin gerektirmez) — kendi zamanını gösteren plugin'ler `suppressHoverTime` ile gizler. */
286
- s(this, "hoverTimeEl");
287
- s(this, "hoverTimeSuppressors", /* @__PURE__ */ new Set());
288
- s(this, "playedEl");
289
- s(this, "bufferedEl");
290
- s(this, "thumbEl");
291
- s(this, "hoverDotEl");
292
- s(this, "video");
293
- s(this, "labels");
294
- s(this, "dragging", !1);
295
- s(this, "markerEls", []);
296
- s(this, "trackWidth", 0);
297
- s(this, "resizeObserver");
298
- s(this, "rafId", null);
393
+ o(this, "hoverTimeEl");
394
+ o(this, "hoverTimeSuppressors", /* @__PURE__ */ new Set());
395
+ o(this, "playedEl");
396
+ o(this, "bufferedEl");
397
+ o(this, "thumbEl");
398
+ o(this, "hoverDotEl");
399
+ o(this, "video");
400
+ o(this, "labels");
401
+ o(this, "dragging", !1);
402
+ o(this, "markerEls", []);
403
+ o(this, "trackWidth", 0);
404
+ o(this, "resizeObserver");
405
+ o(this, "rafId", null);
299
406
  /** Canlıda hover zamanını başka bir bileşen gösteriyor mu (live-wall-clock tooltip'i) — üst üste binmesin. */
300
- s(this, "liveHoverHandled", !1);
407
+ o(this, "liveHoverHandled", !1);
301
408
  /**
302
409
  * Canlıda oynatıcının hedef konumu (hls.js `liveSyncPosition` — yayını bilerek uçtan ~3 segment geride oynatır).
303
410
  * Seek bar'ın sağ ucu burasıdır; verilmezse seekable sonu.
304
411
  */
305
- s(this, "liveTarget", null);
306
- s(this, "onHoverMove", (t) => {
412
+ o(this, "liveTarget", null);
413
+ o(this, "onHoverMove", (t) => {
307
414
  const e = this.timeline(), i = this.ratioAtClientX(t.clientX);
308
415
  if (e && !this.dragging ? (this.hoverDotEl.style.transform = `translate(${this.xAtRatio(i)}px, -50%) translateX(-50%)`, this.hoverDotEl.setAttribute("data-visible", "")) : this.hoverDotEl.removeAttribute("data-visible"), this.hoverTimeSuppressors.size || !e || e.live && this.liveHoverHandled) {
309
416
  this.hoverTimeEl.removeAttribute("data-visible");
310
417
  return;
311
418
  }
312
419
  const r = e.start + i * (e.end - e.start);
313
- this.hoverTimeEl.textContent = e.live ? `-${R(e.end - r)}` : R(r), this.hoverTimeEl.setAttribute("data-visible", "");
314
- const o = this.hoverTimeEl.offsetWidth, a = Math.min(Math.max(this.layoutXAtClientX(t.clientX) - o / 2, 0), Math.max(this.trackWidth - o, 0));
420
+ this.hoverTimeEl.textContent = e.live ? `-${P(e.end - r)}` : P(r), this.hoverTimeEl.setAttribute("data-visible", "");
421
+ const s = this.hoverTimeEl.offsetWidth, a = Math.min(Math.max(this.layoutXAtClientX(t.clientX) - s / 2, 0), Math.max(this.trackWidth - s, 0));
315
422
  this.hoverTimeEl.style.transform = `translateX(${a}px)`;
316
423
  });
317
- s(this, "onHoverLeave", () => {
424
+ o(this, "onHoverLeave", () => {
318
425
  this.hoverTimeEl.removeAttribute("data-visible"), this.hoverDotEl.removeAttribute("data-visible");
319
426
  });
320
- s(this, "onPointerDown", (t) => {
427
+ o(this, "onPointerDown", (t) => {
321
428
  this.dragging = !0, this.hoverDotEl.removeAttribute("data-visible"), this.el.setPointerCapture(t.pointerId), this.seekToRatio(this.ratioFromEvent(t)), this.el.addEventListener("pointermove", this.onPointerMove), this.el.addEventListener("pointerup", this.onPointerUp);
322
429
  });
323
- s(this, "onPointerMove", (t) => {
430
+ o(this, "onPointerMove", (t) => {
324
431
  this.dragging && this.seekToRatio(this.ratioFromEvent(t));
325
432
  });
326
- s(this, "onPointerUp", (t) => {
433
+ o(this, "onPointerUp", (t) => {
327
434
  this.dragging = !1, this.el.releasePointerCapture(t.pointerId), this.el.removeEventListener("pointermove", this.onPointerMove), this.el.removeEventListener("pointerup", this.onPointerUp);
328
435
  });
329
436
  /** Odaktayken ←/→ sarma süresi (sn) — player'ın klavye kısayoluyla aynı (options.keyboardSeekStep). */
330
- s(this, "keyboardStep", 5);
437
+ o(this, "keyboardStep", 5);
331
438
  /** Odaktayken ok tuşuyla sarıldığında (sn, negatif = geri) — sarma bildirimi için. */
332
- s(this, "onKeyboardSeek", null);
333
- s(this, "onKeyDown", (t) => {
439
+ o(this, "onKeyboardSeek", null);
440
+ o(this, "onKeyDown", (t) => {
334
441
  var i, r;
335
442
  const e = this.timeline();
336
- e && (t.key === "ArrowRight" ? (this.video.currentTime = K(this.video, Math.min(e.end, this.video.currentTime + this.keyboardStep)), (i = this.onKeyboardSeek) == null || i.call(this, this.keyboardStep), t.preventDefault()) : t.key === "ArrowLeft" && (this.video.currentTime = Math.max(e.start, this.video.currentTime - this.keyboardStep), (r = this.onKeyboardSeek) == null || r.call(this, -this.keyboardStep), t.preventDefault()));
443
+ e && (t.key === "ArrowRight" ? (this.video.currentTime = U(this.video, Math.min(e.end, this.video.currentTime + this.keyboardStep)), (i = this.onKeyboardSeek) == null || i.call(this, this.keyboardStep), t.preventDefault()) : t.key === "ArrowLeft" && (this.video.currentTime = Math.max(e.start, this.video.currentTime - this.keyboardStep), (r = this.onKeyboardSeek) == null || r.call(this, -this.keyboardStep), t.preventDefault()));
337
444
  });
338
- s(this, "startLoop", () => {
445
+ o(this, "startLoop", () => {
339
446
  if (this.rafId !== null) return;
340
447
  const t = () => {
341
448
  this.render(), this.rafId = requestAnimationFrame(t);
342
449
  };
343
450
  this.rafId = requestAnimationFrame(t);
344
451
  });
345
- s(this, "stopLoop", () => {
452
+ o(this, "stopLoop", () => {
346
453
  this.rafId !== null && (cancelAnimationFrame(this.rafId), this.rafId = null), this.render();
347
454
  });
348
- s(this, "render", () => {
455
+ o(this, "render", () => {
349
456
  const t = this.timeline();
350
457
  if (this.el.toggleAttribute("data-no-duration", !t), this.el.toggleAttribute("data-live", !!(t != null && t.live)), !t) {
351
458
  this.hoverTimeEl.removeAttribute("data-visible"), this.hoverDotEl.removeAttribute("data-visible"), this.playedEl.style.transform = "scaleX(0)", this.thumbEl.style.translate = "-50% 0", this.bufferedEl.style.transform = "scaleX(0)";
@@ -353,20 +460,20 @@ class $e {
353
460
  }
354
461
  const e = t.end - t.start, i = (l) => Math.min(1, Math.max(0, (l - t.start) / e)), r = t.live && this.atLiveEdge(t) ? 1 : i(this.video.currentTime);
355
462
  this.thumbEl.style.translate = `calc(${this.xAtRatio(r)}px - 50%) 0`;
356
- let o = 0;
463
+ let s = 0;
357
464
  for (let l = 0; l < this.video.buffered.length; l++)
358
- this.video.buffered.start(l) <= this.video.currentTime && (o = Math.max(o, this.video.buffered.end(l)));
359
- const a = i(o);
465
+ this.video.buffered.start(l) <= this.video.currentTime && (s = Math.max(s, this.video.buffered.end(l)));
466
+ const a = i(s);
360
467
  if (this.chapters.length)
361
468
  for (const l of this.chapters) {
362
- const h = l.end - l.start, m = (d) => h > 0 ? Math.min(1, Math.max(0, (d - l.start) / h)) : 0;
363
- l.playedEl.style.transform = `scaleX(${m(r)})`, l.bufferedEl.style.transform = `scaleX(${m(a)})`;
469
+ const h = l.end - l.start, c = (f) => h > 0 ? Math.min(1, Math.max(0, (f - l.start) / h)) : 0;
470
+ l.playedEl.style.transform = `scaleX(${c(r)})`, l.bufferedEl.style.transform = `scaleX(${c(a)})`;
364
471
  }
365
472
  else
366
473
  this.playedEl.style.transform = `scaleX(${r})`, this.bufferedEl.style.transform = `scaleX(${a})`;
367
474
  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)));
368
475
  });
369
- 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");
476
+ 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"), this.el.setAttribute("aria-valuemax", "0"), this.el.setAttribute("aria-valuenow", "0");
370
477
  const i = document.createElement("div");
371
478
  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(() => {
372
479
  this.trackWidth = this.layoutWidth(), this.measureChapters(), this.render();
@@ -383,12 +490,12 @@ class $e {
383
490
  if (t !== 1 / 0) return null;
384
491
  const { seekable: e } = this.video;
385
492
  if (!e.length) return null;
386
- const i = e.start(0), r = e.end(e.length - 1), o = (l = this.liveTarget) == null ? void 0 : l.call(this), a = o != null && o > i && o <= r ? o : r;
387
- return a - i >= Ke ? { start: i, end: a, live: !0 } : null;
493
+ const i = e.start(0), r = e.end(e.length - 1), s = (l = this.liveTarget) == null ? void 0 : l.call(this), a = s != null && s > i && s <= r ? s : r;
494
+ return a - i >= Je ? { start: i, end: a, live: !0 } : null;
388
495
  }
389
496
  /** Canlıda izleyici canlı konumda mı — kontrol çubuğundaki "● CANLI" rozetiyle aynı ölçü. */
390
497
  atLiveEdge(t) {
391
- return t.end - this.video.currentTime <= Le;
498
+ return t.end - this.video.currentTime <= Oe;
392
499
  }
393
500
  /** Kendi zamanını gösteren plugin'ler (sprite/segments) varsayılan hover zamanını gizler — keyed set. */
394
501
  suppressHoverTime(t, e) {
@@ -402,8 +509,8 @@ class $e {
402
509
  const e = this.layoutXAtClientX(t);
403
510
  if (!this.chapters.length) return this.trackWidth > 0 ? Math.min(1, Math.max(0, e / this.trackWidth)) : 0;
404
511
  for (let i = 0; i < this.chapters.length; i++) {
405
- const r = this.chapters[i], o = this.chapters[i + 1], a = o ? o.left : 1 / 0;
406
- if (e < a || !o) {
512
+ const r = this.chapters[i], s = this.chapters[i + 1], a = s ? s.left : 1 / 0;
513
+ if (e < a || !s) {
407
514
  const l = r.width > 0 ? Math.min(1, Math.max(0, (e - r.left) / r.width)) : 0;
408
515
  return r.start + l * (r.end - r.start);
409
516
  }
@@ -413,7 +520,7 @@ class $e {
413
520
  /** 0–1 zaman oranının seek bar üzerindeki px konumu (thumb için). */
414
521
  xAtRatio(t) {
415
522
  if (!this.chapters.length) return t * this.trackWidth;
416
- const e = this.chapters.find((o) => t < o.end) ?? this.chapters[this.chapters.length - 1], i = e.end - e.start, r = i > 0 ? Math.min(1, Math.max(0, (t - e.start) / i)) : 0;
523
+ const e = this.chapters.find((s) => t < s.end) ?? this.chapters[this.chapters.length - 1], i = e.end - e.start, r = i > 0 ? Math.min(1, Math.max(0, (t - e.start) / i)) : 0;
417
524
  return e.left + r * e.width;
418
525
  }
419
526
  /** Track'i sıralı, 0→1'i kesintisiz kapsayan oran aralıklarına göre ayrı parçalara böler. */
@@ -423,10 +530,10 @@ class $e {
423
530
  return e.className = "hp-chapters", this.chapters = t.map((i) => {
424
531
  const r = document.createElement("div");
425
532
  r.className = "hp-chapter", r.setAttribute("part", "segment-band"), r.style.flex = `${Math.max(i.end - i.start, 0)} 1 0px`;
426
- const o = document.createElement("div");
427
- o.className = "hp-chapter-fill hp-chapter-buffered";
533
+ const s = document.createElement("div");
534
+ s.className = "hp-chapter-fill hp-chapter-buffered";
428
535
  const a = document.createElement("div");
429
- 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 };
536
+ return a.className = "hp-chapter-fill hp-chapter-played", i.color && (a.style.background = i.color), r.append(s, a), e.appendChild(r), { ...i, el: r, bufferedEl: s, playedEl: a, left: 0, width: 0 };
430
537
  }), this.trackEl.style.display = "none", this.trackEl.after(e), this.chaptersEl = e, this.measureChapters(), this.render(), this.chapters.map((i) => i.el);
431
538
  }
432
539
  clearChapters() {
@@ -458,7 +565,7 @@ class $e {
458
565
  const e = this.timeline();
459
566
  if (!e) return;
460
567
  const i = e.start + t * (e.end - e.start);
461
- this.video.currentTime = e.live ? Math.min(i, e.end - je) : K(this.video, i), this.render();
568
+ this.video.currentTime = e.live ? Math.min(i, e.end - Ze) : U(this.video, i), this.render();
462
569
  }
463
570
  /** 0–1 arası oranda, seek bar üzerine ince bir işaret çizgisi ekler (ör. loop A/B noktaları). */
464
571
  addMarker(t, e = "") {
@@ -476,63 +583,63 @@ class $e {
476
583
  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();
477
584
  }
478
585
  }
479
- function z(n, t = "") {
586
+ function M(n, t = "") {
480
587
  const e = document.createElement("i");
481
588
  return e.className = `hp-icon hp-icon-${n}${t ? ` ${t}` : ""}`, e.setAttribute("aria-hidden", "true"), e;
482
589
  }
483
- function H(n, t) {
590
+ function I(n, t) {
484
591
  n.className = n.className.replace(/hp-icon-[\w-]+/, `hp-icon-${t}`);
485
592
  }
486
- const q = 0.05, Qe = 150;
487
- class We {
593
+ const H = 0.05, tt = 150;
594
+ class it {
488
595
  constructor(t, e, i) {
489
- s(this, "el");
596
+ o(this, "el");
490
597
  /** Dokunmatikte ses butonu gizli; sessiz oynarken görünen "Sesi aç" rozeti (chrome dışında monte edilir, otomatik gizlenmez). */
491
- s(this, "unmuteBadge");
492
- s(this, "unmuteText");
493
- s(this, "button");
494
- s(this, "iconEl");
495
- s(this, "slider");
496
- s(this, "sliderFill");
497
- s(this, "video");
498
- s(this, "labels");
499
- s(this, "adHooks");
500
- s(this, "dragging", !1);
501
- s(this, "hideTimer", null);
502
- s(this, "openNow", () => {
598
+ o(this, "unmuteBadge");
599
+ o(this, "unmuteText");
600
+ o(this, "button");
601
+ o(this, "iconEl");
602
+ o(this, "slider");
603
+ o(this, "sliderFill");
604
+ o(this, "video");
605
+ o(this, "labels");
606
+ o(this, "adHooks");
607
+ o(this, "dragging", !1);
608
+ o(this, "hideTimer", null);
609
+ o(this, "openNow", () => {
503
610
  this.hideTimer && (clearTimeout(this.hideTimer), this.hideTimer = null), this.slider.style.opacity = "1", this.slider.style.pointerEvents = "auto";
504
611
  });
505
- s(this, "scheduleHide", () => {
612
+ o(this, "scheduleHide", () => {
506
613
  this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = setTimeout(() => {
507
614
  this.hideTimer = null, this.slider.style.opacity = "0", this.slider.style.pointerEvents = "none";
508
- }, Qe);
615
+ }, tt);
509
616
  });
510
- s(this, "onWheel", (t) => {
617
+ o(this, "onWheel", (t) => {
511
618
  if (t.preventDefault(), this.adHooks.isAdActive()) {
512
619
  const r = this.adHooks.getVolume();
513
- this.adHooks.setVolume(Math.min(1, Math.max(0, r + (t.deltaY < 0 ? q : -q)))), this.render();
620
+ this.adHooks.setVolume(Math.min(1, Math.max(0, r + (t.deltaY < 0 ? H : -H)))), this.render();
514
621
  return;
515
622
  }
516
- const e = this.video.muted ? 0 : this.video.volume, i = Math.min(1, Math.max(0, e + (t.deltaY < 0 ? q : -q)));
623
+ const e = this.video.muted ? 0 : this.video.volume, i = Math.min(1, Math.max(0, e + (t.deltaY < 0 ? H : -H)));
517
624
  this.video.volume = i, this.video.muted = i === 0;
518
625
  });
519
- s(this, "onToggleMute", () => {
626
+ o(this, "onToggleMute", () => {
520
627
  if (this.adHooks.isAdActive()) {
521
628
  this.adHooks.toggleMute(), this.render();
522
629
  return;
523
630
  }
524
631
  this.video.muted = !this.video.muted, !this.video.muted && this.video.volume === 0 && (this.video.volume = 0.5);
525
632
  });
526
- s(this, "onSliderPointerDown", (t) => {
633
+ o(this, "onSliderPointerDown", (t) => {
527
634
  this.dragging = !0, this.slider.setPointerCapture(t.pointerId), this.setFromClientY(t.clientY), this.slider.addEventListener("pointermove", this.onSliderPointerMove), this.slider.addEventListener("pointerup", this.onSliderPointerUp);
528
635
  });
529
- s(this, "onSliderPointerMove", (t) => {
636
+ o(this, "onSliderPointerMove", (t) => {
530
637
  this.dragging && this.setFromClientY(t.clientY);
531
638
  });
532
- s(this, "onSliderPointerUp", (t) => {
639
+ o(this, "onSliderPointerUp", (t) => {
533
640
  this.dragging = !1, this.slider.releasePointerCapture(t.pointerId), this.slider.removeEventListener("pointermove", this.onSliderPointerMove), this.slider.removeEventListener("pointerup", this.onSliderPointerUp);
534
641
  });
535
- s(this, "onSliderKeyDown", (t) => {
642
+ o(this, "onSliderKeyDown", (t) => {
536
643
  if (this.adHooks.isAdActive()) {
537
644
  if (t.key === "ArrowUp")
538
645
  this.adHooks.setVolume(Math.min(1, this.adHooks.getVolume() + 0.1)), t.preventDefault();
@@ -545,17 +652,17 @@ class We {
545
652
  }
546
653
  t.key === "ArrowUp" ? (this.video.volume = Math.min(1, this.video.volume + 0.1), this.video.muted = !1, t.preventDefault()) : t.key === "ArrowDown" && (this.video.volume = Math.max(0, this.video.volume - 0.1), t.preventDefault());
547
654
  });
548
- s(this, "render", () => {
655
+ o(this, "render", () => {
549
656
  const t = this.adHooks.isAdActive() ? this.adHooks.getVolume() : this.video.muted ? 0 : this.video.volume;
550
657
  this.sliderFill.style.height = `${t * 100}%`, this.slider.setAttribute("aria-valuenow", String(Math.round(t * 100)));
551
658
  const e = t === 0 ? this.labels.unmute : this.labels.mute;
552
659
  this.button.setAttribute("aria-label", e);
553
660
  const i = this.adHooks.isAdActive() || !this.video.paused;
554
- this.unmuteBadge.toggleAttribute("data-visible", t === 0 && i), this.unmuteText.textContent = this.labels.unmute, t === 0 ? H(this.iconEl, "volume-muted") : t < 0.5 ? H(this.iconEl, "volume-low") : H(this.iconEl, "volume-high");
661
+ this.unmuteBadge.toggleAttribute("data-visible", t === 0 && i), this.unmuteText.textContent = this.labels.unmute, t === 0 ? I(this.iconEl, "volume-muted") : t < 0.5 ? I(this.iconEl, "volume-low") : I(this.iconEl, "volume-high");
555
662
  });
556
- 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(z("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) => {
557
- o.stopPropagation(), this.unmute();
558
- }), 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 = z("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");
663
+ 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(M("volume-muted", "hp:text-base")), this.unmuteText = document.createElement("span"), this.unmuteText.textContent = e.unmute, this.unmuteBadge.appendChild(this.unmuteText), this.unmuteBadge.addEventListener("pointerdown", (s) => s.stopPropagation()), this.unmuteBadge.addEventListener("click", (s) => {
664
+ s.stopPropagation(), this.unmute();
665
+ }), 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 = M("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");
559
666
  const r = document.createElement("div");
560
667
  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();
561
668
  }
@@ -587,56 +694,58 @@ class We {
587
694
  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();
588
695
  }
589
696
  }
590
- const Xe = '<svg class="hp-lock" viewBox="0 0 24 24" width="14" height="14" aria-hidden="true"><path fill="currentColor" d="M12 2a5 5 0 0 0-5 5v3H6a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8a2 2 0 0 0-2-2h-1V7a5 5 0 0 0-5-5Zm-3 8V7a3 3 0 1 1 6 0v3H9Z"/></svg>', $ = 8, O = 8, oe = 100, V = 256;
591
- function Ye(n) {
697
+ const rt = '<svg class="hp-lock" viewBox="0 0 24 24" width="14" height="14" aria-hidden="true"><path fill="currentColor" d="M12 2a5 5 0 0 0-5 5v3H6a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8a2 2 0 0 0-2-2h-1V7a5 5 0 0 0-5-5Zm-3 8V7a3 3 0 1 1 6 0v3H9Z"/></svg>', Q = 8, B = 8, pe = 100, q = 256;
698
+ function st(n) {
592
699
  return n.replace(/[&<>"']/g, (t) => `&#${t.charCodeAt(0)};`);
593
700
  }
594
- function Je(n, t) {
701
+ function ot(n, t) {
595
702
  if (!n || !t) return null;
596
703
  const e = Math.min(n, t), i = Math.max(n, t);
597
- return e >= 4e3 || i >= 7600 ? "8K" : e >= 2e3 || i >= 3800 ? "4K" : e >= 1400 || i >= 2500 ? "2K" : e >= 700 || i >= 1260 ? "HD" : String(Ze.reduce((r, o) => Math.abs(o - e) < Math.abs(r - e) ? o : r));
704
+ return e >= 4e3 || i >= 7600 ? "8K" : e >= 2e3 || i >= 3800 ? "4K" : e >= 1400 || i >= 2500 ? "2K" : e >= 700 || i >= 1260 ? "HD" : String(at.reduce((r, s) => Math.abs(s - e) < Math.abs(r - e) ? s : r));
598
705
  }
599
- const Ze = [144, 240, 360, 480, 540, 576];
600
- class et {
706
+ const at = [144, 240, 360, 480, 540, 576];
707
+ class nt {
601
708
  constructor(t, e, i) {
602
- s(this, "el");
603
- s(this, "button");
604
- s(this, "badge");
605
- s(this, "quickSlot");
709
+ o(this, "el");
710
+ o(this, "button");
711
+ o(this, "badge");
712
+ o(this, "quickSlot");
606
713
  /** Paneli en son açan hızlı erişim butonu — aynı butona tekrar basınca kapatmak için. */
607
- s(this, "quickOwner", null);
608
- s(this, "quickObserver");
609
- s(this, "badgeEnabled", !0);
610
- s(this, "panel");
611
- s(this, "video");
612
- s(this, "playbackRates");
613
- s(this, "labels");
614
- s(this, "qualities", []);
615
- s(this, "activeQualityLabel");
616
- s(this, "captions", []);
617
- s(this, "activeCaptionLabel");
618
- s(this, "captionAppearance", null);
619
- s(this, "qrResumeToggle", null);
620
- s(this, "open", !1);
714
+ o(this, "quickOwner", null);
715
+ o(this, "quickObserver");
716
+ o(this, "badgeEnabled", !0);
717
+ o(this, "panel");
718
+ o(this, "video");
719
+ o(this, "playbackRates");
720
+ o(this, "labels");
721
+ o(this, "qualities", []);
722
+ o(this, "activeQualityLabel");
723
+ o(this, "captions", []);
724
+ o(this, "activeCaptionLabel");
725
+ o(this, "captionAppearance", null);
726
+ o(this, "qrResumeToggle", null);
727
+ o(this, "open", !1);
621
728
  /** Menü açılıp kapanınca — HopePlayerElement açıkken kontrolleri otomatik gizlemez. */
622
- s(this, "onOpenChange", null);
623
- s(this, "panelObserver");
624
- s(this, "currentPanel", "main");
625
- s(this, "submenus", []);
729
+ o(this, "onOpenChange", null);
730
+ o(this, "panelObserver");
731
+ o(this, "currentPanel", "main");
732
+ o(this, "submenus", []);
733
+ /** Eklenti aç / kapa satırları. */
734
+ o(this, "toggles", /* @__PURE__ */ new Map());
626
735
  /**
627
736
  * Rozet gerçekten oynayan görüntüden okunur (`videoWidth` / `videoHeight`): menüde "Otomatik" seçiliyken de ABR'nin
628
737
  * o an indirdiği kaliteyi gösterir; MP4, hls.js ve Safari'nin kendi HLS oynatıcısında aynı çalışır. Dikey videoda
629
738
  * kısa kenar sayılır (1080×1920 → HD). Ses modu / görüntüsüz kaynakta rozet yok.
630
739
  */
631
- s(this, "updateBadge", () => {
632
- const t = this.badgeEnabled ? Je(this.video.videoWidth, this.video.videoHeight) : null;
740
+ o(this, "updateBadge", () => {
741
+ const t = this.badgeEnabled ? ot(this.video.videoWidth, this.video.videoHeight) : null;
633
742
  this.badge.textContent = t ?? "", this.badge.hidden = !t, t ? this.badge.setAttribute("data-quality", t) : this.badge.removeAttribute("data-quality"), this.badge.toggleAttribute("data-low", !!t && /^\d+$/.test(t));
634
743
  });
635
744
  /**
636
745
  * Yön + yükseklik player'a göre: kompakt düzende (buton üst bardaysa) aşağı açılır; her iki yönde de
637
746
  * yükseklik player içinde kalan alanla sınırlı — küçük player'da menü dışarı taşmaz, kendi içinde kayar.
638
747
  */
639
- s(this, "fitToPlayer", () => {
748
+ o(this, "fitToPlayer", () => {
640
749
  var h;
641
750
  if (!this.open) return;
642
751
  const t = this.el.closest(".video-area");
@@ -645,31 +754,31 @@ class et {
645
754
  this.fitToViewport();
646
755
  return;
647
756
  }
648
- const e = t.getBoundingClientRect(), i = this.button.getBoundingClientRect(), r = this.el.getBoundingClientRect(), o = !!this.el.closest(".hp-top-bar");
649
- this.panel.toggleAttribute("data-drop", o), Object.assign(this.panel.style, { top: "", bottom: "", marginTop: "", marginBottom: "" });
650
- const a = this.panel.scrollHeight, l = (o ? e.bottom - i.bottom : i.top - e.top) - $ - O;
651
- if (a <= l || l >= oe) {
652
- this.panel.style.maxHeight = `${Math.min(V, l)}px`;
757
+ const e = t.getBoundingClientRect(), i = this.button.getBoundingClientRect(), r = this.el.getBoundingClientRect(), s = !!this.el.closest(".hp-top-bar");
758
+ this.panel.toggleAttribute("data-drop", s), Object.assign(this.panel.style, { top: "", bottom: "", marginTop: "", marginBottom: "" });
759
+ const a = this.panel.scrollHeight, l = (s ? e.bottom - i.bottom : i.top - e.top) - Q - B;
760
+ if (a <= l || l >= pe) {
761
+ this.panel.style.maxHeight = `${Math.min(q, l)}px`;
653
762
  return;
654
763
  }
655
- this.panel.style.maxHeight = `${Math.min(V, e.height - 2 * O)}px`, o ? Object.assign(this.panel.style, { top: `${e.top + O - r.top}px`, marginTop: "0" }) : Object.assign(this.panel.style, { bottom: `${r.bottom - (e.bottom - O)}px`, marginBottom: "0" });
764
+ this.panel.style.maxHeight = `${Math.min(q, e.height - 2 * B)}px`, s ? Object.assign(this.panel.style, { top: `${e.top + B - r.top}px`, marginTop: "0" }) : Object.assign(this.panel.style, { bottom: `${r.bottom - (e.bottom - B)}px`, marginBottom: "0" });
656
765
  });
657
- s(this, "onDocumentClick", (t) => {
766
+ o(this, "onDocumentClick", (t) => {
658
767
  this.open && !t.composedPath().includes(this.el) && this.close();
659
768
  });
660
769
  /** İç içe alt menüde geri dönülecek üst menüler (en üstteki = açık olanın bir üstü). */
661
- s(this, "submenuStack", []);
662
- s(this, "backToCaptionSettings", () => {
770
+ o(this, "submenuStack", []);
771
+ o(this, "backToCaptionSettings", () => {
663
772
  this.currentPanel = "captions-settings", this.renderCaptionSettings();
664
773
  });
665
- 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(z("settings", "hp:text-[length:var(--hp-ctrl-icon-size)]")), this.badge = document.createElement("span"), this.badge.className = "hp-quality-badge", this.badge.setAttribute("part", "quality-badge"), this.badge.setAttribute("aria-hidden", "true"), this.badge.hidden = !0;
666
- for (const o of ["resize", "loadedmetadata", "emptied"]) t.addEventListener(o, this.updateBadge);
774
+ 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(M("settings", "hp:text-[length:var(--hp-ctrl-icon-size)]")), this.badge = document.createElement("span"), this.badge.className = "hp-quality-badge", this.badge.setAttribute("part", "quality-badge"), this.badge.setAttribute("aria-hidden", "true"), this.badge.hidden = !0;
775
+ for (const s of ["resize", "loadedmetadata", "emptied"]) t.addEventListener(s, this.updateBadge);
667
776
  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 });
668
777
  const r = document.createElement("span");
669
778
  r.className = "hp:relative hp:flex", r.appendChild(this.button), r.appendChild(this.badge), this.quickSlot = document.createElement("span"), this.quickSlot.className = "hp-quick-slot hp:flex hp:items-center hp:gap-1", this.quickSlot.hidden = !0, this.quickObserver = new MutationObserver(() => {
670
779
  this.quickSlot.hidden = this.quickSlot.childElementCount === 0, this.quickOwner && !this.quickOwner.isConnected && (this.quickOwner = null);
671
- }), this.quickObserver.observe(this.quickSlot, { childList: !0 }), this.el.className = "hp:relative hp:flex hp:items-center hp:gap-1", this.el.append(r, this.quickSlot, this.panel), this.button.addEventListener("click", (o) => {
672
- o.stopPropagation(), this.toggle();
780
+ }), this.quickObserver.observe(this.quickSlot, { childList: !0 }), this.el.className = "hp:relative hp:flex hp:items-center hp:gap-1", this.el.append(r, this.quickSlot, this.panel), this.button.addEventListener("click", (s) => {
781
+ s.stopPropagation(), this.toggle();
673
782
  }), document.addEventListener("click", this.onDocumentClick, !0), this.renderMain();
674
783
  }
675
784
  /**
@@ -679,12 +788,12 @@ class et {
679
788
  addQuickButton(t, e, i = () => []) {
680
789
  t.addEventListener("click", (r) => {
681
790
  r.stopPropagation();
682
- const o = e();
683
- if (this.open && this.currentPanel === `custom:${o.key}` && this.quickOwner === t) {
791
+ const s = e();
792
+ if (this.open && this.currentPanel === `custom:${s.key}` && this.quickOwner === t) {
684
793
  this.close();
685
794
  return;
686
795
  }
687
- this.openSubmenu(o, i()), this.quickOwner = t;
796
+ this.openSubmenu(s, i()), this.quickOwner = t;
688
797
  }), this.quickSlot.appendChild(t);
689
798
  }
690
799
  /** Menüyü doğrudan bir alt menüde açar (hızlı erişim butonları için). */
@@ -726,6 +835,13 @@ class et {
726
835
  registerSubmenu(t) {
727
836
  this.submenus = this.submenus.filter((e) => e.key !== t.key), this.submenus.push(t), this.currentPanel === "main" && this.renderMain();
728
837
  }
838
+ /** Aç / kapa satırı ekler (aynı anahtar yerine geçer). */
839
+ registerToggle(t, e) {
840
+ this.toggles.set(t, e), this.open && this.currentPanel === "main" && this.renderMain();
841
+ }
842
+ unregisterToggle(t) {
843
+ this.toggles.delete(t) && this.open && this.currentPanel === "main" && this.renderMain();
844
+ }
729
845
  unregisterSubmenu(t) {
730
846
  this.submenus = this.submenus.filter((e) => e.key !== t), this.currentPanel === "main" ? this.renderMain() : this.currentPanel === `custom:${t}` && this.renderMain();
731
847
  }
@@ -746,8 +862,8 @@ class et {
746
862
  fitToViewport() {
747
863
  const t = this.button.getBoundingClientRect();
748
864
  Object.assign(this.panel.style, { top: "", bottom: "", marginTop: "", marginBottom: "" });
749
- const e = this.panel.scrollHeight, i = t.top - $ - O, r = window.innerHeight - t.bottom - $ - O, o = i < Math.min(e, V) && r > i;
750
- this.panel.toggleAttribute("data-drop", o), this.panel.style.maxHeight = `${Math.max(oe, Math.min(V, o ? r : i))}px`;
865
+ const e = this.panel.scrollHeight, i = t.top - Q - B, r = window.innerHeight - t.bottom - Q - B, s = i < Math.min(e, q) && r > i;
866
+ this.panel.toggleAttribute("data-drop", s), this.panel.style.maxHeight = `${Math.max(pe, Math.min(q, s ? r : i))}px`;
751
867
  }
752
868
  /** Düzen değişince (ör. kompakt ↔ normal) açık menüyü kapat — eski konumunda asılı kalmasın. */
753
869
  closeMenu() {
@@ -763,7 +879,7 @@ class et {
763
879
  }
764
880
  backRow(t, e) {
765
881
  const i = document.createElement("button");
766
- 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(z("chevron-left", "hp:text-sm"));
882
+ 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(M("chevron-left", "hp:text-sm"));
767
883
  const r = document.createElement("span");
768
884
  return r.textContent = t, i.appendChild(r), i.addEventListener("click", e), i;
769
885
  }
@@ -801,6 +917,12 @@ class et {
801
917
  this.currentPanel = `custom:${t.key}`, this.renderSubmenu(t);
802
918
  })
803
919
  );
920
+ for (const t of this.toggles.values())
921
+ this.panel.appendChild(
922
+ this.row(t.label, t.getValueLabel(), () => {
923
+ t.onToggle(), this.renderMain();
924
+ })
925
+ );
804
926
  if (this.qrResumeToggle) {
805
927
  const t = this.qrResumeToggle;
806
928
  this.panel.appendChild(
@@ -818,14 +940,14 @@ class et {
818
940
  })
819
941
  );
820
942
  for (const i of t.getItems()) {
821
- const r = i.children ? '<i class="hp-icon hp-icon-chevron-left hp-chevron-forward"></i>' : i.active ? '<i class="hp-icon hp-icon-check"></i>' : "", o = this.row(i.label, i.value !== void 0 ? Ye(i.value) + (i.children ? r : "") : r, () => {
943
+ const r = i.children ? '<i class="hp-icon hp-icon-chevron-left hp-chevron-forward"></i>' : i.active ? '<i class="hp-icon hp-icon-check"></i>' : "", s = this.row(i.label, i.value !== void 0 ? st(i.value) + (i.children ? r : "") : r, () => {
822
944
  if (i.children) {
823
945
  this.renderSubmenu(i.children(), [...e, t]);
824
946
  return;
825
947
  }
826
948
  i.onSelect(), i.keepOpen ? this.renderSubmenu(t, e) : this.close();
827
949
  });
828
- this.panel.appendChild(o);
950
+ this.panel.appendChild(s);
829
951
  }
830
952
  }
831
953
  renderSpeed() {
@@ -840,7 +962,7 @@ class et {
840
962
  renderQuality() {
841
963
  this.panel.innerHTML = "", this.panel.appendChild(this.backRow(this.labels.quality, () => this.renderMain()));
842
964
  for (const t of this.qualities) {
843
- const e = t.label === this.activeQualityLabel, i = this.row(t.label, t.locked ? Xe : e ? '<i class="hp-icon hp-icon-check"></i>' : "", () => {
965
+ const e = t.label === this.activeQualityLabel, i = this.row(t.label, t.locked ? rt : e ? '<i class="hp-icon hp-icon-check"></i>' : "", () => {
844
966
  t.onSelect(), this.close();
845
967
  });
846
968
  t.locked && i.setAttribute("data-locked", ""), this.panel.appendChild(i);
@@ -867,7 +989,7 @@ class et {
867
989
  }
868
990
  /** Altyazı → Altyazı ayarları: boyut, arka plan / yazı rengi, konumu sıfırla — her satırda o anki değer. */
869
991
  renderCaptionSettings() {
870
- var i, r, o;
992
+ var i, r, s;
871
993
  this.panel.innerHTML = "", this.panel.appendChild(
872
994
  this.backRow(this.labels.captionSettings, () => {
873
995
  this.currentPanel = "captions", this.renderCaptions();
@@ -885,7 +1007,7 @@ class et {
885
1007
  this.currentPanel = "captions-bg", this.renderCaptionColorPanel("bg");
886
1008
  })
887
1009
  ), this.panel.appendChild(
888
- this.row(t.textColorLabel, e((o = t.getTextColorOptions().find((a) => a.active)) == null ? void 0 : o.value), () => {
1010
+ this.row(t.textColorLabel, e((s = t.getTextColorOptions().find((a) => a.active)) == null ? void 0 : s.value), () => {
889
1011
  this.currentPanel = "captions-text", this.renderCaptionColorPanel("text");
890
1012
  })
891
1013
  ), this.panel.appendChild(
@@ -912,8 +1034,8 @@ class et {
912
1034
  if (this.panel.appendChild(this.backRow(i, this.backToCaptionSettings)), !e) return;
913
1035
  const r = document.createElement("div");
914
1036
  r.className = "hp:flex hp:flex-wrap hp:gap-2 hp:px-3 hp:py-2";
915
- const o = t === "bg" ? e.getBgColorOptions() : e.getTextColorOptions();
916
- for (const a of o) {
1037
+ const s = t === "bg" ? e.getBgColorOptions() : e.getTextColorOptions();
1038
+ for (const a of s) {
917
1039
  const l = document.createElement("button");
918
1040
  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", () => {
919
1041
  a.onSelect(), this.render();
@@ -931,140 +1053,140 @@ class et {
931
1053
  this.panelObserver.disconnect(), this.quickObserver.disconnect();
932
1054
  }
933
1055
  }
934
- const tt = 480, it = 150, ae = ["waiting", "seeking"], ne = ["playing", "canplay", "canplaythrough", "seeked", "pause", "error", "emptied"];
935
- function le(n, t) {
936
- const { btn: e } = D("", `skip-${n}`);
1056
+ const lt = 480, ht = 150, ce = ["waiting", "seeking"], de = ["playing", "canplay", "canplaythrough", "seeked", "pause", "error", "emptied"];
1057
+ function ue(n, t) {
1058
+ const { btn: e } = N("", `skip-${n}`);
937
1059
  e.classList.add("hp-skip-btn"), e.setAttribute("part", t);
938
1060
  const i = document.createElement("span");
939
1061
  return i.className = "hp-skip-num", i.setAttribute("aria-hidden", "true"), e.appendChild(i), e.style.display = "none", { btn: e, num: i };
940
1062
  }
941
- function N(n, t) {
1063
+ function R(n, t) {
942
1064
  n.setAttribute("aria-label", t);
943
1065
  }
944
- function D(n, t, e) {
1066
+ function N(n, t, e) {
945
1067
  const i = document.createElement("button");
946
- i.type = "button", N(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";
947
- const r = z(t, "hp:text-[length:var(--hp-ctrl-icon-size)]");
1068
+ i.type = "button", R(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";
1069
+ const r = M(t, "hp:text-[length:var(--hp-ctrl-icon-size)]");
948
1070
  return i.appendChild(r), { btn: i, icon: r };
949
1071
  }
950
- class rt {
1072
+ class pt {
951
1073
  constructor(t, e, i, r) {
952
- s(this, "el");
953
- s(this, "seekBar");
954
- s(this, "volumePanel");
955
- s(this, "settingsMenu");
956
- s(this, "video");
957
- s(this, "labels");
958
- s(this, "playButton");
959
- s(this, "playIcon");
960
- s(this, "pipButton");
961
- s(this, "skipBack");
962
- s(this, "skipForward");
1074
+ o(this, "el");
1075
+ o(this, "seekBar");
1076
+ o(this, "volumePanel");
1077
+ o(this, "settingsMenu");
1078
+ o(this, "video");
1079
+ o(this, "labels");
1080
+ o(this, "playButton");
1081
+ o(this, "playIcon");
1082
+ o(this, "pipButton");
1083
+ o(this, "skipBack");
1084
+ o(this, "skipForward");
963
1085
  /** Etkin sarma süreleri (sn); null = buton gizli. */
964
- s(this, "skipSeconds", { back: null, forward: null });
965
- s(this, "seekingEnabled", !0);
966
- s(this, "leftGroup");
967
- s(this, "loadingTimer", null);
1086
+ o(this, "skipSeconds", { back: null, forward: null });
1087
+ o(this, "seekingEnabled", !0);
1088
+ o(this, "leftGroup");
1089
+ o(this, "loadingTimer", null);
968
1090
  /** Halkayı açık tutan sebepler: 'media' (buffer bekleniyor) ve player'ın verdikleri (ör. 'preroll'). */
969
- s(this, "loadingReasons", /* @__PURE__ */ new Set());
1091
+ o(this, "loadingReasons", /* @__PURE__ */ new Set());
970
1092
  /** Preroll beklenirken video duraklatılmış olsa da kullanıcı oynatmak istedi — buton "duraklat" görünür. */
971
- s(this, "pendingPlay", !1);
1093
+ o(this, "pendingPlay", !1);
972
1094
  /** Sarma butonuyla sarıldığında (sn, negatif = geri) — sarma bildirimi için. */
973
- s(this, "onSkip", null);
974
- s(this, "fullscreenButton");
975
- s(this, "fullscreenIcon");
976
- s(this, "timeLabel");
1095
+ o(this, "onSkip", null);
1096
+ o(this, "fullscreenButton");
1097
+ o(this, "fullscreenIcon");
1098
+ o(this, "timeLabel");
977
1099
  /** Reklam sırasında süre etiketinin yerinde: "Reklam 2/3 · 0:12". */
978
- s(this, "adInfoEl");
979
- s(this, "showRemaining", !1);
1100
+ o(this, "adInfoEl");
1101
+ o(this, "showRemaining", !1);
980
1102
  /** Kompakt düzende (player < 480px) sağ grubun taşındığı üst bar; tam ekran altta kalır. */
981
- s(this, "topEl");
982
- s(this, "bottomRow");
983
- s(this, "rightGroup");
984
- s(this, "fullscreenSlot");
985
- s(this, "compact", !1);
1103
+ o(this, "topEl");
1104
+ o(this, "bottomRow");
1105
+ o(this, "rightGroup");
1106
+ o(this, "fullscreenSlot");
1107
+ o(this, "compact", !1);
986
1108
  /** İnce ses çubuğu (audio.layout: 'compact'): dar ekranda da tek satır — üst bar yok. */
987
- s(this, "forceInline", !1);
1109
+ o(this, "forceInline", !1);
988
1110
  /** İnce ses çubuğunda başlık / sanatçı (+ çalarken ekolayzır) — boşluk elemanının içinde. */
989
- s(this, "barMetaEl", null);
990
- s(this, "spacerEl");
991
- s(this, "resizeObserver");
992
- s(this, "liveBadge");
993
- s(this, "liveText");
994
- s(this, "adMode", !1);
995
- s(this, "hideLiveSeekBar", !1);
1111
+ o(this, "barMetaEl", null);
1112
+ o(this, "spacerEl");
1113
+ o(this, "resizeObserver");
1114
+ o(this, "liveBadge");
1115
+ o(this, "liveText");
1116
+ o(this, "adMode", !1);
1117
+ o(this, "hideLiveSeekBar", !1);
996
1118
  /** Ses modu: tam ekran / PiP yok — dar düzende tam ekran kutusu da boş kalmasın. */
997
- s(this, "audioMode", !1);
998
- s(this, "showPipButton", !0);
999
- s(this, "showFullscreenButton", !0);
1000
- s(this, "callbacks");
1001
- s(this, "row");
1002
- s(this, "extraButtonAnchor");
1119
+ o(this, "audioMode", !1);
1120
+ o(this, "showPipButton", !0);
1121
+ o(this, "showFullscreenButton", !0);
1122
+ o(this, "callbacks");
1123
+ o(this, "row");
1124
+ o(this, "extraButtonAnchor");
1003
1125
  /** Süre etiketine tıklama: geçen süre ↔ kalan süre. */
1004
- s(this, "onTimeClick", (t) => {
1126
+ o(this, "onTimeClick", (t) => {
1005
1127
  t.stopPropagation(), this.toggleTimeMode();
1006
1128
  });
1007
- s(this, "renderPlayState", () => {
1129
+ o(this, "renderPlayState", () => {
1008
1130
  var e;
1009
1131
  const t = this.callbacks.isAdActive() ? this.callbacks.adIsPaused() : this.video.paused && !this.pendingPlay;
1010
- H(this.playIcon, t ? "play" : "pause"), N(this.playButton, t ? this.labels.play : this.labels.pause), (e = this.barMetaEl) == null || e.toggleAttribute("data-playing", !t && !this.callbacks.isAdActive());
1132
+ I(this.playIcon, t ? "play" : "pause"), R(this.playButton, t ? this.labels.play : this.labels.pause), (e = this.barMetaEl) == null || e.toggleAttribute("data-playing", !t && !this.callbacks.isAdActive());
1011
1133
  });
1012
- s(this, "renderTime", () => {
1013
- var r, o;
1134
+ o(this, "renderTime", () => {
1135
+ var r, s;
1014
1136
  const t = this.video.duration === 1 / 0;
1015
1137
  if (this.applySeekBarVisibility(), this.timeLabel.style.display = this.adMode || t ? "none" : "", this.liveBadge.style.display = !this.adMode && t ? "" : "none", !t) {
1016
1138
  const a = this.video.duration, l = this.video.currentTime;
1017
1139
  if (this.showRemaining) {
1018
- const h = Number.isFinite(a) ? Math.floor(a) : 0, m = Math.max(0, h - Math.floor(l));
1019
- this.timeLabel.textContent = `-${R(m)} / ${R(a)}`;
1140
+ const h = Number.isFinite(a) ? Math.floor(a) : 0, c = Math.max(0, h - Math.floor(l));
1141
+ this.timeLabel.textContent = `-${P(c)} / ${P(a)}`;
1020
1142
  } else
1021
- this.timeLabel.textContent = `${R(l)} / ${R(a)}`;
1143
+ this.timeLabel.textContent = `${P(l)} / ${P(a)}`;
1022
1144
  return;
1023
1145
  }
1024
- const e = ((o = (r = this.callbacks).liveSyncPosition) == null ? void 0 : o.call(r)) ?? this.liveEdge(), i = e !== null && e - this.video.currentTime > Le;
1146
+ const e = ((s = (r = this.callbacks).liveSyncPosition) == null ? void 0 : s.call(r)) ?? this.liveEdge(), i = e !== null && e - this.video.currentTime > Oe;
1025
1147
  this.liveBadge.toggleAttribute("data-behind", i);
1026
1148
  });
1027
1149
  /** Buffer bekleniyor (oynarken takılma ya da buffer'lanmamış bir yere atlama). */
1028
- s(this, "onLoadingStart", (t) => {
1150
+ o(this, "onLoadingStart", (t) => {
1029
1151
  t.type === "seeking" && this.video.readyState >= HTMLMediaElement.HAVE_FUTURE_DATA || this.loadingTimer || this.loadingReasons.has("media") || (this.loadingTimer = setTimeout(() => {
1030
1152
  this.loadingTimer = null, this.setLoading("media", !0);
1031
- }, it));
1153
+ }, ht));
1032
1154
  });
1033
- s(this, "onLoadingEnd", (t) => {
1155
+ o(this, "onLoadingEnd", (t) => {
1034
1156
  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));
1035
1157
  });
1036
- s(this, "goToLive", () => {
1158
+ o(this, "goToLive", () => {
1037
1159
  var i, r;
1038
1160
  const t = (r = (i = this.callbacks).liveSyncPosition) == null ? void 0 : r.call(i), e = this.liveEdge();
1039
1161
  e === null && t == null || (this.video.currentTime = t ?? Math.max(0, e - 1), this.video.paused && this.video.play().catch(() => {
1040
1162
  }), this.renderTime());
1041
1163
  });
1042
- 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 $e(t, r), this.seekBar.el.classList.add("hp:pointer-events-auto"), this.seekBar.liveTarget = () => {
1043
- var v, y;
1044
- return ((y = (v = this.callbacks).liveSyncPosition) == null ? void 0 : y.call(v)) ?? null;
1164
+ 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 et(t, r), this.seekBar.el.classList.add("hp:pointer-events-auto"), this.seekBar.liveTarget = () => {
1165
+ var x, g;
1166
+ return ((g = (x = this.callbacks).liveSyncPosition) == null ? void 0 : g.call(x)) ?? null;
1045
1167
  }, this.el.appendChild(this.seekBar.el);
1046
- const o = document.createElement("div");
1047
- o.className = "hp:flex hp:items-center hp:gap-2", this.el.appendChild(o), this.bottomRow = o;
1168
+ const s = document.createElement("div");
1169
+ s.className = "hp:flex hp:items-center hp:gap-2", this.el.appendChild(s), this.bottomRow = s;
1048
1170
  const a = document.createElement("div");
1049
- 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;
1171
+ 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", s.appendChild(a), this.leftGroup = a;
1050
1172
  const l = document.createElement("span");
1051
1173
  l.className = "hp-loading-ring", l.setAttribute("aria-hidden", "true");
1052
1174
  const h = document.createElement("span");
1053
1175
  h.className = "hp-loading-ring-mask", h.appendChild(document.createElement("span")), l.appendChild(h), a.appendChild(l);
1054
- const m = D(r.play, "play", "K");
1055
- this.playButton = m.btn, this.playIcon = m.icon, this.playButton.setAttribute("part", "play-pause-button"), this.playButton.addEventListener("click", () => this.togglePlay()), a.appendChild(this.playButton), this.skipBack = le("back", "skip-back-button"), this.skipBack.btn.addEventListener("click", () => this.skip(-(this.skipSeconds.back ?? 0))), this.skipForward = le("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 We(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: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);
1056
- const d = document.createElement("span");
1057
- d.className = "hp-live-dot", this.liveText = document.createElement("span"), this.liveText.textContent = r.live, this.liveBadge.append(d, this.liveText), this.liveBadge.style.display = "none", this.liveBadge.addEventListener("click", this.goToLive), a.appendChild(this.liveBadge), a.appendChild(this.adInfoEl);
1058
- const p = document.createElement("div");
1059
- p.className = "hp:flex-1 hp:min-w-0", o.appendChild(p), this.spacerEl = p;
1060
- const g = document.createElement("div");
1061
- g.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(g), this.rightGroup = g, this.settingsMenu = new et(t, e, r), g.appendChild(this.settingsMenu.el), this.extraButtonAnchor = this.settingsMenu.el, this.row = g;
1062
- const f = D(r.pip, "pip");
1063
- this.pipButton = f.btn, this.pipButton.addEventListener("click", () => this.togglePip()), g.appendChild(this.pipButton);
1064
- const x = D(r.fullscreenEnter, "fullscreen-enter", "F");
1065
- this.fullscreenButton = x.btn, this.fullscreenIcon = x.icon, this.fullscreenButton.addEventListener("click", () => this.toggleFullscreen()), g.appendChild(this.fullscreenButton), document.pictureInPictureEnabled || (this.pipButton.style.display = "none"), 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);
1066
- for (const v of ae) t.addEventListener(v, this.onLoadingStart);
1067
- for (const v of ne) t.addEventListener(v, this.onLoadingEnd);
1176
+ const c = N(r.play, "play", "K");
1177
+ this.playButton = c.btn, this.playIcon = c.icon, this.playButton.setAttribute("part", "play-pause-button"), this.playButton.addEventListener("click", () => this.togglePlay()), a.appendChild(this.playButton), this.skipBack = ue("back", "skip-back-button"), this.skipBack.btn.addEventListener("click", () => this.skip(-(this.skipSeconds.back ?? 0))), this.skipForward = ue("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 it(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: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);
1178
+ const f = document.createElement("span");
1179
+ f.className = "hp-live-dot", this.liveText = document.createElement("span"), this.liveText.textContent = r.live, this.liveBadge.append(f, this.liveText), this.liveBadge.style.display = "none", this.liveBadge.addEventListener("click", this.goToLive), a.appendChild(this.liveBadge), a.appendChild(this.adInfoEl);
1180
+ const b = document.createElement("div");
1181
+ b.className = "hp:flex-1 hp:min-w-0", s.appendChild(b), this.spacerEl = b;
1182
+ const m = document.createElement("div");
1183
+ m.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", s.appendChild(m), this.rightGroup = m, this.settingsMenu = new nt(t, e, r), m.appendChild(this.settingsMenu.el), this.extraButtonAnchor = this.settingsMenu.el, this.row = m;
1184
+ const d = N(r.pip, "pip");
1185
+ this.pipButton = d.btn, this.pipButton.addEventListener("click", () => this.togglePip()), m.appendChild(this.pipButton);
1186
+ const k = N(r.fullscreenEnter, "fullscreen-enter", "F");
1187
+ this.fullscreenButton = k.btn, this.fullscreenIcon = k.icon, this.fullscreenButton.addEventListener("click", () => this.toggleFullscreen()), m.appendChild(this.fullscreenButton), document.pictureInPictureEnabled || (this.pipButton.style.display = "none"), 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", s.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);
1188
+ for (const x of ce) t.addEventListener(x, this.onLoadingStart);
1189
+ for (const x of de) t.addEventListener(x, this.onLoadingEnd);
1068
1190
  this.renderPlayState(), this.renderTime();
1069
1191
  }
1070
1192
  /** 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. */
@@ -1072,7 +1194,7 @@ class rt {
1072
1194
  var i;
1073
1195
  const t = this.el.getBoundingClientRect().width;
1074
1196
  if (t === 0) return;
1075
- const e = !this.forceInline && t < tt;
1197
+ const e = !this.forceInline && t < lt;
1076
1198
  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.applyButtonVisibility(), this.topEl.appendChild(this.rightGroup)) : (this.rightGroup.appendChild(this.fullscreenButton), this.bottomRow.insertBefore(this.rightGroup, this.fullscreenSlot), this.fullscreenSlot.style.display = "none"));
1077
1199
  }
1078
1200
  /**
@@ -1108,7 +1230,7 @@ class rt {
1108
1230
  this.fullscreenButton.style.display = t ? "" : "none", this.compact && (this.fullscreenSlot.style.display = t && !this.adMode ? "flex" : "none"), this.pipButton.style.display = this.showPipButton && !this.audioMode && document.pictureInPictureEnabled ? "" : "none";
1109
1231
  }
1110
1232
  setFullscreenState(t) {
1111
- H(this.fullscreenIcon, t ? "fullscreen-exit" : "fullscreen-enter"), N(this.fullscreenButton, t ? this.labels.fullscreenExit : this.labels.fullscreenEnter);
1233
+ I(this.fullscreenIcon, t ? "fullscreen-exit" : "fullscreen-enter"), R(this.fullscreenButton, t ? this.labels.fullscreenExit : this.labels.fullscreenEnter);
1112
1234
  }
1113
1235
  /** Dil sonradan değişince (`options.locale`/`labels`) statik (reaktif olarak yeniden render edilmeyen) etiketleri tazeler. */
1114
1236
  /** Geri/ileri sarma butonları — `null` süre o butonu gizler. */
@@ -1121,16 +1243,16 @@ class rt {
1121
1243
  }
1122
1244
  renderSkipButtons() {
1123
1245
  const t = (e, i, r) => {
1124
- 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), N(e.btn, r(i)));
1246
+ 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), R(e.btn, r(i)));
1125
1247
  };
1126
1248
  t(this.skipBack, this.skipSeconds.back, this.labels.skipBack), t(this.skipForward, this.skipSeconds.forward, this.labels.skipForward);
1127
1249
  }
1128
1250
  skip(t) {
1129
1251
  var e;
1130
- !t || !this.seekingEnabled || (Ae(this.video, t), (e = this.onSkip) == null || e.call(this, t));
1252
+ !t || !this.seekingEnabled || (Fe(this.video, t), (e = this.onSkip) == null || e.call(this, t));
1131
1253
  }
1132
1254
  refreshLabels() {
1133
- this.renderPlayState(), this.renderSkipButtons(), N(this.pipButton, this.labels.pip), N(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();
1255
+ this.renderPlayState(), this.renderSkipButtons(), R(this.pipButton, this.labels.pip), R(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();
1134
1256
  }
1135
1257
  /** Reklam modu: seek bar, süre ve sağ grup gizlenir; oynat/duraklat + ses kalır. */
1136
1258
  setAdMode(t) {
@@ -1146,7 +1268,7 @@ class rt {
1146
1268
  this.adInfoEl.style.display = "none", this.adInfoEl.textContent = "";
1147
1269
  return;
1148
1270
  }
1149
- const e = t.total > 1 ? ` ${t.position}/${t.total}` : "", i = t.remaining >= 0 ? ` · ${R(Math.ceil(t.remaining))}` : "";
1271
+ const e = t.total > 1 ? ` ${t.position}/${t.total}` : "", i = t.remaining >= 0 ? ` · ${P(Math.ceil(t.remaining))}` : "";
1150
1272
  this.adInfoEl.textContent = `${this.labels.adLabel}${e}${i}`, this.adInfoEl.style.display = "";
1151
1273
  }
1152
1274
  /** `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. */
@@ -1161,8 +1283,8 @@ class rt {
1161
1283
  }
1162
1284
  /** Plugin'lerin (loop-section vb.) kontrol çubuğuna kendi butonlarını eklemesi için — ayarlar menüsünden önce yerleştirilir. */
1163
1285
  addButton(t, e, i) {
1164
- const { btn: r, icon: o } = D(t, e);
1165
- return r.addEventListener("click", i), this.row.insertBefore(r, this.extraButtonAnchor), { btn: r, icon: o };
1286
+ const { btn: r, icon: s } = N(t, e);
1287
+ return r.addEventListener("click", i), this.row.insertBefore(r, this.extraButtonAnchor), { btn: r, icon: s };
1166
1288
  }
1167
1289
  toggleTimeMode() {
1168
1290
  this.showRemaining = !this.showRemaining, this.renderTime();
@@ -1173,6 +1295,10 @@ class rt {
1173
1295
  getShowRemaining() {
1174
1296
  return this.showRemaining;
1175
1297
  }
1298
+ /** Eklenti butonu: sol grubun sonu ya da ayarlardan önce. */
1299
+ addPluginButton(t, e) {
1300
+ e === "left" ? this.leftGroup.appendChild(t) : this.row.insertBefore(t, this.extraButtonAnchor);
1301
+ }
1176
1302
  /** Plugin'lerin (live-wall-clock vb.) kontrol çubuğuna buton olmayan bir element (ör. saat göstergesi) eklemesi için. */
1177
1303
  addElement(t) {
1178
1304
  this.row.insertBefore(t, this.extraButtonAnchor);
@@ -1230,45 +1356,45 @@ class rt {
1230
1356
  }
1231
1357
  destroy() {
1232
1358
  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);
1233
- for (const t of ae) this.video.removeEventListener(t, this.onLoadingStart);
1234
- for (const t of ne) this.video.removeEventListener(t, this.onLoadingEnd);
1359
+ for (const t of ce) this.video.removeEventListener(t, this.onLoadingStart);
1360
+ for (const t of de) this.video.removeEventListener(t, this.onLoadingEnd);
1235
1361
  this.loadingTimer && clearTimeout(this.loadingTimer), this.resizeObserver.disconnect(), this.topEl.remove(), this.seekBar.destroy(), this.settingsMenu.destroy();
1236
1362
  }
1237
1363
  }
1238
- const st = 450, ot = 60, he = 8, Q = 6, at = /* @__PURE__ */ new Set(["seek-bar", "time-display"]);
1239
- function nt() {
1364
+ const ct = 450, dt = 60, me = 8, W = 6, ut = /* @__PURE__ */ new Set(["seek-bar", "time-display"]);
1365
+ function mt() {
1240
1366
  return typeof window.matchMedia != "function" || window.matchMedia("(hover: hover)").matches;
1241
1367
  }
1242
- class lt {
1368
+ class gt {
1243
1369
  constructor(t) {
1244
- s(this, "el");
1245
- s(this, "labelEl");
1246
- s(this, "keyEl");
1247
- s(this, "showTimer", null);
1248
- s(this, "hideTimer", null);
1249
- s(this, "currentTarget", null);
1250
- s(this, "isOccluded", null);
1370
+ o(this, "el");
1371
+ o(this, "labelEl");
1372
+ o(this, "keyEl");
1373
+ o(this, "showTimer", null);
1374
+ o(this, "hideTimer", null);
1375
+ o(this, "currentTarget", null);
1376
+ o(this, "isOccluded", null);
1251
1377
  /** Gösterim gecikmesi (SHOW_DELAY_MS) içinde bekleyen hedef — `currentTarget` yalnızca gerçekten gösterilince set ediliyor. */
1252
- s(this, "pendingTarget", null);
1253
- s(this, "onMouseOver", (t) => {
1378
+ o(this, "pendingTarget", null);
1379
+ o(this, "onMouseOver", (t) => {
1254
1380
  const e = this.matchTarget(t.target);
1255
1381
  !e || e === this.currentTarget || this.scheduleShow(e);
1256
1382
  });
1257
- s(this, "onMouseOut", (t) => {
1383
+ o(this, "onMouseOut", (t) => {
1258
1384
  const e = this.matchTarget(t.target);
1259
1385
  if (!e || e !== this.currentTarget && e !== this.pendingTarget) return;
1260
1386
  const i = t.relatedTarget;
1261
1387
  i && e.contains(i) || this.scheduleHide();
1262
1388
  });
1263
- s(this, "onFocusIn", (t) => {
1389
+ o(this, "onFocusIn", (t) => {
1264
1390
  const e = this.matchTarget(t.target);
1265
1391
  e && this.show(e);
1266
1392
  });
1267
- s(this, "onFocusOut", (t) => {
1393
+ o(this, "onFocusOut", (t) => {
1268
1394
  const e = this.matchTarget(t.target);
1269
1395
  !e || e !== this.currentTarget || this.hideNow();
1270
1396
  });
1271
- s(this, "hideNow", () => {
1397
+ o(this, "hideNow", () => {
1272
1398
  this.showTimer && (clearTimeout(this.showTimer), this.showTimer = null), this.pendingTarget = null, this.hideTimer && (clearTimeout(this.hideTimer), this.hideTimer = null), this.currentTarget && (this.currentTarget = null, this.el.style.opacity = "0", this.el.style.visibility = "hidden");
1273
1399
  });
1274
1400
  this.mountEl = t, this.el = document.createElement("div"), this.el.setAttribute("part", "tooltip"), this.el.setAttribute("role", "tooltip"), this.el.className = "hp-tooltip hp:absolute hp:z-40 hp:flex hp:items-center hp:gap-1.5 hp:px-2 hp:py-1 hp:rounded hp:text-xs hp:whitespace-nowrap hp:pointer-events-none hp:opacity-0 hp:transition-opacity hp:duration-100", this.el.style.visibility = "hidden", this.labelEl = document.createElement("span"), this.el.appendChild(this.labelEl), this.keyEl = document.createElement("span"), this.keyEl.className = "hp-tooltip-key", this.el.appendChild(this.keyEl), t.appendChild(this.el), t.addEventListener("mouseover", this.onMouseOver), t.addEventListener("mouseout", this.onMouseOut), t.addEventListener("focusin", this.onFocusIn), t.addEventListener("focusout", this.onFocusOut), t.addEventListener("pointerdown", this.hideNow);
@@ -1289,22 +1415,22 @@ class lt {
1289
1415
  this.currentTarget && this.el.style.visibility === "visible" && ((t = this.isOccluded) != null && t.call(this, this.el.getBoundingClientRect())) && this.hideNow();
1290
1416
  }
1291
1417
  matchTarget(t) {
1292
- var o;
1293
- const e = t, i = (o = e == null ? void 0 : e.closest) == null ? void 0 : o.call(e, 'button[aria-label], [role="slider"][aria-label]');
1418
+ var s;
1419
+ const e = t, i = (s = e == null ? void 0 : e.closest) == null ? void 0 : s.call(e, 'button[aria-label], [role="slider"][aria-label]');
1294
1420
  if (!i) return null;
1295
1421
  const r = i.getAttribute("part");
1296
- return r && at.has(r) || i.offsetParent === null && i !== document.activeElement ? null : i;
1422
+ return r && ut.has(r) || i.offsetParent === null && i !== document.activeElement ? null : i;
1297
1423
  }
1298
1424
  scheduleShow(t) {
1299
1425
  this.hideTimer && (clearTimeout(this.hideTimer), this.hideTimer = null), this.showTimer && clearTimeout(this.showTimer), this.pendingTarget = t, this.showTimer = setTimeout(() => {
1300
1426
  this.showTimer = null, this.pendingTarget = null, this.show(t);
1301
- }, st);
1427
+ }, ct);
1302
1428
  }
1303
1429
  scheduleHide() {
1304
- this.showTimer && (clearTimeout(this.showTimer), this.showTimer = null), this.pendingTarget = null, this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = setTimeout(() => this.hideNow(), ot);
1430
+ this.showTimer && (clearTimeout(this.showTimer), this.showTimer = null), this.pendingTarget = null, this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = setTimeout(() => this.hideNow(), dt);
1305
1431
  }
1306
1432
  show(t) {
1307
- if (!nt()) return;
1433
+ if (!mt()) return;
1308
1434
  const e = t.getAttribute("aria-label");
1309
1435
  if (!e) return;
1310
1436
  this.currentTarget = t, this.labelEl.textContent = e;
@@ -1316,26 +1442,53 @@ class lt {
1316
1442
  }
1317
1443
  position(t) {
1318
1444
  const e = this.mountEl.getBoundingClientRect(), i = t.getBoundingClientRect(), r = this.el.getBoundingClientRect();
1319
- let o = i.top - e.top - r.height - he;
1320
- o < Q && (o = i.bottom - e.top + he);
1445
+ let s = i.top - e.top - r.height - me;
1446
+ s < W && (s = i.bottom - e.top + me);
1321
1447
  let a = i.left - e.left + i.width / 2 - r.width / 2;
1322
- const l = e.width - r.width - Q;
1323
- a = Math.max(Q, Math.min(a, l)), this.el.style.top = `${o}px`, this.el.style.left = `${a}px`;
1448
+ const l = e.width - r.width - W;
1449
+ a = Math.max(W, Math.min(a, l)), this.el.style.top = `${s}px`, this.el.style.left = `${a}px`;
1324
1450
  }
1325
1451
  }
1326
- class ht {
1452
+ const ft = 30, bt = 12;
1453
+ class vt {
1327
1454
  constructor(t, e, i) {
1328
- s(this, "host");
1329
- s(this, "video");
1330
- s(this, "toggleFullscreen");
1455
+ o(this, "host");
1456
+ o(this, "video");
1457
+ o(this, "toggleFullscreen");
1331
1458
  /** ←/→ ve J/L ile sarma süresi (sn) — options.keyboardSeekStep. */
1332
- s(this, "seekStep", 5);
1459
+ o(this, "seekStep", 5);
1333
1460
  /** Klavyeyle sarıldığında (sn, negatif = geri) — sarma bildirimi için. */
1334
- s(this, "onSeek", null);
1461
+ o(this, "onSeek", null);
1335
1462
  /** Space/K'den önce sorulur — true dönerse işlenmiştir (ör. preroll beklemesini iptal). */
1336
- s(this, "interceptTogglePlay", null);
1337
- s(this, "onKeyDown", (t) => {
1338
- var r, o, a;
1463
+ o(this, "interceptTogglePlay", null);
1464
+ /** `options.frameRate`; verilmezse oynarken ölçülür. */
1465
+ o(this, "frameRate", null);
1466
+ /** Oynarken ölçülen kare süresi (sn). */
1467
+ o(this, "measuredFrame", null);
1468
+ o(this, "frameSamples", []);
1469
+ o(this, "lastMediaTime", -1);
1470
+ o(this, "frameCb", null);
1471
+ o(this, "resetFrame", () => {
1472
+ this.measuredFrame = null, this.frameSamples = [], this.lastMediaTime = -1;
1473
+ });
1474
+ /** requestVideoFrameCallback ile ardışık karelerin mediaTime farkından kare süresi. */
1475
+ o(this, "measure", () => {
1476
+ const t = this.video;
1477
+ if (this.frameRate || this.measuredFrame || !t.requestVideoFrameCallback || this.frameCb !== null) return;
1478
+ const e = (i, r) => {
1479
+ this.frameCb = null;
1480
+ const s = r.mediaTime - this.lastMediaTime;
1481
+ if (this.lastMediaTime = r.mediaTime, s > 1 / 121 && s < 1 / 7 && this.frameSamples.push(s), this.frameSamples.length >= bt) {
1482
+ const a = [...this.frameSamples].sort((l, h) => l - h);
1483
+ this.measuredFrame = a[0];
1484
+ return;
1485
+ }
1486
+ !t.paused && !t.ended && (this.frameCb = t.requestVideoFrameCallback(e));
1487
+ };
1488
+ this.frameCb = t.requestVideoFrameCallback(e);
1489
+ });
1490
+ o(this, "onKeyDown", (t) => {
1491
+ var r, s, a;
1339
1492
  if (t.defaultPrevented) return;
1340
1493
  const e = t.composedPath()[0];
1341
1494
  if ((t.key === " " || t.key === "Enter") && e instanceof HTMLButtonElement) return;
@@ -1351,7 +1504,7 @@ class ht {
1351
1504
  break;
1352
1505
  case "ArrowRight":
1353
1506
  case "l":
1354
- Number.isFinite(i) && (this.video.currentTime = K(this.video, Math.min(i, this.video.currentTime + this.seekStep)), (o = this.onSeek) == null || o.call(this, this.seekStep)), t.preventDefault();
1507
+ Number.isFinite(i) && (this.video.currentTime = U(this.video, Math.min(i, this.video.currentTime + this.seekStep)), (s = this.onSeek) == null || s.call(this, this.seekStep)), t.preventDefault();
1355
1508
  break;
1356
1509
  case "ArrowLeft":
1357
1510
  case "j":
@@ -1369,52 +1522,69 @@ class ht {
1369
1522
  case "f":
1370
1523
  this.toggleFullscreen(), t.preventDefault();
1371
1524
  break;
1525
+ case ",":
1526
+ case ".":
1527
+ if (t.ctrlKey || t.metaKey || t.altKey || this.video.readyState < 1) break;
1528
+ this.stepFrame(t.key === "." ? 1 : -1), t.preventDefault();
1529
+ break;
1372
1530
  }
1373
1531
  });
1374
- this.host = t, this.video = e, this.toggleFullscreen = i, this.host.addEventListener("keydown", this.onKeyDown);
1532
+ this.host = t, this.video = e, this.toggleFullscreen = i, this.host.addEventListener("keydown", this.onKeyDown), e.addEventListener("playing", this.measure), e.addEventListener("loadstart", this.resetFrame);
1533
+ }
1534
+ /** Bir karenin süresi (sn). */
1535
+ get frameDuration() {
1536
+ return this.frameRate && this.frameRate > 0 ? 1 / this.frameRate : this.measuredFrame ?? 1 / ft;
1537
+ }
1538
+ /** Bir kare ileri / geri; oynuyorsa önce durdurur. */
1539
+ stepFrame(t) {
1540
+ const e = this.video;
1541
+ e.paused || e.pause();
1542
+ const i = Number.isFinite(e.duration) ? e.duration : 1 / 0;
1543
+ e.currentTime = Math.min(i, Math.max(0, e.currentTime + t * this.frameDuration));
1375
1544
  }
1376
1545
  destroy() {
1377
- this.host.removeEventListener("keydown", this.onKeyDown);
1546
+ var t, e;
1547
+ this.host.removeEventListener("keydown", this.onKeyDown), this.video.removeEventListener("playing", this.measure), this.video.removeEventListener("loadstart", this.resetFrame), this.frameCb !== null && ((e = (t = this.video).cancelVideoFrameCallback) == null || e.call(t, this.frameCb));
1378
1548
  }
1379
1549
  }
1380
- class pt {
1550
+ class yt {
1381
1551
  constructor(t) {
1382
- s(this, "el");
1383
- s(this, "video");
1384
- s(this, "show", () => this.el.classList.remove("hp:hidden"));
1385
- s(this, "hide", () => this.el.classList.add("hp:hidden"));
1552
+ o(this, "el");
1553
+ o(this, "video");
1554
+ o(this, "show", () => this.el.classList.remove("hp:hidden"));
1555
+ o(this, "hide", () => this.el.classList.add("hp:hidden"));
1386
1556
  this.video = t, this.el = document.createElement("div"), this.el.className = "hp-loading-spinner hp:absolute hp:inset-0 hp:flex hp:items-center hp:justify-center hp:pointer-events-none hp:hidden", this.el.innerHTML = '<div class="hp:w-10 hp:h-10 hp:border-[3px] hp:border-on-surface/30 hp:border-t-accent hp:rounded-full hp:animate-spin"></div>', t.addEventListener("waiting", this.show), t.addEventListener("playing", this.hide), t.addEventListener("canplay", this.hide), t.addEventListener("pause", this.hide);
1387
1557
  }
1388
1558
  destroy() {
1389
1559
  this.video.removeEventListener("waiting", this.show), this.video.removeEventListener("playing", this.hide), this.video.removeEventListener("canplay", this.hide), this.video.removeEventListener("pause", this.hide);
1390
1560
  }
1391
1561
  }
1392
- const dt = '<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>';
1393
- class ct {
1562
+ const xt = '<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>';
1563
+ class kt {
1394
1564
  constructor(t, e) {
1395
- s(this, "el");
1396
- s(this, "video");
1397
- s(this, "labels");
1398
- s(this, "messageEl");
1399
- s(this, "codeEl");
1400
- s(this, "retryBtn");
1401
- s(this, "retryText");
1402
- s(this, "onRetry", null);
1565
+ o(this, "el");
1566
+ o(this, "video");
1567
+ o(this, "labels");
1568
+ o(this, "messageEl");
1569
+ o(this, "codeEl");
1570
+ o(this, "retryBtn");
1571
+ o(this, "retryText");
1572
+ o(this, "onRetry", null);
1403
1573
  /** Ekran gerçekten açıldı (hp:error için) — kurtarılan hatalarda (yedek kaynak, native → hls.js) çağrılmaz. */
1404
- s(this, "onShown", null);
1405
- s(this, "shouldShow", () => !0);
1574
+ o(this, "onShown", null);
1575
+ o(this, "shouldShow", () => !0);
1406
1576
  /** showStreamError ile açılan hatanın kodu (video.error yokken). */
1407
- s(this, "streamErrorCode", 0);
1408
- s(this, "show", () => {
1409
- !this.video.getAttribute("src") && !this.video.querySelector("source") || ee(this.video.error) || this.shouldShow() && this.open();
1577
+ o(this, "streamErrorCode", 0);
1578
+ o(this, "show", () => {
1579
+ !this.video.getAttribute("src") && !this.video.querySelector("source") || ie(this.video.error) || this.shouldShow() && this.open();
1410
1580
  });
1411
1581
  this.video = t, this.labels = e, this.el = document.createElement("div"), this.el.setAttribute("part", "error-screen"), this.el.setAttribute("role", "alert"), this.el.className = "hp-error-screen";
1412
1582
  const i = document.createElement("div");
1413
1583
  i.className = "hp-error-card";
1414
1584
  const r = document.createElement("div");
1415
- r.className = "hp-error-icon", r.appendChild(z("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 = dt, this.retryText = document.createElement("span"), this.retryText.textContent = e.retry, this.retryBtn.appendChild(this.retryText), this.retryBtn.addEventListener("click", () => {
1416
- var o;
1417
- this.dismiss(), (o = this.onRetry) == null || o.call(this);
1585
+ r.className = "hp-error-icon", r.appendChild(M("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 = xt, this.retryText = document.createElement("span"), this.retryText.textContent = e.retry, this.retryBtn.appendChild(this.retryText), this.retryBtn.addEventListener("click", () => {
1586
+ var s;
1587
+ this.dismiss(), (s = this.onRetry) == null || s.call(this);
1418
1588
  }), i.appendChild(this.retryBtn), this.el.appendChild(i), t.addEventListener("error", this.show);
1419
1589
  }
1420
1590
  setOnRetry(t) {
@@ -1451,11 +1621,12 @@ class ct {
1451
1621
  }
1452
1622
  render() {
1453
1623
  var i;
1454
- const t = ((i = this.video.error) == null ? void 0 : i.code) ?? this.streamErrorCode, e = {
1624
+ const t = this.streamErrorCode === 5 ? 5 : ((i = this.video.error) == null ? void 0 : i.code) ?? this.streamErrorCode, e = {
1455
1625
  1: this.labels.errorAborted,
1456
1626
  2: this.labels.errorNetwork,
1457
1627
  3: this.labels.errorDecode,
1458
- 4: this.labels.errorSrcNotSupported
1628
+ 4: this.labels.errorSrcNotSupported,
1629
+ 5: this.labels.errorDrm
1459
1630
  };
1460
1631
  this.messageEl.textContent = e[t] ?? this.labels.errorGeneric, this.codeEl.textContent = t ? `${this.labels.errorCode} ${t}` : "", this.codeEl.style.display = t ? "" : "none";
1461
1632
  }
@@ -1466,120 +1637,120 @@ class ct {
1466
1637
  this.video.removeEventListener("error", this.show);
1467
1638
  }
1468
1639
  }
1469
- const Y = /* @__PURE__ */ new WeakMap(), Pe = /* @__PURE__ */ new WeakSet(), j = /* @__PURE__ */ new WeakMap();
1470
- function ut(n) {
1471
- return Pe.has(n);
1640
+ const J = /* @__PURE__ */ new WeakMap(), Ne = /* @__PURE__ */ new WeakSet(), K = /* @__PURE__ */ new WeakMap();
1641
+ function wt(n) {
1642
+ return Ne.has(n);
1472
1643
  }
1473
- function Me(n, t, e, i, r) {
1474
- let o = Y.get(n);
1475
- o || Y.set(n, o = /* @__PURE__ */ new Map());
1644
+ function Ie(n, t, e, i, r) {
1645
+ let s = J.get(n);
1646
+ s || J.set(n, s = /* @__PURE__ */ new Map());
1476
1647
  const a = `${t}\0${e}\0${i}\0${r}`;
1477
- let l = o.get(a);
1478
- return l || (l = n.addTextTrack(e, i, r), Pe.add(l), o.set(a, l)), l;
1648
+ let l = s.get(a);
1649
+ return l || (l = n.addTextTrack(e, i, r), Ne.add(l), s.set(a, l)), l;
1479
1650
  }
1480
- function Be(n, t) {
1481
- for (const [e, i] of Y.get(n) ?? [])
1651
+ function De(n, t) {
1652
+ for (const [e, i] of J.get(n) ?? [])
1482
1653
  if (e.startsWith(`${t}\0`)) {
1483
1654
  i.mode = "hidden";
1484
1655
  for (const r of Array.from(i.cues ?? [])) i.removeCue(r);
1485
1656
  i.mode = "disabled";
1486
1657
  }
1487
1658
  }
1488
- function mt(n, t) {
1489
- Re(n);
1490
- const e = j.get(n), i = [];
1659
+ function Et(n, t) {
1660
+ He(n);
1661
+ const e = K.get(n), i = [];
1491
1662
  for (const r of t) {
1492
- const o = Me(n, "options", "subtitles", r.label, r.srclang);
1493
- o.mode = r.default ? "hidden" : "disabled", i.push({ label: r.label, track: o }), ft(n, o, r.src, e);
1663
+ const s = Ie(n, "options", "subtitles", r.label, r.srclang);
1664
+ s.mode = r.default ? "hidden" : "disabled", i.push({ label: r.label, track: s }), St(n, s, r.src, e);
1494
1665
  }
1495
1666
  return i;
1496
1667
  }
1497
- function Re(n) {
1498
- j.set(n, (j.get(n) ?? 0) + 1), Be(n, "options");
1668
+ function He(n) {
1669
+ K.set(n, (K.get(n) ?? 0) + 1), De(n, "options");
1499
1670
  }
1500
- function gt(n, t) {
1671
+ function Ct(n, t) {
1501
1672
  let e = null;
1502
1673
  for (const { label: i, track: r } of n) {
1503
- const o = i === t;
1504
- r.mode = o ? "hidden" : "disabled", o && (e = r);
1674
+ const s = i === t;
1675
+ r.mode = s ? "hidden" : "disabled", s && (e = r);
1505
1676
  }
1506
1677
  return e;
1507
1678
  }
1508
- async function ft(n, t, e, i) {
1679
+ async function St(n, t, e, i) {
1509
1680
  let r;
1510
1681
  try {
1511
- const o = await fetch(e);
1512
- if (!o.ok) throw new Error(`HTTP ${o.status}`);
1513
- r = await o.text();
1514
- } catch (o) {
1515
- console.warn("[HopePlayer] altyazı yüklenemedi:", e, o), n.dispatchEvent(new CustomEvent("hp-internal:subtitle-error", { detail: { src: e, message: String(o) } }));
1682
+ const s = await fetch(e);
1683
+ if (!s.ok) throw new Error(`HTTP ${s.status}`);
1684
+ r = await s.text();
1685
+ } catch (s) {
1686
+ console.warn("[HopePlayer] altyazı yüklenemedi:", e, s), n.dispatchEvent(new CustomEvent("hp-internal:subtitle-error", { detail: { src: e, message: String(s) } }));
1516
1687
  return;
1517
1688
  }
1518
- if (!(j.get(n) !== i || typeof VTTCue != "function"))
1519
- for (const o of vt(r)) {
1520
- const a = new VTTCue(o.start, o.end, o.text);
1521
- yt(a, o.settings), t.addCue(a);
1689
+ if (!(K.get(n) !== i || typeof VTTCue != "function"))
1690
+ for (const s of At(r)) {
1691
+ const a = new VTTCue(s.start, s.end, s.text);
1692
+ Lt(a, s.settings), t.addCue(a);
1522
1693
  }
1523
1694
  }
1524
- const pe = "(?:\\d+:)?\\d{1,2}:\\d{2}(?:[.,]\\d{1,3})?", bt = new RegExp(`^(${pe})\\s+-->\\s+(${pe})(.*)$`);
1525
- function de(n) {
1695
+ const ge = "(?:\\d+:)?\\d{1,2}:\\d{2}(?:[.,]\\d{1,3})?", Tt = new RegExp(`^(${ge})\\s+-->\\s+(${ge})(.*)$`);
1696
+ function fe(n) {
1526
1697
  return n.replace(",", ".").split(":").reduce((t, e) => t * 60 + Number(e), 0);
1527
1698
  }
1528
- function vt(n) {
1699
+ function At(n) {
1529
1700
  const t = [], e = n.replace(/^/, "").replace(/\r\n?/g, `
1530
1701
  `).split(/\n{2,}/);
1531
1702
  for (const i of e) {
1532
1703
  const r = i.split(`
1533
- `), o = r.findIndex((h) => h.includes("-->"));
1534
- if (o < 0) continue;
1535
- const a = bt.exec(r[o].trim());
1704
+ `), s = r.findIndex((h) => h.includes("-->"));
1705
+ if (s < 0) continue;
1706
+ const a = Tt.exec(r[s].trim());
1536
1707
  if (!a) continue;
1537
- const l = r.slice(o + 1).join(`
1708
+ const l = r.slice(s + 1).join(`
1538
1709
  `);
1539
- l.trim() && t.push({ start: de(a[1]), end: de(a[2]), settings: a[3].trim(), text: l });
1710
+ l.trim() && t.push({ start: fe(a[1]), end: fe(a[2]), settings: a[3].trim(), text: l });
1540
1711
  }
1541
1712
  return t;
1542
1713
  }
1543
- function yt(n, t) {
1714
+ function Lt(n, t) {
1544
1715
  for (const e of t.split(/\s+/)) {
1545
1716
  const [i, r] = e.split(":");
1546
1717
  if (!i || !r) continue;
1547
- const [o] = r.split(",");
1718
+ const [s] = r.split(",");
1548
1719
  try {
1549
- 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));
1720
+ i === "align" ? n.align = s : i === "vertical" ? n.vertical = s : i === "size" ? n.size = parseFloat(s) : i === "position" ? n.position = parseFloat(s) : i === "line" && (n.snapToLines = !s.endsWith("%"), n.line = parseFloat(s));
1550
1721
  } catch {
1551
1722
  }
1552
1723
  }
1553
1724
  }
1554
- const _ = 6, xt = 20, kt = 14, wt = 6, Et = 10, Ct = 3, ze = "hope-caption-row", Oe = "hope-caption-font-size", ce = "hope-caption-bg-color", ue = "hope-caption-text-color", St = {
1725
+ const V = 6, Pt = 20, Mt = 14, Bt = 6, Rt = 10, zt = 3, qe = "hope-caption-row", Ge = "hope-caption-font-size", be = "hope-caption-bg-color", ve = "hope-caption-text-color", Ft = {
1555
1726
  small: 0.78,
1556
1727
  normal: 1,
1557
1728
  large: 1.35
1558
- }, me = [
1729
+ }, ye = [
1559
1730
  "rgba(0, 0, 0, 0.75)",
1560
1731
  "rgba(0, 0, 0, 0)",
1561
1732
  "rgba(255, 255, 255, 0.85)",
1562
1733
  "rgba(183, 28, 28, 0.8)",
1563
1734
  "rgba(13, 71, 161, 0.8)",
1564
1735
  "rgba(27, 94, 32, 0.8)"
1565
- ], ge = ["#ffffff", "#000000", "#ffeb3b", "#ff5252", "#18ffff", "#69f0ae"];
1566
- function Tt() {
1736
+ ], xe = ["#ffffff", "#000000", "#ffeb3b", "#ff5252", "#18ffff", "#69f0ae"];
1737
+ function Ot() {
1567
1738
  try {
1568
- const n = window.localStorage.getItem(ze), t = n === null ? 0 : Number(n);
1569
- return Number.isFinite(t) && t >= 0 && t < _ ? t : 0;
1739
+ const n = window.localStorage.getItem(qe), t = n === null ? 0 : Number(n);
1740
+ return Number.isFinite(t) && t >= 0 && t < V ? t : 0;
1570
1741
  } catch {
1571
1742
  return 0;
1572
1743
  }
1573
1744
  }
1574
- function At() {
1745
+ function Nt() {
1575
1746
  try {
1576
- const n = window.localStorage.getItem(Oe);
1747
+ const n = window.localStorage.getItem(Ge);
1577
1748
  return n === "small" || n === "normal" || n === "large" ? n : "normal";
1578
1749
  } catch {
1579
1750
  return "normal";
1580
1751
  }
1581
1752
  }
1582
- function fe(n, t) {
1753
+ function ke(n, t) {
1583
1754
  const e = t[0] ?? "";
1584
1755
  try {
1585
1756
  const i = window.localStorage.getItem(n);
@@ -1588,28 +1759,28 @@ function fe(n, t) {
1588
1759
  return e;
1589
1760
  }
1590
1761
  }
1591
- class G {
1762
+ class D {
1592
1763
  constructor(t, e, i, r) {
1593
- s(this, "layerEl");
1594
- s(this, "bubbleEl");
1595
- s(this, "videoArea");
1596
- s(this, "seekBarEl");
1597
- s(this, "labels");
1598
- s(this, "activeTrack", null);
1599
- s(this, "fontSize", At());
1600
- s(this, "bgColor", fe(ce, me));
1601
- s(this, "textColor", fe(ue, ge));
1602
- s(this, "rowIndex", Tt());
1603
- s(this, "dragging", !1);
1764
+ o(this, "layerEl");
1765
+ o(this, "bubbleEl");
1766
+ o(this, "videoArea");
1767
+ o(this, "seekBarEl");
1768
+ o(this, "labels");
1769
+ o(this, "activeTrack", null);
1770
+ o(this, "fontSize", Nt());
1771
+ o(this, "bgColor", ke(be, ye));
1772
+ o(this, "textColor", ke(ve, xe));
1773
+ o(this, "rowIndex", Ot());
1774
+ o(this, "dragging", !1);
1604
1775
  /** Kontrol çubuğu görünür mü — görünürken altyazı seek bar'ın üstünde, değilken en altta. */
1605
- s(this, "chromeVisible", !0);
1606
- s(this, "dragStartClientY", 0);
1607
- s(this, "dragStartBottomPx", 0);
1608
- s(this, "dragMoved", !1);
1609
- s(this, "rafId", null);
1610
- s(this, "pendingDeltaPx", 0);
1611
- s(this, "resizeObserver");
1612
- s(this, "onCueChange", () => {
1776
+ o(this, "chromeVisible", !0);
1777
+ o(this, "dragStartClientY", 0);
1778
+ o(this, "dragStartBottomPx", 0);
1779
+ o(this, "dragMoved", !1);
1780
+ o(this, "rafId", null);
1781
+ o(this, "pendingDeltaPx", 0);
1782
+ o(this, "resizeObserver");
1783
+ o(this, "onCueChange", () => {
1613
1784
  var e;
1614
1785
  const t = (e = this.activeTrack) == null ? void 0 : e.activeCues;
1615
1786
  if (!this.activeTrack || !t || t.length === 0) {
@@ -1624,20 +1795,20 @@ class G {
1624
1795
  }
1625
1796
  this.bubbleEl.classList.add("hp-caption-visible");
1626
1797
  });
1627
- s(this, "onPointerDown", (t) => {
1798
+ o(this, "onPointerDown", (t) => {
1628
1799
  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));
1629
1800
  });
1630
- s(this, "onPointerMove", (t) => {
1631
- this.dragging && (this.pendingDeltaPx = t.clientY - this.dragStartClientY, Math.abs(this.pendingDeltaPx) > Ct && (this.dragMoved = !0), this.rafId === null && (this.rafId = requestAnimationFrame(this.applyPendingDrag)));
1801
+ o(this, "onPointerMove", (t) => {
1802
+ this.dragging && (this.pendingDeltaPx = t.clientY - this.dragStartClientY, Math.abs(this.pendingDeltaPx) > zt && (this.dragMoved = !0), this.rafId === null && (this.rafId = requestAnimationFrame(this.applyPendingDrag)));
1632
1803
  });
1633
- s(this, "applyPendingDrag", () => {
1804
+ o(this, "applyPendingDrag", () => {
1634
1805
  if (this.rafId = null, !this.dragging) return;
1635
1806
  const { min: t, max: e } = this.bounds(), i = Math.min(e, Math.max(t, this.dragStartBottomPx - this.pendingDeltaPx)), r = this.dragStartBottomPx - i;
1636
1807
  this.bubbleEl.style.transform = `translateX(-50%) translateY(${r}px)`;
1637
1808
  });
1638
- s(this, "onPointerUp", (t) => {
1809
+ o(this, "onPointerUp", (t) => {
1639
1810
  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;
1640
- 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 * (_ - 1));
1811
+ const { min: e, max: i } = this.bounds(), r = Math.min(i, Math.max(e, this.dragStartBottomPx - this.pendingDeltaPx)), s = i > e ? (r - e) / (i - e) : 0, a = Math.round(s * (V - 1));
1641
1812
  this.setRowIndex(a, !0);
1642
1813
  });
1643
1814
  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();
@@ -1652,7 +1823,7 @@ class G {
1652
1823
  setFontSize(t) {
1653
1824
  this.fontSize = t, this.applyFontSizeVar(), this.recomputePosition();
1654
1825
  try {
1655
- window.localStorage.setItem(Oe, t);
1826
+ window.localStorage.setItem(Ge, t);
1656
1827
  } catch {
1657
1828
  }
1658
1829
  }
@@ -1662,7 +1833,7 @@ class G {
1662
1833
  setBgColor(t) {
1663
1834
  this.bgColor = t, this.bubbleEl.style.setProperty("--hp-caption-bg", t);
1664
1835
  try {
1665
- window.localStorage.setItem(ce, t);
1836
+ window.localStorage.setItem(be, t);
1666
1837
  } catch {
1667
1838
  }
1668
1839
  }
@@ -1672,7 +1843,7 @@ class G {
1672
1843
  setTextColor(t) {
1673
1844
  this.textColor = t, this.bubbleEl.style.setProperty("--hp-caption-text", t);
1674
1845
  try {
1675
- window.localStorage.setItem(ue, t);
1846
+ window.localStorage.setItem(ve, t);
1676
1847
  } catch {
1677
1848
  }
1678
1849
  }
@@ -1685,14 +1856,14 @@ class G {
1685
1856
  this.labels = t, this.bubbleEl.setAttribute("aria-label", t.captionDragHandle);
1686
1857
  }
1687
1858
  applyFontSizeVar() {
1688
- this.bubbleEl.style.setProperty("--hp-caption-size-multiplier", String(St[this.fontSize]));
1859
+ this.bubbleEl.style.setProperty("--hp-caption-size-multiplier", String(Ft[this.fontSize]));
1689
1860
  }
1690
1861
  bounds() {
1691
- const t = this.videoArea.getBoundingClientRect(), e = this.seekBarEl.getBoundingClientRect(), r = (this.bubbleEl.getBoundingClientRect().height || 32) + xt, 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") ? wt : kt))) : o, l = Math.max(a, Math.round(t.height - r));
1862
+ const t = this.videoArea.getBoundingClientRect(), e = this.seekBarEl.getBoundingClientRect(), r = (this.bubbleEl.getBoundingClientRect().height || 32) + Pt, s = Math.max(Rt, 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") ? Bt : Mt))) : s, l = Math.max(a, Math.round(t.height - r));
1692
1863
  return { min: a, max: l };
1693
1864
  }
1694
1865
  pxForRow(t) {
1695
- const { min: e, max: i } = this.bounds(), r = t / (_ - 1);
1866
+ const { min: e, max: i } = this.bounds(), r = t / (V - 1);
1696
1867
  return Math.round(e + r * (i - e));
1697
1868
  }
1698
1869
  /**
@@ -1711,11 +1882,11 @@ class G {
1711
1882
  }
1712
1883
  /** FLIP: bottom anında yazılır, yalnızca transform animasyonlanır — bottom'u animasyonlamak bırakınca zıplatıyordu. */
1713
1884
  setRowIndex(t, e) {
1714
- this.rowIndex = Math.min(_ - 1, Math.max(0, t));
1885
+ this.rowIndex = Math.min(V - 1, Math.max(0, t));
1715
1886
  const i = this.pxForRow(this.rowIndex), r = this.visualBottomPx();
1716
1887
  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"));
1717
1888
  try {
1718
- window.localStorage.setItem(ze, String(this.rowIndex));
1889
+ window.localStorage.setItem(qe, String(this.rowIndex));
1719
1890
  } catch {
1720
1891
  }
1721
1892
  }
@@ -1731,25 +1902,25 @@ class G {
1731
1902
  this.activeTrack && this.activeTrack.removeEventListener("cuechange", this.onCueChange), this.resizeObserver.disconnect(), this.rafId !== null && cancelAnimationFrame(this.rafId), this.bubbleEl.removeEventListener("pointerdown", this.onPointerDown);
1732
1903
  }
1733
1904
  }
1734
- s(G, "BG_COLOR_PRESETS", me), s(G, "TEXT_COLOR_PRESETS", ge);
1735
- class Lt {
1905
+ o(D, "BG_COLOR_PRESETS", ye), o(D, "TEXT_COLOR_PRESETS", xe);
1906
+ class It {
1736
1907
  constructor(t) {
1737
- s(this, "el");
1738
- s(this, "bufferedEl");
1739
- s(this, "playedEl");
1740
- s(this, "visible", !1);
1741
- s(this, "rafId", null);
1742
- s(this, "sync", () => {
1908
+ o(this, "el");
1909
+ o(this, "bufferedEl");
1910
+ o(this, "playedEl");
1911
+ o(this, "visible", !1);
1912
+ o(this, "rafId", null);
1913
+ o(this, "sync", () => {
1743
1914
  this.render(), this.visible && !this.video.paused ? this.start() : this.stop();
1744
1915
  });
1745
- s(this, "render", () => {
1916
+ o(this, "render", () => {
1746
1917
  const t = this.video.duration, e = Number.isFinite(t) && t > 0;
1747
1918
  if (this.el.toggleAttribute("data-disabled", !e), !this.visible || !e) return;
1748
1919
  this.playedEl.style.transform = `scaleX(${Math.min(1, this.video.currentTime / t)})`;
1749
1920
  const { buffered: i } = this.video;
1750
1921
  let r = 0;
1751
- for (let o = 0; o < i.length; o++)
1752
- i.start(o) <= this.video.currentTime && (r = Math.max(r, i.end(o)));
1922
+ for (let s = 0; s < i.length; s++)
1923
+ i.start(s) <= this.video.currentTime && (r = Math.max(r, i.end(s)));
1753
1924
  this.bufferedEl.style.transform = `scaleX(${Math.min(1, r / t)})`;
1754
1925
  });
1755
1926
  this.video = t, this.el = document.createElement("div"), this.el.className = "hp-mini-progress", this.el.setAttribute("part", "mini-progress"), this.el.setAttribute("aria-hidden", "true"), this.bufferedEl = document.createElement("div"), this.bufferedEl.className = "hp-mini-progress-fill hp-mini-progress-buffered", this.playedEl = document.createElement("div"), this.playedEl.className = "hp-mini-progress-fill hp-mini-progress-played", this.el.append(this.bufferedEl, this.playedEl), t.addEventListener("play", this.sync), t.addEventListener("pause", this.sync), t.addEventListener("timeupdate", this.render), t.addEventListener("progress", this.render), t.addEventListener("durationchange", this.render);
@@ -1771,19 +1942,19 @@ class Lt {
1771
1942
  this.rafId !== null && cancelAnimationFrame(this.rafId), this.rafId = null;
1772
1943
  }
1773
1944
  }
1774
- const Pt = 1e3, Mt = 800, Bt = '<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>';
1775
- class Rt {
1945
+ const Dt = 1e3, Ht = 800, qt = '<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>';
1946
+ class Gt {
1776
1947
  constructor(t) {
1777
- s(this, "el");
1778
- s(this, "valueEl");
1779
- s(this, "unitEl");
1780
- s(this, "liveEl");
1781
- s(this, "total", 0);
1782
- s(this, "lastAt", 0);
1783
- s(this, "hideTimer", null);
1948
+ o(this, "el");
1949
+ o(this, "valueEl");
1950
+ o(this, "unitEl");
1951
+ o(this, "liveEl");
1952
+ o(this, "total", 0);
1953
+ o(this, "lastAt", 0);
1954
+ o(this, "hideTimer", null);
1784
1955
  this.labels = t, this.el = document.createElement("div"), this.el.className = "hp-seek-fb", this.el.setAttribute("part", "seek-feedback");
1785
1956
  const e = document.createElement("span");
1786
- e.className = "hp-seek-fb-chevrons", e.innerHTML = Bt.repeat(3);
1957
+ e.className = "hp-seek-fb-chevrons", e.innerHTML = qt.repeat(3);
1787
1958
  const i = document.createElement("span");
1788
1959
  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);
1789
1960
  }
@@ -1791,27 +1962,27 @@ class Rt {
1791
1962
  show(t) {
1792
1963
  if (!t) return;
1793
1964
  const e = Date.now(), i = Math.sign(t) === Math.sign(this.total);
1794
- this.total = i && e - this.lastAt < Pt ? this.total + t : t, this.lastAt = e;
1795
- const r = Math.round(Math.abs(this.total) * 10) / 10, o = this.total > 0;
1796
- 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(() => {
1965
+ this.total = i && e - this.lastAt < Dt ? this.total + t : t, this.lastAt = e;
1966
+ const r = Math.round(Math.abs(this.total) * 10) / 10, s = this.total > 0;
1967
+ this.el.dataset.side = s ? "forward" : "back", this.valueEl.textContent = `${s ? "+" : "−"}${r}`, this.unitEl.textContent = this.labels.secondsShort, this.liveEl.textContent = (s ? 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(() => {
1797
1968
  this.el.removeAttribute("data-visible"), this.total = 0;
1798
- }, Mt);
1969
+ }, Ht);
1799
1970
  }
1800
1971
  destroy() {
1801
1972
  this.hideTimer && clearTimeout(this.hideTimer), this.el.remove();
1802
1973
  }
1803
1974
  }
1804
- class zt {
1975
+ class Vt {
1805
1976
  constructor(t) {
1806
- s(this, "el");
1807
- s(this, "open", !1);
1808
- s(this, "close", () => {
1977
+ o(this, "el");
1978
+ o(this, "open", !1);
1979
+ o(this, "close", () => {
1809
1980
  this.open && (this.open = !1, this.el.removeAttribute("data-open"), document.removeEventListener("pointerdown", this.onOutside, !0), document.removeEventListener("keydown", this.onKeyDown, !0), window.removeEventListener("blur", this.close), window.removeEventListener("resize", this.close), window.removeEventListener("scroll", this.close, !0));
1810
1981
  });
1811
- s(this, "onOutside", (t) => {
1982
+ o(this, "onOutside", (t) => {
1812
1983
  t.composedPath().includes(this.el) || this.close();
1813
1984
  });
1814
- s(this, "onKeyDown", (t) => {
1985
+ o(this, "onKeyDown", (t) => {
1815
1986
  t.key === "Escape" && (t.stopPropagation(), this.close());
1816
1987
  });
1817
1988
  this.container = t, this.el = document.createElement("div"), this.el.className = "hp-context-menu", this.el.setAttribute("part", "context-menu"), this.el.setAttribute("role", "menu"), this.el.addEventListener("contextmenu", (e) => e.preventDefault()), t.appendChild(this.el);
@@ -1821,46 +1992,46 @@ class zt {
1821
1992
  }
1822
1993
  /** `clientX/Y` ekran koordinatı — menü player'ın içinde kalacak şekilde kaydırılır. */
1823
1994
  show(t, e, i) {
1824
- var m;
1995
+ var c;
1825
1996
  this.el.replaceChildren(
1826
- ...i.map((d) => {
1827
- const p = document.createElement(d.onSelect ? "button" : "div");
1828
- p.className = "hp-context-menu-item", d.onSelect ? (p.type = "button", p.setAttribute("role", "menuitem"), p.addEventListener("click", () => {
1829
- this.close(), d.onSelect();
1830
- })) : p.setAttribute("data-info", "");
1831
- const g = document.createElement("span");
1832
- if (g.textContent = d.label, p.appendChild(g), d.meta) {
1833
- const f = document.createElement("span");
1834
- f.className = "hp-context-menu-meta", f.textContent = d.meta, p.appendChild(f);
1997
+ ...i.map((f) => {
1998
+ const b = document.createElement(f.onSelect ? "button" : "div");
1999
+ b.className = "hp-context-menu-item", f.onSelect ? (b.type = "button", b.setAttribute("role", "menuitem"), b.addEventListener("click", () => {
2000
+ this.close(), f.onSelect();
2001
+ })) : b.setAttribute("data-info", "");
2002
+ const m = document.createElement("span");
2003
+ if (m.textContent = f.label, b.appendChild(m), f.meta) {
2004
+ const d = document.createElement("span");
2005
+ d.className = "hp-context-menu-meta", d.textContent = f.meta, b.appendChild(d);
1835
2006
  }
1836
- return p;
2007
+ return b;
1837
2008
  })
1838
2009
  ), this.el.setAttribute("data-open", ""), this.open = !0;
1839
- 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)), h = Math.max(4, Math.min(e - r.top, r.height - a - 4));
1840
- this.el.style.left = `${l}px`, this.el.style.top = `${h}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);
2010
+ const r = this.container.getBoundingClientRect(), { width: s, height: a } = this.el.getBoundingClientRect(), l = Math.max(4, Math.min(t - r.left, r.width - s - 4)), h = Math.max(4, Math.min(e - r.top, r.height - a - 4));
2011
+ this.el.style.left = `${l}px`, this.el.style.top = `${h}px`, (c = this.el.querySelector("button")) == null || c.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);
1841
2012
  }
1842
2013
  destroy() {
1843
2014
  this.close(), this.el.remove();
1844
2015
  }
1845
2016
  }
1846
- const Ot = 3e3, be = 200;
1847
- class Nt {
2017
+ const _t = 3e3, we = 200;
2018
+ class Ut {
1848
2019
  constructor() {
1849
- s(this, "list", []);
2020
+ o(this, "list", []);
1850
2021
  /** Kayıt eklenince / temizlenince (açık panel canlı güncellenir). */
1851
- s(this, "onChange", null);
2022
+ o(this, "onChange", null);
1852
2023
  }
1853
2024
  get entries() {
1854
2025
  return this.list;
1855
2026
  }
1856
2027
  add(t) {
1857
- var r, o;
2028
+ var r, s;
1858
2029
  const e = Date.now(), i = this.list[this.list.length - 1];
1859
- if (i && e - i.time < Ot && i.source === t.source && i.message === t.message && JSON.stringify(i.details ?? {}) === JSON.stringify(t.details ?? {})) {
2030
+ if (i && e - i.time < _t && i.source === t.source && i.message === t.message && JSON.stringify(i.details ?? {}) === JSON.stringify(t.details ?? {})) {
1860
2031
  i.count = (i.count ?? 1) + 1, i.time = e, (r = this.onChange) == null || r.call(this);
1861
2032
  return;
1862
2033
  }
1863
- this.list.push({ time: e, ...t }), this.list.length > be && this.list.splice(0, this.list.length - be), (o = this.onChange) == null || o.call(this);
2034
+ this.list.push({ time: e, ...t }), this.list.length > we && this.list.splice(0, this.list.length - we), (s = this.onChange) == null || s.call(this);
1864
2035
  }
1865
2036
  clear() {
1866
2037
  var t;
@@ -1869,80 +2040,107 @@ class Nt {
1869
2040
  /** Destek ekibine yapıştırılabilir düz metin. */
1870
2041
  toText() {
1871
2042
  return this.list.map((t) => {
1872
- 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})` : "";
2043
+ const e = Object.entries(t.details ?? {}).filter(([, r]) => r !== void 0 && r !== "").map(([r, s]) => `${r}=${s}`).join(" "), i = t.count && t.count > 1 ? ` (x${t.count})` : "";
1873
2044
  return `${new Date(t.time).toISOString()} [${t.source}]${t.fatal ? " [fatal]" : ""} ${t.message}${i}${e ? ` | ${e}` : ""}`;
1874
2045
  }).join(`
1875
2046
  `);
1876
2047
  }
1877
2048
  }
1878
- const Ft = '@font-face{font-family:hope-icons;src:url(data:font/woff2;base64,d09GMgABAAAAAAuMAAsAAAAAIuAAAAs8AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACEegq1PK4ZATYCJANUCywABCAFhC4HggobTB4jESaVTgwydRbGzrR7EFKamp4EGD6+83WPOlVtFufKNoQP3FMw3+XD4QURPF85y/cFhm57sFsyDKE9ixwGQaUcQJ7ZIC+eQ8xnVOhGN8/3btY0zAxpnZKEriMToI4M0DphaJ13gQpdD9QMOzX/XVPOfcV/T/yaqq5tmHwMC1LiMW2M97StYfS0oH8OXi4E3rrH67vHaIoxiv5vLbUMRfxFY8K64ExmZwJ7cxtC3H3Z4wmC7KsikMCsgIVilHUVpsLGnRG+BsOtHVjBqsXBGhPUj7waBFAsZD3OLrsNDoOOU49i7NXwYEMF0upy6klW9QrzCLyK6kIBISd7TPlNbsMH2UWOB3YPX/k/VLkKHHwXdk4HHN81AV7PyHrl9fbrzJe/2aE7EfbuAD7gAjOKRcnF1Qnn4sb8TEgVL8FjD7p7D4Gst92GDB+rvSsQHFw8/Pl/8/IUKKLQlCjTQSdddNNDLwYkBxtcgltRaCDDBQQywIEMraPIAHiQAT5kQA4yIA8Z2kSRAShCBijIAA0ZUIIMKEMGdEAGdEIGdEEGdEMG9EAG9EIWgYG53XcDuAzUNaDHLMu7Exx8Y+LmFQ0Gny4D48WP8/C2nFvbdSu+yqveXpKqPK/CiEccUV4+iZ0pm2EUkqiKDXcd9PfPrB0YfnXh4qqKcW16GxGVhuMH0vYtGw6G4nLSKt1wP87cA1qLcsuOQt/4kLgbH1yC3vhqwo0fPBEd49tvjynxwTeL9NHc+M03BdRkMFrEDZxQ1HNsByFJ3d2k8dokTtujRGBuSgXmoZmNiDmoN5iwpLJ5J0Tr41F3pErSxE5r7YjXSQQscVd8q5terDHDs8Q8PgHLMj5LRBqlokk06lyJCkQ1ojKL8GTJbp+pRqUoUU3YINumkliJTsEUYbtUoiPRaLAIFK1z5cVTJ2ReUwR8/dQIb8cIaoW8a8qZCqJqhSxKWynJ4ylmWJAAS2N8Otkda/XeYRjsFyhj0rDRyoBBQSSChuwAMUpBS7oUr8QQgwZPTvyG6TaD70XE080iPLU+2UK0IxcuwsaqY13JWdvYED0erfTCAq89174mlFHPyjRL7uUwQdC6Trpcd+b0iOi29xiWL3InU0LkCsvsy6G9BA4lMzQOpQ8PBCjHTWhMMNGKKnOOoWJYhYrB2moLyoq2bngiCJQZM8R5IkifCJQ5goTQ5HlFwrAehhLUAupcD9ProQQUUUSfV2trx63V4WRIncdt+rjVIUUU0ecBYyrGYKuWLlNNAvfGvXUfXmTL52uuru/v7+ubca6k1O9vacwfGBgcXDDtrFSq1uzpaVl2zK5t1us1m8YES1N7ZGmJ1aCgJyYqtEUo6tqiYiGb1g02x7EmzTWBADFed7EHi/aCejQCJkJqXAo9F9IGgrPA18xCDZFjbGvRpqFhTCs+G8h5j++UWiY24kRj5t/5hLBemwd0qqZHf6ydh5oGW72xM1nxScV3a7RaScghJ5eiSkooPGUSol8PCjVLIA5YN0o9FVFaL3Y+a5idfc3M9VzXQ7dbJm7EYA4/tfK6bnB72X+HHeq71KJGf+n1/ua0g+3iSDY1Rn86/LDOC2c3NZeOeT1xWrvD+vlTXsJdzevs0NxhrrGpuSnhG3V7eG32QPcvb+iu61Tczs57l6Tb/uRmmtisNR96nzl3acMykuhQDOtjLCwhLIZZTFNjQ1RMTmDZxxKqFmU+GWGZhqOamghT+dB+JEnY6jEnjRraqlppEURabryN0YjkbUH5d5/AImVJfjkqY2Sn8jZJln/DPVimfaBMjqzXywJpN92LJHBqDKJ2REqL4L6B334DTt0UEimLqqpSfk+EBMoUVY0yKvz+b0YHUfpzE7MryTECgsHCr/9mtJFAPdD7v9agSRd4z9+LZRKKYRwLERmnLBt4vdmKpmEzFW2FXSB57eqpxzLFa9sNCvrqlNMDq31Vk3U1wsHWtoynt7uIK9EZc55RXHDa0dJjYzSKO25OG1+Hek2oHOjv57Gs4XctpvERXksqjMoi1kf0WCKUhRJaKpLSojFGBTvmr+cAB8u9BUbg1hXAO7Aei/KSJuspYpoeJuOkIrYLlMWixCYR2mwiYf3BSw8ZjtTv+eBg34Yj4zwZMPhOuCZsGzL8aKjs/qT2kxIV4efwKGow6iEEYWLzRoOq4vUKHTw74pnhoULdXpQQERAUSEixevMJnP54oFgsrgpQADMQgApOUbyMIFu4KKhCZ786rHvsvk9CtU2QTHrzETr4glMVFgNBBTRMx3JaVq71YATjOeUtwy4lF4erT6zOjdtleCvy6eMVAVuCALlfH9TIpauae+OT19779i7rrrfvvXYy3tu8qvR9zgffi6DDZnFfY3dda7EZqz7OfQ/05CSEdqvFkl5wJS1WzjSIrIvSmSB4uobXi8SjYDWTfWs2N+wjEBLfcG72lGQzKlY8RNTz4JudugpTpdutHXnbbDC80urqbLt8AtQFfs5ndVAZKvG4dK58zsDBNQ1Go8Uc/OTutMVoxA2rONFF39W5PCVDyuRs2WuBXMG3y6Zjca/1GGTSjrjdlQ2MdkXHf5KKh5DeEejunpjIZlJXXZXKZCcmursDjjzP8+4T+H8zL4jbQvuber5I5Ml85vxv6XXvC47pY+lz/LbI2svPdN2d//zIoTcnCh+LNDz218iT+SNd2CAk+oTTbnLNazuv99/CbMJRi8GGbIZhv8KZC8QlZLRwXAz87zmSf3Lkr8caIo8VTrx56Mjn+bu7zly+j2zjz6WPTTte8L4ubT4/M0/yiS96mvaHtokLufN60kEjqHR+g7ExRfM7IWiudeCmQrPCWcBwZQUzp0QpU+HkGOg8inUOqzXjcj515Lrrg/6cucK25SQU3kFzLui//rojar0rY7U6dLh4loZn51vrSkrq1shzN9OPLGN91Zvqvls6z84Oo0yEBNtZp3kFkJ6SwcnBdKYgrNSuHe88dNFFs6G/v7W2toT5+UGt6e9mbvZ60UNPvT8av1N1VnFclVO9Mz76fuNVHAU4jc5yTJ6PGofMXTW3tPSjw9Lxehm0nEUHpfeQrm/inU5vLd4EcHxjvCusBINKuCv+sr3XjiH0epKpwtHCVNLjhRCXb9LrY9BEWIpPMWJKS4Sl+TQjlYWuFyGxMXcUoaib2Qj0oPxPgDSZbf8PtH+XP2QjtNvhUiCPydpxiZww7i6Jln9eLhz3rJw/7mlpjbtUknHfyim72iT7QvsX+VG2W/x/MvRGmD2FuzDfVzgFll/mfyLnINPvBJsOuOzhIzrX/lrQDgCXjr81h721f5E/ZDtQ4FiCwL88AVl9f2z9f2k3JsdtggBWdvg1P88BlJ0NbVhSF++qQYVL0jiH/JyAd2OhG6aeZR18NOOQQ7EQFE1WH1vTy3FcxCsiGC60wKGDm8DFsN3Us3wUfALehByG70GR8Od30kzITu9wlEB6TVjewHZR5YKIPM8X5OIJxf1814GHcQSErBgacfqiPHtgNsIMteKVkCFGEmkogObKMaeHujbLv3Slqe05JAGSpxFUvPWA1YmUXNlqueFXD2SF326+sIjKnZTpkaLk4goDzZUf7UY4x5l1gDFDOF5GWsJuzTjkRRHN6Jn8PQVAYxXXIC95UNv6jCytBhZazV0F8GHPhBVHXPHEl5zkpSBFUaKlJGXpkE7pkm7pkV4xYiUgf1TlFNVto6Ow1IQImqEZZcuO9QL9v/LrnDOhjGCKP+hQgZ25MRadAVACMuTt7LSvnkd2fDOKTWmcoiswTJVGfRx6VpLZoy3zsn2SJ9U1js/JUL6o3CzPHbsWpPPWLeZZkS6rSZm2Y2imQjw2D+/1AAAAAA==) format("woff2");font-weight:400;font-style:normal;font-display:block}', ve = "hope-player-icon-font";
1879
- function It() {
1880
- if (typeof document > "u" || document.getElementById(ve)) return;
2049
+ const Kt = '@font-face{font-family:hope-icons;src:url(data:font/woff2;base64,d09GMgABAAAAAAuMAAsAAAAAIuAAAAs8AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACEegq1PK4ZATYCJANUCywABCAFhC4HggobTB4jESaVTgwydRbGzrR7EFKamp4EGD6+83WPOlVtFufKNoQP3FMw3+XD4QURPF85y/cFhm57sFsyDKE9ixwGQaUcQJ7ZIC+eQ8xnVOhGN8/3btY0zAxpnZKEriMToI4M0DphaJ13gQpdD9QMOzX/XVPOfcV/T/yaqq5tmHwMC1LiMW2M97StYfS0oH8OXi4E3rrH67vHaIoxiv5vLbUMRfxFY8K64ExmZwJ7cxtC3H3Z4wmC7KsikMCsgIVilHUVpsLGnRG+BsOtHVjBqsXBGhPUj7waBFAsZD3OLrsNDoOOU49i7NXwYEMF0upy6klW9QrzCLyK6kIBISd7TPlNbsMH2UWOB3YPX/k/VLkKHHwXdk4HHN81AV7PyHrl9fbrzJe/2aE7EfbuAD7gAjOKRcnF1Qnn4sb8TEgVL8FjD7p7D4Gst92GDB+rvSsQHFw8/Pl/8/IUKKLQlCjTQSdddNNDLwYkBxtcgltRaCDDBQQywIEMraPIAHiQAT5kQA4yIA8Z2kSRAShCBijIAA0ZUIIMKEMGdEAGdEIGdEEGdEMG9EAG9EIWgYG53XcDuAzUNaDHLMu7Exx8Y+LmFQ0Gny4D48WP8/C2nFvbdSu+yqveXpKqPK/CiEccUV4+iZ0pm2EUkqiKDXcd9PfPrB0YfnXh4qqKcW16GxGVhuMH0vYtGw6G4nLSKt1wP87cA1qLcsuOQt/4kLgbH1yC3vhqwo0fPBEd49tvjynxwTeL9NHc+M03BdRkMFrEDZxQ1HNsByFJ3d2k8dokTtujRGBuSgXmoZmNiDmoN5iwpLJ5J0Tr41F3pErSxE5r7YjXSQQscVd8q5terDHDs8Q8PgHLMj5LRBqlokk06lyJCkQ1ojKL8GTJbp+pRqUoUU3YINumkliJTsEUYbtUoiPRaLAIFK1z5cVTJ2ReUwR8/dQIb8cIaoW8a8qZCqJqhSxKWynJ4ylmWJAAS2N8Otkda/XeYRjsFyhj0rDRyoBBQSSChuwAMUpBS7oUr8QQgwZPTvyG6TaD70XE080iPLU+2UK0IxcuwsaqY13JWdvYED0erfTCAq89174mlFHPyjRL7uUwQdC6Trpcd+b0iOi29xiWL3InU0LkCsvsy6G9BA4lMzQOpQ8PBCjHTWhMMNGKKnOOoWJYhYrB2moLyoq2bngiCJQZM8R5IkifCJQ5goTQ5HlFwrAehhLUAupcD9ProQQUUUSfV2trx63V4WRIncdt+rjVIUUU0ecBYyrGYKuWLlNNAvfGvXUfXmTL52uuru/v7+ubca6k1O9vacwfGBgcXDDtrFSq1uzpaVl2zK5t1us1m8YES1N7ZGmJ1aCgJyYqtEUo6tqiYiGb1g02x7EmzTWBADFed7EHi/aCejQCJkJqXAo9F9IGgrPA18xCDZFjbGvRpqFhTCs+G8h5j++UWiY24kRj5t/5hLBemwd0qqZHf6ydh5oGW72xM1nxScV3a7RaScghJ5eiSkooPGUSol8PCjVLIA5YN0o9FVFaL3Y+a5idfc3M9VzXQ7dbJm7EYA4/tfK6bnB72X+HHeq71KJGf+n1/ua0g+3iSDY1Rn86/LDOC2c3NZeOeT1xWrvD+vlTXsJdzevs0NxhrrGpuSnhG3V7eG32QPcvb+iu61Tczs57l6Tb/uRmmtisNR96nzl3acMykuhQDOtjLCwhLIZZTFNjQ1RMTmDZxxKqFmU+GWGZhqOamghT+dB+JEnY6jEnjRraqlppEURabryN0YjkbUH5d5/AImVJfjkqY2Sn8jZJln/DPVimfaBMjqzXywJpN92LJHBqDKJ2REqL4L6B334DTt0UEimLqqpSfk+EBMoUVY0yKvz+b0YHUfpzE7MryTECgsHCr/9mtJFAPdD7v9agSRd4z9+LZRKKYRwLERmnLBt4vdmKpmEzFW2FXSB57eqpxzLFa9sNCvrqlNMDq31Vk3U1wsHWtoynt7uIK9EZc55RXHDa0dJjYzSKO25OG1+Hek2oHOjv57Gs4XctpvERXksqjMoi1kf0WCKUhRJaKpLSojFGBTvmr+cAB8u9BUbg1hXAO7Aei/KSJuspYpoeJuOkIrYLlMWixCYR2mwiYf3BSw8ZjtTv+eBg34Yj4zwZMPhOuCZsGzL8aKjs/qT2kxIV4efwKGow6iEEYWLzRoOq4vUKHTw74pnhoULdXpQQERAUSEixevMJnP54oFgsrgpQADMQgApOUbyMIFu4KKhCZ786rHvsvk9CtU2QTHrzETr4glMVFgNBBTRMx3JaVq71YATjOeUtwy4lF4erT6zOjdtleCvy6eMVAVuCALlfH9TIpauae+OT19779i7rrrfvvXYy3tu8qvR9zgffi6DDZnFfY3dda7EZqz7OfQ/05CSEdqvFkl5wJS1WzjSIrIvSmSB4uobXi8SjYDWTfWs2N+wjEBLfcG72lGQzKlY8RNTz4JudugpTpdutHXnbbDC80urqbLt8AtQFfs5ndVAZKvG4dK58zsDBNQ1Go8Uc/OTutMVoxA2rONFF39W5PCVDyuRs2WuBXMG3y6Zjca/1GGTSjrjdlQ2MdkXHf5KKh5DeEejunpjIZlJXXZXKZCcmursDjjzP8+4T+H8zL4jbQvuber5I5Ml85vxv6XXvC47pY+lz/LbI2svPdN2d//zIoTcnCh+LNDz218iT+SNd2CAk+oTTbnLNazuv99/CbMJRi8GGbIZhv8KZC8QlZLRwXAz87zmSf3Lkr8caIo8VTrx56Mjn+bu7zly+j2zjz6WPTTte8L4ubT4/M0/yiS96mvaHtokLufN60kEjqHR+g7ExRfM7IWiudeCmQrPCWcBwZQUzp0QpU+HkGOg8inUOqzXjcj515Lrrg/6cucK25SQU3kFzLui//rojar0rY7U6dLh4loZn51vrSkrq1shzN9OPLGN91Zvqvls6z84Oo0yEBNtZp3kFkJ6SwcnBdKYgrNSuHe88dNFFs6G/v7W2toT5+UGt6e9mbvZ60UNPvT8av1N1VnFclVO9Mz76fuNVHAU4jc5yTJ6PGofMXTW3tPSjw9Lxehm0nEUHpfeQrm/inU5vLd4EcHxjvCusBINKuCv+sr3XjiH0epKpwtHCVNLjhRCXb9LrY9BEWIpPMWJKS4Sl+TQjlYWuFyGxMXcUoaib2Qj0oPxPgDSZbf8PtH+XP2QjtNvhUiCPydpxiZww7i6Jln9eLhz3rJw/7mlpjbtUknHfyim72iT7QvsX+VG2W/x/MvRGmD2FuzDfVzgFll/mfyLnINPvBJsOuOzhIzrX/lrQDgCXjr81h721f5E/ZDtQ4FiCwL88AVl9f2z9f2k3JsdtggBWdvg1P88BlJ0NbVhSF++qQYVL0jiH/JyAd2OhG6aeZR18NOOQQ7EQFE1WH1vTy3FcxCsiGC60wKGDm8DFsN3Us3wUfALehByG70GR8Od30kzITu9wlEB6TVjewHZR5YKIPM8X5OIJxf1814GHcQSErBgacfqiPHtgNsIMteKVkCFGEmkogObKMaeHujbLv3Slqe05JAGSpxFUvPWA1YmUXNlqueFXD2SF326+sIjKnZTpkaLk4goDzZUf7UY4x5l1gDFDOF5GWsJuzTjkRRHN6Jn8PQVAYxXXIC95UNv6jCytBhZazV0F8GHPhBVHXPHEl5zkpSBFUaKlJGXpkE7pkm7pkV4xYiUgf1TlFNVto6Ow1IQImqEZZcuO9QL9v/LrnDOhjGCKP+hQgZ25MRadAVACMuTt7LSvnkd2fDOKTWmcoiswTJVGfRx6VpLZoy3zsn2SJ9U1js/JUL6o3CzPHbsWpPPWLeZZkS6rSZm2Y2imQjw2D+/1AAAAAA==) format("woff2");font-weight:400;font-style:normal;font-display:block}', Ee = "hope-player-icon-font";
2050
+ function jt() {
2051
+ if (typeof document > "u" || document.getElementById(Ee)) return;
1881
2052
  const n = document.createElement("style");
1882
- n.id = ve, n.textContent = Ft, document.head.appendChild(n);
2053
+ n.id = Ee, n.textContent = Kt, document.head.appendChild(n);
2054
+ }
2055
+ function ci(n) {
2056
+ if (!n || typeof n.name != "string" || !/^[\w.:-]+$/.test(n.name))
2057
+ throw new TypeError('definePlugin: "name" is required (letters, digits, "-", "_", ".", ":")');
2058
+ if (typeof n.setup != "function") throw new TypeError(`definePlugin(${n.name}): "setup" must be a function`);
2059
+ return n;
2060
+ }
2061
+ const _ = [], Z = /* @__PURE__ */ new Set();
2062
+ function $t(n, t) {
2063
+ const e = [n, t];
2064
+ return _.push(e), Se(), () => {
2065
+ const i = _.indexOf(e);
2066
+ i >= 0 && (_.splice(i, 1), Se());
2067
+ };
2068
+ }
2069
+ function Ce() {
2070
+ return _.slice();
2071
+ }
2072
+ function Qt(n) {
2073
+ return Z.add(n), () => Z.delete(n);
1883
2074
  }
1884
- function Dt() {
2075
+ function Se() {
2076
+ for (const n of Z)
2077
+ try {
2078
+ n();
2079
+ } catch {
2080
+ }
2081
+ }
2082
+ function Wt() {
1885
2083
  var i;
1886
2084
  const t = (i = window.adTaxonomy) == null ? void 0 : i.keyValues;
1887
2085
  if (!t || typeof t != "object") return "";
1888
2086
  const e = [];
1889
- for (const [r, o] of Object.entries(t))
1890
- o == null || o === "" || e.push(`${r}=${o}`);
2087
+ for (const [r, s] of Object.entries(t))
2088
+ s == null || s === "" || e.push(`${r}=${s}`);
1891
2089
  return e.join("&");
1892
2090
  }
1893
- function W(n, t = {}) {
2091
+ function X(n, t = {}) {
1894
2092
  const e = encodeURIComponent(document.referrer || window.location.href), i = encodeURIComponent(window.location.href), r = Date.now();
1895
- let o = n;
2093
+ let s = n;
1896
2094
  const a = {
1897
2095
  referrer_url: e,
1898
2096
  description_url: i,
1899
2097
  timestamp: r
1900
2098
  };
1901
2099
  for (const [l, h] of Object.entries(a)) {
1902
- const m = `[${l}]`;
1903
- if (o.includes(m))
1904
- o = o.replace(m, String(h));
1905
- else if (!new URLSearchParams(o.split("?")[1]).has(l)) {
1906
- const d = o.includes("?") ? "&" : "?";
1907
- o += `${d}${l}=${h}`;
2100
+ const c = `[${l}]`;
2101
+ if (s.includes(c))
2102
+ s = s.replace(c, String(h));
2103
+ else if (!new URLSearchParams(s.split("?")[1]).has(l)) {
2104
+ const f = s.includes("?") ? "&" : "?";
2105
+ s += `${f}${l}=${h}`;
1908
2106
  }
1909
2107
  }
1910
2108
  try {
1911
- const l = new URL(o);
2109
+ const l = new URL(s);
1912
2110
  if (l.pathname.includes("/vmap/")) return n;
1913
- const m = [];
1914
- t.includeRefreshCount && m.push(`adrefreshCount=${t.adRefreshCount ?? 0}`);
1915
- const d = Dt();
1916
- if (d && m.push(d), m.length) {
1917
- const p = l.searchParams.get("cust_params");
1918
- l.searchParams.set("cust_params", p ? `${p}&${m.join("&")}` : m.join("&"));
2111
+ const c = [];
2112
+ t.includeRefreshCount && c.push(`adrefreshCount=${t.adRefreshCount ?? 0}`);
2113
+ const f = Wt();
2114
+ if (f && c.push(f), c.length) {
2115
+ const b = l.searchParams.get("cust_params");
2116
+ l.searchParams.set("cust_params", b ? `${b}&${c.join("&")}` : c.join("&"));
1919
2117
  }
1920
2118
  return l.toString();
1921
2119
  } catch {
1922
- return o;
2120
+ return s;
1923
2121
  }
1924
2122
  }
1925
- function J(n) {
2123
+ function ee(n) {
1926
2124
  const t = {};
1927
2125
  if (!n) return t;
1928
2126
  const e = typeof n == "string" ? [...new URLSearchParams(n.trim().replace(/^\?/, "")).entries()].map(([i, r]) => [i, r.split(",")]) : Object.entries(n);
1929
2127
  for (const [i, r] of e) {
1930
- const o = (Array.isArray(r) ? r : [r]).filter((a) => a != null && a !== "").map(String);
1931
- i && o.length && (t[i] = o);
2128
+ const s = (Array.isArray(r) ? r : [r]).filter((a) => a != null && a !== "").map(String);
2129
+ i && s.length && (t[i] = s);
1932
2130
  }
1933
2131
  return t;
1934
2132
  }
1935
- function Ht(n, t) {
1936
- const e = Object.entries(J(t)).filter(([i]) => !i.startsWith("hb_")).map(([i, r]) => `${encodeURIComponent(i)}=${r.map(encodeURIComponent).join(",")}`);
2133
+ function Xt(n, t) {
2134
+ const e = Object.entries(ee(t)).filter(([i]) => !i.startsWith("hb_")).map(([i, r]) => `${encodeURIComponent(i)}=${r.map(encodeURIComponent).join(",")}`);
1937
2135
  if (!e.length) return n;
1938
2136
  try {
1939
- const i = new URL(n), r = new Set(e.map((a) => a.slice(0, a.indexOf("=")))), o = (i.searchParams.get("cust_params") ?? "").split("&").filter((a) => a && !r.has(a.split("=")[0]));
1940
- return i.searchParams.set("cust_params", [...o, ...e].join("&")), i.toString();
2137
+ const i = new URL(n), r = new Set(e.map((a) => a.slice(0, a.indexOf("=")))), s = (i.searchParams.get("cust_params") ?? "").split("&").filter((a) => a && !r.has(a.split("=")[0]));
2138
+ return i.searchParams.set("cust_params", [...s, ...e].join("&")), i.toString();
1941
2139
  } catch {
1942
2140
  return n;
1943
2141
  }
1944
2142
  }
1945
- const Ne = {
2143
+ const Ve = {
1946
2144
  play: "Oynat",
1947
2145
  pause: "Duraklat",
1948
2146
  mute: "Sessize al",
@@ -2022,6 +2220,7 @@ const Ne = {
2022
2220
  errorNetwork: "Ağ hatası — video yüklenemedi.",
2023
2221
  errorDecode: "Video kodu çözülemedi.",
2024
2222
  errorSrcNotSupported: "Bu video kaynağı desteklenmiyor.",
2223
+ errorDrm: "Bu korumalı video bu cihazda ya da tarayıcıda oynatılamıyor.",
2025
2224
  errorGeneric: "Video oynatılırken bir hata oluştu.",
2026
2225
  errorCode: "Hata kodu",
2027
2226
  countdownRemaining: "Kalan süre",
@@ -2062,6 +2261,7 @@ const Ne = {
2062
2261
  a11yKeyVolume: "Sesi aç / kıs",
2063
2262
  a11yKeyMute: "Sesi kapat / aç",
2064
2263
  a11yKeyFullscreen: "Tam ekran",
2264
+ a11yKeyFrame: "Bir kare geri / ileri",
2065
2265
  a11yKeyZoom: "Yakınlaştır / uzaklaştır, sıfırla",
2066
2266
  a11yKeyPan: "Yakınlaştırılmış görüntüde gezin",
2067
2267
  a11yKeyShortcuts: "Bu listeyi aç / kapat",
@@ -2096,7 +2296,7 @@ const Ne = {
2096
2296
  liveClock: "Canlı saat",
2097
2297
  live: "CANLI",
2098
2298
  goToLive: "Canlıya git"
2099
- }, Gt = {
2299
+ }, Yt = {
2100
2300
  play: "Play",
2101
2301
  pause: "Pause",
2102
2302
  mute: "Mute",
@@ -2176,6 +2376,7 @@ const Ne = {
2176
2376
  errorNetwork: "Network error — the video could not load.",
2177
2377
  errorDecode: "The video could not be decoded.",
2178
2378
  errorSrcNotSupported: "This video source is not supported.",
2379
+ errorDrm: "This protected video cannot be played on this device or browser.",
2179
2380
  errorGeneric: "An error occurred while playing the video.",
2180
2381
  errorCode: "Error code",
2181
2382
  countdownRemaining: "Time remaining",
@@ -2215,6 +2416,7 @@ const Ne = {
2215
2416
  a11yKeyVolume: "Volume up / down",
2216
2417
  a11yKeyMute: "Mute / unmute",
2217
2418
  a11yKeyFullscreen: "Fullscreen",
2419
+ a11yKeyFrame: "Previous / next frame",
2218
2420
  a11yKeyZoom: "Zoom in / out, reset",
2219
2421
  a11yKeyPan: "Move around the zoomed picture",
2220
2422
  a11yKeyShortcuts: "Open / close this list",
@@ -2250,38 +2452,38 @@ const Ne = {
2250
2452
  liveClock: "Live clock",
2251
2453
  live: "LIVE",
2252
2454
  goToLive: "Go to live"
2253
- }, qt = { tr: Ne, en: Gt };
2254
- function Fe(n, t) {
2255
- return { ...qt[n ?? "tr"] ?? Ne, ...t };
2455
+ }, Jt = { tr: Ve, en: Yt };
2456
+ function _e(n, t) {
2457
+ return { ...Jt[n ?? "tr"] ?? Ve, ...t };
2256
2458
  }
2257
- function Vt(n, t, e) {
2258
- Object.assign(n, Fe(t, e));
2459
+ function Zt(n, t, e) {
2460
+ Object.assign(n, _e(t, e));
2259
2461
  }
2260
- const Z = 8e3;
2261
- function Ut(n) {
2462
+ const te = 8e3;
2463
+ function ei(n) {
2262
2464
  var t;
2263
2465
  return (t = n.live) != null && t.scte35 && !n.adTagPreroll && !n.adTagVmap ? !1 : !!(n.adTagPreroll || n.adTagVmap);
2264
2466
  }
2265
- class _t {
2467
+ class ti {
2266
2468
  constructor(t) {
2267
2469
  /** Kapı kurulu (preroll bekleniyor) mu. */
2268
- s(this, "armed", !1);
2470
+ o(this, "armed", !1);
2269
2471
  /** Kapı kuruluyken kullanıcı / autoplay oynatmak istedi mi. */
2270
- s(this, "playIntent", !1);
2472
+ o(this, "playIntent", !1);
2271
2473
  /** Kapının kendi pause() çağrısının ürettiği 'pause' olayı yutulsun. */
2272
- s(this, "swallowNextPause", !1);
2273
- s(this, "timeoutMs", Z);
2274
- s(this, "timer", null);
2474
+ o(this, "swallowNextPause", !1);
2475
+ o(this, "timeoutMs", te);
2476
+ o(this, "timer", null);
2275
2477
  /** İlk oynatma isteği (reklam plugin'i bekleyen preroll'u başlatır). */
2276
- s(this, "onPlayIntent", null);
2478
+ o(this, "onPlayIntent", null);
2277
2479
  /** Zaman aşımı — reklam plugin'i geç gelecek cevabı iptal eder. Kapı bundan sonra içeriği başlatarak açılır. */
2278
- s(this, "onTimeout", null);
2480
+ o(this, "onTimeout", null);
2279
2481
  /** "Preroll bekleniyor" durumu değişti (UI: yükleme halkası, merkez buton). */
2280
- s(this, "onWaitChange", null);
2281
- s(this, "onPlay", (t) => {
2482
+ o(this, "onWaitChange", null);
2483
+ o(this, "onPlay", (t) => {
2282
2484
  this.armed && (t.stopImmediatePropagation(), this.swallowNextPause = !0, this.video.pause(), this.registerIntent());
2283
2485
  });
2284
- s(this, "onPause", (t) => {
2486
+ o(this, "onPause", (t) => {
2285
2487
  this.swallowNextPause && (this.swallowNextPause = !1, t.stopImmediatePropagation());
2286
2488
  });
2287
2489
  this.video = t, t.addEventListener("play", this.onPlay), t.addEventListener("pause", this.onPause);
@@ -2296,7 +2498,7 @@ class _t {
2296
2498
  get hasPlayIntent() {
2297
2499
  return this.playIntent;
2298
2500
  }
2299
- arm(t = Z) {
2501
+ arm(t = te) {
2300
2502
  this.clearTimer(), this.armed = !0, this.playIntent = !1, this.timeoutMs = t;
2301
2503
  }
2302
2504
  /**
@@ -2333,24 +2535,24 @@ class _t {
2333
2535
  this.timer && clearTimeout(this.timer), this.timer = null;
2334
2536
  }
2335
2537
  }
2336
- const Kt = [
2538
+ const ii = [
2337
2539
  "https://imasdk.googleapis.com",
2338
2540
  "https://pubads.g.doubleclick.net",
2339
2541
  "https://securepubads.g.doubleclick.net",
2340
2542
  "https://pagead2.googlesyndication.com"
2341
2543
  ];
2342
- let ye = !1;
2343
- function jt() {
2344
- if (!(ye || typeof document > "u")) {
2345
- ye = !0;
2346
- for (const n of Kt) {
2544
+ let Te = !1;
2545
+ function ri() {
2546
+ if (!(Te || typeof document > "u")) {
2547
+ Te = !0;
2548
+ for (const n of ii) {
2347
2549
  if (document.head.querySelector(`link[rel="preconnect"][href="${n}"]`)) continue;
2348
2550
  const t = document.createElement("link");
2349
2551
  t.rel = "preconnect", t.href = n, document.head.appendChild(t);
2350
2552
  }
2351
2553
  }
2352
2554
  }
2353
- const xe = [0.5, 0.75, 1, 1.25, 1.5, 2], ke = 1200, $t = 3e3, we = 5e3, Qt = 10, Ee = 10, Wt = 5, Ce = "stream-audio", U = "1.3.1", Xt = {
2555
+ const Ae = [0.5, 0.75, 1, 1.25, 1.5, 2], Le = 1200, si = 3e3, Pe = 5e3, oi = 10, Me = 10, ai = 5, Be = "stream-audio", G = "1.5.0", ni = {
2354
2556
  hls: "application/x-mpegurl",
2355
2557
  mp4: "video/mp4",
2356
2558
  webm: "video/webm",
@@ -2360,7 +2562,7 @@ const xe = [0.5, 0.75, 1, 1.25, 1.5, 2], ke = 1200, $t = 3e3, we = 5e3, Qt = 10,
2360
2562
  ogg: "audio/ogg",
2361
2563
  wav: "audio/wav",
2362
2564
  flac: "audio/flac"
2363
- }, Yt = (
2565
+ }, li = (
2364
2566
  /* html */
2365
2567
  `
2366
2568
  <div class="video-area">
@@ -2371,169 +2573,178 @@ const xe = [0.5, 0.75, 1, 1.25, 1.5, 2], ke = 1200, $t = 3e3, we = 5e3, Qt = 10,
2371
2573
  </div>
2372
2574
  `
2373
2575
  );
2374
- function Jt(n) {
2576
+ function hi(n) {
2375
2577
  if (typeof n == "number") return Number.isFinite(n) && n > 0 ? String(n) : null;
2376
2578
  if (typeof n != "string") return null;
2377
2579
  const t = n.trim().match(/^(\d+(?:\.\d+)?)\s*(?:[:/]\s*(\d+(?:\.\d+)?))?$/);
2378
2580
  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];
2379
2581
  }
2380
- class Ie extends HTMLElement {
2582
+ class Ue extends HTMLElement {
2381
2583
  constructor() {
2382
2584
  super();
2383
- s(this, "root");
2384
- s(this, "videoArea");
2385
- s(this, "videoEl");
2386
- s(this, "adLayerEl");
2387
- s(this, "chromeEl");
2388
- s(this, "centerPlayButton");
2389
- s(this, "captionRenderer");
2585
+ o(this, "root");
2586
+ o(this, "videoArea");
2587
+ o(this, "videoEl");
2588
+ o(this, "adLayerEl");
2589
+ o(this, "chromeEl");
2590
+ o(this, "centerPlayButton");
2591
+ o(this, "captionRenderer");
2390
2592
  /** options.miniProgress açıkken kurulur. */
2391
- s(this, "miniProgress", null);
2392
- s(this, "chromeVisible", !0);
2393
- s(this, "sourceManager");
2394
- s(this, "controlBar");
2395
- s(this, "tooltip");
2396
- s(this, "keyboard");
2397
- s(this, "loadingSpinner");
2593
+ o(this, "miniProgress", null);
2594
+ o(this, "chromeVisible", !0);
2595
+ o(this, "sourceManager");
2596
+ o(this, "controlBar");
2597
+ o(this, "tooltip");
2598
+ o(this, "keyboard");
2599
+ o(this, "loadingSpinner");
2398
2600
  /**
2399
2601
  * Preroll kapısı — reklam plugin'i yüklenmeden önce kurulur ki autoplay / ilk play araya kaçmasın.
2400
2602
  * Video'nun 'play'/'pause' dinleyicilerinin İLKİ olmalı (yuttuğu olayları UI ve hp:play görmesin).
2401
2603
  */
2402
- s(this, "prerollGate");
2604
+ o(this, "prerollGate");
2403
2605
  /** Ads plugin kurulumu sürüyor — erken başlatılan kurulum ile sonraki bekleme aynı promise'i paylaşır. */
2404
- s(this, "adsInstall", null);
2606
+ o(this, "adsInstall", null);
2405
2607
  /** Yükleme halkası açık (medya takıldı / preroll bekleniyor) — kontroller bu sırada otomatik gizlenmez. */
2406
- s(this, "loadingActive", !1);
2407
- s(this, "errorScreen");
2608
+ o(this, "loadingActive", !1);
2609
+ o(this, "errorScreen");
2408
2610
  /** İleri/geri sarmada sağda/solda beliren anlık bildirim. */
2409
- s(this, "seekFeedback");
2410
- s(this, "contextMenu");
2611
+ o(this, "seekFeedback");
2612
+ o(this, "contextMenu");
2411
2613
  /** options.contextMenu çözülmüş hali — null = kapalı (tarayıcının kendi menüsü). */
2412
- s(this, "contextMenuConfig", { stats: !1 });
2614
+ o(this, "contextMenuConfig", { stats: !1 });
2413
2615
  /** İlk açılışta yüklenir (plugins/stats). */
2414
- s(this, "statsPanel", null);
2415
- s(this, "debugPanel", null);
2616
+ o(this, "statsPanel", null);
2617
+ o(this, "debugPanel", null);
2416
2618
  /** options.debug — sağ tık menüsündeki "Hata ayıklama" girişini açar. */
2417
- s(this, "debugEnabled", !1);
2619
+ o(this, "debugEnabled", !1);
2418
2620
  /** Player'ın tüm hataları (medya, yayın, reklam, altyazı) — her zaman tutulur; bkz. `errorLog`. */
2419
- s(this, "log", new Nt());
2621
+ o(this, "log", new Ut());
2420
2622
  /** Son basılan işaretçi türü — sağ tık menüsü yalnızca fareyle (dokunmatikte uzun basma gesture'a ait). */
2421
- s(this, "lastPointerType", "mouse");
2623
+ o(this, "lastPointerType", "mouse");
2422
2624
  /** options.tapGestures kuruluysa (plugins/tap-gestures). */
2423
- s(this, "tapGestures", null);
2625
+ o(this, "tapGestures", null);
2424
2626
  /** Dokunmadan sonra tarayıcının ürettiği uyumluluk mouse olayları ikinci bir dokunuş sayılmasın. */
2425
- s(this, "lastTouchEndAt", 0);
2627
+ o(this, "lastTouchEndAt", 0);
2426
2628
  /** Video alanı boyutu değişince merkez play butonunun yerini yeniden hesaplar. */
2427
- s(this, "centerPlayObserver", null);
2428
- s(this, "tapToPlay", "auto");
2429
- s(this, "adsController", null);
2430
- s(this, "gestureControls", null);
2431
- s(this, "loopSection", null);
2432
- s(this, "audioStage", null);
2629
+ o(this, "centerPlayObserver", null);
2630
+ o(this, "tapToPlay", "auto");
2631
+ o(this, "adsController", null);
2632
+ o(this, "gestureControls", null);
2633
+ o(this, "loopSection", null);
2634
+ o(this, "audioStage", null);
2433
2635
  /** Kalite kilidi (rewardedUnlock eklentisi) — kilitliyse yüksek kaliteler menüde kilitli, HLS'te üst sınır var. */
2434
- s(this, "qualityGate", null);
2435
- s(this, "rewardedUnlock", null);
2436
- s(this, "sponsorship", null);
2636
+ o(this, "qualityGate", null);
2637
+ o(this, "rewardedUnlock", null);
2638
+ o(this, "sponsorship", null);
2437
2639
  /** Son uygulanan MP4 kaynak listesi ve seçili etiket — kilit açılınca menü yeniden kurulur. */
2438
2640
  /** Çalan biçim grubunun kaynakları (kalite menüsü bunlar) — bkz. `sourceGroups`. */
2439
- s(this, "currentSources", []);
2641
+ o(this, "currentSources", []);
2440
2642
  /** `sources` biçime göre gruplu, `sourcePriority` sırasıyla; ölümcül hatada sıradakine geçilir. */
2441
- s(this, "sourceGroups", []);
2442
- s(this, "activeGroup", 0);
2643
+ o(this, "sourceGroups", []);
2644
+ o(this, "activeGroup", 0);
2443
2645
  /** Sıradaki gruba geçiş başladı — aynı arızanın ikinci hata olayı hata ekranı açmasın. */
2444
- s(this, "fallbackPending", !1);
2646
+ o(this, "fallbackPending", !1);
2445
2647
  /** hls.js ölümcül hatasının MediaError karşılığı (video.error oluşmaz) — hp:sourcefallback detayı için. */
2446
- s(this, "streamErrorCode");
2447
- s(this, "activeSourceLabel", "");
2448
- s(this, "lastHlsLevels", []);
2449
- s(this, "lastHlsActive", -1);
2648
+ o(this, "streamErrorCode");
2649
+ o(this, "activeSourceLabel", "");
2650
+ o(this, "lastHlsLevels", []);
2651
+ o(this, "lastHlsActive", -1);
2450
2652
  /** options.audio — kapak + plak sahnesi, kontroller hep görünür, tam ekran yok. */
2451
- s(this, "audioMode", !1);
2452
- s(this, "inViewAutoplay", null);
2453
- s(this, "unregisterSticky", null);
2454
- s(this, "playlistRunner", null);
2455
- s(this, "hopeStory", null);
2456
- s(this, "markProgress", null);
2457
- s(this, "segments", null);
2458
- s(this, "spriteThumbnails", null);
2459
- s(this, "countdownScreen", null);
2460
- s(this, "geoChecker", null);
2461
- s(this, "redirectScreen", null);
2462
- s(this, "redirectKey", "");
2463
- s(this, "skipSegments", null);
2464
- s(this, "skipSegmentsKey", "");
2465
- s(this, "accessibility", null);
2466
- s(this, "accessibilityKey", "");
2467
- s(this, "playbackHistory", null);
2468
- s(this, "historyKey", "");
2469
- s(this, "qrResume", null);
2470
- s(this, "pauseAd", null);
2471
- s(this, "adTriggers", null);
2472
- s(this, "castController", null);
2653
+ o(this, "audioMode", !1);
2654
+ o(this, "inViewAutoplay", null);
2655
+ o(this, "unregisterSticky", null);
2656
+ o(this, "playlistRunner", null);
2657
+ o(this, "hopeStory", null);
2658
+ o(this, "markProgress", null);
2659
+ o(this, "segments", null);
2660
+ o(this, "spriteThumbnails", null);
2661
+ o(this, "countdownScreen", null);
2662
+ o(this, "geoChecker", null);
2663
+ o(this, "redirectScreen", null);
2664
+ o(this, "redirectKey", "");
2665
+ /** Eklentileri çalıştıran taraf — yalnızca bir eklenti kullanılınca indirilir (plugin-api/PluginHost). */
2666
+ o(this, "pluginHost", null);
2667
+ /** Seçenekler uygulanırken eklenti senkronu bitince çözülür (reklam tag dönüşümü bekler). */
2668
+ o(this, "settlePlugins", () => {
2669
+ });
2670
+ o(this, "pluginsSettled", new Promise((e) => this.settlePlugins = e));
2671
+ /** `player.use()` ile çalışırken eklenenler. */
2672
+ o(this, "runtimePlugins", []);
2673
+ o(this, "offGlobalPlugins", null);
2674
+ o(this, "accessibility", null);
2675
+ o(this, "accessibilityKey", "");
2676
+ o(this, "playbackHistory", null);
2677
+ o(this, "qoeTracker", null);
2678
+ o(this, "analyticsKey", "");
2679
+ o(this, "historyKey", "");
2680
+ o(this, "qrResume", null);
2681
+ o(this, "pauseAd", null);
2682
+ o(this, "adTriggers", null);
2683
+ o(this, "castController", null);
2473
2684
  /** İçerik Chromecast'te oynuyor (player kumanda) — yerel reklam / otomatik oynatma devre dışı. */
2474
- s(this, "casting", !1);
2475
- s(this, "dubbing", null);
2476
- s(this, "liveWallClock", null);
2477
- s(this, "daiController", null);
2478
- s(this, "instanceKey");
2479
- s(this, "subtitleTracks", []);
2685
+ o(this, "casting", !1);
2686
+ o(this, "dubbing", null);
2687
+ o(this, "liveWallClock", null);
2688
+ o(this, "daiController", null);
2689
+ o(this, "instanceKey");
2690
+ o(this, "subtitleTracks", []);
2480
2691
  /** Altyazı seçiminin tek giriş noktası — iOS native tam ekrandan dönüşte de kullanılır. */
2481
- s(this, "selectCaption", null);
2692
+ o(this, "selectCaption", null);
2482
2693
  /** `applyOptions()`'ta aktif bir altyazı track'i seçiliyken `true` — dil değişince Boyut/Konum görünümünü tazelemek için. */
2483
- s(this, "captionTrackActive", !1);
2694
+ o(this, "captionTrackActive", !1);
2484
2695
  /** `options.subtitles` izleri. */
2485
- s(this, "optionTracks", []);
2696
+ o(this, "optionTracks", []);
2486
2697
  /** Yayının izleri: hls.js'ten (havuzda, `sub:`/`cc:`) ya da tarayıcının native HLS in-band izleri (`native:`). */
2487
- s(this, "streamTracks", []);
2698
+ o(this, "streamTracks", []);
2488
2699
  /** hls.js aynı cue'yu (seek sonrası) yeniden gönderebilir — iz başına eklenenler. */
2489
- s(this, "streamCueKeys", /* @__PURE__ */ new Map());
2700
+ o(this, "streamCueKeys", /* @__PURE__ */ new Map());
2490
2701
  /** Seçili altyazı — yayın izleri sonradan gelince seçim korunur. */
2491
- s(this, "activeCaptionLabel", null);
2492
- s(this, "streamAudio", { tracks: [], active: -1 });
2702
+ o(this, "activeCaptionLabel", null);
2703
+ o(this, "streamAudio", { tracks: [], active: -1 });
2493
2704
  /**
2494
2705
  * countdownScreen varken gerçek init (kaynak + içerik plugin'leri) ertelenir; en güncel options snapshot'ı.
2495
2706
  * onComplete kaydı tek sefer yapılır (bkz. playbackInitRegistered) — init birden fazla kez tetiklenmesin.
2496
2707
  */
2497
- s(this, "pendingPlaybackOptions", null);
2498
- s(this, "playbackInitRegistered", !1);
2708
+ o(this, "pendingPlaybackOptions", null);
2709
+ o(this, "playbackInitRegistered", !1);
2499
2710
  /**
2500
2711
  * countdownScreen gibi alanlar yalnızca .options ile gelir. connectedCallback'teki ilk (options'suz) geçiş chrome'u
2501
2712
  * bir an açıp player'ı gösteriyordu; 'boot' bloklayıcısı gerçek options gelene kadar bekletir.
2502
2713
  */
2503
- s(this, "bootResolved", !1);
2504
- s(this, "bootGraceTimer", null);
2714
+ o(this, "bootResolved", !1);
2715
+ o(this, "bootGraceTimer", null);
2505
2716
  /**
2506
2717
  * Son uygulanan `.options` nesnesi + attribute'lar. `.options` element sayfaya eklenmeden önce verilince
2507
2718
  * connectedCallback AYNI seçenekleri yeniden uyguluyordu; değişen bir şey yoksa bu ikinci geçiş atlanır.
2508
2719
  */
2509
- s(this, "lastSynced", null);
2720
+ o(this, "lastSynced", null);
2510
2721
  /**
2511
2722
  * applyOptions'ın asenkron kısmı (plugin kurulumu + kaynak yükleme) aynı anda tek kez çalışır. İki geçiş
2512
2723
  * üst üste binince `!this.adsController` gibi kontroller ikisinde de geçiyor, plugin (ör. IMA) iki kez kuruluyordu.
2513
2724
  * Çalışırken gelen seçenekler bekletilir; bitince yalnızca en sonuncusu uygulanır.
2514
2725
  */
2515
- s(this, "pluginApplyRun", null);
2516
- s(this, "pendingPluginOptions", null);
2517
- s(this, "_options", {});
2518
- s(this, "hideTimer", null);
2519
- s(this, "cursorTimer", null);
2726
+ o(this, "pluginApplyRun", null);
2727
+ o(this, "pendingPluginOptions", null);
2728
+ o(this, "_options", {});
2729
+ o(this, "hideTimer", null);
2730
+ o(this, "cursorTimer", null);
2520
2731
  /** null = imleç hiç gizlenmez (options.cursorHideDelayMs: false). */
2521
- s(this, "cursorHideDelayMs", we);
2732
+ o(this, "cursorHideDelayMs", Pe);
2522
2733
  /** Fare kontrollerin (buton/seek bar) üzerinde mi — üzerindeyken otomatik gizlenmez; videonun üstünde hareketsizse gizlenir. */
2523
- s(this, "pointerOverControls", !1);
2734
+ o(this, "pointerOverControls", !1);
2524
2735
  /** Kalite menüsünde şu an HLS seviyeleri mi var (kaynak değişince temizlemek için). */
2525
- s(this, "hlsQualitiesShown", !1);
2736
+ o(this, "hlsQualitiesShown", !1);
2526
2737
  /** Son uygulanan options.showRemainingTime — bkz. applyOptions. */
2527
- s(this, "appliedShowRemaining");
2528
- s(this, "autoHideDelayMs", ke);
2529
- s(this, "tapCandidate", !1);
2530
- s(this, "tapStartX", 0);
2531
- s(this, "tapStartY", 0);
2738
+ o(this, "appliedShowRemaining");
2739
+ o(this, "autoHideDelayMs", Le);
2740
+ o(this, "tapCandidate", !1);
2741
+ o(this, "tapStartX", 0);
2742
+ o(this, "tapStartY", 0);
2532
2743
  /** Tüm UI'ın paylaştığı tek, mutable sözlük — dil değişince referans değil alanlar güncellenir. */
2533
- s(this, "i18n", Fe("tr"));
2744
+ o(this, "i18n", _e("tr"));
2534
2745
  /** IMA SDK'nın kendi ad-UI dili (skip butonu/sayaç metni) de aynı dili takip etsin diye — bkz. plugins/ads/AdsController. */
2535
- s(this, "localeCode", "tr");
2536
- s(this, "onMediaError", () => {
2746
+ o(this, "localeCode", "tr");
2747
+ o(this, "onMediaError", () => {
2537
2748
  const e = this.videoEl.error;
2538
2749
  if (!e) return;
2539
2750
  const i = { 1: "MEDIA_ERR_ABORTED", 2: "MEDIA_ERR_NETWORK", 3: "MEDIA_ERR_DECODE", 4: "MEDIA_ERR_SRC_NOT_SUPPORTED" }, r = this.videoEl.currentSrc;
@@ -2541,252 +2752,256 @@ class Ie extends HTMLElement {
2541
2752
  source: "media",
2542
2753
  message: e.message || i[e.code] || `MediaError ${e.code}`,
2543
2754
  // Ses aygıtı yok (Firefox): video sessiz oynamaya devam ediyor — kayda düşer ama ölümcül değil.
2544
- fatal: !ee(e),
2545
- details: { code: e.code, name: i[e.code], src: r && !r.startsWith("blob:") ? r : r ? "MediaSource (hls.js)" : void 0 }
2755
+ fatal: !ie(e),
2756
+ details: { code: e.code, name: i[e.code], src: r && !r.startsWith("blob:") ? r : r ? `MediaSource (${this.sourceManager.engine.engine})` : void 0 }
2546
2757
  });
2547
2758
  });
2548
- s(this, "onSubtitleError", (e) => {
2759
+ o(this, "onSubtitleError", (e) => {
2549
2760
  const i = e.detail;
2550
2761
  this.log.add({ source: "subtitles", message: `Subtitle file could not be loaded: ${i.message}`, details: { src: i.src } });
2551
2762
  });
2552
- s(this, "onPointerTypeTrack", (e) => {
2763
+ o(this, "onPointerTypeTrack", (e) => {
2553
2764
  this.lastPointerType = e.pointerType;
2554
2765
  });
2555
2766
  /** Sağ tık: tarayıcı menüsü yerine player adı + sürüm (options.contextMenu). */
2556
- s(this, "onContextMenu", (e) => {
2767
+ o(this, "onContextMenu", (e) => {
2557
2768
  const i = this.contextMenuConfig;
2558
2769
  !i || this.lastPointerType !== "mouse" || (e.preventDefault(), this.contextMenu.show(e.clientX, e.clientY, [
2559
- { label: "HopeCorePlayer", meta: `v${U}` },
2770
+ { label: "HopeCorePlayer", meta: `v${G}` },
2560
2771
  ...i.stats ? [{ label: this.i18n.statsTitle, onSelect: () => void this.toggleStats(!0) }] : [],
2561
2772
  // Yalnızca debug açıkken ve kayıtlı bir hata varsa.
2562
2773
  ...this.debugEnabled && this.log.entries.length ? [{ label: this.i18n.debugTitle, meta: String(this.log.entries.length), onSelect: () => void this.showDebugLog() }] : []
2563
2774
  ]));
2564
2775
  });
2565
- s(this, "onStreamTextTracks", (e) => {
2776
+ o(this, "onStreamTextTracks", (e) => {
2566
2777
  const i = this.streamTracks.filter((r) => r.id.startsWith("native:"));
2567
2778
  if (!e.length)
2568
- Be(this.videoEl, "stream"), this.streamCueKeys.clear(), this.streamTracks = i;
2779
+ De(this.videoEl, "stream"), this.streamCueKeys.clear(), this.streamTracks = i;
2569
2780
  else {
2570
- const r = new Set([...this.optionTracks, ...i].map((o) => o.label));
2781
+ const r = new Set([...this.optionTracks, ...i].map((s) => s.label));
2571
2782
  this.streamTracks = [
2572
2783
  ...i,
2573
- ...e.map((o) => {
2574
- const a = this.uniqueLabel(this.streamTrackLabel(o.label, o.lang) || o.id, o.kind === "captions" ? "CC" : o.lang || o.kind, r);
2575
- return { id: o.id, label: a, track: Me(this.videoEl, "stream", o.kind, a, o.lang) };
2784
+ ...e.map((s) => {
2785
+ const a = this.uniqueLabel(this.streamTrackLabel(s.label, s.lang) || s.id, s.kind === "captions" ? "CC" : s.lang || s.kind, r);
2786
+ return { id: s.id, label: a, track: Ie(this.videoEl, "stream", s.kind, a, s.lang) };
2576
2787
  })
2577
2788
  ];
2578
2789
  }
2579
2790
  this.rebuildCaptions(this.activeCaptionLabel);
2580
2791
  });
2581
- s(this, "onStreamCues", (e, i) => {
2792
+ o(this, "onStreamCues", (e, i) => {
2582
2793
  var a;
2583
2794
  const r = (a = this.streamTracks.find((l) => l.id === e)) == null ? void 0 : a.track;
2584
2795
  if (!r) return;
2585
- let o = this.streamCueKeys.get(r);
2586
- o || this.streamCueKeys.set(r, o = /* @__PURE__ */ new Set());
2796
+ let s = this.streamCueKeys.get(r);
2797
+ s || this.streamCueKeys.set(r, s = /* @__PURE__ */ new Set());
2587
2798
  for (const l of i) {
2588
2799
  const h = `${l.startTime}|${l.endTime}|${l.text}`;
2589
- o.has(h) || (o.add(h), r.addCue(l));
2800
+ s.has(h) || (s.add(h), r.addCue(l));
2590
2801
  }
2591
2802
  });
2592
2803
  /** Tarayıcının kendi (native HLS) altyazı izleri — bizim havuz izlerimiz ve metadata izleri hariç. */
2593
- s(this, "onNativeTextTracksChanged", () => {
2594
- const e = Array.from(this.videoEl.textTracks).filter((a) => (a.kind === "subtitles" || a.kind === "captions") && !ut(a)), i = this.streamTracks.some((a) => a.id.startsWith("native:"));
2804
+ o(this, "onNativeTextTracksChanged", () => {
2805
+ if (this.sourceManager.engine.engine === "dash.js") return;
2806
+ const e = Array.from(this.videoEl.textTracks).filter((a) => (a.kind === "subtitles" || a.kind === "captions") && !wt(a)), i = this.streamTracks.some((a) => a.id.startsWith("native:"));
2595
2807
  if (!e.length && !i) return;
2596
- const r = this.streamTracks.filter((a) => !a.id.startsWith("native:")), o = new Set([...this.optionTracks, ...r].map((a) => a.label));
2808
+ const r = this.streamTracks.filter((a) => !a.id.startsWith("native:")), s = new Set([...this.optionTracks, ...r].map((a) => a.label));
2597
2809
  this.streamTracks = [
2598
2810
  ...r,
2599
2811
  ...e.map((a, l) => ({
2600
2812
  id: `native:${l}`,
2601
- label: this.uniqueLabel(a.label || a.language || `${this.i18n.captions} ${l + 1}`, a.language || String(l + 1), o),
2813
+ label: this.uniqueLabel(a.label || a.language || `${this.i18n.captions} ${l + 1}`, a.language || String(l + 1), s),
2602
2814
  track: a
2603
2815
  }))
2604
2816
  ], this.rebuildCaptions(this.activeCaptionLabel);
2605
2817
  });
2606
2818
  /** Yayında birden fazla ses izi varsa ayarlarda "Ses" alt menüsü (HLS alternatif ses / Safari audioTracks). */
2607
- s(this, "onStreamAudioTracks", (e, i) => {
2819
+ o(this, "onStreamAudioTracks", (e, i) => {
2608
2820
  this.streamAudio = { tracks: e, active: i };
2609
- 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)]));
2821
+ const r = this.controlBar.settingsMenu, s = /* @__PURE__ */ new Set(), a = new Map(e.map((l) => [l.index, this.uniqueLabel(this.streamTrackLabel(l.label, l.lang), String(l.index + 1), s)]));
2610
2822
  if (e.length <= 1) {
2611
- r.unregisterSubmenu(Ce);
2823
+ r.unregisterSubmenu(Be);
2612
2824
  return;
2613
2825
  }
2614
2826
  r.registerSubmenu({
2615
- key: Ce,
2827
+ key: Be,
2616
2828
  title: this.i18n.audioTrack,
2617
2829
  getValueLabel: () => a.get(i) ?? "",
2618
2830
  getItems: () => e.map((l) => ({ label: a.get(l.index), active: l.index === i, onSelect: () => this.sourceManager.setAudioTrack(l.index) }))
2619
2831
  });
2620
2832
  });
2621
2833
  /** Playlist panelinin monte edileceği, .video-area'nın ALTINDAKİ (shadow root içi) kapsayıcı — ilk ihtiyaçta oluşturulur. */
2622
- s(this, "panelContainer", null);
2623
- s(this, "onHlsLevelsChanged", (e, i) => {
2624
- var l;
2834
+ o(this, "panelContainer", null);
2835
+ o(this, "onHlsLevelsChanged", (e, i) => {
2836
+ var k, x;
2625
2837
  if (this.lastHlsLevels = e, this.lastHlsActive = i, e.length === 0 && this.hlsQualitiesShown) {
2626
2838
  this.hlsQualitiesShown = !1, this.controlBar.setQualities([], "");
2627
2839
  return;
2628
2840
  }
2629
2841
  if (e.length <= 1) return;
2630
2842
  this.hlsQualitiesShown = !0;
2631
- const r = (h) => `${h.height}p`, o = this.qualityGate, a = (h) => !!(o != null && o.isLocked(h.height));
2632
- if (o) {
2633
- const h = e.filter((d) => !a(d)), m = h.length ? h : [e.reduce((d, p) => p.height < d.height ? p : d)];
2634
- this.sourceManager.setMaxLevel(m.reduce((d, p) => p.height > d.height ? p : d).index);
2635
- } else
2636
- this.sourceManager.setMaxLevel(-1);
2637
- this.controlBar.setQualities(
2843
+ const r = (g) => `${g.height}p`, s = this.qualityGate, a = (g) => !!(s != null && s.isLocked(g.height)), l = (k = this._options.qualityLimit) == null ? void 0 : k.max, h = e.reduce((g, v) => v.height < g.height ? v : g), c = l ? e.filter((g) => g.height <= l) : e;
2844
+ c.length || c.push(h);
2845
+ const f = this.dataSaverHeight(), b = c.filter((g) => !a(g));
2846
+ let m = s ? b.length ? b : [h] : c;
2847
+ if (f) {
2848
+ const g = m.filter((v) => v.height <= f);
2849
+ m = g.length ? g : [m.reduce((v, w) => w.height < v.height ? w : v)];
2850
+ }
2851
+ const d = !!s || !!f || c.length < e.length;
2852
+ this.sourceManager.setMaxLevel(d ? m.reduce((g, v) => v.height > g.height ? v : g).index : -1), this.controlBar.setQualities(
2638
2853
  [
2639
2854
  { label: this.i18n.autoQuality, onSelect: () => this.sourceManager.setLevel(-1) },
2640
2855
  // Yüksekten düşüğe (hls.js artan sıralıyor) — l.index hls.js'teki gerçek seviye numarası, sıradan bağımsız.
2641
- ...[...e].sort((h, m) => m.height - h.height).map((h) => ({
2642
- label: r(h),
2643
- locked: a(h),
2644
- onSelect: a(h) ? () => o == null ? void 0 : o.requestUnlock() : () => this.sourceManager.setLevel(h.index)
2856
+ ...[...c].sort((g, v) => v.height - g.height).map((g) => ({
2857
+ label: r(g),
2858
+ locked: a(g),
2859
+ onSelect: a(g) ? () => s == null ? void 0 : s.requestUnlock() : () => this.sourceManager.setLevel(g.index)
2645
2860
  }))
2646
2861
  ],
2647
2862
  i === -1 || !e[i] ? this.i18n.autoQuality : r(e[i])
2648
- ), (l = this.rewardedUnlock) == null || l.onQualitiesChanged();
2863
+ ), (x = this.rewardedUnlock) == null || x.onQualitiesChanged();
2649
2864
  });
2650
- s(this, "onFullscreenChange", (e) => {
2865
+ o(this, "onFullscreenChange", (e) => {
2651
2866
  this.controlBar.setFullscreenState(this.isFullscreenActive()), (e == null ? void 0 : e.type) === "webkitbeginfullscreen" ? this.showCaptionsNatively() : (e == null ? void 0 : e.type) === "webkitendfullscreen" && this.syncCaptionsFromNative();
2652
2867
  });
2653
2868
  // ── Oynatma durumuna göre merkez buton + otomatik gizlenme ──
2654
2869
  // Değer: 'hidden' (tamamen gizle — countdown/geo) ya da 'reduced' (yalnızca oynat/duraklat + ses — ads).
2655
- s(this, "chromeBlockers", /* @__PURE__ */ new Map());
2656
- s(this, "onPlay", () => {
2870
+ o(this, "chromeBlockers", /* @__PURE__ */ new Map());
2871
+ o(this, "onPlay", () => {
2657
2872
  this.matches(":hover") && this.scheduleCursorHide(), this.isChromeBlocked || (this.centerPlayButton.style.opacity = "0", this.centerPlayButton.style.pointerEvents = "none", this.scheduleAutoHide()), this.dispatchEvent(new CustomEvent("hp:play"));
2658
2873
  });
2659
- s(this, "onPause", () => {
2874
+ o(this, "onPause", () => {
2660
2875
  this.hideTimer && clearTimeout(this.hideTimer), this.showCursor(), this.isChromeBlocked || (this.centerPlayButton.style.opacity = "1", this.centerPlayButton.style.pointerEvents = "auto", this.showChrome()), this.dispatchEvent(new CustomEvent("hp:pause"));
2661
2876
  });
2662
- s(this, "onEnded", () => {
2877
+ o(this, "onEnded", () => {
2663
2878
  this.dispatchEvent(new CustomEvent("hp:ended"));
2664
2879
  });
2665
- s(this, "onRateChange", () => {
2880
+ o(this, "onRateChange", () => {
2666
2881
  this.dispatchEvent(new CustomEvent("hp:ratechange", { detail: { rate: this.videoEl.playbackRate } }));
2667
2882
  });
2668
- s(this, "onPointerDownFocus", () => {
2883
+ o(this, "onPointerDownFocus", () => {
2669
2884
  var e;
2670
2885
  this.focus({ preventScroll: !0 }), (e = this.adsController) == null || e.initializeDisplayContainerOnce();
2671
2886
  });
2672
- s(this, "onVideoPressStart", (e) => {
2887
+ o(this, "onVideoPressStart", (e) => {
2673
2888
  this.tapCandidate = !0;
2674
2889
  const i = "touches" in e ? e.touches[0] : e;
2675
2890
  i && (this.tapStartX = i.clientX, this.tapStartY = i.clientY);
2676
2891
  });
2677
- s(this, "onVideoPressEnd", (e) => {
2892
+ o(this, "onVideoPressEnd", (e) => {
2678
2893
  var l, h;
2679
2894
  if (!this.tapCandidate || (this.tapCandidate = !1, this.isChromeBlocked) || (l = this.gestureControls) != null && l.isCurrentlyHolding()) return;
2680
2895
  const i = "changedTouches" in e;
2681
2896
  if (!i && Date.now() - this.lastTouchEndAt < 800) return;
2682
2897
  i && (this.lastTouchEndAt = Date.now());
2683
2898
  const r = i ? e.changedTouches[0] : e;
2684
- if (r && Math.hypot(r.clientX - this.tapStartX, r.clientY - this.tapStartY) > Qt) {
2899
+ if (r && Math.hypot(r.clientX - this.tapStartX, r.clientY - this.tapStartY) > oi) {
2685
2900
  i && !this.isChromeBlocked && this.scheduleAutoHide();
2686
2901
  return;
2687
2902
  }
2688
- const o = i ? "touch" : this.lastPointerType, a = () => this.onBackgroundTap(o, () => {
2903
+ const s = i ? "touch" : this.lastPointerType, a = () => this.onBackgroundTap(s, () => {
2689
2904
  this.videoEl.paused ? this.videoEl.play().catch(() => {
2690
2905
  }) : this.videoEl.pause();
2691
2906
  });
2692
- r && ((h = this.tapGestures) != null && h.handleTap(r.clientX, o === "pen" ? "pen" : o, a)) || a();
2907
+ r && ((h = this.tapGestures) != null && h.handleTap(r.clientX, s === "pen" ? "pen" : s, a)) || a();
2693
2908
  });
2694
- s(this, "onVideoPressCancel", () => {
2909
+ o(this, "onVideoPressCancel", () => {
2695
2910
  this.tapCandidate = !1;
2696
2911
  });
2697
- s(this, "onPointerMove", (e) => {
2912
+ o(this, "onPointerMove", (e) => {
2698
2913
  if (e.pointerType !== "mouse") {
2699
2914
  this.chromeVisible && this.scheduleAutoHide();
2700
2915
  return;
2701
2916
  }
2702
2917
  this.pointerOverControls = e.composedPath().includes(this.chromeEl), this.scheduleAutoHide(), e.pointerType === "mouse" && this.scheduleCursorHide();
2703
2918
  });
2704
- s(this, "onPointerLeave", (e) => {
2919
+ o(this, "onPointerLeave", (e) => {
2705
2920
  e.pointerType === "mouse" && (this.pointerOverControls = !1, this.scheduleAutoHide(), this.showCursor());
2706
2921
  });
2707
- s(this, "scheduleAutoHide", () => {
2922
+ o(this, "scheduleAutoHide", () => {
2708
2923
  this.showChrome(), this.hideTimer && clearTimeout(this.hideTimer), !(this.videoEl.paused || this.loadingActive) && (this.audioMode || (this.hideTimer = setTimeout(() => {
2709
2924
  this.audioMode || this.videoEl.paused || this.loadingActive || this.pointerOverControls || this.controlBar.settingsMenu.isOpen || this.setChromeOpacity("0");
2710
- }, this.lastPointerType === "mouse" ? this.autoHideDelayMs : Math.max(this.autoHideDelayMs, $t))));
2925
+ }, this.lastPointerType === "mouse" ? this.autoHideDelayMs : Math.max(this.autoHideDelayMs, si))));
2711
2926
  });
2712
- It(), this.root = this.attachShadow({ mode: "open" });
2927
+ jt(), this.root = this.attachShadow({ mode: "open" });
2713
2928
  const e = document.createElement("style");
2714
- e.textContent = Ge, this.root.appendChild(e);
2929
+ e.textContent = $e, this.root.appendChild(e);
2715
2930
  const i = document.createElement("div");
2716
- i.className = "hp-root", i.innerHTML = Yt, 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 _t(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 pt(this.videoEl), this.root.querySelector(".media-layer").appendChild(this.loadingSpinner.el), this.errorScreen = new ct(this.videoEl, this.i18n), this.errorScreen.setOnRetry(() => void this.retrySource()), this.errorScreen.setOnShown(({ code: o, message: a }) => this.dispatchEvent(new CustomEvent("hp:error", { detail: { message: a, code: o } }))), 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";
2931
+ i.className = "hp-root", i.innerHTML = li, 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 ti(this.videoEl), this.prerollGate.onWaitChange = (s) => this.onPrerollWaitChange(s), this.videoEl.addEventListener("error", this.onMediaError), this.videoEl.addEventListener("hp-internal:subtitle-error", this.onSubtitleError), this.loadingSpinner = new yt(this.videoEl), this.root.querySelector(".media-layer").appendChild(this.loadingSpinner.el), this.errorScreen = new kt(this.videoEl, this.i18n), this.errorScreen.setOnRetry(() => void this.retrySource()), this.errorScreen.setOnShown(({ code: s, message: a }) => this.dispatchEvent(new CustomEvent("hp:error", { detail: { message: a, code: s } }))), 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";
2717
2932
  const r = document.createElement("span");
2718
- r.className = "hp-chip hp:flex hp:items-center hp:justify-center hp:w-16 hp:h-16", r.style.borderRadius = "9999px", r.appendChild(z("play", "hp:text-2xl")), this.centerPlayButton.appendChild(r), this.centerPlayButton.addEventListener("click", (o) => {
2719
- var d;
2933
+ r.className = "hp-chip hp:flex hp:items-center hp:justify-center hp:w-16 hp:h-16", r.style.borderRadius = "9999px", r.appendChild(M("play", "hp:text-2xl")), this.centerPlayButton.appendChild(r), this.centerPlayButton.addEventListener("click", (s) => {
2934
+ var f;
2720
2935
  const a = () => {
2721
2936
  this.videoEl.paused && this.videoEl.play();
2722
- }, l = this.lastPointerType === "pen" ? "pen" : this.lastPointerType === "touch" ? "touch" : null, m = o.composedPath().includes(r) ? a : () => this.onBackgroundTap(l ?? "mouse", a);
2723
- l && ((d = this.tapGestures) != null && d.handleTap(o.clientX, l, m)) || m();
2724
- }), 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, {
2937
+ }, l = this.lastPointerType === "pen" ? "pen" : this.lastPointerType === "touch" ? "touch" : null, c = s.composedPath().includes(r) ? a : () => this.onBackgroundTap(l ?? "mouse", a);
2938
+ l && ((f = this.tapGestures) != null && f.handleTap(s.clientX, l, c)) || c();
2939
+ }), 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, {
2725
2940
  onLevelsChanged: this.onHlsLevelsChanged,
2726
2941
  onAudioTracksChanged: this.onStreamAudioTracks,
2727
2942
  onTextTracksFound: this.onStreamTextTracks,
2728
2943
  onCues: this.onStreamCues,
2729
- onFatalError: (o) => {
2730
- const a = o === "network" ? 2 : 3;
2944
+ onFatalError: (s) => {
2945
+ const a = s === "drm" ? 5 : s === "unsupported" ? 4 : s === "network" ? 2 : 3;
2731
2946
  this.streamErrorCode = a, this.errorScreen.showStreamError(a);
2732
2947
  },
2733
- onStreamError: (o) => this.log.add({
2948
+ onStreamError: (s) => this.log.add({
2734
2949
  source: "stream",
2735
- message: `${o.type}: ${o.details}`,
2736
- fatal: o.fatal,
2737
- details: { url: o.url, httpStatus: o.httpStatus, reason: o.reason, engine: "hls.js" }
2950
+ message: `${s.type}: ${s.details}`,
2951
+ fatal: s.fatal,
2952
+ details: { url: s.url, httpStatus: s.httpStatus, reason: s.reason, engine: s.engine ?? "hls.js" }
2738
2953
  })
2739
- }), this.errorScreen.setShouldShow(() => !this.sourceManager.isRecovering() && !this.tryNextSourceGroup()), this.controlBar = new rt(
2954
+ }), this.errorScreen.setShouldShow(() => !this.sourceManager.isRecovering() && !this.tryNextSourceGroup()), this.controlBar = new pt(
2740
2955
  this.videoEl,
2741
- xe,
2956
+ Ae,
2742
2957
  {
2743
2958
  onRequestFullscreen: () => this.requestFullscreenCompat(),
2744
2959
  liveSyncPosition: () => {
2745
- var o;
2746
- return ((o = this.sourceManager.hlsInstance) == null ? void 0 : o.liveSyncPosition) ?? null;
2960
+ var s;
2961
+ return ((s = this.sourceManager.hlsInstance) == null ? void 0 : s.liveSyncPosition) ?? null;
2747
2962
  },
2748
2963
  onExitFullscreen: () => this.exitFullscreenCompat(),
2749
2964
  isFullscreen: () => this.isFullscreenActive(),
2750
2965
  // adsController sonradan kurulur — closure'lar her çağrıda güncel this.adsController'ı okur.
2751
2966
  isAdActive: () => this.isAdPlaying(),
2752
2967
  interceptTogglePlay: () => this.cancelPrerollWait(),
2753
- onLoadingChange: (o) => this.onLoadingChange(o),
2968
+ onLoadingChange: (s) => this.onLoadingChange(s),
2754
2969
  adTogglePlay: () => {
2755
- var o;
2756
- return (o = this.adsController) == null ? void 0 : o.toggleAdPlayPause();
2970
+ var s;
2971
+ return (s = this.adsController) == null ? void 0 : s.toggleAdPlayPause();
2757
2972
  },
2758
2973
  adIsPaused: () => {
2759
- var o;
2760
- return ((o = this.adsController) == null ? void 0 : o.isAdPaused()) ?? !0;
2974
+ var s;
2975
+ return ((s = this.adsController) == null ? void 0 : s.isAdPaused()) ?? !0;
2761
2976
  },
2762
2977
  adVolume: {
2763
2978
  isAdActive: () => this.isAdPlaying(),
2764
2979
  getVolume: () => {
2765
- var o;
2766
- return ((o = this.adsController) == null ? void 0 : o.getAdVolume()) ?? 1;
2980
+ var s;
2981
+ return ((s = this.adsController) == null ? void 0 : s.getAdVolume()) ?? 1;
2767
2982
  },
2768
- setVolume: (o) => {
2983
+ setVolume: (s) => {
2769
2984
  var a;
2770
- return (a = this.adsController) == null ? void 0 : a.setAdVolume(o);
2985
+ return (a = this.adsController) == null ? void 0 : a.setAdVolume(s);
2771
2986
  },
2772
2987
  toggleMute: () => {
2773
- var o;
2774
- return (o = this.adsController) == null ? void 0 : o.toggleAdMute();
2988
+ var s;
2989
+ return (s = this.adsController) == null ? void 0 : s.toggleAdMute();
2775
2990
  }
2776
2991
  }
2777
2992
  },
2778
2993
  this.i18n
2779
- ), this.chromeEl.appendChild(this.controlBar.el), this.chromeEl.appendChild(this.controlBar.topEl), this.videoArea.appendChild(this.controlBar.volumePanel.unmuteBadge), this.captionRenderer = new G(this.videoEl, this.videoArea, this.controlBar.seekBar.el, this.i18n), this.videoArea.appendChild(this.captionRenderer.layerEl), this.keyboard = new ht(
2994
+ ), this.chromeEl.appendChild(this.controlBar.el), this.chromeEl.appendChild(this.controlBar.topEl), this.videoArea.appendChild(this.controlBar.volumePanel.unmuteBadge), this.captionRenderer = new D(this.videoEl, this.videoArea, this.controlBar.seekBar.el, this.i18n), this.videoArea.appendChild(this.captionRenderer.layerEl), this.keyboard = new vt(
2780
2995
  this,
2781
2996
  this.videoEl,
2782
2997
  () => this.isFullscreenActive() ? this.exitFullscreenCompat() : this.requestFullscreenCompat()
2783
- ), this.tooltip = new lt(this.videoArea), this.contextMenu = new zt(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.keyboard.interceptTogglePlay = () => this.cancelPrerollWait(), this.controlBar.seekBar.onKeyboardSeek = (o) => this.seekFeedback.show(o), this.blockChrome("boot");
2998
+ ), this.tooltip = new gt(this.videoArea), this.contextMenu = new Vt(this.videoArea), this.seekFeedback = new Gt(this.i18n), this.videoArea.appendChild(this.seekFeedback.el), this.controlBar.onSkip = (s) => this.seekFeedback.show(s), this.keyboard.onSeek = (s) => this.seekFeedback.show(s), this.keyboard.interceptTogglePlay = () => this.cancelPrerollWait(), this.controlBar.seekBar.onKeyboardSeek = (s) => this.seekFeedback.show(s), this.blockChrome("boot");
2784
2999
  }
2785
3000
  static get observedAttributes() {
2786
3001
  return ["src", "poster", "autoplay", "muted", "loop", "theme", "locale"];
2787
3002
  }
2788
3003
  connectedCallback() {
2789
- this.hasAttribute("tabindex") || (this.tabIndex = 0), this.syncFromAttributes(), this.bootResolved || (this.bootGraceTimer = setTimeout(() => {
3004
+ this.offGlobalPlugins ?? (this.offGlobalPlugins = Qt(() => void this.syncPlugins())), this.hasAttribute("tabindex") || (this.tabIndex = 0), this.syncFromAttributes(), this.bootResolved || (this.bootGraceTimer = setTimeout(() => {
2790
3005
  this.bootGraceTimer = null, this.bootResolved || (this.bootResolved = !0, this.syncFromAttributes());
2791
3006
  }, 80)), this.videoEl.addEventListener("play", this.onPlay), this.videoEl.addEventListener("pause", this.onPause), this.videoEl.addEventListener("ended", this.onEnded), this.videoEl.addEventListener("ratechange", this.onRateChange), this.addEventListener("pointermove", this.onPointerMove), this.addEventListener("pointerleave", this.onPointerLeave), this.addEventListener("pointerdown", this.onPointerDownFocus), document.addEventListener("fullscreenchange", this.onFullscreenChange), document.addEventListener("webkitfullscreenchange", this.onFullscreenChange), this.videoEl.addEventListener("webkitbeginfullscreen", this.onFullscreenChange), this.videoEl.addEventListener("webkitendfullscreen", this.onFullscreenChange), this.addEventListener("contextmenu", this.onContextMenu), this.addEventListener("pointerdown", this.onPointerTypeTrack, !0), this.videoEl.textTracks.addEventListener("addtrack", this.onNativeTextTracksChanged), this.videoEl.textTracks.addEventListener("removetrack", this.onNativeTextTracksChanged), this.controlBar.settingsMenu.onOpenChange = (e) => {
2792
3007
  e && this.hideTimer && clearTimeout(this.hideTimer), e || this.scheduleAutoHide(), this.tooltip.recheckOcclusion();
@@ -2798,8 +3013,8 @@ class Ie extends HTMLElement {
2798
3013
  });
2799
3014
  }
2800
3015
  disconnectedCallback() {
2801
- var e, i, r, o, a, l, h, m, d, p, g, f, x, v, y, w, C, E, S, T, A, k, P, L, c, u, b, M, B, F, I;
2802
- (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.videoEl.removeEventListener("ended", this.onEnded), this.videoEl.removeEventListener("ratechange", this.onRateChange), 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(), (h = this.gestureControls) == null || h.destroy(), (m = this.loopSection) == null || m.destroy(), (d = this.audioStage) == null || d.destroy(), this.audioStage = null, (p = this.rewardedUnlock) == null || p.destroy(), this.rewardedUnlock = null, (g = this.sponsorship) == null || g.destroy(), this.sponsorship = null, (f = this.adTriggers) == null || f.destroy(), this.adTriggers = null, (x = this.castController) == null || x.destroy(), this.castController = null, (v = this.inViewAutoplay) == null || v.destroy(), (y = this.unregisterSticky) == null || y.call(this), (w = this.playlistRunner) == null || w.destroy(), (C = this.hopeStory) == null || C.destroy(), (E = this.markProgress) == null || E.destroy(), (S = this.segments) == null || S.destroy(), (T = this.spriteThumbnails) == null || T.destroy(), (A = this.countdownScreen) == null || A.destroy(), (k = this.geoChecker) == null || k.destroy(), (P = this.redirectScreen) == null || P.destroy(), (L = this.skipSegments) == null || L.destroy(), this.skipSegments = null, this.skipSegmentsKey = "", (c = this.accessibility) == null || c.destroy(), this.accessibility = null, this.accessibilityKey = "", (u = this.playbackHistory) == null || u.destroy(), this.playbackHistory = null, this.historyKey = "", (b = this.qrResume) == null || b.destroy(), (M = this.pauseAd) == null || M.destroy(), this.pauseAd = null, (B = this.dubbing) == null || B.destroy(), (F = this.liveWallClock) == null || F.destroy(), (I = this.daiController) == null || I.destroy(), this.prerollGate.release(!1), this.hideTimer && clearTimeout(this.hideTimer), this.bootGraceTimer && clearTimeout(this.bootGraceTimer), this.lastSynced = null;
3016
+ var e, i, r, s, a, l, h, c, f, b, m, d, k, x, g, v, w, S, T, A, E, p, u, y, C, L, z, F, O, re, se, oe, ae;
3017
+ (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.videoEl.removeEventListener("ended", this.onEnded), this.videoEl.removeEventListener("ratechange", this.onRateChange), 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(), (s = this.debugPanel) == null || s.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(), (h = this.gestureControls) == null || h.destroy(), (c = this.loopSection) == null || c.destroy(), (f = this.audioStage) == null || f.destroy(), this.audioStage = null, (b = this.rewardedUnlock) == null || b.destroy(), this.rewardedUnlock = null, (m = this.sponsorship) == null || m.destroy(), this.sponsorship = null, (d = this.adTriggers) == null || d.destroy(), this.adTriggers = null, (k = this.castController) == null || k.destroy(), this.castController = null, (x = this.inViewAutoplay) == null || x.destroy(), (g = this.unregisterSticky) == null || g.call(this), (v = this.playlistRunner) == null || v.destroy(), (w = this.hopeStory) == null || w.destroy(), (S = this.markProgress) == null || S.destroy(), (T = this.segments) == null || T.destroy(), (A = this.spriteThumbnails) == null || A.destroy(), (E = this.countdownScreen) == null || E.destroy(), (p = this.geoChecker) == null || p.destroy(), (u = this.redirectScreen) == null || u.destroy(), (y = this.pluginHost) == null || y.destroy(), this.pluginHost = null, (C = this.offGlobalPlugins) == null || C.call(this), this.offGlobalPlugins = null, (L = this.accessibility) == null || L.destroy(), this.accessibility = null, this.accessibilityKey = "", (z = this.playbackHistory) == null || z.destroy(), this.playbackHistory = null, this.historyKey = "", (F = this.qoeTracker) == null || F.destroy(), this.qoeTracker = null, this.analyticsKey = "", (O = this.qrResume) == null || O.destroy(), (re = this.pauseAd) == null || re.destroy(), this.pauseAd = null, (se = this.dubbing) == null || se.destroy(), (oe = this.liveWallClock) == null || oe.destroy(), (ae = this.daiController) == null || ae.destroy(), this.prerollGate.release(!1), this.hideTimer && clearTimeout(this.hideTimer), this.bootGraceTimer && clearTimeout(this.bootGraceTimer), this.lastSynced = null;
2803
3018
  }
2804
3019
  /** Reklam/consent-farkında plugin'lerin (gesture/sticky/in-view-autoplay) ortak sorgusu. */
2805
3020
  isAdPlaying() {
@@ -2820,7 +3035,33 @@ class Ie extends HTMLElement {
2820
3035
  pause() {
2821
3036
  this.videoEl.pause();
2822
3037
  }
2823
- /** Şu anki oynatma yolu: `native` (MP4/WebM), `native-hls` (tarayıcının HLS'i) ya da `hls.js` — teşhis için. */
3038
+ /** Kaynak yüklenmeden önce kurulur — ilk oynatma ölçülsün. */
3039
+ async applyAnalytics(e) {
3040
+ var s;
3041
+ const i = e.analytics ? JSON.stringify(e.analytics) : "";
3042
+ if (i === this.analyticsKey || (this.analyticsKey = i, (s = this.qoeTracker) == null || s.destroy(), this.qoeTracker = null, !e.analytics)) return;
3043
+ const { installAnalytics: r } = await import("./analytics-DEjTAJO9.js");
3044
+ this.analyticsKey === i && (this.qoeTracker = r(
3045
+ {
3046
+ hostEl: this,
3047
+ videoEl: this.videoEl,
3048
+ currentSrc: () => this.sourceManager.currentSrc,
3049
+ isAdActive: () => this.isAdPlaying(),
3050
+ currentLevel: () => this.sourceManager.currentLevel(),
3051
+ engine: () => this.sourceManager.engine.engine,
3052
+ isFullscreen: () => this.isFullscreenActive(),
3053
+ playerId: () => this._options.id,
3054
+ sessionId: () => this.sourceManager.sessionId
3055
+ },
3056
+ e.analytics === !0 ? {} : e.analytics
3057
+ ));
3058
+ }
3059
+ /** Oturumun deneyim (QoE) ölçümleri — `options.analytics` kapalıysa null. */
3060
+ get qoe() {
3061
+ var e;
3062
+ return ((e = this.qoeTracker) == null ? void 0 : e.metrics) ?? null;
3063
+ }
3064
+ /** Şu anki oynatma yolu: `native` (MP4/WebM), `native-hls` (tarayıcının HLS'i), `hls.js` ya da `dash.js` — teşhis için. */
2824
3065
  get playbackEngine() {
2825
3066
  return this.sourceManager.engine;
2826
3067
  }
@@ -2832,7 +3073,7 @@ class Ie extends HTMLElement {
2832
3073
  async showDebugLog() {
2833
3074
  if (!this.debugPanel) {
2834
3075
  const { installDebugPanel: e } = await import("./debugPanel-Bnc_7GOn.js");
2835
- this.debugPanel ?? (this.debugPanel = e({ containerEl: this.videoArea, i18n: this.i18n, log: this.log, version: U }));
3076
+ this.debugPanel ?? (this.debugPanel = e({ containerEl: this.videoArea, i18n: this.i18n, log: this.log, version: G }));
2836
3077
  }
2837
3078
  this.debugPanel.show();
2838
3079
  }
@@ -2848,12 +3089,12 @@ class Ie extends HTMLElement {
2848
3089
  async toggleStats(e) {
2849
3090
  if (!this.statsPanel) {
2850
3091
  if (e === !1) return;
2851
- const { installStats: i } = await import("./statsPanel-DSClIwA3.js");
3092
+ const { installStats: i } = await import("./statsPanel-D0DtoFgS.js");
2852
3093
  this.statsPanel ?? (this.statsPanel = i({
2853
3094
  videoEl: this.videoEl,
2854
3095
  containerEl: this.videoArea,
2855
3096
  i18n: this.i18n,
2856
- version: U,
3097
+ version: G,
2857
3098
  getEngine: () => this.sourceManager.engine,
2858
3099
  getHls: () => this.sourceManager.hlsInstance
2859
3100
  }));
@@ -2864,6 +3105,67 @@ class Ie extends HTMLElement {
2864
3105
  get hls() {
2865
3106
  return this.sourceManager.hlsInstance;
2866
3107
  }
3108
+ /** Eklenti ekler (sayfa yenilenene ya da `remove()` çağrılana kadar). */
3109
+ use(e, i) {
3110
+ const r = [e, i];
3111
+ return this.runtimePlugins.push(r), this.syncPlugins(), {
3112
+ name: typeof e == "function" ? "" : e.name,
3113
+ remove: () => {
3114
+ const s = this.runtimePlugins.indexOf(r);
3115
+ s < 0 || (this.runtimePlugins.splice(s, 1), this.syncPlugins());
3116
+ }
3117
+ };
3118
+ }
3119
+ /** Eklentiyi sayfadaki tüm player'lara ekler. */
3120
+ static use(e, i) {
3121
+ return $t(e, i);
3122
+ }
3123
+ async syncPlugins() {
3124
+ try {
3125
+ await this.doSyncPlugins();
3126
+ } finally {
3127
+ this.settlePlugins();
3128
+ }
3129
+ }
3130
+ markPluginsPending() {
3131
+ const e = this.settlePlugins;
3132
+ this.pluginsSettled = new Promise((i) => this.settlePlugins = i), e();
3133
+ }
3134
+ async adTagTransform(e, i) {
3135
+ var s, a;
3136
+ return (!!((s = this._options.plugins) != null && s.length) || this.runtimePlugins.length > 0 || Ce().length > 0) && await Promise.race([this.pluginsSettled, new Promise((l) => setTimeout(l, 2e3))]), ((a = this.pluginHost) == null ? void 0 : a.transformAdTag(e, i)) ?? e;
3137
+ }
3138
+ async doSyncPlugins() {
3139
+ var s;
3140
+ const e = this._options, i = (s = e.skipSegments) != null && s.length ? [[() => import("./skipSegments-vJMhdiJn.js").then((a) => a.skipSegmentsPlugin), e.skipSegments]] : [], r = [...Ce(), ...e.plugins ?? [], ...this.runtimePlugins];
3141
+ if (!(!i.length && !r.length && !this.pluginHost)) {
3142
+ if (!this.pluginHost) {
3143
+ const { PluginHost: a } = await import("./pluginHost-GxNfyP5E.js");
3144
+ this.pluginHost ?? (this.pluginHost = new a({
3145
+ element: this,
3146
+ video: this.videoEl,
3147
+ videoArea: this.videoArea,
3148
+ chromeEl: this.chromeEl,
3149
+ labels: this.i18n,
3150
+ locale: () => this._options.locale ?? "tr",
3151
+ currentSrc: () => this.sourceManager.currentSrc,
3152
+ isAdPlaying: () => this.isAdPlaying(),
3153
+ blockAds: () => this.blockChrome("ads", "hidden"),
3154
+ unblockAds: () => this.unblockChrome("ads"),
3155
+ isFullscreen: () => this.isFullscreenActive(),
3156
+ addControlButton: (l, h) => this.controlBar.addPluginButton(l, h),
3157
+ settings: {
3158
+ registerToggle: (l) => this.controlBar.settingsMenu.registerToggle(l.key, l),
3159
+ unregisterToggle: (l) => this.controlBar.settingsMenu.unregisterToggle(l),
3160
+ registerSubmenu: (l) => this.controlBar.settingsMenu.registerSubmenu(l),
3161
+ unregisterSubmenu: (l) => this.controlBar.settingsMenu.unregisterSubmenu(l)
3162
+ },
3163
+ log: (l, h) => this.log.add({ source: "player", message: l, details: h })
3164
+ }));
3165
+ }
3166
+ await this.pluginHost.sync(i, r);
3167
+ }
3168
+ }
2867
3169
  /** `options.qrResume` kuruluysa "telefonundan devam et" QR ekranını manuel göster (ör. entegratörün kendi "telefona gönder" butonu) — otomatik gösterim kuralları (minElapsed/minRemaining) burada uygulanmaz. */
2868
3170
  showQrResume() {
2869
3171
  var e;
@@ -2911,23 +3213,23 @@ class Ie extends HTMLElement {
2911
3213
  })), this.pluginApplyRun;
2912
3214
  }
2913
3215
  async applyOptions(e) {
2914
- var a, l, h, m, d, p, g, f, x, v, y, w, C, E, S, T, A, k, P, L, c, u;
2915
- e.poster && (this.videoEl.poster = e.poster), this.casting || (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 ?? ke, this.tapToPlay = e.tapToPlay ?? "auto", this.cursorHideDelayMs = e.cursorHideDelayMs === !1 ? null : e.cursorHideDelayMs ?? we, this.cursorHideDelayMs === null && this.showCursor(), this.controlBar.settingsMenu.setQualityBadgeEnabled(e.qualityBadge !== !1), this.controlBar.settingsMenu.setPlaybackRates(e.playbackRates ?? xe), this.controlBar.setLiveSeekBar(e.liveSeekBar !== !1), this.controlBar.setButtonsVisible({ pip: e.pipButton !== !1, fullscreen: e.fullscreenButton !== !1 }), e.miniProgress && !this.miniProgress ? (this.miniProgress = new Lt(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();
2916
- const i = e.keyboardSeekStep && e.keyboardSeekStep > 0 ? e.keyboardSeekStep : Wt;
2917
- this.keyboard.seekStep = i, this.controlBar.seekBar.keyboardStep = i;
3216
+ var a, l, h, c, f, b, m, d, k, x, g, v, w, S, T, A, E, p, u, y, C, L;
3217
+ this.markPluginsPending(), e.poster && (this.videoEl.poster = e.poster), this.casting || (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 ?? Le, this.tapToPlay = e.tapToPlay ?? "auto", this.cursorHideDelayMs = e.cursorHideDelayMs === !1 ? null : e.cursorHideDelayMs ?? Pe, this.cursorHideDelayMs === null && this.showCursor(), this.controlBar.settingsMenu.setQualityBadgeEnabled(e.qualityBadge !== !1), this.controlBar.settingsMenu.setPlaybackRates(e.playbackRates ?? Ae), this.controlBar.setLiveSeekBar(e.liveSeekBar !== !1), this.controlBar.setButtonsVisible({ pip: e.pipButton !== !1, fullscreen: e.fullscreenButton !== !1 }), e.miniProgress && !this.miniProgress ? (this.miniProgress = new It(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();
3218
+ const i = e.keyboardSeekStep && e.keyboardSeekStep > 0 ? e.keyboardSeekStep : ai;
3219
+ this.keyboard.seekStep = i, this.keyboard.frameRate = e.frameRate && e.frameRate > 0 ? e.frameRate : null, this.controlBar.seekBar.keyboardStep = i;
2918
3220
  const r = e.skipButtons === !0 ? {} : e.skipButtons || null;
2919
3221
  this.controlBar.setSkipButtons(
2920
- r && r.back !== !1 ? r.back ?? Ee : null,
2921
- r && r.forward !== !1 ? r.forward ?? Ee : null
3222
+ r && r.back !== !1 ? r.back ?? Me : null,
3223
+ r && r.forward !== !1 ? r.forward ?? Me : null
2922
3224
  ), e.showRemainingTime !== void 0 && e.showRemainingTime !== this.appliedShowRemaining && (this.appliedShowRemaining = e.showRemainingTime, this.controlBar.setShowRemaining(e.showRemainingTime));
2923
- const o = Jt(e.aspectRatio);
2924
- 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", Vt(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(), (h = this.hopeStory) == null || h.refreshLabels(), (m = this.countdownScreen) == null || m.refreshLabels(), (d = this.geoChecker) == null || d.refreshLabels(), (p = this.redirectScreen) == null || p.refreshLabels(), (g = this.skipSegments) == null || g.refreshLabels(), (f = this.accessibility) == null || f.refreshLabels(), (x = this.playbackHistory) == null || x.refreshLabels(), (v = this.qrResume) == null || v.refreshLabels(), (y = this.pauseAd) == null || y.refreshLabels(), (w = this.castController) == null || w.refreshLabels(), (C = this.dubbing) == null || C.refreshLabels(), this.onStreamAudioTracks(this.streamAudio.tracks, this.streamAudio.active), (E = this.statsPanel) == null || E.refreshLabels(), (S = this.debugPanel) == null || S.refreshLabels(), (T = this.liveWallClock) == null || T.refreshLabels(), (A = this.loopSection) == null || A.refreshLabels(), (k = this.audioStage) == null || k.refreshLabels(), (P = this.rewardedUnlock) == null || P.refreshLabels(), (L = this.markProgress) == null || L.refreshLabels(), (u = (c = this.unregisterSticky) == null ? void 0 : c.refreshLabels) == null || u.call(c), this.bootResolved && await this.queuePluginApply(e);
3225
+ const s = hi(e.aspectRatio);
3226
+ s ? this.style.setProperty("--hp-aspect-ratio", s) : this.style.removeProperty("--hp-aspect-ratio"), e.theme ? this.setAttribute("data-theme", e.theme) : this.removeAttribute("data-theme"), this.localeCode = e.locale ?? "tr", Zt(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(), (h = this.hopeStory) == null || h.refreshLabels(), (c = this.countdownScreen) == null || c.refreshLabels(), (f = this.geoChecker) == null || f.refreshLabels(), (b = this.redirectScreen) == null || b.refreshLabels(), (m = this.pluginHost) == null || m.refreshLabels(), (d = this.accessibility) == null || d.refreshLabels(), (k = this.playbackHistory) == null || k.refreshLabels(), (x = this.qrResume) == null || x.refreshLabels(), (g = this.pauseAd) == null || g.refreshLabels(), (v = this.castController) == null || v.refreshLabels(), (w = this.dubbing) == null || w.refreshLabels(), this.onStreamAudioTracks(this.streamAudio.tracks, this.streamAudio.active), (S = this.statsPanel) == null || S.refreshLabels(), (T = this.debugPanel) == null || T.refreshLabels(), (A = this.liveWallClock) == null || A.refreshLabels(), (E = this.loopSection) == null || E.refreshLabels(), (p = this.audioStage) == null || p.refreshLabels(), (u = this.rewardedUnlock) == null || u.refreshLabels(), (y = this.markProgress) == null || y.refreshLabels(), (L = (C = this.unregisterSticky) == null ? void 0 : C.refreshLabels) == null || L.call(C), this.bootResolved && await this.queuePluginApply(e);
2925
3227
  }
2926
3228
  /** applyOptions'ın asenkron kısmı — yalnızca queuePluginApply üzerinden, sırayla çalışır. */
2927
3229
  async applyPluginsAndPlayback(e) {
2928
3230
  if (e.ads && !this.adsController) {
2929
3231
  const r = e.ads === !0 ? {} : e.ads;
2930
- Ut(r) && !this.prerollGate.isArmed && this.prerollGate.arm(r.prerollTimeoutMs ?? Z), jt(), e.countdownScreen || this.installAdsOnce(e);
3232
+ ei(r) && !this.prerollGate.isArmed && this.prerollGate.arm(r.prerollTimeoutMs ?? te), ri(), e.countdownScreen || this.installAdsOnce(e);
2931
3233
  }
2932
3234
  await this.applyAudioMode(e);
2933
3235
  const i = () => ({
@@ -2951,45 +3253,46 @@ class Ie extends HTMLElement {
2951
3253
  }))) : await this.initPlayback(e);
2952
3254
  }
2953
3255
  async initPlayback(e) {
2954
- var f, x, v, y, w, C, E, S, T, A, k, P, L;
2955
- this.sourceManager.configure(e.hls), this.errorScreen.dismiss(), await this.applyRewardedUnlock(e);
2956
- const i = (f = e.sources) != null && f.length ? e.sources : e.src ? [{ src: e.src, label: this.i18n.autoQuality }] : [];
2957
- this.sourceGroups = Ue(i, e.sourcePriority);
2958
- const r = (c) => this.sourceManager.isLoaded(c.src, c.type) && !this.isSourceLocked(c), o = this.sourceGroups.findIndex((c) => c.sources.some(r));
2959
- this.activeGroup = o !== -1 ? o : this.firstPlayableGroup();
2960
- const a = ((x = this.sourceGroups[this.activeGroup]) == null ? void 0 : x.sources) ?? [];
2961
- this.currentSources = a, this.fallbackPending = !1;
2962
- const h = a.find(r) ?? this.pickInitialSource(a);
2963
- if (h && !this.sourceManager.isLoaded(h.src, h.type) && (a.length <= 1 && (this.controlBar.setQualities([], ""), this.hlsQualitiesShown = !1), await this.sourceManager.load(h.src, h.type), e.autoplay && this.videoEl.play().catch(() => {
2964
- })), h && (this.activeSourceLabel = h.label), this.renderSourceQualities(), await this.installAdsOnce(e), await this.applySponsorship(e), await this.applyAdTriggers(e), await this.applyCast(e), e.gesture && !this.gestureControls) {
2965
- const c = e.gesture === !0 ? {} : e.gesture, { installGesture: u } = await import("./gesture-BzPCgi87.js");
3256
+ var d, k, x, g, v, w, S, T, A, E;
3257
+ const i = e.cmcd ? { ...e.cmcd === !0 ? {} : e.cmcd } : null;
3258
+ i && !i.contentId && e.id && (i.contentId = e.id), this.sourceManager.configure(e.hls, { dash: e.dash, drm: e.drm, qualityLimit: e.qualityLimit, cmcd: i }), await this.applyAnalytics(e), this.errorScreen.dismiss(), await this.applyRewardedUnlock(e);
3259
+ const r = (d = e.sources) != null && d.length ? e.sources : e.src ? [{ src: e.src, label: this.i18n.autoQuality }] : [];
3260
+ this.sourceGroups = Xe(r, e.sourcePriority);
3261
+ const s = (p) => this.sourceManager.isLoaded(p.src, p.type) && !this.isSourceLocked(p), a = this.sourceGroups.findIndex((p) => p.sources.some(s));
3262
+ this.activeGroup = a !== -1 ? a : this.firstPlayableGroup();
3263
+ const l = this.limitSources(((k = this.sourceGroups[this.activeGroup]) == null ? void 0 : k.sources) ?? []);
3264
+ this.currentSources = l, this.fallbackPending = !1;
3265
+ const c = l.find(s) ?? this.pickInitialSource(l);
3266
+ if (c && !this.sourceManager.isLoaded(c.src, c.type) && (l.length <= 1 && (this.controlBar.setQualities([], ""), this.hlsQualitiesShown = !1), await this.sourceManager.load(c.src, c.type), e.autoplay && this.videoEl.play().catch(() => {
3267
+ })), c && (this.activeSourceLabel = c.label), this.renderSourceQualities(), await this.installAdsOnce(e), await this.applySponsorship(e), await this.applyAdTriggers(e), await this.applyCast(e), e.gesture && !this.gestureControls) {
3268
+ const p = e.gesture === !0 ? {} : e.gesture, { installGesture: u } = await import("./gesture-BzPCgi87.js");
2966
3269
  this.gestureControls = u(
2967
3270
  { videoEl: this.videoEl, overlayContainerEl: this.videoArea, isAdActive: () => this.isAdPlaying() },
2968
- c
3271
+ p
2969
3272
  );
2970
3273
  }
2971
3274
  if (e.loopSection && !this.loopSection) {
2972
- const c = e.loopSection === !0 ? {} : e.loopSection, { installLoopSection: u } = await import("./loopSection-CvF4l5uf.js");
3275
+ const p = e.loopSection === !0 ? {} : e.loopSection, { installLoopSection: u } = await import("./loopSection-CvF4l5uf.js");
2973
3276
  this.loopSection = u(
2974
3277
  {
2975
3278
  videoEl: this.videoEl,
2976
3279
  seekBarEl: this.controlBar.seekBar.el,
2977
3280
  markers: this.controlBar.seekBar,
2978
- addControlButton: (b, M, B) => this.controlBar.addButton(b, M, B),
3281
+ addControlButton: (y, C, L) => this.controlBar.addButton(y, C, L),
2979
3282
  i18n: this.i18n
2980
3283
  },
2981
- c
3284
+ p
2982
3285
  );
2983
3286
  }
2984
3287
  if (e.inViewAutoplay && !this.inViewAutoplay) {
2985
- const c = e.inViewAutoplay === !0 ? {} : e.inViewAutoplay, { installInViewAutoplay: u } = await import("./inViewAutoplay-CRJe7GA4.js");
3288
+ const p = e.inViewAutoplay === !0 ? {} : e.inViewAutoplay, { installInViewAutoplay: u } = await import("./inViewAutoplay-CRJe7GA4.js");
2986
3289
  this.inViewAutoplay = u(
2987
3290
  { videoEl: this.videoEl, observeEl: this, isAdActive: () => this.isAdPlaying() || this.casting },
2988
- c
3291
+ p
2989
3292
  );
2990
3293
  }
2991
3294
  if (e.sticky && !this.unregisterSticky) {
2992
- const c = e.sticky === !0 ? {} : e.sticky, { installSticky: u } = await import("./sticky-D_eLCNFk.js");
3295
+ const p = e.sticky === !0 ? {} : e.sticky, { installSticky: u } = await import("./sticky-D_eLCNFk.js");
2993
3296
  this.unregisterSticky = u(
2994
3297
  {
2995
3298
  key: this.instanceKey,
@@ -3000,44 +3303,45 @@ class Ie extends HTMLElement {
3000
3303
  isAdActive: () => this.isAdPlaying(),
3001
3304
  i18n: this.i18n
3002
3305
  },
3003
- c
3306
+ p
3004
3307
  );
3005
3308
  }
3006
3309
  if (e.playlist && !this.playlistRunner) {
3007
- const { installPlaylist: c } = await import("./playlist-jDbObKz3.js");
3008
- this.playlistRunner = c(
3310
+ const { installPlaylist: p } = await import("./playlist-DJsdK6xm.js");
3311
+ this.playlistRunner = p(
3009
3312
  {
3010
3313
  videoEl: this.videoEl,
3011
3314
  hostEl: this,
3012
3315
  panelEl: this.getOrCreatePanelContainer(),
3013
- loadSource: (u, b) => this.sourceManager.load(u, b),
3316
+ loadSource: (u, y) => this.sourceManager.load(u, y),
3014
3317
  setPoster: (u) => {
3015
3318
  this.videoEl.poster = u;
3016
3319
  },
3017
3320
  requestFreshAd: (u) => {
3018
- var b;
3019
- return (b = this.adsController) == null ? void 0 : b.resetForNewItem(u);
3321
+ var y;
3322
+ return (y = this.adsController) == null ? void 0 : y.resetForNewItem(u);
3020
3323
  },
3324
+ isAdActive: () => this.isAdPlaying(),
3021
3325
  i18n: this.i18n
3022
3326
  },
3023
3327
  e.playlist
3024
3328
  );
3025
3329
  }
3026
3330
  if (e.story && !this.hopeStory) {
3027
- const { installStory: c } = await import("./story-Ce56rEaN.js");
3028
- this.hopeStory = c(
3331
+ const { installStory: p } = await import("./story-BRkhSDhR.js");
3332
+ this.hopeStory = p(
3029
3333
  {
3030
3334
  videoEl: this.videoEl,
3031
3335
  hostEl: this,
3032
3336
  videoAreaEl: this.videoArea,
3033
3337
  playerBodyEls: [this.root.querySelector(".media-layer"), this.chromeEl, this.centerPlayButton],
3034
- loadSource: (u, b) => this.sourceManager.load(u, b),
3338
+ loadSource: (u, y) => this.sourceManager.load(u, y),
3035
3339
  setPoster: (u) => {
3036
3340
  this.videoEl.poster = u;
3037
3341
  },
3038
3342
  requestFreshAd: (u) => {
3039
- var b;
3040
- return (b = this.adsController) == null ? void 0 : b.resetForNewItem(u);
3343
+ var y;
3344
+ return (y = this.adsController) == null ? void 0 : y.resetForNewItem(u);
3041
3345
  },
3042
3346
  i18n: this.i18n
3043
3347
  },
@@ -3045,24 +3349,24 @@ class Ie extends HTMLElement {
3045
3349
  );
3046
3350
  }
3047
3351
  if (e.markers && !this.markProgress) {
3048
- const { installMarkers: c } = await import("./markers-BmcD53SJ.js");
3049
- this.markProgress = c(
3352
+ const { installMarkers: p } = await import("./markers-Dr4-CCxE.js");
3353
+ this.markProgress = p(
3050
3354
  {
3051
3355
  videoEl: this.videoEl,
3052
3356
  overlayContainerEl: this.videoArea,
3053
- addSeekBarMarker: (u, b) => this.controlBar.seekBar.addMarker(u, b),
3357
+ addSeekBarMarker: (u, y) => this.controlBar.seekBar.addMarker(u, y),
3054
3358
  i18n: this.i18n
3055
3359
  },
3056
3360
  e.markers
3057
3361
  );
3058
3362
  }
3059
- if ((v = e.segments) != null && v.length && !this.segments) {
3060
- const { installSegments: c } = await import("./segments-DXARAkpS.js");
3061
- this.segments = c({ videoEl: this.videoEl, seekBar: this.controlBar.seekBar }, e.segments);
3363
+ if ((x = e.segments) != null && x.length && !this.segments) {
3364
+ const { installSegments: p } = await import("./segments--hl_QVrI.js");
3365
+ this.segments = p({ videoEl: this.videoEl, seekBar: this.controlBar.seekBar }, e.segments);
3062
3366
  }
3063
3367
  if (e.spriteThumbnails && !this.spriteThumbnails) {
3064
- const { installSpriteThumbnails: c } = await import("./spriteThumbnails-DLfTFsPU.js");
3065
- this.spriteThumbnails = c(
3368
+ const { installSpriteThumbnails: p } = await import("./spriteThumbnails-BoxVY--_.js");
3369
+ this.spriteThumbnails = p(
3066
3370
  {
3067
3371
  videoEl: this.videoEl,
3068
3372
  seekBar: this.controlBar.seekBar,
@@ -3071,18 +3375,18 @@ class Ie extends HTMLElement {
3071
3375
  e.spriteThumbnails
3072
3376
  );
3073
3377
  }
3074
- const m = e.redirectScreen ? JSON.stringify(e.redirectScreen) : "";
3075
- if (m !== this.redirectKey && (this.redirectKey = m, (y = this.redirectScreen) == null || y.destroy(), this.redirectScreen = null, e.redirectScreen)) {
3076
- const { installRedirectScreen: c } = await import("./redirectScreen-CFZKtEdv.js");
3077
- this.redirectScreen = c(
3378
+ const f = e.redirectScreen ? JSON.stringify(e.redirectScreen) : "";
3379
+ if (f !== this.redirectKey && (this.redirectKey = f, (g = this.redirectScreen) == null || g.destroy(), this.redirectScreen = null, e.redirectScreen)) {
3380
+ const { installRedirectScreen: p } = await import("./redirectScreen-BT_26-5g.js");
3381
+ this.redirectScreen = p(
3078
3382
  { hostEl: this, videoEl: this.videoEl, overlayContainerEl: this.videoArea, isAdActive: () => this.isAdPlaying(), i18n: this.i18n },
3079
3383
  e.redirectScreen
3080
3384
  );
3081
3385
  }
3082
- const d = e.accessibility ? JSON.stringify(e.accessibility) : "";
3083
- if (d !== this.accessibilityKey && (this.accessibilityKey = d, (w = this.accessibility) == null || w.destroy(), this.accessibility = null, e.accessibility)) {
3084
- const { installAccessibility: c } = await import("./accessibility-CehDBG3h.js");
3085
- this.accessibilityKey === d && (this.accessibility = c(
3386
+ const b = e.accessibility ? JSON.stringify(e.accessibility) : "";
3387
+ if (b !== this.accessibilityKey && (this.accessibilityKey = b, (v = this.accessibility) == null || v.destroy(), this.accessibility = null, e.accessibility)) {
3388
+ const { installAccessibility: p } = await import("./accessibility-DFx4CE0H.js");
3389
+ this.accessibilityKey === b && (this.accessibility = p(
3086
3390
  {
3087
3391
  hostEl: this,
3088
3392
  videoEl: this.videoEl,
@@ -3090,24 +3394,21 @@ class Ie extends HTMLElement {
3090
3394
  i18n: this.i18n,
3091
3395
  registerSubmenu: (u) => this.controlBar.settingsMenu.registerSubmenu(u),
3092
3396
  unregisterSubmenu: (u) => this.controlBar.settingsMenu.unregisterSubmenu(u),
3093
- addQuickButton: (u, b, M) => this.controlBar.settingsMenu.addQuickButton(u, b, M),
3094
- seekStep: () => this.keyboard.seekStep
3397
+ addQuickButton: (u, y, C) => this.controlBar.settingsMenu.addQuickButton(u, y, C),
3398
+ seekStep: () => this.keyboard.seekStep,
3399
+ extraShortcuts: () => {
3400
+ var u;
3401
+ return ((u = this.pluginHost) == null ? void 0 : u.shortcuts()) ?? [];
3402
+ }
3095
3403
  },
3096
3404
  e.accessibility === !0 ? {} : e.accessibility
3097
3405
  ));
3098
3406
  }
3099
- const p = (C = e.skipSegments) != null && C.length ? JSON.stringify(e.skipSegments) : "";
3100
- if (p !== this.skipSegmentsKey && (this.skipSegmentsKey = p, (E = this.skipSegments) == null || E.destroy(), this.skipSegments = null, (S = e.skipSegments) != null && S.length)) {
3101
- const { installSkipSegments: c } = await import("./skipSegments-U0aUwoDt.js");
3102
- this.skipSegmentsKey === p && (this.skipSegments = c(
3103
- { hostEl: this, videoEl: this.videoEl, overlayContainerEl: this.videoArea, isAdActive: () => this.isAdPlaying(), i18n: this.i18n },
3104
- e.skipSegments
3105
- ));
3106
- }
3107
- const g = e.history ? JSON.stringify(e.history) : "";
3108
- if (g !== this.historyKey && (this.historyKey = g, (T = this.playbackHistory) == null || T.destroy(), this.playbackHistory = null, e.history)) {
3109
- const c = e.qrResume ? e.qrResume.paramName ?? "vtime" : null, u = !!c && new URL(location.href).searchParams.has(c), { installHistory: b } = await import("./history-YQ9A8HBv.js");
3110
- this.historyKey === g && (this.playbackHistory = b(
3407
+ await this.syncPlugins();
3408
+ const m = e.history ? JSON.stringify(e.history) : "";
3409
+ if (m !== this.historyKey && (this.historyKey = m, (w = this.playbackHistory) == null || w.destroy(), this.playbackHistory = null, e.history)) {
3410
+ const p = e.qrResume ? e.qrResume.paramName ?? "vtime" : null, u = !!p && new URL(location.href).searchParams.has(p), { installHistory: y } = await import("./history-CvydU0aN.js");
3411
+ this.historyKey === m && (this.playbackHistory = y(
3111
3412
  {
3112
3413
  hostEl: this,
3113
3414
  videoEl: this.videoEl,
@@ -3122,24 +3423,24 @@ class Ie extends HTMLElement {
3122
3423
  ));
3123
3424
  }
3124
3425
  if (e.qrResume && !this.qrResume) {
3125
- const { installQrResume: c } = await import("./qrResume-DXwD3oSA.js");
3126
- this.qrResume = c({ videoEl: this.videoEl, overlayContainerEl: this.videoArea, i18n: this.i18n }, e.qrResume);
3426
+ const { installQrResume: p } = await import("./qrResume-DXwD3oSA.js");
3427
+ this.qrResume = p({ videoEl: this.videoEl, overlayContainerEl: this.videoArea, i18n: this.i18n }, e.qrResume);
3127
3428
  }
3128
3429
  if (this.qrResume) {
3129
- const c = this.qrResume;
3430
+ const p = this.qrResume;
3130
3431
  this.controlBar.settingsMenu.setQrResumeToggle({
3131
3432
  label: this.i18n.qrResumeMenuLabel,
3132
- getValueLabel: () => c.isEnabled() ? this.i18n.qrResumeOn : this.i18n.qrResumeOff,
3133
- onToggle: () => c.setEnabled(!c.isEnabled())
3433
+ getValueLabel: () => p.isEnabled() ? this.i18n.qrResumeOn : this.i18n.qrResumeOff,
3434
+ onToggle: () => p.setEnabled(!p.isEnabled())
3134
3435
  });
3135
3436
  }
3136
3437
  if (e.tapGestures && !this.tapGestures) {
3137
- const { installTapGestures: c } = await import("./tapGestures-DrC42DiI.js");
3138
- this.tapGestures = c(
3438
+ const { installTapGestures: p } = await import("./tapGestures-DrC42DiI.js");
3439
+ this.tapGestures = p(
3139
3440
  {
3140
3441
  areaEl: this.videoArea,
3141
3442
  seekBy: (u) => {
3142
- this.controlBar.seekBar.el.style.pointerEvents !== "none" && (Ae(this.videoEl, u), this.seekFeedback.show(u));
3443
+ this.controlBar.seekBar.el.style.pointerEvents !== "none" && (Fe(this.videoEl, u), this.seekFeedback.show(u));
3143
3444
  },
3144
3445
  togglePlay: () => this.videoEl.paused ? void this.videoEl.play().catch(() => {
3145
3446
  }) : this.videoEl.pause(),
@@ -3152,22 +3453,22 @@ class Ie extends HTMLElement {
3152
3453
  );
3153
3454
  }
3154
3455
  if (this.tapGestures) {
3155
- const { DEFAULT_TAP_GESTURES: c } = await import("./tapGestures-DrC42DiI.js");
3156
- this.tapGestures.setGestures(e.tapGestures === !0 ? c : e.tapGestures || []);
3456
+ const { DEFAULT_TAP_GESTURES: p } = await import("./tapGestures-DrC42DiI.js");
3457
+ this.tapGestures.setGestures(e.tapGestures === !0 ? p : e.tapGestures || []);
3157
3458
  }
3158
- if ((A = e.pauseAd) != null && A.adUnitPath && !this.pauseAd) {
3159
- const { installPauseAd: c } = await import("./pauseAd-BQQe21X4.js");
3160
- this.pauseAd = c(
3459
+ if ((S = e.pauseAd) != null && S.adUnitPath && !this.pauseAd) {
3460
+ const { installPauseAd: p } = await import("./pauseAd-BQQe21X4.js");
3461
+ this.pauseAd = p(
3161
3462
  { videoEl: this.videoEl, hostEl: this, videoArea: this.videoArea, i18n: this.i18n, isBlocked: () => this.isChromeBlocked },
3162
3463
  e.pauseAd
3163
3464
  );
3164
3465
  }
3165
3466
  if (e.dubbing && !this.dubbing) {
3166
- const { installDubbing: c } = await import("./dubbing-kNMPpyHl.js");
3167
- this.dubbing = c(
3467
+ const { installDubbing: p } = await import("./dubbing-kNMPpyHl.js");
3468
+ this.dubbing = p(
3168
3469
  {
3169
3470
  videoEl: this.videoEl,
3170
- loadSource: (u, b) => this.sourceManager.load(u, b),
3471
+ loadSource: (u, y) => this.sourceManager.load(u, y),
3171
3472
  registerSubmenu: (u) => this.controlBar.settingsMenu.registerSubmenu(u),
3172
3473
  unregisterSubmenu: (u) => this.controlBar.settingsMenu.unregisterSubmenu(u),
3173
3474
  i18n: this.i18n
@@ -3176,27 +3477,27 @@ class Ie extends HTMLElement {
3176
3477
  );
3177
3478
  }
3178
3479
  if (e.liveWallClock && !this.liveWallClock) {
3179
- const c = e.liveWallClock === !0 ? {} : e.liveWallClock, { installLiveWallClock: u } = await import("./liveWallClock-ChUTtzLD.js");
3480
+ const p = e.liveWallClock === !0 ? {} : e.liveWallClock, { installLiveWallClock: u } = await import("./liveWallClock-ChUTtzLD.js");
3180
3481
  this.liveWallClock = u(
3181
3482
  {
3182
3483
  videoEl: this.videoEl,
3183
3484
  seekBarEl: this.controlBar.seekBar.el,
3184
- addControlElement: (b) => this.controlBar.addElement(b),
3485
+ addControlElement: (y) => this.controlBar.addElement(y),
3185
3486
  i18n: this.i18n,
3186
3487
  getPlayingDate: () => {
3187
- var F, I, te;
3188
- const b = (F = this.sourceManager.hlsInstance) == null ? void 0 : F.playingDate;
3189
- if (b) return b;
3190
- const M = (te = (I = this.videoEl).getStartDate) == null ? void 0 : te.call(I), B = (M == null ? void 0 : M.getTime()) ?? NaN;
3191
- return Number.isFinite(B) && B > 0 ? new Date(B + this.videoEl.currentTime * 1e3) : null;
3488
+ var z, F, O;
3489
+ const y = (z = this.sourceManager.hlsInstance) == null ? void 0 : z.playingDate;
3490
+ if (y) return y;
3491
+ const C = (O = (F = this.videoEl).getStartDate) == null ? void 0 : O.call(F), L = (C == null ? void 0 : C.getTime()) ?? NaN;
3492
+ return Number.isFinite(L) && L > 0 ? new Date(L + this.videoEl.currentTime * 1e3) : null;
3192
3493
  }
3193
3494
  },
3194
- c
3495
+ p
3195
3496
  ), this.controlBar.seekBar.liveHoverHandled = !0;
3196
3497
  }
3197
3498
  if (e.dai && !this.daiController) {
3198
- const { installDai: c } = await import("./dai-B9Tth1Iv.js");
3199
- this.daiController = await c(
3499
+ const { installDai: p } = await import("./dai-B9Tth1Iv.js");
3500
+ this.daiController = await p(
3200
3501
  {
3201
3502
  videoEl: this.videoEl,
3202
3503
  hostEl: this,
@@ -3208,7 +3509,7 @@ class Ie extends HTMLElement {
3208
3509
  e.dai
3209
3510
  );
3210
3511
  }
3211
- (k = e.subtitles) != null && k.length ? this.optionTracks = mt(this.videoEl, e.subtitles) : (Re(this.videoEl), this.optionTracks = []), this.rebuildCaptions(((L = (P = e.subtitles) == null ? void 0 : P.find((c) => c.default)) == null ? void 0 : L.label) ?? null);
3512
+ (T = e.subtitles) != null && T.length ? this.optionTracks = Et(this.videoEl, e.subtitles) : (He(this.videoEl), this.optionTracks = []), this.rebuildCaptions(((E = (A = e.subtitles) == null ? void 0 : A.find((p) => p.default)) == null ? void 0 : E.label) ?? null);
3212
3513
  }
3213
3514
  /** Altyazı menüsünü `options.subtitles` + yayın izlerinden kurar; `activeLabel` varsa onu seçer. */
3214
3515
  rebuildCaptions(e) {
@@ -3216,17 +3517,17 @@ class Ie extends HTMLElement {
3216
3517
  this.selectCaption = null, this.activeCaptionLabel = null, this.controlBar.setCaptions([], this.i18n.captionsOff), this.captionRenderer.setActiveTrack(null), this.captionTrackActive = !1, this.controlBar.settingsMenu.setCaptionAppearance(null), this.sourceManager.selectTextTrack(null);
3217
3518
  return;
3218
3519
  }
3219
- const i = (o) => {
3520
+ const i = (s) => {
3220
3521
  var l;
3221
- const a = gt(this.subtitleTracks, o);
3222
- this.activeCaptionLabel = a ? o : null, this.sourceManager.selectTextTrack(((l = this.streamTracks.find((h) => h.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);
3522
+ const a = Ct(this.subtitleTracks, s);
3523
+ this.activeCaptionLabel = a ? s : null, this.sourceManager.selectTextTrack(((l = this.streamTracks.find((h) => h.label === s)) == null ? void 0 : l.id) ?? null), this.captionRenderer.setActiveTrack(a), this.captionTrackActive = a !== null, this.controlBar.settingsMenu.setActiveCaption(a ? s : this.i18n.captionsOff), this.controlBar.settingsMenu.setCaptionAppearance(a !== null ? this.buildCaptionAppearance() : null);
3223
3524
  };
3224
3525
  this.selectCaption = i;
3225
- const r = e && this.subtitleTracks.some((o) => o.label === e) ? e : null;
3526
+ const r = e && this.subtitleTracks.some((s) => s.label === e) ? e : null;
3226
3527
  this.controlBar.setCaptions(
3227
3528
  [
3228
3529
  { label: this.i18n.captionsOff, onSelect: () => i(null) },
3229
- ...this.subtitleTracks.map(({ label: o }) => ({ label: o, onSelect: () => i(o) }))
3530
+ ...this.subtitleTracks.map(({ label: s }) => ({ label: s, onSelect: () => i(s) }))
3230
3531
  ],
3231
3532
  r ?? this.i18n.captionsOff
3232
3533
  ), i(r);
@@ -3238,23 +3539,23 @@ class Ie extends HTMLElement {
3238
3539
  streamTrackLabel(e, i) {
3239
3540
  if (!(!e || e.toLowerCase() === i.toLowerCase() || /^(stream|audio|track|text|sub|subtitle|und)[\s_-]*\d*$/i.test(e)) || !i || i === "und") return e || i;
3240
3541
  try {
3241
- const o = new Intl.DisplayNames([this.localeCode], { type: "language" }).of(i);
3242
- if (o) return o.charAt(0).toLocaleUpperCase(this.localeCode) + o.slice(1);
3542
+ const s = new Intl.DisplayNames([this.localeCode], { type: "language" }).of(i);
3543
+ if (s) return s.charAt(0).toLocaleUpperCase(this.localeCode) + s.slice(1);
3243
3544
  } catch {
3244
3545
  }
3245
3546
  return e || i;
3246
3547
  }
3247
3548
  /** Aynı adlı iz varsa (ör. options.subtitles'ta da "English") dil/sırayla ayırt edilir. */
3248
3549
  uniqueLabel(e, i, r) {
3249
- const o = r.has(e) ? `${e} (${i})` : e;
3250
- return r.add(o), o;
3550
+ const s = r.has(e) ? `${e} (${i})` : e;
3551
+ return r.add(s), s;
3251
3552
  }
3252
3553
  /** 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). */
3253
3554
  buildCaptionAppearance() {
3254
- const e = ["small", "normal", "large"], i = (r, o, a, l) => r.map((h, m) => ({
3555
+ const e = ["small", "normal", "large"], i = (r, s, a, l) => r.map((h, c) => ({
3255
3556
  value: h,
3256
- active: o() === h,
3257
- ariaLabel: `${l} ${m + 1}`,
3557
+ active: s() === h,
3558
+ ariaLabel: `${l} ${c + 1}`,
3258
3559
  onSelect: () => a(h)
3259
3560
  }));
3260
3561
  return {
@@ -3266,14 +3567,14 @@ class Ie extends HTMLElement {
3266
3567
  })),
3267
3568
  bgColorLabel: this.i18n.captionBgColor,
3268
3569
  getBgColorOptions: () => i(
3269
- G.BG_COLOR_PRESETS,
3570
+ D.BG_COLOR_PRESETS,
3270
3571
  () => this.captionRenderer.getBgColor(),
3271
3572
  (r) => this.captionRenderer.setBgColor(r),
3272
3573
  this.i18n.captionBgColor
3273
3574
  ),
3274
3575
  textColorLabel: this.i18n.captionTextColor,
3275
3576
  getTextColorOptions: () => i(
3276
- G.TEXT_COLOR_PRESETS,
3577
+ D.TEXT_COLOR_PRESETS,
3277
3578
  () => this.captionRenderer.getTextColor(),
3278
3579
  (r) => this.captionRenderer.setTextColor(r),
3279
3580
  this.i18n.captionTextColor
@@ -3297,11 +3598,32 @@ class Ie extends HTMLElement {
3297
3598
  return !!((i = this.qualityGate) != null && i.isLocked(this.sourceHeight(e)));
3298
3599
  }
3299
3600
  /** Başlangıç kaynağı: `selected` (ya da ilk); kilitliyse serbest kaynakların en yükseği. */
3601
+ /** `qualityLimit.max` üstü yükseklikler; hepsi üstündeyse en düşüğü kalır. */
3602
+ limitSources(e) {
3603
+ var s;
3604
+ const i = (s = this._options.qualityLimit) == null ? void 0 : s.max;
3605
+ if (!i || e.length < 2) return e;
3606
+ const r = e.filter((a) => (this.sourceHeight(a) ?? 0) <= i);
3607
+ return r.length ? r : [e.reduce((a, l) => (this.sourceHeight(l) ?? 1 / 0) < (this.sourceHeight(a) ?? 1 / 0) ? l : a)];
3608
+ }
3609
+ /** Veri tasarrufu açık ve tarayıcı tasarruf / yavaş bağlantı bildiriyorsa üst sınır (px). */
3610
+ dataSaverHeight() {
3611
+ var s;
3612
+ const e = (s = this._options.qualityLimit) == null ? void 0 : s.dataSaver;
3613
+ if (!e) return null;
3614
+ const i = navigator.connection;
3615
+ return !!i && (i.saveData === !0 || ["slow-2g", "2g", "3g"].includes(i.effectiveType ?? "")) ? typeof e == "number" && e > 0 ? e : 480 : null;
3616
+ }
3300
3617
  pickInitialSource(e) {
3301
- const i = e.find((o) => o.selected) ?? e[0];
3302
- if (!i || !this.isSourceLocked(i)) return i;
3303
- const r = e.filter((o) => !this.isSourceLocked(o));
3304
- return r.length ? r.reduce((o, a) => (this.sourceHeight(a) ?? 0) > (this.sourceHeight(o) ?? 0) ? a : o) : i;
3618
+ const i = this.dataSaverHeight();
3619
+ if (i) {
3620
+ const a = e.filter((l) => !this.isSourceLocked(l) && (this.sourceHeight(l) ?? 1 / 0) <= i);
3621
+ if (a.length) return a.reduce((l, h) => (this.sourceHeight(h) ?? 0) > (this.sourceHeight(l) ?? 0) ? h : l);
3622
+ }
3623
+ const r = e.find((a) => a.selected) ?? e[0];
3624
+ if (!r || !this.isSourceLocked(r)) return r;
3625
+ const s = e.filter((a) => !this.isSourceLocked(a));
3626
+ return s.length ? s.reduce((a, l) => (this.sourceHeight(l) ?? 0) > (this.sourceHeight(a) ?? 0) ? l : a) : r;
3305
3627
  }
3306
3628
  renderSourceQualities() {
3307
3629
  const e = this.currentSources;
@@ -3312,8 +3634,8 @@ class Ie extends HTMLElement {
3312
3634
  label: i.label,
3313
3635
  locked: r,
3314
3636
  onSelect: r ? () => {
3315
- var o;
3316
- return (o = this.qualityGate) == null ? void 0 : o.requestUnlock();
3637
+ var s;
3638
+ return (s = this.qualityGate) == null ? void 0 : s.requestUnlock();
3317
3639
  } : () => void this.switchQualitySource(i)
3318
3640
  };
3319
3641
  }),
@@ -3339,7 +3661,7 @@ class Ie extends HTMLElement {
3339
3661
  if (this.lastHlsLevels.length > 1)
3340
3662
  this.onHlsLevelsChanged(this.lastHlsLevels, e ? -1 : this.lastHlsActive), e && this.sourceManager.setLevel(-1);
3341
3663
  else if (this.currentSources.length > 1) {
3342
- const r = e ? this.currentSources.filter((l) => !this.isSourceLocked(l)).reduce((l, h) => !l || (this.sourceHeight(h) ?? 0) > (this.sourceHeight(l) ?? 0) ? h : l, null) : null, o = this.currentSources.find((l) => l.label === this.activeSourceLabel), a = r ?? (o && this.isSourceLocked(o) ? this.pickInitialSource(this.currentSources) : null);
3664
+ const r = e ? this.currentSources.filter((l) => !this.isSourceLocked(l)).reduce((l, h) => !l || (this.sourceHeight(h) ?? 0) > (this.sourceHeight(l) ?? 0) ? h : l, null) : null, s = this.currentSources.find((l) => l.label === this.activeSourceLabel), a = r ?? (s && this.isSourceLocked(s) ? this.pickInitialSource(this.currentSources) : null);
3343
3665
  a && a.label !== this.activeSourceLabel ? this.switchQualitySource(a) : this.renderSourceQualities();
3344
3666
  }
3345
3667
  (i = this.rewardedUnlock) == null || i.onQualitiesChanged();
@@ -3353,7 +3675,7 @@ class Ie extends HTMLElement {
3353
3675
  if (this.rewardedUnlock)
3354
3676
  this.rewardedUnlock.update(i);
3355
3677
  else {
3356
- const { installRewardedUnlock: r } = await import("./rewardedUnlock-Cn4_68a3.js");
3678
+ const { installRewardedUnlock: r } = await import("./rewardedUnlock-jFOdzfSq.js");
3357
3679
  this.rewardedUnlock ?? (this.rewardedUnlock = r(
3358
3680
  {
3359
3681
  hostEl: this,
@@ -3361,7 +3683,7 @@ class Ie extends HTMLElement {
3361
3683
  overlayEl: this.videoArea,
3362
3684
  chromeEl: this.chromeEl,
3363
3685
  i18n: this.i18n,
3364
- log: (o) => this.log.add({ source: "ads", ...o }),
3686
+ log: (s) => this.log.add({ source: "ads", ...s }),
3365
3687
  play: () => void this.play().catch(() => {
3366
3688
  }),
3367
3689
  exitFullscreen: () => {
@@ -3370,7 +3692,7 @@ class Ie extends HTMLElement {
3370
3692
  lockedQualityLabel: () => this.lockedQualityLabel(),
3371
3693
  // Kalite dosyası değil içerik: aynı videonun 240p ↔ 720p geçişi (ya da HLS → MP4 yedeği) kilidi kapatmasın.
3372
3694
  contentKey: () => this.contentKey(),
3373
- onLockChange: (o) => this.refreshQualityGate(o)
3695
+ onLockChange: (s) => this.refreshQualityGate(s)
3374
3696
  },
3375
3697
  i
3376
3698
  )), this.qualityGate = this.rewardedUnlock;
@@ -3381,7 +3703,7 @@ class Ie extends HTMLElement {
3381
3703
  * yüklediği medya (playlist, hikâye, dublaj) çalıyorsa onun adresi.
3382
3704
  */
3383
3705
  contentKey() {
3384
- const e = this.sourceGroups.flatMap((r) => r.sources.map((o) => o.src)), i = this.sourceManager.currentSrc ?? "";
3706
+ const e = this.sourceGroups.flatMap((r) => r.sources.map((s) => s.src)), i = this.sourceManager.currentSrc ?? "";
3385
3707
  return !i || e.includes(i) ? e.join("|") : i;
3386
3708
  }
3387
3709
  async applyCast(e) {
@@ -3394,8 +3716,8 @@ class Ie extends HTMLElement {
3394
3716
  if (this.castController)
3395
3717
  this.castController.update(i);
3396
3718
  else {
3397
- const { installCast: o } = await import("./cast-DJXOJLEZ.js");
3398
- this.castController ?? (this.castController = o(
3719
+ const { installCast: s } = await import("./cast-Baxvu76A.js");
3720
+ this.castController ?? (this.castController = s(
3399
3721
  {
3400
3722
  hostEl: this,
3401
3723
  videoEl: this.videoEl,
@@ -3405,7 +3727,7 @@ class Ie extends HTMLElement {
3405
3727
  addButton: (a, l, h) => this.controlBar.addButton(a, l, h),
3406
3728
  getMedia: () => this.castMedia(),
3407
3729
  isAdPlaying: () => this.isAdPlaying(),
3408
- isMse: () => this.sourceManager.engine.engine === "hls.js",
3730
+ isMse: () => this.sourceManager.engine.engine === "hls.js" || this.sourceManager.engine.engine === "dash.js",
3409
3731
  contentKey: () => this.contentKey(),
3410
3732
  onRemoteChange: (a) => {
3411
3733
  var l;
@@ -3418,35 +3740,35 @@ class Ie extends HTMLElement {
3418
3740
  }
3419
3741
  /** TV'ye gönderilecek içerik: o an çalan kaynak (ya da `cast.source`), başlık / kapak, altyazılar, reklam tag'leri. */
3420
3742
  castMedia() {
3421
- var C, E, S, T, A;
3743
+ var w, S, T, A, E;
3422
3744
  const e = this._options, i = e.cast ?? {}, r = this.sourceManager.currentSrc;
3423
3745
  if (!r) return null;
3424
- const o = (C = this.currentSources.find((k) => k.src === r)) == null ? void 0 : C.type, a = typeof i.source == "function" ? i.source({ src: r, type: o }) : i.source ?? { src: r, type: o }, l = typeof a == "string" ? { src: a, type: void 0 } : a, h = (k) => new URL(k, document.baseURI).href, m = Te({ src: l.src, type: l.type }), d = typeof e.audio == "object" ? e.audio : null, p = ((E = i.metadata) == null ? void 0 : E.image) ?? (d == null ? void 0 : d.cover) ?? e.poster, g = typeof e.ads == "object" ? e.ads : null, f = g == null ? void 0 : g.prebid, x = f == null ? void 0 : f.custParams, v = f ? { ...J(f.custParams), ...J((S = f.midroll) == null ? void 0 : S.custParams) } : void 0, y = (k, P) => {
3425
- const L = Array.isArray(k) ? k[0] : k;
3426
- return L ? Ht(W(L), P) : void 0;
3427
- }, w = i.ads === !1 ? null : typeof i.ads == "object" ? {
3428
- vmap: i.ads.vmap ? W(i.ads.vmap) : void 0,
3429
- preroll: y(i.ads.preroll),
3430
- midroll: y(i.ads.midroll),
3746
+ const s = (w = this.currentSources.find((p) => p.src === r)) == null ? void 0 : w.type, a = typeof i.source == "function" ? i.source({ src: r, type: s }) : i.source ?? { src: r, type: s }, l = typeof a == "string" ? { src: a, type: void 0 } : a, h = (p) => new URL(p, document.baseURI).href, c = ze({ src: l.src, type: l.type }), f = typeof e.audio == "object" ? e.audio : null, b = ((S = i.metadata) == null ? void 0 : S.image) ?? (f == null ? void 0 : f.cover) ?? e.poster, m = typeof e.ads == "object" ? e.ads : null, d = m == null ? void 0 : m.prebid, k = d == null ? void 0 : d.custParams, x = d ? { ...ee(d.custParams), ...ee((T = d.midroll) == null ? void 0 : T.custParams) } : void 0, g = (p, u) => {
3747
+ const y = Array.isArray(p) ? p[0] : p;
3748
+ return y ? Xt(X(y), u) : void 0;
3749
+ }, v = i.ads === !1 ? null : typeof i.ads == "object" ? {
3750
+ vmap: i.ads.vmap ? X(i.ads.vmap) : void 0,
3751
+ preroll: g(i.ads.preroll),
3752
+ midroll: g(i.ads.midroll),
3431
3753
  midrollIntervalSeconds: i.ads.midrollIntervalSeconds,
3432
- postroll: y(i.ads.postroll)
3433
- } : g ? {
3434
- vmap: g.adTagVmap ? W(g.adTagVmap) : void 0,
3435
- preroll: y(g.adTagPreroll, x),
3436
- midroll: y(g.adTagMidroll, v),
3437
- midrollIntervalSeconds: g.midrollIntervalSeconds,
3438
- postroll: y(g.adTagPostroll)
3754
+ postroll: g(i.ads.postroll)
3755
+ } : m ? {
3756
+ vmap: m.adTagVmap ? X(m.adTagVmap) : void 0,
3757
+ preroll: g(m.adTagPreroll, k),
3758
+ midroll: g(m.adTagMidroll, x),
3759
+ midrollIntervalSeconds: m.midrollIntervalSeconds,
3760
+ postroll: g(m.adTagPostroll)
3439
3761
  } : null;
3440
3762
  return {
3441
3763
  src: h(l.src),
3442
- contentType: l.type || Xt[m] || "video/mp4",
3764
+ contentType: l.type || ni[c] || "video/mp4",
3443
3765
  live: this.videoEl.duration === 1 / 0,
3444
- title: ((T = i.metadata) == null ? void 0 : T.title) ?? (d == null ? void 0 : d.title),
3445
- subtitle: ((A = i.metadata) == null ? void 0 : A.subtitle) ?? (d == null ? void 0 : d.artist),
3446
- image: p ? h(p) : void 0,
3766
+ title: ((A = i.metadata) == null ? void 0 : A.title) ?? (f == null ? void 0 : f.title),
3767
+ subtitle: ((E = i.metadata) == null ? void 0 : E.subtitle) ?? (f == null ? void 0 : f.artist),
3768
+ image: b ? h(b) : void 0,
3447
3769
  music: !!e.audio,
3448
- subtitles: (e.subtitles ?? []).map((k) => ({ src: h(k.src), label: k.label, lang: k.srclang, default: k.default })),
3449
- ads: w && (w.vmap || w.preroll || w.midroll || w.postroll) ? w : null
3770
+ subtitles: (e.subtitles ?? []).map((p) => ({ src: h(p.src), label: p.label, lang: p.srclang, default: p.default })),
3771
+ ads: v && (v.vmap || v.preroll || v.midroll || v.postroll) ? v : null
3450
3772
  };
3451
3773
  }
3452
3774
  async applyAdTriggers(e) {
@@ -3459,8 +3781,8 @@ class Ie extends HTMLElement {
3459
3781
  if (this.adTriggers)
3460
3782
  this.adTriggers.update(i);
3461
3783
  else {
3462
- const { installAdTriggers: o } = await import("./adTriggers-DXmtF4t2.js");
3463
- this.adTriggers ?? (this.adTriggers = o(
3784
+ const { installAdTriggers: s } = await import("./adTriggers-DXmtF4t2.js");
3785
+ this.adTriggers ?? (this.adTriggers = s(
3464
3786
  {
3465
3787
  hostEl: this,
3466
3788
  videoEl: this.videoEl,
@@ -3486,8 +3808,8 @@ class Ie extends HTMLElement {
3486
3808
  if (this.sponsorship)
3487
3809
  this.sponsorship.update(i);
3488
3810
  else {
3489
- const { installSponsorship: o } = await import("./sponsorship-BT21uwN5.js");
3490
- this.sponsorship ?? (this.sponsorship = o(
3811
+ const { installSponsorship: s } = await import("./sponsorship-BT21uwN5.js");
3812
+ this.sponsorship ?? (this.sponsorship = s(
3491
3813
  {
3492
3814
  hostEl: this,
3493
3815
  videoEl: this.videoEl,
@@ -3510,15 +3832,15 @@ class Ie extends HTMLElement {
3510
3832
  firstPlayableGroup(e = 0) {
3511
3833
  var i;
3512
3834
  for (let r = e; r < this.sourceGroups.length; r++) {
3513
- const o = this.sourceGroups[r];
3514
- if (!_e(o, this.videoEl)) {
3835
+ const s = this.sourceGroups[r];
3836
+ if (!Ye(s, this.videoEl)) {
3515
3837
  if (r > e) {
3516
3838
  const a = this.sourceGroups[e].format;
3517
- this.dispatchEvent(new CustomEvent("hp:sourcefallback", { detail: { from: a, to: o.format, code: 4, skipped: !0 } }));
3839
+ this.dispatchEvent(new CustomEvent("hp:sourcefallback", { detail: { from: a, to: s.format, code: 4, skipped: !0 } }));
3518
3840
  }
3519
3841
  return r;
3520
3842
  }
3521
- this.log.add({ source: "player", message: `Source format "${o.format}" is not playable in this browser — skipped`, details: { src: (i = o.sources[0]) == null ? void 0 : i.src } });
3843
+ this.log.add({ source: "player", message: `Source format "${s.format}" is not playable in this browser — skipped`, details: { src: (i = s.sources[0]) == null ? void 0 : i.src } });
3522
3844
  }
3523
3845
  return e === 0 ? 0 : -1;
3524
3846
  }
@@ -3536,19 +3858,19 @@ class Ie extends HTMLElement {
3536
3858
  const r = this.firstPlayableGroup(this.activeGroup + 1);
3537
3859
  if (r === -1) return !1;
3538
3860
  this.fallbackPending = !0;
3539
- const o = Number.isFinite(this.videoEl.duration) ? this.videoEl.currentTime : 0, a = !this.videoEl.paused || !!this._options.autoplay;
3861
+ const s = Number.isFinite(this.videoEl.duration) ? this.videoEl.currentTime : 0, a = !this.videoEl.paused || !!this._options.autoplay;
3540
3862
  return this.log.add({
3541
3863
  source: "player",
3542
3864
  message: `Source "${e.format}" failed — falling back to "${this.sourceGroups[r].format}"`,
3543
3865
  details: { code: i, src: this.sourceManager.currentSrc ?? void 0 }
3544
- }), this.dispatchEvent(new CustomEvent("hp:sourcefallback", { detail: { from: e.format, to: this.sourceGroups[r].format, code: i } })), queueMicrotask(() => void this.activateSourceGroup(r, o, a)), !0;
3866
+ }), this.dispatchEvent(new CustomEvent("hp:sourcefallback", { detail: { from: e.format, to: this.sourceGroups[r].format, code: i } })), queueMicrotask(() => void this.activateSourceGroup(r, s, a)), !0;
3545
3867
  }
3546
3868
  async activateSourceGroup(e, i, r) {
3547
3869
  var l;
3548
- const o = this.sourceGroups[e];
3549
- if (!o) return;
3550
- this.activeGroup = e, this.currentSources = o.sources;
3551
- const a = this.pickInitialSource(o.sources);
3870
+ const s = this.sourceGroups[e];
3871
+ if (!s) return;
3872
+ this.activeGroup = e, this.currentSources = this.limitSources(s.sources);
3873
+ const a = this.pickInitialSource(this.currentSources);
3552
3874
  this.errorScreen.dismiss(), this.controlBar.setQualities([], ""), this.hlsQualitiesShown = !1, this.activeSourceLabel = a.label, i > 0 && this.videoEl.addEventListener("loadedmetadata", () => this.videoEl.currentTime = i, { once: !0 });
3553
3875
  try {
3554
3876
  await this.sourceManager.load(a.src, a.type);
@@ -3560,7 +3882,7 @@ class Ie extends HTMLElement {
3560
3882
  }
3561
3883
  /** Hata ekranındaki "Tekrar dene": birden fazla grup varsa en öncelikli gruptan baştan başla. */
3562
3884
  async retrySource() {
3563
- const e = this.sourceGroups.some((r) => r.sources.some((o) => o.src === this.sourceManager.currentSrc));
3885
+ const e = this.sourceGroups.some((r) => r.sources.some((s) => s.src === this.sourceManager.currentSrc));
3564
3886
  if (this.sourceGroups.length < 2 || !e) return this.sourceManager.reload();
3565
3887
  const i = Number.isFinite(this.videoEl.duration) ? this.videoEl.currentTime : 0;
3566
3888
  this.fallbackPending = !0, await this.activateSourceGroup(this.firstPlayableGroup(), i, !0);
@@ -3573,8 +3895,8 @@ class Ie extends HTMLElement {
3573
3895
  requestFullscreenCompat() {
3574
3896
  if (this.audioMode) return;
3575
3897
  const e = this, i = () => {
3576
- var r, o;
3577
- return (o = (r = this.iosVideo).webkitEnterFullscreen) == null ? void 0 : o.call(r);
3898
+ var r, s;
3899
+ return (s = (r = this.iosVideo).webkitEnterFullscreen) == null ? void 0 : s.call(r);
3578
3900
  };
3579
3901
  e.requestFullscreen ? e.requestFullscreen().catch(i) : e.webkitRequestFullscreen ? e.webkitRequestFullscreen() : i();
3580
3902
  }
@@ -3619,20 +3941,20 @@ class Ie extends HTMLElement {
3619
3941
  * alanın ortasına alınır, sığmazsa küçülür (en az 40px).
3620
3942
  */
3621
3943
  layoutCenterPlay() {
3622
- const e = this.videoArea, i = e.getBoundingClientRect(), r = this.controlBar.seekBar.el.getBoundingClientRect(), o = () => {
3944
+ const e = this.videoArea, i = e.getBoundingClientRect(), r = this.controlBar.seekBar.el.getBoundingClientRect(), s = () => {
3623
3945
  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");
3624
3946
  };
3625
- if (!i.height || !r.height || !e.hasAttribute("data-compact")) return o();
3947
+ if (!i.height || !r.height || !e.hasAttribute("data-compact")) return s();
3626
3948
  const a = 64, l = r.top - i.top - 8;
3627
- if (i.height / 2 + a / 2 <= l) return o();
3628
- const h = Math.max(40, Math.min(56, l - 12)), m = Math.max(h / 2 + 6, l - h / 2), d = Math.round(m - i.height / 2);
3629
- let p = 0;
3630
- const g = this.controlBar.topEl.getBoundingClientRect();
3631
- if (g.width > 0 && m - h / 2 < g.bottom - i.top) {
3632
- const f = g.left - i.left - 8 - h / 2;
3633
- i.width / 2 > f && (p = Math.round(Math.max(h / 2 + 8, f) - i.width / 2));
3949
+ if (i.height / 2 + a / 2 <= l) return s();
3950
+ const h = Math.max(40, Math.min(56, l - 12)), c = Math.max(h / 2 + 6, l - h / 2), f = Math.round(c - i.height / 2);
3951
+ let b = 0;
3952
+ const m = this.controlBar.topEl.getBoundingClientRect();
3953
+ if (m.width > 0 && c - h / 2 < m.bottom - i.top) {
3954
+ const d = m.left - i.left - 8 - h / 2;
3955
+ i.width / 2 > d && (b = Math.round(Math.max(h / 2 + 8, d) - i.width / 2));
3634
3956
  }
3635
- e.setAttribute("data-center-play-shifted", ""), e.style.setProperty("--hp-center-play-shift-x", `${p}px`), e.style.setProperty("--hp-center-play-size", `${h}px`), e.style.setProperty("--hp-center-play-shift", `${d}px`);
3957
+ e.setAttribute("data-center-play-shifted", ""), e.style.setProperty("--hp-center-play-shift-x", `${b}px`), e.style.setProperty("--hp-center-play-size", `${h}px`), e.style.setProperty("--hp-center-play-shift", `${f}px`);
3636
3958
  }
3637
3959
  /** Dar player'da dokunmatikte oynat/duraklat yerine kontrolleri göster/gizle (options.tapToPlay). */
3638
3960
  tapTogglesPlay(e) {
@@ -3701,9 +4023,9 @@ class Ie extends HTMLElement {
3701
4023
  if (this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = null, this.isChromeBlocked || this.showChrome(), this.audioStage)
3702
4024
  this.audioStage.update(i);
3703
4025
  else {
3704
- const { installAudioStage: o } = await import("./audio-LkYgd5Wq.js");
4026
+ const { installAudioStage: s } = await import("./audio-LkYgd5Wq.js");
3705
4027
  if (!this.audioMode) return;
3706
- this.audioStage ?? (this.audioStage = o(
4028
+ this.audioStage ?? (this.audioStage = s(
3707
4029
  {
3708
4030
  videoEl: this.videoEl,
3709
4031
  layerEl: this.root.querySelector(".media-layer"),
@@ -3725,7 +4047,7 @@ class Ie extends HTMLElement {
3725
4047
  if (!this.adsInstall) {
3726
4048
  const i = e.ads === !0 ? {} : e.ads;
3727
4049
  this.adsInstall = (async () => {
3728
- const { installAds: r } = await import("./ads-BFmyld9u.js");
4050
+ const { installAds: r } = await import("./ads-C4tDPsUs.js");
3729
4051
  this.adsController = await r(
3730
4052
  {
3731
4053
  videoEl: this.videoEl,
@@ -3739,18 +4061,19 @@ class Ie extends HTMLElement {
3739
4061
  onAdPlayStateChange: () => this.controlBar.refreshAdPlayState(),
3740
4062
  locale: this.localeCode,
3741
4063
  prerollGate: this.prerollGate,
3742
- log: (o) => this.log.add({ source: "ads", ...o }),
3743
- onAdProgress: (o) => this.controlBar.setAdInfo(o),
4064
+ log: (s) => this.log.add({ source: "ads", ...s }),
4065
+ onAdProgress: (s) => this.controlBar.setAdInfo(s),
3744
4066
  // Sürekli oynatma (vconp): playlist / story bir sonraki içeriği kendiliğinden başlatıyorsa.
3745
4067
  isContinuousPlayback: () => {
3746
- const o = this._options, a = (l) => !!l && l.autoplayNext !== !1;
3747
- return a(o.playlist) || a(o.story);
4068
+ const s = this._options, a = (l) => !!l && l.autoplayNext !== !1;
4069
+ return a(s.playlist) || a(s.story);
3748
4070
  },
3749
4071
  audioPoster: (() => {
3750
4072
  if (!e.audio) return;
3751
- const o = e.audio === !0 ? {} : e.audio;
3752
- return o.adPoster ? new URL(o.adPoster, document.baseURI).href : void 0;
4073
+ const s = e.audio === !0 ? {} : e.audio;
4074
+ return s.adPoster ? new URL(s.adPoster, document.baseURI).href : void 0;
3753
4075
  })(),
4076
+ transformTag: (s, a) => this.adTagTransform(s, a),
3754
4077
  surface: {
3755
4078
  videoEl: this.videoEl,
3756
4079
  containerEl: this.videoArea,
@@ -3782,19 +4105,23 @@ class Ie extends HTMLElement {
3782
4105
  }
3783
4106
  }
3784
4107
  /** Paket sürümü (ör. "1.0.4"). */
3785
- s(Ie, "version", U);
3786
- typeof window < "u" && !customElements.get("hope-player") && customElements.define("hope-player", Ie);
4108
+ o(Ue, "version", G);
4109
+ const di = 1;
4110
+ typeof window < "u" && !customElements.get("hope-player") && customElements.define("hope-player", Ue);
3787
4111
  export {
3788
- U as H,
3789
- Xe as L,
3790
- Ie as a,
3791
- z as c,
3792
- R as f,
3793
- W as g,
3794
- ee as i,
3795
- Ht as m,
3796
- H as s,
3797
- J as t,
3798
- K as v
4112
+ G as H,
4113
+ rt as L,
4114
+ di as P,
4115
+ Ue as a,
4116
+ M as c,
4117
+ ci as d,
4118
+ P as f,
4119
+ X as g,
4120
+ ie as i,
4121
+ Xt as m,
4122
+ $t as r,
4123
+ I as s,
4124
+ ee as t,
4125
+ U as v
3799
4126
  };
3800
- //# sourceMappingURL=player-BVkwkn4b.js.map
4127
+ //# sourceMappingURL=player-DV4Hf5Cw.js.map