@co0ontty/wand 1.31.0 → 1.31.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3842,14 +3842,18 @@
3842
3842
  }
3843
3843
 
3844
3844
  /* ===== 聊天消息列表 ===== */
3845
+ /* overflow-x: hidden 是兜底——任何子级(pre、table、tool-card)的
3846
+ 横向溢出都不应该冒到聊天容器,由它们各自的内部滚动负责。 */
3845
3847
  .chat-messages {
3846
3848
  flex: 1;
3847
3849
  overflow-y: auto;
3850
+ overflow-x: hidden;
3848
3851
  display: flex;
3849
3852
  flex-direction: column-reverse;
3850
3853
  gap: 16px;
3851
3854
  padding: 20px 4px 12px;
3852
3855
  min-height: 0;
3856
+ min-width: 0;
3853
3857
  scrollbar-gutter: stable;
3854
3858
  }
3855
3859
 
@@ -3913,6 +3917,7 @@
3913
3917
  display: flex;
3914
3918
  flex-direction: column;
3915
3919
  max-width: 100%;
3920
+ min-width: 0;
3916
3921
  margin: 4px 0;
3917
3922
  transition: opacity 0.2s ease, transform 0.2s var(--ease-out-expo);
3918
3923
  --chat-card-max-width: 720px;
@@ -4080,7 +4085,8 @@
4080
4085
  font-family: var(--font-mono);
4081
4086
  font-size: 0.8125rem;
4082
4087
  max-width: 100%;
4083
- overflow-wrap: break-word;
4088
+ min-width: 0;
4089
+ overflow-wrap: anywhere;
4084
4090
  word-break: break-word;
4085
4091
  box-shadow: 0 4px 16px rgba(197, 101, 61, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.15);
4086
4092
  }
@@ -4097,8 +4103,11 @@
4097
4103
  color: var(--text-primary);
4098
4104
  padding: 14px 18px;
4099
4105
  max-width: 100%;
4106
+ min-width: 0;
4100
4107
  white-space: pre-wrap;
4101
4108
  word-wrap: break-word;
4109
+ overflow-wrap: anywhere;
4110
+ word-break: break-word;
4102
4111
  border: 1px solid var(--border-subtle);
4103
4112
  box-shadow: var(--shadow-sm);
4104
4113
  }
@@ -4114,9 +4123,11 @@
4114
4123
  flex-direction: column;
4115
4124
  gap: 2px;
4116
4125
  max-width: 100%;
4126
+ min-width: 0;
4117
4127
  font-size: 0.875rem;
4118
4128
  line-height: var(--line-height-relaxed);
4119
4129
  word-wrap: break-word;
4130
+ overflow-wrap: anywhere;
4120
4131
  color: var(--text-primary);
4121
4132
  }
4122
4133
 
@@ -4193,6 +4204,25 @@
4193
4204
  font-style: italic;
4194
4205
  }
4195
4206
 
4207
+ /* subagent 身份小 tag("勤劳初二 让 侦探猫 [subagent] 帮忙"),让用户一眼知道
4208
+ 这是子代理在说话,不是同一个 AI 突然换了个名字。色调跟 --agent-color 走。 */
4209
+ .chat-handoff-tag {
4210
+ display: inline-block;
4211
+ margin: 0 6px;
4212
+ padding: 1px 6px;
4213
+ font-size: 0.62rem;
4214
+ font-weight: 600;
4215
+ letter-spacing: 0.04em;
4216
+ text-transform: uppercase;
4217
+ color: var(--agent-color, var(--accent));
4218
+ background: color-mix(in srgb, var(--agent-color, var(--accent)) 14%, transparent);
4219
+ border: 1px solid color-mix(in srgb, var(--agent-color, var(--accent)) 32%, transparent);
4220
+ border-radius: 4px;
4221
+ vertical-align: 1px;
4222
+ line-height: 1.4;
4223
+ white-space: nowrap;
4224
+ }
4225
+
4196
4226
  /* subagent 回复气泡(群聊角色完成任务后的发言) */
4197
4227
  .subagent-reply {
4198
4228
  background: color-mix(in srgb, var(--agent-color, var(--accent)) 6%, var(--bg-surface));
@@ -4204,6 +4234,10 @@
4204
4234
  font-size: 0.875rem;
4205
4235
  color: var(--text-primary);
4206
4236
  word-break: break-word;
4237
+ overflow-wrap: anywhere;
4238
+ max-width: 100%;
4239
+ min-width: 0;
4240
+ overflow-x: hidden;
4207
4241
  }
4208
4242
 
4209
4243
  .subagent-reply > :first-child { margin-top: 0; }
@@ -4244,6 +4278,94 @@
4244
4278
  word-break: break-word;
4245
4279
  overflow-wrap: anywhere;
4246
4280
  margin: 8px 0;
4281
+ max-width: 100%;
4282
+ min-width: 0;
4283
+ }
4284
+
4285
+ /* ===== subagent 回复三态折叠 =====
4286
+ preview(默认)→ 限高 ~5 行 + 渐隐 mask + 内部可滚
4287
+ expanded → 拉到一个比较大的上限,内部可滚
4288
+ collapsed → 完全收起,只剩底部一条工具栏,按钮还能再点回来 */
4289
+ .subagent-reply.collapsible {
4290
+ position: relative;
4291
+ padding-right: 14px;
4292
+ padding-bottom: 28px;
4293
+ }
4294
+
4295
+ .subagent-reply-scroll {
4296
+ overflow: hidden;
4297
+ transition: max-height 0.32s var(--ease-out-expo, cubic-bezier(0.16, 1, 0.3, 1));
4298
+ min-width: 0;
4299
+ max-width: 100%;
4300
+ }
4301
+ .subagent-reply-scroll > :first-child { margin-top: 0; }
4302
+ .subagent-reply-scroll > :last-child { margin-bottom: 0; }
4303
+
4304
+ .subagent-reply.collapsible[data-collapse-mode="preview"] .subagent-reply-scroll {
4305
+ max-height: 7.5em; /* ~5 行 */
4306
+ overflow-y: auto;
4307
+ -webkit-mask-image: linear-gradient(to bottom, #000 70%, transparent 100%);
4308
+ mask-image: linear-gradient(to bottom, #000 70%, transparent 100%);
4309
+ }
4310
+
4311
+ .subagent-reply.collapsible[data-collapse-mode="expanded"] .subagent-reply-scroll {
4312
+ max-height: 360px;
4313
+ overflow-y: auto;
4314
+ }
4315
+
4316
+ .subagent-reply.collapsible[data-collapse-mode="collapsed"] {
4317
+ padding-top: 6px;
4318
+ padding-bottom: 26px;
4319
+ }
4320
+ .subagent-reply.collapsible[data-collapse-mode="collapsed"] .subagent-reply-scroll {
4321
+ max-height: 0;
4322
+ overflow: hidden;
4323
+ margin: 0;
4324
+ }
4325
+
4326
+ /* 三态循环按钮:固定在气泡右下角,三种模式下都可见 */
4327
+ .subagent-reply-cycle {
4328
+ position: absolute;
4329
+ right: 8px;
4330
+ bottom: 6px;
4331
+ display: inline-flex;
4332
+ align-items: center;
4333
+ gap: 3px;
4334
+ padding: 2px 8px;
4335
+ font-size: 0.7rem;
4336
+ font-weight: 500;
4337
+ line-height: 1.4;
4338
+ color: var(--agent-color, var(--accent));
4339
+ background: color-mix(in srgb, var(--agent-color, var(--accent)) 8%, var(--bg-surface, #fff));
4340
+ border: 1px solid color-mix(in srgb, var(--agent-color, var(--accent)) 28%, transparent);
4341
+ border-radius: 999px;
4342
+ cursor: pointer;
4343
+ user-select: none;
4344
+ transition: background 0.15s ease, transform 0.1s ease, border-color 0.15s ease;
4345
+ }
4346
+ .subagent-reply-cycle:hover {
4347
+ background: color-mix(in srgb, var(--agent-color, var(--accent)) 16%, var(--bg-surface, #fff));
4348
+ border-color: color-mix(in srgb, var(--agent-color, var(--accent)) 45%, transparent);
4349
+ }
4350
+ .subagent-reply-cycle:active {
4351
+ transform: translateY(1px);
4352
+ }
4353
+ .subagent-reply-cycle-icon {
4354
+ font-size: 0.7rem;
4355
+ line-height: 1;
4356
+ }
4357
+
4358
+ /* 内部滚动条做小一点,别抢戏 */
4359
+ .subagent-reply-scroll::-webkit-scrollbar {
4360
+ width: 6px;
4361
+ height: 6px;
4362
+ }
4363
+ .subagent-reply-scroll::-webkit-scrollbar-thumb {
4364
+ background: color-mix(in srgb, var(--agent-color, var(--accent)) 35%, transparent);
4365
+ border-radius: 3px;
4366
+ }
4367
+ .subagent-reply-scroll::-webkit-scrollbar-track {
4368
+ background: transparent;
4247
4369
  }
4248
4370
 
4249
4371
  /* ===== 消息使用量信息 ===== */
@@ -5707,20 +5829,39 @@
5707
5829
  }
5708
5830
 
5709
5831
  /* Markdown Content */
5710
- .markdown-content { color: inherit; white-space: normal; overflow-x: hidden; }
5832
+ /* min-width:0 让该 flex 子项可以在窄屏下收缩到比内容更窄;
5833
+ overflow-wrap: anywhere + word-break: break-word 兜底超长不可断词(长 URL / 长 ID / 长 token)。 */
5834
+ .markdown-content {
5835
+ color: inherit;
5836
+ white-space: normal;
5837
+ overflow-x: hidden;
5838
+ max-width: 100%;
5839
+ min-width: 0;
5840
+ overflow-wrap: anywhere;
5841
+ word-break: break-word;
5842
+ }
5843
+ /* 代码块:长行强制 wrap,不出现横向滚动条。代码块在窄屏下也保持在
5844
+ 可视范围内,用户不需要拖横滚条才能看到右侧内容。 */
5711
5845
  .markdown-content .code-block pre {
5712
5846
  overflow-x: hidden;
5713
5847
  white-space: pre-wrap;
5714
5848
  word-break: break-word;
5715
5849
  overflow-wrap: anywhere;
5850
+ max-width: 100%;
5851
+ min-width: 0;
5716
5852
  }
5717
- .markdown-content p { margin: 0 0 8px 0; }
5853
+ .markdown-content p { margin: 0 0 8px 0; overflow-wrap: anywhere; word-break: break-word; }
5718
5854
  .markdown-content p:last-child { margin-bottom: 0; }
5719
5855
  .markdown-content strong { font-weight: 600; }
5720
5856
  .markdown-content em { font-style: italic; }
5721
5857
  .markdown-content ul, .markdown-content ol { margin: 8px 0; padding-left: 20px; }
5722
- .markdown-content li { margin: 4px 0; }
5723
- .markdown-content h1, .markdown-content h2, .markdown-content h3 { margin: 16px 0 8px 0; font-weight: 600; }
5858
+ .markdown-content li { margin: 4px 0; overflow-wrap: anywhere; word-break: break-word; }
5859
+ .markdown-content h1, .markdown-content h2, .markdown-content h3 {
5860
+ margin: 16px 0 8px 0;
5861
+ font-weight: 600;
5862
+ overflow-wrap: anywhere;
5863
+ word-break: break-word;
5864
+ }
5724
5865
  .markdown-content h1 { font-size: 1.25rem; }
5725
5866
  .markdown-content h2 { font-size: 1.1rem; }
5726
5867
  .markdown-content h3 { font-size: 1rem; }
@@ -5730,6 +5871,16 @@
5730
5871
  border-left: 3px solid var(--accent);
5731
5872
  background: rgba(197, 101, 61, 0.06);
5732
5873
  border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
5874
+ overflow-wrap: anywhere;
5875
+ word-break: break-word;
5876
+ }
5877
+ .markdown-content a {
5878
+ overflow-wrap: anywhere;
5879
+ word-break: break-all;
5880
+ }
5881
+ .markdown-content img {
5882
+ max-width: 100%;
5883
+ height: auto;
5733
5884
  }
5734
5885
  .markdown-content code:not(.code-block):not(.code-inline) {
5735
5886
  font-family: var(--font-mono);
@@ -5737,6 +5888,8 @@
5737
5888
  background: rgba(150, 118, 85, 0.12);
5738
5889
  padding: 2px 5px;
5739
5890
  border-radius: 4px;
5891
+ overflow-wrap: anywhere;
5892
+ word-break: break-all;
5740
5893
  }
5741
5894
 
5742
5895
  .markdown-content code.code-inline {
@@ -5745,6 +5898,8 @@
5745
5898
  background: rgba(150, 118, 85, 0.12);
5746
5899
  padding: 2px 5px;
5747
5900
  border-radius: 4px;
5901
+ overflow-wrap: anywhere;
5902
+ word-break: break-all;
5748
5903
  }
5749
5904
  .markdown-content .md-table-wrap {
5750
5905
  margin: 12px 0;
@@ -5756,6 +5911,7 @@
5756
5911
  .markdown-content .md-table {
5757
5912
  border-collapse: collapse;
5758
5913
  width: 100%;
5914
+ table-layout: fixed;
5759
5915
  font-size: 0.8125rem;
5760
5916
  white-space: normal;
5761
5917
  }
@@ -5765,6 +5921,8 @@
5765
5921
  padding: 6px 10px;
5766
5922
  text-align: left;
5767
5923
  vertical-align: top;
5924
+ overflow-wrap: anywhere;
5925
+ word-break: break-word;
5768
5926
  }
5769
5927
  .markdown-content .md-table th {
5770
5928
  background: rgba(150, 118, 85, 0.1);
@@ -5829,6 +5987,8 @@
5829
5987
  white-space: pre-wrap;
5830
5988
  word-break: break-word;
5831
5989
  overflow-wrap: anywhere;
5990
+ max-width: 100%;
5991
+ min-width: 0;
5832
5992
  }
5833
5993
  .markdown-content pre code {
5834
5994
  font-family: var(--font-mono);
@@ -5837,6 +5997,8 @@
5837
5997
  color: #f5eadc;
5838
5998
  background: transparent;
5839
5999
  padding: 0;
6000
+ max-width: 100%;
6001
+ display: block;
5840
6002
  }
5841
6003
 
5842
6004
  /* Syntax Highlighting */
@@ -5918,6 +6080,73 @@
5918
6080
  background-color: rgba(255, 255, 255, 0.9);
5919
6081
  }
5920
6082
 
6083
+ /* 三件套(Mode / Model / Thinking)扁平文字版:
6084
+ 去掉边框 / 背景 / chevron,只留纯文字 + · 分隔。点击文字区域弹出原生
6085
+ <select>(桌面端下拉、移动端滚轮选择),由透明的 .composer-text-hidden-select
6086
+ 叠层承载交互。显示文本统一用 raw id(default / claude-sonnet-4-5 / standard…)。 */
6087
+ .composer-text-group {
6088
+ display: inline-flex;
6089
+ align-items: center;
6090
+ gap: 4px;
6091
+ min-width: 0;
6092
+ flex-wrap: nowrap;
6093
+ }
6094
+ .composer-text-pill {
6095
+ position: relative;
6096
+ font-family: var(--font-sans);
6097
+ font-size: 0.7rem;
6098
+ font-weight: 500;
6099
+ line-height: 1;
6100
+ padding: 2px 2px;
6101
+ color: var(--text-secondary);
6102
+ cursor: pointer;
6103
+ transition: color var(--transition-fast);
6104
+ display: inline-flex;
6105
+ align-items: center;
6106
+ justify-content: center;
6107
+ white-space: nowrap;
6108
+ box-sizing: border-box;
6109
+ user-select: none;
6110
+ max-width: 110px;
6111
+ letter-spacing: 0.01em;
6112
+ }
6113
+ .composer-text-pill:hover,
6114
+ .composer-text-pill:focus-within {
6115
+ color: var(--accent);
6116
+ }
6117
+ .composer-text-label {
6118
+ overflow: hidden;
6119
+ text-overflow: ellipsis;
6120
+ max-width: 100%;
6121
+ }
6122
+ .composer-text-hidden-select {
6123
+ position: absolute;
6124
+ inset: 0;
6125
+ width: 100%;
6126
+ height: 100%;
6127
+ margin: 0;
6128
+ padding: 0;
6129
+ border: 0;
6130
+ background: transparent;
6131
+ color: transparent;
6132
+ font: inherit;
6133
+ opacity: 0;
6134
+ cursor: pointer;
6135
+ appearance: none;
6136
+ -webkit-appearance: none;
6137
+ }
6138
+ .composer-text-hidden-select:focus { outline: none; }
6139
+ .composer-text-sep {
6140
+ color: var(--text-tertiary, #b5a89a);
6141
+ font-size: 0.7rem;
6142
+ line-height: 1;
6143
+ user-select: none;
6144
+ pointer-events: none;
6145
+ opacity: 0.65;
6146
+ }
6147
+ .chat-model-text-pill { max-width: 110px; }
6148
+ .chat-thinking-text-pill { max-width: 90px; }
6149
+
5921
6150
  /* Permission actions inline in composer bar */
5922
6151
  .permission-actions {
5923
6152
  display: inline-flex;
@@ -6116,40 +6345,393 @@
6116
6345
  flex: 1;
6117
6346
  justify-content: flex-end;
6118
6347
  }
6119
- /* 队列计数器:v1.30.3 是个 0.625rem 的小角标,挤在 input-hint 旁边没人看见。
6120
- 升级成 dot + label 的 pill,配色和"立即发送"按钮同源,让用户能联想到这套语义。 */
6121
- .queue-counter {
6348
+ /* 旧 #queue-counter pill(v1.30.3 那颗藏在 input-hint 旁的小角标)已下线,
6349
+ .queue-bar(输入框上方独立浮条)接管。queuePulse / queueDotPulse 关键帧
6350
+ 新组件继续复用,保留在下方。 */
6351
+ @keyframes queuePulse {
6352
+ 0%, 100% { opacity: 1; }
6353
+ 50% { opacity: 0.78; }
6354
+ }
6355
+ @keyframes queueDotPulse {
6356
+ 0%, 100% { transform: scale(1); opacity: 1; }
6357
+ 50% { transform: scale(0.7); opacity: 0.55; }
6358
+ }
6359
+
6360
+ /* ─────────────────────────────────────────────────────────────────────
6361
+ 排队消息条(.queue-bar)—— 浮在 .input-composer 上方,靠 .queue-bar-host
6362
+ 右对齐到对话框右下角。结构:
6363
+ .queue-bar (折叠条 row)
6364
+ ├ .queue-bar-toggle (● 排队 N · 预览 ⌃)
6365
+ ├ .queue-bar-divider
6366
+ ├ .queue-bar-promote (⚡ 立即)
6367
+ └ .queue-bar-panel (展开后下拉的消息列表,默认隐)
6368
+ 展开时给 .queue-bar 加 .expanded class,CSS 控制 panel 显形 + chevron 翻转。
6369
+ ───────────────────────────────────────────────────────────────────── */
6370
+ .queue-bar-host {
6371
+ display: flex;
6372
+ justify-content: flex-end;
6373
+ padding: 0 6px 6px;
6374
+ position: relative;
6375
+ z-index: 2;
6376
+ pointer-events: none; /* host 自身不挡点击,bar 内子节点 auto */
6377
+ }
6378
+ .queue-bar-host[hidden] { display: none; }
6379
+
6380
+ .queue-bar {
6381
+ pointer-events: auto;
6382
+ position: relative;
6122
6383
  display: inline-flex;
6123
- align-items: center;
6124
- gap: 5px;
6125
- font-size: 0.6875rem;
6126
- color: var(--accent);
6127
- background: linear-gradient(180deg, rgba(197, 101, 61, 0.18) 0%, rgba(197, 101, 61, 0.10) 100%);
6128
- padding: 3px 9px;
6384
+ align-items: stretch;
6385
+ gap: 0;
6386
+ width: 340px;
6387
+ max-width: calc(100% - 4px);
6388
+ height: 38px;
6389
+ padding: 0;
6129
6390
  border-radius: 999px;
6130
- white-space: nowrap;
6131
- font-weight: 600;
6132
- letter-spacing: 0.02em;
6133
- box-shadow: 0 0 0 1px rgba(197, 101, 61, 0.25) inset;
6134
- animation: queuePulse 1.5s ease-in-out infinite;
6391
+ background: linear-gradient(180deg, #fffaf2 0%, #f6ead8 100%);
6392
+ box-shadow:
6393
+ 0 0 0 1.2px rgba(197, 101, 61, 0.42),
6394
+ inset 0 1px 0 rgba(255, 255, 255, 0.85),
6395
+ var(--shadow-sm);
6396
+ transition: box-shadow var(--transition-fast), transform var(--transition-fast);
6397
+ animation: queueBarEnter 220ms ease-out both;
6135
6398
  }
6136
- .queue-counter.hidden { display: none; }
6137
- .queue-counter-dot {
6138
- width: 6px;
6139
- height: 6px;
6399
+ .queue-bar:hover {
6400
+ transform: translateY(-1px);
6401
+ box-shadow:
6402
+ 0 0 0 1.2px rgba(197, 101, 61, 0.55),
6403
+ inset 0 1px 0 rgba(255, 255, 255, 0.9),
6404
+ var(--shadow-md);
6405
+ }
6406
+ .queue-bar.queue-bar-capacity {
6407
+ box-shadow:
6408
+ 0 0 0 1.4px rgba(169, 106, 47, 0.6),
6409
+ inset 0 1px 0 rgba(255, 255, 255, 0.85),
6410
+ var(--shadow-sm);
6411
+ }
6412
+ .queue-bar.queue-bar-inflight {
6413
+ animation: queueBarEnter 220ms ease-out both, queuePulse 1.6s ease-in-out 220ms infinite;
6414
+ }
6415
+ @keyframes queueBarEnter {
6416
+ from { opacity: 0; transform: translateY(4px) scale(0.98); }
6417
+ to { opacity: 1; transform: translateY(0) scale(1); }
6418
+ }
6419
+
6420
+ .queue-bar-toggle {
6421
+ flex: 1 1 auto;
6422
+ min-width: 0;
6423
+ display: inline-flex;
6424
+ align-items: center;
6425
+ gap: 7px;
6426
+ padding: 0 10px 0 14px;
6427
+ border: none;
6428
+ background: transparent;
6429
+ cursor: pointer;
6430
+ font: inherit;
6431
+ color: var(--text-primary);
6432
+ border-radius: 999px 0 0 999px;
6433
+ text-align: left;
6434
+ }
6435
+ .queue-bar-toggle:focus-visible {
6436
+ outline: 2px solid var(--border-focus);
6437
+ outline-offset: -2px;
6438
+ }
6439
+ .queue-bar-dot {
6440
+ width: 8px;
6441
+ height: 8px;
6140
6442
  border-radius: 50%;
6141
6443
  background: var(--accent);
6142
6444
  flex-shrink: 0;
6445
+ box-shadow: 0 0 0 2px rgba(197, 101, 61, 0.18);
6446
+ }
6447
+ .queue-bar-dot.queue-bar-dot-pulse {
6143
6448
  animation: queueDotPulse 1.0s ease-in-out infinite;
6144
6449
  }
6145
- .queue-counter-text { line-height: 1; }
6146
- @keyframes queuePulse {
6147
- 0%, 100% { opacity: 1; }
6148
- 50% { opacity: 0.78; }
6450
+ .queue-bar-count {
6451
+ font-size: 0.75rem;
6452
+ font-weight: 600;
6453
+ color: var(--accent);
6454
+ letter-spacing: 0.02em;
6455
+ flex-shrink: 0;
6456
+ line-height: 1;
6149
6457
  }
6150
- @keyframes queueDotPulse {
6151
- 0%, 100% { transform: scale(1); opacity: 1; }
6152
- 50% { transform: scale(0.7); opacity: 0.55; }
6458
+ .queue-bar-sep {
6459
+ color: var(--text-muted);
6460
+ opacity: 0.55;
6461
+ font-size: 0.7rem;
6462
+ flex-shrink: 0;
6463
+ }
6464
+ .queue-bar-preview {
6465
+ font-size: 0.75rem;
6466
+ color: var(--text-secondary);
6467
+ flex: 1 1 auto;
6468
+ min-width: 0;
6469
+ overflow: hidden;
6470
+ text-overflow: ellipsis;
6471
+ white-space: nowrap;
6472
+ line-height: 1;
6473
+ }
6474
+ .queue-bar-chevron {
6475
+ color: var(--text-tertiary);
6476
+ flex-shrink: 0;
6477
+ transition: transform 180ms ease-out;
6478
+ }
6479
+ .queue-bar.expanded .queue-bar-chevron {
6480
+ transform: rotate(180deg);
6481
+ color: var(--accent);
6482
+ }
6483
+
6484
+ .queue-bar-divider {
6485
+ width: 1px;
6486
+ background: rgba(197, 101, 61, 0.28);
6487
+ margin: 7px 0;
6488
+ flex-shrink: 0;
6489
+ }
6490
+
6491
+ .queue-bar-promote {
6492
+ flex-shrink: 0;
6493
+ display: inline-flex;
6494
+ align-items: center;
6495
+ gap: 5px;
6496
+ padding: 0 14px 0 12px;
6497
+ border: none;
6498
+ cursor: pointer;
6499
+ font: inherit;
6500
+ font-size: 0.75rem;
6501
+ font-weight: 600;
6502
+ color: #fff;
6503
+ background: linear-gradient(180deg, var(--accent) 0%, var(--accent-active) 100%);
6504
+ border-radius: 0 999px 999px 0;
6505
+ letter-spacing: 0.04em;
6506
+ transition: filter var(--transition-fast), transform var(--transition-fast);
6507
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.22);
6508
+ }
6509
+ .queue-bar-promote:hover { filter: brightness(1.06); }
6510
+ .queue-bar-promote:active { transform: scale(0.97); }
6511
+ .queue-bar-promote:focus-visible {
6512
+ outline: 2px solid var(--border-focus);
6513
+ outline-offset: 2px;
6514
+ }
6515
+ .queue-bar-promote svg { flex-shrink: 0; }
6516
+ .queue-bar-promote-label { line-height: 1; }
6517
+
6518
+ /* 展开面板:默认折叠(不可见 + 不占空间),加 .expanded 时滑出 */
6519
+ .queue-bar-panel {
6520
+ position: absolute;
6521
+ right: 0;
6522
+ bottom: calc(100% + 8px);
6523
+ width: min(380px, calc(100vw - 24px));
6524
+ max-height: 280px;
6525
+ display: flex;
6526
+ flex-direction: column;
6527
+ background: var(--bg-elevated);
6528
+ border-radius: 14px;
6529
+ box-shadow:
6530
+ 0 0 0 1px var(--border-default),
6531
+ var(--shadow-lg);
6532
+ overflow: hidden;
6533
+ opacity: 0;
6534
+ transform: scale(0.96) translateY(4px);
6535
+ transform-origin: bottom right;
6536
+ pointer-events: none;
6537
+ transition: opacity 180ms ease-out, transform 180ms ease-out;
6538
+ }
6539
+ .queue-bar.expanded .queue-bar-panel {
6540
+ opacity: 1;
6541
+ transform: scale(1) translateY(0);
6542
+ pointer-events: auto;
6543
+ }
6544
+
6545
+ .queue-bar-panel-header {
6546
+ display: flex;
6547
+ align-items: center;
6548
+ gap: 8px;
6549
+ padding: 9px 12px;
6550
+ border-bottom: 1px solid var(--border-subtle);
6551
+ background: linear-gradient(180deg, rgba(246, 234, 216, 0.55) 0%, transparent 100%);
6552
+ }
6553
+ .queue-bar-panel-title {
6554
+ font-size: 0.78rem;
6555
+ font-weight: 600;
6556
+ color: var(--text-primary);
6557
+ flex: 1 1 auto;
6558
+ min-width: 0;
6559
+ }
6560
+ .queue-bar-clear,
6561
+ .queue-bar-collapse {
6562
+ display: inline-flex;
6563
+ align-items: center;
6564
+ gap: 3px;
6565
+ padding: 3px 9px;
6566
+ border: 1px solid transparent;
6567
+ background: transparent;
6568
+ cursor: pointer;
6569
+ font: inherit;
6570
+ font-size: 0.7rem;
6571
+ color: var(--text-tertiary);
6572
+ border-radius: 8px;
6573
+ transition: all var(--transition-fast);
6574
+ line-height: 1;
6575
+ }
6576
+ .queue-bar-clear:hover:not([disabled]) {
6577
+ color: var(--danger);
6578
+ background: var(--danger-muted);
6579
+ border-color: rgba(178, 79, 69, 0.25);
6580
+ }
6581
+ .queue-bar-clear[disabled] {
6582
+ opacity: 0.4;
6583
+ cursor: not-allowed;
6584
+ }
6585
+ .queue-bar-collapse:hover {
6586
+ color: var(--accent);
6587
+ background: var(--accent-muted);
6588
+ }
6589
+ .queue-bar-collapse svg { flex-shrink: 0; }
6590
+
6591
+ .queue-bar-list {
6592
+ list-style: none;
6593
+ margin: 0;
6594
+ padding: 6px;
6595
+ display: flex;
6596
+ flex-direction: column;
6597
+ gap: 6px;
6598
+ overflow-y: auto;
6599
+ overscroll-behavior: contain;
6600
+ flex: 1 1 auto;
6601
+ min-height: 0;
6602
+ }
6603
+
6604
+ .queue-bar-item {
6605
+ display: flex;
6606
+ align-items: flex-start;
6607
+ gap: 6px;
6608
+ padding: 8px 8px 8px 4px;
6609
+ background: var(--bg-surface);
6610
+ border: 1px solid var(--border-subtle);
6611
+ border-radius: 10px;
6612
+ position: relative;
6613
+ transition: transform 140ms ease-out, box-shadow var(--transition-fast),
6614
+ background var(--transition-fast), border-color var(--transition-fast);
6615
+ will-change: transform;
6616
+ }
6617
+ .queue-bar-item:hover {
6618
+ background: rgba(255, 251, 245, 0.92);
6619
+ border-color: var(--border-default);
6620
+ }
6621
+ .queue-bar-item.dragging {
6622
+ z-index: 5;
6623
+ box-shadow: var(--shadow-lg), 0 0 0 1.5px var(--accent);
6624
+ background: var(--bg-elevated);
6625
+ transition: box-shadow var(--transition-fast); /* dragging 期间禁用 transform 过渡 */
6626
+ cursor: grabbing;
6627
+ }
6628
+ .queue-bar-item-sliding {
6629
+ transition: transform 140ms ease-out;
6630
+ }
6631
+
6632
+ .queue-bar-item-drag {
6633
+ flex-shrink: 0;
6634
+ width: 18px;
6635
+ height: 28px;
6636
+ border: none;
6637
+ background: transparent;
6638
+ cursor: grab;
6639
+ color: var(--text-muted);
6640
+ padding: 0;
6641
+ display: inline-flex;
6642
+ align-items: center;
6643
+ justify-content: center;
6644
+ border-radius: 4px;
6645
+ touch-action: none; /* 不让浏览器抢走拖拽手势用作滚动 */
6646
+ transition: color var(--transition-fast), background var(--transition-fast);
6647
+ }
6648
+ .queue-bar-item-drag:hover { color: var(--accent); background: var(--accent-muted); }
6649
+ .queue-bar-item-drag:active { cursor: grabbing; }
6650
+ .queue-bar-item-drag[disabled] {
6651
+ opacity: 0.35;
6652
+ cursor: default;
6653
+ }
6654
+ .queue-bar-item-drag[disabled]:hover {
6655
+ color: var(--text-muted);
6656
+ background: transparent;
6657
+ }
6658
+
6659
+ .queue-bar-item-index {
6660
+ flex-shrink: 0;
6661
+ font-family: var(--font-mono);
6662
+ font-size: 0.65rem;
6663
+ font-weight: 600;
6664
+ color: var(--accent);
6665
+ background: var(--accent-muted);
6666
+ padding: 3px 6px;
6667
+ border-radius: 6px;
6668
+ line-height: 1;
6669
+ margin-top: 1px;
6670
+ min-width: 26px;
6671
+ text-align: center;
6672
+ }
6673
+
6674
+ .queue-bar-item-text {
6675
+ flex: 1 1 auto;
6676
+ min-width: 0;
6677
+ border: none;
6678
+ background: transparent;
6679
+ cursor: pointer;
6680
+ font: inherit;
6681
+ font-size: 0.78rem;
6682
+ color: var(--text-primary);
6683
+ text-align: left;
6684
+ padding: 1px 0;
6685
+ line-height: 1.4;
6686
+ display: -webkit-box;
6687
+ -webkit-line-clamp: 2;
6688
+ -webkit-box-orient: vertical;
6689
+ overflow: hidden;
6690
+ white-space: pre-wrap;
6691
+ word-break: break-word;
6692
+ transition: color var(--transition-fast);
6693
+ }
6694
+ .queue-bar-item.expanded .queue-bar-item-text {
6695
+ display: block;
6696
+ -webkit-line-clamp: unset;
6697
+ max-height: 200px;
6698
+ overflow-y: auto;
6699
+ }
6700
+ .queue-bar-item-text:hover { color: var(--accent); }
6701
+
6702
+ .queue-bar-item-delete {
6703
+ flex-shrink: 0;
6704
+ width: 22px;
6705
+ height: 22px;
6706
+ border: none;
6707
+ background: transparent;
6708
+ cursor: pointer;
6709
+ color: var(--text-muted);
6710
+ border-radius: 6px;
6711
+ display: inline-flex;
6712
+ align-items: center;
6713
+ justify-content: center;
6714
+ opacity: 0;
6715
+ transition: opacity var(--transition-fast), color var(--transition-fast),
6716
+ background var(--transition-fast);
6717
+ }
6718
+ .queue-bar-item:hover .queue-bar-item-delete,
6719
+ .queue-bar-item:focus-within .queue-bar-item-delete {
6720
+ opacity: 1;
6721
+ }
6722
+ .queue-bar-item-delete:hover {
6723
+ color: var(--danger);
6724
+ background: var(--danger-muted);
6725
+ }
6726
+
6727
+ /* 窄屏:bar 撑满,preview 隐藏,操作按钮始终显形 */
6728
+ @media (max-width: 560px) {
6729
+ .queue-bar-host { padding: 0 4px 6px; }
6730
+ .queue-bar { width: 100%; }
6731
+ .queue-bar-preview { display: none; }
6732
+ .queue-bar-sep { display: none; }
6733
+ .queue-bar-item-delete { opacity: 1; }
6734
+ .queue-bar-panel { width: calc(100vw - 16px); right: -2px; }
6153
6735
  }
6154
6736
 
6155
6737
  /* Queued message in chat view:用户最容易"觉得排队没生效"是因为旧版徽章太小。
@@ -9282,19 +9864,26 @@
9282
9864
 
9283
9865
  /* 平板适配 */
9284
9866
  @media (max-width: 768px) {
9867
+ /* 手机隐藏「固定侧栏」按钮:手机上完整 300px 常驻太占地,
9868
+ 只保留「收起为窄条」按钮,让用户能切到 56px 窄条形态。 */
9285
9869
  .sidebar-pin-toggle { display: none; }
9286
- .sidebar-collapse-toggle { display: none; }
9287
- .sidebar.pinned:not(.open) {
9870
+ /* drawer 模式(pinned 但非窄条)下若未打开,则隐藏到屏幕左侧。
9871
+ 窄条模式(pinned + collapsed)由 .sidebar.pinned.collapsed 的 width:56px
9872
+ 规则常驻显示,不进入这条隐藏分支。 */
9873
+ .sidebar.pinned:not(.collapsed):not(.open) {
9288
9874
  transform: translateX(-100%);
9289
9875
  pointer-events: none;
9290
9876
  opacity: 0;
9291
9877
  }
9292
- .main-layout.sidebar-pinned {
9878
+ /* 与上方对称:drawer 模式下取消 anchored padding;
9879
+ 窄条模式(.sidebar-pinned.sidebar-collapsed)继承全局 56px padding。 */
9880
+ .main-layout.sidebar-pinned:not(.sidebar-collapsed) {
9293
9881
  padding-left: 0;
9294
9882
  }
9295
- .main-layout.sidebar-pinned .floating-sidebar-toggle {
9296
- display: inline-flex;
9297
- }
9883
+ /* drawer 模式(未 anchored)默认就显示 hamburger(继承全局 inline-flex)。
9884
+ 窄条模式(.sidebar-pinned.sidebar-collapsed)由全局
9885
+ `.main-layout.sidebar-pinned .floating-sidebar-toggle{display:none}`
9886
+ 隐藏 hamburger,窄条自身就是入口。 */
9298
9887
  .app-container {
9299
9888
  --layout-main-file-panel-width: 0px;
9300
9889
  }
@@ -10049,6 +10638,26 @@
10049
10638
  }
10050
10639
  }
10051
10640
 
10641
+ /* ===== 手机竖屏(≤480px)—— 进一步收紧 chat 视图 padding,
10642
+ 并允许 tool-use 卡片头部 wrap,避免在极窄宽度下被裁切。 ===== */
10643
+ @media (max-width: 480px) {
10644
+ .chat-container { padding: 0 6px 8px; }
10645
+ .chat-messages { padding-left: 2px; padding-right: 2px; gap: 12px; }
10646
+ .chat-message { --chat-card-max-width: 100%; }
10647
+ .tool-use-header {
10648
+ flex-wrap: wrap;
10649
+ row-gap: 4px;
10650
+ padding: 8px 12px;
10651
+ }
10652
+ .tool-use-file { max-width: 100%; }
10653
+ .tool-use-body { padding: 10px 12px; }
10654
+ .subagent-reply { padding: 9px 12px; }
10655
+ .markdown-content .code-block { margin: 8px 0; }
10656
+ .markdown-content pre,
10657
+ .markdown-content .code-block pre,
10658
+ .subagent-reply pre { padding: 10px; }
10659
+ }
10660
+
10052
10661
  /* Blank chat mobile optimization */
10053
10662
  .session-kind-badge {
10054
10663
  display: inline-flex;