@proyecto-viviana/ui 0.4.0 → 0.5.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.
Files changed (112) hide show
  1. package/dist/styles.css +0 -3
  2. package/dist/vite.d.ts +1 -0
  3. package/dist/vite.d.ts.map +1 -1
  4. package/dist/vite.js +9 -1
  5. package/dist/vite.js.map +1 -1
  6. package/dist/vite.jsx +9 -1
  7. package/dist/vite.jsx.map +1 -1
  8. package/dist/viviana-tokens.css +240 -171
  9. package/package.json +3 -57
  10. package/src/vite.ts +13 -1
  11. package/src/viviana-tokens.css +240 -171
  12. package/dist/CalendarCard.d.ts +0 -2
  13. package/dist/CalendarCard.d.ts.map +0 -1
  14. package/dist/CalendarCard.js +0 -97
  15. package/dist/CalendarCard.js.map +0 -1
  16. package/dist/CalendarCard.jsx +0 -51
  17. package/dist/CalendarCard.jsx.map +0 -1
  18. package/dist/Chip.d.ts +0 -2
  19. package/dist/Chip.d.ts.map +0 -1
  20. package/dist/Chip.js +0 -2
  21. package/dist/Chip.jsx +0 -2
  22. package/dist/Conversation.d.ts +0 -2
  23. package/dist/Conversation.d.ts.map +0 -1
  24. package/dist/Conversation.js +0 -177
  25. package/dist/Conversation.js.map +0 -1
  26. package/dist/Conversation.jsx +0 -107
  27. package/dist/Conversation.jsx.map +0 -1
  28. package/dist/EventCard.d.ts +0 -2
  29. package/dist/EventCard.d.ts.map +0 -1
  30. package/dist/EventCard.js +0 -173
  31. package/dist/EventCard.js.map +0 -1
  32. package/dist/EventCard.jsx +0 -96
  33. package/dist/EventCard.jsx.map +0 -1
  34. package/dist/Logo.d.ts +0 -2
  35. package/dist/Logo.d.ts.map +0 -1
  36. package/dist/Logo.js +0 -116
  37. package/dist/Logo.js.map +0 -1
  38. package/dist/Logo.jsx +0 -101
  39. package/dist/Logo.jsx.map +0 -1
  40. package/dist/PageLayout.d.ts +0 -2
  41. package/dist/PageLayout.d.ts.map +0 -1
  42. package/dist/PageLayout.js +0 -31
  43. package/dist/PageLayout.js.map +0 -1
  44. package/dist/PageLayout.jsx +0 -23
  45. package/dist/PageLayout.jsx.map +0 -1
  46. package/dist/ProfileCard.d.ts +0 -2
  47. package/dist/ProfileCard.d.ts.map +0 -1
  48. package/dist/ProfileCard.js +0 -78
  49. package/dist/ProfileCard.js.map +0 -1
  50. package/dist/ProfileCard.jsx +0 -53
  51. package/dist/ProfileCard.jsx.map +0 -1
  52. package/dist/ProjectCard.d.ts +0 -2
  53. package/dist/ProjectCard.d.ts.map +0 -1
  54. package/dist/ProjectCard.js +0 -164
  55. package/dist/ProjectCard.js.map +0 -1
  56. package/dist/ProjectCard.jsx +0 -133
  57. package/dist/ProjectCard.jsx.map +0 -1
  58. package/dist/TimelineItem.d.ts +0 -2
  59. package/dist/TimelineItem.d.ts.map +0 -1
  60. package/dist/TimelineItem.js +0 -137
  61. package/dist/TimelineItem.js.map +0 -1
  62. package/dist/TimelineItem.jsx +0 -70
  63. package/dist/TimelineItem.jsx.map +0 -1
  64. package/dist/chip2.js +0 -82
  65. package/dist/chip2.js.map +0 -1
  66. package/dist/chip2.jsx +0 -68
  67. package/dist/chip2.jsx.map +0 -1
  68. package/dist/custom/calendar-card/index.d.ts +0 -12
  69. package/dist/custom/calendar-card/index.d.ts.map +0 -1
  70. package/dist/custom/chip/index.d.ts +0 -16
  71. package/dist/custom/chip/index.d.ts.map +0 -1
  72. package/dist/custom/conversation/index.d.ts +0 -32
  73. package/dist/custom/conversation/index.d.ts.map +0 -1
  74. package/dist/custom/event-card/index.d.ts +0 -30
  75. package/dist/custom/event-card/index.d.ts.map +0 -1
  76. package/dist/custom/header/index.d.ts +0 -12
  77. package/dist/custom/header/index.d.ts.map +0 -1
  78. package/dist/custom/lateral-nav/index.d.ts +0 -32
  79. package/dist/custom/lateral-nav/index.d.ts.map +0 -1
  80. package/dist/custom/logo/index.d.ts +0 -11
  81. package/dist/custom/logo/index.d.ts.map +0 -1
  82. package/dist/custom/nav-header/index.d.ts +0 -13
  83. package/dist/custom/nav-header/index.d.ts.map +0 -1
  84. package/dist/custom/page-layout/index.d.ts +0 -7
  85. package/dist/custom/page-layout/index.d.ts.map +0 -1
  86. package/dist/custom/profile-card/index.d.ts +0 -16
  87. package/dist/custom/profile-card/index.d.ts.map +0 -1
  88. package/dist/custom/project-card/index.d.ts +0 -13
  89. package/dist/custom/project-card/index.d.ts.map +0 -1
  90. package/dist/custom/timeline-item/index.d.ts +0 -28
  91. package/dist/custom/timeline-item/index.d.ts.map +0 -1
  92. package/src/CalendarCard.ts +0 -1
  93. package/src/Chip.ts +0 -1
  94. package/src/Conversation.ts +0 -1
  95. package/src/EventCard.ts +0 -1
  96. package/src/Logo.ts +0 -1
  97. package/src/PageLayout.ts +0 -1
  98. package/src/ProfileCard.ts +0 -1
  99. package/src/ProjectCard.ts +0 -1
  100. package/src/TimelineItem.ts +0 -1
  101. package/src/custom/calendar-card/index.tsx +0 -115
  102. package/src/custom/chip/index.tsx +0 -78
  103. package/src/custom/conversation/index.tsx +0 -199
  104. package/src/custom/event-card/index.tsx +0 -232
  105. package/src/custom/header/index.tsx +0 -64
  106. package/src/custom/lateral-nav/index.tsx +0 -134
  107. package/src/custom/logo/index.tsx +0 -53
  108. package/src/custom/nav-header/index.tsx +0 -98
  109. package/src/custom/page-layout/index.tsx +0 -33
  110. package/src/custom/profile-card/index.tsx +0 -114
  111. package/src/custom/project-card/index.tsx +0 -76
  112. package/src/custom/timeline-item/index.tsx +0 -140
@@ -1,88 +1,99 @@
1
1
  /*
2
- * Viviana ("Silapse") design tokens.
2
+ * Viviana UI design tokens — blue + amber frosted glass.
3
3
  *
4
4
  * The brand's color palette + typography, owned by the design system itself so
5
5
  * the product components are self-contained. The S2 style() macro carries the
6
6
  * *shape* (spacing, radius, sizing, type ramp) via its named tokens; these vars
7
- * supply the *colors*, referenced from components as arbitrary `[var(--color-*)]`
8
- * values. Dark is the default (`:root`); light overrides bind to the same
9
- * `data-color-scheme` attribute solid-spectrum's theme uses, so a single scheme
10
- * switch flips both layers together.
7
+ * supply the *color* + the *frosted-glass effect* families, referenced from
8
+ * components as arbitrary `[var(--color-*)]` / `[var(--surface-*)]` values.
9
+ *
10
+ * This is the retuned Viviana UI token layer authored on the
11
+ * `design/visual-system-claude-v1` lane (see `.claude/current/visual-system-lane.md`).
12
+ * It supersedes the earlier blue + pink "Silapse" palette: the accent family is
13
+ * now amber (the single warm, one-per-screen action color), blue carries
14
+ * wayfinding/selection, and new **surface / blur / edge-glass / glow / shadow**
15
+ * families express the frosted-glass surface ladder. Semantic
16
+ * success/warning/danger are unchanged. The values are the canonical spec
17
+ * transcribed from the paired design handoff; the Education reference route keeps
18
+ * the same semantic names under its `.vui` scope.
11
19
  *
12
- * Values mirror apps/web's palette verbatim — keep them in sync until apps/web
13
- * consumes this file directly.
20
+ * Dark is the default (`:root`); light overrides bind to the same
21
+ * `data-color-scheme` attribute solid-spectrum's theme uses, so a single scheme
22
+ * switch flips both layers together. `apps/web` still ships its own copy of the
23
+ * legacy palette until the Tailwind-removal Phase 4 restyle consumes this file
24
+ * directly (`.claude/current/tailwind-removal.md`).
14
25
  */
15
26
 
16
27
  :root {
17
- /* Grey scale */
18
- --color-grey-50: #ffffff;
19
- --color-grey-100: #e0e0e0;
20
- --color-grey-200: #c0c0c0;
21
- --color-grey-300: #a0a0a0;
22
- --color-grey-400: #606060;
23
- --color-grey-500: #404040;
24
- --color-grey-600: #1a1a1a;
25
- --color-grey-700: #111111;
26
- --color-grey-800: #0a0a0a;
27
- --color-grey-900: #000000;
28
-
29
- /* Blue scale */
30
- --color-blue-50: #f0f7ff;
31
- --color-blue-100: #ddf4ff;
32
- --color-blue-200: #b6e3ff;
33
- --color-blue-300: #80ccff;
34
- --color-blue-400: #54aeff;
35
- --color-blue-500: #388bfd;
36
- --color-blue-600: #1f6feb;
37
- --color-blue-700: #1158c7;
38
- --color-blue-800: #0d419d;
39
- --color-blue-900: #050a12;
40
-
41
- /* Pink scale */
42
- --color-pink-50: #fff5f9;
43
- --color-pink-100: #ffe4f3;
44
- --color-pink-200: #ffc9e9;
45
- --color-pink-300: #ffa0d5;
46
- --color-pink-400: #f778ba;
47
- --color-pink-500: #d84a8f;
48
- --color-pink-600: #b13570;
49
- --color-pink-700: #912b5a;
50
- --color-pink-800: #702244;
51
- --color-pink-900: #0f0508;
52
-
53
- /* Background — pure void */
54
- --color-bg-100: #404040;
55
- --color-bg-200: #252525;
56
- --color-bg-300: #1a1a1a;
57
- --color-bg-400: #111111;
58
- --color-bg-light: #515151;
59
-
60
- /* Primary — blue scale */
61
- --color-primary: #75abc7;
62
- --color-primary-50: #081018;
63
- --color-primary-100: #ddf4ff;
64
- --color-primary-200: #b6e3ff;
65
- --color-primary-300: #80ccff;
66
- --color-primary-400: #54aeff;
67
- --color-primary-500: #4da0ff;
68
- --color-primary-600: #3080f4;
69
- --color-primary-700: #1158c7;
70
- --color-primary-800: #0d419d;
71
- --color-primary-900: #050a12;
72
-
73
- /* Accent — pink */
74
- --color-accent: #df5c9a;
75
- --color-accent-50: #100810;
76
- --color-accent-100: #0f0508;
77
- --color-accent-200: #150a12;
78
- --color-accent-300: #ffa0d5;
79
- --color-accent-400: #f778ba;
80
- --color-accent-500: #d84a8f;
81
- --color-accent-600: #f778ba;
82
- --color-accent-700: #ffa0d5;
83
- --color-accent-800: #ffc9e9;
84
- --color-accent-900: #0f0508;
85
- --color-accent-highlight: #e2a2be;
28
+ /* Grey scale — charcoal-slate neutral ramp */
29
+ --color-grey-50: #f3f4f6;
30
+ --color-grey-100: #d7dce2;
31
+ --color-grey-200: #b9c0c9;
32
+ --color-grey-300: #97a1ab;
33
+ --color-grey-400: #626d78;
34
+ --color-grey-500: #4a545e;
35
+ --color-grey-600: #333c45;
36
+ --color-grey-700: #232d37;
37
+ --color-grey-800: #1a222a;
38
+ --color-grey-900: #10161c;
39
+
40
+ /* Blue scale — wayfinding / selection */
41
+ --color-blue-50: #eaf4fe;
42
+ --color-blue-100: #d4e9fd;
43
+ --color-blue-200: #a8d2fb;
44
+ --color-blue-300: #7cbaf8;
45
+ --color-blue-400: #55a6f6;
46
+ --color-blue-500: #2e90fa;
47
+ --color-blue-600: #1877e8;
48
+ --color-blue-700: #135fc0;
49
+ --color-blue-800: #0e4a99;
50
+ --color-blue-900: #0a2f63;
51
+
52
+ /* Amber scale — the single warm action accent */
53
+ --color-amber-50: #fef4e6;
54
+ --color-amber-100: #fde7c8;
55
+ --color-amber-200: #fcd9a0;
56
+ --color-amber-300: #f9c270;
57
+ --color-amber-400: #f9a838;
58
+ --color-amber-500: #f79009;
59
+ --color-amber-600: #e07b00;
60
+ --color-amber-700: #b86200;
61
+ --color-amber-800: #8f4c00;
62
+ --color-amber-900: #3b2200;
63
+
64
+ /* Background — frosted charcoal ladder (near-opaque worst-case surfaces) */
65
+ --color-bg-100: #2a333c;
66
+ --color-bg-200: #232d37;
67
+ --color-bg-300: #1b242c;
68
+ --color-bg-400: #141a1f;
69
+ --color-bg-light: #33424e;
70
+
71
+ /* Primary — blue */
72
+ --color-primary: #55a6f6;
73
+ --color-primary-50: #0a1826;
74
+ --color-primary-100: #d4e9fd;
75
+ --color-primary-200: #a8d2fb;
76
+ --color-primary-300: #7cbaf8;
77
+ --color-primary-400: #55a6f6;
78
+ --color-primary-500: #2e90fa;
79
+ --color-primary-600: #1877e8;
80
+ --color-primary-700: #135fc0;
81
+ --color-primary-800: #0e4a99;
82
+ --color-primary-900: #0a2f63;
83
+
84
+ /* Accent — amber (high indices lighten for text/marks on dark) */
85
+ --color-accent: #f79009;
86
+ --color-accent-50: #1f1405;
87
+ --color-accent-100: #fde7c8;
88
+ --color-accent-200: #fcd9a0;
89
+ --color-accent-300: #f9c270;
90
+ --color-accent-400: #f9a838;
91
+ --color-accent-500: #f79009;
92
+ --color-accent-600: #f9a838;
93
+ --color-accent-700: #f9c270;
94
+ --color-accent-800: #fde7c8;
95
+ --color-accent-900: #3b2200;
96
+ --color-accent-highlight: #f9c270;
86
97
 
87
98
  /* Semantic colors */
88
99
  --color-success-100: #e5fff3;
@@ -114,36 +125,36 @@
114
125
  --color-danger-900: #ffe5e5;
115
126
 
116
127
  /* Cards */
117
- --color-cards-bg: #373737;
118
- --color-cards-bg-load: #484848;
128
+ --color-cards-bg: #232d37;
129
+ --color-cards-bg-load: #2f3a44;
119
130
  --color-correct: #83f1a7;
120
131
  --color-incorrect: #e74c3c;
121
132
 
122
133
  /* Canvas */
123
- --color-canvas-bg: #000000;
134
+ --color-canvas-bg: #10161c;
124
135
 
125
- /* Surfaces */
126
- --color-background: #000000;
127
- --color-surface: #0a0a0a;
128
- --color-surface-elevated: #111111;
136
+ /* Surfaces (opaque) */
137
+ --color-background: #141a1f;
138
+ --color-surface: #1b242c;
139
+ --color-surface-elevated: #232d37;
129
140
 
130
141
  /* Blue depth backgrounds */
131
- --color-bg-blue-deep: #050a12;
132
- --color-bg-blue-dark: #081020;
133
- --color-bg-blue-mid: #0a1830;
134
- --color-bg-blue-light: #102040;
142
+ --color-bg-blue-deep: #071726;
143
+ --color-bg-blue-dark: #0a1f33;
144
+ --color-bg-blue-mid: #0e2a44;
145
+ --color-bg-blue-light: #123a5e;
135
146
 
136
147
  /* Text */
137
- --color-text: #ffffff;
138
- --color-text-secondary: #a0a0a0;
139
- --color-text-muted: #606060;
140
- --color-text-dim: #4f6d85;
141
- --color-text-disabled: #404040;
148
+ --color-text: #f3f4f6;
149
+ --color-text-secondary: #97a1ab;
150
+ --color-text-muted: #626d78;
151
+ --color-text-dim: #55708a;
152
+ --color-text-disabled: #3a444e;
142
153
 
143
154
  /* Borders */
144
- --color-border: #1a1a1a;
145
- --color-border-muted: #141414;
146
- --color-divider: #141414;
155
+ --color-border: #232d37;
156
+ --color-border-muted: #1a222a;
157
+ --color-divider: #1a222a;
147
158
 
148
159
  /* Semantic base + dim */
149
160
  --color-success: #3fb950;
@@ -154,22 +165,51 @@
154
165
  --color-danger-dim: #da3633;
155
166
 
156
167
  /* Dim versions (wire base / inactive elements) */
157
- --color-primary-dim: #1a3040;
158
- --color-accent-dim: #301520;
168
+ --color-primary-dim: #123a5e;
169
+ --color-accent-dim: #3b2a12;
159
170
 
160
171
  /* Header background */
161
- --color-header-bg: #181818;
172
+ --color-header-bg: #1b242c;
162
173
 
163
- /* Glow effects (for drop-shadow filters) */
164
- --color-primary-glow: rgba(128, 204, 255, 0.6);
165
- --color-accent-glow: rgba(255, 160, 213, 0.6);
166
- --color-fusion-glow: rgba(180, 140, 230, 0.7);
174
+ /* Glow effects (for drop-shadow filters) — blue + amber */
175
+ --color-primary-glow: rgba(46, 144, 250, 0.55);
176
+ --color-accent-glow: rgba(247, 144, 9, 0.5);
177
+ --color-fusion-glow: rgba(139, 92, 246, 0.5);
167
178
 
168
179
  /* Semantic background tints */
169
180
  --color-success-bg: rgba(63, 185, 80, 0.1);
170
181
  --color-warning-bg: rgba(210, 153, 34, 0.1);
171
182
  --color-danger-bg: rgba(248, 81, 73, 0.1);
172
183
 
184
+ /* ── Frosted-glass surface family (translucent ladder over a lit scene) ── */
185
+ --surface-app: #1e2227;
186
+ --surface-panel: rgba(20, 26, 31, 0.94);
187
+ --surface-card: rgba(27, 36, 44, 0.9);
188
+ --surface-raised: rgba(35, 45, 55, 0.95);
189
+ --surface-inset: rgba(13, 17, 21, 0.72);
190
+ --surface-hover: rgba(42, 53, 64, 0.95);
191
+ --surface-ghost: rgba(30, 36, 41, 0.28);
192
+
193
+ /* Accent surface tints (soft fills for selected/warm states) */
194
+ --accent-primary: var(--color-primary);
195
+ --accent-primary-soft: rgba(46, 144, 250, 0.15);
196
+ --accent-warm: var(--color-accent);
197
+ --accent-warm-soft: rgba(247, 144, 9, 0.15);
198
+
199
+ /* ── Blur family ── */
200
+ --blur-panel: blur(18px);
201
+ --blur-card: blur(10px);
202
+
203
+ /* ── Edge-glass (inner highlight that catches the light) ── */
204
+ --edge-glass: inset 0 1px 0 rgba(255, 255, 255, 0.09), inset 0 0 0 1px rgba(255, 255, 255, 0.04);
205
+
206
+ /* ── Shadow + glow family (glow follows the accent, never the chrome) ── */
207
+ --shadow-card: 0 2px 8px rgba(0, 0, 0, 0.35), 0 8px 24px rgba(0, 0, 0, 0.4);
208
+ --shadow-panel: 0 12px 40px rgba(0, 0, 0, 0.5);
209
+ --shadow-float: 0 16px 48px rgba(0, 0, 0, 0.6);
210
+ --shadow-glow-blue: 0 0 24px rgba(46, 144, 250, 0.35);
211
+ --shadow-glow-warm: 0 0 24px rgba(247, 144, 9, 0.3);
212
+
173
213
  /* Typography */
174
214
  --font-sen: "Sen", sans-serif;
175
215
  --font-jost: "Jost", sans-serif;
@@ -177,6 +217,8 @@
177
217
  --font-mono: "JetBrains Mono", monospace;
178
218
  --font-title: "Jost", system-ui, sans-serif;
179
219
  --font-body: "Sen", system-ui, sans-serif;
220
+ --font-display: var(--font-jost);
221
+ --font-ui: var(--font-sen);
180
222
  }
181
223
 
182
224
  [data-color-scheme="light"] {
@@ -191,55 +233,56 @@
191
233
  --color-grey-800: #262626;
192
234
  --color-grey-900: #171717;
193
235
 
194
- --color-blue-100: #e0f0f7;
195
- --color-blue-200: #b6d9eb;
196
- --color-blue-300: #8bc4db;
197
- --color-blue-400: #75abc7;
198
- --color-blue-500: #5a94b3;
199
- --color-blue-600: #3d7a9c;
200
- --color-blue-700: #2b6080;
201
- --color-blue-800: #1a4560;
202
- --color-blue-900: #0d2a3d;
203
-
204
- --color-pink-100: #fef2f7;
205
- --color-pink-200: #fcc7e0;
206
- --color-pink-300: #f78fb9;
207
- --color-pink-400: #df5c9a;
208
- --color-pink-500: #cf2c74;
209
- --color-pink-600: #a31f58;
210
- --color-pink-700: #8a1a4a;
211
- --color-pink-800: #6b143a;
212
- --color-pink-900: #4d0f2a;
213
-
214
- /* Backgrounds — AA-verified against primary text */
215
- --color-bg-100: #7096a8;
216
- --color-bg-200: #a8c5d4;
217
- --color-bg-300: #c8dce6;
218
- --color-bg-400: #dbe8ef;
236
+ /* Blue + primary FLIP for daylight: the :root (dark) ramp runs light→dark as
237
+ the index climbs, so the low indices (100/200/300 — used as *text*: wordmarks,
238
+ card titles, nav section titles, active links) must invert to dark navy here,
239
+ or they render near-invisible on the light surfaces. Mid index 500 stays a
240
+ readable medium blue (its only text use sits on the light bg-400 bar); 700
241
+ lightens because it is a *fill* (the primary Chip) that carries dark text.
242
+ Same hue as dark — only lightness/saturation shift for AA (WCAG verified
243
+ against the bg-* ladder below). Blue mirrors primary (no direct consumers,
244
+ kept in lockstep for future use). */
245
+ --color-blue-50: #eef5ff;
246
+ --color-blue-100: #08203c;
247
+ --color-blue-200: #0b2a4a;
248
+ --color-blue-300: #103c67;
249
+ --color-blue-400: #15508a;
250
+ --color-blue-500: #1a5fa3;
251
+ --color-blue-600: #2270b0;
252
+ --color-blue-700: #6fa8d6;
253
+ --color-blue-800: #a8cfec;
254
+ --color-blue-900: #0b2545;
255
+ --color-primary: #1a5fa3;
256
+ --color-primary-50: #eef5ff;
257
+ --color-primary-100: #08203c;
258
+ --color-primary-200: #0b2a4a;
259
+ --color-primary-300: #103c67;
260
+ --color-primary-400: #15508a;
261
+ --color-primary-500: #1a5fa3;
262
+ --color-primary-600: #2270b0;
263
+ --color-primary-700: #6fa8d6;
264
+ --color-primary-800: #a8cfec;
265
+ --color-primary-900: #0b2545;
266
+
267
+ /* Amber accent — high indices darken for text/marks on light */
268
+ --color-accent: #f79009;
269
+ --color-accent-100: #fef4e6;
270
+ --color-accent-200: #7a4a00;
271
+ --color-accent-300: #f9c270;
272
+ --color-accent-400: #f79009;
273
+ --color-accent-500: #8a5200;
274
+ --color-accent-highlight: #e07b00;
275
+
276
+ /* Backgrounds — daylight slate ladder, AA-verified against primary text.
277
+ bg-100 (the darkest rung, e.g. the secondary Chip fill) is lightened enough
278
+ that dark primary-200 text clears 4.5:1 on it — a mid-slate cannot host any
279
+ AA text. */
280
+ --color-bg-100: #7ba0b3;
281
+ --color-bg-200: #aebccb;
282
+ --color-bg-300: #cdd8e4;
283
+ --color-bg-400: #e2e9f1;
219
284
  --color-bg-light: #ffffff;
220
285
 
221
- /* Primary — blue */
222
- --color-primary: #75abc7;
223
- --color-primary-50: #f0f7ff;
224
- --color-primary-100: #06131d;
225
- --color-primary-200: #0c2436;
226
- --color-primary-300: #133a54;
227
- --color-primary-400: #195073;
228
- --color-primary-500: #1e6090;
229
- --color-primary-600: #2470a5;
230
- --color-primary-700: #5ea8d0;
231
- --color-primary-800: #9dcce4;
232
- --color-primary-900: #0d2a3d;
233
-
234
- /* Accent — pink */
235
- --color-accent: #df5c9a;
236
- --color-accent-100: #fef2f7;
237
- --color-accent-200: #7d1c48;
238
- --color-accent-300: #f78fb9;
239
- --color-accent-400: #df5c9a;
240
- --color-accent-500: #8a1e4a;
241
- --color-accent-highlight: #d4508a;
242
-
243
286
  /* Semantic — darker for readability on light bgs */
244
287
  --color-success-100: #e5fff3;
245
288
  --color-success-200: #c2ffc8;
@@ -269,33 +312,39 @@
269
312
  --color-danger-800: #572f2f;
270
313
  --color-danger-900: #351c1c;
271
314
 
272
- --color-cards-bg: #ecf2f5;
273
- --color-cards-bg-load: #dfeaef;
315
+ --color-cards-bg: #ffffff;
316
+ --color-cards-bg-load: #eef3f9;
274
317
  --color-correct: #1a7f37;
275
318
  --color-incorrect: #cf222e;
276
319
 
277
- --color-canvas-bg: #404040;
320
+ --color-canvas-bg: #dbe8ef;
278
321
 
279
- /* Surfaces */
280
- --color-background: #f2f7fa;
322
+ /* Surfaces (opaque) */
323
+ --color-background: #eef3f9;
281
324
  --color-surface: #ffffff;
282
- --color-surface-elevated: #e6f0f5;
325
+ --color-surface-elevated: #e7edf5;
283
326
 
284
- --color-bg-blue-deep: #e0f0f7;
285
- --color-bg-blue-dark: #b6d9eb;
286
- --color-bg-blue-mid: #8bc4db;
287
- --color-bg-blue-light: #75abc7;
327
+ --color-bg-blue-deep: #eaf4fe;
328
+ --color-bg-blue-dark: #d4e9fd;
329
+ --color-bg-blue-mid: #a8d2fb;
330
+ --color-bg-blue-light: #7cbaf8;
288
331
 
289
332
  /* Text */
290
- --color-text: #1a3040;
333
+ --color-text: #17212e;
334
+ /* WCAG AA: secondary text lands as normal-size runs on the light
335
+ --color-bg-300 card (EventListItem subtitle, CalendarCard "seguida por"
336
+ connector). A mid-slate (#64748b) read only 3.29:1 there; this darker
337
+ slate-blue clears 4.82:1 on bg-300 while staying the same hue and reading
338
+ as muted secondary against the near-black --color-text. */
291
339
  --color-text-secondary: #405d70;
292
- --color-text-muted: #7096a8;
293
- --color-text-disabled: #a8c5d4;
340
+ --color-text-muted: #94a3b8;
341
+ --color-text-dim: #64748b;
342
+ --color-text-disabled: #c4d0de;
294
343
 
295
344
  /* Borders */
296
- --color-border: #c8dce6;
297
- --color-border-muted: #dbe8ef;
298
- --color-divider: #dbe8ef;
345
+ --color-border: #dce4ee;
346
+ --color-border-muted: #eaeff6;
347
+ --color-divider: #eaeff6;
299
348
 
300
349
  /* Semantic base + dim */
301
350
  --color-success: #5bc96e;
@@ -306,13 +355,33 @@
306
355
  --color-danger-dim: #9d5555;
307
356
 
308
357
  /* Dim, glow, bg tints */
309
- --color-primary-dim: #b6d9eb;
310
- --color-accent-dim: #fcc7e0;
311
- --color-header-bg: #d0e4ed;
312
- --color-primary-glow: rgba(117, 171, 199, 0.4);
313
- --color-accent-glow: rgba(223, 92, 154, 0.4);
314
- --color-fusion-glow: rgba(170, 130, 180, 0.5);
358
+ --color-primary-dim: #d4e9fd;
359
+ --color-accent-dim: #fde7c8;
360
+ --color-header-bg: #e7edf5;
361
+ --color-primary-glow: rgba(46, 144, 250, 0.4);
362
+ --color-accent-glow: rgba(247, 144, 9, 0.35);
363
+ --color-fusion-glow: rgba(139, 92, 246, 0.4);
315
364
  --color-success-bg: rgba(63, 185, 80, 0.1);
316
365
  --color-warning-bg: rgba(210, 153, 34, 0.15);
317
366
  --color-danger-bg: rgba(248, 81, 73, 0.1);
367
+
368
+ /* ── Frosted-glass surface family (daylight) ── */
369
+ --surface-app: #e9eff6;
370
+ --surface-panel: rgba(255, 255, 255, 0.42);
371
+ --surface-card: rgba(255, 255, 255, 0.55);
372
+ --surface-raised: rgba(255, 255, 255, 0.88);
373
+ --surface-inset: rgba(238, 243, 249, 0.55);
374
+ --surface-hover: rgba(255, 255, 255, 0.75);
375
+ --surface-ghost: rgba(255, 255, 255, 0.18);
376
+
377
+ --accent-primary-soft: rgba(46, 144, 250, 0.1);
378
+ --accent-warm-soft: rgba(247, 144, 9, 0.1);
379
+
380
+ /* Edge-glass + shadow/glow — daylight (soft, cool-tinted; glow carries accent) */
381
+ --edge-glass: inset 0 1px 0 rgba(255, 255, 255, 0.9), inset 0 0 0 1px rgba(255, 255, 255, 0.35);
382
+ --shadow-card: 0 2px 8px rgba(99, 115, 139, 0.08), 0 8px 24px rgba(99, 115, 139, 0.1);
383
+ --shadow-panel: 0 12px 40px rgba(99, 115, 139, 0.14);
384
+ --shadow-float: 0 16px 48px rgba(99, 115, 139, 0.22);
385
+ --shadow-glow-blue: 0 4px 20px rgba(46, 144, 250, 0.28);
386
+ --shadow-glow-warm: 0 4px 20px rgba(247, 144, 9, 0.24);
318
387
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proyecto-viviana/ui",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Viviana design system. Starts by re-exporting @proyecto-viviana/solid-spectrum (same components + tokens + style macro); diverges (viviana tokens, then components) over time.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -218,60 +218,6 @@
218
218
  "import": "./dist/TreeView.js",
219
219
  "default": "./dist/TreeView.js"
220
220
  },
221
- "./CalendarCard": {
222
- "types": "./dist/CalendarCard.d.ts",
223
- "solid": "./dist/CalendarCard.jsx",
224
- "import": "./dist/CalendarCard.js",
225
- "default": "./dist/CalendarCard.js"
226
- },
227
- "./Chip": {
228
- "types": "./dist/Chip.d.ts",
229
- "solid": "./dist/Chip.jsx",
230
- "import": "./dist/Chip.js",
231
- "default": "./dist/Chip.js"
232
- },
233
- "./Conversation": {
234
- "types": "./dist/Conversation.d.ts",
235
- "solid": "./dist/Conversation.jsx",
236
- "import": "./dist/Conversation.js",
237
- "default": "./dist/Conversation.js"
238
- },
239
- "./EventCard": {
240
- "types": "./dist/EventCard.d.ts",
241
- "solid": "./dist/EventCard.jsx",
242
- "import": "./dist/EventCard.js",
243
- "default": "./dist/EventCard.js"
244
- },
245
- "./Logo": {
246
- "types": "./dist/Logo.d.ts",
247
- "solid": "./dist/Logo.jsx",
248
- "import": "./dist/Logo.js",
249
- "default": "./dist/Logo.js"
250
- },
251
- "./PageLayout": {
252
- "types": "./dist/PageLayout.d.ts",
253
- "solid": "./dist/PageLayout.jsx",
254
- "import": "./dist/PageLayout.js",
255
- "default": "./dist/PageLayout.js"
256
- },
257
- "./ProfileCard": {
258
- "types": "./dist/ProfileCard.d.ts",
259
- "solid": "./dist/ProfileCard.jsx",
260
- "import": "./dist/ProfileCard.js",
261
- "default": "./dist/ProfileCard.js"
262
- },
263
- "./ProjectCard": {
264
- "types": "./dist/ProjectCard.d.ts",
265
- "solid": "./dist/ProjectCard.jsx",
266
- "import": "./dist/ProjectCard.js",
267
- "default": "./dist/ProjectCard.js"
268
- },
269
- "./TimelineItem": {
270
- "types": "./dist/TimelineItem.d.ts",
271
- "solid": "./dist/TimelineItem.jsx",
272
- "import": "./dist/TimelineItem.js",
273
- "default": "./dist/TimelineItem.js"
274
- },
275
221
  "./theme.css": "./dist/theme.css",
276
222
  "./font-faces.css": "./dist/font-faces.css",
277
223
  "./styles.css": "./dist/styles.css",
@@ -299,8 +245,8 @@
299
245
  "access": "public"
300
246
  },
301
247
  "dependencies": {
302
- "@proyecto-viviana/solid-spectrum": "0.6.0",
303
- "@proyecto-viviana/solidaria-components": "0.4.0"
248
+ "@proyecto-viviana/solidaria-components": "0.4.1",
249
+ "@proyecto-viviana/solid-spectrum": "0.6.2"
304
250
  },
305
251
  "devDependencies": {
306
252
  "solid-js": "^1.9.0",
package/src/vite.ts CHANGED
@@ -46,6 +46,7 @@ import macros from "unplugin-parcel-macros";
46
46
  // typed `Plugin | Plugin[]`; we always get the single-plugin form.
47
47
  interface MacroPlugin {
48
48
  name?: string;
49
+ transformInclude?: (id: string) => boolean | void;
49
50
  transform?: (this: unknown, code: string, id: string) => unknown;
50
51
  resolveId?: (this: unknown, id: string, importer?: string, options?: object) => unknown;
51
52
  loadInclude?: (id: string) => boolean | void;
@@ -56,6 +57,14 @@ interface MacroPlugin {
56
57
  const macroCssIdPattern = /^macro-[a-f0-9]+\.css$/;
57
58
  const macroCssImportPattern = /import\s+["']macro-[a-f0-9]+\.css["'];\n?/g;
58
59
 
60
+ function getMacroSourceFilePath(id: string) {
61
+ const queryIndex = id.indexOf("?");
62
+ if (queryIndex === -1 || !/^\?tsr-split=[^&#]+(?:#.*)?$/.test(id.slice(queryIndex))) {
63
+ return id;
64
+ }
65
+ return id.slice(0, queryIndex);
66
+ }
67
+
59
68
  function getMacroCssFileName(id: string) {
60
69
  const fileName = id.split("/").pop();
61
70
  return fileName && macroCssIdPattern.test(fileName) ? fileName : null;
@@ -97,8 +106,11 @@ export function vivianaMacros(): MacroPlugin {
97
106
 
98
107
  return {
99
108
  ...plugin,
109
+ transformInclude(id: string) {
110
+ return plugin.transformInclude?.(getMacroSourceFilePath(id)) ?? false;
111
+ },
100
112
  async transform(this: unknown, code: string, id: string) {
101
- const result = await plugin.transform?.call(this, code, id);
113
+ const result = await plugin.transform?.call(this, code, getMacroSourceFilePath(id));
102
114
  const transformedCode =
103
115
  typeof result === "string"
104
116
  ? result