orbital-ds 0.5.0 → 0.6.2
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/README.md +73 -64
- package/components.manifest.json +12 -1
- package/dist/styles.css +20 -0
- package/dist/themes/friendly.css +310 -310
- package/dist/themes/friendly.guide.md +38 -0
- package/dist/themes/friendly.meta.json +14 -0
- package/dist/themes/friendly.scoped.css +310 -310
- package/dist/themes/qratia.guide.md +34 -0
- package/dist/themes/qratia.meta.json +12 -0
- package/dist/themes/tactile.css +415 -0
- package/dist/themes/tactile.fonts.css +2 -0
- package/dist/themes/tactile.guide.md +49 -0
- package/dist/themes/tactile.meta.json +16 -0
- package/dist/themes/tactile.scoped.css +415 -0
- package/dist/themes/twitter.css +290 -290
- package/dist/themes/twitter.guide.md +35 -0
- package/dist/themes/twitter.meta.json +14 -0
- package/dist/themes/twitter.scoped.css +290 -290
- package/dist/themes/zyro.css +381 -381
- package/dist/themes/zyro.guide.md +33 -0
- package/dist/themes/zyro.meta.json +14 -0
- package/dist/themes/zyro.scoped.css +381 -381
- package/dist/ui/attachment.d.ts +1 -1
- package/dist/ui/button.d.ts +1 -1
- package/dist/ui/icon-tile.d.ts +11 -0
- package/dist/ui/icon-tile.js +47 -0
- package/dist/ui/input-group.d.ts +1 -1
- package/dist/ui/item.d.ts +1 -1
- package/dist/ui/marker.d.ts +1 -1
- package/dist/ui/sidebar.js +2 -2
- package/docs/CONTRACT.md +2 -1
- package/package.json +142 -140
- package/scripts/doctor.mjs +301 -224
- package/scripts/init.mjs +89 -55
package/dist/themes/friendly.css
CHANGED
|
@@ -1,310 +1,310 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* TEMA friendly — «SaaS amable con personalidad».
|
|
3
|
-
*
|
|
4
|
-
* Referencia: la interfaz de SerpWatch (v2). Se conserva lo que le da carácter y se
|
|
5
|
-
* corrigen sus defectos. Valores LEÍDOS de la referencia: lienzo #F5F6FC, tinta índigo
|
|
6
|
-
* #232450, fuente Rubik, sombras teñidas de índigo, botón en píldora en mayúsculas con
|
|
7
|
-
* brillo de color debajo, naranja #FBB232 como segundo acento, tarjetas de esquina
|
|
8
|
-
* pequeña frente a botones del todo redondos.
|
|
9
|
-
*
|
|
10
|
-
* Mejoras respecto a la referencia:
|
|
11
|
-
* - El botón primario usa un periwinkle algo más oscuro (#5F6EC9) para que el texto
|
|
12
|
-
* blanco alcance contraste AA (el original, #7987CE, queda en torno a 3:1); el
|
|
13
|
-
* original se conserva como brillo (`--brand-bright`).
|
|
14
|
-
* - Texto atenuado y de estado con contraste AA.
|
|
15
|
-
*
|
|
16
|
-
* Importar DESPUÉS de la estructura. Variables `--zf-*`: privadas de este tema.
|
|
17
|
-
* Fuentes: `friendly.fonts.css` (Rubik), lo primero del CSS de la app.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
/* ── VARIABLES · PIEL CLARA ──────────────────────────────────────────────── */
|
|
21
|
-
:root {
|
|
22
|
-
--radius: 8px;
|
|
23
|
-
|
|
24
|
-
--ds-font-sans: 'Rubik', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
|
|
25
|
-
--ds-font-display: var(--ds-font-sans);
|
|
26
|
-
--ds-font-mono: ui-monospace, 'SF Mono', Menlo, monospace;
|
|
27
|
-
--ds-heading-tracking: normal;
|
|
28
|
-
|
|
29
|
-
/* Color: lienzo azulado, tinta índigo, acento periwinkle + naranja cálido */
|
|
30
|
-
--background: #f5f6fc;
|
|
31
|
-
--foreground: #232450;
|
|
32
|
-
|
|
33
|
-
--card: #ffffff;
|
|
34
|
-
--card-foreground: #232450;
|
|
35
|
-
--popover: #ffffff;
|
|
36
|
-
--popover-foreground: #232450;
|
|
37
|
-
|
|
38
|
-
--primary: #5f6ec9;
|
|
39
|
-
--primary-foreground: #ffffff;
|
|
40
|
-
--secondary: #e8eaf8;
|
|
41
|
-
--secondary-foreground: #232450;
|
|
42
|
-
--muted: #eef0fa;
|
|
43
|
-
--muted-foreground: #6b6d96;
|
|
44
|
-
--accent: rgba(55, 132, 247, 0.14);
|
|
45
|
-
--accent-foreground: #2a64c4;
|
|
46
|
-
--destructive: #e5484d;
|
|
47
|
-
--destructive-foreground: #ffffff;
|
|
48
|
-
|
|
49
|
-
--border: rgba(35, 36, 80, 0.08);
|
|
50
|
-
--input: rgba(35, 36, 80, 0.18);
|
|
51
|
-
--ring: #5f6ec9;
|
|
52
|
-
|
|
53
|
-
--chart-1: #5f6ec9;
|
|
54
|
-
--chart-2: #fbb232;
|
|
55
|
-
--chart-3: #1db87a;
|
|
56
|
-
--chart-4: #e5484d;
|
|
57
|
-
--chart-5: #3784f7;
|
|
58
|
-
|
|
59
|
-
--sidebar: #ffffff;
|
|
60
|
-
--sidebar-foreground: #3a3b6b;
|
|
61
|
-
--sidebar-primary: #5f6ec9;
|
|
62
|
-
--sidebar-primary-foreground: #ffffff;
|
|
63
|
-
--sidebar-accent: rgba(55, 132, 247, 0.16);
|
|
64
|
-
--sidebar-accent-foreground: #2a64c4;
|
|
65
|
-
--sidebar-border: rgba(35, 36, 80, 0.07);
|
|
66
|
-
--sidebar-ring: #5f6ec9;
|
|
67
|
-
|
|
68
|
-
--danger: #
|
|
69
|
-
--danger-soft: rgba(229, 72, 77, 0.12);
|
|
70
|
-
--warning: #
|
|
71
|
-
--warning-soft: rgba(251, 178, 50, 0.24);
|
|
72
|
-
--success: #
|
|
73
|
-
--success-soft: rgba(29, 184, 122, 0.14);
|
|
74
|
-
--info: #
|
|
75
|
-
--info-soft: rgba(55, 132, 247, 0.14);
|
|
76
|
-
--neutral: #
|
|
77
|
-
--neutral-soft: rgba(35, 36, 80, 0.07);
|
|
78
|
-
|
|
79
|
-
--link: #2a64c4;
|
|
80
|
-
--link-hover: #1f4f9e;
|
|
81
|
-
--inset: #eef0fa;
|
|
82
|
-
--inset-foreground: #232450;
|
|
83
|
-
--brand: #5f6ec9;
|
|
84
|
-
--brand-bright: #7987ce;
|
|
85
|
-
|
|
86
|
-
/* Formas: superficies de esquina pequeña; las acciones, del todo redondas */
|
|
87
|
-
--ds-radius-sm: 4px;
|
|
88
|
-
--ds-radius-md: 6px;
|
|
89
|
-
--ds-radius-lg: 8px;
|
|
90
|
-
--ds-radius-xl: 10px;
|
|
91
|
-
--ds-radius-2xl: 14px;
|
|
92
|
-
--ds-radius-control: 10px;
|
|
93
|
-
--ds-radius-overlay: 14px;
|
|
94
|
-
|
|
95
|
-
/* Sombras suaves TEÑIDAS de índigo (nunca negras) */
|
|
96
|
-
--ds-shadow-card: 0 8px 20px rgba(0, 4, 131, 0.04);
|
|
97
|
-
--ds-shadow-card-hover: 0 10px 26px rgba(0, 4, 131, 0.09);
|
|
98
|
-
--ds-shadow-control: 0 0 #0000;
|
|
99
|
-
--ds-shadow-raised: 0 8px 20px rgba(0, 4, 131, 0.06);
|
|
100
|
-
--ds-shadow-overlay: 0 16px 40px rgba(35, 36, 80, 0.16);
|
|
101
|
-
--ds-shadow-popover: 0 16px 40px rgba(35, 36, 80, 0.16);
|
|
102
|
-
|
|
103
|
-
/* Medidas: controles de 38px, botones generosos */
|
|
104
|
-
--ds-control-h-sm: 2rem;
|
|
105
|
-
--ds-control-h-md: 2.375rem;
|
|
106
|
-
--ds-control-h-lg: 2.75rem;
|
|
107
|
-
--ds-button-px-sm: 1rem;
|
|
108
|
-
--ds-button-px-md: 1.5rem;
|
|
109
|
-
--ds-button-px-lg: 2rem;
|
|
110
|
-
--ds-field-px: 0.875rem;
|
|
111
|
-
--ds-card-spacing: 1.25rem;
|
|
112
|
-
--ds-card-spacing-sm: 1rem;
|
|
113
|
-
|
|
114
|
-
/* Sin cristal: material plano y luminoso */
|
|
115
|
-
--ds-card-backdrop: none;
|
|
116
|
-
--ds-overlay-backdrop: none;
|
|
117
|
-
--ds-field-backdrop: none;
|
|
118
|
-
--ds-sidebar-backdrop: none;
|
|
119
|
-
--ds-page-backdrop: none;
|
|
120
|
-
|
|
121
|
-
/* Sidebar a ras de borde, blanco sobre el lienzo, filas con tinte azul */
|
|
122
|
-
--ds-sidebar-pad: 0px;
|
|
123
|
-
--ds-sidebar-radius: 0px;
|
|
124
|
-
--ds-sidebar-shadow: 0 0 #0000;
|
|
125
|
-
--ds-sidebar-ring: 0px;
|
|
126
|
-
--ds-sidebar-edge: 1px solid var(--sidebar-border);
|
|
127
|
-
--ds-sidebar-item-radius: 6px;
|
|
128
|
-
--ds-sidebar-item-h: 2.75rem;
|
|
129
|
-
|
|
130
|
-
/* Privadas de friendly */
|
|
131
|
-
--zf-orange: #fbb232;
|
|
132
|
-
--zf-orange-ink: #232450;
|
|
133
|
-
--zf-glow: rgba(95, 110, 201, 0.42);
|
|
134
|
-
--zf-glow-hover: rgba(95, 110, 201, 0.55);
|
|
135
|
-
--zf-fill: rgba(35, 36, 80, 0.05);
|
|
136
|
-
--zf-fill-hover: rgba(35, 36, 80, 0.08);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/* ── VARIABLES · PIEL OSCURA («noche índigo») ────────────────────────────── */
|
|
140
|
-
.dark {
|
|
141
|
-
--background: #16173b;
|
|
142
|
-
--foreground: #ecedfa;
|
|
143
|
-
|
|
144
|
-
--card: #1f2150;
|
|
145
|
-
--card-foreground: #ecedfa;
|
|
146
|
-
--popover: #25275c;
|
|
147
|
-
--popover-foreground: #ecedfa;
|
|
148
|
-
|
|
149
|
-
--primary: #8a98f0;
|
|
150
|
-
--primary-foreground: #14153a;
|
|
151
|
-
--secondary: #2a2c63;
|
|
152
|
-
--secondary-foreground: #ecedfa;
|
|
153
|
-
--muted: #232557;
|
|
154
|
-
--muted-foreground: #a3a6d4;
|
|
155
|
-
--accent: rgba(86, 156, 255, 0.18);
|
|
156
|
-
--accent-foreground: #8dbbff;
|
|
157
|
-
--destructive: #ef5d62;
|
|
158
|
-
--destructive-foreground: #14153a;
|
|
159
|
-
|
|
160
|
-
--border: rgba(255, 255, 255, 0.09);
|
|
161
|
-
--input: rgba(255, 255, 255, 0.2);
|
|
162
|
-
--ring: #8a98f0;
|
|
163
|
-
|
|
164
|
-
--chart-1: #8a98f0;
|
|
165
|
-
--chart-2: #fbb232;
|
|
166
|
-
--chart-3: #3fd397;
|
|
167
|
-
--chart-4: #ef5d62;
|
|
168
|
-
--chart-5: #569cff;
|
|
169
|
-
|
|
170
|
-
--sidebar: #1b1d47;
|
|
171
|
-
--sidebar-foreground: #c4c6ec;
|
|
172
|
-
--sidebar-primary: #8a98f0;
|
|
173
|
-
--sidebar-primary-foreground: #14153a;
|
|
174
|
-
--sidebar-accent: rgba(86, 156, 255, 0.2);
|
|
175
|
-
--sidebar-accent-foreground: #8dbbff;
|
|
176
|
-
--sidebar-border: rgba(255, 255, 255, 0.07);
|
|
177
|
-
--sidebar-ring: #8a98f0;
|
|
178
|
-
|
|
179
|
-
--danger: #ff7a7f;
|
|
180
|
-
--danger-soft: rgba(239, 93, 98, 0.2);
|
|
181
|
-
--warning: #fbb232;
|
|
182
|
-
--warning-soft: rgba(251, 178, 50, 0.18);
|
|
183
|
-
--success: #3fd397;
|
|
184
|
-
--success-soft: rgba(63, 211, 151, 0.16);
|
|
185
|
-
--info: #8dbbff;
|
|
186
|
-
--info-soft: rgba(86, 156, 255, 0.2);
|
|
187
|
-
--neutral: #a3a6d4;
|
|
188
|
-
--neutral-soft: rgba(255, 255, 255, 0.08);
|
|
189
|
-
|
|
190
|
-
--link: #8dbbff;
|
|
191
|
-
--link-hover: #b4d1ff;
|
|
192
|
-
--inset: #232557;
|
|
193
|
-
--inset-foreground: #ecedfa;
|
|
194
|
-
--brand: #8a98f0;
|
|
195
|
-
--brand-bright: #aab4f6;
|
|
196
|
-
|
|
197
|
-
--ds-shadow-card: 0 8px 20px rgba(0, 0, 20, 0.28);
|
|
198
|
-
--ds-shadow-card-hover: 0 10px 26px rgba(0, 0, 20, 0.4);
|
|
199
|
-
--ds-shadow-raised: 0 8px 20px rgba(0, 0, 20, 0.3);
|
|
200
|
-
--ds-shadow-overlay: 0 16px 40px rgba(0, 0, 20, 0.5);
|
|
201
|
-
--ds-shadow-popover: 0 16px 40px rgba(0, 0, 20, 0.5);
|
|
202
|
-
|
|
203
|
-
--zf-orange-ink: #232450;
|
|
204
|
-
--zf-glow: rgba(138, 152, 240, 0.4);
|
|
205
|
-
--zf-glow-hover: rgba(138, 152, 240, 0.55);
|
|
206
|
-
--zf-fill: rgba(255, 255, 255, 0.07);
|
|
207
|
-
--zf-fill-hover: rgba(255, 255, 255, 0.11);
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
/* ── PERSONALIDAD ────────────────────────────────────────────────────────────
|
|
211
|
-
* Sin capa: gana a las utilidades de los componentes. Solo variables.
|
|
212
|
-
*/
|
|
213
|
-
:root {
|
|
214
|
-
/* Botones: píldora en mayúsculas con espaciado, y brillo de color debajo */
|
|
215
|
-
[data-slot='button'] {
|
|
216
|
-
border-radius: 9999px;
|
|
217
|
-
text-transform: uppercase;
|
|
218
|
-
letter-spacing: 0.05em;
|
|
219
|
-
font-weight: 500;
|
|
220
|
-
transition:
|
|
221
|
-
transform var(--ds-motion-base) ease,
|
|
222
|
-
box-shadow var(--ds-motion-base) ease,
|
|
223
|
-
background-color var(--ds-motion-base) ease;
|
|
224
|
-
}
|
|
225
|
-
[data-slot='button'][data-variant='link'] {
|
|
226
|
-
text-transform: none;
|
|
227
|
-
letter-spacing: normal;
|
|
228
|
-
}
|
|
229
|
-
[data-slot='button'][data-size^='icon'] {
|
|
230
|
-
border-radius: var(--ds-radius-xl);
|
|
231
|
-
}
|
|
232
|
-
[data-slot='button'][data-variant='default'] {
|
|
233
|
-
box-shadow: 0 8px 8px -3px var(--zf-glow);
|
|
234
|
-
}
|
|
235
|
-
[data-slot='button'][data-variant='default']:hover:not(:disabled) {
|
|
236
|
-
transform: translateY(-1px);
|
|
237
|
-
box-shadow: 0 10px 12px -3px var(--zf-glow-hover);
|
|
238
|
-
}
|
|
239
|
-
[data-slot='button'][data-variant='default']:active:not(:disabled) {
|
|
240
|
-
transform: translateY(0);
|
|
241
|
-
}
|
|
242
|
-
[data-slot='button'][data-variant='secondary'] {
|
|
243
|
-
background: var(--zf-fill);
|
|
244
|
-
color: var(--foreground);
|
|
245
|
-
}
|
|
246
|
-
[data-slot='button'][data-variant='secondary']:hover:not(:disabled),
|
|
247
|
-
[data-slot='button'][data-variant='ghost']:hover:not(:disabled) {
|
|
248
|
-
background: var(--zf-fill-hover);
|
|
249
|
-
}
|
|
250
|
-
[data-slot='button'][data-variant='outline'] {
|
|
251
|
-
background: transparent;
|
|
252
|
-
border: 1.5px solid color-mix(in oklch, var(--primary) 55%, transparent);
|
|
253
|
-
color: var(--primary);
|
|
254
|
-
}
|
|
255
|
-
[data-slot='button'][data-variant='outline']:hover:not(:disabled) {
|
|
256
|
-
background: color-mix(in oklch, var(--primary) 10%, transparent);
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
/* Tarjetas: blancas, sin borde, solo la sombra teñida */
|
|
260
|
-
[data-slot='card'] {
|
|
261
|
-
border-color: transparent;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
/* Campos rellenos (sin borde), como el buscador de la referencia */
|
|
265
|
-
[data-slot='input'],
|
|
266
|
-
[data-slot='textarea'],
|
|
267
|
-
[data-slot='select-trigger'] {
|
|
268
|
-
background: var(--zf-fill);
|
|
269
|
-
border-color: transparent;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
/* Etiquetas en píldora; la secundaria es el naranja de la marca */
|
|
273
|
-
[data-slot='badge'] {
|
|
274
|
-
border-radius: 9999px;
|
|
275
|
-
}
|
|
276
|
-
[data-slot='badge'][data-variant='secondary'] {
|
|
277
|
-
background: var(--zf-orange);
|
|
278
|
-
color: var(--zf-orange-ink);
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
/* Tablas: cabeceras en mayúsculas pequeñas */
|
|
282
|
-
[data-slot='table-head'] {
|
|
283
|
-
text-transform: uppercase;
|
|
284
|
-
font-size: 0.75rem;
|
|
285
|
-
letter-spacing: 0.05em;
|
|
286
|
-
font-weight: 600;
|
|
287
|
-
color: var(--foreground);
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
/* Sidebar: la fila activa con tinte azul y peso medio */
|
|
291
|
-
[data-sidebar='menu-button'][data-active='true'] {
|
|
292
|
-
font-weight: 500;
|
|
293
|
-
}
|
|
294
|
-
[data-sidebar='menu-button']:hover:not([data-active='true']) {
|
|
295
|
-
background: var(--zf-fill);
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
/* Pestañas: píldora tintada */
|
|
299
|
-
[data-slot='tabs-list'] {
|
|
300
|
-
background: var(--zf-fill);
|
|
301
|
-
border-radius: 9999px;
|
|
302
|
-
}
|
|
303
|
-
[data-slot='tabs-trigger'] {
|
|
304
|
-
border-radius: 9999px;
|
|
305
|
-
}
|
|
306
|
-
[data-slot='tabs-trigger'][data-active] {
|
|
307
|
-
background: var(--card);
|
|
308
|
-
box-shadow: var(--ds-shadow-raised);
|
|
309
|
-
}
|
|
310
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* TEMA friendly — «SaaS amable con personalidad».
|
|
3
|
+
*
|
|
4
|
+
* Referencia: la interfaz de SerpWatch (v2). Se conserva lo que le da carácter y se
|
|
5
|
+
* corrigen sus defectos. Valores LEÍDOS de la referencia: lienzo #F5F6FC, tinta índigo
|
|
6
|
+
* #232450, fuente Rubik, sombras teñidas de índigo, botón en píldora en mayúsculas con
|
|
7
|
+
* brillo de color debajo, naranja #FBB232 como segundo acento, tarjetas de esquina
|
|
8
|
+
* pequeña frente a botones del todo redondos.
|
|
9
|
+
*
|
|
10
|
+
* Mejoras respecto a la referencia:
|
|
11
|
+
* - El botón primario usa un periwinkle algo más oscuro (#5F6EC9) para que el texto
|
|
12
|
+
* blanco alcance contraste AA (el original, #7987CE, queda en torno a 3:1); el
|
|
13
|
+
* original se conserva como brillo (`--brand-bright`).
|
|
14
|
+
* - Texto atenuado y de estado con contraste AA.
|
|
15
|
+
*
|
|
16
|
+
* Importar DESPUÉS de la estructura. Variables `--zf-*`: privadas de este tema.
|
|
17
|
+
* Fuentes: `friendly.fonts.css` (Rubik), lo primero del CSS de la app.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/* ── VARIABLES · PIEL CLARA ──────────────────────────────────────────────── */
|
|
21
|
+
:root {
|
|
22
|
+
--radius: 8px;
|
|
23
|
+
|
|
24
|
+
--ds-font-sans: 'Rubik', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
|
|
25
|
+
--ds-font-display: var(--ds-font-sans);
|
|
26
|
+
--ds-font-mono: ui-monospace, 'SF Mono', Menlo, monospace;
|
|
27
|
+
--ds-heading-tracking: normal;
|
|
28
|
+
|
|
29
|
+
/* Color: lienzo azulado, tinta índigo, acento periwinkle + naranja cálido */
|
|
30
|
+
--background: #f5f6fc;
|
|
31
|
+
--foreground: #232450;
|
|
32
|
+
|
|
33
|
+
--card: #ffffff;
|
|
34
|
+
--card-foreground: #232450;
|
|
35
|
+
--popover: #ffffff;
|
|
36
|
+
--popover-foreground: #232450;
|
|
37
|
+
|
|
38
|
+
--primary: #5f6ec9;
|
|
39
|
+
--primary-foreground: #ffffff;
|
|
40
|
+
--secondary: #e8eaf8;
|
|
41
|
+
--secondary-foreground: #232450;
|
|
42
|
+
--muted: #eef0fa;
|
|
43
|
+
--muted-foreground: #6b6d96;
|
|
44
|
+
--accent: rgba(55, 132, 247, 0.14);
|
|
45
|
+
--accent-foreground: #2a64c4;
|
|
46
|
+
--destructive: #e5484d;
|
|
47
|
+
--destructive-foreground: #ffffff;
|
|
48
|
+
|
|
49
|
+
--border: rgba(35, 36, 80, 0.08);
|
|
50
|
+
--input: rgba(35, 36, 80, 0.18);
|
|
51
|
+
--ring: #5f6ec9;
|
|
52
|
+
|
|
53
|
+
--chart-1: #5f6ec9;
|
|
54
|
+
--chart-2: #fbb232;
|
|
55
|
+
--chart-3: #1db87a;
|
|
56
|
+
--chart-4: #e5484d;
|
|
57
|
+
--chart-5: #3784f7;
|
|
58
|
+
|
|
59
|
+
--sidebar: #ffffff;
|
|
60
|
+
--sidebar-foreground: #3a3b6b;
|
|
61
|
+
--sidebar-primary: #5f6ec9;
|
|
62
|
+
--sidebar-primary-foreground: #ffffff;
|
|
63
|
+
--sidebar-accent: rgba(55, 132, 247, 0.16);
|
|
64
|
+
--sidebar-accent-foreground: #2a64c4;
|
|
65
|
+
--sidebar-border: rgba(35, 36, 80, 0.07);
|
|
66
|
+
--sidebar-ring: #5f6ec9;
|
|
67
|
+
|
|
68
|
+
--danger: #bb3137;
|
|
69
|
+
--danger-soft: rgba(229, 72, 77, 0.12);
|
|
70
|
+
--warning: #955800;
|
|
71
|
+
--warning-soft: rgba(251, 178, 50, 0.24);
|
|
72
|
+
--success: #097650;
|
|
73
|
+
--success-soft: rgba(29, 184, 122, 0.14);
|
|
74
|
+
--info: #2962c0;
|
|
75
|
+
--info-soft: rgba(55, 132, 247, 0.14);
|
|
76
|
+
--neutral: #616389;
|
|
77
|
+
--neutral-soft: rgba(35, 36, 80, 0.07);
|
|
78
|
+
|
|
79
|
+
--link: #2a64c4;
|
|
80
|
+
--link-hover: #1f4f9e;
|
|
81
|
+
--inset: #eef0fa;
|
|
82
|
+
--inset-foreground: #232450;
|
|
83
|
+
--brand: #5f6ec9;
|
|
84
|
+
--brand-bright: #7987ce;
|
|
85
|
+
|
|
86
|
+
/* Formas: superficies de esquina pequeña; las acciones, del todo redondas */
|
|
87
|
+
--ds-radius-sm: 4px;
|
|
88
|
+
--ds-radius-md: 6px;
|
|
89
|
+
--ds-radius-lg: 8px;
|
|
90
|
+
--ds-radius-xl: 10px;
|
|
91
|
+
--ds-radius-2xl: 14px;
|
|
92
|
+
--ds-radius-control: 10px;
|
|
93
|
+
--ds-radius-overlay: 14px;
|
|
94
|
+
|
|
95
|
+
/* Sombras suaves TEÑIDAS de índigo (nunca negras) */
|
|
96
|
+
--ds-shadow-card: 0 8px 20px rgba(0, 4, 131, 0.04);
|
|
97
|
+
--ds-shadow-card-hover: 0 10px 26px rgba(0, 4, 131, 0.09);
|
|
98
|
+
--ds-shadow-control: 0 0 #0000;
|
|
99
|
+
--ds-shadow-raised: 0 8px 20px rgba(0, 4, 131, 0.06);
|
|
100
|
+
--ds-shadow-overlay: 0 16px 40px rgba(35, 36, 80, 0.16);
|
|
101
|
+
--ds-shadow-popover: 0 16px 40px rgba(35, 36, 80, 0.16);
|
|
102
|
+
|
|
103
|
+
/* Medidas: controles de 38px, botones generosos */
|
|
104
|
+
--ds-control-h-sm: 2rem;
|
|
105
|
+
--ds-control-h-md: 2.375rem;
|
|
106
|
+
--ds-control-h-lg: 2.75rem;
|
|
107
|
+
--ds-button-px-sm: 1rem;
|
|
108
|
+
--ds-button-px-md: 1.5rem;
|
|
109
|
+
--ds-button-px-lg: 2rem;
|
|
110
|
+
--ds-field-px: 0.875rem;
|
|
111
|
+
--ds-card-spacing: 1.25rem;
|
|
112
|
+
--ds-card-spacing-sm: 1rem;
|
|
113
|
+
|
|
114
|
+
/* Sin cristal: material plano y luminoso */
|
|
115
|
+
--ds-card-backdrop: none;
|
|
116
|
+
--ds-overlay-backdrop: none;
|
|
117
|
+
--ds-field-backdrop: none;
|
|
118
|
+
--ds-sidebar-backdrop: none;
|
|
119
|
+
--ds-page-backdrop: none;
|
|
120
|
+
|
|
121
|
+
/* Sidebar a ras de borde, blanco sobre el lienzo, filas con tinte azul */
|
|
122
|
+
--ds-sidebar-pad: 0px;
|
|
123
|
+
--ds-sidebar-radius: 0px;
|
|
124
|
+
--ds-sidebar-shadow: 0 0 #0000;
|
|
125
|
+
--ds-sidebar-ring: 0px;
|
|
126
|
+
--ds-sidebar-edge: 1px solid var(--sidebar-border);
|
|
127
|
+
--ds-sidebar-item-radius: 6px;
|
|
128
|
+
--ds-sidebar-item-h: 2.75rem;
|
|
129
|
+
|
|
130
|
+
/* Privadas de friendly */
|
|
131
|
+
--zf-orange: #fbb232;
|
|
132
|
+
--zf-orange-ink: #232450;
|
|
133
|
+
--zf-glow: rgba(95, 110, 201, 0.42);
|
|
134
|
+
--zf-glow-hover: rgba(95, 110, 201, 0.55);
|
|
135
|
+
--zf-fill: rgba(35, 36, 80, 0.05);
|
|
136
|
+
--zf-fill-hover: rgba(35, 36, 80, 0.08);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* ── VARIABLES · PIEL OSCURA («noche índigo») ────────────────────────────── */
|
|
140
|
+
.dark {
|
|
141
|
+
--background: #16173b;
|
|
142
|
+
--foreground: #ecedfa;
|
|
143
|
+
|
|
144
|
+
--card: #1f2150;
|
|
145
|
+
--card-foreground: #ecedfa;
|
|
146
|
+
--popover: #25275c;
|
|
147
|
+
--popover-foreground: #ecedfa;
|
|
148
|
+
|
|
149
|
+
--primary: #8a98f0;
|
|
150
|
+
--primary-foreground: #14153a;
|
|
151
|
+
--secondary: #2a2c63;
|
|
152
|
+
--secondary-foreground: #ecedfa;
|
|
153
|
+
--muted: #232557;
|
|
154
|
+
--muted-foreground: #a3a6d4;
|
|
155
|
+
--accent: rgba(86, 156, 255, 0.18);
|
|
156
|
+
--accent-foreground: #8dbbff;
|
|
157
|
+
--destructive: #ef5d62;
|
|
158
|
+
--destructive-foreground: #14153a;
|
|
159
|
+
|
|
160
|
+
--border: rgba(255, 255, 255, 0.09);
|
|
161
|
+
--input: rgba(255, 255, 255, 0.2);
|
|
162
|
+
--ring: #8a98f0;
|
|
163
|
+
|
|
164
|
+
--chart-1: #8a98f0;
|
|
165
|
+
--chart-2: #fbb232;
|
|
166
|
+
--chart-3: #3fd397;
|
|
167
|
+
--chart-4: #ef5d62;
|
|
168
|
+
--chart-5: #569cff;
|
|
169
|
+
|
|
170
|
+
--sidebar: #1b1d47;
|
|
171
|
+
--sidebar-foreground: #c4c6ec;
|
|
172
|
+
--sidebar-primary: #8a98f0;
|
|
173
|
+
--sidebar-primary-foreground: #14153a;
|
|
174
|
+
--sidebar-accent: rgba(86, 156, 255, 0.2);
|
|
175
|
+
--sidebar-accent-foreground: #8dbbff;
|
|
176
|
+
--sidebar-border: rgba(255, 255, 255, 0.07);
|
|
177
|
+
--sidebar-ring: #8a98f0;
|
|
178
|
+
|
|
179
|
+
--danger: #ff7a7f;
|
|
180
|
+
--danger-soft: rgba(239, 93, 98, 0.2);
|
|
181
|
+
--warning: #fbb232;
|
|
182
|
+
--warning-soft: rgba(251, 178, 50, 0.18);
|
|
183
|
+
--success: #3fd397;
|
|
184
|
+
--success-soft: rgba(63, 211, 151, 0.16);
|
|
185
|
+
--info: #8dbbff;
|
|
186
|
+
--info-soft: rgba(86, 156, 255, 0.2);
|
|
187
|
+
--neutral: #a3a6d4;
|
|
188
|
+
--neutral-soft: rgba(255, 255, 255, 0.08);
|
|
189
|
+
|
|
190
|
+
--link: #8dbbff;
|
|
191
|
+
--link-hover: #b4d1ff;
|
|
192
|
+
--inset: #232557;
|
|
193
|
+
--inset-foreground: #ecedfa;
|
|
194
|
+
--brand: #8a98f0;
|
|
195
|
+
--brand-bright: #aab4f6;
|
|
196
|
+
|
|
197
|
+
--ds-shadow-card: 0 8px 20px rgba(0, 0, 20, 0.28);
|
|
198
|
+
--ds-shadow-card-hover: 0 10px 26px rgba(0, 0, 20, 0.4);
|
|
199
|
+
--ds-shadow-raised: 0 8px 20px rgba(0, 0, 20, 0.3);
|
|
200
|
+
--ds-shadow-overlay: 0 16px 40px rgba(0, 0, 20, 0.5);
|
|
201
|
+
--ds-shadow-popover: 0 16px 40px rgba(0, 0, 20, 0.5);
|
|
202
|
+
|
|
203
|
+
--zf-orange-ink: #232450;
|
|
204
|
+
--zf-glow: rgba(138, 152, 240, 0.4);
|
|
205
|
+
--zf-glow-hover: rgba(138, 152, 240, 0.55);
|
|
206
|
+
--zf-fill: rgba(255, 255, 255, 0.07);
|
|
207
|
+
--zf-fill-hover: rgba(255, 255, 255, 0.11);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/* ── PERSONALIDAD ────────────────────────────────────────────────────────────
|
|
211
|
+
* Sin capa: gana a las utilidades de los componentes. Solo variables.
|
|
212
|
+
*/
|
|
213
|
+
:root {
|
|
214
|
+
/* Botones: píldora en mayúsculas con espaciado, y brillo de color debajo */
|
|
215
|
+
[data-slot='button'] {
|
|
216
|
+
border-radius: 9999px;
|
|
217
|
+
text-transform: uppercase;
|
|
218
|
+
letter-spacing: 0.05em;
|
|
219
|
+
font-weight: 500;
|
|
220
|
+
transition:
|
|
221
|
+
transform var(--ds-motion-base) ease,
|
|
222
|
+
box-shadow var(--ds-motion-base) ease,
|
|
223
|
+
background-color var(--ds-motion-base) ease;
|
|
224
|
+
}
|
|
225
|
+
[data-slot='button'][data-variant='link'] {
|
|
226
|
+
text-transform: none;
|
|
227
|
+
letter-spacing: normal;
|
|
228
|
+
}
|
|
229
|
+
[data-slot='button'][data-size^='icon'] {
|
|
230
|
+
border-radius: var(--ds-radius-xl);
|
|
231
|
+
}
|
|
232
|
+
[data-slot='button'][data-variant='default'] {
|
|
233
|
+
box-shadow: 0 8px 8px -3px var(--zf-glow);
|
|
234
|
+
}
|
|
235
|
+
[data-slot='button'][data-variant='default']:hover:not(:disabled) {
|
|
236
|
+
transform: translateY(-1px);
|
|
237
|
+
box-shadow: 0 10px 12px -3px var(--zf-glow-hover);
|
|
238
|
+
}
|
|
239
|
+
[data-slot='button'][data-variant='default']:active:not(:disabled) {
|
|
240
|
+
transform: translateY(0);
|
|
241
|
+
}
|
|
242
|
+
[data-slot='button'][data-variant='secondary'] {
|
|
243
|
+
background: var(--zf-fill);
|
|
244
|
+
color: var(--foreground);
|
|
245
|
+
}
|
|
246
|
+
[data-slot='button'][data-variant='secondary']:hover:not(:disabled),
|
|
247
|
+
[data-slot='button'][data-variant='ghost']:hover:not(:disabled) {
|
|
248
|
+
background: var(--zf-fill-hover);
|
|
249
|
+
}
|
|
250
|
+
[data-slot='button'][data-variant='outline'] {
|
|
251
|
+
background: transparent;
|
|
252
|
+
border: 1.5px solid color-mix(in oklch, var(--primary) 55%, transparent);
|
|
253
|
+
color: var(--primary);
|
|
254
|
+
}
|
|
255
|
+
[data-slot='button'][data-variant='outline']:hover:not(:disabled) {
|
|
256
|
+
background: color-mix(in oklch, var(--primary) 10%, transparent);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/* Tarjetas: blancas, sin borde, solo la sombra teñida */
|
|
260
|
+
[data-slot='card'] {
|
|
261
|
+
border-color: transparent;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/* Campos rellenos (sin borde), como el buscador de la referencia */
|
|
265
|
+
[data-slot='input'],
|
|
266
|
+
[data-slot='textarea'],
|
|
267
|
+
[data-slot='select-trigger'] {
|
|
268
|
+
background: var(--zf-fill);
|
|
269
|
+
border-color: transparent;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/* Etiquetas en píldora; la secundaria es el naranja de la marca */
|
|
273
|
+
[data-slot='badge'] {
|
|
274
|
+
border-radius: 9999px;
|
|
275
|
+
}
|
|
276
|
+
[data-slot='badge'][data-variant='secondary'] {
|
|
277
|
+
background: var(--zf-orange);
|
|
278
|
+
color: var(--zf-orange-ink);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/* Tablas: cabeceras en mayúsculas pequeñas */
|
|
282
|
+
[data-slot='table-head'] {
|
|
283
|
+
text-transform: uppercase;
|
|
284
|
+
font-size: 0.75rem;
|
|
285
|
+
letter-spacing: 0.05em;
|
|
286
|
+
font-weight: 600;
|
|
287
|
+
color: var(--foreground);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/* Sidebar: la fila activa con tinte azul y peso medio */
|
|
291
|
+
[data-sidebar='menu-button'][data-active='true'] {
|
|
292
|
+
font-weight: 500;
|
|
293
|
+
}
|
|
294
|
+
[data-sidebar='menu-button']:hover:not([data-active='true']) {
|
|
295
|
+
background: var(--zf-fill);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/* Pestañas: píldora tintada */
|
|
299
|
+
[data-slot='tabs-list'] {
|
|
300
|
+
background: var(--zf-fill);
|
|
301
|
+
border-radius: 9999px;
|
|
302
|
+
}
|
|
303
|
+
[data-slot='tabs-trigger'] {
|
|
304
|
+
border-radius: 9999px;
|
|
305
|
+
}
|
|
306
|
+
[data-slot='tabs-trigger'][data-active] {
|
|
307
|
+
background: var(--card);
|
|
308
|
+
box-shadow: var(--ds-shadow-raised);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Tema `friendly` — guía de diseño
|
|
2
|
+
|
|
3
|
+
## Esencia
|
|
4
|
+
SaaS amable con personalidad: lienzo lila muy claro, tinta índigo, botones en píldora con brillo de color y un segundo acento naranja.
|
|
5
|
+
|
|
6
|
+
## Gesto firma
|
|
7
|
+
Botón primario en **píldora con mayúsculas y brillo de color debajo**; tarjetas de esquina pequeña frente a botones del todo redondos.
|
|
8
|
+
|
|
9
|
+
## Principios
|
|
10
|
+
- Contraste de formas: tarjetas casi rectas, acciones totalmente redondeadas.
|
|
11
|
+
- Sombras teñidas de índigo, nunca grises neutras.
|
|
12
|
+
- El naranja `#FBB232` es un segundo acento puntual.
|
|
13
|
+
|
|
14
|
+
## Referencias y qué se tomó de cada una
|
|
15
|
+
- **SerpWatch v2** (analizada en navegador): lienzo `#F5F6FC`, tinta `#232450`, fuente Rubik, botón periwinkle en píldora con mayúsculas, sombras teñidas, naranja como segundo acento, tarjetas de radio pequeño.
|
|
16
|
+
- Se **corrigió** de la referencia: el periwinkle original `#7987CE` con texto blanco da ≈3:1; aquí el primario es `#5F6EC9` (AA) y el original se conserva como brillo (`--brand-bright`).
|
|
17
|
+
|
|
18
|
+
## Paleta
|
|
19
|
+
- Claro: fondo `#F5F6FC`, tinta `#232450`, tarjeta `#FFFFFF`, primario `#5F6EC9`, borde `rgba(35,36,80,.08)`.
|
|
20
|
+
- Oscuro: fondo `#16173B`, tarjeta `#1F2150`, texto `#ECEDFA`.
|
|
21
|
+
|
|
22
|
+
## Tipografía
|
|
23
|
+
**Rubik** para titulares y cuerpo (`friendly.fonts.css`, lo primero del CSS de la app).
|
|
24
|
+
|
|
25
|
+
## Formas y profundidad
|
|
26
|
+
Radio base 8px; botones en píldora; sombras teñidas de índigo.
|
|
27
|
+
|
|
28
|
+
## Qué evita
|
|
29
|
+
Primario con contraste insuficiente, grises neutros en sombras.
|
|
30
|
+
|
|
31
|
+
## Accesibilidad
|
|
32
|
+
Primario `#5F6EC9` con texto blanco: AA. Texto atenuado y de estado también con AA.
|
|
33
|
+
|
|
34
|
+
## Estado de los valores
|
|
35
|
+
- **Leídos de la referencia**: lienzo, tinta, fuente, naranja, forma de botón.
|
|
36
|
+
- **Ajustados**: primario (para contraste).
|
|
37
|
+
- **Pendiente**: la piel oscura no procede de la referencia (diseño propio).
|
|
38
|
+
- Limitación conocida: su sombra de botón anula el anillo de foco (corrección prevista en el paquete).
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "friendly",
|
|
3
|
+
"label": "Amable",
|
|
4
|
+
"essence": "SaaS amable con personalidad: lienzo lila, tinta índigo, botones en píldora con brillo.",
|
|
5
|
+
"signature": ["botón en píldora con mayúsculas y brillo de color", "tarjetas de esquina pequeña frente a botones redondos"],
|
|
6
|
+
"fonts": { "display": "Rubik", "body": "Rubik", "file": "friendly.fonts.css", "distributable": true },
|
|
7
|
+
"palette": { "light": { "background": "#F5F6FC", "foreground": "#232450", "primary": "#5F6EC9" }, "dark": { "background": "#16173B" } },
|
|
8
|
+
"radii": [8, 999],
|
|
9
|
+
"references": [
|
|
10
|
+
{ "name": "SerpWatch v2", "tookFromIt": "lienzo, tinta, Rubik, botón en píldora, naranja, sombras teñidas", "source": "análisis en navegador" }
|
|
11
|
+
],
|
|
12
|
+
"status": { "verified": ["lienzo #F5F6FC", "tinta #232450", "fuente Rubik", "naranja #FBB232"], "approximate": [], "designed": ["primario #5F6EC9 (ajustado a AA)", "piel oscura"], "pending": ["anillo de foco en botones"] },
|
|
13
|
+
"guide": "friendly.guide.md"
|
|
14
|
+
}
|