@hopeplayer/core 1.4.0 → 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 (88) hide show
  1. package/dist/HopePlayerElement.d.ts +18 -2
  2. package/dist/HopePlayerElement.d.ts.map +1 -1
  3. package/dist/chunks/NativeEme-CXosVcw8.js +80 -0
  4. package/dist/chunks/NativeEme-CXosVcw8.js.map +1 -0
  5. package/dist/chunks/{accessibility-DeUIoAda.js → accessibility-DFx4CE0H.js} +9 -8
  6. package/dist/chunks/{accessibility-DeUIoAda.js.map → accessibility-DFx4CE0H.js.map} +1 -1
  7. package/dist/chunks/{ads-CdWbE9aD.js → ads-C4tDPsUs.js} +3 -3
  8. package/dist/chunks/ads-C4tDPsUs.js.map +1 -0
  9. package/dist/chunks/analytics-DEjTAJO9.js +281 -0
  10. package/dist/chunks/analytics-DEjTAJO9.js.map +1 -0
  11. package/dist/chunks/{cast-BQ-suTcF.js → cast-Baxvu76A.js} +2 -2
  12. package/dist/chunks/{cast-BQ-suTcF.js.map → cast-Baxvu76A.js.map} +1 -1
  13. package/dist/chunks/dash-CWjy-y7B.js +22 -0
  14. package/dist/chunks/dash-CWjy-y7B.js.map +1 -0
  15. package/dist/chunks/{history-DAbqEhNB.js → history-CvydU0aN.js} +2 -2
  16. package/dist/chunks/{history-DAbqEhNB.js.map → history-CvydU0aN.js.map} +1 -1
  17. package/dist/chunks/keySystems-CNzjRq6e.js +70 -0
  18. package/dist/chunks/keySystems-CNzjRq6e.js.map +1 -0
  19. package/dist/chunks/{markers-B04NMI79.js → markers-Dr4-CCxE.js} +2 -2
  20. package/dist/chunks/{markers-B04NMI79.js.map → markers-Dr4-CCxE.js.map} +1 -1
  21. package/dist/chunks/{player-D7WQxMzr.js → player-DV4Hf5Cw.js} +1230 -997
  22. package/dist/chunks/player-DV4Hf5Cw.js.map +1 -0
  23. package/dist/chunks/{playlist-C6Mh9BE8.js → playlist-DJsdK6xm.js} +29 -21
  24. package/dist/chunks/playlist-DJsdK6xm.js.map +1 -0
  25. package/dist/chunks/pluginHost-GxNfyP5E.js +566 -0
  26. package/dist/chunks/pluginHost-GxNfyP5E.js.map +1 -0
  27. package/dist/chunks/{redirectScreen-5HAVRtxe.js → redirectScreen-BT_26-5g.js} +2 -2
  28. package/dist/chunks/{redirectScreen-5HAVRtxe.js.map → redirectScreen-BT_26-5g.js.map} +1 -1
  29. package/dist/chunks/{rewardedUnlock-CGhQyWOk.js → rewardedUnlock-jFOdzfSq.js} +2 -2
  30. package/dist/chunks/{rewardedUnlock-CGhQyWOk.js.map → rewardedUnlock-jFOdzfSq.js.map} +1 -1
  31. package/dist/chunks/{segments-gCPrWRig.js → segments--hl_QVrI.js} +2 -2
  32. package/dist/chunks/{segments-gCPrWRig.js.map → segments--hl_QVrI.js.map} +1 -1
  33. package/dist/chunks/{skipSegments-BbWzPpXz.js → skipSegments-vJMhdiJn.js} +2 -2
  34. package/dist/chunks/{skipSegments-BbWzPpXz.js.map → skipSegments-vJMhdiJn.js.map} +1 -1
  35. package/dist/chunks/{spriteThumbnails-B7oDZFTo.js → spriteThumbnails-BoxVY--_.js} +76 -53
  36. package/dist/chunks/spriteThumbnails-BoxVY--_.js.map +1 -0
  37. package/dist/chunks/{statsPanel-DSClIwA3.js → statsPanel-D0DtoFgS.js} +2 -2
  38. package/dist/chunks/statsPanel-D0DtoFgS.js.map +1 -0
  39. package/dist/chunks/{story-BLBij82f.js → story-BRkhSDhR.js} +2 -2
  40. package/dist/chunks/{story-BLBij82f.js.map → story-BRkhSDhR.js.map} +1 -1
  41. package/dist/controls/SeekBar.d.ts.map +1 -1
  42. package/dist/drm/NativeEme.d.ts +23 -0
  43. package/dist/drm/NativeEme.d.ts.map +1 -0
  44. package/dist/drm/keySystems.d.ts +18 -0
  45. package/dist/drm/keySystems.d.ts.map +1 -0
  46. package/dist/hls/SourceManager.d.ts +31 -5
  47. package/dist/hls/SourceManager.d.ts.map +1 -1
  48. package/dist/hls/dashEngine.d.ts +85 -0
  49. package/dist/hls/dashEngine.d.ts.map +1 -0
  50. package/dist/hls/sourceGroups.d.ts.map +1 -1
  51. package/dist/hope-player.js +1 -1
  52. package/dist/i18n/locales/en.d.ts.map +1 -1
  53. package/dist/i18n/locales/tr.d.ts.map +1 -1
  54. package/dist/i18n/types.d.ts +3 -0
  55. package/dist/i18n/types.d.ts.map +1 -1
  56. package/dist/index.d.ts +2 -2
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/keyboard/KeyboardController.d.ts +14 -0
  59. package/dist/keyboard/KeyboardController.d.ts.map +1 -1
  60. package/dist/plugin-api/PluginAds.d.ts +61 -0
  61. package/dist/plugin-api/PluginAds.d.ts.map +1 -0
  62. package/dist/plugin-api/PluginHost.d.ts +6 -0
  63. package/dist/plugin-api/PluginHost.d.ts.map +1 -1
  64. package/dist/plugin-api/types.d.ts +39 -0
  65. package/dist/plugin-api/types.d.ts.map +1 -1
  66. package/dist/plugins/accessibility/Accessibility.d.ts.map +1 -1
  67. package/dist/plugins/ads/AdsController.d.ts +2 -0
  68. package/dist/plugins/ads/AdsController.d.ts.map +1 -1
  69. package/dist/plugins/analytics/QoeTracker.d.ts +71 -0
  70. package/dist/plugins/analytics/QoeTracker.d.ts.map +1 -0
  71. package/dist/plugins/analytics/index.d.ts +6 -0
  72. package/dist/plugins/analytics/index.d.ts.map +1 -0
  73. package/dist/plugins/playlist/PlaylistRunner.d.ts +2 -0
  74. package/dist/plugins/playlist/PlaylistRunner.d.ts.map +1 -1
  75. package/dist/plugins/sprite-thumbnails/SpriteThumbnails.d.ts +8 -0
  76. package/dist/plugins/sprite-thumbnails/SpriteThumbnails.d.ts.map +1 -1
  77. package/dist/screens/ErrorScreen.d.ts +1 -1
  78. package/dist/screens/ErrorScreen.d.ts.map +1 -1
  79. package/dist/types/index.d.ts +156 -4
  80. package/dist/types/index.d.ts.map +1 -1
  81. package/package.json +2 -1
  82. package/dist/chunks/ads-CdWbE9aD.js.map +0 -1
  83. package/dist/chunks/player-D7WQxMzr.js.map +0 -1
  84. package/dist/chunks/playlist-C6Mh9BE8.js.map +0 -1
  85. package/dist/chunks/pluginHost-DjvLmMYZ.js +0 -376
  86. package/dist/chunks/pluginHost-DjvLmMYZ.js.map +0 -1
  87. package/dist/chunks/spriteThumbnails-B7oDZFTo.js.map +0 -1
  88. package/dist/chunks/statsPanel-DSClIwA3.js.map +0 -1
@@ -1,64 +1,93 @@
1
- var qe = Object.defineProperty;
2
- var Ve = (n, t, e) => t in n ? qe(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
- var s = (n, t, e) => Ve(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 Z(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 Ue(n) {
9
- return !!n.error && !Z(n.error);
8
+ function Qe(n) {
9
+ return !!n.error && !ie(n.error);
10
10
  }
11
- function se() {
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 oe() {
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 Le(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 Ke {
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 && !Ue(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 = Le(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 && (se() || !oe())) {
61
- this.loadNativeHls(t, se() ? "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 Ke {
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 Ke {
83
162
  * İlk metadata'dan önce kod 4 gelirse ve MSE varsa hls.js'e geç.
84
163
  */
85
164
  probeNativeHls(t) {
86
- if (!oe() || 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 Ke {
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 Ke {
108
187
  };
109
188
  }
110
189
  async attachHlsJs(t) {
111
- var g;
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 (((g = this.last) == null ? void 0 : g.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, (c, d) => {
122
- var f, x, v, y, k, C;
123
- if (this.hls === r) {
124
- const w = d;
125
- (C = (k = this.callbacks).onStreamError) == null || C.call(k, {
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",
126
208
  type: String(d.type),
127
209
  details: String(d.details),
128
210
  fatal: !!d.fatal,
129
- url: w.url ?? ((f = w.frag) == null ? void 0 : f.url) ?? ((x = w.context) == null ? void 0 : x.url),
130
- httpStatus: (v = w.response) == null ? void 0 : v.code,
131
- reason: w.reason ?? ((y = w.error) == null ? void 0 : y.message)
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 (!d.fatal || this.hls !== r) return;
135
- const m = [i.ErrorDetails.MANIFEST_LOAD_ERROR, i.ErrorDetails.MANIFEST_LOAD_TIMEOUT].includes(d.details);
136
- if (!o && m && 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 (d.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(d.type === i.ErrorTypes.NETWORK_ERROR ? "network" : "media");
145
- });
146
- const l = () => r.levels.map((c, d) => ({ index: d, height: c.height, bitrate: c.bitrate }));
147
- r.on(i.Events.MANIFEST_PARSED, () => {
148
- o = !0, this.callbacks.onLevelsChanged(l(), r.currentLevel);
149
- }), r.on(i.Events.LEVEL_SWITCHED, (c, d) => {
150
- this.callbacks.onLevelsChanged(l(), r.autoLevelEnabled ? -1 : d.level);
151
- });
152
- const h = () => r.audioTracks.map((c, d) => ({ index: d, label: c.name || c.lang || `${d + 1}`, lang: c.lang ?? "" }));
153
- r.on(i.Events.AUDIO_TRACKS_UPDATED, () => this.callbacks.onAudioTracksChanged(h(), r.audioTrack)), r.on(i.Events.AUDIO_TRACK_SWITCHED, (c, d) => this.callbacks.onAudioTracksChanged(h(), d.id)), r.on(i.Events.NON_NATIVE_TEXT_TRACKS_FOUND, (c, d) => {
154
- var m;
155
- for (const f of d.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) ?? ((m = f.closedCaptions) == null ? void 0 : m.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, (c, d) => {
161
- const m = d.type === "subtitles" && d.subtitleTrack ? `sub:${d.subtitleTrack.id}` : `cc:${d.track}`;
162
- this.callbacks.onCues(m, d.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 Ke {
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 Ke {
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 Q = {
320
+ const Y = {
218
321
  mp4: "video/mp4",
219
322
  m4v: "video/mp4",
220
323
  webm: "video/webm",
@@ -227,83 +330,87 @@ const Q = {
227
330
  wav: "audio/wav",
228
331
  flac: "audio/flac"
229
332
  };
230
- function Pe(n) {
231
- var r, o;
232
- const t = Le(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(Q).find((l) => Q[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 je(n, t) {
345
+ function Xe(n, t) {
243
346
  const e = [];
244
347
  for (const r of n) {
245
- const o = Pe(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) ?? Q[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
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 ae = 0.05;
270
- function _(n, t) {
376
+ const he = 0.05;
377
+ function U(n, t) {
271
378
  const e = n.duration;
272
- return !Number.isFinite(e) || e <= ae * 2 ? t : Math.min(t, e - ae);
379
+ return !Number.isFinite(e) || e <= he * 2 ? t : Math.min(t, e - he);
273
380
  }
274
- function Me(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 = _(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 Qe = 10, We = 1, Be = 15;
279
- class Xe {
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");
@@ -311,41 +418,41 @@ class Xe {
311
418
  }
312
419
  const r = e.start + i * (e.end - e.start);
313
420
  this.hoverTimeEl.textContent = e.live ? `-${P(e.end - r)}` : P(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));
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 = _(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 Xe {
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, g = (c) => h > 0 ? Math.min(1, Math.max(0, (c - l.start) / h)) : 0;
363
- l.playedEl.style.transform = `scaleX(${g(r)})`, l.bufferedEl.style.transform = `scaleX(${g(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 Xe {
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 >= Qe ? { 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 <= Be;
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 Xe {
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 Xe {
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 Xe {
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 Xe {
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 - We) : _(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 = "") {
@@ -480,34 +587,34 @@ 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 N(n, t) {
590
+ function I(n, t) {
484
591
  n.className = n.className.replace(/hp-icon-[\w-]+/, `hp-icon-${t}`);
485
592
  }
486
- const H = 0.05, Ye = 150;
487
- class Je {
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
- }, Ye);
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
620
  this.adHooks.setVolume(Math.min(1, Math.max(0, r + (t.deltaY < 0 ? H : -H)))), this.render();
@@ -516,23 +623,23 @@ class Je {
516
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,16 +652,16 @@ class Je {
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 ? N(this.iconEl, "volume-muted") : t < 0.5 ? N(this.iconEl, "volume-low") : N(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(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", (o) => o.stopPropagation()), this.unmuteBadge.addEventListener("click", (o) => {
557
- o.stopPropagation(), this.unmute();
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();
558
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();
@@ -587,58 +694,58 @@ class Je {
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 Ze = '<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>', K = 8, B = 8, ne = 100, D = 256;
591
- function et(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 tt(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(it.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 it = [144, 240, 360, 480, 540, 576];
600
- class rt {
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", []);
626
733
  /** Eklenti aç / kapa satırları. */
627
- s(this, "toggles", /* @__PURE__ */ new Map());
734
+ o(this, "toggles", /* @__PURE__ */ new Map());
628
735
  /**
629
736
  * Rozet gerçekten oynayan görüntüden okunur (`videoWidth` / `videoHeight`): menüde "Otomatik" seçiliyken de ABR'nin
630
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
631
738
  * kısa kenar sayılır (1080×1920 → HD). Ses modu / görüntüsüz kaynakta rozet yok.
632
739
  */
633
- s(this, "updateBadge", () => {
634
- const t = this.badgeEnabled ? tt(this.video.videoWidth, this.video.videoHeight) : null;
740
+ o(this, "updateBadge", () => {
741
+ const t = this.badgeEnabled ? ot(this.video.videoWidth, this.video.videoHeight) : null;
635
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));
636
743
  });
637
744
  /**
638
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
639
746
  * yükseklik player içinde kalan alanla sınırlı — küçük player'da menü dışarı taşmaz, kendi içinde kayar.
640
747
  */
641
- s(this, "fitToPlayer", () => {
748
+ o(this, "fitToPlayer", () => {
642
749
  var h;
643
750
  if (!this.open) return;
644
751
  const t = this.el.closest(".video-area");
@@ -647,31 +754,31 @@ class rt {
647
754
  this.fitToViewport();
648
755
  return;
649
756
  }
650
- const e = t.getBoundingClientRect(), i = this.button.getBoundingClientRect(), r = this.el.getBoundingClientRect(), o = !!this.el.closest(".hp-top-bar");
651
- this.panel.toggleAttribute("data-drop", o), Object.assign(this.panel.style, { top: "", bottom: "", marginTop: "", marginBottom: "" });
652
- const a = this.panel.scrollHeight, l = (o ? e.bottom - i.bottom : i.top - e.top) - K - B;
653
- if (a <= l || l >= ne) {
654
- this.panel.style.maxHeight = `${Math.min(D, 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`;
655
762
  return;
656
763
  }
657
- this.panel.style.maxHeight = `${Math.min(D, e.height - 2 * B)}px`, o ? 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" });
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" });
658
765
  });
659
- s(this, "onDocumentClick", (t) => {
766
+ o(this, "onDocumentClick", (t) => {
660
767
  this.open && !t.composedPath().includes(this.el) && this.close();
661
768
  });
662
769
  /** İç içe alt menüde geri dönülecek üst menüler (en üstteki = açık olanın bir üstü). */
663
- s(this, "submenuStack", []);
664
- s(this, "backToCaptionSettings", () => {
770
+ o(this, "submenuStack", []);
771
+ o(this, "backToCaptionSettings", () => {
665
772
  this.currentPanel = "captions-settings", this.renderCaptionSettings();
666
773
  });
667
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;
668
- for (const o of ["resize", "loadedmetadata", "emptied"]) t.addEventListener(o, this.updateBadge);
775
+ for (const s of ["resize", "loadedmetadata", "emptied"]) t.addEventListener(s, this.updateBadge);
669
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 });
670
777
  const r = document.createElement("span");
671
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(() => {
672
779
  this.quickSlot.hidden = this.quickSlot.childElementCount === 0, this.quickOwner && !this.quickOwner.isConnected && (this.quickOwner = null);
673
- }), 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) => {
674
- 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();
675
782
  }), document.addEventListener("click", this.onDocumentClick, !0), this.renderMain();
676
783
  }
677
784
  /**
@@ -681,12 +788,12 @@ class rt {
681
788
  addQuickButton(t, e, i = () => []) {
682
789
  t.addEventListener("click", (r) => {
683
790
  r.stopPropagation();
684
- const o = e();
685
- 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) {
686
793
  this.close();
687
794
  return;
688
795
  }
689
- this.openSubmenu(o, i()), this.quickOwner = t;
796
+ this.openSubmenu(s, i()), this.quickOwner = t;
690
797
  }), this.quickSlot.appendChild(t);
691
798
  }
692
799
  /** Menüyü doğrudan bir alt menüde açar (hızlı erişim butonları için). */
@@ -755,8 +862,8 @@ class rt {
755
862
  fitToViewport() {
756
863
  const t = this.button.getBoundingClientRect();
757
864
  Object.assign(this.panel.style, { top: "", bottom: "", marginTop: "", marginBottom: "" });
758
- const e = this.panel.scrollHeight, i = t.top - K - B, r = window.innerHeight - t.bottom - K - B, o = i < Math.min(e, D) && r > i;
759
- this.panel.toggleAttribute("data-drop", o), this.panel.style.maxHeight = `${Math.max(ne, Math.min(D, 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`;
760
867
  }
761
868
  /** Düzen değişince (ör. kompakt ↔ normal) açık menüyü kapat — eski konumunda asılı kalmasın. */
762
869
  closeMenu() {
@@ -833,14 +940,14 @@ class rt {
833
940
  })
834
941
  );
835
942
  for (const i of t.getItems()) {
836
- 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 ? et(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, () => {
837
944
  if (i.children) {
838
945
  this.renderSubmenu(i.children(), [...e, t]);
839
946
  return;
840
947
  }
841
948
  i.onSelect(), i.keepOpen ? this.renderSubmenu(t, e) : this.close();
842
949
  });
843
- this.panel.appendChild(o);
950
+ this.panel.appendChild(s);
844
951
  }
845
952
  }
846
953
  renderSpeed() {
@@ -855,7 +962,7 @@ class rt {
855
962
  renderQuality() {
856
963
  this.panel.innerHTML = "", this.panel.appendChild(this.backRow(this.labels.quality, () => this.renderMain()));
857
964
  for (const t of this.qualities) {
858
- const e = t.label === this.activeQualityLabel, i = this.row(t.label, t.locked ? Ze : 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>' : "", () => {
859
966
  t.onSelect(), this.close();
860
967
  });
861
968
  t.locked && i.setAttribute("data-locked", ""), this.panel.appendChild(i);
@@ -882,7 +989,7 @@ class rt {
882
989
  }
883
990
  /** Altyazı → Altyazı ayarları: boyut, arka plan / yazı rengi, konumu sıfırla — her satırda o anki değer. */
884
991
  renderCaptionSettings() {
885
- var i, r, o;
992
+ var i, r, s;
886
993
  this.panel.innerHTML = "", this.panel.appendChild(
887
994
  this.backRow(this.labels.captionSettings, () => {
888
995
  this.currentPanel = "captions", this.renderCaptions();
@@ -900,7 +1007,7 @@ class rt {
900
1007
  this.currentPanel = "captions-bg", this.renderCaptionColorPanel("bg");
901
1008
  })
902
1009
  ), this.panel.appendChild(
903
- 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), () => {
904
1011
  this.currentPanel = "captions-text", this.renderCaptionColorPanel("text");
905
1012
  })
906
1013
  ), this.panel.appendChild(
@@ -927,8 +1034,8 @@ class rt {
927
1034
  if (this.panel.appendChild(this.backRow(i, this.backToCaptionSettings)), !e) return;
928
1035
  const r = document.createElement("div");
929
1036
  r.className = "hp:flex hp:flex-wrap hp:gap-2 hp:px-3 hp:py-2";
930
- const o = t === "bg" ? e.getBgColorOptions() : e.getTextColorOptions();
931
- for (const a of o) {
1037
+ const s = t === "bg" ? e.getBgColorOptions() : e.getTextColorOptions();
1038
+ for (const a of s) {
932
1039
  const l = document.createElement("button");
933
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", () => {
934
1041
  a.onSelect(), this.render();
@@ -946,9 +1053,9 @@ class rt {
946
1053
  this.panelObserver.disconnect(), this.quickObserver.disconnect();
947
1054
  }
948
1055
  }
949
- const st = 480, ot = 150, le = ["waiting", "seeking"], he = ["playing", "canplay", "canplaythrough", "seeked", "pause", "error", "emptied"];
950
- function pe(n, t) {
951
- const { btn: e } = F("", `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}`);
952
1059
  e.classList.add("hp-skip-btn"), e.setAttribute("part", t);
953
1060
  const i = document.createElement("span");
954
1061
  return i.className = "hp-skip-num", i.setAttribute("aria-hidden", "true"), e.appendChild(i), e.style.display = "none", { btn: e, num: i };
@@ -956,130 +1063,130 @@ function pe(n, t) {
956
1063
  function R(n, t) {
957
1064
  n.setAttribute("aria-label", t);
958
1065
  }
959
- function F(n, t, e) {
1066
+ function N(n, t, e) {
960
1067
  const i = document.createElement("button");
961
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";
962
1069
  const r = M(t, "hp:text-[length:var(--hp-ctrl-icon-size)]");
963
1070
  return i.appendChild(r), { btn: i, icon: r };
964
1071
  }
965
- class at {
1072
+ class pt {
966
1073
  constructor(t, e, i, r) {
967
- s(this, "el");
968
- s(this, "seekBar");
969
- s(this, "volumePanel");
970
- s(this, "settingsMenu");
971
- s(this, "video");
972
- s(this, "labels");
973
- s(this, "playButton");
974
- s(this, "playIcon");
975
- s(this, "pipButton");
976
- s(this, "skipBack");
977
- 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");
978
1085
  /** Etkin sarma süreleri (sn); null = buton gizli. */
979
- s(this, "skipSeconds", { back: null, forward: null });
980
- s(this, "seekingEnabled", !0);
981
- s(this, "leftGroup");
982
- 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);
983
1090
  /** Halkayı açık tutan sebepler: 'media' (buffer bekleniyor) ve player'ın verdikleri (ör. 'preroll'). */
984
- s(this, "loadingReasons", /* @__PURE__ */ new Set());
1091
+ o(this, "loadingReasons", /* @__PURE__ */ new Set());
985
1092
  /** Preroll beklenirken video duraklatılmış olsa da kullanıcı oynatmak istedi — buton "duraklat" görünür. */
986
- s(this, "pendingPlay", !1);
1093
+ o(this, "pendingPlay", !1);
987
1094
  /** Sarma butonuyla sarıldığında (sn, negatif = geri) — sarma bildirimi için. */
988
- s(this, "onSkip", null);
989
- s(this, "fullscreenButton");
990
- s(this, "fullscreenIcon");
991
- s(this, "timeLabel");
1095
+ o(this, "onSkip", null);
1096
+ o(this, "fullscreenButton");
1097
+ o(this, "fullscreenIcon");
1098
+ o(this, "timeLabel");
992
1099
  /** Reklam sırasında süre etiketinin yerinde: "Reklam 2/3 · 0:12". */
993
- s(this, "adInfoEl");
994
- s(this, "showRemaining", !1);
1100
+ o(this, "adInfoEl");
1101
+ o(this, "showRemaining", !1);
995
1102
  /** Kompakt düzende (player < 480px) sağ grubun taşındığı üst bar; tam ekran altta kalır. */
996
- s(this, "topEl");
997
- s(this, "bottomRow");
998
- s(this, "rightGroup");
999
- s(this, "fullscreenSlot");
1000
- 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);
1001
1108
  /** İnce ses çubuğu (audio.layout: 'compact'): dar ekranda da tek satır — üst bar yok. */
1002
- s(this, "forceInline", !1);
1109
+ o(this, "forceInline", !1);
1003
1110
  /** İnce ses çubuğunda başlık / sanatçı (+ çalarken ekolayzır) — boşluk elemanının içinde. */
1004
- s(this, "barMetaEl", null);
1005
- s(this, "spacerEl");
1006
- s(this, "resizeObserver");
1007
- s(this, "liveBadge");
1008
- s(this, "liveText");
1009
- s(this, "adMode", !1);
1010
- 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);
1011
1118
  /** Ses modu: tam ekran / PiP yok — dar düzende tam ekran kutusu da boş kalmasın. */
1012
- s(this, "audioMode", !1);
1013
- s(this, "showPipButton", !0);
1014
- s(this, "showFullscreenButton", !0);
1015
- s(this, "callbacks");
1016
- s(this, "row");
1017
- 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");
1018
1125
  /** Süre etiketine tıklama: geçen süre ↔ kalan süre. */
1019
- s(this, "onTimeClick", (t) => {
1126
+ o(this, "onTimeClick", (t) => {
1020
1127
  t.stopPropagation(), this.toggleTimeMode();
1021
1128
  });
1022
- s(this, "renderPlayState", () => {
1129
+ o(this, "renderPlayState", () => {
1023
1130
  var e;
1024
1131
  const t = this.callbacks.isAdActive() ? this.callbacks.adIsPaused() : this.video.paused && !this.pendingPlay;
1025
- N(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());
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());
1026
1133
  });
1027
- s(this, "renderTime", () => {
1028
- var r, o;
1134
+ o(this, "renderTime", () => {
1135
+ var r, s;
1029
1136
  const t = this.video.duration === 1 / 0;
1030
1137
  if (this.applySeekBarVisibility(), this.timeLabel.style.display = this.adMode || t ? "none" : "", this.liveBadge.style.display = !this.adMode && t ? "" : "none", !t) {
1031
1138
  const a = this.video.duration, l = this.video.currentTime;
1032
1139
  if (this.showRemaining) {
1033
- const h = Number.isFinite(a) ? Math.floor(a) : 0, g = Math.max(0, h - Math.floor(l));
1034
- this.timeLabel.textContent = `-${P(g)} / ${P(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)}`;
1035
1142
  } else
1036
1143
  this.timeLabel.textContent = `${P(l)} / ${P(a)}`;
1037
1144
  return;
1038
1145
  }
1039
- const e = ((o = (r = this.callbacks).liveSyncPosition) == null ? void 0 : o.call(r)) ?? this.liveEdge(), i = e !== null && e - this.video.currentTime > Be;
1146
+ const e = ((s = (r = this.callbacks).liveSyncPosition) == null ? void 0 : s.call(r)) ?? this.liveEdge(), i = e !== null && e - this.video.currentTime > Oe;
1040
1147
  this.liveBadge.toggleAttribute("data-behind", i);
1041
1148
  });
1042
1149
  /** Buffer bekleniyor (oynarken takılma ya da buffer'lanmamış bir yere atlama). */
1043
- s(this, "onLoadingStart", (t) => {
1150
+ o(this, "onLoadingStart", (t) => {
1044
1151
  t.type === "seeking" && this.video.readyState >= HTMLMediaElement.HAVE_FUTURE_DATA || this.loadingTimer || this.loadingReasons.has("media") || (this.loadingTimer = setTimeout(() => {
1045
1152
  this.loadingTimer = null, this.setLoading("media", !0);
1046
- }, ot));
1153
+ }, ht));
1047
1154
  });
1048
- s(this, "onLoadingEnd", (t) => {
1155
+ o(this, "onLoadingEnd", (t) => {
1049
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));
1050
1157
  });
1051
- s(this, "goToLive", () => {
1158
+ o(this, "goToLive", () => {
1052
1159
  var i, r;
1053
1160
  const t = (r = (i = this.callbacks).liveSyncPosition) == null ? void 0 : r.call(i), e = this.liveEdge();
1054
1161
  e === null && t == null || (this.video.currentTime = t ?? Math.max(0, e - 1), this.video.paused && this.video.play().catch(() => {
1055
1162
  }), this.renderTime());
1056
1163
  });
1057
- 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 Xe(t, r), this.seekBar.el.classList.add("hp:pointer-events-auto"), this.seekBar.liveTarget = () => {
1058
- var v, y;
1059
- 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;
1060
1167
  }, this.el.appendChild(this.seekBar.el);
1061
- const o = document.createElement("div");
1062
- 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;
1063
1170
  const a = document.createElement("div");
1064
- 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;
1065
1172
  const l = document.createElement("span");
1066
1173
  l.className = "hp-loading-ring", l.setAttribute("aria-hidden", "true");
1067
1174
  const h = document.createElement("span");
1068
1175
  h.className = "hp-loading-ring-mask", h.appendChild(document.createElement("span")), l.appendChild(h), a.appendChild(l);
1069
- const g = F(r.play, "play", "K");
1070
- this.playButton = g.btn, this.playIcon = g.icon, this.playButton.setAttribute("part", "play-pause-button"), this.playButton.addEventListener("click", () => this.togglePlay()), a.appendChild(this.playButton), this.skipBack = pe("back", "skip-back-button"), this.skipBack.btn.addEventListener("click", () => this.skip(-(this.skipSeconds.back ?? 0))), this.skipForward = pe("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 Je(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);
1071
- const c = document.createElement("span");
1072
- c.className = "hp-live-dot", this.liveText = document.createElement("span"), this.liveText.textContent = r.live, this.liveBadge.append(c, this.liveText), this.liveBadge.style.display = "none", this.liveBadge.addEventListener("click", this.goToLive), a.appendChild(this.liveBadge), a.appendChild(this.adInfoEl);
1073
- const d = document.createElement("div");
1074
- d.className = "hp:flex-1 hp:min-w-0", o.appendChild(d), this.spacerEl = d;
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;
1075
1182
  const m = document.createElement("div");
1076
- 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", o.appendChild(m), this.rightGroup = m, this.settingsMenu = new rt(t, e, r), m.appendChild(this.settingsMenu.el), this.extraButtonAnchor = this.settingsMenu.el, this.row = m;
1077
- const f = F(r.pip, "pip");
1078
- this.pipButton = f.btn, this.pipButton.addEventListener("click", () => this.togglePip()), m.appendChild(this.pipButton);
1079
- const x = F(r.fullscreenEnter, "fullscreen-enter", "F");
1080
- this.fullscreenButton = x.btn, this.fullscreenIcon = x.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", 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);
1081
- for (const v of le) t.addEventListener(v, this.onLoadingStart);
1082
- for (const v of he) t.addEventListener(v, this.onLoadingEnd);
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);
1083
1190
  this.renderPlayState(), this.renderTime();
1084
1191
  }
1085
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. */
@@ -1087,7 +1194,7 @@ class at {
1087
1194
  var i;
1088
1195
  const t = this.el.getBoundingClientRect().width;
1089
1196
  if (t === 0) return;
1090
- const e = !this.forceInline && t < st;
1197
+ const e = !this.forceInline && t < lt;
1091
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"));
1092
1199
  }
1093
1200
  /**
@@ -1123,7 +1230,7 @@ class at {
1123
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";
1124
1231
  }
1125
1232
  setFullscreenState(t) {
1126
- N(this.fullscreenIcon, t ? "fullscreen-exit" : "fullscreen-enter"), R(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);
1127
1234
  }
1128
1235
  /** Dil sonradan değişince (`options.locale`/`labels`) statik (reaktif olarak yeniden render edilmeyen) etiketleri tazeler. */
1129
1236
  /** Geri/ileri sarma butonları — `null` süre o butonu gizler. */
@@ -1142,7 +1249,7 @@ class at {
1142
1249
  }
1143
1250
  skip(t) {
1144
1251
  var e;
1145
- !t || !this.seekingEnabled || (Me(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));
1146
1253
  }
1147
1254
  refreshLabels() {
1148
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();
@@ -1176,8 +1283,8 @@ class at {
1176
1283
  }
1177
1284
  /** Plugin'lerin (loop-section vb.) kontrol çubuğuna kendi butonlarını eklemesi için — ayarlar menüsünden önce yerleştirilir. */
1178
1285
  addButton(t, e, i) {
1179
- const { btn: r, icon: o } = F(t, e);
1180
- 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 };
1181
1288
  }
1182
1289
  toggleTimeMode() {
1183
1290
  this.showRemaining = !this.showRemaining, this.renderTime();
@@ -1249,45 +1356,45 @@ class at {
1249
1356
  }
1250
1357
  destroy() {
1251
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);
1252
- for (const t of le) this.video.removeEventListener(t, this.onLoadingStart);
1253
- for (const t of he) 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);
1254
1361
  this.loadingTimer && clearTimeout(this.loadingTimer), this.resizeObserver.disconnect(), this.topEl.remove(), this.seekBar.destroy(), this.settingsMenu.destroy();
1255
1362
  }
1256
1363
  }
1257
- const nt = 450, lt = 60, de = 8, j = 6, ht = /* @__PURE__ */ new Set(["seek-bar", "time-display"]);
1258
- function pt() {
1364
+ const ct = 450, dt = 60, me = 8, W = 6, ut = /* @__PURE__ */ new Set(["seek-bar", "time-display"]);
1365
+ function mt() {
1259
1366
  return typeof window.matchMedia != "function" || window.matchMedia("(hover: hover)").matches;
1260
1367
  }
1261
- class dt {
1368
+ class gt {
1262
1369
  constructor(t) {
1263
- s(this, "el");
1264
- s(this, "labelEl");
1265
- s(this, "keyEl");
1266
- s(this, "showTimer", null);
1267
- s(this, "hideTimer", null);
1268
- s(this, "currentTarget", null);
1269
- 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);
1270
1377
  /** Gösterim gecikmesi (SHOW_DELAY_MS) içinde bekleyen hedef — `currentTarget` yalnızca gerçekten gösterilince set ediliyor. */
1271
- s(this, "pendingTarget", null);
1272
- s(this, "onMouseOver", (t) => {
1378
+ o(this, "pendingTarget", null);
1379
+ o(this, "onMouseOver", (t) => {
1273
1380
  const e = this.matchTarget(t.target);
1274
1381
  !e || e === this.currentTarget || this.scheduleShow(e);
1275
1382
  });
1276
- s(this, "onMouseOut", (t) => {
1383
+ o(this, "onMouseOut", (t) => {
1277
1384
  const e = this.matchTarget(t.target);
1278
1385
  if (!e || e !== this.currentTarget && e !== this.pendingTarget) return;
1279
1386
  const i = t.relatedTarget;
1280
1387
  i && e.contains(i) || this.scheduleHide();
1281
1388
  });
1282
- s(this, "onFocusIn", (t) => {
1389
+ o(this, "onFocusIn", (t) => {
1283
1390
  const e = this.matchTarget(t.target);
1284
1391
  e && this.show(e);
1285
1392
  });
1286
- s(this, "onFocusOut", (t) => {
1393
+ o(this, "onFocusOut", (t) => {
1287
1394
  const e = this.matchTarget(t.target);
1288
1395
  !e || e !== this.currentTarget || this.hideNow();
1289
1396
  });
1290
- s(this, "hideNow", () => {
1397
+ o(this, "hideNow", () => {
1291
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");
1292
1399
  });
1293
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);
@@ -1308,22 +1415,22 @@ class dt {
1308
1415
  this.currentTarget && this.el.style.visibility === "visible" && ((t = this.isOccluded) != null && t.call(this, this.el.getBoundingClientRect())) && this.hideNow();
1309
1416
  }
1310
1417
  matchTarget(t) {
1311
- var o;
1312
- 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]');
1313
1420
  if (!i) return null;
1314
1421
  const r = i.getAttribute("part");
1315
- return r && ht.has(r) || i.offsetParent === null && i !== document.activeElement ? null : i;
1422
+ return r && ut.has(r) || i.offsetParent === null && i !== document.activeElement ? null : i;
1316
1423
  }
1317
1424
  scheduleShow(t) {
1318
1425
  this.hideTimer && (clearTimeout(this.hideTimer), this.hideTimer = null), this.showTimer && clearTimeout(this.showTimer), this.pendingTarget = t, this.showTimer = setTimeout(() => {
1319
1426
  this.showTimer = null, this.pendingTarget = null, this.show(t);
1320
- }, nt);
1427
+ }, ct);
1321
1428
  }
1322
1429
  scheduleHide() {
1323
- this.showTimer && (clearTimeout(this.showTimer), this.showTimer = null), this.pendingTarget = null, this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = setTimeout(() => this.hideNow(), lt);
1430
+ this.showTimer && (clearTimeout(this.showTimer), this.showTimer = null), this.pendingTarget = null, this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = setTimeout(() => this.hideNow(), dt);
1324
1431
  }
1325
1432
  show(t) {
1326
- if (!pt()) return;
1433
+ if (!mt()) return;
1327
1434
  const e = t.getAttribute("aria-label");
1328
1435
  if (!e) return;
1329
1436
  this.currentTarget = t, this.labelEl.textContent = e;
@@ -1335,26 +1442,53 @@ class dt {
1335
1442
  }
1336
1443
  position(t) {
1337
1444
  const e = this.mountEl.getBoundingClientRect(), i = t.getBoundingClientRect(), r = this.el.getBoundingClientRect();
1338
- let o = i.top - e.top - r.height - de;
1339
- o < j && (o = i.bottom - e.top + de);
1445
+ let s = i.top - e.top - r.height - me;
1446
+ s < W && (s = i.bottom - e.top + me);
1340
1447
  let a = i.left - e.left + i.width / 2 - r.width / 2;
1341
- const l = e.width - r.width - j;
1342
- a = Math.max(j, 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`;
1343
1450
  }
1344
1451
  }
1345
- class ct {
1452
+ const ft = 30, bt = 12;
1453
+ class vt {
1346
1454
  constructor(t, e, i) {
1347
- s(this, "host");
1348
- s(this, "video");
1349
- s(this, "toggleFullscreen");
1455
+ o(this, "host");
1456
+ o(this, "video");
1457
+ o(this, "toggleFullscreen");
1350
1458
  /** ←/→ ve J/L ile sarma süresi (sn) — options.keyboardSeekStep. */
1351
- s(this, "seekStep", 5);
1459
+ o(this, "seekStep", 5);
1352
1460
  /** Klavyeyle sarıldığında (sn, negatif = geri) — sarma bildirimi için. */
1353
- s(this, "onSeek", null);
1461
+ o(this, "onSeek", null);
1354
1462
  /** Space/K'den önce sorulur — true dönerse işlenmiştir (ör. preroll beklemesini iptal). */
1355
- s(this, "interceptTogglePlay", null);
1356
- s(this, "onKeyDown", (t) => {
1357
- 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;
1358
1492
  if (t.defaultPrevented) return;
1359
1493
  const e = t.composedPath()[0];
1360
1494
  if ((t.key === " " || t.key === "Enter") && e instanceof HTMLButtonElement) return;
@@ -1370,7 +1504,7 @@ class ct {
1370
1504
  break;
1371
1505
  case "ArrowRight":
1372
1506
  case "l":
1373
- Number.isFinite(i) && (this.video.currentTime = _(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();
1374
1508
  break;
1375
1509
  case "ArrowLeft":
1376
1510
  case "j":
@@ -1388,52 +1522,69 @@ class ct {
1388
1522
  case "f":
1389
1523
  this.toggleFullscreen(), t.preventDefault();
1390
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;
1391
1530
  }
1392
1531
  });
1393
- 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));
1394
1544
  }
1395
1545
  destroy() {
1396
- 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));
1397
1548
  }
1398
1549
  }
1399
- class ut {
1550
+ class yt {
1400
1551
  constructor(t) {
1401
- s(this, "el");
1402
- s(this, "video");
1403
- s(this, "show", () => this.el.classList.remove("hp:hidden"));
1404
- 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"));
1405
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);
1406
1557
  }
1407
1558
  destroy() {
1408
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);
1409
1560
  }
1410
1561
  }
1411
- const gt = '<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>';
1412
- class mt {
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 {
1413
1564
  constructor(t, e) {
1414
- s(this, "el");
1415
- s(this, "video");
1416
- s(this, "labels");
1417
- s(this, "messageEl");
1418
- s(this, "codeEl");
1419
- s(this, "retryBtn");
1420
- s(this, "retryText");
1421
- 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);
1422
1573
  /** Ekran gerçekten açıldı (hp:error için) — kurtarılan hatalarda (yedek kaynak, native → hls.js) çağrılmaz. */
1423
- s(this, "onShown", null);
1424
- s(this, "shouldShow", () => !0);
1574
+ o(this, "onShown", null);
1575
+ o(this, "shouldShow", () => !0);
1425
1576
  /** showStreamError ile açılan hatanın kodu (video.error yokken). */
1426
- s(this, "streamErrorCode", 0);
1427
- s(this, "show", () => {
1428
- !this.video.getAttribute("src") && !this.video.querySelector("source") || Z(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();
1429
1580
  });
1430
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";
1431
1582
  const i = document.createElement("div");
1432
1583
  i.className = "hp-error-card";
1433
1584
  const r = document.createElement("div");
1434
- 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 = gt, this.retryText = document.createElement("span"), this.retryText.textContent = e.retry, this.retryBtn.appendChild(this.retryText), this.retryBtn.addEventListener("click", () => {
1435
- var o;
1436
- 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);
1437
1588
  }), i.appendChild(this.retryBtn), this.el.appendChild(i), t.addEventListener("error", this.show);
1438
1589
  }
1439
1590
  setOnRetry(t) {
@@ -1470,11 +1621,12 @@ class mt {
1470
1621
  }
1471
1622
  render() {
1472
1623
  var i;
1473
- 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 = {
1474
1625
  1: this.labels.errorAborted,
1475
1626
  2: this.labels.errorNetwork,
1476
1627
  3: this.labels.errorDecode,
1477
- 4: this.labels.errorSrcNotSupported
1628
+ 4: this.labels.errorSrcNotSupported,
1629
+ 5: this.labels.errorDrm
1478
1630
  };
1479
1631
  this.messageEl.textContent = e[t] ?? this.labels.errorGeneric, this.codeEl.textContent = t ? `${this.labels.errorCode} ${t}` : "", this.codeEl.style.display = t ? "" : "none";
1480
1632
  }
@@ -1485,120 +1637,120 @@ class mt {
1485
1637
  this.video.removeEventListener("error", this.show);
1486
1638
  }
1487
1639
  }
1488
- const W = /* @__PURE__ */ new WeakMap(), Re = /* @__PURE__ */ new WeakSet(), U = /* @__PURE__ */ new WeakMap();
1489
- function ft(n) {
1490
- return Re.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);
1491
1643
  }
1492
- function ze(n, t, e, i, r) {
1493
- let o = W.get(n);
1494
- o || W.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());
1495
1647
  const a = `${t}\0${e}\0${i}\0${r}`;
1496
- let l = o.get(a);
1497
- return l || (l = n.addTextTrack(e, i, r), Re.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;
1498
1650
  }
1499
- function Oe(n, t) {
1500
- for (const [e, i] of W.get(n) ?? [])
1651
+ function De(n, t) {
1652
+ for (const [e, i] of J.get(n) ?? [])
1501
1653
  if (e.startsWith(`${t}\0`)) {
1502
1654
  i.mode = "hidden";
1503
1655
  for (const r of Array.from(i.cues ?? [])) i.removeCue(r);
1504
1656
  i.mode = "disabled";
1505
1657
  }
1506
1658
  }
1507
- function bt(n, t) {
1508
- Fe(n);
1509
- const e = U.get(n), i = [];
1659
+ function Et(n, t) {
1660
+ He(n);
1661
+ const e = K.get(n), i = [];
1510
1662
  for (const r of t) {
1511
- const o = ze(n, "options", "subtitles", r.label, r.srclang);
1512
- o.mode = r.default ? "hidden" : "disabled", i.push({ label: r.label, track: o }), yt(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);
1513
1665
  }
1514
1666
  return i;
1515
1667
  }
1516
- function Fe(n) {
1517
- U.set(n, (U.get(n) ?? 0) + 1), Oe(n, "options");
1668
+ function He(n) {
1669
+ K.set(n, (K.get(n) ?? 0) + 1), De(n, "options");
1518
1670
  }
1519
- function vt(n, t) {
1671
+ function Ct(n, t) {
1520
1672
  let e = null;
1521
1673
  for (const { label: i, track: r } of n) {
1522
- const o = i === t;
1523
- r.mode = o ? "hidden" : "disabled", o && (e = r);
1674
+ const s = i === t;
1675
+ r.mode = s ? "hidden" : "disabled", s && (e = r);
1524
1676
  }
1525
1677
  return e;
1526
1678
  }
1527
- async function yt(n, t, e, i) {
1679
+ async function St(n, t, e, i) {
1528
1680
  let r;
1529
1681
  try {
1530
- const o = await fetch(e);
1531
- if (!o.ok) throw new Error(`HTTP ${o.status}`);
1532
- r = await o.text();
1533
- } catch (o) {
1534
- 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) } }));
1535
1687
  return;
1536
1688
  }
1537
- if (!(U.get(n) !== i || typeof VTTCue != "function"))
1538
- for (const o of kt(r)) {
1539
- const a = new VTTCue(o.start, o.end, o.text);
1540
- wt(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);
1541
1693
  }
1542
1694
  }
1543
- const ce = "(?:\\d+:)?\\d{1,2}:\\d{2}(?:[.,]\\d{1,3})?", xt = new RegExp(`^(${ce})\\s+-->\\s+(${ce})(.*)$`);
1544
- function ue(n) {
1695
+ const ge = "(?:\\d+:)?\\d{1,2}:\\d{2}(?:[.,]\\d{1,3})?", Tt = new RegExp(`^(${ge})\\s+-->\\s+(${ge})(.*)$`);
1696
+ function fe(n) {
1545
1697
  return n.replace(",", ".").split(":").reduce((t, e) => t * 60 + Number(e), 0);
1546
1698
  }
1547
- function kt(n) {
1699
+ function At(n) {
1548
1700
  const t = [], e = n.replace(/^/, "").replace(/\r\n?/g, `
1549
1701
  `).split(/\n{2,}/);
1550
1702
  for (const i of e) {
1551
1703
  const r = i.split(`
1552
- `), o = r.findIndex((h) => h.includes("-->"));
1553
- if (o < 0) continue;
1554
- const a = xt.exec(r[o].trim());
1704
+ `), s = r.findIndex((h) => h.includes("-->"));
1705
+ if (s < 0) continue;
1706
+ const a = Tt.exec(r[s].trim());
1555
1707
  if (!a) continue;
1556
- const l = r.slice(o + 1).join(`
1708
+ const l = r.slice(s + 1).join(`
1557
1709
  `);
1558
- l.trim() && t.push({ start: ue(a[1]), end: ue(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 });
1559
1711
  }
1560
1712
  return t;
1561
1713
  }
1562
- function wt(n, t) {
1714
+ function Lt(n, t) {
1563
1715
  for (const e of t.split(/\s+/)) {
1564
1716
  const [i, r] = e.split(":");
1565
1717
  if (!i || !r) continue;
1566
- const [o] = r.split(",");
1718
+ const [s] = r.split(",");
1567
1719
  try {
1568
- 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));
1569
1721
  } catch {
1570
1722
  }
1571
1723
  }
1572
1724
  }
1573
- const q = 6, Et = 20, Ct = 14, St = 6, Tt = 10, At = 3, Ne = "hope-caption-row", Ie = "hope-caption-font-size", ge = "hope-caption-bg-color", me = "hope-caption-text-color", Lt = {
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 = {
1574
1726
  small: 0.78,
1575
1727
  normal: 1,
1576
1728
  large: 1.35
1577
- }, fe = [
1729
+ }, ye = [
1578
1730
  "rgba(0, 0, 0, 0.75)",
1579
1731
  "rgba(0, 0, 0, 0)",
1580
1732
  "rgba(255, 255, 255, 0.85)",
1581
1733
  "rgba(183, 28, 28, 0.8)",
1582
1734
  "rgba(13, 71, 161, 0.8)",
1583
1735
  "rgba(27, 94, 32, 0.8)"
1584
- ], be = ["#ffffff", "#000000", "#ffeb3b", "#ff5252", "#18ffff", "#69f0ae"];
1585
- function Pt() {
1736
+ ], xe = ["#ffffff", "#000000", "#ffeb3b", "#ff5252", "#18ffff", "#69f0ae"];
1737
+ function Ot() {
1586
1738
  try {
1587
- const n = window.localStorage.getItem(Ne), t = n === null ? 0 : Number(n);
1588
- return Number.isFinite(t) && t >= 0 && t < q ? 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;
1589
1741
  } catch {
1590
1742
  return 0;
1591
1743
  }
1592
1744
  }
1593
- function Mt() {
1745
+ function Nt() {
1594
1746
  try {
1595
- const n = window.localStorage.getItem(Ie);
1747
+ const n = window.localStorage.getItem(Ge);
1596
1748
  return n === "small" || n === "normal" || n === "large" ? n : "normal";
1597
1749
  } catch {
1598
1750
  return "normal";
1599
1751
  }
1600
1752
  }
1601
- function ve(n, t) {
1753
+ function ke(n, t) {
1602
1754
  const e = t[0] ?? "";
1603
1755
  try {
1604
1756
  const i = window.localStorage.getItem(n);
@@ -1607,28 +1759,28 @@ function ve(n, t) {
1607
1759
  return e;
1608
1760
  }
1609
1761
  }
1610
- class I {
1762
+ class D {
1611
1763
  constructor(t, e, i, r) {
1612
- s(this, "layerEl");
1613
- s(this, "bubbleEl");
1614
- s(this, "videoArea");
1615
- s(this, "seekBarEl");
1616
- s(this, "labels");
1617
- s(this, "activeTrack", null);
1618
- s(this, "fontSize", Mt());
1619
- s(this, "bgColor", ve(ge, fe));
1620
- s(this, "textColor", ve(me, be));
1621
- s(this, "rowIndex", Pt());
1622
- 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);
1623
1775
  /** Kontrol çubuğu görünür mü — görünürken altyazı seek bar'ın üstünde, değilken en altta. */
1624
- s(this, "chromeVisible", !0);
1625
- s(this, "dragStartClientY", 0);
1626
- s(this, "dragStartBottomPx", 0);
1627
- s(this, "dragMoved", !1);
1628
- s(this, "rafId", null);
1629
- s(this, "pendingDeltaPx", 0);
1630
- s(this, "resizeObserver");
1631
- 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", () => {
1632
1784
  var e;
1633
1785
  const t = (e = this.activeTrack) == null ? void 0 : e.activeCues;
1634
1786
  if (!this.activeTrack || !t || t.length === 0) {
@@ -1643,20 +1795,20 @@ class I {
1643
1795
  }
1644
1796
  this.bubbleEl.classList.add("hp-caption-visible");
1645
1797
  });
1646
- s(this, "onPointerDown", (t) => {
1798
+ o(this, "onPointerDown", (t) => {
1647
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));
1648
1800
  });
1649
- s(this, "onPointerMove", (t) => {
1650
- this.dragging && (this.pendingDeltaPx = t.clientY - this.dragStartClientY, Math.abs(this.pendingDeltaPx) > At && (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)));
1651
1803
  });
1652
- s(this, "applyPendingDrag", () => {
1804
+ o(this, "applyPendingDrag", () => {
1653
1805
  if (this.rafId = null, !this.dragging) return;
1654
1806
  const { min: t, max: e } = this.bounds(), i = Math.min(e, Math.max(t, this.dragStartBottomPx - this.pendingDeltaPx)), r = this.dragStartBottomPx - i;
1655
1807
  this.bubbleEl.style.transform = `translateX(-50%) translateY(${r}px)`;
1656
1808
  });
1657
- s(this, "onPointerUp", (t) => {
1809
+ o(this, "onPointerUp", (t) => {
1658
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;
1659
- 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 * (q - 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));
1660
1812
  this.setRowIndex(a, !0);
1661
1813
  });
1662
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();
@@ -1671,7 +1823,7 @@ class I {
1671
1823
  setFontSize(t) {
1672
1824
  this.fontSize = t, this.applyFontSizeVar(), this.recomputePosition();
1673
1825
  try {
1674
- window.localStorage.setItem(Ie, t);
1826
+ window.localStorage.setItem(Ge, t);
1675
1827
  } catch {
1676
1828
  }
1677
1829
  }
@@ -1681,7 +1833,7 @@ class I {
1681
1833
  setBgColor(t) {
1682
1834
  this.bgColor = t, this.bubbleEl.style.setProperty("--hp-caption-bg", t);
1683
1835
  try {
1684
- window.localStorage.setItem(ge, t);
1836
+ window.localStorage.setItem(be, t);
1685
1837
  } catch {
1686
1838
  }
1687
1839
  }
@@ -1691,7 +1843,7 @@ class I {
1691
1843
  setTextColor(t) {
1692
1844
  this.textColor = t, this.bubbleEl.style.setProperty("--hp-caption-text", t);
1693
1845
  try {
1694
- window.localStorage.setItem(me, t);
1846
+ window.localStorage.setItem(ve, t);
1695
1847
  } catch {
1696
1848
  }
1697
1849
  }
@@ -1704,14 +1856,14 @@ class I {
1704
1856
  this.labels = t, this.bubbleEl.setAttribute("aria-label", t.captionDragHandle);
1705
1857
  }
1706
1858
  applyFontSizeVar() {
1707
- this.bubbleEl.style.setProperty("--hp-caption-size-multiplier", String(Lt[this.fontSize]));
1859
+ this.bubbleEl.style.setProperty("--hp-caption-size-multiplier", String(Ft[this.fontSize]));
1708
1860
  }
1709
1861
  bounds() {
1710
- const t = this.videoArea.getBoundingClientRect(), e = this.seekBarEl.getBoundingClientRect(), r = (this.bubbleEl.getBoundingClientRect().height || 32) + Et, o = Math.max(Tt, 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") ? St : Ct))) : 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));
1711
1863
  return { min: a, max: l };
1712
1864
  }
1713
1865
  pxForRow(t) {
1714
- const { min: e, max: i } = this.bounds(), r = t / (q - 1);
1866
+ const { min: e, max: i } = this.bounds(), r = t / (V - 1);
1715
1867
  return Math.round(e + r * (i - e));
1716
1868
  }
1717
1869
  /**
@@ -1730,11 +1882,11 @@ class I {
1730
1882
  }
1731
1883
  /** FLIP: bottom anında yazılır, yalnızca transform animasyonlanır — bottom'u animasyonlamak bırakınca zıplatıyordu. */
1732
1884
  setRowIndex(t, e) {
1733
- this.rowIndex = Math.min(q - 1, Math.max(0, t));
1885
+ this.rowIndex = Math.min(V - 1, Math.max(0, t));
1734
1886
  const i = this.pxForRow(this.rowIndex), r = this.visualBottomPx();
1735
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"));
1736
1888
  try {
1737
- window.localStorage.setItem(Ne, String(this.rowIndex));
1889
+ window.localStorage.setItem(qe, String(this.rowIndex));
1738
1890
  } catch {
1739
1891
  }
1740
1892
  }
@@ -1750,25 +1902,25 @@ class I {
1750
1902
  this.activeTrack && this.activeTrack.removeEventListener("cuechange", this.onCueChange), this.resizeObserver.disconnect(), this.rafId !== null && cancelAnimationFrame(this.rafId), this.bubbleEl.removeEventListener("pointerdown", this.onPointerDown);
1751
1903
  }
1752
1904
  }
1753
- s(I, "BG_COLOR_PRESETS", fe), s(I, "TEXT_COLOR_PRESETS", be);
1754
- class Bt {
1905
+ o(D, "BG_COLOR_PRESETS", ye), o(D, "TEXT_COLOR_PRESETS", xe);
1906
+ class It {
1755
1907
  constructor(t) {
1756
- s(this, "el");
1757
- s(this, "bufferedEl");
1758
- s(this, "playedEl");
1759
- s(this, "visible", !1);
1760
- s(this, "rafId", null);
1761
- 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", () => {
1762
1914
  this.render(), this.visible && !this.video.paused ? this.start() : this.stop();
1763
1915
  });
1764
- s(this, "render", () => {
1916
+ o(this, "render", () => {
1765
1917
  const t = this.video.duration, e = Number.isFinite(t) && t > 0;
1766
1918
  if (this.el.toggleAttribute("data-disabled", !e), !this.visible || !e) return;
1767
1919
  this.playedEl.style.transform = `scaleX(${Math.min(1, this.video.currentTime / t)})`;
1768
1920
  const { buffered: i } = this.video;
1769
1921
  let r = 0;
1770
- for (let o = 0; o < i.length; o++)
1771
- 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)));
1772
1924
  this.bufferedEl.style.transform = `scaleX(${Math.min(1, r / t)})`;
1773
1925
  });
1774
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);
@@ -1790,19 +1942,19 @@ class Bt {
1790
1942
  this.rafId !== null && cancelAnimationFrame(this.rafId), this.rafId = null;
1791
1943
  }
1792
1944
  }
1793
- const Rt = 1e3, zt = 800, Ot = '<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>';
1794
- class Ft {
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 {
1795
1947
  constructor(t) {
1796
- s(this, "el");
1797
- s(this, "valueEl");
1798
- s(this, "unitEl");
1799
- s(this, "liveEl");
1800
- s(this, "total", 0);
1801
- s(this, "lastAt", 0);
1802
- 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);
1803
1955
  this.labels = t, this.el = document.createElement("div"), this.el.className = "hp-seek-fb", this.el.setAttribute("part", "seek-feedback");
1804
1956
  const e = document.createElement("span");
1805
- e.className = "hp-seek-fb-chevrons", e.innerHTML = Ot.repeat(3);
1957
+ e.className = "hp-seek-fb-chevrons", e.innerHTML = qt.repeat(3);
1806
1958
  const i = document.createElement("span");
1807
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);
1808
1960
  }
@@ -1810,27 +1962,27 @@ class Ft {
1810
1962
  show(t) {
1811
1963
  if (!t) return;
1812
1964
  const e = Date.now(), i = Math.sign(t) === Math.sign(this.total);
1813
- this.total = i && e - this.lastAt < Rt ? this.total + t : t, this.lastAt = e;
1814
- const r = Math.round(Math.abs(this.total) * 10) / 10, o = this.total > 0;
1815
- 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(() => {
1816
1968
  this.el.removeAttribute("data-visible"), this.total = 0;
1817
- }, zt);
1969
+ }, Ht);
1818
1970
  }
1819
1971
  destroy() {
1820
1972
  this.hideTimer && clearTimeout(this.hideTimer), this.el.remove();
1821
1973
  }
1822
1974
  }
1823
- class Nt {
1975
+ class Vt {
1824
1976
  constructor(t) {
1825
- s(this, "el");
1826
- s(this, "open", !1);
1827
- s(this, "close", () => {
1977
+ o(this, "el");
1978
+ o(this, "open", !1);
1979
+ o(this, "close", () => {
1828
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));
1829
1981
  });
1830
- s(this, "onOutside", (t) => {
1982
+ o(this, "onOutside", (t) => {
1831
1983
  t.composedPath().includes(this.el) || this.close();
1832
1984
  });
1833
- s(this, "onKeyDown", (t) => {
1985
+ o(this, "onKeyDown", (t) => {
1834
1986
  t.key === "Escape" && (t.stopPropagation(), this.close());
1835
1987
  });
1836
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);
@@ -1840,46 +1992,46 @@ class Nt {
1840
1992
  }
1841
1993
  /** `clientX/Y` ekran koordinatı — menü player'ın içinde kalacak şekilde kaydırılır. */
1842
1994
  show(t, e, i) {
1843
- var g;
1995
+ var c;
1844
1996
  this.el.replaceChildren(
1845
- ...i.map((c) => {
1846
- const d = document.createElement(c.onSelect ? "button" : "div");
1847
- d.className = "hp-context-menu-item", c.onSelect ? (d.type = "button", d.setAttribute("role", "menuitem"), d.addEventListener("click", () => {
1848
- this.close(), c.onSelect();
1849
- })) : d.setAttribute("data-info", "");
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", "");
1850
2002
  const m = document.createElement("span");
1851
- if (m.textContent = c.label, d.appendChild(m), c.meta) {
1852
- const f = document.createElement("span");
1853
- f.className = "hp-context-menu-meta", f.textContent = c.meta, d.appendChild(f);
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);
1854
2006
  }
1855
- return d;
2007
+ return b;
1856
2008
  })
1857
2009
  ), this.el.setAttribute("data-open", ""), this.open = !0;
1858
- 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));
1859
- this.el.style.left = `${l}px`, this.el.style.top = `${h}px`, (g = this.el.querySelector("button")) == null || g.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);
1860
2012
  }
1861
2013
  destroy() {
1862
2014
  this.close(), this.el.remove();
1863
2015
  }
1864
2016
  }
1865
- const It = 3e3, ye = 200;
1866
- class Ht {
2017
+ const _t = 3e3, we = 200;
2018
+ class Ut {
1867
2019
  constructor() {
1868
- s(this, "list", []);
2020
+ o(this, "list", []);
1869
2021
  /** Kayıt eklenince / temizlenince (açık panel canlı güncellenir). */
1870
- s(this, "onChange", null);
2022
+ o(this, "onChange", null);
1871
2023
  }
1872
2024
  get entries() {
1873
2025
  return this.list;
1874
2026
  }
1875
2027
  add(t) {
1876
- var r, o;
2028
+ var r, s;
1877
2029
  const e = Date.now(), i = this.list[this.list.length - 1];
1878
- if (i && e - i.time < It && 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 ?? {})) {
1879
2031
  i.count = (i.count ?? 1) + 1, i.time = e, (r = this.onChange) == null || r.call(this);
1880
2032
  return;
1881
2033
  }
1882
- this.list.push({ time: e, ...t }), this.list.length > ye && this.list.splice(0, this.list.length - ye), (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);
1883
2035
  }
1884
2036
  clear() {
1885
2037
  var t;
@@ -1888,107 +2040,107 @@ class Ht {
1888
2040
  /** Destek ekibine yapıştırılabilir düz metin. */
1889
2041
  toText() {
1890
2042
  return this.list.map((t) => {
1891
- 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})` : "";
1892
2044
  return `${new Date(t.time).toISOString()} [${t.source}]${t.fatal ? " [fatal]" : ""} ${t.message}${i}${e ? ` | ${e}` : ""}`;
1893
2045
  }).join(`
1894
2046
  `);
1895
2047
  }
1896
2048
  }
1897
- const Dt = '@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}', xe = "hope-player-icon-font";
1898
- function Gt() {
1899
- if (typeof document > "u" || document.getElementById(xe)) 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;
1900
2052
  const n = document.createElement("style");
1901
- n.id = xe, n.textContent = Dt, document.head.appendChild(n);
2053
+ n.id = Ee, n.textContent = Kt, document.head.appendChild(n);
1902
2054
  }
1903
- function ai(n) {
2055
+ function ci(n) {
1904
2056
  if (!n || typeof n.name != "string" || !/^[\w.:-]+$/.test(n.name))
1905
2057
  throw new TypeError('definePlugin: "name" is required (letters, digits, "-", "_", ".", ":")');
1906
2058
  if (typeof n.setup != "function") throw new TypeError(`definePlugin(${n.name}): "setup" must be a function`);
1907
2059
  return n;
1908
2060
  }
1909
- const V = [], X = /* @__PURE__ */ new Set();
1910
- function qt(n, t) {
2061
+ const _ = [], Z = /* @__PURE__ */ new Set();
2062
+ function $t(n, t) {
1911
2063
  const e = [n, t];
1912
- return V.push(e), ke(), () => {
1913
- const i = V.indexOf(e);
1914
- i >= 0 && (V.splice(i, 1), ke());
2064
+ return _.push(e), Se(), () => {
2065
+ const i = _.indexOf(e);
2066
+ i >= 0 && (_.splice(i, 1), Se());
1915
2067
  };
1916
2068
  }
1917
- function Vt() {
1918
- return V.slice();
2069
+ function Ce() {
2070
+ return _.slice();
1919
2071
  }
1920
- function _t(n) {
1921
- return X.add(n), () => X.delete(n);
2072
+ function Qt(n) {
2073
+ return Z.add(n), () => Z.delete(n);
1922
2074
  }
1923
- function ke() {
1924
- for (const n of X)
2075
+ function Se() {
2076
+ for (const n of Z)
1925
2077
  try {
1926
2078
  n();
1927
2079
  } catch {
1928
2080
  }
1929
2081
  }
1930
- function Ut() {
2082
+ function Wt() {
1931
2083
  var i;
1932
2084
  const t = (i = window.adTaxonomy) == null ? void 0 : i.keyValues;
1933
2085
  if (!t || typeof t != "object") return "";
1934
2086
  const e = [];
1935
- for (const [r, o] of Object.entries(t))
1936
- o == null || o === "" || e.push(`${r}=${o}`);
2087
+ for (const [r, s] of Object.entries(t))
2088
+ s == null || s === "" || e.push(`${r}=${s}`);
1937
2089
  return e.join("&");
1938
2090
  }
1939
- function $(n, t = {}) {
2091
+ function X(n, t = {}) {
1940
2092
  const e = encodeURIComponent(document.referrer || window.location.href), i = encodeURIComponent(window.location.href), r = Date.now();
1941
- let o = n;
2093
+ let s = n;
1942
2094
  const a = {
1943
2095
  referrer_url: e,
1944
2096
  description_url: i,
1945
2097
  timestamp: r
1946
2098
  };
1947
2099
  for (const [l, h] of Object.entries(a)) {
1948
- const g = `[${l}]`;
1949
- if (o.includes(g))
1950
- o = o.replace(g, String(h));
1951
- else if (!new URLSearchParams(o.split("?")[1]).has(l)) {
1952
- const c = o.includes("?") ? "&" : "?";
1953
- o += `${c}${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}`;
1954
2106
  }
1955
2107
  }
1956
2108
  try {
1957
- const l = new URL(o);
2109
+ const l = new URL(s);
1958
2110
  if (l.pathname.includes("/vmap/")) return n;
1959
- const g = [];
1960
- t.includeRefreshCount && g.push(`adrefreshCount=${t.adRefreshCount ?? 0}`);
1961
- const c = Ut();
1962
- if (c && g.push(c), g.length) {
1963
- const d = l.searchParams.get("cust_params");
1964
- l.searchParams.set("cust_params", d ? `${d}&${g.join("&")}` : g.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("&"));
1965
2117
  }
1966
2118
  return l.toString();
1967
2119
  } catch {
1968
- return o;
2120
+ return s;
1969
2121
  }
1970
2122
  }
1971
- function Y(n) {
2123
+ function ee(n) {
1972
2124
  const t = {};
1973
2125
  if (!n) return t;
1974
2126
  const e = typeof n == "string" ? [...new URLSearchParams(n.trim().replace(/^\?/, "")).entries()].map(([i, r]) => [i, r.split(",")]) : Object.entries(n);
1975
2127
  for (const [i, r] of e) {
1976
- const o = (Array.isArray(r) ? r : [r]).filter((a) => a != null && a !== "").map(String);
1977
- 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);
1978
2130
  }
1979
2131
  return t;
1980
2132
  }
1981
- function Kt(n, t) {
1982
- const e = Object.entries(Y(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(",")}`);
1983
2135
  if (!e.length) return n;
1984
2136
  try {
1985
- 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]));
1986
- 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();
1987
2139
  } catch {
1988
2140
  return n;
1989
2141
  }
1990
2142
  }
1991
- const He = {
2143
+ const Ve = {
1992
2144
  play: "Oynat",
1993
2145
  pause: "Duraklat",
1994
2146
  mute: "Sessize al",
@@ -2068,6 +2220,7 @@ const He = {
2068
2220
  errorNetwork: "Ağ hatası — video yüklenemedi.",
2069
2221
  errorDecode: "Video kodu çözülemedi.",
2070
2222
  errorSrcNotSupported: "Bu video kaynağı desteklenmiyor.",
2223
+ errorDrm: "Bu korumalı video bu cihazda ya da tarayıcıda oynatılamıyor.",
2071
2224
  errorGeneric: "Video oynatılırken bir hata oluştu.",
2072
2225
  errorCode: "Hata kodu",
2073
2226
  countdownRemaining: "Kalan süre",
@@ -2108,6 +2261,7 @@ const He = {
2108
2261
  a11yKeyVolume: "Sesi aç / kıs",
2109
2262
  a11yKeyMute: "Sesi kapat / aç",
2110
2263
  a11yKeyFullscreen: "Tam ekran",
2264
+ a11yKeyFrame: "Bir kare geri / ileri",
2111
2265
  a11yKeyZoom: "Yakınlaştır / uzaklaştır, sıfırla",
2112
2266
  a11yKeyPan: "Yakınlaştırılmış görüntüde gezin",
2113
2267
  a11yKeyShortcuts: "Bu listeyi aç / kapat",
@@ -2142,7 +2296,7 @@ const He = {
2142
2296
  liveClock: "Canlı saat",
2143
2297
  live: "CANLI",
2144
2298
  goToLive: "Canlıya git"
2145
- }, jt = {
2299
+ }, Yt = {
2146
2300
  play: "Play",
2147
2301
  pause: "Pause",
2148
2302
  mute: "Mute",
@@ -2222,6 +2376,7 @@ const He = {
2222
2376
  errorNetwork: "Network error — the video could not load.",
2223
2377
  errorDecode: "The video could not be decoded.",
2224
2378
  errorSrcNotSupported: "This video source is not supported.",
2379
+ errorDrm: "This protected video cannot be played on this device or browser.",
2225
2380
  errorGeneric: "An error occurred while playing the video.",
2226
2381
  errorCode: "Error code",
2227
2382
  countdownRemaining: "Time remaining",
@@ -2261,6 +2416,7 @@ const He = {
2261
2416
  a11yKeyVolume: "Volume up / down",
2262
2417
  a11yKeyMute: "Mute / unmute",
2263
2418
  a11yKeyFullscreen: "Fullscreen",
2419
+ a11yKeyFrame: "Previous / next frame",
2264
2420
  a11yKeyZoom: "Zoom in / out, reset",
2265
2421
  a11yKeyPan: "Move around the zoomed picture",
2266
2422
  a11yKeyShortcuts: "Open / close this list",
@@ -2296,38 +2452,38 @@ const He = {
2296
2452
  liveClock: "Live clock",
2297
2453
  live: "LIVE",
2298
2454
  goToLive: "Go to live"
2299
- }, $t = { tr: He, en: jt };
2300
- function De(n, t) {
2301
- return { ...$t[n ?? "tr"] ?? He, ...t };
2455
+ }, Jt = { tr: Ve, en: Yt };
2456
+ function _e(n, t) {
2457
+ return { ...Jt[n ?? "tr"] ?? Ve, ...t };
2302
2458
  }
2303
- function Qt(n, t, e) {
2304
- Object.assign(n, De(t, e));
2459
+ function Zt(n, t, e) {
2460
+ Object.assign(n, _e(t, e));
2305
2461
  }
2306
- const J = 8e3;
2307
- function Wt(n) {
2462
+ const te = 8e3;
2463
+ function ei(n) {
2308
2464
  var t;
2309
2465
  return (t = n.live) != null && t.scte35 && !n.adTagPreroll && !n.adTagVmap ? !1 : !!(n.adTagPreroll || n.adTagVmap);
2310
2466
  }
2311
- class Xt {
2467
+ class ti {
2312
2468
  constructor(t) {
2313
2469
  /** Kapı kurulu (preroll bekleniyor) mu. */
2314
- s(this, "armed", !1);
2470
+ o(this, "armed", !1);
2315
2471
  /** Kapı kuruluyken kullanıcı / autoplay oynatmak istedi mi. */
2316
- s(this, "playIntent", !1);
2472
+ o(this, "playIntent", !1);
2317
2473
  /** Kapının kendi pause() çağrısının ürettiği 'pause' olayı yutulsun. */
2318
- s(this, "swallowNextPause", !1);
2319
- s(this, "timeoutMs", J);
2320
- s(this, "timer", null);
2474
+ o(this, "swallowNextPause", !1);
2475
+ o(this, "timeoutMs", te);
2476
+ o(this, "timer", null);
2321
2477
  /** İlk oynatma isteği (reklam plugin'i bekleyen preroll'u başlatır). */
2322
- s(this, "onPlayIntent", null);
2478
+ o(this, "onPlayIntent", null);
2323
2479
  /** Zaman aşımı — reklam plugin'i geç gelecek cevabı iptal eder. Kapı bundan sonra içeriği başlatarak açılır. */
2324
- s(this, "onTimeout", null);
2480
+ o(this, "onTimeout", null);
2325
2481
  /** "Preroll bekleniyor" durumu değişti (UI: yükleme halkası, merkez buton). */
2326
- s(this, "onWaitChange", null);
2327
- s(this, "onPlay", (t) => {
2482
+ o(this, "onWaitChange", null);
2483
+ o(this, "onPlay", (t) => {
2328
2484
  this.armed && (t.stopImmediatePropagation(), this.swallowNextPause = !0, this.video.pause(), this.registerIntent());
2329
2485
  });
2330
- s(this, "onPause", (t) => {
2486
+ o(this, "onPause", (t) => {
2331
2487
  this.swallowNextPause && (this.swallowNextPause = !1, t.stopImmediatePropagation());
2332
2488
  });
2333
2489
  this.video = t, t.addEventListener("play", this.onPlay), t.addEventListener("pause", this.onPause);
@@ -2342,7 +2498,7 @@ class Xt {
2342
2498
  get hasPlayIntent() {
2343
2499
  return this.playIntent;
2344
2500
  }
2345
- arm(t = J) {
2501
+ arm(t = te) {
2346
2502
  this.clearTimer(), this.armed = !0, this.playIntent = !1, this.timeoutMs = t;
2347
2503
  }
2348
2504
  /**
@@ -2379,24 +2535,24 @@ class Xt {
2379
2535
  this.timer && clearTimeout(this.timer), this.timer = null;
2380
2536
  }
2381
2537
  }
2382
- const Yt = [
2538
+ const ii = [
2383
2539
  "https://imasdk.googleapis.com",
2384
2540
  "https://pubads.g.doubleclick.net",
2385
2541
  "https://securepubads.g.doubleclick.net",
2386
2542
  "https://pagead2.googlesyndication.com"
2387
2543
  ];
2388
- let we = !1;
2389
- function Jt() {
2390
- if (!(we || typeof document > "u")) {
2391
- we = !0;
2392
- for (const n of Yt) {
2544
+ let Te = !1;
2545
+ function ri() {
2546
+ if (!(Te || typeof document > "u")) {
2547
+ Te = !0;
2548
+ for (const n of ii) {
2393
2549
  if (document.head.querySelector(`link[rel="preconnect"][href="${n}"]`)) continue;
2394
2550
  const t = document.createElement("link");
2395
2551
  t.rel = "preconnect", t.href = n, document.head.appendChild(t);
2396
2552
  }
2397
2553
  }
2398
2554
  }
2399
- const Ee = [0.5, 0.75, 1, 1.25, 1.5, 2], Ce = 1200, Zt = 3e3, Se = 5e3, ei = 10, Te = 10, ti = 5, Ae = "stream-audio", G = "1.4.0", ii = {
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 = {
2400
2556
  hls: "application/x-mpegurl",
2401
2557
  mp4: "video/mp4",
2402
2558
  webm: "video/webm",
@@ -2406,7 +2562,7 @@ const Ee = [0.5, 0.75, 1, 1.25, 1.5, 2], Ce = 1200, Zt = 3e3, Se = 5e3, ei = 10,
2406
2562
  ogg: "audio/ogg",
2407
2563
  wav: "audio/wav",
2408
2564
  flac: "audio/flac"
2409
- }, ri = (
2565
+ }, li = (
2410
2566
  /* html */
2411
2567
  `
2412
2568
  <div class="video-area">
@@ -2417,172 +2573,178 @@ const Ee = [0.5, 0.75, 1, 1.25, 1.5, 2], Ce = 1200, Zt = 3e3, Se = 5e3, ei = 10,
2417
2573
  </div>
2418
2574
  `
2419
2575
  );
2420
- function si(n) {
2576
+ function hi(n) {
2421
2577
  if (typeof n == "number") return Number.isFinite(n) && n > 0 ? String(n) : null;
2422
2578
  if (typeof n != "string") return null;
2423
2579
  const t = n.trim().match(/^(\d+(?:\.\d+)?)\s*(?:[:/]\s*(\d+(?:\.\d+)?))?$/);
2424
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];
2425
2581
  }
2426
- class Ge extends HTMLElement {
2582
+ class Ue extends HTMLElement {
2427
2583
  constructor() {
2428
2584
  super();
2429
- s(this, "root");
2430
- s(this, "videoArea");
2431
- s(this, "videoEl");
2432
- s(this, "adLayerEl");
2433
- s(this, "chromeEl");
2434
- s(this, "centerPlayButton");
2435
- 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");
2436
2592
  /** options.miniProgress açıkken kurulur. */
2437
- s(this, "miniProgress", null);
2438
- s(this, "chromeVisible", !0);
2439
- s(this, "sourceManager");
2440
- s(this, "controlBar");
2441
- s(this, "tooltip");
2442
- s(this, "keyboard");
2443
- 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");
2444
2600
  /**
2445
2601
  * Preroll kapısı — reklam plugin'i yüklenmeden önce kurulur ki autoplay / ilk play araya kaçmasın.
2446
2602
  * Video'nun 'play'/'pause' dinleyicilerinin İLKİ olmalı (yuttuğu olayları UI ve hp:play görmesin).
2447
2603
  */
2448
- s(this, "prerollGate");
2604
+ o(this, "prerollGate");
2449
2605
  /** Ads plugin kurulumu sürüyor — erken başlatılan kurulum ile sonraki bekleme aynı promise'i paylaşır. */
2450
- s(this, "adsInstall", null);
2606
+ o(this, "adsInstall", null);
2451
2607
  /** Yükleme halkası açık (medya takıldı / preroll bekleniyor) — kontroller bu sırada otomatik gizlenmez. */
2452
- s(this, "loadingActive", !1);
2453
- s(this, "errorScreen");
2608
+ o(this, "loadingActive", !1);
2609
+ o(this, "errorScreen");
2454
2610
  /** İleri/geri sarmada sağda/solda beliren anlık bildirim. */
2455
- s(this, "seekFeedback");
2456
- s(this, "contextMenu");
2611
+ o(this, "seekFeedback");
2612
+ o(this, "contextMenu");
2457
2613
  /** options.contextMenu çözülmüş hali — null = kapalı (tarayıcının kendi menüsü). */
2458
- s(this, "contextMenuConfig", { stats: !1 });
2614
+ o(this, "contextMenuConfig", { stats: !1 });
2459
2615
  /** İlk açılışta yüklenir (plugins/stats). */
2460
- s(this, "statsPanel", null);
2461
- s(this, "debugPanel", null);
2616
+ o(this, "statsPanel", null);
2617
+ o(this, "debugPanel", null);
2462
2618
  /** options.debug — sağ tık menüsündeki "Hata ayıklama" girişini açar. */
2463
- s(this, "debugEnabled", !1);
2619
+ o(this, "debugEnabled", !1);
2464
2620
  /** Player'ın tüm hataları (medya, yayın, reklam, altyazı) — her zaman tutulur; bkz. `errorLog`. */
2465
- s(this, "log", new Ht());
2621
+ o(this, "log", new Ut());
2466
2622
  /** Son basılan işaretçi türü — sağ tık menüsü yalnızca fareyle (dokunmatikte uzun basma gesture'a ait). */
2467
- s(this, "lastPointerType", "mouse");
2623
+ o(this, "lastPointerType", "mouse");
2468
2624
  /** options.tapGestures kuruluysa (plugins/tap-gestures). */
2469
- s(this, "tapGestures", null);
2625
+ o(this, "tapGestures", null);
2470
2626
  /** Dokunmadan sonra tarayıcının ürettiği uyumluluk mouse olayları ikinci bir dokunuş sayılmasın. */
2471
- s(this, "lastTouchEndAt", 0);
2627
+ o(this, "lastTouchEndAt", 0);
2472
2628
  /** Video alanı boyutu değişince merkez play butonunun yerini yeniden hesaplar. */
2473
- s(this, "centerPlayObserver", null);
2474
- s(this, "tapToPlay", "auto");
2475
- s(this, "adsController", null);
2476
- s(this, "gestureControls", null);
2477
- s(this, "loopSection", null);
2478
- 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);
2479
2635
  /** Kalite kilidi (rewardedUnlock eklentisi) — kilitliyse yüksek kaliteler menüde kilitli, HLS'te üst sınır var. */
2480
- s(this, "qualityGate", null);
2481
- s(this, "rewardedUnlock", null);
2482
- s(this, "sponsorship", null);
2636
+ o(this, "qualityGate", null);
2637
+ o(this, "rewardedUnlock", null);
2638
+ o(this, "sponsorship", null);
2483
2639
  /** Son uygulanan MP4 kaynak listesi ve seçili etiket — kilit açılınca menü yeniden kurulur. */
2484
2640
  /** Çalan biçim grubunun kaynakları (kalite menüsü bunlar) — bkz. `sourceGroups`. */
2485
- s(this, "currentSources", []);
2641
+ o(this, "currentSources", []);
2486
2642
  /** `sources` biçime göre gruplu, `sourcePriority` sırasıyla; ölümcül hatada sıradakine geçilir. */
2487
- s(this, "sourceGroups", []);
2488
- s(this, "activeGroup", 0);
2643
+ o(this, "sourceGroups", []);
2644
+ o(this, "activeGroup", 0);
2489
2645
  /** Sıradaki gruba geçiş başladı — aynı arızanın ikinci hata olayı hata ekranı açmasın. */
2490
- s(this, "fallbackPending", !1);
2646
+ o(this, "fallbackPending", !1);
2491
2647
  /** hls.js ölümcül hatasının MediaError karşılığı (video.error oluşmaz) — hp:sourcefallback detayı için. */
2492
- s(this, "streamErrorCode");
2493
- s(this, "activeSourceLabel", "");
2494
- s(this, "lastHlsLevels", []);
2495
- s(this, "lastHlsActive", -1);
2648
+ o(this, "streamErrorCode");
2649
+ o(this, "activeSourceLabel", "");
2650
+ o(this, "lastHlsLevels", []);
2651
+ o(this, "lastHlsActive", -1);
2496
2652
  /** options.audio — kapak + plak sahnesi, kontroller hep görünür, tam ekran yok. */
2497
- s(this, "audioMode", !1);
2498
- s(this, "inViewAutoplay", null);
2499
- s(this, "unregisterSticky", null);
2500
- s(this, "playlistRunner", null);
2501
- s(this, "hopeStory", null);
2502
- s(this, "markProgress", null);
2503
- s(this, "segments", null);
2504
- s(this, "spriteThumbnails", null);
2505
- s(this, "countdownScreen", null);
2506
- s(this, "geoChecker", null);
2507
- s(this, "redirectScreen", null);
2508
- s(this, "redirectKey", "");
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", "");
2509
2665
  /** Eklentileri çalıştıran taraf — yalnızca bir eklenti kullanılınca indirilir (plugin-api/PluginHost). */
2510
- s(this, "pluginHost", null);
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));
2511
2671
  /** `player.use()` ile çalışırken eklenenler. */
2512
- s(this, "runtimePlugins", []);
2513
- s(this, "offGlobalPlugins", null);
2514
- s(this, "accessibility", null);
2515
- s(this, "accessibilityKey", "");
2516
- s(this, "playbackHistory", null);
2517
- s(this, "historyKey", "");
2518
- s(this, "qrResume", null);
2519
- s(this, "pauseAd", null);
2520
- s(this, "adTriggers", null);
2521
- s(this, "castController", null);
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);
2522
2684
  /** İçerik Chromecast'te oynuyor (player kumanda) — yerel reklam / otomatik oynatma devre dışı. */
2523
- s(this, "casting", !1);
2524
- s(this, "dubbing", null);
2525
- s(this, "liveWallClock", null);
2526
- s(this, "daiController", null);
2527
- s(this, "instanceKey");
2528
- 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", []);
2529
2691
  /** Altyazı seçiminin tek giriş noktası — iOS native tam ekrandan dönüşte de kullanılır. */
2530
- s(this, "selectCaption", null);
2692
+ o(this, "selectCaption", null);
2531
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. */
2532
- s(this, "captionTrackActive", !1);
2694
+ o(this, "captionTrackActive", !1);
2533
2695
  /** `options.subtitles` izleri. */
2534
- s(this, "optionTracks", []);
2696
+ o(this, "optionTracks", []);
2535
2697
  /** Yayının izleri: hls.js'ten (havuzda, `sub:`/`cc:`) ya da tarayıcının native HLS in-band izleri (`native:`). */
2536
- s(this, "streamTracks", []);
2698
+ o(this, "streamTracks", []);
2537
2699
  /** hls.js aynı cue'yu (seek sonrası) yeniden gönderebilir — iz başına eklenenler. */
2538
- s(this, "streamCueKeys", /* @__PURE__ */ new Map());
2700
+ o(this, "streamCueKeys", /* @__PURE__ */ new Map());
2539
2701
  /** Seçili altyazı — yayın izleri sonradan gelince seçim korunur. */
2540
- s(this, "activeCaptionLabel", null);
2541
- s(this, "streamAudio", { tracks: [], active: -1 });
2702
+ o(this, "activeCaptionLabel", null);
2703
+ o(this, "streamAudio", { tracks: [], active: -1 });
2542
2704
  /**
2543
2705
  * countdownScreen varken gerçek init (kaynak + içerik plugin'leri) ertelenir; en güncel options snapshot'ı.
2544
2706
  * onComplete kaydı tek sefer yapılır (bkz. playbackInitRegistered) — init birden fazla kez tetiklenmesin.
2545
2707
  */
2546
- s(this, "pendingPlaybackOptions", null);
2547
- s(this, "playbackInitRegistered", !1);
2708
+ o(this, "pendingPlaybackOptions", null);
2709
+ o(this, "playbackInitRegistered", !1);
2548
2710
  /**
2549
2711
  * countdownScreen gibi alanlar yalnızca .options ile gelir. connectedCallback'teki ilk (options'suz) geçiş chrome'u
2550
2712
  * bir an açıp player'ı gösteriyordu; 'boot' bloklayıcısı gerçek options gelene kadar bekletir.
2551
2713
  */
2552
- s(this, "bootResolved", !1);
2553
- s(this, "bootGraceTimer", null);
2714
+ o(this, "bootResolved", !1);
2715
+ o(this, "bootGraceTimer", null);
2554
2716
  /**
2555
2717
  * Son uygulanan `.options` nesnesi + attribute'lar. `.options` element sayfaya eklenmeden önce verilince
2556
2718
  * connectedCallback AYNI seçenekleri yeniden uyguluyordu; değişen bir şey yoksa bu ikinci geçiş atlanır.
2557
2719
  */
2558
- s(this, "lastSynced", null);
2720
+ o(this, "lastSynced", null);
2559
2721
  /**
2560
2722
  * applyOptions'ın asenkron kısmı (plugin kurulumu + kaynak yükleme) aynı anda tek kez çalışır. İki geçiş
2561
2723
  * üst üste binince `!this.adsController` gibi kontroller ikisinde de geçiyor, plugin (ör. IMA) iki kez kuruluyordu.
2562
2724
  * Çalışırken gelen seçenekler bekletilir; bitince yalnızca en sonuncusu uygulanır.
2563
2725
  */
2564
- s(this, "pluginApplyRun", null);
2565
- s(this, "pendingPluginOptions", null);
2566
- s(this, "_options", {});
2567
- s(this, "hideTimer", null);
2568
- 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);
2569
2731
  /** null = imleç hiç gizlenmez (options.cursorHideDelayMs: false). */
2570
- s(this, "cursorHideDelayMs", Se);
2732
+ o(this, "cursorHideDelayMs", Pe);
2571
2733
  /** Fare kontrollerin (buton/seek bar) üzerinde mi — üzerindeyken otomatik gizlenmez; videonun üstünde hareketsizse gizlenir. */
2572
- s(this, "pointerOverControls", !1);
2734
+ o(this, "pointerOverControls", !1);
2573
2735
  /** Kalite menüsünde şu an HLS seviyeleri mi var (kaynak değişince temizlemek için). */
2574
- s(this, "hlsQualitiesShown", !1);
2736
+ o(this, "hlsQualitiesShown", !1);
2575
2737
  /** Son uygulanan options.showRemainingTime — bkz. applyOptions. */
2576
- s(this, "appliedShowRemaining");
2577
- s(this, "autoHideDelayMs", Ce);
2578
- s(this, "tapCandidate", !1);
2579
- s(this, "tapStartX", 0);
2580
- 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);
2581
2743
  /** Tüm UI'ın paylaştığı tek, mutable sözlük — dil değişince referans değil alanlar güncellenir. */
2582
- s(this, "i18n", De("tr"));
2744
+ o(this, "i18n", _e("tr"));
2583
2745
  /** IMA SDK'nın kendi ad-UI dili (skip butonu/sayaç metni) de aynı dili takip etsin diye — bkz. plugins/ads/AdsController. */
2584
- s(this, "localeCode", "tr");
2585
- s(this, "onMediaError", () => {
2746
+ o(this, "localeCode", "tr");
2747
+ o(this, "onMediaError", () => {
2586
2748
  const e = this.videoEl.error;
2587
2749
  if (!e) return;
2588
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;
@@ -2590,19 +2752,19 @@ class Ge extends HTMLElement {
2590
2752
  source: "media",
2591
2753
  message: e.message || i[e.code] || `MediaError ${e.code}`,
2592
2754
  // Ses aygıtı yok (Firefox): video sessiz oynamaya devam ediyor — kayda düşer ama ölümcül değil.
2593
- fatal: !Z(e),
2594
- 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 }
2595
2757
  });
2596
2758
  });
2597
- s(this, "onSubtitleError", (e) => {
2759
+ o(this, "onSubtitleError", (e) => {
2598
2760
  const i = e.detail;
2599
2761
  this.log.add({ source: "subtitles", message: `Subtitle file could not be loaded: ${i.message}`, details: { src: i.src } });
2600
2762
  });
2601
- s(this, "onPointerTypeTrack", (e) => {
2763
+ o(this, "onPointerTypeTrack", (e) => {
2602
2764
  this.lastPointerType = e.pointerType;
2603
2765
  });
2604
2766
  /** Sağ tık: tarayıcı menüsü yerine player adı + sürüm (options.contextMenu). */
2605
- s(this, "onContextMenu", (e) => {
2767
+ o(this, "onContextMenu", (e) => {
2606
2768
  const i = this.contextMenuConfig;
2607
2769
  !i || this.lastPointerType !== "mouse" || (e.preventDefault(), this.contextMenu.show(e.clientX, e.clientY, [
2608
2770
  { label: "HopeCorePlayer", meta: `v${G}` },
@@ -2611,231 +2773,235 @@ class Ge extends HTMLElement {
2611
2773
  ...this.debugEnabled && this.log.entries.length ? [{ label: this.i18n.debugTitle, meta: String(this.log.entries.length), onSelect: () => void this.showDebugLog() }] : []
2612
2774
  ]));
2613
2775
  });
2614
- s(this, "onStreamTextTracks", (e) => {
2776
+ o(this, "onStreamTextTracks", (e) => {
2615
2777
  const i = this.streamTracks.filter((r) => r.id.startsWith("native:"));
2616
2778
  if (!e.length)
2617
- Oe(this.videoEl, "stream"), this.streamCueKeys.clear(), this.streamTracks = i;
2779
+ De(this.videoEl, "stream"), this.streamCueKeys.clear(), this.streamTracks = i;
2618
2780
  else {
2619
- const r = new Set([...this.optionTracks, ...i].map((o) => o.label));
2781
+ const r = new Set([...this.optionTracks, ...i].map((s) => s.label));
2620
2782
  this.streamTracks = [
2621
2783
  ...i,
2622
- ...e.map((o) => {
2623
- const a = this.uniqueLabel(this.streamTrackLabel(o.label, o.lang) || o.id, o.kind === "captions" ? "CC" : o.lang || o.kind, r);
2624
- return { id: o.id, label: a, track: ze(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) };
2625
2787
  })
2626
2788
  ];
2627
2789
  }
2628
2790
  this.rebuildCaptions(this.activeCaptionLabel);
2629
2791
  });
2630
- s(this, "onStreamCues", (e, i) => {
2792
+ o(this, "onStreamCues", (e, i) => {
2631
2793
  var a;
2632
2794
  const r = (a = this.streamTracks.find((l) => l.id === e)) == null ? void 0 : a.track;
2633
2795
  if (!r) return;
2634
- let o = this.streamCueKeys.get(r);
2635
- 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());
2636
2798
  for (const l of i) {
2637
2799
  const h = `${l.startTime}|${l.endTime}|${l.text}`;
2638
- o.has(h) || (o.add(h), r.addCue(l));
2800
+ s.has(h) || (s.add(h), r.addCue(l));
2639
2801
  }
2640
2802
  });
2641
2803
  /** Tarayıcının kendi (native HLS) altyazı izleri — bizim havuz izlerimiz ve metadata izleri hariç. */
2642
- s(this, "onNativeTextTracksChanged", () => {
2643
- const e = Array.from(this.videoEl.textTracks).filter((a) => (a.kind === "subtitles" || a.kind === "captions") && !ft(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:"));
2644
2807
  if (!e.length && !i) return;
2645
- 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));
2646
2809
  this.streamTracks = [
2647
2810
  ...r,
2648
2811
  ...e.map((a, l) => ({
2649
2812
  id: `native:${l}`,
2650
- 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),
2651
2814
  track: a
2652
2815
  }))
2653
2816
  ], this.rebuildCaptions(this.activeCaptionLabel);
2654
2817
  });
2655
2818
  /** Yayında birden fazla ses izi varsa ayarlarda "Ses" alt menüsü (HLS alternatif ses / Safari audioTracks). */
2656
- s(this, "onStreamAudioTracks", (e, i) => {
2819
+ o(this, "onStreamAudioTracks", (e, i) => {
2657
2820
  this.streamAudio = { tracks: e, active: i };
2658
- 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)]));
2659
2822
  if (e.length <= 1) {
2660
- r.unregisterSubmenu(Ae);
2823
+ r.unregisterSubmenu(Be);
2661
2824
  return;
2662
2825
  }
2663
2826
  r.registerSubmenu({
2664
- key: Ae,
2827
+ key: Be,
2665
2828
  title: this.i18n.audioTrack,
2666
2829
  getValueLabel: () => a.get(i) ?? "",
2667
2830
  getItems: () => e.map((l) => ({ label: a.get(l.index), active: l.index === i, onSelect: () => this.sourceManager.setAudioTrack(l.index) }))
2668
2831
  });
2669
2832
  });
2670
2833
  /** Playlist panelinin monte edileceği, .video-area'nın ALTINDAKİ (shadow root içi) kapsayıcı — ilk ihtiyaçta oluşturulur. */
2671
- s(this, "panelContainer", null);
2672
- s(this, "onHlsLevelsChanged", (e, i) => {
2673
- var l;
2834
+ o(this, "panelContainer", null);
2835
+ o(this, "onHlsLevelsChanged", (e, i) => {
2836
+ var k, x;
2674
2837
  if (this.lastHlsLevels = e, this.lastHlsActive = i, e.length === 0 && this.hlsQualitiesShown) {
2675
2838
  this.hlsQualitiesShown = !1, this.controlBar.setQualities([], "");
2676
2839
  return;
2677
2840
  }
2678
2841
  if (e.length <= 1) return;
2679
2842
  this.hlsQualitiesShown = !0;
2680
- const r = (h) => `${h.height}p`, o = this.qualityGate, a = (h) => !!(o != null && o.isLocked(h.height));
2681
- if (o) {
2682
- const h = e.filter((c) => !a(c)), g = h.length ? h : [e.reduce((c, d) => d.height < c.height ? d : c)];
2683
- this.sourceManager.setMaxLevel(g.reduce((c, d) => d.height > c.height ? d : c).index);
2684
- } else
2685
- this.sourceManager.setMaxLevel(-1);
2686
- 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(
2687
2853
  [
2688
2854
  { label: this.i18n.autoQuality, onSelect: () => this.sourceManager.setLevel(-1) },
2689
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.
2690
- ...[...e].sort((h, g) => g.height - h.height).map((h) => ({
2691
- label: r(h),
2692
- locked: a(h),
2693
- 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)
2694
2860
  }))
2695
2861
  ],
2696
2862
  i === -1 || !e[i] ? this.i18n.autoQuality : r(e[i])
2697
- ), (l = this.rewardedUnlock) == null || l.onQualitiesChanged();
2863
+ ), (x = this.rewardedUnlock) == null || x.onQualitiesChanged();
2698
2864
  });
2699
- s(this, "onFullscreenChange", (e) => {
2865
+ o(this, "onFullscreenChange", (e) => {
2700
2866
  this.controlBar.setFullscreenState(this.isFullscreenActive()), (e == null ? void 0 : e.type) === "webkitbeginfullscreen" ? this.showCaptionsNatively() : (e == null ? void 0 : e.type) === "webkitendfullscreen" && this.syncCaptionsFromNative();
2701
2867
  });
2702
2868
  // ── Oynatma durumuna göre merkez buton + otomatik gizlenme ──
2703
2869
  // Değer: 'hidden' (tamamen gizle — countdown/geo) ya da 'reduced' (yalnızca oynat/duraklat + ses — ads).
2704
- s(this, "chromeBlockers", /* @__PURE__ */ new Map());
2705
- s(this, "onPlay", () => {
2870
+ o(this, "chromeBlockers", /* @__PURE__ */ new Map());
2871
+ o(this, "onPlay", () => {
2706
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"));
2707
2873
  });
2708
- s(this, "onPause", () => {
2874
+ o(this, "onPause", () => {
2709
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"));
2710
2876
  });
2711
- s(this, "onEnded", () => {
2877
+ o(this, "onEnded", () => {
2712
2878
  this.dispatchEvent(new CustomEvent("hp:ended"));
2713
2879
  });
2714
- s(this, "onRateChange", () => {
2880
+ o(this, "onRateChange", () => {
2715
2881
  this.dispatchEvent(new CustomEvent("hp:ratechange", { detail: { rate: this.videoEl.playbackRate } }));
2716
2882
  });
2717
- s(this, "onPointerDownFocus", () => {
2883
+ o(this, "onPointerDownFocus", () => {
2718
2884
  var e;
2719
2885
  this.focus({ preventScroll: !0 }), (e = this.adsController) == null || e.initializeDisplayContainerOnce();
2720
2886
  });
2721
- s(this, "onVideoPressStart", (e) => {
2887
+ o(this, "onVideoPressStart", (e) => {
2722
2888
  this.tapCandidate = !0;
2723
2889
  const i = "touches" in e ? e.touches[0] : e;
2724
2890
  i && (this.tapStartX = i.clientX, this.tapStartY = i.clientY);
2725
2891
  });
2726
- s(this, "onVideoPressEnd", (e) => {
2892
+ o(this, "onVideoPressEnd", (e) => {
2727
2893
  var l, h;
2728
2894
  if (!this.tapCandidate || (this.tapCandidate = !1, this.isChromeBlocked) || (l = this.gestureControls) != null && l.isCurrentlyHolding()) return;
2729
2895
  const i = "changedTouches" in e;
2730
2896
  if (!i && Date.now() - this.lastTouchEndAt < 800) return;
2731
2897
  i && (this.lastTouchEndAt = Date.now());
2732
2898
  const r = i ? e.changedTouches[0] : e;
2733
- if (r && Math.hypot(r.clientX - this.tapStartX, r.clientY - this.tapStartY) > ei) {
2899
+ if (r && Math.hypot(r.clientX - this.tapStartX, r.clientY - this.tapStartY) > oi) {
2734
2900
  i && !this.isChromeBlocked && this.scheduleAutoHide();
2735
2901
  return;
2736
2902
  }
2737
- const o = i ? "touch" : this.lastPointerType, a = () => this.onBackgroundTap(o, () => {
2903
+ const s = i ? "touch" : this.lastPointerType, a = () => this.onBackgroundTap(s, () => {
2738
2904
  this.videoEl.paused ? this.videoEl.play().catch(() => {
2739
2905
  }) : this.videoEl.pause();
2740
2906
  });
2741
- 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();
2742
2908
  });
2743
- s(this, "onVideoPressCancel", () => {
2909
+ o(this, "onVideoPressCancel", () => {
2744
2910
  this.tapCandidate = !1;
2745
2911
  });
2746
- s(this, "onPointerMove", (e) => {
2912
+ o(this, "onPointerMove", (e) => {
2747
2913
  if (e.pointerType !== "mouse") {
2748
2914
  this.chromeVisible && this.scheduleAutoHide();
2749
2915
  return;
2750
2916
  }
2751
2917
  this.pointerOverControls = e.composedPath().includes(this.chromeEl), this.scheduleAutoHide(), e.pointerType === "mouse" && this.scheduleCursorHide();
2752
2918
  });
2753
- s(this, "onPointerLeave", (e) => {
2919
+ o(this, "onPointerLeave", (e) => {
2754
2920
  e.pointerType === "mouse" && (this.pointerOverControls = !1, this.scheduleAutoHide(), this.showCursor());
2755
2921
  });
2756
- s(this, "scheduleAutoHide", () => {
2922
+ o(this, "scheduleAutoHide", () => {
2757
2923
  this.showChrome(), this.hideTimer && clearTimeout(this.hideTimer), !(this.videoEl.paused || this.loadingActive) && (this.audioMode || (this.hideTimer = setTimeout(() => {
2758
2924
  this.audioMode || this.videoEl.paused || this.loadingActive || this.pointerOverControls || this.controlBar.settingsMenu.isOpen || this.setChromeOpacity("0");
2759
- }, this.lastPointerType === "mouse" ? this.autoHideDelayMs : Math.max(this.autoHideDelayMs, Zt))));
2925
+ }, this.lastPointerType === "mouse" ? this.autoHideDelayMs : Math.max(this.autoHideDelayMs, si))));
2760
2926
  });
2761
- Gt(), this.root = this.attachShadow({ mode: "open" });
2927
+ jt(), this.root = this.attachShadow({ mode: "open" });
2762
2928
  const e = document.createElement("style");
2763
- e.textContent = _e, this.root.appendChild(e);
2929
+ e.textContent = $e, this.root.appendChild(e);
2764
2930
  const i = document.createElement("div");
2765
- i.className = "hp-root", i.innerHTML = ri, 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 Xt(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 ut(this.videoEl), this.root.querySelector(".media-layer").appendChild(this.loadingSpinner.el), this.errorScreen = new mt(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";
2766
2932
  const r = document.createElement("span");
2767
- 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", (o) => {
2768
- var c;
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;
2769
2935
  const a = () => {
2770
2936
  this.videoEl.paused && this.videoEl.play();
2771
- }, l = this.lastPointerType === "pen" ? "pen" : this.lastPointerType === "touch" ? "touch" : null, g = o.composedPath().includes(r) ? a : () => this.onBackgroundTap(l ?? "mouse", a);
2772
- l && ((c = this.tapGestures) != null && c.handleTap(o.clientX, l, g)) || g();
2773
- }), 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 Ke(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, {
2774
2940
  onLevelsChanged: this.onHlsLevelsChanged,
2775
2941
  onAudioTracksChanged: this.onStreamAudioTracks,
2776
2942
  onTextTracksFound: this.onStreamTextTracks,
2777
2943
  onCues: this.onStreamCues,
2778
- onFatalError: (o) => {
2779
- const a = o === "network" ? 2 : 3;
2944
+ onFatalError: (s) => {
2945
+ const a = s === "drm" ? 5 : s === "unsupported" ? 4 : s === "network" ? 2 : 3;
2780
2946
  this.streamErrorCode = a, this.errorScreen.showStreamError(a);
2781
2947
  },
2782
- onStreamError: (o) => this.log.add({
2948
+ onStreamError: (s) => this.log.add({
2783
2949
  source: "stream",
2784
- message: `${o.type}: ${o.details}`,
2785
- fatal: o.fatal,
2786
- 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" }
2787
2953
  })
2788
- }), this.errorScreen.setShouldShow(() => !this.sourceManager.isRecovering() && !this.tryNextSourceGroup()), this.controlBar = new at(
2954
+ }), this.errorScreen.setShouldShow(() => !this.sourceManager.isRecovering() && !this.tryNextSourceGroup()), this.controlBar = new pt(
2789
2955
  this.videoEl,
2790
- Ee,
2956
+ Ae,
2791
2957
  {
2792
2958
  onRequestFullscreen: () => this.requestFullscreenCompat(),
2793
2959
  liveSyncPosition: () => {
2794
- var o;
2795
- 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;
2796
2962
  },
2797
2963
  onExitFullscreen: () => this.exitFullscreenCompat(),
2798
2964
  isFullscreen: () => this.isFullscreenActive(),
2799
2965
  // adsController sonradan kurulur — closure'lar her çağrıda güncel this.adsController'ı okur.
2800
2966
  isAdActive: () => this.isAdPlaying(),
2801
2967
  interceptTogglePlay: () => this.cancelPrerollWait(),
2802
- onLoadingChange: (o) => this.onLoadingChange(o),
2968
+ onLoadingChange: (s) => this.onLoadingChange(s),
2803
2969
  adTogglePlay: () => {
2804
- var o;
2805
- return (o = this.adsController) == null ? void 0 : o.toggleAdPlayPause();
2970
+ var s;
2971
+ return (s = this.adsController) == null ? void 0 : s.toggleAdPlayPause();
2806
2972
  },
2807
2973
  adIsPaused: () => {
2808
- var o;
2809
- return ((o = this.adsController) == null ? void 0 : o.isAdPaused()) ?? !0;
2974
+ var s;
2975
+ return ((s = this.adsController) == null ? void 0 : s.isAdPaused()) ?? !0;
2810
2976
  },
2811
2977
  adVolume: {
2812
2978
  isAdActive: () => this.isAdPlaying(),
2813
2979
  getVolume: () => {
2814
- var o;
2815
- return ((o = this.adsController) == null ? void 0 : o.getAdVolume()) ?? 1;
2980
+ var s;
2981
+ return ((s = this.adsController) == null ? void 0 : s.getAdVolume()) ?? 1;
2816
2982
  },
2817
- setVolume: (o) => {
2983
+ setVolume: (s) => {
2818
2984
  var a;
2819
- return (a = this.adsController) == null ? void 0 : a.setAdVolume(o);
2985
+ return (a = this.adsController) == null ? void 0 : a.setAdVolume(s);
2820
2986
  },
2821
2987
  toggleMute: () => {
2822
- var o;
2823
- return (o = this.adsController) == null ? void 0 : o.toggleAdMute();
2988
+ var s;
2989
+ return (s = this.adsController) == null ? void 0 : s.toggleAdMute();
2824
2990
  }
2825
2991
  }
2826
2992
  },
2827
2993
  this.i18n
2828
- ), this.chromeEl.appendChild(this.controlBar.el), this.chromeEl.appendChild(this.controlBar.topEl), this.videoArea.appendChild(this.controlBar.volumePanel.unmuteBadge), this.captionRenderer = new I(this.videoEl, this.videoArea, this.controlBar.seekBar.el, this.i18n), this.videoArea.appendChild(this.captionRenderer.layerEl), this.keyboard = new ct(
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(
2829
2995
  this,
2830
2996
  this.videoEl,
2831
2997
  () => this.isFullscreenActive() ? this.exitFullscreenCompat() : this.requestFullscreenCompat()
2832
- ), this.tooltip = new dt(this.videoArea), this.contextMenu = new Nt(this.videoArea), this.seekFeedback = new Ft(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");
2833
2999
  }
2834
3000
  static get observedAttributes() {
2835
3001
  return ["src", "poster", "autoplay", "muted", "loop", "theme", "locale"];
2836
3002
  }
2837
3003
  connectedCallback() {
2838
- this.offGlobalPlugins ?? (this.offGlobalPlugins = _t(() => void this.syncPlugins())), 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(() => {
2839
3005
  this.bootGraceTimer = null, this.bootResolved || (this.bootResolved = !0, this.syncFromAttributes());
2840
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) => {
2841
3007
  e && this.hideTimer && clearTimeout(this.hideTimer), e || this.scheduleAutoHide(), this.tooltip.recheckOcclusion();
@@ -2847,8 +3013,8 @@ class Ge extends HTMLElement {
2847
3013
  });
2848
3014
  }
2849
3015
  disconnectedCallback() {
2850
- var e, i, r, o, a, l, h, g, c, d, m, f, x, v, y, k, C, w, T, A, u, p, b, E, S, L, z, O, ee, te, ie, re;
2851
- (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(), (g = this.loopSection) == null || g.destroy(), (c = this.audioStage) == null || c.destroy(), this.audioStage = null, (d = this.rewardedUnlock) == null || d.destroy(), this.rewardedUnlock = null, (m = this.sponsorship) == null || m.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), (k = this.playlistRunner) == null || k.destroy(), (C = this.hopeStory) == null || C.destroy(), (w = this.markProgress) == null || w.destroy(), (T = this.segments) == null || T.destroy(), (A = this.spriteThumbnails) == null || A.destroy(), (u = this.countdownScreen) == null || u.destroy(), (p = this.geoChecker) == null || p.destroy(), (b = this.redirectScreen) == null || b.destroy(), (E = this.pluginHost) == null || E.destroy(), this.pluginHost = null, (S = this.offGlobalPlugins) == null || S.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 = "", (O = this.qrResume) == null || O.destroy(), (ee = this.pauseAd) == null || ee.destroy(), this.pauseAd = null, (te = this.dubbing) == null || te.destroy(), (ie = this.liveWallClock) == null || ie.destroy(), (re = this.daiController) == null || re.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;
2852
3018
  }
2853
3019
  /** Reklam/consent-farkında plugin'lerin (gesture/sticky/in-view-autoplay) ortak sorgusu. */
2854
3020
  isAdPlaying() {
@@ -2869,7 +3035,33 @@ class Ge extends HTMLElement {
2869
3035
  pause() {
2870
3036
  this.videoEl.pause();
2871
3037
  }
2872
- /** Ş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. */
2873
3065
  get playbackEngine() {
2874
3066
  return this.sourceManager.engine;
2875
3067
  }
@@ -2897,7 +3089,7 @@ class Ge extends HTMLElement {
2897
3089
  async toggleStats(e) {
2898
3090
  if (!this.statsPanel) {
2899
3091
  if (e === !1) return;
2900
- const { installStats: i } = await import("./statsPanel-DSClIwA3.js");
3092
+ const { installStats: i } = await import("./statsPanel-D0DtoFgS.js");
2901
3093
  this.statsPanel ?? (this.statsPanel = i({
2902
3094
  videoEl: this.videoEl,
2903
3095
  containerEl: this.videoArea,
@@ -2919,21 +3111,36 @@ class Ge extends HTMLElement {
2919
3111
  return this.runtimePlugins.push(r), this.syncPlugins(), {
2920
3112
  name: typeof e == "function" ? "" : e.name,
2921
3113
  remove: () => {
2922
- const o = this.runtimePlugins.indexOf(r);
2923
- o < 0 || (this.runtimePlugins.splice(o, 1), this.syncPlugins());
3114
+ const s = this.runtimePlugins.indexOf(r);
3115
+ s < 0 || (this.runtimePlugins.splice(s, 1), this.syncPlugins());
2924
3116
  }
2925
3117
  };
2926
3118
  }
2927
3119
  /** Eklentiyi sayfadaki tüm player'lara ekler. */
2928
3120
  static use(e, i) {
2929
- return qt(e, i);
3121
+ return $t(e, i);
2930
3122
  }
2931
3123
  async syncPlugins() {
2932
- var o;
2933
- const e = this._options, i = (o = e.skipSegments) != null && o.length ? [[() => import("./skipSegments-BbWzPpXz.js").then((a) => a.skipSegmentsPlugin), e.skipSegments]] : [], r = [...Vt(), ...e.plugins ?? [], ...this.runtimePlugins];
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];
2934
3141
  if (!(!i.length && !r.length && !this.pluginHost)) {
2935
3142
  if (!this.pluginHost) {
2936
- const { PluginHost: a } = await import("./pluginHost-DjvLmMYZ.js");
3143
+ const { PluginHost: a } = await import("./pluginHost-GxNfyP5E.js");
2937
3144
  this.pluginHost ?? (this.pluginHost = new a({
2938
3145
  element: this,
2939
3146
  video: this.videoEl,
@@ -2943,6 +3150,8 @@ class Ge extends HTMLElement {
2943
3150
  locale: () => this._options.locale ?? "tr",
2944
3151
  currentSrc: () => this.sourceManager.currentSrc,
2945
3152
  isAdPlaying: () => this.isAdPlaying(),
3153
+ blockAds: () => this.blockChrome("ads", "hidden"),
3154
+ unblockAds: () => this.unblockChrome("ads"),
2946
3155
  isFullscreen: () => this.isFullscreenActive(),
2947
3156
  addControlButton: (l, h) => this.controlBar.addPluginButton(l, h),
2948
3157
  settings: {
@@ -3004,23 +3213,23 @@ class Ge extends HTMLElement {
3004
3213
  })), this.pluginApplyRun;
3005
3214
  }
3006
3215
  async applyOptions(e) {
3007
- var a, l, h, g, c, d, m, f, x, v, y, k, C, w, T, A, u, p, b, E, S, L;
3008
- 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 ?? Ce, this.tapToPlay = e.tapToPlay ?? "auto", this.cursorHideDelayMs = e.cursorHideDelayMs === !1 ? null : e.cursorHideDelayMs ?? Se, this.cursorHideDelayMs === null && this.showCursor(), this.controlBar.settingsMenu.setQualityBadgeEnabled(e.qualityBadge !== !1), this.controlBar.settingsMenu.setPlaybackRates(e.playbackRates ?? Ee), this.controlBar.setLiveSeekBar(e.liveSeekBar !== !1), this.controlBar.setButtonsVisible({ pip: e.pipButton !== !1, fullscreen: e.fullscreenButton !== !1 }), e.miniProgress && !this.miniProgress ? (this.miniProgress = new Bt(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();
3009
- const i = e.keyboardSeekStep && e.keyboardSeekStep > 0 ? e.keyboardSeekStep : ti;
3010
- 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;
3011
3220
  const r = e.skipButtons === !0 ? {} : e.skipButtons || null;
3012
3221
  this.controlBar.setSkipButtons(
3013
- r && r.back !== !1 ? r.back ?? Te : null,
3014
- r && r.forward !== !1 ? r.forward ?? Te : null
3222
+ r && r.back !== !1 ? r.back ?? Me : null,
3223
+ r && r.forward !== !1 ? r.forward ?? Me : null
3015
3224
  ), e.showRemainingTime !== void 0 && e.showRemainingTime !== this.appliedShowRemaining && (this.appliedShowRemaining = e.showRemainingTime, this.controlBar.setShowRemaining(e.showRemainingTime));
3016
- const o = si(e.aspectRatio);
3017
- 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", Qt(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(), (g = this.countdownScreen) == null || g.refreshLabels(), (c = this.geoChecker) == null || c.refreshLabels(), (d = this.redirectScreen) == null || d.refreshLabels(), (m = this.pluginHost) == null || m.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(), (k = this.castController) == null || k.refreshLabels(), (C = this.dubbing) == null || C.refreshLabels(), this.onStreamAudioTracks(this.streamAudio.tracks, this.streamAudio.active), (w = this.statsPanel) == null || w.refreshLabels(), (T = this.debugPanel) == null || T.refreshLabels(), (A = this.liveWallClock) == null || A.refreshLabels(), (u = this.loopSection) == null || u.refreshLabels(), (p = this.audioStage) == null || p.refreshLabels(), (b = this.rewardedUnlock) == null || b.refreshLabels(), (E = this.markProgress) == null || E.refreshLabels(), (L = (S = this.unregisterSticky) == null ? void 0 : S.refreshLabels) == null || L.call(S), 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);
3018
3227
  }
3019
3228
  /** applyOptions'ın asenkron kısmı — yalnızca queuePluginApply üzerinden, sırayla çalışır. */
3020
3229
  async applyPluginsAndPlayback(e) {
3021
3230
  if (e.ads && !this.adsController) {
3022
3231
  const r = e.ads === !0 ? {} : e.ads;
3023
- Wt(r) && !this.prerollGate.isArmed && this.prerollGate.arm(r.prerollTimeoutMs ?? J), Jt(), e.countdownScreen || this.installAdsOnce(e);
3232
+ ei(r) && !this.prerollGate.isArmed && this.prerollGate.arm(r.prerollTimeoutMs ?? te), ri(), e.countdownScreen || this.installAdsOnce(e);
3024
3233
  }
3025
3234
  await this.applyAudioMode(e);
3026
3235
  const i = () => ({
@@ -3044,46 +3253,47 @@ class Ge extends HTMLElement {
3044
3253
  }))) : await this.initPlayback(e);
3045
3254
  }
3046
3255
  async initPlayback(e) {
3047
- var m, f, x, v, y, k, C, w, T, A;
3048
- this.sourceManager.configure(e.hls), this.errorScreen.dismiss(), await this.applyRewardedUnlock(e);
3049
- const i = (m = e.sources) != null && m.length ? e.sources : e.src ? [{ src: e.src, label: this.i18n.autoQuality }] : [];
3050
- this.sourceGroups = je(i, e.sourcePriority);
3051
- const r = (u) => this.sourceManager.isLoaded(u.src, u.type) && !this.isSourceLocked(u), o = this.sourceGroups.findIndex((u) => u.sources.some(r));
3052
- this.activeGroup = o !== -1 ? o : this.firstPlayableGroup();
3053
- const a = ((f = this.sourceGroups[this.activeGroup]) == null ? void 0 : f.sources) ?? [];
3054
- this.currentSources = a, this.fallbackPending = !1;
3055
- const h = a.find(r) ?? this.pickInitialSource(a);
3056
- 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(() => {
3057
- })), 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) {
3058
- const u = e.gesture === !0 ? {} : e.gesture, { installGesture: p } = await import("./gesture-BzPCgi87.js");
3059
- this.gestureControls = p(
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");
3269
+ this.gestureControls = u(
3060
3270
  { videoEl: this.videoEl, overlayContainerEl: this.videoArea, isAdActive: () => this.isAdPlaying() },
3061
- u
3271
+ p
3062
3272
  );
3063
3273
  }
3064
3274
  if (e.loopSection && !this.loopSection) {
3065
- const u = e.loopSection === !0 ? {} : e.loopSection, { installLoopSection: p } = await import("./loopSection-CvF4l5uf.js");
3066
- this.loopSection = p(
3275
+ const p = e.loopSection === !0 ? {} : e.loopSection, { installLoopSection: u } = await import("./loopSection-CvF4l5uf.js");
3276
+ this.loopSection = u(
3067
3277
  {
3068
3278
  videoEl: this.videoEl,
3069
3279
  seekBarEl: this.controlBar.seekBar.el,
3070
3280
  markers: this.controlBar.seekBar,
3071
- addControlButton: (b, E, S) => this.controlBar.addButton(b, E, S),
3281
+ addControlButton: (y, C, L) => this.controlBar.addButton(y, C, L),
3072
3282
  i18n: this.i18n
3073
3283
  },
3074
- u
3284
+ p
3075
3285
  );
3076
3286
  }
3077
3287
  if (e.inViewAutoplay && !this.inViewAutoplay) {
3078
- const u = e.inViewAutoplay === !0 ? {} : e.inViewAutoplay, { installInViewAutoplay: p } = await import("./inViewAutoplay-CRJe7GA4.js");
3079
- this.inViewAutoplay = p(
3288
+ const p = e.inViewAutoplay === !0 ? {} : e.inViewAutoplay, { installInViewAutoplay: u } = await import("./inViewAutoplay-CRJe7GA4.js");
3289
+ this.inViewAutoplay = u(
3080
3290
  { videoEl: this.videoEl, observeEl: this, isAdActive: () => this.isAdPlaying() || this.casting },
3081
- u
3291
+ p
3082
3292
  );
3083
3293
  }
3084
3294
  if (e.sticky && !this.unregisterSticky) {
3085
- const u = e.sticky === !0 ? {} : e.sticky, { installSticky: p } = await import("./sticky-D_eLCNFk.js");
3086
- this.unregisterSticky = p(
3295
+ const p = e.sticky === !0 ? {} : e.sticky, { installSticky: u } = await import("./sticky-D_eLCNFk.js");
3296
+ this.unregisterSticky = u(
3087
3297
  {
3088
3298
  key: this.instanceKey,
3089
3299
  videoEl: this.videoEl,
@@ -3093,44 +3303,45 @@ class Ge extends HTMLElement {
3093
3303
  isAdActive: () => this.isAdPlaying(),
3094
3304
  i18n: this.i18n
3095
3305
  },
3096
- u
3306
+ p
3097
3307
  );
3098
3308
  }
3099
3309
  if (e.playlist && !this.playlistRunner) {
3100
- const { installPlaylist: u } = await import("./playlist-C6Mh9BE8.js");
3101
- this.playlistRunner = u(
3310
+ const { installPlaylist: p } = await import("./playlist-DJsdK6xm.js");
3311
+ this.playlistRunner = p(
3102
3312
  {
3103
3313
  videoEl: this.videoEl,
3104
3314
  hostEl: this,
3105
3315
  panelEl: this.getOrCreatePanelContainer(),
3106
- loadSource: (p, b) => this.sourceManager.load(p, b),
3107
- setPoster: (p) => {
3108
- this.videoEl.poster = p;
3316
+ loadSource: (u, y) => this.sourceManager.load(u, y),
3317
+ setPoster: (u) => {
3318
+ this.videoEl.poster = u;
3109
3319
  },
3110
- requestFreshAd: (p) => {
3111
- var b;
3112
- return (b = this.adsController) == null ? void 0 : b.resetForNewItem(p);
3320
+ requestFreshAd: (u) => {
3321
+ var y;
3322
+ return (y = this.adsController) == null ? void 0 : y.resetForNewItem(u);
3113
3323
  },
3324
+ isAdActive: () => this.isAdPlaying(),
3114
3325
  i18n: this.i18n
3115
3326
  },
3116
3327
  e.playlist
3117
3328
  );
3118
3329
  }
3119
3330
  if (e.story && !this.hopeStory) {
3120
- const { installStory: u } = await import("./story-BLBij82f.js");
3121
- this.hopeStory = u(
3331
+ const { installStory: p } = await import("./story-BRkhSDhR.js");
3332
+ this.hopeStory = p(
3122
3333
  {
3123
3334
  videoEl: this.videoEl,
3124
3335
  hostEl: this,
3125
3336
  videoAreaEl: this.videoArea,
3126
3337
  playerBodyEls: [this.root.querySelector(".media-layer"), this.chromeEl, this.centerPlayButton],
3127
- loadSource: (p, b) => this.sourceManager.load(p, b),
3128
- setPoster: (p) => {
3129
- this.videoEl.poster = p;
3338
+ loadSource: (u, y) => this.sourceManager.load(u, y),
3339
+ setPoster: (u) => {
3340
+ this.videoEl.poster = u;
3130
3341
  },
3131
- requestFreshAd: (p) => {
3132
- var b;
3133
- return (b = this.adsController) == null ? void 0 : b.resetForNewItem(p);
3342
+ requestFreshAd: (u) => {
3343
+ var y;
3344
+ return (y = this.adsController) == null ? void 0 : y.resetForNewItem(u);
3134
3345
  },
3135
3346
  i18n: this.i18n
3136
3347
  },
@@ -3138,24 +3349,24 @@ class Ge extends HTMLElement {
3138
3349
  );
3139
3350
  }
3140
3351
  if (e.markers && !this.markProgress) {
3141
- const { installMarkers: u } = await import("./markers-B04NMI79.js");
3142
- this.markProgress = u(
3352
+ const { installMarkers: p } = await import("./markers-Dr4-CCxE.js");
3353
+ this.markProgress = p(
3143
3354
  {
3144
3355
  videoEl: this.videoEl,
3145
3356
  overlayContainerEl: this.videoArea,
3146
- addSeekBarMarker: (p, b) => this.controlBar.seekBar.addMarker(p, b),
3357
+ addSeekBarMarker: (u, y) => this.controlBar.seekBar.addMarker(u, y),
3147
3358
  i18n: this.i18n
3148
3359
  },
3149
3360
  e.markers
3150
3361
  );
3151
3362
  }
3152
3363
  if ((x = e.segments) != null && x.length && !this.segments) {
3153
- const { installSegments: u } = await import("./segments-gCPrWRig.js");
3154
- this.segments = u({ videoEl: this.videoEl, seekBar: this.controlBar.seekBar }, e.segments);
3364
+ const { installSegments: p } = await import("./segments--hl_QVrI.js");
3365
+ this.segments = p({ videoEl: this.videoEl, seekBar: this.controlBar.seekBar }, e.segments);
3155
3366
  }
3156
3367
  if (e.spriteThumbnails && !this.spriteThumbnails) {
3157
- const { installSpriteThumbnails: u } = await import("./spriteThumbnails-B7oDZFTo.js");
3158
- this.spriteThumbnails = u(
3368
+ const { installSpriteThumbnails: p } = await import("./spriteThumbnails-BoxVY--_.js");
3369
+ this.spriteThumbnails = p(
3159
3370
  {
3160
3371
  videoEl: this.videoEl,
3161
3372
  seekBar: this.controlBar.seekBar,
@@ -3164,40 +3375,40 @@ class Ge extends HTMLElement {
3164
3375
  e.spriteThumbnails
3165
3376
  );
3166
3377
  }
3167
- const g = e.redirectScreen ? JSON.stringify(e.redirectScreen) : "";
3168
- if (g !== this.redirectKey && (this.redirectKey = g, (v = this.redirectScreen) == null || v.destroy(), this.redirectScreen = null, e.redirectScreen)) {
3169
- const { installRedirectScreen: u } = await import("./redirectScreen-5HAVRtxe.js");
3170
- this.redirectScreen = u(
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(
3171
3382
  { hostEl: this, videoEl: this.videoEl, overlayContainerEl: this.videoArea, isAdActive: () => this.isAdPlaying(), i18n: this.i18n },
3172
3383
  e.redirectScreen
3173
3384
  );
3174
3385
  }
3175
- const c = e.accessibility ? JSON.stringify(e.accessibility) : "";
3176
- if (c !== this.accessibilityKey && (this.accessibilityKey = c, (y = this.accessibility) == null || y.destroy(), this.accessibility = null, e.accessibility)) {
3177
- const { installAccessibility: u } = await import("./accessibility-DeUIoAda.js");
3178
- this.accessibilityKey === c && (this.accessibility = u(
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(
3179
3390
  {
3180
3391
  hostEl: this,
3181
3392
  videoEl: this.videoEl,
3182
3393
  videoAreaEl: this.videoArea,
3183
3394
  i18n: this.i18n,
3184
- registerSubmenu: (p) => this.controlBar.settingsMenu.registerSubmenu(p),
3185
- unregisterSubmenu: (p) => this.controlBar.settingsMenu.unregisterSubmenu(p),
3186
- addQuickButton: (p, b, E) => this.controlBar.settingsMenu.addQuickButton(p, b, E),
3395
+ registerSubmenu: (u) => this.controlBar.settingsMenu.registerSubmenu(u),
3396
+ unregisterSubmenu: (u) => this.controlBar.settingsMenu.unregisterSubmenu(u),
3397
+ addQuickButton: (u, y, C) => this.controlBar.settingsMenu.addQuickButton(u, y, C),
3187
3398
  seekStep: () => this.keyboard.seekStep,
3188
3399
  extraShortcuts: () => {
3189
- var p;
3190
- return ((p = this.pluginHost) == null ? void 0 : p.shortcuts()) ?? [];
3400
+ var u;
3401
+ return ((u = this.pluginHost) == null ? void 0 : u.shortcuts()) ?? [];
3191
3402
  }
3192
3403
  },
3193
3404
  e.accessibility === !0 ? {} : e.accessibility
3194
3405
  ));
3195
3406
  }
3196
3407
  await this.syncPlugins();
3197
- const d = e.history ? JSON.stringify(e.history) : "";
3198
- if (d !== this.historyKey && (this.historyKey = d, (k = this.playbackHistory) == null || k.destroy(), this.playbackHistory = null, e.history)) {
3199
- const u = e.qrResume ? e.qrResume.paramName ?? "vtime" : null, p = !!u && new URL(location.href).searchParams.has(u), { installHistory: b } = await import("./history-DAbqEhNB.js");
3200
- this.historyKey === d && (this.playbackHistory = b(
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(
3201
3412
  {
3202
3413
  hostEl: this,
3203
3414
  videoEl: this.videoEl,
@@ -3206,30 +3417,30 @@ class Ge extends HTMLElement {
3206
3417
  currentSrc: () => this.sourceManager.currentSrc,
3207
3418
  isAdActive: () => this.isAdPlaying(),
3208
3419
  mutedRequested: () => !!this._options.muted,
3209
- linkTimePresent: p
3420
+ linkTimePresent: u
3210
3421
  },
3211
3422
  e.history === !0 ? {} : e.history
3212
3423
  ));
3213
3424
  }
3214
3425
  if (e.qrResume && !this.qrResume) {
3215
- const { installQrResume: u } = await import("./qrResume-DXwD3oSA.js");
3216
- this.qrResume = u({ 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);
3217
3428
  }
3218
3429
  if (this.qrResume) {
3219
- const u = this.qrResume;
3430
+ const p = this.qrResume;
3220
3431
  this.controlBar.settingsMenu.setQrResumeToggle({
3221
3432
  label: this.i18n.qrResumeMenuLabel,
3222
- getValueLabel: () => u.isEnabled() ? this.i18n.qrResumeOn : this.i18n.qrResumeOff,
3223
- onToggle: () => u.setEnabled(!u.isEnabled())
3433
+ getValueLabel: () => p.isEnabled() ? this.i18n.qrResumeOn : this.i18n.qrResumeOff,
3434
+ onToggle: () => p.setEnabled(!p.isEnabled())
3224
3435
  });
3225
3436
  }
3226
3437
  if (e.tapGestures && !this.tapGestures) {
3227
- const { installTapGestures: u } = await import("./tapGestures-DrC42DiI.js");
3228
- this.tapGestures = u(
3438
+ const { installTapGestures: p } = await import("./tapGestures-DrC42DiI.js");
3439
+ this.tapGestures = p(
3229
3440
  {
3230
3441
  areaEl: this.videoArea,
3231
- seekBy: (p) => {
3232
- this.controlBar.seekBar.el.style.pointerEvents !== "none" && (Me(this.videoEl, p), this.seekFeedback.show(p));
3442
+ seekBy: (u) => {
3443
+ this.controlBar.seekBar.el.style.pointerEvents !== "none" && (Fe(this.videoEl, u), this.seekFeedback.show(u));
3233
3444
  },
3234
3445
  togglePlay: () => this.videoEl.paused ? void this.videoEl.play().catch(() => {
3235
3446
  }) : this.videoEl.pause(),
@@ -3242,63 +3453,63 @@ class Ge extends HTMLElement {
3242
3453
  );
3243
3454
  }
3244
3455
  if (this.tapGestures) {
3245
- const { DEFAULT_TAP_GESTURES: u } = await import("./tapGestures-DrC42DiI.js");
3246
- this.tapGestures.setGestures(e.tapGestures === !0 ? u : e.tapGestures || []);
3456
+ const { DEFAULT_TAP_GESTURES: p } = await import("./tapGestures-DrC42DiI.js");
3457
+ this.tapGestures.setGestures(e.tapGestures === !0 ? p : e.tapGestures || []);
3247
3458
  }
3248
- if ((C = e.pauseAd) != null && C.adUnitPath && !this.pauseAd) {
3249
- const { installPauseAd: u } = await import("./pauseAd-BQQe21X4.js");
3250
- this.pauseAd = u(
3459
+ if ((S = e.pauseAd) != null && S.adUnitPath && !this.pauseAd) {
3460
+ const { installPauseAd: p } = await import("./pauseAd-BQQe21X4.js");
3461
+ this.pauseAd = p(
3251
3462
  { videoEl: this.videoEl, hostEl: this, videoArea: this.videoArea, i18n: this.i18n, isBlocked: () => this.isChromeBlocked },
3252
3463
  e.pauseAd
3253
3464
  );
3254
3465
  }
3255
3466
  if (e.dubbing && !this.dubbing) {
3256
- const { installDubbing: u } = await import("./dubbing-kNMPpyHl.js");
3257
- this.dubbing = u(
3467
+ const { installDubbing: p } = await import("./dubbing-kNMPpyHl.js");
3468
+ this.dubbing = p(
3258
3469
  {
3259
3470
  videoEl: this.videoEl,
3260
- loadSource: (p, b) => this.sourceManager.load(p, b),
3261
- registerSubmenu: (p) => this.controlBar.settingsMenu.registerSubmenu(p),
3262
- unregisterSubmenu: (p) => this.controlBar.settingsMenu.unregisterSubmenu(p),
3471
+ loadSource: (u, y) => this.sourceManager.load(u, y),
3472
+ registerSubmenu: (u) => this.controlBar.settingsMenu.registerSubmenu(u),
3473
+ unregisterSubmenu: (u) => this.controlBar.settingsMenu.unregisterSubmenu(u),
3263
3474
  i18n: this.i18n
3264
3475
  },
3265
3476
  e.dubbing
3266
3477
  );
3267
3478
  }
3268
3479
  if (e.liveWallClock && !this.liveWallClock) {
3269
- const u = e.liveWallClock === !0 ? {} : e.liveWallClock, { installLiveWallClock: p } = await import("./liveWallClock-ChUTtzLD.js");
3270
- this.liveWallClock = p(
3480
+ const p = e.liveWallClock === !0 ? {} : e.liveWallClock, { installLiveWallClock: u } = await import("./liveWallClock-ChUTtzLD.js");
3481
+ this.liveWallClock = u(
3271
3482
  {
3272
3483
  videoEl: this.videoEl,
3273
3484
  seekBarEl: this.controlBar.seekBar.el,
3274
- addControlElement: (b) => this.controlBar.addElement(b),
3485
+ addControlElement: (y) => this.controlBar.addElement(y),
3275
3486
  i18n: this.i18n,
3276
3487
  getPlayingDate: () => {
3277
- var L, z, O;
3278
- const b = (L = this.sourceManager.hlsInstance) == null ? void 0 : L.playingDate;
3279
- if (b) return b;
3280
- const E = (O = (z = this.videoEl).getStartDate) == null ? void 0 : O.call(z), S = (E == null ? void 0 : E.getTime()) ?? NaN;
3281
- return Number.isFinite(S) && S > 0 ? new Date(S + 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;
3282
3493
  }
3283
3494
  },
3284
- u
3495
+ p
3285
3496
  ), this.controlBar.seekBar.liveHoverHandled = !0;
3286
3497
  }
3287
3498
  if (e.dai && !this.daiController) {
3288
- const { installDai: u } = await import("./dai-B9Tth1Iv.js");
3289
- this.daiController = await u(
3499
+ const { installDai: p } = await import("./dai-B9Tth1Iv.js");
3500
+ this.daiController = await p(
3290
3501
  {
3291
3502
  videoEl: this.videoEl,
3292
3503
  hostEl: this,
3293
3504
  adUiEl: this.adLayerEl,
3294
- loadStreamUrl: (p) => this.sourceManager.load(p),
3505
+ loadStreamUrl: (u) => this.sourceManager.load(u),
3295
3506
  disableSeeking: () => this.disableSeeking(),
3296
3507
  enableSeeking: () => this.enableSeeking()
3297
3508
  },
3298
3509
  e.dai
3299
3510
  );
3300
3511
  }
3301
- (w = e.subtitles) != null && w.length ? this.optionTracks = bt(this.videoEl, e.subtitles) : (Fe(this.videoEl), this.optionTracks = []), this.rebuildCaptions(((A = (T = e.subtitles) == null ? void 0 : T.find((u) => u.default)) == null ? void 0 : A.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);
3302
3513
  }
3303
3514
  /** Altyazı menüsünü `options.subtitles` + yayın izlerinden kurar; `activeLabel` varsa onu seçer. */
3304
3515
  rebuildCaptions(e) {
@@ -3306,17 +3517,17 @@ class Ge extends HTMLElement {
3306
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);
3307
3518
  return;
3308
3519
  }
3309
- const i = (o) => {
3520
+ const i = (s) => {
3310
3521
  var l;
3311
- const a = vt(this.subtitleTracks, o);
3312
- 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);
3313
3524
  };
3314
3525
  this.selectCaption = i;
3315
- 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;
3316
3527
  this.controlBar.setCaptions(
3317
3528
  [
3318
3529
  { label: this.i18n.captionsOff, onSelect: () => i(null) },
3319
- ...this.subtitleTracks.map(({ label: o }) => ({ label: o, onSelect: () => i(o) }))
3530
+ ...this.subtitleTracks.map(({ label: s }) => ({ label: s, onSelect: () => i(s) }))
3320
3531
  ],
3321
3532
  r ?? this.i18n.captionsOff
3322
3533
  ), i(r);
@@ -3328,23 +3539,23 @@ class Ge extends HTMLElement {
3328
3539
  streamTrackLabel(e, i) {
3329
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;
3330
3541
  try {
3331
- const o = new Intl.DisplayNames([this.localeCode], { type: "language" }).of(i);
3332
- 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);
3333
3544
  } catch {
3334
3545
  }
3335
3546
  return e || i;
3336
3547
  }
3337
3548
  /** Aynı adlı iz varsa (ör. options.subtitles'ta da "English") dil/sırayla ayırt edilir. */
3338
3549
  uniqueLabel(e, i, r) {
3339
- const o = r.has(e) ? `${e} (${i})` : e;
3340
- return r.add(o), o;
3550
+ const s = r.has(e) ? `${e} (${i})` : e;
3551
+ return r.add(s), s;
3341
3552
  }
3342
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). */
3343
3554
  buildCaptionAppearance() {
3344
- const e = ["small", "normal", "large"], i = (r, o, a, l) => r.map((h, g) => ({
3555
+ const e = ["small", "normal", "large"], i = (r, s, a, l) => r.map((h, c) => ({
3345
3556
  value: h,
3346
- active: o() === h,
3347
- ariaLabel: `${l} ${g + 1}`,
3557
+ active: s() === h,
3558
+ ariaLabel: `${l} ${c + 1}`,
3348
3559
  onSelect: () => a(h)
3349
3560
  }));
3350
3561
  return {
@@ -3356,14 +3567,14 @@ class Ge extends HTMLElement {
3356
3567
  })),
3357
3568
  bgColorLabel: this.i18n.captionBgColor,
3358
3569
  getBgColorOptions: () => i(
3359
- I.BG_COLOR_PRESETS,
3570
+ D.BG_COLOR_PRESETS,
3360
3571
  () => this.captionRenderer.getBgColor(),
3361
3572
  (r) => this.captionRenderer.setBgColor(r),
3362
3573
  this.i18n.captionBgColor
3363
3574
  ),
3364
3575
  textColorLabel: this.i18n.captionTextColor,
3365
3576
  getTextColorOptions: () => i(
3366
- I.TEXT_COLOR_PRESETS,
3577
+ D.TEXT_COLOR_PRESETS,
3367
3578
  () => this.captionRenderer.getTextColor(),
3368
3579
  (r) => this.captionRenderer.setTextColor(r),
3369
3580
  this.i18n.captionTextColor
@@ -3387,11 +3598,32 @@ class Ge extends HTMLElement {
3387
3598
  return !!((i = this.qualityGate) != null && i.isLocked(this.sourceHeight(e)));
3388
3599
  }
3389
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
+ }
3390
3617
  pickInitialSource(e) {
3391
- const i = e.find((o) => o.selected) ?? e[0];
3392
- if (!i || !this.isSourceLocked(i)) return i;
3393
- const r = e.filter((o) => !this.isSourceLocked(o));
3394
- 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;
3395
3627
  }
3396
3628
  renderSourceQualities() {
3397
3629
  const e = this.currentSources;
@@ -3402,8 +3634,8 @@ class Ge extends HTMLElement {
3402
3634
  label: i.label,
3403
3635
  locked: r,
3404
3636
  onSelect: r ? () => {
3405
- var o;
3406
- return (o = this.qualityGate) == null ? void 0 : o.requestUnlock();
3637
+ var s;
3638
+ return (s = this.qualityGate) == null ? void 0 : s.requestUnlock();
3407
3639
  } : () => void this.switchQualitySource(i)
3408
3640
  };
3409
3641
  }),
@@ -3429,7 +3661,7 @@ class Ge extends HTMLElement {
3429
3661
  if (this.lastHlsLevels.length > 1)
3430
3662
  this.onHlsLevelsChanged(this.lastHlsLevels, e ? -1 : this.lastHlsActive), e && this.sourceManager.setLevel(-1);
3431
3663
  else if (this.currentSources.length > 1) {
3432
- 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);
3433
3665
  a && a.label !== this.activeSourceLabel ? this.switchQualitySource(a) : this.renderSourceQualities();
3434
3666
  }
3435
3667
  (i = this.rewardedUnlock) == null || i.onQualitiesChanged();
@@ -3443,7 +3675,7 @@ class Ge extends HTMLElement {
3443
3675
  if (this.rewardedUnlock)
3444
3676
  this.rewardedUnlock.update(i);
3445
3677
  else {
3446
- const { installRewardedUnlock: r } = await import("./rewardedUnlock-CGhQyWOk.js");
3678
+ const { installRewardedUnlock: r } = await import("./rewardedUnlock-jFOdzfSq.js");
3447
3679
  this.rewardedUnlock ?? (this.rewardedUnlock = r(
3448
3680
  {
3449
3681
  hostEl: this,
@@ -3451,7 +3683,7 @@ class Ge extends HTMLElement {
3451
3683
  overlayEl: this.videoArea,
3452
3684
  chromeEl: this.chromeEl,
3453
3685
  i18n: this.i18n,
3454
- log: (o) => this.log.add({ source: "ads", ...o }),
3686
+ log: (s) => this.log.add({ source: "ads", ...s }),
3455
3687
  play: () => void this.play().catch(() => {
3456
3688
  }),
3457
3689
  exitFullscreen: () => {
@@ -3460,7 +3692,7 @@ class Ge extends HTMLElement {
3460
3692
  lockedQualityLabel: () => this.lockedQualityLabel(),
3461
3693
  // Kalite dosyası değil içerik: aynı videonun 240p ↔ 720p geçişi (ya da HLS → MP4 yedeği) kilidi kapatmasın.
3462
3694
  contentKey: () => this.contentKey(),
3463
- onLockChange: (o) => this.refreshQualityGate(o)
3695
+ onLockChange: (s) => this.refreshQualityGate(s)
3464
3696
  },
3465
3697
  i
3466
3698
  )), this.qualityGate = this.rewardedUnlock;
@@ -3471,7 +3703,7 @@ class Ge extends HTMLElement {
3471
3703
  * yüklediği medya (playlist, hikâye, dublaj) çalıyorsa onun adresi.
3472
3704
  */
3473
3705
  contentKey() {
3474
- 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 ?? "";
3475
3707
  return !i || e.includes(i) ? e.join("|") : i;
3476
3708
  }
3477
3709
  async applyCast(e) {
@@ -3484,8 +3716,8 @@ class Ge extends HTMLElement {
3484
3716
  if (this.castController)
3485
3717
  this.castController.update(i);
3486
3718
  else {
3487
- const { installCast: o } = await import("./cast-BQ-suTcF.js");
3488
- this.castController ?? (this.castController = o(
3719
+ const { installCast: s } = await import("./cast-Baxvu76A.js");
3720
+ this.castController ?? (this.castController = s(
3489
3721
  {
3490
3722
  hostEl: this,
3491
3723
  videoEl: this.videoEl,
@@ -3495,7 +3727,7 @@ class Ge extends HTMLElement {
3495
3727
  addButton: (a, l, h) => this.controlBar.addButton(a, l, h),
3496
3728
  getMedia: () => this.castMedia(),
3497
3729
  isAdPlaying: () => this.isAdPlaying(),
3498
- isMse: () => this.sourceManager.engine.engine === "hls.js",
3730
+ isMse: () => this.sourceManager.engine.engine === "hls.js" || this.sourceManager.engine.engine === "dash.js",
3499
3731
  contentKey: () => this.contentKey(),
3500
3732
  onRemoteChange: (a) => {
3501
3733
  var l;
@@ -3508,35 +3740,35 @@ class Ge extends HTMLElement {
3508
3740
  }
3509
3741
  /** TV'ye gönderilecek içerik: o an çalan kaynak (ya da `cast.source`), başlık / kapak, altyazılar, reklam tag'leri. */
3510
3742
  castMedia() {
3511
- var C, w, T, A, u;
3743
+ var w, S, T, A, E;
3512
3744
  const e = this._options, i = e.cast ?? {}, r = this.sourceManager.currentSrc;
3513
3745
  if (!r) return null;
3514
- const o = (C = this.currentSources.find((p) => p.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 = (p) => new URL(p, document.baseURI).href, g = Pe({ src: l.src, type: l.type }), c = typeof e.audio == "object" ? e.audio : null, d = ((w = i.metadata) == null ? void 0 : w.image) ?? (c == null ? void 0 : c.cover) ?? e.poster, m = typeof e.ads == "object" ? e.ads : null, f = m == null ? void 0 : m.prebid, x = f == null ? void 0 : f.custParams, v = f ? { ...Y(f.custParams), ...Y((T = f.midroll) == null ? void 0 : T.custParams) } : void 0, y = (p, b) => {
3515
- const E = Array.isArray(p) ? p[0] : p;
3516
- return E ? Kt($(E), b) : void 0;
3517
- }, k = i.ads === !1 ? null : typeof i.ads == "object" ? {
3518
- vmap: i.ads.vmap ? $(i.ads.vmap) : void 0,
3519
- preroll: y(i.ads.preroll),
3520
- 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),
3521
3753
  midrollIntervalSeconds: i.ads.midrollIntervalSeconds,
3522
- postroll: y(i.ads.postroll)
3754
+ postroll: g(i.ads.postroll)
3523
3755
  } : m ? {
3524
- vmap: m.adTagVmap ? $(m.adTagVmap) : void 0,
3525
- preroll: y(m.adTagPreroll, x),
3526
- midroll: y(m.adTagMidroll, v),
3756
+ vmap: m.adTagVmap ? X(m.adTagVmap) : void 0,
3757
+ preroll: g(m.adTagPreroll, k),
3758
+ midroll: g(m.adTagMidroll, x),
3527
3759
  midrollIntervalSeconds: m.midrollIntervalSeconds,
3528
- postroll: y(m.adTagPostroll)
3760
+ postroll: g(m.adTagPostroll)
3529
3761
  } : null;
3530
3762
  return {
3531
3763
  src: h(l.src),
3532
- contentType: l.type || ii[g] || "video/mp4",
3764
+ contentType: l.type || ni[c] || "video/mp4",
3533
3765
  live: this.videoEl.duration === 1 / 0,
3534
- title: ((A = i.metadata) == null ? void 0 : A.title) ?? (c == null ? void 0 : c.title),
3535
- subtitle: ((u = i.metadata) == null ? void 0 : u.subtitle) ?? (c == null ? void 0 : c.artist),
3536
- image: d ? h(d) : 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,
3537
3769
  music: !!e.audio,
3538
3770
  subtitles: (e.subtitles ?? []).map((p) => ({ src: h(p.src), label: p.label, lang: p.srclang, default: p.default })),
3539
- ads: k && (k.vmap || k.preroll || k.midroll || k.postroll) ? k : null
3771
+ ads: v && (v.vmap || v.preroll || v.midroll || v.postroll) ? v : null
3540
3772
  };
3541
3773
  }
3542
3774
  async applyAdTriggers(e) {
@@ -3549,8 +3781,8 @@ class Ge extends HTMLElement {
3549
3781
  if (this.adTriggers)
3550
3782
  this.adTriggers.update(i);
3551
3783
  else {
3552
- const { installAdTriggers: o } = await import("./adTriggers-DXmtF4t2.js");
3553
- this.adTriggers ?? (this.adTriggers = o(
3784
+ const { installAdTriggers: s } = await import("./adTriggers-DXmtF4t2.js");
3785
+ this.adTriggers ?? (this.adTriggers = s(
3554
3786
  {
3555
3787
  hostEl: this,
3556
3788
  videoEl: this.videoEl,
@@ -3576,8 +3808,8 @@ class Ge extends HTMLElement {
3576
3808
  if (this.sponsorship)
3577
3809
  this.sponsorship.update(i);
3578
3810
  else {
3579
- const { installSponsorship: o } = await import("./sponsorship-BT21uwN5.js");
3580
- this.sponsorship ?? (this.sponsorship = o(
3811
+ const { installSponsorship: s } = await import("./sponsorship-BT21uwN5.js");
3812
+ this.sponsorship ?? (this.sponsorship = s(
3581
3813
  {
3582
3814
  hostEl: this,
3583
3815
  videoEl: this.videoEl,
@@ -3600,15 +3832,15 @@ class Ge extends HTMLElement {
3600
3832
  firstPlayableGroup(e = 0) {
3601
3833
  var i;
3602
3834
  for (let r = e; r < this.sourceGroups.length; r++) {
3603
- const o = this.sourceGroups[r];
3604
- if (!$e(o, this.videoEl)) {
3835
+ const s = this.sourceGroups[r];
3836
+ if (!Ye(s, this.videoEl)) {
3605
3837
  if (r > e) {
3606
3838
  const a = this.sourceGroups[e].format;
3607
- 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 } }));
3608
3840
  }
3609
3841
  return r;
3610
3842
  }
3611
- 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 } });
3612
3844
  }
3613
3845
  return e === 0 ? 0 : -1;
3614
3846
  }
@@ -3626,19 +3858,19 @@ class Ge extends HTMLElement {
3626
3858
  const r = this.firstPlayableGroup(this.activeGroup + 1);
3627
3859
  if (r === -1) return !1;
3628
3860
  this.fallbackPending = !0;
3629
- 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;
3630
3862
  return this.log.add({
3631
3863
  source: "player",
3632
3864
  message: `Source "${e.format}" failed — falling back to "${this.sourceGroups[r].format}"`,
3633
3865
  details: { code: i, src: this.sourceManager.currentSrc ?? void 0 }
3634
- }), 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;
3635
3867
  }
3636
3868
  async activateSourceGroup(e, i, r) {
3637
3869
  var l;
3638
- const o = this.sourceGroups[e];
3639
- if (!o) return;
3640
- this.activeGroup = e, this.currentSources = o.sources;
3641
- 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);
3642
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 });
3643
3875
  try {
3644
3876
  await this.sourceManager.load(a.src, a.type);
@@ -3650,7 +3882,7 @@ class Ge extends HTMLElement {
3650
3882
  }
3651
3883
  /** Hata ekranındaki "Tekrar dene": birden fazla grup varsa en öncelikli gruptan baştan başla. */
3652
3884
  async retrySource() {
3653
- 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));
3654
3886
  if (this.sourceGroups.length < 2 || !e) return this.sourceManager.reload();
3655
3887
  const i = Number.isFinite(this.videoEl.duration) ? this.videoEl.currentTime : 0;
3656
3888
  this.fallbackPending = !0, await this.activateSourceGroup(this.firstPlayableGroup(), i, !0);
@@ -3663,8 +3895,8 @@ class Ge extends HTMLElement {
3663
3895
  requestFullscreenCompat() {
3664
3896
  if (this.audioMode) return;
3665
3897
  const e = this, i = () => {
3666
- var r, o;
3667
- 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);
3668
3900
  };
3669
3901
  e.requestFullscreen ? e.requestFullscreen().catch(i) : e.webkitRequestFullscreen ? e.webkitRequestFullscreen() : i();
3670
3902
  }
@@ -3709,20 +3941,20 @@ class Ge extends HTMLElement {
3709
3941
  * alanın ortasına alınır, sığmazsa küçülür (en az 40px).
3710
3942
  */
3711
3943
  layoutCenterPlay() {
3712
- 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 = () => {
3713
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");
3714
3946
  };
3715
- if (!i.height || !r.height || !e.hasAttribute("data-compact")) return o();
3947
+ if (!i.height || !r.height || !e.hasAttribute("data-compact")) return s();
3716
3948
  const a = 64, l = r.top - i.top - 8;
3717
- if (i.height / 2 + a / 2 <= l) return o();
3718
- const h = Math.max(40, Math.min(56, l - 12)), g = Math.max(h / 2 + 6, l - h / 2), c = Math.round(g - i.height / 2);
3719
- let d = 0;
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;
3720
3952
  const m = this.controlBar.topEl.getBoundingClientRect();
3721
- if (m.width > 0 && g - h / 2 < m.bottom - i.top) {
3722
- const f = m.left - i.left - 8 - h / 2;
3723
- i.width / 2 > f && (d = Math.round(Math.max(h / 2 + 8, f) - i.width / 2));
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));
3724
3956
  }
3725
- e.setAttribute("data-center-play-shifted", ""), e.style.setProperty("--hp-center-play-shift-x", `${d}px`), e.style.setProperty("--hp-center-play-size", `${h}px`), e.style.setProperty("--hp-center-play-shift", `${c}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`);
3726
3958
  }
3727
3959
  /** Dar player'da dokunmatikte oynat/duraklat yerine kontrolleri göster/gizle (options.tapToPlay). */
3728
3960
  tapTogglesPlay(e) {
@@ -3791,9 +4023,9 @@ class Ge extends HTMLElement {
3791
4023
  if (this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = null, this.isChromeBlocked || this.showChrome(), this.audioStage)
3792
4024
  this.audioStage.update(i);
3793
4025
  else {
3794
- const { installAudioStage: o } = await import("./audio-LkYgd5Wq.js");
4026
+ const { installAudioStage: s } = await import("./audio-LkYgd5Wq.js");
3795
4027
  if (!this.audioMode) return;
3796
- this.audioStage ?? (this.audioStage = o(
4028
+ this.audioStage ?? (this.audioStage = s(
3797
4029
  {
3798
4030
  videoEl: this.videoEl,
3799
4031
  layerEl: this.root.querySelector(".media-layer"),
@@ -3815,7 +4047,7 @@ class Ge extends HTMLElement {
3815
4047
  if (!this.adsInstall) {
3816
4048
  const i = e.ads === !0 ? {} : e.ads;
3817
4049
  this.adsInstall = (async () => {
3818
- const { installAds: r } = await import("./ads-CdWbE9aD.js");
4050
+ const { installAds: r } = await import("./ads-C4tDPsUs.js");
3819
4051
  this.adsController = await r(
3820
4052
  {
3821
4053
  videoEl: this.videoEl,
@@ -3829,18 +4061,19 @@ class Ge extends HTMLElement {
3829
4061
  onAdPlayStateChange: () => this.controlBar.refreshAdPlayState(),
3830
4062
  locale: this.localeCode,
3831
4063
  prerollGate: this.prerollGate,
3832
- log: (o) => this.log.add({ source: "ads", ...o }),
3833
- onAdProgress: (o) => this.controlBar.setAdInfo(o),
4064
+ log: (s) => this.log.add({ source: "ads", ...s }),
4065
+ onAdProgress: (s) => this.controlBar.setAdInfo(s),
3834
4066
  // Sürekli oynatma (vconp): playlist / story bir sonraki içeriği kendiliğinden başlatıyorsa.
3835
4067
  isContinuousPlayback: () => {
3836
- const o = this._options, a = (l) => !!l && l.autoplayNext !== !1;
3837
- 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);
3838
4070
  },
3839
4071
  audioPoster: (() => {
3840
4072
  if (!e.audio) return;
3841
- const o = e.audio === !0 ? {} : e.audio;
3842
- 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;
3843
4075
  })(),
4076
+ transformTag: (s, a) => this.adTagTransform(s, a),
3844
4077
  surface: {
3845
4078
  videoEl: this.videoEl,
3846
4079
  containerEl: this.videoArea,
@@ -3872,23 +4105,23 @@ class Ge extends HTMLElement {
3872
4105
  }
3873
4106
  }
3874
4107
  /** Paket sürümü (ör. "1.0.4"). */
3875
- s(Ge, "version", G);
3876
- const ni = 1;
3877
- typeof window < "u" && !customElements.get("hope-player") && customElements.define("hope-player", Ge);
4108
+ o(Ue, "version", G);
4109
+ const di = 1;
4110
+ typeof window < "u" && !customElements.get("hope-player") && customElements.define("hope-player", Ue);
3878
4111
  export {
3879
4112
  G as H,
3880
- Ze as L,
3881
- ni as P,
3882
- Ge as a,
4113
+ rt as L,
4114
+ di as P,
4115
+ Ue as a,
3883
4116
  M as c,
3884
- ai as d,
4117
+ ci as d,
3885
4118
  P as f,
3886
- $ as g,
3887
- Z as i,
3888
- Kt as m,
3889
- qt as r,
3890
- N as s,
3891
- Y as t,
3892
- _ as v
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
3893
4126
  };
3894
- //# sourceMappingURL=player-D7WQxMzr.js.map
4127
+ //# sourceMappingURL=player-DV4Hf5Cw.js.map