@weasel-js/labkit 0.8.0 → 1.0.1

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 (74) hide show
  1. package/README.md +11 -3
  2. package/dist/_dts/{DrawCommand-DACv9lhe.d.ts → DrawCommand-CitWPxMY.d.ts} +80 -7
  3. package/dist/_dts/{useExperimentState-eSvpwV_P.d.ts → useExperimentState-CJn2hHzd.d.ts} +6 -4
  4. package/dist/{chunk-SSMHPMDV.js → chunk-53XSBIUK.js} +12 -11
  5. package/dist/chunk-53XSBIUK.js.map +1 -0
  6. package/dist/{chunk-OHGEOTCV.js → chunk-EXBV7A6X.js} +3 -3
  7. package/dist/{chunk-OHGEOTCV.js.map → chunk-EXBV7A6X.js.map} +1 -1
  8. package/dist/{chunk-6V7ROR7G.js → chunk-ISEK5LXT.js} +1931 -904
  9. package/dist/chunk-ISEK5LXT.js.map +1 -0
  10. package/dist/chunk-NRD3TDNQ.js +5946 -0
  11. package/dist/chunk-NRD3TDNQ.js.map +1 -0
  12. package/dist/index.d.ts +37 -13
  13. package/dist/index.js +776 -27
  14. package/dist/index.js.map +1 -1
  15. package/dist/passthrough/weasel-canvas.d.ts +29 -6
  16. package/dist/passthrough/weasel-canvas.js +1 -1
  17. package/dist/passthrough/weasel-ui.d.ts +169 -79
  18. package/dist/passthrough/weasel-ui.js +2 -2
  19. package/dist/state/index.d.ts +2 -2
  20. package/dist/state/index.js +2 -2
  21. package/dist/styles.css +228 -287
  22. package/dist/ui/layers/index.js +3 -3
  23. package/package.json +4 -6
  24. package/src/canvas/CanvasStack.less +1 -1
  25. package/src/controls/ControlPanel.less +12 -12
  26. package/src/dragdrop/DragGhost.less +2 -2
  27. package/src/dragdrop/Palette.less +6 -6
  28. package/src/index.ts +2 -0
  29. package/src/lab/Lab.test.tsx +20 -15
  30. package/src/lab/Lab.tsx +33 -32
  31. package/src/lab/LabContext.ts +3 -3
  32. package/src/lab/LabShell.less +14 -14
  33. package/src/lab/LabShell.test.tsx +7 -20
  34. package/src/lab/LabShell.tsx +22 -13
  35. package/src/lab/WorkspaceGrid.less +1 -1
  36. package/src/lab/WorkspaceGrid.stories.tsx +4 -4
  37. package/src/lab/index.ts +1 -1
  38. package/src/lab/useSystemMode.ts +30 -0
  39. package/src/layers/LayerList.less +9 -9
  40. package/src/passthrough/weasel-ui.ts +4 -0
  41. package/src/primitives/FpsMeter.less +5 -5
  42. package/src/primitives/ScaleIndicator.less +7 -7
  43. package/src/primitives/Sidebar.less +12 -12
  44. package/src/primitives/StatusBar.less +10 -10
  45. package/src/primitives/Toolbar.less +16 -16
  46. package/src/state/store.test.ts +17 -9
  47. package/src/state/store.ts +13 -10
  48. package/src/state/types.ts +5 -2
  49. package/src/theme/Interstellar.stories.less +20 -20
  50. package/src/theme/Interstellar.stories.tsx +44 -59
  51. package/src/theme/base.less +26 -26
  52. package/src/theme/interstellar.test.ts +30 -0
  53. package/src/theme/interstellar.tokens.json +57 -0
  54. package/src/theme/interstellar.ts +9 -0
  55. package/src/ui/layers/LayerStack.less +21 -21
  56. package/src/ui/properties/CurveField.less +5 -5
  57. package/src/ui/properties/EffectCard.tsx +2 -2
  58. package/src/ui/properties/PropertyGroup.less +6 -6
  59. package/src/ui/properties/PropertyPanel.less +70 -70
  60. package/src/ui/properties/PropertyPanel.stories.tsx +0 -1
  61. package/src/ui/properties/SpeechBalloonPanels.stories.tsx +1 -1
  62. package/src/ui/properties/storyLayouts.tsx +1 -1
  63. package/src/workspace/Workspace.less +14 -14
  64. package/src/workspace/Workspace.stories.tsx +2 -2
  65. package/src/workspace/Workspace.test.tsx +2 -2
  66. package/dist/chunk-6V7ROR7G.js.map +0 -1
  67. package/dist/chunk-FBZCQXI2.js +0 -6037
  68. package/dist/chunk-FBZCQXI2.js.map +0 -1
  69. package/dist/chunk-SSMHPMDV.js.map +0 -1
  70. package/dist/theme-interstellar.css +0 -25
  71. package/dist/theme-light.css +0 -13
  72. package/src/theme/interstellar.less +0 -34
  73. package/src/theme/light.less +0 -14
  74. package/src/theme/tokens.less +0 -85
@@ -4,21 +4,21 @@
4
4
  // everything else spans the full width.
5
5
 
6
6
  .lk-property-panel {
7
- background: var(--lk-bg-elevated);
8
- border: 1px solid var(--lk-border);
9
- border-radius: var(--lk-radius-lg, 14px);
7
+ background: var(--wzl-surface-raised);
8
+ border: 1px solid var(--wzl-border);
9
+ border-radius: var(--wzl-radius-lg);
10
10
  padding: 14px 16px;
11
- backdrop-filter: blur(var(--lk-glass-blur, 0));
12
- -webkit-backdrop-filter: blur(var(--lk-glass-blur, 0));
11
+ backdrop-filter: blur(var(--wzl-glass-blur));
12
+ -webkit-backdrop-filter: blur(var(--wzl-glass-blur));
13
13
  }
14
14
 
15
15
  .lk-property-panel__title {
16
- font-family: var(--lk-font-display);
17
- font-weight: var(--lk-font-weight-light, 300);
16
+ font-family: var(--wzl-font-display);
17
+ font-weight: var(--wzl-font-weight-light);
18
18
  font-size: 1.05rem;
19
19
  line-height: 1.2;
20
20
  letter-spacing: 0.01em;
21
- color: var(--lk-text);
21
+ color: var(--wzl-fg);
22
22
  margin: 0 0 12px;
23
23
  }
24
24
 
@@ -83,11 +83,11 @@
83
83
  }
84
84
 
85
85
  .lk-property-row__label {
86
- font-family: var(--lk-font-display);
87
- font-weight: var(--lk-font-weight-light, 300);
86
+ font-family: var(--wzl-font-display);
87
+ font-weight: var(--wzl-font-weight-light);
88
88
  font-size: 0.78rem;
89
89
  line-height: 1.2;
90
- color: var(--lk-text-muted);
90
+ color: var(--wzl-fg-muted);
91
91
  text-transform: uppercase;
92
92
  letter-spacing: 0.05em;
93
93
  display: flex;
@@ -97,8 +97,8 @@
97
97
 
98
98
  .lk-property-row__readout {
99
99
  font-style: normal;
100
- font-weight: var(--lk-font-weight-medium, 500);
101
- color: var(--lk-accent);
100
+ font-weight: var(--wzl-font-weight-medium);
101
+ color: var(--wzl-accent);
102
102
  margin-left: auto;
103
103
  }
104
104
 
@@ -107,12 +107,12 @@
107
107
  // so visual density matches the source.
108
108
  .lk-property-row__readout-input {
109
109
  font: inherit;
110
- font-weight: var(--lk-font-weight-medium, 500);
110
+ font-weight: var(--wzl-font-weight-medium);
111
111
  // Force line-height 1 (the label parent inherits 1.2, which would make
112
112
  // the input box ~3px taller than the SB reference). Matches SB
113
113
  // styles.css:385 `font: 500 0.78rem/1`.
114
114
  line-height: 1;
115
- color: var(--lk-accent);
115
+ color: var(--wzl-accent);
116
116
  background: transparent;
117
117
  border: 1px solid transparent;
118
118
  border-radius: 3px;
@@ -130,7 +130,7 @@
130
130
  }
131
131
  .lk-property-row__readout-input:focus {
132
132
  background: rgba(0, 0, 0, 0.4);
133
- border-color: var(--lk-accent);
133
+ border-color: var(--wzl-accent);
134
134
  }
135
135
  .lk-property-row__readout-input::-webkit-inner-spin-button,
136
136
  .lk-property-row__readout-input::-webkit-outer-spin-button {
@@ -147,7 +147,7 @@
147
147
  }
148
148
  // Word-style units (e.g. "px") read as a small dim suffix next to the digits.
149
149
  .lk-property-row__readout-unit {
150
- color: var(--lk-text-muted);
150
+ color: var(--wzl-fg-muted);
151
151
  font-size: 0.78em;
152
152
  line-height: 1;
153
153
  pointer-events: none;
@@ -156,13 +156,13 @@
156
156
  // positioning. Just dim them to match — do NOT set line-height: 0, that
157
157
  // would re-collapse the glyph onto the baseline.
158
158
  .lk-property-row__readout-group sup {
159
- color: var(--lk-text-muted);
159
+ color: var(--wzl-fg-muted);
160
160
  font-size: 0.7em;
161
161
  pointer-events: none;
162
162
  }
163
163
 
164
164
  .lk-property-row input[type='range'] {
165
- // Hairline track + small translucent thumb, tinted with the active --lk-accent.
165
+ // Hairline track + small translucent thumb, tinted with the active --wzl-accent.
166
166
  -webkit-appearance: none;
167
167
  appearance: none;
168
168
  background: transparent;
@@ -175,12 +175,12 @@
175
175
  .lk-property-row input[type='range']::-webkit-slider-runnable-track {
176
176
  height: 4px;
177
177
  border-radius: 2px;
178
- background: color-mix(in srgb, var(--lk-accent) 18%, transparent);
178
+ background: color-mix(in srgb, var(--wzl-accent) 18%, transparent);
179
179
  }
180
180
  .lk-property-row input[type='range']::-moz-range-track {
181
181
  height: 4px;
182
182
  border-radius: 2px;
183
- background: color-mix(in srgb, var(--lk-accent) 18%, transparent);
183
+ background: color-mix(in srgb, var(--wzl-accent) 18%, transparent);
184
184
  }
185
185
  .lk-property-row input[type='range']::-webkit-slider-thumb {
186
186
  -webkit-appearance: none;
@@ -188,7 +188,7 @@
188
188
  width: 8px;
189
189
  height: 8px;
190
190
  border-radius: 50%;
191
- background: color-mix(in srgb, var(--lk-accent) 70%, transparent);
191
+ background: color-mix(in srgb, var(--wzl-accent) 70%, transparent);
192
192
  border: none;
193
193
  margin-top: -2px;
194
194
  }
@@ -196,7 +196,7 @@
196
196
  width: 8px;
197
197
  height: 8px;
198
198
  border-radius: 50%;
199
- background: color-mix(in srgb, var(--lk-accent) 70%, transparent);
199
+ background: color-mix(in srgb, var(--wzl-accent) 70%, transparent);
200
200
  border: none;
201
201
  }
202
202
 
@@ -226,16 +226,16 @@
226
226
  .lk-property-row input[type='text']:not(.lk-property-row__readout-input),
227
227
  .lk-property-row input[type='number'] {
228
228
  background: rgba(0, 0, 0, 0.35);
229
- color: var(--lk-text);
230
- border: 1px solid var(--lk-border);
231
- border-radius: var(--lk-radius-sm);
229
+ color: var(--wzl-fg);
230
+ border: 1px solid var(--wzl-border);
231
+ border-radius: var(--wzl-radius-sm);
232
232
  padding: 6px 8px;
233
- font: 400 0.85rem/1 var(--lk-font);
233
+ font: 400 0.85rem/1 var(--wzl-font-ui);
234
234
  }
235
235
 
236
236
  .lk-property-row input[type='text']:not(.lk-property-row__readout-input):focus,
237
237
  .lk-property-row input[type='number']:focus {
238
- outline: 1px solid var(--lk-accent);
238
+ outline: 1px solid var(--wzl-accent);
239
239
  }
240
240
 
241
241
  // Selects in property rows render borderless — chevron only, transparent
@@ -244,15 +244,15 @@
244
244
  // still see something clickable.
245
245
  .lk-property-row select {
246
246
  background: transparent;
247
- color: var(--lk-text);
247
+ color: var(--wzl-fg);
248
248
  border: 0;
249
249
  border-radius: 0;
250
250
  padding: 2px 0;
251
- font: 400 0.85rem/1 var(--lk-font);
251
+ font: 400 0.85rem/1 var(--wzl-font-ui);
252
252
  cursor: pointer;
253
253
  }
254
254
  .lk-property-row select:focus {
255
- outline: 1px solid var(--lk-accent);
255
+ outline: 1px solid var(--wzl-accent);
256
256
  outline-offset: 2px;
257
257
  }
258
258
 
@@ -290,7 +290,7 @@
290
290
  height: 18px;
291
291
  background: transparent;
292
292
  border: 0;
293
- border-radius: var(--lk-radius-sm);
293
+ border-radius: var(--wzl-radius-sm);
294
294
  padding: 0;
295
295
  cursor: pointer;
296
296
  flex-shrink: 0;
@@ -305,10 +305,10 @@
305
305
  margin: 0;
306
306
  }
307
307
  .lk-property-row--color input[type='range'].lk-property-row__alpha::-webkit-slider-runnable-track {
308
- background: color-mix(in srgb, var(--lk-accent) 10%, transparent);
308
+ background: color-mix(in srgb, var(--wzl-accent) 10%, transparent);
309
309
  }
310
310
  .lk-property-row--color input[type='range'].lk-property-row__alpha::-moz-range-track {
311
- background: color-mix(in srgb, var(--lk-accent) 10%, transparent);
311
+ background: color-mix(in srgb, var(--wzl-accent) 10%, transparent);
312
312
  }
313
313
  // Disabled state: dim the track, hide the thumb, swap the cursor — used when
314
314
  // the consumer of the color drops alpha so the affordance reads as inert.
@@ -345,13 +345,13 @@
345
345
  text-transform: none;
346
346
  letter-spacing: normal;
347
347
  font-size: 0.85rem;
348
- color: var(--lk-text);
348
+ color: var(--wzl-fg);
349
349
  // Place the label after the checkbox visually.
350
350
  order: 1;
351
351
  }
352
352
 
353
353
  .lk-property-row--checkbox input[type='checkbox'] {
354
- accent-color: var(--lk-accent);
354
+ accent-color: var(--wzl-accent);
355
355
  width: 14px;
356
356
  height: 14px;
357
357
  cursor: pointer;
@@ -361,8 +361,8 @@
361
361
  .lk-property-row__toggle {
362
362
  display: flex;
363
363
  width: 100%;
364
- border: 1px solid var(--lk-border);
365
- border-radius: var(--lk-radius-sm);
364
+ border: 1px solid var(--wzl-border);
365
+ border-radius: var(--wzl-radius-sm);
366
366
  overflow: hidden;
367
367
  }
368
368
 
@@ -371,28 +371,28 @@
371
371
  height: 26px;
372
372
  padding: 0 8px;
373
373
  background: rgba(0, 0, 0, 0.25);
374
- color: var(--lk-text-muted);
374
+ color: var(--wzl-fg-muted);
375
375
  border: 0;
376
376
  border-radius: 0;
377
- font: 400 0.78rem/1 var(--lk-font);
377
+ font: 400 0.78rem/1 var(--wzl-font-ui);
378
378
  cursor: pointer;
379
379
  backdrop-filter: none;
380
380
  -webkit-backdrop-filter: none;
381
381
  }
382
382
 
383
383
  .lk-property-row__toggle-button + .lk-property-row__toggle-button {
384
- border-left: 1px solid var(--lk-border);
384
+ border-left: 1px solid var(--wzl-border);
385
385
  }
386
386
 
387
387
  .lk-property-row__toggle-button:hover {
388
- color: var(--lk-text);
389
- border-color: var(--lk-border);
388
+ color: var(--wzl-fg);
389
+ border-color: var(--wzl-border);
390
390
  }
391
391
 
392
392
  .lk-property-row__toggle-button--selected {
393
- background: var(--lk-accent);
393
+ background: var(--wzl-accent);
394
394
  color: #0a0a14;
395
- font-weight: var(--lk-font-weight-medium, 500);
395
+ font-weight: var(--wzl-font-weight-medium);
396
396
  }
397
397
 
398
398
  .lk-property-row__toggle-button--selected:hover {
@@ -419,11 +419,11 @@
419
419
  grid-column: 1 / -1;
420
420
  }
421
421
  .lk-subpanel__title {
422
- font-family: var(--lk-font-display);
422
+ font-family: var(--wzl-font-display);
423
423
  font-weight: 400;
424
424
  font-size: 0.72rem;
425
425
  line-height: 1;
426
- color: var(--lk-text);
426
+ color: var(--wzl-fg);
427
427
  text-transform: uppercase;
428
428
  letter-spacing: 0.08em;
429
429
  margin: 0;
@@ -442,12 +442,12 @@
442
442
 
443
443
  // ── EffectCard ──────────────────────────────────────────────────────
444
444
  // Draggable, collapsible card. Optional --lk-panel-accent re-binds the
445
- // local --lk-accent so every descendant control auto-tints. Ported from
445
+ // local --wzl-accent so every descendant control auto-tints. Ported from
446
446
  // speech-balloons styles.css:597-758 with class renames.
447
447
  .lk-effect-card {
448
448
  background: rgba(0, 0, 0, 0.25);
449
- border: 1px solid var(--lk-border);
450
- border-radius: var(--lk-radius-sm);
449
+ border: 1px solid var(--wzl-border);
450
+ border-radius: var(--wzl-radius-sm);
451
451
  display: flex;
452
452
  flex-direction: column;
453
453
  overflow: hidden;
@@ -457,12 +457,12 @@
457
457
  .lk-effect-card.is-expanded { background: rgba(0, 0, 0, 0.3); }
458
458
 
459
459
  .lk-effect-card.has-accent {
460
- // Re-bind --lk-accent inside the card so every descendant style that paints
461
- // with var(--lk-accent) (readouts, slider thumb, etc.) picks up the
460
+ // Re-bind --wzl-accent inside the card so every descendant style that paints
461
+ // with var(--wzl-accent) (readouts, slider thumb, etc.) picks up the
462
462
  // per-card tint automatically.
463
- --lk-accent: var(--lk-panel-accent);
463
+ --wzl-accent: var(--lk-panel-accent);
464
464
  background: color-mix(in srgb, var(--lk-panel-accent) 4%, rgba(0, 0, 0, 0.28));
465
- border-color: color-mix(in srgb, var(--lk-panel-accent) 28%, var(--lk-border));
465
+ border-color: color-mix(in srgb, var(--lk-panel-accent) 28%, var(--wzl-border));
466
466
  border-left-width: 4px;
467
467
  border-left-color: var(--lk-panel-accent);
468
468
  }
@@ -490,7 +490,7 @@
490
490
  display: inline-flex;
491
491
  align-items: center;
492
492
  justify-content: center;
493
- color: var(--lk-text-muted);
493
+ color: var(--wzl-fg-muted);
494
494
  cursor: grab;
495
495
  padding: 0 2px;
496
496
  }
@@ -507,7 +507,7 @@
507
507
  justify-content: center;
508
508
  min-width: 14px;
509
509
  padding: 0 2px;
510
- color: var(--lk-panel-accent, var(--lk-text-muted));
510
+ color: var(--lk-panel-accent, var(--wzl-fg-muted));
511
511
  font-size: 14px;
512
512
  font-weight: 700;
513
513
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
@@ -515,21 +515,21 @@
515
515
  }
516
516
 
517
517
  .lk-effect-card__title {
518
- font-family: var(--lk-font-display);
518
+ font-family: var(--wzl-font-display);
519
519
  font-weight: 500;
520
520
  font-size: 0.9rem;
521
521
  line-height: 1;
522
- color: var(--lk-text);
522
+ color: var(--wzl-fg);
523
523
  text-transform: uppercase;
524
524
  letter-spacing: 0.04em;
525
525
  }
526
526
 
527
527
  .lk-effect-card__primary {
528
- font: 400 0.75rem/1 var(--lk-font);
529
- color: var(--lk-text);
528
+ font: 400 0.75rem/1 var(--wzl-font-ui);
529
+ color: var(--wzl-fg);
530
530
  background: rgba(0, 0, 0, 0.3);
531
- border: 1px solid var(--lk-border);
532
- border-radius: var(--lk-radius-sm);
531
+ border: 1px solid var(--wzl-border);
532
+ border-radius: var(--wzl-radius-sm);
533
533
  padding: 2px 6px;
534
534
  margin-left: auto;
535
535
  }
@@ -545,7 +545,7 @@
545
545
 
546
546
  .lk-effect-card__remove {
547
547
  background: transparent;
548
- color: var(--lk-text-muted);
548
+ color: var(--wzl-fg-muted);
549
549
  border: 1px solid transparent;
550
550
  border-radius: 4px;
551
551
  width: 22px;
@@ -564,7 +564,7 @@
564
564
 
565
565
  .lk-effect-card__body {
566
566
  padding: 4px 12px 12px;
567
- border-top: 1px solid var(--lk-border);
567
+ border-top: 1px solid var(--wzl-border);
568
568
  // Body content is typically a PropertyList — the consumer chooses pack mode.
569
569
  }
570
570
 
@@ -577,16 +577,16 @@
577
577
  .lk-effect-card-list__wrap { position: relative; }
578
578
  .lk-effect-card-list__drop-hint {
579
579
  height: 0;
580
- border-top: 2px solid var(--lk-accent);
580
+ border-top: 2px solid var(--wzl-accent);
581
581
  border-radius: 2px;
582
582
  margin: 2px 0;
583
- box-shadow: 0 0 6px color-mix(in srgb, var(--lk-accent) 60%, transparent);
583
+ box-shadow: 0 0 6px color-mix(in srgb, var(--wzl-accent) 60%, transparent);
584
584
  }
585
585
  .lk-effect-card-list__empty {
586
- font: var(--lk-font-weight-light, 300) 0.78rem/1.4 var(--lk-font-display);
587
- color: var(--lk-text-muted);
586
+ font: var(--wzl-font-weight-light) 0.78rem/1.4 var(--wzl-font-display);
587
+ color: var(--wzl-fg-muted);
588
588
  text-align: center;
589
589
  padding: 16px 12px;
590
- border: 1px dashed var(--lk-border);
591
- border-radius: var(--lk-radius-sm);
590
+ border: 1px dashed var(--wzl-border);
591
+ border-radius: var(--wzl-radius-sm);
592
592
  }
@@ -24,7 +24,6 @@ interface DemoArgs {
24
24
 
25
25
  const meta: Meta<DemoArgs> = {
26
26
  title: 'labkit/UI/Properties/PropertyPanel',
27
- component: PropertyPanel,
28
27
  argTypes: {
29
28
  title: { control: 'text' },
30
29
  pack: {
@@ -276,7 +276,7 @@ export const LeftSidebar: Story = {
276
276
 
277
277
  // ── Right sidebar: tails ───────────────────────────────────────────
278
278
  // Each tail is an EffectCard with a per-instance accent (--lk-panel-accent)
279
- // that re-binds --lk-accent inside the card. Drag the badge handle to reorder.
279
+ // that re-binds --wzl-accent inside the card. Drag the badge handle to reorder.
280
280
 
281
281
  interface TailItem {
282
282
  id: number;
@@ -8,7 +8,7 @@ import type { ReactNode } from 'react';
8
8
  export function SideBySide({ block, inline }: { block: ReactNode; inline: ReactNode }) {
9
9
  const labelStyle = {
10
10
  font: '300 0.72rem/1 Oswald, system-ui',
11
- color: 'var(--lk-text-muted)',
11
+ color: 'var(--wzl-fg-muted)',
12
12
  textTransform: 'uppercase' as const,
13
13
  letterSpacing: '0.08em',
14
14
  margin: '0 0 8px',
@@ -2,9 +2,9 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  height: 100%;
5
- background: var(--lk-bg);
6
- border: 1px solid var(--lk-border);
7
- border-radius: var(--lk-radius);
5
+ background: var(--wzl-surface);
6
+ border: 1px solid var(--wzl-border);
7
+ border-radius: var(--wzl-radius-md);
8
8
  overflow: hidden;
9
9
 
10
10
  &__body {
@@ -24,35 +24,35 @@
24
24
 
25
25
  &__toolbar {
26
26
  flex-shrink: 0;
27
- border-bottom: 1px solid var(--lk-divider);
27
+ border-bottom: 1px solid var(--wzl-line-subtle);
28
28
  }
29
29
 
30
30
  &__status {
31
31
  flex-shrink: 0;
32
- border-top: 1px solid var(--lk-divider);
32
+ border-top: 1px solid var(--wzl-line-subtle);
33
33
  }
34
34
 
35
35
  &--unknown {
36
36
  display: flex;
37
37
  align-items: center;
38
38
  justify-content: center;
39
- color: var(--lk-text-muted);
40
- font-size: var(--lk-font-size-sm);
39
+ color: var(--wzl-fg-muted);
40
+ font-size: var(--wzl-font-size-sm);
41
41
  }
42
42
  }
43
43
 
44
44
  .lk-toolbar__zoom-label {
45
- font-size: var(--lk-font-size-sm);
46
- color: var(--lk-text-muted);
47
- padding: 0 var(--lk-space-2);
45
+ font-size: var(--wzl-font-size-sm);
46
+ color: var(--wzl-fg-muted);
47
+ padding: 0 var(--wzl-space-sm);
48
48
  }
49
49
 
50
50
  .lk-toolbar__load-select {
51
- font-size: var(--lk-font-size-sm);
51
+ font-size: var(--wzl-font-size-sm);
52
52
  }
53
53
 
54
54
  .lk-sidebar__placeholder {
55
- padding: var(--lk-space-2);
56
- color: var(--lk-text-muted);
57
- font-size: var(--lk-font-size-sm);
55
+ padding: var(--wzl-space-sm);
56
+ color: var(--wzl-fg-muted);
57
+ font-size: var(--wzl-font-size-sm);
58
58
  }
@@ -38,8 +38,8 @@ function Harness() {
38
38
  saveSnapshot: noop,
39
39
  loadSnapshot: noop,
40
40
  deleteSnapshot: noop,
41
- theme: 'auto',
42
- setTheme: noop,
41
+ mode: 'auto',
42
+ setMode: noop,
43
43
  };
44
44
  return (
45
45
  <LabStoreContext.Provider value={{ store }}>
@@ -130,8 +130,8 @@ function ChromeHarness({
130
130
  saveSnapshot: vi.fn(),
131
131
  loadSnapshot: vi.fn(),
132
132
  deleteSnapshot: vi.fn(),
133
- theme: 'auto',
134
- setTheme: vi.fn(),
133
+ mode: 'auto',
134
+ setMode: vi.fn(),
135
135
  ...labOverrides,
136
136
  };
137
137
  return (