@astryxdesign/theme-butter 0.0.0-bootstrap.0 → 0.0.15

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.js ADDED
@@ -0,0 +1,918 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/source.ts
21
+ var source_exports = {};
22
+ __export(source_exports, {
23
+ butterIconRegistry: () => butterIconRegistry,
24
+ butterPalettes: () => butterPalettes,
25
+ butterTheme: () => butterTheme
26
+ });
27
+ module.exports = __toCommonJS(source_exports);
28
+
29
+ // src/butterTheme.ts
30
+ var import_theme = require("@astryxdesign/core/theme");
31
+
32
+ // src/icons.tsx
33
+ var import_lucide_react = require("lucide-react");
34
+ var import_jsx_runtime = require("react/jsx-runtime");
35
+ var iconProps = {
36
+ size: "1em",
37
+ "aria-hidden": true
38
+ };
39
+ var butterIconRegistry = {
40
+ close: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.X, { ...iconProps }),
41
+ chevronDown: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ChevronDown, { ...iconProps }),
42
+ chevronLeft: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ChevronLeft, { ...iconProps }),
43
+ chevronRight: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ChevronRight, { ...iconProps }),
44
+ check: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Check, { ...iconProps }),
45
+ success: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.CheckCircle, { ...iconProps }),
46
+ error: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.XCircle, { ...iconProps }),
47
+ warning: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.AlertTriangle, { ...iconProps }),
48
+ info: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Info, { ...iconProps }),
49
+ calendar: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Calendar, { ...iconProps }),
50
+ clock: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Clock, { ...iconProps }),
51
+ externalLink: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ExternalLink, { ...iconProps }),
52
+ menu: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Menu, { ...iconProps }),
53
+ moreHorizontal: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.MoreHorizontal, { ...iconProps }),
54
+ search: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Search, { ...iconProps }),
55
+ arrowUp: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowUp, { ...iconProps }),
56
+ arrowDown: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowDown, { ...iconProps }),
57
+ arrowsUpDown: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowUpDown, { ...iconProps }),
58
+ funnel: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Filter, { ...iconProps }),
59
+ eyeSlash: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.EyeOff, { ...iconProps }),
60
+ viewColumns: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Columns, { ...iconProps }),
61
+ copy: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Copy, { ...iconProps }),
62
+ checkDouble: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.CheckCheck, { ...iconProps }),
63
+ wrench: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Wrench, { ...iconProps }),
64
+ stop: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Square, { ...iconProps }),
65
+ microphone: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Mic, { ...iconProps })
66
+ };
67
+
68
+ // src/butterTheme.ts
69
+ var butterSyntax = (0, import_theme.defineSyntaxTheme)({
70
+ name: "xds-butter",
71
+ tokens: {
72
+ keyword: ["#52237b", "#ddb9f6"],
73
+ // Purple
74
+ string: ["#004800", "#a5d29d"],
75
+ // Green
76
+ comment: ["#605f52", "#adac9e"],
77
+ number: ["#622e00", "#f2bd81"],
78
+ // Orange
79
+ function: ["#203a6c", "#bdc5eb"],
80
+ // Blue
81
+ type: ["#52237b", "#ddb9f6"],
82
+ // Purple
83
+ variable: ["#605f52", "#adac9e"],
84
+ operator: ["#605f52", "#adac9e"],
85
+ constant: ["#622e00", "#f2bd81"],
86
+ tag: ["#6d211c", "#f4b8ae"],
87
+ // Red
88
+ attribute: ["#413e00", "#d6c957"],
89
+ // Yellow
90
+ property: ["#00482d", "#94d3bb"],
91
+ // Teal
92
+ punctuation: ["#605f52", "#adac9e"],
93
+ background: ["#FDFBE4", "#131107"]
94
+ }
95
+ });
96
+ var butterTheme = (0, import_theme.defineTheme)({
97
+ name: "butter",
98
+ typography: {
99
+ scale: { base: 14, ratio: 1.25 },
100
+ body: {
101
+ family: "Outfit",
102
+ fallbacks: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif'
103
+ },
104
+ heading: {
105
+ family: "Outfit",
106
+ fallbacks: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',
107
+ weights: { 3: "bold", 4: "bold" }
108
+ },
109
+ code: {
110
+ family: "JetBrains Mono",
111
+ fallbacks: '"SF Mono", Monaco, Consolas, monospace'
112
+ }
113
+ },
114
+ motion: { fast: 125, medium: 300, slow: 700, ratio: 0.75 },
115
+ syntax: butterSyntax,
116
+ tokens: {
117
+ // =========================================================================
118
+ // Core semantic — accent is the exact brand #225BFF
119
+ // =========================================================================
120
+ "--color-accent": ["#225BFF", "#FDEE8C"],
121
+ "--color-accent-muted": ["#225BFF33", "#FDEE8C40"],
122
+ "--color-neutral": ["#1d1c110F", "#f3f2e21A"],
123
+ "--color-background-surface": ["#FFFFFF", "#2E2117"],
124
+ "--color-background-body": ["#FDFBE4", "#261A13"],
125
+ "--color-overlay": ["#1d1c1180", "#261A13cc"],
126
+ "--color-overlay-hover": ["#1d1c110D", "#f3f2e20D"],
127
+ "--color-overlay-pressed": ["#1d1c111A", "#f3f2e21A"],
128
+ "--color-background-muted": ["#f3f2e2", "#3A2A1F"],
129
+ // Text — warm neutral
130
+ "--color-text-primary": ["#1d1c11", "#f3f2e2"],
131
+ "--color-text-secondary": ["#605f52", "#adac9e"],
132
+ "--color-text-disabled": ["#adac9e", "#605f52"],
133
+ "--color-text-accent": ["#225BFF", "#FDEE8C"],
134
+ "--color-on-dark": "#ffffff",
135
+ "--color-on-light": "#1d1c11",
136
+ "--color-on-accent": ["#ffffff", "#1d1c11"],
137
+ // T95 of each ramp for use on the vivid semantic surfaces.
138
+ "--color-on-success": ["#ccff88", "#0b2e00"],
139
+ "--color-on-error": ["#ffe3de", "#600000"],
140
+ "--color-on-warning": ["#ffeec3", "#3b2200"],
141
+ // Icon
142
+ "--color-icon-accent": ["#225BFF", "#FDEE8C"],
143
+ "--color-icon-primary": ["#1d1c11", "#f3f2e2"],
144
+ "--color-icon-secondary": ["#605f52", "#adac9e"],
145
+ "--color-icon-disabled": ["#adac9e", "#605f52"],
146
+ // Surface variants
147
+ "--color-background-card": ["#FFFFFF", "#3A2A1F"],
148
+ "--color-background-popover": ["#FFFFFF", "#3A2A1F"],
149
+ "--color-background-inverted": ["#1d1c11", "#FDFBE4"],
150
+ // Status semantics — T25 light / T80 dark from each status palette.
151
+ "--color-error": ["#771210", "#ffb4a6"],
152
+ "--color-error-muted": ["#77121033", "#ffb4a640"],
153
+ "--color-warning": ["#543700", "#f7be00"],
154
+ "--color-warning-muted": ["#54370033", "#f7be0040"],
155
+ "--color-success": ["#004700", "#99d94b"],
156
+ "--color-success-muted": ["#00470033", "#99d94b40"],
157
+ // Border — softer taupe card outline (emphasized) in light mode.
158
+ "--color-border": ["#e5e3d4", "#f3f2e21A"],
159
+ "--color-border-emphasized": ["#C7C4B2", "#939184"],
160
+ // Effects
161
+ "--color-skeleton": ["#e5e3d4", "#49473b"],
162
+ "--color-shadow": ["#1d1c111A", "#0000004D"],
163
+ "--color-tint-hover": ["black", "white"],
164
+ // Typography override
165
+ "--text-supporting-size": "12px",
166
+ // Element sizes — slightly taller defaults so the new input padding
167
+ // (--spacing-2 block) has room to breathe.
168
+ "--size-element-sm": "32px",
169
+ "--size-element-md": "40px",
170
+ "--size-element-lg": "48px",
171
+ // =========================================================================
172
+ // Categorical — same values in light and dark mode (curated dark mode
173
+ // keeps the same pastel backgrounds + dark text as light mode).
174
+ // =========================================================================
175
+ // Blue
176
+ "--color-background-blue": ["#dbe1ff", "#dbe1ff"],
177
+ "--color-border-blue": ["#bdc5eb", "#bdc5eb"],
178
+ "--color-icon-blue": ["#203a6c", "#203a6c"],
179
+ "--color-text-blue": ["#203a6c", "#203a6c"],
180
+ // Cyan
181
+ "--color-background-cyan": ["#a9eff0", "#a9eff0"],
182
+ "--color-border-cyan": ["#8dd2d3", "#8dd2d3"],
183
+ "--color-icon-cyan": ["#004649", "#004649"],
184
+ "--color-text-cyan": ["#004649", "#004649"],
185
+ // Gray (uses the neutral palette)
186
+ "--color-background-gray": ["#f0edd4", "#f0edd4"],
187
+ "--color-border-gray": ["#d6d3b8", "#d6d3b8"],
188
+ "--color-icon-gray": ["#4a4732", "#4a4732"],
189
+ "--color-text-gray": ["#4a4732", "#4a4732"],
190
+ // Green
191
+ "--color-background-green": ["#c1efb8", "#c1efb8"],
192
+ "--color-border-green": ["#a5d29d", "#a5d29d"],
193
+ "--color-icon-green": ["#004800", "#004800"],
194
+ "--color-text-green": ["#004800", "#004800"],
195
+ // Orange
196
+ "--color-background-orange": ["#ffdcb6", "#ffdcb6"],
197
+ "--color-border-orange": ["#f2bd81", "#f2bd81"],
198
+ "--color-icon-orange": ["#622e00", "#622e00"],
199
+ "--color-text-orange": ["#622e00", "#622e00"],
200
+ // Pink
201
+ "--color-background-pink": ["#ffd5fb", "#ffd5fb"],
202
+ "--color-border-pink": ["#f0b3e8", "#f0b3e8"],
203
+ "--color-icon-pink": ["#6c0a68", "#6c0a68"],
204
+ "--color-text-pink": ["#6c0a68", "#6c0a68"],
205
+ // Purple
206
+ "--color-background-purple": ["#f2daff", "#f2daff"],
207
+ "--color-border-purple": ["#ddb9f6", "#ddb9f6"],
208
+ "--color-icon-purple": ["#52237b", "#52237b"],
209
+ "--color-text-purple": ["#52237b", "#52237b"],
210
+ // Red
211
+ "--color-background-red": ["#ffdad3", "#ffdad3"],
212
+ "--color-border-red": ["#f4b8ae", "#f4b8ae"],
213
+ "--color-icon-red": ["#6d211c", "#6d211c"],
214
+ "--color-text-red": ["#6d211c", "#6d211c"],
215
+ // Teal
216
+ "--color-background-teal": ["#b0f0d7", "#b0f0d7"],
217
+ "--color-border-teal": ["#94d3bb", "#94d3bb"],
218
+ "--color-icon-teal": ["#00482d", "#00482d"],
219
+ "--color-text-teal": ["#00482d", "#00482d"],
220
+ // Yellow
221
+ "--color-background-yellow": ["#feee7b", "#feee7b"],
222
+ "--color-border-yellow": ["#d6c957", "#d6c957"],
223
+ "--color-icon-yellow": ["#413e00", "#413e00"],
224
+ "--color-text-yellow": ["#413e00", "#413e00"],
225
+ // =========================================================================
226
+ // Radius
227
+ // --radius-element drives buttons, badges, inputs — 8px per design
228
+ // --radius-container drives cards, banners, popovers — 12px per design
229
+ // =========================================================================
230
+ "--radius-none": "0.125rem",
231
+ "--radius-inner": "0.375rem",
232
+ "--radius-element": "0.5rem",
233
+ // 8px
234
+ "--radius-container": "0.75rem",
235
+ // 12px
236
+ "--radius-page": "1.5rem",
237
+ "--radius-full": "9999px",
238
+ // =========================================================================
239
+ // Shadows — warm neutral tint
240
+ // =========================================================================
241
+ "--shadow-low": "0 2px 4px #1d1c110D, 0 4px 8px #1d1c111A",
242
+ "--shadow-med": "0 2px 4px #1d1c110D, 0 4px 12px #1d1c111A",
243
+ "--shadow-high": "0 4px 6px #1d1c111A, 0 12px 24px #1d1c1126",
244
+ "--shadow-inset-hover": "inset 0px 0px 0px 2px #79786a30",
245
+ "--shadow-inset-selected": "inset 0px 0px 0px 2px #79786a50",
246
+ "--shadow-inset-success": "inset 0px 0px 0px 2px #00470030",
247
+ "--shadow-inset-warning": "inset 0px 0px 0px 2px #54370030",
248
+ "--shadow-inset-error": "inset 0px 0px 0px 2px #77121030"
249
+ },
250
+ components: {
251
+ // TopNav uses Butter's blue accent: the heading and the selected item are
252
+ // the full brand blue; unselected items (default + hover) use a lighter
253
+ // blue. Dark mode keeps the theme's butter-yellow accent.
254
+ "top-nav-heading": {
255
+ // The heading text is an inner span that reads --color-text-primary, so
256
+ // redirect that token (not just `color`) to the brand blue so the text
257
+ // itself turns blue, not only the container.
258
+ base: {
259
+ color: "light-dark(#225BFF, #FDEE8C)",
260
+ "--color-text-primary": "light-dark(#225BFF, #FDEE8C)"
261
+ }
262
+ },
263
+ "top-nav-item": {
264
+ base: {
265
+ color: "light-dark(#6E92FF, #FDEE8CCC)"
266
+ },
267
+ // Selected item: full brand blue, no pill background — rely on weight +
268
+ // color for emphasis. Hover/active keep the neutral overlay.
269
+ selected: {
270
+ color: "light-dark(#225BFF, #FDEE8C)",
271
+ backgroundColor: "transparent",
272
+ ":hover": {
273
+ backgroundColor: "var(--color-overlay-hover)"
274
+ },
275
+ ":active": {
276
+ backgroundColor: "var(--color-overlay-pressed)"
277
+ }
278
+ }
279
+ },
280
+ button: {
281
+ // Radius intentionally not pinned, so buttons keep core's
282
+ // `var(--_button-radius, --radius-element)`: standalone buttons stay 8px,
283
+ // while the chat composer (which sets --_button-radius) rounds them fully.
284
+ base: {
285
+ paddingBlock: "var(--spacing-3)",
286
+ paddingInline: "var(--spacing-4)"
287
+ },
288
+ // Secondary: blue outline + label in light, butter yellow in dark.
289
+ "variant:secondary": {
290
+ backgroundColor: "transparent",
291
+ borderWidth: "1.5px",
292
+ borderStyle: "solid",
293
+ borderColor: "light-dark(#225BFF, #FDEE8C)",
294
+ color: "light-dark(#225BFF, #FDEE8C)",
295
+ ":hover": {
296
+ backgroundColor: "light-dark(#225BFF14, #FDEE8C14)"
297
+ }
298
+ },
299
+ // Ghost: same accent color as secondary, no background.
300
+ "variant:ghost": {
301
+ color: "light-dark(#225BFF, #FDEE8C)"
302
+ },
303
+ "variant:destructive": {
304
+ backgroundColor: "light-dark(#ffdad3, #f4b8ae)",
305
+ color: "light-dark(#550000, #6d211c)"
306
+ }
307
+ },
308
+ badge: {
309
+ // Match astryx/daily badge sizing: 30px tall with 12px horizontal pad.
310
+ // Use explicit values because butter inherits the standard spacing
311
+ // scale (where --spacing-3 = 12px), unlike astryx which redefines it.
312
+ base: {
313
+ height: "30px",
314
+ paddingBlock: "0",
315
+ paddingInline: "var(--spacing-3)"
316
+ },
317
+ // Vivid semantic badges — pinned to the brand colors from the spec.
318
+ // Info uses the Blue palette source (NOT the brand accent #225BFF).
319
+ "variant:info": {
320
+ backgroundColor: "#4883fd",
321
+ color: "#ffffff"
322
+ },
323
+ "variant:neutral": {
324
+ backgroundColor: "#ffee7b",
325
+ color: "#225BFF"
326
+ },
327
+ "variant:success": {
328
+ backgroundColor: "#91D143",
329
+ color: "#1d1c11"
330
+ },
331
+ "variant:warning": {
332
+ backgroundColor: "#ffc502",
333
+ color: "#1d1c11"
334
+ },
335
+ "variant:error": {
336
+ backgroundColor: "#fc473b",
337
+ color: "#ffffff"
338
+ }
339
+ },
340
+ // Banner backgrounds match the semantic badge fills.
341
+ // Banner status colors — override the muted tokens locally so the
342
+ // header (which reads --color-*-muted via StyleX) renders vivid fills
343
+ // matching the badge palette. Scoped to the banner root, doesn't leak.
344
+ banner: {
345
+ "status:info": {
346
+ "--color-accent-muted": "#4883fd",
347
+ "--color-text-primary": "#ffffff",
348
+ "--color-text-secondary": "#ffffff",
349
+ "--color-accent": "#ffffff"
350
+ },
351
+ "status:success": {
352
+ "--color-success-muted": "#91D143",
353
+ "--color-text-primary": "#1d1c11",
354
+ "--color-text-secondary": "#1d1c11",
355
+ "--color-success": "#1d1c11"
356
+ },
357
+ "status:warning": {
358
+ "--color-warning-muted": "#ffc502",
359
+ "--color-text-primary": "#1d1c11",
360
+ "--color-text-secondary": "#1d1c11",
361
+ "--color-warning": "#1d1c11"
362
+ },
363
+ "status:error": {
364
+ "--color-error-muted": "#fc473b",
365
+ "--color-text-primary": "#ffffff",
366
+ "--color-text-secondary": "#ffffff",
367
+ "--color-error": "#ffffff"
368
+ }
369
+ },
370
+ card: {
371
+ base: {
372
+ borderRadius: "var(--radius-container)",
373
+ padding: "var(--spacing-4)"
374
+ },
375
+ "variant:info": {
376
+ "--color-text-primary": "#1d1c11",
377
+ "--color-text-secondary": "#605f52"
378
+ },
379
+ "variant:success": {
380
+ "--color-text-primary": "#1d1c11",
381
+ "--color-text-secondary": "#605f52"
382
+ },
383
+ "variant:warning": {
384
+ "--color-text-primary": "#1d1c11",
385
+ "--color-text-secondary": "#605f52"
386
+ },
387
+ "variant:error": {
388
+ "--color-text-primary": "#1d1c11",
389
+ "--color-text-secondary": "#605f52"
390
+ },
391
+ "variant:blue": {
392
+ "--color-text-primary": "#1d1c11",
393
+ "--color-text-secondary": "#605f52"
394
+ },
395
+ "variant:cyan": {
396
+ "--color-text-primary": "#1d1c11",
397
+ "--color-text-secondary": "#605f52"
398
+ },
399
+ "variant:gray": {
400
+ "--color-text-primary": "#1d1c11",
401
+ "--color-text-secondary": "#605f52"
402
+ },
403
+ "variant:green": {
404
+ "--color-text-primary": "#1d1c11",
405
+ "--color-text-secondary": "#605f52"
406
+ },
407
+ "variant:orange": {
408
+ "--color-text-primary": "#1d1c11",
409
+ "--color-text-secondary": "#605f52"
410
+ },
411
+ "variant:pink": {
412
+ "--color-text-primary": "#1d1c11",
413
+ "--color-text-secondary": "#605f52"
414
+ },
415
+ "variant:purple": {
416
+ "--color-text-primary": "#1d1c11",
417
+ "--color-text-secondary": "#605f52"
418
+ },
419
+ "variant:red": {
420
+ "--color-text-primary": "#1d1c11",
421
+ "--color-text-secondary": "#605f52"
422
+ },
423
+ "variant:teal": {
424
+ "--color-text-primary": "#1d1c11",
425
+ "--color-text-secondary": "#605f52"
426
+ },
427
+ "variant:yellow": {
428
+ "--color-text-primary": "#1d1c11",
429
+ "--color-text-secondary": "#605f52"
430
+ },
431
+ "variant:muted": {
432
+ "--color-text-primary": "#1d1c11",
433
+ "--color-text-secondary": "#605f52"
434
+ }
435
+ },
436
+ section: {
437
+ base: {
438
+ padding: "var(--spacing-4)"
439
+ }
440
+ },
441
+ // Progress bar — white track in light, warm brown in dark. Vivid
442
+ // semantic fills match the banner colors (Success / Warning / Error).
443
+ "progressbar-track": {
444
+ base: {
445
+ backgroundColor: "light-dark(#e5e3d4, #725538)"
446
+ }
447
+ },
448
+ "progressbar-fill": {
449
+ "variant:success": {
450
+ backgroundColor: "#91D143"
451
+ },
452
+ "variant:warning": {
453
+ backgroundColor: "#ffc502"
454
+ },
455
+ "variant:error": {
456
+ backgroundColor: "#fc473b"
457
+ }
458
+ },
459
+ // Field status bubble — match the corresponding banner colors so the
460
+ // helper text below an input reads as the same "this is a warning /
461
+ // error / success" surface as the standalone banner.
462
+ "field-status": {
463
+ "type:success": {
464
+ backgroundColor: "#91D143",
465
+ color: "#1d1c11"
466
+ },
467
+ "type:warning": {
468
+ backgroundColor: "#ffc502",
469
+ color: "#1d1c11"
470
+ },
471
+ "type:error": {
472
+ backgroundColor: "#fc473b",
473
+ color: "#ffffff"
474
+ }
475
+ },
476
+ // Inputs — softer border than default, more vertical breathing room.
477
+ // Status modifiers also remap the semantic tokens locally so the
478
+ // status icon + border read as the same vivid hue as the banner
479
+ // (icons inherit from --color-{success,warning,error}).
480
+ "text-input": {
481
+ base: {
482
+ paddingBlock: "var(--spacing-2)",
483
+ paddingInline: "var(--spacing-3)",
484
+ borderColor: "var(--color-border)"
485
+ },
486
+ "status:success": { "--color-success": "#91D143" },
487
+ "status:warning": { "--color-warning": "#ffc502" },
488
+ "status:error": { "--color-error": "#fc473b" }
489
+ },
490
+ textarea: {
491
+ base: {
492
+ paddingBlock: "var(--spacing-2)",
493
+ paddingInline: "var(--spacing-3)",
494
+ borderColor: "var(--color-border)"
495
+ },
496
+ "status:success": { "--color-success": "#91D143" },
497
+ "status:warning": { "--color-warning": "#ffc502" },
498
+ "status:error": { "--color-error": "#fc473b" }
499
+ },
500
+ "number-input": {
501
+ base: {
502
+ paddingBlock: "var(--spacing-2)",
503
+ paddingInline: "var(--spacing-3)",
504
+ borderColor: "var(--color-border)"
505
+ },
506
+ "status:success": { "--color-success": "#91D143" },
507
+ "status:warning": { "--color-warning": "#ffc502" },
508
+ "status:error": { "--color-error": "#fc473b" }
509
+ },
510
+ "date-input": {
511
+ base: {
512
+ paddingBlock: "var(--spacing-2)",
513
+ paddingInline: "var(--spacing-3)",
514
+ borderColor: "var(--color-border)"
515
+ },
516
+ "status:success": { "--color-success": "#91D143" },
517
+ "status:warning": { "--color-warning": "#ffc502" },
518
+ "status:error": { "--color-error": "#fc473b" }
519
+ },
520
+ "time-input": {
521
+ base: {
522
+ paddingBlock: "var(--spacing-2)",
523
+ paddingInline: "var(--spacing-3)",
524
+ borderColor: "var(--color-border)"
525
+ },
526
+ "status:success": { "--color-success": "#91D143" },
527
+ "status:warning": { "--color-warning": "#ffc502" },
528
+ "status:error": { "--color-error": "#fc473b" }
529
+ },
530
+ selector: {
531
+ base: {
532
+ paddingBlock: "var(--spacing-2)",
533
+ paddingInline: "var(--spacing-3)",
534
+ borderColor: "var(--color-border)"
535
+ },
536
+ "status:success": { "--color-success": "#91D143" },
537
+ "status:warning": { "--color-warning": "#ffc502" },
538
+ "status:error": { "--color-error": "#fc473b" }
539
+ },
540
+ "multi-selector": {
541
+ base: {
542
+ paddingBlock: "var(--spacing-2)",
543
+ paddingInline: "var(--spacing-3)",
544
+ borderColor: "var(--color-border)"
545
+ },
546
+ "status:success": { "--color-success": "#91D143" },
547
+ "status:warning": { "--color-warning": "#ffc502" },
548
+ "status:error": { "--color-error": "#fc473b" }
549
+ },
550
+ typeahead: {
551
+ base: {
552
+ paddingBlock: "var(--spacing-2)",
553
+ paddingInline: "var(--spacing-3)",
554
+ borderColor: "var(--color-border)"
555
+ },
556
+ "status:success": { "--color-success": "#91D143" },
557
+ "status:warning": { "--color-warning": "#ffc502" },
558
+ "status:error": { "--color-error": "#fc473b" }
559
+ },
560
+ tokenizer: {
561
+ base: {
562
+ paddingBlock: "var(--spacing-2)",
563
+ paddingInline: "var(--spacing-3)",
564
+ borderColor: "var(--color-border)"
565
+ },
566
+ "status:success": { "--color-success": "#91D143" },
567
+ "status:warning": { "--color-warning": "#ffc502" },
568
+ "status:error": { "--color-error": "#fc473b" }
569
+ },
570
+ // Display sizes use Sarina — the signature buttery display
571
+ // cursive, reserved for hero/marketing-scale text only.
572
+ // Headings (h1–h6) and body still use Outfit (configured above
573
+ // under typography.heading / typography.body). Same pattern
574
+ // Gothic uses for its Manufacturing Consent display family.
575
+ text: {
576
+ "type:display-1": {
577
+ fontFamily: 'Sarina, "Brush Script MT", "Snell Roundhand", cursive'
578
+ },
579
+ "type:display-2": {
580
+ fontFamily: 'Sarina, "Brush Script MT", "Snell Roundhand", cursive'
581
+ },
582
+ "type:display-3": {
583
+ fontFamily: 'Sarina, "Brush Script MT", "Snell Roundhand", cursive'
584
+ }
585
+ }
586
+ },
587
+ icons: butterIconRegistry
588
+ });
589
+ var butterPalettes = {
590
+ blue: {
591
+ 0: "#000000",
592
+ 5: "#001041",
593
+ 10: "#001b4c",
594
+ 15: "#002558",
595
+ 20: "#062f63",
596
+ 25: "#203a6c",
597
+ 30: "#324575",
598
+ 35: "#41517d",
599
+ 40: "#505d86",
600
+ 45: "#5f698f",
601
+ 50: "#6d7698",
602
+ 55: "#7a82a6",
603
+ 60: "#878fb3",
604
+ 65: "#949cc1",
605
+ 70: "#a2aacf",
606
+ 75: "#afb7dd",
607
+ 80: "#bdc5eb",
608
+ 85: "#cbd3f9",
609
+ 90: "#dbe1ff",
610
+ 95: "#edf0ff",
611
+ 100: "#ffffff"
612
+ },
613
+ cyan: {
614
+ 0: "#000000",
615
+ 5: "#001d1e",
616
+ 10: "#00262a",
617
+ 15: "#003034",
618
+ 20: "#003a3e",
619
+ 25: "#004649",
620
+ 30: "#005255",
621
+ 35: "#005e61",
622
+ 40: "#006a6d",
623
+ 45: "#1f7678",
624
+ 50: "#3c8183",
625
+ 55: "#4a8e90",
626
+ 60: "#579c9d",
627
+ 65: "#65a9aa",
628
+ 70: "#72b7b8",
629
+ 75: "#80c4c5",
630
+ 80: "#8dd2d3",
631
+ 85: "#9be0e1",
632
+ 90: "#a9eff0",
633
+ 95: "#b7fdfe",
634
+ 100: "#ffffff"
635
+ },
636
+ green: {
637
+ 0: "#000000",
638
+ 5: "#001f00",
639
+ 10: "#002800",
640
+ 15: "#003100",
641
+ 20: "#003c00",
642
+ 25: "#004800",
643
+ 30: "#01530d",
644
+ 35: "#1f5f1f",
645
+ 40: "#346a30",
646
+ 45: "#467640",
647
+ 50: "#578151",
648
+ 55: "#648e5d",
649
+ 60: "#709c6a",
650
+ 65: "#7da976",
651
+ 70: "#8ab783",
652
+ 75: "#98c490",
653
+ 80: "#a5d29d",
654
+ 85: "#b3e0ab",
655
+ 90: "#c1efb8",
656
+ 95: "#cffdc6",
657
+ 100: "#ffffff"
658
+ },
659
+ orange: {
660
+ 0: "#000000",
661
+ 5: "#2d0600",
662
+ 10: "#381200",
663
+ 15: "#461b00",
664
+ 20: "#542400",
665
+ 25: "#622e00",
666
+ 30: "#6d3a00",
667
+ 35: "#794700",
668
+ 40: "#845406",
669
+ 45: "#906121",
670
+ 50: "#9b6e36",
671
+ 55: "#a97b42",
672
+ 60: "#b7874e",
673
+ 65: "#c6945b",
674
+ 70: "#d4a267",
675
+ 75: "#e3af74",
676
+ 80: "#f2bd81",
677
+ 85: "#ffcb8e",
678
+ 90: "#ffdcb6",
679
+ 95: "#ffedda",
680
+ 100: "#ffffff"
681
+ },
682
+ pink: {
683
+ 0: "#000000",
684
+ 5: "#3c003d",
685
+ 10: "#490048",
686
+ 15: "#560054",
687
+ 20: "#62005f",
688
+ 25: "#6c0a68",
689
+ 30: "#762371",
690
+ 35: "#80357a",
691
+ 40: "#894583",
692
+ 45: "#93558c",
693
+ 50: "#9c6496",
694
+ 55: "#aa71a3",
695
+ 60: "#b77eb0",
696
+ 65: "#c58bbe",
697
+ 70: "#d398cc",
698
+ 75: "#e2a6da",
699
+ 80: "#f0b3e8",
700
+ 85: "#ffc1f6",
701
+ 90: "#ffd5fb",
702
+ 95: "#ffeafd",
703
+ 100: "#ffffff"
704
+ },
705
+ purple: {
706
+ 0: "#000000",
707
+ 5: "#1e004f",
708
+ 10: "#2b005c",
709
+ 15: "#390268",
710
+ 20: "#461373",
711
+ 25: "#52237b",
712
+ 30: "#5d3283",
713
+ 35: "#69408b",
714
+ 40: "#744e92",
715
+ 45: "#7f5c9a",
716
+ 50: "#8b6aa2",
717
+ 55: "#9877b0",
718
+ 60: "#a584bd",
719
+ 65: "#b391cb",
720
+ 70: "#c19ed9",
721
+ 75: "#cfabe8",
722
+ 80: "#ddb9f6",
723
+ 85: "#eac8ff",
724
+ 90: "#f2daff",
725
+ 95: "#f9ecff",
726
+ 100: "#ffffff"
727
+ },
728
+ red: {
729
+ 0: "#000000",
730
+ 5: "#3e0000",
731
+ 10: "#490000",
732
+ 15: "#550000",
733
+ 20: "#62100f",
734
+ 25: "#6d211c",
735
+ 30: "#773029",
736
+ 35: "#823f36",
737
+ 40: "#8c4d44",
738
+ 45: "#955b52",
739
+ 50: "#9f6961",
740
+ 55: "#ad766d",
741
+ 60: "#bb837a",
742
+ 65: "#c99087",
743
+ 70: "#d79d94",
744
+ 75: "#e6aba1",
745
+ 80: "#f4b8ae",
746
+ 85: "#ffc7bd",
747
+ 90: "#ffdad3",
748
+ 95: "#ffece8",
749
+ 100: "#ffffff"
750
+ },
751
+ teal: {
752
+ 0: "#000000",
753
+ 5: "#001f00",
754
+ 10: "#00280b",
755
+ 15: "#003216",
756
+ 20: "#003d22",
757
+ 25: "#00482d",
758
+ 30: "#005439",
759
+ 35: "#005f45",
760
+ 40: "#136b52",
761
+ 45: "#30775f",
762
+ 50: "#46826d",
763
+ 55: "#528f79",
764
+ 60: "#5f9d86",
765
+ 65: "#6caa93",
766
+ 70: "#7ab8a0",
767
+ 75: "#87c5ae",
768
+ 80: "#94d3bb",
769
+ 85: "#a2e1c9",
770
+ 90: "#b0f0d7",
771
+ 95: "#befee5",
772
+ 100: "#ffffff"
773
+ },
774
+ yellow: {
775
+ 0: "#000000",
776
+ 5: "#1e1200",
777
+ 10: "#271c00",
778
+ 15: "#2e2700",
779
+ 20: "#373200",
780
+ 25: "#413e00",
781
+ 30: "#4c4a00",
782
+ 35: "#575600",
783
+ 40: "#646200",
784
+ 45: "#726e00",
785
+ 50: "#817a00",
786
+ 55: "#8e860e",
787
+ 60: "#9c9320",
788
+ 65: "#aba02f",
789
+ 70: "#b9ae3d",
790
+ 75: "#c7bb4a",
791
+ 80: "#d6c957",
792
+ 85: "#e5d765",
793
+ 90: "#f4e572",
794
+ 95: "#fff294",
795
+ 100: "#ffffff"
796
+ },
797
+ neutral: {
798
+ 0: "#000000",
799
+ 5: "#051124",
800
+ 10: "#101c2f",
801
+ 15: "#1b263a",
802
+ 20: "#273045",
803
+ 25: "#333b4f",
804
+ 30: "#3f4759",
805
+ 35: "#4b5264",
806
+ 40: "#585e6f",
807
+ 45: "#656a79",
808
+ 50: "#727784",
809
+ 55: "#7f8491",
810
+ 60: "#8c909f",
811
+ 65: "#999eac",
812
+ 70: "#a6abba",
813
+ 75: "#b4b9c7",
814
+ 80: "#c1c6d5",
815
+ 85: "#cfd4e3",
816
+ 90: "#dde2f2",
817
+ 95: "#ebf0ff",
818
+ 100: "#ffffff"
819
+ },
820
+ accent: {
821
+ 0: "#000000",
822
+ 5: "#00085e",
823
+ 10: "#00136c",
824
+ 15: "#001c7e",
825
+ 20: "#002592",
826
+ 25: "#002fa7",
827
+ 30: "#0039be",
828
+ 35: "#0043d7",
829
+ 40: "#004df0",
830
+ 45: "#0759ff",
831
+ 50: "#4a67ff",
832
+ 55: "#6875ff",
833
+ 60: "#8083ff",
834
+ 65: "#9492ff",
835
+ 70: "#a6a1ff",
836
+ 75: "#b6b0ff",
837
+ 80: "#c6bfff",
838
+ 85: "#d5cfff",
839
+ 90: "#e3dfff",
840
+ 95: "#f1efff",
841
+ 100: "#ffffff"
842
+ },
843
+ error: {
844
+ 0: "#000000",
845
+ 5: "#470000",
846
+ 10: "#530000",
847
+ 15: "#600000",
848
+ 20: "#6d0000",
849
+ 25: "#771210",
850
+ 30: "#82261e",
851
+ 35: "#8c372c",
852
+ 40: "#96463b",
853
+ 45: "#a0564a",
854
+ 50: "#a96559",
855
+ 55: "#b77265",
856
+ 60: "#c57e72",
857
+ 65: "#d48b7e",
858
+ 70: "#e2998b",
859
+ 75: "#f1a698",
860
+ 80: "#ffb4a6",
861
+ 85: "#ffc7bc",
862
+ 90: "#ffdad2",
863
+ 95: "#ffece8",
864
+ 100: "#ffffff"
865
+ },
866
+ warning: {
867
+ 0: "#000000",
868
+ 5: "#270c00",
869
+ 10: "#301800",
870
+ 15: "#3b2200",
871
+ 20: "#472c00",
872
+ 25: "#543700",
873
+ 30: "#614200",
874
+ 35: "#6f4d00",
875
+ 40: "#7d5800",
876
+ 45: "#8b6400",
877
+ 50: "#9a7000",
878
+ 55: "#a97d00",
879
+ 60: "#b88900",
880
+ 65: "#c89600",
881
+ 70: "#d8a300",
882
+ 75: "#e7b100",
883
+ 80: "#f7be00",
884
+ 85: "#ffcd51",
885
+ 90: "#ffde9c",
886
+ 95: "#ffeed0",
887
+ 100: "#ffffff"
888
+ },
889
+ success: {
890
+ 0: "#000000",
891
+ 5: "#001a00",
892
+ 10: "#092300",
893
+ 15: "#0b2e00",
894
+ 20: "#043b00",
895
+ 25: "#004700",
896
+ 30: "#005400",
897
+ 35: "#036100",
898
+ 40: "#136e00",
899
+ 45: "#277b00",
900
+ 50: "#448700",
901
+ 55: "#529400",
902
+ 60: "#60a105",
903
+ 65: "#6eaf1d",
904
+ 70: "#7cbd2e",
905
+ 75: "#8bcb3c",
906
+ 80: "#99d94b",
907
+ 85: "#a7e758",
908
+ 90: "#b5f566",
909
+ 95: "#ccff88",
910
+ 100: "#ffffff"
911
+ }
912
+ };
913
+ // Annotate the CommonJS export names for ESM import in node:
914
+ 0 && (module.exports = {
915
+ butterIconRegistry,
916
+ butterPalettes,
917
+ butterTheme
918
+ });