@codemem/server 0.46.3 → 0.47.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
@@ -8,7 +8,6 @@
8
8
  <link rel="preconnect" href="https://fonts.googleapis.com" />
9
9
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
10
  <link href="https://fonts.googleapis.com/css2?family=Geist:wght@300;400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet" />
11
- <script src="https://unpkg.com/lucide@latest"></script>
12
11
  <script>
13
12
  (function() {
14
13
  try {
@@ -31,13 +30,46 @@
31
30
  1. Dark defaults from tokens.css (:root).
32
31
  2. Light overrides from themes.css ([data-theme="light"] +
33
32
  @media (prefers-color-scheme: light)).
34
- 3. Low-specificity native controls from controls.css.
33
+ 3. Shared controls from controls.css.
35
34
  4. The component-level rules below, which reference the tokens
36
35
  via var(--...).
37
36
  Edit packages/ui/static/tokens.css and themes.css to change the
38
- token surface, controls.css for native-control defaults, and this
37
+ token surface, controls.css for shared-control defaults, and this
39
38
  <style> block for per-component styling. */
40
39
 
40
+ /* My Account profile: keep these rules local to the linked card. */
41
+ .my-account-profile {
42
+ display: flex;
43
+ align-items: center;
44
+ gap: 0.75rem;
45
+ }
46
+ .my-account-profile-text {
47
+ min-width: 0;
48
+ overflow-wrap: anywhere;
49
+ }
50
+ .my-account-profile-text p { margin: 0.25rem 0 0; }
51
+ .my-account-technical-details { overflow-wrap: anywhere; }
52
+ .my-account-avatar {
53
+ position: relative;
54
+ display: inline-flex;
55
+ align-items: center;
56
+ justify-content: center;
57
+ flex: 0 0 3rem;
58
+ width: 3rem;
59
+ height: 3rem;
60
+ border: 1px solid var(--border);
61
+ border-radius: 50%;
62
+ overflow: hidden;
63
+ font-weight: 600;
64
+ }
65
+ .my-account-avatar img {
66
+ position: absolute;
67
+ inset: 0;
68
+ width: 100%;
69
+ height: 100%;
70
+ object-fit: cover;
71
+ }
72
+
41
73
  /* ── Reset & base ──────────────────────────────────────── */
42
74
 
43
75
  *, *::before, *::after { box-sizing: border-box; margin: 0; }
@@ -973,9 +1005,6 @@
973
1005
  below only override padding / sizing / colors / typography.
974
1006
  Markup stays unchanged; each variant class continues to work
975
1007
  standalone. */
976
- .btn,
977
- .settings-button,
978
- .sync-legacy-button,
979
1008
  .feed-menu-trigger,
980
1009
  .feed-expand {
981
1010
  display: inline-flex;
@@ -991,10 +1020,6 @@
991
1020
  border: 1px solid var(--control-border);
992
1021
  background: var(--control-bg);
993
1022
  color: var(--control-text);
994
- padding: 5px 12px;
995
- min-width: 28px;
996
- min-height: 28px;
997
- font-size: var(--font-size-sm);
998
1023
  transition: background var(--duration-fast) var(--ease-standard), border-color var(--duration-fast) var(--ease-standard);
999
1024
  }
1000
1025
  .settings-button:hover {
@@ -1200,21 +1225,8 @@
1200
1225
  /* ── Selects / inputs ──────────────────────────────────── */
1201
1226
 
1202
1227
  .project-filter {
1203
- padding: 5px 10px;
1204
- border-radius: var(--radius-sm);
1205
- border: 1px solid var(--border);
1206
- background: var(--input-bg);
1207
- color: var(--text-primary);
1208
- font-family: var(--font-sans);
1209
- font-size: var(--font-size-sm);
1210
- cursor: pointer;
1211
- transition: border-color var(--duration-fast) var(--ease-standard);
1212
- }
1213
- .project-filter:hover { border-color: var(--border-hover); }
1214
- .project-filter:focus {
1215
- outline: none;
1216
- border-color: var(--accent);
1217
- box-shadow: 0 0 0 3px var(--focus-ring);
1228
+ min-width: 96px;
1229
+ max-width: 240px;
1218
1230
  }
1219
1231
 
1220
1232
  .projects-toolbar {
@@ -1301,12 +1313,7 @@
1301
1313
  .project-inventory-badges:empty { display: none; }
1302
1314
  .project-inventory-row-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: var(--sp-2); }
1303
1315
  .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; }
1316
+ .project-row-menu { flex: 0 0 auto; }
1310
1317
  .project-inventory-details { background: var(--surface-2); }
1311
1318
  .project-inventory-details-row,
1312
1319
  .project-inventory-details-cell { display: block; min-width: 0; }
@@ -1334,14 +1341,8 @@
1334
1341
  .project-detail-grid dd { margin: 0; overflow-wrap: anywhere; color: var(--text-primary); }
1335
1342
  .project-inventory-actions { display: flex; align-items: center; flex-wrap: wrap; gap: var(--sp-2); margin-top: var(--sp-4); }
1336
1343
  .project-domain-select {
1337
- min-width: min(100%, 260px);
1338
- padding: var(--sp-2) var(--sp-3);
1339
- border: 1px solid var(--border);
1340
- border-radius: var(--radius-sm);
1341
- background: var(--input-bg);
1342
- color: var(--text-primary);
1343
- font-family: var(--font-sans);
1344
- font-size: var(--font-size-md);
1344
+ --select-width: auto;
1345
+ --select-min-width: min(100%, 260px);
1345
1346
  }
1346
1347
  .project-guardrail-confirmation { flex-basis: 100%; margin-top: var(--sp-2); }
1347
1348
  .projects-pagination { margin-top: var(--sp-4); }
@@ -1349,8 +1350,6 @@
1349
1350
  .project-selection-checkbox { width: 18px; height: 18px; }
1350
1351
  .project-recipient-summary { min-width: 0; }
1351
1352
  .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
1353
  .project-inventory-child-row { padding-left: var(--sp-5); }
1355
1354
  .project-inventory-cluster + .project-inventory-child .project-inventory-child-row { border-top: 1px solid var(--border); }
1356
1355
  .recipient-policy-review-section + .recipient-policy-review-section { margin-top: var(--sp-5); }
@@ -1366,7 +1365,6 @@
1366
1365
  justify-content: space-between;
1367
1366
  gap: var(--sp-4);
1368
1367
  }
1369
- }
1370
1368
  .recipient-policy-review-count {
1371
1369
  color: var(--text-tertiary);
1372
1370
  font-weight: var(--font-weight-regular);
@@ -1423,7 +1421,6 @@
1423
1421
  margin-top: var(--sp-1);
1424
1422
  }
1425
1423
  .recipient-policy-review-meta .badge { margin-left: var(--sp-2); }
1426
- .recipient-policy-review-select { min-width: 0; width: 100%; }
1427
1424
  .recipient-policy-review-details {
1428
1425
  grid-column: 1 / -1;
1429
1426
  padding: var(--sp-3) 0 var(--sp-1);
@@ -1475,12 +1472,15 @@
1475
1472
  list-style: none;
1476
1473
  }
1477
1474
  .project-recipient-chip {
1475
+ overflow: hidden;
1478
1476
  padding: 3px 9px;
1479
1477
  border: 1px solid var(--border);
1480
1478
  border-radius: var(--radius-pill);
1481
1479
  background: var(--surface-2);
1482
1480
  color: var(--text-primary);
1483
1481
  font-size: var(--font-size-xs);
1482
+ text-overflow: ellipsis;
1483
+ white-space: nowrap;
1484
1484
  }
1485
1485
  .project-advanced-administration { margin-top: var(--sp-3); }
1486
1486
  .project-advanced-surface summary,
@@ -1559,8 +1559,6 @@
1559
1559
  }
1560
1560
  .legacy-team-device-row label { font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold); }
1561
1561
  .legacy-team-device-evidence { display: grid; gap: var(--sp-1); }
1562
- .legacy-team-device-select { box-sizing: border-box; width: 100%; min-width: 0; max-width: 100%; margin: 0; }
1563
- .legacy-team-device-select:disabled { opacity: 0.55; cursor: not-allowed; }
1564
1562
  .legacy-team-device-actions { display: flex; flex-wrap: wrap; gap: var(--sp-2); }
1565
1563
  .legacy-team-project-list {
1566
1564
  display: grid;
@@ -1595,8 +1593,6 @@
1595
1593
  }
1596
1594
  .legacy-team-project-row-content > * { min-width: 0; max-width: 100%; overflow-wrap: anywhere; }
1597
1595
  .legacy-team-project-row label { font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold); }
1598
- .legacy-team-project-select { box-sizing: border-box; width: 100%; min-width: 0; max-width: 100%; margin: 0; }
1599
- .legacy-team-project-select:disabled { opacity: 0.55; cursor: not-allowed; }
1600
1596
  .legacy-team-setup-row-needs-attention {
1601
1597
  border-color: var(--accent);
1602
1598
  background: var(--accent-subtle);
@@ -2003,8 +1999,6 @@
2003
1999
  .device-identity-rebind legend { padding: 0 var(--sp-2); font-weight: var(--font-weight-semibold); }
2004
2000
  .device-identity-setup-card label,
2005
2001
  .device-identity-rebind label { display: flex; align-items: center; gap: var(--sp-2); }
2006
- .device-identity-setup-card select,
2007
- .device-identity-rebind select { width: 100%; min-height: 36px; }
2008
2002
  .device-identity-rebind { margin-top: var(--sp-4); }
2009
2003
  .device-identity-rebind-review { display: grid; gap: var(--sp-3); padding-top: var(--sp-2); }
2010
2004
  .device-identity-review-panel { margin-top: var(--sp-4); }
@@ -2113,11 +2107,6 @@
2113
2107
  .devices-table-version { color: var(--text-tertiary); font-family: var(--font-mono); font-size: var(--font-size-xs); }
2114
2108
  .devices-table-sync { display: grid; gap: 2px; color: var(--text-tertiary); font-size: var(--font-size-xs); }
2115
2109
  .devices-table-sync strong { color: var(--text-secondary); font-weight: var(--font-weight-medium); }
2116
- .devices-row-menu { position: relative; }
2117
- .devices-row-menu > summary { list-style: none; }
2118
- .devices-row-menu > summary::-webkit-details-marker { display: none; }
2119
- .devices-row-menu[open] > .feed-menu-trigger { background: var(--surface-2); color: var(--text-primary); border-color: var(--border-hover); }
2120
- .devices-row-menu > .feed-menu-panel { position: absolute; top: calc(100% + 4px); right: 0; }
2121
2110
  .devices-table-details { border-top: 1px solid var(--border); background: var(--surface-2); }
2122
2111
  .devices-table-details > td { display: grid; gap: var(--sp-3); padding: var(--sp-4) var(--sp-6); }
2123
2112
  .devices-table-details p { margin: 0; }
@@ -2221,8 +2210,8 @@
2221
2210
 
2222
2211
  /* 36×36 square icon buttons — theme toggle, settings gear. */
2223
2212
  .icon-button {
2224
- width: 36px;
2225
- height: 36px;
2213
+ width: var(--control-button-height);
2214
+ height: var(--control-button-height);
2226
2215
  padding: 0;
2227
2216
  display: inline-flex;
2228
2217
  align-items: center;
@@ -2309,14 +2298,6 @@
2309
2298
  transition: border-color var(--duration-fast) var(--ease-standard), box-shadow var(--duration-fast) var(--ease-standard);
2310
2299
  }
2311
2300
  .feed-search::placeholder { color: var(--text-tertiary); }
2312
- .feed-search:focus { border-color: var(--accent); box-shadow: 0 0 0 3px var(--focus-ring); }
2313
- .feed-search.legacy-team-device-select,
2314
- .feed-search.legacy-team-project-select {
2315
- box-sizing: border-box;
2316
- width: 100%;
2317
- min-width: 0;
2318
- max-width: 100%;
2319
- }
2320
2301
 
2321
2302
  .feed-inspector-files {
2322
2303
  width: 100%;
@@ -2335,10 +2316,6 @@
2335
2316
  transition: border-color var(--duration-fast) var(--ease-standard), box-shadow var(--duration-fast) var(--ease-standard);
2336
2317
  }
2337
2318
  .feed-inspector-files::placeholder { color: var(--text-tertiary); }
2338
- .feed-inspector-files:focus {
2339
- border-color: var(--accent);
2340
- box-shadow: 0 0 0 3px var(--focus-ring);
2341
- }
2342
2319
 
2343
2320
  .feed-toggle {
2344
2321
  display: inline-flex;
@@ -2527,11 +2504,14 @@
2527
2504
 
2528
2505
  .feed-menu-panel {
2529
2506
  min-width: 180px;
2530
- padding: 6px;
2531
- border-radius: var(--radius-lg);
2507
+ max-width: min(420px, var(--radix-dropdown-menu-content-available-width));
2508
+ max-height: var(--radix-dropdown-menu-content-available-height);
2509
+ overflow-y: auto;
2510
+ padding: var(--popup-padding);
2511
+ border-radius: var(--popup-radius);
2532
2512
  border: 1px solid var(--border);
2533
2513
  background: var(--surface-1);
2534
- box-shadow: var(--shadow-md);
2514
+ box-shadow: var(--popup-shadow);
2535
2515
  z-index: 24;
2536
2516
  }
2537
2517
  .feed-menu-trigger {
@@ -2557,29 +2537,40 @@
2557
2537
  box-shadow: 0 0 0 4px var(--focus-ring);
2558
2538
  }
2559
2539
  .feed-menu-item {
2540
+ border: 0;
2541
+ background: transparent;
2542
+ font-family: inherit;
2543
+ text-align: left;
2560
2544
  display: flex;
2561
2545
  align-items: center;
2562
2546
  width: 100%;
2563
- min-height: 36px;
2547
+ min-height: var(--control-button-height);
2564
2548
  padding: 8px 10px;
2565
2549
  border-radius: var(--radius-md);
2566
2550
  color: var(--text-primary);
2567
2551
  font-size: var(--font-size-md);
2568
2552
  cursor: pointer;
2569
2553
  user-select: none;
2554
+ white-space: normal;
2555
+ overflow-wrap: anywhere;
2570
2556
  outline: none;
2571
2557
  }
2572
- .feed-menu-item[data-highlighted] {
2558
+ .feed-menu-item:not([data-disabled]):not(:disabled):hover,
2559
+ .feed-menu-item:not([data-disabled]):not(:disabled):focus-visible,
2560
+ .feed-menu-item:not([data-disabled]):not(:disabled)[data-highlighted] {
2573
2561
  background: var(--surface-2);
2574
2562
  }
2575
- .feed-menu-item[data-disabled] {
2576
- color: var(--text-tertiary);
2577
- cursor: default;
2578
- }
2579
2563
  .feed-menu-item.danger {
2580
2564
  color: var(--accent-warm);
2581
2565
  }
2582
- .feed-menu-item.danger[data-highlighted] {
2566
+ .feed-menu-item[data-disabled],
2567
+ .feed-menu-item:disabled {
2568
+ color: var(--text-tertiary);
2569
+ cursor: default;
2570
+ }
2571
+ .feed-menu-item.danger:not([data-disabled]):not(:disabled):hover,
2572
+ .feed-menu-item.danger:not([data-disabled]):not(:disabled):focus-visible,
2573
+ .feed-menu-item.danger:not([data-disabled]):not(:disabled)[data-highlighted] {
2583
2574
  background: rgba(212, 100, 46, 0.1);
2584
2575
  }
2585
2576
 
@@ -2908,24 +2899,14 @@
2908
2899
  min-width: 0;
2909
2900
  }
2910
2901
  .feed-visibility-select {
2911
- display: inline-flex;
2912
- align-items: center;
2913
- justify-content: space-between;
2914
- gap: var(--sp-2);
2915
2902
  width: 124px;
2916
- min-width: 0;
2917
2903
  min-height: 30px;
2918
2904
  padding: 6px 10px;
2919
2905
  border-radius: var(--radius-pill);
2920
- border: 1px solid var(--border);
2921
- background: var(--input-bg);
2922
- color: var(--text-primary);
2923
- font-family: var(--font-sans);
2924
2906
  font-size: var(--font-size-sm);
2925
2907
  letter-spacing: normal;
2926
2908
  text-transform: none;
2927
2909
  }
2928
- .feed-visibility-content { z-index: 30; }
2929
2910
 
2930
2911
  .feed-tags { display: flex; flex-wrap: wrap; gap: 6px; }
2931
2912
  /* File paths render as compact pill-tags in their own row — the actual
@@ -3345,7 +3326,16 @@
3345
3326
  .peer-scope-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-2); }
3346
3327
  .peer-scope-editor { display: grid; gap: 8px; }
3347
3328
  .peer-scope-chips { display: flex; flex-wrap: wrap; gap: 6px; min-height: 32px; align-items: flex-start; padding: 8px 10px; margin: 0; list-style: none; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface-2); }
3348
- .peer-scope-chip { padding: 4px 8px; background: rgba(43, 122, 176, 0.12); color: var(--accent); font-size: var(--font-size-sm); }
3329
+ .peer-scope-chip {
3330
+ min-width: 0;
3331
+ max-width: 100%;
3332
+ white-space: normal;
3333
+ overflow-wrap: anywhere;
3334
+ padding: 4px 8px;
3335
+ background: rgba(43, 122, 176, 0.12);
3336
+ color: var(--accent);
3337
+ font-size: var(--font-size-sm);
3338
+ }
3349
3339
  .peer-scope-chip.empty { background: transparent; color: var(--text-tertiary); border-style: dashed; border-color: var(--border); }
3350
3340
 
3351
3341
  /* ProjectScopePicker — selected chips on top, an "Add project"
@@ -3414,11 +3404,11 @@
3414
3404
  display: grid;
3415
3405
  grid-template-rows: auto 1fr;
3416
3406
  gap: 4px;
3417
- padding: 6px;
3407
+ padding: var(--popup-padding);
3418
3408
  background: var(--surface-1);
3419
3409
  border: 1px solid var(--border);
3420
- border-radius: var(--radius-md);
3421
- box-shadow: var(--shadow-lg, 0 10px 15px -3px rgba(0, 0, 0, 0.3));
3410
+ border-radius: var(--popup-radius);
3411
+ box-shadow: var(--popup-shadow);
3422
3412
  z-index: 50;
3423
3413
  }
3424
3414
  /* Vanilla-DOM popover (peer-scope) anchors inline under its trigger;
@@ -3442,10 +3432,6 @@
3442
3432
  font: inherit;
3443
3433
  font-size: var(--font-size-md);
3444
3434
  }
3445
- .project-scope-picker-search:focus {
3446
- outline: 2px solid var(--accent);
3447
- outline-offset: 1px;
3448
- }
3449
3435
  .project-scope-picker-results {
3450
3436
  margin: 0;
3451
3437
  padding: 4px 0;
@@ -3732,89 +3718,11 @@
3732
3718
  max-width: 100%;
3733
3719
  flex: 1 1 320px;
3734
3720
  }
3735
- .sync-radix-select-trigger {
3736
- display: inline-flex;
3737
- align-items: center;
3738
- justify-content: space-between;
3739
- gap: 8px;
3740
- width: 100%;
3741
- text-align: left;
3742
- }
3743
- .sync-radix-select-trigger > span:first-child {
3744
- min-width: 0;
3745
- overflow: hidden;
3746
- text-overflow: ellipsis;
3747
- white-space: nowrap;
3748
- }
3749
- .sync-radix-select-icon {
3750
- color: var(--text-tertiary);
3751
- flex: 0 0 auto;
3752
- }
3753
- .sync-radix-select-content {
3754
- z-index: 30;
3755
- min-width: var(--radix-select-trigger-width);
3756
- max-width: min(420px, calc(100vw - 24px));
3757
- overflow: hidden;
3758
- border: 1px solid var(--border);
3759
- border-radius: var(--radius-md);
3760
- background: var(--surface-1);
3761
- box-shadow: var(--shadow-lg);
3762
- }
3763
- .sync-radix-select-viewport {
3764
- padding: 6px;
3765
- }
3766
- .sync-radix-select-item {
3767
- position: relative;
3768
- display: flex;
3769
- align-items: center;
3770
- justify-content: space-between;
3771
- gap: 12px;
3772
- min-height: 36px;
3773
- padding: 8px 12px;
3774
- border-radius: var(--radius-sm);
3775
- color: var(--text-primary);
3776
- font-family: var(--font-sans);
3777
- font-size: var(--font-size-md);
3778
- cursor: pointer;
3779
- user-select: none;
3780
- }
3781
- .sync-radix-select-item[data-highlighted] {
3782
- outline: none;
3783
- background: var(--accent-subtle);
3784
- color: var(--accent);
3785
- }
3786
- .sync-radix-select-item[data-disabled] {
3787
- opacity: 0.45;
3788
- cursor: default;
3789
- }
3790
- .sync-radix-select-indicator {
3791
- color: var(--accent);
3792
- flex: 0 0 auto;
3793
- }
3794
3721
  .sync-legacy-claim-row { margin-top: 12px; gap: 12px; align-items: center; flex-wrap: wrap; }
3795
- .sync-legacy-select {
3796
- padding: 8px 12px;
3797
- border-radius: var(--radius-md);
3798
- border: 1px solid var(--border);
3799
- background: var(--input-bg);
3800
- color: var(--text-primary);
3801
- font-family: var(--font-sans);
3802
- font-size: var(--font-size-md);
3803
- cursor: pointer;
3804
- transition: border-color var(--duration-fast) var(--ease-standard), box-shadow var(--duration-fast) var(--ease-standard);
3805
- }
3806
- .sync-legacy-select:hover { border-color: var(--border-hover); }
3807
- .sync-legacy-select:focus {
3808
- outline: none;
3809
- border-color: var(--accent);
3810
- box-shadow: 0 0 0 3px var(--focus-ring);
3811
- }
3812
3722
  .sync-legacy-button {
3813
3723
  border: 1px solid var(--control-border);
3814
3724
  background: var(--control-bg);
3815
3725
  color: var(--control-text);
3816
- padding: 8px 14px;
3817
- font-size: var(--font-size-md);
3818
3726
  font-weight: var(--font-weight-semibold);
3819
3727
  transition: background var(--duration-fast) var(--ease-standard), border-color var(--duration-fast) var(--ease-standard), transform var(--duration-fast) var(--ease-standard);
3820
3728
  }
@@ -3831,23 +3739,6 @@
3831
3739
  cursor: default;
3832
3740
  transform: none;
3833
3741
  }
3834
- .sync-actor-select {
3835
- padding: 8px 12px;
3836
- border-radius: var(--radius-md);
3837
- border: 1px solid var(--border);
3838
- background: var(--input-bg);
3839
- color: var(--text-primary);
3840
- font-family: var(--font-sans);
3841
- font-size: var(--font-size-md);
3842
- cursor: pointer;
3843
- transition: border-color var(--duration-fast) var(--ease-standard), box-shadow var(--duration-fast) var(--ease-standard);
3844
- }
3845
- .sync-actor-select:hover { border-color: var(--border-hover); }
3846
- .sync-actor-select:focus {
3847
- outline: none;
3848
- border-color: var(--accent);
3849
- box-shadow: 0 0 0 3px var(--focus-ring);
3850
- }
3851
3742
  .peer-meta { font-size: var(--font-size-md); color: var(--text-tertiary); font-feature-settings: 'tnum' 1; }
3852
3743
  .peer-addresses { font-family: var(--font-mono); font-size: var(--font-size-sm); color: var(--text-tertiary); letter-spacing: 0.02em; }
3853
3744
  .attempts-list { margin-top: var(--sp-3); display: grid; gap: 6px; font-size: var(--font-size-md); color: var(--text-tertiary); }
@@ -3921,16 +3812,6 @@
3921
3812
  flex-shrink: 0;
3922
3813
  }
3923
3814
  .diagnostics-controls label { display: grid; gap: 5px; color: var(--text-secondary); font-size: var(--font-size-sm); }
3924
- .diagnostics-controls select {
3925
- width: 100%;
3926
- min-height: 36px;
3927
- border: 1px solid var(--border);
3928
- border-radius: var(--radius-md);
3929
- padding: 6px 10px;
3930
- background: var(--input-bg);
3931
- color: var(--text-primary);
3932
- }
3933
- .diagnostics-controls select:focus-visible,
3934
3815
  .diagnostics-new-events:focus-visible,
3935
3816
  .diagnostics-recovery:focus-visible {
3936
3817
  outline: 2px solid var(--accent);
@@ -4053,6 +3934,7 @@
4053
3934
  timestamps, full file paths). Mono by default since most hints
4054
3935
  are paths / timestamps; callers can override per instance. */
4055
3936
  .tooltip-content {
3937
+ position: relative;
4056
3938
  background: var(--surface-1);
4057
3939
  border: 1px solid var(--border);
4058
3940
  border-radius: var(--radius-sm);
@@ -4521,56 +4403,6 @@
4521
4403
  .settings-config-details { margin-top: var(--sp-4); font-size: var(--font-size-xs); overflow-wrap: anywhere; }
4522
4404
  .settings-outcome strong { color: var(--text-secondary); font-weight: var(--font-weight-medium); }
4523
4405
  .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); }
4524
- .settings-select-trigger {
4525
- display: inline-flex;
4526
- align-items: center;
4527
- justify-content: space-between;
4528
- gap: 8px;
4529
- width: 100%;
4530
- padding: var(--sp-2) var(--sp-3);
4531
- border-radius: var(--radius-sm);
4532
- border: 1px solid var(--border);
4533
- background: var(--input-bg);
4534
- color: var(--text-primary);
4535
- font-family: var(--font-sans);
4536
- font-size: var(--font-size-md);
4537
- text-align: left;
4538
- }
4539
- .settings-select-trigger:hover { border-color: var(--border-hover); }
4540
- .settings-select-trigger:focus {
4541
- outline: none;
4542
- border-color: var(--accent);
4543
- box-shadow: 0 0 0 3px var(--focus-ring);
4544
- }
4545
- .settings-select-content {
4546
- z-index: 30;
4547
- min-width: var(--radix-select-trigger-width);
4548
- overflow: hidden;
4549
- border: 1px solid var(--border);
4550
- border-radius: var(--radius-md);
4551
- background: var(--surface-1);
4552
- box-shadow: var(--shadow-lg);
4553
- }
4554
- .settings-select-viewport { padding: 6px; }
4555
- .settings-select-item {
4556
- min-height: 36px;
4557
- display: flex;
4558
- align-items: center;
4559
- justify-content: space-between;
4560
- gap: 12px;
4561
- padding: 8px 12px;
4562
- border-radius: var(--radius-sm);
4563
- color: var(--text-primary);
4564
- font-family: var(--font-sans);
4565
- font-size: var(--font-size-md);
4566
- cursor: pointer;
4567
- user-select: none;
4568
- }
4569
- .settings-select-item[data-highlighted] {
4570
- outline: none;
4571
- background: var(--accent-subtle);
4572
- color: var(--accent);
4573
- }
4574
4406
  .field-checkbox { flex-direction: row; align-items: center; gap: 8px; }
4575
4407
  .field-checkbox input[type="checkbox"] { width: 14px; height: 14px; margin: 0; }
4576
4408
  .field-checkbox label { margin: 0; }
@@ -4637,30 +4469,20 @@
4637
4469
  border: 1px solid var(--control-border);
4638
4470
  background: var(--control-bg);
4639
4471
  color: var(--control-text);
4640
- padding: var(--sp-2) var(--sp-4);
4641
- border-radius: var(--radius-md);
4642
- font-family: var(--font-sans);
4643
- font-size: var(--font-size-sm);
4644
4472
  cursor: pointer;
4645
4473
  transition: background var(--duration-fast) var(--ease-standard);
4646
4474
  }
4647
4475
  .settings-save:hover { background: var(--control-hover-bg); }
4648
- /* Text actions share geometry; icon, tab, and segmented controls retain theirs. */
4649
- .settings-button,
4650
- .settings-save {
4651
- display: inline-flex;
4652
- align-items: center;
4653
- justify-content: center;
4654
- box-sizing: border-box;
4655
- min-height: 36px;
4656
- padding: 8px 12px;
4657
- border-radius: var(--radius-md);
4658
- font-size: var(--font-size-sm);
4659
- line-height: 18px;
4660
- }
4661
4476
  .sync-dialog-card {
4662
4477
  width: min(560px, 100%);
4663
4478
  }
4479
+ fieldset.sync-dialog-stack {
4480
+ border: 0;
4481
+ margin: 0;
4482
+ padding: 0;
4483
+ min-width: 0;
4484
+ }
4485
+ fieldset.sync-dialog-stack > legend { padding: 0; }
4664
4486
  .sync-dialog-actions {
4665
4487
  display: flex;
4666
4488
  gap: var(--sp-2);
@@ -4678,19 +4500,14 @@
4678
4500
  font-size: var(--font-size-md);
4679
4501
  box-sizing: border-box;
4680
4502
  }
4681
- .sync-dialog-input:focus {
4682
- border-color: var(--accent);
4683
- outline: 2px solid var(--focus-ring);
4684
- outline-offset: 1px;
4685
- }
4686
4503
  .autocomplete-popover {
4687
4504
  background: var(--surface-1, var(--bg-elevated));
4688
4505
  border: 1px solid var(--border);
4689
- border-radius: var(--radius-sm);
4690
- box-shadow: 0 12px 32px rgba(0, 0, 0, 0.35);
4506
+ border-radius: var(--popup-radius);
4507
+ box-shadow: var(--popup-shadow);
4691
4508
  max-height: 260px;
4692
4509
  overflow-y: auto;
4693
- padding: 4px;
4510
+ padding: var(--popup-padding);
4694
4511
  z-index: 120;
4695
4512
  }
4696
4513
  .autocomplete-listbox {
@@ -4734,10 +4551,16 @@
4734
4551
  }
4735
4552
  .sync-dialog-radio-list {
4736
4553
  display: grid;
4554
+ min-width: 0;
4555
+ margin: 0;
4556
+ padding: 0;
4557
+ border: 0;
4737
4558
  gap: var(--sp-2);
4738
4559
  }
4560
+ .sync-dialog-radio-list legend { max-width: 100%; overflow-wrap: anywhere; }
4739
4561
  .sync-dialog-radio-option {
4740
4562
  display: flex;
4563
+ min-width: 0;
4741
4564
  align-items: center;
4742
4565
  gap: 10px;
4743
4566
  padding: 10px 12px;
@@ -4747,18 +4570,20 @@
4747
4570
  cursor: pointer;
4748
4571
  transition: border-color var(--duration-fast) var(--ease-standard), background var(--duration-fast) var(--ease-standard);
4749
4572
  }
4750
- .recipient-policy-management-choice-copy { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
4573
+ .sync-dialog-choice-copy { display: flex; flex-direction: column; gap: 2px; min-width: 0; overflow-wrap: anywhere; }
4751
4574
  .devices-table-device .sync-subview-link { display: block; margin-top: 4px; text-align: left; }
4752
4575
  .devices-rename-form { display: flex; flex-wrap: wrap; align-items: end; gap: 8px; margin-top: 6px; }
4753
4576
  .devices-rename-form label { display: grid; gap: 4px; font-weight: var(--font-weight-normal); }
4754
- .sync-dialog-radio-option:hover {
4577
+ .sync-dialog-radio-option:hover:not(:has(:disabled, [data-disabled], button[data-state="checked"], input:checked)) {
4755
4578
  border-color: var(--border-hover);
4756
4579
  background: color-mix(in srgb, var(--surface-1) 94%, var(--surface-0));
4757
4580
  }
4758
- .sync-dialog-radio-option:has(button[data-state="checked"]) {
4581
+ .sync-dialog-radio-option:has(button[data-state="checked"], input:checked) {
4759
4582
  border-color: color-mix(in srgb, var(--accent) 40%, var(--border));
4760
4583
  background: color-mix(in srgb, var(--accent-subtle) 68%, var(--surface-1));
4761
4584
  }
4585
+ .sync-dialog-radio-option:has(:disabled, [data-disabled]) { cursor: not-allowed; opacity: 0.6; }
4586
+ .sync-dialog-radio-option:has(:disabled, [data-disabled]) :is(button, input, label) { cursor: not-allowed; }
4762
4587
  .sync-dialog-radio-option button {
4763
4588
  width: 18px;
4764
4589
  height: 18px;
@@ -4786,6 +4611,8 @@
4786
4611
  background: var(--accent);
4787
4612
  }
4788
4613
  .sync-dialog-radio-label {
4614
+ min-width: 0;
4615
+ overflow-wrap: anywhere;
4789
4616
  color: var(--text-primary);
4790
4617
  font-size: var(--font-size-md);
4791
4618
  }
@@ -4907,33 +4734,12 @@
4907
4734
  .feed-item > .feed-card-body { grid-column: 1; grid-row: 3; }
4908
4735
  }
4909
4736
 
4910
- /* ──────────────────────────────────────────────────────────────────
4911
- Token-aligned focus rings.
4912
-
4913
- The interactive surfaces below previously relied on the browser's
4914
- default focus outline. They now share the same focus language as
4915
- the rest of the system:
4916
- - Buttons get a 2px var(--accent) outline with a 2px offset.
4917
- - Inputs and selects get an accent border + 3px var(--focus-ring)
4918
- halo, matching .feed-search / .project-filter / .sync-actor-select.
4919
- Radix-managed items (with [data-highlighted]) are intentionally not
4920
- touched here because their highlight state already serves as a
4921
- keyboard-focus indicator. */
4737
+ /* Non-native button surfaces retain an offset keyboard outline. */
4922
4738
  .coordinator-admin-tab-trigger:focus-visible,
4923
4739
  .feed-inspector-button:focus-visible {
4924
4740
  outline: 2px solid var(--accent);
4925
4741
  outline-offset: 2px;
4926
4742
  }
4927
- .actor-merge-select:focus,
4928
- .actor-name-input:focus,
4929
- .feed-visibility-select:focus,
4930
- .legacy-review-search:focus,
4931
- .peer-scope-input:focus,
4932
- .project-domain-select:focus {
4933
- outline: none;
4934
- border-color: var(--accent);
4935
- box-shadow: 0 0 0 3px var(--focus-ring);
4936
- }
4937
4743
 
4938
4744
  @media (prefers-reduced-motion: reduce) {
4939
4745
  .health-loading-icon,
@@ -4974,9 +4780,7 @@
4974
4780
  <span class="runtime-label" id="runtimeLabel" hidden></span>
4975
4781
  <span class="meta-line" id="metaLine"></span>
4976
4782
  </div>
4977
- <select class="project-filter" id="projectFilter" aria-label="Project filter">
4978
- <option value="">All Projects</option>
4979
- </select>
4783
+ <div class="project-filter" id="projectFilterMount"></div>
4980
4784
  <button class="icon-button" id="themeToggle" type="button" aria-label="Switch theme">
4981
4785
  <i data-lucide="sun" aria-hidden="true"></i>
4982
4786
  </button>
@@ -5483,6 +5287,6 @@
5483
5287
  </div>
5484
5288
  </div>
5485
5289
 
5486
- <script src="/assets/app.js?v=a9865927468c"></script>
5290
+ <script src="/assets/app.js?v=8a7d47d7b0da"></script>
5487
5291
  </body>
5488
5292
  </html>