@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
  }
@@ -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,97 +0,0 @@
1
- import { t as Chip } from "./chip2.js";
2
- /* empty css */
3
- /* empty css */
4
- /* empty css */
5
- import { className, createComponent, effect, getNextElement, getNextMarker, insert, memo, setAttribute, template } from "solid-js/web";
6
- import { For, Show } from "solid-js";
7
- //#region src/custom/calendar-card/index.tsx
8
- var _tmpl$ = /*#__PURE__*/ template(`<img class=" ZKniM13 FKniM13 _va13 _Hb13 oc13 nc13 kc13 jc13 _kc13 hc13 mc13 lc13 _jf13 ij1j4Pd13">`), _tmpl$2 = /*#__PURE__*/ template(`<span class=" xd13 _xa13 xX0cczbc13 _xX0cczba13 pj1j4Pd13"><!$><!/> más`), _tmpl$3 = /*#__PURE__*/ template(`<span class=" uk13 ucJ9TBTb13 ud3Euai13 uea13 ugb13 uhd13 uje13 u2NhKxcl13 uic13 -_6BNtrc-b13 vx13 xb13 _xa13 _Fd13 _FnuYUweb13 pxeCuqc13">seguida por <!$><!/><!$><!/>`), _tmpl$4 = /*#__PURE__*/ template(`<div class=" sd13 _wb13 Ub13 qb13">`), _tmpl$5 = /*#__PURE__*/ template(`<div><!$><!/><div class=" sd13 _ta13 Ue13 qe13 _ub13 Na13"><span class=" uk13 ucJ9TBTb13 ud3Euai13 uea13 ugb13 uhd13 uje13 u2NhKxcl13 uic13 -_6BNtrc-f13 vx13 xe13 _xa13 xX0cczbd13 _xX0cczba13 xfe13 _xfa13 xfX0cczbd13 _xfX0cczba13 _Fd13 _FnuYUweb13 pXDQpyb13 _Nc13 Pc13 _Yb13 _7c13"></span><!$><!/><!$><!/>`), _tmpl$6 = /*#__PURE__*/ template(`<span class=" xd13 _xa13 xX0cczbc13 _xX0cczba13 pj1j4Pd13">`);
9
- const card = " sd13 eb13 Ug13 qg13 Za13 LQAax0d13 Te13 Qe13 Se13 Re13 oe13 ne13 ke13 je13 _kc13 hc13 mc13 lc13 _jf13 i6nBqyb13 gg0eWE13 _nLeasBb13";
10
- function CalendarCard(props) {
11
- const displayedFollowers = () => props.followers?.slice(0, 2) ?? [];
12
- const remainingCount = () => {
13
- return (props.followerCount ?? props.followers?.length ?? 0) - displayedFollowers().length;
14
- };
15
- return (() => {
16
- 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);
17
- insert(_el$, createComponent(Show, {
18
- get when() {
19
- return props.image;
20
- },
21
- get children() {
22
- var _el$2 = getNextElement(_tmpl$);
23
- effect((_p$) => {
24
- var _v$ = props.image, _v$2 = props.title;
25
- _v$ !== _p$.e && setAttribute(_el$2, "src", _p$.e = _v$);
26
- _v$2 !== _p$.t && setAttribute(_el$2, "alt", _p$.t = _v$2);
27
- return _p$;
28
- }, {
29
- e: void 0,
30
- t: void 0
31
- });
32
- return _el$2;
33
- }
34
- }), _el$20, _co$6);
35
- insert(_el$4, () => props.title);
36
- insert(_el$3, createComponent(Show, {
37
- get when() {
38
- return displayedFollowers().length > 0;
39
- },
40
- get children() {
41
- 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);
42
- insert(_el$5, createComponent(For, {
43
- get each() {
44
- return displayedFollowers();
45
- },
46
- children: (follower, index) => [(() => {
47
- var _el$21 = getNextElement(_tmpl$6);
48
- insert(_el$21, () => follower.name);
49
- return _el$21;
50
- })(), memo(() => index() < displayedFollowers().length - 1 && ", ")]
51
- }), _el$11, _co$2);
52
- insert(_el$5, createComponent(Show, {
53
- get when() {
54
- return remainingCount() > 0;
55
- },
56
- get children() {
57
- return [
58
- " ",
59
- "y ",
60
- (() => {
61
- var _el$8 = getNextElement(_tmpl$2), _el$0 = _el$8.firstChild, [_el$1, _co$] = getNextMarker(_el$0.nextSibling);
62
- _el$1.nextSibling;
63
- insert(_el$8, remainingCount, _el$1, _co$);
64
- return _el$8;
65
- })()
66
- ];
67
- }
68
- }), _el$13, _co$3);
69
- return _el$5;
70
- }
71
- }), _el$16, _co$4);
72
- insert(_el$3, createComponent(Show, {
73
- get when() {
74
- return memo(() => !!props.tags)() && props.tags.length > 0;
75
- },
76
- get children() {
77
- var _el$14 = getNextElement(_tmpl$4);
78
- insert(_el$14, createComponent(For, {
79
- get each() {
80
- return props.tags;
81
- },
82
- children: (tag) => createComponent(Chip, {
83
- text: tag,
84
- variant: "primary"
85
- })
86
- }));
87
- return _el$14;
88
- }
89
- }), _el$18, _co$5);
90
- effect(() => className(_el$, `${card} ${props.class ?? ""}`));
91
- return _el$;
92
- })();
93
- }
94
- //#endregion
95
- export { CalendarCard };
96
-
97
- //# 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 color: \"[var(--color-accent)]\",\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;AA0DN,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"}