@serifpersia/dango 3.4.1 → 3.4.3
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.
- package/README.md +1 -1
- package/client/dist/assets/{AnimeCard-B0oMgXBm.js → AnimeCard-Chlfp7Cm.js} +1 -1
- package/client/dist/assets/AnimeInfo-C1XZcEzj.js +1 -0
- package/client/dist/assets/AnimeInfoPage-BvNYYbe1.js +2 -0
- package/client/dist/assets/{AnimeMetaDetails-BPvv5xIl.js → AnimeMetaDetails-BogOi_bM.js} +1 -1
- package/client/dist/assets/Asmr-_jVaYDfT.js +2 -0
- package/client/dist/assets/{AsmrResetProgressModal-C9R7HlNa.js → AsmrResetProgressModal-ngn9hdA0.js} +1 -1
- package/client/dist/assets/AvSyncCalibrator-C2wu1ydI.css +1 -0
- package/client/dist/assets/AvSyncCalibrator-Rcv7aubm.js +10 -0
- package/client/dist/assets/{ErrorMessage-z4f4WGgP.js → ErrorMessage-DAxegITP.js} +1 -1
- package/client/dist/assets/Home-B6bte0tw.css +1 -0
- package/client/dist/assets/Home-CEbLBbmD.js +1 -0
- package/client/dist/assets/Insights-Bia4rfp0.js +1 -0
- package/client/dist/assets/{LibraryListPage-B_r51cRi.js → LibraryListPage-BVHcMPqZ.js} +1 -1
- package/client/dist/assets/{ListeningList-BWnwvJTt.js → ListeningList-DpRNQKk7.js} +1 -1
- package/client/dist/assets/{Manga-CI5cZg3h.js → Manga-wHddjSTh.js} +1 -1
- package/client/dist/assets/MangaInfoPage-CVz8z5wn.js +1 -0
- package/client/dist/assets/MangaReadPage-CC3cgtIZ.js +1 -0
- package/client/dist/assets/{MangaResetProgressModal-CPMEqZyi.js → MangaResetProgressModal-DD7a0log.js} +1 -1
- package/client/dist/assets/{Map-Dj51g5zL.js → Map-BtXwpBOC.js} +1 -1
- package/client/dist/assets/Mature-D8uFpIDj.js +1 -0
- package/client/dist/assets/{MediaCard-DzA336CA.js → MediaCard-6Yy_-Whn.js} +1 -1
- package/client/dist/assets/Music-BgM0bcAU.js +1 -0
- package/client/dist/assets/{OptionListMenu-CpwxAC3J.js → OptionListMenu-C9saW22f.js} +1 -1
- package/client/dist/assets/Player-EwAWFxqQ.js +56 -0
- package/client/dist/assets/{PlayerRedirect-D70t8VUW.js → PlayerRedirect-fv2tzEUu.js} +1 -1
- package/client/dist/assets/PlayerSettings-BYqhlu3F.js +1 -0
- package/client/dist/assets/{QueueOptionsButton-1M7MdKzM.js → QueueOptionsButton-BJhkcl2X.js} +1 -1
- package/client/dist/assets/{QueueRail-Bpla2xD8.js → QueueRail-BLfkt_s5.js} +1 -1
- package/client/dist/assets/Radio-D2Er2JEU.js +1 -0
- package/client/dist/assets/{ReadingList-wJMDUybm.js → ReadingList-DWOnwYO1.js} +1 -1
- package/client/dist/assets/{ResetProgressModal-CByRM1Fh.js → ResetProgressModal-HUj5zATK.js} +1 -1
- package/client/dist/assets/{Search-B94D0tRM.js → Search-CzD9J9ip.js} +1 -1
- package/client/dist/assets/Settings-BgUothvZ.js +21 -0
- package/client/dist/assets/{SkeletonGrid-BJyZkg_K.js → SkeletonGrid-C7Gj9ODL.js} +1 -1
- package/client/dist/assets/{SynopsisText-BcpwT5iw.js → SynopsisText-B3Sa5pRv.js} +1 -1
- package/client/dist/assets/{Trackers-vz-gqxtm.js → Trackers-BoC2z0Nd.js} +2 -2
- package/client/dist/assets/Tv-Bx7tGS57.css +1 -0
- package/client/dist/assets/Tv-Q8TIMWaP.js +4 -0
- package/client/dist/assets/TvInfo-C6JoNbev.js +1 -0
- package/client/dist/assets/{TvPopup-CqlVRF-Y.js → TvPopup-BArrygql.js} +1 -1
- package/client/dist/assets/{TvSearch-BcKXQue9.js → TvSearch-BsoJ7WZp.js} +1 -1
- package/client/dist/assets/{TvWatchlist-sjsiup2h.js → TvWatchlist-BFmAd2fE.js} +1 -1
- package/client/dist/assets/{VirtualKeyboard-6ZNTym4R.js → VirtualKeyboard-BmqZPZXR.js} +1 -1
- package/client/dist/assets/{Watchlist-DAMdvt7Z.js → Watchlist-DG5Y--YA.js} +1 -1
- package/client/dist/assets/{hls-Do_n10_Y.js → hls-QeZPjik8.js} +1 -1
- package/client/dist/assets/index-Cc1Up_NI.css +1 -0
- package/client/dist/assets/index-Rm4h42Uz.js +178 -0
- package/client/dist/assets/{useAnimeInfoData-DU9X90no.js → useAnimeInfoData-B9O3Rr_u.js} +1 -1
- package/client/dist/assets/useAsmr-Da7AVA9e.js +1 -0
- package/client/dist/assets/{useAsmrPopup-DK1Vx-HV.js → useAsmrPopup-B_S5s4q3.js} +1 -1
- package/client/dist/assets/{useIsMobile-Dm_b6Ob3.js → useIsMobile-Dvx1uJ82.js} +1 -1
- package/client/dist/assets/useMangaLibrary-COpztbMg.js +1 -0
- package/client/dist/assets/{useMangaPopup-BLwvRZn0.js → useMangaPopup-BJeHmEpe.js} +1 -1
- package/client/dist/assets/{useProviders-D3L1Chqc.js → useProviders-BWRYjB77.js} +1 -1
- package/client/dist/assets/useTv-DtiSJ756.js +1 -0
- package/client/dist/assets/useTvLibrary-DFfgk9YS.js +1 -0
- package/client/dist/assets/{vendor-core-8R2fFbyN.js → vendor-core-DfaOB3Rn.js} +1 -1
- package/client/dist/assets/{vendor-icons-CDMuNDeL.js → vendor-icons-DrybRNxP.js} +1 -1
- package/client/dist/assets/{vendor-query-BUTye89G.js → vendor-query-BBT5_sHx.js} +1 -1
- package/client/dist/assets/{vendor-ui-CUDCvRS_.js → vendor-ui-3qrARCPr.js} +1 -1
- package/client/dist/index.html +5 -5
- package/orchestrator.js +0 -1
- package/package.json +3 -3
- package/server/dist/app-hono.js +15 -37
- package/server/dist/db/drizzle.js +2 -18
- package/server/dist/db.js +3 -2
- package/server/dist/hono/tv.js +9 -5
- package/server/dist/hono/watchlist.js +10 -108
- package/server/dist/lib/migration.js +0 -5
- package/server/dist/providers/remote-loader.js +40 -1
- package/server/dist/providers/remote-types.js +9 -2
- package/server/dist/server.js +50 -182
- package/server/dist/sync.js +173 -704
- package/server/dist/trpc/routers/auth.js +2 -71
- package/server/dist/trpc/routers/continue-watching.js +0 -2
- package/server/dist/trpc/routers/data.js +0 -1
- package/server/dist/trpc/routers/discord.js +8 -0
- package/server/dist/trpc/routers/progress.js +95 -1
- package/server/dist/trpc/routers/queue.js +0 -2
- package/server/dist/trpc/routers/watchlist.js +0 -7
- package/server/dist/trpc/validation.js +64 -0
- package/server/package.json +2 -2
- package/client/dist/assets/AnimeInfo-o0Udf0og.js +0 -1
- package/client/dist/assets/AnimeInfoPage-CojMIEuf.js +0 -2
- package/client/dist/assets/Asmr-2V3yCCiK.js +0 -2
- package/client/dist/assets/AvSyncCalibrator-BPa6KaGC.css +0 -1
- package/client/dist/assets/AvSyncCalibrator-Bo3820j3.js +0 -10
- package/client/dist/assets/Home-C8uXTzIM.js +0 -1
- package/client/dist/assets/Home-DtRtTuI9.css +0 -1
- package/client/dist/assets/Insights-CRqBfZuK.js +0 -1
- package/client/dist/assets/MangaInfoPage-BtkOrO34.js +0 -1
- package/client/dist/assets/MangaReadPage-Uv72AYdY.js +0 -1
- package/client/dist/assets/Mature-DXHWvoY5.js +0 -1
- package/client/dist/assets/Music-C4dM0BQx.js +0 -1
- package/client/dist/assets/Player-CpMvWTkH.js +0 -56
- package/client/dist/assets/PlayerSettings-pMU85k7p.js +0 -1
- package/client/dist/assets/Radio-DlmTC-qG.js +0 -1
- package/client/dist/assets/Settings-CcU3oNY8.js +0 -21
- package/client/dist/assets/Tv-Rji_lvQo.js +0 -4
- package/client/dist/assets/Tv-ZEA45gXK.css +0 -1
- package/client/dist/assets/TvInfo-Ciujd6os.js +0 -1
- package/client/dist/assets/index-B5SLDCAi.js +0 -178
- package/client/dist/assets/index-CUm1meqr.css +0 -1
- package/client/dist/assets/useAsmr-D6cSjbvt.js +0 -1
- package/client/dist/assets/useMangaLibrary-DcxPn0RM.js +0 -1
- package/client/dist/assets/useMatureConsent-CT7-KfzG.js +0 -1
- package/client/dist/assets/useTv-B546u-Rx.js +0 -1
- package/client/dist/assets/useTvLibrary-C2rPeCVT.js +0 -1
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{d as b,A as x,h as _,u as t,S as Ae,o as jr,p as Wr,a as zr,T as Ce,q as C}from"./vendor-core-DfaOB3Rn.js";import{u as Hr}from"./vendor-query-BBT5_sHx.js";import{g as Pn,e as Ur,t as tt,z as qr,W as Kr,M as mn,B as ke}from"./index-Rm4h42Uz.js";import{I as D}from"./vendor-icons-DrybRNxP.js";import{M as Yr,t as mr,f as Dn,d as Qr,C as Gr,S as Xr,U as Jr,a as Zr,p as On,u as es,b as ts,c as ns,l as rs,q as ss,i as Ln,v as as,w as os,x as dr,s as Rn,e as is,g as ls,h as cs,r as ds,j as nt,k as us,E as ms,A as hs,P as ps,m as ye,o as gs}from"./AvSyncCalibrator-Rcv7aubm.js";import{O as pn,S as fs,a as vs,A as bs}from"./OptionListMenu-C9saW22f.js";import{u as ys}from"./useProviders-BWRYjB77.js";import{d as Ss,g as _s,h as Cs,f as ks,e as Ts,j as xs,k as Es}from"./useTvLibrary-DFfgk9YS.js";import{l as Ns,c as ws}from"./hls-QeZPjik8.js";import{u as Is}from"./useIsMobile-Dvx1uJ82.js";import{S as Bs}from"./SynopsisText-B3Sa5pRv.js";const Ms="_fullscreenFlat_1xij1_1",As="_timeDisplay_1xij1_15",Ps="_bottomControls_1xij1_19",Ls="_leftControls_1xij1_23",Rs="_rightControls_1xij1_24",$s="_controlBtn_1xij1_28",Ds="_controlsOverlay_1xij1_47",Os="_hidden_1xij1_67",Vs="_topControls_1xij1_73",Fs="_backBtn_1xij1_93",js="_videoTitleInfo_1xij1_113",Ws="_animeTitle_1xij1_119",zs="_episodeLabel_1xij1_127",Hs="_speedBoostBadge_1xij1_134",Us="_progressBarContainer_1xij1_180",qs="_progressBar_1xij1_180",Ks="_thumb_1xij1_199",Ys="_bufferedBar_1xij1_217",Qs="_watchedBar_1xij1_227",Gs="_scrubbing_1xij1_252",Xs="_timeBubble_1xij1_256",Js="_bottomControlsRow_1xij1_270",Zs="_nextEpisodeBtn_1xij1_293",ea="_active_1xij1_346",ta="_settingsPanel_1xij1_421",na="_settingsHeader_1xij1_440",ra="_settingsBackBtn_1xij1_448",sa="_settingsTitle_1xij1_466",aa="_settingsContent_1xij1_477",oa="_currentValue_1xij1_486",ia="_menuItem_1xij1_501",la="_menuNote_1xij1_534",ca="_loadingOverlay_1xij1_547",da="_loadingDots_1xij1_558",ua="_dot_1xij1_563",ma="_bufferingOverlay_1xij1_592",ha="_bufferingSpinner_1xij1_601",a={fullscreenFlat:Ms,timeDisplay:As,bottomControls:Ps,leftControls:Ls,rightControls:Rs,controlBtn:$s,controlsOverlay:Ds,hidden:Os,topControls:Vs,backBtn:Fs,videoTitleInfo:js,animeTitle:Ws,episodeLabel:zs,speedBoostBadge:Hs,progressBarContainer:Us,progressBar:qs,thumb:Ks,bufferedBar:Ys,watchedBar:Qs,scrubbing:Gs,timeBubble:Xs,bottomControlsRow:Js,nextEpisodeBtn:Zs,active:ea,settingsPanel:ta,settingsHeader:na,settingsBackBtn:ra,settingsTitle:sa,settingsContent:aa,currentValue:oa,menuItem:ia,menuNote:la,loadingOverlay:ca,loadingDots:da,dot:ua,bufferingOverlay:ma,bufferingSpinner:ha},hn=-6e4,$n=6e4,ur=500,pa=({classes:u,delayMs:w,onDelayChange:X})=>{const[H,F]=b(null),O=H??w,r=x(X);r.current=X;const L=x(w);L.current=w;const ae=x(null);ae.current=H,_(()=>{F(null)},[w]),_(()=>()=>{const U=ae.current;U!==null&&U!==L.current&&r.current(U)},[]);const he=U=>{L.current=U,ae.current=null,r.current(U),F(null)},i=U=>{const re=ae.current??L.current,Ve=Math.max(hn,Math.min($n,re+U));he(Ve)};return t(Ae,{children:[t("div",{style:{display:"flex",gap:6,padding:"0.5rem 0.75rem 0.25rem"},children:[t("button",{type:"button",className:u.item,onClick:()=>i(-ur),"aria-label":"Show subtitles 0.5 seconds earlier",style:{flex:1,justifyContent:"center"},children:t("span",{children:"-0.5s"})}),t("button",{type:"button",className:u.item,onClick:()=>i(ur),"aria-label":"Show subtitles 0.5 seconds later",style:{flex:1,justifyContent:"center"},children:t("span",{children:"+0.5s"})}),t("button",{type:"button",className:u.item,onClick:()=>he(0),disabled:O===0,"aria-label":"Reset subtitle timing",style:{flex:1,justifyContent:"center"},children:t("span",{children:"Reset"})})]}),t(Yr,{label:"Subtitle timing",display:mr(O),min:hn,max:$n,step:100,value:O,percent:(O-hn)/($n-hn)*100,onChange:U=>{const re=Math.round(U);ae.current=re,F(re)},onCommit:()=>{const U=ae.current;U!==null&&he(U)}}),t("div",{className:u.note,children:"Positive delays subtitles (show later). Negative shows them earlier. 0.0s is default."})]})},ga=({classes:u,tracks:w,selected:X,onChange:H})=>t(pn,{classes:u,options:w.map((F,O)=>({key:String(O),label:F.label||F.language,selected:O===X})),onSelect:F=>H(Number(F))}),fa=({player:u,title:w,episodeLabel:X,audioTracks:H,selectedAudioTrack:F,onAudioTrackChange:O,subtitles:r,selectedSubtitle:L,onSubtitleChange:ae,streams:he,qualityIdx:i,onQualityChange:U,onBack:re,children:Ve,movyServers:f=[],selectedMovyServer:Se="atlanta",onMovyServerSelect:$,isMovySource:Dt=!1,videoDelayEnabled:oe=!1,onVideoDelayToggle:Fe,videoDelayMs:Ct=0,onVideoDelayChange:kt,onCalibrateAvSync:Ot,subtitleDelayMs:Vt=0,onSubtitleDelayChange:gn,showNextEpisodeButton:Ft=!1,onNextEpisode:ie,isLoading:je=!1})=>{const{state:T,refs:rt,actions:M}=u,q=rt.videoRef,{subtitleFontSize:K,subtitlePosition:Pe,subtitleBgOpacity:st,subtitleBgColor:Te,subtitleTextColor:We,subtitleEdge:pe,subtitleBold:ze}=T,[y,Q]=b(null),Le=x(null),[jt,at]=b(0);_(()=>{const l=q.current;if(!l)return;const c=()=>at(l.clientHeight||0);c();const te=new ResizeObserver(c);return te.observe(l),()=>te.disconnect()},[q,he]);const ge=(l,c)=>{try{localStorage.setItem(l,String(c))}catch{}},ot=(l,c)=>{switch(l){case"fontSize":typeof c=="number"&&(M.setSubtitleFontSize(c),ge("subtitleFontSize",c));break;case"position":typeof c=="number"&&(M.setSubtitlePosition(c),ge("subtitlePosition",c));break;case"bgOpacity":typeof c=="number"&&(M.setSubtitleBgOpacity(c),ge("subtitleBgOpacity",c));break;case"bgColor":typeof c=="string"&&(M.setSubtitleBgColor(c),ge("subtitleBgColor",c));break;case"textColor":typeof c=="string"&&(M.setSubtitleTextColor(c),ge("subtitleTextColor",c));break;case"edge":(c==="shadow"||c==="outline"||c==="none")&&(M.setSubtitleEdge(c),ge("subtitleEdge",c));break;case"bold":typeof c=="boolean"&&(M.setSubtitleBold(c),ge("subtitleBold",c));break}};_(()=>{const l="tv-player-subtitle-style";let c=document.getElementById(l);c||(c=document.createElement("style"),c.id=l,document.head.appendChild(c));const te={fontSize:K,position:Pe,bgOpacity:st,bgColor:Te,textColor:We,edge:pe,bold:ze},Z=q.current,Et=Dn(K,jt||Z?.clientHeight||720);if(c.textContent=Qr({...te,fontSize:Et}),Z){const Be=()=>{const E=Number(Pe);return isNaN(E)?0:Math.max(0,Math.min(100,E))},Nt=(E,I)=>{try{const ee=E;ee.snapToLines=!1,ee.line=I}catch{}},wt=()=>{const E=Et*16,I=Z.videoHeight||Z.clientHeight||720,ee=Z.videoWidth||Z.clientWidth||1280;return{step:E*1.3/I*100,chars:Math.max(20,Math.floor(ee/(E*.55)))}},Yt=E=>{const I=Math.max(0,Math.min(100,100-Be())),ee=Array.from(E.activeCues??[]);if(ee.length<=1){ee.forEach(fe=>Nt(fe,I));return}const{step:mt,chars:ht}=wt();let Xt=I;for(let fe=ee.length-1;fe>=0;fe--){const pt=String(ee[fe].text??"").replace(/<[^>]*>/g,"").split(`
|
|
2
|
+
`).reduce((Jt,gt)=>Jt+Math.max(1,Math.ceil(gt.length/ht)),0),R=Xt-pt*mt;Nt(ee[fe],Math.max(0,R)),Xt=R-mt*.4}},It=()=>{const E=Math.max(0,Math.min(100,100-Be()));Array.from(Z.textTracks).forEach(I=>{I.cues&&(Array.from(I.cues).forEach(ee=>Nt(ee,E)),I.mode==="showing"&&Yt(I))})};It();const dt=E=>{const I=E.target;I.mode==="showing"&&Yt(I)},Qt=()=>{Array.from(Z.textTracks).forEach(E=>{E.removeEventListener("cuechange",dt),E.addEventListener("cuechange",dt)}),It()};Array.from(Z.textTracks).forEach(E=>{E.addEventListener("cuechange",dt)}),Z.textTracks.addEventListener("addtrack",Qt);const Gt=Array.from(Z.querySelectorAll("track")),ut=()=>It();return Gt.forEach(E=>E.addEventListener("load",ut)),()=>{Array.from(Z.textTracks).forEach(E=>{E.removeEventListener("cuechange",dt)}),Z.textTracks.removeEventListener("addtrack",Qt),Gt.forEach(E=>E.removeEventListener("load",ut))}}},[K,Pe,st,Te,We,pe,ze,L,r,q,jt]);const fn=l=>{const c=q.current;!c||isNaN(T.duration)||T.duration===0||(c.currentTime=l*T.duration)},Tt=()=>{q.current&&(M.setIsScrubbing(!0),M.wasPlayingBeforeScrub.current=!q.current.paused,q.current.pause())},He=l=>{const c=q.current;c&&T.duration&&(c.currentTime=l*T.duration)},J=()=>{M.setIsScrubbing(!1),M.wasPlayingBeforeScrub.current&&q.current?.play().catch(()=>{})},Wt=l=>{const c=q.current;c&&(c.volume=l,c.muted=l===0,localStorage.setItem("playerVolume",l.toString()))},xt=()=>{M.toggleMute()},A=r.length>0,j=L>=0,zt=()=>{Q("main"),M.setShowControls(!0)},Ht=()=>{if(j){ae(-1);return}let l=null;try{l=localStorage.getItem("tvLastSubtitle")}catch{}ae(On(r,{lastKey:l,enabled:!0}))},it=()=>{Q(null)},vn=()=>t(Ae,{children:[he.length>1&&t("button",{className:a.menuItem,onClick:()=>Q("quality"),children:[t("span",{children:"Quality"}),t("span",{className:a.currentValue,children:he[i]?.quality||"Auto"})]}),Dt&&f.length>0&&t("button",{className:a.menuItem,onClick:()=>Q("server"),children:[t("span",{style:{display:"flex",alignItems:"center",gap:6},children:[t(D,{name:"server",size:12})," Movy Server"]}),t("span",{className:a.currentValue,style:{textTransform:"capitalize"},children:Se})]}),A&&t("button",{className:a.menuItem,onClick:()=>Q("subtitles"),children:[t("span",{children:"Subtitles"}),t("span",{className:a.currentValue,children:j?r[L]?.label||r[L]?.language:"Off"})]}),A&&t("button",{className:a.menuItem,onClick:()=>Q("subtitle-style"),children:[t("span",{children:"Subtitle Style"}),t("span",{className:a.currentValue,children:[K.toFixed(1),"x · ",Pe]})]}),A&&t("button",{className:a.menuItem,onClick:()=>Q("subtitle-timing"),children:[t("span",{children:"Subtitle Timing"}),t("span",{className:a.currentValue,children:mr(Vt)})]}),H.length>0&&t("button",{className:a.menuItem,onClick:()=>Q("audio"),children:[t("span",{children:"Audio Track"}),t("span",{className:a.currentValue,children:H[F]?.label||H[F]?.language})]}),t("button",{className:a.menuItem,onClick:()=>Q("av-sync"),children:[t("span",{children:"A/V Sync"}),t("span",{className:a.currentValue,children:oe?`${Ct}ms`:"Off"})]})]}),S=()=>t(pn,{classes:{item:a.menuItem,active:a.active},options:he.map((l,c)=>({key:String(c),label:l.quality,selected:c===i})),onSelect:l=>U(Number(l))}),d=()=>t(pn,{classes:{item:a.menuItem,active:a.active},options:[{key:"off",label:"Off",selected:!j},...r.map((l,c)=>({key:String(c),label:l.label||l.language,selected:c===L}))],onSelect:l=>ae(l==="off"?-1:Number(l))}),le=()=>t(vs,{classes:{item:a.menuItem,active:a.active},values:{fontSize:K,position:Pe,bgOpacity:st,bgColor:Te,textColor:We,edge:pe,bold:ze},onChange:ot}),ce=()=>t(pa,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},delayMs:Vt,onDelayChange:l=>gn?.(l)}),Ut=()=>t(ga,{classes:{item:a.menuItem,active:a.active},tracks:H,selected:F,onChange:O}),qt=()=>t(pn,{classes:{item:a.menuItem,active:a.active},options:f.map(l=>({key:l,label:t("span",{style:{textTransform:"capitalize"},children:l}),selected:Se===l})),onSelect:l=>$?.(l)}),Ue=()=>t(bs,{classes:{item:a.menuItem,active:a.active,note:a.menuNote},enabled:oe,delayMs:Ct,onToggle:l=>Fe?.(l),onDelayChange:l=>kt?.(l),onCalibrate:()=>{Q(null),Ot?.()}}),Kt=T.isMuted?t(D,{name:"volume-mute"}):T.volume<.5?t(D,{name:"volume-down"}):t(D,{name:"volume-up"}),qe=t("div",{className:`${a.controlsOverlay} ${!T.showControls&&!y?a.hidden:""}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none"},children:t("div",{className:a.topControls,onClick:l=>l.stopPropagation(),children:[t("button",{className:a.backBtn,onClick:re,title:"Back","aria-label":"Back",children:t(D,{name:"chevron-left"})}),t("div",{className:a.videoTitleInfo,children:[t("span",{className:a.animeTitle,children:w}),X&&t("span",{className:a.episodeLabel,children:X})]})]})}),lt=!je&&!T.isBuffering&&T.duration>0?t(Gr,{isPlaying:T.isPlaying,onTogglePlay:M.togglePlay,onSkipBack:()=>M.seek(-10),onSkipForward:()=>M.seek(10)}):null,bn=t("div",{className:`${a.controlsOverlay} ${!T.showControls&&!y?a.hidden:""}`,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none",justifyContent:"flex-end"},children:t("div",{className:a.bottomControls,onClick:l=>l.stopPropagation(),children:[t(Xr,{classes:{container:a.progressBarContainer,scrubbing:a.scrubbing,timeBubble:a.timeBubble,bar:a.progressBar,buffered:a.bufferedBar,watched:a.watchedBar,thumb:a.thumb},videoRef:q,duration:T.duration,formatTime:Pn,isScrubbing:T.isScrubbing,buffered:"full",onSeek:fn,onScrubStart:Tt,onScrubMove:He,onScrubEnd:J,timeLabelRef:Le}),t("div",{className:a.bottomControlsRow,children:[t("div",{className:a.leftControls,children:[t("button",{className:a.controlBtn,onClick:M.togglePlay,"aria-label":T.isPlaying?"Pause":"Play",children:T.isPlaying?t(D,{name:"pause"}):t(D,{name:"play"})}),t(Jr,{muted:T.isMuted,volume:T.volume,volumeIcon:Kt,buttonClassName:a.controlBtn,onToggleMute:xt,onVolumeChange:Wt,onExpandedChange:l=>M.setShowVolumeSlider(l)}),t("span",{className:a.timeDisplay,ref:Le,children:[Pn(0)," / ",Pn(T.duration)]})]}),t("div",{className:a.rightControls,children:[Ft&&t("button",{className:a.nextEpisodeBtn,onClick:ie,title:"Play next episode",children:"Next EP"}),A&&t("button",{className:`${a.controlBtn} ${j?a.active:""}`,onClick:Ht,"aria-label":j?"Turn subtitles off":"Turn subtitles on",children:t(D,{name:"closed-captioning"})}),t("button",{className:`${a.controlBtn} ${y?a.active:""}`,onClick:()=>y?it():zt(),"aria-label":"Settings",children:t(D,{name:"cog"})}),t("button",{className:a.controlBtn,onClick:M.toggleFullscreen,"aria-label":T.isFullscreen?"Exit Fullscreen":"Fullscreen",children:T.isFullscreen?t(D,{name:"compress"}):t(D,{name:"expand"})})]})]})]})}),ct=y?t("div",{"data-speed-boost-ignore":"true",onClick:l=>l.stopPropagation(),children:t(fs,{classes:{panel:a.settingsPanel,header:a.settingsHeader,backBtn:a.settingsBackBtn,title:a.settingsTitle,content:a.settingsContent},title:y==="main"?"Settings":y==="subtitle-style"?"Subtitle Style":y==="subtitle-timing"?"Subtitle Timing":y==="audio"?"Audio Track":y==="server"?"Movy Server":y==="av-sync"?"A/V Sync":y.charAt(0).toUpperCase()+y.slice(1),onBack:()=>y==="main"?it():Q("main"),children:[y==="main"&&vn(),y==="quality"&&S(),y==="subtitles"&&d(),y==="subtitle-style"&&le(),y==="subtitle-timing"&&ce(),y==="audio"&&Ut(),y==="server"&&qt(),y==="av-sync"&&Ue()]})}):null,_e=t(Ae,{children:[je&&t("div",{className:a.loadingOverlay,"aria-hidden":"true",children:t("div",{className:a.loadingDots,children:[t("div",{className:a.dot}),t("div",{className:a.dot}),t("div",{className:a.dot})]})}),T.isBuffering&&!je&&t("div",{className:a.bufferingOverlay,"aria-hidden":"true",children:t("div",{className:a.bufferingSpinner})}),T.isSpeedBoostActive&&t("div",{className:a.speedBoostBadge,"aria-hidden":"true",children:[t("span",{children:"2x"}),t(D,{name:"forward",size:12})]})]});return t(Zr,{player:u,topBar:qe,centerControls:lt,bottomBar:!je&&T.duration>0?bn:null,settingsPanel:ct,overlays:_e,isInteracting:!!y,className:T.isFullscreen?a.fullscreenFlat:"",children:Ve})};function va(u,w,X){const H=()=>{const O=Array.isArray(u.audioTracks)?u.audioTracks.length:0,r=X.getWant(),L=O>0?Math.min(Math.max(0,r),O-1):r;u.audioTrack=L,L!==r&&X.onResolve(L)},F=(O,r)=>{const L=X.getWant(),ae=Array.isArray(u.audioTracks)?u.audioTracks.length:0;if(r.id!==L&&L>=0&&L<ae){u.audioTrack!==L&&(u.audioTrack=L);return}X.onResolve(r.id)};return u.on(w.MANIFEST_PARSED,H),u.on(w.AUDIO_TRACK_SWITCHED,F),()=>{u.off(w.MANIFEST_PARSED,H),u.off(w.AUDIO_TRACK_SWITCHED,F)}}const ba="_page_263ma_1",ya="_header_263ma_7",Sa="_pageTitle_263ma_11",_a="_searchForm_263ma_21",Ca="_searchInput_263ma_27",ka="_searchBtn_263ma_42",Ta="_suggestions_263ma_58",xa="_suggestionPill_263ma_65",Ea="_statusMsg_263ma_81",Na="_error_263ma_87",wa="_textOnly_263ma_91",Ia="_spinner_263ma_96",Ba="_spin_263ma_96",Ma="_grid_263ma_110",Aa="_skeletonCard_263ma_116",Pa="_skeletonThumb_263ma_121",La="_skeletonLine_263ma_127",Ra="_shimmer_263ma_134",$a="_backBtn_263ma_154",Da="_meta_263ma_172",Oa="_headerActions_263ma_180",Va="_watchlistBtn_263ma_187",Fa="_active_263ma_205",ja="_year_263ma_215",Wa="_rating_263ma_220",za="_typeBadge_263ma_229",Ha="_tv_263ma_237",Ua="_movie_263ma_242",qa="_tvSeries_263ma_247",Ka="_tvMiniSeries_263ma_252",Ya="_overview_263ma_257",Qa="_controls_263ma_264",Ga="_controlLabel_263ma_272",Xa="_select_263ma_282",Ja="_playerSection_263ma_293",Za="_video_263ma_297",eo="_videoHidden_263ma_319",to="_delayCanvas_263ma_324",no="_delayCanvasActive_263ma_337",ro="_subtitleOverlay_263ma_341",so="_videoIframe_263ma_360",ao="_retryButton_263ma_368",oo="_sidebarSeason_263ma_383",io="_mobileSeasonRow_263ma_399",lo="_sidebarPosterCard_263ma_413",co="_sidebarPosterMeta_263ma_428",uo="_providerSelectWrap_263ma_445",mo="_genreRow_263ma_457",ho="_genreChip_263ma_464",po="_metaRow_263ma_474",go="_detailGrid_263ma_483",fo="_detailItem_263ma_490",vo="_imdbLink_263ma_512",p={page:ba,header:ya,pageTitle:Sa,searchForm:_a,searchInput:Ca,searchBtn:ka,suggestions:Ta,suggestionPill:xa,statusMsg:Ea,error:Na,textOnly:wa,spinner:Ia,spin:Ba,grid:Ma,skeletonCard:Aa,skeletonThumb:Pa,skeletonLine:La,shimmer:Ra,backBtn:$a,meta:Da,headerActions:Oa,watchlistBtn:Va,active:Fa,year:ja,rating:Wa,typeBadge:za,tv:Ha,movie:Ua,tvSeries:qa,tvMiniSeries:Ka,overview:Ya,controls:Qa,controlLabel:Ga,select:Xa,playerSection:Ja,video:Za,videoHidden:eo,delayCanvas:to,delayCanvasActive:no,subtitleOverlay:ro,videoIframe:so,retryButton:ao,sidebarSeason:oo,mobileSeasonRow:io,sidebarPosterCard:lo,sidebarPosterMeta:co,providerSelectWrap:uo,genreRow:mo,genreChip:ho,metaRow:po,detailGrid:go,detailItem:fo,imdbLink:vo},bo=[],Mo=()=>{const{id:u}=jr(),[w]=Wr(),X=x(w);X.current=w;const H=zr(),F=Hr(),O=w.get("type"),[r,L]=b(null),[ae,he]=b(!1),[i,U]=b(()=>parseInt(w.get("s")||"1",10)||1),[re,Ve]=b([]),[f,Se]=b(()=>parseInt(w.get("e")||"1",10)||1),[$,Dt]=b(()=>{try{return localStorage.getItem("tvProvider")||""}catch{return""}}),[oe,Fe]=b([]),[Ct,kt]=b(""),{options:Ot,isFallback:Vt,isLoading:gn}=ys(),Ft=Ce(()=>Ot.filter(e=>(e.kind??"tv")==="tv").map(e=>({id:e.value,label:e.label,tier:e.tier==="embed"?"embed":"direct",servers:e.servers})),[Ot]),ie=Vt||Ft.length===0?bo:Ft,je=ie.filter(e=>e.tier==="direct"),T=ie.filter(e=>e.tier==="embed"),[rt,M]=b(!1),[q,K]=b(""),[Pe,st]=b([]),[Te,We]=b(0),[pe,ze]=b([]),[y,Q]=b(-1),[Le,jt]=b("all"),[at,ge]=b(0),[ot,fn]=b(""),[Tt,He]=b(""),[J,Wt]=b(()=>{try{return localStorage.getItem("movyServer")||""}catch{return""}}),xt=Ce(()=>ie.find(e=>e.id===$),[ie,$]),A=xt?.tier==="embed",j=Ce(()=>xt?.servers??[],[xt]),zt=x([]);_(()=>{zt.current=oe},[oe]);const Ht=x(Te);_(()=>{Ht.current=Te},[Te]);const it=x(y);_(()=>{it.current=y},[y]);const vn=Ce(()=>[],[]),S=es({skipIntervals:vn}),d=S.refs.videoRef,le=x(null),ce=x([]),Ut=x(null),qt=x(null),[Ue,Kt]=b(()=>{try{const e=Number(localStorage.getItem("playerVideoDelayMs"));if(Number.isFinite(e)&&e>=0&&e<=500)return Math.round(e)}catch{}return 180}),[qe,lt]=b(()=>{try{return localStorage.getItem("playerVideoDelayEnabled")==="true"}catch{return!1}}),[bn,ct]=b(!1),[_e,l]=b(!1),c=x(null),te=x(null),Z=(e,n)=>{try{localStorage.setItem("playerVideoDelayMs",String(e)),localStorage.setItem("playerVideoDelayEnabled",String(n))}catch{}},Et=e=>{const n=Math.max(0,Math.min(500,Math.round(e)));Kt(n);try{localStorage.setItem("playerVideoDelayMs",String(n))}catch{}},[Be,Nt]=b(()=>{try{const e=Number(localStorage.getItem("tvSubtitleDelayMs"));if(Number.isFinite(e)&&e>=-6e4&&e<=6e4)return Math.round(e)}catch{}return 0}),wt=x(Be);wt.current=Be;const Yt=C(e=>{const n=Math.max(-6e4,Math.min(6e4,Math.round(e)));if(wt.current!==n){wt.current=n,Nt(n);try{localStorage.setItem("tvSubtitleDelayMs",String(n))}catch{}}},[]),It=()=>{c.current={enabled:qe,ms:Ue},lt(!0);try{localStorage.setItem("playerVideoDelayEnabled","true")}catch{}ct(!0)},dt=()=>{const e=c.current;c.current=null,e&&(Kt(e.ms),lt(e.enabled),Z(e.ms,e.enabled)),l(!1),ct(!1)},Qt=()=>{c.current=null,lt(!0),Z(Ue,!0),l(!1),ct(!1)},Gt=()=>{if(_e){l(!1);return}const e=d.current;e&&!isNaN(e.currentTime)&&(te.current=e.currentTime),l(!0)},ut=qe?Ue:0;ts({videoRef:d,canvasRef:Ut,delayMs:ut,enabled:qe});const E=qe,I=E||Be!==0,ee=x(I);ee.current=I;const mt=C(()=>{if(!ee.current)return;const e=d.current;e&&Array.from(e.textTracks).forEach(n=>{n.mode!=="hidden"&&(n.mode="hidden")})},[d]),{hasConsent:ht,grant:Xt}=Ur(),fe=x("");fe.current||(fe.current=`tv-${Date.now()}-${Math.random().toString(36).slice(2)}`);const h=O==="movie",pt=u?Ss(O||"tv",u):"",R=pt,Jt=_s(),gt=Cs(),{toggle:Vn,bookmarkedIds:hr,pending:pr}=ks(),{data:Fn}=Ts(r?pt:void 0),Zt=Fn?!!Fn.inLibrary:pt?hr.has(pt):!1,gr=C(()=>{!r||!u||Vn({tmdbId:Number(u),mediaType:O||"tv",title:r.title,poster:r.poster,year:r.year,adult:r.adult})},[r,u,O,Vn]),{data:Ke,isFetched:jn,isPending:Wn}=xs(R||void 0,i,f),en=Ce(()=>re.map(e=>e.episode_number).sort((e,n)=>e-n),[re]),Ye=en.indexOf(f),yn=Ye>0?en[Ye-1]:null,N=Ye>=0&&Ye<en.length-1?en[Ye+1]:null,tn=Ce(()=>(r?.seasons??[]).map(e=>e.season_number).filter(e=>Number.isFinite(e)).sort((e,n)=>e-n),[r]),ve=Ce(()=>{if(h||N!=null)return null;const e=tn.indexOf(i);return e>=0&&e<tn.length-1?tn[e+1]:(r?.number_of_seasons??0)>i?i+1:null},[h,N,tn,i,r?.number_of_seasons]),zn=Ke?.currentTime??0,Hn=Ke?.duration??0,Sn=Ke?.completed===!0||Ke?.completed===1||Ln(zn,Hn),[xe,Me]=b(!1),Ee=x(!1),_n=x(null),Bt=x(null);_(()=>{Ee.current=!1,Bt.current=null,Me(!1)},[R,i,f]);const[Ne,nn]=b(!1),[ft,Un]=b(0),[Qe,qn]=b(!1),[Re,Ge]=b(!1),[fr,Cn]=b(!1),[vr,Kn]=b(""),[rn,br]=b(!1),[yr,kn]=b(!1);ns(S,(oe.length>0||Tt!=="")&&!Ne&&!xe&&!Re);const Sr=Is(),[vt,_r]=b(rs),Cr=C(e=>{_r(e),ss(e)},[]),de=x(!1),Xe=x(null),Tn=x(0),Yn=x(!1),Qn=x(0),ne=x(null),Mt=x(""),kr=dr(zn,Hn),At=!de.current&&!Ee.current&&(Ne||xe||Re||Sn||kr),bt=x(At);bt.current=At;const yt=x(!1);_(()=>{yt.current=Qe},[Qe]);const Tr=e=>{const n=Math.floor(e/3600),s=Math.floor(e%3600/60),o=Math.floor(e%60);return n>0?`${n}:${String(s).padStart(2,"0")}:${String(o).padStart(2,"0")}`:`${s}:${String(o).padStart(2,"0")}`},$e=C((e,n)=>{if(!R||!n||n<30)return;const s=Ln(e,n),o=s?n:e;Math.abs(o-Tn.current)<10&&!s||(Tn.current=o,Jt.mutate({mediaId:R,season:i,episode:f,currentTime:Math.floor(o),duration:Math.floor(n),completed:s,title:r?.title??null,poster:r?.poster??null,backdrop:r?.backdrop??null,year:r?.year??null,overview:r?.overview??null,tmdbId:r?.id??null,mediaType:O||"tv",adult:r?.adult?1:0}))},[R,i,f,Jt,r,O]),we=C((e,n)=>{l(!1),ct(!1);const s=new URLSearchParams(w);s.set("type",w.get("type")||"tv"),s.set("s",String(e)),s.set("e",String(n)),H(`${window.location.pathname}?${s.toString()}`)},[w,H]),Pt=C(()=>{const e=d.current;if(!e||h||N==null){Cn(!1);return}const n=e.duration||0,s=e.currentTime||0;Cn(n>0&&s/n>=.8)},[h,N,d]),sn=C((e,n)=>["tv-sources",$,h?"movie":"tv",u,e,n,J],[$,h,u,J]),an=C(async(e,n)=>{if(!r||!u||!$)return{valid:!1,sources:[]};const s=h?"movie":"tv",o=await tt.tv.sources.query({provider:$,type:s,tmdbId:String(u),season:e,episode:n,title:r.title||"",year:r.year||"",totalSeasons:String(r.number_of_seasons||1),imdbId:r.imdb_id||"",...j.length>0&&J?{server:J}:{}});return{valid:"valid"in o?o.valid:!1,error:"error"in o?o.error:void 0,sources:o.sources,referer:"referer"in o?o.referer:void 0,audioTracks:o.audioTracks,subtitles:"subtitles"in o?o.subtitles:void 0}},[r,u,$,h,j,J]),Gn=C(()=>{if(h||!r||!u||!$||A||N==null)return;const e=sn(i,N);F.getQueryState(e)?.status!=="success"&&F.prefetchQuery({queryKey:e,queryFn:()=>an(i,N),staleTime:300*1e3,gcTime:1800*1e3})},[h,r,u,$,A,N,i,F,sn,an]),xr=C(()=>{if(_e)return;Pt();const e=d.current;!e||e.paused||e.ended||(e.duration>0&&e.duration-e.currentTime<=60&&Gn(),Xe.current&&clearTimeout(Xe.current),Xe.current=setTimeout(()=>{$e(e.currentTime,e.duration||0)},5e3))},[$e,d,_e,Pt,Gn]),Er=C(()=>{const e=d.current;if(!e||!r)return;Xe.current&&clearTimeout(Xe.current),$e(e.currentTime,e.duration||0),Yn.current=!0;const n=as({seekInduced:Date.now()-Qn.current<os,autoplayEnabled:vt,hasNext:!h&&N!=null,isFinal:h||N==null});n==="advance"&&N!=null?(Se(N),we(i,N)):n==="prompt-next"?(Ee.current=!1,de.current=!0,Me(!0)):n==="prompt-complete"&&(Kn(h?r.title:`${r.title} — Season ${i}`),Ge(!0),Ee.current=!0,de.current=!0)},[h,r,i,N,vt,$e,we,d]),Nr=C(()=>{Yn.current=!1,S.actions.onPlay()},[S.actions]),wr=C(()=>{S.actions.onPause();const e=d.current;e&&!e.ended&&$e(e.currentTime,e.duration||0)},[S.actions,$e,d]),Ir=C(()=>{S.actions.onLoadedMetadata();const e=d.current;if(e){try{const n=parseFloat(localStorage.getItem("playerVolume")||"");isNaN(n)||(e.volume=Math.max(0,Math.min(1,n))),e.muted=localStorage.getItem("playerMuted")==="true"}catch{}if(ne.current!=null&&ne.current>0){try{e.currentTime=ne.current}catch{}ne.current=null}Pt()}},[S.actions,d,Pt]),St=C(()=>{const e=d.current;if(e&&ne.current!=null&&ne.current>0){try{e.currentTime=ne.current}catch{}ne.current=null}},[d]),Br=C(()=>{ft>0&&(ne.current=ft);const e=d.current;if(e&&ft>0){try{e.currentTime=ft,ne.current=null}catch{}e.play().catch(()=>{})}nn(!1),de.current=!0},[ft,d]),Xn=C(()=>{ne.current=null;const e=d.current;e&&(e.currentTime=0,e.play().catch(()=>{})),nn(!1),de.current=!0},[d]),Mr=C(()=>{Ee.current=!0,Me(!1),de.current=!0},[]),Ar=C(()=>{Ee.current=!0,Me(!1),de.current=!0,ne.current=null;const e=d.current;if(e){try{e.currentTime=0}catch{}e.play().catch(()=>{})}},[d]),Jn=C(()=>{N!=null&&(Ee.current=!0,Me(!1),de.current=!0,Se(N),we(i,N))},[N,i,we]),Zn=C(()=>{ve!=null&&(Ee.current=!0,Me(!1),Ge(!1),de.current=!0,U(ve),Se(1),we(ve,1))},[ve,we]),Pr=C(async()=>{if(R)try{await gt.mutateAsync({id:R,status:"Completed"}),Ge(!1),Me(!1),H("/")}catch{}},[R,gt,H]);_(()=>{de.current=!1,_n.current=null,nn(!1),Cn(!1),Un(0),qn(!1),yt.current=!1,ne.current=null,Mt.current=`${R}:${i}:${f}`,Tn.current=0},[R,i,f]),_(()=>{jn&&(qn(!0),yt.current=!0)},[jn,R,i,f]),_(()=>{if(!Ke||de.current)return;const e=`${R}:${i}:${f}`;if(_n.current===e)return;_n.current=e;const n=Ke,s=n.currentTime??0,o=n.duration??0;dr(s,o)&&(Un(s),nn(!0))},[Ke,R,i,f]),_(()=>{if(!Qe||de.current||Ee.current||Ne||Re||xe)return;const e=`${R}:${i}:${f}`;if(Bt.current!==e){if(!Sn){Wn||(Bt.current=e);return}if(h){Bt.current=e,Me(!0);return}if(!(!r||Ye<0||re.length===0)){if(Bt.current=e,N==null&&ve==null){r&&re.length>0&&(Kn(`${r.title} — Season ${i}`),Ge(!0),Ee.current=!0,de.current=!0);return}Me(!0)}}},[Qe,Sn,Wn,Ne,Re,xe,h,N,ve,r,Ye,re.length,R,i,f]),_(()=>{(Ne||xe)&&d.current&&d.current.pause()},[Ne,xe,d]),_(()=>{const e=d.current;return()=>{Xe.current&&clearTimeout(Xe.current),e&&!e.ended&&$e(e.currentTime,e.duration||0)}},[$e,d]);const xn=C(e=>{let n=null,s=!0;try{n=localStorage.getItem("tvLastSubtitle"),s=localStorage.getItem("tvSubtitlesEnabled")!=="false"}catch{}return On(e,{lastKey:n,enabled:s})},[]),En=C(e=>{if(!(e<0))try{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(e))}catch{}},[]),er=C(e=>{if(e.length===0)return 0;let n=null;try{n=localStorage.getItem("tvLastAudio")}catch{}if(n){const s=e.findIndex(g=>Rn(g)===n);if(s>=0)return s;const o=n.indexOf("|||"),m=o>=0?n.slice(0,o):n,P=o>=0?n.slice(o+3):n,v=e.findIndex(g=>g.language===m||g.label===P);if(v>=0)return v}return On(e,{lastKey:null,enabled:!0})},[]),{data:tr}=Es(R||void 0),nr=Ce(()=>(tr?.progress??[]).filter(n=>n.season===i&&(n.completed===!0||n.completed===1||Ln(n.currentTime,n.duration))).map(n=>String(n.episode)),[tr,i]),rr=Ce(()=>re.map(e=>({id:String(e.episode_number),label:`Episode ${e.episode_number}`,sublabel:e.name||void 0,thumbnail:e.still_path?`https://image.tmdb.org/t/p/w185${e.still_path}`:void 0})),[re]),sr=Ce(()=>(r?.genres??[]).map(e=>e.name).slice(0,5),[r]),Nn=Ce(()=>[r?.year,r?.status,r?.number_of_seasons?`${r.number_of_seasons} Season${r.number_of_seasons>1?"s":""}`:null,r?.number_of_episodes?`${r.number_of_episodes} Episodes`:null].filter(Boolean),[r]);_(()=>{if(ie.length!==0&&!ie.some(e=>e.id===$)){const e=ie.find(n=>n.tier==="direct")?.id??ie[0].id;Dt(e);try{localStorage.setItem("tvProvider",e)}catch{}}},[ie,$]),_(()=>{if(j.length!==0&&!j.includes(J)){Wt(j[0]);try{localStorage.setItem("movyServer",j[0])}catch{}}},[j,J]),_(()=>{if(!u){L(null),Fe([]),kt(""),K(""),He("");return}const e=Number(u),n=O||"tv";he(!0),L(null),Fe([]),kt(""),K(""),He("");const s=parseInt(X.current.get("s")||"",10),o=parseInt(X.current.get("e")||"",10);U(isNaN(s)?1:s),Se(isNaN(o)?1:o),ge(0),tt.tv.details.query({type:n,id:String(e)}).then(m=>{const P={id:m.id,title:m.title||"",overview:m.overview||"",vote_average:m.vote_average,year:m.year,poster:m.poster,backdrop:m.backdrop,imdb_id:m.imdb_id||void 0,adult:m.adult,seasons:m.seasons,number_of_seasons:m.number_of_seasons};L(P),he(!1),P.seasons&&P.seasons.length>0&&isNaN(s)&&U(P.seasons[0].season_number)}).catch(()=>{he(!1)})},[u,O]),_(()=>{if(!r||!u)return;if(!(r.seasons!==void 0||r.number_of_seasons!==void 0)){Ve([]);return}const n=parseInt(w.get("e")||"",10);tt.tv.episodes.query({id:String(u),season:String(i)}).then(s=>{const o=(s.episodes||[]).map(m=>({episode_number:m.episode_number,name:m.name||"",vote_average:m.vote_average,overview:m.overview||"",still_path:m.still_path||""}));if(Ve(o),o.length>0){const m=!isNaN(n)&&o.find(P=>P.episode_number===n)?n:o[0].episode_number;Se(m)}}).catch(()=>{})},[r,u,i,w]),_(()=>{!r||!u||h||tt.tv.episodes.query({id:String(u),season:String(i)}).then(e=>{const n=(e.episodes||[]).map(s=>({episode_number:s.episode_number,name:s.name||"",vote_average:s.vote_average,overview:s.overview||"",still_path:s.still_path||""}));Ve(n),n.length>0&&!n.find(s=>s.episode_number===f)&&Se(n[0].episode_number)}).catch(()=>{})},[i,r,u,h,f]),_(()=>{if(!A||!r||!u)return;fetch(`/api/tv/embed/${$}/${h?"movie":"tv"}/${u}?season=${i}&episode=${f}`).then(n=>n.json()).then(n=>{if(n.url)return He(n.url),fetch(`/api/resolve?url=${encodeURIComponent(n.url)}`).then(s=>s.json()).then(s=>{s.finalUrl&&He(s.finalUrl)})}).catch(()=>{})},[$,r,u,i,f,h,A]);const on=C(async()=>{if(!r||!u||!$||A||r.adult&&!ht)return;const e=`${R}:${i}:${f}`;zt.current.length>0?K(""):(M(!0),K(""),Fe([]),ge(0),st([]),ze([]));try{const s=await F.fetchQuery({queryKey:sn(i,f),queryFn:()=>an(i,f),staleTime:3e5,gcTime:18e5});if(Mt.current!==e)return;if(M(!1),!s.valid||!s.sources?.length){K(s.error?`${s.error}`:j.length>0?`No streams from ${J}. Try another server.`:"No streams available.");return}Fe(s.sources),kt(e),jt("all"),ge(0),s.referer&&fn(s.referer);const o=s.audioTracks||[];st(o),We(o.length>0?er(o):0);const m=s.subtitles||[];if(ze(m),m.length>0){const g=xn(m);Q(g),En(g)}else Q(-1);const P=h?"movie":"tv",v=u;tt.tv.subtitles.query({type:P,tmdbId:String(v),season:String(i),episode:String(f)}).then(g=>{if(Mt.current!==e)return;const se=Array.isArray(g.subtitles)?g.subtitles:[];se.length!==0&&ze(be=>{const V=[...be,...se.filter(B=>!be.some(k=>k.url===B.url))];if(be.length===0){const B=xn(V);Q(B),En(B)}return V})}).catch(()=>{}),K("")}catch{if(Mt.current!==e)return;M(!1),K("Failed to load streams.")}},[r,u,$,i,f,h,A,ht,j,J,xn,En,er,R,F,sn,an]),wn=C(e=>{const n=e.toLowerCase();Wt(n);try{localStorage.setItem("movyServer",n)}catch{}K("")},[]),Lr=C(e=>{Dt(e);try{localStorage.setItem("tvProvider",e)}catch{}},[]);_(()=>{$&&r&&!A&&on()},[$,r,on,A]),_(()=>{if(!d.current||(le.current&&(le.current.destroy(),le.current=null),A))return;let e=!1;if(_e){const v=d.current;return v&&(v.pause(),v.removeAttribute("src"),v.load(),v.src="/av-sync-test.mp4",bt.current||v.play().catch(()=>{})),()=>{e=!0}}const n=Le==="all"?oe:oe.filter(v=>v.type===Le),s=Ct===`${R}:${i}:${f}`&&n[at]?.url||"";if(!s){try{d.current?.pause()}catch{}return}const o=d.current;if(Mt.current===`${R}:${i}:${f}`&&ne.current==null&&!bt.current)try{!o.ended&&o.currentTime>1&&(ne.current=o.currentTime)}catch{}o.pause(),o.removeAttribute("src"),o.load(),S.actions.resetMediaState();const m=`/api/tv/stream-proxy?url=${encodeURIComponent(s)}&referer=${encodeURIComponent(ot)}`;n[at]?.type==="hls"?(async()=>{const v=await Ns();if(!e)if(v&&v.isSupported()){const g=new v({enableWorker:!0});le.current=g,g.on(v.Events.ERROR,(V,B)=>{B.fatal&&(K(`Stream failed (${B.details}). Try another source or reload.`),M(!1),g.destroy(),le.current=null)}),g.loadSource(m),g.attachMedia(o);const se=()=>{let V=!1,B=0;try{V=localStorage.getItem("tvSubtitlesEnabled")==="true";const k=parseInt(localStorage.getItem("tvSelectedSubtitle")||"0",10);!isNaN(k)&&k>=0&&(B=k)}catch{}return{enabled:V,index:B}},be=()=>{if(typeof g.subtitleTrack!="number")return;if(ce.current.length>0){g.subtitleTrack=-1;return}const V=Array.isArray(g.subtitleTracks)?g.subtitleTracks:[];if(V.length===0){g.subtitleTrack=-1;return}const B=se();if(B.enabled){const k=B.index<V.length?B.index:0;g.subtitleTrack=k,Q(k),mt()}else g.subtitleTrack=-1};va(g,v.Events,{getWant:()=>Ht.current,onResolve:V=>We(V)}),g.on(v.Events.MANIFEST_PARSED,()=>{be(),te.current!=null&&(o.currentTime=te.current,te.current=null),St(),!bt.current&&yt.current&&o.play().catch(()=>{})}),g.on(v.Events.SUBTITLE_TRACKS_UPDATED,()=>{be()}),g.on(v.Events.SUBTITLE_TRACK_SWITCH,(V,B)=>{if(ce.current.length>0){if(B.id!==-1)try{g.subtitleTrack=-1}catch{}return}const k=Array.isArray(g.subtitleTracks)?g.subtitleTracks:[];if(k.length!==0){if(B.id===-1){const Y=se();if(Y.enabled){const G=Y.index<k.length?Y.index:0;g.subtitleTrack=G;return}}Q(B.id),mt()}})}else ws(o)&&(o.src=m,te.current!=null&&(o.currentTime=te.current,te.current=null),St(),!bt.current&&yt.current&&o.play().catch(()=>{K("Failed to play stream. Try another source.")}))})():(o.src=m,te.current!=null&&(o.currentTime=te.current,te.current=null),St(),!bt.current&&yt.current&&o.play().catch(()=>{K("Failed to play stream. Try another source.")}));const P=()=>{const se=o.error?.code===4?"Video source not supported or not found":"Failed to load video stream";K(`${se}. The source may be invalid or expired. Try switching source or reloading.`),M(!1)};return o.addEventListener("error",P),()=>{e=!0,o.removeEventListener("error",P)}},[oe,Ct,at,Le,$,ot,A,d,_e,R,i,f,St,mt,S.actions]),_(()=>{if(!Qe||Ne||xe||Re||At||A||_e)return;const e=d.current;!e||!e.paused||e.ended||e.readyState<1||(St(),e.play().catch(()=>{}))},[Qe,Ne,xe,Re,At,A,_e,St,d]),_(()=>{const e=le.current;!e||typeof e.audioTrack!="number"||(e.audioTrack=Te)},[Te]),_(()=>{const e=le.current;!e||typeof e.subtitleTrack!="number"||!Array.isArray(e.subtitleTracks)||e.subtitleTracks.length===0||ce.current.length>0||(y>=0?e.subtitleTrack=y:e.subtitleTrack=-1)},[y]),_(()=>{const e=d.current;if(!(!e||A)&&(e.querySelectorAll("track").forEach(n=>n.remove()),ce.current=[],pe.length!==0&&(pe.forEach(n=>{const s=document.createElement("track");s.kind="subtitles",s.label=n.label||n.language||"Unknown",s.srclang=n.language||n.label||"en";const o=`/api/subtitle-proxy?url=${encodeURIComponent(n.url)}&referer=${encodeURIComponent(ot)}`;s.src=o,s.addEventListener("load",()=>{const m=ce.current.indexOf(s),P=s.track;if(P&&m>=0){const v=m===it.current;P.mode=v&&!ee.current?"showing":"hidden"}}),e.appendChild(s),ce.current.push(s)}),pe.length>0)))try{const n=le.current;n&&typeof n.subtitleTrack=="number"&&n.subtitleTrack!==-1&&(n.subtitleTrack=-1)}catch{}},[pe,ot,A,$,d]),_(()=>{const e=d.current;if(!e||A)return;const n=le.current;ce.current.length>0&&n&&typeof n.subtitleTrack=="number"&&Array.isArray(n.subtitleTracks)&&n.subtitleTracks.length>0&&(n.subtitleTrack=-1);const s=()=>{const P=Dn(S.state.subtitleFontSize,e.clientHeight||720),v=Math.max(0,Math.min(100,100-S.state.subtitlePosition)),g=()=>{const k=P*16,Y=e.videoHeight||e.clientHeight||720,G=e.videoWidth||e.clientWidth||1280;return{step:k*1.3/Y*100,chars:Math.max(20,Math.floor(G/(k*.55)))}},se=(k,Y)=>{const G=k;G.snapToLines=!1,G.line=Y},be=k=>{if(!k.cues)return;Array.from(k.cues).forEach(ue=>se(ue,v));const Y=Array.from(k.activeCues??[]);if(Y.length<=1){Y.forEach(ue=>se(ue,v));return}const{step:G,chars:W}=g();let Je=v;for(let ue=Y.length-1;ue>=0;ue--){const De=String(Y[ue].text??"").replace(/<[^>]*>/g,"").split(`
|
|
3
|
+
`).reduce((dn,Rt)=>dn+Math.max(1,Math.ceil(Rt.length/W)),0);Je=Math.max(0,Je-De*G),se(Y[ue],Je),Je-=G*.4}},V=ce.current;if(V.length>0){V.forEach((k,Y)=>{const G=k.track;if(!G)return;const W=Y===y;G.mode=W&&!I?"showing":"hidden",W&&!I&&be(G)});return}const B=Array.from(e.textTracks);B.length!==0&&B.forEach((k,Y)=>{const G=Y===y;k.mode=G&&!I?"showing":"hidden",G&&!I&&be(k)})};s();const o=()=>s();e.textTracks.addEventListener("addtrack",o),e.addEventListener("loadedmetadata",s,{once:!0});const m=window.setTimeout(s,600);return()=>{e.textTracks.removeEventListener("addtrack",o),e.removeEventListener("loadedmetadata",s),window.clearTimeout(m)}},[y,pe,A,$,d,I,S.state.subtitleFontSize,S.state.subtitlePosition]),_(()=>{if(!I)return;const e=d.current,n=qt.current;if(!e||!n)return;const s=Be/1e3,o=ut/1e3,m=new Set;let P=[],v=-1,g=-1,se=-1,be=-1,V=0,B=0,k=!1;const Y=()=>{const z=it.current;if(z<0)return null;const Oe=ce.current;return Oe.length>0?Oe[z]?.track??null:Array.from(e.textTracks)[z]??null},G=(z,Oe)=>{const me=z.cues;if(!me||me.length===0)return Array.from(z.activeCues??[]);let Ze=0,et=me.length;for(;Ze<et;){const Ie=Ze+et>>>1;me[Ie].endTime+s<Oe?Ze=Ie+1:et=Ie}const $t=[];for(let Ie=Ze;Ie<me.length;Ie++){const un=me[Ie];if(un.startTime+s>Oe)break;un.endTime+s>=Oe&&$t.push(un)}return $t},W=()=>{const z=Y(),Oe=e.currentTime-o,me=z?G(z,Oe):[],Ze=e.clientWidth,et=e.clientHeight,$t=e.videoWidth,Ie=e.videoHeight;if(me.length===P.length&&me.every((Bn,Mn)=>Bn===P[Mn])&&Ze===v&&et===g&&$t===se&&Ie===be||(P=me,v=Ze,g=et,se=$t,be=Ie,n.textContent="",me.length===0))return;const lr={fontSize:Dn(S.state.subtitleFontSize,et),position:S.state.subtitlePosition,bgOpacity:S.state.subtitleBgOpacity,bgColor:S.state.subtitleBgColor,textColor:S.state.subtitleTextColor,edge:S.state.subtitleEdge,bold:S.state.subtitleBold},Or=is(lr),Vr=ls(e,lr.position);me.forEach((Bn,Mn)=>{const cr=String(Bn.text??"");if(!cs(cr).trim())return;const An=document.createElement("div"),Fr=(me.length-1-Mn)*1.7;An.style.cssText=`${Or}
|
|
4
|
+
bottom: calc(${Vr}px + ${Fr}em);`,An.innerHTML=ds(cr),n.appendChild(An)})},Je=()=>{Array.from(e.textTracks).forEach(z=>{m.has(z)||(m.add(z),z.addEventListener("cuechange",W))})},ue=()=>{Je(),W()},In=()=>{if(k||B)return;const z=()=>{B=0,!(k||e.paused||e.ended)&&(W(),In())};B=window.requestAnimationFrame(z)},De=e,dn=()=>{V=0,W(),!k&&De.requestVideoFrameCallback&&(V=De.requestVideoFrameCallback(dn))},Rt=()=>{W(),De.requestVideoFrameCallback?V||(V=De.requestVideoFrameCallback(dn)):In()};Je(),e.textTracks.addEventListener("addtrack",ue),e.textTracks.addEventListener("removetrack",ue),e.addEventListener("timeupdate",W),e.addEventListener("seeked",W),e.addEventListener("loadedmetadata",W),e.addEventListener("play",Rt);const or=Array.from(e.querySelectorAll("track"));or.forEach(z=>z.addEventListener("load",W));const ir=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>W());return ir?.observe(e),W(),Rt(),()=>{k=!0,m.forEach(z=>z.removeEventListener("cuechange",W)),e.textTracks.removeEventListener("addtrack",ue),e.textTracks.removeEventListener("removetrack",ue),e.removeEventListener("timeupdate",W),e.removeEventListener("seeked",W),e.removeEventListener("loadedmetadata",W),e.removeEventListener("play",Rt),or.forEach(z=>z.removeEventListener("load",W)),ir?.disconnect(),B&&window.cancelAnimationFrame(B),V&&De.cancelVideoFrameCallback&&De.cancelVideoFrameCallback(V),n.textContent=""}},[I,Be,y,pe,ut,d,S.state.subtitleFontSize,S.state.subtitlePosition,S.state.subtitleBgOpacity,S.state.subtitleBgColor,S.state.subtitleTextColor,S.state.subtitleEdge,S.state.subtitleBold]);const ln=()=>{L(null),Fe([]),He(""),H(-1)},Rr=C(e=>{U(e),Se(1),we(e,1)},[we]),cn=!h&&r?.seasons&&r.seasons.length>1?t("label",{className:p.sidebarSeason,children:[t("span",{children:"Season"}),t("select",{value:i,onChange:e=>Rr(parseInt(e.target.value,10)||1),className:p.select,children:r.seasons.map(e=>t("option",{value:e.season_number,children:["Season ",e.season_number," (",e.episode_count," ep)"]},e.season_number))})]}):null,_t=C(e=>{const n=parseInt(e,10);if(!isNaN(n)){try{d.current?.pause()}catch{}Se(n),we(i,n)}kn(!1)},[i,we,d]);_(()=>{if(h)return;const e=n=>{n.target.closest('input, textarea, button, select, a, [role="button"], [contenteditable="true"]')||n.key.toLowerCase()==="n"&&(N!=null?_t(String(N)):qr.error("No next episode available"))};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}},[h,N,_t]);const $r=e=>{We(e);try{const s=Pe[e];s&&localStorage.setItem("tvLastAudio",Rn(s))}catch{}const n=le.current;n&&n.audioTrack!==void 0&&(n.audioTrack=e)},Dr=e=>{Q(e);try{if(e===-1)localStorage.setItem("tvSubtitlesEnabled","false");else{localStorage.setItem("tvSubtitlesEnabled","true"),localStorage.setItem("tvSelectedSubtitle",String(e));const m=pe[e];m&&localStorage.setItem("tvLastSubtitle",Rn(m))}}catch{}const n=d.current,s=le.current;if(s&&typeof s.subtitleTrack=="number"&&Array.isArray(s.subtitleTracks)&&s.subtitleTracks.length>0&&(s.subtitleTrack=ce.current.length>0||e<0?-1:e),!n)return;const o=ce.current;if(o.length>0){o.forEach((m,P)=>{const v=m.track;if(!v)return;const g=P===e;v.mode=g&&!I?"showing":"hidden"});return}Array.from(n.textTracks).forEach((m,P)=>{const v=P===e;m.mode=v&&!I?"showing":"hidden"})},Lt=C(()=>{if(!r)return;const e=d.current,n=h?"":`S${String(i).padStart(2,"0")}E${String(f).padStart(2,"0")}`;tt.discord.tvPresence.mutate({title:r.title,episodeLabel:n,isPlaying:e?!e.paused&&!e.ended:!0,thumbnail:r.poster,currentTime:e?e.currentTime:0,duration:e&&e.duration||0,isAdult:r.adult===!0,sessionId:fe.current}).catch(()=>{}),tt.discord.heartbeat.mutate({sessionId:fe.current}).catch(()=>{})},[r,h,i,f,d]);_(()=>{if(!r)return;Lt();const e=window.setInterval(()=>{const n=d.current;(!n||!n.paused)&&Lt()},15e3);return()=>window.clearInterval(e)},[Lt,r,d]),_(()=>{if(!r||A||rt||q||oe.length===0)return;const e=d.current;if(!e)return;const n=()=>Lt();return e.addEventListener("play",n),e.addEventListener("pause",n),e.addEventListener("seeked",n),()=>{e.removeEventListener("play",n),e.removeEventListener("pause",n),e.removeEventListener("seeked",n)}},[r,A,rt,q,oe,Lt,d]),_(()=>{const e=fe.current,n=()=>Kr(e),s=()=>n();return window.addEventListener("pagehide",s),window.addEventListener("beforeunload",s),()=>{window.removeEventListener("pagehide",s),window.removeEventListener("beforeunload",s),n()}},[]);const ar=Le==="all"?oe:oe.filter(e=>e.type===Le);return _(()=>{if(!r){document.title="TV & Movies - dango";return}document.title=h?`${r.title} - dango`:`${r.title} - Season ${i} Episode ${f} - dango`},[r,h,i,f]),_(()=>{if(!r||h)return;const e=new URLSearchParams(w),n=e.get("s"),s=e.get("e"),o=String(i),m=String(f);n===o&&s===m||(e.set("type",w.get("type")||"tv"),e.set("s",o),e.set("e",m),H(`${window.location.pathname}?${e.toString()}`,{replace:!0}))},[r,h,i,f,w,H]),t("div",{className:nt.playerPageLayout,children:[t("aside",{className:nt.episodeSidebar,children:r?h?t("div",{className:p.sidebarPosterCard,children:[r.poster&&t("img",{src:`https://image.tmdb.org/t/p/w342${r.poster}`,alt:r.title,loading:"lazy",decoding:"async"}),t("div",{className:p.sidebarPosterMeta,children:[t("strong",{children:r.title}),t("span",{children:r.year})]})]}):t(us,{episodes:rr,currentEpisode:String(f),watchedEpisodes:nr,onEpisodeClick:_t,header:cn}):h?t("div",{className:p.statusMsg,children:[t(D,{name:"spinner",className:p.spinner})," Loading..."]}):t(ms,{variant:"sidebar"})}),t("div",{className:nt.playerMain,children:[r&&t("div",{className:p.playerSection,onContextMenu:e=>e.preventDefault(),style:r.adult&&!ht?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:A&&Tt?t("iframe",{src:Tt,className:p.videoIframe,allow:"autoplay; fullscreen",allowFullScreen:!0}):!A&&(ar.length>0||rt)?t(Ae,{children:[q&&t("div",{className:`${p.statusMsg} ${p.error}`,style:{flexDirection:"column",alignItems:"stretch",gap:8},children:[t("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[t("span",{style:{flex:1},children:q}),t("button",{className:p.retryButton,onClick:on,children:"Retry"})]}),j.length>0&&t("div",{style:{display:"flex",flexWrap:"wrap",gap:6,alignItems:"center",marginTop:4},children:[t("span",{style:{fontSize:"0.8rem",opacity:.9,fontWeight:600},children:"Servers:"}),j.map(e=>t("button",{onClick:()=>wn(e),className:p.retryButton,style:{padding:"4px 8px",fontSize:"0.75rem",textTransform:"capitalize",background:J===e?"var(--accent)":void 0,color:J===e?"white":void 0},children:e},e))]})]}),t(fa,{player:S,title:r.title,episodeLabel:h?void 0:`S${i} E${f}`,audioTracks:Pe,selectedAudioTrack:Te,onAudioTrackChange:$r,subtitles:pe,selectedSubtitle:y,onSubtitleChange:Dr,streams:ar,qualityIdx:at,onQualityChange:ge,onBack:ln,movyServers:j,selectedMovyServer:J,onMovyServerSelect:wn,isMovySource:j.length>0,videoDelayEnabled:qe,onVideoDelayToggle:e=>{lt(e);try{localStorage.setItem("playerVideoDelayEnabled",String(e))}catch{}},videoDelayMs:Ue,onVideoDelayChange:Et,onCalibrateAvSync:It,subtitleDelayMs:Be,onSubtitleDelayChange:Yt,showNextEpisodeButton:fr&&!Ne&&!xe&&!Re,onNextEpisode:Jn,isLoading:rt,children:[t("video",{ref:d,autoPlay:Qe&&!At,playsInline:!0,disablePictureInPicture:!0,className:`${p.video} ${E?p.videoHidden:""}`,onTimeUpdate:xr,onEnded:()=>{_e||Er()},onPlay:Nr,onPause:wr,onSeeked:()=>{Qn.current=Date.now(),Pt()},onLoadedMetadata:Ir,onVolumeChange:S.actions.onVolumeChange,onWaiting:S.actions.onWaiting,onPlaying:S.actions.onPlaying,onCanPlay:S.actions.onCanPlay,onContextMenu:e=>e.preventDefault(),onError:()=>{K("Video failed to load. Try another server or reload."),M(!1)}}),t("canvas",{ref:Ut,className:`${p.delayCanvas} ${E?p.delayCanvasActive:""}`}),I&&t("div",{ref:qt,className:p.subtitleOverlay}),t(hs,{isOpen:bn,ms:Ue,onChange:Et,onApply:Qt,onClose:dt,testClipActive:_e,onTestClip:Gt})]})]}):q&&!A?t("div",{className:`${p.statusMsg} ${p.error}`,style:{flexDirection:"column",alignItems:"stretch",gap:8},children:[t("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[t("span",{style:{flex:1},children:q}),t("button",{className:p.retryButton,onClick:on,children:"Retry"})]}),j.length>0&&t("div",{style:{display:"flex",flexWrap:"wrap",gap:6,alignItems:"center",marginTop:4},children:[t("span",{style:{fontSize:"0.8rem",opacity:.9,fontWeight:600},children:"Servers:"}),j.map(e=>t("button",{onClick:()=>wn(e),className:p.retryButton,style:{padding:"4px 8px",fontSize:"0.75rem",textTransform:"capitalize",background:J===e?"var(--accent)":void 0,color:J===e?"white":void 0},children:e},e))]})]}):null}),r&&t(ps,{showTheater:!1}),cn&&t("div",{className:p.mobileSeasonRow,children:cn}),r&&t("div",{className:p.providerSelectWrap,children:t("label",{className:p.controlLabel,children:["Source",t("select",{value:$,onChange:e=>Lr(e.target.value),className:p.select,disabled:ie.length===0,children:gn?t("option",{value:"",children:"Loading…"}):ie.length===0?t("option",{value:"",children:"No providers available"}):t(Ae,{children:[je.length>0&&t("optgroup",{label:"Direct HLS",children:je.map(e=>t("option",{value:e.id,children:e.label},e.id))}),T.length>0&&t("optgroup",{label:"Embeds",children:T.map(e=>t("option",{value:e.id,children:e.label},e.id))})]})})]})}),r&&t("div",{className:nt.playerInfoContainer,children:[t("div",{className:nt.playerInfoHeader,children:[t("div",{className:nt.playerAnimeCard,children:r.poster&&t("img",{src:`https://image.tmdb.org/t/p/w342${r.poster}`,alt:r.title,loading:"lazy",decoding:"async"})}),t("div",{className:nt.videoTitleSection,children:[t("div",{className:ye.titleContainer,children:[t("h1",{children:r.title}),t("div",{className:p.meta,children:[t("span",{className:p.year,children:r.year}),r.vote_average!=null&&r.vote_average>0&&t("span",{className:p.rating,children:[t(D,{name:"star",size:12}),Number(r.vote_average).toFixed(1)]}),t("span",{className:`${p.typeBadge} ${p[h?"movie":"tv"]}`,children:h?"Movie":"TV Show"})]}),sr.length>0&&t("div",{className:p.genreRow,children:sr.map(e=>t("span",{className:p.genreChip,children:e},e))}),Nn.length>0&&t("div",{className:p.metaRow,children:Nn.map((e,n)=>t("span",{children:[e,n<Nn.length-1?" · ":""]},`${e}-${n}`))})]}),t("div",{className:ye.controls,children:[t("button",{className:`${ye.watchlistBtn} ${Zt?ye.inList:""}`,onClick:gr,disabled:pr,type:"button",children:[Zt?t(D,{name:"check",size:14}):t(D,{name:"plus",size:14}),Zt?"In Watchlist":"Add to Watchlist"]}),!h&&t(Ae,{children:[t("button",{className:`${ye.watchlistBtn}`,onClick:()=>yn!=null&&_t(String(yn)),disabled:yn==null,type:"button",children:[t(D,{name:"chevron-left",size:14}),"Prev EP"]}),t("button",{className:`${ye.watchlistBtn}`,onClick:()=>N!=null&&_t(String(N)),disabled:N==null,type:"button",children:["Next EP",t(D,{name:"chevron-right",size:14})]}),!h&&t("button",{className:`${ye.watchlistBtn} ${ye.modeToggleBtn} ${vt?ye.modeToggleActive:""}`,onClick:()=>Cr(!vt),type:"button","aria-pressed":vt,children:vt?"AUTOPLAY: ON":"AUTOPLAY: OFF"}),Sr&&t("button",{className:`${ye.watchlistBtn}`,onClick:()=>kn(!0),type:"button",children:[t(D,{name:"list-ul",size:14}),"Episodes"]})]})]})]})]}),t("div",{className:ye.descriptionSection,children:[t("h3",{children:"Synopsis"}),t(Bs,{text:r.overview,emptyText:"No description available."})]}),t("button",{className:ye.detailsToggleBtn,onClick:()=>br(!rn),type:"button",children:[rn?t(D,{name:"chevron-up"}):t(D,{name:"chevron-down"}),rn?"Hide Details":"Show Details"]}),rn&&t("div",{className:p.detailGrid,children:[r.first_air_date&&t("div",{className:p.detailItem,children:[t("strong",{children:h?"Release Date":"First Air Date"}),t("span",{children:r.first_air_date})]}),r.last_air_date&&t("div",{className:p.detailItem,children:[t("strong",{children:"Last Air Date"}),t("span",{children:r.last_air_date})]}),r.networks&&r.networks.length>0&&t("div",{className:p.detailItem,children:[t("strong",{children:"Networks"}),t("span",{children:r.networks.map(e=>e.name).join(", ")})]}),r.created_by&&r.created_by.length>0&&t("div",{className:p.detailItem,children:[t("strong",{children:"Created By"}),t("span",{children:r.created_by.map(e=>e.name).join(", ")})]}),r.episode_run_time&&r.episode_run_time.length>0&&t("div",{className:p.detailItem,children:[t("strong",{children:"Episode Runtime"}),t("span",{children:[r.episode_run_time[0]," min"]})]}),r.imdb_id&&t("div",{className:p.detailItem,children:[t("strong",{children:"IMDb"}),t("a",{href:`https://www.imdb.com/title/${r.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:p.imdbLink,children:"View on IMDb"})]})]})]}),!h&&t(gs,{isOpen:yr,onClose:()=>kn(!1),episodes:rr,currentEpisode:String(f),watchedEpisodes:nr,onEpisodeClick:_t,header:cn}),r?.adult&&!ht&&t(mn,{isOpen:!0,title:"Content Warning",onClose:ln,children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:"This title contains mature content intended for adult audiences."}),t("p",{children:["By proceeding, you confirm that you are ",t("strong",{children:"18 years of age or older"})," ","(or the age of majority in your jurisdiction) and wish to view this content."]}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[t(ke,{variant:"secondary",onClick:ln,children:"Go Back"}),t(ke,{onClick:Xt,children:"I'm 18+, Continue"})]})]})}),t(mn,{isOpen:Ne,onClose:Xn,title:"Resume Watching",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:["You were at ",t("strong",{children:Tr(ft)})]}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[t(ke,{variant:"secondary",onClick:Xn,children:"Start from Beginning"}),t(ke,{onClick:Br,children:"Resume"})]})]})}),t(mn,{isOpen:xe,onClose:Mr,title:h?"Movie Completed":"Episode Completed",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:h?t(Ae,{children:"You've already watched this movie."}):t(Ae,{children:["You've already watched"," ",t("strong",{children:["Season ",i," Episode ",f]}),". Would you like to continue?"]})}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center",flexWrap:"wrap"},children:[t(ke,{variant:"secondary",onClick:Ar,children:"Replay"}),N!=null?t(ke,{onClick:Jn,children:["Watch EP ",N]}):ve!=null?t(ke,{onClick:Zn,children:["Start Season ",ve]}):null]})]})}),t(mn,{isOpen:Re,onClose:()=>Ge(!1),title:h?"Movie Completed!":ve!=null?"Season Complete!":"Show Completed!",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t(D,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)",marginBottom:"0.5rem"}}),t("p",{style:{fontSize:"1.1rem",fontWeight:600},children:vr}),t("p",{style:{color:"var(--text-secondary)"},children:h?"You finished this movie!":ve!=null?`You finished Season ${i}.`:"Congratulations! You finished all available episodes."}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center",flexWrap:"wrap"},children:[t(ke,{variant:"secondary",onClick:()=>Ge(!1),children:"Close"}),ve!=null?t(ke,{onClick:Zn,children:["Start Season ",ve]}):t(Ae,{children:[t(ke,{onClick:()=>{Ge(!1),ln()},children:"Back to Details"}),Zt&&t(ke,{onClick:Pr,disabled:gt.isPending,children:gt.isPending?"Saving...":"Move to Completed"})]})]})]})}),!r&&t("div",{className:p.statusMsg,children:[t(D,{name:"spinner",className:p.spinner})," Loading..."]})]})]})};export{Mo as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as R,a as q,p as E,d as l,h as C,T,u as e,g as F}from"./vendor-core-DfaOB3Rn.js";import{I as a}from"./vendor-icons-DrybRNxP.js";import{e as j,t as U,B as w}from"./index-Rm4h42Uz.js";import{n as H,d as J,e as K,f as Q,t as I}from"./useTvLibrary-DFfgk9YS.js";import"./vendor-query-BBT5_sHx.js";const X="_container_198yg_1",Y="_heroSection_198yg_11",Z="_bannerContainer_198yg_17",ee="_banner_198yg_17",ne="_bannerOverlay_198yg_37",te="_heroContent_198yg_49",se="_posterContainer_198yg_62",ae="_poster_198yg_62",oe="_infoGlass_198yg_86",ie="_title_198yg_100",re="_quickMeta_198yg_110",le="_metaItem_198yg_118",ce="_iconStar_198yg_126",de="_iconTv_198yg_130",me="_iconType_198yg_134",_e="_genres_198yg_139",he="_genre_198yg_139",ge="_metaRow_198yg_156",ve="_metaValue_198yg_164",pe="_metaDivider_198yg_168",ye="_synopsisSection_198yg_173",ue="_sectionTitleSmall_198yg_179",ke="_synopsis_198yg_173",be="_actions_198yg_196",Ne="_watchBtn_198yg_202",Se="_watchlistBtn_198yg_226",fe="_active_198yg_250",Ce="_seasonPickerLabel_198yg_256",Te="_seasonSelect_198yg_267",we="_detailsToggleBtn_198yg_286",Ie="_expandedContent_198yg_304",Be="_detailGrid_198yg_309",De="_detailItem_198yg_315",Me="_imdbLink_198yg_333",Le="_heroSkeleton_198yg_343",Pe="_skeletonBanner_198yg_347",$e="_skeletonContent_198yg_354",Ge="_skeletonPoster_198yg_365",xe="_skeletonInfo_198yg_373",Oe="_skeletonTitle_198yg_380",Ae="_skeletonMeta_198yg_388",Ve="_skeletonDesc_198yg_396",We="_skeletonActions_198yg_404",ze="_errorState_198yg_413",Re="_matureOverlay_198yg_434",qe="_matureContent_198yg_444",n={container:X,heroSection:Y,bannerContainer:Z,banner:ee,bannerOverlay:ne,heroContent:te,posterContainer:se,poster:ae,infoGlass:oe,title:ie,quickMeta:re,metaItem:le,iconStar:ce,iconTv:de,iconType:me,genres:_e,genre:he,metaRow:ge,metaValue:ve,metaDivider:pe,synopsisSection:ye,sectionTitleSmall:ue,synopsis:ke,actions:be,watchBtn:Ne,watchlistBtn:Se,active:fe,seasonPickerLabel:Ce,seasonSelect:Te,detailsToggleBtn:we,expandedContent:Ie,detailGrid:Be,detailItem:De,imdbLink:Me,heroSkeleton:Le,skeletonBanner:Pe,skeletonContent:$e,skeletonPoster:Ge,skeletonInfo:xe,skeletonTitle:Oe,skeletonMeta:Ae,skeletonDesc:Ve,skeletonActions:We,errorState:ze,matureOverlay:Re,matureContent:qe};function Je(){const{id:o}=R(),c=q(),[B]=E(),i=H(B.get("type")),{hasConsent:D}=j(),[t,M]=l(null),[L,_]=l(!0),[y,u]=l(""),[d,P]=l(!1),[h,$]=l(1),G=J(i,o),x=Number(o),{data:O}=K(t?G:void 0),g=!!O?.inLibrary,{toggle:A}=Q();C(()=>{o&&(_(!0),u(""),U.tv.details.query({type:i,id:String(o)}).then(s=>{const m={id:s.id,title:s.title||"",overview:s.overview||"",vote_average:s.vote_average,year:s.year,poster:s.poster,backdrop:s.backdrop,imdb_id:s.imdb_id||void 0,adult:s.adult,seasons:s.seasons?.map(z=>({...z,name:""})),number_of_seasons:s.number_of_seasons};M(m),_(!1)}).catch(s=>{u(s.message),_(!1)}))},[o,i]),C(()=>{document.title=t?.title?`${t.title} - dango`:"TV & Movies - dango"},[t?.title]);const V=()=>{!o||!t||c(r?I(i,o):I(i,o,h,1))},W=()=>{t&&A({tmdbId:x,mediaType:i,title:t.title,poster:t.poster,year:t.year,adult:t.adult})},r=i==="movie",v=!r,k=t?.backdrop?`https://image.tmdb.org/t/p/w1280${t.backdrop}`:"",b=t?.poster?`https://image.tmdb.org/t/p/w500${t.poster}`:"",N=T(()=>t?.genres?t.genres.map(s=>s.name).slice(0,5):[],[t?.genres]),S=T(()=>t?.seasons?t.seasons.filter(s=>s.season_number>0):[],[t?.seasons]),p=[t?.year,t?.status,v&&t?.number_of_seasons?`${t.number_of_seasons} Season${t.number_of_seasons>1?"s":""}`:null,v&&t?.number_of_episodes?`${t.number_of_episodes} Episodes`:null].filter(Boolean);if(L)return e("div",{className:n.container,children:e("div",{className:n.heroSkeleton,children:[e("div",{className:n.skeletonBanner}),e("div",{className:n.skeletonContent,children:[e("div",{className:n.skeletonPoster}),e("div",{className:n.skeletonInfo,children:[e("div",{className:n.skeletonTitle}),e("div",{className:n.skeletonMeta}),e("div",{className:n.skeletonDesc}),e("div",{className:n.skeletonActions})]})]})]})});if(y||!t)return e("div",{className:n.container,children:e("div",{className:n.errorState,children:[e(a,{name:"exclamation-triangle",size:48}),e("h2",{children:"Failed to load details"}),e("p",{children:y||"Something went wrong"}),e(w,{onClick:()=>c(-1),children:"Go Back"})]})});const f=t.adult&&!D;return e("div",{className:n.container,style:f?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:[e("div",{className:n.heroSection,children:[e("div",{className:n.bannerContainer,children:[k&&e("div",{className:n.banner,style:{backgroundImage:`url(${k})`}}),e("div",{className:n.bannerOverlay})]}),e("div",{className:n.heroContent,children:[e("div",{className:n.posterContainer,children:b&&e("img",{src:b,alt:t.title,className:n.poster,decoding:"async"})}),e("div",{className:n.infoGlass,children:[e("div",{className:n.topInfo,children:[e("h1",{className:n.title,children:t.title}),e("div",{className:n.quickMeta,children:[t.vote_average!=null&&t.vote_average>0&&e("div",{className:n.metaItem,children:[e(a,{name:"star",className:n.iconStar}),e("span",{children:Number(t.vote_average).toFixed(1)})]}),e("div",{className:n.metaItem,children:[e(a,{name:"tv",className:n.iconTv}),e("span",{children:r?"Movie":"TV Show"})]}),t.vote_count!=null&&e("div",{className:n.metaItem,children:[e(a,{name:"users",className:n.iconType}),e("span",{children:[t.vote_count.toLocaleString()," votes"]})]})]}),N.length>0&&e("div",{className:n.genres,children:N.map(s=>e("span",{className:n.genre,children:s},s))})]}),p.length>0&&e("div",{className:n.metaRow,children:p.map((s,m)=>e(F.Fragment,{children:[e("span",{className:n.metaValue,children:s}),m<p.length-1&&e("span",{className:n.metaDivider,children:"·"})]},m))}),t.overview&&e("div",{className:n.synopsisSection,children:[e("h2",{className:n.sectionTitleSmall,children:"Synopsis"}),e("p",{className:n.synopsis,children:t.overview})]}),e("div",{className:n.actions,children:[e("button",{className:n.watchBtn,onClick:V,children:[e(a,{name:"play",size:14}),r?"Watch Now":`Start S${h}`]}),e("button",{className:`${n.watchlistBtn} ${g?n.active:""}`,onClick:W,children:[g?e(a,{name:"check",size:14}):e(a,{name:"plus",size:14}),g?"In Watchlist":"Add to Watchlist"]})]}),v&&S.length>1&&e("label",{className:n.seasonPickerLabel,children:[e("span",{children:"Season"}),e("select",{value:h,onChange:s=>$(parseInt(s.target.value,10)||1),className:n.seasonSelect,children:S.map(s=>e("option",{value:s.season_number,children:["Season ",s.season_number," (",s.episode_count," Episodes)"]},s.season_number))})]}),e("button",{className:n.detailsToggleBtn,onClick:()=>P(!d),children:[d?e(a,{name:"chevron-up"}):e(a,{name:"chevron-down"}),d?"Hide Details":"Show Details"]}),d&&e("div",{className:n.expandedContent,children:e("div",{className:n.detailGrid,children:[t.first_air_date&&e("div",{className:n.detailItem,children:[e("strong",{children:r?"Release Date":"First Air Date"}),e("span",{children:t.first_air_date})]}),t.last_air_date&&e("div",{className:n.detailItem,children:[e("strong",{children:"Last Air Date"}),e("span",{children:t.last_air_date})]}),t.networks&&t.networks.length>0&&e("div",{className:n.detailItem,children:[e("strong",{children:"Networks"}),e("span",{children:t.networks.map(s=>s.name).join(", ")})]}),t.created_by&&t.created_by.length>0&&e("div",{className:n.detailItem,children:[e("strong",{children:"Created By"}),e("span",{children:t.created_by.map(s=>s.name).join(", ")})]}),t.episode_run_time&&t.episode_run_time.length>0&&e("div",{className:n.detailItem,children:[e("strong",{children:"Episode Runtime"}),e("span",{children:[t.episode_run_time[0]," min"]})]}),t.imdb_id&&e("div",{className:n.detailItem,children:[e("strong",{children:"IMDb"}),e("a",{href:`https://www.imdb.com/title/${t.imdb_id}`,target:"_blank",rel:"noopener noreferrer",className:n.imdbLink,children:"View on IMDb"})]})]})})]})]})]}),f&&e("div",{className:n.matureOverlay,children:e("div",{className:n.matureContent,children:[e(a,{name:"exclamation-triangle",size:48}),e("h2",{children:"Content Warning"}),e("p",{children:"This content may contain mature themes."}),e(w,{onClick:()=>c("/"),children:"Go Back"})]})})]})}export{Je as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as b,d as v,h as P,T as z,u as e,S,L as p}from"./vendor-core-
|
|
1
|
+
import{A as b,d as v,h as P,T as z,u as e,S,L as p}from"./vendor-core-DfaOB3Rn.js";import{I as i}from"./vendor-icons-DrybRNxP.js";import{f as W,d as B,c as D,t as L}from"./useTvLibrary-DFfgk9YS.js";import{t as M}from"./index-Rm4h42Uz.js";import{p as a,a as A}from"./MediaCard-6Yy_-Whn.js";const R=({item:s,anchorRect:m,onMouseEnter:u,onMouseLeave:g,onRequestClose:r})=>{const d=b(!1),[n,N]=v(null),[f,l]=v(!0),{toggle:y,bookmarkedIds:w}=W(),I=B(s.type,s.id),c=w.has(I);P(()=>{let t=!1;return l(!0),M.tv.details.query({type:s.type,id:String(s.id)}).then(o=>{t||(N({overview:o.overview,vote_average:o.vote_average,number_of_seasons:o.number_of_seasons}),l(!1))}).catch(()=>{t||l(!1)}),()=>{t=!0}},[s.id,s.type]);const h=z(()=>n?.genres?n.genres.slice(0,4).map(t=>t.name):[],[n?.genres]),k=D(s.type,s.id),T=L(s.type,s.id),_=t=>{t.preventDefault(),t.stopPropagation(),y({tmdbId:s.id,mediaType:s.type,title:s.title,poster:s.image,year:s.year})};return e(A,{anchorRect:m,onMouseEnter:()=>{d.current=!0,u()},onMouseLeave:()=>{d.current=!1,g()},onRequestClose:r,children:[e("div",{className:a.header,children:e("div",{className:a.title,children:s.title})}),e("div",{className:a.body,children:f?e("div",{className:a.loading,children:[e("div",{className:a.spinner}),e("span",{children:"Fetching details..."})]}):e(S,{children:[e("div",{className:a.metaRow,children:[n?.vote_average!=null&&n.vote_average>0&&e("div",{className:a.metaItem,children:[e(i,{name:"star",className:a.scoreIcon,size:14}),e("span",{children:Number(n.vote_average).toFixed(1)})]}),e("div",{className:a.metaItem,children:[e(i,{name:"tv",size:14}),e("span",{children:s.type==="tv"?"TV Show":"Movie"})]}),s.year&&e("div",{className:a.metaItem,children:e("span",{children:s.year})}),n?.status&&e("div",{className:a.metaItem,children:e("span",{children:n.status})})]}),h.length>0&&e("div",{className:a.genres,children:h.map(t=>e("span",{className:a.genre,children:t},t))}),n?.overview&&e("div",{className:a.synopsis,children:n.overview.length>200?n.overview.slice(0,200)+"...":n.overview})]})}),e("div",{className:a.footer,children:[e("div",{className:a.primaryAction,children:e(p,{to:T,className:a.watchBtn,onClick:r,children:[e(i,{name:"play",size:14}),"Watch now"]})}),e("div",{className:a.secondaryActions,children:[e("button",{className:`${a.watchlistBtn} ${c?a.active:""}`,onClick:_,children:[c?e(i,{name:"check",size:12}):e(i,{name:"plus",size:12}),e("span",{children:c?"Remove":"Watchlist"})]}),e(p,{to:k,className:a.detailsBtn,onClick:r,children:[e(i,{name:"info-circle",size:12}),e("span",{children:"Details"})]})]})]})]})};export{R as T};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as W,
|
|
1
|
+
import{h as W,p as ae,A as re,d as o,T as z,q as A,u as t}from"./vendor-core-DfaOB3Rn.js";import{I as p}from"./vendor-icons-DrybRNxP.js";import{P as I,S as ne}from"./SkeletonGrid-C7Gj9ODL.js";import{a as se,T as le}from"./useTv-DtiSJ756.js";import{u as ie,U as oe,B as x}from"./index-Rm4h42Uz.js";import{E as ce}from"./ErrorMessage-DAxegITP.js";import{s as r}from"./Search.module-CMEai-B-.js";import"./MediaCard-6Yy_-Whn.js";import"./vendor-ui-3qrARCPr.js";import"./useIsMobile-Dvx1uJ82.js";import"./TvPopup-BArrygql.js";import"./useTvLibrary-DFfgk9YS.js";import"./vendor-query-BBT5_sHx.js";const de=[{value:"multi",label:"All"},{value:"tv",label:"TV Shows"},{value:"movie",label:"Movies"}],me=[{value:"popularity.desc",label:"Popularity"},{value:"vote_average.desc",label:"Top Rated"},{value:"primary_release_date.desc",label:"Newest"},{value:"primary_release_date.asc",label:"Oldest"},{value:"vote_count.desc",label:"Most Voted"}],Y={10759:"Action & Adventure",16:"Animation",35:"Comedy",80:"Crime",99:"Documentary",18:"Drama",10751:"Family",10762:"Kids",9648:"Mystery",10765:"Sci-Fi & Fantasy",37:"Western"},H={28:"Action",12:"Adventure",16:"Animation",35:"Comedy",80:"Crime",99:"Documentary",18:"Drama",10751:"Family",14:"Fantasy",36:"History",27:"Horror",9648:"Mystery",10749:"Romance",878:"Sci-Fi",53:"Thriller",10752:"War",37:"Western"},O=new Date().getFullYear(),ue=[{value:"ALL",label:"All Years"},...Array.from({length:O-1980+1},(l,u)=>({value:String(O-u),label:String(O-u)}))];function Me(){W(()=>{document.title="Search TV & Movies - dango"},[]);const[l,u]=ae(),{lowEndMode:K}=ie(),C=re(null),[g,Q]=o(l.get("q")||""),[h,U]=o(l.get("q")||""),[m,v]=o(parseInt(l.get("page")||"1",10)||1),[i,J]=o(l.get("type")||"multi"),[$,k]=o(l.get("genre")||""),[y,F]=o(l.get("year")||"ALL"),[f,B]=o(l.get("sort_by")||"popularity.desc"),[b,X]=o(!1),[c,N]=o(()=>{const e={},a=l.get("genre")||"";return a&&(e[a]="include"),e}),M=z(()=>{if(i==="tv")return Object.entries(Y).map(([a,n])=>({id:a,name:n}));if(i==="movie")return Object.entries(H).map(([a,n])=>({id:a,name:n}));const e=new Map;for(const[a,n]of Object.entries(Y))e.set(a,n);for(const[a,n]of Object.entries(H))e.set(a,n);return Array.from(e.entries()).map(([a,n])=>({id:a,name:n}))},[i]),S=z(()=>Object.entries(c).filter(([,a])=>a==="include").map(([a])=>a).join(","),[c]),{data:P,isLoading:w,isError:Z,error:ee}=se({query:h,type:i,genre:S,year:y,sort_by:f,page:m}),T=P?.results||[],L=P?.total_pages||0,E=P?.total_results||0,R=m<Math.min(L,500),d=A((e={})=>{const a=new URLSearchParams,n=e.q!==void 0?e.q:h,s=e.type!==void 0?e.type:i,q=e.year!==void 0?e.year:y,G=e.sort!==void 0?e.sort:f,D=e.page!==void 0?e.page:String(m),V=e.genre!==void 0?e.genre:S;n.trim()&&a.set("q",n.trim()),s!=="multi"&&a.set("type",s),V&&a.set("genre",V),q!=="ALL"&&a.set("year",q),G!=="popularity.desc"&&a.set("sort_by",G),D!=="1"&&a.set("page",D),u(a,{replace:!0})},[h,i,y,f,m,S,u]),_=A(()=>{oe(),v(1),U(g),d({q:g,page:"1"}),window.scrollTo({top:0,behavior:"smooth"})},[g,d]),j=A(e=>{if(v(e),d({page:String(e)}),C.current){const a=C.current.getBoundingClientRect().top+window.scrollY-100;window.scrollTo({top:a,behavior:"smooth"})}},[d]),te=A(e=>{N(a=>{const n=a[e],s={...a};return n==="include"?s[e]="exclude":n==="exclude"?delete s[e]:s[e]="include",s}),v(1)},[]);return W(()=>{const a=Object.entries(c).filter(([,n])=>n==="include").map(([n])=>n).join(",");a!==$&&(k(a),d({genre:a,page:"1"}))},[c,$,k,d]),t("div",{className:"page-container",children:[t("div",{className:r.header,children:[t("h1",{className:r.pageTitle,children:"Search TV & Movies"}),t("p",{className:r.pageSubtitle,children:"Discover trending shows, movies, and more powered by TMDB"})]}),t("div",{className:r.filterContainer,children:[t("div",{className:r.searchBarWrapper,children:[t("div",{className:r.inputIconWrapper,children:[t(p,{name:"search",className:r.searchIcon}),t("input",{type:"text","data-virtual-keyboard":"true",className:r.searchInput,placeholder:"Search titles...",value:g,onInput:e=>Q(e.currentTarget.value),onKeyDown:e=>e.key==="Enter"&&_()})]}),t("div",{className:r.searchActions,children:[t("select",{value:i,onChange:e=>{J(e.target.value),N({})},className:r.providerSelect,"aria-label":"Media type",children:de.map(e=>t("option",{value:e.value,children:e.label},e.value))}),t(x,{onClick:_,className:r.searchBtn,children:"Search"}),t("button",{className:`${r.filterToggleBtn} ${b?r.active:""}`,onClick:()=>X(!b),children:[t(p,{name:"filter",size:14}),t("span",{children:"Filters"}),b?t(p,{name:"chevron-up",size:12}):t(p,{name:"chevron-down",size:12})]})]})]}),t("div",{className:`${r.advancedFilters} ${b?r.show:""}`,children:[t("div",{className:r.filterDivider}),t("div",{className:r.filterGrid,children:[t("div",{className:r.filterItem,children:[t("label",{children:"Sort By"}),t("select",{value:f,onChange:e=>B(e.currentTarget.value),children:me.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:r.filterItem,children:[t("label",{children:"Year"}),t("select",{value:y,onChange:e=>F(e.currentTarget.value),children:ue.map(e=>t("option",{value:e.value,children:e.label},e.value))})]})]}),M.length>0&&t("div",{className:r.genreSection,children:[t("label",{className:r.genreLabel,children:"Genres"}),t("div",{className:r.genreContainer,children:M.map(e=>t("button",{className:`${r.genreButton} ${r[c[e.id]||""]}`,onClick:()=>te(e.id),children:e.name},e.id))})]}),t("div",{className:r.filterActions,children:[t(x,{variant:"secondary",onClick:()=>{N({}),F("ALL"),B("popularity.desc"),v(1),d({genre:"",year:"ALL",sort:"popularity.desc",page:"1"})},children:"Reset All"}),t(x,{onClick:_,className:r.searchBtn,children:"Apply Filters"})]})]})]}),Z&&t(ce,{message:ee?.message||"Search failed"}),Object.keys(c).length>0&&t("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px",marginBottom:"1.5rem"},children:[t("span",{style:{fontSize:"0.8rem",color:"var(--text-muted)",fontWeight:600},children:"Active Filters:"}),Object.entries(c).map(([e,a])=>{const n=M.find(s=>s.id===e)?.name||e;return t("span",{className:`badge ${a==="include"?"badge-primary":"badge-danger"}`,style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:[a==="include"?`+ ${n}`:`- ${n}`,t("button",{onClick:()=>{const s={...c};delete s[e],N(s)},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]},e)})]}),t("div",{className:r.resultsHeader,ref:C,children:[t("h2",{className:r.resultsTitle,children:[h?`Results for "${h}"`:S?"Browsing genres":i==="tv"?"Popular TV Shows":i==="movie"?"Popular Movies":"Trending",E>0&&t("span",{style:{fontWeight:400,color:"var(--text-tertiary)",fontSize:"0.85em",marginLeft:"0.5em"},children:["(",E.toLocaleString(),")"]})]}),T.length>0&&t(I,{page:m,totalPages:Math.max(1,Math.min(L,500)),canGoNext:R,onChange:j,isLoading:w})]}),t("div",{className:`${r.resultsGrid} ${K?r.lowEnd:""}`,children:w?t(ne,{}):T.map(e=>t(le,{item:{id:e.id,title:e.title,year:e.year,type:e.type,image:e.image,vote_average:e.vote_average,adult:e.adult}},`${e.type}-${e.id}`))}),!w&&T.length===0&&t("div",{className:r.noResults,children:[t(p,{name:"search",size:48,className:r.noResultsIcon}),t("h3",{children:"No results found"}),t("p",{children:"Try adjusting your search or filters to find what you're looking for."})]}),T.length>0&&t("div",{className:r.bottomPagination,children:t(I,{page:m,totalPages:Math.max(1,Math.min(L,500)),canGoNext:R,onChange:j,isLoading:w,variant:"labeled"})})]})}export{Me as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{o as U,d as v,h as y,T as x,u as l}from"./vendor-core-DfaOB3Rn.js";import{M as N}from"./MediaCard-6Yy_-Whn.js";import{L as _}from"./LibraryListPage-BVHcMPqZ.js";import{R as K}from"./ResetProgressModal-HUj5zATK.js";import{T as O}from"./TvPopup-BArrygql.js";import{g as u}from"./index-Rm4h42Uz.js";import{l as Q,u as Y,a as q,b as z,h as G,m as Z,o as j,p as D,t as S,i as I,T as k}from"./useTvLibrary-DFfgk9YS.js";import"./vendor-ui-3qrARCPr.js";import"./vendor-icons-DrybRNxP.js";import"./useIsMobile-Dvx1uJ82.js";import"./SkeletonGrid-C7Gj9ODL.js";import"./ErrorMessage-DAxegITP.js";import"./Watchlist.module-XGtVQr1d.js";import"./vendor-query-BBT5_sHx.js";const H=["All","Continue Watching",...k],P=24;function ce(){const{filter:d="All"}=U(),[T,g]=v(1),[s,p]=v(null),[h,c]=v(!1);y(()=>{document.title="TV Watchlist - dango"},[]),y(()=>{g(1)},[d]);const o=d==="Continue Watching",r=Q(o?"All":d,T,P),i=Y(100),b=q(),w=z(),C=G(),W=Z(),B=j(),E=D(),M=x(()=>o?(i.data?.data??[]).map(e=>{const a=e.currentTime??0,t=e.duration??0,f=e.season??e.lastSeason??1,R=e.episode??e.lastEpisode??1,n=e.mediaType==="movie",m=n?"Movie":`S${f} E${R}`,L=e.completed===!0||e.completed===1||t>0&&a>=t*.8;return{key:e.id,libId:e.id,tmdbId:e.tmdbId,mediaType:e.mediaType,title:e.title,poster:e.poster||"",year:e.year,adult:I({adult:e.adult===1}),status:e.status,badge:m,progressPercent:L?100:t>0?a/t*100:0,progressLabel:t>0?L?"Watched":n?`${u(a)} / ${u(t)}`:`${m} · ${u(a)} / ${u(t)}`:m,watchTarget:S(e.mediaType,e.tmdbId,n?void 0:f,n?void 0:R)}}):(r.data?.data??[]).map(e=>({key:e.id,libId:e.id,tmdbId:e.tmdbId,mediaType:e.mediaType,title:e.title,poster:e.poster||"",year:e.year,adult:I({adult:e.adult===1}),status:e.status,badge:e.lastSeason&&e.lastEpisode?`S${e.lastSeason} E${e.lastEpisode}`:void 0,progressPercent:void 0,progressLabel:void 0,watchTarget:S(e.mediaType,e.tmdbId,e.lastSeason??void 0,e.lastEpisode??void 0)})),[o,i.data,r.data]),A=o?i.data?.total??0:r.data?.total??0,V=o?i.isLoading:r.isLoading,$=o?i.error:r.error,F=()=>{s&&(w.mutate({mediaId:s.libId}),h&&b.mutate(s.libId),p(null),c(!1))};return l(_,{headerTitle:"My TV Watchlist",headerSubtitle:"Track and manage your movies and shows",filters:H,filterBy:d,filterBasePath:"/tv-watchlist",continueFilter:"Continue Watching",statusOptions:[...k],entries:M,total:A,isLoading:V,error:$,page:T,pageSize:P,onPageChange:g,emptyTitle:"Your TV watchlist is looking a bit empty",emptyFilteredText:"No titles match this filter.",emptyAllText:"Let's find something to watch!",browseLabel:"Browse TV & Movies",browseTarget:"/tv",removeListLabel:"Remove from TV Watchlist",listNoun:"TV watchlist",skipConfirmKey:"tvSkipRemoveConfirmation",onBulkStatus:(e,a)=>W.mutate({ids:e,status:a}),onBulkRemove:e=>{o?E.mutate(e):B.mutate(e)},onStatusChange:(e,a)=>C.mutate({id:e,status:a}),onRemoveItem:e=>b.mutate(e),renderCard:e=>l(N,{item:{id:e.libId,title:e.title,thumbnail:e.poster,typeBadge:e.mediaType==="movie"?"Movie":"TV",chapterBadge:e.badge??null,isAdult:e.adult},linkTo:e.watchTarget,hoverIcon:"play",progress:e.progressPercent!==void 0&&e.progressLabel?{percent:e.progressPercent,label:e.progressLabel}:void 0,showProgress:o,metaRow:e.year?l("span",{style:{opacity:.75},children:e.year}):void 0,onRemove:o?()=>p(e):void 0,renderPopup:(a,t)=>l(O,{item:{id:e.tmdbId??0,title:e.title||"",year:e.year||"",type:e.mediaType||"tv",image:e.poster||""},anchorRect:a,onMouseEnter:t.onMouseEnter,onMouseLeave:t.onMouseLeave,onRequestClose:t.close})}),modals:l(K,{isOpen:!!s,itemName:s?.title,progressKind:"watch",listLabel:"my TV watchlist",alsoRemove:h,onAlsoRemoveChange:c,onClose:()=>{p(null),c(!1)},onConfirm:F})})}export{ce as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as v,A as E,h as k,q as K,$ as I,u as o}from"./vendor-core-
|
|
1
|
+
import{d as v,A as E,h as k,q as K,$ as I,u as o}from"./vendor-core-DfaOB3Rn.js";const D="_keyboard_1ia7t_1",O="_small_1ia7t_18",W="_medium_1ia7t_25",R="_large_1ia7t_32",T="_topBar_1ia7t_39",q="_dragHandle_1ia7t_48",U="_grip_1ia7t_59",V="_topButton_1ia7t_67",X="_key_1ia7t_1",Y="_closeButton_1ia7t_98",j="_keys_1ia7t_104",A="_row_1ia7t_111",F="_wideKey_1ia7t_127",J="_extraWideKey_1ia7t_131",P="_spaceKey_1ia7t_135",G="_spaceIcon_1ia7t_143",Q="_activeKey_1ia7t_151",t={keyboard:D,small:O,medium:W,large:R,topBar:T,dragHandle:q,grip:U,topButton:V,key:X,closeButton:Y,keys:j,row:A,wideKey:F,extraWideKey:J,spaceKey:P,spaceIcon:G,activeKey:Q},N="virtual-keyboard-state",b=["small","medium","large"],Z=["1","2","3","4","5","6","7","8","9","0"],ee=["!","@","#","$","%","^","&","*","(",")"],te=[["q","w","e","r","t","y","u","i","o","p"],["a","s","d","f","g","h","j","k","l"],["z","x","c","v","b","n","m"]],ne=()=>{const i={position:{x:Math.max(12,window.innerWidth-690),y:Math.max(90,window.innerHeight-330)},size:"medium"};try{const c=localStorage.getItem(N);if(!c)return i;const s=JSON.parse(c);return{position:s.position&&Number.isFinite(s.position.x)&&Number.isFinite(s.position.y)?s.position:i.position,size:s.size&&b.includes(s.size)?s.size:i.size}}catch{return i}},x=(i,c)=>{const s=c?.offsetWidth??650,r=c?.offsetHeight??270;return{x:Math.min(Math.max(8,i.x),Math.max(8,window.innerWidth-s-8)),y:Math.min(Math.max(8,i.y),Math.max(8,window.innerHeight-r-8))}};function se({activeInputRef:i,isVisible:c,onClose:s}){const[{position:r,size:l},h]=v(ne),[f,S]=v(!1),[g,$]=v(!1),_=E(null),u=E(null);k(()=>{localStorage.setItem(N,JSON.stringify({position:r,size:l}))},[r,l]),k(()=>{const e=()=>{h(n=>({...n,position:x(n.position,_.current)}))};return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);const w=()=>i.current&&document.contains(i.current)?i.current:document.activeElement instanceof HTMLInputElement?document.activeElement:null,d=e=>{const n=w();if(!n)return;const a=n.selectionStart??n.value.length,y=n.selectionEnd??n.value.length;n.setRangeText(e,a,y,"end"),n.dispatchEvent(new Event("input",{bubbles:!0})),n.focus()},z=()=>{const e=w();if(!e)return;const n=e.selectionStart??e.value.length,a=e.selectionEnd??e.value.length;n===a&&n===0||(e.setRangeText("",n===a?n-1:n,a,"end"),e.dispatchEvent(new Event("input",{bubbles:!0})),e.focus())},M=()=>{const e=w();if(!e){s();return}const n=e.form;n?n.requestSubmit():e.dispatchEvent(new KeyboardEvent("keydown",{key:"Enter",bubbles:!0})),s()},B=e=>{e.preventDefault()},m=K(e=>{if(!u.current)return;const n={x:e.clientX-u.current.x,y:e.clientY-u.current.y};h(a=>({...a,position:x(n,_.current)}))},[]),p=K(()=>{u.current=null,window.removeEventListener("mousemove",m),window.removeEventListener("mouseup",p)},[m]),C=e=>{e.preventDefault(),u.current={x:e.clientX-r.x,y:e.clientY-r.y},window.addEventListener("mousemove",m),window.addEventListener("mouseup",p)};if(k(()=>()=>{window.removeEventListener("mousemove",m),window.removeEventListener("mouseup",p)},[m,p]),!c)return null;const L=g?ee:Z,H=()=>{h(e=>{const n=b[(b.indexOf(e.size)+1)%b.length];return{...e,size:n}})};return I(o("div",{ref:_,className:`${t.keyboard} ${t[l]}`,style:{left:r.x,top:r.y},onMouseDown:B,"data-virtual-keyboard-root":!0,children:[o("div",{className:t.topBar,children:[o("div",{className:t.dragHandle,onMouseDown:C,"aria-label":"Move virtual keyboard",children:[o("span",{className:t.grip,"aria-hidden":"true"}),o("span",{children:"Virtual Keyboard"})]}),o("button",{type:"button",className:t.topButton,onClick:H,children:["Size: ",l[0].toUpperCase()+l.slice(1)]}),o("button",{type:"button",className:`${t.topButton} ${t.closeButton}`,onClick:s,children:"X"})]}),o("div",{className:t.keys,children:[o("div",{className:t.row,children:[L.map(e=>o("button",{type:"button",className:t.key,onClick:()=>d(e),children:e},e)),o("button",{type:"button",className:`${t.key} ${t.wideKey}`,onClick:z,"aria-label":"Backspace",children:"⟵"})]}),te.map((e,n)=>o("div",{className:t.row,children:[e.map(a=>{const y=f?a.toUpperCase():a;return o("button",{type:"button",className:t.key,onClick:()=>d(y),children:y},a)}),n===1&&o("button",{type:"button",className:`${t.key} ${t.wideKey}`,onClick:M,children:"Enter"})]},e.join(""))),o("div",{className:t.row,children:[o("button",{type:"button",className:`${t.key} ${t.wideKey} ${g?t.activeKey:""}`,onClick:()=>$(e=>!e),children:"Ctrl"}),o("button",{type:"button",className:`${t.key} ${t.wideKey} ${f?t.activeKey:""}`,onClick:()=>S(e=>!e),children:"Shift"}),o("button",{type:"button",className:`${t.key} ${t.spaceKey}`,onClick:()=>d(" "),"aria-label":"Space",children:o("span",{className:t.spaceIcon})}),o("button",{type:"button",className:t.key,onClick:()=>d("."),children:"."}),o("button",{type:"button",className:t.key,onClick:()=>d("-"),children:"-"})]})]})]}),document.body)}export{se as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as ge,n as Ke,a as Qe,o as Ve,d as u,A as ve,T as R,u as t,S as He}from"./vendor-core-8R2fFbyN.js";import{u as Ze,a as fe}from"./vendor-query-BUTye89G.js";import{g as Je,u as Xe,d as et,r as tt,v as ye,w as Se,z as at,t as nt,j as st,x as lt,y as rt,A as it,C as ct,D as ot,B as T,M as ae}from"./index-B5SLDCAi.js";import{I as p}from"./vendor-icons-CDMuNDeL.js";import{A as dt}from"./AnimeCard-B0oMgXBm.js";import{P as be,S as ut}from"./SkeletonGrid-BJyZkg_K.js";import{E as mt}from"./ErrorMessage-z4f4WGgP.js";import{s as a}from"./Watchlist.module-XGtVQr1d.js";import"./useAnimeInfoData-DU9X90no.js";import"./QueueOptionsButton-1M7MdKzM.js";import"./vendor-ui-CUDCvRS_.js";import"./MediaCard-DzA336CA.js";import"./useIsMobile-Dm_b6Ob3.js";const ht=(d,g)=>{const l=new URLSearchParams(g);return l.delete("page"),l.sort(),`${d}|${l.toString()}`},pt=(d,g)=>{const l=new Set(d);return g.forEach(N=>l.add(N)),l},gt=(d,g)=>{const l=new Set(d);return g.forEach(N=>l.delete(N)),l},Ae=["All","Continue Watching","Watching","Completed","On-Hold","Dropped","Planned"],Le=Ae.slice(2),vt=[{value:"ALL",label:"All Types"},{value:"TV",label:"TV Series"},{value:"Movie",label:"Movie"},{value:"OVA",label:"OVA"},{value:"ONA",label:"ONA"},{value:"TV_SHORT",label:"TV Short"},{value:"SPECIAL",label:"Special"},{value:"ADULT",label:"Adult (18+)"}],ft=[{value:"ALL",label:"All Seasons"},{value:"WINTER",label:"Winter"},{value:"SPRING",label:"Spring"},{value:"SUMMER",label:"Summer"},{value:"FALL",label:"Fall"}],Wt=()=>{ge(()=>{document.title="Watchlist - dango"},[]);const{filter:d="All"}=Ke(),g=Qe(),[l,N]=Ve(),q=Ze(),ne=Je(),[v,B]=u(parseInt(l.get("page")||"1")),[f,W]=u(l.get("query")||""),[C,K]=u(l.get("sortBy")||"last_added"),[y,P]=u(l.get("type")||"ALL"),[S,I]=u(l.get("season")||"ALL"),[b,$]=u(l.get("year")||"ALL"),[k,F]=u(()=>{const e={},n=l.get("genres")?.split(",").map(r=>r.trim()).filter(Boolean)||[],s=l.get("excludeGenres")?.split(",").map(r=>r.trim()).filter(Boolean)||[];return n.forEach(r=>r&&(e[r]="include")),s.forEach(r=>r&&(e[r]="exclude")),e}),[M,Ne]=u(()=>["type","season","year","genres","excludeGenres"].some(e=>l.has(e))),{lowEndMode:Ce}=Xe(),{titlePreference:O}=et(),{data:ke}=tt(),se=ke?.genres||[],Q=ve(null),[c,w]=u(null),[V,D]=u(!1),[le,z]=u(!1),[E,we]=u(!1),[h,L]=u(new Set),H=ve(null),i=d==="Continue Watching",G=R(()=>{const e=new URLSearchParams(l);return e.delete("page"),e.set("titlePreference",O),e.toString()},[l,O]),{data:_,isLoading:xe,error:Re}=ye(G,v,14),{data:U,isLoading:Te,error:Be}=Se(d,G,v,14),{data:We}=ye(G,v+1,14),{data:Pe}=Se(d,G,v+1,14),Z=R(()=>(i?_?.data:U?.data)||[],[i,_,U]),x=R(()=>(i?_?.total:U?.total)||0,[i,_,U]),j=i?xe:Te,re=i?Re:Be,ie=i?We:Pe;ge(()=>{W(l.get("query")||""),K(l.get("sortBy")||"last_added"),P(l.get("type")||"ALL"),I(l.get("season")||"ALL"),$(l.get("year")||"ALL");const e={},n=l.get("genres")?.split(",").map(o=>o.trim()).filter(Boolean)||[],s=l.get("excludeGenres")?.split(",").map(o=>o.trim()).filter(Boolean)||[];n.forEach(o=>o&&(e[o]="include")),s.forEach(o=>o&&(e[o]="exclude")),F(e),B(parseInt(l.get("page")||"1"));const r=ht(d,l);H.current!==null&&H.current!==r&&L(new Set),H.current=r},[l,d]);const Ie=fe({mutationFn:async({id:e,status:n})=>{await nt.watchlist.setStatus.mutate({id:e,status:n})},onSuccess:()=>{q.invalidateQueries({queryKey:["watchlist"]}),at.success("Status updated")}}),$e=fe(ne.continueWatching.remove.mutationOptions({onSuccess:()=>{q.invalidateQueries(ne.continueWatching.pathFilter()),q.invalidateQueries({queryKey:["allContinueWatching"]})}})),J=st(),{data:ce}=lt("skipRemoveConfirmation"),Fe=rt(),X=R(()=>{const e=n=>n[O]||n.name||"";return[...Z].sort((n,s)=>C==="name_asc"?e(n).localeCompare(e(s)):C==="name_desc"?e(s).localeCompare(e(n)):0)},[Z,C,O]),ee=new Date().getFullYear(),Me=[{value:"ALL",label:"All Years"},...Array.from({length:ee-1980+1},(e,n)=>({value:String(ee-n),label:String(ee-n)}))],m=(e=C,n=1)=>{const s=new URLSearchParams;f.trim()&&s.set("query",f.trim()),e!=="last_added"&&s.set("sortBy",e),y!=="ALL"&&s.set("type",y),S!=="ALL"&&s.set("season",S),b!=="ALL"&&s.set("year",b);const r=Object.entries(k).filter(([,A])=>A==="include").map(([A])=>A),o=Object.entries(k).filter(([,A])=>A==="exclude").map(([A])=>A);r.length>0&&s.set("genres",r.join(",")),o.length>0&&s.set("excludeGenres",o.join(",")),n>1&&s.set("page",n.toString()),N(s),n!==v&&B(n)},oe=e=>{if(m(C,e),Q.current){const n=Q.current.getBoundingClientRect().top+window.scrollY-100;window.scrollTo({top:n,behavior:"smooth"})}},Oe=()=>{W(""),K("last_added"),P("ALL"),I("ALL"),$("ALL"),F({}),N(new URLSearchParams),B(1)},De=e=>{F(n=>{const s=n[e],r={...n};return s==="include"?r[e]="exclude":s==="exclude"?delete r[e]:r[e]="include",r})},de=(e,n)=>{if(i){w({id:e,name:n});return}String(ce)==="true"||String(ce)==="1"?J.mutate({id:e}):w({id:e,name:n})},ze=()=>{if(c){if(c.ids){i?(Ee.mutate({ids:c.ids}),V&&me.mutate({ids:c.ids})):me.mutate({ids:c.ids}),L(new Set),w(null),D(!1),z(!1);return}i?($e.mutate({showId:c.id}),V&&J.mutate({id:c.id})):J.mutate({id:c.id}),le&&Fe.mutate({key:"skipRemoveConfirmation",value:!0}),w(null),D(!1),z(!1)}},ue=()=>{w(null),D(!1),z(!1)},me=it(),Ee=ct(),Ge=ot(),_e=()=>{we(e=>{const n=!e;return n||L(new Set),n})},Ue=e=>{L(n=>{const s=new Set(n);return s.has(e)?s.delete(e):s.add(e),s})},Y=X.map(e=>e.id),te=Y.length>0&&Y.every(e=>h.has(e)),je=()=>{L(te?e=>gt(e,Y):e=>pt(e,Y))},Ye=e=>{h.size!==0&&(Ge.mutate({ids:[...h],status:e}),L(new Set))},qe=()=>{h.size!==0&&w({ids:[...h]})},he=Z.length>=14&&ie&&ie.data.length>0,pe=R(()=>Math.max(1,Math.ceil(x/14)),[x]);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:Ae.map(e=>t("button",{className:`${a.filterBtn} ${d===e?a.active:""}`,onClick:()=>{const n=new URLSearchParams(l);n.delete("page"),g({pathname:`/watchlist/${e}`,search:n.toString()}),B(1)},children:e},e))}),t("div",{children:t("select",{className:a.sortSelect,value:C,onChange:e=>{const n=e.currentTarget.value;K(n),m(n,v)},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)"})]})})]}),t("div",{className:a.filterContainer,children:[t("div",{className:a.searchBarWrapper,children:[t("div",{className:a.inputIconWrapper,children:[t(p,{name:"search",className:a.searchIcon}),t("input",{className:a.searchInput,placeholder:"Search your watchlist by title...",value:f,onInput:e=>W(e.currentTarget.value),onKeyDown:e=>e.key==="Enter"&&m()})]}),t("div",{className:a.searchActions,children:[t(T,{onClick:()=>m(),className:a.searchBtn,children:"Search"}),t("button",{className:`${a.filterToggleBtn} ${M?a.active:""}`,onClick:()=>Ne(!M),children:[t(p,{name:"filter",size:14}),t("span",{children:"Filters"}),M?t(p,{name:"chevron-up",size:12}):t(p,{name:"chevron-down",size:12})]})]})]}),t("div",{className:`${a.advancedFilters} ${M?a.show:""}`,children:[t("div",{className:a.filterDivider}),t("div",{className:a.filterGrid,children:[t("div",{className:a.filterItem,children:[t("label",{children:"Type"}),t("select",{value:y,onChange:e=>P(e.currentTarget.value),children:vt.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:a.filterItem,children:[t("label",{children:"Season"}),t("select",{value:S,onChange:e=>I(e.currentTarget.value),children:ft.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:a.filterItem,children:[t("label",{children:"Year"}),t("select",{value:b,onChange:e=>$(e.currentTarget.value),children:Me.map(e=>t("option",{value:e.value,children:e.label},e.value))})]})]}),se.length>0&&t("div",{className:a.genreSection,children:[t("label",{className:a.genreLabel,children:"Genres"}),t("div",{className:a.genreContainer,children:se.map(e=>t("button",{className:`${a.genreButton} ${a[k[e]||""]}`,onClick:()=>De(e),children:e},e))})]}),t("div",{className:a.filterActions,children:[t(T,{variant:"secondary",onClick:Oe,children:"Reset All"}),t(T,{onClick:()=>m(),className:a.applyBtn,children:"Apply Filters"})]})]})]}),t("div",{className:a.resultsHeader,ref:Q,children:[t("h3",{className:a.resultsTitle,children:[i?"Continue Watching":d,t("span",{className:a.itemCount,children:["(",x," items)"]})]}),t("div",{className:a.headerActions,children:[t("button",{className:`${a.manageBtn} ${E?a.active:""}`,onClick:_e,children:[t(p,{name:"pencil-alt",size:13}),t("span",{children:"Bulk Manage"})]}),x>0&&t(be,{page:v,totalPages:pe,canGoNext:he,onChange:oe,isLoading:j})]})]}),E&&t("div",{className:a.manageBar,children:[t("button",{className:a.selectAllBtn,onClick:je,children:[t("span",{className:`${a.selectAllBox} ${te?a.selectAllBoxChecked:""}`,"aria-hidden":"true"}),t("span",{children:te?"Clear Page":"Select All"})]}),t("span",{className:a.manageCount,children:[h.size," selected"]}),t("div",{className:a.manageSpacer}),!i&&t("select",{className:a.manageStatusSelect,value:"",onChange:e=>{e.currentTarget.value&&Ye(e.currentTarget.value)},disabled:h.size===0,title:"Set status for selected items",children:[t("option",{value:"",children:"Set status…"}),Le.map(e=>t("option",{value:e,children:e},e))]}),t("button",{className:a.manageRemoveBtn,onClick:qe,disabled:h.size===0,children:[t(p,{name:"trash",size:13}),t("span",{children:"Remove Selected"})]})]}),j?t(ut,{}):re?t(mt,{message:re.message}):t(He,{children:[(y!=="ALL"||S!=="ALL"||b!=="ALL"||Object.keys(k).length>0||f.trim())&&t("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px",alignItems:"center",marginBottom:"1.5rem"},children:[t("span",{style:{fontSize:"0.8rem",color:"var(--text-muted)",fontWeight:600},children:"Active Filters:"}),f.trim()&&t("span",{className:"badge badge-secondary",style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:["Search: ",f,t("button",{onClick:e=>{e.stopPropagation(),e.preventDefault(),W(""),m()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]}),y!=="ALL"&&t("span",{className:"badge badge-secondary",style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:["Type: ",y,t("button",{onClick:e=>{e.stopPropagation(),e.preventDefault(),P("ALL"),m()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]}),S!=="ALL"&&t("span",{className:"badge badge-secondary",style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:["Season: ",S,t("button",{onClick:e=>{e.stopPropagation(),e.preventDefault(),I("ALL"),m()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]}),b!=="ALL"&&t("span",{className:"badge badge-secondary",style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:["Year: ",b,t("button",{onClick:e=>{e.stopPropagation(),e.preventDefault(),$("ALL"),m()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]}),Object.entries(k).map(([e,n])=>t("span",{className:`badge ${n==="include"?"badge-primary":"badge-danger"}`,style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:[n==="include"?`+ ${e}`:`- ${e}`,t("button",{onClick:s=>{s.stopPropagation(),s.preventDefault(),F(r=>{const o={...r};return delete o[e],o}),m()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]},e))]}),t("div",{className:`${a.grid} ${Ce?a.lowEnd:""}`,children:X.map(e=>{const n=h.has(e.id);return t("div",{className:`${a.itemWrapper} ${n?a.selected:""}`,children:[E&&t("div",{className:a.selectOverlay,onClick:()=>Ue(e.id),title:n?"Deselect":"Select",children:t("span",{className:a.selectBadge,children:n?t(p,{name:"check",size:12}):null})}),t(dt,{anime:e,continueWatching:i,onRemove:()=>de(e.id,e.name),layout:"vertical"}),!i&&!E&&t("div",{className:a.cardActions,children:[t("select",{className:a.statusSelect,value:e.status,onChange:s=>Ie.mutate({id:e.id,status:s.currentTarget.value}),children:Le.map(s=>t("option",{value:s,children:s},s))}),t("button",{className:a.removeBtn,onClick:()=>de(e.id,e.name),title:"Remove from Watchlist","aria-label":"Remove from Watchlist",children:t(p,{name:"trash",size:12})})]})]},e._id)})})]}),!j&&X.length===0&&t("div",{className:a.emptyState,children:[t("h3",{className:a.emptyTitle,children:"Your watchlist is looking a bit lonely"}),t("p",{className:a.emptyText,children:d!=="All"||f||y!=="ALL"||S!=="ALL"||b!=="ALL"||Object.keys(k).length>0?"No anime match these filters. Try adjusting them to see more titles.":"Let's find something to watch!"}),t("button",{className:a.emptyBtn,onClick:()=>g("/search"),children:[t(p,{name:"search",size:14}),t("span",{children:"Browse Anime"})]})]}),x>0&&t("div",{className:a.bottomPagination,children:t(be,{page:v,totalPages:pe,canGoNext:he,onChange:oe,isLoading:j,variant:"labeled"})}),t(ae,{isOpen:!!c,onClose:ue,title:i?"Reset Progress":"Remove from Watchlist",children:[t(ae.Body,{children:[t("p",{children:c?.ids&&c.ids.length>1?i?`Are you sure you want to remove watch progress for ${c.ids.length} items?`:`Are you sure you want to remove ${c.ids.length} items from your watchlist?`:i?`Are you sure you want to remove your watch progress for "${c?.name}"?`:`Are you sure you want to remove "${c?.name}" from your watchlist?`}),i&&t("label",{children:[t("input",{type:"checkbox",checked:V,onChange:e=>D(e.target.checked)}),"Also remove from my watchlist"]}),!i&&!(c?.ids&&c.ids.length>1)&&t("label",{children:[t("input",{type:"checkbox",checked:le,onChange:e=>z(e.target.checked)}),"Remember my choice"]})]}),t(ae.Actions,{children:[t(T,{variant:"secondary",onClick:ue,children:"No"}),t(T,{variant:"danger",onClick:ze,children:"Yes"})]})]})]})};export{Wt as default};
|
|
1
|
+
import{h as ge,o as Ke,a as Qe,p as Ve,d as u,A as ve,T as R,u as t,S as He}from"./vendor-core-DfaOB3Rn.js";import{u as Ze,a as fe}from"./vendor-query-BBT5_sHx.js";import{h as Je,u as Xe,d as et,v as tt,w as ye,x as Se,z as at,t as nt,k as st,y as lt,A as rt,C as it,D as ct,E as ot,B as T,M as ae}from"./index-Rm4h42Uz.js";import{I as p}from"./vendor-icons-DrybRNxP.js";import{A as dt}from"./AnimeCard-Chlfp7Cm.js";import{P as be,S as ut}from"./SkeletonGrid-C7Gj9ODL.js";import{E as mt}from"./ErrorMessage-DAxegITP.js";import{s as a}from"./Watchlist.module-XGtVQr1d.js";import"./useAnimeInfoData-B9O3Rr_u.js";import"./QueueOptionsButton-BJhkcl2X.js";import"./vendor-ui-3qrARCPr.js";import"./MediaCard-6Yy_-Whn.js";import"./useIsMobile-Dvx1uJ82.js";const ht=(d,g)=>{const l=new URLSearchParams(g);return l.delete("page"),l.sort(),`${d}|${l.toString()}`},pt=(d,g)=>{const l=new Set(d);return g.forEach(N=>l.add(N)),l},gt=(d,g)=>{const l=new Set(d);return g.forEach(N=>l.delete(N)),l},Ae=["All","Continue Watching","Watching","Completed","On-Hold","Dropped","Planned"],Le=Ae.slice(2),vt=[{value:"ALL",label:"All Types"},{value:"TV",label:"TV Series"},{value:"Movie",label:"Movie"},{value:"OVA",label:"OVA"},{value:"ONA",label:"ONA"},{value:"TV_SHORT",label:"TV Short"},{value:"SPECIAL",label:"Special"},{value:"ADULT",label:"Adult (18+)"}],ft=[{value:"ALL",label:"All Seasons"},{value:"WINTER",label:"Winter"},{value:"SPRING",label:"Spring"},{value:"SUMMER",label:"Summer"},{value:"FALL",label:"Fall"}],Wt=()=>{ge(()=>{document.title="Watchlist - dango"},[]);const{filter:d="All"}=Ke(),g=Qe(),[l,N]=Ve(),q=Ze(),ne=Je(),[v,B]=u(parseInt(l.get("page")||"1")),[f,W]=u(l.get("query")||""),[C,K]=u(l.get("sortBy")||"last_added"),[y,P]=u(l.get("type")||"ALL"),[S,I]=u(l.get("season")||"ALL"),[b,$]=u(l.get("year")||"ALL"),[k,F]=u(()=>{const e={},n=l.get("genres")?.split(",").map(r=>r.trim()).filter(Boolean)||[],s=l.get("excludeGenres")?.split(",").map(r=>r.trim()).filter(Boolean)||[];return n.forEach(r=>r&&(e[r]="include")),s.forEach(r=>r&&(e[r]="exclude")),e}),[M,Ne]=u(()=>["type","season","year","genres","excludeGenres"].some(e=>l.has(e))),{lowEndMode:Ce}=Xe(),{titlePreference:O}=et(),{data:ke}=tt(),se=ke?.genres||[],Q=ve(null),[c,w]=u(null),[V,D]=u(!1),[le,E]=u(!1),[z,we]=u(!1),[h,L]=u(new Set),H=ve(null),i=d==="Continue Watching",G=R(()=>{const e=new URLSearchParams(l);return e.delete("page"),e.set("titlePreference",O),e.toString()},[l,O]),{data:_,isLoading:xe,error:Re}=ye(G,v,14),{data:U,isLoading:Te,error:Be}=Se(d,G,v,14),{data:We}=ye(G,v+1,14),{data:Pe}=Se(d,G,v+1,14),Z=R(()=>(i?_?.data:U?.data)||[],[i,_,U]),x=R(()=>(i?_?.total:U?.total)||0,[i,_,U]),Y=i?xe:Te,re=i?Re:Be,ie=i?We:Pe;ge(()=>{W(l.get("query")||""),K(l.get("sortBy")||"last_added"),P(l.get("type")||"ALL"),I(l.get("season")||"ALL"),$(l.get("year")||"ALL");const e={},n=l.get("genres")?.split(",").map(o=>o.trim()).filter(Boolean)||[],s=l.get("excludeGenres")?.split(",").map(o=>o.trim()).filter(Boolean)||[];n.forEach(o=>o&&(e[o]="include")),s.forEach(o=>o&&(e[o]="exclude")),F(e),B(parseInt(l.get("page")||"1"));const r=ht(d,l);H.current!==null&&H.current!==r&&L(new Set),H.current=r},[l,d]);const Ie=fe({mutationFn:async({id:e,status:n})=>{await nt.watchlist.setStatus.mutate({id:e,status:n})},onSuccess:()=>{q.invalidateQueries({queryKey:["watchlist"]}),at.success("Status updated")}}),$e=fe(ne.continueWatching.remove.mutationOptions({onSuccess:()=>{q.invalidateQueries(ne.continueWatching.pathFilter()),q.invalidateQueries({queryKey:["allContinueWatching"]})}})),J=st(),{data:ce}=lt("skipRemoveConfirmation"),Fe=rt(),X=R(()=>{const e=n=>n[O]||n.name||"";return[...Z].sort((n,s)=>C==="name_asc"?e(n).localeCompare(e(s)):C==="name_desc"?e(s).localeCompare(e(n)):0)},[Z,C,O]),ee=new Date().getFullYear(),Me=[{value:"ALL",label:"All Years"},...Array.from({length:ee-1980+1},(e,n)=>({value:String(ee-n),label:String(ee-n)}))],m=(e=C,n=1)=>{const s=new URLSearchParams;f.trim()&&s.set("query",f.trim()),e!=="last_added"&&s.set("sortBy",e),y!=="ALL"&&s.set("type",y),S!=="ALL"&&s.set("season",S),b!=="ALL"&&s.set("year",b);const r=Object.entries(k).filter(([,A])=>A==="include").map(([A])=>A),o=Object.entries(k).filter(([,A])=>A==="exclude").map(([A])=>A);r.length>0&&s.set("genres",r.join(",")),o.length>0&&s.set("excludeGenres",o.join(",")),n>1&&s.set("page",n.toString()),N(s),n!==v&&B(n)},oe=e=>{if(m(C,e),Q.current){const n=Q.current.getBoundingClientRect().top+window.scrollY-100;window.scrollTo({top:n,behavior:"smooth"})}},Oe=()=>{W(""),K("last_added"),P("ALL"),I("ALL"),$("ALL"),F({}),N(new URLSearchParams),B(1)},De=e=>{F(n=>{const s=n[e],r={...n};return s==="include"?r[e]="exclude":s==="exclude"?delete r[e]:r[e]="include",r})},de=(e,n)=>{if(i){w({id:e,name:n});return}String(ce)==="true"||String(ce)==="1"?J.mutate({id:e}):w({id:e,name:n})},Ee=()=>{if(c){if(c.ids){i?(ze.mutate({ids:c.ids}),V&&me.mutate({ids:c.ids})):me.mutate({ids:c.ids}),L(new Set),w(null),D(!1),E(!1);return}i?($e.mutate({showId:c.id}),V&&J.mutate({id:c.id})):J.mutate({id:c.id}),le&&Fe.mutate({key:"skipRemoveConfirmation",value:!0}),w(null),D(!1),E(!1)}},ue=()=>{w(null),D(!1),E(!1)},me=it(),ze=ct(),Ge=ot(),_e=()=>{we(e=>{const n=!e;return n||L(new Set),n})},Ue=e=>{L(n=>{const s=new Set(n);return s.has(e)?s.delete(e):s.add(e),s})},j=X.map(e=>e.id),te=j.length>0&&j.every(e=>h.has(e)),Ye=()=>{L(te?e=>gt(e,j):e=>pt(e,j))},je=e=>{h.size!==0&&(Ge.mutate({ids:[...h],status:e}),L(new Set))},qe=()=>{h.size!==0&&w({ids:[...h]})},he=Z.length>=14&&ie&&ie.data.length>0,pe=R(()=>Math.max(1,Math.ceil(x/14)),[x]);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:Ae.map(e=>t("button",{className:`${a.filterBtn} ${d===e?a.active:""}`,onClick:()=>{const n=new URLSearchParams(l);n.delete("page"),g({pathname:`/watchlist/${e}`,search:n.toString()}),B(1)},children:e},e))}),t("div",{children:t("select",{className:a.sortSelect,value:C,onChange:e=>{const n=e.currentTarget.value;K(n),m(n,v)},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)"})]})})]}),t("div",{className:a.filterContainer,children:[t("div",{className:a.searchBarWrapper,children:[t("div",{className:a.inputIconWrapper,children:[t(p,{name:"search",className:a.searchIcon}),t("input",{className:a.searchInput,placeholder:"Search your watchlist by title...",value:f,onInput:e=>W(e.currentTarget.value),onKeyDown:e=>e.key==="Enter"&&m()})]}),t("div",{className:a.searchActions,children:[t(T,{onClick:()=>m(),className:a.searchBtn,children:"Search"}),t("button",{className:`${a.filterToggleBtn} ${M?a.active:""}`,onClick:()=>Ne(!M),children:[t(p,{name:"filter",size:14}),t("span",{children:"Filters"}),M?t(p,{name:"chevron-up",size:12}):t(p,{name:"chevron-down",size:12})]})]})]}),t("div",{className:`${a.advancedFilters} ${M?a.show:""}`,children:[t("div",{className:a.filterDivider}),t("div",{className:a.filterGrid,children:[t("div",{className:a.filterItem,children:[t("label",{children:"Type"}),t("select",{value:y,onChange:e=>P(e.currentTarget.value),children:vt.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:a.filterItem,children:[t("label",{children:"Season"}),t("select",{value:S,onChange:e=>I(e.currentTarget.value),children:ft.map(e=>t("option",{value:e.value,children:e.label},e.value))})]}),t("div",{className:a.filterItem,children:[t("label",{children:"Year"}),t("select",{value:b,onChange:e=>$(e.currentTarget.value),children:Me.map(e=>t("option",{value:e.value,children:e.label},e.value))})]})]}),se.length>0&&t("div",{className:a.genreSection,children:[t("label",{className:a.genreLabel,children:"Genres"}),t("div",{className:a.genreContainer,children:se.map(e=>t("button",{className:`${a.genreButton} ${a[k[e]||""]}`,onClick:()=>De(e),children:e},e))})]}),t("div",{className:a.filterActions,children:[t(T,{variant:"secondary",onClick:Oe,children:"Reset All"}),t(T,{onClick:()=>m(),className:a.applyBtn,children:"Apply Filters"})]})]})]}),t("div",{className:a.resultsHeader,ref:Q,children:[t("h3",{className:a.resultsTitle,children:[i?"Continue Watching":d,t("span",{className:a.itemCount,children:["(",x," items)"]})]}),t("div",{className:a.headerActions,children:[t("button",{className:`${a.manageBtn} ${z?a.active:""}`,onClick:_e,children:[t(p,{name:"pencil-alt",size:13}),t("span",{children:"Bulk Manage"})]}),x>0&&t(be,{page:v,totalPages:pe,canGoNext:he,onChange:oe,isLoading:Y})]})]}),z&&t("div",{className:a.manageBar,children:[t("button",{className:a.selectAllBtn,onClick:Ye,children:[t("span",{className:`${a.selectAllBox} ${te?a.selectAllBoxChecked:""}`,"aria-hidden":"true"}),t("span",{children:te?"Clear Page":"Select All"})]}),t("span",{className:a.manageCount,children:[h.size," selected"]}),t("div",{className:a.manageSpacer}),!i&&t("select",{className:a.manageStatusSelect,value:"",onChange:e=>{e.currentTarget.value&&je(e.currentTarget.value)},disabled:h.size===0,title:"Set status for selected items",children:[t("option",{value:"",children:"Set status…"}),Le.map(e=>t("option",{value:e,children:e},e))]}),t("button",{className:a.manageRemoveBtn,onClick:qe,disabled:h.size===0,children:[t(p,{name:"trash",size:13}),t("span",{children:"Remove Selected"})]})]}),Y?t(ut,{}):re?t(mt,{message:re.message}):t(He,{children:[(y!=="ALL"||S!=="ALL"||b!=="ALL"||Object.keys(k).length>0||f.trim())&&t("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px",alignItems:"center",marginBottom:"1.5rem"},children:[t("span",{style:{fontSize:"0.8rem",color:"var(--text-muted)",fontWeight:600},children:"Active Filters:"}),f.trim()&&t("span",{className:"badge badge-secondary",style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:["Search: ",f,t("button",{onClick:e=>{e.stopPropagation(),e.preventDefault(),W(""),m()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]}),y!=="ALL"&&t("span",{className:"badge badge-secondary",style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:["Type: ",y,t("button",{onClick:e=>{e.stopPropagation(),e.preventDefault(),P("ALL"),m()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]}),S!=="ALL"&&t("span",{className:"badge badge-secondary",style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:["Season: ",S,t("button",{onClick:e=>{e.stopPropagation(),e.preventDefault(),I("ALL"),m()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]}),b!=="ALL"&&t("span",{className:"badge badge-secondary",style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:["Year: ",b,t("button",{onClick:e=>{e.stopPropagation(),e.preventDefault(),$("ALL"),m()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]}),Object.entries(k).map(([e,n])=>t("span",{className:`badge ${n==="include"?"badge-primary":"badge-danger"}`,style:{display:"inline-flex",alignItems:"center",gap:"6px"},children:[n==="include"?`+ ${e}`:`- ${e}`,t("button",{onClick:s=>{s.stopPropagation(),s.preventDefault(),F(r=>{const o={...r};return delete o[e],o}),m()},style:{background:"none",border:"none",color:"inherit",cursor:"pointer"},children:"✕"})]},e))]}),t("div",{className:`${a.grid} ${Ce?a.lowEnd:""}`,children:X.map(e=>{const n=h.has(e.id);return t("div",{className:`${a.itemWrapper} ${n?a.selected:""}`,children:[z&&t("div",{className:a.selectOverlay,onClick:()=>Ue(e.id),title:n?"Deselect":"Select",children:t("span",{className:a.selectBadge,children:n?t(p,{name:"check",size:12}):null})}),t(dt,{anime:e,continueWatching:i,onRemove:()=>de(e.id,e.name),layout:"vertical"}),!i&&!z&&t("div",{className:a.cardActions,children:[t("select",{className:a.statusSelect,value:e.status,onChange:s=>Ie.mutate({id:e.id,status:s.currentTarget.value}),children:Le.map(s=>t("option",{value:s,children:s},s))}),t("button",{className:a.removeBtn,onClick:()=>de(e.id,e.name),title:"Remove from Watchlist","aria-label":"Remove from Watchlist",children:t(p,{name:"trash",size:12})})]})]},e._id)})})]}),!Y&&X.length===0&&t("div",{className:a.emptyState,children:[t("h3",{className:a.emptyTitle,children:"Your watchlist is looking a bit lonely"}),t("p",{className:a.emptyText,children:d!=="All"||f||y!=="ALL"||S!=="ALL"||b!=="ALL"||Object.keys(k).length>0?"No anime match these filters. Try adjusting them to see more titles.":"Let's find something to watch!"}),t("button",{className:a.emptyBtn,onClick:()=>g("/search"),children:[t(p,{name:"search",size:14}),t("span",{children:"Browse Anime"})]})]}),x>0&&t("div",{className:a.bottomPagination,children:t(be,{page:v,totalPages:pe,canGoNext:he,onChange:oe,isLoading:Y,variant:"labeled"})}),t(ae,{isOpen:!!c,onClose:ue,title:i?"Reset Progress":"Remove from Watchlist",children:[t(ae.Body,{children:[t("p",{children:c?.ids&&c.ids.length>1?i?`Are you sure you want to remove watch progress for ${c.ids.length} items?`:`Are you sure you want to remove ${c.ids.length} items from your watchlist?`:i?`Are you sure you want to remove your watch progress for "${c?.name}"?`:`Are you sure you want to remove "${c?.name}" from your watchlist?`}),i&&t("label",{children:[t("input",{type:"checkbox",checked:V,onChange:e=>D(e.target.checked)}),"Also remove from my watchlist"]}),!i&&!(c?.ids&&c.ids.length>1)&&t("label",{children:[t("input",{type:"checkbox",checked:le,onChange:e=>E(e.target.checked)}),"Remember my choice"]})]}),t(ae.Actions,{children:[t(T,{variant:"secondary",onClick:ue,children:"No"}),t(T,{variant:"danger",onClick:Ee,children:"Yes"})]})]})]})};export{Wt as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as n}from"./index-
|
|
1
|
+
import{_ as n}from"./index-Rm4h42Uz.js";let a=null,e=null;async function r(){return a||(e||(e=n(()=>import("./hls-BOLXTnjL.js"),[]).then(l=>(a=l.default,a)).catch(()=>null)),e)}function c(l){return l.canPlayType("application/vnd.apple.mpegurl")!==""||l.canPlayType("application/x-mpegURL")!==""}export{c,r as l};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._container_z68uz_1{position:relative;display:flex;align-items:center}._bellBtn_z68uz_7{background:#00000026;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:none;color:var(--text-primary);font-size:1.25rem;cursor:pointer;padding:var(--space-2);display:flex;align-items:center;justify-content:center;transition:transform var(--transition-fast),background var(--transition-fast);position:relative;width:50px;height:50px;border-radius:50%}._bellBtn_z68uz_7:hover{background:#00000040;border-color:#ffffff59;transform:scale(1.05)}._bellBtn_z68uz_7:focus-visible{outline:none;box-shadow:var(--shadow-focus)}@media(max-width:848px){._bellBtn_z68uz_7{width:36px;height:36px;font-size:1.05rem;padding:var(--space-1)}}@media(max-width:480px){._bellBtn_z68uz_7{width:36px;height:36px;font-size:.95rem}}._badge_z68uz_56{position:absolute;top:6px;right:6px;background-color:var(--color-danger);color:#fff;font-size:.62rem;font-weight:700;min-width:18px;height:18px;padding:0 4px;border-radius:50%;display:flex;align-items:center;justify-content:center;text-align:center;border:none;pointer-events:none;animation:_bounce_z68uz_1 .5s ease-out;line-height:1}@keyframes _bounce_z68uz_1{0%,20%,50%,80%,to{transform:translateY(0)}40%{transform:translateY(-5px)}60%{transform:translateY(-3px)}}._dropdown_z68uz_96{position:absolute;top:calc(100% + var(--space-2));right:0;width:320px;max-height:480px;background:var(--glass-bg);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--border-secondary);border-radius:var(--radius-md);box-shadow:var(--shadow-xl);z-index:var(--z-header);overflow:hidden;display:flex;flex-direction:column;animation:_slideIn_z68uz_1 .3s ease}@keyframes _slideIn_z68uz_1{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}._dropdownHeader_z68uz_127{padding:var(--space-4);display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--border-primary)}._dropdownHeader_z68uz_127 h4{margin:0;font-size:1rem;color:var(--text-primary)}._clearAllBtn_z68uz_141{background:none;border:none;color:var(--primary-color);font-size:var(--font-size-xs);cursor:pointer;padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);transition:background var(--transition-fast)}._clearAllBtn_z68uz_141:hover{background:#ffffff0d}._discoveryStatusRow_z68uz_156{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);font-size:.72rem;color:var(--text-muted);background:#ffffff08;border-bottom:1px solid var(--border-primary)}._statusDot_z68uz_167{width:8px;height:8px;border-radius:50%;flex-shrink:0}._statusDotRunning_z68uz_174{background:var(--accent);animation:_statusPulse_z68uz_1 1.2s ease-in-out infinite}._statusDotOk_z68uz_179{background:var(--color-success)}._statusDotInfo_z68uz_183{background:var(--color-info)}._statusDotError_z68uz_187{background:var(--color-danger)}._statusDotIdle_z68uz_191{background:var(--text-muted)}@keyframes _statusPulse_z68uz_1{0%,to{opacity:1}50%{opacity:.35}}._list_z68uz_205{overflow-y:auto;flex:1}._list_z68uz_205::-webkit-scrollbar{width:4px}._list_z68uz_205::-webkit-scrollbar-thumb{background:var(--border-secondary);border-radius:2px}._item_z68uz_219{display:flex;align-items:center;padding:var(--space-3) var(--space-4);gap:var(--space-3);text-decoration:none;transition:background var(--transition-fast);border-bottom:1px solid var(--border-primary);position:relative}._item_z68uz_219:hover{background:#ffffff0d}._thumbnail_z68uz_234{width:48px;height:64px;border-radius:var(--radius-sm);object-fit:cover;flex-shrink:0;box-shadow:0 2px 8px #0000004d}._itemInfo_z68uz_243{flex:1;min-width:0}._itemTitle_z68uz_248{display:block;font-size:.85rem;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:var(--space-1)}._itemMeta_z68uz_259{display:inline-block;font-size:.7rem;background:var(--accent);color:var(--accent-text);padding:1px 6px;border-radius:var(--radius-sm);font-weight:600}._systemItemMeta_z68uz_269{display:inline-block;font-size:.7rem;background:#ffffff1a;color:var(--text-secondary);padding:1px 6px;border-radius:var(--radius-sm);font-weight:500;border:none;cursor:pointer;transition:background var(--transition-fast)}._systemItemMeta_z68uz_269:hover{background:#ffffff2e}._removeItem_z68uz_286{background:none;border:none;color:var(--text-muted);font-size:var(--font-size-xs);cursor:pointer;padding:var(--space-2);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity var(--transition-fast),color var(--transition-fast)}._item_z68uz_219:hover ._removeItem_z68uz_286{opacity:1}@media(hover:none),(pointer:coarse){._removeItem_z68uz_286{opacity:1}}._removeItem_z68uz_286:hover{color:var(--color-danger)}._queueItem_z68uz_316:hover{color:var(--color-success)}._emptyState_z68uz_320{padding:var(--space-10) var(--space-4);text-align:center;color:var(--text-muted);font-size:.9rem}@media(max-width:768px){._dropdown_z68uz_96{position:fixed;top:var(--header-height, 60px);left:0;right:0;width:100%;max-height:calc(100vh - var(--header-height, 60px));border-radius:0 0 var(--radius-md) var(--radius-md)}._bellBtn_z68uz_7{width:36px;height:36px;font-size:1rem}._removeItem_z68uz_286{padding:var(--space-2);min-width:36px;min-height:36px}._badge_z68uz_56{top:5px;right:6px;font-size:.58rem;min-width:16px;height:16px;padding:0 3px}}@media(max-width:480px){._bellBtn_z68uz_7{width:38px;height:38px;font-size:1.1rem}}.skeleton{position:relative;overflow:hidden;background-color:var(--bg-tertiary);border-radius:var(--radius-sm)}.skeleton:after{position:absolute;inset:0;transform:translate(-100%);background-image:linear-gradient(90deg,#fff0 0,#ffffff0d 20%,#ffffff1f 60%,#fff0);animation:shimmer 1.8s infinite ease-in-out;content:""}.skeleton-text{border-radius:var(--radius-sm);height:1em}.skeleton-circular{border-radius:50%}.skeleton-rectangular{border-radius:var(--radius-md)}.skeleton-card{display:flex;flex-direction:column;background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:var(--radius-lg);overflow:hidden}@keyframes shimmer{to{transform:translate(100%)}}._header_1elij_1{height:var(--header-height);--logo-height: 60px;background:transparent;border-bottom:1px solid transparent;position:fixed;top:var(--vv-top, 0px);left:0;right:0;z-index:var(--z-header);display:flex;align-items:center;justify-content:center;transition:transform var(--transition-slow),background-color var(--transition-base),border-color var(--transition-base),box-shadow var(--transition-base)}._header_1elij_1._hidden_1elij_21{transform:translateY(-100%)}._header_1elij_1._scrolled_1elij_25{background-color:#0c0c0fd1;border-bottom:1px solid rgba(255,255,255,.08);box-shadow:0 8px 32px #00000073}._logo_1elij_31{display:flex;align-items:center;justify-content:center;padding:8px;border-radius:var(--radius-md);transition:opacity var(--transition-base)}._logo_1elij_31:hover{opacity:.8}._headerInner_1elij_44{width:100%;max-width:var(--max-width);margin:0 auto;padding:0 var(--space-8);display:flex;align-items:center;justify-content:space-between}._leftSection_1elij_54{display:flex;align-items:center;gap:var(--space-6)}._desktopNav_1elij_60{display:flex;align-items:center;gap:var(--space-1);margin-left:var(--space-2)}._navLink_1elij_67{color:var(--text-secondary);font-weight:500;font-size:var(--font-size-sm);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);text-decoration:none;transition:all var(--transition-fast);position:relative}._navLink_1elij_67:hover{color:var(--text-primary);background:#ffffff0f}._navLinkActive_1elij_83{color:#fff;font-weight:600;background:#ffffff1a}._navLinkActive_1elij_83:after{content:"";position:absolute;bottom:-4px;left:50%;transform:translate(-50%);width:16px;height:2px;background:var(--accent);border-radius:var(--radius-full);box-shadow:0 0 8px var(--accent-glow)}._rightSection_1elij_102{display:flex;align-items:center;gap:var(--space-3)}._searchWrapper_1elij_108{display:flex;align-items:center;gap:8px}._searchInput_1elij_114{width:0;opacity:0;padding:0;border:none;background:transparent;color:var(--text-primary);font-size:var(--font-size-sm);font-family:inherit;height:42px;transition:all var(--transition-base);pointer-events:none;outline:none}._searchInput_1elij_114::placeholder{color:#ffffffb3}._searchWrapper_1elij_108:focus-within ._searchInput_1elij_114{width:200px;opacity:1;padding:0 var(--space-3);pointer-events:auto;background:#00000059;border:1px solid rgba(255,255,255,.35);border-radius:var(--radius-full);color:#fff}._searchButton_1elij_144{background:#00000026;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:none;color:var(--text-primary);padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer;pointer-events:auto;width:50px;height:50px;border-radius:50%;transition:all var(--transition-base);flex-shrink:0}._searchButton_1elij_144:hover{background:#00000040;border-color:#ffffff59}._searchIcon_1elij_168{font-size:1rem;color:#fff;transition:all var(--transition-base)}._searchButton_1elij_144:hover ._searchIcon_1elij_168{color:var(--accent)}._profileBtn_1elij_178{width:50px;height:50px;border-radius:50%;overflow:hidden;border:none;cursor:pointer;transition:all var(--transition-base);display:flex;align-items:center;justify-content:center;flex-shrink:0;background:#00000026;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);color:var(--text-primary)}._profileBtn_1elij_178:hover{border-color:#ffffff59;transform:translateY(-2px);background:#00000040}._profileBtn_1elij_178:active{transform:scale(.95)}._profileBtn_1elij_178 svg{color:var(--text-primary);font-size:1.1rem}._profileImg_1elij_211{width:100%;height:100%;object-fit:cover}._hamburgerBtn_1elij_217{background:#00000026;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:none;color:var(--text-primary);font-size:1.25rem;padding:var(--space-2);border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all var(--transition-base);height:50px;width:50px;flex-shrink:0}._hamburgerBtn_1elij_217:hover{background:#00000040;border-color:#ffffff59}._hamburgerBtn_1elij_217:active{transform:scale(.95)}._mobileSearchBar_1elij_245{display:none}@media(max-width:1024px){._searchInput_1elij_114{display:none}._searchWrapper_1elij_108:focus-within ._searchInput_1elij_114{display:none}._mobileSearchBar_1elij_245{display:block;position:absolute;top:100%;left:0;right:0;background:#0c0c0fe6;padding:var(--space-2) var(--space-3);animation:_slideDown_1elij_1 .2s ease;transition:transform var(--transition-base),opacity var(--transition-base)}._mobileSearchBarHidden_1elij_272{transform:translateY(-100%);opacity:0;pointer-events:none}@keyframes _slideDown_1elij_1{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}._mobileSearchInner_1elij_289{display:flex;align-items:center;background:#ffffff14;border:none;border-radius:var(--radius-full);padding:0 var(--space-4);height:40px}._mobileSearchInner_1elij_289:focus-within{border:none;outline:none;box-shadow:0 0 0 2px var(--accent)}._mobileSearchIcon_1elij_305{color:#ffffff80;font-size:.85rem;flex-shrink:0;margin-right:var(--space-2)}._mobileSearchInput_1elij_312{flex:1;background:transparent;border:none;outline:none;color:var(--text-primary);font-size:var(--font-size-sm);font-family:inherit;height:100%}._mobileSearchInput_1elij_312::placeholder{color:#ffffff80}._mobileSearchInput_1elij_312:focus,input._mobileSearchInput_1elij_312:focus,._mobileSearchInput_1elij_312:focus-visible,input._mobileSearchInput_1elij_312:focus-visible{outline:none!important;box-shadow:none!important;border:none}}@media(max-width:848px){._header_1elij_1{height:64px;padding:0 var(--space-3);--logo-height: 44px}._headerInner_1elij_44{padding:0;max-width:none}._leftSection_1elij_54{gap:var(--space-1);min-width:0}._hamburgerBtn_1elij_217{height:36px;width:36px;font-size:.9rem}._logo_1elij_31{padding:2px;min-width:0}._searchButton_1elij_144{width:36px;height:36px}._rightSection_1elij_102{gap:2px}._profileBtn_1elij_178{width:36px;height:36px}}@media(max-width:900px){._desktopNav_1elij_60{display:none}}@media(max-width:480px){._rightSection_1elij_102{gap:4px}._hamburgerBtn_1elij_217{height:38px;width:38px;font-size:1rem}._logo_1elij_31{padding:2px;min-width:0}._searchButton_1elij_144,._profileBtn_1elij_178{width:38px;height:38px}}._sidebar_153jc_1{position:fixed;top:0;left:0;width:280px;max-width:85vw;height:100%;transition:transform var(--transition-normal);z-index:var(--z-sidebar);padding:var(--space-8) var(--space-6);display:flex;flex-direction:column;overflow-y:auto;transform:translate(-100%);background-color:#0a0a0cf2;color:var(--text-primary);border-right:1px solid var(--border-primary)}._sidebar_153jc_1._open_153jc_20{transform:translate(0);box-shadow:20px 0 60px #00000080}._sidebarHeader_153jc_25{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-10);position:relative}._closeBtn_153jc_33{position:absolute;top:0;right:0;background:none;border:none;font-size:1.25rem;line-height:1;cursor:pointer;color:var(--text-tertiary);transition:color var(--transition-base);display:flex;align-items:center;justify-content:center;padding:var(--space-1);width:32px;height:32px;border-radius:var(--radius-sm)}._closeBtn_153jc_33:hover{color:var(--text-primary)}._logo_153jc_57{display:flex;align-items:center;text-decoration:none;--logo-height: 50px;transition:opacity var(--transition-base)}._logo_153jc_57:hover{opacity:.8}._navSection_153jc_69{display:flex;flex-direction:column;gap:var(--space-1)}._navLink_153jc_75{display:flex;align-items:center;gap:var(--space-4);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);text-decoration:none;transition:all var(--transition-base);color:var(--text-secondary);font-weight:var(--font-weight-medium);font-size:var(--font-size-base);border-left:2px solid transparent;margin-left:var(--space-2)}._navLink_153jc_75 svg{font-size:1rem;width:20px;text-align:center;flex-shrink:0;transition:color var(--transition-base)}._navLink_153jc_75:hover{background-color:#ffffff0a;color:var(--text-primary);border-left-color:#ffffff26}._navLink_153jc_75:hover svg{color:var(--text-primary)}._navLink_153jc_75._active_153jc_108{background-color:color-mix(in srgb,var(--accent) 10%,transparent);color:var(--accent-light);border-left-color:var(--accent)}._navLink_153jc_75._active_153jc_108 svg{color:var(--accent)}._overlay_153jc_118{position:fixed;inset:0;background-color:#0009;z-index:calc(var(--z-sidebar) - 1);animation:_fadeIn_153jc_1 .3s ease-out}@keyframes _fadeIn_153jc_1{0%{opacity:0}to{opacity:1}}._versionInfo_153jc_138{margin-top:auto;padding-top:var(--space-8);font-size:1rem;color:var(--text-secondary);text-align:left;display:flex;align-items:center;gap:var(--space-2)}._versionInfo_153jc_138:before{content:"";display:block;width:5px;height:5px;border-radius:50%;background-color:var(--color-success)}@media(max-width:768px){._sidebar_153jc_1{width:260px;padding:var(--space-6) var(--space-4)}._sidebarHeader_153jc_25{margin-bottom:var(--space-8)}._logo_153jc_57{--logo-height: 48px}._navLink_153jc_75{padding:var(--space-3) var(--space-3)}}._footer_1p5nb_1{width:100%;position:relative;padding:0 var(--space-8) var(--space-8);overflow:visible;border-top:1px solid rgba(255,255,255,.08);margin-top:auto;background:linear-gradient(180deg,#0a0a0c99,#050507f2);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);color:var(--text-tertiary);font-size:var(--font-size-sm)}._footerInner_1p5nb_15{width:100%;max-width:var(--max-width);margin:0 auto;display:grid;grid-template-columns:1fr auto;align-items:start;gap:var(--space-12);padding-bottom:var(--space-8);border-bottom:1px solid rgba(255,255,255,.06)}._brandSection_1p5nb_27{grid-column:1;display:flex;flex-direction:column;align-items:flex-start;text-align:left;max-width:320px;position:relative;padding-top:0;margin-top:-60px}._logoRow_1p5nb_39{display:flex;align-items:center;gap:14px}._mascotContainer_1p5nb_45{position:absolute;top:-90px;left:0;line-height:0;flex-shrink:0}._mascot_1p5nb_45{height:160px;width:auto;display:block}._logoText_1p5nb_59{height:105px;width:auto;display:block}._brandMeta_1p5nb_65{display:flex;align-items:center;justify-content:flex-start;gap:var(--space-2);flex-wrap:wrap;margin-top:10px}._brandTagline_1p5nb_74{color:var(--text-secondary);font-size:.88rem;line-height:1.5;margin:0}._statusPill_1p5nb_81{display:inline-flex;align-items:center;gap:var(--space-2);padding:4px 12px;background:#ffffff0a;border:1px solid rgba(255,255,255,.08);border-radius:var(--radius-full);font-size:.78rem;color:var(--text-secondary);width:fit-content}._statusDot_1p5nb_94{width:7px;height:7px;border-radius:50%;background:var(--color-success);box-shadow:0 0 8px var(--color-success)}._linksGrid_1p5nb_102{grid-column:2;display:flex;gap:var(--space-8);justify-content:flex-end;padding-top:var(--space-8)}._linkColumn_1p5nb_110{display:flex;flex-direction:column;gap:var(--space-2)}._columnTitle_1p5nb_116{color:var(--text-primary);font-size:.9rem;font-weight:700;margin:0 0 var(--space-2);text-transform:uppercase;letter-spacing:.05em}._footer_1p5nb_1 a{color:var(--text-secondary);text-decoration:none;font-weight:500;font-size:.88rem;transition:all var(--transition-fast);display:inline-flex;align-items:center}._footer_1p5nb_1 a:hover{color:var(--accent);transform:translate(2px)}._bottomBar_1p5nb_140{position:relative;width:100%;max-width:var(--max-width);margin:var(--space-6) auto 0;display:flex;align-items:center;justify-content:center}._copyright_1p5nb_150{margin:0;color:var(--text-muted);font-size:.85rem;display:flex;align-items:center;justify-content:center;gap:4px;text-align:center}._brand_1p5nb_27{color:var(--accent);font-weight:700}._heartIcon_1p5nb_166{color:var(--color-danger);margin:0 2px}._backToTop_1p5nb_171{position:absolute;right:0;display:inline-flex;align-items:center;gap:var(--space-2);padding:6px 14px;background:#ffffff0d;border:1px solid rgba(255,255,255,.12);border-radius:var(--radius-full);color:var(--text-secondary);font-size:.8rem;font-weight:600;cursor:pointer;transition:all var(--transition-base)}._backToTop_1p5nb_171:hover{background:#ffffff1f;color:#fff;border-color:var(--accent);transform:translateY(-2px)}@media(max-width:768px){._footer_1p5nb_1{padding:0 var(--space-4) var(--space-6)}._footerInner_1p5nb_15{grid-template-columns:1fr;gap:var(--space-5);align-items:center;justify-items:center}._brandSection_1p5nb_27{grid-column:1;align-items:center;text-align:center;padding-top:0;justify-content:center;margin-top:-40px}._mascotContainer_1p5nb_45{position:absolute;top:-60px;left:50%;transform:translate(-50%)}._logoRow_1p5nb_39{flex-direction:column;align-items:center;gap:6px}._mascot_1p5nb_45{height:120px}._logoText_1p5nb_59{height:84px}._brandMeta_1p5nb_65{flex-direction:column;align-items:center;gap:var(--space-1);justify-content:center;margin-top:6px}._linksGrid_1p5nb_102{grid-column:1;display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-4);text-align:center}._linkColumn_1p5nb_110{align-items:center;gap:var(--space-1)}._columnTitle_1p5nb_116{margin:0 0 var(--space-1);font-size:.78rem}._footer_1p5nb_1 a{font-size:.82rem}._bottomBar_1p5nb_140{flex-direction:column;gap:var(--space-3);text-align:center}._copyright_1p5nb_150{font-size:.78rem}._backToTop_1p5nb_171{position:static}}._overlay_1juub_1{position:fixed;inset:0;background-color:#0009;z-index:var(--z-modal);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);animation:_fadeIn_1juub_1 .2s ease-out}._content_1juub_11{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:calc(var(--z-modal) + 1);background-color:var(--bg-secondary);padding:var(--space-6);border-radius:var(--radius-lg);width:100%;max-width:min(500px,calc(100vw - 2 * var(--space-4)));max-height:calc(100vh - 2 * var(--space-4));overflow-y:auto;box-shadow:var(--shadow-xl);border:1px solid var(--border-primary);animation:_modalIn_1juub_1 .2s var(--ease-smooth)}._sm_1juub_29{max-width:min(400px,calc(100vw - 2 * var(--space-4)))}._md_1juub_33{max-width:min(500px,calc(100vw - 2 * var(--space-4)))}._lg_1juub_37{max-width:min(700px,calc(100vw - 2 * var(--space-4)))}._title_1juub_41{margin:0 0 var(--space-4);font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);color:var(--text-primary)}._body_1juub_48{color:var(--text-secondary)}._footer_1juub_52{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-3);margin-top:var(--space-6);padding-top:var(--space-4);border-top:1px solid var(--border-primary)}._footer_1juub_52>*{flex:0 1 auto;min-width:0;max-width:100%}@media(max-width:480px){._content_1juub_11{padding:var(--space-4)}._footer_1juub_52{flex-direction:column;align-items:stretch;justify-content:flex-start}._footer_1juub_52>*{flex:1 1 auto;width:100%}}@keyframes _fadeIn_1juub_1{0%{opacity:0}to{opacity:1}}@keyframes _modalIn_1juub_1{0%{opacity:0;transform:translate(-50%,-50%) scale(.95)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}._switch_1f1gi_1{position:relative;display:inline-block;width:48px;height:24px;flex-shrink:0}._switch_1f1gi_1 input{opacity:0;width:0;height:0}._slider_1f1gi_15{position:absolute;cursor:pointer;inset:0;background-color:#ffffff1a;border:1px solid var(--border-primary);transition:var(--transition-base);border-radius:24px}._slider_1f1gi_15: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_1f1gi_15{background-color:color-mix(in srgb,var(--accent) 20%,transparent);border-color:var(--accent)}input:checked+._slider_1f1gi_15:before{transform:translate(22px);background-color:var(--accent);box-shadow:0 0 10px var(--accent-glow)}input:focus+._slider_1f1gi_15{box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 20%,transparent)}._container_1hh92_1{display:flex;flex-direction:column;gap:1rem;color:var(--text-primary)}._description_1hh92_8{margin:0;line-height:1.5;color:var(--text-secondary)}._dataList_1hh92_14{background:var(--bg-tertiary);border-radius:6px;padding:.75rem 1rem}._dataTitle_1hh92_20{margin:0 0 .5rem;font-weight:600;font-size:.9rem}._dataList_1hh92_14 ul{margin:0;padding-left:1.25rem;display:flex;flex-direction:column;gap:.25rem}._dataList_1hh92_14 li{font-size:.85rem;color:var(--text-secondary)}._toggleRow_1hh92_39{display:flex;align-items:center;justify-content:space-between;gap:1rem}._toggleLabel_1hh92_46{font-size:.95rem}._actions_1hh92_50{display:flex;justify-content:flex-end}._okButton_1hh92_55{background:var(--accent);color:var(--accent-text);border:none;border-radius:6px;padding:.5rem 1.5rem;font-size:.95rem;cursor:pointer;font-weight:500;transition:opacity .15s}._okButton_1hh92_55:hover{opacity:.9}._previewToggle_1hh92_71{display:flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%;background:none;border:none;color:var(--text-secondary);font-size:.85rem;cursor:pointer;padding:0}._previewToggle_1hh92_71:hover{color:var(--text-primary)}._chevron_1hh92_89{font-size:.7rem;transition:transform .2s}._chevronOpen_1hh92_94{transform:rotate(180deg)}._previewBox_1hh92_98{background:var(--bg-tertiary);border-radius:6px;padding:.75rem 1rem;display:flex;flex-direction:column;gap:.4rem}._previewItem_1hh92_107{display:flex;gap:.5rem;font-size:.85rem;font-family:monospace}._previewKey_1hh92_114{color:var(--text-secondary)}._previewVal_1hh92_118{color:var(--text-primary)}._promoWrapper_1vfnt_1{position:fixed;right:0;top:50%;transform:translateY(-50%) translate(110%);z-index:1200;transition:transform .45s cubic-bezier(.34,1.28,.64,1);pointer-events:none}._promoWrapper_1vfnt_1._visible_1vfnt_11{transform:translateY(-50%) translate(0);pointer-events:all}._panel_1vfnt_16{background:linear-gradient(145deg,var(--bg-elevated) 0%,var(--bg-primary) 100%);border:1px solid var(--border-accent);border-right:none;border-radius:16px 0 0 16px;padding:20px 18px 20px 20px;width:280px;box-shadow:-8px 0 40px #0009,-2px 0 12px var(--accent-glow);position:relative}._closeBtn_1vfnt_29{position:absolute;top:10px;right:10px;background:#ffffff0f;border:none;color:var(--text-tertiary);width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:14px;transition:background .2s,color .2s;line-height:1}._closeBtn_1vfnt_29:hover{background:#ffffff1f;color:var(--text-primary)}._header_1vfnt_55{display:flex;align-items:center;gap:10px;margin-bottom:12px}._discordIcon_1vfnt_62{width:36px;height:36px;background:var(--accent);border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}._headerText_1vfnt_74 h4{margin:0;font-size:.9rem;font-weight:700;color:var(--text-primary);line-height:1.2}._headerText_1vfnt_74 p{margin:2px 0 0;font-size:.72rem;color:var(--accent);font-weight:600}._body_1vfnt_89{font-size:.8rem;color:var(--text-secondary);line-height:1.5;margin-bottom:14px}._rolePreview_1vfnt_96{display:flex;gap:6px;flex-wrap:wrap;margin:10px 0}._badge_1vfnt_103{padding:3px 10px;border-radius:20px;font-size:.72rem;font-weight:700;letter-spacing:.02em}._badgeRank_1vfnt_111{background:var(--accent-subtle);color:var(--accent-light);border:1px solid var(--border-accent)}._badgeDere_1vfnt_117{background:var(--bg-tertiary);color:var(--text-secondary);border:1px solid var(--border-secondary)}._actions_1vfnt_123{display:flex;flex-direction:column;gap:7px}._btnJoin_1vfnt_129{background:var(--accent);color:var(--accent-text);border:none;border-radius:8px;padding:9px 12px;font-size:.82rem;font-weight:700;cursor:pointer;transition:background .2s,transform .15s;display:flex;align-items:center;justify-content:center;gap:6px;text-decoration:none;width:100%;box-sizing:border-box}._btnJoin_1vfnt_129:hover{background:var(--accent-light);transform:translateY(-1px)}._btnSettings_1vfnt_155{background:#ffffff0f;color:var(--text-secondary);border:1px solid rgba(255,255,255,.08);border-radius:8px;padding:8px 12px;font-size:.78rem;font-weight:600;cursor:pointer;transition:background .2s,color .2s;display:flex;align-items:center;justify-content:center;gap:6px;width:100%;box-sizing:border-box}._btnSettings_1vfnt_155:hover{background:#ffffff1a;color:var(--text-primary)}._skipLink_1vfnt_180{display:block;width:100%;text-align:center;margin-top:8px;font-size:.72rem;color:var(--text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .2s;background:none;border:none;padding:0;font-family:inherit}._skipLink_1vfnt_180:hover{color:var(--text-secondary)}._hint_1vfnt_200{font-size:.7rem;color:var(--text-tertiary);text-align:center;margin-top:10px;line-height:1.4}._container_e96gf_1{display:flex;flex-direction:column;gap:1rem;color:var(--text-primary);max-width:400px}._field_e96gf_9{display:flex;flex-direction:column;gap:.5rem}._field_e96gf_9 label{font-size:.9rem;opacity:.8}._textarea_e96gf_20{background:var(--bg-secondary);border:1px solid var(--border-primary);color:var(--text-primary);padding:.5rem;border-radius:4px;resize:vertical;font-family:inherit}._textarea_e96gf_20:hover{border-color:var(--border-secondary)}._textarea_e96gf_20:focus{outline:none;border-color:var(--accent);box-shadow:var(--shadow-input-focus)}._input_e96gf_40{background:var(--bg-secondary);border:1px solid var(--border-primary);color:var(--text-primary);padding:.6rem;border-radius:4px}._input_e96gf_40:hover{border-color:var(--border-secondary)}._input_e96gf_40:focus{outline:none;border-color:var(--accent);box-shadow:var(--shadow-input-focus)}._button_e96gf_58{background:var(--accent);color:var(--text-primary);border:none;padding:.7rem;border-radius:4px;cursor:pointer;font-weight:600;transition:opacity .2s}._button_e96gf_58:hover{opacity:.9}._button_e96gf_58:disabled{opacity:.5;cursor:not-allowed}._secondaryButton_e96gf_78{background:transparent;border:1px solid var(--border-primary);color:var(--text-primary);padding:.7rem;border-radius:4px;cursor:pointer;transition:background .2s,border-color .2s}._secondaryButton_e96gf_78:hover{background:#ffffff0d;border-color:var(--border-secondary)}._actions_e96gf_95{display:flex;gap:.5rem}._actions_e96gf_95 ._button_e96gf_58{flex:1}._hint_e96gf_104{background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:4px;padding:.6rem;font-size:.85rem;line-height:1.5}._hint_e96gf_104 ._actions_e96gf_95{margin-top:.6rem}._link_e96gf_117{color:var(--accent);text-decoration:underline;font-weight:600}._link_e96gf_117:hover{opacity:.85}.top-progress-bar{position:fixed;top:0;left:0;right:0;height:3px;z-index:9999;overflow:hidden;pointer-events:none;background:transparent}.top-progress-bar:after{content:"";position:absolute;top:0;bottom:0;left:0;width:40%;border-radius:0 3px 3px 0;background:linear-gradient(90deg,transparent,var(--accent),var(--accent-light),transparent);animation:top-progress-slide 1.1s infinite ease-in-out}@keyframes top-progress-slide{0%{transform:translate(-100%)}to{transform:translate(280%)}}@media(prefers-reduced-motion:reduce){.top-progress-bar:after{animation:none;width:100%;border-radius:0}}._container_88bss_1{display:flex;flex-direction:column;gap:1rem;color:var(--text-primary)}._field_88bss_8{display:flex;flex-direction:column;gap:.5rem}._field_88bss_8 label{font-size:.9rem;opacity:.8}._input_88bss_19{background:var(--bg-secondary);border:1px solid var(--border-primary);color:var(--text-primary);padding:.6rem;border-radius:4px}._input_88bss_19:hover{border-color:var(--border-secondary)}._input_88bss_19:focus{outline:none;border-color:var(--accent);box-shadow:var(--shadow-input-focus)}._actions_88bss_37{display:flex;gap:.5rem;justify-content:flex-end}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);border-radius:var(--radius-md);font-weight:var(--font-weight-medium);cursor:pointer;border:none;outline:none;font-family:inherit;position:relative;white-space:nowrap;font-size:var(--font-size-base);background:transparent;color:var(--text-primary);padding:var(--space-3) var(--space-6);min-height:44px;transition:background-color .15s ease,color .15s ease,transform .1s ease}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:focus-visible{outline:2px solid var(--accent-light);outline-offset:2px}.btn-primary{background:linear-gradient(135deg,var(--accent) 0%,var(--accent-dark) 100%);color:var(--accent-text);box-shadow:0 4px 12px var(--accent-glow)}.btn-primary:hover:not(:disabled){background:linear-gradient(135deg,var(--accent-light) 0%,var(--accent) 100%);transform:translateY(-1px);box-shadow:0 6px 16px var(--accent-glow)}.btn-primary:active:not(:disabled){transform:translateY(0)}.btn-secondary{background:#ffffff14;border:1px solid var(--border-secondary);color:var(--text-primary)}.btn-secondary:hover:not(:disabled){background:#ffffff1f;border-color:#ffffff40}.btn-ghost{background:transparent;color:var(--text-secondary)}.btn-ghost:hover:not(:disabled){background:#ffffff14;color:var(--text-primary)}.btn-danger{background:var(--color-danger);color:var(--color-danger-text)}.btn-danger:hover:not(:disabled){background:var(--color-danger-dark)}.btn-sm{min-height:36px;padding:var(--space-2) var(--space-4);font-size:var(--font-size-sm);border-radius:var(--radius-sm)}.btn-lg{min-height:52px;padding:var(--space-4) var(--space-8);font-size:var(--font-size-md);border-radius:var(--radius-lg)}.btn-block{width:100%}.btn-loading{color:transparent;pointer-events:none}.btn-spinner{position:absolute;width:16px;height:16px;border:2px solid rgba(128,128,128,.35);border-top-color:var(--accent-text);border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}:root{--accent: #6d5dfc;--accent-light: #897cff;--accent-lighter: #b3a8ff;--accent-dark: #5646db;--accent-text: #ffffff;--accent-subtle: rgba(109, 93, 252, .12);--accent-glow: rgba(109, 93, 252, .18);--accent-h: 245;--accent-s: 96%;--accent-l: 68%;--color-danger: #ef4444;--color-error: var(--color-danger);--color-danger-dark: #dc2626;--color-danger-text: #ffffff;--color-success: #10b981;--color-success-text: #ffffff;--color-warning: #f59e0b;--color-warning-text: #17171c;--color-info: #3b82f6;--color-info-text: #ffffff;--badge-info-bg: var(--accent);--badge-info-text: var(--accent-text);--secondary-h: 180;--secondary-s: 85%;--secondary-l: 50%;--accent-blue: hsl(var(--secondary-h), var(--secondary-s), var(--secondary-l));--accent-blue-light: hsl(var(--secondary-h), var(--secondary-s), 70%);--bg-main: #0c0d12;--bg-primary: #13151d;--bg-secondary: #13151d;--bg-tertiary: #191c27;--bg-elevated: #202433;--primary-color: var(--accent);--header-bg: rgba(12, 13, 18, .85);--text-primary: #ffffff;--text-secondary: #b4b4bd;--text-tertiary: #8f8f98;--text-muted: #b4b4bd;--border-primary: rgba(255, 255, 255, .08);--border-secondary: rgba(255, 255, 255, .12);--border-accent: hsla(var(--accent-h), var(--accent-s), var(--accent-l), .3);--border: var(--border-primary);--card-radius: var(--radius-lg);--border-light: var(--border-secondary);--danger-color: var(--color-danger);--shadow-input-focus: 0 0 0 2px var(--accent-subtle);--shadow-focus: 0 0 0 2px var(--accent-subtle);--glass-bg: rgba(20, 20, 22, .95);--glass-border: var(--border-primary);--glass-highlight: rgba(255, 255, 255, .05);--glass-shadow: 0 8px 32px 0 rgba(0, 0, 0, .36);--bg-hover: rgba(255, 255, 255, .08);--bg-hover-strong: rgba(255, 255, 255, .1);--bg-overlay: rgba(0, 0, 0, .55);--bg-overlay-strong: rgba(0, 0, 0, .6);--bg-overlay-heavy: rgba(0, 0, 0, .7);--bg-scrim: rgba(10, 10, 12, .55);--bg-scrim-strong: rgba(10, 10, 12, .8);--bg-dark: #0a0a0c;--bg-black: #000000;--border-strong: rgba(255, 255, 255, .14);--track-bg: rgba(255, 255, 255, .1);--track-buffered: rgba(255, 255, 255, .25);--shimmer-highlight: rgba(255, 255, 255, .07);--bg-selected: rgba(255, 255, 255, .06);--shadow-scrim: 0 4px 16px rgba(0, 0, 0, .45);--shadow-panel: 0 12px 32px rgba(0, 0, 0, .5);--color-danger-bg: rgba(153, 42, 42, .9);--font-family: "Outfit", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-size-2xs: .4375rem;--font-size-xs: .75rem;--font-size-sm: .875rem;--font-size-base: 1rem;--font-size-md: 1.125rem;--font-size-lg: 1.5rem;--font-size-xl: 1.875rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75;--space-px: 1px;--space-2px: 2px;--space-1: .25rem;--space-1-5: .375rem;--space-2: .5rem;--space-2-5: .625rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.25rem;--space-6: 1.5rem;--space-8: 2rem;--space-10: 2.5rem;--space-12: 3rem;--space-16: 4rem;--size-22: 22px;--size-42: 42px;--size-44: 44px;--size-48: 48px;--size-34: 34px;--size-36: 36px;--size-140: 140px;--size-180: 180px;--size-220: 220px;--size-250: 250px;--size-440: 440px;--size-480: 480px;--size-720: 720px;--size-84: 84px;--size-52: 52px;--size-90: 90px;--size-240: 240px;--size-320: 320px;--size-420: 420px;--size-900: 900px;--layout-asmr-max-width: 1400px;--layout-page-offset: 120px;--layout-player-mobile: 175px;--radius-xs: 6px;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 20px;--radius-xl: 28px;--radius-full: 9999px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--shadow-lg: 0 12px 32px -4px rgba(0, 0, 0, .6);--shadow-active: 0 0 0 1px var(--border-accent), 0 8px 24px -4px rgba(0, 0, 0, .5);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .4), 0 10px 10px -5px rgba(0, 0, 0, .2);--shadow-thumb: 0 0 5px rgba(0, 0, 0, .5);--blur-sm: 4px;--blur-md: 6px;--blur-lg: 12px;--z-base: 1;--z-dropdown: 100;--z-sticky: 200;--z-drawer: 300;--z-sidebar: 500;--z-header: 400;--z-modal: 600;--z-popover: 700;--z-toast: 800;--z-overlay: 900;--header-height: 80px;--max-width: 1600px;--sidebar-width: 280px;--ease-spring: cubic-bezier(.175, .885, .32, 1.275);--ease-smooth: cubic-bezier(.4, 0, .2, 1);--ease-emphasized: cubic-bezier(.32, .72, 0, 1);--transition-fast: .2s var(--ease-smooth);--transition-base: .3s var(--ease-smooth);--transition-normal: .4s var(--ease-smooth);--transition-slow: .5s var(--ease-smooth);--transition-emphasized: .42s var(--ease-emphasized);--transition-quick: .09s var(--ease-smooth);--duration-shimmer: 1.6s;--duration-spin: .9s;--focus-ring-color: var(--accent-light);--focus-ring-glow: 0 0 0 3px rgba(109, 93, 252, .35);--focus-scale: scale(1.05)}@media(min-width:1920px){:root{--font-size-base: 1.125rem;--max-width: 2000px}}html[data-theme=mochi]{--accent: #e3e1ee;--accent-light: #f4f3fa;--accent-lighter: #ffffff;--accent-dark: #b3b1c6;--accent-text: #17171c;--accent-subtle: rgba(227, 225, 238, .12);--accent-glow: rgba(227, 225, 238, 0);--accent-h: 248;--accent-s: 18%;--accent-l: 89%;--bg-main: #131316;--bg-primary: #1b1b1f;--bg-secondary: #1b1b1f;--bg-tertiary: #232329;--bg-elevated: #2b2b32;--header-bg: rgba(19, 19, 22, .88);--text-primary: #f2f2f5;--text-secondary: #a9a9b3;--text-tertiary: #85858f;--text-muted: #a9a9b3;--border-primary: #2c2c33;--border-secondary: #3a3a43;--glass-bg: rgba(27, 27, 31, .96);--badge-info-bg: var(--accent);--badge-info-text: var(--accent-text);--shadow-sm: none;--shadow-md: none;--shadow-lg: none;--shadow-active: 0 0 0 1px var(--border-secondary);--shadow-xl: none;--focus-ring-color: var(--accent);--focus-ring-glow: 0 0 0 3px rgba(227, 225, 238, .25)}html[data-theme=sakura]{--accent: #d9a3d9;--accent-light: #eccbec;--accent-lighter: #f9e8f9;--accent-dark: #a978a9;--accent-text: #fff;--accent-subtle: rgba(217, 163, 217, .12);--accent-glow: rgba(217, 163, 217, 0);--accent-h: 300;--accent-s: 45%;--accent-l: 74%;--bg-main: #141116;--bg-primary: #1c171e;--bg-secondary: #1c171e;--bg-tertiary: #241e26;--bg-elevated: #2e262f;--header-bg: rgba(20, 17, 22, .88);--text-primary: #f3eaf3;--text-secondary: #b3a3b5;--text-tertiary: #8d7c8f;--text-muted: #b3a3b5;--border-primary: #322a34;--border-secondary: #403640;--glass-bg: rgba(28, 23, 30, .96);--badge-info-bg: var(--accent-dark);--badge-info-text: #ffffff;--shadow-sm: none;--shadow-md: none;--shadow-lg: none;--shadow-active: 0 0 0 1px var(--border-secondary);--shadow-xl: none;--focus-ring-color: var(--accent);--focus-ring-glow: 0 0 0 3px rgba(217, 163, 217, .25)}*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth;color-scheme:dark;scrollbar-gutter:stable;overflow-x:hidden;overflow-x:clip;max-width:100%;-webkit-text-size-adjust:100%;text-size-adjust:100%}html:has(:fullscreen),html:has(:-webkit-full-screen){scrollbar-gutter:auto}body{margin:0;padding:0;font-family:var(--font-family);background:var(--bg-main);color:var(--text-primary);line-height:var(--line-height-normal);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:hidden;overflow-x:clip;max-width:100%;color-scheme:dark}html,body,.app-container,.posterWrapper,.dot,.genreTag{--darkreader-inline-bgcolor: none !important;--darkreader-inline-bgimage: none !important;--darkreader-inline-bordercolor: none !important;--darkreader-inline-color: none !important;background-color:transparent}body{overflow-x:hidden;overflow-x:clip}body:before{display:none!important}h1,h2,h3,h4,h5,h6{margin:0;font-weight:var(--font-weight-semibold);letter-spacing:-.02em}a{color:inherit;text-decoration:none}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--focus-ring-color)!important;outline-offset:3px!important;box-shadow:var(--focus-ring-glow)!important;transition:outline-offset var(--transition-fast),transform var(--transition-fast)}a:focus:not(:focus-visible),button:focus:not(:focus-visible),input:focus:not(:focus-visible),select:focus:not(:focus-visible),[tabindex]:focus:not(:focus-visible){outline:none!important;box-shadow:none!important}a,button,input,select,textarea,[tabindex]{-webkit-tap-highlight-color:transparent}@media(min-width:1200px){a:focus-visible,button:focus-visible{transform:var(--focus-scale)}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--bg-elevated);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--text-tertiary)}.text-gradient{background:linear-gradient(135deg,#fff,#a5a5a5);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.text-gradient-accent{background:linear-gradient(135deg,var(--accent-light) 0%,var(--accent) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.app-container{display:flex;flex-direction:column;min-height:100vh}main{flex:1;width:100%;max-width:var(--max-width);margin:0 auto;padding:0 var(--space-8) var(--space-16);position:relative;z-index:1}.main-content{padding-top:var(--header-height)}@media(max-width:1024px){.main-content{padding-top:calc(var(--header-height) + 52px)}}@media(max-width:848px){main{padding:0 var(--space-4) var(--space-12)}.main-content{padding-top:116px}}.section-title{font-size:1.75rem;font-weight:800;margin-bottom:var(--space-8);color:var(--text-primary);letter-spacing:-.02em;line-height:1}.section-eyebrow{display:flex;align-items:center;gap:8px;font-size:.72rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--accent-light);margin:0;line-height:1.4}.section-eyebrow:before{content:"";width:14px;height:3px;border-radius:999px;background:linear-gradient(90deg,var(--accent) 0%,var(--accent-dark) 100%);box-shadow:0 0 8px var(--accent-glow);flex:none}.title-stack{display:flex;flex-direction:column;gap:4px;min-width:0;justify-content:center}html[data-theme=mochi] .section-eyebrow,html[data-theme=sakura] .section-eyebrow{color:var(--accent)}@media(max-width:768px){.section-title{font-size:1.5rem;margin-bottom:var(--space-6)}}.grid-container{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:var(--space-6);width:100%}@media(max-width:1024px){.grid-container{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--space-4)}}@media(max-width:768px){.grid-container{grid-template-columns:repeat(3,1fr);gap:var(--space-2)}}@media(max-width:480px){.grid-container{grid-template-columns:repeat(3,1fr);gap:8px}}footer{text-align:center;padding:var(--space-12);color:var(--text-muted);border-top:1px solid var(--border-primary);margin-top:var(--space-16);background:var(--bg-secondary)}footer a{color:var(--accent);text-decoration:none;font-weight:var(--font-weight-medium);transition:color var(--transition-fast)}footer a:hover{color:var(--accent-light);text-shadow:0 0 8px var(--accent-glow)}select{appearance:none;-webkit-appearance:none;cursor:pointer;background-color:var(--bg-tertiary)!important;border-color:var(--border-primary)!important}select:hover{background-color:var(--bg-tertiary)!important;border-color:var(--border-secondary)!important}select:focus{background-color:var(--bg-tertiary)!important;border-color:var(--accent)!important;outline:none}select:active{background-color:var(--bg-tertiary)!important}body.low-end{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol!important;--transition-fast: 0s !important;--transition-base: 0s !important;--transition-normal: 0s !important;--transition-slow: 0s !important;scroll-behavior:auto!important}body.low-end,body.low-end *{transition:none!important;animation:none!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important;box-shadow:none!important;text-shadow:none!important}body.low-end:before{display:none!important}body.low-end .text-gradient,body.low-end .text-gradient-accent{background:none!important;-webkit-background-clip:initial!important;-webkit-text-fill-color:initial!important;color:var(--text-primary)!important}body.low-end .text-gradient-accent{color:var(--accent)!important}body.low-end [class*=banner],body.low-end [class*=bannerContainer],body.low-end [class*=bannerOverlay],body.low-end [class*=heroSection]{background-image:none!important;background-color:var(--bg-main)!important;min-height:auto!important}body.low-end [class*=infoGlass]{background:var(--bg-secondary)!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important;border:1px solid var(--border-primary)!important;box-shadow:none!important}.skeleton{position:relative;overflow:hidden;background-color:var(--bg-tertiary)}.skeleton:after{content:"";position:absolute;inset:0;transform:translate(-100%);background-image:linear-gradient(90deg,#fff0 0,#ffffff0d 20%,#ffffff1f 60%,#fff0);animation:skeleton-wave 1.8s infinite ease-in-out}@keyframes skeleton-wave{to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto!important}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
|