@serifpersia/dango 3.3.5 → 3.3.6

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 (54) hide show
  1. package/README.md +1 -1
  2. package/client/dist/assets/{AnimeCard-CXx2EIN7.js → AnimeCard-OKU7LaSN.js} +1 -1
  3. package/client/dist/assets/{AnimeInfo-C6ehrfYW.js → AnimeInfo-BCyLw0yz.js} +1 -1
  4. package/client/dist/assets/{AnimeInfoPage-pgnMg0On.js → AnimeInfoPage-BZWl-TJY.js} +2 -2
  5. package/client/dist/assets/{Asmr-DfA8xB-U.js → Asmr-4S6uoevp.js} +1 -1
  6. package/client/dist/assets/{AsmrResetProgressModal-QUNnEh9C.js → AsmrResetProgressModal-C8i6weqW.js} +1 -1
  7. package/client/dist/assets/{AvSyncCalibrator-C1_iBSyL.css → AvSyncCalibrator-BPa6KaGC.css} +1 -1
  8. package/client/dist/assets/AvSyncCalibrator-oK6LlG61.js +10 -0
  9. package/client/dist/assets/{Home-Csx6zT32.js → Home-CQ4Ikeja.js} +1 -1
  10. package/client/dist/assets/{Insights-MW8oRqeX.js → Insights-DiAo0UAc.js} +1 -1
  11. package/client/dist/assets/{LibraryListPage-VYaHXgXt.js → LibraryListPage-B0MDTnEc.js} +1 -1
  12. package/client/dist/assets/{ListeningList-BzbQwmh0.js → ListeningList-Dxkhy6E2.js} +1 -1
  13. package/client/dist/assets/{Manga-223panCD.js → Manga-pJEpcUpo.js} +1 -1
  14. package/client/dist/assets/{MangaInfoPage-DBqX-Ord.js → MangaInfoPage-BEQsjTHH.js} +1 -1
  15. package/client/dist/assets/{MangaReadPage-DuXdVyTd.js → MangaReadPage-C0WAtK-1.js} +1 -1
  16. package/client/dist/assets/{MangaResetProgressModal-6C3iaR6g.js → MangaResetProgressModal-WjKH_G_f.js} +1 -1
  17. package/client/dist/assets/{Mature-3VlywJMR.js → Mature-Ckx99wFj.js} +1 -1
  18. package/client/dist/assets/{MediaCard-xfJv6irD.js → MediaCard-DszKDA4s.js} +1 -1
  19. package/client/dist/assets/{Music-DkIeCRq1.js → Music-CU6TBHF5.js} +1 -1
  20. package/client/dist/assets/{OptionListMenu-JQ_--ggT.js → OptionListMenu-CkK2BvEz.js} +1 -1
  21. package/client/dist/assets/{Player-Czg_D7FN.js → Player-C3yWQkXb.js} +5 -5
  22. package/client/dist/assets/{PlayerSettings-KrFECely.js → PlayerSettings-CBdTzo0E.js} +1 -1
  23. package/client/dist/assets/{QueueOptionsButton-BKNDfpCl.js → QueueOptionsButton-DKWi-9kd.js} +1 -1
  24. package/client/dist/assets/{QueueRail-Cgljhm64.js → QueueRail-DAcIex5B.js} +1 -1
  25. package/client/dist/assets/{Radio-wbxhaiqy.js → Radio-BhTsgGGd.js} +1 -1
  26. package/client/dist/assets/{ReadingList-DNJAx_LW.js → ReadingList-BLnkwB--.js} +1 -1
  27. package/client/dist/assets/{ResetProgressModal-By-iSYwL.js → ResetProgressModal-8mcLXaAb.js} +1 -1
  28. package/client/dist/assets/{Search-63TcSgOa.js → Search-DxX021dj.js} +1 -1
  29. package/client/dist/assets/{Settings-BeS0llCE.js → Settings-bSA7BG7h.js} +1 -1
  30. package/client/dist/assets/{SkeletonGrid-CnE_aoEU.js → SkeletonGrid-Du10CNfq.js} +1 -1
  31. package/client/dist/assets/{Trackers-ACFHfLXZ.js → Trackers-BXSONaRD.js} +1 -1
  32. package/client/dist/assets/Tv-C2SWcVzN.css +1 -0
  33. package/client/dist/assets/Tv-DJTbg4VW.js +4 -0
  34. package/client/dist/assets/{TvInfo-fFNHV1RJ.js → TvInfo-Z0c1Wh3i.js} +1 -1
  35. package/client/dist/assets/{TvPopup-DYKTHRrD.js → TvPopup-CP41CncZ.js} +1 -1
  36. package/client/dist/assets/{TvSearch-CpenLEBz.js → TvSearch-BlqTQYJa.js} +1 -1
  37. package/client/dist/assets/{TvWatchlist-CTUZAvfa.js → TvWatchlist-COCWPkgh.js} +1 -1
  38. package/client/dist/assets/{Watchlist-B10pIG1F.js → Watchlist-BHLshSPX.js} +1 -1
  39. package/client/dist/assets/{hls-Cbou9Eb-.js → hls-B_yo8-yR.js} +1 -1
  40. package/client/dist/assets/{index-CfvzoNYQ.js → index-lo-bz7f2.js} +2 -2
  41. package/client/dist/assets/{useAnimeInfoData-D-vEehTG.js → useAnimeInfoData-CbNnHRj8.js} +1 -1
  42. package/client/dist/assets/{useAsmr-B-3EYd-B.js → useAsmr-BEcgHwxg.js} +1 -1
  43. package/client/dist/assets/{useAsmrPopup-D9BxuTDg.js → useAsmrPopup-BXD3y2m1.js} +1 -1
  44. package/client/dist/assets/{useMangaLibrary-DtRKgk2x.js → useMangaLibrary-BXhgN-dl.js} +1 -1
  45. package/client/dist/assets/{useMangaPopup-BNWJ5pR2.js → useMangaPopup-BvgtZ53s.js} +1 -1
  46. package/client/dist/assets/{useProviders-jxh6fvMH.js → useProviders-xlftutIo.js} +1 -1
  47. package/client/dist/assets/{useTv-CP4mofvR.js → useTv-DTqrJEWp.js} +1 -1
  48. package/client/dist/assets/{useTvLibrary-DeGkJuvp.js → useTvLibrary-BHeWSd1F.js} +1 -1
  49. package/client/dist/index.html +1 -1
  50. package/package.json +2 -2
  51. package/server/package.json +1 -1
  52. package/client/dist/assets/AvSyncCalibrator-Bs4iejCG.js +0 -10
  53. package/client/dist/assets/Tv-BCmNLUsp.js +0 -4
  54. package/client/dist/assets/Tv-CuEl3Iol.css +0 -1
@@ -1 +1 @@
1
- import{T as m}from"./vendor-core-8R2fFbyN.js";import{b as y,u as o,a as u}from"./vendor-query-BXRECSI6.js";import{q as i,z as a}from"./index-CfvzoNYQ.js";const d=e=>String(e).toLowerCase()==="movie"?"movie":"tv",g=(e,t)=>`${d(e)}:${t}`,K=(e,t)=>{const r=d(e);return`/tv/${t}?type=${r}`},Q=(e,t,r,s)=>{const n=new URLSearchParams;return n.set("type",d(e)),r!==void 0&&n.set("s",String(r)),s!==void 0&&n.set("e",String(s)),`/tv/${t}/watch?${n.toString()}`},$=e=>e.adult===!0||e.adult===1,f=["Watching","Completed","On-Hold","Dropped","Planned"],l=(e,t)=>g(e,t),w=(e="All",t=1,r=24)=>y({queryKey:["tv-library",e,t,r],queryFn:()=>{const s=new URLSearchParams;return s.set("status",e),s.set("page",String(t)),s.set("limit",String(r)),i(`/api/tv/library?${s.toString()}`)}}),p=()=>y({queryKey:["tv-library-ids"],queryFn:()=>i("/api/tv/library/ids"),staleTime:1e3*60}),P=e=>y({queryKey:["tv-library-check",e],queryFn:()=>i(`/api/tv/library/check/${encodeURIComponent(e||"")}`),enabled:!!e,staleTime:1e3*60}),F=(e=24)=>y({queryKey:["tv-continue-watching",e],queryFn:()=>i(`/api/tv/continue-watching?limit=${e}`)}),O=e=>y({queryKey:["tv-progress",e],queryFn:()=>i(`/api/tv/progress/${encodeURIComponent(e||"")}`),enabled:!!e}),C=(e,t,r)=>y({queryKey:["tv-progress-latest",e,t,r],queryFn:()=>{const s=new URLSearchParams;t!==void 0&&s.set("season",String(t)),r!==void 0&&s.set("episode",String(r));const n=s.toString();return i(`/api/tv/progress/${encodeURIComponent(e||"")}/latest${n?`?${n}`:""}`)},enabled:!!e,staleTime:0}),q=()=>{const e=o();return u({mutationFn:async t=>{const{silent:r,...s}=t;return i("/api/tv/library/add",{method:"POST",body:JSON.stringify(s)})},onSuccess:(t,r)=>{r.silent||a.success("Added to TV watchlist"),e.invalidateQueries({queryKey:["tv-library"]}),e.invalidateQueries({queryKey:["tv-library-ids"]}),e.invalidateQueries({queryKey:["tv-library-check",l(r.mediaType,r.tmdbId)]})},onError:t=>{a.error(`Failed to add: ${t.message}`)}})},b=()=>{const e=o();return u({mutationFn:async t=>{await i("/api/tv/library/remove",{method:"POST",body:JSON.stringify({id:t})})},onSuccess:(t,r)=>{a.success("Removed from TV watchlist"),e.invalidateQueries({queryKey:["tv-library"]}),e.invalidateQueries({queryKey:["tv-library-ids"]}),e.invalidateQueries({queryKey:["tv-continue-watching"]}),e.invalidateQueries({queryKey:["tv-library-check",r]})},onError:t=>{a.error(`Failed to remove: ${t.message}`)}})},R=()=>{const e=o();return u({mutationFn:async({id:t,status:r})=>{await i("/api/tv/library/status",{method:"POST",body:JSON.stringify({id:t,status:r})})},onSuccess:()=>{a.success("Status updated"),e.invalidateQueries({queryKey:["tv-library"]}),e.invalidateQueries({queryKey:["tv-continue-watching"]})},onError:t=>{a.error(`Failed to update status: ${t.message}`)}})},k=()=>{const e=o();return u({mutationFn:async t=>{await i("/api/tv/progress",{method:"POST",body:JSON.stringify(t)})},onSuccess:(t,r)=>{e.invalidateQueries({queryKey:["tv-progress",r.mediaId]}),e.invalidateQueries({queryKey:["tv-progress-latest",r.mediaId]}),e.invalidateQueries({queryKey:["tv-continue-watching"]}),e.invalidateQueries({queryKey:["tv-library"]}),e.invalidateQueries({queryKey:["tv-library-ids"]})}})},L=()=>{const e=o();return u({mutationFn:async({mediaId:t,season:r,episode:s})=>{await i("/api/tv/progress/remove",{method:"POST",body:JSON.stringify({mediaId:t,season:r,episode:s})})},onSuccess:()=>{a.success("Progress reset"),e.invalidateQueries({queryKey:["tv-progress"]}),e.invalidateQueries({queryKey:["tv-continue-watching"]}),e.invalidateQueries({queryKey:["tv-library"]})},onError:t=>{a.error(`Failed to reset progress: ${t.message}`)}})},I=()=>{const e=o();return u({mutationFn:async({ids:t,status:r})=>i("/api/tv/library/batch-status",{method:"POST",body:JSON.stringify({ids:t,status:r})}),onSuccess:t=>{a.success(`Status updated for ${t.updated??0} items`),e.invalidateQueries({queryKey:["tv-library"]}),e.invalidateQueries({queryKey:["tv-continue-watching"]})},onError:t=>{a.error(`Failed to update statuses: ${t.message}`)}})},U=()=>{const e=o();return u({mutationFn:async t=>i("/api/tv/library/remove-many",{method:"POST",body:JSON.stringify({ids:t})}),onSuccess:t=>{const r=t.removed??0;a.success(`Removed ${r} ${r===1?"item":"items"} from TV watchlist`),e.invalidateQueries({queryKey:["tv-library"]}),e.invalidateQueries({queryKey:["tv-library-ids"]}),e.invalidateQueries({queryKey:["tv-continue-watching"]})},onError:t=>{a.error(`Failed to remove: ${t.message}`)}})},E=()=>{const e=o();return u({mutationFn:async t=>i("/api/tv/progress/remove-many",{method:"POST",body:JSON.stringify({ids:t})}),onSuccess:t=>{const r=t.removed??0;a.success(`Reset progress for ${r} ${r===1?"item":"items"}`),e.invalidateQueries({queryKey:["tv-progress"]}),e.invalidateQueries({queryKey:["tv-continue-watching"]}),e.invalidateQueries({queryKey:["tv-library"]})},onError:t=>{a.error(`Failed to reset progress: ${t.message}`)}})},J=()=>{const e=q(),t=b(),{data:r}=p(),s=m(()=>new Set(r?.ids||[]),[r]);return{toggle:c=>{const v=l(c.mediaType,c.tmdbId);s.has(v)?t.mutate(v):e.mutate({...c,poster:c.poster||""})},bookmarkedIds:s,pending:e.isPending||t.isPending}};export{f as T,b as a,L as b,K as c,g as d,P as e,J as f,k as g,R as h,$ as i,C as j,O as k,w as l,I as m,d as n,U as o,E as p,Q as t,F as u};
1
+ import{T as m}from"./vendor-core-8R2fFbyN.js";import{b as y,u as o,a as u}from"./vendor-query-BXRECSI6.js";import{q as i,z as a}from"./index-lo-bz7f2.js";const d=e=>String(e).toLowerCase()==="movie"?"movie":"tv",g=(e,t)=>`${d(e)}:${t}`,K=(e,t)=>{const r=d(e);return`/tv/${t}?type=${r}`},Q=(e,t,r,s)=>{const n=new URLSearchParams;return n.set("type",d(e)),r!==void 0&&n.set("s",String(r)),s!==void 0&&n.set("e",String(s)),`/tv/${t}/watch?${n.toString()}`},$=e=>e.adult===!0||e.adult===1,f=["Watching","Completed","On-Hold","Dropped","Planned"],l=(e,t)=>g(e,t),w=(e="All",t=1,r=24)=>y({queryKey:["tv-library",e,t,r],queryFn:()=>{const s=new URLSearchParams;return s.set("status",e),s.set("page",String(t)),s.set("limit",String(r)),i(`/api/tv/library?${s.toString()}`)}}),p=()=>y({queryKey:["tv-library-ids"],queryFn:()=>i("/api/tv/library/ids"),staleTime:1e3*60}),P=e=>y({queryKey:["tv-library-check",e],queryFn:()=>i(`/api/tv/library/check/${encodeURIComponent(e||"")}`),enabled:!!e,staleTime:1e3*60}),F=(e=24)=>y({queryKey:["tv-continue-watching",e],queryFn:()=>i(`/api/tv/continue-watching?limit=${e}`)}),O=e=>y({queryKey:["tv-progress",e],queryFn:()=>i(`/api/tv/progress/${encodeURIComponent(e||"")}`),enabled:!!e}),C=(e,t,r)=>y({queryKey:["tv-progress-latest",e,t,r],queryFn:()=>{const s=new URLSearchParams;t!==void 0&&s.set("season",String(t)),r!==void 0&&s.set("episode",String(r));const n=s.toString();return i(`/api/tv/progress/${encodeURIComponent(e||"")}/latest${n?`?${n}`:""}`)},enabled:!!e,staleTime:0}),q=()=>{const e=o();return u({mutationFn:async t=>{const{silent:r,...s}=t;return i("/api/tv/library/add",{method:"POST",body:JSON.stringify(s)})},onSuccess:(t,r)=>{r.silent||a.success("Added to TV watchlist"),e.invalidateQueries({queryKey:["tv-library"]}),e.invalidateQueries({queryKey:["tv-library-ids"]}),e.invalidateQueries({queryKey:["tv-library-check",l(r.mediaType,r.tmdbId)]})},onError:t=>{a.error(`Failed to add: ${t.message}`)}})},b=()=>{const e=o();return u({mutationFn:async t=>{await i("/api/tv/library/remove",{method:"POST",body:JSON.stringify({id:t})})},onSuccess:(t,r)=>{a.success("Removed from TV watchlist"),e.invalidateQueries({queryKey:["tv-library"]}),e.invalidateQueries({queryKey:["tv-library-ids"]}),e.invalidateQueries({queryKey:["tv-continue-watching"]}),e.invalidateQueries({queryKey:["tv-library-check",r]})},onError:t=>{a.error(`Failed to remove: ${t.message}`)}})},R=()=>{const e=o();return u({mutationFn:async({id:t,status:r})=>{await i("/api/tv/library/status",{method:"POST",body:JSON.stringify({id:t,status:r})})},onSuccess:()=>{a.success("Status updated"),e.invalidateQueries({queryKey:["tv-library"]}),e.invalidateQueries({queryKey:["tv-continue-watching"]})},onError:t=>{a.error(`Failed to update status: ${t.message}`)}})},k=()=>{const e=o();return u({mutationFn:async t=>{await i("/api/tv/progress",{method:"POST",body:JSON.stringify(t)})},onSuccess:(t,r)=>{e.invalidateQueries({queryKey:["tv-progress",r.mediaId]}),e.invalidateQueries({queryKey:["tv-progress-latest",r.mediaId]}),e.invalidateQueries({queryKey:["tv-continue-watching"]}),e.invalidateQueries({queryKey:["tv-library"]}),e.invalidateQueries({queryKey:["tv-library-ids"]})}})},L=()=>{const e=o();return u({mutationFn:async({mediaId:t,season:r,episode:s})=>{await i("/api/tv/progress/remove",{method:"POST",body:JSON.stringify({mediaId:t,season:r,episode:s})})},onSuccess:()=>{a.success("Progress reset"),e.invalidateQueries({queryKey:["tv-progress"]}),e.invalidateQueries({queryKey:["tv-continue-watching"]}),e.invalidateQueries({queryKey:["tv-library"]})},onError:t=>{a.error(`Failed to reset progress: ${t.message}`)}})},I=()=>{const e=o();return u({mutationFn:async({ids:t,status:r})=>i("/api/tv/library/batch-status",{method:"POST",body:JSON.stringify({ids:t,status:r})}),onSuccess:t=>{a.success(`Status updated for ${t.updated??0} items`),e.invalidateQueries({queryKey:["tv-library"]}),e.invalidateQueries({queryKey:["tv-continue-watching"]})},onError:t=>{a.error(`Failed to update statuses: ${t.message}`)}})},U=()=>{const e=o();return u({mutationFn:async t=>i("/api/tv/library/remove-many",{method:"POST",body:JSON.stringify({ids:t})}),onSuccess:t=>{const r=t.removed??0;a.success(`Removed ${r} ${r===1?"item":"items"} from TV watchlist`),e.invalidateQueries({queryKey:["tv-library"]}),e.invalidateQueries({queryKey:["tv-library-ids"]}),e.invalidateQueries({queryKey:["tv-continue-watching"]})},onError:t=>{a.error(`Failed to remove: ${t.message}`)}})},E=()=>{const e=o();return u({mutationFn:async t=>i("/api/tv/progress/remove-many",{method:"POST",body:JSON.stringify({ids:t})}),onSuccess:t=>{const r=t.removed??0;a.success(`Reset progress for ${r} ${r===1?"item":"items"}`),e.invalidateQueries({queryKey:["tv-progress"]}),e.invalidateQueries({queryKey:["tv-continue-watching"]}),e.invalidateQueries({queryKey:["tv-library"]})},onError:t=>{a.error(`Failed to reset progress: ${t.message}`)}})},J=()=>{const e=q(),t=b(),{data:r}=p(),s=m(()=>new Set(r?.ids||[]),[r]);return{toggle:c=>{const v=l(c.mediaType,c.tmdbId);s.has(v)?t.mutate(v):e.mutate({...c,poster:c.poster||""})},bookmarkedIds:s,pending:e.isPending||t.isPending}};export{f as T,b as a,L as b,K as c,g as d,P as e,J as f,k as g,R as h,$ as i,C as j,O as k,w as l,I as m,d as n,U as o,E as p,Q as t,F as u};
@@ -33,7 +33,7 @@
33
33
  background-color: #0c0d12;
34
34
  }
35
35
  </style>
36
- <script type="module" crossorigin src="/assets/index-CfvzoNYQ.js"></script>
36
+ <script type="module" crossorigin src="/assets/index-lo-bz7f2.js"></script>
37
37
  <link rel="modulepreload" crossorigin href="/assets/vendor-core-8R2fFbyN.js">
38
38
  <link rel="modulepreload" crossorigin href="/assets/vendor-query-BXRECSI6.js">
39
39
  <link rel="modulepreload" crossorigin href="/assets/vendor-icons-CDMuNDeL.js">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serifpersia/dango",
3
- "version": "3.3.5",
3
+ "version": "3.3.6",
4
4
  "description": "A web application for watching anime.",
5
5
  "main": "orchestrator.js",
6
6
  "repository": {
@@ -81,5 +81,5 @@
81
81
  "allowScripts": {
82
82
  "esbuild@0.28.2": true
83
83
  },
84
- "versionDate": "2026-09-24T10:00:06.202Z"
84
+ "versionDate": "2026-09-25T11:33:57.632Z"
85
85
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dango-server",
3
3
  "private": true,
4
- "version": "3.3.5",
4
+ "version": "3.3.6",
5
5
  "type": "module",
6
6
  "engines": {
7
7
  "node": ">=22.12.0"
@@ -1,10 +0,0 @@
1
- import{u as t,A as g,d as w,h as I,q as N,T as re,$ as kt}from"./vendor-core-8R2fFbyN.js";import{I as U}from"./vendor-icons-CDMuNDeL.js";import{S as fe,q as ve,e as xt,B as te}from"./index-CfvzoNYQ.js";import{u as Bt}from"./vendor-query-BXRECSI6.js";const Tt="_controls_13898_1",Et="_titleContainer_13898_9",Lt="_scheduleInfo_13898_15",Nt="_status_13898_23",It="_nextEpisode_13898_35",Pt="_watchlistBtn_13898_45",$t="_inList_13898_72",Mt="_queueBtn_13898_83",At="_queueActive_13898_95",Ft="_modeToggleBtn_13898_101",Rt="_modeToggleActive_13898_108",Ot="_nativeToggleBtn_13898_119",Dt="_nativeToggleActive_13898_132",qt="_markWatchedBtn_13898_153",Ht="_markWatchedDone_13898_167",zt="_completeSeriesBtn_13898_178",Wt="_providerAndEpisodeRow_13898_192",Vt="_episodeActions_13898_199",Ut="_desktopEpisodeActions_13898_206",Kt="_mobileEpisodeActions_13898_213",Gt="_episodeNavBtn_13898_217",Jt="_primary_13898_247",Qt="_secondary_13898_257",Xt="_episodePickerBtn_13898_261",jt="_queueCountdown_13898_265",Yt="_speedBoostBadge_13898_280",Zt="_videoContainer_13898_311",en="_loadingOverlay_13898_324",tn="_loadingDots_13898_338",nn="_dot_13898_343",rn="_bounce_13898_1",sn="_bufferingOverlay_13898_372",on="_bufferingSpinner_13898_381",cn="_spin_13898_920",an="_videoIframe_13898_396",ln="_videoElementHidden_13898_419",un="_upscalerCanvas_13898_424",dn="_upscalerActive_13898_437",pn="_upscalerStatusBadge_13898_441",fn="_subtitleOverlay_13898_456",_n="_controlsOverlay_13898_468",mn="_hidden_13898_498",hn="_centerPlayPause_13898_504",gn="_bottomControls_13898_536",yn="_progressBarContainer_13898_553",vn="_progressBar_13898_553",bn="_scrubbing_13898_576",wn="_watchedBar_13898_581",Sn="_bufferedBar_13898_582",Cn="_thumb_13898_604",kn="_timeBubble_13898_625",xn="_skipSegment_13898_647",Bn="_op_13898_661",Tn="_ed_13898_665",En="_recap_13898_669",Ln="_bottomControlsRow_13898_673",Nn="_controlBtn_13898_681",In="_timeDisplay_13898_705",Pn="_leftControls_13898_714",$n="_rightControls_13898_715",Mn="_middleControls_13898_716",An="_skipControls_13898_722",Fn="_skipBtn_13898_728",Rn="_volumeContainer_13898_752",On="_volumeSlider_13898_759",Dn="_settingsMenu_13898_837",qn="_slideUp_13898_1",Hn="_qualityListInMenu_13898_876",zn="_ccOptionsContainer_13898_877",Wn="_qualityItemInMenu_13898_885",Vn="_ccItem_13898_886",Un="_active_13898_907",Kn="_sourceLoader_13898_914",Gn="_spinner_13898_920",Jn="_skipBubble_13898_971",Qn="_skipIcon_13898_975",Xn="_skipText_13898_978",jn="_watchBtn_13898_990",Yn="_errorOverlay_13898_1036",Zn="_retryButton_13898_1046",er="_skipIndicatorContainer_13898_1073",tr="_leftSkip_13898_1073",nr="_rightSkip_13898_1076",rr="_sourceSelectionContainer_13898_1081",sr="_slideUpIn_13898_1",or="_providerSelectContainer_13898_1096",ir="_providerSelect_13898_1096",cr="_sourceSelect_13898_1081",ar="_sourceButtons_13898_1152",lr="_sourceButton_13898_1152",ur="_detailsBox_13898_1184",dr="_detailsToggleBtn_13898_1197",pr="_detailsGridContainer_13898_1221",fr="_fadeIn_13898_1",_r="_detailItem_13898_1233",mr="_animeStatus_13898_1253",hr="_genresList_13898_1266",gr="_genreTag_13898_1273",yr="_loadingDetails_13898_1291",vr="_descriptionSection_13898_1298",br="_description_13898_1298",wr="_epJumpControls_13898_1334",Sr="_epRangeButtons_13898_1345",Cr="_metaTags_13898_1351",kr="_epRangeBtn_13898_1358",xr="_epJumpInputGroup_13898_1373",Br="_fullscreenActive_13898_1405",Tr="_skipRipple_13898_1",Er="_errorSubtext_13898_1511",ao={controls:Tt,titleContainer:Et,scheduleInfo:Lt,status:Nt,nextEpisode:It,watchlistBtn:Pt,inList:$t,queueBtn:Mt,queueActive:At,modeToggleBtn:Ft,modeToggleActive:Rt,nativeToggleBtn:Ot,nativeToggleActive:Dt,markWatchedBtn:qt,markWatchedDone:Ht,completeSeriesBtn:zt,providerAndEpisodeRow:Wt,episodeActions:Vt,desktopEpisodeActions:Ut,mobileEpisodeActions:Kt,episodeNavBtn:Gt,primary:Jt,secondary:Qt,episodePickerBtn:Xt,queueCountdown:jt,speedBoostBadge:Yt,videoContainer:Zt,loadingOverlay:en,loadingDots:tn,dot:nn,bounce:rn,bufferingOverlay:sn,bufferingSpinner:on,spin:cn,videoIframe:an,videoElementHidden:ln,upscalerCanvas:un,upscalerActive:dn,upscalerStatusBadge:pn,subtitleOverlay:fn,controlsOverlay:_n,hidden:mn,centerPlayPause:hn,bottomControls:gn,progressBarContainer:yn,progressBar:vn,scrubbing:bn,watchedBar:wn,bufferedBar:Sn,thumb:Cn,timeBubble:kn,skipSegment:xn,op:Bn,ed:Tn,recap:En,bottomControlsRow:Ln,controlBtn:Nn,timeDisplay:In,leftControls:Pn,rightControls:$n,middleControls:Mn,skipControls:An,skipBtn:Fn,volumeContainer:Rn,volumeSlider:On,settingsMenu:Dn,slideUp:qn,qualityListInMenu:Hn,ccOptionsContainer:zn,qualityItemInMenu:Wn,ccItem:Vn,active:Un,sourceLoader:Kn,spinner:Gn,skipBubble:Jn,skipIcon:Qn,skipText:Xn,watchBtn:jn,errorOverlay:Yn,retryButton:Zn,skipIndicatorContainer:er,leftSkip:tr,rightSkip:nr,sourceSelectionContainer:rr,slideUpIn:sr,providerSelectContainer:or,providerSelect:ir,sourceSelect:cr,sourceButtons:ar,sourceButton:lr,detailsBox:ur,detailsToggleBtn:dr,detailsGridContainer:pr,fadeIn:fr,detailItem:_r,animeStatus:mr,genresList:hr,genreTag:gr,loadingDetails:yr,descriptionSection:vr,description:br,epJumpControls:wr,epRangeButtons:Sr,metaTags:Cr,epRangeBtn:kr,epJumpInputGroup:xr,fullscreenActive:Br,skipRipple:Tr,errorSubtext:Er},Lr="_playerPageLayout_xfhzl_1",Nr="_episodeSidebar_xfhzl_15",Ir="_playerMain_xfhzl_28",Pr="_videoPlayerWrapper_xfhzl_36",$r="_playerInfoHeader_xfhzl_52",Mr="_playerAnimeCard_xfhzl_58",Ar="_playerInfoContainer_xfhzl_70",Fr="_videoTitleSection_xfhzl_94",Rr="_theaterMode_xfhzl_276",lo={playerPageLayout:Lr,episodeSidebar:Nr,playerMain:Ir,videoPlayerWrapper:Pr,playerInfoHeader:$r,playerAnimeCard:Mr,playerInfoContainer:Ar,videoTitleSection:Fr,theaterMode:Rr},Or="_shell_41rxp_1",Dr="_stage_41rxp_37",qr="_shellFill_41rxp_85",Hr="_shellFullscreen_41rxp_93",zr="_uiLayer_41rxp_107",Wr="_volumeWrap_41rxp_118",Vr="_volumeSlider_41rxp_124",j={shell:Or,stage:Dr,shellFill:qr,shellFullscreen:Hr,uiLayer:zr,volumeWrap:Wr,volumeSlider:Vr},Ur=.8,Kr=5,uo=2e3,He="autoplayEnabled",Gr=(e,n)=>n>0&&e>=n*Ur,po=(e,n)=>e>Kr&&!Gr(e,n),fo=()=>{try{return localStorage.getItem(He)==="true"}catch{return!1}},_o=e=>{try{localStorage.setItem(He,String(e))}catch{}},mo=e=>e.seekInduced?"none":e.autoplayEnabled&&e.hasNext?"advance":e.hasNext?"prompt-next":e.isFinal?"prompt-complete":"none",Jr=e=>(e.language??e.lang??"").toLowerCase(),Qr=e=>(e.label??"").toLowerCase(),Xr=e=>`${e.language??e.lang??""}|||${e.label??""}`,jr=e=>Jr(e).startsWith("en")||Qr(e).includes("english");function ho(e,n){if(e.length===0||n?.enabled===!1)return-1;const r=n?.lastKey??null;if(r){const s=e.findIndex(u=>Xr(u)===r);if(s>=0)return s}const o=e.findIndex(jr);return o>=0?o:0}const K={fontSize:1.8,position:0,bgOpacity:.5,bgColor:"#000000",textColor:"#ffffff",edge:"shadow",bold:!1},Ce=(e,n,r)=>Math.max(n,Math.min(r,e)),ke=e=>typeof e=="string"&&/^#[0-9a-fA-F]{6}$/.test(e),be=(e,n,r,o)=>{try{const s=localStorage.getItem(e);if(s===null)return n;const u=parseFloat(s);return Number.isFinite(u)?Ce(u,r,o):n}catch{return n}};function Yr(){let e=K.edge,n=K.bgColor,r=K.textColor,o=K.bold;try{const s=localStorage.getItem("subtitleEdge");(s==="shadow"||s==="outline"||s==="none")&&(e=s);const u=localStorage.getItem("subtitleBgColor");ke(u)&&(n=u);const h=localStorage.getItem("subtitleTextColor");ke(h)&&(r=h);const i=localStorage.getItem("subtitleBold");i!==null&&(o=i==="true")}catch{}return{fontSize:be("subtitleFontSize",K.fontSize,.5,10),position:be("subtitlePosition",K.position,0,100),bgOpacity:be("subtitleBgOpacity",K.bgOpacity,0,1),bgColor:n,textColor:r,edge:e,bold:o}}function ze(e,n){const r=`rgba(0, 0, 0, ${Ce(n,0,1)})`;if(!ke(e))return r;const o=parseInt(e.slice(1,3),16),s=parseInt(e.slice(3,5),16),u=parseInt(e.slice(5,7),16);return`rgba(${o}, ${s}, ${u}, ${Ce(n,0,1)})`}function We(e,n){return e==="none"?n<=0?"0 1px 3px rgba(0, 0, 0, 0.9)":"none":e==="outline"?["-1px 0 0 black","1px 0 0 black","0 -1px 0 black","0 1px 0 black","-1px -1px 0 black","1px -1px 0 black","-1px 1px 0 black","1px 1px 0 black","0 0 6px rgba(0, 0, 0, 0.9)"].join(", "):"0 0 4px black, 0 1px 2px rgba(0, 0, 0, 0.8)"}function go(e){return`
2
- video::cue {
3
- font-size: ${e.fontSize}rem !important;
4
- color: ${e.textColor} !important;
5
- background-color: ${ze(e.bgColor,e.bgOpacity)} !important;
6
- font-weight: ${e.bold?"bold":"normal"} !important;
7
- text-shadow: ${We(e.edge,e.bgOpacity)} !important;
8
- }
9
- `}function yo(e){return[`font-size: ${e.fontSize}rem`,`color: ${e.textColor}`,`background-color: ${ze(e.bgColor,e.bgOpacity)}`,`font-weight: ${e.bold?"700":"400"}`,`text-shadow: ${We(e.edge,e.bgOpacity)}`,"padding: 0.2em 0.5em","border-radius: 0.25em","text-align: center","position: absolute","left: 50%","transform: translateX(-50%)","max-width: 92%","white-space: pre-wrap","overflow-wrap: break-word","line-height: 1.4"].join(`;
10
- `)+";"}const Zr=new Set(["b","i","u","strong","em"]);function vo(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/&lt;(\/?)([a-zA-Z]+)&gt;/g,(r,o,s)=>Zr.has(s.toLowerCase())?`<${o}${s.toLowerCase()}>`:r)}function bo(e){return e.replace(/<[^>]*>/g,"")}const wo=["#ffffff","#ffff00","#7CFC00","#00e5ff","#ff9ff3","#ffa502"],So=["#000000","#1e272e","#2f3542","#3d0c02","#0c3d2e","#ffffff"];function Co(e,n){const r=Number.isFinite(e)?e*16:K.fontSize*16;return!Number.isFinite(n)||n<=0?r/16:Math.min(r,Math.max(13,n*.07))/16}function ko(e){const n=Math.abs(e/1e3).toFixed(1);return e>0?`+${n}s`:e<0?`-${n}s`:"0.0s"}function xo(e,n){const r=e.clientWidth||0,o=e.clientHeight||0,s=e.videoWidth>0&&e.videoHeight>0?e.videoWidth/e.videoHeight:0;let u=o;s>0&&r>0&&o>0&&(u=r/o>s?o:r/s);const h=Math.max(0,(o-u)/2),i=Math.max(0,Math.min(100,Number(n)||0))/100*u;return h+i}const es="_centerControls_61n7k_1",ts="_centerSkipBtn_61n7k_15",ns="_centerPlayPause_61n7k_40",rs="_playIconOffset_61n7k_71",ne={centerControls:es,centerSkipBtn:ts,centerPlayPause:ns,playIconOffset:rs},Bo=({isPlaying:e,onTogglePlay:n,onSkipBack:r,onSkipForward:o,skipSeconds:s=10})=>t("div",{className:ne.centerControls,onClick:u=>u.stopPropagation(),children:[t("button",{className:ne.centerSkipBtn,onClick:r,title:`Skip back ${s}s`,"aria-label":`Skip back ${s} seconds`,children:t(U,{name:"replay-10"})}),t("button",{className:ne.centerPlayPause,"data-speed-boost-ignore":"true",onClick:n,"aria-label":e?"Pause":"Play",children:e?t(U,{name:"pause"}):t(U,{name:"play",className:ne.playIconOffset})}),t("button",{className:ne.centerSkipBtn,onClick:o,title:`Skip forward ${s}s`,"aria-label":`Skip forward ${s} seconds`,children:t(U,{name:"forward-10"})})]}),To=({classes:e,videoRef:n,duration:r,formatTime:o,isScrubbing:s,buffered:u="auto",onSeek:h,onScrubStart:i,onScrubMove:S,onScrubEnd:b,timeLabelRef:a,children:L})=>{const _=g(null),T=g(null),f=g(null),p=g(null),[y,l]=w({time:0,position:null});I(()=>{const d=n.current;if(!d)return;const B=M=>{const m=M/r*100||0;T.current&&(T.current.style.width=`${m}%`),f.current&&(f.current.style.left=`${m}%`),a?.current&&(a.current.innerText=`${o(M)} / ${o(r)}`)},$=()=>{s||B(d.currentTime)},O=()=>{if(u==="auto"&&d.buffered.length>0){const m=d.buffered.end(d.buffered.length-1)/r*100||0;p.current&&(p.current.style.width=`${m}%`)}};return B(d.currentTime),O(),d.addEventListener("timeupdate",$),d.addEventListener("progress",O),()=>{d.removeEventListener("timeupdate",$),d.removeEventListener("progress",O)}},[n,r,s,u,o,a]),I(()=>{if(!s)return;const d=O=>{if(!_.current||!r)return;const M=_.current.getBoundingClientRect(),m=Math.min(1,Math.max(0,(O.clientX-M.left)/M.width));S(m),$(m)},B=()=>b();return document.addEventListener("mousemove",d),document.addEventListener("mouseup",B),()=>{document.removeEventListener("mousemove",d),document.removeEventListener("mouseup",B)};function $(O){const M=O*r,m=M/r*100||0;T.current&&(T.current.style.width=`${m}%`),f.current&&(f.current.style.left=`${m}%`),a?.current&&(a.current.innerText=`${o(M)} / ${o(r)}`);const A=_.current?.getBoundingClientRect();l({time:M,position:A?O*A.width:null})}},[s,r,S,b,o,a]);const C=d=>{if(!_.current)return 0;const B=_.current.getBoundingClientRect();return Math.min(1,Math.max(0,(d-B.left)/B.width))};return t("div",{className:`${e.container} ${s&&e.scrubbing?e.scrubbing:""}`,ref:_,onClick:d=>{!n.current||isNaN(r)||r===0||h(C(d.clientX))},onMouseMove:d=>{if(!r)return;const B=C(d.clientX);l({time:B*r,position:d.clientX-(_.current?.getBoundingClientRect().left??0)})},onMouseLeave:()=>{s||l({time:0,position:null})},children:[y.position!==null&&t("div",{className:e.timeBubble,style:{left:y.position},children:o(y.time)}),t("div",{className:e.bar,children:[t("div",{className:e.buffered,ref:p,style:u==="full"?{width:"100%"}:void 0}),t("div",{className:e.watched,ref:T}),t("div",{className:e.thumb,ref:f,onMouseDown:d=>{d.preventDefault(),n.current&&i()}}),L]})]})};function we(){try{if(typeof window>"u")return!1;const e=window.matchMedia?.("(pointer: coarse)").matches??!1,r=(navigator.maxTouchPoints??0)>0||"ontouchstart"in window;return e||r}catch{return!1}}function Ve(){const[e,n]=w(we);return I(()=>{n(we());let r=null;const o=()=>n(we());try{r=window.matchMedia("(pointer: coarse)"),r.addEventListener?r.addEventListener("change",o):r.addListener(o)}catch{}return window.addEventListener("touchstart",o,{passive:!0,once:!0}),()=>{try{r&&(r.removeEventListener?r.removeEventListener("change",o):r.removeListener(o))}catch{}window.removeEventListener("touchstart",o)}},[]),e}const qe=280;function ss(e){return e?!!e.closest('button, input, select, textarea, a, [role="button"], [data-player-ui="true"]'):!1}const Eo=({player:e,topBar:n,centerControls:r,bottomBar:o,settingsPanel:s,overlays:u,isInteracting:h=!1,className:i,chromeDisabled:S=!1,children:b})=>{const{state:a,refs:L,actions:_}=e,T=L.playerContainerRef,p=Ve()?5e3:3e3,y=g(0),l=g(null),C=g(h);C.current=h;const d=N(()=>{const m=_.inactivityTimer.current;m&&(window.clearTimeout(m),_.inactivityTimer.current=null)},[_]),B=N(()=>{d(),a.isPlaying&&(C.current||a.useNativeControls||(_.inactivityTimer.current=window.setTimeout(()=>{if(C.current)return;_.setShowControls(!1);const m=T.current;m&&a.isFullscreen&&(m.style.cursor="none")},p)))},[_,d,T,p,a.isFullscreen,a.isPlaying,a.useNativeControls]),$=N(()=>{const m=T.current;m&&(m.style.cursor="default"),!a.showControls&&!a.useNativeControls&&_.setShowControls(!0),B()},[_,T,B,a.showControls,a.useNativeControls]);I(()=>{if(a.showControls){if(!a.isPlaying){d();return}if(h||a.isScrubbing||a.showSettings||a.showVolumeSlider){_.setShowControls(!0),d();return}B()}},[_,d,h,B,a.isPlaying,a.isScrubbing,a.showControls,a.showSettings,a.showVolumeSlider]),I(()=>()=>d(),[d]);const O=N(m=>{const A=m.target;if(ss(A))return;const J=Date.now(),H=J-y.current<qe;if(y.current=J,H){l.current&&(window.clearTimeout(l.current),l.current=null),_.toggleFullscreen();return}l.current&&window.clearTimeout(l.current),l.current=window.setTimeout(()=>{l.current=null,_.setShowControls(!a.showControls),a.showControls?B():$()},qe)},[_,B,a.showControls,$]);I(()=>()=>{l.current&&window.clearTimeout(l.current)},[]);const M=a.showControls||a.isScrubbing||a.showSettings||a.showVolumeSlider;return t("div",{ref:T,className:`${j.shell} ${a.isFullscreen?j.shellFullscreen:""} ${i??""}`,onContextMenu:m=>m.preventDefault(),onPointerMove:m=>{m.pointerType==="mouse"&&$()},onMouseLeave:()=>{window.matchMedia?.("(hover: hover) and (pointer: fine)").matches&&a.isPlaying&&!C.current&&_.setShowControls(!1)},children:[t("div",{className:j.stage,onClick:O,onContextMenu:m=>m.preventDefault(),children:b}),u,!S&&!a.useNativeControls&&t("div",{className:j.uiLayer,onContextMenu:m=>m.preventDefault(),children:[t("div",{"data-player-ui":"true",children:n}),M&&r&&t("div",{"data-player-ui":"true",children:r}),t("div",{"data-player-ui":"true",children:o}),s&&t("div",{"data-player-ui":"true",children:s})]})]})},os=450,Lo=({muted:e,volume:n,volumeIcon:r,buttonClassName:o,sliderClassName:s,onToggleMute:u,onVolumeChange:h,onExpandedChange:i})=>{const S=Ve(),[b,a]=w(!1),L=g(null),_=g(!1),T=g(null),f=N(d=>{a(d),i?.(d)},[i]);I(()=>()=>{L.current&&window.clearTimeout(L.current)},[]),I(()=>{if(!b)return;const d=B=>{T.current&&!T.current.contains(B.target)&&f(!1)};return document.addEventListener("pointerdown",d),()=>document.removeEventListener("pointerdown",d)},[b,f]);const p=e?0:n,y=()=>{_.current=!1,L.current&&window.clearTimeout(L.current),L.current=window.setTimeout(()=>{_.current=!0,f(!0)},os)},l=()=>{L.current&&(window.clearTimeout(L.current),L.current=null)},C=d=>{if(d.stopPropagation(),_.current){_.current=!1;return}if(S){b?u():f(!0);return}u()};return t("div",{ref:T,className:j.volumeWrap,"data-expanded":b?"true":"false",onContextMenu:d=>d.preventDefault(),children:[t("button",{type:"button",className:o,onClick:C,onPointerDown:y,onPointerUp:l,onPointerLeave:l,onContextMenu:d=>d.preventDefault(),"aria-label":e?"Unmute":"Mute","aria-expanded":b,children:r}),t("input",{type:"range",min:"0",max:"1",step:"0.05",value:p,onChange:d=>h(parseFloat(d.target.value)),onClick:d=>d.stopPropagation(),onPointerDown:d=>d.stopPropagation(),onContextMenu:d=>d.preventDefault(),className:`${j.volumeSlider} ${s??""}`,style:{"--volume-percent":`${p*100}%`},"aria-label":"Volume"})]})},is="_statusArea_1xccu_1",cs="_toggleBtn_1xccu_20",as="_shortcuts_1xccu_46",ls="_shortcutGroup_1xccu_56",us="_shortcut_1xccu_46",ds="_key_1xccu_70",ps="_label_1xccu_91",x={statusArea:is,toggleBtn:cs,shortcuts:as,shortcutGroup:ls,shortcut:us,key:ds,label:ps},No=({showTheater:e=!0})=>{const[n,r]=w(!1);return t("div",{className:x.statusArea,children:[t("button",{type:"button",className:x.toggleBtn,onClick:()=>r(o=>!o),"aria-expanded":n,"aria-controls":"player-shortcuts",children:[t(U,{name:"keyboard",size:14}),t("span",{children:"Keyboard Shortcuts"}),n?t(U,{name:"chevron-up",size:12}):t(U,{name:"chevron-down",size:12})]}),n&&t("div",{id:"player-shortcuts",className:x.shortcuts,children:[t("div",{className:x.shortcutGroup,children:[t("div",{className:x.shortcut,children:[t("span",{className:x.key,children:"↑"}),t("span",{className:x.key,children:"↓"}),t("span",{className:x.label,children:"Volume"})]}),t("div",{className:x.shortcut,children:[t("span",{className:x.key,children:"←"}),t("span",{className:x.key,children:"→"}),t("span",{className:x.label,children:"Seek"})]})]}),t("div",{className:x.shortcutGroup,children:[t("div",{className:x.shortcut,children:[t("span",{className:x.key,children:"Space"}),t("span",{className:x.label,children:"Play/Pause"})]}),t("div",{className:x.shortcut,children:[t("span",{className:x.key,children:"F"}),t("span",{className:x.label,children:"Fullscreen"})]}),t("div",{className:x.shortcut,children:[t("span",{className:x.key,children:"M"}),t("span",{className:x.label,children:"Mute"})]}),e&&t("div",{className:x.shortcut,children:[t("span",{className:x.key,children:"T"}),t("span",{className:x.label,children:"Theater"})]}),t("div",{className:x.shortcut,children:[t("span",{className:x.key,children:"N"}),t("span",{className:x.label,children:"Next"})]})]})]})]})},fs="_episodeListContainer_9y3pr_1",_s="_drawerContainer_9y3pr_9",ms="_episodeListHeader_9y3pr_14",hs="_drawerHeader_9y3pr_20",gs="_episodeListTitle_9y3pr_28",ys="_rangeSelector_9y3pr_40",vs="_rangeButton_9y3pr_46",bs="_active_9y3pr_69",ws="_episodeList_9y3pr_1",Ss="_drawerList_9y3pr_88",Cs="_episodeItem_9y3pr_117",ks="_watched_9y3pr_144",xs="_episodeThumb_9y3pr_166",Bs="_episodeText_9y3pr_175",Ts="_episodeLabel_9y3pr_183",Es="_episodeSub_9y3pr_188",E={episodeListContainer:fs,drawerContainer:_s,episodeListHeader:ms,drawerHeader:hs,episodeListTitle:gs,rangeSelector:ys,rangeButton:vs,active:bs,episodeList:ws,drawerList:Ss,episodeItem:Cs,watched:ks,episodeThumb:xs,episodeText:Bs,episodeLabel:Ts,episodeSub:Es},Ls=({episodes:e,currentEpisode:n,watchedEpisodes:r=[],onEpisodeClick:o,variant:s="sidebar",title:u="Episodes",header:h})=>{const[i,S]=w(0),b=g(null),a=re(()=>e.map(f=>typeof f=="string"?{id:f,label:`Episode ${f}`}:f),[e]),L=re(()=>new Set(r),[r]);I(()=>{const f=b.current;if(!f)return;let p=f.parentElement;for(;p;){const C=window.getComputedStyle(p);if((C.overflowY==="auto"||C.overflowY==="scroll")&&p.scrollHeight>p.clientHeight)break;p=p.parentElement}if(!p)return;const y=p.getBoundingClientRect(),l=f.getBoundingClientRect();p.scrollTop+=l.top+l.height/2-(y.top+p.clientHeight/2)},[n,i]);const _=re(()=>{if(a.length<=100)return[];const f=[];for(let p=0;p<a.length;p+=100){const y=p+1,l=Math.min(p+100,a.length);f.push(`${y}-${l}`)}return f},[a]),T=re(()=>{if(_.length===0)return a;const f=_[i];if(!f)return a;const[p,y]=f.split("-"),l=parseInt(p,10),C=parseInt(y,10);return a.slice(l-1,C)},[a,_,i]);return t("div",{className:`${E.episodeListContainer} ${s==="drawer"?E.drawerContainer:""}`,children:[t("div",{className:`${E.episodeListHeader} ${s==="drawer"?E.drawerHeader:""}`,children:[h,t("h3",{className:E.episodeListTitle,children:u}),_.length>0&&t("div",{className:E.rangeSelector,children:_.map((f,p)=>t("button",{className:`${E.rangeButton} ${i===p?E.active:""}`,onClick:()=>S(p),children:f},f))})]}),t("div",{className:`${E.episodeList} ${s==="drawer"?E.drawerList:""}`,children:T.map(f=>{const p=f.id===n,y=L.has(f.id)||f.watched===!0;return t("div",{ref:p?b:void 0,className:`${E.episodeItem} ${y?E.watched:""} ${p?E.active:""}`,onClick:()=>o(f.id),children:[f.thumbnail&&t("img",{src:f.thumbnail,alt:"",loading:"lazy",decoding:"async",className:E.episodeThumb}),t("span",{className:E.episodeText,children:[t("span",{className:E.episodeLabel,children:f.label??`Episode ${f.id}`}),f.sublabel&&t("span",{className:E.episodeSub,children:f.sublabel})]})]},f.id)})})]})},Io=({variant:e="sidebar",count:n=12})=>t("div",{className:`${E.episodeListContainer} ${e==="drawer"?E.drawerContainer:""}`,children:[t("div",{className:`${E.episodeListHeader} ${e==="drawer"?E.drawerHeader:""}`,children:[t("h3",{className:E.episodeListTitle,children:"Episodes"}),t("div",{className:E.rangeSelector,children:[t(fe,{width:"60px",height:"28px",variant:"rectangular"}),t(fe,{width:"60px",height:"28px",variant:"rectangular"}),t(fe,{width:"60px",height:"28px",variant:"rectangular"})]})]}),t("div",{className:`${E.episodeList} ${e==="drawer"?E.drawerList:""}`,children:Array.from({length:n}).map((r,o)=>t("div",{className:E.episodeItem,style:{border:"none",background:"transparent"},children:t(fe,{width:"120px",height:"1.2rem",variant:"text"})},o))})]}),Ns="_shell_cys6s_1",Is="_overlay_cys6s_10",Ps="_drawer_cys6s_21",$s="_handle_cys6s_56",Ms="_header_cys6s_64",As="_headerCopy_cys6s_73",Fs="_kicker_cys6s_79",Rs="_title_cys6s_87",Os="_closeBtn_cys6s_94",Ds="_body_cys6s_116",W={shell:Ns,overlay:Is,drawer:Ps,handle:$s,header:Ms,headerCopy:As,kicker:Fs,title:Rs,closeBtn:Os,body:Ds};function Po({isOpen:e,onClose:n,episodes:r,currentEpisode:o,watchedEpisodes:s=[],onEpisodeClick:u,title:h,header:i}){return I(()=>{if(!e)return;const S=a=>{a.key==="Escape"&&n()},b=document.body.style.overflow;return document.body.style.overflow="hidden",document.addEventListener("keydown",S),()=>{document.body.style.overflow=b,document.removeEventListener("keydown",S)}},[e,n]),e?kt(t("div",{className:W.shell,role:"dialog","aria-modal":"true","aria-label":"Episode picker",children:[t("button",{className:W.overlay,type:"button",onClick:n,"aria-label":"Close episodes"}),t("aside",{className:W.drawer,children:[t("div",{className:W.handle}),t("div",{className:W.header,children:[t("div",{className:W.headerCopy,children:[t("span",{className:W.kicker,children:"Episode picker"}),t("h3",{className:W.title,children:"Choose an episode"})]}),t("button",{className:W.closeBtn,type:"button",onClick:n,"aria-label":"Close",children:t(U,{name:"times"})})]}),t("div",{className:W.body,children:t(Ls,{episodes:r,currentEpisode:o,watchedEpisodes:s,onEpisodeClick:u,variant:"drawer",title:h,header:i})})]})]}),document.body):null}function Be(){return document}function Ue(e){const n=Be();if(document.fullscreenElement)return document.fullscreenElement;if(n.webkitFullscreenElement)return n.webkitFullscreenElement;const r=e;return r?.webkitDisplayingFullscreen?r:null}function se(e){return Ue(e)!==null}async function qs(e,n){if(Ue(n))return;const r=e;try{if(typeof e.requestFullscreen=="function"){await e.requestFullscreen();return}if(typeof r.webkitRequestFullscreen=="function"){await r.webkitRequestFullscreen();return}if(typeof r.webkitRequestFullScreen=="function"){await r.webkitRequestFullScreen();return}}catch{}const o=n;if(o&&typeof o.webkitEnterFullscreen=="function"){if(o.webkitSupportsFullscreen===!1)return;try{await o.webkitEnterFullscreen()}catch{}}}async function Hs(e){const n=Be();try{if(document.fullscreenElement&&typeof document.exitFullscreen=="function"){await document.exitFullscreen();return}if(n.webkitFullscreenElement&&typeof n.webkitExitFullscreen=="function"){await n.webkitExitFullscreen();return}}catch{}const r=e;if(r?.webkitDisplayingFullscreen&&typeof r.webkitExitFullscreen=="function"){try{r.webkitExitFullscreen()}catch{}return}try{typeof n.webkitCancelFullScreen=="function"?n.webkitCancelFullScreen():!document.fullscreenElement&&typeof document.exitFullscreen=="function"&&(document.fullscreenElement??n.webkitFullscreenElement)&&await document.exitFullscreen()}catch{}}async function zs(e,n){!e&&!n||(se(n)?await Hs(n):e&&await qs(e,n))}function Ws(e,n){const r=()=>{try{n(se(e()))}catch{}},o=Be(),s=r;o.addEventListener("fullscreenchange",r),o.addEventListener("webkitfullscreenchange",s),o.addEventListener("webkitbeginfullscreen",s,!0),o.addEventListener("webkitendfullscreen",s,!0);const u=e();return u?.addEventListener("webkitbeginfullscreen",s),u?.addEventListener("webkitendfullscreen",s),()=>{o.removeEventListener("fullscreenchange",r),o.removeEventListener("webkitfullscreenchange",s),o.removeEventListener("webkitbeginfullscreen",s,!0),o.removeEventListener("webkitendfullscreen",s,!0),u?.removeEventListener("webkitbeginfullscreen",s),u?.removeEventListener("webkitendfullscreen",s)}}const $o=({skipIntervals:e,showId:n,episodeNumber:r,episodeCount:o,sourceType:s,showMeta:u})=>{const h=Bt(),i=g(null),S=g(null),b=g(null),a=g(null),L=g(!1),_=g(null),T=g(0),f=g(1),p=g({mouse:!1,keyboard:!1}),y=g(null),l=g(null),C=g(!1),d=g(Math.random().toString(36).substring(2)),[B,$]=w(!1),[O,M]=w(()=>{try{return localStorage.getItem("playerMuted")==="true"}catch{return!1}}),[m,A]=w(()=>{try{const c=parseFloat(localStorage.getItem("playerVolume")||"");return isNaN(c)?1:Math.max(0,Math.min(1,c))}catch{return 1}}),[J,H]=w(!1),[D,oe]=w(0),[Ke,z]=w(!0),[ie,Te]=w(!1),[Ge,Ee]=w({time:0,position:null}),[me,Je]=w(localStorage.getItem("autoSkipEnabled")==="true"),[Qe,he]=w(null),[Xe,je]=w(!1),[G]=w(Yr),[Ye,Ze]=w(G.fontSize),[et,tt]=w(G.position),[nt,rt]=w(G.bgOpacity),[st,ot]=w(G.bgColor),[it,ct]=w(G.textColor),[at,lt]=w(G.edge),[ut,dt]=w(G.bold),[pt,ft]=w([]),[_t,mt]=w(null),[ht,gt]=w(!1),[yt,vt]=w(!1),[bt,ge]=w(!1),[wt,ce]=w(!1),[St,Le]=w(()=>{try{return localStorage.getItem("playerUseNativeControls")==="true"}catch{return!1}}),Y=g(!1),ye=g(-1),ae=N(()=>{const c=i.current;return!n||!r||!u?.name?null:{showId:n,episodeNumber:r,episodeCount:o,currentTime:c?c.currentTime:0,duration:c?c.duration:0,showName:u.name,showThumbnail:u.thumbnail,nativeName:u.names?.native,englishName:u.names?.english,genres:Array.isArray(u.genres)?u.genres.map(v=>typeof v=="string"?v:v?.name).filter(Boolean):void 0,popularityScore:u.score,type:u.type,isPlaying:c?!c.paused:!0,sessionId:d.current,isAdult:u.isAdult}},[n,r,o,u]),F=N((c=!1,v=!1)=>{if(Y.current)return!1;const k=ae();if(!k)return!1;const P=i.current;if(!P&&s!=="iframe")return!1;const R=P?P.currentTime>=P.duration*.8:!1;let V=P?P.currentTime:0;if(c&&R&&(V=P?P.duration:0),!v){if(V===0&&!R)return!1;const ee=P?Math.abs(V-ye.current):0;if(!c&&P&&V!==P.duration&&ee<5)return!1}return k.currentTime=V,ye.current=V,c?(async()=>{try{await ve("/api/update-progress",{method:"POST",body:JSON.stringify(k)}),h.invalidateQueries({queryKey:["video-sources",n,r]}),h.invalidateQueries({queryKey:["allContinueWatching"]}),h.invalidateQueries({queryKey:["thisWeekSchedule"]})}catch(ee){console.error("Failed to update progress:",ee)}})():ve("/api/update-progress",{method:"POST",body:JSON.stringify(k),keepalive:!0}).catch(ee=>console.error("Failed to update progress:",ee)),!0},[ae,s,h,n,r]);I(()=>{const c=i.current;c&&(c.volume=m,c.muted=O)},[i,m,O]),I(()=>{const c=()=>{Y.current||F(!0)};window.addEventListener("beforeunload",c);const v=_,k=a;return()=>{window.removeEventListener("beforeunload",c),Y.current||F(!0),v.current&&clearTimeout(v.current),k.current&&clearTimeout(k.current)}},[F]);const le=N(()=>{const c=S.current;c&&zs(c,i.current).catch(v=>{console.error(`Error attempting to toggle full-screen mode: ${v?.message} (${v?.name})`)})},[]),ue=N(()=>{i.current&&(i.current.paused?i.current.play().catch(()=>console.warn("Autoplay was prevented.")):(i.current.pause(),z(!0)))},[z]),Q=N(()=>{const c=i.current;if(!c)return;const v=p.current.mouse||p.current.keyboard;c.playbackRate=v?2:f.current},[]),de=N(c=>{p.current.mouse!==c&&(p.current.mouse=c,ce(c||p.current.keyboard),Q())},[Q]),X=N(c=>{p.current.keyboard!==c&&(p.current.keyboard=c,ce(p.current.mouse||c),Q())},[Q]),Z=N(c=>{i.current&&(i.current.currentTime+=c,_.current&&clearTimeout(_.current),_.current=setTimeout(()=>{F(!1,!0)},1500),z(!0))},[F,z]),pe=N(()=>{if(!i.current)return;const c=!i.current.muted;i.current.muted=c,M(c),localStorage.setItem("playerMuted",String(c)),!c&&i.current.volume===0&&(i.current.volume=.5,A(.5),localStorage.setItem("playerVolume",String(.5))),z(!0)},[z]);I(()=>{const c=()=>i.current,v=Ws(c,k=>{H(k),k&&z(!0)});return H(se(c())),v},[z]),I(()=>{const c=k=>{if(!k.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')){if(k.code==="Space"){if(k.preventDefault(),C.current)return;C.current=!0,l.current&&clearTimeout(l.current),l.current=window.setTimeout(()=>{l.current=null,C.current&&X(!0)},180);return}switch(k.key.toLowerCase()){case"f":le();break;case"m":pe();break;case"arrowright":Z(10);break;case"arrowleft":Z(-10);break;case"arrowup":if(k.preventDefault(),i.current){const R=Math.min(1,i.current.volume+.1);i.current.volume=R,A(R)}break;case"arrowdown":if(k.preventDefault(),i.current){const R=Math.max(0,i.current.volume-.1);i.current.volume=R,A(R)}break}}},v=k=>{if(k.code==="Space"){if(k.preventDefault(),C.current=!1,p.current.keyboard){X(!1);return}l.current&&(clearTimeout(l.current),l.current=null,ue())}};return document.addEventListener("keydown",c),document.addEventListener("keyup",v),()=>{document.removeEventListener("keydown",c),document.removeEventListener("keyup",v),l.current&&(clearTimeout(l.current),l.current=null),C.current=!1,X(!1),ce(!1)}},[X,ue,le,pe,Z]),I(()=>{const c=P=>{if(P.button!==0)return;const R=P.target;if(!R||R.closest('[data-speed-boost-ignore="true"]'))return;const V=S.current;!V||!V.contains(R)||(y.current&&clearTimeout(y.current),y.current=window.setTimeout(()=>{y.current=null,de(!0)},180))},v=()=>{y.current&&(clearTimeout(y.current),y.current=null),de(!1)},k=()=>{y.current&&(clearTimeout(y.current),y.current=null),C.current=!1,l.current&&(clearTimeout(l.current),l.current=null),X(!1),de(!1),ce(!1)};return document.addEventListener("mousedown",c),document.addEventListener("mouseup",v),window.addEventListener("blur",k),()=>{document.removeEventListener("mousedown",c),document.removeEventListener("mouseup",v),window.removeEventListener("blur",k),y.current&&(clearTimeout(y.current),y.current=null)}},[X,de]);const Ne=N(()=>{$(!0),ge(!1),setTimeout(()=>F(!1,!0),50)},[F]),Ie=N(()=>{ge(!1)},[]),Pe=N(()=>{ge(!0)},[]),$e=N(()=>{$(!1),z(!0),setTimeout(()=>F(!1,!0),50)},[F]);I(()=>{Y.current=!1,ye.current=-1,T.current=0,d.current=Math.random().toString(36).substring(2)},[n,r]),I(()=>{const c=d.current;return()=>{const v=JSON.stringify({sessionId:c}),k=new Blob([v],{type:"application/json"});navigator.sendBeacon("/api/discord/clear",k)}},[n,r]),I(()=>{if(s!=="iframe")return;F(!1,!0);const c=setInterval(()=>{F(!1,!0)},6e4);return()=>clearInterval(c)},[s,F]);const Me=N(()=>{oe(i.current?.duration||0),Q()},[Q]),Ae=N(()=>{if(i.current){const c=i.current.muted,v=i.current.volume;M(c),A(v),localStorage.setItem("playerMuted",String(c)),localStorage.setItem("playerVolume",String(v))}},[]),Fe=N(()=>{},[]),Re=N(()=>{const c=i.current;if(!c)return;const v=c.currentTime||0,k=Date.now();k-T.current>6e4&&F()&&(T.current=k);const P=e.find(R=>v>=R.start_time&&v<R.end_time)||null;he(R=>R?.skip_id!==P?.skip_id?P:R),me&&P&&!c.paused&&(c.currentTime=P.end_time,he(null))},[e,me,F]),Oe=N(()=>{const c=ae();c&&(c.currentTime=c.duration,ve("/api/update-progress",{method:"POST",body:JSON.stringify(c)}).then(()=>{h.invalidateQueries({queryKey:["video-sources",n,r]}),h.invalidateQueries({queryKey:["allContinueWatching"]})}).catch(v=>console.error("Failed to send final progress:",v)))},[ae,h,n,r]),De=N(()=>{Y.current=!0,Oe()},[Oe]);I(()=>{const c=()=>{ie&&(Te(!1),Ee({time:0,position:null}),L.current&&i.current?.play(),F(!1,!0))};return ie&&document.addEventListener("mouseup",c),()=>{document.removeEventListener("mouseup",c)}},[ie,F]);const Ct=re(()=>({togglePlay:ue,seek:Z,toggleMute:pe,toggleFullscreen:le,onPlay:Ne,onPause:$e,onLoadedMetadata:Me,formatTime:xt,onVolumeChange:Ae,onProgress:Fe,onTimeUpdate:Re,onEnded:De,setShowControls:z,setIsScrubbing:Te,setHoverTime:Ee,setIsAutoSkipEnabled:Je,setCurrentSkipInterval:he,setShowCCMenu:je,setSubtitleFontSize:Ze,setSubtitlePosition:tt,setSubtitleBgOpacity:rt,setSubtitleBgColor:ot,setSubtitleTextColor:ct,setSubtitleEdge:lt,setSubtitleBold:dt,setAvailableSubtitles:ft,setActiveSubtitleTrack:mt,setShowSettings:gt,setShowVolumeSlider:vt,wasPlayingBeforeScrub:L,inactivityTimer:a,setIsFullscreen:H,onWaiting:Pe,onPlaying:Ie,sendProgressUpdate:F,setUseNativeControls:Le}),[ue,Z,pe,le,Ne,$e,Me,Ae,Fe,Re,De,H,Pe,Ie,F,Le]);return{refs:{videoRef:i,playerContainerRef:S,progressBarRef:b},state:{isPlaying:B,isMuted:O,volume:m,isFullscreen:J,duration:D,showControls:Ke,isScrubbing:ie,hoverTime:Ge,isAutoSkipEnabled:me,currentSkipInterval:Qe,showCCMenu:Xe,subtitleFontSize:Ye,subtitlePosition:et,subtitleBgOpacity:nt,subtitleBgColor:st,subtitleTextColor:it,subtitleEdge:at,subtitleBold:ut,availableSubtitles:pt,activeSubtitleTrack:_t,showSettings:ht,showVolumeSlider:yt,isBuffering:bt,isSpeedBoostActive:wt,useNativeControls:St},actions:Ct}};function Vs(){try{return typeof navigator<"u"&&/android/i.test(navigator.userAgent)}catch{return!1}}function Mo(e,n){const{state:r,refs:o,actions:s}=e,u=g(n);u.current=n;const h=g(!1);I(()=>{if(!Vs())return;let i=null;const S=()=>i?i.matches:window.innerWidth>window.innerHeight,b=()=>{const a=o.playerContainerRef.current;if(S()){if(!u.current||!a||se(o.videoRef.current))return;h.current=!0,s.toggleFullscreen()}else h.current&&(h.current=!1,se(o.videoRef.current)&&s.toggleFullscreen())};try{i=window.matchMedia("(orientation: landscape)"),i.addEventListener?i.addEventListener("change",b):i.addListener(b)}catch{}return b(),()=>{try{i&&(i.removeEventListener?i.removeEventListener("change",b):i.removeListener(b))}catch{}}},[s,o.playerContainerRef,o.videoRef,n]),I(()=>{r.isFullscreen||(h.current=!1)},[r.isFullscreen])}const Us=e=>Math.max(8,Math.min(40,Math.ceil(e/16.7)+4));function Ao({videoRef:e,canvasRef:n,delayMs:r,enabled:o}){const s=g(r);s.current=r;const u=g([]),h=g(-1),i=g(-1),S=g(!1),b=g(0),a=g(null);I(()=>{const L=l=>{if(l)try{l.close()}catch{}},_=()=>{for(const l of u.current)L(l.bitmap);u.current=[]};if(!o){_(),h.current=-1,i.current=-1,S.current=!1,b.current=0;return}let T=!1;const f=()=>{a.current!==null&&(cancelAnimationFrame(a.current),a.current=null)},p=()=>{T||(f(),a.current=requestAnimationFrame(()=>{y()}))};async function y(){if(T)return;const l=e.current,C=n.current;if(!l||!C||l.videoWidth===0){p();return}if(l.paused||l.ended||document.hidden||l.readyState<HTMLMediaElement.HAVE_CURRENT_DATA){p();return}const d=l.getVideoPlaybackQuality().totalVideoFrames;if(d===h.current){p();return}(l.seeking||i.current>=0&&Math.abs(l.currentTime-i.current)>.5)&&(_(),S.current=!1,b.current=0,h.current=-1),i.current=l.currentTime,(C.width!==l.videoWidth||C.height!==l.videoHeight)&&(C.width=l.videoWidth,C.height=l.videoHeight);const B=Math.max(0,s.current||0);B>b.current&&(S.current=!1);try{const $=await createImageBitmap(l);if(T){L($);return}h.current=d;const O=performance.now(),M=C.getContext("2d"),m=D=>{M&&M.drawImage(D,0,0,C.width,C.height)};if(B<=0){_(),S.current=!1,b.current=0,m($),L($),p();return}const A=u.current;A.push({bitmap:$,capture:O});const J=Us(B);for(;A.length>J;)L(A.shift()?.bitmap);let H=-1;for(let D=A.length-1;D>=0;D--)if(O-A[D].capture>=B){H=D;break}if(H!==-1){for(let oe=0;oe<H;oe++)L(A.shift()?.bitmap);const D=A.shift();D?(m(D.bitmap),L(D.bitmap),S.current=!0,b.current=B):m($)}else if(!S.current)m($);else{const D=A.shift();D?(m(D.bitmap),L(D.bitmap)):m($)}}catch{}p()}return p(),()=>{T=!0,f();for(const l of u.current)try{l.bitmap.close()}catch{}u.current=[]}},[o,e,n])}const Ks="_row_1fq55_1",Gs="_rowHeader_1fq55_9",Js="_rowLabel_1fq55_17",Qs="_rowValue_1fq55_28",Xs="_slider_1fq55_36",js="_swatches_1fq55_99",Ys="_swatch_1fq55_99",Zs="_swatchPicked_1fq55_114",eo="_colorInput_1fq55_120",to="_segmented_1fq55_131",q={row:Ks,rowHeader:Gs,rowLabel:Js,rowValue:Qs,slider:Xs,swatches:js,swatch:Ys,swatchPicked:Zs,colorInput:eo,segmented:to},no=({label:e,display:n,min:r,max:o,step:s,value:u,percent:h,onChange:i,onCommit:S})=>t("div",{className:q.row,children:[t("div",{className:q.rowHeader,children:[t("span",{className:q.rowLabel,children:e}),t("span",{className:q.rowValue,children:n})]}),t("input",{type:"range",className:q.slider,min:r,max:o,step:s,value:u,"aria-label":e,onInput:b=>i(Number(b.target.value)),onPointerUp:S,onPointerCancel:S,onTouchEnd:S,onKeyUp:S,onBlur:S,style:{"--slider-percent":`${h}%`}})]}),Fo=({label:e,colors:n,value:r,onChange:o})=>t("div",{className:q.row,children:[t("div",{className:q.rowHeader,children:t("span",{className:q.rowLabel,children:e})}),t("div",{className:q.swatches,children:[n.map(s=>t("button",{type:"button","aria-label":`${e} ${s}`,"aria-pressed":r.toLowerCase()===s.toLowerCase(),onClick:()=>o(s),className:`${q.swatch} ${r.toLowerCase()===s.toLowerCase()?q.swatchPicked:""}`,style:{backgroundColor:s}},s)),t("input",{type:"color","aria-label":`Custom ${e.toLowerCase()}`,className:q.colorInput,value:r,onInput:s=>o(s.target.value)})]})]});function Ro({label:e,options:n,value:r,onChange:o}){return t("div",{className:q.row,children:[t("div",{className:q.rowHeader,children:t("span",{className:q.rowLabel,children:e})}),t("div",{className:q.segmented,role:"group","aria-label":e,children:n.map(s=>t("button",{type:"button","aria-pressed":r===s,onClick:()=>o(s),children:[t("span",{children:s}),r===s&&t(U,{name:"check",size:10})]},s))})]})}const _e=10,xe=500,Se=e=>Math.max(0,Math.min(xe,Math.round(e))),Oo=({isOpen:e,ms:n,onChange:r,onApply:o,onClose:s,testClipActive:u,onTestClip:h})=>e?t("div",{role:"dialog","aria-label":"Calibrate audio video sync","data-speed-boost-ignore":"true",onClick:i=>i.stopPropagation(),style:{position:"absolute",right:8,bottom:112,width:"min(260px, calc(100% - 16px))",maxHeight:"calc(100% - 124px)",overflowY:"auto",overflowX:"hidden",zIndex:60,display:"flex",flexDirection:"column",alignItems:"center",gap:8,padding:12,borderRadius:"var(--radius-lg)",border:"1px solid var(--glass-border)",background:"rgba(18, 18, 22, 0.95)",boxShadow:"var(--glass-shadow)",backdropFilter:"blur(14px)",WebkitBackdropFilter:"blur(14px)",boxSizing:"border-box"},children:[t("div",{style:{fontSize:"0.8rem",fontWeight:800,color:"var(--text-primary)"},children:"A/V sync"}),t("div",{children:t(te,{size:"sm",variant:"secondary",onClick:h,children:u?"Back to video":"Preview test clip"})}),t("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",gap:6,flexWrap:"wrap"},children:[t(te,{size:"sm",onClick:()=>r(Se(n-_e)),"aria-label":"Decrease delay by 10 milliseconds",children:["− ",_e,"ms"]}),t("div",{style:{fontSize:"1.1rem",fontWeight:800,minWidth:64,textAlign:"center"},children:[n,"ms"]}),t(te,{size:"sm",onClick:()=>r(Se(n+_e)),"aria-label":"Increase delay by 10 milliseconds",children:["+ ",_e,"ms"]})]}),t(no,{label:"Video delay",display:`${n}ms`,min:0,max:xe,step:5,value:n,percent:n/xe*100,onChange:i=>r(Se(i))}),t("div",{style:{display:"flex",gap:8,justifyContent:"center",flexWrap:"wrap"},children:[t(te,{size:"sm",variant:"secondary",onClick:s,children:"Cancel"}),t(te,{size:"sm",onClick:o,children:["Apply ",n,"ms"]})]})]}):null;export{Oo as A,So as B,Bo as C,K as D,Io as E,no as M,No as P,To as S,wo as T,Lo as U,Eo as a,Ao as b,Mo as c,go as d,yo as e,Co as f,xo as g,bo as h,Gr as i,lo as j,Ls as k,fo as l,ao as m,j as n,Po as o,ho as p,_o as q,vo as r,Xr as s,ko as t,$o as u,mo as v,uo as w,po as x,Fo as y,Ro as z};
@@ -1,4 +0,0 @@
1
- import{d as b,A as I,h as v,u as t,S as Oe,n as Er,o as Nr,a as wr,T as Ee,q as T}from"./vendor-core-8R2fFbyN.js";import{e as Tn,z as Ir,M as tn,B as _e}from"./index-CfvzoNYQ.js";import{I as A}from"./vendor-icons-CDMuNDeL.js";import{M as Mr,t as Zn,f as wn,d as Br,C as Ar,S as Lr,U as Pr,a as $r,p as In,u as Rr,c as Dr,b as Or,l as Vr,q as Fr,i as xn,v as zr,w as Wr,x as Qn,s as En,e as Ur,g as Hr,h as jr,r as qr,j as st,k as Kr,E as Yr,A as Gr,P as Jr,m as be,o as Qr}from"./AvSyncCalibrator-Bs4iejCG.js";import{O as rn,S as Xr,a as Zr,A as es}from"./OptionListMenu-JQ_--ggT.js";import{u as ts}from"./useMatureConsent-CT7-KfzG.js";import{u as ns}from"./useProviders-jxh6fvMH.js";import{d as rs,g as ss,h as as,f as os,e as is,j as ls,k as cs}from"./useTvLibrary-DeGkJuvp.js";import{l as ds,c as us}from"./hls-Cbou9Eb-.js";import{u as ms}from"./useIsMobile-Dm_b6Ob3.js";import{S as hs}from"./SynopsisText-BcpwT5iw.js";import"./vendor-query-BXRECSI6.js";const ps="_fullscreenFlat_oxcpx_1",gs="_timeDisplay_oxcpx_15",fs="_bottomControls_oxcpx_19",bs="_leftControls_oxcpx_23",vs="_rightControls_oxcpx_24",ys="_controlBtn_oxcpx_28",Ss="_controlsOverlay_oxcpx_47",_s="_hidden_oxcpx_67",Cs="_topControls_oxcpx_73",ks="_backBtn_oxcpx_93",Ts="_videoTitleInfo_oxcpx_113",xs="_animeTitle_oxcpx_119",Es="_episodeLabel_oxcpx_127",Ns="_speedBoostBadge_oxcpx_134",ws="_progressBarContainer_oxcpx_180",Is="_progressBar_oxcpx_180",Ms="_thumb_oxcpx_199",Bs="_bufferedBar_oxcpx_217",As="_watchedBar_oxcpx_227",Ls="_scrubbing_oxcpx_252",Ps="_timeBubble_oxcpx_256",$s="_bottomControlsRow_oxcpx_270",Rs="_active_oxcpx_323",Ds="_settingsPanel_oxcpx_398",Os="_settingsHeader_oxcpx_417",Vs="_settingsBackBtn_oxcpx_425",Fs="_settingsTitle_oxcpx_443",zs="_settingsContent_oxcpx_454",Ws="_currentValue_oxcpx_463",Us="_menuItem_oxcpx_478",Hs="_menuNote_oxcpx_511",a={fullscreenFlat:ps,timeDisplay:gs,bottomControls:fs,leftControls:bs,rightControls:vs,controlBtn:ys,controlsOverlay:Ss,hidden:_s,topControls:Cs,backBtn:ks,videoTitleInfo:Ts,animeTitle:xs,episodeLabel:Es,speedBoostBadge:Ns,progressBarContainer:ws,progressBar:Is,thumb:Ms,bufferedBar:Bs,watchedBar:As,scrubbing:Ls,timeBubble:Ps,bottomControlsRow:$s,active:Rs,settingsPanel:Ds,settingsHeader:Os,settingsBackBtn:Vs,settingsTitle:Fs,settingsContent:zs,currentValue:Ws,menuItem:Us,menuNote:Hs},nn=-1e4,Nn=1e4,Xn=500,js=({classes:h,delayMs:k,onDelayChange:F})=>{const[$,r]=b(null),j=$??k,q=I(F);q.current=F;const B=I(k);B.current=k;const i=I(null);i.current=$,v(()=>{r(null)},[k]),v(()=>()=>{const U=i.current;U!==null&&U!==B.current&&q.current(U)},[]);const re=U=>{B.current=U,i.current=null,q.current(U),r(null)},se=U=>{const f=i.current??B.current,ue=Math.max(nn,Math.min(Nn,f+U));re(ue)};return t(Oe,{children:[t("div",{style:{display:"flex",gap:6,padding:"0.5rem 0.75rem 0.25rem"},children:[t("button",{type:"button",className:h.item,onClick:()=>se(-Xn),"aria-label":"Show subtitles 0.5 seconds earlier",style:{flex:1,justifyContent:"center"},children:t("span",{children:"-0.5s"})}),t("button",{type:"button",className:h.item,onClick:()=>se(Xn),"aria-label":"Show subtitles 0.5 seconds later",style:{flex:1,justifyContent:"center"},children:t("span",{children:"+0.5s"})}),t("button",{type:"button",className:h.item,onClick:()=>re(0),disabled:j===0,"aria-label":"Reset subtitle timing",style:{flex:1,justifyContent:"center"},children:t("span",{children:"Reset"})})]}),t(Mr,{label:"Subtitle timing",display:Zn(j),min:nn,max:Nn,step:100,value:j,percent:(j-nn)/(Nn-nn)*100,onChange:U=>{const f=Math.round(U);i.current=f,r(f)},onCommit:()=>{const U=i.current;U!==null&&re(U)}}),t("div",{className:h.note,children:"Positive delays subtitles (show later). Negative shows them earlier. 0.0s is default."})]})},qs=({classes:h,tracks:k,selected:F,onChange:$})=>t(rn,{classes:h,options:k.map((r,j)=>({key:String(j),label:r.label||r.language,selected:j===F})),onSelect:r=>$(Number(r))}),Ks=({player:h,title:k,episodeLabel:F,audioTracks:$,selectedAudioTrack:r,onAudioTrackChange:j,subtitles:q,selectedSubtitle:B,onSubtitleChange:i,streams:re,qualityIdx:se,onQualityChange:U,onBack:f,children:ue,movyServers:K=[],selectedMovyServer:St="atlanta",onMovyServerSelect:me,isMovySource:Ve=!1,videoDelayEnabled:_t=!1,onVideoDelayToggle:sn,videoDelayMs:Mt=0,onVideoDelayChange:Bt,onCalibrateAvSync:ae,subtitleDelayMs:Ct=0,onSubtitleDelayChange:At})=>{const{state:x,refs:we,actions:E}=h,N=we.videoRef,{subtitleFontSize:Ie,subtitlePosition:Me,subtitleBgOpacity:Ce,subtitleBgColor:Fe,subtitleTextColor:he,subtitleEdge:ze,subtitleBold:X}=x,[C,J]=b(null),Lt=I(null),[We,at]=b(0);v(()=>{const o=N.current;if(!o)return;const c=()=>at(o.clientHeight||0);c();const Ae=new ResizeObserver(c);return Ae.observe(o),()=>Ae.disconnect()},[N,re]);const pe=(o,c)=>{try{localStorage.setItem(o,String(c))}catch{}},an=(o,c)=>{switch(o){case"fontSize":typeof c=="number"&&(E.setSubtitleFontSize(c),pe("subtitleFontSize",c));break;case"position":typeof c=="number"&&(E.setSubtitlePosition(c),pe("subtitlePosition",c));break;case"bgOpacity":typeof c=="number"&&(E.setSubtitleBgOpacity(c),pe("subtitleBgOpacity",c));break;case"bgColor":typeof c=="string"&&(E.setSubtitleBgColor(c),pe("subtitleBgColor",c));break;case"textColor":typeof c=="string"&&(E.setSubtitleTextColor(c),pe("subtitleTextColor",c));break;case"edge":(c==="shadow"||c==="outline"||c==="none")&&(E.setSubtitleEdge(c),pe("subtitleEdge",c));break;case"bold":typeof c=="boolean"&&(E.setSubtitleBold(c),pe("subtitleBold",c));break}};v(()=>{const o="tv-player-subtitle-style";let c=document.getElementById(o);c||(c=document.createElement("style"),c.id=o,document.head.appendChild(c));const Ae={fontSize:Ie,position:Me,bgOpacity:Ce,bgColor:Fe,textColor:he,edge:ze,bold:X},Z=N.current,Wt=wn(Ie,We||Z?.clientHeight||720);if(c.textContent=Br({...Ae,fontSize:Wt}),Z){const Ut=()=>{const w=Number(Me);return isNaN(w)?0:Math.max(0,Math.min(100,w))},Tt=(w,z)=>{try{const d=w;d.snapToLines=!1,d.line=z}catch{}},ln=()=>{const w=Wt*16,z=Z.videoHeight||Z.clientHeight||720,d=Z.videoWidth||Z.clientWidth||1280;return{step:w*1.3/z*100,chars:Math.max(20,Math.floor(d/(w*.55)))}},ct=w=>{const z=Math.max(0,Math.min(100,100-Ut())),d=Array.from(w.activeCues??[]);if(d.length<=1){d.forEach(ye=>Tt(ye,z));return}const{step:Ge,chars:Y}=ln();let xt=z;for(let ye=d.length-1;ye>=0;ye--){const dn=String(d[ye].text??"").replace(/<[^>]*>/g,"").split(`
2
- `).reduce((jt,mt)=>jt+Math.max(1,Math.ceil(mt.length/Y)),0),Ht=xt-dn*Ge;Tt(d[ye],Math.max(0,Ht)),xt=Ht-Ge*.4}},Ke=()=>{const w=Math.max(0,Math.min(100,100-Ut()));Array.from(Z.textTracks).forEach(z=>{z.cues&&(Array.from(z.cues).forEach(d=>Tt(d,w)),z.mode==="showing"&&ct(z))})};Ke();const Q=w=>{const z=w.target;z.mode==="showing"&&ct(z)},dt=()=>{Array.from(Z.textTracks).forEach(w=>{w.removeEventListener("cuechange",Q),w.addEventListener("cuechange",Q)}),Ke()};Array.from(Z.textTracks).forEach(w=>{w.addEventListener("cuechange",Q)}),Z.textTracks.addEventListener("addtrack",dt);const ut=Array.from(Z.querySelectorAll("track")),Ye=()=>Ke();return ut.forEach(w=>w.addEventListener("load",Ye)),()=>{Array.from(Z.textTracks).forEach(w=>{w.removeEventListener("cuechange",Q)}),Z.textTracks.removeEventListener("addtrack",dt),ut.forEach(w=>w.removeEventListener("load",Ye))}}},[Ie,Me,Ce,Fe,he,ze,X,B,q,N,We]);const kt=o=>{const c=N.current;!c||isNaN(x.duration)||x.duration===0||(c.currentTime=o*x.duration)},Ue=()=>{N.current&&(E.setIsScrubbing(!0),E.wasPlayingBeforeScrub.current=!N.current.paused,N.current.pause())},oe=o=>{const c=N.current;c&&x.duration&&(c.currentTime=o*x.duration)},Pt=()=>{E.setIsScrubbing(!1),E.wasPlayingBeforeScrub.current&&N.current?.play().catch(()=>{})},$t=o=>{const c=N.current;c&&(c.volume=o,c.muted=o===0,localStorage.setItem("playerVolume",o.toString()))},Rt=()=>{E.toggleMute()},Be=q.length>0,y=B>=0,u=()=>{J("main"),E.setShowControls(!0)},ie=()=>{if(y){i(-1);return}let o=null;try{o=localStorage.getItem("tvLastSubtitle")}catch{}i(In(q,{lastKey:o,enabled:!0}))},te=()=>{J(null)},Dt=()=>t(Oe,{children:[re.length>1&&t("button",{className:a.menuItem,onClick:()=>J("quality"),children:[t("span",{children:"Quality"}),t("span",{className:a.currentValue,children:re[se]?.quality||"Auto"})]}),Ve&&K.length>0&&t("button",{className:a.menuItem,onClick:()=>J("server"),children:[t("span",{style:{display:"flex",alignItems:"center",gap:6},children:[t(A,{name:"server",size:12})," Movy Server"]}),t("span",{className:a.currentValue,style:{textTransform:"capitalize"},children:St})]}),Be&&t("button",{className:a.menuItem,onClick:()=>J("subtitles"),children:[t("span",{children:"Subtitles"}),t("span",{className:a.currentValue,children:y?q[B]?.label||q[B]?.language:"Off"})]}),Be&&t("button",{className:a.menuItem,onClick:()=>J("subtitle-style"),children:[t("span",{children:"Subtitle Style"}),t("span",{className:a.currentValue,children:[Ie.toFixed(1),"x · ",Me]})]}),Be&&t("button",{className:a.menuItem,onClick:()=>J("subtitle-timing"),children:[t("span",{children:"Subtitle Timing"}),t("span",{className:a.currentValue,children:Zn(Ct)})]}),$.length>0&&t("button",{className:a.menuItem,onClick:()=>J("audio"),children:[t("span",{children:"Audio Track"}),t("span",{className:a.currentValue,children:$[r]?.label||$[r]?.language})]}),t("button",{className:a.menuItem,onClick:()=>J("av-sync"),children:[t("span",{children:"A/V Sync"}),t("span",{className:a.currentValue,children:_t?`${Mt}ms`:"Off"})]})]}),Ot=()=>t(rn,{classes:{item:a.menuItem,active:a.active},options:re.map((o,c)=>({key:String(c),label:o.quality,selected:c===se})),onSelect:o=>U(Number(o))}),He=()=>t(rn,{classes:{item:a.menuItem,active:a.active},options:[{key:"off",label:"Off",selected:!y},...q.map((o,c)=>({key:String(c),label:o.label||o.language,selected:c===B}))],onSelect:o=>i(o==="off"?-1:Number(o))}),Vt=()=>t(Zr,{classes:{item:a.menuItem,active:a.active},values:{fontSize:Ie,position:Me,bgOpacity:Ce,bgColor:Fe,textColor:he,edge:ze,bold:X},onChange:an}),je=()=>t(js,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},delayMs:Ct,onDelayChange:o=>At?.(o)}),ot=()=>t(qs,{classes:{item:a.menuItem,active:a.active},tracks:$,selected:r,onChange:j}),on=()=>t(rn,{classes:{item:a.menuItem,active:a.active},options:K.map(o=>({key:o,label:t("span",{style:{textTransform:"capitalize"},children:o}),selected:St===o})),onSelect:o=>me?.(o)}),it=()=>t(es,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},enabled:_t,delayMs:Mt,onToggle:o=>sn?.(o),onDelayChange:o=>Bt?.(o),onCalibrate:()=>{J(null),ae?.()}}),ve=x.isMuted?t(A,{name:"volume-mute"}):x.volume<.5?t(A,{name:"volume-down"}):t(A,{name:"volume-up"}),qe=t("div",{className:`${a.controlsOverlay} ${!x.showControls&&!C?a.hidden:""}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none"},children:t("div",{className:a.topControls,onClick:o=>o.stopPropagation(),children:[t("button",{className:a.backBtn,onClick:f,title:"Back","aria-label":"Back",children:t(A,{name:"chevron-left"})}),t("div",{className:a.videoTitleInfo,children:[t("span",{className:a.animeTitle,children:k}),F&&t("span",{className:a.episodeLabel,children:F})]})]})}),lt=t(Ar,{isPlaying:x.isPlaying,onTogglePlay:E.togglePlay,onSkipBack:()=>E.seek(-10),onSkipForward:()=>E.seek(10)}),ge=t("div",{className:`${a.controlsOverlay} ${!x.showControls&&!C?a.hidden:""}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:a.bottomControls,onClick:o=>o.stopPropagation(),children:[t(Lr,{classes:{container:a.progressBarContainer,scrubbing:a.scrubbing,timeBubble:a.timeBubble,bar:a.progressBar,buffered:a.bufferedBar,watched:a.watchedBar,thumb:a.thumb},videoRef:N,duration:x.duration,formatTime:Tn,isScrubbing:x.isScrubbing,buffered:"full",onSeek:kt,onScrubStart:Ue,onScrubMove:oe,onScrubEnd:Pt,timeLabelRef:Lt}),t("div",{className:a.bottomControlsRow,children:[t("div",{className:a.leftControls,children:[t("button",{className:a.controlBtn,onClick:E.togglePlay,"aria-label":x.isPlaying?"Pause":"Play",children:x.isPlaying?t(A,{name:"pause"}):t(A,{name:"play"})}),t(Pr,{muted:x.isMuted,volume:x.volume,volumeIcon:ve,buttonClassName:a.controlBtn,onToggleMute:Rt,onVolumeChange:$t,onExpandedChange:o=>E.setShowVolumeSlider(o)}),t("span",{className:a.timeDisplay,ref:Lt,children:[Tn(0)," / ",Tn(x.duration)]})]}),t("div",{className:a.rightControls,children:[Be&&t("button",{className:`${a.controlBtn} ${y?a.active:""}`,onClick:ie,"aria-label":y?"Turn subtitles off":"Turn subtitles on",children:t(A,{name:"closed-captioning"})}),t("button",{className:`${a.controlBtn} ${C?a.active:""}`,onClick:()=>C?te():u(),"aria-label":"Settings",children:t(A,{name:"cog"})}),t("button",{className:a.controlBtn,onClick:E.toggleFullscreen,"aria-label":x.isFullscreen?"Exit Fullscreen":"Fullscreen",children:x.isFullscreen?t(A,{name:"compress"}):t(A,{name:"expand"})})]})]})]})}),Ft=C?t("div",{"data-speed-boost-ignore":"true",onClick:o=>o.stopPropagation(),children:t(Xr,{classes:{panel:a.settingsPanel,header:a.settingsHeader,backBtn:a.settingsBackBtn,title:a.settingsTitle,content:a.settingsContent},title:C==="main"?"Settings":C==="subtitle-style"?"Subtitle Style":C==="subtitle-timing"?"Subtitle Timing":C==="audio"?"Audio Track":C==="server"?"Movy Server":C==="av-sync"?"A/V Sync":C.charAt(0).toUpperCase()+C.slice(1),onBack:()=>C==="main"?te():J("main"),children:[C==="main"&&Dt(),C==="quality"&&Ot(),C==="subtitles"&&He(),C==="subtitle-style"&&Vt(),C==="subtitle-timing"&&je(),C==="audio"&&ot(),C==="server"&&on(),C==="av-sync"&&it()]})}):null,zt=x.isSpeedBoostActive?t("div",{className:a.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(A,{name:"forward",size:12})]}):null;return t($r,{player:h,topBar:qe,centerControls:lt,bottomBar:ge,settingsPanel:Ft,overlays:zt,isInteracting:!!C,className:x.isFullscreen?a.fullscreenFlat:"",children:ue})};function Ys(h,k,F){const $=()=>{const j=Array.isArray(h.audioTracks)?h.audioTracks.length:0,q=F.getWant(),B=j>0?Math.min(Math.max(0,q),j-1):q;h.audioTrack=B,B!==q&&F.onResolve(B)},r=(j,q)=>{const B=F.getWant(),i=Array.isArray(h.audioTracks)?h.audioTracks.length:0;if(q.id!==B&&B>=0&&B<i){h.audioTrack!==B&&(h.audioTrack=B);return}F.onResolve(q.id)};return h.on(k.MANIFEST_PARSED,$),h.on(k.AUDIO_TRACK_SWITCHED,r),()=>{h.off(k.MANIFEST_PARSED,$),h.off(k.AUDIO_TRACK_SWITCHED,r)}}const Gs="_page_263ma_1",Js="_header_263ma_7",Qs="_pageTitle_263ma_11",Xs="_searchForm_263ma_21",Zs="_searchInput_263ma_27",ea="_searchBtn_263ma_42",ta="_suggestions_263ma_58",na="_suggestionPill_263ma_65",ra="_statusMsg_263ma_81",sa="_error_263ma_87",aa="_textOnly_263ma_91",oa="_spinner_263ma_96",ia="_spin_263ma_96",la="_grid_263ma_110",ca="_skeletonCard_263ma_116",da="_skeletonThumb_263ma_121",ua="_skeletonLine_263ma_127",ma="_shimmer_263ma_134",ha="_backBtn_263ma_154",pa="_meta_263ma_172",ga="_headerActions_263ma_180",fa="_watchlistBtn_263ma_187",ba="_active_263ma_205",va="_year_263ma_215",ya="_rating_263ma_220",Sa="_typeBadge_263ma_229",_a="_tv_263ma_237",Ca="_movie_263ma_242",ka="_tvSeries_263ma_247",Ta="_tvMiniSeries_263ma_252",xa="_overview_263ma_257",Ea="_controls_263ma_264",Na="_controlLabel_263ma_272",wa="_select_263ma_282",Ia="_playerSection_263ma_293",Ma="_video_263ma_297",Ba="_videoHidden_263ma_319",Aa="_delayCanvas_263ma_324",La="_delayCanvasActive_263ma_337",Pa="_subtitleOverlay_263ma_341",$a="_videoIframe_263ma_360",Ra="_retryButton_263ma_368",Da="_sidebarSeason_263ma_383",Oa="_mobileSeasonRow_263ma_399",Va="_sidebarPosterCard_263ma_413",Fa="_sidebarPosterMeta_263ma_428",za="_providerSelectWrap_263ma_445",Wa="_genreRow_263ma_457",Ua="_genreChip_263ma_464",Ha="_metaRow_263ma_474",ja="_detailGrid_263ma_483",qa="_detailItem_263ma_490",Ka="_imdbLink_263ma_512",m={page:Gs,header:Js,pageTitle:Qs,searchForm:Xs,searchInput:Zs,searchBtn:ea,suggestions:ta,suggestionPill:na,statusMsg:ra,error:sa,textOnly:aa,spinner:oa,spin:ia,grid:la,skeletonCard:ca,skeletonThumb:da,skeletonLine:ua,shimmer:ma,backBtn:ha,meta:pa,headerActions:ga,watchlistBtn:fa,active:ba,year:va,rating:ya,typeBadge:Sa,tv:_a,movie:Ca,tvSeries:ka,tvMiniSeries:Ta,overview:xa,controls:Ea,controlLabel:Na,select:wa,playerSection:Ia,video:Ma,videoHidden:Ba,delayCanvas:Aa,delayCanvasActive:La,subtitleOverlay:Pa,videoIframe:$a,retryButton:Ra,sidebarSeason:Da,mobileSeasonRow:Oa,sidebarPosterCard:Va,sidebarPosterMeta:Fa,providerSelectWrap:za,genreRow:Wa,genreChip:Ua,metaRow:Ha,detailGrid:ja,detailItem:qa,imdbLink:Ka},Ya=[],lo=()=>{const{id:h}=Er(),[k]=Nr(),F=wr(),$=k.get("type"),[r,j]=b(null),[q,B]=b(!1),[i,re]=b(()=>parseInt(k.get("s")||"1",10)||1),[se,U]=b([]),[f,ue]=b(()=>parseInt(k.get("e")||"1",10)||1),[K,St]=b(()=>{try{return localStorage.getItem("tvProvider")||""}catch{return""}}),[me,Ve]=b([]),{options:_t,isFallback:sn,isLoading:Mt}=ns(),Bt=Ee(()=>_t.filter(e=>(e.kind??"tv")==="tv").map(e=>({id:e.value,label:e.label,tier:e.tier==="embed"?"embed":"direct",servers:e.servers})),[_t]),ae=sn||Bt.length===0?Ya:Bt,Ct=ae.filter(e=>e.tier==="direct"),At=ae.filter(e=>e.tier==="embed"),[x,we]=b(!1),[E,N]=b(""),[Ie,Me]=b([]),[Ce,Fe]=b(0),[he,ze]=b([]),[X,C]=b(-1),[J,Lt]=b("all"),[We,at]=b(0),[pe,an]=b(""),[kt,Ue]=b(""),[oe,Pt]=b(()=>{try{return localStorage.getItem("movyServer")||""}catch{return""}}),$t=I([]);v(()=>{$t.current=me},[me]);const Rt=I(Ce);v(()=>{Rt.current=Ce},[Ce]);const Be=I(X);v(()=>{Be.current=X},[X]);const y=Rr({skipIntervals:[]}),u=y.refs.videoRef;Dr(y,me.length>0||kt!=="");const ie=I(null),te=I([]),Dt=I(null),Ot=I(null),[He,Vt]=b(()=>{try{const e=Number(localStorage.getItem("playerVideoDelayMs"));if(Number.isFinite(e)&&e>=0&&e<=500)return Math.round(e)}catch{}return 180}),[je,ot]=b(()=>{try{return localStorage.getItem("playerVideoDelayEnabled")==="true"}catch{return!1}}),[on,it]=b(!1),[ve,qe]=b(!1),lt=I(null),ge=I(null),Ft=(e,n)=>{try{localStorage.setItem("playerVideoDelayMs",String(e)),localStorage.setItem("playerVideoDelayEnabled",String(n))}catch{}},zt=e=>{const n=Math.max(0,Math.min(500,Math.round(e)));Vt(n);try{localStorage.setItem("playerVideoDelayMs",String(n))}catch{}},[o,c]=b(()=>{try{const e=Number(localStorage.getItem("tvSubtitleDelayMs"));if(Number.isFinite(e)&&e>=-1e4&&e<=1e4)return Math.round(e)}catch{}return 0}),Ae=I(o);Ae.current=o;const Z=T(e=>{const n=Math.max(-1e4,Math.min(1e4,Math.round(e)));if(Ae.current!==n){Ae.current=n,c(n);try{localStorage.setItem("tvSubtitleDelayMs",String(n))}catch{}}},[]),Wt=()=>{lt.current={enabled:je,ms:He},ot(!0);try{localStorage.setItem("playerVideoDelayEnabled","true")}catch{}it(!0)},Ut=()=>{const e=lt.current;lt.current=null,e&&(Vt(e.ms),ot(e.enabled),Ft(e.ms,e.enabled)),qe(!1),it(!1)},Tt=()=>{lt.current=null,ot(!0),Ft(He,!0),qe(!1),it(!1)},ln=()=>{if(ve){qe(!1);return}const e=u.current;e&&!isNaN(e.currentTime)&&(ge.current=e.currentTime),qe(!0)},ct=je?He:0;Or({videoRef:u,canvasRef:Dt,delayMs:ct,enabled:je});const Ke=je,Q=Ke||o!==0,dt=I(Q);dt.current=Q;const ut=T(()=>{if(!dt.current)return;const e=u.current;e&&Array.from(e.textTracks).forEach(n=>{n.mode!=="hidden"&&(n.mode="hidden")})},[u]),{hasConsent:Ye,grant:w}=ts(),z=I("");z.current||(z.current=`tv-${Date.now()}-${Math.random().toString(36).slice(2)}`);const d=$==="movie",Ge=h?rs($||"tv",h):"",Y=Ge,xt=ss(),ye=as(),{toggle:cn,bookmarkedIds:dn,pending:Ht}=os(),{data:jt}=is(r?Ge:void 0),mt=jt?!!jt.inLibrary:Ge?dn.has(Ge):!1,er=T(()=>{!r||!h||cn({tmdbId:Number(h),mediaType:$||"tv",title:r.title,poster:r.poster,year:r.year,adult:r.adult})},[r,h,$,cn]),{data:Je,isFetched:Mn}=ls(Y||void 0,i,f),qt=Ee(()=>se.map(e=>e.episode_number).sort((e,n)=>e-n),[se]),Qe=qt.indexOf(f),un=Qe>0?qt[Qe-1]:null,P=Qe>=0&&Qe<qt.length-1?qt[Qe+1]:null,Kt=Ee(()=>(r?.seasons??[]).map(e=>e.season_number).filter(e=>Number.isFinite(e)).sort((e,n)=>e-n),[r]),fe=Ee(()=>{if(d||P!=null)return null;const e=Kt.indexOf(i);return e>=0&&e<Kt.length-1?Kt[e+1]:(r?.number_of_seasons??0)>i?i+1:null},[d,P,Kt,i,r?.number_of_seasons]),Bn=Je?.currentTime??0,An=Je?.duration??0,mn=Je?.completed===!0||Je?.completed===1||xn(Bn,An),[Le,Ne]=b(!1),ke=I(!1);v(()=>{ke.current=!1,Ne(!1)},[Y,i,f]);const[Pe,Yt]=b(!1),[ht,Ln]=b(0),[Xe,Pn]=b(!1),[pt,Ze]=b(!1),[tr,$n]=b(""),[Gt,nr]=b(!1),[rr,hn]=b(!1),sr=ms(),[gt,ar]=b(Vr),or=T(e=>{ar(e),Fr(e)},[]),le=I(!1),et=I(null),pn=I(0),Rn=I(!1),Dn=I(0),ee=I(null),On=I(""),ir=Qn(Bn,An),Et=!le.current&&!ke.current&&(Pe||Le||pt||mn||ir),ft=I(Et);ft.current=Et;const bt=I(!1);v(()=>{bt.current=Xe},[Xe]);const lr=e=>{const n=Math.floor(e/3600),s=Math.floor(e%3600/60),l=Math.floor(e%60);return n>0?`${n}:${String(s).padStart(2,"0")}:${String(l).padStart(2,"0")}`:`${s}:${String(l).padStart(2,"0")}`},$e=T((e,n)=>{if(!Y||!n||n<30)return;const s=xn(e,n),l=s?n:e;Math.abs(l-pn.current)<10&&!s||(pn.current=l,xt.mutate({mediaId:Y,season:i,episode:f,currentTime:Math.floor(l),duration:Math.floor(n),completed:s,title:r?.title??null,poster:r?.poster??null,backdrop:r?.backdrop??null,year:r?.year??null,overview:r?.overview??null,tmdbId:r?.id??null,mediaType:$||"tv",adult:r?.adult?1:0}))},[Y,i,f,xt,r,$]),Te=T((e,n)=>{qe(!1),it(!1);const s=new URLSearchParams(k);s.set("type",k.get("type")||"tv"),s.set("s",String(e)),s.set("e",String(n)),F(`${window.location.pathname}?${s.toString()}`)},[k,F]),cr=T(()=>{if(ve)return;const e=u.current;!e||e.paused||e.ended||(et.current&&clearTimeout(et.current),et.current=setTimeout(()=>{$e(e.currentTime,e.duration||0)},5e3))},[$e,u,ve]),dr=T(()=>{const e=u.current;if(!e||!r)return;et.current&&clearTimeout(et.current),$e(e.currentTime,e.duration||0),Rn.current=!0;const n=zr({seekInduced:Date.now()-Dn.current<Wr,autoplayEnabled:gt,hasNext:!d&&P!=null,isFinal:d||P==null});n==="advance"&&P!=null?(ue(P),Te(i,P)):n==="prompt-next"?(ke.current=!1,le.current=!0,Ne(!0)):n==="prompt-complete"&&($n(d?r.title:`${r.title} — Season ${i}`),Ze(!0),ke.current=!0,le.current=!0)},[d,r,i,P,gt,$e,Te,u]),ur=T(()=>{Rn.current=!1,y.actions.onPlay()},[y.actions]),mr=T(()=>{y.actions.onPause();const e=u.current;e&&!e.ended&&$e(e.currentTime,e.duration||0)},[y.actions,$e,u]),hr=T(()=>{y.actions.onLoadedMetadata();const e=u.current;if(e){try{const n=parseFloat(localStorage.getItem("playerVolume")||"");isNaN(n)||(e.volume=Math.max(0,Math.min(1,n))),e.muted=localStorage.getItem("playerMuted")==="true"}catch{}if(ee.current!=null&&ee.current>0){try{e.currentTime=ee.current}catch{}ee.current=null}}},[y.actions,u]),vt=T(()=>{const e=u.current;if(e&&ee.current!=null&&ee.current>0){try{e.currentTime=ee.current}catch{}ee.current=null}},[u]),pr=T(()=>{ht>0&&(ee.current=ht);const e=u.current;if(e&&ht>0){try{e.currentTime=ht,ee.current=null}catch{}e.play().catch(()=>{})}Yt(!1),le.current=!0},[ht,u]),Vn=T(()=>{ee.current=null;const e=u.current;e&&(e.currentTime=0,e.play().catch(()=>{})),Yt(!1),le.current=!0},[u]),gr=T(()=>{ke.current=!0,Ne(!1),le.current=!0},[]),fr=T(()=>{ke.current=!0,Ne(!1),le.current=!0,ee.current=null;const e=u.current;if(e){try{e.currentTime=0}catch{}e.play().catch(()=>{})}},[u]),br=T(()=>{P!=null&&(ke.current=!0,Ne(!1),le.current=!0,ue(P),Te(i,P))},[P,i,Te]),Fn=T(()=>{fe!=null&&(ke.current=!0,Ne(!1),Ze(!1),le.current=!0,re(fe),ue(1),Te(fe,1))},[fe,Te]),vr=T(async()=>{if(Y)try{await ye.mutateAsync({id:Y,status:"Completed"}),Ze(!1),Ne(!1),F("/")}catch{}},[Y,ye,F]);v(()=>{le.current=!1,Yt(!1),Ln(0),Pn(!1),bt.current=!1,ee.current=null,On.current=`${Y}:${i}:${f}`,pn.current=0},[Y,i,f]),v(()=>{Mn&&(Pn(!0),bt.current=!0)},[Mn,Y,i,f]),v(()=>{if(!Je||le.current)return;const e=Je,n=e.currentTime??0,s=e.duration??0;Qn(n,s)&&(Ln(n),Yt(!0))},[Je,Y,i,f]),v(()=>{if(!(!Xe||le.current||ke.current)&&!(Pe||pt||Le)&&mn){if(d){Ne(!0);return}if(!(!r||Qe<0||se.length===0)){if(P==null&&fe==null){r&&se.length>0&&($n(`${r.title} — Season ${i}`),Ze(!0),ke.current=!0,le.current=!0);return}Ne(!0)}}},[Xe,mn,Pe,pt,Le,d,P,fe,r,Qe,se.length,Y,i,f]),v(()=>{(Pe||Le)&&u.current&&u.current.pause()},[Pe,Le,u]),v(()=>{const e=u.current;return()=>{et.current&&clearTimeout(et.current),e&&!e.ended&&$e(e.currentTime,e.duration||0)}},[$e,u]);const gn=T(e=>{let n=null,s=!0;try{n=localStorage.getItem("tvLastSubtitle"),s=localStorage.getItem("tvSubtitlesEnabled")!=="false"}catch{}return In(e,{lastKey:n,enabled:s})},[]),fn=T(e=>{if(!(e<0))try{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(e))}catch{}},[]),zn=T(e=>{if(e.length===0)return 0;let n=null;try{n=localStorage.getItem("tvLastAudio")}catch{}if(n){const s=e.findIndex(S=>En(S)===n);if(s>=0)return s;const l=n.indexOf("|||"),p=l>=0?n.slice(0,l):n,R=l>=0?n.slice(l+3):n,g=e.findIndex(S=>S.language===p||S.label===R);if(g>=0)return g}return In(e,{lastKey:null,enabled:!0})},[]),bn=Ee(()=>ae.find(e=>e.id===K),[ae,K]),W=bn?.tier==="embed",ne=Ee(()=>bn?.servers??[],[bn]),{data:Wn}=cs(Y||void 0),Un=Ee(()=>(Wn?.progress??[]).filter(n=>n.season===i&&(n.completed===!0||n.completed===1||xn(n.currentTime,n.duration))).map(n=>String(n.episode)),[Wn,i]),Hn=Ee(()=>se.map(e=>({id:String(e.episode_number),label:`Episode ${e.episode_number}`,sublabel:e.name||void 0,thumbnail:e.still_path?`https://image.tmdb.org/t/p/w185${e.still_path}`:void 0})),[se]),jn=Ee(()=>(r?.genres??[]).map(e=>e.name).slice(0,5),[r]),vn=Ee(()=>[r?.year,r?.status,r?.number_of_seasons?`${r.number_of_seasons} Season${r.number_of_seasons>1?"s":""}`:null,r?.number_of_episodes?`${r.number_of_episodes} Episodes`:null].filter(Boolean),[r]);v(()=>{if(ae.length!==0&&!ae.some(e=>e.id===K)){const e=ae.find(n=>n.tier==="direct")?.id??ae[0].id;St(e);try{localStorage.setItem("tvProvider",e)}catch{}}},[ae,K]),v(()=>{if(ne.length!==0&&!ne.includes(oe)){Pt(ne[0]);try{localStorage.setItem("movyServer",ne[0])}catch{}}},[ne,oe]),v(()=>{if(!h){j(null),Ve([]),N(""),Ue("");return}const e=Number(h),n=$||"tv";B(!0),j(null),Ve([]),N(""),Ue("");const s=parseInt(k.get("s")||"",10),l=parseInt(k.get("e")||"",10);re(isNaN(s)?1:s),ue(isNaN(l)?1:l),at(0),fetch(`/api/tv/details/${n}/${e}`).then(p=>p.json()).then(p=>{j(p),B(!1),p.seasons&&p.seasons.length>0&&isNaN(s)&&re(p.seasons[0].season_number)}).catch(()=>{B(!1)})},[h,$,k]),v(()=>{if(!r||!h)return;if(!(r.seasons!==void 0||r.number_of_seasons!==void 0)){U([]);return}const n=parseInt(k.get("e")||"",10);fetch(`/api/tv/episodes/${h}/${i}`).then(s=>s.json()).then(s=>{if(U(s.episodes||[]),s.episodes?.length>0){const l=!isNaN(n)&&s.episodes.find(p=>p.episode_number===n)?n:s.episodes[0].episode_number;ue(l)}}).catch(()=>{})},[r,h,i,k]),v(()=>{!r||!h||d||fetch(`/api/tv/episodes/${h}/${i}`).then(e=>e.json()).then(e=>{const n=e.episodes||[];U(n),n.length>0&&!n.find(s=>s.episode_number===f)&&ue(n[0].episode_number)}).catch(()=>{})},[i,r,h,d,f]),v(()=>{if(!W||!r||!h)return;fetch(`/api/tv/embed/${K}/${d?"movie":"tv"}/${h}?season=${i}&episode=${f}`).then(n=>n.json()).then(n=>{if(n.url)return Ue(n.url),fetch(`/api/resolve?url=${encodeURIComponent(n.url)}`).then(s=>s.json()).then(s=>{s.finalUrl&&Ue(s.finalUrl)})}).catch(()=>{})},[K,r,h,i,f,d,W]);const Jt=T(async()=>{if(!r||!h||!K||W||r.adult&&!Ye)return;$t.current.length>0?N(""):(we(!0),N(""),Ve([]),at(0),Me([]),ze([]));try{const n=d?"movie":"tv",s=new URLSearchParams({title:r.title||"",year:r.year||"",season:String(i),episode:String(f),totalSeasons:String(r.number_of_seasons||1),imdbId:r.imdb_id||""});ne.length>0&&oe&&s.set("server",oe);const p=await(await fetch(`/api/tv/sources/${K}/${n}/${h}?${s.toString()}`)).json();if(we(!1),!p.valid||!p.sources?.length){N(p.error?`${p.error}`:ne.length>0?`No streams from ${oe}. Try another server.`:"No streams available.");return}Ve(p.sources),Lt("all"),at(0),p.referer&&an(p.referer);const R=p.audioTracks||[];Me(R),Fe(R.length>0?zn(R):0);const g=p.subtitles||[];if(ze(g),g.length>0){const H=gn(g);C(H),fn(H)}else C(-1);fetch(`/api/tv/subtitles/${n}/${h}?season=${i}&episode=${f}`).then(H=>H.json()).then(H=>{const Se=Array.isArray(H.subtitles)?H.subtitles:[];Se.length!==0&&ze(L=>{const M=[...L,...Se.filter(_=>!L.some(D=>D.url===_.url))];if(L.length===0){const _=gn(M);C(_),fn(_)}return M})}).catch(()=>{}),N("")}catch{we(!1),N("Failed to load streams.")}},[r,h,K,i,f,d,W,Ye,ne,oe,gn,fn,zn]),yn=T(e=>{const n=e.toLowerCase();Pt(n);try{localStorage.setItem("movyServer",n)}catch{}N("")},[]),yr=T(e=>{St(e);try{localStorage.setItem("tvProvider",e)}catch{}},[]);v(()=>{K&&r&&!W&&Jt()},[K,r,Jt,W]),v(()=>{if(!u.current||(ie.current&&(ie.current.destroy(),ie.current=null),W))return;let e=!1;if(ve){const g=u.current;return g&&(g.pause(),g.removeAttribute("src"),g.load(),g.src="/av-sync-test.mp4",ft.current||g.play().catch(()=>{})),()=>{e=!0}}const n=J==="all"?me:me.filter(g=>g.type===J),s=n[We]?.url||"";if(!s)return;const l=u.current;if(On.current===`${Y}:${i}:${f}`&&ee.current==null&&!ft.current)try{!l.ended&&l.currentTime>1&&(ee.current=l.currentTime)}catch{}l.pause(),l.removeAttribute("src"),l.load();const p=`/api/tv/stream-proxy?url=${encodeURIComponent(s)}&referer=${encodeURIComponent(pe)}`;n[We]?.type==="hls"?(async()=>{const g=await ds();if(!e)if(g&&g.isSupported()){const S=new g({enableWorker:!0});ie.current=S,S.on(g.Events.ERROR,(L,M)=>{M.fatal&&(N(`Stream failed (${M.details}). Try another source or reload.`),we(!1),S.destroy(),ie.current=null)}),S.loadSource(p),S.attachMedia(l);const H=()=>{let L=!1,M=0;try{L=localStorage.getItem("tvSubtitlesEnabled")==="true";const _=parseInt(localStorage.getItem("tvSelectedSubtitle")||"0",10);!isNaN(_)&&_>=0&&(M=_)}catch{}return{enabled:L,index:M}},Se=()=>{if(typeof S.subtitleTrack!="number")return;if(te.current.length>0){S.subtitleTrack=-1;return}const L=Array.isArray(S.subtitleTracks)?S.subtitleTracks:[];if(L.length===0){S.subtitleTrack=-1;return}const M=H();if(M.enabled){const _=M.index<L.length?M.index:0;S.subtitleTrack=_,C(_),ut()}else S.subtitleTrack=-1};Ys(S,g.Events,{getWant:()=>Rt.current,onResolve:L=>Fe(L)}),S.on(g.Events.MANIFEST_PARSED,()=>{Se(),ge.current!=null&&(l.currentTime=ge.current,ge.current=null),vt(),!ft.current&&bt.current&&l.play().catch(()=>{})}),S.on(g.Events.SUBTITLE_TRACKS_UPDATED,()=>{Se()}),S.on(g.Events.SUBTITLE_TRACK_SWITCH,(L,M)=>{if(te.current.length>0){if(M.id!==-1)try{S.subtitleTrack=-1}catch{}return}const _=Array.isArray(S.subtitleTracks)?S.subtitleTracks:[];if(_.length!==0){if(M.id===-1){const D=H();if(D.enabled){const G=D.index<_.length?D.index:0;S.subtitleTrack=G;return}}C(M.id),ut()}})}else us(l)&&(l.src=p,ge.current!=null&&(l.currentTime=ge.current,ge.current=null),vt(),!ft.current&&bt.current&&l.play().catch(()=>{N("Failed to play stream. Try another source.")}))})():(l.src=p,ge.current!=null&&(l.currentTime=ge.current,ge.current=null),vt(),!ft.current&&bt.current&&l.play().catch(()=>{N("Failed to play stream. Try another source.")}));const R=()=>{const H=l.error?.code===4?"Video source not supported or not found":"Failed to load video stream";N(`${H}. The source may be invalid or expired. Try switching source or reloading.`),we(!1)};return l.addEventListener("error",R),()=>{e=!0,l.removeEventListener("error",R)}},[me,We,J,K,pe,W,u,ve,Y,i,f,vt,ut]),v(()=>{if(!Xe||Pe||Le||pt||Et||W||ve)return;const e=u.current;!e||!e.paused||e.ended||e.readyState<1||(vt(),e.play().catch(()=>{}))},[Xe,Pe,Le,pt,Et,W,ve,vt,u]),v(()=>{const e=ie.current;!e||typeof e.audioTrack!="number"||(e.audioTrack=Ce)},[Ce]),v(()=>{const e=ie.current;!e||typeof e.subtitleTrack!="number"||!Array.isArray(e.subtitleTracks)||e.subtitleTracks.length===0||te.current.length>0||(X>=0?e.subtitleTrack=X:e.subtitleTrack=-1)},[X]),v(()=>{const e=u.current;if(!(!e||W)&&(e.querySelectorAll("track").forEach(n=>n.remove()),te.current=[],he.length!==0&&(he.forEach(n=>{const s=document.createElement("track");s.kind="subtitles",s.label=n.label||n.language||"Unknown",s.srclang=n.language||n.label||"en";const l=`/api/subtitle-proxy?url=${encodeURIComponent(n.url)}&referer=${encodeURIComponent(pe)}`;s.src=l,s.addEventListener("load",()=>{const p=te.current.indexOf(s),R=s.track;if(R&&p>=0){const g=p===Be.current;R.mode=g&&!dt.current?"showing":"hidden"}}),e.appendChild(s),te.current.push(s)}),he.length>0)))try{const n=ie.current;n&&typeof n.subtitleTrack=="number"&&n.subtitleTrack!==-1&&(n.subtitleTrack=-1)}catch{}},[he,pe,W,K,u]),v(()=>{const e=u.current;if(!e||W)return;const n=ie.current;te.current.length>0&&n&&typeof n.subtitleTrack=="number"&&Array.isArray(n.subtitleTracks)&&n.subtitleTracks.length>0&&(n.subtitleTrack=-1);const s=()=>{const R=wn(y.state.subtitleFontSize,e.clientHeight||720),g=Math.max(0,Math.min(100,100-y.state.subtitlePosition)),S=()=>{const _=R*16,D=e.videoHeight||e.clientHeight||720,G=e.videoWidth||e.clientWidth||1280;return{step:_*1.3/D*100,chars:Math.max(20,Math.floor(G/(_*.55)))}},H=(_,D)=>{const G=_;G.snapToLines=!1,G.line=D},Se=_=>{if(!_.cues)return;Array.from(_.cues).forEach(ce=>H(ce,g));const D=Array.from(_.activeCues??[]);if(D.length<=1){D.forEach(ce=>H(ce,g));return}const{step:G,chars:O}=S();let tt=g;for(let ce=D.length-1;ce>=0;ce--){const Re=String(D[ce].text??"").replace(/<[^>]*>/g,"").split(`
3
- `).reduce((Zt,wt)=>Zt+Math.max(1,Math.ceil(wt.length/O)),0);tt=Math.max(0,tt-Re*G),H(D[ce],tt),tt-=G*.4}},L=te.current;if(L.length>0){L.forEach((_,D)=>{const G=_.track;if(!G)return;const O=D===X;G.mode=O&&!Q?"showing":"hidden",O&&!Q&&Se(G)});return}const M=Array.from(e.textTracks);M.length!==0&&M.forEach((_,D)=>{const G=D===X;_.mode=G&&!Q?"showing":"hidden",G&&!Q&&Se(_)})};s();const l=()=>s();e.textTracks.addEventListener("addtrack",l),e.addEventListener("loadedmetadata",s,{once:!0});const p=window.setTimeout(s,600);return()=>{e.textTracks.removeEventListener("addtrack",l),e.removeEventListener("loadedmetadata",s),window.clearTimeout(p)}},[X,he,W,K,u,Q,y.state.subtitleFontSize,y.state.subtitlePosition]),v(()=>{if(!Q)return;const e=u.current,n=Ot.current;if(!e||!n)return;const s=o/1e3,l=ct/1e3,p=new Set;let R=[],g=-1,S=-1,H=-1,Se=-1,L=0,M=0,_=!1;const D=()=>{const V=Be.current;if(V<0)return null;const De=te.current;return De.length>0?De[V]?.track??null:Array.from(e.textTracks)[V]??null},G=(V,De)=>{const de=V.cues;if(!de||de.length===0)return Array.from(V.activeCues??[]);let nt=0,rt=de.length;for(;nt<rt;){const xe=nt+rt>>>1;de[xe].endTime+s<De?nt=xe+1:rt=xe}const It=[];for(let xe=nt;xe<de.length;xe++){const en=de[xe];if(en.startTime+s>De)break;en.endTime+s>=De&&It.push(en)}return It},O=()=>{const V=D(),De=e.currentTime-l,de=V?G(V,De):[],nt=e.clientWidth,rt=e.clientHeight,It=e.videoWidth,xe=e.videoHeight;if(de.length===R.length&&de.every((_n,Cn)=>_n===R[Cn])&&nt===g&&rt===S&&It===H&&xe===Se||(R=de,g=nt,S=rt,H=It,Se=xe,n.textContent="",de.length===0))return;const Gn={fontSize:wn(y.state.subtitleFontSize,rt),position:y.state.subtitlePosition,bgOpacity:y.state.subtitleBgOpacity,bgColor:y.state.subtitleBgColor,textColor:y.state.subtitleTextColor,edge:y.state.subtitleEdge,bold:y.state.subtitleBold},kr=Ur(Gn),Tr=Hr(e,Gn.position);de.forEach((_n,Cn)=>{const Jn=String(_n.text??"");if(!jr(Jn).trim())return;const kn=document.createElement("div"),xr=(de.length-1-Cn)*1.7;kn.style.cssText=`${kr}
4
- bottom: calc(${Tr}px + ${xr}em);`,kn.innerHTML=qr(Jn),n.appendChild(kn)})},tt=()=>{Array.from(e.textTracks).forEach(V=>{p.has(V)||(p.add(V),V.addEventListener("cuechange",O))})},ce=()=>{tt(),O()},Sn=()=>{if(_||M)return;const V=()=>{M=0,!(_||e.paused||e.ended)&&(O(),Sn())};M=window.requestAnimationFrame(V)},Re=e,Zt=()=>{L=0,O(),!_&&Re.requestVideoFrameCallback&&(L=Re.requestVideoFrameCallback(Zt))},wt=()=>{O(),Re.requestVideoFrameCallback?L||(L=Re.requestVideoFrameCallback(Zt)):Sn()};tt(),e.textTracks.addEventListener("addtrack",ce),e.textTracks.addEventListener("removetrack",ce),e.addEventListener("timeupdate",O),e.addEventListener("seeked",O),e.addEventListener("loadedmetadata",O),e.addEventListener("play",wt);const Kn=Array.from(e.querySelectorAll("track"));Kn.forEach(V=>V.addEventListener("load",O));const Yn=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>O());return Yn?.observe(e),O(),wt(),()=>{_=!0,p.forEach(V=>V.removeEventListener("cuechange",O)),e.textTracks.removeEventListener("addtrack",ce),e.textTracks.removeEventListener("removetrack",ce),e.removeEventListener("timeupdate",O),e.removeEventListener("seeked",O),e.removeEventListener("loadedmetadata",O),e.removeEventListener("play",wt),Kn.forEach(V=>V.removeEventListener("load",O)),Yn?.disconnect(),M&&window.cancelAnimationFrame(M),L&&Re.cancelVideoFrameCallback&&Re.cancelVideoFrameCallback(L),n.textContent=""}},[Q,o,X,he,ct,u,y.state.subtitleFontSize,y.state.subtitlePosition,y.state.subtitleBgOpacity,y.state.subtitleBgColor,y.state.subtitleTextColor,y.state.subtitleEdge,y.state.subtitleBold]);const Qt=()=>{j(null),Ve([]),Ue(""),F(-1)},Sr=T(e=>{re(e),ue(1),Te(e,1)},[Te]),Xt=!d&&r?.seasons&&r.seasons.length>1?t("label",{className:m.sidebarSeason,children:[t("span",{children:"Season"}),t("select",{value:i,onChange:e=>Sr(parseInt(e.target.value,10)||1),className:m.select,children:r.seasons.map(e=>t("option",{value:e.season_number,children:["Season ",e.season_number," (",e.episode_count," ep)"]},e.season_number))})]}):null,yt=T(e=>{const n=parseInt(e,10);isNaN(n)||(ue(n),Te(i,n)),hn(!1)},[i,Te]);v(()=>{if(d)return;const e=n=>{n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="n"&&(P!=null?yt(String(P)):Ir.error("No next episode available"))};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[d,P,yt]);const _r=e=>{Fe(e);try{const s=Ie[e];s&&localStorage.setItem("tvLastAudio",En(s))}catch{}const n=ie.current;n&&n.audioTrack!==void 0&&(n.audioTrack=e)},Cr=e=>{C(e);try{if(e===-1)localStorage.setItem("tvSubtitlesEnabled","false");else{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(e));const p=he[e];p&&localStorage.setItem("tvLastSubtitle",En(p))}}catch{}const n=u.current,s=ie.current;if(s&&typeof s.subtitleTrack=="number"&&Array.isArray(s.subtitleTracks)&&s.subtitleTracks.length>0&&(s.subtitleTrack=te.current.length>0||e<0?-1:e),!n)return;const l=te.current;if(l.length>0){l.forEach((p,R)=>{const g=p.track;if(!g)return;const S=R===e;g.mode=S&&!Q?"showing":"hidden"});return}Array.from(n.textTracks).forEach((p,R)=>{const g=R===e;p.mode=g&&!Q?"showing":"hidden"})},Nt=T(()=>{if(!r)return;const e=u.current,n=d?"":`S${String(i).padStart(2,"0")}E${String(f).padStart(2,"0")}`;fetch("/api/discord/tv",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:r.title,episodeLabel:n,isPlaying:e?!e.paused&&!e.ended:!0,thumbnail:r.poster,currentTime:e?e.currentTime:0,duration:e&&e.duration||0,isAdult:r.adult===!0,sessionId:z.current})}).catch(()=>{}),fetch("/api/discord/heartbeat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:z.current})}).catch(()=>{})},[r,d,i,f,u]);v(()=>{if(!r)return;Nt();const e=window.setInterval(()=>{const n=u.current;(!n||!n.paused)&&Nt()},15e3);return()=>window.clearInterval(e)},[Nt,r,u]),v(()=>{if(!r||W||x||E||me.length===0)return;const e=u.current;if(!e)return;const n=()=>Nt();return e.addEventListener("play",n),e.addEventListener("pause",n),e.addEventListener("seeked",n),()=>{e.removeEventListener("play",n),e.removeEventListener("pause",n),e.removeEventListener("seeked",n)}},[r,W,x,E,me,Nt,u]),v(()=>{const e=z.current,n=()=>{const l=JSON.stringify({sessionId:e});navigator.sendBeacon?(navigator.sendBeacon("/api/discord/clear",new Blob([l],{type:"application/json"})),navigator.sendBeacon("/api/discord/heartbeat",new Blob([JSON.stringify({sessionId:e,bye:!0})],{type:"application/json"}))):fetch("/api/discord/clear",{method:"POST",headers:{"Content-Type":"application/json"},body:l,keepalive:!0}).catch(()=>{})},s=()=>n();return window.addEventListener("pagehide",s),window.addEventListener("beforeunload",s),()=>{window.removeEventListener("pagehide",s),window.removeEventListener("beforeunload",s),n()}},[]);const qn=J==="all"?me:me.filter(e=>e.type===J);return v(()=>{if(!r){document.title="TV & Movies - dango";return}document.title=d?`${r.title} - dango`:`${r.title} - Season ${i} Episode ${f} - dango`},[r,d,i,f]),v(()=>{if(!r||d)return;const e=new URLSearchParams(k),n=e.get("s"),s=e.get("e"),l=String(i),p=String(f);n===l&&s===p||(e.set("type",k.get("type")||"tv"),e.set("s",l),e.set("e",p),F(`${window.location.pathname}?${e.toString()}`,{replace:!0}))},[r,d,i,f,k,F]),t("div",{className:st.playerPageLayout,children:[t("aside",{className:st.episodeSidebar,children:r?d?t("div",{className:m.sidebarPosterCard,children:[r.poster&&t("img",{src:`https://image.tmdb.org/t/p/w342${r.poster}`,alt:r.title,loading:"lazy",decoding:"async"}),t("div",{className:m.sidebarPosterMeta,children:[t("strong",{children:r.title}),t("span",{children:r.year})]})]}):t(Kr,{episodes:Hn,currentEpisode:String(f),watchedEpisodes:Un,onEpisodeClick:yt,header:Xt}):d?t("div",{className:m.statusMsg,children:[t(A,{name:"spinner",className:m.spinner})," Loading..."]}):t(Yr,{variant:"sidebar"})}),t("div",{className:st.playerMain,children:[r&&t("div",{className:m.playerSection,onContextMenu:e=>e.preventDefault(),style:r.adult&&!Ye?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:[x&&!W&&t("div",{className:m.statusMsg,children:[t(A,{name:"spinner",className:m.spinner})," Loading stream..."]}),W&&kt?t("iframe",{src:kt,className:m.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!W&&!x&&qn.length>0?t(Oe,{children:[E&&t("div",{className:`${m.statusMsg} ${m.error}`,style:{flexDirection:"column",alignItems:"stretch",gap:8},children:[t("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[t("span",{style:{flex:1},children:E}),t("button",{className:m.retryButton,onClick:Jt,children:"Retry"})]}),ne.length>0&&t("div",{style:{display:"flex",flexWrap:"wrap",gap:6,alignItems:"center",marginTop:4},children:[t("span",{style:{fontSize:"0.8rem",opacity:.9,fontWeight:600},children:"Servers:"}),ne.map(e=>t("button",{onClick:()=>yn(e),className:m.retryButton,style:{padding:"4px 8px",fontSize:"0.75rem",textTransform:"capitalize",background:oe===e?"var(--accent)":void 0,color:oe===e?"white":void 0},children:e},e))]})]}),t(Ks,{player:y,title:r.title,episodeLabel:d?void 0:`S${i} E${f}`,audioTracks:Ie,selectedAudioTrack:Ce,onAudioTrackChange:_r,subtitles:he,selectedSubtitle:X,onSubtitleChange:Cr,streams:qn,qualityIdx:We,onQualityChange:at,onBack:Qt,movyServers:ne,selectedMovyServer:oe,onMovyServerSelect:yn,isMovySource:ne.length>0,videoDelayEnabled:je,onVideoDelayToggle:e=>{ot(e);try{localStorage.setItem("playerVideoDelayEnabled",String(e))}catch{}},videoDelayMs:He,onVideoDelayChange:zt,onCalibrateAvSync:Wt,subtitleDelayMs:o,onSubtitleDelayChange:Z,children:[t("video",{ref:u,autoPlay:Xe&&!Et,playsInline:!0,disablePictureInPicture:!0,className:`${m.video} ${Ke?m.videoHidden:""}`,onTimeUpdate:cr,onEnded:()=>{ve||dr()},onPlay:ur,onPause:mr,onSeeked:()=>{Dn.current=Date.now()},onLoadedMetadata:hr,onVolumeChange:y.actions.onVolumeChange,onContextMenu:e=>e.preventDefault(),onError:()=>{N("Video failed to load. Try another server or reload."),we(!1)}}),t("canvas",{ref:Dt,className:`${m.delayCanvas} ${Ke?m.delayCanvasActive:""}`}),Q&&t("div",{ref:Ot,className:m.subtitleOverlay}),t(Gr,{isOpen:on,ms:He,onChange:zt,onApply:Tt,onClose:Ut,testClipActive:ve,onTestClip:ln})]})]}):E&&!W?t("div",{className:`${m.statusMsg} ${m.error}`,style:{flexDirection:"column",alignItems:"stretch",gap:8},children:[t("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[t("span",{style:{flex:1},children:E}),t("button",{className:m.retryButton,onClick:Jt,children:"Retry"})]}),ne.length>0&&t("div",{style:{display:"flex",flexWrap:"wrap",gap:6,alignItems:"center",marginTop:4},children:[t("span",{style:{fontSize:"0.8rem",opacity:.9,fontWeight:600},children:"Servers:"}),ne.map(e=>t("button",{onClick:()=>yn(e),className:m.retryButton,style:{padding:"4px 8px",fontSize:"0.75rem",textTransform:"capitalize",background:oe===e?"var(--accent)":void 0,color:oe===e?"white":void 0},children:e},e))]})]}):null]}),r&&t(Jr,{showTheater:!1}),Xt&&t("div",{className:m.mobileSeasonRow,children:Xt}),r&&t("div",{className:m.providerSelectWrap,children:t("label",{className:m.controlLabel,children:["Source",t("select",{value:K,onChange:e=>yr(e.target.value),className:m.select,disabled:ae.length===0,children:Mt?t("option",{value:"",children:"Loading…"}):ae.length===0?t("option",{value:"",children:"No providers available"}):t(Oe,{children:[Ct.length>0&&t("optgroup",{label:"Direct HLS",children:Ct.map(e=>t("option",{value:e.id,children:e.label},e.id))}),At.length>0&&t("optgroup",{label:"Embeds",children:At.map(e=>t("option",{value:e.id,children:e.label},e.id))})]})})]})}),r&&t("div",{className:st.playerInfoContainer,children:[t("div",{className:st.playerInfoHeader,children:[t("div",{className:st.playerAnimeCard,children:r.poster&&t("img",{src:`https://image.tmdb.org/t/p/w342${r.poster}`,alt:r.title,loading:"lazy",decoding:"async"})}),t("div",{className:st.videoTitleSection,children:[t("div",{className:be.titleContainer,children:[t("h1",{children:r.title}),t("div",{className:m.meta,children:[t("span",{className:m.year,children:r.year}),r.vote_average!=null&&r.vote_average>0&&t("span",{className:m.rating,children:[t(A,{name:"star",size:12}),Number(r.vote_average).toFixed(1)]}),t("span",{className:`${m.typeBadge} ${m[d?"movie":"tv"]}`,children:d?"Movie":"TV Show"})]}),jn.length>0&&t("div",{className:m.genreRow,children:jn.map(e=>t("span",{className:m.genreChip,children:e},e))}),vn.length>0&&t("div",{className:m.metaRow,children:vn.map((e,n)=>t("span",{children:[e,n<vn.length-1?" · ":""]},`${e}-${n}`))})]}),t("div",{className:be.controls,children:[t("button",{className:`${be.watchlistBtn} ${mt?be.inList:""}`,onClick:er,disabled:Ht,type:"button",children:[mt?t(A,{name:"check",size:14}):t(A,{name:"plus",size:14}),mt?"In Watchlist":"Add to Watchlist"]}),!d&&t(Oe,{children:[t("button",{className:`${be.watchlistBtn}`,onClick:()=>un!=null&&yt(String(un)),disabled:un==null,type:"button",children:[t(A,{name:"chevron-left",size:14}),"Prev EP"]}),t("button",{className:`${be.watchlistBtn}`,onClick:()=>P!=null&&yt(String(P)),disabled:P==null,type:"button",children:["Next EP",t(A,{name:"chevron-right",size:14})]}),!d&&t("button",{className:`${be.watchlistBtn} ${be.modeToggleBtn} ${gt?be.modeToggleActive:""}`,onClick:()=>or(!gt),type:"button","aria-pressed":gt,children:gt?"AUTOPLAY: ON":"AUTOPLAY: OFF"}),sr&&t("button",{className:`${be.watchlistBtn}`,onClick:()=>hn(!0),type:"button",children:[t(A,{name:"list-ul",size:14}),"Episodes"]})]})]})]})]}),t("div",{className:be.descriptionSection,children:[t("h3",{children:"Synopsis"}),t(hs,{text:r.overview,emptyText:"No description available."})]}),t("button",{className:be.detailsToggleBtn,onClick:()=>nr(!Gt),type:"button",children:[Gt?t(A,{name:"chevron-up"}):t(A,{name:"chevron-down"}),Gt?"Hide Details":"Show Details"]}),Gt&&t("div",{className:m.detailGrid,children:[r.first_air_date&&t("div",{className:m.detailItem,children:[t("strong",{children:d?"Release Date":"First Air Date"}),t("span",{children:r.first_air_date})]}),r.last_air_date&&t("div",{className:m.detailItem,children:[t("strong",{children:"Last Air Date"}),t("span",{children:r.last_air_date})]}),r.networks&&r.networks.length>0&&t("div",{className:m.detailItem,children:[t("strong",{children:"Networks"}),t("span",{children:r.networks.map(e=>e.name).join(", ")})]}),r.created_by&&r.created_by.length>0&&t("div",{className:m.detailItem,children:[t("strong",{children:"Created By"}),t("span",{children:r.created_by.map(e=>e.name).join(", ")})]}),r.episode_run_time&&r.episode_run_time.length>0&&t("div",{className:m.detailItem,children:[t("strong",{children:"Episode Runtime"}),t("span",{children:[r.episode_run_time[0]," min"]})]}),r.imdb_id&&t("div",{className:m.detailItem,children:[t("strong",{children:"IMDb"}),t("a",{href:`https://www.imdb.com/title/${r.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:m.imdbLink,children:"View on IMDb"})]})]})]}),!d&&t(Qr,{isOpen:rr,onClose:()=>hn(!1),episodes:Hn,currentEpisode:String(f),watchedEpisodes:Un,onEpisodeClick:yt,header:Xt}),r?.adult&&!Ye&&t(tn,{isOpen:!0,title:"Content Warning",onClose:Qt,children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:"This title contains mature content intended for adult audiences."}),t("p",{children:["By proceeding, you confirm that you are ",t("strong",{children:"18 years of age or older"})," ","(or the age of majority in your jurisdiction) and wish to view this content."]}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[t(_e,{variant:"secondary",onClick:Qt,children:"Go Back"}),t(_e,{onClick:w,children:"I'm 18+, Continue"})]})]})}),t(tn,{isOpen:Pe,onClose:Vn,title:"Resume Watching",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:["You were at ",t("strong",{children:lr(ht)})]}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[t(_e,{variant:"secondary",onClick:Vn,children:"Start from Beginning"}),t(_e,{onClick:pr,children:"Resume"})]})]})}),t(tn,{isOpen:Le,onClose:gr,title:d?"Movie Completed":"Episode Completed",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:d?t(Oe,{children:"You've already watched this movie."}):t(Oe,{children:["You've already watched"," ",t("strong",{children:["Season ",i," Episode ",f]}),". Would you like to continue?"]})}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center",flexWrap:"wrap"},children:[t(_e,{variant:"secondary",onClick:fr,children:"Replay"}),P!=null?t(_e,{onClick:br,children:["Watch EP ",P]}):fe!=null?t(_e,{onClick:Fn,children:["Start Season ",fe]}):null]})]})}),t(tn,{isOpen:pt,onClose:()=>Ze(!1),title:d?"Movie Completed!":fe!=null?"Season Complete!":"Show Completed!",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t(A,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)",marginBottom:"0.5rem"}}),t("p",{style:{fontSize:"1.1rem",fontWeight:600},children:tr}),t("p",{style:{color:"var(--text-secondary)"},children:d?"You finished this movie!":fe!=null?`You finished Season ${i}.`:"Congratulations! You finished all available episodes."}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center",flexWrap:"wrap"},children:[t(_e,{variant:"secondary",onClick:()=>Ze(!1),children:"Close"}),fe!=null?t(_e,{onClick:Fn,children:["Start Season ",fe]}):t(Oe,{children:[t(_e,{onClick:()=>{Ze(!1),Qt()},children:"Back to Details"}),mt&&t(_e,{onClick:vr,disabled:ye.isPending,children:ye.isPending?"Saving...":"Move to Completed"})]})]})]})}),!r&&t("div",{className:m.statusMsg,children:[t(A,{name:"spinner",className:m.spinner})," Loading..."]})]})]})};export{lo as default};
@@ -1 +0,0 @@
1
- ._fullscreenFlat_oxcpx_1,._fullscreenFlat_oxcpx_1 ._video_oxcpx_2,._fullscreenFlat_oxcpx_1 ._delayCanvas_oxcpx_3,._fullscreenFlat_oxcpx_1 ._subtitleOverlay_oxcpx_4{border-radius:0}@media(max-width:900px)and (orientation:landscape){._fullscreenFlat_oxcpx_1{border-radius:0}}@container (max-width: 26rem){._timeDisplay_oxcpx_15{display:none}._bottomControls_oxcpx_19{padding:.75rem}._leftControls_oxcpx_23,._rightControls_oxcpx_24{gap:.2rem}._controlBtn_oxcpx_28{padding:5px;min-width:2.125rem;min-height:2.125rem}}._video_oxcpx_2{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:contain;display:block;background:#000;border:none}._controlsOverlay_oxcpx_47{position:absolute;inset:0;opacity:1;transition:opacity .4s cubic-bezier(.4,0,.2,1);z-index:50;pointer-events:none;display:flex;flex-direction:column;justify-content:space-between;background:radial-gradient(circle,transparent 20%,rgba(0,0,0,.4) 100%)}._controlsOverlay_oxcpx_47>*{pointer-events:auto}._controlsOverlay_oxcpx_47._hidden_oxcpx_67{opacity:0;pointer-events:none;cursor:none}._topControls_oxcpx_73{position:absolute;top:0;left:0;right:0;display:flex;align-items:center;gap:var(--space-6);background:linear-gradient(to bottom,rgba(0,0,0,.85) 0%,rgba(0,0,0,.45) 60%,transparent 100%);padding:var(--space-8) var(--space-10);transition:transform .4s cubic-bezier(.2,.8,.2,1);z-index:10;pointer-events:auto}._backBtn_oxcpx_93{background:transparent;border:none;color:#ffffffd9;font-size:1.6rem;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast);padding:8px;border-radius:50%}._backBtn_oxcpx_93:hover{background:#0f0f1199;color:#fff;transform:scale(1.1)}._videoTitleInfo_oxcpx_113{display:flex;flex-direction:column;gap:.25rem}._animeTitle_oxcpx_119{font-size:1.4rem;font-weight:800;color:#fff;letter-spacing:-.01em;text-shadow:0 2px 4px rgba(0,0,0,.5)}._episodeLabel_oxcpx_127{font-size:.85rem;font-weight:600;color:#ffffffbf;text-shadow:0 2px 4px rgba(0,0,0,.5)}._speedBoostBadge_oxcpx_134{position:absolute;top:1.5rem;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:.7rem;padding:.65rem 1rem;border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);border-radius:var(--radius-md);background:#121216eb;color:#f5f3ff;font-size:.85rem;font-weight:800;letter-spacing:.06em;z-index:11;pointer-events:none}._speedBoostBadge_oxcpx_134 span{line-height:1}._speedBoostBadge_oxcpx_134 svg{display:block;flex-shrink:0}._bottomControls_oxcpx_19{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(to top,rgba(0,0,0,.85) 0%,rgba(0,0,0,.45) 60%,transparent 100%);padding:clamp(1rem,4cqw,2.5rem) clamp(1rem,4cqw,2.5rem) clamp(.75rem,2.5cqw,1.5rem);z-index:10;pointer-events:auto;transition:transform .4s cubic-bezier(.2,.8,.2,1)}._progressBarContainer_oxcpx_180{width:100%;height:20px;display:flex;align-items:center;cursor:pointer;position:relative;touch-action:pan-y}@media(pointer:coarse){._progressBarContainer_oxcpx_180{height:28px}._progressBarContainer_oxcpx_180 ._progressBar_oxcpx_180{height:6px}._progressBarContainer_oxcpx_180 ._thumb_oxcpx_199{opacity:1}}._progressBar_oxcpx_180{width:100%;height:4px;background:#fff3;border-radius:2px;position:relative;transition:height .15s ease}._progressBarContainer_oxcpx_180:hover ._progressBar_oxcpx_180{height:6px}._bufferedBar_oxcpx_217{position:absolute;top:0;left:0;height:100%;background:#ffffff4d;border-radius:2px;pointer-events:none}._watchedBar_oxcpx_227{position:absolute;top:0;left:0;height:100%;background:var(--accent);border-radius:2px;pointer-events:none}._thumb_oxcpx_199{position:absolute;top:50%;width:12px;height:12px;background:#fff;border-radius:50%;transform:translate(-50%,-50%);box-shadow:0 0 4px #0006;pointer-events:none;opacity:0;transition:opacity .15s ease}._progressBarContainer_oxcpx_180:hover ._thumb_oxcpx_199,._progressBarContainer_oxcpx_180._scrubbing_oxcpx_252 ._thumb_oxcpx_199{opacity:1}._timeBubble_oxcpx_256{position:absolute;bottom:24px;background:#000000d9;color:#fff;padding:4px 8px;border-radius:4px;font-size:.8rem;font-weight:500;transform:translate(-50%);pointer-events:none;white-space:nowrap}._bottomControlsRow_oxcpx_270{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-top:8px}._leftControls_oxcpx_23{display:flex;align-items:center;gap:1rem;gap:clamp(.5rem,2.5cqw,1rem);min-width:0}._rightControls_oxcpx_24{display:flex;align-items:center;gap:.75rem;gap:clamp(.5rem,2cqw,.75rem)}._controlBtn_oxcpx_28{background:transparent;border:none;color:#ffffffd9;font-size:1.1rem;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:8px;border-radius:4px;transition:all var(--transition-fast);min-width:2.125rem;min-height:2.125rem;flex:0 0 auto}@media(pointer:coarse){._controlBtn_oxcpx_28{padding:10px;min-width:2.75rem;min-height:2.75rem}}._controlBtn_oxcpx_28:hover{color:#fff;background:#ffffff1a}._controlBtn_oxcpx_28._active_oxcpx_323{color:var(--accent)}._volumeContainer_oxcpx_327{display:flex;align-items:center;position:relative}._volumeSlider_oxcpx_333{width:0;opacity:0;transform:scaleX(0);transform-origin:left;transition:all .3s cubic-bezier(.4,0,.2,1);cursor:pointer;margin-left:8px;-webkit-appearance:none;appearance:none;background:transparent;height:20px}._volumeContainer_oxcpx_327:hover ._volumeSlider_oxcpx_333,._volumeSlider_oxcpx_333:focus{width:80px;opacity:1;transform:scaleX(1)}._volumeSlider_oxcpx_333::-webkit-slider-runnable-track{width:100%;height:4px;background:linear-gradient(to right,var(--accent) 0%,var(--accent) var(--volume-percent, 0%),rgba(255,255,255,.2) var(--volume-percent, 0%),rgba(255,255,255,.2) 100%);border-radius:4px}._volumeSlider_oxcpx_333::-moz-range-track{width:100%;height:4px;background:#fff3;border-radius:4px}._volumeSlider_oxcpx_333::-moz-range-progress{height:4px;background:var(--accent);border-radius:4px}._volumeSlider_oxcpx_333::-webkit-slider-thumb{-webkit-appearance:none;height:12px;width:12px;border-radius:50%;background:#fff;margin-top:-4px;box-shadow:0 0 5px #00000080}._timeDisplay_oxcpx_15{color:#fffc;font-size:.85rem;font-weight:500;font-variant-numeric:tabular-nums;min-width:100px}._settingsPanel_oxcpx_398{position:absolute;bottom:clamp(6rem,15vh,8rem);right:clamp(1rem,3vw,2rem);background:#141418f2;border:1px solid var(--border-secondary);border-radius:var(--radius-md);width:max-content;min-width:12rem;max-width:min(19rem,calc(100vw - 1.5rem));font-size:.85rem;z-index:60;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:0 8px 32px #00000080;display:flex;flex-direction:column;overflow:hidden}._settingsHeader_oxcpx_417{display:flex;align-items:center;padding:.55rem .75rem;border-bottom:1px solid var(--border-secondary);gap:.625rem}._settingsBackBtn_oxcpx_425{background:transparent;border:none;color:#ffffffd9;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:4px;border-radius:4px;transition:all var(--transition-fast)}._settingsBackBtn_oxcpx_425:hover{background:#ffffff1a;color:#fff}._settingsTitle_oxcpx_443{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._settingsContent_oxcpx_454{overflow-y:auto;padding:.375rem;display:flex;flex-direction:column;gap:.125rem;max-height:min(56vh,22rem)}._currentValue_oxcpx_463{color:var(--text-tertiary);font-size:.8rem;font-weight:500}._settingsLabel_oxcpx_469{padding:var(--space-2) var(--space-4);font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary)}._menuItem_oxcpx_478{display:flex;align-items:center;justify-content:space-between;gap:.75rem;width:100%;min-height:2rem;padding:.5rem .75rem;background:transparent;border:none;color:var(--text-primary);font-size:.85rem;cursor:pointer;border-radius:var(--radius-sm);transition:background-color var(--transition-fast);text-align:left;white-space:nowrap}._menuItem_oxcpx_478:hover{background:var(--bg-tertiary)}._menuItem_oxcpx_478._active_oxcpx_323{background:var(--bg-tertiary);color:var(--accent)}._currentValue_oxcpx_463{color:var(--text-secondary);font-size:.85rem}._menuNote_oxcpx_511{padding:.5rem .75rem;font-size:.7rem;line-height:1.5;color:var(--text-tertiary);white-space:normal;overflow-wrap:break-word}._spin_oxcpx_520{animation:_spin_oxcpx_520 1s linear infinite}@keyframes _spin_oxcpx_520{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media(pointer:coarse){._settingsPanel_oxcpx_398{font-size:.9rem;bottom:calc(env(safe-area-inset-bottom,0px) + 7rem);right:max(.75rem,env(safe-area-inset-right,0px))}._menuItem_oxcpx_478{min-height:2.75rem}._settingsContent_oxcpx_454{max-height:52vh}}@media(max-width:480px){._settingsPanel_oxcpx_398{min-width:9rem;max-width:calc(100vw - 2rem);font-size:.75rem;bottom:calc(env(safe-area-inset-bottom,0px) + 6rem)}._settingsHeader_oxcpx_417{padding:.4rem .625rem}._settingsTitle_oxcpx_443{font-size:.64rem}._menuItem_oxcpx_478{min-height:2.25rem;padding:.45rem .625rem;font-size:.75rem;gap:.5rem}._settingsContent_oxcpx_454{max-height:min(40vh,15rem)}}@media(max-height:500px)and (orientation:landscape){._settingsPanel_oxcpx_398{bottom:7.25rem;right:2rem;min-width:10rem;max-width:min(15rem,calc(100vw - 1.5rem));font-size:.8rem}._menuItem_oxcpx_478{min-height:2.5rem;font-size:.8rem}._settingsContent_oxcpx_454{max-height:50vh;overflow-y:auto}}._page_263ma_1{max-width:1200px;margin:0 auto;padding:1.5rem}._header_263ma_7{margin-bottom:1.5rem}._pageTitle_263ma_11{font-size:1.75rem;font-weight:700;margin:0 0 1rem;display:flex;align-items:center;gap:.5rem;color:var(--text-primary)}._searchForm_263ma_21{display:flex;gap:.5rem;max-width:600px}._searchInput_263ma_27{flex:1;padding:.6rem 1rem;border-radius:8px;border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-primary);font-size:.95rem;outline:none}._searchInput_263ma_27:focus{border-color:var(--accent)}._searchBtn_263ma_42{padding:.6rem 1rem;border-radius:8px;border:none;background:var(--accent);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center}._searchBtn_263ma_42:hover{opacity:.9}._suggestions_263ma_58{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1.5rem}._suggestionPill_263ma_65{padding:.4rem .8rem;border-radius:20px;border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-secondary);cursor:pointer;font-size:.85rem;transition:all .15s ease}._suggestionPill_263ma_65:hover{border-color:var(--accent);color:var(--text-primary)}._statusMsg_263ma_81{padding:1rem;text-align:center;color:var(--text-secondary)}._statusMsg_263ma_81._error_263ma_87{color:#f87171}._statusMsg_263ma_81._textOnly_263ma_91{background:none;padding:.5rem}._spinner_263ma_96{animation:_spin_263ma_96 1s linear infinite;margin-right:.5rem}@keyframes _spin_263ma_96{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._grid_263ma_110{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:1rem}._skeletonCard_263ma_116{border-radius:8px;overflow:hidden}._skeletonThumb_263ma_121{aspect-ratio:2 / 3;background:var(--bg-secondary);border-radius:8px}._skeletonLine_263ma_127{height:12px;background:var(--bg-secondary);border-radius:4px;margin-top:.5rem}._shimmer_263ma_134{background:linear-gradient(90deg,var(--bg-secondary) 25%,var(--bg-elevated) 50%,var(--bg-secondary) 75%);background-size:200% 100%;animation:_shimmer_263ma_134 1.5s infinite}@keyframes _shimmer_263ma_134{0%{background-position:200% 0}to{background-position:-200% 0}}._backBtn_263ma_154{display:inline-flex;align-items:center;gap:.4rem;padding:.4rem .8rem;border-radius:6px;border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-primary);cursor:pointer;font-size:.85rem;margin-bottom:1rem}._backBtn_263ma_154:hover{border-color:var(--accent)}._meta_263ma_172{display:flex;align-items:center;gap:.75rem;margin:.5rem 0;flex-wrap:wrap}._headerActions_263ma_180{display:flex;gap:.5rem;margin:.75rem 0 0;flex-wrap:wrap}._watchlistBtn_263ma_187{display:inline-flex;align-items:center;gap:.4rem;padding:.5rem 1rem;border-radius:6px;border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-primary);cursor:pointer;font-size:.85rem;font-weight:600}._watchlistBtn_263ma_187:hover:not(:disabled){border-color:var(--accent)}._watchlistBtn_263ma_187._active_263ma_205{border-color:var(--color-success);color:var(--color-success)}._watchlistBtn_263ma_187:disabled{opacity:.6;cursor:default}._year_263ma_215{color:var(--text-secondary);font-size:.9rem}._rating_263ma_220{display:inline-flex;align-items:center;gap:4px;color:var(--accent-lighter);font-weight:600;font-size:.9rem}._typeBadge_263ma_229{padding:2px 10px;border-radius:4px;font-size:.75rem;font-weight:600;text-transform:uppercase}._typeBadge_263ma_229._tv_263ma_237{background:color-mix(in srgb,var(--accent) 20%,transparent);color:var(--accent)}._typeBadge_263ma_229._movie_263ma_242{background:color-mix(in srgb,var(--accent-lighter) 20%,transparent);color:var(--accent-lighter)}._typeBadge_263ma_229._tvSeries_263ma_247,._typeBadge_263ma_229._tvMiniSeries_263ma_252{background:color-mix(in srgb,var(--accent) 20%,transparent);color:var(--accent)}._overview_263ma_257{color:var(--text-secondary);line-height:1.6;margin:.5rem 0 0;max-width:800px}._controls_263ma_264{display:flex;flex-wrap:wrap;gap:1rem;margin:1rem 0;align-items:flex-end}._controlLabel_263ma_272{display:flex;flex-direction:column;gap:.3rem;font-size:.8rem;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}._select_263ma_282{padding:.5rem .75rem;border-radius:6px;border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-primary);font-size:.9rem;cursor:pointer;min-width:160px}._playerSection_263ma_293{margin:1.5rem 0;border-radius:0;overflow:hidden;overflow:clip;isolation:isolate;background:#000;position:relative}._video_263ma_297{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:contain;display:block;background:#000;border:none;border-radius:inherit}._videoHidden_263ma_319{opacity:0;pointer-events:none}._delayCanvas_263ma_324{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:contain;opacity:0;pointer-events:none;z-index:2;border-radius:inherit}._delayCanvasActive_263ma_337{opacity:1}._subtitleOverlay_263ma_341{position:absolute;top:0;left:0;width:100%;height:100%;z-index:3;pointer-events:none;overflow:hidden;border-radius:inherit}@media(max-width:900px)and (orientation:landscape){._playerSection_263ma_293{margin:0;border-radius:0}}._videoIframe_263ma_360{width:100%;aspect-ratio:16 / 9;min-height:400px;border:none;background:#000}._retryButton_263ma_368{margin-left:8px;padding:4px 10px;border-radius:4px;border:1px solid var(--border-primary);background:var(--bg-elevated);color:var(--text-primary);cursor:pointer;font-size:.8rem}._retryButton_263ma_368:hover{border-color:var(--accent)}._sidebarSeason_263ma_383{display:flex;flex-direction:column;gap:.4rem;font-size:.75rem;font-weight:700;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.1em;margin-bottom:var(--space-4)}._sidebarSeason_263ma_383 ._select_263ma_282{width:100%}._mobileSeasonRow_263ma_399{display:none}@media(max-width:768px){._mobileSeasonRow_263ma_399{display:block}._mobileSeasonRow_263ma_399 ._sidebarSeason_263ma_383{margin-bottom:0}}._sidebarPosterCard_263ma_413{padding:1rem;display:flex;flex-direction:column;gap:.75rem}._sidebarPosterCard_263ma_413 img{width:100%;border-radius:var(--radius-md);aspect-ratio:2 / 3;object-fit:cover;background:#ffffff0f}._sidebarPosterMeta_263ma_428{display:flex;flex-direction:column;gap:.25rem}._sidebarPosterMeta_263ma_428 strong{color:var(--text-primary);font-size:.95rem;line-height:1.3}._sidebarPosterMeta_263ma_428 span{color:var(--text-secondary);font-size:.85rem}._providerSelectWrap_263ma_445{display:flex;align-items:flex-end;gap:1rem;flex-wrap:wrap;min-width:0}._providerSelectWrap_263ma_445 ._backBtn_263ma_154{margin-bottom:0}._genreRow_263ma_457{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.6rem}._genreChip_263ma_464{padding:.2rem .7rem;border-radius:20px;border:1px solid var(--glass-border);background:#ffffff0d;color:var(--text-secondary);font-size:.78rem;font-weight:600}._metaRow_263ma_474{display:flex;flex-wrap:wrap;gap:.35rem;margin-top:.6rem;color:var(--text-secondary);font-size:.9rem}._detailGrid_263ma_483{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.75rem;margin-top:1rem}._detailItem_263ma_490{display:flex;flex-direction:column;gap:.2rem;padding:.75rem 1rem;border-radius:var(--radius-md);border:1px solid var(--glass-border);background:#ffffff08}._detailItem_263ma_490 strong{font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-tertiary)}._detailItem_263ma_490 span{color:var(--text-primary);font-size:.9rem}._imdbLink_263ma_512{color:var(--accent-light);font-size:.9rem;text-decoration:none}._imdbLink_263ma_512:hover{text-decoration:underline}