codebee 0.1.69 → 0.1.71
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/CHANGELOG.md +589 -543
- package/LICENSE +21 -21
- package/README.md +509 -508
- package/app/.playwright-cli/console-2026-09-23T08-26-03-635Z.log +88 -0
- package/app/.playwright-cli/page-2026-09-23T08-26-03-845Z.yml +126 -0
- package/app/.playwright-cli/page-2026-09-23T08-29-44-203Z.png +0 -0
- package/app/.playwright-cli/page-2026-09-23T08-35-42-046Z.yml +210 -0
- package/app/.playwright-cli/page-2026-09-23T08-36-52-858Z.png +0 -0
- package/app/.playwright-cli/page-2026-09-23T08-37-33-938Z.png +0 -0
- package/app/.playwright-cli/run-detail-after.png +0 -0
- package/app/browser-final-1440.png +0 -0
- package/app/browser-final-390.png +0 -0
- package/app/browser-google-fallback.png +0 -0
- package/app/browser-google-test.png +0 -0
- package/app/browser-workbench-1440.png +0 -0
- package/app/browser-workbench-390.png +0 -0
- package/app/browser-workspace-google.png +0 -0
- package/app/browser-workspace-smoke.png +0 -0
- package/app/browser-workspace.png +0 -0
- package/app/core/acceptance.py +100 -100
- package/app/core/aiflavor.py +197 -197
- package/app/core/artifacts.py +148 -148
- package/app/core/assets.py +110 -110
- package/app/core/attachments.py +623 -623
- package/app/core/audit.py +30 -0
- package/app/core/automation.py +107 -12
- package/app/core/backup.py +470 -470
- package/app/core/beekeeper.py +183 -183
- package/app/core/benchstore.py +95 -0
- package/app/core/board.py +209 -209
- package/app/core/bookmeta.py +935 -930
- package/app/core/bookmeta_catalog.py +180 -180
- package/app/core/branching.py +137 -137
- package/app/core/builtin_agent.py +1673 -1234
- package/app/core/capability.py +144 -144
- package/app/core/catalog.py +7 -1
- package/app/core/chaptersafe.py +32 -32
- package/app/core/cleanup.py +303 -303
- package/app/core/compaction.py +201 -201
- package/app/core/covergen.py +356 -356
- package/app/core/defectretro.py +43 -43
- package/app/core/diagnostics.py +114 -114
- package/app/core/dispatch.py +190 -173
- package/app/core/dispatch_log.py +128 -128
- package/app/core/env_scrub.py +85 -85
- package/app/core/error_codes.py +11 -2
- package/app/core/errorlog.py +137 -137
- package/app/core/evalbench.py +720 -0
- package/app/core/evaluation.py +174 -174
- package/app/core/failure_notify.py +290 -290
- package/app/core/flows.py +234 -9
- package/app/core/goal_service.py +167 -167
- package/app/core/health.py +374 -374
- package/app/core/history.py +38 -38
- package/app/core/hooks.py +162 -162
- package/app/core/jobs.py +22 -1
- package/app/core/manager.py +2143 -2122
- package/app/core/market_remote.py +10 -0
- package/app/core/mcp_client.py +287 -0
- package/app/core/mocks.py +64 -64
- package/app/core/modelhub.py +185 -2
- package/app/core/notify.py +201 -106
- package/app/core/novel_quality.py +189 -0
- package/app/core/operations.py +228 -228
- package/app/core/paihang.py +138 -138
- package/app/core/paths.py +4 -0
- package/app/core/pipeline.py +426 -28
- package/app/core/planner.py +243 -22
- package/app/core/plugins.py +525 -0
- package/app/core/portguard.py +111 -111
- package/app/core/preview.py +293 -293
- package/app/core/publish/__init__.py +7 -7
- package/app/core/publish/auto.py +367 -367
- package/app/core/publish/browser.py +655 -539
- package/app/core/publish/fanqie.py +165 -159
- package/app/core/publish/flow.py +589 -440
- package/app/core/publish/flows-fanqie-calibrated.json +336 -332
- package/app/core/publish/ledger.py +229 -203
- package/app/core/publish/manager.py +824 -692
- package/app/core/publish/qimao.py +146 -141
- package/app/core/publish/ws.py +139 -139
- package/app/core/redact.py +38 -38
- package/app/core/remotesync.py +121 -0
- package/app/core/repeat_guard.py +129 -129
- package/app/core/router.py +398 -398
- package/app/core/runner.py +2142 -2067
- package/app/core/selfupdate.py +384 -384
- package/app/core/session_log.py +161 -161
- package/app/core/sessions.py +312 -312
- package/app/core/settings.py +42 -4
- package/app/core/settings_schema.py +270 -262
- package/app/core/share_page.py +114 -114
- package/app/core/skill_scan.py +122 -122
- package/app/core/skillpacks/fanqie-novel.md +80 -80
- package/app/core/skillpacks/market/character-bible.md +66 -66
- package/app/core/skillpacks/market/code-risk-checklist.md +58 -58
- package/app/core/skillpacks/market/git-workflow.md +57 -57
- package/app/core/skillpacks/market/release-notes.md +72 -72
- package/app/core/skillpacks/market/weekly-report.md +71 -71
- package/app/core/skillpacks/market/worldview-consistency.md +70 -70
- package/app/core/step_runner.py +132 -132
- package/app/core/store.py +30 -8
- package/app/core/task_compile.py +199 -199
- package/app/core/telemetry.py +292 -292
- package/app/core/tlsctx.py +64 -64
- package/app/core/token_meter.py +147 -147
- package/app/core/tracing.py +144 -144
- package/app/core/upstream.py +41 -41
- package/app/core/usage.py +1035 -862
- package/app/core/volumes.py +389 -389
- package/app/core/wxdigest.py +858 -858
- package/app/core/zentao.py +2614 -2465
- package/app/current-browser.png +0 -0
- package/app/main.py +316 -17
- package/app/mcp_server.py +175 -0
- package/app/pet.py +83 -22
- package/app/pick_dialog.py +110 -110
- package/app/plugins/code-review-helper/.codex-plugin/plugin.json +18 -0
- package/app/plugins/code-review-helper/skills/review.md +16 -0
- package/app/ui/app.js +1391 -77
- package/app/ui/artdiff.js +74 -74
- package/app/ui/board.html +162 -162
- package/app/ui/board.js +305 -305
- package/app/ui/i18n.js +249 -7
- package/app/ui/icons/bee.svg +79 -79
- package/app/ui/index.html +277 -13
- package/app/ui/manifest.json +16 -16
- package/app/ui/qrcode.js +2297 -2297
- package/app/ui/style.css +845 -12
- package/app//344/275/234/345/223/201/344/277/241/346/201/257-/344/270/203/347/214/253.md +18 -0
- package/bin/tutti.js +147 -147
- package/package.json +47 -46
- package/tools/wx_reader.py +261 -261
package/app/ui/style.css
CHANGED
|
@@ -575,6 +575,75 @@ body.side-collapsed #sidebar { border-right: none; padding-left: 0; padding-righ
|
|
|
575
575
|
#page-settings { max-width: none; }
|
|
576
576
|
.subpage { display: flex; flex-direction: column; gap: 20px; }
|
|
577
577
|
|
|
578
|
+
/* ---------------- 内置浏览器工作区 ---------------- */
|
|
579
|
+
.browser-shell {
|
|
580
|
+
display: flex; flex-direction: column; min-height: min(760px, calc(100vh - 140px));
|
|
581
|
+
border: 1px solid var(--border); border-radius: 16px; overflow: hidden;
|
|
582
|
+
background: var(--panel); box-shadow: var(--shadow);
|
|
583
|
+
}
|
|
584
|
+
.browser-head { display: flex; align-items: center; gap: 12px; min-height: 48px; padding: 7px 12px 0; background: var(--sidebar); border-bottom: 1px solid var(--border); }
|
|
585
|
+
.browser-tabs { display: flex; align-items: flex-end; gap: 4px; min-width: 0; flex: 1; overflow-x: auto; }
|
|
586
|
+
.browser-tab { display: inline-flex; align-items: center; gap: 7px; min-width: 160px; max-width: 240px; padding: 9px 12px; border: 1px solid transparent; border-bottom: 0; border-radius: 9px 9px 0 0; background: transparent; color: var(--muted); cursor: pointer; font: inherit; font-size: 12.5px; }
|
|
587
|
+
.browser-tab span:not(.browser-tab-close) { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
588
|
+
.browser-tab.active { color: var(--text); background: var(--panel); border-color: var(--border); }
|
|
589
|
+
.browser-tab:hover { color: var(--text); background: var(--panel2); }
|
|
590
|
+
.browser-tab .ico { width: 14px; height: 14px; flex: none; }
|
|
591
|
+
.browser-tab-close { margin-left: auto; color: var(--muted); font-size: 16px; line-height: 1; opacity: .7; }
|
|
592
|
+
.browser-tab-close:hover { color: var(--bad); opacity: 1; }
|
|
593
|
+
.browser-tab-add { display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px; margin: 0 0 4px 2px; border: 0; border-radius: 7px; background: transparent; color: var(--muted); cursor: pointer; }
|
|
594
|
+
.browser-tab-add:hover { color: var(--text); background: var(--panel2); }
|
|
595
|
+
.browser-status { display: inline-flex; align-items: center; gap: 7px; flex: none; color: var(--muted); font-size: 11px; white-space: nowrap; }
|
|
596
|
+
.browser-status-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--ok); box-shadow: 0 0 0 3px color-mix(in srgb, var(--ok) 14%, transparent); }
|
|
597
|
+
.browser-toolbar { display: flex; align-items: center; gap: 6px; padding: 10px 12px; background: var(--panel); border-bottom: 1px solid var(--border); }
|
|
598
|
+
.browser-toolbar .icon-btn { width: 30px; height: 30px; flex: none; }
|
|
599
|
+
.browser-address-wrap { display: flex; align-items: center; min-width: 0; flex: 1; height: 34px; padding: 0 4px 0 11px; border: 1px solid var(--border-strong); border-radius: 9px; background: var(--panel2); }
|
|
600
|
+
.browser-address-wrap:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 13%, transparent); }
|
|
601
|
+
.browser-lock { width: 14px; height: 14px; flex: none; color: var(--ok); }
|
|
602
|
+
.browser-address-wrap input { min-width: 0; flex: 1; height: 100%; padding: 0 9px; border: 0; outline: 0; background: transparent; color: var(--text); font: 12.5px var(--mono); }
|
|
603
|
+
.browser-go { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border: 0; border-radius: 7px; background: transparent; color: var(--muted); cursor: pointer; }
|
|
604
|
+
.browser-go:hover { background: var(--panel); color: var(--accent); }
|
|
605
|
+
.browser-external { flex: none; }
|
|
606
|
+
.browser-shortcuts { display: flex; align-items: center; gap: 7px; padding: 9px 12px; overflow-x: auto; border-bottom: 1px solid var(--border); background: color-mix(in srgb, var(--panel2) 58%, transparent); }
|
|
607
|
+
.browser-shortcut { display: inline-flex; align-items: center; gap: 7px; padding: 5px 9px; border: 1px solid var(--border); border-radius: 7px; background: var(--panel); color: var(--muted); cursor: pointer; font: inherit; font-size: 11.5px; white-space: nowrap; }
|
|
608
|
+
.browser-shortcut:hover { color: var(--text); border-color: var(--border-strong); background: var(--panel2); }
|
|
609
|
+
.shortcut-mark { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; border-radius: 5px; color: #fff; font: 700 10px/1 var(--font-ui); }
|
|
610
|
+
.shortcut-mark.google { background: #4285f4; }.shortcut-mark.github { background: #24292f; }.shortcut-mark.mdn { background: #83d130; font-size: 8px; }.shortcut-mark.preview { background: var(--accent); }
|
|
611
|
+
.browser-stage { position: relative; display: flex; flex: 1; min-height: 420px; background: var(--bg); }
|
|
612
|
+
.browser-frame { display: block; width: 100%; height: 100%; min-height: 420px; flex: 1; border: 0; background: #fff; }
|
|
613
|
+
.browser-frame-error {
|
|
614
|
+
display: flex;
|
|
615
|
+
align-items: center;
|
|
616
|
+
justify-content: center;
|
|
617
|
+
flex-direction: column;
|
|
618
|
+
gap: 8px;
|
|
619
|
+
width: 100%;
|
|
620
|
+
min-height: 360px;
|
|
621
|
+
padding: 32px 22px;
|
|
622
|
+
color: var(--muted);
|
|
623
|
+
background: var(--bg);
|
|
624
|
+
text-align: center;
|
|
625
|
+
}
|
|
626
|
+
.browser-frame-error-mark {
|
|
627
|
+
display: grid;
|
|
628
|
+
place-items: center;
|
|
629
|
+
width: 48px;
|
|
630
|
+
height: 48px;
|
|
631
|
+
border: 1px solid color-mix(in srgb, var(--warn) 40%, var(--border));
|
|
632
|
+
border-radius: 14px;
|
|
633
|
+
color: var(--warn);
|
|
634
|
+
background: color-mix(in srgb, var(--warn) 10%, var(--panel));
|
|
635
|
+
}
|
|
636
|
+
.browser-frame-error-mark .ico { width: 22px; height: 22px; }
|
|
637
|
+
.browser-frame-error h2 { margin: 2px 0 0; color: var(--text); font-size: 18px; }
|
|
638
|
+
.browser-frame-error p { max-width: 520px; margin: 0 0 8px; font-size: 12px; line-height: 1.55; }
|
|
639
|
+
.browser-empty { display: flex; align-items: center; justify-content: center; flex-direction: column; gap: 10px; width: 100%; padding: 48px 22px; text-align: center; color: var(--muted); background: radial-gradient(circle at 50% 30%, color-mix(in srgb, var(--accent) 12%, transparent), transparent 38%), var(--bg); }
|
|
640
|
+
.browser-empty-mark { display: grid; place-items: center; width: 66px; height: 66px; border: 1px solid color-mix(in srgb, var(--accent) 35%, var(--border)); border-radius: 18px; color: var(--accent); background: color-mix(in srgb, var(--accent) 10%, var(--panel)); }
|
|
641
|
+
.browser-empty-mark .ico { width: 30px; height: 30px; }
|
|
642
|
+
.browser-empty h2 { margin: 4px 0 0; color: var(--text); font-size: 20px; }
|
|
643
|
+
.browser-empty p { max-width: 480px; margin: 0 0 8px; font-size: 13px; }
|
|
644
|
+
.browser-foot { display: flex; align-items: center; gap: 10px; min-height: 34px; padding: 7px 12px; border-top: 1px solid var(--border); color: var(--muted); font-size: 11px; }
|
|
645
|
+
|
|
646
|
+
|
|
578
647
|
/* 左栏的「设置」导航(设置模式下替换任务树) */
|
|
579
648
|
.side-main { display: flex; flex-direction: column; flex: 1; min-height: 0; }
|
|
580
649
|
.side-settings { display: none; flex-direction: column; flex: 1; min-height: 0; gap: 2px; overflow-y: auto; overflow-x: hidden; }
|
|
@@ -923,15 +992,15 @@ button.small { padding: 4px 10px; font-size: 12px; }
|
|
|
923
992
|
}
|
|
924
993
|
.token-gate .primary { width: 100%; padding: 10px; font-size: 14.5px; }
|
|
925
994
|
|
|
926
|
-
/*
|
|
995
|
+
/* 轻提示:视口正中(水平+垂直居中)。贴底时会被详情页输入条遮挡看不见 */
|
|
927
996
|
.toast {
|
|
928
|
-
position: fixed; left: 50%;
|
|
997
|
+
position: fixed; left: 50%; top: 50%; transform: translate(-50%, -46%);
|
|
929
998
|
z-index: 300; max-width: min(460px, calc(100vw - 40px));
|
|
930
999
|
background: var(--panel); color: var(--text); border: 1px solid var(--border-strong);
|
|
931
1000
|
border-radius: 10px; box-shadow: var(--shadow); padding: 10px 16px; font-size: 13px;
|
|
932
1001
|
opacity: 0; pointer-events: none; transition: opacity .2s, transform .2s;
|
|
933
1002
|
}
|
|
934
|
-
.toast.show { opacity: 1; transform:
|
|
1003
|
+
.toast.show { opacity: 1; transform: translate(-50%, -50%); }
|
|
935
1004
|
.toast.bad { border-color: var(--bad); color: var(--bad); }
|
|
936
1005
|
|
|
937
1006
|
/* 减少动效(无障碍;headless 截图验证也靠它定格最终态) */
|
|
@@ -1177,6 +1246,16 @@ body.inspector-open #inspector { display: flex; }
|
|
|
1177
1246
|
/* 手机顶栏精简:皮肤入口撤下(皮肤在 设置 → 皮肤),只留明暗图标 */
|
|
1178
1247
|
#btn-skin { display: none; }
|
|
1179
1248
|
.page-title { font-size: 14px; }
|
|
1249
|
+
.browser-shell { min-height: calc(100vh - 112px); border-radius: 10px; }
|
|
1250
|
+
.browser-head { padding: 6px 8px 0; }
|
|
1251
|
+
.browser-status { display: none; }
|
|
1252
|
+
.browser-toolbar { padding: 7px; gap: 3px; flex-wrap: wrap; }
|
|
1253
|
+
.browser-toolbar .icon-btn { width: 28px; height: 28px; }
|
|
1254
|
+
.browser-address-wrap { order: 2; flex-basis: 100%; }
|
|
1255
|
+
.browser-external { margin-left: auto; }
|
|
1256
|
+
.browser-stage, .browser-frame { min-height: 360px; }
|
|
1257
|
+
.browser-tab { min-width: 128px; max-width: 180px; padding: 8px 9px; }
|
|
1258
|
+
.browser-foot { font-size: 10px; }
|
|
1180
1259
|
main { padding: 14px 10px 70px; }
|
|
1181
1260
|
.panel { padding: 13px; }
|
|
1182
1261
|
.composer { padding: 16px 14px 13px; }
|
|
@@ -1185,7 +1264,6 @@ body.inspector-open #inspector { display: flex; }
|
|
|
1185
1264
|
input, select, textarea { font-size: 16px; }
|
|
1186
1265
|
.detail-head { flex-wrap: wrap; gap: 8px; }
|
|
1187
1266
|
.detail-head h2 { flex-basis: 100%; order: -1; }
|
|
1188
|
-
.toast { bottom: 20px; }
|
|
1189
1267
|
}
|
|
1190
1268
|
|
|
1191
1269
|
/* ---- 模型画廊 ---- */
|
|
@@ -2923,7 +3001,7 @@ main.chat-fill #run-detail.chat-mode {
|
|
|
2923
3001
|
#run-detail.chat-mode .rd-pane[data-pane="chat"] { flex: 1; min-height: 380px; height: auto; }
|
|
2924
3002
|
.rd-chat { display: flex; flex-direction: column; height: 100%; min-height: 0; }
|
|
2925
3003
|
.rd-chat-flow { flex: 1 1 auto; overflow-y: auto; display: flex; flex-direction: column; gap: 24px;
|
|
2926
|
-
max-width:
|
|
3004
|
+
max-width: min(1200px, 100%); width: 100%; margin: 0 auto; padding: 20px 12px 12px;
|
|
2927
3005
|
scroll-behavior: smooth; }
|
|
2928
3006
|
.chat-row { display: flex; gap: 12px; align-items: flex-start; }
|
|
2929
3007
|
.chat-row.me { justify-content: flex-end; }
|
|
@@ -2965,7 +3043,7 @@ main.chat-fill #run-detail.chat-mode {
|
|
|
2965
3043
|
/* 思考过程块(2026-09-22 用户诉求「把思考过程打印出来」):内置智能体流式抓的
|
|
2966
3044
|
* 模型思维链。运行中=常开实时块(呼吸点+逐句长出);结束后=折叠摘要可回看。
|
|
2967
3045
|
* 正文位等宽缩一号、弱化——它是「过程」,不能盖过下面的正式回答。 */
|
|
2968
|
-
.chat-think { max-width:
|
|
3046
|
+
.chat-think { max-width: min(1200px, 100%); margin: 0 0 6px; border: 1px dashed var(--border-strong);
|
|
2969
3047
|
border-radius: 10px; background: color-mix(in srgb, var(--muted) 7%, transparent);
|
|
2970
3048
|
font-size: 12.5px; }
|
|
2971
3049
|
.chat-think .ct-body { max-height: 240px; overflow: auto; padding: 7px 10px 8px;
|
|
@@ -2994,7 +3072,7 @@ details.chat-think[open] > summary { border-bottom: 1px dashed var(--border-stro
|
|
|
2994
3072
|
.chat-think .ct-dot, .chat-live-text::after { animation: none; opacity: .6; }
|
|
2995
3073
|
}
|
|
2996
3074
|
/* 底部输入条:整块圆角卡片,+ 在左、发送在右(flex 列布局天然钉底) */
|
|
2997
|
-
.rd-chat-bar { flex: none; max-width:
|
|
3075
|
+
.rd-chat-bar { flex: none; max-width: min(1200px, 100%); width: calc(100% - 24px); margin: 8px auto 8px;
|
|
2998
3076
|
border: 1px solid var(--border-strong); border-radius: 18px; background: var(--panel);
|
|
2999
3077
|
padding: 8px 10px 9px; transition: border-color .15s, box-shadow .15s;
|
|
3000
3078
|
box-shadow: 0 1px 6px color-mix(in srgb, var(--text) 5%, transparent); }
|
|
@@ -3256,6 +3334,148 @@ span.imgcap:hover { border-color: var(--accent); color: var(--accent); }
|
|
|
3256
3334
|
100% { offset-distance: 100%; opacity: 0; transform: rotate(-4deg); }
|
|
3257
3335
|
}
|
|
3258
3336
|
|
|
3337
|
+
/* ================= CodeBee workbench refresh =================
|
|
3338
|
+
* A quieter Codex-inspired shell: a slim navigation rail, a compact project
|
|
3339
|
+
* browser, and a single centered command surface. Existing page states and
|
|
3340
|
+
* controls keep their original DOM hooks; this layer only changes geometry.
|
|
3341
|
+
*/
|
|
3342
|
+
:root {
|
|
3343
|
+
--cb-ink: #18212b;
|
|
3344
|
+
--cb-muted: #71808e;
|
|
3345
|
+
--cb-line: #e2e7eb;
|
|
3346
|
+
--cb-surface: #ffffff;
|
|
3347
|
+
--cb-canvas: #f7f8fa;
|
|
3348
|
+
--cb-rail: #eef1f3;
|
|
3349
|
+
--cb-orange: var(--accent);
|
|
3350
|
+
--cb-orange-soft: color-mix(in srgb, var(--accent) 10%, transparent);
|
|
3351
|
+
}
|
|
3352
|
+
|
|
3353
|
+
html[data-theme="light"][data-skin="ocean"] {
|
|
3354
|
+
--bg: var(--cb-canvas);
|
|
3355
|
+
--sidebar: #f0f2f4;
|
|
3356
|
+
--panel: var(--cb-surface);
|
|
3357
|
+
--panel2: #f4f6f8;
|
|
3358
|
+
--border: var(--cb-line);
|
|
3359
|
+
--border-strong: #cfd7de;
|
|
3360
|
+
--text: var(--cb-ink);
|
|
3361
|
+
--muted: var(--cb-muted);
|
|
3362
|
+
--accent: var(--cb-orange);
|
|
3363
|
+
--accent2: #d95420;
|
|
3364
|
+
--shadow: 0 16px 44px rgba(31, 43, 54, .08);
|
|
3365
|
+
}
|
|
3366
|
+
|
|
3367
|
+
#app { grid-template-columns: 46px 224px minmax(0, 1fr); background: var(--bg); }
|
|
3368
|
+
body.side-collapsed #app { grid-template-columns: 46px 0 minmax(0, 1fr); }
|
|
3369
|
+
|
|
3370
|
+
.side-rail {
|
|
3371
|
+
display: flex; flex-direction: column; align-items: center; gap: 7px;
|
|
3372
|
+
padding: 12px 7px 10px; background: var(--cb-rail); border-right: 1px solid var(--cb-line);
|
|
3373
|
+
}
|
|
3374
|
+
.rail-btn {
|
|
3375
|
+
width: 32px; height: 32px; display: grid; place-items: center; padding: 0;
|
|
3376
|
+
border: 0; border-radius: 9px; background: transparent; color: #84909a; cursor: pointer;
|
|
3377
|
+
transition: color .15s ease, background-color .15s ease, transform .15s ease;
|
|
3378
|
+
}
|
|
3379
|
+
.rail-btn:hover { color: var(--cb-ink); background: rgba(255,255,255,.78); }
|
|
3380
|
+
.rail-btn.active { color: var(--cb-orange); background: #fff; box-shadow: 0 2px 8px rgba(37, 45, 52, .08); }
|
|
3381
|
+
.rail-btn:active { transform: scale(.94); }
|
|
3382
|
+
.rail-btn .ico { width: 17px; height: 17px; }
|
|
3383
|
+
.rail-spacer { flex: 1; }
|
|
3384
|
+
|
|
3385
|
+
#sidebar { padding: 13px 10px 10px; background: var(--sidebar); border-right: 1px solid var(--cb-line); }
|
|
3386
|
+
.brand { min-height: 39px; padding: 4px 8px 12px; gap: 8px; border-bottom: 1px solid var(--cb-line); }
|
|
3387
|
+
.brand-bee { display: grid; place-items: center; width: 21px; height: 21px; color: var(--cb-orange); }
|
|
3388
|
+
.brand-bee .ico { width: 19px; height: 19px; stroke-width: 1.8; }
|
|
3389
|
+
.brand-name { color: var(--cb-ink); font-size: 15px; letter-spacing: .02em; }
|
|
3390
|
+
.brand-caret { width: 13px; height: 13px; margin-left: 1px; color: #95a0a9; transform: rotate(90deg); }
|
|
3391
|
+
.new-task, .side-search { min-height: 35px; border-radius: 8px; }
|
|
3392
|
+
.new-task { margin-top: 10px; color: var(--cb-ink); }
|
|
3393
|
+
.new-task:hover, .side-search:hover { background: #e6eaed; }
|
|
3394
|
+
.side-search { color: var(--cb-muted); }
|
|
3395
|
+
.side-quick { margin: 9px 0 8px; }
|
|
3396
|
+
.qitem { min-height: 34px; border-radius: 8px; }
|
|
3397
|
+
.qitem.active { color: var(--cb-ink); background: #e6eaed; }
|
|
3398
|
+
.side-section.tasks { border-top: 1px solid var(--cb-line); padding-top: 10px; }
|
|
3399
|
+
.side-label { color: #89959e; font-size: 11px; letter-spacing: .06em; text-transform: uppercase; }
|
|
3400
|
+
.stask, .sdir summary { border-radius: 7px; }
|
|
3401
|
+
.stask:hover, .sdir summary:hover { background: #e6eaed; }
|
|
3402
|
+
.stask.active { background: var(--cb-orange-soft); color: var(--cb-ink); }
|
|
3403
|
+
.side-usage { border-top: 1px solid var(--cb-line); border-radius: 8px; }
|
|
3404
|
+
.side-foot { border-top-color: var(--cb-line); }
|
|
3405
|
+
|
|
3406
|
+
#mainwrap { background: var(--cb-canvas); }
|
|
3407
|
+
.topbar { min-height: 56px; padding: 10px 22px; background: rgba(247,248,250,.9); border-bottom: 1px solid var(--cb-line); backdrop-filter: blur(16px); }
|
|
3408
|
+
.page-title { color: var(--cb-ink); font-size: 14px; font-weight: 650; }
|
|
3409
|
+
.top-actions { gap: 6px; }
|
|
3410
|
+
.top-actions .pill { background: transparent; border-color: transparent; color: var(--cb-muted); }
|
|
3411
|
+
.top-actions .pill:hover { background: #e9edf0; border-color: transparent; color: var(--cb-ink); }
|
|
3412
|
+
.top-actions .conn { color: var(--cb-muted); font-size: 11px; }
|
|
3413
|
+
main { padding: 24px 34px 72px; }
|
|
3414
|
+
|
|
3415
|
+
#sub-tasks { min-height: calc(100vh - 112px); justify-content: center; gap: 12px; }
|
|
3416
|
+
.composer { width: min(680px, 100%); max-width: 680px; margin: 0 auto; padding: 14px 0 0; }
|
|
3417
|
+
.hero-row { justify-content: center; margin-bottom: 30px; }
|
|
3418
|
+
.hero { color: var(--cb-ink); font-size: clamp(24px, 3vw, 31px); font-weight: 500 !important; letter-spacing: -.025em !important; text-align: center; }
|
|
3419
|
+
.form { gap: 0; }
|
|
3420
|
+
.cmp-box { overflow: visible; border: 1px solid #d9dfe4; border-radius: 18px; background: var(--cb-surface); box-shadow: 0 10px 28px rgba(41, 53, 63, .08); transition: border-color .16s ease, box-shadow .16s ease; }
|
|
3421
|
+
.cmp-box:focus-within { border-color: color-mix(in srgb, var(--cb-orange) 50%, #d9dfe4); box-shadow: 0 12px 34px rgba(41, 53, 63, .11), 0 0 0 3px rgba(232,108,45,.09); }
|
|
3422
|
+
.cmp-pills { padding: 12px 14px 2px; }
|
|
3423
|
+
.cmp-wd { color: var(--cb-muted); }
|
|
3424
|
+
.cmp-wd .input-row { gap: 5px; }
|
|
3425
|
+
.cmp-wd input { height: 30px; padding: 5px 8px; border: 0; background: transparent; color: var(--cb-muted); font-size: 12px; }
|
|
3426
|
+
.cmp-wd input:focus { box-shadow: none; }
|
|
3427
|
+
.cmp-wd .ico { width: 14px; height: 14px; }
|
|
3428
|
+
.cmp-hint { margin: 0 15px 2px; font-size: 11px; }
|
|
3429
|
+
.cmp-context-note { margin: 6px 16px 0; color: #8a969f; font-size: 11px; }
|
|
3430
|
+
.cmp-context-note .ico { width: 13px; height: 13px; }
|
|
3431
|
+
#f-goal { min-height: 96px; padding: 11px 16px; border: 0; border-radius: 0; background: transparent; color: var(--cb-ink); font-size: 15px; line-height: 1.6; }
|
|
3432
|
+
#f-goal::placeholder { color: #a7b0b7; }
|
|
3433
|
+
#f-goal:focus { box-shadow: none; }
|
|
3434
|
+
.cmp-bar { min-height: 48px; padding: 7px 10px 9px 13px; border-top: 1px solid #edf0f2; }
|
|
3435
|
+
.type-pick, .cmp-sel { color: var(--cb-muted); background: #f4f6f7; border-color: #e1e6e9; }
|
|
3436
|
+
.type-pick:hover, .cmp-sel:hover { color: var(--cb-ink); background: #edf0f2; }
|
|
3437
|
+
.cmp-send { gap: 6px; }
|
|
3438
|
+
.cmp-send .primary.round { width: 34px; height: 34px; background: var(--cb-orange); box-shadow: 0 4px 12px rgba(232,108,45,.24); }
|
|
3439
|
+
.cmp-send .primary.round:hover { background: #d95b20; }
|
|
3440
|
+
.att-strip .ghost { border-color: transparent; color: var(--cb-muted); }
|
|
3441
|
+
.att-strip .ghost:hover { background: #f1f3f5; }
|
|
3442
|
+
|
|
3443
|
+
main .panel.wide { max-width: 1040px; margin-left: auto; margin-right: auto; }
|
|
3444
|
+
.page { max-width: 1120px; }
|
|
3445
|
+
.panel { border-radius: 14px; box-shadow: 0 8px 22px rgba(41,53,63,.05); }
|
|
3446
|
+
.panel-head { border-bottom-color: var(--cb-line); }
|
|
3447
|
+
button.primary { background: var(--cb-orange); box-shadow: 0 3px 10px rgba(232,108,45,.2); }
|
|
3448
|
+
button.primary:hover { filter: brightness(.96); }
|
|
3449
|
+
|
|
3450
|
+
@media (max-width: 860px) {
|
|
3451
|
+
#app { grid-template-columns: 42px minmax(0, 1fr); }
|
|
3452
|
+
#sidebar { position: fixed; z-index: 30; left: 42px; top: 0; bottom: 0; width: 228px; transform: translateX(0); box-shadow: 16px 0 34px rgba(30,40,50,.12); }
|
|
3453
|
+
body.side-collapsed #app { grid-template-columns: 42px minmax(0, 1fr); }
|
|
3454
|
+
body.side-collapsed #sidebar { transform: translateX(-110%); opacity: 0; }
|
|
3455
|
+
main { padding: 20px 16px 58px; }
|
|
3456
|
+
.topbar { padding: 9px 14px; }
|
|
3457
|
+
.top-actions .pill:nth-child(n+3) { display: none; }
|
|
3458
|
+
#sub-tasks { min-height: calc(100vh - 92px); }
|
|
3459
|
+
.hero { font-size: 24px; }
|
|
3460
|
+
}
|
|
3461
|
+
|
|
3462
|
+
@media (max-width: 560px) {
|
|
3463
|
+
.side-rail { padding-left: 5px; padding-right: 5px; }
|
|
3464
|
+
.rail-btn { width: 30px; height: 30px; }
|
|
3465
|
+
.page-title-wrap { display: none; }
|
|
3466
|
+
.topbar { justify-content: space-between; }
|
|
3467
|
+
.top-actions { margin-left: auto; }
|
|
3468
|
+
.cmp-box { border-radius: 15px; }
|
|
3469
|
+
.cmp-pills { padding: 9px 11px 0; }
|
|
3470
|
+
#f-goal { min-height: 116px; font-size: 14px; }
|
|
3471
|
+
.cmp-bar { align-items: flex-end; }
|
|
3472
|
+
.cmp-send .cmp-sel { display: none; }
|
|
3473
|
+
}
|
|
3474
|
+
|
|
3475
|
+
@media (prefers-reduced-motion: reduce) {
|
|
3476
|
+
.rail-btn, .cmp-box, .primary { transition: none; }
|
|
3477
|
+
}
|
|
3478
|
+
|
|
3259
3479
|
/* 报告里的 md 围栏代码块走 codeBlockHTML(.code-block 行号表格):
|
|
3260
3480
|
抵消 .report td 的表格边框/内距,避免代码格画成九宫格 */
|
|
3261
3481
|
.report .code-block td { border: none; }
|
|
@@ -4046,11 +4266,13 @@ body.inspector-open #run-detail #rd-log.rd-logdrawer {
|
|
|
4046
4266
|
.chat-result .cr-head { display: flex; align-items: center; gap: 8px; font-weight: 600;
|
|
4047
4267
|
font-size: 13.5px; color: var(--ok); }
|
|
4048
4268
|
.chat-result.bad .cr-head { color: var(--bad); }
|
|
4269
|
+
.chat-result.partial .cr-head { color: var(--warn); }
|
|
4049
4270
|
.chat-result.off .cr-head { color: var(--muted); }
|
|
4050
4271
|
.chat-result .cr-head .ico { width: 16px; height: 16px; flex: none; }
|
|
4051
4272
|
.chat-result .cr-meta { font-size: 12px; color: var(--muted); margin-top: 5px; }
|
|
4052
4273
|
.chat-result .cr-err { font-size: 12.5px; color: var(--bad); margin-top: 8px; line-height: 1.5;
|
|
4053
4274
|
white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
4275
|
+
.chat-result.partial .cr-err { color: var(--warn); }
|
|
4054
4276
|
.chat-result .cr-files { margin-top: 10px; }
|
|
4055
4277
|
.chat-result .cr-files-title { font-size: 12px; color: var(--muted); margin-bottom: 6px; }
|
|
4056
4278
|
.chat-result .cr-steps { margin-top: 10px; font-size: 12.5px; }
|
|
@@ -4080,8 +4302,8 @@ main:has(> #page-settings > #sub-runs:not(.hidden)) { padding-bottom: 28px; }
|
|
|
4080
4302
|
justify-content: center;
|
|
4081
4303
|
}
|
|
4082
4304
|
#sub-tasks .composer {
|
|
4083
|
-
width: min(100%,
|
|
4084
|
-
max-width:
|
|
4305
|
+
width: min(100%, 680px);
|
|
4306
|
+
max-width: 680px;
|
|
4085
4307
|
margin: clamp(12px, 7vh, 72px) auto 0;
|
|
4086
4308
|
padding: 0 0 36px;
|
|
4087
4309
|
overflow: visible;
|
|
@@ -4235,9 +4457,14 @@ main:has(> #page-settings > #sub-runs:not(.hidden)) { padding-bottom: 28px; }
|
|
|
4235
4457
|
height: 31px;
|
|
4236
4458
|
box-shadow: none;
|
|
4237
4459
|
}
|
|
4238
|
-
/*
|
|
4239
|
-
|
|
4240
|
-
#sub-tasks .cmp-quick {
|
|
4460
|
+
/* 类型快捷 chips(2026-09-29 按 ZCode 首页构图恢复展示):卡下一排居中
|
|
4461
|
+
ghost pills,点选即定类型;与底部工具栏入口并存,不算重复入口 */
|
|
4462
|
+
#sub-tasks .cmp-quick {
|
|
4463
|
+
display: flex;
|
|
4464
|
+
justify-content: center;
|
|
4465
|
+
flex-wrap: wrap;
|
|
4466
|
+
margin: 16px 0 2px;
|
|
4467
|
+
}
|
|
4241
4468
|
#sub-tasks .cmp-chip {
|
|
4242
4469
|
min-height: 28px;
|
|
4243
4470
|
padding: 4px 10px;
|
|
@@ -4774,6 +5001,49 @@ main.chat-fill #run-detail.chat-mode {
|
|
|
4774
5001
|
}
|
|
4775
5002
|
main.chat-fill #run-detail.chat-mode > .rd-main { overflow: hidden; }
|
|
4776
5003
|
|
|
5004
|
+
/* Codex 式构图(≥1600px 宽屏):时间线在整窗居中成一窄柱,任务卡脱离栏位
|
|
5005
|
+
浮在右上留白里(实底+投影),不再占一条停靠列;对话柱宽度自动给浮卡让位,
|
|
5006
|
+
任何窗宽下都不重叠。<1600px 回落停靠网格,≤980px 维持竖排。 */
|
|
5007
|
+
@media (min-width: 1600px) {
|
|
5008
|
+
main.chat-fill #run-detail.chat-mode {
|
|
5009
|
+
--rd-card-w: clamp(248px, 13.5vw, 284px);
|
|
5010
|
+
--rd-card-gap: clamp(28px, 2.2vw, 40px);
|
|
5011
|
+
display: block;
|
|
5012
|
+
padding-bottom: 6px; /* 输入条往视口底压(默认 20px 呼吸太大) */
|
|
5013
|
+
/* 摘掉玻璃面板的 transform/backdrop-filter:它们会把 fixed 后代的包含块
|
|
5014
|
+
劫持到工作台上,浮卡就没法贴视口右上角了(模糊在 92% 实底上本就不可见)。
|
|
5015
|
+
transform 还被 cb-rise 入场动画的 fill=both 永久钉住(动画值压过普通声明),
|
|
5016
|
+
所以动画一并关掉 */
|
|
5017
|
+
transform: none;
|
|
5018
|
+
backdrop-filter: none;
|
|
5019
|
+
animation: none;
|
|
5020
|
+
}
|
|
5021
|
+
/* 输入条往视口底压:4298 的详情态 28px 底距 + 工作台呼吸 + 条自身边距
|
|
5022
|
+
叠出来 42px 太悬浮;浮卡模式收到 ~22px(同特异性靠文件序靠后取胜) */
|
|
5023
|
+
main:has(> #page-settings > #sub-runs:not(.hidden)) { padding-bottom: 8px; }
|
|
5024
|
+
main.chat-fill #run-detail.chat-mode > .rd-main { height: 100%; }
|
|
5025
|
+
main.chat-fill #run-detail.chat-mode > #rd-railcol {
|
|
5026
|
+
position: fixed;
|
|
5027
|
+
top: 76px; /* topbar 64 + 呼吸 */
|
|
5028
|
+
right: clamp(14px, 1.5vw, 28px);
|
|
5029
|
+
width: var(--rd-card-w);
|
|
5030
|
+
max-height: calc(100vh - 92px);
|
|
5031
|
+
z-index: 40; /* 浮卡层级;日志抽屉(50)展开时盖过它 */
|
|
5032
|
+
}
|
|
5033
|
+
main.chat-fill #run-detail.chat-mode #rd-rail {
|
|
5034
|
+
background: var(--panel); /* 浮卡实底,不透出底下时间线 */
|
|
5035
|
+
box-shadow: 0 18px 44px rgba(6, 18, 35, .16), 0 2px 10px rgba(6, 18, 35, .08);
|
|
5036
|
+
}
|
|
5037
|
+
#run-detail.chat-mode .rd-chat-flow,
|
|
5038
|
+
#run-detail.chat-mode .rd-chat-bar {
|
|
5039
|
+
max-width: min(960px, calc(100% - 2 * (var(--rd-card-w) + var(--rd-card-gap))));
|
|
5040
|
+
}
|
|
5041
|
+
/* 对话模式里按需打开的其它分区(步骤/蜂巢…):右侧整体给浮卡让位 */
|
|
5042
|
+
#run-detail.chat-mode .rd-pane:not([data-pane="chat"]) {
|
|
5043
|
+
padding-right: calc(var(--rd-card-w) + 24px);
|
|
5044
|
+
}
|
|
5045
|
+
}
|
|
5046
|
+
|
|
4777
5047
|
@media (max-width: 980px) {
|
|
4778
5048
|
#run-detail,
|
|
4779
5049
|
main.chat-fill #run-detail.chat-mode {
|
|
@@ -5958,6 +6228,13 @@ button.request-busy > * { opacity: .18; }
|
|
|
5958
6228
|
.su-spark .ks-line { fill: none; stroke: var(--accent); stroke-width: 1.6;
|
|
5959
6229
|
stroke-linejoin: round; stroke-linecap: round; }
|
|
5960
6230
|
.su-spark .ks-area { stroke: none; fill: var(--accent); opacity: .16; }
|
|
6231
|
+
/* 实时更新脉冲:token 数字变化时短暂点亮再淡回(app.js 数字变了才挂 .su-live) */
|
|
6232
|
+
.side-usage.su-live .su-tok { animation: su-live 1.1s ease-out; }
|
|
6233
|
+
@keyframes su-live {
|
|
6234
|
+
0%, 40% { color: var(--accent); }
|
|
6235
|
+
100% { }
|
|
6236
|
+
}
|
|
6237
|
+
@media (prefers-reduced-motion: reduce) { .side-usage.su-live .su-tok { animation: none; } }
|
|
5961
6238
|
|
|
5962
6239
|
/* 计数徽章:导航项右侧的灰底数字胶囊;0 时整块收起(不留空位) */
|
|
5963
6240
|
.nav-badge {
|
|
@@ -6177,3 +6454,559 @@ table.fp-xls { border-collapse: collapse; font-family: var(--mono); font-size: 1
|
|
|
6177
6454
|
.rd-timeout-row label { color: var(--muted); white-space: nowrap; }
|
|
6178
6455
|
.rd-timeout-row select { flex: 0 0 auto; min-width: 96px; }
|
|
6179
6456
|
.rd-timeout-row select:disabled { opacity: .55; cursor: not-allowed; }
|
|
6457
|
+
|
|
6458
|
+
/* ---------------- 禅道·修复记录归档区(追加于文件尾防并行重排) ---------------- */
|
|
6459
|
+
/* 已归档卡:整体降透明度弱化,标题链接维持可点 */
|
|
6460
|
+
.zt-archived { opacity: .62; }
|
|
6461
|
+
.zt-archived .head .name { text-decoration: line-through; text-decoration-thickness: 1px; text-decoration-color: var(--muted); }
|
|
6462
|
+
/* 已归档折叠头:按钮形态(可聚焦),箭头随开合转 90° */
|
|
6463
|
+
button.zt-arch-head {
|
|
6464
|
+
display: flex; align-items: center; gap: 6px; margin: 10px 0 4px;
|
|
6465
|
+
padding: 6px 10px; border: 1px dashed var(--border); border-radius: 10px;
|
|
6466
|
+
background: none; color: var(--muted); font-size: 12.5px; cursor: pointer; width: 100%;
|
|
6467
|
+
}
|
|
6468
|
+
button.zt-arch-head .ico { transition: transform .15s; }
|
|
6469
|
+
button.zt-arch-head.open .ico { transform: rotate(90deg); }
|
|
6470
|
+
button.zt-arch-head:hover { border-color: var(--accent); color: var(--accent); }
|
|
6471
|
+
.zt-arch-list { display: grid; gap: 10px; margin-top: 6px; }
|
|
6472
|
+
|
|
6473
|
+
/* Final layout pass: kept at EOF so legacy skin/component rules cannot undo it. */
|
|
6474
|
+
html[data-theme="light"][data-skin="ocean"] {
|
|
6475
|
+
--bg: #f7f8fa; --sidebar: #f0f2f4; --panel: #fff; --panel2: #f4f6f8;
|
|
6476
|
+
--border: #e2e7eb; --border-strong: #cfd7de; --text: #18212b; --muted: #71808e;
|
|
6477
|
+
--accent: #1f6fd0; --accent2: #5b4fe0; --shadow: 0 16px 44px rgba(31,43,54,.08);
|
|
6478
|
+
}
|
|
6479
|
+
#app { grid-template-columns: 46px 224px minmax(0, 1fr); background: var(--bg); }
|
|
6480
|
+
body.side-collapsed #app { grid-template-columns: 46px 0 minmax(0, 1fr); }
|
|
6481
|
+
.side-rail { display:flex; flex-direction:column; align-items:center; gap:7px; padding:12px 7px 10px; background:#eef1f3; border-right:1px solid #e2e7eb; }
|
|
6482
|
+
.rail-btn { width:32px; height:32px; display:grid; place-items:center; padding:0; border:0; border-radius:9px; background:transparent; color:#84909a; cursor:pointer; transition:color .15s,background-color .15s,transform .15s; }
|
|
6483
|
+
.rail-btn:hover { color:#18212b; background:#fff; }
|
|
6484
|
+
.rail-btn.active { color:var(--accent); background:#fff; box-shadow:0 2px 8px rgba(37,45,52,.08); }
|
|
6485
|
+
.rail-btn:active { transform:scale(.94); }
|
|
6486
|
+
.rail-btn .ico { width:17px; height:17px; }
|
|
6487
|
+
.rail-spacer { flex:1; }
|
|
6488
|
+
#sidebar { padding:13px 10px 10px; background:var(--sidebar); border-right:1px solid #e2e7eb; }
|
|
6489
|
+
.brand { min-height:39px; padding:4px 8px 12px; gap:8px; border-bottom:1px solid #e2e7eb; }
|
|
6490
|
+
.brand-bee { display:grid; place-items:center; width:21px; height:21px; color:var(--accent); }
|
|
6491
|
+
.brand-bee .ico { width:19px; height:19px; stroke-width:1.8; }
|
|
6492
|
+
.brand-name { color:#18212b; font-size:15px; letter-spacing:.02em; }
|
|
6493
|
+
.brand-caret { width:13px; height:13px; margin-left:1px; color:#95a0a9; transform:rotate(90deg); }
|
|
6494
|
+
.new-task, .side-search { min-height:35px; border-radius:8px; }
|
|
6495
|
+
.new-task { margin-top:10px; color:#18212b; }
|
|
6496
|
+
.new-task:hover, .side-search:hover, .stask:hover, .sdir summary:hover { background:#e6eaed; }
|
|
6497
|
+
.side-search { color:#71808e; }
|
|
6498
|
+
.side-quick { margin:9px 0 8px; }
|
|
6499
|
+
.side-section.tasks { border-top:1px solid #e2e7eb; padding-top:10px; }
|
|
6500
|
+
.side-label { color:#89959e; font-size:11px; letter-spacing:.06em; text-transform:uppercase; }
|
|
6501
|
+
.stask.active { background:color-mix(in srgb, var(--accent) 10%, transparent); color:#18212b; }
|
|
6502
|
+
.side-usage { border-top:1px solid #e2e7eb; border-radius:8px; }
|
|
6503
|
+
.side-foot { border-top-color:#e2e7eb; }
|
|
6504
|
+
#mainwrap { background:#f7f8fa; }
|
|
6505
|
+
.topbar { min-height:56px; padding:10px 22px; background:rgba(247,248,250,.9); border-bottom:1px solid #e2e7eb; backdrop-filter:blur(16px); }
|
|
6506
|
+
.page-title { color:#18212b; font-size:14px; font-weight:650; }
|
|
6507
|
+
.top-actions { gap:6px; }
|
|
6508
|
+
.top-actions .pill { background:transparent; border-color:transparent; color:#71808e; }
|
|
6509
|
+
.top-actions .pill:hover { background:#e9edf0; border-color:transparent; color:#18212b; }
|
|
6510
|
+
main { padding:24px 34px 72px; }
|
|
6511
|
+
#sub-tasks { min-height:calc(100vh - 112px); justify-content:center; gap:12px; }
|
|
6512
|
+
.composer { width:min(680px,100%); max-width:680px; margin:0 auto; padding:14px 0 0; }
|
|
6513
|
+
.hero-row { justify-content:center; margin-bottom:18px; }
|
|
6514
|
+
.hero { color:#18212b; font-size:clamp(24px,3vw,31px); font-weight:500 !important; letter-spacing:-.025em !important; text-align:center; }
|
|
6515
|
+
.cmp-box { overflow:visible; border:1px solid #d9dfe4; border-radius:18px; background:#fff; box-shadow:0 10px 28px rgba(41,53,63,.08); }
|
|
6516
|
+
.cmp-box:focus-within { border-color:#e8a17f; box-shadow:0 12px 34px rgba(41,53,63,.11),0 0 0 3px rgba(232,108,45,.09); }
|
|
6517
|
+
.cmp-pills { padding:12px 14px 2px; }
|
|
6518
|
+
.cmp-wd input { height:30px; padding:5px 8px; border:0; background:transparent; color:#71808e; font-size:12px; }
|
|
6519
|
+
.cmp-wd input:focus { box-shadow:none; }
|
|
6520
|
+
.cmp-wd .ico { width:14px; height:14px; }
|
|
6521
|
+
.cmp-hint { margin:0 15px 2px; font-size:11px; }
|
|
6522
|
+
.cmp-context-note { margin:6px 16px 0; color:#8a969f; font-size:11px; }
|
|
6523
|
+
.cmp-context-note .ico { width:13px; height:13px; }
|
|
6524
|
+
#f-goal { min-height:96px; padding:11px 16px; border:0; border-radius:0; background:transparent; color:#18212b; font-size:15px; line-height:1.6; }
|
|
6525
|
+
#f-goal:focus { box-shadow:none; }
|
|
6526
|
+
.cmp-bar { min-height:48px; padding:7px 10px 9px 13px; border-top:1px solid #edf0f2; }
|
|
6527
|
+
.type-pick, .cmp-sel { color:#71808e; background:#f4f6f7; border-color:#e1e6e9; }
|
|
6528
|
+
.type-pick:hover, .cmp-sel:hover { color:#18212b; background:#edf0f2; }
|
|
6529
|
+
.cmp-send { gap:6px; }
|
|
6530
|
+
.cmp-send .primary.round { width:34px; height:34px; background:var(--accent); box-shadow:0 4px 12px color-mix(in srgb, var(--accent) 24%, transparent); }
|
|
6531
|
+
.att-strip .ghost { border-color:transparent; color:#71808e; }
|
|
6532
|
+
.att-strip .ghost:hover { background:#f1f3f5; }
|
|
6533
|
+
main .panel.wide { max-width:1040px; margin-left:auto; margin-right:auto; }
|
|
6534
|
+
button.primary { background:var(--accent); box-shadow:0 3px 10px color-mix(in srgb, var(--accent) 20%, transparent); }
|
|
6535
|
+
button.primary:hover { filter:brightness(.96); }
|
|
6536
|
+
@media (max-width:860px) {
|
|
6537
|
+
#app, body.side-collapsed #app { grid-template-columns:42px minmax(0,1fr); }
|
|
6538
|
+
#sidebar { position:fixed; z-index:30; left:42px; top:0; bottom:0; width:228px; transform:translateX(0); box-shadow:16px 0 34px rgba(30,40,50,.12); }
|
|
6539
|
+
body.side-collapsed #sidebar { transform:translateX(-110%); opacity:0; }
|
|
6540
|
+
main { padding:20px 16px 58px; }
|
|
6541
|
+
.topbar { padding:9px 14px; }
|
|
6542
|
+
#sub-tasks { min-height:calc(100vh - 92px); }
|
|
6543
|
+
.hero { font-size:24px; }
|
|
6544
|
+
}
|
|
6545
|
+
@media (max-width:560px) {
|
|
6546
|
+
.side-rail { padding-left:5px; padding-right:5px; }
|
|
6547
|
+
.rail-btn { width:30px; height:30px; }
|
|
6548
|
+
.page-title-wrap { display:none; }
|
|
6549
|
+
.topbar { justify-content:space-between; }
|
|
6550
|
+
.cmp-box { border-radius:15px; }
|
|
6551
|
+
.cmp-pills { padding:9px 11px 0; }
|
|
6552
|
+
#f-goal { min-height:116px; font-size:14px; }
|
|
6553
|
+
.cmp-send .cmp-sel { display:none; }
|
|
6554
|
+
}
|
|
6555
|
+
|
|
6556
|
+
/* Keep the layout refresh on the existing skin palette. The workbench should
|
|
6557
|
+
inherit ocean/forest/amber/violet/contrast choices instead of imposing a new
|
|
6558
|
+
brand color. */
|
|
6559
|
+
html[data-skin="ocean"][data-theme="light"] {
|
|
6560
|
+
--bg: #fff; --sidebar: #eff5fd; --panel: #fff; --panel2: #f0f6fd;
|
|
6561
|
+
--border: #d7e3f4; --border-strong: #b9cde8; --text: #0c1a2c; --muted: #526983;
|
|
6562
|
+
--accent: #1f6fd0; --accent2: #5b4fe0; --ok: #0d9a72; --warn: #a9761a;
|
|
6563
|
+
--bad: #d23c58; --chip-queued-bg: #f0f6fd; --log-bg: #f4f8fe; --log-text: #33475f;
|
|
6564
|
+
}
|
|
6565
|
+
.brand-bee { display: none; }
|
|
6566
|
+
.brand-name { color: var(--text); }
|
|
6567
|
+
.side-rail { background: var(--sidebar); border-right-color: var(--border); }
|
|
6568
|
+
.rail-btn:hover, .rail-btn.active { background: var(--panel); }
|
|
6569
|
+
.topbar, #mainwrap { background: var(--bg); }
|
|
6570
|
+
.cmp-box { background: var(--panel); border-color: var(--border-strong); }
|
|
6571
|
+
.rail-btn.active { color: var(--accent); }
|
|
6572
|
+
.new-task:hover, .side-search:hover, .stask:hover, .sdir summary:hover { background: var(--panel2); }
|
|
6573
|
+
.stask.active { background: color-mix(in srgb, var(--accent) 10%, transparent); color: var(--text); }
|
|
6574
|
+
.cmp-box:focus-within { border-color: color-mix(in srgb, var(--accent) 50%, var(--border-strong)); box-shadow: 0 12px 34px color-mix(in srgb, var(--accent) 10%, transparent), 0 0 0 3px color-mix(in srgb, var(--accent) 10%, transparent); }
|
|
6575
|
+
.cmp-send .primary.round, button.primary { background: var(--accent); box-shadow: 0 4px 12px color-mix(in srgb, var(--accent) 24%, transparent); }
|
|
6576
|
+
.cmp-send .primary.round:hover, button.primary:hover { background: var(--accent2); }
|
|
6577
|
+
.cmp-context-note, .cmp-wd input, .att-strip .ghost { color: var(--muted); }
|
|
6578
|
+
.hero, .page-title, .new-task { color: var(--text); }
|
|
6579
|
+
html[data-skin="contrast"] .rail-btn.active { box-shadow: none; }
|
|
6580
|
+
|
|
6581
|
+
/* 一级导航已经迁移到最左侧窄轨,项目栏只保留项目与任务内容,避免重复入口。 */
|
|
6582
|
+
.side-quick { display: none; }
|
|
6583
|
+
.side-foot { display: none; }
|
|
6584
|
+
|
|
6585
|
+
/* 项目栏顶部:搜索收进标题行,新任务回归普通命令项。 */
|
|
6586
|
+
.side-main { position: relative; }
|
|
6587
|
+
.brand-row { display: flex; align-items: center; min-height: 39px; padding: 0 10px 0 12px; border-bottom: 1px solid var(--border); }
|
|
6588
|
+
.brand-row .brand { flex: 1 1 auto; width: auto; min-width: 0; padding: 4px 0 12px; border-bottom: 0; }
|
|
6589
|
+
.brand-tool { width: 28px; height: 28px; display: inline-flex; align-items: center; justify-content: center; flex: none; padding: 0; border: 0; background: transparent; color: var(--muted); border-radius: 7px; cursor: pointer; }
|
|
6590
|
+
.brand-tool:hover { color: var(--text); background: var(--panel2); }
|
|
6591
|
+
.brand-tool .ico { width: 15px; height: 15px; }
|
|
6592
|
+
.brand-row .side-search { position: static; min-height: 28px; height: 28px; margin: 0; }
|
|
6593
|
+
.brand-row .side-search .ss-label, .brand-row .side-search .kbd { display: none; }
|
|
6594
|
+
.side-main > .new-task {
|
|
6595
|
+
width: calc(100% - 24px); min-height: 34px; margin: 8px 12px 6px 12px; padding: 7px 9px;
|
|
6596
|
+
background: transparent; color: var(--text); border: 0; border-radius: 8px;
|
|
6597
|
+
box-shadow: none; font-weight: 400; transform: none;
|
|
6598
|
+
}
|
|
6599
|
+
.side-main > .new-task:hover {
|
|
6600
|
+
background: var(--panel2); color: var(--text); box-shadow: none; transform: none;
|
|
6601
|
+
}
|
|
6602
|
+
.side-main > .new-task .kbd { display: none; }
|
|
6603
|
+
.side-main > .new-task .ico { width: 15px; height: 15px; color: var(--muted); }
|
|
6604
|
+
.side-label-row { min-height: 34px; }
|
|
6605
|
+
.side-label-row .foot-btn { display: flex; }
|
|
6606
|
+
|
|
6607
|
+
/* Typography pass: slightly larger working text and clearer hierarchy. */
|
|
6608
|
+
body { font-size: 14px; }
|
|
6609
|
+
#sidebar { font-size: 13px; }
|
|
6610
|
+
.brand-name { font-size: 16px; font-weight: 700; }
|
|
6611
|
+
.new-task { font-size: 14px; }
|
|
6612
|
+
.side-label { font-size: 12px; letter-spacing: .04em; }
|
|
6613
|
+
.sdir summary, .stask { font-size: 13px; }
|
|
6614
|
+
.sdir summary, .stask { line-height: 1.55; }
|
|
6615
|
+
.side-usage { font-size: 12px; }
|
|
6616
|
+
.topbar .page-title { font-size: 15px; }
|
|
6617
|
+
main { font-size: 14px; }
|
|
6618
|
+
#run-list .item { border-color: color-mix(in srgb, var(--border) 72%, transparent); border-radius: 11px; padding: 11px 12px; }
|
|
6619
|
+
#run-list .item .rt .name { font-size: 14px; }
|
|
6620
|
+
#run-list .item .rt .desc { font-size: 12px; }
|
|
6621
|
+
#run-list .item .time { font-size: 12px; }
|
|
6622
|
+
.cmp-context-note, .cmp-hint, .cmp-estimate { font-size: 12px; }
|
|
6623
|
+
#f-goal::placeholder { color: color-mix(in srgb, var(--muted) 78%, #fff); }
|
|
6624
|
+
|
|
6625
|
+
/* Match the reference proportions: 46px rail + 216px project column. */
|
|
6626
|
+
#app { grid-template-columns: 46px 216px minmax(0, 1fr); }
|
|
6627
|
+
body.side-collapsed #app { grid-template-columns: 46px 0 minmax(0, 1fr); }
|
|
6628
|
+
#sidebar { padding: 13px 0 10px; }
|
|
6629
|
+
.brand { width: 100%; padding: 4px 12px 12px; justify-content: flex-start; text-align: left; }
|
|
6630
|
+
.brand {
|
|
6631
|
+
display: flex; align-items: center; gap: 7px; min-height: 39px;
|
|
6632
|
+
margin: 0; border: 0; outline: 0; background: transparent;
|
|
6633
|
+
color: var(--text); font: inherit; cursor: pointer;
|
|
6634
|
+
}
|
|
6635
|
+
.brand:hover { background: transparent; }
|
|
6636
|
+
.brand:focus, .brand:active { border: 0; outline: 0; box-shadow: none; }
|
|
6637
|
+
.brand:focus-visible { outline: 2px solid color-mix(in srgb, var(--accent) 45%, transparent); outline-offset: -2px; }
|
|
6638
|
+
.brand-name { flex: 0 0 auto; }
|
|
6639
|
+
.side-main > .new-task { margin-left: 12px; margin-right: 10px; }
|
|
6640
|
+
.side-section.tasks { padding-left: 12px; padding-right: 10px; }
|
|
6641
|
+
.side-usage { margin-left: 10px; margin-right: 10px; }
|
|
6642
|
+
.side-usage { width: calc(100% - 20px); max-width: calc(100% - 20px); }
|
|
6643
|
+
|
|
6644
|
+
.brand-menu {
|
|
6645
|
+
position: absolute; z-index: 80; top: 47px; left: 8px; width: 204px;
|
|
6646
|
+
padding: 6px; border: 1px solid var(--border-strong); border-radius: 12px;
|
|
6647
|
+
background: var(--panel); box-shadow: 0 14px 32px color-mix(in srgb, var(--text) 16%, transparent);
|
|
6648
|
+
}
|
|
6649
|
+
.brand-menu-item {
|
|
6650
|
+
display: flex; align-items: center; justify-content: space-between; gap: 10px;
|
|
6651
|
+
min-height: 48px; padding: 8px 9px; border-radius: 8px; color: var(--text);
|
|
6652
|
+
font-size: 13px;
|
|
6653
|
+
}
|
|
6654
|
+
.brand-menu-item.selected { background: color-mix(in srgb, var(--panel2) 70%, transparent); }
|
|
6655
|
+
.brand-menu-item b { display: block; font-weight: 600; }
|
|
6656
|
+
.brand-menu-item small { display: block; margin-top: 2px; color: var(--muted); font-size: 11px; }
|
|
6657
|
+
.brand-menu-item > .ico { width: 15px; height: 15px; color: var(--muted); }
|
|
6658
|
+
.brand-caret { transition: transform .15s ease; }
|
|
6659
|
+
.brand[aria-expanded="true"] .brand-caret { transform: rotate(-90deg); }
|
|
6660
|
+
|
|
6661
|
+
/* Stable three-column header: workspace name | notifications | search. */
|
|
6662
|
+
.brand-row {
|
|
6663
|
+
display: grid; grid-template-columns: minmax(0, 1fr) 28px 28px;
|
|
6664
|
+
align-items: center; gap: 2px;
|
|
6665
|
+
}
|
|
6666
|
+
.brand-row > #btn-brand {
|
|
6667
|
+
display: inline-flex !important; width: 100% !important; min-width: 0 !important;
|
|
6668
|
+
flex: none !important; align-items: center; justify-content: flex-start;
|
|
6669
|
+
height: 28px; padding: 0 !important; overflow: visible;
|
|
6670
|
+
}
|
|
6671
|
+
.brand-row > #btn-brand .brand-name {
|
|
6672
|
+
display: inline-block !important; visibility: visible !important;
|
|
6673
|
+
flex: none; white-space: nowrap;
|
|
6674
|
+
}
|
|
6675
|
+
.brand-row > .brand-tool { position: static !important; width: 28px; min-width: 28px; }
|
|
6676
|
+
.side-section.tasks { border-top: 0 !important; margin-top: 0 !important; padding-top: 8px; }
|
|
6677
|
+
|
|
6678
|
+
/* Compact the handoff from the new-chat action to the project list. */
|
|
6679
|
+
.side-main > .new-task { margin-bottom: 2px; }
|
|
6680
|
+
.side-section.tasks { padding-top: 4px; }
|
|
6681
|
+
|
|
6682
|
+
/* The task landing page previously exceeded main's content box by 4px,
|
|
6683
|
+
which made an idle workspace show a permanent vertical scrollbar. */
|
|
6684
|
+
#sub-tasks { min-height: calc(100dvh - 116px); }
|
|
6685
|
+
|
|
6686
|
+
/* The inspector is a fourth top-level grid item (rail | project list | main | inspector).
|
|
6687
|
+
Keep the rail and project column in the grid when the right detail panel opens;
|
|
6688
|
+
the older three-column rule put the inspector on a new row and squeezed the main area. */
|
|
6689
|
+
body.inspector-open #app {
|
|
6690
|
+
grid-template-columns: 46px 216px minmax(0, 1fr) minmax(280px, 340px);
|
|
6691
|
+
}
|
|
6692
|
+
body.side-collapsed.inspector-open #app {
|
|
6693
|
+
grid-template-columns: 46px 0 minmax(0, 1fr) minmax(280px, 340px);
|
|
6694
|
+
}
|
|
6695
|
+
|
|
6696
|
+
/* Shared page rhythm: every secondary workspace uses one readable content axis.
|
|
6697
|
+
The task composer remains its own centered surface; all other pages align
|
|
6698
|
+
headings, cards, tables, and lists to the same content column. */
|
|
6699
|
+
#page-settings > .subpage:not(#sub-tasks) {
|
|
6700
|
+
width: min(1440px, 100%);
|
|
6701
|
+
max-width: 1440px;
|
|
6702
|
+
margin-inline: auto;
|
|
6703
|
+
gap: 16px;
|
|
6704
|
+
}
|
|
6705
|
+
#page-settings > #sub-browser {
|
|
6706
|
+
width: 100%;
|
|
6707
|
+
max-width: none;
|
|
6708
|
+
margin-inline: 0;
|
|
6709
|
+
min-height: 0;
|
|
6710
|
+
}
|
|
6711
|
+
#page-settings > #sub-browser .browser-shell {
|
|
6712
|
+
width: 100%;
|
|
6713
|
+
min-height: calc(100dvh - 116px);
|
|
6714
|
+
}
|
|
6715
|
+
#page-settings > .subpage:not(#sub-tasks) > .panel.wide {
|
|
6716
|
+
width: 100%;
|
|
6717
|
+
max-width: none;
|
|
6718
|
+
margin-inline: 0;
|
|
6719
|
+
}
|
|
6720
|
+
#page-settings > .subpage:not(#sub-tasks) .panel-head {
|
|
6721
|
+
min-height: 38px;
|
|
6722
|
+
margin-bottom: 14px;
|
|
6723
|
+
padding-bottom: 10px;
|
|
6724
|
+
gap: 10px;
|
|
6725
|
+
}
|
|
6726
|
+
#page-settings > .subpage:not(#sub-tasks) .panel-head h2 {
|
|
6727
|
+
font-size: 15px;
|
|
6728
|
+
line-height: 1.35;
|
|
6729
|
+
}
|
|
6730
|
+
#page-settings > .subpage:not(#sub-tasks) .hint {
|
|
6731
|
+
line-height: 1.55;
|
|
6732
|
+
}
|
|
6733
|
+
#page-settings > .subpage:not(#sub-tasks) .cards,
|
|
6734
|
+
#page-settings > .subpage:not(#sub-tasks) .list {
|
|
6735
|
+
min-width: 0;
|
|
6736
|
+
}
|
|
6737
|
+
#page-settings > #sub-overview .ov-title { font-size: 25px; }
|
|
6738
|
+
#page-settings > #sub-overview .ov-row { gap: 12px; }
|
|
6739
|
+
#page-settings > #sub-overview .panel { border-radius: 12px; }
|
|
6740
|
+
|
|
6741
|
+
/* Keep the current skin in charge of focus and action colors. */
|
|
6742
|
+
#sub-tasks .cmp-box:focus-within {
|
|
6743
|
+
border-color: color-mix(in srgb, var(--accent) 50%, var(--border-strong));
|
|
6744
|
+
box-shadow: 0 12px 34px color-mix(in srgb, var(--text) 10%, transparent),
|
|
6745
|
+
0 0 0 3px color-mix(in srgb, var(--accent) 11%, transparent);
|
|
6746
|
+
}
|
|
6747
|
+
.side-rail, #sidebar { background: var(--sidebar); border-color: var(--border); }
|
|
6748
|
+
#mainwrap, .topbar { background: var(--bg); border-color: var(--border); }
|
|
6749
|
+
.rail-btn:hover, .rail-btn.active { background: var(--panel); }
|
|
6750
|
+
.rail-btn.active, .stask.active, .qitem.active { color: var(--accent); }
|
|
6751
|
+
.stask.active, .qitem.active { background: color-mix(in srgb, var(--accent) 10%, transparent); }
|
|
6752
|
+
.new-task:hover, .side-search:hover, .stask:hover, .sdir summary:hover { background: var(--panel2); }
|
|
6753
|
+
.panel { box-shadow: var(--shadow); }
|
|
6754
|
+
.panel-head { border-bottom-color: var(--border); }
|
|
6755
|
+
button.primary, .cmp-send .primary.round { background: var(--accent); box-shadow: 0 4px 12px color-mix(in srgb, var(--accent) 22%, transparent); }
|
|
6756
|
+
button.primary:hover, .cmp-send .primary.round:hover { background: var(--accent2); }
|
|
6757
|
+
|
|
6758
|
+
/* On small screens the inspector is an overlay. It must not add grid columns
|
|
6759
|
+
after the desktop four-column rule above. */
|
|
6760
|
+
@media (max-width: 900px) {
|
|
6761
|
+
#app, body.side-collapsed #app,
|
|
6762
|
+
body.inspector-open #app, body.side-collapsed.inspector-open #app {
|
|
6763
|
+
grid-template-columns: 42px minmax(0, 1fr);
|
|
6764
|
+
}
|
|
6765
|
+
#page-settings > .subpage:not(#sub-tasks) {
|
|
6766
|
+
width: 100%;
|
|
6767
|
+
max-width: none;
|
|
6768
|
+
}
|
|
6769
|
+
#page-settings > #sub-browser .browser-shell {
|
|
6770
|
+
min-height: calc(100dvh - 112px);
|
|
6771
|
+
}
|
|
6772
|
+
}
|
|
6773
|
+
|
|
6774
|
+
/* Browser console: this is CodeBee's operating surface, so it owns the
|
|
6775
|
+
available canvas instead of inheriting the centered 1040px reading column. */
|
|
6776
|
+
main.browser-page-active {
|
|
6777
|
+
display: flex;
|
|
6778
|
+
flex: 1 1 0;
|
|
6779
|
+
flex-direction: column;
|
|
6780
|
+
min-height: 0;
|
|
6781
|
+
overflow: hidden;
|
|
6782
|
+
padding: 0;
|
|
6783
|
+
}
|
|
6784
|
+
main.browser-page-active > #page-settings {
|
|
6785
|
+
display: flex;
|
|
6786
|
+
flex: 1 1 0;
|
|
6787
|
+
min-height: 0;
|
|
6788
|
+
width: 100%;
|
|
6789
|
+
max-width: none;
|
|
6790
|
+
margin: 0;
|
|
6791
|
+
}
|
|
6792
|
+
main.browser-page-active #page-settings > #sub-browser {
|
|
6793
|
+
display: flex;
|
|
6794
|
+
flex: 1 1 0;
|
|
6795
|
+
width: 100%;
|
|
6796
|
+
max-width: none;
|
|
6797
|
+
min-height: 0;
|
|
6798
|
+
margin: 0;
|
|
6799
|
+
gap: 0;
|
|
6800
|
+
}
|
|
6801
|
+
main.browser-page-active #page-settings > #sub-browser .browser-shell {
|
|
6802
|
+
width: 100%;
|
|
6803
|
+
height: 100%;
|
|
6804
|
+
min-height: 0;
|
|
6805
|
+
border: 0;
|
|
6806
|
+
border-radius: 0;
|
|
6807
|
+
box-shadow: none;
|
|
6808
|
+
}
|
|
6809
|
+
.browser-stage { min-height: 0; }
|
|
6810
|
+
.browser-viewport {
|
|
6811
|
+
display: flex;
|
|
6812
|
+
flex: 1 1 0;
|
|
6813
|
+
min-width: 0;
|
|
6814
|
+
min-height: 0;
|
|
6815
|
+
}
|
|
6816
|
+
.browser-context {
|
|
6817
|
+
display: flex;
|
|
6818
|
+
flex: 0 0 276px;
|
|
6819
|
+
flex-direction: column;
|
|
6820
|
+
gap: 12px;
|
|
6821
|
+
min-height: 0;
|
|
6822
|
+
padding: 15px 14px;
|
|
6823
|
+
overflow-y: auto;
|
|
6824
|
+
border-right: 1px solid var(--border);
|
|
6825
|
+
background: color-mix(in srgb, var(--panel2) 68%, var(--bg));
|
|
6826
|
+
}
|
|
6827
|
+
.browser-context-head,
|
|
6828
|
+
.browser-context-section-head {
|
|
6829
|
+
display: flex;
|
|
6830
|
+
align-items: center;
|
|
6831
|
+
gap: 7px;
|
|
6832
|
+
}
|
|
6833
|
+
.browser-context-kicker {
|
|
6834
|
+
display: inline-flex;
|
|
6835
|
+
align-items: center;
|
|
6836
|
+
gap: 7px;
|
|
6837
|
+
color: var(--text);
|
|
6838
|
+
font-size: 11px;
|
|
6839
|
+
font-weight: 700;
|
|
6840
|
+
letter-spacing: .08em;
|
|
6841
|
+
text-transform: uppercase;
|
|
6842
|
+
}
|
|
6843
|
+
.browser-context-kicker .ico { width: 14px; height: 14px; color: var(--accent); }
|
|
6844
|
+
.browser-context-live {
|
|
6845
|
+
display: inline-flex;
|
|
6846
|
+
align-items: center;
|
|
6847
|
+
gap: 5px;
|
|
6848
|
+
margin-left: auto;
|
|
6849
|
+
color: var(--muted);
|
|
6850
|
+
font-size: 10px;
|
|
6851
|
+
}
|
|
6852
|
+
.browser-context-live i {
|
|
6853
|
+
width: 6px; height: 6px; border-radius: 50%; background: var(--ok);
|
|
6854
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--ok) 13%, transparent);
|
|
6855
|
+
}
|
|
6856
|
+
.browser-context-select { display: flex; flex-direction: column; gap: 5px; }
|
|
6857
|
+
.browser-context-select label,
|
|
6858
|
+
.browser-context-section-head { color: var(--muted); font-size: 11px; font-weight: 650; }
|
|
6859
|
+
.browser-context-select select {
|
|
6860
|
+
width: 100%; min-width: 0; height: 34px; padding: 0 9px;
|
|
6861
|
+
border-radius: 8px; font-size: 12px; background: var(--panel);
|
|
6862
|
+
}
|
|
6863
|
+
.browser-task-card {
|
|
6864
|
+
display: flex; flex-direction: column; gap: 8px; min-height: 88px;
|
|
6865
|
+
padding: 11px; border: 1px solid var(--border); border-radius: 10px;
|
|
6866
|
+
background: var(--panel);
|
|
6867
|
+
}
|
|
6868
|
+
.browser-task-title { color: var(--text); font-size: 13px; font-weight: 700; line-height: 1.4; overflow-wrap: anywhere; }
|
|
6869
|
+
.browser-task-meta { display: flex; flex-wrap: wrap; gap: 5px; color: var(--muted); font-size: 10.5px; }
|
|
6870
|
+
.browser-task-meta span { display: inline-flex; align-items: center; gap: 4px; }
|
|
6871
|
+
.browser-task-meta .browser-task-status { color: var(--accent); font-weight: 650; }
|
|
6872
|
+
.browser-task-goal { display: -webkit-box; overflow: hidden; color: var(--muted); font-size: 11px; line-height: 1.45; -webkit-box-orient: vertical; -webkit-line-clamp: 3; }
|
|
6873
|
+
.browser-task-empty { color: var(--muted); font-size: 12px; line-height: 1.5; }
|
|
6874
|
+
.browser-context-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
|
|
6875
|
+
.browser-context-actions button:first-child { grid-column: 1 / -1; }
|
|
6876
|
+
.browser-context-actions button { min-width: 0; justify-content: center; }
|
|
6877
|
+
.browser-context-section { padding-top: 12px; border-top: 1px solid var(--border); }
|
|
6878
|
+
.browser-context-section-head { justify-content: space-between; margin-bottom: 8px; color: var(--text); }
|
|
6879
|
+
.browser-context-section-head .icon-btn { width: 22px; height: 22px; }
|
|
6880
|
+
.browser-context-section-head .icon-btn .ico { width: 13px; height: 13px; }
|
|
6881
|
+
.browser-verify-card, .browser-publish-card { color: var(--muted); font-size: 11px; line-height: 1.5; }
|
|
6882
|
+
.browser-verify-line { display: flex; align-items: center; gap: 7px; color: var(--text); }
|
|
6883
|
+
.browser-verify-line .ico { width: 14px; height: 14px; }
|
|
6884
|
+
.browser-verify-line.ok { color: var(--ok); }
|
|
6885
|
+
.browser-verify-line.bad { color: var(--bad); }
|
|
6886
|
+
.browser-verify-command { margin-top: 5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 10px var(--mono); }
|
|
6887
|
+
.browser-publish-note { margin: -2px 0 8px; color: var(--muted); font-size: 10px; line-height: 1.45; }
|
|
6888
|
+
.browser-publish-platforms { display: grid; gap: 5px; }
|
|
6889
|
+
.browser-publish-platform { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
|
|
6890
|
+
.browser-publish-platform b { color: var(--text); font-weight: 600; }
|
|
6891
|
+
.browser-publish-platform span { color: var(--muted); font-size: 10px; }
|
|
6892
|
+
.browser-empty {
|
|
6893
|
+
align-items: stretch;
|
|
6894
|
+
justify-content: stretch;
|
|
6895
|
+
padding: 0;
|
|
6896
|
+
overflow: auto;
|
|
6897
|
+
text-align: left;
|
|
6898
|
+
}
|
|
6899
|
+
.browser-home-workbench {
|
|
6900
|
+
display: grid;
|
|
6901
|
+
grid-template-rows: auto auto auto minmax(94px, 1fr);
|
|
6902
|
+
gap: 14px;
|
|
6903
|
+
width: 100%;
|
|
6904
|
+
min-height: 100%;
|
|
6905
|
+
padding: clamp(16px, 2vw, 28px);
|
|
6906
|
+
background:
|
|
6907
|
+
linear-gradient(135deg, color-mix(in srgb, var(--accent) 8%, transparent), transparent 42%),
|
|
6908
|
+
radial-gradient(circle at 92% 8%, color-mix(in srgb, var(--accent) 10%, transparent), transparent 28%),
|
|
6909
|
+
var(--bg);
|
|
6910
|
+
}
|
|
6911
|
+
.browser-home-hero {
|
|
6912
|
+
display: grid;
|
|
6913
|
+
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
6914
|
+
align-items: center;
|
|
6915
|
+
gap: 16px;
|
|
6916
|
+
padding: 18px 20px;
|
|
6917
|
+
border: 1px solid var(--border);
|
|
6918
|
+
border-radius: 14px;
|
|
6919
|
+
background: color-mix(in srgb, var(--panel) 88%, transparent);
|
|
6920
|
+
box-shadow: 0 12px 28px color-mix(in srgb, var(--text) 6%, transparent);
|
|
6921
|
+
}
|
|
6922
|
+
.browser-home-copy { min-width: 0; }
|
|
6923
|
+
.browser-home-eyebrow { display: block; margin-bottom: 3px; color: var(--accent); font-size: 10.5px; font-weight: 750; letter-spacing: .1em; text-transform: uppercase; }
|
|
6924
|
+
.browser-home-hero h2 { margin: 0 0 4px; color: var(--text); font-size: clamp(20px, 2vw, 27px); line-height: 1.25; }
|
|
6925
|
+
.browser-home-hero p { max-width: 760px; margin: 0; color: var(--muted); font-size: 12.5px; line-height: 1.55; }
|
|
6926
|
+
.browser-home-mode { display: inline-flex; align-items: center; gap: 6px; padding: 6px 9px; border: 1px solid var(--border); border-radius: 999px; color: var(--muted); background: var(--panel2); font-size: 10.5px; white-space: nowrap; }
|
|
6927
|
+
.browser-home-mode i { width: 6px; height: 6px; border-radius: 50%; background: var(--ok); box-shadow: 0 0 0 3px color-mix(in srgb, var(--ok) 13%, transparent); }
|
|
6928
|
+
.browser-home-current {
|
|
6929
|
+
padding: 14px 16px;
|
|
6930
|
+
border: 1px solid var(--border);
|
|
6931
|
+
border-radius: 12px;
|
|
6932
|
+
background: color-mix(in srgb, var(--panel2) 62%, var(--panel));
|
|
6933
|
+
}
|
|
6934
|
+
.browser-home-section-label { display: block; margin-bottom: 7px; color: var(--muted); font-size: 10px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
|
|
6935
|
+
.browser-home-task-row { display: flex; align-items: center; justify-content: space-between; gap: 18px; }
|
|
6936
|
+
.browser-home-task-row > div { min-width: 0; }
|
|
6937
|
+
.browser-home-task-row h3 { margin: 0; overflow: hidden; color: var(--text); font-size: 15px; line-height: 1.35; text-overflow: ellipsis; white-space: nowrap; }
|
|
6938
|
+
.browser-home-task-row p { margin: 3px 0 0; overflow: hidden; color: var(--muted); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; }
|
|
6939
|
+
.browser-home-run { flex: none; max-width: 42%; overflow: hidden; color: var(--accent); font: 10.5px var(--mono); text-overflow: ellipsis; white-space: nowrap; }
|
|
6940
|
+
.browser-home-workflows { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
|
|
6941
|
+
.browser-home-action {
|
|
6942
|
+
display: flex;
|
|
6943
|
+
align-items: center;
|
|
6944
|
+
gap: 13px;
|
|
6945
|
+
min-width: 0;
|
|
6946
|
+
min-height: 86px;
|
|
6947
|
+
padding: 15px 16px;
|
|
6948
|
+
border: 1px solid var(--border);
|
|
6949
|
+
border-radius: 12px;
|
|
6950
|
+
color: var(--text);
|
|
6951
|
+
background: var(--panel);
|
|
6952
|
+
box-shadow: none;
|
|
6953
|
+
cursor: pointer;
|
|
6954
|
+
text-align: left;
|
|
6955
|
+
transition: border-color .15s ease, background-color .15s ease, transform .15s ease;
|
|
6956
|
+
}
|
|
6957
|
+
.browser-home-action:hover:not(:disabled) { border-color: var(--border-strong); background: var(--panel2); transform: translateY(-1px); }
|
|
6958
|
+
.browser-home-action:disabled { cursor: default; opacity: .42; }
|
|
6959
|
+
.browser-home-action > .ico { width: 22px; height: 22px; color: var(--accent); }
|
|
6960
|
+
.browser-home-action > span { display: flex; min-width: 0; flex-direction: column; gap: 3px; }
|
|
6961
|
+
.browser-home-action b { font-size: 13px; font-weight: 700; }
|
|
6962
|
+
.browser-home-action small { overflow: hidden; color: var(--muted); font-size: 10.5px; font-weight: 400; text-overflow: ellipsis; white-space: nowrap; }
|
|
6963
|
+
.browser-home-action.primary { color: #fff; border-color: transparent; background: var(--accent); }
|
|
6964
|
+
.browser-home-action.primary:hover:not(:disabled) { background: var(--accent2); }
|
|
6965
|
+
.browser-home-action.primary > .ico, .browser-home-action.primary small { color: currentColor; }
|
|
6966
|
+
.browser-home-capabilities {
|
|
6967
|
+
display: grid;
|
|
6968
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
6969
|
+
gap: 10px;
|
|
6970
|
+
align-content: stretch;
|
|
6971
|
+
}
|
|
6972
|
+
.browser-home-capabilities > div {
|
|
6973
|
+
display: flex;
|
|
6974
|
+
align-items: center;
|
|
6975
|
+
gap: 10px;
|
|
6976
|
+
min-width: 0;
|
|
6977
|
+
padding: 12px 14px;
|
|
6978
|
+
border: 1px solid var(--border);
|
|
6979
|
+
border-radius: 11px;
|
|
6980
|
+
color: var(--muted);
|
|
6981
|
+
background: color-mix(in srgb, var(--panel) 68%, transparent);
|
|
6982
|
+
}
|
|
6983
|
+
.browser-home-capabilities .ico { width: 17px; height: 17px; color: var(--accent); }
|
|
6984
|
+
.browser-home-capabilities span { display: flex; min-width: 0; flex-direction: column; }
|
|
6985
|
+
.browser-home-capabilities b { color: var(--text); font-size: 11px; }
|
|
6986
|
+
.browser-home-capabilities small { overflow: hidden; font-size: 9.5px; text-overflow: ellipsis; white-space: nowrap; }
|
|
6987
|
+
|
|
6988
|
+
@media (max-width: 900px) {
|
|
6989
|
+
main.browser-page-active { overflow-y: auto; }
|
|
6990
|
+
.browser-stage { flex-direction: column; overflow: visible; }
|
|
6991
|
+
.browser-context { flex: 0 0 auto; max-height: 310px; border-right: 0; border-bottom: 1px solid var(--border); }
|
|
6992
|
+
.browser-viewport { min-height: 430px; }
|
|
6993
|
+
.browser-home-workbench { grid-template-rows: auto auto auto auto; padding: 14px; }
|
|
6994
|
+
.browser-home-hero { grid-template-columns: auto minmax(0, 1fr); padding: 15px; }
|
|
6995
|
+
.browser-home-mode { display: none; }
|
|
6996
|
+
.browser-home-capabilities { grid-template-columns: 1fr; }
|
|
6997
|
+
}
|
|
6998
|
+
|
|
6999
|
+
@media (max-width: 560px) {
|
|
7000
|
+
.browser-context { padding: 12px 10px; }
|
|
7001
|
+
.browser-viewport { min-height: 380px; }
|
|
7002
|
+
.browser-home-workbench { padding: 10px; }
|
|
7003
|
+
.browser-home-hero { grid-template-columns: 1fr; gap: 10px; }
|
|
7004
|
+
.browser-home-hero .browser-empty-mark { width: 46px; height: 46px; border-radius: 12px; }
|
|
7005
|
+
.browser-home-hero .browser-empty-mark .ico { width: 22px; height: 22px; }
|
|
7006
|
+
.browser-home-hero h2 { font-size: 19px; }
|
|
7007
|
+
.browser-home-hero p { font-size: 11.5px; }
|
|
7008
|
+
.browser-home-task-row { align-items: flex-start; flex-direction: column; gap: 6px; }
|
|
7009
|
+
.browser-home-run { max-width: 100%; }
|
|
7010
|
+
.browser-home-workflows { grid-template-columns: 1fr; }
|
|
7011
|
+
.browser-home-action { min-height: 72px; }
|
|
7012
|
+
}
|