@co0ontty/wand 1.39.0 → 1.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +0 -0
- package/dist/git-quick-commit.js +27 -0
- package/dist/process-manager.d.ts +1 -0
- package/dist/process-manager.js +134 -11
- package/dist/resume-policy.d.ts +1 -0
- package/dist/resume-policy.js +7 -1
- package/dist/server-session-routes.js +30 -10
- package/dist/types.d.ts +4 -0
- package/dist/web-ui/content/scripts.js +563 -263
- package/dist/web-ui/content/styles.css +372 -356
- package/package.json +1 -1
- package/dist/acp-protocol.d.ts +0 -67
- package/dist/acp-protocol.js +0 -291
- package/dist/claude-stream-adapter.d.ts +0 -35
- package/dist/claude-stream-adapter.js +0 -153
- package/dist/claude-structured-runner.d.ts +0 -27
- package/dist/claude-structured-runner.js +0 -106
- package/dist/message-parser.d.ts +0 -2
- package/dist/message-parser.js +0 -329
- package/dist/message-queue.d.ts +0 -57
- package/dist/message-queue.js +0 -127
- package/dist/session-lifecycle.d.ts +0 -81
- package/dist/session-lifecycle.js +0 -176
|
@@ -258,9 +258,9 @@
|
|
|
258
258
|
min-height: 100dvh;
|
|
259
259
|
height: 100vh;
|
|
260
260
|
height: 100dvh;
|
|
261
|
-
/*
|
|
262
|
-
|
|
263
|
-
|
|
261
|
+
/* JS 注入 --app-viewport-height = visualViewport.height,
|
|
262
|
+
键盘开关和 iOS 地址栏动画时整体 flex column 跟随可见视口;
|
|
263
|
+
不支持 visualViewport 时退回 100dvh。 */
|
|
264
264
|
height: var(--app-viewport-height, 100dvh);
|
|
265
265
|
line-height: var(--line-height-base);
|
|
266
266
|
overflow: hidden;
|
|
@@ -310,7 +310,7 @@
|
|
|
310
310
|
min-height: 100dvh;
|
|
311
311
|
height: 100vh;
|
|
312
312
|
height: 100dvh;
|
|
313
|
-
/* 与 body
|
|
313
|
+
/* 与 body 同步:键盘开关时跟随可见视口收缩/恢复。 */
|
|
314
314
|
height: var(--app-viewport-height, 100dvh);
|
|
315
315
|
overflow: hidden;
|
|
316
316
|
}
|
|
@@ -547,6 +547,7 @@
|
|
|
547
547
|
}
|
|
548
548
|
.sidebar.pinned.collapsed .sidebar-header-main,
|
|
549
549
|
.sidebar.pinned.collapsed .sidebar-header-more,
|
|
550
|
+
.sidebar.pinned.collapsed .sidebar-pin-toggle,
|
|
550
551
|
.sidebar.pinned.collapsed .sidebar-footer {
|
|
551
552
|
display: none;
|
|
552
553
|
}
|
|
@@ -613,6 +614,24 @@
|
|
|
613
614
|
0 4px 10px -3px rgba(120, 88, 56, 0.3),
|
|
614
615
|
inset 0 1px 0 rgba(255, 255, 255, 0.48);
|
|
615
616
|
}
|
|
617
|
+
/* 快速新建会话 tile —— 虚线描边 + 加号,区别于实心会话方块 */
|
|
618
|
+
.sidebar-collapsed-tile.add {
|
|
619
|
+
background: rgba(184, 92, 55, 0.06);
|
|
620
|
+
border: 1.5px dashed rgba(184, 92, 55, 0.5);
|
|
621
|
+
color: #a04a2e;
|
|
622
|
+
box-shadow: none;
|
|
623
|
+
margin-top: 2px;
|
|
624
|
+
}
|
|
625
|
+
.sidebar-collapsed-tile.add:hover {
|
|
626
|
+
filter: none;
|
|
627
|
+
transform: translateY(-1px);
|
|
628
|
+
background: rgba(184, 92, 55, 0.12);
|
|
629
|
+
border-color: rgba(184, 92, 55, 0.72);
|
|
630
|
+
box-shadow: 0 3px 8px -3px rgba(184, 92, 55, 0.32);
|
|
631
|
+
}
|
|
632
|
+
.sidebar-collapsed-tile.add:active {
|
|
633
|
+
transform: translateY(0) scale(0.94);
|
|
634
|
+
}
|
|
616
635
|
/* Active — accent ring + 一层柔和暖投影 + 顶高光。原先 7 层叠加在 36px 小块上
|
|
617
636
|
糊成一团,精简到 3 层即可表达「升起 + 选中」。 */
|
|
618
637
|
.sidebar-collapsed-tile.active {
|
|
@@ -627,13 +646,6 @@
|
|
|
627
646
|
transform: translateY(0) scale(0.94);
|
|
628
647
|
transition-duration: 0.08s;
|
|
629
648
|
}
|
|
630
|
-
.sidebar-collapsed-empty {
|
|
631
|
-
color: var(--text-muted, rgba(89, 58, 32, 0.45));
|
|
632
|
-
text-align: center;
|
|
633
|
-
font-size: 16px;
|
|
634
|
-
padding: 12px 0;
|
|
635
|
-
user-select: none;
|
|
636
|
-
}
|
|
637
649
|
/* Hover tooltip bubble for narrow tiles — chat-bubble look */
|
|
638
650
|
.sidebar-tile-bubble {
|
|
639
651
|
position: fixed;
|
|
@@ -683,6 +695,17 @@
|
|
|
683
695
|
.sidebar-collapse-toggle.collapsed {
|
|
684
696
|
color: var(--primary);
|
|
685
697
|
}
|
|
698
|
+
/* 常驻(图钉)开关:默认描边态;常驻时图钉「按下」,用 accent 高亮 + 45° 旋转。 */
|
|
699
|
+
.sidebar-pin-toggle {
|
|
700
|
+
flex-shrink: 0;
|
|
701
|
+
transition: background 0.16s ease, color var(--transition-fast),
|
|
702
|
+
transform 0.3s var(--ease-out-expo);
|
|
703
|
+
}
|
|
704
|
+
.sidebar-pin-toggle.pinned {
|
|
705
|
+
background: rgba(197, 101, 61, 0.12);
|
|
706
|
+
color: var(--accent);
|
|
707
|
+
transform: rotate(45deg);
|
|
708
|
+
}
|
|
686
709
|
|
|
687
710
|
/* ===== 侧边栏头部 ===== */
|
|
688
711
|
.sidebar-header {
|
|
@@ -712,11 +735,9 @@
|
|
|
712
735
|
flex-shrink: 0;
|
|
713
736
|
}
|
|
714
737
|
|
|
715
|
-
/*
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
display: none;
|
|
719
|
-
}
|
|
738
|
+
/* The close (X) is the deliberate "hide the sidebar" control on desktop —
|
|
739
|
+
the pin only toggles 常驻 lock and never hides. Keep X visible while docked
|
|
740
|
+
(it's still hidden in the narrow/collapsed strip via the rule above). */
|
|
720
741
|
|
|
721
742
|
.sidebar-header-more {
|
|
722
743
|
position: relative;
|
|
@@ -813,6 +834,8 @@
|
|
|
813
834
|
font-weight: 600;
|
|
814
835
|
color: var(--text-primary);
|
|
815
836
|
letter-spacing: -0.01em;
|
|
837
|
+
white-space: nowrap;
|
|
838
|
+
flex-shrink: 0;
|
|
816
839
|
}
|
|
817
840
|
|
|
818
841
|
.session-count {
|
|
@@ -1022,6 +1045,8 @@
|
|
|
1022
1045
|
opacity: 1;
|
|
1023
1046
|
pointer-events: auto;
|
|
1024
1047
|
}
|
|
1048
|
+
/* 常驻(图钉)只在桌面有意义——手机端隐藏这个按钮,避免死按钮。 */
|
|
1049
|
+
.sidebar-pin-toggle { display: none; }
|
|
1025
1050
|
}
|
|
1026
1051
|
|
|
1027
1052
|
.file-side-panel-header {
|
|
@@ -1264,6 +1289,7 @@
|
|
|
1264
1289
|
flex: 1;
|
|
1265
1290
|
min-height: 0;
|
|
1266
1291
|
overflow-y: auto;
|
|
1292
|
+
-webkit-overflow-scrolling: touch;
|
|
1267
1293
|
position: relative;
|
|
1268
1294
|
}
|
|
1269
1295
|
|
|
@@ -1275,12 +1301,26 @@
|
|
|
1275
1301
|
|
|
1276
1302
|
/* ===== 会话列表 ===== */
|
|
1277
1303
|
.sessions-list {
|
|
1278
|
-
|
|
1304
|
+
/* Flex column that fills the scroll body so the 历史会话 group can pin to
|
|
1305
|
+
the very bottom (margin-top:auto) when the list is short, yet flow
|
|
1306
|
+
naturally and scroll when it's long. #sessions-panel is display:contents
|
|
1307
|
+
so this is effectively a direct child of the scrolling .sidebar-body. */
|
|
1308
|
+
flex: 1 0 auto;
|
|
1279
1309
|
min-height: 0;
|
|
1280
|
-
|
|
1310
|
+
display: flex;
|
|
1311
|
+
flex-direction: column;
|
|
1312
|
+
/* No own scroll: .sidebar-body is the scroll container. overflow:visible
|
|
1313
|
+
lets the manage bar's position:sticky bind to .sidebar-body. */
|
|
1314
|
+
overflow: visible;
|
|
1281
1315
|
padding: 10px 10px 12px;
|
|
1282
1316
|
}
|
|
1283
1317
|
|
|
1318
|
+
/* Unwrap the panel so .sessions-list is a direct flex child of the
|
|
1319
|
+
scrolling .sidebar-body (enables fill + bottom-pin). */
|
|
1320
|
+
#sessions-panel {
|
|
1321
|
+
display: contents;
|
|
1322
|
+
}
|
|
1323
|
+
|
|
1284
1324
|
.sessions-list:empty::before {
|
|
1285
1325
|
content: '暂无会话';
|
|
1286
1326
|
display: flex;
|
|
@@ -1292,7 +1332,7 @@
|
|
|
1292
1332
|
}
|
|
1293
1333
|
|
|
1294
1334
|
/* ===== 会话分组 ===== */
|
|
1295
|
-
.session-group { margin-bottom:
|
|
1335
|
+
.session-group { margin-bottom: 14px; }
|
|
1296
1336
|
.session-group:last-child { margin-bottom: 0; }
|
|
1297
1337
|
|
|
1298
1338
|
/* Legacy .session-manage-bar / .session-manage-toggle / .session-manage-btn
|
|
@@ -1370,10 +1410,17 @@
|
|
|
1370
1410
|
}
|
|
1371
1411
|
.claude-history-directory-title {
|
|
1372
1412
|
font-size: 0.6875rem;
|
|
1373
|
-
padding: 6px 8px;
|
|
1413
|
+
padding: 6px 8px 6px 12px;
|
|
1374
1414
|
opacity: 0.8;
|
|
1375
1415
|
justify-content: space-between;
|
|
1376
1416
|
}
|
|
1417
|
+
/* No accent bar on nested directory rows — the 3px bar stays on top-level
|
|
1418
|
+
groups (历史会话 / 已归档) only, so the hierarchy reads as group → folder
|
|
1419
|
+
→ items instead of a column of identical orange ticks. The chevron +
|
|
1420
|
+
slight indent already signal the sub-level. */
|
|
1421
|
+
.claude-history-directory-header .claude-history-directory-title::before {
|
|
1422
|
+
display: none;
|
|
1423
|
+
}
|
|
1377
1424
|
.claude-history-directory-label {
|
|
1378
1425
|
min-width: 0;
|
|
1379
1426
|
overflow: hidden;
|
|
@@ -1545,8 +1592,8 @@
|
|
|
1545
1592
|
min-width: 0;
|
|
1546
1593
|
display: flex;
|
|
1547
1594
|
flex-direction: column;
|
|
1548
|
-
gap:
|
|
1549
|
-
padding-right:
|
|
1595
|
+
gap: 3px;
|
|
1596
|
+
padding-right: 60px;
|
|
1550
1597
|
}
|
|
1551
1598
|
|
|
1552
1599
|
.session-title-row {
|
|
@@ -2237,11 +2284,18 @@
|
|
|
2237
2284
|
.session-status.stopped .session-status-dot { background: var(--warning); }
|
|
2238
2285
|
|
|
2239
2286
|
.session-status.running { background: var(--success-muted); color: var(--success); }
|
|
2240
|
-
.session-status.exited { background: rgba(150, 118, 85, 0.1); color: var(--text-tertiary); }
|
|
2241
2287
|
.session-status.failed { background: var(--danger-muted); color: var(--danger); }
|
|
2242
2288
|
.session-status.stopped { background: var(--warning-muted); color: var(--warning); }
|
|
2243
2289
|
.session-status.permission-blocked { background: rgba(240, 165, 0, 0.14); color: #d18b00; }
|
|
2244
|
-
|
|
2290
|
+
/* Quiet "done" states — no filled pill, just a dot + muted text, so a long
|
|
2291
|
+
list of finished sessions doesn't read as a stack of grey boxes. */
|
|
2292
|
+
.session-status.exited,
|
|
2293
|
+
.session-status.archived {
|
|
2294
|
+
background: transparent;
|
|
2295
|
+
color: var(--text-muted);
|
|
2296
|
+
padding-left: 0;
|
|
2297
|
+
padding-right: 0;
|
|
2298
|
+
}
|
|
2245
2299
|
|
|
2246
2300
|
@keyframes status-pulse {
|
|
2247
2301
|
0%, 100% { opacity: 1; }
|
|
@@ -2258,126 +2312,36 @@
|
|
|
2258
2312
|
font-weight: 500;
|
|
2259
2313
|
}
|
|
2260
2314
|
|
|
2261
|
-
/* ===== Sidebar:
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
border-top: 1px solid var(--border-subtle);
|
|
2274
|
-
background: rgba(255, 251, 245, 0.66);
|
|
2275
|
-
transition: max-height 0.28s var(--ease-out-expo);
|
|
2276
|
-
}
|
|
2277
|
-
|
|
2278
|
-
.sidebar-history-header {
|
|
2279
|
-
display: flex;
|
|
2280
|
-
align-items: center;
|
|
2281
|
-
justify-content: space-between;
|
|
2282
|
-
width: 100%;
|
|
2283
|
-
padding: 9px 14px;
|
|
2284
|
-
min-height: 38px;
|
|
2285
|
-
flex-shrink: 0;
|
|
2286
|
-
background: transparent;
|
|
2287
|
-
border: none;
|
|
2288
|
-
border-radius: 0;
|
|
2289
|
-
cursor: pointer;
|
|
2290
|
-
text-align: left;
|
|
2291
|
-
font-family: var(--font-sans);
|
|
2292
|
-
font-size: 0.75rem;
|
|
2293
|
-
font-weight: 600;
|
|
2294
|
-
letter-spacing: 0.005em;
|
|
2295
|
-
color: var(--text-secondary);
|
|
2296
|
-
transition: background var(--transition-fast), color var(--transition-fast);
|
|
2297
|
-
-webkit-tap-highlight-color: transparent;
|
|
2298
|
-
}
|
|
2299
|
-
|
|
2300
|
-
.sidebar-history-header:hover {
|
|
2301
|
-
background: rgba(150, 118, 85, 0.06);
|
|
2302
|
-
color: var(--text-primary);
|
|
2303
|
-
}
|
|
2304
|
-
|
|
2305
|
-
.sidebar-history-header:active {
|
|
2306
|
-
background: rgba(150, 118, 85, 0.1);
|
|
2307
|
-
}
|
|
2308
|
-
|
|
2309
|
-
.sidebar-history-header.expanded {
|
|
2310
|
-
background: rgba(255, 251, 245, 0.85);
|
|
2311
|
-
color: var(--text-primary);
|
|
2312
|
-
border-bottom: 1px solid var(--border-subtle);
|
|
2313
|
-
}
|
|
2314
|
-
|
|
2315
|
-
.sidebar-history-label {
|
|
2316
|
-
display: inline-flex;
|
|
2317
|
-
align-items: center;
|
|
2318
|
-
gap: 6px;
|
|
2319
|
-
}
|
|
2320
|
-
|
|
2321
|
-
.sidebar-history-right {
|
|
2322
|
-
display: inline-flex;
|
|
2323
|
-
align-items: center;
|
|
2324
|
-
gap: 8px;
|
|
2325
|
-
flex-shrink: 0;
|
|
2326
|
-
}
|
|
2327
|
-
|
|
2328
|
-
/* Count bubble — pill shape, tabular numerals, accent-tinted when there
|
|
2329
|
-
are items, muted when empty/loading. */
|
|
2330
|
-
.history-bubble {
|
|
2331
|
-
display: inline-flex;
|
|
2332
|
-
align-items: center;
|
|
2333
|
-
justify-content: center;
|
|
2334
|
-
min-width: 22px;
|
|
2335
|
-
height: 18px;
|
|
2336
|
-
padding: 0 7px;
|
|
2337
|
-
border-radius: 999px;
|
|
2338
|
-
background: var(--accent-muted);
|
|
2339
|
-
color: var(--accent);
|
|
2340
|
-
font-size: 0.6875rem;
|
|
2341
|
-
font-weight: 700;
|
|
2342
|
-
font-variant-numeric: tabular-nums;
|
|
2343
|
-
line-height: 1;
|
|
2344
|
-
letter-spacing: 0;
|
|
2315
|
+
/* ===== Sidebar: inline 历史会话 group =====
|
|
2316
|
+
History (older Claude + Codex CLI sessions) is the final collapsible
|
|
2317
|
+
group of #sessions-list — same scroll, same idiom as 已归档. No docked
|
|
2318
|
+
region, no 40% cap, no stranded bar above the footer: when the list is
|
|
2319
|
+
short the empty space simply falls below the content, as a list should. */
|
|
2320
|
+
/* Pin the history group to the very bottom of the sidebar (just above the
|
|
2321
|
+
footer). margin-top:auto eats the free space when the list is short;
|
|
2322
|
+
when the list overflows there is no free space, so history simply
|
|
2323
|
+
follows the content and scrolls. Collapsed + minimized by default. */
|
|
2324
|
+
.session-group--history {
|
|
2325
|
+
margin-top: auto;
|
|
2326
|
+
padding-top: 6px;
|
|
2345
2327
|
}
|
|
2346
2328
|
|
|
2347
|
-
.history-
|
|
2348
|
-
|
|
2329
|
+
/* Toggle header reuses .session-group-title + .claude-history-toggle.
|
|
2330
|
+
The count chip turns into a quiet ellipsis while history is still
|
|
2331
|
+
scanning, then settles to the real number. */
|
|
2332
|
+
.session-history-toggle .history-count.loading {
|
|
2333
|
+
letter-spacing: 0.12em;
|
|
2349
2334
|
color: var(--text-muted);
|
|
2350
|
-
opacity: 0.65;
|
|
2351
|
-
}
|
|
2352
|
-
|
|
2353
|
-
.history-bubble.loading {
|
|
2354
2335
|
background: transparent;
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
padding: 0 4px;
|
|
2358
|
-
font-weight: 600;
|
|
2359
|
-
}
|
|
2360
|
-
|
|
2361
|
-
.sidebar-history-chevron {
|
|
2362
|
-
flex-shrink: 0;
|
|
2363
|
-
color: var(--text-muted);
|
|
2364
|
-
transition: transform 0.22s var(--ease-out-expo), color var(--transition-fast);
|
|
2365
|
-
}
|
|
2366
|
-
|
|
2367
|
-
.sidebar-history-header.expanded .sidebar-history-chevron {
|
|
2368
|
-
transform: rotate(180deg);
|
|
2369
|
-
color: var(--text-secondary);
|
|
2336
|
+
padding-left: 2px;
|
|
2337
|
+
padding-right: 2px;
|
|
2370
2338
|
}
|
|
2371
2339
|
|
|
2372
|
-
|
|
2373
|
-
.sidebar-history-body {
|
|
2374
|
-
flex: 1;
|
|
2375
|
-
min-height: 0;
|
|
2376
|
-
overflow-y: auto;
|
|
2377
|
-
padding: 6px 8px 10px;
|
|
2340
|
+
.session-history-body {
|
|
2378
2341
|
display: flex;
|
|
2379
2342
|
flex-direction: column;
|
|
2380
2343
|
gap: 4px;
|
|
2344
|
+
padding: 2px 0 4px;
|
|
2381
2345
|
animation: historyBodyFadeIn 0.22s var(--ease-out-expo);
|
|
2382
2346
|
}
|
|
2383
2347
|
|
|
@@ -4045,6 +4009,12 @@
|
|
|
4045
4009
|
min-height: 0;
|
|
4046
4010
|
min-width: 0;
|
|
4047
4011
|
scrollbar-gutter: stable;
|
|
4012
|
+
/* iOS Safari: 聊天到顶 / 到底再用力滑, scroll 会从 .chat-messages 冒到
|
|
4013
|
+
body, 即使父级有 overflow:hidden 也拦不住 (Safari 已知行为)。这一冒
|
|
4014
|
+
有两个用户可见的副作用: 1) 整页跟着一起被推一帧, 输入框跳动;
|
|
4015
|
+
2) 偶尔触发地址栏 / 工具栏的折叠动画。contain 把惯性吃在容器内,
|
|
4016
|
+
保留 iOS 那种橡皮筋反弹手感, 但不向外溢出。 */
|
|
4017
|
+
overscroll-behavior: contain;
|
|
4048
4018
|
}
|
|
4049
4019
|
|
|
4050
4020
|
/* ===== 历史消息懒加载 ===== */
|
|
@@ -9449,11 +9419,16 @@
|
|
|
9449
9419
|
transform: scale(0.98);
|
|
9450
9420
|
}
|
|
9451
9421
|
|
|
9452
|
-
/* ── Manage bar
|
|
9422
|
+
/* ── Manage bar ──
|
|
9423
|
+
Normal: a quiet sub-header ("最近的会话记录" + 管理 toggle).
|
|
9424
|
+
Active: the SAME row morphs IN PLACE to a flat selection toolbar —
|
|
9425
|
+
no card, no shadow, no layout jump — and sticks to the top of the
|
|
9426
|
+
scroll so the count + 删除 stay reachable while selecting rows below. */
|
|
9453
9427
|
.session-manage-bar {
|
|
9454
9428
|
display: flex;
|
|
9455
9429
|
align-items: center;
|
|
9456
9430
|
justify-content: space-between;
|
|
9431
|
+
gap: 8px;
|
|
9457
9432
|
padding: 4px 4px 4px 10px;
|
|
9458
9433
|
border-radius: 10px;
|
|
9459
9434
|
margin-bottom: 10px;
|
|
@@ -9469,22 +9444,53 @@
|
|
|
9469
9444
|
letter-spacing: 0.005em;
|
|
9470
9445
|
}
|
|
9471
9446
|
|
|
9472
|
-
/* Active toolbar — iOS toolbar look: card with hairline + summary + actions */
|
|
9473
9447
|
.session-manage-bar.active {
|
|
9474
|
-
|
|
9475
|
-
|
|
9476
|
-
|
|
9477
|
-
padding
|
|
9478
|
-
|
|
9479
|
-
|
|
9480
|
-
|
|
9481
|
-
|
|
9448
|
+
position: sticky;
|
|
9449
|
+
top: 0;
|
|
9450
|
+
z-index: 6;
|
|
9451
|
+
/* bleed to the list edges and cancel the #sessions-list top padding so
|
|
9452
|
+
the bar sits flush at the scroll top — a flat header, not a card. */
|
|
9453
|
+
margin: -10px -10px 8px;
|
|
9454
|
+
padding: 9px 10px 9px 6px;
|
|
9455
|
+
border-radius: 0;
|
|
9456
|
+
background: rgba(255, 251, 245, 0.94);
|
|
9457
|
+
-webkit-backdrop-filter: saturate(1.2) blur(8px);
|
|
9458
|
+
backdrop-filter: saturate(1.2) blur(8px);
|
|
9459
|
+
border-bottom: 1px solid var(--border-subtle);
|
|
9460
|
+
box-shadow: none;
|
|
9461
|
+
}
|
|
9462
|
+
.session-manage-bar.active:hover {
|
|
9463
|
+
background: rgba(255, 251, 245, 0.94);
|
|
9464
|
+
}
|
|
9465
|
+
|
|
9466
|
+
/* Exit (✕) — the in-place "leave manage mode" affordance on the left. */
|
|
9467
|
+
.session-manage-exit {
|
|
9468
|
+
flex-shrink: 0;
|
|
9469
|
+
display: inline-flex;
|
|
9470
|
+
align-items: center;
|
|
9471
|
+
justify-content: center;
|
|
9472
|
+
width: 26px;
|
|
9473
|
+
height: 26px;
|
|
9474
|
+
padding: 0;
|
|
9475
|
+
border: none;
|
|
9476
|
+
border-radius: 8px;
|
|
9477
|
+
background: transparent;
|
|
9478
|
+
color: var(--text-muted);
|
|
9479
|
+
cursor: pointer;
|
|
9480
|
+
transition: background 0.14s ease, color 0.14s ease;
|
|
9481
|
+
-webkit-tap-highlight-color: transparent;
|
|
9482
|
+
}
|
|
9483
|
+
.session-manage-exit:hover {
|
|
9484
|
+
background: rgba(125, 91, 57, 0.1);
|
|
9485
|
+
color: var(--text-primary);
|
|
9482
9486
|
}
|
|
9483
9487
|
|
|
9484
9488
|
.session-manage-summary {
|
|
9485
9489
|
display: inline-flex;
|
|
9486
9490
|
align-items: center;
|
|
9487
|
-
gap:
|
|
9491
|
+
gap: 6px;
|
|
9492
|
+
min-width: 0;
|
|
9493
|
+
flex: 1;
|
|
9488
9494
|
font-size: 0.75rem;
|
|
9489
9495
|
color: var(--text-secondary);
|
|
9490
9496
|
font-weight: 500;
|
|
@@ -9493,33 +9499,29 @@
|
|
|
9493
9499
|
display: inline-flex;
|
|
9494
9500
|
align-items: center;
|
|
9495
9501
|
justify-content: center;
|
|
9496
|
-
min-width:
|
|
9497
|
-
height:
|
|
9498
|
-
padding: 0
|
|
9502
|
+
min-width: 20px;
|
|
9503
|
+
height: 18px;
|
|
9504
|
+
padding: 0 6px;
|
|
9499
9505
|
background: var(--accent);
|
|
9500
9506
|
color: var(--text-inverse);
|
|
9501
9507
|
font-size: 0.6875rem;
|
|
9502
9508
|
font-weight: 700;
|
|
9503
9509
|
border-radius: 999px;
|
|
9504
9510
|
font-variant-numeric: tabular-nums;
|
|
9505
|
-
box-shadow: 0 1px 2px rgba(197, 101, 61, 0.32);
|
|
9506
9511
|
}
|
|
9507
9512
|
.session-manage-summary-label {
|
|
9508
9513
|
color: var(--text-secondary);
|
|
9509
9514
|
font-weight: 600;
|
|
9510
9515
|
}
|
|
9516
|
+
.session-manage-summary-label.muted {
|
|
9517
|
+
color: var(--text-muted);
|
|
9518
|
+
font-weight: 500;
|
|
9519
|
+
}
|
|
9511
9520
|
|
|
9512
9521
|
.session-manage-actions {
|
|
9513
9522
|
display: flex;
|
|
9514
9523
|
align-items: center;
|
|
9515
|
-
gap:
|
|
9516
|
-
flex-wrap: wrap;
|
|
9517
|
-
}
|
|
9518
|
-
.session-manage-divider {
|
|
9519
|
-
width: 1px;
|
|
9520
|
-
height: 16px;
|
|
9521
|
-
background: rgba(125, 91, 57, 0.16);
|
|
9522
|
-
margin: 0 4px;
|
|
9524
|
+
gap: 6px;
|
|
9523
9525
|
flex-shrink: 0;
|
|
9524
9526
|
}
|
|
9525
9527
|
|
|
@@ -9550,73 +9552,53 @@
|
|
|
9550
9552
|
opacity: 1;
|
|
9551
9553
|
}
|
|
9552
9554
|
|
|
9553
|
-
/* ── Session item —
|
|
9554
|
-
|
|
9555
|
-
|
|
9556
|
-
|
|
9555
|
+
/* ── Session item — flat list row, not a floating card ──
|
|
9556
|
+
克制原则:基础态完全透明,让侧栏读起来是「一列」而不是「一摞卡片」;
|
|
9557
|
+
仅 hover / active 才用填充背景区分。去掉每行的边框/渐变/投影/抬升,
|
|
9558
|
+
避免在半透明侧栏里多层叠加显脏、以及 hover 抬升导致邻项跳动。 */
|
|
9557
9559
|
.session-item {
|
|
9558
|
-
background:
|
|
9559
|
-
border: 1px solid
|
|
9560
|
-
border-radius:
|
|
9561
|
-
padding:
|
|
9562
|
-
margin-bottom:
|
|
9563
|
-
box-shadow:
|
|
9564
|
-
transition:
|
|
9565
|
-
background 0.2s ease,
|
|
9566
|
-
border-color 0.2s ease,
|
|
9567
|
-
box-shadow 0.22s ease,
|
|
9568
|
-
transform 0.22s var(--ease-out-expo);
|
|
9560
|
+
background: transparent;
|
|
9561
|
+
border: 1px solid transparent;
|
|
9562
|
+
border-radius: 11px;
|
|
9563
|
+
padding: 9px 12px;
|
|
9564
|
+
margin-bottom: 2px;
|
|
9565
|
+
box-shadow: none;
|
|
9566
|
+
transition: background 0.16s ease, border-color 0.16s ease;
|
|
9569
9567
|
}
|
|
9570
9568
|
.session-item::before {
|
|
9571
9569
|
left: 4px;
|
|
9572
|
-
top:
|
|
9573
|
-
bottom:
|
|
9570
|
+
top: 9px;
|
|
9571
|
+
bottom: 9px;
|
|
9574
9572
|
width: 3px;
|
|
9575
9573
|
border-radius: 2px;
|
|
9576
9574
|
background: linear-gradient(180deg, var(--accent), rgba(197, 101, 61, 0.5));
|
|
9577
9575
|
}
|
|
9578
9576
|
.session-item:hover {
|
|
9579
|
-
background:
|
|
9580
|
-
border-color:
|
|
9581
|
-
transform: translateY(-1px);
|
|
9582
|
-
box-shadow: 0 4px 12px -4px rgba(125, 91, 57, 0.16);
|
|
9583
|
-
}
|
|
9584
|
-
.session-item:hover::before {
|
|
9585
|
-
opacity: 0.5;
|
|
9586
|
-
transform: scaleY(1);
|
|
9577
|
+
background: rgba(125, 91, 57, 0.06);
|
|
9578
|
+
border-color: transparent;
|
|
9587
9579
|
}
|
|
9588
|
-
/*
|
|
9589
|
-
|
|
9580
|
+
/* Left accent bar marks the *active* row only — not hover — to keep scanning calm. */
|
|
9581
|
+
.session-item:hover::before { opacity: 0; }
|
|
9590
9582
|
.session-item.active {
|
|
9591
|
-
background:
|
|
9592
|
-
|
|
9593
|
-
|
|
9594
|
-
transform: translateY(-1px);
|
|
9595
|
-
backdrop-filter: blur(20px) saturate(180%);
|
|
9596
|
-
-webkit-backdrop-filter: blur(20px) saturate(180%);
|
|
9597
|
-
box-shadow:
|
|
9598
|
-
0 4px 14px -4px rgba(197, 101, 61, 0.24),
|
|
9599
|
-
inset 0 1px 0 rgba(255, 255, 255, 0.7);
|
|
9583
|
+
background: linear-gradient(180deg, rgba(255, 252, 247, 0.92) 0%, rgba(255, 244, 232, 0.74) 100%);
|
|
9584
|
+
border-color: rgba(197, 101, 61, 0.28);
|
|
9585
|
+
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.55);
|
|
9600
9586
|
}
|
|
9601
|
-
/* ::before 的左侧高亮条受父级 overflow:hidden 裁切,原来的 box-shadow 光晕
|
|
9602
|
-
根本显示不出来,移除以省一次绘制。 */
|
|
9603
9587
|
.session-item.active::before {
|
|
9604
9588
|
opacity: 1;
|
|
9605
9589
|
transform: scaleY(1);
|
|
9606
9590
|
}
|
|
9607
|
-
/* Multi-select state — quieter
|
|
9591
|
+
/* Multi-select state — quieter accent tint */
|
|
9608
9592
|
.session-item.selected {
|
|
9609
|
-
background:
|
|
9610
|
-
|
|
9611
|
-
border: 1px solid rgba(197, 101, 61, 0.2);
|
|
9612
|
-
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.6);
|
|
9593
|
+
background: rgba(197, 101, 61, 0.09);
|
|
9594
|
+
border-color: rgba(197, 101, 61, 0.18);
|
|
9613
9595
|
}
|
|
9614
9596
|
.session-item.selected::before {
|
|
9615
9597
|
opacity: 0.7;
|
|
9616
9598
|
transform: scaleY(1);
|
|
9617
9599
|
}
|
|
9618
9600
|
.session-item:active {
|
|
9619
|
-
transform:
|
|
9601
|
+
transform: scale(0.992);
|
|
9620
9602
|
transition-duration: 0.08s;
|
|
9621
9603
|
}
|
|
9622
9604
|
|
|
@@ -10169,8 +10151,8 @@
|
|
|
10169
10151
|
}
|
|
10170
10152
|
|
|
10171
10153
|
html, body {
|
|
10172
|
-
min-height: 100dvh;
|
|
10173
|
-
height:
|
|
10154
|
+
min-height: var(--app-viewport-height, 100dvh);
|
|
10155
|
+
height: var(--app-viewport-height, 100dvh);
|
|
10174
10156
|
}
|
|
10175
10157
|
|
|
10176
10158
|
body {
|
|
@@ -10181,9 +10163,9 @@
|
|
|
10181
10163
|
.app-container {
|
|
10182
10164
|
min-height: 100dvh;
|
|
10183
10165
|
height: 100dvh;
|
|
10184
|
-
/* 与 body
|
|
10185
|
-
app-container 跟随 visualViewport
|
|
10186
|
-
|
|
10166
|
+
/* 与 body 同步:JS 持续注入 --app-viewport-height,
|
|
10167
|
+
app-container 跟随 visualViewport 收缩/恢复,input-panel 自动贴键盘
|
|
10168
|
+
上沿或屏幕底部。 */
|
|
10187
10169
|
height: var(--app-viewport-height, 100dvh);
|
|
10188
10170
|
overflow: hidden;
|
|
10189
10171
|
}
|
|
@@ -10315,13 +10297,15 @@
|
|
|
10315
10297
|
}
|
|
10316
10298
|
|
|
10317
10299
|
.sessions-list {
|
|
10318
|
-
|
|
10319
|
-
|
|
10300
|
+
/* Match desktop: flex column that fills the scroll body so 历史会话
|
|
10301
|
+
bottom-pins and the manage bar stays sticky. .sidebar-body owns the
|
|
10302
|
+
scroll (and momentum) on mobile, so this stays overflow:visible. */
|
|
10303
|
+
display: flex;
|
|
10304
|
+
flex-direction: column;
|
|
10305
|
+
flex: 1 0 auto;
|
|
10320
10306
|
min-height: 0;
|
|
10321
|
-
overflow
|
|
10322
|
-
overflow-y: auto;
|
|
10307
|
+
overflow: visible;
|
|
10323
10308
|
padding: 4px;
|
|
10324
|
-
-webkit-overflow-scrolling: touch;
|
|
10325
10309
|
}
|
|
10326
10310
|
|
|
10327
10311
|
/* 移动端会话项 - 紧凑 */
|
|
@@ -10740,7 +10724,11 @@
|
|
|
10740
10724
|
.file-search-box { padding: 6px 10px 8px; }
|
|
10741
10725
|
.file-search-icon { left: 20px; }
|
|
10742
10726
|
.file-search-clear { right: 16px; }
|
|
10743
|
-
|
|
10727
|
+
/* 16px 兜底 iOS Safari 聚焦自动放大:
|
|
10728
|
+
即使设了 user-scalable=no, 部分 iOS 版本 (尤其 15 / 16 早期补丁) 仍会
|
|
10729
|
+
在 input font-size < 16px 时强制 zoom in, 之后回不到原 scale, 用户得
|
|
10730
|
+
手动双指捏回。所有移动端会被聚焦的 input 都统一到 16px。 */
|
|
10731
|
+
.file-search-input { min-height: 34px; font-size: 16px; padding: 7px 32px 7px 30px; }
|
|
10744
10732
|
.file-item { padding: 6px 8px; min-height: 32px; }
|
|
10745
10733
|
|
|
10746
10734
|
/* 欢迎页移动端 */
|
|
@@ -15317,7 +15305,7 @@
|
|
|
15317
15305
|
|
|
15318
15306
|
/* ── 快捷提交模态框 ── */
|
|
15319
15307
|
.quick-commit-modal {
|
|
15320
|
-
max-width:
|
|
15308
|
+
max-width: 540px;
|
|
15321
15309
|
}
|
|
15322
15310
|
.quick-commit-modal .modal-body {
|
|
15323
15311
|
display: flex;
|
|
@@ -15325,17 +15313,17 @@
|
|
|
15325
15313
|
gap: 12px;
|
|
15326
15314
|
}
|
|
15327
15315
|
.qc-files-wrap {
|
|
15328
|
-
max-height:
|
|
15316
|
+
max-height: 190px;
|
|
15329
15317
|
overflow-y: auto;
|
|
15330
|
-
padding: 8px
|
|
15331
|
-
border: 1px solid
|
|
15332
|
-
border-radius:
|
|
15333
|
-
background: rgba(255, 255, 255, 0.
|
|
15318
|
+
padding: 6px 8px;
|
|
15319
|
+
border: 1px solid rgba(125, 91, 57, 0.10);
|
|
15320
|
+
border-radius: 10px;
|
|
15321
|
+
background: rgba(255, 255, 255, 0.4);
|
|
15334
15322
|
font-family: var(--font-mono, monospace);
|
|
15335
15323
|
font-size: 0.78rem;
|
|
15336
15324
|
display: flex;
|
|
15337
15325
|
flex-direction: column;
|
|
15338
|
-
gap:
|
|
15326
|
+
gap: 1px;
|
|
15339
15327
|
}
|
|
15340
15328
|
.qc-empty {
|
|
15341
15329
|
color: var(--text-muted);
|
|
@@ -15346,30 +15334,45 @@
|
|
|
15346
15334
|
.qc-file-row {
|
|
15347
15335
|
display: flex;
|
|
15348
15336
|
align-items: center;
|
|
15349
|
-
gap:
|
|
15350
|
-
line-height: 1.
|
|
15337
|
+
gap: 9px;
|
|
15338
|
+
line-height: 1.6;
|
|
15339
|
+
padding: 1px 2px;
|
|
15340
|
+
border-radius: 5px;
|
|
15341
|
+
}
|
|
15342
|
+
.qc-file-row:hover {
|
|
15343
|
+
background: rgba(125, 91, 57, 0.06);
|
|
15351
15344
|
}
|
|
15352
|
-
|
|
15345
|
+
/* Single-letter status badge, VS Code style */
|
|
15346
|
+
.qc-file-badge {
|
|
15353
15347
|
flex-shrink: 0;
|
|
15354
|
-
width:
|
|
15355
|
-
|
|
15356
|
-
|
|
15357
|
-
|
|
15348
|
+
width: 17px;
|
|
15349
|
+
height: 17px;
|
|
15350
|
+
display: inline-flex;
|
|
15351
|
+
align-items: center;
|
|
15352
|
+
justify-content: center;
|
|
15353
|
+
border-radius: 4px;
|
|
15354
|
+
font-size: 0.66rem;
|
|
15355
|
+
font-weight: 800;
|
|
15358
15356
|
letter-spacing: 0;
|
|
15357
|
+
line-height: 1;
|
|
15358
|
+
font-family: var(--font-sans);
|
|
15359
15359
|
}
|
|
15360
|
-
.qc-
|
|
15361
|
-
.qc-
|
|
15362
|
-
.qc-
|
|
15363
|
-
.qc-
|
|
15364
|
-
.qc-
|
|
15360
|
+
.qc-badge-add { color: rgba(34, 128, 66, 0.98); background: rgba(60, 160, 90, 0.16); }
|
|
15361
|
+
.qc-badge-mod { color: rgba(170, 110, 14, 0.98); background: rgba(220, 150, 30, 0.16); }
|
|
15362
|
+
.qc-badge-del { color: rgba(190, 56, 56, 0.98); background: rgba(200, 70, 70, 0.15); }
|
|
15363
|
+
.qc-badge-ren { color: rgba(78, 100, 188, 0.98); background: rgba(110, 130, 200, 0.16); }
|
|
15364
|
+
.qc-badge-untracked { color: rgba(34, 128, 66, 0.95); background: rgba(60, 160, 90, 0.12); }
|
|
15365
|
+
.qc-badge-ignored,
|
|
15366
|
+
.qc-badge-other { color: var(--text-muted); background: rgba(120, 120, 120, 0.12); }
|
|
15365
15367
|
.qc-file-path {
|
|
15366
|
-
color: var(--text-secondary);
|
|
15367
15368
|
overflow: hidden;
|
|
15368
15369
|
text-overflow: ellipsis;
|
|
15369
15370
|
white-space: nowrap;
|
|
15370
15371
|
flex: 1 1 auto;
|
|
15371
15372
|
min-width: 0;
|
|
15372
15373
|
}
|
|
15374
|
+
.qc-file-dir { color: var(--text-muted); }
|
|
15375
|
+
.qc-file-name { color: var(--text-primary); font-weight: 500; }
|
|
15373
15376
|
.qc-submodule-badge {
|
|
15374
15377
|
flex-shrink: 0;
|
|
15375
15378
|
padding: 1px 6px;
|
|
@@ -15381,20 +15384,12 @@
|
|
|
15381
15384
|
letter-spacing: 0.02em;
|
|
15382
15385
|
white-space: nowrap;
|
|
15383
15386
|
}
|
|
15384
|
-
.qc-
|
|
15385
|
-
flex-shrink: 0;
|
|
15386
|
-
display: inline-flex;
|
|
15387
|
-
align-items: center;
|
|
15388
|
-
cursor: pointer;
|
|
15389
|
-
}
|
|
15390
|
-
.qc-message-row,
|
|
15391
|
-
.qc-tag-row {
|
|
15387
|
+
.qc-message-row {
|
|
15392
15388
|
display: flex;
|
|
15393
15389
|
flex-direction: column;
|
|
15394
|
-
gap:
|
|
15390
|
+
gap: 6px;
|
|
15395
15391
|
}
|
|
15396
|
-
.qc-message-row.hidden
|
|
15397
|
-
.qc-tag-row.hidden {
|
|
15392
|
+
.qc-message-row.hidden {
|
|
15398
15393
|
display: none;
|
|
15399
15394
|
}
|
|
15400
15395
|
.qc-message-header {
|
|
@@ -15402,68 +15397,75 @@
|
|
|
15402
15397
|
align-items: center;
|
|
15403
15398
|
justify-content: space-between;
|
|
15404
15399
|
gap: 8px;
|
|
15405
|
-
flex-wrap: wrap;
|
|
15406
15400
|
}
|
|
15407
|
-
.qc-
|
|
15408
|
-
|
|
15409
|
-
align-items: center;
|
|
15410
|
-
justify-content: flex-end;
|
|
15411
|
-
gap: 7px;
|
|
15412
|
-
margin-left: auto;
|
|
15413
|
-
flex: 0 0 auto;
|
|
15401
|
+
.qc-message-label {
|
|
15402
|
+
margin-bottom: 0;
|
|
15414
15403
|
}
|
|
15415
|
-
|
|
15404
|
+
/* AI generate button: icon + text */
|
|
15405
|
+
.qc-ai-btn {
|
|
15416
15406
|
display: inline-flex;
|
|
15417
15407
|
align-items: center;
|
|
15418
|
-
gap:
|
|
15419
|
-
|
|
15420
|
-
padding: 3px 7px 3px 9px;
|
|
15421
|
-
border: 1px solid rgba(125, 91, 57, 0.12);
|
|
15422
|
-
border-radius: 999px;
|
|
15423
|
-
background: rgba(255, 255, 255, 0.58);
|
|
15424
|
-
color: var(--text-muted);
|
|
15425
|
-
font-size: 0.74rem;
|
|
15426
|
-
font-weight: 700;
|
|
15427
|
-
line-height: 1;
|
|
15428
|
-
user-select: none;
|
|
15429
|
-
cursor: pointer;
|
|
15430
|
-
transition: background 0.16s ease, border-color 0.16s ease, color 0.16s ease, box-shadow 0.16s ease;
|
|
15431
|
-
}
|
|
15432
|
-
.qc-ai-tag-toggle:hover {
|
|
15433
|
-
background: rgba(255, 255, 255, 0.82);
|
|
15434
|
-
border-color: rgba(125, 91, 57, 0.20);
|
|
15408
|
+
gap: 5px;
|
|
15409
|
+
color: var(--accent);
|
|
15435
15410
|
}
|
|
15436
|
-
.qc-ai-
|
|
15437
|
-
color:
|
|
15438
|
-
|
|
15439
|
-
border-color: rgba(197, 101, 61, 0.32);
|
|
15440
|
-
box-shadow: 0 1px 4px rgba(197, 101, 61, 0.10);
|
|
15411
|
+
.qc-ai-btn svg {
|
|
15412
|
+
color: var(--accent);
|
|
15413
|
+
flex-shrink: 0;
|
|
15441
15414
|
}
|
|
15442
|
-
.qc-ai-
|
|
15443
|
-
|
|
15444
|
-
|
|
15415
|
+
.qc-ai-btn:disabled {
|
|
15416
|
+
opacity: 0.5;
|
|
15417
|
+
cursor: not-allowed;
|
|
15418
|
+
color: var(--text-muted);
|
|
15445
15419
|
}
|
|
15446
|
-
.qc-ai-
|
|
15447
|
-
|
|
15420
|
+
.qc-ai-btn:disabled svg { color: var(--text-muted); }
|
|
15421
|
+
.qc-message-input {
|
|
15422
|
+
resize: vertical;
|
|
15423
|
+
min-height: 68px;
|
|
15424
|
+
font-family: var(--font-mono, monospace);
|
|
15425
|
+
font-size: 0.84rem;
|
|
15426
|
+
line-height: 1.55;
|
|
15448
15427
|
}
|
|
15449
|
-
|
|
15450
|
-
|
|
15451
|
-
|
|
15452
|
-
|
|
15453
|
-
|
|
15428
|
+
|
|
15429
|
+
/* Tag field — single line: [Tag] [version input] */
|
|
15430
|
+
.qc-tag-field {
|
|
15431
|
+
display: flex;
|
|
15432
|
+
align-items: center;
|
|
15433
|
+
gap: 10px;
|
|
15454
15434
|
}
|
|
15455
|
-
.qc-
|
|
15456
|
-
|
|
15457
|
-
|
|
15435
|
+
.qc-tag-field-label {
|
|
15436
|
+
flex-shrink: 0;
|
|
15437
|
+
width: 2.4em;
|
|
15438
|
+
font-size: 0.7rem;
|
|
15439
|
+
font-weight: 700;
|
|
15440
|
+
letter-spacing: 0.06em;
|
|
15441
|
+
text-transform: uppercase;
|
|
15442
|
+
color: var(--accent);
|
|
15458
15443
|
}
|
|
15459
|
-
.qc-
|
|
15460
|
-
|
|
15444
|
+
.qc-tag-field.is-off .qc-tag-field-label {
|
|
15445
|
+
color: var(--text-muted);
|
|
15461
15446
|
}
|
|
15462
|
-
.qc-
|
|
15463
|
-
|
|
15464
|
-
min-
|
|
15447
|
+
.qc-tag-field-input {
|
|
15448
|
+
flex: 1 1 auto;
|
|
15449
|
+
min-width: 0;
|
|
15465
15450
|
font-family: var(--font-mono, monospace);
|
|
15466
|
-
font-size: 0.
|
|
15451
|
+
font-size: 0.82rem;
|
|
15452
|
+
}
|
|
15453
|
+
/* "Commit only" state: show the suggested tag greyed, as a non-editable preview. */
|
|
15454
|
+
.qc-tag-field-input:disabled {
|
|
15455
|
+
color: var(--text-muted);
|
|
15456
|
+
background: rgba(125, 91, 57, 0.04);
|
|
15457
|
+
border-color: rgba(125, 91, 57, 0.08);
|
|
15458
|
+
cursor: default;
|
|
15459
|
+
box-shadow: none;
|
|
15460
|
+
}
|
|
15461
|
+
.qc-tag-field-note {
|
|
15462
|
+
flex-shrink: 0;
|
|
15463
|
+
font-size: 0.7rem;
|
|
15464
|
+
font-weight: 600;
|
|
15465
|
+
color: var(--text-muted);
|
|
15466
|
+
padding: 2px 8px;
|
|
15467
|
+
border-radius: 999px;
|
|
15468
|
+
background: rgba(125, 91, 57, 0.08);
|
|
15467
15469
|
}
|
|
15468
15470
|
.quick-commit-modal .worktree-merge-actions {
|
|
15469
15471
|
display: flex;
|
|
@@ -15478,21 +15480,17 @@
|
|
|
15478
15480
|
flex-direction: column;
|
|
15479
15481
|
gap: 14px;
|
|
15480
15482
|
}
|
|
15483
|
+
/* Flat sections — no nested cards. Sections are just grouped rows,
|
|
15484
|
+
separated by a hairline divider rather than boxed in their own card. */
|
|
15481
15485
|
.qc-section {
|
|
15482
15486
|
display: flex;
|
|
15483
15487
|
flex-direction: column;
|
|
15484
|
-
gap:
|
|
15485
|
-
padding: 12px 14px;
|
|
15486
|
-
background: rgba(255, 255, 255, 0.6);
|
|
15487
|
-
border: 1px solid rgba(125, 91, 57, 0.10);
|
|
15488
|
-
border-radius: 14px;
|
|
15489
|
-
box-shadow: 0 1px 2px rgba(125, 91, 57, 0.04);
|
|
15488
|
+
gap: 12px;
|
|
15490
15489
|
}
|
|
15490
|
+
/* The repo/sync block sits below a divider instead of inside its own card. */
|
|
15491
15491
|
.qc-section--repo {
|
|
15492
|
-
|
|
15493
|
-
|
|
15494
|
-
.qc-section--empty {
|
|
15495
|
-
background: rgba(245, 245, 245, 0.5);
|
|
15492
|
+
padding-top: 16px;
|
|
15493
|
+
border-top: 1px solid rgba(125, 91, 57, 0.12);
|
|
15496
15494
|
}
|
|
15497
15495
|
.qc-section-head {
|
|
15498
15496
|
display: flex;
|
|
@@ -15501,14 +15499,14 @@
|
|
|
15501
15499
|
gap: 8px;
|
|
15502
15500
|
}
|
|
15503
15501
|
.qc-section-title {
|
|
15504
|
-
font-size: 0.
|
|
15502
|
+
font-size: 0.72rem;
|
|
15505
15503
|
font-weight: 700;
|
|
15506
15504
|
text-transform: uppercase;
|
|
15507
|
-
letter-spacing: 0.
|
|
15508
|
-
color: var(--text-
|
|
15505
|
+
letter-spacing: 0.07em;
|
|
15506
|
+
color: var(--text-secondary);
|
|
15509
15507
|
}
|
|
15510
15508
|
.qc-section-meta {
|
|
15511
|
-
font-size: 0.
|
|
15509
|
+
font-size: 0.74rem;
|
|
15512
15510
|
color: var(--text-muted);
|
|
15513
15511
|
font-family: var(--font-mono, monospace);
|
|
15514
15512
|
overflow: hidden;
|
|
@@ -15527,55 +15525,46 @@
|
|
|
15527
15525
|
.qc-section-actions--secondary {
|
|
15528
15526
|
justify-content: space-between;
|
|
15529
15527
|
}
|
|
15530
|
-
|
|
15531
|
-
|
|
15532
|
-
|
|
15533
|
-
|
|
15534
|
-
|
|
15535
|
-
gap: 12px;
|
|
15536
|
-
padding: 6px 4px;
|
|
15528
|
+
/* Groups the Commit split-button + standalone Push button in the footer. */
|
|
15529
|
+
.qc-action-group {
|
|
15530
|
+
display: inline-flex;
|
|
15531
|
+
align-items: stretch;
|
|
15532
|
+
gap: 8px;
|
|
15537
15533
|
}
|
|
15538
|
-
|
|
15539
|
-
|
|
15540
|
-
|
|
15541
|
-
|
|
15542
|
-
border-radius: 50%;
|
|
15543
|
-
background: rgba(60, 160, 90, 0.14);
|
|
15544
|
-
color: rgba(40, 130, 70, 0.95);
|
|
15545
|
-
display: flex;
|
|
15534
|
+
|
|
15535
|
+
/* Small "工作区干净" badge shown inline in the modal subtitle. */
|
|
15536
|
+
.qc-clean-badge {
|
|
15537
|
+
display: inline-flex;
|
|
15546
15538
|
align-items: center;
|
|
15547
|
-
|
|
15548
|
-
|
|
15549
|
-
|
|
15550
|
-
|
|
15551
|
-
|
|
15552
|
-
font-size: 0.9rem;
|
|
15539
|
+
gap: 3px;
|
|
15540
|
+
margin-left: 8px;
|
|
15541
|
+
padding: 1px 8px;
|
|
15542
|
+
border-radius: 999px;
|
|
15543
|
+
font-size: 0.7rem;
|
|
15553
15544
|
font-weight: 600;
|
|
15554
|
-
color:
|
|
15555
|
-
|
|
15556
|
-
|
|
15557
|
-
|
|
15558
|
-
color: var(--text-muted);
|
|
15545
|
+
color: rgba(40, 130, 70, 0.95);
|
|
15546
|
+
background: rgba(60, 160, 90, 0.12);
|
|
15547
|
+
border: 1px solid rgba(60, 160, 90, 0.22);
|
|
15548
|
+
vertical-align: 1px;
|
|
15559
15549
|
}
|
|
15550
|
+
.qc-clean-badge svg { flex-shrink: 0; }
|
|
15560
15551
|
|
|
15561
|
-
/* HEAD
|
|
15552
|
+
/* HEAD — a plain inline line (no nested box). */
|
|
15562
15553
|
.qc-head-card {
|
|
15563
15554
|
display: flex;
|
|
15564
15555
|
align-items: center;
|
|
15565
|
-
gap:
|
|
15566
|
-
padding: 8px 12px;
|
|
15567
|
-
background: rgba(255, 255, 255, 0.7);
|
|
15568
|
-
border: 1px solid rgba(125, 91, 57, 0.08);
|
|
15569
|
-
border-radius: 10px;
|
|
15570
|
-
min-height: 36px;
|
|
15556
|
+
gap: 8px;
|
|
15571
15557
|
}
|
|
15572
15558
|
.qc-head-label {
|
|
15573
15559
|
flex-shrink: 0;
|
|
15574
|
-
font-size: 0.
|
|
15560
|
+
font-size: 0.66rem;
|
|
15575
15561
|
font-weight: 700;
|
|
15576
|
-
letter-spacing: 0.
|
|
15562
|
+
letter-spacing: 0.06em;
|
|
15577
15563
|
color: var(--text-muted);
|
|
15578
15564
|
text-transform: uppercase;
|
|
15565
|
+
padding: 1px 6px;
|
|
15566
|
+
border-radius: 5px;
|
|
15567
|
+
background: rgba(125, 91, 57, 0.08);
|
|
15579
15568
|
}
|
|
15580
15569
|
.qc-head-text {
|
|
15581
15570
|
flex: 1 1 auto;
|
|
@@ -15620,11 +15609,6 @@
|
|
|
15620
15609
|
color: rgba(160, 90, 50, 0.95);
|
|
15621
15610
|
border-color: rgba(180, 100, 60, 0.28);
|
|
15622
15611
|
}
|
|
15623
|
-
.qc-chip--tag {
|
|
15624
|
-
background: rgba(140, 100, 200, 0.14);
|
|
15625
|
-
color: rgba(110, 70, 180, 0.95);
|
|
15626
|
-
border-color: rgba(140, 100, 200, 0.28);
|
|
15627
|
-
}
|
|
15628
15612
|
.qc-chip--warn {
|
|
15629
15613
|
background: rgba(220, 150, 30, 0.14);
|
|
15630
15614
|
color: rgba(180, 110, 20, 0.95);
|
|
@@ -15636,16 +15620,34 @@
|
|
|
15636
15620
|
border-color: rgba(60, 160, 90, 0.24);
|
|
15637
15621
|
}
|
|
15638
15622
|
|
|
15623
|
+
/* "为当前提交打 Tag" button (icon + text, balances the push button) */
|
|
15624
|
+
.qc-tag-head-btn {
|
|
15625
|
+
display: inline-flex;
|
|
15626
|
+
align-items: center;
|
|
15627
|
+
gap: 5px;
|
|
15628
|
+
}
|
|
15629
|
+
.qc-tag-head-btn svg { flex-shrink: 0; opacity: 0.8; }
|
|
15630
|
+
.qc-tag-head-btn.is-open {
|
|
15631
|
+
background: rgba(140, 100, 200, 0.12);
|
|
15632
|
+
border-color: rgba(140, 100, 200, 0.28);
|
|
15633
|
+
color: rgba(96, 60, 160, 0.98);
|
|
15634
|
+
}
|
|
15635
|
+
|
|
15639
15636
|
/* Tag HEAD inline drawer */
|
|
15640
15637
|
.qc-tag-head-panel {
|
|
15641
15638
|
display: flex;
|
|
15642
15639
|
flex-direction: column;
|
|
15643
15640
|
gap: 8px;
|
|
15644
|
-
padding:
|
|
15641
|
+
padding: 11px 12px;
|
|
15645
15642
|
background: rgba(255, 255, 255, 0.85);
|
|
15646
15643
|
border: 1px solid rgba(140, 100, 200, 0.18);
|
|
15647
15644
|
border-radius: 10px;
|
|
15648
15645
|
}
|
|
15646
|
+
.qc-tag-head-hint {
|
|
15647
|
+
font-size: 0.74rem;
|
|
15648
|
+
color: var(--text-muted);
|
|
15649
|
+
line-height: 1.4;
|
|
15650
|
+
}
|
|
15649
15651
|
.qc-tag-head-row {
|
|
15650
15652
|
display: flex;
|
|
15651
15653
|
gap: 6px;
|
|
@@ -15728,7 +15730,7 @@
|
|
|
15728
15730
|
all: unset;
|
|
15729
15731
|
display: flex;
|
|
15730
15732
|
flex-direction: column;
|
|
15731
|
-
gap:
|
|
15733
|
+
gap: 2px;
|
|
15732
15734
|
padding: 8px 10px;
|
|
15733
15735
|
border-radius: 8px;
|
|
15734
15736
|
cursor: pointer;
|
|
@@ -15738,12 +15740,26 @@
|
|
|
15738
15740
|
background: rgba(197, 101, 61, 0.08);
|
|
15739
15741
|
}
|
|
15740
15742
|
.qc-dropdown-item.is-selected {
|
|
15741
|
-
background: rgba(197, 101, 61, 0.
|
|
15743
|
+
background: rgba(197, 101, 61, 0.10);
|
|
15742
15744
|
}
|
|
15743
15745
|
.qc-dropdown-item.is-disabled {
|
|
15744
15746
|
opacity: 0.5;
|
|
15745
15747
|
cursor: not-allowed;
|
|
15746
15748
|
}
|
|
15749
|
+
.qc-dropdown-item-main {
|
|
15750
|
+
display: flex;
|
|
15751
|
+
align-items: center;
|
|
15752
|
+
gap: 6px;
|
|
15753
|
+
}
|
|
15754
|
+
.qc-dropdown-check {
|
|
15755
|
+
flex-shrink: 0;
|
|
15756
|
+
width: 13px;
|
|
15757
|
+
height: 13px;
|
|
15758
|
+
display: inline-flex;
|
|
15759
|
+
align-items: center;
|
|
15760
|
+
justify-content: center;
|
|
15761
|
+
color: var(--accent);
|
|
15762
|
+
}
|
|
15747
15763
|
.qc-dropdown-item-title {
|
|
15748
15764
|
font-size: 0.84rem;
|
|
15749
15765
|
font-weight: 600;
|
|
@@ -15753,6 +15769,7 @@
|
|
|
15753
15769
|
font-size: 0.72rem;
|
|
15754
15770
|
color: var(--text-muted);
|
|
15755
15771
|
line-height: 1.4;
|
|
15772
|
+
padding-left: 19px;
|
|
15756
15773
|
}
|
|
15757
15774
|
|
|
15758
15775
|
@media (max-width: 720px) {
|
|
@@ -15760,12 +15777,11 @@
|
|
|
15760
15777
|
.topbar-git-badge { padding: 0 8px; font-size: 0.7rem; }
|
|
15761
15778
|
.quick-commit-modal { max-width: 95vw; }
|
|
15762
15779
|
.qc-files-wrap { max-height: 160px; }
|
|
15763
|
-
.qc-section { padding: 10px 12px; }
|
|
15764
15780
|
.qc-dropdown-menu { min-width: 180px; }
|
|
15765
|
-
.qc-
|
|
15766
|
-
|
|
15767
|
-
|
|
15768
|
-
}
|
|
15781
|
+
.qc-section-actions--secondary { flex-wrap: wrap; gap: 8px; }
|
|
15782
|
+
.qc-section-actions--secondary .qc-tag-head-btn { flex: 1 1 auto; justify-content: center; }
|
|
15783
|
+
/* Keep the commit footer one row, but let the two button groups share width. */
|
|
15784
|
+
.qc-action-group { flex: 1 1 auto; justify-content: flex-end; }
|
|
15769
15785
|
}
|
|
15770
15786
|
|
|
15771
15787
|
/* ============================================================ */
|