@frame-kit/tokens 0.0.1

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,856 @@
1
+ /* ==========================================================================
2
+ Dark Mode Tokens — libs/ui-shared
3
+ Remaps color-sensitive tokens for dark mode.
4
+
5
+ Activation (highest → lowest priority):
6
+ 1. .dark class on <html> — user override
7
+ 2. @media (prefers-color-scheme: dark) — system preference
8
+
9
+ Non-color tokens (typography, spacing, radii) are NOT redefined here
10
+ because they remain the same across themes.
11
+ ========================================================================== */
12
+
13
+ /* ---------- System preference (default) ---------- */
14
+ @media (prefers-color-scheme: dark) {
15
+ :root {
16
+ /* ==========================================================================
17
+ 1. PRIMITIVES
18
+ ========================================================================== */
19
+
20
+ /* Color palette */
21
+ --fk-color-primary: #3b9eff;
22
+ --fk-color-primary-hover: #5cb0ff;
23
+ --fk-color-primary-active: #7ec2ff;
24
+ --fk-color-primary-light: #1a2a3e;
25
+ --fk-color-primary-light-border: #1e3a5f;
26
+ --fk-color-primary-light-gradient: #1e3350;
27
+
28
+ --fk-color-accent-gradient: #143838;
29
+
30
+ --fk-color-ghost-white: #1a1a1e;
31
+
32
+ --fk-color-surface: #121214;
33
+ --fk-color-surface-muted: #1c1c20;
34
+
35
+ --fk-color-text: #e8ecf1;
36
+ --fk-color-muted: #8a8f98;
37
+ --fk-color-border: #2e2e34;
38
+
39
+ /* Focus */
40
+ --fk-focus-ring: 0 0 0 3px rgba(59, 158, 255, 0.4);
41
+
42
+ /* ==========================================================================
43
+ 3. ATOMS
44
+ ========================================================================== */
45
+
46
+ /* Text */
47
+ --fk-text-color-default: var(--fk-color-text);
48
+ --fk-text-color-muted: var(--fk-color-muted);
49
+ --fk-text-color-subtle: #6b7280;
50
+ --fk-text-color-danger: #f87171;
51
+ --fk-text-color-success: #4ade80;
52
+
53
+ /* Link */
54
+ --fk-link-color-default: var(--fk-color-text);
55
+ --fk-link-color-default-hover: var(--fk-color-primary);
56
+ --fk-link-color-muted: var(--fk-color-muted);
57
+ --fk-link-color-muted-hover: var(--fk-color-text);
58
+ --fk-link-color-primary: var(--fk-color-primary);
59
+ --fk-link-color-primary-hover: var(--fk-color-primary-hover);
60
+ --fk-link-color-primary-active: var(--fk-color-primary-active);
61
+ --fk-link-color-danger: #f87171;
62
+ --fk-link-color-danger-hover: #ef4444;
63
+ --fk-link-color-disabled: #4b5563;
64
+
65
+ /* Icon */
66
+ --fk-icon-color-default: var(--fk-color-text);
67
+ --fk-icon-color-muted: var(--fk-color-muted);
68
+ --fk-icon-color-primary: var(--fk-color-primary);
69
+ --fk-icon-color-danger: #f87171;
70
+ --fk-icon-color-success: #4ade80;
71
+
72
+ /* Card */
73
+ --fk-card-bg: var(--fk-color-surface);
74
+ --fk-card-border-color: var(--fk-color-border);
75
+
76
+ /* Badge */
77
+ --fk-badge-default-bg: #2a2a30;
78
+ --fk-badge-default-color: #d1d5db;
79
+ --fk-badge-primary-bg: #1a2a3e;
80
+ --fk-badge-primary-color: #5cb0ff;
81
+ --fk-badge-success-bg: #0f291a;
82
+ --fk-badge-success-color: #4ade80;
83
+ --fk-badge-warning-bg: #2a1f0a;
84
+ --fk-badge-warning-color: #fbbf24;
85
+ --fk-badge-danger-bg: #2a0f0f;
86
+ --fk-badge-danger-color: #f87171;
87
+
88
+ /* Method Badge (docs) */
89
+ --fk-method-badge-bg-neutral: #2a2a30;
90
+ --fk-method-badge-color: #e8ecf1;
91
+ --fk-method-badge-bg-get: #0f291a;
92
+ --fk-method-badge-color-get: #4ade80;
93
+ --fk-method-badge-bg-post: #1a2a3e;
94
+ --fk-method-badge-color-post: #8bb8ff;
95
+ --fk-method-badge-bg-put: #2a1f0a;
96
+ --fk-method-badge-color-put: #fbbf24;
97
+ --fk-method-badge-bg-patch: #221536;
98
+ --fk-method-badge-color-patch: #b78cff;
99
+ --fk-method-badge-bg-delete: #2a0f0f;
100
+ --fk-method-badge-color-delete: #f87171;
101
+ --fk-method-badge-bg-head: var(--fk-method-badge-bg-neutral);
102
+ --fk-method-badge-color-head: #d1d5db;
103
+ --fk-method-badge-bg-options: var(--fk-method-badge-bg-neutral);
104
+ --fk-method-badge-color-options: #d1d5db;
105
+
106
+ /* Endpoint Link (docs) */
107
+ --fk-endpoint-link-bg-hover: var(--fk-color-surface-muted);
108
+ --fk-endpoint-link-bg-active: var(--fk-color-primary-light);
109
+ --fk-endpoint-link-color-active: var(--fk-color-primary);
110
+
111
+ /* Progress Bar */
112
+ --fk-progress-bar-bg: var(--fk-color-surface-muted);
113
+ --fk-progress-bar-label-color: var(--fk-color-text);
114
+
115
+ /* Segmented Bar */
116
+ --fk-segmented-bar-bg: var(--fk-color-surface-muted);
117
+
118
+ /* Timeline */
119
+ --fk-timeline-marker-bg: var(--fk-color-surface);
120
+ --fk-timeline-marker-border-color: var(--fk-color-border);
121
+ --fk-timeline-connector-color: var(--fk-color-border);
122
+ --fk-timeline-title-color: var(--fk-color-text);
123
+ --fk-timeline-description-color: var(--fk-color-muted);
124
+
125
+ /* Headline */
126
+ --fk-headline-color-default: var(--fk-color-text);
127
+ --fk-headline-color-muted: var(--fk-color-muted);
128
+
129
+ /* Separator */
130
+ --fk-separator-color: var(--fk-color-border);
131
+
132
+ /* Nav Separator */
133
+ --fk-nav-separator-color: var(--fk-color-border);
134
+
135
+ /* Tooltip */
136
+ --fk-tooltip-bg: var(--fk-color-surface);
137
+ --fk-tooltip-color: var(--fk-color-text);
138
+ --fk-tooltip-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
139
+
140
+ /* ==========================================================================
141
+ 4. MOLECULES
142
+ ========================================================================== */
143
+
144
+ /* Avatar */
145
+ --fk-avatar-bg: var(--fk-color-surface-muted);
146
+ --fk-avatar-color: var(--fk-color-muted);
147
+ --fk-avatar-status-border: var(--fk-color-surface);
148
+
149
+ /* Menu Item */
150
+ --fk-menu-item-color: var(--fk-color-text);
151
+ --fk-menu-item-bg-hover: var(--fk-color-surface-muted);
152
+ --fk-menu-item-danger-color: #f87171;
153
+ --fk-menu-item-danger-bg-hover: #2a0f0f;
154
+ --fk-menu-separator-color: var(--fk-color-border);
155
+ --fk-menu-item-focus-ring: var(--fk-focus-ring);
156
+
157
+ /* Dropdown Menu */
158
+ --fk-dropdown-menu-panel-bg: var(--fk-color-surface);
159
+ --fk-dropdown-menu-panel-border: var(--fk-color-border);
160
+ --fk-dropdown-menu-panel-shadow:
161
+ 0 4px 16px rgba(0, 0, 0, 0.3), 0 1px 4px rgba(0, 0, 0, 0.2);
162
+
163
+ /* Editable Field */
164
+ --fk-editable-field-bg: var(--fk-color-surface);
165
+ --fk-editable-field-border-color: var(--fk-color-border);
166
+ --fk-editable-field-color: var(--fk-color-text);
167
+ --fk-editable-field-empty-color: var(--fk-color-muted);
168
+ --fk-editable-field-trigger-color: var(--fk-color-muted);
169
+
170
+ /* User Menu */
171
+ --fk-user-menu-trigger-bg-hover: var(--fk-color-surface-muted);
172
+ --fk-user-menu-name-color: var(--fk-color-text);
173
+ --fk-user-menu-email-color: var(--fk-color-muted);
174
+ --fk-user-menu-chevron-color: var(--fk-color-muted);
175
+ --fk-user-menu-panel-bg: var(--fk-color-surface);
176
+ --fk-user-menu-panel-border: var(--fk-color-border);
177
+ --fk-user-menu-panel-shadow:
178
+ 0 4px 16px rgba(0, 0, 0, 0.3), 0 1px 4px rgba(0, 0, 0, 0.2);
179
+ --fk-user-menu-item-color: var(--fk-color-text);
180
+ --fk-user-menu-item-bg-hover: var(--fk-color-surface-muted);
181
+ --fk-user-menu-separator-color: var(--fk-color-border);
182
+ --fk-user-menu-focus-ring: var(--fk-focus-ring);
183
+
184
+ /* Sidenav Link */
185
+ --fk-sidenav-link-color: var(--fk-color-text);
186
+ --fk-sidenav-link-color-hover: var(--fk-color-primary);
187
+ --fk-sidenav-link-bg-hover: var(--fk-color-surface-muted);
188
+ --fk-sidenav-link-bg-active: var(--fk-color-surface-muted);
189
+ --fk-sidenav-link-color-active: var(--fk-color-primary);
190
+ --fk-sidenav-link-focus-ring: var(--fk-focus-ring);
191
+
192
+ /* Tabs */
193
+ --fk-tabs-tab-color: var(--fk-color-text-muted);
194
+ --fk-tabs-tab-color-active: var(--fk-color-primary);
195
+ --fk-tabs-tab-color-hover: var(--fk-color-text);
196
+ --fk-tabs-tab-color-disabled: var(--fk-color-text-disabled);
197
+ --fk-tabs-border-color: var(--fk-color-border);
198
+ --fk-tabs-indicator-color: var(--fk-color-primary);
199
+ --fk-tabs-pill-active-bg: var(--fk-color-primary);
200
+ --fk-tabs-pill-active-color: #121214;
201
+ --fk-tabs-contained-bg: var(--fk-color-surface-muted);
202
+ --fk-tabs-contained-active-bg: var(--fk-color-surface);
203
+ --fk-tabs-badge-bg: var(--fk-color-surface-muted);
204
+ --fk-tabs-badge-color: var(--fk-color-text-muted);
205
+ --fk-tabs-close-bg-hover: var(--fk-color-surface-muted);
206
+ --fk-tabs-scroll-btn-bg: var(--fk-color-surface);
207
+ --fk-tabs-scroll-btn-color: var(--fk-color-text-muted);
208
+ --fk-tabs-scroll-btn-color-hover: var(--fk-color-text);
209
+
210
+ /* Button: primary */
211
+ --fk-button-primary-bg: var(--fk-color-primary);
212
+ --fk-button-primary-bg-hover: var(--fk-color-primary-hover);
213
+ --fk-button-primary-bg-active: var(--fk-color-primary-active);
214
+ --fk-button-primary-color: #121214;
215
+ --fk-button-primary-border-color: transparent;
216
+
217
+ /* Button: secondary */
218
+ --fk-button-secondary-bg: transparent;
219
+ --fk-button-secondary-bg-hover: var(--fk-color-surface-muted);
220
+ --fk-button-secondary-bg-active: var(--fk-color-border);
221
+ --fk-button-secondary-color: var(--fk-color-primary);
222
+ --fk-button-secondary-border-color: var(--fk-color-border);
223
+
224
+ /* Button: outline */
225
+ --fk-button-outline-bg: transparent;
226
+ --fk-button-outline-bg-hover: var(--fk-color-surface-muted);
227
+ --fk-button-outline-bg-active: var(--fk-color-border);
228
+ --fk-button-outline-color: var(--fk-color-primary);
229
+ --fk-button-outline-border-color: var(--fk-color-border);
230
+
231
+ /* Button: danger */
232
+ --fk-button-danger-bg: #dc2626;
233
+ --fk-button-danger-bg-hover: #ef4444;
234
+ --fk-button-danger-bg-active: #f87171;
235
+ --fk-button-danger-color: #121214;
236
+ --fk-button-danger-border-color: transparent;
237
+
238
+ /* Callout */
239
+ --fk-callout-bg: var(--fk-color-surface-muted);
240
+ --fk-callout-border-color: var(--fk-color-border);
241
+
242
+ /* Alert */
243
+ --fk-alert-info-bg: #0c1929;
244
+ --fk-alert-info-border-color: #1e3a5f;
245
+ --fk-alert-info-color: #93c5fd;
246
+
247
+ --fk-alert-success-bg: #0f291a;
248
+ --fk-alert-success-border-color: #16593a;
249
+ --fk-alert-success-color: #4ade80;
250
+
251
+ --fk-alert-warning-bg: #2a1f0a;
252
+ --fk-alert-warning-border-color: #5c4813;
253
+ --fk-alert-warning-color: #fbbf24;
254
+
255
+ --fk-alert-error-bg: #2a0f0f;
256
+ --fk-alert-error-border-color: #5c1a1a;
257
+ --fk-alert-error-color: #f87171;
258
+
259
+ /* Accordion */
260
+ --fk-accordion-color: var(--fk-color-text);
261
+ --fk-accordion-border-color: var(--fk-color-border);
262
+ --fk-accordion-header-bg-hover: var(--fk-color-surface-muted);
263
+ --fk-accordion-header-bg-expanded: var(--fk-color-surface-muted);
264
+ --fk-accordion-title-color: var(--fk-color-text);
265
+ --fk-accordion-description-color: var(--fk-color-muted);
266
+ --fk-accordion-leading-text-color: var(--fk-color-muted);
267
+ --fk-accordion-chevron-color: var(--fk-color-muted);
268
+ --fk-accordion-panel-color: var(--fk-color-text);
269
+ --fk-accordion-focus-ring: var(--fk-focus-ring);
270
+
271
+ /* Breadcrumb (route-driven) */
272
+ --fk-breadcrumb-link-color: var(--fk-color-muted);
273
+ --fk-breadcrumb-link-color-hover: var(--fk-color-text);
274
+ --fk-breadcrumb-current-color: var(--fk-color-text);
275
+ --fk-breadcrumb-separator-color: var(--fk-color-muted);
276
+
277
+ /* Copyable Field */
278
+ --fk-copyable-field-bg: var(--fk-color-surface-muted);
279
+ --fk-copyable-field-border-color: var(--fk-color-border);
280
+ --fk-copyable-field-value-color: var(--fk-color-text);
281
+ --fk-copyable-field-label-color: var(--fk-color-muted);
282
+ --fk-copyable-field-action-color: var(--fk-color-muted);
283
+ --fk-copyable-field-action-color-hover: var(--fk-color-text);
284
+ --fk-copyable-field-action-bg-hover: var(--fk-color-surface-dim);
285
+
286
+ /* Node Tree Breadcrumb */
287
+ --fk-node-tree-breadcrumb-link-color: var(--fk-color-muted);
288
+ --fk-node-tree-breadcrumb-link-color-hover: var(--fk-color-text);
289
+ --fk-node-tree-breadcrumb-current-color: var(--fk-color-primary);
290
+ --fk-node-tree-breadcrumb-separator-color: var(--fk-color-muted);
291
+
292
+ /* List Editor */
293
+ --fk-list-editor-item-bg: var(--fk-color-surface);
294
+ --fk-list-editor-item-border-color: var(--fk-color-border);
295
+ --fk-list-editor-input-color: var(--fk-color-text);
296
+ --fk-list-editor-input-bg: var(--fk-color-surface);
297
+ --fk-list-editor-input-border-color: var(--fk-color-border);
298
+ --fk-list-editor-input-focus-border-color: var(--fk-color-primary);
299
+ --fk-list-editor-order-bg: rgba(59, 158, 255, 0.15);
300
+ --fk-list-editor-order-color: var(--fk-color-primary);
301
+ --fk-list-editor-remove-color: var(--fk-color-muted);
302
+ --fk-list-editor-remove-hover-color: var(--fk-color-danger);
303
+ --fk-list-editor-empty-color: var(--fk-color-muted);
304
+ --fk-list-editor-error-color: var(--fk-color-danger);
305
+ --fk-list-editor-placeholder-bg: var(--fk-color-surface-muted);
306
+ --fk-list-editor-placeholder-border-color: var(--fk-color-border);
307
+ --fk-list-editor-drag-border-color: var(--fk-color-primary);
308
+
309
+ /* ==========================================================================
310
+ 5. ORGANISMS
311
+ ========================================================================== */
312
+
313
+ /* Node Tree */
314
+ --fk-node-tree-row-color: var(--fk-color-text);
315
+ --fk-node-tree-row-bg-hover: var(--fk-color-surface-muted);
316
+ --fk-node-tree-row-bg-selected: rgba(59, 158, 255, 0.15);
317
+ --fk-node-tree-row-color-selected: var(--fk-color-primary);
318
+ --fk-node-tree-row-toggle-color: var(--fk-color-muted);
319
+ --fk-node-tree-row-toggle-color-hover: var(--fk-color-text);
320
+ --fk-node-tree-row-toggle-bg-hover: var(--fk-color-surface-muted);
321
+ --fk-node-tree-row-handle-color: var(--fk-color-muted);
322
+ --fk-node-tree-row-handle-color-hover: var(--fk-color-text);
323
+ --fk-node-tree-row-bg-drop-target: rgba(59, 158, 255, 0.2);
324
+ --fk-node-tree-row-border-drop-target: var(--fk-color-primary);
325
+ --fk-node-tree-drag-preview-bg: var(--fk-color-surface);
326
+ --fk-node-tree-drag-preview-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
327
+ --fk-node-tree-drag-placeholder-bg: var(--fk-color-primary);
328
+
329
+ /* Content Split */
330
+ --fk-content-split-left-bg: var(--fk-color-surface);
331
+ --fk-content-split-left-border: 1px solid var(--fk-color-border);
332
+ --fk-content-split-overlay-bg: rgba(0, 0, 0, 0.7);
333
+ --fk-content-split-rail-toggle-color: var(--fk-color-muted);
334
+ --fk-content-split-rail-toggle-color-hover: var(--fk-color-text);
335
+ --fk-content-split-rail-toggle-bg-hover: var(--fk-color-surface-muted);
336
+
337
+ /* App Shell */
338
+ --fk-app-shell-overlay-bg: rgba(0, 0, 0, 0.7);
339
+ --fk-app-shell-aside-bg: var(--fk-color-surface);
340
+ --fk-app-shell-end-bg: var(--fk-color-surface);
341
+ --fk-app-shell-end-radius: var(--fk-radius-lg) 0 0 var(--fk-radius-lg);
342
+ --fk-app-shell-end-shadow: -4px 0 16px rgba(0, 0, 0, 0.25);
343
+
344
+ /* Data Table */
345
+ --fk-data-table-head-bg: var(--fk-color-surface-muted);
346
+ --fk-data-table-head-color: var(--fk-color-text-muted);
347
+ --fk-data-table-head-hover-color: var(--fk-color-text);
348
+ --fk-data-table-body-bg: var(--fk-color-surface);
349
+ --fk-data-table-body-color: var(--fk-color-text);
350
+ --fk-data-table-border-color: var(--fk-color-border);
351
+ --fk-data-table-row-hover-bg: var(--fk-color-surface-muted);
352
+ --fk-data-table-empty-color: var(--fk-color-text-muted);
353
+ --fk-data-table-loading-bg: rgba(0, 0, 0, 0.5);
354
+ --fk-data-table-loading-color: var(--fk-color-text-muted);
355
+ --fk-data-table-row-selected-bg: var(--fk-color-primary-light);
356
+ --fk-data-table-row-selected-hover-bg: var(
357
+ --fk-color-primary-light-gradient
358
+ );
359
+ --fk-data-table-checkbox-border-color: var(--fk-color-border);
360
+ --fk-data-table-checkbox-bg: var(--fk-color-surface);
361
+ --fk-data-table-checkbox-hover-border-color: var(--fk-color-primary);
362
+ --fk-data-table-checkbox-checked-bg: var(--fk-color-primary);
363
+ --fk-data-table-checkbox-checked-border-color: var(--fk-color-primary);
364
+ --fk-data-table-checkbox-icon-color: var(--fk-color-surface);
365
+
366
+ /* Dialog */
367
+ --fk-dialog-overlay-bg: rgba(0, 0, 0, 0.7);
368
+ --fk-dialog-panel-bg: var(--fk-color-surface);
369
+ --fk-dialog-panel-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
370
+ --fk-dialog-footer-border: 1px solid var(--fk-color-border);
371
+ --fk-dialog-close-color: var(--fk-color-muted);
372
+ --fk-dialog-close-color-hover: var(--fk-color-text);
373
+
374
+ /* Wizard Dialog */
375
+ --fk-wizard-dialog-footer-border: 1px solid var(--fk-color-border);
376
+ --fk-wizard-dialog-step-number-active-color: #fff;
377
+
378
+ /* Toast */
379
+ --fk-toast-bg: var(--fk-color-surface);
380
+ --fk-toast-border-color: var(--fk-color-border);
381
+ --fk-toast-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
382
+ --fk-toast-summary-color: var(--fk-color-text);
383
+ --fk-toast-detail-color: var(--fk-color-muted);
384
+ --fk-toast-dismiss-color: var(--fk-color-muted);
385
+ --fk-toast-dismiss-hover-color: var(--fk-color-text);
386
+
387
+ /* Form Field */
388
+ --fk-input-color: var(--fk-color-text);
389
+ --fk-input-placeholder-color: var(--fk-color-muted);
390
+ --fk-input-bg: var(--fk-color-surface);
391
+ --fk-input-border-color: var(--fk-color-border);
392
+ --fk-input-border-color-hover: var(--fk-color-muted);
393
+ --fk-input-border-color-focus: var(--fk-color-primary);
394
+ --fk-input-border-color-error: #f87171;
395
+ --fk-input-focus-ring: var(--fk-focus-ring);
396
+
397
+ --fk-form-label-color: #e2e8f0;
398
+ --fk-form-error-color: #f87171;
399
+ --fk-form-hint-color: var(--fk-color-muted);
400
+
401
+ /* File Dropzone */
402
+ --fk-file-dropzone-bg: var(--fk-color-surface-muted);
403
+ --fk-file-dropzone-bg-dragging: rgba(96, 165, 250, 0.08);
404
+ --fk-file-dropzone-border-color: var(--fk-color-border);
405
+ --fk-file-dropzone-border-color-hover: var(--fk-color-primary);
406
+ --fk-file-dropzone-border-color-dragging: var(--fk-color-primary);
407
+ --fk-file-dropzone-prompt-color: var(--fk-color-text);
408
+ --fk-file-dropzone-icon-color-disabled: var(--fk-color-muted);
409
+
410
+ /* Pagination */
411
+ --fk-pagination-color: var(--fk-color-muted);
412
+ --fk-pagination-border-color: var(--fk-color-border);
413
+ --fk-pagination-label-color: var(--fk-color-muted);
414
+ --fk-pagination-select-color: var(--fk-color-text);
415
+ --fk-pagination-select-bg: var(--fk-color-surface);
416
+ --fk-pagination-select-border-color: var(--fk-color-border);
417
+ --fk-pagination-page-info-color: var(--fk-color-text);
418
+ --fk-pagination-btn-color: var(--fk-color-text);
419
+ --fk-pagination-btn-border-color: var(--fk-color-border);
420
+ --fk-pagination-btn-bg-hover: var(--fk-color-surface-hover);
421
+
422
+ /* Drawer */
423
+ --fk-drawer-bg: var(--fk-color-surface);
424
+ --fk-drawer-border-color: var(--fk-color-border);
425
+ --fk-drawer-header-border-color: var(--fk-color-border);
426
+ --fk-drawer-title-color: var(--fk-color-text-strong);
427
+ --fk-drawer-close-color: var(--fk-color-muted);
428
+ --fk-drawer-close-color-hover: var(--fk-color-text);
429
+ --fk-drawer-close-bg-hover: var(--fk-color-surface-hover);
430
+ /* Avatar Stack */
431
+ --fk-avatar-stack-ring: 0 0 0 2px var(--fk-color-surface);
432
+ --fk-avatar-stack-overflow-color: var(--fk-color-text);
433
+ --fk-avatar-stack-overflow-bg: var(--fk-color-surface-muted);
434
+ --fk-avatar-stack-overflow-bg-hover: var(--fk-color-surface-hover);
435
+ }
436
+ }
437
+
438
+ /* ---------- Class override (user preference) ---------- */
439
+ html.dark {
440
+ /* ==========================================================================
441
+ 1. PRIMITIVES
442
+ ========================================================================== */
443
+
444
+ /* Color palette */
445
+ --fk-color-primary: #3b9eff;
446
+ --fk-color-primary-hover: #5cb0ff;
447
+ --fk-color-primary-active: #7ec2ff;
448
+ --fk-color-primary-light: #1a2a3e;
449
+ --fk-color-primary-light-border: #1e3a5f;
450
+ --fk-color-primary-light-gradient: #1e3350;
451
+
452
+ --fk-color-accent-gradient: #143838;
453
+
454
+ --fk-color-ghost-white: #1a1a1e;
455
+
456
+ --fk-color-surface: #121214;
457
+ --fk-color-surface-muted: #1c1c20;
458
+
459
+ --fk-color-text: #e8ecf1;
460
+ --fk-color-muted: #8a8f98;
461
+ --fk-color-border: #2e2e34;
462
+
463
+ /* Focus */
464
+ --fk-focus-ring: 0 0 0 3px rgba(59, 158, 255, 0.4);
465
+
466
+ /* ==========================================================================
467
+ 3. ATOMS
468
+ ========================================================================== */
469
+
470
+ /* Text */
471
+ --fk-text-color-default: var(--fk-color-text);
472
+ --fk-text-color-muted: var(--fk-color-muted);
473
+ --fk-text-color-subtle: #6b7280;
474
+ --fk-text-color-danger: #f87171;
475
+ --fk-text-color-success: #4ade80;
476
+
477
+ /* Link */
478
+ --fk-link-color-default: var(--fk-color-text);
479
+ --fk-link-color-default-hover: var(--fk-color-primary);
480
+ --fk-link-color-muted: var(--fk-color-muted);
481
+ --fk-link-color-muted-hover: var(--fk-color-text);
482
+ --fk-link-color-primary: var(--fk-color-primary);
483
+ --fk-link-color-primary-hover: var(--fk-color-primary-hover);
484
+ --fk-link-color-primary-active: var(--fk-color-primary-active);
485
+ --fk-link-color-danger: #f87171;
486
+ --fk-link-color-danger-hover: #ef4444;
487
+ --fk-link-color-disabled: #4b5563;
488
+
489
+ /* Icon */
490
+ --fk-icon-color-default: var(--fk-color-text);
491
+ --fk-icon-color-muted: var(--fk-color-muted);
492
+ --fk-icon-color-primary: var(--fk-color-primary);
493
+ --fk-icon-color-danger: #f87171;
494
+ --fk-icon-color-success: #4ade80;
495
+
496
+ /* Card */
497
+ --fk-card-bg: var(--fk-color-surface);
498
+ --fk-card-border-color: var(--fk-color-border);
499
+
500
+ /* Badge */
501
+ --fk-badge-default-bg: #2a2a30;
502
+ --fk-badge-default-color: #d1d5db;
503
+ --fk-badge-primary-bg: #1a2a3e;
504
+ --fk-badge-primary-color: #5cb0ff;
505
+ --fk-badge-success-bg: #0f291a;
506
+ --fk-badge-success-color: #4ade80;
507
+ --fk-badge-warning-bg: #2a1f0a;
508
+ --fk-badge-warning-color: #fbbf24;
509
+ --fk-badge-danger-bg: #2a0f0f;
510
+ --fk-badge-danger-color: #f87171;
511
+
512
+ /* Method Badge (docs) */
513
+ --fk-method-badge-bg-neutral: #2a2a30;
514
+ --fk-method-badge-color: #e8ecf1;
515
+ --fk-method-badge-bg-get: #0f291a;
516
+ --fk-method-badge-color-get: #4ade80;
517
+ --fk-method-badge-bg-post: #1a2a3e;
518
+ --fk-method-badge-color-post: #8bb8ff;
519
+ --fk-method-badge-bg-put: #2a1f0a;
520
+ --fk-method-badge-color-put: #fbbf24;
521
+ --fk-method-badge-bg-patch: #221536;
522
+ --fk-method-badge-color-patch: #b78cff;
523
+ --fk-method-badge-bg-delete: #2a0f0f;
524
+ --fk-method-badge-color-delete: #f87171;
525
+ --fk-method-badge-bg-head: var(--fk-method-badge-bg-neutral);
526
+ --fk-method-badge-color-head: #d1d5db;
527
+ --fk-method-badge-bg-options: var(--fk-method-badge-bg-neutral);
528
+ --fk-method-badge-color-options: #d1d5db;
529
+
530
+ /* Endpoint Link (docs) */
531
+ --fk-endpoint-link-bg-hover: var(--fk-color-surface-muted);
532
+ --fk-endpoint-link-bg-active: var(--fk-color-primary-light);
533
+ --fk-endpoint-link-color-active: var(--fk-color-primary);
534
+
535
+ /* Progress Bar */
536
+ --fk-progress-bar-bg: var(--fk-color-surface-muted);
537
+ --fk-progress-bar-label-color: var(--fk-color-text);
538
+
539
+ /* Segmented Bar */
540
+ --fk-segmented-bar-bg: var(--fk-color-surface-muted);
541
+
542
+ /* Timeline */
543
+ --fk-timeline-marker-bg: var(--fk-color-surface);
544
+ --fk-timeline-marker-border-color: var(--fk-color-border);
545
+ --fk-timeline-connector-color: var(--fk-color-border);
546
+ --fk-timeline-title-color: var(--fk-color-text);
547
+ --fk-timeline-description-color: var(--fk-color-muted);
548
+
549
+ /* Headline */
550
+ --fk-headline-color-default: var(--fk-color-text);
551
+ --fk-headline-color-muted: var(--fk-color-muted);
552
+
553
+ /* Separator */
554
+ --fk-separator-color: var(--fk-color-border);
555
+
556
+ /* Nav Separator */
557
+ --fk-nav-separator-color: var(--fk-color-border);
558
+
559
+ /* Menu Item */
560
+ --fk-menu-item-color: var(--fk-color-text);
561
+ --fk-menu-item-bg-hover: var(--fk-color-surface-muted);
562
+ --fk-menu-item-danger-color: #f87171;
563
+ --fk-menu-item-danger-bg-hover: #2a0f0f;
564
+ --fk-menu-separator-color: var(--fk-color-border);
565
+ --fk-menu-item-focus-ring: var(--fk-focus-ring);
566
+
567
+ /* Tooltip */
568
+ --fk-tooltip-bg: var(--fk-color-surface);
569
+ --fk-tooltip-color: var(--fk-color-text);
570
+ --fk-tooltip-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
571
+
572
+ /* ==========================================================================
573
+ 4. MOLECULES
574
+ ========================================================================== */
575
+
576
+ /* Avatar */
577
+ --fk-avatar-bg: var(--fk-color-surface-muted);
578
+ --fk-avatar-color: var(--fk-color-muted);
579
+ --fk-avatar-status-border: var(--fk-color-surface);
580
+
581
+ /* Dropdown Menu */
582
+ --fk-dropdown-menu-panel-bg: var(--fk-color-surface);
583
+ --fk-dropdown-menu-panel-border: var(--fk-color-border);
584
+ --fk-dropdown-menu-panel-shadow:
585
+ 0 4px 16px rgba(0, 0, 0, 0.3), 0 1px 4px rgba(0, 0, 0, 0.2);
586
+
587
+ /* Editable Field */
588
+ --fk-editable-field-bg: var(--fk-color-surface);
589
+ --fk-editable-field-border-color: var(--fk-color-border);
590
+ --fk-editable-field-color: var(--fk-color-text);
591
+ --fk-editable-field-empty-color: var(--fk-color-muted);
592
+ --fk-editable-field-trigger-color: var(--fk-color-muted);
593
+
594
+ /* User Menu */
595
+ --fk-user-menu-trigger-bg-hover: var(--fk-color-surface-muted);
596
+ --fk-user-menu-name-color: var(--fk-color-text);
597
+ --fk-user-menu-email-color: var(--fk-color-muted);
598
+ --fk-user-menu-chevron-color: var(--fk-color-muted);
599
+ --fk-user-menu-panel-bg: var(--fk-color-surface);
600
+ --fk-user-menu-panel-border: var(--fk-color-border);
601
+ --fk-user-menu-panel-shadow:
602
+ 0 4px 16px rgba(0, 0, 0, 0.3), 0 1px 4px rgba(0, 0, 0, 0.2);
603
+ --fk-user-menu-item-color: var(--fk-color-text);
604
+ --fk-user-menu-item-bg-hover: var(--fk-color-surface-muted);
605
+ --fk-user-menu-separator-color: var(--fk-color-border);
606
+ --fk-user-menu-focus-ring: var(--fk-focus-ring);
607
+
608
+ /* Sidenav Link */
609
+ --fk-sidenav-link-color: var(--fk-color-text);
610
+ --fk-sidenav-link-color-hover: var(--fk-color-primary);
611
+ --fk-sidenav-link-bg-hover: var(--fk-color-surface-muted);
612
+ --fk-sidenav-link-bg-active: var(--fk-color-surface-muted);
613
+ --fk-sidenav-link-color-active: var(--fk-color-primary);
614
+ --fk-sidenav-link-focus-ring: var(--fk-focus-ring);
615
+
616
+ /* Tabs */
617
+ --fk-tabs-tab-color: var(--fk-color-text-muted);
618
+ --fk-tabs-tab-color-active: var(--fk-color-primary);
619
+ --fk-tabs-tab-color-hover: var(--fk-color-text);
620
+ --fk-tabs-tab-color-disabled: var(--fk-color-text-disabled);
621
+ --fk-tabs-border-color: var(--fk-color-border);
622
+ --fk-tabs-indicator-color: var(--fk-color-primary);
623
+ --fk-tabs-pill-active-bg: var(--fk-color-primary);
624
+ --fk-tabs-pill-active-color: #121214;
625
+ --fk-tabs-contained-bg: var(--fk-color-surface-muted);
626
+ --fk-tabs-contained-active-bg: var(--fk-color-surface);
627
+ --fk-tabs-badge-bg: var(--fk-color-surface-muted);
628
+ --fk-tabs-badge-color: var(--fk-color-text-muted);
629
+ --fk-tabs-close-bg-hover: var(--fk-color-surface-muted);
630
+ --fk-tabs-scroll-btn-bg: var(--fk-color-surface);
631
+ --fk-tabs-scroll-btn-color: var(--fk-color-text-muted);
632
+ --fk-tabs-scroll-btn-color-hover: var(--fk-color-text);
633
+
634
+ /* Button: primary */
635
+ --fk-button-primary-bg: var(--fk-color-primary);
636
+ --fk-button-primary-bg-hover: var(--fk-color-primary-hover);
637
+ --fk-button-primary-bg-active: var(--fk-color-primary-active);
638
+ --fk-button-primary-color: #121214;
639
+ --fk-button-primary-border-color: transparent;
640
+
641
+ /* Button: secondary */
642
+ --fk-button-secondary-bg: transparent;
643
+ --fk-button-secondary-bg-hover: var(--fk-color-surface-muted);
644
+ --fk-button-secondary-bg-active: var(--fk-color-border);
645
+ --fk-button-secondary-color: var(--fk-color-primary);
646
+ --fk-button-secondary-border-color: var(--fk-color-border);
647
+
648
+ /* Button: outline */
649
+ --fk-button-outline-bg: transparent;
650
+ --fk-button-outline-bg-hover: var(--fk-color-surface-muted);
651
+ --fk-button-outline-bg-active: var(--fk-color-border);
652
+ --fk-button-outline-color: var(--fk-color-primary);
653
+ --fk-button-outline-border-color: var(--fk-color-border);
654
+
655
+ /* Button: danger */
656
+ --fk-button-danger-bg: #dc2626;
657
+ --fk-button-danger-bg-hover: #ef4444;
658
+ --fk-button-danger-bg-active: #f87171;
659
+ --fk-button-danger-color: #121214;
660
+ --fk-button-danger-border-color: transparent;
661
+
662
+ /* Callout */
663
+ --fk-callout-bg: var(--fk-color-surface-muted);
664
+ --fk-callout-border-color: var(--fk-color-border);
665
+
666
+ /* Alert */
667
+ --fk-alert-info-bg: #0c1929;
668
+ --fk-alert-info-border-color: #1e3a5f;
669
+ --fk-alert-info-color: #93c5fd;
670
+
671
+ --fk-alert-success-bg: #0f291a;
672
+ --fk-alert-success-border-color: #16593a;
673
+ --fk-alert-success-color: #4ade80;
674
+
675
+ --fk-alert-warning-bg: #2a1f0a;
676
+ --fk-alert-warning-border-color: #5c4813;
677
+ --fk-alert-warning-color: #fbbf24;
678
+
679
+ --fk-alert-error-bg: #2a0f0f;
680
+ --fk-alert-error-border-color: #5c1a1a;
681
+ --fk-alert-error-color: #f87171;
682
+
683
+ /* Accordion */
684
+ --fk-accordion-color: var(--fk-color-text);
685
+ --fk-accordion-header-bg-hover: var(--fk-color-surface-muted);
686
+ --fk-accordion-title-color: var(--fk-color-text);
687
+ --fk-accordion-description-color: var(--fk-color-muted);
688
+ --fk-accordion-leading-text-color: var(--fk-color-muted);
689
+ --fk-accordion-chevron-color: var(--fk-color-muted);
690
+ --fk-accordion-panel-color: var(--fk-color-text);
691
+ --fk-accordion-focus-ring: var(--fk-focus-ring);
692
+
693
+ /* Breadcrumb (route-driven) */
694
+ --fk-breadcrumb-link-color: var(--fk-color-muted);
695
+ --fk-breadcrumb-link-color-hover: var(--fk-color-text);
696
+ --fk-breadcrumb-current-color: var(--fk-color-text);
697
+ --fk-breadcrumb-separator-color: var(--fk-color-muted);
698
+
699
+ /* Copyable Field */
700
+ --fk-copyable-field-bg: var(--fk-color-surface-muted);
701
+ --fk-copyable-field-border-color: var(--fk-color-border);
702
+ --fk-copyable-field-value-color: var(--fk-color-text);
703
+ --fk-copyable-field-label-color: var(--fk-color-muted);
704
+ --fk-copyable-field-action-color: var(--fk-color-muted);
705
+ --fk-copyable-field-action-color-hover: var(--fk-color-text);
706
+ --fk-copyable-field-action-bg-hover: var(--fk-color-surface-dim);
707
+
708
+ /* Node Tree Breadcrumb */
709
+ --fk-node-tree-breadcrumb-link-color: var(--fk-color-muted);
710
+ --fk-node-tree-breadcrumb-link-color-hover: var(--fk-color-text);
711
+ --fk-node-tree-breadcrumb-current-color: var(--fk-color-text);
712
+ --fk-node-tree-breadcrumb-separator-color: var(--fk-color-muted);
713
+
714
+ /* List Editor */
715
+ --fk-list-editor-item-bg: var(--fk-color-surface);
716
+ --fk-list-editor-item-border-color: var(--fk-color-border);
717
+ --fk-list-editor-input-color: var(--fk-color-text);
718
+ --fk-list-editor-input-bg: var(--fk-color-surface);
719
+ --fk-list-editor-input-border-color: var(--fk-color-border);
720
+ --fk-list-editor-input-focus-border-color: var(--fk-color-primary);
721
+ --fk-list-editor-order-bg: rgba(59, 158, 255, 0.15);
722
+ --fk-list-editor-order-color: var(--fk-color-primary);
723
+ --fk-list-editor-remove-color: var(--fk-color-muted);
724
+ --fk-list-editor-remove-hover-color: var(--fk-color-danger);
725
+ --fk-list-editor-empty-color: var(--fk-color-muted);
726
+ --fk-list-editor-error-color: var(--fk-color-danger);
727
+ --fk-list-editor-placeholder-bg: var(--fk-color-surface-muted);
728
+ --fk-list-editor-placeholder-border-color: var(--fk-color-border);
729
+ --fk-list-editor-drag-border-color: var(--fk-color-primary);
730
+
731
+ /* ==========================================================================
732
+ 5. ORGANISMS
733
+ ========================================================================== */
734
+
735
+ /* Node Tree */
736
+ --fk-node-tree-row-color: var(--fk-color-text);
737
+ --fk-node-tree-row-bg-hover: var(--fk-color-surface-muted);
738
+ --fk-node-tree-row-bg-selected: rgba(59, 158, 255, 0.15);
739
+ --fk-node-tree-row-color-selected: var(--fk-color-primary);
740
+ --fk-node-tree-row-toggle-color: var(--fk-color-muted);
741
+ --fk-node-tree-row-toggle-color-hover: var(--fk-color-text);
742
+ --fk-node-tree-row-toggle-bg-hover: var(--fk-color-surface-muted);
743
+ --fk-node-tree-row-handle-color: var(--fk-color-muted);
744
+ --fk-node-tree-row-handle-color-hover: var(--fk-color-text);
745
+ --fk-node-tree-row-bg-drop-target: rgba(59, 158, 255, 0.2);
746
+ --fk-node-tree-row-border-drop-target: var(--fk-color-primary);
747
+ --fk-node-tree-drag-preview-bg: var(--fk-color-surface);
748
+ --fk-node-tree-drag-preview-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
749
+ --fk-node-tree-drag-placeholder-bg: var(--fk-color-primary);
750
+
751
+ /* Content Split */
752
+ --fk-content-split-left-bg: var(--fk-color-surface);
753
+ --fk-content-split-left-border: 1px solid var(--fk-color-border);
754
+ --fk-content-split-overlay-bg: rgba(0, 0, 0, 0.7);
755
+ --fk-content-split-rail-toggle-color: var(--fk-color-muted);
756
+ --fk-content-split-rail-toggle-color-hover: var(--fk-color-text);
757
+ --fk-content-split-rail-toggle-bg-hover: var(--fk-color-surface-muted);
758
+
759
+ /* App Shell */
760
+ --fk-app-shell-overlay-bg: rgba(0, 0, 0, 0.7);
761
+ --fk-app-shell-aside-bg: var(--fk-color-surface);
762
+ --fk-app-shell-end-bg: var(--fk-color-surface);
763
+ --fk-app-shell-end-radius: var(--fk-radius-lg) 0 0 var(--fk-radius-lg);
764
+ --fk-app-shell-end-shadow: -4px 0 16px rgba(0, 0, 0, 0.25);
765
+
766
+ /* Data Table */
767
+ --fk-data-table-head-bg: var(--fk-color-surface-muted);
768
+ --fk-data-table-head-color: var(--fk-color-text-muted);
769
+ --fk-data-table-head-hover-color: var(--fk-color-text);
770
+ --fk-data-table-body-bg: var(--fk-color-surface);
771
+ --fk-data-table-body-color: var(--fk-color-text);
772
+ --fk-data-table-border-color: var(--fk-color-border);
773
+ --fk-data-table-row-hover-bg: var(--fk-color-surface-muted);
774
+ --fk-data-table-empty-color: var(--fk-color-text-muted);
775
+ --fk-data-table-loading-bg: rgba(0, 0, 0, 0.5);
776
+ --fk-data-table-loading-color: var(--fk-color-text-muted);
777
+ --fk-data-table-row-selected-bg: var(--fk-color-primary-light);
778
+ --fk-data-table-row-selected-hover-bg: var(--fk-color-primary-light-gradient);
779
+ --fk-data-table-checkbox-border-color: var(--fk-color-border);
780
+ --fk-data-table-checkbox-bg: var(--fk-color-surface);
781
+ --fk-data-table-checkbox-hover-border-color: var(--fk-color-primary);
782
+ --fk-data-table-checkbox-checked-bg: var(--fk-color-primary);
783
+ --fk-data-table-checkbox-checked-border-color: var(--fk-color-primary);
784
+ --fk-data-table-checkbox-icon-color: var(--fk-color-surface);
785
+
786
+ /* Dialog */
787
+ --fk-dialog-overlay-bg: rgba(0, 0, 0, 0.7);
788
+ --fk-dialog-panel-bg: var(--fk-color-surface);
789
+ --fk-dialog-panel-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
790
+ --fk-dialog-footer-border: 1px solid var(--fk-color-border);
791
+ --fk-dialog-close-color: var(--fk-color-muted);
792
+ --fk-dialog-close-color-hover: var(--fk-color-text);
793
+
794
+ /* Wizard Dialog */
795
+ --fk-wizard-dialog-footer-border: 1px solid var(--fk-color-border);
796
+ --fk-wizard-dialog-step-number-active-color: #fff;
797
+
798
+ /* Toast */
799
+ --fk-toast-bg: var(--fk-color-surface);
800
+ --fk-toast-border-color: var(--fk-color-border);
801
+ --fk-toast-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
802
+ --fk-toast-summary-color: var(--fk-color-text);
803
+ --fk-toast-detail-color: var(--fk-color-muted);
804
+ --fk-toast-dismiss-color: var(--fk-color-muted);
805
+ --fk-toast-dismiss-hover-color: var(--fk-color-text);
806
+
807
+ /* Form Field */
808
+ --fk-input-color: var(--fk-color-text);
809
+ --fk-input-placeholder-color: var(--fk-color-muted);
810
+ --fk-input-bg: var(--fk-color-surface);
811
+ --fk-input-border-color: var(--fk-color-border);
812
+ --fk-input-border-color-hover: var(--fk-color-muted);
813
+ --fk-input-border-color-focus: var(--fk-color-primary);
814
+ --fk-input-border-color-error: #f87171;
815
+ --fk-input-focus-ring: var(--fk-focus-ring);
816
+
817
+ --fk-form-label-color: #e2e8f0;
818
+ --fk-form-error-color: #f87171;
819
+ --fk-form-hint-color: var(--fk-color-muted);
820
+
821
+ /* File Dropzone */
822
+ --fk-file-dropzone-bg: var(--fk-color-surface-muted);
823
+ --fk-file-dropzone-bg-dragging: rgba(96, 165, 250, 0.08);
824
+ --fk-file-dropzone-border-color: var(--fk-color-border);
825
+ --fk-file-dropzone-border-color-hover: var(--fk-color-primary);
826
+ --fk-file-dropzone-border-color-dragging: var(--fk-color-primary);
827
+ --fk-file-dropzone-prompt-color: var(--fk-color-text);
828
+ --fk-file-dropzone-icon-color-disabled: var(--fk-color-muted);
829
+
830
+ /* Pagination */
831
+ --fk-pagination-color: var(--fk-color-muted);
832
+ --fk-pagination-border-color: var(--fk-color-border);
833
+ --fk-pagination-label-color: var(--fk-color-muted);
834
+ --fk-pagination-select-color: var(--fk-color-text);
835
+ --fk-pagination-select-bg: var(--fk-color-surface);
836
+ --fk-pagination-select-border-color: var(--fk-color-border);
837
+ --fk-pagination-page-info-color: var(--fk-color-text);
838
+ --fk-pagination-btn-color: var(--fk-color-text);
839
+ --fk-pagination-btn-border-color: var(--fk-color-border);
840
+ --fk-pagination-btn-bg-hover: var(--fk-color-surface-hover);
841
+
842
+ /* Drawer */
843
+ --fk-drawer-bg: var(--fk-color-surface);
844
+ --fk-drawer-border-color: var(--fk-color-border);
845
+ --fk-drawer-header-border-color: var(--fk-color-border);
846
+ --fk-drawer-title-color: var(--fk-color-text-strong);
847
+ --fk-drawer-close-color: var(--fk-color-muted);
848
+ --fk-drawer-close-color-hover: var(--fk-color-text);
849
+ --fk-drawer-close-bg-hover: var(--fk-color-surface-hover);
850
+
851
+ /* Avatar Stack */
852
+ --fk-avatar-stack-ring: 0 0 0 2px var(--fk-color-surface);
853
+ --fk-avatar-stack-overflow-color: var(--fk-color-text);
854
+ --fk-avatar-stack-overflow-bg: var(--fk-color-surface-muted);
855
+ --fk-avatar-stack-overflow-bg-hover: var(--fk-color-surface-hover);
856
+ }