@co0ontty/wand 1.9.0 → 1.10.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.
@@ -100,6 +100,7 @@
100
100
  /* ===== 布局尺寸 ===== */
101
101
  --sidebar-width: 300px;
102
102
  --file-panel-width: 320px;
103
+ --safe-bottom: 0px;
103
104
 
104
105
  /* ===== 高级缓动函数 ===== */
105
106
  --ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
@@ -122,13 +123,12 @@
122
123
 
123
124
  /* ===== PWA 独立窗口模式 ===== */
124
125
  @media (display-mode: standalone) {
125
- .floating-sidebar-toggle {
126
- top: max(10px, env(safe-area-inset-top, 10px));
126
+ :root {
127
+ --safe-bottom: env(safe-area-inset-bottom, 0px);
127
128
  }
128
129
  .app-container {
129
130
  --pwa-top-inset: env(safe-area-inset-top, 0px);
130
131
  padding-top: env(safe-area-inset-top, 0px);
131
- padding-bottom: env(safe-area-inset-bottom, 0px);
132
132
  }
133
133
  .sidebar-header {
134
134
  padding-top: calc(14px + env(safe-area-inset-top, 0px));
@@ -139,25 +139,18 @@
139
139
  }
140
140
 
141
141
  /* iOS Safari PWA fallback (navigator.standalone adds .is-pwa via JS) */
142
- .is-pwa .floating-sidebar-toggle {
143
- top: max(10px, env(safe-area-inset-top, 10px));
142
+ .is-pwa {
143
+ --safe-bottom: env(safe-area-inset-bottom, 0px);
144
144
  }
145
145
  .is-pwa .app-container {
146
146
  --pwa-top-inset: env(safe-area-inset-top, 0px);
147
147
  padding-top: env(safe-area-inset-top, 0px);
148
- padding-bottom: env(safe-area-inset-bottom, 0px);
149
148
  }
150
149
  .is-pwa .sidebar-header {
151
150
  padding-top: calc(14px + env(safe-area-inset-top, 0px));
152
151
  }
153
152
 
154
153
  /* ===== PWA 窗口控件覆盖模式 (Window Controls Overlay) ===== */
155
- @media (display-mode: window-controls-overlay) {
156
- .floating-sidebar-toggle {
157
- top: max(10px, env(titlebar-area-y, 10px));
158
- left: max(10px, env(titlebar-area-x, 10px));
159
- }
160
- }
161
154
 
162
155
  /* ===== 首帧过渡抑制 ===== */
163
156
  html.no-transition,
@@ -242,18 +235,17 @@
242
235
  overflow: hidden;
243
236
  }
244
237
 
245
- /* ===== 浮动侧栏切换按钮 ===== */
238
+ /* ===== 侧栏切换按钮 ===== */
246
239
  .floating-sidebar-toggle {
247
- position: fixed;
248
- top: max(10px, env(safe-area-inset-top, 10px));
249
- left: 10px;
250
- z-index: 200;
240
+ position: relative;
241
+ z-index: 1;
251
242
  width: 34px;
252
243
  height: 34px;
253
244
  padding: 0;
254
- display: flex;
245
+ display: inline-flex;
255
246
  align-items: center;
256
247
  justify-content: center;
248
+ flex-shrink: 0;
257
249
  background: rgba(255, 251, 245, 0.85);
258
250
  border: 1px solid var(--border-subtle);
259
251
  border-radius: var(--radius-sm);
@@ -263,6 +255,42 @@
263
255
  transition: all var(--transition-fast);
264
256
  }
265
257
 
258
+ .main-header-row .floating-sidebar-toggle {
259
+ margin-right: 2px;
260
+ }
261
+
262
+ .main-header-row .floating-sidebar-toggle.active {
263
+ opacity: 1;
264
+ pointer-events: auto;
265
+ }
266
+
267
+ .main-header-row .floating-sidebar-toggle.active .hamburger-icon span:nth-child(1) {
268
+ transform: translateY(5px) rotate(45deg);
269
+ }
270
+
271
+ .main-header-row .floating-sidebar-toggle.active .hamburger-icon span:nth-child(2) {
272
+ opacity: 0;
273
+ transform: scaleX(0);
274
+ }
275
+
276
+ .main-header-row .floating-sidebar-toggle.active .hamburger-icon span:nth-child(3) {
277
+ transform: translateY(-5px) rotate(-45deg);
278
+ }
279
+
280
+ .main-header-row .floating-sidebar-toggle:hover {
281
+ background: rgba(255, 251, 245, 0.95);
282
+ box-shadow: 0 3px 12px rgba(0, 0, 0, 0.1);
283
+ }
284
+
285
+ .main-header-row .floating-sidebar-toggle:active {
286
+ transform: scale(0.92);
287
+ }
288
+
289
+ .main-header-row .floating-sidebar-toggle.active:hover .hamburger-icon span,
290
+ .main-header-row .floating-sidebar-toggle:hover .hamburger-icon span {
291
+ background: var(--text-primary);
292
+ }
293
+
266
294
  .floating-sidebar-toggle:hover {
267
295
  background: rgba(255, 251, 245, 0.95);
268
296
  box-shadow: 0 3px 12px rgba(0, 0, 0, 0.1);
@@ -1795,6 +1823,12 @@
1795
1823
  .topbar-btn:active {
1796
1824
  transform: scale(0.95);
1797
1825
  }
1826
+ .topbar-btn.active {
1827
+ background: rgba(255, 255, 255, 0.7);
1828
+ color: var(--text-primary);
1829
+ font-weight: 600;
1830
+ box-shadow: 0 1px 4px rgba(89, 58, 32, 0.1);
1831
+ }
1798
1832
 
1799
1833
  /* Square icon variant — exactly 32×32px */
1800
1834
  .topbar-btn.square {
@@ -1998,8 +2032,6 @@
1998
2032
  overflow: hidden;
1999
2033
  background: transparent;
2000
2034
  position: relative;
2001
- padding: 8px 6px 6px;
2002
- gap: 0;
2003
2035
  }
2004
2036
 
2005
2037
  .main-content.file-panel-open {
@@ -2007,173 +2039,20 @@
2007
2039
  transition: margin-right 0.25s cubic-bezier(0.4, 0, 0.2, 1);
2008
2040
  }
2009
2041
 
2010
- .main-content-header {
2011
- display: flex;
2012
- align-items: center;
2013
- justify-content: space-between;
2014
- gap: 12px;
2015
- min-height: 44px;
2016
- padding: 6px 10px 8px;
2017
- border: 1px solid rgba(140, 110, 85, 0.14);
2018
- border-bottom: none;
2019
- border-radius: 16px 16px 0 0;
2020
- background: rgba(255, 252, 248, 0.94);
2021
- backdrop-filter: blur(14px);
2022
- box-shadow:
2023
- 0 8px 20px rgba(89, 58, 32, 0.06),
2024
- inset 0 -1px 0 rgba(255, 255, 255, 0.5);
2025
- flex-shrink: 0;
2026
- position: relative;
2027
- z-index: 2;
2028
- }
2029
-
2030
-
2031
- .main-content-header-left,
2032
- .main-content-header-center,
2033
- .main-content-header-right {
2034
- display: flex;
2035
- align-items: center;
2036
- gap: 8px;
2037
- min-width: 0;
2038
- }
2039
-
2040
- .main-content-header-left,
2041
- .main-content-header-right {
2042
- flex: 1;
2043
- }
2044
-
2045
- .main-content-header-center {
2046
- justify-content: center;
2047
- flex: 0 1 auto;
2048
- }
2049
-
2050
- .main-content-header-right {
2051
- justify-content: flex-end;
2052
- flex-wrap: wrap;
2053
- }
2042
+ .terminal-info { font-size: 0.625rem; color: var(--text-muted); font-weight: 500; }
2054
2043
 
2055
- .main-content-body {
2056
- flex: 1;
2057
- min-height: 0;
2044
+ /* ===== 主内容区顶部行 ===== */
2045
+ .main-header-row {
2058
2046
  display: flex;
2059
- flex-direction: column;
2060
- position: relative;
2061
- overflow: hidden;
2062
- border-radius: 0 0 14px 14px;
2063
- margin-top: -1px;
2064
- }
2065
-
2066
- .main-content-body::before {
2067
- content: "";
2068
- position: absolute;
2069
- top: 0;
2070
- left: 14px;
2071
- right: 14px;
2072
- height: 8px;
2073
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.09) 0%, rgba(255, 255, 255, 0) 100%);
2074
- pointer-events: none;
2075
- z-index: 1;
2076
- }
2077
-
2078
- .main-content-body > .terminal-container,
2079
- .main-content-body > .chat-container,
2080
- .main-content-body > .blank-chat {
2081
- border-top-color: transparent;
2082
- }
2083
-
2084
- .main-header-controls {
2085
- display: inline-flex;
2086
2047
  align-items: center;
2087
- gap: 6px;
2088
- min-width: 0;
2089
- flex-wrap: wrap;
2090
- }
2091
-
2092
- .main-header-btn,
2093
- .main-header-label {
2094
- height: 32px;
2095
- border-radius: 10px;
2048
+ justify-content: flex-start;
2049
+ padding: 4px 10px;
2096
2050
  flex-shrink: 0;
2051
+ min-height: 0;
2052
+ gap: 8px;
2097
2053
  }
2098
2054
 
2099
- .main-header-btn {
2100
- display: inline-flex;
2101
- align-items: center;
2102
- justify-content: center;
2103
- gap: 6px;
2104
- padding: 0 10px;
2105
- border: 1px solid rgba(125, 91, 57, 0.12);
2106
- background: rgba(255, 255, 255, 0.7);
2107
- color: var(--text-secondary);
2108
- font-size: 0.75rem;
2109
- font-weight: 500;
2110
- font-family: var(--font-sans);
2111
- cursor: pointer;
2112
- transition: all var(--transition-fast);
2113
- white-space: nowrap;
2114
- }
2115
-
2116
- .main-header-btn:hover {
2117
- background: rgba(255, 255, 255, 0.95);
2118
- border-color: rgba(197, 101, 61, 0.22);
2119
- color: var(--text-primary);
2120
- }
2121
-
2122
- .main-header-btn:active {
2123
- transform: translateY(1px);
2124
- }
2125
-
2126
- .main-header-label {
2127
- display: inline-flex;
2128
- align-items: center;
2129
- justify-content: center;
2130
- padding: 0 10px;
2131
- background: rgba(240, 229, 215, 0.55);
2132
- border: 1px solid rgba(125, 91, 57, 0.08);
2133
- color: var(--text-muted);
2134
- font-size: 0.6875rem;
2135
- font-weight: 600;
2136
- white-space: nowrap;
2137
- }
2138
-
2139
- .menu-toggle-btn {
2140
- padding: 0 12px;
2141
- min-width: 40px;
2142
- }
2143
-
2144
- .menu-toggle-btn.active {
2145
- background: var(--accent-muted);
2146
- border-color: rgba(197, 101, 61, 0.22);
2147
- color: var(--accent);
2148
- }
2149
-
2150
- .jump-latest-btn {
2151
- opacity: 0;
2152
- transform: translateY(4px);
2153
- pointer-events: none;
2154
- }
2155
-
2156
- .jump-latest-btn.visible {
2157
- opacity: 1;
2158
- transform: translateY(0);
2159
- pointer-events: auto;
2160
- }
2161
-
2162
- .main-header-new-session {
2163
- background: rgba(197, 101, 61, 0.12);
2164
- border-color: rgba(197, 101, 61, 0.18);
2165
- color: var(--accent);
2166
- font-weight: 600;
2167
- }
2168
-
2169
- .main-header-new-session:hover {
2170
- background: rgba(197, 101, 61, 0.18);
2171
- border-color: rgba(197, 101, 61, 0.28);
2172
- }
2173
-
2174
- .terminal-info { font-size: 0.625rem; color: var(--text-muted); font-weight: 500; }
2175
-
2176
- /* Current task indicator in terminal header */
2055
+ /* Current task indicator */
2177
2056
  .current-task {
2178
2057
  display: flex;
2179
2058
  align-items: center;
@@ -2186,7 +2065,9 @@
2186
2065
  padding: 2px 8px 2px 5px;
2187
2066
  font-weight: 500;
2188
2067
  max-width: 280px;
2068
+ min-width: 0;
2189
2069
  overflow: hidden;
2070
+ flex-shrink: 1;
2190
2071
  text-overflow: ellipsis;
2191
2072
  white-space: nowrap;
2192
2073
  }
@@ -2221,8 +2102,8 @@
2221
2102
  padding: 10px;
2222
2103
  overflow: hidden;
2223
2104
  min-height: 0;
2224
- margin: 0;
2225
- border-radius: 16px;
2105
+ margin: 0 6px 6px;
2106
+ border-radius: var(--radius-md);
2226
2107
  border: 1px solid rgba(140, 110, 85, 0.35);
2227
2108
  box-shadow:
2228
2109
  inset 0 1px 0 rgba(255, 255, 255, 0.06),
@@ -2232,13 +2113,6 @@
2232
2113
  transition: border-color var(--transition-normal), box-shadow var(--transition-normal);
2233
2114
  }
2234
2115
 
2235
- .terminal-container.hidden,
2236
- .chat-container.hidden,
2237
- .blank-chat.hidden,
2238
- .input-panel.hidden {
2239
- display: none !important;
2240
- }
2241
-
2242
2116
  .terminal-container.active {
2243
2117
  display: flex;
2244
2118
  align-items: stretch;
@@ -2410,6 +2284,25 @@
2410
2284
  50% { opacity: 1; }
2411
2285
  }
2412
2286
 
2287
+ /* 容器底部渐变 — 为 jump-to-bottom 按钮提供视觉承托 */
2288
+ .terminal-container::after {
2289
+ content: "";
2290
+ position: absolute;
2291
+ bottom: 0;
2292
+ left: 0;
2293
+ right: 0;
2294
+ height: 48px;
2295
+ background: linear-gradient(to top, rgba(26, 22, 19, 0.5), transparent);
2296
+ pointer-events: none;
2297
+ opacity: 0;
2298
+ transition: opacity 0.3s ease;
2299
+ z-index: 12;
2300
+ border-radius: 0 0 var(--radius-md) var(--radius-md);
2301
+ }
2302
+ .terminal-container.has-jump-btn::after {
2303
+ opacity: 1;
2304
+ }
2305
+
2413
2306
  /* Chat View — matches topbar-btn height (32px) */
2414
2307
  .view-toggle {
2415
2308
  display: flex;
@@ -2464,127 +2357,100 @@
2464
2357
  text-align: center;
2465
2358
  padding: 0 2px;
2466
2359
  }
2467
- .terminal-jump-bottom {
2468
- background: rgba(24, 20, 17, 0.82);
2469
- color: rgba(255, 247, 239, 0.92);
2470
- border-color: rgba(255, 255, 255, 0.12);
2471
- box-shadow: 0 8px 18px rgba(0, 0, 0, 0.16);
2472
- transition: opacity 0.18s ease, transform 0.18s ease, background 0.18s ease, border-color 0.18s ease;
2473
- }
2474
- .terminal-jump-bottom:hover {
2475
- background: rgba(38, 30, 24, 0.9);
2476
- border-color: rgba(214, 123, 82, 0.28);
2477
- }
2478
- .terminal-jump-bottom:active {
2479
- transform: translateY(1px);
2360
+ .terminal-scale-overlay {
2361
+ position: absolute;
2362
+ top: 8px;
2363
+ right: 8px;
2364
+ display: inline-flex;
2365
+ align-items: center;
2366
+ gap: 1px;
2367
+ padding: 2px;
2368
+ border-radius: 7px;
2369
+ border: 1px solid rgba(255, 255, 255, 0.06);
2370
+ background: rgba(24, 20, 17, 0.38);
2371
+ backdrop-filter: blur(8px);
2372
+ box-shadow: 0 6px 18px rgba(0, 0, 0, 0.18);
2373
+ opacity: 0.72;
2374
+ transition: opacity 0.18s ease, background 0.18s ease, border-color 0.18s ease;
2375
+ z-index: 12;
2376
+ pointer-events: auto;
2480
2377
  }
2481
-
2482
- .terminal-scale-btn {
2483
- min-width: 32px;
2484
- padding: 0 8px;
2378
+ .terminal-container:hover .terminal-scale-overlay,
2379
+ .terminal-scale-overlay:focus-within {
2380
+ opacity: 1;
2381
+ background: rgba(24, 20, 17, 0.56);
2382
+ border-color: rgba(255, 255, 255, 0.1);
2485
2383
  }
2486
-
2487
- .terminal-scale-label {
2488
- min-width: 46px;
2384
+ .terminal-scale-overlay-btn {
2385
+ min-width: 22px;
2386
+ height: 22px;
2387
+ padding: 0 3px;
2388
+ color: rgba(245, 234, 220, 0.88);
2389
+ background: transparent;
2390
+ border: none;
2391
+ border-radius: 5px;
2392
+ transition: background 0.18s ease, color 0.18s ease;
2489
2393
  }
2490
-
2491
- #terminal-header-controls .main-header-btn,
2492
- #terminal-header-controls .main-header-label {
2493
- background: rgba(36, 28, 22, 0.88);
2494
- color: rgba(245, 234, 220, 0.9);
2495
- border-color: rgba(255, 255, 255, 0.1);
2394
+ .terminal-scale-overlay-btn:hover {
2395
+ background: rgba(214, 123, 82, 0.18);
2396
+ color: rgba(255, 247, 239, 0.96);
2496
2397
  }
2497
-
2498
- #terminal-header-controls .main-header-btn:hover {
2499
- background: rgba(46, 35, 28, 0.94);
2500
- border-color: rgba(214, 123, 82, 0.28);
2398
+ .terminal-scale-overlay-label {
2399
+ font-size: 0.625rem;
2400
+ color: rgba(245, 234, 220, 0.66);
2401
+ min-width: 34px;
2402
+ text-align: center;
2403
+ padding: 0 3px;
2501
2404
  }
2502
2405
 
2503
- #terminal-header-controls .terminal-scale-label {
2504
- color: rgba(245, 234, 220, 0.72);
2406
+ .terminal-scale-overlay-divider {
2407
+ width: 1px;
2408
+ height: 14px;
2409
+ background: rgba(245, 234, 220, 0.2);
2410
+ margin: 0 2px;
2505
2411
  }
2506
2412
 
2507
- #terminal-header-controls .jump-latest-btn:not(.visible) {
2508
- display: none;
2413
+ .terminal-jump-bottom {
2414
+ position: absolute;
2415
+ right: 14px;
2416
+ bottom: 18px;
2417
+ display: inline-flex;
2418
+ align-items: center;
2419
+ justify-content: center;
2420
+ gap: 6px;
2421
+ min-width: 78px;
2422
+ height: 32px;
2423
+ padding: 0 12px;
2424
+ border: 1px solid rgba(255, 255, 255, 0.15);
2425
+ border-radius: 999px;
2426
+ background: rgba(24, 20, 17, 0.72);
2427
+ color: rgba(255, 247, 239, 0.92);
2428
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.18);
2429
+ backdrop-filter: blur(10px);
2430
+ cursor: pointer;
2431
+ z-index: 13;
2432
+ opacity: 0;
2433
+ transform: translateY(12px) scale(0.92);
2434
+ pointer-events: none;
2435
+ transition: opacity 0.28s var(--ease-out-expo), transform 0.28s var(--ease-out-expo), background 0.18s ease, border-color 0.18s ease;
2509
2436
  }
2510
-
2511
- #chat-header-controls .jump-latest-btn:not(.visible) {
2512
- display: none;
2437
+ .terminal-jump-bottom.visible {
2438
+ opacity: 1;
2439
+ transform: translateY(0) scale(1);
2440
+ pointer-events: auto;
2513
2441
  }
2514
-
2515
- #chat-header-controls .chat-follow-toggle {
2516
- min-width: 60px;
2442
+ .terminal-jump-bottom:hover {
2443
+ background: rgba(38, 30, 24, 0.84);
2444
+ border-color: rgba(214, 123, 82, 0.28);
2517
2445
  }
2518
-
2519
- #chat-header-controls .chat-follow-toggle:hover {
2520
- background: rgba(255, 255, 255, 0.92);
2446
+ .terminal-jump-bottom:active {
2447
+ transform: translateY(1px) scale(0.97);
2521
2448
  }
2522
2449
 
2523
- #chat-header-controls .chat-follow-toggle.active:hover {
2524
- background: rgba(197, 101, 61, 0.18);
2525
- }
2526
-
2527
- #chat-header-controls .chat-jump-bottom {
2528
- background: rgba(255, 250, 242, 0.92);
2529
- color: var(--text-primary);
2530
- border-color: rgba(125, 91, 57, 0.16);
2531
- box-shadow: 0 8px 18px rgba(89, 58, 32, 0.12);
2532
- transition: opacity 0.18s ease, transform 0.18s ease, background 0.18s ease, border-color 0.18s ease;
2533
- }
2534
-
2535
- #chat-header-controls .chat-jump-bottom:hover {
2536
- background: rgba(255, 255, 255, 0.98);
2537
- border-color: rgba(197, 101, 61, 0.24);
2538
- }
2539
-
2540
- #chat-header-controls .chat-jump-bottom:active {
2541
- transform: translateY(1px);
2542
- }
2543
-
2544
- .terminal-scale-overlay,
2545
- .terminal-scale-overlay-btn,
2546
- .terminal-scale-overlay-label,
2547
- .terminal-scale-overlay-divider,
2548
- .chat-overlay-controls {
2549
- display: none !important;
2550
- }
2551
-
2552
- .terminal-jump-bottom,
2553
- .chat-jump-bottom {
2554
- position: static;
2555
- right: auto;
2556
- bottom: auto;
2557
- min-width: 78px;
2558
- height: 32px;
2559
- padding: 0 12px;
2560
- border-radius: 999px;
2561
- cursor: pointer;
2562
- z-index: auto;
2563
- }
2564
-
2565
- .chat-jump-bottom.visible,
2566
- .terminal-jump-bottom.visible {
2567
- opacity: 1;
2568
- transform: translateY(0);
2569
- pointer-events: auto;
2570
- }
2571
-
2572
- .chat-jump-bottom {
2573
- opacity: 0;
2574
- transform: translateY(4px);
2575
- pointer-events: none;
2576
- }
2577
-
2578
- .chat-jump-bottom.visible {
2579
- opacity: 1;
2580
- }
2581
-
2582
- .chat-container.active { display: flex; }
2583
-
2584
- /* Terminal interactive mode indicator */
2585
- .terminal-container.interactive {
2586
- border-color: rgba(79, 122, 88, 0.5);
2587
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04), 0 0 0 2px rgba(79, 122, 88, 0.25), var(--shadow-soft);
2450
+ /* Terminal interactive mode indicator */
2451
+ .terminal-container.interactive {
2452
+ border-color: rgba(79, 122, 88, 0.5);
2453
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04), 0 0 0 2px rgba(79, 122, 88, 0.25), var(--shadow-soft);
2588
2454
  }
2589
2455
 
2590
2456
  /* Mini keyboard FAB button */
@@ -2859,7 +2725,32 @@
2859
2725
  overflow: hidden;
2860
2726
  padding: 0 20px 16px;
2861
2727
  background: linear-gradient(180deg, rgba(255, 252, 248, 0.5) 0%, transparent 100%);
2862
- border-radius: 16px;
2728
+ }
2729
+
2730
+ .chat-overlay-controls {
2731
+ position: absolute;
2732
+ top: 8px;
2733
+ right: 8px;
2734
+ display: inline-flex;
2735
+ align-items: center;
2736
+ gap: 6px;
2737
+ padding: 2px;
2738
+ border-radius: 7px;
2739
+ border: 1px solid rgba(125, 91, 57, 0.12);
2740
+ background: rgba(255, 250, 242, 0.72);
2741
+ backdrop-filter: blur(8px);
2742
+ box-shadow: 0 6px 18px rgba(89, 58, 32, 0.12);
2743
+ opacity: 0.84;
2744
+ transition: opacity 0.18s ease, background 0.18s ease, border-color 0.18s ease;
2745
+ z-index: 12;
2746
+ pointer-events: auto;
2747
+ }
2748
+
2749
+ .chat-container:hover .chat-overlay-controls,
2750
+ .chat-overlay-controls:focus-within {
2751
+ opacity: 1;
2752
+ background: rgba(255, 250, 242, 0.88);
2753
+ border-color: rgba(197, 101, 61, 0.16);
2863
2754
  }
2864
2755
 
2865
2756
  .chat-follow-toggle {
@@ -2885,6 +2776,64 @@
2885
2776
  background: rgba(197, 101, 61, 0.18);
2886
2777
  }
2887
2778
 
2779
+ .chat-jump-bottom {
2780
+ position: absolute;
2781
+ right: 14px;
2782
+ bottom: 18px;
2783
+ display: inline-flex;
2784
+ align-items: center;
2785
+ justify-content: center;
2786
+ gap: 6px;
2787
+ min-width: 78px;
2788
+ height: 32px;
2789
+ padding: 0 12px;
2790
+ border: 1px solid rgba(125, 91, 57, 0.16);
2791
+ border-radius: 999px;
2792
+ background: rgba(255, 250, 242, 0.9);
2793
+ color: var(--text-primary);
2794
+ box-shadow: 0 4px 12px rgba(89, 58, 32, 0.10);
2795
+ backdrop-filter: blur(10px);
2796
+ cursor: pointer;
2797
+ z-index: 13;
2798
+ opacity: 0;
2799
+ transform: translateY(12px) scale(0.92);
2800
+ pointer-events: none;
2801
+ transition: opacity 0.28s var(--ease-out-expo), transform 0.28s var(--ease-out-expo), background 0.18s ease, border-color 0.18s ease;
2802
+ }
2803
+
2804
+ .chat-jump-bottom.visible {
2805
+ opacity: 1;
2806
+ transform: translateY(0) scale(1);
2807
+ pointer-events: auto;
2808
+ }
2809
+
2810
+ .chat-jump-bottom:hover {
2811
+ background: rgba(255, 255, 255, 0.98);
2812
+ border-color: rgba(197, 101, 61, 0.24);
2813
+ }
2814
+
2815
+ .chat-jump-bottom:active {
2816
+ transform: translateY(1px);
2817
+ }
2818
+
2819
+ .chat-container.active { display: flex; }
2820
+
2821
+ .chat-container::after {
2822
+ content: "";
2823
+ position: absolute;
2824
+ bottom: 0;
2825
+ left: 0;
2826
+ right: 0;
2827
+ height: 48px;
2828
+ background: linear-gradient(to top, rgba(255, 252, 248, 0.6), transparent);
2829
+ pointer-events: none;
2830
+ opacity: 0;
2831
+ transition: opacity 0.3s ease;
2832
+ z-index: 12;
2833
+ }
2834
+ .chat-container.has-jump-btn::after {
2835
+ opacity: 1;
2836
+ }
2888
2837
 
2889
2838
  /* ===== 聊天消息列表 ===== */
2890
2839
  .chat-messages {
@@ -3509,8 +3458,8 @@
3509
3458
  }
3510
3459
  .ask-user-option {
3511
3460
  display: flex;
3512
- align-items: flex-start;
3513
- gap: 8px;
3461
+ align-items: center;
3462
+ gap: 10px;
3514
3463
  padding: 8px 12px;
3515
3464
  border: 1px solid var(--border-default);
3516
3465
  border-radius: var(--radius-sm);
@@ -3519,15 +3468,119 @@
3519
3468
  transition: all var(--transition-fast);
3520
3469
  text-align: left;
3521
3470
  }
3522
- .ask-user-option:hover {
3471
+ .ask-user-option:hover:not(:disabled) {
3523
3472
  border-color: var(--accent);
3524
3473
  background: rgba(197, 101, 61, 0.06);
3525
3474
  }
3475
+ .ask-user-option:disabled {
3476
+ opacity: 0.5;
3477
+ cursor: not-allowed;
3478
+ }
3479
+ .ask-user-option.selected {
3480
+ border-color: var(--accent);
3481
+ background: rgba(197, 101, 61, 0.08);
3482
+ }
3483
+ /* Radio / Checkbox indicator */
3484
+ .ask-user-indicator {
3485
+ width: 16px;
3486
+ height: 16px;
3487
+ flex-shrink: 0;
3488
+ border: 2px solid var(--border-default);
3489
+ border-radius: 50%;
3490
+ transition: all var(--transition-fast);
3491
+ position: relative;
3492
+ display: flex;
3493
+ align-items: center;
3494
+ justify-content: center;
3495
+ }
3496
+ .ask-user-options[data-multi-select="true"] .ask-user-indicator {
3497
+ border-radius: 3px;
3498
+ }
3499
+ .ask-user-option.selected .ask-user-indicator {
3500
+ border-color: var(--accent);
3501
+ background: var(--accent);
3502
+ }
3503
+ .ask-user-option.selected .ask-user-indicator::after {
3504
+ content: "";
3505
+ width: 6px;
3506
+ height: 6px;
3507
+ background: white;
3508
+ border-radius: 50%;
3509
+ }
3510
+ .ask-user-options[data-multi-select="true"] .ask-user-option.selected .ask-user-indicator::after {
3511
+ width: 4px;
3512
+ height: 8px;
3513
+ border: solid white;
3514
+ border-width: 0 2px 2px 0;
3515
+ border-radius: 0;
3516
+ background: none;
3517
+ transform: rotate(45deg);
3518
+ margin-bottom: 2px;
3519
+ }
3520
+ /* Option content: label + description */
3521
+ .ask-user-option-content {
3522
+ flex: 1;
3523
+ min-width: 0;
3524
+ }
3526
3525
  .ask-user-option-label {
3527
3526
  font-size: 0.8125rem;
3528
3527
  font-weight: 500;
3529
3528
  color: var(--text-primary);
3530
3529
  }
3530
+ .ask-user-option-desc {
3531
+ font-size: 0.75rem;
3532
+ color: var(--text-secondary);
3533
+ margin-top: 2px;
3534
+ line-height: 1.4;
3535
+ }
3536
+ /* Submit button */
3537
+ .ask-user-actions {
3538
+ margin-top: 10px;
3539
+ display: flex;
3540
+ justify-content: flex-end;
3541
+ }
3542
+ .ask-user-submit {
3543
+ padding: 6px 16px;
3544
+ border: 1px solid var(--accent);
3545
+ border-radius: var(--radius-sm);
3546
+ background: var(--accent);
3547
+ color: white;
3548
+ font-size: 0.8125rem;
3549
+ font-weight: 500;
3550
+ cursor: pointer;
3551
+ transition: all var(--transition-fast);
3552
+ }
3553
+ .ask-user-submit:hover:not(:disabled) {
3554
+ filter: brightness(1.1);
3555
+ }
3556
+ .ask-user-submit:disabled {
3557
+ opacity: 0.4;
3558
+ cursor: not-allowed;
3559
+ }
3560
+ .ask-user-submit.ask-user-submitted {
3561
+ background: var(--bg-secondary);
3562
+ border-color: var(--border-default);
3563
+ color: var(--text-muted);
3564
+ pointer-events: none;
3565
+ }
3566
+ /* Answered (read-only) state */
3567
+ .ask-user-answered .ask-user-option {
3568
+ cursor: default;
3569
+ pointer-events: none;
3570
+ opacity: 0.6;
3571
+ }
3572
+ .ask-user-answered .ask-user-option.ask-user-option-chosen {
3573
+ opacity: 1;
3574
+ border-color: var(--success);
3575
+ background: rgba(79, 122, 88, 0.06);
3576
+ }
3577
+ .ask-user-answered .ask-user-option.ask-user-option-chosen .ask-user-indicator {
3578
+ border-color: var(--success);
3579
+ background: var(--success);
3580
+ }
3581
+ .ask-user-option-readonly {
3582
+ pointer-events: none;
3583
+ }
3531
3584
  .ask-user-answer-sent {
3532
3585
  padding: 8px 12px;
3533
3586
  background: rgba(79, 122, 88, 0.08);
@@ -4222,11 +4275,12 @@
4222
4275
 
4223
4276
  .input-panel {
4224
4277
  padding: 6px 10px;
4278
+ padding-bottom: calc(6px + var(--safe-bottom, 0px));
4225
4279
  flex-shrink: 0;
4226
4280
  z-index: 26;
4227
4281
  overscroll-behavior: contain;
4228
4282
  touch-action: pan-y;
4229
- border-radius: 14px;
4283
+ border-top: 1px solid var(--border-subtle);
4230
4284
  }
4231
4285
 
4232
4286
  .input-composer {
@@ -5902,6 +5956,16 @@
5902
5956
  :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
5903
5957
  button:focus-visible { outline-offset: 0; }
5904
5958
 
5959
+ /*
5960
+ * ===== 响应式断点级联 =====
5961
+ * max-width: 768px → 平板: 触摸优化, 侧栏覆盖
5962
+ * max-width: 640px → 手机: 紧凑布局, safe-area 底部, 欢迎页适配
5963
+ * ├─ 391-420px → iPhone 14/15: 微调 padding (继承 640px)
5964
+ * └─ max-width: 390px → iPhone SE: 超紧凑 (继承 640px)
5965
+ * 641-768px → iPad Mini: 触摸目标加大 (继承 768px)
5966
+ * max-height: 420px → 横屏: 水平布局
5967
+ */
5968
+
5905
5969
  /* 平板适配 */
5906
5970
  @media (max-width: 768px) {
5907
5971
  .app-container {
@@ -5963,190 +6027,80 @@
5963
6027
  overflow: hidden;
5964
6028
  }
5965
6029
 
5966
- .sidebar { top: 0; }
5967
-
5968
- .main-content {
5969
- padding: 6px;
5970
- gap: 0;
6030
+ /* 移动端浮动按钮 */
6031
+ .floating-sidebar-toggle {
6032
+ width: 30px;
6033
+ height: 30px;
6034
+ border-radius: 6px;
5971
6035
  }
6036
+ .floating-sidebar-toggle .hamburger-icon { width: 13px; height: 9px; }
5972
6037
 
5973
- .main-content-header {
5974
- min-height: 40px;
5975
- padding: 6px 8px 7px;
5976
- gap: 8px;
5977
- }
6038
+ .sidebar { top: 0; }
5978
6039
 
5979
- .main-content-header::before,
5980
- .main-content-header::after {
5981
- width: 14px;
5982
- height: 14px;
6040
+ /* 移动端终端顶栏 - 紧凑 */
6041
+ .terminal-header { padding: 5px 8px; min-height: 32px; }
6042
+ .terminal-header-actions { gap: 4px; }
6043
+ .terminal-header-actions .btn-sm,
6044
+ .terminal-header-actions .btn-icon,
6045
+ .terminal-header-actions .topbar-btn {
6046
+ height: 28px;
6047
+ min-height: 28px;
6048
+ min-width: 28px;
6049
+ font-size: 0.625rem;
6050
+ border-radius: 5px;
5983
6051
  }
6052
+ .terminal-title { gap: 4px; font-size: 0.6875rem; }
6053
+ .terminal-title-text { font-size: 0.75rem; }
6054
+ .terminal-info { font-size: 0.5625rem; }
6055
+ .current-task { font-size: 0.5625rem; padding: 1px 6px 1px 4px; gap: 3px; }
5984
6056
 
5985
- .main-content-header::before {
5986
- box-shadow: 5px 5px 0 0 rgba(255, 252, 248, 0.94);
5987
- }
6057
+ .main-header-row { padding: 2px 6px; gap: 4px; }
5988
6058
 
5989
- .main-content-header::after {
5990
- box-shadow: -5px 5px 0 0 rgba(255, 252, 248, 0.94);
5991
- }
6059
+ /* 视图切换按钮 - 紧凑 */
6060
+ .view-toggle { height: 28px; padding: 2px; gap: 1px; }
6061
+ .view-toggle-btn { height: 24px; min-height: 24px; padding: 0 6px; font-size: 0.625rem; gap: 2px; border-radius: 4px; }
5992
6062
 
5993
- .main-content-body::before {
5994
- left: 10px;
5995
- right: 10px;
5996
- height: 6px;
6063
+ /* 移动端终端内缩放浮层 */
6064
+ .terminal-scale-overlay {
6065
+ top: 6px;
6066
+ right: 6px;
6067
+ padding: 2px;
6068
+ gap: 1px;
5997
6069
  }
5998
-
5999
- .main-content-header-left,
6000
- .main-content-header-center,
6001
- .main-content-header-right {
6002
- gap: 6px;
6070
+ .terminal-scale-overlay-btn {
6071
+ min-width: 20px;
6072
+ height: 20px;
6073
+ font-size: 0.75rem;
6003
6074
  }
6004
-
6005
- .main-content-header-right {
6006
- flex-wrap: nowrap;
6007
- overflow-x: auto;
6008
- scrollbar-width: none;
6075
+ .terminal-scale-overlay-label {
6076
+ min-width: 28px;
6077
+ font-size: 0.5625rem;
6078
+ padding: 0 2px;
6009
6079
  }
6010
6080
 
6011
- .main-content-header-right::-webkit-scrollbar {
6012
- display: none;
6081
+ /* 移动端简化交互模式按钮 */
6082
+ .terminal-tool-btn {
6083
+ padding: 0 8px;
6084
+ font-size: 0.625rem;
6013
6085
  }
6014
6086
 
6015
- .main-header-controls {
6016
- gap: 4px;
6017
- flex-wrap: nowrap;
6018
- }
6087
+ /* 文件面板按钮保持可见 */
6088
+ .file-panel-toggle { display: flex; }
6019
6089
 
6020
- .main-header-btn,
6021
- .main-header-label,
6022
- .topbar-btn {
6023
- height: 28px;
6024
- min-height: 28px;
6025
- font-size: 0.6875rem;
6026
- border-radius: 8px;
6090
+ .main-layout {
6091
+ flex-direction: column;
6092
+ flex: 1;
6093
+ min-height: 0;
6094
+ height: 100%;
6095
+ overflow: hidden;
6096
+ padding-left: 0;
6027
6097
  }
6028
6098
 
6029
- .menu-toggle-btn {
6030
- min-width: 34px;
6031
- padding: 0 10px;
6032
- }
6033
-
6034
- .menu-toggle-btn .hamburger-icon {
6035
- width: 13px;
6036
- height: 9px;
6037
- }
6038
-
6039
- .main-header-label {
6040
- padding: 0 8px;
6041
- }
6042
-
6043
- .main-header-new-session {
6044
- padding: 0 10px;
6045
- }
6046
-
6047
- .main-content-header-left,
6048
- .main-content-header-center,
6049
- .main-content-header-right {
6050
- gap: 6px;
6051
- }
6052
-
6053
- .main-content-header-right {
6054
- flex-wrap: nowrap;
6055
- overflow-x: auto;
6056
- scrollbar-width: none;
6057
- }
6058
-
6059
- .main-content-header-right::-webkit-scrollbar {
6060
- display: none;
6061
- }
6062
-
6063
- .main-header-controls {
6064
- gap: 4px;
6065
- flex-wrap: nowrap;
6066
- }
6067
-
6068
- .main-header-btn,
6069
- .main-header-label,
6070
- .topbar-btn {
6071
- height: 28px;
6072
- min-height: 28px;
6073
- font-size: 0.6875rem;
6074
- border-radius: 8px;
6075
- }
6076
-
6077
- .menu-toggle-btn {
6078
- min-width: 34px;
6079
- padding: 0 10px;
6080
- }
6081
-
6082
- .menu-toggle-btn .hamburger-icon {
6083
- width: 13px;
6084
- height: 9px;
6085
- }
6086
-
6087
- .main-header-label {
6088
- padding: 0 8px;
6089
- }
6090
-
6091
- .main-header-new-session {
6092
- padding: 0 10px;
6093
- }
6094
-
6095
- /* 移动端终端顶栏 - 紧凑 */
6096
- .terminal-header { padding: 5px 8px; min-height: 32px; }
6097
- .terminal-header-actions { gap: 4px; }
6098
- .terminal-header-actions .btn-sm,
6099
- .terminal-header-actions .btn-icon,
6100
- .terminal-header-actions .topbar-btn {
6101
- height: 28px;
6102
- min-height: 28px;
6103
- min-width: 28px;
6104
- font-size: 0.625rem;
6105
- border-radius: 5px;
6106
- }
6107
- .terminal-title { gap: 4px; font-size: 0.6875rem; }
6108
- .terminal-title-text { font-size: 0.75rem; }
6109
- .terminal-info { font-size: 0.5625rem; }
6110
- .current-task { font-size: 0.5625rem; padding: 1px 6px 1px 4px; gap: 3px; }
6111
-
6112
- /* 视图切换按钮 - 紧凑 */
6113
- .view-toggle { height: 28px; padding: 2px; gap: 1px; }
6114
- .view-toggle-btn { height: 24px; min-height: 24px; padding: 0 6px; font-size: 0.625rem; gap: 2px; border-radius: 4px; }
6115
-
6116
- #terminal-header-controls .terminal-scale-btn {
6117
- min-width: 28px;
6118
- padding: 0 6px;
6119
- font-size: 0.75rem;
6120
- }
6121
-
6122
- #terminal-header-controls .terminal-scale-label {
6123
- min-width: 38px;
6124
- font-size: 0.625rem;
6125
- }
6126
-
6127
- /* 移动端简化交互模式按钮 */
6128
- .terminal-tool-btn {
6129
- padding: 0 8px;
6130
- font-size: 0.625rem;
6131
- }
6132
-
6133
- /* 文件面板按钮保持可见 */
6134
- .file-panel-toggle { display: flex; }
6135
-
6136
- .main-layout {
6137
- flex-direction: column;
6138
- flex: 1;
6139
- min-height: 0;
6140
- height: 100%;
6141
- overflow: hidden;
6142
- padding-left: 0;
6143
- }
6144
-
6145
- .sidebar {
6146
- top: 0;
6147
- width: min(260px, calc(100vw - 12px));
6148
- max-height: none;
6149
- border-bottom: none;
6099
+ .sidebar {
6100
+ top: 0;
6101
+ width: min(260px, calc(100vw - 12px));
6102
+ max-height: none;
6103
+ border-bottom: none;
6150
6104
  }
6151
6105
 
6152
6106
  /* 确保主内容区域正确占据剩余空间 */
@@ -6199,10 +6153,10 @@
6199
6153
  .input-panel {
6200
6154
  z-index: 30;
6201
6155
  padding: 4px 6px;
6202
- padding-bottom: calc(6px + env(safe-area-inset-bottom, 0px) + var(--keyboard-offset, 0px));
6156
+ padding-bottom: calc(6px + var(--safe-bottom, 0px) + var(--keyboard-offset, 0px));
6203
6157
  flex: 0 0 auto;
6204
6158
  margin-top: auto;
6205
- background: linear-gradient(180deg, rgba(246, 241, 232, 0) 0%, rgba(246, 241, 232, 0.82) 20%, rgba(246, 241, 232, 0.94) 100%);
6159
+ background: linear-gradient(180deg, rgba(246, 241, 232, 0.5) 0%, rgba(246, 241, 232, 0.88) 30%, rgba(246, 241, 232, 0.96) 100%);
6206
6160
  backdrop-filter: blur(12px);
6207
6161
  }
6208
6162
 
@@ -6211,8 +6165,7 @@
6211
6165
  }
6212
6166
 
6213
6167
  .input-session-info-bar {
6214
- padding: 2px 6px;
6215
- padding-bottom: calc(3px + env(safe-area-inset-bottom, 0px));
6168
+ padding: 2px 6px 3px;
6216
6169
  font-size: 0.625rem;
6217
6170
  }
6218
6171
 
@@ -6360,6 +6313,17 @@
6360
6313
  min-width: 20px;
6361
6314
  }
6362
6315
 
6316
+ /* 回到底部按钮 - 紧凑 */
6317
+ .terminal-jump-bottom,
6318
+ .chat-jump-bottom {
6319
+ height: 28px;
6320
+ min-width: 64px;
6321
+ padding: 0 10px;
6322
+ font-size: 0.6875rem;
6323
+ right: 10px;
6324
+ bottom: 14px;
6325
+ }
6326
+
6363
6327
  /* 小键盘 FAB */
6364
6328
  .mini-keyboard-fab {
6365
6329
  width: 40px;
@@ -6487,7 +6451,7 @@
6487
6451
  .login-container {
6488
6452
  min-height: 100dvh;
6489
6453
  align-items: flex-start;
6490
- padding: 8px 8px calc(8px + env(safe-area-inset-bottom, 0px));
6454
+ padding: 8px 8px calc(8px + var(--safe-bottom, 0px));
6491
6455
  }
6492
6456
 
6493
6457
  .login-card {
@@ -6512,7 +6476,7 @@
6512
6476
  max-width: 100%;
6513
6477
  max-height: 85vh;
6514
6478
  border-radius: var(--radius-md) var(--radius-md) 0 0;
6515
- margin-bottom: env(safe-area-inset-bottom, 0px);
6479
+ margin-bottom: var(--safe-bottom, 0px);
6516
6480
  }
6517
6481
 
6518
6482
  .modal-header { padding: 10px 12px; min-height: 40px; }
@@ -6532,6 +6496,21 @@
6532
6496
  .file-search-box { padding: 4px; }
6533
6497
  .file-search-input { min-height: 32px; font-size: 14px; }
6534
6498
  .file-item { padding: 6px 8px; min-height: 32px; }
6499
+
6500
+ /* 欢迎页移动端 */
6501
+ .blank-chat { padding: 16px 12px; align-items: flex-start; }
6502
+ .blank-chat-inner { max-width: 100%; }
6503
+ .blank-chat-logo { width: 48px; height: 48px; font-size: 24px; border-radius: 12px; margin-bottom: 10px; }
6504
+ .blank-chat-title { font-size: 1.125rem; }
6505
+ .blank-chat-subtitle { font-size: 0.75rem; margin-bottom: 16px; }
6506
+ .blank-chat-input-wrap { margin-bottom: 12px; }
6507
+ .blank-chat-input { padding: 10px 60px 10px 12px; font-size: 16px; border-radius: 10px; }
6508
+ .blank-chat-send-btn { padding: 6px 12px; font-size: 0.75rem; right: 5px; }
6509
+ .blank-chat-tools { gap: 4px; margin-bottom: 8px; }
6510
+ .blank-chat-tool-btn { padding: 6px 10px; font-size: 0.75rem; min-height: 44px; }
6511
+ .blank-chat-hint { font-size: 0.6875rem; }
6512
+ .mode-btn-group { gap: 4px; margin-top: 8px; }
6513
+ .mode-btn { padding: 5px 10px; font-size: 0.6875rem; min-height: 36px; }
6535
6514
  }
6536
6515
 
6537
6516
  /* iPhone 14/15 等标准屏幕 (390px - 420px) - 使用基础移动端样式,略微调整 */
@@ -6539,69 +6518,24 @@
6539
6518
  /* 继承 max-width: 640px 的样式,此处仅做微调 */
6540
6519
 
6541
6520
  .terminal-container {
6542
- margin: 0;
6521
+ margin: 0 6px 6px;
6543
6522
  padding: 6px;
6544
6523
  }
6545
6524
 
6546
6525
  .input-panel {
6547
6526
  padding: 6px 10px;
6548
- padding-bottom: calc(8px + env(safe-area-inset-bottom, 0px));
6527
+ padding-bottom: calc(8px + var(--safe-bottom, 0px));
6549
6528
  }
6550
6529
  }
6551
6530
 
6552
6531
  /* iPhone SE 等小屏幕 (<= 390px) */
6553
6532
  @media (max-width: 390px) {
6554
6533
  /* 继承 max-width: 640px 的样式,此处仅做小屏微调 */
6555
- .main-content {
6556
- padding: 4px 4px 4px;
6557
- gap: 0;
6558
- }
6559
-
6560
- .main-content-header {
6561
- min-height: 36px;
6562
- padding: 5px 6px 6px;
6563
- gap: 6px;
6564
- }
6565
-
6566
- .main-content-header::before,
6567
- .main-content-header::after {
6568
- width: 12px;
6569
- height: 12px;
6570
- }
6571
-
6572
- .main-content-header::before {
6573
- box-shadow: 4px 4px 0 0 rgba(255, 252, 248, 0.94);
6574
- }
6575
-
6576
- .main-content-header::after {
6577
- box-shadow: -4px 4px 0 0 rgba(255, 252, 248, 0.94);
6578
- }
6579
-
6580
- .main-content-body::before {
6581
- left: 8px;
6582
- right: 8px;
6583
- height: 5px;
6584
- }
6585
-
6586
- .main-content-header-left,
6587
- .main-content-header-center,
6588
- .main-content-header-right {
6589
- gap: 4px;
6590
- }
6591
-
6592
- .main-header-btn,
6593
- .main-header-label,
6594
- .topbar-btn {
6595
- font-size: 0.625rem;
6596
- padding: 0 8px;
6597
- }
6598
-
6599
- .menu-toggle-btn {
6600
- min-width: 30px;
6601
- padding: 0 8px;
6534
+ .floating-sidebar-toggle {
6535
+ width: 26px;
6536
+ height: 26px;
6602
6537
  }
6603
-
6604
- .menu-toggle-btn .hamburger-icon { width: 11px; height: 8px; }
6538
+ .floating-sidebar-toggle .hamburger-icon { width: 11px; height: 8px; }
6605
6539
 
6606
6540
  .terminal-header { padding: 4px 6px; min-height: 28px; }
6607
6541
  .terminal-title-text { font-size: 0.6875rem; }
@@ -6617,7 +6551,7 @@
6617
6551
 
6618
6552
  .input-panel {
6619
6553
  padding: 5px 6px;
6620
- padding-bottom: calc(6px + env(safe-area-inset-bottom, 0px));
6554
+ padding-bottom: calc(6px + var(--safe-bottom, 0px));
6621
6555
  }
6622
6556
 
6623
6557
  .input-composer { border-radius: 8px; }
@@ -6667,8 +6601,6 @@
6667
6601
  .floating-sidebar-toggle {
6668
6602
  width: 28px;
6669
6603
  height: 28px;
6670
- top: 6px;
6671
- left: 6px;
6672
6604
  }
6673
6605
 
6674
6606
  .sidebar { top: 0; }
@@ -6685,7 +6617,7 @@
6685
6617
 
6686
6618
  .input-panel {
6687
6619
  padding: 8px;
6688
- padding-bottom: calc(8px + env(safe-area-inset-bottom, 0px));
6620
+ padding-bottom: calc(8px + var(--safe-bottom, 0px));
6689
6621
  }
6690
6622
 
6691
6623
  .input-row { flex-direction: row; gap: 8px; }
@@ -6698,76 +6630,6 @@
6698
6630
  }
6699
6631
 
6700
6632
  /* Blank chat mobile optimization */
6701
- @media (max-width: 640px) {
6702
- .blank-chat {
6703
- padding: 16px 12px;
6704
- align-items: flex-start;
6705
- }
6706
-
6707
- .blank-chat-inner {
6708
- max-width: 100%;
6709
- }
6710
-
6711
- .blank-chat-logo {
6712
- width: 48px;
6713
- height: 48px;
6714
- font-size: 24px;
6715
- border-radius: 12px;
6716
- margin-bottom: 10px;
6717
- }
6718
-
6719
- .blank-chat-title {
6720
- font-size: 1.125rem;
6721
- }
6722
-
6723
- .blank-chat-subtitle {
6724
- font-size: 0.75rem;
6725
- margin-bottom: 16px;
6726
- }
6727
-
6728
- .blank-chat-input-wrap {
6729
- margin-bottom: 12px;
6730
- }
6731
-
6732
- .blank-chat-input {
6733
- padding: 10px 60px 10px 12px;
6734
- font-size: 16px; /* Prevent iOS zoom */
6735
- border-radius: 10px;
6736
- }
6737
-
6738
- .blank-chat-send-btn {
6739
- padding: 6px 12px;
6740
- font-size: 0.75rem;
6741
- right: 5px;
6742
- }
6743
-
6744
- .blank-chat-tools {
6745
- gap: 4px;
6746
- margin-bottom: 8px;
6747
- }
6748
-
6749
- .blank-chat-tool-btn {
6750
- padding: 6px 10px;
6751
- font-size: 0.75rem;
6752
- min-height: 44px;
6753
- }
6754
-
6755
- .blank-chat-hint {
6756
- font-size: 0.6875rem;
6757
- }
6758
-
6759
- .mode-btn-group {
6760
- gap: 4px;
6761
- margin-top: 8px;
6762
- }
6763
-
6764
- .mode-btn {
6765
- padding: 5px 10px;
6766
- font-size: 0.6875rem;
6767
- min-height: 36px;
6768
- }
6769
- }
6770
-
6771
6633
  .session-kind-badge {
6772
6634
  display: inline-flex;
6773
6635
  align-items: center;
@@ -7109,13 +6971,13 @@
7109
6971
  left: 50%;
7110
6972
  transform: translateX(-50%);
7111
6973
  z-index: 10000;
7112
- min-width: 280px;
7113
- max-width: 380px;
6974
+ min-width: 220px;
6975
+ max-width: 320px;
7114
6976
  background: var(--bg-primary);
7115
6977
  border: 1px solid var(--border);
7116
- border-radius: var(--radius-lg);
6978
+ border-radius: var(--radius);
7117
6979
  box-shadow: var(--shadow-lg);
7118
- padding: 14px 16px;
6980
+ padding: 8px 12px;
7119
6981
  animation: notification-slide-in 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
7120
6982
  transition: top 0.25s ease, opacity 0.25s ease;
7121
6983
  }
@@ -7126,24 +6988,24 @@
7126
6988
  .notification-bubble-header {
7127
6989
  display: flex;
7128
6990
  align-items: center;
7129
- gap: 8px;
7130
- margin-bottom: 6px;
6991
+ gap: 6px;
6992
+ margin-bottom: 2px;
7131
6993
  }
7132
6994
  .notification-bubble-icon {
7133
- width: 20px;
7134
- height: 20px;
6995
+ width: 16px;
6996
+ height: 16px;
7135
6997
  flex-shrink: 0;
7136
6998
  display: flex;
7137
6999
  align-items: center;
7138
7000
  justify-content: center;
7139
7001
  border-radius: var(--radius-sm);
7140
- font-size: 12px;
7002
+ font-size: 10px;
7141
7003
  }
7142
7004
  .notification-bubble-icon.info { background: var(--accent); color: white; }
7143
7005
  .notification-bubble-icon.warning { background: var(--warning); color: white; }
7144
7006
  .notification-bubble-icon.success { background: var(--success); color: white; }
7145
7007
  .notification-bubble-title {
7146
- font-size: 0.875rem;
7008
+ font-size: 0.75rem;
7147
7009
  font-weight: 600;
7148
7010
  color: var(--fg-primary);
7149
7011
  flex: 1;
@@ -7154,9 +7016,9 @@
7154
7016
  border: none;
7155
7017
  color: var(--fg-muted);
7156
7018
  cursor: pointer;
7157
- font-size: 16px;
7019
+ font-size: 14px;
7158
7020
  line-height: 1;
7159
- padding: 2px 4px;
7021
+ padding: 1px 3px;
7160
7022
  border-radius: var(--radius-sm);
7161
7023
  flex-shrink: 0;
7162
7024
  }
@@ -7165,20 +7027,20 @@
7165
7027
  color: var(--fg-primary);
7166
7028
  }
7167
7029
  .notification-bubble-body {
7168
- font-size: 0.8125rem;
7030
+ font-size: 0.7rem;
7169
7031
  color: var(--fg-secondary);
7170
- line-height: 1.45;
7032
+ line-height: 1.4;
7171
7033
  margin-bottom: 0;
7172
7034
  }
7173
7035
  .notification-bubble-actions {
7174
- margin-top: 10px;
7036
+ margin-top: 6px;
7175
7037
  display: flex;
7176
- gap: 8px;
7038
+ gap: 6px;
7177
7039
  justify-content: flex-end;
7178
7040
  }
7179
7041
  .notification-bubble-actions button {
7180
- font-size: 0.8125rem;
7181
- padding: 4px 12px;
7042
+ font-size: 0.7rem;
7043
+ padding: 2px 10px;
7182
7044
  border-radius: var(--radius-sm);
7183
7045
  cursor: pointer;
7184
7046
  border: 1px solid var(--border);
@@ -7206,6 +7068,73 @@
7206
7068
  to { opacity: 0; transform: translateX(-50%) translateY(-20px); }
7207
7069
  }
7208
7070
 
7071
+ /* Notification bubble button states */
7072
+ .notification-bubble-actions button:disabled {
7073
+ opacity: 0.6;
7074
+ cursor: not-allowed;
7075
+ filter: none;
7076
+ }
7077
+ .notification-bubble-actions button.success {
7078
+ background: var(--success);
7079
+ color: white;
7080
+ border-color: var(--success);
7081
+ }
7082
+ .notification-bubble-actions button.success:hover:not(:disabled) {
7083
+ filter: brightness(1.1);
7084
+ }
7085
+
7086
+ /* Settings restart button */
7087
+ .btn-success {
7088
+ background: var(--success);
7089
+ color: white;
7090
+ border-color: var(--success);
7091
+ }
7092
+ .btn-success:hover:not(:disabled) {
7093
+ filter: brightness(1.1);
7094
+ }
7095
+
7096
+ /* Restart overlay */
7097
+ .restart-overlay {
7098
+ position: fixed;
7099
+ inset: 0;
7100
+ z-index: 99999;
7101
+ background: rgba(0, 0, 0, 0.65);
7102
+ display: flex;
7103
+ align-items: center;
7104
+ justify-content: center;
7105
+ backdrop-filter: blur(4px);
7106
+ animation: restart-fade-in 0.3s ease;
7107
+ }
7108
+ .restart-overlay-content {
7109
+ text-align: center;
7110
+ color: white;
7111
+ }
7112
+ .restart-title {
7113
+ font-size: 1.25rem;
7114
+ font-weight: 600;
7115
+ margin-bottom: 8px;
7116
+ }
7117
+ .restart-subtitle {
7118
+ font-size: 0.9rem;
7119
+ opacity: 0.8;
7120
+ }
7121
+ .restart-spinner {
7122
+ width: 36px;
7123
+ height: 36px;
7124
+ margin: 0 auto 16px;
7125
+ border: 3px solid rgba(255, 255, 255, 0.25);
7126
+ border-top-color: white;
7127
+ border-radius: 50%;
7128
+ animation: restart-spin 0.8s linear infinite;
7129
+ }
7130
+ @keyframes restart-spin {
7131
+ to { transform: rotate(360deg); }
7132
+ }
7133
+ @keyframes restart-fade-in {
7134
+ from { opacity: 0; }
7135
+ to { opacity: 1; }
7136
+ }
7137
+
7209
7138
  /* File Preview Modal */
7210
7139
  .file-preview-overlay {
7211
7140
  position: fixed;
@@ -7226,160 +7155,41 @@
7226
7155
  /* ── Settings modal ── */
7227
7156
 
7228
7157
  .settings-modal {
7229
- max-width: 860px;
7230
- max-height: 82vh;
7158
+ max-width: 520px;
7159
+ max-height: 80vh;
7231
7160
  }
7232
7161
 
7233
- .settings-layout {
7234
- display: grid;
7235
- grid-template-columns: 180px minmax(0, 1fr);
7236
- gap: 18px;
7237
- min-height: 0;
7238
- }
7239
-
7240
- .settings-nav {
7162
+ .settings-tabs {
7241
7163
  display: flex;
7242
- flex-direction: column;
7243
- gap: 8px;
7244
- padding-right: 8px;
7245
- border-right: 1px solid var(--border-subtle);
7246
- }
7247
-
7248
- .settings-content {
7249
- min-width: 0;
7250
- overflow-y: auto;
7251
- padding-right: 4px;
7164
+ gap: 2px;
7165
+ border-bottom: 1px solid var(--border-subtle);
7166
+ margin-bottom: 16px;
7167
+ padding-bottom: 0;
7252
7168
  }
7253
7169
 
7254
7170
  .settings-tab {
7255
- padding: 10px 12px;
7256
- font-size: 0.84rem;
7257
- font-weight: 600;
7171
+ padding: 8px 14px;
7172
+ font-size: 0.8125rem;
7173
+ font-weight: 500;
7258
7174
  color: var(--text-secondary);
7259
- background: transparent;
7260
- border: 1px solid transparent;
7261
- border-radius: 12px;
7175
+ background: none;
7176
+ border: none;
7177
+ border-bottom: 2px solid transparent;
7178
+ border-radius: var(--radius-sm) var(--radius-sm) 0 0;
7262
7179
  cursor: pointer;
7263
- transition: color 0.15s, border-color 0.15s, background 0.15s, transform 0.15s;
7180
+ transition: color 0.15s, border-color 0.15s, background 0.15s;
7264
7181
  white-space: nowrap;
7265
- text-align: left;
7266
7182
  }
7267
7183
 
7268
7184
  .settings-tab:hover {
7269
7185
  color: var(--text-primary);
7270
7186
  background: rgba(197, 101, 61, 0.06);
7271
- border-color: rgba(197, 101, 61, 0.12);
7272
- transform: translateX(1px);
7273
7187
  }
7274
7188
 
7275
7189
  .settings-tab.active {
7276
7190
  color: var(--accent);
7277
- border-color: rgba(197, 101, 61, 0.18);
7278
- background: linear-gradient(180deg, rgba(197, 101, 61, 0.12), rgba(197, 101, 61, 0.06));
7279
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.35);
7280
- }
7281
-
7282
- .settings-card-header {
7283
- display: flex;
7284
- justify-content: space-between;
7285
- align-items: flex-start;
7286
- gap: 12px;
7287
- margin-bottom: 12px;
7288
- }
7289
-
7290
- .settings-card-accent {
7291
- border: 1px solid rgba(197, 101, 61, 0.12);
7292
- box-shadow: 0 10px 24px rgba(89, 58, 32, 0.04);
7293
- }
7294
-
7295
- .settings-toggle-list {
7296
- display: flex;
7297
- flex-direction: column;
7298
- gap: 10px;
7299
- }
7300
-
7301
- .settings-toggle-item {
7302
- display: flex;
7303
- justify-content: space-between;
7304
- align-items: center;
7305
- gap: 16px;
7306
- padding: 12px 14px;
7307
- border-radius: 12px;
7308
- background: rgba(255, 255, 255, 0.72);
7309
- border: 1px solid rgba(140, 110, 85, 0.08);
7310
- cursor: pointer;
7311
- }
7312
-
7313
- .settings-toggle-title {
7314
- display: block;
7315
- font-size: 0.84rem;
7316
- font-weight: 600;
7317
- color: var(--text-primary);
7318
- margin-bottom: 4px;
7319
- }
7320
-
7321
- .settings-toggle-desc {
7322
- display: block;
7323
- font-size: 0.78rem;
7324
- color: var(--text-secondary);
7325
- line-height: 1.45;
7326
- }
7327
-
7328
- .settings-inline-hint {
7329
- margin-top: -4px;
7330
- }
7331
-
7332
- .settings-tab.active + .settings-tab {
7333
- margin-top: 0;
7334
- }
7335
-
7336
- .settings-tabs {
7337
- display: none;
7338
- }
7339
-
7340
- .settings-panel {
7341
- display: none;
7342
- }
7343
-
7344
- .settings-panel.active {
7345
- display: block;
7346
- }
7347
-
7348
- @media (max-width: 840px) {
7349
- .settings-layout {
7350
- grid-template-columns: 1fr;
7351
- }
7352
-
7353
- .settings-nav {
7354
- flex-direction: row;
7355
- overflow-x: auto;
7356
- padding-right: 0;
7357
- padding-bottom: 10px;
7358
- border-right: none;
7359
- border-bottom: 1px solid var(--border-subtle);
7360
- }
7361
-
7362
- .settings-tab {
7363
- flex: 0 0 auto;
7364
- }
7365
- }
7366
-
7367
- @media (max-width: 640px) {
7368
- .settings-modal {
7369
- max-width: min(96vw, 680px);
7370
- }
7371
-
7372
- .settings-toggle-item {
7373
- align-items: flex-start;
7374
- }
7375
- }
7376
-
7377
- .settings-panel {
7378
- display: none;
7379
- }
7380
-
7381
- .settings-panel.active {
7382
- display: block;
7191
+ border-bottom-color: var(--accent);
7192
+ background: var(--accent-muted);
7383
7193
  }
7384
7194
 
7385
7195
  .settings-panel {
@@ -8701,9 +8511,9 @@
8701
8511
  line-height: inherit !important;
8702
8512
  }
8703
8513
 
8704
- /* 统一 header 中的跳转按钮沿用显隐动画 */
8514
+ /* 确保按钮在 DOM 视图之上 */
8705
8515
  .terminal-jump-bottom {
8706
- z-index: auto;
8516
+ z-index: 20;
8707
8517
  }
8708
8518
 
8709
8519
  /* ── 结构化会话状态条 ── */