@astryxdesign/theme-stone 0.7.3 → 0.7.4-canary.1b56e00

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/source.mjs CHANGED
@@ -70,58 +70,88 @@ var stoneIconRegistry = {
70
70
  microphone: /* @__PURE__ */ jsx(Mic, { ...iconProps })
71
71
  };
72
72
 
73
+ // src/stonePaletteRefs.generated.ts
74
+ var stonePaletteRefs = {
75
+ green: {
76
+ light: { 30: "#354f31", 55: "#609757", 85: "#bfdfbb", 90: "#d2eccf" },
77
+ dark: { 25: "#2f412c", 35: "#3e5d38", 70: "#90ba8a", 80: "#b3d0af", 90: "#d5e9d2" }
78
+ },
79
+ yellow: {
80
+ light: { 30: "#524818", 40: "#736419", 55: "#a08c36", 85: "#e7d3a4", 90: "#f4e1b7" },
81
+ dark: { 25: "#433b1b", 35: "#615620", 70: "#c2af6e", 80: "#d9c794", 90: "#f1e1b9" }
82
+ },
83
+ red: {
84
+ light: { 30: "#603c37", 40: "#745752", 60: "#a98984", 85: "#f0cac4", 90: "#fbdad4" },
85
+ dark: { 25: "#50332e", 35: "#684a45", 70: "#c6a29c", 80: "#e0bdb8", 90: "#f7dbd7" }
86
+ },
87
+ purple: {
88
+ light: { 30: "#4c405b", 40: "#635a70", 85: "#d9cfea", 90: "#e7def5" },
89
+ dark: { 25: "#3f374c", 35: "#574e64", 70: "#b0a5c0", 90: "#e6def3" }
90
+ },
91
+ teal: {
92
+ light: { 30: "#2c4f44", 40: "#40675c", 85: "#c3dbd2", 90: "#d4e8e1" },
93
+ dark: { 25: "#274239", 35: "#3a5b50", 70: "#94b3a9", 90: "#d6e7e1" }
94
+ },
95
+ neutral: {
96
+ light: { 0: "#000000", 15: "#25252a", 30: "#46464e", 40: "#5f5f64", 55: "#848489", 85: "#d4d3dd", 90: "#e2e2e8", 95: "#f0f0f7", 100: "#ffffff" },
97
+ dark: { 0: "#000000", 5: "#101018", 10: "#1b1b21", 15: "#25252a", 20: "#302f36", 25: "#3a3a42", 35: "#525159", 40: "#5e5e64", 65: "#9d9ea5", 70: "#ababb3", 90: "#e2e2e8", 95: "#f0f0f9", 100: "#ffffff" }
98
+ },
99
+ orange: {
100
+ dark: { 25: "#4e3522", 35: "#684c34", 70: "#c9a382", 90: "#ffdcbb" },
101
+ light: { 30: "#5e3f27", 85: "#f2cdaa", 90: "#ffdcbb" }
102
+ },
103
+ blue: {
104
+ light: { 30: "#344861", 40: "#516074", 85: "#c2d6f1", 90: "#d3e4fc" },
105
+ dark: { 25: "#2c3c52", 35: "#445469", 70: "#9aadc7", 90: "#d5e4f8" }
106
+ },
107
+ cyan: {
108
+ light: { 30: "#264d57", 85: "#badbe4", 90: "#cbe9f0" },
109
+ dark: { 25: "#234048", 35: "#345761", 90: "#cfe8ee" }
110
+ },
111
+ pink: {
112
+ light: { 30: "#5a3c4f", 85: "#e9cadc", 90: "#f5d9ea" },
113
+ dark: { 25: "#4b3242", 35: "#624a59", 90: "#f2dbe8" }
114
+ }
115
+ };
116
+
73
117
  // src/stoneTheme.ts
118
+ var { blue, cyan, green, neutral, orange, pink, purple, red, teal, yellow } = stonePaletteRefs;
119
+ var lightDark = (light, dark) => `light-dark(${light}, ${dark})`;
120
+ var withAlpha = (color, alpha) => `${color}${alpha}`;
74
121
  var INPUT_STATUS_VARS = {
75
122
  "status:success": {
76
- "--color-success": "light-dark(#7f977e, #99b298)"
77
- // Green T60 / T70
123
+ "--color-success": lightDark(green.light[55], green.dark[70])
78
124
  },
79
125
  "status:warning": {
80
- "--color-warning": "light-dark(#9f8f68, #bbaa81)"
81
- // Yellow T60 / T70
126
+ "--color-warning": lightDark(yellow.light[55], yellow.dark[70])
82
127
  },
83
128
  "status:error": {
84
- "--color-error": "light-dark(#a58b86, #c0a5a1)"
85
- // Red T60 / T70
129
+ "--color-error": lightDark(red.light[60], red.dark[70])
86
130
  }
87
131
  };
88
132
  var stoneSyntax = defineSyntaxTheme({
89
133
  name: "astryx-stone",
90
134
  tokens: {
91
- keyword: ["#645a72", "#b2a7c1"],
92
- // Purple T40 / T70
93
- string: ["#4e6357", "#9bb19a"],
94
- // Teal T40 / Green T70
95
- comment: ["#5e5e5e", "#ababb0"],
96
- // Stone Neutral T40 / T70
97
- number: ["#755752", "#bea792"],
98
- // Red T40 / Orange T70
99
- function: ["#506072", "#99adc6"],
100
- // Blue T40 / T70
101
- type: ["#645a72", "#b2a7c1"],
102
- // Purple T40 / T70
103
- variable: ["#5e5e5e", "#ababb0"],
104
- // Stone Neutral T40 / T70
105
- operator: ["#5e5e5e", "#ababb0"],
106
- // Stone Neutral T40 / T70
107
- constant: ["#755752", "#bea792"],
108
- // Red T40 / Orange T70
109
- tag: ["#775751", "#c7a39d"],
110
- // Red T40 / T70
111
- attribute: ["#79693f", "#b6aa90"],
112
- // Yellow T45 / T70
113
- property: ["#4e6357", "#94b2a0"],
114
- // Teal T40 / T70
115
- punctuation: ["#5e5e5e", "#ababb0"],
116
- // Stone Neutral T40 / T70
117
- background: ["#f3f3f5", "#171719"],
118
- // Diff rows: the muted green/red at 25% in light and 20% in dark keep
119
- // every token at or above 4.5:1 on the tint; the markers are the tinted
120
- // text tokens (8.1:1 light, 8.8:1 dark on their tints).
121
- added: ["#d0e9ce40", "#b4cdb233"],
122
- removed: ["#f9dcd740", "#dcc0bc33"],
123
- "added-marker": ["#374c36", "#d0e9ce"],
124
- "removed-marker": ["#58413e", "#f9dcd7"]
135
+ keyword: [purple.light[40], purple.dark[70]],
136
+ string: [teal.light[40], green.dark[70]],
137
+ comment: [neutral.light[40], neutral.dark[70]],
138
+ number: [red.light[40], orange.dark[70]],
139
+ function: [blue.light[40], blue.dark[70]],
140
+ type: [purple.light[40], purple.dark[70]],
141
+ variable: [neutral.light[40], neutral.dark[70]],
142
+ operator: [neutral.light[40], neutral.dark[70]],
143
+ constant: [red.light[40], orange.dark[70]],
144
+ tag: [red.light[40], red.dark[70]],
145
+ attribute: [yellow.light[40], yellow.dark[70]],
146
+ property: [teal.light[40], teal.dark[70]],
147
+ punctuation: [neutral.light[40], neutral.dark[70]],
148
+ background: [neutral.light[95], neutral.dark[5]],
149
+ // Translucent diff rows retain each token's contrast while the opaque
150
+ // markers carry the same Green and Red families as their row tint.
151
+ added: [withAlpha(green.light[90], "40"), withAlpha(green.dark[80], "33")],
152
+ removed: [withAlpha(red.light[90], "40"), withAlpha(red.dark[80], "33")],
153
+ "added-marker": [green.light[30], green.dark[90]],
154
+ "removed-marker": [red.light[30], red.dark[90]]
125
155
  }
126
156
  });
127
157
  var SECONDARY_BUTTON = {
@@ -181,184 +211,132 @@ var stoneTheme = defineTheme({
181
211
  motion: { fast: 125, medium: 300, slow: 700, ratio: 0.75 },
182
212
  syntax: stoneSyntax,
183
213
  tokens: {
184
- // =========================================================================
185
- // Colors — warm stone palette
186
- // Core: #28282A, #84848B, #D8D8DB, #f3f3f5, #FFFFFF
187
- // =========================================================================
188
- // Core semantic — all neutrals H=291
189
- // Stone 900 T=16 C=1.4, Stone 500 T=55 C=4, Stone 300 T=86 C=1.6, Stone 100 T=96 C=1
190
- "--color-accent": ["#25252a", "#f3f3f5"],
191
- // light: Stone Neutral T15
192
- "--color-accent-muted": ["#25252a14", "#f3f3f520"],
193
- // light: Stone Neutral T15 · 8% / dark: T96 · 12.5%
194
- "--color-neutral": ["#25252a0f", "#f3f3f51a"],
195
- // light: Stone Neutral T15 · 6% / dark: T96 · 10%
196
- "--color-background-surface": ["#ffffff", "#1b1b1f"],
197
- // dark: Stone Neutral T10
198
- "--color-background-body": ["#f3f3f5", "#111015"],
199
- // dark: Stone Neutral T5
200
- "--color-overlay": ["#25252a80", "#28282acc"],
201
- // light: Stone Neutral T15 · 50% / dark: 80%
202
- "--color-overlay-hover": ["#25252a0d", "#f3f3f50d"],
203
- // light: Stone Neutral T15 · 5% / dark: T96 · 5%
204
- "--color-overlay-pressed": ["#25252a1a", "#f3f3f51a"],
205
- // light: Stone Neutral T15 · 10% / dark: T96 · 10%
206
- "--color-background-muted": ["#e2e2e8", "#3b3b3f"],
207
- // light: Stone Neutral T90
208
- // Text — H=291
209
- "--color-text-primary": ["#25252a", "#f3f3f5"],
210
- // light: Stone Neutral T15
211
- // T40/T70 keeps normal secondary text above AA on every stone surface,
212
- // including the muted and tinted fills that components pair it with.
213
- "--color-text-secondary": ["#5e5e63", "#ababb0"],
214
- // Stone Neutral T40 / T70
215
- "--color-text-disabled": ["#d7d7da", "#5e5e61"],
216
- // T86 C=1.6 / T40 C=2
217
- "--color-text-accent": ["#25252a", "#f3f3f5"],
218
- // light: Stone Neutral T15
219
- "--color-on-dark": "#FFFFFF",
220
- "--color-on-light": ["#25252a", "#28282a"],
221
- // light: Stone Neutral T15
222
- "--color-on-accent": ["#ffffff", "#25252a"],
223
- // dark: Stone Neutral T15
224
- // Text on top of matching status surface (badge fill, banner content).
225
- "--color-on-success": ["#374c36", "#d0e9ce"],
226
- // Green T30 / T90
227
- "--color-on-error": ["#58413e", "#f9dcd7"],
228
- // Red T30 / T90
229
- "--color-on-warning": ["#524622", "#f4e1b7"],
230
- // Yellow T30 / T90
231
- // Icon — H=291
232
- "--color-icon-accent": ["#25252a", "#f3f3f5"],
233
- // light: Stone Neutral T15
234
- "--color-icon-primary": ["#25252a", "#f3f3f5"],
235
- // light: Stone Neutral T15
236
- "--color-icon-secondary": ["#83838a", "#9d9da3"],
237
- // T55 C=4 / T65 C=3
238
- "--color-icon-disabled": ["#d7d7da", "#5e5e61"],
239
- // T86 C=1.6 / T40 C=2
240
- // Surface variants — H=291
241
- "--color-background-card": ["#FFFFFF", "#242325"],
242
- // T14
243
- "--color-background-popover": ["#ffffff", "#25252a"],
244
- // dark: Stone Neutral T15
245
- "--color-background-inverted": ["#25252a", "#f3f3f5"],
246
- // light: Stone Neutral T15
247
- // Status / Sentiment — T50 from palette for icons/borders (visible color)
248
- "--color-success": ["#374c36", "#b4cdb2"],
249
- // Green T30 / T80
250
- "--color-success-muted": ["#d0e9ce", "#b4cdb2"],
251
- // Green T90 / T80
252
- "--color-error": ["#58413e", "#dcc0bc"],
253
- // Red T30 / T80
254
- "--color-error-muted": ["#f9dcd7", "#dcc0bc"],
255
- // Red T90 / T80
256
- "--color-warning": ["#524622", "#d7c59c"],
257
- // Yellow T30 / T80
258
- "--color-warning-muted": ["#f4e1b7", "#d7c59c"],
259
- // Yellow T90 / T80
260
- // Border — H=291
261
- "--color-border": ["#e2e2e8", "#f3f3f51a"],
262
- // light: Stone Neutral T90 / dark: T96 · 10%
263
- "--color-border-emphasized": ["#83838a", "#5e5e61"],
264
- // T55 C=4 / T40 C=2
265
- // Effects — H=291
266
- "--color-skeleton": ["#d4d4da", "#5e5e64"],
267
- // T85 / T40 from H=291 C=3
268
- "--color-shadow": ["#25252a1a", "#0000004d"],
269
- // light: Stone Neutral T15 · 10% / dark: 30%
270
- "--color-tint-hover": ["black", "white"],
214
+ // Core neutrals
215
+ "--color-accent": [neutral.light[15], neutral.dark[95]],
216
+ "--color-accent-muted": [
217
+ withAlpha(neutral.light[15], "14"),
218
+ withAlpha(neutral.dark[95], "20")
219
+ ],
220
+ "--color-neutral": [
221
+ withAlpha(neutral.light[15], "0f"),
222
+ withAlpha(neutral.dark[95], "1a")
223
+ ],
224
+ "--color-background-surface": [neutral.light[100], neutral.dark[10]],
225
+ "--color-background-body": [neutral.light[95], neutral.dark[5]],
226
+ "--color-overlay": [
227
+ withAlpha(neutral.light[15], "80"),
228
+ withAlpha(neutral.dark[15], "cc")
229
+ ],
230
+ "--color-overlay-hover": [
231
+ withAlpha(neutral.light[15], "0d"),
232
+ withAlpha(neutral.dark[95], "0d")
233
+ ],
234
+ "--color-overlay-pressed": [
235
+ withAlpha(neutral.light[15], "1a"),
236
+ withAlpha(neutral.dark[95], "1a")
237
+ ],
238
+ "--color-background-muted": [neutral.light[90], neutral.dark[25]],
239
+ // Text
240
+ "--color-text-primary": [neutral.light[15], neutral.dark[95]],
241
+ // These stops keep normal secondary text readable on Stone's body,
242
+ // muted, and categorical surfaces.
243
+ "--color-text-secondary": [neutral.light[40], neutral.dark[70]],
244
+ "--color-text-disabled": [neutral.light[85], neutral.dark[40]],
245
+ "--color-text-accent": [neutral.light[15], neutral.dark[95]],
246
+ "--color-on-dark": neutral.light[100],
247
+ "--color-on-light": [neutral.light[15], neutral.dark[15]],
248
+ "--color-on-accent": [neutral.light[100], neutral.dark[15]],
249
+ "--color-on-success": [green.light[30], green.dark[90]],
250
+ "--color-on-error": [red.light[30], red.dark[90]],
251
+ "--color-on-warning": [yellow.light[30], yellow.dark[90]],
252
+ // Icon
253
+ "--color-icon-accent": [neutral.light[15], neutral.dark[95]],
254
+ "--color-icon-primary": [neutral.light[15], neutral.dark[95]],
255
+ "--color-icon-secondary": [neutral.light[55], neutral.dark[65]],
256
+ "--color-icon-disabled": [neutral.light[85], neutral.dark[40]],
257
+ // Surface variants
258
+ "--color-background-card": [neutral.light[100], neutral.dark[15]],
259
+ "--color-background-popover": [neutral.light[100], neutral.dark[20]],
260
+ "--color-background-inverted": [neutral.light[15], neutral.dark[95]],
261
+ // Status / sentiment
262
+ "--color-success": [green.light[30], green.dark[80]],
263
+ "--color-success-muted": [green.light[90], green.dark[80]],
264
+ "--color-error": [red.light[30], red.dark[80]],
265
+ "--color-error-muted": [red.light[90], red.dark[80]],
266
+ "--color-warning": [yellow.light[30], yellow.dark[80]],
267
+ "--color-warning-muted": [yellow.light[90], yellow.dark[80]],
268
+ // Border
269
+ "--color-border": [neutral.light[90], withAlpha(neutral.dark[95], "1a")],
270
+ "--color-border-emphasized": [neutral.light[55], neutral.dark[40]],
271
+ // Effects
272
+ "--color-skeleton": [neutral.light[85], neutral.dark[40]],
273
+ "--color-shadow": [
274
+ withAlpha(neutral.light[15], "1a"),
275
+ withAlpha(neutral.dark[0], "4d")
276
+ ],
277
+ "--color-tint-hover": [neutral.light[0], neutral.dark[100]],
271
278
  // Typography override
272
279
  "--text-supporting-size": "12px",
273
- // Categorical hues
274
- // Light: T90 solid bg + T30 text (pastel surface, dark text)
275
- // Dark: T35 solid bg + T90 text — snaps to canonical palette stops
276
- // per theming-infra.mdc §7. T90 dark text is the SAME hex as
277
- // the light-mode bg pastel — clean palette symmetry, ~6–9:1
278
- // contrast on the T35 surface across all hues (passes AA Body).
279
- // Borders: light T85 / dark T25 — one step inward from surface in both
280
- // modes, matching the light-mode T90/T85 spacing.
281
- // Categorical — Blue H=265 C=10
282
- "--color-background-blue": ["#d7e4f5", "#485362"],
283
- // light T90 / dark T35
284
- "--color-border-blue": ["#c9d6e7", "#313c4a"],
285
- // light T85 / dark T25
286
- "--color-icon-blue": ["#3c4856", "#d7e4f5"],
287
- // light T30 / dark T90
288
- "--color-text-blue": ["#3c4856", "#d7e4f5"],
289
- // Categorical — Cyan H=190 C=10
290
- "--color-background-cyan": ["#cce8e5", "#3e5755"],
291
- "--color-border-cyan": ["#bedad7", "#28403e"],
292
- "--color-icon-cyan": ["#334b49", "#cce8e5"],
293
- "--color-text-cyan": ["#334b49", "#cce8e5"],
294
- // Categorical — Gray (pure neutral, C=0). Same T35/T25/T90 pattern from
295
- // the neutral H=291 C=3 ramp.
296
- "--color-background-gray": ["#e2e2e8", "#525257"],
297
- // light: Stone Neutral T90
298
- "--color-border-gray": ["#d4d4da", "#3b3b3f"],
299
- // light: Stone Neutral T85
300
- "--color-icon-gray": ["#46464b", "#e2e2e8"],
301
- // light: Stone Neutral T30
302
- "--color-text-gray": ["#46464b", "#e2e2e8"],
303
- // light: Stone Neutral T30
304
- // Categorical — Green H=142 C=17
305
- "--color-background-green": ["#d0e9ce", "#425841"],
306
- "--color-border-green": ["#c2dbc0", "#2b402b"],
307
- "--color-icon-green": ["#374c36", "#d0e9ce"],
308
- "--color-text-green": ["#374c36", "#d0e9ce"],
309
- // Categorical — Orange H=70 C=22
310
- "--color-background-orange": ["#ffdcbb", "#684d32"],
311
- "--color-border-orange": ["#f1ceae", "#4f361c"],
312
- "--color-icon-orange": ["#5b4227", "#ffdcbb"],
313
- "--color-text-orange": ["#5b4227", "#ffdcbb"],
314
- // Categorical — Pink H=340 C=9
315
- "--color-background-pink": ["#f0dde8", "#5e4e57"],
316
- "--color-border-pink": ["#e2cfda", "#463740"],
317
- "--color-icon-pink": ["#52424c", "#f0dde8"],
318
- "--color-text-pink": ["#52424c", "#f0dde8"],
319
- // Categorical — Purple H=307 C=11
320
- "--color-background-purple": ["#e8dff3", "#564f60"],
321
- "--color-border-purple": ["#d9d1e5", "#3f3949"],
322
- "--color-icon-purple": ["#4b4454", "#e8dff3"],
323
- "--color-text-purple": ["#4b4454", "#e8dff3"],
324
- // Categorical — Red H=33 C=11
325
- "--color-background-red": ["#f9dcd7", "#644d49"],
326
- "--color-border-red": ["#ebcec9", "#4c3633"],
327
- "--color-icon-red": ["#58413e", "#f9dcd7"],
328
- "--color-text-red": ["#58413e", "#f9dcd7"],
329
- // Categorical — Teal H=158 C=9
330
- "--color-background-teal": ["#d4e7dc", "#46564d"],
331
- "--color-border-teal": ["#c6d9ce", "#303f36"],
332
- "--color-icon-teal": ["#3b4a41", "#d4e7dc"],
333
- "--color-text-teal": ["#3b4a41", "#d4e7dc"],
334
- // Categorical — Yellow H=90 C=23
335
- "--color-background-yellow": ["#f4e1b7", "#5e512d"],
336
- "--color-border-yellow": ["#e5d3a9", "#463a18"],
337
- "--color-icon-yellow": ["#524622", "#f4e1b7"],
338
- "--color-text-yellow": ["#524622", "#f4e1b7"],
339
- // =========================================================================
340
- // Radius — clean and subtle
341
- // --radius-none and --radius-full are always fixed and must never be
342
- // scaled by a theme (see defineTheme's radius config docs) — 0 and
343
- // 9999px respectively, matching @astryxdesign/core's own defaults.
344
- // =========================================================================
280
+ // Categorical
281
+ // Light mode pairs pastel stop 90 surfaces with stop 30 foregrounds.
282
+ // Dark mode pairs stop 35 surfaces with stop 90 foregrounds; borders move
283
+ // one step inward in both modes.
284
+ "--color-background-blue": [blue.light[90], blue.dark[35]],
285
+ "--color-border-blue": [blue.light[85], blue.dark[25]],
286
+ "--color-icon-blue": [blue.light[30], blue.dark[90]],
287
+ "--color-text-blue": [blue.light[30], blue.dark[90]],
288
+ "--color-background-cyan": [cyan.light[90], cyan.dark[35]],
289
+ "--color-border-cyan": [cyan.light[85], cyan.dark[25]],
290
+ "--color-icon-cyan": [cyan.light[30], cyan.dark[90]],
291
+ "--color-text-cyan": [cyan.light[30], cyan.dark[90]],
292
+ "--color-background-gray": [neutral.light[90], neutral.dark[35]],
293
+ "--color-border-gray": [neutral.light[85], neutral.dark[25]],
294
+ "--color-icon-gray": [neutral.light[30], neutral.dark[90]],
295
+ "--color-text-gray": [neutral.light[30], neutral.dark[90]],
296
+ "--color-background-green": [green.light[90], green.dark[35]],
297
+ "--color-border-green": [green.light[85], green.dark[25]],
298
+ "--color-icon-green": [green.light[30], green.dark[90]],
299
+ "--color-text-green": [green.light[30], green.dark[90]],
300
+ "--color-background-orange": [orange.light[90], orange.dark[35]],
301
+ "--color-border-orange": [orange.light[85], orange.dark[25]],
302
+ "--color-icon-orange": [orange.light[30], orange.dark[90]],
303
+ "--color-text-orange": [orange.light[30], orange.dark[90]],
304
+ "--color-background-pink": [pink.light[90], pink.dark[35]],
305
+ "--color-border-pink": [pink.light[85], pink.dark[25]],
306
+ "--color-icon-pink": [pink.light[30], pink.dark[90]],
307
+ "--color-text-pink": [pink.light[30], pink.dark[90]],
308
+ "--color-background-purple": [purple.light[90], purple.dark[35]],
309
+ "--color-border-purple": [purple.light[85], purple.dark[25]],
310
+ "--color-icon-purple": [purple.light[30], purple.dark[90]],
311
+ "--color-text-purple": [purple.light[30], purple.dark[90]],
312
+ "--color-background-red": [red.light[90], red.dark[35]],
313
+ "--color-border-red": [red.light[85], red.dark[25]],
314
+ "--color-icon-red": [red.light[30], red.dark[90]],
315
+ "--color-text-red": [red.light[30], red.dark[90]],
316
+ "--color-background-teal": [teal.light[90], teal.dark[35]],
317
+ "--color-border-teal": [teal.light[85], teal.dark[25]],
318
+ "--color-icon-teal": [teal.light[30], teal.dark[90]],
319
+ "--color-text-teal": [teal.light[30], teal.dark[90]],
320
+ "--color-background-yellow": [yellow.light[90], yellow.dark[35]],
321
+ "--color-border-yellow": [yellow.light[85], yellow.dark[25]],
322
+ "--color-icon-yellow": [yellow.light[30], yellow.dark[90]],
323
+ "--color-text-yellow": [yellow.light[30], yellow.dark[90]],
324
+ // Radius
345
325
  "--radius-none": "0px",
346
326
  "--radius-inner": "0.25rem",
347
327
  "--radius-element": "0.5rem",
348
328
  "--radius-container": "0.75rem",
349
329
  "--radius-page": "1.5rem",
350
330
  "--radius-full": "9999px",
351
- // =========================================================================
352
331
  // Shadows
353
- // =========================================================================
354
- "--shadow-low": "0 2px 4px #28282A0D, 0 4px 8px #28282A1A",
355
- "--shadow-med": "0 2px 4px #28282A0D, 0 4px 12px #28282A1A",
356
- "--shadow-high": "0 4px 6px #28282A1A, 0 12px 24px #28282A26",
357
- "--shadow-inset-hover": "inset 0px 0px 0px 2px #28282A30",
358
- "--shadow-inset-selected": "inset 0px 0px 0px 2px #28282A50",
359
- "--shadow-inset-success": "inset 0px 0px 0px 2px #83838a30",
360
- "--shadow-inset-warning": "inset 0px 0px 0px 2px #83838a30",
361
- "--shadow-inset-error": "inset 0px 0px 0px 2px #83838a30"
332
+ "--shadow-low": `0 2px 4px ${withAlpha(neutral.light[15], "0d")}, 0 4px 8px ${withAlpha(neutral.light[15], "1a")}`,
333
+ "--shadow-med": `0 2px 4px ${withAlpha(neutral.light[15], "0d")}, 0 4px 12px ${withAlpha(neutral.light[15], "1a")}`,
334
+ "--shadow-high": `0 4px 6px ${withAlpha(neutral.light[15], "1a")}, 0 12px 24px ${withAlpha(neutral.light[15], "26")}`,
335
+ "--shadow-inset-hover": `inset 0 0 0 2px ${withAlpha(neutral.light[15], "30")}`,
336
+ "--shadow-inset-selected": `inset 0 0 0 2px ${withAlpha(neutral.light[15], "50")}`,
337
+ "--shadow-inset-success": `inset 0 0 0 2px ${withAlpha(neutral.light[55], "30")}`,
338
+ "--shadow-inset-warning": `inset 0 0 0 2px ${withAlpha(neutral.light[55], "30")}`,
339
+ "--shadow-inset-error": `inset 0 0 0 2px ${withAlpha(neutral.light[55], "30")}`
362
340
  },
363
341
  components: {
364
342
  button: {
@@ -371,7 +349,8 @@ var stoneTheme = defineTheme({
371
349
  color: "var(--color-text-red)"
372
350
  }
373
351
  },
374
- // Semantic variants point at categorical hue tokens — single source of truth.
352
+ // Badges, banners, and field status messages share the categorical
353
+ // surfaces and foregrounds so each semantic state has one visual source.
375
354
  badge: {
376
355
  "variant:info": {
377
356
  backgroundColor: "var(--color-background-blue)",
@@ -394,10 +373,8 @@ var stoneTheme = defineTheme({
394
373
  color: "var(--color-text-red)"
395
374
  }
396
375
  },
397
- // StyleX paints the banner surface from @layer priority4 (above
398
- // @layer astryx-theme), so a direct backgroundColor override loses the
399
- // cascade. Redefine the muted token instead so StyleX's var() resolves
400
- // to the categorical bg in our scope.
376
+ // Banner surface declarations live above the theme layer, so redirect the
377
+ // semantic variables here instead of attempting a losing direct fill.
401
378
  banner: {
402
379
  "status:info": {
403
380
  "--color-accent-muted": "var(--color-background-blue)",
@@ -424,45 +401,35 @@ var stoneTheme = defineTheme({
424
401
  "--color-error": "var(--color-text-red)"
425
402
  }
426
403
  },
427
- // Fill: light = T90 (same hex as banner/badge surface — fill reads as
428
- // the same color family as the matching status surface). Dark = T70.
429
- // Hexes from the preview Tonal Palettes ramp. accent (default) +
430
- // indeterminate both route to blue for the in-progress / loading look.
404
+ // Progress fills use the same family as their matching status surface;
405
+ // the darker stop in dark mode keeps the channel visible on dark tracks.
431
406
  "progress-bar-fill": {
432
407
  "variant:accent": {
433
- backgroundColor: "light-dark(#d7e4f5, #a0acbc)"
434
- // Blue T90 / T70
408
+ backgroundColor: lightDark(blue.light[90], blue.dark[70])
435
409
  },
436
410
  "variant:success": {
437
- backgroundColor: "light-dark(#d0e9ce, #9ab298)"
438
- // Green T90 / T70
411
+ backgroundColor: lightDark(green.light[90], green.dark[70])
439
412
  },
440
413
  "variant:warning": {
441
- backgroundColor: "light-dark(#f4e1b7, #bbaa82)"
442
- // Yellow T90 / T70
414
+ backgroundColor: lightDark(yellow.light[90], yellow.dark[70])
443
415
  },
444
416
  "variant:error": {
445
- backgroundColor: "light-dark(#f9dcd7, #c0a5a0)"
446
- // Red T90 / T70
417
+ backgroundColor: lightDark(red.light[90], red.dark[70])
447
418
  }
448
419
  },
449
- // Track default --color-background-muted reads near-body in stone;
450
- // redirect to --color-skeleton so the channel stays visible.
420
+ // The default muted track is too close to Stone's body surface.
451
421
  "progress-bar-track": {
452
422
  base: {
453
423
  backgroundColor: "var(--color-skeleton)"
454
424
  }
455
425
  },
456
- // Switch off-state track reads --color-background-gray by default.
457
- // Redefine it inside the switch scope to --color-skeleton, matching
458
- // the ProgressBar track. The on-state reads --color-accent (unaffected);
459
- // disabled-off also picks up --color-skeleton for consistency.
426
+ // Match the Switch off-state track to the visible ProgressBar track.
460
427
  switch: {
461
428
  base: {
462
429
  "--color-background-gray": "var(--color-skeleton)"
463
430
  }
464
431
  },
465
- // FieldStatus surface matches badge — see badge override above.
432
+ // FieldStatus surfaces match the corresponding badge and banner family.
466
433
  "field-status": {
467
434
  "type:success": {
468
435
  backgroundColor: "var(--color-background-green)"
@@ -474,8 +441,7 @@ var stoneTheme = defineTheme({
474
441
  backgroundColor: "var(--color-background-red)"
475
442
  }
476
443
  },
477
- // Input status borders + icons across all 9 input components share the
478
- // same softer T60/T70 redirection. See INPUT_STATUS_VARS above.
444
+ // Every input status border and icon uses INPUT_STATUS_VARS above.
479
445
  "text-input": INPUT_STATUS_VARS,
480
446
  "text-area": INPUT_STATUS_VARS,
481
447
  "number-input": INPUT_STATUS_VARS,
package/dist/stone.d.ts CHANGED
@@ -2,8 +2,8 @@
2
2
  * @generated by `astryx theme build` — do not edit manually.
3
3
  * Source: src/stoneTheme.ts
4
4
  * Command: astryx theme build src/stoneTheme.ts --out dist/theme.css
5
- * CLI: @astryxdesign/cli@0.7.3
6
- * Core: @astryxdesign/core@0.7.3
5
+ * CLI: @astryxdesign/cli@0.7.4
6
+ * Core: @astryxdesign/core@0.7.4
7
7
  */
8
8
 
9
9
  import type { DefinedTheme } from '@astryxdesign/core/theme';