collabdocchat 1.0.0

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.
@@ -0,0 +1,1421 @@
1
+ :root {
2
+ --primary: #6366f1;
3
+ --primary-dark: #4f46e5;
4
+ --secondary: #8b5cf6;
5
+ --success: #10b981;
6
+ --danger: #ef4444;
7
+ --warning: #f59e0b;
8
+ --bg-dark: #0f172a;
9
+ --bg-card: #1e293b;
10
+ --bg-hover: #334155;
11
+ --text-primary: #f1f5f9;
12
+ --text-secondary: #94a3b8;
13
+ --border: #334155;
14
+ --shadow: rgba(0, 0, 0, 0.3);
15
+ }
16
+
17
+ * {
18
+ margin: 0;
19
+ padding: 0;
20
+ box-sizing: border-box;
21
+ }
22
+
23
+ body {
24
+ font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
25
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
26
+ color: var(--text-primary);
27
+ min-height: 100vh;
28
+ }
29
+
30
+ /* 登录页面 */
31
+ .login-container {
32
+ display: flex;
33
+ align-items: center;
34
+ justify-content: center;
35
+ min-height: 100vh;
36
+ padding: 20px;
37
+ }
38
+
39
+ .login-card {
40
+ background: var(--bg-card);
41
+ border-radius: 20px;
42
+ padding: 40px;
43
+ width: 100%;
44
+ max-width: 450px;
45
+ box-shadow: 0 20px 60px var(--shadow);
46
+ animation: slideUp 0.5s ease;
47
+ }
48
+
49
+ @keyframes slideUp {
50
+ from {
51
+ opacity: 0;
52
+ transform: translateY(30px);
53
+ }
54
+ to {
55
+ opacity: 1;
56
+ transform: translateY(0);
57
+ }
58
+ }
59
+
60
+ .login-header {
61
+ text-align: center;
62
+ margin-bottom: 30px;
63
+ }
64
+
65
+ .logo {
66
+ font-size: 32px;
67
+ font-weight: 700;
68
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
69
+ -webkit-background-clip: text;
70
+ -webkit-text-fill-color: transparent;
71
+ margin-bottom: 10px;
72
+ }
73
+
74
+ .tagline {
75
+ color: var(--text-secondary);
76
+ font-size: 14px;
77
+ }
78
+
79
+ .auth-switch {
80
+ text-align: center;
81
+ margin-top: 20px;
82
+ padding-top: 20px;
83
+ border-top: 1px solid var(--border);
84
+ }
85
+
86
+ .switch-text {
87
+ color: var(--text-secondary);
88
+ font-size: 14px;
89
+ margin: 0;
90
+ }
91
+
92
+ .link-btn {
93
+ background: none;
94
+ border: none;
95
+ color: var(--primary);
96
+ text-decoration: none;
97
+ cursor: pointer;
98
+ font-size: 14px;
99
+ font-weight: 600;
100
+ padding: 0;
101
+ margin-left: 5px;
102
+ transition: all 0.3s;
103
+ }
104
+
105
+ .link-btn:hover {
106
+ color: var(--primary-dark);
107
+ text-decoration: underline;
108
+ }
109
+
110
+ .register-note {
111
+ text-align: center;
112
+ padding: 15px;
113
+ background: rgba(99, 102, 241, 0.1);
114
+ border: 1px solid rgba(99, 102, 241, 0.2);
115
+ border-radius: 8px;
116
+ margin-bottom: 10px;
117
+ }
118
+
119
+ .register-note p {
120
+ color: var(--text-secondary);
121
+ font-size: 13px;
122
+ margin: 0;
123
+ }
124
+
125
+ .auth-form {
126
+ display: flex;
127
+ flex-direction: column;
128
+ gap: 20px;
129
+ }
130
+
131
+ .auth-form.hidden,
132
+ .hidden {
133
+ display: none;
134
+ }
135
+
136
+ .form-group {
137
+ display: flex;
138
+ flex-direction: column;
139
+ gap: 8px;
140
+ }
141
+
142
+ .form-group label {
143
+ font-size: 14px;
144
+ font-weight: 500;
145
+ color: var(--text-secondary);
146
+ }
147
+
148
+ .form-group input,
149
+ .form-group select,
150
+ .form-group textarea {
151
+ padding: 12px 16px;
152
+ background: var(--bg-dark);
153
+ border: 2px solid var(--border);
154
+ border-radius: 10px;
155
+ color: var(--text-primary);
156
+ font-size: 15px;
157
+ transition: all 0.3s;
158
+ }
159
+
160
+ .form-group input:focus,
161
+ .form-group select:focus,
162
+ .form-group textarea:focus {
163
+ outline: none;
164
+ border-color: var(--primary);
165
+ }
166
+
167
+ .btn-primary {
168
+ padding: 14px;
169
+ background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
170
+ border: none;
171
+ border-radius: 10px;
172
+ color: white;
173
+ font-size: 16px;
174
+ font-weight: 600;
175
+ cursor: pointer;
176
+ transition: all 0.3s;
177
+ }
178
+
179
+ .btn-primary:hover {
180
+ transform: translateY(-2px);
181
+ box-shadow: 0 10px 30px rgba(99, 102, 241, 0.4);
182
+ }
183
+
184
+ .error-message {
185
+ color: var(--danger);
186
+ font-size: 14px;
187
+ min-height: 20px;
188
+ }
189
+
190
+ /* 仪表板 */
191
+ .dashboard {
192
+ display: flex;
193
+ height: 100vh;
194
+ background: var(--bg-dark);
195
+ }
196
+
197
+ .sidebar {
198
+ width: 280px;
199
+ background: var(--bg-card);
200
+ border-right: 1px solid var(--border);
201
+ display: flex;
202
+ flex-direction: column;
203
+ padding: 20px;
204
+ }
205
+
206
+ .sidebar-header {
207
+ display: flex;
208
+ align-items: center;
209
+ justify-content: space-between;
210
+ margin-bottom: 30px;
211
+ }
212
+
213
+ .sidebar-header h2 {
214
+ font-size: 20px;
215
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
216
+ -webkit-background-clip: text;
217
+ -webkit-text-fill-color: transparent;
218
+ }
219
+
220
+ .badge-admin {
221
+ background: var(--primary);
222
+ color: white;
223
+ padding: 4px 12px;
224
+ border-radius: 20px;
225
+ font-size: 12px;
226
+ font-weight: 600;
227
+ }
228
+
229
+ .badge-user {
230
+ background: var(--success);
231
+ color: white;
232
+ padding: 4px 12px;
233
+ border-radius: 20px;
234
+ font-size: 12px;
235
+ font-weight: 600;
236
+ }
237
+
238
+ .user-info {
239
+ display: flex;
240
+ align-items: center;
241
+ gap: 12px;
242
+ padding: 15px;
243
+ background: var(--bg-dark);
244
+ border-radius: 12px;
245
+ margin-bottom: 30px;
246
+ }
247
+
248
+ .avatar {
249
+ width: 45px;
250
+ height: 45px;
251
+ border-radius: 50%;
252
+ background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
253
+ display: flex;
254
+ align-items: center;
255
+ justify-content: center;
256
+ font-weight: 700;
257
+ font-size: 18px;
258
+ }
259
+
260
+ .username {
261
+ font-weight: 600;
262
+ font-size: 15px;
263
+ }
264
+
265
+ .user-role {
266
+ font-size: 13px;
267
+ color: var(--text-secondary);
268
+ }
269
+
270
+ .nav-menu {
271
+ flex: 1;
272
+ display: flex;
273
+ flex-direction: column;
274
+ gap: 8px;
275
+ }
276
+
277
+ .nav-item {
278
+ display: flex;
279
+ align-items: center;
280
+ gap: 12px;
281
+ padding: 14px 16px;
282
+ background: transparent;
283
+ border: none;
284
+ border-radius: 10px;
285
+ color: var(--text-secondary);
286
+ cursor: pointer;
287
+ transition: all 0.3s;
288
+ font-size: 15px;
289
+ text-align: left;
290
+ }
291
+
292
+ .nav-item:hover {
293
+ background: var(--bg-hover);
294
+ color: var(--text-primary);
295
+ }
296
+
297
+ .nav-item.active {
298
+ background: var(--primary);
299
+ color: white;
300
+ }
301
+
302
+ .nav-item .icon {
303
+ font-size: 20px;
304
+ }
305
+
306
+ .btn-logout {
307
+ padding: 12px;
308
+ background: var(--danger);
309
+ border: none;
310
+ border-radius: 10px;
311
+ color: white;
312
+ font-size: 14px;
313
+ font-weight: 600;
314
+ cursor: pointer;
315
+ transition: all 0.3s;
316
+ }
317
+
318
+ .btn-logout:hover {
319
+ background: #dc2626;
320
+ }
321
+
322
+ .main-content {
323
+ flex: 1;
324
+ overflow-y: auto;
325
+ padding: 30px;
326
+ }
327
+
328
+ .view-header {
329
+ display: flex;
330
+ align-items: center;
331
+ justify-content: space-between;
332
+ margin-bottom: 30px;
333
+ }
334
+
335
+ .view-header h2 {
336
+ font-size: 28px;
337
+ font-weight: 700;
338
+ }
339
+
340
+ /* 群组网格 */
341
+ .groups-grid {
342
+ display: grid;
343
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
344
+ gap: 20px;
345
+ }
346
+
347
+ .group-card {
348
+ background: var(--bg-card);
349
+ border-radius: 15px;
350
+ padding: 25px;
351
+ transition: all 0.3s;
352
+ border: 2px solid transparent;
353
+ }
354
+
355
+ .group-card:hover {
356
+ border-color: var(--primary);
357
+ transform: translateY(-5px);
358
+ box-shadow: 0 10px 30px var(--shadow);
359
+ }
360
+
361
+ .group-card h3 {
362
+ font-size: 20px;
363
+ margin-bottom: 10px;
364
+ }
365
+
366
+ .group-card p {
367
+ color: var(--text-secondary);
368
+ font-size: 14px;
369
+ margin-bottom: 15px;
370
+ }
371
+
372
+ .group-stats {
373
+ display: flex;
374
+ gap: 15px;
375
+ margin-bottom: 15px;
376
+ font-size: 13px;
377
+ color: var(--text-secondary);
378
+ }
379
+
380
+ .btn-select {
381
+ width: 100%;
382
+ padding: 10px;
383
+ background: var(--primary);
384
+ border: none;
385
+ border-radius: 8px;
386
+ color: white;
387
+ font-weight: 600;
388
+ cursor: pointer;
389
+ transition: all 0.3s;
390
+ }
391
+
392
+ .btn-select:hover {
393
+ background: var(--primary-dark);
394
+ }
395
+
396
+ /* 任务列表 */
397
+ .tasks-list {
398
+ display: flex;
399
+ flex-direction: column;
400
+ gap: 15px;
401
+ }
402
+
403
+ .task-card {
404
+ background: var(--bg-card);
405
+ border-radius: 15px;
406
+ padding: 20px;
407
+ border-left: 4px solid var(--primary);
408
+ }
409
+
410
+ .task-card.status-completed {
411
+ border-left-color: var(--success);
412
+ opacity: 0.7;
413
+ }
414
+
415
+ .task-card.status-terminated {
416
+ border-left-color: var(--danger);
417
+ opacity: 0.7;
418
+ }
419
+
420
+ .task-card h3 {
421
+ font-size: 18px;
422
+ margin-bottom: 10px;
423
+ }
424
+
425
+ .task-card p {
426
+ color: var(--text-secondary);
427
+ font-size: 14px;
428
+ margin-bottom: 15px;
429
+ }
430
+
431
+ .task-meta {
432
+ display: flex;
433
+ gap: 15px;
434
+ flex-wrap: wrap;
435
+ font-size: 13px;
436
+ color: var(--text-secondary);
437
+ }
438
+
439
+ .status-badge {
440
+ padding: 4px 12px;
441
+ border-radius: 20px;
442
+ background: var(--primary);
443
+ color: white;
444
+ font-weight: 600;
445
+ }
446
+
447
+ .task-actions {
448
+ margin-top: 15px;
449
+ display: flex;
450
+ gap: 10px;
451
+ }
452
+
453
+ .btn-sm {
454
+ padding: 8px 16px;
455
+ font-size: 13px;
456
+ border-radius: 8px;
457
+ border: none;
458
+ cursor: pointer;
459
+ font-weight: 600;
460
+ transition: all 0.3s;
461
+ }
462
+
463
+ .btn-success {
464
+ background: var(--success);
465
+ color: white;
466
+ }
467
+
468
+ .btn-danger {
469
+ background: var(--danger);
470
+ color: white;
471
+ border: none;
472
+ cursor: pointer;
473
+ transition: all 0.3s;
474
+ }
475
+
476
+ .btn-danger:hover {
477
+ background: #dc2626;
478
+ transform: translateY(-2px);
479
+ box-shadow: 0 5px 15px rgba(239, 68, 68, 0.4);
480
+ }
481
+
482
+ .btn-danger:active {
483
+ transform: translateY(0);
484
+ box-shadow: 0 2px 8px rgba(239, 68, 68, 0.3);
485
+ }
486
+
487
+ /* 文档列表 */
488
+ .documents-list {
489
+ display: grid;
490
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
491
+ gap: 20px;
492
+ }
493
+
494
+ .document-card {
495
+ background: var(--bg-card);
496
+ border-radius: 15px;
497
+ padding: 20px;
498
+ transition: all 0.3s;
499
+ }
500
+
501
+ .document-card:hover {
502
+ transform: translateY(-3px);
503
+ box-shadow: 0 10px 30px var(--shadow);
504
+ }
505
+
506
+ .document-card h3 {
507
+ font-size: 18px;
508
+ margin-bottom: 15px;
509
+ }
510
+
511
+ .doc-meta {
512
+ display: flex;
513
+ flex-direction: column;
514
+ gap: 8px;
515
+ font-size: 13px;
516
+ color: var(--text-secondary);
517
+ margin-bottom: 15px;
518
+ }
519
+
520
+ .btn-edit {
521
+ width: 100%;
522
+ padding: 10px;
523
+ background: var(--primary);
524
+ border: none;
525
+ border-radius: 8px;
526
+ color: white;
527
+ font-weight: 600;
528
+ cursor: pointer;
529
+ transition: all 0.3s;
530
+ }
531
+
532
+ /* 编辑器 */
533
+ .editor-container {
534
+ background: var(--bg-card);
535
+ border-radius: 15px;
536
+ padding: 20px;
537
+ height: calc(100vh - 200px);
538
+ display: flex;
539
+ flex-direction: column;
540
+ }
541
+
542
+ .editor-toolbar {
543
+ display: flex;
544
+ justify-content: space-between;
545
+ align-items: center;
546
+ margin-bottom: 15px;
547
+ padding-bottom: 15px;
548
+ border-bottom: 1px solid var(--border);
549
+ }
550
+
551
+ .online-users {
552
+ display: flex;
553
+ gap: 10px;
554
+ flex-wrap: wrap;
555
+ }
556
+
557
+ .user-badge {
558
+ padding: 6px 12px;
559
+ background: var(--bg-dark);
560
+ border-radius: 20px;
561
+ font-size: 13px;
562
+ }
563
+
564
+ .user-badge.typing {
565
+ background: var(--primary);
566
+ animation: pulse 1s infinite;
567
+ }
568
+
569
+ @keyframes pulse {
570
+ 0%, 100% { opacity: 1; }
571
+ 50% { opacity: 0.6; }
572
+ }
573
+
574
+ #editor {
575
+ flex: 1;
576
+ background: var(--bg-dark);
577
+ border: 2px solid var(--border);
578
+ border-radius: 10px;
579
+ padding: 20px;
580
+ color: var(--text-primary);
581
+ font-family: 'Consolas', monospace;
582
+ font-size: 15px;
583
+ line-height: 1.6;
584
+ resize: none;
585
+ }
586
+
587
+ #editor:focus {
588
+ outline: none;
589
+ border-color: var(--primary);
590
+ }
591
+
592
+ .editor-footer {
593
+ margin-top: 15px;
594
+ padding-top: 15px;
595
+ border-top: 1px solid var(--border);
596
+ font-size: 13px;
597
+ color: var(--text-secondary);
598
+ }
599
+
600
+ /* 聊天 */
601
+ .chat-container {
602
+ background: var(--bg-card);
603
+ border-radius: 15px;
604
+ height: calc(100vh - 200px);
605
+ display: flex;
606
+ flex-direction: column;
607
+ }
608
+
609
+ .messages {
610
+ flex: 1;
611
+ overflow-y: auto;
612
+ padding: 20px;
613
+ display: flex;
614
+ flex-direction: column;
615
+ gap: 15px;
616
+ }
617
+
618
+ .message {
619
+ display: flex;
620
+ flex-direction: column;
621
+ gap: 5px;
622
+ max-width: 70%;
623
+ }
624
+
625
+ .message.own {
626
+ align-self: flex-end;
627
+ }
628
+
629
+ .message-header {
630
+ display: flex;
631
+ gap: 10px;
632
+ font-size: 12px;
633
+ color: var(--text-secondary);
634
+ }
635
+
636
+ .message-content {
637
+ background: var(--bg-dark);
638
+ padding: 12px 16px;
639
+ border-radius: 12px;
640
+ word-wrap: break-word;
641
+ }
642
+
643
+ .message.own .message-content {
644
+ background: var(--primary);
645
+ }
646
+
647
+ .notification {
648
+ align-self: center;
649
+ background: var(--bg-hover);
650
+ padding: 8px 16px;
651
+ border-radius: 20px;
652
+ font-size: 13px;
653
+ color: var(--text-secondary);
654
+ }
655
+
656
+ .chat-input {
657
+ display: flex;
658
+ gap: 10px;
659
+ padding: 20px;
660
+ border-top: 1px solid var(--border);
661
+ }
662
+
663
+ .chat-input input {
664
+ flex: 1;
665
+ padding: 12px 16px;
666
+ background: var(--bg-dark);
667
+ border: 2px solid var(--border);
668
+ border-radius: 10px;
669
+ color: var(--text-primary);
670
+ font-size: 15px;
671
+ }
672
+
673
+ .chat-input input:focus {
674
+ outline: none;
675
+ border-color: var(--primary);
676
+ }
677
+
678
+ /* 点名面板 */
679
+ .call-panel {
680
+ background: var(--bg-card);
681
+ border-radius: 15px;
682
+ padding: 30px;
683
+ }
684
+
685
+ .call-controls {
686
+ display: flex;
687
+ align-items: center;
688
+ gap: 15px;
689
+ margin-bottom: 30px;
690
+ }
691
+
692
+ .call-controls label {
693
+ font-weight: 600;
694
+ }
695
+
696
+ .call-controls input {
697
+ width: 80px;
698
+ padding: 10px;
699
+ background: var(--bg-dark);
700
+ border: 2px solid var(--border);
701
+ border-radius: 8px;
702
+ color: var(--text-primary);
703
+ font-size: 16px;
704
+ }
705
+
706
+ .btn-large {
707
+ padding: 14px 30px;
708
+ font-size: 18px;
709
+ }
710
+
711
+ .call-result {
712
+ min-height: 200px;
713
+ }
714
+
715
+ .called-members {
716
+ display: grid;
717
+ grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
718
+ gap: 20px;
719
+ margin-top: 20px;
720
+ }
721
+
722
+ .member-card {
723
+ background: var(--bg-dark);
724
+ border-radius: 12px;
725
+ padding: 20px;
726
+ text-align: center;
727
+ animation: bounceIn 0.5s ease;
728
+ }
729
+
730
+ @keyframes bounceIn {
731
+ 0% {
732
+ opacity: 0;
733
+ transform: scale(0.3);
734
+ }
735
+ 50% {
736
+ transform: scale(1.05);
737
+ }
738
+ 100% {
739
+ opacity: 1;
740
+ transform: scale(1);
741
+ }
742
+ }
743
+
744
+ .member-card .avatar {
745
+ margin: 0 auto 10px;
746
+ }
747
+
748
+ .member-name {
749
+ font-weight: 600;
750
+ }
751
+
752
+ /* 模态框 */
753
+ .modal {
754
+ position: fixed;
755
+ top: 0;
756
+ left: 0;
757
+ right: 0;
758
+ bottom: 0;
759
+ background: rgba(0, 0, 0, 0.7);
760
+ display: flex;
761
+ align-items: center;
762
+ justify-content: center;
763
+ z-index: 1000;
764
+ }
765
+
766
+ .modal.hidden {
767
+ display: none;
768
+ }
769
+
770
+ .modal-content {
771
+ background: var(--bg-card);
772
+ border-radius: 15px;
773
+ padding: 30px;
774
+ width: 90%;
775
+ max-width: 500px;
776
+ }
777
+
778
+ .modal-content h3 {
779
+ margin-bottom: 20px;
780
+ font-size: 24px;
781
+ }
782
+
783
+ .modal-content form {
784
+ display: flex;
785
+ flex-direction: column;
786
+ gap: 15px;
787
+ }
788
+
789
+ .btn-secondary {
790
+ padding: 12px;
791
+ background: var(--bg-hover);
792
+ border: none;
793
+ border-radius: 8px;
794
+ color: var(--text-primary);
795
+ font-weight: 600;
796
+ cursor: pointer;
797
+ transition: all 0.3s;
798
+ }
799
+
800
+ .btn-back {
801
+ padding: 10px 20px;
802
+ background: var(--bg-hover);
803
+ border: none;
804
+ border-radius: 8px;
805
+ color: var(--text-primary);
806
+ font-weight: 600;
807
+ cursor: pointer;
808
+ transition: all 0.3s;
809
+ }
810
+
811
+ .btn-back:hover {
812
+ background: var(--border);
813
+ }
814
+
815
+ .empty-state {
816
+ text-align: center;
817
+ padding: 60px 20px;
818
+ color: var(--text-secondary);
819
+ font-size: 16px;
820
+ }
821
+
822
+ .doc-status {
823
+ padding: 8px 16px;
824
+ background: var(--bg-card);
825
+ border-radius: 20px;
826
+ font-size: 14px;
827
+ }
828
+
829
+ .doc-link {
830
+ color: var(--primary);
831
+ text-decoration: none;
832
+ font-size: 14px;
833
+ margin-top: 10px;
834
+ display: inline-block;
835
+ }
836
+
837
+ .doc-link:hover {
838
+ text-decoration: underline;
839
+ }
840
+
841
+ /* 审计日志样式 */
842
+ .audit-stats {
843
+ display: grid;
844
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
845
+ gap: 20px;
846
+ margin-bottom: 30px;
847
+ }
848
+
849
+ .stat-card {
850
+ background: var(--bg-card);
851
+ border-radius: 12px;
852
+ padding: 20px;
853
+ text-align: center;
854
+ box-shadow: 0 4px 20px var(--shadow);
855
+ }
856
+
857
+ .stat-card h3 {
858
+ font-size: 14px;
859
+ color: var(--text-secondary);
860
+ margin-bottom: 10px;
861
+ font-weight: 500;
862
+ }
863
+
864
+ .stat-number {
865
+ font-size: 32px;
866
+ font-weight: 700;
867
+ color: var(--primary);
868
+ }
869
+
870
+ .audit-table {
871
+ background: var(--bg-card);
872
+ border-radius: 12px;
873
+ overflow: hidden;
874
+ box-shadow: 0 4px 20px var(--shadow);
875
+ }
876
+
877
+ .audit-header {
878
+ display: grid;
879
+ grid-template-columns: 150px 120px 120px 1fr 2fr;
880
+ gap: 20px;
881
+ padding: 15px 20px;
882
+ background: var(--bg-hover);
883
+ font-weight: 600;
884
+ font-size: 14px;
885
+ color: var(--text-secondary);
886
+ text-transform: uppercase;
887
+ letter-spacing: 0.5px;
888
+ }
889
+
890
+ .audit-row {
891
+ display: grid;
892
+ grid-template-columns: 150px 120px 120px 1fr 2fr;
893
+ gap: 20px;
894
+ padding: 15px 20px;
895
+ border-bottom: 1px solid var(--border);
896
+ cursor: pointer;
897
+ transition: background 0.3s;
898
+ }
899
+
900
+ .audit-row:hover {
901
+ background: var(--bg-hover);
902
+ }
903
+
904
+ .audit-row:last-child {
905
+ border-bottom: none;
906
+ }
907
+
908
+ .audit-time {
909
+ font-size: 12px;
910
+ color: var(--text-secondary);
911
+ }
912
+
913
+ .audit-user {
914
+ display: flex;
915
+ align-items: center;
916
+ gap: 8px;
917
+ }
918
+
919
+ .audit-user .avatar {
920
+ width: 24px;
921
+ height: 24px;
922
+ font-size: 10px;
923
+ }
924
+
925
+ .audit-user span {
926
+ font-size: 13px;
927
+ }
928
+
929
+ .audit-action .action-badge {
930
+ padding: 4px 8px;
931
+ border-radius: 12px;
932
+ font-size: 11px;
933
+ font-weight: 500;
934
+ text-transform: uppercase;
935
+ letter-spacing: 0.3px;
936
+ }
937
+
938
+ .action-badge.action-document_create {
939
+ background: rgba(16, 185, 129, 0.2);
940
+ color: var(--success);
941
+ }
942
+
943
+ .action-badge.action-document_update {
944
+ background: rgba(59, 130, 246, 0.2);
945
+ color: #3b82f6;
946
+ }
947
+
948
+ .action-badge.action-document_delete {
949
+ background: rgba(239, 68, 68, 0.2);
950
+ color: var(--danger);
951
+ }
952
+
953
+ .action-badge.action-content_edit {
954
+ background: rgba(245, 158, 11, 0.2);
955
+ color: var(--warning);
956
+ }
957
+
958
+ .action-badge.action-title_edit {
959
+ background: rgba(139, 92, 246, 0.2);
960
+ color: var(--secondary);
961
+ }
962
+
963
+ .action-badge.action-document_permission_change {
964
+ background: rgba(107, 114, 128, 0.2);
965
+ color: #6b7280;
966
+ }
967
+
968
+ .audit-resource {
969
+ font-size: 13px;
970
+ font-weight: 500;
971
+ overflow: hidden;
972
+ text-overflow: ellipsis;
973
+ white-space: nowrap;
974
+ }
975
+
976
+ .audit-description {
977
+ font-size: 13px;
978
+ color: var(--text-secondary);
979
+ overflow: hidden;
980
+ text-overflow: ellipsis;
981
+ white-space: nowrap;
982
+ }
983
+
984
+ .pagination {
985
+ display: flex;
986
+ align-items: center;
987
+ justify-content: center;
988
+ gap: 15px;
989
+ margin-top: 20px;
990
+ }
991
+
992
+ .pagination button {
993
+ padding: 8px 16px;
994
+ background: var(--bg-card);
995
+ border: 1px solid var(--border);
996
+ border-radius: 6px;
997
+ color: var(--text-primary);
998
+ cursor: pointer;
999
+ transition: all 0.3s;
1000
+ }
1001
+
1002
+ .pagination button:hover:not(:disabled) {
1003
+ background: var(--bg-hover);
1004
+ }
1005
+
1006
+ .pagination button:disabled {
1007
+ opacity: 0.5;
1008
+ cursor: not-allowed;
1009
+ }
1010
+
1011
+ #pageInfo {
1012
+ color: var(--text-secondary);
1013
+ font-size: 14px;
1014
+ }
1015
+
1016
+ .form-select, .form-input {
1017
+ padding: 8px 12px;
1018
+ background: var(--bg-card);
1019
+ border: 1px solid var(--border);
1020
+ border-radius: 6px;
1021
+ color: var(--text-primary);
1022
+ font-size: 14px;
1023
+ }
1024
+
1025
+ .form-select option {
1026
+ background: var(--bg-card);
1027
+ color: var(--text-primary);
1028
+ }
1029
+
1030
+ .loading {
1031
+ text-align: center;
1032
+ padding: 40px;
1033
+ color: var(--text-secondary);
1034
+ }
1035
+
1036
+ .error-state {
1037
+ text-align: center;
1038
+ padding: 40px;
1039
+ color: var(--danger);
1040
+ background: rgba(239, 68, 68, 0.1);
1041
+ border-radius: 8px;
1042
+ margin: 20px 0;
1043
+ }
1044
+
1045
+ .modal-header {
1046
+ display: flex;
1047
+ justify-content: space-between;
1048
+ align-items: center;
1049
+ margin-bottom: 20px;
1050
+ padding-bottom: 15px;
1051
+ border-bottom: 1px solid var(--border);
1052
+ }
1053
+
1054
+ .close-btn {
1055
+ background: none;
1056
+ border: none;
1057
+ color: var(--text-secondary);
1058
+ font-size: 24px;
1059
+ cursor: pointer;
1060
+ padding: 0;
1061
+ width: 30px;
1062
+ height: 30px;
1063
+ display: flex;
1064
+ align-items: center;
1065
+ justify-content: center;
1066
+ border-radius: 50%;
1067
+ transition: all 0.3s;
1068
+ }
1069
+
1070
+ .close-btn:hover {
1071
+ background: var(--bg-hover);
1072
+ color: var(--text-primary);
1073
+ }
1074
+
1075
+ .audit-detail {
1076
+ padding: 20px;
1077
+ background: var(--bg-dark);
1078
+ border-radius: 8px;
1079
+ }
1080
+
1081
+ .audit-detail p {
1082
+ margin-bottom: 10px;
1083
+ line-height: 1.6;
1084
+ }
1085
+
1086
+ /* 响应式设计 */
1087
+ @media (max-width: 768px) {
1088
+ .audit-header,
1089
+ .audit-row {
1090
+ grid-template-columns: 1fr;
1091
+ gap: 10px;
1092
+ }
1093
+
1094
+ .audit-header > div,
1095
+ .audit-row > div {
1096
+ display: flex;
1097
+ justify-content: space-between;
1098
+ align-items: center;
1099
+ }
1100
+
1101
+ .audit-header > div::before,
1102
+ .audit-row > div::before {
1103
+ content: attr(data-label);
1104
+ font-weight: 600;
1105
+ color: var(--text-secondary);
1106
+ font-size: 12px;
1107
+ }
1108
+
1109
+ .view-header {
1110
+ flex-direction: column;
1111
+ gap: 15px;
1112
+ }
1113
+
1114
+ .view-header > div {
1115
+ flex-wrap: wrap;
1116
+ gap: 10px;
1117
+ }
1118
+ }
1119
+
1120
+ /* 文件上传和文件列表样式 */
1121
+ .files-list {
1122
+ display: grid;
1123
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
1124
+ gap: 20px;
1125
+ padding: 20px;
1126
+ }
1127
+
1128
+ .file-card {
1129
+ background: var(--bg-card);
1130
+ border-radius: 12px;
1131
+ padding: 20px;
1132
+ display: flex;
1133
+ gap: 15px;
1134
+ align-items: flex-start;
1135
+ transition: transform 0.2s, box-shadow 0.2s;
1136
+ }
1137
+
1138
+ .file-card:hover {
1139
+ transform: translateY(-2px);
1140
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
1141
+ }
1142
+
1143
+ .file-icon {
1144
+ font-size: 40px;
1145
+ flex-shrink: 0;
1146
+ }
1147
+
1148
+ .file-info {
1149
+ flex: 1;
1150
+ min-width: 0;
1151
+ }
1152
+
1153
+ .file-info h4 {
1154
+ margin: 0 0 8px 0;
1155
+ color: var(--text-primary);
1156
+ font-size: 16px;
1157
+ word-break: break-word;
1158
+ }
1159
+
1160
+ .file-meta {
1161
+ display: flex;
1162
+ flex-wrap: wrap;
1163
+ gap: 12px;
1164
+ font-size: 12px;
1165
+ color: var(--text-secondary);
1166
+ margin-bottom: 8px;
1167
+ }
1168
+
1169
+ .file-description {
1170
+ color: var(--text-secondary);
1171
+ font-size: 13px;
1172
+ margin: 8px 0 0 0;
1173
+ line-height: 1.4;
1174
+ }
1175
+
1176
+ .file-actions {
1177
+ display: flex;
1178
+ gap: 8px;
1179
+ flex-shrink: 0;
1180
+ }
1181
+
1182
+ .file-actions a {
1183
+ text-decoration: none;
1184
+ }
1185
+
1186
+ /* 表情包选择器样式 */
1187
+ .btn-emoji {
1188
+ background: var(--bg-dark);
1189
+ border: 2px solid var(--border);
1190
+ border-radius: 10px;
1191
+ padding: 12px 16px;
1192
+ font-size: 20px;
1193
+ cursor: pointer;
1194
+ transition: all 0.2s;
1195
+ }
1196
+
1197
+ .btn-emoji:hover {
1198
+ background: var(--bg-hover);
1199
+ border-color: var(--primary);
1200
+ }
1201
+
1202
+ .btn-emoji:disabled {
1203
+ opacity: 0.5;
1204
+ cursor: not-allowed;
1205
+ }
1206
+
1207
+ emoji-picker {
1208
+ position: absolute;
1209
+ bottom: 70px;
1210
+ left: 20px;
1211
+ z-index: 1000;
1212
+ border-radius: 12px;
1213
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
1214
+ }
1215
+
1216
+ emoji-picker.hidden {
1217
+ display: none;
1218
+ }
1219
+
1220
+ /* 搜索功能样式 */
1221
+ .search-container {
1222
+ padding: 20px;
1223
+ }
1224
+
1225
+ .search-box {
1226
+ display: flex;
1227
+ gap: 10px;
1228
+ margin-bottom: 20px;
1229
+ }
1230
+
1231
+ .search-box input {
1232
+ flex: 1;
1233
+ padding: 12px 16px;
1234
+ background: var(--bg-dark);
1235
+ border: 2px solid var(--border);
1236
+ border-radius: 10px;
1237
+ color: var(--text-primary);
1238
+ font-size: 15px;
1239
+ }
1240
+
1241
+ .search-box input:focus {
1242
+ outline: none;
1243
+ border-color: var(--primary);
1244
+ }
1245
+
1246
+ .search-filters {
1247
+ display: flex;
1248
+ gap: 20px;
1249
+ margin-bottom: 20px;
1250
+ padding: 15px;
1251
+ background: var(--bg-card);
1252
+ border-radius: 10px;
1253
+ }
1254
+
1255
+ .search-filters label {
1256
+ display: flex;
1257
+ align-items: center;
1258
+ gap: 8px;
1259
+ cursor: pointer;
1260
+ color: var(--text-primary);
1261
+ font-size: 14px;
1262
+ }
1263
+
1264
+ .search-filters input[type="checkbox"] {
1265
+ width: 18px;
1266
+ height: 18px;
1267
+ cursor: pointer;
1268
+ }
1269
+
1270
+ .search-results {
1271
+ display: flex;
1272
+ flex-direction: column;
1273
+ gap: 15px;
1274
+ }
1275
+
1276
+ .search-result-item {
1277
+ background: var(--bg-card);
1278
+ border-radius: 12px;
1279
+ padding: 20px;
1280
+ transition: transform 0.2s, box-shadow 0.2s;
1281
+ }
1282
+
1283
+ .search-result-item:hover {
1284
+ transform: translateY(-2px);
1285
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
1286
+ }
1287
+
1288
+ .result-header {
1289
+ display: flex;
1290
+ justify-content: space-between;
1291
+ align-items: center;
1292
+ margin-bottom: 10px;
1293
+ }
1294
+
1295
+ .result-type {
1296
+ font-size: 12px;
1297
+ color: var(--text-secondary);
1298
+ background: var(--bg-dark);
1299
+ padding: 4px 8px;
1300
+ border-radius: 6px;
1301
+ }
1302
+
1303
+ .result-time {
1304
+ font-size: 12px;
1305
+ color: var(--text-secondary);
1306
+ }
1307
+
1308
+ .search-result-item h4 {
1309
+ margin: 0 0 8px 0;
1310
+ color: var(--text-primary);
1311
+ font-size: 16px;
1312
+ }
1313
+
1314
+ .search-result-item p {
1315
+ margin: 0 0 10px 0;
1316
+ color: var(--text-secondary);
1317
+ font-size: 14px;
1318
+ line-height: 1.5;
1319
+ }
1320
+
1321
+ .search-result-item mark {
1322
+ background: var(--primary);
1323
+ color: white;
1324
+ padding: 2px 4px;
1325
+ border-radius: 3px;
1326
+ }
1327
+
1328
+ .result-group,
1329
+ .result-status {
1330
+ display: inline-block;
1331
+ font-size: 12px;
1332
+ color: var(--text-secondary);
1333
+ background: var(--bg-dark);
1334
+ padding: 4px 8px;
1335
+ border-radius: 6px;
1336
+ margin-right: 8px;
1337
+ }
1338
+
1339
+ .loading {
1340
+ text-align: center;
1341
+ padding: 40px;
1342
+ color: var(--text-secondary);
1343
+ }
1344
+
1345
+ /* Quill编辑器样式调整 */
1346
+ .ql-container {
1347
+ font-size: 15px;
1348
+ color: var(--text-primary);
1349
+ background: var(--bg-dark);
1350
+ border: 2px solid var(--border);
1351
+ border-radius: 10px;
1352
+ min-height: 400px;
1353
+ }
1354
+
1355
+ .ql-toolbar {
1356
+ background: var(--bg-card);
1357
+ border: 2px solid var(--border);
1358
+ border-bottom: none;
1359
+ border-radius: 10px 10px 0 0;
1360
+ }
1361
+
1362
+ .ql-toolbar .ql-stroke {
1363
+ stroke: var(--text-primary);
1364
+ }
1365
+
1366
+ .ql-toolbar .ql-fill {
1367
+ fill: var(--text-primary);
1368
+ }
1369
+
1370
+ .ql-toolbar button:hover,
1371
+ .ql-toolbar button.ql-active {
1372
+ color: var(--primary);
1373
+ }
1374
+
1375
+ .ql-toolbar button:hover .ql-stroke,
1376
+ .ql-toolbar button.ql-active .ql-stroke {
1377
+ stroke: var(--primary);
1378
+ }
1379
+
1380
+ .ql-toolbar button:hover .ql-fill,
1381
+ .ql-toolbar button.ql-active .ql-fill {
1382
+ fill: var(--primary);
1383
+ }
1384
+
1385
+ #editor.readonly .ql-toolbar {
1386
+ display: none;
1387
+ }
1388
+
1389
+ #editor.readonly .ql-container {
1390
+ border-top: 2px solid var(--border);
1391
+ border-radius: 10px;
1392
+ }
1393
+
1394
+ /* 聊天输入框增强 */
1395
+ .chat-input {
1396
+ position: relative;
1397
+ }
1398
+
1399
+ .chat-input .btn-emoji {
1400
+ flex-shrink: 0;
1401
+ }
1402
+
1403
+ /* 响应式调整 */
1404
+ @media (max-width: 768px) {
1405
+ .files-list {
1406
+ grid-template-columns: 1fr;
1407
+ }
1408
+
1409
+ emoji-picker {
1410
+ left: 10px;
1411
+ right: 10px;
1412
+ width: auto;
1413
+ }
1414
+
1415
+ .search-filters {
1416
+ flex-direction: column;
1417
+ gap: 10px;
1418
+ }
1419
+ }
1420
+
1421
+