@codemem/server 0.46.0-alpha.2 → 0.46.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/static/index.html CHANGED
@@ -110,7 +110,7 @@
110
110
  align-items: center;
111
111
  gap: var(--sp-3);
112
112
  min-width: 0;
113
- overflow: hidden;
113
+ overflow: visible;
114
114
  }
115
115
 
116
116
  .logo {
@@ -774,6 +774,10 @@
774
774
  — quieter than any real button nearby, since it's navigation,
775
775
  not action. */
776
776
  .sync-subview-link {
777
+ background: none;
778
+ border: 0;
779
+ cursor: pointer;
780
+ font-family: inherit;
777
781
  display: inline-flex;
778
782
  align-items: center;
779
783
  gap: 4px;
@@ -887,17 +891,81 @@
887
891
  line-height: 1.5;
888
892
  }
889
893
 
890
- .health-primary {
891
- border-width: 2px;
892
- }
893
- .health-primary .value { font-size: var(--font-size-3xl); letter-spacing: 0.2px; }
894
- .health-primary.status-healthy .value { color: var(--status-healthy); }
895
- .health-primary.status-degraded .value { color: var(--status-degraded); }
896
- .health-primary.status-attention .value { color: var(--status-attention); }
894
+ .has-tooltip { cursor: help; }
897
895
  .health-loading-icon {
898
896
  animation: viewerLoadingSpin var(--duration-attention) linear infinite;
899
897
  }
900
898
 
899
+ .health-system-card {
900
+ display: flex;
901
+ flex-direction: column;
902
+ gap: var(--sp-4);
903
+ }
904
+ .health-system-header {
905
+ display: flex;
906
+ flex-wrap: wrap;
907
+ align-items: center;
908
+ justify-content: space-between;
909
+ gap: var(--sp-4);
910
+ }
911
+ .health-status-summary {
912
+ display: flex;
913
+ align-items: center;
914
+ gap: var(--sp-3);
915
+ min-width: 0;
916
+ }
917
+ .health-status-copy {
918
+ display: flex;
919
+ flex-direction: column;
920
+ gap: 2px;
921
+ min-width: 0;
922
+ }
923
+ .health-status-word {
924
+ font-size: var(--font-size-3xl);
925
+ font-weight: var(--font-weight-semibold);
926
+ line-height: 1.15;
927
+ }
928
+ .health-status-word.status-healthy { color: var(--status-healthy); }
929
+ .health-status-word.status-degraded { color: var(--status-degraded); }
930
+ .health-status-word.status-attention { color: var(--status-attention); }
931
+ .health-status-word.status-unknown { color: var(--text-tertiary); }
932
+ .health-status-copy .section-meta { margin: 0; }
933
+ .health-status-meta {
934
+ display: flex;
935
+ align-items: center;
936
+ flex-wrap: wrap;
937
+ gap: var(--sp-2);
938
+ }
939
+ .health-tile-grid {
940
+ display: grid;
941
+ grid-template-columns: repeat(4, minmax(0, 1fr));
942
+ gap: var(--sp-3);
943
+ }
944
+ .health-tile {
945
+ display: flex;
946
+ flex-direction: column;
947
+ gap: var(--sp-1);
948
+ min-width: 0;
949
+ padding: var(--sp-3) var(--sp-4);
950
+ border-radius: var(--radius-sm);
951
+ background: var(--surface-2);
952
+ }
953
+ .health-tile-label {
954
+ color: var(--text-tertiary);
955
+ font-size: var(--font-size-2xs);
956
+ letter-spacing: 0.06em;
957
+ text-transform: uppercase;
958
+ }
959
+ .health-tile-value {
960
+ display: inline-flex;
961
+ align-items: center;
962
+ gap: 6px;
963
+ min-width: 0;
964
+ color: var(--text-secondary);
965
+ font-size: var(--font-size-md);
966
+ }
967
+ .health-maintenance-grid { margin-top: var(--sp-3); }
968
+
901
969
  /* ── Buttons ───────────────────────────────────────────── */
902
970
 
903
971
  /* ── Button base ─────────────────────────────────────── */
@@ -1166,16 +1234,10 @@
1166
1234
  font-family: var(--font-sans);
1167
1235
  font-size: var(--font-size-md);
1168
1236
  }
1169
- .project-inventory-list {
1170
- display: grid;
1171
- gap: var(--sp-3);
1172
- margin-top: var(--sp-4);
1173
- }
1174
- .project-inventory-skeleton {
1175
- display: grid;
1176
- gap: var(--sp-3);
1177
- margin-top: var(--sp-4);
1178
- }
1237
+ .projects-toolbar #projectsStatusFilter { flex: 0 1 220px; min-width: 0; }
1238
+ #projectsInventoryMeta { color: var(--text-tertiary); white-space: nowrap; }
1239
+ .project-inventory-list { margin-top: var(--sp-3); min-width: 0; }
1240
+ .project-inventory-skeleton { display: grid; gap: var(--sp-3); margin-top: var(--sp-4); }
1179
1241
  .project-inventory-skeleton-row {
1180
1242
  padding: var(--sp-4);
1181
1243
  border: 1px solid var(--border);
@@ -1193,93 +1255,193 @@
1193
1255
  .project-inventory-skeleton-line.title { width: 42%; height: 16px; }
1194
1256
  .project-inventory-skeleton-line.meta { width: 68%; }
1195
1257
  .project-inventory-skeleton-line.signal { width: 86%; }
1196
- .project-inventory-row {
1197
- padding: var(--sp-4);
1258
+ .project-inventory-table {
1259
+ display: block;
1260
+ width: 100%;
1261
+ min-width: 0;
1262
+ overflow: visible;
1263
+ border-spacing: 0;
1198
1264
  border: 1px solid var(--border);
1199
1265
  border-radius: var(--radius-md);
1200
- background: var(--surface-1);
1201
1266
  }
1202
- .project-inventory-row-header {
1203
- display: flex;
1204
- justify-content: space-between;
1205
- gap: var(--sp-3);
1206
- align-items: flex-start;
1267
+ .project-inventory-table > thead,
1268
+ .project-inventory-table > tbody { display: block; width: 100%; }
1269
+ .project-inventory-table th,
1270
+ .project-inventory-table td { padding: 0; text-align: left; font-weight: inherit; }
1271
+ .project-inventory-table-row {
1272
+ display: grid;
1273
+ grid-template-columns: 28px minmax(0, 1fr) 72px 72px 120px minmax(0, 130px) 180px;
1274
+ align-items: center;
1275
+ column-gap: var(--sp-3);
1276
+ min-width: 0;
1207
1277
  }
1208
- .project-inventory-title { font-size: var(--font-size-lg); font-weight: 650; color: var(--text-primary); }
1209
- .project-inventory-domain { font-family: var(--font-mono); font-size: var(--font-size-sm); color: var(--accent); }
1210
- .project-inventory-meta, .project-inventory-signal {
1211
- margin-top: var(--sp-2);
1212
- color: var(--text-secondary);
1213
- font-size: var(--font-size-sm);
1278
+ .project-inventory-table-header {
1279
+ padding: var(--sp-2) var(--sp-4);
1280
+ background: var(--surface-2);
1281
+ color: var(--text-tertiary);
1282
+ font-size: var(--font-size-2xs);
1283
+ font-weight: var(--font-weight-medium);
1284
+ letter-spacing: 0.06em;
1285
+ text-transform: uppercase;
1286
+ }
1287
+ .project-inventory-row-header {
1288
+ min-width: 0;
1289
+ border-top: 1px solid var(--border);
1290
+ background: var(--surface-1);
1214
1291
  }
1215
- .project-inventory-signal { overflow-wrap: anywhere; }
1216
- .project-inventory-badges {
1292
+ .project-inventory-row-header { padding: var(--sp-3) var(--sp-4); }
1293
+ .project-inventory-row-stats { display: contents; }
1294
+ .project-inventory-cell { min-width: 0; }
1295
+ .project-inventory-project-cell { display: flex; flex-direction: column; gap: var(--sp-1); }
1296
+ .project-inventory-title { overflow-wrap: anywhere; color: var(--text-primary); font-size: var(--font-size-md); font-weight: var(--font-weight-semibold); }
1297
+ .project-inventory-signal { overflow: hidden; color: var(--text-tertiary); font-size: var(--font-size-xs); text-overflow: ellipsis; white-space: nowrap; }
1298
+ .project-inventory-number { font-variant-numeric: tabular-nums; }
1299
+ .project-inventory-latest { color: var(--text-secondary); }
1300
+ .project-inventory-badges { display: flex; flex-wrap: wrap; gap: var(--sp-1); }
1301
+ .project-inventory-badges:empty { display: none; }
1302
+ .project-inventory-row-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: var(--sp-2); }
1303
+ .project-inventory-row-actions .settings-button { min-width: 0; max-width: 100%; white-space: normal; overflow-wrap: anywhere; }
1304
+ .project-row-menu { position: relative; flex: 0 0 auto; }
1305
+ .project-row-menu-panel { position: absolute; top: calc(100% + var(--sp-1)); right: 0; }
1306
+ button.feed-menu-item { border: 0; background: transparent; font-family: inherit; text-align: left; }
1307
+ button.feed-menu-item:hover,
1308
+ button.feed-menu-item:focus-visible { background: var(--surface-2); }
1309
+ button.feed-menu-item:disabled { color: var(--text-tertiary); cursor: default; }
1310
+ .project-inventory-details { background: var(--surface-2); }
1311
+ .project-inventory-details-row,
1312
+ .project-inventory-details-cell { display: block; min-width: 0; }
1313
+ .project-inventory-details > summary {
1217
1314
  display: flex;
1218
- flex-wrap: wrap;
1315
+ align-items: center;
1219
1316
  gap: var(--sp-2);
1220
- margin-top: var(--sp-3);
1221
- }
1222
- .project-status-badge {
1223
- padding: 2px 8px;
1224
- border-radius: var(--radius-pill);
1225
- background: var(--surface-2);
1317
+ padding: var(--sp-3) var(--sp-4) var(--sp-3) 44px;
1318
+ cursor: pointer;
1226
1319
  color: var(--text-secondary);
1227
- font-size: var(--font-size-xs);
1228
- border: 1px solid var(--border);
1320
+ font-size: var(--font-size-sm);
1229
1321
  }
1230
- .project-status-badge.needs_attention,
1231
- .project-status-badge.legacy_review { color: var(--accent-warm); background: var(--accent-warm-subtle); }
1232
- .project-status-badge.suggested { color: var(--accent); background: var(--accent-subtle); }
1233
- .project-inventory-details { margin-top: var(--sp-3); }
1234
- .project-inventory-details summary { cursor: pointer; color: var(--text-secondary); font-size: var(--font-size-sm); }
1322
+ .project-inventory-details-body { padding: 0 var(--sp-4) var(--sp-4) 44px; }
1323
+ .project-inventory-domain { color: var(--accent); font-family: var(--font-mono); font-size: var(--font-size-sm); }
1324
+ .project-inventory-meta { margin-top: var(--sp-2); color: var(--text-secondary); font-size: var(--font-size-sm); }
1235
1325
  .project-detail-grid {
1236
1326
  display: grid;
1237
- grid-template-columns: minmax(130px, max-content) 1fr;
1238
- gap: var(--sp-2) var(--sp-3);
1327
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1328
+ gap: var(--sp-2) var(--sp-4);
1239
1329
  margin-top: var(--sp-3);
1240
1330
  font-size: var(--font-size-sm);
1241
1331
  }
1332
+ .project-detail-pair { display: grid; grid-template-columns: minmax(130px, max-content) minmax(0, 1fr); gap: var(--sp-3); }
1242
1333
  .project-detail-grid dt { color: var(--text-tertiary); }
1243
1334
  .project-detail-grid dd { margin: 0; overflow-wrap: anywhere; color: var(--text-primary); }
1244
- .project-inventory-actions {
1245
- display: flex;
1246
- align-items: center;
1247
- flex-wrap: wrap;
1248
- gap: var(--sp-2);
1249
- margin-top: var(--sp-4);
1250
- }
1335
+ .project-inventory-actions { display: flex; align-items: center; flex-wrap: wrap; gap: var(--sp-2); margin-top: var(--sp-4); }
1251
1336
  .project-domain-select {
1252
1337
  min-width: min(100%, 260px);
1253
1338
  padding: var(--sp-2) var(--sp-3);
1254
- border-radius: var(--radius-sm);
1255
1339
  border: 1px solid var(--border);
1340
+ border-radius: var(--radius-sm);
1256
1341
  background: var(--input-bg);
1257
1342
  color: var(--text-primary);
1258
1343
  font-family: var(--font-sans);
1259
1344
  font-size: var(--font-size-md);
1260
1345
  }
1261
- .project-guardrail-confirmation {
1262
- flex-basis: 100%;
1263
- margin-top: var(--sp-2);
1264
- }
1346
+ .project-guardrail-confirmation { flex-basis: 100%; margin-top: var(--sp-2); }
1265
1347
  .projects-pagination { margin-top: var(--sp-4); }
1348
+ .project-selection-control { display: inline-flex; align-items: center; justify-content: center; min-width: 24px; min-height: 24px; cursor: pointer; }
1349
+ .project-selection-checkbox { width: 18px; height: 18px; }
1350
+ .project-recipient-summary { min-width: 0; }
1351
+ .project-recipient-status { color: var(--text-secondary); font-size: var(--font-size-sm); }
1352
+ .project-recipient-chips { display: flex; flex-wrap: wrap; gap: var(--sp-1); padding: 0; margin: 0; list-style: none; }
1353
+ .project-recipient-chip { overflow: hidden; padding: 2px var(--sp-2); border: 1px solid var(--border); border-radius: var(--radius-pill); background: var(--surface-2); color: var(--text-primary); font-size: var(--font-size-2xs); text-overflow: ellipsis; white-space: nowrap; }
1354
+ .project-inventory-child-row { padding-left: var(--sp-5); }
1355
+ .project-inventory-cluster + .project-inventory-child .project-inventory-child-row { border-top: 1px solid var(--border); }
1266
1356
  .recipient-policy-review-section + .recipient-policy-review-section { margin-top: var(--sp-5); }
1267
1357
  .recipient-policy-review-heading { margin-bottom: var(--sp-2); }
1268
- .recipient-policy-review-status:empty { display: none; }
1269
- .recipient-policy-review-list { margin-top: var(--sp-3); }
1270
1358
  .recipient-policy-review-item .project-inventory-actions label {
1271
1359
  color: var(--text-secondary);
1272
1360
  font-size: var(--font-size-sm);
1273
1361
  font-weight: var(--font-weight-semibold);
1274
1362
  }
1275
- .recipient-policy-review-select { min-width: min(100%, 280px); }
1276
- .recipient-policy-deferred { margin-top: var(--sp-3); }
1277
- .recipient-policy-preview { margin-top: var(--sp-3); }
1363
+ .recipient-policy-review-header {
1364
+ display: flex;
1365
+ align-items: baseline;
1366
+ justify-content: space-between;
1367
+ gap: var(--sp-4);
1368
+ }
1369
+ }
1370
+ .recipient-policy-review-count {
1371
+ color: var(--text-tertiary);
1372
+ font-weight: var(--font-weight-regular);
1373
+ }
1374
+ .recipient-policy-review-status:empty { display: none; }
1375
+ .recipient-policy-review-bulk {
1376
+ display: grid;
1377
+ grid-template-columns: auto minmax(0, 1fr) auto;
1378
+ align-items: center;
1379
+ gap: var(--sp-3);
1380
+ margin: var(--sp-3) 0;
1381
+ padding: var(--sp-3);
1382
+ border: 1px solid var(--border);
1383
+ border-radius: var(--radius-md);
1384
+ background: var(--surface-2);
1385
+ }
1386
+ .recipient-policy-review-select-all,
1387
+ .recipient-policy-review-selection {
1388
+ display: inline-flex;
1389
+ align-items: center;
1390
+ gap: var(--sp-2);
1391
+ cursor: pointer;
1392
+ }
1393
+ .recipient-policy-review-select-all input,
1394
+ .recipient-policy-review-selection input { width: 18px; height: 18px; }
1395
+ .recipient-policy-review-selection-count { color: var(--text-secondary); }
1396
+ .recipient-policy-review-bulk-actions { display: flex; gap: var(--sp-2); }
1397
+ .recipient-policy-review-list {
1398
+ margin-top: var(--sp-3);
1399
+ overflow: hidden;
1400
+ border: 1px solid var(--border);
1401
+ border-radius: var(--radius-md);
1402
+ }
1403
+ .recipient-policy-review-item {
1404
+ display: grid;
1405
+ grid-template-columns: minmax(0, 1fr) 260px auto;
1406
+ align-items: center;
1407
+ column-gap: var(--sp-4);
1408
+ padding: var(--sp-3) var(--sp-4);
1409
+ background: var(--surface-1);
1410
+ }
1411
+ .recipient-policy-review-item + .recipient-policy-review-item { border-top: 1px solid var(--border); }
1412
+ .recipient-policy-review-name,
1413
+ .recipient-policy-review-actions {
1414
+ display: flex;
1415
+ align-items: center;
1416
+ flex-wrap: wrap;
1417
+ gap: var(--sp-2);
1418
+ }
1419
+ .recipient-policy-review-name > strong { font-size: var(--font-size-lg); }
1420
+ .recipient-policy-review-identity { color: var(--text-tertiary); overflow-wrap: anywhere; }
1421
+ .recipient-policy-review-meta {
1422
+ color: var(--text-secondary);
1423
+ margin-top: var(--sp-1);
1424
+ }
1425
+ .recipient-policy-review-meta .badge { margin-left: var(--sp-2); }
1426
+ .recipient-policy-review-select { min-width: 0; width: 100%; }
1427
+ .recipient-policy-review-details {
1428
+ grid-column: 1 / -1;
1429
+ padding: var(--sp-3) 0 var(--sp-1);
1430
+ }
1431
+ .recipient-policy-deferred,
1432
+ .recipient-policy-preview { margin-top: var(--sp-2); }
1278
1433
  .recipient-policy-preview-list { margin-top: var(--sp-2); }
1279
1434
  .recipient-policy-preview-list ul {
1280
1435
  margin-top: var(--sp-1);
1281
1436
  padding-left: var(--sp-5);
1282
1437
  }
1438
+ .recipient-policy-review-section { margin-top: var(--sp-5); }
1439
+ @media (max-width: 900px) {
1440
+ .recipient-policy-review-bulk { grid-template-columns: minmax(0, 1fr); }
1441
+ .recipient-policy-review-bulk-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
1442
+ .recipient-policy-review-item { grid-template-columns: minmax(0, 1fr); row-gap: var(--sp-3); }
1443
+ .recipient-policy-review-details { grid-column: 1; }
1444
+ }
1283
1445
  .project-selection-actions,
1284
1446
  .recipient-policy-management-actions,
1285
1447
  .recipient-policy-sharing-actions {
@@ -1547,6 +1709,16 @@
1547
1709
  .recipient-policy-management-details li { overflow-wrap: anywhere; }
1548
1710
  .recipient-policy-management-status:empty { display: none; }
1549
1711
  .recipient-policy-sharing-header { margin-bottom: var(--sp-4); }
1712
+ .sharing-member-preview {
1713
+ overflow-wrap: anywhere;
1714
+ }
1715
+ .sharing-member-names .sharing-member-preview {
1716
+ display: -webkit-box;
1717
+ -webkit-box-orient: vertical;
1718
+ -webkit-line-clamp: 2;
1719
+ overflow: hidden;
1720
+ }
1721
+ .sharing-member-names p { overflow-wrap: anywhere; }
1550
1722
  .recipient-policy-sharing-tabs {
1551
1723
  position: static;
1552
1724
  display: flex;
@@ -1574,6 +1746,89 @@
1574
1746
  gap: var(--sp-3);
1575
1747
  }
1576
1748
  .recipient-policy-sharing-card-title h3 { margin: 0; }
1749
+ .recipient-policy-sharing-card-header {
1750
+ display: flex;
1751
+ align-items: flex-start;
1752
+ justify-content: space-between;
1753
+ gap: var(--sp-4);
1754
+ }
1755
+ .recipient-policy-sharing-card-title { justify-content: flex-start; flex-wrap: wrap; }
1756
+ .recipient-policy-sharing-card-actions,
1757
+ .recipient-policy-sharing-card-actions .recipient-policy-sharing-actions {
1758
+ display: flex;
1759
+ align-items: center;
1760
+ justify-content: flex-end;
1761
+ gap: var(--sp-2);
1762
+ flex-wrap: wrap;
1763
+ }
1764
+ .recipient-policy-sharing-card-actions .settings-button { margin-top: 0; }
1765
+ .recipient-policy-sharing-stats {
1766
+ display: grid;
1767
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1768
+ gap: var(--sp-2);
1769
+ margin-top: var(--sp-4);
1770
+ }
1771
+ .recipient-policy-sharing-stats > div {
1772
+ display: grid;
1773
+ gap: var(--sp-1);
1774
+ min-width: 0;
1775
+ padding: var(--sp-3);
1776
+ border-radius: var(--radius-sm);
1777
+ background: var(--surface-2);
1778
+ }
1779
+ .recipient-policy-sharing-stats strong { font-size: var(--font-size-lg); }
1780
+ .recipient-policy-sharing-stats span { color: var(--text-secondary); overflow-wrap: anywhere; }
1781
+ .recipient-policy-sharing-projects,
1782
+ .recipient-policy-sharing-identity-rows,
1783
+ .recipient-policy-sharing-identity-rows > div { display: grid; gap: var(--sp-2); }
1784
+ .recipient-policy-sharing-projects,
1785
+ .recipient-policy-sharing-identity-rows { margin-top: var(--sp-4); }
1786
+ .recipient-policy-sharing-identity-rows > div + div { padding-top: var(--sp-3); border-top: 1px solid var(--border); }
1787
+ .recipient-policy-sharing-chips { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; }
1788
+ .recipient-policy-sharing-more {
1789
+ padding: 0;
1790
+ border: 0;
1791
+ background: transparent;
1792
+ color: var(--accent);
1793
+ font: inherit;
1794
+ cursor: pointer;
1795
+ }
1796
+ .recipient-policy-sharing-toolbar {
1797
+ display: flex;
1798
+ align-items: center;
1799
+ justify-content: space-between;
1800
+ gap: var(--sp-3);
1801
+ margin-bottom: var(--sp-3);
1802
+ }
1803
+ .recipient-policy-sharing-toolbar label { flex: 1; }
1804
+ .recipient-policy-sharing-toolbar input { width: 100%; }
1805
+ .recipient-policy-sharing-received-table { display: block; width: 100%; overflow: hidden; border: 1px solid var(--border); border-spacing: 0; border-radius: var(--radius-md); }
1806
+ .recipient-policy-sharing-received-table thead,
1807
+ .recipient-policy-sharing-received-table tbody { display: block; }
1808
+ .recipient-policy-sharing-received-head,
1809
+ .recipient-policy-sharing-received-row {
1810
+ display: grid;
1811
+ grid-template-columns: minmax(0, 1fr) 180px 190px 170px;
1812
+ gap: var(--sp-4);
1813
+ align-items: center;
1814
+ padding: var(--sp-3) var(--sp-4);
1815
+ }
1816
+ .recipient-policy-sharing-received-head {
1817
+ background: var(--surface-2);
1818
+ color: var(--text-tertiary);
1819
+ font-size: var(--font-size-2xs);
1820
+ font-weight: var(--font-weight-semibold);
1821
+ letter-spacing: var(--letter-spacing-wide);
1822
+ text-transform: uppercase;
1823
+ }
1824
+ .recipient-policy-sharing-received-row { border-top: 1px solid var(--border); background: var(--surface-1); }
1825
+ .recipient-policy-sharing-received-row > * { min-width: 0; overflow-wrap: anywhere; }
1826
+ .recipient-policy-sharing-received-row td { min-width: 0; padding: 0; color: var(--text-secondary); text-align: left; }
1827
+ .recipient-policy-sharing-received-row td:first-child { color: var(--text-primary); }
1828
+ .recipient-policy-sharing-received-head th { min-width: 0; padding: 0; text-align: left; }
1829
+ .recipient-policy-sharing-received-head th:nth-child(n + 3),
1830
+ .recipient-policy-sharing-received-row td:nth-child(n + 3) { text-align: right; }
1831
+ .recipient-policy-sharing-pointer { display: inline-block; margin-top: var(--sp-3); }
1577
1832
  .recipient-policy-sharing-card,
1578
1833
  .recipient-policy-sharing-card-title,
1579
1834
  .recipient-policy-sharing-details dd { min-width: 0; overflow-wrap: anywhere; }
@@ -1607,10 +1862,6 @@
1607
1862
  }
1608
1863
  .recipient-policy-sharing-details dt { color: var(--text-secondary); }
1609
1864
  .recipient-policy-sharing-details dd { margin: 0; color: var(--text-primary); }
1610
- .recipient-policy-sharing-team-card > .recipient-policy-sharing-actions + .recipient-policy-sharing-actions {
1611
- margin-top: var(--sp-2);
1612
- }
1613
-
1614
1865
  .loading-card-list { display: grid; gap: var(--sp-3); }
1615
1866
  .loading-card {
1616
1867
  padding: var(--sp-4);
@@ -1760,10 +2011,177 @@
1760
2011
  .device-identity-review-panel ul { margin: var(--sp-3) 0; padding-left: var(--sp-5); }
1761
2012
  .device-identity-review-panel .peer-actions { margin-top: var(--sp-4); }
1762
2013
 
2014
+ #devicesMount .recipient-policy-sharing-header {
2015
+ display: flex;
2016
+ align-items: flex-start;
2017
+ justify-content: space-between;
2018
+ gap: var(--sp-4);
2019
+ }
2020
+ .devices-summary-bar,
2021
+ .devices-summary-counts,
2022
+ .devices-summary-counts > span,
2023
+ .devices-identity-header,
2024
+ .devices-table-device {
2025
+ display: flex;
2026
+ align-items: center;
2027
+ }
2028
+ .devices-summary-bar {
2029
+ justify-content: space-between;
2030
+ gap: var(--sp-4);
2031
+ padding: 10px 14px;
2032
+ border-radius: var(--radius-sm);
2033
+ background: var(--surface-2);
2034
+ color: var(--text-secondary);
2035
+ font-size: var(--font-size-sm);
2036
+ }
2037
+ .devices-summary-counts { gap: var(--sp-4); flex-wrap: wrap; }
2038
+ .devices-summary-counts > span { gap: 6px; }
2039
+ .devices-coordinator-status {
2040
+ display: flex;
2041
+ align-items: center;
2042
+ gap: var(--sp-2);
2043
+ padding: var(--sp-2) var(--sp-3);
2044
+ border-radius: var(--radius-sm);
2045
+ background: var(--surface-2);
2046
+ }
2047
+ .devices-coordinator-status-spacer { flex: 1; }
2048
+ .devices-local-row {
2049
+ display: grid;
2050
+ grid-template-columns: 16px minmax(0, 1fr) auto;
2051
+ align-items: center;
2052
+ gap: var(--sp-3);
2053
+ padding: 14px var(--sp-4);
2054
+ border: 1px solid var(--border);
2055
+ border-radius: var(--radius-md);
2056
+ background: var(--surface-1);
2057
+ }
2058
+ .devices-local-copy { display: grid; gap: 2px; }
2059
+ .devices-local-copy .small { color: var(--text-tertiary); }
2060
+ .devices-empty-state {
2061
+ display: flex;
2062
+ flex-direction: column;
2063
+ align-items: center;
2064
+ gap: var(--sp-2);
2065
+ padding: 40px var(--sp-6);
2066
+ border: 1px dashed var(--border-strong);
2067
+ border-radius: var(--radius-md);
2068
+ text-align: center;
2069
+ }
2070
+ .devices-empty-state > strong { font-size: var(--font-size-lg); }
2071
+ .devices-empty-actions { display: flex; gap: var(--sp-2); margin-top: var(--sp-2); }
2072
+ .devices-pairing-panel {
2073
+ display: grid;
2074
+ gap: var(--sp-3);
2075
+ padding: var(--sp-4);
2076
+ border: 1px solid var(--border);
2077
+ border-radius: var(--radius-md);
2078
+ background: var(--surface-2);
2079
+ }
2080
+ .devices-pairing-panel p { margin: 0; color: var(--text-secondary); }
2081
+ .devices-pairing-header,
2082
+ .devices-pairing-command { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3); }
2083
+ .devices-pairing-header h3 { margin: 0; }
2084
+ .devices-pairing-command code { min-width: 0; overflow-wrap: anywhere; }
2085
+ .devices-identity-group { display: grid; gap: var(--sp-2); margin-top: var(--sp-4); }
2086
+ .devices-identity-header { align-items: baseline; justify-content: space-between; gap: var(--sp-3); }
2087
+ .devices-identity-header strong > span { color: var(--text-tertiary); font-weight: var(--font-weight-regular); }
2088
+ .devices-identity-header > .small { color: var(--text-tertiary); }
2089
+ .devices-table { width: 100%; overflow: visible; border: 1px solid var(--border); border-spacing: 0; border-radius: var(--radius-md); }
2090
+ .devices-table-head,
2091
+ .devices-table-row {
2092
+ display: grid;
2093
+ grid-template-columns: 16px minmax(0, 1fr) 160px 140px 48px;
2094
+ align-items: center;
2095
+ column-gap: var(--sp-4);
2096
+ }
2097
+ .devices-table-head {
2098
+ padding: var(--sp-2) var(--sp-4);
2099
+ background: var(--surface-2);
2100
+ color: var(--text-tertiary);
2101
+ font-size: var(--font-size-2xs);
2102
+ font-weight: var(--font-weight-medium);
2103
+ letter-spacing: 0.06em;
2104
+ text-transform: uppercase;
2105
+ }
2106
+ .devices-table th,
2107
+ .devices-table td { min-width: 0; padding: 0; text-align: left; }
2108
+ .devices-table-head { border-radius: var(--radius-md) var(--radius-md) 0 0; }
2109
+ .devices-table-row { min-width: 0; padding: var(--sp-3) var(--sp-4); border-top: 1px solid var(--border); }
2110
+ .devices-table-device { min-width: 0; gap: var(--sp-2); flex-wrap: wrap; }
2111
+ .devices-table-device strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2112
+ .devices-table-availability { color: var(--text-secondary); }
2113
+ .devices-table-version { color: var(--text-tertiary); font-family: var(--font-mono); font-size: var(--font-size-xs); }
2114
+ .devices-row-menu { position: relative; }
2115
+ .devices-row-menu > summary { list-style: none; }
2116
+ .devices-row-menu > summary::-webkit-details-marker { display: none; }
2117
+ .devices-row-menu[open] > .feed-menu-trigger { background: var(--surface-2); color: var(--text-primary); border-color: var(--border-hover); }
2118
+ .devices-row-menu > .feed-menu-panel { position: absolute; top: calc(100% + 4px); right: 0; }
2119
+ .devices-table-details { border-top: 1px solid var(--border); background: var(--surface-2); }
2120
+ .devices-table-details > td { display: grid; gap: var(--sp-3); padding: var(--sp-4) var(--sp-6); }
2121
+ .devices-table-details p { margin: 0; }
2122
+ .devices-table-details ul { margin: 0; padding-left: var(--sp-5); }
2123
+ .devices-table-details .device-identity-rebind { margin-top: 0; }
2124
+ .devices-delivered-copy-warning { margin-top: var(--sp-3); color: var(--text-secondary); }
2125
+
2126
+ @media (max-width: 900px) {
2127
+ .recipient-policy-sharing-card-header { align-items: stretch; flex-direction: column; }
2128
+ .recipient-policy-sharing-card-actions { justify-content: flex-start; }
2129
+ .recipient-policy-sharing-stats { grid-template-columns: 1fr; }
2130
+ .recipient-policy-sharing-received-head {
2131
+ position: absolute;
2132
+ width: 1px;
2133
+ height: 1px;
2134
+ padding: 0;
2135
+ margin: -1px;
2136
+ overflow: hidden;
2137
+ clip: rect(0, 0, 0, 0);
2138
+ clip-path: inset(50%);
2139
+ white-space: nowrap;
2140
+ border: 0;
2141
+ }
2142
+ .recipient-policy-sharing-received-row { grid-template-columns: 1fr 1fr; }
2143
+ .recipient-policy-sharing-received-row > td:not(:first-child)::before {
2144
+ content: attr(data-label) " ";
2145
+ display: block;
2146
+ color: var(--text-tertiary);
2147
+ font-size: var(--font-size-2xs);
2148
+ text-transform: uppercase;
2149
+ }
2150
+ .recipient-policy-sharing-received-row td:nth-child(n + 3) { text-align: left; }
2151
+ .project-inventory-table-header { display: none; }
2152
+ .project-inventory-table-row { grid-template-columns: 28px minmax(0, 1fr) auto; row-gap: var(--sp-3); }
2153
+ .project-inventory-select-cell { grid-column: 1; grid-row: 1; }
2154
+ .project-inventory-project-cell { grid-column: 2; grid-row: 1; }
2155
+ .project-inventory-row-actions { grid-column: 3; grid-row: 1; flex-wrap: wrap; }
2156
+ .project-inventory-number::before,
2157
+ .project-inventory-latest::before,
2158
+ .project-inventory-shared::before { content: attr(data-label) " "; color: var(--text-tertiary); font-size: var(--font-size-2xs); text-transform: uppercase; }
2159
+ .project-inventory-table-row > :nth-child(3) { grid-column: 2; grid-row: 2; }
2160
+ .project-inventory-table-row > :nth-child(4) { grid-column: 3; grid-row: 2; }
2161
+ .project-inventory-table-row > :nth-child(5) { grid-column: 2; grid-row: 3; }
2162
+ .project-inventory-table-row > :nth-child(6) { grid-column: 3; grid-row: 3; }
2163
+ .project-detail-grid { grid-template-columns: 1fr; }
2164
+ .devices-table-head { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); clip-path: inset(50%); white-space: nowrap; border: 0; }
2165
+ .devices-table-row { grid-template-columns: 16px minmax(0, 1fr) 48px; row-gap: var(--sp-2); }
2166
+ .devices-table-row > :nth-child(1) { grid-column: 1; grid-row: 1; }
2167
+ .devices-table-row > :nth-child(2) { grid-column: 2; grid-row: 1; }
2168
+ .devices-table-row > :nth-child(3) { grid-column: 2; grid-row: 2; }
2169
+ .devices-table-row > :nth-child(4) { grid-column: 2; grid-row: 3; }
2170
+ .devices-table-row > :nth-child(5) { grid-column: 3; grid-row: 1; }
2171
+ .devices-table-availability::before,
2172
+ .devices-table-version::before { content: attr(data-label) " "; color: var(--text-tertiary); font-family: var(--font-sans); font-size: var(--font-size-2xs); text-transform: uppercase; }
2173
+ }
2174
+
1763
2175
  @media (max-width: 720px) {
1764
- .project-inventory-row-header { align-items: center; flex-wrap: wrap; }
1765
- .project-inventory-title { flex: 1 1 calc(100% - 48px); }
1766
- .project-recipient-action { width: 100%; }
2176
+ .recipient-policy-sharing-toolbar { align-items: stretch; flex-direction: column; }
2177
+ .recipient-policy-sharing-received-row { grid-template-columns: 1fr; }
2178
+ .project-inventory-row-header { grid-template-columns: 28px minmax(0, 1fr); }
2179
+ .project-inventory-row-actions { grid-column: 2; grid-row: 2; justify-content: flex-start; }
2180
+ .project-inventory-table-row > :nth-child(3) { grid-column: 2; grid-row: 3; }
2181
+ .project-inventory-table-row > :nth-child(4) { grid-column: 2; grid-row: 4; }
2182
+ .project-inventory-table-row > :nth-child(5) { grid-column: 2; grid-row: 5; }
2183
+ .project-inventory-table-row > :nth-child(6) { grid-column: 2; grid-row: 6; }
2184
+ .project-recipient-action { width: auto; }
1767
2185
  .recipient-policy-management-dialog .modal-card { width: calc(100vw - 16px); }
1768
2186
  .recipient-policy-management-actions,
1769
2187
  .recipient-policy-sharing-responsive-actions { display: grid; grid-template-columns: 1fr; }
@@ -1785,6 +2203,16 @@
1785
2203
  .device-identity-setup-summary { align-items: stretch; flex-direction: column; }
1786
2204
  .device-identity-setup-summary .settings-button,
1787
2205
  .device-identity-review-panel .settings-button { min-height: 44px; width: 100%; }
2206
+ .devices-summary-bar,
2207
+ .devices-coordinator-status,
2208
+ .devices-pairing-header,
2209
+ .devices-pairing-command,
2210
+ .devices-identity-header,
2211
+ #devicesMount .recipient-policy-sharing-header { align-items: stretch; flex-direction: column; }
2212
+ .devices-summary-bar .settings-button,
2213
+ .devices-coordinator-status .settings-button,
2214
+ .devices-pairing-panel button { width: 100%; min-height: 44px; }
2215
+ .devices-empty-actions { align-items: stretch; flex-direction: column; width: 100%; }
1788
2216
  }
1789
2217
 
1790
2218
  /* 36×36 square icon buttons — theme toggle, settings gear. */
@@ -1932,7 +2360,9 @@
1932
2360
  transition: background-color var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard), box-shadow var(--duration-fast) var(--ease-standard);
1933
2361
  }
1934
2362
  .toggle-button:hover { background: var(--toggle-hover-bg); color: var(--text-primary); }
1935
- .toggle-button.active {
2363
+ .toggle-button.active,
2364
+ .toggle-button[data-state="checked"],
2365
+ .toggle-button[aria-checked="true"] {
1936
2366
  background: var(--accent-subtle);
1937
2367
  color: var(--accent);
1938
2368
  box-shadow: inset 0 0 0 1px var(--accent-strong);
@@ -2007,18 +2437,14 @@
2007
2437
  .feed-skeleton-chip.w-56 { width: 56px; }
2008
2438
 
2009
2439
  /* ── Feed items ────────────────────────────────────────── */
2010
- /* Design-handoff clarification (2026-04-19): feed items render with
2011
- a full-width top banner in the kind's tint, not a 4px left rail.
2012
- Banner ~28px tall, --accent-subtle bg per kind, 1px accent-strong
2013
- bottom border; kind chip sits inset left inside the banner. */
2014
-
2015
2440
  .feed-item {
2441
+ display: grid;
2442
+ grid-template-columns: max-content minmax(0, 1fr) auto;
2443
+ column-gap: var(--sp-4);
2444
+ padding: var(--sp-4) var(--sp-5);
2016
2445
  border: 1px solid var(--border);
2017
- border-radius: var(--radius-md);
2446
+ border-radius: var(--radius-lg);
2018
2447
  background: var(--surface-1);
2019
- overflow: hidden;
2020
- display: flex;
2021
- flex-direction: column;
2022
2448
  box-shadow: var(--shadow-sm);
2023
2449
  transition: transform var(--duration-fast) var(--ease-standard), border-color var(--duration-fast) var(--ease-standard), box-shadow var(--duration-fast) var(--ease-standard);
2024
2450
  }
@@ -2028,31 +2454,17 @@
2028
2454
  border-color: var(--border-hover);
2029
2455
  }
2030
2456
 
2031
- /* Kind banner — defaults to mint (feature). Per-kind overrides below. */
2032
- .feed-kind-banner {
2033
- padding: 7px var(--sp-5);
2034
- background: var(--accent-subtle);
2035
- border-bottom: 1px solid var(--accent-strong);
2036
- }
2037
- .feed-item.change .feed-kind-banner { background: var(--accent-cool-subtle); border-bottom-color: color-mix(in srgb, var(--accent-cool) 30%, transparent); }
2038
- .feed-item.bugfix .feed-kind-banner { background: var(--accent-warm-subtle); border-bottom-color: color-mix(in srgb, var(--accent-warm) 30%, transparent); }
2039
- .feed-item.refactor .feed-kind-banner { background: var(--accent-violet-subtle); border-bottom-color: color-mix(in srgb, var(--accent-violet) 30%, transparent); }
2040
- .feed-item.discovery .feed-kind-banner { background: var(--accent-steel-subtle); border-bottom-color: color-mix(in srgb, var(--accent-steel) 30%, transparent); }
2041
- .feed-item.docs .feed-kind-banner { background: var(--accent-ochre-subtle); border-bottom-color: color-mix(in srgb, var(--accent-ochre) 30%, transparent); }
2042
- .feed-item.test .feed-kind-banner { background: var(--accent-neutral-subtle); border-bottom-color: color-mix(in srgb, var(--accent-neutral) 30%, transparent); }
2043
- /* Core emits 'decision' / 'exploration' / 'session_summary' too — preserve
2044
- neutral treatments so those items aren't unstyled. */
2045
- .feed-item.decision .feed-kind-banner { background: var(--accent-neutral-subtle); border-bottom-color: color-mix(in srgb, var(--accent-neutral) 30%, transparent); }
2046
- .feed-item.exploration .feed-kind-banner { background: color-mix(in srgb, var(--text-tertiary) 12%, transparent); border-bottom-color: color-mix(in srgb, var(--text-tertiary) 24%, transparent); }
2047
- .feed-item.session_summary .feed-kind-banner { background: color-mix(in srgb, var(--accent-cool) 10%, transparent); border-bottom-color: color-mix(in srgb, var(--accent-cool) 22%, transparent); }
2048
-
2457
+ .feed-kind-rail { align-self: start; min-width: 0; }
2049
2458
  .feed-card-body {
2050
2459
  padding: var(--sp-4) var(--sp-5);
2051
2460
  display: flex;
2052
2461
  flex-direction: column;
2053
2462
  gap: var(--sp-2);
2054
2463
  }
2055
-
2464
+ .feed-item > .feed-card-body {
2465
+ padding: 0;
2466
+ min-width: 0;
2467
+ }
2056
2468
  .feed-card-header {
2057
2469
  display: flex;
2058
2470
  align-items: flex-start;
@@ -2060,22 +2472,55 @@
2060
2472
  gap: var(--sp-3);
2061
2473
  }
2062
2474
  .feed-card-header > .feed-header { flex: 1; overflow: hidden; }
2063
-
2064
- .feed-header {
2475
+ .feed-card-side {
2065
2476
  display: flex;
2066
- align-items: center;
2067
- gap: var(--sp-2);
2068
- flex-wrap: wrap;
2477
+ align-items: flex-start;
2478
+ justify-content: flex-end;
2069
2479
  min-width: 0;
2070
2480
  }
2071
-
2072
- .feed-actions {
2481
+ .feed-card-side-top {
2073
2482
  display: flex;
2074
2483
  align-items: center;
2484
+ justify-content: flex-end;
2485
+ min-width: 0;
2075
2486
  gap: var(--sp-2);
2076
- flex-shrink: 0;
2077
2487
  }
2078
2488
 
2489
+ .feed-disclosure {
2490
+ display: inline-flex;
2491
+ align-items: center;
2492
+ justify-content: center;
2493
+ width: 30px;
2494
+ height: 30px;
2495
+ min-height: 30px;
2496
+ padding: 0;
2497
+ border: 1px solid var(--border);
2498
+ border-radius: var(--radius-pill);
2499
+ background: transparent;
2500
+ color: var(--text-secondary);
2501
+ font-size: var(--font-size-sm);
2502
+ font-weight: var(--font-weight-medium);
2503
+ white-space: nowrap;
2504
+ cursor: pointer;
2505
+ transition: background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard), border-color var(--duration-fast) var(--ease-standard);
2506
+ }
2507
+ .feed-disclosure:hover {
2508
+ border-color: var(--border-hover);
2509
+ background: var(--surface-2);
2510
+ color: var(--text-primary);
2511
+ }
2512
+ .feed-disclosure:focus-visible {
2513
+ outline: 2px solid var(--accent);
2514
+ outline-offset: 2px;
2515
+ }
2516
+ .feed-disclosure-icon {
2517
+ width: 14px;
2518
+ height: 14px;
2519
+ flex: 0 0 auto;
2520
+ transition: transform var(--duration-fast) var(--ease-standard);
2521
+ }
2522
+ .feed-disclosure[aria-expanded="false"] .feed-disclosure-icon { transform: rotate(-90deg); }
2523
+
2079
2524
  .feed-menu-panel {
2080
2525
  min-width: 180px;
2081
2526
  padding: 6px;
@@ -2089,6 +2534,7 @@
2089
2534
  width: 30px;
2090
2535
  height: 30px;
2091
2536
  border: 1px solid var(--border);
2537
+ border-radius: var(--radius-pill);
2092
2538
  background: transparent;
2093
2539
  color: var(--text-tertiary);
2094
2540
  font-size: var(--font-size-2xl);
@@ -2134,25 +2580,75 @@
2134
2580
  }
2135
2581
 
2136
2582
  .feed-title {
2137
- font-weight: var(--font-weight-semibold);
2138
- font-size: var(--font-size-lg);
2139
- flex: 1;
2583
+ display: block;
2584
+ width: 100%;
2140
2585
  min-width: 0;
2141
- display: -webkit-box;
2142
- -webkit-box-orient: vertical;
2143
- -webkit-line-clamp: 2;
2144
- overflow: hidden;
2586
+ padding: 0;
2587
+ border: 0;
2588
+ background: transparent;
2589
+ color: var(--text-primary);
2590
+ font-family: var(--font-sans);
2591
+ font-size: var(--font-size-lg);
2592
+ font-weight: var(--font-weight-semibold);
2593
+ line-height: 1.35;
2594
+ text-align: left;
2145
2595
  overflow-wrap: anywhere;
2146
- word-break: break-word;
2596
+ white-space: normal;
2147
2597
  }
2148
- .feed-card-subtitle {
2149
- width: 100%;
2598
+ .feed-meta-line {
2599
+ display: flex;
2600
+ align-items: center;
2601
+ flex-wrap: wrap;
2602
+ min-width: 0;
2603
+ gap: 6px;
2604
+ color: var(--text-tertiary);
2605
+ font-size: var(--font-size-sm);
2606
+ }
2607
+ .feed-collapsed-note {
2150
2608
  color: var(--text-tertiary);
2609
+ font-size: var(--font-size-sm);
2151
2610
  }
2611
+ .feed-project { color: var(--text-secondary); }
2152
2612
  .feed-meta {
2153
2613
  color: var(--text-tertiary);
2154
2614
  font-size: var(--font-size-sm);
2155
2615
  }
2616
+ .feed-expanded-provenance {
2617
+ display: flex;
2618
+ flex-wrap: wrap;
2619
+ gap: 6px;
2620
+ }
2621
+ .feed-search-match {
2622
+ display: flex;
2623
+ min-width: 0;
2624
+ gap: var(--sp-2);
2625
+ padding: var(--sp-2) var(--sp-3);
2626
+ border-left: 2px solid var(--accent);
2627
+ background: var(--accent-subtle);
2628
+ color: var(--text-secondary);
2629
+ font-size: var(--font-size-sm);
2630
+ }
2631
+ .feed-search-match-label {
2632
+ flex-shrink: 0;
2633
+ color: var(--accent);
2634
+ font-family: var(--font-mono);
2635
+ text-transform: capitalize;
2636
+ }
2637
+ .feed-search-match > span:last-child {
2638
+ min-width: 0;
2639
+ overflow-wrap: anywhere;
2640
+ }
2641
+ .feed-detail {
2642
+ display: flex;
2643
+ flex-direction: column;
2644
+ gap: var(--sp-3);
2645
+ padding-top: var(--sp-3);
2646
+ animation: feedDisclosure var(--duration-fast) var(--ease-out);
2647
+ }
2648
+ @keyframes feedDisclosure {
2649
+ from { opacity: 0; transform: translateY(-4px); }
2650
+ to { opacity: 1; transform: translateY(0); }
2651
+ }
2156
2652
  /* Empty state renders as a terminal-output block — mono surface,
2157
2653
  blinking mint cursor — to match the codemem "warm local journal"
2158
2654
  voice and signal "this is a CLI-native tool." */
@@ -2190,12 +2686,6 @@
2190
2686
  50% { opacity: 0; }
2191
2687
  }
2192
2688
 
2193
- .feed-provenance {
2194
- display: flex;
2195
- flex-wrap: wrap;
2196
- gap: 6px;
2197
- }
2198
-
2199
2689
  /* ── Chip base ─────────────────────────────────────────── */
2200
2690
  /* Shared layout for every pill-shaped label in the viewer. Per-variant
2201
2691
  rules below only override background / color / border / typography.
@@ -2225,6 +2715,18 @@
2225
2715
  background: var(--surface-2);
2226
2716
  color: var(--text-tertiary);
2227
2717
  }
2718
+ .feed-item .feed-meta-line > *, .feed-item .feed-expanded-provenance > * {
2719
+ min-width: 0;
2720
+ max-width: 100%;
2721
+ white-space: normal;
2722
+ overflow-wrap: anywhere;
2723
+ }
2724
+ .feed-item .provenance-chip,
2725
+ .feed-item .tag-chip {
2726
+ min-height: 22px;
2727
+ padding: 2px 7px;
2728
+ border-radius: var(--radius-pill);
2729
+ }
2228
2730
  .provenance-chip.mine { background: var(--accent-subtle); color: var(--accent); border-color: rgba(43, 122, 176, 0.18); }
2229
2731
  .provenance-chip.author { color: var(--text-secondary); }
2230
2732
  .provenance-chip.private { background: rgba(140, 140, 140, 0.12); color: var(--text-secondary); }
@@ -2241,16 +2743,63 @@
2241
2743
  }
2242
2744
 
2243
2745
  .feed-body {
2746
+ min-width: 0;
2747
+ overflow-wrap: anywhere;
2244
2748
  font-size: var(--font-size-md);
2245
2749
  line-height: 1.55;
2246
2750
  color: var(--text-secondary);
2247
2751
  }
2248
- .feed-body.narrative { max-width: 88ch; }
2249
- .feed-body.clamp { display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; }
2250
- .feed-body.clamp-3 { -webkit-line-clamp: 3; }
2251
- .feed-body.clamp-5 { -webkit-line-clamp: 5; }
2252
- .feed-body.facts { display: flex; flex-direction: column; gap: 6px; }
2253
- .feed-body p { margin: 0 0 0.5em; }
2752
+ .first-run-guide {
2753
+ display: flex;
2754
+ flex-direction: column;
2755
+ gap: var(--sp-3);
2756
+ margin-bottom: var(--sp-4);
2757
+ padding: var(--sp-4);
2758
+ border: 1px solid var(--border);
2759
+ border-radius: var(--radius-md);
2760
+ background: var(--surface-1);
2761
+ }
2762
+ .first-run-guide-header {
2763
+ display: flex;
2764
+ align-items: flex-start;
2765
+ justify-content: space-between;
2766
+ gap: var(--sp-3);
2767
+ }
2768
+ .first-run-guide h2 { margin: 0; font-size: var(--font-size-lg); }
2769
+ .first-run-guide p { margin: 3px 0 0; color: var(--text-secondary); }
2770
+ .first-run-guide-list {
2771
+ display: grid;
2772
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2773
+ gap: var(--sp-2);
2774
+ margin: 0;
2775
+ padding: 0;
2776
+ list-style: none;
2777
+ }
2778
+ .first-run-guide-list li {
2779
+ display: flex;
2780
+ align-items: center;
2781
+ justify-content: space-between;
2782
+ gap: var(--sp-2);
2783
+ min-width: 0;
2784
+ padding: var(--sp-2);
2785
+ border: 1px solid var(--border);
2786
+ border-radius: var(--radius-sm);
2787
+ }
2788
+ .first-run-guide-list li.is-complete { background: var(--surface-2); }
2789
+ .first-run-guide-status { display: flex; align-items: flex-start; gap: var(--sp-2); min-width: 0; }
2790
+ .first-run-guide-status > span:last-child { display: flex; flex-direction: column; min-width: 0; }
2791
+ .first-run-guide-status .small { color: var(--text-tertiary); }
2792
+ .feed-empty-actions { display: flex; flex-wrap: wrap; gap: var(--sp-2); }
2793
+
2794
+ @media (max-width: 755px) {
2795
+ .first-run-guide-header,
2796
+ .first-run-guide-list li { align-items: stretch; flex-direction: column; }
2797
+ .first-run-guide-list { grid-template-columns: 1fr; }
2798
+ .first-run-guide button,
2799
+ .feed-empty-actions .settings-button { width: 100%; }
2800
+ }
2801
+ .feed-body.narrative { max-width: 76ch; line-height: 1.65; color: var(--text-secondary); }
2802
+ .feed-body p { margin: 0 0 0.75em; }
2254
2803
  .feed-body p:last-child { margin-bottom: 0; }
2255
2804
  .feed-body ul, .feed-body ol { margin: 0.3em 0; padding-left: 1.3em; list-style: revert; }
2256
2805
  .feed-body li { margin: 0.15em 0; padding: 0; border: none; border-radius: 0; background: none; font-size: inherit; }
@@ -2262,61 +2811,99 @@
2262
2811
  .feed-body em { font-style: italic; }
2263
2812
  .feed-body a { color: var(--accent); text-decoration: underline; }
2264
2813
  .feed-body h1, .feed-body h2, .feed-body h3, .feed-body h4 { font-size: 1em; font-weight: var(--font-weight-semibold); margin: 0.6em 0 0.3em; }
2814
+ .feed-body .feed-semantic-section {
2815
+ --feed-section-color: var(--accent);
2816
+ --feed-section-tint: var(--accent-subtle);
2817
+ margin: var(--sp-5) 0;
2818
+ padding-bottom: var(--sp-3);
2819
+ border-radius: 0 var(--radius-md) var(--radius-md) 0;
2820
+ background: color-mix(in srgb, var(--feed-section-color) 6%, transparent);
2821
+ overflow: hidden;
2822
+ }
2823
+ .feed-body .feed-semantic-section:first-child { margin-top: 0; }
2824
+ .feed-body .feed-semantic-section:last-child { margin-bottom: 0; }
2825
+ .feed-body .feed-semantic-section > :not(.feed-section-heading) {
2826
+ margin-left: var(--sp-3);
2827
+ margin-right: var(--sp-3);
2828
+ }
2829
+ .feed-body .feed-section-heading {
2830
+ margin: 0 0 var(--sp-3);
2831
+ padding: 5px var(--sp-3);
2832
+ border-left: 3px solid var(--feed-section-color);
2833
+ border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
2834
+ background: var(--feed-section-tint);
2835
+ color: var(--feed-section-color);
2836
+ font-family: var(--font-mono);
2837
+ font-size: var(--font-size-xs);
2838
+ font-weight: var(--font-weight-semibold);
2839
+ letter-spacing: 0.07em;
2840
+ text-transform: uppercase;
2841
+ }
2842
+ .feed-body .feed-section-request { --feed-section-color: var(--accent-cool); --feed-section-tint: var(--accent-cool-subtle); }
2843
+ .feed-body .feed-section-completed { --feed-section-color: var(--accent); --feed-section-tint: var(--accent-subtle); }
2844
+ .feed-body .feed-section-learned { --feed-section-color: var(--accent-violet); --feed-section-tint: var(--accent-violet-subtle); }
2845
+ .feed-body .feed-section-investigated { --feed-section-color: var(--accent-steel); --feed-section-tint: var(--accent-steel-subtle); }
2846
+ .feed-body .feed-section-next-steps { --feed-section-color: var(--accent-ochre); --feed-section-tint: var(--accent-ochre-subtle); }
2847
+ .feed-body .feed-section-notes { --feed-section-color: var(--accent-neutral); --feed-section-tint: var(--accent-neutral-subtle); }
2265
2848
  .feed-body blockquote { border-left: 3px solid var(--border); margin: 0.5em 0; padding-left: 0.8em; color: var(--text-tertiary); }
2266
2849
 
2267
- .summary-section {
2268
- display: flex;
2269
- flex-direction: column;
2270
- gap: 4px;
2271
- padding: 6px 0;
2272
- border-bottom: 1px solid var(--border);
2850
+ .feed-pack-facts {
2851
+ max-width: 76ch;
2852
+ margin-top: var(--sp-2);
2853
+ padding-top: var(--sp-3);
2854
+ border-top: 1px solid var(--border);
2855
+ }
2856
+ .feed-pack-facts-label {
2857
+ margin-bottom: var(--sp-2);
2858
+ color: var(--text-tertiary);
2859
+ font-family: var(--font-mono);
2860
+ font-size: var(--font-size-2xs);
2861
+ font-weight: var(--font-weight-medium);
2862
+ letter-spacing: 0.08em;
2863
+ text-transform: uppercase;
2273
2864
  }
2274
- .summary-section:last-child { border-bottom: none; }
2275
- .summary-section-label { font-size: var(--font-size-xs); font-weight: var(--font-weight-semibold); text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-tertiary); }
2276
- .summary-section-content { font-size: var(--font-size-md); line-height: 1.5; color: var(--text-primary); }
2865
+ .feed-pack-facts .feed-body ul { display: grid; gap: 4px; margin: 0; }
2866
+ .feed-pack-facts .feed-body li::marker { color: var(--accent); }
2277
2867
 
2278
- .feed-footer {
2868
+ .feed-card-footer {
2279
2869
  display: flex;
2280
- flex-wrap: wrap;
2281
- gap: var(--sp-2);
2282
- align-items: flex-start;
2283
- justify-content: space-between;
2870
+ margin-top: var(--sp-2);
2871
+ padding-top: var(--sp-3);
2872
+ border-top: 1px solid var(--border);
2873
+ }
2874
+
2875
+ .feed-visibility-label {
2876
+ display: inline-flex;
2877
+ min-width: 0;
2284
2878
  }
2285
- .feed-footer-left { display: flex; flex-direction: column; gap: 6px; }
2286
- .feed-footer-right { display: flex; align-items: center; gap: var(--sp-2); flex-shrink: 0; }
2287
- .feed-visibility-controls { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
2288
2879
  .feed-visibility-select {
2289
- min-width: 180px;
2880
+ display: inline-flex;
2881
+ align-items: center;
2882
+ justify-content: space-between;
2883
+ gap: var(--sp-2);
2884
+ width: 124px;
2885
+ min-width: 0;
2886
+ min-height: 30px;
2290
2887
  padding: 6px 10px;
2291
- border-radius: var(--radius-md);
2888
+ border-radius: var(--radius-pill);
2292
2889
  border: 1px solid var(--border);
2293
2890
  background: var(--input-bg);
2294
2891
  color: var(--text-primary);
2295
2892
  font-family: var(--font-sans);
2296
2893
  font-size: var(--font-size-sm);
2894
+ letter-spacing: normal;
2895
+ text-transform: none;
2297
2896
  }
2298
- .feed-visibility-note { width: 100%; max-width: 60ch; font-size: var(--font-size-sm); color: var(--text-tertiary); }
2299
-
2300
- .feed-expand {
2301
- border: 1px solid var(--border);
2302
- background: transparent;
2303
- color: var(--text-tertiary);
2304
- padding: 3px 10px;
2305
- font-size: var(--font-size-xs);
2306
- transition: background var(--duration-fast) var(--ease-standard), color var(--duration-fast) var(--ease-standard);
2307
- }
2308
- .feed-expand:hover { background: var(--accent-subtle); color: var(--accent); }
2309
- .feed-expand:focus-visible {
2310
- outline: 2px solid var(--accent);
2311
- outline-offset: 2px;
2312
- box-shadow: 0 0 0 4px var(--focus-ring);
2313
- }
2897
+ .feed-visibility-content { z-index: 30; }
2314
2898
 
2315
2899
  .feed-tags { display: flex; flex-wrap: wrap; gap: 6px; }
2316
2900
  /* File paths render as compact pill-tags in their own row — the actual
2317
2901
  filename is informative and earns its horizontal space. */
2318
2902
  .feed-files { display: flex; flex-wrap: wrap; gap: 6px; }
2319
2903
  .feed-file {
2904
+ max-width: 100%;
2905
+ overflow: hidden;
2906
+ text-overflow: ellipsis;
2320
2907
  padding: 2px 8px;
2321
2908
  border-radius: var(--radius-sm);
2322
2909
  background: var(--surface-2);
@@ -2330,7 +2917,7 @@
2330
2917
 
2331
2918
  /* ── Pills & badges ────────────────────────────────────── */
2332
2919
 
2333
- /* Kind chip — lives inside .feed-kind-banner. Tint + colored border
2920
+ /* Kind chip — lives inside .feed-kind-rail. Tint + colored border
2334
2921
  match the banner per kind so the chip reads as part of the strip. */
2335
2922
  .kind-chip {
2336
2923
  padding: 2px 10px;
@@ -2430,55 +3017,31 @@
2430
3017
 
2431
3018
  .health-update-banner {
2432
3019
  display: flex;
2433
- align-items: flex-start;
2434
- gap: var(--sp-3);
2435
- padding: var(--sp-4);
3020
+ align-items: center;
3021
+ flex-wrap: wrap;
3022
+ gap: var(--sp-2);
3023
+ padding: 10px var(--sp-4);
2436
3024
  border: 1px solid var(--border);
2437
- border-radius: var(--radius-lg);
3025
+ border-radius: var(--radius-md);
2438
3026
  background: var(--surface-1);
2439
- box-shadow: var(--shadow-sm);
2440
- }
2441
- .health-update-banner--current {
2442
- border-color: color-mix(in srgb, var(--status-healthy) 34%, var(--border));
2443
- background: color-mix(in srgb, var(--status-healthy) 7%, var(--surface-1));
2444
- }
2445
- .health-update-banner--available,
2446
- .health-update-banner--stale {
2447
- border-color: color-mix(in srgb, var(--accent-warm) 34%, var(--border));
2448
- background: color-mix(in srgb, var(--accent-warm-subtle) 34%, var(--surface-1));
2449
- }
2450
- .health-update-banner--unavailable {
2451
- border-color: color-mix(in srgb, var(--status-attention) 34%, var(--border));
2452
- background: color-mix(in srgb, var(--status-attention) 7%, var(--surface-1));
3027
+ color: var(--text-secondary);
2453
3028
  }
2454
3029
  .health-update-icon {
2455
- width: 20px;
2456
- height: 20px;
2457
- flex: 0 0 20px;
2458
- margin-top: 2px;
3030
+ width: 16px;
3031
+ height: 16px;
3032
+ flex: 0 0 16px;
2459
3033
  color: var(--accent);
2460
3034
  }
2461
- .health-update-banner--current .health-update-icon { color: var(--status-healthy); }
2462
- .health-update-banner--available .health-update-icon,
2463
- .health-update-banner--stale .health-update-icon { color: var(--accent-warm); }
2464
- .health-update-banner--unavailable .health-update-icon { color: var(--status-attention); }
2465
- .health-update-copy { min-width: 0; }
2466
- .health-update-copy h2 { font-size: var(--font-size-lg); line-height: 1.3; }
2467
- .health-update-copy p { margin-top: var(--sp-1); color: var(--text-secondary); }
2468
- .health-update-guidance { display: grid; gap: 3px; }
2469
- .health-update-guidance-label {
2470
- color: var(--text-tertiary);
2471
- font-size: var(--font-size-xs);
2472
- font-weight: var(--font-weight-semibold);
2473
- letter-spacing: 0.06em;
2474
- text-transform: uppercase;
3035
+ .health-update-source {
3036
+ background: var(--accent-cool-subtle);
3037
+ color: var(--accent-cool);
2475
3038
  }
2476
- .health-update-guidance code {
2477
- color: var(--text-primary);
2478
- font-family: var(--font-mono);
2479
- font-size: var(--font-size-sm);
3039
+ .health-update-detail { flex: 1 1 280px; min-width: 0; }
3040
+ .health-update-command {
3041
+ flex: 1 1 100%;
2480
3042
  overflow-wrap: anywhere;
2481
3043
  }
3044
+ .health-update-copy-button { margin-left: auto; }
2482
3045
 
2483
3046
  .health-actions, .sync-actions {
2484
3047
  display: grid;
@@ -3056,7 +3619,8 @@
3056
3619
  animation: sync-attention-target var(--duration-attention) var(--ease-out);
3057
3620
  }
3058
3621
  .settings-button:disabled,
3059
- .settings-button[aria-disabled="true"] {
3622
+ .settings-button[aria-disabled="true"],
3623
+ .settings-save[aria-disabled="true"] {
3060
3624
  opacity: 0.55;
3061
3625
  cursor: not-allowed;
3062
3626
  }
@@ -3530,6 +4094,18 @@
3530
4094
  }
3531
4095
  .modal-body { display: flex; flex-direction: column; gap: var(--sp-3); flex: 1; min-height: 0; overflow-y: auto; padding-right: 6px; }
3532
4096
  .modal-footer { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3); flex-shrink: 0; padding-top: var(--sp-2); border-top: 1px solid var(--border); }
4097
+ .settings-footer-copy { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; }
4098
+ .settings-link-button {
4099
+ padding: 0;
4100
+ border: 0;
4101
+ background: transparent;
4102
+ color: var(--text-secondary);
4103
+ font: inherit;
4104
+ font-size: var(--font-size-sm);
4105
+ text-decoration: underline;
4106
+ text-underline-offset: 2px;
4107
+ }
4108
+ .settings-link-button:hover { color: var(--text-primary); }
3533
4109
  /* ── Toast (Radix Toast-backed) ───────────────────────── */
3534
4110
  /* Fixed viewport anchored bottom-right. Each toast is a surface-card
3535
4111
  with a severity-tinted left accent keyed to .toast-{variant}. */
@@ -3690,6 +4266,23 @@
3690
4266
  color: var(--accent);
3691
4267
  background: var(--accent-subtle);
3692
4268
  }
4269
+ .advanced-heading { margin: 0 0 var(--sp-4); font-size: var(--font-size-2xl); }
4270
+ #advancedTabsMount .settings-tabs { grid-template-columns: repeat(2, minmax(0, 1fr)); }
4271
+ .advanced-sync-status,
4272
+ .advanced-sync-status-label {
4273
+ display: flex;
4274
+ align-items: center;
4275
+ }
4276
+ .advanced-sync-status { justify-content: space-between; gap: var(--sp-4); }
4277
+ .advanced-sync-status-label { gap: var(--sp-3); }
4278
+ .advanced-sync-status-label .xl { font-size: var(--font-size-xl); }
4279
+ .advanced-administration-sections { margin-bottom: var(--sp-3); }
4280
+
4281
+ @media (max-width: 720px) {
4282
+ .advanced-sync-status { align-items: stretch; flex-direction: column; }
4283
+ .advanced-sync-status .section-actions { align-items: stretch; flex-direction: column; }
4284
+ .advanced-sync-status .settings-save { width: 100%; }
4285
+ }
3693
4286
  .settings-panel { display: flex; flex-direction: column; gap: var(--sp-3); }
3694
4287
  .settings-panel[data-state="inactive"] { display: none; }
3695
4288
  .settings-panel[hidden] { display: none; }
@@ -3849,6 +4442,19 @@
3849
4442
  }
3850
4443
 
3851
4444
  .field { display: flex; flex-direction: column; gap: 6px; font-size: var(--font-size-md); }
4445
+ .settings-outcome {
4446
+ margin: 0;
4447
+ color: var(--text-tertiary);
4448
+ font-size: var(--font-size-xs);
4449
+ line-height: 1.45;
4450
+ }
4451
+ .settings-outcome > summary,
4452
+ .settings-config-details > summary { cursor: pointer; color: var(--text-secondary); }
4453
+ .settings-outcome > summary:focus-visible,
4454
+ .settings-config-details > summary:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
4455
+ .settings-outcome-details { display: grid; gap: var(--sp-1); padding-top: var(--sp-2); }
4456
+ .settings-config-details { margin-top: var(--sp-4); font-size: var(--font-size-xs); overflow-wrap: anywhere; }
4457
+ .settings-outcome strong { color: var(--text-secondary); font-weight: var(--font-weight-medium); }
3852
4458
  .field input:not([type="checkbox"]), .field select, .field textarea { padding: var(--sp-2) var(--sp-3); border-radius: var(--radius-sm); border: 1px solid var(--border); background: var(--input-bg); font-family: var(--font-sans); font-size: var(--font-size-md); color: var(--text-primary); }
3853
4459
  .settings-select-trigger {
3854
4460
  display: inline-flex;
@@ -3909,7 +4515,9 @@
3909
4515
  justify-content: flex-start;
3910
4516
  gap: 10px;
3911
4517
  flex: 0 1 auto;
4518
+ flex-wrap: wrap;
3912
4519
  }
4520
+ .settings-switch-row .settings-outcome { flex-basis: 100%; }
3913
4521
  .settings-switch-copy {
3914
4522
  color: var(--text-primary);
3915
4523
  line-height: 1.35;
@@ -3972,6 +4580,19 @@
3972
4580
  transition: background var(--duration-fast) var(--ease-standard);
3973
4581
  }
3974
4582
  .settings-save:hover { background: var(--control-hover-bg); }
4583
+ /* Text actions share geometry; icon, tab, and segmented controls retain theirs. */
4584
+ .settings-button,
4585
+ .settings-save {
4586
+ display: inline-flex;
4587
+ align-items: center;
4588
+ justify-content: center;
4589
+ box-sizing: border-box;
4590
+ min-height: 36px;
4591
+ padding: 8px 12px;
4592
+ border-radius: var(--radius-md);
4593
+ font-size: var(--font-size-sm);
4594
+ line-height: 18px;
4595
+ }
3975
4596
  .sync-dialog-card {
3976
4597
  width: min(560px, 100%);
3977
4598
  }
@@ -4119,8 +4740,8 @@
4119
4740
  50% { transform: scale(1.3); opacity: 0.5; }
4120
4741
  }
4121
4742
 
4122
- /* newPulse: fresh feed items pulse their kind-banner bottom border
4123
- from accent-strong to transparent once on mount. The class is
4743
+ /* newPulse: fresh feed items pulse the card outline from accent-strong
4744
+ to transparent once on mount. The class is
4124
4745
  applied by feed.ts only while state.newItemKeys holds the item's
4125
4746
  key (700ms useEffect then clears it). Skipped entirely under
4126
4747
  prefers-reduced-motion so the ambient accessibility pass still
@@ -4157,12 +4778,9 @@
4157
4778
  .tab-btn { flex-shrink: 0; }
4158
4779
  .tab-panel { padding: var(--sp-4); }
4159
4780
  .summary-row { grid-template-columns: 1fr; }
4160
- .feed-card-header { flex-wrap: wrap; }
4161
- .feed-actions { width: 100%; justify-content: flex-end; }
4781
+ .health-tile-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
4162
4782
  .actor-row { align-items: stretch; flex-direction: column; }
4163
4783
  .peer-scope-row { grid-template-columns: 1fr; }
4164
- .feed-visibility-controls { align-items: stretch; }
4165
- .feed-visibility-select { width: 100%; }
4166
4784
  .actor-actions { justify-content: flex-start; }
4167
4785
  .legacy-review-header { flex-direction: column; }
4168
4786
  .legacy-review-group-main { grid-template-columns: 1fr; }
@@ -4171,6 +4789,31 @@
4171
4789
  .legacy-review-bulk-row .settings-save { width: 100%; }
4172
4790
  }
4173
4791
 
4792
+ @media (max-width: 755px) {
4793
+ .feed-item {
4794
+ grid-template-columns: minmax(0, 1fr) auto;
4795
+ row-gap: var(--sp-3);
4796
+ padding: var(--sp-4);
4797
+ }
4798
+ .feed-kind-rail { grid-column: 1; grid-row: 1; align-self: center; }
4799
+ .feed-card-side { display: contents; }
4800
+ .feed-card-side-top { grid-column: 2; grid-row: 1; }
4801
+ .feed-item > .feed-card-body { grid-column: 1 / -1; grid-row: 2; }
4802
+ .feed-meta-line { max-width: 100%; }
4803
+ .feed-file { max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
4804
+ }
4805
+
4806
+ @media print {
4807
+ .feed-menu-trigger,
4808
+ .feed-disclosure { display: none !important; }
4809
+ .feed-item {
4810
+ break-inside: avoid;
4811
+ grid-template-columns: max-content minmax(0, 1fr) auto;
4812
+ box-shadow: none;
4813
+ }
4814
+ .feed-item:hover { transform: none; box-shadow: none; }
4815
+ }
4816
+
4174
4817
  @media (max-width: 720px) {
4175
4818
  .header-title { font-size: var(--font-size-xl); }
4176
4819
  }
@@ -4189,6 +4832,10 @@
4189
4832
  .recipient-policy-sharing-team-setup-row { grid-template-columns: 1fr auto; }
4190
4833
  .recipient-policy-sharing-team-setup-label { grid-column: 1 / -1; }
4191
4834
  .recipient-policy-sharing-team-setup-separator { display: none; }
4835
+ .feed-item { grid-template-columns: minmax(0, 1fr); }
4836
+ .feed-kind-rail { grid-column: 1; grid-row: 1; }
4837
+ .feed-card-side-top { grid-column: 1; grid-row: 2; justify-self: end; }
4838
+ .feed-item > .feed-card-body { grid-column: 1; grid-row: 3; }
4192
4839
  }
4193
4840
 
4194
4841
  /* ──────────────────────────────────────────────────────────────────
@@ -4221,7 +4868,9 @@
4221
4868
 
4222
4869
  @media (prefers-reduced-motion: reduce) {
4223
4870
  .health-loading-icon,
4224
- .viewer-reconnect-spinner {
4871
+ .viewer-reconnect-spinner,
4872
+ .feed-detail,
4873
+ .feed-item.new-item {
4225
4874
  animation: none;
4226
4875
  }
4227
4876
  *, *::before, *::after {
@@ -4512,15 +5161,21 @@
4512
5161
  <!-- ── Tab: Health ─────────────────────────────────────── -->
4513
5162
  <div class="tab-panel" id="tab-health" hidden>
4514
5163
  <div id="healthUpdateBanner" hidden></div>
4515
- <div class="card" style="animation-delay: 0s">
4516
- <div class="section-header">
4517
- <h2>System health</h2>
5164
+ <section class="card health-system-card" id="healthSystemCard" aria-label="System health" tabindex="-1">
5165
+ <div class="health-system-header">
5166
+ <div id="healthStatus">
5167
+ <div class="health-status-summary">
5168
+ <div class="health-status-copy">
5169
+ <strong class="health-status-word status-unknown">Assessing</strong>
5170
+ <div class="section-meta" id="healthMeta" role="status" aria-live="polite" aria-atomic="true">Assessing health signals…</div>
5171
+ </div>
5172
+ </div>
5173
+ </div>
4518
5174
  <button class="settings-button" id="healthOpenDiagnostics" type="button">View diagnostics</button>
4519
5175
  </div>
4520
- <div class="section-meta" id="healthMeta" role="status" aria-live="polite" aria-atomic="true">Assessing health signals…</div>
4521
5176
  <div class="health-actions" id="healthActions"></div>
4522
- <div class="grid-2" id="healthGrid"></div>
4523
- </div>
5177
+ <div id="healthGrid"></div>
5178
+ </section>
4524
5179
 
4525
5180
  <div class="summary-row">
4526
5181
  <div class="card" style="animation-delay: 0.05s">
@@ -4541,20 +5196,17 @@
4541
5196
  <div id="recipientPolicyReviewMount" hidden></div>
4542
5197
  <div class="card" style="animation-delay: 0s">
4543
5198
  <div class="section-header">
4544
- <div>
4545
- <h2>Projects</h2>
4546
- <div class="section-meta">Choose exact Projects, then share them with Teams or Identities.</div>
4547
- </div>
5199
+ <h2>Projects</h2>
4548
5200
  <div class="section-actions project-selection-actions">
4549
5201
  <span class="section-meta" id="projectsSelectionStatus" role="status" aria-live="polite">0 Projects selected.</span>
4550
- <button class="settings-button project-selection-target" id="projectsShareSelected" type="button" disabled>Share selected</button>
5202
+ <button class="settings-button project-selection-target" id="projectsShareSelected" type="button" disabled>Add Teams or Identities</button>
4551
5203
  </div>
4552
5204
  </div>
4553
5205
  <div class="projects-toolbar">
4554
- <input class="feed-search" id="projectsSearch" placeholder="Search project, path, git remote, or workspace id…" />
4555
- <select id="projectsStatusFilter" aria-label="Project status filter"></select>
5206
+ <input class="feed-search" id="projectsSearch" placeholder="Search by name, path, or git remote…" />
5207
+ <select id="projectsStatusFilter" aria-label="Filter projects"></select>
5208
+ <span class="small" id="projectsInventoryMeta">Loading project inventory…</span>
4556
5209
  </div>
4557
- <div class="section-meta" id="projectsInventoryMeta">Loading project inventory…</div>
4558
5210
  <div class="project-inventory-skeleton" id="projectsInventorySkeleton" role="status" aria-label="Loading project inventory" aria-busy="true">
4559
5211
  <div class="project-inventory-skeleton-row">
4560
5212
  <div class="project-inventory-skeleton-line title"></div>
@@ -4574,8 +5226,7 @@
4574
5226
  </div>
4575
5227
  </div>
4576
5228
  <details class="card project-advanced-surface">
4577
- <summary>Advanced Project invitations</summary>
4578
- <div class="section-meta">Use the legacy invitation flow when the recipient does not have an Identity yet.</div>
5229
+ <summary>Invite someone</summary>
4579
5230
  <div class="section-actions" id="projectShareFlowMount"></div>
4580
5231
  </details>
4581
5232
  </div>
@@ -4592,39 +5243,33 @@
4592
5243
 
4593
5244
  <!-- ── Tab: Advanced ───────────────────────────────────── -->
4594
5245
  <div class="tab-panel" id="tab-advanced" hidden>
4595
- <div class="card">
4596
- <div class="section-header advanced-legacy-header">
4597
- <div>
4598
- <h2>Advanced</h2>
4599
- <div class="section-meta">Device sync, legacy Team and Space setup, and coordinator administration.</div>
4600
- </div>
4601
- <div class="section-actions" aria-label="Advanced sections" role="group">
4602
- <button class="settings-button" id="advancedSyncButton" type="button" aria-pressed="true">Sync</button>
4603
- <button class="settings-button" id="advancedTeamsButton" type="button" aria-pressed="false">Coordinator Administration</button>
4604
- </div>
4605
- </div>
4606
- </div>
5246
+ <h2 class="advanced-heading">Advanced</h2>
5247
+ <div id="advancedTabsMount"></div>
4607
5248
 
4608
- <div id="advancedSyncContent">
5249
+ <div id="advancedSyncContent" role="tabpanel" aria-labelledby="advancedSyncButton">
4609
5250
 
4610
5251
  <!-- Sub-view: main Sync surface. Toggled by syncViewController and
4611
5252
  app compatibility routing for canonical and legacy hashes. -->
4612
5253
  <div id="syncMainView">
4613
5254
 
5255
+ <section class="card advanced-sync-status">
5256
+ <div id="syncAdvancedStatusMount"></div>
5257
+ <div class="section-actions">
5258
+ <button class="settings-button" id="syncNowButton">Sync now</button>
5259
+ <a class="sync-subview-link" href="#advanced/sync/diagnostics">View diagnostics &rarr;</a>
5260
+ <button class="settings-save" id="syncTurnOnButton" type="button" hidden>Turn on sync</button>
5261
+ </div>
5262
+ </section>
5263
+
4614
5264
  <!-- 1. Needs attention + team setup/status -->
4615
5265
  <div class="card" id="syncTeamCard">
4616
5266
  <div class="section-header">
4617
5267
  <div class="section-header-title">
4618
- <h2>Team sync</h2>
5268
+ <h2>Join a team</h2>
4619
5269
  <span class="sync-online-badge" id="syncOnlineBadge" hidden role="status" aria-live="polite"></span>
4620
5270
  </div>
4621
- <div class="section-actions">
4622
- <button class="settings-button" id="syncShareProjectsButton" type="button">Share projects</button>
4623
- <button class="settings-button" id="syncNowButton">Sync now</button>
4624
- <a class="sync-subview-link" href="#advanced/sync/diagnostics">View diagnostics &rarr;</a>
4625
- </div>
4626
5271
  </div>
4627
- <div class="section-meta" id="syncTeamMeta">Start with the next step below, then review team status and device details.</div>
5272
+ <div class="section-meta" id="syncTeamMeta" hidden></div>
4628
5273
  <div class="sync-skeleton" id="syncTeamSkeleton" role="status" aria-label="Loading team sync">
4629
5274
  <div class="sync-skeleton-line medium"></div>
4630
5275
  <div class="sync-skeleton-block"></div>
@@ -4634,10 +5279,9 @@
4634
5279
  <div id="syncSetupPanel">
4635
5280
  <div id="syncJoinSection">
4636
5281
  <h3 class="settings-group-title">Join a team</h3>
4637
- <div class="section-meta">Have an invite? Paste it here.</div>
4638
- <div class="actor-create-row" id="syncJoinPanel">
4639
- <label for="syncJoinInvite" class="sr-only">Team invite or pairing payload</label>
4640
- <textarea class="feed-search" id="syncJoinInvite" placeholder="Paste a team invite or device pairing payload"></textarea>
5282
+ <div class="actor-create-row" id="syncJoinPanel" hidden>
5283
+ <label for="syncJoinInvite" class="sr-only">Invite or pairing code</label>
5284
+ <textarea class="feed-search" id="syncJoinInvite" placeholder="Invite or pairing code" rows="2"></textarea>
4641
5285
  <div id="syncProjectInviteReview" role="region" aria-labelledby="syncProjectInviteReviewHeading" hidden>
4642
5286
  <h4 id="syncProjectInviteReviewHeading" tabindex="-1">Review project invitation</h4>
4643
5287
  <div class="section-meta" id="syncProjectInviteContext"></div>
@@ -4646,6 +5290,15 @@
4646
5290
  <label for="syncRecipientDeviceName">This device</label>
4647
5291
  <input class="feed-search" id="syncRecipientDeviceName" maxlength="120" />
4648
5292
  </div>
5293
+ <div id="syncPairingReview" role="region" aria-labelledby="syncPairingReviewHeading" hidden>
5294
+ <h4 id="syncPairingReviewHeading" tabindex="-1">Review device pairing</h4>
5295
+ <p>Check these details with the other device. Accept only a device you trust.</p>
5296
+ <dl>
5297
+ <dt>Device ID</dt><dd id="syncPairingDeviceId" style="overflow-wrap: anywhere"></dd>
5298
+ <dt>Fingerprint</dt><dd id="syncPairingFingerprint" style="overflow-wrap: anywhere"></dd>
5299
+ <dt>Addresses</dt><dd id="syncPairingAddresses" style="white-space: pre-wrap; overflow-wrap: anywhere"></dd>
5300
+ </dl>
5301
+ </div>
4649
5302
  <button class="settings-button" id="syncJoinButton">Review invite</button>
4650
5303
  </div>
4651
5304
  </div>
@@ -4661,19 +5314,24 @@
4661
5314
  </div>
4662
5315
  </div>
4663
5316
 
4664
- <!-- 2. People & devices -->
5317
+ <!-- 2. People and devices -->
4665
5318
  <div class="card" style="animation-delay: 0.04s">
4666
- <h2>People &amp; devices</h2>
5319
+ <div class="section-header">
5320
+ <h2>People and devices</h2>
5321
+ <a class="sync-subview-link" href="#sharing" id="advancedSharingLink">Invite someone via Sharing &rarr;</a>
5322
+ </div>
4667
5323
 
4668
- <h3 class="settings-group-title">Project sharing</h3>
4669
- <div class="section-meta" id="syncProjectShareOperationsMeta">Loading project sharing status…</div>
4670
- <div class="actor-list" id="syncProjectShareOperations" aria-live="polite"></div>
5324
+ <div id="syncSharingReview" hidden>
5325
+ <h3 class="settings-group-title" style="margin-top: 20px">What teammates will receive</h3>
5326
+ <div class="section-meta" id="syncSharingReviewMeta"></div>
5327
+ <div class="actor-list" id="syncSharingReviewList"></div>
5328
+ </div>
4671
5329
 
4672
- <details class="project-inventory-details" style="margin-top: 20px">
5330
+ <details class="project-inventory-details" id="manualDeviceIdentityControls" style="margin-top: 20px">
4673
5331
  <summary>Manual device and identity controls</summary>
4674
5332
 
4675
5333
  <h3 class="settings-group-title">People</h3>
4676
- <div class="section-meta" id="syncActorsMeta">Create and rename people here. Assign each device below.</div>
5334
+ <div class="section-meta" id="syncActorsMeta"></div>
4677
5335
  <div class="actor-create-row">
4678
5336
  <div class="sync-labeled-field">
4679
5337
  <label for="syncActorCreateInput" class="sync-labeled-field-caption">Person name</label>
@@ -4694,21 +5352,6 @@
4694
5352
  <div class="device-row-skeleton"><span class="skel-pip"></span><span class="skel-name"></span><span class="skel-chip"></span></div>
4695
5353
  <div class="device-row-skeleton"><span class="skel-pip"></span><span class="skel-name"></span><span class="skel-chip"></span></div>
4696
5354
  </div>
4697
-
4698
- <h3 class="settings-group-title" style="margin-top: 20px">Connect another device</h3>
4699
- <div class="section-meta">Share this command on the new device to join it to the team.</div>
4700
- <div class="actor-create-row">
4701
- <div id="syncPairingDisclosureMount" style="display: contents"></div>
4702
- </div>
4703
- <div id="syncPairingPanelMount" style="display: contents"></div>
4704
- </details>
4705
-
4706
- <div id="syncSharingReview" hidden>
4707
- <h3 class="settings-group-title" style="margin-top: 20px">What teammates will receive</h3>
4708
- <div class="section-meta" id="syncSharingReviewMeta"></div>
4709
- <div class="actor-list" id="syncSharingReviewList"></div>
4710
- </div>
4711
-
4712
5355
  <div id="syncLegacyClaims" hidden>
4713
5356
  <h3 class="settings-group-title" style="margin-top: 20px">Legacy device history</h3>
4714
5357
  <div class="peer-meta" id="syncLegacyClaimsMeta"></div>
@@ -4718,6 +5361,7 @@
4718
5361
  <button class="sync-legacy-button" id="syncLegacyClaimButton">Attach device history</button>
4719
5362
  </div>
4720
5363
  </div>
5364
+ </details>
4721
5365
  </div>
4722
5366
 
4723
5367
  </div><!-- /#syncMainView -->
@@ -4739,7 +5383,8 @@
4739
5383
  </label>
4740
5384
  </div>
4741
5385
  </div>
4742
- <div class="section-meta" id="syncMeta">Use this surface for sync debugging and recent attempt details.</div>
5386
+ <div class="section-meta" id="syncPrimaryStatusDetail"></div>
5387
+ <div class="section-meta" id="syncMeta"></div>
4743
5388
  <div class="sync-skeleton" id="syncDiagSkeleton" role="status" aria-label="Loading diagnostics">
4744
5389
  <div class="sync-skeleton-line long"></div>
4745
5390
  <div class="sync-skeleton-line medium"></div>
@@ -4754,30 +5399,21 @@
4754
5399
  </div><!-- /#syncDiagnosticsView -->
4755
5400
  </div><!-- /#advancedSyncContent -->
4756
5401
 
4757
- <div id="advancedTeamsContent" hidden>
5402
+ <div id="advancedTeamsContent" role="tabpanel" aria-labelledby="advancedTeamsButton" hidden>
4758
5403
  <div class="card">
4759
- <aside
4760
- aria-labelledby="coordinatorAdminLegacyNoticeTitle"
4761
- class="coordinator-admin-inline-warning coordinator-admin-legacy-notice"
4762
- role="note"
4763
- >
4764
- <div class="coordinator-admin-legacy-notice-copy">
4765
- <h3 id="coordinatorAdminLegacyNoticeTitle" tabindex="-1">Looking for Team settings?</h3>
4766
- <div class="peer-submeta">
4767
- Manage Team members, names, and Project access in Sharing. Use this page only for older coordinator groups and Spaces.
4768
- </div>
4769
- </div>
4770
- <button class="settings-button" id="coordinatorAdminOpenSharing" type="button">Open Sharing</button>
4771
- </aside>
4772
- <details class="advanced-administration-disclosure" open>
4773
- <summary>Coordinator Administration</summary>
4774
- <div class="section-meta">Technical coordinator groups, Spaces, enrollment, and recovery controls.</div>
5404
+ <div class="section-header">
5405
+ <h2 id="coordinatorAdminHeading" tabindex="-1">Coordinator administration</h2>
5406
+ <a class="sync-subview-link" href="#sharing" id="advancedTeamSettingsLink">Team settings &rarr;</a>
5407
+ </div>
5408
+ <div class="section-meta advanced-administration-sections">Groups · Invites · Join requests · Devices</div>
5409
+ <details class="advanced-administration-disclosure" id="advancedAdministrationDisclosure">
5410
+ <summary>Legacy administration</summary>
4775
5411
  <div id="coordinatorAdminMount"></div>
4776
5412
  </details>
4777
5413
  </div>
4778
5414
  </div>
4779
5415
  </div>
4780
5416
 
4781
- <script src="/assets/app.js?v=38689c7c378b"></script>
5417
+ <script src="/assets/app.js?v=cfd33fb491d8"></script>
4782
5418
  </body>
4783
5419
  </html>