@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
@@ -2,30 +2,30 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: 2px;
5
- padding: var(--lk-spacing-sm, 8px);
5
+ padding: var(--wzl-space-sm);
6
6
  }
7
7
 
8
8
  .lk-layer-list__empty {
9
- color: var(--lk-color-text-muted, #888);
10
- font-size: var(--lk-font-size-sm, 12px);
9
+ color: var(--wzl-fg-muted);
10
+ font-size: var(--wzl-font-size-sm);
11
11
  font-style: italic;
12
12
  }
13
13
 
14
14
  .lk-layer-list__row {
15
15
  display: flex;
16
16
  align-items: center;
17
- gap: var(--lk-spacing-sm, 8px);
17
+ gap: var(--wzl-space-sm);
18
18
  padding: 4px 6px;
19
19
  border-radius: 3px;
20
20
  user-select: none;
21
21
  }
22
22
 
23
23
  .lk-layer-list__row:hover {
24
- background: var(--lk-color-hover, rgba(0, 0, 0, 0.04));
24
+ background: var(--wzl-surface-hover);
25
25
  }
26
26
 
27
27
  .lk-layer-list__row--dragging {
28
- background: var(--lk-color-active, rgba(0, 0, 0, 0.08));
28
+ background: var(--wzl-surface-pressed);
29
29
  opacity: 0.7;
30
30
  }
31
31
 
@@ -35,7 +35,7 @@
35
35
 
36
36
  .lk-layer-list__handle {
37
37
  cursor: grab;
38
- color: var(--lk-color-text-muted, #888);
38
+ color: var(--wzl-fg-muted);
39
39
  font-family: monospace;
40
40
  }
41
41
 
@@ -44,10 +44,10 @@
44
44
  }
45
45
 
46
46
  .lk-layer-list__lock {
47
- color: var(--lk-color-text-muted, #888);
47
+ color: var(--wzl-fg-muted);
48
48
  }
49
49
 
50
50
  .lk-layer-list__label {
51
51
  flex: 1;
52
- font-size: var(--lk-font-size-sm, 12px);
52
+ font-size: var(--wzl-font-size-sm);
53
53
  }
@@ -109,6 +109,8 @@ export {
109
109
  type RangeSliderProps,
110
110
  type ReorderDragHandlers,
111
111
  type ReorderDragState,
112
+ type RovingItem,
113
+ type RovingTabIndex,
112
114
  Select,
113
115
  SelectItem,
114
116
  type SelectItemProps,
@@ -146,5 +148,7 @@ export {
146
148
  type ToolPaletteProps,
147
149
  type TrackCtx,
148
150
  type UseReorderDragListOptions,
151
+ type UseRovingTabIndexOptions,
149
152
  useReorderDragList,
153
+ useRovingTabIndex,
150
154
  } from '@weasel-js/ui';
@@ -1,14 +1,14 @@
1
1
  .lk-fps-meter {
2
2
  display: inline-flex;
3
3
  align-items: center;
4
- gap: var(--lk-spacing-xs);
5
- font-family: var(--lk-font-mono);
6
- font-size: var(--lk-font-size-sm);
7
- color: var(--lk-text-muted);
4
+ gap: var(--wzl-space-xs);
5
+ font-family: var(--wzl-font-mono);
6
+ font-size: var(--wzl-font-size-sm);
7
+ color: var(--wzl-fg-muted);
8
8
  }
9
9
 
10
10
  .lk-fps-meter-value {
11
- color: var(--lk-text);
11
+ color: var(--wzl-fg);
12
12
  min-width: 2.5ch;
13
13
  text-align: right;
14
14
  }
@@ -1,22 +1,22 @@
1
1
  .lk-scale-indicator {
2
2
  display: inline-flex;
3
3
  align-items: center;
4
- gap: var(--lk-spacing-xs);
5
- font-family: var(--lk-font-mono);
6
- font-size: var(--lk-font-size-sm);
7
- color: var(--lk-text-muted);
4
+ gap: var(--wzl-space-xs);
5
+ font-family: var(--wzl-font-mono);
6
+ font-size: var(--wzl-font-size-sm);
7
+ color: var(--wzl-fg-muted);
8
8
  }
9
9
 
10
10
  .lk-scale-indicator-bar {
11
11
  height: 6px;
12
- border: 1px solid var(--lk-text-muted);
12
+ border: 1px solid var(--wzl-fg-muted);
13
13
  border-top: none;
14
14
  background: linear-gradient(
15
15
  to right,
16
- var(--lk-text-muted) 1px,
16
+ var(--wzl-fg-muted) 1px,
17
17
  transparent 1px,
18
18
  transparent calc(100% - 1px),
19
- var(--lk-text-muted) calc(100% - 1px)
19
+ var(--wzl-fg-muted) calc(100% - 1px)
20
20
  );
21
21
  }
22
22
 
@@ -2,8 +2,8 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  width: 280px;
5
- background: var(--lk-bg-elevated);
6
- border-left: 1px solid var(--lk-border);
5
+ background: var(--wzl-surface-raised);
6
+ border-left: 1px solid var(--wzl-border);
7
7
  transition: width 150ms ease;
8
8
 
9
9
  &--collapsed {
@@ -14,16 +14,16 @@
14
14
  .lk-sidebar-header {
15
15
  display: flex;
16
16
  align-items: center;
17
- padding: var(--lk-spacing-xs) var(--lk-spacing-sm);
18
- border-bottom: 1px solid var(--lk-divider);
19
- min-height: var(--lk-control-height);
17
+ padding: var(--wzl-space-xs) var(--wzl-space-sm);
18
+ border-bottom: 1px solid var(--wzl-line-subtle);
19
+ min-height: var(--wzl-control-h);
20
20
  }
21
21
 
22
22
  .lk-sidebar-title {
23
23
  flex: 1;
24
24
  font-weight: 600;
25
- color: var(--lk-text);
26
- font-size: var(--lk-font-size);
25
+ color: var(--wzl-fg);
26
+ font-size: var(--wzl-font-size);
27
27
 
28
28
  .lk-sidebar--collapsed & {
29
29
  display: none;
@@ -36,20 +36,20 @@
36
36
  padding: 0;
37
37
  background: transparent;
38
38
  border: 1px solid transparent;
39
- border-radius: var(--lk-radius-sm);
40
- color: var(--lk-text-muted);
39
+ border-radius: var(--wzl-radius-sm);
40
+ color: var(--wzl-fg-muted);
41
41
  cursor: pointer;
42
42
 
43
43
  &:hover {
44
- background: var(--lk-bg);
45
- color: var(--lk-text);
44
+ background: var(--wzl-surface);
45
+ color: var(--wzl-fg);
46
46
  }
47
47
  }
48
48
 
49
49
  .lk-sidebar-body {
50
50
  flex: 1;
51
51
  overflow: auto;
52
- padding: var(--lk-spacing-sm);
52
+ padding: var(--wzl-space-sm);
53
53
 
54
54
  .lk-sidebar--collapsed & {
55
55
  display: none;
@@ -1,21 +1,21 @@
1
1
  .lk-status-bar {
2
2
  display: flex;
3
3
  align-items: center;
4
- gap: var(--lk-spacing-md);
5
- padding: var(--lk-spacing-xs) var(--lk-spacing-sm);
6
- background: var(--lk-bg-elevated);
7
- border-top: 1px solid var(--lk-border);
8
- font-size: var(--lk-font-size-sm);
9
- color: var(--lk-text-muted);
10
- font-family: var(--lk-font-mono);
4
+ gap: var(--wzl-space-md);
5
+ padding: var(--wzl-space-xs) var(--wzl-space-sm);
6
+ background: var(--wzl-surface-raised);
7
+ border-top: 1px solid var(--wzl-border);
8
+ font-size: var(--wzl-font-size-sm);
9
+ color: var(--wzl-fg-muted);
10
+ font-family: var(--wzl-font-mono);
11
11
  }
12
12
 
13
13
  .lk-status-bar-section {
14
14
  display: inline-flex;
15
15
  align-items: center;
16
- gap: var(--lk-spacing-xs);
17
- padding: 0 var(--lk-spacing-xs);
18
- border-right: 1px solid var(--lk-divider);
16
+ gap: var(--wzl-space-xs);
17
+ padding: 0 var(--wzl-space-xs);
18
+ border-right: 1px solid var(--wzl-line-subtle);
19
19
 
20
20
  &:last-child { border-right: none; }
21
21
  }
@@ -1,17 +1,17 @@
1
1
  .lk-toolbar {
2
2
  display: flex;
3
3
  align-items: center;
4
- gap: var(--lk-spacing-sm);
5
- padding: var(--lk-spacing-xs) var(--lk-spacing-sm);
6
- background: var(--lk-bg-elevated);
7
- border-bottom: 1px solid var(--lk-border);
8
- min-height: calc(var(--lk-control-height) + 2 * var(--lk-spacing-xs));
4
+ gap: var(--wzl-space-sm);
5
+ padding: var(--wzl-space-xs) var(--wzl-space-sm);
6
+ background: var(--wzl-surface-raised);
7
+ border-bottom: 1px solid var(--wzl-border);
8
+ min-height: calc(var(--wzl-control-h) + 2 * var(--wzl-space-xs));
9
9
  }
10
10
 
11
11
  .lk-toolbar-title {
12
12
  font-weight: 600;
13
- color: var(--lk-text);
14
- margin-right: var(--lk-spacing-sm);
13
+ color: var(--wzl-fg);
14
+ margin-right: var(--wzl-space-sm);
15
15
  }
16
16
 
17
17
  .lk-toolbar-spacer {
@@ -19,25 +19,25 @@
19
19
  }
20
20
 
21
21
  .lk-toolbar-button {
22
- height: var(--lk-control-height);
23
- padding: 0 var(--lk-spacing-sm);
24
- font-size: var(--lk-font-size);
25
- color: var(--lk-text);
22
+ height: var(--wzl-control-h);
23
+ padding: 0 var(--wzl-space-sm);
24
+ font-size: var(--wzl-font-size);
25
+ color: var(--wzl-fg);
26
26
  background: transparent;
27
27
  border: 1px solid transparent;
28
- border-radius: var(--lk-radius);
28
+ border-radius: var(--wzl-radius-md);
29
29
  cursor: pointer;
30
30
 
31
31
  &:hover:not(:disabled) {
32
- background: var(--lk-bg);
33
- border-color: var(--lk-border);
32
+ background: var(--wzl-surface);
33
+ border-color: var(--wzl-border);
34
34
  }
35
35
  &:focus-visible {
36
- outline: 2px solid var(--lk-focus-ring);
36
+ outline: 2px solid var(--wzl-focus-ring);
37
37
  outline-offset: 1px;
38
38
  }
39
39
  &:disabled {
40
- color: var(--lk-text-disabled);
40
+ color: var(--wzl-fg-subtle);
41
41
  cursor: not-allowed;
42
42
  }
43
43
  }
@@ -1,5 +1,6 @@
1
1
  import { describe, expect, it, vi } from 'vitest';
2
2
  import { createMemoryAdapter } from './adapters';
3
+ import { labStorageKey } from './helpers';
3
4
  import { createLabStore } from './store';
4
5
 
5
6
  function makeStore(overrides?: Partial<Parameters<typeof createLabStore>[0]>) {
@@ -17,14 +18,14 @@ describe('createLabStore — initial state', () => {
17
18
  expect(s.getState().savedSnapshots).toEqual([]);
18
19
  });
19
20
 
20
- it('uses initialTheme when provided', () => {
21
- const s = makeStore({ initialTheme: 'light' });
22
- expect(s.getState().theme).toBe('light');
21
+ it('uses initialMode when provided', () => {
22
+ const s = makeStore({ initialMode: 'light' });
23
+ expect(s.getState().mode).toBe('light');
23
24
  });
24
25
 
25
- it('defaults theme to auto', () => {
26
+ it('defaults mode to auto', () => {
26
27
  const s = makeStore();
27
- expect(s.getState().theme).toBe('auto');
28
+ expect(s.getState().mode).toBe('auto');
28
29
  });
29
30
  });
30
31
 
@@ -104,11 +105,18 @@ describe('updateWorkspaceConfig', () => {
104
105
  });
105
106
  });
106
107
 
107
- describe('setTheme', () => {
108
- it('updates theme', () => {
108
+ describe('setMode', () => {
109
+ it('updates mode', () => {
109
110
  const s = makeStore();
110
- s.getState().setTheme('interstellar');
111
- expect(s.getState().theme).toBe('interstellar');
111
+ s.getState().setMode('dark');
112
+ expect(s.getState().mode).toBe('dark');
113
+ });
114
+
115
+ it('hydrates a stored interstellar preference as dark', () => {
116
+ const storage = createMemoryAdapter();
117
+ storage.write(labStorageKey('test', 'theme'), 'interstellar');
118
+ const s = createLabStore({ storageKey: 'test', storage });
119
+ expect(s.getState().mode).toBe('dark');
112
120
  });
113
121
  });
114
122
 
@@ -8,6 +8,7 @@ import {
8
8
  import type {
9
9
  CreateLabStoreOptions,
10
10
  InstrumentSerializers,
11
+ LabMode,
11
12
  LabStoreState,
12
13
  SavedSnapshot,
13
14
  WorkspaceRecord,
@@ -30,7 +31,7 @@ export interface LabStoreActions {
30
31
  loadSnapshot: (snapshotId: string, workspaceId: string) => void;
31
32
  deleteSnapshot: (snapshotId: string) => void;
32
33
  listSnapshots: (workspaceId?: string) => SavedSnapshot[];
33
- setTheme: (theme: 'light' | 'interstellar' | 'auto') => void;
34
+ setMode: (mode: LabMode) => void;
34
35
  }
35
36
 
36
37
  export type LabStore = StoreApi<LabStoreState & LabStoreActions> & {
@@ -58,18 +59,20 @@ export function createLabStore(options: CreateLabStoreOptions): LabStore {
58
59
  }
59
60
  }
60
61
 
61
- const themeRaw = options.storage.read(labStorageKey(options.storageKey, 'theme'));
62
- let hydratedTheme: 'light' | 'interstellar' | 'auto';
63
- if (themeRaw === 'light' || themeRaw === 'interstellar' || themeRaw === 'auto') {
64
- hydratedTheme = themeRaw;
62
+ const modeRaw = options.storage.read(labStorageKey(options.storageKey, 'theme'));
63
+ // `interstellar` was the dark mode's name back when it was a theme.
64
+ const stored = modeRaw === 'interstellar' ? 'dark' : modeRaw;
65
+ let hydratedMode: LabMode;
66
+ if (stored === 'light' || stored === 'dark' || stored === 'auto') {
67
+ hydratedMode = stored;
65
68
  } else {
66
- hydratedTheme = options.initialTheme ?? 'auto';
69
+ hydratedMode = options.initialMode ?? 'auto';
67
70
  }
68
71
 
69
72
  const store = createStore<LabStoreState & LabStoreActions>()((set, get) => ({
70
73
  workspaces: hydratedWorkspaces,
71
74
  savedSnapshots: hydratedSnapshots,
72
- theme: hydratedTheme,
75
+ mode: hydratedMode,
73
76
 
74
77
  addWorkspace: (record) => {
75
78
  set((s) => ({
@@ -194,8 +197,8 @@ export function createLabStore(options: CreateLabStoreOptions): LabStore {
194
197
  return [...filtered].sort((a, b) => b.savedAt - a.savedAt);
195
198
  },
196
199
 
197
- setTheme: (theme) => {
198
- set({ theme });
200
+ setMode: (mode) => {
201
+ set({ mode });
199
202
  scheduleFlush();
200
203
  },
201
204
  }));
@@ -212,7 +215,7 @@ export function createLabStore(options: CreateLabStoreOptions): LabStore {
212
215
  labStorageKey(options.storageKey, 'saves'),
213
216
  JSON.stringify(s.savedSnapshots),
214
217
  );
215
- options.storage.write(labStorageKey(options.storageKey, 'theme'), s.theme);
218
+ options.storage.write(labStorageKey(options.storageKey, 'theme'), s.mode);
216
219
  flushTimer = null;
217
220
  }, 300);
218
221
  }
@@ -22,10 +22,13 @@ export interface SavedSnapshot {
22
22
  savedAt: number;
23
23
  }
24
24
 
25
+ /** `auto` follows the OS; the other two are an explicit choice. */
26
+ export type LabMode = 'auto' | 'light' | 'dark';
27
+
25
28
  export interface LabStoreState {
26
29
  workspaces: WorkspaceRecord[];
27
30
  savedSnapshots: SavedSnapshot[];
28
- theme: 'light' | 'interstellar' | 'auto';
31
+ mode: LabMode;
29
32
  }
30
33
 
31
34
  export interface StorageAdapter {
@@ -44,7 +47,7 @@ export interface ExperimentStateHandle<TS, TC> {
44
47
  export interface CreateLabStoreOptions {
45
48
  storageKey: string;
46
49
  storage: StorageAdapter;
47
- initialTheme?: 'light' | 'interstellar' | 'auto';
50
+ initialMode?: LabMode;
48
51
  }
49
52
 
50
53
  export type InstrumentSerializers = Record<
@@ -2,8 +2,8 @@
2
2
  // into the library — imported by Interstellar.stories.tsx for vite/storybook.
3
3
 
4
4
  .lk-theme-doc {
5
- font-family: var(--lk-font);
6
- color: var(--lk-text);
5
+ font-family: var(--wzl-font-ui);
6
+ color: var(--wzl-fg);
7
7
  }
8
8
 
9
9
  .lk-theme-doc__grid {
@@ -13,8 +13,8 @@
13
13
  }
14
14
 
15
15
  .lk-theme-doc__heading {
16
- font: 300 0.72rem/1 var(--lk-font-display);
17
- color: var(--lk-text-muted);
16
+ font: 300 0.72rem/1 var(--wzl-font-display);
17
+ color: var(--wzl-fg-muted);
18
18
  text-transform: uppercase;
19
19
  letter-spacing: 0.08em;
20
20
  margin: 0 0 12px;
@@ -30,19 +30,19 @@
30
30
  display: flex;
31
31
  align-items: center;
32
32
  gap: 12px;
33
- background: var(--lk-bg-elevated);
34
- border: 1px solid var(--lk-border);
35
- border-radius: var(--lk-radius-lg);
33
+ background: var(--wzl-surface-raised);
34
+ border: 1px solid var(--wzl-border);
35
+ border-radius: var(--wzl-radius-lg);
36
36
  padding: 10px 12px;
37
- backdrop-filter: blur(var(--lk-glass-blur, 0));
38
- -webkit-backdrop-filter: blur(var(--lk-glass-blur, 0));
37
+ backdrop-filter: blur(var(--wzl-glass-blur));
38
+ -webkit-backdrop-filter: blur(var(--wzl-glass-blur));
39
39
  }
40
40
 
41
41
  .lk-theme-doc__swatch-fill {
42
42
  width: 48px;
43
43
  height: 48px;
44
- border-radius: var(--lk-radius-sm);
45
- border: 1px solid var(--lk-border);
44
+ border-radius: var(--wzl-radius-sm);
45
+ border: 1px solid var(--wzl-border);
46
46
  flex-shrink: 0;
47
47
  }
48
48
 
@@ -55,31 +55,31 @@
55
55
  }
56
56
 
57
57
  .lk-theme-doc__swatch-name {
58
- font: 300 0.95rem/1 var(--lk-font-display);
59
- color: var(--lk-text);
58
+ font: 300 0.95rem/1 var(--wzl-font-display);
59
+ color: var(--wzl-fg);
60
60
  }
61
61
 
62
62
  .lk-theme-doc__swatch-var,
63
63
  .lk-theme-doc__swatch-value {
64
- font: 400 0.7rem/1.2 var(--lk-font-mono);
65
- color: var(--lk-text-muted);
64
+ font: 400 0.7rem/1.2 var(--wzl-font-mono);
65
+ color: var(--wzl-fg-muted);
66
66
  word-break: break-all;
67
67
  }
68
68
 
69
69
  .lk-theme-doc__swatch-value {
70
- color: var(--lk-text);
70
+ color: var(--wzl-fg);
71
71
  }
72
72
 
73
73
  .lk-theme-doc__nebula {
74
74
  width: 100%;
75
75
  height: 200px;
76
- border-radius: var(--lk-radius-lg);
77
- border: 1px solid var(--lk-border);
76
+ border-radius: var(--wzl-radius-lg);
77
+ border: 1px solid var(--wzl-border);
78
78
  }
79
79
 
80
80
  .lk-theme-doc__note {
81
- font: 400 0.85rem/1.5 var(--lk-font);
82
- color: var(--lk-text-muted);
81
+ font: 400 0.85rem/1.5 var(--wzl-font-ui);
82
+ color: var(--wzl-fg-muted);
83
83
  margin-top: 12px;
84
84
  max-width: 640px;
85
85
  }