@co0ontty/wand 1.7.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);
@@ -1086,19 +1114,512 @@
1086
1114
  color: var(--accent);
1087
1115
  }
1088
1116
 
1089
- .session-action-btn:active {
1090
- transform: scale(0.9);
1091
- transition-duration: 0.1s;
1117
+ .session-action-btn:active {
1118
+ transform: scale(0.9);
1119
+ transition-duration: 0.1s;
1120
+ }
1121
+
1122
+ .session-action-btn svg {
1123
+ flex-shrink: 0;
1124
+ }
1125
+
1126
+ /* Delete icon button in actions */
1127
+ .session-action-btn.delete-btn:hover {
1128
+ background: rgba(231, 76, 60, 0.08);
1129
+ color: #d35244;
1130
+ }
1131
+
1132
+ .session-action-btn.merge-btn:hover {
1133
+ background: rgba(47, 128, 237, 0.1);
1134
+ color: #2f80ed;
1135
+ }
1136
+
1137
+ .session-kind-badge.worktree-merge {
1138
+ background: rgba(47, 128, 237, 0.12);
1139
+ color: #2f80ed;
1140
+ }
1141
+
1142
+ .session-kind-badge.worktree-merge.failed {
1143
+ background: rgba(231, 76, 60, 0.12);
1144
+ color: #d35244;
1145
+ }
1146
+
1147
+ .session-kind-badge.worktree-merge.merged {
1148
+ background: rgba(39, 174, 96, 0.12);
1149
+ color: #219653;
1150
+ }
1151
+
1152
+ .session-kind-badge.worktree-merge.merging,
1153
+ .session-kind-badge.worktree-merge.checking {
1154
+ background: rgba(242, 153, 74, 0.12);
1155
+ color: #c17c2b;
1156
+ }
1157
+
1158
+ .worktree-merge-content {
1159
+ display: flex;
1160
+ flex-direction: column;
1161
+ gap: 10px;
1162
+ }
1163
+
1164
+ .worktree-merge-row {
1165
+ display: flex;
1166
+ justify-content: space-between;
1167
+ gap: 16px;
1168
+ padding: 10px 12px;
1169
+ border: 1px solid var(--border-subtle);
1170
+ border-radius: 12px;
1171
+ background: rgba(255, 255, 255, 0.5);
1172
+ font-size: 0.875rem;
1173
+ }
1174
+
1175
+ .worktree-merge-row span {
1176
+ color: var(--text-secondary);
1177
+ }
1178
+
1179
+ .worktree-merge-row strong {
1180
+ color: var(--text-primary);
1181
+ word-break: break-all;
1182
+ text-align: right;
1183
+ }
1184
+
1185
+ .worktree-merge-actions {
1186
+ display: flex;
1187
+ justify-content: flex-end;
1188
+ gap: 10px;
1189
+ margin-top: 16px;
1190
+ }
1191
+
1192
+ .worktree-merge-modal {
1193
+ max-width: 620px;
1194
+ }
1195
+
1196
+ .modal-subtitle {
1197
+ margin-top: 4px;
1198
+ font-size: 0.8125rem;
1199
+ color: var(--text-muted);
1200
+ }
1201
+
1202
+ .session-action-btn[disabled] {
1203
+ opacity: 0.45;
1204
+ cursor: not-allowed;
1205
+ }
1206
+
1207
+ .session-action-btn[disabled]:hover {
1208
+ background: transparent;
1209
+ color: var(--text-muted);
1210
+ }
1211
+
1212
+ .worktree-merge-actions .btn[disabled] {
1213
+ opacity: 0.5;
1214
+ cursor: not-allowed;
1215
+ }
1216
+
1217
+ .worktree-merge-actions .btn[disabled]:hover {
1218
+ transform: none;
1219
+ }
1220
+
1221
+ .worktree-merge-actions .btn[disabled]:active {
1222
+ transform: none;
1223
+ }
1224
+
1225
+ .worktree-merge-actions .btn {
1226
+ min-width: 120px;
1227
+ }
1228
+
1229
+ .worktree-merge-modal .modal-body {
1230
+ min-height: 260px;
1231
+ }
1232
+
1233
+ .worktree-merge-modal .error-message {
1234
+ margin-top: 12px;
1235
+ }
1236
+
1237
+ .worktree-merge-content .field-hint {
1238
+ margin-top: 0;
1239
+ }
1240
+
1241
+ .worktree-merge-row + .field-hint {
1242
+ margin-top: 2px;
1243
+ }
1244
+
1245
+ .worktree-merge-content .field-hint + .field-hint {
1246
+ margin-top: 4px;
1247
+ }
1248
+
1249
+ .worktree-merge-modal .modal-subtitle {
1250
+ max-width: 420px;
1251
+ }
1252
+
1253
+ .worktree-merge-modal strong {
1254
+ font-weight: 600;
1255
+ }
1256
+
1257
+ .worktree-merge-modal .modal-header {
1258
+ align-items: flex-start;
1259
+ }
1260
+
1261
+ .worktree-merge-content p {
1262
+ margin: 0;
1263
+ }
1264
+
1265
+ .worktree-merge-content .field-hint strong {
1266
+ color: var(--text-primary);
1267
+ }
1268
+
1269
+ .worktree-merge-row strong:empty::after {
1270
+ content: "-";
1271
+ color: var(--text-muted);
1272
+ }
1273
+
1274
+ .worktree-merge-content .field-hint code {
1275
+ font-family: inherit;
1276
+ }
1277
+
1278
+ .worktree-merge-actions .btn-secondary {
1279
+ background: transparent;
1280
+ }
1281
+
1282
+ .worktree-merge-actions .btn-secondary:hover {
1283
+ background: rgba(0, 0, 0, 0.04);
1284
+ }
1285
+
1286
+ .worktree-merge-actions .btn-secondary:active {
1287
+ background: rgba(0, 0, 0, 0.07);
1288
+ }
1289
+
1290
+ .worktree-merge-content .field-hint:last-child {
1291
+ margin-bottom: 0;
1292
+ }
1293
+
1294
+ .worktree-merge-row:first-child {
1295
+ margin-top: 2px;
1296
+ }
1297
+
1298
+ .worktree-merge-row:last-child {
1299
+ margin-bottom: 0;
1300
+ }
1301
+
1302
+ .worktree-merge-content .field-hint.muted {
1303
+ color: var(--text-muted);
1304
+ }
1305
+
1306
+ .worktree-merge-content .field-hint.error {
1307
+ color: #d35244;
1308
+ }
1309
+
1310
+ .worktree-merge-content .field-hint.success {
1311
+ color: #219653;
1312
+ }
1313
+
1314
+ .worktree-merge-content .field-hint.warning {
1315
+ color: #c17c2b;
1316
+ }
1317
+
1318
+ .worktree-merge-content .field-hint.info {
1319
+ color: var(--text-secondary);
1320
+ }
1321
+
1322
+ .worktree-merge-content .field-hint + .worktree-merge-row {
1323
+ margin-top: 2px;
1324
+ }
1325
+
1326
+ .worktree-merge-content .worktree-merge-row + .worktree-merge-row {
1327
+ margin-top: 0;
1328
+ }
1329
+
1330
+ .worktree-merge-content .worktree-merge-row strong small {
1331
+ color: var(--text-muted);
1332
+ }
1333
+
1334
+ .worktree-merge-content .worktree-merge-row strong code {
1335
+ font-family: inherit;
1336
+ }
1337
+
1338
+ .worktree-merge-content .worktree-merge-row span code {
1339
+ font-family: inherit;
1340
+ }
1341
+
1342
+ .worktree-merge-content .worktree-merge-row code {
1343
+ background: transparent;
1344
+ padding: 0;
1345
+ }
1346
+
1347
+ .worktree-merge-content .worktree-merge-row em {
1348
+ font-style: normal;
1349
+ color: var(--text-muted);
1350
+ }
1351
+
1352
+ .worktree-merge-content .worktree-merge-row small {
1353
+ color: var(--text-muted);
1354
+ }
1355
+
1356
+ .worktree-merge-content .worktree-merge-row .muted {
1357
+ color: var(--text-muted);
1358
+ }
1359
+
1360
+ .worktree-merge-content .worktree-merge-row .warning {
1361
+ color: #c17c2b;
1362
+ }
1363
+
1364
+ .worktree-merge-content .worktree-merge-row .success {
1365
+ color: #219653;
1366
+ }
1367
+
1368
+ .worktree-merge-content .worktree-merge-row .error {
1369
+ color: #d35244;
1370
+ }
1371
+
1372
+ .worktree-merge-content .worktree-merge-row .info {
1373
+ color: var(--text-secondary);
1374
+ }
1375
+
1376
+ .worktree-merge-content .worktree-merge-row .nowrap {
1377
+ white-space: nowrap;
1378
+ }
1379
+
1380
+ .worktree-merge-content .worktree-merge-row .break-all {
1381
+ word-break: break-all;
1382
+ }
1383
+
1384
+ .worktree-merge-content .worktree-merge-row .text-right {
1385
+ text-align: right;
1386
+ }
1387
+
1388
+ .worktree-merge-content .worktree-merge-row .text-left {
1389
+ text-align: left;
1390
+ }
1391
+
1392
+ .worktree-merge-content .worktree-merge-row .font-normal {
1393
+ font-weight: 400;
1394
+ }
1395
+
1396
+ .worktree-merge-content .worktree-merge-row .font-semibold {
1397
+ font-weight: 600;
1398
+ }
1399
+
1400
+ .worktree-merge-content .worktree-merge-row .font-bold {
1401
+ font-weight: 700;
1402
+ }
1403
+
1404
+ .worktree-merge-content .worktree-merge-row .opacity-70 {
1405
+ opacity: 0.7;
1406
+ }
1407
+
1408
+ .worktree-merge-content .worktree-merge-row .opacity-50 {
1409
+ opacity: 0.5;
1410
+ }
1411
+
1412
+ .worktree-merge-content .worktree-merge-row .opacity-40 {
1413
+ opacity: 0.4;
1414
+ }
1415
+
1416
+ .worktree-merge-content .worktree-merge-row .truncate {
1417
+ overflow: hidden;
1418
+ text-overflow: ellipsis;
1419
+ }
1420
+
1421
+ .worktree-merge-content .worktree-merge-row .monospace {
1422
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1423
+ }
1424
+
1425
+ .worktree-merge-content .worktree-merge-row .tiny {
1426
+ font-size: 0.75rem;
1427
+ }
1428
+
1429
+ .worktree-merge-content .worktree-merge-row .small {
1430
+ font-size: 0.8125rem;
1431
+ }
1432
+
1433
+ .worktree-merge-content .worktree-merge-row .normal {
1434
+ font-size: 0.875rem;
1435
+ }
1436
+
1437
+ .worktree-merge-content .worktree-merge-row .large {
1438
+ font-size: 0.9375rem;
1439
+ }
1440
+
1441
+ .worktree-merge-content .worktree-merge-row .xlarge {
1442
+ font-size: 1rem;
1443
+ }
1444
+
1445
+ .worktree-merge-content .worktree-merge-row .caps {
1446
+ text-transform: uppercase;
1447
+ }
1448
+
1449
+ .worktree-merge-content .worktree-merge-row .lowercase {
1450
+ text-transform: lowercase;
1451
+ }
1452
+
1453
+ .worktree-merge-content .worktree-merge-row .capitalize {
1454
+ text-transform: capitalize;
1455
+ }
1456
+
1457
+ .worktree-merge-content .worktree-merge-row .letter-tight {
1458
+ letter-spacing: -0.01em;
1459
+ }
1460
+
1461
+ .worktree-merge-content .worktree-merge-row .letter-normal {
1462
+ letter-spacing: 0;
1463
+ }
1464
+
1465
+ .worktree-merge-content .worktree-merge-row .letter-wide {
1466
+ letter-spacing: 0.02em;
1467
+ }
1468
+
1469
+ .worktree-merge-content .worktree-merge-row .line-tight {
1470
+ line-height: 1.3;
1471
+ }
1472
+
1473
+ .worktree-merge-content .worktree-merge-row .line-normal {
1474
+ line-height: 1.5;
1475
+ }
1476
+
1477
+ .worktree-merge-content .worktree-merge-row .line-loose {
1478
+ line-height: 1.7;
1479
+ }
1480
+
1481
+ .worktree-merge-content .worktree-merge-row .block {
1482
+ display: block;
1483
+ }
1484
+
1485
+ .worktree-merge-content .worktree-merge-row .inline {
1486
+ display: inline;
1487
+ }
1488
+
1489
+ .worktree-merge-content .worktree-merge-row .inline-block {
1490
+ display: inline-block;
1491
+ }
1492
+
1493
+ .worktree-merge-content .worktree-merge-row .flex {
1494
+ display: flex;
1495
+ }
1496
+
1497
+ .worktree-merge-content .worktree-merge-row .grid {
1498
+ display: grid;
1499
+ }
1500
+
1501
+ .worktree-merge-content .worktree-merge-row .gap-sm {
1502
+ gap: 6px;
1503
+ }
1504
+
1505
+ .worktree-merge-content .worktree-merge-row .gap-md {
1506
+ gap: 10px;
1507
+ }
1508
+
1509
+ .worktree-merge-content .worktree-merge-row .gap-lg {
1510
+ gap: 16px;
1511
+ }
1512
+
1513
+ .worktree-merge-content .worktree-merge-row .items-center {
1514
+ align-items: center;
1515
+ }
1516
+
1517
+ .worktree-merge-content .worktree-merge-row .items-start {
1518
+ align-items: flex-start;
1519
+ }
1520
+
1521
+ .worktree-merge-content .worktree-merge-row .items-end {
1522
+ align-items: flex-end;
1523
+ }
1524
+
1525
+ .worktree-merge-content .worktree-merge-row .justify-between {
1526
+ justify-content: space-between;
1527
+ }
1528
+
1529
+ .worktree-merge-content .worktree-merge-row .justify-end {
1530
+ justify-content: flex-end;
1531
+ }
1532
+
1533
+ .worktree-merge-content .worktree-merge-row .justify-start {
1534
+ justify-content: flex-start;
1535
+ }
1536
+
1537
+ .worktree-merge-content .worktree-merge-row .flex-1 {
1538
+ flex: 1 1 auto;
1539
+ }
1540
+
1541
+ .worktree-merge-content .worktree-merge-row .shrink-0 {
1542
+ flex-shrink: 0;
1543
+ }
1544
+
1545
+ .worktree-merge-content .worktree-merge-row .grow-0 {
1546
+ flex-grow: 0;
1547
+ }
1548
+
1549
+ .worktree-merge-content .worktree-merge-row .grow-1 {
1550
+ flex-grow: 1;
1551
+ }
1552
+
1553
+ .worktree-merge-content .worktree-merge-row .min-w-0 {
1554
+ min-width: 0;
1555
+ }
1556
+
1557
+ .worktree-merge-content .worktree-merge-row .w-full {
1558
+ width: 100%;
1559
+ }
1560
+
1561
+ .worktree-merge-content .worktree-merge-row .rounded {
1562
+ border-radius: 8px;
1563
+ }
1564
+
1565
+ .worktree-merge-content .worktree-merge-row .rounded-lg {
1566
+ border-radius: 12px;
1567
+ }
1568
+
1569
+ .worktree-merge-content .worktree-merge-row .rounded-full {
1570
+ border-radius: 999px;
1571
+ }
1572
+
1573
+ .worktree-merge-content .worktree-merge-row .bg-subtle {
1574
+ background: rgba(0, 0, 0, 0.03);
1575
+ }
1576
+
1577
+ .worktree-merge-content .worktree-merge-row .border-subtle {
1578
+ border: 1px solid var(--border-subtle);
1579
+ }
1580
+
1581
+ .worktree-merge-content .worktree-merge-row .px-sm {
1582
+ padding-left: 6px;
1583
+ padding-right: 6px;
1584
+ }
1585
+
1586
+ .worktree-merge-content .worktree-merge-row .px-md {
1587
+ padding-left: 10px;
1588
+ padding-right: 10px;
1589
+ }
1590
+
1591
+ .worktree-merge-content .worktree-merge-row .py-sm {
1592
+ padding-top: 4px;
1593
+ padding-bottom: 4px;
1594
+ }
1595
+
1596
+ .worktree-merge-content .worktree-merge-row .py-md {
1597
+ padding-top: 8px;
1598
+ padding-bottom: 8px;
1599
+ }
1600
+
1601
+ .worktree-merge-content .worktree-merge-row .mt-sm {
1602
+ margin-top: 4px;
1603
+ }
1604
+
1605
+ .worktree-merge-content .worktree-merge-row .mt-md {
1606
+ margin-top: 8px;
1607
+ }
1608
+
1609
+ .worktree-merge-content .worktree-merge-row .mt-lg {
1610
+ margin-top: 12px;
1611
+ }
1612
+
1613
+ .worktree-merge-content .worktree-merge-row .mb-sm {
1614
+ margin-bottom: 4px;
1092
1615
  }
1093
1616
 
1094
- .session-action-btn svg {
1095
- flex-shrink: 0;
1617
+ .worktree-merge-content .worktree-merge-row .mb-md {
1618
+ margin-bottom: 8px;
1096
1619
  }
1097
1620
 
1098
- /* Delete icon button in actions */
1099
- .session-action-btn.delete-btn:hover {
1100
- background: rgba(231, 76, 60, 0.08);
1101
- color: #d35244;
1621
+ .worktree-merge-content .worktree-merge-row .mb-lg {
1622
+ margin-bottom: 12px;
1102
1623
  }
1103
1624
 
1104
1625
  /* PC: hover to show action buttons */
@@ -1302,6 +1823,12 @@
1302
1823
  .topbar-btn:active {
1303
1824
  transform: scale(0.95);
1304
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
+ }
1305
1832
 
1306
1833
  /* Square icon variant — exactly 32×32px */
1307
1834
  .topbar-btn.square {
@@ -1514,7 +2041,18 @@
1514
2041
 
1515
2042
  .terminal-info { font-size: 0.625rem; color: var(--text-muted); font-weight: 500; }
1516
2043
 
1517
- /* Current task indicator in terminal header */
2044
+ /* ===== 主内容区顶部行 ===== */
2045
+ .main-header-row {
2046
+ display: flex;
2047
+ align-items: center;
2048
+ justify-content: flex-start;
2049
+ padding: 4px 10px;
2050
+ flex-shrink: 0;
2051
+ min-height: 0;
2052
+ gap: 8px;
2053
+ }
2054
+
2055
+ /* Current task indicator */
1518
2056
  .current-task {
1519
2057
  display: flex;
1520
2058
  align-items: center;
@@ -1527,7 +2065,9 @@
1527
2065
  padding: 2px 8px 2px 5px;
1528
2066
  font-weight: 500;
1529
2067
  max-width: 280px;
2068
+ min-width: 0;
1530
2069
  overflow: hidden;
2070
+ flex-shrink: 1;
1531
2071
  text-overflow: ellipsis;
1532
2072
  white-space: nowrap;
1533
2073
  }
@@ -1744,6 +2284,25 @@
1744
2284
  50% { opacity: 1; }
1745
2285
  }
1746
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
+
1747
2306
  /* Chat View — matches topbar-btn height (32px) */
1748
2307
  .view-toggle {
1749
2308
  display: flex;
@@ -1862,22 +2421,22 @@
1862
2421
  min-width: 78px;
1863
2422
  height: 32px;
1864
2423
  padding: 0 12px;
1865
- border: 1px solid rgba(255, 255, 255, 0.1);
2424
+ border: 1px solid rgba(255, 255, 255, 0.15);
1866
2425
  border-radius: 999px;
1867
2426
  background: rgba(24, 20, 17, 0.72);
1868
2427
  color: rgba(255, 247, 239, 0.92);
1869
- box-shadow: 0 10px 24px rgba(0, 0, 0, 0.28);
2428
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.18);
1870
2429
  backdrop-filter: blur(10px);
1871
2430
  cursor: pointer;
1872
2431
  z-index: 13;
1873
2432
  opacity: 0;
1874
- transform: translateY(8px);
2433
+ transform: translateY(12px) scale(0.92);
1875
2434
  pointer-events: none;
1876
- transition: opacity 0.18s ease, transform 0.18s ease, background 0.18s ease, border-color 0.18s ease;
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;
1877
2436
  }
1878
2437
  .terminal-jump-bottom.visible {
1879
2438
  opacity: 1;
1880
- transform: translateY(0);
2439
+ transform: translateY(0) scale(1);
1881
2440
  pointer-events: auto;
1882
2441
  }
1883
2442
  .terminal-jump-bottom:hover {
@@ -1885,7 +2444,7 @@
1885
2444
  border-color: rgba(214, 123, 82, 0.28);
1886
2445
  }
1887
2446
  .terminal-jump-bottom:active {
1888
- transform: translateY(1px);
2447
+ transform: translateY(1px) scale(0.97);
1889
2448
  }
1890
2449
 
1891
2450
  /* Terminal interactive mode indicator */
@@ -2232,19 +2791,19 @@
2232
2791
  border-radius: 999px;
2233
2792
  background: rgba(255, 250, 242, 0.9);
2234
2793
  color: var(--text-primary);
2235
- box-shadow: 0 10px 24px rgba(89, 58, 32, 0.16);
2794
+ box-shadow: 0 4px 12px rgba(89, 58, 32, 0.10);
2236
2795
  backdrop-filter: blur(10px);
2237
2796
  cursor: pointer;
2238
2797
  z-index: 13;
2239
2798
  opacity: 0;
2240
- transform: translateY(8px);
2799
+ transform: translateY(12px) scale(0.92);
2241
2800
  pointer-events: none;
2242
- transition: opacity 0.18s ease, transform 0.18s ease, background 0.18s ease, border-color 0.18s ease;
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;
2243
2802
  }
2244
2803
 
2245
2804
  .chat-jump-bottom.visible {
2246
2805
  opacity: 1;
2247
- transform: translateY(0);
2806
+ transform: translateY(0) scale(1);
2248
2807
  pointer-events: auto;
2249
2808
  }
2250
2809
 
@@ -2259,6 +2818,23 @@
2259
2818
 
2260
2819
  .chat-container.active { display: flex; }
2261
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
+ }
2837
+
2262
2838
  /* ===== 聊天消息列表 ===== */
2263
2839
  .chat-messages {
2264
2840
  flex: 1;
@@ -2882,8 +3458,8 @@
2882
3458
  }
2883
3459
  .ask-user-option {
2884
3460
  display: flex;
2885
- align-items: flex-start;
2886
- gap: 8px;
3461
+ align-items: center;
3462
+ gap: 10px;
2887
3463
  padding: 8px 12px;
2888
3464
  border: 1px solid var(--border-default);
2889
3465
  border-radius: var(--radius-sm);
@@ -2892,15 +3468,119 @@
2892
3468
  transition: all var(--transition-fast);
2893
3469
  text-align: left;
2894
3470
  }
2895
- .ask-user-option:hover {
3471
+ .ask-user-option:hover:not(:disabled) {
2896
3472
  border-color: var(--accent);
2897
3473
  background: rgba(197, 101, 61, 0.06);
2898
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
+ }
2899
3525
  .ask-user-option-label {
2900
3526
  font-size: 0.8125rem;
2901
3527
  font-weight: 500;
2902
3528
  color: var(--text-primary);
2903
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
+ }
2904
3584
  .ask-user-answer-sent {
2905
3585
  padding: 8px 12px;
2906
3586
  background: rgba(79, 122, 88, 0.08);
@@ -3595,10 +4275,12 @@
3595
4275
 
3596
4276
  .input-panel {
3597
4277
  padding: 6px 10px;
4278
+ padding-bottom: calc(6px + var(--safe-bottom, 0px));
3598
4279
  flex-shrink: 0;
3599
4280
  z-index: 26;
3600
4281
  overscroll-behavior: contain;
3601
4282
  touch-action: pan-y;
4283
+ border-top: 1px solid var(--border-subtle);
3602
4284
  }
3603
4285
 
3604
4286
  .input-composer {
@@ -5274,6 +5956,16 @@
5274
5956
  :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
5275
5957
  button:focus-visible { outline-offset: 0; }
5276
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
+
5277
5969
  /* 平板适配 */
5278
5970
  @media (max-width: 768px) {
5279
5971
  .app-container {
@@ -5339,8 +6031,6 @@
5339
6031
  .floating-sidebar-toggle {
5340
6032
  width: 30px;
5341
6033
  height: 30px;
5342
- top: max(8px, env(safe-area-inset-top, 8px));
5343
- left: 8px;
5344
6034
  border-radius: 6px;
5345
6035
  }
5346
6036
  .floating-sidebar-toggle .hamburger-icon { width: 13px; height: 9px; }
@@ -5364,6 +6054,8 @@
5364
6054
  .terminal-info { font-size: 0.5625rem; }
5365
6055
  .current-task { font-size: 0.5625rem; padding: 1px 6px 1px 4px; gap: 3px; }
5366
6056
 
6057
+ .main-header-row { padding: 2px 6px; gap: 4px; }
6058
+
5367
6059
  /* 视图切换按钮 - 紧凑 */
5368
6060
  .view-toggle { height: 28px; padding: 2px; gap: 1px; }
5369
6061
  .view-toggle-btn { height: 24px; min-height: 24px; padding: 0 6px; font-size: 0.625rem; gap: 2px; border-radius: 4px; }
@@ -5461,10 +6153,10 @@
5461
6153
  .input-panel {
5462
6154
  z-index: 30;
5463
6155
  padding: 4px 6px;
5464
- 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));
5465
6157
  flex: 0 0 auto;
5466
6158
  margin-top: auto;
5467
- 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%);
5468
6160
  backdrop-filter: blur(12px);
5469
6161
  }
5470
6162
 
@@ -5473,8 +6165,7 @@
5473
6165
  }
5474
6166
 
5475
6167
  .input-session-info-bar {
5476
- padding: 2px 6px;
5477
- padding-bottom: calc(3px + env(safe-area-inset-bottom, 0px));
6168
+ padding: 2px 6px 3px;
5478
6169
  font-size: 0.625rem;
5479
6170
  }
5480
6171
 
@@ -5622,6 +6313,17 @@
5622
6313
  min-width: 20px;
5623
6314
  }
5624
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
+
5625
6327
  /* 小键盘 FAB */
5626
6328
  .mini-keyboard-fab {
5627
6329
  width: 40px;
@@ -5749,7 +6451,7 @@
5749
6451
  .login-container {
5750
6452
  min-height: 100dvh;
5751
6453
  align-items: flex-start;
5752
- padding: 8px 8px calc(8px + env(safe-area-inset-bottom, 0px));
6454
+ padding: 8px 8px calc(8px + var(--safe-bottom, 0px));
5753
6455
  }
5754
6456
 
5755
6457
  .login-card {
@@ -5774,7 +6476,7 @@
5774
6476
  max-width: 100%;
5775
6477
  max-height: 85vh;
5776
6478
  border-radius: var(--radius-md) var(--radius-md) 0 0;
5777
- margin-bottom: env(safe-area-inset-bottom, 0px);
6479
+ margin-bottom: var(--safe-bottom, 0px);
5778
6480
  }
5779
6481
 
5780
6482
  .modal-header { padding: 10px 12px; min-height: 40px; }
@@ -5794,6 +6496,21 @@
5794
6496
  .file-search-box { padding: 4px; }
5795
6497
  .file-search-input { min-height: 32px; font-size: 14px; }
5796
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; }
5797
6514
  }
5798
6515
 
5799
6516
  /* iPhone 14/15 等标准屏幕 (390px - 420px) - 使用基础移动端样式,略微调整 */
@@ -5807,7 +6524,7 @@
5807
6524
 
5808
6525
  .input-panel {
5809
6526
  padding: 6px 10px;
5810
- padding-bottom: calc(8px + env(safe-area-inset-bottom, 0px));
6527
+ padding-bottom: calc(8px + var(--safe-bottom, 0px));
5811
6528
  }
5812
6529
  }
5813
6530
 
@@ -5817,8 +6534,6 @@
5817
6534
  .floating-sidebar-toggle {
5818
6535
  width: 26px;
5819
6536
  height: 26px;
5820
- top: max(6px, env(safe-area-inset-top, 6px));
5821
- left: 6px;
5822
6537
  }
5823
6538
  .floating-sidebar-toggle .hamburger-icon { width: 11px; height: 8px; }
5824
6539
 
@@ -5836,7 +6551,7 @@
5836
6551
 
5837
6552
  .input-panel {
5838
6553
  padding: 5px 6px;
5839
- padding-bottom: calc(6px + env(safe-area-inset-bottom, 0px));
6554
+ padding-bottom: calc(6px + var(--safe-bottom, 0px));
5840
6555
  }
5841
6556
 
5842
6557
  .input-composer { border-radius: 8px; }
@@ -5886,8 +6601,6 @@
5886
6601
  .floating-sidebar-toggle {
5887
6602
  width: 28px;
5888
6603
  height: 28px;
5889
- top: 6px;
5890
- left: 6px;
5891
6604
  }
5892
6605
 
5893
6606
  .sidebar { top: 0; }
@@ -5904,7 +6617,7 @@
5904
6617
 
5905
6618
  .input-panel {
5906
6619
  padding: 8px;
5907
- padding-bottom: calc(8px + env(safe-area-inset-bottom, 0px));
6620
+ padding-bottom: calc(8px + var(--safe-bottom, 0px));
5908
6621
  }
5909
6622
 
5910
6623
  .input-row { flex-direction: row; gap: 8px; }
@@ -5917,76 +6630,6 @@
5917
6630
  }
5918
6631
 
5919
6632
  /* Blank chat mobile optimization */
5920
- @media (max-width: 640px) {
5921
- .blank-chat {
5922
- padding: 16px 12px;
5923
- align-items: flex-start;
5924
- }
5925
-
5926
- .blank-chat-inner {
5927
- max-width: 100%;
5928
- }
5929
-
5930
- .blank-chat-logo {
5931
- width: 48px;
5932
- height: 48px;
5933
- font-size: 24px;
5934
- border-radius: 12px;
5935
- margin-bottom: 10px;
5936
- }
5937
-
5938
- .blank-chat-title {
5939
- font-size: 1.125rem;
5940
- }
5941
-
5942
- .blank-chat-subtitle {
5943
- font-size: 0.75rem;
5944
- margin-bottom: 16px;
5945
- }
5946
-
5947
- .blank-chat-input-wrap {
5948
- margin-bottom: 12px;
5949
- }
5950
-
5951
- .blank-chat-input {
5952
- padding: 10px 60px 10px 12px;
5953
- font-size: 16px; /* Prevent iOS zoom */
5954
- border-radius: 10px;
5955
- }
5956
-
5957
- .blank-chat-send-btn {
5958
- padding: 6px 12px;
5959
- font-size: 0.75rem;
5960
- right: 5px;
5961
- }
5962
-
5963
- .blank-chat-tools {
5964
- gap: 4px;
5965
- margin-bottom: 8px;
5966
- }
5967
-
5968
- .blank-chat-tool-btn {
5969
- padding: 6px 10px;
5970
- font-size: 0.75rem;
5971
- min-height: 44px;
5972
- }
5973
-
5974
- .blank-chat-hint {
5975
- font-size: 0.6875rem;
5976
- }
5977
-
5978
- .mode-btn-group {
5979
- gap: 4px;
5980
- margin-top: 8px;
5981
- }
5982
-
5983
- .mode-btn {
5984
- padding: 5px 10px;
5985
- font-size: 0.6875rem;
5986
- min-height: 36px;
5987
- }
5988
- }
5989
-
5990
6633
  .session-kind-badge {
5991
6634
  display: inline-flex;
5992
6635
  align-items: center;
@@ -6328,13 +6971,13 @@
6328
6971
  left: 50%;
6329
6972
  transform: translateX(-50%);
6330
6973
  z-index: 10000;
6331
- min-width: 280px;
6332
- max-width: 380px;
6974
+ min-width: 220px;
6975
+ max-width: 320px;
6333
6976
  background: var(--bg-primary);
6334
6977
  border: 1px solid var(--border);
6335
- border-radius: var(--radius-lg);
6978
+ border-radius: var(--radius);
6336
6979
  box-shadow: var(--shadow-lg);
6337
- padding: 14px 16px;
6980
+ padding: 8px 12px;
6338
6981
  animation: notification-slide-in 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
6339
6982
  transition: top 0.25s ease, opacity 0.25s ease;
6340
6983
  }
@@ -6345,24 +6988,24 @@
6345
6988
  .notification-bubble-header {
6346
6989
  display: flex;
6347
6990
  align-items: center;
6348
- gap: 8px;
6349
- margin-bottom: 6px;
6991
+ gap: 6px;
6992
+ margin-bottom: 2px;
6350
6993
  }
6351
6994
  .notification-bubble-icon {
6352
- width: 20px;
6353
- height: 20px;
6995
+ width: 16px;
6996
+ height: 16px;
6354
6997
  flex-shrink: 0;
6355
6998
  display: flex;
6356
6999
  align-items: center;
6357
7000
  justify-content: center;
6358
7001
  border-radius: var(--radius-sm);
6359
- font-size: 12px;
7002
+ font-size: 10px;
6360
7003
  }
6361
7004
  .notification-bubble-icon.info { background: var(--accent); color: white; }
6362
7005
  .notification-bubble-icon.warning { background: var(--warning); color: white; }
6363
7006
  .notification-bubble-icon.success { background: var(--success); color: white; }
6364
7007
  .notification-bubble-title {
6365
- font-size: 0.875rem;
7008
+ font-size: 0.75rem;
6366
7009
  font-weight: 600;
6367
7010
  color: var(--fg-primary);
6368
7011
  flex: 1;
@@ -6373,9 +7016,9 @@
6373
7016
  border: none;
6374
7017
  color: var(--fg-muted);
6375
7018
  cursor: pointer;
6376
- font-size: 16px;
7019
+ font-size: 14px;
6377
7020
  line-height: 1;
6378
- padding: 2px 4px;
7021
+ padding: 1px 3px;
6379
7022
  border-radius: var(--radius-sm);
6380
7023
  flex-shrink: 0;
6381
7024
  }
@@ -6384,20 +7027,20 @@
6384
7027
  color: var(--fg-primary);
6385
7028
  }
6386
7029
  .notification-bubble-body {
6387
- font-size: 0.8125rem;
7030
+ font-size: 0.7rem;
6388
7031
  color: var(--fg-secondary);
6389
- line-height: 1.45;
7032
+ line-height: 1.4;
6390
7033
  margin-bottom: 0;
6391
7034
  }
6392
7035
  .notification-bubble-actions {
6393
- margin-top: 10px;
7036
+ margin-top: 6px;
6394
7037
  display: flex;
6395
- gap: 8px;
7038
+ gap: 6px;
6396
7039
  justify-content: flex-end;
6397
7040
  }
6398
7041
  .notification-bubble-actions button {
6399
- font-size: 0.8125rem;
6400
- padding: 4px 12px;
7042
+ font-size: 0.7rem;
7043
+ padding: 2px 10px;
6401
7044
  border-radius: var(--radius-sm);
6402
7045
  cursor: pointer;
6403
7046
  border: 1px solid var(--border);
@@ -6425,6 +7068,73 @@
6425
7068
  to { opacity: 0; transform: translateX(-50%) translateY(-20px); }
6426
7069
  }
6427
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
+
6428
7138
  /* File Preview Modal */
6429
7139
  .file-preview-overlay {
6430
7140
  position: fixed;