@appsforgood/next-supabase-kit 0.1.5 → 0.1.7

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 (47) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/DOGFOOD.md +40 -0
  3. package/README.md +246 -43
  4. package/REPOSITORY_SETTINGS.md +7 -3
  5. package/SUPPLY_CHAIN.md +5 -5
  6. package/UPGRADE.md +2 -1
  7. package/antigravity/commands/accessibility-pass.toml +16 -0
  8. package/antigravity/commands/browser-qa.toml +18 -0
  9. package/antigravity/commands/distinctiveness-pass.toml +16 -0
  10. package/antigravity/commands/frontend.toml +5 -4
  11. package/antigravity/commands/layout-cleanup.toml +16 -0
  12. package/antigravity/commands/responsive-cleanup.toml +16 -0
  13. package/antigravity/commands/review.toml +16 -0
  14. package/antigravity/commands/screenshot-critique.toml +16 -0
  15. package/antigravity/commands/spec.toml +17 -0
  16. package/antigravity/commands/test.toml +17 -0
  17. package/antigravity/commands/ui-audit.toml +17 -0
  18. package/antigravity/commands/ui-polish.toml +17 -0
  19. package/antigravity/plugin.json +13 -1
  20. package/assistant-adapters/antigravity.md +7 -0
  21. package/checklists/ui-acceptance-rubric.md +58 -0
  22. package/checklists/ui-detectors.md +75 -0
  23. package/dist/index.js +796 -458
  24. package/dist/index.js.map +1 -1
  25. package/dist/studio/office/assets/office.css +109 -28
  26. package/dist/studio/office/assets/office.js +14 -63
  27. package/dist/studio/wizard/assets/wizard.css +105 -26
  28. package/dist/studio/wizard/assets/wizard.js +22 -85
  29. package/examples/next-supabase-installed/.agent-kit/agent-roster.json +53 -14
  30. package/examples/next-supabase-installed/.agent-kit/manifest.json +12 -12
  31. package/examples/next-supabase-installed/audit-output.json +380 -375
  32. package/package.json +21 -5
  33. package/prompts/lifecycle-command-index.md +180 -0
  34. package/prompts/ui-command-index.md +124 -0
  35. package/rosters/next-supabase-default-council.json +53 -14
  36. package/runtime-skills/ui-improvement-harness/SKILL.md +12 -0
  37. package/skills/ui-improvement-harness.md +96 -0
  38. package/templates/next-supabase/AGENT_ROSTER.md +6 -3
  39. package/templates/next-supabase/ASSISTANT_ADAPTERS.md +3 -1
  40. package/templates/next-supabase/DECISIONS.md +14 -0
  41. package/templates/next-supabase/DESIGN.md +3 -0
  42. package/templates/next-supabase/DOCS.md +5 -1
  43. package/templates/next-supabase/QUALITY_GATES.md +4 -2
  44. package/templates/next-supabase/SKILLS.md +14 -0
  45. package/templates/next-supabase/SPEC.md +5 -1
  46. package/templates/next-supabase/STYLE_GUIDE.md +3 -1
  47. package/templates/next-supabase/TESTING.md +4 -0
@@ -13,13 +13,17 @@
13
13
  }
14
14
 
15
15
  @media (prefers-reduced-motion: reduce) {
16
- *, *::before, *::after {
16
+ *,
17
+ *::before,
18
+ *::after {
17
19
  animation-duration: 0.01ms !important;
18
20
  transition-duration: 0.01ms !important;
19
21
  }
20
22
  }
21
23
 
22
- * { box-sizing: border-box; }
24
+ * {
25
+ box-sizing: border-box;
26
+ }
23
27
 
24
28
  body {
25
29
  margin: 0;
@@ -165,8 +169,15 @@ body {
165
169
  }
166
170
 
167
171
  @media (max-width: 900px) {
168
- .office-main { grid-template-columns: 1fr; }
169
- .station-list { border-right: 0; border-bottom: 1px solid var(--line); max-height: 180px; overflow: auto; }
172
+ .office-main {
173
+ grid-template-columns: 1fr;
174
+ }
175
+ .station-list {
176
+ border-right: 0;
177
+ border-bottom: 1px solid var(--line);
178
+ max-height: 180px;
179
+ overflow: auto;
180
+ }
170
181
  }
171
182
 
172
183
  .station-list {
@@ -208,8 +219,12 @@ body {
208
219
  cursor: pointer;
209
220
  }
210
221
 
211
- .station-list button:hover { background: rgba(255, 255, 255, 0.1); }
212
- .station-list button.done { border-color: rgba(74, 222, 128, 0.4); }
222
+ .station-list button:hover {
223
+ background: rgba(255, 255, 255, 0.1);
224
+ }
225
+ .station-list button.done {
226
+ border-color: rgba(74, 222, 128, 0.4);
227
+ }
213
228
  .station-list button .chip {
214
229
  float: right;
215
230
  font-size: 10px;
@@ -302,8 +317,14 @@ body {
302
317
  max-width: 90vw;
303
318
  }
304
319
 
305
- .status.ok { background: #dcfce7; color: #166534; }
306
- .status.error { background: #fee2e2; color: #991b1b; }
320
+ .status.ok {
321
+ background: #dcfce7;
322
+ color: #166534;
323
+ }
324
+ .status.error {
325
+ background: #fee2e2;
326
+ color: #991b1b;
327
+ }
307
328
 
308
329
  .btn {
309
330
  display: inline-flex;
@@ -318,9 +339,18 @@ body {
318
339
  text-decoration: none;
319
340
  }
320
341
 
321
- .btn.primary { background: var(--accent); color: #fff; }
322
- .btn.secondary { background: #334155; color: #f8fafc; }
323
- .btn:disabled { opacity: 0.5; cursor: not-allowed; }
342
+ .btn.primary {
343
+ background: var(--accent);
344
+ color: #fff;
345
+ }
346
+ .btn.secondary {
347
+ background: #334155;
348
+ color: #f8fafc;
349
+ }
350
+ .btn:disabled {
351
+ opacity: 0.5;
352
+ cursor: not-allowed;
353
+ }
324
354
 
325
355
  .panel {
326
356
  position: fixed;
@@ -335,7 +365,9 @@ body {
335
365
  flex-direction: column;
336
366
  }
337
367
 
338
- .panel.hidden { display: none; }
368
+ .panel.hidden {
369
+ display: none;
370
+ }
339
371
 
340
372
  .panel-head {
341
373
  display: flex;
@@ -345,7 +377,10 @@ body {
345
377
  border-bottom: 1px solid var(--line);
346
378
  }
347
379
 
348
- .panel-head h2 { margin: 0; font-size: 18px; }
380
+ .panel-head h2 {
381
+ margin: 0;
382
+ font-size: 18px;
383
+ }
349
384
 
350
385
  .panel-close {
351
386
  background: none;
@@ -395,7 +430,10 @@ body {
395
430
  padding: 10px;
396
431
  }
397
432
 
398
- .panel textarea { min-height: 90px; resize: vertical; }
433
+ .panel textarea {
434
+ min-height: 90px;
435
+ resize: vertical;
436
+ }
399
437
 
400
438
  .panel .agent-role {
401
439
  font-size: 13px;
@@ -441,7 +479,9 @@ body {
441
479
  }
442
480
 
443
481
  .modal[hidden],
444
- .modal.hidden { display: none; }
482
+ .modal.hidden {
483
+ display: none;
484
+ }
445
485
 
446
486
  .modal-card {
447
487
  background: var(--panel);
@@ -452,11 +492,19 @@ body {
452
492
  box-shadow: 0 20px 50px rgba(0, 0, 0, 0.35);
453
493
  }
454
494
 
455
- .modal-wide { max-width: 640px; }
495
+ .modal-wide {
496
+ max-width: 640px;
497
+ }
456
498
 
457
- .modal-card h2 { margin: 0 0 8px; }
499
+ .modal-card h2 {
500
+ margin: 0 0 8px;
501
+ }
458
502
 
459
- .why { color: var(--muted); font-size: 14px; margin: 0 0 16px; }
503
+ .why {
504
+ color: var(--muted);
505
+ font-size: 14px;
506
+ margin: 0 0 16px;
507
+ }
460
508
 
461
509
  .depth-grid {
462
510
  display: grid;
@@ -473,14 +521,39 @@ body {
473
521
  font: inherit;
474
522
  }
475
523
 
476
- .depth-card:hover { border-color: var(--accent); }
477
- .depth-card.selected { border-color: var(--accent); background: var(--accent-soft); }
478
- .depth-card strong { display: block; margin-bottom: 4px; }
479
- .depth-card p { margin: 0; font-size: 13px; color: var(--muted); }
524
+ .depth-card:hover {
525
+ border-color: var(--accent);
526
+ }
527
+ .depth-card.selected {
528
+ border-color: var(--accent);
529
+ background: var(--accent-soft);
530
+ }
531
+ .depth-card strong {
532
+ display: block;
533
+ margin-bottom: 4px;
534
+ }
535
+ .depth-card p {
536
+ margin: 0;
537
+ font-size: 13px;
538
+ color: var(--muted);
539
+ }
480
540
 
481
- .review { margin: 0; display: grid; gap: 12px; }
482
- .review dt { font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); font-weight: 700; }
483
- .review dd { margin: 4px 0 0; white-space: pre-wrap; }
541
+ .review {
542
+ margin: 0;
543
+ display: grid;
544
+ gap: 12px;
545
+ }
546
+ .review dt {
547
+ font-size: 11px;
548
+ text-transform: uppercase;
549
+ letter-spacing: 0.06em;
550
+ color: var(--muted);
551
+ font-weight: 700;
552
+ }
553
+ .review dd {
554
+ margin: 4px 0 0;
555
+ white-space: pre-wrap;
556
+ }
484
557
 
485
558
  .modal-actions {
486
559
  display: flex;
@@ -489,7 +562,9 @@ body {
489
562
  margin-top: 20px;
490
563
  }
491
564
 
492
- .hidden { display: none !important; }
565
+ .hidden {
566
+ display: none !important;
567
+ }
493
568
 
494
569
  code {
495
570
  font-family: ui-monospace, Menlo, Consolas, monospace;
@@ -585,8 +660,14 @@ code {
585
660
  }
586
661
 
587
662
  @media (max-width: 900px) {
588
- .office-main.studio-layout { grid-template-columns: 1fr; }
589
- .transcript-panel { max-height: 200px; border-left: 0; border-top: 1px solid rgba(255, 255, 255, 0.08); }
663
+ .office-main.studio-layout {
664
+ grid-template-columns: 1fr;
665
+ }
666
+ .transcript-panel {
667
+ max-height: 200px;
668
+ border-left: 0;
669
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
670
+ }
590
671
  }
591
672
 
592
673
  .studio-main .transcript-list {
@@ -268,7 +268,7 @@
268
268
  (ev) =>
269
269
  '<li><span class="tx-time">' +
270
270
  escapeHtml((ev.createdAt || "").slice(11, 19)) +
271
- '</span> <strong>' +
271
+ "</span> <strong>" +
272
272
  escapeHtml(ev.agentId || ev.fromAgentId || "session") +
273
273
  "</strong> " +
274
274
  escapeHtml(eventLabel(ev)) +
@@ -324,15 +324,7 @@
324
324
  .map((b) => {
325
325
  const left = offsetLeft + b.x * scaleX;
326
326
  const top = offsetTop + b.y * scaleY - 28;
327
- return (
328
- '<span class="speech-bubble" style="left:' +
329
- left +
330
- "px;top:" +
331
- top +
332
- 'px">' +
333
- escapeHtml(b.text) +
334
- "</span>"
335
- );
327
+ return '<span class="speech-bubble" style="left:' + left + "px;top:" + top + 'px">' + escapeHtml(b.text) + "</span>";
336
328
  })
337
329
  .join("");
338
330
  }
@@ -349,10 +341,7 @@
349
341
  const target = level.targetLevel ?? 5;
350
342
  if (els.levelPill) {
351
343
  els.levelPill.textContent = "L" + current + " → L" + target;
352
- els.levelPill.setAttribute(
353
- "aria-label",
354
- "Agentic engineering level " + current + ", target level " + target
355
- );
344
+ els.levelPill.setAttribute("aria-label", "Agentic engineering level " + current + ", target level " + target);
356
345
  }
357
346
  if (els.icebergStrip) {
358
347
  els.icebergStrip.innerHTML = [3, 4, 5, 6, 7, 8]
@@ -373,16 +362,7 @@
373
362
  els.climbPanel.hidden = false;
374
363
  els.climbList.innerHTML = steps
375
364
  .slice(0, 3)
376
- .map(
377
- (step) =>
378
- "<li><strong>L" +
379
- step.level +
380
- "</strong> " +
381
- escapeHtml(step.label) +
382
- " — " +
383
- escapeHtml(step.remediation) +
384
- "</li>"
385
- )
365
+ .map((step) => "<li><strong>L" + step.level + "</strong> " + escapeHtml(step.label) + " — " + escapeHtml(step.remediation) + "</li>")
386
366
  .join("");
387
367
  }
388
368
  }
@@ -466,17 +446,7 @@
466
446
  const cx = offsetLeft + (station.x + station.w / 2) * TILE * scaleX;
467
447
  const cy = offsetTop + station.y * TILE * scaleY - 4;
468
448
  const st = stationStatus(station);
469
- return (
470
- '<span class="nameplate ' +
471
- st +
472
- '" style="left:' +
473
- cx +
474
- "px;top:" +
475
- cy +
476
- 'px">' +
477
- escapeHtml(station.label) +
478
- "</span>"
479
- );
449
+ return '<span class="nameplate ' + st + '" style="left:' + cx + "px;top:" + cy + 'px">' + escapeHtml(station.label) + "</span>";
480
450
  })
481
451
  .join("");
482
452
  }
@@ -491,13 +461,7 @@
491
461
  ]
492
462
  .map(
493
463
  ([id, title, desc]) =>
494
- '<button type="button" class="depth-card" data-depth="' +
495
- id +
496
- '"><strong>' +
497
- escapeHtml(title) +
498
- "</strong><p>" +
499
- escapeHtml(desc) +
500
- "</p></button>"
464
+ '<button type="button" class="depth-card" data-depth="' + id + '"><strong>' + escapeHtml(title) + "</strong><p>" + escapeHtml(desc) + "</p></button>"
501
465
  )
502
466
  .join("");
503
467
  els.depthGrid.querySelectorAll("[data-depth]").forEach((btn) => {
@@ -828,9 +792,9 @@
828
792
  const req = optional ? "" : " required";
829
793
  if (type === "textarea") {
830
794
  return (
831
- "<label for=\"p-" +
795
+ '<label for="p-' +
832
796
  name +
833
- "\">" +
797
+ '">' +
834
798
  escapeHtml(label) +
835
799
  (hint ? "<span>" + escapeHtml(hint) + "</span>" : "") +
836
800
  '</label><textarea id="p-' +
@@ -847,9 +811,9 @@
847
811
  );
848
812
  }
849
813
  return (
850
- "<label for=\"p-" +
814
+ '<label for="p-' +
851
815
  name +
852
- "\">" +
816
+ '">' +
853
817
  escapeHtml(label) +
854
818
  (hint ? "<span>" + escapeHtml(hint) + "</span>" : "") +
855
819
  '</label><input id="p-' +
@@ -877,7 +841,7 @@
877
841
  field +
878
842
  '">Project briefing<span>Optional — what is unique about this project for ' +
879
843
  escapeHtml(station.label) +
880
- "?</span></label><textarea id=\"p-" +
844
+ '?</span></label><textarea id="p-' +
881
845
  field +
882
846
  '" name="' +
883
847
  field +
@@ -890,16 +854,7 @@
890
854
  const maps = {
891
855
  ide: () => {
892
856
  const opts = (boot.ideSurfaces || [])
893
- .map(
894
- (s) =>
895
- '<option value="' +
896
- s.id +
897
- '"' +
898
- (state.form.ideSurface === s.id ? " selected" : "") +
899
- ">" +
900
- escapeHtml(s.label) +
901
- "</option>"
902
- )
857
+ .map((s) => '<option value="' + s.id + '"' + (state.form.ideSurface === s.id ? " selected" : "") + ">" + escapeHtml(s.label) + "</option>")
903
858
  .join("");
904
859
  return (
905
860
  '<label for="p-ideSurface">Primary AI coding tool</label><select id="p-ideSurface" name="ideSurface" required><option value="">Choose…</option>' +
@@ -918,14 +873,10 @@
918
873
  inputField("primaryWorkflows", "Top workflows", "One per line.", "textarea", "Workflow one", false),
919
874
  access: () =>
920
875
  '<label for="p-tenantModel">Who uses the system?</label><select id="p-tenantModel" name="tenantModel">' +
921
- (boot.tenantModels || [])
922
- .map((c) => '<option value="' + c + '"' + (state.form.tenantModel === c ? " selected" : "") + ">" + c + "</option>")
923
- .join("") +
876
+ (boot.tenantModels || []).map((c) => '<option value="' + c + '"' + (state.form.tenantModel === c ? " selected" : "") + ">" + c + "</option>").join("") +
924
877
  "</select>" +
925
878
  inputField("owner", "Project owner", "Optional.", "text", "", true) +
926
- (boot.hasSupabase
927
- ? '<div class="hint-box">Supabase detected.<button type="button" id="apply-supabase-auth">Insert auth baseline</button></div>'
928
- : "") +
879
+ (boot.hasSupabase ? '<div class="hint-box">Supabase detected.<button type="button" id="apply-supabase-auth">Insert auth baseline</button></div>' : "") +
929
880
  inputField("authModel", "Authentication model", "Rules agents must preserve.", "textarea", "Describe auth boundaries.", false),
930
881
  ui: () =>
931
882
  inputField("uiPreferred", "UI should feel like…", "", "textarea", "Clear, readable, task-first.", false) +
@@ -15,17 +15,28 @@
15
15
  }
16
16
 
17
17
  @media (prefers-reduced-motion: reduce) {
18
- *, *::before, *::after {
18
+ *,
19
+ *::before,
20
+ *::after {
19
21
  animation-duration: 0.01ms !important;
20
22
  transition-duration: 0.01ms !important;
21
23
  }
22
24
  }
23
25
 
24
- * { box-sizing: border-box; }
26
+ * {
27
+ box-sizing: border-box;
28
+ }
25
29
 
26
30
  body {
27
31
  margin: 0;
28
- font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
32
+ font-family:
33
+ Inter,
34
+ ui-sans-serif,
35
+ system-ui,
36
+ -apple-system,
37
+ BlinkMacSystemFont,
38
+ "Segoe UI",
39
+ sans-serif;
29
40
  color: var(--ink);
30
41
  background: var(--bg);
31
42
  line-height: 1.55;
@@ -204,8 +215,13 @@ body {
204
215
  }
205
216
 
206
217
  @media (max-width: 860px) {
207
- .shell { grid-template-columns: 1fr; }
208
- .rail { border-right: 0; border-bottom: 1px solid var(--line); }
218
+ .shell {
219
+ grid-template-columns: 1fr;
220
+ }
221
+ .rail {
222
+ border-right: 0;
223
+ border-bottom: 1px solid var(--line);
224
+ }
209
225
  }
210
226
 
211
227
  .rail {
@@ -240,7 +256,7 @@ body {
240
256
  width: 56px;
241
257
  height: 56px;
242
258
  border-radius: 50%;
243
- background: conic-gradient(var(--accent) calc(var(--pct) * 1%), rgba(255,255,255,0.12) 0);
259
+ background: conic-gradient(var(--accent) calc(var(--pct) * 1%), rgba(255, 255, 255, 0.12) 0);
244
260
  display: grid;
245
261
  place-items: center;
246
262
  position: relative;
@@ -305,12 +321,21 @@ body {
305
321
  letter-spacing: 0.04em;
306
322
  padding: 2px 7px;
307
323
  border-radius: 999px;
308
- border: 1px solid rgba(255,255,255,0.15);
324
+ border: 1px solid rgba(255, 255, 255, 0.15);
309
325
  }
310
326
 
311
- .chip.done { background: rgba(22, 101, 52, 0.35); color: #bbf7d0; }
312
- .chip.progress { background: rgba(180, 83, 9, 0.35); color: #fde68a; }
313
- .chip.optional { background: rgba(100, 116, 139, 0.35); color: #e2e8f0; }
327
+ .chip.done {
328
+ background: rgba(22, 101, 52, 0.35);
329
+ color: #bbf7d0;
330
+ }
331
+ .chip.progress {
332
+ background: rgba(180, 83, 9, 0.35);
333
+ color: #fde68a;
334
+ }
335
+ .chip.optional {
336
+ background: rgba(100, 116, 139, 0.35);
337
+ color: #e2e8f0;
338
+ }
314
339
 
315
340
  .main {
316
341
  padding: clamp(20px, 4vw, 40px);
@@ -326,8 +351,18 @@ body {
326
351
  font-size: 14px;
327
352
  }
328
353
 
329
- .status.ok { display: block; background: #ecfdf5; border: 1px solid #86efac; color: var(--ok); }
330
- .status.error { display: block; background: #fef2f2; border: 1px solid #fca5a5; color: #991b1b; }
354
+ .status.ok {
355
+ display: block;
356
+ background: #ecfdf5;
357
+ border: 1px solid #86efac;
358
+ color: var(--ok);
359
+ }
360
+ .status.error {
361
+ display: block;
362
+ background: #fef2f2;
363
+ border: 1px solid #fca5a5;
364
+ color: #991b1b;
365
+ }
331
366
 
332
367
  .card {
333
368
  background: var(--panel);
@@ -374,7 +409,9 @@ label span {
374
409
  margin-top: 3px;
375
410
  }
376
411
 
377
- input, select, textarea {
412
+ input,
413
+ select,
414
+ textarea {
378
415
  width: 100%;
379
416
  border: 1px solid var(--line);
380
417
  border-radius: 10px;
@@ -384,14 +421,23 @@ input, select, textarea {
384
421
  background: #fff;
385
422
  }
386
423
 
387
- input:focus, select:focus, textarea:focus {
424
+ input:focus,
425
+ select:focus,
426
+ textarea:focus {
388
427
  outline: 2px solid var(--accent-soft);
389
428
  border-color: var(--accent);
390
429
  }
391
430
 
392
- textarea { min-height: 120px; resize: vertical; }
431
+ textarea {
432
+ min-height: 120px;
433
+ resize: vertical;
434
+ }
393
435
 
394
- .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; }
436
+ .grid {
437
+ display: grid;
438
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
439
+ gap: 12px;
440
+ }
395
441
 
396
442
  .hint {
397
443
  background: #f0fdfa;
@@ -422,7 +468,9 @@ textarea { min-height: 120px; resize: vertical; }
422
468
  display: none;
423
469
  }
424
470
 
425
- .field-error.show { display: block; }
471
+ .field-error.show {
472
+ display: block;
473
+ }
426
474
 
427
475
  .depth-grid {
428
476
  display: grid;
@@ -447,8 +495,15 @@ textarea { min-height: 120px; resize: vertical; }
447
495
  background: #f0fdfa;
448
496
  }
449
497
 
450
- .depth-card strong { display: block; margin-bottom: 6px; }
451
- .depth-card p { margin: 0; font-size: 13px; color: var(--muted); }
498
+ .depth-card strong {
499
+ display: block;
500
+ margin-bottom: 6px;
501
+ }
502
+ .depth-card p {
503
+ margin: 0;
504
+ font-size: 13px;
505
+ color: var(--muted);
506
+ }
452
507
 
453
508
  .stack-pills {
454
509
  display: flex;
@@ -466,9 +521,22 @@ textarea { min-height: 120px; resize: vertical; }
466
521
  border: 1px solid var(--line);
467
522
  }
468
523
 
469
- .review dl { margin: 0; display: grid; gap: 14px; }
470
- .review dt { font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); font-weight: 700; }
471
- .review dd { margin: 4px 0 0; white-space: pre-wrap; }
524
+ .review dl {
525
+ margin: 0;
526
+ display: grid;
527
+ gap: 14px;
528
+ }
529
+ .review dt {
530
+ font-size: 11px;
531
+ text-transform: uppercase;
532
+ letter-spacing: 0.06em;
533
+ color: var(--muted);
534
+ font-weight: 700;
535
+ }
536
+ .review dd {
537
+ margin: 4px 0 0;
538
+ white-space: pre-wrap;
539
+ }
472
540
 
473
541
  .preview {
474
542
  background: #f8fafc;
@@ -507,9 +575,18 @@ button.btn {
507
575
  cursor: pointer;
508
576
  }
509
577
 
510
- button.btn.primary { background: var(--accent); color: #fff; }
511
- button.btn.secondary { background: #edf2f7; color: var(--ink); }
512
- button.btn:disabled { opacity: 0.5; cursor: not-allowed; }
578
+ button.btn.primary {
579
+ background: var(--accent);
580
+ color: #fff;
581
+ }
582
+ button.btn.secondary {
583
+ background: #edf2f7;
584
+ color: var(--ink);
585
+ }
586
+ button.btn:disabled {
587
+ opacity: 0.5;
588
+ cursor: not-allowed;
589
+ }
513
590
 
514
591
  .complete-icon {
515
592
  font-size: 48px;
@@ -532,7 +609,9 @@ code {
532
609
  border-radius: 4px;
533
610
  }
534
611
 
535
- .hidden { display: none !important; }
612
+ .hidden {
613
+ display: none !important;
614
+ }
536
615
 
537
616
  .agent-roster {
538
617
  list-style: none;