@heroelc/fsociety 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,472 @@
1
+ // =============================================================================
2
+ // fsociety · _tokens.scss
3
+ // Color scale engine + alias tokens de estado
4
+ // =============================================================================
5
+ //
6
+ // USO:
7
+ // @use 'tokens' as t;
8
+ // background: t.$primary-base;
9
+ // background: var(--fs-primary-hover); // CSS custom properties
10
+ //
11
+ // ESCALA:
12
+ // 50 → muted (badge bg, alert sutil, chip bg)
13
+ // 100 → subtle (hover bg ghost, row highlight)
14
+ // 200 → tint (selected bg, focus ring fill)
15
+ // 300 → light (borders en elementos claros)
16
+ // 400 → soft (íconos, placeholders, disabled)
17
+ // 500 → base (color principal del token)
18
+ // 600 → hover (hover en solid buttons)
19
+ // 700 → active (pressed / active state)
20
+ // 800 → emphasis (texto sobre fondos del mismo color)
21
+ // 900 → contrast (texto dark, headings sobre tint/muted)
22
+ // =============================================================================
23
+
24
+
25
+ // -----------------------------------------------------------------------------
26
+ // 1. CONFIGURACIÓN — colores base de la librería
27
+ // -----------------------------------------------------------------------------
28
+
29
+ $fs-primary-hex: #2563eb !default;
30
+ $fs-secondary-hex: #0ea5e9 !default;
31
+ $fs-tertiary-hex: #22d3ee !default;
32
+ $fs-neutral-hex: #64748b !default;
33
+ $fs-success-hex: #22c55e !default;
34
+ $fs-warning-hex: #f59e0b !default;
35
+ $fs-danger-hex: #f43f5e !default;
36
+
37
+ // Color de mezcla para stops oscuros (en vez de negro puro)
38
+ $fs-dark-mix: #0f172a !default;
39
+ $fs-light-mix: #ffffff !default;
40
+
41
+
42
+ // -----------------------------------------------------------------------------
43
+ // 2. FUNCIÓN PRINCIPAL — generate-scale()
44
+ // -----------------------------------------------------------------------------
45
+ //
46
+ // Genera un color interpolado dentro de la escala de 10 stops.
47
+ // Los stops 50-400 mezclan hacia blanco (más suave que usar lighten()).
48
+ // El stop 500 es el color base puro.
49
+ // Los stops 600-900 mezclan hacia $fs-dark-mix para oscurecer con más riqueza.
50
+ //
51
+ // @param $base — color hex base
52
+ // @param $stop — número del stop: 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900
53
+ // @return color
54
+
55
+ @function generate-scale($base, $stop) {
56
+ @if $stop == 50 { @return mix($fs-light-mix, $base, 92%); }
57
+ @if $stop == 100 { @return mix($fs-light-mix, $base, 80%); }
58
+ @if $stop == 200 { @return mix($fs-light-mix, $base, 64%); }
59
+ @if $stop == 300 { @return mix($fs-light-mix, $base, 44%); }
60
+ @if $stop == 400 { @return mix($fs-light-mix, $base, 22%); }
61
+ @if $stop == 500 { @return $base; }
62
+ @if $stop == 600 { @return mix($fs-dark-mix, $base, 16%); }
63
+ @if $stop == 700 { @return mix($fs-dark-mix, $base, 34%); }
64
+ @if $stop == 800 { @return mix($fs-dark-mix, $base, 54%); }
65
+ @if $stop == 900 { @return mix($fs-dark-mix, $base, 72%); }
66
+
67
+ @warn "generate-scale(): stop #{$stop} no válido. Usá: 50 100 200 300 400 500 600 700 800 900";
68
+ @return $base;
69
+ }
70
+
71
+
72
+ // -----------------------------------------------------------------------------
73
+ // 3. MIXIN — emit-scale()
74
+ // -----------------------------------------------------------------------------
75
+ //
76
+ // Emite todas las CSS custom properties de una escala completa.
77
+ // Se usa internamente en :root para registrar los tokens.
78
+ //
79
+ // @param $name — nombre del token: 'primary' | 'secondary' | etc.
80
+ // @param $base — color hex base
81
+
82
+ @mixin emit-scale($name, $base) {
83
+ --fs-#{$name}-50: #{generate-scale($base, 50)};
84
+ --fs-#{$name}-100: #{generate-scale($base, 100)};
85
+ --fs-#{$name}-200: #{generate-scale($base, 200)};
86
+ --fs-#{$name}-300: #{generate-scale($base, 300)};
87
+ --fs-#{$name}-400: #{generate-scale($base, 400)};
88
+ --fs-#{$name}-500: #{generate-scale($base, 500)};
89
+ --fs-#{$name}-600: #{generate-scale($base, 600)};
90
+ --fs-#{$name}-700: #{generate-scale($base, 700)};
91
+ --fs-#{$name}-800: #{generate-scale($base, 800)};
92
+ --fs-#{$name}-900: #{generate-scale($base, 900)};
93
+ }
94
+
95
+
96
+ // -----------------------------------------------------------------------------
97
+ // 4. MIXIN — emit-alias-tokens()
98
+ // -----------------------------------------------------------------------------
99
+ //
100
+ // Emite los alias semánticos que apuntan a los stops de la escala.
101
+ // Estos son los tokens que se usan en los componentes.
102
+ // NUNCA uses los stops numerados directamente en componentes —
103
+ // usá siempre los alias para que el theming funcione.
104
+ //
105
+ // @param $name — nombre del token: 'primary' | 'secondary' | etc.
106
+
107
+ @mixin emit-alias-tokens($name) {
108
+ // Estados interactivos
109
+ --fs-#{$name}-muted: var(--fs-#{$name}-50); // badge bg, chip, alert sutil
110
+ --fs-#{$name}-subtle: var(--fs-#{$name}-100); // ghost hover bg, row hover
111
+ --fs-#{$name}-tint: var(--fs-#{$name}-200); // selected bg, focus fill
112
+ --fs-#{$name}-light: var(--fs-#{$name}-300); // borders sobre fondos claros
113
+ --fs-#{$name}-soft: var(--fs-#{$name}-400); // íconos, placeholder, disabled
114
+ --fs-#{$name}-base: var(--fs-#{$name}-500); // color principal
115
+ --fs-#{$name}-hover: var(--fs-#{$name}-600); // hover en solid buttons
116
+ --fs-#{$name}-active: var(--fs-#{$name}-700); // pressed / active
117
+ --fs-#{$name}-emphasis: var(--fs-#{$name}-800); // texto sobre fondos del mismo color
118
+ --fs-#{$name}-contrast: var(--fs-#{$name}-900); // texto dark, headings sobre muted/tint
119
+ }
120
+
121
+
122
+ // -----------------------------------------------------------------------------
123
+ // 5. VARIABLES SASS — acceso directo en tiempo de compilación
124
+ // -----------------------------------------------------------------------------
125
+ //
126
+ // Para usar en valores de mixins, @each, maps, cálculos SCSS.
127
+ // No disponibles como CSS custom properties.
128
+
129
+ $primary-muted: generate-scale($fs-primary-hex, 50);
130
+ $primary-subtle: generate-scale($fs-primary-hex, 100);
131
+ $primary-tint: generate-scale($fs-primary-hex, 200);
132
+ $primary-light: generate-scale($fs-primary-hex, 300);
133
+ $primary-soft: generate-scale($fs-primary-hex, 400);
134
+ $primary-base: generate-scale($fs-primary-hex, 500);
135
+ $primary-hover: generate-scale($fs-primary-hex, 600);
136
+ $primary-active: generate-scale($fs-primary-hex, 700);
137
+ $primary-emphasis: generate-scale($fs-primary-hex, 800);
138
+ $primary-contrast: generate-scale($fs-primary-hex, 900);
139
+
140
+ $secondary-muted: generate-scale($fs-secondary-hex, 50);
141
+ $secondary-subtle: generate-scale($fs-secondary-hex, 100);
142
+ $secondary-tint: generate-scale($fs-secondary-hex, 200);
143
+ $secondary-light: generate-scale($fs-secondary-hex, 300);
144
+ $secondary-soft: generate-scale($fs-secondary-hex, 400);
145
+ $secondary-base: generate-scale($fs-secondary-hex, 500);
146
+ $secondary-hover: generate-scale($fs-secondary-hex, 600);
147
+ $secondary-active: generate-scale($fs-secondary-hex, 700);
148
+ $secondary-emphasis: generate-scale($fs-secondary-hex, 800);
149
+ $secondary-contrast: generate-scale($fs-secondary-hex, 900);
150
+
151
+ $tertiary-muted: generate-scale($fs-tertiary-hex, 50);
152
+ $tertiary-subtle: generate-scale($fs-tertiary-hex, 100);
153
+ $tertiary-tint: generate-scale($fs-tertiary-hex, 200);
154
+ $tertiary-light: generate-scale($fs-tertiary-hex, 300);
155
+ $tertiary-soft: generate-scale($fs-tertiary-hex, 400);
156
+ $tertiary-base: generate-scale($fs-tertiary-hex, 500);
157
+ $tertiary-hover: generate-scale($fs-tertiary-hex, 600);
158
+ $tertiary-active: generate-scale($fs-tertiary-hex, 700);
159
+ $tertiary-emphasis: generate-scale($fs-tertiary-hex, 800);
160
+ $tertiary-contrast: generate-scale($fs-tertiary-hex, 900);
161
+
162
+ $neutral-muted: generate-scale($fs-neutral-hex, 50);
163
+ $neutral-subtle: generate-scale($fs-neutral-hex, 100);
164
+ $neutral-tint: generate-scale($fs-neutral-hex, 200);
165
+ $neutral-light: generate-scale($fs-neutral-hex, 300);
166
+ $neutral-soft: generate-scale($fs-neutral-hex, 400);
167
+ $neutral-base: generate-scale($fs-neutral-hex, 500);
168
+ $neutral-hover: generate-scale($fs-neutral-hex, 600);
169
+ $neutral-active: generate-scale($fs-neutral-hex, 700);
170
+ $neutral-emphasis: generate-scale($fs-neutral-hex, 800);
171
+ $neutral-contrast: generate-scale($fs-neutral-hex, 900);
172
+
173
+ $success-muted: generate-scale($fs-success-hex, 50);
174
+ $success-base: generate-scale($fs-success-hex, 500);
175
+ $success-hover: generate-scale($fs-success-hex, 600);
176
+ $success-active: generate-scale($fs-success-hex, 700);
177
+ $success-contrast: generate-scale($fs-success-hex, 900);
178
+
179
+ $warning-muted: generate-scale($fs-warning-hex, 50);
180
+ $warning-base: generate-scale($fs-warning-hex, 500);
181
+ $warning-hover: generate-scale($fs-warning-hex, 600);
182
+ $warning-active: generate-scale($fs-warning-hex, 700);
183
+ $warning-contrast: generate-scale($fs-warning-hex, 900);
184
+
185
+ $danger-muted: generate-scale($fs-danger-hex, 50);
186
+ $danger-base: generate-scale($fs-danger-hex, 500);
187
+ $danger-hover: generate-scale($fs-danger-hex, 600);
188
+ $danger-active: generate-scale($fs-danger-hex, 700);
189
+ $danger-contrast: generate-scale($fs-danger-hex, 900);
190
+
191
+
192
+ // -----------------------------------------------------------------------------
193
+ // 6. TOKENS DE TIPOGRAFÍA
194
+ // -----------------------------------------------------------------------------
195
+
196
+ $fs-font-sans: 'Inter', 'Segoe UI', system-ui, sans-serif !default;
197
+ $fs-font-mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace !default;
198
+ $fs-font-serif: 'Georgia', serif !default;
199
+
200
+ $fs-text-xs: 0.75rem; // 12px
201
+ $fs-text-sm: 0.875rem; // 14px
202
+ $fs-text-base: 1rem; // 16px
203
+ $fs-text-lg: 1.125rem; // 18px
204
+ $fs-text-xl: 1.25rem; // 20px
205
+ $fs-text-2xl: 1.5rem; // 24px
206
+ $fs-text-3xl: 1.875rem; // 30px
207
+
208
+ $fs-font-regular: 400;
209
+ $fs-font-medium: 500;
210
+ $fs-font-semi: 600;
211
+ $fs-font-bold: 700;
212
+
213
+ $fs-leading-tight: 1.25;
214
+ $fs-leading-normal: 1.5;
215
+ $fs-leading-relaxed: 1.75;
216
+
217
+ $fs-tracking-tight: -0.025em;
218
+ $fs-tracking-normal: 0em;
219
+ $fs-tracking-wide: 0.05em;
220
+ $fs-tracking-wider: 0.1em;
221
+
222
+
223
+ // -----------------------------------------------------------------------------
224
+ // 7. TOKENS DE ESPACIADO
225
+ // -----------------------------------------------------------------------------
226
+
227
+ $fs-space-1: 0.25rem; // 4px
228
+ $fs-space-2: 0.5rem; // 8px
229
+ $fs-space-3: 0.75rem; // 12px
230
+ $fs-space-4: 1rem; // 16px
231
+ $fs-space-5: 1.25rem; // 20px
232
+ $fs-space-6: 1.5rem; // 24px
233
+ $fs-space-8: 2rem; // 32px
234
+ $fs-space-10: 2.5rem; // 40px
235
+ $fs-space-12: 3rem; // 48px
236
+ $fs-space-16: 4rem; // 64px
237
+
238
+
239
+ // -----------------------------------------------------------------------------
240
+ // 8. TOKENS DE BORDER RADIUS
241
+ // -----------------------------------------------------------------------------
242
+
243
+ $fs-radius-sm: 4px;
244
+ $fs-radius-md: 6px;
245
+ $fs-radius-lg: 8px;
246
+ $fs-radius-xl: 12px;
247
+ $fs-radius-2xl: 16px;
248
+ $fs-radius-full: 9999px;
249
+
250
+
251
+ // -----------------------------------------------------------------------------
252
+ // 9. TOKENS DE TRANSICIÓN
253
+ // -----------------------------------------------------------------------------
254
+
255
+ $fs-duration-fast: 100ms;
256
+ $fs-duration-normal: 200ms;
257
+ $fs-duration-slow: 350ms;
258
+
259
+ $fs-ease-default: cubic-bezier(0.4, 0, 0.2, 1);
260
+ $fs-ease-in: cubic-bezier(0.4, 0, 1, 1);
261
+ $fs-ease-out: cubic-bezier(0, 0, 0.2, 1);
262
+ $fs-ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
263
+
264
+ $fs-transition-base: all $fs-duration-normal $fs-ease-default;
265
+ $fs-transition-colors: background-color $fs-duration-fast $fs-ease-default,
266
+ border-color $fs-duration-fast $fs-ease-default,
267
+ color $fs-duration-fast $fs-ease-default;
268
+ $fs-transition-transform: transform $fs-duration-normal $fs-ease-bounce;
269
+
270
+
271
+ // -----------------------------------------------------------------------------
272
+ // 10. TOKENS DE ELEVACIÓN (box-shadow)
273
+ // -----------------------------------------------------------------------------
274
+
275
+ $fs-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.06);
276
+ $fs-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.04);
277
+ $fs-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.08), 0 4px 6px rgba(0, 0, 0, 0.04);
278
+ $fs-shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.09), 0 8px 10px rgba(0, 0, 0, 0.04);
279
+ $fs-shadow-none: none;
280
+
281
+ // Focus ring — siempre del color del token activo
282
+ @mixin focus-ring($color: $primary-base, $offset: 2px) {
283
+ outline: none;
284
+ box-shadow: 0 0 0 $offset white, 0 0 0 ($offset + 2px) $color;
285
+ }
286
+
287
+
288
+ // -----------------------------------------------------------------------------
289
+ // 11. TOKENS DE Z-INDEX
290
+ // -----------------------------------------------------------------------------
291
+
292
+ $fs-z-base: 0;
293
+ $fs-z-raised: 10;
294
+ $fs-z-dropdown: 100;
295
+ $fs-z-sticky: 200;
296
+ $fs-z-overlay: 300;
297
+ $fs-z-modal: 400;
298
+ $fs-z-toast: 500;
299
+ $fs-z-tooltip: 600;
300
+
301
+
302
+ // -----------------------------------------------------------------------------
303
+ // 12. REGISTRO EN :root — CSS Custom Properties
304
+ // -----------------------------------------------------------------------------
305
+ //
306
+ // Esto emite TODAS las variables CSS disponibles en runtime.
307
+ // Los componentes Angular usan var(--fs-primary-hover) etc.
308
+
309
+ :root {
310
+ // Escalas completas (stops numéricos — uso interno / debugging)
311
+ @include emit-scale('primary', $fs-primary-hex);
312
+ @include emit-scale('secondary', $fs-secondary-hex);
313
+ @include emit-scale('tertiary', $fs-tertiary-hex);
314
+ @include emit-scale('neutral', $fs-neutral-hex);
315
+ @include emit-scale('success', $fs-success-hex);
316
+ @include emit-scale('warning', $fs-warning-hex);
317
+ @include emit-scale('danger', $fs-danger-hex);
318
+
319
+ // Alias tokens de estado (USO EN COMPONENTES)
320
+ @include emit-alias-tokens('primary');
321
+ @include emit-alias-tokens('secondary');
322
+ @include emit-alias-tokens('tertiary');
323
+ @include emit-alias-tokens('neutral');
324
+ @include emit-alias-tokens('success');
325
+ @include emit-alias-tokens('warning');
326
+ @include emit-alias-tokens('danger');
327
+
328
+ // Tipografía
329
+ --fs-font-sans: #{$fs-font-sans};
330
+ --fs-font-mono: #{$fs-font-mono};
331
+ --fs-font-serif: #{$fs-font-serif};
332
+
333
+ // Radios
334
+ --fs-radius-sm: #{$fs-radius-sm};
335
+ --fs-radius-md: #{$fs-radius-md};
336
+ --fs-radius-lg: #{$fs-radius-lg};
337
+ --fs-radius-xl: #{$fs-radius-xl};
338
+ --fs-radius-full: #{$fs-radius-full};
339
+
340
+ // Transiciones
341
+ --fs-duration-fast: #{$fs-duration-fast};
342
+ --fs-duration-normal: #{$fs-duration-normal};
343
+ --fs-duration-slow: #{$fs-duration-slow};
344
+
345
+ // Elevaciones
346
+ --fs-shadow-sm: #{$fs-shadow-sm};
347
+ --fs-shadow-md: #{$fs-shadow-md};
348
+ --fs-shadow-lg: #{$fs-shadow-lg};
349
+
350
+ // Espaciado
351
+ --fs-space-1: #{$fs-space-1};
352
+ --fs-space-2: #{$fs-space-2};
353
+ --fs-space-3: #{$fs-space-3};
354
+ --fs-space-4: #{$fs-space-4};
355
+ --fs-space-6: #{$fs-space-6};
356
+ --fs-space-8: #{$fs-space-8};
357
+ }
358
+
359
+
360
+ // -----------------------------------------------------------------------------
361
+ // 13. OVERRIDE DE TEMA — theming por aplicación
362
+ // -----------------------------------------------------------------------------
363
+ //
364
+ // Para sobreescribir los colores base en una app consumidora:
365
+ //
366
+ // // en styles.scss de tu app Angular:
367
+ // @use '@fsociety/tokens' with (
368
+ // $fs-primary-hex: #7c3aed, // purple
369
+ // $fs-secondary-hex: #0891b2,
370
+ // $fs-tertiary-hex: #0d9488,
371
+ // );
372
+ //
373
+ // Todos los tokens se regeneran automáticamente con la nueva escala.
374
+
375
+
376
+ // -----------------------------------------------------------------------------
377
+ // 14. DARK MODE
378
+ // -----------------------------------------------------------------------------
379
+
380
+ @media (prefers-color-scheme: dark) {
381
+ :root {
382
+ // En dark mode los alias invierten su lógica visual:
383
+ // el "muted" que era casi blanco pasa a ser casi negro,
384
+ // y el "contrast" que era muy oscuro pasa a ser casi blanco.
385
+
386
+ @include emit-scale('primary', $fs-primary-hex);
387
+ @include emit-scale('secondary', $fs-secondary-hex);
388
+ @include emit-scale('tertiary', $fs-tertiary-hex);
389
+ @include emit-scale('neutral', $fs-neutral-hex);
390
+ @include emit-scale('success', $fs-success-hex);
391
+ @include emit-scale('warning', $fs-warning-hex);
392
+ @include emit-scale('danger', $fs-danger-hex);
393
+
394
+ // Alias invertidos para dark
395
+ --fs-primary-muted: var(--fs-primary-900);
396
+ --fs-primary-subtle: var(--fs-primary-800);
397
+ --fs-primary-tint: var(--fs-primary-700);
398
+ --fs-primary-light: var(--fs-primary-600);
399
+ --fs-primary-soft: var(--fs-primary-400);
400
+ --fs-primary-base: var(--fs-primary-500);
401
+ --fs-primary-hover: var(--fs-primary-400);
402
+ --fs-primary-active: var(--fs-primary-300);
403
+ --fs-primary-emphasis: var(--fs-primary-200);
404
+ --fs-primary-contrast: var(--fs-primary-50);
405
+
406
+ --fs-secondary-muted: var(--fs-secondary-900);
407
+ --fs-secondary-subtle: var(--fs-secondary-800);
408
+ --fs-secondary-tint: var(--fs-secondary-700);
409
+ --fs-secondary-light: var(--fs-secondary-600);
410
+ --fs-secondary-soft: var(--fs-secondary-400);
411
+ --fs-secondary-base: var(--fs-secondary-500);
412
+ --fs-secondary-hover: var(--fs-secondary-400);
413
+ --fs-secondary-active: var(--fs-secondary-300);
414
+ --fs-secondary-emphasis: var(--fs-secondary-200);
415
+ --fs-secondary-contrast: var(--fs-secondary-50);
416
+
417
+ --fs-tertiary-muted: var(--fs-tertiary-900);
418
+ --fs-tertiary-subtle: var(--fs-tertiary-800);
419
+ --fs-tertiary-tint: var(--fs-tertiary-700);
420
+ --fs-tertiary-light: var(--fs-tertiary-600);
421
+ --fs-tertiary-soft: var(--fs-tertiary-400);
422
+ --fs-tertiary-base: var(--fs-tertiary-500);
423
+ --fs-tertiary-hover: var(--fs-tertiary-400);
424
+ --fs-tertiary-active: var(--fs-tertiary-300);
425
+ --fs-tertiary-emphasis: var(--fs-tertiary-200);
426
+ --fs-tertiary-contrast: var(--fs-tertiary-50);
427
+
428
+ --fs-neutral-muted: var(--fs-neutral-900);
429
+ --fs-neutral-subtle: var(--fs-neutral-800);
430
+ --fs-neutral-base: var(--fs-neutral-500);
431
+ --fs-neutral-hover: var(--fs-neutral-400);
432
+ --fs-neutral-active: var(--fs-neutral-300);
433
+ --fs-neutral-contrast: var(--fs-neutral-50);
434
+
435
+ --fs-danger-muted: var(--fs-danger-900);
436
+ --fs-danger-base: var(--fs-danger-500);
437
+ --fs-danger-hover: var(--fs-danger-400);
438
+ --fs-danger-contrast: var(--fs-danger-50);
439
+
440
+ --fs-success-muted: var(--fs-success-900);
441
+ --fs-success-base: var(--fs-success-500);
442
+ --fs-success-hover: var(--fs-success-400);
443
+ --fs-success-contrast: var(--fs-success-50);
444
+
445
+ --fs-warning-muted: var(--fs-warning-900);
446
+ --fs-warning-base: var(--fs-warning-500);
447
+ --fs-warning-hover: var(--fs-warning-400);
448
+ --fs-warning-contrast: var(--fs-warning-50);
449
+ }
450
+ }
451
+
452
+ // Soporte para clase manual [data-theme="dark"] en Angular
453
+ [data-theme='dark'] {
454
+ @extend :root; // hereda todo el bloque de dark mode arriba si se necesita
455
+ }
456
+
457
+ // ---------------------------------------------------------------------------
458
+ // 15. TOKENS DE COMPONENTE
459
+ // ---------------------------------------------------------------------------
460
+
461
+ :root {
462
+ // fs-tabs
463
+ --fs-tab-bg: #0d1117;
464
+ --fs-tab-color: rgba(255, 255, 255, 0.40);
465
+ --fs-tab-color-hover: rgba(255, 255, 255, 0.70);
466
+ --fs-tab-color-active: #ffffff;
467
+ --fs-tab-border: rgba(255, 255, 255, 0.08);
468
+ --fs-tab-hover-bg: rgba(255, 255, 255, 0.03);
469
+ --fs-tab-indicator-from: var(--fs-primary-base);
470
+ --fs-tab-indicator-to: var(--fs-tertiary-base);
471
+ --fs-tab-indicator-glow: rgba(34, 211, 238, 0.45);
472
+ }