@eaera-com/eaera-widgets-v2 0.1.80 → 0.1.81

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,242 @@
1
+ // ============================================================================
2
+ // LAYER 3: COMPONENT TOKENS
3
+ // ============================================================================
4
+ // Usage-specific tokens mapped from Layer 2 aliases
5
+ // Source: Figma UI Kit Core - Color Guidance - Component Tokens
6
+ // File: https://www.figma.com/design/HSOs8VcK5CKL8s15AqD42x/UI-KIT-CORE
7
+ // Node: Color Guidance - Component Tokens (36925:1463)
8
+ //
9
+ // IMPORTANT: Only tokens defined in Figma are included here
10
+ // ============================================================================
11
+
12
+ :root {
13
+ // ─────────────────────────────────────────────────────────────────────────
14
+ // ACTION (Buttons, interactive elements)
15
+ // ─────────────────────────────────────────────────────────────────────────
16
+
17
+ // Action tokens — Primary (Figma: action/primary-*)
18
+ --er-action-primary-default: var(
19
+ --er-primary-600
20
+ ); // Figma: action/primary-default = primary/600
21
+ --er-action-primary-hover: var(
22
+ --er-primary-700
23
+ ); // Figma: action/primary-hover = primary/700
24
+ --er-action-primary-pressed: var(
25
+ --er-primary-800
26
+ ); // Figma: action/primary-pressed = primary/800
27
+ --er-action-primary-subtle: var(
28
+ --er-primary-alpha-100
29
+ ); // Figma: action/primary-subtle = primary alpha/100
30
+ --er-action-primary-subtle-hover: var(
31
+ --er-primary-alpha-200
32
+ ); // Figma: action/primary-subtle-hover = primary alpha/200
33
+ --er-action-primary-subtle-pressed: var(
34
+ --er-primary-alpha-300
35
+ ); // Figma: action/primary-subtle-pressed = primary alpha/300
36
+
37
+ // Action tokens — Neutral (Figma: action/neutral-*)
38
+ --er-action-neutral-default: var(
39
+ --er-neutral-950
40
+ ); // Figma: action/neutral-default = neutral/950 = #09090B
41
+ --er-action-neutral-hover: var(
42
+ --er-neutral-600
43
+ ); // Figma: action/neutral-hover = neutral/600 = #52525B
44
+ --er-action-neutral-pressed: var(
45
+ --er-neutral-800
46
+ ); // Figma: action/neutral-pressed = neutral/800 = #27272A
47
+ --er-action-neutral-subtle-default: var(
48
+ --er-neutral-white
49
+ ); // Figma: action/neutral-subtle-default = neutral/white = #FFFFFF
50
+ --er-action-neutral-subtle-hover: var(
51
+ --er-neutral-alpha-50
52
+ ); // Figma: action/neutral-subtle-hover = neutral alpha/50 = #11161C @ 3.92%
53
+ --er-action-neutral-subtle-pressed: var(
54
+ --er-neutral-alpha-100
55
+ ); // Figma: action/neutral-subtle-pressed = neutral alpha/100 = #11161C @ 7.84%
56
+
57
+ // Action tokens — Danger (Figma: action/danger-*)
58
+ --er-action-danger-default: var(
59
+ --er-danger-600
60
+ ); // Figma: action/danger-default = danger/600
61
+ --er-action-danger-hover: var(
62
+ --er-danger-700
63
+ ); // Figma: action/danger-hover = danger/700
64
+ --er-action-danger-pressed: var(
65
+ --er-danger-800
66
+ ); // Figma: action/danger-pressed = danger/800
67
+ --er-action-danger-subtle-default: var(
68
+ --er-danger-alpha-100
69
+ ); // Figma: action/danger-subtle-default = danger alpha/100
70
+ --er-action-danger-subtle-hover: var(
71
+ --er-danger-alpha-200
72
+ ); // Figma: action/danger-subtle-hover = danger alpha/200
73
+ --er-action-danger-subtle-pressed: var(
74
+ --er-danger-alpha-300
75
+ ); // Figma: action/danger-subtle-pressed = danger alpha/300
76
+
77
+ // Action tokens — Success (local extension — not in Figma UI Kit, mirrors danger)
78
+ --er-action-success-default: var(
79
+ --er-success-default
80
+ ); // action/success-default = success/default = #10B981
81
+ --er-action-success-hover: var(
82
+ --er-success-600
83
+ ); // action/success-hover = success/600 = #059669
84
+ --er-action-success-pressed: var(
85
+ --er-success-700
86
+ ); // action/success-pressed = success/700 = #047857
87
+ --er-action-success-subtle-default: var(
88
+ --er-success-alpha-50
89
+ ); // action/success-subtle-default = success alpha/50 = #10B981 @ 3.92%
90
+ --er-action-success-subtle-hover: var(
91
+ --er-success-alpha-100
92
+ ); // action/success-subtle-hover = success alpha/100 = #10B981 @ 7.84%
93
+ --er-action-success-subtle-pressed: var(
94
+ --er-success-alpha-200
95
+ ); // action/success-subtle-pressed = success alpha/200 = #10B981 @ 12.16%
96
+
97
+ // ─────────────────────────────────────────────────────────────────────────
98
+ // SURFACE (Backgrounds, cards, panels)
99
+ // Frame 36984:1625 - Surface section
100
+ // ─────────────────────────────────────────────────────────────────────────
101
+ --er-surface-page: var(
102
+ --er-neutral-white
103
+ ); // Figma: surface/page = neutral/white = #FFFFFF (main app canvas)
104
+ --er-surface-container: var(
105
+ --er-neutral-white
106
+ ); // Figma: surface/container = neutral/white = #FFFFFF (cards, panels)
107
+ --er-surface-elevated: var(
108
+ --er-neutral-white
109
+ ); // Figma: surface/elevated = neutral/white = #FFFFFF (modals, dropdowns, tooltips)
110
+ --er-surface-subtle: var(
111
+ --er-neutral-50
112
+ ); // Figma: surface/subtle = neutral/50 = #FAFAFA (alternating rows, quiet sections)
113
+ --er-surface-muted: var(
114
+ --er-neutral-100
115
+ ); // Figma: surface/muted = neutral/100 = #F4F4F5 (default/neutral tag bg)
116
+ --er-surface-track: var(
117
+ --er-neutral-100
118
+ ); // Figma: surface/track = elevation/50 = #F8F9FB @ 3.92%
119
+ --er-surface-inverse: var(
120
+ --er-neutral-900
121
+ ); // Figma: surface/inverse = neutral/900 = #18181B (dark headers, inverted sections)
122
+ --er-surface-neutral-subtle: var(
123
+ --er-neutral-alpha-100
124
+ ); // Figma: surface/neutral-subtle = neutral alpha/100 = #11161C @ 7.84%
125
+ --er-surface-brand-subtle: var(
126
+ --er-primary-alpha-100
127
+ ); // Figma: surface/brand-subtle = primary alpha/100 = #F97316 @ 7.84%
128
+ --er-surface-success-subtle: var(
129
+ --er-success-alpha-100
130
+ ); // Figma: surface/success-subtle = success alpha/100 = #10B981 @ 7.84%
131
+ --er-surface-warning-subtle: var(
132
+ --er-warning-alpha-100
133
+ ); // Figma: surface/warning-subtle = warning alpha/100 = #F59E0B @ 7.84%
134
+ --er-surface-danger-subtle: var(
135
+ --er-danger-alpha-100
136
+ ); // Figma: surface/danger-subtle = danger alpha/100 = #EF4444 @ 7.84%
137
+ --er-surface-information-subtle: var(
138
+ --er-information-alpha-100
139
+ ); // Figma: surface/information-subtle = information alpha/100 = #0EA5E9 @ 7.84%
140
+ --er-surface-fixed-white: var(
141
+ --er-neutral-white
142
+ ); // Figma: surface/fixed-white = neutral/white = #FFFFFF
143
+
144
+ // ─────────────────────────────────────────────────────────────────────────
145
+ // TEXT (Typography, labels, content)
146
+ // Frame 36984:1701 - Text section
147
+ // ─────────────────────────────────────────────────────────────────────────
148
+ --er-text-primary: var(
149
+ --er-neutral-alpha-950
150
+ ); // Figma: text/primary = neutral alpha/950 = #11161C @ 96.08%
151
+ --er-text-secondary: var(
152
+ --er-neutral-alpha-800
153
+ ); // Figma: text/secondary = neutral alpha/800 = #11161C @ 72.16%
154
+ --er-text-tertiary: var(
155
+ --er-neutral-alpha-700
156
+ ); // Figma: text/tertiary = neutral alpha/700 = #11161C @ 56.08%
157
+ --er-text-muted: var(
158
+ --er-neutral-alpha-600
159
+ ); // Figma: text/muted = neutral alpha/600 = #11161C @ 40%
160
+ --er-text-inverse: var(--er-neutral-50); // Figma: text/inverse = neutral/50 = #FAFAFA
161
+ --er-text-brand: var(--er-primary-600); // Figma: text/brand = primary/600
162
+ --er-text-on-action: var(--er-neutral-50); // Figma: text/on-action = neutral/50 = #FAFAFA
163
+ --er-text-success: var(--er-success-700); // Figma: text/success = success/700
164
+ --er-text-warning: var(--er-warning-700); // Figma: text/warning = warning/700
165
+ --er-text-danger: var(--er-danger-700); // Figma: text/danger = danger/700
166
+ --er-text-information: var(
167
+ --er-information-700
168
+ ); // Figma: text/information = information/700
169
+
170
+ // ─────────────────────────────────────────────────────────────────────────
171
+ // ICON (Icons, decorative elements)
172
+ // Frame 36984:1770 - Icon section in Figma Component Tokens
173
+ // ─────────────────────────────────────────────────────────────────────────
174
+ --er-icon-primary: var(
175
+ --er-neutral-alpha-950
176
+ ); // Figma: icon/primary = neutral alpha/950 = #11161C @ 96.08%
177
+ --er-icon-secondary: var(
178
+ --er-neutral-alpha-800
179
+ ); // Figma: icon/secondary = neutral alpha/800 = #11161C @ 72.16%
180
+ --er-icon-tertiary: var(
181
+ --er-neutral-alpha-700
182
+ ); // Figma: icon/tertiary = neutral alpha/700 = #11161C @ 56.08%
183
+ --er-icon-muted: var(
184
+ --er-neutral-alpha-600
185
+ ); // Figma: icon/muted = neutral alpha/600 = #11161C @ 40%
186
+ --er-icon-inverse: var(--er-neutral-50); // Figma: icon/inverse = neutral/50 = #FAFAFA
187
+ --er-icon-brand: var(--er-primary-600); // Figma: icon/brand = primary/600
188
+ --er-icon-on-action: var(--er-neutral-50); // Figma: icon/on-action = neutral/50 = #FAFAFA
189
+ --er-icon-success: var(--er-success-700); // Figma: icon/success = success/700
190
+ --er-icon-warning: var(--er-warning-700); // Figma: icon/warning = warning/700
191
+ --er-icon-danger: var(--er-danger-700); // Figma: icon/danger = danger/700
192
+ --er-icon-information: var(
193
+ --er-information-700
194
+ ); // Figma: icon/information = information/700
195
+
196
+ // ─────────────────────────────────────────────────────────────────────────
197
+ // BORDER (Borders, outlines, dividers)
198
+ // Frame 36984:1817 - Border section in Figma Component Tokens
199
+ // ─────────────────────────────────────────────────────────────────────────
200
+ --er-border-default: var(
201
+ --er-neutral-alpha-200
202
+ ); // Figma: border/default = neutral alpha/200 = #11161C @ 12.16%
203
+ --er-border-subtle: var(
204
+ --er-neutral-alpha-100
205
+ ); // Figma: border/subtle = neutral alpha/100 = #11161C @ 7.84%
206
+ --er-border-strong: var(
207
+ --er-neutral-alpha-400
208
+ ); // Figma: border/strong = neutral alpha/400 = #11161C @ 23.92%
209
+ --er-border-on-action: var(--er-neutral-50); // Figma: border/on-action = neutral/50 = #FAFAFA
210
+ --er-border-brand: var(--er-primary-default); // Figma: border/brand = primary/default = #F97316
211
+ --er-border-brand-subtle: var(
212
+ --er-primary-alpha-300
213
+ ); // Figma: border/brand-subtle = primary alpha/300 = #F97316 @ 20%
214
+ --er-border-success: var(--er-success-default); // Figma: border/success = success/default = #10B981
215
+ --er-border-success-subtle: var(
216
+ --er-success-alpha-300
217
+ ); // Figma: border/success-subtle = success alpha/300 = #10B981 @ 20%
218
+ --er-border-warning: var(--er-warning-default); // Figma: border/warning = warning/default = #F59E0B
219
+ --er-border-warning-subtle: var(
220
+ --er-warning-alpha-300
221
+ ); // Figma: border/warning-subtle = warning alpha/300 = #F59E0B @ 20%
222
+ --er-border-danger: var(--er-danger-default); // Figma: border/danger = danger/default = #EF4444
223
+ --er-border-danger-subtle: var(
224
+ --er-danger-alpha-300
225
+ ); // Figma: border/danger-subtle = danger alpha/300 = #EF4444 @ 20%
226
+ --er-border-information: var(
227
+ --er-information-default
228
+ ); // Figma: border/information = information/default = #0EA5E9
229
+ --er-border-information-subtle: var(
230
+ --er-information-alpha-300
231
+ ); // Figma: border/information-subtle = information alpha/300 = #0EA5E9 @ 20%
232
+
233
+ // ─────────────────────────────────────────────────────────────────────────
234
+ // COMPONENT-SPECIFIC TOKENS
235
+ // ─────────────────────────────────────────────────────────────────────────
236
+ // Segmented control (Figma: component/segmented/*)
237
+ --er-component-segmented-item-hover: var(--er-action-neutral-subtle-hover);
238
+ --er-component-segmented-item-active: var(
239
+ --er-action-neutral-subtle-default
240
+ ); // segmented item active = action/neutral-subtle-default
241
+ --er-surface-overlay: rgb(0, 0, 0, 0.5);
242
+ }
@@ -0,0 +1,177 @@
1
+ // ============================================================================
2
+ // DARK MODE TOKEN OVERRIDES
3
+ // ============================================================================
4
+ // Source: Figma UI Kit Core — Color Guidance — Dark Component Tokens
5
+ // File: https://www.figma.com/design/HSOs8VcK5CKL8s15AqD42x/UI-KIT-CORE
6
+ // Nodes:
7
+ // action — 40424:8223
8
+ // surface — 40424:8245
9
+ // text — 40424:8258
10
+ // icon — 40424:8271
11
+ // border — 40424:8283
12
+ //
13
+ // Applied when:
14
+ // - html.dark (global preference)
15
+ // - [data-theme="dark"] (attribute-based)
16
+ // - .dark (class-based — used by showcase toggle)
17
+ // ============================================================================
18
+
19
+ html.dark,
20
+ [data-theme='dark'],
21
+ .dark {
22
+ // ─────────────────────────────────────────────────────────────────────────
23
+ // ACTION
24
+ // ─────────────────────────────────────────────────────────────────────────
25
+ // Primary action — unchanged between light/dark
26
+ --er-action-primary-default: var(--er-primary-600); // primary/600 (same as light)
27
+ --er-action-primary-hover: var(--er-primary-700); // primary/700 (same as light)
28
+ --er-action-primary-pressed: var(--er-primary-800); // primary/800 (same as light)
29
+
30
+ // Primary subtle — raised alpha steps for dark backgrounds
31
+ --er-action-primary-subtle: var(--er-primary-alpha-300); // primary alpha/300
32
+ --er-action-primary-subtle-hover: var(--er-primary-alpha-400); // primary alpha/400
33
+ --er-action-primary-subtle-pressed: var(--er-primary-alpha-500); // primary alpha/500
34
+
35
+ // Neutral action — inverted from dark to light
36
+ --er-action-neutral-default: var(
37
+ --er-neutral-white
38
+ ); // neutral/white = #FFFFFF (light: neutral/950)
39
+ --er-action-neutral-hover: var(--er-neutral-100); // neutral/100 = #F4F4F5 (light: neutral/600)
40
+ --er-action-neutral-pressed: var(--er-neutral-300); // neutral/300 = #D4D4D8 (light: neutral/800)
41
+
42
+ // Neutral subtle — black base + elevation (white alpha) overlays
43
+ --er-action-neutral-subtle-default: var(
44
+ --er-neutral-black
45
+ ); // neutral/black = #000000 (light: neutral/white)
46
+ --er-action-neutral-subtle-hover: var(
47
+ --er-elevation-50
48
+ ); // elevation/50 = #F8F9FB @ 3.92% (light: neutral alpha/50)
49
+ --er-action-neutral-subtle-pressed: var(
50
+ --er-elevation-100
51
+ ); // elevation/100 = #F8F9FB @ 7.84% (light: neutral alpha/100)
52
+
53
+ // Danger action
54
+ --er-action-danger-default: var(--er-danger-600); // danger/600 (same as light)
55
+ --er-action-danger-hover: var(--er-danger-700); // danger/700 (same as light)
56
+ --er-action-danger-pressed: var(--er-danger-800); // danger/800 (same as light)
57
+
58
+ // Danger subtle — raised alpha steps for dark backgrounds
59
+ --er-action-danger-subtle-default: var(--er-danger-alpha-300); // danger alpha/300
60
+ --er-action-danger-subtle-hover: var(--er-danger-alpha-400); // danger alpha/400
61
+ --er-action-danger-subtle-pressed: var(--er-danger-alpha-500); // danger alpha/500
62
+
63
+ // Success action — shifted to -600/-700/-800 in dark mode for better contrast (mirrors danger)
64
+ --er-action-success-default: var(--er-success-600); // success/600 = #059669 (light: success/500)
65
+ --er-action-success-hover: var(--er-success-700); // success/700 = #047857 (light: success/600)
66
+ --er-action-success-pressed: var(--er-success-800); // success/800 = #065F46 (light: success/700)
67
+
68
+ // Success subtle — unchanged (alpha-based, works on dark)
69
+ --er-action-success-subtle-default: var(--er-success-alpha-50); // success alpha/50 @ 3.92%
70
+ --er-action-success-subtle-hover: var(--er-success-alpha-100); // success alpha/100 @ 7.84%
71
+ --er-action-success-subtle-pressed: var(--er-success-alpha-200); // success alpha/200 @ 12.16%
72
+
73
+ // ─────────────────────────────────────────────────────────────────────────
74
+ // SURFACE
75
+ // ─────────────────────────────────────────────────────────────────────────
76
+ --er-surface-page: var(--er-neutral-950); // surface/page = neutral/950 = #09090B
77
+ --er-surface-container: var(--er-neutral-900); // surface/container = neutral/900 = #18181B
78
+ --er-surface-elevated: var(--er-neutral-800); // surface/elevated = neutral/800 = #27272A
79
+ --er-surface-subtle: var(--er-neutral-800); // surface/subtle = neutral/800 = #27272A
80
+ --er-surface-muted: var(--er-neutral-700); // surface/muted = neutral/700 = #3F3F46
81
+ --er-surface-track: var(--er-elevation-100); // surface/track = elevation/50 (unchanged)
82
+ --er-surface-inverse: var(--er-neutral-50); // surface/inverse = neutral/50 = #FAFAFA
83
+
84
+ // Subtle surfaces — unchanged (alpha-based, work on dark)
85
+ --er-surface-neutral-subtle: var(--er-elevation-100); // surface/neutral-subtle = elevation/100 = #F8F9FB @ 7.84%
86
+ --er-surface-brand-subtle: var(--er-primary-alpha-100); // primary alpha/100 (unchanged)
87
+ --er-surface-success-subtle: var(--er-success-alpha-100); // success alpha/100 (unchanged)
88
+ --er-surface-warning-subtle: var(--er-warning-alpha-100); // warning alpha/100 (unchanged)
89
+ --er-surface-danger-subtle: var(--er-danger-alpha-100); // danger alpha/100 (unchanged)
90
+ --er-surface-information-subtle: var(--er-information-alpha-100); // information alpha/100 (unchanged)
91
+
92
+ // Fixed white — never changes between light/dark
93
+ --er-surface-fixed-white: var(--er-neutral-white); // always #FFFFFF
94
+
95
+ // Overlay / loading mask — dark translucent overlay so `.el-loading-mask`
96
+ // (v-loading / ElLoading) no longer washes out to white in dark mode.
97
+ // Maps to neutral/950 = #09090B at 90% (matches light-mode opacity).
98
+ --el-mask-color: rgba(9, 9, 11, 0.9);
99
+
100
+ // ─────────────────────────────────────────────────────────────────────────
101
+ // TEXT
102
+ // ─────────────────────────────────────────────────────────────────────────
103
+ --er-text-primary: var(--er-elevation-950); // text/primary = elevation/950 = #F8F9FB @ 96.08%
104
+ --er-text-secondary: var(--er-elevation-800); // text/secondary = elevation/800 @ 72.16%
105
+ --er-text-tertiary: var(--er-elevation-600); // text/tertiary = elevation/600 @ 40%
106
+ --er-text-muted: var(--er-elevation-600); // text/muted = elevation/600 @ 40%
107
+ --er-text-inverse: var(--er-neutral-900); // text/inverse = neutral/900 = #18181B
108
+ --er-text-brand: var(--er-primary-default); // primary/default = #F97316 (unchanged)
109
+ --er-text-on-action: var(--er-neutral-50); // neutral/50 = #FAFAFA (unchanged)
110
+ --er-text-success: var(--er-success-default); // success/default = #10B981 (unchanged)
111
+ --er-text-warning: var(--er-warning-default); // warning/default = #F59E0B (unchanged)
112
+ --er-text-danger: var(--er-danger-default); // danger/default = #EF4444 (unchanged)
113
+ --er-text-information: var(--er-information-default); // information/default = #0EA5E9 (unchanged)
114
+
115
+ // ─────────────────────────────────────────────────────────────────────────
116
+ // ICON
117
+ // ─────────────────────────────────────────────────────────────────────────
118
+ --er-icon-primary: var(--er-elevation-950); // icon/primary = elevation/950
119
+ --er-icon-secondary: var(--er-elevation-800); // icon/secondary = elevation/800
120
+ --er-icon-tertiary: var(--er-elevation-700); // icon/tertiary = elevation/700 @ 56.08%
121
+ --er-icon-muted: var(--er-elevation-600); // icon/muted = elevation/600 @ 40%
122
+ --er-icon-inverse: var(--er-neutral-900); // icon/inverse = neutral/900 = #18181B
123
+ --er-icon-brand: var(--er-primary-default); // primary/default = #F97316 (unchanged)
124
+ --er-icon-on-action: var(--er-neutral-50); // neutral/50 = #FAFAFA (unchanged)
125
+ --er-icon-success: var(--er-success-default); // success/default = #10B981 (unchanged)
126
+ --er-icon-warning: var(--er-warning-default); // warning/default = #F59E0B (unchanged)
127
+ --er-icon-danger: var(--er-danger-default); // danger/default = #EF4444 (unchanged)
128
+ --er-icon-information: var(--er-information-default); // information/default = #0EA5E9 (unchanged)
129
+
130
+ // ─────────────────────────────────────────────────────────────────────────
131
+ // BORDER
132
+ // ─────────────────────────────────────────────────────────────────────────
133
+ --er-border-default: var(--er-elevation-200); // border/default = elevation/200 = #F8F9FB @ 12.16%
134
+ --er-border-subtle: var(--er-elevation-100); // border/subtle = elevation/100 @ 7.84%
135
+ --er-border-strong: var(--er-elevation-400); // border/strong = elevation/400 @ 23.92%
136
+ --er-border-on-action: var(--er-neutral-50); // neutral/50 = #FAFAFA (unchanged)
137
+
138
+ // Semantic borders — unchanged (alpha-based or solid brand hues)
139
+ --er-border-brand: var(--er-primary-default); // primary/default = #F97316 (unchanged)
140
+ --er-border-brand-subtle: var(--er-primary-alpha-300); // primary alpha/300 @ 20% (unchanged)
141
+
142
+ --er-border-success: var(--er-success-default); // success/default = #10B981 (unchanged)
143
+ --er-border-success-subtle: var(--er-success-alpha-300); // success alpha/300 @ 20% (unchanged)
144
+
145
+ --er-border-warning: var(--er-warning-default); // warning/default = #F59E0B (unchanged)
146
+ --er-border-warning-subtle: var(--er-warning-alpha-300); // warning alpha/300 @ 20% (unchanged)
147
+
148
+ --er-border-danger: var(--er-danger-default); // danger/default = #EF4444 (unchanged)
149
+ --er-border-danger-subtle: var(--er-danger-alpha-300); // danger alpha/300 @ 20% (unchanged)
150
+
151
+ --er-border-information: var(--er-information-default); // information/default = #0EA5E9 (unchanged)
152
+ --er-border-information-subtle: var(--er-information-alpha-300); // information alpha/300 @ 20% (unchanged)
153
+
154
+ // ─────────────────────────────────────────────────────────────────────────
155
+ // SHADOW
156
+ // ─────────────────────────────────────────────────────────────────────────
157
+ // Ambient shadows (black with varying opacity)
158
+ --er-shadow-ambient-01: rgba(0, 0, 0, 0.16); // 16% (light: 4%)
159
+ --er-shadow-ambient-02: rgba(0, 0, 0, 0.2); // 20% (light: 6%)
160
+ --er-shadow-ambient-03: rgba(0, 0, 0, 0.24); // 24% (light: 8%)
161
+ --er-shadow-ambient-04: rgba(0, 0, 0, 0.28); // 28% (light: 10%)
162
+ --er-shadow-ambient-05: rgba(0, 0, 0, 0.32); // 32% (light: 12%)
163
+
164
+ // Highlight shadows (white with varying opacity)
165
+ --er-shadow-highlight-01: rgba(255, 255, 255, 0.03); // 3% (light: 0%)
166
+ --er-shadow-highlight-02: rgba(255, 255, 255, 0.05); // 5% (light: 0%)
167
+ --er-shadow-highlight-03: rgba(255, 255, 255, 0.07); // 7% (light: 0%)
168
+
169
+ // ─────────────────────────────────────────────────────────────────────────
170
+ // COMPONENT-SPECIFIC TOKENS
171
+ // ─────────────────────────────────────────────────────────────────────────
172
+ // Segmented control (Figma: component/segmented/*)
173
+ --er-component-segmented-item-hover: var(
174
+ --er-action-neutral-subtle-hover
175
+ ); // same as light
176
+ --er-component-segmented-item-active: var(--er-surface-muted); // surface/muted
177
+ }
@@ -0,0 +1,28 @@
1
+ // ============================================================================
2
+ // BORDER RADIUS TOKENS
3
+ // ============================================================================
4
+ // Source: Figma UI Kit Production - Shape - Corner radius scale
5
+ // Node: 36930:106
6
+ // Version: 1.0.0
7
+ // ============================================================================
8
+
9
+ :root {
10
+ // ─────────────────────────────────────────────────────────────────────────
11
+ // CORNER RADIUS SCALE (13 values from Figma)
12
+ // Figma variables: shape/corner/* → SCSS: --er-shape-corner-*
13
+ // ─────────────────────────────────────────────────────────────────────────
14
+
15
+ --er-shape-corner-0: 0; // Figma: shape/corner/0 - core 0
16
+ --er-shape-corner-25: 2px; // Figma: shape/corner/25 - core 2
17
+ --er-shape-corner-50: 4px; // Figma: shape/corner/50 - core 4
18
+ --er-shape-corner-75: 6px; // Figma: shape/corner/75 - core 6
19
+ --er-shape-corner-100: 8px; // Figma: shape/corner/100 - core 8
20
+ --er-shape-corner-150: 12px; // Figma: shape/corner/150 - core 12
21
+ --er-shape-corner-200: 16px; // Figma: shape/corner/200 - core 16
22
+ --er-shape-corner-250: 20px; // Figma: shape/corner/250 - core 20
23
+ --er-shape-corner-300: 24px; // Figma: shape/corner/300 - core 24
24
+ --er-shape-corner-350: 28px; // Figma: shape/corner/350 - core 28
25
+ --er-shape-corner-400: 32px; // Figma: shape/corner/400 - core 32
26
+ --er-shape-corner-450: 48px; // Figma: shape/corner/450 - core 48
27
+ --er-shape-corner-full: 1000px; // Figma: shape/corner/full - core 1000, pill/stadium shape (CSS clamps to height/2)
28
+ }
@@ -0,0 +1,18 @@
1
+ // ============================================================================
2
+ // CONTROL / COMPONENT HEIGHT TOKENS
3
+ // ============================================================================
4
+ // Source: Figma UI Kit Production - Control height scale
5
+ // Values alias the shape/spacing/* scale
6
+ // Version: 1.1.0
7
+ // ============================================================================
8
+
9
+ :root {
10
+ --er-control-height-xxs: var(--er-shape-spacing-200); // 16px - Figma: xxs → shape/spacing/200
11
+ --er-control-height-xs: var(--er-shape-spacing-250); // 20px - Figma: xs → shape/spacing/250
12
+ --er-control-height-sm: var(--er-shape-spacing-300); // 24px - Figma: sm → shape/spacing/300
13
+ --er-control-height-md: var(--er-shape-spacing-400); // 32px - Figma: md → shape/spacing/400
14
+ --er-control-height-lg: var(--er-shape-spacing-500); // 40px - Figma: lg → shape/spacing/500
15
+ --er-control-height-xl: var(--er-shape-spacing-600); // 48px - Figma: xl → shape/spacing/600
16
+ --er-control-height-2xl: var(--er-shape-spacing-800); // 64px - Figma: 2xl → shape/spacing/800
17
+ --er-control-height-3xl: var(--er-shape-spacing-900); // 72px - Figma: 3xl → shape/spacing/900
18
+ }
@@ -0,0 +1,10 @@
1
+ :root {
2
+ // ─────────────────────────────────────────────────────────────────────────
3
+ // SHAPE / SPACING SCALE (13 values from Figma)
4
+ // Figma variables: shape/spacing/* → CSS: --er-shape-spacing-*
5
+ // ─────────────────────────────────────────────────────────────────────────
6
+
7
+ --er-screen-desktop: 1376px;
8
+ --er-screen-tablet: 744px;
9
+ --er-screen-lg: 393px;
10
+ }
@@ -0,0 +1,29 @@
1
+ // ============================================================================
2
+ // SPACING TOKENS (Shape / Spacing)
3
+ // ============================================================================
4
+ // Source: Figma UI Kit Production - Shape - Spacing scale
5
+ // Node: (from design tokens) — values follow Figma spacing scale
6
+ // Version: 1.0.0
7
+ // ============================================================================
8
+
9
+ :root {
10
+ // ─────────────────────────────────────────────────────────────────────────
11
+ // SHAPE / SPACING SCALE (14 values from Figma)
12
+ // Figma variables: shape/spacing/* → CSS: --er-shape-spacing-*
13
+ // ─────────────────────────────────────────────────────────────────────────
14
+
15
+ --er-shape-spacing-50: 4px; // Figma: shape/spacing/50 - core 4
16
+ --er-shape-spacing-75: 6px; // Figma: shape/spacing/75 - core 6
17
+ --er-shape-spacing-100: 8px; // Figma: shape/spacing/100 - core 8
18
+ --er-shape-spacing-150: 12px; // Figma: shape/spacing/150 - core 12
19
+ --er-shape-spacing-200: 16px; // Figma: shape/spacing/200 - core 16
20
+ --er-shape-spacing-250: 20px; // Figma: shape/spacing/250 - core 20
21
+ --er-shape-spacing-300: 24px; // Figma: shape/spacing/300 - core 24
22
+ --er-shape-spacing-400: 32px; // Figma: shape/spacing/400 - core 32
23
+ --er-shape-spacing-450: 36px; // Figma: shape/spacing/450 - core 36
24
+ --er-shape-spacing-500: 40px; // Figma: shape/spacing/500 - core 40
25
+ --er-shape-spacing-600: 48px; // Figma: shape/spacing/600 - core 48
26
+ --er-shape-spacing-700: 56px; // Figma: shape/spacing/700 - core 56
27
+ --er-shape-spacing-800: 64px; // Figma: shape/spacing/800 - core 64
28
+ --er-shape-spacing-900: 72px; // Figma: shape/spacing/900 - core 72
29
+ }
@@ -0,0 +1,11 @@
1
+ :root {
2
+ // typography-primitives.scss
3
+ --er-font-brand: 'Geist';
4
+ --er-font-plain: 'Geist';
5
+
6
+ --er-font-weight-400: 500;
7
+ --er-font-weight-500: 500;
8
+ --er-font-weight-600: 600;
9
+ --er-font-weight-700: 700;
10
+ --er-font-weight-800: 800;
11
+ }
@@ -0,0 +1,5 @@
1
+ :root{
2
+ --er-wg-regular: 400;
3
+ --er-wg-semi: 500;
4
+ --er-wg-bold: 600;
5
+ }