codebee 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/app/ui/style.css CHANGED
@@ -1,4 +1,5 @@
1
1
  /* CodeBee UI —— ChatGPT 风格:左侧栏 + 居中主栏 + 卡片化内容,零依赖 */
2
+ /* Refreshed defaults apply when no selectable palette is active. */
2
3
  :root {
3
4
  --bg: #212121;
4
5
  --sidebar: #171717;
@@ -26,7 +27,7 @@
26
27
  --uc-ca: #3fd0bb;
27
28
  --uc-out: #b79bff;
28
29
  }
29
- html[data-theme="light"] {
30
+ html[data-theme="light"]:not([data-skin]), html[data-theme="light"][data-skin="classic"] {
30
31
  --bg: #ffffff;
31
32
  --sidebar: #f9f9f9;
32
33
  --panel: #ffffff;
@@ -416,6 +417,13 @@ body.side-collapsed #sidebar { border-right: none; padding-left: 0; padding-righ
416
417
  .stask:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
417
418
  .stask .t { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
418
419
  .stask .tm { flex: none; color: var(--muted); font-size: 11px; font-variant-numeric: tabular-nums; }
420
+ .stask-more {
421
+ flex: none; width: 24px; height: 24px; padding: 0; border: 0; border-radius: 6px;
422
+ background: transparent; color: var(--muted); cursor: pointer; font: 700 16px/1 inherit;
423
+ opacity: 0; transition: opacity .12s, color .12s, background-color .12s;
424
+ }
425
+ .stask:hover .stask-more, .stask:focus-within .stask-more, .stask-more:focus-visible { opacity: 1; }
426
+ .stask-more:hover, .stask-more:focus-visible { color: var(--text); background: var(--panel); outline: none; }
419
427
  /* 状态字形:进行中旋转✻ / 完成绿点 / 失败红点 / 取消橙点 / 排队空圈 / 未运行暗点 */
420
428
  /* 闸门等待徽章(任务分支待裁决)+ 侧栏铃铛开关 */
421
429
  .sbadge {
@@ -773,7 +781,7 @@ button.small { padding: 4px 10px; font-size: 12px; }
773
781
 
774
782
  .steps { display: flex; flex-direction: column; gap: 8px; margin-bottom: 16px; }
775
783
  .step {
776
- display: grid; grid-template-columns: 30px 92px 118px 1fr auto auto;
784
+ display: grid; grid-template-columns: 30px 92px 118px minmax(0, 1fr) auto auto auto;
777
785
  align-items: center; gap: 12px;
778
786
  background: var(--panel2); border: 1px solid transparent; border-radius: var(--r-md);
779
787
  padding: 10px 14px; cursor: pointer; font-size: 13px;
@@ -789,6 +797,15 @@ button.small { padding: 4px 10px; font-size: 12px; }
789
797
  .step .who { color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
790
798
  .step .sum { color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
791
799
  .step .dur { color: var(--muted); font-size: 12px; font-family: var(--mono); }
800
+ .step-log-btn {
801
+ border: 1px solid var(--border); border-radius: 999px; background: transparent;
802
+ color: var(--muted); padding: 3px 8px; font-size: 11px; line-height: 1.2;
803
+ cursor: pointer; white-space: nowrap; transition: color .12s, border-color .12s, background-color .12s;
804
+ }
805
+ .step-log-btn:hover, .step-log-btn:focus-visible {
806
+ color: var(--accent); border-color: var(--accent);
807
+ background: color-mix(in srgb, var(--accent) 7%, transparent); outline: none;
808
+ }
792
809
  /* 编排计划(只读,无日志可点) */
793
810
  .step.plan { grid-template-columns: 30px 180px 1fr; cursor: default; }
794
811
  .step.plan .role { color: var(--text); }
@@ -1540,6 +1557,7 @@ html[data-theme="light"] .seg-btn.active { box-shadow: 0 1px 3px rgba(0, 0, 0, .
1540
1557
  .usage-svg .uc-legend text { fill: var(--muted); font-size: 11px; }
1541
1558
  .usage-svg .uc-grid { stroke: var(--border); stroke-width: 1; stroke-dasharray: 3 4; }
1542
1559
  .usage-svg .uc-base { stroke: var(--border-strong); stroke-width: 1; }
1560
+ .usage-svg .uc-bar { fill: var(--accent); opacity: .10; pointer-events: auto; }
1543
1561
  .usage-svg .uc-peak { fill: var(--muted); font-size: 11px; font-weight: 600; }
1544
1562
  /* 柱顶总量标签:峰值日加重,矮柱的信息全靠它 */
1545
1563
  .usage-svg .uc-val { fill: var(--muted); font-size: 10px; font-family: var(--mono); }
@@ -1749,6 +1767,8 @@ html[data-theme="light"] .seg-btn.active { box-shadow: 0 1px 3px rgba(0, 0, 0, .
1749
1767
  .hive-cell .hc-live, .hive-lane .lane-live {
1750
1768
  display: inline-flex; align-items: center; gap: 4px;
1751
1769
  }
1770
+ .hive-cell .hc-log-link { margin-left: auto; color: var(--muted); font-size: 10.5px; opacity: .78; }
1771
+ .hive-cell:hover .hc-log-link, .hive-cell:focus-visible .hc-log-link { color: var(--accent); opacity: 1; }
1752
1772
  .hive-cell .hc-live {
1753
1773
  border: 1px solid color-mix(in srgb, var(--accent) 35%, transparent);
1754
1774
  border-radius: 999px; padding: 0 7px; line-height: 16px; font-size: 10.5px;
@@ -2827,6 +2847,8 @@ html.code-wrap #file-pop .fp-edit { white-space: pre-wrap; word-break: break-wor
2827
2847
  智能体回复整幅平铺(不套气泡框),用户消息右侧浅灰圆角块。列宽 820px。 */
2828
2848
  /* 直连任务「对话为主」:常规页签条收起,右上角小胶囊按需打开其它分区 */
2829
2849
  #run-detail.chat-mode #rd-tabs { display: none; }
2850
+ #run-detail.chat-mode .rd-meta { opacity: .72; margin-bottom: 8px; }
2851
+ #run-detail.chat-mode .detail-head .rd-actions { opacity: .84; }
2830
2852
  #rd-chat-nav { display: flex; align-items: center; gap: 8px;
2831
2853
  min-height: 36px; margin: 2px 0 12px; }
2832
2854
  #rd-chat-nav.hidden { display: none; }
@@ -2881,6 +2903,10 @@ main.chat-fill #run-detail.chat-mode {
2881
2903
  .chat-meta { font-size: 11.5px; color: var(--muted); margin-bottom: 6px; }
2882
2904
  .chat-bubble.me .chat-meta { text-align: right; margin-bottom: 4px; }
2883
2905
  .chat-bubble.agent .chat-meta { margin: 8px 0 0; }
2906
+ .chat-actions { display: flex; align-items: center; min-height: 18px; margin-top: 2px; }
2907
+ .chat-log-btn { border: 0; padding: 0; background: transparent; color: var(--muted); cursor: pointer;
2908
+ font-size: 11px; line-height: 1.4; opacity: .72; }
2909
+ .chat-log-btn:hover, .chat-log-btn:focus-visible { color: var(--accent); opacity: 1; outline: none; }
2884
2910
  .chat-body { margin: 0; font: inherit; white-space: pre-wrap; }
2885
2911
  .chat-atts { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 8px; }
2886
2912
  /* 运行中且还没有正文:三点打字动画(reduced-motion 时退化为静态点) */
@@ -2917,6 +2943,7 @@ main.chat-fill #run-detail.chat-mode {
2917
2943
  #run-detail.chat-mode .rd-pane[data-pane="chat"] { min-height: 280px; }
2918
2944
  .rd-chat-flow { gap: 18px; padding: 12px 6px 8px; }
2919
2945
  .chat-bubble.me { max-width: 86%; }
2946
+ .stask-more { opacity: .8; }
2920
2947
  }
2921
2948
 
2922
2949
  /* ================= 墨金组件精修层(惠及所有皮肤;DOM/几何零改动) =================
@@ -2966,141 +2993,195 @@ span.imgcap { cursor: pointer; user-select: none; }
2966
2993
  span.imgcap:not(.ok) { opacity: .45; }
2967
2994
  span.imgcap:hover { border-color: var(--accent); color: var(--accent); }
2968
2995
 
2969
- /* ================= 蜂巢工作台视觉 v3(Hermes Agent 终端街机风) =================
2970
- * 依 Hermes 官方 banner 实测设计语言(视觉模型分析):纯黑+琥珀金双色系、
2971
- * 像素方块造型、硬边无光晕、错位描边回声、CRT 扫描线、双色硬分割、街机纪念碑感。
2972
- * 整块蜂巢是「终端黑岛」:泳道/卡片用 --log-bg 深底(日夜两版都保持终端暗),
2973
- * 文字走 --log-text;金即 var(--accent)(墨金皮肤下为琥珀金)。
2996
+ /* ================= 蜂巢工作台视觉 v8(归行·蜂航) =================
2997
+ * 用户拍板:横向流程图不如原始的行排——布局回归纵向泳道行(容器横向布局、
2998
+ * 交错、双列芯片全部撤掉,行内角色/执行者/尾巴/计时全量展示交还基座),
2999
+ * 保留随肤精修:面板底泳道+顶部强调轨+六边形站序徽章+状态渐隐顶带+蜜光呼吸。
3000
+ * 行与行之间是纵向蜜线航线,活跃段的蜜蜂沿弧线俯冲向下一行(offset-path)。
2974
3001
  * 动画名(lane-in/cell-in/hc-breathe/bee-bob/flow-dot/ld-in)与 --d 级联不变——测试契约。 */
2975
3002
 
2976
- /* 蜂巢区标题:金色 mono + 拉宽字距,终端提示符气质 */
2977
- .rd-hive .sec-title { font-family: var(--mono); letter-spacing: .12em; }
3003
+ /* 区标题:正式无衬线,强调色只留给图标 */
3004
+ .rd-hive .sec-title { letter-spacing: .02em; }
2978
3005
  .rd-hive .sec-title .ico { color: var(--accent); }
2979
- .rd-hive .sec-title > span:not(.tag) { color: var(--accent); font-weight: 700; }
3006
+ .rd-hive .sec-title > span:not(.tag) { font-weight: 700; }
2980
3007
 
2981
- /* 泳道:终端黑面板 + CRT 扫描线 + 硬边金框 + 右下错位回声 */
3008
+ /* —— 泳道行:面板底 + 顶部悬浮强调轨(活跃轨呼吸),布局交还基座 —— */
2982
3009
  .hive-lane {
2983
- background: repeating-linear-gradient(0deg, rgba(0, 0, 0, .16) 0 1px, transparent 1px 3px),
2984
- var(--log-bg);
2985
- border: 1px solid color-mix(in srgb, var(--accent) 34%, transparent);
2986
- box-shadow: 4px 4px 0 0 color-mix(in srgb, var(--accent) 15%, transparent);
2987
- color: var(--log-text);
3010
+ position: relative;
3011
+ border-radius: 12px; padding: 10px 12px;
3012
+ background: linear-gradient(180deg,
3013
+ color-mix(in srgb, var(--accent) 3%, var(--panel)), var(--panel) 58%);
3014
+ }
3015
+ .hive-lane::before {
3016
+ content: ""; position: absolute; top: 0; left: 16px; right: 16px; height: 2px;
3017
+ border-radius: 2px; pointer-events: none;
3018
+ background: linear-gradient(90deg,
3019
+ color-mix(in srgb, var(--accent) 40%, transparent), transparent 78%);
3020
+ opacity: .5;
2988
3021
  }
2989
3022
  .hive-lane.lane-active {
2990
- border-color: color-mix(in srgb, var(--accent) 68%, transparent);
2991
- box-shadow: 4px 4px 0 0 color-mix(in srgb, var(--accent) 30%, transparent);
3023
+ border-color: color-mix(in srgb, var(--accent) 40%, var(--border));
3024
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 14%, transparent),
3025
+ 0 8px 22px color-mix(in srgb, var(--accent) 9%, transparent);
2992
3026
  }
2993
- .hive-lane.lane-idle { opacity: .6; }
2994
- .hive-lane.lane-done { opacity: .88; }
2995
- .lane-name {
2996
- color: var(--log-text); font-weight: 800;
2997
- text-shadow: 2px 2px 0 color-mix(in srgb, var(--accent) 22%, transparent);
3027
+ .hive-lane.lane-active::before {
3028
+ background: linear-gradient(90deg, var(--accent),
3029
+ color-mix(in srgb, var(--accent) 45%, transparent) 62%, transparent);
3030
+ opacity: .9;
2998
3031
  }
2999
- .lane-n, .lane-prog { color: color-mix(in srgb, var(--log-text) 62%, transparent); }
3000
- .lane-head { gap: 8px; margin-bottom: 7px; }
3001
-
3002
- /* 站序徽章:金底黑字硬方块(像素字块),自带错位回声 */
3003
- .lane-idx {
3004
- background: var(--accent); color: var(--log-bg);
3005
- border: none; border-radius: 0; padding: 3px 5px;
3006
- font: 700 10px/1 var(--mono); letter-spacing: .1em; flex: none;
3007
- box-shadow: 2px 2px 0 0 color-mix(in srgb, var(--accent) 38%, transparent);
3032
+ @media (prefers-reduced-motion: no-preference) {
3033
+ .hive-lane.lane-active::before { animation: lane-rail 2.6s ease-in-out infinite; }
3008
3034
  }
3035
+ @keyframes lane-rail { 50% { opacity: .4; } }
3009
3036
 
3010
- /* 轨道:像素方块序列(settled=实心色块,run=终端光标式双色闪烁)+ 硬色点轨 */
3011
- .lane-track { position: relative; }
3012
- .lane-track::before {
3013
- content: ""; position: absolute; left: 4px; width: calc(100% - 8px); top: 50%; height: 2px;
3014
- background: color-mix(in srgb, var(--accent) 22%, transparent); opacity: 1;
3037
+ /* 泳道头:六边形站序徽章 + 名称 + 读数;「进行中」胶囊靠右 */
3038
+ .lane-head { flex-wrap: wrap; gap: 5px 8px; margin-bottom: 7px; }
3039
+ .lane-name {
3040
+ min-width: 0; font-weight: 700; letter-spacing: .01em;
3041
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
3015
3042
  }
3016
- .ld {
3017
- width: 8px; height: 8px; border-radius: 0; clip-path: none;
3018
- background: color-mix(in srgb, var(--accent) 75%, transparent);
3043
+ .lane-n { font-family: var(--mono); flex: none; }
3044
+ .lane-prog {
3045
+ font-family: var(--mono); font-size: 10.5px; color: var(--muted);
3046
+ border: 1px solid var(--border); border-radius: 999px; padding: 0 7px; line-height: 15px;
3019
3047
  }
3020
- .ld-done { background: var(--accent); }
3021
- .ld-fail { background: var(--bad, #e5484d); }
3022
- .ld-time { background: var(--accent2); }
3023
- .ld-cancel { background: var(--warn); }
3024
- .ld-run { animation: ld-blink .9s steps(1) infinite; }
3025
- @keyframes ld-blink {
3026
- 0%, 49% { background: var(--accent); }
3027
- 50%, 100% { background: var(--accent2); }
3048
+ .lane-idx {
3049
+ width: 30px; height: 26px; display: inline-flex; align-items: center; justify-content: center;
3050
+ background: color-mix(in srgb, var(--accent) 14%, var(--panel)); color: var(--accent);
3051
+ clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
3052
+ border: none; border-radius: 0; padding: 0;
3053
+ font: 700 10px/1 var(--mono); letter-spacing: .06em; flex: none;
3054
+ }
3055
+ .hive-lane .lane-live {
3056
+ border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent);
3057
+ border-radius: 999px; padding: 0 7px; line-height: 16px; font-size: 10.5px;
3058
+ background: color-mix(in srgb, var(--accent) 9%, transparent);
3028
3059
  }
3029
3060
 
3030
- /* 卡片:终端黑卡 + 金硬边 + 错位回声;悬停=街机按钮按压(回声收拢、位移吃进) */
3031
- .hive-cell {
3032
- background: color-mix(in srgb, var(--log-bg) 88%, transparent);
3033
- border: 1px solid color-mix(in srgb, var(--accent) 28%, transparent);
3034
- border-radius: 4px;
3035
- box-shadow: 3px 3px 0 0 color-mix(in srgb, var(--accent) 14%, transparent);
3036
- color: var(--log-text);
3037
- }
3038
- .hive-cell:hover {
3039
- transform: translate(2px, 2px);
3040
- box-shadow: 0 0 0 0 transparent;
3041
- border-color: color-mix(in srgb, var(--accent) 62%, transparent);
3061
+ /* 轨道:细连线铺底,圆点 position 抬到线上方(连线不穿过点) */
3062
+ .lane-track { position: relative; margin: 1px 0 8px; }
3063
+ .lane-track::before {
3064
+ content: ""; position: absolute; left: 5px; right: 5px; top: 50%; height: 1px;
3065
+ background: var(--border);
3042
3066
  }
3043
- /* 顶部状态带:双色硬分割(Hermes 签名的水平断裂色带,55% 处硬切) */
3067
+ .ld { position: relative; }
3068
+
3069
+ /* 卡片:皮肤面板底 + 状态渐隐顶带;悬停轻抬 + 柔和强调影(不做街机按压) */
3044
3070
  .hive-cell::before {
3045
3071
  content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px;
3046
- border-radius: 0; background: transparent;
3072
+ border-radius: 10px 10px 0 0; pointer-events: none;
3073
+ background: linear-gradient(90deg, var(--accent), color-mix(in srgb, var(--accent) 25%, transparent));
3074
+ opacity: .9;
3047
3075
  }
3048
- .hive-cell.st-running::before {
3049
- background: linear-gradient(90deg, var(--accent) 0 55%, var(--accent2) 55% 100%); }
3050
3076
  .hive-cell.st-done::before {
3051
- background: linear-gradient(90deg, var(--ok) 0 55%,
3052
- color-mix(in srgb, var(--ok) 50%, var(--log-bg)) 55% 100%); }
3077
+ background: linear-gradient(90deg, var(--ok), color-mix(in srgb, var(--ok) 25%, transparent));
3078
+ }
3053
3079
  .hive-cell.st-failed::before {
3054
- background: linear-gradient(90deg, var(--bad, #e5484d) 0 55%,
3055
- color-mix(in srgb, var(--bad, #e5484d) 50%, var(--log-bg)) 55% 100%); }
3080
+ background: linear-gradient(90deg, var(--bad, #e5484d),
3081
+ color-mix(in srgb, var(--bad, #e5484d) 25%, transparent));
3082
+ }
3056
3083
  .hive-cell.st-timeout::before {
3057
- background: linear-gradient(90deg, var(--accent2) 0 55%, var(--warn) 55% 100%); }
3084
+ background: linear-gradient(90deg, var(--accent2, var(--warn)), transparent);
3085
+ }
3058
3086
  .hive-cell.st-cancelled::before {
3059
- background: linear-gradient(90deg, var(--warn) 0 55%,
3060
- color-mix(in srgb, var(--warn) 50%, var(--log-bg)) 55% 100%); }
3061
- .hc-role { color: var(--log-text); font-family: var(--mono); font-size: 12px; }
3062
- .hc-who { color: color-mix(in srgb, var(--log-text) 55%, transparent); }
3063
- .hc-meta { color: color-mix(in srgb, var(--log-text) 55%, transparent); }
3064
- .hc-tail {
3065
- color: color-mix(in srgb, var(--log-text) 78%, transparent);
3066
- background: rgba(0, 0, 0, .32);
3067
- border: 1px solid color-mix(in srgb, var(--accent) 12%, transparent);
3068
- border-radius: 0; padding: 3px 6px; margin-top: 6px;
3087
+ background: linear-gradient(90deg, var(--warn, #d97706), transparent);
3088
+ }
3089
+ .hive-cell.st-running {
3090
+ background: linear-gradient(180deg,
3091
+ color-mix(in srgb, var(--accent) 5%, var(--panel)), var(--panel) 72%);
3092
+ border-color: color-mix(in srgb, var(--accent) 42%, var(--border));
3093
+ }
3094
+ .hive-cell:hover {
3095
+ transform: translateY(-2px);
3096
+ box-shadow: 0 6px 16px color-mix(in srgb, var(--accent) 15%, transparent),
3097
+ 0 1px 3px color-mix(in srgb, var(--text) 10%, transparent);
3069
3098
  }
3070
- .hive-cell.st-done { opacity: .78; }
3071
3099
 
3072
- /* 呼吸重定义:无光晕的硬边呼吸(动画名不变,测试契约) */
3100
+ /* 呼吸重定义:细环 + 环境蜜光一涨一收(动画名不变,测试契约) */
3073
3101
  @keyframes hc-breathe {
3074
- 0%, 100% {
3075
- border-color: color-mix(in srgb, var(--accent) 28%, transparent);
3076
- box-shadow: 3px 3px 0 0 color-mix(in srgb, var(--accent) 14%, transparent);
3077
- }
3102
+ 0%, 100% { box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 22%, transparent); }
3078
3103
  50% {
3079
- border-color: color-mix(in srgb, var(--accent) 72%, transparent);
3080
- box-shadow: 3px 3px 0 0 color-mix(in srgb, var(--accent) 30%, transparent);
3104
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 48%, transparent),
3105
+ 0 4px 18px color-mix(in srgb, var(--accent) 16%, transparent);
3081
3106
  }
3082
3107
  }
3083
- .hive-cell.st-running {
3084
- border-color: color-mix(in srgb, var(--accent) 45%, transparent);
3085
- box-shadow: 3px 3px 0 0 color-mix(in srgb, var(--accent) 20%, transparent);
3086
- }
3087
3108
 
3088
- /* 彗尾:方形光标像素 + 硬色回声拖尾(非光晕) */
3089
- .lane-flow::after {
3090
- width: 8px; height: 8px; margin-top: -4px; border-radius: 0;
3091
- background: var(--accent);
3092
- box-shadow: -4px 0 0 0 color-mix(in srgb, var(--accent2) 75%, transparent),
3093
- -8px 0 0 0 color-mix(in srgb, var(--accent2) 38%, transparent);
3109
+ /* 文本:正式无衬线标题;尾巴保持 mono(日志语义)收进软底胶囊 */
3110
+ .hc-role { font-size: 12.5px; letter-spacing: .01em; }
3111
+ .hc-tail {
3112
+ background: color-mix(in srgb, var(--text) 4%, transparent);
3113
+ border-radius: 6px; padding: 3px 7px; margin-top: 6px;
3114
+ color: color-mix(in srgb, var(--text) 76%, var(--muted));
3115
+ }
3116
+ .hive-cell .hc-live {
3117
+ background: color-mix(in srgb, var(--accent) 9%, transparent);
3094
3118
  }
3095
3119
 
3096
- /* 「工作中」胶囊:方角化,终端徽章感 */
3097
- .hive-cell .hc-live { border-radius: 2px; }
3120
+ /* —— 行间航线:纵向蜜线 + 箭尖;活跃段的蜜蜂俯冲向下一行 —— */
3121
+ .lane-flow {
3122
+ position: relative; height: 44px; width: 36px;
3123
+ margin: 2px 0 2px 10px;
3124
+ }
3125
+ .lane-flow::before { display: none; } /* 直线虚线由 SVG 蜜线替代 */
3126
+ .flow-line { position: absolute; inset: 0; width: 100%; height: 100%; }
3127
+ .flow-line-up { display: none; } /* 行排恒为下行线 */
3128
+ .flow-line .flow-path {
3129
+ fill: none; stroke: var(--border-strong); stroke-width: 1.5;
3130
+ stroke-dasharray: 5 6; stroke-linecap: round;
3131
+ }
3132
+ .flow-line .flow-tip {
3133
+ fill: none; stroke: var(--border-strong); stroke-width: 1.5;
3134
+ stroke-linecap: round; stroke-linejoin: round; opacity: .65;
3135
+ }
3136
+ .hive-lane.lane-active + .lane-flow .flow-path,
3137
+ .hive-lane.lane-active + .lane-flow .flow-tip {
3138
+ stroke: color-mix(in srgb, var(--accent) 62%, var(--border-strong));
3139
+ }
3140
+ .hive-lane.lane-active + .lane-flow .flow-tip { opacity: .95; }
3141
+ @media (prefers-reduced-motion: no-preference) {
3142
+ .hive-lane.lane-active + .lane-flow .flow-path { animation: lane-dash 1.2s linear infinite; }
3143
+ .hive-lane.lane-active + .lane-flow .flow-bee { animation: bee-fly 2s ease-in-out infinite; }
3144
+ }
3145
+ @keyframes lane-dash { to { stroke-dashoffset: -11; } }
3098
3146
 
3099
- /* 高对比皮肤:扫描线/回声按其设计意图关闭 */
3100
- html[data-skin="contrast"] .hive-lane { background: var(--log-bg); box-shadow: none; }
3101
- html[data-skin="contrast"] .hive-cell,
3102
- html[data-skin="contrast"] .lane-idx { box-shadow: none; }
3103
- .lane-cells { grid-template-columns: repeat(auto-fill, minmax(178px, 1fr)); }
3147
+ /* 彗尾:flow-dot 契约(名字 + box-shadow)——沿纵向弧线 offset-distance 俯冲 */
3148
+ .lane-flow::after {
3149
+ content: ""; position: absolute; top: 0; left: 0; margin: 0;
3150
+ width: 7px; height: 7px; border-radius: 50%;
3151
+ background: var(--accent); opacity: 0; offset-rotate: 0deg;
3152
+ offset-path: path("M14 2 C14 16 22 28 22 42");
3153
+ box-shadow: 0 -4px 6px 0 color-mix(in srgb, var(--accent) 50%, transparent),
3154
+ 0 -8px 9px 0 color-mix(in srgb, var(--accent) 22%, transparent);
3155
+ }
3156
+ @keyframes flow-dot {
3157
+ 0% { offset-distance: 0%; opacity: 0; }
3158
+ 10% { opacity: 1; } 60% { opacity: 1; } 92% { opacity: 1; }
3159
+ 100% { offset-distance: 100%; opacity: 0; }
3160
+ }
3161
+
3162
+ /* 蜜蜂:同一条弧线俯冲(图标朝向不依赖 offset-rotate,关键帧小幅摆动) */
3163
+ .flow-bee {
3164
+ position: absolute; top: 0; left: 0; margin: 0;
3165
+ width: 16px; height: 16px; opacity: 0; pointer-events: none;
3166
+ color: var(--accent); offset-rotate: 0deg;
3167
+ offset-path: path("M14 2 C14 16 22 28 22 42");
3168
+ filter: drop-shadow(0 2px 5px color-mix(in srgb, var(--accent) 35%, transparent));
3169
+ }
3170
+ .flow-bee img { width: 100%; height: 100%; }
3171
+ /* 写实小蜂(icons/bee.svg,自带扇翅动画):格内 15px + 主题色微光 */
3172
+ .hive-cell .hc-bee { width: 15px; height: 15px; flex: none; }
3173
+ .hive-cell.st-running .hc-bee {
3174
+ filter: drop-shadow(0 1px 3px color-mix(in srgb, var(--accent) 45%, transparent));
3175
+ }
3176
+ @keyframes bee-fly {
3177
+ 0% { offset-distance: 0%; opacity: 0; transform: rotate(-8deg); }
3178
+ 12% { opacity: 1; }
3179
+ 30% { transform: rotate(7deg); }
3180
+ 55% { transform: rotate(-6deg); }
3181
+ 80% { transform: rotate(6deg); }
3182
+ 90% { opacity: 1; }
3183
+ 100% { offset-distance: 100%; opacity: 0; transform: rotate(-4deg); }
3184
+ }
3104
3185
 
3105
3186
  /* 报告里的 md 围栏代码块走 codeBlockHTML(.code-block 行号表格):
3106
3187
  抵消 .report td 的表格边框/内距,避免代码格画成九宫格 */
@@ -3123,257 +3204,1077 @@ html[data-skin="contrast"] .lane-idx { box-shadow: none; }
3123
3204
  border-color: var(--accent); color: var(--accent);
3124
3205
  }
3125
3206
 
3126
- /* ================= CodeBee 工作台重构 =================
3127
- * 这层只消费既有皮肤变量,保留 app.js 的换肤、状态、SSE 和详情结构。
3128
- * 目标是把原本偏终端化的视觉,收束为适合长期使用的正式工作台。 */
3129
- :root {
3130
- --cb-font: "Microsoft YaHei UI", "Microsoft YaHei", "PingFang SC", "Noto Sans CJK SC", sans-serif;
3131
- --cb-display: "Microsoft YaHei UI", "Microsoft YaHei", "PingFang SC", "Noto Sans CJK SC", sans-serif;
3132
- --cb-surface: color-mix(in srgb, var(--panel) 92%, transparent);
3133
- --cb-surface-soft: color-mix(in srgb, var(--panel2) 72%, transparent);
3134
- --cb-accent-soft: color-mix(in srgb, var(--accent) 10%, var(--panel));
3135
- --cb-accent-line: color-mix(in srgb, var(--accent) 34%, var(--border));
3136
- --cb-shadow: 0 10px 26px color-mix(in srgb, var(--text) 6%, transparent);
3207
+ /* 关于与更新:更新内容展示块(relnotes/whatsnew 共用) */
3208
+ .su-notes {
3209
+ white-space: pre-wrap;
3210
+ font-size: 12px;
3211
+ line-height: 1.55;
3212
+ margin: 6px 0 0;
3213
+ padding: 10px 12px;
3214
+ border: 1px solid var(--border, rgba(128, 128, 128, .25));
3215
+ border-radius: 8px;
3216
+ background: var(--bg-soft, rgba(128, 128, 128, .06));
3217
+ font-family: inherit;
3218
+ max-height: 40vh;
3219
+ overflow: auto;
3137
3220
  }
3138
3221
 
3222
+ /* —— 日志抽屉精修(点蜂巢格弹出/再点收起的逐步输出框):告别终端黑岛,随肤一体 ——
3223
+ * 契约不动:#rd-log/.hidden 开合、#rd-log-text pre 自动跟底、状态条各 id 原样 */
3224
+ #run-detail #rd-log.rd-logdrawer {
3225
+ border: 1px solid color-mix(in srgb, var(--border) 72%, var(--accent) 28%);
3226
+ border-bottom: none;
3227
+ border-radius: 12px 12px 0 0;
3228
+ background: var(--panel);
3229
+ box-shadow: 0 -10px 30px color-mix(in srgb, var(--text) 12%, transparent),
3230
+ 0 -2px 8px color-mix(in srgb, var(--accent) 8%, transparent);
3231
+ }
3232
+ #run-detail #rd-log.rd-logdrawer .log-live-bar {
3233
+ background: linear-gradient(180deg,
3234
+ color-mix(in srgb, var(--accent) 6%, var(--panel2)), var(--panel2));
3235
+ border-bottom: 1px solid var(--border);
3236
+ }
3237
+ #run-detail #rd-log.rd-logdrawer .log-live-bar > .ico { color: var(--accent); }
3238
+ #run-detail #rd-log.rd-logdrawer .rd-log-step { color: var(--accent); }
3239
+ #run-detail #rd-log.rd-logdrawer pre {
3240
+ color: color-mix(in srgb, var(--text) 88%, var(--muted));
3241
+ font-size: 12.5px;
3242
+ line-height: 1.65;
3243
+ background:
3244
+ linear-gradient(180deg, color-mix(in srgb, var(--accent) 3%, transparent), transparent 90px),
3245
+ var(--panel);
3246
+ }
3247
+ @media (prefers-reduced-motion: no-preference) {
3248
+ #run-detail #rd-log.rd-logdrawer:not(.hidden) { animation: cb-drawer-up .26s cubic-bezier(.22, .9, .3, 1); }
3249
+ }
3250
+ @keyframes cb-drawer-up {
3251
+ from { transform: translateY(16px); opacity: .35; }
3252
+ to { transform: translateY(0); opacity: 1; }
3253
+ }
3254
+ /* ================================================================
3255
+ 2026 refresh · editorial control room
3256
+ The existing UI has a wide feature surface; this layer sharpens the
3257
+ hierarchy without changing any DOM hooks or application behaviour.
3258
+ ================================================================ */
3259
+ :root {
3260
+ --font-ui: "Aptos", "Segoe UI", sans-serif;
3261
+ --font-display: "Aptos Display", "Trebuchet MS", sans-serif;
3262
+ --r-lg: 20px;
3263
+ --r-md: 14px;
3264
+ --r-sm: 10px;
3265
+ --shadow: 0 18px 48px rgba(7, 19, 38, .16);
3266
+ }
3267
+
3268
+ html[data-theme="light"]:not([data-skin]), html[data-theme="light"][data-skin="classic"] {
3269
+ --bg: #f4f7fb;
3270
+ --sidebar: #eef3f8;
3271
+ --panel: rgba(255, 255, 255, .88);
3272
+ --panel2: #eaf0f6;
3273
+ --border: rgba(21, 49, 78, .11);
3274
+ --border-strong: rgba(21, 49, 78, .24);
3275
+ --text: #10253d;
3276
+ --muted: #63758b;
3277
+ --accent: #167dce;
3278
+ --accent2: #7858de;
3279
+ --ok: #139878;
3280
+ --shadow: 0 18px 48px rgba(24, 54, 89, .10);
3281
+ }
3282
+
3283
+ html[data-theme="dark"]:not([data-skin]), html[data-theme="dark"][data-skin="classic"] {
3284
+ --bg: #091522;
3285
+ --sidebar: #0b1c2c;
3286
+ --panel: rgba(15, 34, 53, .88);
3287
+ --panel2: #132c43;
3288
+ --border: rgba(194, 223, 249, .12);
3289
+ --border-strong: rgba(194, 223, 249, .24);
3290
+ --text: #edf6ff;
3291
+ --muted: #92a9bf;
3292
+ --accent: #53b9f5;
3293
+ --accent2: #a28af5;
3294
+ --shadow: 0 22px 60px rgba(0, 0, 0, .30);
3295
+ }
3296
+ /* Keep the refreshed surfaces consistent across the selectable palettes. */
3297
+ html[data-theme="light"][data-skin], html[data-theme="dark"][data-skin] {
3298
+ --font-ui: "Aptos", "Segoe UI", sans-serif;
3299
+ --font-display: "Aptos Display", "Trebuchet MS", sans-serif;
3300
+ --r-lg: 20px; --r-md: 14px; --r-sm: 10px;
3301
+ }
3302
+
3303
+ html, body { font-family: var(--font-ui); }
3139
3304
  body {
3140
- font-family: var(--cb-font);
3141
- font-size: 14px;
3142
- line-height: 1.7;
3143
- letter-spacing: 0;
3144
- background: var(--bg);
3305
+ background:
3306
+ radial-gradient(circle at 16% 4%, color-mix(in srgb, var(--accent) 11%, transparent), transparent 30rem),
3307
+ radial-gradient(circle at 86% 10%, color-mix(in srgb, var(--accent2) 9%, transparent), transparent 34rem),
3308
+ var(--bg);
3309
+ letter-spacing: .005em;
3145
3310
  }
3146
- html[data-theme="light"] body {
3147
- background-color: color-mix(in srgb, var(--bg) 93%, var(--accent) 7%);
3148
- background-image: linear-gradient(180deg, color-mix(in srgb, var(--accent) 4%, transparent), transparent 240px);
3311
+ body::before {
3312
+ content: "";
3313
+ position: fixed; inset: 0; pointer-events: none; z-index: -1;
3314
+ opacity: .32;
3315
+ background-image: linear-gradient(color-mix(in srgb, var(--text) 3%, transparent) 1px, transparent 1px),
3316
+ linear-gradient(90deg, color-mix(in srgb, var(--text) 3%, transparent) 1px, transparent 1px);
3317
+ background-size: 44px 44px;
3318
+ mask-image: linear-gradient(to bottom, #000, transparent 75%);
3149
3319
  }
3150
- html[data-skin="contrast"] body { background-image: none; }
3151
- html[data-skin="contrast"][data-theme="light"] body { background-color: #fff; }
3152
3320
 
3153
- #app { grid-template-columns: 272px 1fr; }
3321
+ #app { min-height: 100dvh; }
3154
3322
  #sidebar {
3155
- padding: 16px 13px 12px;
3156
- background: color-mix(in srgb, var(--sidebar) 94%, var(--accent) 6%);
3157
- border-right-color: color-mix(in srgb, var(--border) 80%, var(--accent) 20%);
3323
+ background: color-mix(in srgb, var(--sidebar) 90%, transparent);
3324
+ border-right: 1px solid var(--border);
3325
+ box-shadow: 12px 0 42px rgba(8, 30, 52, .08);
3326
+ backdrop-filter: blur(18px);
3158
3327
  }
3159
3328
  .brand {
3160
- min-height: 43px;
3161
- margin: 0 3px 8px;
3162
- padding: 7px 8px 13px;
3163
- border-bottom-color: color-mix(in srgb, var(--accent) 22%, var(--border));
3329
+ min-height: 54px; padding: 8px 12px 14px;
3330
+ border-bottom: 1px solid var(--border);
3331
+ position: relative;
3332
+ }
3333
+ .brand::before {
3334
+ content: ""; width: 26px; height: 26px; border-radius: 9px;
3335
+ display: inline-block; flex: none;
3336
+ background: linear-gradient(135deg, var(--accent), var(--accent2));
3337
+ box-shadow: 0 5px 14px color-mix(in srgb, var(--accent) 34%, transparent);
3338
+ }
3339
+ .brand::after {
3340
+ content: "✦"; position: absolute; left: 19px; top: 11px;
3341
+ color: #fff; font-size: 13px; font-weight: 700;
3164
3342
  }
3165
- .brand-name { font-family: var(--cb-display); font-size: 17px; font-weight: 700; letter-spacing: .025em; }
3343
+ .brand-name { font-family: var(--font-display); font-size: 17px; letter-spacing: .04em; }
3344
+ /* Keep the product wordmark intact; the refresh must not manufacture a second logo. */
3345
+ .brand::before, .brand::after { content: none; display: none; }
3346
+ .brand { min-height: 0; padding: 6px 8px 12px; }
3347
+ .brand-name { font-family: inherit; font-size: 15px; font-weight: 700; letter-spacing: .01em; color: var(--text); }
3166
3348
  .new-task {
3167
- min-height: 40px; padding: 9px 11px; margin: 0 0 6px;
3168
- background: var(--cb-accent-soft); border: 1px solid var(--cb-accent-line);
3169
- border-radius: 9px; color: var(--accent); font-weight: 600;
3170
- transition: transform .18s ease, background-color .18s ease, box-shadow .18s ease;
3171
- }
3172
- .new-task:hover { background: color-mix(in srgb, var(--accent) 16%, var(--panel)); box-shadow: 0 5px 14px color-mix(in srgb, var(--accent) 14%, transparent); }
3173
- .new-task:active { transform: translateY(1px); }
3174
- .side-search, .qitem, .stask, .sdir summary, .side-settings .set-item, .set-back { border-radius: 7px; }
3175
- .side-search, .qitem { color: var(--muted); }
3176
- .side-search:hover, .qitem:hover, .stask:hover, .sdir summary:hover,
3177
- .side-settings .set-item:hover, .set-back:hover { background: var(--cb-surface-soft); }
3178
- .stask { padding: 7px 8px; }
3179
- .stask.active, .side-settings .set-item.active {
3180
- background: var(--cb-accent-soft); color: var(--accent); box-shadow: inset 2px 0 0 var(--accent);
3181
- }
3182
- .stask.active .tm, .side-settings .set-item.active .ico { color: var(--accent); }
3183
- .side-label, .side-settings .set-group { font-size: 11px; font-weight: 700; letter-spacing: .08em; }
3184
- .side-foot { border-top-color: var(--border); padding-top: 12px; }
3185
-
3349
+ margin: 16px 4px 8px; min-height: 42px; border-radius: 12px;
3350
+ background: linear-gradient(110deg, var(--accent), color-mix(in srgb, var(--accent2) 82%, var(--accent)));
3351
+ color: #fff; border: 0; box-shadow: 0 9px 20px color-mix(in srgb, var(--accent) 24%, transparent);
3352
+ transition: transform .18s ease, box-shadow .18s ease;
3353
+ }
3354
+ .new-task:hover { transform: translateY(-1px); box-shadow: 0 12px 24px color-mix(in srgb, var(--accent) 34%, transparent); }
3355
+ .side-search { min-height: 38px; border-radius: 10px; background: color-mix(in srgb, var(--panel) 68%, transparent); }
3356
+ .side-quick { margin-top: 8px; }
3357
+ .qitem, .set-item { border-radius: 10px; min-height: 36px; transition: background .16s ease, color .16s ease, transform .16s ease; }
3358
+ .qitem:hover, .set-item:hover { transform: translateX(2px); }
3359
+ .qitem.active, .set-item.active { background: color-mix(in srgb, var(--accent) 13%, var(--panel)); color: var(--text); }
3360
+ .side-label { font-size: 10px; text-transform: uppercase; letter-spacing: .14em; font-weight: 700; }
3361
+ .side-tasks { padding-top: 3px; }
3362
+
3363
+ #mainwrap { background: transparent; }
3186
3364
  .topbar {
3187
- min-height: 57px; padding: 11px 28px;
3188
- background: color-mix(in srgb, var(--bg) 88%, transparent);
3189
- border-bottom-color: color-mix(in srgb, var(--border) 86%, var(--accent) 14%);
3190
- backdrop-filter: blur(16px);
3191
- }
3192
- .page-title { font-family: var(--cb-display); font-size: 16px; font-weight: 700; letter-spacing: .02em; }
3193
- .icon-btn, .foot-btn { border-radius: 7px; }
3194
- .pill { background: var(--cb-surface); border-color: var(--border); box-shadow: 0 1px 2px color-mix(in srgb, var(--text) 4%, transparent); }
3195
- .pill:hover { border-color: var(--cb-accent-line); color: var(--accent); }
3196
-
3197
- main { padding: 30px 36px 88px; }
3198
- .page { max-width: 1480px; gap: 24px; }
3199
- .subpage { gap: 24px; }
3200
- main .panel.wide { padding: 0; }
3201
- .panel-head {
3202
- margin-bottom: 18px; padding: 0 0 14px;
3203
- border-bottom-color: color-mix(in srgb, var(--border) 84%, var(--accent) 16%);
3365
+ min-height: 64px; padding: 12px 24px;
3366
+ background: color-mix(in srgb, var(--bg) 72%, transparent);
3367
+ border-bottom: 1px solid var(--border);
3368
+ backdrop-filter: blur(18px);
3369
+ position: sticky; top: 0; z-index: 10;
3204
3370
  }
3205
- .panel-head h2, h2 { font-family: var(--cb-display); font-size: 18px; font-weight: 700; letter-spacing: .02em; }
3206
- h3.sec-title, .sec-title { color: var(--muted); font-size: 11.5px; letter-spacing: .11em; }
3207
- .hint { line-height: 1.75; }
3371
+ .page-title { font-family: var(--font-display); font-size: 16px; letter-spacing: .02em; }
3372
+ .top-actions { gap: 8px; }
3373
+ .pill, .icon-btn { border-color: var(--border); background: color-mix(in srgb, var(--panel) 70%, transparent); transition: all .16s ease; }
3374
+ .pill:hover, .icon-btn:hover { border-color: var(--accent); color: var(--accent); transform: translateY(-1px); }
3375
+ .conn { border-radius: 999px; padding: 6px 10px; background: color-mix(in srgb, var(--ok) 12%, var(--panel)); font-size: 11px; }
3208
3376
 
3209
- input, select, textarea {
3210
- background: var(--cb-surface); border-color: var(--border);
3211
- border-radius: 8px; font-family: inherit;
3212
- transition: border-color .18s ease, box-shadow .18s ease, background-color .18s ease;
3377
+ main { padding: 28px clamp(16px, 4vw, 56px) 70px; }
3378
+ .page { gap: 22px; max-width: 1280px; }
3379
+ .panel {
3380
+ border: 1px solid var(--border); border-radius: var(--r-lg);
3381
+ background: linear-gradient(145deg, color-mix(in srgb, var(--panel) 96%, transparent), color-mix(in srgb, var(--panel2) 30%, transparent));
3382
+ box-shadow: var(--shadow); backdrop-filter: blur(18px);
3383
+ }
3384
+ .panel-head { padding: 20px 24px; border-bottom: 1px solid var(--border); }
3385
+ .panel-head h2, .detail-head h2 { font-family: var(--font-display); letter-spacing: -.01em; }
3386
+ .composer { padding: clamp(24px, 4vw, 42px); position: relative; overflow: hidden; }
3387
+ .composer::after {
3388
+ content: ""; position: absolute; width: 250px; height: 250px; right: -80px; top: -120px;
3389
+ border-radius: 50%; border: 1px solid color-mix(in srgb, var(--accent) 22%, transparent);
3390
+ box-shadow: 0 0 0 24px color-mix(in srgb, var(--accent) 4%, transparent), 0 0 0 48px color-mix(in srgb, var(--accent) 3%, transparent);
3391
+ pointer-events: none;
3392
+ }
3393
+ .hero { font-family: var(--font-display); font-size: clamp(24px, 3vw, 34px); line-height: 1.12; letter-spacing: -.035em; }
3394
+ .hero-sub { max-width: 680px; font-size: 14px; line-height: 1.65; color: var(--muted); }
3395
+ .cmp-pills { gap: 10px; }
3396
+ .cmp-pills .type-pick, .cmp-wd { min-height: 42px; border-radius: 12px; background: color-mix(in srgb, var(--panel2) 66%, transparent); border-color: var(--border); }
3397
+ .cmp-box { margin-top: 14px; border-radius: 16px; background: color-mix(in srgb, var(--panel) 72%, transparent); border-color: var(--border-strong); box-shadow: inset 0 1px 0 rgba(255,255,255,.06); transition: border .18s, box-shadow .18s; }
3398
+ .cmp-box:focus-within { border-color: var(--accent); box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 14%, transparent), inset 0 1px 0 rgba(255,255,255,.08); }
3399
+ .cmp-box textarea { min-height: 92px; font-size: 15px; line-height: 1.6; }
3400
+ .cmp-send .primary { width: 40px; height: 40px; box-shadow: 0 6px 16px color-mix(in srgb, var(--accent) 30%, transparent); }
3401
+ .cmp-chip { border-radius: 999px; min-height: 30px; background: color-mix(in srgb, var(--panel2) 52%, transparent); transition: all .16s ease; }
3402
+ .cmp-chip:hover { transform: translateY(-1px); }
3403
+
3404
+ .card { border-radius: 14px; background: color-mix(in srgb, var(--panel) 58%, transparent); transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease; }
3405
+ .card:hover { transform: translateY(-2px); border-color: color-mix(in srgb, var(--accent) 45%, var(--border)); box-shadow: 0 10px 24px rgba(7, 24, 45, .10); }
3406
+ .seg { padding: 4px; border-radius: 12px; background: color-mix(in srgb, var(--panel2) 70%, transparent); }
3407
+ .seg-btn { border-radius: 8px; }
3408
+ button.primary, button.new-task { font-weight: 700; }
3409
+ button:focus-visible, input:focus-visible, textarea:focus-visible, select:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
3410
+
3411
+ @keyframes cb-rise { from { opacity: 0; transform: translateY(7px); } to { opacity: 1; transform: none; } }
3412
+ .panel { animation: cb-rise .42s ease both; }
3413
+ .panel:nth-child(2) { animation-delay: .05s; }
3414
+ .panel:nth-child(3) { animation-delay: .1s; }
3415
+
3416
+ @media (max-width: 760px) {
3417
+ .topbar { padding: 10px 14px; }
3418
+ .top-actions .pill:not(.ctrl), .top-actions .conn { display: none; }
3419
+ main { padding: 16px 12px 48px; }
3420
+ .composer { padding: 22px 16px; }
3421
+ .hero-row { align-items: flex-start; flex-direction: column; }
3422
+ .hero { font-size: 25px; }
3423
+ .cmp-wd { flex-basis: 100%; }
3424
+ .panel-head { padding: 16px; }
3213
3425
  }
3214
- input:hover, select:hover, textarea:hover { background: var(--panel); border-color: var(--border-strong); }
3215
- input:focus, select:focus, textarea:focus {
3216
- border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 11%, transparent);
3426
+
3427
+ /* The log is a stable bottom utility, so opening a step never reflows the hive. */
3428
+ #run-detail #rd-log.rd-logdrawer {
3429
+ position: fixed;
3430
+ left: calc(264px + clamp(16px, 4vw, 56px));
3431
+ right: clamp(16px, 4vw, 56px);
3432
+ bottom: 16px;
3433
+ z-index: 50;
3434
+ width: auto;
3435
+ max-height: min(46vh, 430px);
3436
+ margin: 0;
3437
+ border: 1px solid var(--border-strong);
3438
+ border-radius: 14px;
3439
+ box-shadow: 0 18px 48px rgba(6, 18, 35, .28), 0 0 0 1px color-mix(in srgb, var(--accent) 8%, transparent);
3440
+ }
3441
+ body.side-collapsed #run-detail #rd-log.rd-logdrawer { left: clamp(16px, 4vw, 56px); }
3442
+ #run-detail #rd-log.rd-logdrawer { right: clamp(16px, 4vw, 56px); }
3443
+ body.inspector-open #run-detail #rd-log.rd-logdrawer {
3444
+ right: calc(340px + clamp(16px, 4vw, 56px));
3445
+ }
3446
+ #run-detail #rd-log.rd-logdrawer pre { max-height: min(40vh, 360px); }
3447
+ @media (max-width: 900px) {
3448
+ #run-detail #rd-log.rd-logdrawer {
3449
+ left: 12px; right: 12px; z-index: 50;
3450
+ }
3451
+ body.inspector-open #run-detail #rd-log.rd-logdrawer { right: 12px; }
3217
3452
  }
3218
- button { font-family: inherit; }
3219
- button.primary {
3220
- border-radius: 8px; font-weight: 600; letter-spacing: .01em;
3221
- box-shadow: 0 4px 12px color-mix(in srgb, var(--accent) 20%, transparent);
3222
- }
3223
- button.ghost, button.danger { border-radius: 8px; }
3224
- button.ghost:hover { border-color: var(--cb-accent-line); color: var(--accent); background: var(--cb-accent-soft); }
3225
-
3226
- /* 首页任务创建:保留原表单功能,将其组织成一个稳定的操作面。 */
3227
- .composer { max-width: 1180px; margin: 28px auto 0; }
3228
- .hero-row { align-items: flex-end; }
3229
- #cmp-greet { font-family: var(--cb-display); font-size: 26px; font-weight: 600; line-height: 1.4; letter-spacing: .015em; }
3230
- .hero-sub { font-size: 13px; max-width: 720px; }
3231
- .cmp-pills { gap: 9px; margin-top: 22px; }
3232
- .cmp-pills .type-pick, .cmp-wd { background: var(--cb-surface); border-color: var(--border); }
3233
- .cmp-pills .type-pick:hover, .cmp-wd:hover { border-color: var(--cb-accent-line); }
3234
- .cmp-box {
3235
- border-radius: 11px; padding: 8px 10px 9px; background: var(--cb-surface);
3236
- border-color: color-mix(in srgb, var(--border) 82%, var(--accent) 18%);
3237
- box-shadow: var(--cb-shadow);
3238
- }
3239
- .cmp-box:focus-within { box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 10%, transparent), var(--cb-shadow); }
3240
- .cmp-box textarea { min-height: 98px; font-size: 16px; }
3241
- .cmp-quick { margin-top: 14px; }
3242
- .cmp-chip { background: transparent; border-radius: 7px; }
3243
- .cmp-chip.on { background: var(--cb-accent-soft); }
3244
-
3245
- /* 全局数据面:运行记录、智能体、模型、自动化、市场和设置复用同一张工作卡。 */
3246
- .item, .card, .mcard, .opanel, .auto-tpl-card, .cs-preview, .skin-card, .bm-card {
3247
- background: var(--cb-surface); border-color: var(--border); border-radius: 10px;
3248
- box-shadow: 0 1px 2px color-mix(in srgb, var(--text) 3%, transparent);
3249
- transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease, background-color .2s ease;
3250
- }
3251
- .item:hover, .card:hover, .mcard:hover, .opanel:hover, .auto-tpl-card:hover, .skin-card:hover, .bm-card:hover {
3252
- background: var(--panel); border-color: var(--cb-accent-line);
3253
- box-shadow: var(--cb-shadow); transform: translateY(-2px);
3254
- }
3255
- .item { padding: 14px 16px; }
3256
- .item .name, .card .name { font-weight: 700; }
3257
- .cards { gap: 16px; }
3258
- .card { padding: 17px; }
3259
- .mcard { background: var(--cb-surface-soft); }
3260
- .tag, .chip, .stat { border-radius: 6px; }
3261
- .chip { padding: 3px 10px; font-weight: 700; }
3262
- .chip.running { background: color-mix(in srgb, var(--accent) 13%, var(--panel)); }
3263
- .usage-kpis { gap: 14px; }
3264
- .usage-kpi, .usage-single, .usage-donut, .usage-heat, .usage-recent-wrap { background: var(--cb-surface); border: 1px solid var(--border); border-radius: 10px; }
3265
- .usage-table th { background: var(--cb-surface-soft); }
3266
- .usage-table tr:hover td { background: color-mix(in srgb, var(--accent) 5%, transparent); }
3267
- .seg { background: var(--cb-surface-soft); border: 1px solid var(--border); border-radius: 8px; padding: 3px; }
3268
- .seg-btn { border-radius: 6px; }
3269
- .seg-btn.active { background: var(--panel); color: var(--accent); box-shadow: 0 1px 4px color-mix(in srgb, var(--text) 8%, transparent); }
3270
- .skin-grid { gap: 14px; }
3271
- .skin-card.active { border-color: var(--accent); box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 13%, transparent); }
3272
-
3273
- /* 运行详情:头部、指标和页签建立固定层级,信息可扫读。 */
3453
+ @media (max-width: 760px) {
3454
+ #run-detail #rd-log.rd-logdrawer {
3455
+ left: 12px; right: 12px; bottom: 12px; max-height: 52vh;
3456
+ border-radius: 12px;
3457
+ }
3458
+ #run-detail #rd-log.rd-logdrawer pre { max-height: calc(52vh - 42px); }
3459
+ }
3460
+ @media (prefers-reduced-motion: reduce) {
3461
+ *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; scroll-behavior: auto !important; }
3462
+ }
3463
+
3464
+ /* Hive cockpit refinement: summary counters, progress meters, and clearer scan order. */
3465
+ .rd-hive .sec-title { align-items: center; flex-wrap: wrap; gap: 8px; }
3466
+ #rd-hive-sub { display: inline-flex; align-items: center; gap: 5px; flex-wrap: wrap; margin-left: auto; }
3467
+ .hive-count {
3468
+ display: inline-flex; align-items: center; gap: 4px; min-height: 21px;
3469
+ padding: 2px 8px; border: 1px solid var(--border); border-radius: 999px;
3470
+ background: color-mix(in srgb, var(--panel2) 68%, transparent);
3471
+ color: var(--muted); font: 600 10px/1 var(--mono); letter-spacing: .02em;
3472
+ }
3473
+ .hive-count-live { color: var(--accent); border-color: color-mix(in srgb, var(--accent) 32%, var(--border)); background: color-mix(in srgb, var(--accent) 9%, transparent); }
3474
+ .hive-count-done { color: var(--ok); }
3475
+ .hive-count-issue { color: var(--bad); border-color: color-mix(in srgb, var(--bad) 34%, var(--border)); background: color-mix(in srgb, var(--bad) 8%, transparent); }
3476
+ .hive-count-total { color: var(--muted); }
3477
+ .hive-hint { color: var(--muted); font-size: 10.5px; opacity: .82; }
3478
+ .hive-cell:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
3479
+ .lane-head { align-items: center; }
3480
+ .lane-meter {
3481
+ display: inline-flex; width: clamp(48px, 10vw, 88px); height: 5px; overflow: hidden;
3482
+ margin-left: auto; border-radius: 999px; background: color-mix(in srgb, var(--text) 10%, transparent);
3483
+ }
3484
+ .lane-meter i { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg, var(--ok), var(--accent)); transition: width .35s ease; }
3485
+ .lane-active .lane-meter i { background: linear-gradient(90deg, var(--accent), var(--accent2)); }
3486
+ .lane-idle .lane-meter { opacity: .55; }
3487
+ .hive-cell .hc-tail { min-height: 1.3em; }
3488
+ @media (max-width: 680px) {
3489
+ .rd-hive .sec-title { align-items: flex-start; }
3490
+ #rd-hive-sub { width: 100%; margin-left: 0; }
3491
+ .hive-count { font-size: 9.5px; }
3492
+ .lane-meter { width: 56px; }
3493
+ }
3494
+
3495
+ /* Detail sections: one navigation language for chat, hive, steps, results, Git and bible. */
3496
+ #run-detail #rd-tabs {
3497
+ display: flex; align-items: center; gap: 4px; flex-wrap: nowrap;
3498
+ padding: 4px; margin: 0 0 18px; border: 1px solid var(--border);
3499
+ border-radius: 14px; background: color-mix(in srgb, var(--panel2) 58%, transparent);
3500
+ box-shadow: inset 0 1px 0 color-mix(in srgb, #fff 8%, transparent);
3501
+ overflow-x: auto; scrollbar-width: none;
3502
+ }
3503
+ #run-detail #rd-tabs::-webkit-scrollbar { display: none; }
3504
+ #run-detail #rd-tabs .rd-tab {
3505
+ position: relative; flex: 0 0 auto; min-height: 35px;
3506
+ display: inline-flex; align-items: center; justify-content: center; gap: 6px;
3507
+ padding: 7px 12px; border: 1px solid transparent; border-radius: 10px;
3508
+ background: transparent; color: var(--muted); font-size: 12.5px; font-weight: 600;
3509
+ transition: color .16s ease, background .16s ease, border-color .16s ease, box-shadow .16s ease;
3510
+ }
3511
+ #run-detail #rd-tabs .rd-tab .tab-ico {
3512
+ width: 14px; height: 14px; opacity: .72; transition: opacity .16s ease, color .16s ease;
3513
+ }
3514
+ #run-detail #rd-tabs .rd-tab:hover {
3515
+ color: var(--text); background: color-mix(in srgb, var(--panel) 66%, transparent);
3516
+ }
3517
+ #run-detail #rd-tabs .rd-tab:hover .tab-ico { opacity: 1; }
3518
+ #run-detail #rd-tabs .rd-tab.active {
3519
+ color: var(--accent); background: var(--panel);
3520
+ border-color: color-mix(in srgb, var(--accent) 26%, var(--border));
3521
+ box-shadow: 0 3px 10px color-mix(in srgb, var(--text) 8%, transparent);
3522
+ }
3523
+ #run-detail #rd-tabs .rd-tab.active .tab-ico { opacity: 1; color: var(--accent); }
3524
+ #run-detail #rd-tabs .rd-tab.active::after { display: none; }
3525
+ #run-detail #rd-tabs .rd-badge {
3526
+ min-width: 20px; justify-content: center; padding: 1px 6px; line-height: 16px;
3527
+ background: color-mix(in srgb, var(--text) 6%, transparent);
3528
+ border-color: var(--border); font-size: 10px;
3529
+ }
3530
+ #run-detail #rd-tabs .rd-tab.active .rd-badge {
3531
+ background: color-mix(in srgb, var(--accent) 12%, transparent);
3532
+ border-color: color-mix(in srgb, var(--accent) 34%, transparent);
3533
+ }
3534
+ #run-detail .rd-pane > .sec-title,
3535
+ #run-detail .rd-pane .bible-head,
3536
+ #run-detail .rd-pane .git-head,
3537
+ #run-detail .rd-pane .files-head {
3538
+ min-height: 34px; margin-top: 0; padding: 0 2px 10px;
3539
+ border-bottom: 1px solid var(--border);
3540
+ }
3541
+ #run-detail .rd-pane > .sec-title::after { background: color-mix(in srgb, var(--accent) 28%, var(--border)); }
3542
+ #run-detail .rd-pane[data-pane="steps"] #rd-steps,
3543
+ #run-detail .rd-pane[data-pane="result"] #rd-report,
3544
+ #run-detail .rd-pane[data-pane="git"] #rd-git,
3545
+ #run-detail .rd-pane[data-pane="bible"] #rd-bible,
3546
+ #run-detail .rd-pane[data-pane="bookmeta"] #rd-bookmeta {
3547
+ padding-top: 4px;
3548
+ }
3549
+ #run-detail .rd-pane[data-pane="git"] #rd-git,
3550
+ #run-detail .rd-pane[data-pane="bible"] #rd-bible,
3551
+ #run-detail .rd-pane[data-pane="bookmeta"] #rd-bookmeta {
3552
+ padding: 14px 16px 18px; border: 1px solid var(--border); border-radius: 14px;
3553
+ background: color-mix(in srgb, var(--panel) 66%, transparent);
3554
+ }
3555
+ @media (max-width: 620px) {
3556
+ #run-detail #rd-tabs { margin-bottom: 14px; border-radius: 12px; }
3557
+ #run-detail #rd-tabs .rd-tab { min-height: 33px; padding: 7px 10px; font-size: 12px; }
3558
+ #run-detail #rd-tabs .rd-tab .tab-ico { width: 13px; height: 13px; }
3559
+ #run-detail #rd-tabs { scrollbar-width: thin; }
3560
+ #run-detail #rd-tabs::-webkit-scrollbar { display: block; height: 4px; }
3561
+ #run-detail #rd-tabs::-webkit-scrollbar-thumb { background: color-mix(in srgb, var(--accent) 55%, var(--border-strong)); }
3562
+ }
3563
+
3564
+ /* Log output is a docked console, not a floating card over the current section. */
3565
+ #run-detail #rd-log.rd-logdrawer {
3566
+ position: fixed; left: calc(264px + clamp(16px, 4vw, 56px));
3567
+ right: clamp(16px, 4vw, 56px); bottom: 0; z-index: 50;
3568
+ max-height: min(32vh, 320px); margin: 0; padding: 0;
3569
+ border: 0; border-top: 1px solid color-mix(in srgb, var(--accent) 30%, var(--border));
3570
+ border-radius: 0; background: color-mix(in srgb, var(--panel) 94%, transparent);
3571
+ box-shadow: 0 -12px 30px color-mix(in srgb, var(--text) 10%, transparent);
3572
+ backdrop-filter: blur(18px);
3573
+ }
3574
+ body.side-collapsed #run-detail #rd-log.rd-logdrawer {
3575
+ left: clamp(16px, 4vw, 56px);
3576
+ }
3577
+ body.inspector-open #run-detail #rd-log.rd-logdrawer {
3578
+ right: calc(340px + clamp(16px, 4vw, 56px));
3579
+ }
3580
+ #run-detail #rd-log.rd-logdrawer .log-live-bar {
3581
+ min-height: 36px; padding: 7px clamp(14px, 2vw, 24px);
3582
+ background: color-mix(in srgb, var(--panel2) 72%, transparent);
3583
+ border-bottom: 1px solid var(--border);
3584
+ }
3585
+ #run-detail #rd-log.rd-logdrawer pre {
3586
+ max-height: min(28vh, 280px); margin: 0;
3587
+ padding: 10px clamp(14px, 2vw, 24px) 14px;
3588
+ background: transparent; border: 0; border-radius: 0;
3589
+ font-size: 12px; line-height: 1.6;
3590
+ }
3591
+ @media (max-width: 900px) {
3592
+ #run-detail #rd-log.rd-logdrawer {
3593
+ left: 0; right: 0; bottom: 0; max-height: 34vh;
3594
+ }
3595
+ body.inspector-open #run-detail #rd-log.rd-logdrawer { right: 0; }
3596
+ #run-detail #rd-log.rd-logdrawer pre { max-height: calc(34vh - 38px); }
3597
+ }
3598
+
3599
+ /* Composer 开跑前成本预估行(借鉴 omnigent):弱化小字,挂在快捷类型 chips 下方 */
3600
+ .cmp-estimate { margin: 6px 2px 0; font-size: 12px; opacity: .72; }
3601
+ .field-optional {
3602
+ margin-left: 6px; padding: 2px 7px; border: 1px solid var(--border);
3603
+ border-radius: 999px; color: var(--muted); font-size: 10px; font-weight: 500;
3604
+ }
3605
+ #bible-create-field {
3606
+ margin: 12px 0 14px; padding: 14px 16px 12px;
3607
+ border: 1px solid color-mix(in srgb, var(--accent2) 24%, var(--border));
3608
+ border-radius: 14px; background: color-mix(in srgb, var(--accent2) 5%, var(--panel));
3609
+ }
3610
+ #bible-create-field label { color: var(--text); }
3611
+ #bible-create-field label .ico { color: var(--accent2); }
3612
+ #bible-create-field textarea {
3613
+ min-height: 106px; resize: vertical; line-height: 1.6;
3614
+ background: color-mix(in srgb, var(--panel) 72%, transparent);
3615
+ }
3616
+ #bible-create-field .hint { margin: 7px 0 0; line-height: 1.45; }
3617
+
3618
+ /* ================================================================
3619
+ 2026-09 · quiet control room
3620
+ The product has many capabilities, so the surface should stay quiet:
3621
+ one alignment grid, flat page sections, and borders only where they
3622
+ communicate an interaction or a state.
3623
+ ================================================================ */
3624
+
3625
+ /* A clean canvas makes the hierarchy readable in every skin. */
3626
+ body {
3627
+ background: var(--bg);
3628
+ letter-spacing: 0;
3629
+ }
3630
+ body::before { display: none; }
3631
+ #sidebar {
3632
+ box-shadow: none;
3633
+ backdrop-filter: none;
3634
+ }
3635
+ #mainwrap { background: transparent; }
3636
+ main {
3637
+ padding: 28px clamp(18px, 3.2vw, 44px) 72px;
3638
+ }
3639
+ .page {
3640
+ width: 100%; max-width: 1280px; gap: 18px;
3641
+ }
3642
+ main .panel.wide {
3643
+ background: transparent;
3644
+ border: 0;
3645
+ box-shadow: none;
3646
+ border-radius: 0;
3647
+ }
3648
+
3649
+ /* New task: three controls on one baseline, with management as an inline
3650
+ action instead of a stray button box. */
3651
+ #sub-tasks .composer {
3652
+ padding: clamp(20px, 3vw, 38px) 0 26px;
3653
+ overflow: visible;
3654
+ }
3655
+ #sub-tasks .hero-row { align-items: center; }
3656
+ #sub-tasks .hero {
3657
+ font-size: clamp(24px, 3vw, 34px);
3658
+ font-weight: 400;
3659
+ letter-spacing: -.035em;
3660
+ }
3661
+ #sub-tasks .hero-sub { margin-bottom: 24px; }
3662
+ #sub-tasks .cmp-pills {
3663
+ display: grid;
3664
+ grid-template-columns: max-content max-content minmax(0, 1fr);
3665
+ align-items: center;
3666
+ gap: 10px;
3667
+ margin-bottom: 6px;
3668
+ }
3669
+ #sub-tasks .cmp-pills .type-pick,
3670
+ #sub-tasks .cmp-pills .cmp-wd {
3671
+ min-height: 40px;
3672
+ }
3673
+ #sub-tasks #btn-flows-mgr {
3674
+ align-self: center;
3675
+ min-height: 40px;
3676
+ padding: 0 8px;
3677
+ border: 0;
3678
+ border-radius: 8px;
3679
+ background: transparent;
3680
+ color: var(--muted);
3681
+ }
3682
+ #sub-tasks #btn-flows-mgr:hover {
3683
+ background: color-mix(in srgb, var(--accent) 8%, transparent);
3684
+ color: var(--accent);
3685
+ }
3686
+ #sub-tasks .cmp-wd {
3687
+ border: 0;
3688
+ border-bottom: 1px solid var(--border-strong);
3689
+ border-radius: 0;
3690
+ background: transparent;
3691
+ padding-inline: 2px;
3692
+ }
3693
+ #sub-tasks .cmp-wd:focus-within { border-color: var(--accent); }
3694
+ #sub-tasks .cmp-wd input { background: transparent; }
3695
+ #sub-tasks .cmp-box {
3696
+ margin-top: 18px;
3697
+ padding: 0;
3698
+ border: 0;
3699
+ border-top: 1px solid var(--border-strong);
3700
+ border-bottom: 1px solid var(--border-strong);
3701
+ border-radius: 0;
3702
+ background: transparent;
3703
+ box-shadow: none;
3704
+ }
3705
+ #sub-tasks .cmp-box:focus-within {
3706
+ border-color: var(--accent);
3707
+ box-shadow: none;
3708
+ }
3709
+ #sub-tasks .cmp-box textarea {
3710
+ min-height: 112px;
3711
+ padding: 16px 2px 8px;
3712
+ background: transparent;
3713
+ font-size: 15px;
3714
+ }
3715
+ #sub-tasks .cmp-bar {
3716
+ min-height: 44px;
3717
+ padding: 0;
3718
+ border-top: 1px solid var(--border);
3719
+ }
3720
+ #sub-tasks .cmp-quick {
3721
+ margin: 12px 0 2px;
3722
+ gap: 6px;
3723
+ }
3724
+ #sub-tasks .cmp-chip {
3725
+ min-height: 30px;
3726
+ padding-inline: 11px;
3727
+ background: transparent;
3728
+ }
3729
+ #sub-tasks details#f-advanced {
3730
+ margin-top: 16px;
3731
+ padding-top: 12px;
3732
+ }
3733
+ #sub-tasks details#f-advanced summary {
3734
+ font-size: 12.5px;
3735
+ color: var(--muted);
3736
+ }
3737
+ @media (max-width: 680px) {
3738
+ #sub-tasks .cmp-pills { grid-template-columns: max-content max-content; }
3739
+ #sub-tasks .cmp-pills .cmp-wd { grid-column: 1 / -1; }
3740
+ #sub-tasks .hero-row { align-items: flex-start; }
3741
+ }
3742
+
3743
+ /* Shared detail grid: title, metadata, tabs and every pane use the same edge. */
3274
3744
  #run-detail {
3275
- max-width: 1240px; margin: 0 auto; padding: 0;
3276
- animation: cb-detail-in .38s cubic-bezier(.2, .8, .2, 1) both;
3745
+ padding: 0 clamp(0px, 1.2vw, 18px) 30px;
3277
3746
  }
3278
- @keyframes cb-detail-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
3279
3747
  #run-detail .detail-head {
3280
- position: sticky; top: -30px; z-index: 5; padding: 16px 0 13px;
3281
- background: color-mix(in srgb, var(--bg) 92%, transparent); backdrop-filter: blur(16px);
3282
- border-bottom: 1px solid color-mix(in srgb, var(--border) 84%, var(--accent) 16%);
3748
+ min-height: 62px;
3749
+ margin: 0;
3750
+ padding: 16px 0 13px;
3751
+ align-items: center;
3752
+ }
3753
+ #run-detail .detail-head h2 {
3754
+ min-width: 0;
3755
+ line-height: 1.35;
3756
+ }
3757
+ #run-detail .rd-actions { align-items: center; }
3758
+ #run-detail .rd-meta-strip {
3759
+ min-height: 30px;
3760
+ margin: 0 0 14px;
3761
+ align-items: center;
3762
+ }
3763
+ #run-detail .rd-meta-strip .stat {
3764
+ display: inline-flex;
3765
+ align-items: center;
3766
+ min-height: 28px;
3767
+ background: transparent;
3768
+ }
3769
+ #run-detail #rd-tabs {
3770
+ gap: 2px;
3771
+ margin: 0 0 20px;
3772
+ padding: 0;
3773
+ border: 0;
3774
+ border-bottom: 1px solid var(--border);
3775
+ border-radius: 0;
3776
+ background: transparent;
3777
+ box-shadow: none;
3778
+ }
3779
+ #run-detail #rd-tabs .rd-tab {
3780
+ min-height: 38px;
3781
+ padding: 8px 12px 10px;
3782
+ border: 0;
3783
+ border-radius: 7px 7px 0 0;
3784
+ background: transparent;
3785
+ }
3786
+ #run-detail #rd-tabs .rd-tab:hover { background: color-mix(in srgb, var(--accent) 6%, transparent); }
3787
+ #run-detail #rd-tabs .rd-tab.active {
3788
+ color: var(--accent);
3789
+ background: transparent;
3790
+ box-shadow: none;
3283
3791
  }
3284
- #run-detail .detail-head h2 { font-family: var(--cb-display); font-size: 18px; font-weight: 700; line-height: 1.5; }
3285
- .rd-meta-strip { gap: 8px; margin: 17px 0 14px; }
3286
- .rd-meta-strip .stat { background: var(--cb-surface); border: 1px solid var(--border); padding: 5px 10px; }
3287
- .rd-tabs {
3288
- position: sticky; top: 61px; z-index: 4; margin: 0 -4px 18px; padding: 4px;
3289
- background: color-mix(in srgb, var(--bg) 90%, transparent); border-bottom: 1px solid var(--border);
3290
- backdrop-filter: blur(14px);
3291
- }
3292
- .rd-tab { min-height: 34px; padding: 7px 13px; border-radius: 7px; }
3293
- .rd-tab.active { background: var(--cb-accent-soft); }
3294
- .rd-tab.active::after { display: none; }
3295
- .rd-main { gap: 16px; }
3296
- .rd-pane { animation: cb-pane-in .28s ease both; }
3297
- @keyframes cb-pane-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } }
3298
- .steps { gap: 10px; }
3299
- .step { background: var(--cb-surface); border-color: var(--border); border-radius: 9px; padding: 11px 13px; }
3300
- .step:hover { background: var(--panel); border-color: var(--cb-accent-line); }
3301
- .step .n { background: var(--cb-accent-soft); color: var(--accent); border-radius: 6px; }
3302
- .rd-direct, .rd-logdrawer, .rd-arts, .rd-git, .rd-bible, .report {
3303
- background: var(--cb-surface); border-color: var(--border); border-radius: 10px;
3304
- }
3305
- .report { padding: 16px 20px; }
3306
- .logbox, #run-detail #rd-log.rd-logdrawer { border-radius: 10px; overflow: hidden; }
3307
-
3308
- /* 蜂巢工作台:皮肤色作为状态语言,卡片和流程留在同一浅层空间。 */
3309
- .rd-hive { padding: 2px 0 8px; }
3310
- .rd-hive .sec-title { font-family: var(--cb-font); letter-spacing: .08em; }
3311
- .rd-hive .sec-title > span:not(.tag), .rd-hive .sec-title .ico { color: var(--accent); }
3312
- .hive-lane {
3313
- position: relative; overflow: hidden; padding: 13px 14px;
3314
- background: var(--cb-surface); border: 1px solid var(--border); border-radius: 10px;
3315
- box-shadow: none; color: var(--text);
3792
+ #run-detail #rd-tabs .rd-tab.active::after {
3793
+ display: block;
3794
+ left: 10px; right: 10px; bottom: -1px;
3795
+ height: 2px;
3796
+ background: var(--accent);
3316
3797
  }
3317
- .hive-lane::before {
3318
- content: ""; position: absolute; inset: 0 0 auto; height: 2px;
3319
- background: color-mix(in srgb, var(--accent) 42%, transparent); opacity: .7;
3798
+ #run-detail .rd-main { gap: 0; }
3799
+
3800
+ /* Remove the nested card frame from report, Git, bible and book metadata.
3801
+ Their headings and separators already establish the structure. */
3802
+ #run-detail .rd-pane[data-pane="result"] .report,
3803
+ #run-detail .rd-pane[data-pane="git"] #rd-git,
3804
+ #run-detail .rd-pane[data-pane="bible"] #rd-bible,
3805
+ #run-detail .rd-pane[data-pane="bookmeta"] #rd-bookmeta {
3806
+ padding: 0 0 24px;
3807
+ border: 0;
3808
+ border-radius: 0;
3809
+ background: transparent;
3810
+ box-shadow: none;
3811
+ }
3812
+ #run-detail .rd-pane[data-pane="result"] .report { padding-top: 0; }
3813
+ #run-detail .rd-pane[data-pane="result"] .report h1:first-child { margin-top: 0; }
3814
+ #run-detail .rd-pane[data-pane="git"] #rd-git,
3815
+ #run-detail .rd-pane[data-pane="bible"] #rd-bible,
3816
+ #run-detail .rd-pane[data-pane="bookmeta"] #rd-bookmeta { margin-top: 0; }
3817
+ #run-detail .rd-pane .git-head,
3818
+ #run-detail .rd-pane .bible-head,
3819
+ #run-detail .rd-pane .bm-head,
3820
+ #run-detail .rd-pane .files-head {
3821
+ min-height: 38px;
3822
+ margin: 0 0 14px;
3823
+ padding: 0 0 10px;
3824
+ border-bottom: 1px solid var(--border);
3320
3825
  }
3321
- .hive-lane.lane-active {
3322
- border-color: var(--cb-accent-line); background: color-mix(in srgb, var(--accent) 5%, var(--panel));
3323
- box-shadow: 0 8px 20px color-mix(in srgb, var(--accent) 9%, transparent);
3324
- }
3325
- .hive-lane.lane-active::before { animation: cb-lane-live 2.2s ease-in-out infinite; }
3326
- @keyframes cb-lane-live { 50% { opacity: 1; background: var(--accent); } }
3327
- .lane-name, .hc-role { color: var(--text); text-shadow: none; }
3328
- .lane-n, .lane-prog, .hc-who, .hc-meta { color: var(--muted); }
3329
- .lane-idx { background: var(--cb-accent-soft); color: var(--accent); border: 1px solid var(--cb-accent-line); border-radius: 5px; box-shadow: none; }
3330
- .lane-track::before { height: 1px; background: var(--border); }
3331
- .ld { width: 7px; height: 7px; border-radius: 50%; background: var(--border-strong); }
3332
- .ld-done { background: var(--ok); }
3333
- .ld-run { border-radius: 50%; background: var(--accent); animation: cb-node-pulse 1.4s ease-in-out infinite; }
3334
- @keyframes cb-node-pulse { 50% { transform: scale(1.5); opacity: .45; } }
3335
- .lane-flow::after { width: 7px; height: 7px; margin-top: -3px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 12%, transparent); }
3336
- .hive-cell {
3337
- position: relative; overflow: hidden; padding: 12px;
3338
- background: var(--panel); border-color: var(--border); border-radius: 8px; box-shadow: none; color: var(--text);
3339
- }
3340
- .hive-cell::before { height: 2px; border-radius: 0; background: var(--border); }
3341
- .hive-cell.st-running { border-color: var(--cb-accent-line); box-shadow: 0 4px 14px color-mix(in srgb, var(--accent) 10%, transparent); }
3342
- .hive-cell.st-running::before { background: var(--accent); }
3343
- .hive-cell.st-done::before { background: var(--ok); }
3344
- .hive-cell.st-failed::before { background: var(--bad); }
3345
- .hive-cell:hover { transform: translateY(-2px); box-shadow: var(--cb-shadow); border-color: var(--cb-accent-line); }
3346
- .hc-tail { background: var(--cb-surface-soft); border-color: var(--border); border-radius: 5px; color: var(--muted); }
3347
- .hive-cell .hc-live { border-radius: 999px; }
3348
-
3349
- /* 动效在高负荷运行时有反馈,同时尊重系统的减少动态效果偏好。 */
3350
- @media (prefers-reduced-motion: no-preference) {
3351
- .page:not(.hidden) > .subpage:not(.hidden) { animation: cb-page-in .35s ease both; }
3352
- @keyframes cb-page-in { from { opacity: 0; transform: translateY(7px); } to { opacity: 1; transform: translateY(0); } }
3826
+ #run-detail .rd-pane .git-head .sec-title,
3827
+ #run-detail .rd-pane .bible-head .sec-title,
3828
+ #run-detail .rd-pane .bm-head .sec-title,
3829
+ #run-detail .rd-pane .files-head .sec-title {
3830
+ margin: 0;
3831
+ padding: 0;
3832
+ border: 0;
3833
+ letter-spacing: .02em;
3834
+ text-transform: none;
3835
+ }
3836
+ #run-detail .rd-pane .git-head .sec-title::after,
3837
+ #run-detail .rd-pane .bible-head .sec-title::after,
3838
+ #run-detail .rd-pane .bm-head .sec-title::after,
3839
+ #run-detail .rd-pane .files-head .sec-title::after { display: none; }
3840
+ #run-detail .rd-bible .bible-head,
3841
+ #run-detail .rd-git .git-head,
3842
+ #run-detail .rd-bookmeta .bm-head {
3843
+ display: flex;
3844
+ align-items: center;
3845
+ gap: 9px;
3846
+ flex-wrap: wrap;
3847
+ }
3848
+ #run-detail .rd-bible .bible-head .hint,
3849
+ #run-detail .rd-git .git-head .hint,
3850
+ #run-detail .rd-bookmeta .bm-head .hint {
3851
+ flex: 1 1 240px;
3852
+ min-width: 0;
3853
+ }
3854
+ #run-detail .rd-bible .bible-view { margin: 0; max-height: 280px; }
3855
+ #run-detail .rd-bible .bible-editor { margin-top: 0; }
3856
+
3857
+ /* Hive: keep the stage relationship, remove the heavy nested panel treatment. */
3858
+ #run-detail .rd-hive { margin-top: 0; }
3859
+ #run-detail .rd-hive .sec-title { margin-bottom: 12px; }
3860
+ #rd-hive-cells { gap: 0; }
3861
+ #rd-hive-cells .hive-lane {
3862
+ border: 0;
3863
+ border-top: 1px solid var(--border);
3864
+ border-radius: 0;
3865
+ padding: 13px 0 14px;
3866
+ background: transparent;
3867
+ box-shadow: none;
3868
+ }
3869
+ #rd-hive-cells .hive-lane:last-child { border-bottom: 1px solid var(--border); }
3870
+ #rd-hive-cells .hive-lane::before {
3871
+ left: 0; right: auto; width: 56px; height: 2px;
3872
+ border-radius: 0;
3873
+ }
3874
+ #rd-hive-cells .hive-lane.lane-active {
3875
+ border-color: var(--accent);
3876
+ box-shadow: none;
3877
+ background: color-mix(in srgb, var(--accent) 2%, transparent);
3878
+ }
3879
+ #rd-hive-cells .lane-head { margin-bottom: 6px; }
3880
+ #rd-hive-cells .lane-idx {
3881
+ width: 28px; height: 24px;
3882
+ clip-path: none;
3883
+ border: 1px solid color-mix(in srgb, var(--accent) 30%, var(--border));
3884
+ border-radius: 6px;
3885
+ background: transparent;
3886
+ }
3887
+ #rd-hive-cells .lane-meter { margin-left: auto; width: 64px; }
3888
+ #rd-hive-cells .lane-live { margin-left: 10px; }
3889
+ #rd-hive-cells .lane-flow {
3890
+ height: 28px;
3891
+ width: 28px;
3892
+ margin: 0 0 0 12px;
3893
+ }
3894
+ #rd-hive-cells .flow-bee { display: none; }
3895
+ #rd-hive-cells .hive-cell {
3896
+ min-height: 76px;
3897
+ padding: 9px 10px;
3898
+ border-radius: 8px;
3899
+ background: color-mix(in srgb, var(--panel) 70%, transparent);
3900
+ box-shadow: none;
3901
+ }
3902
+ #rd-hive-cells .hive-cell:hover {
3903
+ transform: translateY(-1px);
3904
+ box-shadow: 0 3px 10px color-mix(in srgb, var(--accent) 10%, transparent);
3905
+ }
3906
+ #rd-hive-cells .hive-cell::before { height: 2px; }
3907
+ #rd-hive-cells .hc-tail { margin-top: 6px; }
3908
+ #rd-hive-cells .hc-meta { margin-top: auto; }
3909
+
3910
+ /* Results: file names and preview actions share fixed columns, so every row
3911
+ starts and ends on the same vertical guides. */
3912
+ #run-detail .rd-arts .files-head {
3913
+ display: grid;
3914
+ grid-template-columns: max-content minmax(0, 1fr);
3915
+ align-items: center;
3916
+ gap: 14px;
3917
+ }
3918
+ #run-detail .rd-arts .files-head .wd {
3919
+ max-width: none;
3920
+ min-width: 0;
3921
+ }
3922
+ #run-detail .rd-arts .file-chips {
3923
+ width: min(100%, 760px);
3924
+ gap: 4px;
3925
+ margin-top: 0;
3926
+ }
3927
+ #run-detail .rd-arts .fc-row {
3928
+ display: grid;
3929
+ grid-template-columns: minmax(0, 1fr) 76px;
3930
+ align-items: center;
3931
+ gap: 8px;
3932
+ min-width: 0;
3933
+ }
3934
+ #run-detail .rd-arts .fc-row .file-chip:first-child {
3935
+ width: 100%;
3936
+ min-width: 0;
3937
+ }
3938
+ #run-detail .rd-arts .fc-row .file-chip.prev {
3939
+ width: 76px;
3940
+ justify-content: center;
3941
+ padding-inline: 8px;
3942
+ }
3943
+
3944
+ /* Docked log: a utility rail, never a modal card floating over the hive. */
3945
+ #run-detail #rd-log.rd-logdrawer {
3946
+ left: calc(264px + clamp(18px, 3.2vw, 44px));
3947
+ right: clamp(18px, 3.2vw, 44px);
3948
+ bottom: 0;
3949
+ z-index: 40;
3950
+ max-height: min(30vh, 300px);
3951
+ border: 0;
3952
+ border-top: 1px solid var(--border-strong);
3953
+ border-radius: 0;
3954
+ box-shadow: 0 -10px 24px color-mix(in srgb, var(--text) 8%, transparent);
3955
+ }
3956
+ body.side-collapsed #run-detail #rd-log.rd-logdrawer { left: clamp(18px, 3.2vw, 44px); }
3957
+ body.inspector-open #run-detail #rd-log.rd-logdrawer {
3958
+ right: calc(340px + clamp(18px, 3.2vw, 44px));
3959
+ z-index: 40;
3353
3960
  }
3354
- @media (prefers-reduced-motion: reduce) {
3355
- *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; scroll-behavior: auto !important; }
3961
+ #run-detail #rd-log.rd-logdrawer .log-live-bar {
3962
+ min-height: 36px;
3963
+ padding-inline: clamp(12px, 2vw, 22px);
3964
+ background: var(--panel2);
3965
+ }
3966
+ #run-detail #rd-log.rd-logdrawer pre {
3967
+ max-height: min(26vh, 260px);
3968
+ padding-inline: clamp(12px, 2vw, 22px);
3969
+ background: transparent;
3356
3970
  }
3357
3971
  @media (max-width: 900px) {
3358
- #app { grid-template-columns: 1fr; }
3359
- main { padding: 22px 18px 72px; }
3360
- .topbar { padding: 10px 16px; }
3361
- .top-actions { gap: 5px; }
3362
- #run-detail .detail-head { top: -22px; }
3363
- .rd-tabs { top: 57px; }
3972
+ #run-detail #rd-log.rd-logdrawer,
3973
+ body.side-collapsed #run-detail #rd-log.rd-logdrawer,
3974
+ body.inspector-open #run-detail #rd-log.rd-logdrawer {
3975
+ left: 0; right: 0; bottom: 0; max-height: 32vh;
3976
+ }
3977
+ #run-detail #rd-log.rd-logdrawer pre { max-height: calc(32vh - 38px); }
3364
3978
  }
3365
3979
 
3366
- /* 关于与更新:更新内容展示块(relnotes/whatsnew 共用) */
3367
- .su-notes {
3368
- white-space: pre-wrap;
3980
+ /* Keep every compact list aligned when the viewport cannot fit the desktop
3981
+ columns. */
3982
+ @media (max-width: 720px) {
3983
+ #run-detail { padding-inline: 0; }
3984
+ #run-detail .detail-head { padding-top: 12px; }
3985
+ #run-detail .rd-pane .files-head { grid-template-columns: 1fr; gap: 4px; }
3986
+ #run-detail .rd-arts .fc-row { grid-template-columns: minmax(0, 1fr) 68px; }
3987
+ #run-detail .rd-arts .fc-row .file-chip.prev { width: 68px; }
3988
+ #rd-hive-cells .lane-meter { width: 52px; }
3989
+ }
3990
+
3991
+ /* ---- 对话页「执行结果」卡:run 终态摘要(状态/执行者/耗时/产出文件),时间线收尾 ---- */
3992
+ .rd-outcome { margin: 0 0 16px; padding: 14px 16px; border: 1px solid var(--border);
3993
+ border-radius: 10px; background: color-mix(in srgb, var(--panel) 82%, transparent); }
3994
+ .rd-outcome .outcome-top { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
3995
+ .outcome-title { display: inline-flex; align-items: center; gap: 7px; font-weight: 650; font-size: 14px; }
3996
+ .outcome-title .ico { width: 17px; height: 17px; }
3997
+ .outcome-title.ok { color: var(--ok); }
3998
+ .outcome-title.bad { color: var(--bad); }
3999
+ .outcome-title.live { color: var(--accent); }
4000
+ .outcome-status { color: var(--text); font-weight: 500; margin-left: 2px; }
4001
+ .outcome-meta { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-left: auto;
4002
+ color: var(--muted); font-size: 12px; }
4003
+ .outcome-meta b { color: var(--text); font-weight: 600; }
4004
+ .outcome-summary { margin-top: 10px; color: var(--text); font-size: 13px; line-height: 1.6; white-space: pre-wrap; overflow-wrap: anywhere; }
4005
+ .outcome-error { margin-top: 9px; color: var(--bad); font-size: 12.5px; line-height: 1.5; white-space: pre-wrap; overflow-wrap: anywhere; }
4006
+ .outcome-actions { display: flex; justify-content: flex-end; margin-top: 10px; }
4007
+ .outcome-actions .ghost { font-size: 12px; padding: 5px 10px; }
4008
+ .chat-result { flex: 1; min-width: 0; border: 1px solid var(--border); border-radius: 12px;
4009
+ padding: 12px 14px; background: var(--panel); }
4010
+ .chat-result .cr-head { display: flex; align-items: center; gap: 8px; font-weight: 600;
4011
+ font-size: 13.5px; color: var(--ok); }
4012
+ .chat-result.bad .cr-head { color: var(--bad); }
4013
+ .chat-result.off .cr-head { color: var(--muted); }
4014
+ .chat-result .cr-head .ico { width: 16px; height: 16px; flex: none; }
4015
+ .chat-result .cr-meta { font-size: 12px; color: var(--muted); margin-top: 5px; }
4016
+ .chat-result .cr-err { font-size: 12.5px; color: var(--bad); margin-top: 8px; line-height: 1.5;
4017
+ white-space: pre-wrap; overflow-wrap: anywhere; }
4018
+ .chat-result .cr-files { margin-top: 10px; }
4019
+ .chat-result .cr-files-title { font-size: 12px; color: var(--muted); margin-bottom: 6px; }
4020
+ .chat-result .cr-steps { margin-top: 10px; font-size: 12.5px; }
4021
+
4022
+ /* ================================================================
4023
+ 2026-09 · 对话式任务入口 + 任务概览
4024
+ 新建任务像一个工作台入口:只突出上下文、目标和发送动作,
4025
+ 详细参数继续留在「更多选项」里,不让配置表单抢走第一视线。
4026
+ ================================================================ */
4027
+ #sub-tasks {
4028
+ min-height: calc(100vh - 64px);
4029
+ display: flex;
4030
+ align-items: center;
4031
+ justify-content: center;
4032
+ }
4033
+ #sub-tasks .composer {
4034
+ width: min(100%, 820px);
4035
+ max-width: 820px;
4036
+ margin: clamp(12px, 7vh, 72px) auto 0;
4037
+ padding: 0 0 36px;
4038
+ overflow: visible;
4039
+ }
4040
+ #sub-tasks .composer::after { display: none; }
4041
+ #sub-tasks .hero-row {
4042
+ justify-content: center;
4043
+ text-align: center;
4044
+ position: relative;
4045
+ }
4046
+ #sub-tasks .hero {
4047
+ font-size: clamp(23px, 2.6vw, 31px);
4048
+ font-weight: 500;
4049
+ letter-spacing: -.04em;
4050
+ }
4051
+ #sub-tasks .hero-sub {
4052
+ max-width: 560px;
4053
+ margin: 8px auto 25px;
4054
+ text-align: center;
4055
+ font-size: 12.5px;
4056
+ color: var(--muted);
4057
+ }
4058
+ #sub-tasks #btn-wizard {
4059
+ position: absolute;
4060
+ right: 0;
4061
+ top: 1px;
4062
+ opacity: .7;
4063
+ }
4064
+ #sub-tasks #btn-wizard:hover { opacity: 1; }
4065
+ #sub-tasks .form { gap: 10px; }
4066
+ #sub-tasks .cmp-pills {
4067
+ display: flex;
4068
+ align-items: center;
4069
+ width: 100%;
4070
+ min-height: 34px;
4071
+ margin: 0;
4072
+ padding: 0 12px 5px;
4073
+ border-bottom: 1px solid var(--border);
4074
+ }
4075
+ #sub-tasks .cmp-wd {
4076
+ width: 100%;
4077
+ min-height: 30px;
4078
+ padding: 0;
4079
+ border: 0;
4080
+ background: transparent;
4081
+ border-radius: 0;
4082
+ }
4083
+ #sub-tasks .cmp-wd > .ico { width: 14px; height: 14px; color: var(--muted); }
4084
+ #sub-tasks .cmp-wd input {
4085
+ min-height: 28px;
4086
+ padding: 3px 6px;
4087
+ background: transparent;
4088
+ color: var(--text);
4089
+ font-size: 12px;
4090
+ }
4091
+ #sub-tasks .cmp-wd input::placeholder { color: var(--muted); }
4092
+ #sub-tasks .cmp-wd .ghost.small {
4093
+ padding: 3px 8px;
4094
+ border: 0;
4095
+ background: transparent;
4096
+ color: var(--muted);
4097
+ }
4098
+ #sub-tasks .cmp-wd .ghost.small:hover { color: var(--accent); background: var(--panel2); }
4099
+ #sub-tasks .cmp-hint { margin: -5px 12px 0; font-size: 11px; }
4100
+ #sub-tasks .cmp-box {
4101
+ width: 100%;
4102
+ margin-top: 0;
4103
+ padding: 0 12px 9px;
4104
+ border: 1px solid color-mix(in srgb, var(--border-strong) 72%, transparent);
4105
+ border-radius: 22px;
4106
+ background: color-mix(in srgb, var(--panel) 94%, transparent);
4107
+ box-shadow: 0 10px 30px color-mix(in srgb, var(--text) 7%, transparent);
4108
+ }
4109
+ #sub-tasks .cmp-box:focus-within {
4110
+ border-color: color-mix(in srgb, var(--accent) 68%, var(--border-strong));
4111
+ box-shadow: 0 12px 34px color-mix(in srgb, var(--accent) 10%, transparent), 0 0 0 3px color-mix(in srgb, var(--accent) 9%, transparent);
4112
+ }
4113
+ #sub-tasks .cmp-context-note {
4114
+ display: flex;
4115
+ align-items: center;
4116
+ gap: 6px;
4117
+ min-height: 32px;
4118
+ padding: 7px 4px 0;
4119
+ color: var(--muted);
4120
+ font-size: 11px;
4121
+ }
4122
+ #sub-tasks .cmp-context-note .ico { width: 13px; height: 13px; color: var(--accent); opacity: .75; }
4123
+ #sub-tasks .cmp-box textarea {
4124
+ min-height: 112px;
4125
+ padding: 10px 4px 12px;
4126
+ font-size: 15px;
4127
+ line-height: 1.65;
4128
+ background: transparent;
4129
+ }
4130
+ #sub-tasks .cmp-bar {
4131
+ display: flex;
4132
+ align-items: center;
4133
+ gap: 8px;
4134
+ min-height: 35px;
4135
+ padding: 5px 0 0;
4136
+ border-top: 1px solid var(--border);
4137
+ }
4138
+ #sub-tasks .cmp-mode { display: inline-flex; align-items: center; gap: 3px; }
4139
+ #sub-tasks .cmp-mode .type-pick {
4140
+ min-height: 29px;
4141
+ min-width: 0;
4142
+ padding: 4px 8px;
4143
+ border: 0;
4144
+ border-radius: 999px;
4145
+ background: var(--panel2);
4146
+ font-size: 11.5px;
4147
+ }
4148
+ #sub-tasks .cmp-mode .type-pick:hover { background: color-mix(in srgb, var(--accent) 10%, var(--panel2)); }
4149
+ #sub-tasks .cmp-mode #btn-flows-mgr {
4150
+ min-height: 29px;
4151
+ padding: 4px 7px;
4152
+ border: 0;
4153
+ color: var(--muted);
4154
+ font-size: 11px;
4155
+ }
4156
+ #sub-tasks .cmp-mode #btn-flows-mgr:hover { color: var(--accent); background: var(--panel2); }
4157
+ #sub-tasks .cmp-bar .att-strip { min-width: 0; flex: 1; margin: 0; }
4158
+ #sub-tasks .cmp-bar .att-strip .att-hint { font-size: 11px; color: var(--muted); }
4159
+ #sub-tasks .cmp-bar .att-strip > .ghost.small {
4160
+ min-height: 28px;
4161
+ padding: 4px 8px;
4162
+ border: 0;
4163
+ background: transparent;
4164
+ color: var(--muted);
4165
+ }
4166
+ #sub-tasks .cmp-bar .att-strip > .ghost.small:hover { color: var(--text); background: var(--panel2); }
4167
+ #sub-tasks .cmp-send { gap: 8px; }
4168
+ #sub-tasks #btn-create.round {
4169
+ width: 31px;
4170
+ height: 31px;
4171
+ box-shadow: none;
4172
+ }
4173
+ #sub-tasks .cmp-quick {
4174
+ justify-content: center;
4175
+ gap: 6px;
4176
+ margin: 13px 0 0;
4177
+ }
4178
+ #sub-tasks .cmp-chip {
4179
+ min-height: 28px;
4180
+ padding: 4px 10px;
4181
+ border-color: transparent;
4182
+ background: transparent;
4183
+ color: var(--muted);
4184
+ font-size: 11.5px;
4185
+ }
4186
+ #sub-tasks .cmp-chip:hover,
4187
+ #sub-tasks .cmp-chip.on { border-color: var(--border); background: var(--panel); color: var(--text); }
4188
+ #sub-tasks .cmp-chip.on { color: var(--accent); }
4189
+ #sub-tasks .cmp-estimate { text-align: center; margin: 6px 0 0; font-size: 11px; }
4190
+ #sub-tasks details#f-advanced {
4191
+ width: min(100%, 760px);
4192
+ margin: 15px auto 0;
4193
+ padding-top: 10px;
4194
+ border-top: 0;
4195
+ }
4196
+ #sub-tasks details#f-advanced summary { justify-content: center; font-size: 11.5px; }
4197
+ #sub-tasks details#f-advanced .adv-body {
4198
+ margin-top: 13px;
4199
+ padding: 15px;
4200
+ border: 1px solid var(--border);
4201
+ border-radius: 14px;
4202
+ background: color-mix(in srgb, var(--panel) 54%, transparent);
4203
+ text-align: left;
4204
+ }
4205
+
4206
+ /* 任务详情概览:默认蜂巢前先交代结果与进度,减少“打开详情却不知道在看什么”。 */
4207
+ #run-detail .rd-overview {
4208
+ display: grid;
4209
+ grid-template-columns: minmax(0, 1fr) auto;
4210
+ gap: 12px 24px;
4211
+ margin: 0 0 18px;
4212
+ padding: 17px 18px 15px;
4213
+ border-bottom: 1px solid var(--border);
4214
+ background: color-mix(in srgb, var(--panel) 45%, transparent);
4215
+ }
4216
+ #run-detail .rd-overview.hidden { display: none !important; }
4217
+ .rd-overview-main { min-width: 0; }
4218
+ .rd-overview-kicker {
4219
+ margin-bottom: 5px;
4220
+ color: var(--accent);
4221
+ font: 600 10px/1.2 var(--mono);
4222
+ letter-spacing: .1em;
4223
+ text-transform: uppercase;
4224
+ }
4225
+ .rd-overview-title {
4226
+ overflow: hidden;
4227
+ color: var(--text);
4228
+ font-size: 15px;
4229
+ font-weight: 650;
4230
+ line-height: 1.4;
4231
+ text-overflow: ellipsis;
4232
+ white-space: nowrap;
4233
+ }
4234
+ .rd-overview-goal {
4235
+ max-width: 760px;
4236
+ margin-top: 4px;
4237
+ overflow: hidden;
4238
+ color: var(--muted);
3369
4239
  font-size: 12px;
3370
4240
  line-height: 1.55;
3371
- margin: 6px 0 0;
3372
- padding: 10px 12px;
3373
- border: 1px solid var(--border, rgba(128, 128, 128, .25));
3374
- border-radius: 8px;
3375
- background: var(--bg-soft, rgba(128, 128, 128, .06));
3376
- font-family: inherit;
3377
- max-height: 40vh;
3378
- overflow: auto;
4241
+ text-overflow: ellipsis;
4242
+ white-space: nowrap;
4243
+ }
4244
+ .rd-overview-state { min-width: 114px; text-align: right; }
4245
+ .rd-overview-state .state-label { display: block; color: var(--muted); font-size: 11px; }
4246
+ .rd-overview-state .state-value { display: block; margin-top: 2px; color: var(--text); font: 650 22px/1.1 var(--mono); }
4247
+ .rd-overview-state .state-value.ok { color: var(--ok); }
4248
+ .rd-overview-state .state-value.bad { color: var(--bad); }
4249
+ .rd-overview-progress { grid-column: 1 / -1; height: 5px; overflow: hidden; border-radius: 999px; background: color-mix(in srgb, var(--text) 9%, transparent); }
4250
+ .rd-overview-progress i { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg, var(--accent), var(--accent2)); transition: width .35s ease; }
4251
+ .rd-overview-facts { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 18px; grid-column: 1 / -1; color: var(--muted); font-size: 11.5px; }
4252
+ .rd-overview-facts span { display: inline-flex; align-items: center; gap: 5px; }
4253
+ .rd-overview-facts b { color: var(--text); font-weight: 600; }
4254
+ .rd-overview-last { grid-column: 1 / -1; min-width: 0; padding-top: 8px; border-top: 1px solid var(--border); color: var(--muted); font-size: 11.5px; }
4255
+ .rd-overview-last b { margin-right: 6px; color: var(--text); font-weight: 600; }
4256
+ .rd-overview-last span { color: var(--text); }
4257
+ .rd-overview-actions { display: flex; justify-content: flex-end; gap: 6px; grid-column: 1 / -1; }
4258
+ .rd-overview-actions button { padding: 5px 9px; font-size: 11.5px; }
4259
+
4260
+ /* 直连详情只保留对话的呼吸感;代码/编排任务才展示概览。 */
4261
+ #run-detail.chat-mode #rd-overview { display: none !important; }
4262
+
4263
+ /* 日志是底部控制台,但对话输入必须始终可用:日志打开时让聊天区留出安全距离。 */
4264
+ #run-detail.chat-mode #rd-log.rd-logdrawer { bottom: 0; max-height: min(27vh, 260px); }
4265
+ #run-detail.chat-mode #rd-pane-chat .rd-chat { padding-bottom: min(27vh, 260px); }
4266
+ #run-detail.chat-mode #rd-log.rd-logdrawer pre { max-height: min(23vh, 220px); }
4267
+
4268
+ @media (max-width: 760px) {
4269
+ #sub-tasks { min-height: calc(100vh - 56px); align-items: flex-start; }
4270
+ #sub-tasks .composer { margin-top: 10vh; padding-inline: 8px; }
4271
+ #sub-tasks #btn-wizard { position: static; margin-left: auto; }
4272
+ #sub-tasks .hero-row { align-items: center; }
4273
+ #sub-tasks .cmp-context-note { font-size: 10.5px; }
4274
+ #sub-tasks .cmp-bar { flex-wrap: wrap; }
4275
+ #sub-tasks .cmp-mode { order: 2; }
4276
+ #sub-tasks .cmp-bar .att-strip { order: 1; flex-basis: calc(100% - 8px); }
4277
+ #sub-tasks .cmp-send { order: 3; margin-left: auto; }
4278
+ #run-detail .rd-overview { grid-template-columns: minmax(0, 1fr) auto; padding-inline: 12px; }
4279
+ .rd-overview-title, .rd-overview-goal { white-space: normal; }
3379
4280
  }