@agentconsent/react 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/theme.css ADDED
@@ -0,0 +1,1711 @@
1
+ /**
2
+ * @agentconsent/react — default theme
3
+ *
4
+ * Styles the headless primitives via their data-acp hooks, consuming only
5
+ * tokens.css variables. Swap this file (or override the tokens) to retheme.
6
+ */
7
+
8
+ @import "./tokens.css";
9
+
10
+ [data-acp="root"] {
11
+ display: flex;
12
+ flex-direction: column;
13
+ gap: var(--acp-space-4);
14
+ max-width: 30rem;
15
+ padding: var(--acp-space-5);
16
+ background: var(--acp-color-surface-raised);
17
+ color: var(--acp-color-ink);
18
+ font-family: var(--acp-font-sans);
19
+ font-size: var(--acp-text-sm);
20
+ line-height: var(--acp-leading-normal);
21
+ border-radius: var(--acp-radius-lg);
22
+ box-shadow: var(--acp-shadow-card);
23
+ }
24
+
25
+ [data-acp="root"][data-modal] {
26
+ position: fixed;
27
+ top: 50%;
28
+ left: 50%;
29
+ transform: translate(-50%, -50%);
30
+ width: calc(100vw - 2rem);
31
+ box-shadow: var(--acp-shadow-modal);
32
+ animation: acp-modal-in var(--acp-duration-base) var(--acp-ease);
33
+ }
34
+
35
+ [data-acp="overlay"] {
36
+ position: fixed;
37
+ inset: 0;
38
+ background: rgb(0 0 0 / 0.45);
39
+ animation: acp-fade-in var(--acp-duration-base) var(--acp-ease);
40
+ }
41
+
42
+ @keyframes acp-fade-in {
43
+ from { opacity: 0; }
44
+ }
45
+
46
+ @keyframes acp-modal-in {
47
+ from {
48
+ opacity: 0;
49
+ transform: translate(-50%, calc(-50% + 6px));
50
+ }
51
+ }
52
+
53
+ [data-acp="header"] {
54
+ display: flex;
55
+ align-items: center;
56
+ gap: var(--acp-space-3);
57
+ }
58
+
59
+ [data-acp="icon"] {
60
+ display: grid;
61
+ place-items: center;
62
+ flex-shrink: 0;
63
+ width: 2rem;
64
+ height: 2rem;
65
+ background: var(--acp-color-agent-surface);
66
+ color: var(--acp-color-agent);
67
+ border-radius: var(--acp-radius-md);
68
+ font-size: var(--acp-text-base);
69
+ }
70
+
71
+ [data-acp="title"] {
72
+ margin: 0;
73
+ font-size: var(--acp-text-base);
74
+ font-weight: var(--acp-weight-semibold);
75
+ line-height: var(--acp-leading-tight);
76
+ }
77
+
78
+ [data-acp="fields"] {
79
+ margin: 0;
80
+ border-top: 1px solid var(--acp-color-line);
81
+ }
82
+
83
+ [data-acp="field"] {
84
+ display: grid;
85
+ grid-template-columns: 6.5rem 1fr;
86
+ gap: var(--acp-space-3);
87
+ padding: var(--acp-space-2) 0;
88
+ border-bottom: 1px solid var(--acp-color-line);
89
+ }
90
+
91
+ [data-acp="field-label"] {
92
+ font-family: var(--acp-font-mono);
93
+ font-size: var(--acp-text-xs);
94
+ text-transform: uppercase;
95
+ letter-spacing: 0.06em;
96
+ color: var(--acp-color-ink-faint);
97
+ padding-top: 0.1em;
98
+ }
99
+
100
+ [data-acp="field-value"] {
101
+ margin: 0;
102
+ overflow-wrap: anywhere;
103
+ }
104
+
105
+ [data-acp="content-toggle"] {
106
+ appearance: none;
107
+ border: none;
108
+ background: none;
109
+ padding: 0;
110
+ cursor: pointer;
111
+ font-family: var(--acp-font-mono);
112
+ font-size: var(--acp-text-xs);
113
+ color: var(--acp-color-ink-muted);
114
+ text-decoration: underline;
115
+ text-underline-offset: 3px;
116
+ }
117
+
118
+ [data-acp="content-toggle"]::before {
119
+ content: "▸ ";
120
+ }
121
+
122
+ [data-acp="content"][data-expanded] [data-acp="content-toggle"]::before {
123
+ content: "▾ ";
124
+ }
125
+
126
+ [data-acp="content-body"] {
127
+ margin-top: var(--acp-space-2);
128
+ padding: var(--acp-space-3);
129
+ background: var(--acp-color-surface-sunken);
130
+ border-radius: var(--acp-radius-sm);
131
+ white-space: pre-wrap;
132
+ overflow-wrap: anywhere;
133
+ font-size: var(--acp-text-sm);
134
+ max-height: 16rem;
135
+ overflow-y: auto;
136
+ }
137
+
138
+ [data-acp="source"] {
139
+ display: flex;
140
+ align-items: baseline;
141
+ gap: var(--acp-space-2);
142
+ font-size: var(--acp-text-xs);
143
+ color: var(--acp-color-ink-muted);
144
+ }
145
+
146
+ [data-acp="source-agent"] {
147
+ color: var(--acp-color-agent);
148
+ font-weight: var(--acp-weight-medium);
149
+ }
150
+
151
+ [data-acp="source-authority"]::before {
152
+ content: "· ";
153
+ color: var(--acp-color-ink-faint);
154
+ }
155
+
156
+ [data-acp="actions"] {
157
+ display: flex;
158
+ justify-content: flex-end;
159
+ gap: var(--acp-space-2);
160
+ margin-top: var(--acp-space-1);
161
+ }
162
+
163
+ [data-acp="approve"],
164
+ [data-acp="reject"],
165
+ [data-acp="confirm"],
166
+ [data-acp="cancel"],
167
+ [data-acp="grant"],
168
+ [data-acp="allow-once"],
169
+ [data-acp="allow-always"],
170
+ [data-acp="deny"],
171
+ [data-acp="connection-action"],
172
+ [data-acp="batch-item-approve"],
173
+ [data-acp="batch-item-reject"],
174
+ [data-acp="injection-proceed"],
175
+ [data-acp="injection-dismiss"],
176
+ [data-acp="handoff-continue"],
177
+ [data-acp="handoff-cancel"] {
178
+ appearance: none;
179
+ cursor: pointer;
180
+ font: inherit;
181
+ font-weight: var(--acp-weight-medium);
182
+ padding: var(--acp-space-2) var(--acp-space-4);
183
+ border-radius: var(--acp-radius-md);
184
+ transition: filter var(--acp-duration-fast) var(--acp-ease),
185
+ background-color var(--acp-duration-fast) var(--acp-ease);
186
+ }
187
+
188
+ [data-acp="approve"] {
189
+ border: 1px solid transparent;
190
+ background: var(--acp-color-approve);
191
+ color: var(--acp-color-approve-ink);
192
+ }
193
+
194
+ [data-acp="approve"][data-consequence="irreversible"] {
195
+ background: var(--acp-color-danger);
196
+ color: var(--acp-color-danger-ink);
197
+ }
198
+
199
+ [data-acp="approve"]:hover {
200
+ filter: brightness(1.08);
201
+ }
202
+
203
+ [data-acp="reject"] {
204
+ border: 1px solid var(--acp-color-line-strong);
205
+ background: var(--acp-color-reject);
206
+ color: var(--acp-color-reject-ink);
207
+ }
208
+
209
+ [data-acp="reject"]:hover {
210
+ background: var(--acp-color-surface-sunken);
211
+ }
212
+
213
+ [data-acp="approve"]:focus-visible,
214
+ [data-acp="reject"]:focus-visible,
215
+ [data-acp="confirm"]:focus-visible,
216
+ [data-acp="cancel"]:focus-visible,
217
+ [data-acp="grant"]:focus-visible,
218
+ [data-acp="allow-once"]:focus-visible,
219
+ [data-acp="allow-always"]:focus-visible,
220
+ [data-acp="deny"]:focus-visible,
221
+ [data-acp="connection-action"]:focus-visible,
222
+ [data-acp="scope-checkbox"]:focus-visible,
223
+ [data-acp="confirm-field-input"]:focus-visible,
224
+ [data-acp="content-toggle"]:focus-visible,
225
+ [data-acp="batch-item-approve"]:focus-visible,
226
+ [data-acp="batch-item-reject"]:focus-visible,
227
+ [data-acp="batch-select-all-checkbox"]:focus-visible,
228
+ [data-acp="batch-item-checkbox"]:focus-visible,
229
+ [data-acp="memory-option-radio"]:focus-visible,
230
+ [data-acp="injection-proceed"]:focus-visible,
231
+ [data-acp="injection-dismiss"]:focus-visible,
232
+ [data-acp="handoff-continue"]:focus-visible,
233
+ [data-acp="handoff-cancel"]:focus-visible {
234
+ outline: 2px solid var(--acp-color-focus);
235
+ outline-offset: 2px;
236
+ }
237
+
238
+ /* The segmented authority control hides its radios and styles the labels;
239
+ the focus ring rides on the label when its radio is focused. */
240
+ [data-acp="authority-radio"]:focus-visible + [data-acp="authority-level-label"] {
241
+ outline: 2px solid var(--acp-color-focus);
242
+ outline-offset: 2px;
243
+ }
244
+
245
+ /* ── Irreversibility Gate ─────────────────────────────────────────── */
246
+
247
+ [data-acp="gate-icon"] {
248
+ display: grid;
249
+ place-items: center;
250
+ flex-shrink: 0;
251
+ width: 2rem;
252
+ height: 2rem;
253
+ border-radius: var(--acp-radius-md);
254
+ font-size: var(--acp-text-base);
255
+ background: var(--acp-color-agent-surface);
256
+ color: var(--acp-color-agent);
257
+ }
258
+
259
+ [data-acp="gate-icon"][data-severity="irreversible"] {
260
+ background: var(--acp-color-danger-surface);
261
+ color: var(--acp-color-danger);
262
+ }
263
+
264
+ [data-acp="gate-description"] {
265
+ margin: 0;
266
+ color: var(--acp-color-ink-muted);
267
+ }
268
+
269
+ [data-acp="gate-consequences"] {
270
+ list-style: none;
271
+ margin: 0;
272
+ padding: var(--acp-space-3) var(--acp-space-4);
273
+ display: flex;
274
+ flex-direction: column;
275
+ gap: var(--acp-space-2);
276
+ background: var(--acp-color-surface-sunken);
277
+ border-radius: var(--acp-radius-md);
278
+ }
279
+
280
+ [data-acp="gate-consequence"] {
281
+ display: flex;
282
+ align-items: baseline;
283
+ gap: var(--acp-space-3);
284
+ }
285
+
286
+ [data-acp="gate-consequence-marker"]::before {
287
+ content: "—";
288
+ color: var(--acp-color-ink-faint);
289
+ }
290
+
291
+ [data-severity="irreversible"] [data-acp="gate-consequence-marker"]::before {
292
+ content: "✕";
293
+ color: var(--acp-color-danger);
294
+ font-size: var(--acp-text-xs);
295
+ }
296
+
297
+ [data-acp="confirm-field"] {
298
+ display: flex;
299
+ flex-direction: column;
300
+ gap: var(--acp-space-2);
301
+ }
302
+
303
+ [data-acp="confirm-field-label"] {
304
+ font-size: var(--acp-text-xs);
305
+ color: var(--acp-color-ink-muted);
306
+ }
307
+
308
+ [data-acp="confirm-field-phrase"] {
309
+ font-family: var(--acp-font-mono);
310
+ font-weight: var(--acp-weight-semibold);
311
+ color: var(--acp-color-ink);
312
+ }
313
+
314
+ [data-acp="confirm-field-input"] {
315
+ appearance: none;
316
+ font: inherit;
317
+ font-family: var(--acp-font-mono);
318
+ padding: var(--acp-space-2) var(--acp-space-3);
319
+ color: var(--acp-color-ink);
320
+ background: var(--acp-color-surface);
321
+ border: 1px solid var(--acp-color-line-strong);
322
+ border-radius: var(--acp-radius-md);
323
+ }
324
+
325
+ [data-acp="confirm"] {
326
+ border: 1px solid transparent;
327
+ background: var(--acp-color-approve);
328
+ color: var(--acp-color-approve-ink);
329
+ }
330
+
331
+ [data-acp="confirm"][data-severity="irreversible"] {
332
+ background: var(--acp-color-danger);
333
+ color: var(--acp-color-danger-ink);
334
+ }
335
+
336
+ [data-acp="confirm"]:hover:not(:disabled) {
337
+ filter: brightness(1.08);
338
+ }
339
+
340
+ [data-acp="confirm"]:disabled {
341
+ cursor: not-allowed;
342
+ background: var(--acp-color-surface-sunken);
343
+ color: var(--acp-color-ink-faint);
344
+ }
345
+
346
+ [data-acp="cancel"] {
347
+ border: 1px solid var(--acp-color-line-strong);
348
+ background: var(--acp-color-reject);
349
+ color: var(--acp-color-reject-ink);
350
+ }
351
+
352
+ [data-acp="cancel"]:hover {
353
+ background: var(--acp-color-surface-sunken);
354
+ }
355
+
356
+ /* ── Scoped Grant ─────────────────────────────────────────────────── */
357
+
358
+ [data-acp="grant-description"] {
359
+ margin: 0;
360
+ color: var(--acp-color-ink-muted);
361
+ }
362
+
363
+ [data-acp="grant-group"] {
364
+ margin: 0;
365
+ padding: 0;
366
+ border: none;
367
+ display: flex;
368
+ flex-direction: column;
369
+ gap: var(--acp-space-1);
370
+ }
371
+
372
+ [data-acp="grant-group"] + [data-acp="grant-group"] {
373
+ margin-top: var(--acp-space-3);
374
+ }
375
+
376
+ [data-acp="grant-group-legend"] {
377
+ display: flex;
378
+ flex-wrap: wrap;
379
+ align-items: baseline;
380
+ gap: var(--acp-space-2);
381
+ padding: 0 0 var(--acp-space-2);
382
+ width: 100%;
383
+ border-bottom: 1px solid var(--acp-color-line);
384
+ }
385
+
386
+ [data-acp="grant-group-label"] {
387
+ font-weight: var(--acp-weight-semibold);
388
+ }
389
+
390
+ [data-acp="grant-group-resource"] {
391
+ font-family: var(--acp-font-mono);
392
+ font-size: var(--acp-text-xs);
393
+ color: var(--acp-color-ink-faint);
394
+ }
395
+
396
+ [data-acp="grant-group-resource"]::before {
397
+ content: "· ";
398
+ }
399
+
400
+ [data-acp="scope"] {
401
+ display: grid;
402
+ grid-template-columns: auto 1fr;
403
+ gap: var(--acp-space-3);
404
+ padding: var(--acp-space-3) 0;
405
+ border-bottom: 1px solid var(--acp-color-line);
406
+ }
407
+
408
+ [data-acp="scope-checkbox"] {
409
+ margin: 0;
410
+ width: 1.05rem;
411
+ height: 1.05rem;
412
+ accent-color: var(--acp-color-approve);
413
+ align-self: start;
414
+ margin-top: 0.15em;
415
+ }
416
+
417
+ [data-acp="scope-checkbox"]:disabled {
418
+ cursor: not-allowed;
419
+ }
420
+
421
+ [data-acp="scope-body"] {
422
+ display: flex;
423
+ flex-direction: column;
424
+ gap: var(--acp-space-1);
425
+ }
426
+
427
+ [data-acp="scope-label"] {
428
+ display: flex;
429
+ flex-wrap: wrap;
430
+ align-items: baseline;
431
+ gap: var(--acp-space-2);
432
+ cursor: pointer;
433
+ font-weight: var(--acp-weight-medium);
434
+ }
435
+
436
+ [data-acp="scope-checkbox"]:disabled + [data-acp="scope-body"] [data-acp="scope-label"] {
437
+ cursor: not-allowed;
438
+ }
439
+
440
+ [data-acp="scope-access"],
441
+ [data-acp="request-access"],
442
+ [data-acp="connection-access"],
443
+ [data-acp="authority-access"] {
444
+ flex-shrink: 0;
445
+ padding: 0.05em var(--acp-space-2);
446
+ border-radius: var(--acp-radius-sm);
447
+ font-family: var(--acp-font-mono);
448
+ font-size: var(--acp-text-xs);
449
+ font-weight: var(--acp-weight-medium);
450
+ letter-spacing: 0.02em;
451
+ /* read is the default (least privilege) styling */
452
+ background: var(--acp-color-agent-surface);
453
+ color: var(--acp-color-agent);
454
+ }
455
+
456
+ [data-acp="scope-access"][data-access="write"],
457
+ [data-acp="request-access"][data-access="write"],
458
+ [data-acp="connection-access"][data-access="write"],
459
+ [data-acp="authority-access"][data-access="write"] {
460
+ background: var(--acp-color-untrusted-surface);
461
+ color: var(--acp-color-untrusted);
462
+ }
463
+
464
+ [data-acp="scope-access"][data-access="delete"],
465
+ [data-acp="request-access"][data-access="delete"],
466
+ [data-acp="connection-access"][data-access="delete"],
467
+ [data-acp="authority-access"][data-access="delete"] {
468
+ background: var(--acp-color-danger-surface);
469
+ color: var(--acp-color-danger);
470
+ }
471
+
472
+ [data-acp="scope-required-tag"] {
473
+ font-family: var(--acp-font-mono);
474
+ font-size: var(--acp-text-xs);
475
+ font-weight: var(--acp-weight-normal);
476
+ color: var(--acp-color-ink-faint);
477
+ }
478
+
479
+ [data-acp="scope-description"] {
480
+ margin: 0;
481
+ font-size: var(--acp-text-xs);
482
+ color: var(--acp-color-ink-muted);
483
+ }
484
+
485
+ /* A granted write/delete scope earns a quiet emphasis on its access badge. */
486
+ [data-acp="scope"][data-granted][data-access="delete"] [data-acp="scope-access"],
487
+ [data-acp="scope"][data-granted][data-access="write"] [data-acp="scope-access"] {
488
+ outline: 1px solid currentColor;
489
+ }
490
+
491
+ [data-acp="grant"] {
492
+ border: 1px solid transparent;
493
+ background: var(--acp-color-approve);
494
+ color: var(--acp-color-approve-ink);
495
+ }
496
+
497
+ [data-acp="grant"]:hover {
498
+ filter: brightness(1.08);
499
+ }
500
+
501
+ /* ── Progressive Scope ────────────────────────────────────────────── */
502
+
503
+ [data-acp="root"][data-escalation] {
504
+ border-left: 3px solid var(--acp-color-agent);
505
+ }
506
+
507
+ [data-acp="root"][data-escalation][data-access="write"] {
508
+ border-left-color: var(--acp-color-untrusted);
509
+ }
510
+
511
+ [data-acp="root"][data-escalation][data-access="delete"] {
512
+ border-left-color: var(--acp-color-danger);
513
+ }
514
+
515
+ [data-acp="escalation-reason"] {
516
+ margin: 0;
517
+ color: var(--acp-color-ink-muted);
518
+ }
519
+
520
+ [data-acp="request"] {
521
+ display: flex;
522
+ flex-direction: column;
523
+ gap: var(--acp-space-1);
524
+ padding: var(--acp-space-3);
525
+ background: var(--acp-color-surface-sunken);
526
+ border-radius: var(--acp-radius-md);
527
+ }
528
+
529
+ [data-acp="request-head"] {
530
+ display: flex;
531
+ flex-wrap: wrap;
532
+ align-items: baseline;
533
+ gap: var(--acp-space-2);
534
+ }
535
+
536
+ [data-acp="request-name"] {
537
+ font-weight: var(--acp-weight-semibold);
538
+ }
539
+
540
+ [data-acp="request-description"] {
541
+ margin: 0;
542
+ font-size: var(--acp-text-xs);
543
+ color: var(--acp-color-ink-muted);
544
+ }
545
+
546
+ [data-acp="escalation-current"] {
547
+ display: flex;
548
+ align-items: baseline;
549
+ gap: var(--acp-space-2);
550
+ font-size: var(--acp-text-xs);
551
+ color: var(--acp-color-ink-muted);
552
+ }
553
+
554
+ [data-acp="escalation-current-marker"]::before {
555
+ content: "✓";
556
+ color: var(--acp-color-approve);
557
+ }
558
+
559
+ [data-acp="actions"][data-escalation-actions] {
560
+ flex-wrap: wrap;
561
+ }
562
+
563
+ /* Deny is the calm, least-escalation resting choice. */
564
+ [data-acp="deny"] {
565
+ border: 1px solid var(--acp-color-line-strong);
566
+ background: var(--acp-color-reject);
567
+ color: var(--acp-color-reject-ink);
568
+ }
569
+
570
+ [data-acp="deny"]:hover {
571
+ background: var(--acp-color-surface-sunken);
572
+ }
573
+
574
+ /* Allow once: the moderate grant — permit just the blocked action. */
575
+ [data-acp="allow-once"] {
576
+ border: 1px solid transparent;
577
+ background: var(--acp-color-approve);
578
+ color: var(--acp-color-approve-ink);
579
+ }
580
+
581
+ [data-acp="allow-once"]:hover {
582
+ filter: brightness(1.08);
583
+ }
584
+
585
+ /* Allow always: the standing escalation — deliberately subordinate to
586
+ "once" so the UI never nudges toward over-granting. */
587
+ [data-acp="allow-always"] {
588
+ border: 1px solid var(--acp-color-line-strong);
589
+ background: transparent;
590
+ color: var(--acp-color-ink);
591
+ }
592
+
593
+ [data-acp="allow-always"]:hover {
594
+ background: var(--acp-color-surface-sunken);
595
+ }
596
+
597
+ /* ── Connection Card ──────────────────────────────────────────────── */
598
+
599
+ [data-acp="root"][data-connection] {
600
+ gap: var(--acp-space-3);
601
+ }
602
+
603
+ /* A paused or lapsed connection reads dimmer, but stays legible. */
604
+ [data-acp="root"][data-connection][data-status="paused"],
605
+ [data-acp="root"][data-connection][data-status="expired"] {
606
+ background: var(--acp-color-surface);
607
+ }
608
+
609
+ [data-acp="header"][data-connection-header] {
610
+ justify-content: flex-start;
611
+ gap: var(--acp-space-3);
612
+ }
613
+
614
+ [data-acp="header"][data-connection-header] [data-acp="title"] {
615
+ flex: 1;
616
+ }
617
+
618
+ [data-acp="connection-status"] {
619
+ flex-shrink: 0;
620
+ padding: 0.1em var(--acp-space-2);
621
+ border-radius: var(--acp-radius-sm);
622
+ font-family: var(--acp-font-mono);
623
+ font-size: var(--acp-text-xs);
624
+ font-weight: var(--acp-weight-medium);
625
+ background: var(--acp-color-surface-sunken);
626
+ color: var(--acp-color-ink-muted);
627
+ }
628
+
629
+ [data-acp="connection-status"][data-status="active"] {
630
+ background: var(--acp-color-agent-surface);
631
+ color: var(--acp-color-agent);
632
+ }
633
+
634
+ [data-acp="connection-status"][data-status="needs-reauth"] {
635
+ background: var(--acp-color-untrusted-surface);
636
+ color: var(--acp-color-untrusted);
637
+ }
638
+
639
+ [data-acp="connection-status"][data-status="expired"] {
640
+ background: var(--acp-color-danger-surface);
641
+ color: var(--acp-color-danger);
642
+ }
643
+
644
+ [data-acp="connection-scopes"] {
645
+ list-style: none;
646
+ margin: 0;
647
+ padding: 0;
648
+ display: flex;
649
+ flex-wrap: wrap;
650
+ gap: var(--acp-space-2) var(--acp-space-3);
651
+ }
652
+
653
+ [data-acp="connection-scope"] {
654
+ display: inline-flex;
655
+ align-items: baseline;
656
+ gap: var(--acp-space-2);
657
+ }
658
+
659
+ [data-acp="connection-scope-name"] {
660
+ font-size: var(--acp-text-sm);
661
+ }
662
+
663
+ [data-acp="connection-meta"] {
664
+ margin: 0;
665
+ display: flex;
666
+ flex-wrap: wrap;
667
+ gap: var(--acp-space-1) var(--acp-space-6);
668
+ }
669
+
670
+ [data-acp="connection-meta-item"] {
671
+ display: flex;
672
+ align-items: baseline;
673
+ gap: var(--acp-space-2);
674
+ }
675
+
676
+ [data-acp="connection-meta-label"] {
677
+ font-family: var(--acp-font-mono);
678
+ font-size: var(--acp-text-xs);
679
+ text-transform: uppercase;
680
+ letter-spacing: 0.06em;
681
+ color: var(--acp-color-ink-faint);
682
+ }
683
+
684
+ [data-acp="connection-meta-value"] {
685
+ margin: 0;
686
+ font-size: var(--acp-text-xs);
687
+ color: var(--acp-color-ink-muted);
688
+ }
689
+
690
+ [data-acp="actions"][data-connection-actions] {
691
+ justify-content: flex-start;
692
+ flex-wrap: wrap;
693
+ gap: var(--acp-space-2);
694
+ padding-top: var(--acp-space-1);
695
+ border-top: 1px solid var(--acp-color-line);
696
+ }
697
+
698
+ [data-acp="connection-action"] {
699
+ padding: var(--acp-space-1) var(--acp-space-3);
700
+ font-size: var(--acp-text-sm);
701
+ border: 1px solid var(--acp-color-line-strong);
702
+ background: transparent;
703
+ color: var(--acp-color-ink);
704
+ }
705
+
706
+ [data-acp="connection-action"]:hover {
707
+ background: var(--acp-color-surface-sunken);
708
+ }
709
+
710
+ [data-acp="connection-action"][data-tone="danger"] {
711
+ border-color: var(--acp-color-danger);
712
+ color: var(--acp-color-danger);
713
+ }
714
+
715
+ [data-acp="connection-action"][data-tone="danger"]:hover {
716
+ background: var(--acp-color-danger-surface);
717
+ }
718
+
719
+ /* ── Batch Approval ───────────────────────────────────────────────── */
720
+
721
+ [data-acp="root"][data-batch] {
722
+ max-width: 34rem;
723
+ gap: var(--acp-space-3);
724
+ }
725
+
726
+ [data-acp="batch-description"] {
727
+ margin: 0;
728
+ color: var(--acp-color-ink-muted);
729
+ }
730
+
731
+ [data-acp="batch-toolbar"] {
732
+ display: flex;
733
+ flex-wrap: wrap;
734
+ align-items: center;
735
+ gap: var(--acp-space-2) var(--acp-space-3);
736
+ padding: var(--acp-space-2) var(--acp-space-3);
737
+ background: var(--acp-color-surface-sunken);
738
+ border-radius: var(--acp-radius-md);
739
+ }
740
+
741
+ [data-acp="batch-select-all"] {
742
+ display: flex;
743
+ align-items: center;
744
+ gap: var(--acp-space-2);
745
+ }
746
+
747
+ [data-acp="batch-select-all-checkbox"] {
748
+ margin: 0;
749
+ width: 1.05rem;
750
+ height: 1.05rem;
751
+ accent-color: var(--acp-color-approve);
752
+ }
753
+
754
+ [data-acp="batch-select-all-checkbox"]:disabled {
755
+ cursor: not-allowed;
756
+ }
757
+
758
+ [data-acp="batch-select-all-label"] {
759
+ cursor: pointer;
760
+ font-weight: var(--acp-weight-medium);
761
+ }
762
+
763
+ [data-acp="batch-selection-count"] {
764
+ margin-right: auto;
765
+ font-family: var(--acp-font-mono);
766
+ font-size: var(--acp-text-xs);
767
+ color: var(--acp-color-ink-muted);
768
+ }
769
+
770
+ /* The batch buttons reuse the approve/reject base; make them compact. */
771
+ [data-acp="approve"][data-batch-action],
772
+ [data-acp="reject"][data-batch-action] {
773
+ padding: var(--acp-space-1) var(--acp-space-3);
774
+ font-size: var(--acp-text-sm);
775
+ }
776
+
777
+ [data-acp="approve"][data-batch-action]:disabled,
778
+ [data-acp="reject"][data-batch-action]:disabled {
779
+ cursor: not-allowed;
780
+ background: var(--acp-color-surface);
781
+ border-color: var(--acp-color-line);
782
+ color: var(--acp-color-ink-faint);
783
+ filter: none;
784
+ }
785
+
786
+ [data-acp="batch-list"] {
787
+ list-style: none;
788
+ margin: 0;
789
+ padding: 0;
790
+ display: flex;
791
+ flex-direction: column;
792
+ }
793
+
794
+ [data-acp="batch-item"] {
795
+ display: grid;
796
+ grid-template-columns: auto 1fr auto;
797
+ align-items: center;
798
+ gap: var(--acp-space-3);
799
+ padding: var(--acp-space-3) var(--acp-space-1);
800
+ border-bottom: 1px solid var(--acp-color-line);
801
+ }
802
+
803
+ [data-acp="batch-item"]:last-child {
804
+ border-bottom: none;
805
+ }
806
+
807
+ [data-acp="batch-item"][data-selected] {
808
+ background: var(--acp-color-agent-surface);
809
+ border-radius: var(--acp-radius-sm);
810
+ }
811
+
812
+ /* A must-review item breaks the queue's rhythm on purpose. */
813
+ [data-acp="batch-item"][data-review] {
814
+ border-left: 3px solid var(--acp-color-danger);
815
+ padding-left: var(--acp-space-3);
816
+ }
817
+
818
+ [data-acp="batch-item-select"] {
819
+ display: grid;
820
+ place-items: center;
821
+ min-width: 1.05rem;
822
+ }
823
+
824
+ [data-acp="batch-item-checkbox"] {
825
+ margin: 0;
826
+ width: 1.05rem;
827
+ height: 1.05rem;
828
+ accent-color: var(--acp-color-approve);
829
+ }
830
+
831
+ [data-acp="batch-item-flag"] {
832
+ writing-mode: horizontal-tb;
833
+ font-family: var(--acp-font-mono);
834
+ font-size: var(--acp-text-xs);
835
+ font-weight: var(--acp-weight-medium);
836
+ color: var(--acp-color-danger);
837
+ white-space: nowrap;
838
+ }
839
+
840
+ [data-acp="batch-item-body"] {
841
+ display: flex;
842
+ flex-direction: column;
843
+ gap: var(--acp-space-1);
844
+ min-width: 0;
845
+ }
846
+
847
+ [data-acp="batch-item-title"] {
848
+ font-weight: var(--acp-weight-medium);
849
+ cursor: pointer;
850
+ }
851
+
852
+ [data-acp="batch-item"][data-review] [data-acp="batch-item-title"] {
853
+ cursor: default;
854
+ }
855
+
856
+ [data-acp="batch-item-detail"] {
857
+ margin: 0;
858
+ font-size: var(--acp-text-xs);
859
+ color: var(--acp-color-ink-muted);
860
+ }
861
+
862
+ [data-acp="batch-item-actions"] {
863
+ display: flex;
864
+ gap: var(--acp-space-1);
865
+ }
866
+
867
+ [data-acp="batch-item-approve"],
868
+ [data-acp="batch-item-reject"] {
869
+ padding: var(--acp-space-1) var(--acp-space-2);
870
+ font-size: var(--acp-text-xs);
871
+ border-radius: var(--acp-radius-sm);
872
+ border: 1px solid var(--acp-color-line-strong);
873
+ background: transparent;
874
+ color: var(--acp-color-ink);
875
+ }
876
+
877
+ [data-acp="batch-item-approve"]:hover,
878
+ [data-acp="batch-item-reject"]:hover {
879
+ background: var(--acp-color-surface-sunken);
880
+ }
881
+
882
+ [data-acp="batch-item-approve"] {
883
+ border-color: var(--acp-color-approve);
884
+ color: var(--acp-color-approve);
885
+ }
886
+
887
+ [data-acp="batch-item-approve"]:hover {
888
+ background: var(--acp-color-agent-surface);
889
+ }
890
+
891
+ /* ── Consent Memory ───────────────────────────────────────────────── */
892
+
893
+ [data-acp="memory-description"] {
894
+ margin: 0;
895
+ color: var(--acp-color-ink-muted);
896
+ }
897
+
898
+ [data-acp="memory-options"] {
899
+ margin: 0;
900
+ padding: 0;
901
+ border: none;
902
+ display: flex;
903
+ flex-direction: column;
904
+ gap: var(--acp-space-2);
905
+ }
906
+
907
+ [data-acp="memory-options-legend"] {
908
+ padding: 0 0 var(--acp-space-1);
909
+ font-family: var(--acp-font-mono);
910
+ font-size: var(--acp-text-xs);
911
+ text-transform: uppercase;
912
+ letter-spacing: 0.06em;
913
+ color: var(--acp-color-ink-faint);
914
+ }
915
+
916
+ [data-acp="memory-option"] {
917
+ display: grid;
918
+ grid-template-columns: auto 1fr;
919
+ gap: var(--acp-space-3);
920
+ padding: var(--acp-space-3);
921
+ border: 1px solid var(--acp-color-line);
922
+ border-radius: var(--acp-radius-md);
923
+ }
924
+
925
+ [data-acp="memory-option"][data-selected] {
926
+ border-color: var(--acp-color-line-strong);
927
+ background: var(--acp-color-surface-sunken);
928
+ }
929
+
930
+ /* A standing "always" grant is drawn with the untrusted accent — a deliberate,
931
+ legible weight so the heaviest choice never looks like the lightest. */
932
+ [data-acp="memory-option"][data-durability="always"][data-selected] {
933
+ border-color: var(--acp-color-untrusted);
934
+ background: var(--acp-color-untrusted-surface);
935
+ }
936
+
937
+ [data-acp="memory-option-radio"] {
938
+ margin: 0;
939
+ width: 1.05rem;
940
+ height: 1.05rem;
941
+ accent-color: var(--acp-color-approve);
942
+ align-self: start;
943
+ margin-top: 0.15em;
944
+ }
945
+
946
+ [data-acp="memory-option-body"] {
947
+ display: flex;
948
+ flex-direction: column;
949
+ gap: var(--acp-space-1);
950
+ min-width: 0;
951
+ }
952
+
953
+ [data-acp="memory-option-label"] {
954
+ display: flex;
955
+ flex-wrap: wrap;
956
+ align-items: baseline;
957
+ gap: var(--acp-space-2);
958
+ cursor: pointer;
959
+ }
960
+
961
+ [data-acp="memory-option-name"] {
962
+ font-weight: var(--acp-weight-medium);
963
+ }
964
+
965
+ [data-acp="memory-option-hint"] {
966
+ flex-shrink: 0;
967
+ padding: 0.05em var(--acp-space-2);
968
+ border-radius: var(--acp-radius-sm);
969
+ font-family: var(--acp-font-mono);
970
+ font-size: var(--acp-text-xs);
971
+ font-weight: var(--acp-weight-medium);
972
+ letter-spacing: 0.02em;
973
+ background: var(--acp-color-agent-surface);
974
+ color: var(--acp-color-agent);
975
+ }
976
+
977
+ [data-acp="memory-option-hint"][data-durability="always"],
978
+ [data-acp="memory-option-hint"][data-durability="scoped"] {
979
+ background: var(--acp-color-untrusted-surface);
980
+ color: var(--acp-color-untrusted);
981
+ }
982
+
983
+ [data-acp="memory-option-consequence"] {
984
+ margin: 0;
985
+ font-size: var(--acp-text-xs);
986
+ color: var(--acp-color-ink-muted);
987
+ }
988
+
989
+ /* The confirm reuses the allow-once base; make it fill the standing weight of
990
+ the choice, so "Allow always" is never a quieter button than "Allow once". */
991
+ [data-acp="allow-once"][data-memory-allow][data-durability="always"] {
992
+ background: var(--acp-color-untrusted);
993
+ color: var(--acp-color-danger-ink);
994
+ }
995
+
996
+ /* ── Authority Boundary ───────────────────────────────────────────── */
997
+
998
+ [data-acp="root"][data-authority] {
999
+ max-width: 34rem;
1000
+ gap: var(--acp-space-3);
1001
+ }
1002
+
1003
+ [data-acp="authority-description"] {
1004
+ margin: 0;
1005
+ color: var(--acp-color-ink-muted);
1006
+ }
1007
+
1008
+ [data-acp="authority-summary"] {
1009
+ margin: 0;
1010
+ font-family: var(--acp-font-mono);
1011
+ font-size: var(--acp-text-xs);
1012
+ color: var(--acp-color-ink-muted);
1013
+ }
1014
+
1015
+ [data-acp="authority-list"] {
1016
+ list-style: none;
1017
+ margin: 0;
1018
+ padding: 0;
1019
+ display: flex;
1020
+ flex-direction: column;
1021
+ }
1022
+
1023
+ [data-acp="authority-capability"] {
1024
+ display: flex;
1025
+ flex-wrap: wrap;
1026
+ align-items: center;
1027
+ justify-content: space-between;
1028
+ gap: var(--acp-space-2) var(--acp-space-4);
1029
+ padding: var(--acp-space-3) 0;
1030
+ border-bottom: 1px solid var(--acp-color-line);
1031
+ }
1032
+
1033
+ [data-acp="authority-capability"]:last-child {
1034
+ border-bottom: none;
1035
+ }
1036
+
1037
+ /* An "automatic" capability carries a quiet standing accent; "never" reads
1038
+ struck-through-calm, never alarming. */
1039
+ [data-acp="authority-capability"][data-level="auto"] {
1040
+ border-left: 3px solid var(--acp-color-agent);
1041
+ padding-left: var(--acp-space-3);
1042
+ }
1043
+
1044
+ [data-acp="authority-capability"][data-level="auto"][data-access="write"] {
1045
+ border-left-color: var(--acp-color-untrusted);
1046
+ }
1047
+
1048
+ [data-acp="authority-capability"][data-level="auto"][data-access="delete"] {
1049
+ border-left-color: var(--acp-color-danger);
1050
+ }
1051
+
1052
+ [data-acp="authority-capability-body"] {
1053
+ display: flex;
1054
+ flex-direction: column;
1055
+ gap: var(--acp-space-1);
1056
+ min-width: 12rem;
1057
+ flex: 1;
1058
+ }
1059
+
1060
+ [data-acp="authority-capability-head"] {
1061
+ display: flex;
1062
+ flex-wrap: wrap;
1063
+ align-items: baseline;
1064
+ gap: var(--acp-space-2);
1065
+ }
1066
+
1067
+ [data-acp="authority-capability-name"] {
1068
+ font-weight: var(--acp-weight-medium);
1069
+ }
1070
+
1071
+ [data-acp="authority-capability-description"] {
1072
+ margin: 0;
1073
+ font-size: var(--acp-text-xs);
1074
+ color: var(--acp-color-ink-muted);
1075
+ }
1076
+
1077
+ /* Segmented control: a bordered track of three label-buttons. */
1078
+ [data-acp="authority-control"] {
1079
+ margin: 0;
1080
+ padding: 0;
1081
+ border: none;
1082
+ display: inline-flex;
1083
+ flex-shrink: 0;
1084
+ border: 1px solid var(--acp-color-line-strong);
1085
+ border-radius: var(--acp-radius-md);
1086
+ overflow: hidden;
1087
+ }
1088
+
1089
+ [data-acp="authority-control-legend"] {
1090
+ position: absolute;
1091
+ width: 1px;
1092
+ height: 1px;
1093
+ padding: 0;
1094
+ margin: -1px;
1095
+ overflow: hidden;
1096
+ clip: rect(0, 0, 0, 0);
1097
+ white-space: nowrap;
1098
+ border: 0;
1099
+ }
1100
+
1101
+ [data-acp="authority-radio"] {
1102
+ position: absolute;
1103
+ width: 1px;
1104
+ height: 1px;
1105
+ padding: 0;
1106
+ margin: -1px;
1107
+ overflow: hidden;
1108
+ clip: rect(0, 0, 0, 0);
1109
+ white-space: nowrap;
1110
+ border: 0;
1111
+ }
1112
+
1113
+ [data-acp="authority-level-label"] {
1114
+ padding: var(--acp-space-1) var(--acp-space-3);
1115
+ font-size: var(--acp-text-sm);
1116
+ font-weight: var(--acp-weight-medium);
1117
+ color: var(--acp-color-ink-muted);
1118
+ background: var(--acp-color-surface);
1119
+ cursor: pointer;
1120
+ border-left: 1px solid var(--acp-color-line);
1121
+ }
1122
+
1123
+ [data-acp="authority-level-label"]:first-of-type {
1124
+ border-left: none;
1125
+ }
1126
+
1127
+ [data-acp="authority-level-label"]:hover {
1128
+ background: var(--acp-color-surface-sunken);
1129
+ }
1130
+
1131
+ /* Selected segment, tinted by what it means. */
1132
+ [data-acp="authority-radio"][data-level="auto"]:checked
1133
+ + [data-acp="authority-level-label"] {
1134
+ background: var(--acp-color-agent);
1135
+ color: var(--acp-color-approve-ink);
1136
+ }
1137
+
1138
+ [data-acp="authority-radio"][data-level="ask"]:checked
1139
+ + [data-acp="authority-level-label"] {
1140
+ background: var(--acp-color-surface-sunken);
1141
+ color: var(--acp-color-ink);
1142
+ }
1143
+
1144
+ [data-acp="authority-radio"][data-level="never"]:checked
1145
+ + [data-acp="authority-level-label"] {
1146
+ background: var(--acp-color-danger);
1147
+ color: var(--acp-color-danger-ink);
1148
+ }
1149
+
1150
+ [data-acp="authority-radio"]:disabled + [data-acp="authority-level-label"] {
1151
+ color: var(--acp-color-ink-faint);
1152
+ cursor: not-allowed;
1153
+ text-decoration: line-through;
1154
+ }
1155
+
1156
+ [data-acp="authority-radio"]:disabled:hover
1157
+ + [data-acp="authority-level-label"] {
1158
+ background: var(--acp-color-surface);
1159
+ }
1160
+
1161
+ /* ── Spend & Rate Limits ──────────────────────────────────────────── */
1162
+
1163
+ [data-acp="root"][data-limits] {
1164
+ max-width: 34rem;
1165
+ gap: var(--acp-space-3);
1166
+ }
1167
+
1168
+ [data-acp="limits-description"] {
1169
+ margin: 0;
1170
+ color: var(--acp-color-ink-muted);
1171
+ }
1172
+
1173
+ [data-acp="limits-summary"] {
1174
+ margin: 0;
1175
+ font-family: var(--acp-font-mono);
1176
+ font-size: var(--acp-text-xs);
1177
+ color: var(--acp-color-ink-muted);
1178
+ }
1179
+
1180
+ [data-acp="limits-list"] {
1181
+ list-style: none;
1182
+ margin: 0;
1183
+ padding: 0;
1184
+ display: flex;
1185
+ flex-direction: column;
1186
+ }
1187
+
1188
+ [data-acp="limits-limit"] {
1189
+ display: flex;
1190
+ flex-wrap: wrap;
1191
+ align-items: flex-start;
1192
+ justify-content: space-between;
1193
+ gap: var(--acp-space-3) var(--acp-space-4);
1194
+ padding: var(--acp-space-4) 0;
1195
+ border-bottom: 1px solid var(--acp-color-line);
1196
+ }
1197
+
1198
+ [data-acp="limits-limit"]:last-child {
1199
+ border-bottom: none;
1200
+ }
1201
+
1202
+ /* A reached cap carries a quiet danger accent; a near-cap limit an amber one.
1203
+ Color is redundant — the readout and status line say it in words. */
1204
+ [data-acp="limits-limit"][data-state="warning"] {
1205
+ border-left: 3px solid var(--acp-color-untrusted);
1206
+ padding-left: var(--acp-space-3);
1207
+ }
1208
+
1209
+ [data-acp="limits-limit"][data-state="reached"] {
1210
+ border-left: 3px solid var(--acp-color-danger);
1211
+ padding-left: var(--acp-space-3);
1212
+ }
1213
+
1214
+ [data-acp="limits-limit-body"] {
1215
+ display: flex;
1216
+ flex-direction: column;
1217
+ gap: var(--acp-space-2);
1218
+ min-width: 14rem;
1219
+ flex: 1;
1220
+ }
1221
+
1222
+ [data-acp="limits-limit-head"] {
1223
+ display: flex;
1224
+ flex-wrap: wrap;
1225
+ align-items: baseline;
1226
+ gap: var(--acp-space-2);
1227
+ }
1228
+
1229
+ [data-acp="limits-kind"] {
1230
+ flex-shrink: 0;
1231
+ padding: 0.05em var(--acp-space-2);
1232
+ border-radius: var(--acp-radius-sm);
1233
+ font-family: var(--acp-font-mono);
1234
+ font-size: var(--acp-text-xs);
1235
+ font-weight: var(--acp-weight-medium);
1236
+ letter-spacing: 0.02em;
1237
+ background: var(--acp-color-agent-surface);
1238
+ color: var(--acp-color-agent);
1239
+ }
1240
+
1241
+ [data-acp="limits-kind"][data-kind="spend"] {
1242
+ background: var(--acp-color-untrusted-surface);
1243
+ color: var(--acp-color-untrusted);
1244
+ }
1245
+
1246
+ [data-acp="limits-limit-name"] {
1247
+ font-weight: var(--acp-weight-medium);
1248
+ }
1249
+
1250
+ [data-acp="limits-limit-description"] {
1251
+ margin: 0;
1252
+ font-size: var(--acp-text-xs);
1253
+ color: var(--acp-color-ink-muted);
1254
+ }
1255
+
1256
+ /* Meter: a track with a fill sized to usage, plus a text readout that carries
1257
+ the real numbers (the bar is decorative and aria-hidden). */
1258
+ [data-acp="limits-meter"] {
1259
+ display: flex;
1260
+ flex-direction: column;
1261
+ gap: var(--acp-space-1);
1262
+ }
1263
+
1264
+ [data-acp="limits-meter-track"] {
1265
+ display: block;
1266
+ height: 6px;
1267
+ border-radius: 999px;
1268
+ background: var(--acp-color-surface-sunken);
1269
+ overflow: hidden;
1270
+ }
1271
+
1272
+ [data-acp="limits-meter-fill"] {
1273
+ display: block;
1274
+ height: 100%;
1275
+ border-radius: 999px;
1276
+ background: var(--acp-color-agent);
1277
+ }
1278
+
1279
+ [data-acp="limits-meter-fill"][data-state="warning"] {
1280
+ background: var(--acp-color-untrusted);
1281
+ }
1282
+
1283
+ [data-acp="limits-meter-fill"][data-state="reached"] {
1284
+ background: var(--acp-color-danger);
1285
+ }
1286
+
1287
+ [data-acp="limits-meter-readout"] {
1288
+ font-family: var(--acp-font-mono);
1289
+ font-size: var(--acp-text-xs);
1290
+ color: var(--acp-color-ink-muted);
1291
+ }
1292
+
1293
+ [data-acp="limits-status"] {
1294
+ margin: 0;
1295
+ font-size: var(--acp-text-xs);
1296
+ font-weight: var(--acp-weight-medium);
1297
+ color: var(--acp-color-untrusted);
1298
+ }
1299
+
1300
+ [data-acp="limits-status"][data-state="reached"] {
1301
+ color: var(--acp-color-danger);
1302
+ }
1303
+
1304
+ /* Cap editor: a labelled number input with unit + period adornments. */
1305
+ [data-acp="limits-cap"] {
1306
+ display: flex;
1307
+ flex-direction: column;
1308
+ gap: var(--acp-space-1);
1309
+ flex-shrink: 0;
1310
+ }
1311
+
1312
+ [data-acp="limits-cap-label"] {
1313
+ font-size: var(--acp-text-xs);
1314
+ font-weight: var(--acp-weight-medium);
1315
+ color: var(--acp-color-ink-muted);
1316
+ }
1317
+
1318
+ [data-acp="limits-cap-field"] {
1319
+ display: inline-flex;
1320
+ align-items: center;
1321
+ gap: var(--acp-space-1);
1322
+ font-size: var(--acp-text-sm);
1323
+ color: var(--acp-color-ink);
1324
+ }
1325
+
1326
+ [data-acp="limits-cap-input"] {
1327
+ width: 5rem;
1328
+ padding: var(--acp-space-1) var(--acp-space-2);
1329
+ font: inherit;
1330
+ color: var(--acp-color-ink);
1331
+ background: var(--acp-color-surface);
1332
+ border: 1px solid var(--acp-color-line-strong);
1333
+ border-radius: var(--acp-radius-md);
1334
+ }
1335
+
1336
+ [data-acp="limits-cap-input"]:focus-visible {
1337
+ outline: 2px solid var(--acp-color-focus);
1338
+ outline-offset: 1px;
1339
+ }
1340
+
1341
+ [data-acp="limits-cap-unit"],
1342
+ [data-acp="limits-cap-period"] {
1343
+ font-size: var(--acp-text-xs);
1344
+ color: var(--acp-color-ink-muted);
1345
+ white-space: nowrap;
1346
+ }
1347
+
1348
+ /* ── Injection Flag ───────────────────────────────────────────────── */
1349
+
1350
+ /* A caution surface — the whole card carries the untrusted accent so it never
1351
+ reads like a routine, trusted prompt. */
1352
+ [data-acp="root"][data-injection] {
1353
+ border: 1px solid var(--acp-color-untrusted);
1354
+ }
1355
+
1356
+ [data-acp="root"][data-injection] [data-acp="icon"] {
1357
+ background: var(--acp-color-untrusted-surface);
1358
+ color: var(--acp-color-untrusted);
1359
+ }
1360
+
1361
+ [data-acp="injection-description"] {
1362
+ margin: 0;
1363
+ color: var(--acp-color-ink-muted);
1364
+ }
1365
+
1366
+ [data-acp="injection-source"] {
1367
+ display: flex;
1368
+ flex-wrap: wrap;
1369
+ align-items: baseline;
1370
+ gap: var(--acp-space-2);
1371
+ font-size: var(--acp-text-xs);
1372
+ }
1373
+
1374
+ [data-acp="injection-source-label"] {
1375
+ font-family: var(--acp-font-mono);
1376
+ text-transform: uppercase;
1377
+ letter-spacing: 0.06em;
1378
+ color: var(--acp-color-ink-faint);
1379
+ }
1380
+
1381
+ [data-acp="injection-origin"] {
1382
+ font-weight: var(--acp-weight-medium);
1383
+ color: var(--acp-color-untrusted);
1384
+ }
1385
+
1386
+ [data-acp="injection-location"] {
1387
+ font-family: var(--acp-font-mono);
1388
+ color: var(--acp-color-ink-muted);
1389
+ overflow-wrap: anywhere;
1390
+ }
1391
+
1392
+ [data-acp="injection-quote-figure"] {
1393
+ margin: 0;
1394
+ display: flex;
1395
+ flex-direction: column;
1396
+ gap: var(--acp-space-1);
1397
+ }
1398
+
1399
+ [data-acp="injection-quote-label"] {
1400
+ font-size: var(--acp-text-xs);
1401
+ color: var(--acp-color-ink-muted);
1402
+ }
1403
+
1404
+ /* The verbatim instruction, visually fenced with an untrusted left rule so it
1405
+ reads as quoted foreign text, not as the agent's own words. */
1406
+ [data-acp="injection-quote"] {
1407
+ margin: 0;
1408
+ padding: var(--acp-space-3);
1409
+ background: var(--acp-color-untrusted-surface);
1410
+ border-left: 3px solid var(--acp-color-untrusted);
1411
+ border-radius: var(--acp-radius-sm);
1412
+ color: var(--acp-color-ink);
1413
+ font-family: var(--acp-font-mono);
1414
+ font-size: var(--acp-text-sm);
1415
+ white-space: pre-wrap;
1416
+ overflow-wrap: anywhere;
1417
+ max-height: 12rem;
1418
+ overflow-y: auto;
1419
+ }
1420
+
1421
+ [data-acp="injection-consequence"] {
1422
+ margin: 0;
1423
+ font-weight: var(--acp-weight-medium);
1424
+ }
1425
+
1426
+ /* Dismiss (ignore the instruction) is the safe, emphasised default; Proceed
1427
+ (follow it) is subordinate and danger-tinted so the UI never nudges toward
1428
+ obeying untrusted content. */
1429
+ [data-acp="injection-dismiss"] {
1430
+ border: 1px solid transparent;
1431
+ background: var(--acp-color-agent);
1432
+ color: var(--acp-color-approve-ink);
1433
+ }
1434
+
1435
+ [data-acp="injection-dismiss"]:hover {
1436
+ filter: brightness(1.08);
1437
+ }
1438
+
1439
+ [data-acp="injection-proceed"] {
1440
+ border: 1px solid var(--acp-color-danger);
1441
+ background: transparent;
1442
+ color: var(--acp-color-danger);
1443
+ }
1444
+
1445
+ [data-acp="injection-proceed"]:hover {
1446
+ background: var(--acp-color-danger-surface);
1447
+ }
1448
+
1449
+ /* ── Action Receipt ───────────────────────────────────────────────── */
1450
+
1451
+ [data-acp="root"][data-receipt] {
1452
+ gap: var(--acp-space-3);
1453
+ }
1454
+
1455
+ /* A failed or undone receipt reads dimmer, but stays legible. */
1456
+ [data-acp="root"][data-receipt][data-outcome="undone"],
1457
+ [data-acp="root"][data-receipt][data-outcome="failed"] {
1458
+ background: var(--acp-color-surface);
1459
+ }
1460
+
1461
+ [data-acp="header"][data-receipt-header] {
1462
+ justify-content: flex-start;
1463
+ gap: var(--acp-space-3);
1464
+ }
1465
+
1466
+ [data-acp="header"][data-receipt-header] [data-acp="title"] {
1467
+ flex: 1;
1468
+ font-weight: var(--acp-weight-semibold);
1469
+ }
1470
+
1471
+ [data-acp="receipt-outcome"] {
1472
+ flex-shrink: 0;
1473
+ padding: 0.1em var(--acp-space-2);
1474
+ border-radius: var(--acp-radius-sm);
1475
+ font-family: var(--acp-font-mono);
1476
+ font-size: var(--acp-text-xs);
1477
+ font-weight: var(--acp-weight-medium);
1478
+ background: var(--acp-color-surface-sunken);
1479
+ color: var(--acp-color-ink-muted);
1480
+ }
1481
+
1482
+ [data-acp="receipt-outcome"][data-outcome="completed"] {
1483
+ background: var(--acp-color-agent-surface);
1484
+ color: var(--acp-color-agent);
1485
+ }
1486
+
1487
+ [data-acp="receipt-outcome"][data-outcome="failed"] {
1488
+ background: var(--acp-color-danger-surface);
1489
+ color: var(--acp-color-danger);
1490
+ }
1491
+
1492
+ [data-acp="receipt-details"] {
1493
+ margin: 0;
1494
+ border-top: 1px solid var(--acp-color-line);
1495
+ }
1496
+
1497
+ [data-acp="receipt-detail"] {
1498
+ display: grid;
1499
+ grid-template-columns: 6.5rem 1fr;
1500
+ gap: var(--acp-space-3);
1501
+ padding: var(--acp-space-2) 0;
1502
+ border-bottom: 1px solid var(--acp-color-line);
1503
+ }
1504
+
1505
+ [data-acp="receipt-detail-label"] {
1506
+ font-family: var(--acp-font-mono);
1507
+ font-size: var(--acp-text-xs);
1508
+ text-transform: uppercase;
1509
+ letter-spacing: 0.06em;
1510
+ color: var(--acp-color-ink-faint);
1511
+ padding-top: 0.1em;
1512
+ }
1513
+
1514
+ [data-acp="receipt-detail-value"] {
1515
+ margin: 0;
1516
+ overflow-wrap: anywhere;
1517
+ }
1518
+
1519
+ /* The authority line — the receipt's distinct part — reads as a quiet standing
1520
+ fact, tinted with the agent accent to tie it to who acted. */
1521
+ [data-acp="receipt-authority"] {
1522
+ display: flex;
1523
+ flex-wrap: wrap;
1524
+ align-items: baseline;
1525
+ gap: var(--acp-space-2);
1526
+ padding: var(--acp-space-2) var(--acp-space-3);
1527
+ background: var(--acp-color-agent-surface);
1528
+ border-radius: var(--acp-radius-md);
1529
+ font-size: var(--acp-text-xs);
1530
+ }
1531
+
1532
+ [data-acp="receipt-authority-label"] {
1533
+ font-family: var(--acp-font-mono);
1534
+ text-transform: uppercase;
1535
+ letter-spacing: 0.06em;
1536
+ /* ink-muted, not ink-faint: the agent-surface tint drops ink-faint just under
1537
+ WCAG AA (4.44:1) — caught only by the real-browser contrast pass. */
1538
+ color: var(--acp-color-ink-muted);
1539
+ }
1540
+
1541
+ [data-acp="receipt-authority-grant"] {
1542
+ font-weight: var(--acp-weight-medium);
1543
+ color: var(--acp-color-agent);
1544
+ }
1545
+
1546
+ [data-acp="receipt-authority-via"]::before {
1547
+ content: "· ";
1548
+ color: var(--acp-color-ink-muted);
1549
+ }
1550
+
1551
+ [data-acp="receipt-authority-via"] {
1552
+ color: var(--acp-color-ink-muted);
1553
+ }
1554
+
1555
+ [data-acp="receipt-meta"] {
1556
+ margin: 0;
1557
+ display: flex;
1558
+ flex-wrap: wrap;
1559
+ gap: var(--acp-space-1) var(--acp-space-6);
1560
+ }
1561
+
1562
+ [data-acp="receipt-meta-item"] {
1563
+ display: flex;
1564
+ align-items: baseline;
1565
+ gap: var(--acp-space-2);
1566
+ }
1567
+
1568
+ [data-acp="receipt-meta-label"] {
1569
+ font-family: var(--acp-font-mono);
1570
+ font-size: var(--acp-text-xs);
1571
+ text-transform: uppercase;
1572
+ letter-spacing: 0.06em;
1573
+ color: var(--acp-color-ink-faint);
1574
+ }
1575
+
1576
+ [data-acp="receipt-meta-value"] {
1577
+ margin: 0;
1578
+ font-size: var(--acp-text-xs);
1579
+ color: var(--acp-color-ink-muted);
1580
+ }
1581
+
1582
+ [data-acp="actions"][data-receipt-actions] {
1583
+ justify-content: flex-start;
1584
+ padding-top: var(--acp-space-1);
1585
+ border-top: 1px solid var(--acp-color-line);
1586
+ }
1587
+
1588
+ [data-acp="receipt-undo"] {
1589
+ padding: var(--acp-space-1) var(--acp-space-3);
1590
+ font-size: var(--acp-text-sm);
1591
+ border: 1px solid var(--acp-color-line-strong);
1592
+ border-radius: var(--acp-radius-md);
1593
+ background: transparent;
1594
+ color: var(--acp-color-ink);
1595
+ cursor: pointer;
1596
+ }
1597
+
1598
+ [data-acp="receipt-undo"]:hover {
1599
+ background: var(--acp-color-surface-sunken);
1600
+ }
1601
+
1602
+ [data-acp="receipt-undo"]:focus-visible {
1603
+ outline: 2px solid var(--acp-color-focus);
1604
+ outline-offset: 2px;
1605
+ }
1606
+
1607
+ [data-acp="receipt-undo-note"] {
1608
+ font-family: var(--acp-font-mono);
1609
+ font-size: var(--acp-text-xs);
1610
+ color: var(--acp-color-ink-faint);
1611
+ }
1612
+
1613
+ /* ── Credential Handoff ───────────────────────────────────────────── */
1614
+
1615
+ [data-acp="root"][data-handoff] {
1616
+ gap: var(--acp-space-3);
1617
+ }
1618
+
1619
+ [data-acp="handoff-description"] {
1620
+ margin: 0;
1621
+ color: var(--acp-color-ink-muted);
1622
+ }
1623
+
1624
+ [data-acp="handoff-handler"] {
1625
+ display: flex;
1626
+ flex-wrap: wrap;
1627
+ align-items: baseline;
1628
+ gap: var(--acp-space-2);
1629
+ padding: var(--acp-space-3);
1630
+ background: var(--acp-color-surface-sunken);
1631
+ border-radius: var(--acp-radius-md);
1632
+ }
1633
+
1634
+ [data-acp="handoff-handler-kind"] {
1635
+ flex-shrink: 0;
1636
+ padding: 0.05em var(--acp-space-2);
1637
+ border-radius: var(--acp-radius-sm);
1638
+ font-family: var(--acp-font-mono);
1639
+ font-size: var(--acp-text-xs);
1640
+ font-weight: var(--acp-weight-medium);
1641
+ letter-spacing: 0.02em;
1642
+ background: var(--acp-color-agent-surface);
1643
+ color: var(--acp-color-agent);
1644
+ }
1645
+
1646
+ [data-acp="handoff-handler-name"] {
1647
+ font-weight: var(--acp-weight-medium);
1648
+ }
1649
+
1650
+ /* The exclusion boundary — the pattern's heart. A fenced note with an agent
1651
+ accent, calm rather than alarming: the secret simply isn't the agent's to see. */
1652
+ [data-acp="handoff-boundary"] {
1653
+ padding: var(--acp-space-3);
1654
+ background: var(--acp-color-agent-surface);
1655
+ border-left: 3px solid var(--acp-color-agent);
1656
+ border-radius: var(--acp-radius-sm);
1657
+ color: var(--acp-color-ink);
1658
+ font-weight: var(--acp-weight-medium);
1659
+ }
1660
+
1661
+ [data-acp="handoff-returns-legend"] {
1662
+ margin: 0 0 var(--acp-space-1);
1663
+ font-family: var(--acp-font-mono);
1664
+ font-size: var(--acp-text-xs);
1665
+ text-transform: uppercase;
1666
+ letter-spacing: 0.06em;
1667
+ color: var(--acp-color-ink-muted);
1668
+ }
1669
+
1670
+ [data-acp="handoff-returns-list"] {
1671
+ list-style: none;
1672
+ margin: 0;
1673
+ padding: 0;
1674
+ display: flex;
1675
+ flex-direction: column;
1676
+ gap: var(--acp-space-1);
1677
+ }
1678
+
1679
+ [data-acp="handoff-return"] {
1680
+ position: relative;
1681
+ padding-left: var(--acp-space-4);
1682
+ font-size: var(--acp-text-sm);
1683
+ color: var(--acp-color-ink-muted);
1684
+ }
1685
+
1686
+ [data-acp="handoff-return"]::before {
1687
+ content: "✓";
1688
+ position: absolute;
1689
+ left: 0;
1690
+ color: var(--acp-color-approve);
1691
+ }
1692
+
1693
+ [data-acp="handoff-continue"] {
1694
+ border: 1px solid transparent;
1695
+ background: var(--acp-color-agent);
1696
+ color: var(--acp-color-approve-ink);
1697
+ }
1698
+
1699
+ [data-acp="handoff-continue"]:hover {
1700
+ filter: brightness(1.08);
1701
+ }
1702
+
1703
+ [data-acp="handoff-cancel"] {
1704
+ border: 1px solid var(--acp-color-line-strong);
1705
+ background: transparent;
1706
+ color: var(--acp-color-ink);
1707
+ }
1708
+
1709
+ [data-acp="handoff-cancel"]:hover {
1710
+ background: var(--acp-color-surface-sunken);
1711
+ }