@higinio/design-mcp 0.1.1 → 0.2.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,121 @@
1
+ /* ============================================================
2
+ Salvia Serena — Tailwind CSS v4 (@theme)
3
+ Sistema de diseño de Higinio Sosa · light-first
4
+ Uso: @import "tailwindcss"; y luego este archivo,
5
+ o copiar este contenido en tu CSS principal de Tailwind v4.
6
+ Requiere dist/salvia-serena/tokens.css para los aliases
7
+ semánticos con theme switch (o pega sus :root/[data-theme]).
8
+ ============================================================ */
9
+
10
+ @import "tailwindcss";
11
+ @import "./tokens.css"; /* primitivos + aliases + [data-theme="dark"] + fuentes */
12
+
13
+ @theme {
14
+ /* == Colores primitivos → genera bg-primary-500, text-neutral-800, etc. == */
15
+ --color-primary-50: #e2eadf; /* acento suave */
16
+ --color-primary-100: #d4e0d1;
17
+ --color-primary-200: #b8cbb7;
18
+ --color-primary-300: #97b09e; /* decorativo — nunca texto sobre lino */
19
+ --color-primary-400: #73907c;
20
+ --color-primary-500: #4f6b58; /* acento salvia — botón primario, bordes, focus */
21
+ --color-primary-600: #435c4b; /* --link: texto de links y ghost (AA ~6:1) */
22
+ --color-primary-700: #384d3f;
23
+ --color-primary-800: #304236;
24
+ --color-primary-900: #2c3630; /* tinta de marca */
25
+
26
+ --color-neutral-0: #fbfaf6;
27
+ --color-neutral-50: #f3f2ec;
28
+ --color-neutral-100: #eae9e1;
29
+ --color-neutral-200: #dfe0d6;
30
+ --color-neutral-300: #b9beb4;
31
+ --color-neutral-400: #858d84;
32
+ --color-neutral-500: #5c675f;
33
+ --color-neutral-600: #47524b;
34
+ --color-neutral-700: #38423b;
35
+ --color-neutral-800: #2c3630;
36
+ --color-neutral-900: #1f2622;
37
+
38
+ --color-success-500: #2f7d6a; /* verde azulado, nunca el acento salvia */
39
+ --color-success-100: #dcefe8;
40
+ --color-success-700: #22604f; /* texto AA sobre success-100 */
41
+ --color-warning-500: #b8862f;
42
+ --color-warning-100: #f6ecd8;
43
+ --color-warning-700: #7e5a17;
44
+ --color-danger-500: #b5523f;
45
+ --color-danger-100: #f6e4df;
46
+ --color-danger-700: #8a3a2b;
47
+ --color-info-500: #5b7891;
48
+ --color-info-100: #e3eaf0;
49
+ --color-info-700: #3f5a70;
50
+
51
+ /* == Tipografía → font-display, font-body, font-mono == */
52
+ --font-display: "Lora", Georgia, serif; /* solo h1–h2 y cifras hero */
53
+ --font-body: "Nunito Sans", system-ui, sans-serif;
54
+ --font-mono: "Source Code Pro", ui-monospace, monospace;
55
+
56
+ /* == Escala tipográfica (ratio 1.25) con line-heights emparejados == */
57
+ --text-xs: 0.75rem; --text-xs--line-height: 1.5;
58
+ --text-sm: 0.875rem; --text-sm--line-height: 1.5;
59
+ --text-base: 1rem; --text-base--line-height: 1.6;
60
+ --text-lg: 1.125rem; --text-lg--line-height: 1.55;
61
+ --text-xl: 1.25rem; --text-xl--line-height: 1.4;
62
+ --text-2xl: 1.5625rem; --text-2xl--line-height: 1.3;
63
+ --text-3xl: 1.9375rem; --text-3xl--line-height: 1.25;
64
+ --text-4xl: 2.4375rem; --text-4xl--line-height: 1.15;
65
+ --text-5xl: 3.0625rem; --text-5xl--line-height: 1.1;
66
+
67
+ --tracking-display: -0.02em;
68
+ --tracking-label: 0.04em;
69
+
70
+ /* == Radios → rounded-sm/md/lg/xl == */
71
+ --radius-sm: 8px;
72
+ --radius-md: 12px;
73
+ --radius-lg: 16px;
74
+ --radius-xl: 24px;
75
+
76
+ /* == Sombras (teñidas de tinta #2c3630) → shadow-xs…xl == */
77
+ --shadow-xs: 0 1px 2px rgba(44,54,48,.06);
78
+ --shadow-sm: 0 1px 3px rgba(44,54,48,.08), 0 1px 2px rgba(44,54,48,.05);
79
+ --shadow-md: 0 4px 8px rgba(44,54,48,.09), 0 2px 4px rgba(44,54,48,.05);
80
+ --shadow-lg: 0 12px 24px rgba(44,54,48,.12), 0 4px 8px rgba(44,54,48,.06);
81
+ --shadow-xl: 0 24px 48px rgba(44,54,48,.16);
82
+
83
+ /* == Easings → ease-out-brand, ease-in-brand, ease-in-out-brand, ease-spring == */
84
+ --ease-out-brand: cubic-bezier(0.2, 0, 0, 1);
85
+ --ease-in-brand: cubic-bezier(0.4, 0, 1, 1);
86
+ --ease-in-out-brand: cubic-bezier(0.65, 0, 0.35, 1); /* moverse de A a B en pantalla */
87
+ --ease-spring: cubic-bezier(0.34, 1.4, 0.64, 1);
88
+ --stagger-step: 30ms;
89
+
90
+ /* Breakpoints: los default de Tailwind (sm 640 / md 768 / lg 1024 / xl 1280)
91
+ coinciden con el sistema — no se redefinen.
92
+ Espaciado: la escala default (múltiplos de 0.25rem = 4px) coincide con
93
+ la escala base 4px del sistema — no se redefine. */
94
+ }
95
+
96
+ /* == Capa semántica con theme switch (shadcn-style) ==
97
+ Genera utilidades que cambian solas con [data-theme="dark"]:
98
+ bg-background · bg-surface · bg-surface-alt · text-foreground ·
99
+ text-muted-foreground · text-disabled-foreground · border-border ·
100
+ border-border-strong · bg-accent · text-link · bg-accent-soft */
101
+ @theme inline {
102
+ --color-background: var(--bg);
103
+ --color-surface: var(--surface);
104
+ --color-surface-alt: var(--surface-alt);
105
+ --color-foreground: var(--text-primary);
106
+ --color-secondary-foreground: var(--text-secondary);
107
+ --color-muted-foreground: var(--text-muted);
108
+ --color-disabled-foreground: var(--text-disabled);
109
+ --color-border: var(--border);
110
+ --color-border-strong: var(--border-strong);
111
+ --color-accent: var(--accent);
112
+ --color-accent-hover: var(--accent-hover);
113
+ --color-accent-active: var(--accent-active);
114
+ --color-accent-soft: var(--accent-soft);
115
+ --color-accent-foreground: var(--text-on-primary);
116
+ --color-link: var(--link);
117
+ --color-success: var(--success-500);
118
+ --color-warning: var(--warning-500);
119
+ --color-danger: var(--danger-500);
120
+ --color-info: var(--info-500);
121
+ }
@@ -0,0 +1,143 @@
1
+ /* ============================================================
2
+ Salvia Serena — Design Tokens v1.0
3
+ Sistema de diseño de Higinio Sosa · light-first
4
+ Fuente de verdad: DESIGN-salvia-serena.md
5
+ Uso: importar ANTES de cualquier estilo propio.
6
+ Los componentes consumen SOLO aliases semánticos, nunca hex.
7
+ ============================================================ */
8
+
9
+ @import url("https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,600;0,700;1,600&family=Nunito+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400&family=Source+Code+Pro:wght@400;500&display=swap");
10
+
11
+ :root {
12
+ /* == Primitivos: primario (Salvia) == */
13
+ --primary-50: #e2eadf; --primary-100: #d4e0d1; --primary-200: #b8cbb7;
14
+ --primary-300: #97b09e; --primary-400: #73907c; --primary-500: #4f6b58;
15
+ --primary-600: #435c4b; --primary-700: #384d3f; --primary-800: #304236;
16
+ --primary-900: #2c3630;
17
+
18
+ /* == Primitivos: neutrales (Lino) == */
19
+ --neutral-0: #fbfaf6; --neutral-50: #f3f2ec; --neutral-100: #eae9e1;
20
+ --neutral-200: #dfe0d6; --neutral-300: #b9beb4; --neutral-400: #858d84;
21
+ --neutral-500: #5c675f; --neutral-600: #47524b; --neutral-700: #38423b;
22
+ --neutral-800: #2c3630; --neutral-900: #1f2622;
23
+
24
+ /* == Primitivos: semánticos (ramp de 3: sólido / fondo / texto AA) ==
25
+ El éxito es verde azulado, lejos del acento salvia: el acento nunca comunica éxito. */
26
+ --success-500: #2f7d6a; --success-100: #dcefe8; --success-text: #22604f;
27
+ --warning-500: #b8862f; --warning-100: #f6ecd8; --warning-text: #7e5a17;
28
+ --danger-500: #b5523f; --danger-100: #f6e4df; --danger-text: #8a3a2b;
29
+ --info-500: #5b7891; --info-100: #e3eaf0; --info-text: #3f5a70;
30
+
31
+ /* == Aliases semánticos (los componentes consumen SOLO esto) == */
32
+ --bg: var(--neutral-50);
33
+ --surface: var(--neutral-0);
34
+ --surface-alt: var(--neutral-100);
35
+ --border: var(--neutral-200);
36
+ --border-strong: var(--neutral-400);
37
+ --text-primary: var(--neutral-800);
38
+ --text-secondary: var(--neutral-600);
39
+ --text-muted: var(--neutral-500);
40
+ --text-disabled: var(--neutral-400);
41
+ --text-on-primary: #ffffff;
42
+ --text-on-primary-solid: var(--primary-700);
43
+ --accent: var(--primary-500);
44
+ --accent-hover: var(--primary-600);
45
+ --accent-active: var(--primary-700);
46
+ --accent-soft: var(--primary-50);
47
+ --accent-soft-strong: var(--primary-100);
48
+ --link: var(--primary-600); /* AA 7.00:1 sobre --surface — texto de links y ghost */
49
+
50
+ /* == Tipografía == */
51
+ --font-display: "Lora", Georgia, serif;
52
+ --font-body: "Nunito Sans", system-ui, -apple-system, sans-serif;
53
+ --font-mono: "Source Code Pro", ui-monospace, monospace;
54
+ --text-xs: .75rem; --text-sm: .875rem; --text-base: 1rem; --text-lg: 1.125rem;
55
+ --text-xl: 1.25rem; --text-2xl: 1.5625rem; --text-3xl: 1.9375rem;
56
+ --text-4xl: 2.4375rem; --text-5xl: 3.0625rem;
57
+ --leading-xs: 1.5; --leading-sm: 1.5; --leading-base: 1.6; --leading-lg: 1.55;
58
+ --leading-xl: 1.4; --leading-2xl: 1.3; --leading-3xl: 1.25;
59
+ --leading-4xl: 1.15; --leading-5xl: 1.1;
60
+ --tracking-display: -0.02em; --tracking-body: 0; --tracking-label: 0.04em;
61
+ --weight-regular: 400; --weight-medium: 500; --weight-semibold: 600; --weight-bold: 700;
62
+ --measure: 65ch;
63
+
64
+ /* == Espaciado (escala base 4px) == */
65
+ --space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px;
66
+ --space-5: 20px; --space-6: 24px; --space-8: 32px; --space-10: 40px;
67
+ --space-12: 48px; --space-16: 64px; --space-20: 80px; --space-24: 96px;
68
+ --card-padding: var(--space-6); --card-padding-mobile: var(--space-4);
69
+ --section-gap: var(--space-16); --form-gap: var(--space-5);
70
+ --button-padding-md: 12px 20px; --button-padding-sm: 8px 14px;
71
+ --control-height-sm: 36px; --control-height-md: 44px; --control-height-lg: 52px;
72
+ --gutter: 24px; --gutter-mobile: 16px;
73
+
74
+ /* == Radios, bordes y sombras (teñidas de tinta verde, nunca negro puro) == */
75
+ --radius-sm: 8px; --radius-md: 12px; --radius-lg: 16px;
76
+ --radius-xl: 24px; --radius-full: 9999px;
77
+ --border-width: 1px;
78
+ --shadow-xs: 0 1px 2px rgba(44,54,48,.06);
79
+ --shadow-sm: 0 1px 3px rgba(44,54,48,.08), 0 1px 2px rgba(44,54,48,.05);
80
+ --shadow-md: 0 4px 8px rgba(44,54,48,.09), 0 2px 4px rgba(44,54,48,.05);
81
+ --shadow-lg: 0 12px 24px rgba(44,54,48,.12), 0 4px 8px rgba(44,54,48,.06);
82
+ --shadow-xl: 0 24px 48px rgba(44,54,48,.16);
83
+
84
+ /* == Focus == */
85
+ --ring: 0 0 0 3px rgba(79,107,88,.25);
86
+ --ring-color: rgba(79,107,88,.25);
87
+
88
+ /* == Motion (pausado: nada urge) == */
89
+ --duration-instant: 100ms; --duration-fast: 150ms; --duration-base: 220ms;
90
+ --duration-slow: 280ms; --duration-page: 340ms;
91
+ --ease-out: cubic-bezier(0.2, 0, 0, 1);
92
+ --ease-in: cubic-bezier(0.4, 0, 1, 1);
93
+ --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); /* moverse de A a B en pantalla */
94
+ --ease-spring: cubic-bezier(0.34, 1.4, 0.64, 1);
95
+ --stagger-step: 30ms;
96
+
97
+ color-scheme: light;
98
+ }
99
+
100
+ /* == Modo oscuro (variante) — alternar data-theme en <html> ==
101
+ Casi sin sombras: las capas se separan por superficie y borde, y solo
102
+ los overlays (lg/xl) conservan una sombra tenue. */
103
+ [data-theme="dark"] {
104
+ --bg: #151a17;
105
+ --surface: #1d231f;
106
+ --surface-alt: #252c27;
107
+ --border: #2d3530;
108
+ --border-strong: #6f7b72;
109
+ --text-primary: #e3e8e2;
110
+ --text-secondary: #c4ccc5;
111
+ --text-muted: #a6b0a8;
112
+ --text-disabled: #79837b;
113
+ --accent: #9fc2a8;
114
+ --accent-hover: #b5d2bc;
115
+ --accent-active: #8ab295;
116
+ --accent-soft: #26332b;
117
+ --accent-soft-strong: #2f4035;
118
+ --text-on-primary: #151a17;
119
+ --text-on-primary-solid: #b5d2bc;
120
+ --link: #b5d2bc;
121
+ --success-500: #6cc3ac; --success-100: #14271f; --success-text: #8ad3bf;
122
+ --warning-500: #d9a94f; --warning-100: #2a2213; --warning-text: #e6c17e;
123
+ --danger-500: #d9806d; --danger-100: #2c1814; --danger-text: #e9a597;
124
+ --info-500: #8fb0c9; --info-100: #18222b; --info-text: #a9c4d8;
125
+ --ring: 0 0 0 3px rgba(159,194,168,.3);
126
+ --ring-color: rgba(159,194,168,.3);
127
+ --shadow-xs: none;
128
+ --shadow-sm: none;
129
+ --shadow-md: none;
130
+ --shadow-lg: 0 8px 24px rgba(8,10,9,.3);
131
+ --shadow-xl: 0 16px 32px rgba(8,10,9,.35);
132
+ color-scheme: dark;
133
+ }
134
+
135
+ /* == Accesibilidad del movimiento == */
136
+ @media (prefers-reduced-motion: reduce) {
137
+ *, *::before, *::after {
138
+ animation-duration: 0.01ms !important;
139
+ animation-iteration-count: 1 !important;
140
+ transition-duration: 0.01ms !important;
141
+ scroll-behavior: auto !important;
142
+ }
143
+ }