collabdocchat 1.2.13 → 2.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.
Files changed (62) hide show
  1. package/README.md +219 -218
  2. package/index.html +2 -0
  3. package/install-and-start.bat +5 -0
  4. package/install-and-start.sh +5 -0
  5. package/package.json +9 -2
  6. package/scripts/pre-publish-check.js +213 -0
  7. package/scripts/start-app.js +15 -15
  8. package/server/index.js +38 -6
  9. package/server/middleware/cache.js +115 -0
  10. package/server/middleware/errorHandler.js +209 -0
  11. package/server/models/Document.js +66 -59
  12. package/server/models/File.js +49 -43
  13. package/server/models/Group.js +6 -0
  14. package/server/models/KnowledgeBase.js +254 -0
  15. package/server/models/Message.js +43 -0
  16. package/server/models/Task.js +87 -55
  17. package/server/models/User.js +67 -60
  18. package/server/models/Workflow.js +249 -0
  19. package/server/routes/ai.js +327 -0
  20. package/server/routes/audit.js +245 -210
  21. package/server/routes/backup.js +108 -0
  22. package/server/routes/chunked-upload.js +343 -0
  23. package/server/routes/export.js +440 -0
  24. package/server/routes/files.js +294 -218
  25. package/server/routes/groups.js +182 -0
  26. package/server/routes/knowledge.js +509 -0
  27. package/server/routes/tasks.js +257 -110
  28. package/server/routes/workflows.js +380 -0
  29. package/server/utils/backup.js +439 -0
  30. package/server/utils/cache.js +223 -0
  31. package/server/utils/workflow-engine.js +479 -0
  32. package/server/websocket/enhanced.js +509 -0
  33. package/server/websocket/index.js +233 -1
  34. package/src/components/knowledge-modal.js +485 -0
  35. package/src/components/optimized-poll-detail.js +724 -0
  36. package/src/main.js +5 -0
  37. package/src/pages/admin-dashboard.js +2248 -44
  38. package/src/pages/optimized-backup-view.js +616 -0
  39. package/src/pages/optimized-knowledge-view.js +803 -0
  40. package/src/pages/optimized-task-detail.js +843 -0
  41. package/src/pages/optimized-workflow-view.js +806 -0
  42. package/src/pages/simplified-workflows.js +651 -0
  43. package/src/pages/user-dashboard.js +677 -58
  44. package/src/services/api.js +65 -1
  45. package/src/services/auth.js +1 -1
  46. package/src/services/websocket.js +124 -16
  47. package/src/styles/collaboration-modern.js +708 -0
  48. package/src/styles/enhancements.css +392 -0
  49. package/src/styles/main.css +620 -1420
  50. package/src/styles/responsive.css +1000 -0
  51. package/src/styles/sidebar-fix.css +60 -0
  52. package/src/utils/ai-assistant.js +1398 -0
  53. package/src/utils/chat-enhancements.js +509 -0
  54. package/src/utils/collaboration-enhancer.js +1151 -0
  55. package/src/utils/feature-integrator.js +1724 -0
  56. package/src/utils/onboarding-guide.js +734 -0
  57. package/src/utils/performance.js +394 -0
  58. package/src/utils/permission-manager.js +890 -0
  59. package/src/utils/responsive-handler.js +491 -0
  60. package/src/utils/theme-manager.js +811 -0
  61. package/src/utils/ui-enhancements-loader.js +329 -0
  62. package/USAGE.md +0 -298
@@ -0,0 +1,1000 @@
1
+ /**
2
+ * 响应式设计样式
3
+ * 支持桌面、平板、手机等不同设备
4
+ */
5
+
6
+ /* ========================================
7
+ 断点定义
8
+ ======================================== */
9
+ /*
10
+ - 手机: < 768px
11
+ - 平板: 768px - 1024px
12
+ - 桌面: > 1024px
13
+ */
14
+
15
+ /* ========================================
16
+ 通用响应式优化
17
+ ======================================== */
18
+
19
+ /* 确保所有图片和媒体自适应 */
20
+ img, video, canvas {
21
+ max-width: 100%;
22
+ height: auto;
23
+ }
24
+
25
+ /* 防止长文本溢出 */
26
+ * {
27
+ word-wrap: break-word;
28
+ overflow-wrap: break-word;
29
+ }
30
+
31
+ /* ========================================
32
+ 平板设备 (768px - 1024px)
33
+ ======================================== */
34
+ @media (max-width: 1024px) {
35
+ /* 侧边栏宽度调整 */
36
+ .sidebar {
37
+ width: 240px;
38
+ }
39
+
40
+ /* 主内容区域调整 */
41
+ .main-content {
42
+ padding: 20px;
43
+ }
44
+
45
+ /* 视图头部 */
46
+ .view-header {
47
+ flex-direction: column;
48
+ align-items: flex-start;
49
+ gap: 12px;
50
+ }
51
+
52
+ .view-header h2 {
53
+ font-size: 24px;
54
+ }
55
+
56
+ /* 群组网格 */
57
+ .groups-grid {
58
+ grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
59
+ gap: 16px;
60
+ }
61
+
62
+ /* 文档网格 */
63
+ .documents-list {
64
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
65
+ gap: 16px;
66
+ }
67
+
68
+ /* 知识库网格 */
69
+ .knowledge-list {
70
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
71
+ gap: 14px;
72
+ }
73
+
74
+ /* 备份统计卡片 */
75
+ .backup-stats {
76
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
77
+ gap: 16px;
78
+ }
79
+
80
+ /* 设置卡片网格 */
81
+ .settings-cards-grid {
82
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
83
+ gap: 16px;
84
+ }
85
+
86
+ /* 协作工具标签 */
87
+ .collab-tools-tabs-modern {
88
+ gap: 8px;
89
+ }
90
+
91
+ .collab-tab-btn {
92
+ min-width: 100px;
93
+ padding: 12px 16px;
94
+ font-size: 13px;
95
+ }
96
+
97
+ /* 模态框 */
98
+ .modal-content {
99
+ width: 85%;
100
+ max-width: 700px;
101
+ padding: 24px;
102
+ }
103
+
104
+ /* 任务详情信息网格 */
105
+ .task-detail-info {
106
+ grid-template-columns: 1fr;
107
+ gap: 12px;
108
+ }
109
+
110
+ /* 统计卡片 */
111
+ .stats-grid {
112
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
113
+ gap: 12px;
114
+ }
115
+ }
116
+
117
+ /* ========================================
118
+ 手机设备 (< 768px)
119
+ ======================================== */
120
+ @media (max-width: 768px) {
121
+ /* ===== 布局调整 ===== */
122
+
123
+ /* Dashboard布局改为垂直 */
124
+ .dashboard {
125
+ flex-direction: column;
126
+ height: auto;
127
+ min-height: 100vh;
128
+ }
129
+
130
+ /* 侧边栏改为顶部导航 */
131
+ .sidebar {
132
+ width: 100%;
133
+ height: auto;
134
+ max-height: none;
135
+ border-right: none;
136
+ border-bottom: 2px solid var(--border);
137
+ padding: 12px;
138
+ overflow-y: visible;
139
+ position: sticky;
140
+ top: 0;
141
+ z-index: 100;
142
+ background: var(--bg-card);
143
+ }
144
+
145
+ /* 侧边栏头部 */
146
+ .sidebar-header {
147
+ margin-bottom: 12px;
148
+ }
149
+
150
+ .sidebar-header h2 {
151
+ font-size: 18px;
152
+ }
153
+
154
+ /* 用户信息 */
155
+ .user-info {
156
+ padding: 10px;
157
+ margin-bottom: 12px;
158
+ }
159
+
160
+ .avatar {
161
+ width: 36px;
162
+ height: 36px;
163
+ font-size: 16px;
164
+ }
165
+
166
+ .username {
167
+ font-size: 14px;
168
+ }
169
+
170
+ .user-role {
171
+ font-size: 12px;
172
+ }
173
+
174
+ /* 导航菜单改为横向滚动 */
175
+ .nav-menu {
176
+ display: flex;
177
+ flex-direction: row;
178
+ overflow-x: auto;
179
+ overflow-y: hidden;
180
+ gap: 8px;
181
+ padding-bottom: 8px;
182
+ -webkit-overflow-scrolling: touch;
183
+ }
184
+
185
+ .nav-menu::-webkit-scrollbar {
186
+ height: 4px;
187
+ }
188
+
189
+ .nav-menu::-webkit-scrollbar-track {
190
+ background: var(--bg-dark);
191
+ border-radius: 2px;
192
+ }
193
+
194
+ .nav-menu::-webkit-scrollbar-thumb {
195
+ background: var(--primary);
196
+ border-radius: 2px;
197
+ }
198
+
199
+ .nav-item {
200
+ flex-shrink: 0;
201
+ padding: 10px 14px;
202
+ font-size: 13px;
203
+ white-space: nowrap;
204
+ }
205
+
206
+ .nav-item .icon {
207
+ font-size: 16px;
208
+ }
209
+
210
+ /* 侧边栏底部 */
211
+ .sidebar-footer {
212
+ display: flex;
213
+ flex-direction: row;
214
+ gap: 8px;
215
+ margin-top: 12px;
216
+ }
217
+
218
+ .sidebar-footer .nav-item {
219
+ flex: 1;
220
+ }
221
+
222
+ /* 退出登录按钮 */
223
+ .btn-logout {
224
+ padding: 10px;
225
+ font-size: 13px;
226
+ margin-top: 8px;
227
+ }
228
+
229
+ /* 主内容区域 */
230
+ .main-content {
231
+ padding: 16px;
232
+ height: auto;
233
+ max-height: none;
234
+ }
235
+
236
+ /* ===== 视图头部 ===== */
237
+ .view-header {
238
+ flex-direction: column;
239
+ align-items: stretch;
240
+ gap: 12px;
241
+ margin-bottom: 20px;
242
+ }
243
+
244
+ .view-header h2 {
245
+ font-size: 22px;
246
+ }
247
+
248
+ .view-header button {
249
+ width: 100%;
250
+ }
251
+
252
+ /* ===== 网格布局 ===== */
253
+ .groups-grid,
254
+ .documents-list,
255
+ .knowledge-list,
256
+ .files-list {
257
+ grid-template-columns: 1fr;
258
+ gap: 12px;
259
+ }
260
+
261
+ /* ===== 卡片样式 ===== */
262
+ .group-card,
263
+ .document-card,
264
+ .knowledge-card,
265
+ .file-card {
266
+ padding: 16px;
267
+ }
268
+
269
+ .group-card h3,
270
+ .document-card h3,
271
+ .knowledge-card h3 {
272
+ font-size: 16px;
273
+ }
274
+
275
+ /* ===== 任务列表 ===== */
276
+ .tasks-list {
277
+ gap: 12px;
278
+ }
279
+
280
+ .task-card {
281
+ padding: 16px;
282
+ }
283
+
284
+ .task-card h3 {
285
+ font-size: 16px;
286
+ }
287
+
288
+ .task-meta {
289
+ flex-direction: column;
290
+ gap: 8px;
291
+ }
292
+
293
+ .task-actions {
294
+ flex-direction: column;
295
+ gap: 8px;
296
+ }
297
+
298
+ .task-actions button {
299
+ width: 100%;
300
+ }
301
+
302
+ /* ===== 模态框 ===== */
303
+ .modal {
304
+ padding: 10px;
305
+ }
306
+
307
+ .modal-content {
308
+ width: 95%;
309
+ max-width: none;
310
+ padding: 20px;
311
+ max-height: 90vh;
312
+ overflow-y: auto;
313
+ }
314
+
315
+ .modal-header h3 {
316
+ font-size: 20px;
317
+ }
318
+
319
+ /* ===== 表单 ===== */
320
+ .form-group {
321
+ margin-bottom: 16px;
322
+ }
323
+
324
+ .form-group label {
325
+ font-size: 13px;
326
+ }
327
+
328
+ .form-group input,
329
+ .form-group select,
330
+ .form-group textarea {
331
+ padding: 10px 12px;
332
+ font-size: 14px;
333
+ }
334
+
335
+ /* ===== 按钮 ===== */
336
+ .btn-primary,
337
+ .btn-secondary,
338
+ .btn-danger,
339
+ .btn-success,
340
+ .btn-warning {
341
+ padding: 12px 16px;
342
+ font-size: 14px;
343
+ width: 100%;
344
+ }
345
+
346
+ .btn-sm {
347
+ padding: 8px 12px;
348
+ font-size: 12px;
349
+ }
350
+
351
+ /* ===== 聊天界面 ===== */
352
+ .chat-container {
353
+ height: calc(100vh - 200px);
354
+ min-height: 400px;
355
+ }
356
+
357
+ .messages {
358
+ padding: 12px;
359
+ gap: 12px;
360
+ }
361
+
362
+ .message {
363
+ max-width: 85%;
364
+ }
365
+
366
+ .message-content {
367
+ padding: 10px 12px;
368
+ font-size: 14px;
369
+ }
370
+
371
+ .chat-input {
372
+ padding: 12px;
373
+ gap: 8px;
374
+ }
375
+
376
+ .chat-input input {
377
+ padding: 10px 12px;
378
+ font-size: 14px;
379
+ }
380
+
381
+ /* ===== 编辑器 ===== */
382
+ .editor-container {
383
+ height: calc(100vh - 250px);
384
+ min-height: 300px;
385
+ padding: 12px;
386
+ }
387
+
388
+ .editor-toolbar {
389
+ flex-wrap: wrap;
390
+ gap: 8px;
391
+ }
392
+
393
+ #editor {
394
+ padding: 12px;
395
+ font-size: 14px;
396
+ }
397
+
398
+ /* ===== 搜索 ===== */
399
+ .search-box {
400
+ flex-direction: column;
401
+ gap: 8px;
402
+ }
403
+
404
+ .search-box input,
405
+ .search-box button {
406
+ width: 100%;
407
+ }
408
+
409
+ .search-filters {
410
+ flex-direction: column;
411
+ gap: 12px;
412
+ }
413
+
414
+ /* ===== 审计日志 ===== */
415
+ .audit-stats {
416
+ grid-template-columns: repeat(2, 1fr);
417
+ gap: 12px;
418
+ }
419
+
420
+ .stat-card {
421
+ padding: 16px;
422
+ }
423
+
424
+ .stat-number {
425
+ font-size: 24px;
426
+ }
427
+
428
+ .audit-header {
429
+ display: none;
430
+ }
431
+
432
+ .audit-row {
433
+ grid-template-columns: 1fr;
434
+ gap: 8px;
435
+ padding: 12px;
436
+ }
437
+
438
+ .audit-row > div {
439
+ display: flex;
440
+ justify-content: space-between;
441
+ align-items: center;
442
+ gap: 8px;
443
+ }
444
+
445
+ .audit-row > div::before {
446
+ content: attr(data-label);
447
+ font-weight: 600;
448
+ color: var(--text-secondary);
449
+ font-size: 12px;
450
+ }
451
+
452
+ /* ===== 备份管理 ===== */
453
+ .backup-stats {
454
+ grid-template-columns: 1fr;
455
+ gap: 12px;
456
+ }
457
+
458
+ .backup-header {
459
+ display: none;
460
+ }
461
+
462
+ .backup-row {
463
+ grid-template-columns: 1fr;
464
+ gap: 8px;
465
+ padding: 12px;
466
+ }
467
+
468
+ .backup-row > div {
469
+ display: flex;
470
+ justify-content: space-between;
471
+ align-items: center;
472
+ }
473
+
474
+ .backup-actions {
475
+ justify-content: flex-start;
476
+ flex-wrap: wrap;
477
+ }
478
+
479
+ /* ===== 设置页面 ===== */
480
+ .settings-cards-grid {
481
+ grid-template-columns: 1fr;
482
+ gap: 12px;
483
+ }
484
+
485
+ .setting-card {
486
+ padding: 20px;
487
+ }
488
+
489
+ .setting-icon {
490
+ font-size: 40px;
491
+ }
492
+
493
+ .settings-detail-modern {
494
+ padding: 16px;
495
+ }
496
+
497
+ .settings-header-modern {
498
+ padding: 24px 16px;
499
+ }
500
+
501
+ .settings-icon-large {
502
+ font-size: 48px;
503
+ }
504
+
505
+ .settings-header-modern h2 {
506
+ font-size: 24px;
507
+ }
508
+
509
+ .setting-card-detail {
510
+ flex-direction: column;
511
+ text-align: center;
512
+ padding: 16px;
513
+ }
514
+
515
+ .setting-card-header {
516
+ flex-direction: column;
517
+ gap: 12px;
518
+ }
519
+
520
+ .settings-actions {
521
+ flex-direction: column;
522
+ }
523
+
524
+ .btn-primary-large,
525
+ .btn-secondary-large {
526
+ width: 100%;
527
+ justify-content: center;
528
+ padding: 14px 24px;
529
+ font-size: 15px;
530
+ }
531
+
532
+ /* ===== 语言选择器 ===== */
533
+ .language-selector-modern {
534
+ grid-template-columns: 1fr;
535
+ }
536
+
537
+ .language-card {
538
+ padding: 16px;
539
+ }
540
+
541
+ /* ===== 数据统计 ===== */
542
+ .data-stats-cards {
543
+ grid-template-columns: 1fr;
544
+ gap: 12px;
545
+ }
546
+
547
+ /* ===== AI功能展示 ===== */
548
+ .features-grid {
549
+ grid-template-columns: 1fr;
550
+ }
551
+
552
+ /* ===== 帮助中心 ===== */
553
+ .help-sections {
554
+ grid-template-columns: 1fr;
555
+ gap: 16px;
556
+ }
557
+
558
+ .help-footer {
559
+ flex-direction: column;
560
+ text-align: center;
561
+ }
562
+
563
+ .help-footer button {
564
+ width: 100%;
565
+ }
566
+
567
+ /* ===== 任务详情 ===== */
568
+ .task-detail-view {
569
+ padding: 20px;
570
+ }
571
+
572
+ .task-detail-header {
573
+ flex-direction: column;
574
+ align-items: flex-start;
575
+ gap: 12px;
576
+ }
577
+
578
+ .task-detail-header h2 {
579
+ font-size: 20px;
580
+ }
581
+
582
+ .task-detail-info {
583
+ grid-template-columns: 1fr;
584
+ gap: 10px;
585
+ padding: 16px;
586
+ }
587
+
588
+ .stats-grid {
589
+ grid-template-columns: repeat(2, 1fr);
590
+ gap: 10px;
591
+ }
592
+
593
+ .stat-card {
594
+ padding: 16px;
595
+ }
596
+
597
+ .stat-value {
598
+ font-size: 24px;
599
+ }
600
+
601
+ .members-table-header,
602
+ .members-table-row {
603
+ grid-template-columns: 1fr;
604
+ gap: 8px;
605
+ padding: 12px;
606
+ }
607
+
608
+ .members-table-header {
609
+ display: none;
610
+ }
611
+
612
+ .members-table-row > div {
613
+ display: flex;
614
+ justify-content: space-between;
615
+ align-items: center;
616
+ }
617
+
618
+ /* ===== 协作工具 ===== */
619
+ .collab-tools-tabs-modern {
620
+ flex-direction: column;
621
+ gap: 8px;
622
+ }
623
+
624
+ .collab-tab-btn {
625
+ width: 100%;
626
+ flex-direction: row;
627
+ justify-content: center;
628
+ padding: 12px 16px;
629
+ }
630
+
631
+ .tab-icon {
632
+ font-size: 20px;
633
+ }
634
+
635
+ .tab-text {
636
+ font-size: 13px;
637
+ }
638
+
639
+ /* 白板 */
640
+ .whiteboard-container {
641
+ min-height: 400px;
642
+ }
643
+
644
+ .whiteboard-toolbar {
645
+ flex-wrap: wrap;
646
+ gap: 8px;
647
+ padding: 12px;
648
+ }
649
+
650
+ .tool-btn {
651
+ font-size: 12px;
652
+ padding: 8px 12px;
653
+ }
654
+
655
+ #whiteboard {
656
+ margin: 12px;
657
+ max-height: 400px;
658
+ }
659
+
660
+ #brushSize {
661
+ width: 100%;
662
+ }
663
+
664
+ .whiteboard-footer {
665
+ flex-direction: column;
666
+ gap: 12px;
667
+ padding: 12px;
668
+ }
669
+
670
+ /* 投票创建器 */
671
+ .poll-creator {
672
+ padding: 16px;
673
+ max-height: calc(100vh - 200px);
674
+ }
675
+
676
+ .poll-creator h3 {
677
+ font-size: 20px;
678
+ }
679
+
680
+ /* 代码编辑器 */
681
+ .code-editor {
682
+ min-height: 400px;
683
+ }
684
+
685
+ .editor-toolbar {
686
+ flex-wrap: wrap;
687
+ padding: 12px;
688
+ }
689
+
690
+ #codeEditor {
691
+ padding: 12px;
692
+ font-size: 13px;
693
+ }
694
+
695
+ .code-output {
696
+ max-height: 150px;
697
+ }
698
+
699
+ /* 思维导图 */
700
+ .mindmap-container {
701
+ min-height: 400px;
702
+ }
703
+
704
+ .mindmap-toolbar {
705
+ flex-wrap: wrap;
706
+ gap: 8px;
707
+ padding: 12px;
708
+ }
709
+
710
+ .mindmap-toolbar button {
711
+ font-size: 12px;
712
+ padding: 8px 12px;
713
+ }
714
+
715
+ .mindmap-canvas {
716
+ min-height: 300px;
717
+ }
718
+
719
+ .mindmap-node {
720
+ min-width: 100px;
721
+ padding: 10px 12px;
722
+ font-size: 13px;
723
+ }
724
+
725
+ .mindmap-node.root {
726
+ min-width: 140px;
727
+ padding: 12px 16px;
728
+ font-size: 16px;
729
+ }
730
+
731
+ .mindmap-legend {
732
+ font-size: 11px;
733
+ padding: 10px;
734
+ }
735
+
736
+ .legend-color {
737
+ width: 16px;
738
+ height: 16px;
739
+ }
740
+
741
+ /* ===== 登录页面 ===== */
742
+ .login-container {
743
+ padding: 16px;
744
+ }
745
+
746
+ .login-card {
747
+ padding: 24px;
748
+ max-width: 100%;
749
+ }
750
+
751
+ .logo {
752
+ font-size: 28px;
753
+ }
754
+
755
+ .auth-form {
756
+ gap: 16px;
757
+ }
758
+
759
+ /* ===== 随机点名 ===== */
760
+ .call-panel {
761
+ padding: 20px;
762
+ }
763
+
764
+ .call-controls {
765
+ flex-direction: column;
766
+ align-items: stretch;
767
+ gap: 12px;
768
+ }
769
+
770
+ .call-controls input {
771
+ width: 100%;
772
+ }
773
+
774
+ .called-members {
775
+ grid-template-columns: repeat(2, 1fr);
776
+ gap: 12px;
777
+ }
778
+
779
+ /* ===== 导出管理 ===== */
780
+ .export-container {
781
+ grid-template-columns: 1fr;
782
+ gap: 14px;
783
+ }
784
+
785
+ .export-section {
786
+ padding: 14px;
787
+ }
788
+
789
+ .export-actions {
790
+ flex-direction: column;
791
+ }
792
+
793
+ .export-actions button {
794
+ width: 100%;
795
+ }
796
+
797
+ /* ===== 知识库过滤器 ===== */
798
+ .knowledge-filters {
799
+ flex-direction: column;
800
+ gap: 10px;
801
+ }
802
+
803
+ .knowledge-filters input,
804
+ .knowledge-filters select {
805
+ width: 100%;
806
+ min-width: auto;
807
+ }
808
+
809
+ /* ===== 投票结果 ===== */
810
+ .poll-options-results {
811
+ gap: 10px;
812
+ }
813
+
814
+ .poll-option-result {
815
+ padding: 12px;
816
+ }
817
+
818
+ .poll-option-header {
819
+ flex-direction: column;
820
+ align-items: flex-start;
821
+ gap: 8px;
822
+ }
823
+ }
824
+
825
+ /* ========================================
826
+ 小屏手机 (< 480px)
827
+ ======================================== */
828
+ @media (max-width: 480px) {
829
+ /* 进一步优化小屏幕 */
830
+ .main-content {
831
+ padding: 12px;
832
+ }
833
+
834
+ .view-header h2 {
835
+ font-size: 20px;
836
+ }
837
+
838
+ .modal-content {
839
+ padding: 16px;
840
+ }
841
+
842
+ .btn-primary,
843
+ .btn-secondary {
844
+ padding: 10px 12px;
845
+ font-size: 13px;
846
+ }
847
+
848
+ .audit-stats,
849
+ .stats-grid {
850
+ grid-template-columns: 1fr;
851
+ }
852
+
853
+ .called-members {
854
+ grid-template-columns: 1fr;
855
+ }
856
+
857
+ .setting-icon {
858
+ font-size: 36px;
859
+ }
860
+
861
+ .settings-icon-large {
862
+ font-size: 40px;
863
+ }
864
+
865
+ .task-detail-header h2 {
866
+ font-size: 18px;
867
+ }
868
+
869
+ .stat-value {
870
+ font-size: 20px;
871
+ }
872
+ }
873
+
874
+ /* ========================================
875
+ 横屏模式优化
876
+ ======================================== */
877
+ @media (max-width: 768px) and (orientation: landscape) {
878
+ .sidebar {
879
+ position: fixed;
880
+ top: 0;
881
+ left: 0;
882
+ right: 0;
883
+ z-index: 1000;
884
+ max-height: 60px;
885
+ overflow: hidden;
886
+ }
887
+
888
+ .sidebar-header,
889
+ .user-info,
890
+ .sidebar-footer {
891
+ display: none;
892
+ }
893
+
894
+ .nav-menu {
895
+ margin: 0;
896
+ padding: 8px;
897
+ }
898
+
899
+ .main-content {
900
+ margin-top: 60px;
901
+ }
902
+
903
+ .chat-container,
904
+ .editor-container {
905
+ height: calc(100vh - 120px);
906
+ }
907
+ }
908
+
909
+ /* ========================================
910
+ 触摸设备优化
911
+ ======================================== */
912
+ @media (hover: none) and (pointer: coarse) {
913
+ /* 增大可点击区域 */
914
+ .nav-item,
915
+ .btn-primary,
916
+ .btn-secondary,
917
+ button {
918
+ min-height: 44px;
919
+ min-width: 44px;
920
+ }
921
+
922
+ /* 移除悬停效果 */
923
+ .nav-item:hover,
924
+ .btn-primary:hover,
925
+ .group-card:hover,
926
+ .document-card:hover {
927
+ transform: none;
928
+ }
929
+
930
+ /* 优化滚动 */
931
+ * {
932
+ -webkit-overflow-scrolling: touch;
933
+ }
934
+
935
+ /* 禁用双击缩放 */
936
+ * {
937
+ touch-action: manipulation;
938
+ }
939
+ }
940
+
941
+ /* ========================================
942
+ 打印样式
943
+ ======================================== */
944
+ @media print {
945
+ .sidebar,
946
+ .nav-menu,
947
+ .btn-logout,
948
+ .view-header button,
949
+ .task-actions,
950
+ .modal,
951
+ .whiteboard-toolbar,
952
+ .editor-toolbar,
953
+ .mindmap-toolbar {
954
+ display: none !important;
955
+ }
956
+
957
+ .main-content {
958
+ padding: 0;
959
+ max-height: none;
960
+ overflow: visible;
961
+ }
962
+
963
+ .dashboard {
964
+ display: block;
965
+ }
966
+
967
+ * {
968
+ background: white !important;
969
+ color: black !important;
970
+ }
971
+ }
972
+
973
+ /* ========================================
974
+ 高对比度模式
975
+ ======================================== */
976
+ @media (prefers-contrast: high) {
977
+ :root {
978
+ --border: #ffffff;
979
+ --text-primary: #ffffff;
980
+ --text-secondary: #cccccc;
981
+ }
982
+
983
+ .btn-primary,
984
+ .btn-secondary,
985
+ .nav-item {
986
+ border-width: 3px;
987
+ }
988
+ }
989
+
990
+ /* ========================================
991
+ 减少动画模式
992
+ ======================================== */
993
+ @media (prefers-reduced-motion: reduce) {
994
+ * {
995
+ animation-duration: 0.01ms !important;
996
+ animation-iteration-count: 1 !important;
997
+ transition-duration: 0.01ms !important;
998
+ }
999
+ }
1000
+