@loworbitstudio/visor-core 0.4.1 → 0.6.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.
package/dist/index.css CHANGED
@@ -5,4 +5,6 @@
5
5
  ============================================ */
6
6
 
7
7
  /* Full design token bundle */
8
+ @layer visor-primitives, visor-semantic, visor-adaptive, visor-bridge;
9
+
8
10
  @import './tokens.css';
@@ -3,7 +3,9 @@
3
3
  Generated by @loworbitstudio/visor-core
4
4
  DO NOT EDIT — run `npm run build` to regenerate
5
5
  ============================================ */
6
+ @layer visor-primitives, visor-semantic, visor-adaptive, visor-bridge;
6
7
 
8
+ @layer visor-primitives {
7
9
  /* --- Primitive: Colors --- */
8
10
  :root {
9
11
  --color-neutral-50: #f9fafb;
@@ -98,6 +100,15 @@
98
100
  }
99
101
 
100
102
 
103
+ /* --- Primitive: Stroke Widths --- */
104
+ :root {
105
+ --stroke-width-thin: 1px;
106
+ --stroke-width-regular: 1.5px;
107
+ --stroke-width-medium: 2px;
108
+ --stroke-width-thick: 2.5px;
109
+ }
110
+
111
+
101
112
  /* --- Primitive: Font Families --- */
102
113
  :root {
103
114
  --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
@@ -107,6 +118,7 @@
107
118
 
108
119
  /* --- Primitive: Font Sizes --- */
109
120
  :root {
121
+ --font-size-2xs: 0.6875rem; /* 11px */
110
122
  --font-size-xs: 0.75rem; /* 12px */
111
123
  --font-size-sm: 0.875rem; /* 14px */
112
124
  --font-size-base: 1rem; /* 16px */
@@ -160,6 +172,19 @@
160
172
  }
161
173
 
162
174
 
175
+ /* --- Primitive: Opacity --- */
176
+ :root {
177
+ --opacity-5: 0.05;
178
+ --opacity-10: 0.1;
179
+ --opacity-12: 0.12;
180
+ --opacity-20: 0.2;
181
+ --opacity-40: 0.4;
182
+ --opacity-50: 0.5;
183
+ --opacity-60: 0.6;
184
+ --opacity-80: 0.8;
185
+ }
186
+
187
+
163
188
  /* --- Primitive: Overlay --- */
164
189
  :root {
165
190
  --overlay-bg: rgba(0, 0, 0, 0.5);
@@ -192,3 +217,4 @@
192
217
  --motion-easing-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
193
218
  --motion-easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
194
219
  }
220
+ }
package/dist/semantic.css CHANGED
@@ -3,7 +3,9 @@
3
3
  Generated by @loworbitstudio/visor-core
4
4
  DO NOT EDIT — run `npm run build` to regenerate
5
5
  ============================================ */
6
+ @layer visor-primitives, visor-semantic, visor-adaptive, visor-bridge;
6
7
 
8
+ @layer visor-semantic {
7
9
  /* --- Semantic: Text --- */
8
10
  :root {
9
11
  --text-primary: var(--color-neutral-900);
@@ -33,6 +35,7 @@
33
35
  --surface-interactive-hover: var(--color-neutral-50);
34
36
  --surface-interactive-active: var(--color-neutral-100);
35
37
  --surface-interactive-disabled: var(--color-neutral-50);
38
+ --surface-selected: var(--color-primary-100);
36
39
  --surface-accent-subtle: var(--color-primary-50);
37
40
  --surface-accent-default: var(--color-primary-500);
38
41
  --surface-accent-strong: var(--color-primary-600);
@@ -44,6 +47,11 @@
44
47
  --surface-error-default: var(--color-error-500);
45
48
  --surface-info-subtle: var(--color-info-50);
46
49
  --surface-info-default: var(--color-info-500);
50
+ --surface-elev-0: var(--color-neutral-950);
51
+ --surface-elev-1: var(--color-neutral-900);
52
+ --surface-elev-2: var(--color-neutral-800);
53
+ --surface-elev-3: var(--color-neutral-700);
54
+ --surface-elev-4: var(--color-neutral-600);
47
55
  }
48
56
 
49
57
 
@@ -168,3 +176,4 @@
168
176
  --sidebar-ring: var(--color-primary-500);
169
177
  --sidebar-text-muted: var(--color-neutral-500);
170
178
  }
179
+ }
@@ -0,0 +1,479 @@
1
+ @layer visor-primitives, visor-semantic, visor-adaptive, visor-bridge;
2
+
3
+ @layer visor-adaptive {
4
+ /* ── Section 1: Shared tokens (mode-independent) ── */
5
+
6
+ /* --- Primitive: Colors --- */
7
+ .blackout-theme {
8
+ min-height: 100vh;
9
+ font-size: 1rem;
10
+ background: var(--surface-page, var(--surface-background));
11
+ color: var(--text-primary);
12
+ font-family: var(--font-sans);
13
+
14
+ --color-white: #ffffff;
15
+ --color-black: #000000;
16
+ --color-primary-50: #f5f5f5;
17
+ --color-primary-100: #f2f2f2;
18
+ --color-primary-200: #ededed;
19
+ --color-primary-300: #e6e6e6;
20
+ --color-primary-400: #dcdcdc;
21
+ --color-primary-500: #666666;
22
+ --color-primary-600: #555555;
23
+ --color-primary-700: #424242;
24
+ --color-primary-800: #2e2e2e;
25
+ --color-primary-900: #1b1b1b;
26
+ --color-primary-950: #090909;
27
+ --color-accent-50: #f5f5f5;
28
+ --color-accent-100: #f2f2f2;
29
+ --color-accent-200: #ededed;
30
+ --color-accent-300: #e6e6e6;
31
+ --color-accent-400: #dcdcdc;
32
+ --color-accent-500: #666666;
33
+ --color-accent-600: #555555;
34
+ --color-accent-700: #424242;
35
+ --color-accent-800: #2e2e2e;
36
+ --color-accent-900: #1b1b1b;
37
+ --color-accent-950: #090909;
38
+ --color-neutral-50: #f5f5f5;
39
+ --color-neutral-100: #f1f1f1;
40
+ --color-neutral-200: #eaeaea;
41
+ --color-neutral-300: #e0e0e0;
42
+ --color-neutral-400: #d2d2d2;
43
+ --color-neutral-500: #333333;
44
+ --color-neutral-600: #555555;
45
+ --color-neutral-700: #424242;
46
+ --color-neutral-800: #2e2e2e;
47
+ --color-neutral-900: #1b1b1b;
48
+ --color-neutral-950: #090909;
49
+ --color-success-50: #e8fbeb;
50
+ --color-success-100: #defde3;
51
+ --color-success-500: #22c55e;
52
+ --color-success-600: #00672b;
53
+ --color-success-700: #005120;
54
+ --color-success-900: #002209;
55
+ --color-warning-50: #fff3e6;
56
+ --color-warning-100: #fff1e3;
57
+ --color-warning-500: #f59e0b;
58
+ --color-warning-600: #774a01;
59
+ --color-warning-700: #5e3900;
60
+ --color-warning-900: #281600;
61
+ --color-error-50: #fff2f0;
62
+ --color-error-100: #ffefed;
63
+ --color-error-500: #ef4444;
64
+ --color-error-600: #a30016;
65
+ --color-error-700: #81000f;
66
+ --color-error-900: #3a0003;
67
+ --color-info-50: #ecf7ff;
68
+ --color-info-100: #e8f5ff;
69
+ --color-info-500: #0ea5e9;
70
+ --color-info-600: #005c85;
71
+ --color-info-700: #004869;
72
+ --color-info-900: #001d2e;
73
+ }
74
+
75
+
76
+ /* --- Primitive: Spacing --- */
77
+ .blackout-theme {
78
+ --spacing-0: 0;
79
+ --spacing-1: 0.25rem;
80
+ --spacing-2: 0.5rem;
81
+ --spacing-3: 0.75rem;
82
+ --spacing-4: 1rem;
83
+ --spacing-5: 1.25rem;
84
+ --spacing-6: 1.5rem;
85
+ --spacing-8: 2rem;
86
+ --spacing-10: 2.5rem;
87
+ --spacing-12: 3rem;
88
+ --spacing-16: 4rem;
89
+ --spacing-20: 5rem;
90
+ --spacing-24: 6rem;
91
+ }
92
+
93
+
94
+ /* --- Primitive: Border Radius --- */
95
+ .blackout-theme {
96
+ --radius-none: 0;
97
+ --radius-sm: 0.125rem; /* 2px */
98
+ --radius-md: 0.25rem; /* 4px */
99
+ --radius-lg: 0.5rem; /* 8px */
100
+ --radius-xl: 0.75rem; /* 12px */
101
+ --radius-2xl: 0.9997499999999999rem; /* 16px */
102
+ --radius-3xl: 1.5rem; /* 24px */
103
+ --radius-full: 9999px;
104
+ }
105
+
106
+
107
+ /* --- Primitive: Typography --- */
108
+ .blackout-theme {
109
+ --font-display: Satoshi;
110
+ --font-sans: Satoshi;
111
+ --font-heading: var(--font-sans);
112
+ --font-body: Satoshi;
113
+ --font-mono: "SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", monospace;
114
+ --font-size-xs: 0.75rem; /* 12px */
115
+ --font-size-sm: 0.875rem; /* 14px */
116
+ --font-size-base: 1rem; /* 16px */
117
+ --font-size-lg: 1.125rem; /* 18px */
118
+ --font-size-xl: 1.25rem; /* 20px */
119
+ --font-size-2xl: 1.5rem; /* 24px */
120
+ --font-size-3xl: 1.875rem; /* 30px */
121
+ --font-size-4xl: 2.25rem; /* 36px */
122
+ --font-weight-normal: 400;
123
+ --font-weight-medium: 500;
124
+ --font-weight-semibold: 700;
125
+ --font-weight-bold: 700;
126
+ --line-height-none: 1;
127
+ --line-height-tight: 1.25;
128
+ --line-height-snug: 1.375;
129
+ --line-height-normal: 1.5;
130
+ --line-height-relaxed: 1.625;
131
+ --line-height-loose: 2;
132
+ --letter-spacing-normal: 0.05em;
133
+ }
134
+
135
+
136
+ /* --- Primitive: Shadows --- */
137
+ .blackout-theme {
138
+ --shadow-xs: none;
139
+ --shadow-sm: none;
140
+ --shadow-md: none;
141
+ --shadow-lg: none;
142
+ --shadow-xl: none;
143
+ }
144
+
145
+
146
+ /* --- Primitive: Motion --- */
147
+ .blackout-theme {
148
+ --motion-duration-100: 100ms;
149
+ --motion-duration-150: 150ms;
150
+ --motion-duration-200: 150ms;
151
+ --motion-duration-300: 300ms;
152
+ --motion-duration-500: 300ms;
153
+ --motion-duration-800: 800ms;
154
+ --motion-easing-linear: linear;
155
+ --motion-easing-ease-in: cubic-bezier(0.4, 0, 1, 1);
156
+ --motion-easing-ease-out: cubic-bezier(0, 0, 0.2, 1);
157
+ --motion-easing-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
158
+ --motion-easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
159
+ }
160
+
161
+
162
+ /* --- Primitive: Miscellaneous --- */
163
+ .blackout-theme {
164
+ --border-width-1: 1px;
165
+ --border-width-2: 2px;
166
+ --border-width-3: 3px;
167
+ --border-width-4: 4px;
168
+ --z-base: 0;
169
+ --z-raised: 1;
170
+ --z-dropdown: 1000;
171
+ --z-sticky: 1100;
172
+ --z-modal: 1300;
173
+ --z-popover: 1400;
174
+ --z-toast: 1500;
175
+ --overlay-bg: rgba(0, 0, 0, 0.5);
176
+ --focus-ring-width: 2px;
177
+ --focus-ring-offset: 2px;
178
+ }
179
+
180
+
181
+ /* ── Section 2: Dark mode overrides ── */
182
+
183
+ /* --- Adaptive: Text (dark) — manual toggle --- */
184
+ .dark .blackout-theme {
185
+ --text-primary: rgba(255, 255, 255, 0.7);
186
+ --text-secondary: rgba(255, 255, 255, 0.70);
187
+ --text-tertiary: rgba(255, 255, 255, 0.55);
188
+ --text-disabled: rgba(255, 255, 255, 0.1);
189
+ --text-inverse: #1b1b1b;
190
+ --text-inverse-secondary: #424242;
191
+ --text-link: #dcdcdc;
192
+ --text-link-hover: #e6e6e6;
193
+ --text-success: #22c55e;
194
+ --text-warning: #f59e0b;
195
+ --text-error: #ef4444;
196
+ --text-info: #0ea5e9;
197
+ }
198
+
199
+
200
+ /* --- Adaptive: Surface (dark) — manual toggle --- */
201
+ .dark .blackout-theme {
202
+ --surface-page: #000000;
203
+ --surface-card: rgba(255, 255, 255, 0.04);
204
+ --surface-popover: #141414;
205
+ --surface-subtle: rgba(255, 255, 255, 0.02);
206
+ --surface-muted: rgba(255, 255, 255, 0.04);
207
+ --surface-overlay: #090909;
208
+ --surface-interactive-default: #2e2e2e;
209
+ --surface-interactive-hover: #424242;
210
+ --surface-interactive-active: #555555;
211
+ --surface-interactive-disabled: #2e2e2e;
212
+ --surface-selected: #2e2e2e;
213
+ --surface-accent-subtle: #1b1b1b;
214
+ --surface-accent-default: #666666;
215
+ --surface-accent-strong: #dcdcdc;
216
+ --surface-success-subtle: #002209;
217
+ --surface-success-default: #22c55e;
218
+ --surface-warning-subtle: #281600;
219
+ --surface-warning-default: #f59e0b;
220
+ --surface-error-subtle: #3a0003;
221
+ --surface-error-default: #ef4444;
222
+ --surface-info-subtle: #001d2e;
223
+ --surface-info-default: #0ea5e9;
224
+ --surface-elev-0: #090909;
225
+ --surface-elev-1: #1b1b1b;
226
+ --surface-elev-2: #2e2e2e;
227
+ --surface-elev-3: #424242;
228
+ --surface-elev-4: #555555;
229
+ }
230
+
231
+
232
+ /* --- Adaptive: Border (dark) — manual toggle --- */
233
+ .dark .blackout-theme {
234
+ --border-default: rgba(255, 255, 255, 0.06);
235
+ --border-muted: rgba(255, 255, 255, 0.03);
236
+ --border-strong: rgba(255, 255, 255, 0.1);
237
+ --border-focus: #dcdcdc;
238
+ --border-disabled: #2e2e2e;
239
+ --border-success: #22c55e;
240
+ --border-warning: #f59e0b;
241
+ --border-error: #ef4444;
242
+ --border-info: #0ea5e9;
243
+ }
244
+
245
+
246
+ /* --- Adaptive: Interactive (dark) — manual toggle --- */
247
+ .dark .blackout-theme {
248
+ --interactive-primary-bg: #666666;
249
+ --interactive-primary-bg-hover: #dcdcdc;
250
+ --interactive-primary-bg-active: #e6e6e6;
251
+ --interactive-primary-text: #ffffff;
252
+ --interactive-secondary-bg: #2e2e2e;
253
+ --interactive-secondary-bg-hover: #424242;
254
+ --interactive-secondary-bg-active: #555555;
255
+ --interactive-secondary-text: #f5f5f5;
256
+ --interactive-secondary-border: #555555;
257
+ --interactive-destructive-bg: #ef4444;
258
+ --interactive-destructive-bg-hover: #a30016;
259
+ --interactive-destructive-text: #ffffff;
260
+ --interactive-ghost-bg: #2e2e2e;
261
+ --interactive-ghost-bg-hover: #424242;
262
+ }
263
+
264
+
265
+ /* --- Adaptive: Text (dark) — prefers-color-scheme --- */
266
+ @media (prefers-color-scheme: dark) {
267
+ .blackout-theme:not(.light) {
268
+ --text-primary: rgba(255, 255, 255, 0.7);
269
+ --text-secondary: rgba(255, 255, 255, 0.70);
270
+ --text-tertiary: rgba(255, 255, 255, 0.55);
271
+ --text-disabled: rgba(255, 255, 255, 0.1);
272
+ --text-inverse: #1b1b1b;
273
+ --text-inverse-secondary: #424242;
274
+ --text-link: #dcdcdc;
275
+ --text-link-hover: #e6e6e6;
276
+ --text-success: #22c55e;
277
+ --text-warning: #f59e0b;
278
+ --text-error: #ef4444;
279
+ --text-info: #0ea5e9;
280
+ }
281
+ }
282
+
283
+
284
+ /* --- Adaptive: Surface (dark) — prefers-color-scheme --- */
285
+ @media (prefers-color-scheme: dark) {
286
+ .blackout-theme:not(.light) {
287
+ --surface-page: #000000;
288
+ --surface-card: rgba(255, 255, 255, 0.04);
289
+ --surface-popover: #141414;
290
+ --surface-subtle: rgba(255, 255, 255, 0.02);
291
+ --surface-muted: rgba(255, 255, 255, 0.04);
292
+ --surface-overlay: #090909;
293
+ --surface-interactive-default: #2e2e2e;
294
+ --surface-interactive-hover: #424242;
295
+ --surface-interactive-active: #555555;
296
+ --surface-interactive-disabled: #2e2e2e;
297
+ --surface-selected: #2e2e2e;
298
+ --surface-accent-subtle: #1b1b1b;
299
+ --surface-accent-default: #666666;
300
+ --surface-accent-strong: #dcdcdc;
301
+ --surface-success-subtle: #002209;
302
+ --surface-success-default: #22c55e;
303
+ --surface-warning-subtle: #281600;
304
+ --surface-warning-default: #f59e0b;
305
+ --surface-error-subtle: #3a0003;
306
+ --surface-error-default: #ef4444;
307
+ --surface-info-subtle: #001d2e;
308
+ --surface-info-default: #0ea5e9;
309
+ --surface-elev-0: #090909;
310
+ --surface-elev-1: #1b1b1b;
311
+ --surface-elev-2: #2e2e2e;
312
+ --surface-elev-3: #424242;
313
+ --surface-elev-4: #555555;
314
+ }
315
+ }
316
+
317
+
318
+ /* --- Adaptive: Border (dark) — prefers-color-scheme --- */
319
+ @media (prefers-color-scheme: dark) {
320
+ .blackout-theme:not(.light) {
321
+ --border-default: rgba(255, 255, 255, 0.06);
322
+ --border-muted: rgba(255, 255, 255, 0.03);
323
+ --border-strong: rgba(255, 255, 255, 0.1);
324
+ --border-focus: #dcdcdc;
325
+ --border-disabled: #2e2e2e;
326
+ --border-success: #22c55e;
327
+ --border-warning: #f59e0b;
328
+ --border-error: #ef4444;
329
+ --border-info: #0ea5e9;
330
+ }
331
+ }
332
+
333
+
334
+ /* --- Adaptive: Interactive (dark) — prefers-color-scheme --- */
335
+ @media (prefers-color-scheme: dark) {
336
+ .blackout-theme:not(.light) {
337
+ --interactive-primary-bg: #666666;
338
+ --interactive-primary-bg-hover: #dcdcdc;
339
+ --interactive-primary-bg-active: #e6e6e6;
340
+ --interactive-primary-text: #ffffff;
341
+ --interactive-secondary-bg: #2e2e2e;
342
+ --interactive-secondary-bg-hover: #424242;
343
+ --interactive-secondary-bg-active: #555555;
344
+ --interactive-secondary-text: #f5f5f5;
345
+ --interactive-secondary-border: #555555;
346
+ --interactive-destructive-bg: #ef4444;
347
+ --interactive-destructive-bg-hover: #a30016;
348
+ --interactive-destructive-text: #ffffff;
349
+ --interactive-ghost-bg: #2e2e2e;
350
+ --interactive-ghost-bg-hover: #424242;
351
+ }
352
+ }
353
+
354
+
355
+ /* ── Section 3: Light mode overrides ── */
356
+
357
+ /* --- Adaptive: Text (light) --- */
358
+ html:not(.dark) .blackout-theme {
359
+ --text-primary: rgba(255, 255, 255, 0.75);
360
+ --text-secondary: rgba(255, 255, 255, 0.5);
361
+ --text-tertiary: rgba(255, 255, 255, 0.55);
362
+ --text-disabled: rgba(255, 255, 255, 0.12);
363
+ --text-inverse: #ffffff;
364
+ --text-inverse-secondary: #eaeaea;
365
+ --text-link: #555555;
366
+ --text-link-hover: #424242;
367
+ --text-success: #005120;
368
+ --text-warning: #5e3900;
369
+ --text-error: #81000f;
370
+ --text-info: #004869;
371
+ }
372
+
373
+
374
+ /* --- Adaptive: Surface (light) --- */
375
+ html:not(.dark) .blackout-theme {
376
+ --surface-page: #0a0a0a;
377
+ --surface-card: rgba(255, 255, 255, 0.05);
378
+ --surface-popover: #141414;
379
+ --surface-subtle: rgba(255, 255, 255, 0.02);
380
+ --surface-muted: rgba(255, 255, 255, 0.05);
381
+ --surface-overlay: #1b1b1b;
382
+ --surface-interactive-default: transparent;
383
+ --surface-interactive-hover: rgba(255, 255, 255, 0.08);
384
+ --surface-interactive-active: rgba(255, 255, 255, 0.12);
385
+ --surface-interactive-disabled: rgba(255, 255, 255, 0.04);
386
+ --surface-selected: #f2f2f2;
387
+ --surface-accent-subtle: #f5f5f5;
388
+ --surface-accent-default: #666666;
389
+ --surface-accent-strong: #555555;
390
+ --surface-success-subtle: #e8fbeb;
391
+ --surface-success-default: #22c55e;
392
+ --surface-warning-subtle: #fff3e6;
393
+ --surface-warning-default: #f59e0b;
394
+ --surface-error-subtle: #fff2f0;
395
+ --surface-error-default: #ef4444;
396
+ --surface-info-subtle: #ecf7ff;
397
+ --surface-info-default: #0ea5e9;
398
+ --surface-elev-0: #ffffff;
399
+ --surface-elev-1: #f5f5f5;
400
+ --surface-elev-2: #f1f1f1;
401
+ --surface-elev-3: #eaeaea;
402
+ --surface-elev-4: #e0e0e0;
403
+ }
404
+
405
+
406
+ /* --- Adaptive: Border (light) --- */
407
+ html:not(.dark) .blackout-theme {
408
+ --border-default: rgba(255, 255, 255, 0.08);
409
+ --border-muted: rgba(255, 255, 255, 0.04);
410
+ --border-strong: rgba(255, 255, 255, 0.12);
411
+ --border-focus: #666666;
412
+ --border-disabled: #f1f1f1;
413
+ --border-success: #22c55e;
414
+ --border-warning: #f59e0b;
415
+ --border-error: #ef4444;
416
+ --border-info: #0ea5e9;
417
+ }
418
+
419
+
420
+ /* --- Adaptive: Interactive (light) --- */
421
+ html:not(.dark) .blackout-theme {
422
+ --interactive-primary-bg: #555555;
423
+ --interactive-primary-bg-hover: #424242;
424
+ --interactive-primary-bg-active: #2e2e2e;
425
+ --interactive-primary-text: #ffffff;
426
+ --interactive-secondary-bg: #ffffff;
427
+ --interactive-secondary-bg-hover: #f5f5f5;
428
+ --interactive-secondary-bg-active: #f1f1f1;
429
+ --interactive-secondary-text: #1b1b1b;
430
+ --interactive-secondary-border: #e0e0e0;
431
+ --interactive-destructive-bg: #a30016;
432
+ --interactive-destructive-bg-hover: #81000f;
433
+ --interactive-destructive-text: #ffffff;
434
+ --interactive-ghost-bg: #ffffff;
435
+ --interactive-ghost-bg-hover: #f1f1f1;
436
+ }
437
+
438
+
439
+ /* --- Fumadocs bridge: dark --- */
440
+ .dark .blackout-theme {
441
+ --color-fd-background: #000000;
442
+ --color-fd-foreground: rgba(255, 255, 255, 0.7);
443
+ --color-fd-card: rgba(255, 255, 255, 0.04);
444
+ --color-fd-card-foreground: rgba(255, 255, 255, 0.7);
445
+ --color-fd-border: rgba(255, 255, 255, 0.06);
446
+ --color-fd-muted: rgba(255, 255, 255, 0.04);
447
+ --color-fd-muted-foreground: rgba(255, 255, 255, 0.70);
448
+ --color-fd-accent: #666666;
449
+ --color-fd-accent-foreground: #ffffff;
450
+ --color-fd-primary: #666666;
451
+ --color-fd-primary-foreground: #ffffff;
452
+ --color-fd-secondary: rgba(255, 255, 255, 0.04);
453
+ --color-fd-secondary-foreground: rgba(255, 255, 255, 0.7);
454
+ --color-fd-popover: #141414;
455
+ --color-fd-popover-foreground: rgba(255, 255, 255, 0.7);
456
+ --color-fd-ring: #dcdcdc;
457
+ }
458
+
459
+
460
+ /* --- Fumadocs bridge: light --- */
461
+ html:not(.dark) .blackout-theme {
462
+ --color-fd-background: #0a0a0a;
463
+ --color-fd-foreground: rgba(255, 255, 255, 0.75);
464
+ --color-fd-card: rgba(255, 255, 255, 0.05);
465
+ --color-fd-card-foreground: rgba(255, 255, 255, 0.75);
466
+ --color-fd-border: rgba(255, 255, 255, 0.08);
467
+ --color-fd-muted: rgba(255, 255, 255, 0.05);
468
+ --color-fd-muted-foreground: rgba(255, 255, 255, 0.5);
469
+ --color-fd-accent: #666666;
470
+ --color-fd-accent-foreground: #ffffff;
471
+ --color-fd-primary: #666666;
472
+ --color-fd-primary-foreground: #ffffff;
473
+ --color-fd-secondary: rgba(255, 255, 255, 0.05);
474
+ --color-fd-secondary-foreground: rgba(255, 255, 255, 0.75);
475
+ --color-fd-popover: #141414;
476
+ --color-fd-popover-foreground: rgba(255, 255, 255, 0.75);
477
+ --color-fd-ring: #666666;
478
+ }
479
+ }
@@ -3,7 +3,9 @@
3
3
  Generated by @loworbitstudio/visor-core
4
4
  DO NOT EDIT — run `npm run build` to regenerate
5
5
  ============================================ */
6
+ @layer visor-primitives, visor-semantic, visor-adaptive, visor-bridge;
6
7
 
8
+ @layer visor-adaptive {
7
9
  /* --- Adaptive: Text (dark) — manual toggle --- */
8
10
  .dark,
9
11
  .theme-dark,
@@ -37,6 +39,7 @@
37
39
  --surface-interactive-hover: var(--color-neutral-700);
38
40
  --surface-interactive-active: var(--color-neutral-600);
39
41
  --surface-interactive-disabled: var(--color-neutral-800);
42
+ --surface-selected: var(--color-primary-800);
40
43
  --surface-accent-subtle: var(--color-primary-900);
41
44
  --surface-accent-default: var(--color-primary-500);
42
45
  --surface-accent-strong: var(--color-primary-400);
@@ -48,6 +51,11 @@
48
51
  --surface-error-default: var(--color-error-500);
49
52
  --surface-info-subtle: var(--color-info-900);
50
53
  --surface-info-default: var(--color-info-500);
54
+ --surface-elev-0: var(--color-neutral-950);
55
+ --surface-elev-1: var(--color-neutral-900);
56
+ --surface-elev-2: var(--color-neutral-800);
57
+ --surface-elev-3: var(--color-neutral-700);
58
+ --surface-elev-4: var(--color-neutral-600);
51
59
  }
52
60
 
53
61
 
@@ -170,6 +178,7 @@
170
178
  --surface-interactive-hover: var(--color-neutral-700);
171
179
  --surface-interactive-active: var(--color-neutral-600);
172
180
  --surface-interactive-disabled: var(--color-neutral-800);
181
+ --surface-selected: var(--color-primary-800);
173
182
  --surface-accent-subtle: var(--color-primary-900);
174
183
  --surface-accent-default: var(--color-primary-500);
175
184
  --surface-accent-strong: var(--color-primary-400);
@@ -181,6 +190,11 @@
181
190
  --surface-error-default: var(--color-error-500);
182
191
  --surface-info-subtle: var(--color-info-900);
183
192
  --surface-info-default: var(--color-info-500);
193
+ --surface-elev-0: var(--color-neutral-950);
194
+ --surface-elev-1: var(--color-neutral-900);
195
+ --surface-elev-2: var(--color-neutral-800);
196
+ --surface-elev-3: var(--color-neutral-700);
197
+ --surface-elev-4: var(--color-neutral-600);
184
198
  }
185
199
  }
186
200
 
@@ -270,3 +284,4 @@
270
284
  --sidebar-text-muted: var(--color-neutral-400);
271
285
  }
272
286
  }
287
+ }
@@ -3,7 +3,9 @@
3
3
  Generated by @loworbitstudio/visor-core
4
4
  DO NOT EDIT — run `npm run build` to regenerate
5
5
  ============================================ */
6
+ @layer visor-primitives, visor-semantic, visor-adaptive, visor-bridge;
6
7
 
8
+ @layer visor-adaptive {
7
9
  /* --- Adaptive: Text (light) --- */
8
10
  :root {
9
11
  --text-primary: var(--color-neutral-900);
@@ -33,6 +35,7 @@
33
35
  --surface-interactive-hover: var(--color-neutral-50);
34
36
  --surface-interactive-active: var(--color-neutral-100);
35
37
  --surface-interactive-disabled: var(--color-neutral-50);
38
+ --surface-selected: var(--color-primary-100);
36
39
  --surface-accent-subtle: var(--color-primary-50);
37
40
  --surface-accent-default: var(--color-primary-500);
38
41
  --surface-accent-strong: var(--color-primary-600);
@@ -44,6 +47,11 @@
44
47
  --surface-error-default: var(--color-error-500);
45
48
  --surface-info-subtle: var(--color-info-50);
46
49
  --surface-info-default: var(--color-info-500);
50
+ --surface-elev-0: var(--color-white);
51
+ --surface-elev-1: var(--color-neutral-50);
52
+ --surface-elev-2: var(--color-neutral-100);
53
+ --surface-elev-3: var(--color-neutral-200);
54
+ --surface-elev-4: var(--color-neutral-300);
47
55
  }
48
56
 
49
57
 
@@ -120,3 +128,4 @@
120
128
  --sidebar-ring: var(--color-primary-500);
121
129
  --sidebar-text-muted: var(--color-neutral-500);
122
130
  }
131
+ }