instbyte 1.9.1 → 1.9.2

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.
@@ -1,1973 +1,1973 @@
1
- /* ============================================================
2
- CSS CUSTOM PROPERTIES
3
- ============================================================ */
4
- :root {
5
- --color-primary: #111827;
6
- --color-primary-hover: #1f2937;
7
- --color-primary-light: #f3f4f6;
8
- --color-primary-dark: #030712;
9
- --color-on-primary: #ffffff;
10
- --color-secondary: #6b7280;
11
- --color-secondary-hover: #4b5563;
12
- --color-secondary-light: #f9fafb;
13
- --color-on-secondary: #ffffff;
14
- }
15
-
16
-
17
- /* ============================================================
18
- BASE
19
- ============================================================ */
20
- body {
21
- font-family: system-ui;
22
- background: #f3f4f6;
23
- margin: 0;
24
- }
25
-
26
- header {
27
- background: #ffffff;
28
- color: #111827;
29
- padding: 14px 20px;
30
- border-bottom: 1px solid #e5e7eb;
31
- }
32
-
33
- button {
34
- padding: 10px 14px;
35
- border: none;
36
- background: var(--color-primary);
37
- color: var(--color-on-primary);
38
- border-radius: 6px;
39
- cursor: pointer;
40
- }
41
-
42
- input[type=text] {
43
- flex: 1;
44
- padding: 10px;
45
- border: 1px solid #ddd;
46
- border-radius: 6px;
47
- }
48
-
49
- input[type=text]:focus {
50
- outline: none;
51
- border-color: var(--color-primary);
52
- box-shadow: 0 0 0 3px var(--color-primary-light);
53
- }
54
-
55
-
56
- /* ============================================================
57
- LAYOUT
58
- ============================================================ */
59
- .container {
60
- max-width: 900px;
61
- margin: 20px auto;
62
- padding: 0 12px;
63
- }
64
-
65
-
66
- /* ============================================================
67
- HEADER
68
- ============================================================ */
69
- .app-header {
70
- background: #ffffff;
71
- border-bottom: 1px solid #e5e7eb;
72
- padding: 10px 20px;
73
- display: flex;
74
- align-items: center;
75
- justify-content: space-between;
76
- gap: 20px;
77
- }
78
-
79
- .header-left {
80
- display: flex;
81
- align-items: center;
82
- gap: 10px;
83
- }
84
-
85
- .logo {
86
- height: 24px;
87
- filter: none;
88
- }
89
-
90
- .app-name {
91
- font-weight: 600;
92
- font-size: 15px;
93
- color: #111827;
94
- }
95
-
96
- .header-center {
97
- flex: 1;
98
- display: flex;
99
- justify-content: center;
100
- }
101
-
102
- .header-right {
103
- display: flex;
104
- align-items: center;
105
- gap: 8px;
106
- font-size: 13px;
107
- }
108
-
109
- .username-display {
110
- font-size: 13px;
111
- color: #374151;
112
- cursor: pointer;
113
- border-bottom: 1px dashed transparent;
114
- transition: border-color 0.15s ease, color 0.15s ease;
115
- padding-bottom: 1px;
116
- }
117
-
118
- .username-display:hover {
119
- color: #111827;
120
- border-bottom-color: #9ca3af;
121
- }
122
-
123
- .online-count {
124
- font-size: 12px;
125
- color: #9ca3af;
126
- }
127
-
128
- .link-btn {
129
- background: none;
130
- border: none;
131
- color: #6b7280;
132
- cursor: pointer;
133
- font-size: 13px;
134
- padding: 0;
135
- }
136
-
137
- .link-btn:hover {
138
- color: #111827;
139
- }
140
-
141
- .theme-toggle {
142
- font-size: 15px;
143
- padding: 2px 6px;
144
- border-radius: 6px;
145
- transition: background 0.15s ease;
146
- }
147
-
148
- .theme-toggle:hover {
149
- background: #f3f4f6;
150
- }
151
-
152
- .logout-btn {
153
- background: none;
154
- border: 1px solid #e5e7eb;
155
- color: #6b7280;
156
- cursor: pointer;
157
- font-size: 12px;
158
- padding: 4px 10px;
159
- border-radius: 6px;
160
- transition: all 0.15s ease;
161
- }
162
-
163
- .logout-btn:hover {
164
- background: #fee2e2;
165
- border-color: #fecaca;
166
- color: #b91c1c;
167
- }
168
-
169
-
170
- /* ============================================================
171
- SEARCH
172
- ============================================================ */
173
- .search-wrapper {
174
- position: relative;
175
- width: 100%;
176
- max-width: 420px;
177
- }
178
-
179
- .search-wrapper input {
180
- width: 100%;
181
- padding: 8px 12px 8px 32px;
182
- border-radius: 8px;
183
- border: 1px solid #e5e7eb;
184
- background: #f9fafb;
185
- font-size: 14px;
186
- }
187
-
188
- .search-wrapper input:focus {
189
- outline: none;
190
- border-color: #d1d5db;
191
- background: #ffffff;
192
- }
193
-
194
- .search-icon {
195
- position: absolute;
196
- left: 10px;
197
- top: 50%;
198
- transform: translateY(-50%);
199
- font-size: 14px;
200
- color: #9ca3af;
201
- }
202
-
203
-
204
- /* ============================================================
205
- CHANNEL BAR
206
- ============================================================ */
207
- .channel-bar {
208
- background: #e5e7eb;
209
- border-radius: 12px;
210
- padding: 6px;
211
- margin-bottom: 16px;
212
- display: flex;
213
- align-items: center;
214
- gap: 6px;
215
- position: relative;
216
- }
217
-
218
- .channels {
219
- flex: 1;
220
- display: flex;
221
- gap: 6px;
222
- }
223
-
224
- .channels::-webkit-scrollbar {
225
- display: none;
226
- }
227
-
228
- .channels button {
229
- position: relative;
230
- display: flex;
231
- align-items: center;
232
- gap: 4px;
233
- background: transparent;
234
- border: none;
235
- padding: 7px 12px;
236
- border-radius: 10px;
237
- cursor: pointer;
238
- font-size: 14px;
239
- color: #4b5563;
240
- transition: all 0.15s ease;
241
- }
242
-
243
- .channels button:hover {
244
- background: #d1d5db;
245
- color: #111827;
246
- }
247
-
248
- .channels button.active {
249
- background: #f9fafb;
250
- color: #111827;
251
- }
252
-
253
- .add-channel {
254
- background: transparent;
255
- color: #6b7280;
256
- font-weight: 600;
257
- border: none;
258
- padding: 8px 16px;
259
- border-radius: 10px;
260
- cursor: pointer;
261
- }
262
-
263
- .add-channel:hover {
264
- background: #d1d5db;
265
- }
266
-
267
- .add-channel-mobile {
268
- display: none;
269
- }
270
-
271
- .ch-pin-dot {
272
- display: inline-block;
273
- width: 6px;
274
- height: 6px;
275
- background: #f59e0b;
276
- border-radius: 50%;
277
- flex-shrink: 0;
278
- }
279
-
280
- .ch-unread-dot {
281
- display: inline-block;
282
- width: 7px;
283
- height: 7px;
284
- background: #3b82f6;
285
- border-radius: 50%;
286
- flex-shrink: 0;
287
- margin-left: 2px;
288
- }
289
-
290
- .ch-more {
291
- display: inline-flex;
292
- align-items: center;
293
- justify-content: center;
294
- width: 18px;
295
- height: 18px;
296
- border-radius: 4px;
297
- font-size: 13px;
298
- color: #6b7280;
299
- opacity: 0;
300
- transition: opacity 0.12s ease, background 0.12s ease;
301
- margin-left: 2px;
302
- line-height: 1;
303
- }
304
-
305
- .channels button:hover .ch-more,
306
- .channels button.active .ch-more {
307
- opacity: 1;
308
- }
309
-
310
- .ch-more:hover {
311
- background: rgba(0, 0, 0, 0.1);
312
- color: #111827;
313
- }
314
-
315
-
316
- /* ============================================================
317
- COMPOSER
318
- ============================================================ */
319
- .composer {
320
- background: #fff;
321
- padding: 12px;
322
- border-radius: 8px;
323
- margin-top: 12px;
324
- display: flex;
325
- gap: 8px;
326
- }
327
-
328
- .drop {
329
- border: 2px dashed #ccc;
330
- padding: 18px;
331
- margin-top: 12px;
332
- text-align: center;
333
- background: #fff;
334
- border-radius: 8px;
335
- }
336
-
337
-
338
- /* ============================================================
339
- ITEMS
340
- ============================================================ */
341
- .item {
342
- background: #fff;
343
- color: #111827;
344
- padding: 12px;
345
- margin-top: 10px;
346
- border-radius: 8px;
347
- display: flex;
348
- flex-direction: column;
349
- align-items: stretch;
350
- transition: box-shadow 0.15s ease;
351
- }
352
-
353
- .item:hover {
354
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
355
- }
356
-
357
- .item-top {
358
- display: flex;
359
- justify-content: space-between;
360
- align-items: center;
361
- }
362
-
363
- .meta {
364
- font-size: 12px;
365
- color: #6b7280;
366
- }
367
-
368
- .left {
369
- max-width: 70%;
370
- word-break: break-word;
371
- cursor: pointer;
372
- position: relative;
373
- color: #111827;
374
- }
375
-
376
- .left:hover::after {
377
- content: attr(data-tooltip);
378
- position: absolute;
379
- bottom: calc(100% + 6px);
380
- left: 0;
381
- background: #111827;
382
- color: #fff;
383
- font-size: 11px;
384
- padding: 4px 8px;
385
- border-radius: 5px;
386
- white-space: nowrap;
387
- pointer-events: none;
388
- z-index: 10;
389
- }
390
-
391
- .left.flash {
392
- background: #d1fae5;
393
- border-radius: 6px;
394
- transition: background 0.3s ease;
395
- }
396
-
397
- .item-actions {
398
- display: flex;
399
- gap: 6px;
400
- align-items: flex-start;
401
- }
402
-
403
- .empty-state {
404
- text-align: center;
405
- color: #9ca3af;
406
- font-size: 14px;
407
- padding: 60px 20px;
408
- }
409
-
410
-
411
- /* ============================================================
412
- SIZE TAGS
413
- ============================================================ */
414
- .size-tag {
415
- display: inline-block;
416
- font-size: 11px;
417
- font-weight: 500;
418
- padding: 2px 7px;
419
- border-radius: 4px;
420
- margin-left: 6px;
421
- vertical-align: middle;
422
- }
423
-
424
- .size-tag.warn {
425
- background: #fef9c3;
426
- color: #854d0e;
427
- }
428
-
429
- .size-tag.danger-light {
430
- background: #fee2e2;
431
- color: #b91c1c;
432
- }
433
-
434
- .size-tag.danger-dark {
435
- background: #7f1d1d;
436
- color: #fff;
437
- }
438
-
439
-
440
- /* ============================================================
441
- ICON BUTTONS
442
- ============================================================ */
443
- .icon-btn {
444
- background: #f9fafb;
445
- border: 1px solid #e5e7eb;
446
- border-radius: 6px;
447
- padding: 5px 7px;
448
- cursor: pointer;
449
- font-size: 13px;
450
- line-height: 1;
451
- color: #6b7280;
452
- width: 28px;
453
- height: 28px;
454
- display: flex;
455
- align-items: center;
456
- justify-content: center;
457
- }
458
-
459
- .icon-btn:hover {
460
- background: #e5e7eb;
461
- }
462
-
463
- .icon-btn.delete {
464
- color: #b91c1c;
465
- border-color: #fecaca;
466
- background: #fff;
467
- }
468
-
469
- .icon-btn.delete:hover {
470
- background: #fee2e2;
471
- }
472
-
473
- .icon-btn.preview-active {
474
- background: #eff6ff;
475
- border-color: #bfdbfe;
476
- color: #1d4ed8;
477
- }
478
-
479
-
480
- /* ============================================================
481
- MOVE DROPDOWN
482
- ============================================================ */
483
- .move-wrapper {
484
- position: relative;
485
- }
486
-
487
- .move-dropdown {
488
- position: absolute;
489
- bottom: calc(100% + 6px);
490
- right: 0;
491
- background: #fff;
492
- border: 1px solid #e5e7eb;
493
- border-radius: 8px;
494
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
495
- z-index: 100;
496
- min-width: 130px;
497
- overflow: hidden;
498
- display: none;
499
- }
500
-
501
- .move-dropdown.open {
502
- display: block;
503
- }
504
-
505
- .move-dropdown button {
506
- display: block;
507
- width: 100%;
508
- text-align: left;
509
- background: none;
510
- border: none;
511
- padding: 9px 14px;
512
- font-size: 13px;
513
- color: #374151;
514
- cursor: pointer;
515
- border-radius: 0;
516
- }
517
-
518
- .move-dropdown button:hover {
519
- background: #f3f4f6;
520
- color: #111827;
521
- }
522
-
523
- .move-dropdown .dropdown-label {
524
- font-size: 11px;
525
- color: #9ca3af;
526
- padding: 8px 14px 4px;
527
- font-weight: 500;
528
- text-transform: uppercase;
529
- letter-spacing: 0.05em;
530
- cursor: default;
531
- }
532
-
533
-
534
- /* ============================================================
535
- CONTEXT MENU
536
- ============================================================ */
537
- .context-menu {
538
- position: fixed;
539
- background: #fff;
540
- border: 1px solid #e5e7eb;
541
- border-radius: 10px;
542
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
543
- z-index: 9999;
544
- min-width: 170px;
545
- overflow: hidden;
546
- display: none;
547
- padding: 4px;
548
- }
549
-
550
- .context-menu.open {
551
- display: block;
552
- }
553
-
554
- .context-menu button {
555
- display: flex;
556
- align-items: center;
557
- gap: 8px;
558
- width: 100%;
559
- text-align: left;
560
- background: none;
561
- border: none;
562
- padding: 8px 12px;
563
- font-size: 13px;
564
- color: #374151;
565
- cursor: pointer;
566
- border-radius: 6px;
567
- }
568
-
569
- .context-menu button:hover {
570
- background: #f3f4f6;
571
- }
572
-
573
- .context-menu button.danger {
574
- color: #b91c1c;
575
- }
576
-
577
- .context-menu button.danger:hover {
578
- background: #fee2e2;
579
- }
580
-
581
- .context-menu button.muted {
582
- color: #9ca3af;
583
- cursor: not-allowed;
584
- }
585
-
586
- .context-menu button.muted:hover {
587
- background: none;
588
- }
589
-
590
- .context-menu .menu-divider {
591
- height: 1px;
592
- background: #f3f4f6;
593
- margin: 4px 0;
594
- }
595
-
596
-
597
- /* ============================================================
598
- MARKDOWN
599
- ============================================================ */
600
- .markdown-body {
601
- line-height: 1.5;
602
- font-size: 14px;
603
- }
604
-
605
- .markdown-body p {
606
- margin: 0 0 6px;
607
- }
608
-
609
- .markdown-body p:last-child {
610
- margin-bottom: 0;
611
- }
612
-
613
- .markdown-body h1,
614
- .markdown-body h2,
615
- .markdown-body h3 {
616
- font-size: 14px;
617
- font-weight: 600;
618
- margin: 4px 0;
619
- }
620
-
621
- .markdown-body code {
622
- background: #f3f4f6;
623
- padding: 1px 5px;
624
- border-radius: 4px;
625
- font-size: 12px;
626
- font-family: ui-monospace, monospace;
627
- }
628
-
629
- .markdown-body pre {
630
- background: #f8fafc;
631
- border: 1px solid #e5e7eb;
632
- border-radius: 6px;
633
- padding: 10px 12px;
634
- overflow-x: auto;
635
- margin: 6px 0;
636
- }
637
-
638
- .markdown-body pre code {
639
- background: none;
640
- padding: 0;
641
- font-size: 12px;
642
- }
643
-
644
- .markdown-body a {
645
- color: #2563eb;
646
- }
647
-
648
- .markdown-body ul,
649
- .markdown-body ol {
650
- margin: 4px 0;
651
- padding-left: 20px;
652
- }
653
-
654
-
655
- /* ============================================================
656
- PREVIEW PANEL
657
- ============================================================ */
658
- .preview-panel {
659
- display: none;
660
- margin-top: 10px;
661
- border-top: 1px solid #f3f4f6;
662
- padding-top: 10px;
663
- }
664
-
665
- .preview-panel.open {
666
- display: block;
667
- }
668
-
669
- .preview-panel img {
670
- max-width: 100%;
671
- border-radius: 6px;
672
- display: block;
673
- }
674
-
675
- .preview-panel video,
676
- .preview-panel audio {
677
- width: 100%;
678
- border-radius: 6px;
679
- outline: none;
680
- }
681
-
682
- .preview-panel audio {
683
- width: 100%;
684
- height: 40px;
685
- }
686
-
687
- .preview-panel embed,
688
- .preview-panel iframe {
689
- width: 100%;
690
- height: 480px;
691
- border: none;
692
- border-radius: 6px;
693
- background: #f9fafb;
694
- }
695
-
696
- .preview-panel pre {
697
- background: #f8fafc;
698
- border: 1px solid #e5e7eb;
699
- border-radius: 6px;
700
- padding: 12px;
701
- overflow-x: auto;
702
- max-height: 400px;
703
- overflow-y: auto;
704
- margin: 0;
705
- font-size: 12px;
706
- font-family: ui-monospace, monospace;
707
- line-height: 1.5;
708
- }
709
-
710
- .preview-panel pre code {
711
- background: none;
712
- padding: 0;
713
- font-size: 12px;
714
- }
715
-
716
- .markdown-preview {
717
- padding: 4px 0;
718
- max-height: 500px;
719
- overflow-y: auto;
720
- }
721
-
722
- .preview-truncated {
723
- font-size: 11px;
724
- color: #9ca3af;
725
- margin-top: 6px;
726
- text-align: right;
727
- }
728
-
729
- .preview-error {
730
- font-size: 13px;
731
- color: #9ca3af;
732
- padding: 12px 0;
733
- }
734
-
735
- .preview-loading {
736
- font-size: 13px;
737
- color: #9ca3af;
738
- padding: 12px 0;
739
- }
740
-
741
-
742
- /* ============================================================
743
- QR WIDGET
744
- ============================================================ */
745
- .qr-widget {
746
- position: fixed;
747
- bottom: 20px;
748
- right: 20px;
749
- z-index: 999;
750
- display: flex;
751
- flex-direction: column;
752
- align-items: flex-end;
753
- gap: 8px;
754
- }
755
-
756
- .qr-card {
757
- background: #fff;
758
- border: 1px solid #e5e7eb;
759
- border-radius: 12px;
760
- padding: 16px;
761
- text-align: center;
762
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
763
- display: none;
764
- width: 200px;
765
- }
766
-
767
- .qr-card.open {
768
- display: block;
769
- }
770
-
771
- .qr-card img {
772
- width: 160px;
773
- height: 160px;
774
- border-radius: 6px;
775
- }
776
-
777
- .qr-card .qr-url {
778
- font-size: 11px;
779
- color: #6b7280;
780
- margin-top: 8px;
781
- word-break: break-all;
782
- line-height: 1.4;
783
- }
784
-
785
- .qr-card .qr-label {
786
- font-size: 12px;
787
- font-weight: 600;
788
- color: #111827;
789
- margin-bottom: 10px;
790
- }
791
-
792
- .qr-toggle {
793
- background: #111827;
794
- color: #fff;
795
- border: none;
796
- border-radius: 20px;
797
- padding: 8px 14px;
798
- font-size: 13px;
799
- cursor: pointer;
800
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
801
- }
802
-
803
- .qr-toggle:hover {
804
- background: #1f2937;
805
- }
806
-
807
-
808
- /* ============================================================
809
- UNDO TOAST
810
- ============================================================ */
811
- .undo-toast {
812
- position: fixed;
813
- bottom: 30px;
814
- left: 50%;
815
- transform: translateX(-50%) translateY(80px);
816
- background: #1f2937;
817
- color: #f3f4f6;
818
- padding: 12px 16px;
819
- border-radius: 10px;
820
- font-size: 13px;
821
- display: flex;
822
- align-items: center;
823
- gap: 12px;
824
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);
825
- z-index: 9999;
826
- opacity: 0;
827
- transition: transform 0.2s ease, opacity 0.2s ease;
828
- min-width: 220px;
829
- overflow: hidden;
830
- }
831
-
832
- .undo-toast.show {
833
- transform: translateX(-50%) translateY(0);
834
- opacity: 1;
835
- }
836
-
837
- .undo-toast #undoBtn {
838
- background: none;
839
- border: 1px solid #4b5563;
840
- color: #f3f4f6;
841
- padding: 4px 10px;
842
- border-radius: 6px;
843
- font-size: 12px;
844
- cursor: pointer;
845
- flex-shrink: 0;
846
- }
847
-
848
- .undo-toast #undoBtn:hover {
849
- background: #374151;
850
- }
851
-
852
- .undo-progress {
853
- position: absolute;
854
- bottom: 0;
855
- left: 0;
856
- height: 3px;
857
- width: 100%;
858
- background: #4b5563;
859
- transform-origin: left;
860
- animation: none;
861
- }
862
-
863
- .undo-progress.running {
864
- animation: drain 5s linear forwards;
865
- }
866
-
867
- @keyframes drain {
868
- from {
869
- transform: scaleX(1);
870
- }
871
-
872
- to {
873
- transform: scaleX(0);
874
- }
875
- }
876
-
877
-
878
- /* ============================================================
879
- LOAD MORE
880
- ============================================================ */
881
- .load-more-btn {
882
- background: #f3f4f6;
883
- color: #374151;
884
- border: 1px solid #e5e7eb;
885
- border-radius: 8px;
886
- padding: 10px 24px;
887
- font-size: 14px;
888
- cursor: pointer;
889
- transition: background 0.15s ease;
890
- }
891
-
892
- .load-more-btn:hover {
893
- background: #e5e7eb;
894
- }
895
-
896
- .item-title {
897
- font-size: 11px;
898
- font-weight: 600;
899
- color: #6b7280;
900
- text-transform: uppercase;
901
- letter-spacing: 0.05em;
902
- margin-bottom: 4px;
903
- }
904
-
905
- .title-input {
906
- font-size: 12px;
907
- padding: 3px 7px;
908
- border: 1px solid #d1d5db;
909
- border-radius: 5px;
910
- margin-bottom: 4px;
911
- width: 200px;
912
- display: block;
913
- color: #111827;
914
- background: #fff;
915
- }
916
-
917
- .title-input:focus {
918
- outline: none;
919
- border-color: var(--color-primary);
920
- }
921
-
922
- .edit-textarea {
923
- width: min(600px, 60vw);
924
- min-height: 80px;
925
- padding: 8px 10px;
926
- border: 1px solid #d1d5db;
927
- border-radius: 6px;
928
- font-size: 14px;
929
- font-family: system-ui;
930
- resize: vertical;
931
- display: block;
932
- box-sizing: border-box;
933
- line-height: 1.5;
934
- color: #111827;
935
- background: #f9fafb;
936
- margin-bottom: 6px;
937
- }
938
-
939
- .edit-textarea:focus {
940
- outline: none;
941
- border-color: var(--color-primary);
942
- background: #fff;
943
- }
944
-
945
- .edit-hint {
946
- font-size: 11px;
947
- color: #9ca3af;
948
- margin-bottom: 4px;
949
- }
950
-
951
- .expiry-badge {
952
- display: inline-block;
953
- font-size: 10px;
954
- font-weight: 500;
955
- padding: 1px 6px;
956
- border-radius: 4px;
957
- margin-left: 6px;
958
- vertical-align: middle;
959
- background: #fef3c7;
960
- color: #92400e;
961
- }
962
-
963
- .expiry-badge.expiry-gone {
964
- background: #fee2e2;
965
- color: #991b1b;
966
- }
967
-
968
- .seen-count {
969
- font-size: px;
970
- color: #9ca3af;
971
- margin-left: 6px;
972
- }
973
-
974
- .more-wrapper {
975
- position: relative;
976
- }
977
-
978
- .more-btn {
979
- font-size: 16px;
980
- padding: 4px 7px;
981
- letter-spacing: 0;
982
- line-height: 1;
983
- }
984
-
985
- .more-dropdown {
986
- position: absolute;
987
- bottom: calc(100% + 6px);
988
- right: 0;
989
- background: #fff;
990
- border: 1px solid #e5e7eb;
991
- border-radius: 8px;
992
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
993
- z-index: 100;
994
- min-width: 160px;
995
- overflow: hidden;
996
- display: none;
997
- padding: 4px;
998
- }
999
-
1000
- .more-dropdown.open {
1001
- display: block;
1002
- }
1003
-
1004
- .more-dropdown button {
1005
- display: block;
1006
- width: 100%;
1007
- text-align: left;
1008
- background: none;
1009
- border: none;
1010
- padding: 8px 12px;
1011
- font-size: 13px;
1012
- color: #374151;
1013
- cursor: pointer;
1014
- border-radius: 6px;
1015
- }
1016
-
1017
- .more-dropdown button:hover {
1018
- background: #f3f4f6;
1019
- color: #111827;
1020
- }
1021
-
1022
- .more-dropdown .dropdown-label {
1023
- font-size: 11px;
1024
- color: #9ca3af;
1025
- padding: 6px 12px 2px;
1026
- font-weight: 500;
1027
- text-transform: uppercase;
1028
- letter-spacing: 0.05em;
1029
- cursor: default;
1030
- }
1031
-
1032
- .icon-btn i {
1033
- width: 14px;
1034
- height: 14px;
1035
- display: block;
1036
- stroke-width: 2;
1037
- }
1038
-
1039
- .icon-btn.pinned i {
1040
- color: #f59e0b;
1041
- }
1042
-
1043
- .item-new {
1044
- border-left: 3px solid #22c55e;
1045
- padding-left: 13px;
1046
- background: #f0fdf4;
1047
- transition: background 1.5s ease, border-color 1.5s ease;
1048
- }
1049
-
1050
- /* ============================================================
1051
- MOBILE
1052
- ============================================================ */
1053
- @media (max-width: 640px) {
1054
- .app-header {
1055
- flex-wrap: wrap;
1056
- padding: 8px 12px;
1057
- gap: 6px;
1058
- }
1059
-
1060
- .header-left {
1061
- flex: 1;
1062
- }
1063
-
1064
- .header-center {
1065
- order: 3;
1066
- width: 100%;
1067
- flex: none;
1068
- }
1069
-
1070
- .header-right {
1071
- font-size: 12px;
1072
- gap: 6px;
1073
- flex-shrink: 0;
1074
- }
1075
-
1076
- .search-wrapper {
1077
- max-width: 100%;
1078
- width: 100%;
1079
- }
1080
-
1081
- .search-wrapper input {
1082
- width: 100%;
1083
- box-sizing: border-box;
1084
- }
1085
-
1086
- .drop {
1087
- display: none;
1088
- }
1089
-
1090
- .channel-bar {
1091
- overflow: hidden;
1092
- display: flex;
1093
- align-items: center;
1094
- gap: 0;
1095
- padding: 6px;
1096
- }
1097
-
1098
- .channel-bar::after {
1099
- content: "";
1100
- position: absolute;
1101
- top: 0;
1102
- right: 0;
1103
- width: 80px;
1104
- height: 100%;
1105
- background: linear-gradient(to right, transparent, #e5e7eb);
1106
- border-radius: 0 12px 12px 0;
1107
- pointer-events: none;
1108
- z-index: 1;
1109
- }
1110
-
1111
- .channels {
1112
- flex: 1;
1113
- min-width: 0;
1114
- overflow-x: auto;
1115
- flex-wrap: nowrap;
1116
- scrollbar-width: none;
1117
- -ms-overflow-style: none;
1118
- padding-right: 40px;
1119
- }
1120
-
1121
- .channels::-webkit-scrollbar {
1122
- display: none;
1123
- }
1124
-
1125
- .add-channel {
1126
- display: none;
1127
- }
1128
-
1129
- .add-channel-mobile {
1130
- display: flex;
1131
- align-items: center;
1132
- justify-content: center;
1133
- flex-shrink: 0;
1134
- background: transparent;
1135
- color: #6b7280;
1136
- font-weight: 600;
1137
- border: none;
1138
- border-left: 1px solid #d1d5db;
1139
- padding: 4px 12px;
1140
- font-size: 16px;
1141
- cursor: pointer;
1142
- position: static;
1143
- width: auto;
1144
- height: auto;
1145
- border-radius: 0;
1146
- box-shadow: none;
1147
- }
1148
-
1149
- .add-channel-mobile:hover {
1150
- color: #111827;
1151
- background: #d1d5db;
1152
- }
1153
-
1154
- .composer {
1155
- flex-wrap: wrap;
1156
- gap: 6px;
1157
- }
1158
-
1159
- .composer input {
1160
- width: 100%;
1161
- flex: none;
1162
- box-sizing: border-box;
1163
- }
1164
-
1165
- .composer button {
1166
- flex: 1;
1167
- }
1168
-
1169
- .qr-widget {
1170
- bottom: 80px;
1171
- }
1172
-
1173
- .qr-toggle {
1174
- padding: 6px 12px;
1175
- font-size: 12px;
1176
- }
1177
- }
1178
-
1179
-
1180
- /* ============================================================
1181
- DARK MODE
1182
- Two selectors, identical rules — no duplication within each.
1183
- Media query handles OS preference.
1184
- [data-theme="dark"] handles manual override.
1185
- ============================================================ */
1186
-
1187
- @media (prefers-color-scheme: dark) {
1188
- :root:not([data-theme="light"]) {
1189
- body {
1190
- background: #0f1117;
1191
- }
1192
-
1193
- .app-header {
1194
- background: #1a1d27;
1195
- border-bottom-color: #2d3148;
1196
- }
1197
-
1198
- .app-name {
1199
- color: #f3f4f6;
1200
- }
1201
-
1202
- .logo {
1203
- filter: invert(1) brightness(1.2);
1204
- }
1205
-
1206
- .username-display {
1207
- color: #d1d5db;
1208
- }
1209
-
1210
- .username-display:hover {
1211
- color: #f3f4f6;
1212
- border-bottom-color: #6b7280;
1213
- }
1214
-
1215
- .online-count {
1216
- color: #6b7280;
1217
- }
1218
-
1219
- .link-btn {
1220
- color: #9ca3af;
1221
- }
1222
-
1223
- .link-btn:hover {
1224
- color: #f3f4f6;
1225
- }
1226
-
1227
- .theme-toggle:hover {
1228
- background: #2d3148;
1229
- }
1230
-
1231
- .logout-btn {
1232
- border-color: #2d3148;
1233
- color: #9ca3af;
1234
- }
1235
-
1236
- .logout-btn:hover {
1237
- background: #2d1515;
1238
- border-color: #7f1d1d;
1239
- color: #f87171;
1240
- }
1241
-
1242
- .search-wrapper input {
1243
- background: #252836;
1244
- border-color: #2d3148;
1245
- color: #f3f4f6;
1246
- }
1247
-
1248
- .search-wrapper input:focus {
1249
- background: #2d3148;
1250
- border-color: #4b5563;
1251
- }
1252
-
1253
- .search-wrapper input::placeholder {
1254
- color: #6b7280;
1255
- }
1256
-
1257
- .search-icon {
1258
- color: #6b7280;
1259
- }
1260
-
1261
- .channel-bar {
1262
- background: #1a1d27;
1263
- }
1264
-
1265
- .channel-bar::after {
1266
- background: linear-gradient(to right, transparent, #1a1d27);
1267
- }
1268
-
1269
- .channels button {
1270
- color: #9ca3af;
1271
- }
1272
-
1273
- .channels button:hover {
1274
- background: #2d3148;
1275
- color: #f3f4f6;
1276
- }
1277
-
1278
- .channels button.active {
1279
- background: #252836;
1280
- color: #f3f4f6;
1281
- }
1282
-
1283
- .add-channel {
1284
- color: #9ca3af;
1285
- }
1286
-
1287
- .add-channel:hover {
1288
- background: #2d3148;
1289
- }
1290
-
1291
- .add-channel-mobile {
1292
- color: #9ca3af;
1293
- border-left-color: #2d3148;
1294
- }
1295
-
1296
- .add-channel-mobile:hover {
1297
- background: #2d3148;
1298
- color: #f3f4f6;
1299
- }
1300
-
1301
- .composer {
1302
- background: #1a1d27;
1303
- }
1304
-
1305
- input[type=text] {
1306
- background: #252836;
1307
- border-color: #2d3148;
1308
- color: #f3f4f6;
1309
- }
1310
-
1311
- input[type=text]::placeholder {
1312
- color: #6b7280;
1313
- }
1314
-
1315
- .drop {
1316
- background: #1a1d27;
1317
- border-color: #2d3148;
1318
- color: #6b7280;
1319
- }
1320
-
1321
- .item {
1322
- background: #1a1d27;
1323
- color: #e5e7eb;
1324
- }
1325
-
1326
- .item:hover {
1327
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
1328
- }
1329
-
1330
- .item a {
1331
- color: #60a5fa;
1332
- }
1333
-
1334
- .left {
1335
- color: #e5e7eb;
1336
- }
1337
-
1338
- .left.flash {
1339
- background: #064e3b;
1340
- }
1341
-
1342
- .left:hover::after {
1343
- background: #374151;
1344
- color: #f3f4f6;
1345
- }
1346
-
1347
- .meta {
1348
- color: #6b7280;
1349
- }
1350
-
1351
- .empty-state {
1352
- color: #4b5563;
1353
- }
1354
-
1355
- .size-tag.warn {
1356
- background: #422006;
1357
- color: #fbbf24;
1358
- }
1359
-
1360
- .size-tag.danger-light {
1361
- background: #2d1515;
1362
- color: #f87171;
1363
- }
1364
-
1365
- .icon-btn {
1366
- background: #252836;
1367
- border-color: #2d3148;
1368
- color: #9ca3af;
1369
- }
1370
-
1371
- .icon-btn:hover {
1372
- background: #2d3148;
1373
- }
1374
-
1375
- .icon-btn.delete {
1376
- background: #1a1d27;
1377
- border-color: #7f1d1d;
1378
- color: #f87171;
1379
- }
1380
-
1381
- .icon-btn.delete:hover {
1382
- background: #2d1515;
1383
- }
1384
-
1385
- .icon-btn.preview-active {
1386
- background: #1e3a5f;
1387
- border-color: #2563eb;
1388
- color: #60a5fa;
1389
- }
1390
-
1391
- .move-dropdown {
1392
- background: #1a1d27;
1393
- border-color: #2d3148;
1394
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
1395
- }
1396
-
1397
- .move-dropdown button {
1398
- color: #d1d5db;
1399
- }
1400
-
1401
- .move-dropdown button:hover {
1402
- background: #252836;
1403
- color: #f3f4f6;
1404
- }
1405
-
1406
- .move-dropdown .dropdown-label {
1407
- color: #6b7280;
1408
- }
1409
-
1410
- .context-menu {
1411
- background: #1a1d27;
1412
- border-color: #2d3148;
1413
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
1414
- }
1415
-
1416
- .context-menu button {
1417
- color: #d1d5db;
1418
- }
1419
-
1420
- .context-menu button:hover {
1421
- background: #252836;
1422
- }
1423
-
1424
- .context-menu button.danger {
1425
- color: #f87171;
1426
- }
1427
-
1428
- .context-menu button.danger:hover {
1429
- background: #2d1515;
1430
- }
1431
-
1432
- .context-menu button.muted {
1433
- color: #4b5563;
1434
- }
1435
-
1436
- .context-menu .menu-divider {
1437
- background: #2d3148;
1438
- }
1439
-
1440
- .preview-panel {
1441
- border-top-color: #2d3148;
1442
- }
1443
-
1444
- .preview-panel embed,
1445
- .preview-panel iframe {
1446
- background: #252836;
1447
- }
1448
-
1449
- .preview-panel pre {
1450
- background: #0f1117;
1451
- border-color: #2d3148;
1452
- color: #e5e7eb;
1453
- }
1454
-
1455
- .preview-truncated,
1456
- .preview-error,
1457
- .preview-loading {
1458
- color: #6b7280;
1459
- }
1460
-
1461
- .markdown-body {
1462
- color: #e5e7eb;
1463
- }
1464
-
1465
- .markdown-body code {
1466
- background: #252836;
1467
- color: #e5e7eb;
1468
- }
1469
-
1470
- .markdown-body pre {
1471
- background: #0f1117;
1472
- border-color: #2d3148;
1473
- }
1474
-
1475
- .markdown-body a {
1476
- color: #60a5fa;
1477
- }
1478
-
1479
- .qr-card {
1480
- background: #1a1d27;
1481
- border-color: #2d3148;
1482
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
1483
- }
1484
-
1485
- .qr-card .qr-label {
1486
- color: #f3f4f6;
1487
- }
1488
-
1489
- .qr-card .qr-url {
1490
- color: #9ca3af;
1491
- }
1492
-
1493
- .undo-toast {
1494
- background: #374151;
1495
- }
1496
-
1497
- .load-more-btn {
1498
- background: #1a1d27;
1499
- color: #d1d5db;
1500
- border-color: #2d3148;
1501
- }
1502
-
1503
- .load-more-btn:hover {
1504
- background: #2d3148;
1505
- }
1506
-
1507
- .markdown-preview {
1508
- color: #e5e7eb;
1509
- }
1510
-
1511
- .item-title {
1512
- color: #6b7280;
1513
- }
1514
-
1515
- .title-input {
1516
- background: #252836;
1517
- border-color: #2d3148;
1518
- color: #f3f4f6;
1519
- }
1520
-
1521
- .edit-textarea {
1522
- background: #252836;
1523
- border-color: #2d3148;
1524
- color: #f3f4f6;
1525
- }
1526
-
1527
- .edit-textarea:focus {
1528
- background: #1a1d27;
1529
- border-color: #4b5563;
1530
- }
1531
-
1532
- .expiry-badge {
1533
- background: #422006;
1534
- color: #fbbf24;
1535
- }
1536
-
1537
- .expiry-badge.expiry-gone {
1538
- background: #2d1515;
1539
- color: #f87171;
1540
- }
1541
-
1542
- .seen-count {
1543
- color: #6b7280;
1544
- }
1545
-
1546
- .more-dropdown {
1547
- background: #1a1d27;
1548
- border-color: #2d3148;
1549
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
1550
- }
1551
-
1552
- .more-dropdown button {
1553
- color: #d1d5db;
1554
- }
1555
-
1556
- .more-dropdown button:hover {
1557
- background: #252836;
1558
- color: #f3f4f6;
1559
- }
1560
-
1561
- .more-dropdown .dropdown-label {
1562
- color: #6b7280;
1563
- }
1564
-
1565
- .icon-btn.pinned i {
1566
- color: #f59e0b;
1567
- }
1568
-
1569
- .item-new {
1570
- border-left: 3px solid #16a34a;
1571
- padding-left: 13px;
1572
- background: #052e16;
1573
- }
1574
-
1575
- #uploadStatus {
1576
- background: #1a1d27 !important;
1577
- color: #e5e7eb !important;
1578
- }
1579
- }
1580
- }
1581
-
1582
- :root[data-theme="dark"] {
1583
- body {
1584
- background: #0f1117;
1585
- }
1586
-
1587
- .app-header {
1588
- background: #1a1d27;
1589
- border-bottom-color: #2d3148;
1590
- }
1591
-
1592
- .app-name {
1593
- color: #f3f4f6;
1594
- }
1595
-
1596
- .logo {
1597
- filter: invert(1) brightness(1.2);
1598
- }
1599
-
1600
- .username-display {
1601
- color: #d1d5db;
1602
- }
1603
-
1604
- .username-display:hover {
1605
- color: #f3f4f6;
1606
- border-bottom-color: #6b7280;
1607
- }
1608
-
1609
- .online-count {
1610
- color: #6b7280;
1611
- }
1612
-
1613
- .link-btn {
1614
- color: #9ca3af;
1615
- }
1616
-
1617
- .link-btn:hover {
1618
- color: #f3f4f6;
1619
- }
1620
-
1621
- .theme-toggle:hover {
1622
- background: #2d3148;
1623
- }
1624
-
1625
- .logout-btn {
1626
- border-color: #2d3148;
1627
- color: #9ca3af;
1628
- }
1629
-
1630
- .logout-btn:hover {
1631
- background: #2d1515;
1632
- border-color: #7f1d1d;
1633
- color: #f87171;
1634
- }
1635
-
1636
- .search-wrapper input {
1637
- background: #252836;
1638
- border-color: #2d3148;
1639
- color: #f3f4f6;
1640
- }
1641
-
1642
- .search-wrapper input:focus {
1643
- background: #2d3148;
1644
- border-color: #4b5563;
1645
- }
1646
-
1647
- .search-wrapper input::placeholder {
1648
- color: #6b7280;
1649
- }
1650
-
1651
- .search-icon {
1652
- color: #6b7280;
1653
- }
1654
-
1655
- .channel-bar {
1656
- background: #1a1d27;
1657
- }
1658
-
1659
- .channel-bar::after {
1660
- background: linear-gradient(to right, transparent, #1a1d27);
1661
- }
1662
-
1663
- .channels button {
1664
- color: #9ca3af;
1665
- }
1666
-
1667
- .channels button:hover {
1668
- background: #2d3148;
1669
- color: #f3f4f6;
1670
- }
1671
-
1672
- .channels button.active {
1673
- background: #252836;
1674
- color: #f3f4f6;
1675
- }
1676
-
1677
- .add-channel {
1678
- color: #9ca3af;
1679
- }
1680
-
1681
- .add-channel:hover {
1682
- background: #2d3148;
1683
- }
1684
-
1685
- .add-channel-mobile {
1686
- color: #9ca3af;
1687
- border-left-color: #2d3148;
1688
- }
1689
-
1690
- .add-channel-mobile:hover {
1691
- background: #2d3148;
1692
- color: #f3f4f6;
1693
- }
1694
-
1695
- .composer {
1696
- background: #1a1d27;
1697
- }
1698
-
1699
- input[type=text] {
1700
- background: #252836;
1701
- border-color: #2d3148;
1702
- color: #f3f4f6;
1703
- }
1704
-
1705
- input[type=text]::placeholder {
1706
- color: #6b7280;
1707
- }
1708
-
1709
- .drop {
1710
- background: #1a1d27;
1711
- border-color: #2d3148;
1712
- color: #6b7280;
1713
- }
1714
-
1715
- .item {
1716
- background: #1a1d27;
1717
- color: #e5e7eb;
1718
- }
1719
-
1720
- .item:hover {
1721
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
1722
- }
1723
-
1724
- .item a {
1725
- color: #60a5fa;
1726
- }
1727
-
1728
- .left {
1729
- color: #e5e7eb;
1730
- }
1731
-
1732
- .left.flash {
1733
- background: #064e3b;
1734
- }
1735
-
1736
- .left:hover::after {
1737
- background: #374151;
1738
- color: #f3f4f6;
1739
- }
1740
-
1741
- .meta {
1742
- color: #6b7280;
1743
- }
1744
-
1745
- .empty-state {
1746
- color: #4b5563;
1747
- }
1748
-
1749
- .size-tag.warn {
1750
- background: #422006;
1751
- color: #fbbf24;
1752
- }
1753
-
1754
- .size-tag.danger-light {
1755
- background: #2d1515;
1756
- color: #f87171;
1757
- }
1758
-
1759
- .icon-btn {
1760
- background: #252836;
1761
- border-color: #2d3148;
1762
- color: #9ca3af;
1763
- }
1764
-
1765
- .icon-btn:hover {
1766
- background: #2d3148;
1767
- }
1768
-
1769
- .icon-btn.delete {
1770
- background: #1a1d27;
1771
- border-color: #7f1d1d;
1772
- color: #f87171;
1773
- }
1774
-
1775
- .icon-btn.delete:hover {
1776
- background: #2d1515;
1777
- }
1778
-
1779
- .icon-btn.preview-active {
1780
- background: #1e3a5f;
1781
- border-color: #2563eb;
1782
- color: #60a5fa;
1783
- }
1784
-
1785
- .move-dropdown {
1786
- background: #1a1d27;
1787
- border-color: #2d3148;
1788
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
1789
- }
1790
-
1791
- .move-dropdown button {
1792
- color: #d1d5db;
1793
- }
1794
-
1795
- .move-dropdown button:hover {
1796
- background: #252836;
1797
- color: #f3f4f6;
1798
- }
1799
-
1800
- .move-dropdown .dropdown-label {
1801
- color: #6b7280;
1802
- }
1803
-
1804
- .context-menu {
1805
- background: #1a1d27;
1806
- border-color: #2d3148;
1807
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
1808
- }
1809
-
1810
- .context-menu button {
1811
- color: #d1d5db;
1812
- }
1813
-
1814
- .context-menu button:hover {
1815
- background: #252836;
1816
- }
1817
-
1818
- .context-menu button.danger {
1819
- color: #f87171;
1820
- }
1821
-
1822
- .context-menu button.danger:hover {
1823
- background: #2d1515;
1824
- }
1825
-
1826
- .context-menu button.muted {
1827
- color: #4b5563;
1828
- }
1829
-
1830
- .context-menu .menu-divider {
1831
- background: #2d3148;
1832
- }
1833
-
1834
- .preview-panel {
1835
- border-top-color: #2d3148;
1836
- }
1837
-
1838
- .preview-panel embed,
1839
- .preview-panel iframe {
1840
- background: #252836;
1841
- }
1842
-
1843
- .preview-panel pre {
1844
- background: #0f1117;
1845
- border-color: #2d3148;
1846
- color: #e5e7eb;
1847
- }
1848
-
1849
- .preview-truncated,
1850
- .preview-error,
1851
- .preview-loading {
1852
- color: #6b7280;
1853
- }
1854
-
1855
- .markdown-body {
1856
- color: #e5e7eb;
1857
- }
1858
-
1859
- .markdown-body code {
1860
- background: #252836;
1861
- color: #e5e7eb;
1862
- }
1863
-
1864
- .markdown-body pre {
1865
- background: #0f1117;
1866
- border-color: #2d3148;
1867
- }
1868
-
1869
- .markdown-body a {
1870
- color: #60a5fa;
1871
- }
1872
-
1873
- .qr-card {
1874
- background: #1a1d27;
1875
- border-color: #2d3148;
1876
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
1877
- }
1878
-
1879
- .qr-card .qr-label {
1880
- color: #f3f4f6;
1881
- }
1882
-
1883
- .qr-card .qr-url {
1884
- color: #9ca3af;
1885
- }
1886
-
1887
- .undo-toast {
1888
- background: #374151;
1889
- }
1890
-
1891
- .load-more-btn {
1892
- background: #1a1d27;
1893
- color: #d1d5db;
1894
- border-color: #2d3148;
1895
- }
1896
-
1897
- .load-more-btn:hover {
1898
- background: #2d3148;
1899
- }
1900
-
1901
- .markdown-preview {
1902
- color: #e5e7eb;
1903
- }
1904
-
1905
- .item-title {
1906
- color: #6b7280;
1907
- }
1908
-
1909
- .title-input {
1910
- background: #252836;
1911
- border-color: #2d3148;
1912
- color: #f3f4f6;
1913
- }
1914
-
1915
- .edit-textarea {
1916
- background: #252836;
1917
- border-color: #2d3148;
1918
- color: #f3f4f6;
1919
- }
1920
-
1921
- .edit-textarea:focus {
1922
- background: #1a1d27;
1923
- border-color: #4b5563;
1924
- }
1925
-
1926
- .expiry-badge {
1927
- background: #422006;
1928
- color: #fbbf24;
1929
- }
1930
-
1931
- .expiry-badge.expiry-gone {
1932
- background: #2d1515;
1933
- color: #f87171;
1934
- }
1935
-
1936
- .seen-count {
1937
- color: #6b7280;
1938
- }
1939
-
1940
- .more-dropdown {
1941
- background: #1a1d27;
1942
- border-color: #2d3148;
1943
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
1944
- }
1945
-
1946
- .more-dropdown button {
1947
- color: #d1d5db;
1948
- }
1949
-
1950
- .more-dropdown button:hover {
1951
- background: #252836;
1952
- color: #f3f4f6;
1953
- }
1954
-
1955
- .more-dropdown .dropdown-label {
1956
- color: #6b7280;
1957
- }
1958
-
1959
- .icon-btn.pinned i {
1960
- color: #f59e0b;
1961
- }
1962
-
1963
- .item-new {
1964
- border-left: 3px solid #16a34a;
1965
- padding-left: 13px;
1966
- background: #052e16;
1967
- }
1968
-
1969
- #uploadStatus {
1970
- background: #1a1d27 !important;
1971
- color: #e5e7eb !important;
1972
- }
1
+ /* ============================================================
2
+ CSS CUSTOM PROPERTIES
3
+ ============================================================ */
4
+ :root {
5
+ --color-primary: #111827;
6
+ --color-primary-hover: #1f2937;
7
+ --color-primary-light: #f3f4f6;
8
+ --color-primary-dark: #030712;
9
+ --color-on-primary: #ffffff;
10
+ --color-secondary: #6b7280;
11
+ --color-secondary-hover: #4b5563;
12
+ --color-secondary-light: #f9fafb;
13
+ --color-on-secondary: #ffffff;
14
+ }
15
+
16
+
17
+ /* ============================================================
18
+ BASE
19
+ ============================================================ */
20
+ body {
21
+ font-family: system-ui;
22
+ background: #f3f4f6;
23
+ margin: 0;
24
+ }
25
+
26
+ header {
27
+ background: #ffffff;
28
+ color: #111827;
29
+ padding: 14px 20px;
30
+ border-bottom: 1px solid #e5e7eb;
31
+ }
32
+
33
+ button {
34
+ padding: 10px 14px;
35
+ border: none;
36
+ background: var(--color-primary);
37
+ color: var(--color-on-primary);
38
+ border-radius: 6px;
39
+ cursor: pointer;
40
+ }
41
+
42
+ input[type=text] {
43
+ flex: 1;
44
+ padding: 10px;
45
+ border: 1px solid #ddd;
46
+ border-radius: 6px;
47
+ }
48
+
49
+ input[type=text]:focus {
50
+ outline: none;
51
+ border-color: var(--color-primary);
52
+ box-shadow: 0 0 0 3px var(--color-primary-light);
53
+ }
54
+
55
+
56
+ /* ============================================================
57
+ LAYOUT
58
+ ============================================================ */
59
+ .container {
60
+ max-width: 900px;
61
+ margin: 20px auto;
62
+ padding: 0 12px;
63
+ }
64
+
65
+
66
+ /* ============================================================
67
+ HEADER
68
+ ============================================================ */
69
+ .app-header {
70
+ background: #ffffff;
71
+ border-bottom: 1px solid #e5e7eb;
72
+ padding: 10px 20px;
73
+ display: flex;
74
+ align-items: center;
75
+ justify-content: space-between;
76
+ gap: 20px;
77
+ }
78
+
79
+ .header-left {
80
+ display: flex;
81
+ align-items: center;
82
+ gap: 10px;
83
+ }
84
+
85
+ .logo {
86
+ height: 24px;
87
+ filter: none;
88
+ }
89
+
90
+ .app-name {
91
+ font-weight: 600;
92
+ font-size: 15px;
93
+ color: #111827;
94
+ }
95
+
96
+ .header-center {
97
+ flex: 1;
98
+ display: flex;
99
+ justify-content: center;
100
+ }
101
+
102
+ .header-right {
103
+ display: flex;
104
+ align-items: center;
105
+ gap: 8px;
106
+ font-size: 13px;
107
+ }
108
+
109
+ .username-display {
110
+ font-size: 13px;
111
+ color: #374151;
112
+ cursor: pointer;
113
+ border-bottom: 1px dashed transparent;
114
+ transition: border-color 0.15s ease, color 0.15s ease;
115
+ padding-bottom: 1px;
116
+ }
117
+
118
+ .username-display:hover {
119
+ color: #111827;
120
+ border-bottom-color: #9ca3af;
121
+ }
122
+
123
+ .online-count {
124
+ font-size: 12px;
125
+ color: #9ca3af;
126
+ }
127
+
128
+ .link-btn {
129
+ background: none;
130
+ border: none;
131
+ color: #6b7280;
132
+ cursor: pointer;
133
+ font-size: 13px;
134
+ padding: 0;
135
+ }
136
+
137
+ .link-btn:hover {
138
+ color: #111827;
139
+ }
140
+
141
+ .theme-toggle {
142
+ font-size: 15px;
143
+ padding: 2px 6px;
144
+ border-radius: 6px;
145
+ transition: background 0.15s ease;
146
+ }
147
+
148
+ .theme-toggle:hover {
149
+ background: #f3f4f6;
150
+ }
151
+
152
+ .logout-btn {
153
+ background: none;
154
+ border: 1px solid #e5e7eb;
155
+ color: #6b7280;
156
+ cursor: pointer;
157
+ font-size: 12px;
158
+ padding: 4px 10px;
159
+ border-radius: 6px;
160
+ transition: all 0.15s ease;
161
+ }
162
+
163
+ .logout-btn:hover {
164
+ background: #fee2e2;
165
+ border-color: #fecaca;
166
+ color: #b91c1c;
167
+ }
168
+
169
+
170
+ /* ============================================================
171
+ SEARCH
172
+ ============================================================ */
173
+ .search-wrapper {
174
+ position: relative;
175
+ width: 100%;
176
+ max-width: 420px;
177
+ }
178
+
179
+ .search-wrapper input {
180
+ width: 100%;
181
+ padding: 8px 12px 8px 32px;
182
+ border-radius: 8px;
183
+ border: 1px solid #e5e7eb;
184
+ background: #f9fafb;
185
+ font-size: 14px;
186
+ }
187
+
188
+ .search-wrapper input:focus {
189
+ outline: none;
190
+ border-color: #d1d5db;
191
+ background: #ffffff;
192
+ }
193
+
194
+ .search-icon {
195
+ position: absolute;
196
+ left: 10px;
197
+ top: 50%;
198
+ transform: translateY(-50%);
199
+ font-size: 14px;
200
+ color: #9ca3af;
201
+ }
202
+
203
+
204
+ /* ============================================================
205
+ CHANNEL BAR
206
+ ============================================================ */
207
+ .channel-bar {
208
+ background: #e5e7eb;
209
+ border-radius: 12px;
210
+ padding: 6px;
211
+ margin-bottom: 16px;
212
+ display: flex;
213
+ align-items: center;
214
+ gap: 6px;
215
+ position: relative;
216
+ }
217
+
218
+ .channels {
219
+ flex: 1;
220
+ display: flex;
221
+ gap: 6px;
222
+ }
223
+
224
+ .channels::-webkit-scrollbar {
225
+ display: none;
226
+ }
227
+
228
+ .channels button {
229
+ position: relative;
230
+ display: flex;
231
+ align-items: center;
232
+ gap: 4px;
233
+ background: transparent;
234
+ border: none;
235
+ padding: 7px 12px;
236
+ border-radius: 10px;
237
+ cursor: pointer;
238
+ font-size: 14px;
239
+ color: #4b5563;
240
+ transition: all 0.15s ease;
241
+ }
242
+
243
+ .channels button:hover {
244
+ background: #d1d5db;
245
+ color: #111827;
246
+ }
247
+
248
+ .channels button.active {
249
+ background: #f9fafb;
250
+ color: #111827;
251
+ }
252
+
253
+ .add-channel {
254
+ background: transparent;
255
+ color: #6b7280;
256
+ font-weight: 600;
257
+ border: none;
258
+ padding: 8px 16px;
259
+ border-radius: 10px;
260
+ cursor: pointer;
261
+ }
262
+
263
+ .add-channel:hover {
264
+ background: #d1d5db;
265
+ }
266
+
267
+ .add-channel-mobile {
268
+ display: none;
269
+ }
270
+
271
+ .ch-pin-dot {
272
+ display: inline-block;
273
+ width: 6px;
274
+ height: 6px;
275
+ background: #f59e0b;
276
+ border-radius: 50%;
277
+ flex-shrink: 0;
278
+ }
279
+
280
+ .ch-unread-dot {
281
+ display: inline-block;
282
+ width: 7px;
283
+ height: 7px;
284
+ background: #3b82f6;
285
+ border-radius: 50%;
286
+ flex-shrink: 0;
287
+ margin-left: 2px;
288
+ }
289
+
290
+ .ch-more {
291
+ display: inline-flex;
292
+ align-items: center;
293
+ justify-content: center;
294
+ width: 18px;
295
+ height: 18px;
296
+ border-radius: 4px;
297
+ font-size: 13px;
298
+ color: #6b7280;
299
+ opacity: 0;
300
+ transition: opacity 0.12s ease, background 0.12s ease;
301
+ margin-left: 2px;
302
+ line-height: 1;
303
+ }
304
+
305
+ .channels button:hover .ch-more,
306
+ .channels button.active .ch-more {
307
+ opacity: 1;
308
+ }
309
+
310
+ .ch-more:hover {
311
+ background: rgba(0, 0, 0, 0.1);
312
+ color: #111827;
313
+ }
314
+
315
+
316
+ /* ============================================================
317
+ COMPOSER
318
+ ============================================================ */
319
+ .composer {
320
+ background: #fff;
321
+ padding: 12px;
322
+ border-radius: 8px;
323
+ margin-top: 12px;
324
+ display: flex;
325
+ gap: 8px;
326
+ }
327
+
328
+ .drop {
329
+ border: 2px dashed #ccc;
330
+ padding: 18px;
331
+ margin-top: 12px;
332
+ text-align: center;
333
+ background: #fff;
334
+ border-radius: 8px;
335
+ }
336
+
337
+
338
+ /* ============================================================
339
+ ITEMS
340
+ ============================================================ */
341
+ .item {
342
+ background: #fff;
343
+ color: #111827;
344
+ padding: 12px;
345
+ margin-top: 10px;
346
+ border-radius: 8px;
347
+ display: flex;
348
+ flex-direction: column;
349
+ align-items: stretch;
350
+ transition: box-shadow 0.15s ease;
351
+ }
352
+
353
+ .item:hover {
354
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
355
+ }
356
+
357
+ .item-top {
358
+ display: flex;
359
+ justify-content: space-between;
360
+ align-items: center;
361
+ }
362
+
363
+ .meta {
364
+ font-size: 12px;
365
+ color: #6b7280;
366
+ }
367
+
368
+ .left {
369
+ max-width: 70%;
370
+ word-break: break-word;
371
+ cursor: pointer;
372
+ position: relative;
373
+ color: #111827;
374
+ }
375
+
376
+ .left:hover::after {
377
+ content: attr(data-tooltip);
378
+ position: absolute;
379
+ bottom: calc(100% + 6px);
380
+ left: 0;
381
+ background: #111827;
382
+ color: #fff;
383
+ font-size: 11px;
384
+ padding: 4px 8px;
385
+ border-radius: 5px;
386
+ white-space: nowrap;
387
+ pointer-events: none;
388
+ z-index: 10;
389
+ }
390
+
391
+ .left.flash {
392
+ background: #d1fae5;
393
+ border-radius: 6px;
394
+ transition: background 0.3s ease;
395
+ }
396
+
397
+ .item-actions {
398
+ display: flex;
399
+ gap: 6px;
400
+ align-items: flex-start;
401
+ }
402
+
403
+ .empty-state {
404
+ text-align: center;
405
+ color: #9ca3af;
406
+ font-size: 14px;
407
+ padding: 60px 20px;
408
+ }
409
+
410
+
411
+ /* ============================================================
412
+ SIZE TAGS
413
+ ============================================================ */
414
+ .size-tag {
415
+ display: inline-block;
416
+ font-size: 11px;
417
+ font-weight: 500;
418
+ padding: 2px 7px;
419
+ border-radius: 4px;
420
+ margin-left: 6px;
421
+ vertical-align: middle;
422
+ }
423
+
424
+ .size-tag.warn {
425
+ background: #fef9c3;
426
+ color: #854d0e;
427
+ }
428
+
429
+ .size-tag.danger-light {
430
+ background: #fee2e2;
431
+ color: #b91c1c;
432
+ }
433
+
434
+ .size-tag.danger-dark {
435
+ background: #7f1d1d;
436
+ color: #fff;
437
+ }
438
+
439
+
440
+ /* ============================================================
441
+ ICON BUTTONS
442
+ ============================================================ */
443
+ .icon-btn {
444
+ background: #f9fafb;
445
+ border: 1px solid #e5e7eb;
446
+ border-radius: 6px;
447
+ padding: 5px 7px;
448
+ cursor: pointer;
449
+ font-size: 13px;
450
+ line-height: 1;
451
+ color: #6b7280;
452
+ width: 28px;
453
+ height: 28px;
454
+ display: flex;
455
+ align-items: center;
456
+ justify-content: center;
457
+ }
458
+
459
+ .icon-btn:hover {
460
+ background: #e5e7eb;
461
+ }
462
+
463
+ .icon-btn.delete {
464
+ color: #b91c1c;
465
+ border-color: #fecaca;
466
+ background: #fff;
467
+ }
468
+
469
+ .icon-btn.delete:hover {
470
+ background: #fee2e2;
471
+ }
472
+
473
+ .icon-btn.preview-active {
474
+ background: #eff6ff;
475
+ border-color: #bfdbfe;
476
+ color: #1d4ed8;
477
+ }
478
+
479
+
480
+ /* ============================================================
481
+ MOVE DROPDOWN
482
+ ============================================================ */
483
+ .move-wrapper {
484
+ position: relative;
485
+ }
486
+
487
+ .move-dropdown {
488
+ position: absolute;
489
+ bottom: calc(100% + 6px);
490
+ right: 0;
491
+ background: #fff;
492
+ border: 1px solid #e5e7eb;
493
+ border-radius: 8px;
494
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
495
+ z-index: 100;
496
+ min-width: 130px;
497
+ overflow: hidden;
498
+ display: none;
499
+ }
500
+
501
+ .move-dropdown.open {
502
+ display: block;
503
+ }
504
+
505
+ .move-dropdown button {
506
+ display: block;
507
+ width: 100%;
508
+ text-align: left;
509
+ background: none;
510
+ border: none;
511
+ padding: 9px 14px;
512
+ font-size: 13px;
513
+ color: #374151;
514
+ cursor: pointer;
515
+ border-radius: 0;
516
+ }
517
+
518
+ .move-dropdown button:hover {
519
+ background: #f3f4f6;
520
+ color: #111827;
521
+ }
522
+
523
+ .move-dropdown .dropdown-label {
524
+ font-size: 11px;
525
+ color: #9ca3af;
526
+ padding: 8px 14px 4px;
527
+ font-weight: 500;
528
+ text-transform: uppercase;
529
+ letter-spacing: 0.05em;
530
+ cursor: default;
531
+ }
532
+
533
+
534
+ /* ============================================================
535
+ CONTEXT MENU
536
+ ============================================================ */
537
+ .context-menu {
538
+ position: fixed;
539
+ background: #fff;
540
+ border: 1px solid #e5e7eb;
541
+ border-radius: 10px;
542
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
543
+ z-index: 9999;
544
+ min-width: 170px;
545
+ overflow: hidden;
546
+ display: none;
547
+ padding: 4px;
548
+ }
549
+
550
+ .context-menu.open {
551
+ display: block;
552
+ }
553
+
554
+ .context-menu button {
555
+ display: flex;
556
+ align-items: center;
557
+ gap: 8px;
558
+ width: 100%;
559
+ text-align: left;
560
+ background: none;
561
+ border: none;
562
+ padding: 8px 12px;
563
+ font-size: 13px;
564
+ color: #374151;
565
+ cursor: pointer;
566
+ border-radius: 6px;
567
+ }
568
+
569
+ .context-menu button:hover {
570
+ background: #f3f4f6;
571
+ }
572
+
573
+ .context-menu button.danger {
574
+ color: #b91c1c;
575
+ }
576
+
577
+ .context-menu button.danger:hover {
578
+ background: #fee2e2;
579
+ }
580
+
581
+ .context-menu button.muted {
582
+ color: #9ca3af;
583
+ cursor: not-allowed;
584
+ }
585
+
586
+ .context-menu button.muted:hover {
587
+ background: none;
588
+ }
589
+
590
+ .context-menu .menu-divider {
591
+ height: 1px;
592
+ background: #f3f4f6;
593
+ margin: 4px 0;
594
+ }
595
+
596
+
597
+ /* ============================================================
598
+ MARKDOWN
599
+ ============================================================ */
600
+ .markdown-body {
601
+ line-height: 1.5;
602
+ font-size: 14px;
603
+ }
604
+
605
+ .markdown-body p {
606
+ margin: 0 0 6px;
607
+ }
608
+
609
+ .markdown-body p:last-child {
610
+ margin-bottom: 0;
611
+ }
612
+
613
+ .markdown-body h1,
614
+ .markdown-body h2,
615
+ .markdown-body h3 {
616
+ font-size: 14px;
617
+ font-weight: 600;
618
+ margin: 4px 0;
619
+ }
620
+
621
+ .markdown-body code {
622
+ background: #f3f4f6;
623
+ padding: 1px 5px;
624
+ border-radius: 4px;
625
+ font-size: 12px;
626
+ font-family: ui-monospace, monospace;
627
+ }
628
+
629
+ .markdown-body pre {
630
+ background: #f8fafc;
631
+ border: 1px solid #e5e7eb;
632
+ border-radius: 6px;
633
+ padding: 10px 12px;
634
+ overflow-x: auto;
635
+ margin: 6px 0;
636
+ }
637
+
638
+ .markdown-body pre code {
639
+ background: none;
640
+ padding: 0;
641
+ font-size: 12px;
642
+ }
643
+
644
+ .markdown-body a {
645
+ color: #2563eb;
646
+ }
647
+
648
+ .markdown-body ul,
649
+ .markdown-body ol {
650
+ margin: 4px 0;
651
+ padding-left: 20px;
652
+ }
653
+
654
+
655
+ /* ============================================================
656
+ PREVIEW PANEL
657
+ ============================================================ */
658
+ .preview-panel {
659
+ display: none;
660
+ margin-top: 10px;
661
+ border-top: 1px solid #f3f4f6;
662
+ padding-top: 10px;
663
+ }
664
+
665
+ .preview-panel.open {
666
+ display: block;
667
+ }
668
+
669
+ .preview-panel img {
670
+ max-width: 100%;
671
+ border-radius: 6px;
672
+ display: block;
673
+ }
674
+
675
+ .preview-panel video,
676
+ .preview-panel audio {
677
+ width: 100%;
678
+ border-radius: 6px;
679
+ outline: none;
680
+ }
681
+
682
+ .preview-panel audio {
683
+ width: 100%;
684
+ height: 40px;
685
+ }
686
+
687
+ .preview-panel embed,
688
+ .preview-panel iframe {
689
+ width: 100%;
690
+ height: 480px;
691
+ border: none;
692
+ border-radius: 6px;
693
+ background: #f9fafb;
694
+ }
695
+
696
+ .preview-panel pre {
697
+ background: #f8fafc;
698
+ border: 1px solid #e5e7eb;
699
+ border-radius: 6px;
700
+ padding: 12px;
701
+ overflow-x: auto;
702
+ max-height: 400px;
703
+ overflow-y: auto;
704
+ margin: 0;
705
+ font-size: 12px;
706
+ font-family: ui-monospace, monospace;
707
+ line-height: 1.5;
708
+ }
709
+
710
+ .preview-panel pre code {
711
+ background: none;
712
+ padding: 0;
713
+ font-size: 12px;
714
+ }
715
+
716
+ .markdown-preview {
717
+ padding: 4px 0;
718
+ max-height: 500px;
719
+ overflow-y: auto;
720
+ }
721
+
722
+ .preview-truncated {
723
+ font-size: 11px;
724
+ color: #9ca3af;
725
+ margin-top: 6px;
726
+ text-align: right;
727
+ }
728
+
729
+ .preview-error {
730
+ font-size: 13px;
731
+ color: #9ca3af;
732
+ padding: 12px 0;
733
+ }
734
+
735
+ .preview-loading {
736
+ font-size: 13px;
737
+ color: #9ca3af;
738
+ padding: 12px 0;
739
+ }
740
+
741
+
742
+ /* ============================================================
743
+ QR WIDGET
744
+ ============================================================ */
745
+ .qr-widget {
746
+ position: fixed;
747
+ bottom: 20px;
748
+ right: 20px;
749
+ z-index: 999;
750
+ display: flex;
751
+ flex-direction: column;
752
+ align-items: flex-end;
753
+ gap: 8px;
754
+ }
755
+
756
+ .qr-card {
757
+ background: #fff;
758
+ border: 1px solid #e5e7eb;
759
+ border-radius: 12px;
760
+ padding: 16px;
761
+ text-align: center;
762
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
763
+ display: none;
764
+ width: 200px;
765
+ }
766
+
767
+ .qr-card.open {
768
+ display: block;
769
+ }
770
+
771
+ .qr-card img {
772
+ width: 160px;
773
+ height: 160px;
774
+ border-radius: 6px;
775
+ }
776
+
777
+ .qr-card .qr-url {
778
+ font-size: 11px;
779
+ color: #6b7280;
780
+ margin-top: 8px;
781
+ word-break: break-all;
782
+ line-height: 1.4;
783
+ }
784
+
785
+ .qr-card .qr-label {
786
+ font-size: 12px;
787
+ font-weight: 600;
788
+ color: #111827;
789
+ margin-bottom: 10px;
790
+ }
791
+
792
+ .qr-toggle {
793
+ background: #111827;
794
+ color: #fff;
795
+ border: none;
796
+ border-radius: 20px;
797
+ padding: 8px 14px;
798
+ font-size: 13px;
799
+ cursor: pointer;
800
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
801
+ }
802
+
803
+ .qr-toggle:hover {
804
+ background: #1f2937;
805
+ }
806
+
807
+
808
+ /* ============================================================
809
+ UNDO TOAST
810
+ ============================================================ */
811
+ .undo-toast {
812
+ position: fixed;
813
+ bottom: 30px;
814
+ left: 50%;
815
+ transform: translateX(-50%) translateY(80px);
816
+ background: #1f2937;
817
+ color: #f3f4f6;
818
+ padding: 12px 16px;
819
+ border-radius: 10px;
820
+ font-size: 13px;
821
+ display: flex;
822
+ align-items: center;
823
+ gap: 12px;
824
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);
825
+ z-index: 9999;
826
+ opacity: 0;
827
+ transition: transform 0.2s ease, opacity 0.2s ease;
828
+ min-width: 220px;
829
+ overflow: hidden;
830
+ }
831
+
832
+ .undo-toast.show {
833
+ transform: translateX(-50%) translateY(0);
834
+ opacity: 1;
835
+ }
836
+
837
+ .undo-toast #undoBtn {
838
+ background: none;
839
+ border: 1px solid #4b5563;
840
+ color: #f3f4f6;
841
+ padding: 4px 10px;
842
+ border-radius: 6px;
843
+ font-size: 12px;
844
+ cursor: pointer;
845
+ flex-shrink: 0;
846
+ }
847
+
848
+ .undo-toast #undoBtn:hover {
849
+ background: #374151;
850
+ }
851
+
852
+ .undo-progress {
853
+ position: absolute;
854
+ bottom: 0;
855
+ left: 0;
856
+ height: 3px;
857
+ width: 100%;
858
+ background: #4b5563;
859
+ transform-origin: left;
860
+ animation: none;
861
+ }
862
+
863
+ .undo-progress.running {
864
+ animation: drain 5s linear forwards;
865
+ }
866
+
867
+ @keyframes drain {
868
+ from {
869
+ transform: scaleX(1);
870
+ }
871
+
872
+ to {
873
+ transform: scaleX(0);
874
+ }
875
+ }
876
+
877
+
878
+ /* ============================================================
879
+ LOAD MORE
880
+ ============================================================ */
881
+ .load-more-btn {
882
+ background: #f3f4f6;
883
+ color: #374151;
884
+ border: 1px solid #e5e7eb;
885
+ border-radius: 8px;
886
+ padding: 10px 24px;
887
+ font-size: 14px;
888
+ cursor: pointer;
889
+ transition: background 0.15s ease;
890
+ }
891
+
892
+ .load-more-btn:hover {
893
+ background: #e5e7eb;
894
+ }
895
+
896
+ .item-title {
897
+ font-size: 11px;
898
+ font-weight: 600;
899
+ color: #6b7280;
900
+ text-transform: uppercase;
901
+ letter-spacing: 0.05em;
902
+ margin-bottom: 4px;
903
+ }
904
+
905
+ .title-input {
906
+ font-size: 12px;
907
+ padding: 3px 7px;
908
+ border: 1px solid #d1d5db;
909
+ border-radius: 5px;
910
+ margin-bottom: 4px;
911
+ width: 200px;
912
+ display: block;
913
+ color: #111827;
914
+ background: #fff;
915
+ }
916
+
917
+ .title-input:focus {
918
+ outline: none;
919
+ border-color: var(--color-primary);
920
+ }
921
+
922
+ .edit-textarea {
923
+ width: min(600px, 60vw);
924
+ min-height: 80px;
925
+ padding: 8px 10px;
926
+ border: 1px solid #d1d5db;
927
+ border-radius: 6px;
928
+ font-size: 14px;
929
+ font-family: system-ui;
930
+ resize: vertical;
931
+ display: block;
932
+ box-sizing: border-box;
933
+ line-height: 1.5;
934
+ color: #111827;
935
+ background: #f9fafb;
936
+ margin-bottom: 6px;
937
+ }
938
+
939
+ .edit-textarea:focus {
940
+ outline: none;
941
+ border-color: var(--color-primary);
942
+ background: #fff;
943
+ }
944
+
945
+ .edit-hint {
946
+ font-size: 11px;
947
+ color: #9ca3af;
948
+ margin-bottom: 4px;
949
+ }
950
+
951
+ .expiry-badge {
952
+ display: inline-block;
953
+ font-size: 10px;
954
+ font-weight: 500;
955
+ padding: 1px 6px;
956
+ border-radius: 4px;
957
+ margin-left: 6px;
958
+ vertical-align: middle;
959
+ background: #fef3c7;
960
+ color: #92400e;
961
+ }
962
+
963
+ .expiry-badge.expiry-gone {
964
+ background: #fee2e2;
965
+ color: #991b1b;
966
+ }
967
+
968
+ .seen-count {
969
+ font-size: px;
970
+ color: #9ca3af;
971
+ margin-left: 6px;
972
+ }
973
+
974
+ .more-wrapper {
975
+ position: relative;
976
+ }
977
+
978
+ .more-btn {
979
+ font-size: 16px;
980
+ padding: 4px 7px;
981
+ letter-spacing: 0;
982
+ line-height: 1;
983
+ }
984
+
985
+ .more-dropdown {
986
+ position: absolute;
987
+ bottom: calc(100% + 6px);
988
+ right: 0;
989
+ background: #fff;
990
+ border: 1px solid #e5e7eb;
991
+ border-radius: 8px;
992
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
993
+ z-index: 100;
994
+ min-width: 160px;
995
+ overflow: hidden;
996
+ display: none;
997
+ padding: 4px;
998
+ }
999
+
1000
+ .more-dropdown.open {
1001
+ display: block;
1002
+ }
1003
+
1004
+ .more-dropdown button {
1005
+ display: block;
1006
+ width: 100%;
1007
+ text-align: left;
1008
+ background: none;
1009
+ border: none;
1010
+ padding: 8px 12px;
1011
+ font-size: 13px;
1012
+ color: #374151;
1013
+ cursor: pointer;
1014
+ border-radius: 6px;
1015
+ }
1016
+
1017
+ .more-dropdown button:hover {
1018
+ background: #f3f4f6;
1019
+ color: #111827;
1020
+ }
1021
+
1022
+ .more-dropdown .dropdown-label {
1023
+ font-size: 11px;
1024
+ color: #9ca3af;
1025
+ padding: 6px 12px 2px;
1026
+ font-weight: 500;
1027
+ text-transform: uppercase;
1028
+ letter-spacing: 0.05em;
1029
+ cursor: default;
1030
+ }
1031
+
1032
+ .icon-btn i {
1033
+ width: 14px;
1034
+ height: 14px;
1035
+ display: block;
1036
+ stroke-width: 2;
1037
+ }
1038
+
1039
+ .icon-btn.pinned i {
1040
+ color: #f59e0b;
1041
+ }
1042
+
1043
+ .item-new {
1044
+ border-left: 3px solid #22c55e;
1045
+ padding-left: 13px;
1046
+ background: #f0fdf4;
1047
+ transition: background 1.5s ease, border-color 1.5s ease;
1048
+ }
1049
+
1050
+ /* ============================================================
1051
+ MOBILE
1052
+ ============================================================ */
1053
+ @media (max-width: 640px) {
1054
+ .app-header {
1055
+ flex-wrap: wrap;
1056
+ padding: 8px 12px;
1057
+ gap: 6px;
1058
+ }
1059
+
1060
+ .header-left {
1061
+ flex: 1;
1062
+ }
1063
+
1064
+ .header-center {
1065
+ order: 3;
1066
+ width: 100%;
1067
+ flex: none;
1068
+ }
1069
+
1070
+ .header-right {
1071
+ font-size: 12px;
1072
+ gap: 6px;
1073
+ flex-shrink: 0;
1074
+ }
1075
+
1076
+ .search-wrapper {
1077
+ max-width: 100%;
1078
+ width: 100%;
1079
+ }
1080
+
1081
+ .search-wrapper input {
1082
+ width: 100%;
1083
+ box-sizing: border-box;
1084
+ }
1085
+
1086
+ .drop {
1087
+ display: none;
1088
+ }
1089
+
1090
+ .channel-bar {
1091
+ overflow: hidden;
1092
+ display: flex;
1093
+ align-items: center;
1094
+ gap: 0;
1095
+ padding: 6px;
1096
+ }
1097
+
1098
+ .channel-bar::after {
1099
+ content: "";
1100
+ position: absolute;
1101
+ top: 0;
1102
+ right: 0;
1103
+ width: 80px;
1104
+ height: 100%;
1105
+ background: linear-gradient(to right, transparent, #e5e7eb);
1106
+ border-radius: 0 12px 12px 0;
1107
+ pointer-events: none;
1108
+ z-index: 1;
1109
+ }
1110
+
1111
+ .channels {
1112
+ flex: 1;
1113
+ min-width: 0;
1114
+ overflow-x: auto;
1115
+ flex-wrap: nowrap;
1116
+ scrollbar-width: none;
1117
+ -ms-overflow-style: none;
1118
+ padding-right: 40px;
1119
+ }
1120
+
1121
+ .channels::-webkit-scrollbar {
1122
+ display: none;
1123
+ }
1124
+
1125
+ .add-channel {
1126
+ display: none;
1127
+ }
1128
+
1129
+ .add-channel-mobile {
1130
+ display: flex;
1131
+ align-items: center;
1132
+ justify-content: center;
1133
+ flex-shrink: 0;
1134
+ background: transparent;
1135
+ color: #6b7280;
1136
+ font-weight: 600;
1137
+ border: none;
1138
+ border-left: 1px solid #d1d5db;
1139
+ padding: 4px 12px;
1140
+ font-size: 16px;
1141
+ cursor: pointer;
1142
+ position: static;
1143
+ width: auto;
1144
+ height: auto;
1145
+ border-radius: 0;
1146
+ box-shadow: none;
1147
+ }
1148
+
1149
+ .add-channel-mobile:hover {
1150
+ color: #111827;
1151
+ background: #d1d5db;
1152
+ }
1153
+
1154
+ .composer {
1155
+ flex-wrap: wrap;
1156
+ gap: 6px;
1157
+ }
1158
+
1159
+ .composer input {
1160
+ width: 100%;
1161
+ flex: none;
1162
+ box-sizing: border-box;
1163
+ }
1164
+
1165
+ .composer button {
1166
+ flex: 1;
1167
+ }
1168
+
1169
+ .qr-widget {
1170
+ bottom: 80px;
1171
+ }
1172
+
1173
+ .qr-toggle {
1174
+ padding: 6px 12px;
1175
+ font-size: 12px;
1176
+ }
1177
+ }
1178
+
1179
+
1180
+ /* ============================================================
1181
+ DARK MODE
1182
+ Two selectors, identical rules — no duplication within each.
1183
+ Media query handles OS preference.
1184
+ [data-theme="dark"] handles manual override.
1185
+ ============================================================ */
1186
+
1187
+ @media (prefers-color-scheme: dark) {
1188
+ :root:not([data-theme="light"]) {
1189
+ body {
1190
+ background: #0f1117;
1191
+ }
1192
+
1193
+ .app-header {
1194
+ background: #1a1d27;
1195
+ border-bottom-color: #2d3148;
1196
+ }
1197
+
1198
+ .app-name {
1199
+ color: #f3f4f6;
1200
+ }
1201
+
1202
+ .logo {
1203
+ filter: invert(1) brightness(1.2);
1204
+ }
1205
+
1206
+ .username-display {
1207
+ color: #d1d5db;
1208
+ }
1209
+
1210
+ .username-display:hover {
1211
+ color: #f3f4f6;
1212
+ border-bottom-color: #6b7280;
1213
+ }
1214
+
1215
+ .online-count {
1216
+ color: #6b7280;
1217
+ }
1218
+
1219
+ .link-btn {
1220
+ color: #9ca3af;
1221
+ }
1222
+
1223
+ .link-btn:hover {
1224
+ color: #f3f4f6;
1225
+ }
1226
+
1227
+ .theme-toggle:hover {
1228
+ background: #2d3148;
1229
+ }
1230
+
1231
+ .logout-btn {
1232
+ border-color: #2d3148;
1233
+ color: #9ca3af;
1234
+ }
1235
+
1236
+ .logout-btn:hover {
1237
+ background: #2d1515;
1238
+ border-color: #7f1d1d;
1239
+ color: #f87171;
1240
+ }
1241
+
1242
+ .search-wrapper input {
1243
+ background: #252836;
1244
+ border-color: #2d3148;
1245
+ color: #f3f4f6;
1246
+ }
1247
+
1248
+ .search-wrapper input:focus {
1249
+ background: #2d3148;
1250
+ border-color: #4b5563;
1251
+ }
1252
+
1253
+ .search-wrapper input::placeholder {
1254
+ color: #6b7280;
1255
+ }
1256
+
1257
+ .search-icon {
1258
+ color: #6b7280;
1259
+ }
1260
+
1261
+ .channel-bar {
1262
+ background: #1a1d27;
1263
+ }
1264
+
1265
+ .channel-bar::after {
1266
+ background: linear-gradient(to right, transparent, #1a1d27);
1267
+ }
1268
+
1269
+ .channels button {
1270
+ color: #9ca3af;
1271
+ }
1272
+
1273
+ .channels button:hover {
1274
+ background: #2d3148;
1275
+ color: #f3f4f6;
1276
+ }
1277
+
1278
+ .channels button.active {
1279
+ background: #252836;
1280
+ color: #f3f4f6;
1281
+ }
1282
+
1283
+ .add-channel {
1284
+ color: #9ca3af;
1285
+ }
1286
+
1287
+ .add-channel:hover {
1288
+ background: #2d3148;
1289
+ }
1290
+
1291
+ .add-channel-mobile {
1292
+ color: #9ca3af;
1293
+ border-left-color: #2d3148;
1294
+ }
1295
+
1296
+ .add-channel-mobile:hover {
1297
+ background: #2d3148;
1298
+ color: #f3f4f6;
1299
+ }
1300
+
1301
+ .composer {
1302
+ background: #1a1d27;
1303
+ }
1304
+
1305
+ input[type=text] {
1306
+ background: #252836;
1307
+ border-color: #2d3148;
1308
+ color: #f3f4f6;
1309
+ }
1310
+
1311
+ input[type=text]::placeholder {
1312
+ color: #6b7280;
1313
+ }
1314
+
1315
+ .drop {
1316
+ background: #1a1d27;
1317
+ border-color: #2d3148;
1318
+ color: #6b7280;
1319
+ }
1320
+
1321
+ .item {
1322
+ background: #1a1d27;
1323
+ color: #e5e7eb;
1324
+ }
1325
+
1326
+ .item:hover {
1327
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
1328
+ }
1329
+
1330
+ .item a {
1331
+ color: #60a5fa;
1332
+ }
1333
+
1334
+ .left {
1335
+ color: #e5e7eb;
1336
+ }
1337
+
1338
+ .left.flash {
1339
+ background: #064e3b;
1340
+ }
1341
+
1342
+ .left:hover::after {
1343
+ background: #374151;
1344
+ color: #f3f4f6;
1345
+ }
1346
+
1347
+ .meta {
1348
+ color: #6b7280;
1349
+ }
1350
+
1351
+ .empty-state {
1352
+ color: #4b5563;
1353
+ }
1354
+
1355
+ .size-tag.warn {
1356
+ background: #422006;
1357
+ color: #fbbf24;
1358
+ }
1359
+
1360
+ .size-tag.danger-light {
1361
+ background: #2d1515;
1362
+ color: #f87171;
1363
+ }
1364
+
1365
+ .icon-btn {
1366
+ background: #252836;
1367
+ border-color: #2d3148;
1368
+ color: #9ca3af;
1369
+ }
1370
+
1371
+ .icon-btn:hover {
1372
+ background: #2d3148;
1373
+ }
1374
+
1375
+ .icon-btn.delete {
1376
+ background: #1a1d27;
1377
+ border-color: #7f1d1d;
1378
+ color: #f87171;
1379
+ }
1380
+
1381
+ .icon-btn.delete:hover {
1382
+ background: #2d1515;
1383
+ }
1384
+
1385
+ .icon-btn.preview-active {
1386
+ background: #1e3a5f;
1387
+ border-color: #2563eb;
1388
+ color: #60a5fa;
1389
+ }
1390
+
1391
+ .move-dropdown {
1392
+ background: #1a1d27;
1393
+ border-color: #2d3148;
1394
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
1395
+ }
1396
+
1397
+ .move-dropdown button {
1398
+ color: #d1d5db;
1399
+ }
1400
+
1401
+ .move-dropdown button:hover {
1402
+ background: #252836;
1403
+ color: #f3f4f6;
1404
+ }
1405
+
1406
+ .move-dropdown .dropdown-label {
1407
+ color: #6b7280;
1408
+ }
1409
+
1410
+ .context-menu {
1411
+ background: #1a1d27;
1412
+ border-color: #2d3148;
1413
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
1414
+ }
1415
+
1416
+ .context-menu button {
1417
+ color: #d1d5db;
1418
+ }
1419
+
1420
+ .context-menu button:hover {
1421
+ background: #252836;
1422
+ }
1423
+
1424
+ .context-menu button.danger {
1425
+ color: #f87171;
1426
+ }
1427
+
1428
+ .context-menu button.danger:hover {
1429
+ background: #2d1515;
1430
+ }
1431
+
1432
+ .context-menu button.muted {
1433
+ color: #4b5563;
1434
+ }
1435
+
1436
+ .context-menu .menu-divider {
1437
+ background: #2d3148;
1438
+ }
1439
+
1440
+ .preview-panel {
1441
+ border-top-color: #2d3148;
1442
+ }
1443
+
1444
+ .preview-panel embed,
1445
+ .preview-panel iframe {
1446
+ background: #252836;
1447
+ }
1448
+
1449
+ .preview-panel pre {
1450
+ background: #0f1117;
1451
+ border-color: #2d3148;
1452
+ color: #e5e7eb;
1453
+ }
1454
+
1455
+ .preview-truncated,
1456
+ .preview-error,
1457
+ .preview-loading {
1458
+ color: #6b7280;
1459
+ }
1460
+
1461
+ .markdown-body {
1462
+ color: #e5e7eb;
1463
+ }
1464
+
1465
+ .markdown-body code {
1466
+ background: #252836;
1467
+ color: #e5e7eb;
1468
+ }
1469
+
1470
+ .markdown-body pre {
1471
+ background: #0f1117;
1472
+ border-color: #2d3148;
1473
+ }
1474
+
1475
+ .markdown-body a {
1476
+ color: #60a5fa;
1477
+ }
1478
+
1479
+ .qr-card {
1480
+ background: #1a1d27;
1481
+ border-color: #2d3148;
1482
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
1483
+ }
1484
+
1485
+ .qr-card .qr-label {
1486
+ color: #f3f4f6;
1487
+ }
1488
+
1489
+ .qr-card .qr-url {
1490
+ color: #9ca3af;
1491
+ }
1492
+
1493
+ .undo-toast {
1494
+ background: #374151;
1495
+ }
1496
+
1497
+ .load-more-btn {
1498
+ background: #1a1d27;
1499
+ color: #d1d5db;
1500
+ border-color: #2d3148;
1501
+ }
1502
+
1503
+ .load-more-btn:hover {
1504
+ background: #2d3148;
1505
+ }
1506
+
1507
+ .markdown-preview {
1508
+ color: #e5e7eb;
1509
+ }
1510
+
1511
+ .item-title {
1512
+ color: #6b7280;
1513
+ }
1514
+
1515
+ .title-input {
1516
+ background: #252836;
1517
+ border-color: #2d3148;
1518
+ color: #f3f4f6;
1519
+ }
1520
+
1521
+ .edit-textarea {
1522
+ background: #252836;
1523
+ border-color: #2d3148;
1524
+ color: #f3f4f6;
1525
+ }
1526
+
1527
+ .edit-textarea:focus {
1528
+ background: #1a1d27;
1529
+ border-color: #4b5563;
1530
+ }
1531
+
1532
+ .expiry-badge {
1533
+ background: #422006;
1534
+ color: #fbbf24;
1535
+ }
1536
+
1537
+ .expiry-badge.expiry-gone {
1538
+ background: #2d1515;
1539
+ color: #f87171;
1540
+ }
1541
+
1542
+ .seen-count {
1543
+ color: #6b7280;
1544
+ }
1545
+
1546
+ .more-dropdown {
1547
+ background: #1a1d27;
1548
+ border-color: #2d3148;
1549
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
1550
+ }
1551
+
1552
+ .more-dropdown button {
1553
+ color: #d1d5db;
1554
+ }
1555
+
1556
+ .more-dropdown button:hover {
1557
+ background: #252836;
1558
+ color: #f3f4f6;
1559
+ }
1560
+
1561
+ .more-dropdown .dropdown-label {
1562
+ color: #6b7280;
1563
+ }
1564
+
1565
+ .icon-btn.pinned i {
1566
+ color: #f59e0b;
1567
+ }
1568
+
1569
+ .item-new {
1570
+ border-left: 3px solid #16a34a;
1571
+ padding-left: 13px;
1572
+ background: #052e16;
1573
+ }
1574
+
1575
+ #uploadStatus {
1576
+ background: #1a1d27 !important;
1577
+ color: #e5e7eb !important;
1578
+ }
1579
+ }
1580
+ }
1581
+
1582
+ :root[data-theme="dark"] {
1583
+ body {
1584
+ background: #0f1117;
1585
+ }
1586
+
1587
+ .app-header {
1588
+ background: #1a1d27;
1589
+ border-bottom-color: #2d3148;
1590
+ }
1591
+
1592
+ .app-name {
1593
+ color: #f3f4f6;
1594
+ }
1595
+
1596
+ .logo {
1597
+ filter: invert(1) brightness(1.2);
1598
+ }
1599
+
1600
+ .username-display {
1601
+ color: #d1d5db;
1602
+ }
1603
+
1604
+ .username-display:hover {
1605
+ color: #f3f4f6;
1606
+ border-bottom-color: #6b7280;
1607
+ }
1608
+
1609
+ .online-count {
1610
+ color: #6b7280;
1611
+ }
1612
+
1613
+ .link-btn {
1614
+ color: #9ca3af;
1615
+ }
1616
+
1617
+ .link-btn:hover {
1618
+ color: #f3f4f6;
1619
+ }
1620
+
1621
+ .theme-toggle:hover {
1622
+ background: #2d3148;
1623
+ }
1624
+
1625
+ .logout-btn {
1626
+ border-color: #2d3148;
1627
+ color: #9ca3af;
1628
+ }
1629
+
1630
+ .logout-btn:hover {
1631
+ background: #2d1515;
1632
+ border-color: #7f1d1d;
1633
+ color: #f87171;
1634
+ }
1635
+
1636
+ .search-wrapper input {
1637
+ background: #252836;
1638
+ border-color: #2d3148;
1639
+ color: #f3f4f6;
1640
+ }
1641
+
1642
+ .search-wrapper input:focus {
1643
+ background: #2d3148;
1644
+ border-color: #4b5563;
1645
+ }
1646
+
1647
+ .search-wrapper input::placeholder {
1648
+ color: #6b7280;
1649
+ }
1650
+
1651
+ .search-icon {
1652
+ color: #6b7280;
1653
+ }
1654
+
1655
+ .channel-bar {
1656
+ background: #1a1d27;
1657
+ }
1658
+
1659
+ .channel-bar::after {
1660
+ background: linear-gradient(to right, transparent, #1a1d27);
1661
+ }
1662
+
1663
+ .channels button {
1664
+ color: #9ca3af;
1665
+ }
1666
+
1667
+ .channels button:hover {
1668
+ background: #2d3148;
1669
+ color: #f3f4f6;
1670
+ }
1671
+
1672
+ .channels button.active {
1673
+ background: #252836;
1674
+ color: #f3f4f6;
1675
+ }
1676
+
1677
+ .add-channel {
1678
+ color: #9ca3af;
1679
+ }
1680
+
1681
+ .add-channel:hover {
1682
+ background: #2d3148;
1683
+ }
1684
+
1685
+ .add-channel-mobile {
1686
+ color: #9ca3af;
1687
+ border-left-color: #2d3148;
1688
+ }
1689
+
1690
+ .add-channel-mobile:hover {
1691
+ background: #2d3148;
1692
+ color: #f3f4f6;
1693
+ }
1694
+
1695
+ .composer {
1696
+ background: #1a1d27;
1697
+ }
1698
+
1699
+ input[type=text] {
1700
+ background: #252836;
1701
+ border-color: #2d3148;
1702
+ color: #f3f4f6;
1703
+ }
1704
+
1705
+ input[type=text]::placeholder {
1706
+ color: #6b7280;
1707
+ }
1708
+
1709
+ .drop {
1710
+ background: #1a1d27;
1711
+ border-color: #2d3148;
1712
+ color: #6b7280;
1713
+ }
1714
+
1715
+ .item {
1716
+ background: #1a1d27;
1717
+ color: #e5e7eb;
1718
+ }
1719
+
1720
+ .item:hover {
1721
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
1722
+ }
1723
+
1724
+ .item a {
1725
+ color: #60a5fa;
1726
+ }
1727
+
1728
+ .left {
1729
+ color: #e5e7eb;
1730
+ }
1731
+
1732
+ .left.flash {
1733
+ background: #064e3b;
1734
+ }
1735
+
1736
+ .left:hover::after {
1737
+ background: #374151;
1738
+ color: #f3f4f6;
1739
+ }
1740
+
1741
+ .meta {
1742
+ color: #6b7280;
1743
+ }
1744
+
1745
+ .empty-state {
1746
+ color: #4b5563;
1747
+ }
1748
+
1749
+ .size-tag.warn {
1750
+ background: #422006;
1751
+ color: #fbbf24;
1752
+ }
1753
+
1754
+ .size-tag.danger-light {
1755
+ background: #2d1515;
1756
+ color: #f87171;
1757
+ }
1758
+
1759
+ .icon-btn {
1760
+ background: #252836;
1761
+ border-color: #2d3148;
1762
+ color: #9ca3af;
1763
+ }
1764
+
1765
+ .icon-btn:hover {
1766
+ background: #2d3148;
1767
+ }
1768
+
1769
+ .icon-btn.delete {
1770
+ background: #1a1d27;
1771
+ border-color: #7f1d1d;
1772
+ color: #f87171;
1773
+ }
1774
+
1775
+ .icon-btn.delete:hover {
1776
+ background: #2d1515;
1777
+ }
1778
+
1779
+ .icon-btn.preview-active {
1780
+ background: #1e3a5f;
1781
+ border-color: #2563eb;
1782
+ color: #60a5fa;
1783
+ }
1784
+
1785
+ .move-dropdown {
1786
+ background: #1a1d27;
1787
+ border-color: #2d3148;
1788
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
1789
+ }
1790
+
1791
+ .move-dropdown button {
1792
+ color: #d1d5db;
1793
+ }
1794
+
1795
+ .move-dropdown button:hover {
1796
+ background: #252836;
1797
+ color: #f3f4f6;
1798
+ }
1799
+
1800
+ .move-dropdown .dropdown-label {
1801
+ color: #6b7280;
1802
+ }
1803
+
1804
+ .context-menu {
1805
+ background: #1a1d27;
1806
+ border-color: #2d3148;
1807
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
1808
+ }
1809
+
1810
+ .context-menu button {
1811
+ color: #d1d5db;
1812
+ }
1813
+
1814
+ .context-menu button:hover {
1815
+ background: #252836;
1816
+ }
1817
+
1818
+ .context-menu button.danger {
1819
+ color: #f87171;
1820
+ }
1821
+
1822
+ .context-menu button.danger:hover {
1823
+ background: #2d1515;
1824
+ }
1825
+
1826
+ .context-menu button.muted {
1827
+ color: #4b5563;
1828
+ }
1829
+
1830
+ .context-menu .menu-divider {
1831
+ background: #2d3148;
1832
+ }
1833
+
1834
+ .preview-panel {
1835
+ border-top-color: #2d3148;
1836
+ }
1837
+
1838
+ .preview-panel embed,
1839
+ .preview-panel iframe {
1840
+ background: #252836;
1841
+ }
1842
+
1843
+ .preview-panel pre {
1844
+ background: #0f1117;
1845
+ border-color: #2d3148;
1846
+ color: #e5e7eb;
1847
+ }
1848
+
1849
+ .preview-truncated,
1850
+ .preview-error,
1851
+ .preview-loading {
1852
+ color: #6b7280;
1853
+ }
1854
+
1855
+ .markdown-body {
1856
+ color: #e5e7eb;
1857
+ }
1858
+
1859
+ .markdown-body code {
1860
+ background: #252836;
1861
+ color: #e5e7eb;
1862
+ }
1863
+
1864
+ .markdown-body pre {
1865
+ background: #0f1117;
1866
+ border-color: #2d3148;
1867
+ }
1868
+
1869
+ .markdown-body a {
1870
+ color: #60a5fa;
1871
+ }
1872
+
1873
+ .qr-card {
1874
+ background: #1a1d27;
1875
+ border-color: #2d3148;
1876
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
1877
+ }
1878
+
1879
+ .qr-card .qr-label {
1880
+ color: #f3f4f6;
1881
+ }
1882
+
1883
+ .qr-card .qr-url {
1884
+ color: #9ca3af;
1885
+ }
1886
+
1887
+ .undo-toast {
1888
+ background: #374151;
1889
+ }
1890
+
1891
+ .load-more-btn {
1892
+ background: #1a1d27;
1893
+ color: #d1d5db;
1894
+ border-color: #2d3148;
1895
+ }
1896
+
1897
+ .load-more-btn:hover {
1898
+ background: #2d3148;
1899
+ }
1900
+
1901
+ .markdown-preview {
1902
+ color: #e5e7eb;
1903
+ }
1904
+
1905
+ .item-title {
1906
+ color: #6b7280;
1907
+ }
1908
+
1909
+ .title-input {
1910
+ background: #252836;
1911
+ border-color: #2d3148;
1912
+ color: #f3f4f6;
1913
+ }
1914
+
1915
+ .edit-textarea {
1916
+ background: #252836;
1917
+ border-color: #2d3148;
1918
+ color: #f3f4f6;
1919
+ }
1920
+
1921
+ .edit-textarea:focus {
1922
+ background: #1a1d27;
1923
+ border-color: #4b5563;
1924
+ }
1925
+
1926
+ .expiry-badge {
1927
+ background: #422006;
1928
+ color: #fbbf24;
1929
+ }
1930
+
1931
+ .expiry-badge.expiry-gone {
1932
+ background: #2d1515;
1933
+ color: #f87171;
1934
+ }
1935
+
1936
+ .seen-count {
1937
+ color: #6b7280;
1938
+ }
1939
+
1940
+ .more-dropdown {
1941
+ background: #1a1d27;
1942
+ border-color: #2d3148;
1943
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
1944
+ }
1945
+
1946
+ .more-dropdown button {
1947
+ color: #d1d5db;
1948
+ }
1949
+
1950
+ .more-dropdown button:hover {
1951
+ background: #252836;
1952
+ color: #f3f4f6;
1953
+ }
1954
+
1955
+ .more-dropdown .dropdown-label {
1956
+ color: #6b7280;
1957
+ }
1958
+
1959
+ .icon-btn.pinned i {
1960
+ color: #f59e0b;
1961
+ }
1962
+
1963
+ .item-new {
1964
+ border-left: 3px solid #16a34a;
1965
+ padding-left: 13px;
1966
+ background: #052e16;
1967
+ }
1968
+
1969
+ #uploadStatus {
1970
+ background: #1a1d27 !important;
1971
+ color: #e5e7eb !important;
1972
+ }
1973
1973
  }