@dollhousemcp/mcp-server 2.0.24 → 2.0.26

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.
Files changed (62) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/auto-dollhouse/portDiscovery.d.ts.map +1 -1
  3. package/dist/auto-dollhouse/portDiscovery.js +7 -4
  4. package/dist/di/Container.d.ts.map +1 -1
  5. package/dist/di/Container.js +4 -2
  6. package/dist/generated/version.d.ts +2 -2
  7. package/dist/generated/version.js +3 -3
  8. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  9. package/dist/handlers/mcp-aql/MCPAQLHandler.js +18 -1
  10. package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
  11. package/dist/handlers/mcp-aql/OperationRouter.js +6 -1
  12. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  13. package/dist/handlers/mcp-aql/OperationSchema.js +16 -1
  14. package/dist/handlers/mcp-aql/SchemaDispatcher.d.ts.map +1 -1
  15. package/dist/handlers/mcp-aql/SchemaDispatcher.js +2 -1
  16. package/dist/index.js +14 -2
  17. package/dist/server/tools/BuildInfoTools.d.ts +1 -0
  18. package/dist/server/tools/BuildInfoTools.d.ts.map +1 -1
  19. package/dist/server/tools/BuildInfoTools.js +2 -1
  20. package/dist/server/tools/MCPAQLTools.js +3 -1
  21. package/dist/services/ActivationStore.d.ts +8 -0
  22. package/dist/services/ActivationStore.d.ts.map +1 -1
  23. package/dist/services/ActivationStore.js +28 -29
  24. package/dist/services/BuildInfoService.d.ts +3 -0
  25. package/dist/services/BuildInfoService.d.ts.map +1 -1
  26. package/dist/services/BuildInfoService.js +18 -1
  27. package/dist/services/sessionIdentity.d.ts +24 -0
  28. package/dist/services/sessionIdentity.d.ts.map +1 -0
  29. package/dist/services/sessionIdentity.js +42 -0
  30. package/dist/utils/permissionAuthority.d.ts +38 -0
  31. package/dist/utils/permissionAuthority.d.ts.map +1 -0
  32. package/dist/utils/permissionAuthority.js +341 -0
  33. package/dist/utils/permissionHooks.d.ts.map +1 -1
  34. package/dist/utils/permissionHooks.js +10 -1
  35. package/dist/web/console/UnifiedConsole.d.ts +2 -0
  36. package/dist/web/console/UnifiedConsole.d.ts.map +1 -1
  37. package/dist/web/console/UnifiedConsole.js +3 -1
  38. package/dist/web/portDiscovery.d.ts +7 -0
  39. package/dist/web/portDiscovery.d.ts.map +1 -1
  40. package/dist/web/portDiscovery.js +35 -4
  41. package/dist/web/public/app.js +28 -4
  42. package/dist/web/public/index.html +2 -0
  43. package/dist/web/public/permissions.css +456 -0
  44. package/dist/web/public/permissions.js +629 -12
  45. package/dist/web/public/sessions.css +119 -0
  46. package/dist/web/public/sessions.js +95 -9
  47. package/dist/web/public/setup.js +67 -7
  48. package/dist/web/public/styles.css +21 -2
  49. package/dist/web/routes/permissionRoutes.d.ts +4 -1
  50. package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
  51. package/dist/web/routes/permissionRoutes.js +118 -6
  52. package/dist/web/routes/setupRoutes.d.ts +18 -0
  53. package/dist/web/routes/setupRoutes.d.ts.map +1 -1
  54. package/dist/web/routes/setupRoutes.js +129 -49
  55. package/dist/web/server.d.ts +4 -0
  56. package/dist/web/server.d.ts.map +1 -1
  57. package/dist/web/server.js +19 -1
  58. package/package.json +4 -3
  59. package/scripts/pretooluse-dollhouse.sh +78 -12
  60. package/scripts/pretooluse-vscode.sh +6 -9
  61. package/scripts/pretooluse-windsurf.sh +6 -9
  62. package/server.json +2 -2
@@ -74,6 +74,25 @@
74
74
  }
75
75
 
76
76
  #tab-permissions {
77
+ --perm-authority-warning-base: #b45309;
78
+ --perm-authority-warning-ink: #7c2d12;
79
+ --perm-authority-cta-accent: #0f766e;
80
+ --perm-authority-host-claude-bg: #fff1e8;
81
+ --perm-authority-host-claude-ink: #9a3412;
82
+ --perm-authority-host-codex-bg: #e8f1ff;
83
+ --perm-authority-host-codex-ink: #1d4ed8;
84
+ --perm-authority-host-cursor-bg: #ecfdf3;
85
+ --perm-authority-host-cursor-ink: #047857;
86
+ --perm-authority-host-vscode-bg: #e0f2fe;
87
+ --perm-authority-host-vscode-ink: #0369a1;
88
+ --perm-authority-host-windsurf-bg: #eef2ff;
89
+ --perm-authority-host-windsurf-ink: #4338ca;
90
+ --perm-authority-host-gemini-bg: #fef3c7;
91
+ --perm-authority-host-gemini-ink: #b45309;
92
+ --perm-authority-host-cline-bg: #f5f3ff;
93
+ --perm-authority-host-cline-ink: #6d28d9;
94
+ --perm-authority-host-generic-bg: #f1f5f9;
95
+ --perm-authority-host-generic-ink: #475569;
77
96
  padding-inline: clamp(0.5rem, 1vw, 1rem);
78
97
  padding-bottom: calc(var(--site-footer-height, 4.5rem) + 1.5rem);
79
98
  }
@@ -230,6 +249,308 @@
230
249
  outline: none;
231
250
  }
232
251
 
252
+ .perm-authority-reason-input {
253
+ width: 100%;
254
+ margin-top: 0.35rem;
255
+ border: 1px solid var(--ink-100, #cbd5e1);
256
+ border-radius: 0.75rem;
257
+ background: var(--paper-strong, #fff);
258
+ color: var(--ink-800, #1e293b);
259
+ padding: 0.7rem 0.8rem;
260
+ font: inherit;
261
+ }
262
+
263
+ .perm-authority-reason-input:focus-visible {
264
+ outline: 2px solid color-mix(in srgb, var(--signal-2, #3b82f6) 28%, transparent);
265
+ outline-offset: 1px;
266
+ border-color: var(--signal-2, #3b82f6);
267
+ }
268
+
269
+ .perm-authority-field-label {
270
+ display: block;
271
+ margin-top: 0.85rem;
272
+ }
273
+
274
+ .perm-authority-field-label:first-of-type {
275
+ margin-top: 0;
276
+ }
277
+
278
+ .perm-authority-options {
279
+ display: grid;
280
+ gap: 0.65rem;
281
+ }
282
+
283
+ .perm-authority-option {
284
+ display: block;
285
+ border: 1px solid var(--ink-100, #d8e0ea);
286
+ border-radius: 0.9rem;
287
+ background: var(--paper-strong, #fff);
288
+ padding: 0.8rem 0.9rem;
289
+ transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
290
+ }
291
+
292
+ .perm-authority-option:hover {
293
+ border-color: color-mix(in srgb, var(--signal-2, #3b82f6) 32%, var(--ink-100, #d8e0ea));
294
+ }
295
+
296
+ .perm-authority-option[data-checked="true"] {
297
+ border-color: color-mix(in srgb, var(--signal-2, #3b82f6) 48%, var(--ink-100, #d8e0ea));
298
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--signal-2, #3b82f6) 14%, transparent);
299
+ }
300
+
301
+ .perm-authority-option[data-disabled="true"] {
302
+ background:
303
+ linear-gradient(135deg, color-mix(in srgb, var(--ink-50, #f8fafc) 96%, white), color-mix(in srgb, var(--ink-100, #e2e8f0) 58%, white));
304
+ border-style: dashed;
305
+ border-color: color-mix(in srgb, #f59e0b 44%, var(--ink-100, #d8e0ea));
306
+ }
307
+
308
+ .perm-authority-option-main {
309
+ display: grid;
310
+ grid-template-columns: auto minmax(0, 1fr);
311
+ gap: 0.75rem;
312
+ align-items: start;
313
+ }
314
+
315
+ .perm-authority-option-main input {
316
+ margin-top: 0.2rem;
317
+ }
318
+
319
+ .perm-authority-option-copy {
320
+ display: grid;
321
+ gap: 0.28rem;
322
+ min-width: 0;
323
+ }
324
+
325
+ .perm-authority-option-title-row {
326
+ display: flex;
327
+ align-items: center;
328
+ gap: 0.5rem;
329
+ flex-wrap: wrap;
330
+ }
331
+
332
+ .perm-authority-option-title {
333
+ color: var(--ink-900, #0f172a);
334
+ font-family: var(--font-heading, 'Plus Jakarta Sans', sans-serif);
335
+ font-size: 0.9rem;
336
+ font-weight: 700;
337
+ }
338
+
339
+ .perm-authority-option-description {
340
+ color: var(--ink-500, #64748b);
341
+ font-size: 0.8rem;
342
+ line-height: 1.5;
343
+ }
344
+
345
+ .perm-authority-inline-note {
346
+ display: inline-flex;
347
+ align-items: center;
348
+ padding: 0.18rem 0.48rem;
349
+ border-radius: 999px;
350
+ background: color-mix(in srgb, var(--perm-authority-warning-base) 12%, white);
351
+ border: 1px solid color-mix(in srgb, var(--perm-authority-warning-base) 28%, white);
352
+ color: var(--perm-authority-warning-ink);
353
+ font-size: 0.68rem;
354
+ font-weight: 700;
355
+ letter-spacing: 0.02em;
356
+ }
357
+
358
+ .perm-authority-human-note {
359
+ margin-top: 0.85rem;
360
+ }
361
+
362
+ .perm-authority-current-list {
363
+ display: grid;
364
+ gap: 0.55rem;
365
+ margin-top: 0.9rem;
366
+ }
367
+
368
+ .perm-authority-current-host {
369
+ appearance: none;
370
+ width: 100%;
371
+ display: flex;
372
+ align-items: center;
373
+ gap: 0.7rem;
374
+ padding: 0.7rem 0.75rem;
375
+ border: 1px solid var(--ink-100, #d8e0ea);
376
+ border-radius: 0.85rem;
377
+ background: var(--paper-strong, #fff);
378
+ text-align: left;
379
+ cursor: pointer;
380
+ }
381
+
382
+ .perm-authority-current-host[data-selected="true"] {
383
+ border-color: color-mix(in srgb, var(--signal-2, #3b82f6) 42%, var(--ink-100, #d8e0ea));
384
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--signal-2, #3b82f6) 10%, transparent);
385
+ }
386
+
387
+ .perm-authority-current-host:hover,
388
+ .perm-authority-current-host:focus-visible {
389
+ border-color: color-mix(in srgb, var(--signal-2, #3b82f6) 32%, var(--ink-100, #d8e0ea));
390
+ outline: none;
391
+ }
392
+
393
+ .perm-authority-host-mark {
394
+ display: inline-flex;
395
+ align-items: center;
396
+ justify-content: center;
397
+ width: 2rem;
398
+ height: 2rem;
399
+ border-radius: 0.65rem;
400
+ font-family: var(--font-heading, 'Plus Jakarta Sans', sans-serif);
401
+ font-size: 0.7rem;
402
+ font-weight: 800;
403
+ letter-spacing: 0.04em;
404
+ flex-shrink: 0;
405
+ }
406
+
407
+ .perm-authority-host-mark--claude {
408
+ background: var(--perm-authority-host-claude-bg);
409
+ color: var(--perm-authority-host-claude-ink);
410
+ }
411
+
412
+ .perm-authority-host-mark--codex {
413
+ background: var(--perm-authority-host-codex-bg);
414
+ color: var(--perm-authority-host-codex-ink);
415
+ }
416
+
417
+ .perm-authority-host-mark--cursor {
418
+ background: var(--perm-authority-host-cursor-bg);
419
+ color: var(--perm-authority-host-cursor-ink);
420
+ }
421
+
422
+ .perm-authority-host-mark--vscode {
423
+ background: var(--perm-authority-host-vscode-bg);
424
+ color: var(--perm-authority-host-vscode-ink);
425
+ }
426
+
427
+ .perm-authority-host-mark--windsurf {
428
+ background: var(--perm-authority-host-windsurf-bg);
429
+ color: var(--perm-authority-host-windsurf-ink);
430
+ }
431
+
432
+ .perm-authority-host-mark--gemini {
433
+ background: var(--perm-authority-host-gemini-bg);
434
+ color: var(--perm-authority-host-gemini-ink);
435
+ }
436
+
437
+ .perm-authority-host-mark--cline {
438
+ background: var(--perm-authority-host-cline-bg);
439
+ color: var(--perm-authority-host-cline-ink);
440
+ }
441
+
442
+ .perm-authority-host-mark--lmstudio,
443
+ .perm-authority-host-mark--generic {
444
+ background: var(--perm-authority-host-generic-bg);
445
+ color: var(--perm-authority-host-generic-ink);
446
+ }
447
+
448
+ .perm-authority-current-host-copy {
449
+ display: grid;
450
+ gap: 0.14rem;
451
+ min-width: 0;
452
+ }
453
+
454
+ .perm-authority-current-host-name {
455
+ color: var(--ink-900, #0f172a);
456
+ font-family: var(--font-heading, 'Plus Jakarta Sans', sans-serif);
457
+ font-size: 0.84rem;
458
+ font-weight: 700;
459
+ }
460
+
461
+ .perm-authority-current-host-mode {
462
+ color: var(--ink-500, #64748b);
463
+ font-size: 0.76rem;
464
+ font-weight: 600;
465
+ text-transform: uppercase;
466
+ letter-spacing: 0.05em;
467
+ }
468
+
469
+ .perm-authority-selected-host {
470
+ color: var(--ink-900, #0f172a);
471
+ font-family: var(--font-heading, 'Plus Jakarta Sans', sans-serif);
472
+ font-size: 1rem;
473
+ font-weight: 800;
474
+ margin-bottom: 0.25rem;
475
+ }
476
+
477
+ .perm-authority-save-shell {
478
+ margin-top: 0.85rem;
479
+ border: 1px solid var(--ink-100, #d8e0ea);
480
+ border-radius: 0.95rem;
481
+ background: color-mix(in srgb, var(--paper-base, #f8fafc) 84%, white);
482
+ padding: 0.85rem;
483
+ transition: border-color 0.18s ease, box-shadow 0.18s ease, background 0.18s ease;
484
+ }
485
+
486
+ .perm-authority-save-shell[data-dirty="true"] {
487
+ border-color: color-mix(in srgb, var(--signal-2, #3b82f6) 48%, var(--ink-100, #d8e0ea));
488
+ background: color-mix(in srgb, var(--signal-2, #3b82f6) 9%, white);
489
+ box-shadow: 0 10px 30px color-mix(in srgb, var(--signal-2, #3b82f6) 10%, transparent);
490
+ }
491
+
492
+ .perm-authority-dirty-state {
493
+ margin-bottom: 0.7rem;
494
+ padding: 0.65rem 0.75rem;
495
+ border-radius: 0.8rem;
496
+ background: color-mix(in srgb, var(--signal-2, #3b82f6) 11%, white);
497
+ border: 1px solid color-mix(in srgb, var(--signal-2, #3b82f6) 24%, white);
498
+ color: var(--ink-800, #1e293b);
499
+ font-size: 0.8rem;
500
+ line-height: 1.45;
501
+ font-weight: 600;
502
+ }
503
+
504
+ .perm-authority-actions {
505
+ display: flex;
506
+ align-items: center;
507
+ justify-content: space-between;
508
+ gap: 0.85rem;
509
+ flex-wrap: wrap;
510
+ }
511
+
512
+ .perm-authority-save-copy {
513
+ color: var(--ink-600, #475569);
514
+ font-size: 0.8rem;
515
+ line-height: 1.45;
516
+ max-width: 34rem;
517
+ }
518
+
519
+ .perm-authority-save-btn {
520
+ padding-inline: 0.95rem;
521
+ padding-block: 0.5rem;
522
+ font-size: 0.74rem;
523
+ font-weight: 700;
524
+ }
525
+
526
+ .perm-authority-save-btn[data-dirty="true"] {
527
+ background: linear-gradient(
528
+ 135deg,
529
+ color-mix(in srgb, var(--signal-2, #3b82f6) 78%, #0f172a),
530
+ color-mix(in srgb, var(--perm-authority-cta-accent) 72%, #0f172a)
531
+ );
532
+ border-color: color-mix(in srgb, var(--signal-2, #3b82f6) 70%, #0f172a);
533
+ color: white;
534
+ box-shadow: 0 10px 22px color-mix(in srgb, var(--signal-2, #3b82f6) 28%, transparent);
535
+ }
536
+
537
+ .perm-authority-save-btn[data-dirty="true"]:hover,
538
+ .perm-authority-save-btn[data-dirty="true"]:focus-visible {
539
+ color: white;
540
+ border-color: color-mix(in srgb, var(--signal-2, #3b82f6) 78%, #0f172a);
541
+ background: linear-gradient(
542
+ 135deg,
543
+ color-mix(in srgb, var(--signal-2, #3b82f6) 72%, #0f172a),
544
+ color-mix(in srgb, var(--perm-authority-cta-accent) 78%, #0f172a)
545
+ );
546
+ }
547
+
548
+ .perm-authority-save-btn:disabled {
549
+ cursor: default;
550
+ opacity: 0.74;
551
+ box-shadow: none;
552
+ }
553
+
233
554
  .perm-source-item--selected {
234
555
  background: color-mix(in srgb, var(--signal-2, #3b82f6) 10%, transparent);
235
556
  border-left: 3px solid var(--signal-2, #3b82f6);
@@ -433,6 +754,7 @@
433
754
 
434
755
  .perm-audit-modal .modal-body {
435
756
  display: flex;
757
+ align-items: stretch;
436
758
  min-height: 0;
437
759
  padding: 0;
438
760
  }
@@ -442,10 +764,16 @@
442
764
  }
443
765
 
444
766
  .perm-audit-modal .perm-feed--modal {
767
+ flex: 1 1 auto;
768
+ width: 100%;
769
+ min-width: 0;
445
770
  padding: 0.875rem 1rem 1rem;
446
771
  }
447
772
 
448
773
  .perm-audit-entry {
774
+ display: block;
775
+ width: 100%;
776
+ box-sizing: border-box;
449
777
  border: 1px solid var(--ink-100, #e2e8f0);
450
778
  border-radius: 0.75rem;
451
779
  background: var(--paper-strong, #fff);
@@ -558,6 +886,48 @@
558
886
  font-size: 0.82rem;
559
887
  }
560
888
 
889
+ @media (max-width: 720px) {
890
+ .perm-audit-modal-dialog {
891
+ width: min(calc(100vw - 1rem), 82rem);
892
+ }
893
+
894
+ .perm-audit-modal .modal-header {
895
+ grid-template-areas:
896
+ "heading"
897
+ "meta"
898
+ "actions";
899
+ grid-template-columns: minmax(0, 1fr);
900
+ }
901
+
902
+ .perm-audit-modal .modal-header-actions {
903
+ justify-self: start;
904
+ flex-wrap: wrap;
905
+ }
906
+
907
+ .perm-audit-modal .perm-feed--modal {
908
+ padding: 0.75rem;
909
+ }
910
+
911
+ .perm-audit-entry {
912
+ margin-bottom: 0.625rem;
913
+ }
914
+
915
+ .perm-audit-summary-row {
916
+ grid-template-columns: minmax(0, 1fr);
917
+ gap: 0.45rem;
918
+ padding: 0.75rem 0.875rem;
919
+ }
920
+
921
+ .perm-audit-entry-body {
922
+ padding: 0.85rem 0.875rem 0.9rem;
923
+ }
924
+
925
+ .perm-audit-detail-row {
926
+ grid-template-columns: minmax(0, 1fr);
927
+ gap: 0.25rem;
928
+ }
929
+ }
930
+
561
931
  /* ── Source Elements ───────────────────────────────────────── */
562
932
 
563
933
  .perm-source-list {
@@ -669,6 +1039,86 @@
669
1039
  background: color-mix(in srgb, var(--surface-2) 78%, var(--paper-strong));
670
1040
  }
671
1041
 
1042
+ [data-theme="dark"] .perm-authority-option {
1043
+ background: color-mix(in srgb, var(--surface-1) 82%, var(--paper-strong));
1044
+ border-color: color-mix(in srgb, var(--line, #2b3445) 90%, transparent);
1045
+ }
1046
+
1047
+ [data-theme="dark"] .perm-authority-option[data-checked="true"] {
1048
+ border-color: color-mix(in srgb, var(--signal-2) 48%, var(--line, #2b3445));
1049
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--signal-2) 20%, transparent);
1050
+ }
1051
+
1052
+ [data-theme="dark"] .perm-authority-option[data-disabled="true"] {
1053
+ background: linear-gradient(135deg, color-mix(in srgb, var(--surface-1) 94%, var(--paper-strong)), color-mix(in srgb, #7c2d12 16%, var(--surface-1)));
1054
+ border-color: color-mix(in srgb, #f59e0b 48%, var(--line, #2b3445));
1055
+ }
1056
+
1057
+ [data-theme="dark"] .perm-authority-option-title,
1058
+ [data-theme="dark"] .perm-authority-reason-input {
1059
+ color: var(--ink-200, #e2e8f0);
1060
+ }
1061
+
1062
+ [data-theme="dark"] .perm-authority-option-description,
1063
+ [data-theme="dark"] .perm-authority-save-copy {
1064
+ color: var(--ink-400, #94a3b8);
1065
+ }
1066
+
1067
+ [data-theme="dark"] .perm-authority-inline-note {
1068
+ background: color-mix(in srgb, var(--perm-authority-warning-ink) 54%, var(--surface-1));
1069
+ border-color: color-mix(in srgb, #fdba74 28%, var(--line, #2b3445));
1070
+ color: #fdba74;
1071
+ }
1072
+
1073
+ [data-theme="dark"] .perm-authority-reason-input {
1074
+ background: color-mix(in srgb, var(--surface-2) 62%, var(--paper-strong));
1075
+ border-color: color-mix(in srgb, var(--line, #2b3445) 94%, transparent);
1076
+ }
1077
+
1078
+ [data-theme="dark"] .perm-authority-save-shell {
1079
+ background: color-mix(in srgb, var(--surface-1) 82%, var(--paper-strong));
1080
+ border-color: color-mix(in srgb, var(--line, #2b3445) 92%, transparent);
1081
+ }
1082
+
1083
+ [data-theme="dark"] .perm-authority-current-host {
1084
+ background: color-mix(in srgb, var(--surface-1) 82%, var(--paper-strong));
1085
+ border-color: color-mix(in srgb, var(--line, #2b3445) 92%, transparent);
1086
+ }
1087
+
1088
+ [data-theme="dark"] .perm-authority-current-host[data-selected="true"] {
1089
+ border-color: color-mix(in srgb, var(--signal-2) 40%, var(--line, #2b3445));
1090
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--signal-2) 16%, transparent);
1091
+ }
1092
+
1093
+ [data-theme="dark"] .perm-authority-current-host:hover,
1094
+ [data-theme="dark"] .perm-authority-current-host:focus-visible {
1095
+ border-color: color-mix(in srgb, var(--signal-2) 34%, var(--line, #2b3445));
1096
+ }
1097
+
1098
+ [data-theme="dark"] .perm-authority-current-host-name {
1099
+ color: var(--ink-200, #e2e8f0);
1100
+ }
1101
+
1102
+ [data-theme="dark"] .perm-authority-selected-host {
1103
+ color: var(--ink-200, #e2e8f0);
1104
+ }
1105
+
1106
+ [data-theme="dark"] .perm-authority-current-host-mode {
1107
+ color: var(--ink-400, #94a3b8);
1108
+ }
1109
+
1110
+ [data-theme="dark"] .perm-authority-save-shell[data-dirty="true"] {
1111
+ background: color-mix(in srgb, var(--signal-2) 10%, var(--surface-1));
1112
+ border-color: color-mix(in srgb, var(--signal-2) 42%, var(--line, #2b3445));
1113
+ box-shadow: 0 10px 30px color-mix(in srgb, var(--signal-2) 16%, transparent);
1114
+ }
1115
+
1116
+ [data-theme="dark"] .perm-authority-dirty-state {
1117
+ background: color-mix(in srgb, var(--signal-2) 16%, var(--surface-1));
1118
+ border-color: color-mix(in srgb, var(--signal-2) 24%, var(--line, #2b3445));
1119
+ color: var(--ink-200, #e2e8f0);
1120
+ }
1121
+
672
1122
  [data-theme="dark"] .perm-stat-value {
673
1123
  color: var(--ink-50, #f1f5f9);
674
1124
  }
@@ -701,6 +1151,12 @@
701
1151
  background: color-mix(in srgb, var(--paper) 36%, var(--surface-1));
702
1152
  }
703
1153
 
1154
+ [data-theme="dark"] .perm-detail-refresh {
1155
+ background: color-mix(in srgb, var(--signal-2) 14%, var(--surface-1));
1156
+ border-color: color-mix(in srgb, var(--signal-2) 24%, var(--line, #2b3445));
1157
+ color: var(--ink-300, #cbd5e1);
1158
+ }
1159
+
704
1160
  [data-theme="dark"] .perm-audit-entry {
705
1161
  background: color-mix(in srgb, var(--paper) 22%, var(--surface-1));
706
1162
  border-color: color-mix(in srgb, var(--line) 88%, transparent);