@luxfi/ui 7.4.4 → 7.4.5

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.
Files changed (117) hide show
  1. package/package.json +2 -2
  2. package/src/provider.tsx +7 -0
  3. package/tokens.css +319 -613
  4. package/dist/accordion.d.cts +0 -74
  5. package/dist/accordion.d.ts +0 -74
  6. package/dist/alert.d.cts +0 -30
  7. package/dist/alert.d.ts +0 -30
  8. package/dist/avatar.d.cts +0 -25
  9. package/dist/avatar.d.ts +0 -25
  10. package/dist/badge.d.cts +0 -19
  11. package/dist/badge.d.ts +0 -19
  12. package/dist/bank.d.cts +0 -83
  13. package/dist/bank.d.ts +0 -83
  14. package/dist/button.d.cts +0 -55
  15. package/dist/button.d.ts +0 -55
  16. package/dist/checkbox.d.cts +0 -32
  17. package/dist/checkbox.d.ts +0 -32
  18. package/dist/chrome.d.cts +0 -93
  19. package/dist/chrome.d.ts +0 -93
  20. package/dist/close-button.d.cts +0 -9
  21. package/dist/close-button.d.ts +0 -9
  22. package/dist/collapsible.d.cts +0 -23
  23. package/dist/collapsible.d.ts +0 -23
  24. package/dist/color-mode.d.cts +0 -25
  25. package/dist/color-mode.d.ts +0 -25
  26. package/dist/dialog.d.cts +0 -118
  27. package/dist/dialog.d.ts +0 -118
  28. package/dist/drawer.d.cts +0 -36
  29. package/dist/drawer.d.ts +0 -36
  30. package/dist/empty-state.d.cts +0 -13
  31. package/dist/empty-state.d.ts +0 -13
  32. package/dist/expiration-selector.d.cts +0 -16
  33. package/dist/expiration-selector.d.ts +0 -16
  34. package/dist/field.d.cts +0 -24
  35. package/dist/field.d.ts +0 -24
  36. package/dist/greeks-display.d.cts +0 -14
  37. package/dist/greeks-display.d.ts +0 -14
  38. package/dist/gui.d.cts +0 -2
  39. package/dist/gui.d.ts +0 -2
  40. package/dist/heading.d.cts +0 -10
  41. package/dist/heading.d.ts +0 -10
  42. package/dist/iam.d.cts +0 -65
  43. package/dist/iam.d.ts +0 -65
  44. package/dist/icon-button.d.cts +0 -33
  45. package/dist/icon-button.d.ts +0 -33
  46. package/dist/icons.d.cts +0 -1
  47. package/dist/icons.d.ts +0 -1
  48. package/dist/identity.d.cts +0 -64
  49. package/dist/identity.d.ts +0 -64
  50. package/dist/image.d.cts +0 -57
  51. package/dist/image.d.ts +0 -57
  52. package/dist/index.d.cts +0 -64
  53. package/dist/index.d.ts +0 -64
  54. package/dist/input-group.d.cts +0 -17
  55. package/dist/input-group.d.ts +0 -17
  56. package/dist/input.d.cts +0 -17
  57. package/dist/input.d.ts +0 -17
  58. package/dist/link.d.cts +0 -37
  59. package/dist/link.d.ts +0 -37
  60. package/dist/lux.config.d.cts +0 -433
  61. package/dist/lux.config.d.ts +0 -433
  62. package/dist/menu.d.cts +0 -84
  63. package/dist/menu.d.ts +0 -84
  64. package/dist/next.d.cts +0 -32
  65. package/dist/next.d.ts +0 -32
  66. package/dist/option-chain.d.cts +0 -37
  67. package/dist/option-chain.d.ts +0 -37
  68. package/dist/option-position.d.cts +0 -29
  69. package/dist/option-position.d.ts +0 -29
  70. package/dist/pin-input.d.cts +0 -25
  71. package/dist/pin-input.d.ts +0 -25
  72. package/dist/pnl-diagram.d.cts +0 -11
  73. package/dist/pnl-diagram.d.ts +0 -11
  74. package/dist/popover.d.cts +0 -73
  75. package/dist/popover.d.ts +0 -73
  76. package/dist/progress-circle.d.cts +0 -47
  77. package/dist/progress-circle.d.ts +0 -47
  78. package/dist/progress.d.cts +0 -28
  79. package/dist/progress.d.ts +0 -28
  80. package/dist/provider.d.cts +0 -25
  81. package/dist/provider.d.ts +0 -25
  82. package/dist/radio.d.cts +0 -53
  83. package/dist/radio.d.ts +0 -53
  84. package/dist/rating.d.cts +0 -14
  85. package/dist/rating.d.ts +0 -14
  86. package/dist/select.d.cts +0 -130
  87. package/dist/select.d.ts +0 -130
  88. package/dist/separator.d.cts +0 -13
  89. package/dist/separator.d.ts +0 -13
  90. package/dist/skeleton.d.cts +0 -60
  91. package/dist/skeleton.d.ts +0 -60
  92. package/dist/slider.d.cts +0 -24
  93. package/dist/slider.d.ts +0 -24
  94. package/dist/strategy-builder.d.cts +0 -26
  95. package/dist/strategy-builder.d.ts +0 -26
  96. package/dist/switch.d.cts +0 -27
  97. package/dist/switch.d.ts +0 -27
  98. package/dist/table.d.cts +0 -107
  99. package/dist/table.d.ts +0 -107
  100. package/dist/tabs.d.cts +0 -78
  101. package/dist/tabs.d.ts +0 -78
  102. package/dist/tag.d.cts +0 -21
  103. package/dist/tag.d.ts +0 -21
  104. package/dist/textarea.d.cts +0 -13
  105. package/dist/textarea.d.ts +0 -13
  106. package/dist/toaster.d.cts +0 -29
  107. package/dist/toaster.d.ts +0 -29
  108. package/dist/tooltip.d.cts +0 -38
  109. package/dist/tooltip.d.ts +0 -38
  110. package/dist/use-narrow.d.cts +0 -12
  111. package/dist/use-narrow.d.ts +0 -12
  112. package/dist/utils.d.cts +0 -5
  113. package/dist/utils.d.ts +0 -5
  114. package/dist/vite.d.cts +0 -29
  115. package/dist/vite.d.ts +0 -29
  116. package/dist/white-label.d.cts +0 -59
  117. package/dist/white-label.d.ts +0 -59
package/tokens.css CHANGED
@@ -1,732 +1,438 @@
1
1
  /*
2
- * @luxfi/uiTHE canonical token set.
2
+ * Design tokens CSS custom properties
3
3
  *
4
- * Lux is monochrome. One achromatic ladder, plus exactly two hues reserved for
5
- * state (error, success). Nothing else carries colour: no orange, no amber, no
6
- * gold, no tan. Every value below either IS a ladder rung or is `var()`-derived
7
- * from one — so a hostname can retheme the fleet by overriding a handful of
8
- * custom properties, with no rebuild.
4
+ * These mirror the Chakra semantic tokens defined in
5
+ * toolkit/theme/foundations/semanticTokens.ts and
6
+ * toolkit/theme/foundations/colors.ts (DEFAULT_THEME_COLORS).
9
7
  *
10
- * Layers, in resolution order:
11
- * 1. ladder --lux-n-* achromatic, hue-free (Tailwind `neutral`)
12
- * 2. brand hooks --lux-accent white-label-by-hostname overrides ONLY these
13
- * 3. state --lux-state-* the only permitted hues (error / success)
14
- * 4. semantic --color-* what components actually name
15
- * 5. aliases shadcn (--background … --chart-*) so a Tailwind surface can
16
- * drop its hand-rolled palette and import this instead
8
+ * Light mode is the default (:root). Dark mode activates via .dark class
9
+ * (applied by next-themes with the "class" strategy).
17
10
  *
18
- * Light mode is :root. Dark mode activates via `.dark` (next-themes class
19
- * strategy) or [data-theme='dark'].
11
+ * Palette reference (true neutral grays):
12
+ * gray.50 = #FAFAFA gray.500 = #737373
13
+ * gray.100 = #F5F5F5 gray.600 = #525252
14
+ * gray.200 = #E5E5E5 gray.700 = #404040
15
+ * gray.300 = #D4D4D4 gray.800 = #262626
16
+ * gray.400 = #A3A3A3 gray.900 = #171717
20
17
  *
21
- * Rule: a component may not contain a colour literal. If a value is missing
22
- * here, add it here.
18
+ * blackAlpha.50 = rgba(16,17,18,0.04) whiteAlpha.50 = rgba(255,255,255,0.04)
19
+ * blackAlpha.100 = rgba(16,17,18,0.06) whiteAlpha.100 = rgba(255,255,255,0.06)
20
+ * blackAlpha.200 = rgba(16,17,18,0.08) whiteAlpha.200 = rgba(255,255,255,0.08)
21
+ * blackAlpha.300 = rgba(16,17,18,0.16) whiteAlpha.300 = rgba(255,255,255,0.16)
22
+ * blackAlpha.400 = rgba(16,17,18,0.24) whiteAlpha.400 = rgba(255,255,255,0.24)
23
+ * blackAlpha.500 = rgba(16,17,18,0.36) whiteAlpha.500 = rgba(255,255,255,0.36)
24
+ * blackAlpha.600 = rgba(16,17,18,0.48) whiteAlpha.600 = rgba(255,255,255,0.48)
25
+ * blackAlpha.700 = rgba(16,17,18,0.64) whiteAlpha.700 = rgba(255,255,255,0.64)
26
+ * blackAlpha.800 = rgba(16,17,18,0.80) whiteAlpha.800 = rgba(255,255,255,0.80)
27
+ * blackAlpha.900 = rgba(16,17,18,0.92) whiteAlpha.900 = rgba(255,255,255,0.92)
23
28
  */
24
29
 
25
30
  /* ================================================================
26
- 1 THE LADDER. Achromatic: R = G = B at every rung.
27
- ================================================================ */
28
- :root {
29
- --lux-n-0: #FFFFFF;
30
- --lux-n-50: #FAFAFA;
31
- --lux-n-100: #F5F5F5;
32
- --lux-n-200: #E5E5E5;
33
- --lux-n-300: #D4D4D4;
34
- --lux-n-400: #A3A3A3;
35
- --lux-n-500: #737373;
36
- --lux-n-600: #525252;
37
- --lux-n-700: #404040;
38
- --lux-n-800: #262626;
39
- --lux-n-900: #171717;
40
- --lux-n-950: #0A0A0A;
41
- --lux-n-1000: #000000;
42
-
43
- /* The opacity ladder — the real palette for overlays and hairlines. */
44
- --lux-ink-04: rgba(16, 17, 18, 0.04);
45
- --lux-ink-06: rgba(16, 17, 18, 0.06);
46
- --lux-ink-08: rgba(16, 17, 18, 0.08);
47
- --lux-ink-10: rgba(16, 17, 18, 0.10);
48
- --lux-ink-16: rgba(16, 17, 18, 0.16);
49
- --lux-ink-24: rgba(16, 17, 18, 0.24);
50
- --lux-ink-36: rgba(16, 17, 18, 0.36);
51
- --lux-ink-48: rgba(16, 17, 18, 0.48);
52
- --lux-ink-64: rgba(16, 17, 18, 0.64);
53
- --lux-ink-80: rgba(16, 17, 18, 0.80);
54
- --lux-ink-92: rgba(16, 17, 18, 0.92);
55
- --lux-paper-04: rgba(255, 255, 255, 0.04);
56
- --lux-paper-06: rgba(255, 255, 255, 0.06);
57
- --lux-paper-08: rgba(255, 255, 255, 0.08);
58
- --lux-paper-10: rgba(255, 255, 255, 0.10);
59
- --lux-paper-12: rgba(255, 255, 255, 0.12);
60
- --lux-paper-16: rgba(255, 255, 255, 0.16);
61
- --lux-paper-24: rgba(255, 255, 255, 0.24);
62
- --lux-paper-36: rgba(255, 255, 255, 0.36);
63
- --lux-paper-48: rgba(255, 255, 255, 0.48);
64
- --lux-paper-64: rgba(255, 255, 255, 0.64);
65
- --lux-paper-80: rgba(255, 255, 255, 0.80);
66
- --lux-paper-92: rgba(255, 255, 255, 0.92);
67
-
68
- /* ------------------------------------------------------------
69
- 2 — BRAND HOOKS. resolveWhiteLabel(host) writes these two and
70
- nothing else. Default is monochrome: the accent is the ink.
71
- ------------------------------------------------------------ */
72
- --lux-accent: var(--lux-n-900);
73
- --lux-accent-fg: var(--lux-n-0);
74
-
75
- /* ------------------------------------------------------------
76
- 3 — STATE. The ONLY permitted hues. Both meet WCAG AA (>=4.5:1)
77
- as text on the --lux-n-50 card fill.
78
- ------------------------------------------------------------ */
79
- --lux-state-error: #B91C1C;
80
- --lux-state-success: #1A7A47;
81
- /* Attention/pending is NOT a hue in Lux. It is the loudest neutral. */
82
- --lux-state-notice: var(--lux-n-600);
83
- }
84
-
85
- /* ================================================================
86
- 4 — SEMANTIC (light). Every value is a var() off the ladder.
31
+ LIGHT MODE (default)
87
32
  ================================================================ */
88
33
  :root {
89
34
  /* --- Backgrounds --- */
90
- --color-bg-primary: var(--lux-n-0);
91
- --color-bg-info: var(--lux-n-50);
92
- --color-bg-body: var(--lux-n-0);
35
+ --color-bg-primary: #FFFFFF;
36
+ --color-bg-info: #FAFAFA;
37
+ --color-bg-body: #FFFFFF;
93
38
 
94
39
  /* --- Foregrounds --- */
95
- --color-fg-info: var(--lux-n-600);
40
+ --color-fg-info: #525252;
96
41
 
97
42
  /* --- Text --- */
98
- --color-text-primary: var(--lux-ink-80);
99
- --color-text-secondary: var(--lux-n-500);
100
- --color-text-error: var(--lux-state-error);
101
- --color-text-success: var(--lux-state-success);
102
-
103
- /* --- Status foreground (AA >=4.5:1 on the --lux-n-50 card bg) --- */
104
- --color-status-good: var(--lux-state-success);
105
- --color-status-warn: var(--lux-state-notice);
106
- --color-status-bad: var(--lux-state-error);
43
+ --color-text-primary: rgba(16, 17, 18, 0.80);
44
+ --color-text-secondary: #737373;
45
+ --color-text-error: #E53E3E;
46
+ --color-text-success: #38A169;
107
47
 
108
48
  /* --- Headings --- */
109
- --color-heading: var(--lux-ink-80);
49
+ --color-heading: rgba(16, 17, 18, 0.80);
110
50
 
111
51
  /* --- Icons --- */
112
- --color-icon-primary: var(--lux-n-500);
113
- --color-icon-secondary: var(--lux-n-400);
52
+ --color-icon-primary: #737373;
53
+ --color-icon-secondary: #A3A3A3;
114
54
 
115
55
  /* --- Borders --- */
116
- --color-border-divider: var(--lux-ink-06);
117
- --color-border-error: var(--lux-state-error);
118
- --color-border-info: var(--lux-n-400);
56
+ --color-border-divider: rgba(16, 17, 18, 0.06);
57
+ --color-border-error: #E53E3E;
58
+ --color-border-info: #A3A3A3;
119
59
 
120
60
  /* --- Links --- */
121
- --color-link-primary: var(--lux-n-700);
122
- --color-link-primary-hover: var(--lux-n-600);
123
- --color-link-secondary: var(--lux-n-500);
124
- --color-link-subtle: var(--lux-ink-80);
125
- --color-link-subtle-hover: var(--lux-ink-80);
126
- --color-link-menu: var(--lux-ink-80);
127
- --color-link-underlaid-bg: var(--lux-n-100);
128
- --color-link-nav-fg: var(--lux-ink-80);
129
- --color-link-nav-fg-hover: var(--lux-n-600);
130
- --color-link-nav-fg-selected: var(--lux-n-900);
131
- --color-link-nav-fg-active: var(--lux-n-600);
132
- --color-link-nav-bg-selected: var(--lux-n-100);
61
+ --color-link-primary: #404040;
62
+ --color-link-primary-hover: #525252;
63
+ --color-link-secondary: #737373;
64
+ --color-link-subtle: rgba(16, 17, 18, 0.80);
65
+ --color-link-subtle-hover: rgba(16, 17, 18, 0.80);
66
+ --color-link-menu: rgba(16, 17, 18, 0.80);
67
+ --color-link-underlaid-bg: #F5F5F5;
68
+ --color-link-nav-fg: rgba(16, 17, 18, 0.80);
69
+ --color-link-nav-fg-hover: #525252;
70
+ --color-link-nav-fg-selected: #171717;
71
+ --color-link-nav-fg-active: #525252;
72
+ --color-link-nav-bg-selected: #F5F5F5;
133
73
 
134
74
  /* --- Buttons --- */
135
- --color-button-solid-bg: var(--lux-accent);
136
- --color-button-solid-text: var(--lux-accent-fg);
137
- --color-button-outline-fg: var(--lux-n-900);
138
- --color-button-subtle-fg: var(--lux-ink-80);
139
- --color-button-subtle-bg: var(--lux-ink-08);
140
- --color-button-dropdown-fg: var(--lux-ink-80);
141
- --color-button-dropdown-border: var(--lux-n-100);
142
- --color-button-header-fg: var(--lux-ink-80);
143
- --color-button-header-fg-selected: var(--lux-ink-80);
144
- --color-button-header-fg-highlighted: var(--lux-ink-80);
145
- --color-button-header-border: var(--lux-n-100);
146
- --color-button-header-bg-selected: var(--lux-ink-04);
147
- --color-button-header-bg-highlighted: var(--lux-n-200);
148
- --color-button-pagination-fg: var(--lux-ink-80);
149
- --color-button-pagination-border: var(--lux-n-100);
150
- --color-button-icon-background-bg: var(--lux-n-50);
151
- --color-button-hero-bg: var(--lux-accent);
152
- --color-button-hero-fg: var(--lux-accent-fg);
153
- --color-button-hero-bg-hover: var(--lux-n-600);
154
- --color-button-hero-fg-hover: var(--lux-n-0);
155
- --color-button-hero-bg-selected: var(--lux-paper-06);
156
- --color-button-hero-fg-selected: var(--lux-ink-80);
157
- --color-button-segmented-fg: var(--lux-ink-80);
158
- --color-button-icon-bg: var(--lux-ink-04);
75
+ --color-button-solid-bg: #171717;
76
+ --color-button-solid-text: #FFFFFF;
77
+ --color-button-outline-fg: #171717;
78
+ --color-button-subtle-fg: rgba(16, 17, 18, 0.80);
79
+ --color-button-subtle-bg: rgba(16, 17, 18, 0.08);
80
+ --color-button-dropdown-fg: rgba(16, 17, 18, 0.80);
81
+ --color-button-dropdown-border: #F5F5F5;
82
+ --color-button-header-fg: rgba(16, 17, 18, 0.80);
83
+ --color-button-header-fg-selected: rgba(16, 17, 18, 0.80);
84
+ --color-button-header-fg-highlighted: rgba(16, 17, 18, 0.80);
85
+ --color-button-header-border: #F5F5F5;
86
+ --color-button-header-bg-selected: rgba(16, 17, 18, 0.04);
87
+ --color-button-header-bg-highlighted: #FEEBCB;
88
+ --color-button-pagination-fg: rgba(16, 17, 18, 0.80);
89
+ --color-button-pagination-border: #F5F5F5;
90
+ --color-button-icon-background-bg: #FAFAFA;
91
+ --color-button-hero-bg: #171717;
92
+ --color-button-hero-fg: #FFFFFF;
93
+ --color-button-hero-bg-hover: #525252;
94
+ --color-button-hero-fg-hover: #FFFFFF;
95
+ --color-button-hero-bg-selected: rgba(255, 255, 255, 0.06);
96
+ --color-button-hero-fg-selected: rgba(16, 17, 18, 0.80);
97
+ --color-button-segmented-fg: rgba(16, 17, 18, 0.80);
98
+ --color-button-icon-bg: rgba(16, 17, 18, 0.04);
159
99
 
160
100
  /* --- Hover / Selected --- */
161
- --color-hover: var(--lux-n-600);
162
- --color-selected-control-bg: var(--lux-n-100);
163
- --color-selected-control-text: var(--lux-n-900);
164
- --color-selected-option-bg: var(--lux-n-700);
101
+ --color-hover: #525252;
102
+ --color-selected-control-bg: #F5F5F5;
103
+ --color-selected-control-text: #171717;
104
+ --color-selected-option-bg: #404040;
165
105
 
166
106
  /* --- Navigation --- */
167
- --color-nav-bg-selected: var(--lux-n-100);
168
- --color-nav-text-selected: var(--lux-n-900);
107
+ --color-nav-bg-selected: #F5F5F5;
108
+ --color-nav-text-selected: #171717;
169
109
 
170
110
  /* --- Inputs --- */
171
- --color-input-fg: var(--lux-n-800);
172
- --color-input-bg: var(--lux-n-0);
173
- --color-input-bg-readonly: var(--lux-n-200);
174
- --color-input-border: var(--lux-n-100);
175
- --color-input-border-hover: var(--lux-n-200);
176
- --color-input-border-focus: var(--lux-n-600);
177
- /* n-400 on white is 2.5:1 — under the 3:1 non-text minimum. n-500 clears it. */
178
- --color-input-placeholder: var(--lux-n-500);
111
+ --color-input-fg: #262626;
112
+ --color-input-bg: #FFFFFF;
113
+ --color-input-bg-readonly: #E5E5E5;
114
+ --color-input-border: #F5F5F5;
115
+ --color-input-border-hover: #E5E5E5;
116
+ --color-input-border-focus: #525252;
117
+ --color-input-placeholder: #A3A3A3;
179
118
 
180
119
  /* --- Tags --- */
181
- --color-tag-subtle-bg: var(--lux-ink-04);
182
- --color-tag-subtle-fg: var(--lux-ink-80);
183
- --color-tag-clickable-bg: var(--lux-n-100);
184
- --color-tag-clickable-fg: var(--lux-ink-80);
185
- --color-tag-filter-bg: var(--lux-n-100);
186
- --color-tag-select-bg: var(--lux-n-100);
187
- --color-tag-select-fg: var(--lux-n-500);
188
- --color-tag-select-selected-bg: var(--lux-n-700);
189
- --color-tag-select-selected-fg: var(--lux-paper-80);
190
-
191
- /* --- Badges ---
192
- The colour NAMES are a legacy API (call sites say colorScheme="orange").
193
- They are one monochrome ramp now; only green/red keep a hue, because they
194
- carry state rather than decoration. */
195
- --color-badge-gray-bg: var(--lux-ink-04);
196
- --color-badge-gray-fg: var(--lux-ink-80);
120
+ --color-tag-subtle-bg: rgba(16, 17, 18, 0.04);
121
+ --color-tag-subtle-fg: rgba(16, 17, 18, 0.80);
122
+ --color-tag-clickable-bg: #F5F5F5;
123
+ --color-tag-clickable-fg: rgba(16, 17, 18, 0.80);
124
+ --color-tag-filter-bg: #F5F5F5;
125
+ --color-tag-select-bg: #F5F5F5;
126
+ --color-tag-select-fg: #737373;
127
+ --color-tag-select-selected-bg: #404040;
128
+ --color-tag-select-selected-fg: rgba(255, 255, 255, 0.80);
129
+
130
+ /* --- Badges --- */
131
+ --color-badge-gray-bg: rgba(16, 17, 18, 0.04);
132
+ --color-badge-gray-fg: rgba(16, 17, 18, 0.80);
197
133
  --color-badge-green-bg: #F0FFF4;
198
- --color-badge-green-fg: var(--lux-state-success);
134
+ --color-badge-green-fg: #38A169;
199
135
  --color-badge-red-bg: #FFF5F5;
200
- --color-badge-red-fg: var(--lux-state-error);
201
- --color-badge-purple-bg: var(--lux-n-100);
202
- --color-badge-purple-fg: var(--lux-n-600);
203
- --color-badge-orange-bg: var(--lux-n-100);
204
- --color-badge-orange-fg: var(--lux-n-600);
205
- --color-badge-blue-bg: var(--lux-n-100);
206
- --color-badge-blue-fg: var(--lux-n-600);
207
- --color-badge-yellow-bg: var(--lux-n-100);
208
- --color-badge-yellow-fg: var(--lux-n-600);
209
- --color-badge-teal-bg: var(--lux-n-100);
210
- --color-badge-teal-fg: var(--lux-n-600);
211
- --color-badge-cyan-bg: var(--lux-n-100);
212
- --color-badge-cyan-fg: var(--lux-n-600);
213
- --color-badge-pink-bg: var(--lux-n-100);
214
- --color-badge-pink-fg: var(--lux-n-600);
215
- --color-badge-purple-alt-bg: var(--lux-n-100);
216
- --color-badge-purple-alt-fg: var(--lux-ink-80);
217
- --color-badge-blue-alt-bg: var(--lux-n-100);
218
- --color-badge-blue-alt-fg: var(--lux-ink-80);
219
- --color-badge-bright-gray-bg: var(--lux-n-100);
220
- --color-badge-bright-gray-fg: var(--lux-n-600);
136
+ --color-badge-red-fg: #E53E3E;
137
+ --color-badge-purple-bg: #F5F5F5;
138
+ --color-badge-purple-fg: #525252;
139
+ --color-badge-orange-bg: #FFFAF0;
140
+ --color-badge-orange-fg: #DD6B20;
141
+ --color-badge-blue-bg: #F5F5F5;
142
+ --color-badge-blue-fg: #525252;
143
+ --color-badge-yellow-bg: #FFFFF0;
144
+ --color-badge-yellow-fg: #D69E2E;
145
+ --color-badge-teal-bg: #F5F5F5;
146
+ --color-badge-teal-fg: #525252;
147
+ --color-badge-cyan-bg: #F5F5F5;
148
+ --color-badge-cyan-fg: #525252;
149
+ --color-badge-pink-bg: #FFF5F7;
150
+ --color-badge-pink-fg: #D53F8C;
151
+ --color-badge-purple-alt-bg: #F5F5F5;
152
+ --color-badge-purple-alt-fg: rgba(16, 17, 18, 0.80);
153
+ --color-badge-blue-alt-bg: #F5F5F5;
154
+ --color-badge-blue-alt-fg: rgba(16, 17, 18, 0.80);
155
+ --color-badge-bright-gray-bg: #F5F5F5;
156
+ --color-badge-bright-gray-fg: #525252;
221
157
  --color-badge-bright-green-bg: #C6F6D5;
222
158
  --color-badge-bright-green-fg: #25855A;
223
159
  --color-badge-bright-red-bg: #FED7D7;
224
160
  --color-badge-bright-red-fg: #C53030;
225
- --color-badge-bright-blue-bg: var(--lux-n-200);
226
- --color-badge-bright-blue-fg: var(--lux-n-700);
227
- --color-badge-bright-yellow-bg: var(--lux-n-200);
228
- --color-badge-bright-yellow-fg: var(--lux-n-700);
229
- --color-badge-bright-teal-bg: var(--lux-n-200);
230
- --color-badge-bright-teal-fg: var(--lux-n-700);
231
- --color-badge-bright-cyan-bg: var(--lux-n-200);
232
- --color-badge-bright-cyan-fg: var(--lux-n-700);
233
- --color-badge-bright-orange-bg: var(--lux-n-200);
234
- --color-badge-bright-orange-fg: var(--lux-n-700);
235
- --color-badge-bright-purple-bg: var(--lux-n-200);
236
- --color-badge-bright-purple-fg: var(--lux-n-700);
237
- --color-badge-bright-pink-bg: var(--lux-n-200);
238
- --color-badge-bright-pink-fg: var(--lux-n-700);
161
+ --color-badge-bright-blue-bg: #E5E5E5;
162
+ --color-badge-bright-blue-fg: #404040;
163
+ --color-badge-bright-yellow-bg: #FEFCBF;
164
+ --color-badge-bright-yellow-fg: #B7791F;
165
+ --color-badge-bright-teal-bg: #E5E5E5;
166
+ --color-badge-bright-teal-fg: #404040;
167
+ --color-badge-bright-cyan-bg: #E5E5E5;
168
+ --color-badge-bright-cyan-fg: #404040;
169
+ --color-badge-bright-orange-bg: #FEEBCB;
170
+ --color-badge-bright-orange-fg: #C05621;
171
+ --color-badge-bright-purple-bg: #E5E5E5;
172
+ --color-badge-bright-purple-fg: #404040;
173
+ --color-badge-bright-pink-bg: #FFF5F7;
174
+ --color-badge-bright-pink-fg: #B83280;
239
175
 
240
176
  /* --- Alerts --- */
241
- --color-alert-fg: var(--lux-ink-80);
242
- --color-alert-bg-info: var(--lux-ink-04);
243
- --color-alert-bg-warning: var(--lux-n-200);
244
- --color-alert-bg-warning-table: var(--lux-n-50);
177
+ --color-alert-fg: rgba(16, 17, 18, 0.80);
178
+ --color-alert-bg-info: rgba(16, 17, 18, 0.04);
179
+ --color-alert-bg-warning: #FEEBCB;
180
+ --color-alert-bg-warning-table: #FFFAF0;
245
181
  --color-alert-bg-success: #C6F6D5;
246
182
  --color-alert-bg-error: #FED7D7;
247
183
 
248
184
  /* --- Dialogs / Popovers / Drawers --- */
249
- --color-dialog-bg: var(--lux-n-0);
250
- --color-dialog-fg: var(--lux-ink-80);
251
- --color-popover-bg: var(--lux-n-0);
252
- --color-popover-border: var(--lux-ink-10);
253
- --color-popover-shadow: var(--lux-ink-08);
254
- --color-drawer-bg: var(--lux-n-0);
185
+ --color-dialog-bg: #FFFFFF;
186
+ --color-dialog-fg: rgba(16, 17, 18, 0.80);
187
+ --color-popover-bg: #FFFFFF;
188
+ --color-popover-shadow: rgba(16, 17, 18, 0.08);
189
+ --color-drawer-bg: #FFFFFF;
255
190
 
256
191
  /* --- Tooltip --- */
257
- --color-tooltip-bg: var(--lux-n-900);
258
- --color-tooltip-fg: var(--lux-n-0);
192
+ --color-tooltip-bg: #171717;
193
+ --color-tooltip-fg: #FFFFFF;
259
194
 
260
195
  /* --- Table --- */
261
- --color-table-header-bg: var(--lux-ink-06);
262
- --color-table-header-fg: var(--lux-ink-64);
196
+ --color-table-header-bg: rgba(16, 17, 18, 0.06);
197
+ --color-table-header-fg: rgba(16, 17, 18, 0.64);
263
198
 
264
199
  /* --- Tabs --- */
265
- --color-tabs-solid-fg: var(--lux-n-900);
266
- --color-tabs-solid-bg: var(--lux-n-0);
267
- --color-tabs-solid-fg-selected: var(--lux-n-0);
268
- --color-tabs-solid-bg-selected: var(--lux-n-900);
269
- --color-tabs-secondary-fg: var(--lux-n-500);
270
- --color-tabs-secondary-fg-selected: var(--lux-n-900);
271
- --color-tabs-radio-fg: var(--lux-n-500);
272
- --color-tabs-radio-bg-selected: var(--lux-n-0);
273
- --color-tabs-radio-fg-selected: var(--lux-n-900);
274
-
275
- --color-tabs-secondary-border: var(--lux-n-300);
276
-
277
- /* --- Controls --- */
278
- --color-switch-bg: var(--lux-n-300);
279
- --color-progress-track: var(--lux-n-100);
280
-
281
- /* --- Chrome / charts --- */
282
- --color-stats-bg: var(--lux-n-50);
283
- --color-topbar-bg: var(--lux-n-50);
284
- --color-graph-line: var(--lux-n-500);
285
- --color-graph-gradient-start: rgba(163, 163, 163, 0.3);
286
- --color-graph-gradient-stop: rgba(163, 163, 163, 0);
200
+ --color-tabs-solid-fg: #171717;
201
+ --color-tabs-secondary-fg: rgba(16, 17, 18, 0.80);
202
+ --color-tabs-secondary-border: #D4D4D4;
203
+
204
+ /* --- Switch --- */
205
+ --color-switch-bg: #D4D4D4;
287
206
 
288
207
  /* --- Skeleton --- */
289
- --color-skeleton-start: var(--lux-n-100);
290
- --color-skeleton-end: var(--lux-n-200);
208
+ --color-skeleton-start: rgba(16, 17, 18, 0.04);
209
+ --color-skeleton-end: rgba(16, 17, 18, 0.06);
210
+
211
+ /* --- Progress --- */
212
+ --color-progress-track: #F5F5F5;
213
+
214
+ /* --- Stats / Topbar --- */
215
+ --color-stats-bg: #FAFAFA;
216
+ --color-topbar-bg: #FAFAFA;
217
+
218
+ /* --- Graph --- */
219
+ --color-graph-line: #737373;
220
+ --color-graph-gradient-start: rgba(163, 163, 163, 0.3);
221
+ --color-graph-gradient-stop: rgba(163, 163, 163, 0);
291
222
 
292
223
  /* --- Scrollbar --- */
293
- --color-scrollbar-thumb: var(--lux-ink-16);
224
+ --color-scrollbar-thumb: rgba(16, 17, 18, 0.16);
294
225
 
295
226
  /* --- Selection --- */
296
- --color-selection-bg: var(--lux-n-200);
297
-
298
- /* --- Raw palette (an alias surface; the ladder is the source) --- */
299
- --color-gray-50: var(--lux-n-50);
300
- --color-gray-100: var(--lux-n-100);
301
- --color-gray-200: var(--lux-n-200);
302
- --color-gray-300: var(--lux-n-300);
303
- --color-gray-400: var(--lux-n-400);
304
- --color-gray-500: var(--lux-n-500);
305
- --color-gray-600: var(--lux-n-600);
306
- --color-gray-700: var(--lux-n-700);
307
- --color-gray-800: var(--lux-n-800);
308
- --color-gray-900: var(--lux-n-900);
309
- --color-white: var(--lux-n-0);
310
- --color-black: var(--lux-n-1000);
311
- /* The two state ramps — the only rungs in this file that carry a hue.
312
- Monotone, like the warm ramps, and likewise not flipped in `.dark`. */
313
- --color-green-50: #F0FFF4;
314
- --color-green-100: #C6F6D5;
315
- --color-green-200: #9AE6B4;
316
- --color-green-500: var(--lux-state-success);
317
- --color-green-800: #22543D;
318
- --color-red-50: #FFF5F5;
319
- --color-red-100: #FED7D7;
320
- --color-red-200: #FEB2B2;
321
- --color-red-500: var(--lux-state-error);
322
- --color-red-600: #C53030;
323
- --color-red-800: #822727;
324
- /* ------------------------------------------------------------
325
- THE WARM RAMPS, DEFANGED.
326
- Tailwind v4 compiles `bg-orange-100` to `background-color:
327
- var(--color-orange-100)`, so redefining the rung here retints every
328
- warm utility on every surface that imports this file — no component
329
- edit, no rebuild. The ramps stay MONOTONE (low rung = light, high rung
330
- = dark) in both modes, exactly like Tailwind's, so an author's
331
- `bg-orange-50 dark:bg-yellow-900` still reads pale-on-light and
332
- dark-on-dark. They are therefore NOT overridden in `.dark` below.
333
- A rung is a rung; a warning is `--color-status-warn`.
334
- ------------------------------------------------------------ */
335
- --color-orange-50: var(--lux-n-50);
336
- --color-orange-100: var(--lux-n-100);
337
- --color-orange-200: var(--lux-n-200);
338
- --color-orange-300: var(--lux-n-300);
339
- --color-orange-400: var(--lux-n-400);
340
- --color-orange-500: var(--lux-n-500);
341
- --color-orange-600: var(--lux-n-600);
342
- --color-orange-700: var(--lux-n-700);
343
- --color-orange-800: var(--lux-n-800);
344
- --color-orange-900: var(--lux-n-900);
345
- --color-orange-950: var(--lux-n-950);
346
- --color-amber-50: var(--color-orange-50);
347
- --color-amber-100: var(--color-orange-100);
348
- --color-amber-200: var(--color-orange-200);
349
- --color-amber-300: var(--color-orange-300);
350
- --color-amber-400: var(--color-orange-400);
351
- --color-amber-500: var(--color-orange-500);
352
- --color-amber-600: var(--color-orange-600);
353
- --color-amber-700: var(--color-orange-700);
354
- --color-amber-800: var(--color-orange-800);
355
- --color-amber-900: var(--color-orange-900);
356
- --color-amber-950: var(--color-orange-950);
357
- --color-yellow-50: var(--color-orange-50);
358
- --color-yellow-100: var(--color-orange-100);
359
- --color-yellow-200: var(--color-orange-200);
360
- --color-yellow-300: var(--color-orange-300);
361
- --color-yellow-400: var(--color-orange-400);
362
- --color-yellow-500: var(--color-orange-500);
363
- --color-yellow-600: var(--color-orange-600);
364
- --color-yellow-700: var(--color-orange-700);
365
- --color-yellow-800: var(--color-orange-800);
366
- --color-yellow-900: var(--color-orange-900);
367
- --color-yellow-950: var(--color-orange-950);
368
- /* Tailwind's warm neutral. Lux has exactly one neutral, and it is not warm. */
369
- --color-stone-50: var(--lux-n-50);
370
- --color-stone-100: var(--lux-n-100);
371
- --color-stone-200: var(--lux-n-200);
372
- --color-stone-300: var(--lux-n-300);
373
- --color-stone-400: var(--lux-n-400);
374
- --color-stone-500: var(--lux-n-500);
375
- --color-stone-600: var(--lux-n-600);
376
- --color-stone-700: var(--lux-n-700);
377
- --color-stone-800: var(--lux-n-800);
378
- --color-stone-900: var(--lux-n-900);
379
- --color-stone-950: var(--lux-n-950);
380
- --color-blackAlpha-50: var(--lux-ink-04);
381
- --color-blackAlpha-100: var(--lux-ink-06);
382
- --color-blackAlpha-200: var(--lux-ink-08);
383
- --color-blackAlpha-300: var(--lux-ink-16);
384
- --color-blackAlpha-400: var(--lux-ink-24);
385
- --color-blackAlpha-500: var(--lux-ink-36);
386
- --color-blackAlpha-600: var(--lux-ink-48);
387
- --color-blackAlpha-700: var(--lux-ink-64);
388
- --color-blackAlpha-800: var(--lux-ink-80);
389
- --color-blackAlpha-900: var(--lux-ink-92);
390
- --color-whiteAlpha-50: var(--lux-paper-04);
391
- --color-whiteAlpha-100: var(--lux-paper-06);
392
- --color-whiteAlpha-200: var(--lux-paper-08);
393
- --color-whiteAlpha-300: var(--lux-paper-16);
394
- --color-whiteAlpha-400: var(--lux-paper-24);
395
- --color-whiteAlpha-500: var(--lux-paper-36);
396
- --color-whiteAlpha-600: var(--lux-paper-48);
397
- --color-whiteAlpha-700: var(--lux-paper-64);
398
- --color-whiteAlpha-800: var(--lux-paper-80);
399
- --color-whiteAlpha-900: var(--lux-paper-92);
400
-
401
- /* --- Chakra legacy aliases (used by migrated components) --- */
402
- --chakra-colors-bg-primary: var(--color-bg-primary);
403
- --chakra-colors-text-primary: var(--color-text-primary);
404
- --chakra-colors-text-secondary: var(--color-text-secondary);
405
- --chakra-colors-icon-secondary: var(--color-icon-secondary);
406
- --chakra-colors-border-divider: var(--color-border-divider);
407
- --chakra-colors-link-primary: var(--color-link-primary);
408
- --chakra-colors-link-primary-hover: var(--color-link-primary-hover);
409
- --chakra-colors-hover: var(--color-hover);
410
- --chakra-colors-gray-100: var(--color-gray-100);
411
- --chakra-colors-whiteAlpha-50: var(--color-whiteAlpha-50);
412
- --chakra-colors-whiteAlpha-100: var(--color-whiteAlpha-100);
227
+ --color-selection-bg: #E3CFE7;
413
228
 
414
229
  /* --- Shadows --- */
415
230
  --shadow-action-bar: 0 4px 4px -4px rgb(0 0 0 / 10%), 0 2px 4px -4px rgb(0 0 0 / 6%);
416
231
  --shadow-popover: 0px 15px 50px -12px rgba(0, 0, 0, 0.25);
417
232
  --shadow-drawer: 0px 4px 6px -2px rgba(0, 0, 0, 0.05), 0px 10px 15px -3px rgba(0, 0, 0, 0.1);
418
-
419
- /* ------------------------------------------------------------
420
- 5 — SHADCN / TAILWIND ALIASES (light).
421
- A surface imports this file and deletes its own palette block.
422
- ------------------------------------------------------------ */
423
- --background: var(--lux-n-0);
424
- --foreground: var(--lux-n-900);
425
- --card: var(--lux-n-0);
426
- --card-foreground: var(--lux-n-900);
427
- --popover: var(--lux-n-0);
428
- --popover-foreground: var(--lux-n-900);
429
- --primary: var(--lux-accent);
430
- --primary-foreground: var(--lux-accent-fg);
431
- --secondary: var(--lux-n-100);
432
- --secondary-foreground: var(--lux-n-900);
433
- --muted: var(--lux-n-100);
434
- --muted-foreground: var(--lux-n-500);
435
- --accent: var(--lux-n-100);
436
- --accent-foreground: var(--lux-n-900);
437
- --destructive: var(--lux-state-error);
438
- --destructive-foreground: var(--lux-n-0);
439
- /* success / warning / info as shadcn-style pairs. `warning` is achromatic —
440
- it used to be hsl(38 96% 57%), which is where lux.market got its tan. */
441
- --success: var(--lux-state-success);
442
- --success-foreground: var(--lux-n-0);
443
- --warning: var(--lux-state-notice);
444
- --warning-foreground: var(--lux-n-0);
445
- --info: var(--lux-n-700);
446
- --info-foreground: var(--lux-n-0);
447
- --border: var(--lux-n-200);
448
- --input: var(--lux-n-200);
449
- --ring: var(--lux-n-400);
450
- /* Charts: five achromatic steps, ordered by contrast, not by hue. */
451
- --chart-1: var(--lux-n-900);
452
- --chart-2: var(--lux-n-600);
453
- --chart-3: var(--lux-n-400);
454
- --chart-4: var(--lux-n-700);
455
- --chart-5: var(--lux-n-300);
456
- --sidebar: var(--lux-n-50);
457
- --sidebar-foreground: var(--lux-n-900);
458
- --sidebar-primary: var(--lux-accent);
459
- --sidebar-primary-foreground: var(--lux-accent-fg);
460
- --sidebar-accent: var(--lux-n-100);
461
- --sidebar-accent-foreground: var(--lux-n-900);
462
- --sidebar-border: var(--lux-n-200);
463
- --sidebar-ring: var(--lux-n-400);
464
233
  }
465
234
 
466
235
  /* ================================================================
467
236
  DARK MODE
468
237
  ================================================================ */
469
- .dark,
470
- [data-theme='dark'] {
471
- /* Brand hooks invert: on ink, the accent is the paper. */
472
- --lux-accent: var(--lux-n-0);
473
- --lux-accent-fg: var(--lux-n-900);
474
-
475
- /* State, lightened for a dark ground (AA >=4.5:1 on --lux-n-900). */
476
- --lux-state-error: #FCA5A5;
477
- --lux-state-success: #6EE7A8;
478
- --lux-state-notice: var(--lux-n-300);
479
-
238
+ .dark {
480
239
  /* --- Backgrounds --- */
481
- --color-bg-primary: var(--lux-n-900);
482
- --color-bg-info: var(--lux-n-800);
483
- --color-bg-body: var(--lux-n-1000);
240
+ --color-bg-primary: #000000;
241
+ --color-bg-info: #171717;
242
+ --color-bg-body: #000000;
484
243
 
485
244
  /* --- Foregrounds --- */
486
- --color-fg-info: var(--lux-n-300);
245
+ --color-fg-info: #D4D4D4;
487
246
 
488
247
  /* --- Text --- */
489
- --color-text-primary: var(--lux-paper-80);
490
- --color-text-secondary: var(--lux-n-400);
491
- --color-text-error: var(--lux-state-error);
492
- --color-text-success: var(--lux-state-success);
493
-
494
- /* --- Status foreground --- */
495
- --color-status-good: var(--lux-state-success);
496
- --color-status-warn: var(--lux-state-notice);
497
- --color-status-bad: var(--lux-state-error);
248
+ --color-text-primary: rgba(255, 255, 255, 0.80);
249
+ --color-text-secondary: #A3A3A3;
250
+ --color-text-error: #E53E3E;
251
+ --color-text-success: #9AE6B4;
498
252
 
499
253
  /* --- Headings --- */
500
- --color-heading: var(--lux-paper-80);
254
+ --color-heading: rgba(255, 255, 255, 0.80);
501
255
 
502
256
  /* --- Icons --- */
503
- --color-icon-primary: var(--lux-n-400);
504
- --color-icon-secondary: var(--lux-n-500);
257
+ --color-icon-primary: #A3A3A3;
258
+ --color-icon-secondary: #737373;
505
259
 
506
260
  /* --- Borders --- */
507
- --color-border-divider: var(--lux-paper-06);
508
- --color-border-error: var(--lux-state-error);
509
- --color-border-info: var(--lux-n-500);
261
+ --color-border-divider: rgba(255, 255, 255, 0.06);
262
+ --color-border-error: #E53E3E;
263
+ --color-border-info: #737373;
510
264
 
511
265
  /* --- Links --- */
512
- --color-link-primary: var(--lux-n-300);
513
- --color-link-primary-hover: var(--lux-n-200);
514
- --color-link-secondary: var(--lux-n-400);
515
- --color-link-subtle: var(--lux-paper-80);
516
- --color-link-subtle-hover: var(--lux-paper-80);
517
- --color-link-menu: var(--lux-paper-80);
518
- --color-link-underlaid-bg: var(--lux-n-800);
519
- --color-link-nav-fg: var(--lux-paper-80);
520
- --color-link-nav-fg-hover: var(--lux-n-200);
521
- --color-link-nav-fg-selected: var(--lux-n-0);
522
- --color-link-nav-fg-active: var(--lux-n-200);
523
- --color-link-nav-bg-selected: var(--lux-n-800);
266
+ --color-link-primary: rgba(255, 255, 255, 0.64);
267
+ --color-link-primary-hover: rgba(255, 255, 255, 0.64);
268
+ --color-link-secondary: #A3A3A3;
269
+ --color-link-subtle: #A3A3A3;
270
+ --color-link-subtle-hover: #A3A3A3;
271
+ --color-link-menu: rgba(255, 255, 255, 0.80);
272
+ --color-link-underlaid-bg: #262626;
273
+ --color-link-nav-fg: rgba(255, 255, 255, 0.80);
274
+ --color-link-nav-fg-hover: rgba(255, 255, 255, 0.64);
275
+ --color-link-nav-fg-selected: #FAFAFA;
276
+ --color-link-nav-fg-active: rgba(255, 255, 255, 0.64);
277
+ --color-link-nav-bg-selected: rgba(255, 255, 255, 0.06);
524
278
 
525
279
  /* --- Buttons --- */
526
- --color-button-solid-bg: var(--lux-accent);
527
- --color-button-solid-text: var(--lux-accent-fg);
528
- --color-button-outline-fg: var(--lux-n-0);
529
- --color-button-subtle-fg: var(--lux-paper-80);
530
- --color-button-subtle-bg: var(--lux-paper-08);
531
- --color-button-dropdown-fg: var(--lux-paper-80);
532
- --color-button-dropdown-border: var(--lux-n-800);
533
- --color-button-header-fg: var(--lux-paper-80);
534
- --color-button-header-fg-selected: var(--lux-paper-80);
535
- --color-button-header-fg-highlighted: var(--lux-paper-80);
536
- --color-button-header-border: var(--lux-n-800);
537
- --color-button-header-bg-selected: var(--lux-paper-04);
538
- --color-button-header-bg-highlighted: var(--lux-n-700);
539
- --color-button-pagination-fg: var(--lux-paper-80);
540
- --color-button-pagination-border: var(--lux-n-800);
541
- --color-button-icon-background-bg: var(--lux-n-800);
542
- --color-button-hero-bg: var(--lux-accent);
543
- --color-button-hero-fg: var(--lux-accent-fg);
544
- --color-button-hero-bg-hover: var(--lux-n-200);
545
- --color-button-hero-fg-hover: var(--lux-n-900);
546
- --color-button-hero-bg-selected: var(--lux-paper-06);
547
- --color-button-hero-fg-selected: var(--lux-paper-80);
548
- --color-button-segmented-fg: var(--lux-paper-80);
549
- --color-button-icon-bg: var(--lux-paper-04);
280
+ --color-button-solid-bg: rgba(255, 255, 255, 0.92);
281
+ --color-button-solid-text: #000000;
282
+ --color-button-outline-fg: rgba(255, 255, 255, 0.92);
283
+ --color-button-subtle-fg: rgba(255, 255, 255, 0.80);
284
+ --color-button-subtle-bg: rgba(255, 255, 255, 0.08);
285
+ --color-button-dropdown-fg: rgba(255, 255, 255, 0.80);
286
+ --color-button-dropdown-border: #525252;
287
+ --color-button-header-fg: #A3A3A3;
288
+ --color-button-header-fg-selected: rgba(255, 255, 255, 0.80);
289
+ --color-button-header-fg-highlighted: rgba(255, 255, 255, 0.80);
290
+ --color-button-header-border: #525252;
291
+ --color-button-header-bg-selected: rgba(255, 255, 255, 0.06);
292
+ --color-button-header-bg-highlighted: #7B341E;
293
+ --color-button-pagination-fg: #FAFAFA;
294
+ --color-button-pagination-border: rgba(255, 255, 255, 0.06);
295
+ --color-button-icon-background-bg: rgba(255, 255, 255, 0.04);
296
+ --color-button-hero-bg: rgba(255, 255, 255, 0.92);
297
+ --color-button-hero-fg: #FFFFFF;
298
+ --color-button-hero-bg-hover: rgba(255, 255, 255, 0.64);
299
+ --color-button-hero-fg-hover: #FFFFFF;
300
+ --color-button-hero-bg-selected: rgba(255, 255, 255, 0.06);
301
+ --color-button-hero-fg-selected: rgba(16, 17, 18, 0.80);
302
+ --color-button-segmented-fg: rgba(255, 255, 255, 0.80);
303
+ --color-button-icon-bg: rgba(255, 255, 255, 0.04);
550
304
 
551
305
  /* --- Hover / Selected --- */
552
- --color-hover: var(--lux-n-200);
553
- --color-selected-control-bg: var(--lux-n-800);
554
- --color-selected-control-text: var(--lux-n-0);
555
- --color-selected-option-bg: var(--lux-n-700);
306
+ --color-hover: rgba(255, 255, 255, 0.64);
307
+ --color-selected-control-bg: rgba(255, 255, 255, 0.06);
308
+ --color-selected-control-text: #FAFAFA;
309
+ --color-selected-option-bg: rgba(255, 255, 255, 0.16);
556
310
 
557
311
  /* --- Navigation --- */
558
- --color-nav-bg-selected: var(--lux-n-800);
559
- --color-nav-text-selected: var(--lux-n-0);
312
+ --color-nav-bg-selected: rgba(255, 255, 255, 0.06);
313
+ --color-nav-text-selected: #FAFAFA;
560
314
 
561
315
  /* --- Inputs --- */
562
- --color-input-fg: var(--lux-n-200);
563
- --color-input-bg: var(--lux-n-900);
564
- --color-input-bg-readonly: var(--lux-n-800);
565
- --color-input-border: var(--lux-n-800);
566
- --color-input-border-hover: var(--lux-n-700);
567
- --color-input-border-focus: var(--lux-n-400);
568
- --color-input-placeholder: var(--lux-n-500);
316
+ --color-input-fg: #FAFAFA;
317
+ --color-input-bg: #000000;
318
+ --color-input-bg-readonly: #262626;
319
+ --color-input-border: #525252;
320
+ --color-input-border-hover: #737373;
321
+ --color-input-border-focus: rgba(255, 255, 255, 0.64);
322
+ --color-input-placeholder: #737373;
569
323
 
570
324
  /* --- Tags --- */
571
- --color-tag-subtle-bg: var(--lux-paper-06);
572
- --color-tag-subtle-fg: var(--lux-paper-80);
573
- --color-tag-clickable-bg: var(--lux-n-800);
574
- --color-tag-clickable-fg: var(--lux-paper-80);
575
- --color-tag-filter-bg: var(--lux-n-800);
576
- --color-tag-select-bg: var(--lux-n-800);
577
- --color-tag-select-fg: var(--lux-n-400);
578
- --color-tag-select-selected-bg: var(--lux-n-700);
579
- --color-tag-select-selected-fg: var(--lux-paper-80);
325
+ --color-tag-subtle-bg: rgba(255, 255, 255, 0.06);
326
+ --color-tag-subtle-fg: rgba(255, 255, 255, 0.80);
327
+ --color-tag-clickable-bg: #262626;
328
+ --color-tag-clickable-fg: rgba(255, 255, 255, 0.80);
329
+ --color-tag-filter-bg: rgba(255, 255, 255, 0.08);
330
+ --color-tag-select-bg: #262626;
331
+ --color-tag-select-fg: rgba(255, 255, 255, 0.80);
332
+ --color-tag-select-selected-bg: rgba(255, 255, 255, 0.16);
333
+ --color-tag-select-selected-fg: rgba(255, 255, 255, 0.80);
580
334
 
581
335
  /* --- Badges --- */
582
- --color-badge-gray-bg: var(--lux-paper-06);
583
- --color-badge-gray-fg: var(--lux-paper-80);
336
+ --color-badge-gray-bg: rgba(255, 255, 255, 0.06);
337
+ --color-badge-gray-fg: rgba(255, 255, 255, 0.80);
584
338
  --color-badge-green-bg: #22543D;
585
339
  --color-badge-green-fg: #9AE6B4;
586
340
  --color-badge-red-bg: #822727;
587
341
  --color-badge-red-fg: #FEB2B2;
588
- --color-badge-purple-bg: var(--lux-n-800);
589
- --color-badge-purple-fg: var(--lux-n-300);
590
- --color-badge-orange-bg: var(--lux-n-800);
591
- --color-badge-orange-fg: var(--lux-n-300);
592
- --color-badge-blue-bg: var(--lux-n-800);
593
- --color-badge-blue-fg: var(--lux-n-300);
594
- --color-badge-yellow-bg: var(--lux-n-800);
595
- --color-badge-yellow-fg: var(--lux-n-300);
596
- --color-badge-teal-bg: var(--lux-n-800);
597
- --color-badge-teal-fg: var(--lux-n-300);
598
- --color-badge-cyan-bg: var(--lux-n-800);
599
- --color-badge-cyan-fg: var(--lux-n-300);
600
- --color-badge-pink-bg: var(--lux-n-800);
601
- --color-badge-pink-fg: var(--lux-n-300);
602
- --color-badge-purple-alt-bg: var(--lux-n-800);
603
- --color-badge-purple-alt-fg: var(--lux-paper-80);
604
- --color-badge-blue-alt-bg: var(--lux-n-800);
605
- --color-badge-blue-alt-fg: var(--lux-paper-80);
606
- --color-badge-bright-gray-bg: var(--lux-n-800);
607
- --color-badge-bright-gray-fg: var(--lux-n-200);
342
+ --color-badge-purple-bg: #262626;
343
+ --color-badge-purple-fg: #D4D4D4;
344
+ --color-badge-orange-bg: #7B341E;
345
+ --color-badge-orange-fg: #FEEBCB;
346
+ --color-badge-blue-bg: #262626;
347
+ --color-badge-blue-fg: #D4D4D4;
348
+ --color-badge-yellow-bg: #744210;
349
+ --color-badge-yellow-fg: #FEFCBF;
350
+ --color-badge-teal-bg: #262626;
351
+ --color-badge-teal-fg: #D4D4D4;
352
+ --color-badge-cyan-bg: #262626;
353
+ --color-badge-cyan-fg: #D4D4D4;
354
+ --color-badge-pink-bg: #702459;
355
+ --color-badge-pink-fg: #FED7E2;
356
+ --color-badge-purple-alt-bg: #262626;
357
+ --color-badge-purple-alt-fg: rgba(255, 255, 255, 0.80);
358
+ --color-badge-blue-alt-bg: #262626;
359
+ --color-badge-blue-alt-fg: rgba(255, 255, 255, 0.80);
360
+ --color-badge-bright-gray-bg: #262626;
361
+ --color-badge-bright-gray-fg: #E5E5E5;
608
362
  --color-badge-bright-green-bg: #22543D;
609
363
  --color-badge-bright-green-fg: #9AE6B4;
610
364
  --color-badge-bright-red-bg: #822727;
611
365
  --color-badge-bright-red-fg: #FEB2B2;
612
- --color-badge-bright-blue-bg: var(--lux-n-700);
613
- --color-badge-bright-blue-fg: var(--lux-n-200);
614
- --color-badge-bright-yellow-bg: var(--lux-n-700);
615
- --color-badge-bright-yellow-fg: var(--lux-n-200);
616
- --color-badge-bright-teal-bg: var(--lux-n-700);
617
- --color-badge-bright-teal-fg: var(--lux-n-200);
618
- --color-badge-bright-cyan-bg: var(--lux-n-700);
619
- --color-badge-bright-cyan-fg: var(--lux-n-200);
620
- --color-badge-bright-orange-bg: var(--lux-n-700);
621
- --color-badge-bright-orange-fg: var(--lux-n-200);
622
- --color-badge-bright-purple-bg: var(--lux-n-700);
623
- --color-badge-bright-purple-fg: var(--lux-n-200);
624
- --color-badge-bright-pink-bg: var(--lux-n-700);
625
- --color-badge-bright-pink-fg: var(--lux-n-200);
366
+ --color-badge-bright-blue-bg: #404040;
367
+ --color-badge-bright-blue-fg: #E5E5E5;
368
+ --color-badge-bright-yellow-bg: #744210;
369
+ --color-badge-bright-yellow-fg: #FAF089;
370
+ --color-badge-bright-teal-bg: #404040;
371
+ --color-badge-bright-teal-fg: #E5E5E5;
372
+ --color-badge-bright-cyan-bg: #404040;
373
+ --color-badge-bright-cyan-fg: #E5E5E5;
374
+ --color-badge-bright-orange-bg: #C05621;
375
+ --color-badge-bright-orange-fg: #FEEBCB;
376
+ --color-badge-bright-purple-bg: #404040;
377
+ --color-badge-bright-purple-fg: #E5E5E5;
378
+ --color-badge-bright-pink-bg: #B83280;
379
+ --color-badge-bright-pink-fg: #FFF5F7;
626
380
 
627
381
  /* --- Alerts --- */
628
- --color-alert-fg: var(--lux-paper-80);
629
- --color-alert-bg-info: var(--lux-paper-06);
630
- --color-alert-bg-warning: var(--lux-paper-08);
631
- --color-alert-bg-warning-table: var(--lux-paper-06);
382
+ --color-alert-fg: rgba(255, 255, 255, 0.80);
383
+ --color-alert-bg-info: rgba(255, 255, 255, 0.06);
384
+ --color-alert-bg-warning: rgba(124, 67, 16, 0.44);
385
+ --color-alert-bg-warning-table: rgba(123, 52, 30, 0.44);
632
386
  --color-alert-bg-success: #1C4532;
633
387
  --color-alert-bg-error: #63171B;
634
388
 
635
389
  /* --- Dialogs / Popovers / Drawers --- */
636
- --color-dialog-bg: var(--lux-n-900);
637
- --color-dialog-fg: var(--lux-paper-80);
638
- --color-popover-bg: var(--lux-n-900);
639
- --color-popover-border: var(--lux-paper-12);
640
- --color-popover-shadow: var(--lux-paper-16);
641
- --color-drawer-bg: var(--lux-n-900);
390
+ --color-dialog-bg: #171717;
391
+ --color-dialog-fg: rgba(255, 255, 255, 0.80);
392
+ --color-popover-bg: #171717;
393
+ --color-popover-shadow: rgba(255, 255, 255, 0.16);
394
+ --color-drawer-bg: #171717;
642
395
 
643
396
  /* --- Tooltip --- */
644
- --color-tooltip-bg: var(--lux-n-900);
645
- --color-tooltip-fg: var(--lux-n-0);
397
+ --color-tooltip-bg: #171717;
398
+ --color-tooltip-fg: #FFFFFF;
646
399
 
647
400
  /* --- Table --- */
648
- --color-table-header-bg: var(--lux-paper-06);
649
- --color-table-header-fg: var(--lux-paper-64);
401
+ --color-table-header-bg: rgba(255, 255, 255, 0.08);
402
+ --color-table-header-fg: rgba(255, 255, 255, 0.64);
650
403
 
651
404
  /* --- Tabs --- */
652
- --color-tabs-solid-fg: var(--lux-n-0);
653
- --color-tabs-solid-bg: var(--lux-n-900);
654
- --color-tabs-solid-fg-selected: var(--lux-n-900);
655
- --color-tabs-solid-bg-selected: var(--lux-n-0);
656
- --color-tabs-secondary-fg: var(--lux-n-400);
657
- --color-tabs-secondary-fg-selected: var(--lux-n-0);
658
- --color-tabs-radio-fg: var(--lux-n-400);
659
- --color-tabs-radio-bg-selected: var(--lux-n-800);
660
- --color-tabs-radio-fg-selected: var(--lux-n-0);
661
-
662
- --color-tabs-secondary-border: var(--lux-n-600);
663
-
664
- /* --- Controls --- */
665
- --color-switch-bg: var(--lux-paper-24);
666
- --color-progress-track: var(--lux-paper-06);
667
-
668
- /* --- Chrome / charts --- */
669
- --color-stats-bg: var(--lux-paper-04);
670
- --color-topbar-bg: var(--lux-paper-04);
671
- --color-graph-line: var(--lux-paper-48);
672
- --color-graph-gradient-start: rgba(255, 255, 255, 0.15);
673
- --color-graph-gradient-stop: rgba(255, 255, 255, 0);
674
- --shadow-drawer: 0px 15px 40px 0px rgba(0, 0, 0, 0.4), 0px 5px 10px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 1px rgba(0, 0, 0, 0.1);
405
+ --color-tabs-solid-fg: rgba(255, 255, 255, 0.80);
406
+ --color-tabs-secondary-fg: rgba(255, 255, 255, 0.80);
407
+ --color-tabs-secondary-border: #525252;
408
+
409
+ /* --- Switch --- */
410
+ --color-switch-bg: rgba(255, 255, 255, 0.24);
675
411
 
676
412
  /* --- Skeleton --- */
677
- --color-skeleton-start: var(--lux-n-800);
678
- --color-skeleton-end: var(--lux-n-700);
413
+ --color-skeleton-start: rgba(255, 255, 255, 0.04);
414
+ --color-skeleton-end: rgba(255, 255, 255, 0.06);
415
+
416
+ /* --- Progress --- */
417
+ --color-progress-track: rgba(255, 255, 255, 0.06);
418
+
419
+ /* --- Stats / Topbar --- */
420
+ --color-stats-bg: rgba(255, 255, 255, 0.04);
421
+ --color-topbar-bg: rgba(255, 255, 255, 0.04);
422
+
423
+ /* --- Graph --- */
424
+ --color-graph-line: rgba(255, 255, 255, 0.48);
425
+ --color-graph-gradient-start: rgba(255, 255, 255, 0.15);
426
+ --color-graph-gradient-stop: rgba(255, 255, 255, 0);
679
427
 
680
428
  /* --- Scrollbar --- */
681
- --color-scrollbar-thumb: var(--lux-paper-16);
429
+ --color-scrollbar-thumb: rgba(255, 255, 255, 0.16);
682
430
 
683
431
  /* --- Selection --- */
684
- --color-selection-bg: var(--lux-n-700);
685
-
686
- /* The warm ramps are NOT redefined here on purpose — see the light block.
687
- They are monotone in both modes so `dark:bg-yellow-900` still means
688
- "dark". A call site that needs ink that FLIPS with the mode wants
689
- --color-status-warn, which is a semantic token, not a palette rung. */
690
-
691
- /* ------------------------------------------------------------
692
- SHADCN / TAILWIND ALIASES (dark)
693
- ------------------------------------------------------------ */
694
- --background: var(--lux-n-1000);
695
- --foreground: var(--lux-n-50);
696
- --card: var(--lux-n-950);
697
- --card-foreground: var(--lux-n-50);
698
- --popover: var(--lux-n-950);
699
- --popover-foreground: var(--lux-n-50);
700
- --primary: var(--lux-accent);
701
- --primary-foreground: var(--lux-accent-fg);
702
- --secondary: var(--lux-n-900);
703
- --secondary-foreground: var(--lux-n-50);
704
- --muted: var(--lux-n-900);
705
- --muted-foreground: var(--lux-n-400);
706
- --accent: var(--lux-n-900);
707
- --accent-foreground: var(--lux-n-50);
708
- --destructive: var(--lux-state-error);
709
- --destructive-foreground: var(--lux-n-950);
710
- --success: var(--lux-state-success);
711
- --success-foreground: var(--lux-n-950);
712
- --warning: var(--lux-state-notice);
713
- --warning-foreground: var(--lux-n-950);
714
- --info: var(--lux-n-300);
715
- --info-foreground: var(--lux-n-950);
716
- --border: var(--lux-paper-10);
717
- --input: var(--lux-paper-12);
718
- --ring: var(--lux-n-500);
719
- --chart-1: var(--lux-n-50);
720
- --chart-2: var(--lux-n-400);
721
- --chart-3: var(--lux-n-500);
722
- --chart-4: var(--lux-n-300);
723
- --chart-5: var(--lux-n-600);
724
- --sidebar: var(--lux-n-950);
725
- --sidebar-foreground: var(--lux-n-50);
726
- --sidebar-primary: var(--lux-accent);
727
- --sidebar-primary-foreground: var(--lux-accent-fg);
728
- --sidebar-accent: var(--lux-n-900);
729
- --sidebar-accent-foreground: var(--lux-n-50);
730
- --sidebar-border: var(--lux-paper-10);
731
- --sidebar-ring: var(--lux-n-500);
432
+ --color-selection-bg: #754B7D;
433
+
434
+ /* --- Shadows --- */
435
+ --shadow-action-bar: 0 4px 4px -4px rgb(0 0 0 / 10%), 0 2px 4px -4px rgb(0 0 0 / 6%);
436
+ --shadow-popover: 0px 15px 40px 0px rgba(0, 0, 0, 0.4), 0px 5px 10px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 1px rgba(0, 0, 0, 0.1);
437
+ --shadow-drawer: 0px 15px 40px 0px rgba(0, 0, 0, 0.4), 0px 5px 10px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 1px rgba(0, 0, 0, 0.1);
732
438
  }