orbital-ds 0.2.0 → 0.4.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.
@@ -0,0 +1,290 @@
1
+ /*
2
+ * TEMA twitter — la interfaz de Twitter anterior a X (rediseño de 2021).
3
+ *
4
+ * Personalidad: PLANO y de alto contraste. Sin sombras ni cristal en el contenido;
5
+ * separación por filetes de 1px; botones en píldora con peso 700; tarjetas de 16px
6
+ * sin elevación; sidebar a ras de borde, sin fondo, con filas en píldora y la activa
7
+ * en negrita; pestañas con subrayado de acento. Azul de marca #1D9BF0 (confirmado) con
8
+ * «menos azul»: la acción más importante puede ir en tinta (negro/blanco).
9
+ *
10
+ * VALORES APROXIMADOS: el azul de marca y la fuente (Chirp, propietaria) están
11
+ * documentados; los grises, bordes y los fondos de «Dim» son de memoria y NO se han
12
+ * contrastado con la hoja de estilos real — ajústalos con una captura de referencia.
13
+ * Chirp no se puede distribuir: se usa la pila del sistema como respaldo.
14
+ *
15
+ * Importar DESPUÉS de la estructura. Variables `--zt-*`: privadas de este tema.
16
+ */
17
+
18
+ /* ── VARIABLES · PIEL CLARA ──────────────────────────────────────────────── */
19
+ :root[data-theme='twitter'] {
20
+ --radius: 16px;
21
+
22
+ --ds-font-sans: 'Chirp', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
23
+ --ds-font-display: var(--ds-font-sans);
24
+ --ds-font-mono: ui-monospace, 'SF Mono', Menlo, monospace;
25
+ --ds-heading-tracking: normal;
26
+
27
+ /* Color */
28
+ --background: #ffffff;
29
+ --foreground: #0f1419;
30
+
31
+ --card: #ffffff;
32
+ --card-foreground: #0f1419;
33
+ --popover: #ffffff;
34
+ --popover-foreground: #0f1419;
35
+
36
+ --primary: #1d9bf0;
37
+ --primary-foreground: #ffffff;
38
+ --secondary: #eff3f4;
39
+ --secondary-foreground: #0f1419;
40
+ --muted: #f7f9f9;
41
+ --muted-foreground: #536471;
42
+ --accent: rgba(29, 155, 240, 0.1);
43
+ --accent-foreground: #1a8cd8;
44
+ --destructive: #f4212e;
45
+ --destructive-foreground: #ffffff;
46
+
47
+ --border: #eff3f4;
48
+ --input: #cfd9de;
49
+ --ring: #1d9bf0;
50
+
51
+ --chart-1: #1d9bf0;
52
+ --chart-2: #00ba7c;
53
+ --chart-3: #ffd400;
54
+ --chart-4: #f91880;
55
+ --chart-5: #7856ff;
56
+
57
+ --sidebar: transparent;
58
+ --sidebar-foreground: #0f1419;
59
+ --sidebar-primary: #1d9bf0;
60
+ --sidebar-primary-foreground: #ffffff;
61
+ --sidebar-accent: rgba(15, 20, 25, 0.1);
62
+ --sidebar-accent-foreground: #0f1419;
63
+ --sidebar-border: #eff3f4;
64
+ --sidebar-ring: #1d9bf0;
65
+
66
+ --danger: #d4141f;
67
+ --danger-soft: rgba(244, 33, 46, 0.1);
68
+ --warning: #8a6d00;
69
+ --warning-soft: rgba(255, 212, 0, 0.2);
70
+ --success: #00875a;
71
+ --success-soft: rgba(0, 186, 124, 0.12);
72
+ --info: #1a8cd8;
73
+ --info-soft: rgba(29, 155, 240, 0.1);
74
+ --neutral: #536471;
75
+ --neutral-soft: #eff3f4;
76
+
77
+ --link: #1d9bf0;
78
+ --link-hover: #1a8cd8;
79
+ --inset: #f7f9f9;
80
+ --inset-foreground: #0f1419;
81
+ --brand: #1d9bf0;
82
+ --brand-bright: #1d9bf0;
83
+
84
+ /* Formas: píldoras para acciones, 16px para superficies */
85
+ --ds-radius-sm: 8px;
86
+ --ds-radius-md: 12px;
87
+ --ds-radius-lg: 16px;
88
+ --ds-radius-xl: 16px;
89
+ --ds-radius-2xl: 20px;
90
+ --ds-radius-control: 9999px;
91
+ --ds-radius-overlay: 16px;
92
+
93
+ /* Sin elevación: solo los menús flotantes llevan sombra, muy suave */
94
+ --ds-shadow-card: 0 0 #0000;
95
+ --ds-shadow-card-hover: 0 0 #0000;
96
+ --ds-shadow-control: 0 0 #0000;
97
+ --ds-shadow-raised: 0 0 #0000;
98
+ --ds-shadow-overlay: 0 0 15px rgba(101, 119, 134, 0.2), 0 0 3px 1px rgba(101, 119, 134, 0.15);
99
+ --ds-shadow-popover: 0 0 15px rgba(101, 119, 134, 0.2), 0 0 3px 1px rgba(101, 119, 134, 0.15);
100
+
101
+ /* Medidas */
102
+ --ds-control-h-sm: 2rem;
103
+ --ds-control-h-md: 2.25rem;
104
+ --ds-control-h-lg: 3.25rem;
105
+ --ds-button-px-sm: 1rem;
106
+ --ds-button-px-md: 1.25rem;
107
+ --ds-button-px-lg: 2rem;
108
+ --ds-field-px: 1rem;
109
+ --ds-card-spacing: 1rem;
110
+ --ds-card-spacing-sm: 0.75rem;
111
+
112
+ /* Materiales: ninguno (plano) */
113
+ --ds-card-backdrop: none;
114
+ --ds-overlay-backdrop: none;
115
+ --ds-field-backdrop: none;
116
+ --ds-sidebar-backdrop: none;
117
+ --ds-page-backdrop: none;
118
+
119
+ /* Sidebar a ras de borde, sin silueta; filas en píldora grandes */
120
+ --ds-sidebar-pad: 0px;
121
+ --ds-sidebar-radius: 0px;
122
+ --ds-sidebar-shadow: 0 0 #0000;
123
+ --ds-sidebar-ring: 0px;
124
+ --ds-sidebar-edge: 1px solid var(--sidebar-border);
125
+ --ds-sidebar-item-radius: 9999px;
126
+ --ds-sidebar-item-h: 3.25rem;
127
+
128
+ /* Privadas de twitter */
129
+ --zt-hover: rgba(15, 20, 25, 0.1);
130
+ --zt-hover-soft: rgba(15, 20, 25, 0.03);
131
+ --zt-line-strong: #cfd9de;
132
+ --zt-ink: #0f1419;
133
+ --zt-ink-foreground: #ffffff;
134
+ }
135
+
136
+ /* ── VARIABLES · PIEL OSCURA («Dim») ─────────────────────────────────────── */
137
+ :root[data-theme='twitter'].dark {
138
+ --background: #15202b;
139
+ --foreground: #f7f9f9;
140
+
141
+ --card: #15202b;
142
+ --card-foreground: #f7f9f9;
143
+ --popover: #1e2732;
144
+ --popover-foreground: #f7f9f9;
145
+
146
+ --primary: #1d9bf0;
147
+ --primary-foreground: #ffffff;
148
+ --secondary: #1e2732;
149
+ --secondary-foreground: #f7f9f9;
150
+ --muted: #1e2732;
151
+ --muted-foreground: #8b98a5;
152
+ --accent: rgba(29, 155, 240, 0.15);
153
+ --accent-foreground: #4db3f5;
154
+ --destructive: #f4212e;
155
+ --destructive-foreground: #ffffff;
156
+
157
+ --border: #38444d;
158
+ --input: #536471;
159
+ --ring: #1d9bf0;
160
+
161
+ --sidebar: transparent;
162
+ --sidebar-foreground: #f7f9f9;
163
+ --sidebar-primary: #1d9bf0;
164
+ --sidebar-primary-foreground: #ffffff;
165
+ --sidebar-accent: rgba(247, 249, 249, 0.1);
166
+ --sidebar-accent-foreground: #f7f9f9;
167
+ --sidebar-border: #38444d;
168
+ --sidebar-ring: #1d9bf0;
169
+
170
+ --danger: #ff5a64;
171
+ --danger-soft: rgba(244, 33, 46, 0.18);
172
+ --warning: #ffd400;
173
+ --warning-soft: rgba(255, 212, 0, 0.16);
174
+ --success: #00ba7c;
175
+ --success-soft: rgba(0, 186, 124, 0.16);
176
+ --info: #4db3f5;
177
+ --info-soft: rgba(29, 155, 240, 0.18);
178
+ --neutral: #8b98a5;
179
+ --neutral-soft: #1e2732;
180
+
181
+ --link: #4db3f5;
182
+ --link-hover: #8dcdf8;
183
+ --inset: #1e2732;
184
+ --inset-foreground: #f7f9f9;
185
+ --brand: #1d9bf0;
186
+ --brand-bright: #4db3f5;
187
+
188
+ --ds-shadow-overlay: 0 0 15px rgba(255, 255, 255, 0.2), 0 0 3px 1px rgba(255, 255, 255, 0.15);
189
+ --ds-shadow-popover: 0 0 15px rgba(255, 255, 255, 0.2), 0 0 3px 1px rgba(255, 255, 255, 0.15);
190
+
191
+ --zt-hover: rgba(247, 249, 249, 0.1);
192
+ --zt-hover-soft: rgba(247, 249, 249, 0.03);
193
+ --zt-line-strong: #536471;
194
+ --zt-ink: #eff3f4;
195
+ --zt-ink-foreground: #0f1419;
196
+ }
197
+
198
+ /* ── PERSONALIDAD ────────────────────────────────────────────────────────────
199
+ * Sin capa: gana a las utilidades de los componentes. Solo variables.
200
+ */
201
+ :root[data-theme='twitter'] {
202
+ /* Botones: píldora en peso 700; primario en azul; contorno con filete */
203
+ [data-slot='button'] {
204
+ border-radius: 9999px;
205
+ font-weight: 700;
206
+ }
207
+ [data-slot='button'][data-variant='default']:hover:not(:disabled) {
208
+ background-color: var(--link-hover);
209
+ }
210
+ [data-slot='button'][data-variant='secondary'] {
211
+ background: var(--zt-ink);
212
+ color: var(--zt-ink-foreground);
213
+ }
214
+ [data-slot='button'][data-variant='secondary']:hover:not(:disabled) {
215
+ opacity: 0.88;
216
+ }
217
+ [data-slot='button'][data-variant='outline'] {
218
+ background: transparent;
219
+ border: 1px solid var(--zt-line-strong);
220
+ color: var(--foreground);
221
+ }
222
+ [data-slot='button'][data-variant='outline']:hover:not(:disabled),
223
+ [data-slot='button'][data-variant='ghost']:hover:not(:disabled) {
224
+ background: var(--zt-hover);
225
+ }
226
+ [data-slot='button'][data-variant='destructive'] {
227
+ background: var(--destructive);
228
+ color: var(--destructive-foreground);
229
+ }
230
+
231
+ /* Tarjetas: planas, con filete, sin elevación */
232
+ [data-slot='card'] {
233
+ border: 1px solid var(--border);
234
+ box-shadow: none;
235
+ }
236
+
237
+ /* Campos: píldora/16px con filete; foco azul lo da el anillo */
238
+ [data-slot='input'],
239
+ [data-slot='textarea'],
240
+ [data-slot='select-trigger'] {
241
+ background: transparent;
242
+ border: 1px solid var(--input);
243
+ }
244
+ [data-slot='textarea'] {
245
+ border-radius: var(--ds-radius-lg);
246
+ }
247
+
248
+ /* Etiquetas en píldora */
249
+ [data-slot='badge'] {
250
+ border-radius: 9999px;
251
+ }
252
+
253
+ /* Pestañas: sin fondo, subrayado de acento en la activa */
254
+ [data-slot='tabs-list'] {
255
+ background: transparent;
256
+ border-bottom: 1px solid var(--border);
257
+ border-radius: 0;
258
+ }
259
+ [data-slot='tabs-trigger'] {
260
+ border-radius: 0;
261
+ background: transparent;
262
+ font-weight: 500;
263
+ }
264
+ [data-slot='tabs-trigger']:hover {
265
+ background: var(--zt-hover-soft);
266
+ }
267
+ [data-slot='tabs-trigger'][data-active] {
268
+ background: transparent;
269
+ box-shadow: inset 0 -4px 0 var(--primary);
270
+ font-weight: 700;
271
+ }
272
+
273
+ /* Sidebar: filas grandes en píldora; la activa en negrita, sin relleno */
274
+ [data-sidebar='menu-button'] {
275
+ font-size: 1.125rem;
276
+ border-radius: 9999px;
277
+ }
278
+ [data-sidebar='menu-button']:hover {
279
+ background: var(--zt-hover);
280
+ }
281
+ [data-sidebar='menu-button'][data-active='true'] {
282
+ background: transparent;
283
+ font-weight: 700;
284
+ }
285
+
286
+ /* Interruptor y progreso en el azul de marca, planos */
287
+ [data-slot='progress-indicator'] {
288
+ background: var(--primary);
289
+ }
290
+ }
@@ -1,57 +1,34 @@
1
1
  /*
2
- * TEMA zyro — «liquid glass» (traducido de faro-orbital-zyro-ui/global.css).
2
+ * TEMA zyro — «liquid glass» (traducido de faro-orbital-zyro-ui).
3
3
  *
4
- * Identidad: lienzo lavanda claro / azul muy oscuro, acento azul profundo
5
- * (claro) y cian (oscuro), cristal traslúcido con desenfoque y saturación, y
6
- * un fondo vivo. Cumple el MISMO contrato de tema que `qratia` (ver
7
- * `contract.json`): todo lo que cambia respecto a qratia es aspecto, no API.
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
- * Importar DESPUÉS de la estructura (`orbital-ds/styles.css`), para que este
10
- * tema pueda sobrescribir también la escala de radios y las sombras:
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
- * @import 'orbital-ds/styles.css';
13
- * @import 'orbital-ds/themes/zyro.css';
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
- @theme inline {
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.4);
85
- --sidebar-foreground: rgba(14, 22, 48, 0.66);
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.3);
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
- /* Materiales: cristal. El fondo vivo (malla WebGL en zyro-ui) se aproxima
113
- aquí con degradados; el componente de malla es opcional. */
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(60% 50% at 12% 8%, rgba(54, 179, 237, 0.4), transparent 70%),
120
- radial-gradient(55% 45% at 88% 18%, rgba(3, 73, 254, 0.24), transparent 70%),
121
- radial-gradient(50% 55% at 55% 100%, rgba(151, 71, 255, 0.2), transparent 70%);
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.68);
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,178 @@
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(60% 50% at 12% 8%, rgba(54, 179, 237, 0.3), transparent 70%),
187
- radial-gradient(55% 45% at 88% 18%, rgba(3, 73, 254, 0.28), transparent 70%),
188
- radial-gradient(50% 55% at 55% 100%, rgba(151, 71, 255, 0.22), transparent 70%);
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
+ }
343
+ }
344
+
345
+ /* Ajustes de personalidad (vistos en el banco de pruebas) */
346
+ :root {
347
+ /* Grupos de botones: píldora solo en los extremos, el interior recto */
348
+ [data-slot='button-group'] [data-slot='button'] {
349
+ border-radius: 0;
350
+ }
351
+ [data-slot='button-group'] [data-slot='button']:first-child {
352
+ border-start-start-radius: 9999px;
353
+ border-end-start-radius: 9999px;
354
+ }
355
+ [data-slot='button-group'] [data-slot='button']:last-child {
356
+ border-start-end-radius: 9999px;
357
+ border-end-end-radius: 9999px;
358
+ }
359
+
360
+ /* Esqueletos: visibles sobre la tarjeta casi blanca */
361
+ [data-slot='skeleton'] {
362
+ background: color-mix(in oklch, var(--foreground) 9%, transparent);
363
+ }
364
+ }
365
+
366
+ /* Fondo vivo: los degradados derivan despacio (aproximación ligera, sin WebGL de la
367
+ malla original). `prefers-reduced-motion` ya detiene la animación en la estructura. */
368
+ :root {
369
+ body {
370
+ background-size: 160% 160%;
371
+ animation: zy-drift 40s ease-in-out infinite alternate;
372
+ }
373
+ }
374
+ @keyframes zy-drift {
375
+ from {
376
+ background-position: 0% 0%;
377
+ }
378
+ to {
379
+ background-position: 100% 100%;
380
+ }
189
381
  }
@@ -0,0 +1,2 @@
1
+ /* Fuentes del tema zyro: Montserrat (titulares) + Roboto (cuerpo). Importar el PRIMERO del CSS de la app. */
2
+ @import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@500;600;700;800&family=Roboto:wght@300;400;500;600;700&display=swap');