@kontourai/survey 0.4.6 → 0.4.8

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.
@@ -0,0 +1,1341 @@
1
+ /* Survey Review Workbench — "forensic review console" aesthetic.
2
+ Reviewers judge whether a proposed value should overwrite a verified one;
3
+ the visual language is built to highlight the value diff, the decision, the
4
+ confidence, and the provenance — in that order. */
5
+
6
+ @import url("https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,600;9..144,700;9..144,900&family=Hanken+Grotesk:wght@400;500;600;700;800&family=IBM+Plex+Mono:wght@400;500;600&display=swap");
7
+
8
+ :root {
9
+ color-scheme: dark;
10
+
11
+ /* Local aliases preserve the existing workbench selectors while the values
12
+ come from the shared Console Kit token contract. */
13
+ --ink-1000: var(--k-bg);
14
+ --ink-900: #0a0e13;
15
+ --ink-850: #0d1219;
16
+ --ink-800: var(--k-panel);
17
+ --ink-750: var(--k-panel-raised);
18
+ --ink-700: #1d2937;
19
+ --paper: var(--k-text);
20
+ --paper-dim: var(--k-text-muted);
21
+ --paper-faint: var(--k-text-faint);
22
+ --line: var(--k-line);
23
+ --line-strong: var(--k-line-strong);
24
+ --accent: var(--k-brand);
25
+ --accent-deep: color-mix(in srgb, var(--k-brand) 34%, var(--k-bg));
26
+ --proposed: var(--k-active);
27
+ --verify: var(--k-positive);
28
+ --hold: var(--k-caution);
29
+ --reject: var(--k-negative);
30
+ --radius: var(--k-radius-md);
31
+ --radius-sm: var(--k-radius-sm);
32
+
33
+ font-family: var(--k-font-ui);
34
+ background: var(--ink-1000);
35
+ color: var(--paper);
36
+ }
37
+
38
+ * {
39
+ box-sizing: border-box;
40
+ }
41
+
42
+ body {
43
+ margin: 0;
44
+ min-width: 320px;
45
+ position: relative;
46
+ background:
47
+ radial-gradient(1100px 620px at 12% -8%, rgba(92, 224, 198, 0.12), transparent 60%),
48
+ radial-gradient(900px 560px at 100% 0%, rgba(122, 162, 255, 0.12), transparent 55%),
49
+ radial-gradient(800px 800px at 88% 110%, rgba(243, 177, 75, 0.07), transparent 60%),
50
+ linear-gradient(180deg, var(--ink-1000), var(--ink-900) 55%, var(--ink-1000));
51
+ background-attachment: fixed;
52
+ }
53
+
54
+ /* Grain + faint engineering grid for control-room atmosphere. */
55
+ body::before {
56
+ content: "";
57
+ position: fixed;
58
+ inset: 0;
59
+ z-index: 0;
60
+ pointer-events: none;
61
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.55'/%3E%3C/svg%3E");
62
+ opacity: 0.04;
63
+ mix-blend-mode: screen;
64
+ }
65
+
66
+ button,
67
+ textarea {
68
+ font: inherit;
69
+ }
70
+
71
+ h1,
72
+ h2,
73
+ h3,
74
+ p {
75
+ margin: 0;
76
+ }
77
+
78
+ .workbench {
79
+ position: relative;
80
+ z-index: 1;
81
+ min-height: 100vh;
82
+ padding: 30px 26px 60px;
83
+ }
84
+
85
+ .workbench-shell {
86
+ display: grid;
87
+ grid-template-rows: auto minmax(0, 1fr);
88
+ gap: 22px;
89
+ max-width: 1280px;
90
+ margin: 0 auto;
91
+ }
92
+
93
+ /* ---- Shared label vocabulary ------------------------------------------ */
94
+
95
+ .eyebrow,
96
+ .field-label,
97
+ .state-label {
98
+ color: var(--accent);
99
+ font-family: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
100
+ font-size: 10.5px;
101
+ font-weight: 600;
102
+ letter-spacing: 0.18em;
103
+ text-transform: uppercase;
104
+ }
105
+
106
+ .field-label {
107
+ color: var(--paper-faint);
108
+ letter-spacing: 0.14em;
109
+ }
110
+
111
+ .field-value,
112
+ .meta-value {
113
+ overflow-wrap: anywhere;
114
+ word-break: break-word;
115
+ line-height: 1.4;
116
+ color: var(--paper);
117
+ }
118
+
119
+ /* ---- Top command bar -------------------------------------------------- */
120
+
121
+ .topbar {
122
+ display: grid;
123
+ grid-template-columns: minmax(0, 1fr) minmax(0, 520px);
124
+ gap: 26px;
125
+ align-items: center;
126
+ padding: 22px 26px;
127
+ border: 1px solid var(--line-strong);
128
+ border-radius: var(--radius);
129
+ background:
130
+ linear-gradient(135deg, rgba(92, 224, 198, 0.08), transparent 42%),
131
+ linear-gradient(180deg, var(--ink-800), var(--ink-850));
132
+ box-shadow: 0 24px 60px -34px rgba(0, 0, 0, 0.9), inset 0 1px 0 rgba(255, 255, 255, 0.03);
133
+ animation: rise 0.6s cubic-bezier(0.22, 1, 0.36, 1) both;
134
+ }
135
+
136
+ .topbar > div {
137
+ min-width: 0;
138
+ }
139
+
140
+ .topbar .eyebrow::before {
141
+ content: "● ";
142
+ color: var(--verify);
143
+ }
144
+
145
+ h1 {
146
+ margin-top: 8px;
147
+ font-family: "Fraunces", Georgia, "Times New Roman", serif;
148
+ font-optical-sizing: auto;
149
+ font-weight: 600;
150
+ font-size: clamp(26px, 3.4vw, 38px);
151
+ line-height: 1.04;
152
+ letter-spacing: -0.01em;
153
+ overflow-wrap: anywhere;
154
+ color: var(--paper);
155
+ }
156
+
157
+ .review-question {
158
+ max-width: 720px;
159
+ margin-top: 10px;
160
+ color: var(--paper-dim);
161
+ font-size: 15px;
162
+ line-height: 1.45;
163
+ }
164
+
165
+ .review-question strong {
166
+ color: var(--paper);
167
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
168
+ font-size: 0.95em;
169
+ }
170
+
171
+ .meta-grid {
172
+ display: grid;
173
+ grid-template-columns: repeat(4, minmax(110px, 1fr));
174
+ gap: 10px;
175
+ width: 100%;
176
+ }
177
+
178
+ .meta-item,
179
+ .field {
180
+ min-width: 0;
181
+ }
182
+
183
+ .meta-item {
184
+ padding: 11px 12px;
185
+ border: 1px solid var(--line);
186
+ border-radius: var(--radius-sm);
187
+ background: rgba(8, 12, 18, 0.55);
188
+ }
189
+
190
+ .meta-value {
191
+ margin-top: 6px;
192
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
193
+ font-size: 12px;
194
+ font-weight: 500;
195
+ line-height: 1.45;
196
+ color: var(--paper);
197
+ }
198
+
199
+ /* Status reads as a signal in the command bar. */
200
+ .meta-item:nth-child(2) .meta-value {
201
+ color: var(--accent);
202
+ font-weight: 600;
203
+ }
204
+
205
+ /* ---- Layout scaffold -------------------------------------------------- */
206
+
207
+ .queue-layout {
208
+ display: grid;
209
+ grid-template-columns: 300px minmax(0, 1fr);
210
+ gap: 22px;
211
+ align-items: start;
212
+ }
213
+
214
+ .queue-panel {
215
+ display: grid;
216
+ gap: 18px;
217
+ position: sticky;
218
+ top: 18px;
219
+ }
220
+
221
+ .active-review-strip {
222
+ display: none;
223
+ }
224
+
225
+ .queue-list,
226
+ .session-summary,
227
+ .session-audit {
228
+ border: 1px solid var(--line);
229
+ border-radius: var(--radius);
230
+ background: linear-gradient(180deg, var(--ink-800), var(--ink-850));
231
+ padding: 18px;
232
+ box-shadow: 0 22px 50px -38px rgba(0, 0, 0, 0.9);
233
+ animation: rise 0.6s cubic-bezier(0.22, 1, 0.36, 1) both;
234
+ animation-delay: 0.05s;
235
+ }
236
+
237
+ .queue-head {
238
+ display: grid;
239
+ grid-template-columns: minmax(0, 1fr) auto;
240
+ gap: 8px;
241
+ align-items: center;
242
+ margin-bottom: 14px;
243
+ }
244
+
245
+ .queue-head h2,
246
+ .session-summary h2,
247
+ .session-audit h2 {
248
+ font-family: "Fraunces", Georgia, serif;
249
+ font-weight: 600;
250
+ font-size: 18px;
251
+ line-height: 1.1;
252
+ letter-spacing: -0.01em;
253
+ }
254
+
255
+ /* ---- Queue rows: status carried on data-queue-status ------------------ */
256
+
257
+ .queue-row {
258
+ display: grid;
259
+ grid-template-columns: minmax(0, 1fr) auto;
260
+ gap: 10px;
261
+ align-items: center;
262
+ width: 100%;
263
+ min-height: 60px;
264
+ border: 1px solid var(--line);
265
+ border-left: 3px solid var(--paper-faint);
266
+ border-radius: var(--radius-sm);
267
+ margin-top: 9px;
268
+ padding: 11px 12px;
269
+ background: rgba(8, 12, 18, 0.5);
270
+ color: var(--paper);
271
+ cursor: pointer;
272
+ text-align: left;
273
+ transition: transform 0.16s ease, border-color 0.16s ease, background 0.16s ease;
274
+ }
275
+
276
+ .queue-row:hover {
277
+ transform: translateX(2px);
278
+ border-color: var(--line-strong);
279
+ background: rgba(16, 24, 34, 0.8);
280
+ }
281
+
282
+ .queue-row.is-active {
283
+ border-left-width: 3px;
284
+ background: linear-gradient(90deg, rgba(92, 224, 198, 0.12), rgba(8, 12, 18, 0.5) 60%);
285
+ box-shadow: inset 0 0 0 1px var(--line-strong);
286
+ }
287
+
288
+ .queue-row[data-queue-status="resolved"] { border-left-color: var(--verify); }
289
+ .queue-row[data-queue-status="rejected"] { border-left-color: var(--reject); }
290
+ .queue-row[data-queue-status="escalated"] { border-left-color: var(--hold); }
291
+ .queue-row[data-queue-status="in-review"] { border-left-color: var(--accent); }
292
+ .queue-row[data-queue-status="pending"] { border-left-color: var(--paper-faint); }
293
+
294
+ .queue-row-main {
295
+ display: grid;
296
+ gap: 4px;
297
+ min-width: 0;
298
+ }
299
+
300
+ .queue-row-title,
301
+ .queue-row-target {
302
+ overflow-wrap: anywhere;
303
+ word-break: break-word;
304
+ }
305
+
306
+ .queue-row-title {
307
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
308
+ font-size: 12.5px;
309
+ font-weight: 600;
310
+ letter-spacing: -0.01em;
311
+ color: var(--paper);
312
+ }
313
+
314
+ .queue-row-target {
315
+ color: var(--paper-dim);
316
+ font-size: 12px;
317
+ }
318
+
319
+ /* ---- Status pills ----------------------------------------------------- */
320
+
321
+ .state-label {
322
+ min-width: 78px;
323
+ padding: 4px 9px;
324
+ border: 1px solid var(--line-strong);
325
+ border-radius: 999px;
326
+ text-align: center;
327
+ color: var(--paper-dim);
328
+ background: rgba(8, 12, 18, 0.6);
329
+ letter-spacing: 0.08em;
330
+ font-size: 9.5px;
331
+ }
332
+
333
+ .queue-row[data-queue-status="resolved"] .state-label { color: var(--verify); border-color: rgba(52, 211, 153, 0.4); }
334
+ .queue-row[data-queue-status="rejected"] .state-label { color: var(--reject); border-color: rgba(255, 111, 111, 0.4); }
335
+ .queue-row[data-queue-status="escalated"] .state-label { color: var(--hold); border-color: rgba(243, 177, 75, 0.4); }
336
+ .queue-row[data-queue-status="in-review"] .state-label { color: var(--accent); border-color: rgba(92, 224, 198, 0.4); }
337
+
338
+ .next-button {
339
+ min-height: 34px;
340
+ padding: 0 14px;
341
+ border: 1px solid var(--line-strong);
342
+ border-radius: 999px;
343
+ background: rgba(92, 224, 198, 0.08);
344
+ color: var(--accent);
345
+ cursor: pointer;
346
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
347
+ font-size: 11px;
348
+ font-weight: 600;
349
+ letter-spacing: 0.06em;
350
+ transition: background 0.16s ease, border-color 0.16s ease;
351
+ }
352
+
353
+ .next-button:hover {
354
+ background: rgba(92, 224, 198, 0.16);
355
+ border-color: var(--accent);
356
+ }
357
+
358
+ /* ---- Session summary: scoreboard tiles -------------------------------- */
359
+
360
+ .summary-grid {
361
+ display: grid;
362
+ grid-template-columns: repeat(2, minmax(0, 1fr));
363
+ gap: 10px;
364
+ margin-top: 12px;
365
+ }
366
+
367
+ .summary-grid .meta-item {
368
+ display: grid;
369
+ gap: 2px;
370
+ padding: 12px;
371
+ background: rgba(8, 12, 18, 0.6);
372
+ }
373
+
374
+ .summary-grid .meta-value {
375
+ font-family: "Fraunces", Georgia, serif;
376
+ font-size: 28px;
377
+ font-weight: 700;
378
+ line-height: 1;
379
+ color: var(--paper);
380
+ }
381
+
382
+ /* ---- Session audit: replayable resource trail ------------------------- */
383
+
384
+ .session-audit {
385
+ display: grid;
386
+ gap: 14px;
387
+ animation-delay: 0.08s;
388
+ }
389
+
390
+ .session-audit-head {
391
+ display: grid;
392
+ grid-template-columns: minmax(0, 1fr) auto;
393
+ gap: 10px;
394
+ align-items: start;
395
+ }
396
+
397
+ .session-audit-head h2 {
398
+ margin-top: 5px;
399
+ overflow-wrap: anywhere;
400
+ }
401
+
402
+ .audit-grid {
403
+ grid-template-columns: repeat(2, minmax(0, 1fr));
404
+ }
405
+
406
+ .audit-grid .meta-value {
407
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
408
+ font-size: 12px;
409
+ line-height: 1.35;
410
+ }
411
+
412
+ .session-event-list {
413
+ display: grid;
414
+ gap: 8px;
415
+ margin: 0;
416
+ padding: 0;
417
+ list-style: none;
418
+ }
419
+
420
+ .session-event-list li {
421
+ display: grid;
422
+ grid-template-columns: 30px minmax(0, 1fr);
423
+ gap: 9px;
424
+ min-width: 0;
425
+ border: 1px solid var(--line);
426
+ border-radius: var(--radius-sm);
427
+ padding: 9px 10px;
428
+ background: rgba(6, 9, 13, 0.45);
429
+ }
430
+
431
+ .event-sequence {
432
+ display: grid;
433
+ place-items: center;
434
+ width: 28px;
435
+ height: 28px;
436
+ border: 1px solid var(--line-strong);
437
+ border-radius: 999px;
438
+ color: var(--accent);
439
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
440
+ font-size: 10px;
441
+ font-weight: 700;
442
+ }
443
+
444
+ .session-event-list strong,
445
+ .session-event-list small {
446
+ display: block;
447
+ min-width: 0;
448
+ overflow-wrap: anywhere;
449
+ }
450
+
451
+ .session-event-list strong {
452
+ color: var(--paper);
453
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
454
+ font-size: 12px;
455
+ }
456
+
457
+ .session-event-list small {
458
+ margin-top: 3px;
459
+ color: var(--paper-faint);
460
+ font-size: 11.5px;
461
+ line-height: 1.35;
462
+ }
463
+
464
+ .session-export {
465
+ border-top: 1px solid var(--line);
466
+ padding-top: 12px;
467
+ }
468
+
469
+ .session-export summary {
470
+ cursor: pointer;
471
+ color: var(--accent);
472
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
473
+ font-size: 11px;
474
+ font-weight: 700;
475
+ letter-spacing: 0.06em;
476
+ }
477
+
478
+ .session-export pre {
479
+ max-height: 300px;
480
+ }
481
+
482
+ /* ---- Content grid ----------------------------------------------------- */
483
+
484
+ .content-grid {
485
+ display: grid;
486
+ grid-template-columns: minmax(0, 1fr) minmax(360px, 440px);
487
+ grid-template-areas:
488
+ "focus decision"
489
+ "candidates decision";
490
+ gap: 22px;
491
+ align-items: start;
492
+ }
493
+
494
+ .review-main {
495
+ display: grid;
496
+ gap: 18px;
497
+ min-width: 0;
498
+ }
499
+
500
+ /* ---- Active review focus ---------------------------------------------- */
501
+
502
+ .review-focus {
503
+ grid-area: focus;
504
+ display: grid;
505
+ gap: 16px;
506
+ min-width: 0;
507
+ border: 1px solid rgba(92, 224, 198, 0.28);
508
+ border-radius: var(--radius);
509
+ padding: 18px;
510
+ background:
511
+ linear-gradient(135deg, rgba(92, 224, 198, 0.12), transparent 34%),
512
+ linear-gradient(180deg, var(--ink-800), var(--ink-850));
513
+ box-shadow: 0 26px 60px -42px rgba(0, 0, 0, 0.95), inset 0 1px 0 rgba(255, 255, 255, 0.04);
514
+ }
515
+
516
+ .focus-head,
517
+ .focus-values {
518
+ display: grid;
519
+ gap: 12px;
520
+ }
521
+
522
+ .focus-head {
523
+ grid-template-columns: minmax(0, 1fr) auto;
524
+ align-items: center;
525
+ }
526
+
527
+ .focus-values {
528
+ grid-template-columns: repeat(2, minmax(0, 1fr));
529
+ }
530
+
531
+ .focus-value {
532
+ min-width: 0;
533
+ border: 1px solid var(--line);
534
+ border-radius: var(--radius-sm);
535
+ padding: 13px 14px;
536
+ background: rgba(6, 9, 13, 0.56);
537
+ }
538
+
539
+ .focus-value strong {
540
+ display: block;
541
+ margin-top: 8px;
542
+ color: var(--paper);
543
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
544
+ font-size: clamp(22px, 3vw, 34px);
545
+ line-height: 1.05;
546
+ overflow-wrap: anywhere;
547
+ }
548
+
549
+ .focus-value span:last-child {
550
+ display: block;
551
+ margin-top: 8px;
552
+ color: var(--paper-faint);
553
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
554
+ font-size: 11px;
555
+ }
556
+
557
+ .focus-value.is-proposed {
558
+ border-color: rgba(122, 162, 255, 0.34);
559
+ background: linear-gradient(180deg, rgba(122, 162, 255, 0.1), rgba(6, 9, 13, 0.56));
560
+ }
561
+
562
+ .focus-value.is-proposed strong {
563
+ color: var(--proposed);
564
+ }
565
+
566
+ .focus-evidence {
567
+ display: grid;
568
+ grid-template-columns: minmax(110px, 0.65fr) minmax(0, 1.2fr) minmax(0, 1.4fr);
569
+ gap: 12px;
570
+ margin: 0;
571
+ }
572
+
573
+ .focus-evidence .field {
574
+ border-top: 1px solid var(--line);
575
+ padding-top: 12px;
576
+ }
577
+
578
+ /* ---- Candidate comparison: the hero of the console -------------------- */
579
+
580
+ .candidate-grid {
581
+ grid-area: candidates;
582
+ display: grid;
583
+ grid-template-columns: repeat(2, minmax(0, 1fr));
584
+ gap: 18px;
585
+ position: relative;
586
+ }
587
+
588
+ /* "VS" diff marker between the two candidates. */
589
+ .candidate-grid::before {
590
+ content: "vs";
591
+ position: absolute;
592
+ top: 26px;
593
+ left: 50%;
594
+ transform: translateX(-50%);
595
+ z-index: 3;
596
+ width: 38px;
597
+ height: 38px;
598
+ display: grid;
599
+ place-items: center;
600
+ border-radius: 999px;
601
+ border: 1px solid var(--line-strong);
602
+ background: var(--ink-750);
603
+ color: var(--paper-faint);
604
+ font-family: "Fraunces", Georgia, serif;
605
+ font-style: italic;
606
+ font-size: 15px;
607
+ box-shadow: 0 10px 26px -12px rgba(0, 0, 0, 0.9);
608
+ }
609
+
610
+ .candidate-card,
611
+ .payload-panel,
612
+ .surface-preview,
613
+ .decision-row {
614
+ border: 1px solid var(--line);
615
+ border-radius: var(--radius);
616
+ background: linear-gradient(180deg, var(--ink-800), var(--ink-850));
617
+ box-shadow: 0 26px 60px -42px rgba(0, 0, 0, 0.95);
618
+ }
619
+
620
+ .candidate-card {
621
+ display: grid;
622
+ grid-template-rows: auto auto minmax(0, 1fr);
623
+ gap: 16px;
624
+ min-height: 560px;
625
+ padding: 20px;
626
+ position: relative;
627
+ overflow: hidden;
628
+ animation: rise 0.6s cubic-bezier(0.22, 1, 0.36, 1) both;
629
+ animation-delay: 0.1s;
630
+ }
631
+
632
+ /* The proposed candidate (2nd card) is the incoming change — flag it. */
633
+ .candidate-card:nth-child(2) {
634
+ border-color: rgba(122, 162, 255, 0.32);
635
+ }
636
+
637
+ .candidate-card:nth-child(2)::after {
638
+ content: "";
639
+ position: absolute;
640
+ inset: 0;
641
+ pointer-events: none;
642
+ background: radial-gradient(420px 200px at 80% -10%, rgba(122, 162, 255, 0.12), transparent 70%);
643
+ }
644
+
645
+ .candidate-card.is-selected {
646
+ border-color: rgba(52, 211, 153, 0.55);
647
+ box-shadow: 0 26px 60px -36px rgba(0, 0, 0, 0.95), inset 0 0 0 1px rgba(52, 211, 153, 0.35), inset 0 0 60px -30px rgba(52, 211, 153, 0.6);
648
+ }
649
+
650
+ .candidate-card.is-unselected {
651
+ opacity: 0.5;
652
+ filter: saturate(0.7);
653
+ }
654
+
655
+ .card-head {
656
+ display: flex;
657
+ gap: 12px;
658
+ justify-content: space-between;
659
+ align-items: flex-start;
660
+ position: relative;
661
+ z-index: 1;
662
+ }
663
+
664
+ .card-head .eyebrow {
665
+ color: var(--paper-faint);
666
+ font-size: 10px;
667
+ letter-spacing: 0.1em;
668
+ text-transform: none;
669
+ overflow-wrap: anywhere;
670
+ word-break: break-word;
671
+ }
672
+
673
+ .role {
674
+ margin-top: 4px;
675
+ font-family: "Fraunces", Georgia, serif;
676
+ font-weight: 600;
677
+ font-size: 22px;
678
+ letter-spacing: -0.01em;
679
+ color: var(--paper);
680
+ }
681
+
682
+ .candidate-card:nth-child(2) .role {
683
+ color: var(--proposed);
684
+ }
685
+
686
+ .is-selected .state-label {
687
+ color: var(--verify);
688
+ border-color: rgba(52, 211, 153, 0.5);
689
+ background: rgba(52, 211, 153, 0.12);
690
+ }
691
+
692
+ /* The value — the single most important datapoint on the screen. */
693
+ .candidate-value {
694
+ position: relative;
695
+ z-index: 1;
696
+ border-block: 1px solid var(--line);
697
+ padding: 18px 0;
698
+ }
699
+
700
+ .candidate-value .field-value {
701
+ margin-top: 10px;
702
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
703
+ font-size: clamp(26px, 3vw, 40px);
704
+ font-weight: 600;
705
+ line-height: 1.05;
706
+ letter-spacing: -0.02em;
707
+ color: var(--paper);
708
+ }
709
+
710
+ .candidate-card:nth-child(2) .candidate-value .field-value {
711
+ color: var(--proposed);
712
+ }
713
+
714
+ .is-selected .candidate-value .field-value {
715
+ color: var(--verify);
716
+ }
717
+
718
+ .field-stack {
719
+ display: grid;
720
+ gap: 14px;
721
+ position: relative;
722
+ z-index: 1;
723
+ align-content: start;
724
+ }
725
+
726
+ .field-value {
727
+ margin-top: 5px;
728
+ font-size: 14px;
729
+ }
730
+
731
+ /* Source refs / locators / ids read as data. */
732
+ .candidate-card .field-stack .field-value {
733
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
734
+ font-size: 12.5px;
735
+ color: var(--paper-dim);
736
+ }
737
+
738
+ /* Highlight extraction confidence (5th field in the stack) as a chip. */
739
+ .candidate-card .field-stack > .field:nth-child(5) .field-value {
740
+ display: inline-block;
741
+ margin-top: 6px;
742
+ padding: 5px 11px;
743
+ border: 1px solid rgba(92, 224, 198, 0.35);
744
+ border-radius: 999px;
745
+ background: rgba(92, 224, 198, 0.1);
746
+ color: var(--accent);
747
+ font-size: 13px;
748
+ font-weight: 600;
749
+ }
750
+
751
+ .excerpt {
752
+ border-left: 2px solid var(--accent-deep);
753
+ padding-left: 12px;
754
+ }
755
+
756
+ .excerpt .field-value {
757
+ font-style: italic;
758
+ color: var(--paper-dim) !important;
759
+ }
760
+
761
+ /* ---- Decision column -------------------------------------------------- */
762
+
763
+ .decision-column {
764
+ grid-area: decision;
765
+ display: grid;
766
+ gap: 18px;
767
+ animation: rise 0.6s cubic-bezier(0.22, 1, 0.36, 1) both;
768
+ animation-delay: 0.15s;
769
+ }
770
+
771
+ .decision-row,
772
+ .payload-panel,
773
+ .surface-preview {
774
+ padding: 20px;
775
+ }
776
+
777
+ textarea {
778
+ display: block;
779
+ width: 100%;
780
+ min-height: 104px;
781
+ margin-top: 10px;
782
+ resize: vertical;
783
+ border: 1px solid var(--line-strong);
784
+ border-radius: var(--radius-sm);
785
+ padding: 12px;
786
+ color: var(--paper);
787
+ background: rgba(6, 9, 13, 0.7);
788
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
789
+ font-size: 13px;
790
+ line-height: 1.5;
791
+ }
792
+
793
+ textarea::placeholder {
794
+ color: var(--paper-faint);
795
+ }
796
+
797
+ textarea:focus {
798
+ border-color: var(--accent);
799
+ outline: none;
800
+ box-shadow: 0 0 0 3px rgba(92, 224, 198, 0.18);
801
+ }
802
+
803
+ /* Decision actions — color-coded to outcome (accept / keep / reject). */
804
+ .decision-buttons {
805
+ display: grid;
806
+ grid-template-columns: repeat(3, minmax(0, 1fr));
807
+ gap: 10px;
808
+ margin-top: 16px;
809
+ }
810
+
811
+ .decision-button {
812
+ min-height: 50px;
813
+ border: 1px solid var(--line-strong);
814
+ border-radius: var(--radius-sm);
815
+ background: rgba(8, 12, 18, 0.6);
816
+ color: var(--paper);
817
+ cursor: pointer;
818
+ font-weight: 700;
819
+ font-size: 13px;
820
+ letter-spacing: 0.01em;
821
+ transition: transform 0.14s ease, border-color 0.14s ease, background 0.14s ease, box-shadow 0.14s ease;
822
+ }
823
+
824
+ .decision-button:hover,
825
+ .decision-button:focus {
826
+ transform: translateY(-2px);
827
+ outline: none;
828
+ }
829
+
830
+ .decision-button:nth-child(1):hover { border-color: var(--verify); box-shadow: 0 10px 24px -14px rgba(52, 211, 153, 0.8); }
831
+ .decision-button:nth-child(2):hover { border-color: var(--hold); box-shadow: 0 10px 24px -14px rgba(243, 177, 75, 0.8); }
832
+ .decision-button:nth-child(3):hover { border-color: var(--reject); box-shadow: 0 10px 24px -14px rgba(255, 111, 111, 0.8); }
833
+
834
+ .decision-button.is-active {
835
+ color: var(--ink-1000);
836
+ border-color: transparent;
837
+ }
838
+
839
+ .decision-button:nth-child(1).is-active { background: var(--verify); box-shadow: 0 14px 30px -14px rgba(52, 211, 153, 0.9); }
840
+ .decision-button:nth-child(2).is-active { background: var(--hold); box-shadow: 0 14px 30px -14px rgba(243, 177, 75, 0.9); }
841
+ .decision-button:nth-child(3).is-active { background: var(--reject); box-shadow: 0 14px 30px -14px rgba(255, 111, 111, 0.9); }
842
+
843
+ .effect {
844
+ display: grid;
845
+ gap: 7px;
846
+ margin-top: 16px;
847
+ border-top: 1px solid var(--line);
848
+ padding-top: 14px;
849
+ }
850
+
851
+ .effect .field-value {
852
+ font-size: 14px;
853
+ line-height: 1.5;
854
+ color: var(--paper-dim);
855
+ }
856
+
857
+ .feedback-tags {
858
+ display: grid;
859
+ gap: 9px;
860
+ margin-top: 16px;
861
+ border-top: 1px solid var(--line);
862
+ padding-top: 14px;
863
+ }
864
+
865
+ .tag-row {
866
+ display: flex;
867
+ flex-wrap: wrap;
868
+ gap: 7px;
869
+ }
870
+
871
+ .tag {
872
+ border: 1px solid var(--line-strong);
873
+ border-radius: 999px;
874
+ padding: 5px 11px;
875
+ background: rgba(122, 162, 255, 0.08);
876
+ color: var(--proposed);
877
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
878
+ font-size: 11px;
879
+ font-weight: 500;
880
+ }
881
+
882
+ .tag.is-empty {
883
+ background: rgba(8, 12, 18, 0.6);
884
+ color: var(--paper-faint);
885
+ }
886
+
887
+ /* ---- Surface preview dossier ------------------------------------------ */
888
+
889
+ .surface-preview {
890
+ display: grid;
891
+ gap: 14px;
892
+ }
893
+
894
+ .surface-head {
895
+ display: flex;
896
+ gap: 12px;
897
+ justify-content: space-between;
898
+ align-items: flex-start;
899
+ }
900
+
901
+ .surface-head h2 {
902
+ font-family: "Fraunces", Georgia, serif;
903
+ font-weight: 600;
904
+ font-size: 19px;
905
+ letter-spacing: -0.01em;
906
+ }
907
+
908
+ .preview-disclaimer {
909
+ border-left: 2px solid var(--hold);
910
+ padding: 2px 0 2px 12px;
911
+ color: var(--paper-dim);
912
+ font-size: 12.5px;
913
+ line-height: 1.5;
914
+ }
915
+
916
+ .preview-section-grid {
917
+ display: grid;
918
+ grid-template-columns: minmax(0, 1fr);
919
+ gap: 10px;
920
+ }
921
+
922
+ .preview-section {
923
+ min-width: 0;
924
+ border: 1px solid var(--line);
925
+ border-radius: var(--radius-sm);
926
+ padding: 13px 14px;
927
+ background: rgba(6, 9, 13, 0.55);
928
+ }
929
+
930
+ .preview-section h3 {
931
+ margin-bottom: 10px;
932
+ color: var(--accent);
933
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
934
+ font-size: 11px;
935
+ font-weight: 600;
936
+ letter-spacing: 0.1em;
937
+ text-transform: uppercase;
938
+ }
939
+
940
+ .field-stack.compact {
941
+ gap: 9px;
942
+ }
943
+
944
+ .compact .field-value {
945
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
946
+ font-size: 12px;
947
+ color: var(--paper-dim);
948
+ }
949
+
950
+ .preview-section.is-neutral {
951
+ border-style: dashed;
952
+ border-color: var(--line);
953
+ background: rgba(6, 9, 13, 0.35);
954
+ }
955
+
956
+ .preview-section.is-neutral h3 {
957
+ color: var(--paper-faint);
958
+ }
959
+
960
+ /* ---- Decision payload: terminal readout, intentionally demoted -------- */
961
+
962
+ .payload-panel {
963
+ background: linear-gradient(180deg, var(--ink-850), var(--ink-900));
964
+ }
965
+
966
+ .payload-panel h2.field-label::before {
967
+ content: "› ";
968
+ color: var(--verify);
969
+ }
970
+
971
+ pre {
972
+ max-height: 460px;
973
+ margin: 12px 0 0;
974
+ overflow: auto;
975
+ border: 1px solid var(--line);
976
+ border-radius: var(--radius-sm);
977
+ background: var(--ink-1000);
978
+ padding: 14px;
979
+ color: #b6f3df;
980
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
981
+ font-size: 11.5px;
982
+ line-height: 1.55;
983
+ white-space: pre-wrap;
984
+ word-break: break-word;
985
+ }
986
+
987
+ /* ---- Motion ----------------------------------------------------------- */
988
+
989
+ @keyframes rise {
990
+ from {
991
+ opacity: 0;
992
+ transform: translateY(14px);
993
+ }
994
+ to {
995
+ opacity: 1;
996
+ transform: translateY(0);
997
+ }
998
+ }
999
+
1000
+ @media (prefers-reduced-motion: reduce) {
1001
+ * {
1002
+ animation: none !important;
1003
+ transition: none !important;
1004
+ }
1005
+ }
1006
+
1007
+ /* ---- Responsive ------------------------------------------------------- */
1008
+
1009
+ @media (max-width: 980px) {
1010
+ .topbar,
1011
+ .queue-layout,
1012
+ .focus-evidence,
1013
+ .candidate-grid {
1014
+ grid-template-columns: 1fr;
1015
+ }
1016
+
1017
+ .content-grid {
1018
+ grid-template-columns: 1fr;
1019
+ grid-template-areas:
1020
+ "focus"
1021
+ "decision"
1022
+ "candidates";
1023
+ }
1024
+
1025
+ .queue-layout {
1026
+ grid-template-areas:
1027
+ "content"
1028
+ "queue";
1029
+ }
1030
+
1031
+ .active-review-strip {
1032
+ display: grid;
1033
+ grid-template-columns: minmax(0, 1fr) auto;
1034
+ gap: 12px;
1035
+ align-items: center;
1036
+ border: 1px solid var(--line-strong);
1037
+ border-left: 3px solid var(--accent);
1038
+ border-radius: var(--radius);
1039
+ padding: 13px 14px;
1040
+ background:
1041
+ linear-gradient(90deg, rgba(92, 224, 198, 0.12), transparent 46%),
1042
+ linear-gradient(180deg, var(--ink-800), var(--ink-850));
1043
+ box-shadow: 0 18px 44px -36px rgba(0, 0, 0, 0.9);
1044
+ }
1045
+
1046
+ .active-review-copy,
1047
+ .active-review-actions,
1048
+ .active-review-decisions {
1049
+ min-width: 0;
1050
+ }
1051
+
1052
+ .active-review-copy {
1053
+ display: grid;
1054
+ gap: 4px;
1055
+ }
1056
+
1057
+ .active-review-copy strong {
1058
+ overflow-wrap: anywhere;
1059
+ color: var(--paper);
1060
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
1061
+ font-size: 13px;
1062
+ }
1063
+
1064
+ .active-review-copy span:last-child {
1065
+ overflow-wrap: anywhere;
1066
+ color: var(--paper-dim);
1067
+ font-size: 13px;
1068
+ }
1069
+
1070
+ .active-review-actions {
1071
+ display: grid;
1072
+ gap: 8px;
1073
+ justify-items: end;
1074
+ }
1075
+
1076
+ .active-review-decisions {
1077
+ grid-column: 1 / -1;
1078
+ display: grid;
1079
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1080
+ gap: 8px;
1081
+ }
1082
+
1083
+ .active-review-decisions .decision-button {
1084
+ min-height: 38px;
1085
+ padding: 7px 8px;
1086
+ font-size: 11px;
1087
+ }
1088
+
1089
+ .queue-panel {
1090
+ grid-area: queue;
1091
+ }
1092
+
1093
+ .content-grid {
1094
+ grid-area: content;
1095
+ }
1096
+
1097
+ .candidate-grid::before {
1098
+ display: none;
1099
+ }
1100
+
1101
+ .queue-panel {
1102
+ position: static;
1103
+ }
1104
+
1105
+ .content-grid,
1106
+ .review-main,
1107
+ .candidate-grid,
1108
+ .decision-column {
1109
+ min-width: 0;
1110
+ }
1111
+
1112
+ .meta-grid {
1113
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1114
+ }
1115
+
1116
+ .candidate-card {
1117
+ min-height: auto;
1118
+ }
1119
+ }
1120
+
1121
+ @media (max-width: 560px) {
1122
+ .workbench {
1123
+ padding: 14px 10px 36px;
1124
+ }
1125
+
1126
+ .workbench-shell {
1127
+ gap: 14px;
1128
+ }
1129
+
1130
+ .topbar,
1131
+ .active-review-strip,
1132
+ .queue-list,
1133
+ .session-summary,
1134
+ .session-audit,
1135
+ .candidate-card,
1136
+ .decision-row,
1137
+ .payload-panel,
1138
+ .surface-preview {
1139
+ border-radius: 10px;
1140
+ padding: 14px;
1141
+ }
1142
+
1143
+ .topbar {
1144
+ gap: 14px;
1145
+ }
1146
+
1147
+ .topbar .meta-grid {
1148
+ display: none;
1149
+ }
1150
+
1151
+ .active-review-strip {
1152
+ grid-template-columns: 1fr;
1153
+ gap: 10px;
1154
+ }
1155
+
1156
+ .active-review-actions {
1157
+ grid-template-columns: minmax(0, 1fr);
1158
+ justify-items: stretch;
1159
+ }
1160
+
1161
+ .active-review-actions .state-label {
1162
+ justify-self: start;
1163
+ }
1164
+
1165
+ .review-question {
1166
+ font-size: 13px;
1167
+ }
1168
+
1169
+ h1 {
1170
+ font-size: 25px;
1171
+ line-height: 1.08;
1172
+ }
1173
+
1174
+ .summary-grid,
1175
+ .focus-values,
1176
+ .decision-buttons {
1177
+ grid-template-columns: 1fr;
1178
+ }
1179
+
1180
+ .queue-head,
1181
+ .queue-row,
1182
+ .surface-head,
1183
+ .card-head {
1184
+ display: grid;
1185
+ grid-template-columns: 1fr;
1186
+ }
1187
+
1188
+ .queue-head {
1189
+ align-items: stretch;
1190
+ }
1191
+
1192
+ .next-button {
1193
+ width: 100%;
1194
+ }
1195
+
1196
+ .queue-row {
1197
+ justify-items: start;
1198
+ }
1199
+
1200
+ .state-label {
1201
+ min-width: 0;
1202
+ max-width: 100%;
1203
+ justify-self: start;
1204
+ white-space: normal;
1205
+ }
1206
+
1207
+ .role {
1208
+ font-size: 19px;
1209
+ }
1210
+
1211
+ .review-focus {
1212
+ border-radius: 10px;
1213
+ padding: 14px;
1214
+ }
1215
+
1216
+ .focus-head {
1217
+ grid-template-columns: 1fr;
1218
+ }
1219
+
1220
+ .focus-value strong {
1221
+ font-size: clamp(22px, 10vw, 32px);
1222
+ }
1223
+
1224
+ .candidate-value .field-value {
1225
+ font-size: clamp(21px, 9vw, 30px);
1226
+ line-height: 1.12;
1227
+ }
1228
+
1229
+ .candidate-card .field-stack .field-value,
1230
+ .compact .field-value,
1231
+ pre {
1232
+ font-size: 11.5px;
1233
+ }
1234
+
1235
+ .field-label,
1236
+ .eyebrow {
1237
+ letter-spacing: 0.09em;
1238
+ }
1239
+
1240
+ .decision-button {
1241
+ min-height: 44px;
1242
+ }
1243
+
1244
+ pre {
1245
+ max-height: 360px;
1246
+ padding: 11px;
1247
+ }
1248
+ }
1249
+
1250
+ @media (max-width: 420px) {
1251
+ h1 {
1252
+ font-size: 23px;
1253
+ line-height: 1.1;
1254
+ }
1255
+
1256
+ .topbar {
1257
+ padding: 12px;
1258
+ }
1259
+
1260
+ .topbar .meta-grid {
1261
+ gap: 8px;
1262
+ }
1263
+
1264
+ .topbar .meta-item {
1265
+ padding: 9px 10px;
1266
+ }
1267
+
1268
+ .candidate-card .field-stack .field-value,
1269
+ .compact .field-value {
1270
+ display: block;
1271
+ text-align: left;
1272
+ }
1273
+
1274
+ .decision-buttons {
1275
+ gap: 8px;
1276
+ }
1277
+
1278
+ .decision-button {
1279
+ min-height: 40px;
1280
+ padding: 8px 10px;
1281
+ font-size: 12px;
1282
+ }
1283
+
1284
+ .candidate-card .field-stack > .field:nth-child(5) .field-value {
1285
+ display: inline-block;
1286
+ }
1287
+ }
1288
+
1289
+ @media (max-width: 360px) {
1290
+ .workbench {
1291
+ padding-inline: 8px;
1292
+ }
1293
+
1294
+ .topbar,
1295
+ .active-review-strip,
1296
+ .queue-list,
1297
+ .session-summary,
1298
+ .session-audit,
1299
+ .review-focus,
1300
+ .candidate-card,
1301
+ .decision-row,
1302
+ .payload-panel,
1303
+ .surface-preview {
1304
+ padding: 12px;
1305
+ }
1306
+
1307
+ h1 {
1308
+ font-size: 20px;
1309
+ }
1310
+
1311
+ .review-question {
1312
+ font-size: 12px;
1313
+ line-height: 1.35;
1314
+ }
1315
+
1316
+ .topbar .meta-grid {
1317
+ display: none;
1318
+ }
1319
+
1320
+ .review-focus {
1321
+ gap: 10px;
1322
+ }
1323
+
1324
+ .focus-value {
1325
+ padding: 10px;
1326
+ }
1327
+
1328
+ .focus-value strong {
1329
+ margin-top: 6px;
1330
+ font-size: 24px;
1331
+ line-height: 1.05;
1332
+ }
1333
+
1334
+ .focus-value span:last-child {
1335
+ margin-top: 6px;
1336
+ }
1337
+
1338
+ .candidate-value .field-value {
1339
+ font-size: 20px;
1340
+ }
1341
+ }