@ebtgames/theme 0.1.3 → 0.1.5

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.js CHANGED
@@ -6,69 +6,67 @@ import { defineTokens } from "@chakra-ui/react";
6
6
  var colors = defineTokens.colors({
7
7
  // Surface Colors (deep purple monochrome)
8
8
  surface: {
9
- 0: { value: "#1B0F26" },
9
+ 0: { value: "var(--color-surface-0)" },
10
10
  // Base background - darkest
11
- 1: { value: "#24122F" },
11
+ 1: { value: "var(--color-surface-1)" },
12
12
  // Elevated surfaces
13
- 2: { value: "#2B173A" },
13
+ 2: { value: "var(--color-surface-2)" },
14
14
  // Cards/panels
15
- 3: { value: "#342046" }
15
+ 3: { value: "var(--color-surface-3)" }
16
16
  // Raised/hover states
17
17
  },
18
18
  // Text Colors (WCAG AA verified)
19
19
  text: {
20
- primary: { value: "#F5F1FA" },
20
+ primary: { value: "var(--color-text-primary)" },
21
21
  // 16.49:1 contrast
22
- secondary: { value: "#D8D0E3" },
22
+ secondary: { value: "var(--color-text-secondary)" },
23
23
  // 12.29:1 contrast
24
- muted: { value: "#B9AEC9" },
24
+ muted: { value: "var(--color-text-muted)" },
25
25
  // 8.72:1 contrast
26
- disabled: { value: "#9E92B4" }
26
+ disabled: { value: "var(--color-text-disabled)" }
27
27
  // 6.32:1 contrast
28
28
  },
29
29
  // Primary (Purple - interactive)
30
30
  primary: {
31
- DEFAULT: { value: "#7C5BD6" },
32
- hover: { value: "#6F4FCB" }
31
+ DEFAULT: { value: "var(--color-interactive-primary)" },
32
+ hover: { value: "var(--color-interactive-primary-hover)" }
33
33
  },
34
34
  // Utility (Teal - complementary)
35
35
  utility: {
36
- DEFAULT: { value: "#2AB9B0" },
37
- hover: { value: "#52D6CC" }
36
+ DEFAULT: { value: "var(--color-interactive-secondary)" },
37
+ hover: { value: "var(--color-interactive-secondary-hover)" }
38
38
  },
39
39
  // Emphasis (Rose - sparingly)
40
40
  emphasis: {
41
- DEFAULT: { value: "#D86B9A" }
41
+ DEFAULT: { value: "var(--color-interactive-accent)" }
42
42
  },
43
43
  // Border Colors (neutral gray)
44
44
  border: {
45
- subtle: { value: "#3A3341" },
46
- strong: { value: "#4A4354" }
45
+ subtle: { value: "var(--color-border-subtle)" },
46
+ strong: { value: "var(--color-border-strong)" }
47
47
  },
48
48
  // Status Colors
49
49
  status: {
50
- success: { value: "#2AB9B0" },
51
- // Use teal
52
- warning: { value: "#D9A24F" },
53
- // Amber
54
- error: { value: "#D8524D" }
55
- // Red
50
+ success: { value: "var(--color-status-success)" },
51
+ warning: { value: "var(--color-status-warning)" },
52
+ error: { value: "var(--color-status-error)" },
53
+ info: { value: "var(--color-status-info)" }
56
54
  },
57
55
  // Overlays (purple-based transparency)
58
56
  overlay: {
59
- subtle: { value: "rgba(124, 91, 214, 0.05)" },
60
- // Purple hover tint
61
- light: { value: "rgba(124, 91, 214, 0.1)" },
62
- // Purple selected
63
- medium: { value: "rgba(124, 91, 214, 0.15)" },
64
- // Purple active
65
- heavy: { value: "rgba(124, 91, 214, 0.25)" },
66
- // Purple emphasis
67
- error: { value: "rgba(216, 82, 77, 0.12)" },
57
+ subtle: { value: "var(--color-overlay-subtle)" },
58
+ // Hover tint
59
+ light: { value: "var(--color-overlay-light)" },
60
+ // Selected
61
+ medium: { value: "var(--color-overlay-medium)" },
62
+ // Active
63
+ heavy: { value: "var(--color-overlay-heavy)" },
64
+ // Emphasis
65
+ error: { value: "var(--color-overlay-error)" },
68
66
  // Error tint
69
67
  backdrop: {
70
- light: { value: "rgba(27, 15, 38, 0.8)" },
71
- heavy: { value: "rgba(27, 15, 38, 0.95)" }
68
+ light: { value: "var(--color-overlay-backdrop-light)" },
69
+ heavy: { value: "var(--color-overlay-backdrop-heavy)" }
72
70
  }
73
71
  }
74
72
  });
@@ -76,117 +74,122 @@ var colors = defineTokens.colors({
76
74
  // src/tokens/typography.ts
77
75
  import { defineTokens as defineTokens2 } from "@chakra-ui/react";
78
76
  var fonts = defineTokens2.fonts({
79
- display: { value: "'Courier New', 'Courier', monospace" },
80
- heading: { value: "'Courier New', 'Courier', monospace" },
81
- body: { value: "'Courier New', 'Courier', monospace" }
77
+ display: { value: "var(--font-display)" },
78
+ heading: { value: "var(--font-heading)" },
79
+ body: { value: "var(--font-body)" }
82
80
  });
83
81
  var fontSizes = defineTokens2.fontSizes({
84
- xs: { value: "0.75rem" },
82
+ xs: { value: "var(--font-size-xs)" },
85
83
  // 12px - helper text
86
- sm: { value: "0.875rem" },
84
+ sm: { value: "var(--font-size-sm)" },
87
85
  // 14px - secondary labels
88
- base: { value: "1rem" },
86
+ base: { value: "var(--font-size-base)" },
89
87
  // 16px - body text
90
- md: { value: "1.125rem" },
88
+ md: { value: "var(--font-size-md)" },
91
89
  // 18px - emphasized body
92
- lg: { value: "1.25rem" },
90
+ lg: { value: "var(--font-size-lg)" },
93
91
  // 20px - section headings
94
- xl: { value: "1.5rem" },
92
+ xl: { value: "var(--font-size-xl)" },
95
93
  // 24px - modal titles
96
- "2xl": { value: "2rem" },
94
+ "2xl": { value: "var(--font-size-2xl)" },
97
95
  // 32px - page titles
98
- "3xl": { value: "3rem" },
96
+ "3xl": { value: "var(--font-size-3xl)" },
99
97
  // 48px - hero text
100
- "4xl": { value: "4rem" },
98
+ "4xl": { value: "var(--font-size-4xl)" },
101
99
  // 64px - display text
102
100
  // Responsive sizes
103
- cell: { value: "clamp(1rem, 3vw, 1.5rem)" },
104
- hero: { value: "clamp(2.5rem, 8vw, 4rem)" },
105
- subtitle: { value: "clamp(1rem, 3vw, 1.25rem)" }
101
+ cell: { value: "var(--font-size-cell)" },
102
+ hero: { value: "var(--font-size-hero)" },
103
+ subtitle: { value: "var(--font-size-subtitle)" }
106
104
  });
107
105
  var fontWeights = defineTokens2.fontWeights({
108
- normal: { value: 400 },
109
- medium: { value: 600 },
110
- bold: { value: 700 }
106
+ normal: { value: "var(--font-weight-normal)" },
107
+ medium: { value: "var(--font-weight-medium)" },
108
+ bold: { value: "var(--font-weight-bold)" }
111
109
  });
112
110
  var letterSpacings = defineTokens2.letterSpacings({
113
- tight: { value: "0.05em" },
114
- normal: { value: "0.1em" },
115
- wide: { value: "0.2em" }
111
+ tight: { value: "var(--letter-spacing-tight)" },
112
+ normal: { value: "var(--letter-spacing-normal)" },
113
+ wide: { value: "var(--letter-spacing-wide)" }
116
114
  });
117
115
 
118
116
  // src/tokens/spacing.ts
119
117
  import { defineTokens as defineTokens3 } from "@chakra-ui/react";
120
118
  var spacing = defineTokens3.spacing({
121
- "2xs": { value: "0.125rem" },
119
+ "2xs": { value: "var(--spacing-2xs)" },
122
120
  // 2px - micro gaps
123
- xs: { value: "0.25rem" },
121
+ xs: { value: "var(--spacing-xs)" },
124
122
  // 4px
125
- sm: { value: "0.5rem" },
123
+ sm: { value: "var(--spacing-sm)" },
126
124
  // 8px
127
- md: { value: "1rem" },
125
+ md: { value: "var(--spacing-md)" },
128
126
  // 16px
129
- lg: { value: "1.5rem" },
127
+ lg: { value: "var(--spacing-lg)" },
130
128
  // 24px
131
- xl: { value: "2rem" },
129
+ xl: { value: "var(--spacing-xl)" },
132
130
  // 32px
133
- "2xl": { value: "3rem" }
131
+ "2xl": { value: "var(--spacing-2xl)" }
134
132
  // 48px
135
133
  });
136
134
 
137
135
  // src/tokens/borders.ts
138
136
  import { defineTokens as defineTokens4 } from "@chakra-ui/react";
139
137
  var borderWidths = defineTokens4.borderWidths({
140
- thin: { value: "1px" },
141
- base: { value: "2px" },
142
- thick: { value: "3px" }
138
+ thin: { value: "var(--border-width-thin)" },
139
+ base: { value: "var(--border-width-base)" },
140
+ thick: { value: "var(--border-width-thick)" }
143
141
  });
144
142
  var radii = defineTokens4.radii({
145
- sm: { value: "2px" },
146
- md: { value: "4px" },
147
- lg: { value: "6px" }
143
+ sm: { value: "var(--radius-sm)" },
144
+ md: { value: "var(--radius-md)" },
145
+ lg: { value: "var(--radius-lg)" }
148
146
  });
149
147
 
150
148
  // src/tokens/shadows.ts
151
149
  import { defineTokens as defineTokens5 } from "@chakra-ui/react";
152
150
  var shadows = defineTokens5.shadows({
153
151
  // Depth shadows (layered)
154
- xs: { value: "0 1px 2px rgba(0, 0, 0, 0.4)" },
155
- sm: { value: "0 2px 8px rgba(0, 0, 0, 0.5), 0 1px 3px rgba(0, 0, 0, 0.3)" },
156
- md: { value: "0 4px 16px rgba(0, 0, 0, 0.6), 0 2px 6px rgba(0, 0, 0, 0.4)" },
157
- lg: { value: "0 8px 24px rgba(0, 0, 0, 0.7), 0 4px 12px rgba(0, 0, 0, 0.5)" },
158
- xl: { value: "0 16px 48px rgba(0, 0, 0, 0.8), 0 8px 24px rgba(0, 0, 0, 0.6)" },
152
+ xs: { value: "var(--shadow-xs)" },
153
+ sm: { value: "var(--shadow-sm)" },
154
+ md: { value: "var(--shadow-md)" },
155
+ lg: { value: "var(--shadow-lg)" },
156
+ xl: { value: "var(--shadow-xl)" },
159
157
  // Glow shadows (primary - purple)
160
158
  glow: {
161
- primary: { value: "0 0 10px rgba(124, 91, 214, 0.4)" },
162
- "primary-lg": { value: "0 0 20px rgba(124, 91, 214, 0.5), 0 0 40px rgba(124, 91, 214, 0.3)" },
163
- "primary-xl": { value: "0 0 30px rgba(124, 91, 214, 0.6), 0 0 60px rgba(124, 91, 214, 0.4)" },
164
- // Utility (teal)
165
- utility: { value: "0 0 10px rgba(42, 185, 176, 0.3)" },
166
- "utility-lg": { value: "0 0 20px rgba(42, 185, 176, 0.4), 0 0 40px rgba(42, 185, 176, 0.2)" },
167
- // Emphasis (rose)
168
- emphasis: { value: "0 0 10px rgba(216, 107, 154, 0.3)" },
169
- "emphasis-lg": { value: "0 0 20px rgba(216, 107, 154, 0.4), 0 0 40px rgba(216, 107, 154, 0.2)" },
159
+ primary: { value: "var(--shadow-glow-primary)" },
160
+ "primary-lg": { value: "var(--shadow-glow-primary-lg)" },
161
+ "primary-xl": { value: "var(--shadow-glow-primary-xl)" },
162
+ // Secondary (teal)
163
+ secondary: { value: "var(--shadow-glow-secondary)" },
164
+ "secondary-lg": { value: "var(--shadow-glow-secondary-lg)" },
165
+ // Accent (rose)
166
+ accent: { value: "var(--shadow-glow-accent)" },
167
+ "accent-lg": { value: "var(--shadow-glow-accent-lg)" },
168
+ // Legacy aliases for backward compatibility
169
+ utility: { value: "var(--shadow-glow-secondary)" },
170
+ "utility-lg": { value: "var(--shadow-glow-secondary-lg)" },
171
+ emphasis: { value: "var(--shadow-glow-accent)" },
172
+ "emphasis-lg": { value: "var(--shadow-glow-accent-lg)" },
170
173
  // Error (red)
171
- error: { value: "0 0 10px rgba(216, 82, 77, 0.4)" }
174
+ error: { value: "var(--shadow-glow-error)" }
172
175
  },
173
176
  // Inset shadows
174
177
  inset: {
175
- primary: { value: "inset 0 0 10px rgba(124, 91, 214, 0.3)" },
176
- subtle: { value: "inset 0 1px 3px rgba(0, 0, 0, 0.3)" },
177
- deep: { value: "inset 0 2px 8px rgba(0, 0, 0, 0.5)" }
178
+ primary: { value: "var(--shadow-inset-primary)" },
179
+ subtle: { value: "var(--shadow-inset-subtle)" },
180
+ deep: { value: "var(--shadow-inset-deep)" }
178
181
  }
179
182
  });
180
183
 
181
184
  // src/tokens/zIndex.ts
182
185
  import { defineTokens as defineTokens6 } from "@chakra-ui/react";
183
186
  var zIndex = defineTokens6.zIndex({
184
- base: { value: 1 },
185
- dropdown: { value: 100 },
186
- overlay: { value: 500 },
187
- modal: { value: 1e3 },
188
- toast: { value: 1500 },
189
- fullscreen: { value: 2e3 }
187
+ base: { value: "var(--z-index-base)" },
188
+ dropdown: { value: "var(--z-index-dropdown)" },
189
+ overlay: { value: "var(--z-index-overlay)" },
190
+ modal: { value: "var(--z-index-modal)" },
191
+ toast: { value: "var(--z-index-toast)" },
192
+ fullscreen: { value: "var(--z-index-fullscreen)" }
190
193
  });
191
194
 
192
195
  // src/semanticTokens/colors.ts
@@ -259,18 +262,35 @@ var keyframes = defineKeyframes({
259
262
  },
260
263
  glow: {
261
264
  "0%, 100%": {
262
- boxShadow: "0 0 10px rgba(124, 91, 214, 0.4)"
265
+ boxShadow: "var(--shadow-glow-primary)"
263
266
  },
264
267
  "50%": {
265
- boxShadow: "0 0 20px rgba(124, 91, 214, 0.5), 0 0 40px rgba(124, 91, 214, 0.3)"
268
+ boxShadow: "var(--shadow-glow-primary-lg)"
266
269
  }
267
270
  },
271
+ glowSecondary: {
272
+ "0%, 100%": {
273
+ boxShadow: "var(--shadow-glow-secondary)"
274
+ },
275
+ "50%": {
276
+ boxShadow: "var(--shadow-glow-secondary-lg)"
277
+ }
278
+ },
279
+ glowAccent: {
280
+ "0%, 100%": {
281
+ boxShadow: "var(--shadow-glow-accent)"
282
+ },
283
+ "50%": {
284
+ boxShadow: "var(--shadow-glow-accent-lg)"
285
+ }
286
+ },
287
+ // Legacy alias for backward compatibility
268
288
  glowHighlight: {
269
289
  "0%, 100%": {
270
- boxShadow: "0 0 10px rgba(216, 107, 154, 0.3)"
290
+ boxShadow: "var(--shadow-glow-accent)"
271
291
  },
272
292
  "50%": {
273
- boxShadow: "0 0 20px rgba(216, 107, 154, 0.4), 0 0 40px rgba(216, 107, 154, 0.2)"
293
+ boxShadow: "var(--shadow-glow-accent-lg)"
274
294
  }
275
295
  },
276
296
  blink: {
@@ -296,16 +316,277 @@ var keyframes = defineKeyframes({
296
316
  transform: "scale(1)",
297
317
  opacity: "1"
298
318
  }
319
+ },
320
+ scaleOut: {
321
+ from: {
322
+ transform: "scale(1)",
323
+ opacity: "1"
324
+ },
325
+ to: {
326
+ transform: "scale(0.8)",
327
+ opacity: "0"
328
+ }
329
+ },
330
+ slideInUp: {
331
+ from: {
332
+ transform: "translateY(10px)",
333
+ opacity: "0"
334
+ },
335
+ to: {
336
+ transform: "translateY(0)",
337
+ opacity: "1"
338
+ }
339
+ },
340
+ slideInDown: {
341
+ from: {
342
+ transform: "translateY(-10px)",
343
+ opacity: "0"
344
+ },
345
+ to: {
346
+ transform: "translateY(0)",
347
+ opacity: "1"
348
+ }
349
+ },
350
+ spin: {
351
+ from: {
352
+ transform: "rotate(0deg)"
353
+ },
354
+ to: {
355
+ transform: "rotate(360deg)"
356
+ }
299
357
  }
300
358
  });
301
359
 
302
360
  // src/globalStyles.ts
303
361
  import { defineGlobalStyles } from "@chakra-ui/react";
362
+
363
+ // src/cssVariables.ts
364
+ var colorVariables = {
365
+ // Surface Colors (deep purple monochrome)
366
+ "--color-surface-0": "#1B0F26",
367
+ // Base background - darkest
368
+ "--color-surface-1": "#24122F",
369
+ // Elevated surfaces
370
+ "--color-surface-2": "#2B173A",
371
+ // Cards/panels
372
+ "--color-surface-3": "#342046",
373
+ // Raised/hover states
374
+ // Text Colors (WCAG AA verified against surface-0)
375
+ "--color-text-primary": "#F5F1FA",
376
+ // 16.49:1 contrast
377
+ "--color-text-secondary": "#D8D0E3",
378
+ // 12.29:1 contrast
379
+ "--color-text-muted": "#B9AEC9",
380
+ // 8.72:1 contrast
381
+ "--color-text-disabled": "#9E92B4",
382
+ // 6.32:1 contrast
383
+ // Interactive - Primary (Purple)
384
+ "--color-interactive-primary": "#7C5BD6",
385
+ "--color-interactive-primary-hover": "#6F4FCB",
386
+ // Interactive - Secondary (Teal)
387
+ "--color-interactive-secondary": "#2AB9B0",
388
+ "--color-interactive-secondary-hover": "#52D6CC",
389
+ // Interactive - Accent (Rose)
390
+ "--color-interactive-accent": "#D86B9A",
391
+ // Border Colors
392
+ "--color-border-subtle": "#3A3341",
393
+ "--color-border-strong": "#4A4354",
394
+ // Status Colors
395
+ "--color-status-success": "#2AB9B0",
396
+ // Teal
397
+ "--color-status-warning": "#D9A24F",
398
+ // Amber
399
+ "--color-status-error": "#D8524D",
400
+ // Red
401
+ "--color-status-info": "#7C5BD6",
402
+ // Purple
403
+ // Overlay Colors (purple-based transparency)
404
+ "--color-overlay-subtle": "rgba(124, 91, 214, 0.05)",
405
+ // Hover tint
406
+ "--color-overlay-light": "rgba(124, 91, 214, 0.1)",
407
+ // Selected
408
+ "--color-overlay-medium": "rgba(124, 91, 214, 0.15)",
409
+ // Active
410
+ "--color-overlay-heavy": "rgba(124, 91, 214, 0.25)",
411
+ // Emphasis
412
+ "--color-overlay-error": "rgba(216, 82, 77, 0.12)",
413
+ // Error tint
414
+ "--color-overlay-backdrop-light": "rgba(27, 15, 38, 0.8)",
415
+ "--color-overlay-backdrop-heavy": "rgba(27, 15, 38, 0.95)"
416
+ };
417
+ var typographyVariables = {
418
+ // Font Families
419
+ "--font-display": "'Courier New', 'Courier', monospace",
420
+ "--font-heading": "'Courier New', 'Courier', monospace",
421
+ "--font-body": "'Courier New', 'Courier', monospace",
422
+ // Font Sizes (static scale)
423
+ "--font-size-xs": "0.75rem",
424
+ // 12px
425
+ "--font-size-sm": "0.875rem",
426
+ // 14px
427
+ "--font-size-base": "1rem",
428
+ // 16px
429
+ "--font-size-md": "1.125rem",
430
+ // 18px
431
+ "--font-size-lg": "1.25rem",
432
+ // 20px
433
+ "--font-size-xl": "1.5rem",
434
+ // 24px
435
+ "--font-size-2xl": "2rem",
436
+ // 32px
437
+ "--font-size-3xl": "3rem",
438
+ // 48px
439
+ "--font-size-4xl": "4rem",
440
+ // 64px
441
+ // Font Sizes (responsive)
442
+ "--font-size-cell": "clamp(1rem, 3vw, 1.5rem)",
443
+ "--font-size-hero": "clamp(2.5rem, 8vw, 4rem)",
444
+ "--font-size-subtitle": "clamp(1rem, 3vw, 1.25rem)",
445
+ // Font Weights
446
+ "--font-weight-normal": "400",
447
+ "--font-weight-medium": "600",
448
+ "--font-weight-bold": "700",
449
+ // Letter Spacing
450
+ "--letter-spacing-tight": "0.05em",
451
+ "--letter-spacing-normal": "0.1em",
452
+ "--letter-spacing-wide": "0.2em"
453
+ };
454
+ var spacingVariables = {
455
+ "--spacing-2xs": "0.125rem",
456
+ // 2px
457
+ "--spacing-xs": "0.25rem",
458
+ // 4px
459
+ "--spacing-sm": "0.5rem",
460
+ // 8px
461
+ "--spacing-md": "1rem",
462
+ // 16px
463
+ "--spacing-lg": "1.5rem",
464
+ // 24px
465
+ "--spacing-xl": "2rem",
466
+ // 32px
467
+ "--spacing-2xl": "3rem"
468
+ // 48px
469
+ };
470
+ var borderVariables = {
471
+ // Border Widths
472
+ "--border-width-thin": "1px",
473
+ "--border-width-base": "2px",
474
+ "--border-width-thick": "3px",
475
+ // Border Radii
476
+ "--radius-sm": "2px",
477
+ "--radius-md": "4px",
478
+ "--radius-lg": "6px"
479
+ };
480
+ var shadowVariables = {
481
+ // Depth shadows (layered)
482
+ "--shadow-xs": "0 1px 2px rgba(0, 0, 0, 0.4)",
483
+ "--shadow-sm": "0 2px 8px rgba(0, 0, 0, 0.5), 0 1px 3px rgba(0, 0, 0, 0.3)",
484
+ "--shadow-md": "0 4px 16px rgba(0, 0, 0, 0.6), 0 2px 6px rgba(0, 0, 0, 0.4)",
485
+ "--shadow-lg": "0 8px 24px rgba(0, 0, 0, 0.7), 0 4px 12px rgba(0, 0, 0, 0.5)",
486
+ "--shadow-xl": "0 16px 48px rgba(0, 0, 0, 0.8), 0 8px 24px rgba(0, 0, 0, 0.6)",
487
+ // Glow shadows - Primary (Purple)
488
+ "--shadow-glow-primary": "0 0 10px rgba(124, 91, 214, 0.4)",
489
+ "--shadow-glow-primary-lg": "0 0 20px rgba(124, 91, 214, 0.5), 0 0 40px rgba(124, 91, 214, 0.3)",
490
+ "--shadow-glow-primary-xl": "0 0 30px rgba(124, 91, 214, 0.6), 0 0 60px rgba(124, 91, 214, 0.4)",
491
+ // Glow shadows - Secondary (Teal)
492
+ "--shadow-glow-secondary": "0 0 10px rgba(42, 185, 176, 0.3)",
493
+ "--shadow-glow-secondary-lg": "0 0 20px rgba(42, 185, 176, 0.4), 0 0 40px rgba(42, 185, 176, 0.2)",
494
+ // Glow shadows - Accent (Rose)
495
+ "--shadow-glow-accent": "0 0 10px rgba(216, 107, 154, 0.3)",
496
+ "--shadow-glow-accent-lg": "0 0 20px rgba(216, 107, 154, 0.4), 0 0 40px rgba(216, 107, 154, 0.2)",
497
+ // Glow shadows - Error
498
+ "--shadow-glow-error": "0 0 10px rgba(216, 82, 77, 0.4)",
499
+ // Inset shadows
500
+ "--shadow-inset-primary": "inset 0 0 10px rgba(124, 91, 214, 0.3)",
501
+ "--shadow-inset-subtle": "inset 0 1px 3px rgba(0, 0, 0, 0.3)",
502
+ "--shadow-inset-deep": "inset 0 2px 8px rgba(0, 0, 0, 0.5)"
503
+ };
504
+ var zIndexVariables = {
505
+ "--z-index-base": "1",
506
+ "--z-index-dropdown": "100",
507
+ "--z-index-overlay": "500",
508
+ "--z-index-modal": "1000",
509
+ "--z-index-toast": "1500",
510
+ "--z-index-fullscreen": "2000"
511
+ };
512
+ var timingVariables = {
513
+ // Durations
514
+ "--timing-fast": "150ms",
515
+ "--timing-base": "200ms",
516
+ "--timing-slow": "300ms",
517
+ // Easing functions
518
+ "--easing-default": "ease",
519
+ "--easing-out": "ease-out",
520
+ "--easing-in-out": "ease-in-out"
521
+ };
522
+ var breakpointVariables = {
523
+ "--breakpoint-mobile": "767px",
524
+ "--breakpoint-tablet": "768px",
525
+ "--breakpoint-desktop": "1024px"
526
+ };
527
+ var legacyAliases = {
528
+ // Color aliases
529
+ "--color-primary": "var(--color-interactive-primary)",
530
+ "--color-primary-hover": "var(--color-interactive-primary-hover)",
531
+ "--color-utility": "var(--color-interactive-secondary)",
532
+ "--color-utility-hover": "var(--color-interactive-secondary-hover)",
533
+ "--color-emphasis": "var(--color-interactive-accent)",
534
+ "--color-success": "var(--color-status-success)",
535
+ "--color-warning": "var(--color-status-warning)",
536
+ "--color-error": "var(--color-status-error)",
537
+ // Shadow glow aliases
538
+ "--shadow-glow-utility": "var(--shadow-glow-secondary)",
539
+ "--shadow-glow-utility-lg": "var(--shadow-glow-secondary-lg)",
540
+ "--shadow-glow-emphasis": "var(--shadow-glow-accent)",
541
+ "--shadow-glow-emphasis-lg": "var(--shadow-glow-accent-lg)",
542
+ // Border radius aliases
543
+ "--border-radius-sm": "var(--radius-sm)",
544
+ "--border-radius-md": "var(--radius-md)",
545
+ "--border-radius-lg": "var(--radius-lg)",
546
+ // Timing aliases
547
+ "--transition-fast": "var(--timing-fast)",
548
+ "--transition-base": "var(--timing-base)",
549
+ "--transition-slow": "var(--timing-slow)",
550
+ "--ease-default": "var(--easing-default)",
551
+ "--ease-out": "var(--easing-out)"
552
+ };
553
+ var allCssVariables = {
554
+ ...colorVariables,
555
+ ...typographyVariables,
556
+ ...spacingVariables,
557
+ ...borderVariables,
558
+ ...shadowVariables,
559
+ ...zIndexVariables,
560
+ ...timingVariables,
561
+ ...breakpointVariables,
562
+ ...legacyAliases
563
+ };
564
+ function getCssVariable(name) {
565
+ return allCssVariables[name];
566
+ }
567
+ function cssVar(name) {
568
+ return `var(${name})`;
569
+ }
570
+ function generateCssVariablesString() {
571
+ return Object.entries(allCssVariables).map(([key, value]) => `${key}: ${value};`).join("\n ");
572
+ }
573
+
574
+ // src/globalStyles.ts
304
575
  var globalCss = defineGlobalStyles({
576
+ // Inject CSS variables into :root
577
+ ":root": allCssVariables,
305
578
  // Universal reset
306
579
  "*, *::before, *::after": {
307
580
  boxSizing: "border-box"
308
581
  },
582
+ // Body base styles
583
+ body: {
584
+ backgroundColor: "var(--color-surface-0)",
585
+ color: "var(--color-text-primary)",
586
+ fontFamily: "var(--font-body)",
587
+ fontSize: "var(--font-size-base)",
588
+ lineHeight: "1.5"
589
+ },
309
590
  // Body pseudo-elements for background effects
310
591
  "body::before": {
311
592
  content: '""',
@@ -333,28 +614,28 @@ var globalCss = defineGlobalStyles({
333
614
  height: "8px"
334
615
  },
335
616
  "::-webkit-scrollbar-track": {
336
- background: "{colors.surface.1}"
617
+ background: "var(--color-surface-1)"
337
618
  },
338
619
  "::-webkit-scrollbar-thumb": {
339
- background: "{colors.utility.DEFAULT}",
340
- borderRadius: "{radii.sm}"
620
+ background: "var(--color-interactive-secondary)",
621
+ borderRadius: "var(--radius-sm)"
341
622
  },
342
623
  "::-webkit-scrollbar-thumb:hover": {
343
- background: "{colors.utility.hover}"
624
+ background: "var(--color-interactive-secondary-hover)"
344
625
  },
345
626
  // Firefox scrollbar
346
627
  "*": {
347
628
  scrollbarWidth: "thin",
348
- scrollbarColor: "{colors.utility.DEFAULT} {colors.surface.1}"
629
+ scrollbarColor: "var(--color-interactive-secondary) var(--color-surface-1)"
349
630
  },
350
631
  // Selection styling
351
632
  "::selection": {
352
- background: "{colors.primary.DEFAULT}",
353
- color: "{colors.text.primary}"
633
+ background: "var(--color-interactive-primary)",
634
+ color: "var(--color-text-primary)"
354
635
  },
355
636
  // Focus visible outline
356
637
  ":focus-visible": {
357
- outline: "2px solid {colors.primary.DEFAULT}",
638
+ outline: "2px solid var(--color-interactive-primary)",
358
639
  outlineOffset: "2px"
359
640
  }
360
641
  });
@@ -378,7 +659,7 @@ var buttonRecipe = defineRecipe({
378
659
  borderWidth: "base",
379
660
  borderStyle: "solid",
380
661
  borderColor: "border.strong",
381
- background: "linear-gradient(145deg, var(--chakra-colors-surface-1), var(--chakra-colors-surface-0))",
662
+ background: "linear-gradient(145deg, var(--color-surface-1), var(--color-surface-0))",
382
663
  color: "text.primary",
383
664
  cursor: "pointer",
384
665
  pointerEvents: "auto",
@@ -388,14 +669,14 @@ var buttonRecipe = defineRecipe({
388
669
  letterSpacing: "tight",
389
670
  fontWeight: "medium",
390
671
  borderRadius: "md",
391
- boxShadow: "var(--chakra-shadows-sm), inset 0 1px 0 rgba(255, 255, 255, 0.05)",
672
+ boxShadow: "var(--shadow-sm), inset 0 1px 0 rgba(255, 255, 255, 0.05)",
392
673
  _disabled: {
393
674
  opacity: 0.5,
394
675
  cursor: "not-allowed"
395
676
  },
396
677
  _focusVisible: {
397
- outline: "var(--chakra-border-widths-base) solid var(--chakra-colors-primary)",
398
- outlineOffset: "var(--chakra-border-widths-base)"
678
+ outline: "var(--border-width-base) solid var(--color-interactive-primary)",
679
+ outlineOffset: "var(--border-width-base)"
399
680
  }
400
681
  },
401
682
  variants: {
@@ -404,42 +685,42 @@ var buttonRecipe = defineRecipe({
404
685
  borderColor: "primary",
405
686
  color: "primary",
406
687
  _hover: {
407
- background: "linear-gradient(145deg, var(--chakra-colors-primary-hover), var(--chakra-colors-primary))",
688
+ background: "linear-gradient(145deg, var(--color-interactive-primary-hover), var(--color-interactive-primary))",
408
689
  color: "surface.0",
409
- boxShadow: "var(--chakra-shadows-md), var(--chakra-shadows-glow-primary-lg)",
690
+ boxShadow: "var(--shadow-md), var(--shadow-glow-primary-lg)",
410
691
  transform: "translateY(-2px)"
411
692
  },
412
693
  _active: {
413
694
  transform: "translateY(0)",
414
- boxShadow: "var(--chakra-shadows-xs), var(--chakra-shadows-glow-primary)"
695
+ boxShadow: "var(--shadow-xs), var(--shadow-glow-primary)"
415
696
  }
416
697
  },
417
698
  secondary: {
418
699
  borderColor: "utility",
419
700
  color: "utility",
420
701
  _hover: {
421
- background: "linear-gradient(145deg, var(--chakra-colors-utility), var(--chakra-colors-utility-hover))",
702
+ background: "linear-gradient(145deg, var(--color-interactive-secondary), var(--color-interactive-secondary-hover))",
422
703
  color: "surface.0",
423
- boxShadow: "var(--chakra-shadows-md), var(--chakra-shadows-glow-utility-lg)",
704
+ boxShadow: "var(--shadow-md), var(--shadow-glow-secondary-lg)",
424
705
  transform: "translateY(-2px)"
425
706
  },
426
707
  _active: {
427
708
  transform: "translateY(0)",
428
- boxShadow: "var(--chakra-shadows-xs), var(--chakra-shadows-glow-utility)"
709
+ boxShadow: "var(--shadow-xs), var(--shadow-glow-secondary)"
429
710
  }
430
711
  },
431
712
  danger: {
432
713
  borderColor: "status.error",
433
714
  color: "status.error",
434
715
  _hover: {
435
- background: "linear-gradient(145deg, var(--chakra-colors-status-error), var(--chakra-colors-status-error))",
716
+ background: "linear-gradient(145deg, var(--color-status-error), var(--color-status-error))",
436
717
  color: "surface.0",
437
- boxShadow: "var(--chakra-shadows-md), var(--chakra-shadows-glow-error)",
718
+ boxShadow: "var(--shadow-md), var(--shadow-glow-error)",
438
719
  transform: "translateY(-2px)"
439
720
  },
440
721
  _active: {
441
722
  transform: "translateY(0)",
442
- boxShadow: "var(--chakra-shadows-xs), var(--chakra-shadows-glow-error)"
723
+ boxShadow: "var(--shadow-xs), var(--shadow-glow-error)"
443
724
  }
444
725
  }
445
726
  }
@@ -455,7 +736,7 @@ var cellRecipe = defineRecipe2({
455
736
  className: "ninefold-cell",
456
737
  base: {
457
738
  aspectRatio: "1",
458
- background: "linear-gradient(145deg, {colors.surface.1}, {colors.surface.0})",
739
+ background: "linear-gradient(145deg, var(--color-surface-1), var(--color-surface-0))",
459
740
  borderWidth: "thin",
460
741
  borderColor: "border.subtle",
461
742
  borderStyle: "solid",
@@ -463,15 +744,15 @@ var cellRecipe = defineRecipe2({
463
744
  fontFamily: "body",
464
745
  fontSize: "cell",
465
746
  cursor: "pointer",
466
- transition: "all var(--transition-fast) var(--ease-default)",
747
+ transition: "all var(--timing-fast) var(--easing-default)",
467
748
  p: 0,
468
749
  position: "relative",
469
750
  display: "flex",
470
751
  alignItems: "center",
471
752
  justifyContent: "center",
472
- boxShadow: "{shadows.inset.subtle}, 0 1px 2px rgba(0, 0, 0, 0.2)",
753
+ boxShadow: "var(--shadow-inset-subtle), 0 1px 2px rgba(0, 0, 0, 0.2)",
473
754
  _focusVisible: {
474
- outline: "{borderWidths.base} solid {colors.primary.DEFAULT}",
755
+ outline: "var(--border-width-base) solid var(--color-interactive-primary)",
475
756
  outlineOffset: "-2px",
476
757
  zIndex: "base"
477
758
  }
@@ -480,22 +761,22 @@ var cellRecipe = defineRecipe2({
480
761
  state: {
481
762
  normal: {
482
763
  _hover: {
483
- background: "linear-gradient(145deg, {colors.surface.2}, {colors.surface.1})",
764
+ background: "linear-gradient(145deg, var(--color-surface-2), var(--color-surface-1))",
484
765
  borderColor: "primary.hover",
485
- boxShadow: "{shadows.inset.subtle}, 0 2px 4px rgba(0, 0, 0, 0.3), {shadows.glow.primary}",
766
+ boxShadow: "var(--shadow-inset-subtle), 0 2px 4px rgba(0, 0, 0, 0.3), var(--shadow-glow-primary)",
486
767
  transform: "translateY(-1px)"
487
768
  }
488
769
  },
489
770
  given: {
490
771
  fontWeight: "bold",
491
- background: "linear-gradient(145deg, {colors.surface.2}, {colors.surface.1})",
772
+ background: "linear-gradient(145deg, var(--color-surface-2), var(--color-surface-1))",
492
773
  borderColor: "border.strong",
493
774
  cursor: "default",
494
- boxShadow: "{shadows.inset.subtle}, 0 2px 4px rgba(0, 0, 0, 0.3)",
775
+ boxShadow: "var(--shadow-inset-subtle), 0 2px 4px rgba(0, 0, 0, 0.3)",
495
776
  _hover: {
496
- background: "linear-gradient(145deg, {colors.surface.2}, {colors.surface.1})",
777
+ background: "linear-gradient(145deg, var(--color-surface-2), var(--color-surface-1))",
497
778
  borderColor: "border.strong",
498
- boxShadow: "{shadows.inset.subtle}, 0 2px 4px rgba(0, 0, 0, 0.3)",
779
+ boxShadow: "var(--shadow-inset-subtle), 0 2px 4px rgba(0, 0, 0, 0.3)",
499
780
  transform: "none"
500
781
  }
501
782
  },
@@ -542,16 +823,491 @@ var timerRecipe = defineRecipe3({
542
823
  borderColor: "border.strong",
543
824
  background: "surface.1",
544
825
  borderRadius: "md",
545
- boxShadow: "var(--chakra-shadows-sm), inset 0 1px 0 rgba(255, 255, 255, 0.05)",
826
+ boxShadow: "var(--shadow-sm), inset 0 1px 0 rgba(255, 255, 255, 0.05)",
546
827
  justifyContent: "center"
547
828
  }
548
829
  });
549
830
 
831
+ // src/recipes/loading.ts
832
+ import { defineRecipe as defineRecipe4 } from "@chakra-ui/react";
833
+ var loadingRecipe = defineRecipe4({
834
+ className: "loading",
835
+ base: {
836
+ display: "inline-block",
837
+ width: "12px",
838
+ height: "12px",
839
+ borderRadius: "50%",
840
+ animationName: "bounce",
841
+ animationDuration: "1.4s",
842
+ animationIterationCount: "infinite",
843
+ animationTimingFunction: "ease-in-out",
844
+ animationFillMode: "both"
845
+ },
846
+ variants: {
847
+ size: {
848
+ sm: {
849
+ width: "8px",
850
+ height: "8px"
851
+ },
852
+ md: {
853
+ width: "12px",
854
+ height: "12px"
855
+ },
856
+ lg: {
857
+ width: "16px",
858
+ height: "16px"
859
+ }
860
+ },
861
+ color: {
862
+ primary: {
863
+ bg: "primary"
864
+ },
865
+ secondary: {
866
+ bg: "utility"
867
+ },
868
+ accent: {
869
+ bg: "emphasis"
870
+ }
871
+ }
872
+ },
873
+ defaultVariants: {
874
+ size: "md",
875
+ color: "primary"
876
+ }
877
+ });
878
+
879
+ // src/recipes/input.ts
880
+ import { defineRecipe as defineRecipe5 } from "@chakra-ui/react";
881
+ var inputRecipe = defineRecipe5({
882
+ className: "input",
883
+ base: {
884
+ fontFamily: "body",
885
+ fontSize: "base",
886
+ color: "text.primary",
887
+ backgroundColor: "surface.0",
888
+ borderWidth: "thin",
889
+ borderStyle: "solid",
890
+ borderColor: "border.subtle",
891
+ borderRadius: "md",
892
+ padding: "sm",
893
+ width: "100%",
894
+ transition: "all var(--timing-base) var(--easing-default)",
895
+ _placeholder: {
896
+ color: "text.muted"
897
+ },
898
+ _hover: {
899
+ borderColor: "border.strong"
900
+ },
901
+ _focus: {
902
+ borderColor: "primary.DEFAULT",
903
+ boxShadow: "var(--shadow-glow-primary)",
904
+ outline: "none"
905
+ },
906
+ _disabled: {
907
+ opacity: 0.5,
908
+ cursor: "not-allowed",
909
+ backgroundColor: "surface.1"
910
+ },
911
+ _invalid: {
912
+ borderColor: "status.error",
913
+ boxShadow: "var(--shadow-glow-error)"
914
+ }
915
+ },
916
+ variants: {
917
+ size: {
918
+ sm: {
919
+ fontSize: "sm",
920
+ padding: "xs",
921
+ borderRadius: "sm"
922
+ },
923
+ md: {
924
+ fontSize: "base",
925
+ padding: "sm",
926
+ borderRadius: "md"
927
+ },
928
+ lg: {
929
+ fontSize: "md",
930
+ padding: "md",
931
+ borderRadius: "md"
932
+ }
933
+ },
934
+ variant: {
935
+ outline: {
936
+ backgroundColor: "transparent",
937
+ borderColor: "border.subtle"
938
+ },
939
+ filled: {
940
+ backgroundColor: "surface.1",
941
+ borderColor: "transparent",
942
+ _hover: {
943
+ backgroundColor: "surface.2"
944
+ },
945
+ _focus: {
946
+ backgroundColor: "surface.0",
947
+ borderColor: "primary.DEFAULT"
948
+ }
949
+ }
950
+ }
951
+ },
952
+ defaultVariants: {
953
+ size: "md",
954
+ variant: "outline"
955
+ }
956
+ });
957
+
958
+ // src/recipes/link.ts
959
+ import { defineRecipe as defineRecipe6 } from "@chakra-ui/react";
960
+ var linkRecipe = defineRecipe6({
961
+ className: "link",
962
+ base: {
963
+ color: "primary.DEFAULT",
964
+ textDecoration: "none",
965
+ cursor: "pointer",
966
+ transition: "all var(--timing-fast) var(--easing-default)",
967
+ _hover: {
968
+ color: "primary.hover",
969
+ textDecoration: "underline"
970
+ },
971
+ _active: {
972
+ color: "primary.hover"
973
+ },
974
+ _focusVisible: {
975
+ outline: "2px solid var(--color-interactive-primary)",
976
+ outlineOffset: "2px",
977
+ borderRadius: "sm"
978
+ }
979
+ },
980
+ variants: {
981
+ variant: {
982
+ primary: {
983
+ color: "primary.DEFAULT",
984
+ _hover: {
985
+ color: "primary.hover"
986
+ }
987
+ },
988
+ secondary: {
989
+ color: "utility.DEFAULT",
990
+ _hover: {
991
+ color: "utility.hover"
992
+ }
993
+ },
994
+ muted: {
995
+ color: "text.muted",
996
+ _hover: {
997
+ color: "text.primary"
998
+ }
999
+ }
1000
+ },
1001
+ underline: {
1002
+ always: {
1003
+ textDecoration: "underline"
1004
+ },
1005
+ hover: {
1006
+ textDecoration: "none",
1007
+ _hover: {
1008
+ textDecoration: "underline"
1009
+ }
1010
+ },
1011
+ none: {
1012
+ textDecoration: "none",
1013
+ _hover: {
1014
+ textDecoration: "none"
1015
+ }
1016
+ }
1017
+ }
1018
+ },
1019
+ defaultVariants: {
1020
+ variant: "primary",
1021
+ underline: "hover"
1022
+ }
1023
+ });
1024
+
1025
+ // src/recipes/card.ts
1026
+ import { defineRecipe as defineRecipe7 } from "@chakra-ui/react";
1027
+ var cardRecipe = defineRecipe7({
1028
+ className: "card",
1029
+ base: {
1030
+ background: "linear-gradient(145deg, var(--color-surface-2), var(--color-surface-1))",
1031
+ borderWidth: "thin",
1032
+ borderStyle: "solid",
1033
+ borderColor: "border.subtle",
1034
+ borderRadius: "md",
1035
+ padding: "lg",
1036
+ boxShadow: "var(--shadow-sm)"
1037
+ },
1038
+ variants: {
1039
+ variant: {
1040
+ subtle: {
1041
+ background: "surface.1",
1042
+ borderColor: "border.subtle",
1043
+ boxShadow: "none"
1044
+ },
1045
+ elevated: {
1046
+ background: "linear-gradient(145deg, var(--color-surface-2), var(--color-surface-1))",
1047
+ borderColor: "border.strong",
1048
+ boxShadow: "var(--shadow-md)"
1049
+ },
1050
+ outline: {
1051
+ background: "transparent",
1052
+ borderColor: "border.strong",
1053
+ boxShadow: "none"
1054
+ },
1055
+ glow: {
1056
+ background: "linear-gradient(145deg, var(--color-surface-2), var(--color-surface-1))",
1057
+ borderColor: "primary.DEFAULT",
1058
+ boxShadow: "var(--shadow-md), var(--shadow-glow-primary)"
1059
+ }
1060
+ },
1061
+ size: {
1062
+ sm: {
1063
+ padding: "sm",
1064
+ borderRadius: "sm"
1065
+ },
1066
+ md: {
1067
+ padding: "md",
1068
+ borderRadius: "md"
1069
+ },
1070
+ lg: {
1071
+ padding: "lg",
1072
+ borderRadius: "lg"
1073
+ }
1074
+ }
1075
+ },
1076
+ defaultVariants: {
1077
+ variant: "elevated",
1078
+ size: "md"
1079
+ }
1080
+ });
1081
+
1082
+ // src/recipes/badge.ts
1083
+ import { defineRecipe as defineRecipe8 } from "@chakra-ui/react";
1084
+ var badgeRecipe = defineRecipe8({
1085
+ className: "badge",
1086
+ base: {
1087
+ display: "inline-flex",
1088
+ alignItems: "center",
1089
+ justifyContent: "center",
1090
+ fontFamily: "body",
1091
+ fontSize: "xs",
1092
+ fontWeight: "medium",
1093
+ textTransform: "uppercase",
1094
+ letterSpacing: "tight",
1095
+ borderRadius: "sm",
1096
+ whiteSpace: "nowrap"
1097
+ },
1098
+ variants: {
1099
+ variant: {
1100
+ solid: {
1101
+ color: "surface.0"
1102
+ },
1103
+ subtle: {
1104
+ borderWidth: "thin",
1105
+ borderStyle: "solid"
1106
+ },
1107
+ outline: {
1108
+ backgroundColor: "transparent",
1109
+ borderWidth: "thin",
1110
+ borderStyle: "solid"
1111
+ }
1112
+ },
1113
+ colorScheme: {
1114
+ primary: {},
1115
+ secondary: {},
1116
+ accent: {},
1117
+ success: {},
1118
+ warning: {},
1119
+ error: {}
1120
+ },
1121
+ size: {
1122
+ sm: {
1123
+ fontSize: "xs",
1124
+ paddingX: "xs",
1125
+ paddingY: "2xs"
1126
+ },
1127
+ md: {
1128
+ fontSize: "xs",
1129
+ paddingX: "sm",
1130
+ paddingY: "xs"
1131
+ },
1132
+ lg: {
1133
+ fontSize: "sm",
1134
+ paddingX: "md",
1135
+ paddingY: "xs"
1136
+ }
1137
+ }
1138
+ },
1139
+ compoundVariants: [
1140
+ // Solid variants
1141
+ {
1142
+ variant: "solid",
1143
+ colorScheme: "primary",
1144
+ css: {
1145
+ backgroundColor: "primary.DEFAULT",
1146
+ color: "surface.0"
1147
+ }
1148
+ },
1149
+ {
1150
+ variant: "solid",
1151
+ colorScheme: "secondary",
1152
+ css: {
1153
+ backgroundColor: "utility.DEFAULT",
1154
+ color: "surface.0"
1155
+ }
1156
+ },
1157
+ {
1158
+ variant: "solid",
1159
+ colorScheme: "accent",
1160
+ css: {
1161
+ backgroundColor: "emphasis.DEFAULT",
1162
+ color: "surface.0"
1163
+ }
1164
+ },
1165
+ {
1166
+ variant: "solid",
1167
+ colorScheme: "success",
1168
+ css: {
1169
+ backgroundColor: "status.success",
1170
+ color: "surface.0"
1171
+ }
1172
+ },
1173
+ {
1174
+ variant: "solid",
1175
+ colorScheme: "warning",
1176
+ css: {
1177
+ backgroundColor: "status.warning",
1178
+ color: "surface.0"
1179
+ }
1180
+ },
1181
+ {
1182
+ variant: "solid",
1183
+ colorScheme: "error",
1184
+ css: {
1185
+ backgroundColor: "status.error",
1186
+ color: "surface.0"
1187
+ }
1188
+ },
1189
+ // Subtle variants
1190
+ {
1191
+ variant: "subtle",
1192
+ colorScheme: "primary",
1193
+ css: {
1194
+ backgroundColor: "overlay.light",
1195
+ color: "primary.DEFAULT",
1196
+ borderColor: "primary.DEFAULT"
1197
+ }
1198
+ },
1199
+ {
1200
+ variant: "subtle",
1201
+ colorScheme: "secondary",
1202
+ css: {
1203
+ backgroundColor: "rgba(42, 185, 176, 0.1)",
1204
+ color: "utility.DEFAULT",
1205
+ borderColor: "utility.DEFAULT"
1206
+ }
1207
+ },
1208
+ {
1209
+ variant: "subtle",
1210
+ colorScheme: "accent",
1211
+ css: {
1212
+ backgroundColor: "rgba(216, 107, 154, 0.1)",
1213
+ color: "emphasis.DEFAULT",
1214
+ borderColor: "emphasis.DEFAULT"
1215
+ }
1216
+ },
1217
+ {
1218
+ variant: "subtle",
1219
+ colorScheme: "success",
1220
+ css: {
1221
+ backgroundColor: "rgba(42, 185, 176, 0.1)",
1222
+ color: "status.success",
1223
+ borderColor: "status.success"
1224
+ }
1225
+ },
1226
+ {
1227
+ variant: "subtle",
1228
+ colorScheme: "warning",
1229
+ css: {
1230
+ backgroundColor: "rgba(217, 162, 79, 0.1)",
1231
+ color: "status.warning",
1232
+ borderColor: "status.warning"
1233
+ }
1234
+ },
1235
+ {
1236
+ variant: "subtle",
1237
+ colorScheme: "error",
1238
+ css: {
1239
+ backgroundColor: "overlay.error",
1240
+ color: "status.error",
1241
+ borderColor: "status.error"
1242
+ }
1243
+ },
1244
+ // Outline variants
1245
+ {
1246
+ variant: "outline",
1247
+ colorScheme: "primary",
1248
+ css: {
1249
+ color: "primary.DEFAULT",
1250
+ borderColor: "primary.DEFAULT"
1251
+ }
1252
+ },
1253
+ {
1254
+ variant: "outline",
1255
+ colorScheme: "secondary",
1256
+ css: {
1257
+ color: "utility.DEFAULT",
1258
+ borderColor: "utility.DEFAULT"
1259
+ }
1260
+ },
1261
+ {
1262
+ variant: "outline",
1263
+ colorScheme: "accent",
1264
+ css: {
1265
+ color: "emphasis.DEFAULT",
1266
+ borderColor: "emphasis.DEFAULT"
1267
+ }
1268
+ },
1269
+ {
1270
+ variant: "outline",
1271
+ colorScheme: "success",
1272
+ css: {
1273
+ color: "status.success",
1274
+ borderColor: "status.success"
1275
+ }
1276
+ },
1277
+ {
1278
+ variant: "outline",
1279
+ colorScheme: "warning",
1280
+ css: {
1281
+ color: "status.warning",
1282
+ borderColor: "status.warning"
1283
+ }
1284
+ },
1285
+ {
1286
+ variant: "outline",
1287
+ colorScheme: "error",
1288
+ css: {
1289
+ color: "status.error",
1290
+ borderColor: "status.error"
1291
+ }
1292
+ }
1293
+ ],
1294
+ defaultVariants: {
1295
+ variant: "subtle",
1296
+ colorScheme: "primary",
1297
+ size: "md"
1298
+ }
1299
+ });
1300
+
550
1301
  // src/recipes/index.ts
551
1302
  var recipes = {
552
1303
  button: buttonRecipe,
553
1304
  cell: cellRecipe,
554
- timer: timerRecipe
1305
+ timer: timerRecipe,
1306
+ loading: loadingRecipe,
1307
+ input: inputRecipe,
1308
+ link: linkRecipe,
1309
+ card: cardRecipe,
1310
+ badge: badgeRecipe
555
1311
  };
556
1312
 
557
1313
  // src/slotRecipes/modal.ts
@@ -563,7 +1319,7 @@ var modalSlotRecipe = defineSlotRecipe({
563
1319
  backdrop: {
564
1320
  position: "fixed",
565
1321
  inset: 0,
566
- background: "{colors.overlay.backdrop.heavy}",
1322
+ background: "var(--color-overlay-backdrop-heavy)",
567
1323
  backdropFilter: "blur(8px)",
568
1324
  display: "flex",
569
1325
  alignItems: "center",
@@ -572,7 +1328,7 @@ var modalSlotRecipe = defineSlotRecipe({
572
1328
  padding: "md"
573
1329
  },
574
1330
  modal: {
575
- background: "linear-gradient(145deg, {colors.surface.2}, {colors.surface.1})",
1331
+ background: "linear-gradient(145deg, var(--color-surface-2), var(--color-surface-1))",
576
1332
  borderWidth: "base",
577
1333
  borderStyle: "solid",
578
1334
  borderColor: "primary.DEFAULT",
@@ -580,7 +1336,7 @@ var modalSlotRecipe = defineSlotRecipe({
580
1336
  width: "100%",
581
1337
  maxHeight: "90vh",
582
1338
  overflowY: "auto",
583
- boxShadow: "{shadows.xl}, {shadows.glow.primary-xl}, inset 0 1px 0 rgba(255, 255, 255, 0.1)",
1339
+ boxShadow: "var(--shadow-xl), var(--shadow-glow-primary-xl), inset 0 1px 0 rgba(255, 255, 255, 0.1)",
584
1340
  borderRadius: "md"
585
1341
  },
586
1342
  header: {
@@ -588,7 +1344,7 @@ var modalSlotRecipe = defineSlotRecipe({
588
1344
  borderBottomWidth: "thin",
589
1345
  borderBottomStyle: "solid",
590
1346
  borderBottomColor: "border.subtle",
591
- background: "linear-gradient(180deg, {colors.overlay.light}, transparent)"
1347
+ background: "linear-gradient(180deg, var(--color-overlay-light), transparent)"
592
1348
  },
593
1349
  title: {
594
1350
  margin: 0,
@@ -643,13 +1399,14 @@ var switchSlotRecipe = defineSlotRecipe2({
643
1399
  borderWidth: "base",
644
1400
  borderStyle: "solid",
645
1401
  borderColor: "border.strong",
646
- background: "linear-gradient(140deg, {colors.surface.2}, {colors.surface.1} 50%, {colors.surface.0})",
647
- boxShadow: "{shadows.sm}, inset 0 1px 0 rgba(255, 255, 255, 0.06)",
1402
+ background: "linear-gradient(140deg, var(--color-surface-2), var(--color-surface-1) 50%, var(--color-surface-0))",
1403
+ boxShadow: "var(--shadow-sm), inset 0 1px 0 rgba(255, 255, 255, 0.06)",
648
1404
  transition: "all 200ms ease",
1405
+ cursor: "pointer",
649
1406
  _checked: {
650
- borderColor: "primary.DEFAULT",
651
- background: "linear-gradient(140deg, {colors.primary.hover}, {colors.primary.DEFAULT})",
652
- boxShadow: "{shadows.md}, {shadows.glow.primary}, inset 0 1px 0 rgba(255, 255, 255, 0.1)"
1407
+ borderColor: "primary",
1408
+ background: "linear-gradient(140deg, var(--color-interactive-primary-hover), var(--color-interactive-primary))",
1409
+ boxShadow: "var(--shadow-md), var(--shadow-glow-primary), inset 0 1px 0 rgba(255, 255, 255, 0.1)"
653
1410
  }
654
1411
  },
655
1412
  thumb: {
@@ -657,7 +1414,7 @@ var switchSlotRecipe = defineSlotRecipe2({
657
1414
  height: "var(--switch-height)",
658
1415
  borderRadius: "full",
659
1416
  background: "surface.0",
660
- boxShadow: "{shadows.sm}",
1417
+ boxShadow: "var(--shadow-sm)",
661
1418
  transitionProperty: "translate",
662
1419
  transitionDuration: "fast",
663
1420
  _checked: {
@@ -730,13 +1487,429 @@ var victoryScreenSlotRecipe = defineSlotRecipe3({
730
1487
  }
731
1488
  });
732
1489
 
1490
+ // src/slotRecipes/accordion.ts
1491
+ import { defineSlotRecipe as defineSlotRecipe4 } from "@chakra-ui/react";
1492
+ var accordionSlotRecipe = defineSlotRecipe4({
1493
+ className: "accordion",
1494
+ slots: ["root", "item", "trigger", "icon", "content"],
1495
+ base: {
1496
+ root: {
1497
+ width: "100%"
1498
+ },
1499
+ item: {
1500
+ borderWidth: "thin",
1501
+ borderStyle: "solid",
1502
+ borderColor: "border.subtle",
1503
+ borderRadius: "md",
1504
+ overflow: "hidden",
1505
+ marginBottom: "sm",
1506
+ _last: {
1507
+ marginBottom: 0
1508
+ }
1509
+ },
1510
+ trigger: {
1511
+ display: "flex",
1512
+ alignItems: "center",
1513
+ justifyContent: "space-between",
1514
+ width: "100%",
1515
+ padding: "sm",
1516
+ backgroundColor: "surface.0",
1517
+ borderWidth: 0,
1518
+ borderBottomWidth: "thin",
1519
+ borderStyle: "solid",
1520
+ borderColor: "transparent",
1521
+ cursor: "pointer",
1522
+ fontFamily: "body",
1523
+ fontSize: "sm",
1524
+ fontWeight: "medium",
1525
+ color: "primary.DEFAULT",
1526
+ textTransform: "uppercase",
1527
+ letterSpacing: "wide",
1528
+ transition: "all var(--timing-base) var(--easing-default)",
1529
+ boxShadow: "inset 0 1px 0 rgba(255, 255, 255, 0.06)",
1530
+ _hover: {
1531
+ backgroundColor: "surface.1"
1532
+ },
1533
+ _expanded: {
1534
+ borderBottomColor: "border.subtle",
1535
+ backgroundColor: "surface.1"
1536
+ }
1537
+ },
1538
+ icon: {
1539
+ transition: "transform var(--timing-base) var(--easing-default)",
1540
+ color: "text.muted",
1541
+ _expanded: {
1542
+ transform: "rotate(180deg)"
1543
+ }
1544
+ },
1545
+ content: {
1546
+ padding: "md",
1547
+ backgroundColor: "surface.1"
1548
+ }
1549
+ },
1550
+ variants: {
1551
+ variant: {
1552
+ subtle: {
1553
+ item: {
1554
+ borderColor: "border.subtle"
1555
+ },
1556
+ trigger: {
1557
+ backgroundColor: "surface.0"
1558
+ },
1559
+ content: {
1560
+ backgroundColor: "surface.1"
1561
+ }
1562
+ },
1563
+ outline: {
1564
+ item: {
1565
+ borderColor: "border.strong"
1566
+ },
1567
+ trigger: {
1568
+ backgroundColor: "transparent",
1569
+ _hover: {
1570
+ backgroundColor: "overlay.subtle"
1571
+ }
1572
+ },
1573
+ content: {
1574
+ backgroundColor: "transparent"
1575
+ }
1576
+ },
1577
+ solid: {
1578
+ item: {
1579
+ borderColor: "primary.DEFAULT",
1580
+ boxShadow: "var(--shadow-glow-primary)"
1581
+ },
1582
+ trigger: {
1583
+ backgroundColor: "surface.1",
1584
+ borderBottomColor: "primary.DEFAULT"
1585
+ },
1586
+ content: {
1587
+ backgroundColor: "surface.0"
1588
+ }
1589
+ }
1590
+ },
1591
+ size: {
1592
+ sm: {
1593
+ trigger: {
1594
+ padding: "xs",
1595
+ fontSize: "xs"
1596
+ },
1597
+ content: {
1598
+ padding: "sm"
1599
+ }
1600
+ },
1601
+ md: {
1602
+ trigger: {
1603
+ padding: "sm",
1604
+ fontSize: "sm"
1605
+ },
1606
+ content: {
1607
+ padding: "md"
1608
+ }
1609
+ },
1610
+ lg: {
1611
+ trigger: {
1612
+ padding: "md",
1613
+ fontSize: "base"
1614
+ },
1615
+ content: {
1616
+ padding: "lg"
1617
+ }
1618
+ }
1619
+ }
1620
+ },
1621
+ defaultVariants: {
1622
+ variant: "subtle",
1623
+ size: "md"
1624
+ }
1625
+ });
1626
+
1627
+ // src/slotRecipes/radioGroup.ts
1628
+ import { defineSlotRecipe as defineSlotRecipe5 } from "@chakra-ui/react";
1629
+ var radioGroupSlotRecipe = defineSlotRecipe5({
1630
+ className: "radioGroup",
1631
+ slots: ["root", "label", "group", "item", "indicator", "text", "description"],
1632
+ base: {
1633
+ root: {
1634
+ width: "100%"
1635
+ },
1636
+ label: {
1637
+ fontFamily: "body",
1638
+ fontSize: "base",
1639
+ fontWeight: "medium",
1640
+ color: "primary.DEFAULT",
1641
+ textTransform: "uppercase",
1642
+ letterSpacing: "tight",
1643
+ marginBottom: "md"
1644
+ },
1645
+ group: {
1646
+ display: "flex",
1647
+ flexDirection: "column",
1648
+ gap: "sm"
1649
+ },
1650
+ item: {
1651
+ display: "flex",
1652
+ alignItems: "flex-start",
1653
+ gap: "sm",
1654
+ padding: "sm",
1655
+ borderWidth: "thin",
1656
+ borderStyle: "solid",
1657
+ borderColor: "border.subtle",
1658
+ borderRadius: "md",
1659
+ backgroundColor: "transparent",
1660
+ cursor: "pointer",
1661
+ transition: "all var(--timing-base) var(--easing-default)",
1662
+ _hover: {
1663
+ borderColor: "primary.DEFAULT",
1664
+ backgroundColor: "overlay.subtle"
1665
+ },
1666
+ _checked: {
1667
+ borderColor: "primary.DEFAULT",
1668
+ backgroundColor: "overlay.light"
1669
+ },
1670
+ _disabled: {
1671
+ opacity: 0.5,
1672
+ cursor: "not-allowed",
1673
+ _hover: {
1674
+ borderColor: "border.subtle",
1675
+ backgroundColor: "transparent"
1676
+ }
1677
+ }
1678
+ },
1679
+ indicator: {
1680
+ display: "flex",
1681
+ alignItems: "center",
1682
+ justifyContent: "center",
1683
+ width: "18px",
1684
+ height: "18px",
1685
+ borderWidth: "base",
1686
+ borderStyle: "solid",
1687
+ borderColor: "border.strong",
1688
+ borderRadius: "50%",
1689
+ backgroundColor: "surface.0",
1690
+ flexShrink: 0,
1691
+ marginTop: "2px",
1692
+ transition: "all var(--timing-fast) var(--easing-default)",
1693
+ _checked: {
1694
+ borderColor: "primary.DEFAULT",
1695
+ backgroundColor: "primary.DEFAULT",
1696
+ _after: {
1697
+ content: '""',
1698
+ display: "block",
1699
+ width: "8px",
1700
+ height: "8px",
1701
+ borderRadius: "50%",
1702
+ backgroundColor: "surface.0"
1703
+ }
1704
+ }
1705
+ },
1706
+ text: {
1707
+ fontSize: "base",
1708
+ fontWeight: "medium",
1709
+ color: "text.primary"
1710
+ },
1711
+ description: {
1712
+ fontSize: "sm",
1713
+ color: "text.muted",
1714
+ marginTop: "2xs"
1715
+ }
1716
+ },
1717
+ variants: {
1718
+ variant: {
1719
+ outline: {
1720
+ item: {
1721
+ backgroundColor: "transparent"
1722
+ }
1723
+ },
1724
+ subtle: {
1725
+ item: {
1726
+ backgroundColor: "surface.1",
1727
+ _hover: {
1728
+ backgroundColor: "surface.2"
1729
+ },
1730
+ _checked: {
1731
+ backgroundColor: "overlay.light"
1732
+ }
1733
+ }
1734
+ },
1735
+ cards: {
1736
+ item: {
1737
+ padding: "md",
1738
+ borderRadius: "md",
1739
+ boxShadow: "var(--shadow-xs)",
1740
+ _checked: {
1741
+ boxShadow: "var(--shadow-sm), var(--shadow-glow-primary)"
1742
+ }
1743
+ }
1744
+ }
1745
+ },
1746
+ orientation: {
1747
+ vertical: {
1748
+ group: {
1749
+ flexDirection: "column"
1750
+ }
1751
+ },
1752
+ horizontal: {
1753
+ group: {
1754
+ flexDirection: "row",
1755
+ flexWrap: "wrap"
1756
+ },
1757
+ item: {
1758
+ flex: "1 1 auto"
1759
+ }
1760
+ }
1761
+ },
1762
+ size: {
1763
+ sm: {
1764
+ item: {
1765
+ padding: "xs"
1766
+ },
1767
+ indicator: {
1768
+ width: "14px",
1769
+ height: "14px",
1770
+ _checked: {
1771
+ _after: {
1772
+ width: "6px",
1773
+ height: "6px"
1774
+ }
1775
+ }
1776
+ },
1777
+ text: {
1778
+ fontSize: "sm"
1779
+ },
1780
+ description: {
1781
+ fontSize: "xs"
1782
+ }
1783
+ },
1784
+ md: {
1785
+ item: {
1786
+ padding: "sm"
1787
+ },
1788
+ indicator: {
1789
+ width: "18px",
1790
+ height: "18px"
1791
+ },
1792
+ text: {
1793
+ fontSize: "base"
1794
+ },
1795
+ description: {
1796
+ fontSize: "sm"
1797
+ }
1798
+ },
1799
+ lg: {
1800
+ item: {
1801
+ padding: "md"
1802
+ },
1803
+ indicator: {
1804
+ width: "22px",
1805
+ height: "22px",
1806
+ _checked: {
1807
+ _after: {
1808
+ width: "10px",
1809
+ height: "10px"
1810
+ }
1811
+ }
1812
+ },
1813
+ text: {
1814
+ fontSize: "md"
1815
+ },
1816
+ description: {
1817
+ fontSize: "base"
1818
+ }
1819
+ }
1820
+ }
1821
+ },
1822
+ defaultVariants: {
1823
+ variant: "outline",
1824
+ orientation: "vertical",
1825
+ size: "md"
1826
+ }
1827
+ });
1828
+
733
1829
  // src/slotRecipes/index.ts
734
1830
  var slotRecipes = {
735
1831
  modal: modalSlotRecipe,
736
1832
  switch: switchSlotRecipe,
737
- victoryScreen: victoryScreenSlotRecipe
1833
+ victoryScreen: victoryScreenSlotRecipe,
1834
+ accordion: accordionSlotRecipe,
1835
+ radioGroup: radioGroupSlotRecipe
738
1836
  };
739
1837
 
1838
+ // src/utils/contrast.ts
1839
+ function hexToRgb(hex) {
1840
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
1841
+ if (!result) {
1842
+ throw new Error(`Invalid hex color: ${hex}`);
1843
+ }
1844
+ return {
1845
+ r: parseInt(result[1], 16),
1846
+ g: parseInt(result[2], 16),
1847
+ b: parseInt(result[3], 16)
1848
+ };
1849
+ }
1850
+ function relativeLuminance(r, g, b) {
1851
+ const [rs, gs, bs] = [r, g, b].map((c) => {
1852
+ const sRGB = c / 255;
1853
+ return sRGB <= 0.03928 ? sRGB / 12.92 : Math.pow((sRGB + 0.055) / 1.055, 2.4);
1854
+ });
1855
+ return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs;
1856
+ }
1857
+ function contrastRatio(color1, color2) {
1858
+ const rgb1 = hexToRgb(color1);
1859
+ const rgb2 = hexToRgb(color2);
1860
+ const l1 = relativeLuminance(rgb1.r, rgb1.g, rgb1.b);
1861
+ const l2 = relativeLuminance(rgb2.r, rgb2.g, rgb2.b);
1862
+ const lighter = Math.max(l1, l2);
1863
+ const darker = Math.min(l1, l2);
1864
+ return (lighter + 0.05) / (darker + 0.05);
1865
+ }
1866
+ function formatContrastRatio(ratio) {
1867
+ return `${ratio.toFixed(2)}:1`;
1868
+ }
1869
+ function getWcagLevel(ratio, isLargeText = false) {
1870
+ if (isLargeText) {
1871
+ if (ratio >= 4.5) return "AAA";
1872
+ if (ratio >= 3) return "AA";
1873
+ return "fail";
1874
+ } else {
1875
+ if (ratio >= 7) return "AAA";
1876
+ if (ratio >= 4.5) return "AA";
1877
+ if (ratio >= 3) return "AA-large";
1878
+ return "fail";
1879
+ }
1880
+ }
1881
+ function getWcagDescription(level) {
1882
+ switch (level) {
1883
+ case "AAA":
1884
+ return "Enhanced accessibility (AAA)";
1885
+ case "AA":
1886
+ return "Minimum accessibility (AA)";
1887
+ case "AA-large":
1888
+ return "Large text only (AA)";
1889
+ case "fail":
1890
+ return "Does not meet WCAG standards";
1891
+ }
1892
+ }
1893
+ function meetsWcagAA(ratio, isLargeText = false) {
1894
+ const level = getWcagLevel(ratio, isLargeText);
1895
+ return level === "AAA" || level === "AA";
1896
+ }
1897
+ function getContrastPairs(foregrounds, backgrounds) {
1898
+ const pairs = [];
1899
+ for (const [fgName, fgColor] of Object.entries(foregrounds)) {
1900
+ for (const [bgName, bgColor] of Object.entries(backgrounds)) {
1901
+ const ratio = contrastRatio(fgColor, bgColor);
1902
+ pairs.push({
1903
+ foreground: fgName,
1904
+ background: bgName,
1905
+ ratio,
1906
+ level: getWcagLevel(ratio)
1907
+ });
1908
+ }
1909
+ }
1910
+ return pairs;
1911
+ }
1912
+
740
1913
  // src/index.ts
741
1914
  var system = createSystem(defaultConfig, {
742
1915
  theme: {
@@ -761,6 +1934,26 @@ var system = createSystem(defaultConfig, {
761
1934
  globalCss
762
1935
  });
763
1936
  export {
764
- system
1937
+ allCssVariables,
1938
+ borderVariables,
1939
+ breakpointVariables,
1940
+ colorVariables,
1941
+ contrastRatio,
1942
+ cssVar,
1943
+ formatContrastRatio,
1944
+ generateCssVariablesString,
1945
+ getContrastPairs,
1946
+ getCssVariable,
1947
+ getWcagDescription,
1948
+ getWcagLevel,
1949
+ hexToRgb,
1950
+ meetsWcagAA,
1951
+ relativeLuminance,
1952
+ shadowVariables,
1953
+ spacingVariables,
1954
+ system,
1955
+ timingVariables,
1956
+ typographyVariables,
1957
+ zIndexVariables
765
1958
  };
766
1959
  //# sourceMappingURL=index.js.map