@j3m-quantum/ui 0.3.0 → 0.7.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.
@@ -1,32 +1,607 @@
1
1
  /* ========================================
2
- J3M UI STYLES
2
+ J3M QUANTUM UI - Complete Theme
3
+ TweakCN-style structure for global theming
3
4
 
4
- Import this AFTER shadcn's globals.css to apply J3M theming.
5
-
6
- Prerequisites:
7
- 1. Run `npx shadcn@latest init` first
8
- 2. npm install @j3m-quantum/ui
9
-
10
- Usage in your CSS file:
11
-
12
- For Vite + React:
13
- @import "tailwindcss";
14
- @source "../node_modules/@j3m-quantum/ui/dist";
15
- @import "@j3m-quantum/ui/styles";
16
-
17
- For Next.js:
18
- @import "tailwindcss";
19
- @import "@j3m-quantum/ui/styles";
20
-
21
- Note: Vite requires the @source directive for Tailwind v4
22
- to scan the package's compiled classes.
5
+ Usage:
6
+ @import "tailwindcss";
7
+ @import "@j3m-quantum/ui/styles";
23
8
  ======================================== */
24
9
 
25
- /* 1. J3M Design Tokens (color scales, spacing, radii, glass effects) */
26
- @import "./tokens.css";
10
+ /* ========================================
11
+ SCALE TOKENS (Primitives)
12
+ Direct values - source of truth
13
+ ======================================== */
14
+
15
+ :root {
16
+ /* Primary Orange Scale */
17
+ --j3m-primary-100: #FBCEB5;
18
+ --j3m-primary-200: #F79D6B;
19
+ --j3m-primary-250: #F58446;
20
+ --j3m-primary-300: #F36C21;
21
+ --j3m-primary-350: #EA5B0C;
22
+ --j3m-primary-400: #CA4F0B;
23
+ --j3m-primary-500: #8F3808;
24
+
25
+ /* Neutral Gray Scale */
26
+ --j3m-neutral-100: #FFFFFF;
27
+ --j3m-neutral-200: #E8E8E8;
28
+ --j3m-neutral-250: #DADBDC;
29
+ --j3m-neutral-300: #D2D2D2;
30
+ --j3m-neutral-350: #D1D1D1;
31
+ --j3m-neutral-400: #BBBBBB;
32
+ --j3m-neutral-500: #A4A4A4;
33
+ --j3m-neutral-600: #8E8E8E;
34
+ --j3m-neutral-700: #777777;
35
+ --j3m-neutral-750: #747474;
36
+ --j3m-neutral-800: #606060;
37
+ --j3m-neutral-900: #4A4A4A;
38
+ --j3m-neutral-1000: #333333;
39
+
40
+ /* Status Colors */
41
+ --j3m-red-100: #FB3748;
42
+ --j3m-red-200: #D00416;
43
+ --j3m-yellow-100: #FFDB43;
44
+ --j3m-yellow-200: #DFB400;
45
+ --j3m-green-100: #84EBB4;
46
+ --j3m-green-200: #1FC16B;
47
+
48
+ /* ========================================
49
+ SEMANTIC TOKENS
50
+ Purpose-driven aliases
51
+ ======================================== */
52
+
53
+ /* Background Hierarchy */
54
+ --color-bg-app: var(--j3m-neutral-350);
55
+ --color-bg-page: var(--j3m-neutral-200);
56
+ --color-bg-surface: var(--j3m-neutral-100);
57
+ --color-bg-subtle: var(--j3m-neutral-200);
58
+ --color-bg-toolbar: var(--j3m-neutral-250);
59
+
60
+ /* Text Colors (opacity-based for glass) */
61
+ --color-text-main: rgba(0, 0, 0, 0.7);
62
+ --color-text-muted: rgba(0, 0, 0, 0.5);
63
+ --color-text-soft: rgba(0, 0, 0, 0.4);
64
+ --color-text-on-accent: #FFFFFF;
65
+ --color-text-on-accent-muted: rgba(255, 255, 255, 0.5);
66
+
67
+ /* Border Colors */
68
+ --color-border-subtle: var(--j3m-neutral-200);
69
+ --color-border-strong: var(--j3m-neutral-400);
70
+
71
+ /* Accent/Interactive Colors */
72
+ --color-accent: var(--j3m-primary-250);
73
+ --color-accent-hover: var(--j3m-primary-300);
74
+ --color-accent-active: var(--j3m-primary-350);
75
+
76
+ /* Interactive Component Patterns */
77
+ --color-interactive-bg: var(--j3m-primary-250);
78
+ --color-interactive-text: var(--j3m-neutral-100);
79
+ --color-cta-bg: var(--j3m-primary-300);
80
+ --color-cta-text: var(--j3m-neutral-100);
81
+ --color-focus-ring: rgba(245, 132, 70, 0.2);
82
+ --color-hover-overlay-light: rgba(255, 255, 255, 0.2);
83
+ --color-hover-overlay-dark: rgba(51, 51, 51, 0.1);
84
+
85
+ /* Status Semantic */
86
+ --color-success-bg: var(--j3m-green-100);
87
+ --color-success-border: var(--j3m-green-200);
88
+ --color-success-text: var(--j3m-green-200);
89
+ --color-warning-bg: var(--j3m-yellow-100);
90
+ --color-warning-border: var(--j3m-yellow-200);
91
+ --color-warning-text: var(--j3m-yellow-200);
92
+ --color-error-bg: var(--j3m-red-100);
93
+ --color-error-border: var(--j3m-red-200);
94
+ --color-error-text: var(--j3m-red-100);
95
+
96
+ /* Tooltip */
97
+ --color-tooltip-bg: var(--j3m-neutral-1000);
98
+ --color-tooltip-text: var(--j3m-neutral-100);
99
+
100
+ /* Progress */
101
+ --color-progress-fill: var(--j3m-primary-250);
102
+ --color-progress-track: rgba(255, 255, 255, 0.5);
103
+
104
+ /* Form Controls */
105
+ --color-checkbox-bg: rgba(255, 255, 255, 0.5);
106
+ --color-radio-bg: rgba(255, 255, 255, 0.5);
107
+
108
+ /* ========================================
109
+ RADIUS TOKENS
110
+ ======================================== */
111
+ --j3m-radius-none: 0px;
112
+ --j3m-radius-2xs: 4px;
113
+ --j3m-radius-xs: 5px;
114
+ --j3m-radius-s: 8px;
115
+ --j3m-radius-m: 10px;
116
+ --j3m-radius-l: 18px;
117
+ --j3m-radius-xl: 22px;
118
+ --j3m-radius-2xl: 26px;
119
+ --j3m-radius-full: 9999px;
120
+
121
+ /* ========================================
122
+ SPACING TOKENS
123
+ ======================================== */
124
+ --j3m-spacing-xs: 8px;
125
+ --j3m-spacing-s: 12px;
126
+ --j3m-spacing-m: 16px;
127
+ --j3m-spacing-l: 24px;
128
+ --j3m-spacing-xl: 32px;
129
+
130
+ /* ========================================
131
+ STROKE/BORDER TOKENS
132
+ ======================================== */
133
+ --j3m-stroke-none: 0px;
134
+ --j3m-stroke-s: 1px;
135
+ --j3m-stroke-m: 2px;
136
+ --j3m-stroke-l: 3px;
137
+ --j3m-stroke-xl: 4px;
138
+
139
+ /* Stroke Colors (opacity-based) */
140
+ --j3m-stroke-dark-5: rgba(0, 0, 0, 0.05);
141
+ --j3m-stroke-dark-10: rgba(0, 0, 0, 0.1);
142
+ --j3m-stroke-dark-20: rgba(0, 0, 0, 0.2);
143
+ --j3m-stroke-light-5: rgba(255, 255, 255, 0.05);
144
+ --j3m-stroke-light-10: rgba(255, 255, 255, 0.1);
145
+ --j3m-stroke-light-20: rgba(255, 255, 255, 0.2);
146
+ --j3m-stroke-white: rgba(255, 255, 255, 1);
147
+ --j3m-stroke-primary-10: rgba(243, 108, 33, 0.1);
148
+ --j3m-stroke-primary-350-50: rgba(234, 91, 12, 0.5);
149
+ --j3m-stroke-neutral-1000-10: rgba(51, 51, 51, 0.1);
150
+
151
+ /* ========================================
152
+ GLASS EFFECTS
153
+ ======================================== */
154
+
155
+ /* Blur Scale */
156
+ --j3m-blur-sm: 10px;
157
+ --j3m-blur-md: 20px;
158
+ --j3m-blur-lg: 50px;
159
+
160
+ /* Glass Backgrounds */
161
+ --j3m-glass-light-10: rgba(255, 255, 255, 0.1);
162
+ --j3m-glass-light-20: rgba(255, 255, 255, 0.2);
163
+ --j3m-glass-light-40: rgba(255, 255, 255, 0.4);
164
+ --j3m-glass-light-50: rgba(255, 255, 255, 0.5);
165
+ --j3m-glass-light-70: rgba(255, 255, 255, 0.7);
166
+ --j3m-glass-light-80: rgba(255, 255, 255, 0.8);
167
+ --j3m-glass-light-subtle: rgba(255, 255, 255, 0.1);
168
+ --j3m-glass-light: rgba(255, 255, 255, 0.5);
169
+ --j3m-glass-light-hover: rgba(255, 255, 255, 0.7);
170
+ --j3m-glass-light-strong: rgba(255, 255, 255, 0.81);
171
+ --j3m-glass-dark: rgba(51, 51, 51, 0.6);
172
+ --j3m-glass-dark-hover: rgba(51, 51, 51, 0.7);
173
+ --j3m-glass-dark-strong: rgba(51, 51, 51, 0.85);
174
+ --j3m-glass-neutral-subtle: rgba(227, 227, 227, 0.3);
175
+ --j3m-glass-neutral: rgba(227, 227, 227, 0.5);
176
+ --j3m-glass-neutral-strong: rgba(227, 227, 227, 0.7);
177
+ --j3m-glass-primary: rgba(243, 108, 33, 0.1);
178
+ --j3m-glass-primary-highlight: rgba(243, 108, 33, 0.2);
179
+
180
+ /* Glass Borders */
181
+ --j3m-glass-border-light: rgba(255, 255, 255, 0.3);
182
+ --j3m-glass-border-subtle: rgba(255, 255, 255, 0.1);
183
+ --j3m-glass-border-white: rgba(255, 255, 255, 0.2);
184
+
185
+ /* Glass Shadows */
186
+ --j3m-glass-shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.06);
187
+ --j3m-glass-shadow-md: 0 4px 16px rgba(0, 0, 0, 0.06), 0 2px 4px rgba(0, 0, 0, 0.08);
188
+ --j3m-glass-shadow-lg: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
189
+ --j3m-glass-shadow-glow: 0 0 10px var(--j3m-primary-300);
190
+ --j3m-glass-shadow-glow-active: 0 0 20px var(--j3m-primary-350);
191
+
192
+ /* ========================================
193
+ SHADCN/TAILWIND SEMANTIC TOKENS
194
+ For standard shadcn component compatibility
195
+ ======================================== */
196
+ --primary: var(--j3m-primary-250);
197
+ --primary-foreground: #FFFFFF;
198
+ --secondary: var(--j3m-neutral-200);
199
+ --secondary-foreground: var(--j3m-neutral-900);
200
+ --muted: var(--j3m-neutral-200);
201
+ --muted-foreground: var(--j3m-neutral-600);
202
+ --accent: var(--j3m-primary-250);
203
+ --accent-foreground: #FFFFFF;
204
+ --destructive: var(--j3m-red-100);
205
+ --destructive-foreground: #FFFFFF;
206
+ --background: var(--j3m-neutral-100);
207
+ --foreground: var(--j3m-neutral-1000);
208
+ --card: var(--j3m-neutral-100);
209
+ --card-foreground: var(--j3m-neutral-1000);
210
+ --popover: var(--j3m-neutral-100);
211
+ --popover-foreground: var(--j3m-neutral-1000);
212
+ --border: var(--j3m-neutral-300);
213
+ --input: var(--j3m-neutral-300);
214
+ --ring: var(--j3m-primary-250);
215
+
216
+ /* Sidebar */
217
+ --sidebar: var(--j3m-neutral-100);
218
+ --sidebar-foreground: var(--j3m-neutral-900);
219
+ --sidebar-primary: var(--j3m-primary-300);
220
+ --sidebar-primary-foreground: #FFFFFF;
221
+ --sidebar-accent: var(--j3m-neutral-200);
222
+ --sidebar-accent-foreground: var(--j3m-neutral-900);
223
+ --sidebar-border: var(--j3m-neutral-200);
224
+ --sidebar-ring: var(--j3m-primary-300);
225
+
226
+ /* Chart Colors */
227
+ --chart-1: var(--j3m-primary-300);
228
+ --chart-2: var(--j3m-green-200);
229
+ --chart-3: var(--j3m-neutral-700);
230
+ --chart-4: var(--j3m-yellow-100);
231
+ --chart-5: var(--j3m-primary-200);
232
+
233
+ /* Global Radius */
234
+ --radius: 12px;
235
+
236
+ /* Shadows */
237
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
238
+ --shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);
239
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
240
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
241
+ }
242
+
243
+ /* ========================================
244
+ DARK MODE
245
+ ======================================== */
246
+
247
+ .dark {
248
+ /* Background Hierarchy */
249
+ --color-bg-app: var(--j3m-neutral-1000);
250
+ --color-bg-page: var(--j3m-neutral-900);
251
+ --color-bg-surface: var(--j3m-neutral-800);
252
+ --color-bg-subtle: var(--j3m-neutral-700);
253
+ --color-bg-toolbar: var(--j3m-neutral-750);
254
+
255
+ /* Text Colors */
256
+ --color-text-main: rgba(255, 255, 255, 0.9);
257
+ --color-text-muted: rgba(255, 255, 255, 0.6);
258
+ --color-text-soft: rgba(255, 255, 255, 0.4);
259
+
260
+ /* Border Colors */
261
+ --color-border-subtle: var(--j3m-neutral-700);
262
+ --color-border-strong: var(--j3m-neutral-600);
263
+
264
+ /* Shadcn tokens */
265
+ --primary: var(--j3m-primary-250);
266
+ --primary-foreground: var(--j3m-neutral-1000);
267
+ --secondary: var(--j3m-neutral-800);
268
+ --secondary-foreground: var(--j3m-neutral-100);
269
+ --muted: var(--j3m-neutral-800);
270
+ --muted-foreground: var(--j3m-neutral-400);
271
+ --accent: var(--j3m-neutral-800);
272
+ --accent-foreground: var(--j3m-neutral-100);
273
+ --destructive: var(--j3m-red-200);
274
+ --destructive-foreground: #FFFFFF;
275
+ --background: var(--j3m-neutral-1000);
276
+ --foreground: var(--j3m-neutral-100);
277
+ --card: var(--j3m-neutral-900);
278
+ --card-foreground: var(--j3m-neutral-100);
279
+ --popover: var(--j3m-neutral-900);
280
+ --popover-foreground: var(--j3m-neutral-100);
281
+ --border: var(--j3m-neutral-700);
282
+ --input: var(--j3m-neutral-700);
283
+ --ring: var(--j3m-primary-250);
284
+
285
+ /* Sidebar */
286
+ --sidebar: var(--j3m-neutral-900);
287
+ --sidebar-foreground: var(--j3m-neutral-100);
288
+ --sidebar-primary: var(--j3m-primary-250);
289
+ --sidebar-primary-foreground: var(--j3m-neutral-1000);
290
+ --sidebar-accent: var(--j3m-neutral-800);
291
+ --sidebar-accent-foreground: var(--j3m-neutral-100);
292
+ --sidebar-border: var(--j3m-neutral-700);
293
+ --sidebar-ring: var(--j3m-primary-250);
294
+ }
295
+
296
+ /* ========================================
297
+ THEME MODE: SOLID (Default)
298
+ Opaque surfaces for admin/forms/data-heavy screens
299
+ ======================================== */
300
+
301
+ .theme-solid,
302
+ :root:not(.theme-glass) {
303
+ /* Surface tokens for solid mode */
304
+ --surface-bg: var(--color-bg-surface);
305
+ --surface-border: var(--color-border-subtle);
306
+ --surface-shadow: var(--shadow-sm);
307
+ --surface-radius: var(--j3m-radius-l);
308
+ --surface-blur: 0px;
309
+
310
+ /* Overlay surfaces (dialogs, popovers, etc) */
311
+ --overlay-bg: var(--color-bg-surface);
312
+ --overlay-border: var(--color-border-subtle);
313
+ --overlay-shadow: var(--shadow-lg);
314
+ --overlay-blur: 0px;
315
+ }
316
+
317
+ /* ========================================
318
+ THEME MODE: GLASS
319
+ Frosted translucent surfaces for overlays/HUDs
320
+ ======================================== */
321
+
322
+ .theme-glass {
323
+ /* Surface tokens for glass mode */
324
+ --surface-bg: var(--j3m-glass-light-40);
325
+ --surface-border: var(--j3m-glass-border-white);
326
+ --surface-shadow: var(--j3m-glass-shadow-md);
327
+ --surface-radius: var(--j3m-radius-l);
328
+ --surface-blur: var(--j3m-blur-lg);
329
+
330
+ /* Overlay surfaces (dialogs, popovers, etc) */
331
+ --overlay-bg: var(--j3m-glass-light-70);
332
+ --overlay-border: var(--j3m-glass-border-light);
333
+ --overlay-shadow: var(--j3m-glass-shadow-lg);
334
+ --overlay-blur: var(--j3m-blur-2xl);
335
+
336
+ /* Adjust input backgrounds for glass */
337
+ --input-bg: var(--j3m-glass-light-50);
338
+ --card: var(--j3m-glass-light-50);
339
+ --popover: var(--j3m-glass-light-70);
340
+ }
341
+
342
+ .theme-glass.dark {
343
+ /* Dark glass overrides */
344
+ --surface-bg: var(--j3m-glass-dark);
345
+ --surface-border: var(--j3m-stroke-light-10);
346
+ --overlay-bg: var(--j3m-glass-dark-hover);
347
+ --overlay-border: var(--j3m-stroke-light-20);
348
+ }
349
+
350
+ /* ========================================
351
+ GLASS CONTEXT
352
+ Applied inside glass surfaces to adjust nested components
353
+ ======================================== */
354
+
355
+ .glass-context {
356
+ --background: var(--j3m-glass-light-80);
357
+ --input: var(--j3m-glass-light-50);
358
+ --card: var(--j3m-glass-light-70);
359
+ --popover: var(--j3m-glass-light-80);
360
+ --muted: var(--j3m-glass-light-50);
361
+ --secondary: var(--j3m-glass-light-70);
362
+ --border: var(--j3m-glass-border-light);
363
+ }
364
+
365
+ /* ========================================
366
+ TAILWIND THEME MAPPING
367
+ @theme inline for Tailwind v4
368
+ ======================================== */
369
+
370
+ @theme inline {
371
+ /* Colors */
372
+ --color-background: var(--background);
373
+ --color-foreground: var(--foreground);
374
+ --color-card: var(--card);
375
+ --color-card-foreground: var(--card-foreground);
376
+ --color-popover: var(--popover);
377
+ --color-popover-foreground: var(--popover-foreground);
378
+ --color-primary: var(--primary);
379
+ --color-primary-foreground: var(--primary-foreground);
380
+ --color-secondary: var(--secondary);
381
+ --color-secondary-foreground: var(--secondary-foreground);
382
+ --color-muted: var(--muted);
383
+ --color-muted-foreground: var(--muted-foreground);
384
+ --color-accent: var(--accent);
385
+ --color-accent-foreground: var(--accent-foreground);
386
+ --color-destructive: var(--destructive);
387
+ --color-destructive-foreground: var(--destructive-foreground);
388
+ --color-border: var(--border);
389
+ --color-input: var(--input);
390
+ --color-ring: var(--ring);
391
+
392
+ /* Chart */
393
+ --color-chart-1: var(--chart-1);
394
+ --color-chart-2: var(--chart-2);
395
+ --color-chart-3: var(--chart-3);
396
+ --color-chart-4: var(--chart-4);
397
+ --color-chart-5: var(--chart-5);
398
+
399
+ /* Sidebar */
400
+ --color-sidebar: var(--sidebar);
401
+ --color-sidebar-foreground: var(--sidebar-foreground);
402
+ --color-sidebar-primary: var(--sidebar-primary);
403
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
404
+ --color-sidebar-accent: var(--sidebar-accent);
405
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
406
+ --color-sidebar-border: var(--sidebar-border);
407
+ --color-sidebar-ring: var(--sidebar-ring);
408
+
409
+ /* Radius */
410
+ --radius-sm: calc(var(--radius) - 4px);
411
+ --radius-md: calc(var(--radius) - 2px);
412
+ --radius-lg: var(--radius);
413
+ --radius-xl: calc(var(--radius) + 4px);
414
+
415
+ /* Shadows */
416
+ --shadow-sm: var(--shadow-sm);
417
+ --shadow: var(--shadow);
418
+ --shadow-md: var(--shadow-md);
419
+ --shadow-lg: var(--shadow-lg);
420
+ }
421
+
422
+ /* ========================================
423
+ BASE STYLES
424
+ ======================================== */
425
+
426
+ @layer base {
427
+ * {
428
+ border-color: var(--border);
429
+ }
430
+
431
+ body {
432
+ background-color: var(--background);
433
+ color: var(--foreground);
434
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
435
+ }
436
+ }
437
+
438
+ /* ========================================
439
+ GLASS CONTEXT
440
+ Apply when inside a glass container
441
+ ======================================== */
442
+
443
+ .glass-context {
444
+ --background: rgba(255, 255, 255, 0.8);
445
+ --input: rgba(255, 255, 255, 0.3);
446
+ --card: rgba(255, 255, 255, 0.7);
447
+ --popover: rgba(255, 255, 255, 0.85);
448
+ --muted: rgba(255, 255, 255, 0.6);
449
+ --secondary: rgba(255, 255, 255, 0.7);
450
+ --border: rgba(255, 255, 255, 0.3);
451
+ }
452
+
453
+ /* ========================================
454
+ COMPONENT-LEVEL OVERRIDES
455
+ Pill shapes for J3M design
456
+ ======================================== */
457
+
458
+ /* Buttons - pill shape */
459
+ button:where([class*="bg-primary"], [class*="bg-secondary"], [class*="bg-destructive"], [class*="border-input"]),
460
+ [data-slot="button"] {
461
+ border-radius: var(--j3m-radius-full) !important;
462
+ }
463
+
464
+ /* Inputs - pill shape */
465
+ input:where([class*="border-input"], [class*="rounded-md"]),
466
+ [data-slot="input"] {
467
+ border-radius: var(--j3m-radius-full) !important;
468
+ }
469
+
470
+ /* Textarea - standard radius */
471
+ textarea,
472
+ [data-slot="textarea"] {
473
+ border-radius: var(--radius) !important;
474
+ }
475
+
476
+ /* Select - pill shape */
477
+ [data-slot="select-trigger"] {
478
+ border-radius: var(--j3m-radius-full) !important;
479
+ }
480
+
481
+ /* Button Group - pill with squared middle (must override !important on base buttons) */
482
+ [data-slot="button-group"] > * {
483
+ border-radius: 0 !important;
484
+ }
485
+ [data-slot="button-group"] > *:first-child {
486
+ border-top-left-radius: var(--j3m-radius-full) !important;
487
+ border-bottom-left-radius: var(--j3m-radius-full) !important;
488
+ }
489
+ [data-slot="button-group"] > *:last-child {
490
+ border-top-right-radius: var(--j3m-radius-full) !important;
491
+ border-bottom-right-radius: var(--j3m-radius-full) !important;
492
+ }
493
+ /* Single item in group - keep full pill */
494
+ [data-slot="button-group"] > *:only-child {
495
+ border-radius: var(--j3m-radius-full) !important;
496
+ }
497
+
498
+ /* Tabs - pill shape */
499
+ [data-slot="tabs-list"] {
500
+ border-radius: var(--j3m-radius-full) !important;
501
+ }
502
+ [data-slot="tabs-trigger"] {
503
+ border-radius: var(--j3m-radius-full) !important;
504
+ }
505
+
506
+ /* Menubar - pill shape */
507
+ [data-slot="menubar"] {
508
+ border-radius: var(--j3m-radius-full) !important;
509
+ }
510
+ [data-slot="menubar-trigger"] {
511
+ border-radius: var(--j3m-radius-full) !important;
512
+ }
513
+
514
+ /* ========================================
515
+ GLASS UTILITY CLASSES
516
+ ======================================== */
517
+
518
+ .glass-light {
519
+ background: var(--j3m-glass-light-subtle);
520
+ backdrop-filter: blur(var(--j3m-blur-lg));
521
+ -webkit-backdrop-filter: blur(var(--j3m-blur-lg));
522
+ border: 1px solid var(--j3m-stroke-white);
523
+ box-shadow: var(--j3m-glass-shadow-lg);
524
+ }
525
+
526
+ .glass-dark {
527
+ background: var(--j3m-glass-dark);
528
+ backdrop-filter: blur(var(--j3m-blur-md));
529
+ -webkit-backdrop-filter: blur(var(--j3m-blur-md));
530
+ border: 1px solid var(--j3m-stroke-light-10);
531
+ box-shadow: var(--j3m-glass-shadow-lg);
532
+ }
533
+
534
+ .glass-neutral {
535
+ background: var(--j3m-glass-neutral-subtle);
536
+ backdrop-filter: blur(var(--j3m-blur-lg));
537
+ -webkit-backdrop-filter: blur(var(--j3m-blur-lg));
538
+ border: 1px solid var(--j3m-stroke-primary-10);
539
+ box-shadow: var(--j3m-glass-shadow-lg);
540
+ }
541
+
542
+ .glass-primary {
543
+ background: var(--j3m-glass-primary);
544
+ backdrop-filter: blur(var(--j3m-blur-sm));
545
+ -webkit-backdrop-filter: blur(var(--j3m-blur-sm));
546
+ border: 1px solid var(--j3m-stroke-dark-10);
547
+ box-shadow: var(--j3m-glass-shadow-glow);
548
+ }
549
+
550
+ /* ========================================
551
+ ANIMATIONS
552
+ ======================================== */
553
+
554
+ @keyframes accordion-down {
555
+ from { height: 0; }
556
+ to { height: var(--radix-accordion-content-height); }
557
+ }
558
+
559
+ @keyframes accordion-up {
560
+ from { height: var(--radix-accordion-content-height); }
561
+ to { height: 0; }
562
+ }
563
+
564
+ @keyframes fade-in {
565
+ from { opacity: 0; }
566
+ to { opacity: 1; }
567
+ }
568
+
569
+ @keyframes fade-out {
570
+ from { opacity: 1; }
571
+ to { opacity: 0; }
572
+ }
573
+
574
+ @keyframes zoom-in {
575
+ from { opacity: 0; transform: scale(0.95); }
576
+ to { opacity: 1; transform: scale(1); }
577
+ }
578
+
579
+ @keyframes zoom-out {
580
+ from { opacity: 1; transform: scale(1); }
581
+ to { opacity: 0; transform: scale(0.95); }
582
+ }
583
+
584
+ @keyframes spin {
585
+ from { transform: rotate(0deg); }
586
+ to { transform: rotate(360deg); }
587
+ }
588
+
589
+ .animate-accordion-down {
590
+ animation: accordion-down 0.2s ease-out;
591
+ }
592
+
593
+ .animate-accordion-up {
594
+ animation: accordion-up 0.2s ease-out;
595
+ }
596
+
597
+ .animate-in {
598
+ animation: fade-in 0.2s ease-out, zoom-in 0.2s ease-out;
599
+ }
27
600
 
28
- /* 2. J3M Theme Overrides (maps shadcn vars to J3M colors) */
29
- @import "./j3m-overrides.css";
601
+ .animate-out {
602
+ animation: fade-out 0.2s ease-in, zoom-out 0.2s ease-in;
603
+ }
30
604
 
31
- /* 3. Component-specific overrides (toast styling, glass utilities) */
32
- @import "./theme.css";
605
+ .animate-spin {
606
+ animation: spin 1s linear infinite;
607
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@j3m-quantum/ui",
3
- "version": "0.3.0",
3
+ "version": "0.7.0",
4
4
  "description": "J3M UI Component Library - themed shadcn/ui components with design tokens",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",