most-box 0.0.2 → 0.0.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 (68) hide show
  1. package/README.md +26 -0
  2. package/cli.js +2 -2
  3. package/out/404/index.html +15 -0
  4. package/out/404.html +15 -0
  5. package/out/__next.__PAGE__.txt +9 -0
  6. package/out/__next._full.txt +18 -0
  7. package/out/__next._head.txt +5 -0
  8. package/out/__next._index.txt +6 -0
  9. package/out/__next._tree.txt +2 -0
  10. package/out/_next/static/0h4f4QFk_KC9FlSRfQACk/_buildManifest.js +11 -0
  11. package/out/_next/static/0h4f4QFk_KC9FlSRfQACk/_clientMiddlewareManifest.js +1 -0
  12. package/out/_next/static/0h4f4QFk_KC9FlSRfQACk/_ssgManifest.js +1 -0
  13. package/out/_next/static/chunks/00l-yd3t8dvwz.js +5 -0
  14. package/out/_next/static/chunks/03k8t3tgym~8~.js +1 -0
  15. package/out/_next/static/chunks/03~yq9q893hmn.js +1 -0
  16. package/out/_next/static/chunks/09vfh8lfuacc0.css +1 -0
  17. package/out/_next/static/chunks/0bogtdbh.dcu1.js +1 -0
  18. package/out/_next/static/chunks/0dbhjjzl8qfwv.js +1 -0
  19. package/out/_next/static/chunks/0f73psqhr8dre.css +1 -0
  20. package/out/_next/static/chunks/0fbi7z4_.4j1j.js +1 -0
  21. package/out/_next/static/chunks/0ht900cau6_ur.js +31 -0
  22. package/out/_next/static/chunks/0ohm.ia-4ec60.js +1 -0
  23. package/out/_next/static/chunks/0u5ydb-f0.vxl.js +1 -0
  24. package/out/_next/static/chunks/14t2m1on-s5v~.js +1 -0
  25. package/out/_next/static/chunks/turbopack-076ce9exut_h3.js +1 -0
  26. package/out/_not-found/__next._full.txt +16 -0
  27. package/out/_not-found/__next._head.txt +5 -0
  28. package/out/_not-found/__next._index.txt +6 -0
  29. package/out/_not-found/__next._not-found/__PAGE__.txt +5 -0
  30. package/out/_not-found/__next._not-found.txt +5 -0
  31. package/out/_not-found/__next._tree.txt +2 -0
  32. package/out/_not-found/index.html +15 -0
  33. package/out/_not-found/index.txt +16 -0
  34. package/out/app.css +1535 -0
  35. package/out/bundle.js +107 -0
  36. package/out/bundle.js.map +7 -0
  37. package/out/chat/__next._full.txt +19 -0
  38. package/out/chat/__next._head.txt +5 -0
  39. package/out/chat/__next._index.txt +6 -0
  40. package/out/chat/__next._tree.txt +3 -0
  41. package/out/chat/__next.chat/__PAGE__.txt +9 -0
  42. package/out/chat/__next.chat.txt +5 -0
  43. package/out/chat/index.html +15 -0
  44. package/out/chat/index.txt +19 -0
  45. package/out/chat-page.js +112 -0
  46. package/out/chat.css +378 -0
  47. package/out/favicon.ico +0 -0
  48. package/out/index.html +15 -0
  49. package/out/index.js +148 -0
  50. package/out/index.txt +18 -0
  51. package/package.json +11 -6
  52. package/public/app.css +20 -4
  53. package/public/bundle.js +1 -1
  54. package/public/bundle.js.map +7 -0
  55. package/public/chat-page.js +112 -0
  56. package/public/chat.css +378 -0
  57. package/public/index.js +148 -0
  58. package/server.js +188 -6
  59. package/src/config.js +12 -1
  60. package/src/core/cid.js +7 -3
  61. package/src/index.js +475 -7
  62. package/src/utils/api.js +6 -0
  63. package/build.mjs +0 -40
  64. package/public/app.jsx +0 -1543
  65. package/public/bundle.css +0 -1
  66. package/public/error-boundary.jsx +0 -50
  67. package/public/index.html +0 -16
  68. package/public/index.jsx +0 -20
package/out/app.css ADDED
@@ -0,0 +1,1535 @@
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
+ }