@weasel-js/labkit 0.7.2 → 1.0.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.
Files changed (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -3
  3. package/dist/_dts/{DrawCommand-CEvS5AdV.d.ts → DrawCommand-BwRCZYuo.d.ts} +106 -52
  4. package/dist/_dts/{useExperimentState-eSvpwV_P.d.ts → useExperimentState-CJn2hHzd.d.ts} +6 -4
  5. package/dist/{chunk-SSMHPMDV.js → chunk-53XSBIUK.js} +12 -11
  6. package/dist/chunk-53XSBIUK.js.map +1 -0
  7. package/dist/{chunk-BG6NLMOL.js → chunk-FP5LYDVX.js} +1229 -1227
  8. package/dist/chunk-FP5LYDVX.js.map +1 -0
  9. package/dist/{chunk-ERZQAU4N.js → chunk-HNXVLKBG.js} +3 -3
  10. package/dist/{chunk-ERZQAU4N.js.map → chunk-HNXVLKBG.js.map} +1 -1
  11. package/dist/{chunk-5XDFILHZ.js → chunk-XVBXYKFJ.js} +1675 -670
  12. package/dist/chunk-XVBXYKFJ.js.map +1 -0
  13. package/dist/fonts/inter-latin.woff2 +0 -0
  14. package/dist/fonts/oswald-latin-variable.woff2 +0 -0
  15. package/dist/index.d.ts +37 -13
  16. package/dist/index.js +776 -27
  17. package/dist/index.js.map +1 -1
  18. package/dist/passthrough/weasel-canvas.d.ts +1 -1
  19. package/dist/passthrough/weasel-canvas.js +1 -1
  20. package/dist/passthrough/weasel-ui.d.ts +332 -189
  21. package/dist/passthrough/weasel-ui.js +2 -2
  22. package/dist/state/index.d.ts +2 -2
  23. package/dist/state/index.js +2 -2
  24. package/dist/styles.css +229 -288
  25. package/dist/ui/layers/index.js +3 -3
  26. package/package.json +5 -6
  27. package/src/canvas/CanvasStack.less +1 -1
  28. package/src/controls/ControlPanel.less +12 -12
  29. package/src/dragdrop/DragGhost.less +2 -2
  30. package/src/dragdrop/Palette.less +6 -6
  31. package/src/index.ts +2 -0
  32. package/src/lab/Lab.test.tsx +20 -15
  33. package/src/lab/Lab.tsx +33 -32
  34. package/src/lab/LabContext.ts +3 -3
  35. package/src/lab/LabShell.less +14 -14
  36. package/src/lab/LabShell.test.tsx +7 -20
  37. package/src/lab/LabShell.tsx +22 -13
  38. package/src/lab/WorkspaceGrid.less +1 -1
  39. package/src/lab/WorkspaceGrid.stories.tsx +4 -4
  40. package/src/lab/index.ts +1 -1
  41. package/src/lab/useSystemMode.ts +30 -0
  42. package/src/layers/LayerList.less +9 -9
  43. package/src/primitives/FpsMeter.less +5 -5
  44. package/src/primitives/ScaleIndicator.less +7 -7
  45. package/src/primitives/Sidebar.less +12 -12
  46. package/src/primitives/StatusBar.less +10 -10
  47. package/src/primitives/Toolbar.less +16 -16
  48. package/src/state/store.test.ts +17 -9
  49. package/src/state/store.ts +13 -10
  50. package/src/state/types.ts +5 -2
  51. package/src/theme/Interstellar.stories.less +20 -20
  52. package/src/theme/Interstellar.stories.tsx +44 -59
  53. package/src/theme/base.less +29 -28
  54. package/src/theme/interstellar.test.ts +30 -0
  55. package/src/theme/interstellar.tokens.json +57 -0
  56. package/src/theme/interstellar.ts +9 -0
  57. package/src/ui/layers/LayerStack.less +21 -21
  58. package/src/ui/properties/CurveField.less +5 -5
  59. package/src/ui/properties/EffectCard.tsx +2 -2
  60. package/src/ui/properties/PropertyGroup.less +6 -6
  61. package/src/ui/properties/PropertyPanel.less +70 -70
  62. package/src/ui/properties/SpeechBalloonPanels.stories.tsx +1 -1
  63. package/src/ui/properties/storyLayouts.tsx +1 -1
  64. package/src/workspace/Workspace.less +14 -14
  65. package/src/workspace/Workspace.stories.tsx +2 -2
  66. package/src/workspace/Workspace.test.tsx +2 -2
  67. package/dist/chunk-5XDFILHZ.js.map +0 -1
  68. package/dist/chunk-BG6NLMOL.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/fonts/oswald-latin-variable.woff2 +0 -0
  73. package/src/theme/interstellar.less +0 -34
  74. package/src/theme/light.less +0 -14
  75. 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
  }
@@ -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
  }