@serifpersia/dango 3.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +258 -0
  3. package/client/dist/assets/AnimeCard-B5A20jAI.js +1 -0
  4. package/client/dist/assets/AnimeInfo-0huPAq0O.js +1 -0
  5. package/client/dist/assets/AnimeInfo-BFWtHlPC.css +1 -0
  6. package/client/dist/assets/AnimeInfoPage-Dqr5QH6R.js +2 -0
  7. package/client/dist/assets/AnimeMetaDetails-BPvv5xIl.js +1 -0
  8. package/client/dist/assets/AnimeMetaDetails-BwNQnRCd.css +1 -0
  9. package/client/dist/assets/Asmr-B6ZiqkmU.js +2 -0
  10. package/client/dist/assets/Asmr-Cq2ua6Zk.css +1 -0
  11. package/client/dist/assets/Asmr.module-ChUXDZKx.js +1 -0
  12. package/client/dist/assets/AsmrResetProgressModal-Cqsoo3XC.js +1 -0
  13. package/client/dist/assets/AvSyncCalibrator-C1_iBSyL.css +1 -0
  14. package/client/dist/assets/AvSyncCalibrator-C8ZoIwMY.js +10 -0
  15. package/client/dist/assets/ErrorMessage-CXoRbrLN.css +1 -0
  16. package/client/dist/assets/ErrorMessage-z4f4WGgP.js +1 -0
  17. package/client/dist/assets/Home-DtRtTuI9.css +1 -0
  18. package/client/dist/assets/Home-thJhPfs1.js +1 -0
  19. package/client/dist/assets/Insights-DKtoVe6L.css +1 -0
  20. package/client/dist/assets/Insights-ZlgPrzGD.js +1 -0
  21. package/client/dist/assets/LibraryListPage-CCiee-Ot.js +1 -0
  22. package/client/dist/assets/ListeningList-ctAz_6Zi.js +1 -0
  23. package/client/dist/assets/Manga-BI9WMTx5.js +1 -0
  24. package/client/dist/assets/Manga-Dp_-l1Pw.css +1 -0
  25. package/client/dist/assets/Manga.module-BcfOdsNP.js +1 -0
  26. package/client/dist/assets/MangaInfoPage-DcrEr7Sk.js +1 -0
  27. package/client/dist/assets/MangaReadPage-SYg63m48.js +1 -0
  28. package/client/dist/assets/MangaResetProgressModal-DX-1PS4h.js +1 -0
  29. package/client/dist/assets/Map-CXFqXmsZ.css +1 -0
  30. package/client/dist/assets/Map-Dj51g5zL.js +1 -0
  31. package/client/dist/assets/Mature-DJmUUtlF.css +1 -0
  32. package/client/dist/assets/Mature-Dqh_9SA3.js +1 -0
  33. package/client/dist/assets/MediaCard-Be1ST9oj.js +1 -0
  34. package/client/dist/assets/MediaCard-DB6Yjgky.css +1 -0
  35. package/client/dist/assets/Music-BGH_0voi.css +1 -0
  36. package/client/dist/assets/Music-zsPwT8_5.js +1 -0
  37. package/client/dist/assets/OptionListMenu-Drc_vybW.js +1 -0
  38. package/client/dist/assets/Player-B036Ic3m.css +1 -0
  39. package/client/dist/assets/Player-BEtAYps2.js +56 -0
  40. package/client/dist/assets/PlayerRedirect-D70t8VUW.js +1 -0
  41. package/client/dist/assets/PlayerSettings-Bj6SsmQ2.css +1 -0
  42. package/client/dist/assets/PlayerSettings-Cwoji-P7.js +1 -0
  43. package/client/dist/assets/QueueOptionsButton-B6BMq66e.js +1 -0
  44. package/client/dist/assets/QueueOptionsButton-CM15uQn8.css +1 -0
  45. package/client/dist/assets/QueueRail-BUYEjdaq.css +1 -0
  46. package/client/dist/assets/QueueRail-VxpUDBSm.js +1 -0
  47. package/client/dist/assets/Radio-B2Q_Egj7.js +1 -0
  48. package/client/dist/assets/Radio-CCHNFN7R.css +1 -0
  49. package/client/dist/assets/Radio.module-DGSZLpKM.js +1 -0
  50. package/client/dist/assets/ReadingList-O0QPwXu7.js +1 -0
  51. package/client/dist/assets/ResetProgressModal-CR_ovLAu.js +1 -0
  52. package/client/dist/assets/Search-C8e2nlDD.js +1 -0
  53. package/client/dist/assets/Search-Cs45oAwI.css +1 -0
  54. package/client/dist/assets/Search.module-CMEai-B-.js +1 -0
  55. package/client/dist/assets/Settings-AuFxQcJF.css +1 -0
  56. package/client/dist/assets/Settings-BgPWBl2V.js +21 -0
  57. package/client/dist/assets/SkeletonGrid-CtHKKMLj.js +1 -0
  58. package/client/dist/assets/SkeletonGrid-DhPYefXr.css +1 -0
  59. package/client/dist/assets/SynopsisText-BcpwT5iw.js +1 -0
  60. package/client/dist/assets/SynopsisText-CYv2W3yR.css +1 -0
  61. package/client/dist/assets/Trackers-Bfoiyuzy.js +2 -0
  62. package/client/dist/assets/Trackers-D5XBOCDp.css +1 -0
  63. package/client/dist/assets/Tv-Ca0fCdko.js +3 -0
  64. package/client/dist/assets/Tv-CuEl3Iol.css +1 -0
  65. package/client/dist/assets/TvInfo-Bu36xJyO.css +1 -0
  66. package/client/dist/assets/TvInfo-D_scgw_h.js +1 -0
  67. package/client/dist/assets/TvPopup-YTI7dEbJ.js +1 -0
  68. package/client/dist/assets/TvSearch-CxU33UOf.js +1 -0
  69. package/client/dist/assets/TvWatchlist-B4X1fWEH.js +1 -0
  70. package/client/dist/assets/VirtualKeyboard-6ZNTym4R.js +1 -0
  71. package/client/dist/assets/VirtualKeyboard-KIPc5ZGH.css +1 -0
  72. package/client/dist/assets/Watchlist-BiDEU0iV.css +1 -0
  73. package/client/dist/assets/Watchlist-P6YMZUdF.js +1 -0
  74. package/client/dist/assets/Watchlist.module-XGtVQr1d.js +1 -0
  75. package/client/dist/assets/hls-BOLXTnjL.js +42 -0
  76. package/client/dist/assets/hls-C4cG9wQw.js +1 -0
  77. package/client/dist/assets/index-BOKlZEHq.js +30354 -0
  78. package/client/dist/assets/index-CUm1meqr.css +1 -0
  79. package/client/dist/assets/index-IZgh1beL.js +178 -0
  80. package/client/dist/assets/useAnimeInfoData-DeuwDSnI.js +1 -0
  81. package/client/dist/assets/useAsmr-CbMVRjmV.js +1 -0
  82. package/client/dist/assets/useAsmrPopup-D91Q3CBg.js +1 -0
  83. package/client/dist/assets/useIsMobile-Dm_b6Ob3.js +1 -0
  84. package/client/dist/assets/useMangaLibrary-BPvFb1lU.js +1 -0
  85. package/client/dist/assets/useMangaPopup-BOL2mQJs.js +1 -0
  86. package/client/dist/assets/useMatureConsent-CT7-KfzG.js +1 -0
  87. package/client/dist/assets/useProviders-BsRGONMA.js +1 -0
  88. package/client/dist/assets/useTv-D37MfTHA.js +1 -0
  89. package/client/dist/assets/useTvLibrary-Cwxgy_Bg.js +1 -0
  90. package/client/dist/assets/vendor-core-8R2fFbyN.js +1 -0
  91. package/client/dist/assets/vendor-icons-CDMuNDeL.js +1 -0
  92. package/client/dist/assets/vendor-query-BXRECSI6.js +1 -0
  93. package/client/dist/assets/vendor-ui-CUDCvRS_.js +1 -0
  94. package/client/dist/av-sync-test.mp4 +0 -0
  95. package/client/dist/favicon.ico +0 -0
  96. package/client/dist/index.html +46 -0
  97. package/client/dist/logo-mochi.png +0 -0
  98. package/client/dist/logo-sakura.png +0 -0
  99. package/client/dist/logo.png +0 -0
  100. package/client/dist/placeholder.svg +4 -0
  101. package/client/dist/robots.txt +3 -0
  102. package/orchestrator.js +534 -0
  103. package/package.json +85 -0
  104. package/server/dist/app-auth.js +177 -0
  105. package/server/dist/config.js +175 -0
  106. package/server/dist/controllers/asmr-library.controller.js +288 -0
  107. package/server/dist/controllers/auth.controller.js +225 -0
  108. package/server/dist/controllers/data.controller.js +766 -0
  109. package/server/dist/controllers/insights.controller.js +198 -0
  110. package/server/dist/controllers/manga-library.controller.js +296 -0
  111. package/server/dist/controllers/music.controller.js +698 -0
  112. package/server/dist/controllers/proxy.controller.js +820 -0
  113. package/server/dist/controllers/settings.controller.js +609 -0
  114. package/server/dist/controllers/tv-library.controller.js +310 -0
  115. package/server/dist/controllers/watchlist.controller.js +1015 -0
  116. package/server/dist/db.js +145 -0
  117. package/server/dist/discord-gateway.js +391 -0
  118. package/server/dist/discord-rpc.js +427 -0
  119. package/server/dist/github-sync.js +512 -0
  120. package/server/dist/google.js +748 -0
  121. package/server/dist/lib/anilist.js +1549 -0
  122. package/server/dist/lib/anischedule.js +194 -0
  123. package/server/dist/lib/discord-roles-sync.service.js +130 -0
  124. package/server/dist/lib/ipc.js +24 -0
  125. package/server/dist/lib/kitsu.js +544 -0
  126. package/server/dist/lib/mal.js +934 -0
  127. package/server/dist/lib/migration.js +329 -0
  128. package/server/dist/lib/offline-db.js +401 -0
  129. package/server/dist/lib/temp-ids.js +3 -0
  130. package/server/dist/lib/tmdb.js +72 -0
  131. package/server/dist/lib/tracker/anilist-tracker.js +245 -0
  132. package/server/dist/lib/tracker/sync.service.js +496 -0
  133. package/server/dist/lib/ytmusic.js +125 -0
  134. package/server/dist/logger.js +16 -0
  135. package/server/dist/providers/manga/manga.types.js +7 -0
  136. package/server/dist/providers/provider.interface.js +1 -0
  137. package/server/dist/providers/remote-loader.js +574 -0
  138. package/server/dist/providers/remote-types.js +117 -0
  139. package/server/dist/providers/title-matching.js +225 -0
  140. package/server/dist/providers/tv.types.js +1 -0
  141. package/server/dist/rclone.js +120 -0
  142. package/server/dist/repositories/asmr.repository.js +123 -0
  143. package/server/dist/repositories/insights.repository.js +85 -0
  144. package/server/dist/repositories/library.repository.js +108 -0
  145. package/server/dist/repositories/mal-cache.repository.js +55 -0
  146. package/server/dist/repositories/manga.repository.js +138 -0
  147. package/server/dist/repositories/notifications.repository.js +41 -0
  148. package/server/dist/repositories/queue.repository.js +61 -0
  149. package/server/dist/repositories/settings.repository.js +12 -0
  150. package/server/dist/repositories/shows-meta.repository.js +42 -0
  151. package/server/dist/repositories/temp-show-ids.repository.js +51 -0
  152. package/server/dist/repositories/tv.repository.js +151 -0
  153. package/server/dist/repositories/watched-episodes.repository.js +52 -0
  154. package/server/dist/repositories/watchlist.repository.js +71 -0
  155. package/server/dist/request-logger.js +16 -0
  156. package/server/dist/routes/asmr-library.routes.js +23 -0
  157. package/server/dist/routes/asmr.routes.js +81 -0
  158. package/server/dist/routes/auth.routes.js +25 -0
  159. package/server/dist/routes/data.routes.js +47 -0
  160. package/server/dist/routes/discord-gateway.routes.js +51 -0
  161. package/server/dist/routes/insights.routes.js +34 -0
  162. package/server/dist/routes/lan-auth.routes.js +46 -0
  163. package/server/dist/routes/manga-library.routes.js +23 -0
  164. package/server/dist/routes/manga.routes.js +141 -0
  165. package/server/dist/routes/music.routes.js +20 -0
  166. package/server/dist/routes/providers.routes.js +17 -0
  167. package/server/dist/routes/proxy.routes.js +12 -0
  168. package/server/dist/routes/radio.routes.js +138 -0
  169. package/server/dist/routes/settings.routes.js +24 -0
  170. package/server/dist/routes/tracker.routes.js +164 -0
  171. package/server/dist/routes/translate.routes.js +88 -0
  172. package/server/dist/routes/tv-library.routes.js +23 -0
  173. package/server/dist/routes/tv.routes.js +629 -0
  174. package/server/dist/routes/watchlist.routes.js +341 -0
  175. package/server/dist/scripts/backfill-episode-duration.js +42 -0
  176. package/server/dist/server.js +529 -0
  177. package/server/dist/shipped-defaults.js +7 -0
  178. package/server/dist/sync-config.js +23 -0
  179. package/server/dist/sync-payload.js +91 -0
  180. package/server/dist/sync.js +1128 -0
  181. package/server/dist/utils/cache.utils.js +25 -0
  182. package/server/dist/utils/cookie.utils.js +13 -0
  183. package/server/dist/utils/db-utils.js +9 -0
  184. package/server/dist/utils/env.utils.js +77 -0
  185. package/server/dist/utils/http.utils.js +70 -0
  186. package/server/dist/utils/machine-id.js +40 -0
  187. package/server/dist/utils/megaplay.utils.js +41 -0
  188. package/server/dist/utils/request-context.js +2 -0
  189. package/server/dist/utils/security.utils.js +94 -0
  190. package/server/package.json +44 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 serifpersia
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,258 @@
1
+ <div align="center">
2
+
3
+ <img src="client/public/logo.png" alt="dango logo" width="400"/>
4
+
5
+ _A local-first anime web app focused on performance, privacy, and personal library tracking._
6
+
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-897cff?style=for-the-badge)](https://opensource.org/licenses/MIT)
8
+ ![Github stars](https://img.shields.io/github/stars/serifpersia/dango.svg?style=for-the-badge&color=897cff)
9
+ [![App version](https://img.shields.io/badge/dango-3.3.4-897cff?style=for-the-badge)](https://github.com/serifpersia/dango)
10
+
11
+ ![Users](https://dango-users-badge.ramiserifpersia.workers.dev)
12
+
13
+ [![Provider Status](https://dango-users-badge.ramiserifpersia.workers.dev/?provider=all)](https://dango-users-badge.ramiserifpersia.workers.dev/?view=status)
14
+
15
+ ![Animation](docs/showcase.webp)
16
+
17
+ </div>
18
+
19
+ ---
20
+
21
+ **dango** is a lightweight, self-hosted Node.js application built for querying anime metadata, managing personal watchlists, and logging viewing progress through a fast local interface.
22
+
23
+ ## Highlights
24
+
25
+ - **Hardware Efficient:** Engineered with a minimal footprint to run effortlessly on low-spec hardware, SBCs, and mobile environments.
26
+ - **Metadata & Discovery:** Browse trending titles, search catalog entries, and view release schedules locally.
27
+ - **Multi-Provider Playback:** Switch seamlessly between multiple third-party streaming providers directly within the player interface.
28
+ - **Watchlist Tracking:** Categorize titles (Watching, Completed, Plan to Watch) with fine-grained progress states.
29
+ - **Library Insights:** Built-in dashboard tracking viewing habits, personal stats, and completion ratios.
30
+ - **Trackers & Sync:** Bi-directional AniList sync and one-way MyAnimeList list imports.
31
+ - **Expanded Media Hub:** Dedicated interfaces for Manga, ASMR, Youtube Music, Internet Radio and TV/Movies.
32
+ - **LAN Security:** Optional LAN authentication with password enforcement for multi-device local network deployments.
33
+
34
+ ---
35
+
36
+ ## Installation
37
+
38
+ ### Prerequisites
39
+
40
+ | Requirement | Supported Version | Notes |
41
+ | :---------- | :--------------------- | :-------------------------------------------------------- |
42
+ | **Node.js** | `>= 22.12.0` | Required runtime ([Download](https://nodejs.org/)) |
43
+ | **npm** | Bundled with Node | Global install (`npm install -g @serifpersia/dango`) |
44
+ | **pnpm** | `11` (`npm i -g pnpm`) | Only needed for source development (`run.bat` / `run.sh`) |
45
+
46
+ ---
47
+
48
+ ### Quick Install (CLI)
49
+
50
+ Install the global CLI binary via npm:
51
+
52
+ ```bash
53
+ npm install -g @serifpersia/dango
54
+ ```
55
+
56
+ Launch the interface from anywhere:
57
+
58
+ ```bash
59
+ dango
60
+ ```
61
+
62
+ > [!IMPORTANT]
63
+ > Once the server initializes, navigate to `http://localhost:3000` in your browser. The background process runs locally until terminated (`Ctrl + C or q key press as well as window X button closing action`).
64
+
65
+ ---
66
+
67
+ ### Release Zip (no install)
68
+
69
+ No `npm install` needed — dependencies ship inside the zip, client is prebuilt:
70
+
71
+ 1. Download and extract `dango.zip` from [Releases](https://github.com/serifpersia/dango/releases).
72
+ 2. Install Node.js 22.12+ (`node --version` to check).
73
+ 3. Launch using `run.bat` (Windows) or `./run.sh` (Linux/macOS), then open `http://localhost:3000`.
74
+
75
+ ---
76
+
77
+ ### Android Installation
78
+
79
+ <details>
80
+ <summary><b>Option 1: Termux Environment</b></summary>
81
+
82
+ <br>
83
+
84
+ Run standard dango via Termux:
85
+
86
+ 1. Install **[Termux](https://termux.dev/)** (obtain via [F-Droid](https://f-droid.org/en/packages/com.termux/)).
87
+ 2. Update base dependencies:
88
+ ```bash
89
+ pkg update
90
+ ```
91
+ ```bash
92
+ pkg upgrade -y
93
+ ```
94
+ 3. Install Node.js:
95
+ ```bash
96
+ pkg install nodejs -y
97
+ ```
98
+ 4. Install and run dango:
99
+ ```bash
100
+ npm install -g @serifpersia/dango
101
+ dango
102
+ ```
103
+ 5. Open your mobile browser at `http://localhost:3000`.
104
+
105
+ </details>
106
+
107
+ <details>
108
+ <summary><b>Option 2: Standalone APK</b></summary>
109
+
110
+ <br>
111
+
112
+ A standalone bundle packaging Node.js, dango, and a local WebView container.
113
+
114
+ 1. Grab the latest `.apk` from [Releases](https://github.com/serifpersia/dango/releases).
115
+ 2. Install the APK (allow _Install from Unknown Sources_ when prompted).
116
+ 3. Open the app. Core runtimes auto-provision on first launch.
117
+
118
+ **Compiling from Source:**
119
+
120
+ ```bash
121
+ cd android-app
122
+ python fetch-termux-node.py
123
+
124
+ # Windows
125
+ build-debug.bat
126
+
127
+ # Linux / macOS
128
+ chmod +x build-debug.sh && ./build-debug.sh
129
+ ```
130
+
131
+ _Build requirements: Python 3, JDK 17+, Android SDK (Platform 36, Build-Tools 36.0.0)._
132
+
133
+ </details>
134
+
135
+ ---
136
+
137
+ ## Manual Setup (Development)
138
+
139
+ The project is structured as a **pnpm workspace** (`client` and `server`) managed by a unified lockfile. You need Node.js 22.12+ and pnpm 11 (`npm install -g pnpm`).
140
+
141
+ ```bash
142
+ # Clone the repository
143
+ git clone https://github.com/serifpersia/dango.git
144
+ cd dango
145
+
146
+ # Install dependencies (root + workspaces)
147
+ pnpm install
148
+
149
+ # Compile workspaces (Vite frontend + tsc backend)
150
+ pnpm run build
151
+ ```
152
+
153
+ Run via interactive environment scripts:
154
+
155
+ ```bash
156
+ # Linux / macOS
157
+ chmod +x run.sh && ./run.sh
158
+
159
+ # Windows
160
+ run.bat
161
+ ```
162
+
163
+ ### Command Reference
164
+
165
+ | Command | Action |
166
+ | :----------------------------------- | :----------------------------------------- |
167
+ | `dango` | Start the installed client daemon |
168
+ | `dango --version` | Display current installed version |
169
+ | `pnpm run dev` | Start full dev stack via `orchestrator.js` |
170
+ | `pnpm --filter dango-client run dev` | Run Vite frontend independently |
171
+ | `pnpm --filter dango-server run dev` | Run backend via `tsx watch` |
172
+ | `pnpm -r run lint` | Run ESLint passes across all packages |
173
+
174
+ ---
175
+
176
+ ## Storage & Persistence
177
+
178
+ dango stores SQLite databases, cached indices, and credentials in the OS application data registry rather than the global `node_modules` path:
179
+
180
+ | Platform | Default Path |
181
+ | :---------- | :----------------------------------------------- |
182
+ | **Windows** | `%APPDATA%\dango` |
183
+ | **macOS** | `~/Library/Application Support/dango` |
184
+ | **Linux** | `$XDG_DATA_HOME/dango` or `~/.local/share/dango` |
185
+
186
+ > [!IMPORTANT]
187
+ > Legacy installs will automatically migrate `.env` variables and SQLite records from older `server/` structures into the proper user directory on launch.
188
+
189
+ ---
190
+
191
+ ## Data Synchronization
192
+
193
+ dango is **local-first**: primary application state lives in your local SQLite store. Cloud syncing creates point-in-time JSON snapshots to maintain seamless backups across multiple installations.
194
+
195
+ ```
196
+ Sync Priority Engine:
197
+ [1] GitHub Sync ──(fallback)──> [2] Google Drive ──(fallback)──> [3] Rclone
198
+ ```
199
+
200
+ ### 1. GitHub Sync
201
+
202
+ 1. Open **Settings → Synchronization**.
203
+ 2. Click **Sign in with GitHub**.
204
+ 3. Authorize via the OAuth device code flow.
205
+
206
+ dango creates a private repository named `dango-sync-data` to read/write JSON snapshots (`sync.json` for production, `sync.dev.json` for development).
207
+
208
+ ### 2. Google Drive
209
+
210
+ 1. Open **Settings → Synchronization**.
211
+ 2. Click **Sign in with Google** and authorize permissions.
212
+
213
+ Data writes directly to a sandbox `appDataFolder` on your personal Drive. To clear backups, revoke app permissions under Google Drive's _Manage Apps_ menu.
214
+
215
+ > [!IMPORTANT]
216
+ > Advanced users can supply their own custom Github and Google OAuth Client ID & Secret in settings.
217
+
218
+ ### 3. Rclone (Third-Party Remotes)
219
+
220
+ Used as a manual fallback for services like Mega, Dropbox, or custom WebDAV:
221
+
222
+ 1. Ensure `rclone` is installed and mapped to your system `PATH`.
223
+ 2. Configure your desired target via `rclone config`.
224
+ 3. Pick your configured remote profile inside **Settings → Synchronization**.
225
+
226
+ ---
227
+
228
+ ## Tracker Integrations
229
+
230
+ ### AniList
231
+
232
+ Bidirectional sync is fully supported:
233
+
234
+ - Go to **Trackers** in the navigation panel.
235
+ - Select **Sync Now**.
236
+ - Local episode progress updates remotely; external catalog updates merge safely into your local database without overwriting uncommitted states.
237
+
238
+ ---
239
+
240
+ ## Community
241
+
242
+ Need help configuring your setup, troubleshooting builds, discussing feature requests or simply just chat about anime?
243
+
244
+ <div align="left">
245
+
246
+ [![Join Discord](https://invidget.switchblade.xyz/2FTSPXCsvn)](https://discord.gg/2FTSPXCsvn)
247
+
248
+ </div>
249
+
250
+ ---
251
+
252
+ ## Disclaimer & Legal
253
+
254
+ dango is an open-source, local-first web app. It does not host or distribute unauthorized media or copyrighted video assets. Users are solely responsible for ensuring their usage aligns with relevant local laws and digital copyright regulations.
255
+
256
+ ## License
257
+
258
+ Distributed under the terms of the [MIT License](LICENSE).
@@ -0,0 +1 @@
1
+ import{T as P,d as I,A as T,u as s,S as B,L as M,N as C}from"./vendor-core-8R2fFbyN.js";import{I as o}from"./vendor-icons-CDMuNDeL.js";import{u as D}from"./useAnimeInfoData-DeuwDSnI.js";import{d as z,s as R,e as A}from"./index-IZgh1beL.js";import{Q as x}from"./QueueOptionsButton-B6BMq66e.js";import{p as t,a as _,m as $,M as L}from"./MediaCard-Be1ST9oj.js";const k=({showId:e,anchorRect:l,onMouseEnter:m,onMouseLeave:h,onRequestClose:N})=>{const{showMeta:a,loadingMeta:r,inWatchlist:u,toggleWatchlist:f}=D(e),{titlePreference:n}=z(),d=P(()=>a?.name?n==="name"?a.name:n==="nativeName"?a.names?.native||a.name:n==="englishName"&&a.names?.english||a.name:"",[a,n]),[g,b]=I(!1),p=T(!1),y=()=>{p.current=!0,m()},w=()=>{p.current=!1,!g&&h()},c=i=>{b(i),!i&&!p.current&&h()};return s(_,{anchorRect:l,onMouseEnter:y,onMouseLeave:w,onRequestClose:N,children:r?s("div",{className:t.loading,children:[s("div",{className:t.spinner}),s("span",{children:"Fetching details..."})]}):a?s(B,{children:[s("div",{className:t.header,children:s("div",{className:t.title,children:d})}),s("div",{className:t.body,children:[s("div",{className:t.metaRow,children:[a.score&&s("div",{className:t.metaItem,children:[s(o,{name:"star",className:t.scoreIcon,size:14}),s("span",{children:a.score})]}),a.status&&s("div",{className:t.metaItem,children:[s(o,{name:"tv",size:14}),s("span",{children:a.status})]})]}),s("div",{className:t.synopsis,children:a.description?R(a.description):"No synopsis available."}),s("div",{className:t.details,children:[a.nextEpisodeAirDate&&s("div",{className:t.detailItem,children:[s("strong",{children:"Aired:"})," ",a.nextEpisodeAirDate]}),Array.isArray(a.genres)&&a.genres.length>0&&s("div",{className:t.genres,children:a.genres.filter(Boolean).slice(0,4).map(i=>{const E=typeof i=="string"?i:i?.name;return s("span",{className:t.genre,children:E},E)})})]})]}),s("div",{className:t.footer,children:[s("div",{className:t.primaryAction,children:s(M,{to:`/watch/${a?.id||e}`,className:t.watchBtn,children:[s(o,{name:"play",size:14}),"Watch now"]})}),s("div",{className:t.secondaryActions,children:[s("button",{className:`${t.watchlistBtn} ${u?t.active:""}`,onClick:i=>{i.preventDefault(),i.stopPropagation(),f()},children:[u?s(o,{name:"check",size:12}):s(o,{name:"plus",size:12}),s("span",{children:u?"Remove":"Watchlist"})]}),s(x,{showId:e,showName:a.name||a.names?.romaji,showThumbnail:a.thumbnail,nativeName:a.names?.native,englishName:a.names?.english,showType:a.type,className:t.watchlistBtn,activeClassName:t.active,align:"left",onMenuOpenChange:c}),s(M,{to:`/anime/${a?.id||e}`,className:t.detailsBtn,children:"Read more"})]})]})]}):s("div",{className:t.loading,children:"Failed to load info."})})},q=C(({anime:e,continueWatching:l=!1,onRemove:m,config:h,layout:N="vertical"})=>{const a=e.currentTime||0,r=e.duration||0,u=a>5&&r>5&&a<r*.95,f=a>0&&(r<=5||a>=r*.95),n=e.episodeNumber,d=l?{pathname:n?`/watch/${e._id}/${n}`:`/watch/${e._id}`,state:{name:e.name,thumbnail:e.thumbnail,nativeName:e.nativeName,englishName:e.englishName,type:e.type}}:n?`/watch/${e._id}/${n}`:`/anime/${e._id}`,g=(()=>{if(typeof d=="string")return d.startsWith("/watch/");const c=d.pathname;return typeof c=="string"&&c.startsWith("/watch/")})(),b=l&&n?`EP ${n}`:e.watchedCount!==void 0&&e.watchedCount>0?`EP ${e.watchedCount}`:null,p=[e.airTime,e.aired===!1&&e.nextEpisodeAirDate?`· ${e.nextEpisodeAirDate.split(",")[0]}`:""].filter(Boolean).join(" "),y=e.isAdult||e.rating==="R+"||e.rating==="Rx"||e.rating?.includes("17+"),w=s(B,{children:[(e.availableEpisodesDetail?.sub||e.availableEpisodes?.sub)&&s("div",{className:$.metaItem,children:[s(o,{name:"closed-captioning",size:10}),e.availableEpisodesDetail?.sub?.length??e.availableEpisodes?.sub]}),(e.availableEpisodesDetail?.dub||e.availableEpisodes?.dub)&&s("div",{className:$.metaItem,children:[s(o,{name:"microphone",size:10}),e.availableEpisodesDetail?.dub?.length??e.availableEpisodes?.dub]})]});return s(L,{item:{id:e.id||e.showId||e._id,title:e.name,nativeName:e.nativeName,englishName:e.englishName,thumbnail:e.thumbnail,typeBadge:e.type||"TV",chapterBadge:b,airMeta:p||void 0,isAdult:y,notAired:e.aired===!1},linkTo:d,hoverIcon:g?"play":"info",progress:u?{percent:a/r*100,label:`${A(a)} / ${A(r)}`}:f?{percent:100,label:"Watched"}:void 0,showProgress:l,metaRow:w,display:h,layout:N,onRemove:m,showRemoveButton:h?.elements?.poster?.removeButton??(l&&!!m),showInfoButton:!l,enrichedId:e._id,renderPopup:(c,v)=>s(k,{showId:e._id,anchorRect:c,onMouseEnter:v.onMouseEnter,onMouseLeave:v.onMouseLeave,onRequestClose:v.close})})});export{q as A};
@@ -0,0 +1 @@
1
+ import{n as C,a as I,d as S,h as p,T,u as e}from"./vendor-core-8R2fFbyN.js";import{I as s}from"./vendor-icons-CDMuNDeL.js";import{u as b}from"./useAnimeInfoData-DeuwDSnI.js";import{d as B,f as d,s as w,M,B as u}from"./index-IZgh1beL.js";import{u as x}from"./useMatureConsent-CT7-KfzG.js";import{A}from"./AnimeMetaDetails-BPvv5xIl.js";import{S as D}from"./SynopsisText-BcpwT5iw.js";import{Q as G}from"./QueueOptionsButton-B6BMq66e.js";import"./vendor-query-BXRECSI6.js";import"./useIsMobile-Dm_b6Ob3.js";import"./vendor-ui-CUDCvRS_.js";const P="_container_1287q_1",W="_heroSection_1287q_11",O="_bannerContainer_1287q_17",$="_banner_1287q_17",U="_bannerOverlay_1287q_37",j="_heroContent_1287q_49",z="_posterContainer_1287q_62",V="_floatIn_1287q_1",Q="_poster_1287q_62",E="_infoGlass_1287q_86",H="_slideUpIn_1287q_1",F="_title_1287q_100",J="_quickMeta_1287q_109",K="_metaItem_1287q_117",L="_iconStar_1287q_126",R="_iconTv_1287q_129",X="_iconType_1287q_132",Y="_iconClock_1287q_135",Z="_genres_1287q_139",ee="_genre_1287q_139",ne="_synopsisSection_1287q_165",te="_sectionTitleSmall_1287q_170",se="_description_1287q_178",ae="_actions_1287q_186",ie="_watchBtn_1287q_192",oe="_watchlistBtn_1287q_214",le="_active_1287q_234",ce="_detailsSection_1287q_241",re="_detailsToggleBtn_1287q_247",de="_expandedContent_1287q_270",_e="_fadeIn_1287q_1",me="_detailsGridContainer_1287q_274",he="_detailItem_1287q_284",pe="_airingValue_1287q_303",ue="_loadingDetails_1287q_308",ve="_spinner_1287q_317",ge="_spin_1287q_317",ke="_heroSkeleton_1287q_332",qe="_skeletonBanner_1287q_336",fe="_skeletonPoster_1287q_337",Ne="_skeletonTitle_1287q_338",ye="_skeletonMeta_1287q_339",Ce="_skeletonDesc_1287q_340",Ie="_skeletonActions_1287q_341",Se="_skeletonContent_1287q_374",Te="_skeletonInfo_1287q_388",n={container:P,heroSection:W,bannerContainer:O,banner:$,bannerOverlay:U,heroContent:j,posterContainer:z,floatIn:V,poster:Q,infoGlass:E,slideUpIn:H,title:F,quickMeta:J,metaItem:K,iconStar:L,iconTv:R,iconType:X,iconClock:Y,genres:Z,genre:ee,synopsisSection:ne,sectionTitleSmall:te,description:se,actions:ae,watchBtn:ie,watchlistBtn:oe,active:le,detailsSection:ce,detailsToggleBtn:re,expandedContent:de,fadeIn:_e,detailsGridContainer:me,detailItem:he,airingValue:pe,loadingDetails:ue,spinner:ve,spin:ge,heroSkeleton:ke,skeletonBanner:qe,skeletonPoster:fe,skeletonTitle:Ne,skeletonMeta:ye,skeletonDesc:Ce,skeletonActions:Ie,"skeleton-wave":"_skeleton-wave_1287q_1",skeletonContent:Se,skeletonInfo:Te};function $e(){const{id:a}=C(),i=I(),{titlePreference:l}=B(),[o,v]=S(!1),{showMeta:t,loadingMeta:g,toggleWatchlist:k,inWatchlist:c}=b(a),{hasConsent:q,grant:f}=x();p(()=>{a&&t?.id&&t.id!==a&&i(`/anime/${t.id}`,{replace:!0})},[a,t,i]),p(()=>{document.title=t?.name?`${t.name} - dango`:"Anime - dango"},[t?.name]);const N=()=>t?.name?l==="name"?t.name:l==="nativeName"?t.names?.native||t.name:l==="englishName"&&t.names?.english||t.name:"",y=()=>{a&&i(`/watch/${a}`)},_=T(()=>t?.bannerImage?d(t.bannerImage):t?.thumbnail?d(t.thumbnail,1200,450):"",[t?.bannerImage,t?.thumbnail]);if(g||!t?.name)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})]})]})]})});const m=t.isAdult===!0&&!q;return e("div",{className:n.container,style:m?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:[e("div",{className:n.heroSection,children:[e("div",{className:n.bannerContainer,children:[e("div",{className:n.banner,style:_?{backgroundImage:`url(${_})`}:void 0}),e("div",{className:n.bannerOverlay})]}),e("div",{className:n.heroContent,children:[e("div",{className:n.posterContainer,children:e("img",{src:d(t.thumbnail||"",320,480),alt:t.name,className:n.poster,decoding:"async"})}),e("div",{className:n.infoGlass,children:[e("div",{className:n.topInfo,children:[e("h1",{className:n.title,children:N()}),e("div",{className:n.quickMeta,children:[t.score&&e("div",{className:n.metaItem,children:[e(s,{name:"star",className:n.iconStar}),e("span",{children:t.score})]}),t.status&&e("div",{className:n.metaItem,children:[e(s,{name:"tv",className:n.iconTv}),e("span",{children:t.status})]}),t.type&&e("div",{className:n.metaItem,children:[e(s,{name:"layer-group",className:n.iconType}),e("span",{children:t.type})]})]}),Array.isArray(t.genres)&&t.genres.length>0&&e("div",{className:n.genres,children:t.genres.filter(Boolean).slice(0,5).map(r=>{const h=typeof r=="string"?r:r?.name;return e("span",{className:n.genre,children:h},h)})})]}),e("div",{className:n.synopsisSection,children:[e("h2",{className:n.sectionTitleSmall,children:"Synopsis"}),e(D,{text:w(t.description),emptyText:"No description available."})]}),e("div",{className:n.actions,children:[e("button",{className:n.watchBtn,onClick:y,children:[e(s,{name:"play",size:14}),"Start Watching"]}),e("button",{className:`${n.watchlistBtn} ${c?n.active:""}`,onClick:k,children:[c?e(s,{name:"check",size:14}):e(s,{name:"plus",size:14}),c?"In Watchlist":"Add to Watchlist"]}),e(G,{showId:a,showName:t.name||t.names?.romaji,showThumbnail:t.thumbnail,nativeName:t.names?.native,englishName:t.names?.english,showType:t.type,className:n.watchlistBtn,activeClassName:n.active})]})]})]})]}),e("div",{className:n.detailsSection,children:[e("button",{className:n.detailsToggleBtn,onClick:()=>{v(!o)},children:[o?e(s,{name:"chevron-up"}):e(s,{name:"chevron-down"}),o?"Hide Details":"Show Details"]}),o&&e("div",{className:n.expandedContent,children:e(A,{showMeta:t,styles:n})})]}),m&&e(M,{isOpen:!0,title:"Content Warning",onClose:()=>i("/"),children:e("div",{style:{padding:"1rem",textAlign:"center"},children:[e("p",{children:"This title contains mature content intended for adult audiences."}),e("p",{children:["By proceeding, you confirm that you are ",e("strong",{children:"18 years of age or older"})," (or the age of majority in your jurisdiction) and wish to view this content."]}),e("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[e(u,{variant:"secondary",onClick:()=>i("/"),children:"Go Back"}),e(u,{onClick:f,children:"I'm 18+, Continue"})]})]})})]})}export{$e as default};
@@ -0,0 +1 @@
1
+ ._container_1287q_1{max-width:var(--max-width);margin:0 auto;padding:0;min-height:100vh;background:var(--bg-main);overflow-x:hidden}._heroSection_1287q_11{position:relative;width:100%;padding-bottom:var(--space-12)}._bannerContainer_1287q_17{position:absolute;top:0;left:0;right:0;height:500px;overflow:hidden;z-index:0}._banner_1287q_17{width:100%;height:100%;background-size:cover;background-position:center 20%;filter:brightness(.3) saturate(1.1);transform:scale(1.05);transition:transform var(--transition-slow)}._bannerOverlay_1287q_37{position:absolute;inset:0;background:linear-gradient(to bottom,rgba(5,5,5,.4) 0%,rgba(5,5,5,.7) 40%,var(--bg-main) 100%);box-shadow:inset 0 -100px 100px -20px var(--bg-main)}._heroContent_1287q_49{position:relative;z-index:1;display:grid;grid-template-columns:320px 1fr;gap:var(--space-10);max-width:1200px;margin:0 auto;padding:var(--space-16) var(--space-6) 0;align-items:flex-start}._posterContainer_1287q_62{position:sticky;top:120px;border-radius:var(--radius-lg);overflow:hidden;box-shadow:0 20px 50px #00000080;transform:translateY(0);animation:_floatIn_1287q_1 .8s var(--ease-spring);border:1px solid var(--border-secondary)}._poster_1287q_62{width:100%;display:block;object-fit:cover;aspect-ratio:2 / 3;transition:transform var(--transition-base)}._posterContainer_1287q_62:hover ._poster_1287q_62{transform:scale(1.05)}._infoGlass_1287q_86{background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);border-radius:var(--radius-xl);padding:var(--space-8);box-shadow:var(--glass-shadow);animation:_slideUpIn_1287q_1 .8s var(--ease-smooth);display:flex;flex-direction:column;gap:var(--space-8)}._title_1287q_100{font-size:clamp(1.5rem,4vw,2.5rem);font-weight:800;color:var(--text-primary);line-height:1.1;margin:0 0 var(--space-4);letter-spacing:-.02em}._quickMeta_1287q_109{display:flex;flex-wrap:wrap;gap:var(--space-6);align-items:center;margin-bottom:var(--space-2)}._metaItem_1287q_117{display:flex;align-items:center;gap:var(--space-2);color:var(--text-secondary);font-size:var(--font-size-sm);font-weight:500}._iconStar_1287q_126{color:var(--accent-lighter)}._iconTv_1287q_129{color:var(--accent)}._iconType_1287q_132{color:var(--color-success)}._iconClock_1287q_135{color:#60a5fa}._genres_1287q_139{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-top:var(--space-4)}._genre_1287q_139{background:#ffffff0d;padding:.4rem 1rem;border-radius:var(--radius-full);font-size:var(--font-size-sm);color:var(--text-secondary);border:1px solid var(--border-primary);transition:all var(--transition-fast);font-weight:500}._genre_1287q_139:hover{background:var(--accent);border-color:var(--accent);color:var(--accent-text);transform:translateY(-2px)}._synopsisSection_1287q_165{border-top:1px solid var(--border-primary);padding-top:var(--space-6)}._sectionTitleSmall_1287q_170{font-size:var(--font-size-sm);text-transform:uppercase;letter-spacing:.1em;color:var(--text-tertiary);margin-bottom:var(--space-3)}._description_1287q_178{font-size:var(--font-size-base);color:var(--text-secondary);line-height:1.7;max-width:800px}._actions_1287q_186{display:flex;gap:var(--space-4);margin-top:auto}._watchBtn_1287q_192{display:inline-flex;align-items:center;gap:var(--space-3);background:linear-gradient(135deg,var(--accent) 0%,var(--accent-dark) 100%);color:var(--accent-text);padding:.8rem 1.8rem;border-radius:var(--radius-md);font-weight:600;font-size:var(--font-size-sm);border:none;cursor:pointer;transition:all var(--transition-base);box-shadow:0 4px 15px var(--accent-glow)}._watchBtn_1287q_192:hover{transform:translateY(-2px);box-shadow:0 8px 25px var(--accent-glow);opacity:.95}._watchlistBtn_1287q_214{display:inline-flex;align-items:center;gap:var(--space-3);background:#ffffff0d;color:var(--text-primary);border:1px solid var(--border-secondary);padding:.8rem 1.8rem;border-radius:var(--radius-md);font-weight:600;font-size:var(--font-size-sm);cursor:pointer;transition:all var(--transition-base)}._watchlistBtn_1287q_214:hover{background:#ffffff1a;border-color:var(--text-secondary)}._watchlistBtn_1287q_214._active_1287q_234{background:color-mix(in srgb,var(--color-success) 10%,transparent);border-color:var(--color-success);color:var(--color-success)}._detailsSection_1287q_241{max-width:1200px;margin:0 auto var(--space-16);padding:0 var(--space-6)}._detailsToggleBtn_1287q_247{display:flex;align-items:center;justify-content:center;gap:var(--space-3);width:100%;padding:var(--space-4);background:var(--bg-secondary);color:var(--text-secondary);border:1px solid var(--border-primary);border-radius:var(--radius-lg);font-weight:600;cursor:pointer;transition:all var(--transition-base);margin-bottom:var(--space-6)}._detailsToggleBtn_1287q_247:hover{background:var(--bg-tertiary);color:var(--text-primary);border-color:var(--border-secondary)}._expandedContent_1287q_270{animation:_fadeIn_1287q_1 .5s var(--ease-smooth)}._detailsGridContainer_1287q_274{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:var(--space-6);padding:var(--space-8);background:var(--bg-secondary);border-radius:var(--radius-xl);border:1px solid var(--border-primary)}._detailItem_1287q_284{display:flex;flex-direction:column;gap:var(--space-1)}._detailItem_1287q_284 strong{font-size:.7rem;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.1em}._detailItem_1287q_284 span{font-size:var(--font-size-sm);color:var(--text-primary);font-weight:500}._airingValue_1287q_303{color:var(--accent-light)!important}._loadingDetails_1287q_308{display:flex;flex-direction:column;align-items:center;gap:var(--space-4);padding:var(--space-12);color:var(--text-tertiary)}._spinner_1287q_317{width:30px;height:30px;border:3px solid rgba(255,255,255,.1);border-top-color:var(--accent);border-radius:50%;animation:_spin_1287q_317 .8s linear infinite}@keyframes _spin_1287q_317{to{transform:rotate(360deg)}}._heroSkeleton_1287q_332{width:100%}._skeletonBanner_1287q_336,._skeletonPoster_1287q_337,._skeletonTitle_1287q_338,._skeletonMeta_1287q_339,._skeletonDesc_1287q_340,._skeletonActions_1287q_341{position:relative;overflow:hidden;background:var(--bg-tertiary)}._skeletonBanner_1287q_336:after,._skeletonPoster_1287q_337:after,._skeletonTitle_1287q_338:after,._skeletonMeta_1287q_339:after,._skeletonDesc_1287q_340:after,._skeletonActions_1287q_341:after{content:"";position:absolute;inset:0;transform:translate(-100%);background-image:linear-gradient(90deg,#fff0 0,#ffffff0d 20%,#ffffff1f 60%,#fff0);animation:_skeleton-wave_1287q_1 1.8s infinite ease-in-out}._skeletonBanner_1287q_336{height:400px}._skeletonContent_1287q_374{max-width:1200px;margin:-100px auto 0;padding:0 var(--space-6);display:grid;grid-template-columns:320px 1fr;gap:var(--space-10)}._skeletonPoster_1287q_337{height:480px;border-radius:var(--radius-lg)}._skeletonInfo_1287q_388{background:var(--bg-secondary);border-radius:var(--radius-xl);padding:var(--space-8);display:flex;flex-direction:column;gap:var(--space-6)}._skeletonTitle_1287q_338{height:40px;width:60%;border-radius:var(--radius-sm)}._skeletonMeta_1287q_339{height:24px;width:40%;border-radius:var(--radius-sm)}._skeletonDesc_1287q_340{height:160px;width:100%;border-radius:var(--radius-sm)}._skeletonActions_1287q_341{height:50px;width:50%;border-radius:var(--radius-sm)}@keyframes _floatIn_1287q_1{0%{opacity:0;transform:translateY(30px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes _slideUpIn_1287q_1{0%{opacity:0;transform:translateY(50px)}to{opacity:1;transform:translateY(0)}}@keyframes _fadeIn_1287q_1{0%{opacity:0}to{opacity:1}}@media(max-width:1024px){._heroContent_1287q_49{grid-template-columns:1fr;padding-top:var(--space-12)}._posterContainer_1287q_62{width:220px;margin:0 auto;position:relative;top:0}._infoGlass_1287q_86{margin-top:-40px;padding-top:var(--space-12);text-align:center}._quickMeta_1287q_109,._genres_1287q_139{justify-content:center}._actions_1287q_186{flex-direction:column}._watchBtn_1287q_192,._watchlistBtn_1287q_214{width:100%;justify-content:center}._skeletonContent_1287q_374{grid-template-columns:1fr}._skeletonPoster_1287q_337{width:220px;height:330px;margin:0 auto}}@media(max-width:768px){._heroSection_1287q_11{padding-bottom:var(--space-8)}._heroContent_1287q_49{grid-template-columns:1fr;gap:var(--space-6);padding:var(--space-12) var(--space-4) 0}._posterContainer_1287q_62{position:relative;top:0;max-width:240px;margin:0 auto;margin-bottom:var(--space-4);animation:none}._infoGlass_1287q_86{padding:var(--space-6);animation:none}}@media(max-width:480px){._infoGlass_1287q_86{padding:var(--space-6);animation:none}._title_1287q_100{font-size:1.5rem}._quickMeta_1287q_109{gap:var(--space-3)}._metaItem_1287q_117 span{font-size:.75rem}}
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AnimeInfo-0huPAq0O.js","assets/vendor-core-8R2fFbyN.js","assets/vendor-icons-CDMuNDeL.js","assets/useAnimeInfoData-DeuwDSnI.js","assets/vendor-query-BXRECSI6.js","assets/index-IZgh1beL.js","assets/index-CUm1meqr.css","assets/QueueOptionsButton-B6BMq66e.js","assets/vendor-ui-CUDCvRS_.js","assets/QueueOptionsButton-CM15uQn8.css","assets/useMatureConsent-CT7-KfzG.js","assets/AnimeMetaDetails-BPvv5xIl.js","assets/AnimeMetaDetails-BwNQnRCd.css","assets/SynopsisText-BcpwT5iw.js","assets/useIsMobile-Dm_b6Ob3.js","assets/SynopsisText-CYv2W3yR.css","assets/AnimeInfo-BFWtHlPC.css"])))=>i.map(i=>d[i]);
2
+ import{Y as r,_ as t}from"./index-IZgh1beL.js";import{u as o,P as e,z as i}from"./vendor-core-8R2fFbyN.js";import"./vendor-query-BXRECSI6.js";import"./vendor-icons-CDMuNDeL.js";const a=i(()=>t(()=>import("./AnimeInfo-0huPAq0O.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])));function p(){return o(e,{fallback:o(r,{}),children:o(a,{})})}export{p as default};
@@ -0,0 +1 @@
1
+ import{u as a}from"./vendor-core-8R2fFbyN.js";const s={JP:"Japan",KR:"Korea",CN:"China",CH:"China"},l=n=>{if(typeof n=="number"&&Number.isFinite(n))return n;if(typeof n=="string"&&n.trim()!==""){const t=Number(n);if(Number.isFinite(t))return t}return null},m=n=>l(n?.year)!==null&&l(n?.month)!==null&&l(n?.date)!==null,u=n=>{const t=l(n?.year);if(t===null)return null;const e=l(n?.month),r=l(n?.date);return e!==null&&r!==null?new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric",timeZone:"UTC"}).format(new Date(Date.UTC(t,e,r))):e!==null?new Intl.DateTimeFormat("en-US",{month:"short",year:"numeric",timeZone:"UTC"}).format(new Date(Date.UTC(t,e,1))):String(t)},c=(n,t,e)=>{const r=u(n),i=m(t)?u(t):null;return r&&i?`${r} - ${i}`:r&&e?.toLowerCase()==="releasing"?`${r} - TBA`:r||i},d=n=>{const t=[n.availableEpisodesDetail?.sub?.length,n.availableEpisodesDetail?.dub?.length,n.availableEpisodesDetail?.raw?.length].filter(o=>typeof o=="number"),e=[n.availableEpisodes?.sub,n.availableEpisodes?.dub,n.availableEpisodes?.raw].map(l).filter(o=>o!==null),r=Math.max(0,...t,...e),i=l(n.episodeCount);return r>0&&i!==null?`${r}/${i}`:r>0?String(r):i!==null?String(i):null},f=n=>{const t=l(n.score);if(t!==null)return String(t);const e=l(n.averageScore??n.stats?.averageScore);return e!==null?(e/10).toFixed(1):null},p=n=>n?s[n]||n:null,g=n=>n&&[n.quarter||n.season||n.title,n.year].filter(Boolean).join(" ")||null,C=n=>n?.length?n.map(t=>typeof t=="string"?t:t.name).filter(Boolean).join(", "):null,b=n=>n?[["Status",n.status],["Score",f(n)],["Type",n.type],["Country",p(n.country)],["Season",g(n.season)],["Rating",n.rating],["Studios",C(n.studios)],["Aired",c(n.airedStart,n.airedEnd,n.status)],["Episodes",d(n)]].filter(e=>typeof e[1]=="string"&&e[1].trim()!=="").map(([e,r])=>({label:e,value:r})):[],S="_detailsGridContainer_1kd9p_1",y="_detailItem_1kd9p_7",D={detailsGridContainer:S,detailItem:y};function v({showMeta:n,styles:t}){const e=t??D,r=b(n);return a("div",{className:e.detailsGridContainer,children:r.map(i=>a("div",{className:e.detailItem,children:[a("strong",{children:i.label}),a("span",{children:i.value})]},i.label))})}export{v as A};
@@ -0,0 +1 @@
1
+ ._detailsGridContainer_1kd9p_1{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--space-4)}._detailItem_1kd9p_7{display:flex;flex-direction:column;gap:var(--space-1)}
@@ -0,0 +1,2 @@
1
+ import{T as We,u as e,A as _,d as h,h as C,a as Ke,g as $e,q as W,S as O,$ as qe,n as ft,o as bt}from"./vendor-core-8R2fFbyN.js";import{I as y}from"./vendor-icons-CDMuNDeL.js";import{u as vt}from"./vendor-query-BXRECSI6.js";import{e as me,B as he,M as xe,R,z as oe,U as yt,T as Ve}from"./index-IZgh1beL.js";import{M as kt}from"./MediaCard-Be1ST9oj.js";import{c as Ge,a as Qe,d as wt,e as Ze,f as Xe,g as Nt,h as Ct,i as St,j as Tt,k as ze,l as Re}from"./useAsmr-CbMVRjmV.js";import{a as t}from"./Asmr.module-ChUXDZKx.js";import{u as At,A as Mt}from"./useAsmrPopup-D91Q3CBg.js";import{l as xt}from"./hls-C4cG9wQw.js";import"./vendor-ui-CUDCvRS_.js";import"./useIsMobile-Dm_b6Ob3.js";const Bt=({work:s,onClose:o,onPlay:k,t:v})=>{const{data:c,isLoading:d}=Ge(s.id||null),f=Qe(s),{data:A}=wt(f||void 0),{toggle:w,bookmarkedIds:T}=Ze(),{data:I}=Xe(f||void 0),L=f?T.has(f):!!A?.inLibrary,S=We(()=>(c?.description||s.description||"").split(`
2
+ `).map(l=>{const m=l.indexOf(":");return m===-1?null:{label:l.slice(0,m),value:l.slice(m+1).trim()}}).filter(l=>!!l&&!!l.value),[c?.description,s.description]),g=c?.tracks||[],N=We(()=>{const l=I?.progress??[];return l.length>0?l.reduce((m,u)=>m.updatedAt>=u.updatedAt?m:u):null},[I]),M=N&&N.trackIndex<g.length?N.trackIndex:null;return e("div",{className:t.detailOverlay,onClick:o,children:e("div",{className:t.detailModal,onClick:l=>l.stopPropagation(),children:[e("button",{className:t.detailClose,onClick:o,"aria-label":"Close",children:e(y,{name:"times"})}),e("div",{className:t.detailHeader,children:[s.thumbnail?e("img",{className:t.detailCover,src:s.thumbnail,alt:s.name,decoding:"async"}):e("div",{className:`${t.detailCover} ${t.thumbPlaceholder}`}),e("div",{className:t.detailInfo,children:[e("h2",{className:t.detailTitle,children:v?v(s.name):s.name}),e("p",{className:t.detailRj,children:s.id}),S.map(l=>l.label==="Tags"?e("p",{className:t.metaRow,children:[e("span",{className:t.metaLabel,children:"Tags"}),e("span",{className:t.tagChips,children:l.value.split(", ").map(m=>e("span",{className:t.tagChip,children:m},m))})]},l.label):e("p",{className:t.metaRow,children:[e("span",{className:t.metaLabel,children:l.label}),l.value]},l.label))]})]}),e("div",{className:t.tracksSection,children:[e("h3",{className:t.tracksHeading,children:d?"Loading tracks…":`Tracks (${g.length})`}),!d&&(g.length>0?e("ul",{className:t.trackList,children:g.map((l,m)=>e("li",{children:e("button",{className:t.trackRow,onClick:()=>k(s,g,m),children:[e(y,{name:"play",className:t.trackIcon}),e("span",{className:t.trackLabel,children:l.resolutionStr}),e("span",{className:t.trackType,children:l.hls?"HLS":"MP3"})]})},l.link))}):e("p",{className:t.noTracks,children:"No audio streams available for this work."}))]}),e("div",{className:t.detailActions,children:[!d&&g.length>0&&e("button",{className:t.playAllBtn,onClick:()=>k(s,g,0),children:[e(y,{name:"play"})," Play from start"]}),!d&&M!==null&&N&&e("button",{className:t.playAllBtn,onClick:()=>k(s,g,M),children:[e(y,{name:"history"})," Resume track ",M+1," ·"," ",me(N.currentTime),N.duration>0?` / ${me(N.duration)}`:""]}),f&&e("button",{className:t.playAllBtn,onClick:()=>w({rjCode:f,title:s.name,thumbnail:s.thumbnail||"",isAdult:!!s.isAdult}),"aria-pressed":L,children:[e(y,{name:L?"check":"plus"})," ",L?"In listening list":"Add to listening list"]})]})]})})},Lt=({title:s,images:o,chapters:k,tracks:v,trackIndex:c,expanded:d,isAdult:f,rjCode:A,t:w,onTrackChange:T,onExpandedChange:I,onClose:L})=>{const S=_(null),g=_(null),[N,M]=h(!1),[l,m]=h(0),[u,P]=h(0),[p,U]=h(0),[B,Y]=h(!0),[D,j]=h(0),[ae,ie]=h(new Set),[q,ne]=h(!1),[pe,$]=h(!0),re=_("");re.current||(re.current=typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():`asmr-${Date.now()}-${Math.random().toString(36).slice(2)}`);const[F,Ne]=h(()=>{const a=parseFloat(localStorage.getItem("asmrVolume")||"");return Number.isFinite(a)?a:1}),ge=_(F);C(()=>{ge.current=F},[F]);const fe=Ke(),V=$e.useMemo(()=>A?Nt(A):"",[A]),Ce=Ct(),ce=St(),{data:Se}=Xe(V||void 0),[Be,be]=h(!1),[H,Le]=h(0),[Pe,G]=h(!1),ve=_(""),J=_(null),K=_(0),Q=_(0),de=_(0),Z=v[c],X=Z?.link,Te=Z?.hls,n=Z?.resolutionStr||"",i=o.length>0,x=`${V}:${c}`,se=$e.useMemo(()=>(Se?.progress??[]).find(r=>r.trackIndex===c)??null,[Se,c]),ee=_({workId:"",trackIndex:0,trackLabel:""});ee.current={workId:V,trackIndex:c,trackLabel:n};const le=W((a,r,b,E=!1)=>{!a.workId||!b||b<10||!E&&Math.abs(r-K.current)<5||(K.current=r,Ce.mutate({workId:a.workId,trackIndex:a.trackIndex,trackLabel:a.trackLabel,currentTime:Math.floor(r),duration:Math.floor(b),title:s,thumbnail:o[0]||"",rjCode:a.workId,isAdult:f?1:0}))},[Ce,s,o,f]),z=W((a=!1)=>{J.current&&(clearTimeout(J.current),J.current=null),le(ee.current,Q.current,de.current,a)},[le]),ye=_(z);ye.current=z;const Ee=_(le);Ee.current=le;const ue=W(()=>{g.current&&(g.current.destroy(),g.current=null)},[]);C(()=>{const a=S.current;if(!a||!X)return;const r={workId:V,trackIndex:c,trackLabel:n},b=()=>{J.current&&(clearTimeout(J.current),J.current=null),Ee.current(r,Q.current,de.current,!0)};if(m(0),P(0),U(0),M(!1),Q.current=0,de.current=0,K.current=0,ue(),Te){let E=!1;return(async()=>{const te=await xt();if(!E)if(te&&te.isSupported()){const we=new te({enableWorker:!0});g.current=we,we.loadSource(X),we.attachMedia(a),a.play().catch(()=>M(!1))}else a.src=X,a.load(),a.volume=ge.current,a.play().catch(()=>M(!1))})(),()=>{E=!0,ue(),a.removeAttribute("src"),b()}}else a.src=X;return a.load(),a.volume=ge.current,a.play().catch(()=>M(!1)),()=>{ue(),a.removeAttribute("src"),b()}},[X,Te,ue,V,c,n]),C(()=>()=>ue(),[ue]),C(()=>{const a=()=>{document.visibilityState==="hidden"&&ye.current()},r=()=>ye.current();return document.addEventListener("visibilitychange",a),window.addEventListener("pagehide",r),()=>{document.removeEventListener("visibilitychange",a),window.removeEventListener("pagehide",r)}},[]),C(()=>{if(!se||ve.current===x||!(u>0))return;const a=se.currentTime||0,r=se.duration||u;a>=10&&r-a>=15&&Q.current<a?(ve.current=x,Le(a),be(!0)):ve.current=x},[se,u,x]),C(()=>{const a=S.current;a&&(a.volume=F)},[F]),C(()=>{if(d)return document.body.classList.add("asmr-player-open"),()=>document.body.classList.remove("asmr-player-open")},[d]),C(()=>{j(0)},[o]),C(()=>{d&&$(!0)},[d]),C(()=>{q&&$(!0)},[q]);const Ae=W(a=>{if(!s||v.length===0)return;const r=v[c],b=r?`${r.resolutionStr} (${c+1}/${v.length})`:"",E=S.current,te=E?E.currentTime:0,we=E&&E.duration||0,gt=o[0]||"";fetch("/api/discord/asmr",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:s,trackLabel:b,isPlaying:a,thumbnail:gt,thumbnails:o,currentTime:te,duration:we,isAdult:!!f,rjCode:A||"",sessionId:re.current})}).catch(()=>{}),fetch("/api/discord/heartbeat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:re.current})}).catch(()=>{})},[s,v,c,o,f,A]);C(()=>{Ae(N)},[Ae,N,c,s,d]),C(()=>{if(!N)return;const a=window.setInterval(()=>Ae(!0),15e3);return()=>window.clearInterval(a)},[N,Ae]),C(()=>{const a=re.current,r=()=>{if(!a)return;const te=JSON.stringify({sessionId:a});navigator.sendBeacon?(navigator.sendBeacon("/api/discord/clear",new Blob([te],{type:"application/json"})),navigator.sendBeacon("/api/discord/heartbeat",new Blob([JSON.stringify({sessionId:a,bye:!0})],{type:"application/json"}))):(fetch("/api/discord/clear",{method:"POST",headers:{"Content-Type":"application/json"},body:te,keepalive:!0}).catch(()=>{}),fetch("/api/discord/heartbeat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:a,bye:!0}),keepalive:!0}).catch(()=>{}))},b=()=>r(),E=()=>{document.visibilityState==="hidden"&&r()};return window.addEventListener("pagehide",b),window.addEventListener("beforeunload",b),document.addEventListener("visibilitychange",E),()=>{window.removeEventListener("pagehide",b),window.removeEventListener("beforeunload",b),document.removeEventListener("visibilitychange",E),r()}},[]);const Me=W(a=>{ie(r=>{if(r.has(a))return r;const b=new Set(r);return b.add(a),b})},[]),tt=W((a,r)=>{a&&a.complete&&a.naturalWidth>0&&Me(r)},[Me]);C(()=>{if(!d)return;const a=r=>{if(r.key==="Escape"){q?ne(!1):I(!1);return}!B||o.length<2||(r.key==="ArrowLeft"&&j(b=>Math.max(0,b-1)),r.key==="ArrowRight"&&j(b=>Math.min(o.length-1,b+1)))};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[d,B,o.length,q,I]);const at=()=>{const a=S.current;a&&(a.paused?a.play().catch(()=>{}):a.pause())},nt=a=>{const r=S.current;if(!r||!u)return;const b=parseFloat(a.target.value);r.currentTime=b,m(b)},rt=()=>{z(!0),c<v.length-1?T(c+1):G(!0)},st=a=>{const r=a.currentTarget.currentTime;Q.current=r,m(r),J.current&&clearTimeout(J.current),J.current=setTimeout(()=>ye.current(),5e3)},lt=()=>{M(!1),ye.current()},ot=a=>{const r=a.currentTarget.duration;de.current=Number.isFinite(r)?r:0,P(a.currentTarget.duration)},it=W(()=>{const a=S.current;a&&H>0&&(a.currentTime=H,Q.current=H,a.play().catch(()=>{})),be(!1)},[H]),je=W(()=>{be(!1)},[]),ct=W(()=>{V&&ce.mutate({rjCode:V,title:s,thumbnail:o[0]||"",status:"Completed",isAdult:!!f,silent:!0}),G(!1),L(),fe("/")},[V,ce,s,o,f,L,fe]),dt=k.reduce((a,r,b)=>l>=r.time?b:a,-1),ut=a=>{const r=S.current;r&&(r.currentTime=a,m(a))},_e=a=>{const r=S.current;if(!r)return;const b=Number.isFinite(r.currentTime)?r.currentTime:l,E=Math.max(0,Math.min(u||1/0,b+a));r.currentTime=E,m(E),$(!0)},Oe=u?Math.min(100,l/u*100):0,mt=u?Math.min(100,Math.max(Oe,p/u*100)):0,ht=e(O,{children:[e("div",{className:t.playerButtons,children:[e("button",{className:t.playerBtn,onClick:()=>T(Math.max(0,c-1)),disabled:c===0,"aria-label":"Previous track",children:e(y,{name:"step-backward"})}),e("button",{className:`${t.playerBtn} ${t.seekBtn}`,onClick:()=>_e(-10),"aria-label":"Seek back 10 seconds",title:"Back 10s",children:[e(y,{name:"undo"}),e("span",{className:t.seekBtnLabel,children:"10"})]}),e("button",{className:`${t.playerBtn} ${t.playBtn}`,onClick:at,"aria-label":N?"Pause":"Play",children:N?e(y,{name:"pause"}):e(y,{name:"play"})}),e("button",{className:`${t.playerBtn} ${t.seekBtn}`,onClick:()=>_e(10),"aria-label":"Seek forward 10 seconds",title:"Forward 10s",children:[e(y,{name:"redo"}),e("span",{className:t.seekBtnLabel,children:"10"})]}),e("button",{className:t.playerBtn,onClick:()=>T(Math.min(v.length-1,c+1)),disabled:c>=v.length-1,"aria-label":"Next track",children:e(y,{name:"step-forward"})})]}),e("div",{className:t.seekRow,children:[e("span",{className:t.timeLabel,children:me(l)}),e("input",{className:t.seekBar,type:"range",min:0,max:u||0,step:.1,value:Math.min(l,u||0),onChange:nt,style:{"--played-percent":`${Oe}%`,"--buffered-percent":`${mt}%`},"aria-label":"Seek"}),e("span",{className:t.timeLabel,children:me(u)})]})]}),Fe=e(O,{children:[e("button",{className:`${t.playerBtn} ${t.playerToggle}`,onClick:()=>I(!d),"aria-label":d?"Minimize player":"Expand player",title:d?"Minimize to browse":"Expand",children:d?e(y,{name:"chevron-down"}):e(y,{name:"chevron-up"})}),e("div",{className:t.playerInfo,children:[e("p",{className:t.playerTitle,title:s,children:w?w(s):s}),e("p",{className:t.playerTrack,children:[Z?.resolutionStr||"",v.length>1?` (${c+1}/${v.length})`:""]})]}),e("div",{className:t.playerControls,children:ht}),e("div",{className:t.playerRight,children:[F===0?e(y,{name:"volume-mute",className:t.volumeIcon}):F<.5?e(y,{name:"volume-down",className:t.volumeIcon}):e(y,{name:"volume-up",className:t.volumeIcon}),e("input",{className:t.volumeBar,type:"range",min:0,max:1,step:.01,value:F,onChange:a=>{const r=parseFloat(a.target.value);Ne(r),localStorage.setItem("asmrVolume",String(r))},style:{"--volume-percent":`${F*100}%`},"aria-label":"Volume"})]}),e("div",{className:t.playerActions,children:[d&&i&&e("button",{className:t.playerBtn,onClick:()=>Y(a=>!a),"aria-label":B?"Hide images":"Show images",title:B?"Hide images":"Show images",children:B?e(y,{name:"eye-slash"}):e(y,{name:"image"})}),d&&k.length>0&&e("button",{className:`${t.playerBtn} ${q?t.playerBtnActive:""}`,onClick:()=>ne(a=>!a),"aria-label":q?"Hide bookmarks":"Show bookmarks",title:"Timestamps",children:e(y,{name:"list-ol"})}),e("button",{className:t.playerBtn,onClick:L,"aria-label":"Close player",children:e(y,{name:"times"})})]})]}),He=e("audio",{ref:S,preload:"metadata",onPlay:()=>M(!0),onPause:lt,onTimeUpdate:st,onLoadedMetadata:ot,onProgress:a=>{const r=a.currentTarget;r.buffered.length>0&&U(r.buffered.end(r.buffered.length-1))},onEnded:rt}),Ue=e(xe,{isOpen:Be,onClose:je,title:"Resume Listening",children:e("div",{style:{padding:"1rem",textAlign:"center"},children:[e("p",{children:["You were at ",e("strong",{children:me(H)}),Z?.resolutionStr?` in ${Z.resolutionStr}`:""]}),e("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[e(he,{variant:"secondary",onClick:je,children:"Start from Beginning"}),e(he,{onClick:it,children:"Resume"})]})]})}),De=e(xe,{isOpen:Pe,onClose:()=>G(!1),title:"Finished!",children:e("div",{style:{padding:"1rem",textAlign:"center"},children:[e(y,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)",marginBottom:"0.5rem"}}),e("p",{style:{fontSize:"1.1rem",fontWeight:600},children:w?w(s):s}),e("p",{style:{color:"var(--text-secondary)"},children:"You finished this work!"}),e("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[e(he,{variant:"secondary",onClick:()=>G(!1),children:"Close"}),e(he,{onClick:ct,children:"Mark Completed & Back to Home"})]})]})});if(!d)return qe(e(O,{children:[He,e("div",{className:t.playerBar,children:Fe}),Ue,De]}),document.body);const ke=Math.min(D,Math.max(0,o.length-1)),Je=o[ke],pt=B&&i&&!!Je&&!ae.has(Je);return qe(e(O,{children:[He,Ue,De,e("div",{className:`${t.npOverlay} ${pe?"":t.npOverlayControlsHidden}`,children:[e("div",{className:`${t.npStage} ${!B||!i?t.npStageBlank:""}`,onClick:()=>$(a=>!a),children:B&&i&&e(O,{children:[e("div",{className:t.sliderViewport,children:[e("div",{className:t.sliderTrack,style:{transform:`translateX(-${ke*100}%)`},children:o.map(a=>e("div",{className:t.slide,children:e("img",{ref:r=>tt(r,a),src:a,alt:`${w?w(s):s} — work image`,loading:"lazy",decoding:"async",draggable:!1,onLoad:()=>Me(a),onError:()=>Me(a),className:`${t.slideImg} ${ae.has(a)?t.slideImgLoaded:""}`})},a))}),pt&&e("span",{className:t.slideSpinner,"aria-label":"Loading image"})]}),o.length>1&&e(O,{children:[e("button",{className:`${t.npArrow} ${t.npArrowLeft}`,onClick:a=>{a.stopPropagation(),j(r=>Math.max(0,r-1)),$(!0)},disabled:ke===0,"aria-label":"Previous image",children:e(y,{name:"chevron-left"})}),e("button",{className:`${t.npArrow} ${t.npArrowRight}`,onClick:a=>{a.stopPropagation(),j(r=>Math.min(o.length-1,r+1)),$(!0)},disabled:ke===o.length-1,"aria-label":"Next image",children:e(y,{name:"chevron-right"})}),e("span",{className:t.npImageCount,onClick:a=>a.stopPropagation(),children:[ke+1," / ",o.length]})]})]})}),e("div",{className:`${t.playerBar} ${t.playerBarDocked} ${pe?"":t.playerBarDockedHidden}`,onClick:a=>a.stopPropagation(),children:[Fe,q&&e(O,{children:[e("div",{className:t.npBackdrop,onClick:()=>ne(!1)}),e("div",{className:t.chapterPanel,children:k.map((a,r)=>e("button",{className:`${t.chapterRow} ${r===dt?t.chapterRowActive:""}`,title:w?w(a.label):a.label,onClick:()=>{ut(a.time),ne(!1)},children:[e("span",{className:t.chapterRowTime,children:me(a.time)}),e("span",{className:t.chapterRowLabel,title:w?w(a.label):a.label,children:w?w(a.label):a.label})]},`${a.time}-${r}`))})]})]})]})]}),document.body)},Pt="https://github.com/serifpersia/dango/releases/latest/download/dango-extension.zip",Rt=s=>{try{return JSON.parse(s.detail)}catch{return null}},It=({isOpen:s,onClose:o,onSuccess:k})=>{const[v,c]=h(1),[d,f]=h(typeof navigator<"u"?navigator.userAgent:""),[A,w]=h(""),[T,I]=h(!1),[L,S]=h(!1),g=_(null),N=typeof navigator<"u"?navigator.userAgent:"",M=/android/i.test(N),l=/firefox|fxios/i.test(N)&&!M,m=!l&&!M&&/chrome|chromium|edg|brave/i.test(N),u=l||m;C(()=>{s&&(c(1),f(typeof navigator<"u"?navigator.userAgent:""),w(""),I(!1),S(!1))},[s]),C(()=>()=>{g.current&&(window.removeEventListener("dango:jasmr-cookie",g.current),g.current=null)},[]);const P=async()=>{localStorage.setItem("jasmr_ua",d),window.open("https://japaneseasmr.com","_blank","noopener,noreferrer"),c(2)},p=()=>{if(L)return;S(!0);const B=window.setTimeout(()=>{S(!1),g.current&&(window.removeEventListener("dango:jasmr-cookie",g.current),g.current=null),oe.error("Helper not detected — install it via about:debugging first.")},3e3),Y=D=>{window.clearTimeout(B),window.removeEventListener("dango:jasmr-cookie",Y),g.current=null,S(!1);const j=Rt(D);if(j?.ok&&j.cookie)w(j.cookie),oe.success("Cookie extracted from helper!");else if(j?.error==="NO_COOKIE"){const ae=j.debug?.stores?.length??0,ie=j.debug?.names??[];oe.error(`Helper found no cf_clearance (checked ${ae} stores, saw: ${ie.join(", ")||"none"}) — solve the challenge on the JapaneseASMR tab first.`)}else oe.error("Helper request failed — try again.")};g.current=Y,window.addEventListener("dango:jasmr-cookie",Y),window.dispatchEvent(new CustomEvent("dango:get-jasmr-cookie"))},U=async()=>{if(!A.trim()){oe.error("Please enter the cf_clearance cookie");return}I(!0);try{localStorage.setItem("jasmr_cookie",A.trim()),oe.success("Cookie updated successfully!"),k?.(),o()}catch{oe.error("Failed to save cookie")}finally{I(!1)}};return e(xe,{isOpen:s,onClose:o,title:"JapaneseASMR Verification Required",children:e("div",{className:R.container,children:v===1?e(O,{children:[e("p",{children:["JapaneseASMR is protected by a Cloudflare challenge. Solve it once in your browser and paste the ",e("strong",{children:"cf_clearance"})," cookie so the app can load the site for you."]}),e("div",{className:R.field,children:[e("label",{children:"Your User-Agent (must match the browser you solve the challenge with):"}),e("textarea",{value:d,onChange:B=>f(B.target.value),rows:3,className:R.textarea})]}),e("div",{className:R.actions,children:[e("button",{className:R.secondaryButton,onClick:o,children:"Cancel"}),e("button",{className:R.button,onClick:P,children:"Start Verification (Opens JapaneseASMR)"})]})]}):e(O,{children:[e("p",{children:["1. Solve the challenge on the ",e("strong",{children:"JapaneseASMR tab"})," (keep that tab open).",e("br",{}),"2. Copy the ",e("strong",{children:"cf_clearance"})," cookie value using one of these:",e("br",{}),e("br",{}),e("strong",{children:"Chrome / Edge — DevTools:"})," press ",e("code",{children:"F12"})," →"," ",e("strong",{children:"Application"})," → ",e("strong",{children:"Cookies"})," →"," ",e("code",{children:"https://japaneseasmr.com"}),". Find ",e("strong",{children:"cf_clearance"}),", double-click its ",e("strong",{children:"Value"})," to select it, then copy.",e("br",{}),e("br",{}),e("strong",{children:"Firefox — Storage Inspector:"})," press ",e("code",{children:"F12"})," →"," ",e("strong",{children:"Storage"})," → ",e("strong",{children:"Cookies"})," →"," ",e("code",{children:"https://japaneseasmr.com"}),". Find ",e("strong",{children:"cf_clearance"}),", right-click the value → ",e("strong",{children:"Copy Value"}),".",e("br",{}),e("br",{}),e("strong",{children:"Either browser — extension:"})," open"," ",e("strong",{children:"Cookie Manager"})," while on the JapaneseASMR tab, find"," ",e("strong",{children:"cf_clearance"}),", and copy its value (or use the extension's export).",e("br",{}),e("br",{}),"3. Paste it below. Copy ",e("strong",{children:"only the value"})," — remove any"," ",e("code",{children:"cf_clearance="})," prefix or quotes if they were included."]}),u&&e("div",{className:R.hint,children:[e("strong",{children:"Dango helper (one-time setup):"})," ",l?e(O,{children:["type ",e("code",{children:"about:debugging"})," in the address bar →"," ",e("strong",{children:"This Firefox"})," → ",e("strong",{children:"Load Temporary Add-on"})," ","→ open the ",e("code",{children:"dango-extension/firefox"})," folder and pick"," ",e("code",{children:"manifest.json"}),". (Temporary helpers unload when Firefox closes — repeat after a restart.)"]}):e(O,{children:["type ",e("code",{children:"chrome://extensions"})," in the address bar → enable"," ",e("strong",{children:"Developer mode"})," → ",e("strong",{children:"Load unpacked"})," → open the ",e("code",{children:"dango-extension/chrome"})," folder. (Unpacked helpers show a developer-mode notice — expected.)"]})," ","Use this link to download the extension and extract it:"," ",e("a",{href:Pt,target:"_blank",rel:"noreferrer",className:R.link,children:"dango-extension.zip"}),". Then click Extract below and the field fills itself.",e("div",{className:R.actions,children:e("button",{className:R.button,onClick:p,disabled:L,type:"button",children:L?"Extracting…":"Extract cookie from helper"})})]}),e("div",{className:R.field,children:[e("label",{children:"cf_clearance cookie value:"}),e("input",{type:"text",value:A,onChange:B=>w(B.target.value),placeholder:"e.g. xxxxxxxx.xxxxxxxx.xxxxxxx-xxxxxxx",className:R.input})]}),e("div",{className:R.actions,children:[e("button",{className:R.secondaryButton,onClick:o,children:"Cancel"}),e("button",{className:R.secondaryButton,onClick:()=>c(1),children:"Back"}),e("button",{className:R.button,onClick:U,disabled:T,children:T?"Saving...":"Submit"})]})]})})})},et="asmrTranslateCache",$t=10080*60*1e3;function Et(){try{const s=localStorage.getItem(et);if(!s)return new Map;const o=JSON.parse(s);return new Map(Object.entries(o))}catch{return new Map}}function jt(s){try{const o={};for(const[k,v]of s)o[k]=v;localStorage.setItem(et,JSON.stringify(o))}catch{}}function Ye(s){return/[\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FAF]/.test(s)}async function _t(s){const o=s.map(d=>d.trim()).filter(Boolean);if(o.length===0)return new Map;const k=await fetch("/api/translate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({texts:o,source:"ja",target:"en"})});if(!k.ok)throw new Error(`translate ${k.status}`);const v=await k.json(),c=new Map;for(const[d,f]of Object.entries(v.translations||{}))c.set(d,f);for(const d of o)c.has(d)||c.set(d,d);return c}function Ot(s,o){const[k,v]=h(new Map),[c,d]=h(!1),f=_(null),A=s.join("");return C(()=>{const T=A?A.split(""):[];if(!o||T.length===0){v(new Map),d(!1);return}const I=Array.from(new Set(T.map(l=>l.trim()).filter(Boolean).filter(Ye)));if(I.length===0){v(new Map);return}f.current||(f.current=Et());const L=Date.now(),S=new Map,g=[];for(const l of I){const m=f.current.get(l);m&&L-m.ts<$t?S.set(l,m.t):g.push(l)}if(g.length===0){v(S);return}let N=!1;d(!0);const M=[];for(let l=0;l<g.length;l+=15)M.push(g.slice(l,l+15));return(async()=>{const l=new Map;for(const u of M){try{const P=await _t(u);for(const[p,U]of P)l.set(p,U)}catch{}await new Promise(P=>setTimeout(P,120))}if(N)return;if(f.current){for(const[u,P]of l)f.current.set(u,{t:P,ts:Date.now()});jt(f.current)}const m=new Map([...S,...l]);v(m),d(!1)})(),()=>{N=!0}},[o,A]),{t:T=>!o||!T||!Ye(T)?T:k.get(T.trim())||T,map:k,isTranslating:c}}const Ft=[{label:"Date",options:[{value:"latest",label:"Latest"},{value:"oldest",label:"Oldest"}]},{label:"Title",options:[{value:"title_asc",label:"A → Z"},{value:"title_desc",label:"Z → A"}]},{label:"Popular (Views)",options:[{value:"popular_recent",label:"Recent"},{value:"popular_week",label:"Week"},{value:"popular_month",label:"Month"},{value:"popular_6_months",label:"6 Months"},{value:"popular_year",label:"Year"},{value:"popular",label:"All Time"}]},{label:"Most Commented",options:[{value:"comments_week",label:"Week"},{value:"comments_month",label:"Month"},{value:"comments_year",label:"Year"},{value:"comments",label:"All Time"}]},{label:"Other",options:[{value:"random",label:"Random"}]}],Ht=[{value:"",label:"All"},{value:"sfw",label:"SFW / 全年齢"},{value:"r-15",label:"R-15"},{value:"r-18",label:"NSFW / R18"},{value:"yuri",label:"Yuri / Girls love / 百合"},{value:"otokonoko",label:"Otoko no ko / 男の娘"},{value:"futanari",label:"Futanari / フタナリ"},{value:"r-18g",label:"R-18G / グロ"}],Ut=[{value:"sfw",label:"SFW / 全年齢"}],Ie="agreedToViewMature",Xt=()=>{const{rj:s}=ft(),o=Ke(),[k,v]=bt(),[c,d]=h(()=>localStorage.getItem(Ie)==="true"),[f,A]=h(!1),[w,T]=h(()=>k.get("q")||""),[I,L]=h(()=>k.get("q")||""),[S,g]=h("latest"),[N,M]=h("sfw"),[l,m]=h(1),[u,P]=h(null),[p,U]=h(null),[B,Y]=h(!0),[D,j]=h(()=>localStorage.getItem("asmrTranslateEN")==="true"),[ae,ie]=h(!1),q=vt(),{toggle:ne,bookmarkedIds:pe}=Ze(),{popup:$,openPopup:re,scheduleClose:F,cancelClose:Ne,closePopup:ge}=At();C(()=>yt("jasmr",()=>ie(!0)),[]),C(()=>{localStorage.setItem("asmrTranslateEN",String(D))},[D]),C(()=>{const n=()=>d(localStorage.getItem(Ie)==="true");return window.addEventListener("focus",n),window.addEventListener("storage",n),()=>{window.removeEventListener("focus",n),window.removeEventListener("storage",n)}},[]);const fe=c,V=fe?N:"sfw",Ce=fe?Ht:Ut,{data:ce,isLoading:Se,isError:Be,isFetching:be}=Tt(I,l,S,V),H=$e.useMemo(()=>ce?.shows??[],[ce?.shows]),Le=ce?.hasNext??!1;C(()=>{if(!s){u&&!p&&P(null);return}const n=s.toUpperCase();if(p&&(p.work.id?.toUpperCase()===n||p.work._id?.toUpperCase()===n)){u&&P(null);return}const i=H.find(x=>(x.id||x._id)?.toUpperCase()===n);i?(!u||(u.id||u._id)!==(i.id||i._id))&&P(i):(!u||(u.id||u._id)?.toUpperCase()!==n)&&P({_id:n,id:n,name:n})},[s,H,p,u]);const Pe=W(()=>{o("/asmr")},[o]);C(()=>{!s&&p&&U(null)},[s,p]);const{data:G}=Ge(p&&p.work.id||null),ve=p?[p.work.thumbnail,...G?.images||[]].filter(Boolean):[],J=[...H.map(n=>n.name),u?.name||"",p?.work.name||"",...G?.chapters?.map(n=>n.label)||[]].filter(Boolean),{t:K}=Ot(J,D);C(()=>{const n=p?p.work.name:u?u.name:s?s.toUpperCase():"",i=n?D?K(n):n:"",x=i?`${i} - dango`:"dango";document.title=x;try{window.history.replaceState(window.history.state,x,window.location.href)}catch{}},[u,p,s,D,K]);const Q=n=>{n.preventDefault(),L(w),m(1);const i=new URLSearchParams(k);w.trim()?i.set("q",w.trim()):i.delete("q"),i.delete("page"),v(i,{replace:!0})};C(()=>{const n=k.get("q")||"";T(i=>i===n?i:n),L(i=>i===n?i:n),m(1)},[k]);const de=n=>{n.target.checked&&!c&&A(!0)},Z=()=>{localStorage.setItem(Ie,"true"),d(!0),A(!1),m(1)},X=()=>{A(!1)},Te=W((n,i,x)=>{P(null),Y(!0),U({work:n,tracks:i,index:x})},[]);return e("div",{className:`${t.page} ${p?t.pageWithPlayer:""}`,children:[!(p&&B)&&e(O,{children:[e("header",{className:t.header,children:[e("h1",{className:t.pageTitle,children:[e(y,{name:"headphones"})," ASMR"]}),e("form",{className:t.searchForm,onSubmit:Q,children:[e("input",{className:t.searchInput,type:"text",value:w,onChange:n=>T(n.target.value),placeholder:"Search works, circles, CV… (-word excludes)","aria-label":"Search ASMR works"}),e("button",{className:t.searchBtn,type:"submit","aria-label":"Search",children:e(y,{name:"search"})})]})]}),e("div",{className:t.filterBar,children:[e("label",{className:t.filterLabel,htmlFor:"asmr-sort",children:"Sort"}),e("select",{id:"asmr-sort",className:t.sortSelect,value:S,onChange:n=>{g(n.target.value),m(1)},children:Ft.map(n=>e("optgroup",{label:n.label,children:n.options.map(i=>e("option",{value:i.value,children:i.label},i.value))},n.label))}),e("label",{className:t.filterLabel,htmlFor:"asmr-rating",children:"Type"}),e("select",{id:"asmr-rating",className:t.sortSelect,value:N,onChange:n=>{M(n.target.value),m(1)},children:Ce.map(n=>e("option",{value:n.value,children:n.label},n.value))}),e("div",{className:t.filterTogglesGroup,children:[e("div",{className:t.translateToggleWrap,children:[e("span",{className:t.filterLabel,children:"JP"}),e(Ve,{id:"asmr-translate-toggle",isChecked:D,onChange:n=>j(n.target.checked)}),e("span",{className:t.filterLabel,children:"EN"})]}),!c&&e("div",{className:t.matureToggleWrap,children:[e("label",{className:t.matureLabel,htmlFor:"asmr-mature-toggle",children:"Mature"}),e(Ve,{id:"asmr-mature-toggle",isChecked:!1,onChange:de})]})]})]}),Be?e("p",{className:t.statusMsg,children:"Failed to load works. Please try again."}):Se&&H.length===0?e("div",{className:t.grid,"aria-hidden":!0,children:Array.from({length:12}).map((n,i)=>e("div",{className:t.skeletonCard,children:[e("div",{className:`${t.skeletonThumb} ${t.shimmer}`}),e("div",{className:`${t.skeletonLine} ${t.shimmer}`,style:{width:"88%"}}),e("div",{className:`${t.skeletonLine} ${t.shimmer}`,style:{width:"55%"}})]},i))}):H.length===0?e("p",{className:t.statusMsg,children:"No works found."}):e(O,{children:[e("div",{className:`${t.grid} ${be?t.fetching:""}`,children:H.map(n=>{const i=D?{...n,name:K(n.name)}:n,x=Qe(n),se=ze(x),ee=pe.has(se),le=`/asmr/${encodeURIComponent(x)}`;return e("div",{className:t.asmrCardWrap,children:[e(kt,{item:{id:se,title:i.name,thumbnail:n.thumbnail||"",typeBadge:x||void 0,isAdult:Re(n)},linkTo:le,hoverIcon:"info",layout:"horizontal",showInfoButton:!0,display:{elements:{poster:{typeBadge:!0,chapterBadge:!1,adultBadge:!0},info:{title:!0,mobileBadges:!0,progress:!1,meta:!1}}},onOpenDetails:z=>re(z,{rjCode:x,title:i.name,thumbnail:n.thumbnail||"",isAdult:Re(n),rating:n.rating,listenTarget:le}),onPopupHoverIntent:z=>z?Ne():F(),rawThumbnail:!0}),e("button",{className:`${t.bookmarkBtn} ${ee?t.bookmarked:""}`,onClick:z=>{z.preventDefault(),z.stopPropagation(),ne({rjCode:x,title:n.name,thumbnail:n.thumbnail||"",isAdult:Re(n)})},title:ee?"Remove from listening list":"Add to listening list","aria-label":ee?"Remove from listening list":"Add to listening list","aria-pressed":ee,children:e(y,{name:ee?"check":"plus",size:12})})]},n._id||n.id)})}),e("nav",{className:t.pagination,children:[e("button",{className:t.pageBtn,disabled:l<=1,onClick:()=>m(n=>Math.max(1,n-1)),children:"Previous"}),e("span",{className:t.pageIndicator,children:["Page ",l]}),e("button",{className:t.pageBtn,disabled:!Le,onClick:()=>m(n=>n+1),children:"Next"})]})]})]}),u&&e(Bt,{work:u,onClose:Pe,onPlay:Te,t:K}),$&&e(Mt,{data:$.data,anchorRect:$.rect,bookmarked:pe.has(ze($.data.rjCode)),onToggleBookmark:()=>ne({rjCode:$.data.rjCode,title:$.data.title,thumbnail:$.data.thumbnail||"",isAdult:$.data.isAdult}),onMouseEnter:Ne,onMouseLeave:F,onRequestClose:ge}),ae&&e(It,{isOpen:ae,onClose:()=>ie(!1),onSuccess:()=>{q.invalidateQueries({queryKey:["asmrBrowse"]}),q.invalidateQueries({queryKey:["asmrWork"]})}}),f&&e(xe,{isOpen:f,title:"Content Warning",onClose:X,children:e("div",{style:{padding:"var(--space-4)",textAlign:"center"},children:[e("p",{children:"This section contains mature content intended for adult audiences."}),e("p",{children:["By proceeding, you confirm that you are ",e("strong",{children:"18 years of age or older"})," (or the age of majority in your jurisdiction) and wish to view this content."]}),e("p",{style:{fontSize:"var(--font-size-xs)",color:"var(--text-secondary)",marginTop:"var(--space-4)"},children:["You can reset this preference at any time in the ",e("strong",{children:"Settings"})," page."]}),e("div",{style:{marginTop:"var(--space-4)",display:"flex",gap:"var(--space-2-5)",justifyContent:"center"},children:[e(he,{variant:"secondary",onClick:X,children:"Go Back"}),e(he,{onClick:Z,children:"I'm 18+, Continue"})]})]})}),p&&e(Lt,{title:p.work.name,images:ve,chapters:G?.chapters||[],tracks:p.tracks,trackIndex:p.index,expanded:B,isAdult:!!p.work.isAdult,rjCode:p.work.id||p.work._id,t:K,onTrackChange:n=>U(i=>i&&{...i,index:n}),onExpandedChange:Y,onClose:()=>{U(null),Y(!0),s&&o("/asmr")}})]})};export{Xt as default};
@@ -0,0 +1 @@
1
+ ._page_aacjp_1{max-width:var(--layout-asmr-max-width);margin:0 auto;padding:var(--space-6) var(--space-4);min-height:calc(100vh - var(--layout-page-offset))}._pageWithPlayer_aacjp_8{padding-bottom:var(--layout-page-offset)}._header_aacjp_12{display:flex;align-items:center;gap:var(--space-4);flex-wrap:wrap;margin-bottom:var(--space-5)}._pageTitle_aacjp_20{display:flex;align-items:center;gap:var(--space-2);font-size:var(--font-size-xl);margin:0;color:var(--text-primary)}._searchForm_aacjp_29{display:flex;flex:1;min-width:var(--size-220);max-width:var(--size-480);border:var(--space-px) solid var(--border-primary);border-radius:var(--radius-md);background:var(--bg-secondary);overflow:hidden}._searchForm_aacjp_29:focus-within{border-color:var(--accent)}._searchInput_aacjp_44{flex:1;min-width:0;padding:var(--space-2-5) var(--space-3);border:none;background:transparent;color:var(--text-primary);font-size:var(--font-size-sm);outline:none}._searchBtn_aacjp_55{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--size-44);border:none;border-left:var(--space-px) solid var(--border-primary);background:var(--accent);color:var(--accent-text);cursor:pointer}._sortSelect_aacjp_68{padding:var(--space-2-5) var(--space-3);border:var(--space-px) solid var(--border-primary);border-radius:var(--radius-md);background:var(--bg-secondary);color:var(--text-primary);font-size:var(--font-size-sm);cursor:pointer}._grid_aacjp_78{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--size-250),1fr));gap:var(--space-4);transition:opacity var(--transition-fast)}._fetching_aacjp_85{opacity:.45;pointer-events:none}._card_aacjp_90{display:flex;flex-direction:column;text-align:left;padding:0;border:none;background:none;cursor:pointer;color:inherit}._thumbWrap_aacjp_101{position:relative;aspect-ratio:4 / 3;border-radius:var(--radius-lg);overflow:hidden;background:var(--bg-tertiary);transition:transform var(--transition-fast) var(--ease-smooth),box-shadow var(--transition-fast) var(--ease-smooth)}._card_aacjp_90:hover ._thumbWrap_aacjp_101{transform:translateY(calc(var(--space-1) * -1));box-shadow:var(--shadow-lg)}._thumb_aacjp_101{width:100%;height:100%;object-fit:cover;display:block}._thumbPlaceholder_aacjp_124{display:flex;align-items:center;justify-content:center;color:var(--text-tertiary);font-size:var(--font-size-sm)}._adultBadge_aacjp_132{position:absolute;top:var(--space-2);right:var(--space-2);padding:var(--space-2px) var(--space-2);border-radius:var(--radius-full);background:var(--color-danger-bg);color:var(--text-primary);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold)}._cardTitle_aacjp_144{margin:var(--space-2) 0 var(--space-2px);font-size:var(--font-size-sm);color:var(--text-primary);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}._cardMeta_aacjp_154{margin:0;font-size:var(--font-size-xs);color:var(--text-tertiary)}._asmrCardWrap_aacjp_160{position:relative;min-width:0}._bookmarkBtn_aacjp_165{position:absolute;top:var(--space-2);right:var(--space-2);width:28px;height:28px;border-radius:50%;background-color:#0009;color:#fff;border:1px solid rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:0;transition:opacity .15s ease,background-color .15s ease,transform .15s ease;z-index:20}._asmrCardWrap_aacjp_160:hover ._bookmarkBtn_aacjp_165,._asmrCardWrap_aacjp_160:focus-within ._bookmarkBtn_aacjp_165,._bookmarkBtn_aacjp_165._bookmarked_aacjp_189{opacity:1}._bookmarkBtn_aacjp_165:hover{background-color:var(--accent);border-color:var(--accent);color:var(--accent-text);transform:scale(1.08)}._bookmarkBtn_aacjp_165._bookmarked_aacjp_189{background-color:var(--accent);border-color:var(--accent);color:var(--accent-text)}._popupCover_aacjp_206{display:block;width:100%;aspect-ratio:16 / 9;object-fit:cover;border-radius:var(--radius-md);margin-bottom:var(--space-3);background:var(--bg-tertiary)}@media(hover:none),(pointer:coarse){._bookmarkBtn_aacjp_165{opacity:1}}@media(max-width:768px){._popupCover_aacjp_206{aspect-ratio:3 / 4;max-height:38vh}}._statusMsg_aacjp_229{text-align:center;color:var(--text-secondary);padding:var(--space-8) 0}._skeletonCard_aacjp_237{display:flex;flex-direction:column}._skeletonThumb_aacjp_242{aspect-ratio:4 / 3;border-radius:var(--radius-lg);background:var(--bg-tertiary)}._skeletonLine_aacjp_248{height:var(--space-3);border-radius:var(--radius-xs);margin-top:var(--space-2);background:var(--bg-tertiary)}._shimmer_aacjp_255{position:relative;overflow:hidden}._shimmer_aacjp_255:after{content:"";position:absolute;inset:0;transform:translate(-100%);background:linear-gradient(90deg,transparent,var(--shimmer-highlight),transparent);animation:_skeleton-wave_aacjp_1 var(--duration-shimmer) infinite}._pagination_aacjp_269{display:flex;align-items:center;justify-content:center;gap:var(--space-4);margin-top:var(--space-6)}._pageBtn_aacjp_277{padding:var(--space-2) var(--space-5);border:var(--space-px) solid var(--border-primary);border-radius:var(--radius-md);background:var(--bg-elevated);color:var(--text-primary);cursor:pointer}._pageBtn_aacjp_277:disabled{opacity:.4;cursor:not-allowed}._pageIndicator_aacjp_291{color:var(--text-secondary);font-size:var(--font-size-sm)}._matureToggleWrap_aacjp_296{display:flex;align-items:center;gap:var(--space-2);margin-left:auto}._matureLabel_aacjp_303{font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);color:var(--text-secondary)}._translateToggleWrap_aacjp_309{display:flex;align-items:center;gap:var(--space-2);margin-left:auto}._filterTogglesGroup_aacjp_316{display:flex;align-items:center;gap:var(--space-4);margin-left:auto}._filterTogglesGroup_aacjp_316 ._translateToggleWrap_aacjp_309,._filterTogglesGroup_aacjp_316 ._matureToggleWrap_aacjp_296{margin-left:0}._filterBar_aacjp_328{display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-4)}._filterLabel_aacjp_335{font-size:var(--font-size-sm);color:var(--text-secondary)}._detailOverlay_aacjp_340{position:fixed;inset:0;z-index:var(--z-modal);display:flex;align-items:center;justify-content:center;background:var(--bg-overlay-heavy);-webkit-backdrop-filter:blur(var(--blur-sm));backdrop-filter:blur(var(--blur-sm));padding:var(--space-4)}._detailModal_aacjp_352{position:relative;width:min(var(--size-720),100%);max-height:85vh;overflow-y:auto;border-radius:var(--radius-xl);border:var(--space-px) solid var(--border-secondary);background:var(--bg-elevated);box-shadow:var(--glass-shadow);padding:var(--space-5)}._detailClose_aacjp_364{position:absolute;top:var(--space-3);right:var(--space-3);display:flex;align-items:center;justify-content:center;width:var(--size-34);height:var(--size-34);border:none;border-radius:var(--radius-full);background:var(--bg-tertiary);color:var(--text-primary);cursor:pointer}._detailHeader_aacjp_380{display:flex;flex-direction:column;gap:var(--space-4)}._detailCover_aacjp_386{width:100%;aspect-ratio:16 / 9;object-fit:cover;border-radius:var(--radius-lg);flex-shrink:0;background:var(--bg-tertiary)}._detailInfo_aacjp_395{min-width:0}._detailTitle_aacjp_399{margin:0 0 var(--space-2);font-size:var(--font-size-lg);color:var(--text-primary);line-height:1.35}._detailRj_aacjp_406{margin:0 0 var(--space-3);font-size:var(--font-size-xs);color:var(--text-tertiary)}._metaRow_aacjp_412{margin:0 0 4px;font-size:var(--font-size-sm);color:var(--text-secondary)}._metaLabel_aacjp_418{display:inline-block;min-width:var(--space-16);color:var(--text-tertiary)}._tagChips_aacjp_424{display:inline-flex;flex-wrap:wrap;gap:var(--space-1)}._tagChip_aacjp_424{padding:var(--space-2px) var(--space-2);border-radius:var(--radius-full);background:var(--bg-tertiary);color:var(--text-secondary);font-size:var(--font-size-xs)}._npOverlay_aacjp_440{position:fixed;inset:0;z-index:var(--z-overlay);display:flex;flex-direction:column;background:var(--bg-dark);overflow:hidden;overscroll-behavior:contain}body.asmr-player-open{overflow:hidden}._playerBarDocked_aacjp_455{position:static;transform:translateY(0);max-height:var(--size-240);overflow:visible;transition:transform var(--transition-emphasized),max-height var(--transition-emphasized),opacity var(--transition-base),padding var(--transition-base),border-width var(--transition-base);will-change:transform,max-height,opacity}._playerBarDockedHidden_aacjp_469{max-height:0!important;opacity:0;transform:translateY(18%);padding-top:0!important;padding-bottom:0!important;border-width:0!important;pointer-events:none;overflow:hidden!important}._npOverlayControlsHidden_aacjp_480 ._npArrow_aacjp_480,._npOverlayControlsHidden_aacjp_480 ._npImageCount_aacjp_481{opacity:0;pointer-events:none;transform:translateY(-50%) scale(.96);transition:opacity var(--transition-base),transform var(--transition-emphasized)}._npOverlayControlsHidden_aacjp_480 ._npStage_aacjp_490{cursor:pointer}._npStage_aacjp_490{position:relative;flex:1;min-height:0;display:flex;align-items:center;justify-content:center;background:var(--bg-black);transition:padding var(--transition-emphasized)}._npStage_aacjp_490,._sliderViewport_aacjp_506,._slide_aacjp_506,._slideImg_aacjp_508{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;outline:none;-webkit-user-select:none;user-select:none}._npStage_aacjp_490:focus,._sliderViewport_aacjp_506:focus,._slide_aacjp_506:focus,._slideImg_aacjp_508:focus{outline:none!important;box-shadow:none!important}._slideImg_aacjp_508::-moz-focus-inner{border:0}._npStageBlank_aacjp_527{background:var(--bg-dark)}._npStageImg_aacjp_531{max-width:min(92vw,var(--size-900));max-height:100%;object-fit:contain;-webkit-user-select:none;user-select:none}._sliderViewport_aacjp_506{position:absolute;inset:0;overflow:hidden}._sliderTrack_aacjp_546{display:flex;height:100%;transition:transform var(--transition-normal);will-change:transform}._slide_aacjp_506{flex:0 0 100%;height:100%;display:flex;align-items:center;justify-content:center;padding:var(--space-5) var(--size-84);box-sizing:border-box;transition:padding var(--transition-emphasized)}._slideImg_aacjp_508{max-width:100%;max-height:100%;object-fit:contain;-webkit-user-select:none;user-select:none;opacity:0;transform:scale(.985);-webkit-tap-highlight-color:transparent;outline:none;transition:opacity var(--transition-base),transform var(--transition-emphasized),max-height var(--transition-emphasized)}._slideImgLoaded_aacjp_579{opacity:1;transform:none}._slideSpinner_aacjp_584{position:absolute;left:50%;top:50%;width:var(--size-44);height:var(--size-44);margin:calc(var(--size-22) * -1) 0 0 calc(var(--size-22) * -1);border-radius:var(--radius-full);border:var(--space-2px) solid var(--border-strong);border-top-color:var(--text-primary);animation:_spin_aacjp_1 var(--duration-spin) linear infinite;pointer-events:none}@keyframes _spin_aacjp_1{to{transform:rotate(360deg)}}._npArrow_aacjp_480{position:absolute;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:var(--size-48);height:var(--size-48);border:var(--space-px) solid var(--border-strong);border-radius:var(--radius-full);background:var(--bg-scrim);-webkit-backdrop-filter:blur(var(--blur-md));backdrop-filter:blur(var(--blur-md));box-shadow:var(--shadow-scrim);color:var(--text-primary);cursor:pointer;transition:background var(--transition-fast),opacity var(--transition-fast)}._npArrow_aacjp_480:hover:not(:disabled){background:var(--bg-scrim-strong)}._npArrow_aacjp_480:disabled{opacity:.25;cursor:not-allowed}._npArrowLeft_aacjp_634{left:var(--space-5)}._npArrowRight_aacjp_638{right:var(--space-5)}._npImageCount_aacjp_481{position:absolute;top:calc(var(--space-4) + var(--space-16));right:var(--space-4);padding:var(--space-2px) var(--space-2-5);border-radius:var(--radius-full);background:var(--bg-overlay-strong);color:var(--text-secondary);font-size:var(--font-size-xs);font-variant-numeric:tabular-nums;z-index:var(--z-base)}._chapterPanel_aacjp_655{position:absolute;bottom:calc(100% + var(--space-2-5));right:var(--space-5);width:min(var(--size-440),calc(100vw - var(--space-8)));max-height:min(46vh,var(--size-420));overflow-y:auto;background:var(--bg-elevated);border:var(--space-px) solid var(--border-secondary);border-radius:var(--radius-lg);box-shadow:var(--shadow-panel);padding:var(--space-1-5);z-index:var(--z-dropdown)}._chapterRow_aacjp_670{display:flex;align-items:baseline;gap:var(--space-3);width:100%;text-align:left;padding:var(--space-2) var(--space-3);border:none;border-radius:var(--radius-md);background:transparent;color:var(--text-primary);cursor:pointer;font-size:var(--font-size-sm)}._chapterRow_aacjp_670:hover{background:var(--bg-tertiary)}._chapterRowActive_aacjp_689{background:var(--bg-selected)}._chapterRowTime_aacjp_693{flex-shrink:0;color:var(--text-tertiary);font-variant-numeric:tabular-nums}._chapterRowActive_aacjp_689 ._chapterRowTime_aacjp_693{color:var(--accent);font-weight:var(--font-weight-semibold)}._chapterRowLabel_aacjp_704{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._npBackdrop_aacjp_710{position:fixed;inset:0;z-index:-1}._playerBtn_aacjp_716._playerBtnActive_aacjp_716{color:var(--accent);background:color-mix(in srgb,var(--accent) 20%,transparent);box-shadow:0 0 10px var(--accent-glow)}._tracksSection_aacjp_722{margin-top:var(--space-5)}._tracksHeading_aacjp_726{font-size:var(--font-size-base);color:var(--text-primary);margin:0 0 var(--space-2)}._trackList_aacjp_732{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-1-5)}._trackRow_aacjp_741{display:flex;align-items:center;gap:var(--space-3);width:100%;padding:var(--space-2) var(--space-3);border:var(--space-px) solid var(--border-secondary);border-radius:var(--radius-md);background:var(--bg-secondary);color:var(--text-primary);cursor:pointer;font-size:var(--font-size-sm)}._trackRow_aacjp_741:hover{border-color:var(--accent)}._trackIcon_aacjp_759{color:var(--accent);flex-shrink:0}._trackLabel_aacjp_764{flex:1;text-align:left}._trackType_aacjp_769{font-size:var(--font-size-xs);color:var(--text-tertiary)}._noTracks_aacjp_774{color:var(--text-secondary);font-size:var(--font-size-sm)}._playAllBtn_aacjp_779{display:inline-flex;align-items:center;gap:var(--space-2);padding:var(--space-2-5) var(--space-5);border:none;border-radius:var(--radius-md);background:var(--accent);color:var(--accent-text);font-size:var(--font-size-base);cursor:pointer}._detailActions_aacjp_792{display:flex;flex-wrap:wrap;gap:var(--space-3);margin-top:var(--space-5)}._playerBar_aacjp_455{position:fixed;left:0;right:0;bottom:0;z-index:var(--z-overlay);display:flex;align-items:center;gap:var(--space-4);padding:var(--space-2-5) var(--space-5);padding-bottom:calc(var(--space-2-5) + env(safe-area-inset-bottom,0px));background:var(--glass-bg);border-top:var(--space-px) solid var(--glass-border);-webkit-backdrop-filter:blur(var(--blur-lg));backdrop-filter:blur(var(--blur-lg))}._playerActions_aacjp_815{display:flex;align-items:center;gap:var(--space-2)}._playerInfo_aacjp_821{min-width:0;width:var(--size-240)}._playerTitle_aacjp_826{margin:0;font-size:var(--font-size-sm);color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._playerTrack_aacjp_835{margin:var(--space-2px) 0 0;font-size:var(--font-size-xs);color:var(--text-tertiary)}._playerControls_aacjp_841{display:flex;align-items:center;gap:var(--space-3);flex:1}._seekRow_aacjp_848{display:flex;align-items:center;gap:var(--space-3);flex:1;min-width:0}._playerButtons_aacjp_856{display:flex;align-items:center;gap:var(--space-2)}._playerBtn_aacjp_716{display:flex;align-items:center;justify-content:center;width:var(--size-36);height:var(--size-36);border:none;border-radius:var(--radius-full);background:transparent;color:var(--text-primary);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast),transform var(--transition-quick),opacity var(--transition-fast)}._playerBtn_aacjp_716:disabled{opacity:.35;cursor:not-allowed}@media(hover:hover)and (pointer:fine){._playerBtn_aacjp_716:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary)}._seekBtn_aacjp_891:hover:not(:disabled){background:var(--bg-hover-strong);color:var(--accent)}._seekBtn_aacjp_891:hover ._seekBtnLabel_aacjp_896{background:var(--accent);color:var(--accent-text)}._playBtn_aacjp_901:hover:not(:disabled){background:var(--accent-light);color:var(--accent-text);box-shadow:0 0 12px var(--accent-glow)}}._playerBtn_aacjp_716:active:not(:disabled){transform:scale(.94);transition:transform var(--transition-quick),background var(--transition-quick)}._playBtn_aacjp_901{background:var(--accent);color:var(--accent-text);width:var(--size-42);height:var(--size-42)}._playBtn_aacjp_901:disabled{opacity:1}._seekBtn_aacjp_891{position:relative;font-size:var(--font-size-sm);color:var(--text-primary)}._seekBtnLabel_aacjp_896{position:absolute;bottom:var(--space-px);left:50%;transform:translate(-50%);font-size:var(--font-size-2xs);font-weight:var(--font-weight-bold);line-height:1;letter-spacing:-.02em;background:var(--bg-overlay);color:var(--text-primary);padding:var(--space-px) var(--space-2px);border-radius:var(--radius-sm);pointer-events:none}._seekBar_aacjp_948,._volumeBar_aacjp_949{-webkit-appearance:none;appearance:none;height:var(--size-18);background:transparent;cursor:pointer}._seekBar_aacjp_948::-webkit-slider-runnable-track,._volumeBar_aacjp_949::-webkit-slider-runnable-track{width:100%;height:var(--space-1);border-radius:var(--space-1)}._seekBar_aacjp_948::-webkit-slider-runnable-track{background:linear-gradient(to right,var(--accent) 0%,var(--accent) var(--played-percent, 0%),var(--track-buffered) var(--played-percent, 0%),var(--track-buffered) var(--buffered-percent, 0%),var(--track-bg) var(--buffered-percent, 0%),var(--track-bg) 100%)}._volumeBar_aacjp_949::-webkit-slider-runnable-track{background:linear-gradient(to right,var(--accent) 0%,var(--accent) var(--volume-percent, 100%),var(--track-bg) var(--volume-percent, 100%),var(--track-bg) 100%)}._seekBar_aacjp_948::-moz-range-track{width:100%;height:var(--space-1);border-radius:var(--space-1);background:linear-gradient(to right,var(--accent) 0%,var(--accent) var(--played-percent, 0%),var(--track-buffered) var(--played-percent, 0%),var(--track-buffered) var(--buffered-percent, 0%),var(--track-bg) var(--buffered-percent, 0%),var(--track-bg) 100%)}._volumeBar_aacjp_949::-moz-range-track{width:100%;height:var(--space-1);border-radius:var(--space-1);background:linear-gradient(to right,var(--accent) 0%,var(--accent) var(--volume-percent, 100%),var(--track-bg) var(--volume-percent, 100%),var(--track-bg) 100%)}._seekBar_aacjp_948::-webkit-slider-thumb,._volumeBar_aacjp_949::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;height:var(--space-3);width:var(--space-3);border-radius:var(--radius-full);background:var(--text-primary);margin-top:calc(var(--space-1) * -1);box-shadow:var(--shadow-thumb)}._seekBar_aacjp_948::-moz-range-thumb,._volumeBar_aacjp_949::-moz-range-thumb{height:var(--space-3);width:var(--space-3);border:none;border-radius:var(--radius-full);background:var(--text-primary);box-shadow:var(--shadow-thumb)}._seekBar_aacjp_948{flex:1;min-width:0}._timeLabel_aacjp_1041{font-size:var(--font-size-xs);color:var(--text-secondary);font-variant-numeric:tabular-nums}._playerRight_aacjp_1047{display:flex;align-items:center;gap:var(--space-2)}._volumeIcon_aacjp_1053{color:var(--text-secondary)}._volumeBar_aacjp_949{width:var(--size-90)}@media(max-width:768px){._detailHeader_aacjp_380{flex-direction:column}._detailCover_aacjp_386{width:100%}._filterBar_aacjp_328{flex-wrap:wrap}._filterBar_aacjp_328 ._sortSelect_aacjp_68{flex:1 1 var(--size-140);min-width:0}._pageWithPlayer_aacjp_8{padding-bottom:var(--layout-player-mobile)}._playerBar_aacjp_455{display:grid;grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:"toggle info actions" "controls controls controls" "volume volume volume";align-items:center;column-gap:var(--space-2);row-gap:var(--space-2px);padding:var(--space-2) var(--space-3);padding-bottom:calc(var(--space-2) + env(safe-area-inset-bottom,0px))}._playerToggle_aacjp_1097{grid-area:toggle}._playerInfo_aacjp_821{grid-area:info;width:auto}._playerActions_aacjp_815{grid-area:actions;margin-right:calc(var(--space-1-5) * -1)}._playerControls_aacjp_841{grid-area:controls;gap:var(--space-2);min-width:0;justify-content:center}._playerRight_aacjp_1047{grid-area:volume;width:100%}._volumeBar_aacjp_949{flex:1;width:auto;height:var(--space-6)}._slide_aacjp_506{padding:0 var(--size-52)}._npArrow_aacjp_480{width:var(--size-42);height:var(--size-42);opacity:.85}._npArrowLeft_aacjp_634{left:var(--space-2)}._npArrowRight_aacjp_638{right:var(--space-2)}._npImageCount_aacjp_481{top:calc(var(--space-3) + env(safe-area-inset-top,0px));right:var(--space-3)}._chapterPanel_aacjp_655{right:var(--space-3);max-height:55vh}}@media(max-width:768px)and (orientation:portrait){._npStage_aacjp_490{height:100%}._sliderViewport_aacjp_506{inset:0}._slide_aacjp_506{padding:0}._npOverlay_aacjp_440:not(._npOverlayControlsHidden_aacjp_480) ._slide_aacjp_506{padding-bottom:var(--space-2-5)}._npOverlay_aacjp_440:not(._npOverlayControlsHidden_aacjp_480) ._slideImg_aacjp_508{max-height:calc(100% - var(--space-2-5))}._slideImg_aacjp_508{width:auto;height:auto;max-width:100%;max-height:100%;object-fit:contain;object-position:center}._playerBar_aacjp_455{grid-template-areas:"toggle info actions" "controls controls controls" "volume volume volume";row-gap:var(--space-2-5);padding:var(--space-2-5) var(--space-3);padding-bottom:calc(var(--space-2-5) + env(safe-area-inset-bottom,0px))}._playerControls_aacjp_841{flex-direction:column;align-items:center;gap:var(--space-2);width:100%}._playerButtons_aacjp_856{justify-content:center;width:100%;gap:var(--space-1-5)}._seekRow_aacjp_848{width:100%;justify-content:center}._seekRow_aacjp_848 ._seekBar_aacjp_948{flex:1}._playerRight_aacjp_1047{justify-content:center;width:100%}._playerRight_aacjp_1047 ._volumeBar_aacjp_949{flex:1;width:100%;max-width:var(--size-320)}}
@@ -0,0 +1 @@
1
+ const a="_page_aacjp_1",e="_pageWithPlayer_aacjp_8",t="_header_aacjp_12",c="_pageTitle_aacjp_20",_="_searchForm_aacjp_29",o="_searchInput_aacjp_44",p="_searchBtn_aacjp_55",r="_sortSelect_aacjp_68",n="_grid_aacjp_78",l="_fetching_aacjp_85",s="_thumbPlaceholder_aacjp_124",i="_asmrCardWrap_aacjp_160",d="_bookmarkBtn_aacjp_165",j="_bookmarked_aacjp_189",g="_popupCover_aacjp_206",k="_statusMsg_aacjp_229",y="_skeletonCard_aacjp_237",m="_skeletonThumb_aacjp_242",h="_skeletonLine_aacjp_248",B="_shimmer_aacjp_255",T="_pagination_aacjp_269",u="_pageBtn_aacjp_277",b="_pageIndicator_aacjp_291",w="_matureToggleWrap_aacjp_296",L="_matureLabel_aacjp_303",C="_translateToggleWrap_aacjp_309",R="_filterTogglesGroup_aacjp_316",v="_filterBar_aacjp_328",I="_filterLabel_aacjp_335",A="_detailOverlay_aacjp_340",f="_detailModal_aacjp_352",S="_detailClose_aacjp_364",H="_detailHeader_aacjp_380",W="_detailCover_aacjp_386",O="_detailInfo_aacjp_395",P="_detailTitle_aacjp_399",D="_detailRj_aacjp_406",M="_metaRow_aacjp_412",F="_metaLabel_aacjp_418",G="_tagChips_aacjp_424",V="_tagChip_aacjp_424",x="_npOverlay_aacjp_440",q="_playerBarDocked_aacjp_455",z="_playerBarDockedHidden_aacjp_469",E="_npOverlayControlsHidden_aacjp_480",J="_npArrow_aacjp_480",K="_npImageCount_aacjp_481",N="_npStage_aacjp_490",Q="_sliderViewport_aacjp_506",U="_slide_aacjp_506",X="_slideImg_aacjp_508",Y="_npStageBlank_aacjp_527",Z="_sliderTrack_aacjp_546",$="_slideImgLoaded_aacjp_579",aa="_slideSpinner_aacjp_584",ea="_npArrowLeft_aacjp_634",ta="_npArrowRight_aacjp_638",ca="_chapterPanel_aacjp_655",_a="_chapterRow_aacjp_670",oa="_chapterRowActive_aacjp_689",pa="_chapterRowTime_aacjp_693",ra="_chapterRowLabel_aacjp_704",na="_npBackdrop_aacjp_710",la="_playerBtn_aacjp_716",sa="_playerBtnActive_aacjp_716",ia="_tracksSection_aacjp_722",da="_tracksHeading_aacjp_726",ja="_trackList_aacjp_732",ga="_trackRow_aacjp_741",ka="_trackIcon_aacjp_759",ya="_trackLabel_aacjp_764",ma="_trackType_aacjp_769",ha="_noTracks_aacjp_774",Ba="_playAllBtn_aacjp_779",Ta="_detailActions_aacjp_792",ua="_playerBar_aacjp_455",ba="_playerActions_aacjp_815",wa="_playerInfo_aacjp_821",La="_playerTitle_aacjp_826",Ca="_playerTrack_aacjp_835",Ra="_playerControls_aacjp_841",va="_seekRow_aacjp_848",Ia="_playerButtons_aacjp_856",Aa="_seekBtn_aacjp_891",fa="_seekBtnLabel_aacjp_896",Sa="_playBtn_aacjp_901",Ha="_seekBar_aacjp_948",Wa="_volumeBar_aacjp_949",Oa="_timeLabel_aacjp_1041",Pa="_playerRight_aacjp_1047",Da="_volumeIcon_aacjp_1053",Ma="_playerToggle_aacjp_1097",Fa={page:a,pageWithPlayer:e,header:t,pageTitle:c,searchForm:_,searchInput:o,searchBtn:p,sortSelect:r,grid:n,fetching:l,thumbPlaceholder:s,asmrCardWrap:i,bookmarkBtn:d,bookmarked:j,popupCover:g,statusMsg:k,skeletonCard:y,skeletonThumb:m,skeletonLine:h,shimmer:B,pagination:T,pageBtn:u,pageIndicator:b,matureToggleWrap:w,matureLabel:L,translateToggleWrap:C,filterTogglesGroup:R,filterBar:v,filterLabel:I,detailOverlay:A,detailModal:f,detailClose:S,detailHeader:H,detailCover:W,detailInfo:O,detailTitle:P,detailRj:D,metaRow:M,metaLabel:F,tagChips:G,tagChip:V,npOverlay:x,playerBarDocked:q,playerBarDockedHidden:z,npOverlayControlsHidden:E,npArrow:J,npImageCount:K,npStage:N,sliderViewport:Q,slide:U,slideImg:X,npStageBlank:Y,sliderTrack:Z,slideImgLoaded:$,slideSpinner:aa,npArrowLeft:ea,npArrowRight:ta,chapterPanel:ca,chapterRow:_a,chapterRowActive:oa,chapterRowTime:pa,chapterRowLabel:ra,npBackdrop:na,playerBtn:la,playerBtnActive:sa,tracksSection:ia,tracksHeading:da,trackList:ja,trackRow:ga,trackIcon:ka,trackLabel:ya,trackType:ma,noTracks:ha,playAllBtn:Ba,detailActions:Ta,playerBar:ua,playerActions:ba,playerInfo:wa,playerTitle:La,playerTrack:Ca,playerControls:Ra,seekRow:va,playerButtons:Ia,seekBtn:Aa,seekBtnLabel:fa,playBtn:Sa,seekBar:Ha,volumeBar:Wa,timeLabel:Oa,playerRight:Pa,volumeIcon:Da,playerToggle:Ma};export{Fa as a};
@@ -0,0 +1 @@
1
+ import{d as a,u as l}from"./vendor-core-8R2fFbyN.js";import{R as i}from"./ResetProgressModal-CR_ovLAu.js";import{s as f,n as R}from"./useAsmr-CbMVRjmV.js";const A=({workId:e,title:m,onClose:o})=>{const[r,s]=a(!1),t=f(),n=R();return l(i,{isOpen:!!e,itemName:m,progressKind:"listening",listLabel:"my listening list",alsoRemove:r,onAlsoRemoveChange:s,onClose:()=>{s(!1),o()},onConfirm:()=>{e&&(t.mutate({workId:e}),r&&n.mutate(e),s(!1),o())}})};export{A};