@gtcx/tokens 0.1.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.
@@ -0,0 +1,919 @@
1
+ /**
2
+ * @module primitives
3
+ *
4
+ * Primitive design tokens — raw values without semantic meaning.
5
+ * These form the foundation of the GTCX token system and should never
6
+ * be consumed directly by components. Instead, components consume
7
+ * semantic tokens ({@link ../semantic}) which reference these primitives.
8
+ *
9
+ * Architecture: primitives → semantic → platform overrides → dark overrides
10
+ */
11
+ /** GTCX brand color palette. Each scale runs 50 (lightest) → 950 (darkest). */
12
+ declare const colorPrimitives: {
13
+ /** GTCX brand primary — sky blue */
14
+ readonly primary: {
15
+ readonly 50: "#f0f9ff";
16
+ readonly 100: "#e0f2fe";
17
+ readonly 200: "#bae6fd";
18
+ readonly 300: "#7dd3fc";
19
+ readonly 400: "#38bdf8";
20
+ readonly 500: "#0ea5e9";
21
+ readonly 600: "#0284c7";
22
+ readonly 700: "#0369a1";
23
+ readonly 800: "#075985";
24
+ readonly 900: "#0c4a6e";
25
+ readonly 950: "#082f49";
26
+ };
27
+ /** GTCX brand secondary — purple */
28
+ readonly secondary: {
29
+ readonly 50: "#faf5ff";
30
+ readonly 100: "#f3e8ff";
31
+ readonly 200: "#e9d5ff";
32
+ readonly 300: "#d8b4fe";
33
+ readonly 400: "#c084fc";
34
+ readonly 500: "#a855f7";
35
+ readonly 600: "#9333ea";
36
+ readonly 700: "#7c3aed";
37
+ readonly 800: "#6b21a8";
38
+ readonly 900: "#581c87";
39
+ readonly 950: "#3b0764";
40
+ };
41
+ /** Positive feedback, approvals, profit */
42
+ readonly success: {
43
+ readonly 50: "#f0fdf4";
44
+ readonly 100: "#dcfce7";
45
+ readonly 200: "#bbf7d0";
46
+ readonly 300: "#86efac";
47
+ readonly 400: "#4ade80";
48
+ readonly 500: "#22c55e";
49
+ readonly 600: "#16a34a";
50
+ readonly 700: "#15803d";
51
+ readonly 800: "#166534";
52
+ readonly 900: "#14532d";
53
+ readonly 950: "#052e16";
54
+ };
55
+ /** Caution states, pending actions */
56
+ readonly warning: {
57
+ readonly 50: "#fffbeb";
58
+ readonly 100: "#fef3c7";
59
+ readonly 200: "#fde68a";
60
+ readonly 300: "#fcd34d";
61
+ readonly 400: "#fbbf24";
62
+ readonly 500: "#f59e0b";
63
+ readonly 600: "#d97706";
64
+ readonly 700: "#b45309";
65
+ readonly 800: "#92400e";
66
+ readonly 900: "#78350f";
67
+ readonly 950: "#451a03";
68
+ };
69
+ /** Destructive actions, rejections, loss */
70
+ readonly error: {
71
+ readonly 50: "#fef2f2";
72
+ readonly 100: "#fee2e2";
73
+ readonly 200: "#fecaca";
74
+ readonly 300: "#fca5a5";
75
+ readonly 400: "#f87171";
76
+ readonly 500: "#ef4444";
77
+ readonly 600: "#dc2626";
78
+ readonly 700: "#b91c1c";
79
+ readonly 800: "#991b1b";
80
+ readonly 900: "#7f1d1d";
81
+ readonly 950: "#450a0a";
82
+ };
83
+ /** Informational, links */
84
+ readonly info: {
85
+ readonly 50: "#eff6ff";
86
+ readonly 100: "#dbeafe";
87
+ readonly 200: "#bfdbfe";
88
+ readonly 300: "#93c5fd";
89
+ readonly 400: "#60a5fa";
90
+ readonly 500: "#3b82f6";
91
+ readonly 600: "#2563eb";
92
+ readonly 700: "#1d4ed8";
93
+ readonly 800: "#1e40af";
94
+ readonly 900: "#1e3a8a";
95
+ readonly 950: "#172554";
96
+ };
97
+ /** Grays for text, backgrounds, borders */
98
+ readonly neutral: {
99
+ readonly 50: "#fafafa";
100
+ readonly 100: "#f5f5f5";
101
+ readonly 200: "#e5e5e5";
102
+ readonly 300: "#d4d4d4";
103
+ readonly 400: "#a3a3a3";
104
+ readonly 500: "#737373";
105
+ readonly 600: "#525252";
106
+ readonly 700: "#404040";
107
+ readonly 800: "#262626";
108
+ readonly 900: "#171717";
109
+ readonly 950: "#0a0a0a";
110
+ };
111
+ readonly white: "#ffffff";
112
+ readonly black: "#000000";
113
+ };
114
+ /** 4px base spacing scale. Keys are multipliers (1 = 4px, 2 = 8px, etc.). */
115
+ declare const spacingPrimitives: {
116
+ readonly 0: 0;
117
+ readonly 1: 4;
118
+ readonly 2: 8;
119
+ readonly 3: 12;
120
+ readonly 4: 16;
121
+ readonly 5: 20;
122
+ readonly 6: 24;
123
+ readonly 8: 32;
124
+ readonly 10: 40;
125
+ readonly 12: 48;
126
+ readonly 16: 64;
127
+ readonly 20: 80;
128
+ readonly 24: 96;
129
+ readonly 32: 128;
130
+ };
131
+ /** Font size scale in pixels. */
132
+ declare const fontSizePrimitives: {
133
+ readonly xs: 12;
134
+ readonly sm: 14;
135
+ readonly base: 16;
136
+ readonly lg: 18;
137
+ readonly xl: 20;
138
+ readonly '2xl': 24;
139
+ readonly '3xl': 30;
140
+ readonly '4xl': 36;
141
+ readonly '5xl': 48;
142
+ };
143
+ /** Font weight scale. Maps named weights to numeric values. */
144
+ declare const fontWeightPrimitives: {
145
+ readonly normal: 400;
146
+ readonly medium: 500;
147
+ readonly semibold: 600;
148
+ readonly bold: 700;
149
+ };
150
+ /** Line height ratios. Applied to font sizes to compute actual line heights. */
151
+ declare const lineHeightPrimitives: {
152
+ readonly tight: 1.2;
153
+ readonly normal: 1.5;
154
+ readonly relaxed: 1.7;
155
+ };
156
+ /** Letter spacing in em units. */
157
+ declare const letterSpacingPrimitives: {
158
+ readonly tight: "-0.025em";
159
+ readonly normal: "0em";
160
+ readonly wide: "0.025em";
161
+ };
162
+ /** Font family stacks with system fallbacks. */
163
+ declare const fontFamilyPrimitives: {
164
+ readonly sans: "Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif";
165
+ readonly mono: "JetBrains Mono, Fira Code, Consolas, monospace";
166
+ readonly serif: "Georgia, 'Times New Roman', serif";
167
+ };
168
+ /** Border radius scale in pixels. */
169
+ declare const borderRadiusPrimitives: {
170
+ readonly none: 0;
171
+ readonly sm: 2;
172
+ readonly md: 4;
173
+ readonly lg: 8;
174
+ readonly xl: 12;
175
+ readonly full: 9999;
176
+ };
177
+ /** Box shadow scale using CSS shadow syntax. */
178
+ declare const shadowPrimitives: {
179
+ readonly none: "none";
180
+ readonly sm: "0 1px 2px 0 rgb(0 0 0 / 0.05)";
181
+ readonly md: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)";
182
+ readonly lg: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)";
183
+ };
184
+ /** Viewport width breakpoints in pixels (min-width). */
185
+ declare const breakpointPrimitives: {
186
+ readonly xs: 480;
187
+ readonly sm: 576;
188
+ readonly md: 768;
189
+ readonly lg: 992;
190
+ readonly xl: 1200;
191
+ readonly xxl: 1600;
192
+ };
193
+ /** Z-index scale for layered UI elements. */
194
+ declare const zIndexPrimitives: {
195
+ readonly dropdown: 1000;
196
+ readonly sticky: 1020;
197
+ readonly fixed: 1030;
198
+ readonly modal: 1040;
199
+ readonly popover: 1050;
200
+ readonly tooltip: 1060;
201
+ };
202
+ /** Transition shorthand values (duration + easing). */
203
+ declare const transitionPrimitives: {
204
+ readonly fast: "150ms ease";
205
+ readonly normal: "250ms ease";
206
+ readonly slow: "350ms ease";
207
+ };
208
+ /** Opacity values for interactive and feedback states. */
209
+ declare const opacityPrimitives: {
210
+ /** Disabled controls */
211
+ readonly disabled: 0.4;
212
+ /** Hover state overlays */
213
+ readonly hover: 0.08;
214
+ /** Active/pressed state overlays */
215
+ readonly pressed: 0.12;
216
+ /** Modal backdrop overlay */
217
+ readonly overlay: 0.5;
218
+ /** Loading state content fade */
219
+ readonly loading: 0.65;
220
+ };
221
+ /** Focus ring styling for keyboard-accessible focus indicators. */
222
+ declare const focusPrimitives: {
223
+ /** Ring width in pixels */
224
+ readonly ringWidth: 2;
225
+ /** Ring offset from element edge in pixels */
226
+ readonly ringOffset: 2;
227
+ /** Ring color — uses primary brand color */
228
+ readonly ringColor: "#0ea5e9";
229
+ /** Ring border-style */
230
+ readonly ringStyle: "solid";
231
+ };
232
+ /** Animation duration and easing primitives for motion tokens. */
233
+ declare const motionPrimitives: {
234
+ /** Quick micro-interactions (hover, focus) */
235
+ readonly durationFast: 150;
236
+ /** Standard transitions (expand, collapse) */
237
+ readonly durationNormal: 250;
238
+ /** Deliberate animations (page transitions, modals) */
239
+ readonly durationSlow: 350;
240
+ /** Default easing — deceleration curve */
241
+ readonly easeDefault: "cubic-bezier(0.4, 0, 0.2, 1)";
242
+ /** Entrance easing — elements entering the viewport */
243
+ readonly easeIn: "cubic-bezier(0.4, 0, 1, 1)";
244
+ /** Exit easing — elements leaving the viewport */
245
+ readonly easeOut: "cubic-bezier(0, 0, 0.2, 1)";
246
+ /** Symmetric easing — elements that enter and exit */
247
+ readonly easeInOut: "cubic-bezier(0.4, 0, 0.2, 1)";
248
+ };
249
+ type ColorPrimitives = typeof colorPrimitives;
250
+ type SpacingPrimitives = typeof spacingPrimitives;
251
+ type FontSizePrimitives = typeof fontSizePrimitives;
252
+ type FontWeightPrimitives = typeof fontWeightPrimitives;
253
+ type LineHeightPrimitives = typeof lineHeightPrimitives;
254
+ type LetterSpacingPrimitives = typeof letterSpacingPrimitives;
255
+ type FontFamilyPrimitives = typeof fontFamilyPrimitives;
256
+ type BorderRadiusPrimitives = typeof borderRadiusPrimitives;
257
+ type ShadowPrimitives = typeof shadowPrimitives;
258
+ type BreakpointPrimitives = typeof breakpointPrimitives;
259
+ type ZIndexPrimitives = typeof zIndexPrimitives;
260
+ type TransitionPrimitives = typeof transitionPrimitives;
261
+ type OpacityPrimitives = typeof opacityPrimitives;
262
+ type FocusPrimitives = typeof focusPrimitives;
263
+ type MotionPrimitives = typeof motionPrimitives;
264
+ /** Union of all breakpoint names. */
265
+ type BreakpointKey = keyof typeof breakpointPrimitives;
266
+ /** Union of all color scale names (e.g. 'primary', 'success', 'neutral'). */
267
+ type ColorScaleKey = Exclude<keyof typeof colorPrimitives, 'white' | 'black'>;
268
+ /** Union of color shade steps (50, 100, ... 950). */
269
+ type ColorShade = keyof (typeof colorPrimitives)['primary'];
270
+
271
+ /**
272
+ * @module semantic
273
+ *
274
+ * Semantic design tokens — named for their purpose, not their value.
275
+ * Components should consume these tokens exclusively; never reference
276
+ * primitives directly.
277
+ *
278
+ * Each category is exported individually so consumers can import only
279
+ * what they need:
280
+ *
281
+ * ```ts
282
+ * import { semanticColors, semanticTypography } from '@gtcx/tokens';
283
+ * ```
284
+ *
285
+ * The combined `semanticTokens` object is also exported for backward
286
+ * compatibility with code that imports the entire token set.
287
+ */
288
+ /**
289
+ * Semantic color tokens.
290
+ *
291
+ * Every value traces back to a {@link colorPrimitives} value — no orphan
292
+ * hex strings. Dark mode overrides live in {@link ../dark | darkSemanticColors}.
293
+ */
294
+ declare const semanticColors: {
295
+ /** Primary brand action color */
296
+ readonly primary: "#0ea5e9";
297
+ /** Primary hover state */
298
+ readonly primaryHover: "#0284c7";
299
+ /** Primary active/pressed state */
300
+ readonly primaryActive: "#0369a1";
301
+ /** Primary tinted background (selected rows, badges) */
302
+ readonly primaryBg: "#f0f9ff";
303
+ /** Secondary brand color */
304
+ readonly secondary: "#a855f7";
305
+ /** Secondary hover state */
306
+ readonly secondaryHover: "#9333ea";
307
+ /** Positive outcome (approvals, passing checks) */
308
+ readonly success: "#22c55e";
309
+ /** Caution state (pending review, warnings) */
310
+ readonly warning: "#f59e0b";
311
+ /** Destructive/failure state */
312
+ readonly error: "#ef4444";
313
+ /** Informational state */
314
+ readonly info: "#3b82f6";
315
+ /** Financial gain */
316
+ readonly profit: "#22c55e";
317
+ /** Financial loss */
318
+ readonly loss: "#ef4444";
319
+ /** Compliance approved */
320
+ readonly approved: "#16a34a";
321
+ /** Compliance pending */
322
+ readonly pending: "#d97706";
323
+ /** Compliance rejected */
324
+ readonly rejected: "#dc2626";
325
+ /** Security verified */
326
+ readonly secure: "#16a34a";
327
+ /** Security compromised */
328
+ readonly insecure: "#dc2626";
329
+ /** Primary body text */
330
+ readonly textPrimary: "#171717";
331
+ /** Secondary/supporting text */
332
+ readonly textSecondary: "#525252";
333
+ /** Tertiary/label text */
334
+ readonly textTertiary: "#737373";
335
+ /** Muted/placeholder text */
336
+ readonly textMuted: "#a3a3a3";
337
+ /** Text on dark backgrounds */
338
+ readonly textInverse: "#fafafa";
339
+ /** Page-level background */
340
+ readonly bgPage: "#fafafa";
341
+ /** Card/surface background */
342
+ readonly bgSurface: "#ffffff";
343
+ /** Surface hover state */
344
+ readonly bgSurfaceHover: "#f5f5f5";
345
+ /** Tertiary surface (nested cards, wells) */
346
+ readonly bgSurfaceTertiary: "#e5e5e5";
347
+ /** Inverse background (dark sections) */
348
+ readonly bgInverse: "#171717";
349
+ /** Sidebar background */
350
+ readonly bgSidebar: "#ffffff";
351
+ /** Header background */
352
+ readonly bgHeader: "#ffffff";
353
+ /** Default border */
354
+ readonly border: "#e5e5e5";
355
+ /** Light/subtle border */
356
+ readonly borderLight: "#f5f5f5";
357
+ /** Emphasized border */
358
+ readonly borderSecondary: "#d4d4d4";
359
+ /** Focus ring border */
360
+ readonly borderFocus: "#0ea5e9";
361
+ /** Default link color */
362
+ readonly link: "#0284c7";
363
+ /** Link hover state */
364
+ readonly linkHover: "#0369a1";
365
+ };
366
+ /**
367
+ * Semantic spacing tokens.
368
+ *
369
+ * Page-level gutters, component-internal spacing, and layout dimensions.
370
+ * All values trace to {@link spacingPrimitives}.
371
+ */
372
+ declare const semanticSpacing: {
373
+ /** Horizontal page gutter */
374
+ readonly pageGutter: 24;
375
+ /** Internal card padding */
376
+ readonly cardPadding: 16;
377
+ /** Gap between page sections */
378
+ readonly sectionGap: 24;
379
+ /** Gap between sibling components */
380
+ readonly componentGap: 12;
381
+ /** Inline element gap (icon + label) */
382
+ readonly inlineGap: 8;
383
+ /** Per-component spacing presets */
384
+ readonly component: {
385
+ readonly button: {
386
+ readonly paddingX: 16;
387
+ readonly paddingY: 8;
388
+ readonly gap: 8;
389
+ };
390
+ readonly input: {
391
+ readonly paddingX: 12;
392
+ readonly paddingY: 8;
393
+ };
394
+ readonly card: {
395
+ readonly padding: 24;
396
+ readonly gap: 16;
397
+ };
398
+ readonly form: {
399
+ readonly fieldGap: 16;
400
+ readonly sectionGap: 32;
401
+ readonly labelGap: 8;
402
+ };
403
+ readonly modal: {
404
+ readonly padding: 24;
405
+ readonly gap: 16;
406
+ };
407
+ readonly table: {
408
+ readonly cellPadding: 16;
409
+ readonly headerPadding: 16;
410
+ };
411
+ };
412
+ /** Layout-level spacing presets */
413
+ readonly layout: {
414
+ readonly container: {
415
+ readonly paddingX: 16;
416
+ readonly paddingY: 24;
417
+ };
418
+ readonly section: {
419
+ readonly marginY: 48;
420
+ readonly gap: 32;
421
+ };
422
+ readonly page: {
423
+ readonly marginY: 64;
424
+ readonly paddingX: 24;
425
+ };
426
+ };
427
+ };
428
+ /**
429
+ * Semantic typography tokens.
430
+ *
431
+ * Font families, display/heading/body/button type scales.
432
+ * All values trace to font-* primitive scales.
433
+ */
434
+ declare const semanticTypography: {
435
+ /** Default sans-serif font stack */
436
+ readonly fontFamily: "Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif";
437
+ /** Monospace font stack for code */
438
+ readonly fontFamilyCode: "JetBrains Mono, Fira Code, Consolas, monospace";
439
+ /** Serif font stack for editorial content */
440
+ readonly fontFamilySerif: "Georgia, 'Times New Roman', serif";
441
+ /** Display type scale — hero sections, feature numbers */
442
+ readonly display: {
443
+ readonly lg: {
444
+ readonly fontSize: 48;
445
+ readonly fontWeight: 700;
446
+ readonly lineHeight: 1.2;
447
+ readonly letterSpacing: "-0.025em";
448
+ };
449
+ readonly md: {
450
+ readonly fontSize: 36;
451
+ readonly fontWeight: 700;
452
+ readonly lineHeight: 1.2;
453
+ readonly letterSpacing: "0em";
454
+ };
455
+ readonly sm: {
456
+ readonly fontSize: 30;
457
+ readonly fontWeight: 600;
458
+ readonly lineHeight: 1.2;
459
+ readonly letterSpacing: "0em";
460
+ };
461
+ };
462
+ /** Heading type scale — page/section/card headings */
463
+ readonly heading: {
464
+ readonly h1: {
465
+ readonly fontSize: 30;
466
+ readonly fontWeight: 700;
467
+ readonly lineHeight: 1.2;
468
+ };
469
+ readonly h2: {
470
+ readonly fontSize: 24;
471
+ readonly fontWeight: 600;
472
+ readonly lineHeight: 1.2;
473
+ };
474
+ readonly h3: {
475
+ readonly fontSize: 20;
476
+ readonly fontWeight: 600;
477
+ readonly lineHeight: 1.5;
478
+ };
479
+ readonly h4: {
480
+ readonly fontSize: 18;
481
+ readonly fontWeight: 500;
482
+ readonly lineHeight: 1.5;
483
+ };
484
+ };
485
+ /** Body type scale — paragraphs, descriptions */
486
+ readonly body: {
487
+ readonly lg: {
488
+ readonly fontSize: 18;
489
+ readonly fontWeight: 400;
490
+ readonly lineHeight: 1.7;
491
+ };
492
+ readonly md: {
493
+ readonly fontSize: 16;
494
+ readonly fontWeight: 400;
495
+ readonly lineHeight: 1.5;
496
+ };
497
+ readonly sm: {
498
+ readonly fontSize: 14;
499
+ readonly fontWeight: 400;
500
+ readonly lineHeight: 1.5;
501
+ };
502
+ };
503
+ /** Caption — footnotes, timestamps, fine print */
504
+ readonly caption: {
505
+ readonly fontSize: 12;
506
+ readonly fontWeight: 400;
507
+ readonly lineHeight: 1.5;
508
+ };
509
+ /** Button label type scale */
510
+ readonly button: {
511
+ readonly lg: {
512
+ readonly fontSize: 18;
513
+ readonly fontWeight: 500;
514
+ readonly lineHeight: 1.5;
515
+ };
516
+ readonly md: {
517
+ readonly fontSize: 16;
518
+ readonly fontWeight: 500;
519
+ readonly lineHeight: 1.5;
520
+ };
521
+ readonly sm: {
522
+ readonly fontSize: 14;
523
+ readonly fontWeight: 500;
524
+ readonly lineHeight: 1.5;
525
+ };
526
+ };
527
+ };
528
+ /** Semantic border-radius tokens for component shapes. */
529
+ declare const semanticRadii: {
530
+ /** Default component radius */
531
+ readonly component: 4;
532
+ /** Card/panel radius */
533
+ readonly card: 8;
534
+ /** Button radius */
535
+ readonly button: 4;
536
+ /** Input/select radius */
537
+ readonly input: 4;
538
+ /** Tag/badge radius */
539
+ readonly tag: 2;
540
+ /** Avatar — fully round */
541
+ readonly avatar: 9999;
542
+ };
543
+ /** Semantic shadow tokens for elevation. */
544
+ declare const semanticShadows: {
545
+ /** Card/panel elevation */
546
+ readonly card: "0 1px 2px 0 rgb(0 0 0 / 0.05)";
547
+ /** Dropdown/popover elevation */
548
+ readonly dropdown: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)";
549
+ /** Modal/dialog elevation */
550
+ readonly modal: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)";
551
+ };
552
+ /** Semantic layout dimension tokens (in pixels). */
553
+ declare const semanticLayout: {
554
+ /** Sidebar expanded width */
555
+ readonly sidebarWidth: 240;
556
+ /** Sidebar collapsed width */
557
+ readonly sidebarCollapsedWidth: 72;
558
+ /** Top header height */
559
+ readonly headerHeight: 56;
560
+ /** Maximum content area width */
561
+ readonly contentMaxWidth: 1440;
562
+ };
563
+ /**
564
+ * Combined semantic token object.
565
+ *
566
+ * @deprecated Prefer the named exports (`semanticColors`, `semanticSpacing`,
567
+ * etc.) for better tree-shaking and clearer imports. This combined object
568
+ * is preserved for backward compatibility only.
569
+ */
570
+ declare const semanticTokens: {
571
+ readonly colors: {
572
+ /** Primary brand action color */
573
+ readonly primary: "#0ea5e9";
574
+ /** Primary hover state */
575
+ readonly primaryHover: "#0284c7";
576
+ /** Primary active/pressed state */
577
+ readonly primaryActive: "#0369a1";
578
+ /** Primary tinted background (selected rows, badges) */
579
+ readonly primaryBg: "#f0f9ff";
580
+ /** Secondary brand color */
581
+ readonly secondary: "#a855f7";
582
+ /** Secondary hover state */
583
+ readonly secondaryHover: "#9333ea";
584
+ /** Positive outcome (approvals, passing checks) */
585
+ readonly success: "#22c55e";
586
+ /** Caution state (pending review, warnings) */
587
+ readonly warning: "#f59e0b";
588
+ /** Destructive/failure state */
589
+ readonly error: "#ef4444";
590
+ /** Informational state */
591
+ readonly info: "#3b82f6";
592
+ /** Financial gain */
593
+ readonly profit: "#22c55e";
594
+ /** Financial loss */
595
+ readonly loss: "#ef4444";
596
+ /** Compliance approved */
597
+ readonly approved: "#16a34a";
598
+ /** Compliance pending */
599
+ readonly pending: "#d97706";
600
+ /** Compliance rejected */
601
+ readonly rejected: "#dc2626";
602
+ /** Security verified */
603
+ readonly secure: "#16a34a";
604
+ /** Security compromised */
605
+ readonly insecure: "#dc2626";
606
+ /** Primary body text */
607
+ readonly textPrimary: "#171717";
608
+ /** Secondary/supporting text */
609
+ readonly textSecondary: "#525252";
610
+ /** Tertiary/label text */
611
+ readonly textTertiary: "#737373";
612
+ /** Muted/placeholder text */
613
+ readonly textMuted: "#a3a3a3";
614
+ /** Text on dark backgrounds */
615
+ readonly textInverse: "#fafafa";
616
+ /** Page-level background */
617
+ readonly bgPage: "#fafafa";
618
+ /** Card/surface background */
619
+ readonly bgSurface: "#ffffff";
620
+ /** Surface hover state */
621
+ readonly bgSurfaceHover: "#f5f5f5";
622
+ /** Tertiary surface (nested cards, wells) */
623
+ readonly bgSurfaceTertiary: "#e5e5e5";
624
+ /** Inverse background (dark sections) */
625
+ readonly bgInverse: "#171717";
626
+ /** Sidebar background */
627
+ readonly bgSidebar: "#ffffff";
628
+ /** Header background */
629
+ readonly bgHeader: "#ffffff";
630
+ /** Default border */
631
+ readonly border: "#e5e5e5";
632
+ /** Light/subtle border */
633
+ readonly borderLight: "#f5f5f5";
634
+ /** Emphasized border */
635
+ readonly borderSecondary: "#d4d4d4";
636
+ /** Focus ring border */
637
+ readonly borderFocus: "#0ea5e9";
638
+ /** Default link color */
639
+ readonly link: "#0284c7";
640
+ /** Link hover state */
641
+ readonly linkHover: "#0369a1";
642
+ };
643
+ readonly spacing: {
644
+ /** Horizontal page gutter */
645
+ readonly pageGutter: 24;
646
+ /** Internal card padding */
647
+ readonly cardPadding: 16;
648
+ /** Gap between page sections */
649
+ readonly sectionGap: 24;
650
+ /** Gap between sibling components */
651
+ readonly componentGap: 12;
652
+ /** Inline element gap (icon + label) */
653
+ readonly inlineGap: 8;
654
+ /** Per-component spacing presets */
655
+ readonly component: {
656
+ readonly button: {
657
+ readonly paddingX: 16;
658
+ readonly paddingY: 8;
659
+ readonly gap: 8;
660
+ };
661
+ readonly input: {
662
+ readonly paddingX: 12;
663
+ readonly paddingY: 8;
664
+ };
665
+ readonly card: {
666
+ readonly padding: 24;
667
+ readonly gap: 16;
668
+ };
669
+ readonly form: {
670
+ readonly fieldGap: 16;
671
+ readonly sectionGap: 32;
672
+ readonly labelGap: 8;
673
+ };
674
+ readonly modal: {
675
+ readonly padding: 24;
676
+ readonly gap: 16;
677
+ };
678
+ readonly table: {
679
+ readonly cellPadding: 16;
680
+ readonly headerPadding: 16;
681
+ };
682
+ };
683
+ /** Layout-level spacing presets */
684
+ readonly layout: {
685
+ readonly container: {
686
+ readonly paddingX: 16;
687
+ readonly paddingY: 24;
688
+ };
689
+ readonly section: {
690
+ readonly marginY: 48;
691
+ readonly gap: 32;
692
+ };
693
+ readonly page: {
694
+ readonly marginY: 64;
695
+ readonly paddingX: 24;
696
+ };
697
+ };
698
+ };
699
+ readonly typography: {
700
+ /** Default sans-serif font stack */
701
+ readonly fontFamily: "Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif";
702
+ /** Monospace font stack for code */
703
+ readonly fontFamilyCode: "JetBrains Mono, Fira Code, Consolas, monospace";
704
+ /** Serif font stack for editorial content */
705
+ readonly fontFamilySerif: "Georgia, 'Times New Roman', serif";
706
+ /** Display type scale — hero sections, feature numbers */
707
+ readonly display: {
708
+ readonly lg: {
709
+ readonly fontSize: 48;
710
+ readonly fontWeight: 700;
711
+ readonly lineHeight: 1.2;
712
+ readonly letterSpacing: "-0.025em";
713
+ };
714
+ readonly md: {
715
+ readonly fontSize: 36;
716
+ readonly fontWeight: 700;
717
+ readonly lineHeight: 1.2;
718
+ readonly letterSpacing: "0em";
719
+ };
720
+ readonly sm: {
721
+ readonly fontSize: 30;
722
+ readonly fontWeight: 600;
723
+ readonly lineHeight: 1.2;
724
+ readonly letterSpacing: "0em";
725
+ };
726
+ };
727
+ /** Heading type scale — page/section/card headings */
728
+ readonly heading: {
729
+ readonly h1: {
730
+ readonly fontSize: 30;
731
+ readonly fontWeight: 700;
732
+ readonly lineHeight: 1.2;
733
+ };
734
+ readonly h2: {
735
+ readonly fontSize: 24;
736
+ readonly fontWeight: 600;
737
+ readonly lineHeight: 1.2;
738
+ };
739
+ readonly h3: {
740
+ readonly fontSize: 20;
741
+ readonly fontWeight: 600;
742
+ readonly lineHeight: 1.5;
743
+ };
744
+ readonly h4: {
745
+ readonly fontSize: 18;
746
+ readonly fontWeight: 500;
747
+ readonly lineHeight: 1.5;
748
+ };
749
+ };
750
+ /** Body type scale — paragraphs, descriptions */
751
+ readonly body: {
752
+ readonly lg: {
753
+ readonly fontSize: 18;
754
+ readonly fontWeight: 400;
755
+ readonly lineHeight: 1.7;
756
+ };
757
+ readonly md: {
758
+ readonly fontSize: 16;
759
+ readonly fontWeight: 400;
760
+ readonly lineHeight: 1.5;
761
+ };
762
+ readonly sm: {
763
+ readonly fontSize: 14;
764
+ readonly fontWeight: 400;
765
+ readonly lineHeight: 1.5;
766
+ };
767
+ };
768
+ /** Caption — footnotes, timestamps, fine print */
769
+ readonly caption: {
770
+ readonly fontSize: 12;
771
+ readonly fontWeight: 400;
772
+ readonly lineHeight: 1.5;
773
+ };
774
+ /** Button label type scale */
775
+ readonly button: {
776
+ readonly lg: {
777
+ readonly fontSize: 18;
778
+ readonly fontWeight: 500;
779
+ readonly lineHeight: 1.5;
780
+ };
781
+ readonly md: {
782
+ readonly fontSize: 16;
783
+ readonly fontWeight: 500;
784
+ readonly lineHeight: 1.5;
785
+ };
786
+ readonly sm: {
787
+ readonly fontSize: 14;
788
+ readonly fontWeight: 500;
789
+ readonly lineHeight: 1.5;
790
+ };
791
+ };
792
+ };
793
+ readonly radii: {
794
+ /** Default component radius */
795
+ readonly component: 4;
796
+ /** Card/panel radius */
797
+ readonly card: 8;
798
+ /** Button radius */
799
+ readonly button: 4;
800
+ /** Input/select radius */
801
+ readonly input: 4;
802
+ /** Tag/badge radius */
803
+ readonly tag: 2;
804
+ /** Avatar — fully round */
805
+ readonly avatar: 9999;
806
+ };
807
+ readonly shadows: {
808
+ /** Card/panel elevation */
809
+ readonly card: "0 1px 2px 0 rgb(0 0 0 / 0.05)";
810
+ /** Dropdown/popover elevation */
811
+ readonly dropdown: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)";
812
+ /** Modal/dialog elevation */
813
+ readonly modal: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)";
814
+ };
815
+ readonly layout: {
816
+ /** Sidebar expanded width */
817
+ readonly sidebarWidth: 240;
818
+ /** Sidebar collapsed width */
819
+ readonly sidebarCollapsedWidth: 72;
820
+ /** Top header height */
821
+ readonly headerHeight: 56;
822
+ /** Maximum content area width */
823
+ readonly contentMaxWidth: 1440;
824
+ };
825
+ };
826
+ type SemanticColors = typeof semanticColors;
827
+ type SemanticSpacing = typeof semanticSpacing;
828
+ type SemanticTypography = typeof semanticTypography;
829
+ type SemanticRadii = typeof semanticRadii;
830
+ type SemanticShadows = typeof semanticShadows;
831
+ type SemanticLayout = typeof semanticLayout;
832
+ type SemanticTokens = typeof semanticTokens;
833
+ /** Union of all semantic color keys. */
834
+ type SemanticColorKey = keyof typeof semanticColors;
835
+ /** Union of top-level semantic spacing keys. */
836
+ type SemanticSpacingKey = keyof typeof semanticSpacing;
837
+
838
+ /**
839
+ * @module dark
840
+ *
841
+ * Dark theme color overrides. Every key in {@link semanticColors} has a
842
+ * corresponding override here. Components never read these directly —
843
+ * the theme engine ({@link @gtcx/theme}) applies them automatically
844
+ * when `mode === 'dark'`.
845
+ *
846
+ * Design rationale:
847
+ * - Text uses lighter shades (50–400) for readability on dark backgrounds.
848
+ * - Backgrounds use 800–950 to preserve depth hierarchy.
849
+ * - Accent colors shift to 400 for better contrast on dark surfaces.
850
+ * - Borders use 700–800 for subtle structure without harshness.
851
+ */
852
+ /**
853
+ * Dark mode overrides for {@link semanticColors}.
854
+ *
855
+ * Structure intentionally mirrors `semanticColors` so the theme engine
856
+ * can validate completeness at build time.
857
+ */
858
+ declare const darkSemanticColors: {
859
+ readonly primary: "#38bdf8";
860
+ readonly primaryHover: "#7dd3fc";
861
+ readonly primaryActive: "#0ea5e9";
862
+ readonly primaryBg: "#082f49";
863
+ readonly secondary: "#c084fc";
864
+ readonly secondaryHover: "#d8b4fe";
865
+ readonly success: "#4ade80";
866
+ readonly warning: "#fbbf24";
867
+ readonly error: "#f87171";
868
+ readonly info: "#60a5fa";
869
+ readonly profit: "#4ade80";
870
+ readonly loss: "#f87171";
871
+ readonly approved: "#4ade80";
872
+ readonly pending: "#fbbf24";
873
+ readonly rejected: "#f87171";
874
+ readonly secure: "#4ade80";
875
+ readonly insecure: "#f87171";
876
+ readonly textPrimary: "#fafafa";
877
+ readonly textSecondary: "#d4d4d4";
878
+ readonly textTertiary: "#a3a3a3";
879
+ readonly textMuted: "#737373";
880
+ readonly textInverse: "#171717";
881
+ readonly bgPage: "#0a0a0a";
882
+ readonly bgSurface: "#171717";
883
+ readonly bgSurfaceHover: "#262626";
884
+ readonly bgSurfaceTertiary: "#404040";
885
+ readonly bgInverse: "#fafafa";
886
+ readonly bgSidebar: "#171717";
887
+ readonly bgHeader: "#171717";
888
+ readonly border: "#404040";
889
+ readonly borderLight: "#262626";
890
+ readonly borderSecondary: "#525252";
891
+ readonly borderFocus: "#38bdf8";
892
+ readonly link: "#38bdf8";
893
+ readonly linkHover: "#7dd3fc";
894
+ };
895
+ /**
896
+ * Legacy dark colors export.
897
+ *
898
+ * @deprecated Use {@link darkSemanticColors} instead. This nested structure
899
+ * is preserved for backward compatibility only.
900
+ */
901
+ declare const darkColors: {
902
+ readonly text: {
903
+ readonly primary: "#fafafa";
904
+ readonly secondary: "#d4d4d4";
905
+ readonly tertiary: "#a3a3a3";
906
+ };
907
+ readonly background: {
908
+ readonly primary: "#0a0a0a";
909
+ readonly secondary: "#171717";
910
+ readonly tertiary: "#404040";
911
+ };
912
+ readonly border: {
913
+ readonly primary: "#404040";
914
+ readonly secondary: "#525252";
915
+ };
916
+ };
917
+ type DarkSemanticColors = typeof darkSemanticColors;
918
+
919
+ export { type BorderRadiusPrimitives, type BreakpointKey, type BreakpointPrimitives, type ColorPrimitives, type ColorScaleKey, type ColorShade, type DarkSemanticColors, type FocusPrimitives, type FontFamilyPrimitives, type FontSizePrimitives, type FontWeightPrimitives, type LetterSpacingPrimitives, type LineHeightPrimitives, type MotionPrimitives, type OpacityPrimitives, type SemanticColorKey, type SemanticColors, type SemanticLayout, type SemanticRadii, type SemanticShadows, type SemanticSpacing, type SemanticSpacingKey, type SemanticTokens, type SemanticTypography, type ShadowPrimitives, type SpacingPrimitives, type TransitionPrimitives, type ZIndexPrimitives, borderRadiusPrimitives, breakpointPrimitives, colorPrimitives, darkColors, darkSemanticColors, focusPrimitives, fontFamilyPrimitives, fontSizePrimitives, fontWeightPrimitives, letterSpacingPrimitives, lineHeightPrimitives, motionPrimitives, opacityPrimitives, semanticColors, semanticLayout, semanticRadii, semanticShadows, semanticSpacing, semanticTokens, semanticTypography, shadowPrimitives, spacingPrimitives, transitionPrimitives, zIndexPrimitives };