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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,657 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * Gothic Theme — dark only
5
+ *
6
+ * A dark-only theme with deep blue-gray tones and a distressed display
7
+ * heading. Inspired by ink, manuscript, and noir typography.
8
+ *
9
+ * Core palette: #E8F1F6, #96A0AB, #495056, #24292D, #101314
10
+ * Categorical colors follow a pastel-on-dark pattern (light backgrounds
11
+ * with dark text) — same in any system color preference.
12
+ *
13
+ * Uses Manufacturing Consent for headings and Fustat for body text.
14
+ */
15
+
16
+ import {defineTheme, defineSyntaxTheme} from '@astryxdesign/core/theme';
17
+ import {gothicIconRegistry} from './icons';
18
+
19
+ /**
20
+ * Gothic syntax palette — atmospheric tones drawn from the gothic
21
+ * categorical palette: deep purples (cathedral), blood crimson (tags),
22
+ * aged gold (numbers), forest moss (strings), midnight indigo (functions).
23
+ *
24
+ * Single values (no tuples) since this is a dark-only theme.
25
+ */
26
+ const gothicSyntax = defineSyntaxTheme({
27
+ name: 'xds-gothic',
28
+ tokens: {
29
+ keyword: '#c39adb', // Cathedral plum
30
+ string: '#a3c987', // Forest moss
31
+ comment: '#6b7079', // Faded ink
32
+ number: '#dec074', // Aged gold
33
+ function: '#8aa1d8', // Midnight indigo
34
+ type: '#c39adb', // Cathedral plum
35
+ variable: '#E8F1F6', // Parchment
36
+ operator: '#96A0AB', // Mid neutral
37
+ constant: '#e6b85e', // Candlelight amber
38
+ tag: '#d97580', // Blood crimson
39
+ attribute: '#dec074', // Aged gold
40
+ property: '#7cc5b3', // Verdigris
41
+ punctuation: '#7a8290', // Mid neutral
42
+ background: '#101314',
43
+ },
44
+ });
45
+
46
+ export const gothicTheme = defineTheme({
47
+ name: 'gothic',
48
+
49
+ typography: {
50
+ // base 16 / ratio 1.25 — larger scale so the (optically small) blackletter
51
+ // display sizes read large enough to carry the theme.
52
+ scale: {base: 16, ratio: 1.25},
53
+ body: {
54
+ family: 'Fustat',
55
+ fallbacks:
56
+ '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',
57
+ },
58
+ // Headings (h1-h6) use Fustat to match the body — Manufacturing Consent
59
+ // is reserved for display sizes only (see component overrides below).
60
+ heading: {
61
+ family: 'Fustat',
62
+ fallbacks:
63
+ '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',
64
+ weights: {3: 'bold', 4: 'bold'},
65
+ },
66
+ code: {
67
+ family: 'JetBrains Mono',
68
+ fallbacks: '"SF Mono", Monaco, Consolas, monospace',
69
+ },
70
+ },
71
+
72
+ // Slower, theatrical motion — gothic doesn't rush.
73
+ motion: {fast: 150, medium: 350, slow: 800, ratio: 0.75},
74
+
75
+ syntax: gothicSyntax,
76
+
77
+ tokens: {
78
+ // =========================================================================
79
+ // Colors — gothic dark palette (single values, dark-only)
80
+ // Core: #E8F1F6, #96A0AB, #495056, #24292D, #101314
81
+ // =========================================================================
82
+
83
+ // Core semantic
84
+ '--color-accent': '#E8F1F6',
85
+ '--color-accent-muted': '#E8F1F620',
86
+ '--color-neutral': '#E8F1F61A',
87
+ '--color-background-surface': '#101314',
88
+ '--color-background-body': '#101314',
89
+ '--color-overlay': '#101314CC',
90
+ '--color-overlay-hover': '#E8F1F60D',
91
+ '--color-overlay-pressed': '#E8F1F61A',
92
+ '--color-background-muted': '#24292D',
93
+
94
+ // Text
95
+ '--color-text-primary': '#E8F1F6',
96
+ '--color-text-secondary': '#96A0AB',
97
+ '--color-text-disabled': '#495056',
98
+ '--color-text-accent': '#E8F1F6',
99
+ '--color-on-dark': '#E8F1F6',
100
+ '--color-on-light': '#101314',
101
+ '--color-on-accent': '#101314',
102
+ '--color-on-success': '#101314',
103
+ '--color-on-error': '#101314',
104
+ '--color-on-warning': '#101314',
105
+
106
+ // Icon
107
+ '--color-icon-accent': '#E8F1F6',
108
+ '--color-icon-primary': '#E8F1F6',
109
+ '--color-icon-secondary': '#96A0AB',
110
+ '--color-icon-disabled': '#495056',
111
+
112
+ // Surface variants
113
+ '--color-background-card': '#1a1d20',
114
+ '--color-background-popover': '#24292D',
115
+ '--color-background-inverted': '#E8F1F6',
116
+
117
+ // Status / Sentiment — dusty pastels matching the categorical
118
+ // pattern. Used for status surfaces, destructive button bg, etc.
119
+ '--color-success': '#b3c79a', // sage moss
120
+ '--color-success-muted': '#b3c79a',
121
+ '--color-error': '#c6a6a2', // dusty rose
122
+ '--color-error-muted': '#c6a6a2',
123
+ '--color-warning': '#d3c490', // aged gold
124
+ '--color-warning-muted': '#d3c490',
125
+
126
+ // Border
127
+ '--color-border': '#E8F1F61A',
128
+ '--color-border-emphasized': '#495056',
129
+
130
+ // Effects
131
+ '--color-skeleton': '#495056',
132
+ '--color-shadow': '#0000004D',
133
+ '--color-tint-hover': 'white',
134
+
135
+ // =========================================================================
136
+ // Categorical — dusty pastel-on-dark pattern
137
+ // Hand-tuned dusty pastels (T75 with reduced chroma) — confident
138
+ // but never bright. Neutral is a dark slate with white text — the
139
+ // "no-color" variant earns its hierarchy by matching the page mood.
140
+ // =========================================================================
141
+
142
+ // Blue (periwinkle midnight)
143
+ '--color-background-blue': '#a3b5d6',
144
+ '--color-border-blue': '#8696b8',
145
+ '--color-icon-blue': '#2a3b6e',
146
+ '--color-text-blue': '#1f2c54',
147
+
148
+ // Cyan (cathedral mist)
149
+ '--color-background-cyan': '#a3c2cf',
150
+ '--color-border-cyan': '#86a4b1',
151
+ '--color-icon-cyan': '#2a5e75',
152
+ '--color-text-cyan': '#204858',
153
+
154
+ // Gray (dark slate — special: dark bg + light text)
155
+ '--color-background-gray': '#3d4248',
156
+ '--color-border-gray': '#5d646b',
157
+ '--color-icon-gray': '#E8F1F6',
158
+ '--color-text-gray': '#E8F1F6',
159
+
160
+ // Green (sage moss)
161
+ '--color-background-green': '#b3c79a',
162
+ '--color-border-green': '#96a880',
163
+ '--color-icon-green': '#3a5e2c',
164
+ '--color-text-green': '#244023',
165
+
166
+ // Orange (warm tan)
167
+ '--color-background-orange': '#d3b89a',
168
+ '--color-border-orange': '#b6987d',
169
+ '--color-icon-orange': '#8a4818',
170
+ '--color-text-orange': '#6e3812',
171
+
172
+ // Pink (dusty rose)
173
+ '--color-background-pink': '#c89aab',
174
+ '--color-border-pink': '#aa7d8e',
175
+ '--color-icon-pink': '#8d2d4c',
176
+ '--color-text-pink': '#71223c',
177
+
178
+ // Purple (muted plum)
179
+ '--color-background-purple': '#b29bc4',
180
+ '--color-border-purple': '#947da6',
181
+ '--color-icon-purple': '#5a2370',
182
+ '--color-text-purple': '#481b58',
183
+
184
+ // Red (dusty rose)
185
+ '--color-background-red': '#c6a6a2',
186
+ '--color-border-red': '#a48581',
187
+ '--color-icon-red': '#5e3a35',
188
+ '--color-text-red': '#4a2520',
189
+
190
+ // Teal (sage verdigris)
191
+ '--color-background-teal': '#a3c2b6',
192
+ '--color-border-teal': '#86a499',
193
+ '--color-icon-teal': '#1f5e52',
194
+ '--color-text-teal': '#174a40',
195
+
196
+ // Yellow (aged gold)
197
+ '--color-background-yellow': '#d3c490',
198
+ '--color-border-yellow': '#b6a775',
199
+ '--color-icon-yellow': '#876515',
200
+ '--color-text-yellow': '#6c5010',
201
+
202
+ // =========================================================================
203
+ // Radius — subtle rounding (original gothic)
204
+ // =========================================================================
205
+ '--radius-none': '0.125rem',
206
+ '--radius-inner': '0.25rem',
207
+ '--radius-element': '0.5rem',
208
+ '--radius-container': '0.75rem',
209
+ '--radius-page': '1.5rem',
210
+ '--radius-full': '9999px',
211
+
212
+ // =========================================================================
213
+ // Shadows — restrained, atmospheric
214
+ // =========================================================================
215
+ '--shadow-low': '0 2px 4px #00000033, 0 4px 8px #00000040',
216
+ '--shadow-med': '0 2px 4px #00000033, 0 4px 12px #00000040',
217
+ '--shadow-high': '0 4px 6px #00000040, 0 12px 24px #0000004D',
218
+ '--shadow-inset-hover': 'inset 0px 0px 0px 1px #96A0AB30',
219
+ '--shadow-inset-selected': 'inset 0px 0px 0px 2px #96A0AB50',
220
+ '--shadow-inset-success': 'inset 0px 0px 0px 1px #87b06a50',
221
+ '--shadow-inset-warning': 'inset 0px 0px 0px 1px #d6b56a50',
222
+ '--shadow-inset-error': 'inset 0px 0px 0px 1px #d4485150',
223
+ },
224
+
225
+ components: {
226
+ button: {
227
+ // Primary inherits default — light pill with dark text via
228
+ // --color-accent / --color-on-accent (matches the cream badge).
229
+ // Secondary uses the dark-slate "neutral" badge treatment.
230
+ 'variant:secondary': {
231
+ backgroundColor: 'var(--color-background-gray)',
232
+ color: 'var(--color-text-gray)',
233
+ borderColor: 'transparent',
234
+ borderWidth: '0',
235
+ },
236
+ 'variant:ghost': {
237
+ ':hover': {
238
+ backgroundColor: 'var(--color-overlay-hover)',
239
+ },
240
+ },
241
+ // Destructive uses the dusty rose bg with dark warm-brown text
242
+ // (matches the red badge).
243
+ 'variant:destructive': {
244
+ backgroundColor: 'var(--color-error)',
245
+ color: 'var(--color-text-red)',
246
+ },
247
+ },
248
+
249
+ badge: {
250
+ base: {
251
+ borderRadius: 'var(--radius-element)',
252
+ fontWeight: 'var(--font-weight-medium)',
253
+ },
254
+ 'variant:info': {
255
+ backgroundColor: 'var(--color-background-blue)',
256
+ color: 'var(--color-text-blue)',
257
+ },
258
+ 'variant:neutral': {
259
+ backgroundColor: 'var(--color-background-gray)',
260
+ color: 'var(--color-text-gray)',
261
+ },
262
+ 'variant:success': {
263
+ backgroundColor: 'var(--color-background-green)',
264
+ color: 'var(--color-text-green)',
265
+ },
266
+ 'variant:warning': {
267
+ backgroundColor: 'var(--color-background-yellow)',
268
+ color: 'var(--color-text-yellow)',
269
+ },
270
+ 'variant:error': {
271
+ backgroundColor: 'var(--color-background-red)',
272
+ color: 'var(--color-text-red)',
273
+ },
274
+ },
275
+
276
+ banner: {
277
+ base: {
278
+ borderRadius: 'var(--radius-element)',
279
+ },
280
+ 'status:info': {
281
+ backgroundColor: 'var(--color-background-blue)',
282
+ '--color-text-primary': 'var(--color-text-blue)',
283
+ '--color-text-secondary': 'var(--color-text-blue)',
284
+ '--color-accent': 'var(--color-text-blue)',
285
+ },
286
+ 'status:success': {
287
+ backgroundColor: 'var(--color-background-green)',
288
+ '--color-text-primary': 'var(--color-text-green)',
289
+ '--color-text-secondary': 'var(--color-text-green)',
290
+ '--color-success': 'var(--color-text-green)',
291
+ },
292
+ 'status:warning': {
293
+ backgroundColor: 'var(--color-background-yellow)',
294
+ '--color-text-primary': 'var(--color-text-yellow)',
295
+ '--color-text-secondary': 'var(--color-text-yellow)',
296
+ '--color-warning': 'var(--color-text-yellow)',
297
+ },
298
+ 'status:error': {
299
+ backgroundColor: 'var(--color-background-red)',
300
+ '--color-text-primary': 'var(--color-text-red)',
301
+ '--color-text-secondary': 'var(--color-text-red)',
302
+ '--color-error': 'var(--color-text-red)',
303
+ },
304
+ },
305
+
306
+ card: {
307
+ base: {
308
+ padding: 'var(--spacing-3)',
309
+ borderRadius: 'var(--radius-container)',
310
+ },
311
+ // Categorical variants — flip --color-text-primary so child
312
+ // XDSText labels stay readable against the dusty pastel bg.
313
+ 'variant:blue': {
314
+ '--color-text-primary': 'var(--color-text-blue)',
315
+ '--color-text-secondary': 'var(--color-text-blue)',
316
+ },
317
+ 'variant:cyan': {
318
+ '--color-text-primary': 'var(--color-text-cyan)',
319
+ '--color-text-secondary': 'var(--color-text-cyan)',
320
+ },
321
+ 'variant:gray': {
322
+ '--color-text-primary': 'var(--color-text-gray)',
323
+ '--color-text-secondary': 'var(--color-text-gray)',
324
+ },
325
+ 'variant:green': {
326
+ '--color-text-primary': 'var(--color-text-green)',
327
+ '--color-text-secondary': 'var(--color-text-green)',
328
+ },
329
+ 'variant:orange': {
330
+ '--color-text-primary': 'var(--color-text-orange)',
331
+ '--color-text-secondary': 'var(--color-text-orange)',
332
+ },
333
+ 'variant:pink': {
334
+ '--color-text-primary': 'var(--color-text-pink)',
335
+ '--color-text-secondary': 'var(--color-text-pink)',
336
+ },
337
+ 'variant:purple': {
338
+ '--color-text-primary': 'var(--color-text-purple)',
339
+ '--color-text-secondary': 'var(--color-text-purple)',
340
+ },
341
+ 'variant:red': {
342
+ '--color-text-primary': 'var(--color-text-red)',
343
+ '--color-text-secondary': 'var(--color-text-red)',
344
+ },
345
+ 'variant:teal': {
346
+ '--color-text-primary': 'var(--color-text-teal)',
347
+ '--color-text-secondary': 'var(--color-text-teal)',
348
+ },
349
+ 'variant:yellow': {
350
+ '--color-text-primary': 'var(--color-text-yellow)',
351
+ '--color-text-secondary': 'var(--color-text-yellow)',
352
+ },
353
+ },
354
+
355
+ section: {
356
+ base: {
357
+ padding: 'var(--spacing-3)',
358
+ },
359
+ },
360
+
361
+ field: {
362
+ base: {
363
+ borderRadius: 'var(--radius-element)',
364
+ },
365
+ },
366
+
367
+ // Display sizes use Manufacturing Consent — the signature gothic
368
+ // display font, reserved for hero/marketing-scale text only.
369
+ text: {
370
+ 'type:display-1': {
371
+ fontFamily:
372
+ '"Manufacturing Consent", "UnifrakturMaguntia", "Old English Text MT", serif',
373
+ },
374
+ 'type:display-2': {
375
+ fontFamily:
376
+ '"Manufacturing Consent", "UnifrakturMaguntia", "Old English Text MT", serif',
377
+ },
378
+ 'type:display-3': {
379
+ fontFamily:
380
+ '"Manufacturing Consent", "UnifrakturMaguntia", "Old English Text MT", serif',
381
+ },
382
+ },
383
+ },
384
+
385
+ icons: gothicIconRegistry,
386
+ });
387
+
388
+ /**
389
+ * Raw tonal palettes — every color at every tone step (0–100 in 5s).
390
+ * Use these for custom components or data visualization.
391
+ *
392
+ * Categorical hues (blue, green, etc.) follow gothic gem-tone hues.
393
+ * Neutral mirrors the original gothic blue-gray palette (H≈210).
394
+ */
395
+ export const gothicPalettes = {
396
+ // Neutral — H=210 C=4 (cool blue-gray, original gothic)
397
+ neutral: {
398
+ hue: 210,
399
+ chroma: 4,
400
+ 0: '#000000',
401
+ 5: '#0a0d0f',
402
+ 10: '#101314',
403
+ 15: '#181c1f',
404
+ 20: '#24292D',
405
+ 25: '#2c3236',
406
+ 30: '#363c40',
407
+ 35: '#40464b',
408
+ 40: '#495056',
409
+ 45: '#535a61',
410
+ 50: '#5d646b',
411
+ 55: '#676f76',
412
+ 60: '#727a82',
413
+ 65: '#7e8690',
414
+ 70: '#8a929c',
415
+ 75: '#96A0AB',
416
+ 80: '#a8b1bb',
417
+ 85: '#bbc3cb',
418
+ 90: '#cdd5db',
419
+ 95: '#E8F1F6',
420
+ 100: '#ffffff',
421
+ },
422
+ // Blue — H=255 C=20 (midnight indigo)
423
+ blue: {
424
+ hue: 255,
425
+ chroma: 20,
426
+ 0: '#000000',
427
+ 5: '#050930',
428
+ 10: '#0c143f',
429
+ 15: '#161e4d',
430
+ 20: '#1f2c54',
431
+ 25: '#2a3565',
432
+ 30: '#2a3b6e',
433
+ 35: '#3a4783',
434
+ 40: '#475497',
435
+ 45: '#5462ab',
436
+ 50: '#6170bf',
437
+ 55: '#6a85cf',
438
+ 60: '#7793d6',
439
+ 65: '#8aa1d8',
440
+ 70: '#a3b5e0',
441
+ 75: '#b6c5e7',
442
+ 80: '#c4d1ec',
443
+ 85: '#d2dcef',
444
+ 90: '#dde2f1',
445
+ 95: '#e8ecf6',
446
+ 100: '#ffffff',
447
+ },
448
+ // Cyan — H=200 C=25 (cathedral mist)
449
+ cyan: {
450
+ hue: 200,
451
+ chroma: 25,
452
+ 0: '#000000',
453
+ 5: '#001724',
454
+ 10: '#062436',
455
+ 15: '#0d3046',
456
+ 20: '#204858',
457
+ 25: '#1c4a66',
458
+ 30: '#2a5e75',
459
+ 35: '#3a6e85',
460
+ 40: '#487d94',
461
+ 45: '#598ea3',
462
+ 50: '#6a9eb1',
463
+ 55: '#7ab0c0',
464
+ 60: '#8cc3d8',
465
+ 65: '#a0cce0',
466
+ 70: '#b1d3e5',
467
+ 75: '#bcdaeb',
468
+ 80: '#c5dfee',
469
+ 85: '#cbe4f0',
470
+ 90: '#d6e6ee',
471
+ 95: '#e3eef3',
472
+ 100: '#ffffff',
473
+ },
474
+ // Green — H=140 C=18 (forest moss)
475
+ green: {
476
+ hue: 140,
477
+ chroma: 18,
478
+ 0: '#000000',
479
+ 5: '#0c1a08',
480
+ 10: '#152511',
481
+ 15: '#1c321a',
482
+ 20: '#2c4a20',
483
+ 25: '#2c4d2a',
484
+ 30: '#3a5e2c',
485
+ 35: '#446a39',
486
+ 40: '#557c44',
487
+ 45: '#658d50',
488
+ 50: '#779e5d',
489
+ 55: '#87b06a',
490
+ 60: '#96bd76',
491
+ 65: '#a3c987',
492
+ 70: '#b5d397',
493
+ 75: '#bdd99e',
494
+ 80: '#c8e0ad',
495
+ 85: '#d4e6bd',
496
+ 90: '#dde6d4',
497
+ 95: '#eaf3df',
498
+ 100: '#ffffff',
499
+ },
500
+ // Orange — H=40 C=35 (rust copper)
501
+ orange: {
502
+ hue: 40,
503
+ chroma: 35,
504
+ 0: '#000000',
505
+ 5: '#1f0d00',
506
+ 10: '#2c1606',
507
+ 15: '#3a200d',
508
+ 20: '#6e3812',
509
+ 25: '#5a371a',
510
+ 30: '#8a4818',
511
+ 35: '#9a5824',
512
+ 40: '#a05728',
513
+ 45: '#b66839',
514
+ 50: '#c87a4a',
515
+ 55: '#d6905a',
516
+ 60: '#dca275',
517
+ 65: '#e1b288',
518
+ 70: '#e8b894',
519
+ 75: '#ebbf9d',
520
+ 80: '#eecfb5',
521
+ 85: '#efddcd',
522
+ 90: '#f3e5d8',
523
+ 95: '#f9eee5',
524
+ 100: '#ffffff',
525
+ },
526
+ // Pink — H=345 C=22 (rose madder)
527
+ pink: {
528
+ hue: 345,
529
+ chroma: 22,
530
+ 0: '#000000',
531
+ 5: '#22060e',
532
+ 10: '#2e0c16',
533
+ 15: '#3a131e',
534
+ 20: '#71223c',
535
+ 25: '#572235',
536
+ 30: '#8d2d4c',
537
+ 35: '#9b3358',
538
+ 40: '#a04563',
539
+ 45: '#a04a6e',
540
+ 50: '#b15876',
541
+ 55: '#c26988',
542
+ 60: '#cf7593',
543
+ 65: '#d56891',
544
+ 70: '#dc82a4',
545
+ 75: '#e094b1',
546
+ 80: '#e7a5be',
547
+ 85: '#ebb6ca',
548
+ 90: '#eed6df',
549
+ 95: '#f5e3eb',
550
+ 100: '#ffffff',
551
+ },
552
+ // Purple — H=290 C=30 (cathedral plum)
553
+ purple: {
554
+ hue: 290,
555
+ chroma: 30,
556
+ 0: '#000000',
557
+ 5: '#1e0c25',
558
+ 10: '#2a1334',
559
+ 15: '#371b43',
560
+ 20: '#481b58',
561
+ 25: '#502163',
562
+ 30: '#5a2370',
563
+ 35: '#6e3088',
564
+ 40: '#82409c',
565
+ 45: '#9352ad',
566
+ 50: '#a363bd',
567
+ 55: '#b06ec9',
568
+ 60: '#bb7cd1',
569
+ 65: '#c084d6',
570
+ 70: '#c692db',
571
+ 75: '#cd9be0',
572
+ 80: '#d2a3df',
573
+ 85: '#dab3e6',
574
+ 90: '#e6daee',
575
+ 95: '#f0e6f4',
576
+ 100: '#ffffff',
577
+ },
578
+ // Red — H=15 C=12 (dusty rose) — gothic uses a desaturated rose
579
+ // family rather than vibrant crimson; #c6a6a2 sits near T80.
580
+ red: {
581
+ hue: 15,
582
+ chroma: 12,
583
+ 0: '#000000',
584
+ 5: '#1c0d09',
585
+ 10: '#26140f',
586
+ 15: '#301b16',
587
+ 20: '#3a231d',
588
+ 25: '#452c25',
589
+ 30: '#50352d',
590
+ 35: '#5b3e36',
591
+ 40: '#66483e',
592
+ 45: '#725347',
593
+ 50: '#7d5e51',
594
+ 55: '#896a5b',
595
+ 60: '#957565',
596
+ 65: '#a18170',
597
+ 70: '#ad8d7b',
598
+ 75: '#b99a87',
599
+ 80: '#c6a6a2',
600
+ 85: '#d2b4af',
601
+ 90: '#dec2bc',
602
+ 95: '#ebd0ca',
603
+ 100: '#ffffff',
604
+ },
605
+ // Teal — H=170 C=20 (verdigris)
606
+ teal: {
607
+ hue: 170,
608
+ chroma: 20,
609
+ 0: '#000000',
610
+ 5: '#001b14',
611
+ 10: '#062821',
612
+ 15: '#0d3530',
613
+ 20: '#174a40',
614
+ 25: '#194e44',
615
+ 30: '#1f5e52',
616
+ 35: '#2c6c5f',
617
+ 40: '#3a7b6c',
618
+ 45: '#498a7a',
619
+ 50: '#5aa091',
620
+ 55: '#5db5a3',
621
+ 60: '#6cbeab',
622
+ 65: '#7cc5b3',
623
+ 70: '#90d0c0',
624
+ 75: '#9fd4c5',
625
+ 80: '#b1ddcf',
626
+ 85: '#c0e1d6',
627
+ 90: '#d4e7e2',
628
+ 95: '#e1efe9',
629
+ 100: '#ffffff',
630
+ },
631
+ // Yellow — H=80 C=40 (aged gold)
632
+ yellow: {
633
+ hue: 80,
634
+ chroma: 40,
635
+ 0: '#000000',
636
+ 5: '#2c1d00',
637
+ 10: '#3a2900',
638
+ 15: '#4a3500',
639
+ 20: '#6c5010',
640
+ 25: '#6c5010',
641
+ 30: '#876515',
642
+ 35: '#9c7b1f',
643
+ 40: '#b18e2f',
644
+ 45: '#c39e3e',
645
+ 50: '#cca74c',
646
+ 55: '#d6b56a',
647
+ 60: '#dec074',
648
+ 65: '#e2c884',
649
+ 70: '#e6d091',
650
+ 75: '#e9d29a',
651
+ 80: '#ebd9a7',
652
+ 85: '#ebe1c4',
653
+ 90: '#f0e8d6',
654
+ 95: '#f7f1e3',
655
+ 100: '#ffffff',
656
+ },
657
+ } as const;