@incremark/theme 0.3.10 → 0.4.0-alpha.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.
package/dist/chat.css ADDED
@@ -0,0 +1,2790 @@
1
+ /**
2
+ * Chat UI 组件样式
3
+ *
4
+ * 包含 Incremark Markdown 渲染样式 + Chat UI 组件样式
5
+ * 导入此文件即可获得完整的样式支持
6
+ */
7
+ /* 导入 Incremark Markdown 渲染样式 */
8
+ /**
9
+ * 样式主入口
10
+ *
11
+ * 导入所有样式文件
12
+ */
13
+ /**
14
+ * 基础样式
15
+ */
16
+ .incremark-theme-provider {
17
+ height: 100%;
18
+ }
19
+ /* ============ 主容器 ============ */
20
+ .incremark {
21
+ font-family: var(--incremark-typography-font-family-base);
22
+ line-height: var(--incremark-typography-line-height-normal);
23
+ color: var(--incremark-color-text-primary);
24
+ }
25
+ /* ============ 链接样式 ============ */
26
+ .incremark a {
27
+ color: var(--incremark-color-interactive-link);
28
+ text-decoration: none;
29
+ transition: color var(--incremark-animation-duration-normal) var(--incremark-animation-easing-ease-out);
30
+ }
31
+ .incremark a:hover {
32
+ color: var(--incremark-color-interactive-link-hover);
33
+ text-decoration: underline;
34
+ }
35
+ .incremark a:visited {
36
+ color: var(--incremark-color-interactive-link-visited);
37
+ }
38
+ /* ============ 块状态显示 ============ */
39
+ .incremark-block {
40
+ transition: border-color var(--incremark-animation-duration-normal) var(--incremark-animation-easing-ease-out);
41
+ }
42
+ .incremark-block.incremark-show-status.incremark-pending,
43
+ .incremark-block.incremark-show-status.pending {
44
+ border-left: 3px solid var(--incremark-color-status-pending);
45
+ padding-left: var(--incremark-spacing-lg);
46
+ opacity: 0.8;
47
+ }
48
+ /* ============ 动画效果 ============ */
49
+ .incremark-fade-in {
50
+ animation: incremark-fade-in var(--incremark-animation-duration-slow) var(--incremark-animation-easing-ease-out);
51
+ }
52
+ @keyframes incremark-fade-in {
53
+ from {
54
+ opacity: 0;
55
+ }
56
+ to {
57
+ opacity: 1;
58
+ }
59
+ }
60
+ /* Vue Transition 支持 */
61
+ .incremark-fade-enter-active {
62
+ transition: opacity var(--incremark-animation-duration-normal) var(--incremark-animation-easing-ease-out);
63
+ }
64
+ .incremark-fade-enter-from {
65
+ opacity: 0;
66
+ }
67
+ .incremark-fade-leave-active {
68
+ transition: opacity var(--incremark-animation-duration-normal) var(--incremark-animation-easing-ease-out);
69
+ }
70
+ .incremark-fade-leave-to {
71
+ opacity: 0;
72
+ }
73
+ /**
74
+ * Icon 图标组件样式
75
+ */
76
+ /* ============ 图标基础样式 ============ */
77
+ .incremark-icon {
78
+ display: inline-flex;
79
+ align-items: center;
80
+ justify-content: center;
81
+ flex-shrink: 0;
82
+ width: 1em;
83
+ height: 1em;
84
+ }
85
+ .incremark-icon svg {
86
+ width: 100%;
87
+ height: 100%;
88
+ }
89
+ /**
90
+ * Button 组件样式
91
+ *
92
+ * 公共按钮样式,供代码块、Mermaid 图表等使用
93
+ */
94
+ /* ============ 基础按钮样式 ============ */
95
+ .incremark-btn {
96
+ padding: var(--incremark-spacing-xs) var(--incremark-spacing-md);
97
+ border: 1px solid var(--incremark-color-border-default);
98
+ border-radius: var(--incremark-border-radius-sm);
99
+ background: transparent;
100
+ color: var(--incremark-color-text-tertiary);
101
+ font-size: var(--incremark-typography-font-size-sm);
102
+ font-weight: var(--incremark-typography-font-weight-medium);
103
+ cursor: pointer;
104
+ transition: all var(--incremark-animation-duration-normal) var(--incremark-animation-easing-ease-out);
105
+ user-select: none;
106
+ white-space: nowrap;
107
+ }
108
+ .incremark-btn:hover:not(:disabled) {
109
+ background-color: var(--incremark-color-background-elevated);
110
+ color: var(--incremark-color-text-primary);
111
+ border-color: var(--incremark-color-border-strong);
112
+ }
113
+ .incremark-btn:active:not(:disabled) {
114
+ transform: translateY(1px);
115
+ }
116
+ .incremark-btn:disabled {
117
+ opacity: 0.5;
118
+ cursor: not-allowed;
119
+ }
120
+ /* ============ 图标按钮(用于深色背景,如代码块头部)============ */
121
+ .incremark-icon-btn {
122
+ display: inline-flex;
123
+ align-items: center;
124
+ justify-content: center;
125
+ width: 24px;
126
+ height: 24px;
127
+ padding: 0;
128
+ border: none;
129
+ border-radius: var(--incremark-border-radius-sm);
130
+ background: transparent;
131
+ color: var(--incremark-color-code-block-text);
132
+ font-size: 16px;
133
+ cursor: pointer;
134
+ transition: all var(--incremark-animation-duration-normal) var(--incremark-animation-easing-ease-out);
135
+ user-select: none;
136
+ opacity: 0.6;
137
+ }
138
+ .incremark-icon-btn:hover:not(:disabled) {
139
+ background-color: var(--incremark-color-neutral-8);
140
+ opacity: 1;
141
+ }
142
+ .incremark-icon-btn:active:not(:disabled) {
143
+ transform: scale(0.95);
144
+ }
145
+ .incremark-icon-btn:disabled {
146
+ opacity: 0.3;
147
+ cursor: not-allowed;
148
+ }
149
+ /**
150
+ * Heading 组件样式
151
+ */
152
+ .incremark-heading {
153
+ margin: var(--incremark-spacing-md) 0;
154
+ font-weight: var(--incremark-typography-font-weight-semibold);
155
+ line-height: var(--incremark-typography-line-height-tight);
156
+ color: var(--incremark-color-text-primary);
157
+ /* h1 特殊样式:带下边框 */
158
+ /* h6 特殊样式:颜色较淡 */
159
+ }
160
+ .incremark-heading--h1 {
161
+ font-size: var(--incremark-typography-font-size-heading-h1);
162
+ border-bottom: 1px solid var(--incremark-color-border-default);
163
+ padding-bottom: var(--incremark-spacing-sm);
164
+ }
165
+ .incremark-heading--h2 {
166
+ font-size: var(--incremark-typography-font-size-heading-h2);
167
+ }
168
+ .incremark-heading--h3 {
169
+ font-size: var(--incremark-typography-font-size-heading-h3);
170
+ }
171
+ .incremark-heading--h4 {
172
+ font-size: var(--incremark-typography-font-size-heading-h4);
173
+ }
174
+ .incremark-heading--h5 {
175
+ font-size: var(--incremark-typography-font-size-heading-h5);
176
+ }
177
+ .incremark-heading--h6 {
178
+ font-size: var(--incremark-typography-font-size-heading-h6);
179
+ color: var(--incremark-color-text-secondary);
180
+ }
181
+ /**
182
+ * Paragraph 组件样式
183
+ */
184
+ .incremark-paragraph {
185
+ margin: var(--incremark-spacing-lg) 0;
186
+ line-height: var(--incremark-typography-line-height-normal);
187
+ color: var(--incremark-color-text-primary);
188
+ }
189
+ /**
190
+ * Inline Code 组件样式
191
+ */
192
+ .incremark-inline-code {
193
+ padding: var(--incremark-spacing-xs) var(--incremark-spacing-sm);
194
+ background: var(--incremark-color-code-inline-background);
195
+ border-radius: var(--incremark-border-radius-sm);
196
+ font-family: var(--incremark-typography-font-family-mono);
197
+ font-size: var(--incremark-typography-font-size-sm);
198
+ color: var(--incremark-color-code-inline-text);
199
+ }
200
+ /* ============ 内联 HTML 样式 ============ */
201
+ .incremark-inline-html {
202
+ display: contents;
203
+ }
204
+ /**
205
+ * Image 组件样式
206
+ */
207
+ .incremark-image {
208
+ max-width: 100%;
209
+ height: auto;
210
+ display: block;
211
+ margin: var(--incremark-spacing-md) 0;
212
+ }
213
+ /**
214
+ * List 组件样式
215
+ */
216
+ /* ============ 列表容器 ============ */
217
+ .incremark-list {
218
+ margin: var(--incremark-spacing-lg) 0;
219
+ padding-left: 2em;
220
+ /* 任务列表:移除默认标记 */
221
+ }
222
+ .incremark-list.task-list {
223
+ list-style: none;
224
+ padding-left: 0;
225
+ }
226
+ /* ============ 列表项 ============ */
227
+ .incremark-list-item {
228
+ margin: var(--incremark-spacing-sm) 0;
229
+ line-height: var(--incremark-typography-line-height-normal);
230
+ /* 任务列表项:移除标记 */
231
+ }
232
+ .incremark-list-item.task-item {
233
+ list-style: none;
234
+ /* 任务标签容器 */
235
+ }
236
+ .incremark-list-item.task-item .task-label {
237
+ display: flex;
238
+ align-items: flex-start;
239
+ gap: var(--incremark-spacing-sm);
240
+ cursor: default;
241
+ /* 复选框 */
242
+ /* 任务内容 */
243
+ }
244
+ .incremark-list-item.task-item .task-label .checkbox {
245
+ margin-top: 0.3em;
246
+ flex-shrink: 0;
247
+ width: 16px;
248
+ height: 16px;
249
+ cursor: pointer;
250
+ accent-color: var(--incremark-color-interactive-checked);
251
+ }
252
+ .incremark-list-item.task-item .task-label .checkbox:checked {
253
+ accent-color: var(--incremark-color-interactive-checked);
254
+ }
255
+ .incremark-list-item.task-item .task-label .task-content {
256
+ flex: 1;
257
+ }
258
+ /**
259
+ * Table 组件样式
260
+ */
261
+ .incremark-table-wrapper {
262
+ overflow-x: auto;
263
+ margin: var(--incremark-spacing-lg) 0;
264
+ }
265
+ .incremark-table {
266
+ width: 100%;
267
+ border-collapse: collapse;
268
+ font-size: var(--incremark-typography-font-size-base);
269
+ /* 固定表格布局,避免打字机效果时列宽抖动 */
270
+ table-layout: fixed;
271
+ }
272
+ .incremark-table th,
273
+ .incremark-table td {
274
+ border: 1px solid var(--incremark-color-border-default);
275
+ padding: var(--incremark-spacing-md) var(--incremark-spacing-lg);
276
+ }
277
+ .incremark-table th {
278
+ background: var(--incremark-color-background-elevated);
279
+ font-weight: var(--incremark-typography-font-weight-semibold);
280
+ }
281
+ .incremark-table tr:nth-child(even) {
282
+ background: var(--incremark-color-background-elevated);
283
+ }
284
+ /* ============ 表格对齐方式 ============ */
285
+ .incremark-table-align-left {
286
+ text-align: left;
287
+ }
288
+ .incremark-table-align-center {
289
+ text-align: center;
290
+ }
291
+ .incremark-table-align-right {
292
+ text-align: right;
293
+ }
294
+ /**
295
+ * Blockquote 组件样式
296
+ */
297
+ .incremark-blockquote {
298
+ position: relative;
299
+ margin: var(--incremark-spacing-lg) 0;
300
+ padding: var(--incremark-spacing-md) var(--incremark-spacing-lg);
301
+ background: var(--incremark-color-background-elevated);
302
+ border-radius: 0 var(--incremark-border-radius-md) var(--incremark-border-radius-md) 0;
303
+ color: var(--incremark-color-text-secondary);
304
+ }
305
+ .incremark-blockquote::before {
306
+ content: '';
307
+ position: absolute;
308
+ width: 4px;
309
+ border-radius: 2px;
310
+ background: var(--incremark-color-brand-primary);
311
+ left: 0;
312
+ top: 0;
313
+ bottom: 0;
314
+ }
315
+ .incremark-blockquote p {
316
+ margin: var(--incremark-spacing-md) 0;
317
+ }
318
+ .incremark-blockquote p:first-child {
319
+ margin-top: 0;
320
+ }
321
+ .incremark-blockquote p:last-child {
322
+ margin-bottom: 0;
323
+ }
324
+ /**
325
+ * Container 组件样式
326
+ * 用于渲染自定义容器节点(如 :::warning, :::info, :::tip 等)
327
+ */
328
+ .incremark-container {
329
+ margin: var(--incremark-spacing-lg) 0;
330
+ padding: var(--incremark-spacing-md);
331
+ border-radius: var(--incremark-border-radius-md);
332
+ border-left: 4px solid var(--incremark-color-border-default);
333
+ background-color: var(--incremark-color-background-elevated);
334
+ }
335
+ .incremark-container-content .incremark-paragraph {
336
+ margin: 0;
337
+ }
338
+ .incremark-container-content .incremark-paragraph + .incremark-paragraph {
339
+ margin-top: var(--incremark-spacing-sm);
340
+ }
341
+ /**
342
+ * Thematic Break 组件样式
343
+ */
344
+ .incremark-hr {
345
+ margin: 2em 0;
346
+ border: none;
347
+ border-top: 2px solid var(--incremark-color-border-subtle);
348
+ }
349
+ /**
350
+ * Code Block 组件样式
351
+ */
352
+ /* ============ 代码块容器 ============ */
353
+ .incremark-code {
354
+ margin: var(--incremark-spacing-lg) 0;
355
+ border-radius: var(--incremark-border-radius-lg);
356
+ overflow: hidden;
357
+ background: var(--incremark-color-code-block-background);
358
+ color: var(--incremark-color-code-block-text);
359
+ }
360
+ /* ============ 代码块头部 ============ */
361
+ .code-header {
362
+ display: flex;
363
+ justify-content: space-between;
364
+ align-items: center;
365
+ padding: var(--incremark-spacing-sm) var(--incremark-spacing-lg);
366
+ background: var(--incremark-color-code-header-background);
367
+ border-bottom: 1px solid var(--incremark-color-border-strong);
368
+ font-size: var(--incremark-typography-font-size-sm);
369
+ min-height: 40px;
370
+ }
371
+ .code-header .language {
372
+ display: flex;
373
+ align-items: center;
374
+ gap: var(--incremark-spacing-sm);
375
+ color: var(--incremark-color-text-tertiary);
376
+ text-transform: uppercase;
377
+ font-weight: var(--incremark-typography-font-weight-medium);
378
+ letter-spacing: 0.5px;
379
+ }
380
+ /* ============ 代码按钮样式(使用图标按钮)============ */
381
+ .incremark-code .code-btn {
382
+ display: inline-flex;
383
+ align-items: center;
384
+ justify-content: center;
385
+ width: 24px;
386
+ height: 24px;
387
+ padding: 0;
388
+ border: none;
389
+ border-radius: var(--incremark-border-radius-sm);
390
+ background: transparent;
391
+ color: var(--incremark-color-code-block-text);
392
+ font-size: 16px;
393
+ cursor: pointer;
394
+ transition: all var(--incremark-animation-duration-normal) var(--incremark-animation-easing-ease-out);
395
+ user-select: none;
396
+ opacity: 0.6;
397
+ }
398
+ .incremark-code .code-btn:hover:not(:disabled) {
399
+ background-color: var(--incremark-color-neutral-8);
400
+ opacity: 1;
401
+ }
402
+ .incremark-code .code-btn:active:not(:disabled) {
403
+ transform: scale(0.95);
404
+ }
405
+ .incremark-code .code-btn:disabled {
406
+ opacity: 0.3;
407
+ cursor: not-allowed;
408
+ }
409
+ /* ============ 代码内容区域 ============ */
410
+ .code-content {
411
+ overflow-x: auto;
412
+ }
413
+ .code-loading {
414
+ opacity: 0.7;
415
+ }
416
+ /* ============ Shiki 高亮样式 ============ */
417
+ .shiki-wrapper pre,
418
+ .shiki-wrapper .shiki {
419
+ margin: 0;
420
+ padding: var(--incremark-spacing-lg);
421
+ background: transparent;
422
+ overflow-x: auto;
423
+ }
424
+ .shiki-wrapper code,
425
+ .shiki-wrapper .shiki code {
426
+ font-family: var(--incremark-typography-font-family-mono);
427
+ font-size: var(--incremark-typography-font-size-base);
428
+ line-height: var(--incremark-typography-line-height-normal);
429
+ }
430
+ /* ============ 回退样式(无高亮时) ============ */
431
+ .code-fallback,
432
+ .code-loading pre {
433
+ margin: 0;
434
+ padding: var(--incremark-spacing-lg);
435
+ overflow-x: auto;
436
+ background: transparent;
437
+ }
438
+ .code-fallback code,
439
+ .code-loading code {
440
+ font-family: var(--incremark-typography-font-family-mono);
441
+ font-size: var(--incremark-typography-font-size-base);
442
+ line-height: var(--incremark-typography-line-height-normal);
443
+ color: var(--incremark-color-code-block-text);
444
+ }
445
+ /* ============ Stream 高亮样式 ============ */
446
+ .incremark-code-stream {
447
+ background: transparent;
448
+ padding: 0;
449
+ margin: 0;
450
+ }
451
+ .incremark-code-stream {
452
+ font-family: 'Fira Code', 'JetBrains Mono', Consolas, Monaco, 'Courier New', monospace;
453
+ font-size: 0.875em;
454
+ line-height: 1.7;
455
+ }
456
+ /**
457
+ * Mermaid 图表组件样式
458
+ */
459
+ /* ============ Mermaid 容器 ============ */
460
+ .incremark-mermaid {
461
+ margin: var(--incremark-spacing-lg) 0;
462
+ border-radius: var(--incremark-border-radius-lg);
463
+ overflow: hidden;
464
+ background: var(--incremark-color-code-block-background);
465
+ }
466
+ /* ============ Mermaid 头部 ============ */
467
+ .mermaid-header {
468
+ display: flex;
469
+ justify-content: space-between;
470
+ align-items: center;
471
+ padding: var(--incremark-spacing-sm) var(--incremark-spacing-lg);
472
+ background: var(--incremark-color-code-header-background);
473
+ border-bottom: 1px solid var(--incremark-color-border-strong);
474
+ font-size: var(--incremark-typography-font-size-sm);
475
+ min-height: 40px;
476
+ }
477
+ .mermaid-header .language {
478
+ display: flex;
479
+ align-items: center;
480
+ gap: var(--incremark-spacing-sm);
481
+ color: var(--incremark-color-text-tertiary);
482
+ text-transform: uppercase;
483
+ font-weight: var(--incremark-typography-font-weight-medium);
484
+ letter-spacing: 0.5px;
485
+ }
486
+ .mermaid-header .language .incremark-icon {
487
+ color: var(--incremark-color-text-tertiary);
488
+ }
489
+ /* ============ Mermaid 操作按钮组 ============ */
490
+ .mermaid-actions {
491
+ display: flex;
492
+ align-items: center;
493
+ gap: var(--incremark-spacing-xs);
494
+ }
495
+ /* ============ Mermaid 操作按钮(引用公共样式)============ */
496
+ .incremark-mermaid .code-btn {
497
+ display: inline-flex;
498
+ align-items: center;
499
+ justify-content: center;
500
+ width: 24px;
501
+ height: 24px;
502
+ padding: 0;
503
+ border: none;
504
+ border-radius: var(--incremark-border-radius-sm);
505
+ background: transparent;
506
+ color: var(--incremark-color-code-block-text);
507
+ font-size: 16px;
508
+ cursor: pointer;
509
+ transition: all var(--incremark-animation-duration-normal) var(--incremark-animation-easing-ease-out);
510
+ user-select: none;
511
+ opacity: 0.6;
512
+ }
513
+ .incremark-mermaid .code-btn:hover:not(:disabled) {
514
+ background-color: var(--incremark-color-neutral-8);
515
+ opacity: 1;
516
+ }
517
+ .incremark-mermaid .code-btn:active:not(:disabled) {
518
+ transform: scale(0.95);
519
+ }
520
+ .incremark-mermaid .code-btn:disabled {
521
+ opacity: 0.3;
522
+ cursor: not-allowed;
523
+ }
524
+ /* ============ Mermaid 内容区域 ============ */
525
+ .mermaid-content {
526
+ padding: var(--incremark-spacing-lg);
527
+ min-height: 100px;
528
+ }
529
+ .mermaid-loading {
530
+ color: var(--incremark-color-text-tertiary);
531
+ font-size: var(--incremark-typography-font-size-base);
532
+ }
533
+ .mermaid-source-code {
534
+ margin: 0;
535
+ padding: var(--incremark-spacing-md);
536
+ background: var(--incremark-color-code-block-background);
537
+ border-radius: var(--incremark-border-radius-sm);
538
+ color: var(--incremark-color-code-block-text);
539
+ font-family: var(--incremark-typography-font-family-mono);
540
+ font-size: var(--incremark-typography-font-size-sm);
541
+ line-height: var(--incremark-typography-line-height-normal);
542
+ white-space: pre-wrap;
543
+ overflow-x: auto;
544
+ }
545
+ /* ============ Mermaid SVG 渲染 ============ */
546
+ .mermaid-svg {
547
+ overflow-x: auto;
548
+ }
549
+ .mermaid-svg svg {
550
+ max-width: 100%;
551
+ height: auto;
552
+ }
553
+ /**
554
+ * Math 组件样式
555
+ */
556
+ .incremark-math-inline {
557
+ display: inline;
558
+ }
559
+ .katex {
560
+ position: relative;
561
+ }
562
+ .incremark-math-block {
563
+ margin: var(--incremark-spacing-lg) 0;
564
+ padding: var(--incremark-spacing-lg);
565
+ overflow-x: auto;
566
+ text-align: center;
567
+ }
568
+ .math-source {
569
+ background: var(--incremark-color-background-elevated);
570
+ padding: var(--incremark-spacing-xs) var(--incremark-spacing-sm);
571
+ border-radius: var(--incremark-border-radius-sm);
572
+ font-size: var(--incremark-typography-font-size-sm);
573
+ color: var(--incremark-color-text-tertiary);
574
+ }
575
+ .math-source-block {
576
+ margin: 0;
577
+ padding: var(--incremark-spacing-lg);
578
+ background: var(--incremark-color-background-elevated);
579
+ border-radius: var(--incremark-border-radius-sm);
580
+ text-align: left;
581
+ }
582
+ .math-source-block code {
583
+ font-family: var(--incremark-typography-font-family-mono);
584
+ font-size: var(--incremark-typography-font-size-sm);
585
+ color: var(--incremark-color-text-primary);
586
+ }
587
+ .math-rendered .katex {
588
+ font-size: var(--incremark-typography-font-size-md);
589
+ }
590
+ .math-rendered .katex-display {
591
+ margin: 0;
592
+ overflow-x: auto;
593
+ overflow-y: hidden;
594
+ }
595
+ /**
596
+ * Footnotes 组件样式
597
+ *
598
+ * 脚注在文档底部显示,包含标题、分隔线和列表
599
+ */
600
+ .incremark-footnotes {
601
+ padding-top: var(--incremark-spacing-md);
602
+ font-size: var(--incremark-typography-font-size-base);
603
+ }
604
+ .incremark-footnotes .incremark-list {
605
+ margin-bottom: var(--incremark-spacing-sm) 0;
606
+ }
607
+ .incremark-footnotes-divider {
608
+ margin-bottom: var(--incremark-spacing-md);
609
+ border: none;
610
+ border-top: 1px solid var(--incremark-color-border-subtle);
611
+ }
612
+ .incremark-footnotes-title {
613
+ font-size: var(--incremark-typography-font-size-md);
614
+ font-weight: var(--incremark-typography-font-weight-semibold);
615
+ color: var(--incremark-color-text-primary);
616
+ }
617
+ .incremark-footnotes-list {
618
+ list-style: none;
619
+ padding-left: 0;
620
+ counter-reset: footnote-counter;
621
+ }
622
+ .incremark-footnote-item {
623
+ display: flex;
624
+ align-items: flex-start;
625
+ gap: var(--incremark-spacing-sm);
626
+ padding: var(--incremark-spacing-xs);
627
+ border-radius: var(--incremark-border-radius-sm);
628
+ transition: background-color var(--incremark-animation-duration-fast) var(--incremark-animation-easing-ease-in-out);
629
+ line-height: var(--incremark-typography-line-height-normal);
630
+ }
631
+ .incremark-footnote-item:target {
632
+ background-color: var(--incremark-color-neutral-2);
633
+ }
634
+ .incremark-footnote-content {
635
+ flex: 1;
636
+ display: flex;
637
+ gap: var(--incremark-spacing-sm);
638
+ }
639
+ .incremark-footnote-number {
640
+ flex-shrink: 0;
641
+ font-weight: var(--incremark-typography-font-weight-semibold);
642
+ color: var(--incremark-color-text-secondary);
643
+ line-height: var(--incremark-typography-line-height-normal);
644
+ }
645
+ .incremark-footnote-body {
646
+ flex: 1;
647
+ }
648
+ .incremark-footnote-body > :first-child {
649
+ margin-top: 0;
650
+ }
651
+ .incremark-footnote-body > :last-child {
652
+ margin-bottom: 0;
653
+ }
654
+ .incremark-footnote-body p {
655
+ margin: var(--incremark-spacing-xs) 0;
656
+ }
657
+ .incremark-footnote-backref {
658
+ flex-shrink: 0;
659
+ color: var(--incremark-color-interactive-link);
660
+ text-decoration: none;
661
+ padding: 0 var(--incremark-spacing-xs);
662
+ border-radius: var(--incremark-border-radius-sm);
663
+ transition: background-color var(--incremark-animation-duration-fast) var(--incremark-animation-easing-ease-in-out);
664
+ line-height: var(--incremark-typography-line-height-normal);
665
+ }
666
+ .incremark-footnote-backref:hover {
667
+ background-color: var(--incremark-color-neutral-2);
668
+ }
669
+ /**
670
+ * HTML Element 组件样式
671
+ *
672
+ * 用于渲染 HTML 元素节点和未知子节点类型
673
+ */
674
+ /**
675
+ * 未知子节点类型样式
676
+ *
677
+ * 当遇到无法识别的节点类型时,使用此样式显示调试信息
678
+ */
679
+ .incremark-unknown-child {
680
+ color: var(--incremark-color-text-tertiary);
681
+ font-style: italic;
682
+ }
683
+ /**
684
+ * AutoScrollContainer 组件样式
685
+ */
686
+ .auto-scroll-container {
687
+ overflow-y: auto;
688
+ height: 100%;
689
+ }
690
+ /**
691
+ * Default 组件样式(用于未知节点类型的调试显示)
692
+ */
693
+ .incremark-default {
694
+ margin: var(--incremark-spacing-md) 0;
695
+ padding: var(--incremark-spacing-md);
696
+ background: var(--incremark-color-background-elevated);
697
+ border: 1px solid var(--incremark-color-border-strong);
698
+ border-radius: var(--incremark-border-radius-md);
699
+ font-size: 12px;
700
+ }
701
+ .incremark-default .type-badge {
702
+ display: inline-block;
703
+ padding: 2px var(--incremark-spacing-sm);
704
+ background: var(--incremark-color-border-strong);
705
+ border-radius: var(--incremark-border-radius-md);
706
+ font-weight: var(--incremark-typography-font-weight-semibold);
707
+ margin-bottom: var(--incremark-spacing-sm);
708
+ }
709
+ .incremark-default pre {
710
+ margin: 0;
711
+ white-space: pre-wrap;
712
+ word-break: break-all;
713
+ font-size: 11px;
714
+ }
715
+ /**
716
+ * HTML 节点样式(显示原始 HTML 源代码)
717
+ */
718
+ .incremark-html-code {
719
+ margin: var(--incremark-spacing-md) 0;
720
+ padding: var(--incremark-spacing-md) var(--incremark-spacing-lg);
721
+ background: var(--incremark-color-code-block-background);
722
+ border-radius: var(--incremark-border-radius-md);
723
+ overflow-x: auto;
724
+ }
725
+ .incremark-html-code code {
726
+ font-family: var(--incremark-typography-font-family-mono);
727
+ font-size: 14px;
728
+ line-height: var(--incremark-typography-line-height-normal);
729
+ color: var(--incremark-color-code-block-text);
730
+ white-space: pre-wrap;
731
+ word-break: break-all;
732
+ }
733
+ /* 导入基础组件样式 */
734
+ /**
735
+ * ImButton 按钮组件样式
736
+ *
737
+ * 设计系统:
738
+ * - 6 种变体: solid, outline, soft, subtle, ghost, link
739
+ * - 5 种颜色: primary, neutral, success, warning, error
740
+ * - 5 种尺寸: xs, sm, md, lg, xl
741
+ */
742
+ /**
743
+ * Less 变量定义
744
+ *
745
+ * 这些变量引用 CSS Variables,在运行时可以通过 ThemeProvider 动态修改
746
+ *
747
+ * 注意:CSS Variables 定义在 css-variables.less 中(由脚本自动生成)
748
+ */
749
+ /* ============ 颜色系统 ============ */
750
+ /* ============ 字体系统 ============ */
751
+ /* ============ 间距系统 ============ */
752
+ /* ============ 边框系统 ============ */
753
+ /* ============ 阴影系统 ============ */
754
+ /* ============ 动画系统 ============ */
755
+ /* ============ Chat UI 组件专用变量(im- 前缀) ============ */
756
+ .im-button {
757
+ display: inline-flex;
758
+ align-items: center;
759
+ justify-content: center;
760
+ gap: 6px;
761
+ border: 1px solid transparent;
762
+ border-radius: var(--incremark-border-radius-md);
763
+ font-weight: var(--incremark-typography-font-weight-medium);
764
+ line-height: 1;
765
+ white-space: nowrap;
766
+ cursor: pointer;
767
+ transition: all 150ms ease;
768
+ outline: none;
769
+ user-select: none;
770
+ }
771
+ .im-button:focus-visible {
772
+ outline: 2px solid var(--incremark-color-brand-primary);
773
+ outline-offset: 2px;
774
+ }
775
+ .im-button--xs {
776
+ height: 24px;
777
+ padding: 0 8px;
778
+ font-size: 12px;
779
+ border-radius: var(--incremark-border-radius-sm);
780
+ }
781
+ .im-button--xs .im-svg-icon {
782
+ font-size: 14px;
783
+ }
784
+ .im-button--sm {
785
+ height: 28px;
786
+ padding: 0 10px;
787
+ font-size: 12px;
788
+ }
789
+ .im-button--sm .im-svg-icon {
790
+ font-size: 14px;
791
+ }
792
+ .im-button--md {
793
+ height: 32px;
794
+ padding: 0 12px;
795
+ font-size: 13px;
796
+ }
797
+ .im-button--md .im-svg-icon {
798
+ font-size: 16px;
799
+ }
800
+ .im-button--lg {
801
+ height: 36px;
802
+ padding: 0 14px;
803
+ font-size: 14px;
804
+ }
805
+ .im-button--lg .im-svg-icon {
806
+ font-size: 18px;
807
+ }
808
+ .im-button--xl {
809
+ height: 40px;
810
+ padding: 0 16px;
811
+ font-size: 14px;
812
+ }
813
+ .im-button--xl .im-svg-icon {
814
+ font-size: 20px;
815
+ }
816
+ .im-button--solid {
817
+ color: var(--incremark-color-text-inverse);
818
+ }
819
+ .im-button--solid.im-button--primary {
820
+ background: var(--incremark-color-brand-6);
821
+ }
822
+ .im-button--solid.im-button--primary:hover {
823
+ background: var(--incremark-color-brand-5);
824
+ }
825
+ .im-button--solid.im-button--primary:active {
826
+ background: var(--incremark-color-brand-7);
827
+ }
828
+ .im-button--solid.im-button--neutral {
829
+ background: var(--incremark-color-neutral-8);
830
+ }
831
+ .im-button--solid.im-button--neutral:hover {
832
+ background: var(--incremark-color-neutral-7);
833
+ }
834
+ .im-button--solid.im-button--neutral:active {
835
+ background: var(--incremark-color-neutral-9);
836
+ }
837
+ .im-button--solid.im-button--success {
838
+ background: var(--incremark-base-colors-green-6);
839
+ }
840
+ .im-button--solid.im-button--success:hover {
841
+ background: var(--incremark-base-colors-green-5);
842
+ }
843
+ .im-button--solid.im-button--success:active {
844
+ background: var(--incremark-base-colors-green-7);
845
+ }
846
+ .im-button--solid.im-button--warning {
847
+ background: var(--incremark-base-colors-orange-6);
848
+ }
849
+ .im-button--solid.im-button--warning:hover {
850
+ background: var(--incremark-base-colors-orange-5);
851
+ }
852
+ .im-button--solid.im-button--warning:active {
853
+ background: var(--incremark-base-colors-orange-7);
854
+ }
855
+ .im-button--solid.im-button--error {
856
+ background: var(--incremark-base-colors-red-6);
857
+ }
858
+ .im-button--solid.im-button--error:hover {
859
+ background: var(--incremark-base-colors-red-5);
860
+ }
861
+ .im-button--solid.im-button--error:active {
862
+ background: var(--incremark-base-colors-red-7);
863
+ }
864
+ .im-button--outline {
865
+ background: transparent;
866
+ }
867
+ .im-button--outline.im-button--primary {
868
+ color: var(--incremark-color-brand-6);
869
+ border-color: var(--incremark-color-brand-6);
870
+ }
871
+ .im-button--outline.im-button--primary:hover {
872
+ background: var(--incremark-color-brand-2);
873
+ }
874
+ .im-button--outline.im-button--primary:active {
875
+ background: var(--incremark-color-brand-3);
876
+ }
877
+ .im-button--outline.im-button--neutral {
878
+ color: var(--incremark-color-text-primary);
879
+ border-color: var(--incremark-color-border-default);
880
+ }
881
+ .im-button--outline.im-button--neutral:hover {
882
+ background: var(--incremark-color-neutral-3);
883
+ border-color: var(--incremark-color-border-strong);
884
+ }
885
+ .im-button--outline.im-button--neutral:active {
886
+ background: var(--incremark-color-neutral-4);
887
+ }
888
+ .im-button--outline.im-button--success {
889
+ color: var(--incremark-base-colors-green-6);
890
+ border-color: var(--incremark-base-colors-green-6);
891
+ }
892
+ .im-button--outline.im-button--success:hover {
893
+ background: var(--incremark-base-colors-green-2);
894
+ }
895
+ .im-button--outline.im-button--success:active {
896
+ background: var(--incremark-base-colors-green-3);
897
+ }
898
+ .im-button--outline.im-button--warning {
899
+ color: var(--incremark-base-colors-orange-6);
900
+ border-color: var(--incremark-base-colors-orange-6);
901
+ }
902
+ .im-button--outline.im-button--warning:hover {
903
+ background: var(--incremark-base-colors-orange-2);
904
+ }
905
+ .im-button--outline.im-button--warning:active {
906
+ background: var(--incremark-base-colors-orange-3);
907
+ }
908
+ .im-button--outline.im-button--error {
909
+ color: var(--incremark-base-colors-red-6);
910
+ border-color: var(--incremark-base-colors-red-6);
911
+ }
912
+ .im-button--outline.im-button--error:hover {
913
+ background: var(--incremark-base-colors-red-2);
914
+ }
915
+ .im-button--outline.im-button--error:active {
916
+ background: var(--incremark-base-colors-red-3);
917
+ }
918
+ .im-button--soft {
919
+ border-color: transparent;
920
+ }
921
+ .im-button--soft.im-button--primary {
922
+ color: var(--incremark-color-brand-6);
923
+ background: var(--incremark-color-brand-2);
924
+ }
925
+ .im-button--soft.im-button--primary:hover {
926
+ background: var(--incremark-color-brand-3);
927
+ }
928
+ .im-button--soft.im-button--primary:active {
929
+ background: var(--incremark-color-brand-4);
930
+ }
931
+ .im-button--soft.im-button--neutral {
932
+ color: var(--incremark-color-text-primary);
933
+ background: var(--incremark-color-neutral-3);
934
+ }
935
+ .im-button--soft.im-button--neutral:hover {
936
+ background: var(--incremark-color-neutral-4);
937
+ }
938
+ .im-button--soft.im-button--neutral:active {
939
+ background: var(--incremark-color-neutral-5);
940
+ }
941
+ .im-button--soft.im-button--success {
942
+ color: var(--incremark-base-colors-green-6);
943
+ background: var(--incremark-base-colors-green-2);
944
+ }
945
+ .im-button--soft.im-button--success:hover {
946
+ background: var(--incremark-base-colors-green-3);
947
+ }
948
+ .im-button--soft.im-button--success:active {
949
+ background: var(--incremark-base-colors-green-4);
950
+ }
951
+ .im-button--soft.im-button--warning {
952
+ color: var(--incremark-base-colors-orange-6);
953
+ background: var(--incremark-base-colors-orange-2);
954
+ }
955
+ .im-button--soft.im-button--warning:hover {
956
+ background: var(--incremark-base-colors-orange-3);
957
+ }
958
+ .im-button--soft.im-button--warning:active {
959
+ background: var(--incremark-base-colors-orange-4);
960
+ }
961
+ .im-button--soft.im-button--error {
962
+ color: var(--incremark-base-colors-red-6);
963
+ background: var(--incremark-base-colors-red-2);
964
+ }
965
+ .im-button--soft.im-button--error:hover {
966
+ background: var(--incremark-base-colors-red-3);
967
+ }
968
+ .im-button--soft.im-button--error:active {
969
+ background: var(--incremark-base-colors-red-4);
970
+ }
971
+ .im-button--subtle.im-button--primary {
972
+ color: var(--incremark-color-brand-6);
973
+ background: var(--incremark-color-brand-2);
974
+ border-color: var(--incremark-color-brand-6);
975
+ }
976
+ .im-button--subtle.im-button--primary:hover {
977
+ background: var(--incremark-color-brand-3);
978
+ }
979
+ .im-button--subtle.im-button--primary:active {
980
+ background: var(--incremark-color-brand-4);
981
+ }
982
+ .im-button--subtle.im-button--neutral {
983
+ color: var(--incremark-color-text-primary);
984
+ background: var(--incremark-color-neutral-3);
985
+ border-color: var(--incremark-color-border-default);
986
+ }
987
+ .im-button--subtle.im-button--neutral:hover {
988
+ background: var(--incremark-color-neutral-4);
989
+ }
990
+ .im-button--subtle.im-button--neutral:active {
991
+ background: var(--incremark-color-neutral-5);
992
+ }
993
+ .im-button--subtle.im-button--success {
994
+ color: var(--incremark-base-colors-green-6);
995
+ background: var(--incremark-base-colors-green-2);
996
+ border-color: var(--incremark-base-colors-green-6);
997
+ }
998
+ .im-button--subtle.im-button--success:hover {
999
+ background: var(--incremark-base-colors-green-3);
1000
+ }
1001
+ .im-button--subtle.im-button--success:active {
1002
+ background: var(--incremark-base-colors-green-4);
1003
+ }
1004
+ .im-button--subtle.im-button--warning {
1005
+ color: var(--incremark-base-colors-orange-6);
1006
+ background: var(--incremark-base-colors-orange-2);
1007
+ border-color: var(--incremark-base-colors-orange-6);
1008
+ }
1009
+ .im-button--subtle.im-button--warning:hover {
1010
+ background: var(--incremark-base-colors-orange-3);
1011
+ }
1012
+ .im-button--subtle.im-button--warning:active {
1013
+ background: var(--incremark-base-colors-orange-4);
1014
+ }
1015
+ .im-button--subtle.im-button--error {
1016
+ color: var(--incremark-base-colors-red-6);
1017
+ background: var(--incremark-base-colors-red-2);
1018
+ border-color: var(--incremark-base-colors-red-6);
1019
+ }
1020
+ .im-button--subtle.im-button--error:hover {
1021
+ background: var(--incremark-base-colors-red-3);
1022
+ }
1023
+ .im-button--subtle.im-button--error:active {
1024
+ background: var(--incremark-base-colors-red-4);
1025
+ }
1026
+ .im-button--ghost {
1027
+ background: transparent;
1028
+ border-color: transparent;
1029
+ }
1030
+ .im-button--ghost.im-button--primary {
1031
+ color: var(--incremark-color-brand-6);
1032
+ }
1033
+ .im-button--ghost.im-button--primary:hover {
1034
+ background: var(--incremark-color-brand-2);
1035
+ }
1036
+ .im-button--ghost.im-button--primary:active {
1037
+ background: var(--incremark-color-brand-3);
1038
+ }
1039
+ .im-button--ghost.im-button--neutral {
1040
+ color: var(--incremark-color-text-primary);
1041
+ }
1042
+ .im-button--ghost.im-button--neutral:hover {
1043
+ background: var(--incremark-color-neutral-4);
1044
+ }
1045
+ .im-button--ghost.im-button--neutral:active {
1046
+ background: var(--incremark-color-neutral-5);
1047
+ }
1048
+ .im-button--ghost.im-button--success {
1049
+ color: var(--incremark-base-colors-green-6);
1050
+ }
1051
+ .im-button--ghost.im-button--success:hover {
1052
+ background: var(--incremark-base-colors-green-2);
1053
+ }
1054
+ .im-button--ghost.im-button--success:active {
1055
+ background: var(--incremark-base-colors-green-3);
1056
+ }
1057
+ .im-button--ghost.im-button--warning {
1058
+ color: var(--incremark-base-colors-orange-6);
1059
+ }
1060
+ .im-button--ghost.im-button--warning:hover {
1061
+ background: var(--incremark-base-colors-orange-2);
1062
+ }
1063
+ .im-button--ghost.im-button--warning:active {
1064
+ background: var(--incremark-base-colors-orange-3);
1065
+ }
1066
+ .im-button--ghost.im-button--error {
1067
+ color: var(--incremark-base-colors-red-6);
1068
+ }
1069
+ .im-button--ghost.im-button--error:hover {
1070
+ background: var(--incremark-base-colors-red-2);
1071
+ }
1072
+ .im-button--ghost.im-button--error:active {
1073
+ background: var(--incremark-base-colors-red-3);
1074
+ }
1075
+ .im-button--link {
1076
+ background: transparent;
1077
+ border-color: transparent;
1078
+ height: auto;
1079
+ padding: 0;
1080
+ }
1081
+ .im-button--link.im-button--primary {
1082
+ color: var(--incremark-color-brand-6);
1083
+ }
1084
+ .im-button--link.im-button--primary:hover {
1085
+ color: var(--incremark-color-brand-5);
1086
+ text-decoration: underline;
1087
+ }
1088
+ .im-button--link.im-button--neutral {
1089
+ color: var(--incremark-color-text-secondary);
1090
+ }
1091
+ .im-button--link.im-button--neutral:hover {
1092
+ color: var(--incremark-color-text-primary);
1093
+ text-decoration: underline;
1094
+ }
1095
+ .im-button--link.im-button--success {
1096
+ color: var(--incremark-base-colors-green-6);
1097
+ }
1098
+ .im-button--link.im-button--success:hover {
1099
+ color: var(--incremark-base-colors-green-5);
1100
+ text-decoration: underline;
1101
+ }
1102
+ .im-button--link.im-button--warning {
1103
+ color: var(--incremark-base-colors-orange-6);
1104
+ }
1105
+ .im-button--link.im-button--warning:hover {
1106
+ color: var(--incremark-base-colors-orange-5);
1107
+ text-decoration: underline;
1108
+ }
1109
+ .im-button--link.im-button--error {
1110
+ color: var(--incremark-base-colors-red-6);
1111
+ }
1112
+ .im-button--link.im-button--error:hover {
1113
+ color: var(--incremark-base-colors-red-5);
1114
+ text-decoration: underline;
1115
+ }
1116
+ .im-button--block {
1117
+ display: flex;
1118
+ width: 100%;
1119
+ }
1120
+ .im-button--square {
1121
+ padding: 0;
1122
+ }
1123
+ .im-button--square.im-button--xs {
1124
+ width: 24px;
1125
+ }
1126
+ .im-button--square.im-button--sm {
1127
+ width: 28px;
1128
+ }
1129
+ .im-button--square.im-button--md {
1130
+ width: 32px;
1131
+ }
1132
+ .im-button--square.im-button--lg {
1133
+ width: 36px;
1134
+ }
1135
+ .im-button--square.im-button--xl {
1136
+ width: 40px;
1137
+ }
1138
+ .im-button--circle {
1139
+ padding: 0;
1140
+ border-radius: 50%;
1141
+ }
1142
+ .im-button--circle.im-button--xs {
1143
+ width: 24px;
1144
+ }
1145
+ .im-button--circle.im-button--sm {
1146
+ width: 28px;
1147
+ }
1148
+ .im-button--circle.im-button--md {
1149
+ width: 32px;
1150
+ }
1151
+ .im-button--circle.im-button--lg {
1152
+ width: 36px;
1153
+ }
1154
+ .im-button--circle.im-button--xl {
1155
+ width: 40px;
1156
+ }
1157
+ .im-button--disabled {
1158
+ opacity: 0.5;
1159
+ cursor: not-allowed;
1160
+ pointer-events: none;
1161
+ }
1162
+ .im-button--loading {
1163
+ cursor: wait;
1164
+ pointer-events: none;
1165
+ }
1166
+ .im-button--active.im-button--ghost.im-button--neutral {
1167
+ background: var(--incremark-color-neutral-5);
1168
+ }
1169
+ .im-button--active.im-button--ghost.im-button--neutral:hover {
1170
+ background: var(--incremark-color-neutral-5);
1171
+ }
1172
+ .im-button--active.im-button--ghost.im-button--primary {
1173
+ background: var(--incremark-color-brand-3);
1174
+ }
1175
+ .im-button--active.im-button--ghost.im-button--primary:hover {
1176
+ background: var(--incremark-color-brand-3);
1177
+ }
1178
+ .im-button--active.im-button--soft.im-button--neutral {
1179
+ background: var(--incremark-color-neutral-5);
1180
+ }
1181
+ .im-button--active.im-button--soft.im-button--neutral:hover {
1182
+ background: var(--incremark-color-neutral-5);
1183
+ }
1184
+ .im-button__spinner {
1185
+ display: inline-block;
1186
+ width: 1em;
1187
+ height: 1em;
1188
+ border: 2px solid currentColor;
1189
+ border-top-color: transparent;
1190
+ border-radius: 50%;
1191
+ animation: im-button-spin 0.6s linear infinite;
1192
+ }
1193
+ @keyframes im-button-spin {
1194
+ from {
1195
+ transform: rotate(0deg);
1196
+ }
1197
+ to {
1198
+ transform: rotate(360deg);
1199
+ }
1200
+ }
1201
+ /**
1202
+ * ActionButton 组件样式
1203
+ *
1204
+ * 注意:ActionButton 的 active 状态样式已移至 button.less 中的 .im-button--active
1205
+ * 此文件保留用于未来可能的 ActionButton 特定样式扩展
1206
+ */
1207
+ /**
1208
+ * ImPopover 样式
1209
+ * 参考 NuxtUI 设计风格 - 简洁轻量
1210
+ */
1211
+ .im-popover-trigger {
1212
+ display: inline-flex;
1213
+ }
1214
+ .im-popover {
1215
+ position: absolute;
1216
+ z-index: 1000;
1217
+ border-radius: var(--incremark-border-radius-md);
1218
+ background: var(--incremark-color-neutral-1);
1219
+ border: 1px solid var(--incremark-color-border-subtle);
1220
+ box-shadow: var(--incremark-shadow-level2-down);
1221
+ }
1222
+ .im-popover__arrow {
1223
+ position: absolute;
1224
+ width: 8px;
1225
+ height: 8px;
1226
+ background: inherit;
1227
+ transform: rotate(45deg);
1228
+ }
1229
+ .im-popover__arrow::before {
1230
+ content: '';
1231
+ position: absolute;
1232
+ width: 100%;
1233
+ height: 100%;
1234
+ background: inherit;
1235
+ border: 1px solid var(--incremark-color-border-subtle);
1236
+ border-right: none;
1237
+ border-bottom: none;
1238
+ }
1239
+ .im-popover[data-placement^='top'] .im-popover__arrow::before {
1240
+ border: 1px solid var(--incremark-color-border-subtle);
1241
+ border-left: none;
1242
+ border-top: none;
1243
+ }
1244
+ .im-popover[data-placement^='bottom'] .im-popover__arrow::before {
1245
+ border: 1px solid var(--incremark-color-border-subtle);
1246
+ border-right: none;
1247
+ border-bottom: none;
1248
+ }
1249
+ .im-popover[data-placement^='left'] .im-popover__arrow::before {
1250
+ border: 1px solid var(--incremark-color-border-subtle);
1251
+ border-left: none;
1252
+ border-bottom: none;
1253
+ }
1254
+ .im-popover[data-placement^='right'] .im-popover__arrow::before {
1255
+ border: 1px solid var(--incremark-color-border-subtle);
1256
+ border-right: none;
1257
+ border-top: none;
1258
+ }
1259
+ .im-popover-fade-enter-active,
1260
+ .im-popover-fade-leave-active {
1261
+ transition: opacity 150ms ease;
1262
+ }
1263
+ .im-popover-fade-enter-from,
1264
+ .im-popover-fade-leave-to {
1265
+ opacity: 0;
1266
+ }
1267
+ .im-popover-content {
1268
+ padding: 8px 12px;
1269
+ font-size: var(--incremark-typography-font-size-sm);
1270
+ color: var(--incremark-color-text-primary);
1271
+ }
1272
+ .im-demo-input {
1273
+ height: 32px;
1274
+ padding: 0 12px;
1275
+ border: 1px solid var(--incremark-color-border-default);
1276
+ border-radius: var(--incremark-border-radius-md);
1277
+ font-size: var(--incremark-typography-font-size-sm);
1278
+ outline: none;
1279
+ transition: border-color 150ms ease;
1280
+ }
1281
+ .im-demo-input:focus {
1282
+ border-color: var(--incremark-color-brand-primary);
1283
+ }
1284
+ .im-demo-trigger {
1285
+ display: inline-block;
1286
+ padding: 8px 12px;
1287
+ border: 1px dashed var(--incremark-color-border-default);
1288
+ border-radius: var(--incremark-border-radius-md);
1289
+ font-size: var(--incremark-typography-font-size-sm);
1290
+ color: var(--incremark-color-text-secondary);
1291
+ }
1292
+ /**
1293
+ * ImTooltip 样式
1294
+ * 参考 NuxtUI 设计风格
1295
+ */
1296
+ .im-tooltip {
1297
+ padding: 6px 10px;
1298
+ border-radius: var(--incremark-border-radius-md);
1299
+ background: var(--incremark-color-neutral-9);
1300
+ color: var(--incremark-color-text-inverse);
1301
+ font-size: var(--incremark-typography-font-size-xs);
1302
+ line-height: 1.4;
1303
+ white-space: nowrap;
1304
+ max-width: 240px;
1305
+ pointer-events: none;
1306
+ }
1307
+ .im-popover:has(.im-tooltip) {
1308
+ padding: 0;
1309
+ background: var(--incremark-color-neutral-9);
1310
+ border-color: var(--incremark-color-neutral-9);
1311
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
1312
+ }
1313
+ .im-popover:has(.im-tooltip) .im-popover__arrow {
1314
+ background: var(--incremark-color-neutral-9);
1315
+ border-color: var(--incremark-color-neutral-9);
1316
+ }
1317
+ /**
1318
+ * ImDropdown 样式
1319
+ * 参考 NuxtUI 设计风格
1320
+ */
1321
+ .im-dropdown__menu {
1322
+ min-width: 160px;
1323
+ padding: 4px;
1324
+ }
1325
+ .im-dropdown__item {
1326
+ display: flex;
1327
+ align-items: center;
1328
+ gap: 8px;
1329
+ padding: 8px 12px;
1330
+ border-radius: var(--incremark-border-radius-sm);
1331
+ font-size: var(--incremark-typography-font-size-sm);
1332
+ color: var(--incremark-color-text-primary);
1333
+ cursor: pointer;
1334
+ transition: background-color 150ms ease;
1335
+ }
1336
+ .im-dropdown__item:hover {
1337
+ background: var(--incremark-color-neutral-2);
1338
+ }
1339
+ .im-dropdown__item--disabled {
1340
+ color: var(--incremark-color-text-tertiary);
1341
+ cursor: not-allowed;
1342
+ }
1343
+ .im-dropdown__item--disabled:hover {
1344
+ background: transparent;
1345
+ }
1346
+ .im-dropdown__icon {
1347
+ display: flex;
1348
+ align-items: center;
1349
+ justify-content: center;
1350
+ width: 16px;
1351
+ height: 16px;
1352
+ color: var(--incremark-color-text-secondary);
1353
+ }
1354
+ .im-dropdown__label {
1355
+ flex: 1;
1356
+ }
1357
+ .im-dropdown__divider {
1358
+ height: 1px;
1359
+ margin: 4px 0;
1360
+ background: var(--incremark-color-border-subtle);
1361
+ }
1362
+ /* 导入 Chat 相关组件样式 */
1363
+ /**
1364
+ * SvgIcon 组件样式
1365
+ * 使 SVG 图标根据 font-size 自适应大小
1366
+ */
1367
+ .im-svg-icon {
1368
+ display: inline-flex;
1369
+ align-items: center;
1370
+ justify-content: center;
1371
+ width: 1em;
1372
+ height: 1em;
1373
+ font-size: inherit;
1374
+ }
1375
+ .im-svg-icon > svg {
1376
+ width: 1em;
1377
+ height: 1em;
1378
+ }
1379
+ /**
1380
+ * ChainOfThought 组件样式
1381
+ */
1382
+ .im-cot {
1383
+ margin: var(--incremark-spacing-sm) 0;
1384
+ }
1385
+ .im-cot__header {
1386
+ display: flex;
1387
+ align-items: center;
1388
+ width: fit-content;
1389
+ gap: var(--incremark-spacing-xs);
1390
+ font-size: var(--incremark-typography-font-size-base);
1391
+ color: var(--incremark-color-text-secondary);
1392
+ line-height: var(--incremark-typography-line-height-normal);
1393
+ cursor: pointer;
1394
+ user-select: none;
1395
+ transition: color var(--incremark-animation-duration-fast) var(--incremark-animation-easing-ease-out);
1396
+ }
1397
+ .im-cot__header:hover {
1398
+ color: var(--incremark-color-text-primary);
1399
+ }
1400
+ .im-cot__icon {
1401
+ display: flex;
1402
+ align-items: center;
1403
+ font-size: 14px;
1404
+ }
1405
+ .im-cot__icon--pulse {
1406
+ animation: im-cot-color-pulse 2s ease-in-out infinite;
1407
+ }
1408
+ .im-cot__icon--spin {
1409
+ animation: im-cot-spin 1s linear infinite;
1410
+ }
1411
+ .im-cot__title {
1412
+ display: flex;
1413
+ align-items: center;
1414
+ gap: var(--incremark-spacing-sm);
1415
+ line-height: var(--incremark-typography-line-height-normal);
1416
+ }
1417
+ .im-cot__duration {
1418
+ color: var(--incremark-color-neutral-7);
1419
+ font-variant-numeric: tabular-nums;
1420
+ }
1421
+ .im-cot__chevron {
1422
+ font-size: 14px;
1423
+ color: var(--incremark-color-neutral-7);
1424
+ transition: transform var(--incremark-animation-duration-normal) var(--incremark-animation-easing-ease-in-out);
1425
+ }
1426
+ .im-cot__chevron--expanded {
1427
+ transform: rotate(90deg);
1428
+ }
1429
+ .im-cot__content {
1430
+ margin-top: var(--incremark-spacing-sm);
1431
+ width: 100%;
1432
+ }
1433
+ .im-cot-step {
1434
+ display: flex;
1435
+ gap: var(--incremark-spacing-sm);
1436
+ position: relative;
1437
+ }
1438
+ .im-cot-step:not(:last-child) {
1439
+ padding-bottom: var(--incremark-spacing-md);
1440
+ }
1441
+ .im-cot-step__icon {
1442
+ flex-shrink: 0;
1443
+ width: 14px;
1444
+ font-size: 14px;
1445
+ padding-top: 3px;
1446
+ display: flex;
1447
+ align-items: flex-start;
1448
+ justify-content: center;
1449
+ color: var(--incremark-color-neutral-7);
1450
+ position: relative;
1451
+ }
1452
+ .im-cot-step__icon--with-divider::after {
1453
+ content: '';
1454
+ position: absolute;
1455
+ left: 50%;
1456
+ transform: translateX(-50%);
1457
+ width: 1px;
1458
+ background: var(--incremark-color-border-default);
1459
+ top: calc(((20px - 14px) / 2) + 14px + 4px);
1460
+ bottom: calc(-1 * var(--incremark-spacing-md) + ((20px - 14px) / 2) - 2px);
1461
+ }
1462
+ .im-cot-step__content {
1463
+ flex: 1;
1464
+ min-width: 0;
1465
+ font-size: 13px;
1466
+ line-height: 20px;
1467
+ color: var(--incremark-color-text-secondary);
1468
+ }
1469
+ .im-cot-step__header {
1470
+ font-weight: 500;
1471
+ color: var(--incremark-color-text-primary);
1472
+ }
1473
+ .im-cot-step__chevron {
1474
+ flex-shrink: 0;
1475
+ font-size: 14px;
1476
+ color: var(--incremark-color-neutral-6);
1477
+ transition: transform var(--incremark-animation-duration-normal) var(--incremark-animation-easing-ease-in-out);
1478
+ }
1479
+ .im-cot-step--collapsible .im-cot-step__header {
1480
+ display: flex;
1481
+ align-items: center;
1482
+ gap: var(--incremark-spacing-xs);
1483
+ cursor: pointer;
1484
+ user-select: none;
1485
+ }
1486
+ .im-cot-step--collapsible:not(.im-cot-step--collapsed) .im-cot-step__chevron {
1487
+ transform: rotate(90deg);
1488
+ }
1489
+ .im-cot-step__body {
1490
+ color: var(--incremark-color-neutral-8);
1491
+ }
1492
+ .im-cot-step__footer {
1493
+ margin-top: var(--incremark-spacing-xs);
1494
+ color: var(--incremark-color-neutral-7);
1495
+ font-size: 12px;
1496
+ }
1497
+ .im-cot-step--pending .im-cot-step__icon {
1498
+ color: var(--incremark-color-neutral-6);
1499
+ }
1500
+ .im-cot-step--active .im-cot-step__icon {
1501
+ color: var(--incremark-color-brand-primary);
1502
+ }
1503
+ .im-cot-step--complete .im-cot-step__icon {
1504
+ color: var(--incremark-color-status-completed);
1505
+ }
1506
+ .im-cot-step--error .im-cot-step__icon {
1507
+ color: var(--incremark-base-colors-red-6);
1508
+ }
1509
+ .im-cot-step__spinner {
1510
+ animation: im-cot-spin 1s linear infinite;
1511
+ }
1512
+ @keyframes im-cot-color-pulse {
1513
+ 0%,
1514
+ 100% {
1515
+ color: var(--incremark-color-brand-primary);
1516
+ opacity: 1;
1517
+ }
1518
+ 50% {
1519
+ color: var(--incremark-color-brand-primary-light);
1520
+ opacity: 0.7;
1521
+ }
1522
+ }
1523
+ @keyframes im-cot-spin {
1524
+ from {
1525
+ transform: rotate(0deg);
1526
+ }
1527
+ to {
1528
+ transform: rotate(360deg);
1529
+ }
1530
+ }
1531
+ .im-cot-search-step__status {
1532
+ color: var(--incremark-color-neutral-8);
1533
+ }
1534
+ .im-cot-search-step__result {
1535
+ color: var(--incremark-color-text-secondary);
1536
+ }
1537
+ .im-cot-search-step__result span + span::before {
1538
+ content: ',';
1539
+ }
1540
+ .im-cot-tool-step__name {
1541
+ font-weight: 500;
1542
+ color: var(--incremark-color-text-primary);
1543
+ margin-bottom: var(--incremark-spacing-xs);
1544
+ }
1545
+ .im-cot-tool-step__args {
1546
+ margin: var(--incremark-spacing-xs) 0;
1547
+ padding: var(--incremark-spacing-sm);
1548
+ background: var(--incremark-color-neutral-3);
1549
+ border-radius: var(--incremark-border-radius-sm);
1550
+ font-size: 12px;
1551
+ }
1552
+ .im-cot-tool-step__args code {
1553
+ font-family: var(--incremark-typography-font-family-mono);
1554
+ color: var(--incremark-color-text-secondary);
1555
+ }
1556
+ .im-cot-tool-step__status {
1557
+ color: var(--incremark-color-neutral-8);
1558
+ font-style: italic;
1559
+ }
1560
+ .im-cot-tool-step__result {
1561
+ margin-top: var(--incremark-spacing-xs);
1562
+ color: var(--incremark-color-text-secondary);
1563
+ }
1564
+ /**
1565
+ * ReasoningMessage 组件样式
1566
+ *
1567
+ * 只负责推理内容的渲染样式
1568
+ * 折叠相关样式在 chain-of-thought.less
1569
+ */
1570
+ .im-reasoning {
1571
+ color: var(--incremark-color-text-secondary);
1572
+ font-size: var(--incremark-typography-font-size-sm);
1573
+ line-height: var(--incremark-typography-line-height-relaxed);
1574
+ }
1575
+ .im-reasoning--blockquote {
1576
+ padding-left: 12px;
1577
+ border-left: 3px solid var(--incremark-color-border-default);
1578
+ }
1579
+ /**
1580
+ * ToolCall 组件样式
1581
+ */
1582
+ .im-tool-call {
1583
+ border: 1px solid var(--incremark-color-border-default);
1584
+ border-radius: var(--incremark-border-radius-md);
1585
+ overflow: hidden;
1586
+ font-size: 13px;
1587
+ }
1588
+ .im-tool-call--loading {
1589
+ border-color: var(--incremark-color-brand-primary-light);
1590
+ }
1591
+ .im-tool-call--output-error {
1592
+ border-color: var(--incremark-base-colors-red-6);
1593
+ }
1594
+ .im-tool-call--output-available {
1595
+ border-color: var(--incremark-color-status-completed);
1596
+ }
1597
+ .im-tool-call--output-denied {
1598
+ border-color: var(--incremark-color-neutral-6);
1599
+ }
1600
+ .im-tool-call--approval-requested {
1601
+ border-color: var(--incremark-color-status-pending);
1602
+ }
1603
+ .im-tool-call__header {
1604
+ display: flex;
1605
+ align-items: center;
1606
+ justify-content: space-between;
1607
+ padding: 8px 12px;
1608
+ background: var(--incremark-color-neutral-2);
1609
+ border-bottom: 1px solid var(--incremark-color-border-default);
1610
+ cursor: pointer;
1611
+ user-select: none;
1612
+ }
1613
+ .im-tool-call__header:hover {
1614
+ background: var(--incremark-color-neutral-3);
1615
+ }
1616
+ .im-tool-call__header-left {
1617
+ display: flex;
1618
+ align-items: center;
1619
+ gap: var(--incremark-spacing-xs);
1620
+ }
1621
+ .im-tool-call__chevron {
1622
+ font-size: 14px;
1623
+ color: var(--incremark-color-neutral-7);
1624
+ transition: transform var(--incremark-animation-duration-normal) var(--incremark-animation-easing-ease-in-out);
1625
+ }
1626
+ .im-tool-call__chevron--expanded {
1627
+ transform: rotate(90deg);
1628
+ }
1629
+ .im-tool-call__name {
1630
+ font-weight: 500;
1631
+ color: var(--incremark-color-text-primary);
1632
+ }
1633
+ .im-tool-call__state {
1634
+ font-size: 12px;
1635
+ padding: 2px 8px;
1636
+ border-radius: var(--incremark-border-radius-sm);
1637
+ background: var(--incremark-color-neutral-3);
1638
+ color: var(--incremark-color-neutral-8);
1639
+ }
1640
+ .im-tool-call__state--input-streaming,
1641
+ .im-tool-call__state--executing {
1642
+ background: var(--incremark-color-brand-primary-light);
1643
+ color: var(--incremark-color-brand-primary);
1644
+ }
1645
+ .im-tool-call__state--approval-requested {
1646
+ background: var(--incremark-color-status-pending);
1647
+ color: var(--incremark-color-neutral-1);
1648
+ }
1649
+ .im-tool-call__state--approval-responded {
1650
+ background: var(--incremark-color-brand-primary);
1651
+ color: var(--incremark-color-neutral-1);
1652
+ }
1653
+ .im-tool-call__state--output-available {
1654
+ background: var(--incremark-color-status-completed);
1655
+ color: var(--incremark-color-neutral-1);
1656
+ }
1657
+ .im-tool-call__state--output-error {
1658
+ background: var(--incremark-base-colors-red-6);
1659
+ color: var(--incremark-color-neutral-1);
1660
+ }
1661
+ .im-tool-call__state--output-denied {
1662
+ background: var(--incremark-color-neutral-7);
1663
+ color: var(--incremark-color-neutral-1);
1664
+ }
1665
+ .im-tool-call__args {
1666
+ padding: 8px 12px;
1667
+ background: var(--incremark-color-neutral-2);
1668
+ border-bottom: 1px solid var(--incremark-color-neutral-3);
1669
+ }
1670
+ .im-tool-call__args pre {
1671
+ margin: 0;
1672
+ font-size: 12px;
1673
+ color: var(--incremark-color-text-secondary);
1674
+ white-space: pre-wrap;
1675
+ word-break: break-all;
1676
+ }
1677
+ .im-tool-call__output {
1678
+ padding: 8px 12px;
1679
+ }
1680
+ .im-tool-call__output pre {
1681
+ margin: 0;
1682
+ font-size: 12px;
1683
+ color: var(--incremark-color-text-primary);
1684
+ white-space: pre-wrap;
1685
+ word-break: break-all;
1686
+ }
1687
+ .im-tool-call__error {
1688
+ padding: 8px 12px;
1689
+ color: var(--incremark-color-neutral-1);
1690
+ background: var(--incremark-base-colors-red-6);
1691
+ }
1692
+ .im-tool-call__denied {
1693
+ padding: 8px 12px;
1694
+ color: var(--incremark-color-neutral-8);
1695
+ background: var(--incremark-color-neutral-3);
1696
+ }
1697
+ .im-tool-call__approval {
1698
+ padding: 8px 12px;
1699
+ color: var(--incremark-color-text-secondary);
1700
+ background: var(--incremark-color-neutral-3);
1701
+ border-top: 1px solid var(--incremark-color-border-default);
1702
+ }
1703
+ /**
1704
+ * SourceReference 组件样式
1705
+ */
1706
+ .im-source-reference {
1707
+ display: inline-flex;
1708
+ align-items: center;
1709
+ font-size: 13px;
1710
+ gap: 6px;
1711
+ }
1712
+ .im-source-reference__icon {
1713
+ flex-shrink: 0;
1714
+ width: 14px;
1715
+ height: 14px;
1716
+ }
1717
+ .im-source-reference__link {
1718
+ display: inline-flex;
1719
+ align-items: center;
1720
+ gap: 6px;
1721
+ color: var(--incremark-color-interactive-link);
1722
+ text-decoration: none;
1723
+ transition: color 0.2s ease;
1724
+ }
1725
+ .im-source-reference__link:hover {
1726
+ color: var(--incremark-color-interactive-link-hover);
1727
+ }
1728
+ .im-source-reference__title {
1729
+ color: var(--incremark-color-text-primary);
1730
+ word-break: break-all;
1731
+ }
1732
+ .im-source-reference__type {
1733
+ margin-left: 4px;
1734
+ font-size: 12px;
1735
+ color: var(--incremark-color-text-tertiary);
1736
+ }
1737
+ .im-source-reference__document {
1738
+ display: flex;
1739
+ align-items: center;
1740
+ gap: 6px;
1741
+ }
1742
+ .im-source-reference--url .im-source-reference__link {
1743
+ color: var(--incremark-color-interactive-link);
1744
+ }
1745
+ .im-source-reference--document .im-source-reference__document {
1746
+ color: var(--incremark-color-text-secondary);
1747
+ }
1748
+ /**
1749
+ * FilePreview 组件样式
1750
+ */
1751
+ .im-file-preview {
1752
+ position: relative;
1753
+ }
1754
+ .im-file-preview__image {
1755
+ display: block;
1756
+ border-radius: var(--incremark-border-radius-md);
1757
+ }
1758
+ .im-file-preview__video {
1759
+ display: block;
1760
+ border-radius: var(--incremark-border-radius-md);
1761
+ }
1762
+ .im-file-preview__audio {
1763
+ width: 100%;
1764
+ }
1765
+ .im-file-preview__file {
1766
+ display: flex;
1767
+ align-items: center;
1768
+ gap: var(--incremark-spacing-sm);
1769
+ padding: var(--incremark-spacing-sm) var(--incremark-spacing-md);
1770
+ background: var(--incremark-color-neutral-2);
1771
+ border: 1px solid var(--incremark-color-border-subtle);
1772
+ border-radius: var(--incremark-border-radius-md);
1773
+ }
1774
+ .im-file-preview__file-info {
1775
+ flex: 1;
1776
+ min-width: 0;
1777
+ display: flex;
1778
+ flex-direction: column;
1779
+ gap: 2px;
1780
+ }
1781
+ .im-file-preview__filename {
1782
+ font-size: var(--incremark-typography-font-size-sm);
1783
+ color: var(--incremark-color-text-primary);
1784
+ white-space: nowrap;
1785
+ overflow: hidden;
1786
+ text-overflow: ellipsis;
1787
+ }
1788
+ .im-file-preview__type {
1789
+ font-size: var(--incremark-typography-font-size-xs);
1790
+ color: var(--incremark-color-text-tertiary);
1791
+ }
1792
+ .im-file-preview--compact {
1793
+ display: flex;
1794
+ align-items: center;
1795
+ gap: var(--incremark-spacing-sm);
1796
+ max-width: 200px;
1797
+ }
1798
+ .im-file-preview__thumbnail {
1799
+ width: 40px;
1800
+ height: 40px;
1801
+ flex-shrink: 0;
1802
+ border-radius: var(--incremark-border-radius-sm);
1803
+ overflow: hidden;
1804
+ }
1805
+ .im-file-preview__thumbnail-img {
1806
+ width: 100%;
1807
+ height: 100%;
1808
+ object-fit: cover;
1809
+ }
1810
+ .im-file-preview__icon-box {
1811
+ width: 40px;
1812
+ height: 40px;
1813
+ flex-shrink: 0;
1814
+ display: flex;
1815
+ align-items: center;
1816
+ justify-content: center;
1817
+ }
1818
+ .im-file-preview__icon {
1819
+ width: 32px;
1820
+ height: 32px;
1821
+ }
1822
+ .im-file-preview__info {
1823
+ flex: 1;
1824
+ min-width: 0;
1825
+ display: flex;
1826
+ flex-direction: column;
1827
+ gap: 2px;
1828
+ overflow: hidden;
1829
+ }
1830
+ .im-file-preview__name {
1831
+ font-size: var(--incremark-typography-font-size-sm);
1832
+ color: var(--incremark-color-text-primary);
1833
+ white-space: nowrap;
1834
+ overflow: hidden;
1835
+ text-overflow: ellipsis;
1836
+ }
1837
+ .im-file-preview__size {
1838
+ font-size: var(--incremark-typography-font-size-xs);
1839
+ color: var(--incremark-color-text-tertiary);
1840
+ }
1841
+ .im-file-preview__remove {
1842
+ position: absolute;
1843
+ top: -6px;
1844
+ right: -6px;
1845
+ }
1846
+ .im-file-preview__remove.im-button {
1847
+ width: 18px;
1848
+ height: 18px;
1849
+ min-width: 18px;
1850
+ min-height: 18px;
1851
+ padding: 0;
1852
+ background: var(--incremark-color-neutral-6);
1853
+ color: var(--incremark-color-text-inverse);
1854
+ font-size: 12px;
1855
+ }
1856
+ .im-file-preview__remove.im-button:hover {
1857
+ background: var(--incremark-color-neutral-7);
1858
+ color: var(--incremark-color-text-inverse);
1859
+ }
1860
+ /**
1861
+ * MessageBubble 消息气泡组件样式
1862
+ */
1863
+ .im-message-bubble {
1864
+ display: flex;
1865
+ gap: var(--incremark-spacing-sm);
1866
+ max-width: 100%;
1867
+ }
1868
+ .im-message-bubble--start {
1869
+ flex-direction: row;
1870
+ }
1871
+ .im-message-bubble--end {
1872
+ flex-direction: row-reverse;
1873
+ }
1874
+ .im-message-bubble__avatar {
1875
+ flex-shrink: 0;
1876
+ }
1877
+ .im-message-bubble__main {
1878
+ display: flex;
1879
+ flex-direction: column;
1880
+ gap: var(--incremark-spacing-xs);
1881
+ min-width: 0;
1882
+ }
1883
+ .im-message-bubble--auto .im-message-bubble__main {
1884
+ flex: 0 1 auto;
1885
+ }
1886
+ .im-message-bubble--block .im-message-bubble__main {
1887
+ flex: 1;
1888
+ }
1889
+ .im-message-bubble__header {
1890
+ font-size: var(--incremark-typography-font-size-sm);
1891
+ color: var(--incremark-color-text-secondary);
1892
+ }
1893
+ .im-message-bubble__content {
1894
+ max-width: 100%;
1895
+ }
1896
+ .im-message-bubble__content .incremark > .incremark-block:first-child > :first-child {
1897
+ margin-top: 0;
1898
+ }
1899
+ .im-message-bubble__content .incremark > .incremark-block:last-child > :last-child {
1900
+ margin-bottom: 0;
1901
+ }
1902
+ .im-message-bubble__content--filled {
1903
+ background-color: var(--incremark-color-background-muted);
1904
+ padding: var(--incremark-spacing-sm) var(--incremark-spacing-md);
1905
+ }
1906
+ .im-message-bubble__content--outlined {
1907
+ border: 1px solid var(--incremark-color-border-default);
1908
+ padding: var(--incremark-spacing-sm) var(--incremark-spacing-md);
1909
+ }
1910
+ .im-message-bubble__content--default {
1911
+ border-radius: var(--incremark-border-radius-md);
1912
+ }
1913
+ .im-message-bubble__content--round {
1914
+ border-radius: var(--incremark-border-radius-lg);
1915
+ }
1916
+ .im-message-bubble__content--primary {
1917
+ background-color: var(--incremark-color-brand-primary);
1918
+ color: var(--incremark-color-text-inverse);
1919
+ }
1920
+ .im-message-bubble__footer {
1921
+ font-size: var(--incremark-typography-font-size-sm);
1922
+ color: var(--incremark-color-text-secondary);
1923
+ }
1924
+ .im-message-bubble--end .im-message-bubble__main {
1925
+ align-items: flex-end;
1926
+ }
1927
+ .im-message-bubble--end .im-message-bubble__header,
1928
+ .im-message-bubble--end .im-message-bubble__footer {
1929
+ text-align: right;
1930
+ }
1931
+ .im-message-bubble--end .im-message-bubble__content {
1932
+ max-width: 85%;
1933
+ }
1934
+ /**
1935
+ * MessageActions 组件样式
1936
+ */
1937
+ .im-message-actions {
1938
+ display: inline-flex;
1939
+ align-items: center;
1940
+ gap: var(--incremark-spacing-xs);
1941
+ }
1942
+ .im-message-actions--filled {
1943
+ padding: var(--incremark-spacing-xs);
1944
+ border-radius: var(--incremark-border-radius-md);
1945
+ background: var(--incremark-color-neutral-2);
1946
+ }
1947
+ .im-message-actions--outlined {
1948
+ padding: var(--incremark-spacing-xs);
1949
+ border: 1px solid var(--incremark-color-border-default);
1950
+ border-radius: var(--incremark-border-radius-md);
1951
+ }
1952
+ .im-message-action {
1953
+ display: inline-flex;
1954
+ align-items: center;
1955
+ justify-content: center;
1956
+ width: 28px;
1957
+ height: 28px;
1958
+ padding: 0;
1959
+ border: none;
1960
+ border-radius: var(--incremark-border-radius-sm);
1961
+ background: transparent;
1962
+ color: var(--incremark-color-text-tertiary);
1963
+ cursor: pointer;
1964
+ transition: all var(--incremark-animation-duration-fast) var(--incremark-animation-easing-ease-out);
1965
+ }
1966
+ .im-message-action:hover {
1967
+ background: var(--incremark-color-neutral-3);
1968
+ color: var(--incremark-color-text-secondary);
1969
+ }
1970
+ .im-message-action:active {
1971
+ background: var(--incremark-color-neutral-4);
1972
+ }
1973
+ .im-message-action--disabled {
1974
+ opacity: 0.5;
1975
+ cursor: not-allowed;
1976
+ pointer-events: none;
1977
+ }
1978
+ .im-message-action--loading {
1979
+ cursor: wait;
1980
+ }
1981
+ .im-message-action__icon {
1982
+ width: 16px;
1983
+ height: 16px;
1984
+ }
1985
+ .im-message-action-feedback {
1986
+ display: inline-flex;
1987
+ align-items: center;
1988
+ gap: var(--incremark-spacing-xs);
1989
+ }
1990
+ .im-message-action-feedback__like--active {
1991
+ color: var(--incremark-base-colors-red-6);
1992
+ }
1993
+ .im-message-action-feedback__like--active:hover {
1994
+ color: var(--incremark-base-colors-red-6);
1995
+ }
1996
+ .im-message-action-feedback__dislike--active {
1997
+ color: var(--incremark-color-text-secondary);
1998
+ }
1999
+ .im-message-action-feedback__dislike--active:hover {
2000
+ color: var(--incremark-color-text-secondary);
2001
+ }
2002
+ .sender-input {
2003
+ padding: var(--incremark-spacing-sm);
2004
+ font-size: var(--incremark-typography-font-size-base);
2005
+ }
2006
+ .sender-input--bordered {
2007
+ border: 1px solid var(--incremark-color-border-default);
2008
+ border-radius: var(--incremark-border-radius-md);
2009
+ }
2010
+ .sender-input--disabled {
2011
+ color: var(--incremark-color-text-tertiary);
2012
+ cursor: not-allowed;
2013
+ }
2014
+ .sender-input__editor.tiptap {
2015
+ outline: none;
2016
+ max-height: var(--im-sender-input-max-height, 150px);
2017
+ overflow: auto;
2018
+ }
2019
+ .sender-input__editor.tiptap > :first-child {
2020
+ margin-top: 0;
2021
+ }
2022
+ .sender-input__editor.tiptap > :last-child {
2023
+ margin-bottom: 0;
2024
+ }
2025
+ .sender-input__editor.tiptap p.is-editor-empty:first-child::before {
2026
+ color: var(--incremark-color-text-tertiary);
2027
+ content: attr(data-placeholder);
2028
+ float: left;
2029
+ height: 0;
2030
+ pointer-events: none;
2031
+ }
2032
+ /**
2033
+ * Sender 组件样式
2034
+ */
2035
+ /**
2036
+ * CSS Variables 定义
2037
+ *
2038
+ * ⚠️ 此文件由脚本自动生成,请勿手动编辑
2039
+ * 生成脚本: scripts/generate-css-variables.ts
2040
+ * 数据来源: src/tokens/*.ts 和 src/themes/*.ts
2041
+ */
2042
+ /* ============================================
2043
+ 默认主题 CSS Variables
2044
+ ============================================ */
2045
+ :root {
2046
+ --incremark-base-colors-blue-1: #FCFDFF;
2047
+ --incremark-base-colors-blue-2: #D6E6FF;
2048
+ --incremark-base-colors-blue-3: #B0CEFF;
2049
+ --incremark-base-colors-blue-4: #8AB6FF;
2050
+ --incremark-base-colors-blue-5: #639EFF;
2051
+ --incremark-base-colors-blue-6: #3B82F6;
2052
+ --incremark-base-colors-blue-7: #296BD7;
2053
+ --incremark-base-colors-blue-8: #1A56B9;
2054
+ --incremark-base-colors-blue-9: #0E439A;
2055
+ --incremark-base-colors-blue-10: #05327C;
2056
+ --incremark-base-colors-blue-primary: #3B82F6;
2057
+ --incremark-base-colors-blue-hover: #639EFF;
2058
+ --incremark-base-colors-blue-active: #296BD7;
2059
+ --incremark-base-colors-blue-light: #D6E6FF;
2060
+ --incremark-base-colors-blue-lighter: #FCFDFF;
2061
+ --incremark-base-colors-blue-dark: #0E439A;
2062
+ --incremark-base-colors-teal-1: #D1FAF6;
2063
+ --incremark-base-colors-teal-2: #9EE6DF;
2064
+ --incremark-base-colors-teal-3: #71D1C9;
2065
+ --incremark-base-colors-teal-4: #49BDB3;
2066
+ --incremark-base-colors-teal-5: #28A89D;
2067
+ --incremark-base-colors-teal-6: #0D9488;
2068
+ --incremark-base-colors-teal-7: #04756B;
2069
+ --incremark-base-colors-teal-8: #00574F;
2070
+ --incremark-base-colors-teal-9: #003833;
2071
+ --incremark-base-colors-teal-10: #001A17;
2072
+ --incremark-base-colors-teal-primary: #0D9488;
2073
+ --incremark-base-colors-teal-hover: #28A89D;
2074
+ --incremark-base-colors-teal-active: #04756B;
2075
+ --incremark-base-colors-teal-light: #9EE6DF;
2076
+ --incremark-base-colors-teal-lighter: #D1FAF6;
2077
+ --incremark-base-colors-teal-dark: #003833;
2078
+ --incremark-base-colors-purple-1: #FFFFFF;
2079
+ --incremark-base-colors-purple-2: #F8F1FF;
2080
+ --incremark-base-colors-purple-3: #E5CBFF;
2081
+ --incremark-base-colors-purple-4: #D3A4FF;
2082
+ --incremark-base-colors-purple-5: #C07EFF;
2083
+ --incremark-base-colors-purple-6: #A855F7;
2084
+ --incremark-base-colors-purple-7: #8E40D8;
2085
+ --incremark-base-colors-purple-8: #752DBA;
2086
+ --incremark-base-colors-purple-9: #5E1E9B;
2087
+ --incremark-base-colors-purple-10: #49127D;
2088
+ --incremark-base-colors-purple-primary: #A855F7;
2089
+ --incremark-base-colors-purple-hover: #C07EFF;
2090
+ --incremark-base-colors-purple-active: #8E40D8;
2091
+ --incremark-base-colors-purple-light: #F8F1FF;
2092
+ --incremark-base-colors-purple-lighter: #FFFFFF;
2093
+ --incremark-base-colors-purple-dark: #5E1E9B;
2094
+ --incremark-base-colors-green-1: #D5FFF1;
2095
+ --incremark-base-colors-green-2: #AFFFE5;
2096
+ --incremark-base-colors-green-3: #84F6D0;
2097
+ --incremark-base-colors-green-4: #57E2B4;
2098
+ --incremark-base-colors-green-5: #31CD99;
2099
+ --incremark-base-colors-green-6: #10B981;
2100
+ --incremark-base-colors-green-7: #069A69;
2101
+ --incremark-base-colors-green-8: #007C53;
2102
+ --incremark-base-colors-green-9: #005D3E;
2103
+ --incremark-base-colors-green-10: #003F2A;
2104
+ --incremark-base-colors-green-primary: #10B981;
2105
+ --incremark-base-colors-green-hover: #31CD99;
2106
+ --incremark-base-colors-green-active: #069A69;
2107
+ --incremark-base-colors-green-light: #AFFFE5;
2108
+ --incremark-base-colors-green-lighter: #D5FFF1;
2109
+ --incremark-base-colors-green-dark: #005D3E;
2110
+ --incremark-base-colors-red-1: #FFFFFF;
2111
+ --incremark-base-colors-red-2: #FFE2E2;
2112
+ --incremark-base-colors-red-3: #FFBBBB;
2113
+ --incremark-base-colors-red-4: #FF9595;
2114
+ --incremark-base-colors-red-5: #FF6F6F;
2115
+ --incremark-base-colors-red-6: #EF4444;
2116
+ --incremark-base-colors-red-7: #D03131;
2117
+ --incremark-base-colors-red-8: #B22121;
2118
+ --incremark-base-colors-red-9: #931414;
2119
+ --incremark-base-colors-red-10: #750A0A;
2120
+ --incremark-base-colors-red-primary: #EF4444;
2121
+ --incremark-base-colors-red-hover: #FF6F6F;
2122
+ --incremark-base-colors-red-active: #D03131;
2123
+ --incremark-base-colors-red-light: #FFE2E2;
2124
+ --incremark-base-colors-red-lighter: #FFFFFF;
2125
+ --incremark-base-colors-red-dark: #931414;
2126
+ --incremark-base-colors-orange-1: #FFE7D6;
2127
+ --incremark-base-colors-orange-2: #FFD0B0;
2128
+ --incremark-base-colors-orange-3: #FFBA89;
2129
+ --incremark-base-colors-orange-4: #FFA363;
2130
+ --incremark-base-colors-orange-5: #FF8C3D;
2131
+ --incremark-base-colors-orange-6: #F97316;
2132
+ --incremark-base-colors-orange-7: #DA5E08;
2133
+ --incremark-base-colors-orange-8: #BC4D00;
2134
+ --incremark-base-colors-orange-9: #9D4000;
2135
+ --incremark-base-colors-orange-10: #7F3400;
2136
+ --incremark-base-colors-orange-primary: #F97316;
2137
+ --incremark-base-colors-orange-hover: #FF8C3D;
2138
+ --incremark-base-colors-orange-active: #DA5E08;
2139
+ --incremark-base-colors-orange-light: #FFD0B0;
2140
+ --incremark-base-colors-orange-lighter: #FFE7D6;
2141
+ --incremark-base-colors-orange-dark: #9D4000;
2142
+ --incremark-base-colors-cyan-1: #C6F7FF;
2143
+ --incremark-base-colors-cyan-2: #A0F1FF;
2144
+ --incremark-base-colors-cyan-3: #7AECFF;
2145
+ --incremark-base-colors-cyan-4: #53E4FD;
2146
+ --incremark-base-colors-cyan-5: #29CDE8;
2147
+ --incremark-base-colors-cyan-6: #06B6D4;
2148
+ --incremark-base-colors-cyan-7: #009BB5;
2149
+ --incremark-base-colors-cyan-8: #008197;
2150
+ --incremark-base-colors-cyan-9: #006778;
2151
+ --incremark-base-colors-cyan-10: #004D5A;
2152
+ --incremark-base-colors-cyan-primary: #06B6D4;
2153
+ --incremark-base-colors-cyan-hover: #29CDE8;
2154
+ --incremark-base-colors-cyan-active: #009BB5;
2155
+ --incremark-base-colors-cyan-light: #A0F1FF;
2156
+ --incremark-base-colors-cyan-lighter: #C6F7FF;
2157
+ --incremark-base-colors-cyan-dark: #006778;
2158
+ --incremark-base-colors-indigo-1: #FFFFFF;
2159
+ --incremark-base-colors-indigo-2: #F0F3FF;
2160
+ --incremark-base-colors-indigo-3: #CAD4FF;
2161
+ --incremark-base-colors-indigo-4: #A4B4FF;
2162
+ --incremark-base-colors-indigo-5: #7D95FF;
2163
+ --incremark-base-colors-indigo-6: #5776FF;
2164
+ --incremark-base-colors-indigo-7: #415FE0;
2165
+ --incremark-base-colors-indigo-8: #2F4AC2;
2166
+ --incremark-base-colors-indigo-9: #1F38A3;
2167
+ --incremark-base-colors-indigo-10: #132885;
2168
+ --incremark-base-colors-indigo-primary: #5776FF;
2169
+ --incremark-base-colors-indigo-hover: #7D95FF;
2170
+ --incremark-base-colors-indigo-active: #415FE0;
2171
+ --incremark-base-colors-indigo-light: #F0F3FF;
2172
+ --incremark-base-colors-indigo-lighter: #FFFFFF;
2173
+ --incremark-base-colors-indigo-dark: #1F38A3;
2174
+ --incremark-color-neutral-1: #ffffff;
2175
+ --incremark-color-neutral-2: #fafbfc;
2176
+ --incremark-color-neutral-3: #f3f4f6;
2177
+ --incremark-color-neutral-4: #e5e7eb;
2178
+ --incremark-color-neutral-5: #d1d5db;
2179
+ --incremark-color-neutral-6: #9ca3af;
2180
+ --incremark-color-neutral-7: #6b7280;
2181
+ --incremark-color-neutral-8: #374151;
2182
+ --incremark-color-neutral-9: #1f2937;
2183
+ --incremark-color-neutral-10: #111827;
2184
+ --incremark-color-brand-1: #FFFFFF;
2185
+ --incremark-color-brand-2: #F0F3FF;
2186
+ --incremark-color-brand-3: #CAD4FF;
2187
+ --incremark-color-brand-4: #A4B4FF;
2188
+ --incremark-color-brand-5: #7D95FF;
2189
+ --incremark-color-brand-6: #5776FF;
2190
+ --incremark-color-brand-7: #415FE0;
2191
+ --incremark-color-brand-8: #2F4AC2;
2192
+ --incremark-color-brand-9: #1F38A3;
2193
+ --incremark-color-brand-10: #132885;
2194
+ --incremark-color-brand-primary: #5776FF;
2195
+ --incremark-color-brand-primary-hover: #7D95FF;
2196
+ --incremark-color-brand-primary-active: #415FE0;
2197
+ --incremark-color-brand-primary-light: #F0F3FF;
2198
+ --incremark-color-text-primary: #374151;
2199
+ --incremark-color-text-secondary: #6b7280;
2200
+ --incremark-color-text-tertiary: #9ca3af;
2201
+ --incremark-color-text-inverse: #ffffff;
2202
+ --incremark-color-background-base: #ffffff;
2203
+ --incremark-color-background-elevated: #fafbfc;
2204
+ --incremark-color-background-overlay: rgba(1, 20, 49, 0.6);
2205
+ --incremark-color-border-default: #e5e7eb;
2206
+ --incremark-color-border-subtle: #f3f4f6;
2207
+ --incremark-color-border-strong: #6b7280;
2208
+ --incremark-color-code-inline-background: #f3f4f6;
2209
+ --incremark-color-code-inline-text: #374151;
2210
+ --incremark-color-code-block-background: #1f2937;
2211
+ --incremark-color-code-block-text: #fafbfc;
2212
+ --incremark-color-code-header-background: #111827;
2213
+ --incremark-color-status-pending: #A855F7;
2214
+ --incremark-color-status-completed: #10B981;
2215
+ --incremark-color-interactive-link: #5776FF;
2216
+ --incremark-color-interactive-link-hover: #7D95FF;
2217
+ --incremark-color-interactive-link-visited: #5E1E9B;
2218
+ --incremark-color-interactive-checked: #10B981;
2219
+ --incremark-typography-font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
2220
+ --incremark-typography-font-family-mono: 'Fira Code', 'SF Mono', 'Monaco', 'Consolas', monospace;
2221
+ --incremark-typography-font-size-xs: 12px;
2222
+ --incremark-typography-font-size-sm: 13px;
2223
+ --incremark-typography-font-size-base: 14px;
2224
+ --incremark-typography-font-size-md: 16px;
2225
+ --incremark-typography-font-size-lg: 18px;
2226
+ --incremark-typography-font-size-heading-h1: 2em;
2227
+ --incremark-typography-font-size-heading-h2: 1.5em;
2228
+ --incremark-typography-font-size-heading-h3: 1.25em;
2229
+ --incremark-typography-font-size-heading-h4: 1em;
2230
+ --incremark-typography-font-size-heading-h5: 0.875em;
2231
+ --incremark-typography-font-size-heading-h6: 0.85em;
2232
+ --incremark-typography-font-weight-normal: 400;
2233
+ --incremark-typography-font-weight-medium: 500;
2234
+ --incremark-typography-font-weight-semibold: 600;
2235
+ --incremark-typography-font-weight-bold: 700;
2236
+ --incremark-typography-line-height-tight: 1.25;
2237
+ --incremark-typography-line-height-normal: 1.5;
2238
+ --incremark-typography-line-height-relaxed: 1.75;
2239
+ --incremark-spacing-xs: 4px;
2240
+ --incremark-spacing-sm: 8px;
2241
+ --incremark-spacing-md: 12px;
2242
+ --incremark-spacing-lg: 16px;
2243
+ --incremark-spacing-xl: 24px;
2244
+ --incremark-border-radius-sm: 4px;
2245
+ --incremark-border-radius-md: 8px;
2246
+ --incremark-border-radius-lg: 12px;
2247
+ --incremark-shadow-sm: 0 2px 4px rgba(0, 19, 48, 0.06);
2248
+ --incremark-shadow-md: 0 2px 12px rgba(0, 19, 48, 0.08);
2249
+ --incremark-shadow-lg: 0 2px 16px rgba(0, 19, 48, 0.12);
2250
+ --incremark-shadow-center: 0 0 8px rgba(0, 19, 48, 0.08);
2251
+ --incremark-shadow-level1-down: 0 2px 4px rgba(0, 19, 48, 0.06);
2252
+ --incremark-shadow-level1-up: 0 -2px 4px rgba(0, 19, 48, 0.06);
2253
+ --incremark-shadow-level1-left: -2px 0 8px rgba(0, 19, 48, 0.06);
2254
+ --incremark-shadow-level1-right: 2px 0 8px rgba(0, 19, 48, 0.06);
2255
+ --incremark-shadow-level2-down: 0 2px 12px rgba(0, 19, 48, 0.08);
2256
+ --incremark-shadow-level2-up: 0 -2px 12px rgba(0, 19, 48, 0.08);
2257
+ --incremark-shadow-level2-left: -2px 0 12px rgba(0, 19, 48, 0.08);
2258
+ --incremark-shadow-level2-right: 2px 0 12px rgba(0, 19, 48, 0.08);
2259
+ --incremark-shadow-level3-down: 0 2px 16px rgba(0, 19, 48, 0.12);
2260
+ --incremark-shadow-level3-up: 0 -2px 16px rgba(0, 19, 48, 0.12);
2261
+ --incremark-shadow-level3-left: -2px 0 16px rgba(0, 19, 48, 0.12);
2262
+ --incremark-shadow-level3-right: 2px 0 16px rgba(0, 19, 48, 0.12);
2263
+ --incremark-shadow-brand-card: 0 2px 12px rgba(1, 69, 197, 0.12);
2264
+ --incremark-animation-duration-fast: 150ms;
2265
+ --incremark-animation-duration-normal: 200ms;
2266
+ --incremark-animation-duration-slow: 300ms;
2267
+ --incremark-animation-easing-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
2268
+ --incremark-animation-easing-ease-out: cubic-bezier(0, 0, 0.2, 1);
2269
+ }
2270
+ /* ============================================
2271
+ 深色主题 CSS Variables
2272
+ ============================================ */
2273
+ [data-theme="dark"],
2274
+ .theme-dark {
2275
+ --incremark-base-colors-blue-1: #FCFDFF;
2276
+ --incremark-base-colors-blue-2: #D6E6FF;
2277
+ --incremark-base-colors-blue-3: #B0CEFF;
2278
+ --incremark-base-colors-blue-4: #8AB6FF;
2279
+ --incremark-base-colors-blue-5: #639EFF;
2280
+ --incremark-base-colors-blue-6: #3B82F6;
2281
+ --incremark-base-colors-blue-7: #296BD7;
2282
+ --incremark-base-colors-blue-8: #1A56B9;
2283
+ --incremark-base-colors-blue-9: #0E439A;
2284
+ --incremark-base-colors-blue-10: #05327C;
2285
+ --incremark-base-colors-blue-primary: #3B82F6;
2286
+ --incremark-base-colors-blue-hover: #639EFF;
2287
+ --incremark-base-colors-blue-active: #296BD7;
2288
+ --incremark-base-colors-blue-light: #D6E6FF;
2289
+ --incremark-base-colors-blue-lighter: #FCFDFF;
2290
+ --incremark-base-colors-blue-dark: #0E439A;
2291
+ --incremark-base-colors-teal-1: #D1FAF6;
2292
+ --incremark-base-colors-teal-2: #9EE6DF;
2293
+ --incremark-base-colors-teal-3: #71D1C9;
2294
+ --incremark-base-colors-teal-4: #49BDB3;
2295
+ --incremark-base-colors-teal-5: #28A89D;
2296
+ --incremark-base-colors-teal-6: #0D9488;
2297
+ --incremark-base-colors-teal-7: #04756B;
2298
+ --incremark-base-colors-teal-8: #00574F;
2299
+ --incremark-base-colors-teal-9: #003833;
2300
+ --incremark-base-colors-teal-10: #001A17;
2301
+ --incremark-base-colors-teal-primary: #0D9488;
2302
+ --incremark-base-colors-teal-hover: #28A89D;
2303
+ --incremark-base-colors-teal-active: #04756B;
2304
+ --incremark-base-colors-teal-light: #9EE6DF;
2305
+ --incremark-base-colors-teal-lighter: #D1FAF6;
2306
+ --incremark-base-colors-teal-dark: #003833;
2307
+ --incremark-base-colors-indigo-1: #FFFFFF;
2308
+ --incremark-base-colors-indigo-2: #FFFFFF;
2309
+ --incremark-base-colors-indigo-3: #F0F3FF;
2310
+ --incremark-base-colors-indigo-4: #CAD3FF;
2311
+ --incremark-base-colors-indigo-5: #A3B4FF;
2312
+ --incremark-base-colors-indigo-6: #7D95FF;
2313
+ --incremark-base-colors-indigo-7: #637AE0;
2314
+ --incremark-base-colors-indigo-8: #4C61C2;
2315
+ --incremark-base-colors-indigo-9: #384BA3;
2316
+ --incremark-base-colors-indigo-10: #263885;
2317
+ --incremark-base-colors-indigo-primary: #7D95FF;
2318
+ --incremark-base-colors-indigo-hover: #A3B4FF;
2319
+ --incremark-base-colors-indigo-active: #637AE0;
2320
+ --incremark-base-colors-indigo-light: #FFFFFF;
2321
+ --incremark-base-colors-indigo-lighter: #FFFFFF;
2322
+ --incremark-base-colors-indigo-dark: #384BA3;
2323
+ --incremark-base-colors-purple-1: #FFFFFF;
2324
+ --incremark-base-colors-purple-2: #FFFFFF;
2325
+ --incremark-base-colors-purple-3: #FCF8FF;
2326
+ --incremark-base-colors-purple-4: #E9D2FF;
2327
+ --incremark-base-colors-purple-5: #D5ACFF;
2328
+ --incremark-base-colors-purple-6: #C084FC;
2329
+ --incremark-base-colors-purple-7: #A369DD;
2330
+ --incremark-base-colors-purple-8: #8851BF;
2331
+ --incremark-base-colors-purple-9: #6E3CA0;
2332
+ --incremark-base-colors-purple-10: #562A82;
2333
+ --incremark-base-colors-purple-primary: #C084FC;
2334
+ --incremark-base-colors-purple-hover: #D5ACFF;
2335
+ --incremark-base-colors-purple-active: #A369DD;
2336
+ --incremark-base-colors-purple-light: #FFFFFF;
2337
+ --incremark-base-colors-purple-lighter: #FFFFFF;
2338
+ --incremark-base-colors-purple-dark: #6E3CA0;
2339
+ --incremark-base-colors-green-1: #FEFFFF;
2340
+ --incremark-base-colors-green-2: #D8FFF1;
2341
+ --incremark-base-colors-green-3: #B2FFE3;
2342
+ --incremark-base-colors-green-4: #8AFCD2;
2343
+ --incremark-base-colors-green-5: #5CE7B4;
2344
+ --incremark-base-colors-green-6: #34D399;
2345
+ --incremark-base-colors-green-7: #23B480;
2346
+ --incremark-base-colors-green-8: #169667;
2347
+ --incremark-base-colors-green-9: #0B7750;
2348
+ --incremark-base-colors-green-10: #04593A;
2349
+ --incremark-base-colors-green-primary: #34D399;
2350
+ --incremark-base-colors-green-hover: #5CE7B4;
2351
+ --incremark-base-colors-green-active: #23B480;
2352
+ --incremark-base-colors-green-light: #D8FFF1;
2353
+ --incremark-base-colors-green-lighter: #FEFFFF;
2354
+ --incremark-base-colors-green-dark: #0B7750;
2355
+ --incremark-base-colors-red-1: #FFFFFF;
2356
+ --incremark-base-colors-red-2: #FFE2E2;
2357
+ --incremark-base-colors-red-3: #FFBBBB;
2358
+ --incremark-base-colors-red-4: #FF9595;
2359
+ --incremark-base-colors-red-5: #FF6F6F;
2360
+ --incremark-base-colors-red-6: #EF4444;
2361
+ --incremark-base-colors-red-7: #D03131;
2362
+ --incremark-base-colors-red-8: #B22121;
2363
+ --incremark-base-colors-red-9: #931414;
2364
+ --incremark-base-colors-red-10: #750A0A;
2365
+ --incremark-base-colors-red-primary: #EF4444;
2366
+ --incremark-base-colors-red-hover: #FF6F6F;
2367
+ --incremark-base-colors-red-active: #D03131;
2368
+ --incremark-base-colors-red-light: #FFE2E2;
2369
+ --incremark-base-colors-red-lighter: #FFFFFF;
2370
+ --incremark-base-colors-red-dark: #931414;
2371
+ --incremark-base-colors-orange-1: #FFE7D6;
2372
+ --incremark-base-colors-orange-2: #FFD0B0;
2373
+ --incremark-base-colors-orange-3: #FFBA89;
2374
+ --incremark-base-colors-orange-4: #FFA363;
2375
+ --incremark-base-colors-orange-5: #FF8C3D;
2376
+ --incremark-base-colors-orange-6: #F97316;
2377
+ --incremark-base-colors-orange-7: #DA5E08;
2378
+ --incremark-base-colors-orange-8: #BC4D00;
2379
+ --incremark-base-colors-orange-9: #9D4000;
2380
+ --incremark-base-colors-orange-10: #7F3400;
2381
+ --incremark-base-colors-orange-primary: #F97316;
2382
+ --incremark-base-colors-orange-hover: #FF8C3D;
2383
+ --incremark-base-colors-orange-active: #DA5E08;
2384
+ --incremark-base-colors-orange-light: #FFD0B0;
2385
+ --incremark-base-colors-orange-lighter: #FFE7D6;
2386
+ --incremark-base-colors-orange-dark: #9D4000;
2387
+ --incremark-base-colors-cyan-1: #C6F7FF;
2388
+ --incremark-base-colors-cyan-2: #A0F1FF;
2389
+ --incremark-base-colors-cyan-3: #7AECFF;
2390
+ --incremark-base-colors-cyan-4: #53E4FD;
2391
+ --incremark-base-colors-cyan-5: #29CDE8;
2392
+ --incremark-base-colors-cyan-6: #06B6D4;
2393
+ --incremark-base-colors-cyan-7: #009BB5;
2394
+ --incremark-base-colors-cyan-8: #008197;
2395
+ --incremark-base-colors-cyan-9: #006778;
2396
+ --incremark-base-colors-cyan-10: #004D5A;
2397
+ --incremark-base-colors-cyan-primary: #06B6D4;
2398
+ --incremark-base-colors-cyan-hover: #29CDE8;
2399
+ --incremark-base-colors-cyan-active: #009BB5;
2400
+ --incremark-base-colors-cyan-light: #A0F1FF;
2401
+ --incremark-base-colors-cyan-lighter: #C6F7FF;
2402
+ --incremark-base-colors-cyan-dark: #006778;
2403
+ --incremark-color-neutral-1: #0a1628;
2404
+ --incremark-color-neutral-2: #162033;
2405
+ --incremark-color-neutral-3: #273548;
2406
+ --incremark-color-neutral-4: #546070;
2407
+ --incremark-color-neutral-5: #8891a0;
2408
+ --incremark-color-neutral-6: #cdd1da;
2409
+ --incremark-color-neutral-7: #e2e5ec;
2410
+ --incremark-color-neutral-8: #f1f3f8;
2411
+ --incremark-color-neutral-9: #f8f9fc;
2412
+ --incremark-color-neutral-10: #ffffff;
2413
+ --incremark-color-brand-1: #FFFFFF;
2414
+ --incremark-color-brand-2: #FFFFFF;
2415
+ --incremark-color-brand-3: #F0F3FF;
2416
+ --incremark-color-brand-4: #CAD3FF;
2417
+ --incremark-color-brand-5: #A3B4FF;
2418
+ --incremark-color-brand-6: #7D95FF;
2419
+ --incremark-color-brand-7: #637AE0;
2420
+ --incremark-color-brand-8: #4C61C2;
2421
+ --incremark-color-brand-9: #384BA3;
2422
+ --incremark-color-brand-10: #263885;
2423
+ --incremark-color-brand-primary: #7D95FF;
2424
+ --incremark-color-brand-primary-hover: #A3B4FF;
2425
+ --incremark-color-brand-primary-active: #637AE0;
2426
+ --incremark-color-brand-primary-light: #384BA3;
2427
+ --incremark-color-text-primary: #f1f3f8;
2428
+ --incremark-color-text-secondary: #e2e5ec;
2429
+ --incremark-color-text-tertiary: #cdd1da;
2430
+ --incremark-color-text-inverse: #0a1628;
2431
+ --incremark-color-background-base: #0a1628;
2432
+ --incremark-color-background-elevated: #162033;
2433
+ --incremark-color-background-overlay: rgba(0, 0, 0, 0.75);
2434
+ --incremark-color-border-subtle: #273548;
2435
+ --incremark-color-border-default: #546070;
2436
+ --incremark-color-border-strong: #e2e5ec;
2437
+ --incremark-color-code-inline-background: #273548;
2438
+ --incremark-color-code-inline-text: #f1f3f8;
2439
+ --incremark-color-code-block-background: #273548;
2440
+ --incremark-color-code-block-text: #f8f9fc;
2441
+ --incremark-color-code-header-background: #162033;
2442
+ --incremark-color-status-pending: #C084FC;
2443
+ --incremark-color-status-completed: #34D399;
2444
+ --incremark-color-interactive-link: #7D95FF;
2445
+ --incremark-color-interactive-link-hover: #A3B4FF;
2446
+ --incremark-color-interactive-link-visited: #FFFFFF;
2447
+ --incremark-color-interactive-checked: #34D399;
2448
+ --incremark-typography-font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
2449
+ --incremark-typography-font-family-mono: 'Fira Code', 'SF Mono', 'Monaco', 'Consolas', monospace;
2450
+ --incremark-typography-font-size-xs: 12px;
2451
+ --incremark-typography-font-size-sm: 13px;
2452
+ --incremark-typography-font-size-base: 14px;
2453
+ --incremark-typography-font-size-md: 16px;
2454
+ --incremark-typography-font-size-lg: 18px;
2455
+ --incremark-typography-font-size-heading-h1: 2em;
2456
+ --incremark-typography-font-size-heading-h2: 1.5em;
2457
+ --incremark-typography-font-size-heading-h3: 1.25em;
2458
+ --incremark-typography-font-size-heading-h4: 1em;
2459
+ --incremark-typography-font-size-heading-h5: 0.875em;
2460
+ --incremark-typography-font-size-heading-h6: 0.85em;
2461
+ --incremark-typography-font-weight-normal: 400;
2462
+ --incremark-typography-font-weight-medium: 500;
2463
+ --incremark-typography-font-weight-semibold: 600;
2464
+ --incremark-typography-font-weight-bold: 700;
2465
+ --incremark-typography-line-height-tight: 1.25;
2466
+ --incremark-typography-line-height-normal: 1.5;
2467
+ --incremark-typography-line-height-relaxed: 1.75;
2468
+ --incremark-spacing-xs: 4px;
2469
+ --incremark-spacing-sm: 8px;
2470
+ --incremark-spacing-md: 12px;
2471
+ --incremark-spacing-lg: 16px;
2472
+ --incremark-spacing-xl: 24px;
2473
+ --incremark-border-radius-sm: 4px;
2474
+ --incremark-border-radius-md: 8px;
2475
+ --incremark-border-radius-lg: 12px;
2476
+ --incremark-shadow-sm: 0 2px 4px rgba(0, 19, 48, 0.06);
2477
+ --incremark-shadow-md: 0 2px 12px rgba(0, 19, 48, 0.08);
2478
+ --incremark-shadow-lg: 0 2px 16px rgba(0, 19, 48, 0.12);
2479
+ --incremark-shadow-center: 0 0 8px rgba(0, 19, 48, 0.08);
2480
+ --incremark-shadow-level1-down: 0 2px 4px rgba(0, 19, 48, 0.06);
2481
+ --incremark-shadow-level1-up: 0 -2px 4px rgba(0, 19, 48, 0.06);
2482
+ --incremark-shadow-level1-left: -2px 0 8px rgba(0, 19, 48, 0.06);
2483
+ --incremark-shadow-level1-right: 2px 0 8px rgba(0, 19, 48, 0.06);
2484
+ --incremark-shadow-level2-down: 0 2px 12px rgba(0, 19, 48, 0.08);
2485
+ --incremark-shadow-level2-up: 0 -2px 12px rgba(0, 19, 48, 0.08);
2486
+ --incremark-shadow-level2-left: -2px 0 12px rgba(0, 19, 48, 0.08);
2487
+ --incremark-shadow-level2-right: 2px 0 12px rgba(0, 19, 48, 0.08);
2488
+ --incremark-shadow-level3-down: 0 2px 16px rgba(0, 19, 48, 0.12);
2489
+ --incremark-shadow-level3-up: 0 -2px 16px rgba(0, 19, 48, 0.12);
2490
+ --incremark-shadow-level3-left: -2px 0 16px rgba(0, 19, 48, 0.12);
2491
+ --incremark-shadow-level3-right: 2px 0 16px rgba(0, 19, 48, 0.12);
2492
+ --incremark-shadow-brand-card: 0 2px 12px rgba(1, 69, 197, 0.12);
2493
+ --incremark-animation-duration-fast: 150ms;
2494
+ --incremark-animation-duration-normal: 200ms;
2495
+ --incremark-animation-duration-slow: 300ms;
2496
+ --incremark-animation-easing-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
2497
+ --incremark-animation-easing-ease-out: cubic-bezier(0, 0, 0.2, 1);
2498
+ }
2499
+ .im-sender {
2500
+ display: flex;
2501
+ flex-direction: column;
2502
+ gap: var(--incremark-spacing-md);
2503
+ width: 100%;
2504
+ }
2505
+ .im-sender__box {
2506
+ display: flex;
2507
+ flex-direction: column;
2508
+ background: var(--incremark-color-background-elevated);
2509
+ border-radius: var(--incremark-border-radius-lg);
2510
+ transition: border-color var(--incremark-animation-duration-fast) var(--incremark-animation-easing-ease-out), box-shadow var(--incremark-animation-duration-fast) var(--incremark-animation-easing-ease-out);
2511
+ }
2512
+ .im-sender__box--bordered {
2513
+ border: 1px solid var(--incremark-color-border-default);
2514
+ }
2515
+ .im-sender__box--bordered:focus-within {
2516
+ border-color: var(--incremark-color-brand-primary);
2517
+ }
2518
+ .im-sender__box--disabled {
2519
+ background: var(--incremark-color-neutral-2);
2520
+ cursor: not-allowed;
2521
+ }
2522
+ .im-sender__box--disabled:hover,
2523
+ .im-sender__box--disabled:focus-within {
2524
+ border-color: var(--incremark-color-border-default);
2525
+ box-shadow: none;
2526
+ }
2527
+ .im-sender__input {
2528
+ flex: 1;
2529
+ min-height: 24px;
2530
+ }
2531
+ .im-sender__toolbar {
2532
+ display: flex;
2533
+ align-items: center;
2534
+ justify-content: space-between;
2535
+ padding: var(--incremark-spacing-sm) var(--incremark-spacing-md);
2536
+ gap: var(--incremark-spacing-sm);
2537
+ }
2538
+ .im-sender__prefix {
2539
+ display: flex;
2540
+ align-items: center;
2541
+ gap: var(--incremark-spacing-xs);
2542
+ }
2543
+ .im-sender__suffix {
2544
+ display: flex;
2545
+ align-items: center;
2546
+ gap: var(--incremark-spacing-sm);
2547
+ }
2548
+ .im-sender-input {
2549
+ padding: var(--incremark-spacing-md);
2550
+ font-size: var(--incremark-typography-font-size-base);
2551
+ line-height: var(--incremark-typography-line-height-normal);
2552
+ }
2553
+ .im-sender-input--bordered {
2554
+ border: 1px solid var(--incremark-color-border-default);
2555
+ border-radius: var(--incremark-border-radius-md);
2556
+ }
2557
+ .im-sender-input--disabled {
2558
+ color: var(--incremark-color-text-tertiary);
2559
+ cursor: not-allowed;
2560
+ }
2561
+ .im-sender-input__editor.tiptap {
2562
+ outline: none;
2563
+ max-height: var(--im-sender-input-max-height, 200px);
2564
+ overflow-y: auto;
2565
+ }
2566
+ .im-sender-input__editor.tiptap > :first-child {
2567
+ margin-top: 0;
2568
+ }
2569
+ .im-sender-input__editor.tiptap > :last-child {
2570
+ margin-bottom: 0;
2571
+ }
2572
+ .im-sender-input__editor.tiptap p.is-editor-empty:first-child::before {
2573
+ color: var(--incremark-color-text-tertiary);
2574
+ content: attr(data-placeholder);
2575
+ float: left;
2576
+ height: 0;
2577
+ pointer-events: none;
2578
+ }
2579
+ .im-sender-action-button--active {
2580
+ color: var(--incremark-color-brand-primary);
2581
+ background-color: var(--incremark-color-brand-primary-light);
2582
+ }
2583
+ .im-sender-submit-button__icon {
2584
+ width: 18px;
2585
+ height: 18px;
2586
+ }
2587
+ .im-sender-attachments {
2588
+ display: flex;
2589
+ flex-wrap: wrap;
2590
+ gap: var(--incremark-spacing-sm);
2591
+ padding: var(--incremark-spacing-md);
2592
+ border-bottom: 1px solid var(--incremark-color-border-subtle);
2593
+ border-radius: var(--incremark-border-radius-lg) var(--incremark-border-radius-lg) 0 0;
2594
+ overflow: hidden;
2595
+ }
2596
+ /**
2597
+ * Suggestion 组件样式
2598
+ */
2599
+ .im-suggestion {
2600
+ display: flex;
2601
+ flex-wrap: wrap;
2602
+ gap: 8px;
2603
+ }
2604
+ .im-suggestion--vertical {
2605
+ flex-direction: column;
2606
+ }
2607
+ .im-suggestion-item {
2608
+ display: inline-flex;
2609
+ align-items: center;
2610
+ gap: 8px;
2611
+ padding: 8px 14px;
2612
+ font-size: var(--incremark-typography-font-size-sm);
2613
+ color: var(--incremark-color-text-primary);
2614
+ background: var(--incremark-color-background-elevated);
2615
+ border: 1px solid var(--incremark-color-border-default);
2616
+ border-radius: var(--incremark-border-radius-lg);
2617
+ cursor: pointer;
2618
+ transition: all var(--incremark-animation-duration-fast) var(--incremark-animation-easing-ease-out);
2619
+ }
2620
+ .im-suggestion-item:hover:not(:disabled) {
2621
+ border-color: var(--incremark-color-brand-primary);
2622
+ background: var(--incremark-color-brand-primary-light);
2623
+ }
2624
+ .im-suggestion-item--disabled {
2625
+ opacity: 0.5;
2626
+ cursor: not-allowed;
2627
+ }
2628
+ .im-suggestion-item__icon {
2629
+ flex-shrink: 0;
2630
+ width: 16px;
2631
+ height: 16px;
2632
+ color: var(--incremark-color-text-secondary);
2633
+ }
2634
+ .im-suggestion-item__content {
2635
+ display: flex;
2636
+ flex-direction: column;
2637
+ text-align: left;
2638
+ }
2639
+ .im-suggestion-item__label {
2640
+ line-height: var(--incremark-typography-line-height-normal);
2641
+ }
2642
+ .im-suggestion-item__description {
2643
+ font-size: var(--incremark-typography-font-size-xs);
2644
+ color: var(--incremark-color-text-tertiary);
2645
+ line-height: var(--incremark-typography-line-height-tight);
2646
+ }
2647
+ /**
2648
+ * ErrorMessage 组件样式
2649
+ */
2650
+ .im-error-message {
2651
+ display: flex;
2652
+ align-items: flex-start;
2653
+ gap: 12px;
2654
+ padding: 12px 16px;
2655
+ background: var(--incremark-base-colors-red-1, #fff1f0);
2656
+ border: 1px solid var(--incremark-base-colors-red-3, #ffa39e);
2657
+ border-radius: var(--incremark-border-radius-md);
2658
+ }
2659
+ .im-error-message__icon {
2660
+ flex-shrink: 0;
2661
+ width: 20px;
2662
+ height: 20px;
2663
+ color: var(--incremark-base-colors-red-6, #f5222d);
2664
+ margin-top: 2px;
2665
+ }
2666
+ .im-error-message__content {
2667
+ flex: 1;
2668
+ min-width: 0;
2669
+ }
2670
+ .im-error-message__title {
2671
+ font-size: var(--incremark-typography-font-size-base);
2672
+ font-weight: var(--incremark-typography-font-weight-medium);
2673
+ color: var(--incremark-color-text-primary);
2674
+ line-height: var(--incremark-typography-line-height-normal);
2675
+ margin-bottom: 4px;
2676
+ }
2677
+ .im-error-message__message {
2678
+ font-size: var(--incremark-typography-font-size-sm);
2679
+ color: var(--incremark-color-text-secondary);
2680
+ line-height: var(--incremark-typography-line-height-relaxed);
2681
+ word-break: break-word;
2682
+ }
2683
+ .im-error-message__retry {
2684
+ display: inline-flex;
2685
+ align-items: center;
2686
+ gap: 4px;
2687
+ padding: 6px 12px;
2688
+ font-size: var(--incremark-typography-font-size-sm);
2689
+ color: var(--incremark-color-text-primary);
2690
+ background: var(--incremark-color-background-elevated);
2691
+ border: 1px solid var(--incremark-color-border-default);
2692
+ border-radius: var(--incremark-border-radius-sm);
2693
+ cursor: pointer;
2694
+ transition: all var(--incremark-animation-duration-fast) var(--incremark-animation-easing-ease-out);
2695
+ white-space: nowrap;
2696
+ }
2697
+ .im-error-message__retry:hover {
2698
+ border-color: var(--incremark-color-brand-primary);
2699
+ color: var(--incremark-color-brand-primary);
2700
+ }
2701
+ .im-error-message__retry-icon {
2702
+ width: 14px;
2703
+ height: 14px;
2704
+ }
2705
+ .im-error-message--network {
2706
+ background: var(--incremark-base-colors-orange-1, #fff7e6);
2707
+ border-color: var(--incremark-base-colors-orange-3, #ffd591);
2708
+ }
2709
+ .im-error-message--network .im-error-message__icon {
2710
+ color: var(--incremark-base-colors-orange-6, #fa8c16);
2711
+ }
2712
+ .im-error-message--rate-limit {
2713
+ background: var(--incremark-base-colors-gold-1, #fffbe6);
2714
+ border-color: var(--incremark-base-colors-gold-3, #ffe58f);
2715
+ }
2716
+ .im-error-message--rate-limit .im-error-message__icon {
2717
+ color: var(--incremark-base-colors-gold-6, #faad14);
2718
+ }
2719
+ .im-error-message--server {
2720
+ background: var(--incremark-base-colors-red-1, #fff1f0);
2721
+ border-color: var(--incremark-base-colors-red-3, #ffa39e);
2722
+ }
2723
+ .im-error-message--server .im-error-message__icon {
2724
+ color: var(--incremark-base-colors-red-6, #f5222d);
2725
+ }
2726
+ .im-error-message--auth {
2727
+ background: var(--incremark-base-colors-purple-1, #f9f0ff);
2728
+ border-color: var(--incremark-base-colors-purple-3, #d3adf7);
2729
+ }
2730
+ .im-error-message--auth .im-error-message__icon {
2731
+ color: var(--incremark-base-colors-purple-6, #722ed1);
2732
+ }
2733
+ /**
2734
+ * Welcome 组件样式
2735
+ */
2736
+ .im-welcome {
2737
+ display: flex;
2738
+ flex-direction: column;
2739
+ align-items: center;
2740
+ justify-content: center;
2741
+ padding: 48px 24px;
2742
+ text-align: center;
2743
+ }
2744
+ .im-welcome__header {
2745
+ display: flex;
2746
+ flex-direction: column;
2747
+ align-items: center;
2748
+ margin-bottom: 32px;
2749
+ }
2750
+ .im-welcome__icon {
2751
+ width: 48px;
2752
+ height: 48px;
2753
+ color: var(--incremark-color-brand-primary);
2754
+ margin-bottom: 16px;
2755
+ }
2756
+ .im-welcome__title {
2757
+ font-size: var(--incremark-typography-font-size-heading-h3);
2758
+ font-weight: var(--incremark-typography-font-weight-semibold);
2759
+ color: var(--incremark-color-text-primary);
2760
+ line-height: var(--incremark-typography-line-height-tight);
2761
+ margin: 0 0 8px 0;
2762
+ }
2763
+ .im-welcome__description {
2764
+ font-size: var(--incremark-typography-font-size-base);
2765
+ color: var(--incremark-color-text-secondary);
2766
+ line-height: var(--incremark-typography-line-height-relaxed);
2767
+ margin: 0;
2768
+ max-width: 400px;
2769
+ }
2770
+ .im-welcome__suggestions {
2771
+ display: flex;
2772
+ justify-content: center;
2773
+ margin-bottom: 24px;
2774
+ max-width: 600px;
2775
+ width: 100%;
2776
+ }
2777
+ .im-welcome__hint {
2778
+ font-size: var(--incremark-typography-font-size-xs);
2779
+ color: var(--incremark-color-text-tertiary);
2780
+ line-height: var(--incremark-typography-line-height-normal);
2781
+ }
2782
+ /**
2783
+ * MessageList 组件样式
2784
+ */
2785
+ .im-message-list {
2786
+ display: flex;
2787
+ flex-direction: column;
2788
+ gap: 16px;
2789
+ padding: 16px;
2790
+ }