@proyecto-viviana/ui 0.4.1 → 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 (105) hide show
  1. package/dist/styles.css +0 -3
  2. package/dist/viviana-tokens.css +240 -171
  3. package/package.json +3 -57
  4. package/src/viviana-tokens.css +240 -171
  5. package/dist/CalendarCard.d.ts +0 -2
  6. package/dist/CalendarCard.d.ts.map +0 -1
  7. package/dist/CalendarCard.js +0 -96
  8. package/dist/CalendarCard.js.map +0 -1
  9. package/dist/CalendarCard.jsx +0 -50
  10. package/dist/CalendarCard.jsx.map +0 -1
  11. package/dist/Chip.d.ts +0 -2
  12. package/dist/Chip.d.ts.map +0 -1
  13. package/dist/Chip.js +0 -2
  14. package/dist/Chip.jsx +0 -2
  15. package/dist/Conversation.d.ts +0 -2
  16. package/dist/Conversation.d.ts.map +0 -1
  17. package/dist/Conversation.js +0 -176
  18. package/dist/Conversation.js.map +0 -1
  19. package/dist/Conversation.jsx +0 -106
  20. package/dist/Conversation.jsx.map +0 -1
  21. package/dist/EventCard.d.ts +0 -2
  22. package/dist/EventCard.d.ts.map +0 -1
  23. package/dist/EventCard.js +0 -171
  24. package/dist/EventCard.js.map +0 -1
  25. package/dist/EventCard.jsx +0 -94
  26. package/dist/EventCard.jsx.map +0 -1
  27. package/dist/Logo.d.ts +0 -2
  28. package/dist/Logo.d.ts.map +0 -1
  29. package/dist/Logo.js +0 -116
  30. package/dist/Logo.js.map +0 -1
  31. package/dist/Logo.jsx +0 -101
  32. package/dist/Logo.jsx.map +0 -1
  33. package/dist/PageLayout.d.ts +0 -2
  34. package/dist/PageLayout.d.ts.map +0 -1
  35. package/dist/PageLayout.js +0 -31
  36. package/dist/PageLayout.js.map +0 -1
  37. package/dist/PageLayout.jsx +0 -23
  38. package/dist/PageLayout.jsx.map +0 -1
  39. package/dist/ProfileCard.d.ts +0 -2
  40. package/dist/ProfileCard.d.ts.map +0 -1
  41. package/dist/ProfileCard.js +0 -77
  42. package/dist/ProfileCard.js.map +0 -1
  43. package/dist/ProfileCard.jsx +0 -52
  44. package/dist/ProfileCard.jsx.map +0 -1
  45. package/dist/ProjectCard.d.ts +0 -2
  46. package/dist/ProjectCard.d.ts.map +0 -1
  47. package/dist/ProjectCard.js +0 -162
  48. package/dist/ProjectCard.js.map +0 -1
  49. package/dist/ProjectCard.jsx +0 -131
  50. package/dist/ProjectCard.jsx.map +0 -1
  51. package/dist/TimelineItem.d.ts +0 -2
  52. package/dist/TimelineItem.d.ts.map +0 -1
  53. package/dist/TimelineItem.js +0 -137
  54. package/dist/TimelineItem.js.map +0 -1
  55. package/dist/TimelineItem.jsx +0 -70
  56. package/dist/TimelineItem.jsx.map +0 -1
  57. package/dist/chip2.js +0 -82
  58. package/dist/chip2.js.map +0 -1
  59. package/dist/chip2.jsx +0 -68
  60. package/dist/chip2.jsx.map +0 -1
  61. package/dist/custom/calendar-card/index.d.ts +0 -12
  62. package/dist/custom/calendar-card/index.d.ts.map +0 -1
  63. package/dist/custom/chip/index.d.ts +0 -16
  64. package/dist/custom/chip/index.d.ts.map +0 -1
  65. package/dist/custom/conversation/index.d.ts +0 -32
  66. package/dist/custom/conversation/index.d.ts.map +0 -1
  67. package/dist/custom/event-card/index.d.ts +0 -30
  68. package/dist/custom/event-card/index.d.ts.map +0 -1
  69. package/dist/custom/header/index.d.ts +0 -12
  70. package/dist/custom/header/index.d.ts.map +0 -1
  71. package/dist/custom/lateral-nav/index.d.ts +0 -32
  72. package/dist/custom/lateral-nav/index.d.ts.map +0 -1
  73. package/dist/custom/logo/index.d.ts +0 -11
  74. package/dist/custom/logo/index.d.ts.map +0 -1
  75. package/dist/custom/nav-header/index.d.ts +0 -13
  76. package/dist/custom/nav-header/index.d.ts.map +0 -1
  77. package/dist/custom/page-layout/index.d.ts +0 -7
  78. package/dist/custom/page-layout/index.d.ts.map +0 -1
  79. package/dist/custom/profile-card/index.d.ts +0 -16
  80. package/dist/custom/profile-card/index.d.ts.map +0 -1
  81. package/dist/custom/project-card/index.d.ts +0 -13
  82. package/dist/custom/project-card/index.d.ts.map +0 -1
  83. package/dist/custom/timeline-item/index.d.ts +0 -28
  84. package/dist/custom/timeline-item/index.d.ts.map +0 -1
  85. package/src/CalendarCard.ts +0 -1
  86. package/src/Chip.ts +0 -1
  87. package/src/Conversation.ts +0 -1
  88. package/src/EventCard.ts +0 -1
  89. package/src/Logo.ts +0 -1
  90. package/src/PageLayout.ts +0 -1
  91. package/src/ProfileCard.ts +0 -1
  92. package/src/ProjectCard.ts +0 -1
  93. package/src/TimelineItem.ts +0 -1
  94. package/src/custom/calendar-card/index.tsx +0 -124
  95. package/src/custom/chip/index.tsx +0 -82
  96. package/src/custom/conversation/index.tsx +0 -216
  97. package/src/custom/event-card/index.tsx +0 -253
  98. package/src/custom/header/index.tsx +0 -64
  99. package/src/custom/lateral-nav/index.tsx +0 -143
  100. package/src/custom/logo/index.tsx +0 -60
  101. package/src/custom/nav-header/index.tsx +0 -106
  102. package/src/custom/page-layout/index.tsx +0 -33
  103. package/src/custom/profile-card/index.tsx +0 -123
  104. package/src/custom/project-card/index.tsx +0 -76
  105. package/src/custom/timeline-item/index.tsx +0 -148
@@ -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
  }
@@ -1,2 +0,0 @@
1
- export * from "./custom/calendar-card";
2
- //# sourceMappingURL=CalendarCard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CalendarCard.d.ts","sourceRoot":"","sources":["../src/CalendarCard.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
@@ -1,96 +0,0 @@
1
- import { t as Chip } from "./chip2.js";
2
- /* empty css */
3
- /* empty css */
4
- import { className, createComponent, effect, getNextElement, getNextMarker, insert, memo, setAttribute, template } from "solid-js/web";
5
- import { For, Show } from "solid-js";
6
- //#region src/custom/calendar-card/index.tsx
7
- var _tmpl$ = /*#__PURE__*/ template(`<img class=" ZKniM151 FKniM151 _va151 _Hb151 oc151 nc151 kc151 jc151 _kc151 hc151 mc151 lc151 _jf151 ij1j4Pd151">`), _tmpl$2 = /*#__PURE__*/ template(`<span class=" xd151 _xa151 xX0cczbc151 _xX0cczba151 pO550xe151"><!$><!/> más`), _tmpl$3 = /*#__PURE__*/ template(`<span class=" uk151 ucJ9TBTb151 ud3Euai151 uea151 ugb151 uhd151 uje151 u2NhKxcl151 uic151 -_6BNtrc-b151 vx151 xb151 _xa151 _Fd151 _FnuYUweb151 pxeCuqc151">seguida por <!$><!/><!$><!/>`), _tmpl$4 = /*#__PURE__*/ template(`<div class=" sd151 _wb151 Ub151 qb151">`), _tmpl$5 = /*#__PURE__*/ template(`<div><!$><!/><div class=" sd151 _ta151 Ue151 qe151 _ub151 Na151"><span class=" uk151 ucJ9TBTb151 ud3Euai151 uea151 ugb151 uhd151 uje151 u2NhKxcl151 uic151 -_6BNtrc-f151 vx151 xe151 _xa151 xX0cczbd151 _xX0cczba151 xfe151 _xfa151 xfX0cczbd151 _xfX0cczba151 _Fd151 _FnuYUweb151 pXDQpyb151 _Nc151 Pc151 _Yb151 _7c151"></span><!$><!/><!$><!/>`), _tmpl$6 = /*#__PURE__*/ template(`<span class=" xd151 _xa151 xX0cczbc151 _xX0cczba151 pO550xe151">`);
8
- const card = " sd151 eb151 Ug151 qg151 Za151 LQAax0d151 Te151 Qe151 Se151 Re151 oe151 ne151 ke151 je151 _kc151 hc151 mc151 lc151 _jf151 i6nBqyb151 gg0eWE151 _nLeasBb151";
9
- function CalendarCard(props) {
10
- const displayedFollowers = () => props.followers?.slice(0, 2) ?? [];
11
- const remainingCount = () => {
12
- return (props.followerCount ?? props.followers?.length ?? 0) - displayedFollowers().length;
13
- };
14
- return (() => {
15
- var _el$ = getNextElement(_tmpl$5), _el$19 = _el$.firstChild, [_el$20, _co$6] = getNextMarker(_el$19.nextSibling), _el$3 = _el$20.nextSibling, _el$4 = _el$3.firstChild, _el$15 = _el$4.nextSibling, [_el$16, _co$4] = getNextMarker(_el$15.nextSibling), _el$17 = _el$16.nextSibling, [_el$18, _co$5] = getNextMarker(_el$17.nextSibling);
16
- insert(_el$, createComponent(Show, {
17
- get when() {
18
- return props.image;
19
- },
20
- get children() {
21
- var _el$2 = getNextElement(_tmpl$);
22
- effect((_p$) => {
23
- var _v$ = props.image, _v$2 = props.title;
24
- _v$ !== _p$.e && setAttribute(_el$2, "src", _p$.e = _v$);
25
- _v$2 !== _p$.t && setAttribute(_el$2, "alt", _p$.t = _v$2);
26
- return _p$;
27
- }, {
28
- e: void 0,
29
- t: void 0
30
- });
31
- return _el$2;
32
- }
33
- }), _el$20, _co$6);
34
- insert(_el$4, () => props.title);
35
- insert(_el$3, createComponent(Show, {
36
- get when() {
37
- return displayedFollowers().length > 0;
38
- },
39
- get children() {
40
- var _el$5 = getNextElement(_tmpl$3), _el$10 = _el$5.firstChild.nextSibling, [_el$11, _co$2] = getNextMarker(_el$10.nextSibling), _el$12 = _el$11.nextSibling, [_el$13, _co$3] = getNextMarker(_el$12.nextSibling);
41
- insert(_el$5, createComponent(For, {
42
- get each() {
43
- return displayedFollowers();
44
- },
45
- children: (follower, index) => [(() => {
46
- var _el$21 = getNextElement(_tmpl$6);
47
- insert(_el$21, () => follower.name);
48
- return _el$21;
49
- })(), memo(() => index() < displayedFollowers().length - 1 && ", ")]
50
- }), _el$11, _co$2);
51
- insert(_el$5, createComponent(Show, {
52
- get when() {
53
- return remainingCount() > 0;
54
- },
55
- get children() {
56
- return [
57
- " ",
58
- "y ",
59
- (() => {
60
- var _el$8 = getNextElement(_tmpl$2), _el$0 = _el$8.firstChild, [_el$1, _co$] = getNextMarker(_el$0.nextSibling);
61
- _el$1.nextSibling;
62
- insert(_el$8, remainingCount, _el$1, _co$);
63
- return _el$8;
64
- })()
65
- ];
66
- }
67
- }), _el$13, _co$3);
68
- return _el$5;
69
- }
70
- }), _el$16, _co$4);
71
- insert(_el$3, createComponent(Show, {
72
- get when() {
73
- return memo(() => !!props.tags)() && props.tags.length > 0;
74
- },
75
- get children() {
76
- var _el$14 = getNextElement(_tmpl$4);
77
- insert(_el$14, createComponent(For, {
78
- get each() {
79
- return props.tags;
80
- },
81
- children: (tag) => createComponent(Chip, {
82
- text: tag,
83
- variant: "primary"
84
- })
85
- }));
86
- return _el$14;
87
- }
88
- }), _el$18, _co$5);
89
- effect(() => className(_el$, `${card} ${props.class ?? ""}`));
90
- return _el$;
91
- })();
92
- }
93
- //#endregion
94
- export { CalendarCard };
95
-
96
- //# sourceMappingURL=CalendarCard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CalendarCard.js","names":[],"sources":["../src/custom/calendar-card/index.tsx"],"sourcesContent":["import { Show, For } from \"solid-js\";\nimport { Chip } from \"../chip\";\n// Styled via the S2 style() macro through viviana's own seam (../../style →\n// src/style.ts). A horizontal \"followed calendar\" card: square thumbnail +\n// title + followers line + tag chips, on the S2 ramps in Silapse colors.\nimport { style } from \"../../style\" with { type: \"macro\" };\n\nexport interface CalendarCardProps {\n title: string;\n image?: string;\n tags?: string[];\n followers?: { name: string }[];\n followerCount?: number;\n class?: string;\n}\n\nconst card = style({\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n width: \"full\",\n maxWidth: 500,\n padding: 12,\n borderRadius: \"xl\",\n borderWidth: 2,\n borderStyle: \"solid\",\n borderColor: \"[var(--color-primary-600)]\",\n backgroundColor: \"[var(--color-bg-300)]\",\n boxShadow: \"elevated\",\n});\n\nconst thumb = style({\n width: 80,\n height: 80,\n flexShrink: 0,\n objectFit: \"cover\",\n borderRadius: \"lg\",\n borderWidth: 2,\n borderStyle: \"solid\",\n borderColor: \"[var(--color-accent)]\",\n});\n\nconst body = style({\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n flexGrow: 1,\n minWidth: 0,\n});\n\nconst title = style({\n font: \"heading-sm\",\n color: \"[var(--color-primary-100)]\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n});\n\nconst followers = style({\n font: \"ui-sm\",\n color: \"[var(--color-text-secondary)]\",\n});\n\nconst followerName = style({\n fontWeight: \"bold\",\n // WCAG AA fix: the follower names sit on the `--color-bg-300` card. They are\n // small text (`ui-sm`, inherited), so the 4.5:1 normal-text floor applies.\n // `--color-accent` (#df5c9a) is a fixed pink in both themes and read only\n // 2.42:1 on the light-blue card (5.08:1 dark); no pink ramp step clears 4.5:1\n // on both the dark-grey and light-blue card (`--color-accent-500` is 4.39:1\n // dark — a hair under). The names keep their emphasis via `fontWeight: bold`\n // against the secondary-grey connectors and take the flipping `--color-text`,\n // which clears 4.5:1 both ways (17.40:1 dark / 9.63:1 light). The card's pink\n // accent moment stays on the thumbnail border (bears no text).\n color: \"[var(--color-text)]\",\n});\n\nconst tags = style({\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: 4,\n});\n\nexport function CalendarCard(props: CalendarCardProps) {\n const displayedFollowers = () => props.followers?.slice(0, 2) ?? [];\n const remainingCount = () => {\n const total = props.followerCount ?? props.followers?.length ?? 0;\n const displayed = displayedFollowers().length;\n return total - displayed;\n };\n\n return (\n <div class={`${card} ${props.class ?? \"\"}`}>\n <Show when={props.image}>\n <img class={thumb} src={props.image} alt={props.title} />\n </Show>\n <div class={body}>\n <span class={title}>{props.title}</span>\n <Show when={displayedFollowers().length > 0}>\n <span class={followers}>\n seguida por{\" \"}\n <For each={displayedFollowers()}>\n {(follower, index) => (\n <>\n <span class={followerName}>{follower.name}</span>\n {index() < displayedFollowers().length - 1 && \", \"}\n </>\n )}\n </For>\n <Show when={remainingCount() > 0}>\n {\" \"}\n y <span class={followerName}>{remainingCount()} más</span>\n </Show>\n </span>\n </Show>\n <Show when={props.tags && props.tags.length > 0}>\n <div class={tags}>\n <For each={props.tags}>{(tag) => <Chip text={tag} variant=\"primary\" />}</For>\n </div>\n </Show>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;AAgBA,MAAM,OAAA;AAmEN,SAAgB,aAAa,OAAwB;CACnD,MAAM,2BAA2B,MAAM,WAAW,MAAM,GAAG,CAAA,KAAM,CAAA;CACjE,MAAM,uBAAiB;EAGrB,QAFc,MAAM,iBAAiB,MAAM,WAAW,UAAU,KAC9C,mBAAA,EAAqB;CAEzC;CAEA,cAAA;EAAA,IAAA,OAAA,eAAA,OAAA,GAAA,SAAA,KAAA,YAAA,CAAA,QAAA,SAAA,cAAA,OAAA,WAAA,GAAA,QAAA,OAAA,aAAA,QAAA,MAAA,YAAA,SAAA,MAAA,aAAA,CAAA,QAAA,SAAA,cAAA,OAAA,WAAA,GAAA,SAAA,OAAA,aAAA,CAAA,QAAA,SAAA,cAAA,OAAA,WAAA;EAAA,OAAA,MAAA,gBAEK,MAAA;GAAA,IAAK,OAAA;IAAA,OAAM,MAAM;GAAK;GAAA,IAAA,WAAA;IAAA,IAAA,QAAA,eAAA,MAAA;IAAA,QAAA,QAAA;KAAA,IAAA,MACG,MAAM,OAAK,OAAO,MAAM;KAAK,QAAA,IAAA,KAAA,aAAA,OAAA,OAAA,IAAA,IAAA,GAAA;KAAA,SAAA,IAAA,KAAA,aAAA,OAAA,OAAA,IAAA,IAAA,IAAA;KAAA,OAAA;IAAA,GAAA;KAAA,GAAA,KAAA;KAAA,GAAA,KAAA;IAAA,CAAA;IAAA,OAAA;GAAA;EAAA,CAAA,GAAA,QAAA,KAAA;EAAA,OAAA,aAGhC,MAAM,KAAK;EAAA,OAAA,OAAA,gBAC/B,MAAA;GAAA,IAAK,OAAA;IAAA,OAAM,mBAAA,EAAqB,SAAS;GAAA;GAAA,IAAA,WAAA;IAAA,IAAA,QAAA,eAAA,OAAA,GAAA,SAAA,MAAA,WAAA,aAAA,CAAA,QAAA,SAAA,cAAA,OAAA,WAAA,GAAA,SAAA,OAAA,aAAA,CAAA,QAAA,SAAA,cAAA,OAAA,WAAA;IAAA,OAAA,OAAA,gBAGrC,KAAA;KAAA,IAAI,OAAA;MAAA,OAAM,mBAAA;KAAA;KAAA,WACP,UAAU,UAAA,QAAA;MAAA,IAAA,SAAA,eAAA,OAAA;MAAA,OAAA,cAEoB,SAAS,IAAI;MAAA,OAAA;KAAA,GAAA,GAAA,WACxC,MAAA,IAAU,mBAAA,EAAqB,SAAS,KAAK,IAAA,CAAA;IAElD,CAAA,GAAA,QAAA,KAAA;IAAA,OAAA,OAAA,gBAED,MAAA;KAAA,IAAK,OAAA;MAAA,OAAM,eAAA,IAAmB;KAAA;KAAA,IAAA,WAAA;MAAA,OAAA;OAC5B;OAAA;cAAA;QAAA,IAAA,QAAA,eAAA,OAAA,GAAA,QAAA,MAAA,YAAA,CAAA,OAAA,QAAA,cAAA,MAAA,WAAA;QAAA,MAAA;QAAA,OAAA,OAC6B,gBAAA,OAAA,IAAA;QAAA,OAAA;OAAA,GAAA;MAAA;KAAA;IAAA,CAAA,GAAA,QAAA,KAAA;IAAA,OAAA;GAAA;EAAA,CAAA,GAAA,QAAA,KAAA;EAAA,OAAA,OAAA,gBAInC,MAAA;GAAA,IAAK,OAAA;IAAA,OAAM,WAAA,CAAA,CAAA,MAAM,IAAI,EAAA,KAAI,MAAM,KAAK,SAAS;GAAA;GAAA,IAAA,WAAA;IAAA,IAAA,SAAA,eAAA,OAAA;IAAA,OAAA,QAAA,gBAEzC,KAAA;KAAA,IAAI,OAAA;MAAA,OAAM,MAAM;KAAI;KAAA,WAAI,QAAA,gBAAS,MAAA;MAAK,MAAM;MAAK,SAAA;KAAA,CAAA;IAAQ,CAAA,CAAA;IAAA,OAAA;GAAA;EAAA,CAAA,GAAA,QAAA,KAAA;EAAA,aAAA,UAAA,MAzBtD,GAAG,KAAA,GAAQ,MAAM,SAAS,IAAI,CAAA;EAAA,OAAA;CAAA,GAAA;AA+B9C"}