@higinio/design-mcp 0.1.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,117 @@
1
+ /* ============================================================
2
+ Celeste Clásica — 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/celeste-clasica/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: #f2f6fa;
16
+ --color-primary-100: #dfe9f2;
17
+ --color-primary-200: #c3d5e6;
18
+ --color-primary-300: #a0c0d4; /* celeste de marca — nunca texto sobre blanco */
19
+ --color-primary-400: #87a8c7;
20
+ --color-primary-500: #7192ba; /* primario — rellenos/bordes/focus (UI 3:1) */
21
+ --color-primary-600: #5d7ba3;
22
+ --color-primary-700: #4d6588; /* --link: texto de links y ghost (AA ~6:1) */
23
+ --color-primary-800: #40536e;
24
+ --color-primary-900: #31343e; /* tinta de marca */
25
+
26
+ --color-neutral-0: #ffffff;
27
+ --color-neutral-50: #f7f8fa;
28
+ --color-neutral-100: #eef0f3;
29
+ --color-neutral-200: #dcdfe5;
30
+ --color-neutral-300: #b8bdc7;
31
+ --color-neutral-400: #8a8f9c;
32
+ --color-neutral-500: #666b78;
33
+ --color-neutral-600: #4d5160;
34
+ --color-neutral-700: #3d414e;
35
+ --color-neutral-800: #31343e;
36
+ --color-neutral-900: #22242b;
37
+
38
+ --color-success-500: #3d9970;
39
+ --color-success-100: #e2f3ec;
40
+ --color-success-700: #2b6e50; /* texto AA sobre success-100 */
41
+ --color-warning-500: #c9922e;
42
+ --color-warning-100: #faf1de;
43
+ --color-warning-700: #8a651c;
44
+ --color-danger-500: #c04d4d;
45
+ --color-danger-100: #f9e7e7;
46
+ --color-danger-700: #8f3232;
47
+ --color-info-500: #7192ba;
48
+ --color-info-100: #dfe9f2;
49
+ --color-info-700: #4d6588;
50
+
51
+ /* == Tipografía → font-display, font-body, font-mono == */
52
+ --font-display: "Fraunces", Georgia, serif; /* solo h1–h2 y cifras hero */
53
+ --font-body: "Public Sans", system-ui, sans-serif;
54
+ --font-mono: "IBM Plex Mono", 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: 6px;
72
+ --radius-md: 10px;
73
+ --radius-lg: 14px;
74
+ --radius-xl: 20px;
75
+
76
+ /* == Sombras (teñidas de tinta #31343e) → shadow-xs…xl == */
77
+ --shadow-xs: 0 1px 2px rgba(49,52,62,.06);
78
+ --shadow-sm: 0 1px 3px rgba(49,52,62,.08), 0 1px 2px rgba(49,52,62,.05);
79
+ --shadow-md: 0 4px 8px rgba(49,52,62,.09), 0 2px 4px rgba(49,52,62,.05);
80
+ --shadow-lg: 0 12px 24px rgba(49,52,62,.12), 0 4px 8px rgba(49,52,62,.06);
81
+ --shadow-xl: 0 24px 48px rgba(49,52,62,.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
+ }
@@ -0,0 +1,137 @@
1
+ /* ============================================================
2
+ Celeste Clásica — Design Tokens v2.0
3
+ Sistema de diseño de Higinio Sosa · light-first
4
+ Fuente de verdad: DESIGN-celeste-clasica.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=Fraunces:ital,opsz,wght@0,9..144,600;0,9..144,700;1,9..144,600&family=Public+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400&family=IBM+Plex+Mono:wght@400;500&display=swap");
10
+
11
+ :root {
12
+ /* == Primitivos: primario (Azul Acero) == */
13
+ --primary-50: #f2f6fa; --primary-100: #dfe9f2; --primary-200: #c3d5e6;
14
+ --primary-300: #a0c0d4; --primary-400: #87a8c7; --primary-500: #7192ba;
15
+ --primary-600: #5d7ba3; --primary-700: #4d6588; --primary-800: #40536e;
16
+ --primary-900: #31343e;
17
+
18
+ /* == Primitivos: neutrales (Gris Azulado) == */
19
+ --neutral-0: #ffffff; --neutral-50: #f7f8fa; --neutral-100: #eef0f3;
20
+ --neutral-200: #dcdfe5; --neutral-300: #b8bdc7; --neutral-400: #8a8f9c;
21
+ --neutral-500: #666b78; --neutral-600: #4d5160; --neutral-700: #3d414e;
22
+ --neutral-800: #31343e; --neutral-900: #22242b;
23
+
24
+ /* == Primitivos: semánticos (ramp de 3: sólido / fondo / texto AA) == */
25
+ --success-500: #3d9970; --success-100: #e2f3ec; --success-text: #2b6e50;
26
+ --warning-500: #c9922e; --warning-100: #faf1de; --warning-text: #8a651c;
27
+ --danger-500: #c04d4d; --danger-100: #f9e7e7; --danger-text: #8f3232;
28
+ --info-500: #7192ba; --info-100: #dfe9f2; --info-text: #4d6588;
29
+
30
+ /* == Aliases semánticos (los componentes consumen SOLO esto) == */
31
+ --bg: var(--neutral-50);
32
+ --surface: var(--neutral-0);
33
+ --surface-alt: var(--neutral-100);
34
+ --border: var(--neutral-200);
35
+ --border-strong: var(--neutral-300);
36
+ --text-primary: var(--neutral-800);
37
+ --text-secondary: var(--neutral-600);
38
+ --text-muted: var(--neutral-500);
39
+ --text-disabled: var(--neutral-400);
40
+ --text-on-primary: #ffffff;
41
+ --text-on-primary-solid: var(--primary-700);
42
+ --accent: var(--primary-500);
43
+ --accent-hover: var(--primary-600);
44
+ --accent-active: var(--primary-700);
45
+ --accent-soft: var(--primary-50);
46
+ --accent-soft-strong: var(--primary-100);
47
+ --link: var(--primary-700); /* AA ~6:1 — texto de links y ghost; primary-500 solo para UI */
48
+
49
+ /* == Tipografía == */
50
+ --font-display: "Fraunces", Georgia, serif;
51
+ --font-body: "Public Sans", system-ui, -apple-system, sans-serif;
52
+ --font-mono: "IBM Plex Mono", ui-monospace, monospace;
53
+ --text-xs: .75rem; --text-sm: .875rem; --text-base: 1rem; --text-lg: 1.125rem;
54
+ --text-xl: 1.25rem; --text-2xl: 1.5625rem; --text-3xl: 1.9375rem;
55
+ --text-4xl: 2.4375rem; --text-5xl: 3.0625rem;
56
+ --leading-xs: 1.5; --leading-sm: 1.5; --leading-base: 1.6; --leading-lg: 1.55;
57
+ --leading-xl: 1.4; --leading-2xl: 1.3; --leading-3xl: 1.25;
58
+ --leading-4xl: 1.15; --leading-5xl: 1.1;
59
+ --tracking-display: -0.02em; --tracking-body: 0; --tracking-label: 0.04em;
60
+ --weight-regular: 400; --weight-medium: 500; --weight-semibold: 600; --weight-bold: 700;
61
+ --measure: 65ch;
62
+
63
+ /* == Espaciado (escala base 4px) == */
64
+ --space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px;
65
+ --space-5: 20px; --space-6: 24px; --space-8: 32px; --space-10: 40px;
66
+ --space-12: 48px; --space-16: 64px; --space-20: 80px; --space-24: 96px;
67
+ --card-padding: var(--space-6); --card-padding-mobile: var(--space-4);
68
+ --section-gap: var(--space-16); --form-gap: var(--space-5);
69
+ --button-padding-md: 12px 20px; --button-padding-sm: 8px 14px;
70
+ --control-height-sm: 36px; --control-height-md: 44px; --control-height-lg: 52px;
71
+ --gutter: 24px; --gutter-mobile: 16px;
72
+
73
+ /* == Radios, bordes y sombras (teñidas de tinta, nunca negro puro) == */
74
+ --radius-sm: 6px; --radius-md: 10px; --radius-lg: 14px;
75
+ --radius-xl: 20px; --radius-full: 9999px;
76
+ --border-width: 1px;
77
+ --shadow-xs: 0 1px 2px rgba(49,52,62,.06);
78
+ --shadow-sm: 0 1px 3px rgba(49,52,62,.08), 0 1px 2px rgba(49,52,62,.05);
79
+ --shadow-md: 0 4px 8px rgba(49,52,62,.09), 0 2px 4px rgba(49,52,62,.05);
80
+ --shadow-lg: 0 12px 24px rgba(49,52,62,.12), 0 4px 8px rgba(49,52,62,.06);
81
+ --shadow-xl: 0 24px 48px rgba(49,52,62,.16);
82
+
83
+ /* == Focus == */
84
+ --ring: 0 0 0 3px rgba(113,146,186,.25);
85
+ --ring-color: rgba(113,146,186,.25);
86
+
87
+ /* == Motion == */
88
+ --duration-instant: 100ms; --duration-fast: 150ms; --duration-base: 200ms;
89
+ --duration-slow: 250ms; --duration-page: 320ms;
90
+ --ease-out: cubic-bezier(0.2, 0, 0, 1);
91
+ --ease-in: cubic-bezier(0.4, 0, 1, 1);
92
+ --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); /* moverse de A a B en pantalla */
93
+ --ease-spring: cubic-bezier(0.34, 1.4, 0.64, 1);
94
+ --stagger-step: 30ms;
95
+
96
+ color-scheme: light;
97
+ }
98
+
99
+ /* == Modo oscuro (variante) — alternar data-theme en <html> == */
100
+ [data-theme="dark"] {
101
+ --bg: #16181e;
102
+ --surface: #1d2028;
103
+ --surface-alt: #252935;
104
+ --border: #3a3f4d;
105
+ --border-strong: #4a5060;
106
+ --text-primary: #e6e9ee;
107
+ --text-secondary: #b9bfcb;
108
+ --text-muted: #8b91a0;
109
+ --text-disabled: #6f7585;
110
+ --accent: #87a8c7;
111
+ --accent-hover: #a0c0d4;
112
+ --accent-active: #7192ba;
113
+ --accent-soft: rgba(113,146,186,.12);
114
+ --accent-soft-strong: rgba(113,146,186,.2);
115
+ --text-on-primary: #16181e;
116
+ --link: #a0c0d4;
117
+ --success-500: #5cbf93; --success-100: #12291f; --success-text: #7fd4ae;
118
+ --warning-500: #e0ad4d; --warning-100: #2b2210; --warning-text: #ecc57e;
119
+ --danger-500: #e07777; --danger-100: #2e1515; --danger-text: #eb9e9e;
120
+ --info-500: #87a8c7; --info-100: #1a2430; --info-text: #a0c0d4;
121
+ --ring: 0 0 0 3px rgba(160,192,212,.3);
122
+ --ring-color: rgba(160,192,212,.3);
123
+ --shadow-sm: 0 1px 2px rgba(0,0,0,.35);
124
+ --shadow-md: 0 4px 12px rgba(0,0,0,.45);
125
+ --shadow-lg: 0 12px 32px rgba(0,0,0,.55);
126
+ color-scheme: dark;
127
+ }
128
+
129
+ /* == Accesibilidad del movimiento == */
130
+ @media (prefers-reduced-motion: reduce) {
131
+ *, *::before, *::after {
132
+ animation-duration: 0.01ms !important;
133
+ animation-iteration-count: 1 !important;
134
+ transition-duration: 0.01ms !important;
135
+ scroll-behavior: auto !important;
136
+ }
137
+ }