most-box 0.0.4 → 0.0.7

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