ani-web 1.5.8

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.

Potentially problematic release.


This version of ani-web might be problematic. Click here for more details.

Files changed (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +174 -0
  3. package/client/dist/assets/AnimeInfo-C7DQp7Oo.js +1 -0
  4. package/client/dist/assets/AnimeInfo-Sb3YiXHJ.css +1 -0
  5. package/client/dist/assets/AnimeInfoPage-DJA7AJQ8.js +2 -0
  6. package/client/dist/assets/Button-Fq9KaUOg.css +1 -0
  7. package/client/dist/assets/Button-o0l9V_NG.js +1 -0
  8. package/client/dist/assets/ErrorMessage-Ddf2zmRx.js +1 -0
  9. package/client/dist/assets/ErrorMessage-FOxXyZC9.css +1 -0
  10. package/client/dist/assets/Home-CKHJA97j.css +1 -0
  11. package/client/dist/assets/Home-Dey0azy1.js +1 -0
  12. package/client/dist/assets/Insights-BSRcCkDs.css +1 -0
  13. package/client/dist/assets/Insights-CogjPOd_.js +1 -0
  14. package/client/dist/assets/MAL-CYArH4yf.js +1 -0
  15. package/client/dist/assets/MAL-DeQNXXPx.css +1 -0
  16. package/client/dist/assets/Player-BWFN9gud.js +9 -0
  17. package/client/dist/assets/Player-CBCYW7uG.css +1 -0
  18. package/client/dist/assets/PlayerSettings-BgStUrrP.css +1 -0
  19. package/client/dist/assets/PlayerSettings-rWZuATQf.js +1 -0
  20. package/client/dist/assets/RemoveConfirmationModal-BBiogSdf.css +1 -0
  21. package/client/dist/assets/RemoveConfirmationModal-CLYqyGOv.js +1 -0
  22. package/client/dist/assets/Search-DZAWgKwq.js +1 -0
  23. package/client/dist/assets/Search-lWsVQ0Ke.css +1 -0
  24. package/client/dist/assets/Settings-Bv9fX-x3.css +1 -0
  25. package/client/dist/assets/Settings-DyisJGeD.js +1 -0
  26. package/client/dist/assets/ToggleSwitch-CLnWnAuY.js +1 -0
  27. package/client/dist/assets/ToggleSwitch-DInRb7iM.css +1 -0
  28. package/client/dist/assets/Watchlist-2dVYksxq.css +1 -0
  29. package/client/dist/assets/Watchlist-CuqJISI3.js +1 -0
  30. package/client/dist/assets/hls.light-DcbkToIY.js +27 -0
  31. package/client/dist/assets/index-BK_Zaqaw.css +1 -0
  32. package/client/dist/assets/index-CHVF4D4L.js +178 -0
  33. package/client/dist/assets/useAnimeInfoData-Cr58brCY.js +1 -0
  34. package/client/dist/assets/useIsMobile-gHo4t6g6.js +1 -0
  35. package/client/dist/assets/vendor-DdbgYKo4.js +3 -0
  36. package/client/dist/favicon.ico +0 -0
  37. package/client/dist/index.html +35 -0
  38. package/client/dist/logo.png +0 -0
  39. package/client/dist/placeholder.svg +4 -0
  40. package/client/dist/robots.txt +3 -0
  41. package/client/package.json +54 -0
  42. package/orchestrator.js +302 -0
  43. package/package.json +69 -0
  44. package/server/dist/config.js +86 -0
  45. package/server/dist/constants.json +1359 -0
  46. package/server/dist/controllers/auth.controller.js +213 -0
  47. package/server/dist/controllers/data.controller.js +126 -0
  48. package/server/dist/controllers/insights.controller.js +125 -0
  49. package/server/dist/controllers/proxy.controller.js +235 -0
  50. package/server/dist/controllers/settings.controller.js +147 -0
  51. package/server/dist/controllers/watchlist.controller.js +499 -0
  52. package/server/dist/db.js +231 -0
  53. package/server/dist/github-sync.js +279 -0
  54. package/server/dist/google.js +274 -0
  55. package/server/dist/logger.js +21 -0
  56. package/server/dist/providers/123anime.provider.js +229 -0
  57. package/server/dist/providers/allanime.provider.js +773 -0
  58. package/server/dist/providers/animepahe.provider.js +313 -0
  59. package/server/dist/providers/animeya.provider.js +799 -0
  60. package/server/dist/providers/provider.interface.js +2 -0
  61. package/server/dist/rclone.js +126 -0
  62. package/server/dist/repositories/insights.repository.js +30 -0
  63. package/server/dist/repositories/notifications.repository.js +22 -0
  64. package/server/dist/repositories/settings.repository.js +13 -0
  65. package/server/dist/repositories/shows-meta.repository.js +39 -0
  66. package/server/dist/repositories/watched-episodes.repository.js +60 -0
  67. package/server/dist/repositories/watchlist.repository.js +49 -0
  68. package/server/dist/routes/auth.routes.js +23 -0
  69. package/server/dist/routes/data.routes.js +43 -0
  70. package/server/dist/routes/insights.routes.js +11 -0
  71. package/server/dist/routes/proxy.routes.js +13 -0
  72. package/server/dist/routes/settings.routes.js +26 -0
  73. package/server/dist/routes/watchlist.routes.js +26 -0
  74. package/server/dist/server.js +179 -0
  75. package/server/dist/sync-config.js +28 -0
  76. package/server/dist/sync.js +383 -0
  77. package/server/dist/utils/db-utils.js +36 -0
  78. package/server/dist/utils/env.utils.js +70 -0
  79. package/server/package.json +54 -0
@@ -0,0 +1,9 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/PlayerSettings-rWZuATQf.js","assets/vendor-DdbgYKo4.js","assets/index-CHVF4D4L.js","assets/index-BK_Zaqaw.css","assets/PlayerSettings-BgStUrrP.css"])))=>i.map(i=>d[i]);
2
+ import{G as qe,v as $e,w as Ae,q as Ve,x as ze,y as je,A as Ue,B as He,C as Ke,D as Qe,_ as Fe,z as be,b as Ge,E as Xe,H as Je,f as Ye,I as Ie,J as Ze,K as et,L as tt}from"./index-CHVF4D4L.js";import{u as t,d as B,g as we,y as L,P as nt,z as rt,T as Me,A as Q,q as R,p as st,b as ot,a as xe,c as De,j as it,f as at,S as Le}from"./vendor-DdbgYKo4.js";import{T as Be}from"./ToggleSwitch-CLnWnAuY.js";import{B as Pe}from"./Button-o0l9V_NG.js";import{u as lt}from"./useIsMobile-gHo4t6g6.js";const ct="_controls_qkwi6_1",dt="_titleContainer_qkwi6_8",ut="_scheduleInfo_qkwi6_14",mt="_status_qkwi6_22",pt="_nextEpisode_qkwi6_34",ht="_watchlistBtn_qkwi6_44",gt="_inList_qkwi6_65",ft="_markWatchedBtn_qkwi6_86",vt="_markWatchedDone_qkwi6_98",yt="_completeSeriesBtn_qkwi6_109",wt="_videoContainer_qkwi6_121",St="_loadingOverlay_qkwi6_133",_t="_loadingDots_qkwi6_146",bt="_dot_qkwi6_151",kt="_bufferingOverlay_qkwi6_180",Et="_bufferingSpinner_qkwi6_189",Ct="_videoIframe_qkwi6_204",Tt="_active_qkwi6_661",Mt="_toggleContainer_qkwi6_668",Nt="_sourceLoader_qkwi6_680",Rt="_spinner_qkwi6_686",Lt="_skipBubble_qkwi6_737",Pt="_skipIcon_qkwi6_741",Bt="_skipText_qkwi6_744",It="_skipIndicatorContainer_qkwi6_763",xt="_leftSkip_qkwi6_763",Dt="_rightSkip_qkwi6_766",$t="_sourceSelectionContainer_qkwi6_771",At="_sourceButtons_qkwi6_842",qt="_sourceButton_qkwi6_842",Ft="_detailsToggleBtn_qkwi6_887",Wt="_detailsGridContainer_qkwi6_911",Ot="_detailItem_qkwi6_923",Vt="_animeStatus_qkwi6_943",zt="_genresList_qkwi6_956",jt="_genreTag_qkwi6_963",Ut="_externalLinksSection_qkwi6_981",Ht="_externalLinksGrid_qkwi6_999",Kt="_websiteLink_qkwi6_1006",Qt="_loadingDetails_qkwi6_1028",Gt="_descriptionSection_qkwi6_1035",Xt="_description_qkwi6_1035",Jt="_fullscreenActive_qkwi6_1142",Yt="_errorOverlay_qkwi6_1209",Zt="_errorSubtext_qkwi6_1233",en="_retryButton_qkwi6_1238",o={controls:ct,titleContainer:dt,scheduleInfo:ut,status:mt,nextEpisode:pt,watchlistBtn:ht,inList:gt,markWatchedBtn:ft,markWatchedDone:vt,completeSeriesBtn:yt,videoContainer:wt,loadingOverlay:St,loadingDots:_t,dot:bt,bufferingOverlay:kt,bufferingSpinner:Et,videoIframe:Ct,active:Tt,toggleContainer:Mt,sourceLoader:Nt,spinner:Rt,skipBubble:Lt,skipIcon:Pt,skipText:Bt,skipIndicatorContainer:It,leftSkip:xt,rightSkip:Dt,sourceSelectionContainer:$t,sourceButtons:At,sourceButton:qt,detailsToggleBtn:Ft,detailsGridContainer:Wt,detailItem:Ot,animeStatus:Vt,genresList:zt,genreTag:jt,externalLinksSection:Ut,externalLinksGrid:Ht,websiteLink:Kt,loadingDetails:Qt,descriptionSection:Gt,description:Xt,fullscreenActive:Jt,errorOverlay:Yt,errorSubtext:Zt,retryButton:en},tn="_playerPageLayout_cjfqj_1",nn="_episodeSidebar_cjfqj_15",rn="_playerMain_cjfqj_31",sn="_videoPlayerWrapper_cjfqj_39",on="_playerInfoHeader_cjfqj_50",an="_playerAnimeCard_cjfqj_56",ln="_playerInfoContainer_cjfqj_68",cn="_videoTitleSection_cjfqj_92",ye={playerPageLayout:tn,episodeSidebar:nn,playerMain:rn,videoPlayerWrapper:sn,playerInfoHeader:on,playerAnimeCard:an,playerInfoContainer:ln,videoTitleSection:cn};function dn({show:r,resumeTime:g,onResume:c,onStartOver:e,onNextEpisode:i,hasNextEpisode:f,isCompleted:W}){return r?W?t("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0, 0, 0, 0.6)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:9999,padding:"1rem",backdropFilter:"blur(3px)"},onClick:e,children:t("div",{style:{backgroundColor:"var(--bg-secondary)",padding:"1.5rem",borderRadius:"var(--radius-lg)",maxWidth:"420px",width:"100%",boxShadow:"var(--shadow-xl)",border:"1px solid var(--border-primary)"},onClick:O=>O.stopPropagation(),children:[t("h3",{style:{margin:"0 0 0.75rem",color:"var(--text-primary)"},children:"Episode Completed!"}),t("p",{style:{color:"var(--text-secondary)",marginBottom:"1.5rem"},children:f?"You finished this episode. Ready for the next one?":"You finished this episode. Want to watch again?"}),t("div",{style:{display:"flex",gap:"0.75rem"},children:[t(Pe,{variant:"secondary",onClick:e,style:{flex:1},children:f?"Replay":"Start Over"}),f&&t(Pe,{onClick:i,style:{flex:1},children:"Next Episode"})]})]})}):t("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0, 0, 0, 0.6)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:9999,padding:"1rem",backdropFilter:"blur(3px)"},onClick:e,children:t("div",{style:{backgroundColor:"var(--bg-secondary)",padding:"1.5rem",borderRadius:"var(--radius-lg)",maxWidth:"420px",width:"100%",boxShadow:"var(--shadow-xl)",border:"1px solid var(--border-primary)"},onClick:O=>O.stopPropagation(),children:[t("h3",{style:{margin:"0 0 0.75rem",color:"var(--text-primary)"},children:"Resume Playback?"}),t("p",{style:{color:"var(--text-secondary)",marginBottom:"1.5rem"},children:["You were watching at ",t("strong",{style:{color:"var(--accent)"},children:g}),". Would you like to continue?"]}),t("div",{style:{display:"flex",gap:"0.75rem"},children:[t(Pe,{variant:"secondary",onClick:e,style:{flex:1},children:"Start Over"}),t(Pe,{onClick:c,style:{flex:1},children:"Resume"})]})]})}):null}const un="_controlsOverlay_1gcow_1",mn="_hidden_1gcow_30",pn="_centerPlayPause_1gcow_36",hn="_playIconOffset_1gcow_66",gn="_bottomControls_1gcow_70",fn="_progressBarContainer_1gcow_90",vn="_progressBar_1gcow_90",yn="_scrubbing_1gcow_110",wn="_watchedBar_1gcow_114",Sn="_bufferedBar_1gcow_115",_n="_thumb_1gcow_135",bn="_timeBubble_1gcow_153",kn="_skipSegment_1gcow_176",En="_op_1gcow_186",Cn="_ed_1gcow_189",Tn="_recap_1gcow_192",Mn="_bottomControlsRow_1gcow_196",Nn="_leftControls_1gcow_204",Rn="_rightControls_1gcow_205",Ln="_controlBtn_1gcow_211",Pn="_active_1gcow_231",Bn="_timeDisplay_1gcow_235",In="_skipControls_1gcow_243",xn="_skipBtn_1gcow_249",Dn="_nextEpisodeBtn_1gcow_267",$n="_volumeContainer_1gcow_290",An="_volumeSlider_1gcow_296",qn="_toggleContainer_1gcow_353",Fn="_toggleLabel_1gcow_359",Wn="_playerPageLayout_1gcow_368",On="_videoPlayerWrapper_1gcow_372",Vn="_playerInfoContainer_1gcow_377",w={controlsOverlay:un,hidden:mn,centerPlayPause:pn,playIconOffset:hn,bottomControls:gn,progressBarContainer:fn,progressBar:vn,scrubbing:yn,watchedBar:wn,bufferedBar:Sn,thumb:_n,timeBubble:bn,skipSegment:kn,op:En,ed:Cn,recap:Tn,bottomControlsRow:Mn,leftControls:Nn,rightControls:Rn,controlBtn:Ln,active:Pn,timeDisplay:Bn,skipControls:In,skipBtn:xn,nextEpisodeBtn:Dn,volumeContainer:$n,volumeSlider:An,toggleContainer:qn,toggleLabel:Fn,playerPageLayout:Wn,videoPlayerWrapper:On,playerInfoContainer:Vn};function zn(r){return qe({attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"},child:[]},{tag:"path",attr:{d:"M11.99 5V1l-5 5 5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6h-2c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z"},child:[]},{tag:"path",attr:{d:"M10.89 16h-.85v-3.26l-1.01.31v-.69l1.77-.63h.09V16zM15.17 14.24c0 .32-.03.6-.1.82s-.17.42-.29.57-.28.26-.45.33-.37.1-.59.1-.41-.03-.59-.1-.33-.18-.46-.33-.23-.34-.3-.57-.11-.5-.11-.82v-.74c0-.32.03-.6.1-.82s.17-.42.29-.57.28-.26.45-.33.37-.1.59-.1.41.03.59.1.33.18.46.33.23.34.3.57.11.5.11.82v.74zm-.85-.86c0-.19-.01-.35-.04-.48s-.07-.23-.12-.31-.11-.14-.19-.17-.16-.05-.25-.05-.18.02-.25.05-.14.09-.19.17-.09.18-.12.31-.04.29-.04.48v.97c0 .19.01.35.04.48s.07.24.12.32.11.14.19.17.16.05.25.05.18-.02.25-.05.14-.09.19-.17.09-.19.11-.32.04-.29.04-.48v-.97z"},child:[]}]})(r)}function jn(r){return qe({attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"},child:[]},{tag:"path",attr:{d:"M18 13c0 3.31-2.69 6-6 6s-6-2.69-6-6 2.69-6 6-6v4l5-5-5-5v4c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8h-2z"},child:[]},{tag:"path",attr:{d:"M10.86 15.94v-4.27h-.09L9 12.3v.69l1.01-.31v3.26zM12.25 13.44v.74c0 1.9 1.31 1.82 1.44 1.82.14 0 1.44.09 1.44-1.82v-.74c0-1.9-1.31-1.82-1.44-1.82-.14 0-1.44-.09-1.44 1.82zm2.04-.12v.97c0 .77-.21 1.03-.59 1.03s-.6-.26-.6-1.03v-.97c0-.75.22-1.01.59-1.01.38-.01.6.26.6 1.01z"},child:[]}]})(r)}const Un=rt(()=>Fe(()=>import("./PlayerSettings-rWZuATQf.js"),__vite__mapDeps([0,1,2,3,4]))),Hn=({player:r,isAutoplayEnabled:g,onAutoplayChange:c,showNextEpisodeButton:e,onNextEpisode:i,videoSources:f,selectedSource:W,selectedLink:O,onSourceChange:k,skipIntervals:P})=>{const{state:a,refs:y,actions:v}=r,[u,m]=B(!1),S=we.useRef(null),$=we.useRef(null);L(()=>{const l=h=>{S.current&&!S.current.contains(h.target)&&$.current&&!$.current.contains(h.target)&&u&&m(!1)};return u&&document.addEventListener("mousedown",l),()=>{document.removeEventListener("mousedown",l)}},[u]);const re=we.useRef(null),j=we.useRef(null),A=we.useRef(null),G=we.useRef(null),se=we.useRef(0);L(()=>{const l=y.videoRef.current;if(!l)return;const h=()=>{if(!a.isScrubbing){const M=l.currentTime;se.current=M;const V=M/a.duration*100||0;re.current&&(re.current.style.width=`${V}%`),j.current&&(j.current.style.left=`${V}%`),G.current&&(G.current.innerText=`${v.formatTime(M)} / ${v.formatTime(a.duration)}`)}},I=()=>{if(l.buffered.length>0){const V=l.buffered.end(l.buffered.length-1)/a.duration*100||0;A.current&&(A.current.style.width=`${V}%`)}};return h(),I(),l.addEventListener("timeupdate",h),l.addEventListener("progress",I),()=>{l.removeEventListener("timeupdate",h),l.removeEventListener("progress",I)}},[y.videoRef,a.isScrubbing,a.duration,v]);const D=l=>{if(!y.videoRef.current)return;const h=parseFloat(l.target.value);y.videoRef.current.volume=h,y.videoRef.current.muted=h===0,localStorage.setItem("playerVolume",h.toString())},p=l=>{if(!y.videoRef.current||!y.progressBarRef.current||isNaN(a.duration)||a.duration===0)return;const h=y.progressBarRef.current.getBoundingClientRect(),I=Math.min(1,Math.max(0,(l.clientX-h.left)/h.width));y.videoRef.current.currentTime=I*a.duration},_=l=>{if(!y.progressBarRef.current||!a.duration)return;const h=y.progressBarRef.current.getBoundingClientRect(),M=Math.min(1,Math.max(0,(l.clientX-h.left)/h.width))*a.duration;v.setHoverTime({time:M,position:l.clientX-h.left})},T=l=>{l.preventDefault(),y.videoRef.current&&(v.setIsScrubbing(!0),v.wasPlayingBeforeScrub.current=!y.videoRef.current.paused,y.videoRef.current.pause())},X=l=>{y.videoRef.current&&(v.setActiveSubtitleTrack(l),Array.from(y.videoRef.current.textTracks).forEach(h=>{h.mode=l!==null&&l!=="off"&&(h.language===l||h.label===l)?"showing":"hidden"}))},q=()=>a.isMuted?t(Ue,{}):a.volume===0?t(He,{}):a.volume<.5?t(Ke,{}):t(Qe,{});return L(()=>{const l=I=>{if(!a.isScrubbing||!y.videoRef.current||!y.progressBarRef.current||!a.duration)return;const M=y.progressBarRef.current.getBoundingClientRect(),Y=Math.min(1,Math.max(0,(I.clientX-M.left)/M.width))*a.duration;y.videoRef.current.currentTime=Y;const pe=Y/a.duration*100||0;re.current&&(re.current.style.width=`${pe}%`),j.current&&(j.current.style.left=`${pe}%`),G.current&&(G.current.innerText=`${v.formatTime(Y)} / ${v.formatTime(a.duration)}`),v.setHoverTime({time:Y,position:I.clientX-M.left})},h=()=>{a.isScrubbing&&(v.setIsScrubbing(!1),v.setHoverTime({time:0,position:null}),v.wasPlayingBeforeScrub.current&&y.videoRef.current?.play())};return document.addEventListener("mousemove",l),document.addEventListener("mouseup",h),()=>{document.removeEventListener("mousemove",l),document.removeEventListener("mouseup",h)}},[a.isScrubbing,a.duration,y.videoRef,y.progressBarRef,v]),t("div",{className:`${w.controlsOverlay} ${!a.showControls&&!u?w.hidden:""} `,onDoubleClick:l=>l.stopPropagation(),onClick:l=>{l.target===l.currentTarget&&v.setShowControls(!0)},children:[t("button",{className:w.centerPlayPause,onClick:l=>{l.stopPropagation(),v.togglePlay()},"aria-label":a.isPlaying?"Pause":"Play",children:a.isPlaying?t($e,{}):t(Ae,{className:w.playIconOffset})}),t("div",{className:w.bottomControls,children:[t("div",{className:`${w.progressBarContainer} ${a.isScrubbing?w.scrubbing:""} `,ref:y.progressBarRef,onClick:p,onMouseMove:_,onMouseLeave:()=>v.setHoverTime({time:0,position:null}),children:[a.hoverTime.position!==null&&t("div",{className:w.timeBubble,style:{left:a.hoverTime.position},children:v.formatTime(a.hoverTime.time)}),t("div",{className:w.progressBar,children:[a.duration>0&&r.state.currentSkipInterval&&t("div",{className:`${w.skipSegment} ${w[r.state.currentSkipInterval.skip_type]} `,style:{left:`${r.state.currentSkipInterval.start_time/a.duration*100}% `,width:`${(r.state.currentSkipInterval.end_time-r.state.currentSkipInterval.start_time)/a.duration*100}% `}}),t("div",{className:w.bufferedBar,ref:A}),t("div",{className:w.watchedBar,ref:re}),t("div",{className:w.thumb,ref:j,onMouseDown:T}),P.map(l=>{const h=l.start_time/a.duration*100,I=(l.end_time-l.start_time)/a.duration*100;return t("div",{className:`${w.skipSegment} ${w[l.skip_type]} `,style:{left:`${h}% `,width:`${I}% `},title:l.skip_type.toUpperCase()},l.skip_id)})]})]}),t("div",{className:w.bottomControlsRow,children:[t("div",{className:w.leftControls,children:[t("button",{className:w.controlBtn,onClick:v.togglePlay,children:a.isPlaying?t($e,{}):t(Ae,{})}),t("div",{className:w.volumeContainer,children:[t("button",{className:w.controlBtn,onClick:v.toggleMute,children:q()}),t("input",{type:"range",min:"0",max:"1",step:"0.05",value:a.isMuted?0:a.volume,onChange:D,className:w.volumeSlider,style:{"--volume-percent":`${(a.isMuted?0:a.volume)*100}% `}})]}),t("span",{className:w.timeDisplay,ref:G,children:[v.formatTime(se.current)," / ",v.formatTime(a.duration)]}),a.currentSkipInterval&&!a.isAutoSkipEnabled&&t("button",{className:w.controlBtn,onClick:()=>{y.videoRef.current&&a.currentSkipInterval&&(y.videoRef.current.currentTime=a.currentSkipInterval.end_time,v.setCurrentSkipInterval(null))},children:["Skip ",a.currentSkipInterval.skip_type==="op"?"Opening":"Ending"]})]}),t("div",{className:w.rightControls,children:[t("div",{className:w.skipControls,children:[e&&t("button",{className:w.nextEpisodeBtn,onClick:i,title:"Play next episode",children:"Next EP"}),t("button",{className:w.skipBtn,onClick:()=>v.seek(-10),title:"Skip back 10s",children:t(zn,{})}),t("button",{className:w.skipBtn,onClick:()=>v.seek(10),title:"Skip forward 10s",children:t(jn,{})})]}),t("div",{className:w.toggleContainer,children:[t("label",{htmlFor:"auto-skip-toggle",className:w.toggleLabel,children:"Auto Skip"}),t(Be,{id:"auto-skip-toggle",isChecked:a.isAutoSkipEnabled,onChange:l=>{const h=l.target.checked;v.setIsAutoSkipEnabled(h),localStorage.setItem("autoSkipEnabled",h.toString())}})]}),t("div",{className:w.toggleContainer,children:[t("label",{htmlFor:"autoplay-toggle",className:w.toggleLabel,children:"Autoplay"}),t(Be,{id:"autoplay-toggle",isChecked:g,onChange:l=>c(l.target.checked)})]}),t("button",{ref:$,className:`${w.controlBtn} ${u?w.active:""} `,onClick:()=>m(!u),"aria-label":"Settings",children:t(Ve,{})}),t("button",{className:w.controlBtn,onClick:v.toggleFullscreen,children:a.isFullscreen?t(ze,{}):t(je,{})})]})]})]}),t(nt,{fallback:null,children:t(Un,{ref:S,isOpen:u,onClose:()=>m(!1),videoSources:f,currentSource:W,currentLink:O,onSourceChange:k,subtitles:a.availableSubtitles,activeSubtitleTrack:a.activeSubtitleTrack,onSubtitleChange:X,subtitleSettings:{fontSize:a.subtitleFontSize,position:a.subtitlePosition},onSubtitleSettingsChange:(l,h)=>{l==="fontSize"?(v.setSubtitleFontSize(h),localStorage.setItem("subtitleFontSize",h.toString())):(v.setSubtitlePosition(h),localStorage.setItem("subtitlePosition",h.toString()))}})})]})},Kn="_episodeListContainer_rntnv_1",Qn="_episodeListHeader_rntnv_8",Gn="_episodeListTitle_rntnv_15",Xn="_rangeSelector_rntnv_30",Jn="_rangeButton_rntnv_36",Yn="_active_rntnv_54",Zn="_episodeList_rntnv_1",er="_episodeItem_rntnv_87",tr="_watched_rntnv_109",me={episodeListContainer:Kn,episodeListHeader:Qn,episodeListTitle:Gn,rangeSelector:Xn,rangeButton:Jn,active:Yn,episodeList:Zn,episodeItem:er,watched:tr},nr=({episodes:r,currentEpisode:g,watchedEpisodes:c,onEpisodeClick:e})=>{const[i,f]=B(0),W=Me(()=>{if(r.length<=100)return[];const k=[];for(let P=0;P<r.length;P+=100){const a=P+1,y=Math.min(P+100,r.length);k.push(`${a}-${y}`)}return k},[r]),O=Me(()=>{if(W.length===0)return r;const k=W[i],[P,a]=k.split("-"),y=parseInt(P,10),v=parseInt(a,10);return r.slice(y-1,v)},[r,W,i]);return t("div",{className:me.episodeListContainer,children:[t("div",{className:me.episodeListHeader,children:[t("h3",{className:me.episodeListTitle,children:"Episodes"}),W.length>0&&t("div",{className:me.rangeSelector,children:W.map((k,P)=>t("button",{className:`${me.rangeButton} ${i===P?me.active:""}`,onClick:()=>f(P),children:k},k))})]}),t("div",{className:me.episodeList,children:O.map(k=>t("div",{className:`${me.episodeItem} ${c.includes(k)?me.watched:""} ${k===g?me.active:""}`,onClick:()=>e(k),children:t("span",{children:["Episode ",k]})},k))})]})},rr="_sourceSelectionContainer_1d353_76",sr="_providerSelectContainer_1d353_90",or="_providerSelect_1d353_90",ir="_sourceButtons_1d353_146",ar="_sourceButton_1d353_146",lr="_active_1d353_171",Te={sourceSelectionContainer:rr,providerSelectContainer:sr,providerSelect:or,sourceButtons:ir,sourceButton:ar,active:lr},cr=({selectedProvider:r,onProviderChange:g})=>t("div",{className:Te.providerSelectContainer,children:[t("h4",{children:"Provider"}),t("select",{className:Te.providerSelect,value:r,onChange:c=>g(c.target.value),children:[t("option",{value:"allanime",children:"AllAnime"}),t("option",{value:"animeya",children:"Animeya"}),t("option",{value:"animepahe",children:"AnimePahe"}),t("option",{value:"123anime",children:"123Anime"})]})]}),dr=({videoSources:r,selectedSource:g,onSourceChange:c})=>{const e=Array.isArray(r)?r:[];return e.length===0?null:t("div",{className:Te.sourceSelectionContainer,children:[t("h4",{children:"Source"}),t("div",{className:Te.sourceButtons,children:e.map(i=>t("button",{className:`${Te.sourceButton} ${g?.sourceName===i.sourceName?Te.active:""} `,onClick:()=>c(i),children:i.sourceName},i.sourceName))})]})},ur=we.memo(dr,(r,g)=>r.selectedSource?.sourceName===g.selectedSource?.sourceName&&r.videoSources===g.videoSources),mr=({skipIntervals:r,showId:g,episodeNumber:c,showMeta:e})=>{const i=Q(null),f=Q(null),W=Q(null),O=Q(null),k=Q(!1),P=Q(null),a=Q(0),[y,v]=B(!1),[u,m]=B(()=>{try{return localStorage.getItem("playerMuted")==="true"}catch{return!1}}),[S,$]=B(()=>{try{const d=parseFloat(localStorage.getItem("playerVolume")||"");return isNaN(d)?1:Math.max(0,Math.min(1,d))}catch{return 1}}),[re,j]=B(!1),[A,G]=B(0),[se,D]=B(!0),[p,_]=B(!1),[T,X]=B({time:0,position:null}),[q,l]=B(localStorage.getItem("autoSkipEnabled")==="true"),[h,I]=B(null),[M,V]=B(!1),[Y,pe]=B(parseFloat(localStorage.getItem("subtitleFontSize")||"1.8")),[Ne,ke]=B(parseInt(localStorage.getItem("subtitlePosition")||"-4")),[N,z]=B([]),[Se,ge]=B(null),[_e,oe]=B(!1),[ee,Ee]=B(!1),fe=Q(!1),de=R(()=>{const d=i.current;return!d||!g||!c||!e?.name?null:{showId:g,episodeNumber:c,currentTime:d.currentTime,duration:d.duration,showName:e.name,showThumbnail:e.thumbnail,nativeName:e.names?.native,englishName:e.names?.english,genres:e.genres?.map(E=>E.name),popularityScore:e.score,type:e.type}},[g,c,e]),F=R((d=!1)=>{if(fe.current)return;const E=de();if(!E)return;const J=i.current,Z=J.currentTime>=J.duration*.8;let he=J.currentTime;d&&Z&&(he=J.duration),!(he===0&&!Z)&&(E.currentTime=he,fetch("/api/update-progress",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(E)}).catch(Oe=>console.error("Failed to update progress:",Oe)))},[de]);L(()=>{const d=i.current;d&&(d.volume=S,d.muted=u)},[i,S,u]),L(()=>{const d=()=>{fe.current||F(!0)};window.addEventListener("beforeunload",d);const E=P,J=O;return()=>{window.removeEventListener("beforeunload",d),fe.current||F(!0),E.current&&clearTimeout(E.current),J.current&&clearTimeout(J.current)}},[F]);const ue=d=>{if(isNaN(d)||d<=0)return"00:00";const E=new Date(d*1e3).toISOString().slice(11,19);return parseInt(E.slice(0,2),10)>0?E:E.slice(3)},te=R(()=>{f.current&&(document.fullscreenElement?document.fullscreenElement&&document.exitFullscreen():f.current.requestFullscreen().catch(d=>{console.error(`Error attempting to enable full-screen mode: ${d.message} (${d.name})`)}))},[]),U=R(()=>{i.current&&(i.current.paused?i.current.play().catch(()=>console.warn("Autoplay was prevented.")):(i.current.pause(),D(!0)))},[D]),ie=R(d=>{i.current&&(i.current.currentTime+=d,P.current&&clearTimeout(P.current),P.current=setTimeout(()=>{F()},1500),D(!0))},[F,D]),n=R(()=>{if(!i.current)return;const d=!i.current.muted;i.current.muted=d,m(d),localStorage.setItem("playerMuted",String(d)),!d&&i.current.volume===0&&(i.current.volume=.5,$(.5),localStorage.setItem("playerVolume",String(.5))),D(!0)},[D]);L(()=>{const d=()=>{const E=document.fullscreenElement!==null;j(E),E&&D(!0)};return document.addEventListener("fullscreenchange",d),()=>document.removeEventListener("fullscreenchange",d)},[D]),L(()=>{const d=E=>{const J=E.target;if(!(J.tagName==="INPUT"||J.tagName==="TEXTAREA"))switch(E.key.toLowerCase()){case" ":E.preventDefault(),U();break;case"f":te();break;case"m":n();break;case"arrowright":ie(10);break;case"arrowleft":ie(-10);break;case"arrowup":if(E.preventDefault(),i.current){const Z=Math.min(1,i.current.volume+.1);i.current.volume=Z,$(Z)}break;case"arrowdown":if(E.preventDefault(),i.current){const Z=Math.max(0,i.current.volume-.1);i.current.volume=Z,$(Z)}break}};return document.addEventListener("keydown",d),()=>document.removeEventListener("keydown",d)},[U,te,n,ie]);const s=R(()=>{v(!0),Ee(!1)},[]),C=R(()=>{Ee(!1)},[]),b=R(()=>{Ee(!0)},[]),H=R(()=>{v(!1),D(!0)},[D]),ae=R(()=>G(i.current?.duration||0),[]),ve=R(()=>{if(i.current){const d=i.current.muted,E=i.current.volume;m(d),$(E),localStorage.setItem("playerMuted",String(d)),localStorage.setItem("playerVolume",String(E))}},[]),x=R(()=>{},[]),K=R(()=>{const d=i.current;if(!d)return;const E=d.currentTime||0,J=Date.now();J-a.current>3e4&&(a.current=J,F());const Z=r.find(he=>E>=he.start_time&&E<he.end_time)||null;I(he=>he?.skip_id!==Z?.skip_id?Z:he),q&&Z&&!d.paused&&(d.currentTime=Z.end_time,I(null))},[r,q,F]),ne=R(()=>{const d=de();d&&(d.currentTime=d.duration,fetch("/api/update-progress",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)}).catch(E=>console.error("Failed to send final progress:",E)))},[de]),le=R(()=>{fe.current=!0,ne()},[ne]);L(()=>{const d=()=>{p&&(_(!1),X({time:0,position:null}),k.current&&i.current?.play(),F())};return p&&document.addEventListener("mouseup",d),()=>{document.removeEventListener("mouseup",d)}},[p,F]);const Re=Me(()=>({togglePlay:U,seek:ie,toggleMute:n,toggleFullscreen:te,onPlay:s,onPause:H,onLoadedMetadata:ae,formatTime:ue,onVolumeChange:ve,onProgress:x,onTimeUpdate:K,onEnded:le,setShowControls:D,setIsScrubbing:_,setHoverTime:X,setIsAutoSkipEnabled:l,setCurrentSkipInterval:I,setShowCCMenu:V,setSubtitleFontSize:pe,setSubtitlePosition:ke,setAvailableSubtitles:z,setActiveSubtitleTrack:ge,setShowSourceMenu:oe,wasPlayingBeforeScrub:k,inactivityTimer:O,setIsFullscreen:j,onWaiting:b,onPlaying:C,sendProgressUpdate:F}),[U,ie,n,te,s,H,ae,ve,x,K,le,j,b,C,F]);return{refs:{videoRef:i,playerContainerRef:f,progressBarRef:W},state:{isPlaying:y,isMuted:u,volume:S,isFullscreen:re,duration:A,showControls:se,isScrubbing:p,hoverTime:T,isAutoSkipEnabled:q,currentSkipInterval:h,showCCMenu:M,subtitleFontSize:Y,subtitlePosition:Ne,availableSubtitles:N,activeSubtitleTrack:Se,showSourceMenu:_e,isBuffering:ee},actions:Re}},pr=()=>localStorage.getItem("preferredMode")==="dub"?"dub":"sub",hr=()=>{const r=localStorage.getItem("preferredProvider");return r==="animepahe"||r==="123anime"||r==="animeya"?r:"allanime"},We=()=>({showMeta:{},episodes:[],watchedEpisodes:[],watchlistStatus:null,currentEpisode:void 0,allMangaDetails:null,showCombinedDetails:!1,currentMode:pr(),inWatchlist:!1,videoSources:[],selectedSource:null,selectedLink:null,forceNativePlayer:localStorage.getItem("forceNativePlayer")==="true",isAutoplayEnabled:localStorage.getItem("autoplayEnabled")==="true",showResumeModal:!0,resumeTime:0,resumeDuration:0,skipIntervals:[],selectedProvider:hr(),loadingShowData:!0,loadingVideo:!1,loadingDetails:!1,error:null,detailsError:null});We();function gr(r,g){switch(g.type){case"SET_STATE":return{...r,...g.payload};case"SET_CURRENT_EPISODE":return{...r,currentEpisode:g.payload};case"SET_MODE":return{...r,currentMode:g.payload,videoSources:[],selectedSource:null,selectedLink:null};case"SET_PROVIDER":return{...r,selectedProvider:g.payload};case"SET_OVERRIDE_SOURCE":return{...r,selectedSource:g.payload?.source??null,selectedLink:g.payload?.link??null};default:return r}}const ce=async r=>{const g=await fetch(r);if(!g.ok)throw new Error(`Failed to fetch ${r}`);return g.json()},fr=(r,g)=>{const[c,e]=st(gr,void 0,We),i=ot();L(()=>{g&&g!==c.currentEpisode&&(e({type:"SET_CURRENT_EPISODE",payload:g}),e({type:"SET_STATE",payload:{selectedSource:null,selectedLink:null,showResumeModal:!0}}))},[g,c.currentEpisode]);const{data:f,isLoading:W,error:O}=xe({queryKey:["show-data",r,c.currentMode],queryFn:async()=>{if(!r)throw new Error("No showId");const[p,_,T,X]=await Promise.all([ce(`/api/show-meta/${r}`),ce(`/api/episodes?showId=${r}&mode=${c.currentMode}`).catch(()=>null),ce(`/api/watchlist/check/${r}`).catch(()=>({inWatchlist:!1})),ce(`/api/watched-episodes/${r}`).catch(()=>[])]),q=_?.episodes?_.episodes.sort((l,h)=>parseFloat(l)-parseFloat(h)):[];return{showMeta:{...p,description:_?.description||p?.description,names:p?.names||{romaji:p?.name,english:p?.englishName,native:p?.nativeName}},episodes:q,inWatchlist:T.inWatchlist,watchlistStatus:T.status??null,watchedEpisodes:X}},enabled:!!r});L(()=>{!g&&f?.episodes&&f.episodes.length>0&&!c.currentEpisode&&e({type:"SET_CURRENT_EPISODE",payload:f.episodes[0]})},[f,g,c.currentEpisode]);const{data:k,isLoading:P,error:a}=xe({queryKey:["video-sources",r,c.currentEpisode,c.selectedProvider,c.currentMode,f?.showMeta?.name],queryFn:async()=>{if(!r||!c.currentEpisode)throw new Error("Missing params");let p=r;if(["animepahe","123anime","animeya"].includes(c.selectedProvider)){const N=f?.showMeta?.names,z=oe=>{for(let ee=0;ee<oe.length;ee++)if(oe.charCodeAt(ee)>127)return!1;return!0},Se=N?.romaji&&z(N.romaji)?N.romaji:null,ge=N?.english||f?.showMeta?.englishName||f?.showMeta?.name,_e=c.currentMode==="dub"?ge||Se:Se||ge;if(_e){const oe=await ce(`/api/search?query=${encodeURIComponent(_e)}&provider=${c.selectedProvider}`);if(oe&&oe.length>0){const ee=_e.toLowerCase().trim(),fe=(ue=>ue.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,""))(ee);let de=oe[0],F=-1/0;for(const ue of oe){const te=(ue.name||ue.title||"").toLowerCase().trim(),U=(ue.id||"").toLowerCase(),ie=te.includes("(dub)")||te.endsWith(" dub")||U.endsWith("-dub"),n=c.currentMode==="dub";let s=0;te===ee?s+=4:te.startsWith(ee)?s+=2:te.includes(ee)?s+=1:U.startsWith(fe)&&(s+=0),ie!==n&&(s-=10),s>F&&(F=s,de=ue)}p=de.session||de.id}}}const[_,T,X,q]=await Promise.all([ce(`/api/video?showId=${p}&episodeNumber=${c.currentEpisode}&mode=${c.currentMode}&provider=${c.selectedProvider}`),ce(`/api/episode-progress/${r}/${c.currentEpisode}`).catch(()=>null),ce("/api/settings?key=preferredSource").catch(()=>null),ce(`/api/skip-times/${r}/${c.currentEpisode}`).catch(()=>[])]),l=X?.value,h=_.filter(N=>{const z=N.sourceName.toLowerCase();return c.currentMode==="dub"?z.includes("eng")||z.includes("dub"):z.includes("jpn")||z.includes("sub")||!z.includes("eng")&&!z.includes("dub")}),I=h.length>0?h:_;let M=I.length>0?I[0]:null;if(l){const N=I.find(z=>z.sourceName===l);N&&(M=N)}const V=M&&M.links.length>0?M.links.sort((N,z)=>(parseInt(z.resolutionStr)||0)-(parseInt(N.resolutionStr)||0))[0]:null,Y=T?.currentTime||0,pe=T?.duration||0,ke=(Array.isArray(q)?q:q.results||[]).map(N=>({skip_id:N.skip_id||"",skip_type:N.skip_type||"",start_time:N.interval?.start_time??N.start_time??0,end_time:N.interval?.end_time??N.end_time??0})).filter(N=>N.end_time>0);return _.length===0&&be.error(`No video sources found for ${c.selectedProvider}`),{videoSources:_,selectedSource:M,selectedLink:V,resumeTime:Y,resumeDuration:pe,showResumeModal:Y>5&&M?.type!=="iframe",skipIntervals:ke,fetchedEpisodeNumber:c.currentEpisode}},enabled:!!r&&!!c.currentEpisode&&!!f?.showMeta?.name}),{data:y,isLoading:v}=xe({queryKey:["show-details",r],queryFn:()=>ce(`/api/show-details/${r}`),enabled:!!r&&!!f?.showMeta?.name}),{mutateAsync:u}=De({mutationFn:async({wasIn:p,showMeta:_})=>{const T=p?"/api/watchlist/remove":"/api/watchlist/add",X={id:r,name:_.name||_.names?.romaji,thumbnail:_.thumbnail,nativeName:_.names?.native,englishName:_.names?.english,type:_.type};return await fetch(T,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(X)}),!p},onSuccess:p=>{be.success(p?"Added to watchlist":"Removed from watchlist"),i.invalidateQueries({queryKey:["show-data",r]}),i.invalidateQueries({queryKey:["watchlist"]})},onError:()=>be.error("Failed to update watchlist")}),m=R(async()=>{!r||!f?.showMeta||await u({wasIn:!!f.inWatchlist,showMeta:f.showMeta})},[r,f,u]),S=R(async p=>{try{await fetch("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:"preferredSource",value:p})})}catch(_){console.error(_)}},[]),{mutateAsync:$,isPending:re}=De({mutationFn:async({status:p})=>{if(!r)throw new Error("Missing showId");if(!(await fetch("/api/watchlist/status",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:r,status:p})})).ok)throw new Error("Failed to update watchlist status");return p},onSuccess:p=>{e({type:"SET_STATE",payload:{inWatchlist:!0,watchlistStatus:p}}),be.success(`Moved to ${p}`),i.invalidateQueries({queryKey:["show-data",r]}),i.invalidateQueries({queryKey:["watchlist"]}),i.invalidateQueries({queryKey:["continueWatchingFast"]}),i.invalidateQueries({queryKey:["continueWatchingUpNext"]}),i.invalidateQueries({queryKey:["allContinueWatching"]})},onError:()=>be.error("Failed to update watchlist status")}),j=R(async()=>{await $({status:"Completed"})},[$]),{mutateAsync:A}=De({mutationFn:async({episodeNumber:p,duration:_,showMeta:T,episodes:X})=>{await fetch("/api/update-progress",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({showId:r,episodeNumber:p,currentTime:_,duration:_,showName:T.name,showThumbnail:T.thumbnail,nativeName:T.names?.native,englishName:T.names?.english,genres:T.genres?.map(q=>q.name),popularityScore:T.score??T.stats?.averageScore,type:T.type,status:T.status,episodeCount:X.length})})},onSuccess:(p,_)=>{be.success(`Episode ${_.episodeNumber} marked as watched`),i.invalidateQueries({queryKey:["show-data",r]}),i.invalidateQueries({queryKey:["video-sources",r,_.episodeNumber]}),i.invalidateQueries({queryKey:["continueWatchingFast"]}),i.invalidateQueries({queryKey:["continueWatchingUpNext"]})},onError:()=>be.error("Failed to mark episode as watched")}),G=R(async(p,_)=>{!r||!f?.showMeta||await A({episodeNumber:p,duration:_,showMeta:f.showMeta,episodes:f.episodes})},[r,f,A]),se=R(async()=>{if(e({type:"SET_STATE",payload:{showCombinedDetails:!c.showCombinedDetails}}),!(c.showCombinedDetails||c.allMangaDetails))try{const p=await ce(`/api/allmanga-details/${r}`);e({type:"SET_STATE",payload:{allMangaDetails:p}})}catch(p){console.warn(p)}},[r,c.showCombinedDetails,c.allMangaDetails]);return{state:Me(()=>{const p=O||a;return{...c,showMeta:{...f?.showMeta||{},...y||{},name:f?.showMeta?.name},episodes:f?.episodes||[],watchedEpisodes:f?.watchedEpisodes||[],inWatchlist:!!f?.inWatchlist,watchlistStatus:f?.watchlistStatus??c.watchlistStatus??null,videoSources:k?.videoSources||[],selectedSource:c.selectedSource||k?.selectedSource||null,selectedLink:c.selectedLink||k?.selectedLink||null,resumeTime:k?.resumeTime||0,resumeDuration:k?.resumeDuration||0,showResumeModal:c.showResumeModal&&(k?.showResumeModal??!1),skipIntervals:k?.skipIntervals||[],loadingShowData:W,loadingVideo:P,loadingDetails:v,error:p?p.message:null,fetchedEpisodeNumber:k?.fetchedEpisodeNumber}},[c,f,k,y,W,P,v,O,a]),dispatch:e,toggleWatchlist:m,moveToCompleted:j,setPreferredSource:S,handleToggleDetails:se,markEpisodeWatched:G,isMarkingWatched:A.isPending,isUpdatingWatchlistStatus:re}},Ce=r=>!r||r.startsWith("http://")||r.startsWith("https://")?r:`https://${r}`,br=()=>{const{id:r,episodeNumber:g}=it(),c=at(),{state:e,dispatch:i,toggleWatchlist:f,moveToCompleted:W,setPreferredSource:O,handleToggleDetails:k,markEpisodeWatched:P,isMarkingWatched:a,isUpdatingWatchlistStatus:y}=fr(r,g),v=Me(()=>{if(e.showMeta.name)return{name:e.showMeta.name,thumbnail:e.showMeta.thumbnail,names:e.showMeta.names,genres:e.showMeta.genres,score:e.showMeta.score}},[e.showMeta.name,e.showMeta.thumbnail,e.showMeta.names,e.showMeta.genres,e.showMeta.score]),u=mr({skipIntervals:e.skipIntervals,showId:r,episodeNumber:e.currentEpisode?.toString(),showMeta:v}),{refs:m,actions:S}=u,$=Q(null),re=lt(),j=Q(null),A=Q(0),G=Q(e.resumeTime),se=Q(e.showResumeModal);L(()=>{G.current=e.resumeTime,se.current=e.showResumeModal},[e.resumeTime,e.showResumeModal]);const[D,p]=B(null),[_,T]=B(!1),[X,q]=B(!1),l=Q(0),h=Q(null),I=R(n=>{S.setShowControls(!0);const s=m.playerContainerRef.current;if(!s)return;const{clientX:C}=n,{left:b,width:H}=s.getBoundingClientRect(),ae=C-b;l.current+=1,h.current&&clearTimeout(h.current),h.current=setTimeout(()=>{l.current===2&&(ae<H*.3?(S.seek(-15),p({side:"left",visible:!0}),setTimeout(()=>p(null),600)):ae>H*.7?(S.seek(15),p({side:"right",visible:!0}),setTimeout(()=>p(null),600)):S.toggleFullscreen()),l.current=0},300)},[S,m.playerContainerRef]);L(()=>{const n=m.videoRef.current;if(!n)return;for($.current&&$.current.destroy(),(e.loadingVideo||e.selectedSource)&&(n.pause(),n.removeAttribute("src"),n.load());n.firstChild;)n.removeChild(n.firstChild);if(!e.selectedSource||!e.selectedLink)return;if(e.selectedSource.type==="iframe"){A.current=0;return}G.current>5&&!se.current?A.current=G.current:se.current&&(A.current=0);let s=`/api/proxy?url=${encodeURIComponent(e.selectedLink.link)}`;e.selectedLink.headers?.Referer&&(s+=`&referer=${encodeURIComponent(e.selectedLink.headers.Referer)}`),e.selectedSource.subtitles&&(e.selectedSource.subtitles.forEach(x=>{const K=document.createElement("track");K.kind="subtitles",K.label=x.label,K.srclang=x.lang;const ne=x.src??x.url;if(ne){let le=`/api/subtitle-proxy?url=${encodeURIComponent(ne)}`;e.selectedLink?.headers?.Referer&&(le+=`&referer=${encodeURIComponent(e.selectedLink.headers.Referer)}`),K.src=le}(x.lang==="en"||x.label==="English")&&(K.default=!0),n.appendChild(K)}),S.setAvailableSubtitles(e.selectedSource.subtitles));const C=A.current;A.current=0;const b=()=>{C>0&&(n.currentTime=C)};n.addEventListener("loadedmetadata",b,{once:!0}),e.selectedLink.hls?n.canPlayType("application/vnd.apple.mpegurl")||n.canPlayType("application/x-mpegURL")?n.src=s:Fe(()=>import("./hls.light-DcbkToIY.js"),[]).then(K=>{const ne=K.default;if(ne.isSupported()){const le=document.body.classList.contains("low-end"),Re=new ne({maxBufferLength:le?15:30,maxMaxBufferLength:le?30:60,maxBufferSize:le?25*1e3*1e3:60*1e3*1e3,startLevel:-1,enableWorker:!0});$.current=Re,Re.loadSource(s),Re.attachMedia(n)}else n.src=s}):n.src=s;const H=localStorage.getItem("playerVolume"),ae=localStorage.getItem("playerMuted");return H!==null&&(n.volume=parseFloat(H)),ae!==null&&(n.muted=ae==="true"),!(se.current&&G.current>5)&&n.play().catch(x=>{console.warn("Autoplay was prevented:",x),S.setShowControls(!0)}),()=>{n.removeEventListener("loadedmetadata",b),$.current&&$.current.destroy()}},[e.selectedSource,e.selectedLink,m.videoRef,S,e.loadingVideo]),L(()=>{if(e.loadingVideo)return;const n=e.selectedSource?.actualEpisodeNumber,s=e.fetchedEpisodeNumber;n&&g&&s===g&&n!==g&&(console.log(`[Sync] Redirecting from episode ${g} to ${n}`),c(`/watch/${r}/${n}`,{replace:!0}),i({type:"SET_CURRENT_EPISODE",payload:n}))},[e.selectedSource?.actualEpisodeNumber,e.fetchedEpisodeNumber,g,r,c,i,e.loadingVideo]),L(()=>{const n=m.videoRef.current;if(!n)return;const s=()=>{if(S.onEnded(),e.isAutoplayEnabled){const C=e.episodes.findIndex(b=>b===e.currentEpisode);if(C>-1&&C<e.episodes.length-1){const b=e.episodes[C+1];c(`/watch/${r}/${b}`)}}};return n.addEventListener("ended",s),()=>{n&&n.removeEventListener("ended",s)}},[e.isAutoplayEnabled,e.episodes,e.currentEpisode,r,c,m.videoRef,S,u.state.isFullscreen]),L(()=>{e.showResumeModal&&u.state.isFullscreen&&u.actions.toggleFullscreen()},[e.showResumeModal,u.state.isFullscreen,u.actions]),L(()=>{e.showResumeModal&&m.videoRef.current&&m.videoRef.current.pause()},[e.showResumeModal,m.videoRef]);const{titlePreference:M}=Ge(),V=Me(()=>{if(!e.showMeta||e.loadingShowData)return"Loading...";const{name:n,names:s}=e.showMeta;return M==="name"&&n?n:M==="nativeName"&&s?.native?s.native:M==="englishName"&&s?.english?s.english:n||"Loading..."},[e.showMeta,M,e.loadingShowData]);L(()=>{V&&V!=="Loading..."&&e.currentEpisode&&(document.title=`► ${V} #${e.currentEpisode} - ani-web`)},[V,e.currentEpisode]);const Y=R(()=>{const n=m.playerContainerRef.current;n&&j.current===null&&(j.current=requestAnimationFrame(()=>{S.setShowControls(!0),n.style.cursor="default",u.actions.inactivityTimer.current&&clearTimeout(u.actions.inactivityTimer.current),u.state.isPlaying&&(u.actions.inactivityTimer.current=window.setTimeout(()=>{S.setShowControls(!1),u.state.isFullscreen&&(n.style.cursor="none")},1e3)),j.current=null}))},[u.state.isPlaying,u.state.isFullscreen,S,u.actions,m.playerContainerRef]);L(()=>{const n=m.playerContainerRef.current;if(n)return n.addEventListener("mousemove",Y),()=>n.removeEventListener("mousemove",Y)},[Y,m.playerContainerRef]),L(()=>{const n=s=>{["arrowup","arrowdown","arrowleft","arrowright"].includes(s.key.toLowerCase())&&(S.setShowControls(!0),u.actions.inactivityTimer.current&&clearTimeout(u.actions.inactivityTimer.current),u.actions.inactivityTimer.current=window.setTimeout(()=>{S.setShowControls(!1)},1e3))};return document.addEventListener("keydown",n),()=>{document.removeEventListener("keydown",n)}},[S,u.actions.inactivityTimer]);const{setIsFullscreen:pe,setAvailableSubtitles:Ne,setActiveSubtitleTrack:ke}=S;L(()=>{const n=()=>pe(!!document.fullscreenElement);return document.addEventListener("fullscreenchange",n),()=>document.removeEventListener("fullscreenchange",n)},[pe]),L(()=>{const n=m.videoRef.current;if(!n)return;const s=()=>{const C=Array.from(n.textTracks).map(b=>({label:b.label,lang:b.language,src:void 0,mode:b.mode}));Ne(C)};return n.textTracks.addEventListener("addtrack",s),n.textTracks.addEventListener("removetrack",s),s(),()=>{n&&(n.textTracks.removeEventListener("addtrack",s),n.textTracks.removeEventListener("removetrack",s))}},[m.videoRef,Ne]),L(()=>{if(u.state.activeSubtitleTrack===null&&u.state.availableSubtitles.length>0){const s=u.state.availableSubtitles.find(b=>b.lang==="en"||b.label==="English")||u.state.availableSubtitles[0];ke(s.lang||s.label);const C=m.videoRef.current;C&&Array.from(C.textTracks).forEach(b=>{b.mode=b.language===s.lang||b.label===s.label?"showing":"hidden"})}},[u.state.activeSubtitleTrack,u.state.availableSubtitles,ke,m.videoRef]),L(()=>{const n="dynamic-subtitle-styles";let s=document.getElementById(n);s||(s=document.createElement("style"),s.id=n,document.head.appendChild(s));const C=`${u.state.subtitleFontSize}rem`;s.textContent=`
3
+ video::cue {
4
+ font-size: ${C} !important;
5
+ background-color: rgba(0, 0, 0, 0.5) !important;
6
+ color: white !important;
7
+ text-shadow: 0 0 4px black;
8
+ }
9
+ `;const b=m.videoRef.current;if(!b)return;const H=()=>{const x=Array.from(b.textTracks).find(K=>K.mode==="showing");x&&x.cues&&Array.from(x.cues).forEach(K=>{try{const ne=K;ne.snapToLines=!1;const le=Math.max(0,Math.min(100,100-u.state.subtitlePosition));ne.line=le}catch{}})};H();const ae=()=>{H()},ve=Array.from(b.textTracks).find(x=>x.mode==="showing");return ve&&ve.addEventListener("cuechange",ae),()=>{ve&&ve.removeEventListener("cuechange",ae);const x=document.getElementById(n);x&&x.remove()}},[u.state.subtitleFontSize,u.state.subtitlePosition,u.state.activeSubtitleTrack,m.videoRef]);const N=()=>{m.videoRef.current&&(m.videoRef.current.currentTime=e.resumeTime,m.videoRef.current.play()),i({type:"SET_STATE",payload:{showResumeModal:!1}})},z=()=>{m.videoRef.current&&(m.videoRef.current.currentTime=0,m.videoRef.current.play()),i({type:"SET_STATE",payload:{showResumeModal:!1}})},Se=()=>{const n=e.episodes.findIndex(s=>s===e.currentEpisode);if(n>-1&&n<e.episodes.length-1){const s=e.episodes[n+1];c(`/watch/${r}/${s}`)}i({type:"SET_STATE",payload:{showResumeModal:!1}})},ge=(()=>{const n=e.episodes.findIndex(s=>s===e.currentEpisode);return n>-1&&n<e.episodes.length-1})(),_e=e.episodes.length>0&&!!e.currentEpisode&&e.episodes[e.episodes.length-1]===e.currentEpisode,oe=(e.showMeta.status||"").trim().toLowerCase(),ee=["finished","completed","complete","ended"].some(n=>oe.includes(n)),Ee=e.inWatchlist&&e.watchlistStatus==="Watching"&&_e&&ee&&X,fe=e.resumeTime>0&&e.resumeDuration>0&&e.resumeTime>=e.resumeDuration*.8,de=n=>{i({type:"SET_STATE",payload:{isAutoplayEnabled:n}}),localStorage.setItem("autoplayEnabled",n.toString())},F=!!(e.currentEpisode&&e.watchedEpisodes.includes(e.currentEpisode)),ue=e.selectedProvider!=="allanime";L(()=>{const n=m.videoRef.current;if(T(!1),q(!1),!n||e.selectedSource?.type==="iframe")return;const s=()=>{const C=n.duration,b=n.currentTime;if(!C||Number.isNaN(C)){T(!1),q(!1);return}const H=b/C;T(ge&&H>=.8),q(b>=Math.max(C*.98,C-10))};return s(),n.addEventListener("timeupdate",s),n.addEventListener("loadedmetadata",s),()=>{n.removeEventListener("timeupdate",s),n.removeEventListener("loadedmetadata",s)}},[m.videoRef,ge,e.currentEpisode,e.selectedSource]);const te=R(async()=>{if(!r||!e.currentEpisode||!e.showMeta.name||a)return;const n=m.videoRef.current?.duration,s=Math.max(n||0,e.resumeDuration||0,(e.showMeta.lengthMin||0)*60,1);await P(e.currentEpisode,s)},[r,e.currentEpisode,e.showMeta,e.resumeDuration,P,a,m.videoRef]);if(e.error)return t("p",{className:"error-message",children:["Error: ",e.error]});if(!e.loadingShowData&&!e.showMeta.name)return t("p",{children:"Show not found."});const U=e.loadingShowData||e.loadingVideo,ie=e.forceNativePlayer||re;return t("div",{className:ye.playerPageLayout,children:[t(dn,{show:e.showResumeModal,resumeTime:u.actions.formatTime(e.resumeTime),onResume:N,onStartOver:z,onNextEpisode:Se,hasNextEpisode:ge,isCompleted:fe}),t("aside",{className:ye.episodeSidebar,children:e.loadingShowData?t("div",{style:{padding:"2rem",textAlign:"center",color:"var(--text-muted)"},children:"Loading Episodes..."}):t(nr,{episodes:e.episodes,currentEpisode:e.currentEpisode,watchedEpisodes:e.watchedEpisodes,onEpisodeClick:n=>c(`/watch/${r}/${n}`)})}),t("div",{className:ye.playerMain,children:[t("div",{ref:m.playerContainerRef,className:`${o.videoContainer} ${u.state.isFullscreen?"":ye.videoPlayerWrapper} ${u.state.isFullscreen?o.fullscreenActive:""}`,onClick:I,style:{...e.showResumeModal?{visibility:"hidden"}:{}},children:[D&&t("div",{className:`${o.skipIndicatorContainer} ${D.side==="left"?o.leftSkip:o.rightSkip} `,children:t("div",{className:o.skipBubble,children:[t("div",{className:o.skipIcon,children:D.side==="left"?t(Xe,{}):t(Je,{})}),t("div",{className:o.skipText,children:"15s"})]})}),U&&t("div",{className:o.loadingOverlay,children:t("div",{className:o.loadingDots,children:[t("div",{className:o.dot}),t("div",{className:o.dot}),t("div",{className:o.dot})]})}),u.state.isBuffering&&!U&&t("div",{className:o.bufferingOverlay,children:t("div",{className:o.bufferingSpinner})}),e.selectedSource?.type==="iframe"?!U&&t("iframe",{src:e.selectedLink?.link,className:o.videoIframe,allow:"autoplay; fullscreen; picture-in-picture",allowFullScreen:!0,sandbox:e.selectedSource.sandbox?`${e.selectedSource.sandbox} allow-fullscreen allow-popups allow-popups-to-escape-sandbox`:void 0}):t(Le,{children:[!U&&e.videoSources.length===0&&t("div",{className:o.errorOverlay,children:[t("p",{children:["No sources found for this episode with ",e.selectedProvider,"."]}),t("p",{className:o.errorSubtext,children:"Please try selecting a different provider below."}),t("button",{className:o.retryButton,onClick:()=>window.location.reload(),children:"Retry"})]}),!U&&e.videoSources.length>0&&!ie&&t(Hn,{player:u,isAutoplayEnabled:e.isAutoplayEnabled,onAutoplayChange:de,showNextEpisodeButton:!e.showResumeModal&&_,onNextEpisode:Se,videoSources:e.videoSources,selectedSource:e.selectedSource,selectedLink:e.selectedLink,onSourceChange:(n,s)=>{m.videoRef.current&&!isNaN(m.videoRef.current.currentTime)&&(A.current=m.videoRef.current.currentTime),O(n.sourceName),i({type:"SET_STATE",payload:{selectedSource:n,selectedLink:s,showResumeModal:e.showResumeModal&&n.type!=="iframe"}})},loadingVideo:e.loadingVideo,skipIntervals:e.skipIntervals}),!U&&e.videoSources.length>0&&t("video",{ref:m.videoRef,controls:ie,onPlay:S.onPlay,onPause:S.onPause,onLoadedMetadata:S.onLoadedMetadata,onTimeUpdate:S.onTimeUpdate,onProgress:S.onProgress,onVolumeChange:S.onVolumeChange,onWaiting:S.onWaiting,onPlaying:S.onPlaying})]})]}),t(cr,{selectedProvider:e.selectedProvider,onProviderChange:n=>{i({type:"SET_STATE",payload:{selectedProvider:n,videoSources:[],selectedSource:null,selectedLink:null,loadingVideo:!0}}),localStorage.setItem("preferredProvider",n)}}),U?t("div",{className:o.sourceLoader,children:t("div",{className:o.spinner})}):t(Le,{children:[t(ur,{videoSources:e.videoSources,selectedSource:e.selectedSource,onSourceChange:n=>{m.videoRef.current&&!isNaN(m.videoRef.current.currentTime)&&(A.current=m.videoRef.current.currentTime);const C=(n.links||[]).sort((b,H)=>(parseInt(H.resolutionStr)||0)-(parseInt(b.resolutionStr)||0))[0]||null;O(n.sourceName),i({type:"SET_STATE",payload:{selectedSource:n,selectedLink:C,showResumeModal:e.showResumeModal&&n.type!=="iframe"}})}}),ie&&e.selectedSource&&e.selectedSource.links.length>1&&t("div",{className:o.sourceSelectionContainer,style:{marginTop:"1rem"},children:[t("h4",{children:"Resolution"}),t("div",{className:o.sourceButtons,children:e.selectedSource.links.sort((n,s)=>(parseInt(s.resolutionStr)||0)-(parseInt(n.resolutionStr)||0)).map(n=>t("button",{className:`${o.sourceButton} ${e.selectedLink?.resolutionStr===n.resolutionStr?o.active:""}`,onClick:()=>i({type:"SET_STATE",payload:{selectedLink:n}}),children:n.resolutionStr},n.resolutionStr))})]})]}),t("div",{className:ye.playerInfoContainer,children:[t("div",{className:ye.playerInfoHeader,children:[t("div",{className:ye.playerAnimeCard,children:t("img",{src:Ye(e.showMeta.thumbnail||""),alt:V,onError:n=>{n.target.src="/placeholder.svg"}})}),t("div",{className:ye.videoTitleSection,children:[t("div",{className:o.titleContainer,children:[t("h1",{children:V}),t("div",{className:o.scheduleInfo,children:[e.showMeta.status&&t("span",{className:o.status,children:e.showMeta.status}),e.showMeta.nextEpisodeAirDate&&t("span",{className:o.nextEpisode,children:["Next episode: ",e.showMeta.nextEpisodeAirDate]})]})]}),t("div",{className:o.controls,children:[t("button",{className:`${o.watchlistBtn} ${e.inWatchlist?o.inList:""}`,onClick:f,children:[e.inWatchlist?t(Ie,{size:14}):t(Ze,{size:14}),e.inWatchlist?"In Watchlist":"Add to Watchlist"]}),ue&&t("button",{className:`${o.watchlistBtn} ${o.markWatchedBtn} ${F?o.markWatchedDone:""}`,onClick:te,disabled:a||!e.currentEpisode,children:[t(Ie,{size:14}),a?"Saving...":F?"Watched":"Mark Watched"]}),Ee&&t("button",{className:`${o.watchlistBtn} ${o.completeSeriesBtn}`,onClick:W,disabled:y,children:[t(Ie,{size:14}),y?"Saving...":"Move to Completed"]}),t("div",{className:o.toggleContainer,children:[t("span",{children:"SUB"}),t(Be,{id:"mode-switch",isChecked:e.currentMode==="dub",onChange:n=>{const s=n.target.checked?"dub":"sub";i({type:"SET_MODE",payload:s}),localStorage.setItem("preferredMode",s)}}),t("span",{children:"DUB"})]}),window.innerWidth>=768&&t("div",{className:o.toggleContainer,children:[t("span",{children:"Native"}),t(Be,{id:"native-player-switch",isChecked:e.forceNativePlayer,onChange:n=>{const s=n.target.checked;i({type:"SET_STATE",payload:{forceNativePlayer:s}}),localStorage.setItem("forceNativePlayer",s.toString())}})]})]})]})]}),t("div",{className:o.descriptionSection,children:[t("h3",{children:"Synopsis"}),t("p",{className:o.description,children:e.showMeta.description?e.showMeta.description.replace(/<[^>]*>?/gm,""):"No description available."})]}),t("button",{className:o.detailsToggleBtn,onClick:k,children:[e.showCombinedDetails?t(et,{}):t(tt,{}),e.showCombinedDetails?"Hide Details":"Show Details"]}),e.showCombinedDetails&&t(Le,{children:e.loadingDetails?t("p",{className:o.loadingDetails,children:"Loading details..."}):t(Le,{children:[t("div",{className:o.detailsGridContainer,children:[e.showMeta.mediaTypes?.[0]&&t("div",{className:o.detailItem,children:[t("strong",{children:"Type"}),t("span",{children:e.showMeta.mediaTypes[0].name})]}),e.showMeta.status&&t("div",{className:o.detailItem,children:[t("strong",{children:"Status"}),t("span",{className:o.animeStatus,children:e.showMeta.status})]}),e.showMeta.stats?.averageScore&&t("div",{className:o.detailItem,children:[t("strong",{children:"Score"}),t("span",{children:e.showMeta.stats.averageScore})]}),e.showMeta.studios&&e.showMeta.studios.length>0&&t("div",{className:o.detailItem,children:[t("strong",{children:"Studios"}),t("span",{children:e.showMeta.studios.map(n=>n.name).join(", ")})]}),e.showMeta.sources?.[0]&&t("div",{className:o.detailItem,children:[t("strong",{children:"Source"}),t("span",{children:e.showMeta.sources[0].name})]}),e.showMeta.lengthMin&&t("div",{className:o.detailItem,children:[t("strong",{children:"Episode Length"}),t("span",{children:[e.showMeta.lengthMin," min"]})]}),e.showMeta.names?.english&&t("div",{className:o.detailItem,children:[t("strong",{children:"English Title"}),t("span",{children:e.showMeta.names.english})]}),e.showMeta.names?.native&&t("div",{className:o.detailItem,children:[t("strong",{children:"Native Title"}),t("span",{children:e.showMeta.names.native})]}),e.showMeta.genres&&t("div",{className:o.detailItem,children:[t("strong",{children:"Genres"}),t("div",{className:o.genresList,children:e.showMeta.genres.map(n=>t("span",{className:o.genreTag,children:n.name},n.name))})]}),e.allMangaDetails?.Rating&&t("div",{className:o.detailItem,children:[t("strong",{children:"Rating"}),t("span",{children:e.allMangaDetails.Rating})]}),e.allMangaDetails?.Season&&t("div",{className:o.detailItem,children:[t("strong",{children:"Season"}),t("span",{children:e.allMangaDetails.Season})]}),e.allMangaDetails?.Episodes&&t("div",{className:o.detailItem,children:[t("strong",{children:"Episodes"}),t("span",{children:e.allMangaDetails.Episodes})]}),e.allMangaDetails?.Date&&t("div",{className:o.detailItem,children:[t("strong",{children:"Date"}),t("span",{children:e.allMangaDetails.Date})]}),e.allMangaDetails?.["Original Broadcast"]&&t("div",{className:o.detailItem,children:[t("strong",{children:"Original Broadcast"}),t("span",{children:e.allMangaDetails["Original Broadcast"]})]})]}),e.showMeta.websites&&t("div",{className:o.externalLinksSection,children:[t("strong",{children:"External Links"}),t("div",{className:o.externalLinksGrid,children:[e.showMeta.websites.official&&t("a",{href:Ce(e.showMeta.websites.official),target:"_blank",rel:"noopener noreferrer",className:o.websiteLink,children:"Official"}),e.showMeta.websites.mal&&t("a",{href:Ce(e.showMeta.websites.mal),target:"_blank",rel:"noopener noreferrer",className:o.websiteLink,children:"MAL"}),e.showMeta.websites.aniList&&t("a",{href:Ce(e.showMeta.websites.aniList),target:"_blank",rel:"noopener noreferrer",className:o.websiteLink,children:"AniList"}),e.showMeta.websites.kitsu&&t("a",{href:Ce(e.showMeta.websites.kitsu),target:"_blank",rel:"noopener noreferrer",className:o.websiteLink,children:"Kitsu"}),e.showMeta.websites.animePlanet&&t("a",{href:Ce(e.showMeta.websites.animePlanet),target:"_blank",rel:"noopener noreferrer",className:o.websiteLink,children:"Anime-Planet"}),e.showMeta.websites.anidb&&t("a",{href:Ce(e.showMeta.websites.anidb),target:"_blank",rel:"noopener noreferrer",className:o.websiteLink,children:"AniDB"})]})]})]})})]})]})]})};export{br as default};
@@ -0,0 +1 @@
1
+ ._controls_qkwi6_1{display:flex;align-items:center;gap:1.25rem;flex-wrap:wrap}._titleContainer_qkwi6_8{display:flex;flex-direction:column;gap:1rem}._scheduleInfo_qkwi6_14{display:flex;gap:1rem;font-size:.95rem;color:var(--text-tertiary);align-items:center}._status_qkwi6_22{background:#8b5cf61a;color:var(--accent-light);border:1px solid rgba(139,92,246,.2);padding:.35rem .85rem;border-radius:var(--radius-full);font-weight:700;font-size:.75rem;text-transform:uppercase;letter-spacing:.05em}._nextEpisode_qkwi6_34{background:#ffffff0d;color:var(--text-secondary);padding:.35rem .85rem;border-radius:var(--radius-full);font-size:.8rem;font-weight:600;border:1px solid var(--glass-border)}._watchlistBtn_qkwi6_44{background:#ffffff0d;color:var(--text-primary);border:1px solid var(--glass-border);padding:.75rem 1.5rem;border-radius:var(--radius-lg);font-weight:600;cursor:pointer;transition:all var(--transition-normal);display:flex;align-items:center;gap:.6rem;font-size:.9rem}._watchlistBtn_qkwi6_44:hover{background:#ffffff1a;border-color:var(--text-secondary);transform:translateY(-2px)}._watchlistBtn_qkwi6_44._inList_qkwi6_65{background:#10b9811a;border-color:#10b98166;color:var(--color-success)}._watchlistBtn_qkwi6_44._inList_qkwi6_65:hover{background:#10b98126;border-color:var(--color-success)}._watchlistBtn_qkwi6_44:disabled{opacity:.7;cursor:wait;transform:none}._watchlistBtn_qkwi6_44:disabled:hover{transform:none}._markWatchedBtn_qkwi6_86{background:#3b82f61a;border-color:#3b82f659;color:#93c5fd}._markWatchedBtn_qkwi6_86:hover{background:#3b82f629;border-color:#60a5fa8c;color:#dbeafe}._markWatchedDone_qkwi6_98{background:#10b9811a;border-color:#10b98166;color:var(--color-success)}._markWatchedDone_qkwi6_98:hover{background:#10b98126;border-color:var(--color-success)}._completeSeriesBtn_qkwi6_109{background:#10b9811f;border-color:#10b98161;color:#d1fae5}._completeSeriesBtn_qkwi6_109:hover{background:#10b9812e;border-color:#34d3998c;color:#ecfdf5}._videoContainer_qkwi6_121{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#000;display:flex;justify-content:center;align-items:center}._loadingOverlay_qkwi6_133{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;z-index:10;background:#00000080}._loadingDots_qkwi6_146{display:flex;gap:10px}._dot_qkwi6_151{width:12px;height:12px;border-radius:50%;background-color:var(--accent);animation:_bounce_qkwi6_1 1.4s infinite ease-in-out both;box-shadow:0 0 10px var(--accent-glow)}._dot_qkwi6_151:nth-child(1){animation-delay:-.32s}._dot_qkwi6_151:nth-child(2){animation-delay:-.16s}@keyframes _bounce_qkwi6_1{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}._bufferingOverlay_qkwi6_180{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);pointer-events:none;z-index:20}._bufferingSpinner_qkwi6_189{width:50px;height:50px;border:4px solid rgba(255,255,255,.3);border-radius:50%;border-top-color:var(--accent);animation:_spin_qkwi6_686 1s ease-in-out infinite}@keyframes _spin_qkwi6_686{to{transform:rotate(360deg)}}._videoIframe_qkwi6_204{width:100%;height:100%;border:none;position:absolute;top:0;left:0;object-fit:cover}._videoContainer_qkwi6_121 video{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;object-fit:contain}._controlsOverlay_qkwi6_224{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:linear-gradient(to bottom,rgba(0,0,0,.35) 0%,rgba(0,0,0,.2) 15%,transparent 40%,transparent 60%,rgba(0,0,0,.2) 85%,rgba(0,0,0,.35) 100%);will-change:opacity}._controlsOverlay_qkwi6_224>*{pointer-events:auto}._controlsOverlay_qkwi6_224._hidden_qkwi6_253{opacity:0;pointer-events:none;cursor:none}._centerPlayPause_qkwi6_259{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;align-items:center;justify-content:center;background:#0f0f11d9;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,.15);border-radius:50%;color:#fff;width:90px;height:90px;font-size:2.8rem;cursor:pointer;padding-left:6px;transition:all .3s cubic-bezier(.34,1.56,.64,1);box-shadow:none;will-change:transform}._centerPlayPause_qkwi6_259:hover{background:var(--accent);transform:translate(-50%,-50%) scale(1.1);border-color:var(--accent);box-shadow:0 0 40px var(--accent-glow)}._bottomControls_qkwi6_290{position:absolute;bottom:24px;left:24px;right:24px;display:flex;flex-direction:column;gap:0;background:#0f0f11f2;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.1);border-radius:20px;padding:16px 24px;box-shadow:none}._progressBarContainer_qkwi6_307{width:100%;padding:10px 0;cursor:pointer;position:relative;touch-action:none;display:flex;align-items:center}._progressBar_qkwi6_307{width:100%;height:4px;background-color:#ffffff26;border-radius:4px;position:relative;transition:height .2s,background-color .2s;overflow:visible}._progressBarContainer_qkwi6_307:hover ._progressBar_qkwi6_307,._progressBarContainer_qkwi6_307._scrubbing_qkwi6_330 ._progressBar_qkwi6_307{height:6px;background-color:#ffffff40}._watchedBar_qkwi6_335,._bufferedBar_qkwi6_336{position:absolute;top:0;left:0;height:100%;border-radius:4px}._watchedBar_qkwi6_335{background:var(--accent);background:linear-gradient(90deg,var(--accent) 0%,var(--accent-light) 100%);z-index:2;box-shadow:0 0 15px var(--accent-glow);transition:width .3s linear;will-change:width}._bufferedBar_qkwi6_336{background-color:#ffffff4d;z-index:1}._thumb_qkwi6_358{position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);width:16px;height:16px;background-color:#fff;border-radius:50%;z-index:3;transition:transform .2s cubic-bezier(.175,.885,.32,1.275),left .3s linear;box-shadow:0 0 0 4px #fff3;will-change:left}._progressBarContainer_qkwi6_307:hover ._thumb_qkwi6_358,._progressBarContainer_qkwi6_307._scrubbing_qkwi6_330 ._thumb_qkwi6_358{transform:translate(-50%,-50%) scale(1)}._timeBubble_qkwi6_379{position:absolute;bottom:35px;transform:translate(-50%);background:#000000e6;border:1px solid rgba(255,255,255,.1);color:#fff;padding:6px 10px;border-radius:8px;font-size:.85rem;font-weight:600;opacity:0;transition:opacity .2s;pointer-events:none;white-space:nowrap;box-shadow:0 4px 12px #0000004d}._progressBarContainer_qkwi6_307:hover ._timeBubble_qkwi6_379{opacity:1}._skipSegment_qkwi6_401{position:absolute;top:0;height:100%;z-index:10;opacity:.5;transition:opacity .2s;border-radius:4px}._skipSegment_qkwi6_401:hover{opacity:.8}._skipSegment_qkwi6_401._op_qkwi6_415{background-color:var(--success)}._skipSegment_qkwi6_401._ed_qkwi6_419{background-color:var(--accent-blue)}._skipSegment_qkwi6_401._recap_qkwi6_423{background-color:var(--warning)}._bottomControlsRow_qkwi6_427{display:flex;justify-content:space-between;align-items:center;width:100%;margin-top:4px}._controlBtn_qkwi6_435{background:transparent;border:none;color:#ffffffe6;font-size:1.2rem;cursor:pointer;transition:all .2s;padding:10px;border-radius:12px;display:flex;align-items:center;justify-content:center}._controlBtn_qkwi6_435:hover{background:#ffffff1a;color:#fff;transform:translateY(-2px)}._controlBtn_qkwi6_435:active{transform:translateY(0)}._timeDisplay_qkwi6_459{font-size:.9rem;font-weight:500;color:#ffffffe6;font-variant-numeric:tabular-nums;margin-left:.5rem;opacity:.9}._leftControls_qkwi6_468,._rightControls_qkwi6_469,._middleControls_qkwi6_470{display:flex;align-items:center;gap:1.5rem}._skipControls_qkwi6_476{display:flex;align-items:center;gap:.25rem}._skipBtn_qkwi6_482{background:transparent;border:none;color:#fff;cursor:pointer;font-size:1.4rem;display:flex;align-items:center;justify-content:center;opacity:.7;transition:all .2s;padding:6px}._skipBtn_qkwi6_482:hover{opacity:1;transform:scale(1.1);color:var(--accent)}._skipBtn_qkwi6_482:active{transform:scale(.9)}._volumeContainer_qkwi6_506{display:flex;align-items:center;position:relative;padding-right:10px}._volumeSlider_qkwi6_513{width:0;opacity:0;transform:scaleX(0);transform-origin:left;transition:all .3s var(--ease-smooth);cursor:pointer;margin-left:6px;-webkit-appearance:none;appearance:none;background:transparent;height:30px}._volumeContainer_qkwi6_506:hover ._volumeSlider_qkwi6_513,._volumeSlider_qkwi6_513:focus{width:80px;opacity:1;transform:scaleX(1)}._volumeSlider_qkwi6_513::-webkit-slider-runnable-track{width:100%;height:4px;background:linear-gradient(to right,var(--accent) 0%,var(--accent) var(--volume-percent, 100%),rgba(255,255,255,.25) var(--volume-percent, 100%),rgba(255,255,255,.25) 100%);border-radius:4px;border:none}._volumeSlider_qkwi6_513::-moz-range-track{width:100%;height:4px;background:#ffffff40;border-radius:4px;border:none}._volumeSlider_qkwi6_513::-moz-range-progress{height:4px;background:var(--accent);border-radius:4px}._volumeSlider_qkwi6_513::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:14px;height:14px;background-color:#fff;border:2px solid var(--accent);border-radius:50%;cursor:pointer;margin-top:-5px;box-shadow:0 0 10px #00000080;transition:transform .1s ease}._volumeSlider_qkwi6_513::-webkit-slider-thumb:hover{transform:scale(1.2);box-shadow:0 0 15px var(--accent-glow)}._volumeSlider_qkwi6_513::-moz-range-thumb{width:14px;height:14px;background-color:#fff;border:2px solid var(--accent);border-radius:50%;cursor:pointer;box-shadow:0 0 10px #00000080}._settingsMenu_qkwi6_591{position:absolute;bottom:50px;right:0;background:#0f0f0ffa;border:1px solid rgba(255,255,255,.1);color:#fff;padding:1rem;border-radius:12px;width:280px;z-index:100;box-shadow:0 10px 40px #00000080;animation:_slideUp_qkwi6_1 .2s cubic-bezier(.16,1,.3,1);transform-origin:bottom right}@keyframes _slideUp_qkwi6_1{0%{opacity:0;transform:translateY(10px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}._settingsMenu_qkwi6_591 h4{margin:0 0 1rem;font-size:.95rem;text-transform:uppercase;letter-spacing:.05em;color:#ffffff80;border-bottom:1px solid rgba(255,255,255,.1);padding-bottom:.5rem;font-weight:600}._qualityListInMenu_qkwi6_630,._ccOptionsContainer_qkwi6_631{display:flex;flex-direction:column;gap:.25rem;max-height:300px;overflow-y:auto}._qualityItemInMenu_qkwi6_639,._ccItem_qkwi6_640{background:transparent;color:#fffc;border:none;padding:.75rem 1rem;border-radius:8px;cursor:pointer;text-align:left;font-size:.95rem;transition:all .2s;display:flex;justify-content:space-between;align-items:center}._qualityItemInMenu_qkwi6_639:hover,._ccItem_qkwi6_640:hover{background:#ffffff1a;color:#fff}._qualityItemInMenu_qkwi6_639._active_qkwi6_661,._ccItem_qkwi6_640._active_qkwi6_661{background:var(--accent);color:#fff;font-weight:600}._toggleContainer_qkwi6_668{display:flex;align-items:center;gap:.75rem}._toggleContainer_qkwi6_668 span{font-size:.85rem;font-weight:500;color:#fffc}._sourceLoader_qkwi6_680{padding:2rem;display:flex;justify-content:center}._spinner_qkwi6_686{width:40px;height:40px;border:4px solid rgba(255,255,255,.1);border-left-color:var(--accent);border-radius:50%;animation:_spin_qkwi6_686 1s linear infinite}@media(max-width:768px){._bottomControls_qkwi6_290{padding:.75rem;bottom:8px;left:8px;right:8px;border-radius:12px}._leftControls_qkwi6_468,._rightControls_qkwi6_469{gap:.5rem}._controlBtn_qkwi6_435{padding:8px;font-size:1.1rem}._timeDisplay_qkwi6_459{font-size:.75rem;margin-left:.25rem}._centerPlayPause_qkwi6_259{width:64px;height:64px;font-size:2rem}._titleContainer_qkwi6_8 h1{font-size:1.25rem}._volumeSlider_qkwi6_513,._volumeContainer_qkwi6_506{display:none}._skipBubble_qkwi6_737{width:80px;height:80px}._skipIcon_qkwi6_741{font-size:1.8rem}._skipText_qkwi6_744{font-size:.8rem}}@media(max-width:900px)and (orientation:landscape){._bottomControls_qkwi6_290{bottom:8px;left:max(8px,env(safe-area-inset-left));right:max(8px,env(safe-area-inset-right));padding:.5rem 1rem}._centerPlayPause_qkwi6_259{width:54px;height:54px;font-size:1.5rem}._skipIndicatorContainer_qkwi6_763._leftSkip_qkwi6_763{left:max(0px,env(safe-area-inset-left))}._skipIndicatorContainer_qkwi6_763._rightSkip_qkwi6_766{right:max(0px,env(safe-area-inset-right))}}._sourceSelectionContainer_qkwi6_771{display:flex;flex-direction:column;gap:1.5rem;background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);padding:2rem;border-radius:var(--radius-xl);width:100%;box-shadow:var(--glass-shadow);animation:_slideUpIn_qkwi6_1 .6s var(--ease-smooth)}._providerSelectContainer_qkwi6_786{display:flex;flex-direction:column;gap:.75rem;width:100%}._providerSelect_qkwi6_786,._sourceSelect_qkwi6_771{height:48px;padding:0 1.25rem;background:var(--bg-tertiary);border:1px solid var(--border-primary);border-radius:var(--radius-lg);color:var(--text-primary);font-size:.95rem;font-family:inherit;cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%2371717a' stroke-width='2' viewBox='0 0 12 12'%3E%3Cpolyline points='3 5 6 8 9 5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 1.25rem center;transition:all var(--transition-fast);width:100%;max-width:400px}._providerSelect_qkwi6_786:hover,._sourceSelect_qkwi6_771:hover{border-color:var(--border-secondary);background-color:var(--bg-elevated)}._providerSelect_qkwi6_786:focus,._sourceSelect_qkwi6_771:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-glow)}._providerSelect_qkwi6_786 option,._sourceSelect_qkwi6_771 option{background:var(--bg-tertiary);color:var(--text-primary)}._sourceSelectionContainer_qkwi6_771 h4,._providerSelectContainer_qkwi6_786 h4{margin:0;color:var(--text-tertiary);font-weight:700;text-transform:uppercase;font-size:.75rem;letter-spacing:.1em}._sourceButtons_qkwi6_842{display:flex;flex-wrap:wrap;gap:.75rem}._sourceButton_qkwi6_842{background:#ffffff0d;color:var(--text-secondary);border:1px solid var(--glass-border);padding:.75rem 1.5rem;border-radius:var(--radius-lg);cursor:pointer;font-size:.95rem;font-weight:600;transition:all var(--transition-normal)}._sourceButton_qkwi6_842:hover{background:#ffffff1a;border-color:var(--text-primary);color:var(--text-primary);transform:translateY(-2px)}._sourceButton_qkwi6_842._active_qkwi6_661{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:0 8px 20px var(--accent-glow)}._detailsBox_qkwi6_874{background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);padding:2.5rem;border-radius:var(--radius-xl);display:flex;flex-direction:column;gap:1.5rem;box-shadow:var(--glass-shadow)}._detailsToggleBtn_qkwi6_887{background:#ffffff0d;border:1px solid var(--glass-border);color:var(--text-secondary);padding:.75rem 1.5rem;border-radius:var(--radius-lg);cursor:pointer;font-size:.95rem;font-weight:600;transition:all var(--transition-normal);display:flex;align-items:center;gap:.75rem;margin-top:2rem;width:fit-content}._detailsToggleBtn_qkwi6_887:hover{background:#ffffff1a;color:var(--text-primary);border-color:var(--text-primary);transform:translateY(-2px)}._detailsGridContainer_qkwi6_911{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:2rem;margin-top:2.5rem;background:#ffffff05;padding:2.5rem;border-radius:var(--radius-xl);border:1px solid var(--glass-border);animation:_fadeIn_qkwi6_1 .6s var(--ease-smooth)}._detailItem_qkwi6_923{display:flex;flex-direction:column;gap:.5rem}._detailItem_qkwi6_923 strong{color:var(--text-tertiary);font-weight:700;font-size:.7rem;text-transform:uppercase;letter-spacing:.1em}._detailItem_qkwi6_923 span{color:var(--text-primary);font-size:1rem;font-weight:500}._animeStatus_qkwi6_943{display:inline-block;background:#10b9811a;color:#34d399;padding:.25rem .75rem;border-radius:var(--radius-sm);font-size:.85rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;border:1px solid rgba(16,185,129,.2)}._genresList_qkwi6_956{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:.25rem}._genreTag_qkwi6_963{background:#ffffff0d;color:var(--text-secondary);padding:.4rem 1rem;border-radius:var(--radius-full);font-size:.85rem;font-weight:600;border:1px solid var(--glass-border);transition:all var(--transition-fast)}._genreTag_qkwi6_963:hover{background:#ffffff1a;color:var(--text-primary);border-color:var(--text-secondary);transform:translateY(-1px)}._externalLinksSection_qkwi6_981{margin-top:2.5rem;padding-top:2.5rem;border-top:1px solid var(--glass-border);display:flex;flex-direction:column;gap:1.5rem;width:100%}._externalLinksSection_qkwi6_981 strong{color:var(--text-tertiary);font-weight:700;font-size:.75rem;text-transform:uppercase;letter-spacing:.1em}._externalLinksGrid_qkwi6_999{display:flex;flex-wrap:wrap;gap:.75rem;width:100%}._websiteLink_qkwi6_1006{color:var(--text-secondary);background:#ffffff0d;padding:.5rem 1.25rem;border-radius:var(--radius-lg);font-size:.85rem;font-weight:600;transition:all var(--transition-normal);text-decoration:none;text-align:center;border:1px solid var(--glass-border);white-space:nowrap}._websiteLink_qkwi6_1006:hover{background:var(--accent);color:#fff;border-color:var(--accent);transform:translateY(-2px);box-shadow:0 4px 12px var(--accent-glow)}._loadingDetails_qkwi6_1028{color:var(--text-muted);font-style:italic;text-align:center;padding:2rem}._descriptionSection_qkwi6_1035{margin-top:2.5rem;padding:2.5rem;background:#ffffff05;border-radius:var(--radius-xl);border:1px solid var(--glass-border)}._descriptionSection_qkwi6_1035 h3{font-size:1.25rem;font-weight:800;margin-bottom:1.5rem;color:var(--text-primary);text-transform:uppercase;letter-spacing:.05em;display:flex;align-items:center;gap:.75rem}._descriptionSection_qkwi6_1035 h3:before{content:"";width:4px;height:20px;background:var(--accent);border-radius:var(--radius-full);box-shadow:0 0 10px var(--accent-glow)}._description_qkwi6_1035{line-height:1.8;color:var(--text-secondary);font-size:1.05rem;margin:0}._epJumpControls_qkwi6_1071{margin-bottom:1rem;padding:1rem;background:#ffffff08;border-radius:var(--radius-md);display:flex;flex-direction:column;gap:.8rem;border:1px solid var(--border-primary)}._epRangeButtons_qkwi6_1082{display:flex;flex-wrap:wrap;gap:.5rem}._metaTags_qkwi6_1088{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1rem}._epRangeBtn_qkwi6_1095{background:transparent;border:1px solid var(--border-primary);color:var(--text-secondary);padding:.3rem .6rem;border-radius:4px;cursor:pointer;font-size:.8rem}._epRangeBtn_qkwi6_1095:hover{border-color:var(--accent);color:var(--accent)}._epJumpInputGroup_qkwi6_1110{display:flex;gap:.5rem}._epJumpInputGroup_qkwi6_1110 input{background:#0000004d;border:1px solid var(--border-primary);color:#fff;padding:.4rem .8rem;border-radius:4px;flex:1}._epJumpInputGroup_qkwi6_1110 input:focus{outline:none;border-color:var(--accent)}._epJumpInputGroup_qkwi6_1110 button{background:var(--accent);color:#fff;border:none;padding:.4rem 1rem;border-radius:4px;cursor:pointer}._epJumpInputGroup_qkwi6_1110 button:hover{background:var(--accent-dark)}._videoContainer_qkwi6_121._fullscreenActive_qkwi6_1142{cursor:none;border-radius:0}._skipIndicatorContainer_qkwi6_763{position:absolute;top:0;width:30%;height:100%;display:flex;align-items:center;justify-content:center;pointer-events:none;z-index:60;overflow:hidden}._leftSkip_qkwi6_763{left:0}._rightSkip_qkwi6_766{right:0}._skipBubble_qkwi6_737{background:#fff3;width:120px;height:120px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;animation:_skipRipple_qkwi6_1 .6s ease-out forwards}._skipIcon_qkwi6_741{font-size:2.5rem;color:#fff;margin-bottom:.5rem}._skipText_qkwi6_744{color:#fff;font-weight:700;font-size:1rem}@keyframes _skipRipple_qkwi6_1{0%{transform:scale(.5);opacity:0}50%{transform:scale(1.1);opacity:1}to{transform:scale(1.3);opacity:0}}._errorOverlay_qkwi6_1209{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;background:#000c;color:#fff;z-index:30;padding:2rem;text-align:center;gap:1rem}._errorOverlay_qkwi6_1209 p{margin:0;font-size:1.2rem;font-weight:500}._errorSubtext_qkwi6_1233{color:var(--text-tertiary)!important;font-size:.9rem!important}._retryButton_qkwi6_1238{background:var(--accent);color:#fff;border:none;padding:.6rem 2rem;border-radius:var(--radius-md);font-weight:600;cursor:pointer;transition:all .2s;margin-top:.5rem;box-shadow:0 4px 12px #8b5cf64d}._retryButton_qkwi6_1238:hover{background:var(--accent-light);transform:translateY(-2px)}._playerPageLayout_cjfqj_1{display:grid;grid-template-columns:320px 1fr;gap:2.5rem;padding:2rem;width:100%;max-width:1800px;margin:0 auto;align-items:start;min-height:calc(100vh - var(--header-height));background-color:transparent;animation:_fadeIn_cjfqj_1 .8s var(--ease-smooth)}._episodeSidebar_cjfqj_15{background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);border-radius:var(--radius-xl);height:calc(100vh - var(--header-height) - 4rem);position:sticky;top:calc(var(--header-height) + 2rem);overflow:hidden;display:flex;flex-direction:column;box-shadow:var(--glass-shadow);animation:_slideUpIn_cjfqj_1 .8s var(--ease-smooth)}._playerMain_cjfqj_31{min-width:0;display:flex;flex-direction:column;gap:2.5rem;animation:_slideUpIn_cjfqj_1 .8s .1s var(--ease-smooth) both}._videoPlayerWrapper_cjfqj_39{width:100%;padding-top:56.25%;background-color:#000;border-radius:var(--radius-xl);overflow:hidden;position:relative;box-shadow:0 20px 50px #00000080;border:1px solid var(--glass-border)}._playerInfoHeader_cjfqj_50{display:flex;gap:2.5rem;align-items:flex-start}._playerAnimeCard_cjfqj_56{width:140px;flex-shrink:0;border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-xl);border:1px solid var(--glass-border);transform:translateZ(0);aspect-ratio:2/3;height:auto}._playerInfoContainer_cjfqj_68{background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);padding:3rem;border-radius:var(--radius-2xl);box-shadow:var(--glass-shadow);display:flex;flex-direction:column}._playerAnimeCard_cjfqj_56 img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .6s cubic-bezier(.2,.8,.2,1)}._playerAnimeCard_cjfqj_56:hover img{transform:scale(1.1)}._videoTitleSection_cjfqj_92{flex:1;display:flex;flex-direction:column;justify-content:flex-start;gap:1.5rem}._videoTitleSection_cjfqj_92 h1{margin:0;font-size:2.5rem;line-height:1.1;font-weight:800;color:var(--text-primary);letter-spacing:-.02em}._videoDescription_cjfqj_109{color:var(--text-secondary);line-height:1.7;font-size:1.05rem}@keyframes _fadeIn_cjfqj_1{0%{opacity:0}to{opacity:1}}@keyframes _slideUpIn_cjfqj_1{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@media(max-width:1280px){._playerPageLayout_cjfqj_1{grid-template-columns:280px 1fr;padding:1.5rem;gap:1.5rem}}@media(max-width:1024px){._playerPageLayout_cjfqj_1{display:flex;flex-direction:column;gap:2rem}._episodeSidebar_cjfqj_15{width:100%;height:auto;max-height:500px;position:static;order:2}._playerMain_cjfqj_31{order:1;width:100%}._playerInfoHeader_cjfqj_50{padding:0}}@media(max-width:768px){._playerPageLayout_cjfqj_1{padding:1rem;gap:1.5rem}._playerMain_cjfqj_31{gap:1.5rem}._videoPlayerWrapper_cjfqj_39{border-radius:var(--radius-lg)}._playerInfoContainer_cjfqj_68{border-radius:var(--radius-xl);padding:1.5rem}._playerInfoHeader_cjfqj_50{flex-direction:row;align-items:flex-start;text-align:left;gap:1.5rem}._videoTitleSection_cjfqj_92 h1{font-size:1.75rem}._playerAnimeCard_cjfqj_56{width:100px}._episodeSidebar_cjfqj_15{border-radius:var(--radius-lg)}}@media(max-width:480px){._playerInfoHeader_cjfqj_50{flex-direction:column;align-items:center;text-align:center}._playerAnimeCard_cjfqj_56{width:120px}}@media(max-width:900px)and (orientation:landscape){._playerPageLayout_cjfqj_1{padding:0;gap:0}._videoPlayerWrapper_cjfqj_39{border-radius:0;height:100vh;padding-top:0}._playerInfoContainer_cjfqj_68{padding:1.5rem}}body.low-end ._playerPageLayout_cjfqj_1,body.low-end ._episodeSidebar_cjfqj_15,body.low-end ._playerInfoContainer_cjfqj_68{animation:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;box-shadow:none!important;background:var(--bg-secondary)!important}body.low-end ._videoPlayerWrapper_cjfqj_39{box-shadow:none!important;border-color:var(--border-primary)!important}body.low-end ._episodeSidebar_cjfqj_15{background:#0a0a0c!important}._controlsOverlay_1gcow_1{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:linear-gradient(to bottom,rgba(0,0,0,.4) 0%,rgba(0,0,0,.2) 15%,transparent 40%,transparent 60%,rgba(0,0,0,.2) 85%,rgba(0,0,0,.4) 100%);will-change:opacity}._controlsOverlay_1gcow_1>*{pointer-events:auto}._controlsOverlay_1gcow_1._hidden_1gcow_30{opacity:0;pointer-events:none;cursor:none}._centerPlayPause_1gcow_36{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;align-items:center;justify-content:center;background:var(--glass-bg);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--glass-border);border-radius:50%;color:#fff;width:80px;height:80px;font-size:2.2rem;cursor:pointer;transition:all .3s cubic-bezier(.34,1.56,.64,1);box-shadow:var(--glass-shadow);will-change:transform}._centerPlayPause_1gcow_36:hover{background:var(--accent);transform:translate(-50%,-50%) scale(1.1);border-color:var(--accent);box-shadow:0 0 40px var(--accent-glow)}._playIconOffset_1gcow_66{transform:translate(3px)}._bottomControls_1gcow_70{position:absolute;bottom:24px;left:24px;right:24px;display:flex;flex-direction:column;gap:0;background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);border-radius:var(--radius-xl);padding:16px 24px;box-shadow:var(--glass-shadow);transition:transform .3s var(--ease-smooth),opacity .3s var(--ease-smooth)}._progressBarContainer_1gcow_90{width:100%;padding:12px 0;cursor:pointer;position:relative;touch-action:none;display:flex;align-items:center}._progressBar_1gcow_90{width:100%;height:4px;background-color:#ffffff1a;border-radius:4px;position:relative;transition:height .2s}._progressBarContainer_1gcow_90:hover ._progressBar_1gcow_90,._progressBarContainer_1gcow_90._scrubbing_1gcow_110 ._progressBar_1gcow_90{height:6px}._watchedBar_1gcow_114,._bufferedBar_1gcow_115{position:absolute;top:0;left:0;height:100%;border-radius:4px}._watchedBar_1gcow_114{background:var(--accent);background:linear-gradient(90deg,var(--accent) 0%,var(--accent-light) 100%);z-index:2;box-shadow:0 0 15px var(--accent-glow)}._bufferedBar_1gcow_115{background-color:#fff3;z-index:1}._thumb_1gcow_135{position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);width:14px;height:14px;background-color:#fff;border-radius:50%;z-index:3;transition:transform .2s cubic-bezier(.175,.885,.32,1.275);box-shadow:0 0 10px #00000080}._progressBarContainer_1gcow_90:hover ._thumb_1gcow_135,._progressBarContainer_1gcow_90._scrubbing_1gcow_110 ._thumb_1gcow_135{transform:translate(-50%,-50%) scale(1)}._timeBubble_1gcow_153{position:absolute;bottom:40px;transform:translate(-50%);background:#0f0f11f2;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--glass-border);color:#fff;padding:6px 10px;border-radius:8px;font-size:.8rem;font-weight:700;opacity:0;transition:opacity .2s;pointer-events:none;white-space:nowrap;box-shadow:var(--shadow-lg)}._progressBarContainer_1gcow_90:hover ._timeBubble_1gcow_153{opacity:1}._skipSegment_1gcow_176{position:absolute;top:0;height:100%;z-index:10;opacity:.4;transition:opacity .2s;border-radius:4px}._skipSegment_1gcow_176._op_1gcow_186{background-color:var(--color-success)}._skipSegment_1gcow_176._ed_1gcow_189{background-color:var(--accent-blue)}._skipSegment_1gcow_176._recap_1gcow_192{background-color:var(--color-warning)}._bottomControlsRow_1gcow_196{display:flex;justify-content:space-between;align-items:center;width:100%;margin-top:4px}._leftControls_1gcow_204,._rightControls_1gcow_205{display:flex;align-items:center;gap:1.25rem}._controlBtn_1gcow_211{background:transparent;border:none;color:#fffc;font-size:1.1rem;cursor:pointer;transition:all var(--transition-fast);padding:8px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center}._controlBtn_1gcow_211:hover{background:#ffffff1a;color:#fff;transform:translateY(-2px)}._controlBtn_1gcow_211._active_1gcow_231{color:var(--accent)}._timeDisplay_1gcow_235{font-size:.9rem;font-weight:600;color:#fffc;font-variant-numeric:tabular-nums;letter-spacing:.02em}._skipControls_1gcow_243{display:flex;align-items:center;gap:.5rem}._skipBtn_1gcow_249{background:transparent;border:none;color:#ffffffb3;cursor:pointer;font-size:1.3rem;display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast);padding:6px}._skipBtn_1gcow_249:hover{color:#fff;transform:scale(1.1)}._nextEpisodeBtn_1gcow_267{background:#ffffff0f;border:1px solid rgba(255,255,255,.12);border-radius:var(--radius-md);padding:.45rem .8rem;color:#fffc;font-weight:600;font-size:.9rem;display:inline-flex;align-items:center;gap:.5rem;cursor:pointer;transition:all var(--transition-fast);white-space:nowrap}._nextEpisodeBtn_1gcow_267:hover{background:#ffffff1a;color:#fff;transform:translateY(-1px);border-color:#fff3}._volumeContainer_1gcow_290{display:flex;align-items:center;position:relative}._volumeSlider_1gcow_296{width:0;opacity:0;transform:scaleX(0);transform-origin:left;transition:all .3s var(--ease-smooth);cursor:pointer;margin-left:8px;-webkit-appearance:none;appearance:none;background:transparent;height:20px}._volumeContainer_1gcow_290:hover ._volumeSlider_1gcow_296,._volumeSlider_1gcow_296:focus{width:80px;opacity:1;transform:scaleX(1)}._volumeSlider_1gcow_296::-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_1gcow_296::-moz-range-track{width:100%;height:4px;background:#fff3;border-radius:4px}._volumeSlider_1gcow_296::-moz-range-progress{height:4px;background:var(--accent);border-radius:4px}._volumeSlider_1gcow_296::-webkit-slider-thumb{-webkit-appearance:none;height:12px;width:12px;border-radius:50%;background:#fff;margin-top:-4px;box-shadow:0 0 5px #00000080}._toggleContainer_1gcow_353{display:flex;align-items:center;gap:.75rem}._toggleLabel_1gcow_359{font-size:.75rem;font-weight:700;color:#ffffff80;text-transform:uppercase;letter-spacing:.05em}@media(max-width:900px)and (orientation:landscape){._playerPageLayout_1gcow_368{padding:0;gap:0}._videoPlayerWrapper_1gcow_372{border-radius:0;height:100vh;padding-top:0}._playerInfoContainer_1gcow_377{padding:1.5rem}}body.low-end ._controlsOverlay_1gcow_1{background:none!important;transition:none!important}body.low-end ._centerPlayPause_1gcow_36,body.low-end ._bottomControls_1gcow_70{backdrop-filter:none!important;-webkit-backdrop-filter:none!important;background:#1a1a1c;box-shadow:none!important;transition:none!important}body.low-end ._centerPlayPause_1gcow_36:hover{background:var(--accent)!important}body.low-end ._controlBtn_1gcow_211._active_1gcow_231{color:var(--accent)!important}body.low-end ._progressBar_1gcow_90{height:4px!important;transition:none!important}body.low-end ._watchedBar_1gcow_114{background:var(--accent)!important;box-shadow:none!important}body.low-end ._thumb_1gcow_135{transition:none!important;box-shadow:none!important}body.low-end ._controlBtn_1gcow_211:hover,body.low-end ._nextEpisodeBtn_1gcow_267:hover{transform:none!important}body.low-end ._timeBubble_1gcow_153{-webkit-backdrop-filter:none!important;backdrop-filter:none!important;background:#111!important;transition:none!important}@media(max-width:768px){._bottomControls_1gcow_70{padding:12px 16px;bottom:12px;left:12px;right:12px}._leftControls_1gcow_204,._rightControls_1gcow_205{gap:.75rem}._volumeContainer_1gcow_290,._toggleContainer_1gcow_353{display:none}._centerPlayPause_1gcow_36{width:64px;height:64px;font-size:1.8rem}}._episodeListContainer_rntnv_1{display:flex;flex-direction:column;height:100%;background:transparent}._episodeListHeader_rntnv_8{background:transparent;padding:1.5rem;border-bottom:1px solid var(--glass-border);z-index:10}._episodeListTitle_rntnv_15{margin:0 0 1.25rem;font-size:1.25rem;font-weight:800;color:var(--text-primary);display:flex;align-items:center;gap:.75rem;letter-spacing:-.01em;text-transform:uppercase;font-size:.85rem;color:var(--text-tertiary);letter-spacing:.1em}._rangeSelector_rntnv_30{display:flex;flex-wrap:wrap;gap:.5rem}._rangeButton_rntnv_36{background:#ffffff0d;border:1px solid var(--glass-border);color:var(--text-secondary);padding:.5rem .75rem;border-radius:var(--radius-md);font-size:.8rem;font-weight:600;transition:all var(--transition-fast);cursor:pointer}._rangeButton_rntnv_36:hover{border-color:var(--text-secondary);color:var(--text-primary);background:#ffffff1a}._rangeButton_rntnv_36._active_rntnv_54{background:var(--accent);color:#fff;border-color:var(--accent);box-shadow:0 4px 12px var(--accent-glow)}._episodeList_rntnv_1{flex:1;display:flex;flex-direction:column;padding:1rem;overflow-y:auto;-webkit-overflow-scrolling:touch}._episodeList_rntnv_1::-webkit-scrollbar{width:5px}._episodeList_rntnv_1::-webkit-scrollbar-track{background:transparent}._episodeList_rntnv_1::-webkit-scrollbar-thumb{background:var(--glass-border);border-radius:var(--radius-full)}._episodeList_rntnv_1::-webkit-scrollbar-thumb:hover{background:var(--text-tertiary)}._episodeItem_rntnv_87{padding:1rem 1.25rem;margin-bottom:.5rem;border-radius:var(--radius-lg);cursor:pointer;transition:all var(--transition-normal);color:var(--text-secondary);font-weight:600;display:flex;justify-content:space-between;align-items:center;font-size:.9rem;border:1px solid transparent}._episodeItem_rntnv_87:hover{background:#ffffff0d;color:var(--text-primary);transform:translate(6px);border-color:var(--glass-border)}._episodeItem_rntnv_87._watched_rntnv_109{color:var(--text-muted);opacity:.6}._episodeItem_rntnv_87._active_rntnv_54{background:#8b5cf61a;color:var(--accent-light);border:1px solid rgba(139,92,246,.3);box-shadow:0 4px 15px #8b5cf61a}._episodeItem_rntnv_87._active_rntnv_54:hover{transform:none;background:#8b5cf626}._episodeItem_rntnv_87 span{display:flex;align-items:center;gap:.75rem}._container_1d353_1{display:flex;align-items:center;gap:1.25rem;flex-wrap:wrap}._titleContainer_1d353_8{display:flex;flex-direction:column;gap:1rem}._scheduleInfo_1d353_14{display:flex;gap:1rem;font-size:.95rem;color:var(--text-tertiary);align-items:center}._status_1d353_22{background:#8b5cf61a;color:var(--accent-light);border:1px solid rgba(139,92,246,.2);padding:.35rem .85rem;border-radius:var(--radius-full);font-weight:700;font-size:.75rem;text-transform:uppercase;letter-spacing:.05em}._nextEpisode_1d353_34{background:#ffffff0d;color:var(--text-secondary);padding:.35rem .85rem;border-radius:var(--radius-full);font-size:.8rem;font-weight:600;border:1px solid var(--glass-border)}._watchlistBtn_1d353_44{background:#ffffff0d;color:var(--text-primary);border:1px solid var(--glass-border);padding:.75rem 1.5rem;border-radius:var(--radius-lg);font-weight:600;cursor:pointer;transition:all var(--transition-normal);display:flex;align-items:center;gap:.6rem;font-size:.9rem}._watchlistBtn_1d353_44:hover{background:#ffffff1a;border-color:var(--text-secondary);transform:translateY(-2px)}._watchlistBtn_1d353_44._inList_1d353_65{background:#10b9811a;border-color:#10b98166;color:var(--color-success)}._watchlistBtn_1d353_44._inList_1d353_65:hover{background:#10b98126;border-color:var(--color-success)}._sourceSelectionContainer_1d353_76{display:flex;flex-direction:column;gap:1.5rem;background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);padding:2rem;border-radius:var(--radius-xl);width:100%;box-shadow:var(--glass-shadow)}._providerSelectContainer_1d353_90{display:flex;flex-direction:column;gap:1rem;width:100%}._providerSelect_1d353_90,._sourceSelect_1d353_76{height:48px;padding:0 1.25rem;background:var(--bg-tertiary);border:1px solid var(--border-primary);border-radius:var(--radius-lg);color:var(--text-primary);font-size:.95rem;font-family:inherit;cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%2371717a' stroke-width='2' viewBox='0 0 12 12'%3E%3Cpolyline points='3 5 6 8 9 5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 1.25rem center;transition:all var(--transition-fast);width:100%;max-width:400px}._providerSelect_1d353_90:hover,._sourceSelect_1d353_76:hover{border-color:var(--border-secondary);background-color:var(--bg-elevated)}._providerSelect_1d353_90:focus,._sourceSelect_1d353_76:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-glow)}._providerSelect_1d353_90 option,._sourceSelect_1d353_76 option{background:var(--bg-tertiary);color:var(--text-primary)}._sourceSelectionContainer_1d353_76 h4,._providerSelectContainer_1d353_90 h4{margin:0;color:var(--text-tertiary);font-weight:700;text-transform:uppercase;font-size:.75rem;letter-spacing:.1em}._sourceButtons_1d353_146{display:flex;flex-wrap:wrap;gap:.75rem}._sourceButton_1d353_146{background:#ffffff0d;color:var(--text-secondary);border:1px solid var(--glass-border);padding:.75rem 1.5rem;border-radius:var(--radius-lg);cursor:pointer;font-size:.95rem;font-weight:600;transition:all var(--transition-normal)}._sourceButton_1d353_146:hover{background:#ffffff1a;border-color:var(--text-primary);color:var(--text-primary);transform:translateY(-2px)}._sourceButton_1d353_146._active_1d353_171{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:0 8px 20px var(--accent-glow)}._detailsBox_1d353_178{background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);padding:2.5rem;border-radius:var(--radius-xl);display:flex;flex-direction:column;gap:1.5rem;box-shadow:var(--glass-shadow)}._detailsToggle_1d353_191{background:#ffffff0d;border:1px solid var(--glass-border);color:var(--text-secondary);padding:.75rem 1.5rem;border-radius:var(--radius-lg);cursor:pointer;font-size:.95rem;font-weight:600;transition:all var(--transition-normal);display:flex;align-items:center;gap:.75rem;margin-top:2rem;width:fit-content}._detailsToggle_1d353_191:hover{background:#ffffff1a;color:var(--text-primary);border-color:var(--text-primary);transform:translateY(-2px)}._detailsToggle_1d353_191 h3{margin:0;font-size:1.25rem;font-weight:600}._detailsGridContainer_1d353_221{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:2rem;margin-top:2.5rem;background:#ffffff05;padding:2.5rem;border-radius:var(--radius-xl);border:1px solid var(--glass-border);animation:_fadeIn_1d353_1 .6s var(--ease-smooth)}@keyframes _fadeIn_1d353_1{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}._detailItem_1d353_245{display:flex;flex-direction:column;gap:.5rem}._detailItem_1d353_245 strong{color:var(--text-tertiary);font-weight:700;font-size:.7rem;text-transform:uppercase;letter-spacing:.1em}._detailItem_1d353_245 span{color:var(--text-primary);font-size:1rem;font-weight:500}._animeStatus_1d353_265{display:inline-block;background:#10b9811a;color:var(--color-success);padding:.25rem .75rem;border-radius:var(--radius-sm);font-size:.85rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;border:1px solid rgba(16,185,129,.2)}._genresList_1d353_278{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:.25rem}._genreTag_1d353_285{background:#ffffff0d;color:var(--text-secondary);padding:.4rem 1rem;border-radius:var(--radius-full);font-size:.85rem;font-weight:600;border:1px solid var(--glass-border);transition:all var(--transition-fast)}._genreTag_1d353_285:hover{background:#ffffff1a;color:var(--text-primary);border-color:var(--text-secondary);transform:translateY(-1px)}._websiteLink_1d353_303{color:var(--text-secondary);background:#ffffff0d;padding:.5rem 1.25rem;border-radius:var(--radius-lg);font-size:.85rem;font-weight:600;transition:all var(--transition-normal);text-decoration:none;text-align:center;border:1px solid var(--glass-border);white-space:nowrap}._websiteLink_1d353_303:hover{background:var(--accent);color:#fff;border-color:var(--accent);transform:translateY(-2px);box-shadow:0 4px 12px var(--accent-glow)}._loadingDetails_1d353_325{color:var(--text-muted);font-style:italic;text-align:center;padding:2rem}
@@ -0,0 +1 @@
1
+ ._settingsPanel_1jl2n_1{position:absolute;bottom:100px;right:24px;width:320px;background:var(--glass-bg);backdrop-filter:blur(25px);-webkit-backdrop-filter:blur(25px);border:1px solid var(--glass-border);border-radius:var(--radius-xl);overflow:hidden;display:flex;flex-direction:column;box-shadow:var(--glass-shadow);z-index:60;animation:_slideUp_1jl2n_1 .3s var(--ease-smooth)}@keyframes _slideUp_1jl2n_1{0%{opacity:0;transform:translateY(20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}._header_1jl2n_30{display:flex;align-items:center;padding:1rem 1.25rem;border-bottom:1px solid var(--glass-border);position:relative;height:60px}._header_1jl2n_30 h3{margin:0;font-size:.85rem;font-weight:800;flex-grow:1;text-align:center;text-transform:uppercase;letter-spacing:.1em;color:var(--text-tertiary)}._backBtn_1jl2n_50{background:transparent;border:none;color:#fff;cursor:pointer;position:absolute;left:1rem;padding:8px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast)}._backBtn_1jl2n_50:hover{background:#ffffff1a;transform:translate(-2px)}._contentWrapper_1jl2n_70{max-height:400px;overflow-y:auto;-webkit-overflow-scrolling:touch}._menuContent_1jl2n_76{display:flex;flex-direction:column;padding:.75rem}._menuItem_1jl2n_82{background:transparent;border:none;color:var(--text-secondary);padding:.85rem 1rem;text-align:left;display:flex;justify-content:space-between;align-items:center;cursor:pointer;font-size:.95rem;font-weight:600;border-radius:var(--radius-lg);transition:all var(--transition-fast)}._menuItem_1jl2n_82:hover{background:#ffffff0d;color:var(--text-primary);transform:translate(4px)}._menuItem_1jl2n_82._selected_1jl2n_104{color:var(--accent-light);background:#8b5cf61a}._currentValue_1jl2n_109{color:var(--text-tertiary);font-size:.8rem;font-weight:500}._sliderGroup_1jl2n_115{padding:1.25rem;display:flex;flex-direction:column;gap:1rem}._sliderGroup_1jl2n_115 label{font-size:.75rem;font-weight:700;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.05em}._sliderGroup_1jl2n_115 input[type=range]{width:100%;cursor:pointer;accent-color:var(--accent);height:4px;border-radius:2px;background:#ffffff1a;appearance:none}._contentWrapper_1jl2n_70::-webkit-scrollbar{width:4px}._contentWrapper_1jl2n_70::-webkit-scrollbar-thumb{background:var(--glass-border);border-radius:2px}@media(max-width:768px){._settingsPanel_1jl2n_1{right:12px;bottom:80px;width:calc(100vw - 24px);max-width:320px}}
@@ -0,0 +1 @@
1
+ import{g as h,d as k,u as e}from"./vendor-DdbgYKo4.js";import{F as y,I as u}from"./index-CHVF4D4L.js";const j="_settingsPanel_1jl2n_1",P="_header_1jl2n_30",z="_backBtn_1jl2n_50",V="_contentWrapper_1jl2n_70",F="_menuContent_1jl2n_76",$="_menuItem_1jl2n_82",G="_selected_1jl2n_104",x="_currentValue_1jl2n_109",B="_sliderGroup_1jl2n_115",t={settingsPanel:j,header:P,backBtn:z,contentWrapper:V,menuContent:F,menuItem:$,selected:G,currentValue:x,sliderGroup:B},W=(S,_)=>{const{isOpen:i,onClose:w,videoSources:L,currentSource:m,currentLink:o,onSourceChange:f,subtitles:b,activeSubtitleTrack:r,onSubtitleChange:d,subtitleSettings:c,onSubtitleSettingsChange:p}=S,[l,a]=k("main");h.useEffect(()=>{if(!i){const n=setTimeout(()=>a("main"),300);return()=>clearTimeout(n)}},[i]);const g=()=>e("div",{className:t.menuContent,children:[e("button",{className:t.menuItem,onClick:()=>a("quality"),children:[e("span",{children:"Quality"}),e("span",{className:t.currentValue,children:o?.resolutionStr||"Auto"})]}),e("button",{className:t.menuItem,onClick:()=>a("subtitles"),children:[e("span",{children:"Subtitles"}),e("span",{className:t.currentValue,children:r||"Off"})]}),e("button",{className:t.menuItem,onClick:()=>a("subtitle-style"),children:e("span",{children:"Subtitle Style"})})]}),C=()=>{const n=m?.links.sort((s,I)=>(parseInt(I.resolutionStr)||0)-(parseInt(s.resolutionStr)||0))||[];return e("div",{className:t.menuContent,children:n.map(s=>e("button",{className:`${t.menuItem} ${o?.resolutionStr===s.resolutionStr?t.selected:""} `,onClick:()=>f(m,s),children:[e("span",{children:s.resolutionStr}),o?.resolutionStr===s.resolutionStr&&e(u,{size:12})]},s.resolutionStr))})},N=()=>e("div",{className:t.menuContent,children:[e("button",{className:`${t.menuItem} ${r==="off"?t.selected:""} `,onClick:()=>d("off"),children:[e("span",{children:"Off"}),r==="off"&&e(u,{size:12})]}),b.map(n=>e("button",{className:`${t.menuItem} ${r===(n.label||n.lang)?t.selected:""} `,onClick:()=>d(n.label||n.lang),children:[e("span",{children:n.label}),r===(n.label||n.lang)&&e(u,{size:12})]},n.label))]}),v=()=>e("div",{className:t.menuContent,children:[e("div",{className:t.sliderGroup,children:[e("label",{children:["Font Size (",c.fontSize.toFixed(1),")"]}),e("input",{type:"range",min:"0.5",max:"10",step:"0.5",value:c.fontSize,onInput:n=>p("fontSize",parseFloat(n.target.value))})]}),e("div",{className:t.sliderGroup,children:[e("label",{children:"Vertical Position (Lift)"}),e("input",{type:"range",min:"0",max:"50",step:"1",value:c.position,onInput:n=>p("position",parseInt(n.target.value))})]})]});return i?e("div",{ref:_,className:t.settingsPanel,onClick:n=>n.stopPropagation(),children:[e("div",{className:t.header,children:[l!=="main"&&e("button",{className:t.backBtn,onClick:()=>a("main"),children:e(y,{})}),e("h3",{children:l==="main"?"Settings":l.charAt(0).toUpperCase()+l.slice(1).replace("-"," ")})]}),e("div",{className:t.contentWrapper,children:[l==="main"&&g(),l==="quality"&&C(),l==="subtitles"&&N(),l==="subtitle-style"&&v()]})]}):null},q=h.forwardRef(W);export{q as default};
@@ -0,0 +1 @@
1
+ .modal-overlay{position:fixed;inset:0;background-color:#0009;display:flex;align-items:center;justify-content:center;z-index:9999;padding:var(--space-4);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);animation:fadeIn var(--transition-base) forwards}.modal-content{background-color:var(--bg-secondary);padding:var(--space-6);border-radius:var(--radius-lg);width:100%;box-shadow:var(--shadow-xl);position:relative;border:1px solid var(--border-primary);animation:scaleIn var(--transition-base) forwards}.modal-sm{max-width:400px}.modal-md{max-width:500px}.modal-lg{max-width:700px}.modal-title{margin:0 0 var(--space-4);font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--text-primary)}.modal-body{color:var(--text-secondary)}.modal-footer{display:flex;justify-content:flex-end;gap:var(--space-3);margin-top:var(--space-6);padding-top:var(--space-4);border-top:1px solid var(--border-primary)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes scaleIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}
@@ -0,0 +1 @@
1
+ import{y,u as e,d as s}from"./vendor-DdbgYKo4.js";import{B as h}from"./Button-o0l9V_NG.js";function g({isOpen:r,onClose:o,title:c,children:l,footer:t,width:a="md"}){return y(()=>{const n=i=>{i.key==="Escape"&&o&&o()};return r&&(document.addEventListener("keydown",n),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",n),document.body.style.overflow=""}},[r,o]),r?e("div",{className:"modal-overlay",onClick:o,children:e("div",{className:`modal-content modal-${a}`,onClick:n=>n.stopPropagation(),children:[c&&e("h2",{className:"modal-title",children:c}),e("div",{className:"modal-body",children:l}),t&&e("div",{className:"modal-footer",children:t})]})}):null}function b({isOpen:r,onClose:o,onConfirm:c,animeName:l,scenario:t}){const[a,n]=s(!1),[i,d]=s(!1);y(()=>{r||(n(!1),d(!1))},[r]);const u=()=>{c({removeFromWatchlist:t==="continueWatching"?i:!0,rememberPreference:t==="watchlist"?a:void 0})},f=t==="continueWatching"?"Reset Progress":"Remove from Watchlist",v=t==="continueWatching"?`Are you sure you want to remove your watch progress for "${l}"?`:`Are you sure you want to remove "${l}" from your watchlist?`;return e(g,{isOpen:r,onClose:o,title:f,children:e("div",{style:{color:"var(--text-secondary)"},children:[e("p",{children:v}),t==="continueWatching"&&e("label",{style:{display:"flex",alignItems:"center",gap:"0.5rem",margin:"1rem 0",cursor:"pointer"},children:[e("input",{type:"checkbox",checked:i,onChange:m=>d(m.target.checked)}),"Also remove from my watchlist"]}),t==="watchlist"&&e("label",{style:{display:"flex",alignItems:"center",gap:"0.5rem",margin:"1rem 0",cursor:"pointer"},children:[e("input",{type:"checkbox",checked:a,onChange:m=>n(m.target.checked)}),"Remember my choice"]}),e("div",{style:{display:"flex",gap:"0.75rem",marginTop:"1.5rem"},children:[e(h,{variant:"secondary",onClick:o,style:{flex:1},children:"No"}),e(h,{variant:"danger",onClick:u,style:{flex:1},children:"Yes"})]})]})})}export{b as R};
@@ -0,0 +1 @@
1
+ import{d as l,A as z,y as T,u as t,o as V}from"./vendor-DdbgYKo4.js";import{u as J,M as K,N as Q,O as W,P as X,K as Z,L as ee}from"./index-CHVF4D4L.js";import{E as te,a as ne,S as re}from"./ErrorMessage-Ddf2zmRx.js";import{B as C}from"./Button-o0l9V_NG.js";import"./useAnimeInfoData-Cr58brCY.js";import"./useIsMobile-gHo4t6g6.js";const ae="_searchableSelect_1e8g9_1",se="_selectHeader_1e8g9_7",le="_dropdown_1e8g9_22",ce="_searchInput_1e8g9_37",ie="_optionsList_1e8g9_47",oe="_option_1e8g9_47",h={searchableSelect:ae,selectHeader:se,dropdown:le,searchInput:ce,optionsList:ie,option:oe},de=({options:c,value:A,onChange:m,placeholder:L})=>{const[o,d]=l(!1),[u,g]=l(""),i=z(null),_=c.find(r=>r.value===A);T(()=>{function r(v){i.current&&!i.current.contains(v.target)&&d(!1)}return document.addEventListener("mousedown",r),()=>{document.removeEventListener("mousedown",r)}},[i]);const p=c.filter(r=>r.label.toLowerCase().includes(u.toLowerCase())),S=r=>{m(r),d(!1),g("")};return t("div",{className:h.searchableSelect,ref:i,children:[t("div",{className:h.selectHeader,onClick:()=>d(!o),children:_?_.label:L||"Select..."}),o&&t("div",{className:h.dropdown,children:[t("input",{type:"text",placeholder:"Search...",className:h.searchInput,value:u,onChange:r=>g(r.target.value)}),t("ul",{className:h.optionsList,children:p.map(r=>t("li",{className:h.option,onClick:()=>S(r.value),children:r.label},r.value))})]})]})},ue="_header_1mgrq_1",he="_fadeIn_1mgrq_1",me="_pageTitle_1mgrq_6",ge="_pageSubtitle_1mgrq_14",_e="_filterContainer_1mgrq_20",pe="_slideUpIn_1mgrq_1",ve="_searchBarWrapper_1mgrq_32",fe="_inputIconWrapper_1mgrq_38",Le="_searchIcon_1mgrq_43",Se="_searchInput_1mgrq_53",be="_searchActions_1mgrq_77",Ae="_searchBtn_1mgrq_82",Ne="_filterToggleBtn_1mgrq_87",Ie="_active_1mgrq_108",ye="_advancedFilters_1mgrq_115",qe="_show_1mgrq_122",we="_filterDivider_1mgrq_128",Ce="_filterGrid_1mgrq_134",Te="_filterItem_1mgrq_141",Be="_genreSection_1mgrq_182",Fe="_genreLabel_1mgrq_188",Oe="_genreContainer_1mgrq_198",xe="_genreButton_1mgrq_204",Ge="_include_1mgrq_221",ke="_exclude_1mgrq_227",Ee="_filterActions_1mgrq_234",Re="_resultsGrid_1mgrq_242",We="_noResults_1mgrq_249",$e="_noResultsIcon_1mgrq_260",n={header:ue,fadeIn:he,pageTitle:me,pageSubtitle:ge,filterContainer:_e,slideUpIn:pe,searchBarWrapper:ve,inputIconWrapper:fe,searchIcon:Le,searchInput:Se,searchActions:be,searchBtn:Ae,filterToggleBtn:Ne,active:Ie,advancedFilters:ye,show:qe,filterDivider:we,filterGrid:Ce,filterItem:Te,genreSection:Be,genreLabel:Fe,genreContainer:Oe,genreButton:xe,include:Ge,exclude:ke,filterActions:Ee,resultsGrid:Re,noResults:We,noResultsIcon:$e},Pe=[{value:"ALL",label:"All Types"},{value:"TV",label:"TV Series"},{value:"Movie",label:"Movie"},{value:"OVA",label:"OVA"},{value:"ONA",label:"ONA"}],De=[{value:"ALL",label:"All Seasons"},{value:"Winter",label:"Winter"},{value:"Spring",label:"Spring"},{value:"Summer",label:"Summer"},{value:"Fall",label:"Fall"}],Me=[{value:"ALL",label:"All Countries"},{value:"JP",label:"Japan"},{value:"CN",label:"China"}];function Je(){const[c,A]=V(),[m,L]=l(c.get("query")||""),[o,d]=l("ALL"),[u,g]=l("ALL"),[i,_]=l("ALL"),[p,S]=l("ALL"),[r,v]=l("ALL"),[b,$]=l(!1),{lowEndMode:P}=J(),{data:B}=K(),F=B?.genres||[],D=B?.studios||[],[N,O]=l({}),{data:M,fetchNextPage:x,hasNextPage:G,isFetchingNextPage:I,isLoading:k,isError:H,error:Y}=Q(c.toString()),E=M?.pages.flatMap(e=>e.results)||[];T(()=>{L(c.get("query")||""),v(c.get("studios")||"ALL")},[c]);const y=()=>{const e=new URLSearchParams;m.trim()&&e.set("query",m.trim()),o!=="ALL"&&e.set("type",o),u!=="ALL"&&e.set("season",u),i!=="ALL"&&e.set("year",i),p!=="ALL"&&e.set("country",p),r!=="ALL"&&e.set("studios",r);const a=Object.entries(N).filter(([,s])=>s==="include").map(([s])=>s),f=Object.entries(N).filter(([,s])=>s==="exclude").map(([s])=>s);a.length>0&&e.set("genres",a.join(",")),f.length>0&&e.set("excludeGenres",f.join(",")),A(e)},j=e=>{O(a=>{const f=a[e],s=f==="include"?"exclude":f==="exclude"?void 0:"include",w={...a};return s?w[e]=s:delete w[e],w})};T(()=>{let e=!1;const a=()=>{e||(window.requestAnimationFrame(()=>{window.innerHeight+window.scrollY>=document.body.offsetHeight-500&&G&&!I&&x(),e=!1}),e=!0)};return window.addEventListener("scroll",a),()=>window.removeEventListener("scroll",a)},[G,I,x]);const q=new Date().getFullYear(),U=[{value:"ALL",label:"All Years"},...Array.from({length:q-1980+1},(e,a)=>({value:String(q-a),label:String(q-a)}))],R=[{value:"ALL",label:"All Studios"},...D.map(e=>({value:e,label:e}))];return t("div",{className:"page-container",children:[t("div",{className:n.header,children:[t("h1",{className:n.pageTitle,children:"Search Anime"}),t("p",{className:n.pageSubtitle,children:"Search through thousands of titles and discover your next favorite"})]}),t("div",{className:n.filterContainer,children:[t("div",{className:n.searchBarWrapper,children:[t("div",{className:n.inputIconWrapper,children:[t(W,{className:n.searchIcon}),t("input",{className:n.searchInput,placeholder:"Search by title, character, or studio...",value:m,onInput:e=>L(e.currentTarget.value),onKeyDown:e=>e.key==="Enter"&&y()})]}),t("div",{className:n.searchActions,children:[t(C,{onClick:y,className:n.searchBtn,children:"Search"}),t("button",{className:`${n.filterToggleBtn} ${b?n.active:""}`,onClick:()=>$(!b),children:[t(X,{size:14}),t("span",{children:"Filters"}),b?t(Z,{size:12}):t(ee,{size:12})]})]})]}),t("div",{className:`${n.advancedFilters} ${b?n.show:""}`,children:[t("div",{className:n.filterDivider}),t("div",{className:n.filterGrid,children:[t("div",{className:n.filterItem,children:[t("label",{children:"Type"}),t("select",{value:o,onChange:e=>d(e.currentTarget.value),children:Pe.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:n.filterItem,children:[t("label",{children:"Season"}),t("select",{value:u,onChange:e=>g(e.currentTarget.value),children:De.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:n.filterItem,children:[t("label",{children:"Year"}),t("select",{value:i,onChange:e=>_(e.currentTarget.value),children:U.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:n.filterItem,children:[t("label",{children:"Country"}),t("select",{value:p,onChange:e=>S(e.currentTarget.value),children:Me.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),R.length>1&&t("div",{className:n.filterItem,children:[t("label",{children:"Studio"}),t(de,{options:R,value:r,onChange:v,placeholder:"All Studios"})]})]}),F.length>0&&t("div",{className:n.genreSection,children:[t("label",{className:n.genreLabel,children:"Genres"}),t("div",{className:n.genreContainer,children:F.map(e=>t("button",{className:`${n.genreButton} ${n[N[e]||""]}`,onClick:()=>j(e),children:e},e))})]}),t("div",{className:n.filterActions,children:[t(C,{variant:"secondary",onClick:()=>{O({}),d("ALL"),g("ALL"),_("ALL"),S("ALL"),v("ALL")},children:"Reset All"}),t(C,{onClick:y,className:n.applyBtn,children:"Apply Filters"})]})]})]}),H&&t(te,{message:Y?.message||"Error"}),t("div",{className:`${n.resultsGrid} ${P?n.lowEnd:""}`,children:[E.map(e=>t(ne,{anime:e},e._id)),(k||I)&&t(re,{})]}),!k&&E.length===0&&t("div",{className:n.noResults,children:[t(W,{size:48,className:n.noResultsIcon}),t("h3",{children:"No results found"}),t("p",{children:"Try adjusting your search or filters to find what you're looking for."})]})]})}export{Je as default};
@@ -0,0 +1 @@
1
+ ._searchableSelect_1e8g9_1{position:relative;width:100%;color:var(--text-primary)}._selectHeader_1e8g9_7{padding:var(--space-3) var(--space-4);border:1px solid var(--border-primary);border-radius:var(--radius-sm);background-color:var(--bg-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;transition:var(--transition-base)}._selectHeader_1e8g9_7:hover{border-color:var(--border-secondary);background-color:var(--bg-elevated)}._dropdown_1e8g9_22{position:absolute;top:100%;left:0;right:0;border:1px solid var(--border-primary);border-top:none;border-radius:0 0 var(--radius-sm) var(--radius-sm);background-color:var(--bg-secondary);z-index:1000;max-height:200px;overflow-y:auto;box-shadow:var(--shadow-lg)}._searchInput_1e8g9_37{width:100%;padding:var(--space-3) var(--space-4);border:none;border-bottom:1px solid var(--border-primary);background-color:var(--bg-secondary);color:var(--text-primary);font-size:var(--font-size-sm)}._optionsList_1e8g9_47{list-style:none;margin:0;padding:0}._option_1e8g9_47{padding:var(--space-3) var(--space-4);cursor:pointer;transition:var(--transition-fast);font-size:var(--font-size-sm)}._option_1e8g9_47:hover{background-color:var(--bg-tertiary);color:var(--accent-light)}._header_1mgrq_1{margin-bottom:var(--space-8);animation:_fadeIn_1mgrq_1 .8s var(--ease-smooth)}._pageTitle_1mgrq_6{font-size:var(--font-size-xl);font-weight:800;color:var(--text-primary);margin:0 0 var(--space-2);letter-spacing:-.02em}._pageSubtitle_1mgrq_14{color:var(--text-tertiary);font-size:var(--font-size-sm);margin:0}._filterContainer_1mgrq_20{background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);padding:var(--space-6);border-radius:var(--radius-xl);margin-bottom:var(--space-10);box-shadow:var(--glass-shadow);animation:_slideUpIn_1mgrq_1 .8s var(--ease-smooth)}._searchBarWrapper_1mgrq_32{display:flex;gap:var(--space-4);align-items:center}._inputIconWrapper_1mgrq_38{flex:1;position:relative}._searchIcon_1mgrq_43{position:absolute;left:var(--space-4);top:50%;transform:translateY(-50%);color:var(--text-tertiary);pointer-events:none;transition:color var(--transition-fast)}._searchInput_1mgrq_53{width:100%;height:52px;padding:0 var(--space-4) 0 3.2rem;background:var(--bg-tertiary);border:1px solid var(--border-primary);border-radius:var(--radius-lg);color:var(--text-primary);font-size:var(--font-size-base);font-family:inherit;transition:all var(--transition-fast)}._searchInput_1mgrq_53:focus{outline:none;border-color:var(--accent);background:var(--bg-elevated);box-shadow:0 0 0 4px var(--accent-glow)}._searchInput_1mgrq_53:focus+._searchIcon_1mgrq_43{color:var(--accent)}._searchActions_1mgrq_77{display:flex;gap:var(--space-3)}._searchBtn_1mgrq_82{height:52px;padding:0 var(--space-8)!important}._filterToggleBtn_1mgrq_87{display:flex;align-items:center;gap:var(--space-2);height:52px;padding:0 var(--space-4);background:#ffffff0d;border:1px solid var(--border-secondary);border-radius:var(--radius-lg);color:var(--text-primary);font-weight:600;font-size:var(--font-size-sm);cursor:pointer;transition:all var(--transition-fast)}._filterToggleBtn_1mgrq_87:hover{background:#ffffff1a;border-color:var(--text-secondary)}._filterToggleBtn_1mgrq_87._active_1mgrq_108{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:0 4px 15px var(--accent-glow)}._advancedFilters_1mgrq_115{max-height:0;overflow:hidden;transition:all .4s cubic-bezier(.4,0,.2,1);opacity:0}._advancedFilters_1mgrq_115._show_1mgrq_122{max-height:1000px;opacity:1;margin-top:var(--space-6)}._filterDivider_1mgrq_128{height:1px;background:var(--border-primary);margin-bottom:var(--space-6)}._filterGrid_1mgrq_134{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--space-6);margin-bottom:var(--space-8)}._filterItem_1mgrq_141{display:flex;flex-direction:column;gap:var(--space-2)}._filterItem_1mgrq_141 label{font-size:.7rem;font-weight:700;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.05em}._filterItem_1mgrq_141 select{height:44px;padding:0 var(--space-4);background:var(--bg-tertiary);border:1px solid var(--border-primary);border-radius:var(--radius-md);color:var(--text-primary);font-size:var(--font-size-sm);font-family:inherit;cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%2371717a' stroke-width='2' viewBox='0 0 12 12'%3E%3Cpolyline points='3 5 6 8 9 5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 1rem center;transition:all var(--transition-fast)}._filterItem_1mgrq_141 select:hover{border-color:var(--border-secondary);background-color:var(--bg-elevated)}._filterItem_1mgrq_141 select:focus{outline:none;border-color:var(--accent)}._genreSection_1mgrq_182{border-top:1px solid var(--border-primary);padding-top:var(--space-6);margin-bottom:var(--space-8)}._genreLabel_1mgrq_188{display:block;font-size:.7rem;font-weight:700;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:var(--space-4)}._genreContainer_1mgrq_198{display:flex;flex-wrap:wrap;gap:var(--space-2)}._genreButton_1mgrq_204{background:#ffffff0d;border:1px solid var(--border-primary);color:var(--text-secondary);padding:.5rem 1rem;border-radius:var(--radius-full);font-size:var(--font-size-xs);font-weight:600;cursor:pointer;transition:all var(--transition-fast)}._genreButton_1mgrq_204:hover{border-color:var(--accent);color:var(--text-primary)}._genreButton_1mgrq_204._include_1mgrq_221{background:#10b9811a;border-color:#10b981;color:#10b981}._genreButton_1mgrq_204._exclude_1mgrq_227{background:#ef44441a;border-color:#ef4444;color:#ef4444;text-decoration:line-through}._filterActions_1mgrq_234{display:flex;justify-content:flex-end;gap:var(--space-4);border-top:1px solid var(--border-primary);padding-top:var(--space-6)}._resultsGrid_1mgrq_242{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:var(--space-6);animation:_fadeIn_1mgrq_1 .5s var(--ease-smooth)}._noResults_1mgrq_249{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-16);text-align:center;color:var(--text-tertiary);animation:_fadeIn_1mgrq_1 .5s var(--ease-smooth)}._noResultsIcon_1mgrq_260{color:var(--border-secondary);margin-bottom:var(--space-6)}._noResults_1mgrq_249 h3{color:var(--text-primary);margin:0 0 var(--space-2)}._noResults_1mgrq_249 p{max-width:400px;margin:0}@keyframes _fadeIn_1mgrq_1{0%{opacity:0}to{opacity:1}}@keyframes _slideUpIn_1mgrq_1{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@media(max-width:1024px){._resultsGrid_1mgrq_242{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}}@media(max-width:768px){._searchBarWrapper_1mgrq_32{flex-direction:column;align-items:stretch}._searchActions_1mgrq_77{display:grid;grid-template-columns:1fr 1fr}._searchBtn_1mgrq_82{padding:0!important}._filterGrid_1mgrq_134{grid-template-columns:repeat(2,1fr)}._resultsGrid_1mgrq_242{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--space-4)}}@media(max-width:480px){._filterGrid_1mgrq_134{grid-template-columns:1fr}}
@@ -0,0 +1 @@
1
+ ._title-preference-container_ql0po_1{margin-bottom:var(--space-6);padding:var(--space-4);border:1px solid var(--border-primary);border-radius:var(--radius-md);background-color:var(--bg-tertiary)}._title-preference-container_ql0po_1 h4{margin-top:0;margin-bottom:var(--space-4);color:var(--text-primary);font-size:var(--font-size-base);font-weight:var(--font-weight-semibold)}._error_ql0po_17{color:var(--danger)}._toggle-button_ql0po_21{position:relative;width:200px;height:40px;background:linear-gradient(135deg,var(--accent) 0%,var(--accent-dark) 100%);border:none;border-radius:20px;cursor:pointer;overflow:hidden;display:flex;align-items:center;justify-content:center;color:#fff;font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);transition:var(--transition-base);box-shadow:var(--shadow-md)}._toggle-button_ql0po_21:hover:not(:disabled){transform:translateY(-2px);box-shadow:var(--shadow-lg);filter:brightness(1.1)}._toggle-button_ql0po_21:disabled{opacity:.7;cursor:not-allowed}._toggle-label_ql0po_51{position:absolute;white-space:nowrap;transition:var(--transition-base)}._settingsHeader_14vlm_1{margin-bottom:var(--space-8);animation:_fadeIn_14vlm_1 .8s var(--ease-smooth)}._pageTitle_14vlm_6{font-size:var(--font-size-xl);font-weight:800;color:var(--text-primary);margin:0 0 var(--space-2);letter-spacing:-.02em}._pageSubtitle_14vlm_14{color:var(--text-tertiary);font-size:var(--font-size-sm);margin:0}._settingsLayout_14vlm_20{display:flex;gap:var(--space-8);align-items:flex-start;animation:_slideUpIn_14vlm_1 .8s var(--ease-smooth)}._sidebar_14vlm_27{width:240px;display:flex;flex-direction:column;gap:var(--space-2);position:sticky;top:var(--space-8)}._sidebarItem_14vlm_36{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-4) var(--space-5);background:transparent;border:1px solid transparent;border-radius:var(--radius-lg);color:var(--text-tertiary);font-weight:600;font-size:var(--font-size-sm);cursor:pointer;transition:all var(--transition-fast);text-align:left}._sidebarItem_14vlm_36:hover{background:#ffffff0d;color:var(--text-primary)}._sidebarItem_14vlm_36._active_14vlm_57{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:0 4px 15px var(--accent-glow)}._sidebarItem_14vlm_36 svg{font-size:1.1rem}._mainContent_14vlm_68{flex:1;min-width:0}._tabContent_14vlm_73{display:flex;flex-direction:column;gap:var(--space-6);animation:_fadeIn_14vlm_1 .4s var(--ease-smooth)}._sectionCard_14vlm_80{background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);padding:var(--space-8);border-radius:var(--radius-xl);box-shadow:var(--glass-shadow)}._sectionCard_14vlm_80 h3{margin:0 0 var(--space-2);font-size:var(--font-size-lg);font-weight:700;color:var(--text-primary)}._sectionCard_14vlm_80 p{color:var(--text-secondary);font-size:var(--font-size-sm);margin:0 0 var(--space-6);line-height:1.6}._settingItem_14vlm_104{border-top:1px solid var(--border-primary);padding-top:var(--space-6)}._settingRow_14vlm_109{display:flex;justify-content:space-between;align-items:center;gap:var(--space-4)}._settingRow_14vlm_109 label{font-size:var(--font-size-base);color:var(--text-secondary);font-weight:500}._controls_14vlm_122{display:flex;gap:var(--space-4);flex-wrap:wrap}._status_14vlm_128{margin-top:var(--space-4);padding:var(--space-3) var(--space-4);background:#8b5cf61a;border-radius:var(--radius-md);color:var(--accent-light);font-size:var(--font-size-sm);font-weight:500}@keyframes _fadeIn_14vlm_1{0%{opacity:0}to{opacity:1}}@keyframes _slideUpIn_14vlm_1{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@media(max-width:900px){._settingsLayout_14vlm_20{flex-direction:column}._sidebar_14vlm_27{width:100%;flex-direction:row;overflow-x:auto;padding-bottom:var(--space-2);position:static}._sidebarItem_14vlm_36{padding:var(--space-3) var(--space-4);white-space:nowrap;flex-shrink:0}._sidebarItem_14vlm_36 span{display:block}}@media(max-width:480px){._sidebarItem_14vlm_36 span{display:none}._sidebarItem_14vlm_36{padding:var(--space-4);justify-content:center}._sectionCard_14vlm_80{padding:var(--space-6)}}._container_ljinx_1{background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);padding:var(--space-8);border-radius:var(--radius-xl);box-shadow:var(--glass-shadow);margin-bottom:var(--space-6)}._sectionCard_ljinx_12{background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);padding:var(--space-8);border-radius:var(--radius-xl);box-shadow:var(--glass-shadow)}._title_ljinx_22{margin:0 0 var(--space-2);font-size:var(--font-size-lg);font-weight:700;color:var(--text-primary)}._signIn_ljinx_29{color:var(--text-secondary);font-size:var(--font-size-sm);margin:0 0 var(--space-6);line-height:1.6}._userInfo_ljinx_36{padding:var(--space-4) var(--space-5);background:#10b9810d;border:1px solid rgba(16,185,129,.2);border-radius:var(--radius-lg);margin-bottom:var(--space-6);display:flex;align-items:center;justify-content:space-between;gap:var(--space-4)}._userInfo_ljinx_36 p{margin:0;color:var(--text-secondary);font-size:var(--font-size-sm)}._userInfo_ljinx_36 strong{color:#10b981}._warning_ljinx_58{color:#f59e0b;font-size:var(--font-size-xs);margin:var(--space-3) 0 0;font-weight:500}._formGroup_ljinx_65{margin-bottom:var(--space-5)}._label_ljinx_69{display:block;margin-bottom:var(--space-2);color:var(--text-tertiary);font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em}._inputWrapper_ljinx_79{display:flex;gap:var(--space-2)}._input_ljinx_79{flex-grow:1;height:48px;padding:0 var(--space-4);background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border-primary);border-radius:var(--radius-lg);font-size:var(--font-size-base);transition:all var(--transition-fast)}._input_ljinx_79:focus{outline:none;border-color:var(--accent);background:var(--bg-elevated);box-shadow:0 0 0 4px var(--accent-glow)}._select_ljinx_103{flex-grow:1;height:48px;padding:0 var(--space-4);background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border-primary);border-radius:var(--radius-lg);font-size:var(--font-size-base);cursor:pointer;transition:all var(--transition-fast);appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%2371717a' stroke-width='2' viewBox='0 0 12 12'%3E%3Cpolyline points='3 5 6 8 9 5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 1rem center}._iconButton_ljinx_120{background:var(--bg-tertiary);border:1px solid var(--border-primary);color:var(--text-secondary);width:48px;height:48px;border-radius:var(--radius-lg);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast)}._iconButton_ljinx_120:hover{background:var(--bg-elevated);color:var(--text-primary);border-color:var(--border-secondary)}._actions_ljinx_140{display:flex;gap:var(--space-3);margin-top:var(--space-6);border-top:1px solid var(--border-primary);padding-top:var(--space-6)}._hr_ljinx_148{border:none;border-top:1px solid var(--border-primary);margin:var(--space-8) 0}@media(max-width:600px){._userInfo_ljinx_36{flex-direction:column;align-items:flex-start}._actions_ljinx_140{flex-direction:column}}._sectionCard_tv3nd_1{background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);padding:var(--space-8);border-radius:var(--radius-xl);box-shadow:var(--glass-shadow);margin-bottom:var(--space-6)}._sectionCard_tv3nd_1 h3{margin:0 0 var(--space-2);font-size:var(--font-size-lg);font-weight:700;color:var(--text-primary)}._sectionCard_tv3nd_1 p{color:var(--text-secondary);font-size:var(--font-size-sm);margin:0 0 var(--space-6);line-height:1.6}._settingItem_tv3nd_26{border-top:1px solid var(--border-primary);padding-top:var(--space-6)}._settingRow_tv3nd_31{display:flex;justify-content:space-between;align-items:center;gap:var(--space-4)}
@@ -0,0 +1 @@
1
+ import{d as a,A,y as G,u as e,S as M,q as B,o as V,g as H}from"./vendor-DdbgYKo4.js";import{B as x}from"./Button-o0l9V_NG.js";import{b as K,o as U,p as $,u as Q,q as Z,r as ee,s as te,t as ne}from"./index-CHVF4D4L.js";import{T as W}from"./ToggleSwitch-CLnWnAuY.js";const D={"title-preference-container":"_title-preference-container_ql0po_1","toggle-button":"_toggle-button_ql0po_21","toggle-label":"_toggle-label_ql0po_51"},P=["name","nativeName","englishName"],O={name:"Default (Romaji)",nativeName:"Native",englishName:"English"},ae=()=>{const{titlePreference:s,setTitlePreference:m,loading:d}=K(),[u,f]=a(O[s]),[y,r]=a(!1),n=A(null);G(()=>{d||f(O[s])},[s,d]);const i=async()=>{if(y)return;r(!0);const b=(P.indexOf(s)+1)%P.length,C=P[b],o=O[C];n.current&&(n.current.style.transform="translateX(-100%)",n.current.style.opacity="0"),setTimeout(async()=>{f(o),m(C),n.current&&(n.current.style.transition="none",n.current.style.transform="translateX(100%)",n.current.style.opacity="0",n.current.offsetWidth,n.current.style.transition="transform 0.3s ease-out, opacity 0.3s ease-out",n.current.style.transform="translateX(0)",n.current.style.opacity="1");try{await fetch("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:"titlePreference",value:C})})}catch(S){console.error("Error saving title preference:",S)}finally{r(!1)}},300)};return d?e("p",{children:"Loading title preference..."}):e("div",{className:D["title-preference-container"],children:[e("h4",{children:"Anime Title Display Preference"}),e("button",{onClick:i,className:D["toggle-button"],disabled:y,children:e("span",{ref:n,className:D["toggle-label"],children:u})})]})},se="_settingsHeader_14vlm_1",ie="_pageTitle_14vlm_6",re="_pageSubtitle_14vlm_14",oe="_settingsLayout_14vlm_20",ce="_sidebar_14vlm_27",le="_sidebarItem_14vlm_36",de="_active_14vlm_57",ue="_mainContent_14vlm_68",he="_tabContent_14vlm_73",ge="_sectionCard_14vlm_80",me="_settingItem_14vlm_104",fe="_controls_14vlm_122",pe="_status_14vlm_128",l={settingsHeader:se,pageTitle:ie,pageSubtitle:re,settingsLayout:oe,sidebar:ce,sidebarItem:le,active:de,mainContent:ue,tabContent:he,sectionCard:ge,settingItem:me,controls:fe,status:pe};function E({show:s,message:m,type:d,onClose:u,showConfirmButton:f=!1,onConfirm:y,confirmButtonText:r="Confirm",cancelButtonText:n="Cancel"}){return s?e("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0, 0, 0, 0.6)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:9999,padding:"1rem",backdropFilter:"blur(3px)"},onClick:u,children:e("div",{style:{backgroundColor:"var(--bg-secondary)",padding:"1.5rem",borderRadius:"var(--radius-lg)",maxWidth:"400px",width:"100%",boxShadow:"var(--shadow-xl)",border:"1px solid var(--border-primary)"},onClick:i=>i.stopPropagation(),children:[e("p",{style:{color:"var(--text-secondary)",marginBottom:"1.5rem"},children:m}),e("div",{style:{display:"flex",gap:"0.75rem",justifyContent:"flex-end"},children:f?e(M,{children:[e(x,{variant:"secondary",onClick:u,children:n}),e(x,{variant:"danger",onClick:y,children:r})]}):e(x,{onClick:u,children:"OK"})})]})}):null}const ye="_sectionCard_ljinx_12",we="_title_ljinx_22",ve="_signIn_ljinx_29",be="_userInfo_ljinx_36",Ce="_warning_ljinx_58",_e="_formGroup_ljinx_65",Se="_label_ljinx_69",Ne="_inputWrapper_ljinx_79",ke="_input_ljinx_79",Ie="_select_ljinx_103",xe="_iconButton_ljinx_120",Te="_actions_ljinx_140",Re="_hr_ljinx_148",t={sectionCard:ye,title:we,signIn:ve,userInfo:be,warning:Ce,formGroup:_e,label:Se,inputWrapper:Ne,input:ke,select:Ie,iconButton:xe,actions:Te,hr:Re},Ge=()=>{const[s,m]=a(!0),[d,u]=a(!1),[f,y]=a(!1),[r,n]=a(null),[i,w]=a({status:"idle"}),[b,C]=a(!1),o=A(null),[S,N]=a({show:!1,message:"",type:"info"}),c=()=>{o.current&&(window.clearInterval(o.current),o.current=null)},k=B(g=>{y(g.authenticated),n(g.user||g.device.user||null),w(g.device),C(g.usingDefaultClientId)},[]),I=B(async()=>{const R=await(await fetch("/api/auth/github/status")).json();k(R)},[k]),p=async()=>{try{const R=await(await fetch("/api/auth/github/poll")).json();w(R),R.status==="success"?(c(),await I(),N({show:!0,message:"GitHub authentication complete. Sync has been initialized.",type:"success"})):R.status==="error"&&(c(),N({show:!0,message:R.error||"GitHub authentication failed.",type:"error"}))}catch{c(),N({show:!0,message:"Failed to poll GitHub authentication status.",type:"error"})}},v=(g=5)=>{c(),o.current=window.setInterval(p,Math.max(g,5)*1e3)};G(()=>(I().catch(()=>{N({show:!0,message:"Failed to load GitHub sync status.",type:"error"})}).finally(()=>m(!1)),c),[I]);const L=async()=>{u(!0);try{const g=await fetch("/api/auth/github/start",{method:"POST"}),R=await g.json();if(!g.ok)throw new Error("Failed to start GitHub authentication.");w(R),v(R.verification?.interval)}catch(g){N({show:!0,message:g instanceof Error?g.message:"Failed to start GitHub authentication.",type:"error"})}finally{u(!1)}},j=async()=>{try{await fetch("/api/auth/github/logout",{method:"POST"}),y(!1),n(null),w({status:"idle"}),N({show:!0,message:"Signed out of GitHub sync.",type:"success"})}catch{N({show:!0,message:"Failed to sign out of GitHub.",type:"error"})}};return s?e("div",{style:{color:"var(--text-secondary)",padding:"1.5rem"},children:"Loading..."}):e("div",{className:t.sectionCard,children:[e("h3",{className:t.title,children:"GitHub Cloud Sync"}),e("p",{className:t.signIn,children:"Primary sync provider. Sync local data through a private GitHub repository named aniweb-sync-data."}),f&&r?e("div",{className:t.userInfo,children:[e("p",{children:["Signed in as: ",e("strong",{children:r.name||r.login})]}),e(x,{variant:"danger",onClick:j,children:"Sign Out"})]}):e("div",{className:t.signIn,children:[e(x,{onClick:L,disabled:d||i.status==="pending",children:d||i.status==="pending"?"Waiting for GitHub...":"Sign in with GitHub"}),b&&e("p",{className:t.warning,children:"Using the bundled ani-web GitHub OAuth app. Set GITHUB_CLIENT_ID in the server environment to use your own OAuth app instead."})]}),i.status==="pending"&&i.verification&&e(M,{children:[e("hr",{className:t.hr}),e("div",{className:t.formGroup,children:[e("label",{className:t.label,children:"Verification URL"}),e("div",{className:t.inputWrapper,children:[e("input",{className:t.input,value:i.verification.verification_uri,readOnly:!0}),e(x,{onClick:()=>window.open(i.verification?.verification_uri,"_blank"),children:"Open"})]})]}),e("div",{className:t.formGroup,children:[e("label",{className:t.label,children:"Device Code"}),e("input",{className:t.input,value:i.verification.user_code,readOnly:!0})]})]}),i.status==="error"&&e("p",{className:t.warning,children:i.error}),e(E,{show:S.show,message:S.message,type:S.type,onClose:()=>N(g=>({...g,show:!1}))})]})},je=()=>{const[s,m]=a(""),[d,u]=a(""),[f,y]=a(!1),[r,n]=a(!1),[i,w]=a(!0),[b,C]=a(null),[o,S]=a(""),[N,c]=a(!1),[k,I]=a(!1),[p,v]=a({show:!1,message:"",type:"info"}),L=async()=>{try{const T=await(await fetch("/api/auth/user")).json();C(T)}catch{C(null)}},j=async()=>{try{const T=await(await fetch("/api/auth/google")).json();S(T.url)}catch(h){console.error("Failed to fetch auth URL",h)}},g=async()=>{try{const T=await(await fetch("/api/auth/config-status")).json();c(T.hasConfig)}catch(h){console.error("Failed to fetch config status",h)}};G(()=>{(async()=>(w(!0),await Promise.all([L(),g(),fetch("/api/auth/google-auth").then(_=>_.json()).then(_=>{m(_.clientId||""),u(""),I(!!_.hasClientSecret),_.clientId&&j()}).catch(_=>console.error("Failed to fetch auth config",_))]),w(!1)))();const T=_=>{_.data.type==="GOOGLE_AUTH_SUCCESS"&&(C(_.data.user),window.location.reload())};return window.addEventListener("message",T),()=>window.removeEventListener("message",T)},[]);const R=async()=>{if(!s&&!d&&!k){v({show:!0,message:"Please enter a Client ID and Client Secret to save.",type:"info"});return}try{const h={clientId:s};d&&(h.clientSecret=d);const T=await fetch("/api/auth/google-auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(h)});if(T.ok)d&&(I(!0),u("")),v({show:!0,message:"Configuration saved successfully. You must restart the server for these changes to take effect.",type:"success"}),g(),s&&j();else{const _=await T.json().catch(()=>({}));v({show:!0,message:_.error||"Failed to save configuration.",type:"error"})}}catch{v({show:!0,message:"Failed to save configuration.",type:"error"})}},z=()=>{v({show:!0,message:"Are you sure you want to clear your Google authentication configuration? This will sign you out and remove all stored credentials.",type:"info",showConfirmButton:!0,onConfirm:()=>{v({show:!1,message:"",type:"info"}),q()},confirmButtonText:"Clear",cancelButtonText:"Cancel"})},q=async()=>{m(""),u(""),I(!1);try{if((await fetch("/api/auth/google-auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({clientId:"",clientSecret:""})})).ok)v({show:!0,message:"Configuration cleared successfully. You must restart the server for these changes to take effect.",type:"success"}),g();else throw new Error("Failed to clear")}catch{v({show:!0,message:"Failed to clear configuration.",type:"error"})}},J=()=>{if(o){const _=window.innerWidth/2-300,Y=window.innerHeight/2-700/2;window.open(o,"GoogleAuth",`width=600,height=700,top=${Y},left=${_}`)}else v({show:!0,message:"Authentication URL not available. Ensure server is configured correctly.",type:"error"})},X=async()=>{try{await fetch("/api/auth/logout",{method:"POST"}),C(null),v({show:!0,message:"Successfully signed out.",type:"success"}),window.location.reload()}catch(h){console.error("Sign out failed",h),v({show:!0,message:"Failed to sign out.",type:"error"})}};return i?e("div",{style:{color:"var(--text-secondary)",padding:"1.5rem"},children:"Loading..."}):e("div",{className:t.sectionCard,children:[e("h3",{className:t.title,children:"Google Authentication"}),b?e("div",{className:t.userInfo,children:[e("p",{children:["Signed in as: ",e("strong",{children:b.name})," (",b.email,")"]}),e(x,{variant:"danger",onClick:X,children:"Sign Out"})]}):e("div",{className:t.signIn,children:[e("p",{children:"Sign in with your Google account to enable synchronization features."}),e(x,{onClick:J,disabled:!N,children:"Sign in with Google"}),!N&&e("p",{className:t.warning,children:"Google authentication is not configured. Please set up Client ID and Secret below."})]}),e("hr",{className:t.hr}),e("div",{className:t.formGroup,children:[e("label",{className:t.label,children:"Client ID"}),e("div",{className:t.inputWrapper,children:[e("input",{type:f?"text":"password",className:t.input,value:s,onChange:h=>m(h.currentTarget.value),placeholder:"Enter Google Client ID"}),e("button",{className:t.iconButton,onClick:()=>y(!f),children:f?e(U,{}):e($,{})})]})]}),e("div",{className:t.formGroup,children:[e("label",{className:t.label,children:"Client Secret"}),e("div",{className:t.inputWrapper,children:[e("input",{type:r?"text":"password",className:t.input,value:d,onChange:h=>u(h.currentTarget.value),placeholder:k?"Stored securely. Enter a new secret only to replace it.":"Enter Google Client Secret"}),e("button",{className:t.iconButton,onClick:()=>n(!r),children:r?e(U,{}):e($,{})})]})]}),k&&!d&&e("p",{className:t.warning,children:"A client secret is already stored and will be kept unless you replace or clear it."}),e("div",{className:t.actions,children:[e(x,{onClick:R,children:"Save Config"}),e(x,{variant:"secondary",onClick:z,children:"Clear Config"})]}),e(E,{show:p.show,message:p.message,type:p.type,onClose:()=>v(h=>({...h,show:!1})),showConfirmButton:p.showConfirmButton,onConfirm:p.onConfirm,confirmButtonText:p.confirmButtonText,cancelButtonText:p.cancelButtonText})]})},Le="_sectionCard_tv3nd_1",De="_settingItem_tv3nd_26",Pe="_settingRow_tv3nd_31",F={sectionCard:Le,settingItem:De,settingRow:Pe},Oe=()=>{const[s,m]=a(!1),[d,u]=a(!0),[f,y]=a(!1);G(()=>{(async()=>{try{const w=await(await fetch("/api/settings?key=skipRemoveConfirmation")).json();String(w.value)==="true"||String(w.value)==="1"?m(!0):m(!1)}catch(i){console.error("Failed to fetch setting",i)}finally{u(!1)}})()},[]);const r=async()=>{if(f)return;y(!0);const n=!s;m(n);try{await fetch("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:"skipRemoveConfirmation",value:n})})}catch(i){console.error("Error saving setting:",i),m(!n)}finally{y(!1)}};return d?e("div",{children:"Loading settings..."}):e("div",{className:F.sectionCard,children:[e("h3",{children:"Watchlist Preferences"}),e("p",{children:"Customize your experience when managing your watchlist and series entries."}),e("div",{className:F.settingItem,children:e("div",{className:F.settingRow,children:[e("label",{htmlFor:"skip-confirmation-toggle",children:"Skip confirmation when removing from watchlist"}),e(W,{isChecked:s,onChange:r,id:"skip-confirmation-toggle",disabled:f})]})})]})},Fe=()=>{const[s,m]=a(""),[d,u]=a([]),[f,y]=a(null),[r,n]=a(!0),[i,w]=a({show:!1,message:"",type:"info"}),b=async()=>{try{n(!0);const S=await(await fetch("/api/auth/settings/rclone")).json();m(S.remote||""),u(S.availableRemotes||[]),y(S.activeRemote||null)}catch(o){console.error("Failed to fetch Rclone settings",o)}finally{n(!1)}};G(()=>{b()},[]);const C=async()=>{try{if((await fetch("/api/auth/settings/rclone",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({remote:s})})).ok)w({show:!0,message:"Rclone configuration saved successfully. You must restart the server for these changes to take effect.",type:"success"}),b();else throw new Error("Failed to save")}catch{w({show:!0,message:"Failed to save Rclone configuration.",type:"error"})}};return r?e("div",{style:{color:"var(--text-secondary)",padding:"1.5rem"},children:"Loading..."}):e("div",{className:t.sectionCard,children:[e("h3",{className:t.title,children:"Rclone Cloud Sync"}),e("p",{className:t.signIn,children:"Configure which Rclone remote to use for database synchronization."}),f?e("div",{className:t.userInfo,children:e("p",{children:["Current Active Remote: ",e("strong",{children:f})]})}):e("p",{className:t.warning,style:{marginBottom:"1.5rem"},children:"Rclone sync is not currently active. Ensure rclone is installed and a remote is configured."}),e("div",{className:t.formGroup,children:[e("label",{className:t.label,children:"Remote Name"}),e("div",{className:t.inputWrapper,children:e("select",{className:t.select,value:s,onChange:o=>m(o.target.value),children:[e("option",{value:"",children:"(Disabled / None)"}),d.map(o=>e("option",{value:o,children:o},o)),s&&!d.includes(s)&&e("option",{value:s,children:[s," (Manual)"]})]})}),e("p",{className:t.warning,style:{marginTop:"12px"},children:[e("strong",{children:"Priority Note:"})," GitHub sync takes priority when configured, followed by Google Drive. Rclone is used only when neither higher-priority provider is active."]})]}),e("div",{className:t.actions,children:e(x,{onClick:C,children:"Save Rclone Settings"})}),e(E,{show:i.show,message:i.message,type:i.type,onClose:()=>w(o=>({...o,show:!1}))})]})},Ue=()=>{const[s,m]=V(),d=s.get("tab"),[u,f]=a(d&&["general","sync","watchlist","database"].includes(d)?d:"general"),[y,r]=a(""),n=A(null),{lowEndMode:i,setLowEndMode:w}=Q();H.useEffect(()=>{document.title="Settings - ani-web"},[]),H.useEffect(()=>{const c=s.get("tab");c&&["general","sync","watchlist","database"].includes(c)&&f(c)},[s]);const b=c=>{f(c),m(c==="general"?{}:{tab:c})},C=async()=>{r("Backing up database...");try{const c=await fetch("/api/backup-db");if(c.ok){const k=await c.blob(),I=window.URL.createObjectURL(k),p=document.createElement("a");p.href=I,p.download="ani-web-backup.db",document.body.appendChild(p),p.click(),p.remove(),window.URL.revokeObjectURL(I),r("Database backup successful!")}else{const k=await c.json();r(`Backup failed: ${k.error}`)}}catch{r("Backup failed: An unexpected error occurred.")}},o=async c=>{const k=c.target.files?.[0];if(!k)return;r("Restoring database...");const I=new FormData;I.append("dbfile",k);try{const p=await fetch("/api/restore-db",{method:"POST",body:I}),v=await p.json();p.ok?(r(v.message||"Database restored successfully!"),setTimeout(()=>window.location.reload(),2e3)):r(`Restore failed: ${v.error}`)}catch{r("Restore failed: An unexpected error occurred.")}},S=()=>{n.current?.click()},N=()=>{switch(u){case"general":return e("div",{className:l.tabContent,children:e("div",{className:l.sectionCard,children:[e("h3",{children:"Appearance & Preferences"}),e("p",{children:"Configure how titles are displayed and other general preferences."}),e("div",{className:l.settingItem,children:e(ae,{})}),e("div",{className:l.settingItem,style:{marginTop:"1.5rem"},children:e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[e("div",{children:[e("h4",{style:{margin:0,fontSize:"1rem"},children:"Low End Mode"}),e("p",{style:{margin:"0.25rem 0 0",fontSize:"0.85rem",color:"var(--text-secondary)"},children:"Disables animations and heavy visual effects for better performance on older hardware."})]}),e(W,{isChecked:i,onChange:c=>w(c.target.checked),id:"low-end-mode"})]})})]})});case"sync":return e("div",{className:l.tabContent,children:[e(Ge,{}),e(je,{}),e(Fe,{})]});case"watchlist":return e("div",{className:l.tabContent,children:e(Oe,{})});case"database":return e("div",{className:l.tabContent,children:e("div",{className:l.sectionCard,children:[e("h3",{children:"Database Management"}),e("p",{children:"Download a backup of your current database or restore from an existing file."}),e("div",{className:l.controls,children:[e(x,{onClick:C,children:"Backup Database"}),e(x,{variant:"secondary",onClick:S,children:"Restore Database"})]}),e("input",{type:"file",ref:n,onChange:o,style:{display:"none"},accept:".db"}),y&&e("p",{className:l.status,children:y})]})});default:return null}};return e("div",{className:"page-container",children:[e("div",{className:l.settingsHeader,children:[e("h1",{className:l.pageTitle,children:"Settings"}),e("p",{className:l.pageSubtitle,children:"Manage your preferences and data synchronization"})]}),e("div",{className:l.settingsLayout,children:[e("aside",{className:l.sidebar,children:[e("button",{className:`${l.sidebarItem} ${u==="general"?l.active:""}`,onClick:()=>b("general"),children:[e(Z,{})," ",e("span",{children:"General"})]}),e("button",{className:`${l.sidebarItem} ${u==="sync"?l.active:""}`,onClick:()=>b("sync"),children:[e(ee,{})," ",e("span",{children:"Synchronization"})]}),e("button",{className:`${l.sidebarItem} ${u==="watchlist"?l.active:""}`,onClick:()=>b("watchlist"),children:[e(te,{})," ",e("span",{children:"Watchlist"})]}),e("button",{className:`${l.sidebarItem} ${u==="database"?l.active:""}`,onClick:()=>b("database"),children:[e(ne,{})," ",e("span",{children:"Database"})]})]}),e("main",{className:l.mainContent,children:N()})]})]})};export{Ue as default};
@@ -0,0 +1 @@
1
+ import{u as s}from"./vendor-DdbgYKo4.js";const i="_slider_t1l8y_14",t={switch:"_switch_t1l8y_1",slider:i},a=({isChecked:l,onChange:c,id:e,disabled:r=!1})=>s("label",{className:t.switch,htmlFor:e,children:[s("input",{type:"checkbox",id:e,checked:l,onChange:c,disabled:r}),s("span",{className:t.slider})]});export{a as T};
@@ -0,0 +1 @@
1
+ ._switch_t1l8y_1{position:relative;display:inline-block;width:48px;height:24px}._switch_t1l8y_1 input{opacity:0;width:0;height:0}._slider_t1l8y_14{position:absolute;cursor:pointer;inset:0;background-color:#ffffff1a;border:1px solid var(--border-primary);transition:var(--transition-base);border-radius:24px}._slider_t1l8y_14:before{position:absolute;content:"";height:18px;width:18px;left:3px;bottom:2px;background-color:var(--text-secondary);transition:var(--transition-base);border-radius:50%;box-shadow:var(--shadow-sm)}input:checked+._slider_t1l8y_14{background-color:#8b5cf633;border-color:var(--accent)}input:checked+._slider_t1l8y_14:before{transform:translate(22px);background-color:var(--accent);box-shadow:0 0 10px var(--accent-glow)}input:focus+._slider_t1l8y_14{box-shadow:0 0 0 2px #8b5cf633}
@@ -0,0 +1 @@
1
+ ._header_13dil_1{margin-bottom:var(--space-8);animation:_fadeIn_13dil_1 .8s var(--ease-smooth)}._title_13dil_6{font-size:var(--font-size-xl);font-weight:800;color:var(--text-primary);margin:0 0 var(--space-2);letter-spacing:-.02em}._subtitle_13dil_14{color:var(--text-tertiary);font-size:var(--font-size-sm);margin:0;font-weight:500}._controls_13dil_21{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:var(--space-6);margin-bottom:var(--space-10);background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);padding:var(--space-4) var(--space-6);border-radius:var(--radius-xl);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow);animation:_slideUpIn_13dil_1 .8s var(--ease-smooth)}._filters_13dil_38{display:flex;flex-wrap:wrap;gap:var(--space-2)}._filterBtn_13dil_44{background:#ffffff0d;color:var(--text-secondary);border:1px solid var(--border-primary);padding:.6rem 1.2rem;border-radius:var(--radius-full);font-size:var(--font-size-sm);font-weight:600;transition:all var(--transition-base);cursor:pointer}._filterBtn_13dil_44:hover{background:#ffffff1a;color:var(--text-primary);border-color:var(--text-tertiary)}._filterBtn_13dil_44._active_13dil_62{background:var(--accent);color:#fff;border-color:var(--accent);box-shadow:0 4px 15px var(--accent-glow)}._sortSelect_13dil_69{width:180px;height:44px;padding:0 var(--space-4);background-color:var(--bg-tertiary);border:1px solid var(--border-primary);border-radius:var(--radius-lg);color:var(--text-primary);font-size:var(--font-size-sm);font-weight:600;cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%2371717a' stroke-width='2' viewBox='0 0 12 12'%3E%3Cpolyline points='3 5 6 8 9 5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 1rem center;transition:all var(--transition-fast)}._sortSelect_13dil_69:hover{background-color:var(--bg-elevated);border-color:var(--border-secondary)}._sortSelect_13dil_69:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}._grid_13dil_98{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:var(--space-6);animation:_fadeIn_13dil_1 .5s var(--ease-smooth)}._itemWrapper_13dil_105{display:flex;flex-direction:column;height:100%;transition:transform var(--transition-base)}._itemWrapper_13dil_105:hover{transform:translateY(-4px)}._cardActions_13dil_116{margin-top:var(--space-3);display:flex;gap:var(--space-2)}._statusSelect_13dil_122{flex-grow:1;height:40px;padding:0 var(--space-3);background-color:var(--bg-tertiary);border:1px solid var(--border-primary);border-radius:var(--radius-md);color:var(--text-primary);font-size:var(--font-size-xs);font-weight:600;cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' fill='none' stroke='%2371717a' stroke-width='2' viewBox='0 0 12 12'%3E%3Cpolyline points='3 5 6 8 9 5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center;transition:all var(--transition-fast)}._statusSelect_13dil_122:hover{background-color:var(--bg-elevated);border-color:var(--accent)}._removeBtn_13dil_145{background:#ef44441a;color:#ef4444;border:1px solid rgba(239,68,68,.2);width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-md);transition:all var(--transition-base);cursor:pointer}._removeBtn_13dil_145:hover{background:#ef4444;color:#fff;border-color:#ef4444;box-shadow:0 0 15px #ef444466}._emptyState_13dil_166{text-align:center;padding:var(--space-16) var(--space-4);color:var(--text-tertiary);background:var(--glass-bg);border:1px dashed var(--border-primary);border-radius:var(--radius-xl);font-size:var(--font-size-base);font-weight:500;animation:_fadeIn_13dil_1 .5s var(--ease-smooth)}@keyframes _fadeIn_13dil_1{0%{opacity:0}to{opacity:1}}@keyframes _slideUpIn_13dil_1{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@media(max-width:1024px){._grid_13dil_98{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}}@media(max-width:768px){._controls_13dil_21{flex-direction:column;align-items:stretch;padding:var(--space-4)}._sortSelect_13dil_69{width:100%}._grid_13dil_98{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--space-4)}}
@@ -0,0 +1 @@
1
+ import{j as H,f as Q,b as J,d as C,T as W,y as K,c as w,u as t,S as U}from"./vendor-DdbgYKo4.js";import{u as Z,j as G,k as Y,z as V,d as X,l as ee,m as te,n as ne}from"./index-CHVF4D4L.js";import{S as x,E as ae,a as ie}from"./ErrorMessage-Ddf2zmRx.js";import{R as se}from"./RemoveConfirmationModal-CLYqyGOv.js";import"./useAnimeInfoData-Cr58brCY.js";import"./useIsMobile-gHo4t6g6.js";import"./Button-o0l9V_NG.js";const oe="_header_13dil_1",re="_title_13dil_6",ce="_subtitle_13dil_14",le="_controls_13dil_21",de="_filters_13dil_38",me="_filterBtn_13dil_44",ue="_active_13dil_62",he="_sortSelect_13dil_69",ge="_grid_13dil_98",pe="_itemWrapper_13dil_105",_e="_cardActions_13dil_116",fe="_statusSelect_13dil_122",ve="_removeBtn_13dil_145",Ne="_emptyState_13dil_166",a={header:oe,title:re,subtitle:ce,controls:le,filters:de,filterBtn:me,active:ue,sortSelect:he,grid:ge,itemWrapper:pe,cardActions:_e,statusSelect:fe,removeBtn:ve,emptyState:Ne},P=["All","Continue Watching","Watching","Completed","On-Hold","Dropped","Planned"],Se=P.slice(2),Le=()=>{const{filter:c="All"}=H(),T=Q(),m=J(),[o,A]=C("last_added"),{lowEndMode:L}=Z(),[s,r]=C(null),i=c==="Continue Watching",{data:u,isLoading:R,error:k,fetchNextPage:F,hasNextPage:B,isFetchingNextPage:b}=G(),{data:h,isLoading:E,error:O,fetchNextPage:M,hasNextPage:$,isFetchingNextPage:j}=Y(c),g=W(()=>i?u?.pages||[]:h?.pages||[],[i,u,h]),p=i?R:E,_=i?k:O,f=i?F:M,v=i?B:$,l=i?b:j;K(()=>{let e=!1;const n=()=>{e||(window.requestAnimationFrame(()=>{window.innerHeight+window.scrollY>=document.body.offsetHeight-800&&v&&!l&&f(),e=!1}),e=!0)};return window.addEventListener("scroll",n),()=>window.removeEventListener("scroll",n)},[v,l,f]);const q=w({mutationFn:async({id:e,status:n})=>{await fetch("/api/watchlist/status",{method:"POST",body:JSON.stringify({id:e,status:n}),headers:{"Content-Type":"application/json"}})},onSuccess:()=>{m.invalidateQueries({queryKey:["watchlist"]}),V.success("Status updated")}}),z=w({mutationFn:async e=>{await fetch("/api/continue-watching/remove",{method:"POST",body:JSON.stringify({showId:e}),headers:{"Content-Type":"application/json"}})},onSuccess:()=>m.invalidateQueries({queryKey:["allContinueWatching"]})}),d=X(),{data:N}=ee("skipRemoveConfirmation"),I=te(),S=W(()=>[...g].sort((e,n)=>o==="name_asc"?e.name.localeCompare(n.name):o==="name_desc"?n.name.localeCompare(e.name):0),[g,o]),y=(e,n)=>{if(i){r({id:e,name:n});return}String(N)==="true"||String(N)==="1"?d.mutate(e):r({id:e,name:n})},D=e=>{s&&(i?(z.mutate(s.id),e.removeFromWatchlist&&d.mutate(s.id)):d.mutate(s.id),e.rememberPreference&&I.mutate({key:"skipRemoveConfirmation",value:!0}),r(null))};return t("div",{className:"page-container",children:[t("header",{className:a.header,children:[t("h2",{className:a.title,children:"My Watchlist"}),t("p",{className:a.subtitle,children:"Track and manage your anime collection"})]}),t("div",{className:a.controls,children:[t("div",{className:a.filters,children:P.map(e=>t("button",{className:`${a.filterBtn} ${c===e?a.active:""}`,onClick:()=>T(`/watchlist/${e}`),children:e},e))}),t("div",{children:t("select",{className:a.sortSelect,value:o,onChange:e=>A(e.currentTarget.value),children:[t("option",{value:"last_added",children:"Recently Added"}),t("option",{value:"name_asc",children:"Name (A-Z)"}),t("option",{value:"name_desc",children:"Name (Z-A)"})]})})]}),p?t(x,{}):_?t(ae,{message:_.message}):t(U,{children:[t("div",{className:`${a.grid} ${L?a.lowEnd:""}`,children:S.map(e=>t("div",{className:a.itemWrapper,children:[t(ie,{anime:e,continueWatching:i,onRemove:()=>y(e.id,e.name),layout:"horizontal"}),!i&&t("div",{className:a.cardActions,children:[t("select",{className:a.statusSelect,value:e.status,onChange:n=>q.mutate({id:e.id,status:n.currentTarget.value}),children:Se.map(n=>t("option",{value:n,children:n},n))}),t("button",{className:a.removeBtn,onClick:()=>y(e.id,e.name),title:"Remove from Watchlist",children:t(ne,{size:12})})]})]},e._id))}),l&&t(x,{count:6})]}),!p&&S.length===0&&t("div",{className:a.emptyState,children:t("p",{children:"No anime found in this list."})}),t(se,{isOpen:!!s,onClose:()=>r(null),onConfirm:D,animeName:s?.name||"",scenario:i?"continueWatching":"watchlist"})]})};export{Le as default};