@hopeplayer/core 1.0.15 → 1.0.16

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 (69) hide show
  1. package/dist/HopePlayerElement.d.ts +36 -0
  2. package/dist/HopePlayerElement.d.ts.map +1 -1
  3. package/dist/chunks/{index-BvoB2O1p.js → index-BXSND_xN.js} +2 -2
  4. package/dist/chunks/{index-BvoB2O1p.js.map → index-BXSND_xN.js.map} +1 -1
  5. package/dist/chunks/index-BbRYOSvk.js +261 -0
  6. package/dist/chunks/index-BbRYOSvk.js.map +1 -0
  7. package/dist/chunks/{index-ClQg_X1N.js → index-C3BQGcT3.js} +2 -2
  8. package/dist/chunks/{index-ClQg_X1N.js.map → index-C3BQGcT3.js.map} +1 -1
  9. package/dist/chunks/{index-BOoNcKeR.js → index-CBX7bn-G.js} +2 -2
  10. package/dist/chunks/{index-BOoNcKeR.js.map → index-CBX7bn-G.js.map} +1 -1
  11. package/dist/chunks/{index-CaMVTgh0.js → index-CDPrkLq0.js} +55 -68
  12. package/dist/chunks/index-CDPrkLq0.js.map +1 -0
  13. package/dist/chunks/index-CWLyz1fp.js +415 -0
  14. package/dist/chunks/index-CWLyz1fp.js.map +1 -0
  15. package/dist/chunks/{index-D5P-LWbg.js → index-Ch3ep-eJ.js} +20 -20
  16. package/dist/chunks/index-Ch3ep-eJ.js.map +1 -0
  17. package/dist/chunks/{index-DpUZXNJS.js → index-D3Z7ZDLJ.js} +2 -2
  18. package/dist/chunks/{index-DpUZXNJS.js.map → index-D3Z7ZDLJ.js.map} +1 -1
  19. package/dist/chunks/{index-w7pACyTw.js → index-DEv3YqLg.js} +1152 -845
  20. package/dist/chunks/index-DEv3YqLg.js.map +1 -0
  21. package/dist/chunks/{index-BCMVXNL0.js → index-DITXYcHx.js} +68 -96
  22. package/dist/chunks/index-DITXYcHx.js.map +1 -0
  23. package/dist/chunks/index-Miba3PD_.js +387 -0
  24. package/dist/chunks/index-Miba3PD_.js.map +1 -0
  25. package/dist/chunks/{index-DRlQC-ev.js → index-e00_M05B.js} +2 -2
  26. package/dist/chunks/{index-DRlQC-ev.js.map → index-e00_M05B.js.map} +1 -1
  27. package/dist/chunks/loadGpt-CmiAy366.js +18 -0
  28. package/dist/chunks/loadGpt-CmiAy366.js.map +1 -0
  29. package/dist/hls/SourceManager.d.ts +8 -0
  30. package/dist/hls/SourceManager.d.ts.map +1 -1
  31. package/dist/hls/sourceGroups.d.ts +19 -0
  32. package/dist/hls/sourceGroups.d.ts.map +1 -0
  33. package/dist/hope-player.js +1 -1
  34. package/dist/i18n/locales/en.d.ts.map +1 -1
  35. package/dist/i18n/locales/tr.d.ts.map +1 -1
  36. package/dist/i18n/types.d.ts +9 -0
  37. package/dist/i18n/types.d.ts.map +1 -1
  38. package/dist/index.d.ts +1 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/plugins/ad-triggers/AdTriggers.d.ts +99 -0
  41. package/dist/plugins/ad-triggers/AdTriggers.d.ts.map +1 -0
  42. package/dist/plugins/ad-triggers/index.d.ts +7 -0
  43. package/dist/plugins/ad-triggers/index.d.ts.map +1 -0
  44. package/dist/plugins/ads/AdsController.d.ts +8 -0
  45. package/dist/plugins/ads/AdsController.d.ts.map +1 -1
  46. package/dist/plugins/cast/CastController.d.ts +107 -0
  47. package/dist/plugins/cast/CastController.d.ts.map +1 -0
  48. package/dist/plugins/cast/RemoteMediaProxy.d.ts +41 -0
  49. package/dist/plugins/cast/RemoteMediaProxy.d.ts.map +1 -0
  50. package/dist/plugins/cast/castSdk.d.ts +160 -0
  51. package/dist/plugins/cast/castSdk.d.ts.map +1 -0
  52. package/dist/plugins/cast/index.d.ts +7 -0
  53. package/dist/plugins/cast/index.d.ts.map +1 -0
  54. package/dist/plugins/pause-ad/loadGpt.d.ts +2 -0
  55. package/dist/plugins/pause-ad/loadGpt.d.ts.map +1 -1
  56. package/dist/plugins/rewarded/RewardedUnlock.d.ts +2 -0
  57. package/dist/plugins/rewarded/RewardedUnlock.d.ts.map +1 -1
  58. package/dist/plugins/rewarded/gpt.d.ts +6 -2
  59. package/dist/plugins/rewarded/gpt.d.ts.map +1 -1
  60. package/dist/plugins/sponsorship/SponsorshipLayer.d.ts.map +1 -1
  61. package/dist/types/index.d.ts +262 -3
  62. package/dist/types/index.d.ts.map +1 -1
  63. package/package.json +1 -1
  64. package/dist/chunks/index-BCMVXNL0.js.map +0 -1
  65. package/dist/chunks/index-CaMVTgh0.js.map +0 -1
  66. package/dist/chunks/index-D5P-LWbg.js.map +0 -1
  67. package/dist/chunks/index-TkG8IO6q.js +0 -239
  68. package/dist/chunks/index-TkG8IO6q.js.map +0 -1
  69. package/dist/chunks/index-w7pACyTw.js.map +0 -1
@@ -1,7 +1,7 @@
1
- var we = Object.defineProperty;
2
- var Ee = (n, t, e) => t in n ? we(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
- var s = (n, t, e) => Ee(n, typeof t != "symbol" ? t + "" : t, e);
4
- const Ce = '/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial}}}@layer theme{:root,:host{--hp-font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--hp-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--hp-color-black:#000;--hp-color-white:#fff;--hp-spacing:.25rem;--hp-container-xs:20rem;--hp-text-xs:.75rem;--hp-text-xs--line-height:calc(1 / .75);--hp-text-sm:.875rem;--hp-text-sm--line-height:calc(1.25 / .875);--hp-text-base:1rem;--hp-text-base--line-height: 1.5 ;--hp-text-lg:1.125rem;--hp-text-lg--line-height:calc(1.75 / 1.125);--hp-text-xl:1.25rem;--hp-text-xl--line-height:calc(1.75 / 1.25);--hp-text-2xl:1.5rem;--hp-text-2xl--line-height:calc(2 / 1.5);--hp-font-weight-medium:500;--hp-font-weight-semibold:600;--hp-radius-lg:.5rem;--hp-animate-spin:spin 1s linear infinite;--hp-aspect-video:16 / 9;--hp-default-transition-duration:.15s;--hp-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--hp-default-font-family:var(--hp-font-sans);--hp-default-mono-font-family:var(--hp-font-mono);--hp-color-accent:#fff;--hp-color-on-accent:#0a0a0a;--hp-color-surface:#0a0a0a;--hp-color-surface-elev:#1a1a1a;--hp-color-on-surface:#fff;--hp-color-on-surface-muted:#a3a3a3}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--hp-default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--hp-default-font-feature-settings,normal);font-variation-settings:var(--hp-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--hp-default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--hp-default-mono-font-feature-settings,normal);font-variation-settings:var(--hp-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.hp\\:pointer-events-auto{pointer-events:auto}.hp\\:pointer-events-none{pointer-events:none}.hp\\:absolute{position:absolute}.hp\\:relative{position:relative}.hp\\:sticky{position:sticky}.hp\\:inset-0{top:0;right:0;bottom:0;left:0}.hp\\:inset-x-0{inset-inline:0}.hp\\:inset-y-0{inset-block:0}.hp\\:top-0{top:0}.hp\\:top-1{top:var(--hp-spacing)}.hp\\:top-1\\/2{top:50%}.hp\\:right-0{right:0}.hp\\:right-1{right:var(--hp-spacing)}.hp\\:right-2{right:calc(var(--hp-spacing) * 2)}.hp\\:bottom-0{bottom:0}.hp\\:bottom-full{bottom:100%}.hp\\:left-1\\/2{left:50%}.hp\\:z-10{z-index:10}.hp\\:z-20{z-index:20}.hp\\:z-30{z-index:30}.hp\\:z-40{z-index:40}.hp\\:m-0{margin:0}.hp\\:my-1{margin-block:var(--hp-spacing)}.hp\\:mt-0\\.5{margin-top:calc(var(--hp-spacing) * .5)}.hp\\:mt-1{margin-top:var(--hp-spacing)}.hp\\:mt-2{margin-top:calc(var(--hp-spacing) * 2)}.hp\\:mt-8{margin-top:calc(var(--hp-spacing) * 8)}.hp\\:mb-1{margin-bottom:var(--hp-spacing)}.hp\\:mb-2{margin-bottom:calc(var(--hp-spacing) * 2)}.hp\\:mb-16{margin-bottom:calc(var(--hp-spacing) * 16)}.hp\\:ml-1{margin-left:var(--hp-spacing)}.hp\\:block{display:block}.hp\\:flex{display:flex}.hp\\:grid{display:grid}.hp\\:hidden{display:none}.hp\\:inline-block{display:inline-block}.hp\\:aspect-\\[9\\/16\\]{aspect-ratio:9/16}.hp\\:aspect-video{aspect-ratio:var(--hp-aspect-video)}.hp\\:h-0\\.5{height:calc(var(--hp-spacing) * .5)}.hp\\:h-1{height:var(--hp-spacing)}.hp\\:h-1\\/3{height:33.3333%}.hp\\:h-3{height:calc(var(--hp-spacing) * 3)}.hp\\:h-6{height:calc(var(--hp-spacing) * 6)}.hp\\:h-7{height:calc(var(--hp-spacing) * 7)}.hp\\:h-8{height:calc(var(--hp-spacing) * 8)}.hp\\:h-9{height:calc(var(--hp-spacing) * 9)}.hp\\:h-10{height:calc(var(--hp-spacing) * 10)}.hp\\:h-16{height:calc(var(--hp-spacing) * 16)}.hp\\:h-20{height:calc(var(--hp-spacing) * 20)}.hp\\:h-\\[var\\(--hp-ctrl-btn-size\\)\\]{height:var(--hp-ctrl-btn-size)}.hp\\:h-\\[var\\(--hp-seek-hit-h\\)\\]{height:var(--hp-seek-hit-h)}.hp\\:h-\\[var\\(--hp-seek-track-h\\)\\]{height:var(--hp-seek-track-h)}.hp\\:h-full{height:100%}.hp\\:max-h-64{max-height:calc(var(--hp-spacing) * 64)}.hp\\:max-h-80{max-height:calc(var(--hp-spacing) * 80)}.hp\\:w-0{width:0}.hp\\:w-0\\.5{width:calc(var(--hp-spacing) * .5)}.hp\\:w-1{width:var(--hp-spacing)}.hp\\:w-1\\.5{width:calc(var(--hp-spacing) * 1.5)}.hp\\:w-3{width:calc(var(--hp-spacing) * 3)}.hp\\:w-6{width:calc(var(--hp-spacing) * 6)}.hp\\:w-7{width:calc(var(--hp-spacing) * 7)}.hp\\:w-8{width:calc(var(--hp-spacing) * 8)}.hp\\:w-9{width:calc(var(--hp-spacing) * 9)}.hp\\:w-10{width:calc(var(--hp-spacing) * 10)}.hp\\:w-14{width:calc(var(--hp-spacing) * 14)}.hp\\:w-16{width:calc(var(--hp-spacing) * 16)}.hp\\:w-48{width:calc(var(--hp-spacing) * 48)}.hp\\:w-72{width:calc(var(--hp-spacing) * 72)}.hp\\:w-\\[var\\(--hp-ctrl-btn-size\\)\\]{width:var(--hp-ctrl-btn-size)}.hp\\:w-full{width:100%}.hp\\:max-w-\\[50\\%\\]{max-width:50%}.hp\\:max-w-\\[80\\%\\]{max-width:80%}.hp\\:max-w-\\[85\\%\\]{max-width:85%}.hp\\:max-w-full{max-width:100%}.hp\\:max-w-xs{max-width:var(--hp-container-xs)}.hp\\:min-w-0{min-width:0}.hp\\:flex-1{flex:1}.hp\\:flex-shrink-0,.hp\\:shrink-0{flex-shrink:0}.hp\\:animate-spin{animation:var(--hp-animate-spin)}.hp\\:cursor-pointer{cursor:pointer}.hp\\:touch-none{touch-action:none}.hp\\:list-none{list-style-type:none}.hp\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.hp\\:flex-col{flex-direction:column}.hp\\:flex-wrap{flex-wrap:wrap}.hp\\:items-center{align-items:center}.hp\\:items-end{align-items:flex-end}.hp\\:justify-between{justify-content:space-between}.hp\\:justify-center{justify-content:center}.hp\\:gap-0\\.5{gap:calc(var(--hp-spacing) * .5)}.hp\\:gap-1{gap:var(--hp-spacing)}.hp\\:gap-1\\.5{gap:calc(var(--hp-spacing) * 1.5)}.hp\\:gap-2{gap:calc(var(--hp-spacing) * 2)}.hp\\:gap-3{gap:calc(var(--hp-spacing) * 3)}.hp\\:self-end{align-self:flex-end}.hp\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.hp\\:overflow-hidden{overflow:hidden}.hp\\:overflow-y-auto{overflow-y:auto}.hp\\:rounded{border-radius:.25rem}.hp\\:rounded-full{border-radius:3.40282e38px}.hp\\:rounded-lg{border-radius:var(--hp-radius-lg)}.hp\\:border{border-style:var(--tw-border-style);border-width:1px}.hp\\:border-0{border-style:var(--tw-border-style);border-width:0}.hp\\:border-2{border-style:var(--tw-border-style);border-width:2px}.hp\\:border-\\[3px\\]{border-style:var(--tw-border-style);border-width:3px}.hp\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.hp\\:border-on-surface\\/10{border-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:border-on-surface\\/10{border-color:color-mix(in oklab,var(--hp-color-on-surface) 10%,transparent)}}.hp\\:border-on-surface\\/20{border-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:border-on-surface\\/20{border-color:color-mix(in oklab,var(--hp-color-on-surface) 20%,transparent)}}.hp\\:border-on-surface\\/30{border-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:border-on-surface\\/30{border-color:color-mix(in oklab,var(--hp-color-on-surface) 30%,transparent)}}.hp\\:border-t-accent{border-top-color:var(--hp-color-accent)}.hp\\:bg-accent,.hp\\:bg-accent\\/15{background-color:var(--hp-color-accent)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-accent\\/15{background-color:color-mix(in oklab,var(--hp-color-accent) 15%,transparent)}}.hp\\:bg-black,.hp\\:bg-black\\/30{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/30{background-color:color-mix(in oklab,var(--hp-color-black) 30%,transparent)}}.hp\\:bg-black\\/40{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/40{background-color:color-mix(in oklab,var(--hp-color-black) 40%,transparent)}}.hp\\:bg-black\\/60{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/60{background-color:color-mix(in oklab,var(--hp-color-black) 60%,transparent)}}.hp\\:bg-black\\/70{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/70{background-color:color-mix(in oklab,var(--hp-color-black) 70%,transparent)}}.hp\\:bg-black\\/85{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/85{background-color:color-mix(in oklab,var(--hp-color-black) 85%,transparent)}}.hp\\:bg-on-surface,.hp\\:bg-on-surface\\/20{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-on-surface\\/20{background-color:color-mix(in oklab,var(--hp-color-on-surface) 20%,transparent)}}.hp\\:bg-on-surface\\/25{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-on-surface\\/25{background-color:color-mix(in oklab,var(--hp-color-on-surface) 25%,transparent)}}.hp\\:bg-on-surface\\/40{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-on-surface\\/40{background-color:color-mix(in oklab,var(--hp-color-on-surface) 40%,transparent)}}.hp\\:bg-surface{background-color:var(--hp-color-surface)}.hp\\:bg-surface-elev{background-color:var(--hp-color-surface-elev)}.hp\\:bg-transparent{background-color:#0000}.hp\\:bg-white,.hp\\:bg-white\\/15{background-color:var(--hp-color-white)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-white\\/15{background-color:color-mix(in oklab,var(--hp-color-white) 15%,transparent)}}.hp\\:bg-white\\/30{background-color:var(--hp-color-white)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-white\\/30{background-color:color-mix(in oklab,var(--hp-color-white) 30%,transparent)}}.hp\\:bg-white\\/40{background-color:var(--hp-color-white)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-white\\/40{background-color:color-mix(in oklab,var(--hp-color-white) 40%,transparent)}}.hp\\:bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.hp\\:from-black\\/80{--tw-gradient-from:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:from-black\\/80{--tw-gradient-from:color-mix(in oklab, var(--hp-color-black) 80%, transparent)}}.hp\\:from-black\\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hp\\:to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hp\\:bg-cover{background-size:cover}.hp\\:bg-center{background-position:50%}.hp\\:object-cover{object-fit:cover}.hp\\:p-0{padding:0}.hp\\:p-1\\.5{padding:calc(var(--hp-spacing) * 1.5)}.hp\\:p-2{padding:calc(var(--hp-spacing) * 2)}.hp\\:p-3{padding:calc(var(--hp-spacing) * 3)}.hp\\:p-4{padding:calc(var(--hp-spacing) * 4)}.hp\\:px-1{padding-inline:var(--hp-spacing)}.hp\\:px-1\\.5{padding-inline:calc(var(--hp-spacing) * 1.5)}.hp\\:px-2{padding-inline:calc(var(--hp-spacing) * 2)}.hp\\:px-3{padding-inline:calc(var(--hp-spacing) * 3)}.hp\\:px-4{padding-inline:calc(var(--hp-spacing) * 4)}.hp\\:py-1{padding-block:var(--hp-spacing)}.hp\\:py-1\\.5{padding-block:calc(var(--hp-spacing) * 1.5)}.hp\\:py-2{padding-block:calc(var(--hp-spacing) * 2)}.hp\\:pt-6{padding-top:calc(var(--hp-spacing) * 6)}.hp\\:pb-2{padding-bottom:calc(var(--hp-spacing) * 2)}.hp\\:text-center{text-align:center}.hp\\:text-left{text-align:left}.hp\\:font-mono{font-family:var(--hp-font-mono)}.hp\\:text-2xl{font-size:var(--hp-text-2xl);line-height:var(--tw-leading,var(--hp-text-2xl--line-height))}.hp\\:text-base{font-size:var(--hp-text-base);line-height:var(--tw-leading,var(--hp-text-base--line-height))}.hp\\:text-lg{font-size:var(--hp-text-lg);line-height:var(--tw-leading,var(--hp-text-lg--line-height))}.hp\\:text-sm{font-size:var(--hp-text-sm);line-height:var(--tw-leading,var(--hp-text-sm--line-height))}.hp\\:text-xl{font-size:var(--hp-text-xl);line-height:var(--tw-leading,var(--hp-text-xl--line-height))}.hp\\:text-xs{font-size:var(--hp-text-xs);line-height:var(--tw-leading,var(--hp-text-xs--line-height))}.hp\\:text-\\[length\\:var\\(--hp-ctrl-icon-size\\)\\]{font-size:var(--hp-ctrl-icon-size)}.hp\\:leading-none{--tw-leading:1;line-height:1}.hp\\:font-medium{--tw-font-weight:var(--hp-font-weight-medium);font-weight:var(--hp-font-weight-medium)}.hp\\:font-semibold{--tw-font-weight:var(--hp-font-weight-semibold);font-weight:var(--hp-font-weight-semibold)}.hp\\:whitespace-nowrap{white-space:nowrap}.hp\\:text-accent{color:var(--hp-color-accent)}.hp\\:text-on-accent{color:var(--hp-color-on-accent)}.hp\\:text-on-surface{color:var(--hp-color-on-surface)}.hp\\:text-on-surface-muted{color:var(--hp-color-on-surface-muted)}.hp\\:text-white{color:var(--hp-color-white)}.hp\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.hp\\:no-underline{text-decoration-line:none}.hp\\:underline{text-decoration-line:underline}.hp\\:opacity-0{opacity:0}.hp\\:opacity-60{opacity:.6}.hp\\:opacity-70{opacity:.7}.hp\\:opacity-80{opacity:.8}.hp\\:opacity-90{opacity:.9}.hp\\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hp\\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hp\\:drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.hp\\:transition-\\[height\\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--hp-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hp-default-transition-duration))}.hp\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--hp-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hp-default-transition-duration))}.hp\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hp-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hp-default-transition-duration))}.hp\\:duration-100{--tw-duration:.1s;transition-duration:.1s}.hp\\:duration-150{--tw-duration:.15s;transition-duration:.15s}.hp\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.hp\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.hp\\:will-change-\\[opacity\\]{will-change:opacity}.hp\\:select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.hp\\:group-hover\\:h-\\[var\\(--hp-seek-track-h-hover\\)\\]:is(:where(.hp\\:group):hover *){height:var(--hp-seek-track-h-hover)}.hp\\:hover\\:bg-on-surface\\/5:hover{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:hover\\:bg-on-surface\\/5:hover{background-color:color-mix(in oklab,var(--hp-color-on-surface) 5%,transparent)}}.hp\\:hover\\:bg-on-surface\\/10:hover{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:hover\\:bg-on-surface\\/10:hover{background-color:color-mix(in oklab,var(--hp-color-on-surface) 10%,transparent)}}.hp\\:hover\\:opacity-80:hover{opacity:.8}}.hp\\:focus-visible\\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hp\\:focus-visible\\:ring-accent:focus-visible{--tw-ring-color:var(--hp-color-accent)}.hp\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.hp\\:data-\\[active\\=true\\]\\:bg-accent\\/15[data-active=true]{background-color:var(--hp-color-accent)}@supports (color:color-mix(in lab,red,red)){.hp\\:data-\\[active\\=true\\]\\:bg-accent\\/15[data-active=true]{background-color:color-mix(in oklab,var(--hp-color-accent) 15%,transparent)}}.hp\\:data-\\[active\\=true\\]\\:text-on-surface[data-active=true]{color:var(--hp-color-on-surface)}}.hp-icon{font-variant:normal;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:hope-icons;font-style:normal;font-weight:400;line-height:1}.hp-icon-check:before{content:""}.hp-icon-chevron-left:before{content:""}.hp-icon-close:before{content:""}.hp-icon-fullscreen-enter:before{content:""}.hp-icon-fullscreen-exit:before{content:""}.hp-icon-grid:before{content:""}.hp-icon-loop:before{content:""}.hp-icon-pause:before{content:""}.hp-icon-pip:before{content:""}.hp-icon-play:before{content:""}.hp-icon-settings:before{content:""}.hp-icon-skip-back:before{content:""}.hp-icon-skip-forward:before{content:""}.hp-icon-volume-high:before{content:""}.hp-icon-volume-low:before{content:""}.hp-icon-volume-muted:before{content:""}.hp-icon-warning:before{content:""}:host{--hp-radius:8px;--hp-chip-bg:#ffffff14;--hp-chip-bg-hover:#ffffff2e;--hp-chip-bg-active:#ffffff42;--hp-chip-border:#ffffff29;--hp-chip-border-hover:#ffffff4d;--hp-chip-blur:14px;--hp-chip-shadow:0 4px 18px #00000047, inset 0 1px 0 #ffffff12;--hp-chip-radius:10px;--hp-chip-text:var(--hp-color-on-surface,#fff);--hp-chrome-scrim:linear-gradient(to top, #00000080 0%, #0000003d 50%, #0000 100%);--hp-chrome-scrim-height:min(150px, 45%);--hp-chip-backdrop-brightness:.78;--hp-ctrl-shadow:drop-shadow(0 1px 1.5px #0000008c);--hp-panel-bg:#ffffffb8;--hp-panel-blur:26px;--hp-panel-border:#0f11171a;--hp-panel-text:#15171c;--hp-panel-text-muted:#5b6270;--hp-panel-text-shadow:none;--hp-ctrl-btn-size:32px;--hp-ctrl-icon-size:16px;--hp-seek-hit-h:16px;--hp-seek-track-h:4px;--hp-seek-track-h-hover:6px;--hp-seek-thumb-size:12px;--hp-tooltip-bg:#ffffffe6;--hp-tooltip-text:#15171c;--hp-tooltip-key-bg:#0f11171a;--hp-tooltip-key-text:#15171c;--hp-caption-font-size:16px;--hp-caption-bg:#000000bf;--hp-caption-text:#fff;--hp-caption-radius:4px;background:var(--hp-color-surface,#0a0a0a);width:100%;color:var(--hp-color-on-surface,#fff);border-radius:var(--hp-radius);font-family:system-ui,-apple-system,sans-serif;line-height:1;display:block}.hp-chip{background:var(--hp-chip-bg);border:1px solid var(--hp-chip-border);border-radius:var(--hp-chip-radius);-webkit-backdrop-filter:blur(var(--hp-chip-blur)) saturate(160%);box-shadow:var(--hp-chip-shadow);color:var(--hp-chip-text);transition:background-color .16s,border-color .16s,box-shadow .16s,transform .12s}.hp-chip:hover{background:var(--hp-chip-bg-hover);border-color:var(--hp-chip-border-hover)}button.hp-chip:active{background:var(--hp-chip-bg-active);transform:scale(.94)}.hp-chip:focus-visible{outline:2px solid var(--hp-color-accent,#fff);outline-offset:2px}.hp-chip-panel,.hp-chip-panel:hover{background:var(--hp-panel-bg);border-color:var(--hp-panel-border);-webkit-backdrop-filter:blur(var(--hp-panel-blur)) saturate(160%);text-shadow:var(--hp-panel-text-shadow,none)}.hp-chip-panel{--hp-color-on-surface:var(--hp-panel-text);--hp-color-on-surface-muted:var(--hp-panel-text-muted);color:var(--hp-panel-text)}.hp-tooltip{background:var(--hp-tooltip-bg);color:var(--hp-tooltip-text);border-radius:calc(var(--hp-radius) * .75);-webkit-backdrop-filter:blur(12px)saturate(160%);font-weight:500;box-shadow:0 4px 14px #00000059}.hp-tooltip-key{background:var(--hp-tooltip-key-bg);min-width:16px;height:16px;color:var(--hp-tooltip-key-text);text-transform:uppercase;border-radius:4px;justify-content:center;align-items:center;padding:0 4px;font-size:10px;font-weight:700;line-height:16px;display:inline-flex}.hp-group{background:var(--hp-chip-bg);border:1px solid var(--hp-chip-border);-webkit-backdrop-filter:blur(var(--hp-chip-blur)) saturate(160%) brightness(var(--hp-chip-backdrop-brightness,1));box-shadow:var(--hp-chip-shadow);border-radius:9999px}.hp-group-left{position:relative}.hp-loading-ring{border-radius:inherit;pointer-events:none;opacity:0;filter:drop-shadow(0 0 3px var(--hp-color-accent,#fff));transition:opacity .22s;position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px}@supports (color:color-mix(in lab,red,red)){.hp-loading-ring{filter:drop-shadow(0 0 3px color-mix(in srgb,var(--hp-color-accent,#fff) 70%,transparent))}}.hp-loading-ring-mask{border-radius:inherit;-webkit-mask-composite:xor;padding:2px;position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor,source-over;mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0)}.hp-loading-ring-mask>span{aspect-ratio:1;background:conic-gradient(from 0deg,transparent 0deg 150deg,var(--hp-color-accent,#fff) 260deg,var(--hp-color-accent,#fff) 340deg,transparent 360deg);width:max(100%,160px);position:absolute;top:50%;left:50%;translate:-50% -50%}@supports (color:color-mix(in lab,red,red)){.hp-loading-ring-mask>span{background:conic-gradient(from 0deg,transparent 0deg 150deg,color-mix(in srgb,var(--hp-color-accent,#fff) 30%,transparent) 260deg,var(--hp-color-accent,#fff) 340deg,transparent 360deg)}}.hp-loading-ring-mask>span{animation:1.1s linear infinite paused hp-loading-ring-spin}.hp-group-left[data-loading]>.hp-loading-ring{opacity:1}.hp-group-left[data-loading]>.hp-loading-ring .hp-loading-ring-mask>span{animation-play-state:running}@keyframes hp-loading-ring-spin{to{rotate:360deg}}@media(prefers-reduced-motion:reduce){.hp-loading-ring-mask>span{background:var(--hp-color-accent,#fff);animation:none}.hp-group-left[data-loading]>.hp-loading-ring{animation:1.6s ease-in-out infinite hp-loading-ring-pulse}}@keyframes hp-loading-ring-pulse{50%{opacity:.35}}.hp-center-play>.hp-chip{-webkit-backdrop-filter:blur(var(--hp-chip-blur)) saturate(160%) brightness(var(--hp-chip-backdrop-brightness,1))}.hp-group .hp-icon,.hp-group [part=time-display],.hp-group .hp-live-badge,.hp-group [part=live-clock],.hp-group .hp-skip-num,.hp-center-play .hp-icon{filter:var(--hp-ctrl-shadow,none)}.hp-chrome:before{content:"";height:var(--hp-chrome-scrim-height);background:var(--hp-chrome-scrim);pointer-events:none;position:absolute;bottom:0;left:0;right:0}.video-area[data-compact]>.hp-chrome:after{content:"";background:var(--hp-chrome-scrim);opacity:.7;pointer-events:none;height:min(90px,30%);position:absolute;top:0;left:0;right:0;transform:scaleY(-1)}.hp-group button.hp-chip{box-shadow:none;-webkit-backdrop-filter:none;background:0 0;border-color:#0000}.hp-group button.hp-chip:hover{background:var(--hp-chip-bg-hover)}.hp-group button.hp-chip:active{background:var(--hp-chip-bg-active)}:host([data-theme=glass-dark]),:host([data-theme=neo-dark]),:host([data-theme=mono]){--hp-panel-bg:#0a0a0e8c;--hp-panel-border:#ffffff1a;--hp-panel-text:#fff;--hp-panel-text-muted:#a3a3a3;--hp-panel-text-shadow:0 1px 3px #000000a6;--hp-tooltip-bg:#0a0a0aeb;--hp-tooltip-text:#fff;--hp-tooltip-key-bg:#ffffff2e;--hp-tooltip-key-text:#fff}:host([data-theme=glass-dark]){--hp-chip-bg:#0a0a0e73;--hp-chip-bg-hover:#0a0a0e9e;--hp-chip-bg-active:#0a0a0ebf;--hp-chip-border:#ffffff14;--hp-chip-border-hover:#ffffff29;--hp-chip-shadow:0 4px 18px #0006, inset 0 1px 0 #ffffff0a;--hp-panel-bg:#08080cb8;--hp-chip-backdrop-brightness:1}:host([data-theme=neo-dark]){--hp-chip-bg:#24242a;--hp-chip-bg-hover:#2a2a31;--hp-chip-bg-active:#1e1e23;--hp-chip-border:transparent;--hp-chip-border-hover:transparent;--hp-chip-blur:0px;--hp-chip-shadow:5px 5px 10px #00000080, -4px -4px 9px #ffffff09;--hp-chip-radius:12px;--hp-color-surface:#1b1b20;--hp-panel-bg:#1e1e23;--hp-panel-text-shadow:none;--hp-chrome-scrim:none;--hp-chip-backdrop-brightness:1;--hp-ctrl-shadow:none}:host([data-theme=neo-dark]) button.hp-chip:active{box-shadow:inset 3px 3px 6px #00000080,inset -2px -2px 5px #ffffff08}:host([data-theme=mono]){--hp-chip-bg:#ffffff0a;--hp-chip-bg-hover:#ffffff1a;--hp-chip-border:#ffffff14;--hp-chip-border-hover:#ffffff24;--hp-chip-blur:0px;--hp-chip-shadow:none;--hp-panel-bg:#0a0a0aeb;--hp-panel-text-shadow:none}@media(pointer:coarse){:host{--hp-ctrl-btn-size:40px;--hp-ctrl-icon-size:18px;--hp-seek-hit-h:22px;--hp-seek-track-h:5px;--hp-seek-track-h-hover:7px;--hp-seek-thumb-size:14px;--hp-caption-font-size:19px}}:host(:fullscreen),:host(:-webkit-full-screen){--hp-ctrl-btn-size:44px;--hp-ctrl-icon-size:20px;--hp-seek-hit-h:26px;--hp-seek-track-h:6px;--hp-seek-track-h-hover:8px;--hp-seek-thumb-size:18px;--hp-caption-font-size:22px}:host(:fullscreen) [part=control-bar],:host(:-webkit-full-screen) [part=control-bar]{padding:28px 20px 18px}.video-area{width:100%;aspect-ratio:var(--hp-aspect-ratio,16 / 9);border-radius:var(--hp-radius);background:var(--hp-color-surface,#0a0a0a);position:relative;overflow:hidden}.video-area[data-compact]{--hp-caption-font-size:13px}.video-area[data-story]{aspect-ratio:9/16;max-width:49.5vh;max-height:88vh;margin:0 auto}:host(:fullscreen),:host(:-webkit-full-screen){background:#000;border-radius:0}:host(:fullscreen) .hp-root,:host(:-webkit-full-screen) .hp-root{height:100%}:host(:fullscreen) .video-area,:host(:-webkit-full-screen) .video-area{aspect-ratio:auto;background:#000;border-radius:0;width:100%;height:100%}:host(:fullscreen) .video-area[data-story],:host(:-webkit-full-screen) .video-area[data-story]{aspect-ratio:9/16;width:auto;max-width:100%;height:100%;max-height:none;margin:0 auto}.media-layer{position:absolute;top:0;right:0;bottom:0;left:0}.media-layer video{object-fit:contain;background:#000;width:100%;height:100%}.hp-center-x{transform:translate(-50%)}.hp-center-y{transform:translateY(-50%)}.hp-chip-panel[data-drop]{margin-top:8px;margin-bottom:0;top:100%;bottom:auto}.hp-top-bar{pointer-events:none;display:flex;position:absolute;top:8px;right:8px}.hp-top-bar>*{pointer-events:auto}.hp-story-list-btn{top:calc(8px + var(--hp-ctrl-btn-size) + 18px);right:12px}:host([data-cursor-hidden]),:host([data-cursor-hidden]) *{cursor:none!important}.hp-unmute-badge{z-index:25;background:var(--hp-tooltip-bg);color:var(--hp-tooltip-text);-webkit-backdrop-filter:blur(12px)saturate(160%);font:inherit;cursor:pointer;border:0;border-radius:9999px;align-items:center;gap:6px;padding:6px 12px 6px 10px;font-size:13px;font-weight:600;display:none;position:absolute;top:10px;left:10px;box-shadow:0 4px 14px #00000059}@media(hover:none)and (pointer:coarse){.hp-volume{display:none!important}.hp-unmute-badge[data-visible]{display:inline-flex}}.hp-error-screen{z-index:30;background:var(--hp-color-surface);justify-content:center;align-items:center;padding:12px;display:none;position:absolute;top:0;right:0;bottom:0;left:0}@supports (color:color-mix(in lab,red,red)){.hp-error-screen{background:color-mix(in srgb,var(--hp-color-surface) 94%,transparent)}}.hp-error-screen{-webkit-backdrop-filter:blur(16px)saturate(140%);color:var(--hp-color-on-surface);text-align:center;container-type:size}.hp-error-screen[data-visible]{animation:.22s hp-error-in;display:flex}@keyframes hp-error-in{0%{opacity:0}}.hp-error-card{flex-direction:column;align-items:center;gap:10px;max-width:340px;display:flex}.hp-error-icon{border:1px solid var(--hp-color-on-surface);border-radius:9999px;place-items:center;width:48px;height:48px;display:grid}@supports (color:color-mix(in lab,red,red)){.hp-error-icon{border:1px solid color-mix(in srgb,var(--hp-color-on-surface) 18%,transparent)}}.hp-error-icon{background:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-error-icon{background:color-mix(in srgb,var(--hp-color-on-surface) 8%,transparent)}}.hp-error-icon{margin-bottom:2px;font-size:22px}.hp-error-message{margin:0;font-size:14px;font-weight:600;line-height:1.45}.hp-error-code{color:var(--hp-color-on-surface-muted);font-variant-numeric:tabular-nums;margin:-4px 0 0;font-size:12px}.hp-error-retry{border:1px solid var(--hp-chip-border);background:var(--hp-chip-bg);color:var(--hp-color-on-surface);font:inherit;cursor:pointer;border-radius:9999px;align-items:center;gap:6px;margin-top:6px;padding:7px 14px 7px 12px;font-size:13px;font-weight:600;transition:background-color .15s,border-color .15s;display:inline-flex}.hp-error-retry:hover{background:var(--hp-chip-bg-hover);border-color:var(--hp-chip-border-hover)}.hp-error-retry:focus-visible{outline:2px solid var(--hp-color-accent);outline-offset:2px}@container (max-height:240px){.hp-error-card{gap:6px}.hp-error-icon{width:36px;height:36px;margin-bottom:0;font-size:16px}.hp-error-message{font-size:13px}.hp-error-code{margin-top:-2px;font-size:11px}.hp-error-retry{margin-top:2px;padding:5px 12px 5px 10px;font-size:12px}}.hp-context-menu,.hp-stats,.hp-debug{border:1px solid var(--hp-panel-border);background:var(--hp-panel-bg);-webkit-backdrop-filter:blur(var(--hp-panel-blur)) saturate(160%);color:var(--hp-panel-text);text-shadow:var(--hp-panel-text-shadow,none);border-radius:10px;position:absolute;box-shadow:0 8px 28px #00000059}.hp-context-menu{z-index:40;min-width:200px;padding:4px;font-size:13px;display:none}.hp-context-menu[data-open]{animation:.12s hp-context-menu-in;display:block}@keyframes hp-context-menu-in{0%{opacity:0;transform:scale(.97)}}.hp-context-menu-item{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:space-between;align-items:center;gap:16px;padding:8px 10px;display:flex}.hp-context-menu-item[data-info]{cursor:default;font-weight:600}button.hp-context-menu-item:hover,button.hp-context-menu-item:focus-visible{background:var(--hp-panel-text)}@supports (color:color-mix(in lab,red,red)){button.hp-context-menu-item:hover,button.hp-context-menu-item:focus-visible{background:color-mix(in srgb,var(--hp-panel-text) 10%,transparent)}}button.hp-context-menu-item:hover,button.hp-context-menu-item:focus-visible{outline:none}.hp-context-menu-item+.hp-context-menu-item{margin-top:2px}.hp-context-menu-meta{color:var(--hp-panel-text-muted);font-variant-numeric:tabular-nums;font-weight:500}.hp-stats{z-index:28;width:min(360px,100% - 20px);max-height:calc(100% - 20px);padding:8px 12px 10px;font-size:11.5px;top:10px;left:10px;overflow:auto}.hp-stats-header{justify-content:space-between;align-items:center;margin-bottom:6px;font-size:12px;font-weight:700;display:flex}.hp-stats-close{color:inherit;cursor:pointer;background:0 0;border:0;border-radius:9999px;padding:4px;display:inline-flex}.hp-stats-close:hover{background:var(--hp-panel-text)}@supports (color:color-mix(in lab,red,red)){.hp-stats-close:hover{background:color-mix(in srgb,var(--hp-panel-text) 12%,transparent)}}.hp-stats-body{grid-template-columns:auto 1fr;gap:3px 12px;margin:0;display:grid}.hp-stats-body dt{color:var(--hp-panel-text-muted);white-space:nowrap}.hp-stats-body dd{text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:hidden}.hp-seek-fb{z-index:8;border:1px solid var(--hp-chip-border);background:var(--hp-chip-bg);-webkit-backdrop-filter:blur(var(--hp-chip-blur)) saturate(160%);box-shadow:var(--hp-chip-shadow);color:var(--hp-chip-text);pointer-events:none;opacity:0;border-radius:9999px;align-items:center;gap:10px;padding:12px 20px 12px 16px;transition:opacity .18s,translate .22s cubic-bezier(.2,.8,.2,1);display:flex;position:absolute;top:50%}.hp-seek-fb[data-side=forward]{right:7%;translate:14px -50%}.hp-seek-fb[data-side=back]{flex-direction:row-reverse;padding:12px 16px 12px 20px;left:7%;translate:-14px -50%}.hp-seek-fb[data-visible]{opacity:1;translate:0 -50%}.hp-seek-fb-chevrons{display:flex}.hp-seek-fb-chevrons svg{fill:currentColor;opacity:.25;width:16px;height:16px;margin:0 -3px;animation:.9s ease-in-out infinite hp-seek-fb-chevron}.hp-seek-fb[data-side=back] .hp-seek-fb-chevrons{transform:scaleX(-1)}.hp-seek-fb-chevrons svg:nth-child(2){animation-delay:.15s}.hp-seek-fb-chevrons svg:nth-child(3){animation-delay:.3s}@keyframes hp-seek-fb-chevron{0%,to{opacity:.25}40%{opacity:1}}.hp-seek-fb-value{white-space:nowrap;align-items:baseline;gap:3px;display:flex}.hp-seek-fb-num{font-variant-numeric:tabular-nums;font-size:20px;font-weight:700;line-height:1;display:inline-block}.hp-seek-fb-unit{opacity:.75;font-size:12px;font-weight:600}.hp-seek-fb-bump{animation:.26s cubic-bezier(.2,.8,.2,1) hp-seek-fb-bump}@keyframes hp-seek-fb-bump{0%{transform:scale(1.25)}to{transform:scale(1)}}.video-area[data-compact] .hp-seek-fb{padding:8px 12px}.video-area[data-compact] .hp-seek-fb[data-side=forward]{right:4%}.video-area[data-compact] .hp-seek-fb[data-side=back]{padding:8px 12px;left:4%}.video-area[data-compact] .hp-seek-fb-chevrons{display:none}.video-area[data-compact] .hp-seek-fb-num{font-size:16px}.hp-sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}@media(prefers-reduced-motion:reduce){.hp-seek-fb,.hp-seek-fb-chevrons svg,.hp-seek-fb-bump{transition:none;animation:none}.hp-seek-fb-chevrons svg{opacity:.8}}.hp-skip-btn{position:relative}.hp-skip-btn>.hp-icon{font-size:calc(var(--hp-ctrl-icon-size) * 1.45)}.hp-skip-num{padding-top:calc(var(--hp-ctrl-icon-size) * .14);font-size:calc(var(--hp-ctrl-icon-size) * .56);letter-spacing:-.02em;font-variant-numeric:tabular-nums;pointer-events:none;justify-content:center;align-items:center;font-weight:700;line-height:1;display:flex;position:absolute;top:0;right:0;bottom:0;left:0}.hp-skip-num[data-long]{font-size:calc(var(--hp-ctrl-icon-size) * .42)}.hp-skip-btn:disabled{opacity:.4;cursor:default}.hp-center-play>.hp-chip{z-index:7;position:relative}.video-area[data-center-play-shifted] .hp-center-play>.hp-chip{width:var(--hp-center-play-size);height:var(--hp-center-play-size);translate:var(--hp-center-play-shift-x,0px) var(--hp-center-play-shift)}.video-area[data-pause-ad-ready]>:is(.media-layer,.hp-chrome,.hp-center-play,.hp-caption-layer,.hp-error-screen,.hp-mini-progress){right:var(--hp-pause-ad-w,0px);transition:right .38s cubic-bezier(.2,.8,.2,1),opacity .2s}.video-area[data-pause-ad] .media-layer video{object-fit:cover}.hp-pause-ad{z-index:25;width:var(--hp-pause-ad-panel-w,332px);box-sizing:border-box;background:var(--hp-color-surface,#0a0a0a);color:var(--hp-color-on-surface,#fff);visibility:hidden;flex-direction:column;justify-content:center;gap:10px;padding:12px 16px;transition:transform .38s cubic-bezier(.2,.8,.2,1),visibility 0s linear .38s;display:flex;position:absolute;top:0;bottom:0;right:0;transform:translate(100%)}.hp-pause-ad[data-open]{visibility:visible;transition:transform .38s cubic-bezier(.2,.8,.2,1);transform:none}.hp-pause-ad-header{justify-content:space-between;align-items:center;gap:8px;display:flex}.hp-pause-ad-label{color:var(--hp-color-on-surface-muted,#ffffffb3);font-size:13px;font-weight:600}.hp-pause-ad-close{width:28px;height:28px;color:var(--hp-color-on-surface,#fff);cursor:pointer;background:0 0;border:0;border-radius:9999px;justify-content:center;align-items:center;padding:0;transition:background-color .15s;display:inline-flex}.hp-pause-ad-close:hover{background:var(--hp-chip-bg-hover)}.hp-pause-ad-body{border-radius:8px;justify-content:center;display:flex;overflow:hidden}.hp-pause-ad-resume{border:1px solid var(--hp-chip-border);background:var(--hp-chip-bg);color:var(--hp-color-on-surface,#fff);font:inherit;cursor:pointer;border-radius:9999px;align-self:stretch;padding:9px 14px;font-size:13px;font-weight:600;transition:background-color .15s,border-color .15s}.hp-pause-ad-resume:hover{background:var(--hp-chip-bg-hover);border-color:var(--hp-chip-border-hover)}.hp-pause-ad-close:focus-visible,.hp-pause-ad-resume:focus-visible{outline:2px solid var(--hp-color-accent);outline-offset:2px}@media(prefers-reduced-motion:reduce){.video-area[data-pause-ad-ready]>:is(.media-layer,.hp-chrome,.hp-center-play,.hp-caption-layer,.hp-error-screen,.hp-mini-progress),.hp-pause-ad,.hp-pause-ad[data-open]{transition:none}}.hp-seek-thumb{width:var(--hp-seek-thumb-size);height:var(--hp-seek-thumb-size);background:var(--hp-color-accent);will-change:translate,scale;pointer-events:none;z-index:2;border-radius:9999px;transition:scale .15s;position:absolute;left:0;scale:.5}.hp-seekbar:hover .hp-seek-thumb,.hp-seekbar:active .hp-seek-thumb,.hp-seekbar:focus-visible .hp-seek-thumb{scale:1}.hp-seekbar[data-no-duration] .hp-seek-thumb{display:none}.hp-seek-hover-dot{width:var(--hp-seek-track-h-hover);height:var(--hp-seek-track-h-hover);background:var(--hp-color-on-surface);opacity:0;pointer-events:none;z-index:1;border-radius:9999px;transition:opacity .12s;position:absolute;top:50%;left:0;box-shadow:0 0 0 1px #00000073}.hp-seek-hover-dot[data-visible]{opacity:.9}.hp-mini-progress{z-index:6;pointer-events:none;background:var(--hp-color-on-surface);height:1px;position:absolute;bottom:0;left:0;right:0}@supports (color:color-mix(in lab,red,red)){.hp-mini-progress{background:color-mix(in srgb,var(--hp-color-on-surface) 25%,transparent)}}.hp-mini-progress{opacity:0;transition:opacity .2s}.hp-mini-progress[data-visible]:not([data-disabled]){opacity:1}.hp-mini-progress-fill{transform-origin:0;will-change:transform;position:absolute;top:0;right:0;bottom:0;left:0;transform:scaleX(0)}.hp-mini-progress-buffered{background:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-mini-progress-buffered{background:color-mix(in srgb,var(--hp-color-on-surface) 40%,transparent)}}.hp-mini-progress-played{background:var(--hp-color-accent)}.hp-seek-time{border-radius:calc(var(--hp-radius) * .75);background:var(--hp-tooltip-bg);color:var(--hp-tooltip-text);-webkit-backdrop-filter:blur(12px)saturate(160%);font-variant-numeric:tabular-nums;white-space:nowrap;pointer-events:none;visibility:hidden;z-index:20;padding:3px 7px;font-size:12px;font-weight:500;position:absolute;bottom:calc(100% + 8px);left:0;box-shadow:0 4px 14px #00000059}.hp-seek-time[data-visible]{visibility:visible}.hp-sprite-tooltip{pointer-events:none;visibility:hidden;z-index:20;flex-direction:column;align-items:center;gap:4px;display:flex;position:absolute;bottom:calc(100% + 8px);left:0}.hp-sprite-tooltip[data-visible]{visibility:visible}.hp-sprite-image{border-radius:calc(var(--hp-radius) * .75);border:2px solid var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-sprite-image{border:2px solid color-mix(in srgb,var(--hp-color-on-surface) 85%,transparent)}}.hp-sprite-image{background-color:#000;background-repeat:no-repeat;box-shadow:0 4px 14px #00000059}.hp-sprite-time{background:var(--hp-tooltip-bg);color:var(--hp-tooltip-text);font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:4px;padding:2px 6px;font-size:12px}.hp-live-badge{height:var(--hp-ctrl-btn-size);color:var(--hp-color-on-surface);font:inherit;letter-spacing:.04em;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:9999px;align-items:center;gap:6px;padding:0 8px;font-size:12px;font-weight:600;display:inline-flex}.hp-live-badge:hover{background:var(--hp-chip-bg-hover)}.hp-live-badge:focus-visible{outline:2px solid var(--hp-color-accent);outline-offset:2px}.hp-live-dot{background:var(--hp-live-color,red);border-radius:50%;width:8px;height:8px;transition:background-color .16s}.hp-live-badge[data-behind]{color:var(--hp-color-on-surface-muted)}.hp-live-badge[data-behind] .hp-live-dot{background:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-live-badge[data-behind] .hp-live-dot{background:color-mix(in srgb,var(--hp-color-on-surface) 45%,transparent)}}.hp-chapters{pointer-events:none;inset-inline:0;align-items:center;gap:2px;display:flex;position:absolute;top:0;bottom:0}.hp-chapter{min-width:1px;height:var(--hp-seek-track-h);background:var(--hp-color-on-surface);border-radius:1px;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.hp-chapter{background:color-mix(in srgb,var(--hp-color-on-surface) 25%,transparent)}}.hp-chapter{transition:height .15s}.hp-seekbar:hover .hp-chapter{height:var(--hp-seek-track-h-hover)}.hp-seekbar .hp-chapter[data-hover]{height:calc(var(--hp-seek-track-h-hover) * 1.6)}.hp-chapter-fill{transform-origin:0;will-change:transform;position:absolute;top:0;right:0;bottom:0;left:0;transform:scaleX(0)}.hp-chapter-buffered{background:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-chapter-buffered{background:color-mix(in srgb,var(--hp-color-on-surface) 40%,transparent)}}.hp-chapter-played{background:var(--hp-color-accent)}.hp-chapter-tooltip{background:var(--hp-tooltip-bg);max-width:240px;color:var(--hp-tooltip-text);border-radius:calc(var(--hp-radius) * .75);-webkit-backdrop-filter:blur(12px)saturate(160%);text-align:center;pointer-events:none;white-space:nowrap;visibility:hidden;z-index:40;flex-direction:column;align-items:center;gap:2px;padding:4px 8px;font-size:12px;line-height:1.3;display:flex;position:absolute;bottom:calc(100% + 6px);left:0;box-shadow:0 4px 14px #00000059}.hp-chapter-tooltip[data-visible]{visibility:visible}.hp-chapter-tooltip-title{text-overflow:ellipsis;max-width:100%;font-weight:600;overflow:hidden}.hp-chapter-tooltip-time{opacity:.75;font-variant-numeric:tabular-nums}:host([data-sticky]){z-index:2147483000;border-radius:var(--hp-radius);box-shadow:0 8px 28px #00000073;width:min(360px,92vw)!important;aspect-ratio:var(--hp-aspect-ratio,16 / 9)!important;position:fixed!important}:host([data-sticky][data-sticky-corner=br]){inset:auto 16px 16px auto}:host([data-sticky][data-sticky-corner=bl]){inset:auto auto 16px 16px}:host([data-sticky][data-sticky-corner=tr]){inset:16px 16px auto auto}:host([data-sticky][data-sticky-corner=tl]){inset:16px auto auto 16px}.hp-caption-layer{z-index:5;pointer-events:none;position:absolute;top:0;right:0;bottom:0;left:0}.hp-caption-bubble{background:var(--hp-caption-bg);width:max-content;max-width:86%;color:var(--hp-caption-text);border-radius:var(--hp-caption-radius);font-size:calc(var(--hp-caption-font-size) * var(--hp-caption-size-multiplier,1));text-align:center;white-space:pre-line;cursor:grab;pointer-events:auto;touch-action:none;-webkit-user-select:none;user-select:none;padding:.3em .6em;line-height:1.4;transition:transform .24s cubic-bezier(.25,.8,.25,1);display:none;position:absolute;bottom:0;left:50%;transform:translate(-50%)}.hp-caption-bubble.hp-caption-visible{display:inline-block}.hp-caption-bubble.hp-caption-dragging,.hp-caption-bubble.hp-caption-no-transition{transition:none}.hp-caption-bubble.hp-caption-dragging{cursor:grabbing}[part=ad-layer][data-nonlinear]{top:auto;bottom:var(--hp-nonlinear-ad-offset,72px);height:var(--hp-nonlinear-ad-height,33%);pointer-events:none}[part=ad-layer][data-nonlinear] *{pointer-events:none}[part=ad-layer][data-nonlinear] :is(iframe,img,a,button){pointer-events:auto}.hp-debug{--hp-panel-text:#f1f1f4;--hp-panel-text-muted:#f1f1f49e;--hp-panel-border:#ffffff1f;text-shadow:none;z-index:30;background:#0e0e12f2;flex-direction:column;min-width:0;font-size:12px;line-height:1.45;display:flex;top:8px;right:8px;bottom:8px;left:8px;overflow:hidden}.hp-debug:focus{outline:none}.hp-debug-header{border-bottom:1px solid var(--hp-panel-border);flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;padding:8px 8px 8px 12px;display:flex}.hp-debug-title{white-space:nowrap;align-items:center;gap:8px;min-width:0;font-size:13px;font-weight:700;display:flex}.hp-debug-count{font-variant-numeric:tabular-nums;background:#f8717138;border-radius:9999px;padding:1px 7px;font-size:11px}.hp-debug-count:empty{display:none}.hp-debug-actions{flex-shrink:0;align-items:center;gap:4px;display:flex}.hp-debug-btn{border:1px solid var(--hp-panel-border);color:inherit;font:inherit;cursor:pointer;background:0 0;border-radius:9999px;padding:4px 10px;font-size:11.5px}.hp-debug-btn:hover:not(:disabled){background:var(--hp-panel-text)}@supports (color:color-mix(in lab,red,red)){.hp-debug-btn:hover:not(:disabled){background:color-mix(in srgb,var(--hp-panel-text) 12%,transparent)}}.hp-debug-btn:disabled{opacity:.45;cursor:default}.hp-debug-list{overscroll-behavior:contain;flex:1;min-height:0;margin:0;padding:6px 12px 10px;list-style:none;overflow:hidden auto}.hp-debug-row{border-left:2px solid var(--hp-panel-text);padding:8px 0 8px 10px}@supports (color:color-mix(in lab,red,red)){.hp-debug-row{border-left:2px solid color-mix(in srgb,var(--hp-panel-text) 25%,transparent)}}.hp-debug-row{min-width:0}.hp-debug-row+.hp-debug-row{margin-top:6px}.hp-debug-row[data-fatal]{border-left-color:#f87171}.hp-debug-row-head{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:2px;display:flex}.hp-debug-time{color:var(--hp-panel-text-muted);font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.hp-debug-source,.hp-debug-fatal{background:var(--hp-panel-text);border-radius:9999px;padding:1px 7px;font-size:10.5px;font-weight:600}@supports (color:color-mix(in lab,red,red)){.hp-debug-source,.hp-debug-fatal{background:color-mix(in srgb,var(--hp-panel-text) 12%,transparent)}}.hp-debug-source[data-source=ads]{background:#f5c4513d}.hp-debug-source[data-source=stream],.hp-debug-source[data-source=media]{background:#60a5fa3d}.hp-debug-fatal{background:#f8717147}.hp-debug-message{overflow-wrap:anywhere;font-weight:600}.hp-debug-repeat{color:var(--hp-panel-text-muted);font-weight:500}.hp-debug-details{grid-template-columns:max-content minmax(0,1fr);gap:1px 10px;margin:4px 0 0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;display:grid}.hp-debug-details dt{color:var(--hp-panel-text-muted)}.hp-debug-details dd{overflow-wrap:anywhere;min-width:0;margin:0}.hp-debug-empty{color:var(--hp-panel-text-muted);margin:auto;padding:16px}.hp-debug-empty[hidden]{display:none}.hp-ad-return{z-index:25;color:#fff;cursor:pointer;-webkit-tap-highlight-color:transparent;background:#0e0e12d1;border:1px solid #ffffff40;border-radius:999px;padding:10px 16px;font:600 14px/1.2 system-ui,-apple-system,sans-serif;animation:.2s ease-out hp-ad-return-in;position:absolute;bottom:64px;right:12px}@keyframes hp-ad-return-in{0%{opacity:0;transform:translateY(6px)}}:host([data-audio]) .hp-center-play{display:none}.hp-audio{z-index:1;text-align:left;pointer-events:none;color:#fff;background: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;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:12px}.hp-sponsor-logo[data-position=bottom-left]{bottom:76px;left:12px}.hp-sponsor-logo[data-position=bottom-right]{bottom:76px;right: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}@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}@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)}}';
1
+ var Le = Object.defineProperty;
2
+ var Pe = (n, t, e) => t in n ? Le(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
+ var r = (n, t, e) => Pe(n, typeof t != "symbol" ? t + "" : t, e);
4
+ const Me = '/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial}}}@layer theme{:root,:host{--hp-font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--hp-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--hp-color-black:#000;--hp-color-white:#fff;--hp-spacing:.25rem;--hp-container-xs:20rem;--hp-text-xs:.75rem;--hp-text-xs--line-height:calc(1 / .75);--hp-text-sm:.875rem;--hp-text-sm--line-height:calc(1.25 / .875);--hp-text-base:1rem;--hp-text-base--line-height: 1.5 ;--hp-text-lg:1.125rem;--hp-text-lg--line-height:calc(1.75 / 1.125);--hp-text-xl:1.25rem;--hp-text-xl--line-height:calc(1.75 / 1.25);--hp-text-2xl:1.5rem;--hp-text-2xl--line-height:calc(2 / 1.5);--hp-font-weight-medium:500;--hp-font-weight-semibold:600;--hp-radius-lg:.5rem;--hp-animate-spin:spin 1s linear infinite;--hp-aspect-video:16 / 9;--hp-default-transition-duration:.15s;--hp-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--hp-default-font-family:var(--hp-font-sans);--hp-default-mono-font-family:var(--hp-font-mono);--hp-color-accent:#fff;--hp-color-on-accent:#0a0a0a;--hp-color-surface:#0a0a0a;--hp-color-surface-elev:#1a1a1a;--hp-color-on-surface:#fff;--hp-color-on-surface-muted:#a3a3a3}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--hp-default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--hp-default-font-feature-settings,normal);font-variation-settings:var(--hp-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--hp-default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--hp-default-mono-font-feature-settings,normal);font-variation-settings:var(--hp-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.hp\\:pointer-events-auto{pointer-events:auto}.hp\\:pointer-events-none{pointer-events:none}.hp\\:absolute{position:absolute}.hp\\:relative{position:relative}.hp\\:sticky{position:sticky}.hp\\:inset-0{top:0;right:0;bottom:0;left:0}.hp\\:inset-x-0{inset-inline:0}.hp\\:inset-y-0{inset-block:0}.hp\\:top-0{top:0}.hp\\:top-1{top:var(--hp-spacing)}.hp\\:top-1\\/2{top:50%}.hp\\:right-0{right:0}.hp\\:right-1{right:var(--hp-spacing)}.hp\\:right-2{right:calc(var(--hp-spacing) * 2)}.hp\\:bottom-0{bottom:0}.hp\\:bottom-full{bottom:100%}.hp\\:left-1\\/2{left:50%}.hp\\:z-10{z-index:10}.hp\\:z-20{z-index:20}.hp\\:z-30{z-index:30}.hp\\:z-40{z-index:40}.hp\\:m-0{margin:0}.hp\\:my-1{margin-block:var(--hp-spacing)}.hp\\:mt-0\\.5{margin-top:calc(var(--hp-spacing) * .5)}.hp\\:mt-1{margin-top:var(--hp-spacing)}.hp\\:mt-2{margin-top:calc(var(--hp-spacing) * 2)}.hp\\:mt-8{margin-top:calc(var(--hp-spacing) * 8)}.hp\\:mb-1{margin-bottom:var(--hp-spacing)}.hp\\:mb-2{margin-bottom:calc(var(--hp-spacing) * 2)}.hp\\:mb-16{margin-bottom:calc(var(--hp-spacing) * 16)}.hp\\:ml-1{margin-left:var(--hp-spacing)}.hp\\:block{display:block}.hp\\:flex{display:flex}.hp\\:grid{display:grid}.hp\\:hidden{display:none}.hp\\:inline-block{display:inline-block}.hp\\:aspect-\\[9\\/16\\]{aspect-ratio:9/16}.hp\\:aspect-video{aspect-ratio:var(--hp-aspect-video)}.hp\\:h-0\\.5{height:calc(var(--hp-spacing) * .5)}.hp\\:h-1{height:var(--hp-spacing)}.hp\\:h-1\\/3{height:33.3333%}.hp\\:h-3{height:calc(var(--hp-spacing) * 3)}.hp\\:h-6{height:calc(var(--hp-spacing) * 6)}.hp\\:h-7{height:calc(var(--hp-spacing) * 7)}.hp\\:h-8{height:calc(var(--hp-spacing) * 8)}.hp\\:h-9{height:calc(var(--hp-spacing) * 9)}.hp\\:h-10{height:calc(var(--hp-spacing) * 10)}.hp\\:h-16{height:calc(var(--hp-spacing) * 16)}.hp\\:h-20{height:calc(var(--hp-spacing) * 20)}.hp\\:h-\\[var\\(--hp-ctrl-btn-size\\)\\]{height:var(--hp-ctrl-btn-size)}.hp\\:h-\\[var\\(--hp-seek-hit-h\\)\\]{height:var(--hp-seek-hit-h)}.hp\\:h-\\[var\\(--hp-seek-track-h\\)\\]{height:var(--hp-seek-track-h)}.hp\\:h-full{height:100%}.hp\\:max-h-64{max-height:calc(var(--hp-spacing) * 64)}.hp\\:max-h-80{max-height:calc(var(--hp-spacing) * 80)}.hp\\:w-0{width:0}.hp\\:w-0\\.5{width:calc(var(--hp-spacing) * .5)}.hp\\:w-1{width:var(--hp-spacing)}.hp\\:w-1\\.5{width:calc(var(--hp-spacing) * 1.5)}.hp\\:w-3{width:calc(var(--hp-spacing) * 3)}.hp\\:w-6{width:calc(var(--hp-spacing) * 6)}.hp\\:w-7{width:calc(var(--hp-spacing) * 7)}.hp\\:w-8{width:calc(var(--hp-spacing) * 8)}.hp\\:w-9{width:calc(var(--hp-spacing) * 9)}.hp\\:w-10{width:calc(var(--hp-spacing) * 10)}.hp\\:w-14{width:calc(var(--hp-spacing) * 14)}.hp\\:w-16{width:calc(var(--hp-spacing) * 16)}.hp\\:w-48{width:calc(var(--hp-spacing) * 48)}.hp\\:w-72{width:calc(var(--hp-spacing) * 72)}.hp\\:w-\\[var\\(--hp-ctrl-btn-size\\)\\]{width:var(--hp-ctrl-btn-size)}.hp\\:w-full{width:100%}.hp\\:max-w-\\[50\\%\\]{max-width:50%}.hp\\:max-w-\\[80\\%\\]{max-width:80%}.hp\\:max-w-\\[85\\%\\]{max-width:85%}.hp\\:max-w-full{max-width:100%}.hp\\:max-w-xs{max-width:var(--hp-container-xs)}.hp\\:min-w-0{min-width:0}.hp\\:flex-1{flex:1}.hp\\:flex-shrink-0,.hp\\:shrink-0{flex-shrink:0}.hp\\:animate-spin{animation:var(--hp-animate-spin)}.hp\\:cursor-pointer{cursor:pointer}.hp\\:touch-none{touch-action:none}.hp\\:list-none{list-style-type:none}.hp\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.hp\\:flex-col{flex-direction:column}.hp\\:flex-wrap{flex-wrap:wrap}.hp\\:items-center{align-items:center}.hp\\:items-end{align-items:flex-end}.hp\\:justify-between{justify-content:space-between}.hp\\:justify-center{justify-content:center}.hp\\:gap-0\\.5{gap:calc(var(--hp-spacing) * .5)}.hp\\:gap-1{gap:var(--hp-spacing)}.hp\\:gap-1\\.5{gap:calc(var(--hp-spacing) * 1.5)}.hp\\:gap-2{gap:calc(var(--hp-spacing) * 2)}.hp\\:gap-3{gap:calc(var(--hp-spacing) * 3)}.hp\\:self-end{align-self:flex-end}.hp\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.hp\\:overflow-hidden{overflow:hidden}.hp\\:overflow-y-auto{overflow-y:auto}.hp\\:rounded{border-radius:.25rem}.hp\\:rounded-full{border-radius:3.40282e38px}.hp\\:rounded-lg{border-radius:var(--hp-radius-lg)}.hp\\:border{border-style:var(--tw-border-style);border-width:1px}.hp\\:border-0{border-style:var(--tw-border-style);border-width:0}.hp\\:border-2{border-style:var(--tw-border-style);border-width:2px}.hp\\:border-\\[3px\\]{border-style:var(--tw-border-style);border-width:3px}.hp\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.hp\\:border-on-surface\\/10{border-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:border-on-surface\\/10{border-color:color-mix(in oklab,var(--hp-color-on-surface) 10%,transparent)}}.hp\\:border-on-surface\\/20{border-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:border-on-surface\\/20{border-color:color-mix(in oklab,var(--hp-color-on-surface) 20%,transparent)}}.hp\\:border-on-surface\\/30{border-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:border-on-surface\\/30{border-color:color-mix(in oklab,var(--hp-color-on-surface) 30%,transparent)}}.hp\\:border-t-accent{border-top-color:var(--hp-color-accent)}.hp\\:bg-accent,.hp\\:bg-accent\\/15{background-color:var(--hp-color-accent)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-accent\\/15{background-color:color-mix(in oklab,var(--hp-color-accent) 15%,transparent)}}.hp\\:bg-black,.hp\\:bg-black\\/30{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/30{background-color:color-mix(in oklab,var(--hp-color-black) 30%,transparent)}}.hp\\:bg-black\\/40{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/40{background-color:color-mix(in oklab,var(--hp-color-black) 40%,transparent)}}.hp\\:bg-black\\/60{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/60{background-color:color-mix(in oklab,var(--hp-color-black) 60%,transparent)}}.hp\\:bg-black\\/70{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/70{background-color:color-mix(in oklab,var(--hp-color-black) 70%,transparent)}}.hp\\:bg-black\\/85{background-color:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-black\\/85{background-color:color-mix(in oklab,var(--hp-color-black) 85%,transparent)}}.hp\\:bg-on-surface,.hp\\:bg-on-surface\\/20{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-on-surface\\/20{background-color:color-mix(in oklab,var(--hp-color-on-surface) 20%,transparent)}}.hp\\:bg-on-surface\\/25{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-on-surface\\/25{background-color:color-mix(in oklab,var(--hp-color-on-surface) 25%,transparent)}}.hp\\:bg-on-surface\\/40{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-on-surface\\/40{background-color:color-mix(in oklab,var(--hp-color-on-surface) 40%,transparent)}}.hp\\:bg-surface{background-color:var(--hp-color-surface)}.hp\\:bg-surface-elev{background-color:var(--hp-color-surface-elev)}.hp\\:bg-transparent{background-color:#0000}.hp\\:bg-white,.hp\\:bg-white\\/15{background-color:var(--hp-color-white)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-white\\/15{background-color:color-mix(in oklab,var(--hp-color-white) 15%,transparent)}}.hp\\:bg-white\\/30{background-color:var(--hp-color-white)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-white\\/30{background-color:color-mix(in oklab,var(--hp-color-white) 30%,transparent)}}.hp\\:bg-white\\/40{background-color:var(--hp-color-white)}@supports (color:color-mix(in lab,red,red)){.hp\\:bg-white\\/40{background-color:color-mix(in oklab,var(--hp-color-white) 40%,transparent)}}.hp\\:bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.hp\\:from-black\\/80{--tw-gradient-from:var(--hp-color-black)}@supports (color:color-mix(in lab,red,red)){.hp\\:from-black\\/80{--tw-gradient-from:color-mix(in oklab, var(--hp-color-black) 80%, transparent)}}.hp\\:from-black\\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hp\\:to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hp\\:bg-cover{background-size:cover}.hp\\:bg-center{background-position:50%}.hp\\:object-cover{object-fit:cover}.hp\\:p-0{padding:0}.hp\\:p-1\\.5{padding:calc(var(--hp-spacing) * 1.5)}.hp\\:p-2{padding:calc(var(--hp-spacing) * 2)}.hp\\:p-3{padding:calc(var(--hp-spacing) * 3)}.hp\\:p-4{padding:calc(var(--hp-spacing) * 4)}.hp\\:px-1{padding-inline:var(--hp-spacing)}.hp\\:px-1\\.5{padding-inline:calc(var(--hp-spacing) * 1.5)}.hp\\:px-2{padding-inline:calc(var(--hp-spacing) * 2)}.hp\\:px-3{padding-inline:calc(var(--hp-spacing) * 3)}.hp\\:px-4{padding-inline:calc(var(--hp-spacing) * 4)}.hp\\:py-1{padding-block:var(--hp-spacing)}.hp\\:py-1\\.5{padding-block:calc(var(--hp-spacing) * 1.5)}.hp\\:py-2{padding-block:calc(var(--hp-spacing) * 2)}.hp\\:pt-6{padding-top:calc(var(--hp-spacing) * 6)}.hp\\:pb-2{padding-bottom:calc(var(--hp-spacing) * 2)}.hp\\:text-center{text-align:center}.hp\\:text-left{text-align:left}.hp\\:font-mono{font-family:var(--hp-font-mono)}.hp\\:text-2xl{font-size:var(--hp-text-2xl);line-height:var(--tw-leading,var(--hp-text-2xl--line-height))}.hp\\:text-base{font-size:var(--hp-text-base);line-height:var(--tw-leading,var(--hp-text-base--line-height))}.hp\\:text-lg{font-size:var(--hp-text-lg);line-height:var(--tw-leading,var(--hp-text-lg--line-height))}.hp\\:text-sm{font-size:var(--hp-text-sm);line-height:var(--tw-leading,var(--hp-text-sm--line-height))}.hp\\:text-xl{font-size:var(--hp-text-xl);line-height:var(--tw-leading,var(--hp-text-xl--line-height))}.hp\\:text-xs{font-size:var(--hp-text-xs);line-height:var(--tw-leading,var(--hp-text-xs--line-height))}.hp\\:text-\\[length\\:var\\(--hp-ctrl-icon-size\\)\\]{font-size:var(--hp-ctrl-icon-size)}.hp\\:leading-none{--tw-leading:1;line-height:1}.hp\\:font-medium{--tw-font-weight:var(--hp-font-weight-medium);font-weight:var(--hp-font-weight-medium)}.hp\\:font-semibold{--tw-font-weight:var(--hp-font-weight-semibold);font-weight:var(--hp-font-weight-semibold)}.hp\\:whitespace-nowrap{white-space:nowrap}.hp\\:text-accent{color:var(--hp-color-accent)}.hp\\:text-on-accent{color:var(--hp-color-on-accent)}.hp\\:text-on-surface{color:var(--hp-color-on-surface)}.hp\\:text-on-surface-muted{color:var(--hp-color-on-surface-muted)}.hp\\:text-white{color:var(--hp-color-white)}.hp\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.hp\\:no-underline{text-decoration-line:none}.hp\\:underline{text-decoration-line:underline}.hp\\:opacity-0{opacity:0}.hp\\:opacity-60{opacity:.6}.hp\\:opacity-70{opacity:.7}.hp\\:opacity-80{opacity:.8}.hp\\:opacity-90{opacity:.9}.hp\\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hp\\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hp\\:drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.hp\\:transition-\\[height\\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--hp-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hp-default-transition-duration))}.hp\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--hp-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hp-default-transition-duration))}.hp\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--hp-default-transition-timing-function));transition-duration:var(--tw-duration,var(--hp-default-transition-duration))}.hp\\:duration-100{--tw-duration:.1s;transition-duration:.1s}.hp\\:duration-150{--tw-duration:.15s;transition-duration:.15s}.hp\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.hp\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.hp\\:will-change-\\[opacity\\]{will-change:opacity}.hp\\:select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.hp\\:group-hover\\:h-\\[var\\(--hp-seek-track-h-hover\\)\\]:is(:where(.hp\\:group):hover *){height:var(--hp-seek-track-h-hover)}.hp\\:hover\\:bg-on-surface\\/5:hover{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:hover\\:bg-on-surface\\/5:hover{background-color:color-mix(in oklab,var(--hp-color-on-surface) 5%,transparent)}}.hp\\:hover\\:bg-on-surface\\/10:hover{background-color:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp\\:hover\\:bg-on-surface\\/10:hover{background-color:color-mix(in oklab,var(--hp-color-on-surface) 10%,transparent)}}.hp\\:hover\\:opacity-80:hover{opacity:.8}}.hp\\:focus-visible\\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hp\\:focus-visible\\:ring-accent:focus-visible{--tw-ring-color:var(--hp-color-accent)}.hp\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.hp\\:data-\\[active\\=true\\]\\:bg-accent\\/15[data-active=true]{background-color:var(--hp-color-accent)}@supports (color:color-mix(in lab,red,red)){.hp\\:data-\\[active\\=true\\]\\:bg-accent\\/15[data-active=true]{background-color:color-mix(in oklab,var(--hp-color-accent) 15%,transparent)}}.hp\\:data-\\[active\\=true\\]\\:text-on-surface[data-active=true]{color:var(--hp-color-on-surface)}}.hp-icon{font-variant:normal;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:hope-icons;font-style:normal;font-weight:400;line-height:1}.hp-icon-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(:fullscreen),:host(:-webkit-full-screen){--hp-ctrl-btn-size:44px;--hp-ctrl-icon-size:20px;--hp-seek-hit-h:26px;--hp-seek-track-h:6px;--hp-seek-track-h-hover:8px;--hp-seek-thumb-size:18px;--hp-caption-font-size:22px}:host(:fullscreen) [part=control-bar],:host(:-webkit-full-screen) [part=control-bar]{padding:28px 20px 18px}.video-area{width:100%;aspect-ratio:var(--hp-aspect-ratio,16 / 9);border-radius:var(--hp-radius);background:var(--hp-color-surface,#0a0a0a);position:relative;overflow:hidden}.video-area[data-compact]{--hp-caption-font-size:13px}.video-area[data-story]{aspect-ratio:9/16;max-width:49.5vh;max-height:88vh;margin:0 auto}:host(:fullscreen),:host(:-webkit-full-screen){background:#000;border-radius:0}:host(:fullscreen) .hp-root,:host(:-webkit-full-screen) .hp-root{height:100%}:host(:fullscreen) .video-area,:host(:-webkit-full-screen) .video-area{aspect-ratio:auto;background:#000;border-radius:0;width:100%;height:100%}:host(:fullscreen) .video-area[data-story],:host(:-webkit-full-screen) .video-area[data-story]{aspect-ratio:9/16;width:auto;max-width:100%;height:100%;max-height:none;margin:0 auto}.media-layer{position:absolute;top:0;right:0;bottom:0;left:0}.media-layer video{object-fit:contain;background:#000;width:100%;height:100%}.hp-center-x{transform:translate(-50%)}.hp-center-y{transform:translateY(-50%)}.hp-chip-panel[data-drop]{margin-top:8px;margin-bottom:0;top:100%;bottom:auto}.hp-top-bar{pointer-events:none;display:flex;position:absolute;top:8px;right:8px}.hp-top-bar>*{pointer-events:auto}.hp-story-list-btn{top:calc(8px + var(--hp-ctrl-btn-size) + 18px);right:12px}:host([data-cursor-hidden]),:host([data-cursor-hidden]) *{cursor:none!important}.hp-unmute-badge{z-index:25;background:var(--hp-tooltip-bg);color:var(--hp-tooltip-text);-webkit-backdrop-filter:blur(12px)saturate(160%);font:inherit;cursor:pointer;border:0;border-radius:9999px;align-items:center;gap:6px;padding:6px 12px 6px 10px;font-size:13px;font-weight:600;display:none;position:absolute;top:10px;left:10px;box-shadow:0 4px 14px #00000059}@media(hover:none)and (pointer:coarse){.hp-volume{display:none!important}.hp-unmute-badge[data-visible]{display:inline-flex}}.hp-error-screen{z-index:30;background:var(--hp-color-surface);justify-content:center;align-items:center;padding:12px;display:none;position:absolute;top:0;right:0;bottom:0;left:0}@supports (color:color-mix(in lab,red,red)){.hp-error-screen{background:color-mix(in srgb,var(--hp-color-surface) 94%,transparent)}}.hp-error-screen{-webkit-backdrop-filter:blur(16px)saturate(140%);color:var(--hp-color-on-surface);text-align:center;container-type:size}.hp-error-screen[data-visible]{animation:.22s hp-error-in;display:flex}@keyframes hp-error-in{0%{opacity:0}}.hp-error-card{flex-direction:column;align-items:center;gap:10px;max-width:340px;display:flex}.hp-error-icon{border:1px solid var(--hp-color-on-surface);border-radius:9999px;place-items:center;width:48px;height:48px;display:grid}@supports (color:color-mix(in lab,red,red)){.hp-error-icon{border:1px solid color-mix(in srgb,var(--hp-color-on-surface) 18%,transparent)}}.hp-error-icon{background:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-error-icon{background:color-mix(in srgb,var(--hp-color-on-surface) 8%,transparent)}}.hp-error-icon{margin-bottom:2px;font-size:22px}.hp-error-message{margin:0;font-size:14px;font-weight:600;line-height:1.45}.hp-error-code{color:var(--hp-color-on-surface-muted);font-variant-numeric:tabular-nums;margin:-4px 0 0;font-size:12px}.hp-error-retry{border:1px solid var(--hp-chip-border);background:var(--hp-chip-bg);color:var(--hp-color-on-surface);font:inherit;cursor:pointer;border-radius:9999px;align-items:center;gap:6px;margin-top:6px;padding:7px 14px 7px 12px;font-size:13px;font-weight:600;transition:background-color .15s,border-color .15s;display:inline-flex}.hp-error-retry:hover{background:var(--hp-chip-bg-hover);border-color:var(--hp-chip-border-hover)}.hp-error-retry:focus-visible{outline:2px solid var(--hp-color-accent);outline-offset:2px}@container (max-height:240px){.hp-error-card{gap:6px}.hp-error-icon{width:36px;height:36px;margin-bottom:0;font-size:16px}.hp-error-message{font-size:13px}.hp-error-code{margin-top:-2px;font-size:11px}.hp-error-retry{margin-top:2px;padding:5px 12px 5px 10px;font-size:12px}}.hp-context-menu,.hp-stats,.hp-debug{border:1px solid var(--hp-panel-border);background:var(--hp-panel-bg);-webkit-backdrop-filter:blur(var(--hp-panel-blur)) saturate(160%);color:var(--hp-panel-text);text-shadow:var(--hp-panel-text-shadow,none);border-radius:10px;position:absolute;box-shadow:0 8px 28px #00000059}.hp-context-menu{z-index:40;min-width:200px;padding:4px;font-size:13px;display:none}.hp-context-menu[data-open]{animation:.12s hp-context-menu-in;display:block}@keyframes hp-context-menu-in{0%{opacity:0;transform:scale(.97)}}.hp-context-menu-item{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:space-between;align-items:center;gap:16px;padding:8px 10px;display:flex}.hp-context-menu-item[data-info]{cursor:default;font-weight:600}button.hp-context-menu-item:hover,button.hp-context-menu-item:focus-visible{background:var(--hp-panel-text)}@supports (color:color-mix(in lab,red,red)){button.hp-context-menu-item:hover,button.hp-context-menu-item:focus-visible{background:color-mix(in srgb,var(--hp-panel-text) 10%,transparent)}}button.hp-context-menu-item:hover,button.hp-context-menu-item:focus-visible{outline:none}.hp-context-menu-item+.hp-context-menu-item{margin-top:2px}.hp-context-menu-meta{color:var(--hp-panel-text-muted);font-variant-numeric:tabular-nums;font-weight:500}.hp-stats{z-index:28;width:min(360px,100% - 20px);max-height:calc(100% - 20px);padding:8px 12px 10px;font-size:11.5px;top:10px;left:10px;overflow:auto}.hp-stats-header{justify-content:space-between;align-items:center;margin-bottom:6px;font-size:12px;font-weight:700;display:flex}.hp-stats-close{color:inherit;cursor:pointer;background:0 0;border:0;border-radius:9999px;padding:4px;display:inline-flex}.hp-stats-close:hover{background:var(--hp-panel-text)}@supports (color:color-mix(in lab,red,red)){.hp-stats-close:hover{background:color-mix(in srgb,var(--hp-panel-text) 12%,transparent)}}.hp-stats-body{grid-template-columns:auto 1fr;gap:3px 12px;margin:0;display:grid}.hp-stats-body dt{color:var(--hp-panel-text-muted);white-space:nowrap}.hp-stats-body dd{text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:hidden}.hp-seek-fb{z-index:8;border:1px solid var(--hp-chip-border);background:var(--hp-chip-bg);-webkit-backdrop-filter:blur(var(--hp-chip-blur)) saturate(160%);box-shadow:var(--hp-chip-shadow);color:var(--hp-chip-text);pointer-events:none;opacity:0;border-radius:9999px;align-items:center;gap:10px;padding:12px 20px 12px 16px;transition:opacity .18s,translate .22s cubic-bezier(.2,.8,.2,1);display:flex;position:absolute;top:50%}.hp-seek-fb[data-side=forward]{right:7%;translate:14px -50%}.hp-seek-fb[data-side=back]{flex-direction:row-reverse;padding:12px 16px 12px 20px;left:7%;translate:-14px -50%}.hp-seek-fb[data-visible]{opacity:1;translate:0 -50%}.hp-seek-fb-chevrons{display:flex}.hp-seek-fb-chevrons svg{fill:currentColor;opacity:.25;width:16px;height:16px;margin:0 -3px;animation:.9s ease-in-out infinite hp-seek-fb-chevron}.hp-seek-fb[data-side=back] .hp-seek-fb-chevrons{transform:scaleX(-1)}.hp-seek-fb-chevrons svg:nth-child(2){animation-delay:.15s}.hp-seek-fb-chevrons svg:nth-child(3){animation-delay:.3s}@keyframes hp-seek-fb-chevron{0%,to{opacity:.25}40%{opacity:1}}.hp-seek-fb-value{white-space:nowrap;align-items:baseline;gap:3px;display:flex}.hp-seek-fb-num{font-variant-numeric:tabular-nums;font-size:20px;font-weight:700;line-height:1;display:inline-block}.hp-seek-fb-unit{opacity:.75;font-size:12px;font-weight:600}.hp-seek-fb-bump{animation:.26s cubic-bezier(.2,.8,.2,1) hp-seek-fb-bump}@keyframes hp-seek-fb-bump{0%{transform:scale(1.25)}to{transform:scale(1)}}.video-area[data-compact] .hp-seek-fb{padding:8px 12px}.video-area[data-compact] .hp-seek-fb[data-side=forward]{right:4%}.video-area[data-compact] .hp-seek-fb[data-side=back]{padding:8px 12px;left:4%}.video-area[data-compact] .hp-seek-fb-chevrons{display:none}.video-area[data-compact] .hp-seek-fb-num{font-size:16px}.hp-sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}@media(prefers-reduced-motion:reduce){.hp-seek-fb,.hp-seek-fb-chevrons svg,.hp-seek-fb-bump{transition:none;animation:none}.hp-seek-fb-chevrons svg{opacity:.8}}.hp-skip-btn{position:relative}.hp-skip-btn>.hp-icon{font-size:calc(var(--hp-ctrl-icon-size) * 1.45)}.hp-skip-num{padding-top:calc(var(--hp-ctrl-icon-size) * .14);font-size:calc(var(--hp-ctrl-icon-size) * .56);letter-spacing:-.02em;font-variant-numeric:tabular-nums;pointer-events:none;justify-content:center;align-items:center;font-weight:700;line-height:1;display:flex;position:absolute;top:0;right:0;bottom:0;left:0}.hp-skip-num[data-long]{font-size:calc(var(--hp-ctrl-icon-size) * .42)}.hp-skip-btn:disabled{opacity:.4;cursor:default}.hp-center-play>.hp-chip{z-index:7;position:relative}.video-area[data-center-play-shifted] .hp-center-play>.hp-chip{width:var(--hp-center-play-size);height:var(--hp-center-play-size);translate:var(--hp-center-play-shift-x,0px) var(--hp-center-play-shift)}.video-area[data-pause-ad-ready]>:is(.media-layer,.hp-chrome,.hp-center-play,.hp-caption-layer,.hp-error-screen,.hp-mini-progress){right:var(--hp-pause-ad-w,0px);transition:right .38s cubic-bezier(.2,.8,.2,1),opacity .2s}.video-area[data-pause-ad] .media-layer video{object-fit:cover}.hp-pause-ad{z-index:25;width:var(--hp-pause-ad-panel-w,332px);box-sizing:border-box;background:var(--hp-color-surface,#0a0a0a);color:var(--hp-color-on-surface,#fff);visibility:hidden;flex-direction:column;justify-content:center;gap:10px;padding:12px 16px;transition:transform .38s cubic-bezier(.2,.8,.2,1),visibility 0s linear .38s;display:flex;position:absolute;top:0;bottom:0;right:0;transform:translate(100%)}.hp-pause-ad[data-open]{visibility:visible;transition:transform .38s cubic-bezier(.2,.8,.2,1);transform:none}.hp-pause-ad-header{justify-content:space-between;align-items:center;gap:8px;display:flex}.hp-pause-ad-label{color:var(--hp-color-on-surface-muted,#ffffffb3);font-size:13px;font-weight:600}.hp-pause-ad-close{width:28px;height:28px;color:var(--hp-color-on-surface,#fff);cursor:pointer;background:0 0;border:0;border-radius:9999px;justify-content:center;align-items:center;padding:0;transition:background-color .15s;display:inline-flex}.hp-pause-ad-close:hover{background:var(--hp-chip-bg-hover)}.hp-pause-ad-body{border-radius:8px;justify-content:center;display:flex;overflow:hidden}.hp-pause-ad-resume{border:1px solid var(--hp-chip-border);background:var(--hp-chip-bg);color:var(--hp-color-on-surface,#fff);font:inherit;cursor:pointer;border-radius:9999px;align-self:stretch;padding:9px 14px;font-size:13px;font-weight:600;transition:background-color .15s,border-color .15s}.hp-pause-ad-resume:hover{background:var(--hp-chip-bg-hover);border-color:var(--hp-chip-border-hover)}.hp-pause-ad-close:focus-visible,.hp-pause-ad-resume:focus-visible{outline:2px solid var(--hp-color-accent);outline-offset:2px}@media(prefers-reduced-motion:reduce){.video-area[data-pause-ad-ready]>:is(.media-layer,.hp-chrome,.hp-center-play,.hp-caption-layer,.hp-error-screen,.hp-mini-progress),.hp-pause-ad,.hp-pause-ad[data-open]{transition:none}}.hp-seek-thumb{width:var(--hp-seek-thumb-size);height:var(--hp-seek-thumb-size);background:var(--hp-color-accent);will-change:translate,scale;pointer-events:none;z-index:2;border-radius:9999px;transition:scale .15s;position:absolute;left:0;scale:.5}.hp-seekbar:hover .hp-seek-thumb,.hp-seekbar:active .hp-seek-thumb,.hp-seekbar:focus-visible .hp-seek-thumb{scale:1}.hp-seekbar[data-no-duration] .hp-seek-thumb{display:none}.hp-seek-hover-dot{width:var(--hp-seek-track-h-hover);height:var(--hp-seek-track-h-hover);background:var(--hp-color-on-surface);opacity:0;pointer-events:none;z-index:1;border-radius:9999px;transition:opacity .12s;position:absolute;top:50%;left:0;box-shadow:0 0 0 1px #00000073}.hp-seek-hover-dot[data-visible]{opacity:.9}.hp-mini-progress{z-index:6;pointer-events:none;background:var(--hp-color-on-surface);height:1px;position:absolute;bottom:0;left:0;right:0}@supports (color:color-mix(in lab,red,red)){.hp-mini-progress{background:color-mix(in srgb,var(--hp-color-on-surface) 25%,transparent)}}.hp-mini-progress{opacity:0;transition:opacity .2s}.hp-mini-progress[data-visible]:not([data-disabled]){opacity:1}.hp-mini-progress-fill{transform-origin:0;will-change:transform;position:absolute;top:0;right:0;bottom:0;left:0;transform:scaleX(0)}.hp-mini-progress-buffered{background:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-mini-progress-buffered{background:color-mix(in srgb,var(--hp-color-on-surface) 40%,transparent)}}.hp-mini-progress-played{background:var(--hp-color-accent)}.hp-seek-time{border-radius:calc(var(--hp-radius) * .75);background:var(--hp-tooltip-bg);color:var(--hp-tooltip-text);-webkit-backdrop-filter:blur(12px)saturate(160%);font-variant-numeric:tabular-nums;white-space:nowrap;pointer-events:none;visibility:hidden;z-index:20;padding:3px 7px;font-size:12px;font-weight:500;position:absolute;bottom:calc(100% + 8px);left:0;box-shadow:0 4px 14px #00000059}.hp-seek-time[data-visible]{visibility:visible}.hp-sprite-tooltip{pointer-events:none;visibility:hidden;z-index:20;flex-direction:column;align-items:center;gap:4px;display:flex;position:absolute;bottom:calc(100% + 8px);left:0}.hp-sprite-tooltip[data-visible]{visibility:visible}.hp-sprite-image{border-radius:calc(var(--hp-radius) * .75);border:2px solid var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-sprite-image{border:2px solid color-mix(in srgb,var(--hp-color-on-surface) 85%,transparent)}}.hp-sprite-image{background-color:#000;background-repeat:no-repeat;box-shadow:0 4px 14px #00000059}.hp-sprite-time{background:var(--hp-tooltip-bg);color:var(--hp-tooltip-text);font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:4px;padding:2px 6px;font-size:12px}.hp-live-badge{height:var(--hp-ctrl-btn-size);color:var(--hp-color-on-surface);font:inherit;letter-spacing:.04em;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:9999px;align-items:center;gap:6px;padding:0 8px;font-size:12px;font-weight:600;display:inline-flex}.hp-live-badge:hover{background:var(--hp-chip-bg-hover)}.hp-live-badge:focus-visible{outline:2px solid var(--hp-color-accent);outline-offset:2px}.hp-live-dot{background:var(--hp-live-color,red);border-radius:50%;width:8px;height:8px;transition:background-color .16s}.hp-live-badge[data-behind]{color:var(--hp-color-on-surface-muted)}.hp-live-badge[data-behind] .hp-live-dot{background:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-live-badge[data-behind] .hp-live-dot{background:color-mix(in srgb,var(--hp-color-on-surface) 45%,transparent)}}.hp-chapters{pointer-events:none;inset-inline:0;align-items:center;gap:2px;display:flex;position:absolute;top:0;bottom:0}.hp-chapter{min-width:1px;height:var(--hp-seek-track-h);background:var(--hp-color-on-surface);border-radius:1px;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.hp-chapter{background:color-mix(in srgb,var(--hp-color-on-surface) 25%,transparent)}}.hp-chapter{transition:height .15s}.hp-seekbar:hover .hp-chapter{height:var(--hp-seek-track-h-hover)}.hp-seekbar .hp-chapter[data-hover]{height:calc(var(--hp-seek-track-h-hover) * 1.6)}.hp-chapter-fill{transform-origin:0;will-change:transform;position:absolute;top:0;right:0;bottom:0;left:0;transform:scaleX(0)}.hp-chapter-buffered{background:var(--hp-color-on-surface)}@supports (color:color-mix(in lab,red,red)){.hp-chapter-buffered{background:color-mix(in srgb,var(--hp-color-on-surface) 40%,transparent)}}.hp-chapter-played{background:var(--hp-color-accent)}.hp-chapter-tooltip{background:var(--hp-tooltip-bg);max-width:240px;color:var(--hp-tooltip-text);border-radius:calc(var(--hp-radius) * .75);-webkit-backdrop-filter:blur(12px)saturate(160%);text-align:center;pointer-events:none;white-space:nowrap;visibility:hidden;z-index:40;flex-direction:column;align-items:center;gap:2px;padding:4px 8px;font-size:12px;line-height:1.3;display:flex;position:absolute;bottom:calc(100% + 6px);left:0;box-shadow:0 4px 14px #00000059}.hp-chapter-tooltip[data-visible]{visibility:visible}.hp-chapter-tooltip-title{text-overflow:ellipsis;max-width:100%;font-weight:600;overflow:hidden}.hp-chapter-tooltip-time{opacity:.75;font-variant-numeric:tabular-nums}:host([data-sticky]){z-index:2147483000;border-radius:var(--hp-radius);box-shadow:0 8px 28px #00000073;width:min(360px,92vw)!important;aspect-ratio:var(--hp-aspect-ratio,16 / 9)!important;position:fixed!important}:host([data-sticky][data-sticky-corner=br]){inset:auto 16px 16px auto}:host([data-sticky][data-sticky-corner=bl]){inset:auto auto 16px 16px}:host([data-sticky][data-sticky-corner=tr]){inset:16px 16px auto auto}:host([data-sticky][data-sticky-corner=tl]){inset:16px auto auto 16px}.hp-caption-layer{z-index:5;pointer-events:none;position:absolute;top:0;right:0;bottom:0;left:0}.hp-caption-bubble{background:var(--hp-caption-bg);width:max-content;max-width:86%;color:var(--hp-caption-text);border-radius:var(--hp-caption-radius);font-size:calc(var(--hp-caption-font-size) * var(--hp-caption-size-multiplier,1));text-align:center;white-space:pre-line;cursor:grab;pointer-events:auto;touch-action:none;-webkit-user-select:none;user-select:none;padding:.3em .6em;line-height:1.4;transition:transform .24s cubic-bezier(.25,.8,.25,1);display:none;position:absolute;bottom:0;left:50%;transform:translate(-50%)}.hp-caption-bubble.hp-caption-visible{display:inline-block}.hp-caption-bubble.hp-caption-dragging,.hp-caption-bubble.hp-caption-no-transition{transition:none}.hp-caption-bubble.hp-caption-dragging{cursor:grabbing}[part=ad-layer][data-nonlinear]{top:auto;bottom:var(--hp-nonlinear-ad-offset,72px);height:var(--hp-nonlinear-ad-height,33%);pointer-events:none}[part=ad-layer][data-nonlinear] *{pointer-events:none}[part=ad-layer][data-nonlinear] :is(iframe,img,a,button){pointer-events:auto}.hp-debug{--hp-panel-text:#f1f1f4;--hp-panel-text-muted:#f1f1f49e;--hp-panel-border:#ffffff1f;text-shadow:none;z-index:30;background:#0e0e12f2;flex-direction:column;min-width:0;font-size:12px;line-height:1.45;display:flex;top:8px;right:8px;bottom:8px;left:8px;overflow:hidden}.hp-debug:focus{outline:none}.hp-debug-header{border-bottom:1px solid var(--hp-panel-border);flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;padding:8px 8px 8px 12px;display:flex}.hp-debug-title{white-space:nowrap;align-items:center;gap:8px;min-width:0;font-size:13px;font-weight:700;display:flex}.hp-debug-count{font-variant-numeric:tabular-nums;background:#f8717138;border-radius:9999px;padding:1px 7px;font-size:11px}.hp-debug-count:empty{display:none}.hp-debug-actions{flex-shrink:0;align-items:center;gap:4px;display:flex}.hp-debug-btn{border:1px solid var(--hp-panel-border);color:inherit;font:inherit;cursor:pointer;background:0 0;border-radius:9999px;padding:4px 10px;font-size:11.5px}.hp-debug-btn:hover:not(:disabled){background:var(--hp-panel-text)}@supports (color:color-mix(in lab,red,red)){.hp-debug-btn:hover:not(:disabled){background:color-mix(in srgb,var(--hp-panel-text) 12%,transparent)}}.hp-debug-btn:disabled{opacity:.45;cursor:default}.hp-debug-list{overscroll-behavior:contain;flex:1;min-height:0;margin:0;padding:6px 12px 10px;list-style:none;overflow:hidden auto}.hp-debug-row{border-left:2px solid var(--hp-panel-text);padding:8px 0 8px 10px}@supports (color:color-mix(in lab,red,red)){.hp-debug-row{border-left:2px solid color-mix(in srgb,var(--hp-panel-text) 25%,transparent)}}.hp-debug-row{min-width:0}.hp-debug-row+.hp-debug-row{margin-top:6px}.hp-debug-row[data-fatal]{border-left-color:#f87171}.hp-debug-row-head{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:2px;display:flex}.hp-debug-time{color:var(--hp-panel-text-muted);font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.hp-debug-source,.hp-debug-fatal{background:var(--hp-panel-text);border-radius:9999px;padding:1px 7px;font-size:10.5px;font-weight:600}@supports (color:color-mix(in lab,red,red)){.hp-debug-source,.hp-debug-fatal{background:color-mix(in srgb,var(--hp-panel-text) 12%,transparent)}}.hp-debug-source[data-source=ads]{background:#f5c4513d}.hp-debug-source[data-source=stream],.hp-debug-source[data-source=media]{background:#60a5fa3d}.hp-debug-fatal{background:#f8717147}.hp-debug-message{overflow-wrap:anywhere;font-weight:600}.hp-debug-repeat{color:var(--hp-panel-text-muted);font-weight:500}.hp-debug-details{grid-template-columns:max-content minmax(0,1fr);gap:1px 10px;margin:4px 0 0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;display:grid}.hp-debug-details dt{color:var(--hp-panel-text-muted)}.hp-debug-details dd{overflow-wrap:anywhere;min-width:0;margin:0}.hp-debug-empty{color:var(--hp-panel-text-muted);margin:auto;padding:16px}.hp-debug-empty[hidden]{display:none}.hp-ad-return{z-index:25;color:#fff;cursor:pointer;-webkit-tap-highlight-color:transparent;background:#0e0e12d1;border:1px solid #ffffff40;border-radius:999px;padding:10px 16px;font:600 14px/1.2 system-ui,-apple-system,sans-serif;animation:.2s ease-out hp-ad-return-in;position:absolute;bottom:64px;right:12px}@keyframes hp-ad-return-in{0%{opacity:0;transform:translateY(6px)}}:host([data-audio]) .hp-center-play{display:none}.hp-audio{z-index:1;text-align:left;pointer-events:none;color:#fff;background: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}@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
5
  function W() {
6
6
  if (typeof navigator > "u") return !1;
7
7
  const n = navigator.userAgent, t = /iP(hone|od|ad)/.test(n) || navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1, e = /^((?!chrome|chromium|android|crios|fxios|edg|opr).)*safari/i.test(n);
@@ -11,24 +11,24 @@ function X() {
11
11
  const n = window;
12
12
  return typeof n.MediaSource < "u" || typeof n.ManagedMediaSource < "u";
13
13
  }
14
- function Te(n, t) {
14
+ function be(n, t) {
15
15
  var i;
16
16
  const e = (i = t == null ? void 0 : t.split(";")[0]) == null ? void 0 : i.trim().toLowerCase();
17
17
  return e === "application/vnd.apple.mpegurl" || e === "application/x-mpegurl" || /\.m3u8(?:$|[?#])/i.test(n) ? "hls" : e === "video/mp4" || /\.mp4(?:$|[?#])/i.test(n) ? "mp4" : "unknown";
18
18
  }
19
- class Se {
19
+ class Be {
20
20
  constructor(t, e) {
21
- s(this, "hls", null);
22
- s(this, "video");
21
+ r(this, "hls", null);
22
+ r(this, "video");
23
23
  /** Son yüklenen kaynak — `reload()` (hata ekranındaki "Tekrar dene") için. */
24
- s(this, "last", null);
24
+ r(this, "last", null);
25
25
  /** Native HLS denemesi sürerken (ilk loadedmetadata'ya kadar) — başarısız olursa hls.js'e geçilir. */
26
- s(this, "nativeHlsProbe", null);
27
- s(this, "engineInfo", { engine: "native" });
28
- s(this, "hlsOptions", {});
29
- s(this, "streamTextTracks", /* @__PURE__ */ new Map());
26
+ r(this, "nativeHlsProbe", null);
27
+ r(this, "engineInfo", { engine: "native" });
28
+ r(this, "hlsOptions", {});
29
+ r(this, "streamTextTracks", /* @__PURE__ */ new Map());
30
30
  /** Safari native HLS ses izi dinleyicilerini kaldırır. */
31
- s(this, "nativeAudioCleanup", null);
31
+ r(this, "nativeAudioCleanup", null);
32
32
  this.callbacks = e, this.video = t;
33
33
  }
34
34
  /** `options.hls` — sonraki `load()`'da uygulanır. */
@@ -41,17 +41,17 @@ class Se {
41
41
  }
42
42
  async load(t, e) {
43
43
  this.last = { src: t, type: e }, this.destroy(), this.video.pause();
44
- const i = Te(t, e);
44
+ const i = be(t, e);
45
45
  if (this.callbacks.onLevelsChanged([], -1), this.callbacks.onAudioTracksChanged([], -1), this.streamTextTracks.clear(), this.callbacks.onTextTracksFound([]), i !== "hls") {
46
46
  this.engineInfo = { engine: "native" }, this.video.src = t;
47
47
  return;
48
48
  }
49
- const r = this.hlsOptions.engine ?? "auto", o = this.video.canPlayType("application/vnd.apple.mpegurl") !== "";
50
- if (r === "native" && o) {
49
+ const s = this.hlsOptions.engine ?? "auto", o = this.video.canPlayType("application/vnd.apple.mpegurl") !== "";
50
+ if (s === "native" && o) {
51
51
  this.loadNativeHls(t, "option");
52
52
  return;
53
53
  }
54
- if (r !== "hls.js" && o && (W() || !X())) {
54
+ if (s !== "hls.js" && o && (W() || !X())) {
55
55
  this.loadNativeHls(t, W() ? "apple-native" : "no-mse");
56
56
  return;
57
57
  }
@@ -78,22 +78,22 @@ class Se {
78
78
  */
79
79
  probeNativeHls(t) {
80
80
  if (!X() || this.engineInfo.reason === "hlsjs-failed" || this.engineInfo.reason === "option") return;
81
- const e = () => r(), i = () => {
81
+ const e = () => s(), i = () => {
82
82
  var a, l;
83
83
  const o = ((a = this.video.error) == null ? void 0 : a.code) === 4;
84
- r(), o && ((l = this.nativeAudioCleanup) == null || l.call(this), this.attachHlsJs(t));
85
- }, r = () => {
84
+ s(), o && ((l = this.nativeAudioCleanup) == null || l.call(this), this.attachHlsJs(t));
85
+ }, s = () => {
86
86
  this.video.removeEventListener("loadedmetadata", e), this.video.removeEventListener("error", i), this.nativeHlsProbe = null;
87
87
  };
88
- this.video.addEventListener("loadedmetadata", e), this.video.addEventListener("error", i), this.nativeHlsProbe = r;
88
+ this.video.addEventListener("loadedmetadata", e), this.video.addEventListener("error", i), this.nativeHlsProbe = s;
89
89
  }
90
90
  /** Safari native HLS: alternatif ses izleri `video.audioTracks`'te (diğer tarayıcılarda bu API yok). */
91
91
  watchNativeAudioTracks() {
92
92
  const t = this.video.audioTracks;
93
93
  if (!t) return;
94
94
  const e = () => {
95
- const i = Array.from(t, (r, o) => ({ index: o, label: r.label || r.language || `${o + 1}`, lang: r.language }));
96
- this.callbacks.onAudioTracksChanged(i, Array.from(t).findIndex((r) => r.enabled));
95
+ const i = Array.from(t, (s, o) => ({ index: o, label: s.label || s.language || `${o + 1}`, lang: s.language }));
96
+ this.callbacks.onAudioTracksChanged(i, Array.from(t).findIndex((s) => s.enabled));
97
97
  };
98
98
  for (const i of ["addtrack", "removetrack", "change"]) t.addEventListener(i, e);
99
99
  this.nativeAudioCleanup = () => {
@@ -102,72 +102,77 @@ class Se {
102
102
  };
103
103
  }
104
104
  async attachHlsJs(t) {
105
- var p;
105
+ var h;
106
106
  const { default: e } = await import("./hls-BOHE_fg_.js");
107
- if (((p = this.last) == null ? void 0 : p.src) !== t) return;
107
+ if (((h = this.last) == null ? void 0 : h.src) !== t) return;
108
108
  if (!e.isSupported()) {
109
109
  this.engineInfo = { engine: "native-hls", reason: "no-mse" }, this.video.src = t;
110
110
  return;
111
111
  }
112
112
  const i = new e(this.buildHlsConfig());
113
113
  this.hls = i, this.engineInfo = { engine: "hls.js" };
114
- let r = !1, o = !1;
115
- i.on(e.Events.ERROR, (u, d) => {
116
- var h, c, g, b, v, y;
114
+ let s = !1, o = !1;
115
+ i.on(e.Events.ERROR, (c, p) => {
116
+ var m, f, v, x, d, u;
117
117
  if (this.hls === i) {
118
- const f = d;
119
- (y = (v = this.callbacks).onStreamError) == null || y.call(v, {
120
- type: String(d.type),
121
- details: String(d.details),
122
- fatal: !!d.fatal,
123
- url: f.url ?? ((h = f.frag) == null ? void 0 : h.url) ?? ((c = f.context) == null ? void 0 : c.url),
124
- httpStatus: (g = f.response) == null ? void 0 : g.code,
125
- reason: f.reason ?? ((b = f.error) == null ? void 0 : b.message)
118
+ const b = p;
119
+ (u = (d = this.callbacks).onStreamError) == null || u.call(d, {
120
+ type: String(p.type),
121
+ details: String(p.details),
122
+ fatal: !!p.fatal,
123
+ url: b.url ?? ((m = b.frag) == null ? void 0 : m.url) ?? ((f = b.context) == null ? void 0 : f.url),
124
+ httpStatus: (v = b.response) == null ? void 0 : v.code,
125
+ reason: b.reason ?? ((x = b.error) == null ? void 0 : x.message)
126
126
  });
127
127
  }
128
- if (!d.fatal || this.hls !== i) return;
129
- const m = [e.ErrorDetails.MANIFEST_LOAD_ERROR, e.ErrorDetails.MANIFEST_LOAD_TIMEOUT].includes(d.details);
130
- if (!r && m && this.video.canPlayType("application/vnd.apple.mpegurl") !== "") {
128
+ if (!p.fatal || this.hls !== i) return;
129
+ const g = [e.ErrorDetails.MANIFEST_LOAD_ERROR, e.ErrorDetails.MANIFEST_LOAD_TIMEOUT].includes(p.details);
130
+ if (!s && g && this.video.canPlayType("application/vnd.apple.mpegurl") !== "") {
131
131
  i.destroy(), this.hls = null, this.loadNativeHls(t, "hlsjs-failed");
132
132
  return;
133
133
  }
134
- if (d.type === e.ErrorTypes.MEDIA_ERROR && !o) {
134
+ if (p.type === e.ErrorTypes.MEDIA_ERROR && !o) {
135
135
  o = !0, i.recoverMediaError();
136
136
  return;
137
137
  }
138
- i.stopLoad(), this.callbacks.onFatalError(d.type === e.ErrorTypes.NETWORK_ERROR ? "network" : "media");
138
+ i.stopLoad(), this.callbacks.onFatalError(p.type === e.ErrorTypes.NETWORK_ERROR ? "network" : "media");
139
139
  });
140
- const a = () => i.levels.map((u, d) => ({ index: d, height: u.height, bitrate: u.bitrate }));
140
+ const a = () => i.levels.map((c, p) => ({ index: p, height: c.height, bitrate: c.bitrate }));
141
141
  i.on(e.Events.MANIFEST_PARSED, () => {
142
- r = !0, this.callbacks.onLevelsChanged(a(), i.currentLevel);
143
- }), i.on(e.Events.LEVEL_SWITCHED, (u, d) => {
144
- this.callbacks.onLevelsChanged(a(), i.autoLevelEnabled ? -1 : d.level);
145
- });
146
- const l = () => i.audioTracks.map((u, d) => ({ index: d, label: u.name || u.lang || `${d + 1}`, lang: u.lang ?? "" }));
147
- i.on(e.Events.AUDIO_TRACKS_UPDATED, () => this.callbacks.onAudioTracksChanged(l(), i.audioTrack)), i.on(e.Events.AUDIO_TRACK_SWITCHED, (u, d) => this.callbacks.onAudioTracksChanged(l(), d.id)), i.on(e.Events.NON_NATIVE_TEXT_TRACKS_FOUND, (u, d) => {
148
- var m;
149
- for (const h of d.tracks) {
150
- const c = h.subtitleTrack, g = c ? `sub:${c.id}` : `cc:${h._id ?? h.label}`, b = h.kind === "captions" ? "captions" : "subtitles";
151
- this.streamTextTracks.set(g, { id: g, kind: b, label: h.label, lang: (c == null ? void 0 : c.lang) ?? ((m = h.closedCaptions) == null ? void 0 : m.lang) ?? "" });
142
+ s = !0, this.callbacks.onLevelsChanged(a(), i.currentLevel);
143
+ }), i.on(e.Events.LEVEL_SWITCHED, (c, p) => {
144
+ this.callbacks.onLevelsChanged(a(), i.autoLevelEnabled ? -1 : p.level);
145
+ });
146
+ const l = () => i.audioTracks.map((c, p) => ({ index: p, label: c.name || c.lang || `${p + 1}`, lang: c.lang ?? "" }));
147
+ i.on(e.Events.AUDIO_TRACKS_UPDATED, () => this.callbacks.onAudioTracksChanged(l(), i.audioTrack)), i.on(e.Events.AUDIO_TRACK_SWITCHED, (c, p) => this.callbacks.onAudioTracksChanged(l(), p.id)), i.on(e.Events.NON_NATIVE_TEXT_TRACKS_FOUND, (c, p) => {
148
+ var g;
149
+ for (const m of p.tracks) {
150
+ const f = m.subtitleTrack, v = f ? `sub:${f.id}` : `cc:${m._id ?? m.label}`, x = m.kind === "captions" ? "captions" : "subtitles";
151
+ this.streamTextTracks.set(v, { id: v, kind: x, label: m.label, lang: (f == null ? void 0 : f.lang) ?? ((g = m.closedCaptions) == null ? void 0 : g.lang) ?? "" });
152
152
  }
153
153
  this.callbacks.onTextTracksFound([...this.streamTextTracks.values()]);
154
- }), i.on(e.Events.CUES_PARSED, (u, d) => {
155
- const m = d.type === "subtitles" && d.subtitleTrack ? `sub:${d.subtitleTrack.id}` : `cc:${d.track}`;
156
- this.callbacks.onCues(m, d.cues);
154
+ }), i.on(e.Events.CUES_PARSED, (c, p) => {
155
+ const g = p.type === "subtitles" && p.subtitleTrack ? `sub:${p.subtitleTrack.id}` : `cc:${p.track}`;
156
+ this.callbacks.onCues(g, p.cues);
157
157
  }), i.attachMedia(this.video), i.loadSource(t);
158
158
  }
159
159
  buildHlsConfig() {
160
160
  const t = this.hlsOptions.config ?? {}, e = { enableWorker: !0, renderTextTracksNatively: !1, liveDurationInfinity: !0, ...t };
161
161
  if (this.hlsOptions.withCredentials) {
162
- const { xhrSetup: i, fetchSetup: r } = t;
162
+ const { xhrSetup: i, fetchSetup: s } = t;
163
163
  e.xhrSetup = (o, a, l) => (o.withCredentials = !0, i == null ? void 0 : i(o, a, l)), e.fetchSetup = (o, a) => {
164
164
  const l = { ...a, credentials: "include" };
165
- return r ? r(o, l) : new Request(o.url, l);
165
+ return s ? s(o, l) : new Request(o.url, l);
166
166
  };
167
167
  }
168
168
  return e;
169
169
  }
170
170
  /** Son kaynağı baştan yükler — hls.js ile oynayan kaynakta da çalışır (çıplak video.load() blob'u yeniden açamaz). */
171
+ /** Son `load()` edilen kaynak (playlist/dublaj gibi eklentilerin yüklediği dahil). */
172
+ get currentSrc() {
173
+ var t;
174
+ return ((t = this.last) == null ? void 0 : t.src) ?? null;
175
+ }
171
176
  reload() {
172
177
  return this.last ? this.load(this.last.src, this.last.type) : Promise.resolve();
173
178
  }
@@ -185,8 +190,8 @@ class Se {
185
190
  return;
186
191
  }
187
192
  const e = this.video.audioTracks;
188
- e && (e[t] && (e[t].enabled = !0), Array.from(e).forEach((i, r) => {
189
- r !== t && (i.enabled = !1);
193
+ e && (e[t] && (e[t].enabled = !0), Array.from(e).forEach((i, s) => {
194
+ s !== t && (i.enabled = !1);
190
195
  }));
191
196
  }
192
197
  /**
@@ -203,95 +208,142 @@ class Se {
203
208
  (t = this.nativeHlsProbe) == null || t.call(this), (e = this.nativeAudioCleanup) == null || e.call(this), this.hls && (this.hls.destroy(), this.hls = null);
204
209
  }
205
210
  }
206
- function w(n) {
211
+ const V = {
212
+ mp4: "video/mp4",
213
+ m4v: "video/mp4",
214
+ webm: "video/webm",
215
+ ogv: "video/ogg",
216
+ ogg: "video/ogg",
217
+ mov: "video/quicktime",
218
+ mp3: "audio/mpeg",
219
+ m4a: "audio/mp4",
220
+ aac: "audio/aac",
221
+ wav: "audio/wav",
222
+ flac: "audio/flac"
223
+ };
224
+ function fe(n) {
225
+ var s, o;
226
+ const t = be(n.src, n.type);
227
+ if (t !== "unknown") return t;
228
+ const e = (o = (s = n.type) == null ? void 0 : s.split(";")[0]) == null ? void 0 : o.trim().toLowerCase();
229
+ if (e) {
230
+ const a = Object.keys(V).find((l) => V[l] === e);
231
+ if (a) return a;
232
+ }
233
+ const i = /\.([a-z0-9]{2,5})(?:$|[?#])/i.exec(n.src);
234
+ return i ? i[1].toLowerCase() : "other";
235
+ }
236
+ function Re(n, t) {
237
+ const e = [];
238
+ for (const s of n) {
239
+ const o = fe(s), a = e.find((l) => l.format === o);
240
+ a ? a.sources.push(s) : e.push({ format: o, sources: [s] });
241
+ }
242
+ if (!(t != null && t.length)) return e;
243
+ const i = (s) => {
244
+ const o = t.findIndex((a) => a.toLowerCase() === s);
245
+ return o === -1 ? t.length : o;
246
+ };
247
+ return e.sort((s, o) => i(s.format) - i(o.format));
248
+ }
249
+ function ze(n, t) {
250
+ var i;
251
+ if (n.format === "hls") {
252
+ const s = window;
253
+ return !(typeof s.MediaSource < "u" || typeof s.ManagedMediaSource < "u") && t.canPlayType("application/vnd.apple.mpegurl") === "";
254
+ }
255
+ const e = ((i = n.sources.find((s) => s.type)) == null ? void 0 : i.type) ?? V[n.format];
256
+ return !!e && t.canPlayType(e) === "";
257
+ }
258
+ function T(n) {
207
259
  if (!Number.isFinite(n) || n < 0) return "0:00";
208
- 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");
260
+ const t = Math.floor(n), e = Math.floor(t / 3600), i = Math.floor(t % 3600 / 60), s = t % 60, o = e > 0 ? String(i).padStart(2, "0") : String(i), a = String(s).padStart(2, "0");
209
261
  return e > 0 ? `${e}:${o}:${a}` : `${o}:${a}`;
210
262
  }
211
- const Ae = 10, Le = 1;
212
- class Pe {
263
+ const Oe = 10, Ne = 1;
264
+ class Ie {
213
265
  constructor(t, e) {
214
- s(this, "el");
215
- s(this, "trackEl");
216
- s(this, "chaptersEl", null);
217
- s(this, "chapters", []);
266
+ r(this, "el");
267
+ r(this, "trackEl");
268
+ r(this, "chaptersEl", null);
269
+ r(this, "chapters", []);
218
270
  /** İmlecin üstündeki zaman (varsayılan, plugin gerektirmez) — kendi zamanını gösteren plugin'ler `suppressHoverTime` ile gizler. */
219
- s(this, "hoverTimeEl");
220
- s(this, "hoverTimeSuppressors", /* @__PURE__ */ new Set());
221
- s(this, "playedEl");
222
- s(this, "bufferedEl");
223
- s(this, "thumbEl");
224
- s(this, "hoverDotEl");
225
- s(this, "video");
226
- s(this, "labels");
227
- s(this, "dragging", !1);
228
- s(this, "markerEls", []);
229
- s(this, "trackWidth", 0);
230
- s(this, "resizeObserver");
231
- s(this, "rafId", null);
271
+ r(this, "hoverTimeEl");
272
+ r(this, "hoverTimeSuppressors", /* @__PURE__ */ new Set());
273
+ r(this, "playedEl");
274
+ r(this, "bufferedEl");
275
+ r(this, "thumbEl");
276
+ r(this, "hoverDotEl");
277
+ r(this, "video");
278
+ r(this, "labels");
279
+ r(this, "dragging", !1);
280
+ r(this, "markerEls", []);
281
+ r(this, "trackWidth", 0);
282
+ r(this, "resizeObserver");
283
+ r(this, "rafId", null);
232
284
  /** Canlıda hover zamanını başka bir bileşen gösteriyor mu (live-wall-clock tooltip'i) — üst üste binmesin. */
233
- s(this, "liveHoverHandled", !1);
234
- s(this, "onHoverMove", (t) => {
285
+ r(this, "liveHoverHandled", !1);
286
+ r(this, "onHoverMove", (t) => {
235
287
  const e = this.timeline(), i = this.ratioAtClientX(t.clientX);
236
288
  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) {
237
289
  this.hoverTimeEl.removeAttribute("data-visible");
238
290
  return;
239
291
  }
240
- const r = e.start + i * (e.end - e.start);
241
- this.hoverTimeEl.textContent = e.live ? `-${w(e.end - r)}` : w(r), this.hoverTimeEl.setAttribute("data-visible", "");
292
+ const s = e.start + i * (e.end - e.start);
293
+ this.hoverTimeEl.textContent = e.live ? `-${T(e.end - s)}` : T(s), this.hoverTimeEl.setAttribute("data-visible", "");
242
294
  const o = this.hoverTimeEl.offsetWidth, a = Math.min(Math.max(this.layoutXAtClientX(t.clientX) - o / 2, 0), Math.max(this.trackWidth - o, 0));
243
295
  this.hoverTimeEl.style.transform = `translateX(${a}px)`;
244
296
  });
245
- s(this, "onHoverLeave", () => {
297
+ r(this, "onHoverLeave", () => {
246
298
  this.hoverTimeEl.removeAttribute("data-visible"), this.hoverDotEl.removeAttribute("data-visible");
247
299
  });
248
- s(this, "onPointerDown", (t) => {
300
+ r(this, "onPointerDown", (t) => {
249
301
  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);
250
302
  });
251
- s(this, "onPointerMove", (t) => {
303
+ r(this, "onPointerMove", (t) => {
252
304
  this.dragging && this.seekToRatio(this.ratioFromEvent(t));
253
305
  });
254
- s(this, "onPointerUp", (t) => {
306
+ r(this, "onPointerUp", (t) => {
255
307
  this.dragging = !1, this.el.releasePointerCapture(t.pointerId), this.el.removeEventListener("pointermove", this.onPointerMove), this.el.removeEventListener("pointerup", this.onPointerUp);
256
308
  });
257
309
  /** Odaktayken ←/→ sarma süresi (sn) — player'ın klavye kısayoluyla aynı (options.keyboardSeekStep). */
258
- s(this, "keyboardStep", 5);
310
+ r(this, "keyboardStep", 5);
259
311
  /** Odaktayken ok tuşuyla sarıldığında (sn, negatif = geri) — sarma bildirimi için. */
260
- s(this, "onKeyboardSeek", null);
261
- s(this, "onKeyDown", (t) => {
262
- var i, r;
312
+ r(this, "onKeyboardSeek", null);
313
+ r(this, "onKeyDown", (t) => {
314
+ var i, s;
263
315
  const e = this.timeline();
264
- e && (t.key === "ArrowRight" ? (this.video.currentTime = 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()));
316
+ e && (t.key === "ArrowRight" ? (this.video.currentTime = 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), (s = this.onKeyboardSeek) == null || s.call(this, -this.keyboardStep), t.preventDefault()));
265
317
  });
266
- s(this, "startLoop", () => {
318
+ r(this, "startLoop", () => {
267
319
  if (this.rafId !== null) return;
268
320
  const t = () => {
269
321
  this.render(), this.rafId = requestAnimationFrame(t);
270
322
  };
271
323
  this.rafId = requestAnimationFrame(t);
272
324
  });
273
- s(this, "stopLoop", () => {
325
+ r(this, "stopLoop", () => {
274
326
  this.rafId !== null && (cancelAnimationFrame(this.rafId), this.rafId = null), this.render();
275
327
  });
276
- s(this, "render", () => {
328
+ r(this, "render", () => {
277
329
  const t = this.timeline();
278
330
  if (this.el.toggleAttribute("data-no-duration", !t), this.el.toggleAttribute("data-live", !!(t != null && t.live)), !t) {
279
331
  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)";
280
332
  return;
281
333
  }
282
- const e = t.end - t.start, i = (l) => Math.min(1, Math.max(0, (l - t.start) / e)), r = i(this.video.currentTime);
283
- this.thumbEl.style.translate = `calc(${this.xAtRatio(r)}px - 50%) 0`;
334
+ const e = t.end - t.start, i = (l) => Math.min(1, Math.max(0, (l - t.start) / e)), s = i(this.video.currentTime);
335
+ this.thumbEl.style.translate = `calc(${this.xAtRatio(s)}px - 50%) 0`;
284
336
  let o = 0;
285
337
  for (let l = 0; l < this.video.buffered.length; l++)
286
338
  this.video.buffered.start(l) <= this.video.currentTime && (o = Math.max(o, this.video.buffered.end(l)));
287
339
  const a = i(o);
288
340
  if (this.chapters.length)
289
341
  for (const l of this.chapters) {
290
- const p = l.end - l.start, u = (d) => p > 0 ? Math.min(1, Math.max(0, (d - l.start) / p)) : 0;
291
- l.playedEl.style.transform = `scaleX(${u(r)})`, l.bufferedEl.style.transform = `scaleX(${u(a)})`;
342
+ const h = l.end - l.start, c = (p) => h > 0 ? Math.min(1, Math.max(0, (p - l.start) / h)) : 0;
343
+ l.playedEl.style.transform = `scaleX(${c(s)})`, l.bufferedEl.style.transform = `scaleX(${c(a)})`;
292
344
  }
293
345
  else
294
- this.playedEl.style.transform = `scaleX(${r})`, this.bufferedEl.style.transform = `scaleX(${a})`;
346
+ this.playedEl.style.transform = `scaleX(${s})`, this.bufferedEl.style.transform = `scaleX(${a})`;
295
347
  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)));
296
348
  });
297
349
  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");
@@ -310,8 +362,8 @@ class Pe {
310
362
  if (t !== 1 / 0) return null;
311
363
  const { seekable: e } = this.video;
312
364
  if (!e.length) return null;
313
- const i = e.start(0), r = e.end(e.length - 1);
314
- return r - i >= Ae ? { start: i, end: r, live: !0 } : null;
365
+ const i = e.start(0), s = e.end(e.length - 1);
366
+ return s - i >= Oe ? { start: i, end: s, live: !0 } : null;
315
367
  }
316
368
  /** Kendi zamanını gösteren plugin'ler (sprite/segments) varsayılan hover zamanını gizler — keyed set. */
317
369
  suppressHoverTime(t, e) {
@@ -325,10 +377,10 @@ class Pe {
325
377
  const e = this.layoutXAtClientX(t);
326
378
  if (!this.chapters.length) return this.trackWidth > 0 ? Math.min(1, Math.max(0, e / this.trackWidth)) : 0;
327
379
  for (let i = 0; i < this.chapters.length; i++) {
328
- const r = this.chapters[i], o = this.chapters[i + 1], a = o ? o.left : 1 / 0;
380
+ const s = this.chapters[i], o = this.chapters[i + 1], a = o ? o.left : 1 / 0;
329
381
  if (e < a || !o) {
330
- const l = r.width > 0 ? Math.min(1, Math.max(0, (e - r.left) / r.width)) : 0;
331
- return r.start + l * (r.end - r.start);
382
+ const l = s.width > 0 ? Math.min(1, Math.max(0, (e - s.left) / s.width)) : 0;
383
+ return s.start + l * (s.end - s.start);
332
384
  }
333
385
  }
334
386
  return 1;
@@ -336,20 +388,20 @@ class Pe {
336
388
  /** 0–1 zaman oranının seek bar üzerindeki px konumu (thumb için). */
337
389
  xAtRatio(t) {
338
390
  if (!this.chapters.length) return t * this.trackWidth;
339
- 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;
340
- return e.left + r * e.width;
391
+ const e = this.chapters.find((o) => t < o.end) ?? this.chapters[this.chapters.length - 1], i = e.end - e.start, s = i > 0 ? Math.min(1, Math.max(0, (t - e.start) / i)) : 0;
392
+ return e.left + s * e.width;
341
393
  }
342
394
  /** Track'i sıralı, 0→1'i kesintisiz kapsayan oran aralıklarına göre ayrı parçalara böler. */
343
395
  setChapters(t) {
344
396
  if (this.clearChapters(), !t.length) return [];
345
397
  const e = document.createElement("div");
346
398
  return e.className = "hp-chapters", this.chapters = t.map((i) => {
347
- const r = document.createElement("div");
348
- r.className = "hp-chapter", r.setAttribute("part", "segment-band"), r.style.flex = `${Math.max(i.end - i.start, 0)} 1 0px`;
399
+ const s = document.createElement("div");
400
+ s.className = "hp-chapter", s.setAttribute("part", "segment-band"), s.style.flex = `${Math.max(i.end - i.start, 0)} 1 0px`;
349
401
  const o = document.createElement("div");
350
402
  o.className = "hp-chapter-fill hp-chapter-buffered";
351
403
  const a = document.createElement("div");
352
- 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 };
404
+ return a.className = "hp-chapter-fill hp-chapter-played", i.color && (a.style.background = i.color), s.append(o, a), e.appendChild(s), { ...i, el: s, bufferedEl: o, playedEl: a, left: 0, width: 0 };
353
405
  }), this.trackEl.style.display = "none", this.trackEl.after(e), this.chaptersEl = e, this.measureChapters(), this.render(), this.chapters.map((i) => i.el);
354
406
  }
355
407
  clearChapters() {
@@ -373,15 +425,15 @@ class Pe {
373
425
  if (!this.chapters.length) return;
374
426
  const t = this.el.getBoundingClientRect(), e = t.width > 0 ? this.trackWidth / t.width : 1;
375
427
  for (const i of this.chapters) {
376
- const r = i.el.getBoundingClientRect();
377
- i.left = (r.left - t.left) * e, i.width = r.width * e;
428
+ const s = i.el.getBoundingClientRect();
429
+ i.left = (s.left - t.left) * e, i.width = s.width * e;
378
430
  }
379
431
  }
380
432
  seekToRatio(t) {
381
433
  const e = this.timeline();
382
434
  if (!e) return;
383
435
  const i = e.start + t * (e.end - e.start);
384
- this.video.currentTime = e.live ? Math.min(i, e.end - Le) : i, this.render();
436
+ this.video.currentTime = e.live ? Math.min(i, e.end - Ne) : i, this.render();
385
437
  }
386
438
  /** 0–1 arası oranda, seek bar üzerine ince bir işaret çizgisi ekler (ör. loop A/B noktaları). */
387
439
  addMarker(t, e = "") {
@@ -399,63 +451,63 @@ class Pe {
399
451
  this.rafId !== null && cancelAnimationFrame(this.rafId), this.resizeObserver.disconnect(), this.el.removeEventListener("pointermove", this.onHoverMove), this.el.removeEventListener("pointerleave", this.onHoverLeave), this.video.removeEventListener("play", this.startLoop), this.video.removeEventListener("pause", this.stopLoop), this.video.removeEventListener("ended", this.stopLoop), this.video.removeEventListener("timeupdate", this.render), this.video.removeEventListener("progress", this.render), this.video.removeEventListener("loadedmetadata", this.render), this.clearMarkers(), (t = this.chaptersEl) == null || t.remove();
400
452
  }
401
453
  }
402
- function E(n, t = "") {
454
+ function S(n, t = "") {
403
455
  const e = document.createElement("i");
404
456
  return e.className = `hp-icon hp-icon-${n}${t ? ` ${t}` : ""}`, e.setAttribute("aria-hidden", "true"), e;
405
457
  }
406
- function M(n, t) {
458
+ function B(n, t) {
407
459
  n.className = n.className.replace(/hp-icon-[\w-]+/, `hp-icon-${t}`);
408
460
  }
409
- const R = 0.05, Me = 150;
410
- class Be {
461
+ const z = 0.05, Fe = 150;
462
+ class De {
411
463
  constructor(t, e, i) {
412
- s(this, "el");
464
+ r(this, "el");
413
465
  /** Dokunmatikte ses butonu gizli; sessiz oynarken görünen "Sesi aç" rozeti (chrome dışında monte edilir, otomatik gizlenmez). */
414
- s(this, "unmuteBadge");
415
- s(this, "unmuteText");
416
- s(this, "button");
417
- s(this, "iconEl");
418
- s(this, "slider");
419
- s(this, "sliderFill");
420
- s(this, "video");
421
- s(this, "labels");
422
- s(this, "adHooks");
423
- s(this, "dragging", !1);
424
- s(this, "hideTimer", null);
425
- s(this, "openNow", () => {
466
+ r(this, "unmuteBadge");
467
+ r(this, "unmuteText");
468
+ r(this, "button");
469
+ r(this, "iconEl");
470
+ r(this, "slider");
471
+ r(this, "sliderFill");
472
+ r(this, "video");
473
+ r(this, "labels");
474
+ r(this, "adHooks");
475
+ r(this, "dragging", !1);
476
+ r(this, "hideTimer", null);
477
+ r(this, "openNow", () => {
426
478
  this.hideTimer && (clearTimeout(this.hideTimer), this.hideTimer = null), this.slider.style.opacity = "1", this.slider.style.pointerEvents = "auto";
427
479
  });
428
- s(this, "scheduleHide", () => {
480
+ r(this, "scheduleHide", () => {
429
481
  this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = setTimeout(() => {
430
482
  this.hideTimer = null, this.slider.style.opacity = "0", this.slider.style.pointerEvents = "none";
431
- }, Me);
483
+ }, Fe);
432
484
  });
433
- s(this, "onWheel", (t) => {
485
+ r(this, "onWheel", (t) => {
434
486
  if (t.preventDefault(), this.adHooks.isAdActive()) {
435
- const r = this.adHooks.getVolume();
436
- this.adHooks.setVolume(Math.min(1, Math.max(0, r + (t.deltaY < 0 ? R : -R)))), this.render();
487
+ const s = this.adHooks.getVolume();
488
+ this.adHooks.setVolume(Math.min(1, Math.max(0, s + (t.deltaY < 0 ? z : -z)))), this.render();
437
489
  return;
438
490
  }
439
- const e = this.video.muted ? 0 : this.video.volume, i = Math.min(1, Math.max(0, e + (t.deltaY < 0 ? R : -R)));
491
+ const e = this.video.muted ? 0 : this.video.volume, i = Math.min(1, Math.max(0, e + (t.deltaY < 0 ? z : -z)));
440
492
  this.video.volume = i, this.video.muted = i === 0;
441
493
  });
442
- s(this, "onToggleMute", () => {
494
+ r(this, "onToggleMute", () => {
443
495
  if (this.adHooks.isAdActive()) {
444
496
  this.adHooks.toggleMute(), this.render();
445
497
  return;
446
498
  }
447
499
  this.video.muted = !this.video.muted, !this.video.muted && this.video.volume === 0 && (this.video.volume = 0.5);
448
500
  });
449
- s(this, "onSliderPointerDown", (t) => {
501
+ r(this, "onSliderPointerDown", (t) => {
450
502
  this.dragging = !0, this.slider.setPointerCapture(t.pointerId), this.setFromClientY(t.clientY), this.slider.addEventListener("pointermove", this.onSliderPointerMove), this.slider.addEventListener("pointerup", this.onSliderPointerUp);
451
503
  });
452
- s(this, "onSliderPointerMove", (t) => {
504
+ r(this, "onSliderPointerMove", (t) => {
453
505
  this.dragging && this.setFromClientY(t.clientY);
454
506
  });
455
- s(this, "onSliderPointerUp", (t) => {
507
+ r(this, "onSliderPointerUp", (t) => {
456
508
  this.dragging = !1, this.slider.releasePointerCapture(t.pointerId), this.slider.removeEventListener("pointermove", this.onSliderPointerMove), this.slider.removeEventListener("pointerup", this.onSliderPointerUp);
457
509
  });
458
- s(this, "onSliderKeyDown", (t) => {
510
+ r(this, "onSliderKeyDown", (t) => {
459
511
  if (this.adHooks.isAdActive()) {
460
512
  if (t.key === "ArrowUp")
461
513
  this.adHooks.setVolume(Math.min(1, this.adHooks.getVolume() + 0.1)), t.preventDefault();
@@ -468,19 +520,19 @@ class Be {
468
520
  }
469
521
  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());
470
522
  });
471
- s(this, "render", () => {
523
+ r(this, "render", () => {
472
524
  const t = this.adHooks.isAdActive() ? this.adHooks.getVolume() : this.video.muted ? 0 : this.video.volume;
473
525
  this.sliderFill.style.height = `${t * 100}%`, this.slider.setAttribute("aria-valuenow", String(Math.round(t * 100)));
474
526
  const e = t === 0 ? this.labels.unmute : this.labels.mute;
475
527
  this.button.setAttribute("aria-label", e);
476
528
  const i = this.adHooks.isAdActive() || !this.video.paused;
477
- this.unmuteBadge.toggleAttribute("data-visible", t === 0 && i), this.unmuteText.textContent = this.labels.unmute, t === 0 ? M(this.iconEl, "volume-muted") : t < 0.5 ? M(this.iconEl, "volume-low") : M(this.iconEl, "volume-high");
529
+ this.unmuteBadge.toggleAttribute("data-visible", t === 0 && i), this.unmuteText.textContent = this.labels.unmute, t === 0 ? B(this.iconEl, "volume-muted") : t < 0.5 ? B(this.iconEl, "volume-low") : B(this.iconEl, "volume-high");
478
530
  });
479
- this.video = t, this.labels = e, this.adHooks = i, this.el = document.createElement("div"), this.el.className = "hp-volume hp:relative hp:flex hp:items-center", this.unmuteBadge = document.createElement("button"), this.unmuteBadge.type = "button", this.unmuteBadge.className = "hp-unmute-badge", this.unmuteBadge.setAttribute("part", "unmute-badge"), this.unmuteBadge.appendChild(E("volume-muted", "hp:text-base")), this.unmuteText = document.createElement("span"), this.unmuteText.textContent = e.unmute, this.unmuteBadge.appendChild(this.unmuteText), this.unmuteBadge.addEventListener("pointerdown", (o) => o.stopPropagation()), this.unmuteBadge.addEventListener("click", (o) => {
531
+ 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(S("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) => {
480
532
  o.stopPropagation(), this.unmute();
481
- }), this.button = document.createElement("button"), this.button.type = "button", this.button.setAttribute("part", "volume-button"), this.button.className = "hp-chip hp:flex hp:items-center hp:justify-center hp:w-[var(--hp-ctrl-btn-size)] hp:h-[var(--hp-ctrl-btn-size)] hp:cursor-pointer", this.button.setAttribute("aria-label", e.mute), this.button.dataset.shortcut = "M", this.iconEl = E("volume-high", "hp:text-[length:var(--hp-ctrl-icon-size)]"), this.button.appendChild(this.iconEl), this.el.appendChild(this.button), this.slider = document.createElement("div"), this.slider.setAttribute("part", "volume-slider"), this.slider.className = "hp-chip hp:absolute hp:bottom-full hp:left-1/2 hp-center-x hp:mb-2 hp:w-7 hp:h-20 hp:rounded-full hp:cursor-pointer hp:flex hp:items-end hp:justify-center hp:p-1.5 hp:pointer-events-none hp:transition-opacity hp:duration-150 hp:will-change-[opacity]", this.slider.style.opacity = "0", this.slider.style.borderRadius = "9999px", this.slider.setAttribute("role", "slider"), this.slider.setAttribute("tabindex", "0"), this.slider.setAttribute("aria-label", e.volume), this.slider.setAttribute("aria-orientation", "vertical"), this.slider.setAttribute("aria-valuemin", "0"), this.slider.setAttribute("aria-valuemax", "100");
482
- const r = document.createElement("div");
483
- 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();
533
+ }), 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 = S("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");
534
+ const s = document.createElement("div");
535
+ s.className = "hp:relative hp:w-1.5 hp:h-full hp:rounded-full hp:bg-on-surface/25 hp:overflow-hidden", this.slider.appendChild(s), this.sliderFill = document.createElement("div"), this.sliderFill.className = "hp:absolute hp:inset-x-0 hp:bottom-0 hp:bg-accent", s.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();
484
536
  }
485
537
  /** "Sesi aç" rozeti: yalnızca AÇAR (toggle değil) — reklam sırasında reklamın sesini. */
486
538
  unmute() {
@@ -510,57 +562,57 @@ class Be {
510
562
  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();
511
563
  }
512
564
  }
513
- const Re = '<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>', F = 8, C = 8, Q = 100, z = 256;
514
- class ze {
565
+ const He = '<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>', D = 8, A = 8, Y = 100, O = 256;
566
+ class Ge {
515
567
  constructor(t, e, i) {
516
- s(this, "el");
517
- s(this, "button");
518
- s(this, "panel");
519
- s(this, "video");
520
- s(this, "playbackRates");
521
- s(this, "labels");
522
- s(this, "qualities", []);
523
- s(this, "activeQualityLabel");
524
- s(this, "captions", []);
525
- s(this, "activeCaptionLabel");
526
- s(this, "captionAppearance", null);
527
- s(this, "qrResumeToggle", null);
528
- s(this, "open", !1);
568
+ r(this, "el");
569
+ r(this, "button");
570
+ r(this, "panel");
571
+ r(this, "video");
572
+ r(this, "playbackRates");
573
+ r(this, "labels");
574
+ r(this, "qualities", []);
575
+ r(this, "activeQualityLabel");
576
+ r(this, "captions", []);
577
+ r(this, "activeCaptionLabel");
578
+ r(this, "captionAppearance", null);
579
+ r(this, "qrResumeToggle", null);
580
+ r(this, "open", !1);
529
581
  /** Menü açılıp kapanınca — HopePlayerElement açıkken kontrolleri otomatik gizlemez. */
530
- s(this, "onOpenChange", null);
531
- s(this, "panelObserver");
532
- s(this, "currentPanel", "main");
533
- s(this, "submenus", []);
582
+ r(this, "onOpenChange", null);
583
+ r(this, "panelObserver");
584
+ r(this, "currentPanel", "main");
585
+ r(this, "submenus", []);
534
586
  /**
535
587
  * Yön + yükseklik player'a göre: kompakt düzende (buton üst bardaysa) aşağı açılır; her iki yönde de
536
588
  * yükseklik player içinde kalan alanla sınırlı — küçük player'da menü dışarı taşmaz, kendi içinde kayar.
537
589
  */
538
- s(this, "fitToPlayer", () => {
539
- var p;
590
+ r(this, "fitToPlayer", () => {
591
+ var h;
540
592
  if (!this.open) return;
541
593
  const t = this.el.closest(".video-area");
542
594
  if (!t) return;
543
- if ((p = this.el.getRootNode().host) != null && p.hasAttribute("data-audio-compact")) {
595
+ if ((h = this.el.getRootNode().host) != null && h.hasAttribute("data-audio-compact")) {
544
596
  this.fitToViewport();
545
597
  return;
546
598
  }
547
- const e = t.getBoundingClientRect(), i = this.button.getBoundingClientRect(), r = this.el.getBoundingClientRect(), o = !!this.el.closest(".hp-top-bar");
599
+ const e = t.getBoundingClientRect(), i = this.button.getBoundingClientRect(), s = this.el.getBoundingClientRect(), o = !!this.el.closest(".hp-top-bar");
548
600
  this.panel.toggleAttribute("data-drop", o), Object.assign(this.panel.style, { top: "", bottom: "", marginTop: "", marginBottom: "" });
549
- const a = this.panel.scrollHeight, l = (o ? e.bottom - i.bottom : i.top - e.top) - F - C;
550
- if (a <= l || l >= Q) {
551
- this.panel.style.maxHeight = `${Math.min(z, l)}px`;
601
+ const a = this.panel.scrollHeight, l = (o ? e.bottom - i.bottom : i.top - e.top) - D - A;
602
+ if (a <= l || l >= Y) {
603
+ this.panel.style.maxHeight = `${Math.min(O, l)}px`;
552
604
  return;
553
605
  }
554
- this.panel.style.maxHeight = `${Math.min(z, e.height - 2 * C)}px`, o ? Object.assign(this.panel.style, { top: `${e.top + C - r.top}px`, marginTop: "0" }) : Object.assign(this.panel.style, { bottom: `${r.bottom - (e.bottom - C)}px`, marginBottom: "0" });
606
+ this.panel.style.maxHeight = `${Math.min(O, e.height - 2 * A)}px`, o ? Object.assign(this.panel.style, { top: `${e.top + A - s.top}px`, marginTop: "0" }) : Object.assign(this.panel.style, { bottom: `${s.bottom - (e.bottom - A)}px`, marginBottom: "0" });
555
607
  });
556
- s(this, "onDocumentClick", (t) => {
608
+ r(this, "onDocumentClick", (t) => {
557
609
  this.open && !t.composedPath().includes(this.el) && this.close();
558
610
  });
559
- s(this, "backToCaptionSettings", () => {
611
+ r(this, "backToCaptionSettings", () => {
560
612
  this.currentPanel = "captions-settings", this.renderCaptionSettings();
561
613
  });
562
- this.video = t, this.playbackRates = e, this.labels = i, this.activeQualityLabel = i.autoQuality, this.activeCaptionLabel = i.captionsOff, this.el = document.createElement("div"), this.el.className = "hp:relative", this.button = document.createElement("button"), this.button.type = "button", this.button.setAttribute("aria-label", i.settings), this.button.className = "hp-chip hp:flex hp:items-center hp:justify-center hp:w-[var(--hp-ctrl-btn-size)] hp:h-[var(--hp-ctrl-btn-size)] hp:cursor-pointer", this.button.appendChild(E("settings", "hp:text-[length:var(--hp-ctrl-icon-size)]")), this.panel = document.createElement("div"), this.panel.className = "hp-chip hp-chip-panel hp:hidden hp:absolute hp:bottom-full hp:right-0 hp:mb-2 hp:w-48 hp:max-h-64 hp:overflow-y-auto hp:text-sm hp:py-1", this.panelObserver = new MutationObserver(this.fitToPlayer), this.panelObserver.observe(this.panel, { childList: !0 }), this.el.appendChild(this.button), this.el.appendChild(this.panel), this.button.addEventListener("click", (r) => {
563
- r.stopPropagation(), this.toggle();
614
+ 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(S("settings", "hp:text-[length:var(--hp-ctrl-icon-size)]")), this.panel = document.createElement("div"), this.panel.className = "hp-chip hp-chip-panel hp:hidden hp:absolute hp:bottom-full hp:right-0 hp:mb-2 hp:w-48 hp:max-h-64 hp:overflow-y-auto hp:text-sm hp:py-1", this.panelObserver = new MutationObserver(this.fitToPlayer), this.panelObserver.observe(this.panel, { childList: !0 }), this.el.appendChild(this.button), this.el.appendChild(this.panel), this.button.addEventListener("click", (s) => {
615
+ s.stopPropagation(), this.toggle();
564
616
  }), document.addEventListener("click", this.onDocumentClick, !0), this.renderMain();
565
617
  }
566
618
  setQualities(t, e) {
@@ -605,8 +657,8 @@ class ze {
605
657
  fitToViewport() {
606
658
  const t = this.button.getBoundingClientRect();
607
659
  Object.assign(this.panel.style, { top: "", bottom: "", marginTop: "", marginBottom: "" });
608
- const e = this.panel.scrollHeight, i = t.top - F - C, r = window.innerHeight - t.bottom - F - C, o = i < Math.min(e, z) && r > i;
609
- this.panel.toggleAttribute("data-drop", o), this.panel.style.maxHeight = `${Math.max(Q, Math.min(z, o ? r : i))}px`;
660
+ const e = this.panel.scrollHeight, i = t.top - D - A, s = window.innerHeight - t.bottom - D - A, o = i < Math.min(e, O) && s > i;
661
+ this.panel.toggleAttribute("data-drop", o), this.panel.style.maxHeight = `${Math.max(Y, Math.min(O, o ? s : i))}px`;
610
662
  }
611
663
  /** Düzen değişince (ör. kompakt ↔ normal) açık menüyü kapat — eski konumunda asılı kalmasın. */
612
664
  closeMenu() {
@@ -617,14 +669,14 @@ class ze {
617
669
  this.open = !1, this.panel.classList.add("hp:hidden"), (t = this.onOpenChange) == null || t.call(this, !1);
618
670
  }
619
671
  row(t, e, i) {
620
- const r = document.createElement("button");
621
- return r.type = "button", r.className = "hp:flex hp:items-center hp:justify-between hp:w-full hp:px-3 hp:py-2 hp:text-left hp:bg-transparent hp:border-0 hp:cursor-pointer hp:text-on-surface hp:hover:bg-on-surface/10", r.innerHTML = `<span>${t}</span><span class="hp:text-on-surface-muted hp:text-xs hp:flex hp:items-center hp:gap-1">${e}</span>`, r.addEventListener("click", i), r;
672
+ const s = document.createElement("button");
673
+ return s.type = "button", s.className = "hp:flex hp:items-center hp:justify-between hp:w-full hp:px-3 hp:py-2 hp:text-left hp:bg-transparent hp:border-0 hp:cursor-pointer hp:text-on-surface hp:hover:bg-on-surface/10", s.innerHTML = `<span>${t}</span><span class="hp:text-on-surface-muted hp:text-xs hp:flex hp:items-center hp:gap-1">${e}</span>`, s.addEventListener("click", i), s;
622
674
  }
623
675
  backRow(t, e) {
624
676
  const i = document.createElement("button");
625
- i.type = "button", i.className = "hp:flex hp:items-center hp:gap-2 hp:w-full hp:px-3 hp:py-2 hp:text-left hp:bg-transparent hp:border-0 hp:cursor-pointer hp:text-on-surface hp:font-medium hp:hover:bg-on-surface/10", i.appendChild(E("chevron-left", "hp:text-sm"));
626
- const r = document.createElement("span");
627
- return r.textContent = t, i.appendChild(r), i.addEventListener("click", e), i;
677
+ i.type = "button", i.className = "hp:flex hp:items-center hp:gap-2 hp:w-full hp:px-3 hp:py-2 hp:text-left hp:bg-transparent hp:border-0 hp:cursor-pointer hp:text-on-surface hp:font-medium hp:hover:bg-on-surface/10", i.appendChild(S("chevron-left", "hp:text-sm"));
678
+ const s = document.createElement("span");
679
+ return s.textContent = t, i.appendChild(s), i.addEventListener("click", e), i;
628
680
  }
629
681
  render() {
630
682
  if (this.currentPanel === "main") this.renderMain();
@@ -690,7 +742,7 @@ class ze {
690
742
  renderQuality() {
691
743
  this.panel.innerHTML = "", this.panel.appendChild(this.backRow(this.labels.quality, () => this.renderMain()));
692
744
  for (const t of this.qualities) {
693
- const e = t.label === this.activeQualityLabel, i = this.row(t.label, t.locked ? Re : e ? '<i class="hp-icon hp-icon-check"></i>' : "", () => {
745
+ const e = t.label === this.activeQualityLabel, i = this.row(t.label, t.locked ? He : e ? '<i class="hp-icon hp-icon-check"></i>' : "", () => {
694
746
  t.onSelect(), this.close();
695
747
  });
696
748
  t.locked && i.setAttribute("data-locked", ""), this.panel.appendChild(i);
@@ -717,7 +769,7 @@ class ze {
717
769
  }
718
770
  /** Altyazı → Altyazı ayarları: boyut, arka plan / yazı rengi, konumu sıfırla — her satırda o anki değer. */
719
771
  renderCaptionSettings() {
720
- var i, r, o;
772
+ var i, s, o;
721
773
  this.panel.innerHTML = "", this.panel.appendChild(
722
774
  this.backRow(this.labels.captionSettings, () => {
723
775
  this.currentPanel = "captions", this.renderCaptions();
@@ -731,7 +783,7 @@ class ze {
731
783
  this.currentPanel = "captions-size", this.renderCaptionsSize();
732
784
  })
733
785
  ), this.panel.appendChild(
734
- this.row(t.bgColorLabel, e((r = t.getBgColorOptions().find((a) => a.active)) == null ? void 0 : r.value), () => {
786
+ this.row(t.bgColorLabel, e((s = t.getBgColorOptions().find((a) => a.active)) == null ? void 0 : s.value), () => {
735
787
  this.currentPanel = "captions-bg", this.renderCaptionColorPanel("bg");
736
788
  })
737
789
  ), this.panel.appendChild(
@@ -760,16 +812,16 @@ class ze {
760
812
  this.panel.innerHTML = "";
761
813
  const e = this.captionAppearance, i = t === "bg" ? (e == null ? void 0 : e.bgColorLabel) ?? this.labels.captionBgColor : (e == null ? void 0 : e.textColorLabel) ?? this.labels.captionTextColor;
762
814
  if (this.panel.appendChild(this.backRow(i, this.backToCaptionSettings)), !e) return;
763
- const r = document.createElement("div");
764
- r.className = "hp:flex hp:flex-wrap hp:gap-2 hp:px-3 hp:py-2";
815
+ const s = document.createElement("div");
816
+ s.className = "hp:flex hp:flex-wrap hp:gap-2 hp:px-3 hp:py-2";
765
817
  const o = t === "bg" ? e.getBgColorOptions() : e.getTextColorOptions();
766
818
  for (const a of o) {
767
819
  const l = document.createElement("button");
768
820
  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", () => {
769
821
  a.onSelect(), this.render();
770
- }), r.appendChild(l);
822
+ }), s.appendChild(l);
771
823
  }
772
- this.panel.appendChild(r);
824
+ this.panel.appendChild(s);
773
825
  }
774
826
  /** Dil sonradan değişince statik buton etiketini tazeler + mevcut panel zaten güncel `this.labels`'ı okuyarak yeniden render edilir. */
775
827
  refreshLabels() {
@@ -779,138 +831,138 @@ class ze {
779
831
  document.removeEventListener("click", this.onDocumentClick, !0), this.panelObserver.disconnect();
780
832
  }
781
833
  }
782
- function ce(n, t) {
834
+ function ve(n, t) {
783
835
  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;
784
836
  n.currentTime = Math.max(e, Math.min(i, n.currentTime + t));
785
837
  }
786
- const Ne = 15, Ie = 480, Oe = 150, $ = ["waiting", "seeking"], K = ["playing", "canplay", "canplaythrough", "seeked", "pause", "error", "emptied"];
787
- function j(n, t) {
788
- const { btn: e } = P("", `skip-${n}`);
838
+ const Ve = 15, _e = 480, Ue = 150, J = ["waiting", "seeking"], Z = ["playing", "canplay", "canplaythrough", "seeked", "pause", "error", "emptied"];
839
+ function ee(n, t) {
840
+ const { btn: e } = M("", `skip-${n}`);
789
841
  e.classList.add("hp-skip-btn"), e.setAttribute("part", t);
790
842
  const i = document.createElement("span");
791
843
  return i.className = "hp-skip-num", i.setAttribute("aria-hidden", "true"), e.appendChild(i), e.style.display = "none", { btn: e, num: i };
792
844
  }
793
- function T(n, t) {
845
+ function L(n, t) {
794
846
  n.setAttribute("aria-label", t);
795
847
  }
796
- function P(n, t, e) {
848
+ function M(n, t, e) {
797
849
  const i = document.createElement("button");
798
- i.type = "button", T(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";
799
- const r = E(t, "hp:text-[length:var(--hp-ctrl-icon-size)]");
800
- return i.appendChild(r), { btn: i, icon: r };
850
+ i.type = "button", L(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";
851
+ const s = S(t, "hp:text-[length:var(--hp-ctrl-icon-size)]");
852
+ return i.appendChild(s), { btn: i, icon: s };
801
853
  }
802
- class Fe {
803
- constructor(t, e, i, r) {
804
- s(this, "el");
805
- s(this, "seekBar");
806
- s(this, "volumePanel");
807
- s(this, "settingsMenu");
808
- s(this, "video");
809
- s(this, "labels");
810
- s(this, "playButton");
811
- s(this, "playIcon");
812
- s(this, "pipButton");
813
- s(this, "skipBack");
814
- s(this, "skipForward");
854
+ class qe {
855
+ constructor(t, e, i, s) {
856
+ r(this, "el");
857
+ r(this, "seekBar");
858
+ r(this, "volumePanel");
859
+ r(this, "settingsMenu");
860
+ r(this, "video");
861
+ r(this, "labels");
862
+ r(this, "playButton");
863
+ r(this, "playIcon");
864
+ r(this, "pipButton");
865
+ r(this, "skipBack");
866
+ r(this, "skipForward");
815
867
  /** Etkin sarma süreleri (sn); null = buton gizli. */
816
- s(this, "skipSeconds", { back: null, forward: null });
817
- s(this, "seekingEnabled", !0);
818
- s(this, "leftGroup");
819
- s(this, "loadingTimer", null);
868
+ r(this, "skipSeconds", { back: null, forward: null });
869
+ r(this, "seekingEnabled", !0);
870
+ r(this, "leftGroup");
871
+ r(this, "loadingTimer", null);
820
872
  /** Halkayı açık tutan sebepler: 'media' (buffer bekleniyor) ve player'ın verdikleri (ör. 'preroll'). */
821
- s(this, "loadingReasons", /* @__PURE__ */ new Set());
873
+ r(this, "loadingReasons", /* @__PURE__ */ new Set());
822
874
  /** Preroll beklenirken video duraklatılmış olsa da kullanıcı oynatmak istedi — buton "duraklat" görünür. */
823
- s(this, "pendingPlay", !1);
875
+ r(this, "pendingPlay", !1);
824
876
  /** Sarma butonuyla sarıldığında (sn, negatif = geri) — sarma bildirimi için. */
825
- s(this, "onSkip", null);
826
- s(this, "fullscreenButton");
827
- s(this, "fullscreenIcon");
828
- s(this, "timeLabel");
877
+ r(this, "onSkip", null);
878
+ r(this, "fullscreenButton");
879
+ r(this, "fullscreenIcon");
880
+ r(this, "timeLabel");
829
881
  /** Reklam sırasında süre etiketinin yerinde: "Reklam 2/3 · 0:12". */
830
- s(this, "adInfoEl");
831
- s(this, "showRemaining", !1);
882
+ r(this, "adInfoEl");
883
+ r(this, "showRemaining", !1);
832
884
  /** Kompakt düzende (player < 480px) sağ grubun taşındığı üst bar; tam ekran altta kalır. */
833
- s(this, "topEl");
834
- s(this, "bottomRow");
835
- s(this, "rightGroup");
836
- s(this, "fullscreenSlot");
837
- s(this, "compact", !1);
885
+ r(this, "topEl");
886
+ r(this, "bottomRow");
887
+ r(this, "rightGroup");
888
+ r(this, "fullscreenSlot");
889
+ r(this, "compact", !1);
838
890
  /** İnce ses çubuğu (audio.layout: 'compact'): dar ekranda da tek satır — üst bar yok. */
839
- s(this, "forceInline", !1);
891
+ r(this, "forceInline", !1);
840
892
  /** İnce ses çubuğunda başlık / sanatçı (+ çalarken ekolayzır) — boşluk elemanının içinde. */
841
- s(this, "barMetaEl", null);
842
- s(this, "spacerEl");
843
- s(this, "resizeObserver");
844
- s(this, "liveBadge");
845
- s(this, "liveText");
846
- s(this, "adMode", !1);
893
+ r(this, "barMetaEl", null);
894
+ r(this, "spacerEl");
895
+ r(this, "resizeObserver");
896
+ r(this, "liveBadge");
897
+ r(this, "liveText");
898
+ r(this, "adMode", !1);
847
899
  /** Ses modu: tam ekran / PiP yok — dar düzende tam ekran kutusu da boş kalmasın. */
848
- s(this, "audioMode", !1);
849
- s(this, "callbacks");
850
- s(this, "row");
851
- s(this, "extraButtonAnchor");
900
+ r(this, "audioMode", !1);
901
+ r(this, "callbacks");
902
+ r(this, "row");
903
+ r(this, "extraButtonAnchor");
852
904
  /** Süre etiketine tıklama: geçen süre ↔ kalan süre. */
853
- s(this, "onTimeClick", (t) => {
905
+ r(this, "onTimeClick", (t) => {
854
906
  t.stopPropagation(), this.toggleTimeMode();
855
907
  });
856
- s(this, "renderPlayState", () => {
908
+ r(this, "renderPlayState", () => {
857
909
  var e;
858
910
  const t = this.callbacks.isAdActive() ? this.callbacks.adIsPaused() : this.video.paused && !this.pendingPlay;
859
- M(this.playIcon, t ? "play" : "pause"), T(this.playButton, t ? this.labels.play : this.labels.pause), (e = this.barMetaEl) == null || e.toggleAttribute("data-playing", !t && !this.callbacks.isAdActive());
911
+ B(this.playIcon, t ? "play" : "pause"), L(this.playButton, t ? this.labels.play : this.labels.pause), (e = this.barMetaEl) == null || e.toggleAttribute("data-playing", !t && !this.callbacks.isAdActive());
860
912
  });
861
- s(this, "renderTime", () => {
862
- var r, o;
913
+ r(this, "renderTime", () => {
914
+ var s, o;
863
915
  const t = this.video.duration === 1 / 0;
864
916
  if (this.timeLabel.style.display = this.adMode || t ? "none" : "", this.liveBadge.style.display = !this.adMode && t ? "" : "none", !t) {
865
917
  const a = this.video.duration, l = this.video.currentTime;
866
918
  if (this.showRemaining) {
867
- const p = Number.isFinite(a) ? Math.floor(a) : 0, u = Math.max(0, p - Math.floor(l));
868
- this.timeLabel.textContent = `-${w(u)} / ${w(a)}`;
919
+ const h = Number.isFinite(a) ? Math.floor(a) : 0, c = Math.max(0, h - Math.floor(l));
920
+ this.timeLabel.textContent = `-${T(c)} / ${T(a)}`;
869
921
  } else
870
- this.timeLabel.textContent = `${w(l)} / ${w(a)}`;
922
+ this.timeLabel.textContent = `${T(l)} / ${T(a)}`;
871
923
  return;
872
924
  }
873
- const e = ((o = (r = this.callbacks).liveSyncPosition) == null ? void 0 : o.call(r)) ?? this.liveEdge(), i = e !== null && e - this.video.currentTime > Ne;
925
+ const e = ((o = (s = this.callbacks).liveSyncPosition) == null ? void 0 : o.call(s)) ?? this.liveEdge(), i = e !== null && e - this.video.currentTime > Ve;
874
926
  this.liveBadge.toggleAttribute("data-behind", i);
875
927
  });
876
928
  /** Buffer bekleniyor (oynarken takılma ya da buffer'lanmamış bir yere atlama). */
877
- s(this, "onLoadingStart", (t) => {
929
+ r(this, "onLoadingStart", (t) => {
878
930
  t.type === "seeking" && this.video.readyState >= HTMLMediaElement.HAVE_FUTURE_DATA || this.loadingTimer || this.loadingReasons.has("media") || (this.loadingTimer = setTimeout(() => {
879
931
  this.loadingTimer = null, this.setLoading("media", !0);
880
- }, Oe));
932
+ }, Ue));
881
933
  });
882
- s(this, "onLoadingEnd", (t) => {
934
+ r(this, "onLoadingEnd", (t) => {
883
935
  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));
884
936
  });
885
- s(this, "goToLive", () => {
886
- var i, r;
887
- const t = (r = (i = this.callbacks).liveSyncPosition) == null ? void 0 : r.call(i), e = this.liveEdge();
937
+ r(this, "goToLive", () => {
938
+ var i, s;
939
+ const t = (s = (i = this.callbacks).liveSyncPosition) == null ? void 0 : s.call(i), e = this.liveEdge();
888
940
  e === null && t == null || (this.video.currentTime = t ?? Math.max(0, e - 1), this.video.paused && this.video.play().catch(() => {
889
941
  }), this.renderTime());
890
942
  });
891
- 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 Pe(t, r), this.seekBar.el.classList.add("hp:pointer-events-auto"), this.el.appendChild(this.seekBar.el);
943
+ this.video = t, this.callbacks = i, this.labels = s, 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 Ie(t, s), this.seekBar.el.classList.add("hp:pointer-events-auto"), this.el.appendChild(this.seekBar.el);
892
944
  const o = document.createElement("div");
893
945
  o.className = "hp:flex hp:items-center hp:gap-2", this.el.appendChild(o), this.bottomRow = o;
894
946
  const a = document.createElement("div");
895
947
  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;
896
948
  const l = document.createElement("span");
897
949
  l.className = "hp-loading-ring", l.setAttribute("aria-hidden", "true");
950
+ const h = document.createElement("span");
951
+ h.className = "hp-loading-ring-mask", h.appendChild(document.createElement("span")), l.appendChild(h), a.appendChild(l);
952
+ const c = M(s.play, "play", "K");
953
+ 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 = ee("back", "skip-back-button"), this.skipBack.btn.addEventListener("click", () => this.skip(-(this.skipSeconds.back ?? 0))), this.skipForward = ee("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 De(t, s, i.adVolume), a.appendChild(this.volumePanel.el), this.timeLabel = document.createElement("button"), this.timeLabel.type = "button", this.timeLabel.setAttribute("part", "time-display"), this.timeLabel.className = "hp:text-xs hp:text-on-surface hp:tabular-nums hp:whitespace-nowrap hp:px-1 hp:bg-transparent hp:border-0 hp:cursor-pointer hp:select-none hp:p-0 hp:hover:opacity-80 hp:transition-opacity hp:focus-visible:outline-none hp:focus-visible:ring-1 hp:focus-visible:ring-accent hp:rounded", this.timeLabel.textContent = "0:00 / 0:00", this.timeLabel.addEventListener("click", this.onTimeClick), a.appendChild(this.timeLabel), this.adInfoEl = document.createElement("span"), this.adInfoEl.setAttribute("part", "ad-countdown"), this.adInfoEl.className = "hp:text-xs hp:text-on-surface hp:tabular-nums hp:whitespace-nowrap hp:px-1 hp:select-none", this.adInfoEl.setAttribute("aria-live", "off"), this.adInfoEl.style.display = "none", this.liveBadge = document.createElement("button"), this.liveBadge.type = "button", this.liveBadge.className = "hp-live-badge", this.liveBadge.setAttribute("part", "live-badge"), this.liveBadge.setAttribute("aria-label", s.goToLive);
898
954
  const p = document.createElement("span");
899
- p.className = "hp-loading-ring-mask", p.appendChild(document.createElement("span")), l.appendChild(p), a.appendChild(l);
900
- const u = P(r.play, "play", "K");
901
- this.playButton = u.btn, this.playIcon = u.icon, this.playButton.setAttribute("part", "play-pause-button"), this.playButton.addEventListener("click", () => this.togglePlay()), a.appendChild(this.playButton), this.skipBack = j("back", "skip-back-button"), this.skipBack.btn.addEventListener("click", () => this.skip(-(this.skipSeconds.back ?? 0))), this.skipForward = j("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 Be(t, r, i.adVolume), a.appendChild(this.volumePanel.el), this.timeLabel = document.createElement("button"), this.timeLabel.type = "button", this.timeLabel.setAttribute("part", "time-display"), this.timeLabel.className = "hp:text-xs hp:text-on-surface hp:tabular-nums hp:whitespace-nowrap hp:px-1 hp:bg-transparent hp:border-0 hp:cursor-pointer hp:select-none hp:p-0 hp:hover:opacity-80 hp:transition-opacity hp:focus-visible:outline-none hp:focus-visible:ring-1 hp:focus-visible:ring-accent hp:rounded", this.timeLabel.textContent = "0:00 / 0:00", this.timeLabel.addEventListener("click", this.onTimeClick), a.appendChild(this.timeLabel), this.adInfoEl = document.createElement("span"), this.adInfoEl.setAttribute("part", "ad-countdown"), this.adInfoEl.className = "hp:text-xs hp:text-on-surface hp:tabular-nums hp:whitespace-nowrap hp:px-1 hp:select-none", this.adInfoEl.setAttribute("aria-live", "off"), this.adInfoEl.style.display = "none", this.liveBadge = document.createElement("button"), this.liveBadge.type = "button", this.liveBadge.className = "hp-live-badge", this.liveBadge.setAttribute("part", "live-badge"), this.liveBadge.setAttribute("aria-label", r.goToLive);
902
- const d = document.createElement("span");
903
- d.className = "hp-live-dot", this.liveText = document.createElement("span"), this.liveText.textContent = r.live, this.liveBadge.append(d, this.liveText), this.liveBadge.style.display = "none", this.liveBadge.addEventListener("click", this.goToLive), a.appendChild(this.liveBadge), a.appendChild(this.adInfoEl);
955
+ p.className = "hp-live-dot", this.liveText = document.createElement("span"), this.liveText.textContent = s.live, this.liveBadge.append(p, this.liveText), this.liveBadge.style.display = "none", this.liveBadge.addEventListener("click", this.goToLive), a.appendChild(this.liveBadge), a.appendChild(this.adInfoEl);
956
+ const g = document.createElement("div");
957
+ g.className = "hp:flex-1 hp:min-w-0", o.appendChild(g), this.spacerEl = g;
904
958
  const m = document.createElement("div");
905
- m.className = "hp:flex-1 hp:min-w-0", o.appendChild(m), this.spacerEl = m;
906
- const h = document.createElement("div");
907
- h.className = "hp-group hp:flex hp:items-center hp:gap-1 hp:px-1.5 hp:py-1 hp:shrink-0 hp:pointer-events-auto", o.appendChild(h), this.rightGroup = h, this.settingsMenu = new ze(t, e, r), h.appendChild(this.settingsMenu.el), this.extraButtonAnchor = this.settingsMenu.el, this.row = h;
908
- const c = P(r.pip, "pip");
909
- this.pipButton = c.btn, this.pipButton.addEventListener("click", () => this.togglePip()), document.pictureInPictureEnabled || (this.pipButton.style.display = "none"), h.appendChild(this.pipButton);
910
- const g = P(r.fullscreenEnter, "fullscreen-enter", "F");
911
- this.fullscreenButton = g.btn, this.fullscreenIcon = g.icon, this.fullscreenButton.addEventListener("click", () => this.toggleFullscreen()), h.appendChild(this.fullscreenButton), this.topEl = document.createElement("div"), this.topEl.className = "hp-top-bar", this.topEl.setAttribute("part", "top-bar"), this.fullscreenSlot = document.createElement("div"), this.fullscreenSlot.className = "hp-group hp:items-center hp:px-1.5 hp:py-1 hp:shrink-0 hp:pointer-events-auto", this.fullscreenSlot.style.display = "none", o.appendChild(this.fullscreenSlot), this.resizeObserver = new ResizeObserver(() => this.updateLayout()), this.resizeObserver.observe(this.el), t.addEventListener("play", this.renderPlayState), t.addEventListener("pause", this.renderPlayState), t.addEventListener("timeupdate", this.renderTime), t.addEventListener("loadedmetadata", this.renderTime), t.addEventListener("durationchange", this.renderTime), t.addEventListener("progress", this.renderTime), t.addEventListener("emptied", this.renderTime);
912
- for (const b of $) t.addEventListener(b, this.onLoadingStart);
913
- for (const b of K) t.addEventListener(b, this.onLoadingEnd);
959
+ 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 Ge(t, e, s), m.appendChild(this.settingsMenu.el), this.extraButtonAnchor = this.settingsMenu.el, this.row = m;
960
+ const f = M(s.pip, "pip");
961
+ this.pipButton = f.btn, this.pipButton.addEventListener("click", () => this.togglePip()), document.pictureInPictureEnabled || (this.pipButton.style.display = "none"), m.appendChild(this.pipButton);
962
+ const v = M(s.fullscreenEnter, "fullscreen-enter", "F");
963
+ this.fullscreenButton = v.btn, this.fullscreenIcon = v.icon, this.fullscreenButton.addEventListener("click", () => this.toggleFullscreen()), m.appendChild(this.fullscreenButton), this.topEl = document.createElement("div"), this.topEl.className = "hp-top-bar", this.topEl.setAttribute("part", "top-bar"), this.fullscreenSlot = document.createElement("div"), this.fullscreenSlot.className = "hp-group hp:items-center hp:px-1.5 hp:py-1 hp:shrink-0 hp:pointer-events-auto", this.fullscreenSlot.style.display = "none", o.appendChild(this.fullscreenSlot), this.resizeObserver = new ResizeObserver(() => this.updateLayout()), this.resizeObserver.observe(this.el), t.addEventListener("play", this.renderPlayState), t.addEventListener("pause", this.renderPlayState), t.addEventListener("timeupdate", this.renderTime), t.addEventListener("loadedmetadata", this.renderTime), t.addEventListener("durationchange", this.renderTime), t.addEventListener("progress", this.renderTime), t.addEventListener("emptied", this.renderTime);
964
+ for (const x of J) t.addEventListener(x, this.onLoadingStart);
965
+ for (const x of Z) t.addEventListener(x, this.onLoadingEnd);
914
966
  this.renderPlayState(), this.renderTime();
915
967
  }
916
968
  /** 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. */
@@ -918,7 +970,7 @@ class Fe {
918
970
  var i;
919
971
  const t = this.el.getBoundingClientRect().width;
920
972
  if (t === 0) return;
921
- const e = !this.forceInline && t < Ie;
973
+ const e = !this.forceInline && t < _e;
922
974
  e !== this.compact && (this.compact = e, this.settingsMenu.closeMenu(), this.el.toggleAttribute("data-compact", e), (i = this.el.closest(".video-area")) == null || i.toggleAttribute("data-compact", e), e ? (this.fullscreenSlot.appendChild(this.fullscreenButton), this.fullscreenSlot.style.display = this.adMode || this.audioMode ? "none" : "flex", this.topEl.appendChild(this.rightGroup)) : (this.rightGroup.appendChild(this.fullscreenButton), this.bottomRow.insertBefore(this.rightGroup, this.fullscreenSlot), this.fullscreenSlot.style.display = "none"));
923
975
  }
924
976
  /**
@@ -942,7 +994,7 @@ class Fe {
942
994
  this.audioMode = t, this.fullscreenButton.style.display = t ? "none" : "", this.compact && (this.fullscreenSlot.style.display = t || this.adMode ? "none" : "flex"), this.pipButton.style.display = t || !document.pictureInPictureEnabled ? "none" : "";
943
995
  }
944
996
  setFullscreenState(t) {
945
- M(this.fullscreenIcon, t ? "fullscreen-exit" : "fullscreen-enter"), T(this.fullscreenButton, t ? this.labels.fullscreenExit : this.labels.fullscreenEnter);
997
+ B(this.fullscreenIcon, t ? "fullscreen-exit" : "fullscreen-enter"), L(this.fullscreenButton, t ? this.labels.fullscreenExit : this.labels.fullscreenEnter);
946
998
  }
947
999
  /** Dil sonradan değişince (`options.locale`/`labels`) statik (reaktif olarak yeniden render edilmeyen) etiketleri tazeler. */
948
1000
  /** Geri/ileri sarma butonları — `null` süre o butonu gizler. */
@@ -954,17 +1006,17 @@ class Fe {
954
1006
  this.seekingEnabled = t, this.skipBack.btn.disabled = !t, this.skipForward.btn.disabled = !t;
955
1007
  }
956
1008
  renderSkipButtons() {
957
- const t = (e, i, r) => {
958
- e.btn.style.display = i === null || this.adMode ? "none" : "", i !== null && (e.num.textContent = String(i), e.num.toggleAttribute("data-long", String(i).length > 2), T(e.btn, r(i)));
1009
+ const t = (e, i, s) => {
1010
+ e.btn.style.display = i === null || this.adMode ? "none" : "", i !== null && (e.num.textContent = String(i), e.num.toggleAttribute("data-long", String(i).length > 2), L(e.btn, s(i)));
959
1011
  };
960
1012
  t(this.skipBack, this.skipSeconds.back, this.labels.skipBack), t(this.skipForward, this.skipSeconds.forward, this.labels.skipForward);
961
1013
  }
962
1014
  skip(t) {
963
1015
  var e;
964
- !t || !this.seekingEnabled || (ce(this.video, t), (e = this.onSkip) == null || e.call(this, t));
1016
+ !t || !this.seekingEnabled || (ve(this.video, t), (e = this.onSkip) == null || e.call(this, t));
965
1017
  }
966
1018
  refreshLabels() {
967
- this.renderPlayState(), this.renderSkipButtons(), T(this.pipButton, this.labels.pip), T(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();
1019
+ this.renderPlayState(), this.renderSkipButtons(), L(this.pipButton, this.labels.pip), L(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();
968
1020
  }
969
1021
  /** Reklam modu: seek bar, süre ve sağ grup gizlenir; oynat/duraklat + ses kalır. */
970
1022
  setAdMode(t) {
@@ -980,7 +1032,7 @@ class Fe {
980
1032
  this.adInfoEl.style.display = "none", this.adInfoEl.textContent = "";
981
1033
  return;
982
1034
  }
983
- const e = t.total > 1 ? ` ${t.position}/${t.total}` : "", i = t.remaining >= 0 ? ` · ${w(Math.ceil(t.remaining))}` : "";
1035
+ const e = t.total > 1 ? ` ${t.position}/${t.total}` : "", i = t.remaining >= 0 ? ` · ${T(Math.ceil(t.remaining))}` : "";
984
1036
  this.adInfoEl.textContent = `${this.labels.adLabel}${e}${i}`, this.adInfoEl.style.display = "";
985
1037
  }
986
1038
  /** `AdsController`'ın IMA'nın KENDİ UI'ı üzerinden (ör. reklam video'suna tıklama) gelen PAUSED/RESUMED event'leri için — oynat/duraklat ikonunu tazeler. */
@@ -995,8 +1047,8 @@ class Fe {
995
1047
  }
996
1048
  /** Plugin'lerin (loop-section vb.) kontrol çubuğuna kendi butonlarını eklemesi için — ayarlar menüsünden önce yerleştirilir. */
997
1049
  addButton(t, e, i) {
998
- const { btn: r, icon: o } = P(t, e);
999
- return r.addEventListener("click", i), this.row.insertBefore(r, this.extraButtonAnchor), { btn: r, icon: o };
1050
+ const { btn: s, icon: o } = M(t, e);
1051
+ return s.addEventListener("click", i), this.row.insertBefore(s, this.extraButtonAnchor), { btn: s, icon: o };
1000
1052
  }
1001
1053
  toggleTimeMode() {
1002
1054
  this.showRemaining = !this.showRemaining, this.renderTime();
@@ -1055,45 +1107,45 @@ class Fe {
1055
1107
  }
1056
1108
  destroy() {
1057
1109
  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);
1058
- for (const t of $) this.video.removeEventListener(t, this.onLoadingStart);
1059
- for (const t of K) this.video.removeEventListener(t, this.onLoadingEnd);
1110
+ for (const t of J) this.video.removeEventListener(t, this.onLoadingStart);
1111
+ for (const t of Z) this.video.removeEventListener(t, this.onLoadingEnd);
1060
1112
  this.loadingTimer && clearTimeout(this.loadingTimer), this.resizeObserver.disconnect(), this.topEl.remove(), this.seekBar.destroy(), this.settingsMenu.destroy();
1061
1113
  }
1062
1114
  }
1063
- const De = 450, He = 60, Y = 8, D = 6, qe = /* @__PURE__ */ new Set(["seek-bar", "time-display"]);
1064
- function Ve() {
1115
+ const je = 450, $e = 60, te = 8, H = 6, Qe = /* @__PURE__ */ new Set(["seek-bar", "time-display"]);
1116
+ function Ke() {
1065
1117
  return typeof window.matchMedia != "function" || window.matchMedia("(hover: hover)").matches;
1066
1118
  }
1067
- class _e {
1119
+ class We {
1068
1120
  constructor(t) {
1069
- s(this, "el");
1070
- s(this, "labelEl");
1071
- s(this, "keyEl");
1072
- s(this, "showTimer", null);
1073
- s(this, "hideTimer", null);
1074
- s(this, "currentTarget", null);
1075
- s(this, "isOccluded", null);
1121
+ r(this, "el");
1122
+ r(this, "labelEl");
1123
+ r(this, "keyEl");
1124
+ r(this, "showTimer", null);
1125
+ r(this, "hideTimer", null);
1126
+ r(this, "currentTarget", null);
1127
+ r(this, "isOccluded", null);
1076
1128
  /** Gösterim gecikmesi (SHOW_DELAY_MS) içinde bekleyen hedef — `currentTarget` yalnızca gerçekten gösterilince set ediliyor. */
1077
- s(this, "pendingTarget", null);
1078
- s(this, "onMouseOver", (t) => {
1129
+ r(this, "pendingTarget", null);
1130
+ r(this, "onMouseOver", (t) => {
1079
1131
  const e = this.matchTarget(t.target);
1080
1132
  !e || e === this.currentTarget || this.scheduleShow(e);
1081
1133
  });
1082
- s(this, "onMouseOut", (t) => {
1134
+ r(this, "onMouseOut", (t) => {
1083
1135
  const e = this.matchTarget(t.target);
1084
1136
  if (!e || e !== this.currentTarget && e !== this.pendingTarget) return;
1085
1137
  const i = t.relatedTarget;
1086
1138
  i && e.contains(i) || this.scheduleHide();
1087
1139
  });
1088
- s(this, "onFocusIn", (t) => {
1140
+ r(this, "onFocusIn", (t) => {
1089
1141
  const e = this.matchTarget(t.target);
1090
1142
  e && this.show(e);
1091
1143
  });
1092
- s(this, "onFocusOut", (t) => {
1144
+ r(this, "onFocusOut", (t) => {
1093
1145
  const e = this.matchTarget(t.target);
1094
1146
  !e || e !== this.currentTarget || this.hideNow();
1095
1147
  });
1096
- s(this, "hideNow", () => {
1148
+ r(this, "hideNow", () => {
1097
1149
  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");
1098
1150
  });
1099
1151
  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);
@@ -1117,50 +1169,50 @@ class _e {
1117
1169
  var o;
1118
1170
  const e = t, i = (o = e == null ? void 0 : e.closest) == null ? void 0 : o.call(e, 'button[aria-label], [role="slider"][aria-label]');
1119
1171
  if (!i) return null;
1120
- const r = i.getAttribute("part");
1121
- return r && qe.has(r) || i.offsetParent === null && i !== document.activeElement ? null : i;
1172
+ const s = i.getAttribute("part");
1173
+ return s && Qe.has(s) || i.offsetParent === null && i !== document.activeElement ? null : i;
1122
1174
  }
1123
1175
  scheduleShow(t) {
1124
1176
  this.hideTimer && (clearTimeout(this.hideTimer), this.hideTimer = null), this.showTimer && clearTimeout(this.showTimer), this.pendingTarget = t, this.showTimer = setTimeout(() => {
1125
1177
  this.showTimer = null, this.pendingTarget = null, this.show(t);
1126
- }, De);
1178
+ }, je);
1127
1179
  }
1128
1180
  scheduleHide() {
1129
- this.showTimer && (clearTimeout(this.showTimer), this.showTimer = null), this.pendingTarget = null, this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = setTimeout(() => this.hideNow(), He);
1181
+ this.showTimer && (clearTimeout(this.showTimer), this.showTimer = null), this.pendingTarget = null, this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = setTimeout(() => this.hideNow(), $e);
1130
1182
  }
1131
1183
  show(t) {
1132
- if (!Ve()) return;
1184
+ if (!Ke()) return;
1133
1185
  const e = t.getAttribute("aria-label");
1134
1186
  if (!e) return;
1135
1187
  this.currentTarget = t, this.labelEl.textContent = e;
1136
1188
  const i = t.dataset.shortcut;
1137
1189
  i ? (this.keyEl.textContent = i, this.keyEl.style.display = "") : (this.keyEl.textContent = "", this.keyEl.style.display = "none"), this.el.style.visibility = "hidden", this.el.style.opacity = "0", this.el.style.left = "0px", this.el.style.top = "0px", requestAnimationFrame(() => {
1138
- var r;
1139
- this.currentTarget === t && (this.position(t), !((r = this.isOccluded) != null && r.call(this, this.el.getBoundingClientRect())) && (this.el.style.visibility = "visible", this.el.style.opacity = "1"));
1190
+ var s;
1191
+ this.currentTarget === t && (this.position(t), !((s = this.isOccluded) != null && s.call(this, this.el.getBoundingClientRect())) && (this.el.style.visibility = "visible", this.el.style.opacity = "1"));
1140
1192
  });
1141
1193
  }
1142
1194
  position(t) {
1143
- const e = this.mountEl.getBoundingClientRect(), i = t.getBoundingClientRect(), r = this.el.getBoundingClientRect();
1144
- let o = i.top - e.top - r.height - Y;
1145
- o < D && (o = i.bottom - e.top + Y);
1146
- let a = i.left - e.left + i.width / 2 - r.width / 2;
1147
- const l = e.width - r.width - D;
1148
- a = Math.max(D, Math.min(a, l)), this.el.style.top = `${o}px`, this.el.style.left = `${a}px`;
1195
+ const e = this.mountEl.getBoundingClientRect(), i = t.getBoundingClientRect(), s = this.el.getBoundingClientRect();
1196
+ let o = i.top - e.top - s.height - te;
1197
+ o < H && (o = i.bottom - e.top + te);
1198
+ let a = i.left - e.left + i.width / 2 - s.width / 2;
1199
+ const l = e.width - s.width - H;
1200
+ a = Math.max(H, Math.min(a, l)), this.el.style.top = `${o}px`, this.el.style.left = `${a}px`;
1149
1201
  }
1150
1202
  }
1151
- class Ge {
1203
+ class Xe {
1152
1204
  constructor(t, e, i) {
1153
- s(this, "host");
1154
- s(this, "video");
1155
- s(this, "toggleFullscreen");
1205
+ r(this, "host");
1206
+ r(this, "video");
1207
+ r(this, "toggleFullscreen");
1156
1208
  /** ←/→ ve J/L ile sarma süresi (sn) — options.keyboardSeekStep. */
1157
- s(this, "seekStep", 5);
1209
+ r(this, "seekStep", 5);
1158
1210
  /** Klavyeyle sarıldığında (sn, negatif = geri) — sarma bildirimi için. */
1159
- s(this, "onSeek", null);
1211
+ r(this, "onSeek", null);
1160
1212
  /** Space/K'den önce sorulur — true dönerse işlenmiştir (ör. preroll beklemesini iptal). */
1161
- s(this, "interceptTogglePlay", null);
1162
- s(this, "onKeyDown", (t) => {
1163
- var r, o, a;
1213
+ r(this, "interceptTogglePlay", null);
1214
+ r(this, "onKeyDown", (t) => {
1215
+ var s, o, a;
1164
1216
  if (t.defaultPrevented) return;
1165
1217
  const e = t.composedPath()[0];
1166
1218
  if ((t.key === " " || t.key === "Enter") && e instanceof HTMLButtonElement) return;
@@ -1168,7 +1220,7 @@ class Ge {
1168
1220
  switch (t.key) {
1169
1221
  case " ":
1170
1222
  case "k":
1171
- if ((r = this.interceptTogglePlay) != null && r.call(this)) {
1223
+ if ((s = this.interceptTogglePlay) != null && s.call(this)) {
1172
1224
  t.preventDefault();
1173
1225
  break;
1174
1226
  }
@@ -1202,40 +1254,40 @@ class Ge {
1202
1254
  this.host.removeEventListener("keydown", this.onKeyDown);
1203
1255
  }
1204
1256
  }
1205
- class Ue {
1257
+ class Ye {
1206
1258
  constructor(t) {
1207
- s(this, "el");
1208
- s(this, "video");
1209
- s(this, "show", () => this.el.classList.remove("hp:hidden"));
1210
- s(this, "hide", () => this.el.classList.add("hp:hidden"));
1259
+ r(this, "el");
1260
+ r(this, "video");
1261
+ r(this, "show", () => this.el.classList.remove("hp:hidden"));
1262
+ r(this, "hide", () => this.el.classList.add("hp:hidden"));
1211
1263
  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);
1212
1264
  }
1213
1265
  destroy() {
1214
1266
  this.video.removeEventListener("waiting", this.show), this.video.removeEventListener("playing", this.hide), this.video.removeEventListener("canplay", this.hide), this.video.removeEventListener("pause", this.hide);
1215
1267
  }
1216
1268
  }
1217
- const We = '<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>';
1218
- class Xe {
1269
+ const Je = '<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>';
1270
+ class Ze {
1219
1271
  constructor(t, e) {
1220
- s(this, "el");
1221
- s(this, "video");
1222
- s(this, "labels");
1223
- s(this, "messageEl");
1224
- s(this, "codeEl");
1225
- s(this, "retryBtn");
1226
- s(this, "retryText");
1227
- s(this, "onRetry", null);
1228
- s(this, "shouldShow", () => !0);
1272
+ r(this, "el");
1273
+ r(this, "video");
1274
+ r(this, "labels");
1275
+ r(this, "messageEl");
1276
+ r(this, "codeEl");
1277
+ r(this, "retryBtn");
1278
+ r(this, "retryText");
1279
+ r(this, "onRetry", null);
1280
+ r(this, "shouldShow", () => !0);
1229
1281
  /** showStreamError ile açılan hatanın kodu (video.error yokken). */
1230
- s(this, "streamErrorCode", 0);
1231
- s(this, "show", () => {
1282
+ r(this, "streamErrorCode", 0);
1283
+ r(this, "show", () => {
1232
1284
  !this.video.getAttribute("src") && !this.video.querySelector("source") || this.shouldShow() && (this.render(), this.el.setAttribute("data-visible", ""));
1233
1285
  });
1234
1286
  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";
1235
1287
  const i = document.createElement("div");
1236
1288
  i.className = "hp-error-card";
1237
- const r = document.createElement("div");
1238
- r.className = "hp-error-icon", r.appendChild(E("warning")), i.appendChild(r), this.messageEl = document.createElement("p"), this.messageEl.className = "hp-error-message", i.appendChild(this.messageEl), this.codeEl = document.createElement("p"), this.codeEl.className = "hp-error-code", i.appendChild(this.codeEl), this.retryBtn = document.createElement("button"), this.retryBtn.type = "button", this.retryBtn.className = "hp-error-retry", this.retryBtn.innerHTML = We, this.retryText = document.createElement("span"), this.retryText.textContent = e.retry, this.retryBtn.appendChild(this.retryText), this.retryBtn.addEventListener("click", () => {
1289
+ const s = document.createElement("div");
1290
+ s.className = "hp-error-icon", s.appendChild(S("warning")), i.appendChild(s), 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 = Je, this.retryText = document.createElement("span"), this.retryText.textContent = e.retry, this.retryBtn.appendChild(this.retryText), this.retryBtn.addEventListener("click", () => {
1239
1291
  var o;
1240
1292
  this.dismiss(), (o = this.onRetry) == null || o.call(this);
1241
1293
  }), i.appendChild(this.retryBtn), this.el.appendChild(i), t.addEventListener("error", this.show);
@@ -1281,120 +1333,120 @@ class Xe {
1281
1333
  this.video.removeEventListener("error", this.show);
1282
1334
  }
1283
1335
  }
1284
- const H = /* @__PURE__ */ new WeakMap(), ue = /* @__PURE__ */ new WeakSet(), O = /* @__PURE__ */ new WeakMap();
1285
- function Qe(n) {
1286
- return ue.has(n);
1336
+ const _ = /* @__PURE__ */ new WeakMap(), ye = /* @__PURE__ */ new WeakSet(), F = /* @__PURE__ */ new WeakMap();
1337
+ function et(n) {
1338
+ return ye.has(n);
1287
1339
  }
1288
- function me(n, t, e, i, r) {
1289
- let o = H.get(n);
1290
- o || H.set(n, o = /* @__PURE__ */ new Map());
1291
- const a = `${t}\0${e}\0${i}\0${r}`;
1340
+ function xe(n, t, e, i, s) {
1341
+ let o = _.get(n);
1342
+ o || _.set(n, o = /* @__PURE__ */ new Map());
1343
+ const a = `${t}\0${e}\0${i}\0${s}`;
1292
1344
  let l = o.get(a);
1293
- return l || (l = n.addTextTrack(e, i, r), ue.add(l), o.set(a, l)), l;
1345
+ return l || (l = n.addTextTrack(e, i, s), ye.add(l), o.set(a, l)), l;
1294
1346
  }
1295
- function ge(n, t) {
1296
- for (const [e, i] of H.get(n) ?? [])
1347
+ function ke(n, t) {
1348
+ for (const [e, i] of _.get(n) ?? [])
1297
1349
  if (e.startsWith(`${t}\0`)) {
1298
1350
  i.mode = "hidden";
1299
- for (const r of Array.from(i.cues ?? [])) i.removeCue(r);
1351
+ for (const s of Array.from(i.cues ?? [])) i.removeCue(s);
1300
1352
  i.mode = "disabled";
1301
1353
  }
1302
1354
  }
1303
- function $e(n, t) {
1304
- be(n);
1305
- const e = O.get(n), i = [];
1306
- for (const r of t) {
1307
- const o = me(n, "options", "subtitles", r.label, r.srclang);
1308
- o.mode = r.default ? "hidden" : "disabled", i.push({ label: r.label, track: o }), je(n, o, r.src, e);
1355
+ function tt(n, t) {
1356
+ we(n);
1357
+ const e = F.get(n), i = [];
1358
+ for (const s of t) {
1359
+ const o = xe(n, "options", "subtitles", s.label, s.srclang);
1360
+ o.mode = s.default ? "hidden" : "disabled", i.push({ label: s.label, track: o }), st(n, o, s.src, e);
1309
1361
  }
1310
1362
  return i;
1311
1363
  }
1312
- function be(n) {
1313
- O.set(n, (O.get(n) ?? 0) + 1), ge(n, "options");
1364
+ function we(n) {
1365
+ F.set(n, (F.get(n) ?? 0) + 1), ke(n, "options");
1314
1366
  }
1315
- function Ke(n, t) {
1367
+ function it(n, t) {
1316
1368
  let e = null;
1317
- for (const { label: i, track: r } of n) {
1369
+ for (const { label: i, track: s } of n) {
1318
1370
  const o = i === t;
1319
- r.mode = o ? "hidden" : "disabled", o && (e = r);
1371
+ s.mode = o ? "hidden" : "disabled", o && (e = s);
1320
1372
  }
1321
1373
  return e;
1322
1374
  }
1323
- async function je(n, t, e, i) {
1324
- let r;
1375
+ async function st(n, t, e, i) {
1376
+ let s;
1325
1377
  try {
1326
1378
  const o = await fetch(e);
1327
1379
  if (!o.ok) throw new Error(`HTTP ${o.status}`);
1328
- r = await o.text();
1380
+ s = await o.text();
1329
1381
  } catch (o) {
1330
1382
  console.warn("[HopePlayer] altyazı yüklenemedi:", e, o), n.dispatchEvent(new CustomEvent("hp-internal:subtitle-error", { detail: { src: e, message: String(o) } }));
1331
1383
  return;
1332
1384
  }
1333
- if (!(O.get(n) !== i || typeof VTTCue != "function"))
1334
- for (const o of Ze(r)) {
1385
+ if (!(F.get(n) !== i || typeof VTTCue != "function"))
1386
+ for (const o of ot(s)) {
1335
1387
  const a = new VTTCue(o.start, o.end, o.text);
1336
- Je(a, o.settings), t.addCue(a);
1388
+ at(a, o.settings), t.addCue(a);
1337
1389
  }
1338
1390
  }
1339
- const Z = "(?:\\d+:)?\\d{1,2}:\\d{2}(?:[.,]\\d{1,3})?", Ye = new RegExp(`^(${Z})\\s+-->\\s+(${Z})(.*)$`);
1340
- function J(n) {
1391
+ const ie = "(?:\\d+:)?\\d{1,2}:\\d{2}(?:[.,]\\d{1,3})?", rt = new RegExp(`^(${ie})\\s+-->\\s+(${ie})(.*)$`);
1392
+ function se(n) {
1341
1393
  return n.replace(",", ".").split(":").reduce((t, e) => t * 60 + Number(e), 0);
1342
1394
  }
1343
- function Ze(n) {
1395
+ function ot(n) {
1344
1396
  const t = [], e = n.replace(/^/, "").replace(/\r\n?/g, `
1345
1397
  `).split(/\n{2,}/);
1346
1398
  for (const i of e) {
1347
- const r = i.split(`
1348
- `), o = r.findIndex((p) => p.includes("-->"));
1399
+ const s = i.split(`
1400
+ `), o = s.findIndex((h) => h.includes("-->"));
1349
1401
  if (o < 0) continue;
1350
- const a = Ye.exec(r[o].trim());
1402
+ const a = rt.exec(s[o].trim());
1351
1403
  if (!a) continue;
1352
- const l = r.slice(o + 1).join(`
1404
+ const l = s.slice(o + 1).join(`
1353
1405
  `);
1354
- l.trim() && t.push({ start: J(a[1]), end: J(a[2]), settings: a[3].trim(), text: l });
1406
+ l.trim() && t.push({ start: se(a[1]), end: se(a[2]), settings: a[3].trim(), text: l });
1355
1407
  }
1356
1408
  return t;
1357
1409
  }
1358
- function Je(n, t) {
1410
+ function at(n, t) {
1359
1411
  for (const e of t.split(/\s+/)) {
1360
- const [i, r] = e.split(":");
1361
- if (!i || !r) continue;
1362
- const [o] = r.split(",");
1412
+ const [i, s] = e.split(":");
1413
+ if (!i || !s) continue;
1414
+ const [o] = s.split(",");
1363
1415
  try {
1364
1416
  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));
1365
1417
  } catch {
1366
1418
  }
1367
1419
  }
1368
1420
  }
1369
- const I = 6, et = 20, tt = 14, it = 6, st = 10, rt = 3, fe = "hope-caption-row", ve = "hope-caption-font-size", ee = "hope-caption-bg-color", te = "hope-caption-text-color", ot = {
1421
+ const I = 6, nt = 20, lt = 14, ht = 6, pt = 10, dt = 3, Ee = "hope-caption-row", Ce = "hope-caption-font-size", re = "hope-caption-bg-color", oe = "hope-caption-text-color", ct = {
1370
1422
  small: 0.78,
1371
1423
  normal: 1,
1372
1424
  large: 1.35
1373
- }, ie = [
1425
+ }, ae = [
1374
1426
  "rgba(0, 0, 0, 0.75)",
1375
1427
  "rgba(0, 0, 0, 0)",
1376
1428
  "rgba(255, 255, 255, 0.85)",
1377
1429
  "rgba(183, 28, 28, 0.8)",
1378
1430
  "rgba(13, 71, 161, 0.8)",
1379
1431
  "rgba(27, 94, 32, 0.8)"
1380
- ], se = ["#ffffff", "#000000", "#ffeb3b", "#ff5252", "#18ffff", "#69f0ae"];
1381
- function at() {
1432
+ ], ne = ["#ffffff", "#000000", "#ffeb3b", "#ff5252", "#18ffff", "#69f0ae"];
1433
+ function ut() {
1382
1434
  try {
1383
- const n = window.localStorage.getItem(fe), t = n === null ? 0 : Number(n);
1435
+ const n = window.localStorage.getItem(Ee), t = n === null ? 0 : Number(n);
1384
1436
  return Number.isFinite(t) && t >= 0 && t < I ? t : 0;
1385
1437
  } catch {
1386
1438
  return 0;
1387
1439
  }
1388
1440
  }
1389
- function nt() {
1441
+ function gt() {
1390
1442
  try {
1391
- const n = window.localStorage.getItem(ve);
1443
+ const n = window.localStorage.getItem(Ce);
1392
1444
  return n === "small" || n === "normal" || n === "large" ? n : "normal";
1393
1445
  } catch {
1394
1446
  return "normal";
1395
1447
  }
1396
1448
  }
1397
- function re(n, t) {
1449
+ function le(n, t) {
1398
1450
  const e = t[0] ?? "";
1399
1451
  try {
1400
1452
  const i = window.localStorage.getItem(n);
@@ -1403,28 +1455,28 @@ function re(n, t) {
1403
1455
  return e;
1404
1456
  }
1405
1457
  }
1406
- class B {
1407
- constructor(t, e, i, r) {
1408
- s(this, "layerEl");
1409
- s(this, "bubbleEl");
1410
- s(this, "videoArea");
1411
- s(this, "seekBarEl");
1412
- s(this, "labels");
1413
- s(this, "activeTrack", null);
1414
- s(this, "fontSize", nt());
1415
- s(this, "bgColor", re(ee, ie));
1416
- s(this, "textColor", re(te, se));
1417
- s(this, "rowIndex", at());
1418
- s(this, "dragging", !1);
1458
+ class R {
1459
+ constructor(t, e, i, s) {
1460
+ r(this, "layerEl");
1461
+ r(this, "bubbleEl");
1462
+ r(this, "videoArea");
1463
+ r(this, "seekBarEl");
1464
+ r(this, "labels");
1465
+ r(this, "activeTrack", null);
1466
+ r(this, "fontSize", gt());
1467
+ r(this, "bgColor", le(re, ae));
1468
+ r(this, "textColor", le(oe, ne));
1469
+ r(this, "rowIndex", ut());
1470
+ r(this, "dragging", !1);
1419
1471
  /** Kontrol çubuğu görünür mü — görünürken altyazı seek bar'ın üstünde, değilken en altta. */
1420
- s(this, "chromeVisible", !0);
1421
- s(this, "dragStartClientY", 0);
1422
- s(this, "dragStartBottomPx", 0);
1423
- s(this, "dragMoved", !1);
1424
- s(this, "rafId", null);
1425
- s(this, "pendingDeltaPx", 0);
1426
- s(this, "resizeObserver");
1427
- s(this, "onCueChange", () => {
1472
+ r(this, "chromeVisible", !0);
1473
+ r(this, "dragStartClientY", 0);
1474
+ r(this, "dragStartBottomPx", 0);
1475
+ r(this, "dragMoved", !1);
1476
+ r(this, "rafId", null);
1477
+ r(this, "pendingDeltaPx", 0);
1478
+ r(this, "resizeObserver");
1479
+ r(this, "onCueChange", () => {
1428
1480
  var e;
1429
1481
  const t = (e = this.activeTrack) == null ? void 0 : e.activeCues;
1430
1482
  if (!this.activeTrack || !t || t.length === 0) {
@@ -1434,28 +1486,28 @@ class B {
1434
1486
  this.bubbleEl.textContent = "";
1435
1487
  for (let i = 0; i < t.length; i++) {
1436
1488
  i > 0 && this.bubbleEl.appendChild(document.createElement("br"));
1437
- const r = t[i];
1438
- typeof r.getCueAsHTML == "function" ? this.bubbleEl.appendChild(r.getCueAsHTML()) : this.bubbleEl.appendChild(document.createTextNode(r.text ?? ""));
1489
+ const s = t[i];
1490
+ typeof s.getCueAsHTML == "function" ? this.bubbleEl.appendChild(s.getCueAsHTML()) : this.bubbleEl.appendChild(document.createTextNode(s.text ?? ""));
1439
1491
  }
1440
1492
  this.bubbleEl.classList.add("hp-caption-visible");
1441
1493
  });
1442
- s(this, "onPointerDown", (t) => {
1494
+ r(this, "onPointerDown", (t) => {
1443
1495
  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));
1444
1496
  });
1445
- s(this, "onPointerMove", (t) => {
1446
- this.dragging && (this.pendingDeltaPx = t.clientY - this.dragStartClientY, Math.abs(this.pendingDeltaPx) > rt && (this.dragMoved = !0), this.rafId === null && (this.rafId = requestAnimationFrame(this.applyPendingDrag)));
1497
+ r(this, "onPointerMove", (t) => {
1498
+ this.dragging && (this.pendingDeltaPx = t.clientY - this.dragStartClientY, Math.abs(this.pendingDeltaPx) > dt && (this.dragMoved = !0), this.rafId === null && (this.rafId = requestAnimationFrame(this.applyPendingDrag)));
1447
1499
  });
1448
- s(this, "applyPendingDrag", () => {
1500
+ r(this, "applyPendingDrag", () => {
1449
1501
  if (this.rafId = null, !this.dragging) return;
1450
- const { min: t, max: e } = this.bounds(), i = Math.min(e, Math.max(t, this.dragStartBottomPx - this.pendingDeltaPx)), r = this.dragStartBottomPx - i;
1451
- this.bubbleEl.style.transform = `translateX(-50%) translateY(${r}px)`;
1502
+ const { min: t, max: e } = this.bounds(), i = Math.min(e, Math.max(t, this.dragStartBottomPx - this.pendingDeltaPx)), s = this.dragStartBottomPx - i;
1503
+ this.bubbleEl.style.transform = `translateX(-50%) translateY(${s}px)`;
1452
1504
  });
1453
- s(this, "onPointerUp", (t) => {
1505
+ r(this, "onPointerUp", (t) => {
1454
1506
  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;
1455
- 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 * (I - 1));
1507
+ const { min: e, max: i } = this.bounds(), s = Math.min(i, Math.max(e, this.dragStartBottomPx - this.pendingDeltaPx)), o = i > e ? (s - e) / (i - e) : 0, a = Math.round(o * (I - 1));
1456
1508
  this.setRowIndex(a, !0);
1457
1509
  });
1458
- 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();
1510
+ this.videoArea = e, this.seekBarEl = i, this.labels = s, 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", s.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();
1459
1511
  }
1460
1512
  /** `applyOptions()`'tan — hangi track aktif (ya da null = kapalı). */
1461
1513
  setActiveTrack(t) {
@@ -1467,7 +1519,7 @@ class B {
1467
1519
  setFontSize(t) {
1468
1520
  this.fontSize = t, this.applyFontSizeVar(), this.recomputePosition();
1469
1521
  try {
1470
- window.localStorage.setItem(ve, t);
1522
+ window.localStorage.setItem(Ce, t);
1471
1523
  } catch {
1472
1524
  }
1473
1525
  }
@@ -1477,7 +1529,7 @@ class B {
1477
1529
  setBgColor(t) {
1478
1530
  this.bgColor = t, this.bubbleEl.style.setProperty("--hp-caption-bg", t);
1479
1531
  try {
1480
- window.localStorage.setItem(ee, t);
1532
+ window.localStorage.setItem(re, t);
1481
1533
  } catch {
1482
1534
  }
1483
1535
  }
@@ -1487,7 +1539,7 @@ class B {
1487
1539
  setTextColor(t) {
1488
1540
  this.textColor = t, this.bubbleEl.style.setProperty("--hp-caption-text", t);
1489
1541
  try {
1490
- window.localStorage.setItem(te, t);
1542
+ window.localStorage.setItem(oe, t);
1491
1543
  } catch {
1492
1544
  }
1493
1545
  }
@@ -1500,15 +1552,15 @@ class B {
1500
1552
  this.labels = t, this.bubbleEl.setAttribute("aria-label", t.captionDragHandle);
1501
1553
  }
1502
1554
  applyFontSizeVar() {
1503
- this.bubbleEl.style.setProperty("--hp-caption-size-multiplier", String(ot[this.fontSize]));
1555
+ this.bubbleEl.style.setProperty("--hp-caption-size-multiplier", String(ct[this.fontSize]));
1504
1556
  }
1505
1557
  bounds() {
1506
- const t = this.videoArea.getBoundingClientRect(), e = this.seekBarEl.getBoundingClientRect(), r = (this.bubbleEl.getBoundingClientRect().height || 32) + et, o = Math.max(st, 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") ? it : tt))) : o, l = Math.max(a, Math.round(t.height - r));
1558
+ const t = this.videoArea.getBoundingClientRect(), e = this.seekBarEl.getBoundingClientRect(), s = (this.bubbleEl.getBoundingClientRect().height || 32) + nt, o = Math.max(pt, 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") ? ht : lt))) : o, l = Math.max(a, Math.round(t.height - s));
1507
1559
  return { min: a, max: l };
1508
1560
  }
1509
1561
  pxForRow(t) {
1510
- const { min: e, max: i } = this.bounds(), r = t / (I - 1);
1511
- return Math.round(e + r * (i - e));
1562
+ const { min: e, max: i } = this.bounds(), s = t / (I - 1);
1563
+ return Math.round(e + s * (i - e));
1512
1564
  }
1513
1565
  /**
1514
1566
  * Balonun EKRANDA şu an durduğu konum (bottom, px): yazılı `bottom` + o anki transform'un dikey kayması.
@@ -1527,10 +1579,10 @@ class B {
1527
1579
  /** FLIP: bottom anında yazılır, yalnızca transform animasyonlanır — bottom'u animasyonlamak bırakınca zıplatıyordu. */
1528
1580
  setRowIndex(t, e) {
1529
1581
  this.rowIndex = Math.min(I - 1, Math.max(0, t));
1530
- const i = this.pxForRow(this.rowIndex), r = this.visualBottomPx();
1531
- 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"));
1582
+ const i = this.pxForRow(this.rowIndex), s = this.visualBottomPx();
1583
+ e && Math.abs(s - 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 - s}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"));
1532
1584
  try {
1533
- window.localStorage.setItem(fe, String(this.rowIndex));
1585
+ window.localStorage.setItem(Ee, String(this.rowIndex));
1534
1586
  } catch {
1535
1587
  }
1536
1588
  }
@@ -1546,26 +1598,26 @@ class B {
1546
1598
  this.activeTrack && this.activeTrack.removeEventListener("cuechange", this.onCueChange), this.resizeObserver.disconnect(), this.rafId !== null && cancelAnimationFrame(this.rafId), this.bubbleEl.removeEventListener("pointerdown", this.onPointerDown);
1547
1599
  }
1548
1600
  }
1549
- s(B, "BG_COLOR_PRESETS", ie), s(B, "TEXT_COLOR_PRESETS", se);
1550
- class lt {
1601
+ r(R, "BG_COLOR_PRESETS", ae), r(R, "TEXT_COLOR_PRESETS", ne);
1602
+ class mt {
1551
1603
  constructor(t) {
1552
- s(this, "el");
1553
- s(this, "bufferedEl");
1554
- s(this, "playedEl");
1555
- s(this, "visible", !1);
1556
- s(this, "rafId", null);
1557
- s(this, "sync", () => {
1604
+ r(this, "el");
1605
+ r(this, "bufferedEl");
1606
+ r(this, "playedEl");
1607
+ r(this, "visible", !1);
1608
+ r(this, "rafId", null);
1609
+ r(this, "sync", () => {
1558
1610
  this.render(), this.visible && !this.video.paused ? this.start() : this.stop();
1559
1611
  });
1560
- s(this, "render", () => {
1612
+ r(this, "render", () => {
1561
1613
  const t = this.video.duration, e = Number.isFinite(t) && t > 0;
1562
1614
  if (this.el.toggleAttribute("data-disabled", !e), !this.visible || !e) return;
1563
1615
  this.playedEl.style.transform = `scaleX(${Math.min(1, this.video.currentTime / t)})`;
1564
1616
  const { buffered: i } = this.video;
1565
- let r = 0;
1617
+ let s = 0;
1566
1618
  for (let o = 0; o < i.length; o++)
1567
- i.start(o) <= this.video.currentTime && (r = Math.max(r, i.end(o)));
1568
- this.bufferedEl.style.transform = `scaleX(${Math.min(1, r / t)})`;
1619
+ i.start(o) <= this.video.currentTime && (s = Math.max(s, i.end(o)));
1620
+ this.bufferedEl.style.transform = `scaleX(${Math.min(1, s / t)})`;
1569
1621
  });
1570
1622
  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);
1571
1623
  }
@@ -1586,19 +1638,19 @@ class lt {
1586
1638
  this.rafId !== null && cancelAnimationFrame(this.rafId), this.rafId = null;
1587
1639
  }
1588
1640
  }
1589
- const ht = 1e3, pt = 800, dt = '<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>';
1590
- class ct {
1641
+ const bt = 1e3, ft = 800, vt = '<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>';
1642
+ class yt {
1591
1643
  constructor(t) {
1592
- s(this, "el");
1593
- s(this, "valueEl");
1594
- s(this, "unitEl");
1595
- s(this, "liveEl");
1596
- s(this, "total", 0);
1597
- s(this, "lastAt", 0);
1598
- s(this, "hideTimer", null);
1644
+ r(this, "el");
1645
+ r(this, "valueEl");
1646
+ r(this, "unitEl");
1647
+ r(this, "liveEl");
1648
+ r(this, "total", 0);
1649
+ r(this, "lastAt", 0);
1650
+ r(this, "hideTimer", null);
1599
1651
  this.labels = t, this.el = document.createElement("div"), this.el.className = "hp-seek-fb", this.el.setAttribute("part", "seek-feedback");
1600
1652
  const e = document.createElement("span");
1601
- e.className = "hp-seek-fb-chevrons", e.innerHTML = dt.repeat(3);
1653
+ e.className = "hp-seek-fb-chevrons", e.innerHTML = vt.repeat(3);
1602
1654
  const i = document.createElement("span");
1603
1655
  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);
1604
1656
  }
@@ -1606,27 +1658,27 @@ class ct {
1606
1658
  show(t) {
1607
1659
  if (!t) return;
1608
1660
  const e = Date.now(), i = Math.sign(t) === Math.sign(this.total);
1609
- this.total = i && e - this.lastAt < ht ? this.total + t : t, this.lastAt = e;
1610
- const r = Math.round(Math.abs(this.total) * 10) / 10, o = this.total > 0;
1611
- 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(() => {
1661
+ this.total = i && e - this.lastAt < bt ? this.total + t : t, this.lastAt = e;
1662
+ const s = Math.round(Math.abs(this.total) * 10) / 10, o = this.total > 0;
1663
+ this.el.dataset.side = o ? "forward" : "back", this.valueEl.textContent = `${o ? "+" : "−"}${s}`, this.unitEl.textContent = this.labels.secondsShort, this.liveEl.textContent = (o ? this.labels.skipForward : this.labels.skipBack)(s), 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(() => {
1612
1664
  this.el.removeAttribute("data-visible"), this.total = 0;
1613
- }, pt);
1665
+ }, ft);
1614
1666
  }
1615
1667
  destroy() {
1616
1668
  this.hideTimer && clearTimeout(this.hideTimer), this.el.remove();
1617
1669
  }
1618
1670
  }
1619
- class ut {
1671
+ class xt {
1620
1672
  constructor(t) {
1621
- s(this, "el");
1622
- s(this, "open", !1);
1623
- s(this, "close", () => {
1673
+ r(this, "el");
1674
+ r(this, "open", !1);
1675
+ r(this, "close", () => {
1624
1676
  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));
1625
1677
  });
1626
- s(this, "onOutside", (t) => {
1678
+ r(this, "onOutside", (t) => {
1627
1679
  t.composedPath().includes(this.el) || this.close();
1628
1680
  });
1629
- s(this, "onKeyDown", (t) => {
1681
+ r(this, "onKeyDown", (t) => {
1630
1682
  t.key === "Escape" && (t.stopPropagation(), this.close());
1631
1683
  });
1632
1684
  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);
@@ -1636,46 +1688,46 @@ class ut {
1636
1688
  }
1637
1689
  /** `clientX/Y` ekran koordinatı — menü player'ın içinde kalacak şekilde kaydırılır. */
1638
1690
  show(t, e, i) {
1639
- var u;
1691
+ var c;
1640
1692
  this.el.replaceChildren(
1641
- ...i.map((d) => {
1642
- const m = document.createElement(d.onSelect ? "button" : "div");
1643
- m.className = "hp-context-menu-item", d.onSelect ? (m.type = "button", m.setAttribute("role", "menuitem"), m.addEventListener("click", () => {
1644
- this.close(), d.onSelect();
1645
- })) : m.setAttribute("data-info", "");
1646
- const h = document.createElement("span");
1647
- if (h.textContent = d.label, m.appendChild(h), d.meta) {
1648
- const c = document.createElement("span");
1649
- c.className = "hp-context-menu-meta", c.textContent = d.meta, m.appendChild(c);
1693
+ ...i.map((p) => {
1694
+ const g = document.createElement(p.onSelect ? "button" : "div");
1695
+ g.className = "hp-context-menu-item", p.onSelect ? (g.type = "button", g.setAttribute("role", "menuitem"), g.addEventListener("click", () => {
1696
+ this.close(), p.onSelect();
1697
+ })) : g.setAttribute("data-info", "");
1698
+ const m = document.createElement("span");
1699
+ if (m.textContent = p.label, g.appendChild(m), p.meta) {
1700
+ const f = document.createElement("span");
1701
+ f.className = "hp-context-menu-meta", f.textContent = p.meta, g.appendChild(f);
1650
1702
  }
1651
- return m;
1703
+ return g;
1652
1704
  })
1653
1705
  ), this.el.setAttribute("data-open", ""), this.open = !0;
1654
- 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)), p = Math.max(4, Math.min(e - r.top, r.height - a - 4));
1655
- this.el.style.left = `${l}px`, this.el.style.top = `${p}px`, (u = this.el.querySelector("button")) == null || u.focus({ preventScroll: !0 }), document.addEventListener("pointerdown", this.onOutside, !0), document.addEventListener("keydown", this.onKeyDown, !0), window.addEventListener("blur", this.close), window.addEventListener("resize", this.close), window.addEventListener("scroll", this.close, !0);
1706
+ const s = this.container.getBoundingClientRect(), { width: o, height: a } = this.el.getBoundingClientRect(), l = Math.max(4, Math.min(t - s.left, s.width - o - 4)), h = Math.max(4, Math.min(e - s.top, s.height - a - 4));
1707
+ 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);
1656
1708
  }
1657
1709
  destroy() {
1658
1710
  this.close(), this.el.remove();
1659
1711
  }
1660
1712
  }
1661
- const mt = 3e3, oe = 200;
1662
- class gt {
1713
+ const kt = 3e3, he = 200;
1714
+ class wt {
1663
1715
  constructor() {
1664
- s(this, "list", []);
1716
+ r(this, "list", []);
1665
1717
  /** Kayıt eklenince / temizlenince (açık panel canlı güncellenir). */
1666
- s(this, "onChange", null);
1718
+ r(this, "onChange", null);
1667
1719
  }
1668
1720
  get entries() {
1669
1721
  return this.list;
1670
1722
  }
1671
1723
  add(t) {
1672
- var r, o;
1724
+ var s, o;
1673
1725
  const e = Date.now(), i = this.list[this.list.length - 1];
1674
- if (i && e - i.time < mt && i.source === t.source && i.message === t.message && JSON.stringify(i.details ?? {}) === JSON.stringify(t.details ?? {})) {
1675
- i.count = (i.count ?? 1) + 1, i.time = e, (r = this.onChange) == null || r.call(this);
1726
+ if (i && e - i.time < kt && i.source === t.source && i.message === t.message && JSON.stringify(i.details ?? {}) === JSON.stringify(t.details ?? {})) {
1727
+ i.count = (i.count ?? 1) + 1, i.time = e, (s = this.onChange) == null || s.call(this);
1676
1728
  return;
1677
1729
  }
1678
- this.list.push({ time: e, ...t }), this.list.length > oe && this.list.splice(0, this.list.length - oe), (o = this.onChange) == null || o.call(this);
1730
+ this.list.push({ time: e, ...t }), this.list.length > he && this.list.splice(0, this.list.length - he), (o = this.onChange) == null || o.call(this);
1679
1731
  }
1680
1732
  clear() {
1681
1733
  var t;
@@ -1684,19 +1736,60 @@ class gt {
1684
1736
  /** Destek ekibine yapıştırılabilir düz metin. */
1685
1737
  toText() {
1686
1738
  return this.list.map((t) => {
1687
- 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})` : "";
1739
+ const e = Object.entries(t.details ?? {}).filter(([, s]) => s !== void 0 && s !== "").map(([s, o]) => `${s}=${o}`).join(" "), i = t.count && t.count > 1 ? ` (x${t.count})` : "";
1688
1740
  return `${new Date(t.time).toISOString()} [${t.source}]${t.fatal ? " [fatal]" : ""} ${t.message}${i}${e ? ` | ${e}` : ""}`;
1689
1741
  }).join(`
1690
1742
  `);
1691
1743
  }
1692
1744
  }
1693
- const bt = '@font-face{font-family:hope-icons;src:url(data:font/woff2;base64,d09GMgABAAAAAAq4AAsAAAAAIQwAAAprAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACEUAqySKthATYCJANICyYABCAFhC4HgWgbvBwzo8LGASCo7UymWhxkcsp3plRjG4rgPXRJJ9fVhsrU04g9KovY4vJpzld+YERwXGwRdmsE0Nr/Zk+ea/0/eUbEQ4UkolEzJRAyHrJGXayR33zvZk3CzJDWKUloHZmgFSSUioXQOu8CNQvUV7Fz8RXl3Ff898T9fqr+cyupw8KUzXXM2Pc+Y3RIJIjjFblsLVvy9ORekUJtZff2i6NK8HjGMyiHsTj9XUbnwv7/5kp7XCD8BeOOdcGZSfIPsrM5QkzeZXkOQfZVEUhABwAKUDggdBWmwp5bI3wNxmYesGjMYIr2ErZ95PkIqFi1QbLtbd8xjZO6BExkeO9AXDacdLVGaREsKykblAQF2QOGr+GZnLCNToCd/mP/b+whiTzFT+iQ3V55GcVWeDl7aTn8s6k7GfaeIEeKxYmFhovl0aeRhuKiTyui6MwWuvtMILZmMyJXmPauCBKpTL74D15RSVlFVU1dQ1NLm1DAaQ2OX3LaRDYIRJAQQUoEGRHkRFAggiIRlIigTAQVIqgSQY0I6kTQIIImEbSI1bRBx608h/NQqSHkKT7yEZrrR2RPz6ctjRGDG5nJdrydkGbZiKODliytnkQsNhY5zUiogdvU37V1d09VV/e/414obRN7aOtEcNuERYBt776fN6bYNjY63h7GWD6eyOzdToMjKDRrjCXJZr6PdPyOdIdliibDmY2DqAUiWGJXYrWbDrSyw7NEkZiDxS9mCaRGQoacgc4Vp4BTwymzoEiV7PaZGCgBITVhA7JtEsZc5ASmgO2SkAMyMFgQmuq5iujoEyqvKQfh+ukR7o4c9Ap115TXFY7qFaoorcaYFmYCFyoiBGkBrw9PQZUv3e3GSCR5o5UBQA8LWNGSDhBOBCPsUr6WQw5qT07UrqNN4zsQ4OlmQZFen2wp7PHCFdfIKYioSnqbs3Pk8WigFxYQNeXWa0IbetamJN7LPsyq18kUrjtzOiK77e168SK3kAwhq8pHFH0E2shMekcD9uECvCfHMxqJQIxCafozKBVerE1Atb0FbZuybniE50mGWDJmhE8a4XPlCFeJYw+K6N7pjtZhdEynJ3U6GuWotlP9NzzMceyjTscMc0nDXJ5TjnLsQQBE2kRA25Uu056bc3Guzv00q35/s2NVVdXVNWVfE8XGxhZnfXV1b++sw95W2m7MHXcIgm2uy1VR0TF0wsriUh5VSuLUKzGzoYAqoVzXDm0Ogm2nRdc41sTVGggQ7XUWXSh3kOjR8GZS0i4NL6TUQCoshWvmQL3wmWstTCYUjGn1s4Ga9/gWSblci2NEZu58tHd2LLw71dOjP9jOQ0+Drd5R+1jgk4rnOo2qkX/55OIpo0pBCZg/vx40NI+GyPM2iJ6KUOblTr92xmfF2KzavOf/0LpOlQ/ELz1GcdPDYYhvaNSjw6iqRIdF7mkRC345pqgR2S8gPCyGIqoSC4nCnp3IJIZpG3lpruEwRS3IwfXGpVcd0uCnq7yif/c06tJhXFxEFDAaEeWHPslZ3z+Nw2IfXCJd0GqHKyRediMy8NPoIVoRKcjB72WtBlblT8QteSs5oihS/gURYkVZUpSILLK//5swQZT+3MTuXDyGQPRkf/03YYwqVAF9/6v1Kn+K8+B9WCDBKMbRIBFwzDIl6sg8mgWuFrcVeArvNKm3HsuyqHGXTNBTl0ffUumpqqqrEQTm27Kevu6Cz0VnzDtWccpph/F3jdEqrrk5jXwa+tWhImBggMGCgl+3qMqEGTUuyaKgWBvWYp6IcjCmJsIJNRKVRdaKmYtpQMMiH6UHHg0Fr8FazAkrGq+niSp6oICj4tjKinI0QobGnjab8Fi7+8wiy+H67e8e6ttyeJyHA4ZeCDlDlmHdj7qSnk9cn+QrCJ+GV1K6Il5CECYWX6RLkXw+tkM0nHhneUW2di9SkLAIsiQoGR35BM4+PpBMJncxoGAKAlBMS5JPJsgSyu2aQstGZVjn2Hm/ghoboGAd+QgVPuRysUlHECWGxLEcldmFXozgeEZ6TrdFyozDykOVqQlbdM+F3H+wxHuH8Jb7/IFTKKho7htfuvDG57eYtzx/44VL433NFQXvC176RgRtFpPnAqv7QpNFX/px6kOge5cgtJpNpuQGd9xkpg1DyDgtjQGC+52MliNeCSup9HNrmRE/gZD4RzLz+ySdUrDkJZyWAd+8qyk2lHg86r7njTrdE60ajWWLn4WawM/ZtAZKw/let8adzehoWFWv15uMXZ9cnzTp9bi+gq665Isatzd/WJqaLnwqkMH6t1g0PPKpXp1M4j6Pp6SB1ZZ1/Ccpvg1pbYGensXFdCpx3nmJVHpxsacnYCsyjOgmgf9nMxu4t4I7m3q/iGXJ+tTJs/a07xHbyoHkCeatcPXZx7qvz36+b8+zizl3hevv+mv03uy+bqwRCnUS4jYyzZvhPt+/Rbaw+006C7LoRhol2khxm5DeRNNR8L93X/be0b/uqg/flbP47J59n2ev7z52dnX4LeZE8sCK7RHf0/zsyWk9yca+6G3aGXyL25A5qScTNIISJ9eLRZYUvwWC+loJzuQYJdoEhivMGmkpIspTODwZdO7HGpvZnHLb79t30cVdjRljyxxG85x/DY2ZrsaLL9qn1LlTZrNNg/PWxNDa+tbFWn5t6/y6y8WPTBP9jkJH/xWdZzccoxSEWMtZJ/pYkJzh4FiYJEsIT2rXthduO+20tXUDA60uVz4nrm9r/KVZt3baabfd9/7Y+LWKvZSmS+3KteNj7zdcxQGAo+gsB+X56HHIjIp1mzb9aLF0vF56bE6jQuU9pJNN3NPpro2XARycHu8OSV1dUqh7/HFrnxVD6PPGEzljOYm41wchzl+mpyeggcgJJiETQ5IncpJJyqQkx/0oJBbZE0Eo4pEtBGZQ+hgROPf/LQAAAKhnqTYAAKDGqBVjwk3USO/XqNP8Ca9Qp0x4iZqecBY1NuFLav2ubqbCAPx/iPqWusMQf5ehV8LuRaEL+7C0Ho6fZn1ApQE1+0AAPNz25r/zRW2/MlHVBNycf+4uvLuNUXIsOvAfhHfS3Ked1y/GzZ3Y+xPQCZv0tCdWaBozPLbl/dA0CDGOTBQXCDENpTZsM8cp5KrmoaBiFSoWrDlwVddxqZCVBT1XDUg0PIJUz3PbzPEF5AZeQ0HPB6i4/wf/QHM8hKdGIq+ckZA/1J3XKSMjD/IjZSdB7dbbgtvxLnDShSt1uKh8rPcVq2ySVr1JKOy9qJjkj01ZN6XEx83Grv7SayMtGogItuIYiICMD1Cj46Gl0gbz1X9AQobbbb6yw2ylbN9pkFxaK2DVuR9wgZJxRI09QoGFYpEgWihvzXhkenjInEbxnv7ADArWmgaZEY82pjkrS9cDS62yrgIwBL+yd9SjPg1oSCMa04SmNKM5LWhJV3RNN3RLd3SPoWnY/C/cn3dMElaebRkaL5lvbOd9Nok5rDgUTteZK3t2ZVAnVw28SBxG3WXuRxcH0evLJHMpLtR5mv9dXB1010J4QlbSSadqfhTftbxqXN3MFqleTgtWqO0KV+NKYmgeBAA=) format("woff2");font-weight:400;font-style:normal;font-display:block}', ae = "hope-player-icon-font";
1694
- function ft() {
1695
- if (typeof document > "u" || document.getElementById(ae)) return;
1745
+ const Et = '@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}', pe = "hope-player-icon-font";
1746
+ function Ct() {
1747
+ if (typeof document > "u" || document.getElementById(pe)) return;
1696
1748
  const n = document.createElement("style");
1697
- n.id = ae, n.textContent = bt, document.head.appendChild(n);
1749
+ n.id = pe, n.textContent = Et, document.head.appendChild(n);
1698
1750
  }
1699
- const ye = {
1751
+ function Tt() {
1752
+ var i;
1753
+ const t = (i = window.adTaxonomy) == null ? void 0 : i.keyValues;
1754
+ if (!t || typeof t != "object") return "";
1755
+ const e = [];
1756
+ for (const [s, o] of Object.entries(t))
1757
+ o == null || o === "" || e.push(`${s}=${o}`);
1758
+ return e.join("&");
1759
+ }
1760
+ function G(n, t = {}) {
1761
+ const e = encodeURIComponent(document.referrer || window.location.href), i = encodeURIComponent(window.location.href), s = Date.now();
1762
+ let o = n;
1763
+ const a = {
1764
+ referrer_url: e,
1765
+ description_url: i,
1766
+ timestamp: s
1767
+ };
1768
+ for (const [l, h] of Object.entries(a)) {
1769
+ const c = `[${l}]`;
1770
+ if (o.includes(c))
1771
+ o = o.replace(c, String(h));
1772
+ else if (!new URLSearchParams(o.split("?")[1]).has(l)) {
1773
+ const p = o.includes("?") ? "&" : "?";
1774
+ o += `${p}${l}=${h}`;
1775
+ }
1776
+ }
1777
+ try {
1778
+ const l = new URL(o);
1779
+ if (l.pathname.includes("/vmap/")) return n;
1780
+ const c = [];
1781
+ t.includeRefreshCount && c.push(`adrefreshCount=${t.adRefreshCount ?? 0}`);
1782
+ const p = Tt();
1783
+ if (p && c.push(p), c.length) {
1784
+ const g = l.searchParams.get("cust_params");
1785
+ l.searchParams.set("cust_params", g ? `${g}&${c.join("&")}` : c.join("&"));
1786
+ }
1787
+ return l.toString();
1788
+ } catch {
1789
+ return o;
1790
+ }
1791
+ }
1792
+ const Te = {
1700
1793
  play: "Oynat",
1701
1794
  pause: "Duraklat",
1702
1795
  mute: "Sessize al",
@@ -1755,6 +1848,7 @@ const ye = {
1755
1848
  rewardedNoFill: "Şu an gösterilecek reklam yok. Biraz sonra tekrar deneyin.",
1756
1849
  rewardedOk: "Tamam",
1757
1850
  rewardedUnlocked: "{quality} açıldı",
1851
+ rewardedUnlockedNoAd: "Şu an reklam yoktu — {quality} yine de açıldı",
1758
1852
  rewardedForVideo: "bu video boyunca",
1759
1853
  rewardedForSession: "bu oturum boyunca",
1760
1854
  rewardedForMinutes: "{n} dakika boyunca",
@@ -1792,6 +1886,13 @@ const ye = {
1792
1886
  qrResumeOff: "Kapalı",
1793
1887
  pauseAdLabel: "Sponsorlu",
1794
1888
  pauseAdClose: "Reklamı kapat",
1889
+ adTriggerLabel: "Reklam",
1890
+ castButton: "TV'ye yayınla",
1891
+ airplayButton: "AirPlay",
1892
+ castPlayingOn: "{device} cihazında oynatılıyor",
1893
+ castDeviceFallback: "TV",
1894
+ castAdOnTv: "TV'de reklam oynatılıyor",
1895
+ airplayPlaying: "AirPlay ile oynatılıyor",
1795
1896
  pauseAdResume: "Videoya devam et",
1796
1897
  markerLearnMore: "Daha fazla bilgi",
1797
1898
  markerContinue: "Devam et",
@@ -1806,7 +1907,7 @@ const ye = {
1806
1907
  liveClock: "Canlı saat",
1807
1908
  live: "CANLI",
1808
1909
  goToLive: "Canlıya git"
1809
- }, vt = {
1910
+ }, St = {
1810
1911
  play: "Play",
1811
1912
  pause: "Pause",
1812
1913
  mute: "Mute",
@@ -1865,6 +1966,7 @@ const ye = {
1865
1966
  rewardedNoFill: "No ad is available right now. Please try again in a moment.",
1866
1967
  rewardedOk: "OK",
1867
1968
  rewardedUnlocked: "{quality} unlocked",
1969
+ rewardedUnlockedNoAd: "No ad right now — {quality} unlocked anyway",
1868
1970
  rewardedForVideo: "for this video",
1869
1971
  rewardedForSession: "for this session",
1870
1972
  rewardedForMinutes: "for {n} minutes",
@@ -1902,6 +2004,13 @@ const ye = {
1902
2004
  qrResumeOff: "Off",
1903
2005
  pauseAdLabel: "Sponsored",
1904
2006
  pauseAdClose: "Close ad",
2007
+ adTriggerLabel: "Advertisement",
2008
+ castButton: "Cast to TV",
2009
+ airplayButton: "AirPlay",
2010
+ castPlayingOn: "Playing on {device}",
2011
+ castDeviceFallback: "TV",
2012
+ castAdOnTv: "An ad is playing on the TV",
2013
+ airplayPlaying: "Playing via AirPlay",
1905
2014
  pauseAdResume: "Resume video",
1906
2015
  markerLearnMore: "Learn more",
1907
2016
  markerContinue: "Continue",
@@ -1916,38 +2025,38 @@ const ye = {
1916
2025
  liveClock: "Live clock",
1917
2026
  live: "LIVE",
1918
2027
  goToLive: "Go to live"
1919
- }, yt = { tr: ye, en: vt };
1920
- function xe(n, t) {
1921
- return { ...yt[n ?? "tr"] ?? ye, ...t };
2028
+ }, At = { tr: Te, en: St };
2029
+ function Se(n, t) {
2030
+ return { ...At[n ?? "tr"] ?? Te, ...t };
1922
2031
  }
1923
- function xt(n, t, e) {
1924
- Object.assign(n, xe(t, e));
2032
+ function Lt(n, t, e) {
2033
+ Object.assign(n, Se(t, e));
1925
2034
  }
1926
- const q = 8e3;
1927
- function kt(n) {
2035
+ const U = 8e3;
2036
+ function Pt(n) {
1928
2037
  var t;
1929
2038
  return (t = n.live) != null && t.scte35 && !n.adTagPreroll && !n.adTagVmap ? !1 : !!(n.adTagPreroll || n.adTagVmap);
1930
2039
  }
1931
- class wt {
2040
+ class Mt {
1932
2041
  constructor(t) {
1933
2042
  /** Kapı kurulu (preroll bekleniyor) mu. */
1934
- s(this, "armed", !1);
2043
+ r(this, "armed", !1);
1935
2044
  /** Kapı kuruluyken kullanıcı / autoplay oynatmak istedi mi. */
1936
- s(this, "playIntent", !1);
2045
+ r(this, "playIntent", !1);
1937
2046
  /** Kapının kendi pause() çağrısının ürettiği 'pause' olayı yutulsun. */
1938
- s(this, "swallowNextPause", !1);
1939
- s(this, "timeoutMs", q);
1940
- s(this, "timer", null);
2047
+ r(this, "swallowNextPause", !1);
2048
+ r(this, "timeoutMs", U);
2049
+ r(this, "timer", null);
1941
2050
  /** İlk oynatma isteği (reklam plugin'i bekleyen preroll'u başlatır). */
1942
- s(this, "onPlayIntent", null);
2051
+ r(this, "onPlayIntent", null);
1943
2052
  /** Zaman aşımı — reklam plugin'i geç gelecek cevabı iptal eder. Kapı bundan sonra içeriği başlatarak açılır. */
1944
- s(this, "onTimeout", null);
2053
+ r(this, "onTimeout", null);
1945
2054
  /** "Preroll bekleniyor" durumu değişti (UI: yükleme halkası, merkez buton). */
1946
- s(this, "onWaitChange", null);
1947
- s(this, "onPlay", (t) => {
2055
+ r(this, "onWaitChange", null);
2056
+ r(this, "onPlay", (t) => {
1948
2057
  this.armed && (t.stopImmediatePropagation(), this.swallowNextPause = !0, this.video.pause(), this.registerIntent());
1949
2058
  });
1950
- s(this, "onPause", (t) => {
2059
+ r(this, "onPause", (t) => {
1951
2060
  this.swallowNextPause && (this.swallowNextPause = !1, t.stopImmediatePropagation());
1952
2061
  });
1953
2062
  this.video = t, t.addEventListener("play", this.onPlay), t.addEventListener("pause", this.onPause);
@@ -1962,7 +2071,7 @@ class wt {
1962
2071
  get hasPlayIntent() {
1963
2072
  return this.playIntent;
1964
2073
  }
1965
- arm(t = q) {
2074
+ arm(t = U) {
1966
2075
  this.clearTimer(), this.armed = !0, this.playIntent = !1, this.timeoutMs = t;
1967
2076
  }
1968
2077
  /**
@@ -1999,24 +2108,34 @@ class wt {
1999
2108
  this.timer && clearTimeout(this.timer), this.timer = null;
2000
2109
  }
2001
2110
  }
2002
- const Et = [
2111
+ const Bt = [
2003
2112
  "https://imasdk.googleapis.com",
2004
2113
  "https://pubads.g.doubleclick.net",
2005
2114
  "https://securepubads.g.doubleclick.net",
2006
2115
  "https://pagead2.googlesyndication.com"
2007
2116
  ];
2008
- let ne = !1;
2009
- function Ct() {
2010
- if (!(ne || typeof document > "u")) {
2011
- ne = !0;
2012
- for (const n of Et) {
2117
+ let de = !1;
2118
+ function Rt() {
2119
+ if (!(de || typeof document > "u")) {
2120
+ de = !0;
2121
+ for (const n of Bt) {
2013
2122
  if (document.head.querySelector(`link[rel="preconnect"][href="${n}"]`)) continue;
2014
2123
  const t = document.createElement("link");
2015
2124
  t.rel = "preconnect", t.href = n, document.head.appendChild(t);
2016
2125
  }
2017
2126
  }
2018
2127
  }
2019
- const Tt = [0.5, 0.75, 1, 1.25, 1.5, 2], le = 1200, St = 3e3, he = 5e3, At = 10, pe = 10, Lt = 5, de = "stream-audio", N = "1.0.15", Pt = (
2128
+ const zt = [0.5, 0.75, 1, 1.25, 1.5, 2], ce = 1200, Ot = 3e3, ue = 5e3, Nt = 10, ge = 10, It = 5, me = "stream-audio", N = "1.0.16", Ft = {
2129
+ hls: "application/x-mpegurl",
2130
+ mp4: "video/mp4",
2131
+ webm: "video/webm",
2132
+ mp3: "audio/mpeg",
2133
+ m4a: "audio/mp4",
2134
+ aac: "audio/aac",
2135
+ ogg: "audio/ogg",
2136
+ wav: "audio/wav",
2137
+ flac: "audio/flac"
2138
+ }, Dt = (
2020
2139
  /* html */
2021
2140
  `
2022
2141
  <div class="video-area">
@@ -2027,169 +2146,181 @@ const Tt = [0.5, 0.75, 1, 1.25, 1.5, 2], le = 1200, St = 3e3, he = 5e3, At = 10,
2027
2146
  </div>
2028
2147
  `
2029
2148
  );
2030
- function Mt(n) {
2149
+ function Ht(n) {
2031
2150
  if (typeof n == "number") return Number.isFinite(n) && n > 0 ? String(n) : null;
2032
2151
  if (typeof n != "string") return null;
2033
2152
  const t = n.trim().match(/^(\d+(?:\.\d+)?)\s*(?:[:/]\s*(\d+(?:\.\d+)?))?$/);
2034
2153
  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];
2035
2154
  }
2036
- class ke extends HTMLElement {
2155
+ class Ae extends HTMLElement {
2037
2156
  constructor() {
2038
2157
  super();
2039
- s(this, "root");
2040
- s(this, "videoArea");
2041
- s(this, "videoEl");
2042
- s(this, "adLayerEl");
2043
- s(this, "chromeEl");
2044
- s(this, "centerPlayButton");
2045
- s(this, "captionRenderer");
2158
+ r(this, "root");
2159
+ r(this, "videoArea");
2160
+ r(this, "videoEl");
2161
+ r(this, "adLayerEl");
2162
+ r(this, "chromeEl");
2163
+ r(this, "centerPlayButton");
2164
+ r(this, "captionRenderer");
2046
2165
  /** options.miniProgress açıkken kurulur. */
2047
- s(this, "miniProgress", null);
2048
- s(this, "chromeVisible", !0);
2049
- s(this, "sourceManager");
2050
- s(this, "controlBar");
2051
- s(this, "tooltip");
2052
- s(this, "keyboard");
2053
- s(this, "loadingSpinner");
2166
+ r(this, "miniProgress", null);
2167
+ r(this, "chromeVisible", !0);
2168
+ r(this, "sourceManager");
2169
+ r(this, "controlBar");
2170
+ r(this, "tooltip");
2171
+ r(this, "keyboard");
2172
+ r(this, "loadingSpinner");
2054
2173
  /**
2055
2174
  * Preroll kapısı — reklam plugin'i yüklenmeden önce kurulur ki autoplay / ilk play araya kaçmasın.
2056
2175
  * Video'nun 'play'/'pause' dinleyicilerinin İLKİ olmalı (yuttuğu olayları UI ve hp:play görmesin).
2057
2176
  */
2058
- s(this, "prerollGate");
2177
+ r(this, "prerollGate");
2059
2178
  /** Ads plugin kurulumu sürüyor — erken başlatılan kurulum ile sonraki bekleme aynı promise'i paylaşır. */
2060
- s(this, "adsInstall", null);
2179
+ r(this, "adsInstall", null);
2061
2180
  /** Yükleme halkası açık (medya takıldı / preroll bekleniyor) — kontroller bu sırada otomatik gizlenmez. */
2062
- s(this, "loadingActive", !1);
2063
- s(this, "errorScreen");
2181
+ r(this, "loadingActive", !1);
2182
+ r(this, "errorScreen");
2064
2183
  /** İleri/geri sarmada sağda/solda beliren anlık bildirim. */
2065
- s(this, "seekFeedback");
2066
- s(this, "contextMenu");
2184
+ r(this, "seekFeedback");
2185
+ r(this, "contextMenu");
2067
2186
  /** options.contextMenu çözülmüş hali — null = kapalı (tarayıcının kendi menüsü). */
2068
- s(this, "contextMenuConfig", { stats: !1 });
2187
+ r(this, "contextMenuConfig", { stats: !1 });
2069
2188
  /** İlk açılışta yüklenir (plugins/stats). */
2070
- s(this, "statsPanel", null);
2071
- s(this, "debugPanel", null);
2189
+ r(this, "statsPanel", null);
2190
+ r(this, "debugPanel", null);
2072
2191
  /** options.debug — sağ tık menüsündeki "Hata ayıklama" girişini açar. */
2073
- s(this, "debugEnabled", !1);
2192
+ r(this, "debugEnabled", !1);
2074
2193
  /** Player'ın tüm hataları (medya, yayın, reklam, altyazı) — her zaman tutulur; bkz. `errorLog`. */
2075
- s(this, "log", new gt());
2194
+ r(this, "log", new wt());
2076
2195
  /** Son basılan işaretçi türü — sağ tık menüsü yalnızca fareyle (dokunmatikte uzun basma gesture'a ait). */
2077
- s(this, "lastPointerType", "mouse");
2196
+ r(this, "lastPointerType", "mouse");
2078
2197
  /** options.tapGestures kuruluysa (plugins/tap-gestures). */
2079
- s(this, "tapGestures", null);
2198
+ r(this, "tapGestures", null);
2080
2199
  /** Dokunmadan sonra tarayıcının ürettiği uyumluluk mouse olayları ikinci bir dokunuş sayılmasın. */
2081
- s(this, "lastTouchEndAt", 0);
2200
+ r(this, "lastTouchEndAt", 0);
2082
2201
  /** Video alanı boyutu değişince merkez play butonunun yerini yeniden hesaplar. */
2083
- s(this, "centerPlayObserver", null);
2084
- s(this, "tapToPlay", "auto");
2085
- s(this, "adsController", null);
2086
- s(this, "gestureControls", null);
2087
- s(this, "loopSection", null);
2088
- s(this, "audioStage", null);
2202
+ r(this, "centerPlayObserver", null);
2203
+ r(this, "tapToPlay", "auto");
2204
+ r(this, "adsController", null);
2205
+ r(this, "gestureControls", null);
2206
+ r(this, "loopSection", null);
2207
+ r(this, "audioStage", null);
2089
2208
  /** Kalite kilidi (rewardedUnlock eklentisi) — kilitliyse yüksek kaliteler menüde kilitli, HLS'te üst sınır var. */
2090
- s(this, "qualityGate", null);
2091
- s(this, "rewardedUnlock", null);
2092
- s(this, "sponsorship", null);
2209
+ r(this, "qualityGate", null);
2210
+ r(this, "rewardedUnlock", null);
2211
+ r(this, "sponsorship", null);
2093
2212
  /** Son uygulanan MP4 kaynak listesi ve seçili etiket — kilit açılınca menü yeniden kurulur. */
2094
- s(this, "currentSources", []);
2095
- s(this, "activeSourceLabel", "");
2096
- s(this, "lastHlsLevels", []);
2097
- s(this, "lastHlsActive", -1);
2213
+ /** Çalan biçim grubunun kaynakları (kalite menüsü bunlar) — bkz. `sourceGroups`. */
2214
+ r(this, "currentSources", []);
2215
+ /** `sources` biçime göre gruplu, `sourcePriority` sırasıyla; ölümcül hatada sıradakine geçilir. */
2216
+ r(this, "sourceGroups", []);
2217
+ r(this, "activeGroup", 0);
2218
+ /** Sıradaki gruba geçiş başladı — aynı arızanın ikinci hata olayı hata ekranı açmasın. */
2219
+ r(this, "fallbackPending", !1);
2220
+ /** hls.js ölümcül hatasının MediaError karşılığı (video.error oluşmaz) — hp:sourcefallback detayı için. */
2221
+ r(this, "streamErrorCode");
2222
+ r(this, "activeSourceLabel", "");
2223
+ r(this, "lastHlsLevels", []);
2224
+ r(this, "lastHlsActive", -1);
2098
2225
  /** options.audio — kapak + plak sahnesi, kontroller hep görünür, tam ekran yok. */
2099
- s(this, "audioMode", !1);
2100
- s(this, "inViewAutoplay", null);
2101
- s(this, "unregisterSticky", null);
2102
- s(this, "playlistRunner", null);
2103
- s(this, "hopeStory", null);
2104
- s(this, "markProgress", null);
2105
- s(this, "segments", null);
2106
- s(this, "spriteThumbnails", null);
2107
- s(this, "countdownScreen", null);
2108
- s(this, "geoChecker", null);
2109
- s(this, "redirectScreen", null);
2110
- s(this, "qrResume", null);
2111
- s(this, "pauseAd", null);
2112
- s(this, "dubbing", null);
2113
- s(this, "liveWallClock", null);
2114
- s(this, "daiController", null);
2115
- s(this, "instanceKey");
2116
- s(this, "subtitleTracks", []);
2226
+ r(this, "audioMode", !1);
2227
+ r(this, "inViewAutoplay", null);
2228
+ r(this, "unregisterSticky", null);
2229
+ r(this, "playlistRunner", null);
2230
+ r(this, "hopeStory", null);
2231
+ r(this, "markProgress", null);
2232
+ r(this, "segments", null);
2233
+ r(this, "spriteThumbnails", null);
2234
+ r(this, "countdownScreen", null);
2235
+ r(this, "geoChecker", null);
2236
+ r(this, "redirectScreen", null);
2237
+ r(this, "qrResume", null);
2238
+ r(this, "pauseAd", null);
2239
+ r(this, "adTriggers", null);
2240
+ r(this, "castController", null);
2241
+ /** İçerik Chromecast'te oynuyor (player kumanda) — yerel reklam / otomatik oynatma devre dışı. */
2242
+ r(this, "casting", !1);
2243
+ r(this, "dubbing", null);
2244
+ r(this, "liveWallClock", null);
2245
+ r(this, "daiController", null);
2246
+ r(this, "instanceKey");
2247
+ r(this, "subtitleTracks", []);
2117
2248
  /** Altyazı seçiminin tek giriş noktası — iOS native tam ekrandan dönüşte de kullanılır. */
2118
- s(this, "selectCaption", null);
2249
+ r(this, "selectCaption", null);
2119
2250
  /** `applyOptions()`'ta aktif bir altyazı track'i seçiliyken `true` — dil değişince Boyut/Konum görünümünü tazelemek için. */
2120
- s(this, "captionTrackActive", !1);
2251
+ r(this, "captionTrackActive", !1);
2121
2252
  /** `options.subtitles` izleri. */
2122
- s(this, "optionTracks", []);
2253
+ r(this, "optionTracks", []);
2123
2254
  /** Yayının izleri: hls.js'ten (havuzda, `sub:`/`cc:`) ya da tarayıcının native HLS in-band izleri (`native:`). */
2124
- s(this, "streamTracks", []);
2255
+ r(this, "streamTracks", []);
2125
2256
  /** hls.js aynı cue'yu (seek sonrası) yeniden gönderebilir — iz başına eklenenler. */
2126
- s(this, "streamCueKeys", /* @__PURE__ */ new Map());
2257
+ r(this, "streamCueKeys", /* @__PURE__ */ new Map());
2127
2258
  /** Seçili altyazı — yayın izleri sonradan gelince seçim korunur. */
2128
- s(this, "activeCaptionLabel", null);
2129
- s(this, "streamAudio", { tracks: [], active: -1 });
2259
+ r(this, "activeCaptionLabel", null);
2260
+ r(this, "streamAudio", { tracks: [], active: -1 });
2130
2261
  /**
2131
2262
  * countdownScreen varken gerçek init (kaynak + içerik plugin'leri) ertelenir; en güncel options snapshot'ı.
2132
2263
  * onComplete kaydı tek sefer yapılır (bkz. playbackInitRegistered) — init birden fazla kez tetiklenmesin.
2133
2264
  */
2134
- s(this, "pendingPlaybackOptions", null);
2135
- s(this, "playbackInitRegistered", !1);
2265
+ r(this, "pendingPlaybackOptions", null);
2266
+ r(this, "playbackInitRegistered", !1);
2136
2267
  /**
2137
2268
  * countdownScreen gibi alanlar yalnızca .options ile gelir. connectedCallback'teki ilk (options'suz) geçiş chrome'u
2138
2269
  * bir an açıp player'ı gösteriyordu; 'boot' bloklayıcısı gerçek options gelene kadar bekletir.
2139
2270
  */
2140
- s(this, "bootResolved", !1);
2141
- s(this, "bootGraceTimer", null);
2271
+ r(this, "bootResolved", !1);
2272
+ r(this, "bootGraceTimer", null);
2142
2273
  /**
2143
2274
  * Son uygulanan `.options` nesnesi + attribute'lar. `.options` element sayfaya eklenmeden önce verilince
2144
2275
  * connectedCallback AYNI seçenekleri yeniden uyguluyordu; değişen bir şey yoksa bu ikinci geçiş atlanır.
2145
2276
  */
2146
- s(this, "lastSynced", null);
2277
+ r(this, "lastSynced", null);
2147
2278
  /**
2148
2279
  * applyOptions'ın asenkron kısmı (plugin kurulumu + kaynak yükleme) aynı anda tek kez çalışır. İki geçiş
2149
2280
  * üst üste binince `!this.adsController` gibi kontroller ikisinde de geçiyor, plugin (ör. IMA) iki kez kuruluyordu.
2150
2281
  * Çalışırken gelen seçenekler bekletilir; bitince yalnızca en sonuncusu uygulanır.
2151
2282
  */
2152
- s(this, "pluginApplyRun", null);
2153
- s(this, "pendingPluginOptions", null);
2154
- s(this, "_options", {});
2155
- s(this, "hideTimer", null);
2156
- s(this, "cursorTimer", null);
2283
+ r(this, "pluginApplyRun", null);
2284
+ r(this, "pendingPluginOptions", null);
2285
+ r(this, "_options", {});
2286
+ r(this, "hideTimer", null);
2287
+ r(this, "cursorTimer", null);
2157
2288
  /** null = imleç hiç gizlenmez (options.cursorHideDelayMs: false). */
2158
- s(this, "cursorHideDelayMs", he);
2289
+ r(this, "cursorHideDelayMs", ue);
2159
2290
  /** Fare kontrollerin (buton/seek bar) üzerinde mi — üzerindeyken otomatik gizlenmez; videonun üstünde hareketsizse gizlenir. */
2160
- s(this, "pointerOverControls", !1);
2291
+ r(this, "pointerOverControls", !1);
2161
2292
  /** Kalite menüsünde şu an HLS seviyeleri mi var (kaynak değişince temizlemek için). */
2162
- s(this, "hlsQualitiesShown", !1);
2293
+ r(this, "hlsQualitiesShown", !1);
2163
2294
  /** Son uygulanan options.showRemainingTime — bkz. applyOptions. */
2164
- s(this, "appliedShowRemaining");
2165
- s(this, "autoHideDelayMs", le);
2166
- s(this, "tapCandidate", !1);
2167
- s(this, "tapStartX", 0);
2168
- s(this, "tapStartY", 0);
2295
+ r(this, "appliedShowRemaining");
2296
+ r(this, "autoHideDelayMs", ce);
2297
+ r(this, "tapCandidate", !1);
2298
+ r(this, "tapStartX", 0);
2299
+ r(this, "tapStartY", 0);
2169
2300
  /** Tüm UI'ın paylaştığı tek, mutable sözlük — dil değişince referans değil alanlar güncellenir. */
2170
- s(this, "i18n", xe("tr"));
2301
+ r(this, "i18n", Se("tr"));
2171
2302
  /** IMA SDK'nın kendi ad-UI dili (skip butonu/sayaç metni) de aynı dili takip etsin diye — bkz. plugins/ads/AdsController. */
2172
- s(this, "localeCode", "tr");
2173
- s(this, "onMediaError", () => {
2303
+ r(this, "localeCode", "tr");
2304
+ r(this, "onMediaError", () => {
2174
2305
  const e = this.videoEl.error;
2175
2306
  if (!e) return;
2176
- const i = { 1: "MEDIA_ERR_ABORTED", 2: "MEDIA_ERR_NETWORK", 3: "MEDIA_ERR_DECODE", 4: "MEDIA_ERR_SRC_NOT_SUPPORTED" }, r = this.videoEl.currentSrc;
2307
+ const i = { 1: "MEDIA_ERR_ABORTED", 2: "MEDIA_ERR_NETWORK", 3: "MEDIA_ERR_DECODE", 4: "MEDIA_ERR_SRC_NOT_SUPPORTED" }, s = this.videoEl.currentSrc;
2177
2308
  this.log.add({
2178
2309
  source: "media",
2179
2310
  message: e.message || i[e.code] || `MediaError ${e.code}`,
2180
2311
  fatal: !0,
2181
- details: { code: e.code, name: i[e.code], src: r && !r.startsWith("blob:") ? r : r ? "MediaSource (hls.js)" : void 0 }
2312
+ details: { code: e.code, name: i[e.code], src: s && !s.startsWith("blob:") ? s : s ? "MediaSource (hls.js)" : void 0 }
2182
2313
  });
2183
2314
  });
2184
- s(this, "onSubtitleError", (e) => {
2315
+ r(this, "onSubtitleError", (e) => {
2185
2316
  const i = e.detail;
2186
2317
  this.log.add({ source: "subtitles", message: `Subtitle file could not be loaded: ${i.message}`, details: { src: i.src } });
2187
2318
  });
2188
- s(this, "onPointerTypeTrack", (e) => {
2319
+ r(this, "onPointerTypeTrack", (e) => {
2189
2320
  this.lastPointerType = e.pointerType;
2190
2321
  });
2191
2322
  /** Sağ tık: tarayıcı menüsü yerine player adı + sürüm (options.contextMenu). */
2192
- s(this, "onContextMenu", (e) => {
2323
+ r(this, "onContextMenu", (e) => {
2193
2324
  const i = this.contextMenuConfig;
2194
2325
  !i || this.lastPointerType !== "mouse" || (e.preventDefault(), this.contextMenu.show(e.clientX, e.clientY, [
2195
2326
  { label: "HopeCorePlayer", meta: `v${N}` },
@@ -2198,40 +2329,40 @@ class ke extends HTMLElement {
2198
2329
  ...this.debugEnabled && this.log.entries.length ? [{ label: this.i18n.debugTitle, meta: String(this.log.entries.length), onSelect: () => void this.showDebugLog() }] : []
2199
2330
  ]));
2200
2331
  });
2201
- s(this, "onStreamTextTracks", (e) => {
2202
- const i = this.streamTracks.filter((r) => r.id.startsWith("native:"));
2332
+ r(this, "onStreamTextTracks", (e) => {
2333
+ const i = this.streamTracks.filter((s) => s.id.startsWith("native:"));
2203
2334
  if (!e.length)
2204
- ge(this.videoEl, "stream"), this.streamCueKeys.clear(), this.streamTracks = i;
2335
+ ke(this.videoEl, "stream"), this.streamCueKeys.clear(), this.streamTracks = i;
2205
2336
  else {
2206
- const r = new Set([...this.optionTracks, ...i].map((o) => o.label));
2337
+ const s = new Set([...this.optionTracks, ...i].map((o) => o.label));
2207
2338
  this.streamTracks = [
2208
2339
  ...i,
2209
2340
  ...e.map((o) => {
2210
- const a = this.uniqueLabel(this.streamTrackLabel(o.label, o.lang) || o.id, o.kind === "captions" ? "CC" : o.lang || o.kind, r);
2211
- return { id: o.id, label: a, track: me(this.videoEl, "stream", o.kind, a, o.lang) };
2341
+ const a = this.uniqueLabel(this.streamTrackLabel(o.label, o.lang) || o.id, o.kind === "captions" ? "CC" : o.lang || o.kind, s);
2342
+ return { id: o.id, label: a, track: xe(this.videoEl, "stream", o.kind, a, o.lang) };
2212
2343
  })
2213
2344
  ];
2214
2345
  }
2215
2346
  this.rebuildCaptions(this.activeCaptionLabel);
2216
2347
  });
2217
- s(this, "onStreamCues", (e, i) => {
2348
+ r(this, "onStreamCues", (e, i) => {
2218
2349
  var a;
2219
- const r = (a = this.streamTracks.find((l) => l.id === e)) == null ? void 0 : a.track;
2220
- if (!r) return;
2221
- let o = this.streamCueKeys.get(r);
2222
- o || this.streamCueKeys.set(r, o = /* @__PURE__ */ new Set());
2350
+ const s = (a = this.streamTracks.find((l) => l.id === e)) == null ? void 0 : a.track;
2351
+ if (!s) return;
2352
+ let o = this.streamCueKeys.get(s);
2353
+ o || this.streamCueKeys.set(s, o = /* @__PURE__ */ new Set());
2223
2354
  for (const l of i) {
2224
- const p = `${l.startTime}|${l.endTime}|${l.text}`;
2225
- o.has(p) || (o.add(p), r.addCue(l));
2355
+ const h = `${l.startTime}|${l.endTime}|${l.text}`;
2356
+ o.has(h) || (o.add(h), s.addCue(l));
2226
2357
  }
2227
2358
  });
2228
2359
  /** Tarayıcının kendi (native HLS) altyazı izleri — bizim havuz izlerimiz ve metadata izleri hariç. */
2229
- s(this, "onNativeTextTracksChanged", () => {
2230
- const e = Array.from(this.videoEl.textTracks).filter((a) => (a.kind === "subtitles" || a.kind === "captions") && !Qe(a)), i = this.streamTracks.some((a) => a.id.startsWith("native:"));
2360
+ r(this, "onNativeTextTracksChanged", () => {
2361
+ const e = Array.from(this.videoEl.textTracks).filter((a) => (a.kind === "subtitles" || a.kind === "captions") && !et(a)), i = this.streamTracks.some((a) => a.id.startsWith("native:"));
2231
2362
  if (!e.length && !i) return;
2232
- const r = this.streamTracks.filter((a) => !a.id.startsWith("native:")), o = new Set([...this.optionTracks, ...r].map((a) => a.label));
2363
+ const s = this.streamTracks.filter((a) => !a.id.startsWith("native:")), o = new Set([...this.optionTracks, ...s].map((a) => a.label));
2233
2364
  this.streamTracks = [
2234
- ...r,
2365
+ ...s,
2235
2366
  ...e.map((a, l) => ({
2236
2367
  id: `native:${l}`,
2237
2368
  label: this.uniqueLabel(a.label || a.language || `${this.i18n.captions} ${l + 1}`, a.language || String(l + 1), o),
@@ -2240,78 +2371,78 @@ class ke extends HTMLElement {
2240
2371
  ], this.rebuildCaptions(this.activeCaptionLabel);
2241
2372
  });
2242
2373
  /** Yayında birden fazla ses izi varsa ayarlarda "Ses" alt menüsü (HLS alternatif ses / Safari audioTracks). */
2243
- s(this, "onStreamAudioTracks", (e, i) => {
2374
+ r(this, "onStreamAudioTracks", (e, i) => {
2244
2375
  this.streamAudio = { tracks: e, active: i };
2245
- 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)]));
2376
+ const s = 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)]));
2246
2377
  if (e.length <= 1) {
2247
- r.unregisterSubmenu(de);
2378
+ s.unregisterSubmenu(me);
2248
2379
  return;
2249
2380
  }
2250
- r.registerSubmenu({
2251
- key: de,
2381
+ s.registerSubmenu({
2382
+ key: me,
2252
2383
  title: this.i18n.audioTrack,
2253
2384
  getValueLabel: () => a.get(i) ?? "",
2254
2385
  getItems: () => e.map((l) => ({ label: a.get(l.index), active: l.index === i, onSelect: () => this.sourceManager.setAudioTrack(l.index) }))
2255
2386
  });
2256
2387
  });
2257
2388
  /** Playlist panelinin monte edileceği, .video-area'nın ALTINDAKİ (shadow root içi) kapsayıcı — ilk ihtiyaçta oluşturulur. */
2258
- s(this, "panelContainer", null);
2259
- s(this, "onHlsLevelsChanged", (e, i) => {
2389
+ r(this, "panelContainer", null);
2390
+ r(this, "onHlsLevelsChanged", (e, i) => {
2260
2391
  var l;
2261
- if (e.length === 0 && this.hlsQualitiesShown) {
2392
+ if (this.lastHlsLevels = e, this.lastHlsActive = i, e.length === 0 && this.hlsQualitiesShown) {
2262
2393
  this.hlsQualitiesShown = !1, this.controlBar.setQualities([], "");
2263
2394
  return;
2264
2395
  }
2265
- if (this.lastHlsLevels = e, this.lastHlsActive = i, e.length <= 1) return;
2396
+ if (e.length <= 1) return;
2266
2397
  this.hlsQualitiesShown = !0;
2267
- const r = (p) => `${p.height}p`, o = this.qualityGate, a = (p) => !!(o != null && o.isLocked(p.height));
2398
+ const s = (h) => `${h.height}p`, o = this.qualityGate, a = (h) => !!(o != null && o.isLocked(h.height));
2268
2399
  if (o) {
2269
- const p = e.filter((d) => !a(d)), u = p.length ? p : [e.reduce((d, m) => m.height < d.height ? m : d)];
2270
- this.sourceManager.setMaxLevel(u.reduce((d, m) => m.height > d.height ? m : d).index);
2400
+ const h = e.filter((p) => !a(p)), c = h.length ? h : [e.reduce((p, g) => g.height < p.height ? g : p)];
2401
+ this.sourceManager.setMaxLevel(c.reduce((p, g) => g.height > p.height ? g : p).index);
2271
2402
  } else
2272
2403
  this.sourceManager.setMaxLevel(-1);
2273
2404
  this.controlBar.setQualities(
2274
2405
  [
2275
2406
  { label: this.i18n.autoQuality, onSelect: () => this.sourceManager.setLevel(-1) },
2276
2407
  // Yüksekten düşüğe (hls.js artan sıralıyor) — l.index hls.js'teki gerçek seviye numarası, sıradan bağımsız.
2277
- ...[...e].sort((p, u) => u.height - p.height).map((p) => ({
2278
- label: r(p),
2279
- locked: a(p),
2280
- onSelect: a(p) ? () => o == null ? void 0 : o.requestUnlock() : () => this.sourceManager.setLevel(p.index)
2408
+ ...[...e].sort((h, c) => c.height - h.height).map((h) => ({
2409
+ label: s(h),
2410
+ locked: a(h),
2411
+ onSelect: a(h) ? () => o == null ? void 0 : o.requestUnlock() : () => this.sourceManager.setLevel(h.index)
2281
2412
  }))
2282
2413
  ],
2283
- i === -1 || !e[i] ? this.i18n.autoQuality : r(e[i])
2414
+ i === -1 || !e[i] ? this.i18n.autoQuality : s(e[i])
2284
2415
  ), (l = this.rewardedUnlock) == null || l.onQualitiesChanged();
2285
2416
  });
2286
- s(this, "onFullscreenChange", (e) => {
2417
+ r(this, "onFullscreenChange", (e) => {
2287
2418
  this.controlBar.setFullscreenState(this.isFullscreenActive()), (e == null ? void 0 : e.type) === "webkitbeginfullscreen" ? this.showCaptionsNatively() : (e == null ? void 0 : e.type) === "webkitendfullscreen" && this.syncCaptionsFromNative();
2288
2419
  });
2289
2420
  // ── Oynatma durumuna göre merkez buton + otomatik gizlenme ──
2290
2421
  // Değer: 'hidden' (tamamen gizle — countdown/geo) ya da 'reduced' (yalnızca oynat/duraklat + ses — ads).
2291
- s(this, "chromeBlockers", /* @__PURE__ */ new Map());
2292
- s(this, "onPlay", () => {
2422
+ r(this, "chromeBlockers", /* @__PURE__ */ new Map());
2423
+ r(this, "onPlay", () => {
2293
2424
  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"));
2294
2425
  });
2295
- s(this, "onPause", () => {
2426
+ r(this, "onPause", () => {
2296
2427
  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"));
2297
2428
  });
2298
- s(this, "onPointerDownFocus", () => {
2429
+ r(this, "onPointerDownFocus", () => {
2299
2430
  var e;
2300
2431
  this.focus(), (e = this.adsController) == null || e.initializeDisplayContainerOnce();
2301
2432
  });
2302
- s(this, "onVideoPressStart", (e) => {
2433
+ r(this, "onVideoPressStart", (e) => {
2303
2434
  this.tapCandidate = !0;
2304
2435
  const i = "touches" in e ? e.touches[0] : e;
2305
2436
  i && (this.tapStartX = i.clientX, this.tapStartY = i.clientY);
2306
2437
  });
2307
- s(this, "onVideoPressEnd", (e) => {
2308
- var l, p;
2438
+ r(this, "onVideoPressEnd", (e) => {
2439
+ var l, h;
2309
2440
  if (!this.tapCandidate || (this.tapCandidate = !1, this.isChromeBlocked) || (l = this.gestureControls) != null && l.isCurrentlyHolding()) return;
2310
2441
  const i = "changedTouches" in e;
2311
2442
  if (!i && Date.now() - this.lastTouchEndAt < 800) return;
2312
2443
  i && (this.lastTouchEndAt = Date.now());
2313
- const r = i ? e.changedTouches[0] : e;
2314
- if (r && Math.hypot(r.clientX - this.tapStartX, r.clientY - this.tapStartY) > At) {
2444
+ const s = i ? e.changedTouches[0] : e;
2445
+ if (s && Math.hypot(s.clientX - this.tapStartX, s.clientY - this.tapStartY) > Nt) {
2315
2446
  i && !this.isChromeBlocked && this.scheduleAutoHide();
2316
2447
  return;
2317
2448
  }
@@ -2319,53 +2450,56 @@ class ke extends HTMLElement {
2319
2450
  this.videoEl.paused ? this.videoEl.play().catch(() => {
2320
2451
  }) : this.videoEl.pause();
2321
2452
  });
2322
- r && ((p = this.tapGestures) != null && p.handleTap(r.clientX, o === "pen" ? "pen" : o, a)) || a();
2453
+ s && ((h = this.tapGestures) != null && h.handleTap(s.clientX, o === "pen" ? "pen" : o, a)) || a();
2323
2454
  });
2324
- s(this, "onVideoPressCancel", () => {
2455
+ r(this, "onVideoPressCancel", () => {
2325
2456
  this.tapCandidate = !1;
2326
2457
  });
2327
- s(this, "onPointerMove", (e) => {
2458
+ r(this, "onPointerMove", (e) => {
2328
2459
  if (e.pointerType !== "mouse") {
2329
2460
  this.chromeVisible && this.scheduleAutoHide();
2330
2461
  return;
2331
2462
  }
2332
2463
  this.pointerOverControls = e.composedPath().includes(this.chromeEl), this.scheduleAutoHide(), e.pointerType === "mouse" && this.scheduleCursorHide();
2333
2464
  });
2334
- s(this, "onPointerLeave", (e) => {
2465
+ r(this, "onPointerLeave", (e) => {
2335
2466
  e.pointerType === "mouse" && (this.pointerOverControls = !1, this.scheduleAutoHide(), this.showCursor());
2336
2467
  });
2337
- s(this, "scheduleAutoHide", () => {
2468
+ r(this, "scheduleAutoHide", () => {
2338
2469
  this.showChrome(), this.hideTimer && clearTimeout(this.hideTimer), !(this.videoEl.paused || this.loadingActive) && (this.audioMode || (this.hideTimer = setTimeout(() => {
2339
2470
  this.audioMode || this.videoEl.paused || this.loadingActive || this.pointerOverControls || this.controlBar.settingsMenu.isOpen || this.setChromeOpacity("0");
2340
- }, this.lastPointerType === "mouse" ? this.autoHideDelayMs : Math.max(this.autoHideDelayMs, St))));
2471
+ }, this.lastPointerType === "mouse" ? this.autoHideDelayMs : Math.max(this.autoHideDelayMs, Ot))));
2341
2472
  });
2342
- ft(), this.root = this.attachShadow({ mode: "open" });
2473
+ Ct(), this.root = this.attachShadow({ mode: "open" });
2343
2474
  const e = document.createElement("style");
2344
- e.textContent = Ce, this.root.appendChild(e);
2475
+ e.textContent = Me, this.root.appendChild(e);
2345
2476
  const i = document.createElement("div");
2346
- i.className = "hp-root", i.innerHTML = Pt, 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 wt(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 Ue(this.videoEl), this.root.querySelector(".media-layer").appendChild(this.loadingSpinner.el), this.errorScreen = new Xe(this.videoEl, this.i18n), this.errorScreen.setOnRetry(() => void this.sourceManager.reload()), this.videoArea.appendChild(this.errorScreen.el), this.centerPlayButton = document.createElement("button"), this.centerPlayButton.type = "button", this.centerPlayButton.setAttribute("part", "center-play-button"), this.centerPlayButton.setAttribute("aria-label", this.i18n.play), this.centerPlayButton.className = "hp-center-play hp:absolute hp:inset-0 hp:flex hp:items-center hp:justify-center hp:bg-transparent hp:border-0 hp:cursor-pointer hp:text-on-surface hp:transition-opacity";
2347
- const r = document.createElement("span");
2348
- r.className = "hp-chip hp:flex hp:items-center hp:justify-center hp:w-16 hp:h-16", r.style.borderRadius = "9999px", r.appendChild(E("play", "hp:text-2xl")), this.centerPlayButton.appendChild(r), this.centerPlayButton.addEventListener("click", (o) => {
2349
- var d;
2477
+ i.className = "hp-root", i.innerHTML = Dt, 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 Mt(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 Ye(this.videoEl), this.root.querySelector(".media-layer").appendChild(this.loadingSpinner.el), this.errorScreen = new Ze(this.videoEl, this.i18n), this.errorScreen.setOnRetry(() => void this.retrySource()), 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";
2478
+ const s = document.createElement("span");
2479
+ s.className = "hp-chip hp:flex hp:items-center hp:justify-center hp:w-16 hp:h-16", s.style.borderRadius = "9999px", s.appendChild(S("play", "hp:text-2xl")), this.centerPlayButton.appendChild(s), this.centerPlayButton.addEventListener("click", (o) => {
2480
+ var p;
2350
2481
  const a = () => {
2351
2482
  this.videoEl.paused && this.videoEl.play();
2352
- }, l = this.lastPointerType === "pen" ? "pen" : this.lastPointerType === "touch" ? "touch" : null, u = o.composedPath().includes(r) ? a : () => this.onBackgroundTap(l ?? "mouse", a);
2353
- l && ((d = this.tapGestures) != null && d.handleTap(o.clientX, l, u)) || u();
2354
- }), 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 Se(this.videoEl, {
2483
+ }, l = this.lastPointerType === "pen" ? "pen" : this.lastPointerType === "touch" ? "touch" : null, c = o.composedPath().includes(s) ? a : () => this.onBackgroundTap(l ?? "mouse", a);
2484
+ l && ((p = this.tapGestures) != null && p.handleTap(o.clientX, l, c)) || c();
2485
+ }), 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 Be(this.videoEl, {
2355
2486
  onLevelsChanged: this.onHlsLevelsChanged,
2356
2487
  onAudioTracksChanged: this.onStreamAudioTracks,
2357
2488
  onTextTracksFound: this.onStreamTextTracks,
2358
2489
  onCues: this.onStreamCues,
2359
- onFatalError: (o) => this.errorScreen.showStreamError(o === "network" ? 2 : 3),
2490
+ onFatalError: (o) => {
2491
+ const a = o === "network" ? 2 : 3;
2492
+ this.streamErrorCode = a, this.errorScreen.showStreamError(a);
2493
+ },
2360
2494
  onStreamError: (o) => this.log.add({
2361
2495
  source: "stream",
2362
2496
  message: `${o.type}: ${o.details}`,
2363
2497
  fatal: o.fatal,
2364
2498
  details: { url: o.url, httpStatus: o.httpStatus, reason: o.reason, engine: "hls.js" }
2365
2499
  })
2366
- }), this.errorScreen.setShouldShow(() => !this.sourceManager.isRecovering()), this.controlBar = new Fe(
2500
+ }), this.errorScreen.setShouldShow(() => !this.sourceManager.isRecovering() && !this.tryNextSourceGroup()), this.controlBar = new qe(
2367
2501
  this.videoEl,
2368
- Tt,
2502
+ zt,
2369
2503
  {
2370
2504
  onRequestFullscreen: () => this.requestFullscreenCompat(),
2371
2505
  liveSyncPosition: () => {
@@ -2403,11 +2537,11 @@ class ke extends HTMLElement {
2403
2537
  }
2404
2538
  },
2405
2539
  this.i18n
2406
- ), this.chromeEl.appendChild(this.controlBar.el), this.chromeEl.appendChild(this.controlBar.topEl), this.videoArea.appendChild(this.controlBar.volumePanel.unmuteBadge), this.captionRenderer = new B(this.videoEl, this.videoArea, this.controlBar.seekBar.el, this.i18n), this.videoArea.appendChild(this.captionRenderer.layerEl), this.keyboard = new Ge(
2540
+ ), this.chromeEl.appendChild(this.controlBar.el), this.chromeEl.appendChild(this.controlBar.topEl), this.videoArea.appendChild(this.controlBar.volumePanel.unmuteBadge), this.captionRenderer = new R(this.videoEl, this.videoArea, this.controlBar.seekBar.el, this.i18n), this.videoArea.appendChild(this.captionRenderer.layerEl), this.keyboard = new Xe(
2407
2541
  this,
2408
2542
  this.videoEl,
2409
2543
  () => this.isFullscreenActive() ? this.exitFullscreenCompat() : this.requestFullscreenCompat()
2410
- ), this.tooltip = new _e(this.videoArea), this.contextMenu = new ut(this.videoArea), this.seekFeedback = new ct(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");
2544
+ ), this.tooltip = new We(this.videoArea), this.contextMenu = new xt(this.videoArea), this.seekFeedback = new yt(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");
2411
2545
  }
2412
2546
  static get observedAttributes() {
2413
2547
  return ["src", "poster", "autoplay", "muted", "loop", "theme", "locale"];
@@ -2423,8 +2557,8 @@ class ke extends HTMLElement {
2423
2557
  }), this.videoEl.addEventListener("mousedown", this.onVideoPressStart), this.videoEl.addEventListener("mouseup", this.onVideoPressEnd), this.videoEl.addEventListener("mouseleave", this.onVideoPressCancel), this.videoEl.addEventListener("touchstart", this.onVideoPressStart, { passive: !0 }), this.videoEl.addEventListener("touchend", this.onVideoPressEnd), this.videoEl.addEventListener("touchcancel", this.onVideoPressCancel), this.dispatchEvent(new CustomEvent("hp:ready"));
2424
2558
  }
2425
2559
  disconnectedCallback() {
2426
- var e, i, r, o, a, l, p, u, d, m, h, c, g, b, v, y, f, x, S, A, k, L, V, _, G, U;
2427
- (e = this.centerPlayObserver) == null || e.disconnect(), this.showCursor(), (i = this.miniProgress) == null || i.destroy(), this.miniProgress = null, this.videoEl.removeEventListener("play", this.onPlay), this.videoEl.removeEventListener("pause", this.onPause), this.removeEventListener("pointermove", this.onPointerMove), this.removeEventListener("pointerleave", this.onPointerLeave), this.removeEventListener("pointerdown", this.onPointerDownFocus), this.controlBar.settingsMenu.onOpenChange = null, document.removeEventListener("fullscreenchange", this.onFullscreenChange), document.removeEventListener("webkitfullscreenchange", this.onFullscreenChange), this.videoEl.removeEventListener("webkitbeginfullscreen", this.onFullscreenChange), this.videoEl.removeEventListener("webkitendfullscreen", this.onFullscreenChange), this.removeEventListener("contextmenu", this.onContextMenu), this.removeEventListener("pointerdown", this.onPointerTypeTrack, !0), this.videoEl.textTracks.removeEventListener("addtrack", this.onNativeTextTracksChanged), this.videoEl.textTracks.removeEventListener("removetrack", this.onNativeTextTracksChanged), this.videoEl.removeEventListener("mousedown", this.onVideoPressStart), this.videoEl.removeEventListener("mouseup", this.onVideoPressEnd), this.videoEl.removeEventListener("mouseleave", this.onVideoPressCancel), this.videoEl.removeEventListener("touchstart", this.onVideoPressStart), this.videoEl.removeEventListener("touchend", this.onVideoPressEnd), this.videoEl.removeEventListener("touchcancel", this.onVideoPressCancel), this.controlBar.destroy(), this.captionRenderer.destroy(), this.keyboard.destroy(), this.tooltip.destroy(), this.loadingSpinner.destroy(), this.errorScreen.destroy(), this.seekFeedback.destroy(), this.contextMenu.destroy(), (r = this.statsPanel) == null || r.destroy(), (o = this.debugPanel) == null || o.destroy(), this.videoEl.removeEventListener("error", this.onMediaError), this.videoEl.removeEventListener("hp-internal:subtitle-error", this.onSubtitleError), (a = this.tapGestures) == null || a.destroy(), this.sourceManager.destroy(), (l = this.adsController) == null || l.destroy(), (p = this.gestureControls) == null || p.destroy(), (u = this.loopSection) == null || u.destroy(), (d = this.audioStage) == null || d.destroy(), this.audioStage = null, (m = this.rewardedUnlock) == null || m.destroy(), this.rewardedUnlock = null, (h = this.sponsorship) == null || h.destroy(), this.sponsorship = null, (c = this.inViewAutoplay) == null || c.destroy(), (g = this.unregisterSticky) == null || g.call(this), (b = this.playlistRunner) == null || b.destroy(), (v = this.hopeStory) == null || v.destroy(), (y = this.markProgress) == null || y.destroy(), (f = this.segments) == null || f.destroy(), (x = this.spriteThumbnails) == null || x.destroy(), (S = this.countdownScreen) == null || S.destroy(), (A = this.geoChecker) == null || A.destroy(), (k = this.redirectScreen) == null || k.destroy(), (L = this.qrResume) == null || L.destroy(), (V = this.pauseAd) == null || V.destroy(), this.pauseAd = null, (_ = this.dubbing) == null || _.destroy(), (G = this.liveWallClock) == null || G.destroy(), (U = this.daiController) == null || U.destroy(), this.prerollGate.release(!1), this.hideTimer && clearTimeout(this.hideTimer), this.bootGraceTimer && clearTimeout(this.bootGraceTimer), this.lastSynced = null;
2560
+ var e, i, s, o, a, l, h, c, p, g, m, f, v, x, d, u, b, y, k, E, C, w, P, q, j, $, Q, K;
2561
+ (e = this.centerPlayObserver) == null || e.disconnect(), this.showCursor(), (i = this.miniProgress) == null || i.destroy(), this.miniProgress = null, this.videoEl.removeEventListener("play", this.onPlay), this.videoEl.removeEventListener("pause", this.onPause), this.removeEventListener("pointermove", this.onPointerMove), this.removeEventListener("pointerleave", this.onPointerLeave), this.removeEventListener("pointerdown", this.onPointerDownFocus), this.controlBar.settingsMenu.onOpenChange = null, document.removeEventListener("fullscreenchange", this.onFullscreenChange), document.removeEventListener("webkitfullscreenchange", this.onFullscreenChange), this.videoEl.removeEventListener("webkitbeginfullscreen", this.onFullscreenChange), this.videoEl.removeEventListener("webkitendfullscreen", this.onFullscreenChange), this.removeEventListener("contextmenu", this.onContextMenu), this.removeEventListener("pointerdown", this.onPointerTypeTrack, !0), this.videoEl.textTracks.removeEventListener("addtrack", this.onNativeTextTracksChanged), this.videoEl.textTracks.removeEventListener("removetrack", this.onNativeTextTracksChanged), this.videoEl.removeEventListener("mousedown", this.onVideoPressStart), this.videoEl.removeEventListener("mouseup", this.onVideoPressEnd), this.videoEl.removeEventListener("mouseleave", this.onVideoPressCancel), this.videoEl.removeEventListener("touchstart", this.onVideoPressStart), this.videoEl.removeEventListener("touchend", this.onVideoPressEnd), this.videoEl.removeEventListener("touchcancel", this.onVideoPressCancel), this.controlBar.destroy(), this.captionRenderer.destroy(), this.keyboard.destroy(), this.tooltip.destroy(), this.loadingSpinner.destroy(), this.errorScreen.destroy(), this.seekFeedback.destroy(), this.contextMenu.destroy(), (s = this.statsPanel) == null || s.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(), (c = this.loopSection) == null || c.destroy(), (p = this.audioStage) == null || p.destroy(), this.audioStage = null, (g = this.rewardedUnlock) == null || g.destroy(), this.rewardedUnlock = null, (m = this.sponsorship) == null || m.destroy(), this.sponsorship = null, (f = this.adTriggers) == null || f.destroy(), this.adTriggers = null, (v = this.castController) == null || v.destroy(), this.castController = null, (x = this.inViewAutoplay) == null || x.destroy(), (d = this.unregisterSticky) == null || d.call(this), (u = this.playlistRunner) == null || u.destroy(), (b = this.hopeStory) == null || b.destroy(), (y = this.markProgress) == null || y.destroy(), (k = this.segments) == null || k.destroy(), (E = this.spriteThumbnails) == null || E.destroy(), (C = this.countdownScreen) == null || C.destroy(), (w = this.geoChecker) == null || w.destroy(), (P = this.redirectScreen) == null || P.destroy(), (q = this.qrResume) == null || q.destroy(), (j = this.pauseAd) == null || j.destroy(), this.pauseAd = null, ($ = this.dubbing) == null || $.destroy(), (Q = this.liveWallClock) == null || Q.destroy(), (K = this.daiController) == null || K.destroy(), this.prerollGate.release(!1), this.hideTimer && clearTimeout(this.hideTimer), this.bootGraceTimer && clearTimeout(this.bootGraceTimer), this.lastSynced = null;
2428
2562
  }
2429
2563
  /** Reklam/consent-farkında plugin'lerin (gesture/sticky/in-view-autoplay) ortak sorgusu. */
2430
2564
  isAdPlaying() {
@@ -2461,6 +2595,14 @@ class ke extends HTMLElement {
2461
2595
  }
2462
2596
  this.debugPanel.show();
2463
2597
  }
2598
+ /**
2599
+ * Açık reklam tetikleyici reklamını kapat (adTriggers). `layout: 'none'` kreatifleri kendi kodlarından çağırabilir:
2600
+ * `window.top.document.querySelector('hope-player').closeAdTrigger()`.
2601
+ */
2602
+ closeAdTrigger() {
2603
+ var e;
2604
+ (e = this.adTriggers) == null || e.close("user");
2605
+ }
2464
2606
  /** Teknik istatistik panelini aç/kapat (`force`: true = aç, false = kapat). Sağ tık menüsündeki "İstatistikler" ile aynı. */
2465
2607
  async toggleStats(e) {
2466
2608
  if (!this.statsPanel) {
@@ -2496,7 +2638,7 @@ class ke extends HTMLElement {
2496
2638
  this.controlBar.toggleTimeMode();
2497
2639
  }
2498
2640
  syncFromAttributes() {
2499
- var r;
2641
+ var s;
2500
2642
  const e = {
2501
2643
  src: this.getAttribute("src") ?? void 0,
2502
2644
  poster: this.getAttribute("poster") ?? void 0,
@@ -2507,7 +2649,7 @@ class ke extends HTMLElement {
2507
2649
  locale: this.getAttribute("locale") ?? void 0
2508
2650
  }, i = JSON.stringify(e);
2509
2651
  if (this.bootResolved) {
2510
- if (((r = this.lastSynced) == null ? void 0 : r.options) === this._options && this.lastSynced.attrs === i) return;
2652
+ if (((s = this.lastSynced) == null ? void 0 : s.options) === this._options && this.lastSynced.attrs === i) return;
2511
2653
  this.lastSynced = { options: this._options, attrs: i };
2512
2654
  }
2513
2655
  this.applyOptions({ ...e, ...this._options });
@@ -2519,8 +2661,8 @@ class ke extends HTMLElement {
2519
2661
  this.pendingPluginOptions = null;
2520
2662
  try {
2521
2663
  await this.applyPluginsAndPlayback(i);
2522
- } catch (r) {
2523
- console.error("[hope-player] options could not be applied:", r);
2664
+ } catch (s) {
2665
+ console.error("[hope-player] options could not be applied:", s);
2524
2666
  }
2525
2667
  }
2526
2668
  })().finally(() => {
@@ -2528,23 +2670,23 @@ class ke extends HTMLElement {
2528
2670
  })), this.pluginApplyRun;
2529
2671
  }
2530
2672
  async applyOptions(e) {
2531
- var a, l, p, u, d, m, h, c, g, b, v, y, f, x, S, A, k, L;
2532
- e.poster && (this.videoEl.poster = e.poster), this.videoEl.autoplay = !!e.autoplay, this.videoEl.muted = !!e.muted, this.videoEl.loop = !!e.loop, this.videoEl.preload = e.preload ?? "metadata", this.videoEl.playsInline = !0, this.videoEl.setAttribute("webkit-playsinline", ""), this.autoHideDelayMs = e.autoHideDelayMs ?? le, this.tapToPlay = e.tapToPlay ?? "auto", this.cursorHideDelayMs = e.cursorHideDelayMs === !1 ? null : e.cursorHideDelayMs ?? he, this.cursorHideDelayMs === null && this.showCursor(), e.miniProgress && !this.miniProgress ? (this.miniProgress = new lt(this.videoEl), this.videoArea.appendChild(this.miniProgress.el), this.updateMiniProgress()) : !e.miniProgress && this.miniProgress && (this.miniProgress.destroy(), this.miniProgress = null), this.debugEnabled = !!e.debug, this.debugEnabled || (a = this.debugPanel) == null || a.hide(), this.contextMenuConfig = e.contextMenu === !1 ? null : { stats: typeof e.contextMenu == "object" && e.contextMenu.stats === !0 }, this.contextMenuConfig || this.contextMenu.close();
2533
- const i = e.keyboardSeekStep && e.keyboardSeekStep > 0 ? e.keyboardSeekStep : Lt;
2673
+ var a, l, h, c, p, g, m, f, v, x, d, u, b, y, k, E, C, w, P;
2674
+ 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 ?? ue, this.cursorHideDelayMs === null && this.showCursor(), e.miniProgress && !this.miniProgress ? (this.miniProgress = new mt(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();
2675
+ const i = e.keyboardSeekStep && e.keyboardSeekStep > 0 ? e.keyboardSeekStep : It;
2534
2676
  this.keyboard.seekStep = i, this.controlBar.seekBar.keyboardStep = i;
2535
- const r = e.skipButtons === !0 ? {} : e.skipButtons || null;
2677
+ const s = e.skipButtons === !0 ? {} : e.skipButtons || null;
2536
2678
  this.controlBar.setSkipButtons(
2537
- r && r.back !== !1 ? r.back ?? pe : null,
2538
- r && r.forward !== !1 ? r.forward ?? pe : null
2679
+ s && s.back !== !1 ? s.back ?? ge : null,
2680
+ s && s.forward !== !1 ? s.forward ?? ge : null
2539
2681
  ), e.showRemainingTime !== void 0 && e.showRemainingTime !== this.appliedShowRemaining && (this.appliedShowRemaining = e.showRemainingTime, this.controlBar.setShowRemaining(e.showRemainingTime));
2540
- const o = Mt(e.aspectRatio);
2541
- 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", xt(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(), (p = this.hopeStory) == null || p.refreshLabels(), (u = this.countdownScreen) == null || u.refreshLabels(), (d = this.geoChecker) == null || d.refreshLabels(), (m = this.redirectScreen) == null || m.refreshLabels(), (h = this.qrResume) == null || h.refreshLabels(), (c = this.pauseAd) == null || c.refreshLabels(), (g = this.dubbing) == null || g.refreshLabels(), this.onStreamAudioTracks(this.streamAudio.tracks, this.streamAudio.active), (b = this.statsPanel) == null || b.refreshLabels(), (v = this.debugPanel) == null || v.refreshLabels(), (y = this.liveWallClock) == null || y.refreshLabels(), (f = this.loopSection) == null || f.refreshLabels(), (x = this.audioStage) == null || x.refreshLabels(), (S = this.rewardedUnlock) == null || S.refreshLabels(), (A = this.markProgress) == null || A.refreshLabels(), (L = (k = this.unregisterSticky) == null ? void 0 : k.refreshLabels) == null || L.call(k), this.bootResolved && await this.queuePluginApply(e);
2682
+ const o = Ht(e.aspectRatio);
2683
+ 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", Lt(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(), (p = this.geoChecker) == null || p.refreshLabels(), (g = this.redirectScreen) == null || g.refreshLabels(), (m = this.qrResume) == null || m.refreshLabels(), (f = this.pauseAd) == null || f.refreshLabels(), (v = this.castController) == null || v.refreshLabels(), (x = this.dubbing) == null || x.refreshLabels(), this.onStreamAudioTracks(this.streamAudio.tracks, this.streamAudio.active), (d = this.statsPanel) == null || d.refreshLabels(), (u = this.debugPanel) == null || u.refreshLabels(), (b = this.liveWallClock) == null || b.refreshLabels(), (y = this.loopSection) == null || y.refreshLabels(), (k = this.audioStage) == null || k.refreshLabels(), (E = this.rewardedUnlock) == null || E.refreshLabels(), (C = this.markProgress) == null || C.refreshLabels(), (P = (w = this.unregisterSticky) == null ? void 0 : w.refreshLabels) == null || P.call(w), this.bootResolved && await this.queuePluginApply(e);
2542
2684
  }
2543
2685
  /** applyOptions'ın asenkron kısmı — yalnızca queuePluginApply üzerinden, sırayla çalışır. */
2544
2686
  async applyPluginsAndPlayback(e) {
2545
2687
  if (e.ads && !this.adsController) {
2546
- const r = e.ads === !0 ? {} : e.ads;
2547
- kt(r) && !this.prerollGate.isArmed && this.prerollGate.arm(r.prerollTimeoutMs ?? q), Ct(), e.countdownScreen || this.installAdsOnce(e);
2688
+ const s = e.ads === !0 ? {} : e.ads;
2689
+ Pt(s) && !this.prerollGate.isArmed && this.prerollGate.arm(s.prerollTimeoutMs ?? U), Rt(), e.countdownScreen || this.installAdsOnce(e);
2548
2690
  }
2549
2691
  await this.applyAudioMode(e);
2550
2692
  const i = () => ({
@@ -2555,55 +2697,59 @@ class ke extends HTMLElement {
2555
2697
  i18n: this.i18n
2556
2698
  });
2557
2699
  if (e.countdownScreen && !this.countdownScreen) {
2558
- const { installCountdownScreen: r } = await import("./index-rENB3n9O.js");
2559
- this.countdownScreen = r(i(), e.countdownScreen);
2700
+ const { installCountdownScreen: s } = await import("./index-rENB3n9O.js");
2701
+ this.countdownScreen = s(i(), e.countdownScreen);
2560
2702
  }
2561
2703
  if (e.geoChecker && !this.geoChecker) {
2562
- const { installGeoChecker: r } = await import("./index-BBmuCtKu.js");
2563
- this.geoChecker = r(i(), e.geoChecker);
2704
+ const { installGeoChecker: s } = await import("./index-BBmuCtKu.js");
2705
+ this.geoChecker = s(i(), e.geoChecker);
2564
2706
  }
2565
2707
  this.unblockChrome("boot"), this.countdownScreen && !this.countdownScreen.isComplete() ? (this.pendingPlaybackOptions = e, this.playbackInitRegistered || (this.playbackInitRegistered = !0, this.countdownScreen.onComplete(() => {
2566
- const r = this.pendingPlaybackOptions;
2567
- this.pendingPlaybackOptions = null, r && this.initPlayback(r);
2708
+ const s = this.pendingPlaybackOptions;
2709
+ this.pendingPlaybackOptions = null, s && this.initPlayback(s);
2568
2710
  }))) : await this.initPlayback(e);
2569
2711
  }
2570
2712
  async initPlayback(e) {
2571
- var a, l, p, u, d, m;
2713
+ var c, p, g, m, f, v, x;
2572
2714
  this.sourceManager.configure(e.hls), this.errorScreen.dismiss(), await this.applyRewardedUnlock(e);
2573
- const i = (a = e.sources) != null && a.length ? e.sources : e.src ? [{ src: e.src, label: this.i18n.autoQuality }] : [];
2574
- this.currentSources = i;
2575
- const o = i.find((h) => this.sourceManager.isLoaded(h.src, h.type) && !this.isSourceLocked(h)) ?? this.pickInitialSource(i);
2576
- if (o && !this.sourceManager.isLoaded(o.src, o.type) && (i.length <= 1 && (this.controlBar.setQualities([], ""), this.hlsQualitiesShown = !1), await this.sourceManager.load(o.src, o.type), e.autoplay && this.videoEl.play().catch(() => {
2577
- })), o && (this.activeSourceLabel = o.label), this.renderSourceQualities(), await this.installAdsOnce(e), await this.applySponsorship(e), e.gesture && !this.gestureControls) {
2578
- const h = e.gesture === !0 ? {} : e.gesture, { installGesture: c } = await import("./index-Ca8hocby.js");
2579
- this.gestureControls = c(
2715
+ const i = (c = e.sources) != null && c.length ? e.sources : e.src ? [{ src: e.src, label: this.i18n.autoQuality }] : [];
2716
+ this.sourceGroups = Re(i, e.sourcePriority);
2717
+ const s = (d) => this.sourceManager.isLoaded(d.src, d.type) && !this.isSourceLocked(d), o = this.sourceGroups.findIndex((d) => d.sources.some(s));
2718
+ this.activeGroup = o !== -1 ? o : this.firstPlayableGroup();
2719
+ const a = ((p = this.sourceGroups[this.activeGroup]) == null ? void 0 : p.sources) ?? [];
2720
+ this.currentSources = a, this.fallbackPending = !1;
2721
+ const h = a.find(s) ?? this.pickInitialSource(a);
2722
+ 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(() => {
2723
+ })), 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) {
2724
+ const d = e.gesture === !0 ? {} : e.gesture, { installGesture: u } = await import("./index-Ca8hocby.js");
2725
+ this.gestureControls = u(
2580
2726
  { videoEl: this.videoEl, overlayContainerEl: this.videoArea, isAdActive: () => this.isAdPlaying() },
2581
- h
2727
+ d
2582
2728
  );
2583
2729
  }
2584
2730
  if (e.loopSection && !this.loopSection) {
2585
- const h = e.loopSection === !0 ? {} : e.loopSection, { installLoopSection: c } = await import("./index-f0vSgRIK.js");
2586
- this.loopSection = c(
2731
+ const d = e.loopSection === !0 ? {} : e.loopSection, { installLoopSection: u } = await import("./index-f0vSgRIK.js");
2732
+ this.loopSection = u(
2587
2733
  {
2588
2734
  videoEl: this.videoEl,
2589
2735
  seekBarEl: this.controlBar.seekBar.el,
2590
2736
  markers: this.controlBar.seekBar,
2591
- addControlButton: (g, b, v) => this.controlBar.addButton(g, b, v),
2737
+ addControlButton: (b, y, k) => this.controlBar.addButton(b, y, k),
2592
2738
  i18n: this.i18n
2593
2739
  },
2594
- h
2740
+ d
2595
2741
  );
2596
2742
  }
2597
2743
  if (e.inViewAutoplay && !this.inViewAutoplay) {
2598
- const h = e.inViewAutoplay === !0 ? {} : e.inViewAutoplay, { installInViewAutoplay: c } = await import("./index-3QALpwsf.js");
2599
- this.inViewAutoplay = c(
2600
- { videoEl: this.videoEl, observeEl: this, isAdActive: () => this.isAdPlaying() },
2601
- h
2744
+ const d = e.inViewAutoplay === !0 ? {} : e.inViewAutoplay, { installInViewAutoplay: u } = await import("./index-3QALpwsf.js");
2745
+ this.inViewAutoplay = u(
2746
+ { videoEl: this.videoEl, observeEl: this, isAdActive: () => this.isAdPlaying() || this.casting },
2747
+ d
2602
2748
  );
2603
2749
  }
2604
2750
  if (e.sticky && !this.unregisterSticky) {
2605
- const h = e.sticky === !0 ? {} : e.sticky, { installSticky: c } = await import("./index-CDDke5rz.js");
2606
- this.unregisterSticky = c(
2751
+ const d = e.sticky === !0 ? {} : e.sticky, { installSticky: u } = await import("./index-CDDke5rz.js");
2752
+ this.unregisterSticky = u(
2607
2753
  {
2608
2754
  key: this.instanceKey,
2609
2755
  videoEl: this.videoEl,
@@ -2613,23 +2759,23 @@ class ke extends HTMLElement {
2613
2759
  isAdActive: () => this.isAdPlaying(),
2614
2760
  i18n: this.i18n
2615
2761
  },
2616
- h
2762
+ d
2617
2763
  );
2618
2764
  }
2619
2765
  if (e.playlist && !this.playlistRunner) {
2620
- const { installPlaylist: h } = await import("./index-DpUZXNJS.js");
2621
- this.playlistRunner = h(
2766
+ const { installPlaylist: d } = await import("./index-D3Z7ZDLJ.js");
2767
+ this.playlistRunner = d(
2622
2768
  {
2623
2769
  videoEl: this.videoEl,
2624
2770
  hostEl: this,
2625
2771
  panelEl: this.getOrCreatePanelContainer(),
2626
- loadSource: (c, g) => this.sourceManager.load(c, g),
2627
- setPoster: (c) => {
2628
- this.videoEl.poster = c;
2772
+ loadSource: (u, b) => this.sourceManager.load(u, b),
2773
+ setPoster: (u) => {
2774
+ this.videoEl.poster = u;
2629
2775
  },
2630
- requestFreshAd: (c) => {
2631
- var g;
2632
- return (g = this.adsController) == null ? void 0 : g.resetForNewItem(c);
2776
+ requestFreshAd: (u) => {
2777
+ var b;
2778
+ return (b = this.adsController) == null ? void 0 : b.resetForNewItem(u);
2633
2779
  },
2634
2780
  i18n: this.i18n
2635
2781
  },
@@ -2637,20 +2783,20 @@ class ke extends HTMLElement {
2637
2783
  );
2638
2784
  }
2639
2785
  if (e.story && !this.hopeStory) {
2640
- const { installStory: h } = await import("./index-ClQg_X1N.js");
2641
- this.hopeStory = h(
2786
+ const { installStory: d } = await import("./index-C3BQGcT3.js");
2787
+ this.hopeStory = d(
2642
2788
  {
2643
2789
  videoEl: this.videoEl,
2644
2790
  hostEl: this,
2645
2791
  videoAreaEl: this.videoArea,
2646
2792
  playerBodyEls: [this.root.querySelector(".media-layer"), this.chromeEl, this.centerPlayButton],
2647
- loadSource: (c, g) => this.sourceManager.load(c, g),
2648
- setPoster: (c) => {
2649
- this.videoEl.poster = c;
2793
+ loadSource: (u, b) => this.sourceManager.load(u, b),
2794
+ setPoster: (u) => {
2795
+ this.videoEl.poster = u;
2650
2796
  },
2651
- requestFreshAd: (c) => {
2652
- var g;
2653
- return (g = this.adsController) == null ? void 0 : g.resetForNewItem(c);
2797
+ requestFreshAd: (u) => {
2798
+ var b;
2799
+ return (b = this.adsController) == null ? void 0 : b.resetForNewItem(u);
2654
2800
  },
2655
2801
  i18n: this.i18n
2656
2802
  },
@@ -2658,24 +2804,24 @@ class ke extends HTMLElement {
2658
2804
  );
2659
2805
  }
2660
2806
  if (e.markers && !this.markProgress) {
2661
- const { installMarkers: h } = await import("./index-DRlQC-ev.js");
2662
- this.markProgress = h(
2807
+ const { installMarkers: d } = await import("./index-e00_M05B.js");
2808
+ this.markProgress = d(
2663
2809
  {
2664
2810
  videoEl: this.videoEl,
2665
2811
  overlayContainerEl: this.videoArea,
2666
- addSeekBarMarker: (c, g) => this.controlBar.seekBar.addMarker(c, g),
2812
+ addSeekBarMarker: (u, b) => this.controlBar.seekBar.addMarker(u, b),
2667
2813
  i18n: this.i18n
2668
2814
  },
2669
2815
  e.markers
2670
2816
  );
2671
2817
  }
2672
- if ((l = e.segments) != null && l.length && !this.segments) {
2673
- const { installSegments: h } = await import("./index-BOoNcKeR.js");
2674
- this.segments = h({ videoEl: this.videoEl, seekBar: this.controlBar.seekBar }, e.segments);
2818
+ if ((g = e.segments) != null && g.length && !this.segments) {
2819
+ const { installSegments: d } = await import("./index-CBX7bn-G.js");
2820
+ this.segments = d({ videoEl: this.videoEl, seekBar: this.controlBar.seekBar }, e.segments);
2675
2821
  }
2676
2822
  if (e.spriteThumbnails && !this.spriteThumbnails) {
2677
- const { installSpriteThumbnails: h } = await import("./index-BvoB2O1p.js");
2678
- this.spriteThumbnails = h(
2823
+ const { installSpriteThumbnails: d } = await import("./index-BXSND_xN.js");
2824
+ this.spriteThumbnails = d(
2679
2825
  {
2680
2826
  videoEl: this.videoEl,
2681
2827
  seekBar: this.controlBar.seekBar,
@@ -2685,31 +2831,31 @@ class ke extends HTMLElement {
2685
2831
  );
2686
2832
  }
2687
2833
  if (e.redirectScreen && !this.redirectScreen) {
2688
- const { installRedirectScreen: h } = await import("./index-D6r-BGAV.js");
2689
- this.redirectScreen = h(
2834
+ const { installRedirectScreen: d } = await import("./index-D6r-BGAV.js");
2835
+ this.redirectScreen = d(
2690
2836
  { videoEl: this.videoEl, overlayContainerEl: this.videoArea, isAdActive: () => this.isAdPlaying(), i18n: this.i18n },
2691
2837
  e.redirectScreen
2692
2838
  );
2693
2839
  }
2694
2840
  if (e.qrResume && !this.qrResume) {
2695
- const { installQrResume: h } = await import("./index-DT8-oMPm.js");
2696
- this.qrResume = h({ videoEl: this.videoEl, overlayContainerEl: this.videoArea, i18n: this.i18n }, e.qrResume);
2841
+ const { installQrResume: d } = await import("./index-DT8-oMPm.js");
2842
+ this.qrResume = d({ videoEl: this.videoEl, overlayContainerEl: this.videoArea, i18n: this.i18n }, e.qrResume);
2697
2843
  }
2698
2844
  if (this.qrResume) {
2699
- const h = this.qrResume;
2845
+ const d = this.qrResume;
2700
2846
  this.controlBar.settingsMenu.setQrResumeToggle({
2701
2847
  label: this.i18n.qrResumeMenuLabel,
2702
- getValueLabel: () => h.isEnabled() ? this.i18n.qrResumeOn : this.i18n.qrResumeOff,
2703
- onToggle: () => h.setEnabled(!h.isEnabled())
2848
+ getValueLabel: () => d.isEnabled() ? this.i18n.qrResumeOn : this.i18n.qrResumeOff,
2849
+ onToggle: () => d.setEnabled(!d.isEnabled())
2704
2850
  });
2705
2851
  }
2706
2852
  if (e.tapGestures && !this.tapGestures) {
2707
- const { installTapGestures: h } = await import("./index-C5oGMHF_.js");
2708
- this.tapGestures = h(
2853
+ const { installTapGestures: d } = await import("./index-C5oGMHF_.js");
2854
+ this.tapGestures = d(
2709
2855
  {
2710
2856
  areaEl: this.videoArea,
2711
- seekBy: (c) => {
2712
- this.controlBar.seekBar.el.style.pointerEvents !== "none" && (ce(this.videoEl, c), this.seekFeedback.show(c));
2857
+ seekBy: (u) => {
2858
+ this.controlBar.seekBar.el.style.pointerEvents !== "none" && (ve(this.videoEl, u), this.seekFeedback.show(u));
2713
2859
  },
2714
2860
  togglePlay: () => this.videoEl.paused ? void this.videoEl.play().catch(() => {
2715
2861
  }) : this.videoEl.pause(),
@@ -2722,63 +2868,63 @@ class ke extends HTMLElement {
2722
2868
  );
2723
2869
  }
2724
2870
  if (this.tapGestures) {
2725
- const { DEFAULT_TAP_GESTURES: h } = await import("./index-C5oGMHF_.js");
2726
- this.tapGestures.setGestures(e.tapGestures === !0 ? h : e.tapGestures || []);
2871
+ const { DEFAULT_TAP_GESTURES: d } = await import("./index-C5oGMHF_.js");
2872
+ this.tapGestures.setGestures(e.tapGestures === !0 ? d : e.tapGestures || []);
2727
2873
  }
2728
- if ((p = e.pauseAd) != null && p.adUnitPath && !this.pauseAd) {
2729
- const { installPauseAd: h } = await import("./index-CaMVTgh0.js");
2730
- this.pauseAd = h(
2874
+ if ((m = e.pauseAd) != null && m.adUnitPath && !this.pauseAd) {
2875
+ const { installPauseAd: d } = await import("./index-CDPrkLq0.js");
2876
+ this.pauseAd = d(
2731
2877
  { videoEl: this.videoEl, hostEl: this, videoArea: this.videoArea, i18n: this.i18n, isBlocked: () => this.isChromeBlocked },
2732
2878
  e.pauseAd
2733
2879
  );
2734
2880
  }
2735
2881
  if (e.dubbing && !this.dubbing) {
2736
- const { installDubbing: h } = await import("./index-DXWK4EFa.js");
2737
- this.dubbing = h(
2882
+ const { installDubbing: d } = await import("./index-DXWK4EFa.js");
2883
+ this.dubbing = d(
2738
2884
  {
2739
2885
  videoEl: this.videoEl,
2740
- loadSource: (c, g) => this.sourceManager.load(c, g),
2741
- registerSubmenu: (c) => this.controlBar.settingsMenu.registerSubmenu(c),
2742
- unregisterSubmenu: (c) => this.controlBar.settingsMenu.unregisterSubmenu(c),
2886
+ loadSource: (u, b) => this.sourceManager.load(u, b),
2887
+ registerSubmenu: (u) => this.controlBar.settingsMenu.registerSubmenu(u),
2888
+ unregisterSubmenu: (u) => this.controlBar.settingsMenu.unregisterSubmenu(u),
2743
2889
  i18n: this.i18n
2744
2890
  },
2745
2891
  e.dubbing
2746
2892
  );
2747
2893
  }
2748
2894
  if (e.liveWallClock && !this.liveWallClock) {
2749
- const h = e.liveWallClock === !0 ? {} : e.liveWallClock, { installLiveWallClock: c } = await import("./index-7IBf8Y-R.js");
2750
- this.liveWallClock = c(
2895
+ const d = e.liveWallClock === !0 ? {} : e.liveWallClock, { installLiveWallClock: u } = await import("./index-7IBf8Y-R.js");
2896
+ this.liveWallClock = u(
2751
2897
  {
2752
2898
  videoEl: this.videoEl,
2753
2899
  seekBarEl: this.controlBar.seekBar.el,
2754
- addControlElement: (g) => this.controlBar.addElement(g),
2900
+ addControlElement: (b) => this.controlBar.addElement(b),
2755
2901
  i18n: this.i18n,
2756
2902
  getPlayingDate: () => {
2757
- var y, f, x;
2758
- const g = (y = this.sourceManager.hlsInstance) == null ? void 0 : y.playingDate;
2759
- if (g) return g;
2760
- const b = (x = (f = this.videoEl).getStartDate) == null ? void 0 : x.call(f), v = (b == null ? void 0 : b.getTime()) ?? NaN;
2761
- return Number.isFinite(v) && v > 0 ? new Date(v + this.videoEl.currentTime * 1e3) : null;
2903
+ var E, C, w;
2904
+ const b = (E = this.sourceManager.hlsInstance) == null ? void 0 : E.playingDate;
2905
+ if (b) return b;
2906
+ const y = (w = (C = this.videoEl).getStartDate) == null ? void 0 : w.call(C), k = (y == null ? void 0 : y.getTime()) ?? NaN;
2907
+ return Number.isFinite(k) && k > 0 ? new Date(k + this.videoEl.currentTime * 1e3) : null;
2762
2908
  }
2763
2909
  },
2764
- h
2910
+ d
2765
2911
  ), this.controlBar.seekBar.liveHoverHandled = !0;
2766
2912
  }
2767
2913
  if (e.dai && !this.daiController) {
2768
- const { installDai: h } = await import("./index-Q8FMOHj0.js");
2769
- this.daiController = await h(
2914
+ const { installDai: d } = await import("./index-Q8FMOHj0.js");
2915
+ this.daiController = await d(
2770
2916
  {
2771
2917
  videoEl: this.videoEl,
2772
2918
  hostEl: this,
2773
2919
  adUiEl: this.adLayerEl,
2774
- loadStreamUrl: (c) => this.sourceManager.load(c),
2920
+ loadStreamUrl: (u) => this.sourceManager.load(u),
2775
2921
  disableSeeking: () => this.disableSeeking(),
2776
2922
  enableSeeking: () => this.enableSeeking()
2777
2923
  },
2778
2924
  e.dai
2779
2925
  );
2780
2926
  }
2781
- (u = e.subtitles) != null && u.length ? this.optionTracks = $e(this.videoEl, e.subtitles) : (be(this.videoEl), this.optionTracks = []), this.rebuildCaptions(((m = (d = e.subtitles) == null ? void 0 : d.find((h) => h.default)) == null ? void 0 : m.label) ?? null);
2927
+ (f = e.subtitles) != null && f.length ? this.optionTracks = tt(this.videoEl, e.subtitles) : (we(this.videoEl), this.optionTracks = []), this.rebuildCaptions(((x = (v = e.subtitles) == null ? void 0 : v.find((d) => d.default)) == null ? void 0 : x.label) ?? null);
2782
2928
  }
2783
2929
  /** Altyazı menüsünü `options.subtitles` + yayın izlerinden kurar; `activeLabel` varsa onu seçer. */
2784
2930
  rebuildCaptions(e) {
@@ -2788,18 +2934,18 @@ class ke extends HTMLElement {
2788
2934
  }
2789
2935
  const i = (o) => {
2790
2936
  var l;
2791
- const a = Ke(this.subtitleTracks, o);
2792
- this.activeCaptionLabel = a ? o : null, this.sourceManager.selectTextTrack(((l = this.streamTracks.find((p) => p.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);
2937
+ const a = it(this.subtitleTracks, o);
2938
+ 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);
2793
2939
  };
2794
2940
  this.selectCaption = i;
2795
- const r = e && this.subtitleTracks.some((o) => o.label === e) ? e : null;
2941
+ const s = e && this.subtitleTracks.some((o) => o.label === e) ? e : null;
2796
2942
  this.controlBar.setCaptions(
2797
2943
  [
2798
2944
  { label: this.i18n.captionsOff, onSelect: () => i(null) },
2799
2945
  ...this.subtitleTracks.map(({ label: o }) => ({ label: o, onSelect: () => i(o) }))
2800
2946
  ],
2801
- r ?? this.i18n.captionsOff
2802
- ), i(r);
2947
+ s ?? this.i18n.captionsOff
2948
+ ), i(s);
2803
2949
  }
2804
2950
  /**
2805
2951
  * Yayın izinin menü adı: manifestteki ad teknik/boşsa ("stream_5", "und", dil kodunun kendisi) dil kodundan
@@ -2815,37 +2961,37 @@ class ke extends HTMLElement {
2815
2961
  return e || i;
2816
2962
  }
2817
2963
  /** Aynı adlı iz varsa (ör. options.subtitles'ta da "English") dil/sırayla ayırt edilir. */
2818
- uniqueLabel(e, i, r) {
2819
- const o = r.has(e) ? `${e} (${i})` : e;
2820
- return r.add(o), o;
2964
+ uniqueLabel(e, i, s) {
2965
+ const o = s.has(e) ? `${e} (${i})` : e;
2966
+ return s.add(o), o;
2821
2967
  }
2822
2968
  /** 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). */
2823
2969
  buildCaptionAppearance() {
2824
- const e = ["small", "normal", "large"], i = (r, o, a, l) => r.map((p, u) => ({
2825
- value: p,
2826
- active: o() === p,
2827
- ariaLabel: `${l} ${u + 1}`,
2828
- onSelect: () => a(p)
2970
+ const e = ["small", "normal", "large"], i = (s, o, a, l) => s.map((h, c) => ({
2971
+ value: h,
2972
+ active: o() === h,
2973
+ ariaLabel: `${l} ${c + 1}`,
2974
+ onSelect: () => a(h)
2829
2975
  }));
2830
2976
  return {
2831
2977
  sizeLabel: this.i18n.captionSize,
2832
- getSizeOptions: () => e.map((r) => ({
2833
- label: r === "small" ? this.i18n.captionSizeSmall : r === "large" ? this.i18n.captionSizeLarge : this.i18n.captionSizeNormal,
2834
- active: this.captionRenderer.getFontSize() === r,
2835
- onSelect: () => this.captionRenderer.setFontSize(r)
2978
+ getSizeOptions: () => e.map((s) => ({
2979
+ label: s === "small" ? this.i18n.captionSizeSmall : s === "large" ? this.i18n.captionSizeLarge : this.i18n.captionSizeNormal,
2980
+ active: this.captionRenderer.getFontSize() === s,
2981
+ onSelect: () => this.captionRenderer.setFontSize(s)
2836
2982
  })),
2837
2983
  bgColorLabel: this.i18n.captionBgColor,
2838
2984
  getBgColorOptions: () => i(
2839
- B.BG_COLOR_PRESETS,
2985
+ R.BG_COLOR_PRESETS,
2840
2986
  () => this.captionRenderer.getBgColor(),
2841
- (r) => this.captionRenderer.setBgColor(r),
2987
+ (s) => this.captionRenderer.setBgColor(s),
2842
2988
  this.i18n.captionBgColor
2843
2989
  ),
2844
2990
  textColorLabel: this.i18n.captionTextColor,
2845
2991
  getTextColorOptions: () => i(
2846
- B.TEXT_COLOR_PRESETS,
2992
+ R.TEXT_COLOR_PRESETS,
2847
2993
  () => this.captionRenderer.getTextColor(),
2848
- (r) => this.captionRenderer.setTextColor(r),
2994
+ (s) => this.captionRenderer.setTextColor(s),
2849
2995
  this.i18n.captionTextColor
2850
2996
  ),
2851
2997
  resetPositionLabel: this.i18n.captionResetPosition,
@@ -2870,18 +3016,18 @@ class ke extends HTMLElement {
2870
3016
  pickInitialSource(e) {
2871
3017
  const i = e.find((o) => o.selected) ?? e[0];
2872
3018
  if (!i || !this.isSourceLocked(i)) return i;
2873
- const r = e.filter((o) => !this.isSourceLocked(o));
2874
- return r.length ? r.reduce((o, a) => (this.sourceHeight(a) ?? 0) > (this.sourceHeight(o) ?? 0) ? a : o) : i;
3019
+ const s = e.filter((o) => !this.isSourceLocked(o));
3020
+ return s.length ? s.reduce((o, a) => (this.sourceHeight(a) ?? 0) > (this.sourceHeight(o) ?? 0) ? a : o) : i;
2875
3021
  }
2876
3022
  renderSourceQualities() {
2877
3023
  const e = this.currentSources;
2878
3024
  e.length <= 1 || this.controlBar.setQualities(
2879
3025
  e.map((i) => {
2880
- const r = this.isSourceLocked(i);
3026
+ const s = this.isSourceLocked(i);
2881
3027
  return {
2882
3028
  label: i.label,
2883
- locked: r,
2884
- onSelect: r ? () => {
3029
+ locked: s,
3030
+ onSelect: s ? () => {
2885
3031
  var o;
2886
3032
  return (o = this.qualityGate) == null ? void 0 : o.requestUnlock();
2887
3033
  } : () => void this.switchQualitySource(i)
@@ -2898,8 +3044,8 @@ class ke extends HTMLElement {
2898
3044
  for (const i of this.lastHlsLevels) this.qualityGate.isLocked(i.height) && e.push(i.height);
2899
3045
  else
2900
3046
  for (const i of this.currentSources) {
2901
- const r = this.sourceHeight(i);
2902
- this.currentSources.length > 1 && this.qualityGate.isLocked(r) && e.push(r ?? 0);
3047
+ const s = this.sourceHeight(i);
3048
+ this.currentSources.length > 1 && this.qualityGate.isLocked(s) && e.push(s ?? 0);
2903
3049
  }
2904
3050
  return e.length ? `${Math.max(...e)}p` : null;
2905
3051
  }
@@ -2909,7 +3055,7 @@ class ke extends HTMLElement {
2909
3055
  if (this.lastHlsLevels.length > 1)
2910
3056
  this.onHlsLevelsChanged(this.lastHlsLevels, e ? -1 : this.lastHlsActive), e && this.sourceManager.setLevel(-1);
2911
3057
  else if (this.currentSources.length > 1) {
2912
- const r = e ? this.currentSources.filter((l) => !this.isSourceLocked(l)).reduce((l, p) => !l || (this.sourceHeight(p) ?? 0) > (this.sourceHeight(l) ?? 0) ? p : l, null) : null, o = this.currentSources.find((l) => l.label === this.activeSourceLabel), a = r ?? (o && this.isSourceLocked(o) ? this.pickInitialSource(this.currentSources) : null);
3058
+ const s = 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 = s ?? (o && this.isSourceLocked(o) ? this.pickInitialSource(this.currentSources) : null);
2913
3059
  a && a.label !== this.activeSourceLabel ? this.switchQualitySource(a) : this.renderSourceQualities();
2914
3060
  }
2915
3061
  (i = this.rewardedUnlock) == null || i.onQualitiesChanged();
@@ -2923,8 +3069,8 @@ class ke extends HTMLElement {
2923
3069
  if (this.rewardedUnlock)
2924
3070
  this.rewardedUnlock.update(i);
2925
3071
  else {
2926
- const { installRewardedUnlock: r } = await import("./index-TkG8IO6q.js");
2927
- this.rewardedUnlock ?? (this.rewardedUnlock = r(
3072
+ const { installRewardedUnlock: s } = await import("./index-BbRYOSvk.js");
3073
+ this.rewardedUnlock ?? (this.rewardedUnlock = s(
2928
3074
  {
2929
3075
  hostEl: this,
2930
3076
  videoEl: this.videoEl,
@@ -2938,25 +3084,125 @@ class ke extends HTMLElement {
2938
3084
  this.isFullscreenActive() && this.exitFullscreenCompat();
2939
3085
  },
2940
3086
  lockedQualityLabel: () => this.lockedQualityLabel(),
2941
- // Kalite dosyası değil içerik: aynı videonun 240p ↔ 720p geçişi kilidi kapatmasın.
2942
- contentKey: () => this.currentSources.map((o) => o.src).join("|"),
3087
+ // Kalite dosyası değil içerik: aynı videonun 240p ↔ 720p geçişi (ya da HLS → MP4 yedeği) kilidi kapatmasın.
3088
+ contentKey: () => this.contentKey(),
2943
3089
  onLockChange: (o) => this.refreshQualityGate(o)
2944
3090
  },
2945
3091
  i
2946
3092
  )), this.qualityGate = this.rewardedUnlock;
2947
3093
  }
2948
3094
  }
3095
+ /**
3096
+ * İçerik kimliği: `sources` çalıyorsa tüm kaynakları (kalite değişimi / yedek kaynak aynı içerik), eklentinin
3097
+ * yüklediği medya (playlist, hikâye, dublaj) çalıyorsa onun adresi.
3098
+ */
3099
+ contentKey() {
3100
+ const e = this.sourceGroups.flatMap((s) => s.sources.map((o) => o.src)), i = this.sourceManager.currentSrc ?? "";
3101
+ return !i || e.includes(i) ? e.join("|") : i;
3102
+ }
3103
+ async applyCast(e) {
3104
+ var s;
3105
+ const i = e.cast;
3106
+ if (!(i != null && i.chromecast) && !(i != null && i.airplay) && !(i != null && i.remotePlayback)) {
3107
+ (s = this.castController) == null || s.destroy(), this.castController = null;
3108
+ return;
3109
+ }
3110
+ if (this.castController)
3111
+ this.castController.update(i);
3112
+ else {
3113
+ const { installCast: o } = await import("./index-Miba3PD_.js");
3114
+ this.castController ?? (this.castController = o(
3115
+ {
3116
+ hostEl: this,
3117
+ videoEl: this.videoEl,
3118
+ overlayEl: this.videoArea,
3119
+ i18n: this.i18n,
3120
+ log: (a) => this.log.add({ source: "player", ...a }),
3121
+ addButton: (a, l, h) => this.controlBar.addButton(a, l, h),
3122
+ getMedia: () => this.castMedia(),
3123
+ isAdPlaying: () => this.isAdPlaying(),
3124
+ isMse: () => this.sourceManager.engine.engine === "hls.js",
3125
+ contentKey: () => this.contentKey(),
3126
+ onRemoteChange: (a) => {
3127
+ var l;
3128
+ this.casting = a, (l = this.adsController) == null || l.setRemote(a), a && this.prerollGate.release(!1);
3129
+ }
3130
+ },
3131
+ i
3132
+ ));
3133
+ }
3134
+ }
3135
+ /** TV'ye gönderilecek içerik: o an çalan kaynak (ya da `cast.source`), başlık / kapak, altyazılar, reklam tag'leri. */
3136
+ castMedia() {
3137
+ var x, d, u, b;
3138
+ const e = this._options, i = e.cast ?? {}, s = this.sourceManager.currentSrc;
3139
+ if (!s) return null;
3140
+ const o = (x = this.currentSources.find((y) => y.src === s)) == null ? void 0 : x.type, a = typeof i.source == "function" ? i.source({ src: s, type: o }) : i.source ?? { src: s, type: o }, l = typeof a == "string" ? { src: a, type: void 0 } : a, h = (y) => new URL(y, document.baseURI).href, c = fe({ src: l.src, type: l.type }), p = typeof e.audio == "object" ? e.audio : null, g = ((d = i.metadata) == null ? void 0 : d.image) ?? (p == null ? void 0 : p.cover) ?? e.poster, m = typeof e.ads == "object" ? e.ads : null, f = (y) => {
3141
+ const k = Array.isArray(y) ? y[0] : y;
3142
+ return k ? G(k) : void 0;
3143
+ }, v = i.ads === !1 ? null : typeof i.ads == "object" ? {
3144
+ vmap: i.ads.vmap ? G(i.ads.vmap) : void 0,
3145
+ preroll: f(i.ads.preroll),
3146
+ midroll: f(i.ads.midroll),
3147
+ midrollIntervalSeconds: i.ads.midrollIntervalSeconds,
3148
+ postroll: f(i.ads.postroll)
3149
+ } : m ? {
3150
+ vmap: m.adTagVmap ? G(m.adTagVmap) : void 0,
3151
+ preroll: f(m.adTagPreroll),
3152
+ midroll: f(m.adTagMidroll),
3153
+ midrollIntervalSeconds: m.midrollIntervalSeconds,
3154
+ postroll: f(m.adTagPostroll)
3155
+ } : null;
3156
+ return {
3157
+ src: h(l.src),
3158
+ contentType: l.type || Ft[c] || "video/mp4",
3159
+ live: this.videoEl.duration === 1 / 0,
3160
+ title: ((u = i.metadata) == null ? void 0 : u.title) ?? (p == null ? void 0 : p.title),
3161
+ subtitle: ((b = i.metadata) == null ? void 0 : b.subtitle) ?? (p == null ? void 0 : p.artist),
3162
+ image: g ? h(g) : void 0,
3163
+ music: !!e.audio,
3164
+ subtitles: (e.subtitles ?? []).map((y) => ({ src: h(y.src), label: y.label, lang: y.srclang, default: y.default })),
3165
+ ads: v && (v.vmap || v.preroll || v.midroll || v.postroll) ? v : null
3166
+ };
3167
+ }
3168
+ async applyAdTriggers(e) {
3169
+ var s;
3170
+ const i = e.adTriggers;
3171
+ if (!(i != null && i.endpoint) && !(i != null && i.config)) {
3172
+ (s = this.adTriggers) == null || s.destroy(), this.adTriggers = null;
3173
+ return;
3174
+ }
3175
+ if (this.adTriggers)
3176
+ this.adTriggers.update(i);
3177
+ else {
3178
+ const { installAdTriggers: o } = await import("./index-CWLyz1fp.js");
3179
+ this.adTriggers ?? (this.adTriggers = o(
3180
+ {
3181
+ hostEl: this,
3182
+ videoEl: this.videoEl,
3183
+ overlayEl: this.videoArea,
3184
+ i18n: this.i18n,
3185
+ log: (a) => this.log.add({ source: "ads", ...a }),
3186
+ isBlocked: () => this.isChromeBlocked || this.isAdPlaying() || this.casting,
3187
+ isFullscreen: () => this.isFullscreenActive(),
3188
+ isNativeFullscreen: () => !!this.iosVideo.webkitDisplayingFullscreen,
3189
+ contentKey: () => this.contentKey()
3190
+ },
3191
+ i
3192
+ ));
3193
+ }
3194
+ }
2949
3195
  async applySponsorship(e) {
2950
- var r;
3196
+ var s;
2951
3197
  const i = e.sponsorship;
2952
3198
  if (!(i != null && i.endpoint)) {
2953
- (r = this.sponsorship) == null || r.destroy(), this.sponsorship = null;
3199
+ (s = this.sponsorship) == null || s.destroy(), this.sponsorship = null;
2954
3200
  return;
2955
3201
  }
2956
3202
  if (this.sponsorship)
2957
3203
  this.sponsorship.update(i);
2958
3204
  else {
2959
- const { installSponsorship: o } = await import("./index-D5P-LWbg.js");
3205
+ const { installSponsorship: o } = await import("./index-Ch3ep-eJ.js");
2960
3206
  this.sponsorship ?? (this.sponsorship = o(
2961
3207
  {
2962
3208
  hostEl: this,
@@ -2972,10 +3218,69 @@ class ke extends HTMLElement {
2972
3218
  /** Kalite değişirken oynatma konumunu ve play/pause durumunu korur. */
2973
3219
  async switchQualitySource(e) {
2974
3220
  this.activeSourceLabel = e.label, this.renderSourceQualities();
2975
- const i = this.videoEl.currentTime, r = !this.videoEl.paused;
2976
- await this.sourceManager.load(e.src, e.type), this.videoEl.currentTime = i, r && this.videoEl.play().catch(() => {
3221
+ const i = this.videoEl.currentTime, s = !this.videoEl.paused;
3222
+ await this.sourceManager.load(e.src, e.type), this.videoEl.currentTime = i, s && this.videoEl.play().catch(() => {
2977
3223
  }), this.dispatchEvent(new CustomEvent("hp:qualitychange", { detail: { label: e.label } }));
2978
3224
  }
3225
+ /** `from`'dan itibaren tarayıcının oynatabileceği ilk grup (oynatamadıkları atlanır); hiçbiri yoksa -1 (from 0'sa 0 — yine de dene). */
3226
+ firstPlayableGroup(e = 0) {
3227
+ var i;
3228
+ for (let s = e; s < this.sourceGroups.length; s++) {
3229
+ const o = this.sourceGroups[s];
3230
+ if (!ze(o, this.videoEl)) {
3231
+ if (s > e) {
3232
+ const a = this.sourceGroups[e].format;
3233
+ this.dispatchEvent(new CustomEvent("hp:sourcefallback", { detail: { from: a, to: o.format, code: 4, skipped: !0 } }));
3234
+ }
3235
+ return s;
3236
+ }
3237
+ 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 } });
3238
+ }
3239
+ return e === 0 ? 0 : -1;
3240
+ }
3241
+ /**
3242
+ * Ölümcül hata: sıradaki biçim grubuna geç (konum ve oynatma durumu korunur).
3243
+ * true = geçiliyor, hata ekranı gösterilmez. Hata ekranının `shouldShow`'undan çağrılır.
3244
+ */
3245
+ tryNextSourceGroup() {
3246
+ var l;
3247
+ if (this.fallbackPending) return !0;
3248
+ const e = this.sourceGroups[this.activeGroup];
3249
+ if (!e || this.sourceGroups.length < 2 || !e.sources.some((h) => h.src === this.sourceManager.currentSrc)) return !1;
3250
+ const i = ((l = this.videoEl.error) == null ? void 0 : l.code) ?? this.streamErrorCode;
3251
+ if (this.streamErrorCode = void 0, i === 1) return !1;
3252
+ const s = this.firstPlayableGroup(this.activeGroup + 1);
3253
+ if (s === -1) return !1;
3254
+ this.fallbackPending = !0;
3255
+ const o = Number.isFinite(this.videoEl.duration) ? this.videoEl.currentTime : 0, a = !this.videoEl.paused || !!this._options.autoplay;
3256
+ return this.log.add({
3257
+ source: "player",
3258
+ message: `Source "${e.format}" failed — falling back to "${this.sourceGroups[s].format}"`,
3259
+ details: { code: i, src: this.sourceManager.currentSrc ?? void 0 }
3260
+ }), this.dispatchEvent(new CustomEvent("hp:sourcefallback", { detail: { from: e.format, to: this.sourceGroups[s].format, code: i } })), queueMicrotask(() => void this.activateSourceGroup(s, o, a)), !0;
3261
+ }
3262
+ async activateSourceGroup(e, i, s) {
3263
+ var l;
3264
+ const o = this.sourceGroups[e];
3265
+ if (!o) return;
3266
+ this.activeGroup = e, this.currentSources = o.sources;
3267
+ const a = this.pickInitialSource(o.sources);
3268
+ 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 });
3269
+ try {
3270
+ await this.sourceManager.load(a.src, a.type);
3271
+ } finally {
3272
+ this.fallbackPending = !1;
3273
+ }
3274
+ this.renderSourceQualities(), (l = this.rewardedUnlock) == null || l.onQualitiesChanged(), s && this.videoEl.play().catch(() => {
3275
+ });
3276
+ }
3277
+ /** Hata ekranındaki "Tekrar dene": birden fazla grup varsa en öncelikli gruptan baştan başla. */
3278
+ async retrySource() {
3279
+ const e = this.sourceGroups.some((s) => s.sources.some((o) => o.src === this.sourceManager.currentSrc));
3280
+ if (this.sourceGroups.length < 2 || !e) return this.sourceManager.reload();
3281
+ const i = Number.isFinite(this.videoEl.duration) ? this.videoEl.currentTime : 0;
3282
+ this.fallbackPending = !0, await this.activateSourceGroup(this.firstPlayableGroup(), i, !0);
3283
+ }
2979
3284
  // ── Fullscreen (vendor-prefix uyumlu) ───────────────────────────────
2980
3285
  /** iPhone Safari element tam ekranını desteklemiyor — yalnızca <video>'nun kendi (native kontrollü) tam ekranı. */
2981
3286
  get iosVideo() {
@@ -2984,15 +3289,15 @@ class ke extends HTMLElement {
2984
3289
  requestFullscreenCompat() {
2985
3290
  if (this.audioMode) return;
2986
3291
  const e = this, i = () => {
2987
- var r, o;
2988
- return (o = (r = this.iosVideo).webkitEnterFullscreen) == null ? void 0 : o.call(r);
3292
+ var s, o;
3293
+ return (o = (s = this.iosVideo).webkitEnterFullscreen) == null ? void 0 : o.call(s);
2989
3294
  };
2990
3295
  e.requestFullscreen ? e.requestFullscreen().catch(i) : e.webkitRequestFullscreen ? e.webkitRequestFullscreen() : i();
2991
3296
  }
2992
3297
  exitFullscreenCompat() {
2993
- var i, r;
3298
+ var i, s;
2994
3299
  if (this.iosVideo.webkitDisplayingFullscreen) {
2995
- (r = (i = this.iosVideo).webkitExitFullscreen) == null || r.call(i);
3300
+ (s = (i = this.iosVideo).webkitExitFullscreen) == null || s.call(i);
2996
3301
  return;
2997
3302
  }
2998
3303
  const e = document;
@@ -3030,20 +3335,20 @@ class ke extends HTMLElement {
3030
3335
  * alanın ortasına alınır, sığmazsa küçülür (en az 40px).
3031
3336
  */
3032
3337
  layoutCenterPlay() {
3033
- const e = this.videoArea, i = e.getBoundingClientRect(), r = this.controlBar.seekBar.el.getBoundingClientRect(), o = () => {
3338
+ const e = this.videoArea, i = e.getBoundingClientRect(), s = this.controlBar.seekBar.el.getBoundingClientRect(), o = () => {
3034
3339
  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");
3035
3340
  };
3036
- if (!i.height || !r.height || !e.hasAttribute("data-compact")) return o();
3037
- const a = 64, l = r.top - i.top - 8;
3341
+ if (!i.height || !s.height || !e.hasAttribute("data-compact")) return o();
3342
+ const a = 64, l = s.top - i.top - 8;
3038
3343
  if (i.height / 2 + a / 2 <= l) return o();
3039
- const p = Math.max(40, Math.min(56, l - 12)), u = Math.max(p / 2 + 6, l - p / 2), d = Math.round(u - i.height / 2);
3040
- let m = 0;
3041
- const h = this.controlBar.topEl.getBoundingClientRect();
3042
- if (h.width > 0 && u - p / 2 < h.bottom - i.top) {
3043
- const c = h.left - i.left - 8 - p / 2;
3044
- i.width / 2 > c && (m = Math.round(Math.max(p / 2 + 8, c) - i.width / 2));
3344
+ const h = Math.max(40, Math.min(56, l - 12)), c = Math.max(h / 2 + 6, l - h / 2), p = Math.round(c - i.height / 2);
3345
+ let g = 0;
3346
+ const m = this.controlBar.topEl.getBoundingClientRect();
3347
+ if (m.width > 0 && c - h / 2 < m.bottom - i.top) {
3348
+ const f = m.left - i.left - 8 - h / 2;
3349
+ i.width / 2 > f && (g = Math.round(Math.max(h / 2 + 8, f) - i.width / 2));
3045
3350
  }
3046
- e.setAttribute("data-center-play-shifted", ""), e.style.setProperty("--hp-center-play-shift-x", `${m}px`), e.style.setProperty("--hp-center-play-size", `${p}px`), e.style.setProperty("--hp-center-play-shift", `${d}px`);
3351
+ e.setAttribute("data-center-play-shifted", ""), e.style.setProperty("--hp-center-play-shift-x", `${g}px`), e.style.setProperty("--hp-center-play-size", `${h}px`), e.style.setProperty("--hp-center-play-shift", `${p}px`);
3047
3352
  }
3048
3353
  /** Dar player'da dokunmatikte oynat/duraklat yerine kontrolleri göster/gizle (options.tapToPlay). */
3049
3354
  tapTogglesPlay(e) {
@@ -3062,8 +3367,8 @@ class ke extends HTMLElement {
3062
3367
  }
3063
3368
  /** Chrome görünürlüğünün tek giriş noktası — altyazı da haberdar olur (kontroller gizlenince en alta iner). */
3064
3369
  setChromeOpacity(e) {
3065
- var i;
3066
- this.chromeEl.style.opacity = e, this.chromeVisible = e === "1", (i = this.captionRenderer) == null || i.setChromeVisible(this.chromeVisible), this.updateMiniProgress();
3370
+ var i, s;
3371
+ this.chromeEl.style.opacity = e, this.chromeVisible = e === "1", (i = this.videoArea) == null || i.toggleAttribute("data-chrome-hidden", !this.chromeVisible), (s = this.captionRenderer) == null || s.setChromeVisible(this.chromeVisible), this.updateMiniProgress();
3067
3372
  }
3068
3373
  /** İnce ilerleme çizgisi: yalnızca kontroller gizliyken; reklam/giriş ekranı (chrome bloklu) sırasında değil. */
3069
3374
  updateMiniProgress() {
@@ -3103,10 +3408,10 @@ class ke extends HTMLElement {
3103
3408
  }
3104
3409
  /** options.audio: sahneyi kurar, günceller (konum / boyut / devir canlı değişebilir) ya da kaldırır. */
3105
3410
  async applyAudioMode(e) {
3106
- var r;
3411
+ var s;
3107
3412
  const i = e.audio ? e.audio === !0 ? {} : e.audio : null;
3108
3413
  if (this.audioMode = !!i, this.toggleAttribute("data-audio", !!i), this.controlBar.setAudioMode(!!i), this.toggleAttribute("data-audio-compact", (i == null ? void 0 : i.layout) === "compact"), !i) {
3109
- this.controlBar.setAudioBar(null), (r = this.audioStage) == null || r.destroy(), this.audioStage = null;
3414
+ this.controlBar.setAudioBar(null), (s = this.audioStage) == null || s.destroy(), this.audioStage = null;
3110
3415
  return;
3111
3416
  }
3112
3417
  if (this.hideTimer && clearTimeout(this.hideTimer), this.hideTimer = null, this.isChromeBlocked || this.showChrome(), this.audioStage)
@@ -3136,8 +3441,8 @@ class ke extends HTMLElement {
3136
3441
  if (!this.adsInstall) {
3137
3442
  const i = e.ads === !0 ? {} : e.ads;
3138
3443
  this.adsInstall = (async () => {
3139
- const { installAds: r } = await import("./index-BCMVXNL0.js");
3140
- this.adsController = await r(
3444
+ const { installAds: s } = await import("./index-DITXYcHx.js");
3445
+ this.adsController = await s(
3141
3446
  {
3142
3447
  videoEl: this.videoEl,
3143
3448
  hostEl: this,
@@ -3171,8 +3476,8 @@ class ke extends HTMLElement {
3171
3476
  },
3172
3477
  i
3173
3478
  );
3174
- })().catch((r) => {
3175
- this.prerollGate.release(!0), this.adsInstall = null, this.dispatchEvent(new CustomEvent("hp:aderror", { detail: { message: String(r) } }));
3479
+ })().catch((s) => {
3480
+ this.prerollGate.release(!0), this.adsInstall = null, this.dispatchEvent(new CustomEvent("hp:aderror", { detail: { message: String(s) } }));
3176
3481
  });
3177
3482
  }
3178
3483
  return this.adsInstall;
@@ -3193,13 +3498,15 @@ class ke extends HTMLElement {
3193
3498
  }
3194
3499
  }
3195
3500
  /** Paket sürümü (ör. "1.0.4"). */
3196
- s(ke, "version", N);
3197
- typeof window < "u" && !customElements.get("hope-player") && customElements.define("hope-player", ke);
3501
+ r(Ae, "version", N);
3502
+ typeof window < "u" && !customElements.get("hope-player") && customElements.define("hope-player", Ae);
3198
3503
  export {
3199
3504
  N as H,
3200
- Re as L,
3201
- ke as a,
3202
- E as c,
3203
- w as f
3505
+ He as L,
3506
+ Ae as a,
3507
+ S as c,
3508
+ T as f,
3509
+ G as g,
3510
+ B as s
3204
3511
  };
3205
- //# sourceMappingURL=index-w7pACyTw.js.map
3512
+ //# sourceMappingURL=index-DEv3YqLg.js.map