@co0ontty/wand 1.30.3 → 1.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3906,12 +3906,16 @@
3906
3906
  }
3907
3907
 
3908
3908
  /* ===== 聊天消息基础样式 ===== */
3909
+ /* 消息整体宽度跟随屏幕(容器)宽度——长文本自然换行;
3910
+ 内部卡片(tool-use-card / inline-tool / terminal-tool / diff-tool / tool-group)
3911
+ 通过 --chat-card-max-width 单独约束,避免在宽屏下被拉成横向大条。 */
3909
3912
  .chat-message {
3910
3913
  display: flex;
3911
3914
  flex-direction: column;
3912
- max-width: 85%;
3915
+ max-width: 100%;
3913
3916
  margin: 4px 0;
3914
3917
  transition: opacity 0.2s ease, transform 0.2s var(--ease-out-expo);
3918
+ --chat-card-max-width: 720px;
3915
3919
  }
3916
3920
 
3917
3921
  .chat-message:hover {
@@ -3936,12 +3940,13 @@
3936
3940
 
3937
3941
  .chat-message.assistant {
3938
3942
  align-self: flex-start;
3939
- max-width: 95%;
3943
+ max-width: 100%;
3944
+ width: 100%;
3940
3945
  }
3941
3946
 
3942
3947
  .chat-message.system-info {
3943
3948
  align-self: center;
3944
- max-width: 95%;
3949
+ max-width: 100%;
3945
3950
  width: 100%;
3946
3951
  margin: 10px 0;
3947
3952
  animation: messageFloat 3s ease-in-out infinite;
@@ -4080,8 +4085,10 @@
4080
4085
  box-shadow: 0 4px 16px rgba(197, 101, 61, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.15);
4081
4086
  }
4082
4087
 
4088
+ /* 用户消息默认更紧凑(贴右气泡),上限放宽到 100% 让长 prompt 不再水平
4089
+ 挤压;实际宽度由气泡内容 + word-break 决定。 */
4083
4090
  .chat-message.user {
4084
- max-width: 85%;
4091
+ max-width: 100%;
4085
4092
  }
4086
4093
 
4087
4094
  /* 助手消息气泡 */
@@ -4129,7 +4136,7 @@
4129
4136
  display: flex;
4130
4137
  flex-direction: column;
4131
4138
  gap: 6px;
4132
- max-width: 95%;
4139
+ max-width: 100%;
4133
4140
  }
4134
4141
  /* user turn 默认 align-self: flex-end(右对齐);多段渲染时强制
4135
4142
  容器内左对齐,否则 subagent 段会被推到右边,border-left 色条断裂。 */
@@ -4232,7 +4239,10 @@
4232
4239
  background: rgba(0, 0, 0, 0.04);
4233
4240
  padding: 10px 12px;
4234
4241
  border-radius: 6px;
4235
- overflow-x: auto;
4242
+ overflow-x: hidden;
4243
+ white-space: pre-wrap;
4244
+ word-break: break-word;
4245
+ overflow-wrap: anywhere;
4236
4246
  margin: 8px 0;
4237
4247
  }
4238
4248
 
@@ -4345,7 +4355,7 @@
4345
4355
  /* Thinking Card (Deep Thought) */
4346
4356
  .chat-message.thinking {
4347
4357
  align-self: flex-start;
4348
- max-width: 85%;
4358
+ max-width: 100%;
4349
4359
  margin: 4px 0;
4350
4360
  }
4351
4361
 
@@ -4384,7 +4394,7 @@
4384
4394
  /* Prompt Suggestion Card (Pulsing) */
4385
4395
  .chat-message.prompt {
4386
4396
  align-self: center;
4387
- max-width: 85%;
4397
+ max-width: 100%;
4388
4398
  margin: 4px 0;
4389
4399
  }
4390
4400
 
@@ -4467,6 +4477,7 @@
4467
4477
  border-radius: var(--radius-sm);
4468
4478
  overflow: hidden;
4469
4479
  width: 100%;
4480
+ max-width: var(--chat-card-max-width, 720px);
4470
4481
  box-sizing: border-box;
4471
4482
  background: linear-gradient(180deg, rgba(255, 251, 245, 0.88) 0%, rgba(255, 246, 234, 0.72) 100%);
4472
4483
  box-shadow: 0 1px 2px rgba(89, 58, 32, 0.04);
@@ -4874,6 +4885,9 @@
4874
4885
  align-items: baseline;
4875
4886
  gap: 5px;
4876
4887
  margin: 2px 0;
4888
+ width: 100%;
4889
+ max-width: var(--chat-card-max-width, 720px);
4890
+ box-sizing: border-box;
4877
4891
  padding: 3px 8px;
4878
4892
  border-radius: 6px;
4879
4893
  background: rgba(138, 108, 178, 0.04);
@@ -4981,6 +4995,9 @@
4981
4995
  ────────────────────────────────────────────────────────────── */
4982
4996
  .tool-group {
4983
4997
  margin: 4px 0;
4998
+ width: 100%;
4999
+ max-width: var(--chat-card-max-width, 720px);
5000
+ box-sizing: border-box;
4984
5001
  border-radius: var(--radius-sm);
4985
5002
  border: 1px solid var(--border-subtle);
4986
5003
  background: linear-gradient(180deg, rgba(255, 251, 245, 0.85) 0%, rgba(255, 248, 238, 0.7) 100%);
@@ -5106,10 +5123,17 @@
5106
5123
  display: flex;
5107
5124
  flex-direction: column;
5108
5125
  margin: 1px 0;
5126
+ width: 100%;
5127
+ max-width: var(--chat-card-max-width, 720px);
5128
+ box-sizing: border-box;
5109
5129
  border-radius: var(--radius-xs);
5110
5130
  cursor: pointer;
5111
5131
  transition: background 0.16s ease;
5112
5132
  }
5133
+ /* 嵌套在 tool-group-body 里的 inline-tool 撑满父容器即可(父已经限宽) */
5134
+ .tool-group-body > .inline-tool {
5135
+ max-width: 100%;
5136
+ }
5113
5137
  .inline-tool-row {
5114
5138
  display: flex;
5115
5139
  align-items: center;
@@ -5293,6 +5317,9 @@
5293
5317
  ────────────────────────────────────────────────────────────── */
5294
5318
  .inline-terminal {
5295
5319
  margin: 4px 0;
5320
+ width: 100%;
5321
+ max-width: var(--chat-card-max-width, 720px);
5322
+ box-sizing: border-box;
5296
5323
  border: 1px solid rgba(15, 12, 9, 0.6);
5297
5324
  border-radius: var(--radius-sm);
5298
5325
  background: #1f1b17;
@@ -5453,6 +5480,9 @@
5453
5480
  ────────────────────────────────────────────────────────────── */
5454
5481
  .inline-diff {
5455
5482
  margin: 4px 0;
5483
+ width: 100%;
5484
+ max-width: var(--chat-card-max-width, 720px);
5485
+ box-sizing: border-box;
5456
5486
  border: 1px solid var(--border-subtle);
5457
5487
  border-radius: var(--radius-sm);
5458
5488
  overflow: hidden;
@@ -5678,7 +5708,12 @@
5678
5708
 
5679
5709
  /* Markdown Content */
5680
5710
  .markdown-content { color: inherit; white-space: normal; overflow-x: hidden; }
5681
- .markdown-content .code-block pre { overflow-x: auto; }
5711
+ .markdown-content .code-block pre {
5712
+ overflow-x: hidden;
5713
+ white-space: pre-wrap;
5714
+ word-break: break-word;
5715
+ overflow-wrap: anywhere;
5716
+ }
5682
5717
  .markdown-content p { margin: 0 0 8px 0; }
5683
5718
  .markdown-content p:last-child { margin-bottom: 0; }
5684
5719
  .markdown-content strong { font-weight: 600; }
@@ -5790,7 +5825,10 @@
5790
5825
  .markdown-content pre {
5791
5826
  margin: 0;
5792
5827
  padding: 12px;
5793
- overflow-x: auto;
5828
+ overflow-x: hidden;
5829
+ white-space: pre-wrap;
5830
+ word-break: break-word;
5831
+ overflow-wrap: anywhere;
5794
5832
  }
5795
5833
  .markdown-content pre code {
5796
5834
  font-family: var(--font-mono);
@@ -5842,14 +5880,42 @@
5842
5880
  align-items: center;
5843
5881
  justify-content: space-between;
5844
5882
  padding: 2px 4px 3px 6px;
5845
- gap: 4px;
5883
+ gap: 3px;
5846
5884
  }
5847
5885
  .input-composer-left {
5848
5886
  display: flex;
5849
5887
  align-items: center;
5850
- gap: 4px;
5888
+ gap: 3px;
5851
5889
  flex-wrap: nowrap;
5852
5890
  flex-shrink: 0;
5891
+ min-width: 0;
5892
+ }
5893
+ /* 会话设置三件套 (mode / model / thinking) 的容器 —— 用极轻的内描边视觉地
5894
+ 把三颗"新会话/会话级配置 pill"框成一个 segmented control,与右侧
5895
+ 开关型 chip (自动批准 / 终端交互) 在认知上分层。 */
5896
+ .composer-pill-group {
5897
+ display: inline-flex;
5898
+ align-items: center;
5899
+ gap: 2px;
5900
+ padding: 1px;
5901
+ border-radius: 11px;
5902
+ background: rgba(197, 101, 61, 0.05);
5903
+ box-shadow: inset 0 0 0 1px rgba(197, 101, 61, 0.08);
5904
+ min-width: 0;
5905
+ }
5906
+ .composer-pill-group .composer-pill {
5907
+ border-color: transparent;
5908
+ background: transparent;
5909
+ }
5910
+ .composer-pill-group .composer-pill:hover {
5911
+ border-color: var(--accent);
5912
+ background-color: rgba(255, 255, 255, 0.75);
5913
+ }
5914
+ .composer-pill-group .composer-pill:focus,
5915
+ .composer-pill-group .composer-pill:focus-visible,
5916
+ .composer-pill-group .composer-pill:focus-within {
5917
+ border-color: var(--accent);
5918
+ background-color: rgba(255, 255, 255, 0.9);
5853
5919
  }
5854
5920
 
5855
5921
  /* Permission actions inline in composer bar */
@@ -5913,28 +5979,16 @@
5913
5979
  to { opacity: 1; transform: translateX(0); }
5914
5980
  }
5915
5981
 
5916
- /* Auto-approve indicator */
5917
- .auto-approve-indicator {
5918
- display: inline-flex;
5919
- align-items: center;
5920
- gap: 2px;
5921
- font-size: 0.65rem;
5922
- color: var(--muted);
5923
- cursor: pointer;
5924
- padding: 1px 4px;
5925
- border-radius: 4px;
5926
- transition: color 0.15s, background 0.15s;
5927
- user-select: none;
5928
- white-space: nowrap;
5929
- }
5930
- .auto-approve-indicator:hover {
5931
- background: rgba(255, 255, 255, 0.06);
5932
- }
5982
+ /* 自动批准 chip —— 套用 .composer-pill .composer-pill-chip 的基础外观,
5983
+ 这里只覆盖 active 态的绿色(语义色)。 */
5933
5984
  .auto-approve-indicator.active {
5934
5985
  color: #22c55e;
5986
+ border-color: rgba(34, 197, 94, 0.5);
5987
+ background: rgba(34, 197, 94, 0.12);
5935
5988
  }
5936
5989
  .auto-approve-indicator.active:hover {
5937
- background: rgba(34, 197, 94, 0.1);
5990
+ background: rgba(34, 197, 94, 0.2);
5991
+ border-color: #22c55e;
5938
5992
  }
5939
5993
 
5940
5994
  /* Approval stats badge */
@@ -5947,24 +6001,27 @@
5947
6001
  display: none;
5948
6002
  }
5949
6003
  .approval-stats-divider {
5950
- width: 1px;
6004
+ /* 同行已经全部用 .composer-pill 的统一 gap (3px) 分隔,再加一条 1px 实线分隔
6005
+ 反而显得拥挤。仅保留极细的 spacer 让 stats badge 与左侧 chip 不黏连。 */
6006
+ width: 0;
5951
6007
  height: 16px;
5952
- background: var(--border);
5953
- margin: 0 4px 0 2px;
6008
+ margin: 0 1px;
5954
6009
  }
5955
6010
  .approval-stats-badge {
5956
6011
  display: inline-flex;
5957
6012
  align-items: center;
5958
6013
  gap: 3px;
5959
- padding: 1px 7px 1px 5px;
6014
+ min-height: 22px;
6015
+ padding: 1px 8px;
5960
6016
  border-radius: 10px;
5961
6017
  background: rgba(34, 197, 94, 0.1);
5962
6018
  color: #22c55e;
5963
- font-size: 0.68rem;
6019
+ font-size: 0.625rem;
5964
6020
  font-weight: 600;
5965
6021
  cursor: default;
5966
6022
  transition: background 0.15s;
5967
- line-height: 1.5;
6023
+ line-height: 1;
6024
+ box-sizing: border-box;
5968
6025
  }
5969
6026
  .approval-stats-badge:hover {
5970
6027
  background: rgba(34, 197, 94, 0.18);
@@ -6045,31 +6102,11 @@
6045
6102
  color: #22c55e;
6046
6103
  }
6047
6104
 
6105
+ /* 终端交互切换按钮 —— 现在套用 .composer-pill .composer-pill-chip 的统一外观,
6106
+ 这里仅保留图标专属的微调(字体大小 / 收紧 padding 让 ⌨ 居中)。 */
6048
6107
  .composer-interactive-toggle {
6049
- display: inline-flex;
6050
- align-items: center;
6051
- justify-content: center;
6052
- width: 22px;
6053
- height: 22px;
6054
- border: 1px solid var(--border-subtle);
6055
- border-radius: 4px;
6056
- background: transparent;
6057
- color: var(--text-muted);
6058
6108
  font-size: 0.75rem;
6059
- cursor: pointer;
6060
- transition: all var(--transition-fast);
6061
- flex-shrink: 0;
6062
- padding: 0;
6063
- }
6064
- .composer-interactive-toggle:hover {
6065
- background: rgba(197, 101, 61, 0.08);
6066
- color: var(--text-secondary);
6067
- border-color: var(--accent);
6068
- }
6069
- .composer-interactive-toggle.active {
6070
- background: rgba(197, 101, 61, 0.12);
6071
- color: var(--accent);
6072
- border-color: var(--accent);
6109
+ padding: 1px 8px;
6073
6110
  }
6074
6111
  .input-composer-right {
6075
6112
  display: flex;
@@ -6079,52 +6116,79 @@
6079
6116
  flex: 1;
6080
6117
  justify-content: flex-end;
6081
6118
  }
6119
+ /* 队列计数器:v1.30.3 是个 0.625rem 的小角标,挤在 input-hint 旁边没人看见。
6120
+ 升级成 dot + label 的 pill,配色和"立即发送"按钮同源,让用户能联想到这套语义。 */
6082
6121
  .queue-counter {
6083
- font-size: 0.625rem;
6122
+ display: inline-flex;
6123
+ align-items: center;
6124
+ gap: 5px;
6125
+ font-size: 0.6875rem;
6084
6126
  color: var(--accent);
6085
- background: var(--accent-muted);
6086
- padding: 1px 6px;
6087
- border-radius: 8px;
6127
+ background: linear-gradient(180deg, rgba(197, 101, 61, 0.18) 0%, rgba(197, 101, 61, 0.10) 100%);
6128
+ padding: 3px 9px;
6129
+ border-radius: 999px;
6088
6130
  white-space: nowrap;
6089
6131
  font-weight: 600;
6132
+ letter-spacing: 0.02em;
6133
+ box-shadow: 0 0 0 1px rgba(197, 101, 61, 0.25) inset;
6090
6134
  animation: queuePulse 1.5s ease-in-out infinite;
6091
6135
  }
6092
6136
  .queue-counter.hidden { display: none; }
6137
+ .queue-counter-dot {
6138
+ width: 6px;
6139
+ height: 6px;
6140
+ border-radius: 50%;
6141
+ background: var(--accent);
6142
+ flex-shrink: 0;
6143
+ animation: queueDotPulse 1.0s ease-in-out infinite;
6144
+ }
6145
+ .queue-counter-text { line-height: 1; }
6093
6146
  @keyframes queuePulse {
6094
6147
  0%, 100% { opacity: 1; }
6095
- 50% { opacity: 0.7; }
6148
+ 50% { opacity: 0.78; }
6149
+ }
6150
+ @keyframes queueDotPulse {
6151
+ 0%, 100% { transform: scale(1); opacity: 1; }
6152
+ 50% { transform: scale(0.7); opacity: 0.55; }
6096
6153
  }
6097
6154
 
6098
- /* Queued message in chat view */
6155
+ /* Queued message in chat view:用户最容易"觉得排队没生效"是因为旧版徽章太小。
6156
+ 把气泡本身做出明显的"半成稿"质感(虚线边框 + 错位阴影),徽章放大到正常字号,
6157
+ 让排队这件事在视觉上和"已发出"清楚拉开。 */
6099
6158
  .chat-message.user.queued {
6100
- opacity: 0.7;
6159
+ opacity: 0.92;
6101
6160
  }
6102
6161
  .chat-message.user.queued .chat-message-bubble,
6103
6162
  .chat-message.user.queued .chat-message-content {
6104
- /* 排队气泡用虚线边框 + 浅浅的阴影,让"未发送"状态有触感 */
6105
- box-shadow: 0 0 0 1px rgba(197, 101, 61, 0.25) inset;
6163
+ box-shadow: 0 0 0 1.5px rgba(197, 101, 61, 0.55) inset,
6164
+ 0 1px 0 rgba(197, 101, 61, 0.10);
6165
+ background: linear-gradient(180deg, rgba(255, 245, 235, 0.85) 0%, rgba(255, 235, 220, 0.65) 100%);
6166
+ border-radius: 14px;
6167
+ position: relative;
6106
6168
  }
6107
6169
  .queued-badge {
6108
6170
  display: inline-flex;
6109
6171
  align-items: center;
6110
- gap: 4px;
6111
- font-size: 0.625rem;
6112
- color: var(--accent);
6113
- background: var(--accent-muted);
6114
- padding: 2px 8px;
6172
+ gap: 5px;
6173
+ font-size: 0.75rem;
6174
+ color: #fff;
6175
+ background: linear-gradient(180deg, var(--accent) 0%, #a8522f 100%);
6176
+ padding: 3px 10px 3px 9px;
6115
6177
  border-radius: 999px;
6116
6178
  font-weight: 600;
6117
6179
  margin-top: 6px;
6118
6180
  letter-spacing: 0.04em;
6181
+ box-shadow: 0 2px 6px rgba(197, 101, 61, 0.30);
6119
6182
  animation: queuePulse 1.5s ease-in-out infinite;
6120
6183
  }
6121
6184
  .queued-badge::before {
6122
6185
  content: '';
6123
- width: 6px;
6124
- height: 6px;
6186
+ width: 7px;
6187
+ height: 7px;
6125
6188
  border-radius: 50%;
6126
- background: var(--accent);
6127
- animation: queuePulse 1.5s ease-in-out infinite;
6189
+ background: #fff;
6190
+ box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.45);
6191
+ animation: queueDotPulse 1.0s ease-in-out infinite;
6128
6192
  }
6129
6193
 
6130
6194
  .input-hint {
@@ -6831,36 +6895,125 @@
6831
6895
  .input-inline-controls {
6832
6896
  }
6833
6897
 
6834
- /* Chat mode select pill */
6835
- .chat-mode-select {
6898
+ /* ========================================================================
6899
+ 输入框统一 pill 系统 —— 模式 / 模型 / 思考 / 自动批准 / 终端交互
6900
+ 全部用同一套尺寸 / 字号 / 边框 / hover / focus 表现,避免视觉混乱。
6901
+ 变体:
6902
+ .composer-pill-select → 原生 <select> 形态(右侧 chevron)
6903
+ .composer-pill-chip → 按钮 / 切换状态的 chip(支持 .active 亮态)
6904
+ 现有 .chat-mode-select / .auto-approve-indicator / .composer-interactive-toggle
6905
+ 仍保留作为特定色彩或最大宽度等微调入口。
6906
+ ====================================================================== */
6907
+ .composer-pill {
6836
6908
  font-family: var(--font-sans);
6837
6909
  font-size: 0.625rem;
6838
6910
  font-weight: 500;
6839
- padding: 1px 16px 1px 6px;
6911
+ line-height: 1;
6912
+ min-height: 22px;
6913
+ padding: 1px 8px;
6840
6914
  border-radius: 10px;
6841
6915
  border: 1px solid var(--border-subtle);
6842
6916
  background: rgba(246, 241, 232, 0.7);
6843
6917
  color: var(--text-secondary);
6844
6918
  cursor: pointer;
6845
6919
  transition: all var(--transition-fast);
6846
- min-height: 22px;
6847
- max-width: 90px;
6920
+ display: inline-flex;
6921
+ align-items: center;
6922
+ justify-content: center;
6923
+ gap: 4px;
6924
+ white-space: nowrap;
6925
+ box-sizing: border-box;
6926
+ user-select: none;
6927
+ }
6928
+ .composer-pill:hover {
6929
+ border-color: var(--accent);
6930
+ background-color: rgba(246, 241, 232, 1);
6931
+ }
6932
+ .composer-pill:focus,
6933
+ .composer-pill:focus-visible {
6934
+ border-color: var(--accent);
6935
+ box-shadow: 0 0 0 2px var(--accent-muted);
6936
+ outline: none;
6937
+ }
6938
+ .composer-pill.disabled,
6939
+ .composer-pill[disabled] {
6940
+ opacity: 0.55;
6941
+ cursor: not-allowed;
6942
+ }
6943
+
6944
+ /* select 变体:保留 chevron 背景图与文本截断 */
6945
+ .composer-pill-select {
6946
+ padding: 1px 16px 1px 6px;
6947
+ max-width: 110px;
6848
6948
  overflow: hidden;
6849
6949
  text-overflow: ellipsis;
6850
- white-space: nowrap;
6851
6950
  appearance: none;
6852
6951
  -webkit-appearance: none;
6853
6952
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5' fill='none'%3E%3Cpath d='M1 1l3 3 3-3' stroke='%239a8e82' stroke-width='1.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
6854
6953
  background-repeat: no-repeat;
6855
6954
  background-position: right 4px center;
6955
+ /* 让 native <select> 在 inline-flex 下表现稳定 */
6956
+ display: inline-block;
6957
+ text-align: left;
6856
6958
  }
6857
- .chat-mode-select:hover {
6858
- border-color: var(--accent);
6859
- background-color: rgba(246, 241, 232, 1);
6959
+
6960
+ /* chip 变体:开关型按钮 / span,无 chevron,可亮态。
6961
+ 字号与 select pill 对齐 (0.625rem),避免同行字号微差。 */
6962
+ .composer-pill-chip {
6963
+ padding: 1px 8px;
6964
+ font-size: 0.625rem;
6860
6965
  }
6861
- .chat-mode-select:focus {
6966
+ .composer-pill-chip.active {
6967
+ background: var(--accent-muted, rgba(197, 101, 61, 0.12));
6968
+ color: var(--accent);
6862
6969
  border-color: var(--accent);
6863
- box-shadow: 0 0 0 2px var(--accent-muted);
6970
+ }
6971
+ .composer-pill-chip.active:hover {
6972
+ background: rgba(197, 101, 61, 0.18);
6973
+ }
6974
+
6975
+ /* 兼容旧类:保留为 alias,仅用于细节微调(如最大宽度) */
6976
+ .chat-mode-select {
6977
+ /* 旧标识,沿用 .composer-pill / .composer-pill-select 的基础风格 */
6978
+ max-width: 78px;
6979
+ }
6980
+ .chat-model-select {
6981
+ max-width: 96px;
6982
+ }
6983
+ .chat-thinking-select {
6984
+ max-width: 86px;
6985
+ }
6986
+
6987
+ /* 思考深度 trigger —— 与 mode / model 同形 pill:相同 border / chevron / 字号。
6988
+ 内部 .chat-thinking-label 显示当前档位,原生 <select> 透明叠层负责交互,
6989
+ 移动端能调起系统滚轮选择,桌面端点击则展开原生菜单。 */
6990
+ .chat-thinking-trigger {
6991
+ position: relative;
6992
+ max-width: 86px;
6993
+ padding-left: 6px;
6994
+ }
6995
+ .chat-thinking-label {
6996
+ overflow: hidden;
6997
+ text-overflow: ellipsis;
6998
+ letter-spacing: 0.01em;
6999
+ }
7000
+ .chat-thinking-hidden-select {
7001
+ position: absolute;
7002
+ inset: 0;
7003
+ width: 100%;
7004
+ height: 100%;
7005
+ margin: 0;
7006
+ padding: 0;
7007
+ border: 0;
7008
+ background: transparent;
7009
+ color: transparent;
7010
+ font: inherit;
7011
+ opacity: 0;
7012
+ cursor: pointer;
7013
+ appearance: none;
7014
+ -webkit-appearance: none;
7015
+ }
7016
+ .chat-thinking-hidden-select:focus {
6864
7017
  outline: none;
6865
7018
  }
6866
7019
 
@@ -6917,25 +7070,66 @@
6917
7070
  }
6918
7071
 
6919
7072
  /* "立即发送":结构化会话流式输出时显示,按下会中断当前回复立即处理新输入。
6920
- 视觉上比 send 弱、比 stop 弱,避免被误点;和 send 之间留一点空气。 */
6921
- .btn-circle-interrupt {
6922
- background: rgba(160, 110, 60, 0.10);
7073
+ v1.30.3 把它做成 28px 圆形 + dashed 边框,结果用户根本注意不到这颗按钮、
7074
+ 误以为"立即发送没效果"。现在升级成 pill(图标 + "立即"文字 + 实色高对比 + 脉动),
7075
+ send 按钮形成"加急/默认"的视觉对位。 */
7076
+ .btn-pill {
7077
+ display: inline-flex;
7078
+ align-items: center;
7079
+ gap: 4px;
7080
+ height: 28px;
7081
+ padding: 0 10px 0 8px;
7082
+ border-radius: 999px;
7083
+ border: none;
7084
+ cursor: pointer;
7085
+ transition: all var(--transition-fast);
7086
+ flex-shrink: 0;
7087
+ font-size: 0.6875rem;
7088
+ font-weight: 600;
7089
+ letter-spacing: 0.02em;
7090
+ white-space: nowrap;
7091
+ }
7092
+ .btn-pill-icon {
7093
+ display: block;
7094
+ flex-shrink: 0;
7095
+ }
7096
+ .btn-pill-label {
7097
+ display: inline;
7098
+ }
7099
+ .btn-pill-interrupt {
7100
+ background: linear-gradient(180deg, rgba(197, 101, 61, 0.18) 0%, rgba(197, 101, 61, 0.10) 100%);
6923
7101
  color: var(--accent);
6924
- margin-right: 2px;
6925
- border: 1px dashed rgba(197, 101, 61, 0.35);
7102
+ margin-right: 4px;
7103
+ box-shadow: 0 0 0 1px rgba(197, 101, 61, 0.30) inset;
7104
+ animation: interruptPulse 1.8s ease-in-out infinite;
6926
7105
  }
6927
- .btn-circle-interrupt:hover {
6928
- background: var(--accent);
6929
- color: white;
6930
- border-style: solid;
6931
- transform: scale(1.08);
7106
+ .btn-pill-interrupt:hover {
7107
+ background: linear-gradient(180deg, var(--accent) 0%, #a8522f 100%);
7108
+ color: #fff;
7109
+ box-shadow: 0 3px 10px rgba(197, 101, 61, 0.35);
7110
+ transform: translateY(-1px);
7111
+ animation: none;
6932
7112
  }
6933
- .btn-circle-interrupt:active {
6934
- transform: scale(0.95);
7113
+ .btn-pill-interrupt:active {
7114
+ transform: translateY(0) scale(0.97);
6935
7115
  }
6936
- .btn-circle-interrupt.hidden {
7116
+ .btn-pill-interrupt.hidden {
6937
7117
  display: none;
6938
7118
  }
7119
+ @keyframes interruptPulse {
7120
+ 0%, 100% { box-shadow: 0 0 0 1px rgba(197, 101, 61, 0.30) inset, 0 0 0 0 rgba(197, 101, 61, 0.0); }
7121
+ 50% { box-shadow: 0 0 0 1px rgba(197, 101, 61, 0.45) inset, 0 0 0 4px rgba(197, 101, 61, 0.12); }
7122
+ }
7123
+ /* 屏宽 < 480 时把"立即"文字藏掉,只剩 » 图标,避免和 send 一起把行挤爆。
7124
+ hover/focus 期间临时回显,让长按移动端用户也能确认按钮含义。 */
7125
+ @media (max-width: 480px) {
7126
+ .btn-pill-interrupt {
7127
+ padding: 0 8px;
7128
+ }
7129
+ .btn-pill-interrupt .btn-pill-label {
7130
+ display: none;
7131
+ }
7132
+ }
6939
7133
 
6940
7134
  /* send 按钮在「排队模式」下退到次要色,让相邻的"立即发送"成为视觉重点。
6941
7135
  不动尺寸 / 圆形,避免 layout shift。 */
@@ -9116,7 +9310,7 @@
9116
9310
  .view-toggle { height: 36px; }
9117
9311
  .view-toggle-btn { padding: 0 12px; font-size: 0.75rem; height: 30px; min-height: 30px; }
9118
9312
  .chat-container { padding: 0 12px 12px; }
9119
- .chat-message { max-width: 90%; }
9313
+ .chat-message { max-width: 100%; }
9120
9314
  .thinking-card { padding: 10px 14px; }
9121
9315
  .thinking-content { font-size: 0.8125rem; }
9122
9316
  .tool-picker { grid-template-columns: 1fr; }
@@ -9176,9 +9370,34 @@
9176
9370
  .floating-sidebar-toggle .hamburger-icon { width: 13px; height: 9px; }
9177
9371
 
9178
9372
  .sidebar { top: 0; }
9179
- .sidebar-header { padding: 10px 12px; min-height: 48px; }
9180
- .sidebar-footer-actions { grid-template-columns: repeat(2, 1fr); }
9181
- .sidebar-footer-actions .btn { min-height: 40px; }
9373
+ .sidebar-header { padding: 10px 12px; min-height: 48px; gap: 8px; }
9374
+ /* 收紧 actions 内按钮间距,给主区(logo/标题/计数)腾空间 */
9375
+ .sidebar-header-actions { gap: 4px; }
9376
+ /* 5 个底栏按钮在 2 列布局下最后一颗会单独占满第三行,看着很挤。
9377
+ 手机端统一切到 4 列、隐藏文字、保留图标,更紧凑也对齐统一。 */
9378
+ .sidebar-footer-actions {
9379
+ grid-template-columns: repeat(4, 1fr);
9380
+ gap: 4px;
9381
+ }
9382
+ .sidebar-footer-actions .btn {
9383
+ min-height: 40px;
9384
+ padding: 6px 4px;
9385
+ }
9386
+ .sidebar-footer-actions .btn span { display: none; }
9387
+ .sidebar-footer-actions .btn svg { width: 18px; height: 18px; }
9388
+
9389
+ /* "更多操作"下拉:默认锚在更多按钮右沿向左展开 150px。手机端:
9390
+ · 加大 min-width 让中文项不会两行;
9391
+ · max-width 限制在可见区,防止极窄手机被裁;
9392
+ · 按钮在侧栏靠右,下拉自然贴侧栏右沿;用 right: 0 原值即可。 */
9393
+ .sidebar-header-overflow {
9394
+ min-width: 180px;
9395
+ max-width: calc(100vw - 24px);
9396
+ }
9397
+ .sidebar-header-overflow .overflow-item {
9398
+ padding: 11px 14px;
9399
+ font-size: 0.875rem;
9400
+ }
9182
9401
 
9183
9402
  /* 移动端终端顶栏 - 紧凑 */
9184
9403
  .terminal-header { padding: 5px 8px; min-height: 32px; }
@@ -9328,11 +9547,27 @@
9328
9547
 
9329
9548
  .input-composer-bar {
9330
9549
  padding: 1px 3px 2px 5px;
9331
- gap: 3px;
9550
+ gap: 2px;
9332
9551
  }
9333
9552
 
9334
- .input-composer-left { gap: 3px; }
9553
+ .input-composer-left { gap: 2px; }
9335
9554
  .input-composer-right { gap: 3px; }
9555
+ /* 移动端窄屏:进一步收紧 group 内边距,让 mode/model/thinking 三件套不占额外 padding */
9556
+ .input-composer-left .composer-pill-group {
9557
+ padding: 0;
9558
+ gap: 1px;
9559
+ background: transparent;
9560
+ box-shadow: none;
9561
+ }
9562
+ /* 移动端 chip 字号微缩,与新 desktop chip 0.625rem 对齐基础上再小一点 */
9563
+ .input-composer-left .composer-pill-chip {
9564
+ font-size: 0.6rem;
9565
+ padding: 1px 6px;
9566
+ }
9567
+ /* 移动端三件套 select 最大宽度同步收紧 */
9568
+ .input-composer-left .chat-mode-select { max-width: 64px; }
9569
+ .input-composer-left .chat-model-select { max-width: 78px; }
9570
+ .input-composer-left .chat-thinking-trigger { max-width: 72px; }
9336
9571
 
9337
9572
  /* 移动端会话信息栏 */
9338
9573
  .input-session-info-bar {
@@ -10116,12 +10351,13 @@
10116
10351
  align-items: center;
10117
10352
  gap: 6px;
10118
10353
  }
10354
+ /* 此处历史遗留的 .chat-mode-select 全局规则会覆盖上面 .composer-pill 的统一字号 / 边框,
10355
+ 已上移到 .composer-pill / .composer-pill-select 体系;这里只保留 outline / cursor 的兜底,
10356
+ 不再设置 font-size / max-width,避免和 6938 行的统一样式打架。 */
10119
10357
  .chat-mode-select {
10120
- font-size: 0.6875rem;
10121
10358
  font-family: inherit;
10122
10359
  cursor: pointer;
10123
10360
  outline: none;
10124
- max-width: 96px;
10125
10361
  }
10126
10362
  .chat-mode-select:focus {
10127
10363
  border-color: var(--accent);