@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,115 @@
1
+ /* ============================================================
2
+ Nocturna Eléctrica — Tailwind CSS v4 (@theme)
3
+ Sistema de diseño de Higinio Sosa · dark-first
4
+ Uso: @import "tailwindcss"; y luego este archivo,
5
+ o copiar este contenido en tu CSS principal de Tailwind v4.
6
+ Requiere dist/nocturna-electrica/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="light"] + fuentes */
12
+
13
+ @theme {
14
+ /* == Colores primitivos → genera bg-night-900, text-accent-400, etc. == */
15
+ --color-accent-100: #d9f0fb;
16
+ --color-accent-200: #a8ddf6;
17
+ --color-accent-300: #7dccf1;
18
+ --color-accent-400: #52baed; /* acento principal — un CTA por pantalla */
19
+ --color-accent-500: #2fa3dd;
20
+ --color-accent-600: #1f87bb;
21
+ --color-accent-700: #186a94;
22
+
23
+ --color-indigo-300: #7a83c4;
24
+ --color-indigo-400: #565fa3;
25
+ --color-indigo-500: #353d7c; /* solo fondos — nunca texto sobre negro (1.9:1) */
26
+ --color-indigo-600: #2b3264;
27
+ --color-indigo-700: #22284f;
28
+ --color-indigo-800: #1a1e3b;
29
+
30
+ --color-night-950: #010203; /* fondo base */
31
+ --color-night-900: #0b0d12;
32
+ --color-night-800: #14171f;
33
+ --color-night-700: #1e222d;
34
+ --color-night-600: #2a2f3d;
35
+ --color-night-500: #3d4354;
36
+ --color-night-400: #6b7183;
37
+ --color-night-300: #9aa0b0;
38
+ --color-night-200: #c5c9d4;
39
+ --color-night-100: #e8eaef; /* texto principal — nunca blanco puro */
40
+ --color-night-50: #f6f7f9;
41
+
42
+ --color-success-400: #4ade80;
43
+ --color-success-950: #0a2617; /* fondo suave */
44
+ --color-warning-400: #fbbf24;
45
+ --color-warning-950: #2a2005;
46
+ --color-danger-400: #f87171;
47
+ --color-danger-950: #2c0f0f;
48
+ --color-info-400: #52baed;
49
+ --color-info-950: #0d1f2c;
50
+
51
+ /* == Tipografía → font-display, font-body, font-mono == */
52
+ --font-display: "Space Grotesk", system-ui, sans-serif; /* solo h1–h3 y cifras hero */
53
+ --font-body: "Manrope", system-ui, sans-serif;
54
+ --font-mono: "JetBrains Mono", 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.2;
64
+ --text-4xl: 2.4375rem; --text-4xl--line-height: 1.15;
65
+ --text-5xl: 3.0625rem; --text-5xl--line-height: 1.05;
66
+
67
+ --tracking-display: -0.02em;
68
+ --tracking-overline: 0.08em;
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
+ /* == Elevación → shadow-1/2/3 + glow == */
77
+ --shadow-1: 0 1px 2px rgba(0,0,0,.4);
78
+ --shadow-2: 0 4px 12px rgba(0,0,0,.5);
79
+ --shadow-3: 0 12px 32px rgba(0,0,0,.6);
80
+ --shadow-glow: 0 0 0 1px rgba(82,186,237,.35), 0 4px 20px rgba(82,186,237,.18); /* máx. uno por pantalla */
81
+
82
+ /* == Easings → ease-out-brand, ease-in-brand, ease-in-out-brand, ease-spring == */
83
+ --ease-out-brand: cubic-bezier(0.2, 0, 0, 1);
84
+ --ease-in-brand: cubic-bezier(0.4, 0, 1, 1);
85
+ --ease-in-out-brand: cubic-bezier(0.65, 0, 0.35, 1); /* moverse de A a B en pantalla */
86
+ --ease-spring: cubic-bezier(0.34, 1.4, 0.64, 1);
87
+ --stagger-step: 30ms;
88
+
89
+ /* Breakpoints: los default de Tailwind (sm 640 / md 768 / lg 1024 / xl 1280)
90
+ coinciden con el sistema — no se redefinen.
91
+ Espaciado: la escala default (múltiplos de 0.25rem = 4px) coincide con
92
+ la escala base 4px del sistema — no se redefine. */
93
+ }
94
+
95
+ /* == Capa semántica con theme switch ==
96
+ Genera utilidades que cambian solas con [data-theme="light"]:
97
+ bg-background · bg-surface-1/2/3 · text-foreground · text-heading ·
98
+ text-muted-foreground · border-border · border-border-strong ·
99
+ bg-accent-brand · text-on-accent · text-link */
100
+ @theme inline {
101
+ --color-background: var(--bg);
102
+ --color-surface-1: var(--surface-1);
103
+ --color-surface-2: var(--surface-2);
104
+ --color-surface-3: var(--surface-3);
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-heading: var(--text-heading);
110
+ --color-border: var(--border);
111
+ --color-border-strong: var(--border-strong);
112
+ --color-accent-brand: var(--accent-400);
113
+ --color-on-accent: var(--text-on-accent);
114
+ --color-link: var(--link);
115
+ }
@@ -0,0 +1,145 @@
1
+ /* ============================================================
2
+ Nocturna Eléctrica — Design Tokens v2.0
3
+ Sistema de diseño de Higinio Sosa · dark-first
4
+ Fuente de verdad: DESIGN-nocturna-electrica.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=Space+Grotesk:wght@500;600;700&family=Manrope:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
10
+
11
+ :root {
12
+ /* == Primitivos: acento (Celeste Eléctrico) == */
13
+ --accent-100: #d9f0fb; --accent-200: #a8ddf6; --accent-300: #7dccf1;
14
+ --accent-400: #52baed; --accent-500: #2fa3dd; --accent-600: #1f87bb; --accent-700: #186a94;
15
+
16
+ /* == Primitivos: índigo (Índigo Profundo) — nunca texto sobre negro == */
17
+ --indigo-300: #7a83c4; --indigo-400: #565fa3; --indigo-500: #353d7c;
18
+ --indigo-600: #2b3264; --indigo-700: #22284f; --indigo-800: #1a1e3b;
19
+
20
+ /* == Primitivos: escala nocturna == */
21
+ --night-950: #010203; --night-900: #0b0d12; --night-800: #14171f;
22
+ --night-700: #1e222d; --night-600: #2a2f3d; --night-500: #3d4354;
23
+ --night-400: #6b7183; --night-300: #9aa0b0; --night-200: #c5c9d4;
24
+ --night-100: #e8eaef; --night-50: #f6f7f9;
25
+
26
+ /* == Primitivos: semánticos (calibrados para dark) == */
27
+ --success-400: #4ade80; --success-bg: #0a2617;
28
+ --warning-400: #fbbf24; --warning-bg: #2a2005;
29
+ --danger-400: #f87171; --danger-bg: #2c0f0f;
30
+ --info-400: #52baed; --info-bg: #0d1f2c;
31
+
32
+ /* == Aliases semánticos (los componentes consumen SOLO esto) == */
33
+ --bg: var(--night-950);
34
+ --surface-1: var(--night-900);
35
+ --surface-2: var(--night-800);
36
+ --surface-3: var(--night-700);
37
+ --border: var(--night-500);
38
+ --border-strong: var(--night-600);
39
+ --text-primary: var(--night-100);
40
+ --text-secondary: var(--night-200);
41
+ --text-muted: var(--night-300);
42
+ --text-disabled: var(--night-400);
43
+ --text-heading: var(--night-50);
44
+ --text-on-accent: var(--night-950); /* texto de CTA oscuro, nunca blanco */
45
+ --success: var(--success-400); --warning: var(--warning-400);
46
+ --danger: var(--danger-400); --info: var(--info-400);
47
+ --link: var(--accent-400);
48
+ --link-hover: var(--accent-200);
49
+ --accent-ghost-hover: rgba(82,186,237,.08);
50
+ --accent-ghost-active: rgba(82,186,237,.14);
51
+ --accent-selected: rgba(82,186,237,.12);
52
+ --overlay: rgba(1,2,3,.7);
53
+
54
+ /* == Tipografía == */
55
+ --font-display: "Space Grotesk", system-ui, sans-serif;
56
+ --font-body: "Manrope", system-ui, sans-serif;
57
+ --font-mono: "JetBrains Mono", monospace;
58
+ --text-xs: .75rem; --text-sm: .875rem; --text-base: 1rem; --text-lg: 1.125rem;
59
+ --text-xl: 1.25rem; --text-2xl: 1.5625rem; --text-3xl: 1.9375rem;
60
+ --text-4xl: 2.4375rem; --text-5xl: 3.0625rem;
61
+ --leading-tight: 1.05; --leading-heading: 1.15; --leading-h2: 1.2;
62
+ --leading-h3: 1.3; --leading-h4: 1.4; --leading-snug: 1.5; --leading-body: 1.6;
63
+ --tracking-display: -0.02em; --tracking-overline: 0.08em;
64
+ --measure: 65ch;
65
+
66
+ /* == Espaciado (escala base 4px) == */
67
+ --space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px;
68
+ --space-5: 20px; --space-6: 24px; --space-8: 32px; --space-10: 40px;
69
+ --space-12: 48px; --space-16: 64px; --space-20: 80px; --space-24: 96px;
70
+ --card-padding: 24px; --card-padding-mobile: 16px;
71
+ --section-gap: 64px; --form-gap: 20px;
72
+ --button-padding: 12px 20px; --touch-target: 44px;
73
+ --grid-gutter: 24px; --grid-gutter-mobile: 16px;
74
+
75
+ /* == Radios y bordes == */
76
+ --radius-sm: 8px; --radius-md: 12px; --radius-lg: 16px;
77
+ --radius-xl: 24px; --radius-full: 9999px;
78
+ --border-default: 1px solid var(--night-500);
79
+ --border-emphasis: 1px solid var(--night-600);
80
+ --focus-ring: 2px solid var(--accent-400);
81
+ --focus-ring-offset: 2px;
82
+
83
+ /* == Elevación (superficie + sombra + borde) == */
84
+ --shadow-1: 0 1px 2px rgba(0,0,0,.4);
85
+ --shadow-2: 0 4px 12px rgba(0,0,0,.5);
86
+ --shadow-3: 0 12px 32px rgba(0,0,0,.6);
87
+ --glow-accent: 0 0 0 1px rgba(82,186,237,.35), 0 4px 20px rgba(82,186,237,.18); /* máx. uno por pantalla */
88
+ --ring: 0 0 0 3px rgba(82,186,237,.2);
89
+ --ring-danger: 0 0 0 3px rgba(248,113,113,.2);
90
+
91
+ /* == Motion == */
92
+ --duration-instant: 100ms; --duration-fast: 150ms; --duration-base: 220ms;
93
+ --duration-slow: 250ms; --duration-page: 350ms;
94
+ --ease-out: cubic-bezier(0.2, 0, 0, 1);
95
+ --ease-in: cubic-bezier(0.4, 0, 1, 1);
96
+ --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1); /* moverse de A a B en pantalla */
97
+ --ease-spring: cubic-bezier(0.34, 1.4, 0.64, 1);
98
+ --stagger-step: 30ms;
99
+
100
+ color-scheme: dark;
101
+ }
102
+
103
+ /* == Modo claro (variante) — alternar data-theme en <html> == */
104
+ [data-theme="light"] {
105
+ --bg: #f5f8fb;
106
+ --surface-1: #ffffff;
107
+ --surface-2: #ffffff;
108
+ --surface-3: #eaf1f7;
109
+ --border: #d8dfe8;
110
+ --border-strong: #b9c3d1;
111
+ --text-primary: #14171f;
112
+ --text-secondary: #3d4354;
113
+ --text-muted: #6b7183;
114
+ --text-disabled: #9aa0b0;
115
+ --text-heading: #14171f;
116
+ --link: #1f87bb;
117
+ --link-hover: #186a94;
118
+ --text-on-accent: #010203; /* CTA no cambia entre modos */
119
+ --success: #15803d;
120
+ --warning: #a16207;
121
+ --danger: #c03535;
122
+ --info: #1f87bb;
123
+ --success-bg: #e3f5ea; --warning-bg: #fbf3dd;
124
+ --danger-bg: #fbe7e7; --info-bg: #e3f2fb;
125
+ --accent-ghost-hover: rgba(31,135,187,.08);
126
+ --accent-ghost-active: rgba(31,135,187,.14);
127
+ --accent-selected: rgba(82,186,237,.12);
128
+ --overlay: rgba(20,23,31,.45);
129
+ --ring: 0 0 0 3px rgba(31,135,187,.25);
130
+ --shadow-1: 0 1px 3px rgba(53,61,124,.08);
131
+ --shadow-2: 0 4px 10px rgba(53,61,124,.10);
132
+ --shadow-3: 0 12px 28px rgba(53,61,124,.14);
133
+ --glow-accent: 0 0 0 1px rgba(82,186,237,.4), 0 4px 16px rgba(82,186,237,.25);
134
+ color-scheme: light;
135
+ }
136
+
137
+ /* == Accesibilidad del movimiento == */
138
+ @media (prefers-reduced-motion: reduce) {
139
+ *, *::before, *::after {
140
+ animation-duration: 0.01ms !important;
141
+ animation-iteration-count: 1 !important;
142
+ transition-duration: 0.01ms !important;
143
+ scroll-behavior: auto !important;
144
+ }
145
+ }