use-agentz 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.
Files changed (113) hide show
  1. package/README.md +308 -0
  2. package/dist/authoring/define.js +132 -0
  3. package/dist/cli.js +26581 -0
  4. package/dist/config/define.js +36 -0
  5. package/dist/ui/web/index.html +16 -0
  6. package/dist/ui/web/logo.png +0 -0
  7. package/dist/ui/web/main.tsx +2406 -0
  8. package/dist/ui/web/styles.css +2338 -0
  9. package/package.json +54 -0
  10. package/registry/r/agent.analyst.json +44 -0
  11. package/registry/r/agent.designer.json +34 -0
  12. package/registry/r/agent.developer.json +31 -0
  13. package/registry/r/agent.expert-orchestrator.json +36 -0
  14. package/registry/r/agent.expert.json +33 -0
  15. package/registry/r/agent.orchestrator.json +39 -0
  16. package/registry/r/agent.quick.json +28 -0
  17. package/registry/r/agent.reviewer-anthropic.json +34 -0
  18. package/registry/r/agent.reviewer-gpt.json +34 -0
  19. package/registry/r/agent.scout.json +34 -0
  20. package/registry/r/command.caveman.json +20 -0
  21. package/registry/r/command.grill-me.json +20 -0
  22. package/registry/r/group.cli-bun.json +13 -0
  23. package/registry/r/group.cli-go.json +13 -0
  24. package/registry/r/group.database-design.json +12 -0
  25. package/registry/r/group.design.json +14 -0
  26. package/registry/r/group.documents.json +13 -0
  27. package/registry/r/group.engineering-process.json +18 -0
  28. package/registry/r/group.go.json +21 -0
  29. package/registry/r/group.python.json +10 -0
  30. package/registry/r/group.react.json +11 -0
  31. package/registry/r/group.typescript.json +10 -0
  32. package/registry/r/lsp.proto.json +41 -0
  33. package/registry/r/mcp.context7.json +13 -0
  34. package/registry/r/mcp.playwright.json +50 -0
  35. package/registry/r/pack.basic.json +78 -0
  36. package/registry/r/pack.gpt-5-6.json +78 -0
  37. package/registry/r/pack.optimized.json +78 -0
  38. package/registry/r/pack.opus-fable.json +78 -0
  39. package/registry/r/plugin.caveman-compress.json +20 -0
  40. package/registry/r/preset.caveman-only.json +13 -0
  41. package/registry/r/preset.cost-aware-trio.json +41 -0
  42. package/registry/r/preset.cross-model-review.json +34 -0
  43. package/registry/r/preset.design.json +39 -0
  44. package/registry/r/preset.fable-pack.json +41 -0
  45. package/registry/r/preset.full.json +67 -0
  46. package/registry/r/rule.always-cross-review.json +25 -0
  47. package/registry/r/rule.always-design.json +25 -0
  48. package/registry/r/rule.always-qa.json +25 -0
  49. package/registry/r/rule.always-test.json +25 -0
  50. package/registry/r/rule.caveman-ultra.json +23 -0
  51. package/registry/r/rule.never-cross-review.json +25 -0
  52. package/registry/r/rule.never-design.json +25 -0
  53. package/registry/r/rule.never-qa.json +25 -0
  54. package/registry/r/rule.never-test.json +25 -0
  55. package/registry/r/rule.routing.json +26 -0
  56. package/registry/r/rule.use-question-tool.json +20 -0
  57. package/registry/r/skill.bun-cli.json +20 -0
  58. package/registry/r/skill.bun-tui.json +20 -0
  59. package/registry/r/skill.caveman-compress.json +17 -0
  60. package/registry/r/skill.caveman.json +20 -0
  61. package/registry/r/skill.cli-design.json +15 -0
  62. package/registry/r/skill.code-review.json +18 -0
  63. package/registry/r/skill.cost-aware-orchestration.json +14 -0
  64. package/registry/r/skill.cross-model-review.json +14 -0
  65. package/registry/r/skill.db-schema-design.json +15 -0
  66. package/registry/r/skill.design-system.json +19 -0
  67. package/registry/r/skill.design-taste.json +116 -0
  68. package/registry/r/skill.diagnosing-bugs.json +23 -0
  69. package/registry/r/skill.diagrams.json +21 -0
  70. package/registry/r/skill.docx-create.json +20 -0
  71. package/registry/r/skill.domain-modeling.json +18 -0
  72. package/registry/r/skill.frontend-qa.json +19 -0
  73. package/registry/r/skill.go-architecture.json +21 -0
  74. package/registry/r/skill.go-ci.json +21 -0
  75. package/registry/r/skill.go-cli.json +20 -0
  76. package/registry/r/skill.go-data-structures.json +21 -0
  77. package/registry/r/skill.go-dependencies.json +21 -0
  78. package/registry/r/skill.go-dev.json +20 -0
  79. package/registry/r/skill.go-documentation.json +21 -0
  80. package/registry/r/skill.go-ecosystem.json +21 -0
  81. package/registry/r/skill.go-qa.json +21 -0
  82. package/registry/r/skill.go-quality.json +21 -0
  83. package/registry/r/skill.go-refactoring.json +21 -0
  84. package/registry/r/skill.go-tooling.json +21 -0
  85. package/registry/r/skill.go-tui.json +20 -0
  86. package/registry/r/skill.go-types.json +21 -0
  87. package/registry/r/skill.grilling.json +18 -0
  88. package/registry/r/skill.improve-architecture.json +18 -0
  89. package/registry/r/skill.pdf-create.json +23 -0
  90. package/registry/r/skill.pptx-create.json +23 -0
  91. package/registry/r/skill.product-ui.json +22 -0
  92. package/registry/r/skill.python-dev.json +20 -0
  93. package/registry/r/skill.react-dev.json +20 -0
  94. package/registry/r/skill.resolving-merge-conflicts.json +18 -0
  95. package/registry/r/skill.scratchpad.json +17 -0
  96. package/registry/r/skill.skill-authoring.json +17 -0
  97. package/registry/r/skill.software-design.json +28 -0
  98. package/registry/r/skill.sql-migrations.json +15 -0
  99. package/registry/r/skill.tdd.json +28 -0
  100. package/registry/r/skill.typescript-dev.json +20 -0
  101. package/registry/r/skill.visual-assets.json +17 -0
  102. package/registry/r/skill.wayfinder.json +18 -0
  103. package/registry/r/skill.xlsx-create.json +20 -0
  104. package/registry/r/tool.a11y-quick.json +24 -0
  105. package/registry/r/tool.contrast-check.json +24 -0
  106. package/registry/r/tool.design-lint.json +24 -0
  107. package/registry/r/tool.design-search.json +23 -0
  108. package/registry/r/tool.pdf-create.json +23 -0
  109. package/registry/r/tool.pptx-create.json +23 -0
  110. package/registry/r/tool.scratchpad.json +68 -0
  111. package/registry/r/tool.token-validate.json +24 -0
  112. package/registry/registry.json +676 -0
  113. package/schema/agentz.schema.json +330 -0
@@ -0,0 +1,2338 @@
1
+ /*
2
+ * AgentZ UI — control-panel restyle (dark zinc + cobalt).
3
+ *
4
+ * Token invariants: every --as-* var name from the base sheet is preserved
5
+ * (values changed, names never). New vars are additive (--as-warn, --as-focus,
6
+ * --as-accent-fill-text, ...). classNames stay stable; new classes are
7
+ * additive (as-dep-*, as-card-meta, as-preview-status, as-logo).
8
+ *
9
+ * All contrast pairs verified AA normal (see design note):
10
+ * #fafafa/#09090b 19.1 · #a1a1aa/#18181b 6.9 · #91aaff/#18181b 7.9
11
+ * #ffffff/#4565d5 5.2 · #e6ad4a/#18181b 8.8 · badge worst hue 6.1
12
+ */
13
+
14
+ :root {
15
+ color-scheme: dark;
16
+
17
+ /* color tokens (zinc scale, dark-first) */
18
+ --as-bg: #09090b;
19
+ --as-surface: #18181b;
20
+ --as-surface-2: #27272a;
21
+ --as-border: #27272a;
22
+ --as-border-strong: #3f3f46;
23
+ --as-text: #fafafa;
24
+ --as-text-muted: #a1a1aa;
25
+ --as-accent: #d59245; /* cobalt — fills / selected borders */
26
+ --as-accent-text: #ffc691; /* accent as text on dark (AAA 7.9:1) */
27
+ --as-accent-soft: #362715; /* cobalt-tinted surface for selected/notice */
28
+ --as-danger: #f47184;
29
+ --as-ok: #4ade80;
30
+
31
+ /* additive tokens */
32
+ --as-accent-fill-text: #ffffff; /* text ON an accent fill (AA 5.3:1) */
33
+ --as-accent-hover: #b07e34;
34
+ --as-warn: #e6ad4a; /* amber, experimental/warning */
35
+ --as-warn-soft: #2a2010;
36
+ --as-focus: #ffcf91;
37
+ --as-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.4);
38
+ --as-dur: 150ms;
39
+
40
+ /* spacing + shape */
41
+ --as-radius: 8px;
42
+ --as-radius-sm: 6px;
43
+ --as-gap: 16px;
44
+ --as-gap-sm: 8px;
45
+ --as-pad: 20px;
46
+ --as-maxw: 1200px;
47
+
48
+ /* typography */
49
+ --as-font: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
50
+ --as-mono: ui-monospace, "SFMono-Regular", "Menlo", monospace;
51
+ --as-fs: 14px;
52
+ --as-fs-sm: 12.5px;
53
+ --as-fs-lg: 18px;
54
+ }
55
+
56
+ * {
57
+ box-sizing: border-box;
58
+ }
59
+
60
+ body {
61
+ margin: 0;
62
+ font-family: var(--as-font);
63
+ font-size: var(--as-fs);
64
+ color: var(--as-text);
65
+ background: var(--as-bg);
66
+ line-height: 1.55;
67
+ -webkit-font-smoothing: antialiased;
68
+ }
69
+
70
+ @media (prefers-reduced-motion: reduce) {
71
+ *,
72
+ *::before,
73
+ *::after {
74
+ animation: none !important;
75
+ transition: none !important;
76
+ }
77
+ }
78
+
79
+ /* one focus system for everything interactive */
80
+ :focus-visible {
81
+ outline: 2px solid transparent;
82
+ outline-offset: 2px;
83
+ box-shadow:
84
+ 0 0 0 2px var(--as-bg),
85
+ 0 0 0 4px var(--as-focus);
86
+ border-radius: var(--as-radius-sm);
87
+ }
88
+
89
+ .as-app {
90
+ max-width: var(--as-maxw);
91
+ margin: 0 auto;
92
+ padding: var(--as-pad) var(--as-pad) 64px;
93
+ /* Base UI portal setup: keep in-app stacking below portalled popups. */
94
+ isolation: isolate;
95
+ }
96
+
97
+ /* header ----------------------------------------------------------- */
98
+ .as-header {
99
+ display: flex;
100
+ align-items: center;
101
+ gap: var(--as-gap);
102
+ padding: 14px 0;
103
+ border-bottom: 1px solid var(--as-border);
104
+ margin-bottom: calc(var(--as-gap) * 1.5);
105
+ }
106
+ .as-title {
107
+ display: flex;
108
+ align-items: center;
109
+ gap: 10px;
110
+ font-size: var(--as-fs-lg);
111
+ font-weight: 600;
112
+ letter-spacing: -0.01em;
113
+ margin: 0;
114
+ white-space: nowrap;
115
+ }
116
+ .as-logo {
117
+ height: 22px;
118
+ width: auto;
119
+ display: block;
120
+ flex-shrink: 0;
121
+ color: var(--as-accent);
122
+ }
123
+ .as-steps {
124
+ display: flex;
125
+ gap: 4px;
126
+ list-style: none;
127
+ margin: 0;
128
+ padding: 0;
129
+ font-size: var(--as-fs-sm);
130
+ color: var(--as-text-muted);
131
+ }
132
+ .as-step {
133
+ padding: 3px 10px;
134
+ border-radius: 999px;
135
+ border: 1px solid transparent;
136
+ font-weight: 500;
137
+ }
138
+ .as-step[data-active="true"] {
139
+ background: var(--as-accent-soft);
140
+ border-color: var(--as-accent);
141
+ color: var(--as-accent-text);
142
+ font-weight: 600;
143
+ }
144
+
145
+ /* cards + grid ------------------------------------------------------ */
146
+ .as-grid {
147
+ display: grid;
148
+ grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
149
+ gap: var(--as-gap);
150
+ }
151
+ .as-card {
152
+ position: relative;
153
+ display: block;
154
+ width: 100%;
155
+ border: 1px solid var(--as-border);
156
+ border-radius: var(--as-radius);
157
+ background: var(--as-surface);
158
+ padding: var(--as-pad);
159
+ transition:
160
+ border-color var(--as-dur) ease-in-out,
161
+ background var(--as-dur) ease-in-out;
162
+ }
163
+ /* real selection button: fills the card, invisible chrome so the card reads
164
+ * as one surface; the composition <details> sits below it as a sibling. */
165
+ .as-card-select {
166
+ display: block;
167
+ width: 100%;
168
+ margin: 0;
169
+ padding: 0;
170
+ border: 0;
171
+ background: none;
172
+ text-align: left;
173
+ cursor: pointer;
174
+ font: inherit;
175
+ color: inherit;
176
+ }
177
+ .as-card-select:focus-visible {
178
+ outline: 2px solid var(--as-accent);
179
+ outline-offset: 2px;
180
+ border-radius: var(--as-radius);
181
+ }
182
+ .as-card:hover {
183
+ border-color: var(--as-border-strong);
184
+ background: #1c1c1f;
185
+ }
186
+ .as-card:active {
187
+ transform: translateY(1px);
188
+ }
189
+ .as-card[data-selected="true"] {
190
+ border-color: var(--as-accent);
191
+ background: var(--as-accent-soft);
192
+ box-shadow: inset 0 0 0 1px var(--as-accent);
193
+ }
194
+ /* check indicator, reserved space -> zero shift on select */
195
+ .as-card-check {
196
+ position: absolute;
197
+ top: 14px;
198
+ right: 14px;
199
+ width: 18px;
200
+ height: 18px;
201
+ border-radius: 999px;
202
+ border: 1.5px solid var(--as-border-strong);
203
+ color: transparent;
204
+ display: flex;
205
+ align-items: center;
206
+ justify-content: center;
207
+ transition:
208
+ background var(--as-dur) ease-in-out,
209
+ border-color var(--as-dur) ease-in-out;
210
+ }
211
+ .as-card[data-selected="true"] .as-card-check {
212
+ background: var(--as-accent);
213
+ border-color: var(--as-accent);
214
+ color: var(--as-accent-fill-text);
215
+ }
216
+ .as-card-title {
217
+ display: block;
218
+ font-weight: 600;
219
+ margin: 0 24px 4px 0;
220
+ }
221
+ .as-card-desc {
222
+ display: block;
223
+ font-size: var(--as-fs-sm);
224
+ color: var(--as-text-muted);
225
+ margin: 0;
226
+ }
227
+ /* per-tier model@effort chips on pack cards (derived from pack tier defs) */
228
+ .as-card-tiers {
229
+ display: flex;
230
+ flex-wrap: wrap;
231
+ gap: 6px;
232
+ margin: 10px 0 0;
233
+ }
234
+ .as-tier-chip {
235
+ display: inline-flex;
236
+ align-items: baseline;
237
+ gap: 4px;
238
+ font-size: var(--as-fs-sm);
239
+ color: var(--as-text-muted);
240
+ font-variant-numeric: tabular-nums;
241
+ padding: 2px 8px;
242
+ border: 1px solid var(--as-border);
243
+ border-radius: 999px;
244
+ }
245
+ .as-tier-name {
246
+ font-weight: 600;
247
+ color: var(--as-text);
248
+ }
249
+ .as-tier-effort {
250
+ opacity: 0.8;
251
+ }
252
+
253
+ /* composition meta line on preset/pack cards */
254
+ .as-card-meta {
255
+ display: block;
256
+ font-size: var(--as-fs-sm);
257
+ color: var(--as-text-muted);
258
+ font-variant-numeric: tabular-nums;
259
+ margin: 10px 0 0;
260
+ padding-top: 10px;
261
+ border-top: 1px solid var(--as-border);
262
+ }
263
+ .as-card[data-selected="true"] .as-card-meta {
264
+ border-top-color: rgb(69 101 213 / 0.35);
265
+ }
266
+ .as-card-comp {
267
+ margin: 6px 0 0;
268
+ border: none;
269
+ background: none;
270
+ padding: 0;
271
+ }
272
+ .as-card-comp > summary {
273
+ font-size: var(--as-fs-sm);
274
+ color: var(--as-text-muted);
275
+ cursor: pointer;
276
+ padding: 2px 0;
277
+ font-weight: 500;
278
+ }
279
+ .as-card-comp > summary:hover {
280
+ color: var(--as-text);
281
+ }
282
+ .as-card-comp ul {
283
+ margin: 6px 0 0;
284
+ padding: 0;
285
+ list-style: none;
286
+ font-size: var(--as-fs-sm);
287
+ color: var(--as-text-muted);
288
+ }
289
+ .as-card-comp li {
290
+ padding: 1px 0;
291
+ }
292
+ .as-card-comp li > .as-dep-kind {
293
+ margin-right: 6px;
294
+ }
295
+
296
+ /* sections ----------------------------------------------------------- */
297
+ .as-section {
298
+ margin-bottom: 18px;
299
+ }
300
+ .as-section-title {
301
+ font-size: var(--as-fs);
302
+ font-weight: 600;
303
+ letter-spacing: 0.01em;
304
+ margin: 0 0 4px;
305
+ }
306
+ .as-section-hint {
307
+ font-size: var(--as-fs-sm);
308
+ color: var(--as-text-muted);
309
+ margin: 0 0 12px;
310
+ }
311
+
312
+ .as-panel {
313
+ border: 1px solid var(--as-border);
314
+ border-radius: var(--as-radius);
315
+ background: var(--as-surface);
316
+ padding: 6px var(--as-pad);
317
+ box-shadow: var(--as-shadow);
318
+ }
319
+
320
+ /* rows (toggle lists, agent list) ------------------------------------ */
321
+ .as-row {
322
+ display: flex;
323
+ align-items: center;
324
+ gap: 12px;
325
+ padding: 10px 0;
326
+ border-bottom: 1px solid var(--as-surface-2);
327
+ }
328
+ .as-row:last-child {
329
+ border-bottom: none;
330
+ }
331
+ .as-row-main {
332
+ flex: 1;
333
+ min-width: 0;
334
+ }
335
+ .as-row-name {
336
+ font-weight: 500;
337
+ }
338
+ .as-row-desc {
339
+ font-size: var(--as-fs-sm);
340
+ color: var(--as-text-muted);
341
+ }
342
+ .as-row-detail {
343
+ font-family: var(--as-mono);
344
+ font-size: var(--as-fs-sm);
345
+ color: var(--as-text-muted);
346
+ margin-top: 2px;
347
+ }
348
+
349
+ /* dependency chips (graph-driven, degrade to nothing) ----------------- */
350
+ .as-dep-chips {
351
+ display: flex;
352
+ flex-wrap: wrap;
353
+ align-items: center;
354
+ gap: 4px;
355
+ margin-top: 4px;
356
+ font-size: var(--as-fs-sm);
357
+ }
358
+ .as-dep-label {
359
+ color: var(--as-text-muted);
360
+ }
361
+ .as-dep-chip {
362
+ display: inline-block;
363
+ font-family: var(--as-mono);
364
+ font-size: 11.5px;
365
+ line-height: 1.4;
366
+ color: var(--as-text-muted);
367
+ background: var(--as-surface-2);
368
+ border: 1px solid var(--as-border-strong);
369
+ border-radius: 999px;
370
+ padding: 0 8px;
371
+ white-space: nowrap;
372
+ max-width: 220px;
373
+ overflow: hidden;
374
+ text-overflow: ellipsis;
375
+ }
376
+ .as-dep-more {
377
+ font: inherit;
378
+ font-size: 11.5px;
379
+ color: var(--as-text-muted);
380
+ background: none;
381
+ border: none;
382
+ cursor: pointer;
383
+ padding: 0 4px;
384
+ text-decoration: underline;
385
+ text-underline-offset: 2px;
386
+ }
387
+ .as-dep-more:hover {
388
+ color: var(--as-text);
389
+ }
390
+ .as-dep-kind {
391
+ display: inline-block;
392
+ font-size: 10.5px;
393
+ text-transform: uppercase;
394
+ letter-spacing: 0.06em;
395
+ color: var(--as-text-muted);
396
+ }
397
+
398
+ /* form controls ------------------------------------------------------- */
399
+ .as-select,
400
+ .as-input {
401
+ font: inherit;
402
+ font-size: var(--as-fs-sm);
403
+ padding: 7px 10px;
404
+ border: 1px solid var(--as-border-strong);
405
+ border-radius: var(--as-radius-sm);
406
+ background: var(--as-bg);
407
+ color: var(--as-text);
408
+ transition: border-color var(--as-dur) ease-in-out;
409
+ }
410
+ .as-select:hover,
411
+ .as-input:hover {
412
+ border-color: #52525b;
413
+ }
414
+ .as-input {
415
+ font-family: var(--as-mono);
416
+ min-width: 220px;
417
+ }
418
+ .as-input::placeholder {
419
+ color: #71717a;
420
+ }
421
+ .as-label {
422
+ display: block;
423
+ font-size: var(--as-fs-sm);
424
+ font-weight: 500;
425
+ color: var(--as-text-muted);
426
+ margin-bottom: 4px;
427
+ }
428
+ /* item switch (Base UI Switch: zinc track, cobalt when checked) -------- */
429
+ .as-switch-wrap {
430
+ display: inline-flex;
431
+ align-items: center;
432
+ gap: 6px;
433
+ flex-shrink: 0;
434
+ }
435
+ .as-switch {
436
+ position: relative;
437
+ display: inline-flex;
438
+ align-items: center;
439
+ box-sizing: border-box;
440
+ width: 32px;
441
+ height: 18px;
442
+ padding: 0;
443
+ border: 1px solid #71717a; /* 3:1 UI boundary on the panel surface */
444
+ border-radius: 999px;
445
+ background: var(--as-surface-2);
446
+ cursor: pointer;
447
+ flex-shrink: 0;
448
+ transition:
449
+ background var(--as-dur) ease-in-out,
450
+ border-color var(--as-dur) ease-in-out;
451
+ }
452
+ .as-switch[data-checked] {
453
+ background: var(--as-accent);
454
+ border-color: var(--as-accent);
455
+ }
456
+ .as-switch[data-disabled] {
457
+ opacity: 0.5;
458
+ cursor: not-allowed;
459
+ }
460
+ .as-switch[readonly],
461
+ .as-switch[data-readonly] {
462
+ opacity: 0.55;
463
+ cursor: default;
464
+ }
465
+ .as-switch-thumb {
466
+ display: block;
467
+ width: 12px;
468
+ height: 12px;
469
+ border-radius: 999px;
470
+ background: var(--as-text);
471
+ transform: translateX(2px);
472
+ transition: transform var(--as-dur) ease-out;
473
+ }
474
+ .as-switch[data-checked] .as-switch-thumb {
475
+ background: var(--as-accent-fill-text);
476
+ transform: translateX(16px);
477
+ }
478
+ .as-lock {
479
+ color: var(--as-text-muted);
480
+ flex-shrink: 0;
481
+ }
482
+ .as-lock-note {
483
+ display: block;
484
+ font-size: var(--as-fs-sm);
485
+ color: var(--as-text-muted);
486
+ margin-top: 2px;
487
+ }
488
+
489
+ /* buttons -------------------------------------------------------------- */
490
+ .as-actions {
491
+ display: flex;
492
+ gap: var(--as-gap-sm);
493
+ justify-content: flex-end;
494
+ margin-top: var(--as-gap);
495
+ }
496
+ .as-btn {
497
+ font: inherit;
498
+ font-size: var(--as-fs-sm);
499
+ font-weight: 600;
500
+ padding: 8px 18px;
501
+ border-radius: var(--as-radius-sm);
502
+ border: 1px solid var(--as-border-strong);
503
+ background: var(--as-surface);
504
+ color: var(--as-text);
505
+ cursor: pointer;
506
+ transition:
507
+ background var(--as-dur) ease-in-out,
508
+ border-color var(--as-dur) ease-in-out;
509
+ }
510
+ .as-btn:hover {
511
+ background: var(--as-surface-2);
512
+ }
513
+ .as-btn:active {
514
+ transform: translateY(1px);
515
+ }
516
+ .as-btn[data-variant="primary"] {
517
+ background: var(--as-accent);
518
+ border-color: var(--as-accent);
519
+ color: var(--as-accent-fill-text);
520
+ }
521
+ .as-btn[data-variant="primary"]:hover {
522
+ background: var(--as-accent-hover);
523
+ border-color: var(--as-accent-hover);
524
+ }
525
+ .as-btn:disabled {
526
+ opacity: 0.5;
527
+ cursor: not-allowed;
528
+ transform: none;
529
+ }
530
+ .as-btn[data-variant="danger"] {
531
+ border-color: #4c1d24;
532
+ color: var(--as-danger);
533
+ }
534
+ .as-btn[data-variant="danger"]:hover {
535
+ background: #2a1215;
536
+ border-color: var(--as-danger);
537
+ }
538
+
539
+ /* status + notes -------------------------------------------------------- */
540
+ .as-notes {
541
+ margin: var(--as-gap-sm) 0 0;
542
+ padding-left: 18px;
543
+ font-size: var(--as-fs-sm);
544
+ color: var(--as-text-muted);
545
+ }
546
+ .as-error {
547
+ color: var(--as-danger);
548
+ font-size: var(--as-fs-sm);
549
+ background: #2a1215;
550
+ border: 1px solid #4c1d24;
551
+ border-left: 3px solid var(--as-danger);
552
+ border-radius: var(--as-radius);
553
+ padding: var(--as-gap-sm) var(--as-gap);
554
+ margin: var(--as-gap-sm) 0;
555
+ }
556
+ .as-ok {
557
+ color: var(--as-ok);
558
+ font-weight: 600;
559
+ }
560
+ .as-notice {
561
+ color: var(--as-text);
562
+ background: var(--as-accent-soft);
563
+ border: 1px solid var(--as-border);
564
+ border-left: 3px solid var(--as-accent);
565
+ border-radius: var(--as-radius);
566
+ font-size: var(--as-fs-sm);
567
+ padding: var(--as-gap-sm) var(--as-gap);
568
+ margin: 0 0 var(--as-gap);
569
+ }
570
+ .as-filelist {
571
+ font-family: var(--as-mono);
572
+ font-size: var(--as-fs-sm);
573
+ list-style: none;
574
+ margin: var(--as-gap-sm) 0 0;
575
+ padding: 0;
576
+ max-height: 260px;
577
+ overflow: auto;
578
+ }
579
+ .as-filelist li {
580
+ padding: 2px 0;
581
+ color: var(--as-text-muted);
582
+ }
583
+ .as-file-status {
584
+ display: inline-block;
585
+ width: 90px;
586
+ color: var(--as-accent-text);
587
+ }
588
+ .as-file-status[data-removed],
589
+ .as-file-removed {
590
+ color: var(--as-danger);
591
+ font-weight: 600;
592
+ }
593
+
594
+ .as-spinner {
595
+ color: var(--as-text-muted);
596
+ font-size: var(--as-fs-sm);
597
+ }
598
+
599
+ .as-summary-grid {
600
+ display: grid;
601
+ grid-template-columns: 130px 1fr;
602
+ gap: 8px var(--as-gap);
603
+ font-size: var(--as-fs-sm);
604
+ padding: 10px 0;
605
+ }
606
+ .as-summary-grid dt {
607
+ color: var(--as-text-muted);
608
+ }
609
+ .as-summary-grid dd {
610
+ margin: 0;
611
+ font-family: var(--as-mono);
612
+ color: var(--as-text);
613
+ overflow-wrap: anywhere;
614
+ }
615
+
616
+ /* model badge chip (deterministic hue via --model-hue).
617
+ * Text hsl(H 55% 72%) on chip hsl(H 45% 15%): worst-case hue verified
618
+ * >= 6:1 AA normal across the wheel. */
619
+ .as-model-badge {
620
+ display: inline-block;
621
+ font-family: var(--as-mono);
622
+ font-size: 11.5px;
623
+ line-height: 1.6;
624
+ padding: 1px 9px;
625
+ border-radius: 999px;
626
+ color: hsl(var(--model-hue, 210) 55% 72%);
627
+ background: hsl(var(--model-hue, 210) 45% 15%);
628
+ border: 1px solid hsl(var(--model-hue, 210) 45% 28%);
629
+ white-space: nowrap;
630
+ max-width: 100%;
631
+ overflow: hidden;
632
+ text-overflow: ellipsis;
633
+ vertical-align: bottom;
634
+ }
635
+
636
+ /* project switcher (header) */
637
+ .as-project-switch {
638
+ display: flex;
639
+ align-items: center;
640
+ gap: 8px;
641
+ margin-left: auto;
642
+ }
643
+ .as-project-switch .as-label {
644
+ margin: 0;
645
+ }
646
+
647
+ /* success banner (post-install, dismissible) */
648
+ .as-banner {
649
+ display: flex;
650
+ align-items: center;
651
+ gap: var(--as-gap-sm);
652
+ background: #0f2318;
653
+ border: 1px solid #1d4028;
654
+ border-left: 3px solid var(--as-ok);
655
+ border-radius: var(--as-radius);
656
+ padding: var(--as-gap-sm) var(--as-gap);
657
+ margin: 0 0 var(--as-gap);
658
+ font-size: var(--as-fs-sm);
659
+ }
660
+ .as-banner-detail {
661
+ color: var(--as-text-muted);
662
+ }
663
+ .as-banner-close {
664
+ margin-left: auto;
665
+ border: none;
666
+ background: none;
667
+ font-size: var(--as-fs-lg);
668
+ line-height: 1;
669
+ cursor: pointer;
670
+ color: var(--as-text-muted);
671
+ padding: 2px 6px;
672
+ border-radius: var(--as-radius-sm);
673
+ }
674
+ .as-banner-close:hover {
675
+ color: var(--as-text);
676
+ background: rgb(255 255 255 / 0.06);
677
+ }
678
+
679
+ /* collapsible details (bulk add, file previews, experimental targets) */
680
+ .as-details {
681
+ border: 1px solid var(--as-border);
682
+ border-radius: var(--as-radius);
683
+ background: var(--as-surface);
684
+ margin-bottom: var(--as-gap-sm);
685
+ padding: 4px var(--as-gap);
686
+ }
687
+ .as-details[open] {
688
+ padding-bottom: var(--as-gap-sm);
689
+ }
690
+ .as-summary {
691
+ cursor: pointer;
692
+ font-weight: 500;
693
+ font-size: var(--as-fs-sm);
694
+ padding: 8px 0;
695
+ color: var(--as-text);
696
+ border-radius: var(--as-radius-sm);
697
+ }
698
+ .as-summary:hover {
699
+ color: var(--as-accent-text);
700
+ }
701
+ .as-count {
702
+ color: var(--as-accent-text);
703
+ font-weight: 600;
704
+ font-variant-numeric: tabular-nums;
705
+ }
706
+
707
+ /* amber = deliberate experimental warning, NOT an error */
708
+ .as-details[data-variant="warn"] {
709
+ border-color: #4a3a18;
710
+ background: var(--as-warn-soft);
711
+ }
712
+ .as-details[data-variant="warn"] > .as-summary {
713
+ color: var(--as-warn);
714
+ }
715
+ .as-warn {
716
+ color: var(--as-warn);
717
+ font-size: var(--as-fs-sm);
718
+ margin: var(--as-gap-sm) 0;
719
+ }
720
+
721
+ .as-code {
722
+ font-family: var(--as-mono);
723
+ font-size: var(--as-fs-sm);
724
+ background: var(--as-bg);
725
+ border: 1px solid var(--as-border);
726
+ border-radius: var(--as-radius-sm);
727
+ padding: 12px;
728
+ margin: var(--as-gap-sm) 0 0;
729
+ max-height: 320px;
730
+ overflow: auto;
731
+ white-space: pre-wrap;
732
+ word-break: break-word;
733
+ color: var(--as-text-muted);
734
+ transition: opacity var(--as-dur) ease-in-out;
735
+ }
736
+
737
+ /* preview refetch affordance: fixed-width status slot -> no layout shift */
738
+ .as-preview-status {
739
+ display: inline-block;
740
+ width: 80px;
741
+ margin-left: 8px;
742
+ font-size: var(--as-fs-sm);
743
+ font-weight: 400;
744
+ color: var(--as-text-muted);
745
+ vertical-align: baseline;
746
+ }
747
+ .as-section[data-loading="true"] .as-code {
748
+ opacity: 0.55;
749
+ }
750
+
751
+ /* ==================================================================== */
752
+ /* review app shell: main column + sticky right rail */
753
+ /* ==================================================================== */
754
+ .as-review {
755
+ display: grid;
756
+ grid-template-columns: minmax(0, 1fr) 280px;
757
+ gap: calc(var(--as-gap) * 1.5);
758
+ align-items: start;
759
+ }
760
+ .as-review-main {
761
+ min-width: 0;
762
+ }
763
+ .as-rail {
764
+ position: sticky;
765
+ top: var(--as-gap);
766
+ }
767
+ .as-rail-panel {
768
+ padding: var(--as-gap) var(--as-gap);
769
+ }
770
+ .as-rail-grid {
771
+ grid-template-columns: 70px 1fr;
772
+ padding: 6px 0;
773
+ }
774
+ .as-rail-counts {
775
+ font-size: var(--as-fs-sm);
776
+ color: var(--as-text-muted);
777
+ font-variant-numeric: tabular-nums;
778
+ margin: 0 0 var(--as-gap-sm);
779
+ padding-top: var(--as-gap-sm);
780
+ border-top: 1px solid var(--as-border);
781
+ }
782
+ .as-rail-deletions {
783
+ color: var(--as-danger);
784
+ border-top: none;
785
+ padding-top: 0;
786
+ }
787
+ .as-rail-previews {
788
+ display: flex;
789
+ flex-direction: column;
790
+ gap: 6px;
791
+ padding: var(--as-gap-sm) 0;
792
+ border-top: 1px solid var(--as-border);
793
+ }
794
+ .as-rail-actions {
795
+ display: flex;
796
+ flex-wrap: wrap;
797
+ gap: var(--as-gap-sm);
798
+ padding-top: var(--as-gap);
799
+ border-top: 1px solid var(--as-border);
800
+ margin-top: var(--as-gap-sm);
801
+ }
802
+ .as-rail-error {
803
+ flex-basis: 100%;
804
+ margin: 0;
805
+ font-size: var(--as-fs-sm);
806
+ }
807
+ .as-rail-actions .as-btn[data-variant="primary"] {
808
+ flex: 1;
809
+ }
810
+ @media (max-width: 900px) {
811
+ .as-review {
812
+ grid-template-columns: minmax(0, 1fr);
813
+ }
814
+ .as-rail {
815
+ position: static;
816
+ order: -1;
817
+ }
818
+ }
819
+
820
+ /* section header with an inline "+ Add" action */
821
+ .as-section-head {
822
+ display: flex;
823
+ align-items: center;
824
+ justify-content: space-between;
825
+ gap: var(--as-gap-sm);
826
+ margin-bottom: 4px;
827
+ }
828
+ .as-section-head .as-section-title {
829
+ margin: 0;
830
+ }
831
+ /* right-aligned cluster of header actions (e.g. global toggle + "+ Add") */
832
+ .as-section-head-actions {
833
+ display: flex;
834
+ align-items: center;
835
+ gap: var(--as-gap);
836
+ }
837
+ .as-btn[data-size="sm"] {
838
+ padding: 4px 10px;
839
+ font-weight: 500;
840
+ }
841
+
842
+ /* row variants */
843
+ .as-row-nested {
844
+ padding-left: 44px;
845
+ }
846
+ .as-row-controls {
847
+ gap: calc(var(--as-gap) * 2);
848
+ align-items: flex-start;
849
+ flex-wrap: wrap;
850
+ }
851
+ .as-field {
852
+ display: flex;
853
+ flex-direction: column;
854
+ gap: 2px;
855
+ }
856
+ .as-agent-row {
857
+ align-items: flex-start;
858
+ flex-wrap: wrap;
859
+ }
860
+ .as-agent-model {
861
+ display: flex;
862
+ align-items: center;
863
+ gap: 6px;
864
+ margin-top: 4px;
865
+ }
866
+ .as-agent-controls {
867
+ display: flex;
868
+ gap: var(--as-gap);
869
+ align-items: flex-start;
870
+ flex-wrap: wrap;
871
+ }
872
+ .as-tag {
873
+ display: inline-block;
874
+ font-size: 10.5px;
875
+ font-weight: 600;
876
+ text-transform: uppercase;
877
+ letter-spacing: 0.06em;
878
+ color: var(--as-text-muted);
879
+ border: 1px solid var(--as-border-strong);
880
+ border-radius: 999px;
881
+ padding: 0 7px;
882
+ margin-left: 8px;
883
+ line-height: 1.6;
884
+ vertical-align: middle;
885
+ white-space: nowrap;
886
+ }
887
+ .as-tag[data-variant="custom"] {
888
+ color: var(--as-accent-text);
889
+ border-color: rgb(69 101 213 / 0.5);
890
+ margin-left: 0;
891
+ }
892
+ .as-tag[data-variant="default"] {
893
+ margin-left: 0;
894
+ }
895
+ .as-tag-warn {
896
+ color: var(--as-warn);
897
+ border-color: var(--as-warn);
898
+ text-transform: none;
899
+ letter-spacing: 0;
900
+ }
901
+ .as-contradict-summary {
902
+ margin: 0 0 8px;
903
+ font-size: var(--as-fs-sm);
904
+ }
905
+ .as-remove {
906
+ font: inherit;
907
+ font-size: var(--as-fs-lg);
908
+ line-height: 1;
909
+ border: none;
910
+ background: none;
911
+ color: var(--as-text-muted);
912
+ cursor: pointer;
913
+ padding: 2px 6px;
914
+ border-radius: var(--as-radius-sm);
915
+ flex-shrink: 0;
916
+ }
917
+ .as-remove:hover {
918
+ color: var(--as-text);
919
+ background: rgb(255 255 255 / 0.06);
920
+ }
921
+
922
+ /* segmented control (Base UI ToggleGroup) ----------------------------- */
923
+ .as-seg {
924
+ display: inline-flex;
925
+ gap: 2px;
926
+ padding: 2px;
927
+ border: 1px solid var(--as-border-strong);
928
+ border-radius: var(--as-radius-sm);
929
+ background: var(--as-bg);
930
+ width: fit-content;
931
+ }
932
+ .as-seg-item {
933
+ font: inherit;
934
+ font-size: var(--as-fs-sm);
935
+ font-weight: 500;
936
+ border: none;
937
+ background: none;
938
+ color: var(--as-text-muted);
939
+ padding: 3px 10px;
940
+ border-radius: 4px;
941
+ cursor: pointer;
942
+ transition:
943
+ background var(--as-dur) ease-in-out,
944
+ color var(--as-dur) ease-in-out;
945
+ }
946
+ .as-seg-item:hover {
947
+ color: var(--as-text);
948
+ }
949
+ .as-seg-item[data-pressed] {
950
+ background: var(--as-surface-2);
951
+ color: var(--as-text);
952
+ font-weight: 600;
953
+ }
954
+
955
+ /* popovers / positioners (shared surface for Popover + Combobox) ------- */
956
+ .as-positioner {
957
+ z-index: 10;
958
+ }
959
+ .as-popover {
960
+ background: var(--as-surface);
961
+ border: 1px solid var(--as-border-strong);
962
+ border-radius: var(--as-radius);
963
+ box-shadow:
964
+ 0 8px 24px rgb(0 0 0 / 0.5),
965
+ var(--as-shadow);
966
+ color: var(--as-text);
967
+ transform-origin: var(--transform-origin);
968
+ transition:
969
+ opacity 140ms ease-out,
970
+ transform 140ms ease-out;
971
+ }
972
+ .as-popover[data-starting-style],
973
+ .as-popover[data-ending-style] {
974
+ opacity: 0;
975
+ transform: scale(0.97);
976
+ }
977
+
978
+ /* tooltip */
979
+ .as-tooltip {
980
+ background: var(--as-surface-2);
981
+ border: 1px solid var(--as-border-strong);
982
+ border-radius: var(--as-radius-sm);
983
+ color: var(--as-text);
984
+ font-size: var(--as-fs-sm);
985
+ padding: 4px 9px;
986
+ transition: opacity 140ms ease-out;
987
+ }
988
+ .as-tooltip[data-starting-style],
989
+ .as-tooltip[data-ending-style] {
990
+ opacity: 0;
991
+ }
992
+
993
+ /* model combobox */
994
+ .as-combo {
995
+ position: relative;
996
+ display: inline-flex;
997
+ align-items: center;
998
+ }
999
+ .as-combo .as-input {
1000
+ padding-right: 26px;
1001
+ }
1002
+ .as-combo-clear {
1003
+ position: absolute;
1004
+ right: 4px;
1005
+ border: none;
1006
+ background: none;
1007
+ color: var(--as-text-muted);
1008
+ font-size: var(--as-fs);
1009
+ line-height: 1;
1010
+ cursor: pointer;
1011
+ padding: 2px 5px;
1012
+ border-radius: var(--as-radius-sm);
1013
+ }
1014
+ .as-combo-clear:hover {
1015
+ color: var(--as-text);
1016
+ }
1017
+ .as-combo-popup {
1018
+ width: var(--anchor-width);
1019
+ min-width: 260px;
1020
+ max-height: min(320px, var(--available-height));
1021
+ overflow: auto;
1022
+ padding: 4px;
1023
+ }
1024
+ .as-combo-list {
1025
+ display: flex;
1026
+ flex-direction: column;
1027
+ }
1028
+ .as-combo-group-label {
1029
+ font-size: 10.5px;
1030
+ font-weight: 600;
1031
+ text-transform: uppercase;
1032
+ letter-spacing: 0.06em;
1033
+ color: var(--as-text-muted);
1034
+ padding: 6px 8px 2px;
1035
+ }
1036
+ .as-combo-item {
1037
+ display: flex;
1038
+ align-items: center;
1039
+ gap: 6px;
1040
+ font-family: var(--as-mono);
1041
+ font-size: var(--as-fs-sm);
1042
+ padding: 5px 8px;
1043
+ border-radius: var(--as-radius-sm);
1044
+ cursor: pointer;
1045
+ color: var(--as-text);
1046
+ }
1047
+ .as-combo-item[data-highlighted] {
1048
+ background: var(--as-surface-2);
1049
+ }
1050
+ .as-combo-item[data-selected] {
1051
+ color: var(--as-accent-text);
1052
+ }
1053
+ .as-combo-indicator {
1054
+ width: 12px;
1055
+ flex-shrink: 0;
1056
+ display: inline-flex;
1057
+ color: var(--as-accent-text);
1058
+ }
1059
+ .as-combo-item-text {
1060
+ overflow: hidden;
1061
+ text-overflow: ellipsis;
1062
+ white-space: nowrap;
1063
+ }
1064
+ .as-combo-empty {
1065
+ font-size: var(--as-fs-sm);
1066
+ color: var(--as-text-muted);
1067
+ padding: 8px;
1068
+ margin: 0;
1069
+ }
1070
+ .as-combo-empty:empty {
1071
+ display: none;
1072
+ }
1073
+
1074
+ /* "+ Add" popover: search on top, multiselect checklist below ---------- */
1075
+ .as-add-popup {
1076
+ width: 340px;
1077
+ max-height: min(400px, var(--available-height));
1078
+ display: flex;
1079
+ flex-direction: column;
1080
+ padding: var(--as-gap-sm);
1081
+ }
1082
+ .as-add-search {
1083
+ width: 100%;
1084
+ min-width: 0;
1085
+ font-family: var(--as-font);
1086
+ margin-bottom: 6px;
1087
+ }
1088
+ .as-add-list {
1089
+ overflow: auto;
1090
+ display: flex;
1091
+ flex-direction: column;
1092
+ gap: 2px;
1093
+ }
1094
+ .as-add-item {
1095
+ display: flex;
1096
+ align-items: flex-start;
1097
+ gap: 8px;
1098
+ text-align: left;
1099
+ font: inherit;
1100
+ border: none;
1101
+ background: none;
1102
+ color: var(--as-text);
1103
+ padding: 6px 8px;
1104
+ border-radius: var(--as-radius-sm);
1105
+ cursor: pointer;
1106
+ }
1107
+ .as-add-item:hover {
1108
+ background: var(--as-surface-2);
1109
+ }
1110
+ .as-add-check {
1111
+ width: 15px;
1112
+ height: 15px;
1113
+ margin-top: 2px;
1114
+ flex-shrink: 0;
1115
+ border-radius: 4px;
1116
+ border: 1.5px solid var(--as-border-strong);
1117
+ display: inline-flex;
1118
+ align-items: center;
1119
+ justify-content: center;
1120
+ color: var(--as-accent-fill-text);
1121
+ }
1122
+ .as-add-check[data-on="true"] {
1123
+ background: var(--as-accent);
1124
+ border-color: var(--as-accent);
1125
+ }
1126
+ .as-add-main {
1127
+ display: flex;
1128
+ flex-direction: column;
1129
+ min-width: 0;
1130
+ }
1131
+ .as-add-main .as-row-desc {
1132
+ overflow: hidden;
1133
+ text-overflow: ellipsis;
1134
+ display: -webkit-box;
1135
+ -webkit-line-clamp: 2;
1136
+ -webkit-box-orient: vertical;
1137
+ }
1138
+
1139
+ /* config preview sheet (Dialog styled as a right drawer) --------------- */
1140
+ .as-sheet-backdrop {
1141
+ position: fixed;
1142
+ inset: 0;
1143
+ background: rgb(0 0 0 / 0.55);
1144
+ transition: opacity 160ms ease-out;
1145
+ }
1146
+ .as-sheet-backdrop[data-starting-style],
1147
+ .as-sheet-backdrop[data-ending-style] {
1148
+ opacity: 0;
1149
+ }
1150
+ .as-sheet {
1151
+ position: fixed;
1152
+ top: 0;
1153
+ right: 0;
1154
+ bottom: 0;
1155
+ width: min(560px, 92vw);
1156
+ background: var(--as-surface);
1157
+ border-left: 1px solid var(--as-border-strong);
1158
+ padding: var(--as-gap) var(--as-pad);
1159
+ display: flex;
1160
+ flex-direction: column;
1161
+ gap: var(--as-gap-sm);
1162
+ transition:
1163
+ transform 160ms ease-out,
1164
+ opacity 160ms ease-out;
1165
+ }
1166
+ .as-sheet[data-starting-style],
1167
+ .as-sheet[data-ending-style] {
1168
+ transform: translateX(24px);
1169
+ opacity: 0;
1170
+ }
1171
+ .as-sheet-head {
1172
+ display: flex;
1173
+ align-items: center;
1174
+ justify-content: space-between;
1175
+ gap: var(--as-gap-sm);
1176
+ }
1177
+ .as-sheet-title {
1178
+ font-size: var(--as-fs);
1179
+ font-weight: 600;
1180
+ margin: 0;
1181
+ }
1182
+ .as-sheet-code {
1183
+ flex: 1;
1184
+ max-height: none;
1185
+ margin: 0;
1186
+ }
1187
+ .as-sheet[data-loading="true"] .as-sheet-code {
1188
+ opacity: 0.55;
1189
+ }
1190
+
1191
+ /* collapsible (experimental targets), amber = warning not error -------- */
1192
+ .as-collapse {
1193
+ border: 1px solid var(--as-border);
1194
+ border-radius: var(--as-radius);
1195
+ background: var(--as-surface);
1196
+ margin: var(--as-gap-sm) 0;
1197
+ padding: 0 var(--as-gap);
1198
+ }
1199
+ .as-collapse[data-variant="warn"] {
1200
+ border-color: #4a3a18;
1201
+ background: var(--as-warn-soft);
1202
+ }
1203
+ .as-collapse-trigger {
1204
+ display: block;
1205
+ width: 100%;
1206
+ text-align: left;
1207
+ font: inherit;
1208
+ font-weight: 500;
1209
+ font-size: var(--as-fs-sm);
1210
+ border: none;
1211
+ background: none;
1212
+ color: var(--as-text);
1213
+ cursor: pointer;
1214
+ padding: 10px 0;
1215
+ border-radius: var(--as-radius-sm);
1216
+ }
1217
+ .as-collapse[data-variant="warn"] .as-collapse-trigger {
1218
+ color: var(--as-warn);
1219
+ }
1220
+ .as-collapse-panel {
1221
+ padding-bottom: var(--as-gap-sm);
1222
+ }
1223
+
1224
+ /* collapsible review sections (Skills/Tools/Plugins/Commands/Rules/MCPs) ---
1225
+ start collapsed; header row is always visible, body animates open/closed. */
1226
+ .as-section-collapsible {
1227
+ /* section card already provides border/padding; keep the header flush. */
1228
+ }
1229
+ .as-collapse-head {
1230
+ margin-bottom: 0;
1231
+ /* subtle separator so the whole header reads as a clickable trigger row.
1232
+ Uses the semantic border token; sits on the header container (not the
1233
+ trigger button) so it spans full width and never doubles with the panel
1234
+ card border below when the section is expanded. */
1235
+ border-bottom: 1px solid var(--as-border);
1236
+ }
1237
+ .as-collapse-head-trigger {
1238
+ display: flex;
1239
+ align-items: center;
1240
+ gap: var(--as-gap-sm);
1241
+ flex: 1;
1242
+ min-width: 0;
1243
+ text-align: left;
1244
+ font: inherit;
1245
+ border: none;
1246
+ background: none;
1247
+ color: var(--as-text);
1248
+ cursor: pointer;
1249
+ padding: var(--as-gap-sm) 8px;
1250
+ margin: 0 -8px;
1251
+ border-radius: var(--as-radius-sm);
1252
+ transition:
1253
+ background-color 120ms ease-out,
1254
+ color 120ms ease-out;
1255
+ }
1256
+ /* whole trigger row lifts on hover/focus so it reads as expandable */
1257
+ .as-collapse-head-trigger:hover,
1258
+ .as-collapse-head-trigger:focus-visible {
1259
+ background: var(--as-surface-hover, rgb(255 255 255 / 0.04));
1260
+ }
1261
+ .as-collapse-head-trigger .as-section-title {
1262
+ margin: 0;
1263
+ /* dotted underline hints "expandable"; firms up + shifts accent on hover. */
1264
+ text-decoration: underline dotted var(--as-border-strong);
1265
+ text-underline-offset: 4px;
1266
+ transition:
1267
+ text-decoration-color 120ms ease-out,
1268
+ color 120ms ease-out;
1269
+ }
1270
+ .as-collapse-head-trigger:hover .as-section-title,
1271
+ .as-collapse-head-trigger:focus-visible .as-section-title {
1272
+ color: var(--as-accent-text);
1273
+ text-decoration-style: solid;
1274
+ text-decoration-color: currentColor;
1275
+ }
1276
+ .as-section-count {
1277
+ font-size: var(--as-fs-sm);
1278
+ }
1279
+ .as-chevron {
1280
+ margin-left: auto;
1281
+ color: var(--as-text-muted);
1282
+ transition:
1283
+ transform 140ms ease-out,
1284
+ color 120ms ease-out;
1285
+ flex-shrink: 0;
1286
+ }
1287
+ .as-collapse-head-trigger:hover .as-chevron,
1288
+ .as-collapse-head-trigger:focus-visible .as-chevron {
1289
+ color: var(--as-accent-text);
1290
+ }
1291
+ .as-collapse-head-trigger[data-panel-open] .as-chevron {
1292
+ transform: rotate(180deg);
1293
+ }
1294
+ /* Base UI reports the natural panel height via --collapsible-panel-height;
1295
+ animate height + opacity for a smooth, jank-free open/close. */
1296
+ .as-section-panel {
1297
+ overflow: hidden;
1298
+ padding-bottom: 0;
1299
+ transition:
1300
+ height 140ms ease-out,
1301
+ opacity 140ms ease-out;
1302
+ }
1303
+ .as-section-panel[data-open] {
1304
+ height: var(--collapsible-panel-height);
1305
+ opacity: 1;
1306
+ }
1307
+ .as-section-panel[data-starting-style],
1308
+ .as-section-panel[data-ending-style] {
1309
+ height: 0;
1310
+ opacity: 0;
1311
+ }
1312
+ .as-section-panel[hidden] {
1313
+ display: none;
1314
+ }
1315
+ /* breathing room between the header separator line and the panel card */
1316
+ .as-section-panel > .as-panel,
1317
+ .as-section-panel > .as-warn {
1318
+ margin-top: var(--as-gap-sm);
1319
+ }
1320
+
1321
+ /* "+ Add" popover: skills group headers ------------------------------- */
1322
+ .as-add-group + .as-add-group {
1323
+ margin-top: 6px;
1324
+ padding-top: 6px;
1325
+ border-top: 1px solid var(--as-border);
1326
+ }
1327
+ .as-add-group-head {
1328
+ display: flex;
1329
+ align-items: center;
1330
+ gap: 8px;
1331
+ padding: 4px 8px 2px;
1332
+ }
1333
+ .as-add-group-label {
1334
+ font-size: var(--as-fs-sm);
1335
+ font-weight: 600;
1336
+ color: var(--as-text);
1337
+ }
1338
+ .as-add-group-count {
1339
+ font-size: var(--as-fs-sm);
1340
+ }
1341
+ .as-add-group-head .as-btn {
1342
+ margin-left: auto;
1343
+ }
1344
+
1345
+ /* per-agent "override defaults" toggle: label + switch on ONE row, aligned
1346
+ with the "+ Add" button in the section header actions cluster. */
1347
+ .as-override-toggle {
1348
+ flex-direction: row;
1349
+ align-items: center;
1350
+ gap: var(--as-gap-sm);
1351
+ }
1352
+ .as-override-toggle .as-label {
1353
+ margin-bottom: 0;
1354
+ }
1355
+
1356
+ /* tier model overrides (the normal path: one model per cheap/normal/expert).
1357
+ Description stacks ABOVE the fields so it keeps a readable full-width measure
1358
+ instead of collapsing to a narrow squashed column; the three pickers form one
1359
+ horizontal row that wraps only when the container is genuinely too narrow. */
1360
+ .as-tier-overrides {
1361
+ flex-direction: column;
1362
+ align-items: stretch;
1363
+ gap: var(--as-gap-sm);
1364
+ }
1365
+ .as-tier-overrides .as-row-main {
1366
+ flex: none;
1367
+ }
1368
+ .as-tier-overrides .as-row-desc {
1369
+ max-width: 65ch;
1370
+ line-height: 1.5;
1371
+ }
1372
+ .as-tier-fields {
1373
+ display: grid;
1374
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1375
+ gap: var(--as-gap);
1376
+ }
1377
+ .as-tier-field {
1378
+ min-width: 0;
1379
+ display: flex;
1380
+ flex-direction: column;
1381
+ gap: var(--as-gap-sm);
1382
+ }
1383
+ .as-tier-field .as-select {
1384
+ width: 100%;
1385
+ }
1386
+ /* Keep the tier ModelPicker within its grid cell: the global `.as-input`
1387
+ min-width (220px) exceeds the ~197px tier column at 1024, so without these
1388
+ the input and its inline-flex `.as-combo` wrapper overflow and eat the grid
1389
+ gaps. Scope stays tier-local; global input sizing is untouched elsewhere. */
1390
+ .as-tier-field .as-combo {
1391
+ width: 100%;
1392
+ }
1393
+ .as-tier-field .as-input {
1394
+ min-width: 0;
1395
+ width: 100%;
1396
+ }
1397
+ @media (max-width: 560px) {
1398
+ .as-tier-fields {
1399
+ grid-template-columns: 1fr;
1400
+ }
1401
+ }
1402
+ .as-tier-hint {
1403
+ font-weight: 400;
1404
+ color: var(--as-text-muted);
1405
+ }
1406
+ .as-tier-sublabel {
1407
+ display: block;
1408
+ font-size: var(--as-fs-xs, 11px);
1409
+ font-weight: 500;
1410
+ color: var(--as-text-muted);
1411
+ letter-spacing: 0.01em;
1412
+ }
1413
+
1414
+ /* nested "Model overrides" collapsible inside Targets & options: a compact
1415
+ card whose full trigger row (title + chevron) opens it. Collapsed by default;
1416
+ avoids nested-card clutter by reusing the tier fields directly in the panel. */
1417
+ .as-tier-collapse {
1418
+ margin: var(--as-gap-sm) 0 0;
1419
+ }
1420
+ .as-tier-collapse-trigger {
1421
+ display: flex;
1422
+ align-items: center;
1423
+ gap: var(--as-gap-sm);
1424
+ }
1425
+ .as-tier-collapse-title {
1426
+ font-weight: 500;
1427
+ }
1428
+ .as-tier-collapse-trigger:hover .as-tier-collapse-title,
1429
+ .as-tier-collapse-trigger:focus-visible .as-tier-collapse-title {
1430
+ color: var(--as-accent-text);
1431
+ }
1432
+ .as-tier-collapse-trigger:hover .as-chevron,
1433
+ .as-tier-collapse-trigger:focus-visible .as-chevron {
1434
+ color: var(--as-accent-text);
1435
+ }
1436
+ .as-tier-collapse-trigger[data-panel-open] .as-chevron {
1437
+ transform: rotate(180deg);
1438
+ }
1439
+ /* tier fields inside the nested panel: drop the bottom row border (it is the
1440
+ last thing in the panel) and keep the fields flush to the trigger. */
1441
+ .as-tier-collapse .as-tier-overrides {
1442
+ border-bottom: none;
1443
+ padding-top: 0;
1444
+ }
1445
+
1446
+ /* post-install terminal panel (server stopped) ------------------------ */
1447
+ .as-stopped {
1448
+ text-align: center;
1449
+ }
1450
+
1451
+ /* ==================================================================== */
1452
+ /* neo-brutalist visual layer */
1453
+ /* ==================================================================== */
1454
+
1455
+ body {
1456
+ min-width: 320px;
1457
+ min-height: 100dvh;
1458
+ background: var(--as-bg);
1459
+ color: var(--as-text);
1460
+ font-family: var(--as-font);
1461
+ letter-spacing: 0.01em;
1462
+ }
1463
+
1464
+ button,
1465
+ input,
1466
+ select {
1467
+ border-radius: 0;
1468
+ }
1469
+
1470
+ :focus-visible {
1471
+ outline: 3px solid var(--as-focus);
1472
+ outline-offset: 3px;
1473
+ box-shadow: 0 0 0 2px var(--as-bg), 0 0 0 5px var(--as-focus);
1474
+ }
1475
+
1476
+ .as-app {
1477
+ max-width: var(--as-maxw);
1478
+ min-height: 100dvh;
1479
+ padding: 24px 24px 72px;
1480
+ }
1481
+
1482
+ /* header */
1483
+ .as-header {
1484
+ min-height: 74px;
1485
+ gap: 14px;
1486
+ padding: 12px 14px;
1487
+ margin-bottom: 28px;
1488
+ border: 3px solid var(--as-border-strong);
1489
+ background: var(--as-surface);
1490
+ box-shadow: 6px 6px 0 var(--as-color-shadow);
1491
+ }
1492
+
1493
+ .as-title {
1494
+ gap: 10px;
1495
+ font-family: var(--as-font-display);
1496
+ font-size: clamp(1.25rem, 2.4vw, 1.7rem);
1497
+ font-weight: 900;
1498
+ letter-spacing: -0.055em;
1499
+ line-height: 1;
1500
+ text-transform: uppercase;
1501
+ }
1502
+
1503
+ .as-logo {
1504
+ width: 30px;
1505
+ height: 30px;
1506
+ color: var(--as-accent);
1507
+ }
1508
+
1509
+ .as-project-switch {
1510
+ gap: 7px;
1511
+ padding-left: 14px;
1512
+ border-left: 2px solid var(--as-border-strong);
1513
+ }
1514
+
1515
+ .as-project-switch .as-label {
1516
+ font-family: var(--as-mono);
1517
+ letter-spacing: 0.08em;
1518
+ text-transform: uppercase;
1519
+ }
1520
+
1521
+ .as-steps {
1522
+ gap: 6px;
1523
+ margin-left: auto;
1524
+ font-family: var(--as-mono);
1525
+ font-size: 11px;
1526
+ font-weight: 700;
1527
+ letter-spacing: 0.07em;
1528
+ text-transform: uppercase;
1529
+ }
1530
+
1531
+ .as-step {
1532
+ padding: 6px 10px;
1533
+ border: 2px solid var(--as-border-strong);
1534
+ border-radius: 0;
1535
+ color: var(--as-text-muted);
1536
+ }
1537
+
1538
+ .as-step[data-active="true"] {
1539
+ border-color: var(--as-accent);
1540
+ background: var(--as-accent);
1541
+ color: var(--as-accent-fill-text);
1542
+ font-weight: 900;
1543
+ }
1544
+
1545
+ /* page hierarchy */
1546
+ .as-section {
1547
+ margin-bottom: 28px;
1548
+ }
1549
+
1550
+ .as-section-title {
1551
+ display: inline-block;
1552
+ margin: 0 0 6px;
1553
+ padding-left: 10px;
1554
+ border-left: 5px solid var(--as-accent);
1555
+ color: var(--as-text);
1556
+ font-family: var(--as-font-display);
1557
+ font-size: clamp(1rem, 1.6vw, 1.2rem);
1558
+ font-weight: 900;
1559
+ letter-spacing: -0.035em;
1560
+ line-height: 1.1;
1561
+ text-transform: uppercase;
1562
+ }
1563
+
1564
+ .as-section-hint {
1565
+ max-width: 68ch;
1566
+ margin: 0 0 13px;
1567
+ color: var(--as-text-muted);
1568
+ font-size: var(--as-fs-sm);
1569
+ line-height: 1.5;
1570
+ }
1571
+
1572
+ .as-section-head {
1573
+ align-items: flex-end;
1574
+ min-height: 35px;
1575
+ margin-bottom: 8px;
1576
+ }
1577
+
1578
+ .as-section-head-actions {
1579
+ gap: 10px;
1580
+ }
1581
+
1582
+ /* selectable setup cards */
1583
+ .as-grid {
1584
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr));
1585
+ gap: 20px;
1586
+ }
1587
+
1588
+ @media (min-width: 720px) {
1589
+ .as-grid > .as-card:first-child {
1590
+ grid-column: span 2;
1591
+ }
1592
+ }
1593
+
1594
+ .as-card {
1595
+ min-height: 164px;
1596
+ border: 3px solid var(--as-border-strong);
1597
+ border-radius: 0;
1598
+ background: var(--as-surface);
1599
+ box-shadow: 5px 5px 0 var(--as-color-shadow);
1600
+ padding: 20px;
1601
+ transition:
1602
+ background var(--as-dur) ease-out,
1603
+ border-color var(--as-dur) ease-out,
1604
+ box-shadow var(--as-dur) ease-out,
1605
+ transform var(--as-dur) ease-out;
1606
+ }
1607
+
1608
+ .as-card:hover {
1609
+ border-color: var(--as-accent);
1610
+ background: var(--as-surface-2);
1611
+ box-shadow: 7px 7px 0 var(--as-color-shadow);
1612
+ transform: translate(-2px, -2px);
1613
+ }
1614
+
1615
+ .as-card:active {
1616
+ box-shadow: 2px 2px 0 var(--as-color-shadow);
1617
+ transform: translate(3px, 3px);
1618
+ }
1619
+
1620
+ .as-card[data-selected="true"] {
1621
+ border-color: var(--as-accent);
1622
+ background: var(--as-accent-soft);
1623
+ box-shadow: 5px 5px 0 var(--as-accent);
1624
+ }
1625
+
1626
+ .as-card-select:focus-visible {
1627
+ outline-color: var(--as-focus);
1628
+ outline-offset: 5px;
1629
+ border-radius: 0;
1630
+ }
1631
+
1632
+ .as-card-check {
1633
+ top: 14px;
1634
+ right: 14px;
1635
+ width: 23px;
1636
+ height: 23px;
1637
+ border: 2px solid var(--as-border-strong);
1638
+ border-radius: 0;
1639
+ }
1640
+
1641
+ .as-card[data-selected="true"] .as-card-check {
1642
+ border-color: var(--as-accent);
1643
+ background: var(--as-accent);
1644
+ }
1645
+
1646
+ .as-card-title {
1647
+ margin-right: 32px;
1648
+ color: var(--as-text);
1649
+ font-family: var(--as-font-display);
1650
+ font-size: 1rem;
1651
+ font-weight: 900;
1652
+ letter-spacing: -0.025em;
1653
+ line-height: 1.2;
1654
+ text-transform: uppercase;
1655
+ }
1656
+
1657
+ .as-card-desc {
1658
+ margin-top: 7px;
1659
+ color: var(--as-text-muted);
1660
+ font-size: var(--as-fs-sm);
1661
+ line-height: 1.45;
1662
+ }
1663
+
1664
+ .as-card-tiers {
1665
+ gap: 6px;
1666
+ margin-top: 14px;
1667
+ }
1668
+
1669
+ .as-tier-chip,
1670
+ .as-tag,
1671
+ .as-dep-chip {
1672
+ border: 1px solid var(--as-border-strong);
1673
+ border-radius: 0;
1674
+ background: var(--as-bg);
1675
+ }
1676
+
1677
+ .as-tier-chip {
1678
+ gap: 5px;
1679
+ padding: 3px 7px;
1680
+ color: var(--as-text-muted);
1681
+ font-family: var(--as-mono);
1682
+ font-size: 10.5px;
1683
+ }
1684
+
1685
+ .as-tier-name {
1686
+ color: var(--as-accent-text);
1687
+ }
1688
+
1689
+ .as-card-meta {
1690
+ margin-top: 14px;
1691
+ padding-top: 10px;
1692
+ border-top: 2px solid var(--as-border);
1693
+ color: var(--as-text-muted);
1694
+ font-family: var(--as-mono);
1695
+ font-size: 11px;
1696
+ }
1697
+
1698
+ .as-card[data-selected="true"] .as-card-meta {
1699
+ border-top-color: var(--as-accent);
1700
+ }
1701
+
1702
+ .as-card-comp > summary {
1703
+ color: var(--as-accent-text);
1704
+ font-family: var(--as-mono);
1705
+ font-size: 11px;
1706
+ font-weight: 700;
1707
+ letter-spacing: 0.03em;
1708
+ text-transform: uppercase;
1709
+ }
1710
+
1711
+ .as-card-comp > summary:hover {
1712
+ color: var(--as-accent);
1713
+ }
1714
+
1715
+ /* panels, rows, data */
1716
+ .as-panel,
1717
+ .as-details,
1718
+ .as-collapse {
1719
+ border: 2px solid var(--as-border-strong);
1720
+ border-radius: 0;
1721
+ background: var(--as-surface);
1722
+ box-shadow: var(--as-shadow);
1723
+ }
1724
+
1725
+ .as-panel {
1726
+ padding: 5px 18px;
1727
+ }
1728
+
1729
+ .as-details {
1730
+ padding: 4px 18px;
1731
+ }
1732
+
1733
+ .as-collapse {
1734
+ padding: 0 18px;
1735
+ }
1736
+
1737
+ .as-collapse[data-variant="warn"],
1738
+ .as-details[data-variant="warn"] {
1739
+ border-color: var(--as-accent);
1740
+ background: var(--as-accent-soft);
1741
+ }
1742
+
1743
+ .as-row {
1744
+ min-height: 54px;
1745
+ gap: 14px;
1746
+ padding: 11px 0;
1747
+ border-bottom: 1px solid var(--as-border);
1748
+ transition: background var(--as-dur) ease-out;
1749
+ }
1750
+
1751
+ .as-panel > .as-row:hover {
1752
+ background: var(--as-surface-2);
1753
+ }
1754
+
1755
+ .as-row-name {
1756
+ color: var(--as-text);
1757
+ font-weight: 800;
1758
+ }
1759
+
1760
+ .as-row-desc,
1761
+ .as-row-detail,
1762
+ .as-lock-note {
1763
+ color: var(--as-text-muted);
1764
+ }
1765
+
1766
+ .as-row-detail,
1767
+ .as-summary-grid dd,
1768
+ .as-filelist,
1769
+ .as-code {
1770
+ font-family: var(--as-mono);
1771
+ }
1772
+
1773
+ .as-summary-grid {
1774
+ gap: 9px 20px;
1775
+ padding: 12px 0;
1776
+ }
1777
+
1778
+ .as-summary-grid dt {
1779
+ color: var(--as-accent-text);
1780
+ font-family: var(--as-mono);
1781
+ font-size: 11px;
1782
+ font-weight: 700;
1783
+ letter-spacing: 0.06em;
1784
+ text-transform: uppercase;
1785
+ }
1786
+
1787
+ .as-summary-grid dd {
1788
+ color: var(--as-text);
1789
+ font-size: 12px;
1790
+ font-variant-numeric: tabular-nums;
1791
+ }
1792
+
1793
+ .as-dep-chips {
1794
+ gap: 5px;
1795
+ margin-top: 6px;
1796
+ }
1797
+
1798
+ .as-dep-label,
1799
+ .as-dep-kind {
1800
+ color: var(--as-accent-text);
1801
+ font-family: var(--as-mono);
1802
+ font-weight: 700;
1803
+ }
1804
+
1805
+ .as-dep-chip {
1806
+ max-width: 260px;
1807
+ padding: 1px 6px;
1808
+ color: var(--as-text-muted);
1809
+ font-size: 10.5px;
1810
+ }
1811
+
1812
+ .as-dep-more {
1813
+ color: var(--as-accent-text);
1814
+ font-family: var(--as-mono);
1815
+ font-weight: 700;
1816
+ }
1817
+
1818
+ .as-dep-more:hover {
1819
+ color: var(--as-accent);
1820
+ }
1821
+
1822
+ /* controls */
1823
+ .as-select,
1824
+ .as-input {
1825
+ min-height: 42px;
1826
+ border: 2px solid var(--as-border-strong);
1827
+ border-radius: 0;
1828
+ background: var(--as-bg);
1829
+ color: var(--as-text);
1830
+ font-family: var(--as-mono);
1831
+ font-size: 12px;
1832
+ transition:
1833
+ border-color var(--as-dur) ease-out,
1834
+ background var(--as-dur) ease-out;
1835
+ }
1836
+
1837
+ .as-select:hover,
1838
+ .as-input:hover {
1839
+ border-color: var(--as-accent);
1840
+ background: var(--as-surface-2);
1841
+ }
1842
+
1843
+ .as-input::placeholder {
1844
+ color: var(--as-text-muted);
1845
+ opacity: 0.78;
1846
+ }
1847
+
1848
+ .as-label,
1849
+ .as-tier-sublabel {
1850
+ color: var(--as-accent-text);
1851
+ font-family: var(--as-mono);
1852
+ font-size: 10.5px;
1853
+ font-weight: 800;
1854
+ letter-spacing: 0.08em;
1855
+ text-transform: uppercase;
1856
+ }
1857
+
1858
+ .as-switch-wrap {
1859
+ min-width: 44px;
1860
+ min-height: 44px;
1861
+ justify-content: center;
1862
+ }
1863
+
1864
+ .as-switch {
1865
+ width: 42px;
1866
+ height: 24px;
1867
+ border: 2px solid var(--as-border-strong);
1868
+ border-radius: 0;
1869
+ background: var(--as-bg);
1870
+ }
1871
+
1872
+ .as-switch:hover {
1873
+ border-color: var(--as-accent);
1874
+ }
1875
+
1876
+ .as-switch[data-checked] {
1877
+ border-color: var(--as-accent);
1878
+ background: var(--as-accent);
1879
+ }
1880
+
1881
+ .as-switch-thumb {
1882
+ width: 14px;
1883
+ height: 14px;
1884
+ border-radius: 0;
1885
+ background: var(--as-text-muted);
1886
+ transform: translateX(3px);
1887
+ }
1888
+
1889
+ .as-switch[data-checked] .as-switch-thumb {
1890
+ background: var(--as-accent-fill-text);
1891
+ transform: translateX(21px);
1892
+ }
1893
+
1894
+ .as-btn {
1895
+ display: inline-flex;
1896
+ align-items: center;
1897
+ justify-content: center;
1898
+ min-height: 42px;
1899
+ padding: 8px 16px;
1900
+ border: 2px solid var(--as-border-strong);
1901
+ border-radius: 0;
1902
+ background: var(--as-surface);
1903
+ box-shadow: 3px 3px 0 var(--as-color-shadow);
1904
+ color: var(--as-text);
1905
+ font-family: var(--as-mono);
1906
+ font-size: 11px;
1907
+ font-weight: 800;
1908
+ letter-spacing: 0.045em;
1909
+ text-transform: uppercase;
1910
+ transition:
1911
+ background var(--as-dur) ease-out,
1912
+ border-color var(--as-dur) ease-out,
1913
+ box-shadow var(--as-dur) ease-out,
1914
+ transform var(--as-dur) ease-out;
1915
+ }
1916
+
1917
+ .as-btn:hover {
1918
+ border-color: var(--as-accent);
1919
+ background: var(--as-surface-2);
1920
+ color: var(--as-accent-text);
1921
+ transform: translate(-1px, -1px);
1922
+ }
1923
+
1924
+ .as-btn:active {
1925
+ box-shadow: 1px 1px 0 var(--as-color-shadow);
1926
+ transform: translate(2px, 2px);
1927
+ }
1928
+
1929
+ .as-btn[data-variant="primary"] {
1930
+ border-color: var(--as-accent);
1931
+ background: var(--as-accent);
1932
+ box-shadow: 3px 3px 0 var(--as-color-orange-700);
1933
+ color: var(--as-accent-fill-text);
1934
+ }
1935
+
1936
+ .as-btn[data-variant="primary"]:hover {
1937
+ border-color: var(--as-accent-hover);
1938
+ background: var(--as-accent-hover);
1939
+ color: var(--as-accent-fill-text);
1940
+ }
1941
+
1942
+ .as-btn[data-variant="danger"] {
1943
+ border-color: var(--as-danger);
1944
+ color: var(--as-danger);
1945
+ }
1946
+
1947
+ .as-btn[data-variant="danger"]:hover {
1948
+ border-color: var(--as-danger);
1949
+ background: var(--as-accent-soft);
1950
+ }
1951
+
1952
+ .as-btn[data-size="sm"] {
1953
+ min-height: 34px;
1954
+ padding: 5px 10px;
1955
+ font-size: 10px;
1956
+ }
1957
+
1958
+ .as-actions {
1959
+ margin-top: 22px;
1960
+ }
1961
+
1962
+ .as-seg {
1963
+ gap: 0;
1964
+ padding: 0;
1965
+ border: 2px solid var(--as-border-strong);
1966
+ border-radius: 0;
1967
+ background: var(--as-bg);
1968
+ }
1969
+
1970
+ .as-seg-item {
1971
+ min-height: 36px;
1972
+ border-right: 1px solid var(--as-border-strong);
1973
+ border-radius: 0;
1974
+ color: var(--as-text-muted);
1975
+ font-family: var(--as-mono);
1976
+ font-size: 10.5px;
1977
+ font-weight: 800;
1978
+ letter-spacing: 0.04em;
1979
+ text-transform: uppercase;
1980
+ }
1981
+
1982
+ .as-seg-item:last-child {
1983
+ border-right: 0;
1984
+ }
1985
+
1986
+ .as-seg-item:hover {
1987
+ background: var(--as-surface-2);
1988
+ color: var(--as-text);
1989
+ }
1990
+
1991
+ .as-seg-item[data-pressed] {
1992
+ background: var(--as-accent);
1993
+ color: var(--as-accent-fill-text);
1994
+ }
1995
+
1996
+ .as-tag {
1997
+ padding: 1px 5px;
1998
+ color: var(--as-accent-text);
1999
+ font-family: var(--as-mono);
2000
+ font-size: 9.5px;
2001
+ line-height: 1.6;
2002
+ }
2003
+
2004
+ .as-tag[data-variant="custom"] {
2005
+ border-color: var(--as-accent);
2006
+ color: var(--as-accent-text);
2007
+ }
2008
+
2009
+ .as-tag-warn {
2010
+ border-color: var(--as-accent);
2011
+ color: var(--as-accent);
2012
+ }
2013
+
2014
+ .as-remove,
2015
+ .as-banner-close,
2016
+ .as-combo-clear {
2017
+ min-width: 38px;
2018
+ min-height: 38px;
2019
+ border: 1px solid transparent;
2020
+ border-radius: 0;
2021
+ color: var(--as-text-muted);
2022
+ transition:
2023
+ color var(--as-dur) ease-out,
2024
+ background var(--as-dur) ease-out,
2025
+ border-color var(--as-dur) ease-out;
2026
+ }
2027
+
2028
+ .as-remove:hover,
2029
+ .as-banner-close:hover,
2030
+ .as-combo-clear:hover {
2031
+ border-color: var(--as-accent);
2032
+ background: var(--as-accent-soft);
2033
+ color: var(--as-accent);
2034
+ }
2035
+
2036
+ /* feedback, lists, and code */
2037
+ .as-notice,
2038
+ .as-error,
2039
+ .as-banner {
2040
+ border: 2px solid var(--as-border-strong);
2041
+ border-left: 6px solid var(--as-accent);
2042
+ border-radius: 0;
2043
+ box-shadow: var(--as-shadow);
2044
+ }
2045
+
2046
+ .as-notice {
2047
+ background: var(--as-accent-soft);
2048
+ color: var(--as-text);
2049
+ }
2050
+
2051
+ .as-error {
2052
+ border-color: var(--as-danger);
2053
+ border-left-color: var(--as-danger);
2054
+ background: var(--as-accent-soft);
2055
+ color: var(--as-danger);
2056
+ }
2057
+
2058
+ .as-banner {
2059
+ background: var(--as-surface-2);
2060
+ }
2061
+
2062
+ .as-ok {
2063
+ color: var(--as-ok);
2064
+ }
2065
+
2066
+ .as-warn,
2067
+ .as-file-status {
2068
+ color: var(--as-accent-text);
2069
+ }
2070
+
2071
+ .as-file-status[data-removed],
2072
+ .as-file-removed {
2073
+ color: var(--as-danger);
2074
+ }
2075
+
2076
+ .as-code {
2077
+ border: 2px solid var(--as-border-strong);
2078
+ border-radius: 0;
2079
+ background: var(--as-bg);
2080
+ color: var(--as-text-muted);
2081
+ }
2082
+
2083
+ .as-details > .as-summary,
2084
+ .as-collapse-trigger {
2085
+ min-height: 42px;
2086
+ color: var(--as-text);
2087
+ font-family: var(--as-mono);
2088
+ font-size: 11px;
2089
+ font-weight: 800;
2090
+ letter-spacing: 0.04em;
2091
+ text-transform: uppercase;
2092
+ }
2093
+
2094
+ .as-summary:hover,
2095
+ .as-collapse-trigger:hover {
2096
+ color: var(--as-accent-text);
2097
+ }
2098
+
2099
+ .as-count,
2100
+ .as-section-count {
2101
+ color: var(--as-accent-text);
2102
+ font-family: var(--as-mono);
2103
+ }
2104
+
2105
+ /* review rail and expanders */
2106
+ .as-review {
2107
+ gap: 28px;
2108
+ }
2109
+
2110
+ .as-rail {
2111
+ top: 20px;
2112
+ }
2113
+
2114
+ .as-rail-panel {
2115
+ border-color: var(--as-accent);
2116
+ padding: 17px;
2117
+ box-shadow: 6px 6px 0 var(--as-accent);
2118
+ }
2119
+
2120
+ .as-rail-grid {
2121
+ grid-template-columns: 76px minmax(0, 1fr);
2122
+ }
2123
+
2124
+ .as-rail-counts,
2125
+ .as-rail-previews,
2126
+ .as-rail-actions {
2127
+ border-top: 2px solid var(--as-border);
2128
+ }
2129
+
2130
+ .as-rail-deletions {
2131
+ color: var(--as-danger);
2132
+ }
2133
+
2134
+ .as-collapse-head {
2135
+ min-height: 48px;
2136
+ border-bottom: 2px solid var(--as-border-strong);
2137
+ }
2138
+
2139
+ .as-collapse-head-trigger {
2140
+ min-height: 48px;
2141
+ padding: 8px 10px;
2142
+ margin: 0 -10px;
2143
+ border-radius: 0;
2144
+ }
2145
+
2146
+ .as-collapse-head-trigger:hover,
2147
+ .as-collapse-head-trigger:focus-visible {
2148
+ background: var(--as-surface-2);
2149
+ }
2150
+
2151
+ .as-collapse-head-trigger .as-section-title {
2152
+ border-left-width: 4px;
2153
+ text-decoration: none;
2154
+ }
2155
+
2156
+ .as-collapse-head-trigger:hover .as-section-title,
2157
+ .as-collapse-head-trigger:focus-visible .as-section-title,
2158
+ .as-collapse-head-trigger:hover .as-chevron,
2159
+ .as-collapse-head-trigger:focus-visible .as-chevron {
2160
+ color: var(--as-accent-text);
2161
+ }
2162
+
2163
+ .as-chevron {
2164
+ color: var(--as-accent-text);
2165
+ }
2166
+
2167
+ .as-section-panel > .as-panel,
2168
+ .as-section-panel > .as-warn {
2169
+ margin-top: 12px;
2170
+ }
2171
+
2172
+ .as-tier-fields {
2173
+ gap: 14px;
2174
+ }
2175
+
2176
+ .as-tier-field {
2177
+ padding: 12px;
2178
+ border: 2px solid var(--as-border);
2179
+ background: var(--as-bg);
2180
+ }
2181
+
2182
+ .as-row-nested {
2183
+ padding-left: 44px;
2184
+ background: var(--as-bg);
2185
+ }
2186
+
2187
+ /* floating surfaces */
2188
+ .as-positioner {
2189
+ z-index: 1000;
2190
+ }
2191
+
2192
+ .as-popover,
2193
+ .as-tooltip {
2194
+ border: 2px solid var(--as-accent);
2195
+ border-radius: 0;
2196
+ background: var(--as-surface);
2197
+ box-shadow: 6px 6px 0 var(--as-color-shadow);
2198
+ }
2199
+
2200
+ .as-popover {
2201
+ color: var(--as-text);
2202
+ }
2203
+
2204
+ .as-tooltip {
2205
+ color: var(--as-text);
2206
+ font-family: var(--as-mono);
2207
+ }
2208
+
2209
+ .as-combo-popup,
2210
+ .as-add-popup {
2211
+ padding: 8px;
2212
+ }
2213
+
2214
+ .as-combo-group-label,
2215
+ .as-add-group-label {
2216
+ color: var(--as-accent-text);
2217
+ font-family: var(--as-mono);
2218
+ font-weight: 800;
2219
+ }
2220
+
2221
+ .as-combo-item,
2222
+ .as-add-item {
2223
+ border-radius: 0;
2224
+ }
2225
+
2226
+ .as-combo-item[data-highlighted],
2227
+ .as-add-item:hover {
2228
+ background: var(--as-accent-soft);
2229
+ color: var(--as-text);
2230
+ }
2231
+
2232
+ .as-combo-item[data-selected],
2233
+ .as-combo-indicator {
2234
+ color: var(--as-accent);
2235
+ }
2236
+
2237
+ .as-add-check {
2238
+ border: 2px solid var(--as-border-strong);
2239
+ border-radius: 0;
2240
+ }
2241
+
2242
+ .as-add-check[data-on="true"] {
2243
+ border-color: var(--as-accent);
2244
+ background: var(--as-accent);
2245
+ color: var(--as-accent-fill-text);
2246
+ }
2247
+
2248
+ .as-add-group + .as-add-group {
2249
+ border-top: 1px solid var(--as-border);
2250
+ }
2251
+
2252
+ .as-model-badge {
2253
+ border: 1px solid var(--as-accent);
2254
+ border-radius: 0;
2255
+ background: var(--as-accent-soft);
2256
+ color: var(--as-accent-text);
2257
+ font-family: var(--as-mono);
2258
+ }
2259
+
2260
+ .as-sheet-backdrop {
2261
+ background: rgb(17 16 14 / 0.78);
2262
+ }
2263
+
2264
+ .as-sheet {
2265
+ border-left: 3px solid var(--as-accent);
2266
+ background: var(--as-surface);
2267
+ box-shadow: -8px 0 0 var(--as-color-shadow);
2268
+ }
2269
+
2270
+ .as-sheet-title {
2271
+ font-family: var(--as-font-display);
2272
+ font-size: 1.1rem;
2273
+ font-weight: 900;
2274
+ letter-spacing: -0.035em;
2275
+ text-transform: uppercase;
2276
+ }
2277
+
2278
+ .as-preview-status {
2279
+ color: var(--as-accent-text);
2280
+ font-family: var(--as-mono);
2281
+ }
2282
+
2283
+ .as-stopped {
2284
+ max-width: 540px;
2285
+ margin: 56px auto;
2286
+ padding: 28px;
2287
+ border: 3px solid var(--as-accent);
2288
+ background: var(--as-surface);
2289
+ box-shadow: 7px 7px 0 var(--as-accent);
2290
+ }
2291
+
2292
+ @media (max-width: 720px) {
2293
+ .as-app {
2294
+ padding: 16px 16px 56px;
2295
+ }
2296
+
2297
+ .as-header {
2298
+ align-items: flex-start;
2299
+ margin-bottom: 24px;
2300
+ }
2301
+
2302
+ .as-project-switch {
2303
+ margin-left: auto;
2304
+ padding-left: 0;
2305
+ border-left: 0;
2306
+ }
2307
+
2308
+ .as-project-switch .as-label {
2309
+ display: none;
2310
+ }
2311
+
2312
+ .as-steps {
2313
+ width: 100%;
2314
+ margin-left: 0;
2315
+ }
2316
+
2317
+ .as-step {
2318
+ flex: 1;
2319
+ padding-inline: 4px;
2320
+ text-align: center;
2321
+ }
2322
+
2323
+ .as-grid > .as-card:first-child {
2324
+ grid-column: span 1;
2325
+ }
2326
+
2327
+ .as-card {
2328
+ min-height: 0;
2329
+ }
2330
+
2331
+ .as-panel {
2332
+ padding-inline: 14px;
2333
+ }
2334
+
2335
+ .as-row-nested {
2336
+ padding-left: 18px;
2337
+ }
2338
+ }