magic-agent 1.0.3 → 1.0.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/CLIENT-CONTRACT.md +254 -8
  2. package/README.md +48 -5
  3. package/client-ui/index.html +32 -0
  4. package/client-ui/pc/app.css +89 -1
  5. package/client-ui/pc/index.html +18 -8
  6. package/client-ui/pc/js/00-base.js +8 -30
  7. package/client-ui/pc/js/05-task-list-render.js +4 -1
  8. package/client-ui/pc/js/07-chat-stream-render.js +2 -85
  9. package/client-ui/pc/js/10-markdown.js +3 -171
  10. package/client-ui/pc/js/18-askbox.js +2 -176
  11. package/client-ui/pc/js/90-glue.js +1 -1
  12. package/client-ui/pc/js/91-workbench-stubs.js +4 -10
  13. package/client-ui/pc/js/93-rail.js +10 -3
  14. package/client-ui/shared/conv/01-dom.js +52 -0
  15. package/client-ui/shared/conv/02-media-kinds.js +34 -0
  16. package/client-ui/shared/conv/03-chat-message.js +1561 -0
  17. package/client-ui/shared/conv/06-ask-answer.js +377 -0
  18. package/client-ui/shared/conv/07-stream-delegation.js +158 -0
  19. package/client-ui/{pc/js → shared/conv}/09-stream-apply.js +121 -6
  20. package/client-ui/shared/conv/10-markdown-render.js +252 -0
  21. package/client-ui/shared/conv/18-askbox-markup.js +185 -0
  22. package/client-ui/{pc/js → shared/conv}/19-attachments.js +365 -21
  23. package/client-ui/shared/conv/27-conv-ledger.js +381 -0
  24. package/client-ui/{pc/js → shared/conv}/29-msg-variants.js +112 -3
  25. package/client-ui/shared/conv/README.md +257 -0
  26. package/client-ui/shared/conv/conv.css +1638 -0
  27. package/client-ui/shared/conv/dom-map.md +170 -0
  28. package/client-ui/shared/conv/manifest.json +44 -0
  29. package/client-ui/shared/conversation.css +368 -190
  30. package/client-ui/shared/conversation.js +1722 -788
  31. package/client-ui/shared/host-glue.js +143 -0
  32. package/client-ui/shared/transport-http.js +130 -6
  33. package/client-ui-mobile/index.html +2417 -103
  34. package/cmd/magic-client/clientctl.go +273 -0
  35. package/cmd/magic-client/main.go +71 -5
  36. package/go.mod +6 -3
  37. package/go.sum +4 -1
  38. package/internal/agent/arkclaw.go +3 -2
  39. package/internal/agent/arkclaw_stream.go +126 -8
  40. package/internal/agent/arkclaw_stream_test.go +97 -15
  41. package/internal/agent/arkclaw_test.go +3 -3
  42. package/internal/agent/attachments.go +18 -5
  43. package/internal/agent/attachments_test.go +7 -1
  44. package/internal/agent/capability_test.go +11 -1
  45. package/internal/agent/claude.go +96 -158
  46. package/internal/agent/codebuddy.go +108 -133
  47. package/internal/agent/codebuddy_gateway.go +8 -4
  48. package/internal/agent/codebuddy_gateway_stream.go +82 -2
  49. package/internal/agent/codebuddy_gateway_test.go +236 -1
  50. package/internal/agent/codebuddy_stream_test.go +262 -0
  51. package/internal/agent/codex.go +50 -9
  52. package/internal/agent/codex_stream_test.go +30 -0
  53. package/internal/agent/codex_test.go +24 -0
  54. package/internal/agent/custom_models.go +109 -3
  55. package/internal/agent/custom_models_test.go +74 -0
  56. package/internal/agent/dsh.go +464 -130
  57. package/internal/agent/dsh_resume.go +258 -0
  58. package/internal/agent/dsh_sdk.go +68 -17
  59. package/internal/agent/dsh_sdk_test.go +102 -2
  60. package/internal/agent/dsh_test.go +409 -36
  61. package/internal/agent/engine.go +26 -6
  62. package/internal/agent/engine_base.go +46 -2
  63. package/internal/agent/engine_base_test.go +29 -0
  64. package/internal/agent/engine_test.go +101 -0
  65. package/internal/agent/env.go +69 -1
  66. package/internal/agent/itemtracker.go +271 -0
  67. package/internal/agent/launch.go +192 -0
  68. package/internal/agent/launch_test.go +206 -0
  69. package/internal/agent/launch_unix.go +15 -0
  70. package/internal/agent/launch_windows.go +24 -0
  71. package/internal/agent/limitnotice.go +103 -0
  72. package/internal/agent/limitnotice_test.go +211 -0
  73. package/internal/agent/llmengine.go +2 -2
  74. package/internal/agent/models.go +3 -2
  75. package/internal/agent/openclaw.go +4 -3
  76. package/internal/agent/openclaw_acp.go +7 -0
  77. package/internal/agent/openclaw_test.go +2 -2
  78. package/internal/agent/permission.go +100 -11
  79. package/internal/agent/permission_test.go +100 -36
  80. package/internal/agent/runcmd.go +13 -3
  81. package/internal/agent/runner.go +7 -1
  82. package/internal/agent/runner_test.go +1 -1
  83. package/internal/agent/stream.go +777 -43
  84. package/internal/agent/stream_test.go +3 -2
  85. package/internal/agent/stream_timeline_test.go +905 -0
  86. package/internal/agent/streamjson.go +36 -2
  87. package/internal/agent/toolkind.go +20 -1
  88. package/internal/agent/toolkind_test.go +7 -1
  89. package/internal/agent/tools_suffix_test.go +10 -3
  90. package/internal/agent/trae.go +5 -3
  91. package/internal/agent/workspace_test.go +52 -0
  92. package/internal/cli/ask.go +260 -33
  93. package/internal/cli/ask_test.go +15 -11
  94. package/internal/cli/attach_test.go +32 -20
  95. package/internal/cli/clientcmd.go +156 -0
  96. package/internal/cli/events.go +53 -8
  97. package/internal/cli/events_test.go +230 -0
  98. package/internal/cli/keepalive_test.go +101 -6
  99. package/internal/cli/permission_test.go +5 -1
  100. package/internal/cli/root.go +174 -32
  101. package/internal/cli/session.go +175 -28
  102. package/internal/cli/session_test.go +144 -5
  103. package/internal/cli/sessionlog.go +385 -38
  104. package/internal/cli/sessionlog_test.go +708 -0
  105. package/internal/cli/sessionlog_user_test.go +142 -1
  106. package/internal/cli/sessiontitle.go +141 -0
  107. package/internal/client/browse.go +456 -0
  108. package/internal/client/browse_test.go +199 -0
  109. package/internal/client/cors_test.go +35 -0
  110. package/internal/client/daemon.go +525 -0
  111. package/internal/client/daemon_test.go +212 -0
  112. package/internal/client/detach_unix.go +19 -0
  113. package/internal/client/detach_windows.go +27 -0
  114. package/internal/client/pair.go +3 -3
  115. package/internal/client/plugins.go +376 -0
  116. package/internal/client/plugins_test.go +223 -0
  117. package/internal/client/proxy.go +374 -0
  118. package/internal/client/proxy_test.go +212 -0
  119. package/internal/client/service.go +1464 -48
  120. package/internal/client/service_test.go +649 -206
  121. package/internal/client/session_events_test.go +130 -0
  122. package/internal/client/wsproxy.go +113 -0
  123. package/internal/client/wsproxy_test.go +102 -0
  124. package/internal/session/delete.go +151 -0
  125. package/internal/session/delete_test.go +103 -0
  126. package/internal/session/session.go +155 -20
  127. package/internal/session/session_append.go +79 -21
  128. package/internal/session/session_test.go +124 -10
  129. package/internal/session/sessionlog.go +572 -6
  130. package/internal/session/sessionlog_read_test.go +410 -0
  131. package/internal/session/title.go +486 -0
  132. package/internal/session/title_test.go +298 -0
  133. package/npm/bin/magic-agent.js +101 -10
  134. package/npm/bin/magic-client.js +118 -0
  135. package/npm/dist/darwin-arm64/magic-agent +0 -0
  136. package/npm/dist/darwin-arm64/magic-client +0 -0
  137. package/npm/dist/darwin-x64/magic-agent +0 -0
  138. package/npm/dist/darwin-x64/magic-client +0 -0
  139. package/npm/dist/linux-arm64/magic-agent +0 -0
  140. package/npm/dist/linux-arm64/magic-client +0 -0
  141. package/npm/dist/linux-x64/magic-agent +0 -0
  142. package/npm/dist/linux-x64/magic-client +0 -0
  143. package/npm/dist/win32-x64/magic-agent.exe +0 -0
  144. package/npm/dist/win32-x64/magic-client.exe +0 -0
  145. package/npm/install.js +36 -13
  146. package/npm/lib/platform.js +27 -5
  147. package/package.json +8 -3
  148. package/client-ui/pc/js/03-chat-message.js +0 -880
  149. package/client-ui/pc/js/06-ask-answer.js +0 -204
  150. /package/client-ui/{pc/js → shared/conv}/08-ask-event-map.js +0 -0
  151. /package/client-ui/{pc → shared}/vendor/highlight.min.js +0 -0
  152. /package/client-ui/{pc → shared}/vendor/marked.min.js +0 -0
  153. /package/client-ui/{pc → shared}/vendor/purify.min.js +0 -0
@@ -0,0 +1,1638 @@
1
+ /* ============================================================================
2
+ * conv.css —— 对话内核那套 DOM(`.qa-*`)的**共用皮肤**
3
+ *
4
+ * ── 这份文件是什么 ──
5
+ * 从 magic-test/app.css 里把**对话用到的两族**规则逐字抽出(一字未改):
6
+ * ① `.qa-*`(消息流本体) ② `.md-body …` / `.hljs-*`(正文与代码高亮 —— 这族不含 `.qa-`,
7
+ * 按「只抽 .qa-*」会整族漏掉,2026-10-17 的宽度撑破就是这么来的)
8
+ * 末尾接一层**令牌桥**(见文件末),把 magic-test 那套调色板名字接到各端宿主
9
+ * 已经有的令牌上。三端共用这一份 DOM 与这一份皮肤,差别只在令牌的**值**。
10
+ *
11
+ * ── 怎么改 ──
12
+ * 观感改这里。⚠️ 抽出之后它就是权威副本:不要再回 magic-test/app.css 改同一批规则
13
+ * (那边留着的是历史副本)。要重抽就重跑抽取脚本(见 git 历史里的 tools 一次性脚本)。
14
+ * 两处「基线值」刻意走令牌、由各端给:
15
+ * `--qa-bubble-r` 用户气泡圆角 · `--qa-body-lh` 正文行高
16
+ * 移动端的 ZCode 基线在 client-ui-mobile/index.html,桌面那套在 client-ui/index.html,
17
+ * tests/check-ui-spec.mjs 钉的就是移动端那两个值。
18
+ *
19
+ * ── 为什么末尾要那层桥(2026-10-17 的教训)──
20
+ * 两边的令牌名**同形不同义**:magic-test 的 `--paper` 是**文字色**,
21
+ * 而组件宿主的 `--canvas` 是**页面底色**。上一版是「把名字逐个替换掉」,
22
+ * 于是 `.qa-t{color:var(--paper)}` 变成了 `color:var(--canvas)` = 白字白底 ——
23
+ * 症状是「历史明明回放出来了,屏上却什么都没有」。所以现在:
24
+ * 皮肤逐字原样,映射集中在末尾那一处,能逐条核对。
25
+ *
26
+ * ── 里面为什么还留着一些本壳没有的节点 ──
27
+ * 其中有少数只服务 magic-test 工作台自己的结构件(会话圆点轨 `#qa-dots` 的
28
+ * `.qa-dot*`、需求卡那套 `.qa-reqacts`、回放条 `.qa-hist-*`)—— 本壳没有那些节点,
29
+ * 这些规则匹配不到任何东西(无害)。刻意不删:内核里有几处类是**运行时拼出来的**
30
+ * (`'qa-hist-note ' + (lost ? 'lost' : 'wait')` 这类),静态判断会误判。
31
+ * ========================================================================== */
32
+ /* ────────────────────────────────────────────────────────────────────────────
33
+ * 正文那一族(markdown 渲染出来的 DOM 与代码高亮)
34
+ *
35
+ * ⚠️ 这些选择器里**没有** `.qa-`(是 `.md-body …` / `.hljs-*`),所以按「只抽 .qa-*」
36
+ * 的过滤会**整族漏掉** —— 2026-10-17 用户报「宽度没自适应 100%」就是这么来的:
37
+ * 代码块没有 `overflow-x` 约束,一行长代码把整个会话区撑到 1157px(视口只有 414),
38
+ * 于是所有正文都被顶出屏幕右侧;顺带标题 / 列表 / 引用 / 表格 / 行内码也全无样式。
39
+ * 抽取过滤现在放宽到:含 `.qa-` 或 `.md-body` 或 `.hljs` 或 `li.task-li`。
40
+ * ──────────────────────────────────────────────────────────────────────────── */
41
+
42
+ .md-body{font-size:12.5px;line-height:1.95;color:var(--paper-dim);word-wrap:break-word}
43
+
44
+ .md-body>*:first-child{margin-top:0}
45
+
46
+ .md-body h1,.md-body h2,.md-body h3,.md-body h4,.md-body h5,.md-body h6{font-family:var(--display);font-weight:400;
47
+ color:var(--paper);letter-spacing:.08em;line-height:1.4;position:relative;scroll-margin-top:10px}
48
+
49
+ .md-body h1{font-size:19px;margin:1.2em 0 .6em;border-bottom:1px solid var(--line);padding-bottom:.35em}
50
+
51
+ .md-body h2{font-size:16px;margin:1.3em 0 .5em}
52
+
53
+ .md-body h2::before{content:"";display:inline-block;width:3px;height:13px;border-radius:2px;margin-right:8px;
54
+ background:linear-gradient(180deg,#D6402A,#8F2317);vertical-align:-1px}
55
+
56
+ .md-body h3{font-size:14px;margin:1.15em 0 .45em;color:var(--paper-dim)}
57
+
58
+ .md-body h4{font-size:12.5px;margin:1.05em 0 .4em;color:var(--paper-mute)}
59
+
60
+ .md-body h5,.md-body h6{font-size:12px;margin:1em 0 .4em;color:var(--paper-mute);letter-spacing:.14em}
61
+
62
+ .md-body .h-anc{margin-left:8px;font-family:var(--mono);font-size:10px;color:var(--cinnabar-hi);
63
+ text-decoration:none;opacity:0;transition:.15s;cursor:pointer}
64
+
65
+ .md-body .h-anc::before{content:"#"}
66
+
67
+ .md-body h1:hover .h-anc,.md-body h2:hover .h-anc,.md-body h3:hover .h-anc,
68
+ .md-body h4:hover .h-anc,.md-body h5:hover .h-anc,.md-body h6:hover .h-anc{opacity:.85}
69
+
70
+ .md-body p{margin:.55em 0}
71
+
72
+ .md-body ul,.md-body ol{margin:.55em 0;padding-left:1.55em}
73
+
74
+ .md-body li{margin:.25em 0}
75
+
76
+ .md-body li>ul,.md-body li>ol{margin:.2em 0}
77
+
78
+ .md-body li::marker{color:var(--cinnabar-hi);font-family:var(--mono);font-size:.9em}
79
+
80
+ .md-body a{color:#0F766E;text-decoration:none;border-bottom:1px dotted rgba(15,118,110,.4);
81
+ word-break:break-all;transition:.15s}
82
+
83
+ .md-body a:hover{color:var(--paper);border-bottom-color:var(--paper)}
84
+
85
+ .md-body code{font-family:var(--mono);font-size:11px;background:#F7F7F5;border:1px solid var(--line);
86
+ border-radius:5px;padding:1px 5px;color:#8A6410;word-break:break-all}
87
+
88
+ .md-body pre{background:#F7F7F5;border:1px solid var(--line);border-radius:9px;padding:12px 14px;
89
+ overflow-x:auto;margin:.75em 0;position:relative}
90
+
91
+ .md-body pre code{border:0;padding:0;background:none;color:#44403C;font-size:11px;line-height:1.8;
92
+ display:block;white-space:pre}
93
+
94
+ .md-body pre code.language-text,
95
+ .md-body pre code.language-plaintext,
96
+ .md-body pre code.language-txt{white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere}
97
+
98
+ .md-body pre .code-lang{position:absolute;top:6px;right:9px;font-family:var(--mono);font-size:9px;
99
+ letter-spacing:.16em;color:var(--paper-mute);opacity:.7}
100
+
101
+ .md-body .md-mermaid{background:#F7F7F5;border:1px solid var(--line);border-radius:9px;
102
+ padding:8px 10px;margin:.6em 0;overflow:auto;text-align:center}
103
+
104
+ .md-body .md-mermaid svg{max-width:100% !important;max-height:320px;width:auto;height:auto;display:inline-block}
105
+
106
+ .md-body blockquote{border-left:3px solid rgba(214,64,42,.45);margin:.75em 0;padding:.35em .95em;
107
+ color:var(--paper-mute);background:rgba(214,64,42,.05);border-radius:0 6px 6px 0}
108
+
109
+ .md-body blockquote p{margin:.25em 0}
110
+
111
+ .md-body table{border-collapse:collapse;margin:.8em 0;width:100%;font-size:11.5px;
112
+ border:1px solid var(--line);border-radius:8px;overflow:hidden}
113
+
114
+ .md-body th,.md-body td{border:1px solid var(--line);padding:5px 9px;text-align:left;vertical-align:top}
115
+
116
+ .md-body th{background:rgba(28,25,23,.04);color:var(--paper);font-weight:500;font-family:var(--mono);
117
+ font-size:10px;letter-spacing:.1em;white-space:nowrap}
118
+
119
+ .md-body tbody tr:nth-child(even){background:rgba(28,25,23,.02)}
120
+
121
+ .md-body th[align="center"],.md-body td[align="center"]{text-align:center}
122
+
123
+ .md-body th[align="right"],.md-body td[align="right"]{text-align:right}
124
+
125
+ .md-body hr{border:0;border-top:1px solid var(--line);margin:1.2em 0}
126
+
127
+ .md-body strong{color:var(--paper);font-weight:600}
128
+
129
+ .md-body em{color:var(--paper-dim);font-style:italic}
130
+
131
+ .md-body del{color:var(--paper-mute);text-decoration:line-through}
132
+
133
+ .md-body img{max-width:100%;border:1px solid var(--line);border-radius:8px;margin:.5em 0;display:block}
134
+
135
+ .md-body li.task-li{list-style:none;display:flex;flex-wrap:wrap;gap:0 7px;align-items:flex-start;
136
+ margin-left:-1.25em}
137
+
138
+ .md-body li.task-li .bx{flex:none;width:13px;height:13px;margin-top:4px;border:1px solid #A8A29E;
139
+ border-radius:3px;display:grid;place-items:center;font-size:9px;color:transparent;font-family:var(--mono)}
140
+
141
+ .md-body li.task-li.done .bx{background:rgba(15,118,110,.15);border-color:rgba(15,118,110,.5);color:#0F766E}
142
+
143
+ .md-body li.task-li.done .tx{color:var(--paper-mute);text-decoration:line-through}
144
+
145
+ .md-body li.task-li .tx{flex:1;min-width:0}
146
+
147
+ .md-body li.task-li>ul,.md-body li.task-li>ol{flex-basis:100%}
148
+
149
+ .md-body li.task-li .tx>p:first-child{margin-top:0}
150
+
151
+ .md-body li.task-li .tx>p:last-child{margin-bottom:0}
152
+
153
+ .md-body pre code.hljs{color:#57534E}
154
+
155
+ .md-body .hljs-comment,.md-body .hljs-quote{color:#78716C;font-style:italic}
156
+
157
+ .md-body .hljs-keyword,.md-body .hljs-selector-tag,.md-body .hljs-literal,
158
+ .md-body .hljs-section,.md-body .hljs-link{color:#B91C1C}
159
+
160
+ .md-body .hljs-string,.md-body .hljs-attr,.md-body .hljs-template-tag,
161
+ .md-body .hljs-addition{color:#0F766E}
162
+
163
+ .md-body .hljs-number,.md-body .hljs-built_in,.md-body .hljs-type,
164
+ .md-body .hljs-params,.md-body .hljs-meta{color:#92670A}
165
+
166
+ .md-body .hljs-title,.md-body .hljs-title.function_,.md-body .hljs-title.class_,
167
+ .md-body .hljs-name,.md-body .hljs-selector-id,.md-body .hljs-selector-class{color:#8A6410}
168
+
169
+ .md-body .hljs-variable,.md-body .hljs-template-variable,.md-body .hljs-attribute,
170
+ .md-body .hljs-tag,.md-body .hljs-regexp{color:#8A6410}
171
+
172
+ .md-body .hljs-symbol,.md-body .hljs-bullet,.md-body .hljs-doctag,
173
+ .md-body .hljs-deletion{color:#D6402A}
174
+
175
+ .md-body .hljs-emphasis{font-style:italic}
176
+
177
+ .md-body .hljs-strong{font-weight:600;color:var(--paper)}
178
+
179
+ .qa-t.md-body{white-space:normal;line-height:1.55}
180
+
181
+ .qa-t.md-body > *:first-child{margin-top:0}
182
+
183
+ .qa-t.md-body > *:last-child{margin-bottom:0}
184
+
185
+ .qa-t.md-body p{margin:5px 0}
186
+
187
+ .qa-t.md-body h1,.qa-t.md-body h2,.qa-t.md-body h3,
188
+ .qa-t.md-body h4,.qa-t.md-body h5,.qa-t.md-body h6{
189
+ font-family:var(--display);color:var(--paper);margin:12px 0 4px;
190
+ font-weight:600;line-height:1.35;letter-spacing:.02em}
191
+
192
+ .qa-t.md-body h1{font-size:17px}
193
+
194
+ .qa-t.md-body h2{font-size:15px}
195
+
196
+ .qa-t.md-body h3{font-size:14px}
197
+
198
+ .qa-t.md-body h4{font-size:13px}
199
+
200
+ .qa-t.md-body ul,.qa-t.md-body ol{margin:4px 0 4px 20px;padding:0}
201
+
202
+ .qa-t.md-body li{margin:1px 0;line-height:1.6}
203
+
204
+ .qa-t.md-body li.task-li{list-style:none;margin-left:-20px}
205
+
206
+ .qa-t.md-body a{color:var(--cinnabar-hi);text-decoration:none;border-bottom:1px dashed currentColor}
207
+
208
+ .qa-t.md-body a:hover{color:var(--paper);border-bottom-style:solid}
209
+
210
+ .qa-t.md-body a[data-local]{cursor:pointer}
211
+
212
+ .qa-t.md-body code{font-family:var(--mono);font-size:.92em;
213
+ padding:1px 5px;border-radius:5px;background:rgba(28,25,23,.06);
214
+ border:1px solid var(--line);color:var(--paper)}
215
+
216
+ .qa-t.md-body pre{position:relative;margin:8px 0;padding:11px 12px 11px 14px;
217
+ border:1px solid var(--line);border-radius:10px;background:#FCFBF9;
218
+ overflow-x:auto;white-space:pre}
219
+
220
+ .qa-t.md-body pre code{display:block;padding:0;background:none;border:none;
221
+ font-size:12px;line-height:1.55;color:#57534E;white-space:pre}
222
+
223
+ .qa-t.md-body .code-lang{position:absolute;top:6px;right:10px;
224
+ font-family:var(--mono);font-size:9.5px;color:var(--paper-mute);
225
+ text-transform:uppercase;letter-spacing:.1em}
226
+
227
+ .qa-t.md-body blockquote{margin:6px 0;padding:3px 10px;
228
+ border-left:3px solid var(--cinnabar);color:var(--paper-dim);
229
+ background:rgba(214,64,42,.04);border-radius:0 6px 6px 0}
230
+
231
+ .qa-t.md-body blockquote p{margin:2px 0}
232
+
233
+ .qa-t.md-body hr{border:none;border-top:1px solid var(--line);margin:10px 0}
234
+
235
+ .qa-t.md-body table{border-collapse:collapse;margin:6px 0;font-size:12px}
236
+
237
+ .qa-t.md-body th,.qa-t.md-body td{border:1px solid var(--line);padding:4px 8px;text-align:left}
238
+
239
+ .qa-t.md-body th{background:rgba(28,25,23,.04);font-family:var(--display);font-weight:600}
240
+
241
+ .qa-t.md-body img{max-width:min(180px,100%);max-height:120px;width:auto;height:auto;
242
+ object-fit:contain;border-radius:6px;border:1px solid var(--line);cursor:zoom-in}
243
+
244
+ .qa-t.md-body img:hover{filter:brightness(1.05)}
245
+
246
+ [data-theme="dark"] .qa-t.md-body code{background:#2B2B2E;color:#E5E5E5}
247
+
248
+ [data-theme="dark"] .qa-t.md-body pre{background:#1C1C1E;border-color:#3B3835}
249
+
250
+ [data-theme="dark"] .qa-t.md-body pre code{color:#E5E5E5}
251
+
252
+ [data-theme="dark"] .qa-t.md-body th{background:rgba(245,244,243,.05)}
253
+
254
+ [data-theme="dark"] .qa-t.md-body td,[data-theme="dark"] .qa-t.md-body th{border-color:#3B3835}
255
+
256
+ [data-theme="dark"] .qa-t.md-body blockquote{background:rgba(245,244,243,.04);border-color:#3B3835}
257
+
258
+ [data-theme="dark"] .qa-t.md-body blockquote p{color:#A8A29E}
259
+
260
+ [data-theme="dark"] .md-body code{background:#2B2B2E;border-color:#3B3835;color:#E5E5E5}
261
+
262
+ [data-theme="dark"] .md-body pre{background:#1C1C1E;border-color:#3B3835}
263
+
264
+ [data-theme="dark"] .md-body .md-mermaid{background:#1C1C1E;border-color:#3B3835}
265
+
266
+ [data-theme="dark"] .md-body pre code{color:#E5E5E5}
267
+
268
+ [data-theme="dark"] .md-body pre code.hljs{color:#D6D3D1}
269
+
270
+ [data-theme="dark"] .md-body a{color:#F06953}
271
+
272
+ [data-theme="dark"] .md-body a:hover{color:#F5F4F3;border-bottom-color:#F5F4F3}
273
+
274
+ [data-theme="dark"] .md-body th{background:rgba(245,244,243,.05)}
275
+
276
+ [data-theme="dark"] .md-body td,
277
+ [data-theme="dark"] .md-body th{border-color:#3B3835}
278
+
279
+ [data-theme="dark"] .md-body tbody tr:nth-child(even){background:rgba(245,244,243,.03)}
280
+
281
+ [data-theme="dark"] .md-body blockquote{background:rgba(240,105,83,.07)}
282
+
283
+ [data-theme="dark"] .md-body hr{border-color:#3B3835}
284
+
285
+ [data-theme="dark"] .md-body img{border-color:#3B3835}
286
+
287
+ [data-theme="dark"] .md-body .hljs-comment,
288
+ [data-theme="dark"] .md-body .hljs-quote{color:#A8A29E}
289
+
290
+ [data-theme="dark"] .md-body .hljs-keyword,
291
+ [data-theme="dark"] .md-body .hljs-selector-tag,
292
+ [data-theme="dark"] .md-body .hljs-literal,
293
+ [data-theme="dark"] .md-body .hljs-section,
294
+ [data-theme="dark"] .md-body .hljs-link{color:#F87171}
295
+
296
+ [data-theme="dark"] .md-body .hljs-string,
297
+ [data-theme="dark"] .md-body .hljs-attr,
298
+ [data-theme="dark"] .md-body .hljs-template-tag,
299
+ [data-theme="dark"] .md-body .hljs-addition{color:#5EEAD4}
300
+
301
+ [data-theme="dark"] .md-body .hljs-number,
302
+ [data-theme="dark"] .md-body .hljs-built_in,
303
+ [data-theme="dark"] .md-body .hljs-type,
304
+ [data-theme="dark"] .md-body .hljs-params,
305
+ [data-theme="dark"] .md-body .hljs-meta{color:#FBBF24}
306
+
307
+ [data-theme="dark"] .md-body .hljs-title,
308
+ [data-theme="dark"] .md-body .hljs-title.function_,
309
+ [data-theme="dark"] .md-body .hljs-title.class_,
310
+ [data-theme="dark"] .md-body .hljs-name,
311
+ [data-theme="dark"] .md-body .hljs-selector-id,
312
+ [data-theme="dark"] .md-body .hljs-selector-class{color:#E5B96A}
313
+
314
+ [data-theme="dark"] .md-body .hljs-variable,
315
+ [data-theme="dark"] .md-body .hljs-template-variable,
316
+ [data-theme="dark"] .md-body .hljs-attribute,
317
+ [data-theme="dark"] .md-body .hljs-tag,
318
+ [data-theme="dark"] .md-body .hljs-regexp{color:#E5B96A}
319
+
320
+ [data-theme="dark"] .md-body .hljs-symbol,
321
+ [data-theme="dark"] .md-body .hljs-bullet,
322
+ [data-theme="dark"] .md-body .hljs-doctag,
323
+ [data-theme="dark"] .md-body .hljs-deletion{color:#F06953}
324
+
325
+ [data-theme="dark"] .md-body li.task-li .bx{border-color:#525252}
326
+
327
+ [data-theme="dark"] .md-body li.task-li.done .bx{background:rgba(52,211,153,.16);border-color:rgba(52,211,153,.5);color:#34D399}
328
+
329
+ [data-theme="dark"] .qa-t.md-body a{color:#F06953}
330
+
331
+ [data-theme="dark"] .qa-t.md-body a:hover{color:#F5F4F3}
332
+
333
+ [data-theme="dark"] .qa-t.md-body hr{border-color:#3B3835}
334
+
335
+ [data-theme="dark"] .qa-t.md-body img{border-color:#3B3835}
336
+
337
+ .qa-t.md-body h2{font-size:16.5px}
338
+
339
+ .qa-t.md-body h2::before{width:2px;height:14px;opacity:.75}
340
+
341
+ .qa-msg.qa-mine .qa-t.md-body pre,.qa-msg.qa-sim .qa-t.md-body pre,
342
+ .qa-msg.qa-mine .qa-t.md-body table,.qa-msg.qa-sim .qa-t.md-body table,
343
+ .qa-msg.qa-mine .qa-t.md-body blockquote,
344
+ .qa-msg.qa-sim .qa-t.md-body blockquote{text-align:left}
345
+
346
+ .qa-msg.qa-mine .qa-t.md-body ul,.qa-msg.qa-mine .qa-t.md-body ol,
347
+ .qa-msg.qa-sim .qa-t.md-body ul,.qa-msg.qa-sim .qa-t.md-body ol{list-style-position:inside;margin:4px 20px 4px 0}
348
+
349
+ .qa-msg.qa-mine .qa-t.md-body li.task-li,.qa-msg.qa-sim .qa-t.md-body li.task-li{margin-left:0}
350
+
351
+
352
+ .qa-scroll{display:none;flex:1;min-height:0;overflow-y:auto;margin:4px 0 14px;
353
+ scrollbar-width:thin;padding:4px 2px}
354
+
355
+ .qa-scroll::-webkit-scrollbar{width:7px}
356
+
357
+ .qa-scroll::-webkit-scrollbar-thumb{background:#D6D3D1;border-radius:7px}
358
+
359
+ #view-chat.chat-mode .qa-scroll{display:flex;flex-direction:column;overflow:hidden;
360
+ /* ⚠️ 下边距保持 14px 不变 —— 用户 2026-09-17:「要浮在上层 不要影响对话内容区域的高度」。
361
+ 对话框右上角那只「大喵」是**浮层**(.ag-mascot),压在消息卡片右下角之上即可,
362
+ 绝不允许为了它给卡片留带子 / 缩卡片 —— 曾试过留一条 88px 立身带,卡片白矮 74px,
363
+ 用户当场否掉。卡片高度只由视口与输入框决定,吉祥物不改任何布局尺寸。 */
364
+ margin:0 0 14px;padding:0;scrollbar-width:none}
365
+
366
+ #view-chat.chat-mode .qa-scroll::-webkit-scrollbar{display:none;width:0;height:0}
367
+
368
+ #view-chat.chat-mode .qa-stream{flex:1;min-height:0;margin-top:0;
369
+ overflow-y:auto;scrollbar-width:none}
370
+
371
+ #view-chat.chat-mode .qa-stream::-webkit-scrollbar{display:none;width:0;height:0}
372
+
373
+ .qa-dots{position:absolute;left:-26px;top:0;bottom:0;width:14px;z-index:2;
374
+ display:flex;flex-direction:column;justify-content:center;align-items:center;gap:9px;
375
+ max-height:100%;overflow-y:auto;scrollbar-width:none;-ms-overflow-style:none}
376
+
377
+ .qa-dots[hidden]{display:none}
378
+
379
+ .qa-dots::-webkit-scrollbar{display:none;width:0;height:0}
380
+
381
+ .qa-dot{flex:none;width:7px;height:7px;padding:0;border:0;border-radius:50%;
382
+ background:#D6D3D1;cursor:pointer;
383
+ transition:background .16s,transform .16s}
384
+
385
+ .qa-dot:hover{background:var(--paper-mute);transform:scale(1.4)}
386
+
387
+ .qa-dot.on{background:var(--cinnabar-hi);transform:scale(1.4)}
388
+
389
+ .qa-dot:focus-visible{outline:2px solid var(--cinnabar-hi);outline-offset:2px}
390
+
391
+ .qa-dotgap{flex:none;width:2px;height:7px;border-radius:1px;background:#D6D3D1}
392
+
393
+ .qa-dotgap.on{background:var(--cinnabar-hi)}
394
+
395
+ [data-theme="dark"] .qa-dotgap{background:#57534E}
396
+
397
+ .qa-msg.qa-jump .qa-bd{animation:qaJumpFlash 1.2s ease-out 1}
398
+
399
+ [data-theme="dark"] .qa-msg.qa-jump .qa-bd{animation-name:qaJumpFlashDark}
400
+
401
+ @media (prefers-reduced-motion: reduce){.qa-msg.qa-jump .qa-bd{animation:none}}
402
+
403
+ [data-theme="dark"] .qa-dot:not(.on){background:#57534E}
404
+
405
+ [data-theme="dark"] .qa-dot:hover:not(.on){background:#A8A29E}
406
+
407
+ @media (prefers-reduced-motion: reduce){.qa-dot{transition:none}}
408
+
409
+ .qa-stream{margin-top:22px;display:flex;flex-direction:column;gap:2px;
410
+ /* padding-bottom:6px:生成中胶囊贴角(原 18px,2026-09-17 用户「离左下角更近一些」;
411
+ 贴底距离全部由它承担,见 .qa-run 的几何说明) */
412
+ padding:18px 22px 6px;border:1px solid var(--line);border-radius:16px;background:#FFFFFF}
413
+
414
+ .qa-stream[hidden]{display:none}
415
+
416
+ .qa-msg{--qa-av:22px;display:flex;gap:10px;align-items:flex-start;padding:7px 2px}
417
+
418
+ .qa-ico{position:relative;isolation:isolate;width:var(--qa-av);height:var(--qa-av);flex:none;border-radius:8px;border:none;
419
+ display:grid;place-items:center;color:var(--paper-dim);--h:var(--halo-c-base)}
420
+
421
+ .qa-ico::before{content:"";position:absolute;inset:0;border-radius:inherit;z-index:-1;
422
+ background:var(--h);filter:blur(3px);pointer-events:none}
423
+
424
+ .qa-ico svg{width:15px;height:15px;display:block;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
425
+
426
+ .qa-av,.qa-av-txt{width:100%;height:100%;display:block;border-radius:inherit}
427
+
428
+ .qa-av{overflow:hidden}
429
+
430
+ .qa-av-img{width:126%;height:126%;margin:-13% 0 0 -13%;display:block;object-fit:cover;
431
+ -webkit-user-drag:none}
432
+
433
+ .qa-av-txt{display:grid;place-items:center;background:linear-gradient(180deg,#FDF3F0,#F8E3DD);
434
+ color:var(--cinnabar-hi);font-family:var(--display);font-size:11px;line-height:1;
435
+ letter-spacing:0;user-select:none}
436
+
437
+ .qa-msg.qa-mine .qa-ico{color:var(--cinnabar-hi);--h:var(--halo-c-red)}
438
+
439
+ .qa-bd{flex:1;min-width:0;padding-top:5px}
440
+
441
+ .qa-msg.qa-mine,.qa-msg.qa-sim{flex-direction:row-reverse;justify-content:flex-start}
442
+
443
+ /* 用户气泡:圆角走令牌 —— 移动端的 ZCode 基线是 12px 4px 12px 12px
444
+ (ConversationUserInputBubble.tsx:27 rounded-xl + rounded-tr-xs),桌面端是整圆角;
445
+ 皮肤三端一份,具体值由各端在自己页里的 `--qa-bubble-r` 给(缺省 = 桌面那套)。 */
446
+ .qa-msg.qa-mine .qa-bd{padding:10px 14px;
447
+ border:1px solid var(--line);border-radius:var(--qa-bubble-r,14px 5px 14px 14px);
448
+ background:linear-gradient(180deg,#FBF9F7,#F5F1ED)}
449
+
450
+ .qa-msg.qa-review .qa-bd{padding-top:5px}
451
+
452
+ .qa-msg.qa-review .qa-ico{color:var(--amber);--h:var(--halo-c-base)}
453
+
454
+ .qa-msg.qa-engine .qa-bd{padding-top:5px}
455
+
456
+ .qa-engine-cap{margin:0 0 6px}
457
+
458
+ .qa-engine-fold,.qa-fold{max-height:250px;overflow:hidden;
459
+ -webkit-mask-image:linear-gradient(180deg,#000 76%,transparent);
460
+ mask-image:linear-gradient(180deg,#000 76%,transparent)}
461
+
462
+ .qa-engine-fold.on,.qa-fold.on{max-height:none;-webkit-mask-image:none;mask-image:none}
463
+
464
+ .qa-fold-btn{display:inline-block;margin-top:6px;font-family:var(--mono);font-size:10px;letter-spacing:.05em;
465
+ padding:2px 10px;border-radius:6px;border:1px solid var(--line);background:#FFF;color:var(--paper-dim);
466
+ cursor:pointer;transition:.15s}
467
+
468
+ .qa-fold-btn:hover{border-color:#A8A29E;color:var(--paper)}
469
+
470
+ [data-theme="dark"] .qa-fold-btn{background:#1C1C1E;border-color:#3B3835;color:#D6D3D1}
471
+
472
+ .qa-revshots img{max-width:150px;max-height:104px}
473
+
474
+ .qa-revmiss{margin:8px 0 0}
475
+
476
+ .qa-msg.qa-clickable{cursor:pointer}
477
+
478
+ .qa-revshots-hint{margin:6px 0 0}
479
+
480
+ .qa-av-txt.qa-av-rev{background:linear-gradient(180deg,#FBF1DD,#F3E3C4);color:#92620E}
481
+
482
+ .qa-t{font-size:13px;color:var(--paper);letter-spacing:.02em;line-height:1.6;
483
+ white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere}
484
+
485
+ /* 正文行高同理走令牌:移动端的 ZCode 基线是 28px(ai-elements/message.tsx leading-[1.75]),
486
+ 桌面端更紧(13px 字号配 28px 会松得难看)—— 值由各端的 `--qa-body-lh` 给。 */
487
+ .qa-t.md-body{white-space:normal;line-height:var(--qa-body-lh,1.55)}
488
+
489
+ .qa-atts{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
490
+
491
+ .qa-atts img{max-width:168px;max-height:120px;width:auto;height:auto;margin:0;object-fit:cover}
492
+
493
+ .qa-atts img,.ag-att .thumb{cursor:zoom-in}
494
+
495
+ .qa-atts img:hover,.ag-att .thumb:hover{filter:brightness(1.05)}
496
+
497
+ .qa-arts{display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;margin-top:8px}
498
+
499
+ .qa-arts-cap{margin-top:10px;font-family:var(--mono);font-size:10px;color:var(--paper-mute)}
500
+
501
+ .qa-arts-cap + .qa-arts{margin-top:4px}
502
+
503
+ .qa-art{border:1px solid var(--line);border-radius:10px;background:#FCFBF9;
504
+ overflow:hidden;cursor:pointer;transition:border-color .15s,box-shadow .15s}
505
+
506
+ .qa-art:hover{border-color:var(--cinnabar-hi);box-shadow:0 2px 10px rgba(28,25,23,.08)}
507
+
508
+ .qa-art-image{border:0;background:transparent;border-radius:0}
509
+
510
+ .qa-art-image:hover{box-shadow:none}
511
+
512
+ .qa-art-image img{display:block;max-width:220px;max-height:150px;width:auto;height:auto;
513
+ margin:0;object-fit:cover;border:1px solid var(--line);border-radius:8px}
514
+
515
+ .qa-art-video video{display:block;max-width:280px;max-height:190px;background:#000}
516
+
517
+ .qa-art audio{display:block;width:260px;margin:8px}
518
+
519
+ .qa-art-cap{display:flex;align-items:center;gap:7px;padding:6px 9px;max-width:280px;
520
+ font-size:12px;color:var(--paper-dim)}
521
+
522
+ .qa-art-file .qa-art-cap{padding:8px 10px}
523
+
524
+ /* 按类型分行(2026-10-20 用户:「按类型分类显示 要么就宽高一致」):
525
+ qaArtMount 按 图 / 视频 / 音频 / 文件 各起一行(.qa-arts-<kind>),行内再统一格子尺寸 ——
526
+ 图固定 200×134 裁切铺满、文档卡固定 200 宽、播放器固定 220 宽。 */
527
+ .qa-arts-image .qa-art-image img{width:200px;height:134px}
528
+
529
+ .qa-arts-file{display:grid;grid-template-columns:repeat(auto-fill,200px);gap:8px}
530
+
531
+ .qa-arts-file .qa-art-file{width:200px}
532
+
533
+ .qa-arts-file .qa-art-cap{max-width:none}
534
+
535
+ .qa-arts .qa-arts-video video{width:220px;height:140px;object-fit:cover}
536
+
537
+ .qa-arts .qa-arts-audio audio{width:220px;margin:0}
538
+
539
+ .qa-arts-video .qa-art-cap,.qa-arts-audio .qa-art-cap{max-width:220px}
540
+
541
+ .qa-art-nm{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
542
+
543
+ .qa-art-sz{flex:0 0 auto;font-size:11px;color:var(--paper-mute);
544
+ font-variant-numeric:tabular-nums}
545
+
546
+ .qa-art-ext{flex:0 0 auto;padding:1px 5px;border-radius:5px;font-family:var(--mono);
547
+ font-size:9.5px;letter-spacing:.06em;color:var(--cinnabar-hi);
548
+ background:rgba(214,64,42,.09);border:1px solid rgba(214,64,42,.22)}
549
+
550
+ .qa-art-go{flex:0 0 auto;font-size:11px;color:var(--cinnabar-hi);opacity:0;transition:opacity .15s}
551
+
552
+ .qa-art:hover .qa-art-go{opacity:1}
553
+
554
+ [data-theme="dark"] .qa-art{background:rgba(245,244,243,.03);border-color:#3B3835}
555
+
556
+ [data-theme="dark"] .qa-art:hover{border-color:var(--cinnabar-hi)}
557
+
558
+ [data-theme="dark"] .qa-art-ext{background:rgba(240,105,83,.12);border-color:rgba(240,105,83,.28)}
559
+
560
+ .qa-msg.qa-mine .qa-arts,.qa-msg.qa-sim .qa-arts{justify-content:flex-end}
561
+
562
+ .qa-t.md-body > *:first-child{margin-top:0}
563
+
564
+ .qa-t.md-body > *:last-child{margin-bottom:0}
565
+
566
+ .qa-t.md-body p{margin:5px 0}
567
+
568
+ .qa-t.md-body h1,.qa-t.md-body h2,.qa-t.md-body h3,
569
+ .qa-t.md-body h4,.qa-t.md-body h5,.qa-t.md-body h6{
570
+ font-family:var(--display);color:var(--paper);margin:12px 0 4px;
571
+ font-weight:600;line-height:1.35;letter-spacing:.02em}
572
+
573
+ .qa-t.md-body h1{font-size:17px}
574
+
575
+ .qa-t.md-body h2{font-size:15px}
576
+
577
+ .qa-t.md-body h3{font-size:14px}
578
+
579
+ .qa-t.md-body h4{font-size:13px}
580
+
581
+ .qa-t.md-body ul,.qa-t.md-body ol{margin:4px 0 4px 20px;padding:0}
582
+
583
+ .qa-t.md-body li{margin:1px 0;line-height:1.6}
584
+
585
+ .qa-t.md-body li.task-li{list-style:none;margin-left:-20px}
586
+
587
+ .qa-t.md-body a{color:var(--cinnabar-hi);text-decoration:none;border-bottom:1px dashed currentColor}
588
+
589
+ .qa-t.md-body a:hover{color:var(--paper);border-bottom-style:solid}
590
+
591
+ .qa-t.md-body a[data-local]{cursor:pointer}
592
+
593
+ .qa-t.md-body code{font-family:var(--mono);font-size:.92em;
594
+ padding:1px 5px;border-radius:5px;background:rgba(28,25,23,.06);
595
+ border:1px solid var(--line);color:var(--paper)}
596
+
597
+ .qa-t.md-body pre{position:relative;margin:8px 0;padding:11px 12px 11px 14px;
598
+ border:1px solid var(--line);border-radius:10px;background:#FCFBF9;
599
+ overflow-x:auto;white-space:pre}
600
+
601
+ .qa-t.md-body pre code{display:block;padding:0;background:none;border:none;
602
+ font-size:12px;line-height:1.55;color:#57534E;white-space:pre}
603
+
604
+ .qa-t.md-body .code-lang{position:absolute;top:6px;right:10px;
605
+ font-family:var(--mono);font-size:9.5px;color:var(--paper-mute);
606
+ text-transform:uppercase;letter-spacing:.1em}
607
+
608
+ .qa-t.md-body blockquote{margin:6px 0;padding:3px 10px;
609
+ border-left:3px solid var(--cinnabar);color:var(--paper-dim);
610
+ background:rgba(214,64,42,.04);border-radius:0 6px 6px 0}
611
+
612
+ .qa-t.md-body blockquote p{margin:2px 0}
613
+
614
+ .qa-t.md-body hr{border:none;border-top:1px solid var(--line);margin:10px 0}
615
+
616
+ .qa-t.md-body table{border-collapse:collapse;margin:6px 0;font-size:12px}
617
+
618
+ .qa-t.md-body th,.qa-t.md-body td{border:1px solid var(--line);padding:4px 8px;text-align:left}
619
+
620
+ .qa-t.md-body th{background:rgba(28,25,23,.04);font-family:var(--display);font-weight:600}
621
+
622
+ .qa-t.md-body img{max-width:min(180px,100%);max-height:120px;width:auto;height:auto;
623
+ object-fit:contain;border-radius:6px;border:1px solid var(--line);cursor:zoom-in}
624
+
625
+ .qa-t.md-body img:hover{filter:brightness(1.05)}
626
+
627
+ .qa-t .qa-tail{white-space:pre-wrap}
628
+
629
+ .qa-t .qa-tail.streaming::after{content:"";display:inline-block;width:6px;height:13px;
630
+ margin-left:2px;vertical-align:-2px;background:var(--cinnabar-hi);
631
+ border-radius:1.5px;animation:qaCaret 1s steps(1) infinite}
632
+
633
+ .qa-think{margin-top:3px}
634
+
635
+ .qa-think-toggle{display:inline-flex;align-items:center;gap:6px;cursor:pointer;user-select:none;
636
+ font-size:10.5px;color:var(--paper-mute);letter-spacing:.08em}
637
+
638
+ .qa-think-toggle::before{content:"";width:7px;height:7px;border-radius:50%;
639
+ background:var(--paper-mute);opacity:.55}
640
+
641
+ .qa-think.live .qa-think-toggle{color:var(--paper-dim)}
642
+
643
+ .qa-think.live .qa-think-toggle::before{background:var(--cinnabar-hi);opacity:1;
644
+ animation:qaThinkPulse 1.4s ease-in-out infinite}
645
+
646
+ .qa-think-dur{font-family:var(--mono);font-size:9.5px;letter-spacing:.05em;color:var(--paper-mute)}
647
+
648
+ .qa-think-toggle .chev{transition:transform .2s}
649
+
650
+ .qa-think.open .qa-think-toggle .chev{transform:rotate(180deg)}
651
+
652
+ .qa-think-bd{display:none;margin-top:5px;padding:8px 12px;border-left:2px solid var(--line);
653
+ font-family:var(--serif);font-size:11.5px;font-style:italic;color:var(--paper-mute);
654
+ line-height:1.7;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere}
655
+
656
+ .qa-think.open .qa-think-bd{display:block}
657
+
658
+ .qa-tools{margin-top:3px}
659
+
660
+ .qa-tools-toggle{display:inline-flex;align-items:center;gap:6px;cursor:pointer;user-select:none;
661
+ font-size:10.5px;color:var(--paper-mute);letter-spacing:.08em}
662
+
663
+ .qa-tools-toggle::before{content:"";width:7px;height:7px;border-radius:50%;
664
+ background:var(--paper-mute);opacity:.55}
665
+
666
+ .qa-tools.live .qa-tools-toggle{color:var(--paper-dim)}
667
+
668
+ .qa-tools.live .qa-tools-toggle::before{background:var(--jade);opacity:1;
669
+ animation:qaThinkPulse 1.4s ease-in-out infinite}
670
+
671
+ .qa-tools-count{font-family:var(--mono);font-size:9.5px;letter-spacing:.05em;color:var(--paper-mute)}
672
+
673
+ .qa-tools-dur{font-family:var(--mono);font-size:9.5px;letter-spacing:.05em;color:var(--paper-mute)}
674
+
675
+ .qa-tools-toggle .chev{transition:transform .2s}
676
+
677
+ .qa-tools.open .qa-tools-toggle .chev{transform:rotate(180deg)}
678
+
679
+ .qa-tools-bd{display:none}
680
+
681
+ .qa-tools.open .qa-tools-bd{display:block;margin:4px 0 2px 2px;padding-left:10px;
682
+ border-left:2px solid var(--line)}
683
+
684
+ .qa-turn{margin:4px 0 2px;border:1px solid var(--line);border-radius:10px;
685
+ background:#FCFBF9;overflow:hidden}
686
+
687
+ .qa-turn-sum{display:flex;align-items:center;gap:8px;padding:5px 10px;
688
+ cursor:pointer;user-select:none;list-style:none;
689
+ font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;color:var(--paper-mute)}
690
+
691
+ .qa-turn-sum::-webkit-details-marker{display:none}
692
+
693
+ .qa-turn-sum::after{content:"›";flex:none;margin-left:auto;
694
+ font-family:var(--mono);font-size:12px;color:var(--paper-mute);opacity:.7;
695
+ transition:transform .18s}
696
+
697
+ .qa-turn[open] .qa-turn-sum::after{transform:rotate(90deg)}
698
+
699
+ .qa-turn-sum:hover{background:rgba(28,25,23,.03)}
700
+
701
+ .qa-turn-t{flex:none;color:var(--paper-dim)}
702
+
703
+ .qa-turn-n{flex:none;color:var(--paper-mute);opacity:.75}
704
+
705
+ .qa-turn-bd{padding:2px 10px 6px;border-top:1px solid var(--line)}
706
+
707
+ .qa-turn-bd > .qa-think:first-child,.qa-turn-bd > .qa-tools:first-child{margin-top:0}
708
+
709
+ [data-theme="dark"] .qa-turn{border-color:#3B3835;background:rgba(245,244,243,.02)}
710
+
711
+ [data-theme="dark"] .qa-turn-sum:hover{background:rgba(245,244,243,.05)}
712
+
713
+ .qa-tool{margin:3px 0 1px;border:1px solid var(--line);border-radius:10px;
714
+ background:#FCFBF9;overflow:hidden;transition:background .25s,border-color .25s}
715
+
716
+ .qa-tool.qa-tool-alone{margin:3px 0 1px;border-left:2px solid rgba(28,25,23,.22)}
717
+
718
+ .qa-tool.qa-tool-alone[data-state="ok"],.qa-tool.qa-tool-alone[data-state="err"]{
719
+ border-left-color:rgba(28,25,23,.22)}
720
+
721
+ .qa-tool+.qa-tool{margin-top:3px}
722
+
723
+ .qa-tool-head{display:flex;align-items:center;gap:8px;padding:5px 10px;cursor:pointer;
724
+ user-select:none;min-width:0}
725
+
726
+ .qa-tool-head:hover{background:rgba(28,25,23,.035)}
727
+
728
+ .qa-tool-ico{width:20px;height:20px;flex:none;display:grid;place-items:center;border-radius:6px;
729
+ background:rgba(28,25,23,.05);color:var(--paper-dim)}
730
+
731
+ .qa-tool-ico svg{width:11px;height:11px;display:block;stroke:currentColor;fill:none;
732
+ stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
733
+
734
+ .qa-tool-name{font-family:var(--mono);font-size:11px;font-weight:600;color:var(--paper);
735
+ letter-spacing:.02em;flex:none}
736
+
737
+ .qa-tool-args{flex:1;min-width:0;font-family:var(--mono);font-size:10px;color:var(--paper-mute);
738
+ white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
739
+
740
+ .qa-tool-args.qa-desc{font-family:inherit;font-size:11.5px;color:var(--paper-dim)}
741
+
742
+ .qa-tool.qa-tool-alone .qa-tool-args.qa-desc{font-size:12px;color:var(--paper)}
743
+
744
+ .qa-tool-meta{display:flex;align-items:center;gap:7px;flex:none;margin-left:auto}
745
+
746
+ .qa-tool-dur{font-family:var(--mono);font-size:9px;color:var(--paper-mute);letter-spacing:.04em;min-width:30px;text-align:right}
747
+
748
+ .qa-tool-st{width:12px;height:12px;display:grid;place-items:center}
749
+
750
+ .qa-tool-st svg{width:10px;height:10px;display:block;stroke-width:2.6;fill:none;
751
+ stroke-linecap:round;stroke-linejoin:round}
752
+
753
+ .qa-tool-st .i-ok{stroke:var(--jade)}
754
+
755
+ .qa-tool-st .i-err{stroke:var(--cinnabar-hi)}
756
+
757
+ .qa-tool-st .i-ok,.qa-tool-st .i-err{display:none}
758
+
759
+ .qa-tool[data-state="running"] .qa-tool-st::before{content:"";width:9px;height:9px;border-radius:50%;
760
+ border:1.5px solid rgba(28,25,23,.12);border-top-color:var(--paper-dim);animation:qaSpin .8s linear infinite}
761
+
762
+ .qa-tool[data-state="ok"] .qa-tool-st .i-ok{display:block}
763
+
764
+ .qa-tool[data-state="err"] .qa-tool-st .i-err{display:block}
765
+
766
+ .qa-tool .chev{width:10px;height:10px;stroke:var(--paper-mute);stroke-width:2.2;fill:none;
767
+ stroke-linecap:round;stroke-linejoin:round;transition:transform .2s}
768
+
769
+ .qa-tool.open .chev{transform:rotate(180deg)}
770
+
771
+ .qa-tool[data-state="ok"],.qa-tool[data-state="err"]{background:transparent;border-color:transparent}
772
+
773
+ .qa-tool[data-state="ok"] .qa-tool-head:hover,.qa-tool[data-state="err"] .qa-tool-head:hover{background:rgba(28,25,23,.03);border-radius:8px}
774
+
775
+ .qa-tool-bd{display:none;border-top:1px dashed var(--line);margin:0 10px;padding:7px 2px 9px}
776
+
777
+ .qa-tool.open .qa-tool-bd{display:block}
778
+
779
+ .qa-tool-sec+.qa-tool-sec{margin-top:7px}
780
+
781
+ .qa-tool-sec .k{display:block;font-family:var(--mono);font-size:9px;color:var(--paper-mute);
782
+ letter-spacing:.14em;text-transform:uppercase}
783
+
784
+ .qa-tool-sec pre{margin:3px 0 0;font-family:var(--mono);font-size:10.5px;line-height:1.6;
785
+ color:#57534E;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere}
786
+
787
+ .qa-tool.qa-agent{border-left:3px solid var(--cinnabar-hi)}
788
+
789
+ .qa-agent-chip{font-family:var(--mono);font-size:9px;letter-spacing:.06em;padding:1.5px 7px;
790
+ border-radius:99px;border:1px solid var(--line);color:var(--paper-mute);
791
+ background:rgba(28,25,23,.03);white-space:nowrap}
792
+
793
+ .qa-agent-chip.run{color:var(--cinnabar-hi);border-color:rgba(178,58,44,.35);
794
+ background:rgba(178,58,44,.06);animation:qaChipPulse 1.6s ease-in-out infinite}
795
+
796
+ .qa-agent-chip.ok{color:var(--jade);border-color:rgba(90,143,104,.4);background:rgba(90,143,104,.07)}
797
+
798
+ .qa-sub{margin:8px 0 2px;padding:2px 0 2px 10px;border-left:2px solid var(--line)}
799
+
800
+ .qa-sub-h{font-family:var(--mono);font-size:9px;color:var(--paper-mute);
801
+ letter-spacing:.14em;text-transform:uppercase;margin:2px 0 4px}
802
+
803
+ .qa-sub .qa-tool{margin:2px 0}
804
+
805
+ .qa-sub-t{font-size:12px;line-height:1.65;color:var(--paper);white-space:pre-wrap;
806
+ word-break:break-word;overflow-wrap:anywhere;margin:4px 0}
807
+
808
+ .qa-sub-n{font-family:var(--mono);font-size:10px;line-height:1.6;color:var(--paper-mute);
809
+ white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;margin:3px 0}
810
+
811
+ .qa-note{margin:6px 0 2px;font-family:var(--mono);font-size:10px;color:var(--paper-mute);
812
+ letter-spacing:.03em}
813
+
814
+ .qa-ask{margin:8px 0 2px;border:1px solid var(--line);border-left:3px solid var(--indigo);
815
+ border-radius:10px;background:#FCFBF9;padding:9px 11px 10px}
816
+
817
+ .qa-ask-hd{display:flex;align-items:center;gap:7px;margin-bottom:7px}
818
+
819
+ .qa-ask-ico{width:18px;height:18px;flex:none;display:grid;place-items:center;border-radius:6px;
820
+ background:var(--halo-indigo);color:var(--indigo)}
821
+
822
+ .qa-ask-ico svg{width:11px;height:11px;display:block;stroke:currentColor;fill:none;
823
+ stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
824
+
825
+ .qa-ask-tag{font-family:var(--mono);font-size:9px;letter-spacing:.06em;padding:1.5px 7px;
826
+ border-radius:99px;border:1px solid rgba(79,70,229,.28);color:var(--indigo);background:var(--halo-indigo)}
827
+
828
+ .qa-ask-ttl{font-family:var(--mono);font-size:9px;letter-spacing:.1em;color:var(--paper-mute);margin-left:auto}
829
+
830
+ .qa-ask-qb+.qa-ask-qb{margin-top:10px;padding-top:9px;border-top:1px dashed var(--line)}
831
+
832
+ .qa-ask-q{font-size:13px;line-height:1.62;color:var(--paper);white-space:pre-wrap;
833
+ word-break:break-word;overflow-wrap:anywhere;margin:0 0 8px}
834
+
835
+ .qa-ask-chip{display:inline-block;font-family:var(--mono);font-size:9px;letter-spacing:.06em;
836
+ padding:1px 6px;margin-right:6px;border-radius:5px;background:rgba(28,25,23,.05);
837
+ color:var(--paper-dim);vertical-align:1px}
838
+
839
+ .qa-ask-opts{display:flex;flex-direction:column;gap:5px}
840
+
841
+ .qa-ask-opt{display:flex;gap:9px;align-items:flex-start;width:100%;text-align:left;
842
+ padding:7px 9px;border:1px solid var(--line);border-radius:8px;background:#fff;font:inherit;
843
+ cursor:pointer;transition:border-color .18s,background .18s}
844
+
845
+ .qa-ask-opt:hover{border-color:rgba(79,70,229,.45);background:var(--halo-indigo)}
846
+
847
+ .qa-ask-opt .mk{width:15px;height:15px;flex:none;margin-top:1px;border-radius:5px;
848
+ border:1.5px solid var(--line);display:grid;place-items:center;color:var(--paper-mute)}
849
+
850
+ .qa-ask-opt .mk svg{width:9px;height:9px;display:none;stroke:currentColor;fill:none;
851
+ stroke-width:3.2;stroke-linecap:round;stroke-linejoin:round}
852
+
853
+ .qa-ask-opt .tx{min-width:0;flex:1}
854
+
855
+ .qa-ask-opt .lb{display:block;font-size:12.5px;line-height:1.45;color:var(--paper);font-weight:600;
856
+ word-break:break-word;overflow-wrap:anywhere}
857
+
858
+ .qa-ask-opt .ds{display:block;font-size:11px;line-height:1.55;color:var(--paper-mute);margin-top:2px;
859
+ word-break:break-word;overflow-wrap:anywhere}
860
+
861
+ .qa-ask-opt.sel{border-color:var(--indigo);background:var(--halo-indigo)}
862
+
863
+ .qa-ask-opt.sel .mk{border-color:var(--indigo);background:var(--indigo);color:#fff}
864
+
865
+ .qa-ask-opt.sel .mk svg{display:block}
866
+
867
+ .qa-ask-other{display:flex;gap:6px;margin-top:7px}
868
+
869
+ .qa-ask-other input{flex:1;min-width:0;padding:6px 9px;border:1px solid var(--line);
870
+ border-radius:8px;background:#fff;font-family:var(--serif);font-size:12px;color:var(--paper)}
871
+
872
+ .qa-ask-other input:focus{outline:none;border-color:rgba(79,70,229,.5)}
873
+
874
+ .qa-ask-other button{flex:none;padding:6px 12px;border:1px solid var(--line);border-radius:8px;
875
+ background:#fff;font-family:var(--serif);font-size:12px;color:var(--paper-dim);cursor:pointer}
876
+
877
+ .qa-ask-other button:hover{border-color:rgba(79,70,229,.45);color:var(--indigo)}
878
+
879
+ .qa-ask-ft{display:flex;align-items:center;gap:8px;margin-top:8px}
880
+
881
+ .qa-ask-ft[hidden],.qa-ask-ans[hidden]{display:none}
882
+
883
+ .qa-ask-sub{flex:none;padding:5px 14px;border:1px solid rgba(79,70,229,.4);border-radius:99px;
884
+ background:var(--halo-indigo);font-family:var(--serif);font-size:12px;color:var(--indigo);cursor:pointer}
885
+
886
+ .qa-ask-sub:disabled{opacity:.4;cursor:default;border-color:var(--line);background:transparent;
887
+ color:var(--paper-mute)}
888
+
889
+ .qa-ask-hint{font-family:var(--mono);font-size:9.5px;letter-spacing:.03em;color:var(--paper-mute)}
890
+
891
+ .qa-ask[data-answered="1"] .qa-ask-opts{pointer-events:none}
892
+
893
+ .qa-ask[data-answered="1"] .qa-ask-opt:not(.sel){opacity:.45}
894
+
895
+ .qa-ask[data-answered="1"] .qa-ask-other,.qa-ask[data-answered="1"] .qa-ask-ft{display:none}
896
+
897
+ .qa-ask-ans{margin-top:8px;padding-top:7px;border-top:1px dashed var(--line)}
898
+
899
+ .qa-ask-ans .k{display:block;font-family:var(--mono);font-size:9px;color:var(--paper-mute);
900
+ letter-spacing:.14em;text-transform:uppercase;margin-bottom:2px}
901
+
902
+ .qa-ask-ans .v{font-size:12.5px;line-height:1.6;color:var(--jade);white-space:pre-wrap;
903
+ word-break:break-word;overflow-wrap:anywhere}
904
+
905
+ .qa-askdock{position:relative;z-index:1;display:flex;flex-direction:column;gap:10px;
906
+ margin:0 0 10px;padding:2px;max-height:52vh;overflow-y:auto;scrollbar-width:thin}
907
+
908
+ .qa-askdock[hidden]{display:none}
909
+
910
+ .qa-askdock::-webkit-scrollbar{width:7px}
911
+
912
+ .qa-askdock::-webkit-scrollbar-thumb{background:#D6D3D1;border-radius:7px}
913
+
914
+ .qa-askdock>.qa-ask{margin:0;background:#FFFFFF;box-shadow:0 6px 20px rgba(28,25,23,.07)}
915
+
916
+ .qa-ask-x{flex:none;width:20px;height:20px;padding:0;border:none;border-radius:6px;background:none;
917
+ color:var(--paper-mute);font-size:14px;line-height:1;cursor:pointer;transition:.15s}
918
+
919
+ .qa-ask-x:hover{background:rgba(28,25,23,.06);color:var(--paper)}
920
+
921
+ .qa-ask[data-retiring="1"]{opacity:0;transform:translateY(-3px);
922
+ transition:opacity .3s ease,transform .3s ease}
923
+
924
+ .qa-run{display:flex;align-items:center;gap:10px;margin:auto -22px 0;
925
+ padding:6px 24px 6px 14px;background:#FFFFFF;position:sticky;bottom:0}
926
+
927
+ .qa-run::after{content:"";position:absolute;left:0;right:0;top:100%;height:6px;
928
+ background:#FFFFFF;border-radius:0 0 15px 15px}
929
+
930
+ .qa-spinner{width:14px;height:14px;flex:none;border-radius:50%;
931
+ border:2px solid rgba(28,25,23,.10);border-top-color:var(--paper-dim);
932
+ animation:qaSpin .8s linear infinite}
933
+
934
+ .qa-run-pill{display:inline-flex;align-items:center;gap:8px;padding:5px 12px 5px 10px;
935
+ border:1px solid var(--line);border-radius:999px;
936
+ background:linear-gradient(180deg,#FFFFFF,#FAF8F6);
937
+ box-shadow:0 1px 2px rgba(28,25,23,.05)}
938
+
939
+ .qa-run-t{font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;color:var(--paper-mute)}
940
+
941
+ .qa-done{display:flex;align-items:center;gap:8px;padding:10px 2px 2px;
942
+ font-family:var(--mono);font-size:10px;letter-spacing:.12em;color:var(--paper-mute)}
943
+
944
+ .qa-done .d{width:6px;height:6px;border-radius:50%;background:var(--jade)}
945
+
946
+ .qa-done.err .d{background:var(--cinnabar-hi)}
947
+
948
+ .qa-done.err{color:var(--cinnabar-hi)}
949
+
950
+ .qa-reqacts{display:flex;flex-wrap:wrap;gap:8px;padding:10px 2px 2px;justify-content:flex-start}
951
+
952
+ .qa-reqacts button{font-family:var(--mono);font-size:11px;letter-spacing:.04em;padding:5px 12px;
953
+ border-radius:8px;border:1px solid var(--line);background:#FFF;color:var(--paper-dim);
954
+ cursor:pointer;transition:.15s}
955
+
956
+ .qa-reqacts button:hover{border-color:#A8A29E;color:var(--paper)}
957
+
958
+ .qa-reqacts button.ok{color:var(--jade);border-color:rgba(13,138,106,.45);background:rgba(13,138,106,.07)}
959
+
960
+ .qa-reqacts button.ok:hover{background:rgba(13,138,106,.14)}
961
+
962
+ .qa-reqacts button.go{color:var(--cinnabar-hi);border-color:rgba(214,64,42,.45);background:rgba(214,64,42,.06)}
963
+
964
+ .qa-reqacts button.go:hover{background:rgba(214,64,42,.12)}
965
+
966
+ [data-theme="dark"] .qa-reqacts button{background:#1C1C1E;border-color:#3B3835;color:#D6D3D1}
967
+
968
+ [data-theme="dark"] .qa-reqacts button.ok{color:#34D399;border-color:rgba(52,211,153,.42);background:rgba(52,211,153,.10)}
969
+
970
+ [data-theme="dark"] .qa-reqacts button.ok:hover{background:rgba(52,211,153,.18)}
971
+
972
+ [data-theme="dark"] .qa-reqacts button.go{color:#F06953;border-color:rgba(240,105,83,.45);background:rgba(240,105,83,.10)}
973
+
974
+ [data-theme="dark"] .qa-reqacts button.go:hover{background:rgba(240,105,83,.18)}
975
+
976
+ [data-theme="dark"] .qa-stream{background:#1C1C1E}
977
+
978
+ [data-theme="dark"] .qa-scroll::-webkit-scrollbar-thumb{background:#3B3835;border-color:#1C1C1E}
979
+
980
+ [data-theme="dark"] .qa-msg{color:#E5E5E5}
981
+
982
+ [data-theme="dark"] .qa-t{color:#F5F4F3}
983
+
984
+ [data-theme="dark"] .qa-t.md-body code{background:#2B2B2E;color:#E5E5E5}
985
+
986
+ [data-theme="dark"] .qa-t.md-body pre{background:#1C1C1E;border-color:#3B3835}
987
+
988
+ [data-theme="dark"] .qa-t.md-body pre code{color:#E5E5E5}
989
+
990
+ [data-theme="dark"] .qa-t.md-body th{background:rgba(245,244,243,.05)}
991
+
992
+ [data-theme="dark"] .qa-t.md-body td,[data-theme="dark"] .qa-t.md-body th{border-color:#3B3835}
993
+
994
+ [data-theme="dark"] .qa-t.md-body blockquote{background:rgba(245,244,243,.04);border-color:#3B3835}
995
+
996
+ [data-theme="dark"] .qa-t.md-body blockquote p{color:#A8A29E}
997
+
998
+ [data-theme="dark"] .qa-msg.qa-mine .qa-bd{background:#1C1C1E;border-color:#3B3835}
999
+
1000
+ [data-theme="dark"] .qa-av-txt{background:linear-gradient(180deg,#2B2B2E,#1C1C1E)}
1001
+
1002
+ [data-theme="dark"] .qa-av-txt.qa-av-rev{background:linear-gradient(180deg,#3A2F1B,#241F16);color:#FBBF24}
1003
+
1004
+ [data-theme="dark"] .qa-tool{border-color:#3B3835;background:rgba(245,244,243,.02)}
1005
+
1006
+ [data-theme="dark"] .qa-tool-head:hover{background:rgba(245,244,243,.05)}
1007
+
1008
+ [data-theme="dark"] .qa-tool-name{color:#F5F4F3}
1009
+
1010
+ [data-theme="dark"] .qa-tool-args{color:#A8A29E}
1011
+
1012
+ [data-theme="dark"] .qa-tool-bd{border-color:#3B3835}
1013
+
1014
+ [data-theme="dark"] .qa-tool.open .qa-tool-bd{border-color:#3B3835}
1015
+
1016
+ [data-theme="dark"] .qa-tool-sec pre{background:#0F0F10}
1017
+
1018
+ [data-theme="dark"] .qa-sub{border-color:#3B3835}
1019
+
1020
+ [data-theme="dark"] .qa-sub-t{color:#E5E5E5}
1021
+
1022
+ [data-theme="dark"] .qa-agent-chip{background:rgba(245,244,243,.05);border-color:#3B3835}
1023
+
1024
+ [data-theme="dark"] .qa-agent-chip.run{background:rgba(240,105,83,.1);border-color:rgba(240,105,83,.3)}
1025
+
1026
+ [data-theme="dark"] .qa-think-bd{background:rgba(245,244,243,.03);border-color:#3B3835}
1027
+
1028
+ [data-theme="dark"] .qa-ask{border-color:#3B3835;background:rgba(245,244,243,.02)}
1029
+
1030
+ [data-theme="dark"] .qa-ico svg{stroke:currentColor}
1031
+
1032
+ [data-theme="dark"] .qa-av-img{border-radius:8px}
1033
+
1034
+ [data-theme="dark"] .qa-msg:not(.qa-mine) .qa-bd{color:#E5E5E5}
1035
+
1036
+ [data-theme="dark"] .qa-t.md-body a{color:#F06953}
1037
+
1038
+ [data-theme="dark"] .qa-t.md-body a:hover{color:#F5F4F3}
1039
+
1040
+ [data-theme="dark"] .qa-t.md-body hr{border-color:#3B3835}
1041
+
1042
+ [data-theme="dark"] .qa-t.md-body img{border-color:#3B3835}
1043
+
1044
+ [data-theme="dark"] .qa-think-toggle{color:#78716C}
1045
+
1046
+ [data-theme="dark"] .qa-think-dur{color:#525252}
1047
+
1048
+ [data-theme="dark"] .qa-tools-toggle{color:#78716C}
1049
+
1050
+ [data-theme="dark"] .qa-tools-count{color:#525252}
1051
+
1052
+ [data-theme="dark"] .qa-tools-dur{color:#525252}
1053
+
1054
+ [data-theme="dark"] .qa-tool-ico{background:rgba(245,244,243,.05)}
1055
+
1056
+ [data-theme="dark"] .qa-tool-dur{color:#525252}
1057
+
1058
+ [data-theme="dark"] .qa-tool .chev{stroke:#525252}
1059
+
1060
+ [data-theme="dark"] .qa-tool[data-state="running"] .qa-tool-st::before{background:#F59E0B}
1061
+
1062
+ [data-theme="dark"] .qa-ask-hd{color:#E5E5E5}
1063
+
1064
+ [data-theme="dark"] .qa-ask-tag{color:#818CF8;border-color:rgba(129,140,248,.4);background:rgba(129,140,248,.1)}
1065
+
1066
+ [data-theme="dark"] .qa-ask-ttl{color:#525252}
1067
+
1068
+ [data-theme="dark"] .qa-ask-qb{border-top-color:#3B3835}
1069
+
1070
+ [data-theme="dark"] .qa-ask-q{color:#F5F4F3}
1071
+
1072
+ [data-theme="dark"] .qa-ask-opt{border-color:#3B3835;background:transparent}
1073
+
1074
+ [data-theme="dark"] .qa-ask-opt:hover{border-color:rgba(129,140,248,.45);background:rgba(129,140,248,.08)}
1075
+
1076
+ [data-theme="dark"] .qa-ask-opt .lb{color:#E5E5E5}
1077
+
1078
+ [data-theme="dark"] .qa-ask-opt .ds{color:#78716C}
1079
+
1080
+ [data-theme="dark"] .qa-ask-opt .mk{border-color:#525252;background:transparent}
1081
+
1082
+ [data-theme="dark"] .qa-ask-opt.sel{border-color:#6366F1;background:rgba(99,102,241,.1)}
1083
+
1084
+ [data-theme="dark"] .qa-ask-opt.sel .lb{color:#F5F4F3}
1085
+
1086
+ [data-theme="dark"] .qa-ask-other input{background:#1C1C1E;border-color:#3B3835;color:#F5F4F3}
1087
+
1088
+ [data-theme="dark"] .qa-ask-other button{background:#1C1C1E;border-color:#3B3835;color:#A8A29E}
1089
+
1090
+ [data-theme="dark"] .qa-ask-sub{background:rgba(99,102,241,.1);border-color:rgba(99,102,241,.4);color:#818CF8}
1091
+
1092
+ [data-theme="dark"] .qa-ask-sub:hover:not(:disabled){background:rgba(99,102,241,.18)}
1093
+
1094
+ [data-theme="dark"] .qa-ask-hint{color:#525252}
1095
+
1096
+ [data-theme="dark"] .qa-ask-ans{border-top-color:#3B3835}
1097
+
1098
+ [data-theme="dark"] .qa-ask-ans .k{color:#525252}
1099
+
1100
+ [data-theme="dark"] .qa-ask-ans .v{color:#34D399}
1101
+
1102
+ [data-theme="dark"] .qa-askdock>.qa-ask{background:#1C1C1E;box-shadow:0 6px 20px rgba(0,0,0,.4)}
1103
+
1104
+ [data-theme="dark"] .qa-askdock::-webkit-scrollbar-thumb{background:#3B3835}
1105
+
1106
+ [data-theme="dark"] .qa-ask-x{color:#78716C}
1107
+
1108
+ [data-theme="dark"] .qa-ask-x:hover{background:rgba(245,244,243,.08);color:#F5F4F3}
1109
+
1110
+ [data-theme="dark"] .qa-run{background:#1C1C1E}
1111
+
1112
+ [data-theme="dark"] .qa-run::after{background:#1C1C1E}
1113
+
1114
+ [data-theme="dark"] .qa-spinner{border-color:#3B3835;border-top-color:#818CF8}
1115
+
1116
+ [data-theme="dark"] .qa-run-pill{background:rgba(245,244,243,.05);border-color:#3B3835}
1117
+
1118
+ [data-theme="dark"] .qa-run-t{color:#78716C}
1119
+
1120
+ [data-theme="dark"] .qa-done{color:#78716C}
1121
+
1122
+ [data-theme="dark"] .qa-done .d{background:#34D399}
1123
+
1124
+ [data-theme="dark"] .qa-done.err{color:#F87171}
1125
+
1126
+ [data-theme="dark"] .qa-done.err .d{background:#F87171}
1127
+
1128
+ [data-theme="dark"] .qa-agent-chip{color:#A8A29E;border-color:#3B3835;background:rgba(245,244,243,.05)}
1129
+
1130
+ [data-theme="dark"] .qa-agent-chip.run{color:#F06953;background:rgba(240,105,83,.12);border-color:rgba(240,105,83,.35)}
1131
+
1132
+ [data-theme="dark"] .qa-agent-chip.ok{color:#34D399;background:rgba(52,211,153,.1);border-color:rgba(52,211,153,.35)}
1133
+
1134
+ [data-theme="dark"] .qa-sub-h{color:#525252}
1135
+
1136
+ [data-theme="dark"] .qa-sub-n{color:#525252}
1137
+
1138
+ [data-theme="dark"] .qa-note{color:#525252}
1139
+
1140
+ .qa-av.qa-av-sim{display:grid;place-items:center;background:linear-gradient(180deg,var(--cinnabar-hi),var(--cinnabar));color:#FFF7F5}
1141
+
1142
+ .qa-av.qa-av-sim svg{width:16px;height:16px;display:block}
1143
+
1144
+ /* bot 头像的**中性兜底**(宿主没给 QA_BOT_AVATAR_SRC 时用,见 03-chat-message.js 的说明):
1145
+ 本壳没有 magic-test 那张应用图标,宁可是简笔机器人头,也比一枚裂图好看。 */
1146
+ .qa-av.qa-av-bot{display:grid;place-items:center;background:var(--subtle);color:var(--muted)}
1147
+ .qa-av.qa-av-bot svg{width:16px;height:16px;display:block}
1148
+
1149
+ .qa-stream{gap:4px}
1150
+
1151
+ .qa-msg{padding:8px 2px}
1152
+
1153
+ .qa-msg.qa-mine{margin-top:14px}
1154
+
1155
+ .qa-ask-tag{font-family:var(--serif);font-size:11px;letter-spacing:.02em;padding:2px 9px}
1156
+
1157
+ .qa-ask-ttl{font-size:10.5px;letter-spacing:.06em}
1158
+
1159
+ .qa-ask-hint,.qa-ask-ans .k{font-size:10.5px;letter-spacing:.08em}
1160
+
1161
+ .qa-ask-q{font-size:13.5px}
1162
+
1163
+ .qa-ask-other button{background:var(--cinnabar);border-color:var(--cinnabar);color:#fff;font-weight:600}
1164
+
1165
+ .qa-ask-other button:hover{background:var(--cinnabar-hi);border-color:var(--cinnabar-hi);color:#fff}
1166
+
1167
+ [data-theme="dark"] .qa-ask-other button{background:var(--cinnabar);border-color:var(--cinnabar);color:#1C1917}
1168
+
1169
+ [data-theme="dark"] .qa-ask-other button:hover{background:var(--cinnabar-hi);border-color:var(--cinnabar-hi);color:#1C1917}
1170
+
1171
+ .qa-tool-name{font-size:10.5px;font-weight:500;color:var(--paper-dim)}
1172
+
1173
+ .qa-tool-args{font-size:11px}
1174
+
1175
+ .qa-tool-args.qa-desc{font-size:11.5px;color:var(--paper-dim)}
1176
+
1177
+ .qa-tool.qa-tool-alone .qa-tool-args.qa-desc{font-size:12.5px;color:var(--paper)}
1178
+
1179
+ .qa-tool-dur{font-size:10.5px;min-width:34px}
1180
+
1181
+ .qa-tool-sec .k{font-size:10px;letter-spacing:.12em}
1182
+
1183
+ .qa-tool-sec pre{font-size:11px}
1184
+
1185
+ .qa-think-toggle,.qa-tools-toggle{font-size:11.5px;letter-spacing:.05em}
1186
+
1187
+ .qa-think-dur,.qa-tools-count,.qa-tools-dur{font-size:10.5px}
1188
+
1189
+ .qa-t.md-body h2{font-size:16.5px}
1190
+
1191
+ .qa-t.md-body h2::before{width:2px;height:14px;opacity:.75}
1192
+
1193
+ .qa-msg.qa-mine .qa-bd,
1194
+ .qa-msg.qa-sim .qa-bd{flex:0 1 auto;max-width:100%;min-width:0}
1195
+
1196
+ /* ⚠️ 2026-10-17 用户要求:「用户的文字应该左对齐」。
1197
+ magic-test 原本把**右侧两类气泡**(我 / 数字分身)的文字统一右对齐(对齐 M3 的右气泡口径),
1198
+ 但中文长句在右对齐下换行很难读 —— 第二行会孤零零甩到右边(用户截图里就是这个)。
1199
+ 现在:**用户自己那条**改左对齐;数字分身仍按工作台那套(要不要一起左改,改下一条即可)。
1200
+ 只动对齐,不动上一行那套宽度与去卡片口径。 */
1201
+ .qa-msg.qa-mine .qa-t{text-align:left}
1202
+
1203
+ .qa-msg.qa-sim .qa-t{text-align:right}
1204
+
1205
+ .qa-msg.qa-mine .qa-t.md-body pre,.qa-msg.qa-sim .qa-t.md-body pre,
1206
+ .qa-msg.qa-mine .qa-t.md-body table,.qa-msg.qa-sim .qa-t.md-body table,
1207
+ .qa-msg.qa-mine .qa-t.md-body blockquote,
1208
+ .qa-msg.qa-sim .qa-t.md-body blockquote{text-align:left}
1209
+
1210
+ .qa-msg.qa-mine .qa-t.md-body ul,.qa-msg.qa-mine .qa-t.md-body ol,
1211
+ .qa-msg.qa-sim .qa-t.md-body ul,.qa-msg.qa-sim .qa-t.md-body ol{list-style-position:inside;margin:4px 20px 4px 0}
1212
+
1213
+ .qa-msg.qa-mine .qa-t.md-body li.task-li,.qa-msg.qa-sim .qa-t.md-body li.task-li{margin-left:0}
1214
+
1215
+ .qa-msg.qa-mine .qa-atts,.qa-msg.qa-sim .qa-atts{justify-content:flex-end}
1216
+
1217
+ .qa-msg.qa-mine:has(.qa-think:not([hidden]), .qa-tools:not([hidden])) .qa-bd,
1218
+ .qa-msg.qa-sim:has(.qa-think:not([hidden]), .qa-tools:not([hidden])) .qa-bd{flex:1 1 auto;max-width:none}
1219
+
1220
+ .qa-msg.qa-mine:has(.qa-think:not([hidden]), .qa-tools:not([hidden])) .qa-bd > .qa-t,
1221
+ .qa-msg.qa-sim:has(.qa-think:not([hidden]), .qa-tools:not([hidden])) .qa-bd > .qa-t{
1222
+ margin-left:auto;width:fit-content;max-width:100%}
1223
+
1224
+ .qa-hist-note{margin:2px 0 10px;padding:9px 12px;border-radius:9px;
1225
+ border:1px solid var(--line);border-left:3px solid var(--paper-mute);
1226
+ background:rgba(28,25,23,.02);font-family:var(--mono);font-size:11px;line-height:1.65;
1227
+ color:var(--paper-dim)}
1228
+
1229
+ .qa-hist-note.wait{border-left-color:var(--indigo);color:var(--paper-mute);
1230
+ animation:qaHistPulse 1.2s ease-in-out infinite}
1231
+
1232
+ .qa-hist-note.lost{border-left-color:var(--cinnabar-hi)}
1233
+
1234
+ /* 读历史时的骨架屏(2026-10-20):点 / 扫光条 / 占位行,全部只动 transform·opacity。 */
1235
+ .qa-hist-note.qa-hist-loading{animation:none;padding:10px 12px 11px;overflow:hidden}
1236
+
1237
+ .qa-hist-head{display:flex;align-items:center;gap:8px}
1238
+
1239
+ .qa-hist-dots{display:inline-flex;align-items:center;gap:3px;flex:none}
1240
+
1241
+ .qa-hist-dots i{width:5px;height:5px;border-radius:50%;background:var(--indigo);opacity:.3;
1242
+ animation:qaHistDot 1s ease-in-out infinite}
1243
+
1244
+ .qa-hist-dots i:nth-child(2){animation-delay:.15s}
1245
+
1246
+ .qa-hist-dots i:nth-child(3){animation-delay:.3s}
1247
+
1248
+ .qa-hist-bar{position:relative;height:1px;margin:9px 0;background:var(--line);overflow:hidden}
1249
+
1250
+ .qa-hist-bar::after{content:"";position:absolute;inset:0;transform:translateX(-100%);
1251
+ background:linear-gradient(90deg,transparent,var(--indigo),transparent);
1252
+ animation:qaHistSweep 1.6s ease-in-out infinite}
1253
+
1254
+ .qa-hist-lines{display:flex;flex-direction:column;gap:6px}
1255
+
1256
+ .qa-hist-lines span{position:relative;display:block;height:8px;border-radius:4px;overflow:hidden;
1257
+ background:rgba(28,25,23,.06)}
1258
+
1259
+ .qa-hist-lines span:nth-child(1){width:72%}
1260
+
1261
+ .qa-hist-lines span:nth-child(2){width:90%}
1262
+
1263
+ .qa-hist-lines span:nth-child(3){width:54%}
1264
+
1265
+ .qa-hist-lines span::after{content:"";position:absolute;inset:0;transform:translateX(-100%);
1266
+ background:linear-gradient(90deg,transparent,rgba(255,255,255,.75),transparent);
1267
+ animation:qaHistShimmer 1.8s ease-in-out infinite}
1268
+
1269
+ .qa-hist-lines span:nth-child(2)::after{animation-delay:.12s}
1270
+
1271
+ .qa-hist-lines span:nth-child(3)::after{animation-delay:.24s}
1272
+
1273
+ @keyframes qaHistDot{0%,100%{transform:translateY(0);opacity:.28}40%{transform:translateY(-3px);opacity:1}}
1274
+ @keyframes qaHistSweep{0%{transform:translateX(-100%)}60%,100%{transform:translateX(100%)}}
1275
+ @keyframes qaHistShimmer{0%{transform:translateX(-100%)}55%,100%{transform:translateX(100%)}}
1276
+
1277
+ [data-theme="dark"] .qa-hist-note{background:rgba(255,255,255,.04)}
1278
+
1279
+ [data-theme="dark"] .qa-hist-note.wait{color:#525252}
1280
+
1281
+ [data-theme="dark"] .qa-hist-note.lost{border-left-color:#F87171}
1282
+
1283
+ [data-theme="dark"] .qa-hist-lines span{background:rgba(255,255,255,.09)}
1284
+
1285
+ [data-theme="dark"] .qa-hist-lines span::after{
1286
+ background:linear-gradient(90deg,transparent,rgba(255,255,255,.16),transparent)}
1287
+
1288
+ @media (prefers-reduced-motion:reduce){
1289
+ .qa-hist-dots i,.qa-hist-bar::after,.qa-hist-lines span::after{animation:none}
1290
+ .qa-hist-dots i{opacity:.7}
1291
+ .qa-hist-bar::after{transform:none;opacity:.55}
1292
+ }
1293
+
1294
+ .qa-hist-step{margin:3px 0;border:1px solid var(--line);border-radius:10px;
1295
+ background:#FCFBF9;overflow:hidden;flex:none}
1296
+
1297
+ .qa-hist-step summary{display:flex;align-items:center;gap:8px;padding:5px 10px;
1298
+ cursor:pointer;user-select:none;list-style:none;font-size:11.5px;color:var(--paper-mute)}
1299
+
1300
+ .qa-hist-step summary::-webkit-details-marker{display:none}
1301
+
1302
+ .qa-hist-step summary::after{content:"›";flex:none;margin-left:auto;
1303
+ font-family:var(--mono);font-size:12px;color:var(--paper-mute);opacity:.7;
1304
+ transition:transform .18s}
1305
+
1306
+ .qa-hist-step[open] summary::after{transform:rotate(90deg)}
1307
+
1308
+ .qa-hist-step summary:hover{background:rgba(28,25,23,.03)}
1309
+
1310
+ .qa-hist-step-tag{flex:none;font-family:var(--mono);font-size:9px;letter-spacing:.14em;
1311
+ text-transform:uppercase;color:#fff;border-radius:4px;padding:1.5px 5px;
1312
+ background:var(--paper-mute)}
1313
+
1314
+ .qa-hist-step--think{border:none;border-left:2px solid var(--line);border-radius:0;
1315
+ background:transparent}
1316
+
1317
+ .qa-hist-step--think summary{padding:3px 0 3px 10px;color:var(--paper-dim)}
1318
+
1319
+ .qa-hist-step--think .qa-hist-step-tag{background:var(--paper-mute)}
1320
+
1321
+ .qa-hist-step--think .qa-hist-step-body{padding:4px 0 6px 10px;color:var(--paper-dim)}
1322
+
1323
+ .qa-hist-step--tool .qa-hist-step-tag{background:var(--indigo)}
1324
+
1325
+ .qa-hist-step--tool.is-err{border-left:2px solid var(--cinnabar-hi)}
1326
+
1327
+ .qa-hist-step--tool.is-err .qa-hist-step-tag{background:var(--cinnabar-hi)}
1328
+
1329
+ .qa-hist-step-hint{flex:1;min-width:0;font-family:var(--mono);font-size:10px;
1330
+ color:var(--paper-mute);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
1331
+
1332
+ .qa-hist-step-body{padding:8px 12px 10px;font-size:11.5px;line-height:1.7;
1333
+ color:#57534E;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere}
1334
+
1335
+ .qa-hist-step-k{display:block;padding:7px 10px 0;font-family:var(--mono);font-size:9px;
1336
+ color:var(--paper-mute);letter-spacing:.14em;text-transform:uppercase}
1337
+
1338
+ .qa-hist-step--tool.is-err .qa-hist-step-k{color:var(--cinnabar-hi)}
1339
+
1340
+ .qa-hist-step-pre{margin:4px 10px 10px;padding:6px 9px;border-radius:6px;
1341
+ background:#F5F4F3;font-family:var(--mono);font-size:10.5px;line-height:1.6;
1342
+ color:#57534E;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere}
1343
+
1344
+ [data-theme="dark"] .qa-hist-step{border-color:#3B3835;background:rgba(245,244,243,.02)}
1345
+
1346
+ [data-theme="dark"] .qa-hist-step summary:hover{background:rgba(245,244,243,.05)}
1347
+
1348
+ [data-theme="dark"] .qa-hist-step summary::after{color:#A8A29E}
1349
+
1350
+ [data-theme="dark"] .qa-hist-step--think{border-left-color:#3B3835}
1351
+
1352
+ [data-theme="dark"] .qa-hist-step-body{color:#D6D3D1}
1353
+
1354
+ [data-theme="dark"] .qa-hist-step-pre{background:#0F0F10;color:#D6D3D1}
1355
+
1356
+ .qa-msg:not(.qa-mine):not(.qa-sim){flex-direction:column;gap:6px;align-items:stretch}
1357
+
1358
+ .qa-msg:not(.qa-mine):not(.qa-sim) > .qa-bd{flex:0 0 auto;width:100%}
1359
+
1360
+ .qa-msg:not(.qa-mine):not(.qa-sim) .qa-ico .qa-who{
1361
+ position:absolute;left:calc(100% + 8px);top:50%;transform:translateY(-50%);
1362
+ font-family:var(--mono);font-size:12.5px;line-height:1;letter-spacing:.02em;
1363
+ color:var(--paper-mute);white-space:nowrap;user-select:none;pointer-events:none}
1364
+
1365
+ .qa-cf{min-width:0;border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;background:#FFF}
1366
+
1367
+ .qa-cf-flush{border:0;border-radius:0;background:transparent}
1368
+
1369
+ .qa-cf-hd{display:flex;align-items:center;justify-content:space-between;gap:8px;height:24px;
1370
+ padding:0 8px;border-bottom:1px solid var(--line);background:rgba(28,25,23,.028)}
1371
+
1372
+ .qa-cf-lb{min-width:0;font-family:var(--mono);font-size:9px;letter-spacing:.13em;text-transform:uppercase;
1373
+ color:var(--paper-mute);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
1374
+
1375
+ .qa-cf-hd-r{display:flex;align-items:center;gap:6px;flex:none}
1376
+
1377
+ .qa-cf-act{font-family:var(--mono);font-size:9px;color:var(--paper-mute)}
1378
+
1379
+ .qa-cf-bd pre{margin:0;padding:6px 9px;font-family:var(--mono);font-size:10.5px;line-height:1.62;
1380
+ color:var(--paper-dim);white-space:pre;overflow:auto;max-height:280px;background:transparent}
1381
+
1382
+ .qa-cf-copy{width:18px;height:18px;flex:none;display:grid;place-items:center;padding:0;border:0;
1383
+ border-radius:var(--r-s);background:transparent;color:var(--paper-mute);cursor:pointer;
1384
+ transition:background .15s,color .15s}
1385
+
1386
+ .qa-cf-copy:hover{background:rgba(28,25,23,.07);color:var(--paper)}
1387
+
1388
+ .qa-cf-copy svg{width:11px;height:11px;display:block;stroke:currentColor;fill:none;
1389
+ stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
1390
+
1391
+ .qa-cf-copy .i-ok{display:none}
1392
+
1393
+ .qa-cf-copy.copied .i-copy{display:none}
1394
+
1395
+ .qa-cf-copy.copied .i-ok{display:block;stroke:var(--jade)}
1396
+
1397
+ .qa-st{display:inline-flex;align-items:center;height:15px;padding:0 5px;border-radius:var(--r-xs);flex:none;
1398
+ font-family:var(--mono);font-size:9px;letter-spacing:.06em;white-space:nowrap;
1399
+ border:1px solid var(--line);color:var(--paper-mute);background:rgba(28,25,23,.035)}
1400
+
1401
+ .qa-st.ok{color:var(--jade);border-color:rgba(13,138,106,.4);background:rgba(13,138,106,.07)}
1402
+
1403
+ .qa-st.run{color:var(--amber);border-color:rgba(183,121,31,.42);background:rgba(183,121,31,.08)}
1404
+
1405
+ .qa-st.err{color:var(--cinnabar-hi);border-color:rgba(214,64,42,.38);background:rgba(214,64,42,.07)}
1406
+
1407
+ .qa-mk{margin:5px 0 2px;min-width:0}
1408
+
1409
+ .qa-mk-row{display:flex;align-items:center;gap:7px;min-width:0;min-height:20px;padding:1px 2px;
1410
+ border-radius:var(--r-s)}
1411
+
1412
+ .qa-mk-row[data-tog="1"]{cursor:pointer}
1413
+
1414
+ .qa-mk-row[data-tog="1"]:hover{background:rgba(28,25,23,.04)}
1415
+
1416
+ .qa-mk-chev,.qa-mk-gap{width:11px;height:11px;flex:none;display:grid;place-items:center;
1417
+ color:var(--paper-mute)}
1418
+
1419
+ .qa-mk-chev svg{width:11px;height:11px;display:block;stroke:currentColor;fill:none;
1420
+ stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
1421
+
1422
+ .qa-mk-chev{transform:rotate(-90deg);transition:transform .18s}
1423
+
1424
+ .qa-mk.open .qa-mk-chev{transform:rotate(0)}
1425
+
1426
+ .qa-mk-ico{width:13px;height:13px;flex:none;display:grid;place-items:center;color:var(--paper-mute)}
1427
+
1428
+ .qa-mk-ico svg{width:12px;height:12px;display:block;stroke:currentColor;fill:none;
1429
+ stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
1430
+
1431
+ .qa-mk-tt{flex:1;min-width:0;font-family:var(--mono);font-size:10.5px;color:var(--paper-dim);
1432
+ white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
1433
+
1434
+ .qa-mk.err .qa-mk-tt,.qa-mk.err .qa-mk-ico{color:var(--cinnabar-hi)}
1435
+
1436
+ .qa-mk-bd{display:none;padding:5px 0 3px 20px}
1437
+
1438
+ .qa-mk.open .qa-mk-bd{display:block}
1439
+
1440
+ .qa-sep{display:flex;align-items:center;gap:10px;margin:10px 0 6px}
1441
+
1442
+ .qa-sep::before,.qa-sep::after{content:"";flex:1;height:1px;background:var(--line)}
1443
+
1444
+ .qa-sep-t{flex:none;font-family:var(--mono);font-size:9.5px;letter-spacing:.12em;color:var(--paper-mute)}
1445
+
1446
+ .qa-diff{padding:6px 0;overflow-x:auto}
1447
+
1448
+ .qa-diff-row{display:grid;gap:5px;align-items:baseline;padding:0 8px;
1449
+ grid-template-columns:.62rem 1.9rem 1px minmax(0,1fr);
1450
+ font-family:var(--mono);font-size:10px;line-height:1.72;color:var(--paper-dim)}
1451
+
1452
+ .qa-diff-nono .qa-diff-row{grid-template-columns:.62rem 1px minmax(0,1fr)}
1453
+
1454
+ .qa-diff-nono .qa-diff-row .n{display:none}
1455
+
1456
+ .qa-diff-row .s{text-align:center;font-weight:700;user-select:none}
1457
+
1458
+ .qa-diff-row .n{text-align:right;color:var(--paper-mute);user-select:none;
1459
+ font-variant-numeric:tabular-nums}
1460
+
1461
+ .qa-diff-row .b{background:var(--line);align-self:stretch}
1462
+
1463
+ .qa-diff-row .t{min-width:0;white-space:pre}
1464
+
1465
+ .qa-diff-row.add{background:rgba(13,138,106,.08);color:#0A6A51}
1466
+
1467
+ .qa-diff-row.add .s{color:#0A6A51}
1468
+
1469
+ .qa-diff-row.del{background:rgba(214,64,42,.07);color:#9E3120}
1470
+
1471
+ .qa-diff-row.del .s{color:#9E3120}
1472
+
1473
+ .qa-diff-row.hunk{background:rgba(79,70,229,.07);color:#4338CA}
1474
+
1475
+ .qa-diff-row.file{background:rgba(28,25,23,.035);color:var(--paper-mute)}
1476
+
1477
+ .qa-fc{min-width:0}
1478
+
1479
+ .qa-fc-hd{display:flex;align-items:center;gap:7px;height:26px;padding:0 8px;
1480
+ border-bottom:1px solid var(--line);background:rgba(28,25,23,.028)}
1481
+
1482
+ .qa-fc-ico{width:13px;height:13px;flex:none;display:grid;place-items:center;color:var(--paper-mute)}
1483
+
1484
+ .qa-fc-ico svg{width:12px;height:12px;display:block;stroke:currentColor;fill:none;
1485
+ stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
1486
+
1487
+ .qa-fc-tag{flex:none;font-family:var(--mono);font-size:9px;letter-spacing:.06em;padding:1px 5px;
1488
+ border-radius:var(--r-xs);border:1px solid var(--line);color:var(--paper-mute)}
1489
+
1490
+ .qa-fc-tag.add{color:var(--jade);border-color:rgba(13,138,106,.4);background:rgba(13,138,106,.07)}
1491
+
1492
+ .qa-fc-tag.mod{color:var(--amber);border-color:rgba(183,121,31,.42);background:rgba(183,121,31,.08)}
1493
+
1494
+ .qa-fc-tag.del{color:var(--cinnabar-hi);border-color:rgba(214,64,42,.38);background:rgba(214,64,42,.07)}
1495
+
1496
+ .qa-fc-p{flex:1;min-width:0;font-family:var(--mono);font-size:10px;color:var(--paper-dim);
1497
+ white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
1498
+
1499
+ .qa-tool-bd{display:none;margin:0 10px;padding:0;border:1px solid var(--line);border-radius:var(--r-md);
1500
+ overflow:hidden;background:#FFF}
1501
+
1502
+ .qa-tool.open .qa-tool-bd{display:block;margin-bottom:9px}
1503
+
1504
+ .qa-tool-bd > * + *{border-top:1px solid var(--line)}
1505
+
1506
+ .qa-tool-sec{padding:0}
1507
+
1508
+ .qa-tool-bd .qa-tool-sec + .qa-tool-sec{margin-top:0}
1509
+
1510
+ .qa-sec-hd{display:flex;align-items:center;justify-content:space-between;gap:8px;height:24px;
1511
+ padding:0 8px;background:rgba(28,25,23,.028)}
1512
+
1513
+ .qa-tool-sec pre{margin:0;padding:6px 9px;font-family:var(--mono);font-size:10.5px;line-height:1.62;
1514
+ color:var(--paper-dim);white-space:pre;overflow:auto;max-height:280px;background:transparent}
1515
+
1516
+ .qa-tool-sec .qa-arts{margin:0;padding:6px 9px}
1517
+
1518
+ .qa-tool.qa-tool-bare{border-color:transparent;background:transparent}
1519
+
1520
+ .qa-tool.qa-tool-bare .qa-tool-head{cursor:default}
1521
+
1522
+ .qa-tool.qa-tool-bare .qa-tool-head .chev{display:none}
1523
+
1524
+ [data-theme="dark"] .qa-cf,[data-theme="dark"] .qa-tool-bd{
1525
+ background:rgba(245,244,243,.02);border-color:#3B3835}
1526
+
1527
+ [data-theme="dark"] .qa-cf-hd,[data-theme="dark"] .qa-sec-hd,[data-theme="dark"] .qa-fc-hd{
1528
+ background:rgba(245,244,243,.045);border-color:#3B3835}
1529
+
1530
+ [data-theme="dark"] .qa-cf-lb,[data-theme="dark"] .qa-cf-act,[data-theme="dark"] .qa-tool-sec .k{
1531
+ color:#A8A29E}
1532
+
1533
+ [data-theme="dark"] .qa-cf-bd pre,[data-theme="dark"] .qa-tool-sec pre{
1534
+ color:#D6D3D1;background:transparent}
1535
+
1536
+ [data-theme="dark"] .qa-tool-bd > * + *,[data-theme="dark"] .qa-fc-hd{border-color:#3B3835}
1537
+
1538
+ [data-theme="dark"] .qa-cf-copy:hover{background:rgba(245,244,243,.09);color:#F5F4F3}
1539
+
1540
+ [data-theme="dark"] .qa-mk-row[data-tog="1"]:hover{background:rgba(245,244,243,.05)}
1541
+
1542
+ [data-theme="dark"] .qa-st{background:rgba(245,244,243,.05);border-color:#3B3835}
1543
+
1544
+ [data-theme="dark"] .qa-diff-row .b{background:#3B3835}
1545
+
1546
+ [data-theme="dark"] .qa-diff-row.add{background:rgba(52,211,153,.12);color:#6EE7B7}
1547
+
1548
+ [data-theme="dark"] .qa-diff-row.add .s{color:#6EE7B7}
1549
+
1550
+ [data-theme="dark"] .qa-diff-row.del{background:rgba(240,105,83,.12);color:#FCA5A5}
1551
+
1552
+ [data-theme="dark"] .qa-diff-row.del .s{color:#FCA5A5}
1553
+
1554
+ [data-theme="dark"] .qa-diff-row.hunk{background:rgba(129,140,248,.12);color:#A5B4FC}
1555
+
1556
+ [data-theme="dark"] .qa-diff-row.file{background:rgba(245,244,243,.045);color:#A8A29E}
1557
+
1558
+ .qa-msg.qa-mine .qa-fold-btn{background:transparent}
1559
+
1560
+ .qa-msg.qa-mine .qa-fold-btn:hover{background:rgba(28,25,23,.05)}
1561
+
1562
+ [data-theme="dark"] .qa-msg.qa-mine .qa-fold-btn:hover{background:rgba(245,244,243,.07)}
1563
+
1564
+ .qa-acts{display:flex;align-items:center;justify-content:flex-start;gap:2px;min-width:0}
1565
+
1566
+ .qa-acts[hidden]{display:none}
1567
+
1568
+ .qa-msg.qa-mine,.qa-msg.qa-sim{flex-wrap:wrap}
1569
+
1570
+ .qa-msg.qa-mine > .qa-bd,.qa-msg.qa-sim > .qa-bd{max-width:calc(100% - 34px)}
1571
+
1572
+ .qa-msg.qa-mine > .qa-acts,.qa-msg.qa-sim > .qa-acts{flex:0 0 100%;justify-content:flex-end}
1573
+
1574
+ .qa-act{width:22px;height:22px;flex:none;display:grid;place-items:center;padding:0;border:0;
1575
+ border-radius:var(--r-s);background:transparent;color:var(--paper-mute);cursor:pointer;
1576
+ transition:background .15s,color .15s}
1577
+
1578
+ .qa-act:hover{background:rgba(28,25,23,.07);color:var(--paper)}
1579
+
1580
+ .qa-act svg{width:13px;height:13px;display:block;stroke:currentColor;fill:none;
1581
+ stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
1582
+
1583
+ .qa-act-copy .i-ok{display:none}
1584
+
1585
+ .qa-act-copy.copied .i-copy{display:none}
1586
+
1587
+ .qa-act-copy.copied .i-ok{display:block;stroke:var(--jade)}
1588
+
1589
+ [data-theme="dark"] .qa-act:hover{background:rgba(245,244,243,.09);color:#F5F4F3}
1590
+
1591
+ /* ============================================================================
1592
+ * 令牌桥:magic-test 的调色板名字 → 各端宿主已有的令牌(**只用不定义**)
1593
+ *
1594
+ * ⚠️ 逐条按「原义」对,不按名字像不像:
1595
+ * magic-test 的 --paper 是**文字色**(#1C1917 近黑),不是纸白 —— 别映成 --canvas。
1596
+ * 同理 --ink 在那边是**面板底**(#F7F7F8),不是文字色 —— 别映成 --ink。
1597
+ *
1598
+ * :where() 的优先级是 0 —— 宿主页里任何一条 :root / [data-theme] 定义都能覆盖它。
1599
+ * 值是「兜底」:宿主给了同名令牌(--ink / --muted / …)就以宿主为准。
1600
+ * ========================================================================== */
1601
+ :where(:root) {
1602
+ /* 文字三级(magic-test: paper / paper-dim / paper-mute) */
1603
+ --paper: var(--ink);
1604
+ --paper-dim: var(--muted);
1605
+ --paper-mute: var(--faint);
1606
+
1607
+ /* 描边与底色(那边 --ink* 是**面板底**,方向与这边相反,别映错) */
1608
+ --line: var(--border);
1609
+ --bg-page: var(--canvas);
1610
+ --ink-2: var(--subtle);
1611
+ --ink-3: var(--raised);
1612
+
1613
+ /* 语义色 */
1614
+ --amber: var(--warning); /* 警告 */
1615
+ --cinnabar: var(--error-text); /* 朱砂(错误 / 主强调) */
1616
+ --cinnabar-hi: var(--error-icon); /* 深朱砂 */
1617
+ --jade: var(--success); /* 玉(成功) */
1618
+ --indigo: var(--transitioning); /* 靛(进行中 / 切换中) */
1619
+
1620
+ /* 晕色(浮层/头像底下那层极淡的底) */
1621
+ --halo-c-base: var(--subtle);
1622
+ --halo-c-red: var(--error-surface);
1623
+ --halo-indigo: var(--activity);
1624
+ /* 有些规则自己会设 --h(=.qa-ico 之类的晕色),没设时给个兜底 */
1625
+ --h: var(--subtle);
1626
+
1627
+ /* 圆角刻度:那边是 4 / 6 / 8 / 10 / 16(**别**映到这边的 --r / --r-card,档距不同) */
1628
+ --r-xs: 4px; --r-s: 6px; --r-md: 8px; --r-m: 10px; --r-l: 16px;
1629
+
1630
+ /* 字体:那边 serif/display 是工作台的标题字体,本壳没有 → 统一落到 --font */
1631
+ --serif: var(--font);
1632
+ --display: var(--font);
1633
+
1634
+ /* 设置窗口那三档蓝(magic-test 专用;有 .qa-* 规则引用就给它落点) */
1635
+ --blue-50: var(--activity);
1636
+ --blue-600: var(--accent);
1637
+ --blue-700: var(--accent);
1638
+ }