@appsforgood/next-supabase-kit 0.1.5 → 0.1.6
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/CHANGELOG.md +5 -0
- package/DOGFOOD.md +9 -0
- package/README.md +40 -4
- package/REPOSITORY_SETTINGS.md +7 -3
- package/SUPPLY_CHAIN.md +5 -5
- package/UPGRADE.md +2 -1
- package/antigravity/commands/accessibility-pass.toml +16 -0
- package/antigravity/commands/browser-qa.toml +18 -0
- package/antigravity/commands/distinctiveness-pass.toml +16 -0
- package/antigravity/commands/frontend.toml +5 -4
- package/antigravity/commands/layout-cleanup.toml +16 -0
- package/antigravity/commands/responsive-cleanup.toml +16 -0
- package/antigravity/commands/screenshot-critique.toml +16 -0
- package/antigravity/commands/ui-audit.toml +17 -0
- package/antigravity/commands/ui-polish.toml +17 -0
- package/antigravity/plugin.json +9 -0
- package/checklists/ui-acceptance-rubric.md +58 -0
- package/checklists/ui-detectors.md +75 -0
- package/dist/index.js +793 -458
- package/dist/index.js.map +1 -1
- package/dist/studio/office/assets/office.css +109 -28
- package/dist/studio/office/assets/office.js +14 -63
- package/dist/studio/wizard/assets/wizard.css +105 -26
- package/dist/studio/wizard/assets/wizard.js +22 -85
- package/examples/next-supabase-installed/.agent-kit/agent-roster.json +7 -3
- package/examples/next-supabase-installed/.agent-kit/manifest.json +11 -11
- package/examples/next-supabase-installed/audit-output.json +7 -2
- package/package.json +21 -5
- package/prompts/ui-command-index.md +124 -0
- package/rosters/next-supabase-default-council.json +37 -12
- package/runtime-skills/ui-improvement-harness/SKILL.md +12 -0
- package/skills/ui-improvement-harness.md +96 -0
- package/templates/next-supabase/AGENT_ROSTER.md +6 -3
- package/templates/next-supabase/ASSISTANT_ADAPTERS.md +3 -1
- package/templates/next-supabase/DECISIONS.md +14 -0
- package/templates/next-supabase/DESIGN.md +3 -0
- package/templates/next-supabase/DOCS.md +5 -1
- package/templates/next-supabase/QUALITY_GATES.md +4 -2
- package/templates/next-supabase/SKILLS.md +14 -0
- package/templates/next-supabase/SPEC.md +5 -1
- package/templates/next-supabase/STYLE_GUIDE.md +3 -1
- package/templates/next-supabase/TESTING.md +4 -0
|
@@ -13,13 +13,17 @@
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
@media (prefers-reduced-motion: reduce) {
|
|
16
|
-
*,
|
|
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
|
-
* {
|
|
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 {
|
|
169
|
-
|
|
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 {
|
|
212
|
-
|
|
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 {
|
|
306
|
-
|
|
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 {
|
|
322
|
-
|
|
323
|
-
|
|
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 {
|
|
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 {
|
|
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 {
|
|
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 {
|
|
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 {
|
|
495
|
+
.modal-wide {
|
|
496
|
+
max-width: 640px;
|
|
497
|
+
}
|
|
456
498
|
|
|
457
|
-
.modal-card h2 {
|
|
499
|
+
.modal-card h2 {
|
|
500
|
+
margin: 0 0 8px;
|
|
501
|
+
}
|
|
458
502
|
|
|
459
|
-
.why {
|
|
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 {
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
.depth-card
|
|
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 {
|
|
482
|
-
|
|
483
|
-
|
|
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 {
|
|
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 {
|
|
589
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
*,
|
|
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
|
-
* {
|
|
26
|
+
* {
|
|
27
|
+
box-sizing: border-box;
|
|
28
|
+
}
|
|
25
29
|
|
|
26
30
|
body {
|
|
27
31
|
margin: 0;
|
|
28
|
-
font-family:
|
|
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 {
|
|
208
|
-
|
|
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 {
|
|
312
|
-
|
|
313
|
-
|
|
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 {
|
|
330
|
-
|
|
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,
|
|
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,
|
|
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 {
|
|
431
|
+
textarea {
|
|
432
|
+
min-height: 120px;
|
|
433
|
+
resize: vertical;
|
|
434
|
+
}
|
|
393
435
|
|
|
394
|
-
.grid {
|
|
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 {
|
|
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 {
|
|
451
|
-
|
|
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 {
|
|
470
|
-
|
|
471
|
-
|
|
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 {
|
|
511
|
-
|
|
512
|
-
|
|
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 {
|
|
612
|
+
.hidden {
|
|
613
|
+
display: none !important;
|
|
614
|
+
}
|
|
536
615
|
|
|
537
616
|
.agent-roster {
|
|
538
617
|
list-style: none;
|