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