@kontourai/survey 0.7.2 → 0.8.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.
@@ -164,11 +164,11 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
164
164
  /* Local aliases preserve the existing workbench selectors while the values
165
165
  come from the shared Console Kit token contract. */
166
166
  --ink-1000: var(--k-bg);
167
- --ink-900: #0a0e13;
168
- --ink-850: #0d1219;
167
+ --ink-900: color-mix(in srgb, var(--k-bg) 60%, var(--k-panel));
168
+ --ink-850: color-mix(in srgb, var(--k-bg) 40%, var(--k-panel));
169
169
  --ink-800: var(--k-panel);
170
170
  --ink-750: var(--k-panel-raised);
171
- --ink-700: #1d2937;
171
+ --ink-700: color-mix(in srgb, var(--k-panel-raised) 80%, var(--k-line-strong));
172
172
  --paper: var(--k-text);
173
173
  --paper-dim: var(--k-text-muted);
174
174
  --paper-faint: var(--k-text-faint);
@@ -183,11 +183,52 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
183
183
  --radius: var(--k-radius-md);
184
184
  --radius-sm: var(--k-radius-sm);
185
185
 
186
+ /* Panel surface alpha — stronger contrast in light mode, subtle in dark */
187
+ --surface-alpha: 0.55;
188
+ /* Overlay tint alpha for brand-coloured gradient overlays */
189
+ --overlay-alpha: 0.10;
190
+ /* Grain overlay: visible dark only, 0 in light */
191
+ --grain-opacity: 0.04;
192
+ /* VS marker bg */
193
+ --vs-bg: var(--ink-750);
194
+
186
195
  font-family: var(--k-font-ui);
187
196
  background: var(--ink-1000);
188
197
  color: var(--paper);
189
198
  }
190
199
 
200
+ /* ---- Light mode token overrides --------------------------------------- */
201
+ /* The token sheet already flips --k-bg/panel/text etc. for [data-theme="light"].
202
+ Here we tune the workbench-specific overlay and surface alphas so the
203
+ grain/gradient overlays are invisible in light mode, and panel surfaces
204
+ have enough contrast without the dark alpha tricks. */
205
+ .survey-workbench-embed[data-theme="light"]{
206
+ color-scheme: light;
207
+ /* Structural tokens: override .theme-survey which hardcodes dark values.
208
+ These match the [data-theme="light"] block in tokens.css. */
209
+ --k-bg: #f5f4ef;
210
+ --k-panel: #ffffff;
211
+ --k-panel-raised: #fbfaf7;
212
+ --k-line: rgba(36, 40, 46, 0.12);
213
+ --k-line-strong: rgba(36, 40, 46, 0.20);
214
+ --k-text: #202124;
215
+ --k-text-muted: #5b626b;
216
+ --k-text-faint: #707782;
217
+ --k-positive: #168257;
218
+ --k-caution: #8a5a00;
219
+ --k-negative: #c83b3b;
220
+ --k-active: #3f6fd6;
221
+ /* Workbench-specific overlay and surface alphas */
222
+ --grain-opacity: 0;
223
+ --overlay-alpha: 0.06;
224
+ --surface-alpha: 0.70;
225
+ --vs-bg: var(--ink-750);
226
+ /* In light mode the brand accent is remapped by themes.css — ensure the
227
+ ink aliases derive cleanly from the token bg/panel values. */
228
+ --ink-900: color-mix(in srgb, var(--k-bg) 60%, var(--k-panel));
229
+ --ink-850: color-mix(in srgb, var(--k-bg) 40%, var(--k-panel));
230
+ }
231
+
191
232
  .survey-workbench-embed *{
192
233
  box-sizing: border-box;
193
234
  }
@@ -197,14 +238,15 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
197
238
  min-width: 320px;
198
239
  position: relative;
199
240
  background:
200
- radial-gradient(1100px 620px at 12% -8%, rgba(92, 224, 198, 0.12), transparent 60%),
201
- radial-gradient(900px 560px at 100% 0%, rgba(122, 162, 255, 0.12), transparent 55%),
202
- radial-gradient(800px 800px at 88% 110%, rgba(243, 177, 75, 0.07), transparent 60%),
241
+ radial-gradient(1100px 620px at 12% -8%, color-mix(in srgb, var(--k-brand) 10%, transparent), transparent 60%),
242
+ radial-gradient(900px 560px at 100% 0%, color-mix(in srgb, var(--k-active) 10%, transparent), transparent 55%),
243
+ radial-gradient(800px 800px at 88% 110%, color-mix(in srgb, var(--k-caution) 7%, transparent), transparent 60%),
203
244
  linear-gradient(180deg, var(--ink-1000), var(--ink-900) 55%, var(--ink-1000));
204
245
  background-attachment: fixed;
205
246
  }
206
247
 
207
- /* Grain + faint engineering grid for control-room atmosphere. */
248
+ /* Grain + faint engineering grid for control-room atmosphere.
249
+ Grain opacity is 0 in light mode via --grain-opacity. */
208
250
  .survey-workbench-embed::before{
209
251
  content: "";
210
252
  position: absolute;
@@ -212,10 +254,52 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
212
254
  z-index: 0;
213
255
  pointer-events: none;
214
256
  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");
215
- opacity: 0.04;
257
+ opacity: var(--grain-opacity);
216
258
  mix-blend-mode: screen;
217
259
  }
218
260
 
261
+ /* ---- Demo page chrome -------------------------------------------------- */
262
+ /* Light/dark toggle button on the demo wrapper around the workbench */
263
+ .survey-workbench-embed .demo-toolbar{
264
+ position: absolute;
265
+ top: 12px;
266
+ right: 14px;
267
+ z-index: 100;
268
+ display: flex;
269
+ align-items: center;
270
+ gap: 8px;
271
+ }
272
+
273
+ .survey-workbench-embed.theme-toggle{
274
+ display: flex;
275
+ align-items: center;
276
+ gap: 6px;
277
+ height: 32px;
278
+ padding: 0 12px;
279
+ border: 1px solid var(--line-strong);
280
+ border-radius: 999px;
281
+ background: color-mix(in srgb, var(--k-panel) 90%, transparent);
282
+ color: var(--paper-dim);
283
+ cursor: pointer;
284
+ font-family: var(--k-font-mono, "IBM Plex Mono", monospace);
285
+ font-size: 11px;
286
+ font-weight: 600;
287
+ letter-spacing: 0.06em;
288
+ backdrop-filter: blur(6px);
289
+ transition: background 0.16s ease, border-color 0.16s ease, color 0.16s ease;
290
+ }
291
+
292
+ .survey-workbench-embed.theme-toggle:hover{
293
+ background: color-mix(in srgb, var(--k-panel) 100%, transparent);
294
+ border-color: var(--accent);
295
+ color: var(--accent);
296
+ }
297
+
298
+ .survey-workbench-embed.theme-toggle-icon{
299
+ font-size: 14px;
300
+ line-height: 1;
301
+ }
302
+
219
303
  .survey-workbench-embed button,
220
304
  .survey-workbench-embed textarea{
221
305
  font: inherit;
@@ -281,9 +365,9 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
281
365
  border: 1px solid var(--line-strong);
282
366
  border-radius: var(--radius);
283
367
  background:
284
- linear-gradient(135deg, rgba(92, 224, 198, 0.08), transparent 42%),
368
+ linear-gradient(135deg, color-mix(in srgb, var(--k-brand) 8%, transparent), transparent 42%),
285
369
  linear-gradient(180deg, var(--ink-800), var(--ink-850));
286
- box-shadow: 0 24px 60px -34px rgba(0, 0, 0, 0.9), inset 0 1px 0 rgba(255, 255, 255, 0.03);
370
+ box-shadow: var(--k-shadow, 0 24px 60px -34px rgba(0, 0, 0, 0.9)), inset 0 1px 0 var(--line);
287
371
  animation: rise 0.6s cubic-bezier(0.22, 1, 0.36, 1) both;
288
372
  }
289
373
 
@@ -349,7 +433,11 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
349
433
  padding: 11px 12px;
350
434
  border: 1px solid var(--line);
351
435
  border-radius: var(--radius-sm);
352
- background: rgba(8, 12, 18, 0.55);
436
+ background: color-mix(in srgb, var(--k-bg) 55%, var(--k-panel));
437
+ }
438
+
439
+ .survey-workbench-embed[data-theme="light"] .meta-item{
440
+ background: color-mix(in srgb, var(--k-bg) 70%, var(--k-panel));
353
441
  }
354
442
 
355
443
  .survey-workbench-embed .meta-value{
@@ -400,7 +488,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
400
488
  position: absolute;
401
489
  inset: 0;
402
490
  z-index: 40;
403
- background: rgba(0, 0, 0, 0.55);
491
+ background: color-mix(in srgb, var(--k-bg) 55%, transparent);
404
492
  backdrop-filter: blur(2px);
405
493
  opacity: 0;
406
494
  transition: opacity 0.22s ease;
@@ -423,7 +511,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
423
511
  height: 30px;
424
512
  border: 1px solid var(--line-strong);
425
513
  border-radius: 999px;
426
- background: rgba(8, 12, 18, 0.8);
514
+ background: color-mix(in srgb, var(--k-bg) 80%, transparent);
427
515
  color: var(--paper-faint);
428
516
  cursor: pointer;
429
517
  font-size: 14px;
@@ -440,7 +528,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
440
528
  border-radius: var(--radius);
441
529
  background: linear-gradient(180deg, var(--ink-800), var(--ink-850));
442
530
  padding: 14px;
443
- box-shadow: 0 22px 50px -38px rgba(0, 0, 0, 0.9);
531
+ box-shadow: var(--k-shadow, 0 22px 50px -38px rgba(0, 0, 0, 0.9));
444
532
  animation: rise 0.6s cubic-bezier(0.22, 1, 0.36, 1) both;
445
533
  animation-delay: 0.05s;
446
534
  }
@@ -477,7 +565,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
477
565
  border-radius: var(--radius-sm);
478
566
  margin-top: 8px;
479
567
  padding: 9px 10px;
480
- background: rgba(8, 12, 18, 0.5);
568
+ background: color-mix(in srgb, var(--k-bg) 50%, var(--k-panel));
481
569
  color: var(--paper);
482
570
  cursor: pointer;
483
571
  text-align: left;
@@ -487,12 +575,12 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
487
575
  .survey-workbench-embed .queue-row:hover{
488
576
  transform: translateX(2px);
489
577
  border-color: var(--line-strong);
490
- background: rgba(16, 24, 34, 0.8);
578
+ background: color-mix(in srgb, var(--k-bg) 20%, var(--k-panel));
491
579
  }
492
580
 
493
581
  .survey-workbench-embed .queue-row.is-active{
494
582
  border-left-width: 3px;
495
- background: linear-gradient(90deg, rgba(92, 224, 198, 0.12), rgba(8, 12, 18, 0.5) 60%);
583
+ background: color-mix(in srgb, var(--k-brand) 8%, var(--k-panel));
496
584
  box-shadow: inset 0 0 0 1px var(--line-strong);
497
585
  }
498
586
 
@@ -536,22 +624,22 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
536
624
  border-radius: 999px;
537
625
  text-align: center;
538
626
  color: var(--paper-dim);
539
- background: rgba(8, 12, 18, 0.6);
627
+ background: color-mix(in srgb, var(--k-bg) 60%, var(--k-panel));
540
628
  letter-spacing: 0.08em;
541
629
  font-size: 9.5px;
542
630
  }
543
631
 
544
- .survey-workbench-embed .queue-row[data-queue-status="resolved"] .state-label{ color: var(--verify); border-color: rgba(52, 211, 153, 0.4); }
545
- .survey-workbench-embed .queue-row[data-queue-status="rejected"] .state-label{ color: var(--reject); border-color: rgba(255, 111, 111, 0.4); }
546
- .survey-workbench-embed .queue-row[data-queue-status="escalated"] .state-label{ color: var(--hold); border-color: rgba(243, 177, 75, 0.4); }
547
- .survey-workbench-embed .queue-row[data-queue-status="in-review"] .state-label{ color: var(--accent); border-color: rgba(92, 224, 198, 0.4); }
632
+ .survey-workbench-embed .queue-row[data-queue-status="resolved"] .state-label{ color: var(--verify); border-color: color-mix(in srgb, var(--verify) 40%, transparent); }
633
+ .survey-workbench-embed .queue-row[data-queue-status="rejected"] .state-label{ color: var(--reject); border-color: color-mix(in srgb, var(--reject) 40%, transparent); }
634
+ .survey-workbench-embed .queue-row[data-queue-status="escalated"] .state-label{ color: var(--hold); border-color: color-mix(in srgb, var(--hold) 40%, transparent); }
635
+ .survey-workbench-embed .queue-row[data-queue-status="in-review"] .state-label{ color: var(--accent); border-color: color-mix(in srgb, var(--accent) 40%, transparent); }
548
636
 
549
637
  .survey-workbench-embed .next-button{
550
638
  min-height: 34px;
551
639
  padding: 0 14px;
552
640
  border: 1px solid var(--line-strong);
553
641
  border-radius: 999px;
554
- background: rgba(92, 224, 198, 0.08);
642
+ background: color-mix(in srgb, var(--k-brand) 8%, transparent);
555
643
  color: var(--accent);
556
644
  cursor: pointer;
557
645
  font-family: "IBM Plex Mono", ui-monospace, monospace;
@@ -562,7 +650,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
562
650
  }
563
651
 
564
652
  .survey-workbench-embed .next-button:hover{
565
- background: rgba(92, 224, 198, 0.16);
653
+ background: color-mix(in srgb, var(--k-brand) 16%, transparent);
566
654
  border-color: var(--accent);
567
655
  }
568
656
 
@@ -579,7 +667,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
579
667
  display: grid;
580
668
  gap: 2px;
581
669
  padding: 10px;
582
- background: rgba(8, 12, 18, 0.6);
670
+ background: color-mix(in srgb, var(--k-bg) 60%, var(--k-panel));
583
671
  }
584
672
 
585
673
  .survey-workbench-embed .summary-grid .meta-value{
@@ -636,7 +724,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
636
724
  border: 1px solid var(--line);
637
725
  border-radius: var(--radius-sm);
638
726
  padding: 8px;
639
- background: rgba(6, 9, 13, 0.45);
727
+ background: color-mix(in srgb, var(--k-bg) 45%, transparent);
640
728
  }
641
729
 
642
730
  .survey-workbench-embed .event-sequence{
@@ -716,13 +804,13 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
716
804
  display: grid;
717
805
  gap: 12px;
718
806
  min-width: 0;
719
- border: 1px solid rgba(92, 224, 198, 0.28);
807
+ border: 1px solid color-mix(in srgb, var(--k-brand) 28%, transparent);
720
808
  border-radius: var(--radius);
721
809
  padding: 14px;
722
810
  background:
723
- linear-gradient(135deg, rgba(92, 224, 198, 0.12), transparent 34%),
811
+ linear-gradient(135deg, color-mix(in srgb, var(--k-brand) 12%, transparent), transparent 34%),
724
812
  linear-gradient(180deg, var(--ink-800), var(--ink-850));
725
- box-shadow: 0 26px 60px -42px rgba(0, 0, 0, 0.95), inset 0 1px 0 rgba(255, 255, 255, 0.04);
813
+ box-shadow: var(--k-shadow, 0 26px 60px -42px rgba(0, 0, 0, 0.95)), inset 0 1px 0 var(--line);
726
814
  }
727
815
 
728
816
  .survey-workbench-embed .focus-head,
@@ -745,7 +833,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
745
833
  border: 1px solid var(--line);
746
834
  border-radius: var(--radius-sm);
747
835
  padding: 10px 12px;
748
- background: rgba(6, 9, 13, 0.56);
836
+ background: color-mix(in srgb, var(--k-bg) 56%, var(--k-panel));
749
837
  }
750
838
 
751
839
  .survey-workbench-embed .focus-value strong{
@@ -767,8 +855,8 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
767
855
  }
768
856
 
769
857
  .survey-workbench-embed .focus-value.is-proposed{
770
- border-color: rgba(122, 162, 255, 0.34);
771
- background: linear-gradient(180deg, rgba(122, 162, 255, 0.1), rgba(6, 9, 13, 0.56));
858
+ border-color: color-mix(in srgb, var(--k-active) 34%, transparent);
859
+ background: color-mix(in srgb, var(--k-active) 10%, color-mix(in srgb, var(--k-bg) 56%, var(--k-panel)));
772
860
  }
773
861
 
774
862
  .survey-workbench-embed .focus-value.is-proposed strong{
@@ -811,12 +899,12 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
811
899
  place-items: center;
812
900
  border-radius: 999px;
813
901
  border: 1px solid var(--line-strong);
814
- background: var(--ink-750);
902
+ background: var(--vs-bg);
815
903
  color: var(--paper-faint);
816
904
  font-family: "Fraunces", Georgia, serif;
817
905
  font-style: italic;
818
906
  font-size: 13px;
819
- box-shadow: 0 10px 26px -12px rgba(0, 0, 0, 0.9);
907
+ box-shadow: var(--k-shadow, 0 10px 26px -12px rgba(0, 0, 0, 0.9));
820
908
  }
821
909
 
822
910
  .survey-workbench-embed .candidate-card,
@@ -826,7 +914,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
826
914
  border: 1px solid var(--line);
827
915
  border-radius: var(--radius);
828
916
  background: linear-gradient(180deg, var(--ink-800), var(--ink-850));
829
- box-shadow: 0 26px 60px -42px rgba(0, 0, 0, 0.95);
917
+ box-shadow: var(--k-shadow, 0 26px 60px -42px rgba(0, 0, 0, 0.95));
830
918
  }
831
919
 
832
920
  .survey-workbench-embed .candidate-card{
@@ -843,7 +931,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
843
931
 
844
932
  /* The proposed candidate (2nd card) is the incoming change — flag it. */
845
933
  .survey-workbench-embed .candidate-card:nth-child(2){
846
- border-color: rgba(122, 162, 255, 0.32);
934
+ border-color: color-mix(in srgb, var(--k-active) 32%, transparent);
847
935
  }
848
936
 
849
937
  .survey-workbench-embed .candidate-card:nth-child(2)::after{
@@ -851,12 +939,12 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
851
939
  position: absolute;
852
940
  inset: 0;
853
941
  pointer-events: none;
854
- background: radial-gradient(420px 200px at 80% -10%, rgba(122, 162, 255, 0.12), transparent 70%);
942
+ background: radial-gradient(420px 200px at 80% -10%, color-mix(in srgb, var(--k-active) 12%, transparent), transparent 70%);
855
943
  }
856
944
 
857
945
  .survey-workbench-embed .candidate-card.is-selected{
858
- border-color: rgba(52, 211, 153, 0.55);
859
- 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);
946
+ border-color: color-mix(in srgb, var(--k-positive) 55%, transparent);
947
+ box-shadow: 0 26px 60px -36px rgba(0, 0, 0, 0.95), inset 0 0 0 1px color-mix(in srgb, var(--k-positive) 35%, transparent), inset 0 0 60px -30px color-mix(in srgb, var(--k-positive) 60%, transparent);
860
948
  }
861
949
 
862
950
  .survey-workbench-embed .candidate-card.is-unselected{
@@ -897,8 +985,8 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
897
985
 
898
986
  .survey-workbench-embed .is-selected .state-label{
899
987
  color: var(--verify);
900
- border-color: rgba(52, 211, 153, 0.5);
901
- background: rgba(52, 211, 153, 0.12);
988
+ border-color: color-mix(in srgb, var(--verify) 50%, transparent);
989
+ background: color-mix(in srgb, var(--verify) 12%, transparent);
902
990
  }
903
991
 
904
992
  /* The value — the single most important datapoint on the screen. */
@@ -952,9 +1040,9 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
952
1040
  display: inline-block;
953
1041
  margin-top: 5px;
954
1042
  padding: 4px 9px;
955
- border: 1px solid rgba(92, 224, 198, 0.35);
1043
+ border: 1px solid color-mix(in srgb, var(--k-brand) 35%, transparent);
956
1044
  border-radius: 999px;
957
- background: rgba(92, 224, 198, 0.1);
1045
+ background: color-mix(in srgb, var(--k-brand) 10%, transparent);
958
1046
  color: var(--accent);
959
1047
  font-size: 11.5px;
960
1048
  font-weight: 600;
@@ -970,6 +1058,94 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
970
1058
  color: var(--paper-dim) !important;
971
1059
  }
972
1060
 
1061
+ /* ---- Excerpt / rationale 3-line clamp with inline expander ----------- */
1062
+ /* Applied to .field-value inside .excerpt or .excerpt-clamp containers,
1063
+ and to .rationale-clamp for reviewer rationale fields.
1064
+ The "more / less" toggle is a <button class="clamp-toggle"> sibling. */
1065
+
1066
+ .survey-workbench-embed .excerpt-clamp .field-value,
1067
+ .survey-workbench-embed .rationale-clamp .field-value{
1068
+ display: -webkit-box;
1069
+ -webkit-box-orient: vertical;
1070
+ -webkit-line-clamp: 3;
1071
+ overflow: hidden;
1072
+ }
1073
+
1074
+ .survey-workbench-embed .excerpt-clamp.is-expanded .field-value,
1075
+ .survey-workbench-embed .rationale-clamp.is-expanded .field-value{
1076
+ display: block;
1077
+ -webkit-line-clamp: unset;
1078
+ overflow: visible;
1079
+ }
1080
+
1081
+ .survey-workbench-embed .clamp-toggle{
1082
+ display: inline;
1083
+ margin-left: 4px;
1084
+ padding: 0;
1085
+ border: none;
1086
+ background: none;
1087
+ color: var(--accent);
1088
+ cursor: pointer;
1089
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
1090
+ font-size: 10.5px;
1091
+ font-weight: 600;
1092
+ letter-spacing: 0.04em;
1093
+ text-decoration: underline;
1094
+ text-underline-offset: 2px;
1095
+ vertical-align: baseline;
1096
+ }
1097
+
1098
+ .survey-workbench-embed .clamp-toggle:hover{
1099
+ color: var(--paper);
1100
+ }
1101
+
1102
+ /* ---- Candidate history expander -------------------------------------- */
1103
+ /* When there are >3 unselected candidates the UI renders the first 3 and
1104
+ hides the rest behind a "view all (N)" expander. */
1105
+
1106
+ .survey-workbench-embed .history-overflow{
1107
+ display: none;
1108
+ }
1109
+
1110
+ .survey-workbench-embed .history-expander.is-expanded .history-overflow{
1111
+ display: contents;
1112
+ }
1113
+
1114
+ .survey-workbench-embed .history-expand-btn{
1115
+ display: inline-flex;
1116
+ align-items: center;
1117
+ gap: 4px;
1118
+ margin-top: 6px;
1119
+ padding: 3px 10px;
1120
+ border: 1px solid var(--line-strong);
1121
+ border-radius: 999px;
1122
+ background: color-mix(in srgb, var(--k-brand) 6%, transparent);
1123
+ color: var(--accent);
1124
+ cursor: pointer;
1125
+ font-family: "IBM Plex Mono", ui-monospace, monospace;
1126
+ font-size: 10px;
1127
+ font-weight: 600;
1128
+ letter-spacing: 0.06em;
1129
+ transition: background 0.14s ease, border-color 0.14s ease;
1130
+ }
1131
+
1132
+ .survey-workbench-embed .history-expand-btn:hover{
1133
+ background: color-mix(in srgb, var(--k-brand) 14%, transparent);
1134
+ border-color: var(--accent);
1135
+ }
1136
+
1137
+ .survey-workbench-embed .history-expander.is-expanded .history-expand-btn .expand-label{
1138
+ display: none;
1139
+ }
1140
+
1141
+ .survey-workbench-embed .history-expander.is-expanded .history-expand-btn .collapse-label{
1142
+ display: inline;
1143
+ }
1144
+
1145
+ .survey-workbench-embed .history-expand-btn .collapse-label{
1146
+ display: none;
1147
+ }
1148
+
973
1149
  /* ---- Decision column -------------------------------------------------- */
974
1150
 
975
1151
  .survey-workbench-embed .decision-column{
@@ -997,7 +1173,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
997
1173
  border-radius: var(--radius-sm);
998
1174
  padding: 10px;
999
1175
  color: var(--paper);
1000
- background: rgba(6, 9, 13, 0.7);
1176
+ background: color-mix(in srgb, var(--k-bg) 70%, var(--k-panel));
1001
1177
  font-family: "IBM Plex Mono", ui-monospace, monospace;
1002
1178
  font-size: 12px;
1003
1179
  line-height: 1.5;
@@ -1010,7 +1186,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
1010
1186
  .survey-workbench-embed textarea:focus{
1011
1187
  border-color: var(--accent);
1012
1188
  outline: none;
1013
- box-shadow: 0 0 0 3px rgba(92, 224, 198, 0.18);
1189
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--k-brand) 18%, transparent);
1014
1190
  }
1015
1191
 
1016
1192
  /* Decision actions — color-coded to outcome (accept / keep / reject). */
@@ -1025,7 +1201,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
1025
1201
  min-height: 42px;
1026
1202
  border: 1px solid var(--line-strong);
1027
1203
  border-radius: var(--radius-sm);
1028
- background: rgba(8, 12, 18, 0.6);
1204
+ background: color-mix(in srgb, var(--k-bg) 60%, var(--k-panel));
1029
1205
  color: var(--paper);
1030
1206
  cursor: pointer;
1031
1207
  font-weight: 700;
@@ -1040,18 +1216,18 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
1040
1216
  outline: none;
1041
1217
  }
1042
1218
 
1043
- .survey-workbench-embed .decision-button:nth-child(1):hover{ border-color: var(--verify); box-shadow: 0 10px 24px -14px rgba(52, 211, 153, 0.8); }
1044
- .survey-workbench-embed .decision-button:nth-child(2):hover{ border-color: var(--hold); box-shadow: 0 10px 24px -14px rgba(243, 177, 75, 0.8); }
1045
- .survey-workbench-embed .decision-button:nth-child(3):hover{ border-color: var(--reject); box-shadow: 0 10px 24px -14px rgba(255, 111, 111, 0.8); }
1219
+ .survey-workbench-embed .decision-button:nth-child(1):hover{ border-color: var(--verify); box-shadow: 0 10px 24px -14px color-mix(in srgb, var(--verify) 80%, transparent); }
1220
+ .survey-workbench-embed .decision-button:nth-child(2):hover{ border-color: var(--hold); box-shadow: 0 10px 24px -14px color-mix(in srgb, var(--hold) 80%, transparent); }
1221
+ .survey-workbench-embed .decision-button:nth-child(3):hover{ border-color: var(--reject); box-shadow: 0 10px 24px -14px color-mix(in srgb, var(--reject) 80%, transparent); }
1046
1222
 
1047
1223
  .survey-workbench-embed .decision-button.is-active{
1048
- color: var(--ink-1000);
1224
+ color: var(--k-bg);
1049
1225
  border-color: transparent;
1050
1226
  }
1051
1227
 
1052
- .survey-workbench-embed .decision-button:nth-child(1).is-active{ background: var(--verify); box-shadow: 0 14px 30px -14px rgba(52, 211, 153, 0.9); }
1053
- .survey-workbench-embed .decision-button:nth-child(2).is-active{ background: var(--hold); box-shadow: 0 14px 30px -14px rgba(243, 177, 75, 0.9); }
1054
- .survey-workbench-embed .decision-button:nth-child(3).is-active{ background: var(--reject); box-shadow: 0 14px 30px -14px rgba(255, 111, 111, 0.9); }
1228
+ .survey-workbench-embed .decision-button:nth-child(1).is-active{ background: var(--verify); box-shadow: 0 14px 30px -14px color-mix(in srgb, var(--verify) 90%, transparent); }
1229
+ .survey-workbench-embed .decision-button:nth-child(2).is-active{ background: var(--hold); box-shadow: 0 14px 30px -14px color-mix(in srgb, var(--hold) 90%, transparent); }
1230
+ .survey-workbench-embed .decision-button:nth-child(3).is-active{ background: var(--reject); box-shadow: 0 14px 30px -14px color-mix(in srgb, var(--reject) 90%, transparent); }
1055
1231
 
1056
1232
  .survey-workbench-embed .effect{
1057
1233
  display: grid;
@@ -1085,7 +1261,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
1085
1261
  border: 1px solid var(--line-strong);
1086
1262
  border-radius: 999px;
1087
1263
  padding: 5px 11px;
1088
- background: rgba(122, 162, 255, 0.08);
1264
+ background: color-mix(in srgb, var(--k-active) 8%, transparent);
1089
1265
  color: var(--proposed);
1090
1266
  font-family: "IBM Plex Mono", ui-monospace, monospace;
1091
1267
  font-size: 11px;
@@ -1093,7 +1269,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
1093
1269
  }
1094
1270
 
1095
1271
  .survey-workbench-embed .tag.is-empty{
1096
- background: rgba(8, 12, 18, 0.6);
1272
+ background: color-mix(in srgb, var(--k-bg) 60%, var(--k-panel));
1097
1273
  color: var(--paper-faint);
1098
1274
  }
1099
1275
 
@@ -1191,7 +1367,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
1191
1367
  border: 1px solid var(--line);
1192
1368
  border-radius: var(--radius-sm);
1193
1369
  padding: 10px 11px;
1194
- background: rgba(6, 9, 13, 0.55);
1370
+ background: color-mix(in srgb, var(--k-bg) 55%, var(--k-panel));
1195
1371
  }
1196
1372
 
1197
1373
  .survey-workbench-embed .preview-section h3{
@@ -1217,7 +1393,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
1217
1393
  .survey-workbench-embed .preview-section.is-neutral{
1218
1394
  border-style: dashed;
1219
1395
  border-color: var(--line);
1220
- background: rgba(6, 9, 13, 0.35);
1396
+ background: color-mix(in srgb, var(--k-bg) 35%, var(--k-panel));
1221
1397
  }
1222
1398
 
1223
1399
  .survey-workbench-embed .preview-section.is-neutral h3{
@@ -1290,7 +1466,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
1290
1466
  border-radius: var(--radius-sm);
1291
1467
  background: var(--ink-1000);
1292
1468
  padding: 11px;
1293
- color: #b6f3df;
1469
+ color: color-mix(in srgb, var(--k-positive) 80%, var(--k-text));
1294
1470
  font-family: "IBM Plex Mono", ui-monospace, monospace;
1295
1471
  font-size: 11px;
1296
1472
  line-height: 1.55;
@@ -1350,9 +1526,9 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
1350
1526
  border-radius: var(--radius);
1351
1527
  padding: 13px 14px;
1352
1528
  background:
1353
- linear-gradient(90deg, rgba(92, 224, 198, 0.12), transparent 46%),
1529
+ linear-gradient(90deg, color-mix(in srgb, var(--k-brand) 12%, transparent), transparent 46%),
1354
1530
  linear-gradient(180deg, var(--ink-800), var(--ink-850));
1355
- box-shadow: 0 18px 44px -36px rgba(0, 0, 0, 0.9);
1531
+ box-shadow: var(--k-shadow, 0 18px 44px -36px rgba(0, 0, 0, 0.9));
1356
1532
  }
1357
1533
 
1358
1534
  .survey-workbench-embed .active-review-copy,
@@ -1417,7 +1593,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
1417
1593
  padding: 11px 14px;
1418
1594
  margin-bottom: 14px;
1419
1595
  background:
1420
- linear-gradient(90deg, rgba(92, 224, 198, 0.08), transparent 46%),
1596
+ linear-gradient(90deg, color-mix(in srgb, var(--k-brand) 8%, transparent), transparent 46%),
1421
1597
  linear-gradient(180deg, var(--ink-800), var(--ink-850));
1422
1598
  animation: rise 0.6s cubic-bezier(0.22, 1, 0.36, 1) both;
1423
1599
  }
@@ -1443,7 +1619,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
1443
1619
  padding: 0 14px;
1444
1620
  border: 1px solid var(--line-strong);
1445
1621
  border-radius: 999px;
1446
- background: rgba(92, 224, 198, 0.08);
1622
+ background: color-mix(in srgb, var(--k-brand) 8%, transparent);
1447
1623
  color: var(--accent);
1448
1624
  cursor: pointer;
1449
1625
  font-family: "IBM Plex Mono", ui-monospace, monospace;
@@ -1454,7 +1630,7 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
1454
1630
  }
1455
1631
 
1456
1632
  .survey-workbench-embed .mobile-queue-open:hover{
1457
- background: rgba(92, 224, 198, 0.16);
1633
+ background: color-mix(in srgb, var(--k-brand) 16%, transparent);
1458
1634
  border-color: var(--accent);
1459
1635
  }
1460
1636
 
@@ -1695,6 +1871,41 @@ export const REVIEW_WORKBENCH_CSS = `/* Bundled, scoped Survey Review Workbench
1695
1871
  }
1696
1872
  }
1697
1873
 
1874
+ /* ---- Type legibility: serif → UI sans below 480px -------------------- */
1875
+ /* At small container sizes the Fraunces display font reads poorly; fall back
1876
+ to the UI sans-serif stack for headings while keeping serif on desktop. */
1877
+ @media (max-width: 480px) {
1878
+ .survey-workbench-embed h1,
1879
+ .survey-workbench-embed h2,
1880
+ .survey-workbench-embed h3,
1881
+ .survey-workbench-embed .role,
1882
+ .survey-workbench-embed .surface-summary-label,
1883
+ .survey-workbench-embed .queue-head h2,
1884
+ .survey-workbench-embed .session-summary h2,
1885
+ .survey-workbench-embed .session-audit h2,
1886
+ .survey-workbench-embed .surface-head h2,
1887
+ .survey-workbench-embed .summary-grid .meta-value{
1888
+ font-family: var(--k-font-ui, "Hanken Grotesk", system-ui, sans-serif);
1889
+ letter-spacing: -0.01em;
1890
+ }
1891
+ }
1892
+
1893
+ @container (max-width: 480px) {
1894
+ .survey-workbench-embed h1,
1895
+ .survey-workbench-embed h2,
1896
+ .survey-workbench-embed h3,
1897
+ .survey-workbench-embed .role,
1898
+ .survey-workbench-embed .surface-summary-label,
1899
+ .survey-workbench-embed .queue-head h2,
1900
+ .survey-workbench-embed .session-summary h2,
1901
+ .survey-workbench-embed .session-audit h2,
1902
+ .survey-workbench-embed .surface-head h2,
1903
+ .survey-workbench-embed .summary-grid .meta-value{
1904
+ font-family: var(--k-font-ui, "Hanken Grotesk", system-ui, sans-serif);
1905
+ letter-spacing: -0.01em;
1906
+ }
1907
+ }
1908
+
1698
1909
  @media (max-width: 420px) {
1699
1910
  .survey-workbench-embed h1{
1700
1911
  font-size: 23px;