@higinio/design-mcp 0.2.0 → 0.2.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/assets/bruma/design-doc.md +225 -33
- package/assets/bruma/framework.css +268 -51
- package/assets/bruma/styleguide.html +676 -168
- package/assets/bruma/tailwind.css +48 -6
- package/assets/bruma/tokens.css +61 -5
- package/assets/bruma/tokens.json +769 -25
- package/assets/celeste/design-doc.md +242 -40
- package/assets/celeste/framework.css +290 -62
- package/assets/celeste/styleguide.html +760 -178
- package/assets/celeste/tailwind.css +48 -6
- package/assets/celeste/tokens.css +67 -6
- package/assets/celeste/tokens.json +778 -26
- package/assets/nocturna/design-doc.md +346 -52
- package/assets/nocturna/framework.css +317 -108
- package/assets/nocturna/styleguide.html +809 -215
- package/assets/nocturna/tailwind.css +46 -3
- package/assets/nocturna/tokens.css +115 -6
- package/assets/nocturna/tokens.json +754 -21
- package/assets/salvia/design-doc.md +224 -31
- package/assets/salvia/framework.css +269 -51
- package/assets/salvia/styleguide.html +674 -168
- package/assets/salvia/tailwind.css +48 -6
- package/assets/salvia/tokens.css +61 -5
- package/assets/salvia/tokens.json +769 -25
- package/dist/server.js +1 -1
- package/dist/snippet.js +26 -17
- package/dist/tokens.js +42 -5
- package/package.json +32 -8
|
@@ -1,41 +1,39 @@
|
|
|
1
|
-
/*
|
|
2
|
-
|
|
3
|
-
Sistema de diseño
|
|
1
|
+
/* ============================================================
|
|
2
|
+
Nocturna Eléctrica — Design Tokens v2.0
|
|
3
|
+
Sistema de diseño de Higinio Sosa · dark-first
|
|
4
4
|
Fuente de verdad: DESIGN-nocturna-electrica.md
|
|
5
|
-
Uso:
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
========================================================================== */
|
|
5
|
+
Uso: importar ANTES de cualquier estilo propio.
|
|
6
|
+
Los componentes consumen SOLO aliases semánticos, nunca hex.
|
|
7
|
+
============================================================ */
|
|
9
8
|
|
|
10
9
|
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Manrope:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
|
|
11
10
|
|
|
12
|
-
/* ============================================================
|
|
13
|
-
1. TOKENS — primitivos + aliases (dark por defecto)
|
|
14
|
-
============================================================ */
|
|
15
11
|
:root {
|
|
16
|
-
/*
|
|
12
|
+
/* == Primitivos: acento (Celeste Eléctrico) ==
|
|
13
|
+
accent-600 sobre blanco da 4.01:1 — vale como UI (≥3) pero NO como texto (<4.5).
|
|
14
|
+
Para texto sobre claro se usa accent-700 (5.95:1) y accent-800 (8.74:1). */
|
|
17
15
|
--accent-100: #d9f0fb; --accent-200: #a8ddf6; --accent-300: #7dccf1;
|
|
18
16
|
--accent-400: #52baed; --accent-500: #2fa3dd; --accent-600: #1f87bb; --accent-700: #186a94;
|
|
19
|
-
--accent-800: #12506f;
|
|
17
|
+
--accent-800: #12506f;
|
|
20
18
|
|
|
21
|
-
/*
|
|
19
|
+
/* == Primitivos: índigo (Índigo Profundo) — nunca texto sobre negro == */
|
|
22
20
|
--indigo-300: #7a83c4; --indigo-400: #565fa3; --indigo-500: #353d7c;
|
|
23
21
|
--indigo-600: #2b3264; --indigo-700: #22284f; --indigo-800: #1a1e3b;
|
|
24
22
|
|
|
25
|
-
/*
|
|
23
|
+
/* == Primitivos: escala nocturna == */
|
|
26
24
|
--night-950: #010203; --night-900: #0b0d12; --night-800: #14171f;
|
|
27
25
|
--night-700: #1e222d; --night-600: #2a2f3d; --night-500: #3d4354;
|
|
28
|
-
--night-450: #5f6575; /* texto atenuado en light */
|
|
26
|
+
--night-450: #5f6575; /* texto atenuado en light: night-400 caía a 4.27:1 sobre --surface-3 */
|
|
29
27
|
--night-400: #6b7183; --night-300: #9aa0b0; --night-200: #c5c9d4;
|
|
30
28
|
--night-100: #e8eaef; --night-50: #f6f7f9;
|
|
31
29
|
|
|
32
|
-
/*
|
|
30
|
+
/* == Primitivos: semánticos (calibrados para dark) == */
|
|
33
31
|
--success-400: #4ade80; --success-bg: #0a2617;
|
|
34
32
|
--warning-400: #fbbf24; --warning-bg: #2a2005;
|
|
35
33
|
--danger-400: #f87171; --danger-bg: #2c0f0f;
|
|
36
34
|
--info-400: #52baed; --info-bg: #0d1f2c;
|
|
37
35
|
|
|
38
|
-
/*
|
|
36
|
+
/* == Aliases semánticos (los componentes consumen SOLO esto) == */
|
|
39
37
|
--bg: var(--night-950);
|
|
40
38
|
--surface-1: var(--night-900);
|
|
41
39
|
--surface-2: var(--night-800);
|
|
@@ -50,47 +48,17 @@
|
|
|
50
48
|
--text-muted: var(--night-300);
|
|
51
49
|
--text-disabled: var(--night-400);
|
|
52
50
|
--text-heading: var(--night-50);
|
|
53
|
-
--text-on-accent: var(--night-950);
|
|
54
|
-
--success: var(--success-400);
|
|
55
|
-
--
|
|
56
|
-
--
|
|
57
|
-
--
|
|
51
|
+
--text-on-accent: var(--night-950); /* texto de CTA oscuro, nunca blanco */
|
|
52
|
+
--success: var(--success-400); --warning: var(--warning-400);
|
|
53
|
+
--danger: var(--danger-400); --info: var(--info-400);
|
|
54
|
+
--link: var(--accent-400);
|
|
55
|
+
--link-hover: var(--accent-200);
|
|
58
56
|
--accent-ghost-hover: rgba(82,186,237,.08);
|
|
59
57
|
--accent-ghost-active: rgba(82,186,237,.14);
|
|
60
58
|
--accent-selected: rgba(82,186,237,.12);
|
|
61
59
|
--overlay: rgba(1,2,3,.7);
|
|
62
60
|
|
|
63
|
-
/*
|
|
64
|
-
--link: var(--accent-400);
|
|
65
|
-
--link-hover: var(--accent-200);
|
|
66
|
-
--focus-color: var(--accent-400);
|
|
67
|
-
--border-hover: var(--night-400);
|
|
68
|
-
--outline-hover-bg: var(--surface-2);
|
|
69
|
-
--outline-active-bg: var(--surface-3);
|
|
70
|
-
--text-on-danger: var(--night-950);
|
|
71
|
-
--data-color: var(--accent-400); /* cifras/datos clave */
|
|
72
|
-
--elevated-border: var(--night-600); /* borde de toasts, modales, menús */
|
|
73
|
-
--card-border: var(--night-600);
|
|
74
|
-
--code-color: var(--accent-300);
|
|
75
|
-
--code-border: var(--night-700);
|
|
76
|
-
--table-header-bg: var(--night-900);
|
|
77
|
-
--row-border: var(--night-800);
|
|
78
|
-
--row-hover: var(--night-700);
|
|
79
|
-
--navbar-bg: rgba(1,2,3,.8);
|
|
80
|
-
--nav-active: var(--accent-400);
|
|
81
|
-
--sidebar-bg: var(--night-900);
|
|
82
|
-
--sidebar-active-bg: var(--indigo-800);
|
|
83
|
-
--sidebar-active-text: var(--night-50);
|
|
84
|
-
--sidebar-active-icon: var(--accent-400);
|
|
85
|
-
--switch-off: var(--night-600);
|
|
86
|
-
--tooltip-bg: var(--night-700);
|
|
87
|
-
--tooltip-border: var(--night-600);
|
|
88
|
-
--tooltip-text: var(--night-100);
|
|
89
|
-
--skeleton-base: var(--night-800);
|
|
90
|
-
--skeleton-sheen: var(--night-700);
|
|
91
|
-
--empty-icon: var(--indigo-400);
|
|
92
|
-
|
|
93
|
-
/* -- Tipografía -- */
|
|
61
|
+
/* == Tipografía == */
|
|
94
62
|
--font-display: "Space Grotesk", system-ui, sans-serif;
|
|
95
63
|
--font-body: "Manrope", system-ui, sans-serif;
|
|
96
64
|
--font-mono: "JetBrains Mono", monospace;
|
|
@@ -102,7 +70,7 @@
|
|
|
102
70
|
--tracking-display: -0.02em; --tracking-overline: 0.08em;
|
|
103
71
|
--measure: 65ch;
|
|
104
72
|
|
|
105
|
-
/*
|
|
73
|
+
/* == Espaciado (escala base 4px) == */
|
|
106
74
|
--space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px;
|
|
107
75
|
--space-5: 20px; --space-6: 24px; --space-8: 32px; --space-10: 40px;
|
|
108
76
|
--space-12: 48px; --space-16: 64px; --space-20: 80px; --space-24: 96px;
|
|
@@ -111,37 +79,106 @@
|
|
|
111
79
|
--button-padding: 12px 20px; --touch-target: 44px;
|
|
112
80
|
--grid-gutter: 24px; --grid-gutter-mobile: 16px;
|
|
113
81
|
|
|
114
|
-
/*
|
|
82
|
+
/* == Radios y bordes == */
|
|
115
83
|
--radius-sm: 8px; --radius-md: 12px; --radius-lg: 16px;
|
|
116
84
|
--radius-xl: 24px; --radius-full: 9999px;
|
|
117
85
|
--border-default: 1px solid var(--night-500);
|
|
118
86
|
--border-emphasis: 1px solid var(--night-400); /* ver --border-strong */
|
|
119
|
-
--focus-ring: 2px solid var(--
|
|
87
|
+
--focus-ring: 2px solid var(--focus-color);
|
|
120
88
|
--focus-ring-offset: 2px;
|
|
121
89
|
|
|
122
|
-
/*
|
|
90
|
+
/* == Elevación (superficie + sombra + borde) == */
|
|
123
91
|
--shadow-1: 0 1px 2px rgba(0,0,0,.4);
|
|
124
92
|
--shadow-2: 0 4px 12px rgba(0,0,0,.5);
|
|
125
93
|
--shadow-3: 0 12px 32px rgba(0,0,0,.6);
|
|
126
|
-
--glow-accent: 0 0 0 1px rgba(82,186,237,.35), 0 4px 20px rgba(82,186,237,.18);
|
|
94
|
+
--glow-accent: 0 0 0 1px rgba(82,186,237,.35), 0 4px 20px rgba(82,186,237,.18); /* máx. uno por pantalla */
|
|
127
95
|
--ring: 0 0 0 3px rgba(82,186,237,.2);
|
|
128
96
|
--ring-danger: 0 0 0 3px rgba(248,113,113,.2);
|
|
129
97
|
|
|
130
|
-
/*
|
|
98
|
+
/* == Motion == */
|
|
131
99
|
--duration-instant: 100ms; --duration-fast: 150ms; --duration-base: 220ms;
|
|
132
100
|
--duration-slow: 250ms; --duration-page: 350ms;
|
|
133
101
|
--ease-out: cubic-bezier(0.2, 0, 0, 1);
|
|
134
102
|
--ease-in: cubic-bezier(0.4, 0, 1, 1);
|
|
135
103
|
--ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); /* moverse de A a B en pantalla */
|
|
136
104
|
--ease-spring: cubic-bezier(0.34, 1.4, 0.64, 1);
|
|
105
|
+
--stagger-step: 30ms;
|
|
137
106
|
|
|
138
107
|
color-scheme: dark;
|
|
139
|
-
}
|
|
140
108
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
109
|
+
--focus-color: var(--accent-400);
|
|
110
|
+
--border-hover: var(--night-400);
|
|
111
|
+
--outline-hover-bg: var(--surface-2);
|
|
112
|
+
--outline-active-bg: var(--surface-3);
|
|
113
|
+
--text-on-danger: var(--night-950);
|
|
114
|
+
--data-color: var(--accent-400);
|
|
115
|
+
--elevated-border: var(--night-600);
|
|
116
|
+
--card-border: var(--night-600);
|
|
117
|
+
--code-color: var(--accent-300);
|
|
118
|
+
--code-border: var(--night-700);
|
|
119
|
+
--table-header-bg: var(--night-900);
|
|
120
|
+
--row-border: var(--night-800);
|
|
121
|
+
--row-hover: var(--night-700);
|
|
122
|
+
--navbar-bg: rgba(1,2,3,.8);
|
|
123
|
+
--nav-active: var(--accent-400);
|
|
124
|
+
--sidebar-bg: var(--night-900);
|
|
125
|
+
--sidebar-active-bg: var(--indigo-800);
|
|
126
|
+
--sidebar-active-text: var(--night-50);
|
|
127
|
+
--sidebar-active-icon: var(--accent-400);
|
|
128
|
+
--switch-off: var(--night-600);
|
|
129
|
+
--tooltip-bg: var(--night-700);
|
|
130
|
+
--tooltip-border: var(--night-600);
|
|
131
|
+
--tooltip-text: var(--night-100);
|
|
132
|
+
--skeleton-base: var(--night-800);
|
|
133
|
+
--skeleton-sheen: var(--night-700);
|
|
134
|
+
--empty-icon: var(--indigo-400);
|
|
135
|
+
|
|
136
|
+
--action-bg: var(--accent);
|
|
137
|
+
--action-hover: var(--accent-hover);
|
|
138
|
+
--action-active: var(--accent-active);
|
|
139
|
+
--text-on-action: var(--text-on-accent);
|
|
140
|
+
--control-border: var(--border-strong);
|
|
141
|
+
--placeholder: var(--text-muted);
|
|
142
|
+
--selection-bg: var(--action-bg);
|
|
143
|
+
--selection-text: var(--text-on-action);
|
|
144
|
+
--font-ui-heading: var(--font-body);
|
|
145
|
+
--text-ui-title: 2rem;
|
|
146
|
+
--control-height-md: 44px;
|
|
147
|
+
--button-padding-md: 12px 20px;
|
|
148
|
+
--surface: var(--surface-1);
|
|
149
|
+
--surface-alt: var(--surface-2);
|
|
150
|
+
--accent: var(--accent-400);
|
|
151
|
+
--accent-hover: var(--accent-300);
|
|
152
|
+
--accent-active: var(--accent-500);
|
|
153
|
+
--text-display-fluid: clamp(2.5rem, 1.5rem + 3.4vw, 5rem);
|
|
154
|
+
--text-on-primary-solid: var(--link);
|
|
155
|
+
--weight-regular: 400;
|
|
156
|
+
--weight-medium: 500;
|
|
157
|
+
--weight-semibold: 600;
|
|
158
|
+
--weight-bold: 700;
|
|
159
|
+
--leading-base: 1.6;
|
|
160
|
+
--leading-lg: 1.55;
|
|
161
|
+
--gutter: 24px;
|
|
162
|
+
--gutter-mobile: 16px;
|
|
163
|
+
|
|
164
|
+
/* Series categóricas: orden estable; acompañar con etiqueta o forma. */
|
|
165
|
+
--chart-1: #52baed;
|
|
166
|
+
--chart-2: #a0587c;
|
|
167
|
+
--chart-3: #2aa79e;
|
|
168
|
+
--chart-4: #aa5849;
|
|
169
|
+
--chart-5: #67a369;
|
|
170
|
+
--chart-6: #946a1c;
|
|
171
|
+
--chart-7: #877cc3;
|
|
172
|
+
/* Ritmo de contenido y formularios. */
|
|
173
|
+
--field-gap: 6px;
|
|
174
|
+
--heading-gap: var(--space-2);
|
|
175
|
+
--content-gap: var(--space-4);
|
|
176
|
+
--card-content-gap: var(--space-4);
|
|
177
|
+
--card-group-gap: var(--space-6);
|
|
178
|
+
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/* == Modo claro (variante) — alternar data-theme en <html> == */
|
|
145
182
|
[data-theme="light"] {
|
|
146
183
|
--bg: #f5f8fb;
|
|
147
184
|
--surface-1: #ffffff;
|
|
@@ -153,28 +190,37 @@
|
|
|
153
190
|
1.53-1.78:1, bajo el mínimo de 3:1 para UI. */
|
|
154
191
|
--text-primary: #14171f;
|
|
155
192
|
--text-secondary: #3d4354;
|
|
156
|
-
--text-muted:
|
|
193
|
+
--text-muted: var(--night-450); /* no night-400: ese caía a 4.27:1 sobre --surface-3 */
|
|
157
194
|
--text-disabled: #9aa0b0;
|
|
158
|
-
--text-heading: #
|
|
159
|
-
--
|
|
160
|
-
|
|
161
|
-
--
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
--
|
|
195
|
+
--text-heading: #14171f;
|
|
196
|
+
--link: #186a94; /* accent-700 · 5.95:1 sobre blanco — accent-600 solo daba 4.01:1 */
|
|
197
|
+
--link-hover: #12506f; /* accent-800 · en light el hover OSCURECE (en dark aclara) */
|
|
198
|
+
--text-on-accent: #010203; /* CTA no cambia entre modos */
|
|
199
|
+
/* Semánticos de light: son a la vez relleno y TEXTO sobre su propio --*-bg tintado,
|
|
200
|
+
así que se calibran contra ese fondo, no contra blanco. */
|
|
201
|
+
--success: #166534;
|
|
202
|
+
--warning: #854d0e;
|
|
203
|
+
--danger: #b02c2c;
|
|
204
|
+
--info: #186a94;
|
|
205
|
+
--success-bg: #e3f5ea; --warning-bg: #fbf3dd;
|
|
206
|
+
--danger-bg: #fbe7e7; --info-bg: #e3f2fb;
|
|
165
207
|
--accent-ghost-hover: rgba(31,135,187,.08);
|
|
166
208
|
--accent-ghost-active: rgba(31,135,187,.14);
|
|
167
209
|
--accent-selected: rgba(82,186,237,.12);
|
|
168
210
|
--overlay: rgba(20,23,31,.45);
|
|
211
|
+
--ring: 0 0 0 3px rgba(31,135,187,.25);
|
|
212
|
+
--shadow-1: 0 1px 3px rgba(53,61,124,.08);
|
|
213
|
+
--shadow-2: 0 4px 10px rgba(53,61,124,.10);
|
|
214
|
+
--shadow-3: 0 12px 28px rgba(53,61,124,.14);
|
|
215
|
+
--glow-accent: 0 0 0 1px rgba(82,186,237,.4), 0 4px 16px rgba(82,186,237,.25);
|
|
216
|
+
color-scheme: light;
|
|
169
217
|
|
|
170
|
-
--
|
|
171
|
-
--
|
|
172
|
-
--focus-color: #1f87bb; /* accent-600 se queda: es UI (4.01 ≥ 3), no texto */
|
|
173
|
-
--border-hover: #b9c3d1;
|
|
218
|
+
--focus-color: #186a94;
|
|
219
|
+
--border-hover: #5f6575;
|
|
174
220
|
--outline-hover-bg: #eaf1f7;
|
|
175
221
|
--outline-active-bg: #d8dfe8;
|
|
176
222
|
--text-on-danger: #ffffff;
|
|
177
|
-
--data-color: #186a94;
|
|
223
|
+
--data-color: #186a94;
|
|
178
224
|
--elevated-border: #d8dfe8;
|
|
179
225
|
--card-border: #d8dfe8;
|
|
180
226
|
--code-color: #186a94;
|
|
@@ -188,38 +234,36 @@
|
|
|
188
234
|
--sidebar-active-bg: #e3f2fb;
|
|
189
235
|
--sidebar-active-text: #14171f;
|
|
190
236
|
--sidebar-active-icon: #1f87bb;
|
|
191
|
-
--switch-off:
|
|
237
|
+
--switch-off: var(--control-border);
|
|
192
238
|
--tooltip-bg: #14171f;
|
|
193
239
|
--tooltip-border: #14171f;
|
|
194
240
|
--tooltip-text: #f6f7f9;
|
|
195
241
|
--skeleton-base: #eaf1f7;
|
|
196
242
|
--skeleton-sheen: #f5f8fb;
|
|
197
|
-
|
|
198
|
-
--ring: 0 0 0 3px rgba(31,135,187,.25);
|
|
199
243
|
--ring-danger: 0 0 0 3px rgba(192,53,53,.2);
|
|
200
|
-
--shadow-1: 0 1px 3px rgba(53,61,124,.08);
|
|
201
|
-
--shadow-2: 0 4px 10px rgba(53,61,124,.10);
|
|
202
|
-
--shadow-3: 0 12px 28px rgba(53,61,124,.14);
|
|
203
|
-
--glow-accent: 0 0 0 1px rgba(82,186,237,.4), 0 4px 16px rgba(82,186,237,.25);
|
|
204
244
|
|
|
205
|
-
|
|
245
|
+
--selection-bg: var(--action-bg);
|
|
246
|
+
--selection-text: var(--text-on-action);
|
|
247
|
+
|
|
248
|
+
/* Series categóricas: orden estable; acompañar con etiqueta o forma. */
|
|
249
|
+
--chart-1: #186a94;
|
|
250
|
+
--chart-2: #853f63;
|
|
251
|
+
--chart-3: #129a92;
|
|
252
|
+
--chart-4: #8e4031;
|
|
253
|
+
--chart-5: #5b975e;
|
|
254
|
+
--chart-6: #8a600a;
|
|
255
|
+
--chart-7: #857bc1;
|
|
206
256
|
}
|
|
207
257
|
|
|
208
|
-
/*
|
|
209
|
-
|
|
210
|
-
============================================================ */
|
|
258
|
+
/* == Accesibilidad del movimiento == */
|
|
259
|
+
|
|
211
260
|
@media (prefers-reduced-motion: reduce) {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
transition-duration: 0.01ms !important;
|
|
216
|
-
scroll-behavior: auto !important;
|
|
261
|
+
:root {
|
|
262
|
+
--duration-instant: 0ms; --duration-fast: 0ms; --duration-base: 0ms;
|
|
263
|
+
--duration-slow: 0ms; --duration-page: 0ms; --stagger-step: 0ms;
|
|
217
264
|
}
|
|
218
265
|
}
|
|
219
266
|
|
|
220
|
-
/* ============================================================
|
|
221
|
-
4. BASE
|
|
222
|
-
============================================================ */
|
|
223
267
|
*, *::before, *::after { box-sizing: border-box; }
|
|
224
268
|
|
|
225
269
|
body {
|
|
@@ -250,7 +294,7 @@ p { max-width: var(--measure); margin: 0 0 var(--space-4); }
|
|
|
250
294
|
a { color: var(--link); text-decoration: none; transition: color var(--duration-fast) var(--ease-out); }
|
|
251
295
|
a:hover { color: var(--link-hover); }
|
|
252
296
|
|
|
253
|
-
::placeholder { color: var(--
|
|
297
|
+
::placeholder { color: var(--placeholder); }
|
|
254
298
|
::selection { background: rgba(82,186,237,.3); }
|
|
255
299
|
|
|
256
300
|
:focus-visible {
|
|
@@ -304,12 +348,12 @@ a:hover { color: var(--link-hover); }
|
|
|
304
348
|
/* Gating de hover (§11.5): los hover que mueven/elevan (transform, box-shadow, glow)
|
|
305
349
|
van dentro de @media (hover: hover) and (pointer: fine) — en touch el tap dispara
|
|
306
350
|
hovers falsos que se quedan pegados. Los hover de solo color/fondo quedan fuera. */
|
|
307
|
-
.btn--primary { background: var(--
|
|
308
|
-
.btn--primary:hover:not(:disabled) { background: var(--
|
|
351
|
+
.btn--primary { background: var(--action-bg); color: var(--text-on-action); }
|
|
352
|
+
.btn--primary:hover:not(:disabled) { background: var(--action-hover); }
|
|
309
353
|
@media (hover: hover) and (pointer: fine) {
|
|
310
354
|
.btn--primary:hover:not(:disabled) { box-shadow: var(--glow-accent); }
|
|
311
355
|
}
|
|
312
|
-
.btn--primary:active:not(:disabled) { background: var(--
|
|
356
|
+
.btn--primary:active:not(:disabled) { background: var(--action-active); box-shadow: none; }
|
|
313
357
|
.btn--primary:disabled { background: var(--surface-3); color: var(--text-disabled); }
|
|
314
358
|
|
|
315
359
|
/* Secundario — índigo (idéntico en ambos temas) */
|
|
@@ -395,7 +439,7 @@ a:hover { color: var(--link-hover); }
|
|
|
395
439
|
|
|
396
440
|
.input, .textarea, .select {
|
|
397
441
|
width: 100%; background: var(--surface-2);
|
|
398
|
-
border: 1px solid var(--border); border-radius: var(--radius-sm);
|
|
442
|
+
border: 1px solid var(--control-border); border-radius: var(--radius-sm);
|
|
399
443
|
color: var(--text-primary); font-family: var(--font-body); font-size: var(--text-base);
|
|
400
444
|
transition: border-color var(--duration-fast) var(--ease-out),
|
|
401
445
|
box-shadow var(--duration-fast) var(--ease-out);
|
|
@@ -471,7 +515,7 @@ a:hover { color: var(--link-hover); }
|
|
|
471
515
|
}
|
|
472
516
|
.segmented--sm label { padding: 0 12px; font-size: var(--text-xs); }
|
|
473
517
|
.segmented input:checked + label {
|
|
474
|
-
background: var(--surface-3); color: var(--
|
|
518
|
+
background: var(--surface-3); color: var(--link);
|
|
475
519
|
font-weight: 600; box-shadow: var(--shadow-1);
|
|
476
520
|
}
|
|
477
521
|
.segmented input:focus-visible + label { outline: var(--focus-ring); outline-offset: 2px; }
|
|
@@ -501,8 +545,8 @@ a:hover { color: var(--link-hover); }
|
|
|
501
545
|
}
|
|
502
546
|
.slider:active::-moz-range-thumb { transform: scale(1.15); }
|
|
503
547
|
@media (prefers-reduced-motion: reduce) {
|
|
504
|
-
.slider::-webkit-slider-thumb { transition
|
|
505
|
-
.slider::-moz-range-thumb { transition
|
|
548
|
+
.slider::-webkit-slider-thumb { transition: none; }
|
|
549
|
+
.slider::-moz-range-thumb { transition: none; }
|
|
506
550
|
}
|
|
507
551
|
|
|
508
552
|
/* ============================================================
|
|
@@ -678,7 +722,7 @@ a:hover { color: var(--link-hover); }
|
|
|
678
722
|
font-variant-numeric: tabular-nums;
|
|
679
723
|
}
|
|
680
724
|
button.metric-chip {
|
|
681
|
-
min-height: var(--
|
|
725
|
+
min-height: var(--control-height-md); padding-inline: var(--space-4);
|
|
682
726
|
cursor: pointer; text-align: left;
|
|
683
727
|
transition: background-color var(--duration-fast) var(--ease-out),
|
|
684
728
|
border-color var(--duration-fast) var(--ease-out),
|
|
@@ -1077,7 +1121,7 @@ button.metric-chip:focus-visible { outline: var(--focus-ring); outline-offset: v
|
|
|
1077
1121
|
font-weight: 600; color: var(--data-color); font-variant-numeric: tabular-nums;
|
|
1078
1122
|
}
|
|
1079
1123
|
@media (prefers-reduced-motion: reduce) {
|
|
1080
|
-
.progress-ring__bar { transition
|
|
1124
|
+
.progress-ring__bar { transition: none; }
|
|
1081
1125
|
}
|
|
1082
1126
|
|
|
1083
1127
|
/* ============================================================
|
|
@@ -1244,13 +1288,13 @@ button.metric-chip:focus-visible { outline: var(--focus-ring); outline-offset: v
|
|
|
1244
1288
|
transition: opacity var(--duration-base) var(--ease-out),
|
|
1245
1289
|
transform var(--duration-base) var(--ease-out),
|
|
1246
1290
|
visibility 0s linear var(--duration-base);
|
|
1247
|
-
}
|
|
1291
|
+
display: none; }
|
|
1248
1292
|
.popover.is-open .popover__panel {
|
|
1249
1293
|
opacity: 1; transform: none; visibility: visible;
|
|
1250
1294
|
transition: opacity var(--duration-base) var(--ease-out),
|
|
1251
1295
|
transform var(--duration-base) var(--ease-out),
|
|
1252
1296
|
visibility 0s;
|
|
1253
|
-
}
|
|
1297
|
+
display: block; }
|
|
1254
1298
|
/* Alineado a la derecha del disparador */
|
|
1255
1299
|
.popover--right .popover__panel { left: auto; right: 0; transform-origin: top right; }
|
|
1256
1300
|
|
|
@@ -1404,3 +1448,168 @@ button.metric-chip:focus-visible { outline: var(--focus-ring); outline-offset: v
|
|
|
1404
1448
|
color: var(--text-secondary); background: var(--surface-2);
|
|
1405
1449
|
border: 1px solid var(--border-strong); border-radius: 6px; box-shadow: var(--shadow-1);
|
|
1406
1450
|
}
|
|
1451
|
+
|
|
1452
|
+
/* CONTRATOS COMPARTIDOS GENERADOS */
|
|
1453
|
+
/* Contratos comunes de interacción; la identidad y los valores viven en tokens.css. */
|
|
1454
|
+
.grid { grid-template-columns: repeat(12, minmax(0, 1fr)); }
|
|
1455
|
+
.grid > *, .field, .card { min-inline-size: 0; }
|
|
1456
|
+
.stack, .card__content, .form-stack, .text-group { display: flex; flex-direction: column; align-items: stretch; }
|
|
1457
|
+
.stack, .card__content { gap: var(--content-gap); }
|
|
1458
|
+
.stack--tight, .text-group { gap: var(--heading-gap); }
|
|
1459
|
+
.stack--cards { gap: var(--card-group-gap); }
|
|
1460
|
+
.form-stack { gap: var(--form-gap); }
|
|
1461
|
+
.cluster { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3); }
|
|
1462
|
+
.card { display: flex; flex-direction: column; gap: var(--card-content-gap); }
|
|
1463
|
+
.field { gap: var(--field-gap); }
|
|
1464
|
+
.field__label, .field__help, .field__error, .field > :is(label, p, span, div) { margin-block: 0; }
|
|
1465
|
+
:where(.field + .field, .field + .btn, .field + .cluster) { margin-block-start: var(--form-gap); }
|
|
1466
|
+
:where(.card + .card) { margin-block-start: var(--card-group-gap); }
|
|
1467
|
+
.stack > *, .card__content > *, .form-stack > *, .text-group > *, .grid > .card,
|
|
1468
|
+
.card > :is(h1, h2, h3, h4, h5, h6, p), .text-group > :is(h1, h2, h3, h4, h5, h6, p),
|
|
1469
|
+
.stack > :is(h1, h2, h3, h4, h5, h6, p) { margin-block: 0; }
|
|
1470
|
+
.form-stack > .field { margin-block: 0; }
|
|
1471
|
+
.btn {
|
|
1472
|
+
block-size: auto;
|
|
1473
|
+
min-block-size: var(--control-height-md);
|
|
1474
|
+
max-inline-size: 100%;
|
|
1475
|
+
white-space: normal;
|
|
1476
|
+
line-height: 1.35;
|
|
1477
|
+
text-align: center;
|
|
1478
|
+
}
|
|
1479
|
+
.btn--sm { min-block-size: var(--control-height-sm, 36px); }
|
|
1480
|
+
.btn--lg { min-block-size: var(--control-height-lg, 52px); }
|
|
1481
|
+
.btn--primary, .icon-btn--primary, .calendar__day--selected, .pagination__btn.is-active {
|
|
1482
|
+
background: var(--action-bg);
|
|
1483
|
+
color: var(--text-on-action);
|
|
1484
|
+
}
|
|
1485
|
+
.btn--primary:hover:not(:disabled), .icon-btn--primary:hover:not(:disabled) { background: var(--action-hover); color: var(--text-on-action); }
|
|
1486
|
+
.btn--primary:active:not(:disabled), .icon-btn--primary:active:not(:disabled) { background: var(--action-active); color: var(--text-on-action); }
|
|
1487
|
+
.input, .textarea, .select, .combobox__input, .search__input, .datepicker__input {
|
|
1488
|
+
max-inline-size: 100%;
|
|
1489
|
+
caret-color: var(--focus-color);
|
|
1490
|
+
}
|
|
1491
|
+
.input, .select, .combobox__input, .search__input, .datepicker__input {
|
|
1492
|
+
block-size: auto; min-block-size: var(--control-height-md);
|
|
1493
|
+
padding-block: var(--space-2); line-height: 1.5;
|
|
1494
|
+
}
|
|
1495
|
+
:is(.input, .textarea, .select, .combobox__input, .search__input, .datepicker__input):not(.input--error, .input--success, .textarea--error, [aria-invalid="true"]) { border-color: var(--control-border); }
|
|
1496
|
+
.input:hover:not(:disabled):not(:focus):not(.input--error, .input--success, [aria-invalid="true"]), .textarea:hover:not(:disabled):not(:focus):not(.textarea--error, [aria-invalid="true"]),
|
|
1497
|
+
.select:hover:not(:disabled):not(:focus), .combobox__input:hover:not(:disabled):not(:focus),
|
|
1498
|
+
.search__input:hover:not(:focus), .datepicker__input:hover:not(:disabled):not(:focus) { border-color: var(--border-hover); }
|
|
1499
|
+
.input:focus-visible, .textarea:focus-visible, .select:focus-visible,
|
|
1500
|
+
.combobox__input:focus-visible, .search__input:focus-visible, .datepicker__input:focus-visible {
|
|
1501
|
+
outline: 2px solid var(--focus-color);
|
|
1502
|
+
outline-offset: 2px;
|
|
1503
|
+
}
|
|
1504
|
+
.input[aria-invalid="true"], .textarea[aria-invalid="true"] { border-color: var(--danger-text, var(--danger)); }
|
|
1505
|
+
.input.input--error, .textarea.textarea--error,
|
|
1506
|
+
.input.input--error:hover:not(:disabled):not(:focus), .textarea.textarea--error:hover:not(:disabled):not(:focus),
|
|
1507
|
+
:is(.input, .textarea, .select, .combobox__input, .search__input, .datepicker__input)[aria-invalid="true"]:hover:not(:disabled):not(:focus) {
|
|
1508
|
+
border-color: var(--danger-text, var(--danger));
|
|
1509
|
+
}
|
|
1510
|
+
.input.input--success, .input.input--success:hover:not(:disabled):not(:focus) { border-color: var(--success-text, var(--success)); }
|
|
1511
|
+
.pagination { max-inline-size: 100%; flex-wrap: wrap; row-gap: var(--space-2); }
|
|
1512
|
+
.pagination__ellipsis { color: var(--text-muted); }
|
|
1513
|
+
.step--current .step__marker { color: var(--link); border-color: var(--focus-color); }
|
|
1514
|
+
.checkbox input:focus-visible ~ .checkbox__box,
|
|
1515
|
+
.radio input:focus-visible ~ .radio__dot,
|
|
1516
|
+
.switch input:focus-visible ~ .switch__track {
|
|
1517
|
+
outline: 2px solid var(--focus-color);
|
|
1518
|
+
outline-offset: 2px;
|
|
1519
|
+
}
|
|
1520
|
+
input.checkbox, input.radio { border-color: var(--control-border); }
|
|
1521
|
+
input.checkbox:hover, input.radio:hover { border-color: var(--focus-color); }
|
|
1522
|
+
input.checkbox:checked, input.checkbox:indeterminate, input.radio:checked { border-color: var(--focus-color); }
|
|
1523
|
+
.switch__track { background: var(--control-border); }
|
|
1524
|
+
.tabs { max-inline-size: 100%; overflow-x: auto; }
|
|
1525
|
+
.tabs__tab { flex-shrink: 0; }
|
|
1526
|
+
.segmented { max-inline-size: 100%; block-size: auto; min-block-size: var(--control-height-md); overflow-x: auto; }
|
|
1527
|
+
.segmented label { padding-block: var(--space-2); }
|
|
1528
|
+
.stat__row, .breadcrumbs, .check-row { flex-wrap: wrap; row-gap: var(--space-2); }
|
|
1529
|
+
.progress-row, .slider-row { flex-wrap: wrap; gap: var(--space-2); }
|
|
1530
|
+
.stat__value { max-inline-size: 100%; white-space: normal; overflow-wrap: anywhere; }
|
|
1531
|
+
.file-upload, .file-upload__label { min-inline-size: 0; max-inline-size: 100%; }
|
|
1532
|
+
.file-upload__button { max-inline-size: 100%; white-space: normal; text-align: center; }
|
|
1533
|
+
.file-upload__hint { overflow-wrap: anywhere; }
|
|
1534
|
+
.table-scroll { max-inline-size: 100%; overflow-x: auto; overscroll-behavior-inline: contain; }
|
|
1535
|
+
.popover__panel, .datepicker__calendar, .combobox__list {
|
|
1536
|
+
max-inline-size: calc(100vw - 2rem);
|
|
1537
|
+
max-block-size: min(32rem, 70dvh);
|
|
1538
|
+
overflow: auto;
|
|
1539
|
+
}
|
|
1540
|
+
.file-upload__input:focus-visible + .file-upload__label { outline: 2px solid var(--focus-color); outline-offset: 2px; }
|
|
1541
|
+
.calendar { max-inline-size: calc(100vw - 2rem); }
|
|
1542
|
+
.ui-title, :is(h1, h2, h3, h4, h5, h6).ui-title, [data-mode="operate"] :is(h1, h2, h3) {
|
|
1543
|
+
font-family: var(--font-ui-heading);
|
|
1544
|
+
letter-spacing: 0;
|
|
1545
|
+
line-height: 1.3;
|
|
1546
|
+
font-weight: var(--weight-semibold);
|
|
1547
|
+
}
|
|
1548
|
+
.ui-title, :is(h1, h2, h3, h4, h5, h6).ui-title, [data-mode="operate"] h1 { font-size: var(--text-ui-title); }
|
|
1549
|
+
[data-mode="operate"] h2 { font-size: var(--text-xl); }
|
|
1550
|
+
[data-mode="operate"] h3 { font-size: var(--text-lg); }
|
|
1551
|
+
.display, .reading-title, :is(h1, h2, h3, h4, h5, h6):is(.display, .reading-title) {
|
|
1552
|
+
font-family: var(--font-display);
|
|
1553
|
+
font-size: var(--text-display-fluid);
|
|
1554
|
+
line-height: 1.08;
|
|
1555
|
+
letter-spacing: var(--tracking-display);
|
|
1556
|
+
text-wrap: balance;
|
|
1557
|
+
}
|
|
1558
|
+
:where(.celeste-reset, .salvia-reset, .bruma-reset, .nocturna-reset, body[data-system]) {
|
|
1559
|
+
scrollbar-color: var(--control-border) var(--bg);
|
|
1560
|
+
}
|
|
1561
|
+
::selection,
|
|
1562
|
+
.celeste-reset ::selection, .salvia-reset ::selection, .bruma-reset ::selection {
|
|
1563
|
+
background: var(--selection-bg); color: var(--selection-text);
|
|
1564
|
+
}
|
|
1565
|
+
::placeholder { color: var(--placeholder); opacity: 1; }
|
|
1566
|
+
:where(a) { text-underline-offset: .2em; text-decoration-thickness: .08em; }
|
|
1567
|
+
.skip-link {
|
|
1568
|
+
position: fixed; inset-block-start: var(--space-2); inset-inline-start: var(--space-2);
|
|
1569
|
+
z-index: 1000; padding: var(--space-3) var(--space-4);
|
|
1570
|
+
background: var(--action-bg); color: var(--text-on-action);
|
|
1571
|
+
border-radius: var(--radius-sm); transform: translateY(-180%);
|
|
1572
|
+
}
|
|
1573
|
+
.skip-link:focus { transform: none; outline: 2px solid var(--focus-color); outline-offset: 2px; }
|
|
1574
|
+
[data-tooltip]::before, [data-tooltip]::after { display: none; }
|
|
1575
|
+
[data-tooltip]:focus-visible::before, [data-tooltip]:focus-visible::after { display: block; }
|
|
1576
|
+
.has-tooltip .tooltip { display: none; }
|
|
1577
|
+
.has-tooltip:has(:focus-visible) .tooltip { display: block; opacity: 1; transform: translate(-50%, 0); }
|
|
1578
|
+
@media (hover: hover) and (pointer: fine) {
|
|
1579
|
+
[data-tooltip]:hover::before, [data-tooltip]:hover::after { display: block; }
|
|
1580
|
+
.has-tooltip:hover .tooltip { display: block; }
|
|
1581
|
+
}
|
|
1582
|
+
@media (pointer: coarse) {
|
|
1583
|
+
.btn, .icon-btn, .segmented label, .pagination button,
|
|
1584
|
+
.tag__close, .search__clear, .toast__close, .check-row,
|
|
1585
|
+
.checkbox:not(input), .radio:not(input), .switch:not(input) {
|
|
1586
|
+
min-block-size: var(--touch-target);
|
|
1587
|
+
min-inline-size: var(--touch-target);
|
|
1588
|
+
}
|
|
1589
|
+
}
|
|
1590
|
+
@media (max-width: 479px) {
|
|
1591
|
+
.btn-group { flex-wrap: wrap; }
|
|
1592
|
+
.modal { max-inline-size: calc(100vw - 2rem); }
|
|
1593
|
+
.stepper { flex-direction: column; align-items: stretch; gap: var(--space-4); }
|
|
1594
|
+
.step { flex-direction: row; align-items: center; gap: var(--space-3); text-align: start; min-inline-size: 0; }
|
|
1595
|
+
.step__label { overflow-wrap: anywhere; }
|
|
1596
|
+
.step__connector { display: none; }
|
|
1597
|
+
}
|
|
1598
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1599
|
+
html, html:focus-within { scroll-behavior: auto; }
|
|
1600
|
+
.spinner, .skeleton, .skeleton::after,
|
|
1601
|
+
.progress--indeterminate .progress__bar, .alert.is-leaving, .toast.is-leaving { animation: none; }
|
|
1602
|
+
.progress--indeterminate .progress__bar { transform: none; }
|
|
1603
|
+
.btn, .icon-btn, .card--interactive, .slider::-webkit-slider-thumb { transform: none; }
|
|
1604
|
+
.btn:active:not(:disabled), .icon-btn:active:not(:disabled), .card--interactive:hover { transform: none; }
|
|
1605
|
+
.btn, .icon-btn { transition: background-color 80ms linear, color 80ms linear; }
|
|
1606
|
+
.menu, .popover__panel, .datepicker__calendar, .link::after { transition: none; }
|
|
1607
|
+
.progress__bar, .progress-ring__value, .accordion__content, .accordion__body { transition: none; }
|
|
1608
|
+
}
|
|
1609
|
+
@media (forced-colors: active) {
|
|
1610
|
+
input.switch, .switch__track { border: 1px solid CanvasText; background: Canvas; }
|
|
1611
|
+
input.switch::after, .switch__track::after { background: CanvasText; }
|
|
1612
|
+
input.switch:checked, .switch input:checked ~ .switch__track { border-color: Highlight; }
|
|
1613
|
+
input.switch:checked::after, .switch input:checked ~ .switch__track::after { background: Highlight; }
|
|
1614
|
+
.checkbox__box, .radio__dot { border-color: CanvasText; }
|
|
1615
|
+
}
|