declare-cc 0.6.0 → 1.0.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.
@@ -90,7 +90,7 @@
90
90
  background: var(--bg);
91
91
  color: var(--text);
92
92
  font-family: 'Inter', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
93
- font-size: 14px;
93
+ font-size: 16px;
94
94
  line-height: 1.5;
95
95
  height: 100vh;
96
96
  display: flex;
@@ -269,6 +269,11 @@
269
269
  color: var(--accent);
270
270
  }
271
271
  #execute-main-btn.btn-plan:hover { background: rgba(208, 236, 26, 0.18); border-color: rgba(208, 236, 26, 0.4); }
272
+ #execute-main-btn.btn-done {
273
+ background: rgba(134, 239, 172, 0.08);
274
+ border-color: rgba(134, 239, 172, 0.2);
275
+ color: #86efac;
276
+ }
272
277
 
273
278
  /* ── Main layout ── */
274
279
  #main {
@@ -786,7 +791,6 @@
786
791
  display: flex;
787
792
  align-items: center;
788
793
  gap: 6px;
789
- border-bottom: 1px solid var(--border);
790
794
  }
791
795
  #activity-pulse {
792
796
  width: 6px; height: 6px;
@@ -801,6 +805,37 @@
801
805
  50% { opacity: 0.3; }
802
806
  }
803
807
 
808
+ #activity-tabs {
809
+ display: flex;
810
+ gap: 4px;
811
+ align-items: center;
812
+ flex: 1;
813
+ }
814
+ .activity-tab {
815
+ font-size: 10px;
816
+ font-weight: 700;
817
+ letter-spacing: 0.06em;
818
+ text-transform: uppercase;
819
+ color: var(--text-muted);
820
+ cursor: pointer;
821
+ padding: 2px 6px;
822
+ border-radius: 3px;
823
+ transition: color 0.15s, background 0.15s;
824
+ }
825
+ .activity-tab:hover { color: var(--text-dim); }
826
+ .activity-tab.active { color: var(--text-bright); background: var(--surface3); }
827
+
828
+ .activity-tab-content { display: none; }
829
+ .activity-tab-content.active { display: flex; flex-direction: column; flex: 1; overflow: hidden; }
830
+
831
+ #activity-cards.active { overflow-y: auto; padding: 8px; gap: 8px; }
832
+ #activity-cards-active { display: flex; flex-direction: column; gap: 6px; }
833
+ #activity-cards-recent { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--border); }
834
+ #activity-cards-recent:empty { display: none; }
835
+ #activity-cards::-webkit-scrollbar { width: 4px; }
836
+ #activity-cards::-webkit-scrollbar-track { background: transparent; }
837
+ #activity-cards::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 2px; }
838
+
804
839
  #activity-list {
805
840
  flex: 1;
806
841
  overflow-y: auto;
@@ -825,7 +860,9 @@
825
860
  border-bottom: 1px solid rgba(255,255,255,0.03);
826
861
  transition: background 0.15s;
827
862
  }
828
- .activity-event:hover { background: var(--surface2); }
863
+ .activity-event:hover { background: var(--surface2); cursor: default; }
864
+ .activity-event.clickable { cursor: pointer; }
865
+ .activity-event.clickable:hover { background: var(--surface3); }
829
866
  .activity-event:last-child { border-bottom: none; }
830
867
  .activity-event.is-new {
831
868
  animation: activity-flash 1.5s ease-out;
@@ -1060,6 +1097,505 @@
1060
1097
  #drill-list::-webkit-scrollbar-track { background: transparent; }
1061
1098
  #drill-list::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 3px; }
1062
1099
 
1100
+ /* ── Lifecycle stage sections ── */
1101
+ .lifecycle-stages {
1102
+ display: flex;
1103
+ flex-direction: column;
1104
+ gap: 24px;
1105
+ }
1106
+ .lifecycle-section {
1107
+ display: flex;
1108
+ flex-direction: column;
1109
+ gap: 10px;
1110
+ }
1111
+ .lifecycle-section.collapsed .lifecycle-cards { display: none; }
1112
+ .lifecycle-header {
1113
+ display: flex;
1114
+ align-items: center;
1115
+ gap: 8px;
1116
+ padding: 6px 0;
1117
+ user-select: none;
1118
+ }
1119
+ .lifecycle-icon {
1120
+ font-size: 14px;
1121
+ width: 20px;
1122
+ text-align: center;
1123
+ }
1124
+ .lifecycle-label {
1125
+ font-size: 13px;
1126
+ font-weight: 600;
1127
+ color: var(--text-dim);
1128
+ text-transform: uppercase;
1129
+ letter-spacing: 0.05em;
1130
+ }
1131
+ .lifecycle-count {
1132
+ font-size: 11px;
1133
+ font-weight: 700;
1134
+ padding: 1px 7px;
1135
+ border-radius: 10px;
1136
+ }
1137
+ .lifecycle-toggle {
1138
+ font-size: 10px;
1139
+ color: var(--text-muted);
1140
+ margin-left: 4px;
1141
+ }
1142
+ .lifecycle-header-spacer { flex: 1; }
1143
+ .lifecycle-stage-btn {
1144
+ font-size: 12px;
1145
+ font-weight: 600;
1146
+ padding: 4px 14px;
1147
+ border-radius: 14px;
1148
+ border: 1px solid var(--border-strong);
1149
+ background: var(--surface2);
1150
+ color: var(--text);
1151
+ cursor: pointer;
1152
+ font-family: inherit;
1153
+ transition: all 0.15s ease;
1154
+ }
1155
+ .lifecycle-stage-btn:hover {
1156
+ background: var(--surface3);
1157
+ border-color: var(--accent-border);
1158
+ color: var(--text-bright);
1159
+ }
1160
+ .lifecycle-stage-btn + .lifecycle-stage-btn {
1161
+ margin-left: 4px;
1162
+ }
1163
+
1164
+ /* ── Card derivation progress ── */
1165
+ .drill-card-deriving {
1166
+ border-color: var(--executing-border) !important;
1167
+ background: var(--executing-bg) !important;
1168
+ }
1169
+ .derive-card-indicator {
1170
+ display: flex;
1171
+ align-items: center;
1172
+ gap: 8px;
1173
+ padding: 8px 12px;
1174
+ font-size: 12px;
1175
+ color: var(--executing-color);
1176
+ font-weight: 600;
1177
+ }
1178
+ .derive-spinner {
1179
+ display: inline-block;
1180
+ width: 14px;
1181
+ height: 14px;
1182
+ border: 2px solid var(--executing-border);
1183
+ border-top-color: var(--executing-color);
1184
+ border-radius: 50%;
1185
+ animation: derive-spin 0.8s linear infinite;
1186
+ }
1187
+ @keyframes derive-spin {
1188
+ to { transform: rotate(360deg); }
1189
+ }
1190
+ .derive-card-status {
1191
+ display: inline-flex;
1192
+ align-items: center;
1193
+ gap: 4px;
1194
+ font-size: 11px;
1195
+ color: var(--executing-color);
1196
+ font-weight: 600;
1197
+ margin-left: 4px;
1198
+ }
1199
+ .derive-card-status .derive-spinner {
1200
+ width: 10px;
1201
+ height: 10px;
1202
+ border-width: 1.5px;
1203
+ }
1204
+
1205
+ /* ── Filter chips ── */
1206
+ .lifecycle-filter-chips {
1207
+ display: flex;
1208
+ gap: 6px;
1209
+ flex-wrap: wrap;
1210
+ }
1211
+ .lifecycle-chip {
1212
+ font-size: 12px;
1213
+ padding: 4px 12px;
1214
+ border-radius: 14px;
1215
+ border: 1px solid var(--border);
1216
+ background: transparent;
1217
+ color: var(--text-dim);
1218
+ cursor: pointer;
1219
+ transition: all 0.15s ease;
1220
+ font-family: inherit;
1221
+ }
1222
+ .lifecycle-chip:hover {
1223
+ border-color: var(--border-strong);
1224
+ color: var(--text);
1225
+ }
1226
+ .lifecycle-chip.active {
1227
+ background: var(--chip-color, var(--accent));
1228
+ border-color: var(--chip-color, var(--accent));
1229
+ color: var(--bg);
1230
+ font-weight: 600;
1231
+ }
1232
+ .chip-count {
1233
+ font-weight: 700;
1234
+ margin-left: 2px;
1235
+ }
1236
+
1237
+ /* ── Type badge ── */
1238
+ .lifecycle-type-badge {
1239
+ font-size: 10px;
1240
+ font-weight: 700;
1241
+ padding: 1px 6px;
1242
+ border-radius: 4px;
1243
+ text-transform: uppercase;
1244
+ letter-spacing: 0.04em;
1245
+ }
1246
+ .lifecycle-type-badge.type-declaration {
1247
+ background: rgba(134, 239, 172, 0.12);
1248
+ color: #86efac;
1249
+ }
1250
+ .lifecycle-type-badge.type-milestone {
1251
+ background: rgba(165, 149, 255, 0.12);
1252
+ color: #a595ff;
1253
+ }
1254
+ .lifecycle-type-badge.type-action {
1255
+ background: rgba(147, 197, 253, 0.12);
1256
+ color: #93c5fd;
1257
+ }
1258
+
1259
+ .lifecycle-cards {
1260
+ max-width: none;
1261
+ margin: 0;
1262
+ }
1263
+
1264
+ /* ── Empty state / Onboarding ── */
1265
+ .onboarding-empty {
1266
+ max-width: 560px;
1267
+ margin: 60px auto 0;
1268
+ text-align: center;
1269
+ display: flex;
1270
+ flex-direction: column;
1271
+ align-items: center;
1272
+ gap: 16px;
1273
+ }
1274
+ .onboarding-project {
1275
+ font-size: 28px;
1276
+ font-weight: 700;
1277
+ color: var(--text-bright);
1278
+ letter-spacing: -0.02em;
1279
+ }
1280
+ .onboarding-heading {
1281
+ font-size: 18px;
1282
+ font-weight: 600;
1283
+ color: var(--accent);
1284
+ }
1285
+ .onboarding-desc {
1286
+ font-size: 14px;
1287
+ color: var(--text-dim);
1288
+ line-height: 1.6;
1289
+ max-width: 380px;
1290
+ }
1291
+ .onboarding-form {
1292
+ width: 100%;
1293
+ display: flex;
1294
+ flex-direction: column;
1295
+ gap: 10px;
1296
+ margin-top: 8px;
1297
+ }
1298
+ .onboarding-input, .onboarding-textarea {
1299
+ width: 100%;
1300
+ padding: 10px 14px;
1301
+ font-size: 14px;
1302
+ font-family: inherit;
1303
+ background: var(--surface);
1304
+ border: 1px solid var(--border);
1305
+ border-radius: var(--radius);
1306
+ color: var(--text);
1307
+ outline: none;
1308
+ transition: border-color 0.15s ease;
1309
+ }
1310
+ .onboarding-input:focus, .onboarding-textarea:focus {
1311
+ border-color: var(--accent-border);
1312
+ }
1313
+ .onboarding-textarea { resize: vertical; min-height: 240px; }
1314
+ .onboarding-btn {
1315
+ padding: 10px 24px;
1316
+ font-size: 14px;
1317
+ font-weight: 600;
1318
+ font-family: inherit;
1319
+ background: var(--accent);
1320
+ color: var(--bg);
1321
+ border: none;
1322
+ border-radius: var(--radius);
1323
+ cursor: pointer;
1324
+ transition: opacity 0.15s ease;
1325
+ }
1326
+ .onboarding-btn:hover { opacity: 0.9; }
1327
+ .onboarding-btn:disabled { opacity: 0.5; cursor: default; }
1328
+ .onboarding-error {
1329
+ font-size: 13px;
1330
+ color: var(--broken-color);
1331
+ min-height: 18px;
1332
+ }
1333
+
1334
+ /* ── Onboarding flow (vision → questions → proposals) ── */
1335
+ .onboard-container {
1336
+ width: 100%;
1337
+ padding: 16px 0;
1338
+ }
1339
+ .onboard-stream {
1340
+ font-family: 'SF Mono', 'Fira Code', monospace;
1341
+ font-size: 11px;
1342
+ line-height: 1.5;
1343
+ color: var(--text-muted);
1344
+ max-height: 160px;
1345
+ overflow-y: auto;
1346
+ white-space: pre-wrap;
1347
+ word-break: break-word;
1348
+ margin: 0 0 12px 0;
1349
+ padding: 10px 12px;
1350
+ background: var(--surface);
1351
+ border-radius: var(--radius);
1352
+ border: 1px solid var(--border);
1353
+ }
1354
+ .onboard-stream.streaming {
1355
+ border-color: var(--accent-border);
1356
+ }
1357
+ .onboard-phase-label {
1358
+ font-size: 13px;
1359
+ font-weight: 600;
1360
+ color: var(--accent);
1361
+ text-transform: uppercase;
1362
+ letter-spacing: 0.05em;
1363
+ margin-bottom: 12px;
1364
+ }
1365
+ .onboard-questions {
1366
+ display: flex;
1367
+ flex-direction: column;
1368
+ gap: 10px;
1369
+ }
1370
+ .onboard-question {
1371
+ background: var(--surface);
1372
+ border: 1px solid transparent;
1373
+ border-radius: var(--radius-lg);
1374
+ padding: 18px 20px;
1375
+ display: flex;
1376
+ flex-direction: column;
1377
+ gap: 10px;
1378
+ transition: border-color 0.15s ease;
1379
+ }
1380
+ .onboard-question:focus-within {
1381
+ border-color: var(--accent-border);
1382
+ }
1383
+ .onboard-question .oq-number {
1384
+ font-size: 11px;
1385
+ font-weight: 700;
1386
+ color: var(--accent);
1387
+ letter-spacing: 0.04em;
1388
+ }
1389
+ .onboard-question label {
1390
+ font-size: 15px;
1391
+ font-weight: 600;
1392
+ color: var(--text-bright);
1393
+ line-height: 1.4;
1394
+ }
1395
+ .onboard-question .oq-context {
1396
+ font-size: 13px;
1397
+ color: var(--text-dim);
1398
+ line-height: 1.5;
1399
+ }
1400
+ .onboard-question .oq-options {
1401
+ display: flex;
1402
+ flex-wrap: wrap;
1403
+ gap: 8px;
1404
+ }
1405
+ .onboard-question .oq-option {
1406
+ padding: 6px 14px;
1407
+ font-size: 13px;
1408
+ background: var(--surface2);
1409
+ border: 1px solid var(--border);
1410
+ border-radius: 14px;
1411
+ color: var(--text);
1412
+ cursor: pointer;
1413
+ transition: all 0.15s;
1414
+ }
1415
+ .onboard-question .oq-option:hover { border-color: var(--accent); color: var(--accent); }
1416
+ .onboard-question .oq-option.selected { background: var(--accent); color: var(--bg); border-color: var(--accent); }
1417
+ .onboard-question textarea {
1418
+ width: 100%;
1419
+ padding: 10px 14px;
1420
+ font-size: 14px;
1421
+ font-family: inherit;
1422
+ background: var(--surface2);
1423
+ border: 1px solid var(--border);
1424
+ border-radius: var(--radius);
1425
+ color: var(--text);
1426
+ outline: none;
1427
+ resize: vertical;
1428
+ min-height: 48px;
1429
+ line-height: 1.5;
1430
+ }
1431
+ .onboard-question textarea::placeholder { color: var(--text-dim); }
1432
+ .onboard-question textarea:focus { border-color: var(--accent-border); background: var(--surface); }
1433
+ .onboard-actions {
1434
+ display: flex;
1435
+ gap: 10px;
1436
+ margin-top: 16px;
1437
+ padding-top: 8px;
1438
+ }
1439
+ .onboard-actions button {
1440
+ padding: 10px 24px;
1441
+ font-size: 14px;
1442
+ font-weight: 600;
1443
+ font-family: inherit;
1444
+ border-radius: var(--radius-lg);
1445
+ cursor: pointer;
1446
+ transition: all 0.15s;
1447
+ }
1448
+ .onboard-btn-primary {
1449
+ background: var(--accent);
1450
+ color: var(--bg);
1451
+ border: none;
1452
+ }
1453
+ .onboard-btn-primary:hover { opacity: 0.9; }
1454
+ .onboard-btn-secondary {
1455
+ background: transparent;
1456
+ color: var(--text-dim);
1457
+ border: 1px solid var(--border);
1458
+ }
1459
+ .onboard-btn-secondary:hover { border-color: var(--text-dim); color: var(--text); }
1460
+ .onboard-proposal {
1461
+ background: var(--surface);
1462
+ border: 1px solid transparent;
1463
+ border-radius: var(--radius-lg);
1464
+ padding: 18px 20px;
1465
+ margin-bottom: 10px;
1466
+ transition: all 0.2s;
1467
+ }
1468
+ .onboard-proposal:hover {
1469
+ background: var(--surface2);
1470
+ }
1471
+ .onboard-proposal.current {
1472
+ border-color: var(--accent);
1473
+ background: linear-gradient(135deg, rgba(134, 239, 172, 0.03) 0%, var(--surface) 60%);
1474
+ }
1475
+ .onboard-proposal.approved {
1476
+ border-left: 3px solid var(--done-color);
1477
+ opacity: 0.65;
1478
+ }
1479
+ .onboard-proposal .op-header {
1480
+ display: flex;
1481
+ align-items: center;
1482
+ gap: 8px;
1483
+ margin-bottom: 8px;
1484
+ }
1485
+ .onboard-proposal .op-check {
1486
+ font-size: 18px;
1487
+ color: var(--done-color);
1488
+ }
1489
+ .onboard-proposal .op-index {
1490
+ font-size: 12px;
1491
+ font-weight: 700;
1492
+ color: var(--text-dim);
1493
+ min-width: 20px;
1494
+ }
1495
+ .onboard-proposal .op-id {
1496
+ font-size: 12px;
1497
+ font-weight: 600;
1498
+ color: var(--accent);
1499
+ }
1500
+ .onboard-title {
1501
+ width: 100%;
1502
+ padding: 8px 14px;
1503
+ font-size: 15px;
1504
+ font-weight: 600;
1505
+ font-family: inherit;
1506
+ background: var(--surface2);
1507
+ border: 1px solid var(--border);
1508
+ border-radius: var(--radius);
1509
+ color: var(--text-bright);
1510
+ outline: none;
1511
+ }
1512
+ .onboard-title:focus { border-color: var(--accent-border); background: var(--surface); }
1513
+ .onboard-statement {
1514
+ width: 100%;
1515
+ padding: 8px 14px;
1516
+ font-size: 14px;
1517
+ font-family: inherit;
1518
+ background: var(--surface2);
1519
+ border: 1px solid var(--border);
1520
+ border-radius: var(--radius);
1521
+ color: var(--text);
1522
+ outline: none;
1523
+ resize: vertical;
1524
+ min-height: 44px;
1525
+ margin-top: 8px;
1526
+ line-height: 1.5;
1527
+ }
1528
+ .onboard-statement:focus { border-color: var(--accent-border); background: var(--surface); }
1529
+ .onboard-reason {
1530
+ font-size: 13px;
1531
+ color: var(--text-dim);
1532
+ margin-top: 8px;
1533
+ font-style: italic;
1534
+ line-height: 1.4;
1535
+ }
1536
+ .onboard-progress {
1537
+ font-size: 14px;
1538
+ color: var(--text-dim);
1539
+ margin-bottom: 12px;
1540
+ font-weight: 600;
1541
+ }
1542
+
1543
+ /* ── Reconnecting banner ── */
1544
+ #reconnect-banner {
1545
+ position: fixed;
1546
+ top: 0;
1547
+ left: 50%;
1548
+ transform: translateX(-50%) translateY(-100%);
1549
+ background: var(--executing-color);
1550
+ color: var(--bg);
1551
+ padding: 6px 20px;
1552
+ font-size: 13px;
1553
+ font-weight: 600;
1554
+ border-radius: 0 0 var(--radius) var(--radius);
1555
+ z-index: 9999;
1556
+ transition: transform 0.3s ease;
1557
+ }
1558
+ #reconnect-banner.visible {
1559
+ transform: translateX(-50%) translateY(0);
1560
+ }
1561
+
1562
+ /* ── Lifecycle card transitions (disabled — instant render) ── */
1563
+
1564
+ /* ── Loading skeleton ── */
1565
+ .skeleton-card {
1566
+ background: var(--surface);
1567
+ border-radius: var(--radius-lg);
1568
+ padding: 18px 20px;
1569
+ animation: skeletonPulse 1.5s ease-in-out infinite;
1570
+ }
1571
+ .skeleton-line {
1572
+ height: 12px;
1573
+ background: var(--surface3);
1574
+ border-radius: 4px;
1575
+ margin-bottom: 8px;
1576
+ }
1577
+ .skeleton-line.short { width: 40%; }
1578
+ .skeleton-line.medium { width: 70%; }
1579
+ .skeleton-line.long { width: 90%; }
1580
+ @keyframes skeletonPulse {
1581
+ 0%, 100% { opacity: 0.6; }
1582
+ 50% { opacity: 1; }
1583
+ }
1584
+
1585
+ /* ── Lifecycle progress bar ── */
1586
+ .lifecycle-progress {
1587
+ display: flex;
1588
+ gap: 2px;
1589
+ height: 4px;
1590
+ border-radius: 2px;
1591
+ overflow: hidden;
1592
+ margin-top: 4px;
1593
+ }
1594
+ .lifecycle-progress-segment {
1595
+ height: 100%;
1596
+ transition: width 0.3s ease;
1597
+ }
1598
+
1063
1599
  .drill-cards {
1064
1600
  max-width: 640px;
1065
1601
  margin: 0 auto;
@@ -1090,12 +1626,8 @@
1090
1626
  }
1091
1627
  .drill-card.focused {
1092
1628
  background: var(--surface2);
1093
- border-color: var(--border-strong);
1094
- box-shadow: inset 2px 0 0 var(--accent);
1095
- }
1096
- .drill-card.current-review {
1097
- border-color: var(--card-tint-border, var(--accent-border));
1098
- box-shadow: inset 3px 0 0 var(--card-tint, var(--accent)), 0 0 0 1px var(--card-tint-border, var(--accent-border)), 0 4px 16px var(--card-tint-glow, rgba(208, 236, 26, 0.08));
1629
+ border-color: var(--card-tint-border, var(--border-strong));
1630
+ box-shadow: inset 2px 0 0 var(--card-tint, var(--accent));
1099
1631
  }
1100
1632
 
1101
1633
  /* ── Node-type tint colors on cards ── */
@@ -1138,22 +1670,22 @@
1138
1670
  background: linear-gradient(135deg, rgba(147, 197, 253, 0.06) 0%, var(--surface2) 60%);
1139
1671
  }
1140
1672
 
1141
- /* Current-review card gets stronger tint */
1142
- .drill-cards[data-node-type="declaration"] .drill-card.current-review {
1673
+ /* Focused card gets stronger tint background */
1674
+ .drill-cards[data-node-type="declaration"] .drill-card.focused {
1143
1675
  background: linear-gradient(135deg, rgba(134, 239, 172, 0.06) 0%, var(--surface2) 60%);
1144
1676
  }
1145
- .drill-cards[data-node-type="milestone"] .drill-card.current-review {
1677
+ .drill-cards[data-node-type="milestone"] .drill-card.focused {
1146
1678
  background: linear-gradient(135deg, rgba(165, 149, 255, 0.06) 0%, var(--surface2) 60%);
1147
1679
  }
1148
- .drill-cards[data-node-type="action"] .drill-card.current-review {
1680
+ .drill-cards[data-node-type="action"] .drill-card.focused {
1149
1681
  background: linear-gradient(135deg, rgba(147, 197, 253, 0.06) 0%, var(--surface2) 60%);
1150
1682
  }
1151
- .drill-card.current-review .drill-review-btn.approve-btn {
1683
+ .drill-card .drill-review-btn.approve-btn {
1152
1684
  background: rgba(134, 239, 172, 0.10);
1153
1685
  border-color: rgba(134, 239, 172, 0.35);
1154
1686
  color: #86efac;
1155
1687
  }
1156
- .drill-card.current-review .drill-review-btn.revision-btn {
1688
+ .drill-card .drill-review-btn.revision-btn {
1157
1689
  background: rgba(248, 113, 113, 0.06);
1158
1690
  border-color: rgba(248, 113, 113, 0.2);
1159
1691
  color: #f87171;
@@ -1207,6 +1739,38 @@
1207
1739
  color: var(--accent);
1208
1740
  font-weight: 600;
1209
1741
  }
1742
+ /* Inline action list on milestone cards */
1743
+ .drill-card-action-list {
1744
+ list-style: none;
1745
+ padding: 0;
1746
+ margin: 6px 0 0 0;
1747
+ display: flex;
1748
+ flex-direction: column;
1749
+ gap: 2px;
1750
+ }
1751
+ .drill-card-action-list li {
1752
+ font-size: 11px;
1753
+ color: var(--text-dim);
1754
+ display: flex;
1755
+ align-items: baseline;
1756
+ gap: 6px;
1757
+ }
1758
+ .drill-card-action-list li .al-icon {
1759
+ width: 10px;
1760
+ text-align: center;
1761
+ flex-shrink: 0;
1762
+ font-size: 10px;
1763
+ }
1764
+ .drill-card-action-list li.done { color: var(--text-muted); text-decoration: line-through; }
1765
+ .drill-card-action-list li.done .al-icon { color: var(--done-color, #86efac); }
1766
+ .drill-card-action-list li.planned .al-icon { color: var(--accent); }
1767
+ .drill-card-action-list li.unplanned .al-icon { color: var(--text-muted); }
1768
+ .drill-card-no-actions {
1769
+ font-size: 11px;
1770
+ color: var(--text-muted);
1771
+ font-style: italic;
1772
+ margin-top: 6px;
1773
+ }
1210
1774
 
1211
1775
  /* Card-level status pill */
1212
1776
  .drill-status-pill {
@@ -1287,6 +1851,15 @@
1287
1851
  border-color: var(--border-strong);
1288
1852
  color: var(--text);
1289
1853
  }
1854
+ .drill-action-btn.drill-action-primary {
1855
+ background: var(--accent-dim);
1856
+ border-color: var(--accent-border);
1857
+ color: var(--accent);
1858
+ font-weight: 600;
1859
+ }
1860
+ .drill-action-btn.drill-action-primary:hover {
1861
+ background: var(--accent-border);
1862
+ }
1290
1863
  .drill-action-btn.drill-action-danger {
1291
1864
  color: var(--text-dim);
1292
1865
  }
@@ -1354,8 +1927,8 @@
1354
1927
  border-color: var(--accent-border);
1355
1928
  }
1356
1929
 
1357
- /* Expandable exec-plan preview */
1358
- .drill-exec-plan-toggle {
1930
+ /* Expandable plan preview */
1931
+ .drill-plan-toggle {
1359
1932
  font-size: 11px;
1360
1933
  color: var(--text-muted);
1361
1934
  cursor: pointer;
@@ -1364,8 +1937,8 @@
1364
1937
  font-weight: 500;
1365
1938
  transition: color 0.12s;
1366
1939
  }
1367
- .drill-exec-plan-toggle:hover { color: var(--text); }
1368
- .drill-exec-plan-content {
1940
+ .drill-plan-toggle:hover { color: var(--text); }
1941
+ .drill-plan-content {
1369
1942
  display: none;
1370
1943
  margin-top: 6px;
1371
1944
  padding: 12px 14px;
@@ -1378,7 +1951,7 @@
1378
1951
  max-height: 200px;
1379
1952
  overflow-y: auto;
1380
1953
  }
1381
- .drill-exec-plan-content.open { display: block; }
1954
+ .drill-plan-content.open { display: block; }
1382
1955
 
1383
1956
  /* ── Bottom prompt bar ── */
1384
1957
  #drill-prompt {
@@ -1390,21 +1963,100 @@
1390
1963
  justify-content: center;
1391
1964
  gap: 12px;
1392
1965
  flex-shrink: 0;
1393
- font-size: 13px;
1966
+ font-size: 13px;
1967
+ }
1968
+ .drill-prompt-text {
1969
+ color: var(--text);
1970
+ }
1971
+ .drill-prompt-text .drill-prompt-target {
1972
+ color: var(--accent);
1973
+ font-weight: 600;
1974
+ cursor: pointer;
1975
+ }
1976
+ .drill-prompt-text .drill-prompt-target:hover { text-decoration: underline; }
1977
+ .drill-prompt-complete {
1978
+ color: var(--accent);
1979
+ font-weight: 600;
1980
+ }
1981
+ /* Command card in agents panel */
1982
+ #command-card {
1983
+ background: var(--surface2);
1984
+ border: 1px solid var(--border);
1985
+ border-radius: 18px;
1986
+ padding: 8px 14px;
1987
+ cursor: default;
1988
+ transition: all 0.15s ease;
1989
+ margin-bottom: 4px;
1990
+ }
1991
+ #command-card:hover, #command-card:focus-within { border-color: var(--accent-border); }
1992
+ #command-card .cmd-label {
1993
+ display: none;
1994
+ }
1995
+ #command-card .cmd-key {
1996
+ display: none;
1997
+ }
1998
+ #command-card .cmd-row {
1999
+ display: flex;
2000
+ align-items: center;
2001
+ gap: 8px;
2002
+ }
2003
+ #command-card .cmd-shortcut {
2004
+ background: var(--surface3);
2005
+ border: 1px solid var(--border);
2006
+ border-radius: 4px;
2007
+ padding: 1px 6px;
2008
+ font-size: 10px;
2009
+ font-weight: 700;
2010
+ color: var(--text-dim);
2011
+ font-family: 'SF Mono', 'Fira Code', monospace;
2012
+ flex-shrink: 0;
2013
+ line-height: 1.6;
1394
2014
  }
1395
- .drill-prompt-text {
2015
+ #command-card:focus-within .cmd-shortcut { display: none; }
2016
+ #command-card.editing {
2017
+ border-color: var(--accent);
2018
+ border-style: solid;
2019
+ cursor: default;
2020
+ }
2021
+ #command-card-input {
2022
+ display: block;
2023
+ width: 100%;
2024
+ background: transparent;
2025
+ border: none;
1396
2026
  color: var(--text);
2027
+ font-size: 13px;
2028
+ padding: 2px 0;
2029
+ outline: none;
2030
+ font-family: inherit;
2031
+ resize: none;
2032
+ line-height: 1.4;
2033
+ min-width: 0;
2034
+ flex: 1;
1397
2035
  }
1398
- .drill-prompt-text .drill-prompt-target {
1399
- color: var(--accent);
1400
- font-weight: 600;
1401
- cursor: pointer;
2036
+ #command-card-hint {
2037
+ display: none;
2038
+ font-size: 10px;
2039
+ color: var(--text-dim);
2040
+ margin-top: 4px;
1402
2041
  }
1403
- .drill-prompt-text .drill-prompt-target:hover { text-decoration: underline; }
1404
- .drill-prompt-complete {
1405
- color: var(--accent);
1406
- font-weight: 600;
2042
+ #command-card.editing #command-card-hint { display: block; }
2043
+ #command-card.running { border-color: var(--executing-color); border-style: solid; }
2044
+ #command-card.running .cmd-label { display: none; }
2045
+ #command-card.running #command-card-input { display: none; }
2046
+ #command-card.running #command-card-hint { display: none; }
2047
+ .command-output-stream {
2048
+ font-family: 'SF Mono', 'Fira Code', monospace;
2049
+ font-size: 11px;
2050
+ line-height: 1.5;
2051
+ color: var(--text-muted);
2052
+ max-height: 200px;
2053
+ overflow-y: auto;
2054
+ white-space: pre-wrap;
2055
+ word-break: break-word;
2056
+ margin: 0;
2057
+ padding: 0;
1407
2058
  }
2059
+ .command-output-stream.streaming { color: var(--executing-color); }
1408
2060
  .drill-next-btn {
1409
2061
  background: var(--accent-dim);
1410
2062
  border: 1px solid var(--accent-border);
@@ -1430,6 +2082,31 @@
1430
2082
  background: rgba(208, 236, 26, 0.08);
1431
2083
  margin-right: 2px;
1432
2084
  }
2085
+ .drill-approve-all-btn {
2086
+ background: rgba(134, 239, 172, 0.08);
2087
+ border: 1px solid rgba(134, 239, 172, 0.3);
2088
+ color: #86efac;
2089
+ padding: 6px 16px;
2090
+ border-radius: var(--radius);
2091
+ cursor: pointer;
2092
+ font-size: 13px;
2093
+ font-weight: 600;
2094
+ margin-left: 12px;
2095
+ transition: all 0.15s ease;
2096
+ }
2097
+ .drill-approve-all-btn:hover { background: rgba(134, 239, 172, 0.15); }
2098
+ .drill-approve-all-btn kbd {
2099
+ display: inline-block;
2100
+ padding: 0 5px;
2101
+ border: 1px solid rgba(134, 239, 172, 0.3);
2102
+ border-radius: 3px;
2103
+ font-size: 10px;
2104
+ font-family: inherit;
2105
+ font-weight: 700;
2106
+ color: #86efac;
2107
+ background: rgba(134, 239, 172, 0.08);
2108
+ margin-right: 2px;
2109
+ }
1433
2110
 
1434
2111
  .col-empty {
1435
2112
  padding: 40px 20px;
@@ -1502,14 +2179,80 @@
1502
2179
  }
1503
2180
  .col-empty-invite .output-log {
1504
2181
  width: 100%;
1505
- max-width: 420px;
2182
+ max-width: 560px;
1506
2183
  text-align: left;
2184
+ max-height: 200px;
2185
+ overflow-y: auto;
2186
+ font-size: 12px;
2187
+ line-height: 1.6;
2188
+ color: var(--text-dim);
2189
+ padding: 12px 16px;
2190
+ border-radius: var(--radius);
2191
+ background: var(--surface);
2192
+ border: 1px solid var(--border);
2193
+ }
2194
+ .col-empty-invite .output-log .derive-log-line {
2195
+ opacity: 0.5;
2196
+ transition: opacity 0.3s;
2197
+ }
2198
+ .col-empty-invite .output-log .derive-log-line:last-child {
2199
+ opacity: 1;
2200
+ color: var(--text);
1507
2201
  }
1508
2202
  .col-empty-invite .derivation-checklist {
1509
2203
  text-align: left;
1510
2204
  width: 100%;
1511
- max-width: 420px;
2205
+ max-width: 560px;
2206
+ }
2207
+ .col-empty-invite #derivation-proposals {
2208
+ width: 100%;
2209
+ max-width: 560px;
2210
+ text-align: left;
2211
+ }
2212
+ .derivation-progress {
2213
+ width: 100%;
2214
+ max-width: 560px;
2215
+ margin-top: 16px;
2216
+ padding: 14px 18px;
2217
+ background: var(--surface);
2218
+ border: 1px solid var(--border);
2219
+ border-radius: var(--radius-lg);
2220
+ }
2221
+ .derive-phase {
2222
+ display: flex;
2223
+ align-items: center;
2224
+ gap: 10px;
2225
+ animation: derive-phase-in 0.4s ease;
2226
+ }
2227
+ .derive-phase-icon {
2228
+ font-size: 18px;
2229
+ flex-shrink: 0;
2230
+ }
2231
+ .derive-phase-text {
2232
+ font-size: 13px;
2233
+ color: var(--text);
2234
+ font-weight: 500;
2235
+ }
2236
+ @keyframes derive-phase-in {
2237
+ from { opacity: 0; transform: translateY(4px); }
2238
+ to { opacity: 1; transform: translateY(0); }
2239
+ }
2240
+ .derive-stream-output {
2241
+ margin-top: 10px;
2242
+ padding: 10px 12px;
2243
+ background: var(--bg);
2244
+ border: 1px solid var(--border);
2245
+ border-radius: var(--radius);
2246
+ font-size: 12px;
2247
+ line-height: 1.5;
2248
+ color: var(--text-dim);
2249
+ max-height: 160px;
2250
+ overflow-y: auto;
2251
+ white-space: pre-wrap;
2252
+ word-break: break-word;
2253
+ font-family: 'SF Mono', 'Fira Code', monospace;
1512
2254
  }
2255
+
1513
2256
  .derive-spinner {
1514
2257
  display: inline-block;
1515
2258
  width: 12px;
@@ -1837,7 +2580,7 @@
1837
2580
  word-break: break-all;
1838
2581
  color: var(--text);
1839
2582
  }
1840
- /* Clickable file links in exec-plan detail */
2583
+ /* Clickable file links in plan detail */
1841
2584
  .file-link {
1842
2585
  cursor: pointer;
1843
2586
  transition: border-color 0.15s;
@@ -2288,6 +3031,196 @@
2288
3031
  flex-shrink: 0;
2289
3032
  }
2290
3033
 
3034
+ /* ── Agent activity cards ── */
3035
+ .agent-card {
3036
+ background: var(--surface2);
3037
+ border: 1px solid var(--border);
3038
+ border-radius: var(--radius);
3039
+ padding: 10px 12px;
3040
+ display: flex;
3041
+ flex-direction: column;
3042
+ gap: 6px;
3043
+ transition: background 0.15s;
3044
+ }
3045
+ .agent-card:hover { background: var(--surface3); }
3046
+ .agent-card.status-running { border-left: 3px solid var(--executing-color); }
3047
+ .agent-card.status-complete,
3048
+ .agent-card.status-done { border-left: 3px solid var(--act-color); opacity: 0.8; }
3049
+ .agent-card.status-failed { border-left: 3px solid var(--broken-color); opacity: 0.8; }
3050
+ .agent-card-header {
3051
+ display: flex;
3052
+ align-items: center;
3053
+ gap: 8px;
3054
+ }
3055
+ .agent-card-icon {
3056
+ font-size: 14px;
3057
+ flex-shrink: 0;
3058
+ width: 20px;
3059
+ text-align: center;
3060
+ }
3061
+ .agent-card-target {
3062
+ font-size: 12px;
3063
+ font-weight: 600;
3064
+ color: var(--text-bright);
3065
+ overflow: hidden;
3066
+ text-overflow: ellipsis;
3067
+ white-space: nowrap;
3068
+ flex: 1;
3069
+ }
3070
+ .agent-card-badge {
3071
+ font-size: 10px;
3072
+ font-weight: 700;
3073
+ letter-spacing: 0.04em;
3074
+ text-transform: uppercase;
3075
+ padding: 2px 6px;
3076
+ border-radius: 3px;
3077
+ flex-shrink: 0;
3078
+ }
3079
+ .agent-card-badge.badge-running { color: var(--executing-color); background: var(--executing-bg); }
3080
+ .agent-card-badge.badge-complete,
3081
+ .agent-card-badge.badge-done { color: var(--act-color); background: var(--act-bg); }
3082
+ .agent-card-badge.badge-failed { color: var(--broken-color); background: var(--broken-bg); }
3083
+ .agent-card-meta {
3084
+ display: flex;
3085
+ align-items: center;
3086
+ gap: 8px;
3087
+ font-size: 11px;
3088
+ color: var(--text-dim);
3089
+ }
3090
+ .agent-card-type { text-transform: capitalize; }
3091
+ .agent-card-timer {
3092
+ font-family: 'SF Mono', 'Fira Code', monospace;
3093
+ font-size: 11px;
3094
+ color: var(--text-dim);
3095
+ }
3096
+ .status-running .agent-card-timer { color: var(--executing-color); }
3097
+ .agent-card-error {
3098
+ font-size: 11px;
3099
+ color: var(--broken-color);
3100
+ margin-top: 2px;
3101
+ overflow: hidden;
3102
+ text-overflow: ellipsis;
3103
+ white-space: nowrap;
3104
+ }
3105
+ .agent-card-summary {
3106
+ font-size: 12px;
3107
+ color: var(--text-dim);
3108
+ margin-top: 4px;
3109
+ white-space: nowrap;
3110
+ overflow: hidden;
3111
+ text-overflow: ellipsis;
3112
+ }
3113
+ .agent-card-view-result {
3114
+ display: inline-block;
3115
+ margin-top: 6px;
3116
+ padding: 3px 10px;
3117
+ font-size: 11px;
3118
+ font-weight: 500;
3119
+ color: var(--act-color);
3120
+ background: transparent;
3121
+ border: 1px solid var(--act-color);
3122
+ border-radius: 4px;
3123
+ cursor: pointer;
3124
+ transition: background 0.15s, color 0.15s;
3125
+ align-self: flex-start;
3126
+ }
3127
+ .agent-card-view-result:hover {
3128
+ background: var(--act-color);
3129
+ color: var(--surface1);
3130
+ }
3131
+
3132
+ /* ── Discuss (interview) flow ── */
3133
+ .discuss-container {
3134
+ margin-top: 8px;
3135
+ border: 1px solid var(--border);
3136
+ border-radius: var(--radius);
3137
+ padding: 10px;
3138
+ background: var(--surface2);
3139
+ }
3140
+ .discuss-loading { display: flex; flex-direction: column; gap: 8px; }
3141
+ .discuss-streaming {
3142
+ font-family: 'SF Mono', 'Fira Code', monospace;
3143
+ font-size: 11px;
3144
+ color: var(--executing-color);
3145
+ max-height: 120px;
3146
+ overflow-y: auto;
3147
+ white-space: pre-wrap;
3148
+ word-break: break-word;
3149
+ margin: 0;
3150
+ }
3151
+ .discuss-header {
3152
+ font-size: 12px;
3153
+ font-weight: 600;
3154
+ color: var(--text-bright);
3155
+ margin-bottom: 8px;
3156
+ }
3157
+ .discuss-q {
3158
+ margin-bottom: 10px;
3159
+ padding-bottom: 8px;
3160
+ border-bottom: 1px solid var(--border);
3161
+ }
3162
+ .discuss-q:last-of-type { border-bottom: none; }
3163
+ .discuss-q-label {
3164
+ font-size: 12px;
3165
+ font-weight: 600;
3166
+ color: var(--text-bright);
3167
+ display: block;
3168
+ margin-bottom: 4px;
3169
+ }
3170
+ .discuss-q-context {
3171
+ font-size: 11px;
3172
+ color: var(--text-dim);
3173
+ margin-bottom: 6px;
3174
+ font-style: italic;
3175
+ }
3176
+ .discuss-q-options {
3177
+ display: flex;
3178
+ flex-wrap: wrap;
3179
+ gap: 4px;
3180
+ margin-bottom: 6px;
3181
+ }
3182
+ .discuss-option-btn {
3183
+ padding: 3px 10px;
3184
+ font-size: 11px;
3185
+ border: 1px solid var(--border);
3186
+ border-radius: 4px;
3187
+ background: var(--surface3);
3188
+ color: var(--text-muted);
3189
+ cursor: pointer;
3190
+ }
3191
+ .discuss-option-btn:hover {
3192
+ border-color: var(--accent);
3193
+ color: var(--accent);
3194
+ }
3195
+ .discuss-q-input {
3196
+ width: 100%;
3197
+ background: var(--surface1);
3198
+ border: 1px solid var(--border);
3199
+ border-radius: 4px;
3200
+ color: var(--text-bright);
3201
+ font-size: 12px;
3202
+ padding: 6px 8px;
3203
+ resize: vertical;
3204
+ font-family: inherit;
3205
+ }
3206
+ .discuss-q-input:focus {
3207
+ outline: none;
3208
+ border-color: var(--accent);
3209
+ }
3210
+ .discuss-actions {
3211
+ display: flex;
3212
+ gap: 8px;
3213
+ margin-top: 10px;
3214
+ }
3215
+ .discuss-error {
3216
+ font-size: 12px;
3217
+ color: var(--text-muted);
3218
+ margin-bottom: 8px;
3219
+ }
3220
+ .agent-timer-final {
3221
+ color: var(--text-muted);
3222
+ }
3223
+
2291
3224
  /* ── Classification toggle buttons ── */
2292
3225
  .classify-btn {
2293
3226
  background: var(--surface2);
@@ -3299,12 +4232,26 @@
3299
4232
 
3300
4233
  <!-- Activity feed placeholder (moved into drill-body via JS) -->
3301
4234
  <div id="activity-feed">
3302
- <div id="activity-pinned"></div>
3303
4235
  <div id="activity-toggle">
3304
4236
  <div id="activity-pulse"></div>
3305
- <span id="activity-label">ACTIVITY</span>
4237
+ <div id="activity-tabs">
4238
+ <span class="activity-tab active" data-tab="cards">Agents</span>
4239
+ <span class="activity-tab" data-tab="log">Log</span>
4240
+ </div>
4241
+ </div>
4242
+ <div id="activity-cards" class="activity-tab-content active">
4243
+ <div id="command-card" class="editing" tabindex="0">
4244
+ <div class="cmd-label"><span class="cmd-key">C</span> Chat</div>
4245
+ <div class="cmd-row">
4246
+ <textarea id="command-card-input" rows="1" placeholder="Ask anything..."></textarea>
4247
+ <kbd class="cmd-shortcut">C</kbd>
4248
+ </div>
4249
+ <div id="command-card-hint">Enter to send &middot; Esc to cancel</div>
4250
+ </div>
4251
+ <div id="activity-cards-active"></div>
4252
+ <div id="activity-cards-recent"></div>
3306
4253
  </div>
3307
- <div id="activity-list">
4254
+ <div id="activity-list" class="activity-tab-content">
3308
4255
  <div style="padding:16px;color:var(--text-muted);font-size:11px;text-align:center;">No activity yet</div>
3309
4256
  </div>
3310
4257
  </div>
@@ -3330,6 +4277,6 @@
3330
4277
  </div>
3331
4278
  </div>
3332
4279
 
3333
- <script src="/public/app.js?v=2"></script>
4280
+ <script src="/public/app.js?v=25"></script>
3334
4281
  </body>
3335
4282
  </html>