@matteoaliano/forest-ui 0.8.8 → 1.0.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.
package/dist/theme.js CHANGED
@@ -39,10 +39,7 @@ __export(theme_exports, {
39
39
  fontFamilyMono: () => fontFamilyMono,
40
40
  fontSize: () => fontSize,
41
41
  fontWeight: () => fontWeight,
42
- forestAgencyPreset: () => forestAgencyPreset,
43
42
  forestAlkemyPlusPreset: () => forestAlkemyPlusPreset,
44
- forestExternalPreset: () => forestExternalPreset,
45
- forestInternalPreset: () => forestInternalPreset,
46
43
  forestTheme: () => forestTheme,
47
44
  forestThemeOptions: () => forestThemeOptions,
48
45
  getAvailablePresets: () => getAvailablePresets,
@@ -72,703 +69,87 @@ module.exports = __toCommonJS(theme_exports);
72
69
  // src/theme/buildTheme.ts
73
70
  var import_styles = require("@mui/material/styles");
74
71
 
75
- // src/theme/tokens.ts
76
- var violet = {
77
- 25: "#faf8ff",
78
- 50: "#f5f0ff",
79
- 100: "#ebe0ff",
80
- 200: "#d6c0ff",
81
- 300: "#b090ff",
82
- 400: "#9D5FFF",
83
- 500: "#7c4de6",
84
- 600: "#5b3acc",
85
- 700: "#3a1aad",
86
- 800: "#190a8a",
87
- 900: "#000066",
88
- 950: "#000033"
89
- };
90
- var magenta = {
91
- 25: "#fff8fd",
92
- 50: "#fff0fa",
93
- 100: "#ffe0f5",
94
- 200: "#ffc0eb",
95
- 300: "#ff90d8",
96
- 400: "#FF78F3",
97
- 500: "#e650d4",
98
- 600: "#cc28b5",
99
- 700: "#a3008c",
100
- 800: "#7a0066",
101
- 900: "#520044",
102
- 950: "#290022"
103
- };
104
- var gray = {
105
- 25: "#fdfcfc",
106
- 50: "#faf9f8",
107
- 100: "#f5f3f1",
108
- 200: "#e8e5e3",
109
- 300: "#d8d8dc",
110
- 400: "#a0a0a6",
111
- 500: "#71717a",
112
- 600: "#52525b",
113
- 700: "#3f3f46",
114
- 800: "#27272a",
115
- 900: "#18181b",
116
- 950: "#09090b"
117
- };
118
- var red = {
119
- 25: "#fff8f7",
120
- 50: "#fff0ee",
121
- 100: "#ffe0dd",
122
- 200: "#ffc0bb",
123
- 300: "#ff9090",
124
- 400: "#FF2821",
125
- 500: "#e61a1a",
126
- 600: "#cc1010",
127
- 700: "#a30808",
128
- 800: "#7a0000",
129
- 900: "#520000",
130
- 950: "#290000"
131
- };
132
- var misc = {
133
- teal: {
134
- 25: "#f6fefc",
135
- 50: "#f0fdf9",
136
- 100: "#ccfbef",
137
- 200: "#99f6e0",
138
- 300: "#5fe9d0",
139
- 400: "#2ed3b7",
140
- 500: "#15b79e",
141
- 600: "#0e9384",
142
- 700: "#107569",
143
- 800: "#125d56",
144
- 900: "#134e48",
145
- 950: "#0a2926"
146
- },
147
- orange: {
148
- 25: "#fefaf5",
149
- 50: "#fef6ee",
150
- 100: "#fdead7",
151
- 200: "#f9dbaf",
152
- 300: "#f7b27a",
153
- 400: "#f38744",
154
- 500: "#ef6820",
155
- 600: "#e04f16",
156
- 700: "#b93815",
157
- 800: "#932f19",
158
- 900: "#772917",
159
- 950: "#511c10"
160
- },
161
- purple: {
162
- 25: "#fafaff",
163
- 50: "#f4f3ff",
164
- 100: "#ebe9fe",
165
- 200: "#d9d6fe",
166
- 300: "#bdb4fe",
167
- 400: "#9b8afb",
168
- 500: "#7a5af8",
169
- 600: "#6938ef",
170
- 700: "#5925dc",
171
- 800: "#4a1fb8",
172
- 900: "#3e1c96",
173
- 950: "#27115f"
174
- },
175
- pink: {
176
- 25: "#fef6fb",
177
- 50: "#fdf2fa",
178
- 100: "#fce7f6",
179
- 200: "#fcceee",
180
- 300: "#faa7e0",
181
- 400: "#f670c7",
182
- 500: "#ee46bc",
183
- 600: "#dd2590",
184
- 700: "#c11574",
185
- 800: "#9e165f",
186
- 900: "#851651",
187
- 950: "#4e0d30"
188
- },
189
- fuchsia: {
190
- 25: "#fefaff",
191
- 50: "#fdf4ff",
192
- 100: "#fbe8ff",
193
- 200: "#f6d0fe",
194
- 300: "#eeaafd",
195
- 400: "#e478fa",
196
- 500: "#d444f1",
197
- 600: "#ba24d5",
198
- 700: "#9f1ab1",
199
- 800: "#821890",
200
- 900: "#6f1877",
201
- 950: "#47104c"
202
- },
203
- orangeDark: {
204
- 25: "#fff9f5",
205
- 50: "#fff4ed",
206
- 100: "#ffe6d5",
207
- 200: "#ffd6ae",
208
- 300: "#ff9c66",
209
- 400: "#ff692e",
210
- 500: "#ff4405",
211
- 600: "#e62e05",
212
- 700: "#bc1b06",
213
- 800: "#97180c",
214
- 900: "#771a0d",
215
- 950: "#57130a"
216
- },
217
- green: {
218
- 25: "#f6fef9",
219
- 50: "#edfcf2",
220
- 100: "#d3f8df",
221
- 200: "#aaf0c4",
222
- 300: "#73e2a3",
223
- 400: "#3ccb7f",
224
- 500: "#16b364",
225
- 600: "#099250",
226
- 700: "#087443",
227
- 800: "#095c37",
228
- 900: "#084c2e",
229
- 950: "#052e1c"
230
- },
231
- indigo: {
232
- 25: "#f5f8ff",
233
- 50: "#eef4ff",
234
- 100: "#e0eaff",
235
- 200: "#c7d7fe",
236
- 300: "#a4bcfd",
237
- 400: "#8098f9",
238
- 500: "#6172f3",
239
- 600: "#444ce7",
240
- 700: "#3538cd",
241
- 800: "#2d31a6",
242
- 900: "#2d3282",
243
- 950: "#1f235b"
244
- },
245
- rose: {
246
- 25: "#fff5f6",
247
- 50: "#fff1f3",
248
- 100: "#ffe4e8",
249
- 200: "#fecdd6",
250
- 300: "#fea3b4",
251
- 400: "#fd6f8e",
252
- 500: "#f63d68",
253
- 600: "#e31b54",
254
- 700: "#c01048",
255
- 800: "#a11043",
256
- 900: "#89123e",
257
- 950: "#510b24"
258
- },
259
- blueLight: {
260
- 25: "#f5fbff",
261
- 50: "#f0f9ff",
262
- 100: "#e0f2fe",
263
- 200: "#b9e6fe",
264
- 300: "#7cd4fd",
265
- 400: "#36bffa",
266
- 500: "#0ba5ec",
267
- 600: "#0086c9",
268
- 700: "#026aa2",
269
- 800: "#065986",
270
- 900: "#0b4a6f",
271
- 950: "#062c41"
272
- },
273
- cyan: {
274
- 25: "#f5feff",
275
- 50: "#ecfdff",
276
- 100: "#cff9fe",
277
- 200: "#a5f0fc",
278
- 300: "#67e3f9",
279
- 400: "#22ccee",
280
- 500: "#06aed4",
281
- 600: "#088ab2",
282
- 700: "#0e7090",
283
- 800: "#155b75",
284
- 900: "#164c63",
285
- 950: "#0d2d3a"
286
- }
287
- };
288
- var base = {
289
- white: "#ffffff",
290
- black: "#000000",
291
- transparent: "#ffffff00"
292
- };
293
- var error = {
294
- 25: "#fffbfa",
295
- 50: "#fef3f2",
296
- 100: "#fee4e2",
297
- 200: "#fecdca",
298
- 300: "#fda29b",
299
- 400: "#f97066",
300
- 500: "#f04438",
301
- 600: "#d92d20",
302
- 700: "#b42318",
303
- 800: "#912018",
304
- 900: "#7a271a",
305
- 950: "#55160c"
306
- };
307
- var warning = {
308
- 25: "#fffcf5",
309
- 50: "#fffaeb",
310
- 100: "#fef0c7",
311
- 200: "#fedf89",
312
- 300: "#fec84b",
313
- 400: "#fdb022",
314
- 500: "#f79009",
315
- 600: "#dc6803",
316
- 700: "#b54708",
317
- 800: "#93370d",
318
- 900: "#7a2e0e",
319
- 950: "#4e1d09"
320
- };
321
- var success = {
322
- 25: "#f6fef9",
323
- 50: "#ecfdf3",
324
- 100: "#dcfae6",
325
- 200: "#abefc6",
326
- 300: "#75e0a7",
327
- 400: "#47cd89",
328
- 500: "#17b26a",
329
- 600: "#079455",
330
- 700: "#067647",
331
- 800: "#085d3a",
332
- 900: "#074d31",
333
- 950: "#053321"
334
- };
335
- var info = {
336
- 25: "#f5faff",
337
- 50: "#eff8ff",
338
- 100: "#d1e9ff",
339
- 200: "#b2ddff",
340
- 300: "#84caff",
341
- 400: "#53b1fd",
342
- 500: "#2e90fa",
343
- 600: "#1570ef",
344
- 700: "#175cd3",
345
- 800: "#1849a9",
346
- 900: "#194185",
347
- 950: "#102a56"
348
- };
349
- var spacing = {
350
- none: 0,
351
- xxs: 2,
352
- xs: 4,
353
- sm: 6,
354
- md: 8,
355
- lg: 12,
356
- xl: 16,
357
- "2xl": 20,
358
- "3xl": 24,
359
- "4xl": 32,
360
- "5xl": 40,
361
- "6xl": 48,
362
- "7xl": 64,
363
- "8xl": 80,
364
- "9xl": 96,
365
- "10xl": 128,
366
- "11xl": 160
367
- };
368
- var radius = {
369
- none: 0,
370
- xxs: 2,
371
- xs: 4,
372
- sm: 6,
373
- md: 8,
374
- lg: 10,
375
- xl: 12,
376
- "2xl": 16,
377
- "3xl": 20,
378
- "4xl": 24,
379
- full: 9999
380
- };
381
- var shadows = {
382
- xs: "0px 1px 2px 0px #1018280d",
383
- sm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f",
384
- md: "0px 4px 8px -2px #1018281a, 0px 2px 4px -2px #1018280f",
385
- lg: "0px 12px 16px -4px #10182814, 0px 4px 6px -2px #10182808",
386
- xl: "0px 20px 24px -4px #10182814, 0px 8px 8px -4px #10182808",
387
- "2xl": "0px 24px 48px -12px #1018282e",
388
- "3xl": "0px 32px 64px -12px #10182824"
389
- };
390
- var focusRings = {
391
- brand: "0px 0px 0px 4px #7c4de63d",
392
- brandShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #7c4de63d",
393
- brandShadowSm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f, 0px 0px 0px 4px #7c4de63d",
394
- gray: "0px 0px 0px 4px #a0a0a624",
395
- grayShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #a0a0a624",
396
- grayShadowSm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f, 0px 0px 0px 4px #a0a0a624",
397
- error: "0px 0px 0px 4px #f044383d",
398
- errorShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #f044383d"
399
- };
400
- var fontFamily = '"Aeonik", sans-serif';
401
- var fontFamilyMono = '"Aeonik Mono", monospace';
402
- var fontSize = {
403
- xxs: 11,
404
- xs: 12,
405
- sm: 14,
406
- md: 16,
407
- lg: 18,
408
- xl: 20
409
- };
410
- var lineHeight = {
411
- xxs: "16px",
412
- xs: "18px",
413
- sm: "20px",
414
- md: "24px",
415
- lg: "28px",
416
- xl: "30px"
417
- };
418
- var fontWeight = {
419
- regular: 400,
420
- medium: 500,
421
- semibold: 600,
422
- bold: 700
423
- };
424
- var display = {
425
- "2xl": { fontSize: 72, lineHeight: "90px", letterSpacing: "-0.02em" },
426
- xl: { fontSize: 60, lineHeight: "72px", letterSpacing: "-0.02em" },
427
- lg: { fontSize: 48, lineHeight: "60px", letterSpacing: "-0.02em" },
428
- md: { fontSize: 36, lineHeight: "44px", letterSpacing: "-0.02em" },
429
- sm: { fontSize: 30, lineHeight: "38px" },
430
- xs: { fontSize: 24, lineHeight: "32px" }
431
- };
432
- var container = {
433
- maxWidthDesktop: 1280,
434
- paddingDesktop: 32,
435
- paddingMobile: 16
436
- };
437
- var widths = {
438
- xxs: 320,
439
- xs: 384,
440
- sm: 480,
441
- md: 560,
442
- lg: 640,
443
- xl: 768,
444
- "2xl": 1024,
445
- "3xl": 1280,
446
- "4xl": 1440,
447
- "5xl": 1600,
448
- "6xl": 1920
449
- };
450
- var text = {
451
- primary: gray[900],
452
- secondary: gray[700],
453
- secondaryHover: gray[800],
454
- tertiary: gray[600],
455
- tertiaryHover: gray[700],
456
- quaternary: gray[500],
457
- disabled: gray[500],
458
- placeholder: gray[500],
459
- placeholderSubtle: gray[300],
460
- white: base.white,
461
- brandPrimary: violet[900],
462
- brandSecondary: violet[700],
463
- brandTertiary: violet[600],
464
- brandTertiaryAlt: violet[600],
465
- primaryOnBrand: base.white,
466
- secondaryOnBrand: violet[200],
467
- tertiaryOnBrand: violet[200],
468
- quaternaryOnBrand: violet[300],
469
- errorPrimary: error[600],
470
- warningPrimary: warning[600],
471
- successPrimary: success[600]
472
- };
473
- var bg = {
474
- primary: gray[50],
475
- primaryAlt: gray[50],
476
- primaryHover: gray[100],
477
- primarySolid: gray[950],
478
- secondary: base.white,
479
- secondaryAlt: base.white,
480
- secondarySubtle: gray[25],
481
- secondaryHover: gray[50],
482
- secondarySolid: gray[600],
483
- tertiary: gray[100],
484
- quaternary: gray[200],
485
- active: gray[200],
486
- disabled: gray[100],
487
- disabledSubtle: gray[50],
488
- overlay: gray[950],
489
- brandPrimary: violet[50],
490
- brandPrimaryAlt: violet[50],
491
- brandSecondary: violet[100],
492
- brandSolid: violet[600],
493
- brandSolidHover: violet[700],
494
- brandSection: violet[800],
495
- brandSectionSubtle: violet[700],
496
- errorPrimary: error[50],
497
- errorSecondary: error[100],
498
- errorSolid: error[600],
499
- warningPrimary: warning[50],
500
- warningSecondary: warning[100],
501
- warningSolid: warning[600],
502
- successPrimary: success[50],
503
- successSecondary: success[100],
504
- successSolid: success[600]
505
- };
506
- var fg = {
507
- primary: gray[900],
508
- secondary: gray[700],
509
- secondaryHover: gray[800],
510
- tertiary: gray[600],
511
- tertiaryHover: gray[700],
512
- quaternary: gray[500],
513
- quaternaryHover: gray[600],
514
- quinary: gray[400],
515
- quinaryHover: gray[500],
516
- senary: gray[300],
517
- white: base.white,
518
- disabled: gray[400],
519
- disabledSubtle: gray[300],
520
- brandPrimary: violet[600],
521
- brandPrimaryAlt: violet[600],
522
- brandSecondary: violet[500],
523
- errorPrimary: error[600],
524
- errorSecondary: error[500],
525
- warningPrimary: warning[600],
526
- warningSecondary: warning[500],
527
- successPrimary: success[600],
528
- successSecondary: success[500]
529
- };
530
- var border = {
531
- primary: gray[300],
532
- secondary: gray[200],
533
- tertiary: gray[100],
534
- disabled: gray[300],
535
- disabledSubtle: gray[200],
536
- brand: violet[300],
537
- brandSolid: violet[600],
538
- brandSolidAlt: violet[600],
539
- error: error[300],
540
- errorSolid: error[600]
541
- };
542
- var buttonColors = {
543
- primary: {
544
- bg: violet[600],
545
- bgHover: violet[700],
546
- fg: base.white,
547
- fgHover: base.white,
548
- border: violet[600],
549
- borderHover: violet[700]
550
- },
551
- secondary: {
552
- bg: gray[900],
553
- bgHover: gray[950],
554
- fg: base.white,
555
- fgHover: base.white,
556
- border: gray[900],
557
- borderHover: gray[950]
558
- },
559
- secondaryColor: {
560
- bg: base.white,
561
- bgHover: violet[50],
562
- fg: violet[700],
563
- fgHover: violet[800],
564
- border: violet[300],
565
- borderHover: violet[300]
566
- },
567
- tertiary: {
568
- fg: gray[600],
569
- fgHover: gray[700],
570
- bgHover: gray[50]
571
- },
572
- tertiaryColor: {
573
- fg: violet[700],
574
- fgHover: violet[800],
575
- bgHover: violet[50]
576
- },
577
- primaryError: {
578
- bg: error[600],
579
- bgHover: error[700],
580
- fg: base.white,
581
- fgHover: base.white,
582
- border: error[600],
583
- borderHover: error[700]
584
- },
585
- secondaryError: {
586
- bg: base.white,
587
- bgHover: error[50],
588
- fg: error[700],
589
- fgHover: error[800],
590
- border: error[300],
591
- borderHover: error[300]
592
- },
593
- tertiaryError: {
594
- fg: error[700],
595
- fgHover: error[800],
596
- bgHover: error[50]
597
- }
598
- };
599
- var avatarColors = {
600
- bg: gray[100],
601
- contrastBorder: "#00000014",
602
- profilePhotoBorder: base.white,
603
- focusBorder: "#a0a0a624"
604
- };
605
- var breadcrumbColors = {
606
- fg: gray[600],
607
- fgHover: gray[700],
608
- bgHover: gray[50],
609
- brandBgHover: violet[50],
610
- brandFgHover: violet[700],
611
- iconFg: gray[500],
612
- iconFgHover: gray[700],
613
- brandIconFgHover: violet[700]
614
- };
615
- var iconColors = {
616
- fgBrand: violet[600],
617
- fgBrandOnBrand: violet[200],
618
- featuredModernBorder: gray[200],
619
- featuredLightFgBrand: violet[600],
620
- featuredLightFgGray: gray[500],
621
- featuredLightFgError: error[600],
622
- featuredLightFgWarning: warning[600],
623
- featuredLightFgSuccess: success[600],
624
- featuredDarkFgBrand: base.white,
625
- featuredDarkFgGray: base.white,
626
- featuredDarkFgError: base.white,
627
- featuredDarkFgWarning: base.white,
628
- featuredDarkFgSuccess: base.white
629
- };
630
- var navColors = {
631
- itemIconFg: gray[500],
632
- itemIconFgActive: gray[700],
633
- itemButtonIconFg: gray[500],
634
- itemButtonIconFgActive: gray[700]
635
- };
636
- var sliderColors = {
637
- handleBorder: violet[600],
638
- handleBg: base.white
639
- };
640
- var toggleColors = {
641
- buttonFgDisabled: gray[50]
642
- };
643
- var chartColors = {
644
- axisFg: gray[100],
645
- gridlineFg: gray[100],
646
- labelFg: gray[600],
647
- labelFgEmphasis: gray[700],
648
- bg: base.white,
649
- bgAlt: gray[50],
650
- tooltipBg: gray[950],
651
- tooltipFg: base.white,
652
- crosshairFg: gray[500],
653
- legendFg: text.tertiary,
654
- series: [
655
- { fg: misc.purple[500], fgHover: misc.purple[600], bg: misc.purple[100], bgHover: misc.purple[200] },
656
- { fg: misc.orangeDark[400], fgHover: misc.orangeDark[500], bg: misc.orangeDark[100], bgHover: misc.orangeDark[200] },
657
- { fg: misc.teal[300], fgHover: misc.teal[400], bg: misc.teal[50], bgHover: misc.teal[100] },
658
- { fg: warning[400], fgHover: warning[500], bg: warning[100], bgHover: warning[200] },
659
- { fg: misc.rose[400], fgHover: misc.rose[500], bg: misc.rose[100], bgHover: misc.rose[200] },
660
- { fg: misc.blueLight[400], fgHover: misc.blueLight[500], bg: misc.blueLight[100], bgHover: misc.blueLight[200] },
661
- { fg: misc.orange[300], fgHover: misc.orange[400], bg: misc.orange[100], bgHover: misc.orange[200] },
662
- { fg: misc.cyan[600], fgHover: misc.cyan[700], bg: misc.cyan[100], bgHover: misc.cyan[200] },
663
- { fg: misc.green[500], fgHover: misc.green[600], bg: misc.green[100], bgHover: misc.green[200] },
664
- { fg: misc.pink[400], fgHover: misc.pink[500], bg: misc.pink[100], bgHover: misc.pink[200] },
665
- { fg: misc.fuchsia[400], fgHover: misc.fuchsia[500], bg: misc.fuchsia[100], bgHover: misc.fuchsia[200] },
666
- { fg: misc.teal[600], fgHover: misc.teal[700], bg: misc.teal[100], bgHover: misc.teal[200] }
667
- ]
668
- };
669
- var alpha = {
670
- white: {
671
- 10: "#ffffff1a",
672
- 20: "#ffffff33",
673
- 30: "#ffffff4d",
674
- 40: "#ffffff66",
675
- 50: "#ffffff80",
676
- 60: "#ffffff99",
677
- 70: "#ffffffb3",
678
- 80: "#ffffffcc",
679
- 90: "#ffffffe6",
680
- 100: "#ffffff"
681
- },
682
- black: {
683
- 10: "#0000001a",
684
- 20: "#00000033",
685
- 30: "#0000004d",
686
- 40: "#00000066",
687
- 50: "#00000080",
688
- 60: "#00000099",
689
- 70: "#000000b3",
690
- 80: "#000000cc",
691
- 90: "#000000e6",
692
- 100: "#000000"
693
- }
694
- };
695
-
696
72
  // src/theme/palette.ts
697
- function buildPalette(tokens) {
698
- var _a;
699
- const { base: base2, error: error2, warning: warning2, success: success2, info: info3, text: text6, bg: bg6, fg: fg6, border: border6 } = tokens;
73
+ function buildPalette(tokens2, mode = "light") {
74
+ const { base: base2, error: error2, warning: warning2, success: success2, info: info2, text: text4, bg: bg4, fg: fg4, border: border4 } = tokens2;
700
75
  return {
76
+ mode,
701
77
  primary: {
702
- main: tokens.bg.brandSolid,
703
- light: tokens.fg.brandPrimary,
704
- dark: tokens.bg.brandSolidHover,
705
- contrastText: tokens.base.white
78
+ main: tokens2.bg.brandSolid,
79
+ light: tokens2.fg.brandPrimary,
80
+ dark: tokens2.bg.brandSolidHover,
81
+ contrastText: tokens2.base.white
706
82
  },
707
83
  secondary: {
708
- main: tokens.bg.secondarySolid,
709
- light: tokens.fg.secondary,
710
- dark: tokens.text.secondaryHover,
711
- contrastText: tokens.base.white
84
+ main: tokens2.bg.secondarySolid,
85
+ light: tokens2.fg.secondary,
86
+ dark: tokens2.text.secondaryHover,
87
+ contrastText: tokens2.base.white
712
88
  },
713
89
  error: {
714
- main: tokens.error[600],
715
- light: tokens.error[300],
716
- dark: tokens.error[700],
717
- contrastText: tokens.base.white
90
+ main: tokens2.error[600],
91
+ light: tokens2.error[300],
92
+ dark: tokens2.error[700],
93
+ contrastText: tokens2.base.white
718
94
  },
719
95
  warning: {
720
- main: tokens.warning[600],
721
- light: tokens.warning[300],
722
- dark: tokens.warning[700],
723
- contrastText: tokens.base.white
96
+ main: tokens2.warning[600],
97
+ light: tokens2.warning[300],
98
+ dark: tokens2.warning[700],
99
+ contrastText: tokens2.base.white
724
100
  },
725
101
  success: {
726
- main: tokens.success[600],
727
- light: tokens.success[300],
728
- dark: tokens.success[700],
729
- contrastText: tokens.base.white
102
+ main: tokens2.success[600],
103
+ light: tokens2.success[300],
104
+ dark: tokens2.success[700],
105
+ contrastText: tokens2.base.white
730
106
  },
731
107
  info: {
732
- main: tokens.info[600],
733
- light: tokens.info[300],
734
- dark: tokens.info[700],
735
- contrastText: tokens.base.white
108
+ main: tokens2.info[600],
109
+ light: tokens2.info[300],
110
+ dark: tokens2.info[700],
111
+ contrastText: tokens2.base.white
736
112
  },
737
113
  background: {
738
- default: bg6.primary,
739
- paper: bg6.secondary
114
+ default: bg4.primary,
115
+ paper: bg4.secondary
740
116
  },
741
- text: {
742
- primary: text6.primary,
743
- secondary: text6.secondary,
744
- disabled: text6.disabled,
745
- placeholder: text6.placeholder
746
- },
747
- divider: border6.secondary,
117
+ // Spread the full forest text scale so every key gets a CSS var; MUI's
118
+ // own components still read primary/secondary/disabled from here.
119
+ text: { ...text4 },
120
+ divider: border4.secondary,
748
121
  action: {
749
- active: fg6.tertiary,
750
- hover: bg6.primaryHover,
751
- selected: bg6.brandPrimary,
752
- disabled: fg6.disabled,
753
- disabledBackground: bg6.disabled
754
- },
755
- chart: (_a = tokens.chartColors) != null ? _a : chartColors,
756
- ...tokens.highlight && {
122
+ active: fg4.tertiary,
123
+ hover: bg4.primaryHover,
124
+ selected: bg4.brandPrimary,
125
+ disabled: fg4.disabled,
126
+ disabledBackground: bg4.disabled
127
+ },
128
+ chart: tokens2.chartColors,
129
+ bg: tokens2.bg,
130
+ fg: tokens2.fg,
131
+ border: tokens2.border,
132
+ buttonColors: tokens2.buttonColors,
133
+ sliderColors: tokens2.sliderColors,
134
+ avatarColors: tokens2.avatarColors,
135
+ breadcrumbColors: tokens2.breadcrumbColors,
136
+ navColors: tokens2.navColors,
137
+ ...tokens2.highlight && {
757
138
  highlight: {
758
- main: tokens.highlight[600],
759
- light: tokens.highlight[300],
760
- dark: tokens.highlight[700],
761
- contrastText: tokens.base.white
139
+ main: tokens2.highlight[600],
140
+ light: tokens2.highlight[300],
141
+ dark: tokens2.highlight[700],
142
+ contrastText: tokens2.base.white
762
143
  }
763
144
  }
764
145
  };
765
146
  }
766
147
 
767
148
  // src/theme/typography.ts
768
- function buildTypography(tokens) {
149
+ function buildTypography(tokens2) {
769
150
  var _a, _b, _c, _d;
770
- const { fontFamily: fontFamily2, display: display2, fontSize: fontSize2, lineHeight: lineHeight2, fontWeight: fontWeight2, letterSpacing: letterSpacing2 } = tokens;
771
- const ls = letterSpacing2 != null ? letterSpacing2 : {};
151
+ const { fontFamily: fontFamily2, display: display2, fontSize: fontSize2, lineHeight: lineHeight2, fontWeight: fontWeight2, letterSpacing: letterSpacing3 } = tokens2;
152
+ const ls = letterSpacing3 != null ? letterSpacing3 : {};
772
153
  return {
773
154
  fontFamily: fontFamily2,
774
155
  fontWeightRegular: fontWeight2.regular,
@@ -859,8 +240,8 @@ function buildTypography(tokens) {
859
240
  }
860
241
 
861
242
  // src/theme/shadows.ts
862
- function buildShadows(tokens) {
863
- const tokenShadows = tokens.shadows;
243
+ function buildShadows(tokens2) {
244
+ const tokenShadows = tokens2.shadows;
864
245
  return [
865
246
  "none",
866
247
  // 0
@@ -916,46 +297,110 @@ function buildShadows(tokens) {
916
297
  }
917
298
 
918
299
  // src/theme/components.ts
919
- function buildComponents(tokens) {
300
+ function buildComponents(tokens2) {
920
301
  const {
921
302
  base: base2,
922
303
  error: error2,
923
304
  warning: warning2,
924
305
  success: success2,
925
- info: info3,
926
- highlight: highlight2,
927
- radius: radius6,
928
- focusRings: focusRings6,
306
+ info: info2,
307
+ highlight: highlight3,
308
+ radius: radius4,
309
+ focusRings: focusRings4,
929
310
  shadows: tokenShadows,
930
- text: text6,
931
- bg: bg6,
932
- fg: fg6,
933
- border: border6,
934
- buttonColors: buttonColors6,
935
- sliderColors: sliderColors6,
936
- avatarColors: avatarColors6,
937
- breadcrumbColors: breadcrumbColors6
938
- } = tokens;
311
+ text: text4,
312
+ bg: bg4,
313
+ fg: fg4,
314
+ border: border4,
315
+ buttonColors: buttonColors4,
316
+ sliderColors: sliderColors4,
317
+ avatarColors: avatarColors3,
318
+ breadcrumbColors: breadcrumbColors4
319
+ } = tokens2;
939
320
  const containedFill = {
940
- backgroundColor: buttonColors6.primary.bg,
941
- color: buttonColors6.primary.fg,
321
+ backgroundColor: buttonColors4.primary.bg,
322
+ color: buttonColors4.primary.fg,
942
323
  "&:hover": {
943
- backgroundColor: buttonColors6.primary.bgHover
324
+ backgroundColor: buttonColors4.primary.bgHover
944
325
  }
945
326
  };
946
327
  const outlinedFill = {
947
- borderColor: buttonColors6.secondaryColor.border,
948
- color: buttonColors6.secondaryColor.fg,
328
+ borderColor: buttonColors4.secondaryColor.border,
329
+ color: buttonColors4.secondaryColor.fg,
949
330
  "&:hover": {
950
331
  // Darken the whole outlined button on hover via brightness (< 1) — single
951
332
  // mechanism, no separate border-color change. 0.97 is a barely-there darken.
333
+ // No-tint is the spec: suppress MUI's ~4% --variant-outlinedBg hover tint
334
+ // so the ButtonGroup/IconButton outlined replicas match exactly.
335
+ backgroundColor: "transparent",
952
336
  filter: "brightness(0.97)"
953
337
  }
954
338
  };
339
+ const fabFill = {
340
+ ...containedFill,
341
+ "&:hover": {
342
+ backgroundColor: buttonColors4.primary.bgHover,
343
+ color: buttonColors4.primary.fgHover
344
+ }
345
+ };
955
346
  const textFill = {
956
- color: buttonColors6.tertiaryColor.fg,
347
+ color: buttonColors4.tertiaryColor.fg,
957
348
  "&:hover": {
958
- backgroundColor: buttonColors6.tertiaryColor.bgHover
349
+ backgroundColor: buttonColors4.tertiaryColor.bgHover
350
+ }
351
+ };
352
+ const bevelHover = {
353
+ borderTopWidth: 4,
354
+ borderBottomWidth: 1,
355
+ borderTopLeftRadius: radius4.lg,
356
+ borderTopRightRadius: radius4.lg,
357
+ borderBottomLeftRadius: radius4.md,
358
+ borderBottomRightRadius: radius4.md
359
+ };
360
+ const bevelPress = {
361
+ // Snap the press faster than the 300ms hover flip so it feels tactile.
362
+ transition: "border-width 120ms ease, border-radius 120ms ease, opacity 120ms ease",
363
+ borderTopWidth: 1,
364
+ borderTopLeftRadius: radius4.md,
365
+ borderTopRightRadius: radius4.md,
366
+ opacity: 0.75
367
+ };
368
+ const bevel3D = {
369
+ position: "relative",
370
+ overflow: "hidden",
371
+ transition: "filter 300ms ease, border-width 300ms ease, border-radius 300ms ease, opacity 300ms ease, background-color 300ms ease",
372
+ borderStyle: "solid",
373
+ borderTopWidth: 1,
374
+ borderRightWidth: 1,
375
+ borderLeftWidth: 1,
376
+ borderBottomWidth: 4,
377
+ borderBottomLeftRadius: radius4.lg,
378
+ borderBottomRightRadius: radius4.lg,
379
+ "&::before": {
380
+ content: '""',
381
+ position: "absolute",
382
+ left: 0,
383
+ top: "-150%",
384
+ width: "100%",
385
+ height: 5,
386
+ borderRadius: 4,
387
+ backgroundColor: "currentColor",
388
+ boxShadow: "0 0 24px 4px currentColor",
389
+ // 0.3 matches MuiButton's contained sweep exactly — the consts and the
390
+ // Button/Fab inline copies must not drift.
391
+ opacity: 0.3,
392
+ filter: "blur(2px)",
393
+ pointerEvents: "none",
394
+ transition: "top 500ms ease-in-out"
395
+ },
396
+ "&:hover": bevelHover,
397
+ "&:hover::before": {
398
+ top: "150%"
399
+ },
400
+ "&:active": bevelPress,
401
+ "@media (prefers-reduced-motion: reduce)": {
402
+ transition: "none",
403
+ "&::before": { display: "none" }
959
404
  }
960
405
  };
961
406
  return {
@@ -978,15 +423,15 @@ function buildComponents(tokens) {
978
423
  // mirrors the forest-web Button. Colors are untouched — the bevel and
979
424
  // sweep use translucent `currentColor` so they adapt per variant.
980
425
  // Applied to `contained` + `outlined`; `text` keeps its flat styling.
981
- root: ({ ownerState }) => {
426
+ root: ({ ownerState, theme }) => {
982
427
  const interactive = ownerState.variant !== "text";
983
428
  const isContained = ownerState.variant === "contained";
984
429
  const isOutlined = ownerState.variant === "outlined";
985
430
  const sweepColor = isOutlined ? "color-mix(in srgb, currentColor 45%, #fff)" : "currentColor";
986
- const colorScales = { error: error2, warning: warning2, success: success2, info: info3 };
431
+ const colorScales = { error: error2, warning: warning2, success: success2, info: info2 };
987
432
  const faceScale = ownerState.color ? colorScales[ownerState.color] : void 0;
988
433
  return {
989
- borderRadius: radius6.md,
434
+ borderRadius: radius4.md,
990
435
  fontWeight: 600,
991
436
  boxShadow: tokenShadows.xs,
992
437
  height: 32,
@@ -994,7 +439,7 @@ function buildComponents(tokens) {
994
439
  fontSize: 14,
995
440
  lineHeight: "20px",
996
441
  "&:focus-visible": {
997
- boxShadow: focusRings6.brandShadowXs
442
+ boxShadow: focusRings4.brandShadowXs
998
443
  },
999
444
  ...interactive && {
1000
445
  position: "relative",
@@ -1008,15 +453,15 @@ function buildComponents(tokens) {
1008
453
  // Round the thick-bevel side more than the rest so the inner
1009
454
  // surface isn't squared off. Follows the bevel: bottom at rest,
1010
455
  // top on hover.
1011
- borderBottomLeftRadius: radius6.lg,
1012
- borderBottomRightRadius: radius6.lg,
456
+ borderBottomLeftRadius: radius4.lg,
457
+ borderBottomRightRadius: radius4.lg,
1013
458
  // Contained buttons have no border of their own — give them a
1014
459
  // translucent bevel. Outlined keeps its own border color.
1015
460
  ...isContained && {
1016
461
  // Greyscale bevel — visible on both the charcoal face and a
1017
462
  // light page (white washed out on hover). Semantic colors keep
1018
463
  // their in-hue bevel.
1019
- borderColor: faceScale ? faceScale[700] : gray[600]
464
+ borderColor: faceScale ? faceScale[700] : fg4.tertiary
1020
465
  },
1021
466
  "&::before": {
1022
467
  content: '""',
@@ -1036,24 +481,38 @@ function buildComponents(tokens) {
1036
481
  "&:hover": {
1037
482
  borderTopWidth: 4,
1038
483
  borderBottomWidth: 1,
1039
- borderTopLeftRadius: radius6.lg,
1040
- borderTopRightRadius: radius6.lg,
1041
- borderBottomLeftRadius: radius6.md,
1042
- borderBottomRightRadius: radius6.md,
484
+ borderTopLeftRadius: radius4.lg,
485
+ borderTopRightRadius: radius4.lg,
486
+ borderBottomLeftRadius: radius4.md,
487
+ borderBottomRightRadius: radius4.md,
1043
488
  // One step lighter than the default bevel (60% → 70%) so it
1044
489
  // stays visible against the brightened face on hover.
1045
490
  ...isContained && {
491
+ // Light mode: the face is dark (charcoal/vivid), so a
492
+ // brightness lift reads as a hover. Dark mode: the face is
493
+ // already light — brightness(1.5) blows it out to near-white
494
+ // and swallows the top bevel, so drop the lift and let the
495
+ // bgHover darken provide the feedback instead.
1046
496
  filter: "brightness(1.5)",
1047
- // Charcoal (non-semantic) keeps its default gray[600] border —
1048
- // the brightness lift lightens it on hover. Semantic colors
1049
- // darken to [900] so their bevel survives the brightness.
1050
- ...faceScale && { borderColor: faceScale[900] }
497
+ ...faceScale && { borderColor: faceScale[900] },
498
+ ...theme.applyStyles("dark", {
499
+ filter: "brightness(1)"
500
+ })
1051
501
  }
1052
502
  },
1053
503
  "&:hover::before": {
1054
504
  top: "150%"
1055
505
  },
506
+ // Press: collapse the raised top bevel back to a thin edge so the
507
+ // surface visibly sinks — the button reads as pushed deeper into
508
+ // the page. Animated by the shared border-width transition above.
1056
509
  "&:active": {
510
+ // Snap the press faster than the 300ms hover flip so it feels
511
+ // like a tactile click rather than a slow settle.
512
+ transition: "border-width 120ms ease, border-radius 120ms ease, opacity 120ms ease",
513
+ borderTopWidth: 1,
514
+ borderTopLeftRadius: radius4.md,
515
+ borderTopRightRadius: radius4.md,
1057
516
  opacity: 0.75
1058
517
  },
1059
518
  "@media (prefers-reduced-motion: reduce)": {
@@ -1076,51 +535,214 @@ function buildComponents(tokens) {
1076
535
  }
1077
536
  },
1078
537
  // ─── Button Group ───────────────────────────────────────────────
538
+ // Variant alignment: each group variant renders its children EXACTLY like
539
+ // the standalone <Button> of the same variant (contained = charcoal fill /
540
+ // light-grey in dark; outlined = transparent + grey border; text = quiet).
541
+ // Forest <Button> children force variant="contained", so the outlined and
542
+ // text groups must repaint the face at group level; contained needs no
543
+ // repaint. Two group classes out-specify MuiButton's single variant class,
544
+ // and the `:not(.Mui-disabled)` guard keeps MUI's disabled styling winning.
1079
545
  MuiButtonGroup: {
1080
546
  defaultProps: {
1081
547
  disableElevation: true
1082
548
  },
1083
549
  styleOverrides: {
1084
550
  root: {
1085
- borderRadius: radius6.md
1086
- },
1087
- grouped: {
1088
- "&:not(:last-of-type)": {
1089
- borderRight: `1px solid ${buttonColors6.primary.borderHover}`
551
+ borderRadius: radius4.md,
552
+ // contained group → children already render as contained Buttons; only
553
+ // re-pin the bevel border color, which MUI's own grouped-contained
554
+ // default (palette grey) otherwise overrides away from the standalone
555
+ // Button's greyscale bevel.
556
+ "&.MuiButtonGroup-contained .MuiButtonGroup-grouped:not(.Mui-disabled)": {
557
+ borderColor: fg4.tertiary
558
+ },
559
+ // outlined group → the outlined-Button look (outlinedFill), including
560
+ // its lightened hover sweep (the forced-contained children would
561
+ // otherwise sweep at full currentColor strength).
562
+ "&.MuiButtonGroup-outlined .MuiButtonGroup-grouped:not(.Mui-disabled)": {
563
+ backgroundColor: "transparent",
564
+ color: buttonColors4.secondaryColor.fg,
565
+ borderColor: buttonColors4.secondaryColor.border,
566
+ "&::before": {
567
+ backgroundColor: "color-mix(in srgb, currentColor 45%, #fff)",
568
+ boxShadow: "0 0 24px 4px color-mix(in srgb, currentColor 45%, #fff)",
569
+ opacity: 0.2,
570
+ filter: "blur(3px)"
571
+ },
572
+ "&:hover": {
573
+ backgroundColor: "transparent",
574
+ filter: "brightness(0.97)"
575
+ }
576
+ },
577
+ // text group → the quiet text-Button look: flatten the inherited
578
+ // bevel/sweep (incl. the contained hover brightness + radius flips),
579
+ // kill the :active press-dim, keep the brand focus ring reachable.
580
+ "&.MuiButtonGroup-text .MuiButtonGroup-grouped:not(.Mui-disabled)": {
581
+ backgroundColor: "transparent",
582
+ color: buttonColors4.tertiaryColor.fg,
583
+ borderWidth: 0,
584
+ borderRadius: radius4.md,
585
+ boxShadow: "none",
586
+ "&::before": { display: "none" },
587
+ "&:active": { opacity: 1 },
588
+ "&:hover": {
589
+ backgroundColor: buttonColors4.tertiaryColor.bgHover,
590
+ filter: "none"
591
+ },
592
+ "&:focus-visible": {
593
+ boxShadow: focusRings4.brandShadowXs
594
+ }
595
+ },
596
+ // Text-group divider, painted per orientation (child borders are 0).
597
+ "&.MuiButtonGroup-text.MuiButtonGroup-horizontal .MuiButtonGroup-grouped:not(.Mui-disabled):not(:last-of-type)": {
598
+ borderRight: `1px solid ${border4.secondary}`
599
+ },
600
+ "&.MuiButtonGroup-text.MuiButtonGroup-vertical .MuiButtonGroup-grouped:not(.Mui-disabled):not(:last-of-type)": {
601
+ borderBottom: `1px solid ${border4.secondary}`
1090
602
  }
1091
603
  }
604
+ // No `grouped` divider override: contained/outlined separation comes
605
+ // from the children's own (re-pinned) borders, same as standalone
606
+ // Buttons sitting side by side; the text group paints its own divider.
1092
607
  }
1093
608
  },
1094
609
  // ─── IconButton ─────────────────────────────────────────────────
610
+ // Default (text) icon buttons stay bare. The forest IconButton wrapper can
611
+ // opt into `variant="contained" | "outlined"`, which adds the ForestIconButton
612
+ // class(es) — those get the same faux-3D bevel + press as <Button>.
1095
613
  MuiIconButton: {
1096
614
  styleOverrides: {
1097
- root: {
1098
- borderRadius: radius6.md,
615
+ root: ({ theme }) => ({
616
+ borderRadius: radius4.md,
1099
617
  padding: 6,
1100
618
  "& .MuiSvgIcon-root": {
1101
619
  fontSize: 20
620
+ },
621
+ "&.ForestIconButton": {
622
+ ...bevel3D,
623
+ boxShadow: tokenShadows.xs,
624
+ "&:focus-visible": {
625
+ boxShadow: focusRings4.brandShadowXs
626
+ }
627
+ },
628
+ "&.ForestIconButton-contained": {
629
+ backgroundColor: buttonColors4.primary.bg,
630
+ color: buttonColors4.primary.fg,
631
+ borderColor: fg4.tertiary,
632
+ "&:hover": {
633
+ backgroundColor: buttonColors4.primary.bgHover,
634
+ // Light mode: dark face, brightness lift reads as hover. Dark
635
+ // mode: the face is already light — a lift blows out the top
636
+ // bevel, so drop it and let bgHover provide the feedback.
637
+ filter: "brightness(1.5)",
638
+ ...theme.applyStyles("dark", {
639
+ filter: "brightness(1)"
640
+ })
641
+ }
642
+ },
643
+ "&.ForestIconButton-outlined": {
644
+ backgroundColor: "transparent",
645
+ color: buttonColors4.secondaryColor.fg,
646
+ borderColor: buttonColors4.secondaryColor.border,
647
+ // Same lightened sweep as the outlined Button — full currentColor
648
+ // reads too dark on the light outlined face.
649
+ "&::before": {
650
+ backgroundColor: "color-mix(in srgb, currentColor 45%, #fff)",
651
+ boxShadow: "0 0 24px 4px color-mix(in srgb, currentColor 45%, #fff)",
652
+ opacity: 0.2,
653
+ filter: "blur(3px)"
654
+ },
655
+ "&:hover": {
656
+ backgroundColor: "transparent",
657
+ filter: "brightness(0.97)"
658
+ }
659
+ },
660
+ // Disabled parity with the Button variants: MUI IconButton's own
661
+ // .Mui-disabled (transparent bg + action.disabled icon) ties with the
662
+ // variant faces at (0,2,0) and loses on insertion order — pin the
663
+ // disabled treatment one class higher.
664
+ "&.ForestIconButton-contained.Mui-disabled": {
665
+ backgroundColor: (theme.vars || theme).palette.action.disabledBackground,
666
+ color: (theme.vars || theme).palette.action.disabled
667
+ },
668
+ "&.ForestIconButton-outlined.Mui-disabled": {
669
+ color: (theme.vars || theme).palette.action.disabled,
670
+ borderColor: border4.disabled
1102
671
  }
1103
- }
672
+ })
1104
673
  }
1105
674
  },
1106
675
  // ─── FAB ────────────────────────────────────────────────────────
676
+ // A Fab is a round contained Button: same faux-3D bevel, light sweep,
677
+ // brightness lift, and press. The border radii are left untouched so the
678
+ // circular / extended silhouettes survive the bevel flip (no radius swap
679
+ // like Button/IconButton do on their rounded corners).
1107
680
  MuiFab: {
1108
681
  styleOverrides: {
1109
- root: {
1110
- boxShadow: tokenShadows.md,
682
+ root: ({ theme, ownerState }) => ({
683
+ // `default` has no dedicated slot class, so fold it into root —
684
+ // it renders the same contained fill as primary/secondary.
685
+ ...(!ownerState.color || ownerState.color === "default") && fabFill,
686
+ position: "relative",
687
+ overflow: "hidden",
688
+ boxShadow: tokenShadows.xs,
689
+ transition: "filter 300ms ease, border-width 300ms ease, opacity 300ms ease, background-color 300ms ease",
690
+ borderStyle: "solid",
691
+ borderColor: fg4.tertiary,
692
+ borderTopWidth: 1,
693
+ borderRightWidth: 1,
694
+ borderLeftWidth: 1,
695
+ borderBottomWidth: 4,
696
+ "&::before": {
697
+ content: '""',
698
+ position: "absolute",
699
+ left: 0,
700
+ top: "-150%",
701
+ width: "100%",
702
+ height: 5,
703
+ borderRadius: 4,
704
+ backgroundColor: "currentColor",
705
+ boxShadow: "0 0 24px 4px currentColor",
706
+ opacity: 0.3,
707
+ filter: "blur(2px)",
708
+ pointerEvents: "none",
709
+ transition: "top 500ms ease-in-out"
710
+ },
1111
711
  "&:hover": {
1112
- boxShadow: tokenShadows.lg
712
+ boxShadow: tokenShadows.xs,
713
+ borderTopWidth: 4,
714
+ borderBottomWidth: 1,
715
+ // Light mode: dark face, brightness lift reads as hover. Dark
716
+ // mode: the face is already light — a lift blows out the top
717
+ // bevel, so drop it and let bgHover provide the feedback.
718
+ filter: "brightness(1.5)",
719
+ ...theme.applyStyles("dark", {
720
+ filter: "brightness(1)"
721
+ })
722
+ },
723
+ "&:hover::before": {
724
+ top: "150%"
725
+ },
726
+ "&:active": {
727
+ transition: "border-width 120ms ease, opacity 120ms ease",
728
+ boxShadow: tokenShadows.xs,
729
+ borderTopWidth: 1,
730
+ opacity: 0.75
1113
731
  },
1114
732
  "&:focus-visible": {
1115
- boxShadow: focusRings6.brandShadowSm
1116
- }
1117
- },
1118
- primary: {
1119
- backgroundColor: buttonColors6.primary.bg,
1120
- "&:hover": {
1121
- backgroundColor: buttonColors6.primary.bgHover
733
+ boxShadow: focusRings4.brandShadowSm
734
+ },
735
+ "@media (prefers-reduced-motion: reduce)": {
736
+ transition: "none",
737
+ "&::before": { display: "none" }
1122
738
  }
1123
- }
739
+ }),
740
+ // Greyscale parity with Button: primary and secondary both render the
741
+ // contained charcoal fill. MUI defaults the icon color to
742
+ // contrastText (always white); in dark the Fab face is light, so pin
743
+ // the mode-aware fg (dark icon).
744
+ primary: fabFill,
745
+ secondary: fabFill
1124
746
  }
1125
747
  },
1126
748
  // ─── TextField / Input ──────────────────────────────────────────
@@ -1142,8 +764,8 @@ function buildComponents(tokens) {
1142
764
  styleOverrides: {
1143
765
  input: {
1144
766
  "&::placeholder": {
1145
- color: text6.placeholder,
1146
- WebkitTextFillColor: text6.placeholder,
767
+ color: text4.placeholder,
768
+ WebkitTextFillColor: text4.placeholder,
1147
769
  fontWeight: 400,
1148
770
  opacity: 1
1149
771
  }
@@ -1153,33 +775,33 @@ function buildComponents(tokens) {
1153
775
  MuiOutlinedInput: {
1154
776
  styleOverrides: {
1155
777
  root: {
1156
- borderRadius: radius6.md,
778
+ borderRadius: radius4.md,
1157
779
  boxShadow: tokenShadows.xs,
1158
780
  "&&:hover:not(.Mui-focused):not(.Mui-disabled) .MuiOutlinedInput-notchedOutline": {
1159
- borderColor: border6.brand
781
+ borderColor: border4.brand
1160
782
  },
1161
783
  "&&.Mui-focused .MuiOutlinedInput-notchedOutline": {
1162
- borderColor: border6.brandSolid,
784
+ borderColor: border4.brandSolid,
1163
785
  borderWidth: 1,
1164
786
  boxShadow: "none"
1165
787
  },
1166
788
  "&&.Mui-error:not(.Mui-focused) .MuiOutlinedInput-notchedOutline": {
1167
- borderColor: border6.error
789
+ borderColor: border4.error
1168
790
  },
1169
791
  "&&.Mui-error.Mui-focused .MuiOutlinedInput-notchedOutline": {
1170
- borderColor: border6.errorSolid,
792
+ borderColor: border4.errorSolid,
1171
793
  boxShadow: "none"
1172
794
  },
1173
795
  "& .MuiInputAdornment-root .MuiIconButton-root": {
1174
- color: fg6.quaternary,
796
+ color: fg4.quaternary,
1175
797
  "&:hover": {
1176
- backgroundColor: bg6.primaryHover,
1177
- color: fg6.brandPrimary
798
+ backgroundColor: bg4.primaryHover,
799
+ color: fg4.brandPrimary
1178
800
  }
1179
801
  }
1180
802
  },
1181
803
  notchedOutline: {
1182
- borderColor: border6.primary
804
+ borderColor: border4.primary
1183
805
  },
1184
806
  input: {
1185
807
  padding: "6px 12px",
@@ -1191,12 +813,12 @@ function buildComponents(tokens) {
1191
813
  MuiFormLabel: {
1192
814
  styleOverrides: {
1193
815
  root: {
1194
- color: text6.placeholder,
816
+ color: text4.placeholder,
1195
817
  "&.Mui-focused": {
1196
- color: text6.placeholder
818
+ color: text4.placeholder
1197
819
  },
1198
820
  "&.Mui-error": {
1199
- color: text6.errorPrimary
821
+ color: text4.errorPrimary
1200
822
  }
1201
823
  }
1202
824
  }
@@ -1206,12 +828,12 @@ function buildComponents(tokens) {
1206
828
  root: {
1207
829
  fontSize: 14,
1208
830
  fontWeight: 500,
1209
- color: text6.placeholder,
831
+ color: text4.placeholder,
1210
832
  "&.Mui-focused": {
1211
- color: text6.placeholder
833
+ color: text4.placeholder
1212
834
  },
1213
835
  "&.Mui-error": {
1214
- color: text6.errorPrimary
836
+ color: text4.errorPrimary
1215
837
  }
1216
838
  },
1217
839
  outlined: {
@@ -1230,7 +852,7 @@ function buildComponents(tokens) {
1230
852
  marginTop: 6,
1231
853
  marginLeft: 0,
1232
854
  "&.Mui-error": {
1233
- color: text6.errorPrimary
855
+ color: text4.errorPrimary
1234
856
  }
1235
857
  }
1236
858
  }
@@ -1260,43 +882,45 @@ function buildComponents(tokens) {
1260
882
  }
1261
883
  },
1262
884
  icon: {
1263
- color: text6.placeholder,
885
+ color: text4.placeholder,
1264
886
  right: 8
1265
887
  }
1266
888
  }
1267
889
  },
1268
890
  MuiMenuItem: {
1269
891
  styleOverrides: {
1270
- root: {
1271
- borderRadius: radius6.md,
892
+ root: ({ theme }) => ({
893
+ borderRadius: radius4.md,
1272
894
  padding: "6px 8px",
1273
895
  gap: 4,
1274
896
  "&:hover": {
1275
- backgroundColor: bg6.primaryHover
897
+ backgroundColor: bg4.primaryHover,
898
+ ...theme.applyStyles("dark", { backgroundColor: bg4.active })
1276
899
  },
900
+ // Selected: keep the label color, mark it with weight + a neutral
901
+ // (non-violet) background. bg.active adapts per scheme.
1277
902
  "&.Mui-selected": {
1278
- backgroundColor: info3[50],
1279
- color: info3[700],
1280
- // ListItemText primary hardcodes its own color (text.secondary),
1281
- // which beats the inherited MenuItem color re-point it here so
1282
- // selected labels actually take the info color (e.g. MultiSelect).
903
+ backgroundColor: bg4.active,
904
+ fontWeight: 600,
905
+ // ListItemText primary hardcodes its own color/weight — re-point
906
+ // weight here so selected labels bold (e.g. MultiSelect).
1283
907
  "& .MuiListItemText-primary": {
1284
- color: info3[700]
908
+ fontWeight: 600
1285
909
  },
1286
910
  "&:hover": {
1287
- backgroundColor: info3[100]
911
+ backgroundColor: bg4.active
1288
912
  }
1289
913
  }
1290
- }
914
+ })
1291
915
  }
1292
916
  },
1293
917
  // ─── Autocomplete ───────────────────────────────────────────────
1294
918
  MuiAutocomplete: {
1295
919
  styleOverrides: {
1296
920
  paper: {
1297
- borderRadius: radius6.md,
921
+ borderRadius: radius4.md,
1298
922
  boxShadow: tokenShadows.lg,
1299
- border: `1px solid ${border6.secondary}`,
923
+ border: `1px solid ${border4.secondary}`,
1300
924
  marginTop: 4
1301
925
  },
1302
926
  inputRoot: {
@@ -1312,15 +936,12 @@ function buildComponents(tokens) {
1312
936
  fontSize: 14,
1313
937
  lineHeight: "20px",
1314
938
  padding: "6px 12px",
1315
- "&.Mui-focused": {
1316
- backgroundColor: bg6.primaryHover
1317
- },
939
+ // Hover + selected backgrounds come from MUI's theme-aware action
940
+ // overlays (a light overlay on dark, so they stay visible — a solid
941
+ // dark-grey tier here reads as "no hover"). Selected keeps the text
942
+ // color (no violet) and is marked with weight only.
1318
943
  '&[aria-selected="true"]': {
1319
- backgroundColor: info3[50],
1320
- color: info3[700]
1321
- },
1322
- '&[aria-selected="true"].Mui-focused': {
1323
- backgroundColor: info3[100]
944
+ fontWeight: 600
1324
945
  }
1325
946
  },
1326
947
  listbox: {
@@ -1335,28 +956,28 @@ function buildComponents(tokens) {
1335
956
  },
1336
957
  styleOverrides: {
1337
958
  root: {
1338
- color: border6.primary,
1339
- borderRadius: radius6.xs,
959
+ color: border4.primary,
960
+ borderRadius: radius4.xs,
1340
961
  padding: 0,
1341
962
  width: 20,
1342
963
  height: 20,
1343
964
  "&:hover": {
1344
965
  backgroundColor: "transparent",
1345
- color: fg6.brandPrimary
966
+ color: fg4.brandPrimary
1346
967
  },
1347
968
  "&.Mui-checked": {
1348
- color: fg6.brandPrimary
969
+ color: fg4.brandPrimary
1349
970
  },
1350
971
  "&.Mui-checked:hover": {
1351
- color: buttonColors6.primary.bgHover
972
+ color: buttonColors4.primary.bgHover
1352
973
  },
1353
974
  "&.Mui-focusVisible": {
1354
975
  outline: "none",
1355
- boxShadow: focusRings6.brand,
1356
- borderRadius: radius6.xs
976
+ boxShadow: focusRings4.brand,
977
+ borderRadius: radius4.xs
1357
978
  },
1358
979
  "&.Mui-disabled": {
1359
- color: border6.primary
980
+ color: border4.primary
1360
981
  }
1361
982
  }
1362
983
  }
@@ -1368,25 +989,25 @@ function buildComponents(tokens) {
1368
989
  },
1369
990
  styleOverrides: {
1370
991
  root: {
1371
- color: border6.primary,
992
+ color: border4.primary,
1372
993
  padding: 0,
1373
994
  "&:hover": {
1374
995
  backgroundColor: "transparent",
1375
- color: fg6.brandPrimary
996
+ color: fg4.brandPrimary
1376
997
  },
1377
998
  "&.Mui-checked": {
1378
- color: fg6.brandPrimary
999
+ color: fg4.brandPrimary
1379
1000
  },
1380
1001
  "&.Mui-checked:hover": {
1381
- color: buttonColors6.primary.bgHover
1002
+ color: buttonColors4.primary.bgHover
1382
1003
  },
1383
1004
  "&.Mui-focusVisible": {
1384
1005
  outline: "none",
1385
- boxShadow: focusRings6.brand,
1386
- borderRadius: radius6.full
1006
+ boxShadow: focusRings4.brand,
1007
+ borderRadius: radius4.full
1387
1008
  },
1388
1009
  "&.Mui-disabled": {
1389
- color: border6.primary
1010
+ color: border4.primary
1390
1011
  }
1391
1012
  }
1392
1013
  }
@@ -1406,20 +1027,23 @@ function buildComponents(tokens) {
1406
1027
  padding: 2,
1407
1028
  "&.Mui-checked": {
1408
1029
  transform: "translateX(20px)",
1409
- color: fg6.white,
1030
+ // Thumb sits on the brand track. In dark the track is light-grey, so
1031
+ // a white thumb vanished — use the mode-aware on-brand fg (dark in
1032
+ // dark, white in light).
1033
+ color: buttonColors4.primary.fg,
1410
1034
  "& + .MuiSwitch-track": {
1411
- backgroundColor: fg6.brandPrimary,
1035
+ backgroundColor: fg4.brandPrimary,
1412
1036
  opacity: 1
1413
1037
  }
1414
1038
  },
1415
1039
  "&.Mui-checked:hover + .MuiSwitch-track": {
1416
- backgroundColor: buttonColors6.primary.bgHover
1040
+ backgroundColor: buttonColors4.primary.bgHover
1417
1041
  },
1418
1042
  "&.Mui-focusVisible .MuiSwitch-thumb": {
1419
- boxShadow: focusRings6.brand
1043
+ boxShadow: focusRings4.brand
1420
1044
  },
1421
1045
  "&.Mui-disabled .MuiSwitch-thumb": {
1422
- color: bg6.disabled
1046
+ color: bg4.disabled
1423
1047
  },
1424
1048
  "&.Mui-disabled + .MuiSwitch-track": {
1425
1049
  opacity: 0.5
@@ -1431,60 +1055,122 @@ function buildComponents(tokens) {
1431
1055
  boxShadow: "0px 1px 2px 0px #1018280d"
1432
1056
  },
1433
1057
  track: {
1434
- borderRadius: radius6.full,
1435
- backgroundColor: border6.secondary,
1436
- opacity: 1
1058
+ borderRadius: radius4.full,
1059
+ backgroundColor: border4.secondary,
1060
+ opacity: 1,
1061
+ // Faux-3D bottom edge (button-family cue), adapted for a pill: an
1062
+ // inset bottom shadow instead of a real border, so the sliding thumb
1063
+ // never collides with it. Reads on both light and dark tracks.
1064
+ boxShadow: "inset 0 -3px 0 0 rgba(0,0,0,0.18)"
1437
1065
  }
1438
1066
  }
1439
1067
  },
1440
1068
  // ─── Toggle Button ─────────────────────────────────────────────
1069
+ // Aligned with the contained <Button>: same face, same faux-3D bevel and
1070
+ // hover flip. Selected = the pressed Button held down — bevel collapsed,
1071
+ // dimmed, slightly inset. A toggle is a button that stays pushed in.
1441
1072
  MuiToggleButton: {
1442
1073
  styleOverrides: {
1443
- root: {
1444
- borderColor: border6.primary,
1445
- color: text6.secondary,
1074
+ root: ({ theme }) => ({
1075
+ ...bevel3D,
1076
+ ...containedFill,
1077
+ borderColor: fg4.tertiary,
1446
1078
  fontSize: 14,
1447
1079
  fontWeight: 600,
1448
1080
  lineHeight: "20px",
1449
1081
  height: 32,
1450
1082
  padding: "6px 12px",
1451
1083
  textTransform: "none",
1084
+ boxShadow: tokenShadows.xs,
1452
1085
  "&:hover": {
1453
- backgroundColor: bg6.primaryHover,
1454
- borderColor: border6.primary
1086
+ ...bevelHover,
1087
+ backgroundColor: buttonColors4.primary.bgHover,
1088
+ // Same mode split as the contained Button: the brightness lift
1089
+ // reads on the dark light-mode face but blows out the light
1090
+ // dark-mode face.
1091
+ filter: "brightness(1.5)",
1092
+ ...theme.applyStyles("dark", {
1093
+ filter: "brightness(1)"
1094
+ })
1455
1095
  },
1456
1096
  "&.Mui-selected": {
1457
- backgroundColor: bg6.brandPrimary,
1458
- color: buttonColors6.secondaryColor.fg,
1459
- borderColor: border6.brandSolid,
1097
+ backgroundColor: buttonColors4.primary.bg,
1098
+ color: buttonColors4.primary.fg,
1099
+ borderTopWidth: 1,
1100
+ borderBottomWidth: 1,
1101
+ borderTopLeftRadius: radius4.md,
1102
+ borderTopRightRadius: radius4.md,
1103
+ borderBottomLeftRadius: radius4.md,
1104
+ borderBottomRightRadius: radius4.md,
1105
+ opacity: 0.75,
1106
+ boxShadow: "inset 0 2px 4px 0 rgba(0,0,0,0.3)",
1107
+ "&::before": { display: "none" },
1108
+ // Stays pressed on hover — no bevel re-raise, no brightness lift.
1460
1109
  "&:hover": {
1461
- backgroundColor: bg6.brandSecondary
1110
+ backgroundColor: buttonColors4.primary.bg,
1111
+ filter: "none",
1112
+ borderTopWidth: 1,
1113
+ borderBottomWidth: 1,
1114
+ borderTopLeftRadius: radius4.md,
1115
+ borderTopRightRadius: radius4.md
1116
+ }
1117
+ },
1118
+ // Disabled parity with the disabled contained Button: greyed face +
1119
+ // disabled fg, bevel geometry retained. MUI's own .Mui-disabled rule
1120
+ // only swaps color and border-shorthands the bevel away — and ties
1121
+ // with .Mui-selected at (0,2,0) — so this block sits AFTER selected
1122
+ // to win both.
1123
+ "&.Mui-disabled": {
1124
+ backgroundColor: (theme.vars || theme).palette.action.disabledBackground,
1125
+ color: (theme.vars || theme).palette.action.disabled,
1126
+ borderStyle: "solid",
1127
+ borderColor: fg4.tertiary,
1128
+ borderTopWidth: 1,
1129
+ borderRightWidth: 1,
1130
+ borderLeftWidth: 1,
1131
+ borderBottomWidth: 4,
1132
+ "&::before": { display: "none" },
1133
+ // selected+disabled keeps the pressed-in cue, greyed.
1134
+ "&.Mui-selected": {
1135
+ borderBottomWidth: 1,
1136
+ boxShadow: "inset 0 2px 4px 0 rgba(0,0,0,0.15)"
1462
1137
  }
1463
1138
  },
1464
1139
  "&:focus-visible": {
1465
- boxShadow: focusRings6.brandShadowXs
1140
+ boxShadow: focusRings4.brandShadowXs
1466
1141
  }
1467
- }
1142
+ })
1468
1143
  }
1469
1144
  },
1470
1145
  MuiToggleButtonGroup: {
1471
1146
  styleOverrides: {
1472
1147
  root: {
1473
- borderRadius: radius6.md,
1148
+ borderRadius: radius4.md,
1474
1149
  overflow: "hidden"
1475
1150
  },
1151
+ // The child ToggleButton's selected/hover/active rules set per-corner
1152
+ // radii and win insertion-order ties at (0,2,0), which would round the
1153
+ // internal seam corners of a segmented control. Re-pin every state at
1154
+ // higher specificity: seams stay square, only outer corners round.
1476
1155
  grouped: {
1477
1156
  borderRadius: 0,
1157
+ "&:hover, &:active, &.Mui-selected": {
1158
+ borderRadius: 0
1159
+ },
1478
1160
  "&:not(:first-of-type)": {
1479
1161
  marginLeft: -1
1480
1162
  },
1481
1163
  "&:first-of-type": {
1482
- borderTopLeftRadius: radius6.md,
1483
- borderBottomLeftRadius: radius6.md
1164
+ "&, &:hover, &:active, &.Mui-selected": {
1165
+ borderTopLeftRadius: radius4.md,
1166
+ borderBottomLeftRadius: radius4.md
1167
+ }
1484
1168
  },
1485
1169
  "&:last-of-type": {
1486
- borderTopRightRadius: radius6.md,
1487
- borderBottomRightRadius: radius6.md
1170
+ "&, &:hover, &:active, &.Mui-selected": {
1171
+ borderTopRightRadius: radius4.md,
1172
+ borderBottomRightRadius: radius4.md
1173
+ }
1488
1174
  }
1489
1175
  }
1490
1176
  }
@@ -1493,8 +1179,8 @@ function buildComponents(tokens) {
1493
1179
  MuiDrawer: {
1494
1180
  styleOverrides: {
1495
1181
  paper: {
1496
- backgroundColor: bg6.primary,
1497
- borderRight: `1px solid ${border6.secondary}`
1182
+ backgroundColor: bg4.primary,
1183
+ borderRight: `1px solid ${border4.secondary}`
1498
1184
  }
1499
1185
  }
1500
1186
  },
@@ -1505,9 +1191,9 @@ function buildComponents(tokens) {
1505
1191
  },
1506
1192
  styleOverrides: {
1507
1193
  root: {
1508
- borderRadius: radius6.xl,
1509
- border: `1px solid ${border6.secondary}`,
1510
- backgroundColor: bg6.primary,
1194
+ borderRadius: radius4.xl,
1195
+ border: `1px solid ${border4.secondary}`,
1196
+ backgroundColor: bg4.primary,
1511
1197
  boxShadow: tokenShadows.xs,
1512
1198
  overflow: "hidden"
1513
1199
  }
@@ -1554,35 +1240,35 @@ function buildComponents(tokens) {
1554
1240
  backgroundImage: "none"
1555
1241
  },
1556
1242
  rounded: {
1557
- borderRadius: radius6.lg
1243
+ borderRadius: radius4.lg
1558
1244
  },
1559
1245
  elevation1: {
1560
1246
  boxShadow: tokenShadows.xs,
1561
- border: `1px solid ${border6.secondary}`
1247
+ border: `1px solid ${border4.secondary}`
1562
1248
  },
1563
1249
  elevation2: {
1564
1250
  boxShadow: tokenShadows.sm,
1565
- border: `1px solid ${border6.secondary}`
1251
+ border: `1px solid ${border4.secondary}`
1566
1252
  },
1567
1253
  elevation3: {
1568
1254
  boxShadow: tokenShadows.md,
1569
- border: `1px solid ${border6.secondary}`
1255
+ border: `1px solid ${border4.secondary}`
1570
1256
  },
1571
1257
  elevation4: {
1572
1258
  boxShadow: tokenShadows.lg,
1573
- border: `1px solid ${border6.secondary}`
1259
+ border: `1px solid ${border4.secondary}`
1574
1260
  },
1575
1261
  elevation8: {
1576
1262
  boxShadow: tokenShadows.xl,
1577
- border: `1px solid ${border6.secondary}`
1263
+ border: `1px solid ${border4.secondary}`
1578
1264
  },
1579
1265
  elevation16: {
1580
1266
  boxShadow: tokenShadows["2xl"],
1581
- border: `1px solid ${border6.secondary}`
1267
+ border: `1px solid ${border4.secondary}`
1582
1268
  },
1583
1269
  elevation24: {
1584
1270
  boxShadow: tokenShadows["3xl"],
1585
- border: `1px solid ${border6.secondary}`
1271
+ border: `1px solid ${border4.secondary}`
1586
1272
  }
1587
1273
  }
1588
1274
  },
@@ -1594,8 +1280,8 @@ function buildComponents(tokens) {
1594
1280
  },
1595
1281
  styleOverrides: {
1596
1282
  root: {
1597
- border: `1px solid ${border6.secondary}`,
1598
- borderRadius: radius6.lg,
1283
+ border: `1px solid ${border4.secondary}`,
1284
+ borderRadius: radius4.lg,
1599
1285
  "&:not(:last-child)": {
1600
1286
  marginBottom: 8
1601
1287
  },
@@ -1605,7 +1291,7 @@ function buildComponents(tokens) {
1605
1291
  "&.Mui-expanded": {
1606
1292
  margin: 0,
1607
1293
  marginBottom: 8,
1608
- borderRadius: radius6.lg
1294
+ borderRadius: radius4.lg
1609
1295
  }
1610
1296
  }
1611
1297
  }
@@ -1617,7 +1303,7 @@ function buildComponents(tokens) {
1617
1303
  minHeight: 56,
1618
1304
  "&.Mui-expanded": {
1619
1305
  minHeight: 56,
1620
- borderBottom: `1px solid ${border6.secondary}`
1306
+ borderBottom: `1px solid ${border4.secondary}`
1621
1307
  }
1622
1308
  },
1623
1309
  content: {
@@ -1643,8 +1329,8 @@ function buildComponents(tokens) {
1643
1329
  },
1644
1330
  styleOverrides: {
1645
1331
  root: {
1646
- borderBottom: `1px solid ${border6.secondary}`,
1647
- backgroundColor: bg6.primary
1332
+ borderBottom: `1px solid ${border4.secondary}`,
1333
+ backgroundColor: bg4.primary
1648
1334
  }
1649
1335
  }
1650
1336
  },
@@ -1670,8 +1356,10 @@ function buildComponents(tokens) {
1670
1356
  root: {
1671
1357
  minHeight: 48
1672
1358
  },
1359
+ // Primary (brand) scale via varified tokens so it adapts per scheme:
1360
+ // charcoal on light, light-grey on dark.
1673
1361
  indicator: {
1674
- backgroundColor: info3[600],
1362
+ backgroundColor: bg4.brandSolid,
1675
1363
  height: 2
1676
1364
  }
1677
1365
  }
@@ -1686,14 +1374,16 @@ function buildComponents(tokens) {
1686
1374
  fontWeight: 600,
1687
1375
  lineHeight: "20px",
1688
1376
  textTransform: "none",
1689
- color: text6.tertiary,
1690
- borderRadius: `${radius6.md}px ${radius6.md}px 0 0`,
1377
+ color: text4.tertiary,
1378
+ borderRadius: `${radius4.md}px ${radius4.md}px 0 0`,
1691
1379
  "&:hover": {
1692
- backgroundColor: bg6.primaryHover
1380
+ backgroundColor: bg4.primaryHover
1693
1381
  },
1382
+ // Selected face uses brand bg/text tokens — light brand tint + dark
1383
+ // text on light; dark-grey face + light text on dark.
1694
1384
  "&.Mui-selected": {
1695
- color: info3[700],
1696
- backgroundColor: info3[50]
1385
+ color: text4.brandPrimary,
1386
+ backgroundColor: bg4.brandPrimary
1697
1387
  }
1698
1388
  }
1699
1389
  }
@@ -1701,60 +1391,67 @@ function buildComponents(tokens) {
1701
1391
  // ─── Chip ───────────────────────────────────────────────────────
1702
1392
  MuiChip: {
1703
1393
  variants: [
1704
- ...highlight2 ? [
1394
+ ...highlight3 ? [
1705
1395
  {
1706
1396
  props: { color: "highlight" },
1707
1397
  style: {
1708
1398
  "&.MuiChip-filled": {
1709
- backgroundColor: highlight2[600],
1399
+ backgroundColor: highlight3[600],
1710
1400
  color: base2.white,
1711
- "& .MuiChip-deleteIcon": { color: highlight2[200] }
1401
+ "& .MuiChip-deleteIcon": { color: highlight3[200] }
1712
1402
  },
1713
1403
  "&.MuiChip-outlined": {
1714
- borderColor: highlight2[300],
1715
- color: highlight2[700],
1716
- "& .MuiChip-deleteIcon": { color: highlight2[400] }
1404
+ borderColor: highlight3[300],
1405
+ color: highlight3[700],
1406
+ "& .MuiChip-deleteIcon": { color: highlight3[400] }
1717
1407
  }
1718
1408
  }
1719
1409
  }
1720
1410
  ] : []
1721
1411
  ],
1722
1412
  styleOverrides: {
1413
+ // ponytail: single 20px chip size — sizeSmall/sizeMedium render identically
1723
1414
  root: {
1724
- borderRadius: radius6.md
1415
+ borderRadius: radius4.md,
1416
+ height: 20,
1417
+ fontSize: 14,
1418
+ lineHeight: "20px"
1725
1419
  },
1726
1420
  label: {
1727
- fontWeight: 500
1421
+ fontWeight: 500,
1422
+ paddingLeft: 6,
1423
+ paddingRight: 6
1728
1424
  },
1729
- sizeSmall: {
1730
- fontSize: 12,
1731
- height: 20
1425
+ icon: {
1426
+ marginLeft: 6,
1427
+ marginRight: -2
1428
+ // 4px gap to label (label pads 6)
1732
1429
  },
1733
- sizeMedium: {
1430
+ deleteIcon: {
1734
1431
  fontSize: 14,
1735
- height: 24,
1736
- "& .MuiChip-deleteIcon": { fontSize: 16 }
1432
+ marginRight: 6,
1433
+ marginLeft: -2
1737
1434
  },
1738
1435
  colorDefault: {
1739
1436
  "&.MuiChip-filled": {
1740
- backgroundColor: tokens.bg.secondaryHover,
1741
- color: tokens.fg.secondary,
1742
- "& .MuiChip-deleteIcon": { color: tokens.fg.quinary }
1437
+ backgroundColor: tokens2.bg.secondaryHover,
1438
+ color: tokens2.fg.secondary,
1439
+ "& .MuiChip-deleteIcon": { color: tokens2.fg.quinary }
1743
1440
  }
1744
1441
  },
1745
1442
  colorPrimary: {
1746
1443
  "&.MuiChip-filled": {
1747
- backgroundColor: tokens.bg.brandPrimary,
1748
- color: tokens.fg.brandPrimary,
1749
- "& .MuiChip-deleteIcon": { color: tokens.fg.brandPrimary }
1444
+ backgroundColor: tokens2.bg.brandPrimary,
1445
+ color: tokens2.fg.brandPrimary,
1446
+ "& .MuiChip-deleteIcon": { color: tokens2.fg.brandPrimary }
1750
1447
  }
1751
1448
  },
1752
1449
  colorSecondary: {
1753
1450
  "&.MuiChip-filled": {
1754
- backgroundColor: highlight2 ? highlight2[50] : tokens.bg.secondarySubtle,
1755
- color: highlight2 ? highlight2[700] : tokens.text.secondary,
1451
+ backgroundColor: highlight3 ? highlight3[50] : tokens2.bg.secondarySubtle,
1452
+ color: highlight3 ? highlight3[700] : tokens2.text.secondary,
1756
1453
  "& .MuiChip-deleteIcon": {
1757
- color: highlight2 ? highlight2[500] : tokens.fg.secondary
1454
+ color: highlight3 ? highlight3[500] : tokens2.fg.secondary
1758
1455
  }
1759
1456
  }
1760
1457
  },
@@ -1781,9 +1478,9 @@ function buildComponents(tokens) {
1781
1478
  },
1782
1479
  colorInfo: {
1783
1480
  "&.MuiChip-filled": {
1784
- backgroundColor: info3[50],
1785
- color: info3[700],
1786
- "& .MuiChip-deleteIcon": { color: info3[400] }
1481
+ backgroundColor: info2[50],
1482
+ color: info2[700],
1483
+ "& .MuiChip-deleteIcon": { color: info2[400] }
1787
1484
  }
1788
1485
  }
1789
1486
  }
@@ -1799,7 +1496,7 @@ function buildComponents(tokens) {
1799
1496
  fontSize: 14,
1800
1497
  lineHeight: "20px",
1801
1498
  fontWeight: 500,
1802
- color: text6.secondary
1499
+ color: text4.secondary
1803
1500
  }
1804
1501
  }
1805
1502
  },
@@ -1815,30 +1512,30 @@ function buildComponents(tokens) {
1815
1512
  MuiTableCell: {
1816
1513
  styleOverrides: {
1817
1514
  root: {
1818
- borderBottom: `1px solid ${border6.secondary}`,
1515
+ borderBottom: `1px solid ${border4.secondary}`,
1819
1516
  padding: "16px 24px",
1820
1517
  fontSize: 14,
1821
1518
  lineHeight: "20px",
1822
- color: fg6.tertiary
1519
+ color: fg4.tertiary
1823
1520
  },
1824
1521
  head: {
1825
- backgroundColor: bg6.secondary,
1826
- color: fg6.tertiary,
1522
+ backgroundColor: bg4.secondary,
1523
+ color: fg4.tertiary,
1827
1524
  fontWeight: 500,
1828
1525
  fontSize: 12,
1829
1526
  lineHeight: "18px"
1830
1527
  },
1831
1528
  body: {
1832
- color: fg6.tertiary
1529
+ color: fg4.tertiary
1833
1530
  }
1834
1531
  }
1835
1532
  },
1836
1533
  MuiTableHead: {
1837
1534
  styleOverrides: {
1838
1535
  root: {
1839
- backgroundColor: bg6.secondary,
1536
+ backgroundColor: bg4.secondary,
1840
1537
  "& .MuiTableRow-root:last-child .MuiTableCell-root": {
1841
- borderBottom: `1px solid ${border6.secondary}`
1538
+ borderBottom: `1px solid ${border4.secondary}`
1842
1539
  }
1843
1540
  }
1844
1541
  }
@@ -1846,17 +1543,17 @@ function buildComponents(tokens) {
1846
1543
  MuiTableRow: {
1847
1544
  styleOverrides: {
1848
1545
  root: {
1849
- backgroundColor: bg6.secondary,
1546
+ backgroundColor: bg4.secondary,
1850
1547
  "&:last-child td, &:last-child th": {
1851
1548
  border: 0
1852
1549
  },
1853
1550
  "&:hover": {
1854
- backgroundColor: bg6.primaryHover
1551
+ backgroundColor: bg4.primaryHover
1855
1552
  },
1856
1553
  "&.Mui-selected": {
1857
- backgroundColor: info3[50],
1554
+ backgroundColor: info2[50],
1858
1555
  "&:hover": {
1859
- backgroundColor: info3[100]
1556
+ backgroundColor: info2[100]
1860
1557
  }
1861
1558
  }
1862
1559
  }
@@ -1865,8 +1562,8 @@ function buildComponents(tokens) {
1865
1562
  MuiTableContainer: {
1866
1563
  styleOverrides: {
1867
1564
  root: {
1868
- borderRadius: radius6.xl,
1869
- border: `1px solid ${border6.secondary}`,
1565
+ borderRadius: radius4.xl,
1566
+ border: `1px solid ${border4.secondary}`,
1870
1567
  boxShadow: "none"
1871
1568
  }
1872
1569
  }
@@ -1880,27 +1577,37 @@ function buildComponents(tokens) {
1880
1577
  lineHeight: "18px",
1881
1578
  minWidth: 20,
1882
1579
  height: 20,
1883
- borderRadius: radius6.full
1580
+ borderRadius: radius4.full
1884
1581
  },
1885
1582
  colorPrimary: {
1886
- backgroundColor: bg6.brandSolid
1583
+ backgroundColor: bg4.brandSolid,
1584
+ // brandSolid is a dark charcoal in light mode but a LIGHT grey in
1585
+ // dark; MUI's default white contrastText then vanishes on it. Pin the
1586
+ // on-brand fg (white in light / dark in dark) so the count stays legible.
1587
+ color: buttonColors4.primary.fg
1588
+ },
1589
+ colorSecondary: {
1590
+ // secondarySolid inverts to a LIGHT grey in dark; the raw MUI
1591
+ // contrastText stays white and is unreadable. Pin a mode-aware fg.
1592
+ backgroundColor: bg4.secondarySolid,
1593
+ color: buttonColors4.secondary.fg
1887
1594
  },
1888
1595
  colorError: {
1889
- backgroundColor: bg6.errorSolid
1596
+ backgroundColor: bg4.errorSolid
1890
1597
  },
1891
1598
  colorSuccess: {
1892
- backgroundColor: bg6.successSolid
1599
+ backgroundColor: bg4.successSolid
1893
1600
  },
1894
1601
  colorWarning: {
1895
- backgroundColor: bg6.warningSolid
1602
+ backgroundColor: bg4.warningSolid
1896
1603
  },
1897
1604
  dot: {
1898
1605
  minWidth: 8,
1899
1606
  height: 8,
1900
- borderRadius: radius6.full,
1901
- ...highlight2 && {
1607
+ borderRadius: radius4.full,
1608
+ ...highlight3 && {
1902
1609
  "&.MuiBadge-colorDefault, &.MuiBadge-colorPrimary": {
1903
- backgroundColor: highlight2[500]
1610
+ backgroundColor: highlight3[500]
1904
1611
  }
1905
1612
  }
1906
1613
  }
@@ -1910,7 +1617,7 @@ function buildComponents(tokens) {
1910
1617
  MuiDivider: {
1911
1618
  styleOverrides: {
1912
1619
  root: {
1913
- borderColor: border6.secondary
1620
+ borderColor: border4.secondary
1914
1621
  }
1915
1622
  }
1916
1623
  },
@@ -1925,16 +1632,16 @@ function buildComponents(tokens) {
1925
1632
  MuiListItemButton: {
1926
1633
  styleOverrides: {
1927
1634
  root: {
1928
- borderRadius: radius6.sm,
1635
+ borderRadius: radius4.sm,
1929
1636
  padding: "8px 12px",
1930
1637
  "&:hover": {
1931
- backgroundColor: bg6.primaryHover
1638
+ backgroundColor: bg4.primaryHover
1932
1639
  },
1933
1640
  "&.Mui-selected": {
1934
- backgroundColor: info3[50],
1935
- color: info3[700],
1641
+ backgroundColor: info2[50],
1642
+ color: info2[700],
1936
1643
  "&:hover": {
1937
- backgroundColor: info3[100]
1644
+ backgroundColor: info2[100]
1938
1645
  }
1939
1646
  }
1940
1647
  }
@@ -1944,7 +1651,7 @@ function buildComponents(tokens) {
1944
1651
  styleOverrides: {
1945
1652
  root: {
1946
1653
  minWidth: 36,
1947
- color: fg6.quaternary
1654
+ color: fg4.quaternary
1948
1655
  }
1949
1656
  }
1950
1657
  },
@@ -1954,12 +1661,12 @@ function buildComponents(tokens) {
1954
1661
  fontSize: 14,
1955
1662
  lineHeight: "20px",
1956
1663
  fontWeight: 500,
1957
- color: text6.secondary
1664
+ color: text4.secondary
1958
1665
  },
1959
1666
  secondary: {
1960
1667
  fontSize: 14,
1961
1668
  lineHeight: "20px",
1962
- color: text6.quaternary
1669
+ color: text4.quaternary
1963
1670
  }
1964
1671
  }
1965
1672
  },
@@ -1967,17 +1674,21 @@ function buildComponents(tokens) {
1967
1674
  MuiTooltip: {
1968
1675
  styleOverrides: {
1969
1676
  tooltip: {
1970
- backgroundColor: bg6.primarySolid,
1971
- color: text6.white,
1677
+ // Inverted surface: charcoal in light mode, near-white in dark. The
1678
+ // text must invert WITH the face (text.white is mode-invariant and
1679
+ // vanished on the dark-mode light face) — primary.fg is the on-solid
1680
+ // fg: white in light, near-black in dark.
1681
+ backgroundColor: bg4.primarySolid,
1682
+ color: buttonColors4.primary.fg,
1972
1683
  fontSize: 12,
1973
1684
  lineHeight: "18px",
1974
1685
  fontWeight: 600,
1975
1686
  padding: "8px 12px",
1976
- borderRadius: radius6.md,
1687
+ borderRadius: radius4.md,
1977
1688
  boxShadow: tokenShadows.lg
1978
1689
  },
1979
1690
  arrow: {
1980
- color: bg6.primarySolid
1691
+ color: bg4.primarySolid
1981
1692
  }
1982
1693
  }
1983
1694
  },
@@ -1987,25 +1698,25 @@ function buildComponents(tokens) {
1987
1698
  variant: "standard"
1988
1699
  },
1989
1700
  variants: [
1990
- ...highlight2 ? [
1701
+ ...highlight3 ? [
1991
1702
  {
1992
1703
  props: { variant: "featured" },
1993
1704
  style: {
1994
- borderRadius: radius6.xl,
1705
+ borderRadius: radius4.xl,
1995
1706
  fontSize: 14,
1996
1707
  lineHeight: "20px",
1997
1708
  padding: "12px 16px",
1998
1709
  alignItems: "center",
1999
- backgroundColor: highlight2[50],
2000
- color: highlight2[700],
2001
- border: `1px solid ${highlight2[200]}`,
1710
+ backgroundColor: highlight3[50],
1711
+ color: highlight3[700],
1712
+ border: `1px solid ${highlight3[200]}`,
2002
1713
  "& .MuiAlert-icon": {
2003
- color: highlight2[600],
1714
+ color: highlight3[600],
2004
1715
  padding: 0,
2005
1716
  marginRight: 12
2006
1717
  },
2007
1718
  "& .MuiAlertTitle-root": {
2008
- color: highlight2[800]
1719
+ color: highlight3[800]
2009
1720
  }
2010
1721
  }
2011
1722
  }
@@ -2013,44 +1724,66 @@ function buildComponents(tokens) {
2013
1724
  ],
2014
1725
  styleOverrides: {
2015
1726
  root: {
2016
- borderRadius: radius6.xl,
1727
+ borderRadius: radius4.xl,
2017
1728
  fontSize: 14,
2018
1729
  lineHeight: "20px",
2019
1730
  padding: "12px 16px",
2020
1731
  alignItems: "center"
2021
1732
  },
2022
- standardError: {
2023
- backgroundColor: bg6.errorPrimary,
1733
+ // All four severities share one scheme so they read consistently:
1734
+ // light → bg [50], text [700], border [300], icon [600]
1735
+ // dark → bg [950], text [200], border [800], icon [400]
1736
+ // Light is unchanged; dark uses a deep tinted bg with a LIGHT text tint
1737
+ // (the previous [700] text sat too dark on the deep dark bg), and info
1738
+ // now goes dark like the rest instead of staying light.
1739
+ standardError: ({ theme }) => ({
1740
+ backgroundColor: error2[50],
2024
1741
  color: error2[700],
2025
- border: `1px solid ${border6.error}`,
2026
- "& .MuiAlert-icon": {
2027
- color: fg6.errorPrimary
2028
- }
2029
- },
2030
- standardWarning: {
2031
- backgroundColor: bg6.warningPrimary,
1742
+ border: `1px solid ${error2[300]}`,
1743
+ "& .MuiAlert-icon": { color: error2[600] },
1744
+ ...theme.applyStyles("dark", {
1745
+ backgroundColor: error2[950],
1746
+ color: error2[200],
1747
+ border: `1px solid ${error2[800]}`,
1748
+ "& .MuiAlert-icon": { color: error2[400] }
1749
+ })
1750
+ }),
1751
+ standardWarning: ({ theme }) => ({
1752
+ backgroundColor: warning2[50],
2032
1753
  color: warning2[700],
2033
1754
  border: `1px solid ${warning2[300]}`,
2034
- "& .MuiAlert-icon": {
2035
- color: fg6.warningPrimary
2036
- }
2037
- },
2038
- standardSuccess: {
2039
- backgroundColor: bg6.successPrimary,
1755
+ "& .MuiAlert-icon": { color: warning2[600] },
1756
+ ...theme.applyStyles("dark", {
1757
+ backgroundColor: warning2[950],
1758
+ color: warning2[200],
1759
+ border: `1px solid ${warning2[800]}`,
1760
+ "& .MuiAlert-icon": { color: warning2[400] }
1761
+ })
1762
+ }),
1763
+ standardSuccess: ({ theme }) => ({
1764
+ backgroundColor: success2[50],
2040
1765
  color: success2[700],
2041
1766
  border: `1px solid ${success2[300]}`,
2042
- "& .MuiAlert-icon": {
2043
- color: fg6.successPrimary
2044
- }
2045
- },
2046
- standardInfo: {
2047
- backgroundColor: info3[50],
2048
- color: info3[700],
2049
- border: `1px solid ${info3[300]}`,
2050
- "& .MuiAlert-icon": {
2051
- color: info3[600]
2052
- }
2053
- },
1767
+ "& .MuiAlert-icon": { color: success2[600] },
1768
+ ...theme.applyStyles("dark", {
1769
+ backgroundColor: success2[950],
1770
+ color: success2[200],
1771
+ border: `1px solid ${success2[800]}`,
1772
+ "& .MuiAlert-icon": { color: success2[400] }
1773
+ })
1774
+ }),
1775
+ standardInfo: ({ theme }) => ({
1776
+ backgroundColor: info2[50],
1777
+ color: info2[700],
1778
+ border: `1px solid ${info2[300]}`,
1779
+ "& .MuiAlert-icon": { color: info2[600] },
1780
+ ...theme.applyStyles("dark", {
1781
+ backgroundColor: info2[950],
1782
+ color: info2[200],
1783
+ border: `1px solid ${info2[800]}`,
1784
+ "& .MuiAlert-icon": { color: info2[400] }
1785
+ })
1786
+ }),
2054
1787
  icon: {
2055
1788
  padding: 0,
2056
1789
  marginRight: 12
@@ -2070,8 +1803,10 @@ function buildComponents(tokens) {
2070
1803
  // ─── Backdrop ───────────────────────────────────────────────────
2071
1804
  MuiBackdrop: {
2072
1805
  styleOverrides: {
1806
+ // Neutral greyscale scrim (was a blue-tinted #101828). gray[950] with
1807
+ // alpha reads as a true-neutral dim in both light and dark.
2073
1808
  root: {
2074
- backgroundColor: "rgba(16, 24, 40, 0.7)"
1809
+ backgroundColor: "rgba(9, 9, 11, 0.7)"
2075
1810
  }
2076
1811
  }
2077
1812
  },
@@ -2079,7 +1814,7 @@ function buildComponents(tokens) {
2079
1814
  MuiDialog: {
2080
1815
  styleOverrides: {
2081
1816
  paper: {
2082
- borderRadius: radius6.xl,
1817
+ borderRadius: radius4.xl,
2083
1818
  boxShadow: tokenShadows.xl,
2084
1819
  padding: 0
2085
1820
  }
@@ -2091,7 +1826,7 @@ function buildComponents(tokens) {
2091
1826
  fontSize: 18,
2092
1827
  lineHeight: "28px",
2093
1828
  fontWeight: 600,
2094
- color: text6.primary,
1829
+ color: text4.primary,
2095
1830
  padding: "24px 24px 0"
2096
1831
  }
2097
1832
  }
@@ -2102,7 +1837,7 @@ function buildComponents(tokens) {
2102
1837
  padding: "20px 24px",
2103
1838
  fontSize: 14,
2104
1839
  lineHeight: "20px",
2105
- color: text6.tertiary
1840
+ color: text4.tertiary
2106
1841
  }
2107
1842
  }
2108
1843
  },
@@ -2118,27 +1853,27 @@ function buildComponents(tokens) {
2118
1853
  MuiLinearProgress: {
2119
1854
  styleOverrides: {
2120
1855
  root: {
2121
- borderRadius: radius6.full,
1856
+ borderRadius: radius4.full,
2122
1857
  height: 8,
2123
- backgroundColor: border6.secondary
1858
+ backgroundColor: border4.secondary
2124
1859
  },
2125
1860
  barColorPrimary: {
2126
- backgroundColor: fg6.brandPrimary,
2127
- borderRadius: radius6.full
1861
+ backgroundColor: fg4.brandPrimary,
1862
+ borderRadius: radius4.full
2128
1863
  },
2129
1864
  barColorSecondary: {
2130
- backgroundColor: bg6.secondarySolid,
2131
- borderRadius: radius6.full
1865
+ backgroundColor: bg4.secondarySolid,
1866
+ borderRadius: radius4.full
2132
1867
  }
2133
1868
  }
2134
1869
  },
2135
1870
  MuiCircularProgress: {
2136
1871
  styleOverrides: {
2137
1872
  colorPrimary: {
2138
- color: fg6.brandPrimary
1873
+ color: fg4.brandPrimary
2139
1874
  },
2140
1875
  colorSecondary: {
2141
- color: bg6.secondarySolid
1876
+ color: bg4.secondarySolid
2142
1877
  }
2143
1878
  }
2144
1879
  },
@@ -2149,29 +1884,36 @@ function buildComponents(tokens) {
2149
1884
  },
2150
1885
  styleOverrides: {
2151
1886
  root: {
2152
- backgroundColor: bg6.tertiary
1887
+ backgroundColor: bg4.tertiary
2153
1888
  },
2154
1889
  rounded: {
2155
- borderRadius: radius6.md
1890
+ borderRadius: radius4.md
2156
1891
  },
2157
1892
  circular: {
2158
- borderRadius: radius6.full
1893
+ borderRadius: radius4.full
2159
1894
  }
2160
1895
  }
2161
1896
  },
2162
1897
  // ─── Snackbar ───────────────────────────────────────────────────
2163
1898
  MuiSnackbarContent: {
2164
1899
  styleOverrides: {
2165
- root: {
2166
- backgroundColor: bg6.primarySolid,
2167
- color: text6.white,
2168
- borderRadius: radius6.xl,
1900
+ // A toast is an inverse surface: charcoal in light. bg.primarySolid
1901
+ // inverts to a light value in dark (white-on-white), so pin the dark
1902
+ // scheme to a dark grey with light text instead.
1903
+ root: ({ theme }) => ({
1904
+ backgroundColor: bg4.primarySolid,
1905
+ color: text4.white,
1906
+ borderRadius: radius4.xl,
2169
1907
  boxShadow: tokenShadows.lg,
2170
1908
  fontSize: 14,
2171
1909
  lineHeight: "20px",
2172
1910
  fontWeight: 500,
2173
- padding: "6px 16px"
2174
- }
1911
+ padding: "6px 16px",
1912
+ ...theme.applyStyles("dark", {
1913
+ backgroundColor: bg4.tertiary,
1914
+ color: text4.primary
1915
+ })
1916
+ })
2175
1917
  }
2176
1918
  },
2177
1919
  // ─── Typography ─────────────────────────────────────────────────
@@ -2197,53 +1939,53 @@ function buildComponents(tokens) {
2197
1939
  MuiSlider: {
2198
1940
  styleOverrides: {
2199
1941
  root: {
2200
- color: fg6.brandPrimary,
1942
+ color: fg4.brandPrimary,
2201
1943
  height: 8,
2202
1944
  "&.Mui-disabled": {
2203
- color: border6.secondary
1945
+ color: border4.secondary
2204
1946
  }
2205
1947
  },
2206
1948
  thumb: {
2207
1949
  width: 20,
2208
1950
  height: 20,
2209
- backgroundColor: sliderColors6.handleBg,
2210
- border: `2px solid ${sliderColors6.handleBorder}`,
1951
+ backgroundColor: sliderColors4.handleBg,
1952
+ border: `2px solid ${sliderColors4.handleBorder}`,
2211
1953
  boxShadow: tokenShadows.xs,
2212
1954
  "&:hover, &.Mui-focusVisible": {
2213
- boxShadow: focusRings6.brandShadowXs
1955
+ boxShadow: focusRings4.brandShadowXs
2214
1956
  },
2215
1957
  "&.Mui-active": {
2216
- boxShadow: focusRings6.brandShadowSm
1958
+ boxShadow: focusRings4.brandShadowSm
2217
1959
  }
2218
1960
  },
2219
1961
  track: {
2220
- borderRadius: radius6.full,
1962
+ borderRadius: radius4.full,
2221
1963
  border: "none"
2222
1964
  },
2223
1965
  rail: {
2224
- backgroundColor: border6.secondary,
2225
- borderRadius: radius6.full,
1966
+ backgroundColor: border4.secondary,
1967
+ borderRadius: radius4.full,
2226
1968
  opacity: 1
2227
1969
  },
2228
1970
  valueLabel: {
2229
- backgroundColor: bg6.primarySolid,
2230
- borderRadius: radius6.md,
1971
+ backgroundColor: bg4.primarySolid,
1972
+ borderRadius: radius4.md,
2231
1973
  fontSize: 12,
2232
1974
  fontWeight: 600,
2233
1975
  padding: "4px 8px"
2234
1976
  },
2235
1977
  mark: {
2236
- backgroundColor: border6.secondary,
1978
+ backgroundColor: border4.secondary,
2237
1979
  width: 4,
2238
1980
  height: 4,
2239
- borderRadius: radius6.full
1981
+ borderRadius: radius4.full
2240
1982
  },
2241
1983
  markActive: {
2242
- backgroundColor: fg6.brandPrimary
1984
+ backgroundColor: fg4.brandPrimary
2243
1985
  },
2244
1986
  markLabel: {
2245
1987
  fontSize: 12,
2246
- color: text6.tertiary
1988
+ color: text4.tertiary
2247
1989
  }
2248
1990
  }
2249
1991
  },
@@ -2251,17 +1993,17 @@ function buildComponents(tokens) {
2251
1993
  MuiRating: {
2252
1994
  styleOverrides: {
2253
1995
  root: {
2254
- color: fg6.brandPrimary,
1996
+ color: fg4.brandPrimary,
2255
1997
  gap: 4
2256
1998
  },
2257
1999
  iconEmpty: {
2258
- color: border6.secondary
2000
+ color: border4.secondary
2259
2001
  },
2260
2002
  iconFilled: {
2261
- color: fg6.brandPrimary
2003
+ color: fg4.brandPrimary
2262
2004
  },
2263
2005
  iconHover: {
2264
- color: buttonColors6.primary.bgHover
2006
+ color: buttonColors4.primary.bgHover
2265
2007
  }
2266
2008
  }
2267
2009
  },
@@ -2274,30 +2016,33 @@ function buildComponents(tokens) {
2274
2016
  MuiPaginationItem: {
2275
2017
  styleOverrides: {
2276
2018
  root: {
2277
- borderRadius: radius6.md,
2019
+ borderRadius: radius4.md,
2278
2020
  fontSize: 14,
2279
2021
  fontWeight: 500,
2280
- color: text6.secondary,
2022
+ color: text4.secondary,
2281
2023
  "&:hover": {
2282
- backgroundColor: bg6.primaryHover
2024
+ backgroundColor: bg4.primaryHover
2283
2025
  },
2284
2026
  "&.Mui-selected": {
2285
- backgroundColor: fg6.brandPrimary,
2286
- color: base2.white,
2027
+ backgroundColor: fg4.brandPrimary,
2028
+ // fg.brandPrimary is charcoal in light but a LIGHT grey in dark, so
2029
+ // a hardcoded white number vanished. primary.fg is the on-solid fg
2030
+ // (white in light / near-black in dark) — inverts with the face.
2031
+ color: buttonColors4.primary.fg,
2287
2032
  "&:hover": {
2288
- backgroundColor: buttonColors6.primary.bgHover
2033
+ backgroundColor: buttonColors4.primary.bgHover
2289
2034
  }
2290
2035
  },
2291
2036
  "&.Mui-focusVisible": {
2292
- boxShadow: focusRings6.brandShadowXs
2037
+ boxShadow: focusRings4.brandShadowXs
2293
2038
  }
2294
2039
  },
2295
2040
  outlined: {
2296
- border: `1px solid ${border6.primary}`,
2041
+ border: `1px solid ${border4.primary}`,
2297
2042
  "&.Mui-selected": {
2298
- backgroundColor: fg6.brandPrimary,
2299
- color: base2.white,
2300
- borderColor: fg6.brandPrimary
2043
+ backgroundColor: fg4.brandPrimary,
2044
+ color: buttonColors4.primary.fg,
2045
+ borderColor: fg4.brandPrimary
2301
2046
  }
2302
2047
  }
2303
2048
  }
@@ -2306,20 +2051,24 @@ function buildComponents(tokens) {
2306
2051
  MuiAvatar: {
2307
2052
  styleOverrides: {
2308
2053
  root: {
2309
- backgroundColor: avatarColors6.bg,
2054
+ backgroundColor: avatarColors3.bg,
2055
+ // MUI defaults letter/initials color to palette.background.default
2056
+ // (near-invisible on the avatar bg, esp. in dark). Set it explicitly;
2057
+ // avatarColors.fg is a palette var so it swaps per scheme.
2058
+ color: avatarColors3.fg,
2310
2059
  fontSize: 14,
2311
2060
  fontWeight: 600,
2312
- border: `1.5px solid ${avatarColors6.contrastBorder}`
2061
+ border: `1.5px solid ${avatarColors3.contrastBorder}`
2313
2062
  },
2314
2063
  rounded: {
2315
- borderRadius: radius6.md
2064
+ borderRadius: radius4.md
2316
2065
  }
2317
2066
  }
2318
2067
  },
2319
2068
  MuiAvatarGroup: {
2320
2069
  styleOverrides: {
2321
2070
  avatar: {
2322
- border: `2px solid ${avatarColors6.profilePhotoBorder}`,
2071
+ border: `2px solid ${avatarColors3.profilePhotoBorder}`,
2323
2072
  width: 32,
2324
2073
  height: 32,
2325
2074
  fontSize: 13,
@@ -2331,17 +2080,17 @@ function buildComponents(tokens) {
2331
2080
  MuiBottomNavigation: {
2332
2081
  styleOverrides: {
2333
2082
  root: {
2334
- backgroundColor: bg6.primary,
2335
- borderTop: `1px solid ${border6.secondary}`
2083
+ backgroundColor: bg4.primary,
2084
+ borderTop: `1px solid ${border4.secondary}`
2336
2085
  }
2337
2086
  }
2338
2087
  },
2339
2088
  MuiBottomNavigationAction: {
2340
2089
  styleOverrides: {
2341
2090
  root: {
2342
- color: fg6.quaternary,
2091
+ color: fg4.quaternary,
2343
2092
  "&.Mui-selected": {
2344
- color: fg6.brandPrimary
2093
+ color: fg4.brandPrimary
2345
2094
  }
2346
2095
  },
2347
2096
  label: {
@@ -2355,35 +2104,26 @@ function buildComponents(tokens) {
2355
2104
  }
2356
2105
  },
2357
2106
  // ─── SpeedDial ──────────────────────────────────────────────────
2358
- MuiSpeedDial: {
2359
- styleOverrides: {
2360
- fab: {
2361
- backgroundColor: fg6.brandPrimary,
2362
- color: base2.white,
2363
- boxShadow: tokenShadows.md,
2364
- "&:hover": {
2365
- backgroundColor: buttonColors6.primary.bgHover
2366
- }
2367
- }
2368
- }
2369
- },
2107
+ // The main FAB renders a MuiFab internally, so it inherits the full
2108
+ // faux-3D Fab styling (bevel, light sweep, hover lift) with no override
2109
+ // here. Only the smaller action buttons get their own flat treatment.
2370
2110
  MuiSpeedDialAction: {
2371
2111
  styleOverrides: {
2372
2112
  fab: {
2373
- backgroundColor: bg6.primary,
2374
- color: fg6.secondary,
2113
+ backgroundColor: bg4.primary,
2114
+ color: fg4.secondary,
2375
2115
  boxShadow: tokenShadows.sm,
2376
- border: `1px solid ${border6.secondary}`,
2116
+ border: `1px solid ${border4.secondary}`,
2377
2117
  "&:hover": {
2378
- backgroundColor: bg6.primaryHover
2118
+ backgroundColor: bg4.primaryHover
2379
2119
  }
2380
2120
  },
2381
2121
  staticTooltipLabel: {
2382
- backgroundColor: bg6.primarySolid,
2383
- color: text6.white,
2122
+ backgroundColor: bg4.primarySolid,
2123
+ color: text4.white,
2384
2124
  fontSize: 12,
2385
2125
  fontWeight: 600,
2386
- borderRadius: radius6.md,
2126
+ borderRadius: radius4.md,
2387
2127
  whiteSpace: "nowrap"
2388
2128
  }
2389
2129
  }
@@ -2401,13 +2141,13 @@ function buildComponents(tokens) {
2401
2141
  label: {
2402
2142
  fontSize: 14,
2403
2143
  fontWeight: 500,
2404
- color: text6.tertiary,
2144
+ color: text4.tertiary,
2405
2145
  "&.Mui-active": {
2406
- color: text6.primary,
2146
+ color: text4.primary,
2407
2147
  fontWeight: 600
2408
2148
  },
2409
2149
  "&.Mui-completed": {
2410
- color: text6.primary,
2150
+ color: text4.primary,
2411
2151
  fontWeight: 500
2412
2152
  }
2413
2153
  }
@@ -2416,12 +2156,18 @@ function buildComponents(tokens) {
2416
2156
  MuiStepIcon: {
2417
2157
  styleOverrides: {
2418
2158
  root: {
2419
- color: border6.secondary,
2159
+ color: border4.secondary,
2160
+ // Use the brand-solid button pairing so the number's fill always
2161
+ // contrasts its circle — fg.brandPrimary is near-white in dark mode,
2162
+ // which collided with MUI's default white text (white-on-white).
2420
2163
  "&.Mui-active": {
2421
- color: fg6.brandPrimary
2164
+ color: buttonColors4.primary.bg,
2165
+ "& .MuiStepIcon-text": {
2166
+ fill: buttonColors4.primary.fg
2167
+ }
2422
2168
  },
2423
2169
  "&.Mui-completed": {
2424
- color: fg6.brandPrimary
2170
+ color: buttonColors4.primary.bg
2425
2171
  }
2426
2172
  },
2427
2173
  text: {
@@ -2433,7 +2179,7 @@ function buildComponents(tokens) {
2433
2179
  MuiStepConnector: {
2434
2180
  styleOverrides: {
2435
2181
  line: {
2436
- borderColor: border6.secondary
2182
+ borderColor: border4.secondary
2437
2183
  },
2438
2184
  lineHorizontal: {
2439
2185
  borderTopWidth: 2
@@ -2451,20 +2197,20 @@ function buildComponents(tokens) {
2451
2197
  padding: "8px 0"
2452
2198
  },
2453
2199
  dot: {
2454
- backgroundColor: border6.secondary,
2200
+ backgroundColor: border4.secondary,
2455
2201
  width: 8,
2456
2202
  height: 8
2457
2203
  },
2458
2204
  dotActive: {
2459
- backgroundColor: fg6.brandPrimary
2205
+ backgroundColor: fg4.brandPrimary
2460
2206
  },
2461
2207
  progress: {
2462
2208
  width: "100%",
2463
- backgroundColor: border6.secondary,
2464
- borderRadius: radius6.full,
2209
+ backgroundColor: border4.secondary,
2210
+ borderRadius: radius4.full,
2465
2211
  "& .MuiLinearProgress-bar": {
2466
- backgroundColor: fg6.brandPrimary,
2467
- borderRadius: radius6.full
2212
+ backgroundColor: fg4.brandPrimary,
2213
+ borderRadius: radius4.full
2468
2214
  }
2469
2215
  }
2470
2216
  }
@@ -2477,18 +2223,27 @@ function buildComponents(tokens) {
2477
2223
  lineHeight: "20px"
2478
2224
  },
2479
2225
  separator: {
2480
- color: breadcrumbColors6.iconFg,
2226
+ color: breadcrumbColors4.iconFg,
2481
2227
  marginLeft: 4,
2482
2228
  marginRight: 4
2483
2229
  },
2484
2230
  li: {
2231
+ fontSize: 14,
2232
+ lineHeight: "20px",
2485
2233
  "& a": {
2486
- color: breadcrumbColors6.fg,
2234
+ color: breadcrumbColors4.fg,
2487
2235
  textDecoration: "none",
2488
2236
  fontWeight: 500,
2489
2237
  "&:hover": {
2490
- color: breadcrumbColors6.fgHover
2238
+ color: breadcrumbColors4.fgHover
2491
2239
  }
2240
+ },
2241
+ // Current-page item (a non-link <Typography>) must match the link
2242
+ // size/weight — only its color sets it apart, no bigger/lighter text.
2243
+ "& .MuiTypography-root": {
2244
+ fontSize: 14,
2245
+ lineHeight: "20px",
2246
+ fontWeight: 500
2492
2247
  }
2493
2248
  }
2494
2249
  }
@@ -2496,24 +2251,35 @@ function buildComponents(tokens) {
2496
2251
  // ─── Link ───────────────────────────────────────────────────────
2497
2252
  MuiLink: {
2498
2253
  styleOverrides: {
2499
- root: {
2500
- color: info3[600],
2254
+ // info is a raw hue scale (not varified), so the dark link color must be
2255
+ // set explicitly. info[600] is too dark on the near-black dark bg — step
2256
+ // up to lighter tiers for legible contrast.
2257
+ root: ({ theme }) => ({
2258
+ color: info2[600],
2501
2259
  fontWeight: 500,
2502
- textDecorationColor: info3[600],
2260
+ textDecorationColor: info2[600],
2503
2261
  "&:hover": {
2504
- color: info3[700],
2505
- textDecorationColor: info3[700]
2506
- }
2507
- }
2262
+ color: info2[700],
2263
+ textDecorationColor: info2[700]
2264
+ },
2265
+ ...theme.applyStyles("dark", {
2266
+ color: info2[400],
2267
+ textDecorationColor: info2[400],
2268
+ "&:hover": {
2269
+ color: info2[300],
2270
+ textDecorationColor: info2[300]
2271
+ }
2272
+ })
2273
+ })
2508
2274
  }
2509
2275
  },
2510
2276
  // ─── Popover ────────────────────────────────────────────────────
2511
2277
  MuiPopover: {
2512
2278
  styleOverrides: {
2513
2279
  paper: {
2514
- borderRadius: radius6.lg,
2280
+ borderRadius: radius4.lg,
2515
2281
  boxShadow: tokenShadows.lg,
2516
- border: `1px solid ${border6.secondary}`
2282
+ border: `1px solid ${border4.secondary}`
2517
2283
  }
2518
2284
  }
2519
2285
  },
@@ -2524,14 +2290,74 @@ function buildComponents(tokens) {
2524
2290
  }
2525
2291
  },
2526
2292
  // ─── CardActionArea ─────────────────────────────────────────────
2293
+ // Clickable-card affordance: mirrors the Button's faux-3D bevel (thick edge
2294
+ // that flips bottom->top on hover), light glaze sweep, border-color shift,
2295
+ // and press-to-sink. This is what visually marks a card as clickable — use
2296
+ // <Card><CardActionArea>…</CardActionArea></Card> for any interactive card.
2527
2297
  MuiCardActionArea: {
2528
2298
  styleOverrides: {
2529
2299
  root: {
2300
+ position: "relative",
2301
+ overflow: "hidden",
2302
+ borderRadius: radius4.xl,
2303
+ borderStyle: "solid",
2304
+ borderColor: border4.primary,
2305
+ borderTopWidth: 1,
2306
+ borderRightWidth: 1,
2307
+ borderLeftWidth: 1,
2308
+ borderBottomWidth: 4,
2309
+ borderBottomLeftRadius: radius4["2xl"],
2310
+ borderBottomRightRadius: radius4["2xl"],
2311
+ boxShadow: tokenShadows.xs,
2312
+ transition: "box-shadow 300ms ease, border-width 300ms ease, border-radius 300ms ease, border-color 300ms ease, opacity 300ms ease",
2313
+ // Moving glaze — a soft light streak that sweeps top->bottom on hover.
2314
+ "&::before": {
2315
+ content: '""',
2316
+ position: "absolute",
2317
+ left: 0,
2318
+ top: "-150%",
2319
+ width: "100%",
2320
+ height: 6,
2321
+ borderRadius: 4,
2322
+ backgroundColor: "color-mix(in srgb, currentColor 40%, #fff)",
2323
+ boxShadow: "0 0 28px 6px color-mix(in srgb, currentColor 40%, #fff)",
2324
+ opacity: 0.35,
2325
+ filter: "blur(3px)",
2326
+ pointerEvents: "none",
2327
+ transition: "top 600ms ease-in-out",
2328
+ zIndex: 1
2329
+ },
2330
+ "&:hover": {
2331
+ borderColor: border4.brand,
2332
+ borderTopWidth: 4,
2333
+ borderBottomWidth: 1,
2334
+ borderTopLeftRadius: radius4["2xl"],
2335
+ borderTopRightRadius: radius4["2xl"],
2336
+ borderBottomLeftRadius: radius4.xl,
2337
+ borderBottomRightRadius: radius4.xl,
2338
+ boxShadow: tokenShadows.lg
2339
+ },
2340
+ "&:hover::before": {
2341
+ top: "150%"
2342
+ },
2343
+ // Press: collapse the raised top edge so the card sinks (snappier than
2344
+ // the hover flip), matching the Button's tactile press.
2345
+ "&:active": {
2346
+ transition: "border-width 120ms ease, border-radius 120ms ease, opacity 120ms ease",
2347
+ borderTopWidth: 1,
2348
+ borderTopLeftRadius: radius4.xl,
2349
+ borderTopRightRadius: radius4.xl,
2350
+ opacity: 0.85
2351
+ },
2530
2352
  "&:hover .MuiCardActionArea-focusHighlight": {
2531
2353
  opacity: 0.04
2532
2354
  },
2533
2355
  "&.Mui-focusVisible .MuiCardActionArea-focusHighlight": {
2534
2356
  opacity: 0.08
2357
+ },
2358
+ "@media (prefers-reduced-motion: reduce)": {
2359
+ transition: "none",
2360
+ "&::before": { display: "none" }
2535
2361
  }
2536
2362
  }
2537
2363
  }
@@ -2540,16 +2366,16 @@ function buildComponents(tokens) {
2540
2366
  MuiFilledInput: {
2541
2367
  styleOverrides: {
2542
2368
  root: {
2543
- borderRadius: `${radius6.md}px ${radius6.md}px 0 0`,
2544
- backgroundColor: bg6.secondary,
2369
+ borderRadius: `${radius4.md}px ${radius4.md}px 0 0`,
2370
+ backgroundColor: bg4.secondary,
2545
2371
  "&:hover": {
2546
- backgroundColor: bg6.secondaryHover
2372
+ backgroundColor: bg4.secondaryHover
2547
2373
  },
2548
2374
  "&.Mui-focused": {
2549
- backgroundColor: bg6.secondary
2375
+ backgroundColor: bg4.secondary
2550
2376
  },
2551
2377
  "&:after": {
2552
- borderBottomColor: fg6.brandPrimary
2378
+ borderBottomColor: fg4.brandPrimary
2553
2379
  }
2554
2380
  },
2555
2381
  input: {
@@ -2564,25 +2390,25 @@ function buildComponents(tokens) {
2564
2390
  styleOverrides: {
2565
2391
  root: {
2566
2392
  fontSize: 14,
2567
- color: text6.tertiary
2393
+ color: text4.tertiary
2568
2394
  },
2569
2395
  selectLabel: {
2570
2396
  fontSize: 14,
2571
- color: text6.tertiary
2397
+ color: text4.tertiary
2572
2398
  },
2573
2399
  displayedRows: {
2574
2400
  fontSize: 14,
2575
- color: text6.tertiary
2401
+ color: text4.tertiary
2576
2402
  },
2577
2403
  select: {
2578
2404
  fontSize: 14
2579
2405
  },
2580
2406
  actions: {
2581
2407
  "& .MuiIconButton-root": {
2582
- color: fg6.quaternary,
2408
+ color: fg4.quaternary,
2583
2409
  "&:hover": {
2584
- backgroundColor: bg6.primaryHover,
2585
- color: fg6.brandPrimary
2410
+ backgroundColor: bg4.primaryHover,
2411
+ color: fg4.brandPrimary
2586
2412
  }
2587
2413
  }
2588
2414
  }
@@ -2593,12 +2419,12 @@ function buildComponents(tokens) {
2593
2419
  styleOverrides: {
2594
2420
  root: {
2595
2421
  "&:hover": {
2596
- color: fg6.secondary
2422
+ color: fg4.secondary
2597
2423
  },
2598
2424
  "&.Mui-active": {
2599
- color: fg6.secondary,
2425
+ color: fg4.secondary,
2600
2426
  "& .MuiTableSortLabel-icon": {
2601
- color: fg6.brandPrimary
2427
+ color: fg4.brandPrimary
2602
2428
  }
2603
2429
  }
2604
2430
  }
@@ -2608,9 +2434,9 @@ function buildComponents(tokens) {
2608
2434
  MuiTabScrollButton: {
2609
2435
  styleOverrides: {
2610
2436
  root: {
2611
- color: fg6.quaternary,
2437
+ color: fg4.quaternary,
2612
2438
  "&:hover": {
2613
- color: fg6.brandPrimary
2439
+ color: fg4.brandPrimary
2614
2440
  }
2615
2441
  }
2616
2442
  }
@@ -2621,21 +2447,21 @@ function buildComponents(tokens) {
2621
2447
  MuiDataGrid: {
2622
2448
  styleOverrides: {
2623
2449
  root: {
2624
- border: `1px solid ${border6.secondary}`,
2625
- borderRadius: radius6.xl,
2450
+ border: `1px solid ${border4.secondary}`,
2451
+ borderRadius: radius4.xl,
2626
2452
  fontFamily: "inherit",
2627
2453
  "& .MuiDataGrid-withBorderColor": {
2628
- borderColor: border6.secondary
2454
+ borderColor: border4.secondary
2629
2455
  }
2630
2456
  },
2631
2457
  columnHeaders: {
2632
- backgroundColor: bg6.secondary
2458
+ backgroundColor: bg4.secondary
2633
2459
  },
2634
2460
  columnHeader: {
2635
2461
  fontSize: 12,
2636
2462
  lineHeight: "18px",
2637
2463
  fontWeight: 500,
2638
- color: fg6.tertiary,
2464
+ color: fg4.tertiary,
2639
2465
  "&:focus, &:focus-within": {
2640
2466
  outline: "none"
2641
2467
  }
@@ -2648,28 +2474,28 @@ function buildComponents(tokens) {
2648
2474
  alignItems: "center",
2649
2475
  fontSize: 14,
2650
2476
  lineHeight: "20px",
2651
- color: fg6.tertiary,
2477
+ color: fg4.tertiary,
2652
2478
  "&:focus, &:focus-within": {
2653
2479
  outline: "none"
2654
2480
  }
2655
2481
  },
2656
2482
  row: {
2657
- backgroundColor: bg6.secondary,
2483
+ backgroundColor: bg4.secondary,
2658
2484
  "&:hover": {
2659
- backgroundColor: bg6.primaryHover
2485
+ backgroundColor: bg4.primaryHover
2660
2486
  },
2661
2487
  "&.Mui-selected": {
2662
- backgroundColor: bg6.brandPrimary,
2488
+ backgroundColor: bg4.brandPrimary,
2663
2489
  "&:hover": {
2664
- backgroundColor: bg6.brandPrimary
2490
+ backgroundColor: bg4.brandPrimary
2665
2491
  }
2666
2492
  }
2667
2493
  },
2668
2494
  footerContainer: {
2669
- borderTop: `1px solid ${border6.secondary}`
2495
+ borderTop: `1px solid ${border4.secondary}`
2670
2496
  },
2671
2497
  columnSeparator: {
2672
- color: border6.secondary
2498
+ color: border4.secondary
2673
2499
  }
2674
2500
  }
2675
2501
  }
@@ -2678,40 +2504,53 @@ function buildComponents(tokens) {
2678
2504
  // MUI X uses its own sub-components that are separate from MuiOutlinedInput,
2679
2505
  // so height/padding and brand colours must be set here independently.
2680
2506
  ...{
2681
- // Input field — mirrors MuiOutlinedInput sizing
2682
- MuiPickersTextField: {
2507
+ // Input field — 32px to match MuiOutlinedInput. MUI X's PickersTextField
2508
+ // renders its OWN tree (MuiPickersInputBase / MuiPickersOutlinedInput),
2509
+ // not classic MuiInputBase/MuiOutlinedInput, so the height/padding/border
2510
+ // must target those keys. sectionsContainer padding 6px 0 + 20px
2511
+ // line-height = 32px, mirroring MuiOutlinedInput.input.
2512
+ MuiPickersInputBase: {
2513
+ styleOverrides: {
2514
+ root: {
2515
+ borderRadius: radius4.md,
2516
+ boxShadow: tokenShadows.xs,
2517
+ fontSize: 14,
2518
+ lineHeight: "20px"
2519
+ }
2520
+ }
2521
+ },
2522
+ MuiPickersOutlinedInput: {
2683
2523
  styleOverrides: {
2524
+ // The sections container carries the default 16.5px vertical padding
2525
+ // (mirrors MuiOutlinedInput). 6px + 20px line-height = 32px, matching
2526
+ // the other inputs. Must live here, not on MuiPickersInputBase — the
2527
+ // OutlinedInput slot is the more specific one that actually paints it.
2528
+ sectionsContainer: {
2529
+ padding: "6px 0"
2530
+ },
2684
2531
  root: {
2685
- "& .MuiInputBase-root": {
2686
- height: 32,
2687
- borderRadius: radius6.md,
2688
- boxShadow: tokenShadows.xs,
2689
- fontSize: 14,
2690
- lineHeight: "20px"
2691
- },
2692
- "& .MuiInputBase-input": {
2693
- padding: "6px 12px",
2694
- fontSize: 14,
2695
- lineHeight: "20px"
2532
+ padding: "0 12px",
2533
+ "&:hover:not(.Mui-disabled) .MuiPickersOutlinedInput-notchedOutline": {
2534
+ borderColor: border4.brand
2696
2535
  },
2697
- "& .MuiOutlinedInput-notchedOutline": {
2698
- borderColor: border6.primary
2699
- },
2700
- "&:hover:not(:has(.Mui-disabled)) .MuiOutlinedInput-notchedOutline": {
2701
- borderColor: border6.brand
2702
- },
2703
- "& .Mui-focused .MuiOutlinedInput-notchedOutline": {
2704
- borderColor: border6.brandSolid,
2536
+ "&.Mui-focused .MuiPickersOutlinedInput-notchedOutline": {
2537
+ borderColor: border4.brandSolid,
2705
2538
  borderWidth: 1,
2706
2539
  boxShadow: "none"
2707
2540
  },
2541
+ "&.Mui-error .MuiPickersOutlinedInput-notchedOutline": {
2542
+ borderColor: border4.error
2543
+ },
2708
2544
  "& .MuiInputAdornment-root .MuiIconButton-root": {
2709
- color: fg6.quaternary,
2545
+ color: fg4.quaternary,
2710
2546
  "&:hover": {
2711
- backgroundColor: bg6.primaryHover,
2712
- color: fg6.brandPrimary
2547
+ backgroundColor: bg4.primaryHover,
2548
+ color: fg4.brandPrimary
2713
2549
  }
2714
2550
  }
2551
+ },
2552
+ notchedOutline: {
2553
+ borderColor: border4.primary
2715
2554
  }
2716
2555
  }
2717
2556
  },
@@ -2719,9 +2558,9 @@ function buildComponents(tokens) {
2719
2558
  MuiPickersPopper: {
2720
2559
  styleOverrides: {
2721
2560
  paper: {
2722
- borderRadius: radius6.xl,
2561
+ borderRadius: radius4.xl,
2723
2562
  boxShadow: tokenShadows.lg,
2724
- border: `1px solid ${border6.secondary}`,
2563
+ border: `1px solid ${border4.secondary}`,
2725
2564
  marginTop: 4
2726
2565
  }
2727
2566
  }
@@ -2746,19 +2585,19 @@ function buildComponents(tokens) {
2746
2585
  label: {
2747
2586
  fontSize: 14,
2748
2587
  fontWeight: 600,
2749
- color: text6.primary
2588
+ color: text4.primary
2750
2589
  },
2751
2590
  switchViewButton: {
2752
- color: fg6.quaternary,
2753
- "&:hover": { backgroundColor: bg6.primaryHover, color: fg6.brandPrimary }
2591
+ color: fg4.quaternary,
2592
+ "&:hover": { backgroundColor: bg4.primaryHover, color: fg4.brandPrimary }
2754
2593
  }
2755
2594
  }
2756
2595
  },
2757
2596
  MuiPickersArrowSwitcher: {
2758
2597
  styleOverrides: {
2759
2598
  button: {
2760
- color: fg6.quaternary,
2761
- "&:hover": { backgroundColor: bg6.primaryHover, color: fg6.brandPrimary }
2599
+ color: fg4.quaternary,
2600
+ "&:hover": { backgroundColor: bg4.primaryHover, color: fg4.brandPrimary }
2762
2601
  }
2763
2602
  }
2764
2603
  },
@@ -2768,7 +2607,7 @@ function buildComponents(tokens) {
2768
2607
  weekDayLabel: {
2769
2608
  fontSize: 12,
2770
2609
  fontWeight: 500,
2771
- color: text6.tertiary,
2610
+ color: text4.tertiary,
2772
2611
  width: 32,
2773
2612
  height: 32
2774
2613
  },
@@ -2788,39 +2627,39 @@ function buildComponents(tokens) {
2788
2627
  fontWeight: 400,
2789
2628
  width: 32,
2790
2629
  height: 32,
2791
- borderRadius: radius6.md,
2792
- color: text6.primary,
2630
+ borderRadius: radius4.md,
2631
+ color: text4.primary,
2793
2632
  backgroundColor: "transparent",
2794
2633
  "&:hover": {
2795
- backgroundColor: bg6.primaryHover
2634
+ backgroundColor: bg4.primaryHover
2796
2635
  },
2797
2636
  "&.Mui-selected": {
2798
- backgroundColor: info3[600],
2799
- color: base2.white,
2637
+ backgroundColor: buttonColors4.primary.bg,
2638
+ color: buttonColors4.primary.fg,
2800
2639
  fontWeight: 600,
2801
2640
  "&:hover": {
2802
- backgroundColor: info3[700]
2641
+ backgroundColor: buttonColors4.primary.bgHover
2803
2642
  },
2804
2643
  "&:focus": {
2805
- backgroundColor: info3[600]
2644
+ backgroundColor: buttonColors4.primary.bg
2806
2645
  }
2807
2646
  },
2808
2647
  "&.MuiPickersDay-today": {
2809
- border: `1px solid ${info3[600]}`,
2810
- color: info3[700],
2648
+ border: `1px solid ${fg4.brandPrimary}`,
2649
+ color: text4.brandPrimary,
2811
2650
  backgroundColor: "transparent",
2812
2651
  fontWeight: 600,
2813
2652
  "&.Mui-selected": {
2814
- backgroundColor: info3[600],
2815
- color: base2.white,
2653
+ backgroundColor: buttonColors4.primary.bg,
2654
+ color: buttonColors4.primary.fg,
2816
2655
  border: "none"
2817
2656
  }
2818
2657
  },
2819
2658
  "&.Mui-focusVisible": {
2820
- boxShadow: focusRings6.brand
2659
+ boxShadow: focusRings4.brand
2821
2660
  },
2822
2661
  "&.Mui-disabled": {
2823
- color: text6.disabled
2662
+ color: text4.disabled
2824
2663
  }
2825
2664
  }
2826
2665
  }
@@ -2830,12 +2669,12 @@ function buildComponents(tokens) {
2830
2669
  styleOverrides: {
2831
2670
  yearButton: {
2832
2671
  fontSize: 13,
2833
- borderRadius: radius6.md,
2834
- "&:hover": { backgroundColor: bg6.primaryHover },
2672
+ borderRadius: radius4.md,
2673
+ "&:hover": { backgroundColor: bg4.primaryHover },
2835
2674
  "&.Mui-selected": {
2836
- backgroundColor: fg6.brandPrimary,
2837
- color: base2.white,
2838
- "&:hover": { backgroundColor: buttonColors6.primary.bgHover }
2675
+ backgroundColor: buttonColors4.primary.bg,
2676
+ color: buttonColors4.primary.fg,
2677
+ "&:hover": { backgroundColor: buttonColors4.primary.bgHover }
2839
2678
  }
2840
2679
  }
2841
2680
  }
@@ -2845,12 +2684,12 @@ function buildComponents(tokens) {
2845
2684
  styleOverrides: {
2846
2685
  monthButton: {
2847
2686
  fontSize: 13,
2848
- borderRadius: radius6.md,
2849
- "&:hover": { backgroundColor: bg6.primaryHover },
2687
+ borderRadius: radius4.md,
2688
+ "&:hover": { backgroundColor: bg4.primaryHover },
2850
2689
  "&.Mui-selected": {
2851
- backgroundColor: fg6.brandPrimary,
2852
- color: base2.white,
2853
- "&:hover": { backgroundColor: buttonColors6.primary.bgHover }
2690
+ backgroundColor: buttonColors4.primary.bg,
2691
+ color: buttonColors4.primary.fg,
2692
+ "&:hover": { backgroundColor: buttonColors4.primary.bgHover }
2854
2693
  }
2855
2694
  }
2856
2695
  }
@@ -2860,344 +2699,431 @@ function buildComponents(tokens) {
2860
2699
  }
2861
2700
 
2862
2701
  // src/theme/buildTheme.ts
2863
- function buildThemeOptions(tokens) {
2702
+ function toVars(value, path) {
2703
+ if (typeof value === "string") {
2704
+ return `var(--mui-palette-${path}, ${value})`;
2705
+ }
2706
+ const out = {};
2707
+ for (const key of Object.keys(value)) {
2708
+ out[key] = toVars(value[key], `${path}-${key}`);
2709
+ }
2710
+ return out;
2711
+ }
2712
+ function varifyColorTokens(tokens2) {
2864
2713
  return {
2865
- palette: buildPalette(tokens),
2866
- typography: buildTypography(tokens),
2867
- components: buildComponents(tokens),
2868
- shadows: buildShadows(tokens),
2714
+ ...tokens2,
2715
+ text: toVars(tokens2.text, "text"),
2716
+ bg: toVars(tokens2.bg, "bg"),
2717
+ fg: toVars(tokens2.fg, "fg"),
2718
+ border: toVars(tokens2.border, "border"),
2719
+ buttonColors: toVars(tokens2.buttonColors, "buttonColors"),
2720
+ sliderColors: toVars(tokens2.sliderColors, "sliderColors"),
2721
+ avatarColors: toVars(tokens2.avatarColors, "avatarColors"),
2722
+ breadcrumbColors: toVars(tokens2.breadcrumbColors, "breadcrumbColors")
2723
+ };
2724
+ }
2725
+ function buildThemeOptions(tokens2, tokensDark2) {
2726
+ const componentTokens = tokensDark2 ? varifyColorTokens(tokens2) : tokens2;
2727
+ const shared = {
2728
+ typography: buildTypography(tokens2),
2729
+ components: buildComponents(componentTokens),
2730
+ shadows: buildShadows(tokens2),
2869
2731
  shape: {
2870
- borderRadius: tokens.radius.md
2732
+ borderRadius: tokens2.radius.md
2733
+ }
2734
+ };
2735
+ if (!tokensDark2) {
2736
+ return { ...shared, palette: buildPalette(tokens2, "light") };
2737
+ }
2738
+ return {
2739
+ ...shared,
2740
+ cssVariables: { colorSchemeSelector: "class" },
2741
+ colorSchemes: {
2742
+ light: { palette: buildPalette(tokens2, "light") },
2743
+ dark: { palette: buildPalette(tokensDark2, "dark") }
2871
2744
  }
2872
2745
  };
2873
2746
  }
2874
- function buildTheme(tokens) {
2875
- return (0, import_styles.createTheme)(buildThemeOptions(tokens));
2747
+ function buildTheme(tokens2, tokensDark2) {
2748
+ return (0, import_styles.createTheme)(buildThemeOptions(tokens2, tokensDark2));
2876
2749
  }
2877
2750
 
2878
- // src/theme/presets/forest-external.ts
2879
- var radius2 = {
2880
- ...radius,
2881
- xxs: 1,
2882
- xs: 2,
2883
- sm: 3,
2884
- md: 4,
2885
- lg: 5,
2886
- xl: 6,
2887
- "2xl": 8,
2888
- "3xl": 10,
2889
- "4xl": 12
2890
- };
2891
- var text2 = {
2892
- primary: gray[900],
2893
- secondary: gray[700],
2894
- secondaryHover: gray[800],
2895
- tertiary: gray[600],
2896
- tertiaryHover: gray[700],
2897
- quaternary: gray[500],
2898
- disabled: gray[500],
2899
- placeholder: gray[500],
2900
- placeholderSubtle: gray[300],
2901
- white: base.white,
2902
- brandPrimary: violet[900],
2903
- brandSecondary: violet[700],
2904
- brandTertiary: violet[600],
2905
- brandTertiaryAlt: violet[600],
2906
- primaryOnBrand: base.white,
2907
- secondaryOnBrand: violet[200],
2908
- tertiaryOnBrand: violet[200],
2909
- quaternaryOnBrand: violet[300],
2910
- errorPrimary: error[600],
2911
- warningPrimary: warning[600],
2912
- successPrimary: success[600]
2751
+ // src/theme/tokens.ts
2752
+ var violet = {
2753
+ 25: "#faf8ff",
2754
+ 50: "#f5f0ff",
2755
+ 100: "#ebe0ff",
2756
+ 200: "#d6c0ff",
2757
+ 300: "#b090ff",
2758
+ 400: "#9D5FFF",
2759
+ 500: "#7c4de6",
2760
+ 600: "#5b3acc",
2761
+ 700: "#3a1aad",
2762
+ 800: "#190a8a",
2763
+ 900: "#000066",
2764
+ 950: "#000033"
2913
2765
  };
2914
- var bg2 = {
2915
- primary: gray[50],
2916
- primaryAlt: gray[50],
2917
- primaryHover: gray[100],
2918
- primarySolid: gray[950],
2919
- secondary: base.white,
2920
- secondaryAlt: base.white,
2921
- secondarySubtle: gray[25],
2922
- secondaryHover: gray[50],
2923
- secondarySolid: gray[600],
2924
- tertiary: gray[100],
2925
- quaternary: gray[200],
2926
- active: gray[200],
2927
- disabled: gray[100],
2928
- disabledSubtle: gray[50],
2929
- overlay: gray[950],
2930
- brandPrimary: violet[50],
2931
- brandPrimaryAlt: violet[50],
2932
- brandSecondary: violet[100],
2933
- brandSolid: violet[400],
2934
- brandSolidHover: violet[500],
2935
- brandSection: violet[800],
2936
- brandSectionSubtle: violet[700],
2937
- errorPrimary: error[50],
2938
- errorSecondary: error[100],
2939
- errorSolid: error[600],
2940
- warningPrimary: warning[50],
2941
- warningSecondary: warning[100],
2942
- warningSolid: warning[600],
2943
- successPrimary: success[50],
2944
- successSecondary: success[100],
2945
- successSolid: success[600]
2766
+ var magenta = {
2767
+ 25: "#fff8fd",
2768
+ 50: "#fff0fa",
2769
+ 100: "#ffe0f5",
2770
+ 200: "#ffc0eb",
2771
+ 300: "#ff90d8",
2772
+ 400: "#FF78F3",
2773
+ 500: "#e650d4",
2774
+ 600: "#cc28b5",
2775
+ 700: "#a3008c",
2776
+ 800: "#7a0066",
2777
+ 900: "#520044",
2778
+ 950: "#290022"
2946
2779
  };
2947
- var fg2 = {
2948
- primary: gray[900],
2949
- secondary: gray[700],
2950
- secondaryHover: gray[800],
2951
- tertiary: gray[600],
2952
- tertiaryHover: gray[700],
2953
- quaternary: gray[500],
2954
- quaternaryHover: gray[600],
2955
- quinary: gray[400],
2956
- quinaryHover: gray[500],
2957
- senary: gray[300],
2958
- white: base.white,
2959
- disabled: gray[400],
2960
- disabledSubtle: gray[300],
2961
- brandPrimary: violet[400],
2962
- brandPrimaryAlt: violet[400],
2963
- brandSecondary: violet[400],
2964
- errorPrimary: error[600],
2965
- errorSecondary: error[500],
2966
- warningPrimary: warning[600],
2967
- warningSecondary: warning[500],
2968
- successPrimary: success[600],
2969
- successSecondary: success[500]
2780
+ var gray = {
2781
+ 25: "#fdfcfc",
2782
+ 50: "#faf9f8",
2783
+ 100: "#f5f3f1",
2784
+ 200: "#e8e5e3",
2785
+ 300: "#d8d8dc",
2786
+ 400: "#a0a0a6",
2787
+ 500: "#71717a",
2788
+ 600: "#52525b",
2789
+ 700: "#3f3f46",
2790
+ 800: "#27272a",
2791
+ 900: "#18181b",
2792
+ 950: "#09090b"
2970
2793
  };
2971
- var border2 = {
2972
- primary: gray[300],
2973
- secondary: gray[200],
2974
- tertiary: gray[100],
2975
- disabled: gray[300],
2976
- disabledSubtle: gray[200],
2977
- brand: violet[300],
2978
- brandSolid: violet[400],
2979
- brandSolidAlt: violet[400],
2980
- error: error[300],
2981
- errorSolid: error[600]
2794
+ var red = {
2795
+ 25: "#fff8f7",
2796
+ 50: "#fff0ee",
2797
+ 100: "#ffe0dd",
2798
+ 200: "#ffc0bb",
2799
+ 300: "#ff9090",
2800
+ 400: "#FF2821",
2801
+ 500: "#e61a1a",
2802
+ 600: "#cc1010",
2803
+ 700: "#a30808",
2804
+ 800: "#7a0000",
2805
+ 900: "#520000",
2806
+ 950: "#290000"
2982
2807
  };
2983
- var buttonColors2 = {
2984
- primary: {
2985
- bg: violet[400],
2986
- bgHover: violet[500],
2987
- fg: base.white,
2988
- fgHover: base.white,
2989
- border: violet[400],
2990
- borderHover: violet[500]
2808
+ var misc = {
2809
+ teal: {
2810
+ 25: "#f6fefc",
2811
+ 50: "#f0fdf9",
2812
+ 100: "#ccfbef",
2813
+ 200: "#99f6e0",
2814
+ 300: "#5fe9d0",
2815
+ 400: "#2ed3b7",
2816
+ 500: "#15b79e",
2817
+ 600: "#0e9384",
2818
+ 700: "#107569",
2819
+ 800: "#125d56",
2820
+ 900: "#134e48",
2821
+ 950: "#0a2926"
2991
2822
  },
2992
- secondary: {
2993
- bg: gray[900],
2994
- bgHover: gray[950],
2995
- fg: base.white,
2996
- fgHover: base.white,
2997
- border: gray[900],
2998
- borderHover: gray[950]
2823
+ orange: {
2824
+ 25: "#fefaf5",
2825
+ 50: "#fef6ee",
2826
+ 100: "#fdead7",
2827
+ 200: "#f9dbaf",
2828
+ 300: "#f7b27a",
2829
+ 400: "#f38744",
2830
+ 500: "#ef6820",
2831
+ 600: "#e04f16",
2832
+ 700: "#b93815",
2833
+ 800: "#932f19",
2834
+ 900: "#772917",
2835
+ 950: "#511c10"
2999
2836
  },
3000
- secondaryColor: {
3001
- bg: base.white,
3002
- bgHover: violet[50],
3003
- fg: violet[400],
3004
- fgHover: violet[500],
3005
- border: violet[300],
3006
- borderHover: violet[300]
2837
+ purple: {
2838
+ 25: "#fafaff",
2839
+ 50: "#f4f3ff",
2840
+ 100: "#ebe9fe",
2841
+ 200: "#d9d6fe",
2842
+ 300: "#bdb4fe",
2843
+ 400: "#9b8afb",
2844
+ 500: "#7a5af8",
2845
+ 600: "#6938ef",
2846
+ 700: "#5925dc",
2847
+ 800: "#4a1fb8",
2848
+ 900: "#3e1c96",
2849
+ 950: "#27115f"
2850
+ },
2851
+ pink: {
2852
+ 25: "#fef6fb",
2853
+ 50: "#fdf2fa",
2854
+ 100: "#fce7f6",
2855
+ 200: "#fcceee",
2856
+ 300: "#faa7e0",
2857
+ 400: "#f670c7",
2858
+ 500: "#ee46bc",
2859
+ 600: "#dd2590",
2860
+ 700: "#c11574",
2861
+ 800: "#9e165f",
2862
+ 900: "#851651",
2863
+ 950: "#4e0d30"
2864
+ },
2865
+ fuchsia: {
2866
+ 25: "#fefaff",
2867
+ 50: "#fdf4ff",
2868
+ 100: "#fbe8ff",
2869
+ 200: "#f6d0fe",
2870
+ 300: "#eeaafd",
2871
+ 400: "#e478fa",
2872
+ 500: "#d444f1",
2873
+ 600: "#ba24d5",
2874
+ 700: "#9f1ab1",
2875
+ 800: "#821890",
2876
+ 900: "#6f1877",
2877
+ 950: "#47104c"
2878
+ },
2879
+ orangeDark: {
2880
+ 25: "#fff9f5",
2881
+ 50: "#fff4ed",
2882
+ 100: "#ffe6d5",
2883
+ 200: "#ffd6ae",
2884
+ 300: "#ff9c66",
2885
+ 400: "#ff692e",
2886
+ 500: "#ff4405",
2887
+ 600: "#e62e05",
2888
+ 700: "#bc1b06",
2889
+ 800: "#97180c",
2890
+ 900: "#771a0d",
2891
+ 950: "#57130a"
3007
2892
  },
3008
- tertiary: {
3009
- fg: gray[600],
3010
- fgHover: gray[700],
3011
- bgHover: gray[50]
2893
+ green: {
2894
+ 25: "#f6fef9",
2895
+ 50: "#edfcf2",
2896
+ 100: "#d3f8df",
2897
+ 200: "#aaf0c4",
2898
+ 300: "#73e2a3",
2899
+ 400: "#3ccb7f",
2900
+ 500: "#16b364",
2901
+ 600: "#099250",
2902
+ 700: "#087443",
2903
+ 800: "#095c37",
2904
+ 900: "#084c2e",
2905
+ 950: "#052e1c"
3012
2906
  },
3013
- tertiaryColor: {
3014
- fg: violet[400],
3015
- fgHover: violet[500],
3016
- bgHover: violet[50]
2907
+ indigo: {
2908
+ 25: "#f5f8ff",
2909
+ 50: "#eef4ff",
2910
+ 100: "#e0eaff",
2911
+ 200: "#c7d7fe",
2912
+ 300: "#a4bcfd",
2913
+ 400: "#8098f9",
2914
+ 500: "#6172f3",
2915
+ 600: "#444ce7",
2916
+ 700: "#3538cd",
2917
+ 800: "#2d31a6",
2918
+ 900: "#2d3282",
2919
+ 950: "#1f235b"
3017
2920
  },
3018
- primaryError: {
3019
- bg: error[600],
3020
- bgHover: error[700],
3021
- fg: base.white,
3022
- fgHover: base.white,
3023
- border: error[600],
3024
- borderHover: error[700]
2921
+ rose: {
2922
+ 25: "#fff5f6",
2923
+ 50: "#fff1f3",
2924
+ 100: "#ffe4e8",
2925
+ 200: "#fecdd6",
2926
+ 300: "#fea3b4",
2927
+ 400: "#fd6f8e",
2928
+ 500: "#f63d68",
2929
+ 600: "#e31b54",
2930
+ 700: "#c01048",
2931
+ 800: "#a11043",
2932
+ 900: "#89123e",
2933
+ 950: "#510b24"
3025
2934
  },
3026
- secondaryError: {
3027
- bg: base.white,
3028
- bgHover: error[50],
3029
- fg: error[700],
3030
- fgHover: error[800],
3031
- border: error[300],
3032
- borderHover: error[300]
2935
+ blueLight: {
2936
+ 25: "#f5fbff",
2937
+ 50: "#f0f9ff",
2938
+ 100: "#e0f2fe",
2939
+ 200: "#b9e6fe",
2940
+ 300: "#7cd4fd",
2941
+ 400: "#36bffa",
2942
+ 500: "#0ba5ec",
2943
+ 600: "#0086c9",
2944
+ 700: "#026aa2",
2945
+ 800: "#065986",
2946
+ 900: "#0b4a6f",
2947
+ 950: "#062c41"
3033
2948
  },
3034
- tertiaryError: {
3035
- fg: error[700],
3036
- fgHover: error[800],
3037
- bgHover: error[50]
2949
+ cyan: {
2950
+ 25: "#f5feff",
2951
+ 50: "#ecfdff",
2952
+ 100: "#cff9fe",
2953
+ 200: "#a5f0fc",
2954
+ 300: "#67e3f9",
2955
+ 400: "#22ccee",
2956
+ 500: "#06aed4",
2957
+ 600: "#088ab2",
2958
+ 700: "#0e7090",
2959
+ 800: "#155b75",
2960
+ 900: "#164c63",
2961
+ 950: "#0d2d3a"
3038
2962
  }
3039
2963
  };
3040
- var avatarColors2 = {
3041
- bg: gray[100],
3042
- contrastBorder: "#00000014",
3043
- profilePhotoBorder: base.white,
3044
- focusBorder: "#a0a0a624"
3045
- // gray[400] + 14% alpha
2964
+ var base = {
2965
+ white: "#ffffff",
2966
+ black: "#000000",
2967
+ transparent: "#ffffff00"
3046
2968
  };
3047
- var breadcrumbColors2 = {
3048
- fg: gray[600],
3049
- fgHover: gray[700],
3050
- bgHover: gray[50],
3051
- brandBgHover: violet[50],
3052
- brandFgHover: violet[700],
3053
- iconFg: gray[500],
3054
- iconFgHover: gray[700],
3055
- brandIconFgHover: violet[700]
2969
+ var error = {
2970
+ 25: "#fffbfa",
2971
+ 50: "#fef3f2",
2972
+ 100: "#fee4e2",
2973
+ 200: "#fecdca",
2974
+ 300: "#fda29b",
2975
+ 400: "#f97066",
2976
+ 500: "#f04438",
2977
+ 600: "#d92d20",
2978
+ 700: "#b42318",
2979
+ 800: "#912018",
2980
+ 900: "#7a271a",
2981
+ 950: "#55160c"
3056
2982
  };
3057
- var iconColors2 = {
3058
- fgBrand: violet[400],
3059
- fgBrandOnBrand: violet[200],
3060
- featuredModernBorder: gray[200],
3061
- featuredLightFgBrand: violet[400],
3062
- featuredLightFgGray: gray[500],
3063
- featuredLightFgError: error[600],
3064
- featuredLightFgWarning: warning[600],
3065
- featuredLightFgSuccess: success[600],
3066
- featuredDarkFgBrand: base.white,
3067
- featuredDarkFgGray: base.white,
3068
- featuredDarkFgError: base.white,
3069
- featuredDarkFgWarning: base.white,
3070
- featuredDarkFgSuccess: base.white
2983
+ var warning = {
2984
+ 25: "#fffcf5",
2985
+ 50: "#fffaeb",
2986
+ 100: "#fef0c7",
2987
+ 200: "#fedf89",
2988
+ 300: "#fec84b",
2989
+ 400: "#fdb022",
2990
+ 500: "#f79009",
2991
+ 600: "#dc6803",
2992
+ 700: "#b54708",
2993
+ 800: "#93370d",
2994
+ 900: "#7a2e0e",
2995
+ 950: "#4e1d09"
3071
2996
  };
3072
- var navColors2 = {
3073
- itemIconFg: gray[500],
3074
- itemIconFgActive: gray[700],
3075
- itemButtonIconFg: gray[500],
3076
- itemButtonIconFgActive: gray[700]
2997
+ var success = {
2998
+ 25: "#f6fef9",
2999
+ 50: "#ecfdf3",
3000
+ 100: "#dcfae6",
3001
+ 200: "#abefc6",
3002
+ 300: "#75e0a7",
3003
+ 400: "#47cd89",
3004
+ 500: "#17b26a",
3005
+ 600: "#079455",
3006
+ 700: "#067647",
3007
+ 800: "#085d3a",
3008
+ 900: "#074d31",
3009
+ 950: "#053321"
3077
3010
  };
3078
- var sliderColors2 = {
3079
- handleBorder: violet[400],
3080
- handleBg: base.white
3011
+ var info = {
3012
+ 25: "#f5faff",
3013
+ 50: "#eff8ff",
3014
+ 100: "#d1e9ff",
3015
+ 200: "#b2ddff",
3016
+ 300: "#84caff",
3017
+ 400: "#53b1fd",
3018
+ 500: "#2e90fa",
3019
+ 600: "#1570ef",
3020
+ 700: "#175cd3",
3021
+ 800: "#1849a9",
3022
+ 900: "#194185",
3023
+ 950: "#102a56"
3081
3024
  };
3082
- var toggleColors2 = {
3083
- buttonFgDisabled: gray[50]
3025
+ var spacing = {
3026
+ none: 0,
3027
+ xxs: 2,
3028
+ xs: 4,
3029
+ sm: 6,
3030
+ md: 8,
3031
+ lg: 12,
3032
+ xl: 16,
3033
+ "2xl": 20,
3034
+ "3xl": 24,
3035
+ "4xl": 32,
3036
+ "5xl": 40,
3037
+ "6xl": 48,
3038
+ "7xl": 64,
3039
+ "8xl": 80,
3040
+ "9xl": 96,
3041
+ "10xl": 128,
3042
+ "11xl": 160
3084
3043
  };
3085
- var chartColors2 = {
3086
- axisFg: gray[100],
3087
- gridlineFg: gray[100],
3088
- labelFg: gray[600],
3089
- labelFgEmphasis: gray[700],
3090
- bg: base.white,
3091
- bgAlt: gray[50],
3092
- tooltipBg: gray[950],
3093
- tooltipFg: base.white,
3094
- crosshairFg: gray[500],
3095
- legendFg: text2.tertiary,
3096
- series: [
3097
- { fg: misc.purple[500], fgHover: misc.purple[600], bg: misc.purple[100], bgHover: misc.purple[200] },
3098
- { fg: misc.orangeDark[400], fgHover: misc.orangeDark[500], bg: misc.orangeDark[100], bgHover: misc.orangeDark[200] },
3099
- { fg: misc.teal[300], fgHover: misc.teal[400], bg: misc.teal[50], bgHover: misc.teal[100] },
3100
- { fg: warning[400], fgHover: warning[500], bg: warning[100], bgHover: warning[200] },
3101
- { fg: misc.rose[400], fgHover: misc.rose[500], bg: misc.rose[100], bgHover: misc.rose[200] },
3102
- { fg: misc.blueLight[400], fgHover: misc.blueLight[500], bg: misc.blueLight[100], bgHover: misc.blueLight[200] },
3103
- { fg: misc.orange[300], fgHover: misc.orange[400], bg: misc.orange[100], bgHover: misc.orange[200] },
3104
- { fg: misc.cyan[600], fgHover: misc.cyan[700], bg: misc.cyan[100], bgHover: misc.cyan[200] },
3105
- { fg: misc.green[500], fgHover: misc.green[600], bg: misc.green[100], bgHover: misc.green[200] },
3106
- { fg: misc.pink[400], fgHover: misc.pink[500], bg: misc.pink[100], bgHover: misc.pink[200] },
3107
- { fg: misc.fuchsia[400], fgHover: misc.fuchsia[500], bg: misc.fuchsia[100], bgHover: misc.fuchsia[200] },
3108
- { fg: misc.teal[600], fgHover: misc.teal[700], bg: misc.teal[100], bgHover: misc.teal[200] }
3109
- ]
3044
+ var radius = {
3045
+ none: 0,
3046
+ xxs: 2,
3047
+ xs: 4,
3048
+ sm: 6,
3049
+ md: 8,
3050
+ lg: 10,
3051
+ xl: 12,
3052
+ "2xl": 16,
3053
+ "3xl": 20,
3054
+ "4xl": 24,
3055
+ full: 9999
3110
3056
  };
3111
- var focusRings2 = {
3112
- brand: "0px 0px 0px 4px #9D5FFF3d",
3113
- brandShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #9D5FFF3d",
3114
- brandShadowSm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f, 0px 0px 0px 4px #9D5FFF3d",
3057
+ var shadows = {
3058
+ xs: "0px 1px 2px 0px #1018280d",
3059
+ sm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f",
3060
+ md: "0px 4px 8px -2px #1018281a, 0px 2px 4px -2px #1018280f",
3061
+ lg: "0px 12px 16px -4px #10182814, 0px 4px 6px -2px #10182808",
3062
+ xl: "0px 20px 24px -4px #10182814, 0px 8px 8px -4px #10182808",
3063
+ "2xl": "0px 24px 48px -12px #1018282e",
3064
+ "3xl": "0px 32px 64px -12px #10182824"
3065
+ };
3066
+ var focusRings = {
3067
+ brand: "0px 0px 0px 4px #7c4de63d",
3068
+ brandShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #7c4de63d",
3069
+ brandShadowSm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f, 0px 0px 0px 4px #7c4de63d",
3115
3070
  gray: "0px 0px 0px 4px #a0a0a624",
3116
3071
  grayShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #a0a0a624",
3117
3072
  grayShadowSm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f, 0px 0px 0px 4px #a0a0a624",
3118
3073
  error: "0px 0px 0px 4px #f044383d",
3119
3074
  errorShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #f044383d"
3120
3075
  };
3121
- var forestExternalPreset = {
3122
- name: "forest-external",
3123
- defaultVariant: "light",
3124
- variants: {
3125
- light: {
3126
- tokens: {
3127
- base,
3128
- error,
3129
- warning,
3130
- success,
3131
- info,
3132
- spacing,
3133
- radius: radius2,
3134
- shadows,
3135
- focusRings: focusRings2,
3136
- fontFamily: '"Aeonik", sans-serif',
3137
- fontFamilyMono: '"Aeonik Mono", monospace',
3138
- fontSize,
3139
- lineHeight,
3140
- fontWeight,
3141
- display,
3142
- container,
3143
- widths,
3144
- text: text2,
3145
- bg: bg2,
3146
- fg: fg2,
3147
- border: border2,
3148
- buttonColors: buttonColors2,
3149
- avatarColors: avatarColors2,
3150
- breadcrumbColors: breadcrumbColors2,
3151
- iconColors: iconColors2,
3152
- navColors: navColors2,
3153
- sliderColors: sliderColors2,
3154
- toggleColors: toggleColors2,
3155
- chartColors: chartColors2,
3156
- alpha
3157
- }
3158
- }
3159
- }
3076
+ var fontFamily = '"Aeonik", sans-serif';
3077
+ var fontFamilyMono = '"Aeonik Mono", monospace';
3078
+ var fontSize = {
3079
+ xxs: 11,
3080
+ xs: 12,
3081
+ sm: 14,
3082
+ md: 16,
3083
+ lg: 18,
3084
+ xl: 20
3160
3085
  };
3161
-
3162
- // src/theme/presets/forest-agency.ts
3163
- var colors = {
3164
- base,
3165
- error,
3166
- warning,
3167
- success,
3168
- info,
3169
- brand: {
3170
- 25: gray[25],
3171
- 50: gray[50],
3172
- 100: gray[100],
3173
- 200: gray[200],
3174
- 300: gray[300],
3175
- 400: gray[400],
3176
- 500: gray[500],
3177
- 600: gray[900],
3178
- // #18181b - dark brand
3179
- 700: gray[950],
3180
- // #09090b - primary brand
3181
- 800: gray[950],
3182
- 900: gray[950],
3183
- 950: gray[950]
3184
- },
3185
- accent: red,
3186
- gray
3086
+ var lineHeight = {
3087
+ xxs: "16px",
3088
+ xs: "18px",
3089
+ sm: "20px",
3090
+ md: "24px",
3091
+ lg: "28px",
3092
+ xl: "30px"
3187
3093
  };
3188
- var radius3 = {
3189
- ...radius,
3190
- xxs: 1,
3191
- xs: 2,
3192
- sm: 3,
3193
- md: 4,
3194
- lg: 5,
3195
- xl: 6,
3196
- "2xl": 8,
3197
- "3xl": 10,
3198
- "4xl": 12
3094
+ var fontWeight = {
3095
+ regular: 400,
3096
+ medium: 500,
3097
+ semibold: 600,
3098
+ bold: 700
3199
3099
  };
3200
- var text3 = {
3100
+ var display = {
3101
+ "2xl": { fontSize: 72, lineHeight: "90px", letterSpacing: "-0.02em" },
3102
+ xl: { fontSize: 60, lineHeight: "72px", letterSpacing: "-0.02em" },
3103
+ lg: { fontSize: 48, lineHeight: "60px", letterSpacing: "-0.02em" },
3104
+ md: { fontSize: 36, lineHeight: "44px", letterSpacing: "-0.02em" },
3105
+ sm: { fontSize: 30, lineHeight: "38px" },
3106
+ xs: { fontSize: 24, lineHeight: "32px" }
3107
+ };
3108
+ var container = {
3109
+ maxWidthDesktop: 1280,
3110
+ paddingDesktop: 32,
3111
+ paddingMobile: 16
3112
+ };
3113
+ var widths = {
3114
+ xxs: 320,
3115
+ xs: 384,
3116
+ sm: 480,
3117
+ md: 560,
3118
+ lg: 640,
3119
+ xl: 768,
3120
+ "2xl": 1024,
3121
+ "3xl": 1280,
3122
+ "4xl": 1440,
3123
+ "5xl": 1600,
3124
+ "6xl": 1920
3125
+ };
3126
+ var text = {
3201
3127
  primary: gray[900],
3202
3128
  secondary: gray[700],
3203
3129
  secondaryHover: gray[800],
@@ -3208,19 +3134,19 @@ var text3 = {
3208
3134
  placeholder: gray[500],
3209
3135
  placeholderSubtle: gray[300],
3210
3136
  white: base.white,
3211
- brandPrimary: colors.brand[900],
3212
- brandSecondary: colors.brand[700],
3213
- brandTertiary: colors.brand[600],
3214
- brandTertiaryAlt: colors.brand[600],
3137
+ brandPrimary: violet[900],
3138
+ brandSecondary: violet[700],
3139
+ brandTertiary: violet[600],
3140
+ brandTertiaryAlt: violet[600],
3215
3141
  primaryOnBrand: base.white,
3216
- secondaryOnBrand: colors.brand[200],
3217
- tertiaryOnBrand: colors.brand[200],
3218
- quaternaryOnBrand: colors.brand[300],
3142
+ secondaryOnBrand: violet[200],
3143
+ tertiaryOnBrand: violet[200],
3144
+ quaternaryOnBrand: violet[300],
3219
3145
  errorPrimary: error[600],
3220
3146
  warningPrimary: warning[600],
3221
3147
  successPrimary: success[600]
3222
3148
  };
3223
- var bg3 = {
3149
+ var bg = {
3224
3150
  primary: gray[50],
3225
3151
  primaryAlt: gray[50],
3226
3152
  primaryHover: gray[100],
@@ -3236,13 +3162,13 @@ var bg3 = {
3236
3162
  disabled: gray[100],
3237
3163
  disabledSubtle: gray[50],
3238
3164
  overlay: gray[950],
3239
- brandPrimary: colors.brand[50],
3240
- brandPrimaryAlt: colors.brand[50],
3241
- brandSecondary: colors.brand[100],
3242
- brandSolid: colors.brand[600],
3243
- brandSolidHover: colors.brand[700],
3244
- brandSection: colors.brand[800],
3245
- brandSectionSubtle: colors.brand[700],
3165
+ brandPrimary: violet[50],
3166
+ brandPrimaryAlt: violet[50],
3167
+ brandSecondary: violet[100],
3168
+ brandSolid: violet[600],
3169
+ brandSolidHover: violet[700],
3170
+ brandSection: violet[800],
3171
+ brandSectionSubtle: violet[700],
3246
3172
  errorPrimary: error[50],
3247
3173
  errorSecondary: error[100],
3248
3174
  errorSolid: error[600],
@@ -3253,7 +3179,7 @@ var bg3 = {
3253
3179
  successSecondary: success[100],
3254
3180
  successSolid: success[600]
3255
3181
  };
3256
- var fg3 = {
3182
+ var fg = {
3257
3183
  primary: gray[900],
3258
3184
  secondary: gray[700],
3259
3185
  secondaryHover: gray[800],
@@ -3267,9 +3193,9 @@ var fg3 = {
3267
3193
  white: base.white,
3268
3194
  disabled: gray[400],
3269
3195
  disabledSubtle: gray[300],
3270
- brandPrimary: colors.brand[600],
3271
- brandPrimaryAlt: colors.brand[600],
3272
- brandSecondary: colors.brand[500],
3196
+ brandPrimary: violet[600],
3197
+ brandPrimaryAlt: violet[600],
3198
+ brandSecondary: violet[500],
3273
3199
  errorPrimary: error[600],
3274
3200
  errorSecondary: error[500],
3275
3201
  warningPrimary: warning[600],
@@ -3277,26 +3203,26 @@ var fg3 = {
3277
3203
  successPrimary: success[600],
3278
3204
  successSecondary: success[500]
3279
3205
  };
3280
- var border3 = {
3206
+ var border = {
3281
3207
  primary: gray[300],
3282
3208
  secondary: gray[200],
3283
3209
  tertiary: gray[100],
3284
3210
  disabled: gray[300],
3285
3211
  disabledSubtle: gray[200],
3286
- brand: gray[400],
3287
- brandSolid: colors.brand[600],
3288
- brandSolidAlt: colors.brand[600],
3212
+ brand: violet[300],
3213
+ brandSolid: violet[600],
3214
+ brandSolidAlt: violet[600],
3289
3215
  error: error[300],
3290
3216
  errorSolid: error[600]
3291
3217
  };
3292
- var buttonColors3 = {
3218
+ var buttonColors = {
3293
3219
  primary: {
3294
- bg: colors.brand[700],
3295
- bgHover: colors.brand[800],
3220
+ bg: violet[600],
3221
+ bgHover: violet[700],
3296
3222
  fg: base.white,
3297
3223
  fgHover: base.white,
3298
- border: colors.brand[700],
3299
- borderHover: colors.brand[800]
3224
+ border: violet[600],
3225
+ borderHover: violet[700]
3300
3226
  },
3301
3227
  secondary: {
3302
3228
  bg: gray[900],
@@ -3308,11 +3234,11 @@ var buttonColors3 = {
3308
3234
  },
3309
3235
  secondaryColor: {
3310
3236
  bg: base.white,
3311
- bgHover: colors.brand[50],
3312
- fg: colors.brand[700],
3313
- fgHover: colors.brand[800],
3314
- border: colors.brand[300],
3315
- borderHover: colors.brand[300]
3237
+ bgHover: violet[50],
3238
+ fg: violet[700],
3239
+ fgHover: violet[800],
3240
+ border: violet[300],
3241
+ borderHover: violet[300]
3316
3242
  },
3317
3243
  tertiary: {
3318
3244
  fg: gray[600],
@@ -3320,9 +3246,9 @@ var buttonColors3 = {
3320
3246
  bgHover: gray[50]
3321
3247
  },
3322
3248
  tertiaryColor: {
3323
- fg: colors.brand[700],
3324
- fgHover: colors.brand[800],
3325
- bgHover: colors.brand[50]
3249
+ fg: violet[700],
3250
+ fgHover: violet[800],
3251
+ bgHover: violet[50]
3326
3252
  },
3327
3253
  primaryError: {
3328
3254
  bg: error[600],
@@ -3346,28 +3272,28 @@ var buttonColors3 = {
3346
3272
  bgHover: error[50]
3347
3273
  }
3348
3274
  };
3349
- var avatarColors3 = {
3275
+ var avatarColors = {
3350
3276
  bg: gray[100],
3277
+ fg: gray[600],
3351
3278
  contrastBorder: "#00000014",
3352
3279
  profilePhotoBorder: base.white,
3353
3280
  focusBorder: "#a0a0a624"
3354
- // gray[400] + 14% alpha
3355
3281
  };
3356
- var breadcrumbColors3 = {
3282
+ var breadcrumbColors = {
3357
3283
  fg: gray[600],
3358
3284
  fgHover: gray[700],
3359
3285
  bgHover: gray[50],
3360
- brandBgHover: colors.brand[50],
3361
- brandFgHover: colors.brand[700],
3286
+ brandBgHover: violet[50],
3287
+ brandFgHover: violet[700],
3362
3288
  iconFg: gray[500],
3363
3289
  iconFgHover: gray[700],
3364
- brandIconFgHover: colors.brand[700]
3290
+ brandIconFgHover: violet[700]
3365
3291
  };
3366
- var iconColors3 = {
3367
- fgBrand: colors.brand[600],
3368
- fgBrandOnBrand: colors.brand[200],
3292
+ var iconColors = {
3293
+ fgBrand: violet[600],
3294
+ fgBrandOnBrand: violet[200],
3369
3295
  featuredModernBorder: gray[200],
3370
- featuredLightFgBrand: colors.brand[600],
3296
+ featuredLightFgBrand: violet[600],
3371
3297
  featuredLightFgGray: gray[500],
3372
3298
  featuredLightFgError: error[600],
3373
3299
  featuredLightFgWarning: warning[600],
@@ -3378,20 +3304,20 @@ var iconColors3 = {
3378
3304
  featuredDarkFgWarning: base.white,
3379
3305
  featuredDarkFgSuccess: base.white
3380
3306
  };
3381
- var navColors3 = {
3307
+ var navColors = {
3382
3308
  itemIconFg: gray[500],
3383
3309
  itemIconFgActive: gray[700],
3384
3310
  itemButtonIconFg: gray[500],
3385
3311
  itemButtonIconFgActive: gray[700]
3386
3312
  };
3387
- var sliderColors3 = {
3388
- handleBorder: colors.brand[600],
3313
+ var sliderColors = {
3314
+ handleBorder: violet[600],
3389
3315
  handleBg: base.white
3390
3316
  };
3391
- var toggleColors3 = {
3317
+ var toggleColors = {
3392
3318
  buttonFgDisabled: gray[50]
3393
3319
  };
3394
- var chartColors3 = {
3320
+ var chartColors = {
3395
3321
  axisFg: gray[100],
3396
3322
  gridlineFg: gray[100],
3397
3323
  labelFg: gray[600],
@@ -3401,7 +3327,7 @@ var chartColors3 = {
3401
3327
  tooltipBg: gray[950],
3402
3328
  tooltipFg: base.white,
3403
3329
  crosshairFg: gray[500],
3404
- legendFg: text3.tertiary,
3330
+ legendFg: text.tertiary,
3405
3331
  series: [
3406
3332
  { fg: misc.purple[500], fgHover: misc.purple[600], bg: misc.purple[100], bgHover: misc.purple[200] },
3407
3333
  { fg: misc.orangeDark[400], fgHover: misc.orangeDark[500], bg: misc.orangeDark[100], bgHover: misc.orangeDark[200] },
@@ -3417,59 +3343,36 @@ var chartColors3 = {
3417
3343
  { fg: misc.teal[600], fgHover: misc.teal[700], bg: misc.teal[100], bgHover: misc.teal[200] }
3418
3344
  ]
3419
3345
  };
3420
- var focusRings3 = {
3421
- brand: "0px 0px 0px 4px #4040403d",
3422
- brandShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #4040403d",
3423
- brandShadowSm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f, 0px 0px 0px 4px #4040403d",
3424
- gray: "0px 0px 0px 4px #a0a0a624",
3425
- grayShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #a0a0a624",
3426
- grayShadowSm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f, 0px 0px 0px 4px #a0a0a624",
3427
- error: "0px 0px 0px 4px #f044383d",
3428
- errorShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #f044383d"
3429
- };
3430
- var forestAgencyPreset = {
3431
- name: "forest-agency",
3432
- defaultVariant: "light",
3433
- variants: {
3434
- light: {
3435
- tokens: {
3436
- base,
3437
- error,
3438
- warning,
3439
- success,
3440
- info,
3441
- spacing,
3442
- radius: radius3,
3443
- shadows,
3444
- focusRings: focusRings3,
3445
- fontFamily: '"Aeonik", sans-serif',
3446
- fontFamilyMono: '"Aeonik Mono", monospace',
3447
- fontSize,
3448
- lineHeight,
3449
- fontWeight,
3450
- display,
3451
- container,
3452
- widths,
3453
- text: text3,
3454
- bg: bg3,
3455
- fg: fg3,
3456
- border: border3,
3457
- buttonColors: buttonColors3,
3458
- avatarColors: avatarColors3,
3459
- breadcrumbColors: breadcrumbColors3,
3460
- iconColors: iconColors3,
3461
- navColors: navColors3,
3462
- sliderColors: sliderColors3,
3463
- toggleColors: toggleColors3,
3464
- chartColors: chartColors3,
3465
- alpha
3466
- }
3467
- }
3346
+ var alpha = {
3347
+ white: {
3348
+ 10: "#ffffff1a",
3349
+ 20: "#ffffff33",
3350
+ 30: "#ffffff4d",
3351
+ 40: "#ffffff66",
3352
+ 50: "#ffffff80",
3353
+ 60: "#ffffff99",
3354
+ 70: "#ffffffb3",
3355
+ 80: "#ffffffcc",
3356
+ 90: "#ffffffe6",
3357
+ 100: "#ffffff"
3358
+ },
3359
+ black: {
3360
+ 10: "#0000001a",
3361
+ 20: "#00000033",
3362
+ 30: "#0000004d",
3363
+ 40: "#00000066",
3364
+ 50: "#00000080",
3365
+ 60: "#00000099",
3366
+ 70: "#000000b3",
3367
+ 80: "#000000cc",
3368
+ 90: "#000000e6",
3369
+ 100: "#000000"
3468
3370
  }
3469
3371
  };
3470
3372
 
3471
- // src/theme/presets/forest-internal.ts
3472
- var radius4 = {
3373
+ // src/theme/presets/forest-alkemy-plus.dark.ts
3374
+ var highlight = magenta;
3375
+ var radius2 = {
3473
3376
  ...radius,
3474
3377
  xxs: 1,
3475
3378
  xs: 2,
@@ -3481,286 +3384,298 @@ var radius4 = {
3481
3384
  "3xl": 10,
3482
3385
  "4xl": 12
3483
3386
  };
3484
- var text4 = {
3485
- primary: gray[900],
3486
- secondary: gray[700],
3487
- secondaryHover: gray[800],
3488
- tertiary: gray[600],
3489
- tertiaryHover: gray[700],
3387
+ var text2 = {
3388
+ primary: gray[50],
3389
+ secondary: gray[300],
3390
+ secondaryHover: gray[200],
3391
+ tertiary: gray[400],
3392
+ tertiaryHover: gray[300],
3490
3393
  quaternary: gray[500],
3491
- disabled: gray[500],
3394
+ disabled: gray[600],
3492
3395
  placeholder: gray[500],
3493
- placeholderSubtle: gray[300],
3396
+ placeholderSubtle: gray[600],
3494
3397
  white: base.white,
3495
- brandPrimary: magenta[900],
3496
- brandSecondary: magenta[700],
3497
- brandTertiary: magenta[600],
3498
- brandTertiaryAlt: magenta[600],
3499
- primaryOnBrand: base.white,
3500
- secondaryOnBrand: magenta[200],
3501
- tertiaryOnBrand: magenta[200],
3502
- quaternaryOnBrand: magenta[300],
3503
- errorPrimary: error[600],
3504
- warningPrimary: warning[600],
3505
- successPrimary: success[600]
3398
+ // Greyscale brand text (light neutral on the dark page).
3399
+ brandPrimary: gray[50],
3400
+ brandSecondary: gray[200],
3401
+ brandTertiary: gray[300],
3402
+ brandTertiaryAlt: gray[300],
3403
+ // "onBrand" text sits on the LIGHT-grey brand surface -> it must be dark.
3404
+ primaryOnBrand: gray[950],
3405
+ secondaryOnBrand: gray[700],
3406
+ tertiaryOnBrand: gray[700],
3407
+ quaternaryOnBrand: gray[600],
3408
+ errorPrimary: error[400],
3409
+ warningPrimary: warning[400],
3410
+ successPrimary: success[400]
3506
3411
  };
3507
- var bg4 = {
3508
- primary: gray[50],
3509
- primaryAlt: gray[50],
3510
- primaryHover: gray[100],
3511
- primarySolid: gray[950],
3512
- secondary: base.white,
3513
- secondaryAlt: base.white,
3514
- secondarySubtle: gray[25],
3515
- secondaryHover: gray[50],
3516
- secondarySolid: gray[600],
3517
- tertiary: gray[100],
3518
- quaternary: gray[200],
3519
- active: gray[200],
3520
- disabled: gray[100],
3521
- disabledSubtle: gray[50],
3412
+ var bg2 = {
3413
+ primary: gray[950],
3414
+ primaryAlt: gray[950],
3415
+ primaryHover: gray[900],
3416
+ primarySolid: gray[50],
3417
+ secondary: gray[900],
3418
+ secondaryAlt: gray[900],
3419
+ secondarySubtle: gray[900],
3420
+ secondaryHover: gray[800],
3421
+ secondarySolid: gray[300],
3422
+ tertiary: gray[800],
3423
+ quaternary: gray[700],
3424
+ active: gray[700],
3425
+ disabled: gray[800],
3426
+ disabledSubtle: gray[900],
3522
3427
  overlay: gray[950],
3523
- brandPrimary: magenta[50],
3524
- brandPrimaryAlt: magenta[50],
3525
- brandSecondary: magenta[100],
3526
- brandSolid: magenta[400],
3527
- brandSolidHover: magenta[500],
3528
- brandSection: magenta[800],
3529
- brandSectionSubtle: magenta[700],
3530
- errorPrimary: error[50],
3531
- errorSecondary: error[100],
3428
+ // Greyscale brand surfaces: subtle brand bg is a dark grey; the solid brand
3429
+ // face is a LIGHT grey (mirrors light's charcoal solid).
3430
+ brandPrimary: gray[800],
3431
+ brandPrimaryAlt: gray[800],
3432
+ brandSecondary: gray[700],
3433
+ brandSolid: gray[100],
3434
+ brandSolidHover: gray[200],
3435
+ brandSection: gray[900],
3436
+ brandSectionSubtle: gray[800],
3437
+ errorPrimary: error[950],
3438
+ errorSecondary: error[900],
3532
3439
  errorSolid: error[600],
3533
- warningPrimary: warning[50],
3534
- warningSecondary: warning[100],
3440
+ warningPrimary: warning[950],
3441
+ warningSecondary: warning[900],
3535
3442
  warningSolid: warning[600],
3536
- successPrimary: success[50],
3537
- successSecondary: success[100],
3443
+ successPrimary: success[950],
3444
+ successSecondary: success[900],
3538
3445
  successSolid: success[600]
3539
3446
  };
3540
- var fg4 = {
3541
- primary: gray[900],
3542
- secondary: gray[700],
3543
- secondaryHover: gray[800],
3544
- tertiary: gray[600],
3545
- tertiaryHover: gray[700],
3447
+ var fg2 = {
3448
+ primary: gray[50],
3449
+ secondary: gray[300],
3450
+ secondaryHover: gray[200],
3451
+ tertiary: gray[400],
3452
+ tertiaryHover: gray[300],
3546
3453
  quaternary: gray[500],
3547
- quaternaryHover: gray[600],
3548
- quinary: gray[400],
3549
- quinaryHover: gray[500],
3550
- senary: gray[300],
3454
+ quaternaryHover: gray[400],
3455
+ quinary: gray[500],
3456
+ quinaryHover: gray[400],
3457
+ senary: gray[600],
3551
3458
  white: base.white,
3552
- disabled: gray[400],
3553
- disabledSubtle: gray[300],
3554
- brandPrimary: magenta[400],
3555
- brandPrimaryAlt: magenta[400],
3556
- brandSecondary: magenta[400],
3557
- errorPrimary: error[600],
3459
+ disabled: gray[600],
3460
+ disabledSubtle: gray[700],
3461
+ brandPrimary: gray[100],
3462
+ brandPrimaryAlt: gray[100],
3463
+ brandSecondary: gray[300],
3464
+ errorPrimary: error[400],
3558
3465
  errorSecondary: error[500],
3559
- warningPrimary: warning[600],
3466
+ warningPrimary: warning[400],
3560
3467
  warningSecondary: warning[500],
3561
- successPrimary: success[600],
3468
+ successPrimary: success[400],
3562
3469
  successSecondary: success[500]
3563
3470
  };
3564
- var border4 = {
3565
- primary: gray[300],
3566
- secondary: gray[200],
3567
- tertiary: gray[100],
3568
- disabled: gray[300],
3569
- disabledSubtle: gray[200],
3570
- brand: magenta[300],
3571
- brandSolid: magenta[400],
3572
- brandSolidAlt: magenta[400],
3573
- error: error[300],
3471
+ var border2 = {
3472
+ primary: gray[700],
3473
+ secondary: gray[800],
3474
+ tertiary: gray[800],
3475
+ disabled: gray[700],
3476
+ disabledSubtle: gray[800],
3477
+ brand: gray[600],
3478
+ brandSolid: gray[100],
3479
+ brandSolidAlt: gray[100],
3480
+ error: error[800],
3574
3481
  errorSolid: error[600]
3575
3482
  };
3576
- var buttonColors4 = {
3483
+ var buttonColors2 = {
3577
3484
  primary: {
3578
- bg: magenta[400],
3579
- bgHover: magenta[500],
3580
- fg: base.white,
3581
- fgHover: base.white,
3582
- border: magenta[400],
3583
- borderHover: magenta[500]
3485
+ bg: gray[100],
3486
+ bgHover: gray[200],
3487
+ fg: gray[950],
3488
+ fgHover: gray[950],
3489
+ border: gray[100],
3490
+ borderHover: gray[200]
3584
3491
  },
3585
3492
  secondary: {
3586
- bg: gray[900],
3587
- bgHover: gray[950],
3588
- fg: base.white,
3589
- fgHover: base.white,
3590
- border: gray[900],
3591
- borderHover: gray[950]
3493
+ bg: gray[100],
3494
+ bgHover: base.white,
3495
+ fg: gray[900],
3496
+ fgHover: gray[950],
3497
+ border: gray[100],
3498
+ borderHover: base.white
3592
3499
  },
3593
3500
  secondaryColor: {
3594
- bg: base.white,
3595
- bgHover: magenta[50],
3596
- fg: magenta[400],
3597
- fgHover: magenta[500],
3598
- border: magenta[300],
3599
- borderHover: magenta[300]
3501
+ bg: gray[900],
3502
+ bgHover: gray[800],
3503
+ fg: gray[100],
3504
+ fgHover: gray[50],
3505
+ border: gray[700],
3506
+ borderHover: gray[700]
3600
3507
  },
3601
3508
  tertiary: {
3602
- fg: gray[600],
3603
- fgHover: gray[700],
3604
- bgHover: gray[50]
3509
+ fg: gray[300],
3510
+ fgHover: gray[100],
3511
+ bgHover: gray[800]
3605
3512
  },
3606
3513
  tertiaryColor: {
3607
- fg: magenta[400],
3608
- fgHover: magenta[500],
3609
- bgHover: magenta[50]
3514
+ fg: gray[100],
3515
+ fgHover: gray[50],
3516
+ bgHover: gray[800]
3610
3517
  },
3611
3518
  primaryError: {
3612
3519
  bg: error[600],
3613
- bgHover: error[700],
3520
+ bgHover: error[500],
3614
3521
  fg: base.white,
3615
3522
  fgHover: base.white,
3616
3523
  border: error[600],
3617
- borderHover: error[700]
3524
+ borderHover: error[500]
3618
3525
  },
3619
3526
  secondaryError: {
3620
- bg: base.white,
3621
- bgHover: error[50],
3622
- fg: error[700],
3623
- fgHover: error[800],
3624
- border: error[300],
3625
- borderHover: error[300]
3527
+ bg: gray[900],
3528
+ bgHover: error[950],
3529
+ fg: error[300],
3530
+ fgHover: error[200],
3531
+ border: error[800],
3532
+ borderHover: error[800]
3626
3533
  },
3627
3534
  tertiaryError: {
3628
- fg: error[700],
3629
- fgHover: error[800],
3630
- bgHover: error[50]
3535
+ fg: error[300],
3536
+ fgHover: error[200],
3537
+ bgHover: error[950]
3631
3538
  }
3632
3539
  };
3633
- var avatarColors4 = {
3634
- bg: gray[100],
3635
- contrastBorder: "#00000014",
3636
- profilePhotoBorder: base.white,
3637
- focusBorder: "#a0a0a624"
3638
- // gray[400] + 14% alpha
3639
- };
3640
- var breadcrumbColors4 = {
3641
- fg: gray[600],
3642
- fgHover: gray[700],
3643
- bgHover: gray[50],
3644
- brandBgHover: magenta[50],
3645
- brandFgHover: magenta[700],
3540
+ var breadcrumbColors2 = {
3541
+ fg: gray[400],
3542
+ fgHover: gray[200],
3543
+ bgHover: gray[800],
3544
+ brandBgHover: gray[800],
3545
+ brandFgHover: gray[100],
3646
3546
  iconFg: gray[500],
3647
- iconFgHover: gray[700],
3648
- brandIconFgHover: magenta[700]
3547
+ iconFgHover: gray[300],
3548
+ brandIconFgHover: gray[100]
3649
3549
  };
3650
- var iconColors4 = {
3651
- fgBrand: magenta[400],
3652
- fgBrandOnBrand: magenta[200],
3653
- featuredModernBorder: gray[200],
3654
- featuredLightFgBrand: magenta[400],
3655
- featuredLightFgGray: gray[500],
3656
- featuredLightFgError: error[600],
3657
- featuredLightFgWarning: warning[600],
3658
- featuredLightFgSuccess: success[600],
3550
+ var iconColors2 = {
3551
+ fgBrand: gray[100],
3552
+ fgBrandOnBrand: gray[700],
3553
+ featuredModernBorder: gray[700],
3554
+ featuredLightFgBrand: gray[100],
3555
+ featuredLightFgGray: gray[400],
3556
+ featuredLightFgError: error[400],
3557
+ featuredLightFgWarning: warning[400],
3558
+ featuredLightFgSuccess: success[400],
3659
3559
  featuredDarkFgBrand: base.white,
3660
3560
  featuredDarkFgGray: base.white,
3661
3561
  featuredDarkFgError: base.white,
3662
3562
  featuredDarkFgWarning: base.white,
3663
3563
  featuredDarkFgSuccess: base.white
3664
3564
  };
3665
- var navColors4 = {
3666
- itemIconFg: gray[500],
3667
- itemIconFgActive: gray[700],
3668
- itemButtonIconFg: gray[500],
3669
- itemButtonIconFgActive: gray[700]
3565
+ var sliderColors2 = {
3566
+ handleBorder: gray[100],
3567
+ handleBg: gray[50]
3670
3568
  };
3671
- var sliderColors4 = {
3672
- handleBorder: magenta[400],
3673
- handleBg: base.white
3569
+ var avatarColors2 = {
3570
+ bg: gray[800],
3571
+ fg: gray[50],
3572
+ contrastBorder: "#ffffff1f",
3573
+ profilePhotoBorder: gray[900],
3574
+ focusBorder: "#a0a0a624"
3674
3575
  };
3675
- var toggleColors4 = {
3676
- buttonFgDisabled: gray[50]
3576
+ var navColors2 = {
3577
+ itemIconFg: gray[400],
3578
+ itemIconFgActive: gray[100],
3579
+ itemButtonIconFg: gray[400],
3580
+ itemButtonIconFgActive: gray[100]
3677
3581
  };
3678
- var chartColors4 = {
3679
- axisFg: gray[100],
3680
- gridlineFg: gray[100],
3681
- labelFg: gray[600],
3682
- labelFgEmphasis: gray[700],
3683
- bg: base.white,
3684
- bgAlt: gray[50],
3685
- tooltipBg: gray[950],
3686
- tooltipFg: base.white,
3582
+ var toggleColors2 = {
3583
+ buttonFgDisabled: gray[800]
3584
+ };
3585
+ var chartColors2 = {
3586
+ axisFg: gray[800],
3587
+ gridlineFg: gray[800],
3588
+ labelFg: gray[400],
3589
+ labelFgEmphasis: gray[300],
3590
+ bg: gray[900],
3591
+ bgAlt: gray[800],
3592
+ tooltipBg: gray[50],
3593
+ tooltipFg: gray[900],
3687
3594
  crosshairFg: gray[500],
3688
- legendFg: text4.tertiary,
3595
+ legendFg: text2.tertiary,
3689
3596
  series: [
3690
- { fg: misc.purple[500], fgHover: misc.purple[600], bg: misc.purple[100], bgHover: misc.purple[200] },
3691
- { fg: misc.orangeDark[400], fgHover: misc.orangeDark[500], bg: misc.orangeDark[100], bgHover: misc.orangeDark[200] },
3692
- { fg: misc.teal[300], fgHover: misc.teal[400], bg: misc.teal[50], bgHover: misc.teal[100] },
3693
- { fg: warning[400], fgHover: warning[500], bg: warning[100], bgHover: warning[200] },
3694
- { fg: misc.rose[400], fgHover: misc.rose[500], bg: misc.rose[100], bgHover: misc.rose[200] },
3695
- { fg: misc.blueLight[400], fgHover: misc.blueLight[500], bg: misc.blueLight[100], bgHover: misc.blueLight[200] },
3696
- { fg: misc.orange[300], fgHover: misc.orange[400], bg: misc.orange[100], bgHover: misc.orange[200] },
3697
- { fg: misc.cyan[600], fgHover: misc.cyan[700], bg: misc.cyan[100], bgHover: misc.cyan[200] },
3698
- { fg: misc.green[500], fgHover: misc.green[600], bg: misc.green[100], bgHover: misc.green[200] },
3699
- { fg: misc.pink[400], fgHover: misc.pink[500], bg: misc.pink[100], bgHover: misc.pink[200] },
3700
- { fg: misc.fuchsia[400], fgHover: misc.fuchsia[500], bg: misc.fuchsia[100], bgHover: misc.fuchsia[200] },
3701
- { fg: misc.teal[600], fgHover: misc.teal[700], bg: misc.teal[100], bgHover: misc.teal[200] }
3597
+ { fg: violet[400], fgHover: violet[300], bg: violet[900], bgHover: violet[800] },
3598
+ { fg: magenta[400], fgHover: magenta[300], bg: magenta[900], bgHover: magenta[800] },
3599
+ { fg: misc.teal[300], fgHover: misc.teal[200], bg: misc.teal[900], bgHover: misc.teal[800] },
3600
+ { fg: warning[400], fgHover: warning[300], bg: warning[900], bgHover: warning[800] },
3601
+ { fg: misc.blueLight[400], fgHover: misc.blueLight[300], bg: misc.blueLight[900], bgHover: misc.blueLight[800] },
3602
+ { fg: misc.rose[400], fgHover: misc.rose[300], bg: misc.rose[900], bgHover: misc.rose[800] },
3603
+ { fg: misc.green[400], fgHover: misc.green[300], bg: misc.green[900], bgHover: misc.green[800] },
3604
+ { fg: misc.orangeDark[400], fgHover: misc.orangeDark[300], bg: misc.orangeDark[900], bgHover: misc.orangeDark[800] },
3605
+ { fg: misc.cyan[400], fgHover: misc.cyan[300], bg: misc.cyan[900], bgHover: misc.cyan[800] },
3606
+ { fg: misc.orange[300], fgHover: misc.orange[200], bg: misc.orange[900], bgHover: misc.orange[800] },
3607
+ { fg: misc.teal[500], fgHover: misc.teal[400], bg: misc.teal[800], bgHover: misc.teal[700] },
3608
+ { fg: misc.pink[400], fgHover: misc.pink[300], bg: misc.pink[900], bgHover: misc.pink[800] }
3702
3609
  ]
3703
3610
  };
3704
- var focusRings4 = {
3705
- brand: "0px 0px 0px 4px #FF78F33d",
3706
- brandShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #FF78F33d",
3707
- brandShadowSm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f, 0px 0px 0px 4px #FF78F33d",
3611
+ var focusRings2 = {
3612
+ brand: "0px 0px 0px 4px #4040403d",
3613
+ brandShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #4040403d",
3614
+ brandShadowSm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f, 0px 0px 0px 4px #4040403d",
3708
3615
  gray: "0px 0px 0px 4px #a0a0a624",
3709
3616
  grayShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #a0a0a624",
3710
3617
  grayShadowSm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f, 0px 0px 0px 4px #a0a0a624",
3711
3618
  error: "0px 0px 0px 4px #f044383d",
3712
3619
  errorShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #f044383d"
3713
3620
  };
3714
- var forestInternalPreset = {
3715
- name: "forest-internal",
3716
- defaultVariant: "light",
3717
- variants: {
3718
- light: {
3719
- tokens: {
3720
- base,
3721
- error,
3722
- warning,
3723
- success,
3724
- info,
3725
- spacing,
3726
- radius: radius4,
3727
- shadows,
3728
- focusRings: focusRings4,
3729
- fontFamily: '"Aeonik", sans-serif',
3730
- fontFamilyMono: '"Aeonik Mono", monospace',
3731
- fontSize,
3732
- lineHeight,
3733
- fontWeight,
3734
- display,
3735
- container,
3736
- widths,
3737
- text: text4,
3738
- bg: bg4,
3739
- fg: fg4,
3740
- border: border4,
3741
- buttonColors: buttonColors4,
3742
- avatarColors: avatarColors4,
3743
- breadcrumbColors: breadcrumbColors4,
3744
- iconColors: iconColors4,
3745
- navColors: navColors4,
3746
- sliderColors: sliderColors4,
3747
- toggleColors: toggleColors4,
3748
- chartColors: chartColors4,
3749
- alpha
3750
- }
3751
- }
3752
- }
3621
+ var letterSpacing = {
3622
+ h1: "-0.02em",
3623
+ h2: "-0.02em",
3624
+ h3: "-0.02em",
3625
+ h4: "-0.02em",
3626
+ h5: "-0.02em",
3627
+ h6: "-0.02em",
3628
+ subtitle1: "0.02em",
3629
+ subtitle2: "0.02em",
3630
+ body1: "0.02em",
3631
+ body2: "0.02em",
3632
+ caption: "0.02em",
3633
+ overline: "0.02em",
3634
+ button: "0.02em"
3635
+ };
3636
+ var alkemyPlusDarkTokens = {
3637
+ base,
3638
+ error,
3639
+ warning,
3640
+ success,
3641
+ info,
3642
+ spacing,
3643
+ radius: radius2,
3644
+ shadows,
3645
+ focusRings: focusRings2,
3646
+ fontFamily: '"Aeonik", sans-serif',
3647
+ fontFamilyMono: '"Aeonik Mono", monospace',
3648
+ fontSize,
3649
+ lineHeight,
3650
+ fontWeight,
3651
+ display,
3652
+ container,
3653
+ widths,
3654
+ text: text2,
3655
+ bg: bg2,
3656
+ fg: fg2,
3657
+ border: border2,
3658
+ buttonColors: buttonColors2,
3659
+ avatarColors: avatarColors2,
3660
+ breadcrumbColors: breadcrumbColors2,
3661
+ iconColors: iconColors2,
3662
+ navColors: navColors2,
3663
+ sliderColors: sliderColors2,
3664
+ toggleColors: toggleColors2,
3665
+ chartColors: chartColors2,
3666
+ alpha,
3667
+ letterSpacing,
3668
+ highlight
3753
3669
  };
3754
3670
 
3755
3671
  // src/theme/presets/forest-alkemy-plus.ts
3756
- var info2 = violet;
3757
- var highlight = magenta;
3758
- var colors2 = {
3672
+ var highlight2 = magenta;
3673
+ var colors = {
3759
3674
  base,
3760
3675
  error,
3761
3676
  warning,
3762
3677
  success,
3763
- info: info2,
3678
+ info,
3764
3679
  brand: {
3765
3680
  25: gray[25],
3766
3681
  50: gray[50],
@@ -3780,7 +3695,7 @@ var colors2 = {
3780
3695
  accent: red,
3781
3696
  gray
3782
3697
  };
3783
- var radius5 = {
3698
+ var radius3 = {
3784
3699
  ...radius,
3785
3700
  xxs: 1,
3786
3701
  xs: 2,
@@ -3792,7 +3707,7 @@ var radius5 = {
3792
3707
  "3xl": 10,
3793
3708
  "4xl": 12
3794
3709
  };
3795
- var text5 = {
3710
+ var text3 = {
3796
3711
  primary: gray[900],
3797
3712
  secondary: gray[700],
3798
3713
  secondaryHover: gray[800],
@@ -3803,19 +3718,19 @@ var text5 = {
3803
3718
  placeholder: gray[500],
3804
3719
  placeholderSubtle: gray[300],
3805
3720
  white: base.white,
3806
- brandPrimary: colors2.brand[900],
3807
- brandSecondary: colors2.brand[700],
3808
- brandTertiary: colors2.brand[600],
3809
- brandTertiaryAlt: colors2.brand[600],
3721
+ brandPrimary: colors.brand[900],
3722
+ brandSecondary: colors.brand[700],
3723
+ brandTertiary: colors.brand[600],
3724
+ brandTertiaryAlt: colors.brand[600],
3810
3725
  primaryOnBrand: base.white,
3811
- secondaryOnBrand: colors2.brand[200],
3812
- tertiaryOnBrand: colors2.brand[200],
3813
- quaternaryOnBrand: colors2.brand[300],
3726
+ secondaryOnBrand: colors.brand[200],
3727
+ tertiaryOnBrand: colors.brand[200],
3728
+ quaternaryOnBrand: colors.brand[300],
3814
3729
  errorPrimary: error[600],
3815
3730
  warningPrimary: warning[600],
3816
3731
  successPrimary: success[600]
3817
3732
  };
3818
- var bg5 = {
3733
+ var bg3 = {
3819
3734
  primary: gray[25],
3820
3735
  primaryAlt: gray[25],
3821
3736
  primaryHover: gray[100],
@@ -3831,13 +3746,13 @@ var bg5 = {
3831
3746
  disabled: gray[100],
3832
3747
  disabledSubtle: gray[50],
3833
3748
  overlay: gray[950],
3834
- brandPrimary: colors2.brand[50],
3835
- brandPrimaryAlt: colors2.brand[50],
3836
- brandSecondary: colors2.brand[100],
3837
- brandSolid: colors2.brand[600],
3838
- brandSolidHover: colors2.brand[700],
3839
- brandSection: colors2.brand[800],
3840
- brandSectionSubtle: colors2.brand[700],
3749
+ brandPrimary: colors.brand[50],
3750
+ brandPrimaryAlt: colors.brand[50],
3751
+ brandSecondary: colors.brand[100],
3752
+ brandSolid: colors.brand[600],
3753
+ brandSolidHover: colors.brand[700],
3754
+ brandSection: colors.brand[800],
3755
+ brandSectionSubtle: colors.brand[700],
3841
3756
  errorPrimary: error[50],
3842
3757
  errorSecondary: error[100],
3843
3758
  errorSolid: error[600],
@@ -3848,7 +3763,7 @@ var bg5 = {
3848
3763
  successSecondary: success[100],
3849
3764
  successSolid: success[600]
3850
3765
  };
3851
- var fg5 = {
3766
+ var fg3 = {
3852
3767
  primary: gray[900],
3853
3768
  secondary: gray[700],
3854
3769
  secondaryHover: gray[800],
@@ -3862,9 +3777,9 @@ var fg5 = {
3862
3777
  white: base.white,
3863
3778
  disabled: gray[400],
3864
3779
  disabledSubtle: gray[300],
3865
- brandPrimary: colors2.brand[600],
3866
- brandPrimaryAlt: colors2.brand[600],
3867
- brandSecondary: colors2.brand[500],
3780
+ brandPrimary: colors.brand[600],
3781
+ brandPrimaryAlt: colors.brand[600],
3782
+ brandSecondary: colors.brand[500],
3868
3783
  errorPrimary: error[600],
3869
3784
  errorSecondary: error[500],
3870
3785
  warningPrimary: warning[600],
@@ -3872,26 +3787,26 @@ var fg5 = {
3872
3787
  successPrimary: success[600],
3873
3788
  successSecondary: success[500]
3874
3789
  };
3875
- var border5 = {
3790
+ var border3 = {
3876
3791
  primary: gray[300],
3877
3792
  secondary: gray[200],
3878
3793
  tertiary: gray[100],
3879
3794
  disabled: gray[300],
3880
3795
  disabledSubtle: gray[200],
3881
3796
  brand: gray[400],
3882
- brandSolid: colors2.brand[600],
3883
- brandSolidAlt: colors2.brand[600],
3797
+ brandSolid: colors.brand[600],
3798
+ brandSolidAlt: colors.brand[600],
3884
3799
  error: error[300],
3885
3800
  errorSolid: error[600]
3886
3801
  };
3887
- var buttonColors5 = {
3802
+ var buttonColors3 = {
3888
3803
  primary: {
3889
- bg: colors2.brand[700],
3890
- bgHover: colors2.brand[800],
3804
+ bg: colors.brand[700],
3805
+ bgHover: colors.brand[800],
3891
3806
  fg: base.white,
3892
3807
  fgHover: base.white,
3893
- border: colors2.brand[700],
3894
- borderHover: colors2.brand[800]
3808
+ border: colors.brand[700],
3809
+ borderHover: colors.brand[800]
3895
3810
  },
3896
3811
  secondary: {
3897
3812
  bg: gray[900],
@@ -3903,11 +3818,11 @@ var buttonColors5 = {
3903
3818
  },
3904
3819
  secondaryColor: {
3905
3820
  bg: base.white,
3906
- bgHover: colors2.brand[50],
3907
- fg: colors2.brand[700],
3908
- fgHover: colors2.brand[800],
3909
- border: colors2.brand[300],
3910
- borderHover: colors2.brand[300]
3821
+ bgHover: colors.brand[50],
3822
+ fg: colors.brand[700],
3823
+ fgHover: colors.brand[800],
3824
+ border: colors.brand[300],
3825
+ borderHover: colors.brand[300]
3911
3826
  },
3912
3827
  tertiary: {
3913
3828
  fg: gray[600],
@@ -3915,9 +3830,9 @@ var buttonColors5 = {
3915
3830
  bgHover: gray[50]
3916
3831
  },
3917
3832
  tertiaryColor: {
3918
- fg: colors2.brand[700],
3919
- fgHover: colors2.brand[800],
3920
- bgHover: colors2.brand[50]
3833
+ fg: colors.brand[700],
3834
+ fgHover: colors.brand[800],
3835
+ bgHover: colors.brand[50]
3921
3836
  },
3922
3837
  primaryError: {
3923
3838
  bg: error[600],
@@ -3941,28 +3856,21 @@ var buttonColors5 = {
3941
3856
  bgHover: error[50]
3942
3857
  }
3943
3858
  };
3944
- var avatarColors5 = {
3945
- bg: gray[100],
3946
- contrastBorder: "#00000014",
3947
- profilePhotoBorder: base.white,
3948
- focusBorder: "#a0a0a624"
3949
- // gray[400] + 14% alpha
3950
- };
3951
- var breadcrumbColors5 = {
3859
+ var breadcrumbColors3 = {
3952
3860
  fg: gray[600],
3953
3861
  fgHover: gray[700],
3954
3862
  bgHover: gray[50],
3955
- brandBgHover: colors2.brand[50],
3956
- brandFgHover: colors2.brand[700],
3863
+ brandBgHover: colors.brand[50],
3864
+ brandFgHover: colors.brand[700],
3957
3865
  iconFg: gray[500],
3958
3866
  iconFgHover: gray[700],
3959
- brandIconFgHover: colors2.brand[700]
3867
+ brandIconFgHover: colors.brand[700]
3960
3868
  };
3961
- var iconColors5 = {
3962
- fgBrand: colors2.brand[600],
3963
- fgBrandOnBrand: colors2.brand[200],
3869
+ var iconColors3 = {
3870
+ fgBrand: colors.brand[600],
3871
+ fgBrandOnBrand: colors.brand[200],
3964
3872
  featuredModernBorder: gray[200],
3965
- featuredLightFgBrand: colors2.brand[600],
3873
+ featuredLightFgBrand: colors.brand[600],
3966
3874
  featuredLightFgGray: gray[500],
3967
3875
  featuredLightFgError: error[600],
3968
3876
  featuredLightFgWarning: warning[600],
@@ -3973,20 +3881,36 @@ var iconColors5 = {
3973
3881
  featuredDarkFgWarning: base.white,
3974
3882
  featuredDarkFgSuccess: base.white
3975
3883
  };
3976
- var navColors5 = {
3977
- itemIconFg: gray[500],
3978
- itemIconFgActive: gray[700],
3979
- itemButtonIconFg: gray[500],
3980
- itemButtonIconFgActive: gray[700]
3981
- };
3982
- var sliderColors5 = {
3983
- handleBorder: colors2.brand[600],
3884
+ var sliderColors3 = {
3885
+ handleBorder: colors.brand[600],
3984
3886
  handleBg: base.white
3985
3887
  };
3986
- var toggleColors5 = {
3987
- buttonFgDisabled: gray[50]
3888
+ var letterSpacing2 = {
3889
+ h1: "-0.02em",
3890
+ h2: "-0.02em",
3891
+ h3: "-0.02em",
3892
+ h4: "-0.02em",
3893
+ h5: "-0.02em",
3894
+ h6: "-0.02em",
3895
+ subtitle1: "0.02em",
3896
+ subtitle2: "0.02em",
3897
+ body1: "0.02em",
3898
+ body2: "0.02em",
3899
+ caption: "0.02em",
3900
+ overline: "0.02em",
3901
+ button: "0.02em"
3902
+ };
3903
+ var focusRings3 = {
3904
+ brand: "0px 0px 0px 4px #4040403d",
3905
+ brandShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #4040403d",
3906
+ brandShadowSm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f, 0px 0px 0px 4px #4040403d",
3907
+ gray: "0px 0px 0px 4px #a0a0a624",
3908
+ grayShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #a0a0a624",
3909
+ grayShadowSm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f, 0px 0px 0px 4px #a0a0a624",
3910
+ error: "0px 0px 0px 4px #f044383d",
3911
+ errorShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #f044383d"
3988
3912
  };
3989
- var chartColors5 = {
3913
+ var chartColors3 = {
3990
3914
  axisFg: gray[100],
3991
3915
  gridlineFg: gray[100],
3992
3916
  labelFg: gray[600],
@@ -3996,7 +3920,7 @@ var chartColors5 = {
3996
3920
  tooltipBg: gray[950],
3997
3921
  tooltipFg: base.white,
3998
3922
  crosshairFg: gray[500],
3999
- legendFg: text5.tertiary,
3923
+ legendFg: text3.tertiary,
4000
3924
  series: [
4001
3925
  // Brand accents lead — violet + magenta anchor the palette
4002
3926
  { fg: violet[500], fgHover: violet[600], bg: violet[100], bgHover: violet[200] },
@@ -4015,79 +3939,47 @@ var chartColors5 = {
4015
3939
  { fg: misc.pink[400], fgHover: misc.pink[500], bg: misc.pink[100], bgHover: misc.pink[200] }
4016
3940
  ]
4017
3941
  };
4018
- var letterSpacing = {
4019
- h1: "-0.02em",
4020
- h2: "-0.02em",
4021
- h3: "-0.02em",
4022
- h4: "-0.02em",
4023
- h5: "-0.02em",
4024
- h6: "-0.02em",
4025
- subtitle1: "0.02em",
4026
- subtitle2: "0.02em",
4027
- body1: "0.02em",
4028
- body2: "0.02em",
4029
- caption: "0.02em",
4030
- overline: "0.02em",
4031
- button: "0.02em"
4032
- };
4033
- var focusRings5 = {
4034
- brand: "0px 0px 0px 4px #4040403d",
4035
- brandShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #4040403d",
4036
- brandShadowSm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f, 0px 0px 0px 4px #4040403d",
4037
- gray: "0px 0px 0px 4px #a0a0a624",
4038
- grayShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #a0a0a624",
4039
- grayShadowSm: "0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f, 0px 0px 0px 4px #a0a0a624",
4040
- error: "0px 0px 0px 4px #f044383d",
4041
- errorShadowXs: "0px 1px 2px 0px #1018280d, 0px 0px 0px 4px #f044383d"
4042
- };
4043
3942
  var forestAlkemyPlusPreset = {
4044
3943
  name: "forest-alkemy+",
4045
- defaultVariant: "light",
4046
- variants: {
4047
- light: {
4048
- tokens: {
4049
- base,
4050
- error,
4051
- warning,
4052
- success,
4053
- info: info2,
4054
- spacing,
4055
- radius: radius5,
4056
- shadows,
4057
- focusRings: focusRings5,
4058
- fontFamily: '"Aeonik", sans-serif',
4059
- fontFamilyMono: '"Aeonik Mono", monospace',
4060
- fontSize,
4061
- lineHeight,
4062
- fontWeight,
4063
- display,
4064
- container,
4065
- widths,
4066
- text: text5,
4067
- bg: bg5,
4068
- fg: fg5,
4069
- border: border5,
4070
- buttonColors: buttonColors5,
4071
- avatarColors: avatarColors5,
4072
- breadcrumbColors: breadcrumbColors5,
4073
- iconColors: iconColors5,
4074
- navColors: navColors5,
4075
- sliderColors: sliderColors5,
4076
- toggleColors: toggleColors5,
4077
- chartColors: chartColors5,
4078
- alpha,
4079
- letterSpacing,
4080
- highlight
4081
- }
4082
- }
4083
- }
3944
+ tokens: {
3945
+ base,
3946
+ error,
3947
+ warning,
3948
+ success,
3949
+ info,
3950
+ spacing,
3951
+ radius: radius3,
3952
+ shadows,
3953
+ focusRings: focusRings3,
3954
+ fontFamily: '"Aeonik", sans-serif',
3955
+ fontFamilyMono: '"Aeonik Mono", monospace',
3956
+ fontSize,
3957
+ lineHeight,
3958
+ fontWeight,
3959
+ display,
3960
+ container,
3961
+ widths,
3962
+ text: text3,
3963
+ bg: bg3,
3964
+ fg: fg3,
3965
+ border: border3,
3966
+ buttonColors: buttonColors3,
3967
+ avatarColors,
3968
+ breadcrumbColors: breadcrumbColors3,
3969
+ iconColors: iconColors3,
3970
+ navColors,
3971
+ sliderColors: sliderColors3,
3972
+ toggleColors,
3973
+ chartColors: chartColors3,
3974
+ alpha,
3975
+ letterSpacing: letterSpacing2,
3976
+ highlight: highlight2
3977
+ },
3978
+ tokensDark: alkemyPlusDarkTokens
4084
3979
  };
4085
3980
 
4086
3981
  // src/theme/presets/index.ts
4087
3982
  var presetRegistry = /* @__PURE__ */ new Map();
4088
- presetRegistry.set(forestExternalPreset.name, forestExternalPreset);
4089
- presetRegistry.set(forestAgencyPreset.name, forestAgencyPreset);
4090
- presetRegistry.set(forestInternalPreset.name, forestInternalPreset);
4091
3983
  presetRegistry.set(forestAlkemyPlusPreset.name, forestAlkemyPlusPreset);
4092
3984
  function getPreset(name) {
4093
3985
  return presetRegistry.get(name);
@@ -4100,9 +3992,9 @@ function getAvailablePresets() {
4100
3992
  }
4101
3993
 
4102
3994
  // src/theme/index.ts
4103
- var agencyTokens = forestAgencyPreset.variants.light.tokens;
4104
- var forestTheme = buildTheme(agencyTokens);
4105
- var forestThemeOptions = buildThemeOptions(agencyTokens);
3995
+ var { tokens, tokensDark } = forestAlkemyPlusPreset;
3996
+ var forestTheme = buildTheme(tokens, tokensDark);
3997
+ var forestThemeOptions = buildThemeOptions(tokens, tokensDark);
4106
3998
  // Annotate the CommonJS export names for ESM import in node:
4107
3999
  0 && (module.exports = {
4108
4000
  alpha,
@@ -4124,10 +4016,7 @@ var forestThemeOptions = buildThemeOptions(agencyTokens);
4124
4016
  fontFamilyMono,
4125
4017
  fontSize,
4126
4018
  fontWeight,
4127
- forestAgencyPreset,
4128
4019
  forestAlkemyPlusPreset,
4129
- forestExternalPreset,
4130
- forestInternalPreset,
4131
4020
  forestTheme,
4132
4021
  forestThemeOptions,
4133
4022
  getAvailablePresets,