@incremark/theme 0.3.8 → 0.4.0-alpha.1

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