@q9labsai/chalk-ui 4.0.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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/dist/assets.d.ts +2 -0
  3. package/dist/assets.d.ts.map +1 -0
  4. package/dist/assets.js +2 -0
  5. package/dist/badge.d.ts +14 -0
  6. package/dist/badge.d.ts.map +1 -0
  7. package/dist/badge.js +73 -0
  8. package/dist/button.d.ts +9 -0
  9. package/dist/button.d.ts.map +1 -0
  10. package/dist/button.js +49 -0
  11. package/dist/card.d.ts +12 -0
  12. package/dist/card.d.ts.map +1 -0
  13. package/dist/card.js +63 -0
  14. package/dist/icon-button.d.ts +9 -0
  15. package/dist/icon-button.d.ts.map +1 -0
  16. package/dist/icon-button.js +37 -0
  17. package/dist/index.d.ts +19 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +897 -0
  20. package/dist/input.d.ts +12 -0
  21. package/dist/input.d.ts.map +1 -0
  22. package/dist/input.js +44 -0
  23. package/dist/lib/theme.d.ts +8 -0
  24. package/dist/lib/theme.d.ts.map +1 -0
  25. package/dist/lib/utils.d.ts +3 -0
  26. package/dist/lib/utils.d.ts.map +1 -0
  27. package/dist/lib/utils.js +9 -0
  28. package/dist/logos/chalk-icon.svg +34 -0
  29. package/dist/logos/chalk-logo-on-dark.svg +35 -0
  30. package/dist/logos/chalk-logo.svg +45 -0
  31. package/dist/progress-bar.d.ts +13 -0
  32. package/dist/progress-bar.d.ts.map +1 -0
  33. package/dist/progress-bar.js +35 -0
  34. package/dist/reactions.d.ts +33 -0
  35. package/dist/reactions.d.ts.map +1 -0
  36. package/dist/reactions.js +179 -0
  37. package/dist/select.d.ts +26 -0
  38. package/dist/select.d.ts.map +1 -0
  39. package/dist/select.js +49 -0
  40. package/dist/skeleton.d.ts +11 -0
  41. package/dist/skeleton.d.ts.map +1 -0
  42. package/dist/skeleton.js +25 -0
  43. package/dist/spinner.d.ts +9 -0
  44. package/dist/spinner.d.ts.map +1 -0
  45. package/dist/spinner.js +26 -0
  46. package/dist/status-badge.d.ts +9 -0
  47. package/dist/status-badge.d.ts.map +1 -0
  48. package/dist/status-badge.js +18 -0
  49. package/dist/styles.css +1461 -0
  50. package/dist/test-utils.d.ts +3 -0
  51. package/dist/test-utils.d.ts.map +1 -0
  52. package/dist/textarea.d.ts +10 -0
  53. package/dist/textarea.d.ts.map +1 -0
  54. package/dist/textarea.js +52 -0
  55. package/dist/toast.d.ts +45 -0
  56. package/dist/toast.d.ts.map +1 -0
  57. package/dist/toast.js +131 -0
  58. package/dist/toggle-group.d.ts +11 -0
  59. package/dist/toggle-group.d.ts.map +1 -0
  60. package/dist/toggle-group.js +101 -0
  61. package/dist/toggle.d.ts +20 -0
  62. package/dist/toggle.d.ts.map +1 -0
  63. package/dist/toggle.js +48 -0
  64. package/dist/tooltip.d.ts +15 -0
  65. package/dist/tooltip.d.ts.map +1 -0
  66. package/dist/tooltip.js +101 -0
  67. package/package.json +199 -0
@@ -0,0 +1,1461 @@
1
+ @import "tailwindcss";
2
+ @import "tw-animate-css";
3
+
4
+ @custom-variant dark (&:is(.dark *));
5
+
6
+ /* =============================================================================
7
+ Tailwind Theme - Maps CSS variables to Tailwind colors
8
+ ============================================================================= */
9
+
10
+ @theme inline {
11
+ --font-sans: var(--font-sans);
12
+ --font-mono: var(--font-mono);
13
+ --color-background: var(--background);
14
+ --color-foreground: var(--foreground);
15
+ --color-card: var(--card);
16
+ --color-card-foreground: var(--card-foreground);
17
+ --color-popover: var(--popover);
18
+ --color-popover-foreground: var(--popover-foreground);
19
+ --color-primary: var(--primary);
20
+ --color-primary-foreground: var(--primary-foreground);
21
+ --color-secondary: var(--secondary);
22
+ --color-secondary-foreground: var(--secondary-foreground);
23
+ --color-muted: var(--muted);
24
+ --color-muted-foreground: var(--muted-foreground);
25
+ --color-accent: var(--accent);
26
+ --color-accent-foreground: var(--accent-foreground);
27
+ --color-destructive: var(--destructive);
28
+ --color-destructive-foreground: var(--destructive-foreground);
29
+ --color-success: var(--success);
30
+ --color-success-foreground: var(--success-foreground);
31
+ --color-warning: var(--warning);
32
+ --color-warning-foreground: var(--warning-foreground);
33
+ --color-border: var(--border);
34
+ --color-input: var(--input);
35
+ --color-ring: var(--ring);
36
+ --radius-sm: calc(var(--radius) - 4px);
37
+ --radius-md: calc(var(--radius) - 2px);
38
+ --radius-lg: var(--radius);
39
+ --radius-xl: calc(var(--radius) + 4px);
40
+ --radius-2xl: calc(var(--radius) + 8px);
41
+ }
42
+
43
+ /* =============================================================================
44
+ Chalk design tokens - scoped to [data-chalk] containers
45
+ ============================================================================= */
46
+
47
+ [data-chalk] {
48
+ --background: #ffffff;
49
+ --foreground: #0f1115;
50
+ --card: #ffffff;
51
+ --card-foreground: #0f1115;
52
+ --popover: #ffffff;
53
+ --popover-foreground: #0f1115;
54
+ --primary: #0f1115;
55
+ --primary-foreground: #ffffff;
56
+ --secondary: #f4f5f3;
57
+ --secondary-foreground: #0f1115;
58
+ --muted: #f4f5f3;
59
+ --muted-foreground: #4b5563;
60
+ --accent: #eaf4fa;
61
+ --accent-foreground: #2f7da0;
62
+ --destructive: #c05151;
63
+ --destructive-foreground: #ffffff;
64
+ --success: #3e7647;
65
+ --success-foreground: #ffffff;
66
+ --warning: #e2c25f;
67
+ --warning-foreground: #0f1115;
68
+ --border: #e7e9ec;
69
+ --input: #d5d9de;
70
+ --ring: #0f1115;
71
+ --radius: 0.5rem;
72
+
73
+ --chalk-paper: #ffffff;
74
+ --chalk-ink: #0f1115;
75
+ --chalk-ink-2: #4b5563;
76
+ --chalk-ink-3: #9aa1ab;
77
+ --chalk-line: #e7e9ec;
78
+ --chalk-line-strong: #d5d9de;
79
+ --chalk-wash-blue: #eaf4fa;
80
+ --chalk-highlight: #c8e4f4;
81
+ --chalk-green: #8fbf87;
82
+ --chalk-green-deep: #3e7647;
83
+ --chalk-yellow: #e2c25f;
84
+ --chalk-blue: #7fc0d8;
85
+ --chalk-blue-deep: #2f7da0;
86
+ --chalk-pink: #dc9a9a;
87
+ --chalk-pink-light: #f8caca;
88
+ --chalk-font-family: "Figtree", "Plus Jakarta Sans", "Avenir Next", "Helvetica Neue", "Segoe UI", sans-serif;
89
+ --chalk-font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
90
+ --font-sans: var(--chalk-font-family);
91
+ --font-mono: var(--chalk-font-mono);
92
+
93
+ /* Video surfaces retain the cool neutral system. */
94
+ --chalk-bg-stage: #0f1115;
95
+ --chalk-bg-tile: #232a2e;
96
+ --chalk-bg-controls: rgba(255, 255, 255, 0.92);
97
+ --chalk-accent-speaking: #8fbf87;
98
+ --chalk-accent-speaking-glow: rgba(143, 191, 135, 0.4);
99
+
100
+ /* Glass effects */
101
+ --chalk-bg-glass: rgba(255, 255, 255, 0.88);
102
+
103
+ /* Tile gradient: 2-stop "Clean Fade" - no middle stop to prevent muddy transitions */
104
+ --chalk-tile-gradient-end: #eaf4fa;
105
+
106
+ /* Pills (control bar) */
107
+ --chalk-pill-bg: rgba(15, 17, 21, 0.06);
108
+ --chalk-pill-bg-hover: rgba(15, 17, 21, 0.1);
109
+ --chalk-pill-text: #0f1115;
110
+ --chalk-pill-text-hover: #0f1115;
111
+ --chalk-pill-border: rgba(15, 17, 21, 0.12);
112
+ --chalk-pill-bg-active: #0f1115;
113
+ --chalk-pill-text-active: #ffffff;
114
+
115
+ /* Shadows */
116
+ --chalk-shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.04), 0 6px 18px rgba(15, 23, 42, 0.05);
117
+ --chalk-shadow-md: 0 2px 4px rgba(15, 23, 42, 0.05), 0 20px 50px rgba(15, 23, 42, 0.09);
118
+ --chalk-shadow-lg: 0 12px 28px rgba(15, 23, 42, 0.06);
119
+ --chalk-shadow-xl: 0 26px 60px rgba(15, 23, 42, 0.12);
120
+
121
+ /* Border radii */
122
+ --chalk-border-radius-sm: 0.5rem;
123
+ --chalk-border-radius-md: 0.875rem;
124
+ --chalk-border-radius-lg: 1.375rem;
125
+ --chalk-border-radius-xl: 1.375rem;
126
+ --chalk-border-radius-full: 9999px;
127
+
128
+ /* Transitions */
129
+ --chalk-duration-fast: 150ms;
130
+ --chalk-duration-normal: 200ms;
131
+ --chalk-duration-slow: 300ms;
132
+ --chalk-ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
133
+ --chalk-ease-out-back: cubic-bezier(0.34, 1.56, 0.64, 1);
134
+
135
+ /* Soft watercolor washes used by the paper surfaces. */
136
+ --chalk-entrance-gradient: radial-gradient(560px 340px at 88% 6%, rgba(127, 192, 216, 0.16), transparent 70%), radial-gradient(640px 380px at 6% 96%, rgba(127, 192, 216, 0.12), transparent 70%), #ffffff;
137
+ --chalk-entrance-glass-bg: rgba(255, 255, 255, 0.88);
138
+ --chalk-entrance-glass-border: #e7e9ec;
139
+ --chalk-entrance-avatar-glow: rgba(127, 192, 216, 0.3);
140
+
141
+ /* Composable product appearance: palette and material are independent. */
142
+ --chalk-app-canvas: #f7f6f2;
143
+ --chalk-app-chrome: #fbfaf7;
144
+ --chalk-app-stage: #fbfaf7;
145
+ --chalk-app-panel: #ffffff;
146
+ --chalk-app-tile-base: #f1f0eb;
147
+ --chalk-app-tile-color-strength: 22%;
148
+ --chalk-app-text: #0c0e12;
149
+ --chalk-app-text-muted: #555b65;
150
+ --chalk-app-line: #deddd7;
151
+ --chalk-app-line-strong: #c9c8c2;
152
+ --chalk-app-control: #ffffff;
153
+ --chalk-app-control-hover: #f1f0eb;
154
+ --chalk-app-control-group: #f0efeb;
155
+ --chalk-app-control-primary: #202329;
156
+ --chalk-app-control-primary-hover: #343840;
157
+ --chalk-app-control-active: #dff2f7;
158
+ --chalk-app-control-active-line: #9dcfe1;
159
+ --chalk-app-control-active-text: #202329;
160
+ --chalk-app-message-remote: #f3f2ee;
161
+ --chalk-app-message-local: #202329;
162
+ --chalk-app-message-local-text: #ffffff;
163
+ --chalk-app-input: #fbfaf7;
164
+ --chalk-app-danger: #c94343;
165
+ --chalk-app-danger-hover: #b33b3b;
166
+ --chalk-app-shadow-xs: 0 1px 2px rgba(12, 14, 18, 0.08);
167
+ --chalk-app-shadow-sm: 0 8px 30px rgba(12, 14, 18, 0.06);
168
+ --chalk-app-shadow-control: 0 5px 16px rgba(12, 14, 18, 0.1);
169
+ --chalk-app-texture-image: none;
170
+ --chalk-app-texture-size: auto;
171
+ --chalk-app-texture-blend: normal;
172
+ }
173
+
174
+ [data-chalk][data-chalk-palette="warm-porcelain"] {
175
+ --chalk-app-canvas: #f2ebe2;
176
+ --chalk-app-chrome: #f8f3ec;
177
+ --chalk-app-stage: #eee4dc;
178
+ --chalk-app-panel: #fffaf5;
179
+ --chalk-app-tile-base: #eee4dc;
180
+ --chalk-app-tile-color-strength: 18%;
181
+ --chalk-app-text: #352f2b;
182
+ --chalk-app-text-muted: #70655e;
183
+ --chalk-app-line: #ded2c7;
184
+ --chalk-app-line-strong: #c8b8aa;
185
+ --chalk-app-control: #fffaf5;
186
+ --chalk-app-control-hover: #eee5dd;
187
+ --chalk-app-control-group: #eadfd5;
188
+ --chalk-app-control-primary: #51443c;
189
+ --chalk-app-control-primary-hover: #66564b;
190
+ --chalk-app-control-active: #dceef2;
191
+ --chalk-app-control-active-line: #6aa8ba;
192
+ --chalk-app-control-active-text: #29383d;
193
+ --chalk-app-message-remote: #eee7e0;
194
+ --chalk-app-message-local: #51443c;
195
+ --chalk-app-message-local-text: #fffaf5;
196
+ --chalk-app-input: #fffdf9;
197
+ --chalk-app-shadow-xs: 0 1px 2px rgba(72, 55, 43, 0.08);
198
+ --chalk-app-shadow-sm: 0 10px 30px rgba(72, 55, 43, 0.08);
199
+ --chalk-app-shadow-control: 0 6px 18px rgba(72, 55, 43, 0.13);
200
+ }
201
+
202
+ [data-chalk][data-chalk-palette="cool-mist"] {
203
+ --chalk-app-canvas: #edf2f5;
204
+ --chalk-app-chrome: #f6f8fa;
205
+ --chalk-app-stage: #e7eef2;
206
+ --chalk-app-panel: #fbfdfe;
207
+ --chalk-app-tile-base: #e7eef2;
208
+ --chalk-app-tile-color-strength: 18%;
209
+ --chalk-app-text: #24313b;
210
+ --chalk-app-text-muted: #65727e;
211
+ --chalk-app-line: #d4dde3;
212
+ --chalk-app-line-strong: #b8c6cf;
213
+ --chalk-app-control: #fbfdfe;
214
+ --chalk-app-control-hover: #e6edf1;
215
+ --chalk-app-control-group: #e1e9ee;
216
+ --chalk-app-control-primary: #34414d;
217
+ --chalk-app-control-primary-hover: #465563;
218
+ --chalk-app-control-active: #dceff7;
219
+ --chalk-app-control-active-line: #5599b5;
220
+ --chalk-app-control-active-text: #21343d;
221
+ --chalk-app-message-remote: #e9eef1;
222
+ --chalk-app-message-local: #34414d;
223
+ --chalk-app-message-local-text: #f8fbfc;
224
+ --chalk-app-input: #ffffff;
225
+ --chalk-app-shadow-xs: 0 1px 2px rgba(35, 54, 67, 0.08);
226
+ --chalk-app-shadow-sm: 0 10px 32px rgba(35, 54, 67, 0.08);
227
+ --chalk-app-shadow-control: 0 6px 18px rgba(35, 54, 67, 0.13);
228
+ }
229
+
230
+ [data-chalk][data-chalk-palette="paper-and-ink"] {
231
+ --chalk-app-canvas: #f4f4f0;
232
+ --chalk-app-chrome: #fafaf7;
233
+ --chalk-app-stage: #efefea;
234
+ --chalk-app-panel: #ffffff;
235
+ --chalk-app-tile-base: #eeeeea;
236
+ --chalk-app-tile-color-strength: 14%;
237
+ --chalk-app-text: #101214;
238
+ --chalk-app-text-muted: #555b62;
239
+ --chalk-app-line: #d7d8d5;
240
+ --chalk-app-line-strong: #b8bab8;
241
+ --chalk-app-control: #ffffff;
242
+ --chalk-app-control-hover: #e9e9e5;
243
+ --chalk-app-control-group: #e8e8e3;
244
+ --chalk-app-control-primary: #15171a;
245
+ --chalk-app-control-primary-hover: #2b2e32;
246
+ --chalk-app-control-active: #e3eff8;
247
+ --chalk-app-control-active-line: #196da8;
248
+ --chalk-app-control-active-text: #101214;
249
+ --chalk-app-message-remote: #eeeeea;
250
+ --chalk-app-message-local: #15171a;
251
+ --chalk-app-message-local-text: #ffffff;
252
+ --chalk-app-input: #ffffff;
253
+ --chalk-app-shadow-xs: 0 1px 2px rgba(16, 18, 20, 0.1);
254
+ --chalk-app-shadow-sm: 0 8px 26px rgba(16, 18, 20, 0.08);
255
+ --chalk-app-shadow-control: 0 5px 16px rgba(16, 18, 20, 0.14);
256
+ }
257
+
258
+ [data-chalk][data-chalk-palette="cream-and-clay"] {
259
+ --chalk-app-canvas: #f6eadf;
260
+ --chalk-app-chrome: #fbf3ea;
261
+ --chalk-app-stage: #f1ddcd;
262
+ --chalk-app-panel: #fffaf4;
263
+ --chalk-app-tile-base: #efddcf;
264
+ --chalk-app-tile-color-strength: 22%;
265
+ --chalk-app-text: #432d24;
266
+ --chalk-app-text-muted: #7d6458;
267
+ --chalk-app-line: #e2cfc0;
268
+ --chalk-app-line-strong: #c8ab97;
269
+ --chalk-app-control: #fffaf4;
270
+ --chalk-app-control-hover: #f0dfd1;
271
+ --chalk-app-control-group: #ead6c6;
272
+ --chalk-app-control-primary: #5c3828;
273
+ --chalk-app-control-primary-hover: #744733;
274
+ --chalk-app-control-active: #e8e8d5;
275
+ --chalk-app-control-active-line: #87945e;
276
+ --chalk-app-control-active-text: #354025;
277
+ --chalk-app-message-remote: #f1e5da;
278
+ --chalk-app-message-local: #5c3828;
279
+ --chalk-app-message-local-text: #fffaf4;
280
+ --chalk-app-input: #fffdf8;
281
+ --chalk-app-shadow-xs: 0 1px 2px rgba(86, 50, 34, 0.1);
282
+ --chalk-app-shadow-sm: 0 10px 32px rgba(86, 50, 34, 0.09);
283
+ --chalk-app-shadow-control: 0 6px 18px rgba(86, 50, 34, 0.15);
284
+ }
285
+
286
+ [data-chalk][data-chalk-palette="studio-canvas"] {
287
+ --chalk-app-canvas: #f0eee5;
288
+ --chalk-app-chrome: #f8f5ec;
289
+ --chalk-app-stage: #ebe9de;
290
+ --chalk-app-panel: #fdfbf5;
291
+ --chalk-app-tile-base: #e9e7dc;
292
+ --chalk-app-tile-color-strength: 22%;
293
+ --chalk-app-text: #303832;
294
+ --chalk-app-text-muted: #657067;
295
+ --chalk-app-line: #d8d7ca;
296
+ --chalk-app-line-strong: #b9bdad;
297
+ --chalk-app-control: #fdfbf5;
298
+ --chalk-app-control-hover: #e8e7dc;
299
+ --chalk-app-control-group: #e4e4d8;
300
+ --chalk-app-control-primary: #48594b;
301
+ --chalk-app-control-primary-hover: #5a6e5d;
302
+ --chalk-app-control-active: #dceff2;
303
+ --chalk-app-control-active-line: #5e9bab;
304
+ --chalk-app-control-active-text: #294047;
305
+ --chalk-app-message-remote: #ecebe2;
306
+ --chalk-app-message-local: #48594b;
307
+ --chalk-app-message-local-text: #fbfaf4;
308
+ --chalk-app-input: #fffef9;
309
+ --chalk-app-shadow-xs: 0 1px 2px rgba(48, 56, 50, 0.08);
310
+ --chalk-app-shadow-sm: 0 10px 30px rgba(48, 56, 50, 0.08);
311
+ --chalk-app-shadow-control: 0 6px 18px rgba(48, 56, 50, 0.13);
312
+ }
313
+
314
+ [data-chalk][data-chalk-palette="prism-daylight"] {
315
+ --chalk-app-canvas: #f4f1fb;
316
+ --chalk-app-chrome: #fbf9ff;
317
+ --chalk-app-stage: #eee8fa;
318
+ --chalk-app-panel: #fefcff;
319
+ --chalk-app-tile-base: #eee8f7;
320
+ --chalk-app-tile-color-strength: 26%;
321
+ --chalk-app-text: #2b2037;
322
+ --chalk-app-text-muted: #71657e;
323
+ --chalk-app-line: #ded5ea;
324
+ --chalk-app-line-strong: #c4b4d8;
325
+ --chalk-app-control: #fefcff;
326
+ --chalk-app-control-hover: #ebe3f5;
327
+ --chalk-app-control-group: #e9e1f2;
328
+ --chalk-app-control-primary: #4c2e78;
329
+ --chalk-app-control-primary-hover: #614091;
330
+ --chalk-app-control-active: #e5dcfb;
331
+ --chalk-app-control-active-line: #7651d2;
332
+ --chalk-app-control-active-text: #34204f;
333
+ --chalk-app-message-remote: #eee9f4;
334
+ --chalk-app-message-local: #3b245c;
335
+ --chalk-app-message-local-text: #ffffff;
336
+ --chalk-app-input: #ffffff;
337
+ --chalk-app-shadow-xs: 0 1px 2px rgba(54, 33, 78, 0.09);
338
+ --chalk-app-shadow-sm: 0 12px 36px rgba(75, 44, 110, 0.1);
339
+ --chalk-app-shadow-control: 0 7px 20px rgba(75, 44, 110, 0.16);
340
+ }
341
+
342
+ [data-chalk][data-chalk-palette="signal-white"] {
343
+ --chalk-app-canvas: #f3f7fb;
344
+ --chalk-app-chrome: #ffffff;
345
+ --chalk-app-stage: #edf4fa;
346
+ --chalk-app-panel: #ffffff;
347
+ --chalk-app-tile-base: #eef4f8;
348
+ --chalk-app-tile-color-strength: 22%;
349
+ --chalk-app-text: #0c1117;
350
+ --chalk-app-text-muted: #596674;
351
+ --chalk-app-line: #d8e0e7;
352
+ --chalk-app-line-strong: #b5c2cd;
353
+ --chalk-app-control: #ffffff;
354
+ --chalk-app-control-hover: #e8f0f6;
355
+ --chalk-app-control-group: #e5edf3;
356
+ --chalk-app-control-primary: #111820;
357
+ --chalk-app-control-primary-hover: #28323d;
358
+ --chalk-app-control-active: #e1f0ff;
359
+ --chalk-app-control-active-line: #1684e2;
360
+ --chalk-app-control-active-text: #0b4f87;
361
+ --chalk-app-message-remote: #edf1f4;
362
+ --chalk-app-message-local: #111820;
363
+ --chalk-app-message-local-text: #ffffff;
364
+ --chalk-app-input: #ffffff;
365
+ --chalk-app-shadow-xs: 0 1px 2px rgba(12, 17, 23, 0.09);
366
+ --chalk-app-shadow-sm: 0 10px 32px rgba(12, 38, 62, 0.08);
367
+ --chalk-app-shadow-control: 0 6px 18px rgba(12, 38, 62, 0.14);
368
+ }
369
+
370
+ /* Dark mode */
371
+ [data-chalk].dark,
372
+ [data-chalk][data-chalk-theme="dark"],
373
+ .dark [data-chalk] {
374
+ --background: #1b2023;
375
+ --foreground: #dde3e6;
376
+ --card: #232a2e;
377
+ --card-foreground: #dde3e6;
378
+ --popover: #232a2e;
379
+ --popover-foreground: #dde3e6;
380
+ --primary: #ffffff;
381
+ --primary-foreground: #0f1115;
382
+ --secondary: #313a3f;
383
+ --secondary-foreground: #dde3e6;
384
+ --muted: #313a3f;
385
+ --muted-foreground: #8b979d;
386
+ --accent: #203c4a;
387
+ --accent-foreground: #b2e0f0;
388
+ --destructive: #d3675f;
389
+ --destructive-foreground: #1b2023;
390
+ --success: #5f9e7d;
391
+ --success-foreground: #1b2023;
392
+ --warning: #c99245;
393
+ --warning-foreground: #1b2023;
394
+ --border: #313a3f;
395
+ --input: #3d484e;
396
+ --ring: #ffffff;
397
+ --chalk-paper: #1b2023;
398
+ --chalk-ink: #dde3e6;
399
+ --chalk-ink-2: #8b979d;
400
+ --chalk-ink-3: #647178;
401
+ --chalk-line: #313a3f;
402
+ --chalk-line-strong: #3d484e;
403
+ --chalk-wash-blue: #203c4a;
404
+ --chalk-highlight: #2f6074;
405
+ --chalk-font-family: "Figtree", "Plus Jakarta Sans", "Avenir Next", "Helvetica Neue", "Segoe UI", sans-serif;
406
+ --font-sans: var(--chalk-font-family);
407
+
408
+ /* Video-specific - Dark mode */
409
+ --chalk-bg-stage: #0a0a0c;
410
+ --chalk-bg-tile: #141418;
411
+ --chalk-bg-controls: rgba(26, 26, 26, 0.92);
412
+
413
+ /* Glass effects - Dark mode */
414
+ --chalk-bg-glass: rgba(18, 18, 26, 0.72);
415
+
416
+ /* Pills - Dark mode */
417
+ --chalk-pill-bg: rgba(255, 255, 255, 0.08);
418
+ --chalk-pill-bg-hover: rgba(255, 255, 255, 0.16);
419
+ --chalk-pill-text: rgba(255, 255, 255, 0.72);
420
+ --chalk-pill-text-hover: #ffffff;
421
+ --chalk-pill-border: rgba(255, 255, 255, 0.12);
422
+ --chalk-pill-bg-active: rgba(255, 255, 255, 0.18);
423
+ --chalk-pill-text-active: #ffffff;
424
+
425
+ /* Shadows - Dark mode */
426
+ --chalk-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
427
+ --chalk-shadow-md: 0 6px 16px rgba(0, 0, 0, 0.35);
428
+ --chalk-shadow-lg: 0 16px 30px rgba(0, 0, 0, 0.45);
429
+ --chalk-shadow-xl: 0 26px 60px rgba(0, 0, 0, 0.55);
430
+
431
+ /* Tile gradient: Dark mode - clean fade to black */
432
+ --chalk-tile-gradient-end: #000000;
433
+
434
+ /* Entrance-specific - Dark mode */
435
+ --chalk-entrance-gradient: radial-gradient(560px 340px at 88% 6%, rgba(85, 170, 201, 0.18), transparent 70%), #1b2023;
436
+ --chalk-entrance-glass-bg: rgba(0, 0, 0, 0.6);
437
+ --chalk-entrance-glass-border: rgba(255, 255, 255, 0.12);
438
+ --chalk-entrance-avatar-glow: rgba(85, 170, 201, 0.5);
439
+ }
440
+
441
+ [data-chalk][data-chalk-palette="warm-charcoal"] {
442
+ --chalk-app-canvas: #151513;
443
+ --chalk-app-chrome: #191917;
444
+ --chalk-app-stage: #1d1d1a;
445
+ --chalk-app-panel: #21211d;
446
+ --chalk-app-tile-base: #1c1c19;
447
+ --chalk-app-tile-color-strength: 20%;
448
+ --chalk-app-text: #f4f3ee;
449
+ --chalk-app-text-muted: #a8a79f;
450
+ --chalk-app-line: #34342e;
451
+ --chalk-app-line-strong: #4b4a42;
452
+ --chalk-app-control: #292925;
453
+ --chalk-app-control-hover: #34342e;
454
+ --chalk-app-control-group: #20201c;
455
+ --chalk-app-control-primary: #252823;
456
+ --chalk-app-control-primary-hover: #353a33;
457
+ --chalk-app-control-active: #263941;
458
+ --chalk-app-control-active-line: #65b4d0;
459
+ --chalk-app-control-active-text: #f4f3ee;
460
+ --chalk-app-message-remote: #2a2a25;
461
+ --chalk-app-message-local: #27323a;
462
+ --chalk-app-message-local-text: #f4f3ee;
463
+ --chalk-app-input: #1a1a17;
464
+ --chalk-app-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.3);
465
+ --chalk-app-shadow-sm: 0 10px 34px rgba(0, 0, 0, 0.24);
466
+ --chalk-app-shadow-control: 0 6px 18px rgba(0, 0, 0, 0.34);
467
+ }
468
+
469
+ [data-chalk][data-chalk-palette="cool-graphite"] {
470
+ --chalk-app-canvas: #101318;
471
+ --chalk-app-chrome: #141820;
472
+ --chalk-app-stage: #171c24;
473
+ --chalk-app-panel: #1b2028;
474
+ --chalk-app-tile-base: #18202a;
475
+ --chalk-app-tile-color-strength: 22%;
476
+ --chalk-app-text: #f3f6f8;
477
+ --chalk-app-text-muted: #9da6b2;
478
+ --chalk-app-line: #303744;
479
+ --chalk-app-line-strong: #46505f;
480
+ --chalk-app-control: #202632;
481
+ --chalk-app-control-hover: #2a3240;
482
+ --chalk-app-control-group: #191f28;
483
+ --chalk-app-control-primary: #242b35;
484
+ --chalk-app-control-primary-hover: #313b49;
485
+ --chalk-app-control-active: #172f43;
486
+ --chalk-app-control-active-line: #55aac9;
487
+ --chalk-app-control-active-text: #f3f6f8;
488
+ --chalk-app-message-remote: #272e39;
489
+ --chalk-app-message-local: #141c25;
490
+ --chalk-app-message-local-text: #f3f6f8;
491
+ --chalk-app-input: #151a22;
492
+ --chalk-app-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.34);
493
+ --chalk-app-shadow-sm: 0 12px 36px rgba(0, 0, 0, 0.3);
494
+ --chalk-app-shadow-control: 0 6px 18px rgba(0, 0, 0, 0.4);
495
+ }
496
+
497
+ [data-chalk][data-chalk-palette="high-contrast-ink"] {
498
+ --chalk-app-canvas: #0c0e12;
499
+ --chalk-app-chrome: #12151a;
500
+ --chalk-app-stage: #151920;
501
+ --chalk-app-panel: #191d23;
502
+ --chalk-app-tile-base: #171b22;
503
+ --chalk-app-tile-color-strength: 19%;
504
+ --chalk-app-text: #fafaf7;
505
+ --chalk-app-text-muted: #a3a8b0;
506
+ --chalk-app-line: #343941;
507
+ --chalk-app-line-strong: #4b525d;
508
+ --chalk-app-control: #242932;
509
+ --chalk-app-control-hover: #303640;
510
+ --chalk-app-control-group: #171b21;
511
+ --chalk-app-control-primary: #1f242c;
512
+ --chalk-app-control-primary-hover: #2c333d;
513
+ --chalk-app-control-active: #163247;
514
+ --chalk-app-control-active-line: #63b9d7;
515
+ --chalk-app-control-active-text: #fafaf7;
516
+ --chalk-app-message-remote: #252a32;
517
+ --chalk-app-message-local: #10141a;
518
+ --chalk-app-message-local-text: #fafaf7;
519
+ --chalk-app-input: #14181e;
520
+ --chalk-app-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.4);
521
+ --chalk-app-shadow-sm: 0 12px 38px rgba(0, 0, 0, 0.34);
522
+ --chalk-app-shadow-control: 0 7px 20px rgba(0, 0, 0, 0.48);
523
+ }
524
+
525
+ [data-chalk][data-chalk-palette="espresso-night"] {
526
+ --chalk-app-canvas: #15110f;
527
+ --chalk-app-chrome: #1a1512;
528
+ --chalk-app-stage: #1e1714;
529
+ --chalk-app-panel: #211916;
530
+ --chalk-app-tile-base: #1d1614;
531
+ --chalk-app-tile-color-strength: 20%;
532
+ --chalk-app-text: #f5ede3;
533
+ --chalk-app-text-muted: #b8a79a;
534
+ --chalk-app-line: #4a3930;
535
+ --chalk-app-line-strong: #664b3d;
536
+ --chalk-app-control: #2c211d;
537
+ --chalk-app-control-hover: #3a2a24;
538
+ --chalk-app-control-group: #211916;
539
+ --chalk-app-control-primary: #2a211e;
540
+ --chalk-app-control-primary-hover: #3b2d28;
541
+ --chalk-app-control-active: #3d2c24;
542
+ --chalk-app-control-active-line: #c98656;
543
+ --chalk-app-control-active-text: #f5ede3;
544
+ --chalk-app-message-remote: #35271f;
545
+ --chalk-app-message-local: #1d252b;
546
+ --chalk-app-message-local-text: #f5ede3;
547
+ --chalk-app-input: #1a1412;
548
+ --chalk-app-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.38);
549
+ --chalk-app-shadow-sm: 0 12px 38px rgba(0, 0, 0, 0.32);
550
+ --chalk-app-shadow-control: 0 7px 20px rgba(0, 0, 0, 0.44);
551
+ }
552
+
553
+ [data-chalk][data-chalk-palette="chalkboard-atelier"] {
554
+ --chalk-app-canvas: #0d1714;
555
+ --chalk-app-chrome: #111d19;
556
+ --chalk-app-stage: #14221d;
557
+ --chalk-app-panel: #1b2c26;
558
+ --chalk-app-tile-base: #15241f;
559
+ --chalk-app-tile-color-strength: 18%;
560
+ --chalk-app-text: #eff3e9;
561
+ --chalk-app-text-muted: #9bab9f;
562
+ --chalk-app-line: #30473d;
563
+ --chalk-app-line-strong: #466355;
564
+ --chalk-app-control: #20332c;
565
+ --chalk-app-control-hover: #2a4138;
566
+ --chalk-app-control-group: #172720;
567
+ --chalk-app-control-primary: #1e3029;
568
+ --chalk-app-control-primary-hover: #2c443a;
569
+ --chalk-app-control-active: #1c3b40;
570
+ --chalk-app-control-active-line: #76bed1;
571
+ --chalk-app-control-active-text: #eff3e9;
572
+ --chalk-app-message-remote: #263a32;
573
+ --chalk-app-message-local: #182d2f;
574
+ --chalk-app-message-local-text: #eff3e9;
575
+ --chalk-app-input: #13211c;
576
+ --chalk-app-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.34);
577
+ --chalk-app-shadow-sm: 0 12px 36px rgba(0, 0, 0, 0.28);
578
+ --chalk-app-shadow-control: 0 6px 18px rgba(0, 0, 0, 0.4);
579
+ }
580
+
581
+ [data-chalk][data-chalk-palette="prism-nocturne"] {
582
+ --chalk-app-canvas: #100d17;
583
+ --chalk-app-chrome: #14101d;
584
+ --chalk-app-stage: #17131e;
585
+ --chalk-app-panel: #1a1424;
586
+ --chalk-app-tile-base: #18121f;
587
+ --chalk-app-tile-color-strength: 26%;
588
+ --chalk-app-text: #f5f0fa;
589
+ --chalk-app-text-muted: #a99db3;
590
+ --chalk-app-line: #3b3049;
591
+ --chalk-app-line-strong: #58446d;
592
+ --chalk-app-control: #231b30;
593
+ --chalk-app-control-hover: #302340;
594
+ --chalk-app-control-group: #1b1525;
595
+ --chalk-app-control-primary: #251b32;
596
+ --chalk-app-control-primary-hover: #352549;
597
+ --chalk-app-control-active: #2b1743;
598
+ --chalk-app-control-active-line: #9a63e6;
599
+ --chalk-app-control-active-text: #f5f0fa;
600
+ --chalk-app-message-remote: #2b2334;
601
+ --chalk-app-message-local: #191321;
602
+ --chalk-app-message-local-text: #f5f0fa;
603
+ --chalk-app-input: #17111f;
604
+ --chalk-app-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.4);
605
+ --chalk-app-shadow-sm: 0 14px 42px rgba(0, 0, 0, 0.35);
606
+ --chalk-app-shadow-control: 0 7px 24px rgba(44, 15, 74, 0.46);
607
+ }
608
+
609
+ [data-chalk][data-chalk-palette="oled-signal"] {
610
+ --chalk-app-canvas: #000000;
611
+ --chalk-app-chrome: #030405;
612
+ --chalk-app-stage: #000000;
613
+ --chalk-app-panel: #07090c;
614
+ --chalk-app-tile-base: #07090c;
615
+ --chalk-app-tile-color-strength: 12%;
616
+ --chalk-app-text: #f7f8fa;
617
+ --chalk-app-text-muted: #8b949e;
618
+ --chalk-app-line: #242a31;
619
+ --chalk-app-line-strong: #3a424c;
620
+ --chalk-app-control: #11151a;
621
+ --chalk-app-control-hover: #1a2027;
622
+ --chalk-app-control-group: #080a0d;
623
+ --chalk-app-control-primary: #11151a;
624
+ --chalk-app-control-primary-hover: #20262e;
625
+ --chalk-app-control-active: #081b32;
626
+ --chalk-app-control-active-line: #2f86ff;
627
+ --chalk-app-control-active-text: #f7f8fa;
628
+ --chalk-app-message-remote: #14171b;
629
+ --chalk-app-message-local: #090b0f;
630
+ --chalk-app-message-local-text: #f7f8fa;
631
+ --chalk-app-input: #080a0d;
632
+ --chalk-app-shadow-xs: none;
633
+ --chalk-app-shadow-sm: none;
634
+ --chalk-app-shadow-control: 0 6px 18px rgba(0, 0, 0, 0.7);
635
+ }
636
+
637
+ [data-chalk][data-chalk-palette] {
638
+ --background: var(--chalk-app-canvas);
639
+ --foreground: var(--chalk-app-text);
640
+ --card: var(--chalk-app-panel);
641
+ --card-foreground: var(--chalk-app-text);
642
+ --popover: var(--chalk-app-panel);
643
+ --popover-foreground: var(--chalk-app-text);
644
+ --secondary: var(--chalk-app-control);
645
+ --secondary-foreground: var(--chalk-app-text);
646
+ --muted: var(--chalk-app-control-group);
647
+ --muted-foreground: var(--chalk-app-text-muted);
648
+ --accent: var(--chalk-app-control-active);
649
+ --accent-foreground: var(--chalk-app-text);
650
+ --border: var(--chalk-app-line);
651
+ --input: var(--chalk-app-line-strong);
652
+ --ring: var(--chalk-app-control-active-line);
653
+ }
654
+
655
+ [data-chalk][data-chalk-theme="dark"] {
656
+ color-scheme: dark;
657
+ }
658
+
659
+ [data-chalk][data-chalk-texture="paper"] {
660
+ --chalk-app-texture-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.74' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.24'/%3E%3C/svg%3E");
661
+ --chalk-app-texture-size: 180px 180px;
662
+ --chalk-app-texture-blend: soft-light;
663
+ }
664
+
665
+ [data-chalk][data-chalk-texture="slate"] {
666
+ --chalk-app-texture-image:
667
+ repeating-linear-gradient(7deg, transparent 0 9px, rgba(255, 255, 255, 0.018) 10px, transparent 11px 19px),
668
+ url("data:image/svg+xml,%3Csvg viewBox='0 0 220 220' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.36' numOctaves='5' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.2'/%3E%3C/svg%3E");
669
+ --chalk-app-texture-size: auto, 220px 220px;
670
+ --chalk-app-texture-blend: soft-light;
671
+ }
672
+
673
+ [data-chalk][data-chalk-theme="light"][data-chalk-texture="slate"] {
674
+ --chalk-app-texture-image:
675
+ repeating-linear-gradient(7deg, transparent 0 9px, rgba(12, 14, 18, 0.022) 10px, transparent 11px 19px),
676
+ url("data:image/svg+xml,%3Csvg viewBox='0 0 220 220' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.36' numOctaves='5' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.16'/%3E%3C/svg%3E");
677
+ --chalk-app-texture-blend: multiply;
678
+ }
679
+
680
+ .chalk-textured-surface {
681
+ background-image: var(--chalk-app-texture-image);
682
+ background-size: var(--chalk-app-texture-size);
683
+ background-blend-mode: var(--chalk-app-texture-blend);
684
+ }
685
+
686
+ .chalk-participant-wash {
687
+ background-color: color-mix(in srgb, var(--chalk-participant-color) var(--chalk-app-tile-color-strength), var(--chalk-app-tile-base));
688
+ }
689
+
690
+ /* =============================================================================
691
+ Base Styles & Scoped Reset
692
+ ============================================================================= */
693
+
694
+ :where([data-chalk], .chalk-root) {
695
+ font-family: var(--chalk-font-family);
696
+ color: var(--foreground);
697
+ background: var(--background);
698
+ line-height: 1.5;
699
+ font-size: 16px;
700
+ text-align: left;
701
+ text-transform: none;
702
+ letter-spacing: normal;
703
+ text-size-adjust: 100%;
704
+ -webkit-font-smoothing: antialiased;
705
+ -moz-osx-font-smoothing: grayscale;
706
+ isolation: isolate;
707
+ }
708
+
709
+ :where([data-chalk], .chalk-root),
710
+ :where([data-chalk], .chalk-root) *,
711
+ :where([data-chalk], .chalk-root) *::before,
712
+ :where([data-chalk], .chalk-root) *::after {
713
+ box-sizing: border-box;
714
+ }
715
+
716
+ :where([data-chalk], .chalk-root) :where(h1, h2, h3, h4, h5, h6, p, figure, blockquote, dl, dd) {
717
+ margin: 0;
718
+ }
719
+
720
+ :where([data-chalk], .chalk-root) :where(ul, ol) {
721
+ margin: 0;
722
+ padding: 0;
723
+ list-style: none;
724
+ }
725
+
726
+ :where([data-chalk], .chalk-root) :where(button, input, optgroup, select, textarea) {
727
+ font: inherit;
728
+ color: inherit;
729
+ letter-spacing: inherit;
730
+ text-transform: none;
731
+ margin: 0;
732
+ }
733
+
734
+ :where([data-chalk], .chalk-root) :where(button, [type="button"], [type="reset"], [type="submit"]) {
735
+ appearance: none;
736
+ -webkit-appearance: none;
737
+ }
738
+
739
+ :where([data-chalk], .chalk-root) :where(img, svg, video, canvas, audio, iframe, embed, object) {
740
+ display: block;
741
+ vertical-align: middle;
742
+ }
743
+
744
+ :where([data-chalk], .chalk-root) :where(img) {
745
+ max-width: 100%;
746
+ height: auto;
747
+ }
748
+
749
+ :where([data-chalk], .chalk-root) :where(video) {
750
+ max-width: 100%;
751
+ }
752
+
753
+ /* =============================================================================
754
+ Animations
755
+ ============================================================================= */
756
+
757
+ @keyframes chalk-episode-exit {
758
+ from {
759
+ opacity: 1;
760
+ transform: scale(1);
761
+ filter: blur(0);
762
+ }
763
+
764
+ to {
765
+ opacity: 0;
766
+ transform: scale(0.95);
767
+ filter: blur(4px);
768
+ }
769
+ }
770
+
771
+ .chalk-animate-exit {
772
+ animation: chalk-episode-exit 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards;
773
+ }
774
+
775
+ @keyframes chalk-scale-in {
776
+ from {
777
+ opacity: 0;
778
+ transform: scale(0.9);
779
+ }
780
+
781
+ to {
782
+ opacity: 1;
783
+ transform: scale(1);
784
+ }
785
+ }
786
+
787
+ @keyframes chalk-fade-out {
788
+ from {
789
+ opacity: 1;
790
+ }
791
+
792
+ to {
793
+ opacity: 0;
794
+ }
795
+ }
796
+
797
+ @keyframes chalk-speaking-pulse {
798
+ 0%,
799
+ 100% {
800
+ box-shadow:
801
+ 0 0 0 2px var(--chalk-accent-speaking),
802
+ 0 0 16px var(--chalk-accent-speaking-glow);
803
+ }
804
+
805
+ 50% {
806
+ box-shadow:
807
+ 0 0 0 3px var(--chalk-accent-speaking),
808
+ 0 0 28px var(--chalk-accent-speaking-glow);
809
+ }
810
+ }
811
+
812
+ @keyframes chalk-speaking-glow {
813
+ 0%,
814
+ 100% {
815
+ box-shadow: 0 0 0 2px var(--chalk-accent-speaking);
816
+ }
817
+
818
+ 50% {
819
+ box-shadow: 0 0 0 4px var(--chalk-accent-speaking);
820
+ }
821
+ }
822
+
823
+ @keyframes chalk-bounce {
824
+ 0%,
825
+ 100% {
826
+ transform: scale(1);
827
+ }
828
+
829
+ 50% {
830
+ transform: scale(0.95);
831
+ }
832
+ }
833
+
834
+ @keyframes chalk-panel-slide-in {
835
+ from {
836
+ transform: translateX(100%);
837
+ opacity: 0;
838
+ }
839
+
840
+ to {
841
+ transform: translateX(0);
842
+ opacity: 1;
843
+ }
844
+ }
845
+
846
+ @keyframes chalk-slide-right {
847
+ from {
848
+ transform: translateX(100%);
849
+ opacity: 0;
850
+ }
851
+
852
+ to {
853
+ transform: translateX(0);
854
+ opacity: 1;
855
+ }
856
+ }
857
+
858
+ @keyframes chalk-slide-left {
859
+ from {
860
+ transform: translateX(-100%);
861
+ opacity: 0;
862
+ }
863
+
864
+ to {
865
+ transform: translateX(0);
866
+ opacity: 1;
867
+ }
868
+ }
869
+
870
+ @keyframes chalk-float-up {
871
+ 0% {
872
+ opacity: 1;
873
+ transform: translateY(0) scale(1);
874
+ }
875
+
876
+ 100% {
877
+ opacity: 0;
878
+ transform: translateY(-50px) scale(1.2);
879
+ }
880
+ }
881
+
882
+ /* Enhanced reaction animations */
883
+ @keyframes chalk-reaction-float {
884
+ 0% {
885
+ opacity: 1;
886
+ transform: translateY(0) translateX(0) rotate(0deg) scale(1);
887
+ }
888
+
889
+ 20% {
890
+ opacity: 1;
891
+ transform: translateY(calc(var(--float-travel-y, 100px) * -0.2)) translateX(calc(var(--float-offset-x, 0px) * 0.5)) rotate(calc(var(--float-rotation, 0deg) * 0.3)) scale(var(--float-scale, 1.2));
892
+ }
893
+
894
+ 100% {
895
+ opacity: 0;
896
+ transform: translateY(calc(var(--float-travel-y, 100px) * -1)) translateX(var(--float-offset-x, 0px)) rotate(var(--float-rotation, 0deg)) scale(0.8);
897
+ }
898
+ }
899
+
900
+ @keyframes chalk-reaction-bounce-in {
901
+ 0% {
902
+ transform: scale(0) rotate(-10deg);
903
+ opacity: 0;
904
+ }
905
+
906
+ 50% {
907
+ transform: scale(1.3) rotate(5deg);
908
+ opacity: 1;
909
+ }
910
+
911
+ 70% {
912
+ transform: scale(0.9) rotate(-3deg);
913
+ }
914
+
915
+ 100% {
916
+ transform: scale(1) rotate(0deg);
917
+ opacity: 1;
918
+ }
919
+ }
920
+
921
+ @keyframes chalk-reaction-wiggle {
922
+ 0%,
923
+ 100% {
924
+ transform: rotate(0deg) scale(1);
925
+ }
926
+
927
+ 25% {
928
+ transform: rotate(-8deg) scale(1.05);
929
+ }
930
+
931
+ 75% {
932
+ transform: rotate(8deg) scale(1.05);
933
+ }
934
+ }
935
+
936
+ @keyframes chalk-particle-burst {
937
+ 0% {
938
+ transform: translate(-50%, -50%) rotate(var(--particle-angle, 0deg)) translateY(0) scale(1);
939
+ opacity: 1;
940
+ }
941
+
942
+ 100% {
943
+ transform: translate(-50%, -50%) rotate(var(--particle-angle, 0deg)) translateY(calc(var(--particle-distance, 50px) * -1)) scale(0);
944
+ opacity: 0;
945
+ }
946
+ }
947
+
948
+ @keyframes chalk-particle-explode {
949
+ 0% {
950
+ transform: translate(0, 0) scale(1);
951
+ opacity: 1;
952
+ }
953
+
954
+ 100% {
955
+ transform: translate(var(--particle-x, 0), var(--particle-y, 0)) scale(0);
956
+ opacity: 0;
957
+ }
958
+ }
959
+
960
+ @keyframes chalk-hand-wave {
961
+ 0%,
962
+ 100% {
963
+ transform: rotate(0deg);
964
+ }
965
+
966
+ 10% {
967
+ transform: rotate(14deg);
968
+ }
969
+
970
+ 20% {
971
+ transform: rotate(-8deg);
972
+ }
973
+
974
+ 30% {
975
+ transform: rotate(14deg);
976
+ }
977
+
978
+ 40% {
979
+ transform: rotate(-4deg);
980
+ }
981
+
982
+ 50%,
983
+ 100% {
984
+ transform: rotate(0deg);
985
+ }
986
+ }
987
+
988
+ @keyframes chalk-hand-bounce {
989
+ 0%,
990
+ 100% {
991
+ transform: translateY(0);
992
+ }
993
+
994
+ 50% {
995
+ transform: translateY(-5px);
996
+ }
997
+ }
998
+
999
+ @keyframes chalk-recording-pulse {
1000
+ 0%,
1001
+ 100% {
1002
+ opacity: 1;
1003
+ box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.7);
1004
+ }
1005
+
1006
+ 50% {
1007
+ opacity: 0.8;
1008
+ box-shadow: 0 0 0 8px rgba(239, 68, 68, 0);
1009
+ }
1010
+ }
1011
+
1012
+ @keyframes chalk-pulse {
1013
+ 0%,
1014
+ 100% {
1015
+ opacity: 1;
1016
+ }
1017
+
1018
+ 50% {
1019
+ opacity: 0.5;
1020
+ }
1021
+ }
1022
+
1023
+ @keyframes chalk-tooltip-in {
1024
+ from {
1025
+ opacity: 0;
1026
+ transform: scale(0.92) translateY(4px);
1027
+ }
1028
+
1029
+ to {
1030
+ opacity: 1;
1031
+ transform: scale(1) translateY(0);
1032
+ }
1033
+ }
1034
+
1035
+ @keyframes chalk-scale-spring {
1036
+ 0% {
1037
+ opacity: 0;
1038
+ transform: scale(0.8);
1039
+ }
1040
+
1041
+ 60% {
1042
+ transform: scale(1.05);
1043
+ }
1044
+
1045
+ 100% {
1046
+ opacity: 1;
1047
+ transform: scale(1);
1048
+ }
1049
+ }
1050
+
1051
+ @keyframes chalk-toast-in {
1052
+ from {
1053
+ transform: translateX(100%);
1054
+ opacity: 0;
1055
+ }
1056
+
1057
+ to {
1058
+ transform: translateX(0);
1059
+ opacity: 1;
1060
+ }
1061
+ }
1062
+
1063
+ @keyframes chalk-highlight-pulse {
1064
+ 0%,
1065
+ 100% {
1066
+ box-shadow: 0 0 0 4px oklch(0.6 0.1 185 / 50%);
1067
+ }
1068
+
1069
+ 50% {
1070
+ box-shadow: 0 0 0 8px oklch(0.6 0.1 185 / 30%);
1071
+ }
1072
+ }
1073
+
1074
+ @keyframes chalk-transcript-in {
1075
+ from {
1076
+ opacity: 0;
1077
+ transform: translateY(10px);
1078
+ }
1079
+
1080
+ to {
1081
+ opacity: 1;
1082
+ transform: translateY(0);
1083
+ }
1084
+ }
1085
+
1086
+ @keyframes chalk-typing-dot {
1087
+ 0%,
1088
+ 60%,
1089
+ 100% {
1090
+ opacity: 0.3;
1091
+ transform: scale(0.8);
1092
+ }
1093
+
1094
+ 30% {
1095
+ opacity: 1;
1096
+ transform: scale(1);
1097
+ }
1098
+ }
1099
+
1100
+ @keyframes chalk-interim-pulse {
1101
+ 0%,
1102
+ 100% {
1103
+ background-color: transparent;
1104
+ }
1105
+
1106
+ 50% {
1107
+ background-color: oklch(0.6 0.1 185 / 5%);
1108
+ }
1109
+ }
1110
+
1111
+ @keyframes chalk-search-highlight {
1112
+ 0%,
1113
+ 100% {
1114
+ box-shadow: 0 0 0 2px oklch(0.8 0.15 85 / 50%);
1115
+ }
1116
+
1117
+ 50% {
1118
+ box-shadow: 0 0 0 4px oklch(0.8 0.15 85 / 30%);
1119
+ }
1120
+ }
1121
+
1122
+ @keyframes chalk-control-hover {
1123
+ from {
1124
+ transform: scale(1);
1125
+ }
1126
+
1127
+ to {
1128
+ transform: scale(1.04);
1129
+ }
1130
+ }
1131
+
1132
+ @keyframes chalk-shimmer {
1133
+ 0% {
1134
+ background-position: -200% 0;
1135
+ }
1136
+
1137
+ 100% {
1138
+ background-position: 200% 0;
1139
+ }
1140
+ }
1141
+
1142
+ @keyframes chalk-glow-pulse {
1143
+ 0%,
1144
+ 100% {
1145
+ box-shadow:
1146
+ 0 0 0 0 rgba(27, 182, 166, 0.4),
1147
+ 0 0 20px rgba(27, 182, 166, 0.2);
1148
+ }
1149
+
1150
+ 50% {
1151
+ box-shadow:
1152
+ 0 0 0 8px rgba(27, 182, 166, 0),
1153
+ 0 0 40px rgba(27, 182, 166, 0.3);
1154
+ }
1155
+ }
1156
+
1157
+ @keyframes chalk-audio-pulse {
1158
+ 0%,
1159
+ 100% {
1160
+ transform: scaleX(1);
1161
+ }
1162
+
1163
+ 50% {
1164
+ transform: scaleX(1.02);
1165
+ }
1166
+ }
1167
+
1168
+ @keyframes chalk-ripple-expand {
1169
+ 0% {
1170
+ transform: scale(0.8);
1171
+ opacity: 0.8;
1172
+ border-width: 4px;
1173
+ }
1174
+
1175
+ 100% {
1176
+ transform: scale(2.5);
1177
+ opacity: 0;
1178
+ border-width: 0;
1179
+ }
1180
+ }
1181
+
1182
+ @keyframes chalk-spin-slow {
1183
+ from {
1184
+ transform: rotate(0deg);
1185
+ }
1186
+
1187
+ to {
1188
+ transform: rotate(360deg);
1189
+ }
1190
+ }
1191
+
1192
+ @keyframes chalk-spin-reverse-slow {
1193
+ from {
1194
+ transform: rotate(360deg);
1195
+ }
1196
+
1197
+ to {
1198
+ transform: rotate(0deg);
1199
+ }
1200
+ }
1201
+
1202
+ /* Transition for theme switching */
1203
+ .chalk-theme-transition,
1204
+ .chalk-theme-transition *,
1205
+ .chalk-theme-transition *::before,
1206
+ .chalk-theme-transition *::after {
1207
+ transition-property: background-color, border-color, color, fill, stroke;
1208
+ transition-duration: 300ms;
1209
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1210
+ }
1211
+
1212
+ /* Tactile button base styles */
1213
+ .chalk-button-tactile {
1214
+ transition-property: all;
1215
+ transition-duration: 200ms;
1216
+ transition-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1);
1217
+ /* Spring-like */
1218
+ }
1219
+
1220
+ .chalk-button-tactile:active {
1221
+ transform: scale(0.92);
1222
+ }
1223
+
1224
+ .chalk-button-tactile:hover {
1225
+ transform: scale(1.05);
1226
+ }
1227
+
1228
+ /* Dock Entrance & Exit */
1229
+ @keyframes chalk-dock-slide-up {
1230
+ 0% {
1231
+ transform: translateY(150%) scale(0.9);
1232
+ opacity: 0;
1233
+ }
1234
+
1235
+ 60% {
1236
+ transform: translateY(-10%) scale(1.02);
1237
+ opacity: 1;
1238
+ }
1239
+
1240
+ 100% {
1241
+ transform: translateY(0) scale(1);
1242
+ opacity: 1;
1243
+ }
1244
+ }
1245
+
1246
+ @keyframes chalk-dock-slide-down {
1247
+ 0% {
1248
+ transform: translateY(0);
1249
+ opacity: 1;
1250
+ }
1251
+
1252
+ 100% {
1253
+ transform: translateY(150%);
1254
+ opacity: 0;
1255
+ }
1256
+ }
1257
+
1258
+ /* Tile Staggered Entrance */
1259
+ @keyframes chalk-tile-pop-in {
1260
+ 0% {
1261
+ transform: scale(0.8);
1262
+ opacity: 0;
1263
+ }
1264
+
1265
+ 100% {
1266
+ transform: scale(1);
1267
+ opacity: 1;
1268
+ }
1269
+ }
1270
+
1271
+ /* Void Exit */
1272
+ @keyframes chalk-void-exit {
1273
+ 0% {
1274
+ transform: scale(1);
1275
+ opacity: 1;
1276
+ filter: blur(0);
1277
+ }
1278
+
1279
+ 100% {
1280
+ transform: scale(0);
1281
+ opacity: 0;
1282
+ filter: blur(20px);
1283
+ }
1284
+ }
1285
+
1286
+ /* Harmonic Speaker Glow */
1287
+ @keyframes chalk-harmonic-pulse {
1288
+ 0% {
1289
+ box-shadow: 0 0 0 0px rgba(34, 197, 94, 0);
1290
+ border-color: rgba(34, 197, 94, 0);
1291
+ }
1292
+
1293
+ 50% {
1294
+ box-shadow: 0 0 0 1px rgba(34, 197, 94, 0.2);
1295
+ border-color: rgba(34, 197, 94, 0.4);
1296
+ }
1297
+
1298
+ 100% {
1299
+ box-shadow: 0 0 0 0px rgba(34, 197, 94, 0);
1300
+ border-color: rgba(34, 197, 94, 0);
1301
+ }
1302
+ }
1303
+
1304
+ /* Animation utilities */
1305
+ .chalk-animate-dock-up {
1306
+ animation: chalk-dock-slide-up 0.8s cubic-bezier(0.34, 1.56, 0.64, 1) forwards !important;
1307
+ }
1308
+
1309
+ .chalk-animate-dock-down {
1310
+ animation: chalk-dock-slide-down 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards !important;
1311
+ }
1312
+
1313
+ .chalk-animate-void-exit {
1314
+ animation: chalk-void-exit 0.6s cubic-bezier(0.4, 0, 0.2, 1) forwards !important;
1315
+ }
1316
+
1317
+ .chalk-animate-tile-pop {
1318
+ animation: chalk-tile-pop-in 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) backwards !important;
1319
+ }
1320
+
1321
+ .chalk-animate-harmonic-pulse {
1322
+ animation: chalk-harmonic-pulse 3s infinite !important;
1323
+ }
1324
+
1325
+ /* Animation utility classes */
1326
+ .chalk-animate-scale-in {
1327
+ animation: chalk-scale-in var(--chalk-duration-normal) var(--chalk-ease-out-expo);
1328
+ }
1329
+
1330
+ .chalk-animate-fade-out {
1331
+ animation: chalk-fade-out var(--chalk-duration-normal) ease-out forwards;
1332
+ }
1333
+
1334
+ .chalk-animate-speaking {
1335
+ animation: chalk-speaking-pulse 1.5s ease-in-out infinite;
1336
+ }
1337
+
1338
+ .chalk-animate-speaking-glow {
1339
+ animation: chalk-speaking-glow 1.5s ease-in-out infinite;
1340
+ }
1341
+
1342
+ .chalk-animate-bounce {
1343
+ animation: chalk-bounce var(--chalk-duration-fast) ease-out;
1344
+ }
1345
+
1346
+ .chalk-animate-slide-right {
1347
+ animation: chalk-slide-right var(--chalk-duration-normal) var(--chalk-ease-out-expo);
1348
+ }
1349
+
1350
+ .chalk-animate-slide-left {
1351
+ animation: chalk-slide-left var(--chalk-duration-normal) var(--chalk-ease-out-expo);
1352
+ }
1353
+
1354
+ .chalk-animate-panel-slide-in {
1355
+ animation: chalk-panel-slide-in var(--chalk-duration-slow) var(--chalk-ease-out-expo);
1356
+ }
1357
+
1358
+ .chalk-animate-float-up {
1359
+ animation: chalk-float-up 2s ease-out forwards;
1360
+ }
1361
+
1362
+ .chalk-animate-reaction-float {
1363
+ animation: chalk-reaction-float var(--float-duration, 3000ms) cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
1364
+ }
1365
+
1366
+ .chalk-animate-reaction-bounce-in {
1367
+ animation: chalk-reaction-bounce-in 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55) forwards;
1368
+ }
1369
+
1370
+ .chalk-animate-reaction-wiggle {
1371
+ animation: chalk-reaction-wiggle 0.5s ease-in-out 0.3s 3;
1372
+ }
1373
+
1374
+ .chalk-animate-hand-bounce {
1375
+ animation: chalk-hand-bounce 0.6s ease-in-out infinite;
1376
+ }
1377
+
1378
+ .chalk-animate-hand-wave {
1379
+ animation: chalk-hand-wave 2.5s ease-in-out infinite;
1380
+ }
1381
+
1382
+ .chalk-animate-pulse {
1383
+ animation: chalk-pulse 2s ease-in-out infinite;
1384
+ }
1385
+
1386
+ .chalk-animate-recording {
1387
+ animation: chalk-recording-pulse 2s ease-in-out infinite;
1388
+ }
1389
+
1390
+ .chalk-animate-toast-in {
1391
+ animation: chalk-toast-in var(--chalk-duration-normal) var(--chalk-ease-out-expo);
1392
+ }
1393
+
1394
+ .chalk-animate-tooltip-in {
1395
+ animation: chalk-tooltip-in var(--chalk-duration-fast) var(--chalk-ease-out-back);
1396
+ }
1397
+
1398
+ .chalk-animate-highlight {
1399
+ animation: chalk-highlight-pulse 2s ease-in-out infinite;
1400
+ }
1401
+
1402
+ .chalk-animate-transcript-in {
1403
+ animation: chalk-transcript-in var(--chalk-duration-fast) var(--chalk-ease-out-expo);
1404
+ }
1405
+
1406
+ .chalk-animate-scale-spring {
1407
+ animation: chalk-scale-spring var(--chalk-duration-slow) var(--chalk-ease-out-back);
1408
+ }
1409
+
1410
+ .chalk-animate-shimmer {
1411
+ background: linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.4) 50%, transparent 100%);
1412
+ background-size: 200% 100%;
1413
+ animation: chalk-shimmer 2s ease-in-out infinite;
1414
+ }
1415
+
1416
+ .chalk-animate-glow-pulse {
1417
+ animation: chalk-glow-pulse 2s ease-in-out infinite;
1418
+ }
1419
+
1420
+ .chalk-animate-ripple {
1421
+ animation: chalk-ripple-expand 2s ease-out infinite;
1422
+ }
1423
+
1424
+ .chalk-animate-spin-slow {
1425
+ animation: chalk-spin-slow 8s linear infinite;
1426
+ }
1427
+
1428
+ .chalk-animate-spin-reverse-slow {
1429
+ animation: chalk-spin-reverse-slow 12s linear infinite;
1430
+ }
1431
+
1432
+ .chalk-animate-typing-dot {
1433
+ animation: chalk-typing-dot 1.4s ease-in-out infinite;
1434
+ }
1435
+
1436
+ .chalk-animate-interim-pulse {
1437
+ animation: chalk-interim-pulse 2s ease-in-out infinite;
1438
+ }
1439
+
1440
+ .chalk-animate-search-highlight {
1441
+ animation: chalk-search-highlight 2s ease-in-out infinite;
1442
+ }
1443
+
1444
+ /* Low confidence text styling */
1445
+ .chalk-low-confidence {
1446
+ text-decoration: underline;
1447
+ text-decoration-style: dotted;
1448
+ text-decoration-color: var(--warning);
1449
+ text-underline-offset: 3px;
1450
+ }
1451
+
1452
+ /* Respect reduced motion preference */
1453
+ @media (prefers-reduced-motion: reduce) {
1454
+ *,
1455
+ *::before,
1456
+ *::after {
1457
+ animation-duration: 0.01ms !important;
1458
+ animation-iteration-count: 1 !important;
1459
+ transition-duration: 0.01ms !important;
1460
+ }
1461
+ }