orbital-ds 0.2.0 → 0.3.0
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/AGENTS.md +57 -0
- package/README.md +22 -14
- package/components.manifest.json +1255 -0
- package/contract.json +82 -38
- package/dist/styles.css +486 -427
- package/dist/themes/qratia.css +14 -14
- package/dist/themes/qratia.fonts.css +2 -0
- package/dist/themes/qratia.scoped.css +247 -0
- package/dist/themes/zyro.css +214 -60
- package/dist/themes/zyro.fonts.css +2 -0
- package/dist/themes/zyro.scoped.css +343 -0
- package/dist/ui/attachment.d.ts +1 -1
- package/dist/ui/badge.d.ts +1 -1
- package/dist/ui/bubble.d.ts +1 -1
- package/dist/ui/button.d.ts +2 -2
- package/dist/ui/input-group.d.ts +1 -1
- package/dist/ui/item.d.ts +2 -2
- package/dist/ui/sidebar.js +4 -4
- package/dist/ui/tabs.d.ts +1 -1
- package/docs/CONTRACT.md +15 -5
- package/package.json +11 -6
- package/scripts/doctor.mjs +88 -28
- package/scripts/manifest.mjs +79 -0
package/dist/themes/qratia.css
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
@import url('https://fonts.googleapis.com/css2?family=Instrument+Sans:ital,wght@0,400..700;1,400..700&display=swap');
|
|
2
|
-
|
|
3
1
|
/*
|
|
4
2
|
* PALETA DEL TEMA — el ÚNICO fichero que se toca para cambiar los colores
|
|
5
3
|
* de la app (el equivalente cromático de config/brand.ts). Claro (:root) y
|
|
@@ -13,6 +11,20 @@
|
|
|
13
11
|
:root {
|
|
14
12
|
--radius: 0.625rem;
|
|
15
13
|
|
|
14
|
+
/* Tipografía: Instrument Sans (fuentes en qratia.fonts.css) */
|
|
15
|
+
--ds-font-sans: 'Instrument Sans', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
|
|
16
|
+
--ds-font-mono: ui-monospace, 'SF Mono', Menlo, monospace;
|
|
17
|
+
|
|
18
|
+
/*
|
|
19
|
+
* Dos sombras de tarjeta: reposo y realce al señalar, EN CAPAS y TINTADAS con
|
|
20
|
+
* la tinta del tema (no negro): una capa tensa pegada a la pieza + una suave más
|
|
21
|
+
* lejana, para que la tarjeta se despegue del lienzo de forma natural.
|
|
22
|
+
*/
|
|
23
|
+
--ds-shadow-card:
|
|
24
|
+
0 1px 2px oklch(0.186 0.048 269 / 0.08), 0 3px 10px oklch(0.186 0.048 269 / 0.07);
|
|
25
|
+
--ds-shadow-card-hover:
|
|
26
|
+
0 3px 6px oklch(0.186 0.048 269 / 0.1), 0 14px 32px oklch(0.186 0.048 269 / 0.14);
|
|
27
|
+
|
|
16
28
|
/*
|
|
17
29
|
* TRES NIVELES DE SUPERFICIE, y cada uno se distingue del de debajo por su
|
|
18
30
|
* propio color — no por el borde. El lienzo NO es blanco puro: si lo fuera no
|
|
@@ -233,15 +245,3 @@
|
|
|
233
245
|
* propia tinta. */
|
|
234
246
|
--sidebar: oklch(0.135 0.032 268); /* centro oscuro: --sb-bg #060B1C */
|
|
235
247
|
}
|
|
236
|
-
|
|
237
|
-
/* Tipografía del tema. */
|
|
238
|
-
@theme inline {
|
|
239
|
-
/*
|
|
240
|
-
* FAMILIA. Instrument Sans es la del ecosistema; el resto de la pila es el
|
|
241
|
-
* respaldo del sistema para el instante previo a que la fuente cargue.
|
|
242
|
-
*/
|
|
243
|
-
--font-sans: 'Instrument Sans', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
|
|
244
|
-
|
|
245
|
-
/* Cifras: la mono para tiempos, identificadores y números comparables. */
|
|
246
|
-
--font-mono: ui-monospace, 'SF Mono', Menlo, monospace;
|
|
247
|
-
}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* PALETA DEL TEMA — el ÚNICO fichero que se toca para cambiar los colores
|
|
3
|
+
* de la app (el equivalente cromático de config/brand.ts). Claro (:root) y
|
|
4
|
+
* oscuro (.dark), en OKLCH. Validado por `pnpm check:contraste`: una paleta
|
|
5
|
+
* nueva que rompa contraste WCAG hace fallar el verify.
|
|
6
|
+
*
|
|
7
|
+
* Qué es cada token y cómo se usa: ver los comentarios de cada bloque y
|
|
8
|
+
* DESIGN.md. Las utilidades de Tailwind se derivan en styles.css (@theme).
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
:root[data-theme='qratia'] {
|
|
12
|
+
--radius: 0.625rem;
|
|
13
|
+
|
|
14
|
+
/* Tipografía: Instrument Sans (fuentes en qratia.fonts.css) */
|
|
15
|
+
--ds-font-sans: 'Instrument Sans', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
|
|
16
|
+
--ds-font-mono: ui-monospace, 'SF Mono', Menlo, monospace;
|
|
17
|
+
|
|
18
|
+
/*
|
|
19
|
+
* Dos sombras de tarjeta: reposo y realce al señalar, EN CAPAS y TINTADAS con
|
|
20
|
+
* la tinta del tema (no negro): una capa tensa pegada a la pieza + una suave más
|
|
21
|
+
* lejana, para que la tarjeta se despegue del lienzo de forma natural.
|
|
22
|
+
*/
|
|
23
|
+
--ds-shadow-card:
|
|
24
|
+
0 1px 2px oklch(0.186 0.048 269 / 0.08), 0 3px 10px oklch(0.186 0.048 269 / 0.07);
|
|
25
|
+
--ds-shadow-card-hover:
|
|
26
|
+
0 3px 6px oklch(0.186 0.048 269 / 0.1), 0 14px 32px oklch(0.186 0.048 269 / 0.14);
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
* TRES NIVELES DE SUPERFICIE, y cada uno se distingue del de debajo por su
|
|
30
|
+
* propio color — no por el borde. El lienzo NO es blanco puro: si lo fuera no
|
|
31
|
+
* habría sitio por encima para dos niveles elevados, porque el blanco es el
|
|
32
|
+
* techo. De ahí que el orden sea lienzo gris claro -> tarjeta -> panel
|
|
33
|
+
* flotante, y no al revés.
|
|
34
|
+
*/
|
|
35
|
+
--background: oklch(0.967 0.011 244); /* centro: --bg #EEF5FB */
|
|
36
|
+
--foreground: oklch(
|
|
37
|
+
0.186 0.048 269
|
|
38
|
+
); /* centro: --text #0A1128, la tinta de marca */
|
|
39
|
+
|
|
40
|
+
--card: oklch(1 0 0); /* centro: --card #FFFFFF */
|
|
41
|
+
--card-foreground: oklch(0.186 0.048 269);
|
|
42
|
+
|
|
43
|
+
/*
|
|
44
|
+
* TERCER nivel, DENTRO de la tarjeta: citas, evidencias, el reproductor. Un
|
|
45
|
+
* paso más oscuro que `card` y uno más claro que `background` — el contenido
|
|
46
|
+
* anidado se distingue sin una línea nueva.
|
|
47
|
+
*/
|
|
48
|
+
--inset: oklch(0.98 0.007 248); /* centro: --row #F5F9FD */
|
|
49
|
+
--inset-foreground: oklch(0.186 0.048 269);
|
|
50
|
+
|
|
51
|
+
/* Con la tarjeta en blanco puro —el techo— el panel flotante ya no puede
|
|
52
|
+
* elevarse más: se distingue hundiéndose un paso, no subiendo. */
|
|
53
|
+
--popover: oklch(0.982 0.008 246);
|
|
54
|
+
--popover-foreground: oklch(0.186 0.048 269);
|
|
55
|
+
|
|
56
|
+
/*
|
|
57
|
+
* IDENTIDAD. `primary` es la TINTA (#0A1128), no el cian: el color sólido de
|
|
58
|
+
* acción es la tinta de marca, y el cian actúa de acento sobre ella. Un botón
|
|
59
|
+
* cian sobre lienzo claro no alcanzaría el contraste de texto.
|
|
60
|
+
*/
|
|
61
|
+
--primary: oklch(0.186 0.048 269); /* centro: --primary #0A1128 */
|
|
62
|
+
--primary-foreground: oklch(1 0 0);
|
|
63
|
+
|
|
64
|
+
--secondary: oklch(0.941 0.016 245); /* centro: --muted-bg #E3EDF6 */
|
|
65
|
+
--secondary-foreground: oklch(0.271 0.056 268);
|
|
66
|
+
|
|
67
|
+
--muted: oklch(0.941 0.016 245);
|
|
68
|
+
--muted-foreground: oklch(0.524 0.044 259); /* centro: --muted #5B6B84 */
|
|
69
|
+
|
|
70
|
+
/*
|
|
71
|
+
* El cian, como TINTE de superficie: estado activo, resalte, selección. Aquí no
|
|
72
|
+
* es texto, así que su luminosidad alta no es un problema — al contrario, es lo
|
|
73
|
+
* que lo hace legible como fondo.
|
|
74
|
+
*/
|
|
75
|
+
--accent: oklch(0.941 0.03 220); /* cian rebajado a superficie */
|
|
76
|
+
--accent-foreground: oklch(0.441 0.088 230);
|
|
77
|
+
|
|
78
|
+
/*
|
|
79
|
+
* TEXTO acentuado y enlaces — DISTINTO del acento de superficie: el cian de
|
|
80
|
+
* marca (#00B4D8, L 0.711) NO alcanza 4.5:1 sobre blanco por mucho que se vea
|
|
81
|
+
* bien. Usar `--accent` en texto es el error que este par de tokens evita.
|
|
82
|
+
*/
|
|
83
|
+
--link: oklch(0.534 0.107 231); /* centro: --link #00779F */
|
|
84
|
+
--link-hover: oklch(0.441 0.088 230); /* centro: --link-hover #005B7A */
|
|
85
|
+
|
|
86
|
+
/* Cian pleno de marca. Superficies, trazos y focos — NUNCA texto sobre claro. */
|
|
87
|
+
--brand: oklch(0.711 0.129 219); /* centro: --accent #00B4D8 */
|
|
88
|
+
--brand-bright: oklch(
|
|
89
|
+
0.844 0.146 209
|
|
90
|
+
); /* centro: --accent-bright #00E5FF */
|
|
91
|
+
|
|
92
|
+
--destructive: oklch(0.577 0.215 27); /* centro: --risk #DC2626 */
|
|
93
|
+
--destructive-foreground: oklch(1 0 0);
|
|
94
|
+
|
|
95
|
+
/*
|
|
96
|
+
* `border` separa superficies y `input` delimita un CONTROL. No es lo mismo:
|
|
97
|
+
* el límite de un campo de formulario es información y WCAG le exige 3:1.
|
|
98
|
+
*/
|
|
99
|
+
--border: oklch(0.92 0.017 248); /* centro: --border #DCE6F0 */
|
|
100
|
+
--input: oklch(0.62 0.045 250);
|
|
101
|
+
|
|
102
|
+
/* El foco es un elemento de interfaz y WCAG le exige 3:1: el cian pleno no lo
|
|
103
|
+
* alcanza sobre el lienzo claro. Lleva por tanto el tono de enlace. */
|
|
104
|
+
--ring: oklch(0.534 0.107 231);
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
* ESTADO del dominio de calidad. Cuatro niveles, cada uno con su color pleno
|
|
108
|
+
* —texto, trazo, icono— y su versión suave para fondo de etiqueta.
|
|
109
|
+
* `sin-dato` es un nivel propio a propósito: un indicador sin medir no es un
|
|
110
|
+
* cero, y el color tiene que decir lo mismo.
|
|
111
|
+
*/
|
|
112
|
+
--danger: oklch(0.5 0.2 27);
|
|
113
|
+
--danger-soft: oklch(0.94 0.035 27);
|
|
114
|
+
|
|
115
|
+
--warning: oklch(0.52 0.12 65);
|
|
116
|
+
--warning-soft: oklch(0.94 0.05 75);
|
|
117
|
+
|
|
118
|
+
--success: oklch(0.5 0.13 152);
|
|
119
|
+
--success-soft: oklch(0.93 0.04 152);
|
|
120
|
+
|
|
121
|
+
--neutral: oklch(0.518 0.03 262);
|
|
122
|
+
--neutral-soft: oklch(0.935 0.014 246);
|
|
123
|
+
|
|
124
|
+
/* `info` NO valora: no dice si algo va bien o mal, dice de dónde sale. Lleva
|
|
125
|
+
* el azul de la familia del enlace, distinto de los tres tonos que sí juzgan
|
|
126
|
+
* (rojo, ámbar, verde) y del gris de «sin dato». */
|
|
127
|
+
--info: oklch(0.49 0.105 231);
|
|
128
|
+
--info-soft: oklch(0.94 0.03 231);
|
|
129
|
+
|
|
130
|
+
/*
|
|
131
|
+
* Series de gráficas — paleta VALIDADA (daltonismo, croma, separación), no
|
|
132
|
+
* elegida por gusto. El ORDEN es estable: la ranura 1 es siempre la misma
|
|
133
|
+
* serie; un filtro que cambie cuántas series hay no repinta las que quedan.
|
|
134
|
+
*/
|
|
135
|
+
--chart-1: #2a78d6; /* azul */
|
|
136
|
+
--chart-2: #eb6834; /* naranja */
|
|
137
|
+
--chart-3: #1baf7a; /* verde agua */
|
|
138
|
+
--chart-4: #eda100; /* amarillo */
|
|
139
|
+
--chart-5: #e87ba4; /* magenta */
|
|
140
|
+
|
|
141
|
+
/*
|
|
142
|
+
* SUPERFICIE DE MARCA — la tinta, y la MISMA en los dos modos. Es la pieza
|
|
143
|
+
* que identifica al producto: quien llega desde el centro reconoce el mismo
|
|
144
|
+
* chrome. Por eso NO se redefine en `.dark`.
|
|
145
|
+
*/
|
|
146
|
+
--sidebar: oklch(0.186 0.048 269); /* centro: --sb-bg #0A1128 */
|
|
147
|
+
--sidebar-foreground: oklch(0.919 0.022 246); /* centro: --sb-fg #D9E6F2 */
|
|
148
|
+
/* Destino activo: el propio cian de marca al 12% sobre el fondo de la barra —
|
|
149
|
+
* un sólido inventado pesa de más y deja de leerse como tinte. */
|
|
150
|
+
--sidebar-accent: color-mix(
|
|
151
|
+
in oklch,
|
|
152
|
+
var(--brand-bright) 12%,
|
|
153
|
+
var(--sidebar)
|
|
154
|
+
);
|
|
155
|
+
--sidebar-accent-foreground: oklch(
|
|
156
|
+
0.89 0.092 213
|
|
157
|
+
); /* centro: --sb-active-fg #8FEBFF */
|
|
158
|
+
--sidebar-primary: oklch(0.844 0.146 209);
|
|
159
|
+
--sidebar-primary-foreground: oklch(0.186 0.048 269);
|
|
160
|
+
--sidebar-border: oklch(0.919 0.022 246 / 12%); /* centro: --sb-border */
|
|
161
|
+
--sidebar-ring: oklch(0.711 0.129 219);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
:root[data-theme='qratia'].dark {
|
|
165
|
+
/*
|
|
166
|
+
* Gris elevado, no negro. Un fondo casi negro con texto claro produce halación
|
|
167
|
+
* y en jornadas de revisión eso cansa. Conserva los tres niveles de superficie.
|
|
168
|
+
*/
|
|
169
|
+
--background: oklch(
|
|
170
|
+
0.186 0.048 269
|
|
171
|
+
); /* centro oscuro: --bg = la tinta #0A1128 */
|
|
172
|
+
--foreground: oklch(0.952 0.013 252); /* centro: --text #E9F0F8 */
|
|
173
|
+
|
|
174
|
+
--card: oklch(0.229 0.054 267); /* centro: --card #111B36 */
|
|
175
|
+
--card-foreground: oklch(0.952 0.013 252);
|
|
176
|
+
|
|
177
|
+
/* Mismo tono, paso propio de la superficie oscura: un escalón MÁS OSCURO que
|
|
178
|
+
* `card`, porque aquí elevar es aclarar y el incrustado va hundido. */
|
|
179
|
+
--inset: oklch(0.205 0.05 268);
|
|
180
|
+
--inset-foreground: oklch(0.952 0.013 252);
|
|
181
|
+
|
|
182
|
+
--popover: oklch(0.262 0.052 267);
|
|
183
|
+
--popover-foreground: oklch(0.952 0.013 252);
|
|
184
|
+
|
|
185
|
+
/*
|
|
186
|
+
* En oscuro se INVIERTE el reparto: aquí la acción sólida es el CIAN sobre
|
|
187
|
+
* tinta, porque la tinta ya es el lienzo y un botón del color del fondo no
|
|
188
|
+
* sería un botón. Es la misma identidad leída al revés.
|
|
189
|
+
*/
|
|
190
|
+
--primary: oklch(0.844 0.146 209); /* centro oscuro: --primary #00E5FF */
|
|
191
|
+
--primary-foreground: oklch(0.186 0.048 269);
|
|
192
|
+
|
|
193
|
+
--secondary: oklch(0.275 0.048 267);
|
|
194
|
+
--secondary-foreground: oklch(0.952 0.013 252);
|
|
195
|
+
|
|
196
|
+
--muted: oklch(0.262 0.048 267);
|
|
197
|
+
--muted-foreground: oklch(0.711 0.041 259); /* centro: --muted #93A3BC */
|
|
198
|
+
|
|
199
|
+
--accent: oklch(0.3 0.055 240);
|
|
200
|
+
--accent-foreground: oklch(0.89 0.092 213);
|
|
201
|
+
|
|
202
|
+
/* Sobre fondo oscuro el cian SÍ se lee: aquí enlace y acento convergen. */
|
|
203
|
+
--link: oklch(0.89 0.092 213); /* centro: --link #66EDFF */
|
|
204
|
+
--link-hover: oklch(0.93 0.07 210); /* centro: --link-hover #9BF3FF */
|
|
205
|
+
|
|
206
|
+
--brand: oklch(0.844 0.146 209);
|
|
207
|
+
--brand-bright: oklch(0.844 0.146 209);
|
|
208
|
+
|
|
209
|
+
/* Sobre un rojo claro, el texto legible es el oscuro (medido: el claro daba 2.77:1). */
|
|
210
|
+
--destructive: oklch(0.711 0.166 22); /* centro: --risk #F87171 */
|
|
211
|
+
--destructive-foreground: oklch(0.16 0.02 27);
|
|
212
|
+
|
|
213
|
+
/* Bordes con color sólido y no con alfa sobre el fondo: el alfa hace que el
|
|
214
|
+
* mismo token se vea distinto según la superficie de debajo. */
|
|
215
|
+
--border: oklch(0.32 0.045 266);
|
|
216
|
+
--input: oklch(0.5 0.05 262);
|
|
217
|
+
--ring: oklch(0.844 0.146 209);
|
|
218
|
+
|
|
219
|
+
--danger: oklch(0.7 0.17 27);
|
|
220
|
+
--danger-soft: oklch(0.28 0.07 27);
|
|
221
|
+
|
|
222
|
+
--warning: oklch(0.78 0.13 75);
|
|
223
|
+
--warning-soft: oklch(0.3 0.06 75);
|
|
224
|
+
|
|
225
|
+
--success: oklch(0.74 0.14 155);
|
|
226
|
+
--success-soft: oklch(0.28 0.06 155);
|
|
227
|
+
|
|
228
|
+
--neutral: oklch(0.7 0.03 260);
|
|
229
|
+
--neutral-soft: oklch(0.265 0.035 266);
|
|
230
|
+
|
|
231
|
+
--info: oklch(0.82 0.1 220);
|
|
232
|
+
--info-soft: oklch(0.28 0.055 230);
|
|
233
|
+
|
|
234
|
+
/* Los MISMOS tonos, con el paso que corresponde a la superficie oscura — no
|
|
235
|
+
* una inversión automática del modo claro. Validado aparte: pasa todas las
|
|
236
|
+
* comprobaciones, contraste incluido. */
|
|
237
|
+
--chart-1: #3987e5; /* azul */
|
|
238
|
+
--chart-2: #d95926; /* naranja */
|
|
239
|
+
--chart-3: #199e70; /* verde agua */
|
|
240
|
+
--chart-4: #c98500; /* amarillo */
|
|
241
|
+
--chart-5: #d55181; /* magenta */
|
|
242
|
+
|
|
243
|
+
/* La barra NO se redefine aquí (superficie de MARCA, la misma en los dos
|
|
244
|
+
* modos). Solo se hunde un paso respecto al lienzo, que en oscuro ya es la
|
|
245
|
+
* propia tinta. */
|
|
246
|
+
--sidebar: oklch(0.135 0.032 268); /* centro oscuro: --sb-bg #060B1C */
|
|
247
|
+
}
|
package/dist/themes/zyro.css
CHANGED
|
@@ -1,57 +1,34 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* TEMA zyro — «liquid glass» (traducido de faro-orbital-zyro-ui
|
|
2
|
+
* TEMA zyro — «liquid glass» (traducido de faro-orbital-zyro-ui).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Personalidad: lavanda claro / azul muy oscuro, acento azul profundo (claro) y
|
|
5
|
+
* cian (oscuro). El cristal vive en la capa de NAVEGACIÓN y CONTROLES (sidebar,
|
|
6
|
+
* campos, menús); el CONTENIDO (tarjetas) se mantiene casi opaco, como indican
|
|
7
|
+
* las guías de cristal. Sidebar a ras de borde, sin silueta flotante. Acción
|
|
8
|
+
* primaria = píldora con degradado de marca y brillo.
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
10
|
+
* Estructura del fichero:
|
|
11
|
+
* 1. Variables claras (:root) y oscuras (.dark) — el CONTRATO del tema.
|
|
12
|
+
* 2. Capa de PERSONALIDAD — reglas sobre los ganchos del DOM (`data-slot`,
|
|
13
|
+
* `data-variant`…) escritas solo con variables. Va SIN capa para ganar a las
|
|
14
|
+
* utilidades de los componentes, así que define también los estados
|
|
15
|
+
* (hover, active). Es lo que da forma propia a los elementos.
|
|
11
16
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* Valores derivados (no vienen tal cual de zyro-ui): danger, danger-soft,
|
|
16
|
-
* neutral(-soft), link-hover, brand-bright y inset, que zyro no define con
|
|
17
|
-
* esos nombres; y el texto sobre el primario en oscuro, que se oscurece para
|
|
18
|
-
* alcanzar contraste AA.
|
|
19
|
-
*
|
|
20
|
-
* Tipografía: Montserrat (titulares) + Roboto (cuerpo). Cárgalas en la app
|
|
21
|
-
* (<link> a Google Fonts o self-host).
|
|
17
|
+
* Variables `--zy-*`: privadas de este tema (no son contrato).
|
|
18
|
+
* Importar DESPUÉS de la estructura. Fuentes: `zyro.fonts.css`, lo primero del CSS.
|
|
22
19
|
*/
|
|
23
20
|
|
|
24
|
-
|
|
25
|
-
/* Tipografía */
|
|
26
|
-
--font-sans: 'Roboto', system-ui, -apple-system, sans-serif;
|
|
27
|
-
--font-display: 'Montserrat', system-ui, -apple-system, sans-serif;
|
|
28
|
-
--font-mono: ui-monospace, 'SF Mono', Menlo, monospace;
|
|
29
|
-
|
|
30
|
-
/* Escala de radios Zyro: el radio crece con el tamaño del contenedor. */
|
|
31
|
-
--radius-sm: 7px;
|
|
32
|
-
--radius-md: 10px;
|
|
33
|
-
--radius-lg: 14px;
|
|
34
|
-
--radius-xl: 18px;
|
|
35
|
-
--radius-2xl: 22px;
|
|
36
|
-
--radius-control: 10px;
|
|
37
|
-
--radius-overlay: 22px;
|
|
38
|
-
|
|
39
|
-
/* Sombras de cristal: capa tensa + difusa y brillo interior en el borde. */
|
|
40
|
-
--shadow-card: 0 2px 14px rgba(28, 48, 100, 0.07);
|
|
41
|
-
--shadow-card-hover:
|
|
42
|
-
0 4px 30px rgba(28, 48, 100, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.85);
|
|
43
|
-
--shadow-raised:
|
|
44
|
-
0 4px 30px rgba(28, 48, 100, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.85);
|
|
45
|
-
--shadow-overlay:
|
|
46
|
-
0 14px 52px rgba(28, 48, 100, 0.12), inset 0 1px 0 rgba(255, 255, 255, 0.95);
|
|
47
|
-
--shadow-popover:
|
|
48
|
-
0 14px 52px rgba(28, 48, 100, 0.12), inset 0 1px 0 rgba(255, 255, 255, 0.95);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/* ── PIEL CLARA ─────────────────────────────────────────────────────────── */
|
|
21
|
+
/* ── 1. VARIABLES · PIEL CLARA ───────────────────────────────────────────── */
|
|
52
22
|
:root {
|
|
53
23
|
--radius: 18px;
|
|
54
24
|
|
|
25
|
+
/* Tipografía: Montserrat (titulares) + Roboto (cuerpo) */
|
|
26
|
+
--ds-font-sans: 'Roboto', system-ui, -apple-system, sans-serif;
|
|
27
|
+
--ds-font-display: 'Montserrat', system-ui, -apple-system, sans-serif;
|
|
28
|
+
--ds-font-mono: ui-monospace, 'SF Mono', Menlo, monospace;
|
|
29
|
+
--ds-heading-tracking: -0.01em;
|
|
30
|
+
|
|
31
|
+
/* Color */
|
|
55
32
|
--background: #eaeefb;
|
|
56
33
|
--foreground: rgba(14, 22, 48, 0.92);
|
|
57
34
|
|
|
@@ -81,16 +58,15 @@
|
|
|
81
58
|
--chart-4: #eb1919;
|
|
82
59
|
--chart-5: #9747ff;
|
|
83
60
|
|
|
84
|
-
--sidebar: rgba(255, 255, 255, 0.
|
|
85
|
-
--sidebar-foreground: rgba(14, 22, 48, 0.
|
|
61
|
+
--sidebar: rgba(255, 255, 255, 0.58);
|
|
62
|
+
--sidebar-foreground: rgba(14, 22, 48, 0.78);
|
|
86
63
|
--sidebar-primary: #0349fe;
|
|
87
64
|
--sidebar-primary-foreground: #ffffff;
|
|
88
65
|
--sidebar-accent: rgba(3, 73, 254, 0.09);
|
|
89
66
|
--sidebar-accent-foreground: #0349fe;
|
|
90
|
-
--sidebar-border: rgba(168, 190, 235, 0.
|
|
67
|
+
--sidebar-border: rgba(168, 190, 235, 0.35);
|
|
91
68
|
--sidebar-ring: #0349fe;
|
|
92
69
|
|
|
93
|
-
/* Estados (variante oscura para texto sobre claro) */
|
|
94
70
|
--danger: #c21414;
|
|
95
71
|
--danger-soft: rgba(235, 25, 25, 0.1);
|
|
96
72
|
--warning: #9a6e00;
|
|
@@ -109,19 +85,68 @@
|
|
|
109
85
|
--brand: #0349fe;
|
|
110
86
|
--brand-bright: #36b3ed;
|
|
111
87
|
|
|
112
|
-
/*
|
|
113
|
-
|
|
88
|
+
/* Formas: la esquina crece con el tamaño del contenedor (7·10·14·18·22) */
|
|
89
|
+
--ds-radius-sm: 7px;
|
|
90
|
+
--ds-radius-md: 10px;
|
|
91
|
+
--ds-radius-lg: 14px;
|
|
92
|
+
--ds-radius-xl: 18px;
|
|
93
|
+
--ds-radius-2xl: 22px;
|
|
94
|
+
--ds-radius-control: 10px;
|
|
95
|
+
--ds-radius-overlay: 22px;
|
|
96
|
+
|
|
97
|
+
/* Sombras de cristal: capa tenue + brillo interior en el borde superior */
|
|
98
|
+
--ds-shadow-card: 0 2px 14px rgba(28, 48, 100, 0.07);
|
|
99
|
+
--ds-shadow-card-hover: 0 6px 26px rgba(28, 48, 100, 0.1);
|
|
100
|
+
--ds-shadow-raised: 0 4px 30px rgba(28, 48, 100, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.85);
|
|
101
|
+
--ds-shadow-overlay: 0 14px 52px rgba(28, 48, 100, 0.12), inset 0 1px 0 rgba(255, 255, 255, 0.95);
|
|
102
|
+
--ds-shadow-popover: 0 14px 52px rgba(28, 48, 100, 0.12), inset 0 1px 0 rgba(255, 255, 255, 0.95);
|
|
103
|
+
|
|
104
|
+
/* Medidas: controles algo más altos y holgados */
|
|
105
|
+
--ds-control-h-sm: 2.25rem;
|
|
106
|
+
--ds-control-h-md: 2.5rem;
|
|
107
|
+
--ds-control-h-lg: 2.75rem;
|
|
108
|
+
--ds-button-px-sm: 1rem;
|
|
109
|
+
--ds-button-px-md: 1.25rem;
|
|
110
|
+
--ds-button-px-lg: 1.5rem;
|
|
111
|
+
--ds-field-px: 1rem;
|
|
112
|
+
|
|
113
|
+
/* Materiales: cristal en navegación y controles; tarjetas sin desenfoque */
|
|
114
114
|
--ds-sidebar-backdrop: blur(28px) saturate(180%);
|
|
115
115
|
--ds-overlay-backdrop: blur(28px) saturate(180%);
|
|
116
116
|
--ds-field-backdrop: blur(12px) saturate(160%);
|
|
117
117
|
--ds-card-backdrop: none;
|
|
118
118
|
--ds-page-backdrop:
|
|
119
|
-
radial-gradient(
|
|
120
|
-
radial-gradient(
|
|
121
|
-
radial-gradient(
|
|
119
|
+
radial-gradient(55% 45% at 78% 6%, rgba(54, 179, 237, 0.3), transparent 70%),
|
|
120
|
+
radial-gradient(50% 45% at 96% 58%, rgba(3, 73, 254, 0.16), transparent 70%),
|
|
121
|
+
radial-gradient(55% 50% at 40% 106%, rgba(151, 71, 255, 0.14), transparent 70%);
|
|
122
|
+
|
|
123
|
+
/* Sidebar a ras de borde: sin separación, sin silueta; filo de 1px */
|
|
124
|
+
--ds-sidebar-pad: 0px;
|
|
125
|
+
--ds-sidebar-radius: 0px;
|
|
126
|
+
--ds-sidebar-shadow: 0 0 #0000;
|
|
127
|
+
--ds-sidebar-ring: 0px;
|
|
128
|
+
--ds-sidebar-edge: 1px solid var(--zy-glass-bs);
|
|
129
|
+
--ds-sidebar-item-radius: var(--ds-radius-lg);
|
|
130
|
+
|
|
131
|
+
/* Privadas de zyro */
|
|
132
|
+
--zy-accent-g: linear-gradient(135deg, #0349fe, #36b3ed);
|
|
133
|
+
--zy-accent-glow: rgba(3, 73, 254, 0.24);
|
|
134
|
+
--zy-glass-bt: rgba(255, 255, 255, 0.95);
|
|
135
|
+
--zy-glass-bs: rgba(168, 190, 235, 0.4);
|
|
136
|
+
--zy-card-bt: rgba(255, 255, 255, 1);
|
|
137
|
+
--zy-card-bs: rgba(168, 190, 235, 0.46);
|
|
138
|
+
--zy-field-bg: rgba(255, 255, 255, 0.72);
|
|
139
|
+
--zy-field-b: rgba(168, 190, 235, 0.55);
|
|
140
|
+
--zy-field-bt: rgba(255, 255, 255, 1);
|
|
141
|
+
--zy-pill: rgba(255, 255, 255, 0.55);
|
|
142
|
+
--zy-pill-on: rgba(255, 255, 255, 0.98);
|
|
143
|
+
--zy-conv-h: rgba(20, 40, 90, 0.04);
|
|
144
|
+
--zy-conv-a: rgba(3, 73, 254, 0.07);
|
|
145
|
+
--zy-conv-ab: rgba(3, 73, 254, 0.24);
|
|
146
|
+
--zy-ease: cubic-bezier(0.2, 0.7, 0.2, 1);
|
|
122
147
|
}
|
|
123
148
|
|
|
124
|
-
/* ── PIEL OSCURA
|
|
149
|
+
/* ── 1b. VARIABLES · PIEL OSCURA ─────────────────────────────────────────── */
|
|
125
150
|
.dark {
|
|
126
151
|
--background: #0e3148;
|
|
127
152
|
--foreground: rgba(255, 255, 255, 0.94);
|
|
@@ -153,7 +178,7 @@
|
|
|
153
178
|
--chart-5: #9747ff;
|
|
154
179
|
|
|
155
180
|
--sidebar: rgba(255, 255, 255, 0.04);
|
|
156
|
-
--sidebar-foreground: rgba(255, 255, 255, 0.
|
|
181
|
+
--sidebar-foreground: rgba(255, 255, 255, 0.72);
|
|
157
182
|
--sidebar-primary: #36b3ed;
|
|
158
183
|
--sidebar-primary-foreground: #04121c;
|
|
159
184
|
--sidebar-accent: rgba(54, 179, 237, 0.16);
|
|
@@ -179,11 +204,140 @@
|
|
|
179
204
|
--brand: #36b3ed;
|
|
180
205
|
--brand-bright: #7fd0f5;
|
|
181
206
|
|
|
207
|
+
--ds-shadow-card: 0 2px 14px rgba(0, 0, 0, 0.3);
|
|
208
|
+
--ds-shadow-card-hover: 0 6px 26px rgba(0, 0, 0, 0.38);
|
|
209
|
+
--ds-shadow-raised: 0 8px 40px rgba(0, 0, 0, 0.28), inset 0 1px 0 rgba(255, 255, 255, 0.1);
|
|
210
|
+
--ds-shadow-overlay: 0 22px 64px rgba(0, 0, 0, 0.36), inset 0 1px 0 rgba(255, 255, 255, 0.13);
|
|
211
|
+
--ds-shadow-popover: 0 22px 64px rgba(0, 0, 0, 0.36), inset 0 1px 0 rgba(255, 255, 255, 0.13);
|
|
212
|
+
|
|
182
213
|
--ds-sidebar-backdrop: blur(24px) saturate(180%);
|
|
183
214
|
--ds-overlay-backdrop: blur(24px) saturate(180%);
|
|
184
|
-
--ds-field-backdrop: blur(12px) saturate(160%);
|
|
185
215
|
--ds-page-backdrop:
|
|
186
|
-
radial-gradient(
|
|
187
|
-
radial-gradient(
|
|
188
|
-
radial-gradient(
|
|
216
|
+
radial-gradient(55% 45% at 78% 6%, rgba(54, 179, 237, 0.26), transparent 70%),
|
|
217
|
+
radial-gradient(50% 45% at 96% 58%, rgba(3, 73, 254, 0.24), transparent 70%),
|
|
218
|
+
radial-gradient(55% 50% at 40% 106%, rgba(151, 71, 255, 0.2), transparent 70%);
|
|
219
|
+
|
|
220
|
+
--zy-accent-g: linear-gradient(135deg, #36b3ed, #0349fe);
|
|
221
|
+
--zy-accent-glow: rgba(54, 179, 237, 0.42);
|
|
222
|
+
--zy-glass-bt: rgba(255, 255, 255, 0.3);
|
|
223
|
+
--zy-glass-bs: rgba(255, 255, 255, 0.07);
|
|
224
|
+
--zy-card-bt: rgba(255, 255, 255, 0.11);
|
|
225
|
+
--zy-card-bs: rgba(255, 255, 255, 0.06);
|
|
226
|
+
--zy-field-bg: rgba(255, 255, 255, 0.06);
|
|
227
|
+
--zy-field-b: rgba(255, 255, 255, 0.12);
|
|
228
|
+
--zy-field-bt: rgba(255, 255, 255, 0.26);
|
|
229
|
+
--zy-pill: rgba(255, 255, 255, 0.05);
|
|
230
|
+
--zy-pill-on: rgba(255, 255, 255, 0.12);
|
|
231
|
+
--zy-conv-h: rgba(255, 255, 255, 0.05);
|
|
232
|
+
--zy-conv-a: rgba(54, 179, 237, 0.14);
|
|
233
|
+
--zy-conv-ab: rgba(54, 179, 237, 0.4);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/* ── 2. PERSONALIDAD ─────────────────────────────────────────────────────────
|
|
237
|
+
* Sin capa: gana a las utilidades de los componentes. Solo variables.
|
|
238
|
+
*/
|
|
239
|
+
:root {
|
|
240
|
+
/* Botones: píldora. Acción primaria con degradado de marca y brillo. */
|
|
241
|
+
[data-slot='button'] {
|
|
242
|
+
border-radius: 9999px;
|
|
243
|
+
transition: all var(--ds-motion-base) var(--zy-ease);
|
|
244
|
+
}
|
|
245
|
+
[data-slot='button'][data-size^='icon'] {
|
|
246
|
+
border-radius: var(--ds-radius-xl);
|
|
247
|
+
}
|
|
248
|
+
[data-slot='button']:active:not(:disabled) {
|
|
249
|
+
transform: scale(0.98);
|
|
250
|
+
}
|
|
251
|
+
[data-slot='button'][data-variant='default'] {
|
|
252
|
+
background-color: transparent;
|
|
253
|
+
background-image: var(--zy-accent-g);
|
|
254
|
+
color: #ffffff;
|
|
255
|
+
border-color: transparent;
|
|
256
|
+
box-shadow: 0 4px 16px var(--zy-accent-glow);
|
|
257
|
+
}
|
|
258
|
+
[data-slot='button'][data-variant='default']:hover:not(:disabled) {
|
|
259
|
+
filter: brightness(1.1);
|
|
260
|
+
box-shadow: 0 6px 22px var(--zy-accent-glow);
|
|
261
|
+
}
|
|
262
|
+
[data-slot='button'][data-variant='destructive'] {
|
|
263
|
+
box-shadow: 0 4px 16px rgba(235, 25, 25, 0.3);
|
|
264
|
+
}
|
|
265
|
+
[data-slot='button'][data-variant='outline'],
|
|
266
|
+
[data-slot='button'][data-variant='secondary'] {
|
|
267
|
+
border: 1px solid var(--zy-field-b);
|
|
268
|
+
background: color-mix(in oklch, var(--foreground) 5%, var(--background));
|
|
269
|
+
color: var(--muted-foreground);
|
|
270
|
+
}
|
|
271
|
+
[data-slot='button'][data-variant='outline']:hover:not(:disabled),
|
|
272
|
+
[data-slot='button'][data-variant='secondary']:hover:not(:disabled) {
|
|
273
|
+
background: color-mix(in oklch, var(--foreground) 11%, var(--background));
|
|
274
|
+
color: var(--foreground);
|
|
275
|
+
}
|
|
276
|
+
[data-slot='button'][data-variant='ghost']:hover:not(:disabled) {
|
|
277
|
+
background: var(--zy-conv-h);
|
|
278
|
+
color: var(--foreground);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/* Tarjetas: contenido casi opaco con filo superior luminoso */
|
|
282
|
+
[data-slot='card'] {
|
|
283
|
+
border: 1px solid var(--zy-card-bs);
|
|
284
|
+
border-top-color: var(--zy-card-bt);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/* Campos: cristal claro con filo superior */
|
|
288
|
+
[data-slot='input'],
|
|
289
|
+
[data-slot='textarea'],
|
|
290
|
+
[data-slot='select-trigger'] {
|
|
291
|
+
background-color: var(--zy-field-bg);
|
|
292
|
+
border-color: var(--zy-field-b);
|
|
293
|
+
border-top-color: var(--zy-field-bt);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/* Capas flotantes: filo de cristal */
|
|
297
|
+
[data-slot='dialog-content'],
|
|
298
|
+
[data-slot='popover-content'],
|
|
299
|
+
[data-slot='dropdown-menu-content'],
|
|
300
|
+
[data-slot='select-content'] {
|
|
301
|
+
border: 1px solid var(--zy-glass-bs);
|
|
302
|
+
border-top-color: var(--zy-glass-bt);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/* Etiquetas en píldora */
|
|
306
|
+
[data-slot='badge'] {
|
|
307
|
+
border-radius: 9999px;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/* Pestañas: píldora de cristal con la activa elevada */
|
|
311
|
+
[data-slot='tabs-list'] {
|
|
312
|
+
background: var(--zy-pill);
|
|
313
|
+
border: 1px solid var(--zy-card-bs);
|
|
314
|
+
border-radius: 9999px;
|
|
315
|
+
}
|
|
316
|
+
[data-slot='tabs-trigger'] {
|
|
317
|
+
border-radius: 9999px;
|
|
318
|
+
}
|
|
319
|
+
[data-slot='tabs-trigger'][data-active] {
|
|
320
|
+
background: var(--zy-pill-on);
|
|
321
|
+
box-shadow: 0 1px 6px rgba(28, 48, 100, 0.12);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/* Interruptor y progreso: degradado de marca */
|
|
325
|
+
[data-slot='switch'][data-checked] {
|
|
326
|
+
background-image: var(--zy-accent-g);
|
|
327
|
+
background-color: transparent;
|
|
328
|
+
}
|
|
329
|
+
[data-slot='progress-indicator'] {
|
|
330
|
+
background-image: var(--zy-accent-g);
|
|
331
|
+
background-color: transparent;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/* Sidebar: destino activo con tinte y filo, como la conversación activa de zyro */
|
|
335
|
+
[data-sidebar='menu-button'][data-active='true'] {
|
|
336
|
+
background: var(--zy-conv-a);
|
|
337
|
+
box-shadow: inset 0 0 0 1px var(--zy-conv-ab);
|
|
338
|
+
color: var(--sidebar-accent-foreground);
|
|
339
|
+
}
|
|
340
|
+
[data-sidebar='menu-button']:hover:not([data-active='true']) {
|
|
341
|
+
background: var(--zy-conv-h);
|
|
342
|
+
}
|
|
189
343
|
}
|