@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.
package/base.css ADDED
@@ -0,0 +1,986 @@
1
+ @charset "UTF-8";
2
+ /* ==========================================================================
3
+ Design Tokens — libs/ui-shared
4
+ Components must ONLY consume --fk-* tokens.
5
+ Themes/adapters override these.
6
+
7
+ Order: ITCSS + Atomic Design
8
+ 1. Primitives (colors, typography, spacing, radius, focus)
9
+ 2. Semantic (color assignments, type scale, rhythm)
10
+ 3. Atoms (text, link, icon, badge, loader, headline, image)
11
+ 4. Molecules (button, icon-badge)
12
+ 5. Organisms (nav-bar, cards, etc.)
13
+ 6. Keyframes / animations
14
+ ========================================================================== */
15
+ :root {
16
+ /* ==========================================================================
17
+ 1. PRIMITIVES — raw values, no component awareness
18
+ ========================================================================== */
19
+ /* ---------- Color palette (neutral default — slate + restrained blue) ---------- */
20
+ --fk-color-primary: #2563eb;
21
+ --fk-color-primary-hover: #1d4ed8;
22
+ --fk-color-primary-active: #1e40af;
23
+ --fk-color-primary-light: #eff6ff;
24
+ --fk-color-primary-light-border: #bfdbfe;
25
+ --fk-color-primary-light-gradient: #dbeafe;
26
+ --fk-color-primary-subtle: #eff6ff;
27
+ --fk-color-accent-gradient: #dbeafe;
28
+ --fk-color-ghost-white: #fdfdfd;
29
+ --fk-color-surface: #ffffff;
30
+ --fk-color-surface-muted: #f8fafc;
31
+ --fk-color-surface-dim: #f1f5f9;
32
+ --fk-color-surface-dimmer: #e2e8f0;
33
+ --fk-color-surface-hover: #f8fafc;
34
+ --fk-color-surface-raised: #ffffff;
35
+ --fk-color-surface-overlay: rgba(15, 23, 42, 0.5);
36
+ --fk-color-text: #1e293b;
37
+ --fk-color-text-strong: #0f172a;
38
+ --fk-color-text-muted: #64748b;
39
+ --fk-color-text-disabled: #94a3b8;
40
+ --fk-color-muted: #64748b;
41
+ --fk-color-muted-bg: #f1f5f9;
42
+ --fk-color-border: #e2e8f0;
43
+ --fk-color-border-light: #f1f5f9;
44
+ --fk-color-success: #16a34a;
45
+ --fk-color-success-subtle: #f0fdf4;
46
+ --fk-color-warning: #d97706;
47
+ --fk-color-warning-subtle: #fffbeb;
48
+ --fk-color-danger: #dc2626;
49
+ --fk-color-danger-light: #fee2e2;
50
+ --fk-color-danger-light-border: #fecaca;
51
+ --fk-color-danger-subtle: #fef2f2;
52
+ --fk-color-danger-surface: #fee2e2;
53
+ --fk-white: #fff;
54
+ /* ---------- Utility ---------- */
55
+ --fk-black-50: rgba(0, 0, 0, 0.5);
56
+ /* ---------- Typography primitives ---------- */
57
+ --fk-font-family-base:
58
+ 'Inter', ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto,
59
+ Helvetica, Arial, 'Apple Color Emoji', 'Segoe UI Emoji';
60
+ --fk-font-family-mono:
61
+ ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono',
62
+ 'Courier New', monospace;
63
+ --fk-font-weight-normal: 400;
64
+ --fk-font-weight-medium: 500;
65
+ --fk-font-weight-semibold: 600;
66
+ --fk-font-weight-bold: 700;
67
+ --fk-font-size-body: 0.875rem;
68
+ --fk-line-height-body: 1.5;
69
+ /* font-size scale (consumed by components) */
70
+ --fk-font-size-xs: 0.75rem;
71
+ --fk-font-size-sm: 0.875rem;
72
+ --fk-font-size-md: 1rem;
73
+ --fk-font-size-lg: 1.125rem;
74
+ --fk-font-size-xl: 1.25rem;
75
+ /* ---------- Spacing scale ---------- */
76
+ --fk-space-2: 8px;
77
+ --fk-space-3: 12px;
78
+ /* ---------- Radius scale ---------- */
79
+ --fk-radius-none: 0;
80
+ --fk-radius-sm: 0.25rem;
81
+ --fk-radius-md: 0.375rem;
82
+ --fk-radius-lg: 0.75rem;
83
+ --fk-radius-full: 9999px;
84
+ /* ---------- Overlays ---------- */
85
+ --fk-overlay-brand: rgba(37, 99, 235, 0.18);
86
+ /* ---------- Shadows ---------- */
87
+ /* ---------- Focus ---------- */
88
+ --fk-focus-ring: 0 0 0 3px rgba(37, 99, 235, 0.18);
89
+ /* ==========================================================================
90
+ 2. SEMANTIC — meaningful assignments using primitives
91
+ ========================================================================== */
92
+ /* ---------- Typography scale ---------- */
93
+ /* Subtitle — alias for lead, used by landing page */
94
+ --fk-typography-subtitle-font-size: var(--fk-typography-lead-font-size);
95
+ /* Headline scale (mobile-first — tablet/desktop overrides below) */
96
+ --fk-typography-heading-font-size: 1.5rem;
97
+ --fk-typography-h1-font-size: 2.25rem;
98
+ --fk-typography-h1-line-height: 1.05;
99
+ --fk-typography-h1-font-weight: var(--fk-font-weight-bold);
100
+ --fk-typography-h1-letter-spacing: -0.02em;
101
+ --fk-typography-h2-font-size: 1.75rem;
102
+ --fk-typography-h2-line-height: 1.1;
103
+ --fk-typography-h2-font-weight: var(--fk-font-weight-bold);
104
+ --fk-typography-h2-letter-spacing: -0.01em;
105
+ --fk-typography-h3-font-size: 1.375rem;
106
+ --fk-typography-h3-line-height: 1.2;
107
+ --fk-typography-h3-font-weight: var(--fk-font-weight-semibold);
108
+ --fk-typography-h3-letter-spacing: 0em;
109
+ --fk-typography-h4-font-size: 1.125rem;
110
+ --fk-typography-h4-line-height: 1.25;
111
+ --fk-typography-h4-font-weight: var(--fk-font-weight-semibold);
112
+ --fk-typography-h4-letter-spacing: 0em;
113
+ --fk-typography-h5-font-size: 0.9375rem;
114
+ --fk-typography-h5-line-height: 1.3;
115
+ --fk-typography-h5-font-weight: var(--fk-font-weight-semibold);
116
+ --fk-typography-h5-letter-spacing: 0.01em;
117
+ --fk-typography-h6-font-size: 0.8125rem;
118
+ --fk-typography-h6-line-height: 1.4;
119
+ --fk-typography-h6-font-weight: var(--fk-font-weight-semibold);
120
+ --fk-typography-h6-letter-spacing: 0.02em;
121
+ /* Body / text scale */
122
+ --fk-typography-body-font-size: 0.9375rem;
123
+ --fk-typography-body-font-weight: var(--fk-font-weight-normal);
124
+ --fk-typography-body-line-height: 1.5;
125
+ --fk-typography-body-letter-spacing: 0.01em;
126
+ --fk-typography-lead-font-size: 1rem;
127
+ --fk-typography-lead-font-weight: var(--fk-font-weight-normal);
128
+ --fk-typography-lead-line-height: 1.4;
129
+ --fk-typography-lead-letter-spacing: 0em;
130
+ --fk-typography-small-font-size: 0.8125rem;
131
+ --fk-typography-small-font-weight: var(--fk-font-weight-normal);
132
+ --fk-typography-small-line-height: 1.4;
133
+ --fk-typography-small-letter-spacing: 0.01em;
134
+ --fk-typography-caption-font-size: 0.6875rem;
135
+ --fk-typography-caption-font-weight: var(--fk-font-weight-medium);
136
+ --fk-typography-caption-line-height: 1.3;
137
+ --fk-typography-caption-letter-spacing: 0.02em;
138
+ --fk-typography-label-font-size: 0.8125rem;
139
+ --fk-typography-label-font-weight: var(--fk-font-weight-semibold);
140
+ --fk-typography-label-line-height: 1.25;
141
+ --fk-typography-label-letter-spacing: 0.01em;
142
+ --fk-typography-code-font-family:
143
+ ui-monospace, 'SFMono-Regular', 'SF Mono', Menlo, Consolas,
144
+ 'Liberation Mono', monospace;
145
+ --fk-typography-code-font-size: 0.8125rem;
146
+ --fk-typography-code-font-weight: var(--fk-font-weight-normal);
147
+ --fk-typography-code-line-height: 1.45;
148
+ --fk-typography-code-letter-spacing: 0em;
149
+ --fk-typography-large-font-size: 1.125rem;
150
+ --fk-typography-button-font-size: 1rem;
151
+ --fk-typography-button-font-weight: var(--fk-font-weight-normal);
152
+ --fk-typography-button-line-height: 1.5;
153
+ --fk-typography-gutter-bottom: 1rem;
154
+ /* Vertical rhythm */
155
+ --fk-rhythm-1: 0.25rem;
156
+ --fk-rhythm-2: 0.5rem;
157
+ --fk-rhythm-3: 0.75rem;
158
+ --fk-rhythm-4: 1rem;
159
+ --fk-rhythm-5: 1.25rem;
160
+ --fk-rhythm-6: 1.5rem;
161
+ --fk-rhythm-7: 1.75rem;
162
+ --fk-rhythm-8: 2rem;
163
+ --fk-rhythm-10: 2.5rem;
164
+ --fk-rhythm-12: 3rem;
165
+ --fk-rhythm-14: 3.5rem;
166
+ --fk-rhythm-16: 4rem;
167
+ /* ==========================================================================
168
+ 3. ATOMS — smallest standalone components
169
+ ========================================================================== */
170
+ /* ---------- Text ---------- */
171
+ --fk-text-color-default: var(--fk-color-text);
172
+ --fk-text-color-muted: var(--fk-color-muted);
173
+ --fk-text-color-subtle: #9ca3af;
174
+ --fk-text-color-danger: var(--fk-color-danger);
175
+ --fk-text-color-success: var(--fk-color-success);
176
+ --fk-text-margin-block-start: var(--fk-rhythm-4);
177
+ --fk-text-margin-block-end: 0;
178
+ /* ---------- Link ---------- */
179
+ --fk-link-color-default: var(--fk-color-text);
180
+ --fk-link-color-default-hover: var(--fk-color-primary);
181
+ --fk-link-color-muted: var(--fk-color-muted);
182
+ --fk-link-color-muted-hover: var(--fk-color-text);
183
+ --fk-link-color-primary: var(--fk-color-primary);
184
+ --fk-link-color-primary-hover: var(--fk-color-primary-hover);
185
+ --fk-link-color-primary-active: var(--fk-color-primary-active);
186
+ --fk-link-color-danger: var(--fk-color-danger);
187
+ --fk-link-color-danger-hover: #b91c1c;
188
+ --fk-link-color-disabled: #9ca3af;
189
+ /* Link sizes */
190
+ --fk-link-font-size-small: var(--fk-typography-small-font-size);
191
+ --fk-link-font-size-medium: var(--fk-typography-body-font-size);
192
+ --fk-link-font-size-large: var(--fk-typography-large-font-size);
193
+ --fk-link-line-height-small: 1.5;
194
+ --fk-link-line-height-medium: 1.5;
195
+ --fk-link-line-height-large: 1.5;
196
+ --fk-link-opacity-disabled: 0.6;
197
+ --fk-link-opacity-loading: 0.7;
198
+ --fk-link-focus-radius: 2px;
199
+ /* ---------- Icon ---------- */
200
+ --fk-icon-size-xs: 0.75rem;
201
+ --fk-icon-size-sm: 1rem;
202
+ --fk-icon-size-md: 1.25rem;
203
+ --fk-icon-size-lg: 1.5rem;
204
+ --fk-icon-size-xl: 2rem;
205
+ --fk-icon-color-default: var(--fk-color-text);
206
+ --fk-icon-color-muted: var(--fk-color-muted);
207
+ --fk-icon-color-primary: var(--fk-color-primary);
208
+ --fk-icon-color-danger: var(--fk-color-danger);
209
+ --fk-icon-color-success: var(--fk-color-success);
210
+ /* ---------- Card ---------- */
211
+ --fk-card-bg: var(--fk-color-surface);
212
+ --fk-card-border-color: var(--fk-color-border);
213
+ --fk-card-border-radius: var(--fk-radius-lg);
214
+ --fk-card-padding-sm: var(--fk-rhythm-4);
215
+ --fk-card-padding-md: var(--fk-rhythm-6);
216
+ --fk-card-padding-lg: var(--fk-rhythm-8);
217
+ /* ---------- Badge ---------- */
218
+ --fk-badge-height: 1.5rem;
219
+ --fk-badge-border-radius: 999px;
220
+ --fk-badge-padding-inline: 0.5rem;
221
+ --fk-badge-font-size: 0.75rem;
222
+ --fk-badge-font-weight: var(--fk-font-weight-medium);
223
+ --fk-badge-default-bg: #f3f4f6;
224
+ --fk-badge-default-color: #374151;
225
+ --fk-badge-primary-bg: var(--fk-color-primary-light, #dbeafe);
226
+ --fk-badge-primary-color: var(--fk-color-primary-active, #1e40af);
227
+ --fk-badge-success-bg: #dcfce7;
228
+ --fk-badge-success-color: #15803d;
229
+ --fk-badge-warning-bg: #fef3c7;
230
+ --fk-badge-warning-color: #92400e;
231
+ --fk-badge-danger-bg: #fee2e2;
232
+ --fk-badge-danger-color: #991b1b;
233
+ /* ---------- Toast ---------- */
234
+ --fk-toast-bg: var(--fk-color-surface);
235
+ --fk-toast-border-color: var(--fk-color-border);
236
+ --fk-toast-border-radius: var(--fk-radius-lg);
237
+ --fk-toast-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
238
+ --fk-toast-padding: var(--fk-rhythm-4);
239
+ --fk-toast-gap: var(--fk-rhythm-3);
240
+ --fk-toast-icon-size: 1.25rem;
241
+ --fk-toast-summary-font-size: var(--fk-typography-body-font-size);
242
+ --fk-toast-summary-font-weight: var(--fk-font-weight-semibold);
243
+ --fk-toast-summary-color: var(--fk-color-text);
244
+ --fk-toast-detail-font-size: var(--fk-typography-small-font-size);
245
+ --fk-toast-detail-color: var(--fk-color-muted);
246
+ --fk-toast-success-accent: var(--fk-color-success);
247
+ --fk-toast-success-color: var(--fk-color-success);
248
+ --fk-toast-error-accent: var(--fk-color-danger);
249
+ --fk-toast-error-color: var(--fk-color-danger);
250
+ --fk-toast-warning-accent: var(--fk-color-warning);
251
+ --fk-toast-warning-color: var(--fk-color-warning);
252
+ --fk-toast-info-accent: var(--fk-color-primary);
253
+ --fk-toast-info-color: var(--fk-color-primary);
254
+ --fk-toast-dismiss-color: var(--fk-color-muted);
255
+ --fk-toast-dismiss-hover-color: var(--fk-color-text);
256
+ --fk-toast-container-z-index: 9500;
257
+ --fk-toast-container-gap: var(--fk-rhythm-3);
258
+ --fk-toast-container-padding: var(--fk-rhythm-4);
259
+ --fk-toast-container-max-width: 24rem;
260
+ /* ---------- Loader ---------- */
261
+ --fk-loader-size-xs: 0.75rem;
262
+ --fk-loader-size-sm: 1rem;
263
+ --fk-loader-size-md: 1.25rem;
264
+ --fk-loader-size-lg: 1.5rem;
265
+ --fk-loader-size-xl: 2rem;
266
+ --fk-loader-animation-duration: 0.8s;
267
+ /* ---------- Headline ---------- */
268
+ --fk-headline-color-default: var(--fk-color-text);
269
+ --fk-headline-color-muted: var(--fk-color-muted);
270
+ --fk-headline-margin-block-start: var(--fk-rhythm-4);
271
+ --fk-headline-margin-block-end: 0;
272
+ /* ---------- Progress Bar ---------- */
273
+ --fk-progress-bar-height-sm: var(--fk-rhythm-1);
274
+ --fk-progress-bar-height-md: var(--fk-rhythm-2);
275
+ --fk-progress-bar-height-lg: var(--fk-rhythm-3);
276
+ --fk-progress-bar-radius: var(--fk-radius-full);
277
+ --fk-progress-bar-bg: var(--fk-color-surface-muted);
278
+ --fk-progress-bar-fill: var(--fk-color-primary);
279
+ --fk-progress-bar-fill-success: var(--fk-color-success);
280
+ --fk-progress-bar-fill-warning: var(--fk-color-warning);
281
+ --fk-progress-bar-fill-danger: var(--fk-color-danger);
282
+ --fk-progress-bar-label-color: var(--fk-color-text);
283
+ /* ---------- Segmented Bar ---------- */
284
+ --fk-segmented-bar-height-sm: var(--fk-rhythm-1);
285
+ --fk-segmented-bar-height-md: var(--fk-rhythm-2);
286
+ --fk-segmented-bar-height-lg: var(--fk-rhythm-3);
287
+ --fk-segmented-bar-radius: var(--fk-radius-full);
288
+ --fk-segmented-bar-bg: var(--fk-color-surface-muted);
289
+ /* ---------- Timeline ---------- */
290
+ --fk-timeline-marker-size-sm: 1rem;
291
+ --fk-timeline-marker-size-md: 1.5rem;
292
+ --fk-timeline-marker-size-lg: 2rem;
293
+ --fk-timeline-marker-bg: var(--fk-color-surface);
294
+ --fk-timeline-marker-border-color: var(--fk-color-border);
295
+ --fk-timeline-marker-active: var(--fk-color-primary);
296
+ --fk-timeline-marker-completed: var(--fk-color-success);
297
+ --fk-timeline-marker-error: var(--fk-color-danger);
298
+ --fk-timeline-marker-warning: var(--fk-color-warning);
299
+ --fk-timeline-connector-color: var(--fk-color-border);
300
+ --fk-timeline-title-color: var(--fk-color-text);
301
+ --fk-timeline-description-color: var(--fk-color-muted);
302
+ /* ---------- Separator ---------- */
303
+ --fk-separator-color: var(--fk-color-border);
304
+ --fk-separator-margin-top: var(--fk-rhythm-6);
305
+ --fk-separator-margin-bottom: 0;
306
+ --fk-separator-border-width: 1px;
307
+ /* ---------- Tooltip ---------- */
308
+ --fk-tooltip-bg: var(--fk-color-surface);
309
+ --fk-tooltip-color: var(--fk-color-text);
310
+ --fk-tooltip-font-family: var(--fk-font-family-base);
311
+ --fk-tooltip-font-size: var(--fk-typography-caption-font-size);
312
+ --fk-tooltip-font-weight: var(--fk-font-weight-medium);
313
+ --fk-tooltip-line-height: var(--fk-typography-caption-line-height);
314
+ --fk-tooltip-padding: var(--fk-rhythm-1) var(--fk-rhythm-2);
315
+ --fk-tooltip-border-radius: var(--fk-radius-sm);
316
+ --fk-tooltip-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
317
+ --fk-tooltip-arrow-size: 6px;
318
+ --fk-tooltip-max-width: 20rem;
319
+ --fk-tooltip-enter-duration: 0.15s;
320
+ --fk-tooltip-exit-duration: 0.1s;
321
+ --fk-tooltip-easing: ease-out;
322
+ /* ---------- Nav Separator ---------- */
323
+ --fk-nav-separator-color: var(--fk-color-border);
324
+ /* ---------- Image ---------- */
325
+ --fk-image-object-fit: cover;
326
+ --fk-image-object-position: center;
327
+ /* ==========================================================================
328
+ 4. MOLECULES — composed from atoms
329
+ ========================================================================== */
330
+ /* ---------- Button ---------- */
331
+ --fk-button-font-weight: var(--fk-typography-button-font-weight);
332
+ --fk-button-line-height: var(--fk-typography-button-line-height);
333
+ --fk-button-border-radius: 0.5rem;
334
+ --fk-button-border-width: 1px;
335
+ --fk-button-cursor: pointer;
336
+ --fk-button-cursor-disabled: not-allowed;
337
+ --fk-button-opacity-disabled: 0.6;
338
+ --fk-button-transition:
339
+ background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
340
+ /* Button icon */
341
+ --fk-button-icon-gap: 0.5rem;
342
+ /* Button sizes */
343
+ --fk-button-padding-sm: 0.375rem 0.75rem;
344
+ --fk-button-padding-md: 0.5rem 1rem;
345
+ --fk-button-padding-lg: 0.625rem 1.25rem;
346
+ --fk-button-font-size-sm: 0.875rem;
347
+ --fk-button-font-size-md: 1rem;
348
+ --fk-button-font-size-lg: 1.125rem;
349
+ /* Button variant: primary */
350
+ --fk-button-primary-bg: var(--fk-color-primary);
351
+ --fk-button-primary-bg-hover: var(--fk-color-primary-hover);
352
+ --fk-button-primary-bg-active: var(--fk-color-primary-active);
353
+ --fk-button-primary-color: var(--fk-color-surface);
354
+ --fk-button-primary-border-color: transparent;
355
+ /* Button variant: secondary */
356
+ --fk-button-secondary-bg: transparent;
357
+ --fk-button-secondary-bg-hover: var(--fk-color-surface-muted);
358
+ --fk-button-secondary-bg-active: var(--fk-color-border);
359
+ --fk-button-secondary-color: var(--fk-color-primary);
360
+ --fk-button-secondary-border-color: var(--fk-color-border);
361
+ /* Button variant: outline (matches secondary per spec) */
362
+ --fk-button-outline-bg: transparent;
363
+ --fk-button-outline-bg-hover: var(--fk-color-surface-muted);
364
+ --fk-button-outline-bg-active: var(--fk-color-border);
365
+ --fk-button-outline-color: var(--fk-color-primary);
366
+ --fk-button-outline-border-color: var(--fk-color-border);
367
+ /* Button variant: danger */
368
+ --fk-button-danger-bg: var(--fk-color-danger);
369
+ --fk-button-danger-bg-hover: #b91c1c;
370
+ --fk-button-danger-bg-active: #991b1b;
371
+ --fk-button-danger-color: var(--fk-color-surface);
372
+ --fk-button-danger-border-color: transparent;
373
+ /* ---------- Callout ---------- */
374
+ --fk-callout-bg: var(--fk-color-surface-muted);
375
+ --fk-callout-border-color: var(--fk-color-border);
376
+ --fk-callout-padding: var(--fk-rhythm-4);
377
+ --fk-callout-border-radius: var(--fk-radius-md);
378
+ --fk-callout-font-size: var(--fk-typography-small-font-size);
379
+ --fk-callout-title-font-size: inherit;
380
+ --fk-callout-title-gap: var(--fk-rhythm-2);
381
+ /* ---------- Note ---------- */
382
+ --fk-note-border-width: 3px;
383
+ --fk-note-padding-block: var(--fk-rhythm-2);
384
+ --fk-note-padding-inline-start: var(--fk-rhythm-4);
385
+ --fk-note-color: var(--fk-color-muted);
386
+ --fk-note-font-size: 0.9375rem;
387
+ --fk-note-line-height: var(--fk-typography-body-line-height);
388
+ --fk-note-info-accent: var(--fk-color-primary);
389
+ --fk-note-success-accent: var(--fk-color-success);
390
+ --fk-note-warning-accent: var(--fk-color-warning);
391
+ --fk-note-danger-accent: var(--fk-color-danger);
392
+ /* ---------- Icon List ---------- */
393
+ --fk-icon-list-row-gap: var(--fk-rhythm-3);
394
+ /* ---------- Icon List Item ---------- */
395
+ --fk-icon-list-item-gap: var(--fk-rhythm-2);
396
+ --fk-icon-list-item-label-color: var(--fk-color-text);
397
+ --fk-icon-list-item-line-height: var(--fk-typography-body-line-height);
398
+ --fk-icon-list-item-sm-font-size: var(--fk-typography-small-font-size);
399
+ --fk-icon-list-item-md-font-size: 0.875rem;
400
+ --fk-icon-list-item-lg-font-size: var(--fk-typography-lead-font-size);
401
+ --fk-icon-list-item-default-color: var(--fk-color-muted);
402
+ --fk-icon-list-item-primary-color: var(--fk-color-primary);
403
+ --fk-icon-list-item-success-color: var(--fk-color-success);
404
+ --fk-icon-list-item-warning-color: var(--fk-color-warning);
405
+ --fk-icon-list-item-danger-color: var(--fk-color-danger);
406
+ /* ---------- Numbered List ---------- */
407
+ --fk-numbered-list-margin-top: var(--fk-rhythm-4);
408
+ --fk-numbered-list-row-gap: var(--fk-rhythm-3);
409
+ /* ---------- Numbered List Item ---------- */
410
+ --fk-numbered-list-item-gap: var(--fk-rhythm-3);
411
+ --fk-numbered-list-item-color: var(--fk-color-text);
412
+ --fk-numbered-list-item-line-height: var(--fk-typography-body-line-height);
413
+ --fk-numbered-list-item-sm-font-size: var(--fk-typography-small-font-size);
414
+ --fk-numbered-list-item-md-font-size: 0.875rem;
415
+ --fk-numbered-list-item-lg-font-size: var(--fk-typography-lead-font-size);
416
+ --fk-numbered-list-badge-size: 1.5rem;
417
+ --fk-numbered-list-badge-radius: 50%;
418
+ --fk-numbered-list-badge-bg: var(--fk-color-primary-light);
419
+ --fk-numbered-list-badge-color: var(--fk-color-primary);
420
+ --fk-numbered-list-badge-font-size: 0.75rem;
421
+ --fk-numbered-list-badge-font-weight: var(--fk-font-weight-semibold);
422
+ /* ---------- Themed Card ---------- */
423
+ --lib-themed-card-radius: var(--fk-radius-lg);
424
+ --lib-themed-card-padding: var(--fk-rhythm-5);
425
+ --lib-themed-card-header-gap: var(--fk-rhythm-3);
426
+ --lib-themed-card-body-gap: var(--fk-rhythm-3);
427
+ /* ---------- Numbered Title ---------- */
428
+ --lib-numbered-title-gap: var(--fk-rhythm-3);
429
+ --lib-numbered-title-sm-circle-size: 1.5rem;
430
+ --lib-numbered-title-md-circle-size: 2rem;
431
+ --lib-numbered-title-lg-circle-size: 2.5rem;
432
+ --lib-numbered-title-sm-font-size: var(--fk-typography-caption-font-size);
433
+ --lib-numbered-title-md-font-size: var(--fk-typography-small-font-size);
434
+ --lib-numbered-title-lg-font-size: var(--fk-typography-body-font-size);
435
+ --lib-numbered-title-default-bg: var(--fk-color-surface-muted);
436
+ --lib-numbered-title-default-color: var(--fk-color-text);
437
+ --lib-numbered-title-primary-bg: var(--fk-color-primary);
438
+ --lib-numbered-title-primary-color: var(--fk-color-surface);
439
+ --lib-numbered-title-success-bg: var(--fk-color-success);
440
+ --lib-numbered-title-success-color: var(--fk-color-surface);
441
+ --lib-numbered-title-warning-bg: var(--fk-color-warning);
442
+ --lib-numbered-title-warning-color: var(--fk-color-surface);
443
+ --lib-numbered-title-danger-bg: var(--fk-color-danger);
444
+ --lib-numbered-title-danger-color: var(--fk-color-surface);
445
+ /* ---------- Copyable Field ---------- */
446
+ --fk-copyable-field-gap: var(--fk-rhythm-2);
447
+ --fk-copyable-field-bg: var(--fk-color-surface-muted);
448
+ --fk-copyable-field-border-color: var(--fk-color-border);
449
+ --fk-copyable-field-radius: var(--fk-radius-md);
450
+ --fk-copyable-field-value-color: var(--fk-color-text);
451
+ --fk-copyable-field-label-color: var(--fk-color-muted);
452
+ --fk-copyable-field-label-font-size: var(--fk-typography-small-font-size);
453
+ --fk-copyable-field-label-font-weight: var(--fk-font-weight-medium);
454
+ --fk-copyable-field-label-gap: var(--fk-rhythm-1);
455
+ --fk-copyable-field-action-color: var(--fk-color-muted);
456
+ --fk-copyable-field-action-color-hover: var(--fk-color-text);
457
+ --fk-copyable-field-action-bg-hover: var(--fk-color-surface-dim);
458
+ --fk-copyable-field-action-padding: var(--fk-rhythm-1);
459
+ --fk-copyable-field-action-radius: var(--fk-radius-sm);
460
+ --fk-copyable-field-padding-sm: var(--fk-rhythm-1) var(--fk-rhythm-2);
461
+ --fk-copyable-field-padding-md: var(--fk-rhythm-2) var(--fk-rhythm-3);
462
+ --fk-copyable-field-padding-lg: var(--fk-rhythm-3) var(--fk-rhythm-4);
463
+ --fk-copyable-field-font-size-sm: var(--fk-typography-caption-font-size);
464
+ --fk-copyable-field-font-size-md: var(--fk-typography-small-font-size);
465
+ --fk-copyable-field-font-size-lg: var(--fk-typography-body-font-size);
466
+ --fk-copyable-field-mono-font-family: var(--fk-font-family-mono);
467
+ /* ---------- Alert ---------- */
468
+ --fk-alert-padding: var(--fk-rhythm-4);
469
+ --fk-alert-border-radius: var(--fk-radius-md);
470
+ --fk-alert-font-size: var(--fk-typography-small-font-size);
471
+ --fk-alert-icon-gap: 0.5rem;
472
+ --fk-alert-info-bg: #e8f4fd;
473
+ --fk-alert-info-border-color: #b6e0fe;
474
+ --fk-alert-info-color: #084298;
475
+ --fk-alert-success-bg: #e6f4ea;
476
+ --fk-alert-success-border-color: #a3d9a5;
477
+ --fk-alert-success-color: #1e7e34;
478
+ --fk-alert-warning-bg: #fff4e5;
479
+ --fk-alert-warning-border-color: #ffd8a8;
480
+ --fk-alert-warning-color: #8a5700;
481
+ --fk-alert-error-bg: #fdecea;
482
+ --fk-alert-error-border-color: #f5c2c7;
483
+ --fk-alert-error-color: #842029;
484
+ /* ---------- Accordion ---------- */
485
+ --fk-accordion-color: var(--fk-color-text);
486
+ --fk-accordion-border-color: var(--fk-color-border);
487
+ --fk-accordion-border-width: 1px;
488
+ --fk-accordion-radius: var(--fk-radius-md);
489
+ --fk-accordion-header-bg: transparent;
490
+ --fk-accordion-header-bg-hover: var(--fk-color-surface-muted);
491
+ --fk-accordion-header-bg-expanded: var(--fk-color-surface-muted);
492
+ --fk-accordion-header-padding-block: var(--fk-rhythm-3);
493
+ --fk-accordion-header-padding-inline: var(--fk-rhythm-4);
494
+ --fk-accordion-leading-icon-gap: var(--fk-rhythm-3);
495
+ --fk-accordion-trailing-gap: var(--fk-rhythm-3);
496
+ --fk-accordion-title-color: var(--fk-color-text);
497
+ --fk-accordion-title-font-size: var(--fk-typography-body-font-size);
498
+ --fk-accordion-title-font-weight: var(--fk-font-weight-semibold);
499
+ --fk-accordion-description-color: var(--fk-color-muted);
500
+ --fk-accordion-description-font-size: var(--fk-typography-small-font-size);
501
+ --fk-accordion-description-gap: var(--fk-rhythm-1);
502
+ --fk-accordion-leading-text-color: var(--fk-color-muted);
503
+ --fk-accordion-leading-text-font-size: var(--fk-typography-small-font-size);
504
+ --fk-accordion-leading-text-font-weight: var(--fk-font-weight-semibold);
505
+ --fk-accordion-leading-text-gap: var(--fk-rhythm-2);
506
+ --fk-accordion-chevron-color: var(--fk-color-muted);
507
+ --fk-accordion-panel-color: var(--fk-color-text);
508
+ --fk-accordion-panel-gap: var(--fk-rhythm-2);
509
+ --fk-accordion-panel-padding-block: var(--fk-rhythm-3);
510
+ --fk-accordion-panel-padding-inline: var(--fk-rhythm-4);
511
+ --fk-accordion-focus-ring: var(--fk-focus-ring);
512
+ --fk-accordion-sm-header-padding-block: var(--fk-rhythm-2);
513
+ --fk-accordion-sm-header-padding-inline: var(--fk-rhythm-3);
514
+ --fk-accordion-sm-title-font-size: var(--fk-typography-small-font-size);
515
+ --fk-accordion-sm-description-font-size: 0.75rem;
516
+ --fk-accordion-group-gap: var(--fk-rhythm-3);
517
+ /* ---------- Icon Badge ---------- */
518
+ --fk-icon-badge-padding-xs: 0.25rem;
519
+ --fk-icon-badge-padding-sm: 0.375rem;
520
+ --fk-icon-badge-padding-md: 0.5rem;
521
+ --fk-icon-badge-padding-lg: 0.625rem;
522
+ --fk-icon-badge-padding-xl: 0.75rem;
523
+ --fk-icon-badge-border-width: 1px;
524
+ --fk-icon-badge-border-radius: 0.375rem;
525
+ /* ---------- Nav Brand ---------- */
526
+ --fk-nav-brand-gap: 0.5rem;
527
+ --fk-nav-brand-color: inherit;
528
+ --fk-nav-brand-color-hover: inherit;
529
+ --fk-nav-brand-font-size: 1.125rem;
530
+ --fk-nav-brand-font-weight: var(--fk-font-weight-semibold);
531
+ --fk-nav-brand-line-height: 1;
532
+ /* ---------- Avatar ---------- */
533
+ --fk-avatar-radius: var(--fk-radius-full);
534
+ --fk-avatar-bg: var(--fk-color-primary);
535
+ --fk-avatar-color: var(--fk-color-surface);
536
+ --fk-avatar-font-family: var(--fk-font-family-base);
537
+ --fk-avatar-font-weight: var(--fk-font-weight-semibold);
538
+ --fk-avatar-size-sm: 1.75rem;
539
+ --fk-avatar-size-md: 2.25rem;
540
+ --fk-avatar-size-lg: 3rem;
541
+ --fk-avatar-font-size-sm: 0.6875rem;
542
+ --fk-avatar-font-size-md: 0.8125rem;
543
+ --fk-avatar-font-size-lg: 1rem;
544
+ --fk-avatar-status-border: var(--fk-color-surface);
545
+ --fk-avatar-status-online: var(--fk-color-success);
546
+ --fk-avatar-status-offline: var(--fk-color-muted);
547
+ --fk-avatar-status-away: var(--fk-color-warning);
548
+ --fk-avatar-status-busy: var(--fk-color-danger);
549
+ /* ---------- Menu Item ---------- */
550
+ --fk-menu-item-gap: var(--fk-rhythm-2);
551
+ --fk-menu-item-padding: var(--fk-rhythm-2) var(--fk-rhythm-3);
552
+ --fk-menu-item-radius: var(--fk-radius-md);
553
+ --fk-menu-item-font-size: 0.875rem;
554
+ --fk-menu-item-color: var(--fk-color-text);
555
+ --fk-menu-item-bg-hover: var(--fk-color-surface-muted);
556
+ --fk-menu-item-danger-color: var(--fk-color-danger);
557
+ --fk-menu-item-danger-bg-hover: #fef2f2;
558
+ --fk-menu-item-focus-ring: var(--fk-focus-ring);
559
+ --fk-menu-item-opacity-disabled: 0.5;
560
+ --fk-menu-separator-color: var(--fk-color-border);
561
+ /* ---------- Dropdown Menu ---------- */
562
+ --fk-dropdown-menu-panel-z: 100;
563
+ --fk-dropdown-menu-panel-min-width: 12rem;
564
+ --fk-dropdown-menu-panel-padding: var(--fk-rhythm-1);
565
+ --fk-dropdown-menu-panel-radius: var(--fk-radius-lg);
566
+ --fk-dropdown-menu-panel-bg: var(--fk-color-surface);
567
+ --fk-dropdown-menu-panel-border: var(--fk-color-border);
568
+ --fk-dropdown-menu-panel-shadow:
569
+ 0 4px 16px rgba(0, 0, 0, 0.08), 0 1px 4px rgba(0, 0, 0, 0.04);
570
+ /* ---------- Editable Field ---------- */
571
+ --fk-editable-field-bg: var(--fk-color-surface);
572
+ --fk-editable-field-border-color: var(--fk-color-border);
573
+ --fk-editable-field-border-radius: var(--fk-radius-md);
574
+ --fk-editable-field-hover-border: var(--fk-color-primary);
575
+ --fk-editable-field-focus-border: var(--fk-color-primary);
576
+ --fk-editable-field-color: var(--fk-color-text);
577
+ --fk-editable-field-empty-color: var(--fk-color-muted);
578
+ --fk-editable-field-font-size: var(--fk-typography-body-font-size);
579
+ --fk-editable-field-sm-font-size: var(--fk-typography-small-font-size);
580
+ --fk-editable-field-lg-font-size: var(--fk-typography-heading-font-size);
581
+ --fk-editable-field-lg-font-weight: var(--fk-font-weight-semibold);
582
+ --fk-editable-field-input-padding: var(--fk-rhythm-1) var(--fk-rhythm-2);
583
+ --fk-editable-field-trailing-padding: var(--fk-rhythm-1);
584
+ --fk-editable-field-gap: var(--fk-rhythm-2);
585
+ --fk-editable-field-trigger-color: var(--fk-color-muted);
586
+ --fk-editable-field-trigger-hover-color: var(--fk-color-primary);
587
+ --fk-editable-field-inline-btn-size: 1.5rem;
588
+ --fk-editable-field-save-bg: var(--fk-color-primary);
589
+ --fk-editable-field-save-color: #ffffff;
590
+ --fk-editable-field-action-font-size: var(--fk-typography-small-font-size);
591
+ --fk-editable-field-disabled-opacity: 0.6;
592
+ /* ---------- User Menu ---------- */
593
+ --fk-user-menu-trigger-bg: transparent;
594
+ --fk-user-menu-trigger-bg-hover: transparent;
595
+ --fk-user-menu-trigger-radius: var(--fk-radius-md);
596
+ --fk-user-menu-name-color: var(--fk-color-text);
597
+ --fk-user-menu-name-font-weight: var(--fk-font-weight-semibold);
598
+ --fk-user-menu-email-color: var(--fk-color-muted);
599
+ --fk-user-menu-chevron-color: var(--fk-color-muted);
600
+ --fk-user-menu-badge-bg: var(--fk-color-primary);
601
+ --fk-user-menu-badge-color: var(--fk-color-surface);
602
+ --fk-user-menu-panel-bg: var(--fk-color-surface);
603
+ --fk-user-menu-panel-border: var(--fk-color-border);
604
+ --fk-user-menu-panel-radius: var(--fk-radius-lg);
605
+ --fk-user-menu-panel-shadow:
606
+ 0 4px 16px rgba(0, 0, 0, 0.08), 0 1px 4px rgba(0, 0, 0, 0.04);
607
+ --fk-user-menu-item-color: var(--fk-color-text);
608
+ --fk-user-menu-item-bg-hover: var(--fk-color-surface-muted);
609
+ --fk-user-menu-item-radius: var(--fk-radius-md);
610
+ --fk-user-menu-item-danger-color: var(--fk-color-danger);
611
+ --fk-user-menu-separator-color: var(--fk-color-border);
612
+ --fk-user-menu-focus-ring: var(--fk-focus-ring);
613
+ /* ---------- Sidenav Link ---------- */
614
+ --fk-sidenav-link-gap: var(--fk-rhythm-2);
615
+ --fk-sidenav-link-padding-block: var(--fk-rhythm-2);
616
+ --fk-sidenav-link-padding-inline: var(--fk-rhythm-3);
617
+ --fk-sidenav-link-radius: var(--fk-radius-md);
618
+ --fk-sidenav-link-bg: transparent;
619
+ --fk-sidenav-link-bg-hover: var(--fk-color-surface-dimmer);
620
+ --fk-sidenav-link-bg-active: var(--fk-color-primary);
621
+ --fk-sidenav-link-font-family: var(--fk-font-family-base);
622
+ --fk-sidenav-link-font-size: 0.875rem;
623
+ --fk-sidenav-link-font-weight-active: var(--fk-font-weight-semibold);
624
+ --fk-sidenav-link-color: var(--fk-color-text);
625
+ --fk-sidenav-link-color-hover: var(--fk-color-primary);
626
+ --fk-sidenav-link-color-active: var(--fk-white);
627
+ --fk-sidenav-link-focus-ring: var(--fk-focus-ring);
628
+ /* ---------- Tabs ---------- */
629
+ --fk-tabs-font-size: 0.875rem;
630
+ --fk-tabs-font-size-sm: var(--fk-typography-small-font-size);
631
+ --fk-tabs-font-size-lg: 1rem;
632
+ --fk-tabs-font-weight: var(--fk-font-weight-medium);
633
+ --fk-tabs-font-weight-active: var(--fk-font-weight-semibold);
634
+ --fk-tabs-tab-color: var(--fk-color-text-muted);
635
+ --fk-tabs-tab-color-active: var(--fk-color-primary);
636
+ --fk-tabs-tab-color-hover: var(--fk-color-text);
637
+ --fk-tabs-tab-color-disabled: var(--fk-color-text-disabled);
638
+ --fk-tabs-tab-opacity-disabled: 0.5;
639
+ --fk-tabs-tab-gap: var(--fk-rhythm-2);
640
+ --fk-tabs-tab-padding: var(--fk-rhythm-3) var(--fk-rhythm-4);
641
+ --fk-tabs-tab-padding-sm: var(--fk-rhythm-2) var(--fk-rhythm-3);
642
+ --fk-tabs-tab-padding-lg: var(--fk-rhythm-4) var(--fk-rhythm-5);
643
+ --fk-tabs-border-color: var(--fk-color-border);
644
+ --fk-tabs-border-width: var(--fk-border-width);
645
+ --fk-tabs-indicator-color: var(--fk-color-primary);
646
+ --fk-tabs-indicator-height: 2px;
647
+ --fk-tabs-indicator-radius: var(--fk-radius-full);
648
+ --fk-tabs-pill-active-bg: var(--fk-color-primary);
649
+ --fk-tabs-pill-active-color: var(--fk-color-surface);
650
+ --fk-tabs-pill-radius: var(--fk-radius-full);
651
+ --fk-tabs-contained-bg: var(--fk-color-surface-muted);
652
+ --fk-tabs-contained-border: none;
653
+ --fk-tabs-contained-active-bg: var(--fk-color-surface);
654
+ --fk-tabs-contained-active-shadow: var(--fk-shadow-sm);
655
+ --fk-tabs-contained-radius: var(--fk-radius-md);
656
+ --fk-tabs-contained-padding: var(--fk-rhythm-1);
657
+ --fk-tabs-badge-bg: var(--fk-color-surface-muted);
658
+ --fk-tabs-badge-color: var(--fk-color-text-muted);
659
+ --fk-tabs-close-bg-hover: var(--fk-color-surface-muted);
660
+ --fk-tabs-scroll-btn-bg: var(--fk-color-surface);
661
+ --fk-tabs-scroll-btn-color: var(--fk-color-text-muted);
662
+ --fk-tabs-scroll-btn-color-hover: var(--fk-color-text);
663
+ /* ---------- Breadcrumb (route-driven) ---------- */
664
+ --fk-breadcrumb-gap: var(--fk-rhythm-1);
665
+ --fk-breadcrumb-font-size: var(--fk-typography-caption-font-size);
666
+ --fk-breadcrumb-link-color: var(--fk-color-muted);
667
+ --fk-breadcrumb-link-color-hover: var(--fk-color-text);
668
+ --fk-breadcrumb-current-color: var(--fk-color-text);
669
+ --fk-breadcrumb-current-font-weight: var(--fk-font-weight-medium);
670
+ --fk-breadcrumb-separator-color: var(--fk-color-muted);
671
+ /* ---------- Node Tree Breadcrumb ---------- */
672
+ --fk-node-tree-breadcrumb-gap: var(--fk-rhythm-1);
673
+ --fk-node-tree-breadcrumb-font-size: var(--fk-typography-caption-font-size);
674
+ --fk-node-tree-breadcrumb-link-color: var(--fk-color-muted);
675
+ --fk-node-tree-breadcrumb-link-color-hover: var(--fk-color-text);
676
+ --fk-node-tree-breadcrumb-current-color: var(--fk-color-primary);
677
+ --fk-node-tree-breadcrumb-current-font-weight: var(--fk-font-weight-medium);
678
+ --fk-node-tree-breadcrumb-separator-color: var(--fk-color-muted);
679
+ /* ---------- List Editor ---------- */
680
+ --fk-list-editor-row-gap: var(--fk-rhythm-2);
681
+ --fk-list-editor-item-padding: var(--fk-rhythm-2) var(--fk-rhythm-3);
682
+ --fk-list-editor-item-bg: var(--fk-color-surface);
683
+ --fk-list-editor-item-border-color: var(--fk-color-border);
684
+ --fk-list-editor-item-radius: var(--fk-radius-md);
685
+ --fk-list-editor-input-border-color: var(--fk-color-border);
686
+ --fk-list-editor-input-radius: var(--fk-radius-md);
687
+ --fk-list-editor-input-color: var(--fk-color-text);
688
+ --fk-list-editor-input-bg: var(--fk-color-surface);
689
+ --fk-list-editor-input-focus-border-color: var(--fk-color-primary);
690
+ --fk-list-editor-order-bg: var(--fk-color-primary-light);
691
+ --fk-list-editor-order-color: var(--fk-color-primary);
692
+ --fk-list-editor-remove-color: var(--fk-color-muted);
693
+ --fk-list-editor-remove-hover-color: var(--fk-color-danger);
694
+ --fk-list-editor-empty-color: var(--fk-color-muted);
695
+ --fk-list-editor-error-color: var(--fk-color-danger);
696
+ --fk-list-editor-focus-ring: var(--fk-focus-ring);
697
+ --fk-list-editor-placeholder-bg: var(--fk-color-surface-muted);
698
+ --fk-list-editor-placeholder-border-color: var(--fk-color-border);
699
+ --fk-list-editor-drag-border-color: var(--fk-color-primary);
700
+ /* ==========================================================================
701
+ 5. ORGANISMS — complex composed components
702
+ ========================================================================== */
703
+ /* ---------- App Shell ---------- */
704
+ --fk-app-shell-header-z-index: 100;
705
+ --fk-app-shell-overlay-z-index: 200;
706
+ --fk-app-shell-aside-z-index: 201;
707
+ --fk-app-shell-overlay-bg: var(--fk-black-50);
708
+ --fk-app-shell-aside-bg: var(--fk-color-surface);
709
+ --fk-app-shell-mobile-sidenav-width: 100%;
710
+ --fk-app-shell-end-bg: var(--fk-color-surface);
711
+ --fk-app-shell-end-z-index: 201;
712
+ --fk-app-shell-end-radius: var(--fk-radius-lg) 0 0 var(--fk-radius-lg);
713
+ --fk-app-shell-end-shadow: -4px 0 16px rgba(0, 0, 0, 0.08);
714
+ --fk-app-shell-end-padding: var(--fk-rhythm-4);
715
+ --fk-app-shell-end-header-padding: var(--fk-rhythm-4);
716
+ --fk-app-shell-end-footer-padding: var(--fk-rhythm-4);
717
+ /* ---------- Data Table ---------- */
718
+ --fk-data-table-head-bg: var(--fk-color-surface-muted);
719
+ --fk-data-table-head-color: var(--fk-color-text-muted);
720
+ --fk-data-table-head-hover-color: var(--fk-color-text);
721
+ --fk-data-table-head-font-weight: var(--fk-font-weight-semibold);
722
+ --fk-data-table-head-font-size: var(--fk-typography-small-font-size);
723
+ --fk-data-table-body-bg: var(--fk-color-surface);
724
+ --fk-data-table-body-color: var(--fk-color-text);
725
+ --fk-data-table-body-font-size: 0.875rem;
726
+ --fk-data-table-border-color: var(--fk-color-border);
727
+ --fk-data-table-border-width: 0;
728
+ --fk-data-table-border-radius: var(--fk-radius-md);
729
+ --fk-data-table-row-hover-bg: var(--fk-color-surface-muted);
730
+ --fk-data-table-cell-padding: var(--fk-rhythm-3);
731
+ --fk-data-table-empty-padding: var(--fk-rhythm-8);
732
+ --fk-data-table-empty-color: var(--fk-color-text-muted);
733
+ --fk-data-table-loading-bg: var(--fk-color-surface-overlay);
734
+ --fk-data-table-loading-color: var(--fk-color-text-muted);
735
+ /* Row selection */
736
+ --fk-data-table-selection-cell-width: 2.75rem;
737
+ --fk-data-table-row-selected-bg: var(--fk-color-primary-light);
738
+ --fk-data-table-row-selected-hover-bg: var(--fk-color-primary-light-gradient);
739
+ --fk-data-table-checkbox-size: 1rem;
740
+ --fk-data-table-checkbox-border-color: var(--fk-color-border);
741
+ --fk-data-table-checkbox-radius: var(--fk-radius-sm);
742
+ --fk-data-table-checkbox-bg: var(--fk-color-surface);
743
+ --fk-data-table-checkbox-hover-border-color: var(--fk-color-primary);
744
+ --fk-data-table-checkbox-checked-bg: var(--fk-color-primary);
745
+ --fk-data-table-checkbox-checked-border-color: var(--fk-color-primary);
746
+ --fk-data-table-checkbox-icon-color: var(--fk-color-surface);
747
+ /* ---------- Node Tree ---------- */
748
+ --fk-node-tree-row-gap: var(--fk-rhythm-2);
749
+ --fk-node-tree-row-padding: var(--fk-rhythm-2) var(--fk-rhythm-3);
750
+ --fk-node-tree-row-radius: var(--fk-radius-md);
751
+ --fk-node-tree-row-color: var(--fk-color-text);
752
+ --fk-node-tree-row-font-size: var(--fk-typography-body-font-size);
753
+ --fk-node-tree-row-bg-hover: var(--fk-color-surface-muted);
754
+ --fk-node-tree-row-bg-selected: var(--fk-overlay-brand);
755
+ --fk-node-tree-row-color-selected: var(--fk-color-primary);
756
+ --fk-node-tree-row-font-weight-selected: var(--fk-font-weight-medium);
757
+ --fk-node-tree-row-toggle-color: var(--fk-color-muted);
758
+ --fk-node-tree-row-toggle-color-hover: var(--fk-color-text);
759
+ --fk-node-tree-row-toggle-bg-hover: var(--fk-color-surface-muted);
760
+ --fk-node-tree-row-handle-color: var(--fk-color-muted);
761
+ --fk-node-tree-row-handle-color-hover: var(--fk-color-text);
762
+ --fk-node-tree-row-bg-drop-target: var(--fk-overlay-brand);
763
+ --fk-node-tree-row-border-drop-target: var(--fk-color-primary);
764
+ --fk-node-tree-row-drag-source-opacity: 0.4;
765
+ --fk-node-tree-drag-preview-bg: var(--fk-color-surface);
766
+ --fk-node-tree-drag-preview-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
767
+ --fk-node-tree-drag-placeholder-bg: var(--fk-color-primary);
768
+ /* ---------- Content Split ---------- */
769
+ --fk-content-split-left-bg: var(--fk-color-surface);
770
+ --fk-content-split-left-border: 1px solid var(--fk-color-border);
771
+ --fk-content-split-overlay-bg: var(--fk-black-50, rgba(0, 0, 0, 0.5));
772
+ --fk-content-split-rail-toggle-color: var(--fk-color-muted);
773
+ --fk-content-split-rail-toggle-color-hover: var(--fk-color-text);
774
+ --fk-content-split-rail-toggle-bg-hover: var(--fk-color-surface-muted);
775
+ /* ---------- Dialog ---------- */
776
+ --fk-dialog-overlay-bg: rgba(0, 0, 0, 0.5);
777
+ --fk-dialog-overlay-z-index: 1000;
778
+ --fk-dialog-panel-bg: var(--fk-color-surface);
779
+ --fk-dialog-panel-border-radius: var(--fk-radius-lg);
780
+ --fk-dialog-panel-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
781
+ --fk-dialog-panel-border: none;
782
+ --fk-dialog-panel-max-height: 85vh;
783
+ --fk-dialog-width-sm: 24rem;
784
+ --fk-dialog-width-md: 32rem;
785
+ --fk-dialog-width-lg: 40rem;
786
+ --fk-dialog-width-xl: 52rem;
787
+ --fk-dialog-panel-margin: var(--fk-rhythm-4);
788
+ --fk-dialog-header-padding-inline: var(--fk-rhythm-6);
789
+ --fk-dialog-header-padding: var(--fk-rhythm-4)
790
+ var(--fk-dialog-header-padding-inline);
791
+ --fk-dialog-body-padding: var(--fk-rhythm-6);
792
+ --fk-dialog-footer-padding: var(--fk-rhythm-4) var(--fk-rhythm-6);
793
+ --fk-dialog-footer-border: 1px solid var(--fk-color-border);
794
+ --fk-dialog-close-size: 2rem;
795
+ --fk-dialog-close-color: var(--fk-color-muted);
796
+ --fk-dialog-close-color-hover: var(--fk-color-text);
797
+ /* ---------- Wizard Dialog ---------- */
798
+ --fk-wizard-dialog-stepper-gap: var(--fk-rhythm-2);
799
+ --fk-wizard-dialog-stepper-padding: 0 0 0.75rem;
800
+ --fk-wizard-dialog-step-color: var(--fk-form-hint-color);
801
+ --fk-wizard-dialog-step-active-color: var(--fk-color-primary);
802
+ --fk-wizard-dialog-step-completed-color: var(--fk-form-label-color);
803
+ --fk-wizard-dialog-step-number-active-color: #fff;
804
+ --fk-wizard-dialog-body-padding: var(--fk-rhythm-4) var(--fk-rhythm-4);
805
+ --fk-wizard-dialog-footer-gap: var(--fk-rhythm-3);
806
+ --fk-wizard-dialog-footer-padding: var(--fk-rhythm-4) var(--fk-rhythm-6);
807
+ --fk-wizard-dialog-footer-border: 1px solid var(--fk-color-border);
808
+ /* ---------- Form Field ---------- */
809
+ --fk-input-font-family: var(--fk-font-family-base);
810
+ --fk-input-font-size: 0.875rem;
811
+ --fk-input-line-height: var(--fk-typography-body-line-height);
812
+ --fk-input-font-weight: var(--fk-font-weight-normal);
813
+ --fk-input-color: var(--fk-color-text);
814
+ --fk-input-placeholder-color: var(--fk-color-muted);
815
+ --fk-select-placeholder-color: var(--fk-color-muted);
816
+ --fk-input-bg: var(--fk-color-surface);
817
+ --fk-input-border-color: var(--fk-color-border);
818
+ --fk-input-border-color-hover: var(--fk-color-muted);
819
+ --fk-input-border-color-focus: var(--fk-color-primary);
820
+ --fk-input-border-color-error: var(--fk-color-danger);
821
+ --fk-input-border-radius: var(--fk-radius-md);
822
+ --fk-input-border-width: 1px;
823
+ --fk-input-padding: var(--fk-rhythm-2) var(--fk-rhythm-3);
824
+ --fk-input-focus-ring: var(--fk-focus-ring);
825
+ --fk-input-disabled-opacity: 0.5;
826
+ --fk-input-error-focus-ring: 0 0 0 3px rgba(224, 36, 36, 0.2);
827
+ /* ---------- Autocomplete ---------- */
828
+ --fk-autocomplete-dropdown-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
829
+ /* ---------- Checkbox ---------- */
830
+ --fk-checkbox-size: 1.125rem;
831
+ --fk-checkbox-gap: 0.5rem;
832
+ --fk-checkbox-border-radius: var(--fk-radius-sm);
833
+ --fk-checkbox-checked-bg: var(--fk-color-primary);
834
+ --fk-checkbox-check-color: #ffffff;
835
+ /* ---------- Radio ---------- */
836
+ --fk-radio-size: 1.125rem;
837
+ --fk-radio-gap: var(--fk-rhythm-2);
838
+ /* ---------- Switch ---------- */
839
+ --fk-switch-width: 2.25rem;
840
+ --fk-switch-height: 1.25rem;
841
+ --fk-switch-thumb-size: 1rem;
842
+ --fk-switch-gap: var(--fk-rhythm-2);
843
+ --fk-switch-thumb-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
844
+ /* ---------- Slider ---------- */
845
+ --fk-slider-track-height: 6px;
846
+ --fk-slider-track-radius: 3px;
847
+ --fk-slider-thumb-size: 18px;
848
+ /* ---------- File Dropzone ---------- */
849
+ --fk-file-dropzone-padding: var(--fk-rhythm-10);
850
+ --fk-file-dropzone-min-height: 10rem;
851
+ --fk-file-dropzone-gap: var(--fk-rhythm-2);
852
+ --fk-file-dropzone-bg: var(--fk-color-surface-raised);
853
+ --fk-file-dropzone-bg-dragging: rgba(37, 99, 235, 0.04);
854
+ --fk-file-dropzone-border-width: 2px;
855
+ --fk-file-dropzone-border-style: dashed;
856
+ --fk-file-dropzone-border-color: var(--fk-color-border);
857
+ --fk-file-dropzone-border-color-hover: var(--fk-color-primary);
858
+ --fk-file-dropzone-border-color-dragging: var(--fk-color-primary);
859
+ --fk-file-dropzone-border-radius: var(--fk-radius-lg);
860
+ --fk-file-dropzone-prompt-color: var(--fk-color-text);
861
+ --fk-file-dropzone-hint-font-size: 0.8125rem;
862
+ --fk-file-dropzone-icon-color-disabled: var(--fk-color-muted);
863
+ --fk-file-dropzone-opacity-disabled: 0.6;
864
+ --fk-form-label-font-size: var(--fk-typography-label-font-size);
865
+ --fk-form-label-font-weight: var(--fk-typography-label-font-weight);
866
+ --fk-form-label-line-height: var(--fk-typography-label-line-height);
867
+ --fk-form-label-color: var(--fk-color-text-strong);
868
+ --fk-form-label-gap: var(--fk-rhythm-2);
869
+ --fk-form-subscript-gap: var(--fk-rhythm-1);
870
+ --fk-form-field-gap: var(--fk-rhythm-2);
871
+ --fk-form-error-font-size: 0.75rem;
872
+ --fk-form-error-color: var(--fk-color-danger);
873
+ --fk-form-hint-font-size: var(--fk-typography-small-font-size);
874
+ --fk-form-hint-color: var(--fk-color-muted);
875
+ /* ---------- Pagination ---------- */
876
+ --fk-pagination-color: var(--fk-color-muted);
877
+ --fk-pagination-border-width: 1px;
878
+ --fk-pagination-border-color: var(--fk-color-border);
879
+ --fk-pagination-font-size: var(--fk-typography-small-font-size);
880
+ --fk-pagination-label-color: var(--fk-color-muted);
881
+ --fk-pagination-select-color: var(--fk-color-text);
882
+ --fk-pagination-select-bg: var(--fk-color-surface);
883
+ --fk-pagination-select-border-color: var(--fk-color-border);
884
+ --fk-pagination-select-border-radius: var(--fk-radius-md);
885
+ --fk-pagination-select-focus-border-color: var(--fk-color-primary);
886
+ --fk-pagination-select-focus-ring: var(--fk-focus-ring);
887
+ --fk-pagination-page-info-color: var(--fk-color-text);
888
+ --fk-pagination-btn-color: var(--fk-color-text);
889
+ --fk-pagination-btn-border-color: var(--fk-color-border);
890
+ --fk-pagination-btn-border-radius: var(--fk-radius-md);
891
+ --fk-pagination-btn-bg-hover: var(--fk-color-surface-hover);
892
+ --fk-pagination-btn-border-color-hover: var(--fk-color-muted);
893
+ --fk-pagination-btn-disabled-opacity: var(--fk-input-disabled-opacity);
894
+ --fk-pagination-btn-focus-border-color: var(--fk-color-primary);
895
+ --fk-pagination-btn-focus-ring: var(--fk-focus-ring);
896
+ /* ---------- Drawer ---------- */
897
+ --fk-drawer-overlay-bg: var(--fk-overlay-bg);
898
+ --fk-drawer-bg: var(--fk-color-surface);
899
+ --fk-drawer-border-color: var(--fk-color-border);
900
+ --fk-drawer-header-border-color: var(--fk-color-border);
901
+ --fk-drawer-title-color: var(--fk-color-text-strong);
902
+ --fk-drawer-title-font-size: var(--fk-typography-h4-font-size);
903
+ --fk-drawer-title-font-weight: var(--fk-font-weight-semibold);
904
+ --fk-drawer-close-color: var(--fk-color-muted);
905
+ --fk-drawer-close-color-hover: var(--fk-color-text);
906
+ --fk-drawer-close-bg-hover: var(--fk-color-surface-hover);
907
+ --fk-drawer-close-radius: var(--fk-radius-md);
908
+ --fk-drawer-close-focus-ring: var(--fk-focus-ring);
909
+ /* ---------- Avatar Stack ---------- */
910
+ --fk-avatar-stack-overlap: 0.5rem;
911
+ --fk-avatar-stack-ring: 0 0 0 2px var(--fk-color-surface);
912
+ --fk-avatar-stack-overflow-color: var(--fk-color-text);
913
+ --fk-avatar-stack-overflow-bg: var(--fk-color-surface-muted);
914
+ --fk-avatar-stack-overflow-bg-hover: var(--fk-color-surface-hover);
915
+ --fk-avatar-stack-overflow-focus-ring: var(--fk-focus-ring);
916
+ }
917
+
918
+ /* ==========================================================================
919
+ RESPONSIVE OVERRIDES
920
+ Mobile-first: base ≤ 767px · tablet ≥ 768px · desktop ≥ 1024px
921
+ Only font-size tokens that need to scale are overridden here.
922
+ ========================================================================== */
923
+ @media (min-width: 64em) {
924
+ :root {
925
+ --fk-font-size-body: 0.9375rem;
926
+ /* Headline scale — desktop */
927
+ --fk-typography-h1-font-size: 3.5rem;
928
+ --fk-typography-h2-font-size: 2.25rem;
929
+ --fk-typography-h3-font-size: 1.75rem;
930
+ --fk-typography-h4-font-size: 1.25rem;
931
+ --fk-typography-h5-font-size: 1rem;
932
+ --fk-typography-h6-font-size: 0.875rem;
933
+ /* Text scale — desktop */
934
+ --fk-typography-body-font-size: 0.9375rem;
935
+ --fk-typography-lead-font-size: 1.125rem;
936
+ --fk-typography-small-font-size: 0.875rem;
937
+ --fk-typography-caption-font-size: 0.75rem;
938
+ --fk-typography-label-font-size: 0.875rem;
939
+ --fk-typography-code-font-size: 0.875rem;
940
+ }
941
+ }
942
+ /* ==========================================================================
943
+ 6. DOCS — components used only inside developer documentation surfaces
944
+ ========================================================================== */
945
+ :root {
946
+ /* ---------- Method Badge ---------- */
947
+ --fk-method-badge-min-width: 3rem;
948
+ --fk-method-badge-padding-block: 2px;
949
+ --fk-method-badge-padding-inline: var(--fk-rhythm-2);
950
+ --fk-method-badge-radius: var(--fk-radius-sm);
951
+ --fk-method-badge-font-size: 0.6875rem;
952
+ --fk-method-badge-font-weight: var(--fk-font-weight-bold);
953
+ --fk-method-badge-color: var(--fk-color-text);
954
+ --fk-method-badge-bg-neutral: #d6d6d6;
955
+ --fk-method-badge-bg-get: #89ecac;
956
+ --fk-method-badge-bg-post: #94c4fd;
957
+ --fk-method-badge-bg-put: #fbb972;
958
+ --fk-method-badge-bg-patch: #c8a7fb;
959
+ --fk-method-badge-bg-delete: #fb8d8d;
960
+ --fk-method-badge-bg-head: var(--fk-method-badge-bg-neutral);
961
+ --fk-method-badge-bg-options: var(--fk-method-badge-bg-neutral);
962
+ /* ---------- Endpoint Link ---------- */
963
+ --fk-endpoint-link-gap: var(--fk-rhythm-2);
964
+ --fk-endpoint-link-padding-block: var(--fk-rhythm-1);
965
+ --fk-endpoint-link-padding-inline: var(--fk-rhythm-3);
966
+ --fk-endpoint-link-radius: var(--fk-radius-md);
967
+ --fk-endpoint-link-font-size: 0.875rem;
968
+ --fk-endpoint-link-color: var(--fk-color-text);
969
+ --fk-endpoint-link-bg-hover: var(--fk-color-surface-muted);
970
+ --fk-endpoint-link-bg-active: var(--fk-color-primary-light);
971
+ --fk-endpoint-link-color-active: var(--fk-color-primary);
972
+ --fk-endpoint-link-font-weight-active: var(--fk-font-weight-semibold);
973
+ --fk-endpoint-link-focus-ring: var(--fk-focus-ring);
974
+ }
975
+
976
+ /* ==========================================================================
977
+ 7. KEYFRAMES / ANIMATIONS
978
+ ========================================================================== */
979
+ @keyframes fk-loader-spin {
980
+ from {
981
+ transform: rotate(0deg);
982
+ }
983
+ to {
984
+ transform: rotate(360deg);
985
+ }
986
+ }