@dollhousemcp/mcp-server 2.0.3 → 2.0.5

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 (51) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/generated/version.d.ts +2 -2
  3. package/dist/generated/version.js +3 -3
  4. package/dist/index.js +7 -1
  5. package/dist/seed-elements/memories/dollhousemcp-baseline-knowledge.yaml +149 -0
  6. package/dist/seed-elements/memories/how-to-create-custom-auto-load-memories.yaml +455 -0
  7. package/dist/seed-elements/memories/priority-best-practices-for-teams.yaml +542 -0
  8. package/dist/seed-elements/memories/token-estimation-guidelines.yaml +602 -0
  9. package/dist/utils/logger.d.ts +7 -0
  10. package/dist/utils/logger.d.ts.map +1 -1
  11. package/dist/utils/logger.js +13 -3
  12. package/dist/web/console/LeaderElection.d.ts +10 -0
  13. package/dist/web/console/LeaderElection.d.ts.map +1 -1
  14. package/dist/web/console/LeaderElection.js +44 -1
  15. package/dist/web/console/LeaderForwardingSink.d.ts +3 -1
  16. package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -1
  17. package/dist/web/console/LeaderForwardingSink.js +24 -6
  18. package/dist/web/console/UnifiedConsole.d.ts.map +1 -1
  19. package/dist/web/console/UnifiedConsole.js +12 -3
  20. package/dist/web/public/fonts/ibmplexmono--F63fjptAgt5VM-kVkqdyU8n1i8q131nj-o.woff2 +0 -0
  21. package/dist/web/public/fonts/ibmplexmono--F63fjptAgt5VM-kVkqdyU8n1iAq131nj-otFQ.woff2 +0 -0
  22. package/dist/web/public/fonts/ibmplexmono--F63fjptAgt5VM-kVkqdyU8n1iEq131nj-otFQ.woff2 +0 -0
  23. package/dist/web/public/fonts/ibmplexmono--F63fjptAgt5VM-kVkqdyU8n1iIq131nj-otFQ.woff2 +0 -0
  24. package/dist/web/public/fonts/ibmplexmono--F63fjptAgt5VM-kVkqdyU8n1isq131nj-otFQ.woff2 +0 -0
  25. package/dist/web/public/fonts/ibmplexmono--F6qfjptAgt5VM-kVkqdyU8n3twJwl1FgsAXHNlYzg.woff2 +0 -0
  26. package/dist/web/public/fonts/ibmplexmono--F6qfjptAgt5VM-kVkqdyU8n3twJwl5FgsAXHNlYzg.woff2 +0 -0
  27. package/dist/web/public/fonts/ibmplexmono--F6qfjptAgt5VM-kVkqdyU8n3twJwl9FgsAXHNlYzg.woff2 +0 -0
  28. package/dist/web/public/fonts/ibmplexmono--F6qfjptAgt5VM-kVkqdyU8n3twJwlBFgsAXHNk.woff2 +0 -0
  29. package/dist/web/public/fonts/ibmplexmono--F6qfjptAgt5VM-kVkqdyU8n3twJwlRFgsAXHNlYzg.woff2 +0 -0
  30. package/dist/web/public/fonts/manrope-xn7gYHE41ni1AdIRggOxSvfedN62Zw.woff2 +0 -0
  31. package/dist/web/public/fonts/manrope-xn7gYHE41ni1AdIRggSxSvfedN62Zw.woff2 +0 -0
  32. package/dist/web/public/fonts/manrope-xn7gYHE41ni1AdIRggexSvfedN4.woff2 +0 -0
  33. package/dist/web/public/fonts/manrope-xn7gYHE41ni1AdIRggixSvfedN62Zw.woff2 +0 -0
  34. package/dist/web/public/fonts/manrope-xn7gYHE41ni1AdIRggmxSvfedN62Zw.woff2 +0 -0
  35. package/dist/web/public/fonts/manrope-xn7gYHE41ni1AdIRggqxSvfedN62Zw.woff2 +0 -0
  36. package/dist/web/public/fonts/plusjakartasans-LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko20yygg_vb.woff2 +0 -0
  37. package/dist/web/public/fonts/plusjakartasans-LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko40yygg_vbd-E.woff2 +0 -0
  38. package/dist/web/public/fonts/plusjakartasans-LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko50yygg_vbd-E.woff2 +0 -0
  39. package/dist/web/public/fonts/plusjakartasans-LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko70yygg_vbd-E.woff2 +0 -0
  40. package/dist/web/public/fonts.css +270 -0
  41. package/dist/web/public/index.html +365 -0
  42. package/dist/web/public/logs.css +472 -0
  43. package/dist/web/public/metrics.css +238 -0
  44. package/dist/web/public/permissions.css +364 -0
  45. package/dist/web/public/sessions.css +235 -0
  46. package/dist/web/public/setup.css +648 -0
  47. package/dist/web/public/styles.css +1717 -0
  48. package/dist/web/server.d.ts.map +1 -1
  49. package/dist/web/server.js +3 -2
  50. package/package.json +3 -1
  51. package/server.json +2 -2
@@ -0,0 +1,364 @@
1
+ /* permissions.css — Permission Dashboard Styles (auto-dollhouse#5)
2
+ * Follows the Atelier design language from styles.css and Todd's metrics patterns.
3
+ */
4
+
5
+ /* ── Status Bar ────────────────────────────────────────────── */
6
+
7
+ .perm-status-bar {
8
+ display: flex;
9
+ align-items: center;
10
+ gap: 1rem;
11
+ padding: 0.625rem 1rem;
12
+ background: var(--paper-strong, #fff);
13
+ border: 1px solid var(--ink-100, #e2e8f0);
14
+ border-radius: 0.5rem;
15
+ margin-bottom: 1rem;
16
+ font-family: var(--font-mono, 'IBM Plex Mono', monospace);
17
+ font-size: 0.8125rem;
18
+ flex-wrap: wrap;
19
+ }
20
+
21
+ .perm-status-indicator {
22
+ display: flex;
23
+ align-items: center;
24
+ gap: 0.375rem;
25
+ }
26
+
27
+ .perm-status-dot {
28
+ width: 8px;
29
+ height: 8px;
30
+ border-radius: 50%;
31
+ background: var(--ink-300, #94a3b8);
32
+ transition: background 0.3s;
33
+ }
34
+
35
+ .perm-status-dot[data-status="active"] {
36
+ background: #22c55e;
37
+ box-shadow: 0 0 6px rgba(34, 197, 94, 0.5);
38
+ }
39
+
40
+ .perm-status-dot[data-status="inactive"] {
41
+ background: var(--ink-300, #94a3b8);
42
+ }
43
+
44
+ .perm-status-dot[data-status="error"] {
45
+ background: #ef4444;
46
+ box-shadow: 0 0 6px rgba(239, 68, 68, 0.5);
47
+ }
48
+
49
+ .perm-status-spacer {
50
+ flex: 1;
51
+ }
52
+
53
+ .perm-status-updated {
54
+ color: var(--ink-400, #64748b);
55
+ }
56
+
57
+ /* ── Dashboard Grid ────────────────────────────────────────── */
58
+
59
+ .perm-dashboard {
60
+ display: grid;
61
+ grid-template-columns: 1fr 1fr;
62
+ gap: 1rem;
63
+ }
64
+
65
+ @media (max-width: 900px) {
66
+ .perm-dashboard { grid-template-columns: 1fr; }
67
+ }
68
+
69
+ /* ── Cards ─────────────────────────────────────────────────── */
70
+
71
+ .perm-card {
72
+ background: var(--paper-strong, #fff);
73
+ border: 1px solid var(--ink-100, #e2e8f0);
74
+ border-radius: 0.5rem;
75
+ overflow: hidden;
76
+ }
77
+
78
+ .perm-card--full {
79
+ grid-column: 1 / -1;
80
+ }
81
+
82
+ .perm-card-header {
83
+ display: flex;
84
+ align-items: center;
85
+ justify-content: space-between;
86
+ padding: 0.75rem 1rem;
87
+ background: var(--paper-base, #f8fafc);
88
+ border-bottom: 1px solid var(--ink-100, #e2e8f0);
89
+ cursor: pointer;
90
+ user-select: none;
91
+ }
92
+
93
+ .perm-card-header:hover {
94
+ background: var(--ink-50, #f1f5f9);
95
+ }
96
+
97
+ .perm-card-title {
98
+ font-family: var(--font-heading, 'Plus Jakarta Sans', sans-serif);
99
+ font-weight: 600;
100
+ font-size: 0.875rem;
101
+ color: var(--ink-800, #1e293b);
102
+ margin: 0;
103
+ }
104
+
105
+ .perm-card-toggle {
106
+ font-size: 0.75rem;
107
+ color: var(--ink-400, #64748b);
108
+ transition: transform 0.2s;
109
+ }
110
+
111
+ .perm-card[data-collapsed="true"] .perm-card-toggle {
112
+ transform: rotate(-90deg);
113
+ }
114
+
115
+ .perm-card[data-collapsed="true"] .perm-card-body {
116
+ display: none;
117
+ }
118
+
119
+ .perm-card-body {
120
+ padding: 1rem;
121
+ }
122
+
123
+ /* ── Stat Grid ─────────────────────────────────────────────── */
124
+
125
+ .perm-stat-grid {
126
+ display: grid;
127
+ grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
128
+ gap: 0.75rem;
129
+ margin-bottom: 1rem;
130
+ }
131
+
132
+ .perm-stat {
133
+ text-align: center;
134
+ }
135
+
136
+ .perm-stat-value {
137
+ font-family: var(--font-mono, 'IBM Plex Mono', monospace);
138
+ font-size: 1.5rem;
139
+ font-weight: 700;
140
+ line-height: 1.2;
141
+ color: var(--ink-900, #0f172a);
142
+ }
143
+
144
+ .perm-stat-value--allow { color: #22c55e; }
145
+ .perm-stat-value--deny { color: #ef4444; }
146
+ .perm-stat-value--ask { color: #f97316; }
147
+ .perm-stat-value--active { color: var(--signal-2, #3b82f6); }
148
+
149
+ .perm-stat-label {
150
+ font-size: 0.6875rem;
151
+ text-transform: uppercase;
152
+ letter-spacing: 0.05em;
153
+ color: var(--ink-400, #64748b);
154
+ margin-top: 0.125rem;
155
+ }
156
+
157
+ /* ── Pattern Lists ─────────────────────────────────────────── */
158
+
159
+ .perm-pattern-list {
160
+ list-style: none;
161
+ padding: 0;
162
+ margin: 0;
163
+ }
164
+
165
+ .perm-pattern-item {
166
+ display: flex;
167
+ align-items: center;
168
+ gap: 0.5rem;
169
+ padding: 0.375rem 0.5rem;
170
+ font-family: var(--font-mono, 'IBM Plex Mono', monospace);
171
+ font-size: 0.8125rem;
172
+ border-bottom: 1px solid var(--ink-50, #f1f5f9);
173
+ }
174
+
175
+ .perm-pattern-item:last-child {
176
+ border-bottom: none;
177
+ }
178
+
179
+ .perm-pattern-badge {
180
+ display: inline-block;
181
+ padding: 0.125rem 0.375rem;
182
+ border-radius: 0.25rem;
183
+ font-size: 0.6875rem;
184
+ font-weight: 600;
185
+ text-transform: uppercase;
186
+ letter-spacing: 0.05em;
187
+ flex-shrink: 0;
188
+ }
189
+
190
+ .perm-pattern-badge--deny {
191
+ background: #fef2f2;
192
+ color: #991b1b;
193
+ border: 1px solid #fecaca;
194
+ }
195
+
196
+ .perm-pattern-badge--allow {
197
+ background: #f0fdf4;
198
+ color: #166534;
199
+ border: 1px solid #bbf7d0;
200
+ }
201
+
202
+ .perm-pattern-badge--confirm {
203
+ background: #fff7ed;
204
+ color: #9a3412;
205
+ border: 1px solid #fed7aa;
206
+ }
207
+
208
+ .perm-pattern-text {
209
+ word-break: break-all;
210
+ }
211
+
212
+ .perm-pattern-empty {
213
+ padding: 1rem;
214
+ text-align: center;
215
+ color: var(--ink-400, #64748b);
216
+ font-style: italic;
217
+ font-size: 0.8125rem;
218
+ }
219
+
220
+ /* ── Live Feed ─────────────────────────────────────────────── */
221
+
222
+ .perm-feed {
223
+ max-height: 400px;
224
+ overflow-y: auto;
225
+ font-family: var(--font-mono, 'IBM Plex Mono', monospace);
226
+ font-size: 0.8125rem;
227
+ }
228
+
229
+ .perm-feed-empty {
230
+ padding: 2rem;
231
+ text-align: center;
232
+ color: var(--ink-400, #64748b);
233
+ font-style: italic;
234
+ }
235
+
236
+ .perm-feed-row {
237
+ display: grid;
238
+ grid-template-columns: 80px 60px 1fr auto;
239
+ gap: 0.5rem;
240
+ padding: 0.375rem 0.5rem;
241
+ border-bottom: 1px solid var(--ink-50, #f1f5f9);
242
+ align-items: center;
243
+ }
244
+
245
+ .perm-feed-row:hover {
246
+ background: var(--ink-50, #f1f5f9);
247
+ }
248
+
249
+ .perm-feed-time {
250
+ color: var(--ink-400, #64748b);
251
+ font-size: 0.75rem;
252
+ }
253
+
254
+ .perm-feed-decision {
255
+ font-weight: 600;
256
+ font-size: 0.75rem;
257
+ }
258
+
259
+ .perm-feed-decision--allow { color: #22c55e; }
260
+ .perm-feed-decision--deny { color: #ef4444; }
261
+ .perm-feed-decision--ask { color: #f97316; }
262
+
263
+ .perm-feed-tool {
264
+ color: var(--ink-700, #334155);
265
+ overflow: hidden;
266
+ text-overflow: ellipsis;
267
+ white-space: nowrap;
268
+ }
269
+
270
+ .perm-feed-reason {
271
+ color: var(--ink-400, #64748b);
272
+ font-size: 0.75rem;
273
+ overflow: hidden;
274
+ text-overflow: ellipsis;
275
+ white-space: nowrap;
276
+ max-width: 200px;
277
+ }
278
+
279
+ /* ── Source Elements ───────────────────────────────────────── */
280
+
281
+ .perm-source-list {
282
+ list-style: none;
283
+ padding: 0;
284
+ margin: 0;
285
+ }
286
+
287
+ .perm-source-item {
288
+ display: flex;
289
+ align-items: center;
290
+ gap: 0.5rem;
291
+ padding: 0.5rem;
292
+ border-bottom: 1px solid var(--ink-50, #f1f5f9);
293
+ }
294
+
295
+ .perm-source-item:last-child {
296
+ border-bottom: none;
297
+ }
298
+
299
+ .perm-source-type {
300
+ display: inline-block;
301
+ padding: 0.125rem 0.375rem;
302
+ border-radius: 0.25rem;
303
+ font-size: 0.6875rem;
304
+ font-weight: 600;
305
+ text-transform: uppercase;
306
+ background: var(--ink-100, #e2e8f0);
307
+ color: var(--ink-600, #475569);
308
+ }
309
+
310
+ .perm-source-name {
311
+ font-weight: 500;
312
+ color: var(--ink-800, #1e293b);
313
+ }
314
+
315
+ /* ── Dark Mode ─────────────────────────────────────────────── */
316
+
317
+ [data-theme="dark"] .perm-status-bar,
318
+ [data-theme="dark"] .perm-card {
319
+ background: var(--paper-strong, #1e293b);
320
+ border-color: var(--ink-100, #334155);
321
+ }
322
+
323
+ [data-theme="dark"] .perm-card-header {
324
+ background: var(--paper-strong, #1e293b);
325
+ border-color: var(--ink-100, #334155);
326
+ color: var(--ink-50, #f1f5f9);
327
+ }
328
+
329
+ [data-theme="dark"] .perm-card-header:hover {
330
+ background: var(--ink-100, #334155);
331
+ }
332
+
333
+ [data-theme="dark"] .perm-stat-value {
334
+ color: var(--ink-50, #f1f5f9);
335
+ }
336
+
337
+ [data-theme="dark"] .perm-stat-label,
338
+ [data-theme="dark"] .perm-card-title,
339
+ [data-theme="dark"] .perm-pattern-text,
340
+ [data-theme="dark"] .perm-source-name {
341
+ color: var(--ink-200, #e2e8f0);
342
+ }
343
+
344
+ [data-theme="dark"] .perm-feed-entry {
345
+ border-color: var(--ink-100, #334155);
346
+ }
347
+
348
+ [data-theme="dark"] .perm-pattern-badge--deny {
349
+ background: #450a0a;
350
+ color: #fca5a5;
351
+ border-color: #7f1d1d;
352
+ }
353
+
354
+ [data-theme="dark"] .perm-pattern-badge--allow {
355
+ background: #052e16;
356
+ color: #86efac;
357
+ border-color: #14532d;
358
+ }
359
+
360
+ [data-theme="dark"] .perm-pattern-badge--confirm {
361
+ background: #431407;
362
+ color: #fdba74;
363
+ border-color: #7c2d12;
364
+ }
@@ -0,0 +1,235 @@
1
+ /* Session indicator — matches existing site-stats style */
2
+
3
+ .session-indicator {
4
+ display: flex;
5
+ align-items: center;
6
+ }
7
+
8
+ .session-indicator-wrapper {
9
+ position: relative;
10
+ }
11
+
12
+ /* Labeled box — mirrors the "1655 portfolio" / "72 collection" stat boxes */
13
+ .session-box {
14
+ display: inline-flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ gap: 0.3rem;
18
+ padding: 0.25rem 0.6rem;
19
+ min-width: 8.5rem;
20
+ border: 1px solid var(--line, #c8d5e9);
21
+ border-radius: var(--radius-sm, 0.42rem);
22
+ background: var(--paper-strong, #fff);
23
+ color: var(--ink-700, #324563);
24
+ font-family: var(--font-body);
25
+ font-size: var(--step--1, 0.82rem);
26
+ cursor: pointer;
27
+ transition: border-color 0.15s, box-shadow 0.15s;
28
+ line-height: 1.4;
29
+ }
30
+
31
+ .session-box:hover {
32
+ border-color: var(--signal-2, #3b82f6);
33
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--signal-2, #3b82f6) 15%, transparent);
34
+ }
35
+
36
+ .session-box[aria-expanded="true"] {
37
+ border-color: var(--signal, #1e40af);
38
+ }
39
+
40
+ .session-box-count {
41
+ font-weight: 700;
42
+ color: var(--ink-900, #18243a);
43
+ }
44
+
45
+ .session-box-label {
46
+ font-weight: 500;
47
+ }
48
+
49
+ .session-box-arrow {
50
+ display: inline-block;
51
+ width: 0;
52
+ height: 0;
53
+ border-left: 4px solid transparent;
54
+ border-right: 4px solid transparent;
55
+ border-top: 5px solid var(--ink-500, #677893);
56
+ margin-left: 0.2rem;
57
+ transition: transform 0.15s;
58
+ }
59
+
60
+ .session-box[aria-expanded="true"] .session-box-arrow {
61
+ transform: rotate(180deg);
62
+ }
63
+
64
+ /* Dropdown panel */
65
+ .session-dropdown {
66
+ position: absolute;
67
+ top: calc(100% + 0.4rem);
68
+ right: 0;
69
+ min-width: 200px;
70
+ background: var(--paper-strong, #fff);
71
+ border: 1px solid var(--line, #c8d5e9);
72
+ border-radius: var(--radius-md, 0.85rem);
73
+ box-shadow: var(--shadow-soft, 0 0.95rem 1.8rem -1.15rem rgba(17,40,74,0.28));
74
+ z-index: 200;
75
+ overflow: hidden;
76
+ }
77
+
78
+ .session-dropdown-heading {
79
+ padding: 0.5rem 0.75rem 0.3rem;
80
+ font-family: var(--font-heading);
81
+ font-size: var(--step--1, 0.82rem);
82
+ font-weight: 700;
83
+ color: var(--ink-500, #677893);
84
+ text-transform: uppercase;
85
+ letter-spacing: 0.04em;
86
+ border-bottom: 1px solid var(--line, #c8d5e9);
87
+ }
88
+
89
+ .session-dropdown-divider {
90
+ height: 1px;
91
+ background: var(--line, #c8d5e9);
92
+ margin: 0.15rem 0;
93
+ }
94
+
95
+ .session-dropdown-item {
96
+ display: flex;
97
+ align-items: center;
98
+ gap: 0.5rem;
99
+ padding: 0.45rem 0.75rem;
100
+ font-size: var(--step--1, 0.82rem);
101
+ cursor: pointer;
102
+ transition: background 0.1s;
103
+ user-select: none;
104
+ }
105
+
106
+ .session-dropdown-item:hover {
107
+ background: var(--surface-1, #eaf1ff);
108
+ }
109
+
110
+ .session-dropdown-item--selected {
111
+ background: color-mix(in srgb, var(--signal-2, #3b82f6) 8%, transparent);
112
+ }
113
+
114
+ .session-dropdown-item--selected:hover {
115
+ background: color-mix(in srgb, var(--signal-2, #3b82f6) 14%, transparent);
116
+ }
117
+
118
+ .session-dropdown-check {
119
+ width: 1rem;
120
+ text-align: center;
121
+ font-size: 0.75rem;
122
+ font-weight: 700;
123
+ color: var(--signal, #1e40af);
124
+ flex-shrink: 0;
125
+ }
126
+
127
+ .session-dot {
128
+ width: 8px;
129
+ height: 8px;
130
+ border-radius: 50%;
131
+ background: var(--signal-2, #3b82f6);
132
+ flex-shrink: 0;
133
+ }
134
+
135
+ .session-dropdown-name {
136
+ font-weight: 600;
137
+ color: var(--ink-900, #18243a);
138
+ flex: 1;
139
+ }
140
+
141
+ .session-dropdown-uptime {
142
+ font-size: 0.7rem;
143
+ font-family: var(--font-mono, monospace);
144
+ color: var(--ink-500, #677893);
145
+ white-space: nowrap;
146
+ }
147
+
148
+ .session-dropdown-role {
149
+ font-size: 0.65rem;
150
+ font-weight: 600;
151
+ color: var(--ink-500, #677893);
152
+ text-transform: uppercase;
153
+ letter-spacing: 0.04em;
154
+ }
155
+
156
+ /* Dark theme overrides */
157
+ [data-theme="dark"] .session-box {
158
+ background: var(--paper-strong, #1a1a2e);
159
+ border-color: var(--line, #2a3a5e);
160
+ color: var(--ink-500, #8899bb);
161
+ }
162
+
163
+ [data-theme="dark"] .session-box-count {
164
+ color: var(--ink-900, #e0e8f0);
165
+ }
166
+
167
+ [data-theme="dark"] .session-dropdown {
168
+ background: var(--paper-strong, #1a1a2e);
169
+ border-color: var(--line, #2a3a5e);
170
+ }
171
+
172
+ [data-theme="dark"] .session-dropdown-item:hover {
173
+ background: var(--surface-1, #1e2848);
174
+ }
175
+
176
+ [data-theme="dark"] .session-dropdown-item--selected {
177
+ background: color-mix(in srgb, var(--signal-2, #3b82f6) 12%, transparent);
178
+ }
179
+
180
+ [data-theme="dark"] .session-dropdown-check {
181
+ color: var(--signal-2, #3b82f6);
182
+ }
183
+
184
+ [data-theme="dark"] .session-dropdown-divider {
185
+ background: var(--line, #2a3a5e);
186
+ }
187
+
188
+ [data-theme="dark"] .session-dropdown-name {
189
+ color: var(--ink-900, #e0e8f0);
190
+ }
191
+
192
+ /* Kill button */
193
+ .session-kill-btn {
194
+ display: inline-flex;
195
+ align-items: center;
196
+ justify-content: center;
197
+ width: 1.2rem;
198
+ height: 1.2rem;
199
+ border: none;
200
+ border-radius: 50%;
201
+ background: transparent;
202
+ color: var(--ink-500, #677893);
203
+ font-size: 0.85rem;
204
+ font-weight: 600;
205
+ cursor: pointer;
206
+ flex-shrink: 0;
207
+ transition: background 0.15s, color 0.15s;
208
+ line-height: 1;
209
+ padding: 0;
210
+ }
211
+
212
+ .session-kill-btn:hover {
213
+ background: color-mix(in srgb, #ef4444 12%, var(--paper-strong, #fff));
214
+ color: #dc2626;
215
+ }
216
+
217
+ /* Session badge on log entries */
218
+ .log-session-badge {
219
+ display: inline-block;
220
+ padding: 0 0.35rem;
221
+ border-radius: 3px;
222
+ font-size: 0.65rem;
223
+ font-weight: 600;
224
+ color: var(--ink-900, #18243a);
225
+ background: var(--surface-1, #eaf1ff);
226
+ margin-right: 0.35rem;
227
+ vertical-align: middle;
228
+ line-height: 1.4;
229
+ letter-spacing: 0.02em;
230
+ }
231
+
232
+ /* Session filter in the log viewer */
233
+ #log-session-filter {
234
+ min-width: 120px;
235
+ }