most-box 0.0.2 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +222 -156
  3. package/electron/main.js +67 -0
  4. package/out/404/index.html +15 -0
  5. package/out/404.html +15 -0
  6. package/out/__next.__PAGE__.txt +11 -0
  7. package/out/__next._full.txt +21 -0
  8. package/out/__next._head.txt +5 -0
  9. package/out/__next._index.txt +7 -0
  10. package/out/__next._tree.txt +4 -0
  11. package/out/_next/static/alUUgRz4oMlw4EtULOYfV/_buildManifest.js +11 -0
  12. package/out/_next/static/alUUgRz4oMlw4EtULOYfV/_clientMiddlewareManifest.js +1 -0
  13. package/out/_next/static/alUUgRz4oMlw4EtULOYfV/_ssgManifest.js +1 -0
  14. package/out/_next/static/chunks/00s106sbq8t9v.js +1 -0
  15. package/out/_next/static/chunks/0174xh3wfsjm1.js +2 -0
  16. package/out/_next/static/chunks/01xlw8hd842-c.js +1 -0
  17. package/out/_next/static/chunks/02ou_44kkb5dz.js +1 -0
  18. package/out/_next/static/chunks/02pr2b_eos3~h.js +1 -0
  19. package/out/_next/static/chunks/03~yq9q893hmn.js +1 -0
  20. package/out/_next/static/chunks/07lsjkarm1p9f.css +1 -0
  21. package/out/_next/static/chunks/0_-ccbcyh_o30.css +1 -0
  22. package/out/_next/static/chunks/0_b839~4.q324.js +1 -0
  23. package/out/_next/static/chunks/0_sna3wdypbzr.js +1 -0
  24. package/out/_next/static/chunks/0_wia9ofmsi1c.css +2 -0
  25. package/out/_next/static/chunks/0byj66sc-9o0g.js +1 -0
  26. package/out/_next/static/chunks/0bzupvr5gt3k9.js +31 -0
  27. package/out/_next/static/chunks/0d3shmwh5_nmn.js +1 -0
  28. package/out/_next/static/chunks/0du450zbk4kq_.js +1 -0
  29. package/out/_next/static/chunks/0e_h0d3ekzks8.css +1 -0
  30. package/out/_next/static/chunks/0ho~log~~-jwp.css +1 -0
  31. package/out/_next/static/chunks/0ibjp~7qzxfjv.js +5 -0
  32. package/out/_next/static/chunks/0imvn_arv36xt.css +1 -0
  33. package/out/_next/static/chunks/0j9~17180dl8j.js +1 -0
  34. package/out/_next/static/chunks/0ji.28mehrvdp.js +1 -0
  35. package/out/_next/static/chunks/0jl~j62iz2uvr.js +1 -0
  36. package/out/_next/static/chunks/0nct0fubs64d-.js +1 -0
  37. package/out/_next/static/chunks/0n~dq4kpx9xxx.js +1 -0
  38. package/out/_next/static/chunks/0pqt~8bl3ukh4.js +4 -0
  39. package/out/_next/static/chunks/0q7ck9f.90_i9.js +1 -0
  40. package/out/_next/static/chunks/0qub_r0x_r-e9.css +1 -0
  41. package/out/_next/static/chunks/0rr4gwjp9z~9a.js +1 -0
  42. package/out/_next/static/chunks/0ry.po.a~iu4p.js +1 -0
  43. package/out/_next/static/chunks/0slwj0c46k5cu.js +1 -0
  44. package/out/_next/static/chunks/0sorqk.oc6b7j.css +1 -0
  45. package/out/_next/static/chunks/11dalasm30arx.js +1 -0
  46. package/out/_next/static/chunks/turbopack-0a_g3u0ud~jb8.js +1 -0
  47. package/out/_not-found/__next._full.txt +20 -0
  48. package/out/_not-found/__next._head.txt +5 -0
  49. package/out/_not-found/__next._index.txt +7 -0
  50. package/out/_not-found/__next._not-found.__PAGE__.txt +9 -0
  51. package/out/_not-found/__next._not-found.txt +5 -0
  52. package/out/_not-found/__next._tree.txt +2 -0
  53. package/out/_not-found/index.html +15 -0
  54. package/out/_not-found/index.txt +20 -0
  55. package/out/app/__next._full.txt +20 -0
  56. package/out/app/__next._head.txt +5 -0
  57. package/out/app/__next._index.txt +7 -0
  58. package/out/app/__next._tree.txt +2 -0
  59. package/out/app/__next.app.__PAGE__.txt +9 -0
  60. package/out/app/__next.app.txt +5 -0
  61. package/out/app/index.html +15 -0
  62. package/out/app/index.txt +20 -0
  63. package/out/changelog/__next._full.txt +22 -0
  64. package/out/changelog/__next._head.txt +5 -0
  65. package/out/changelog/__next._index.txt +7 -0
  66. package/out/changelog/__next._tree.txt +3 -0
  67. package/out/changelog/__next.changelog.__PAGE__.txt +10 -0
  68. package/out/changelog/__next.changelog.txt +5 -0
  69. package/out/changelog/index.html +15 -0
  70. package/out/changelog/index.txt +22 -0
  71. package/out/chat/__next._full.txt +21 -0
  72. package/out/chat/__next._head.txt +5 -0
  73. package/out/chat/__next._index.txt +7 -0
  74. package/out/chat/__next._tree.txt +3 -0
  75. package/out/chat/__next.chat.__PAGE__.txt +9 -0
  76. package/out/chat/__next.chat.txt +6 -0
  77. package/out/chat/index.html +15 -0
  78. package/out/chat/index.txt +21 -0
  79. package/out/docs/__next._full.txt +22 -0
  80. package/out/docs/__next._head.txt +5 -0
  81. package/out/docs/__next._index.txt +7 -0
  82. package/out/docs/__next._tree.txt +3 -0
  83. package/out/docs/__next.docs.__PAGE__.txt +10 -0
  84. package/out/docs/__next.docs.txt +5 -0
  85. package/out/docs/getting-started/__next._full.txt +22 -0
  86. package/out/docs/getting-started/__next._head.txt +5 -0
  87. package/out/docs/getting-started/__next._index.txt +7 -0
  88. package/out/docs/getting-started/__next._tree.txt +3 -0
  89. package/out/docs/getting-started/__next.docs.getting-started.__PAGE__.txt +10 -0
  90. package/out/docs/getting-started/__next.docs.getting-started.txt +5 -0
  91. package/out/docs/getting-started/__next.docs.txt +5 -0
  92. package/out/docs/getting-started/index.html +15 -0
  93. package/out/docs/getting-started/index.txt +22 -0
  94. package/out/docs/index.html +15 -0
  95. package/out/docs/index.txt +22 -0
  96. package/out/download/__next._full.txt +34 -0
  97. package/out/download/__next._head.txt +5 -0
  98. package/out/download/__next._index.txt +7 -0
  99. package/out/download/__next._tree.txt +4 -0
  100. package/out/download/__next.download.__PAGE__.txt +16 -0
  101. package/out/download/__next.download.txt +5 -0
  102. package/out/download/index.html +15 -0
  103. package/out/download/index.txt +34 -0
  104. package/out/favicon.ico +0 -0
  105. package/out/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
  106. package/out/fonts/jetbrains-mono-latin-500-normal.woff2 +0 -0
  107. package/out/fonts/jetbrains-mono-latin-600-normal.woff2 +0 -0
  108. package/out/fonts/jetbrains-mono-latin-700-normal.woff2 +0 -0
  109. package/out/index.html +15 -0
  110. package/out/index.txt +21 -0
  111. package/out/lottery/__next._full.txt +21 -0
  112. package/out/lottery/__next._head.txt +5 -0
  113. package/out/lottery/__next._index.txt +7 -0
  114. package/out/lottery/__next._tree.txt +3 -0
  115. package/out/lottery/__next.lottery.__PAGE__.txt +9 -0
  116. package/out/lottery/__next.lottery.txt +6 -0
  117. package/out/lottery/index.html +15 -0
  118. package/out/lottery/index.txt +21 -0
  119. package/out/ping/__next._full.txt +21 -0
  120. package/out/ping/__next._head.txt +5 -0
  121. package/out/ping/__next._index.txt +7 -0
  122. package/out/ping/__next._tree.txt +4 -0
  123. package/out/ping/__next.ping.__PAGE__.txt +10 -0
  124. package/out/ping/__next.ping.txt +5 -0
  125. package/out/ping/index.html +15 -0
  126. package/out/ping/index.txt +21 -0
  127. package/out/pwa-512x512.png +0 -0
  128. package/out/web3/__next._full.txt +21 -0
  129. package/out/web3/__next._head.txt +5 -0
  130. package/out/web3/__next._index.txt +7 -0
  131. package/out/web3/__next._tree.txt +3 -0
  132. package/out/web3/__next.web3.__PAGE__.txt +9 -0
  133. package/out/web3/__next.web3.txt +6 -0
  134. package/out/web3/ed25519/__next._full.txt +20 -0
  135. package/out/web3/ed25519/__next._head.txt +5 -0
  136. package/out/web3/ed25519/__next._index.txt +7 -0
  137. package/out/web3/ed25519/__next._tree.txt +3 -0
  138. package/out/web3/ed25519/__next.web3.ed25519.__PAGE__.txt +6 -0
  139. package/out/web3/ed25519/__next.web3.ed25519.txt +5 -0
  140. package/out/web3/ed25519/__next.web3.txt +6 -0
  141. package/out/web3/ed25519/index.html +1 -0
  142. package/out/web3/ed25519/index.txt +20 -0
  143. package/out/web3/index.html +15 -0
  144. package/out/web3/index.txt +21 -0
  145. package/out/web3/tools/__next._full.txt +20 -0
  146. package/out/web3/tools/__next._head.txt +5 -0
  147. package/out/web3/tools/__next._index.txt +7 -0
  148. package/out/web3/tools/__next._tree.txt +3 -0
  149. package/out/web3/tools/__next.web3.tools.__PAGE__.txt +6 -0
  150. package/out/web3/tools/__next.web3.tools.txt +5 -0
  151. package/out/web3/tools/__next.web3.txt +6 -0
  152. package/out/web3/tools/index.html +1 -0
  153. package/out/web3/tools/index.txt +20 -0
  154. package/package.json +162 -48
  155. package/public/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
  156. package/public/fonts/jetbrains-mono-latin-500-normal.woff2 +0 -0
  157. package/public/fonts/jetbrains-mono-latin-600-normal.woff2 +0 -0
  158. package/public/fonts/jetbrains-mono-latin-700-normal.woff2 +0 -0
  159. package/public/pwa-512x512.png +0 -0
  160. package/server/cli.js +3 -0
  161. package/server/index.js +963 -0
  162. package/{src → server/src}/config.js +51 -39
  163. package/{src → server/src}/core/cid.js +157 -146
  164. package/{src → server/src}/index.js +1950 -1201
  165. package/server/src/utils/api.js +68 -0
  166. package/server/src/utils/avatar.js +11 -0
  167. package/{src → server/src}/utils/errors.js +70 -66
  168. package/server/src/utils/mostWallet.js +42 -0
  169. package/server/src/utils/mp.js +117 -0
  170. package/{src → server/src}/utils/security.js +173 -169
  171. package/server/src/utils/userIdentity.js +93 -0
  172. package/build.mjs +0 -40
  173. package/cli.js +0 -2
  174. package/public/app.css +0 -1519
  175. package/public/app.jsx +0 -1543
  176. package/public/bundle.css +0 -1
  177. package/public/bundle.js +0 -107
  178. package/public/error-boundary.jsx +0 -50
  179. package/public/index.html +0 -16
  180. package/public/index.jsx +0 -20
  181. package/server.js +0 -698
package/public/app.css DELETED
@@ -1,1519 +0,0 @@
1
- /* =============================================
2
- MostBox - App Styles
3
- Native CSS with Variables, Nesting, Responsive
4
- ============================================= */
5
-
6
- /* === CSS Variables (Theme) === */
7
- :root {
8
- --bg-primary: #f8fafc;
9
- --bg-secondary: #ffffff;
10
- --bg-tertiary: #f1f5f9;
11
- --text-primary: #0f172a;
12
- --text-secondary: #64748b;
13
- --text-muted: #94a3b8;
14
- --border-color: rgba(0, 0, 0, 0.06);
15
- --accent-blue: #3b82f6;
16
- --danger: #ef4444;
17
- --success: #22c55e;
18
- --warning: #f59e0b;
19
- --info: #6366f1;
20
- }
21
-
22
- [data-theme="dark"] {
23
- --bg-primary: #0f172a;
24
- --bg-secondary: #1e293b;
25
- --bg-tertiary: #334155;
26
- --text-primary: #f8fafc;
27
- --text-secondary: #94a3b8;
28
- --text-muted: #64748b;
29
- --border-color: rgba(255, 255, 255, 0.08);
30
- --accent-blue: #60a5fa;
31
- }
32
-
33
- /* === Base / Reset === */
34
- * {
35
- margin: 0;
36
- padding: 0;
37
- box-sizing: border-box;
38
- }
39
-
40
- body {
41
- font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif;
42
- }
43
-
44
- ::-webkit-scrollbar {
45
- width: 6px;
46
- }
47
-
48
- ::-webkit-scrollbar-thumb {
49
- background: var(--text-muted);
50
- border-radius: 4px;
51
- }
52
-
53
- /* === Layout === */
54
- .app-layout {
55
- display: flex;
56
- min-height: 100vh;
57
- background: var(--bg-primary);
58
- color: var(--text-primary);
59
- }
60
-
61
- /* === Sidebar === */
62
- .sidebar {
63
- width: 200px;
64
- background: var(--bg-tertiary);
65
- display: flex;
66
- flex-direction: column;
67
- border-right: 1px solid var(--border-color);
68
- flex-shrink: 0;
69
-
70
- .sidebar-header {
71
- padding: 20px 16px;
72
- border-bottom: 1px solid var(--border-color);
73
-
74
- h1 {
75
- font-size: 18px;
76
- font-weight: 700;
77
- color: var(--accent-blue);
78
- }
79
- }
80
-
81
- .sidebar-nav {
82
- padding: 12px 8px;
83
- flex: 1;
84
- }
85
-
86
- .sidebar-nav-btn {
87
- width: 100%;
88
- display: flex;
89
- align-items: center;
90
- gap: 10px;
91
- padding: 10px 12px;
92
- border-radius: 8px;
93
- border: none;
94
- cursor: pointer;
95
- margin-bottom: 4px;
96
- background: transparent;
97
- color: var(--text-secondary);
98
- font-weight: 500;
99
- font-size: 13px;
100
- transition: background 0.15s;
101
-
102
- &.active {
103
- background: color-mix(in srgb, var(--accent-blue) 12%, transparent);
104
- color: var(--accent-blue);
105
- font-weight: 600;
106
- }
107
-
108
- &:hover:not(.active) {
109
- background: color-mix(in srgb, var(--accent-blue) 6%, transparent);
110
- }
111
- }
112
-
113
- .sidebar-footer {
114
- padding: 12px 16px;
115
- border-top: 1px solid var(--border-color);
116
- }
117
-
118
- .sidebar-footer-label {
119
- display: flex;
120
- align-items: center;
121
- gap: 6px;
122
- margin-bottom: 6px;
123
- font-size: 11px;
124
- color: var(--text-secondary);
125
- }
126
-
127
- .storage-bar {
128
- height: 4px;
129
- border-radius: 2px;
130
- background: var(--bg-secondary);
131
- overflow: hidden;
132
- }
133
-
134
- .storage-bar-fill {
135
- height: 100%;
136
- background: var(--accent-blue);
137
- transition: width 0.3s;
138
- }
139
-
140
- .storage-info {
141
- display: flex;
142
- justify-content: space-between;
143
- font-size: 10px;
144
- color: var(--text-secondary);
145
- margin-top: 4px;
146
- }
147
- }
148
-
149
- /* === Mobile sidebar overlay === */
150
- .sidebar-overlay {
151
- display: none;
152
- }
153
-
154
- .mobile-menu-btn {
155
- display: none;
156
- }
157
-
158
- /* === Main Content === */
159
- .main-content {
160
- flex: 1;
161
- display: flex;
162
- flex-direction: column;
163
- min-width: 0;
164
- }
165
-
166
- /* === Header === */
167
- .app-header {
168
- display: flex;
169
- justify-content: space-between;
170
- align-items: center;
171
- flex-wrap: wrap;
172
- padding: 16px 24px;
173
- border-bottom: 1px solid var(--border-color);
174
- background: var(--bg-secondary);
175
- gap: 16px;
176
-
177
- .header-left {
178
- display: flex;
179
- align-items: center;
180
- gap: 12px;
181
- }
182
-
183
- .header-title {
184
- font-size: 16px;
185
- font-weight: 600;
186
- }
187
-
188
- .header-badge {
189
- display: flex;
190
- align-items: center;
191
- gap: 4px;
192
- padding: 3px 8px;
193
- border-radius: 12px;
194
- background: var(--bg-tertiary);
195
- font-size: 11px;
196
- color: var(--text-secondary);
197
- }
198
-
199
- .header-badge-dot {
200
- width: 6px;
201
- height: 6px;
202
- border-radius: 50%;
203
- background: var(--warning);
204
-
205
- &.connected {
206
- background: var(--success);
207
- }
208
- }
209
-
210
- .header-right {
211
- display: flex;
212
- align-items: center;
213
- gap: 8px;
214
- flex-wrap: wrap;
215
- }
216
- }
217
-
218
- /* === Search === */
219
- .search-box {
220
- display: flex;
221
- align-items: center;
222
- gap: 8px;
223
- padding: 6px 12px;
224
- border-radius: 8px;
225
- background: var(--bg-tertiary);
226
- border: 1px solid var(--border-color);
227
-
228
- input {
229
- background: none;
230
- border: none;
231
- outline: none;
232
- font-size: 12px;
233
- color: var(--text-primary);
234
- width: 120px;
235
- }
236
-
237
- button {
238
- display: flex;
239
- background: none;
240
- border: none;
241
- cursor: pointer;
242
- color: var(--text-secondary);
243
- padding: 0;
244
- }
245
- }
246
-
247
- /* === Icon Button === */
248
- .icon-btn {
249
- width: 32px;
250
- height: 32px;
251
- border-radius: 8px;
252
- border: none;
253
- background: var(--bg-tertiary);
254
- cursor: pointer;
255
- color: var(--text-secondary);
256
- position: relative;
257
- display: flex;
258
- align-items: center;
259
- justify-content: center;
260
- transition: background 0.15s;
261
-
262
- &:hover {
263
- background: color-mix(in srgb, var(--accent-blue) 10%, var(--bg-tertiary));
264
- }
265
-
266
- &.accent {
267
- color: var(--accent-blue);
268
- }
269
-
270
- &.theme-toggle {
271
- color: #6366f1;
272
- }
273
- }
274
-
275
- .icon-btn-badge {
276
- position: absolute;
277
- top: -4px;
278
- right: -4px;
279
- width: 14px;
280
- height: 14px;
281
- border-radius: 50%;
282
- background: var(--danger);
283
- color: #fff;
284
- font-size: 9px;
285
- font-weight: 700;
286
- display: flex;
287
- align-items: center;
288
- justify-content: center;
289
- }
290
-
291
- /* === Upload / Download Grid === */
292
- .action-grid {
293
- display: grid;
294
- grid-template-columns: 1fr 1fr;
295
- gap: 12px;
296
- padding: 16px 24px;
297
- position: relative;
298
- }
299
-
300
- .action-card {
301
- border: 2px dashed color-mix(in srgb, var(--accent-blue) 20%, transparent);
302
- border-radius: 12px;
303
- padding: 20px;
304
- text-align: center;
305
- cursor: pointer;
306
- position: relative;
307
- background: transparent;
308
- transition: background 0.15s, border-color 0.15s;
309
-
310
- &:hover {
311
- background: color-mix(in srgb, var(--accent-blue) 4%, transparent);
312
- }
313
-
314
- p {
315
- font-size: 12px;
316
- color: var(--accent-blue);
317
- font-weight: 500;
318
- }
319
- }
320
-
321
- .action-card.upload.drag-over {
322
- border-color: var(--accent-blue);
323
- background: color-mix(in srgb, var(--accent-blue) 5%, transparent);
324
- }
325
-
326
- .action-card-download {
327
- p {
328
- color: #6366f1;
329
- }
330
- }
331
-
332
- .action-card-input {
333
- position: absolute;
334
- inset: 0;
335
- width: 100%;
336
- height: 100%;
337
- opacity: 0;
338
- cursor: pointer;
339
- z-index: 1;
340
- }
341
-
342
- /* === Breadcrumb === */
343
- .breadcrumb {
344
- display: flex;
345
- align-items: center;
346
- gap: 4px;
347
- padding: 0 24px;
348
- font-size: 12px;
349
-
350
- button {
351
- background: none;
352
- border: none;
353
- color: var(--text-muted);
354
- cursor: pointer;
355
- }
356
-
357
- button.current {
358
- color: var(--text-secondary);
359
- }
360
-
361
- .breadcrumb-edit-btn {
362
- background: none;
363
- border: none;
364
- cursor: pointer;
365
- color: var(--text-secondary);
366
- padding: 2px;
367
- display: flex;
368
- align-items: center;
369
- }
370
- }
371
-
372
- /* === File Grid === */
373
- .content-grid {
374
- flex: 1;
375
- padding: 12px 24px;
376
- overflow: auto;
377
- }
378
-
379
- .file-grid {
380
- display: grid;
381
- grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
382
- gap: 16px;
383
- }
384
-
385
- /* === Empty State === */
386
- .empty-state {
387
- text-align: center;
388
- color: var(--text-muted);
389
- padding: 48px;
390
- font-size: 13px;
391
- }
392
-
393
- /* === File / Folder Card === */
394
- .card {
395
- display: flex;
396
- flex-direction: column;
397
- align-items: center;
398
- padding: 16px;
399
- border-radius: 12px;
400
- cursor: pointer;
401
- background: var(--bg-secondary);
402
- border: 1px solid var(--border-color);
403
- transition: all 0.15s;
404
-
405
- &:hover {
406
- border-color: var(--accent-blue);
407
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
408
- }
409
-
410
- &.selected {
411
- background: color-mix(in srgb, var(--accent-blue) 8%, transparent);
412
- border-color: var(--accent-blue);
413
- }
414
- }
415
-
416
- .card-icon {
417
- width: 56px;
418
- height: 56px;
419
- border-radius: 12px;
420
- margin-bottom: 10px;
421
- display: flex;
422
- align-items: center;
423
- justify-content: center;
424
- }
425
-
426
- .card-icon.folder {
427
- background: linear-gradient(135deg, #818cf8, #6366f1);
428
- }
429
-
430
- .card-icon.file {
431
- background: linear-gradient(135deg, #a78bfa, #8b5cf6);
432
- }
433
-
434
- .card-icon.starred {
435
- background: linear-gradient(135deg, #fbbf24, #f59e0b);
436
- }
437
-
438
- .card-icon.trash {
439
- background: linear-gradient(135deg, #94a3b8, #64748b);
440
- }
441
-
442
- .card-name {
443
- font-size: 12px;
444
- font-weight: 500;
445
- text-align: center;
446
- max-width: 100%;
447
- overflow: hidden;
448
- text-overflow: ellipsis;
449
- white-space: nowrap;
450
- color: var(--text-primary);
451
- }
452
-
453
- .card-date {
454
- font-size: 10px;
455
- color: var(--text-muted);
456
- margin-top: 2px;
457
- }
458
-
459
- /* === Modal Overlay === */
460
- .modal-overlay {
461
- position: fixed;
462
- inset: 0;
463
- z-index: 200;
464
- background: rgba(0, 0, 0, 0.5);
465
- backdrop-filter: blur(4px);
466
- display: flex;
467
- align-items: center;
468
- justify-content: center;
469
- }
470
-
471
- .modal-container {
472
- width: 380px;
473
- max-width: calc(100vw - 32px);
474
- padding: 24px;
475
- border-radius: 16px;
476
- background: var(--bg-secondary);
477
- border: 1px solid var(--border-color);
478
- }
479
-
480
- .modal-header {
481
- display: flex;
482
- justify-content: space-between;
483
- align-items: center;
484
- margin-bottom: 16px;
485
-
486
- h3 {
487
- font-size: 16px;
488
- font-weight: 600;
489
- }
490
-
491
- button {
492
- background: none;
493
- border: none;
494
- cursor: pointer;
495
- color: var(--text-muted);
496
- }
497
- }
498
-
499
- .modal-close-btn {
500
- background: none;
501
- border: none;
502
- cursor: pointer;
503
- color: var(--text-muted);
504
- }
505
-
506
- /* === Welcome Guide === */
507
- .welcome-modal {
508
- width: 380px;
509
- max-width: calc(100vw - 32px);
510
- padding: 28px;
511
- border-radius: 16px;
512
- background: #fff;
513
- text-align: center;
514
-
515
- h2 {
516
- font-size: 18px;
517
- font-weight: 600;
518
- margin-bottom: 12px;
519
- }
520
-
521
- p {
522
- font-size: 13px;
523
- color: #64748b;
524
- line-height: 1.6;
525
- margin-bottom: 20px;
526
- }
527
- }
528
-
529
- .welcome-steps {
530
- display: flex;
531
- justify-content: center;
532
- gap: 6px;
533
- margin-bottom: 20px;
534
- }
535
-
536
- .welcome-step-dot {
537
- width: 6px;
538
- height: 6px;
539
- border-radius: 50%;
540
- background: #e2e8f0;
541
-
542
- &.active {
543
- background: #3b82f6;
544
- }
545
- }
546
-
547
- .welcome-actions {
548
- display: flex;
549
- gap: 10px;
550
- justify-content: center;
551
- }
552
-
553
- .welcome-success-icon {
554
- width: 48px;
555
- height: 48px;
556
- border-radius: 50%;
557
- background: #dcfce7;
558
- display: flex;
559
- align-items: center;
560
- justify-content: center;
561
- margin: 0 auto 16px;
562
- }
563
-
564
- /* === Buttons === */
565
- .btn {
566
- padding: 10px 20px;
567
- border-radius: 10px;
568
- border: none;
569
- cursor: pointer;
570
- font-size: 14px;
571
- transition: opacity 0.15s;
572
-
573
- &.primary {
574
- background: #3b82f6;
575
- color: #fff;
576
- }
577
-
578
- &.secondary {
579
- background: transparent;
580
- border: 1px solid #e5e7eb;
581
- color: #6b7280;
582
- }
583
-
584
- &.danger {
585
- background: var(--danger);
586
- color: #fff;
587
- }
588
-
589
- &.small {
590
- padding: 6px 12px;
591
- border-radius: 8px;
592
- font-size: 12px;
593
- }
594
-
595
- &.full {
596
- width: 100%;
597
- display: flex;
598
- align-items: center;
599
- justify-content: center;
600
- gap: 6px;
601
- }
602
-
603
- &:disabled {
604
- opacity: 0.5;
605
- cursor: not-allowed;
606
- }
607
- }
608
-
609
- /* === Settings Modal === */
610
- .settings-modal {
611
- width: 420px;
612
- max-width: calc(100vw - 32px);
613
- padding: 28px;
614
- border-radius: 16px;
615
- background: var(--bg-secondary);
616
- border: 1px solid var(--border-color);
617
-
618
- .settings-title {
619
- font-size: 18px;
620
- font-weight: 600;
621
- color: var(--text-primary);
622
- }
623
-
624
- .settings-label {
625
- display: block;
626
- font-size: 13px;
627
- font-weight: 500;
628
- margin-bottom: 8px;
629
- color: var(--text-primary);
630
- }
631
-
632
- .settings-row {
633
- display: flex;
634
- gap: 8px;
635
- align-items: center;
636
- }
637
-
638
- .settings-input {
639
- flex: 1;
640
- padding: 10px 12px;
641
- border-radius: 8px;
642
- border: 1.5px solid var(--border-color);
643
- font-size: 13px;
644
- outline: none;
645
- background: var(--bg-tertiary);
646
- color: var(--text-primary);
647
- }
648
-
649
- .settings-hint {
650
- font-size: 11px;
651
- color: var(--text-muted);
652
- margin-top: 8px;
653
- }
654
-
655
- .settings-divider {
656
- border-top: 1px solid var(--border-color);
657
- padding-top: 16px;
658
- }
659
-
660
- .settings-about {
661
- text-align: center;
662
- margin-bottom: 16px;
663
-
664
- h3 {
665
- font-size: 16px;
666
- font-weight: 600;
667
- margin-bottom: 4px;
668
- color: var(--text-primary);
669
- }
670
-
671
- p {
672
- font-size: 12px;
673
- color: var(--text-muted);
674
- }
675
- }
676
- }
677
-
678
- /* === Input Modal === */
679
- .input-modal {
680
- width: 360px;
681
- max-width: calc(100vw - 32px);
682
- padding: 24px;
683
- border-radius: 16px;
684
- background: var(--bg-secondary);
685
- border: 1px solid var(--border-color);
686
-
687
- h3 {
688
- font-size: 16px;
689
- font-weight: 600;
690
- margin-bottom: 16px;
691
- color: var(--text-primary);
692
- }
693
- }
694
-
695
- .modal-input {
696
- width: 100%;
697
- padding: 10px 12px;
698
- border-radius: 8px;
699
- border: 1.5px solid var(--border-color);
700
- font-size: 13px;
701
- outline: none;
702
- background: var(--bg-tertiary);
703
- color: var(--text-primary);
704
- margin-bottom: 16px;
705
- }
706
-
707
- .modal-actions {
708
- display: flex;
709
- gap: 8px;
710
-
711
- .btn {
712
- flex: 1;
713
- padding: 10px;
714
- border-radius: 8px;
715
- font-size: 13px;
716
- }
717
- }
718
-
719
- /* === Confirm Modal === */
720
- .confirm-modal {
721
- width: 360px;
722
- max-width: calc(100vw - 32px);
723
- padding: 24px;
724
- border-radius: 16px;
725
- background: var(--bg-secondary);
726
- border: 1px solid var(--border-color);
727
-
728
- h3 {
729
- font-size: 16px;
730
- font-weight: 600;
731
- margin-bottom: 12px;
732
- color: var(--text-primary);
733
- }
734
-
735
- p {
736
- font-size: 13px;
737
- color: var(--text-secondary);
738
- margin-bottom: 20px;
739
- }
740
- }
741
-
742
- /* === Move Modal === */
743
- .move-modal {
744
- width: 400px;
745
- max-width: calc(100vw - 32px);
746
- padding: 24px;
747
- border-radius: 16px;
748
- background: var(--bg-secondary);
749
- border: 1px solid var(--border-color);
750
-
751
- .move-breadcrumb {
752
- display: flex;
753
- gap: 6px;
754
- margin-bottom: 12px;
755
- flex-wrap: wrap;
756
- }
757
-
758
- .move-breadcrumb-btn {
759
- padding: 4px 8px;
760
- border-radius: 6px;
761
- border: none;
762
- background: var(--bg-tertiary);
763
- color: var(--text-secondary);
764
- cursor: pointer;
765
- font-size: 12px;
766
-
767
- &.active {
768
- background: color-mix(in srgb, var(--accent-blue) 12%, transparent);
769
- color: var(--accent-blue);
770
- }
771
- }
772
-
773
- .move-folder-list {
774
- max-height: 200px;
775
- overflow: auto;
776
- margin-bottom: 16px;
777
- }
778
-
779
- .move-folder-item {
780
- width: 100%;
781
- display: flex;
782
- align-items: center;
783
- gap: 8px;
784
- padding: 8px 10px;
785
- border-radius: 8px;
786
- border: none;
787
- background: transparent;
788
- cursor: pointer;
789
- font-size: 13px;
790
- color: var(--text-primary);
791
- text-align: left;
792
-
793
- &:hover {
794
- background: var(--bg-tertiary);
795
- }
796
-
797
- &.selected {
798
- background: color-mix(in srgb, var(--accent-blue) 12%, transparent);
799
- color: var(--accent-blue);
800
- }
801
- }
802
-
803
- .move-new-folder {
804
- display: flex;
805
- gap: 8px;
806
- margin-bottom: 16px;
807
-
808
- input {
809
- flex: 1;
810
- padding: 8px 10px;
811
- border-radius: 8px;
812
- border: 1.5px solid var(--border-color);
813
- font-size: 12px;
814
- outline: none;
815
- background: var(--bg-tertiary);
816
- color: var(--text-primary);
817
- }
818
- }
819
- }
820
-
821
- /* === Share Modal === */
822
- .share-modal {
823
- width: 420px;
824
- max-width: calc(100vw - 32px);
825
- padding: 24px;
826
- border-radius: 16px;
827
- background: var(--bg-secondary);
828
- border: 1px solid var(--border-color);
829
-
830
- .share-link-box {
831
- display: flex;
832
- gap: 10px;
833
- margin-bottom: 16px;
834
- }
835
-
836
- .share-link-text {
837
- flex: 1;
838
- padding: 12px 14px;
839
- border-radius: 10px;
840
- background: var(--bg-tertiary);
841
- font-size: 13px;
842
- font-family: monospace;
843
- color: var(--text-primary);
844
- word-break: break-all;
845
- }
846
-
847
- .share-copy-btn {
848
- width: 44px;
849
- border-radius: 10px;
850
- border: none;
851
- background: var(--accent-blue);
852
- color: #fff;
853
- cursor: pointer;
854
-
855
- &.copied {
856
- background: var(--success);
857
- }
858
- }
859
- }
860
-
861
- /* === Download Modal === */
862
- .download-modal {
863
- width: 400px;
864
- max-width: calc(100vw - 32px);
865
- padding: 24px;
866
- border-radius: 16px;
867
- background: var(--bg-secondary);
868
- border: 1px solid var(--border-color);
869
-
870
- .download-input {
871
- width: 100%;
872
- padding: 12px 14px;
873
- border-radius: 10px;
874
- border: 1.5px solid var(--border-color);
875
- font-size: 13px;
876
- font-family: monospace;
877
- outline: none;
878
- background: var(--bg-tertiary);
879
- color: var(--text-primary);
880
- margin-bottom: 16px;
881
- }
882
-
883
- .download-btn {
884
- width: 100%;
885
- padding: 12px;
886
- border-radius: 10px;
887
- border: none;
888
- background: var(--info);
889
- color: #fff;
890
- font-size: 13px;
891
- font-weight: 600;
892
- cursor: pointer;
893
-
894
- &:disabled {
895
- background: var(--bg-tertiary);
896
- color: var(--text-muted);
897
- cursor: not-allowed;
898
- }
899
- }
900
- }
901
-
902
- /* === Preview === */
903
- .preview-overlay {
904
- position: fixed;
905
- inset: 0;
906
- z-index: 200;
907
- background: rgba(0, 0, 0, 0.9);
908
- display: flex;
909
- align-items: center;
910
- justify-content: center;
911
- padding: 24px;
912
-
913
- .preview-close {
914
- position: absolute;
915
- top: 20px;
916
- right: 20px;
917
- width: 36px;
918
- height: 36px;
919
- border-radius: 10px;
920
- border: none;
921
- background: rgba(255, 255, 255, 0.1);
922
- cursor: pointer;
923
- color: #fff;
924
- }
925
-
926
- img,
927
- video {
928
- max-width: 100%;
929
- max-height: 80vh;
930
- border-radius: 12px;
931
- }
932
-
933
- .preview-audio {
934
- background: rgba(255, 255, 255, 0.05);
935
- border-radius: 16px;
936
- padding: 40px 48px;
937
- display: flex;
938
- flex-direction: column;
939
- align-items: center;
940
- gap: 20px;
941
- min-width: 320px;
942
- }
943
-
944
- .preview-audio-icon {
945
- width: 72px;
946
- height: 72px;
947
- border-radius: 50%;
948
- background: rgba(59, 130, 246, 0.15);
949
- display: flex;
950
- align-items: center;
951
- justify-content: center;
952
- }
953
-
954
- .preview-audio-filename {
955
- font-size: 14px;
956
- color: var(--text-secondary);
957
- margin: 0;
958
- text-align: center;
959
- max-width: 100%;
960
- overflow: hidden;
961
- text-overflow: ellipsis;
962
- white-space: nowrap;
963
- }
964
-
965
- .preview-audio-player {
966
- width: 100%;
967
- max-width: 400px;
968
- height: 40px;
969
- }
970
-
971
- .preview-audio-player::-webkit-media-controls-panel {
972
- background: var(--bg-tertiary);
973
- }
974
- }
975
-
976
- /* === Batch Action Bar === */
977
- .batch-bar {
978
- position: fixed;
979
- bottom: 24px;
980
- left: 50%;
981
- transform: translateX(-50%);
982
- display: flex;
983
- align-items: center;
984
- gap: 8px;
985
- padding: 10px 16px;
986
- border-radius: 12px;
987
- background: var(--bg-secondary);
988
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
989
- border: 1px solid var(--border-color);
990
- z-index: 100;
991
-
992
- .batch-info {
993
- font-size: 12px;
994
- color: var(--text-secondary);
995
- }
996
-
997
- .batch-dismiss {
998
- background: none;
999
- border: none;
1000
- cursor: pointer;
1001
- color: var(--text-muted);
1002
- padding: 4px;
1003
- }
1004
-
1005
- .batch-divider {
1006
- width: 1px;
1007
- height: 20px;
1008
- background: var(--border-color);
1009
- }
1010
- }
1011
-
1012
- /* === Transfer Panel === */
1013
- .transfer-modal {
1014
- width: 380px;
1015
- max-width: calc(100vw - 32px);
1016
- max-height: 70vh;
1017
- padding: 24px;
1018
- border-radius: 16px;
1019
- background: var(--bg-secondary);
1020
- border: 1px solid var(--border-color);
1021
- overflow: auto;
1022
-
1023
- .transfer-item {
1024
- padding: 10px 0;
1025
- border-bottom: 1px solid var(--border-color);
1026
- }
1027
-
1028
- .transfer-item-header {
1029
- display: flex;
1030
- align-items: center;
1031
- gap: 8px;
1032
- margin-bottom: 4px;
1033
- }
1034
-
1035
- .transfer-item-name {
1036
- font-size: 12px;
1037
- font-weight: 500;
1038
- flex: 1;
1039
- overflow: hidden;
1040
- text-overflow: ellipsis;
1041
- white-space: nowrap;
1042
- }
1043
-
1044
- .transfer-item-cancel {
1045
- background: none;
1046
- border: none;
1047
- cursor: pointer;
1048
- color: var(--danger);
1049
- padding: 2px;
1050
- }
1051
-
1052
- .transfer-progress-row {
1053
- display: flex;
1054
- align-items: center;
1055
- gap: 8px;
1056
- }
1057
-
1058
- .transfer-progress-bar {
1059
- flex: 1;
1060
- height: 4px;
1061
- border-radius: 2px;
1062
- background: var(--bg-tertiary);
1063
- }
1064
-
1065
- .transfer-progress-fill {
1066
- height: 100%;
1067
- border-radius: 2px;
1068
- background: var(--accent-blue);
1069
- transition: width 0.2s;
1070
-
1071
- &.download {
1072
- background: var(--info);
1073
- }
1074
-
1075
- &.error {
1076
- background: var(--danger);
1077
- }
1078
-
1079
- &.cancelled {
1080
- background: var(--warning);
1081
- }
1082
- }
1083
-
1084
- .transfer-progress-text {
1085
- font-size: 10px;
1086
- color: var(--text-muted);
1087
- min-width: 32px;
1088
- text-align: right;
1089
- }
1090
- }
1091
-
1092
- /* === Toast === */
1093
- @keyframes toastSlideIn {
1094
- from {
1095
- transform: translateX(100%);
1096
- opacity: 0;
1097
- }
1098
-
1099
- to {
1100
- transform: translateX(0);
1101
- opacity: 1;
1102
- }
1103
- }
1104
-
1105
- .toast {
1106
- position: fixed;
1107
- right: 24px;
1108
- z-index: 9999;
1109
- color: #fff;
1110
- padding: 12px 20px;
1111
- border-radius: 12px;
1112
- font-size: 13px;
1113
- font-weight: 500;
1114
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
1115
- animation: toastSlideIn 0.2s ease;
1116
-
1117
- &.success {
1118
- background: var(--success);
1119
- }
1120
-
1121
- &.error {
1122
- background: var(--danger);
1123
- }
1124
-
1125
- &.warning {
1126
- background: var(--warning);
1127
- }
1128
-
1129
- &.info {
1130
- background: var(--accent-blue);
1131
- }
1132
- }
1133
-
1134
- /* === Welcome Guide Path Step === */
1135
- .welcome-path-section {
1136
- text-align: left;
1137
- margin-bottom: 20px;
1138
-
1139
- .path-label {
1140
- font-size: 12px;
1141
- color: #9ca3af;
1142
- margin-bottom: 4px;
1143
- }
1144
-
1145
- .path-value {
1146
- font-size: 12px;
1147
- color: #374151;
1148
- font-family: monospace;
1149
- background: #f3f4f6;
1150
- padding: 8px 10px;
1151
- border-radius: 6px;
1152
- word-break: break-all;
1153
- margin-bottom: 12px;
1154
- }
1155
-
1156
- .path-input {
1157
- width: 100%;
1158
- padding: 10px 12px;
1159
- border-radius: 8px;
1160
- border: 1.5px solid #e5e7eb;
1161
- font-size: 13px;
1162
- outline: none;
1163
- box-sizing: border-box;
1164
- }
1165
-
1166
- .path-hint {
1167
- font-size: 11px;
1168
- color: #9ca3af;
1169
- margin-top: 4px;
1170
- }
1171
- }
1172
-
1173
- /* =============================================
1174
- Responsive Design
1175
- ============================================= */
1176
- @media (max-width: 768px) {
1177
-
1178
- /* Sidebar: drawer mode */
1179
- .sidebar {
1180
- position: fixed;
1181
- top: 0;
1182
- left: 0;
1183
- bottom: 0;
1184
- z-index: 300;
1185
- transform: translateX(-100%);
1186
- transition: transform 0.25s ease;
1187
- width: 240px;
1188
-
1189
- &.open {
1190
- transform: translateX(0);
1191
- }
1192
- }
1193
-
1194
- .sidebar-overlay {
1195
- display: block;
1196
- position: fixed;
1197
- inset: 0;
1198
- z-index: 299;
1199
- background: rgba(0, 0, 0, 0.4);
1200
- opacity: 0;
1201
- visibility: hidden;
1202
- transition: opacity 0.25s ease, visibility 0.25s ease;
1203
-
1204
- &.visible {
1205
- opacity: 1;
1206
- visibility: visible;
1207
- }
1208
- }
1209
-
1210
- .mobile-menu-btn {
1211
- display: flex;
1212
- }
1213
-
1214
- /* Header */
1215
- .app-header {
1216
- padding: 12px 16px;
1217
- gap: 8px;
1218
-
1219
- .header-right {
1220
- gap: 4px;
1221
- }
1222
- }
1223
-
1224
- /* Upload/Download */
1225
- .action-grid {
1226
- grid-template-columns: 1fr;
1227
- padding: 12px 16px;
1228
- gap: 8px;
1229
- }
1230
-
1231
- .action-card {
1232
- padding: 14px;
1233
- }
1234
-
1235
- /* Breadcrumb */
1236
- .breadcrumb {
1237
- padding: 0 16px;
1238
- }
1239
-
1240
- /* Content */
1241
- .content-grid {
1242
- padding: 12px 16px;
1243
- }
1244
-
1245
- .file-grid {
1246
- grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
1247
- gap: 10px;
1248
- }
1249
-
1250
- /* Card */
1251
- .card {
1252
- padding: 12px;
1253
- }
1254
-
1255
- .card-icon {
1256
- width: 44px;
1257
- height: 44px;
1258
- border-radius: 10px;
1259
- margin-bottom: 8px;
1260
- }
1261
-
1262
- .card-name {
1263
- font-size: 11px;
1264
- }
1265
-
1266
- /* Modals: bottom sheet style */
1267
- .modal-overlay {
1268
- align-items: flex-end;
1269
- padding: 0;
1270
- }
1271
-
1272
- .modal-container {
1273
- width: 100%;
1274
- max-width: 100%;
1275
- border-radius: 16px 16px 0 0;
1276
- max-height: 85vh;
1277
- overflow: auto;
1278
- }
1279
-
1280
- .welcome-modal {
1281
- width: 100%;
1282
- max-width: 100%;
1283
- border-radius: 16px 16px 0 0;
1284
- }
1285
-
1286
- .settings-modal {
1287
- width: 100%;
1288
- max-width: 100%;
1289
- border-radius: 16px 16px 0 0;
1290
- }
1291
-
1292
- .input-modal {
1293
- width: 100%;
1294
- max-width: 100%;
1295
- border-radius: 16px 16px 0 0;
1296
- }
1297
-
1298
- .confirm-modal {
1299
- width: 100%;
1300
- max-width: 100%;
1301
- border-radius: 16px 16px 0 0;
1302
- }
1303
-
1304
- .move-modal {
1305
- width: 100%;
1306
- max-width: 100%;
1307
- border-radius: 16px 16px 0 0;
1308
- }
1309
-
1310
- .share-modal {
1311
- width: 100%;
1312
- max-width: 100%;
1313
- border-radius: 16px 16px 0 0;
1314
- }
1315
-
1316
- .download-modal {
1317
- width: 100%;
1318
- max-width: 100%;
1319
- border-radius: 16px 16px 0 0;
1320
- }
1321
-
1322
- .transfer-modal {
1323
- width: 100%;
1324
- max-width: 100%;
1325
- border-radius: 16px 16px 0 0;
1326
- }
1327
-
1328
- /* Toast */
1329
- .toast {
1330
- right: 12px;
1331
- left: 12px;
1332
- }
1333
-
1334
- /* Batch bar */
1335
- .batch-bar {
1336
- left: 8px;
1337
- right: 8px;
1338
- transform: none;
1339
- flex-wrap: wrap;
1340
- justify-content: center;
1341
- bottom: 12px;
1342
- gap: 6px;
1343
- }
1344
-
1345
- /* Preview */
1346
- .preview-overlay {
1347
- padding: 12px;
1348
- }
1349
- }
1350
-
1351
- @media (max-width: 480px) {
1352
- .file-grid {
1353
- grid-template-columns: repeat(auto-fill, minmax(90px, 1fr));
1354
- gap: 8px;
1355
- }
1356
-
1357
- .card {
1358
- padding: 10px;
1359
- }
1360
-
1361
- .card-icon {
1362
- width: 40px;
1363
- height: 40px;
1364
- margin-bottom: 6px;
1365
- }
1366
-
1367
- .card-name {
1368
- font-size: 10px;
1369
- }
1370
-
1371
- .app-header {
1372
- padding: 10px 12px;
1373
-
1374
- .header-title {
1375
- font-size: 14px;
1376
- }
1377
-
1378
- .header-badge {
1379
- font-size: 10px;
1380
- padding: 2px 6px;
1381
- }
1382
- }
1383
-
1384
- .action-grid {
1385
- padding: 10px 12px;
1386
- }
1387
-
1388
- .content-grid {
1389
- padding: 10px 12px;
1390
- }
1391
-
1392
- .breadcrumb {
1393
- padding: 0 12px;
1394
- font-size: 11px;
1395
- }
1396
-
1397
- .batch-bar {
1398
- padding: 8px 12px;
1399
- gap: 4px;
1400
-
1401
- .batch-info {
1402
- font-size: 11px;
1403
- }
1404
- }
1405
- }
1406
-
1407
- /* Preview Text Container */
1408
- .preview-text-container {
1409
- width: 90vw;
1410
- max-width: 900px;
1411
- max-height: 80vh;
1412
- overflow: auto;
1413
- background: var(--bg-secondary);
1414
- border-radius: 12px;
1415
- padding: 20px;
1416
- display: flex;
1417
- flex-direction: column;
1418
- }
1419
-
1420
- .preview-text-header {
1421
- display: flex;
1422
- justify-content: space-between;
1423
- align-items: center;
1424
- margin-bottom: 16px;
1425
- padding-bottom: 12px;
1426
- border-bottom: 1px solid var(--border-color);
1427
- font-size: 13px;
1428
- color: var(--text-secondary);
1429
- }
1430
-
1431
- .preview-text {
1432
- color: #0f172a;
1433
- font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;
1434
- font-size: 13px;
1435
- line-height: 1.6;
1436
- white-space: pre-wrap;
1437
- word-break: break-all;
1438
- margin: 0;
1439
- overflow: auto;
1440
- max-height: 100%;
1441
- }
1442
-
1443
- .preview-text-loading {
1444
- display: flex;
1445
- flex-direction: column;
1446
- align-items: center;
1447
- justify-content: center;
1448
- padding: 40px 20px;
1449
- color: var(--text-secondary);
1450
- gap: 12px;
1451
- }
1452
-
1453
- .preview-text-spinner {
1454
- animation: spin 0.8s linear infinite;
1455
- opacity: 0.6;
1456
- }
1457
-
1458
- .preview-text-loading-hint {
1459
- font-size: 12px;
1460
- opacity: 0.6;
1461
- text-align: center;
1462
- max-width: 300px;
1463
- }
1464
-
1465
- .preview-media-wrapper {
1466
- position: relative;
1467
- display: flex;
1468
- align-items: center;
1469
- justify-content: center;
1470
- min-width: 100px;
1471
- min-height: 100px;
1472
- }
1473
-
1474
- .preview-media-wrapper .preview-loading {
1475
- position: absolute;
1476
- inset: 0;
1477
- display: flex;
1478
- align-items: center;
1479
- justify-content: center;
1480
- z-index: 1;
1481
- }
1482
-
1483
- .preview-loading-spinner {
1484
- width: 32px;
1485
- height: 32px;
1486
- border: 3px solid rgba(255, 255, 255, 0.2);
1487
- border-top-color: #fff;
1488
- border-radius: 50%;
1489
- animation: spin 0.8s linear infinite;
1490
- }
1491
-
1492
- @keyframes spin {
1493
- to { transform: rotate(360deg); }
1494
- }
1495
-
1496
- .preview-media-wrapper img,
1497
- .preview-media-wrapper video {
1498
- max-width: 100%;
1499
- max-height: 80vh;
1500
- border-radius: 12px;
1501
- }
1502
-
1503
- .preview-unsupported {
1504
- background: var(--bg-secondary);
1505
- border-radius: 12px;
1506
- padding: 40px;
1507
- text-align: center;
1508
- color: var(--text-primary);
1509
- }
1510
-
1511
- .preview-unsupported p:first-of-type {
1512
- font-size: 14px;
1513
- font-weight: 500;
1514
- word-break: break-all;
1515
- }
1516
-
1517
- [data-theme="dark"] .preview-text {
1518
- color: #e2e8f0;
1519
- }