@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.
@@ -0,0 +1,529 @@
1
+ @font-face {
2
+ font-family: "Product Sans";
3
+ src: url("https://fonts.visor.design/low-orbit-studio/product-sans/ProductSans-Regular.woff2") format("woff2");
4
+ font-weight: 400;
5
+ font-style: normal;
6
+ font-display: swap;
7
+ }
8
+
9
+ @font-face {
10
+ font-family: "Product Sans";
11
+ src: url("https://fonts.visor.design/low-orbit-studio/product-sans/ProductSans-Bold.woff2") format("woff2");
12
+ font-weight: 700;
13
+ font-style: normal;
14
+ font-display: swap;
15
+ }
16
+
17
+ @layer visor-primitives, visor-semantic, visor-adaptive, visor-bridge;
18
+
19
+ @layer visor-adaptive {
20
+ /* ── Section 1: Shared tokens (mode-independent) ── */
21
+
22
+ /* --- Primitive: Colors --- */
23
+ .modern-minimal-theme {
24
+ min-height: 100vh;
25
+ font-size: 1rem;
26
+ background: var(--surface-page, var(--surface-background));
27
+ color: var(--text-primary);
28
+ font-family: var(--font-sans);
29
+
30
+ --color-white: #ffffff;
31
+ --color-black: #000000;
32
+ --color-primary-50: #e8faf0;
33
+ --color-primary-100: #ddfceb;
34
+ --color-primary-200: #ccffe3;
35
+ --color-primary-300: #bbffdb;
36
+ --color-primary-400: #a0ffcf;
37
+ --color-primary-500: #04bf81;
38
+ --color-primary-600: #016643;
39
+ --color-primary-700: #005033;
40
+ --color-primary-800: #003823;
41
+ --color-primary-900: #002113;
42
+ --color-primary-950: #000d05;
43
+ --color-accent-50: #e8faf0;
44
+ --color-accent-100: #ddfceb;
45
+ --color-accent-200: #ccffe3;
46
+ --color-accent-300: #bbffdb;
47
+ --color-accent-400: #a0ffcf;
48
+ --color-accent-500: #04bf81;
49
+ --color-accent-600: #016643;
50
+ --color-accent-700: #005033;
51
+ --color-accent-800: #003823;
52
+ --color-accent-900: #002113;
53
+ --color-accent-950: #000d05;
54
+ --color-neutral-50: #f4f5f7;
55
+ --color-neutral-100: #f0f2f6;
56
+ --color-neutral-200: #eaeef5;
57
+ --color-neutral-300: #e2e8f3;
58
+ --color-neutral-400: #d8dfec;
59
+ --color-neutral-500: #6c727e;
60
+ --color-neutral-600: #505561;
61
+ --color-neutral-700: #3d424d;
62
+ --color-neutral-800: #292e38;
63
+ --color-neutral-900: #171b22;
64
+ --color-neutral-950: #07090e;
65
+ --color-success-50: #e8fbeb;
66
+ --color-success-100: #defde3;
67
+ --color-success-500: #22c55e;
68
+ --color-success-600: #00672b;
69
+ --color-success-700: #005120;
70
+ --color-success-900: #002209;
71
+ --color-warning-50: #fff3e6;
72
+ --color-warning-100: #fff1e3;
73
+ --color-warning-500: #f59e0b;
74
+ --color-warning-600: #774a01;
75
+ --color-warning-700: #5e3900;
76
+ --color-warning-900: #281600;
77
+ --color-error-50: #fff2f0;
78
+ --color-error-100: #ffefed;
79
+ --color-error-500: #ef4444;
80
+ --color-error-600: #a30016;
81
+ --color-error-700: #81000f;
82
+ --color-error-900: #3a0003;
83
+ --color-info-50: #ecf7ff;
84
+ --color-info-100: #e8f5ff;
85
+ --color-info-500: #0ea5e9;
86
+ --color-info-600: #005c85;
87
+ --color-info-700: #004869;
88
+ --color-info-900: #001d2e;
89
+ }
90
+
91
+
92
+ /* --- Primitive: Spacing --- */
93
+ .modern-minimal-theme {
94
+ --spacing-0: 0;
95
+ --spacing-1: 0.25rem;
96
+ --spacing-2: 0.5rem;
97
+ --spacing-3: 0.75rem;
98
+ --spacing-4: 1rem;
99
+ --spacing-5: 1.25rem;
100
+ --spacing-6: 1.5rem;
101
+ --spacing-8: 2rem;
102
+ --spacing-10: 2.5rem;
103
+ --spacing-12: 3rem;
104
+ --spacing-16: 4rem;
105
+ --spacing-20: 5rem;
106
+ --spacing-24: 6rem;
107
+ }
108
+
109
+
110
+ /* --- Primitive: Border Radius --- */
111
+ .modern-minimal-theme {
112
+ --radius-none: 0;
113
+ --radius-sm: 0.5rem; /* 8px */
114
+ --radius-md: 0.75rem; /* 12px */
115
+ --radius-lg: 1rem; /* 16px */
116
+ --radius-xl: 1.25rem; /* 20px */
117
+ --radius-2xl: 1.66625rem; /* 27px */
118
+ --radius-3xl: 2.5rem; /* 40px */
119
+ --radius-full: 9999px;
120
+ }
121
+
122
+
123
+ /* --- Primitive: Typography --- */
124
+ .modern-minimal-theme {
125
+ --font-display: Product Sans;
126
+ --font-sans: Product Sans;
127
+ --font-heading: var(--font-sans);
128
+ --font-body: Product Sans;
129
+ --font-mono: "SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", monospace;
130
+ --font-size-xs: 0.75rem; /* 12px */
131
+ --font-size-sm: 0.875rem; /* 14px */
132
+ --font-size-base: 1rem; /* 16px */
133
+ --font-size-lg: 1.125rem; /* 18px */
134
+ --font-size-xl: 1.25rem; /* 20px */
135
+ --font-size-2xl: 1.5rem; /* 24px */
136
+ --font-size-3xl: 1.875rem; /* 30px */
137
+ --font-size-4xl: 2.25rem; /* 36px */
138
+ --font-weight-normal: 400;
139
+ --font-weight-medium: 500;
140
+ --font-weight-semibold: 700;
141
+ --font-weight-bold: 700;
142
+ --line-height-none: 1;
143
+ --line-height-tight: 1.25;
144
+ --line-height-snug: 1.375;
145
+ --line-height-normal: 1.5;
146
+ --line-height-relaxed: 1.625;
147
+ --line-height-loose: 2;
148
+ --letter-spacing-normal: 0.05em;
149
+ }
150
+
151
+
152
+ /* --- Primitive: Shadows --- */
153
+ .modern-minimal-theme {
154
+ --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.04);
155
+ --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04);
156
+ --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.05), 0 2px 4px rgba(0, 0, 0, 0.04);
157
+ --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.06), 0 4px 6px rgba(0, 0, 0, 0.04);
158
+ --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.06), 0 8px 10px rgba(0, 0, 0, 0.03);
159
+ }
160
+
161
+
162
+ /* --- Primitive: Motion --- */
163
+ .modern-minimal-theme {
164
+ --motion-duration-100: 100ms;
165
+ --motion-duration-150: 150ms;
166
+ --motion-duration-200: 200ms;
167
+ --motion-duration-300: 300ms;
168
+ --motion-duration-500: 400ms;
169
+ --motion-duration-800: 800ms;
170
+ --motion-easing-linear: linear;
171
+ --motion-easing-ease-in: cubic-bezier(0.4, 0, 1, 1);
172
+ --motion-easing-ease-out: cubic-bezier(0, 0, 0.2, 1);
173
+ --motion-easing-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
174
+ --motion-easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
175
+ }
176
+
177
+
178
+ /* --- Primitive: Miscellaneous --- */
179
+ .modern-minimal-theme {
180
+ --border-width-1: 1px;
181
+ --border-width-2: 2px;
182
+ --border-width-3: 3px;
183
+ --border-width-4: 4px;
184
+ --z-base: 0;
185
+ --z-raised: 1;
186
+ --z-dropdown: 1000;
187
+ --z-sticky: 1100;
188
+ --z-modal: 1300;
189
+ --z-popover: 1400;
190
+ --z-toast: 1500;
191
+ --overlay-bg: rgba(0, 0, 0, 0.5);
192
+ --focus-ring-width: 2px;
193
+ --focus-ring-offset: 2px;
194
+ }
195
+
196
+
197
+ /* ── Section 2: Dark mode overrides ── */
198
+
199
+ /* --- Primitive overrides (dark) — dark brand color anchors at shade 500 --- */
200
+ .dark .modern-minimal-theme {
201
+ --color-primary-50: #e7fbf0;
202
+ --color-primary-100: #dcfdeb;
203
+ --color-primary-200: #ceffe5;
204
+ --color-primary-300: #c0ffde;
205
+ --color-primary-400: #aaffd5;
206
+ --color-primary-500: #02cd8d;
207
+ --color-primary-600: #006644;
208
+ --color-primary-700: #005034;
209
+ --color-primary-800: #003823;
210
+ --color-primary-900: #002113;
211
+ --color-primary-950: #000d06;
212
+ }
213
+
214
+
215
+ /* --- Adaptive: Text (dark) — manual toggle --- */
216
+ .dark .modern-minimal-theme {
217
+ --text-primary: rgba(255, 255, 255, 0.7);
218
+ --text-secondary: rgba(255, 255, 255, 0.70);
219
+ --text-tertiary: rgba(255, 255, 255, 0.55);
220
+ --text-disabled: rgba(255, 255, 255, 0.1);
221
+ --text-inverse: #171b22;
222
+ --text-inverse-secondary: #3d424d;
223
+ --text-link: #a0ffcf;
224
+ --text-link-hover: #bbffdb;
225
+ --text-success: #22c55e;
226
+ --text-warning: #f59e0b;
227
+ --text-error: #ef4444;
228
+ --text-info: #0ea5e9;
229
+ }
230
+
231
+
232
+ /* --- Adaptive: Surface (dark) — manual toggle --- */
233
+ .dark .modern-minimal-theme {
234
+ --surface-page: #000000;
235
+ --surface-card: rgba(255, 255, 255, 0.04);
236
+ --surface-popover: #141414;
237
+ --surface-subtle: rgba(255, 255, 255, 0.02);
238
+ --surface-muted: rgba(255, 255, 255, 0.04);
239
+ --surface-overlay: #07090e;
240
+ --surface-interactive-default: #292e38;
241
+ --surface-interactive-hover: #3d424d;
242
+ --surface-interactive-active: #505561;
243
+ --surface-interactive-disabled: #292e38;
244
+ --surface-selected: #003823;
245
+ --surface-accent-subtle: #002113;
246
+ --surface-accent-default: #04bf81;
247
+ --surface-accent-strong: #a0ffcf;
248
+ --surface-success-subtle: #002209;
249
+ --surface-success-default: #22c55e;
250
+ --surface-warning-subtle: #281600;
251
+ --surface-warning-default: #f59e0b;
252
+ --surface-error-subtle: #3a0003;
253
+ --surface-error-default: #ef4444;
254
+ --surface-info-subtle: #001d2e;
255
+ --surface-info-default: #0ea5e9;
256
+ --surface-elev-0: #07090e;
257
+ --surface-elev-1: #171b22;
258
+ --surface-elev-2: #292e38;
259
+ --surface-elev-3: #3d424d;
260
+ --surface-elev-4: #505561;
261
+ }
262
+
263
+
264
+ /* --- Adaptive: Border (dark) — manual toggle --- */
265
+ .dark .modern-minimal-theme {
266
+ --border-default: rgba(255, 255, 255, 0.06);
267
+ --border-muted: rgba(255, 255, 255, 0.03);
268
+ --border-strong: rgba(255, 255, 255, 0.1);
269
+ --border-focus: #a0ffcf;
270
+ --border-disabled: #292e38;
271
+ --border-success: #22c55e;
272
+ --border-warning: #f59e0b;
273
+ --border-error: #ef4444;
274
+ --border-info: #0ea5e9;
275
+ }
276
+
277
+
278
+ /* --- Adaptive: Interactive (dark) — manual toggle --- */
279
+ .dark .modern-minimal-theme {
280
+ --interactive-primary-bg: #04bf81;
281
+ --interactive-primary-bg-hover: #a0ffcf;
282
+ --interactive-primary-bg-active: #bbffdb;
283
+ --interactive-primary-text: #ffffff;
284
+ --interactive-secondary-bg: #292e38;
285
+ --interactive-secondary-bg-hover: #3d424d;
286
+ --interactive-secondary-bg-active: #505561;
287
+ --interactive-secondary-text: #f4f5f7;
288
+ --interactive-secondary-border: #505561;
289
+ --interactive-destructive-bg: #ef4444;
290
+ --interactive-destructive-bg-hover: #a30016;
291
+ --interactive-destructive-text: #ffffff;
292
+ --interactive-ghost-bg: #292e38;
293
+ --interactive-ghost-bg-hover: #3d424d;
294
+ }
295
+
296
+
297
+ /* --- Adaptive: Text (dark) — prefers-color-scheme --- */
298
+ @media (prefers-color-scheme: dark) {
299
+ .modern-minimal-theme:not(.light) {
300
+ --text-primary: rgba(255, 255, 255, 0.7);
301
+ --text-secondary: rgba(255, 255, 255, 0.70);
302
+ --text-tertiary: rgba(255, 255, 255, 0.55);
303
+ --text-disabled: rgba(255, 255, 255, 0.1);
304
+ --text-inverse: #171b22;
305
+ --text-inverse-secondary: #3d424d;
306
+ --text-link: #a0ffcf;
307
+ --text-link-hover: #bbffdb;
308
+ --text-success: #22c55e;
309
+ --text-warning: #f59e0b;
310
+ --text-error: #ef4444;
311
+ --text-info: #0ea5e9;
312
+ }
313
+ }
314
+
315
+
316
+ /* --- Adaptive: Surface (dark) — prefers-color-scheme --- */
317
+ @media (prefers-color-scheme: dark) {
318
+ .modern-minimal-theme:not(.light) {
319
+ --surface-page: #000000;
320
+ --surface-card: rgba(255, 255, 255, 0.04);
321
+ --surface-popover: #141414;
322
+ --surface-subtle: rgba(255, 255, 255, 0.02);
323
+ --surface-muted: rgba(255, 255, 255, 0.04);
324
+ --surface-overlay: #07090e;
325
+ --surface-interactive-default: #292e38;
326
+ --surface-interactive-hover: #3d424d;
327
+ --surface-interactive-active: #505561;
328
+ --surface-interactive-disabled: #292e38;
329
+ --surface-selected: #003823;
330
+ --surface-accent-subtle: #002113;
331
+ --surface-accent-default: #04bf81;
332
+ --surface-accent-strong: #a0ffcf;
333
+ --surface-success-subtle: #002209;
334
+ --surface-success-default: #22c55e;
335
+ --surface-warning-subtle: #281600;
336
+ --surface-warning-default: #f59e0b;
337
+ --surface-error-subtle: #3a0003;
338
+ --surface-error-default: #ef4444;
339
+ --surface-info-subtle: #001d2e;
340
+ --surface-info-default: #0ea5e9;
341
+ --surface-elev-0: #07090e;
342
+ --surface-elev-1: #171b22;
343
+ --surface-elev-2: #292e38;
344
+ --surface-elev-3: #3d424d;
345
+ --surface-elev-4: #505561;
346
+ }
347
+ }
348
+
349
+
350
+ /* --- Adaptive: Border (dark) — prefers-color-scheme --- */
351
+ @media (prefers-color-scheme: dark) {
352
+ .modern-minimal-theme:not(.light) {
353
+ --border-default: rgba(255, 255, 255, 0.06);
354
+ --border-muted: rgba(255, 255, 255, 0.03);
355
+ --border-strong: rgba(255, 255, 255, 0.1);
356
+ --border-focus: #a0ffcf;
357
+ --border-disabled: #292e38;
358
+ --border-success: #22c55e;
359
+ --border-warning: #f59e0b;
360
+ --border-error: #ef4444;
361
+ --border-info: #0ea5e9;
362
+ }
363
+ }
364
+
365
+
366
+ /* --- Adaptive: Interactive (dark) — prefers-color-scheme --- */
367
+ @media (prefers-color-scheme: dark) {
368
+ .modern-minimal-theme:not(.light) {
369
+ --interactive-primary-bg: #04bf81;
370
+ --interactive-primary-bg-hover: #a0ffcf;
371
+ --interactive-primary-bg-active: #bbffdb;
372
+ --interactive-primary-text: #ffffff;
373
+ --interactive-secondary-bg: #292e38;
374
+ --interactive-secondary-bg-hover: #3d424d;
375
+ --interactive-secondary-bg-active: #505561;
376
+ --interactive-secondary-text: #f4f5f7;
377
+ --interactive-secondary-border: #505561;
378
+ --interactive-destructive-bg: #ef4444;
379
+ --interactive-destructive-bg-hover: #a30016;
380
+ --interactive-destructive-text: #ffffff;
381
+ --interactive-ghost-bg: #292e38;
382
+ --interactive-ghost-bg-hover: #3d424d;
383
+ }
384
+ }
385
+
386
+
387
+ /* --- Primitive overrides (dark) — prefers-color-scheme --- */
388
+ @media (prefers-color-scheme: dark) {
389
+ .modern-minimal-theme:not(.light) {
390
+ --color-primary-50: #e7fbf0;
391
+ --color-primary-100: #dcfdeb;
392
+ --color-primary-200: #ceffe5;
393
+ --color-primary-300: #c0ffde;
394
+ --color-primary-400: #aaffd5;
395
+ --color-primary-500: #02cd8d;
396
+ --color-primary-600: #006644;
397
+ --color-primary-700: #005034;
398
+ --color-primary-800: #003823;
399
+ --color-primary-900: #002113;
400
+ --color-primary-950: #000d06;
401
+ }
402
+ }
403
+
404
+
405
+ /* ── Section 3: Light mode overrides ── */
406
+
407
+ /* --- Adaptive: Text (light) --- */
408
+ html:not(.dark) .modern-minimal-theme {
409
+ --text-primary: rgba(0, 0, 0, 0.9);
410
+ --text-secondary: rgba(0, 0, 0, 0.55);
411
+ --text-tertiary: rgba(0, 0, 0, 0.55);
412
+ --text-disabled: #e2e8f3;
413
+ --text-inverse: #ffffff;
414
+ --text-inverse-secondary: #eaeef5;
415
+ --text-link: #016643;
416
+ --text-link-hover: #005033;
417
+ --text-success: #005120;
418
+ --text-warning: #5e3900;
419
+ --text-error: #81000f;
420
+ --text-info: #004869;
421
+ }
422
+
423
+
424
+ /* --- Adaptive: Surface (light) --- */
425
+ html:not(.dark) .modern-minimal-theme {
426
+ --surface-page: #FFFFFF;
427
+ --surface-card: #FFFFFF;
428
+ --surface-popover: #FFFFFF;
429
+ --surface-subtle: #f4f5f7;
430
+ --surface-muted: #f0f2f6;
431
+ --surface-overlay: #171b22;
432
+ --surface-interactive-default: #ffffff;
433
+ --surface-interactive-hover: #f4f5f7;
434
+ --surface-interactive-active: #f0f2f6;
435
+ --surface-interactive-disabled: #f4f5f7;
436
+ --surface-selected: #ddfceb;
437
+ --surface-accent-subtle: #e8faf0;
438
+ --surface-accent-default: #04bf81;
439
+ --surface-accent-strong: #016643;
440
+ --surface-success-subtle: #e8fbeb;
441
+ --surface-success-default: #22c55e;
442
+ --surface-warning-subtle: #fff3e6;
443
+ --surface-warning-default: #f59e0b;
444
+ --surface-error-subtle: #fff2f0;
445
+ --surface-error-default: #ef4444;
446
+ --surface-info-subtle: #ecf7ff;
447
+ --surface-info-default: #0ea5e9;
448
+ --surface-elev-0: #ffffff;
449
+ --surface-elev-1: #f4f5f7;
450
+ --surface-elev-2: #f0f2f6;
451
+ --surface-elev-3: #eaeef5;
452
+ --surface-elev-4: #e2e8f3;
453
+ }
454
+
455
+
456
+ /* --- Adaptive: Border (light) --- */
457
+ html:not(.dark) .modern-minimal-theme {
458
+ --border-default: #eaeef5;
459
+ --border-muted: #f0f2f6;
460
+ --border-strong: #e2e8f3;
461
+ --border-focus: #04bf81;
462
+ --border-disabled: #f0f2f6;
463
+ --border-success: #22c55e;
464
+ --border-warning: #f59e0b;
465
+ --border-error: #ef4444;
466
+ --border-info: #0ea5e9;
467
+ }
468
+
469
+
470
+ /* --- Adaptive: Interactive (light) --- */
471
+ html:not(.dark) .modern-minimal-theme {
472
+ --interactive-primary-bg: #016643;
473
+ --interactive-primary-bg-hover: #005033;
474
+ --interactive-primary-bg-active: #003823;
475
+ --interactive-primary-text: #ffffff;
476
+ --interactive-secondary-bg: #ffffff;
477
+ --interactive-secondary-bg-hover: #f4f5f7;
478
+ --interactive-secondary-bg-active: #f0f2f6;
479
+ --interactive-secondary-text: #171b22;
480
+ --interactive-secondary-border: #e2e8f3;
481
+ --interactive-destructive-bg: #a30016;
482
+ --interactive-destructive-bg-hover: #81000f;
483
+ --interactive-destructive-text: #ffffff;
484
+ --interactive-ghost-bg: #ffffff;
485
+ --interactive-ghost-bg-hover: #f0f2f6;
486
+ }
487
+
488
+
489
+ /* --- Fumadocs bridge: dark --- */
490
+ .dark .modern-minimal-theme {
491
+ --color-fd-background: #000000;
492
+ --color-fd-foreground: rgba(255, 255, 255, 0.7);
493
+ --color-fd-card: rgba(255, 255, 255, 0.04);
494
+ --color-fd-card-foreground: rgba(255, 255, 255, 0.7);
495
+ --color-fd-border: rgba(255, 255, 255, 0.06);
496
+ --color-fd-muted: rgba(255, 255, 255, 0.04);
497
+ --color-fd-muted-foreground: rgba(255, 255, 255, 0.70);
498
+ --color-fd-accent: #04bf81;
499
+ --color-fd-accent-foreground: #ffffff;
500
+ --color-fd-primary: #04bf81;
501
+ --color-fd-primary-foreground: #ffffff;
502
+ --color-fd-secondary: rgba(255, 255, 255, 0.04);
503
+ --color-fd-secondary-foreground: rgba(255, 255, 255, 0.7);
504
+ --color-fd-popover: #141414;
505
+ --color-fd-popover-foreground: rgba(255, 255, 255, 0.7);
506
+ --color-fd-ring: #a0ffcf;
507
+ }
508
+
509
+
510
+ /* --- Fumadocs bridge: light --- */
511
+ html:not(.dark) .modern-minimal-theme {
512
+ --color-fd-background: #FFFFFF;
513
+ --color-fd-foreground: rgba(0, 0, 0, 0.9);
514
+ --color-fd-card: #FFFFFF;
515
+ --color-fd-card-foreground: rgba(0, 0, 0, 0.9);
516
+ --color-fd-border: #eaeef5;
517
+ --color-fd-muted: #f0f2f6;
518
+ --color-fd-muted-foreground: rgba(0, 0, 0, 0.55);
519
+ --color-fd-accent: #04bf81;
520
+ --color-fd-accent-foreground: #ffffff;
521
+ --color-fd-primary: #04bf81;
522
+ --color-fd-primary-foreground: #ffffff;
523
+ --color-fd-secondary: #f0f2f6;
524
+ --color-fd-secondary-foreground: rgba(0, 0, 0, 0.9);
525
+ --color-fd-popover: #FFFFFF;
526
+ --color-fd-popover-foreground: rgba(0, 0, 0, 0.9);
527
+ --color-fd-ring: #04bf81;
528
+ }
529
+ }