@almadar/ui 6.29.0 → 6.31.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.
Files changed (52) hide show
  1. package/dist/{EntityBindingContext-UyeCfEBS.d.cts → EntityBindingContext-ChCONv2W.d.cts} +1 -50
  2. package/dist/{EntityBindingContext-UyeCfEBS.d.ts → EntityBindingContext-ChCONv2W.d.ts} +1 -50
  3. package/dist/avl/index.cjs +5 -6
  4. package/dist/avl/index.js +5 -6
  5. package/dist/components/index.cjs +4 -5
  6. package/dist/components/index.js +4 -5
  7. package/dist/context/index.cjs +135 -105
  8. package/dist/context/index.d.cts +2 -60
  9. package/dist/context/index.d.ts +2 -60
  10. package/dist/context/index.js +135 -105
  11. package/dist/lib/index.cjs +455 -0
  12. package/dist/lib/index.d.cts +42 -1
  13. package/dist/lib/index.d.ts +42 -1
  14. package/dist/lib/index.js +438 -1
  15. package/dist/marketing/index.cjs +4 -5
  16. package/dist/marketing/index.js +4 -5
  17. package/dist/providers/index.cjs +143 -116
  18. package/dist/providers/index.d.cts +1 -1
  19. package/dist/providers/index.d.ts +1 -1
  20. package/dist/providers/index.js +143 -116
  21. package/dist/runtime/index.cjs +5 -6
  22. package/dist/runtime/index.d.cts +2 -2
  23. package/dist/runtime/index.d.ts +2 -2
  24. package/dist/runtime/index.js +5 -6
  25. package/dist/themeTokens-DVRwufw8.d.cts +112 -0
  26. package/dist/themeTokens-DVRwufw8.d.ts +112 -0
  27. package/package.json +6 -5
  28. package/scripts/audit-tailwind-safelist.ts +4 -0
  29. package/tailwind-preset.cjs +155 -28
  30. package/themes/almadar-website.css +37 -107
  31. package/themes/almadar.css +37 -108
  32. package/themes/atelier.css +145 -240
  33. package/themes/bloomberg-dense.css +145 -252
  34. package/themes/clay.css +39 -137
  35. package/themes/comic.css +39 -145
  36. package/themes/corporate.css +39 -131
  37. package/themes/game-adventure.css +22 -87
  38. package/themes/game-rpg.css +22 -84
  39. package/themes/game-sci-fi.css +22 -88
  40. package/themes/game-ui-pack.css +22 -85
  41. package/themes/gazette.css +43 -135
  42. package/themes/glass.css +39 -148
  43. package/themes/kiosk.css +51 -146
  44. package/themes/linear-clean.css +145 -215
  45. package/themes/minimalist.css +39 -125
  46. package/themes/neon.css +39 -132
  47. package/themes/notion-editorial.css +145 -215
  48. package/themes/prism.css +37 -100
  49. package/themes/retro.css +39 -130
  50. package/themes/terminal.css +61 -152
  51. package/themes/trait-wars.css +121 -285
  52. package/themes/wireframe.css +41 -128
package/themes/prism.css CHANGED
@@ -1,51 +1,20 @@
1
1
  /**
2
- * Prism Theme
3
- *
4
- * Compact tech aesthetic — Linear-influenced but louder. Tight 4pt rhythm,
5
- * mono-heavy numerics, electric violet + lime accents, mechanical linear motion.
2
+ * GENERATED — do not edit by hand.
3
+ * Source: packages/almadar-core/themes/prism.json
4
+ * Regenerate: node tools/almadar-pattern-sync/dist/index.js themes (or `almadar-sync themes`)
6
5
  */
7
6
 
8
- /* ==========================================================================
9
- * LIGHT MODE
10
- * ========================================================================== */
11
7
  [data-theme="prism-light"] {
12
- /* Shadows - Flat-ish, hairline-led */
13
- --shadow-none: none;
14
- --shadow-sm: 0 1px 0 rgba(15, 23, 42, 0.04), 0 1px 2px rgba(15, 23, 42, 0.04);
15
- --shadow-main: 0 1px 2px rgba(15, 23, 42, 0.06), 0 2px 6px rgba(15, 23, 42, 0.04);
16
- --shadow-lg: 0 4px 12px rgba(15, 23, 42, 0.08), 0 2px 4px rgba(15, 23, 42, 0.04);
17
- --shadow-inner: inset 0 1px 1px rgba(15, 23, 42, 0.04);
18
- --shadow-hover: 0 2px 6px rgba(124, 58, 237, 0.12);
19
- --shadow-active: 0 1px 2px rgba(124, 58, 237, 0.08);
20
-
21
- /* Border radius - Mixed: containers sharp-ish, interactive softer */
22
- --radius-none: 0px;
23
- --radius-sm: 4px;
24
- --radius-md: 6px;
25
- --radius-lg: 10px;
26
- --radius-xl: 12px;
27
- --radius-full: 9999px;
28
-
29
- /* Border width - Hairline */
30
- --border-width: 1px;
31
- --border-width-thin: 1px;
32
- --border-width-thick: 2px;
33
-
34
- /* Colors - Electric violet primary, lime accent, clean off-white */
35
8
  --color-primary: #7c3aed;
36
9
  --color-primary-hover: #6d28d9;
37
10
  --color-primary-foreground: #ffffff;
38
-
39
11
  --color-secondary: #f1f5f9;
40
12
  --color-secondary-hover: #e2e8f0;
41
13
  --color-secondary-foreground: #0f172a;
42
-
43
14
  --color-accent: #84cc16;
44
15
  --color-accent-foreground: #1a2e05;
45
-
46
16
  --color-muted: #f1f5f9;
47
17
  --color-muted-foreground: #59677c;
48
-
49
18
  --color-background: #fafafa;
50
19
  --color-foreground: #0f172a;
51
20
  --color-card: #ffffff;
@@ -54,8 +23,6 @@
54
23
  --color-border: #e2e8f0;
55
24
  --color-input: #cbd5e1;
56
25
  --color-ring: #7c3aed;
57
-
58
- /* Semantic colors */
59
26
  --color-error: #dc2626;
60
27
  --color-error-foreground: #ffffff;
61
28
  --color-success: #15803d;
@@ -64,99 +31,70 @@
64
31
  --color-warning-foreground: #ffffff;
65
32
  --color-info: #2563eb;
66
33
  --color-info-foreground: #ffffff;
67
-
68
- /* Icon styling - Thin */
69
- --icon-stroke-width: 1.5;
34
+ --radius-none: 0px;
35
+ --radius-sm: 4px;
36
+ --radius-md: 6px;
37
+ --radius-lg: 10px;
38
+ --radius-xl: 12px;
39
+ --radius-full: 9999px;
40
+ --border-width: 1px;
41
+ --border-width-thin: 1px;
42
+ --border-width-thick: 2px;
70
43
  --icon-color: currentColor;
71
-
72
- /* Transitions - Snappy, mechanical linear */
73
44
  --transition-fast: 80ms;
74
45
  --transition-normal: 120ms;
75
46
  --transition-slow: 180ms;
76
47
  --transition-timing: linear;
77
-
78
- /* Hover/Active transforms - Subtle */
79
48
  --hover-scale: 1.0;
80
49
  --hover-translate-y: -1px;
81
50
  --hover-translate-x: 0;
82
51
  --active-scale: 0.99;
83
52
  --active-translate-y: 0;
84
-
85
- /* Focus ring - Electric violet */
86
53
  --focus-ring-width: 2px;
87
54
  --focus-ring-offset: 2px;
88
55
  --focus-ring-color: #7c3aed;
89
-
90
- /* Motion axis - snappy, mechanical linear */
56
+ --shadow-none: none;
57
+ --shadow-sm: 0 1px 0 rgba(15, 23, 42, 0.04), 0 1px 2px rgba(15, 23, 42, 0.04);
58
+ --shadow-main: 0 1px 2px rgba(15, 23, 42, 0.06), 0 2px 6px rgba(15, 23, 42, 0.04);
59
+ --shadow-lg: 0 4px 12px rgba(15, 23, 42, 0.08), 0 2px 4px rgba(15, 23, 42, 0.04);
60
+ --shadow-inner: inset 0 1px 1px rgba(15, 23, 42, 0.04);
61
+ --shadow-hover: 0 2px 6px rgba(124, 58, 237, 0.12);
62
+ --shadow-active: 0 1px 2px rgba(124, 58, 237, 0.08);
91
63
  --duration-instant: 0ms;
92
64
  --duration-fast: 80ms;
93
65
  --duration-normal: 120ms;
94
66
  --duration-slow: 180ms;
95
67
  --duration-dramatic: 240ms;
96
- /* Motion axis - everything linear, mechanical */
97
68
  --easing-linear: linear;
98
69
  --easing-standard: linear;
99
70
  --easing-emphasized: linear;
100
71
  --easing-spring: linear;
101
- /* Iconography axis - thin lucide */
102
72
  --icon-family: lucide;
73
+ --icon-stroke-width: 1.5;
103
74
  --icon-default-size: 14px;
104
- /* Elevation axis - flat-ish */
105
75
  --elevation-card: var(--shadow-sm);
106
76
  --elevation-popover: var(--shadow-main);
107
77
  --elevation-dialog: var(--shadow-main);
108
78
  --elevation-toast: var(--shadow-sm);
109
- /* Geometry axis - containers sharp-ish, interactive softer, pill full */
110
79
  --radius-container: 6px;
111
80
  --radius-interactive: 10px;
112
81
  --radius-pill: 9999px;
113
- /* Geometry axis - hairline borders */
114
82
  --border-hairline: 1px;
115
83
  --border-standard: 1px;
116
84
  --border-heavy: 2px;
117
85
  }
118
86
 
119
- /* ==========================================================================
120
- * DARK MODE
121
- * ========================================================================== */
122
87
  [data-theme="prism-dark"] {
123
- /* Shadows - Flat, deep shadows */
124
- --shadow-none: none;
125
- --shadow-sm: 0 1px 0 rgba(0, 0, 0, 0.3), 0 1px 2px rgba(0, 0, 0, 0.2);
126
- --shadow-main: 0 1px 2px rgba(0, 0, 0, 0.4), 0 2px 6px rgba(0, 0, 0, 0.3);
127
- --shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.5), 0 2px 4px rgba(0, 0, 0, 0.3);
128
- --shadow-inner: inset 0 1px 1px rgba(0, 0, 0, 0.3);
129
- --shadow-hover: 0 2px 8px rgba(167, 139, 250, 0.2);
130
- --shadow-active: 0 1px 2px rgba(167, 139, 250, 0.15);
131
-
132
- /* Border radius - Mixed: containers sharp-ish, interactive softer */
133
- --radius-none: 0px;
134
- --radius-sm: 4px;
135
- --radius-md: 6px;
136
- --radius-lg: 10px;
137
- --radius-xl: 12px;
138
- --radius-full: 9999px;
139
-
140
- /* Border width - Hairline */
141
- --border-width: 1px;
142
- --border-width-thin: 1px;
143
- --border-width-thick: 2px;
144
-
145
- /* Colors - Brighter violet on very dark slate */
146
88
  --color-primary: #a78bfa;
147
89
  --color-primary-hover: #c4b5fd;
148
90
  --color-primary-foreground: #1e1b4b;
149
-
150
91
  --color-secondary: #1f1d3a;
151
92
  --color-secondary-hover: #2a2748;
152
93
  --color-secondary-foreground: #e2e8f0;
153
-
154
94
  --color-accent: #bef264;
155
95
  --color-accent-foreground: #1a2e05;
156
-
157
96
  --color-muted: #1f1d3a;
158
97
  --color-muted-foreground: #94a3b8;
159
-
160
98
  --color-background: #0c0a1a;
161
99
  --color-foreground: #e2e8f0;
162
100
  --color-card: #14122a;
@@ -165,8 +103,6 @@
165
103
  --color-border: #2a2748;
166
104
  --color-input: #3a3658;
167
105
  --color-ring: #a78bfa;
168
-
169
- /* Semantic colors - Brighter for dark */
170
106
  --color-error: #f87171;
171
107
  --color-error-foreground: #000000;
172
108
  --color-success: #4ade80;
@@ -175,53 +111,54 @@
175
111
  --color-warning-foreground: #000000;
176
112
  --color-info: #60a5fa;
177
113
  --color-info-foreground: #000000;
178
-
179
- /* Icon styling - Thin */
180
- --icon-stroke-width: 1.5;
114
+ --radius-none: 0px;
115
+ --radius-sm: 4px;
116
+ --radius-md: 6px;
117
+ --radius-lg: 10px;
118
+ --radius-xl: 12px;
119
+ --radius-full: 9999px;
120
+ --border-width: 1px;
121
+ --border-width-thin: 1px;
122
+ --border-width-thick: 2px;
181
123
  --icon-color: currentColor;
182
-
183
- /* Transitions - Snappy linear */
184
124
  --transition-fast: 80ms;
185
125
  --transition-normal: 120ms;
186
126
  --transition-slow: 180ms;
187
127
  --transition-timing: linear;
188
-
189
- /* Hover/Active transforms - Subtle */
190
128
  --hover-scale: 1.0;
191
129
  --hover-translate-y: -1px;
192
130
  --hover-translate-x: 0;
193
131
  --active-scale: 0.99;
194
132
  --active-translate-y: 0;
195
-
196
- /* Focus ring - Bright violet */
197
133
  --focus-ring-width: 2px;
198
134
  --focus-ring-offset: 2px;
199
135
  --focus-ring-color: #a78bfa;
200
-
201
- /* Motion axis - snappy, mechanical linear */
136
+ --shadow-none: none;
137
+ --shadow-sm: 0 1px 0 rgba(0, 0, 0, 0.3), 0 1px 2px rgba(0, 0, 0, 0.2);
138
+ --shadow-main: 0 1px 2px rgba(0, 0, 0, 0.4), 0 2px 6px rgba(0, 0, 0, 0.3);
139
+ --shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.5), 0 2px 4px rgba(0, 0, 0, 0.3);
140
+ --shadow-inner: inset 0 1px 1px rgba(0, 0, 0, 0.3);
141
+ --shadow-hover: 0 2px 8px rgba(167, 139, 250, 0.2);
142
+ --shadow-active: 0 1px 2px rgba(167, 139, 250, 0.15);
202
143
  --duration-instant: 0ms;
203
144
  --duration-fast: 80ms;
204
145
  --duration-normal: 120ms;
205
146
  --duration-slow: 180ms;
206
147
  --duration-dramatic: 240ms;
207
- /* Motion axis - everything linear, mechanical */
208
148
  --easing-linear: linear;
209
149
  --easing-standard: linear;
210
150
  --easing-emphasized: linear;
211
151
  --easing-spring: linear;
212
- /* Iconography axis - thin lucide */
213
152
  --icon-family: lucide;
153
+ --icon-stroke-width: 1.5;
214
154
  --icon-default-size: 14px;
215
- /* Elevation axis - flat-ish */
216
155
  --elevation-card: var(--shadow-sm);
217
156
  --elevation-popover: var(--shadow-main);
218
157
  --elevation-dialog: var(--shadow-main);
219
158
  --elevation-toast: var(--shadow-sm);
220
- /* Geometry axis - containers sharp-ish, interactive softer, pill full */
221
159
  --radius-container: 6px;
222
160
  --radius-interactive: 10px;
223
161
  --radius-pill: 9999px;
224
- /* Geometry axis - hairline borders */
225
162
  --border-hairline: 1px;
226
163
  --border-standard: 1px;
227
164
  --border-heavy: 2px;
package/themes/retro.css CHANGED
@@ -1,57 +1,20 @@
1
1
  /**
2
- * Retro Theme "80s/90s Vaporwave Arcade"
3
- *
4
- * CRT-terminal energy: pixel display type (VT323) over deep indigo-purple,
5
- * hot magenta primary against electric cyan accents, hard offset shadows in
6
- * solid contrasting colors like a screen-printed arcade cabinet, razor-sharp
7
- * corners, and snappy linear micro-transitions that feel like a button press
8
- * on an 8-bit machine. Dark mode is the native habitat; light mode is a
9
- * lavender day-shift.
2
+ * GENERATEDdo not edit by hand.
3
+ * Source: packages/almadar-core/themes/retro.json
4
+ * Regenerate: node tools/almadar-pattern-sync/dist/index.js themes (or `almadar-sync themes`)
10
5
  */
11
6
 
12
- /* ==========================================================================
13
- * LIGHT MODE
14
- * ========================================================================== */
15
7
  [data-theme="retro-light"] {
16
- /* Shadows - Hard offset arcade silhouette, toned-down opacity */
17
- --shadow-main: 4px 4px 0 0 rgba(196, 36, 107, 0.4);
18
- --shadow-sm: 2px 2px 0 0 rgba(196, 36, 107, 0.3);
19
- --shadow-lg:
20
- 6px 6px 0 0 rgba(196, 36, 107, 0.4);
21
- --shadow-inner: inset 2px 2px 0 0 rgba(109, 40, 217, 0.12);
22
- --shadow-none: none;
23
- --shadow-hover:
24
- 6px 6px 0 0 rgba(0, 152, 170, 0.45);
25
- --shadow-active: 1px 1px 0 0 rgba(196, 36, 107, 0.4);
26
-
27
- /* Border radius - Sharp arcade corners */
28
- --radius-none: 0px;
29
- --radius-sm: 2px;
30
- --radius-md: 4px;
31
- --radius-lg: 4px;
32
- --radius-xl: 4px;
33
- --radius-full: 9999px;
34
-
35
- /* Border width - Chunky outlined look */
36
- --border-width: 2px;
37
- --border-width-thin: 1px;
38
- --border-width-thick: 3px;
39
-
40
- /* Colors - Lavender day-shift over deep indigo ink */
41
8
  --color-primary: #d12368;
42
9
  --color-primary-hover: #b81a57;
43
10
  --color-primary-foreground: #ffffff;
44
-
45
11
  --color-secondary: #e9d5ff;
46
12
  --color-secondary-hover: #d8b4fe;
47
13
  --color-secondary-foreground: #3b1a63;
48
-
49
14
  --color-accent: #00798c;
50
15
  --color-accent-foreground: #ffffff;
51
-
52
16
  --color-muted: #e9d5ff;
53
17
  --color-muted-foreground: #6b4a9e;
54
-
55
18
  --color-background: #f3e8ff;
56
19
  --color-foreground: #2a1650;
57
20
  --color-card: #ffffff;
@@ -60,8 +23,6 @@
60
23
  --color-border: rgba(196, 36, 107, 0.3);
61
24
  --color-input: rgba(0, 152, 170, 0.35);
62
25
  --color-ring: #0098aa;
63
-
64
- /* Semantic colors */
65
26
  --color-error: #dc2626;
66
27
  --color-error-foreground: #ffffff;
67
28
  --color-success: #15803d;
@@ -70,40 +31,41 @@
70
31
  --color-warning-foreground: #000000;
71
32
  --color-info: #0e7490;
72
33
  --color-info-foreground: #ffffff;
73
-
74
- /* Typography - Mono body, pixel display, wide tracking */
75
- --font-family:
76
- "IBM Plex Mono", "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
34
+ --radius-none: 0px;
35
+ --radius-sm: 2px;
36
+ --radius-md: 4px;
37
+ --radius-lg: 4px;
38
+ --radius-xl: 4px;
39
+ --radius-full: 9999px;
40
+ --border-width: 2px;
41
+ --border-width-thin: 1px;
42
+ --border-width-thick: 3px;
43
+ --font-family: "IBM Plex Mono", "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
77
44
  --font-weight-normal: 400;
78
45
  --font-weight-medium: 500;
79
46
  --font-weight-bold: 700;
80
47
  --letter-spacing: 0.04em;
81
48
  --line-height: 1.5;
82
-
83
- /* Icon styling - Chunky strokes */
84
- --icon-stroke-width: 2.5;
85
49
  --icon-color: #d12368;
86
-
87
- /* Transitions - Snappy, mechanical, linear */
88
50
  --transition-fast: 50ms;
89
51
  --transition-normal: 80ms;
90
52
  --transition-slow: 120ms;
91
53
  --transition-timing: linear;
92
-
93
- /* Hover/Active transforms - Button-press feel via shadow shift */
94
54
  --hover-scale: 1.0;
95
55
  --hover-translate-y: 0;
96
56
  --hover-translate-x: 0;
97
57
  --active-scale: 0.99;
98
58
  --active-translate-y: 2px;
99
-
100
- /* Focus ring */
101
59
  --focus-ring-width: 2px;
102
60
  --focus-ring-offset: 2px;
103
61
  --focus-ring-color: #0098aa;
104
-
105
- /* Layer 1 backfill (preserves current visual output, see themes/_contract.md) */
106
- /* Density axis spacing scale */
62
+ --shadow-main: 4px 4px 0 0 rgba(196, 36, 107, 0.4);
63
+ --shadow-sm: 2px 2px 0 0 rgba(196, 36, 107, 0.3);
64
+ --shadow-lg: 6px 6px 0 0 rgba(196, 36, 107, 0.4);
65
+ --shadow-inner: inset 2px 2px 0 0 rgba(109, 40, 217, 0.12);
66
+ --shadow-none: none;
67
+ --shadow-hover: 6px 6px 0 0 rgba(0, 152, 170, 0.45);
68
+ --shadow-active: 1px 1px 0 0 rgba(196, 36, 107, 0.4);
107
69
  --space-0: 0px;
108
70
  --space-1: 4px;
109
71
  --space-2: 8px;
@@ -117,7 +79,6 @@
117
79
  --space-10: 40px;
118
80
  --space-11: 44px;
119
81
  --space-12: 48px;
120
- /* Density axis — per-element heights */
121
82
  --button-height-sm: 30px;
122
83
  --button-height-md: 38px;
123
84
  --button-height-lg: 46px;
@@ -127,17 +88,14 @@
127
88
  --row-height-compact: 32px;
128
89
  --row-height-normal: 40px;
129
90
  --row-height-spacious: 48px;
130
- /* Density axis — per-element padding */
131
91
  --card-padding-sm: 12px;
132
92
  --card-padding-md: 18px;
133
93
  --card-padding-lg: 24px;
134
94
  --dialog-padding: 24px;
135
95
  --section-gap: 32px;
136
- /* Type axis — family triplet (aliases existing --font-family for backward compat) */
137
96
  --font-family-display: "VT323", "Courier New", monospace;
138
97
  --font-family-body: var(--font-family);
139
98
  --font-family-mono: "IBM Plex Mono", "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
140
- /* Type axis — size scale */
141
99
  --text-xs: 12px;
142
100
  --leading-xs: 16px;
143
101
  --text-sm: 14px;
@@ -158,7 +116,6 @@
158
116
  --leading-display-1: 52px;
159
117
  --text-display-2: 60px;
160
118
  --leading-display-2: 64px;
161
- /* Type axis — intent mapping */
162
119
  --intent-heading-major-size: var(--text-2xl);
163
120
  --intent-heading-major-weight: var(--font-weight-bold);
164
121
  --intent-heading-major-leading: var(--leading-2xl);
@@ -180,78 +137,41 @@
180
137
  --intent-numeric-size: var(--text-sm);
181
138
  --intent-numeric-weight: var(--font-weight-medium);
182
139
  --intent-numeric-leading: var(--leading-sm);
183
- /* Motion axis — duration palette */
184
140
  --duration-instant: 0ms;
185
141
  --duration-fast: var(--transition-fast);
186
142
  --duration-normal: var(--transition-normal);
187
143
  --duration-slow: var(--transition-slow);
188
144
  --duration-dramatic: 400ms;
189
- /* Motion axis — easing palette */
190
145
  --easing-linear: linear;
191
146
  --easing-standard: var(--transition-timing);
192
147
  --easing-emphasized: linear;
193
148
  --easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
194
- /* Iconography axis */
195
149
  --icon-family: lucide;
150
+ --icon-stroke-width: 2.5;
196
151
  --icon-default-size: 16px;
197
- /* Elevation axis — per-layer mapping */
198
152
  --elevation-card: var(--shadow-sm);
199
153
  --elevation-popover: var(--shadow-main);
200
154
  --elevation-dialog: var(--shadow-lg);
201
155
  --elevation-toast: var(--shadow-main);
202
- /* Geometry axis — radius rhythm with intent */
203
156
  --radius-container: var(--radius-sm);
204
157
  --radius-interactive: var(--radius-sm);
205
158
  --radius-pill: var(--radius-full);
206
- /* Geometry axis — border-width rhythm */
207
159
  --border-hairline: 1px;
208
160
  --border-standard: var(--border-width);
209
161
  --border-heavy: var(--border-width-thick);
210
162
  }
211
163
 
212
- /* ==========================================================================
213
- * DARK MODE
214
- * ========================================================================== */
215
164
  [data-theme="retro-dark"] {
216
- /* Shadows - Hard offset arcade silhouette, toned-down neon opacity */
217
- --shadow-main: 4px 4px 0 0 rgba(58, 201, 216, 0.4);
218
- --shadow-sm: 2px 2px 0 0 rgba(58, 201, 216, 0.3);
219
- --shadow-lg:
220
- 6px 6px 0 0 rgba(58, 201, 216, 0.4);
221
- --shadow-inner: inset 2px 2px 0 0 rgba(224, 76, 138, 0.18);
222
- --shadow-none: none;
223
- --shadow-hover:
224
- 6px 6px 0 0 rgba(224, 76, 138, 0.4);
225
- --shadow-active: 1px 1px 0 0 rgba(58, 201, 216, 0.4);
226
-
227
- /* Border radius - Sharp arcade corners */
228
- --radius-none: 0px;
229
- --radius-sm: 2px;
230
- --radius-md: 4px;
231
- --radius-lg: 4px;
232
- --radius-xl: 4px;
233
- --radius-full: 9999px;
234
-
235
- /* Border width - Chunky outlined look */
236
- --border-width: 2px;
237
- --border-width-thin: 1px;
238
- --border-width-thick: 3px;
239
-
240
- /* Colors - Deep indigo-purple vaporwave night, softened neon */
241
165
  --color-primary: #e04c8a;
242
166
  --color-primary-hover: #ec6a9f;
243
167
  --color-primary-foreground: #2b0216;
244
-
245
168
  --color-secondary: #2d1b4e;
246
169
  --color-secondary-hover: #3b2566;
247
170
  --color-secondary-foreground: #efe3ff;
248
-
249
171
  --color-accent: #3ac9d8;
250
172
  --color-accent-foreground: #00252b;
251
-
252
173
  --color-muted: #2d1b4e;
253
174
  --color-muted-foreground: #9d86d6;
254
-
255
175
  --color-background: #1a0b2e;
256
176
  --color-foreground: #efe3ff;
257
177
  --color-card: #241242;
@@ -260,8 +180,6 @@
260
180
  --color-border: rgba(224, 76, 138, 0.32);
261
181
  --color-input: rgba(58, 201, 216, 0.34);
262
182
  --color-ring: #3ac9d8;
263
-
264
- /* Semantic colors - Neon-bright for dark mode */
265
183
  --color-error: #ff5252;
266
184
  --color-error-foreground: #1a0000;
267
185
  --color-success: #2ee66e;
@@ -270,40 +188,41 @@
270
188
  --color-warning-foreground: #2a1a00;
271
189
  --color-info: #3ac9d8;
272
190
  --color-info-foreground: #00252b;
273
-
274
- /* Typography - Mono body, pixel display, wide tracking */
275
- --font-family:
276
- "IBM Plex Mono", "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
191
+ --radius-none: 0px;
192
+ --radius-sm: 2px;
193
+ --radius-md: 4px;
194
+ --radius-lg: 4px;
195
+ --radius-xl: 4px;
196
+ --radius-full: 9999px;
197
+ --border-width: 2px;
198
+ --border-width-thin: 1px;
199
+ --border-width-thick: 3px;
200
+ --font-family: "IBM Plex Mono", "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
277
201
  --font-weight-normal: 400;
278
202
  --font-weight-medium: 500;
279
203
  --font-weight-bold: 700;
280
204
  --letter-spacing: 0.04em;
281
205
  --line-height: 1.5;
282
-
283
- /* Icon styling - Chunky strokes */
284
- --icon-stroke-width: 2.5;
285
206
  --icon-color: #3ac9d8;
286
-
287
- /* Transitions - Snappy, mechanical, linear */
288
207
  --transition-fast: 50ms;
289
208
  --transition-normal: 80ms;
290
209
  --transition-slow: 120ms;
291
210
  --transition-timing: linear;
292
-
293
- /* Hover/Active transforms - Button-press feel via shadow shift */
294
211
  --hover-scale: 1.0;
295
212
  --hover-translate-y: 0;
296
213
  --hover-translate-x: 0;
297
214
  --active-scale: 0.99;
298
215
  --active-translate-y: 2px;
299
-
300
- /* Focus ring */
301
216
  --focus-ring-width: 2px;
302
217
  --focus-ring-offset: 2px;
303
218
  --focus-ring-color: #3ac9d8;
304
-
305
- /* Layer 1 backfill (preserves current visual output, see themes/_contract.md) */
306
- /* Density axis spacing scale */
219
+ --shadow-main: 4px 4px 0 0 rgba(58, 201, 216, 0.4);
220
+ --shadow-sm: 2px 2px 0 0 rgba(58, 201, 216, 0.3);
221
+ --shadow-lg: 6px 6px 0 0 rgba(58, 201, 216, 0.4);
222
+ --shadow-inner: inset 2px 2px 0 0 rgba(224, 76, 138, 0.18);
223
+ --shadow-none: none;
224
+ --shadow-hover: 6px 6px 0 0 rgba(224, 76, 138, 0.4);
225
+ --shadow-active: 1px 1px 0 0 rgba(58, 201, 216, 0.4);
307
226
  --space-0: 0px;
308
227
  --space-1: 4px;
309
228
  --space-2: 8px;
@@ -317,7 +236,6 @@
317
236
  --space-10: 40px;
318
237
  --space-11: 44px;
319
238
  --space-12: 48px;
320
- /* Density axis — per-element heights */
321
239
  --button-height-sm: 30px;
322
240
  --button-height-md: 38px;
323
241
  --button-height-lg: 46px;
@@ -327,17 +245,14 @@
327
245
  --row-height-compact: 32px;
328
246
  --row-height-normal: 40px;
329
247
  --row-height-spacious: 48px;
330
- /* Density axis — per-element padding */
331
248
  --card-padding-sm: 12px;
332
249
  --card-padding-md: 18px;
333
250
  --card-padding-lg: 24px;
334
251
  --dialog-padding: 24px;
335
252
  --section-gap: 32px;
336
- /* Type axis — family triplet (aliases existing --font-family for backward compat) */
337
253
  --font-family-display: "VT323", "Courier New", monospace;
338
254
  --font-family-body: var(--font-family);
339
255
  --font-family-mono: "IBM Plex Mono", "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
340
- /* Type axis — size scale */
341
256
  --text-xs: 12px;
342
257
  --leading-xs: 16px;
343
258
  --text-sm: 14px;
@@ -358,7 +273,6 @@
358
273
  --leading-display-1: 52px;
359
274
  --text-display-2: 60px;
360
275
  --leading-display-2: 64px;
361
- /* Type axis — intent mapping */
362
276
  --intent-heading-major-size: var(--text-2xl);
363
277
  --intent-heading-major-weight: var(--font-weight-bold);
364
278
  --intent-heading-major-leading: var(--leading-2xl);
@@ -380,30 +294,25 @@
380
294
  --intent-numeric-size: var(--text-sm);
381
295
  --intent-numeric-weight: var(--font-weight-medium);
382
296
  --intent-numeric-leading: var(--leading-sm);
383
- /* Motion axis — duration palette */
384
297
  --duration-instant: 0ms;
385
298
  --duration-fast: var(--transition-fast);
386
299
  --duration-normal: var(--transition-normal);
387
300
  --duration-slow: var(--transition-slow);
388
301
  --duration-dramatic: 400ms;
389
- /* Motion axis — easing palette */
390
302
  --easing-linear: linear;
391
303
  --easing-standard: var(--transition-timing);
392
304
  --easing-emphasized: linear;
393
305
  --easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
394
- /* Iconography axis */
395
306
  --icon-family: lucide;
307
+ --icon-stroke-width: 2.5;
396
308
  --icon-default-size: 16px;
397
- /* Elevation axis — per-layer mapping */
398
309
  --elevation-card: var(--shadow-sm);
399
310
  --elevation-popover: var(--shadow-main);
400
311
  --elevation-dialog: var(--shadow-lg);
401
312
  --elevation-toast: var(--shadow-main);
402
- /* Geometry axis — radius rhythm with intent */
403
313
  --radius-container: var(--radius-sm);
404
314
  --radius-interactive: var(--radius-sm);
405
315
  --radius-pill: var(--radius-full);
406
- /* Geometry axis — border-width rhythm */
407
316
  --border-hairline: 1px;
408
317
  --border-standard: var(--border-width);
409
318
  --border-heavy: var(--border-width-thick);