@runtypelabs/persona 1.48.0 → 2.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 (69) hide show
  1. package/README.md +140 -8
  2. package/dist/index.cjs +90 -39
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +1055 -24
  5. package/dist/index.d.ts +1055 -24
  6. package/dist/index.global.js +111 -60
  7. package/dist/index.global.js.map +1 -1
  8. package/dist/index.js +90 -39
  9. package/dist/index.js.map +1 -1
  10. package/dist/install.global.js +1 -1
  11. package/dist/install.global.js.map +1 -1
  12. package/dist/widget.css +836 -513
  13. package/package.json +1 -1
  14. package/src/artifacts-session.test.ts +80 -0
  15. package/src/client.test.ts +20 -21
  16. package/src/client.ts +153 -4
  17. package/src/components/approval-bubble.ts +45 -42
  18. package/src/components/artifact-card.ts +91 -0
  19. package/src/components/artifact-pane.ts +501 -0
  20. package/src/components/composer-builder.ts +32 -27
  21. package/src/components/event-stream-view.ts +40 -40
  22. package/src/components/feedback.ts +36 -36
  23. package/src/components/forms.ts +11 -11
  24. package/src/components/header-builder.test.ts +32 -0
  25. package/src/components/header-builder.ts +55 -36
  26. package/src/components/header-layouts.ts +58 -125
  27. package/src/components/launcher.ts +36 -21
  28. package/src/components/message-bubble.ts +92 -65
  29. package/src/components/messages.ts +2 -2
  30. package/src/components/panel.ts +42 -11
  31. package/src/components/reasoning-bubble.ts +23 -23
  32. package/src/components/registry.ts +4 -0
  33. package/src/components/suggestions.ts +1 -1
  34. package/src/components/tool-bubble.ts +32 -32
  35. package/src/defaults.ts +30 -4
  36. package/src/index.ts +80 -2
  37. package/src/install.ts +22 -0
  38. package/src/plugins/types.ts +23 -0
  39. package/src/postprocessors.ts +2 -2
  40. package/src/runtime/host-layout.ts +174 -0
  41. package/src/runtime/init.test.ts +236 -0
  42. package/src/runtime/init.ts +114 -55
  43. package/src/session.ts +135 -2
  44. package/src/styles/tailwind.css +1 -1
  45. package/src/styles/widget.css +836 -513
  46. package/src/types/theme.ts +354 -0
  47. package/src/types.ts +314 -15
  48. package/src/ui.docked.test.ts +104 -0
  49. package/src/ui.ts +940 -227
  50. package/src/utils/artifact-gate.test.ts +255 -0
  51. package/src/utils/artifact-gate.ts +142 -0
  52. package/src/utils/artifact-resize.test.ts +64 -0
  53. package/src/utils/artifact-resize.ts +67 -0
  54. package/src/utils/attachment-manager.ts +10 -10
  55. package/src/utils/code-generators.test.ts +52 -0
  56. package/src/utils/code-generators.ts +40 -36
  57. package/src/utils/dock.ts +17 -0
  58. package/src/utils/dom-context.test.ts +504 -0
  59. package/src/utils/dom-context.ts +896 -0
  60. package/src/utils/dom.ts +12 -1
  61. package/src/utils/message-fingerprint.test.ts +187 -0
  62. package/src/utils/message-fingerprint.ts +105 -0
  63. package/src/utils/migration.ts +179 -0
  64. package/src/utils/morph.ts +1 -1
  65. package/src/utils/plugins.ts +175 -0
  66. package/src/utils/positioning.ts +4 -4
  67. package/src/utils/theme.test.ts +125 -0
  68. package/src/utils/theme.ts +216 -60
  69. package/src/utils/tokens.ts +682 -0
@@ -1,869 +1,877 @@
1
1
  #persona-root {
2
2
  all: initial;
3
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", sans-serif;
4
- line-height: 1.5;
3
+ font-family: var(--persona-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", sans-serif);
4
+ font-size: var(--persona-font-size, 1rem);
5
+ font-weight: var(--persona-font-weight, 400);
6
+ line-height: var(--persona-line-height, 1.5);
5
7
 
6
8
  /* Theme-aware markdown variables - inherit from theme colors set by JavaScript */
7
- --cw-md-code-block-bg: var(--cw-container, #f3f4f6);
8
- --cw-md-code-block-border-color: var(--cw-border, #e5e7eb);
9
- --cw-md-inline-code-bg: var(--cw-container, #f3f4f6);
10
- --cw-md-table-border-color: var(--cw-border, #e5e7eb);
11
- --cw-md-table-header-bg: var(--cw-container, #f8fafc);
12
- --cw-md-hr-color: var(--cw-divider, #e5e7eb);
13
- --cw-md-blockquote-border-color: var(--cw-accent, #3b82f6);
14
- --cw-md-blockquote-text-color: var(--cw-muted, #6b7280);
9
+ --persona-md-code-block-bg: var(--persona-container, #f3f4f6);
10
+ --persona-md-code-block-border-color: var(--persona-border, #e5e7eb);
11
+ --persona-md-inline-code-bg: var(--persona-container, #f3f4f6);
12
+ --persona-md-inline-code-color: var(--persona-text, #111827);
13
+ --persona-md-table-border-color: var(--persona-border, #e5e7eb);
14
+ --persona-md-table-header-bg: var(--persona-container, #f8fafc);
15
+ --persona-md-hr-color: var(--persona-divider, #e5e7eb);
16
+ --persona-md-blockquote-border-color: var(--persona-accent, #3b82f6);
17
+ --persona-md-blockquote-text-color: var(--persona-muted, #6b7280);
15
18
  }
16
19
 
17
20
  #persona-root * {
18
21
  box-sizing: border-box;
19
22
  }
20
23
 
21
- .tvw-flex {
24
+ .persona-flex {
22
25
  display: flex;
23
26
  }
24
27
 
25
- .tvw-grid {
28
+ .persona-grid {
26
29
  display: grid;
27
30
  }
28
31
 
29
- .tvw-h-full {
32
+ .persona-h-full {
30
33
  height: 100%;
31
34
  }
32
35
 
33
- .tvw-h-1 {
36
+ .persona-h-1 {
34
37
  height: 0.25rem;
35
38
  }
36
39
 
37
- .tvw-w-full {
40
+ .persona-w-full {
38
41
  width: 100%;
39
42
  }
40
43
 
41
- .tvw-flex-col {
44
+ .persona-flex-col {
42
45
  flex-direction: column;
43
46
  }
44
47
 
45
- .tvw-flex-wrap {
48
+ .persona-flex-wrap {
46
49
  flex-wrap: wrap;
47
50
  }
48
51
 
49
- .tvw-items-center {
52
+ .persona-items-center {
50
53
  align-items: center;
51
54
  }
52
55
 
53
- .tvw-items-end {
56
+ .persona-items-end {
54
57
  align-items: flex-end;
55
58
  }
56
59
 
57
- .tvw-items-start {
60
+ .persona-items-start {
58
61
  align-items: flex-start;
59
62
  }
60
63
 
61
- .tvw-justify-center {
64
+ .persona-justify-center {
62
65
  justify-content: center;
63
66
  }
64
67
 
65
- .tvw-justify-between {
68
+ .persona-justify-between {
66
69
  justify-content: space-between;
67
70
  }
68
71
 
69
- .tvw-justify-end {
72
+ .persona-justify-end {
70
73
  justify-content: flex-end;
71
74
  }
72
75
 
73
- .tvw-gap-1 {
76
+ .persona-gap-1 {
74
77
  gap: 0.25rem;
75
78
  }
76
79
 
77
- .tvw-gap-2 {
80
+ .persona-gap-2 {
78
81
  gap: 0.5rem;
79
82
  }
80
83
 
81
- .tvw-gap-1\.5 {
84
+ .persona-gap-1\.5 {
82
85
  gap: 0.375rem;
83
86
  }
84
87
 
85
- .tvw-gap-3 {
88
+ .persona-gap-3 {
86
89
  gap: 0.75rem;
87
90
  }
88
91
 
89
- .tvw-gap-6 {
92
+ .persona-gap-6 {
90
93
  gap: 1.5rem;
91
94
  }
92
95
 
93
96
  /* Widget CSS Variables - scoped to widget root to avoid polluting global namespace */
94
97
  #persona-root {
95
- --cw-radius-sm: 0.75rem;
96
- --cw-radius-md: 1rem;
97
- --cw-radius-lg: 1.5rem;
98
- --cw-launcher-radius: 9999px;
99
- --cw-button-radius: 9999px;
98
+ --persona-radius-sm: 0.125rem;
99
+ --persona-radius-md: 0.375rem;
100
+ --persona-radius-lg: 0.5rem;
101
+ --persona-radius-xl: 0.75rem;
102
+ --persona-launcher-radius: 9999px;
103
+ --persona-button-radius: 9999px;
104
+ --persona-panel-radius: var(--persona-radius-xl);
105
+ --persona-input-radius: var(--persona-radius-lg);
106
+ --persona-message-user-radius: var(--persona-radius-lg);
107
+ --persona-message-assistant-radius: var(--persona-radius-lg);
100
108
 
101
109
  /* Markdown Header Variables */
102
- --cw-md-h1-size: 1.5rem;
103
- --cw-md-h1-weight: 700;
104
- --cw-md-h1-margin: 1rem 0 0.5rem;
105
- --cw-md-h1-line-height: 1.25;
106
- --cw-md-h2-size: 1.25rem;
107
- --cw-md-h2-weight: 700;
108
- --cw-md-h2-margin: 0.875rem 0 0.5rem;
109
- --cw-md-h2-line-height: 1.3;
110
- --cw-md-h3-size: 1.125rem;
111
- --cw-md-h3-weight: 600;
112
- --cw-md-h3-margin: 0.75rem 0 0.375rem;
113
- --cw-md-h3-line-height: 1.4;
114
- --cw-md-h4-size: 1rem;
115
- --cw-md-h4-weight: 600;
116
- --cw-md-h4-margin: 0.625rem 0 0.25rem;
117
- --cw-md-h4-line-height: 1.5;
118
- --cw-md-h5-size: 0.875rem;
119
- --cw-md-h5-weight: 600;
120
- --cw-md-h5-margin: 0.5rem 0 0.25rem;
121
- --cw-md-h5-line-height: 1.5;
122
- --cw-md-h6-size: 0.75rem;
123
- --cw-md-h6-weight: 600;
124
- --cw-md-h6-margin: 0.5rem 0 0.25rem;
125
- --cw-md-h6-line-height: 1.5;
110
+ --persona-md-h1-size: 1.5rem;
111
+ --persona-md-h1-weight: 700;
112
+ --persona-md-h1-margin: 1rem 0 0.5rem;
113
+ --persona-md-h1-line-height: 1.25;
114
+ --persona-md-h2-size: 1.25rem;
115
+ --persona-md-h2-weight: 700;
116
+ --persona-md-h2-margin: 0.875rem 0 0.5rem;
117
+ --persona-md-h2-line-height: 1.3;
118
+ --persona-md-h3-size: 1.125rem;
119
+ --persona-md-h3-weight: 600;
120
+ --persona-md-h3-margin: 0.75rem 0 0.375rem;
121
+ --persona-md-h3-line-height: 1.4;
122
+ --persona-md-h4-size: 1rem;
123
+ --persona-md-h4-weight: 600;
124
+ --persona-md-h4-margin: 0.625rem 0 0.25rem;
125
+ --persona-md-h4-line-height: 1.5;
126
+ --persona-md-h5-size: 0.875rem;
127
+ --persona-md-h5-weight: 600;
128
+ --persona-md-h5-margin: 0.5rem 0 0.25rem;
129
+ --persona-md-h5-line-height: 1.5;
130
+ --persona-md-h6-size: 0.75rem;
131
+ --persona-md-h6-weight: 600;
132
+ --persona-md-h6-margin: 0.5rem 0 0.25rem;
133
+ --persona-md-h6-line-height: 1.5;
126
134
 
127
135
  /* Markdown Table Variables */
128
- --cw-md-table-border-color: #e5e7eb;
129
- --cw-md-table-header-bg: #f8fafc;
130
- --cw-md-table-header-weight: 600;
131
- --cw-md-table-cell-padding: 0.5rem 0.75rem;
132
- --cw-md-table-border-radius: 0.375rem;
136
+ --persona-md-table-border-color: #e5e7eb;
137
+ --persona-md-table-header-bg: #f8fafc;
138
+ --persona-md-table-header-weight: 600;
139
+ --persona-md-table-cell-padding: 0.5rem 0.75rem;
140
+ --persona-md-table-border-radius: 0.375rem;
133
141
 
134
142
  /* Markdown Horizontal Rule Variables */
135
- --cw-md-hr-color: #e5e7eb;
136
- --cw-md-hr-height: 1px;
137
- --cw-md-hr-margin: 1rem 0;
143
+ --persona-md-hr-color: #e5e7eb;
144
+ --persona-md-hr-height: 1px;
145
+ --persona-md-hr-margin: 1rem 0;
138
146
 
139
147
  /* Markdown Blockquote Variables */
140
- --cw-md-blockquote-border-color: #3b82f6;
141
- --cw-md-blockquote-border-width: 3px;
142
- --cw-md-blockquote-padding: 0.5rem 1rem;
143
- --cw-md-blockquote-margin: 0.5rem 0;
144
- --cw-md-blockquote-bg: transparent;
145
- --cw-md-blockquote-text-color: #6b7280;
146
- --cw-md-blockquote-font-style: italic;
148
+ --persona-md-blockquote-border-color: #3b82f6;
149
+ --persona-md-blockquote-border-width: 3px;
150
+ --persona-md-blockquote-padding: 0.5rem 1rem;
151
+ --persona-md-blockquote-margin: 0.5rem 0;
152
+ --persona-md-blockquote-bg: transparent;
153
+ --persona-md-blockquote-text-color: #6b7280;
154
+ --persona-md-blockquote-font-style: italic;
147
155
 
148
156
  /* Markdown Code Block Variables */
149
- --cw-md-code-block-bg: #f3f4f6;
150
- --cw-md-code-block-border-color: #e5e7eb;
151
- --cw-md-code-block-text-color: inherit;
152
- --cw-md-code-block-padding: 0.75rem;
153
- --cw-md-code-block-border-radius: 0.375rem;
154
- --cw-md-code-block-font-size: 0.875rem;
157
+ --persona-md-code-block-bg: #f3f4f6;
158
+ --persona-md-code-block-border-color: #e5e7eb;
159
+ --persona-md-code-block-text-color: inherit;
160
+ --persona-md-code-block-padding: 0.75rem;
161
+ --persona-md-code-block-border-radius: 0.375rem;
162
+ --persona-md-code-block-font-size: 0.875rem;
155
163
 
156
164
  /* Markdown Inline Code Variables */
157
- --cw-md-inline-code-bg: #f3f4f6;
158
- --cw-md-inline-code-padding: 0.125rem 0.375rem;
159
- --cw-md-inline-code-border-radius: 0.25rem;
160
- --cw-md-inline-code-font-size: 0.875em;
165
+ --persona-md-inline-code-bg: #f3f4f6;
166
+ --persona-md-inline-code-padding: 0.125rem 0.375rem;
167
+ --persona-md-inline-code-border-radius: 0.25rem;
168
+ --persona-md-inline-code-font-size: 0.875em;
161
169
 
162
170
  /* Markdown Strong/Em Variables */
163
- --cw-md-strong-weight: 600;
164
- --cw-md-em-style: italic;
171
+ --persona-md-strong-weight: 600;
172
+ --persona-md-em-style: italic;
165
173
  }
166
174
 
167
- .tvw-rounded-xl {
168
- border-radius: var(--cw-radius-sm);
175
+ .persona-rounded-xl {
176
+ border-radius: var(--persona-radius-sm);
169
177
  }
170
178
 
171
- .tvw-rounded-lg {
172
- border-radius: var(--cw-radius-md);
179
+ .persona-rounded-lg {
180
+ border-radius: var(--persona-radius-md);
173
181
  }
174
182
 
175
- .tvw-rounded-2xl {
176
- border-radius: var(--cw-radius-lg);
183
+ .persona-rounded-2xl {
184
+ border-radius: var(--persona-radius-lg);
177
185
  }
178
186
 
179
- .tvw-rounded {
180
- border-radius: 0.25rem;
187
+ .persona-rounded {
188
+ border-radius: var(--persona-radius-sm, 0.125rem);
181
189
  }
182
190
 
183
- .tvw-rounded-md {
184
- border-radius: 0.375rem;
191
+ .persona-rounded-md {
192
+ border-radius: var(--persona-radius-md, 0.375rem);
185
193
  }
186
194
 
187
- .tvw-rounded-b {
188
- border-bottom-left-radius: 0.25rem;
189
- border-bottom-right-radius: 0.25rem;
195
+ .persona-rounded-b {
196
+ border-bottom-left-radius: var(--persona-radius-sm, 0.125rem);
197
+ border-bottom-right-radius: var(--persona-radius-sm, 0.125rem);
190
198
  }
191
199
 
192
- .tvw-rounded-full {
193
- border-radius: var(--cw-launcher-radius);
200
+ .persona-rounded-full {
201
+ border-radius: var(--persona-launcher-radius);
194
202
  }
195
203
 
196
- .tvw-rounded-launcher {
197
- border-radius: var(--cw-launcher-radius);
204
+ .persona-rounded-launcher {
205
+ border-radius: var(--persona-launcher-radius);
198
206
  }
199
207
 
200
- .tvw-rounded-button {
201
- border-radius: var(--cw-button-radius);
208
+ .persona-rounded-button {
209
+ border-radius: var(--persona-button-radius);
202
210
  }
203
211
 
204
- .tvw-overflow-hidden {
212
+ .persona-overflow-hidden {
205
213
  overflow: hidden;
206
214
  }
207
215
 
208
- .tvw-overflow-auto {
216
+ .persona-overflow-auto {
209
217
  overflow: auto;
210
218
  }
211
219
 
212
- .tvw-max-h-\[300px\] {
220
+ .persona-max-h-\[300px\] {
213
221
  max-height: 300px;
214
222
  }
215
223
 
216
- .tvw-bg-cw-surface {
217
- background-color: var(--cw-surface, #ffffff);
224
+ .persona-bg-persona-surface {
225
+ background-color: var(--persona-surface, #ffffff);
218
226
  }
219
227
 
220
- .tvw-bg-cw-container {
221
- background-color: var(--cw-container, #f8fafc);
228
+ .persona-bg-persona-container {
229
+ background-color: var(--persona-container, #f8fafc);
222
230
  }
223
231
 
224
- .tvw-bg-cw-input-background {
225
- background-color: var(--cw-input-background, #ffffff);
232
+ .persona-bg-persona-input-background {
233
+ background-color: var(--persona-input-background, #ffffff);
226
234
  }
227
235
 
228
- .tvw-bg-white {
236
+ .persona-bg-white {
229
237
  background-color: #ffffff;
230
238
  }
231
239
 
232
- .tvw-bg-transparent {
240
+ .persona-bg-transparent {
233
241
  background-color: transparent;
234
242
  }
235
243
 
236
- .tvw-bg-gray-100 {
244
+ .persona-bg-gray-100 {
237
245
  background-color: #f3f4f6;
238
246
  }
239
247
 
240
- .tvw-bg-gray-200 {
248
+ .persona-bg-gray-200 {
241
249
  background-color: #e5e7eb;
242
250
  }
243
251
 
244
- .tvw-text-cw-primary {
245
- color: var(--cw-primary, #111827);
252
+ .persona-text-persona-primary {
253
+ color: var(--persona-primary, #111827);
246
254
  }
247
255
 
248
- .tvw-text-cw-call-to-action {
249
- color: var(--cw-call-to-action, #ffffff);
256
+ .persona-text-persona-call-to-action {
257
+ color: var(--persona-call-to-action, #ffffff);
250
258
  }
251
259
 
252
- .tvw-text-cw-muted {
253
- color: var(--cw-muted, #6b7280);
260
+ .persona-text-persona-muted {
261
+ color: var(--persona-muted, #6b7280);
254
262
  }
255
263
 
256
- .tvw-text-white {
264
+ .persona-text-white {
257
265
  color: #ffffff;
258
266
  }
259
267
 
260
- .tvw-bg-cw-accent {
261
- background-color: var(--cw-accent, #2563eb);
268
+ .persona-bg-persona-accent {
269
+ background-color: var(--persona-accent, #2563eb);
262
270
  }
263
271
 
264
- .tvw-bg-cw-primary {
265
- background-color: var(--cw-primary, #111827);
272
+ .persona-bg-persona-primary {
273
+ background-color: var(--persona-primary, #111827);
266
274
  }
267
275
 
268
- .tvw-italic {
276
+ .persona-italic {
269
277
  font-style: italic;
270
278
  }
271
279
 
272
- .tvw-text-base {
280
+ .persona-text-base {
273
281
  font-size: 1rem;
274
282
  line-height: 1.5rem;
275
283
  }
276
284
 
277
- .tvw-text-sm {
285
+ .persona-text-sm {
278
286
  font-size: 0.875rem;
279
287
  line-height: 1.25rem;
280
288
  }
281
289
 
282
- .tvw-text-xs {
290
+ .persona-text-xs {
283
291
  font-size: 0.75rem;
284
292
  line-height: 1rem;
285
293
  }
286
294
 
287
- .tvw-text-xxs {
295
+ .persona-text-xxs {
288
296
  font-size: 0.5rem;
289
297
  line-height: 1rem;
290
298
  }
291
299
 
292
- .tvw-text-lg {
300
+ .persona-text-lg {
293
301
  font-size: 1.125rem;
294
302
  line-height: 1.75rem;
295
303
  }
296
304
 
297
- .tvw-text-xl {
305
+ .persona-text-xl {
298
306
  font-size: 1.25rem;
299
307
  line-height: 1.75rem;
300
308
  }
301
309
 
302
- .tvw-font-semibold {
310
+ .persona-font-semibold {
303
311
  font-weight: 600;
304
312
  }
305
313
 
306
- .tvw-font-medium {
314
+ .persona-font-medium {
307
315
  font-weight: 500;
308
316
  }
309
317
 
310
- .tvw-font-mono {
318
+ .persona-font-mono {
311
319
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
312
320
  }
313
321
 
314
- .tvw-text-\[11px\] {
322
+ .persona-text-\[11px\] {
315
323
  font-size: 11px;
316
324
  }
317
325
 
318
- .tvw-text-center {
326
+ .persona-text-center {
319
327
  text-align: center;
320
328
  }
321
329
 
322
- .tvw-text-cw-secondary {
323
- color: var(--cw-secondary, #4b5563);
330
+ .persona-text-persona-secondary {
331
+ color: var(--persona-secondary, #4b5563);
324
332
  }
325
333
 
326
- .tvw-leading-none {
334
+ .persona-leading-none {
327
335
  line-height: 1;
328
336
  }
329
337
 
330
- .tvw-whitespace-nowrap {
338
+ .persona-whitespace-nowrap {
331
339
  white-space: nowrap;
332
340
  }
333
341
 
334
- .tvw-truncate {
342
+ .persona-truncate {
335
343
  overflow: hidden;
336
344
  text-overflow: ellipsis;
337
345
  white-space: nowrap;
338
346
  }
339
347
 
340
- .tvw-break-all {
348
+ .persona-break-all {
341
349
  word-break: break-all;
342
350
  }
343
351
 
344
- .tvw-px-4 {
352
+ .persona-px-4 {
345
353
  padding-left: 1rem;
346
354
  padding-right: 1rem;
347
355
  }
348
356
 
349
- .tvw-px-5 {
357
+ .persona-px-5 {
350
358
  padding-left: 1.25rem;
351
359
  padding-right: 1.25rem;
352
360
  }
353
361
 
354
- .tvw-px-6 {
362
+ .persona-px-6 {
355
363
  padding-left: 1.5rem;
356
364
  padding-right: 1.5rem;
357
365
  }
358
366
 
359
- .tvw-py-1\.5 {
367
+ .persona-py-1\.5 {
360
368
  padding-top: 0.375rem;
361
369
  padding-bottom: 0.375rem;
362
370
  }
363
371
 
364
- .tvw-py-3 {
372
+ .persona-py-3 {
365
373
  padding-top: 0.75rem;
366
374
  padding-bottom: 0.75rem;
367
375
  }
368
376
 
369
- .tvw-py-4 {
377
+ .persona-py-4 {
370
378
  padding-top: 1rem;
371
379
  padding-bottom: 1rem;
372
380
  }
373
381
 
374
- .tvw-py-5 {
382
+ .persona-py-5 {
375
383
  padding-top: 1.25rem;
376
384
  padding-bottom: 1.25rem;
377
385
  }
378
386
 
379
- .tvw-py-6 {
387
+ .persona-py-6 {
380
388
  padding-top: 1.5rem;
381
389
  padding-bottom: 1.5rem;
382
390
  }
383
391
 
384
- .tvw-py-2\.5 {
392
+ .persona-py-2\.5 {
385
393
  padding-top: 0.625rem;
386
394
  padding-bottom: 0.625rem;
387
395
  }
388
396
 
389
- .tvw-pr-3 {
397
+ .persona-pr-3 {
390
398
  padding-right: 0.75rem;
391
399
  }
392
400
 
393
- .tvw-pl-3 {
401
+ .persona-pl-3 {
394
402
  padding-left: 0.75rem;
395
403
  }
396
404
 
397
- .tvw-pl-7 {
405
+ .persona-pl-7 {
398
406
  padding-left: 1.75rem;
399
407
  }
400
408
 
401
- .tvw-pr-7 {
409
+ .persona-pr-7 {
402
410
  padding-right: 1.75rem;
403
411
  }
404
412
 
405
- .tvw-pl-8 {
413
+ .persona-pl-8 {
406
414
  padding-left: 2rem;
407
415
  }
408
416
 
409
- .tvw-pb-0 {
417
+ .persona-pb-0 {
410
418
  padding-bottom: 0;
411
419
  }
412
420
 
413
- .tvw-p-6 {
421
+ .persona-p-6 {
414
422
  padding: 1.5rem;
415
423
  }
416
424
 
417
- .tvw-p-0 {
425
+ .persona-p-0 {
418
426
  padding: 0;
419
427
  }
420
428
 
421
- .tvw-p-3 {
429
+ .persona-p-3 {
422
430
  padding: 0.75rem;
423
431
  }
424
432
 
425
- .tvw-px-2 {
433
+ .persona-px-2 {
426
434
  padding-left: 0.5rem;
427
435
  padding-right: 0.5rem;
428
436
  }
429
437
 
430
- .tvw-px-2\.5 {
438
+ .persona-px-2\.5 {
431
439
  padding-left: 0.625rem;
432
440
  padding-right: 0.625rem;
433
441
  }
434
442
 
435
- .tvw-px-3 {
443
+ .persona-px-3 {
436
444
  padding-left: 0.75rem;
437
445
  padding-right: 0.75rem;
438
446
  }
439
447
 
440
- .tvw-py-0\.5 {
448
+ .persona-py-0\.5 {
441
449
  padding-top: 0.125rem;
442
450
  padding-bottom: 0.125rem;
443
451
  }
444
452
 
445
- .tvw-py-1 {
453
+ .persona-py-1 {
446
454
  padding-top: 0.25rem;
447
455
  padding-bottom: 0.25rem;
448
456
  }
449
457
 
450
- .tvw-py-2 {
458
+ .persona-py-2 {
451
459
  padding-top: 0.5rem;
452
460
  padding-bottom: 0.5rem;
453
461
  }
454
462
 
455
- .tvw-mt-2 {
463
+ .persona-mt-2 {
456
464
  margin-top: 0.5rem;
457
465
  }
458
466
 
459
- .tvw-ml-auto {
467
+ .persona-ml-auto {
460
468
  margin-left: auto;
461
469
  }
462
470
 
463
- .tvw-m-0 {
471
+ .persona-m-0 {
464
472
  margin: 0;
465
473
  }
466
474
 
467
- .tvw-mb-1 {
475
+ .persona-mb-1 {
468
476
  margin-bottom: 0.25rem;
469
477
  }
470
478
 
471
- .tvw-ml-4 {
479
+ .persona-ml-4 {
472
480
  margin-left: 1rem;
473
481
  }
474
482
 
475
- .tvw-mr-3 {
483
+ .persona-mr-3 {
476
484
  margin-right: 0.75rem;
477
485
  }
478
486
 
479
- .tvw-text-right {
487
+ .persona-text-right {
480
488
  text-align: right;
481
489
  }
482
490
 
483
- .disabled\:tvw-opacity-50:disabled {
491
+ .disabled\:persona-opacity-50:disabled {
484
492
  opacity: 0.5;
485
493
  }
486
494
 
487
- .tvw-shadow-2xl {
495
+ .persona-shadow-2xl {
488
496
  box-shadow: 0 30px 60px -15px rgba(15, 23, 42, 0.35);
489
497
  }
490
498
 
491
- .tvw-shadow-sm {
499
+ .persona-shadow-sm {
492
500
  box-shadow: 0 5px 15px rgba(15, 23, 42, 0.08);
493
501
  }
494
502
 
495
- .tvw-shadow-md {
503
+ .persona-shadow-md {
496
504
  box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1);
497
505
  }
498
506
 
499
- .tvw-shadow-lg {
507
+ .persona-shadow-lg {
500
508
  box-shadow: 0 20px 40px rgba(15, 23, 42, 0.18);
501
509
  }
502
510
 
503
- .tvw-border {
511
+ .persona-border {
504
512
  border-width: 1px;
505
513
  border-style: solid;
506
514
  border-color: rgba(148, 163, 184, 0.28);
507
515
  }
508
516
 
509
- .tvw-border-none {
517
+ .persona-border-none {
510
518
  border: none;
511
519
  }
512
520
 
513
- .tvw-border-b {
521
+ .persona-border-b {
514
522
  border-bottom-width: 1px;
515
523
  border-bottom-style: solid;
516
524
  border-bottom-color: rgba(148, 163, 184, 0.28);
517
525
  }
518
526
 
519
- .tvw-border-gray-100 {
527
+ .persona-border-gray-100 {
520
528
  border-color: #f1f5f9;
521
529
  }
522
530
 
523
- .tvw-border-cw-border {
524
- border-color: var(--cw-border, #f1f5f9);
531
+ .persona-border-persona-border {
532
+ border-color: var(--persona-border, #f1f5f9);
525
533
  }
526
534
 
527
- .tvw-border-t {
535
+ .persona-border-t {
528
536
  border-top-width: 1px;
529
537
  border-top-style: solid;
530
538
  border-top-color: rgba(148, 163, 184, 0.28);
531
539
  }
532
540
 
533
- .tvw-border-t-cw-border {
541
+ .persona-border-t-persona-border {
534
542
  border-top-width: 1px;
535
543
  border-top-style: solid;
536
- border-top-color: var(--cw-border, #f1f5f9);
544
+ border-top-color: var(--persona-border, #f1f5f9);
537
545
  }
538
546
 
539
- .tvw-border-b-cw-border {
547
+ .persona-border-b-persona-border {
540
548
  border-bottom-width: 1px;
541
549
  border-bottom-style: solid;
542
- border-bottom-color: var(--cw-border, #f1f5f9);
550
+ border-bottom-color: var(--persona-border, #f1f5f9);
543
551
  }
544
552
 
545
- .tvw-border-t-cw-divider {
553
+ .persona-border-t-persona-divider {
546
554
  border-top-width: 1px;
547
555
  border-top-style: solid;
548
- border-top-color: var(--cw-divider, #f1f5f9);
556
+ border-top-color: var(--persona-divider, #f1f5f9);
549
557
  }
550
558
 
551
- .tvw-border-b-cw-divider {
559
+ .persona-border-b-persona-divider {
552
560
  border-bottom-width: 1px;
553
561
  border-bottom-style: solid;
554
- border-bottom-color: var(--cw-divider, #f1f5f9);
562
+ border-bottom-color: var(--persona-divider, #f1f5f9);
555
563
  }
556
564
 
557
- .tvw-border-cw-divider {
558
- border-color: var(--cw-divider, #f1f5f9);
565
+ .persona-border-persona-divider {
566
+ border-color: var(--persona-divider, #f1f5f9);
559
567
  }
560
568
 
561
- .tvw-border-cw-message-border {
562
- border-color: var(--cw-message-border, #f1f5f9);
569
+ .persona-border-persona-message-border {
570
+ border-color: var(--persona-message-border, #f1f5f9);
563
571
  }
564
572
 
565
- .tvw-fixed {
573
+ .persona-fixed {
566
574
  position: fixed;
567
575
  }
568
576
 
569
- .tvw-bottom-6 {
577
+ .persona-bottom-6 {
570
578
  bottom: 1.5rem;
571
579
  }
572
580
 
573
- .tvw-top-6 {
581
+ .persona-top-6 {
574
582
  top: 1.5rem;
575
583
  }
576
584
 
577
- .tvw-right-6 {
585
+ .persona-right-6 {
578
586
  right: 1.5rem;
579
587
  }
580
588
 
581
- .tvw-left-6 {
589
+ .persona-left-6 {
582
590
  left: 1.5rem;
583
591
  }
584
592
 
585
- .tvw-top-1\/2 {
593
+ .persona-top-1\/2 {
586
594
  top: 50%;
587
595
  }
588
596
 
589
- .tvw-left-1\/2 {
597
+ .persona-left-1\/2 {
590
598
  left: 50%;
591
599
  }
592
600
 
593
- .tvw-bottom-3 {
601
+ .persona-bottom-3 {
594
602
  bottom: 0.75rem;
595
603
  }
596
604
 
597
- .tvw-right-5 {
605
+ .persona-right-5 {
598
606
  right: 1.25rem;
599
607
  }
600
608
 
601
- .tvw-place-items-center {
609
+ .persona-place-items-center {
602
610
  place-items: center;
603
611
  }
604
612
 
605
- .tvw-h-8 {
613
+ .persona-h-8 {
606
614
  height: 2rem;
607
615
  }
608
616
 
609
- .tvw-w-8 {
617
+ .persona-w-8 {
610
618
  width: 2rem;
611
619
  }
612
620
 
613
- .tvw-h-10 {
621
+ .persona-h-10 {
614
622
  height: 2.5rem;
615
623
  }
616
624
 
617
- .tvw-w-10 {
625
+ .persona-w-10 {
618
626
  width: 2.5rem;
619
627
  }
620
628
 
621
- .tvw-h-12 {
629
+ .persona-h-12 {
622
630
  height: 3rem;
623
631
  }
624
632
 
625
- .tvw-w-12 {
633
+ .persona-w-12 {
626
634
  width: 3rem;
627
635
  }
628
636
 
629
- .tvw-leading-relaxed {
637
+ .persona-leading-relaxed {
630
638
  line-height: 1.75;
631
639
  }
632
640
 
633
- .tvw-max-w-\[85\%\] {
641
+ .persona-max-w-\[85\%\] {
634
642
  max-width: 85%;
635
643
  }
636
644
 
637
- .tvw-transition {
645
+ .persona-transition {
638
646
  transition: transform 160ms ease, background-color 160ms ease,
639
647
  box-shadow 160ms ease, opacity 160ms ease;
640
648
  }
641
649
 
642
- .tvw-translate-y-\[-2px\] {
650
+ .persona-translate-y-\[-2px\] {
643
651
  transform: translateY(-2px);
644
652
  }
645
653
 
646
- .tvw-transform {
654
+ .persona-transform {
647
655
  /* Enables transform context */
648
656
  }
649
657
 
650
- .tvw--translate-x-1\/2 {
658
+ .persona--translate-x-1\/2 {
651
659
  transform: translateX(-50%);
652
660
  }
653
661
 
654
- .tvw--translate-y-1\/2 {
662
+ .persona--translate-y-1\/2 {
655
663
  transform: translateY(-50%);
656
664
  }
657
665
 
658
- .tvw-opacity-0 {
666
+ .persona-opacity-0 {
659
667
  opacity: 0;
660
668
  }
661
669
 
662
- .tvw-opacity-100 {
670
+ .persona-opacity-100 {
663
671
  opacity: 1;
664
672
  }
665
673
 
666
- .tvw-scale-100 {
674
+ .persona-scale-100 {
667
675
  transform: scale(1);
668
676
  }
669
677
 
670
- .tvw-scale-95 {
678
+ .persona-scale-95 {
671
679
  transform: scale(0.95);
672
680
  }
673
681
 
674
- .tvw-bg-\[\#f8fafc\] {
682
+ .persona-bg-\[\#f8fafc\] {
675
683
  background-color: #f8fafc;
676
684
  }
677
685
 
678
- .tvw-flex-shrink-0 {
686
+ .persona-flex-shrink-0 {
679
687
  flex-shrink: 0;
680
688
  }
681
689
 
682
- .tvw-min-w-0 {
690
+ .persona-min-w-0 {
683
691
  min-width: 0;
684
692
  }
685
693
 
686
- .tvw-w-4 {
694
+ .persona-w-4 {
687
695
  width: 1rem;
688
696
  }
689
697
 
690
- .tvw-w-\[28px\] {
698
+ .persona-w-\[28px\] {
691
699
  width: 28px;
692
700
  }
693
701
 
694
- .tvw-w-\[70px\] {
702
+ .persona-w-\[70px\] {
695
703
  width: 70px;
696
704
  }
697
705
 
698
- .tvw-flex-1 {
706
+ .persona-flex-1 {
699
707
  flex: 1 1 0%;
700
708
  }
701
709
 
702
- .tvw-gap-3 {
710
+ .persona-gap-3 {
703
711
  gap: 0.75rem;
704
712
  }
705
713
 
706
- .tvw-bg {
707
- background-color: var(--cw-surface, #ffffff);
714
+ .persona-bg {
715
+ background-color: var(--persona-surface, #ffffff);
708
716
  }
709
717
 
710
- .tvw-inline-flex {
718
+ .persona-inline-flex {
711
719
  display: inline-flex;
712
720
  }
713
721
 
714
- .tvw-text-left {
722
+ .persona-text-left {
715
723
  text-align: left;
716
724
  }
717
725
 
718
- .tvw-text-right {
726
+ .persona-text-right {
719
727
  text-align: right;
720
728
  }
721
729
 
722
- .tvw-mb-3 {
730
+ .persona-mb-3 {
723
731
  margin-bottom: 0.75rem;
724
732
  }
725
733
 
726
- .tvw-mt-2 {
734
+ .persona-mt-2 {
727
735
  margin-top: 0.5rem;
728
736
  }
729
737
 
730
- .tvw-h-12,
731
- .tvw-w-12,
732
- .tvw-h-10,
733
- .tvw-w-10,
734
- .tvw-h-8,
735
- .tvw-w-8 {
738
+ .persona-h-12,
739
+ .persona-w-12,
740
+ .persona-h-10,
741
+ .persona-w-10,
742
+ .persona-h-8,
743
+ .persona-w-8 {
736
744
  flex: none;
737
745
  }
738
746
 
739
- .tvw-text-right {
747
+ .persona-text-right {
740
748
  text-align: right;
741
749
  }
742
750
 
743
- .hover\:tvw-bg-gray-200:hover {
751
+ .hover\:persona-bg-gray-200:hover {
744
752
  background-color: #e5e7eb;
745
753
  }
746
754
 
747
- .hover\:tvw-bg-cw-container:hover {
748
- background-color: var(--cw-container, #f8fafc);
755
+ .hover\:persona-bg-persona-container:hover {
756
+ background-color: var(--persona-container, #f8fafc);
749
757
  }
750
758
 
751
- .hover\:tvw-text-cw-primary:hover {
752
- color: var(--cw-primary, #111827);
759
+ .hover\:persona-text-persona-primary:hover {
760
+ color: var(--persona-primary, #111827);
753
761
  }
754
762
 
755
- .hover\:tvw-translate-y-\[-2px\]:hover {
763
+ .hover\:persona-translate-y-\[-2px\]:hover {
756
764
  transform: translateY(-2px);
757
765
  }
758
766
 
759
- .tvw-pointer-events-none {
767
+ .persona-pointer-events-none {
760
768
  pointer-events: none;
761
769
  }
762
770
 
763
- .tvw-pointer-events-auto {
771
+ .persona-pointer-events-auto {
764
772
  pointer-events: auto;
765
773
  }
766
774
 
767
- .tvw-min-h-\[1\.5rem\] {
775
+ .persona-min-h-\[1\.5rem\] {
768
776
  min-height: 1.5rem;
769
777
  }
770
778
 
771
- .tvw-min-h-0 {
779
+ .persona-min-h-0 {
772
780
  min-height: 0;
773
781
  }
774
782
 
775
- .tvw-resize-none {
783
+ .persona-resize-none {
776
784
  resize: none;
777
785
  }
778
786
 
779
- .tvw-z-10 {
787
+ .persona-z-10 {
780
788
  z-index: 10;
781
789
  }
782
790
 
783
- .tvw-z-50 {
791
+ .persona-z-50 {
784
792
  z-index: 50;
785
793
  }
786
794
 
787
- .tvw-absolute {
795
+ .persona-absolute {
788
796
  position: absolute;
789
797
  }
790
798
 
791
- .tvw-right-4 {
799
+ .persona-right-4 {
792
800
  right: 1rem;
793
801
  }
794
802
 
795
- .tvw-top-4 {
803
+ .persona-top-4 {
796
804
  top: 1rem;
797
805
  }
798
806
 
799
- .tvw-text-2xl {
807
+ .persona-text-2xl {
800
808
  font-size: 1.5rem;
801
809
  line-height: 2rem;
802
810
  }
803
811
 
804
- .tvw-grid {
812
+ .persona-grid {
805
813
  display: grid;
806
814
  }
807
815
 
808
- .tvw-place-items-center {
816
+ .persona-place-items-center {
809
817
  place-items: center;
810
818
  }
811
819
 
812
- .tvw-relative {
820
+ .persona-relative {
813
821
  position: relative;
814
822
  }
815
823
 
816
- .tvw-overflow-y-auto {
824
+ .persona-overflow-y-auto {
817
825
  overflow-y: auto;
818
826
  }
819
827
 
820
- .tvw-overflow-hidden {
828
+ .persona-overflow-hidden {
821
829
  overflow: hidden;
822
830
  }
823
831
 
824
- .tvw-min-h-\[320px\] {
832
+ .persona-min-h-\[320px\] {
825
833
  min-height: 320px;
826
834
  }
827
835
 
828
- .tvw-min-h-\[48px\] {
836
+ .persona-min-h-\[48px\] {
829
837
  min-height: 48px;
830
838
  }
831
839
 
832
- .tvw-min-w-\[320px\] {
840
+ .persona-min-w-\[320px\] {
833
841
  min-width: 320px;
834
842
  }
835
843
 
836
- .tvw-max-w-\[420px\] {
844
+ .persona-max-w-\[420px\] {
837
845
  max-width: 420px;
838
846
  }
839
847
 
840
- .tvw-w-\[360px\] {
848
+ .persona-w-\[360px\] {
841
849
  width: 360px;
842
850
  }
843
851
 
844
- .tvw-w-\[400px\] {
852
+ .persona-w-\[400px\] {
845
853
  width: 400px;
846
854
  }
847
855
 
848
- .tvw-h-\[640px\] {
856
+ .persona-h-\[640px\] {
849
857
  height: 640px;
850
858
  }
851
859
 
852
- .tvw-border-transparent {
860
+ .persona-border-transparent {
853
861
  border-color: transparent;
854
862
  }
855
863
 
856
- .tvw-outline-none:focus {
864
+ .persona-outline-none:focus {
857
865
  outline: none;
858
866
  }
859
867
 
860
- .tvw-border-none:focus {
868
+ .persona-border-none:focus {
861
869
  border: none !important;
862
870
  outline: none !important;
863
871
  }
864
872
 
865
873
  /* Ensure textarea in composer form has no border on focus */
866
- .tvw-widget-composer textarea:focus {
874
+ .persona-widget-composer textarea:focus {
867
875
  border: none !important;
868
876
  outline: none !important;
869
877
  border-width: 0 !important;
@@ -874,76 +882,84 @@
874
882
 
875
883
  /* Prevent iOS Safari from zooming on input focus (requires 16px minimum) */
876
884
  @media (hover: none) and (pointer: coarse) {
877
- .tvw-composer-textarea {
885
+ .persona-composer-textarea {
878
886
  font-size: 1rem !important;
879
887
  }
880
888
  }
881
889
 
882
890
  /* Prevent form container from showing focus styles */
883
- .tvw-widget-composer:focus-within {
891
+ .persona-widget-composer:focus-within {
884
892
  outline: none !important;
885
893
  }
886
894
 
887
- .tvw-widget-composer:focus-within textarea {
895
+ .persona-widget-composer:focus-within textarea {
888
896
  border: none !important;
889
897
  outline: none !important;
890
898
  }
891
899
 
892
- .tvw-whitespace-pre-wrap {
900
+ .persona-whitespace-pre-wrap {
893
901
  white-space: pre-wrap;
894
902
  }
895
903
 
896
- .tvw-space-y-1 > * + * {
904
+ .persona-space-y-1 > * + * {
897
905
  margin-top: 0.25rem;
898
906
  }
899
907
 
900
- .tvw-space-y-3 > * + * {
908
+ .persona-space-y-3 > * + * {
901
909
  margin-top: 0.75rem;
902
910
  }
903
911
 
904
- .tvw-space-y-4 > * + * {
912
+ .persona-space-y-4 > * + * {
905
913
  margin-top: 1rem;
906
914
  }
907
915
 
908
- .tvw-form-card {
909
- background-color: var(--cw-surface, #ffffff);
916
+ .persona-form-card {
917
+ background-color: var(--persona-surface, #ffffff);
910
918
  border: 1px solid rgba(148, 163, 184, 0.28);
911
- border-radius: var(--cw-radius-md);
919
+ border-radius: var(--persona-radius-md, 0.375rem);
912
920
  padding: 1.25rem;
913
921
  box-shadow: 0 10px 30px rgba(15, 23, 42, 0.12);
914
922
  }
915
923
 
916
- .tvw-form-grid {
924
+ .persona-widget-container {
925
+ border-radius: var(--persona-panel-radius, var(--persona-radius-xl, 0.75rem));
926
+ }
927
+
928
+ .persona-widget-composer {
929
+ border-radius: var(--persona-input-radius, var(--persona-radius-lg, 0.5rem));
930
+ }
931
+
932
+ .persona-form-grid {
917
933
  display: flex;
918
934
  flex-direction: column;
919
935
  }
920
936
 
921
- .tvw-form-field {
937
+ .persona-form-field {
922
938
  display: flex;
923
939
  flex-direction: column;
924
940
  }
925
941
 
926
- .tvw-cursor-pointer {
942
+ .persona-cursor-pointer {
927
943
  cursor: pointer;
928
944
  }
929
945
 
930
946
  /* Send button tooltip */
931
- .tvw-send-button-wrapper {
947
+ .persona-send-button-wrapper {
932
948
  position: relative;
933
949
  display: inline-flex;
934
950
  align-items: center;
935
951
  justify-content: center;
936
952
  }
937
953
 
938
- .tvw-send-button-tooltip {
954
+ .persona-send-button-tooltip {
939
955
  position: absolute;
940
956
  bottom: calc(100% + 8px);
941
957
  left: 50%;
942
958
  transform: translateX(-50%);
943
- background-color: var(--cw-tooltip-background, #111827);
944
- color: var(--cw-tooltip-foreground, #ffffff);
959
+ background-color: var(--persona-tooltip-background, #111827);
960
+ color: var(--persona-tooltip-foreground, #ffffff);
945
961
  padding: 6px 12px;
946
- border-radius: var(--cw-radius-sm, 0.75rem);
962
+ border-radius: var(--persona-radius-sm, 0.125rem);
947
963
  font-size: 12px;
948
964
  white-space: nowrap;
949
965
  opacity: 0;
@@ -952,52 +968,66 @@
952
968
  z-index: 1000;
953
969
  }
954
970
 
955
- .tvw-send-button-tooltip::after {
971
+ .persona-send-button-tooltip::after {
956
972
  content: "";
957
973
  position: absolute;
958
974
  top: 100%;
959
975
  left: 50%;
960
976
  transform: translateX(-50%);
961
977
  border: 4px solid transparent;
962
- border-top-color: var(--cw-tooltip-background, #111827);
978
+ border-top-color: var(--persona-tooltip-background, #111827);
963
979
  }
964
980
 
965
- .tvw-send-button-wrapper:hover .tvw-send-button-tooltip,
966
- .tvw-send-button-wrapper:focus-within .tvw-send-button-tooltip {
981
+ .persona-send-button-wrapper:hover .persona-send-button-tooltip,
982
+ .persona-send-button-wrapper:focus-within .persona-send-button-tooltip {
967
983
  opacity: 1;
968
984
  }
969
985
 
986
+ /* Hide tooltips on touch devices — hover doesn't exist, and they cause clipping issues */
987
+ @media (hover: none), (max-width: 500px) {
988
+ .persona-send-button-wrapper:hover .persona-send-button-tooltip,
989
+ .persona-send-button-wrapper:focus-within .persona-send-button-tooltip {
990
+ opacity: 0;
991
+ }
992
+ }
993
+
970
994
  /* Clear chat button tooltip */
971
- .tvw-clear-chat-button-wrapper {
995
+ .persona-clear-chat-button-wrapper {
972
996
  position: relative;
973
997
  display: inline-flex;
974
998
  align-items: center;
975
999
  justify-content: center;
976
1000
  }
977
1001
 
978
- .tvw-clear-chat-tooltip {
979
- background-color: var(--cw-tooltip-background, #111827);
980
- color: var(--cw-tooltip-foreground, #ffffff);
1002
+ .persona-clear-chat-tooltip {
1003
+ background-color: var(--persona-tooltip-background, #111827);
1004
+ color: var(--persona-tooltip-foreground, #ffffff);
981
1005
  padding: 6px 12px;
982
- border-radius: 0.5rem;
1006
+ border-radius: var(--persona-radius-sm, 0.125rem);
983
1007
  font-size: 12px;
984
1008
  white-space: nowrap;
985
1009
  pointer-events: none;
986
1010
  z-index: 10000;
987
1011
  }
988
1012
 
989
- .tvw-clear-chat-tooltip-arrow {
1013
+ .persona-clear-chat-tooltip-arrow {
990
1014
  content: "";
991
1015
  position: absolute;
992
1016
  top: 100%;
993
1017
  left: 50%;
994
1018
  transform: translateX(-50%);
995
1019
  border: 4px solid transparent;
996
- border-top-color: var(--cw-tooltip-background, #111827);
1020
+ border-top-color: var(--persona-tooltip-background, #111827);
1021
+ }
1022
+
1023
+ @media (hover: none), (max-width: 500px) {
1024
+ .persona-clear-chat-tooltip {
1025
+ display: none !important;
1026
+ }
997
1027
  }
998
1028
 
999
1029
  /* Typing indicator animation */
1000
- @keyframes tvw-typing {
1030
+ @keyframes persona-typing {
1001
1031
  0%, 100% {
1002
1032
  opacity: 0.5;
1003
1033
  transform: translateY(0);
@@ -1008,27 +1038,27 @@
1008
1038
  }
1009
1039
  }
1010
1040
 
1011
- .tvw-animate-typing {
1012
- animation: tvw-typing 1s infinite;
1041
+ .persona-animate-typing {
1042
+ animation: persona-typing 1s infinite;
1013
1043
  }
1014
1044
 
1015
- .tvw-space-x-1 > * + * {
1045
+ .persona-space-x-1 > * + * {
1016
1046
  margin-left: 0.25rem;
1017
1047
  }
1018
1048
 
1019
- .tvw-h-5 {
1049
+ .persona-h-5 {
1020
1050
  height: 1.25rem;
1021
1051
  }
1022
1052
 
1023
- .tvw-h-1\.5 {
1053
+ .persona-h-1\.5 {
1024
1054
  height: 0.375rem;
1025
1055
  }
1026
1056
 
1027
- .tvw-w-1\.5 {
1057
+ .persona-w-1\.5 {
1028
1058
  width: 0.375rem;
1029
1059
  }
1030
1060
 
1031
- .tvw-sr-only {
1061
+ .persona-sr-only {
1032
1062
  position: absolute;
1033
1063
  width: 1px;
1034
1064
  height: 1px;
@@ -1041,7 +1071,7 @@
1041
1071
  }
1042
1072
 
1043
1073
  /* Voice recognition recording animation */
1044
- @keyframes tvw-voice-recording-pulse {
1074
+ @keyframes persona-voice-recording-pulse {
1045
1075
  0%, 100% {
1046
1076
  opacity: 1;
1047
1077
  transform: scale(1);
@@ -1052,36 +1082,36 @@
1052
1082
  }
1053
1083
  }
1054
1084
 
1055
- .tvw-voice-recording {
1056
- animation: tvw-voice-recording-pulse 1.5s ease-in-out infinite;
1085
+ .persona-voice-recording {
1086
+ animation: persona-voice-recording-pulse 1.5s ease-in-out infinite;
1057
1087
  }
1058
1088
 
1059
- .tvw-voice-recording svg {
1060
- animation: tvw-voice-recording-pulse 1.5s ease-in-out infinite;
1089
+ .persona-voice-recording svg {
1090
+ animation: persona-voice-recording-pulse 1.5s ease-in-out infinite;
1061
1091
  }
1062
1092
 
1063
1093
  /* Voice processing animation (spinner) */
1064
- @keyframes tvw-voice-processing-spin {
1094
+ @keyframes persona-voice-processing-spin {
1065
1095
  from { transform: rotate(0deg); }
1066
1096
  to { transform: rotate(360deg); }
1067
1097
  }
1068
1098
 
1069
- .tvw-voice-processing svg {
1070
- animation: tvw-voice-processing-spin 1.2s linear infinite;
1099
+ .persona-voice-processing svg {
1100
+ animation: persona-voice-processing-spin 1.2s linear infinite;
1071
1101
  }
1072
1102
 
1073
1103
  /* Voice speaking animation (gentle pulse — slower/subtler than recording) */
1074
- @keyframes tvw-voice-speaking-pulse {
1104
+ @keyframes persona-voice-speaking-pulse {
1075
1105
  0%, 100% { opacity: 1; transform: scale(1); }
1076
1106
  50% { opacity: 0.85; transform: scale(1.03); }
1077
1107
  }
1078
1108
 
1079
- .tvw-voice-speaking {
1080
- animation: tvw-voice-speaking-pulse 2s ease-in-out infinite;
1109
+ .persona-voice-speaking {
1110
+ animation: persona-voice-speaking-pulse 2s ease-in-out infinite;
1081
1111
  }
1082
1112
 
1083
- .tvw-voice-speaking svg {
1084
- animation: tvw-voice-speaking-pulse 2s ease-in-out infinite;
1113
+ .persona-voice-speaking svg {
1114
+ animation: persona-voice-speaking-pulse 2s ease-in-out infinite;
1085
1115
  }
1086
1116
 
1087
1117
  /* Markdown content overflow handling */
@@ -1091,14 +1121,14 @@
1091
1121
  word-wrap: break-word;
1092
1122
  word-break: break-word;
1093
1123
  white-space: pre-wrap;
1094
- background-color: var(--cw-md-code-block-bg);
1095
- color: var(--cw-md-code-block-text-color);
1096
- padding: var(--cw-md-code-block-padding);
1097
- border-radius: var(--cw-md-code-block-border-radius);
1124
+ background-color: var(--persona-md-code-block-bg);
1125
+ color: var(--persona-md-code-block-text-color);
1126
+ padding: var(--persona-md-code-block-padding);
1127
+ border-radius: var(--persona-md-code-block-border-radius);
1098
1128
  margin: 0.5rem 0;
1099
- font-size: var(--cw-md-code-block-font-size);
1129
+ font-size: var(--persona-md-code-block-font-size);
1100
1130
  line-height: 1.5;
1101
- border: 1px solid var(--cw-md-code-block-border-color);
1131
+ border: 1px solid var(--persona-md-code-block-border-color);
1102
1132
  }
1103
1133
 
1104
1134
  .vanilla-message-bubble code {
@@ -1122,7 +1152,56 @@
1122
1152
  height: auto;
1123
1153
  display: block;
1124
1154
  margin: 0.5rem 0;
1125
- border-radius: 0.375rem;
1155
+ border-radius: var(--persona-radius-md, 0.375rem);
1156
+ }
1157
+
1158
+ .vanilla-message-user-bubble {
1159
+ border-radius: var(--persona-message-user-radius, var(--persona-radius-lg, 0.5rem));
1160
+ }
1161
+
1162
+ .vanilla-message-assistant-bubble {
1163
+ border-radius: var(--persona-message-assistant-radius, var(--persona-radius-lg, 0.5rem));
1164
+ border-color: var(--persona-message-assistant-border, var(--persona-border, #e5e7eb));
1165
+ }
1166
+
1167
+ #persona-root .vanilla-message-assistant-bubble.persona-shadow-sm {
1168
+ box-shadow: var(--persona-message-assistant-shadow, 0 1px 2px 0 rgb(0 0 0 / 0.05));
1169
+ }
1170
+
1171
+ /* Artifact markdown (no .vanilla-message-bubble wrapper) */
1172
+ #persona-root .persona-markdown-bubble {
1173
+ color: var(--persona-text, #111827);
1174
+ font-family: var(--persona-md-prose-font-family, inherit);
1175
+ }
1176
+
1177
+ #persona-root .persona-markdown-bubble p {
1178
+ margin: 0 0 1.5em;
1179
+ }
1180
+
1181
+ #persona-root .persona-markdown-bubble p:last-child {
1182
+ margin-bottom: 0;
1183
+ }
1184
+
1185
+ #persona-root .persona-markdown-bubble code:not(pre code) {
1186
+ background-color: var(--persona-md-inline-code-bg);
1187
+ color: var(--persona-md-inline-code-color, inherit);
1188
+ padding: var(--persona-md-inline-code-padding);
1189
+ border-radius: var(--persona-md-inline-code-border-radius);
1190
+ font-size: var(--persona-md-inline-code-font-size);
1191
+ }
1192
+
1193
+ #persona-root .persona-markdown-bubble a {
1194
+ color: var(--persona-md-link-color, var(--persona-accent, #3b82f6));
1195
+ text-decoration: underline;
1196
+ }
1197
+
1198
+ #persona-root .persona-markdown-bubble pre {
1199
+ background-color: var(--persona-md-code-block-bg);
1200
+ border: 1px solid var(--persona-md-code-block-border-color);
1201
+ border-radius: var(--persona-radius-md, 0.375rem);
1202
+ padding: 0.75rem 1rem;
1203
+ overflow-x: auto;
1204
+ font-size: 0.8125rem;
1126
1205
  }
1127
1206
 
1128
1207
  /* Ensure all links in chat bubbles have underlines */
@@ -1151,6 +1230,10 @@
1151
1230
  text-decoration: underline;
1152
1231
  }
1153
1232
 
1233
+ #persona-root .vanilla-message-assistant-bubble a {
1234
+ color: var(--persona-md-link-color, var(--persona-accent, #3b82f6));
1235
+ }
1236
+
1154
1237
  /* Markdown paragraph styles */
1155
1238
  .vanilla-message-bubble p {
1156
1239
  margin: 0;
@@ -1231,51 +1314,57 @@
1231
1314
  /* ============================================
1232
1315
  Markdown Header Styles
1233
1316
  ============================================ */
1234
- .vanilla-message-bubble h1 {
1235
- font-size: var(--cw-md-h1-size);
1236
- font-weight: var(--cw-md-h1-weight);
1237
- margin: var(--cw-md-h1-margin);
1238
- line-height: var(--cw-md-h1-line-height);
1317
+ .vanilla-message-bubble h1,
1318
+ #persona-root .persona-markdown-bubble h1 {
1319
+ font-size: var(--persona-md-h1-size);
1320
+ font-weight: var(--persona-md-h1-weight);
1321
+ margin: var(--persona-md-h1-margin);
1322
+ line-height: var(--persona-md-h1-line-height);
1239
1323
  color: inherit;
1240
1324
  }
1241
1325
 
1242
- .vanilla-message-bubble h2 {
1243
- font-size: var(--cw-md-h2-size);
1244
- font-weight: var(--cw-md-h2-weight);
1245
- margin: var(--cw-md-h2-margin);
1246
- line-height: var(--cw-md-h2-line-height);
1326
+ .vanilla-message-bubble h2,
1327
+ #persona-root .persona-markdown-bubble h2 {
1328
+ font-size: var(--persona-md-h2-size);
1329
+ font-weight: var(--persona-md-h2-weight);
1330
+ margin: var(--persona-md-h2-margin);
1331
+ line-height: var(--persona-md-h2-line-height);
1247
1332
  color: inherit;
1248
1333
  }
1249
1334
 
1250
- .vanilla-message-bubble h3 {
1251
- font-size: var(--cw-md-h3-size);
1252
- font-weight: var(--cw-md-h3-weight);
1253
- margin: var(--cw-md-h3-margin);
1254
- line-height: var(--cw-md-h3-line-height);
1335
+ .vanilla-message-bubble h3,
1336
+ #persona-root .persona-markdown-bubble h3 {
1337
+ font-size: var(--persona-md-h3-size);
1338
+ font-weight: var(--persona-md-h3-weight);
1339
+ margin: var(--persona-md-h3-margin);
1340
+ line-height: var(--persona-md-h3-line-height);
1255
1341
  color: inherit;
1256
1342
  }
1257
1343
 
1258
- .vanilla-message-bubble h4 {
1259
- font-size: var(--cw-md-h4-size);
1260
- font-weight: var(--cw-md-h4-weight);
1261
- margin: var(--cw-md-h4-margin);
1262
- line-height: var(--cw-md-h4-line-height);
1344
+ .vanilla-message-bubble h4,
1345
+ #persona-root .persona-markdown-bubble h4 {
1346
+ font-size: var(--persona-md-h4-size);
1347
+ font-weight: var(--persona-md-h4-weight);
1348
+ margin: var(--persona-md-h4-margin);
1349
+ line-height: var(--persona-md-h4-line-height);
1263
1350
  color: inherit;
1264
1351
  }
1265
1352
 
1266
- .vanilla-message-bubble h5 {
1267
- font-size: var(--cw-md-h5-size);
1268
- font-weight: var(--cw-md-h5-weight);
1269
- margin: var(--cw-md-h5-margin);
1270
- line-height: var(--cw-md-h5-line-height);
1353
+ .vanilla-message-bubble h5,
1354
+ #persona-root .persona-markdown-bubble h5 {
1355
+ font-size: var(--persona-md-h5-size);
1356
+ font-weight: var(--persona-md-h5-weight);
1357
+ margin: var(--persona-md-h5-margin);
1358
+ line-height: var(--persona-md-h5-line-height);
1271
1359
  color: inherit;
1272
1360
  }
1273
1361
 
1274
- .vanilla-message-bubble h6 {
1275
- font-size: var(--cw-md-h6-size);
1276
- font-weight: var(--cw-md-h6-weight);
1277
- margin: var(--cw-md-h6-margin);
1278
- line-height: var(--cw-md-h6-line-height);
1362
+ .vanilla-message-bubble h6,
1363
+ #persona-root .persona-markdown-bubble h6 {
1364
+ font-size: var(--persona-md-h6-size);
1365
+ font-weight: var(--persona-md-h6-weight);
1366
+ margin: var(--persona-md-h6-margin);
1367
+ line-height: var(--persona-md-h6-line-height);
1279
1368
  color: inherit;
1280
1369
  }
1281
1370
 
@@ -1298,24 +1387,24 @@
1298
1387
  margin: 0.5rem 0;
1299
1388
  font-size: 0.875rem;
1300
1389
  overflow: hidden;
1301
- border-radius: var(--cw-md-table-border-radius);
1302
- border: 1px solid var(--cw-md-table-border-color);
1390
+ border-radius: var(--persona-md-table-border-radius);
1391
+ border: 1px solid var(--persona-md-table-border-color);
1303
1392
  }
1304
1393
 
1305
1394
  .vanilla-message-bubble thead {
1306
- background-color: var(--cw-md-table-header-bg);
1395
+ background-color: var(--persona-md-table-header-bg);
1307
1396
  }
1308
1397
 
1309
1398
  .vanilla-message-bubble th {
1310
- font-weight: var(--cw-md-table-header-weight);
1399
+ font-weight: var(--persona-md-table-header-weight);
1311
1400
  text-align: left;
1312
- padding: var(--cw-md-table-cell-padding);
1313
- border-bottom: 1px solid var(--cw-md-table-border-color);
1401
+ padding: var(--persona-md-table-cell-padding);
1402
+ border-bottom: 1px solid var(--persona-md-table-border-color);
1314
1403
  }
1315
1404
 
1316
1405
  .vanilla-message-bubble td {
1317
- padding: var(--cw-md-table-cell-padding);
1318
- border-bottom: 1px solid var(--cw-md-table-border-color);
1406
+ padding: var(--persona-md-table-cell-padding);
1407
+ border-bottom: 1px solid var(--persona-md-table-border-color);
1319
1408
  text-align: left;
1320
1409
  }
1321
1410
 
@@ -1332,21 +1421,21 @@
1332
1421
  ============================================ */
1333
1422
  .vanilla-message-bubble hr {
1334
1423
  border: none;
1335
- height: var(--cw-md-hr-height);
1336
- background-color: var(--cw-md-hr-color);
1337
- margin: var(--cw-md-hr-margin);
1424
+ height: var(--persona-md-hr-height);
1425
+ background-color: var(--persona-md-hr-color);
1426
+ margin: var(--persona-md-hr-margin);
1338
1427
  }
1339
1428
 
1340
1429
  /* ============================================
1341
1430
  Markdown Blockquote Styles
1342
1431
  ============================================ */
1343
1432
  .vanilla-message-bubble blockquote {
1344
- border-left: var(--cw-md-blockquote-border-width) solid var(--cw-md-blockquote-border-color);
1345
- padding: var(--cw-md-blockquote-padding);
1346
- margin: var(--cw-md-blockquote-margin);
1347
- background-color: var(--cw-md-blockquote-bg);
1348
- color: var(--cw-md-blockquote-text-color);
1349
- font-style: var(--cw-md-blockquote-font-style);
1433
+ border-left: var(--persona-md-blockquote-border-width) solid var(--persona-md-blockquote-border-color);
1434
+ padding: var(--persona-md-blockquote-padding);
1435
+ margin: var(--persona-md-blockquote-margin);
1436
+ background-color: var(--persona-md-blockquote-bg);
1437
+ color: var(--persona-md-blockquote-text-color);
1438
+ font-style: var(--persona-md-blockquote-font-style);
1350
1439
  }
1351
1440
 
1352
1441
  .vanilla-message-bubble blockquote p {
@@ -1366,10 +1455,11 @@
1366
1455
  Markdown Inline Code Styles (not in pre)
1367
1456
  ============================================ */
1368
1457
  .vanilla-message-bubble code:not(pre code) {
1369
- background-color: var(--cw-md-inline-code-bg);
1370
- padding: var(--cw-md-inline-code-padding);
1371
- border-radius: var(--cw-md-inline-code-border-radius);
1372
- font-size: var(--cw-md-inline-code-font-size);
1458
+ background-color: var(--persona-md-inline-code-bg);
1459
+ color: var(--persona-md-inline-code-color, inherit);
1460
+ padding: var(--persona-md-inline-code-padding);
1461
+ border-radius: var(--persona-md-inline-code-border-radius);
1462
+ font-size: var(--persona-md-inline-code-font-size);
1373
1463
  }
1374
1464
 
1375
1465
  /* ============================================
@@ -1377,12 +1467,12 @@
1377
1467
  ============================================ */
1378
1468
  .vanilla-message-bubble strong,
1379
1469
  .vanilla-message-bubble b {
1380
- font-weight: var(--cw-md-strong-weight);
1470
+ font-weight: var(--persona-md-strong-weight);
1381
1471
  }
1382
1472
 
1383
1473
  .vanilla-message-bubble em,
1384
1474
  .vanilla-message-bubble i {
1385
- font-style: var(--cw-md-em-style);
1475
+ font-style: var(--persona-md-em-style);
1386
1476
  }
1387
1477
 
1388
1478
  /* ============================================
@@ -1439,7 +1529,7 @@
1439
1529
  }
1440
1530
 
1441
1531
  /* Fade-in animation for action buttons */
1442
- @keyframes tvw-message-actions-fade-in {
1532
+ @keyframes persona-message-actions-fade-in {
1443
1533
  from {
1444
1534
  opacity: 0;
1445
1535
  }
@@ -1449,37 +1539,74 @@
1449
1539
  }
1450
1540
 
1451
1541
  /* Base action bar styles */
1452
- .tvw-message-actions {
1542
+ .persona-message-actions {
1453
1543
  display: flex;
1454
1544
  align-items: center;
1455
1545
  gap: 0.25rem;
1456
1546
  margin-top: 0.5rem;
1457
1547
  padding-top: 0.5rem;
1458
- border-top: 1px solid var(--cw-divider, #f1f5f9);
1548
+ border-top: 1px solid var(--persona-divider, #f1f5f9);
1459
1549
  }
1460
1550
 
1461
1551
  /* Fade in animation only for "always" visibility mode (not hover) */
1462
1552
  /* forwards ensures final state is kept, idiomorph preserves element so animation only plays once */
1463
- .tvw-message-actions:not(.tvw-message-actions-hover) {
1464
- animation: tvw-message-actions-fade-in 0.3s ease-out forwards;
1553
+ .persona-message-actions:not(.persona-message-actions-hover) {
1554
+ animation: persona-message-actions-fade-in 0.3s ease-out forwards;
1465
1555
  }
1466
1556
 
1467
1557
  /* Action bar alignment */
1468
- .tvw-message-actions-left {
1558
+ .persona-message-actions-left {
1469
1559
  justify-content: flex-start;
1470
1560
  }
1471
1561
 
1472
- .tvw-message-actions-center {
1562
+ .persona-message-actions-center {
1473
1563
  justify-content: center;
1474
1564
  }
1475
1565
 
1476
- .tvw-message-actions-right {
1566
+ .persona-message-actions-right {
1477
1567
  justify-content: flex-end;
1478
1568
  }
1479
1569
 
1570
+ /* Always-visible mode: pill and row layouts (when not using hover overlay) */
1571
+ .persona-message-actions:not(.persona-message-actions-hover).persona-message-actions-pill {
1572
+ width: fit-content;
1573
+ margin-top: 0.5rem;
1574
+ padding: 0.25rem 0.5rem;
1575
+ border-top: none;
1576
+ border-radius: var(--persona-radius-md, 0.75rem);
1577
+ background-color: var(--persona-surface, #ffffff);
1578
+ border: 1px solid var(--persona-divider, #f1f5f9);
1579
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);
1580
+ }
1581
+
1582
+ /* Pill alignment in always-visible mode (block flow: use margin to position) */
1583
+ .persona-message-actions:not(.persona-message-actions-hover).persona-message-actions-pill.persona-message-actions-right {
1584
+ margin-left: auto;
1585
+ }
1586
+
1587
+ .persona-message-actions:not(.persona-message-actions-hover).persona-message-actions-pill.persona-message-actions-center {
1588
+ margin-left: auto;
1589
+ margin-right: auto;
1590
+ }
1591
+
1592
+ .persona-message-actions:not(.persona-message-actions-hover).persona-message-actions-row {
1593
+ /* Extend to bubble edges (bubble uses persona-px-5 = 1.25rem) */
1594
+ margin-left: -1.25rem;
1595
+ margin-right: -1.25rem;
1596
+ margin-bottom: -0.75rem;
1597
+ padding: 0.5rem 1.25rem;
1598
+ border-radius: 0 0 var(--persona-radius-lg, 1.5rem) var(--persona-radius-lg);
1599
+ background: linear-gradient(
1600
+ to top,
1601
+ var(--persona-surface, #ffffff) 70%,
1602
+ transparent
1603
+ );
1604
+ border-top: 1px solid var(--persona-divider, #f1f5f9);
1605
+ }
1606
+
1480
1607
  /* Hover visibility mode - overlay on desktop */
1481
1608
  @media (hover: hover) {
1482
- .tvw-message-actions-hover {
1609
+ .persona-message-actions-hover {
1483
1610
  /* Hidden by default */
1484
1611
  opacity: 0;
1485
1612
  pointer-events: none;
@@ -1487,38 +1614,38 @@
1487
1614
  }
1488
1615
 
1489
1616
  /* Pill layout - compact floating pill */
1490
- .tvw-message-actions-hover.tvw-message-actions-pill {
1617
+ .persona-message-actions-hover.persona-message-actions-pill {
1491
1618
  position: absolute;
1492
1619
  bottom: 0.5rem;
1493
1620
  margin-top: 0;
1494
1621
  padding: 0.25rem;
1495
1622
  border-top: none;
1496
1623
  width: fit-content;
1497
- background-color: var(--cw-surface, #ffffff);
1498
- border: 1px solid var(--cw-divider, #f1f5f9);
1499
- border-radius: var(--cw-radius-md, 0.75rem);
1624
+ background-color: var(--persona-surface, #ffffff);
1625
+ border: 1px solid var(--persona-divider, #f1f5f9);
1626
+ border-radius: var(--persona-radius-md, 0.75rem);
1500
1627
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
1501
1628
  }
1502
1629
 
1503
1630
  /* Pill layout - position based on alignment */
1504
- .tvw-message-actions-hover.tvw-message-actions-pill.tvw-message-actions-left {
1631
+ .persona-message-actions-hover.persona-message-actions-pill.persona-message-actions-left {
1505
1632
  left: 0.75rem;
1506
1633
  right: auto;
1507
1634
  }
1508
1635
 
1509
- .tvw-message-actions-hover.tvw-message-actions-pill.tvw-message-actions-center {
1636
+ .persona-message-actions-hover.persona-message-actions-pill.persona-message-actions-center {
1510
1637
  left: 50%;
1511
1638
  right: auto;
1512
1639
  transform: translateX(-50%);
1513
1640
  }
1514
1641
 
1515
- .tvw-message-actions-hover.tvw-message-actions-pill.tvw-message-actions-right {
1642
+ .persona-message-actions-hover.persona-message-actions-pill.persona-message-actions-right {
1516
1643
  right: 0.75rem;
1517
1644
  left: auto;
1518
1645
  }
1519
1646
 
1520
1647
  /* Row layout - full-width bar at bottom */
1521
- .tvw-message-actions-hover.tvw-message-actions-row {
1648
+ .persona-message-actions-hover.persona-message-actions-row {
1522
1649
  position: absolute;
1523
1650
  bottom: 0;
1524
1651
  left: 0;
@@ -1528,14 +1655,14 @@
1528
1655
  border-top: none;
1529
1656
  background: linear-gradient(
1530
1657
  to top,
1531
- var(--cw-surface, #ffffff) 70%,
1658
+ var(--persona-surface, #ffffff) 70%,
1532
1659
  transparent
1533
1660
  );
1534
- border-radius: 0 0 var(--cw-radius-lg, 1.5rem) var(--cw-radius-lg, 1.5rem);
1661
+ border-radius: 0 0 var(--persona-radius-lg, 1.5rem) var(--persona-radius-lg, 1.5rem);
1535
1662
  }
1536
1663
 
1537
- .vanilla-message-bubble:hover .tvw-message-actions-hover,
1538
- .vanilla-message-bubble:focus-within .tvw-message-actions-hover {
1664
+ .vanilla-message-bubble:hover .persona-message-actions-hover,
1665
+ .vanilla-message-bubble:focus-within .persona-message-actions-hover {
1539
1666
  opacity: 1;
1540
1667
  pointer-events: auto;
1541
1668
  }
@@ -1543,7 +1670,7 @@
1543
1670
 
1544
1671
  /* On touch devices (no hover support), show inline and always visible */
1545
1672
  @media (hover: none) {
1546
- .tvw-message-actions-hover {
1673
+ .persona-message-actions-hover {
1547
1674
  /* Keep normal flow positioning on mobile */
1548
1675
  position: static;
1549
1676
  opacity: 1;
@@ -1551,7 +1678,7 @@
1551
1678
  }
1552
1679
 
1553
1680
  /* Action button base styles */
1554
- .tvw-message-action-btn {
1681
+ .persona-message-action-btn {
1555
1682
  display: inline-flex;
1556
1683
  align-items: center;
1557
1684
  justify-content: center;
@@ -1559,60 +1686,60 @@
1559
1686
  height: 28px;
1560
1687
  padding: 0;
1561
1688
  border: none;
1562
- border-radius: 6px;
1689
+ border-radius: var(--persona-radius-sm, 0.125rem);
1563
1690
  background-color: transparent;
1564
- color: var(--cw-muted, #6b7280);
1691
+ color: var(--persona-muted, #6b7280);
1565
1692
  cursor: pointer;
1566
1693
  transition: background-color 0.15s ease, color 0.15s ease, transform 0.1s ease;
1567
1694
  }
1568
1695
 
1569
- .tvw-message-action-btn:hover {
1570
- background-color: var(--cw-container, #f8fafc);
1571
- color: var(--cw-primary, #111827);
1696
+ .persona-message-action-btn:hover {
1697
+ background-color: var(--persona-container, #f8fafc);
1698
+ color: var(--persona-primary, #111827);
1572
1699
  }
1573
1700
 
1574
- .tvw-message-action-btn:active {
1701
+ .persona-message-action-btn:active {
1575
1702
  transform: scale(0.95);
1576
1703
  }
1577
1704
 
1578
- .tvw-message-action-btn:focus {
1705
+ .persona-message-action-btn:focus {
1579
1706
  outline: none;
1580
- box-shadow: 0 0 0 2px var(--cw-accent, #1d4ed8);
1707
+ box-shadow: 0 0 0 2px var(--persona-accent, #1d4ed8);
1581
1708
  }
1582
1709
 
1583
- .tvw-message-action-btn:focus:not(:focus-visible) {
1710
+ .persona-message-action-btn:focus:not(:focus-visible) {
1584
1711
  box-shadow: none;
1585
1712
  }
1586
1713
 
1587
- .tvw-message-action-btn:focus-visible {
1588
- box-shadow: 0 0 0 2px var(--cw-accent, #1d4ed8);
1714
+ .persona-message-action-btn:focus-visible {
1715
+ box-shadow: 0 0 0 2px var(--persona-accent, #1d4ed8);
1589
1716
  }
1590
1717
 
1591
1718
  /* Active state (voted) */
1592
- .tvw-message-action-btn.tvw-message-action-active {
1593
- background-color: var(--cw-accent, #1d4ed8);
1719
+ .persona-message-action-btn.persona-message-action-active {
1720
+ background-color: var(--persona-accent, #1d4ed8);
1594
1721
  color: #ffffff;
1595
1722
  }
1596
1723
 
1597
- .tvw-message-action-btn.tvw-message-action-active:hover {
1598
- background-color: var(--cw-accent, #1d4ed8);
1724
+ .persona-message-action-btn.persona-message-action-active:hover {
1725
+ background-color: var(--persona-accent, #1d4ed8);
1599
1726
  color: #ffffff;
1600
1727
  opacity: 0.9;
1601
1728
  }
1602
1729
 
1603
1730
  /* Success state (after copy) */
1604
- .tvw-message-action-btn.tvw-message-action-success {
1731
+ .persona-message-action-btn.persona-message-action-success {
1605
1732
  background-color: #10b981;
1606
1733
  color: #ffffff;
1607
1734
  }
1608
1735
 
1609
- .tvw-message-action-btn.tvw-message-action-success:hover {
1736
+ .persona-message-action-btn.persona-message-action-success:hover {
1610
1737
  background-color: #10b981;
1611
1738
  color: #ffffff;
1612
1739
  }
1613
1740
 
1614
1741
  /* Icon styling within buttons */
1615
- .tvw-message-action-btn svg {
1742
+ .persona-message-action-btn svg {
1616
1743
  width: 14px;
1617
1744
  height: 14px;
1618
1745
  flex-shrink: 0;
@@ -1622,18 +1749,18 @@
1622
1749
  * Feedback UI Components (CSAT/NPS)
1623
1750
  * ============================================================================ */
1624
1751
 
1625
- .tvw-feedback-container {
1626
- background: var(--cw-surface, #ffffff);
1627
- border: 1px solid var(--cw-border, #e5e7eb);
1628
- border-radius: var(--tvw-cw-radius-lg, 12px);
1752
+ .persona-feedback-container {
1753
+ background: var(--persona-surface, #ffffff);
1754
+ border: 1px solid var(--persona-border, #e5e7eb);
1755
+ border-radius: var(--persona-radius-lg, 0.5rem);
1629
1756
  box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
1630
1757
  padding: 1.25rem;
1631
1758
  max-width: 100%;
1632
1759
  margin: 0.75rem;
1633
- animation: tvw-feedback-fade-in 0.3s ease-out;
1760
+ animation: persona-feedback-fade-in 0.3s ease-out;
1634
1761
  }
1635
1762
 
1636
- @keyframes tvw-feedback-fade-in {
1763
+ @keyframes persona-feedback-fade-in {
1637
1764
  from {
1638
1765
  opacity: 0;
1639
1766
  transform: translateY(10px);
@@ -1644,83 +1771,83 @@
1644
1771
  }
1645
1772
  }
1646
1773
 
1647
- .tvw-feedback-content {
1774
+ .persona-feedback-content {
1648
1775
  display: flex;
1649
1776
  flex-direction: column;
1650
1777
  gap: 1rem;
1651
1778
  }
1652
1779
 
1653
- .tvw-feedback-header {
1780
+ .persona-feedback-header {
1654
1781
  text-align: center;
1655
1782
  }
1656
1783
 
1657
- .tvw-feedback-title {
1784
+ .persona-feedback-title {
1658
1785
  margin: 0 0 0.25rem 0;
1659
1786
  font-size: 1rem;
1660
1787
  font-weight: 600;
1661
- color: var(--cw-primary, #111827);
1788
+ color: var(--persona-primary, #111827);
1662
1789
  }
1663
1790
 
1664
- .tvw-feedback-subtitle {
1791
+ .persona-feedback-subtitle {
1665
1792
  margin: 0;
1666
1793
  font-size: 0.875rem;
1667
- color: var(--cw-muted, #6b7280);
1794
+ color: var(--persona-muted, #6b7280);
1668
1795
  }
1669
1796
 
1670
1797
  /* CSAT Star Rating */
1671
- .tvw-feedback-rating-csat {
1798
+ .persona-feedback-rating-csat {
1672
1799
  display: flex;
1673
1800
  justify-content: center;
1674
1801
  gap: 0.5rem;
1675
1802
  }
1676
1803
 
1677
- .tvw-feedback-star-btn {
1804
+ .persona-feedback-star-btn {
1678
1805
  background: transparent;
1679
1806
  border: none;
1680
1807
  cursor: pointer;
1681
1808
  padding: 0.25rem;
1682
- color: var(--cw-border, #d1d5db);
1809
+ color: var(--persona-border, #d1d5db);
1683
1810
  transition: color 0.2s ease, transform 0.15s ease;
1684
1811
  }
1685
1812
 
1686
- .tvw-feedback-star-btn:hover {
1813
+ .persona-feedback-star-btn:hover {
1687
1814
  transform: scale(1.15);
1688
1815
  }
1689
1816
 
1690
- .tvw-feedback-star-btn.selected {
1817
+ .persona-feedback-star-btn.selected {
1691
1818
  color: #fbbf24;
1692
1819
  }
1693
1820
 
1694
- .tvw-feedback-star-btn .tvw-feedback-star {
1821
+ .persona-feedback-star-btn .persona-feedback-star {
1695
1822
  width: 32px;
1696
1823
  height: 32px;
1697
1824
  }
1698
1825
 
1699
- .tvw-feedback-star-btn.selected .tvw-feedback-star {
1826
+ .persona-feedback-star-btn.selected .persona-feedback-star {
1700
1827
  fill: #fbbf24;
1701
1828
  }
1702
1829
 
1703
1830
  /* NPS Number Rating */
1704
- .tvw-feedback-rating-nps {
1831
+ .persona-feedback-rating-nps {
1705
1832
  display: flex;
1706
1833
  flex-direction: column;
1707
1834
  gap: 0.5rem;
1708
1835
  }
1709
1836
 
1710
- .tvw-feedback-labels {
1837
+ .persona-feedback-labels {
1711
1838
  display: flex;
1712
1839
  justify-content: space-between;
1713
1840
  font-size: 0.75rem;
1714
- color: var(--cw-muted, #6b7280);
1841
+ color: var(--persona-muted, #6b7280);
1715
1842
  }
1716
1843
 
1717
- .tvw-feedback-numbers {
1844
+ .persona-feedback-numbers {
1718
1845
  display: flex;
1719
1846
  gap: 0.25rem;
1720
1847
  justify-content: center;
1721
1848
  }
1722
1849
 
1723
- .tvw-feedback-number-btn {
1850
+ .persona-feedback-number-btn {
1724
1851
  width: 28px;
1725
1852
  height: 28px;
1726
1853
  display: flex;
@@ -1728,132 +1855,132 @@
1728
1855
  justify-content: center;
1729
1856
  font-size: 0.75rem;
1730
1857
  font-weight: 500;
1731
- border-radius: var(--tvw-cw-radius-sm, 6px);
1732
- border: 1px solid var(--cw-border, #e5e7eb);
1733
- background: var(--cw-surface, #ffffff);
1734
- color: var(--cw-primary, #111827);
1858
+ border-radius: var(--persona-radius-sm, 0.125rem);
1859
+ border: 1px solid var(--persona-border, #e5e7eb);
1860
+ background: var(--persona-surface, #ffffff);
1861
+ color: var(--persona-primary, #111827);
1735
1862
  cursor: pointer;
1736
1863
  transition: all 0.2s ease;
1737
1864
  }
1738
1865
 
1739
- .tvw-feedback-number-btn:hover {
1740
- border-color: var(--cw-accent, #1d4ed8);
1741
- background: var(--cw-container, #f3f4f6);
1866
+ .persona-feedback-number-btn:hover {
1867
+ border-color: var(--persona-accent, #1d4ed8);
1868
+ background: var(--persona-container, #f3f4f6);
1742
1869
  }
1743
1870
 
1744
- .tvw-feedback-number-btn.selected {
1871
+ .persona-feedback-number-btn.selected {
1745
1872
  color: #ffffff;
1746
1873
  }
1747
1874
 
1748
1875
  /* NPS Color coding */
1749
- .tvw-feedback-number-btn.tvw-feedback-detractor.selected {
1876
+ .persona-feedback-number-btn.persona-feedback-detractor.selected {
1750
1877
  background: #ef4444;
1751
1878
  border-color: #ef4444;
1752
1879
  }
1753
1880
 
1754
- .tvw-feedback-number-btn.tvw-feedback-passive.selected {
1881
+ .persona-feedback-number-btn.persona-feedback-passive.selected {
1755
1882
  background: #f59e0b;
1756
1883
  border-color: #f59e0b;
1757
1884
  }
1758
1885
 
1759
- .tvw-feedback-number-btn.tvw-feedback-promoter.selected {
1886
+ .persona-feedback-number-btn.persona-feedback-promoter.selected {
1760
1887
  background: #22c55e;
1761
1888
  border-color: #22c55e;
1762
1889
  }
1763
1890
 
1764
1891
  /* Comment textarea */
1765
- .tvw-feedback-comment-container {
1892
+ .persona-feedback-comment-container {
1766
1893
  width: 100%;
1767
1894
  }
1768
1895
 
1769
- .tvw-feedback-comment {
1896
+ .persona-feedback-comment {
1770
1897
  width: 100%;
1771
1898
  padding: 0.625rem;
1772
1899
  font-size: 0.875rem;
1773
1900
  font-family: inherit;
1774
- border: 1px solid var(--cw-border, #e5e7eb);
1775
- border-radius: var(--tvw-cw-radius-sm, 6px);
1776
- background: var(--cw-surface, #ffffff);
1777
- color: var(--cw-primary, #111827);
1901
+ border: 1px solid var(--persona-border, #e5e7eb);
1902
+ border-radius: var(--persona-radius-sm, 0.125rem);
1903
+ background: var(--persona-surface, #ffffff);
1904
+ color: var(--persona-primary, #111827);
1778
1905
  resize: vertical;
1779
1906
  box-sizing: border-box;
1780
1907
  }
1781
1908
 
1782
- .tvw-feedback-comment:focus {
1909
+ .persona-feedback-comment:focus {
1783
1910
  outline: none;
1784
- border-color: var(--cw-accent, #1d4ed8);
1911
+ border-color: var(--persona-accent, #1d4ed8);
1785
1912
  box-shadow: 0 0 0 2px rgba(29, 78, 216, 0.15);
1786
1913
  }
1787
1914
 
1788
- .tvw-feedback-comment::placeholder {
1789
- color: var(--cw-muted, #9ca3af);
1915
+ .persona-feedback-comment::placeholder {
1916
+ color: var(--persona-muted, #9ca3af);
1790
1917
  }
1791
1918
 
1792
1919
  /* Action buttons */
1793
- .tvw-feedback-actions {
1920
+ .persona-feedback-actions {
1794
1921
  display: flex;
1795
1922
  gap: 0.5rem;
1796
1923
  justify-content: flex-end;
1797
1924
  }
1798
1925
 
1799
- .tvw-feedback-btn {
1926
+ .persona-feedback-btn {
1800
1927
  padding: 0.5rem 1rem;
1801
1928
  font-size: 0.875rem;
1802
1929
  font-weight: 500;
1803
- border-radius: var(--tvw-cw-radius-sm, 6px);
1930
+ border-radius: var(--persona-radius-sm, 0.125rem);
1804
1931
  cursor: pointer;
1805
1932
  transition: all 0.2s ease;
1806
1933
  }
1807
1934
 
1808
- .tvw-feedback-btn-skip {
1935
+ .persona-feedback-btn-skip {
1809
1936
  background: transparent;
1810
- border: 1px solid var(--cw-border, #e5e7eb);
1811
- color: var(--cw-muted, #6b7280);
1937
+ border: 1px solid var(--persona-border, #e5e7eb);
1938
+ color: var(--persona-muted, #6b7280);
1812
1939
  }
1813
1940
 
1814
- .tvw-feedback-btn-skip:hover {
1815
- background: var(--cw-container, #f3f4f6);
1816
- color: var(--cw-primary, #111827);
1941
+ .persona-feedback-btn-skip:hover {
1942
+ background: var(--persona-container, #f3f4f6);
1943
+ color: var(--persona-primary, #111827);
1817
1944
  }
1818
1945
 
1819
- .tvw-feedback-btn-submit {
1820
- background: var(--cw-accent, #1d4ed8);
1821
- border: 1px solid var(--cw-accent, #1d4ed8);
1946
+ .persona-feedback-btn-submit {
1947
+ background: var(--persona-accent, #1d4ed8);
1948
+ border: 1px solid var(--persona-accent, #1d4ed8);
1822
1949
  color: #ffffff;
1823
1950
  }
1824
1951
 
1825
- .tvw-feedback-btn-submit:hover:not(:disabled) {
1952
+ .persona-feedback-btn-submit:hover:not(:disabled) {
1826
1953
  opacity: 0.9;
1827
1954
  }
1828
1955
 
1829
- .tvw-feedback-btn-submit:disabled {
1956
+ .persona-feedback-btn-submit:disabled {
1830
1957
  opacity: 0.6;
1831
1958
  cursor: not-allowed;
1832
1959
  }
1833
1960
 
1834
1961
  /* Shake animation for validation */
1835
- @keyframes tvw-feedback-shake {
1962
+ @keyframes persona-feedback-shake {
1836
1963
  0%, 100% { transform: translateX(0); }
1837
1964
  10%, 30%, 50%, 70%, 90% { transform: translateX(-4px); }
1838
1965
  20%, 40%, 60%, 80% { transform: translateX(4px); }
1839
1966
  }
1840
1967
 
1841
- .tvw-feedback-shake {
1842
- animation: tvw-feedback-shake 0.5s ease-in-out;
1968
+ .persona-feedback-shake {
1969
+ animation: persona-feedback-shake 0.5s ease-in-out;
1843
1970
  }
1844
1971
 
1845
1972
  /* ============================================
1846
1973
  Tool & Reasoning Bubble Theme Styles
1847
1974
  ============================================ */
1848
1975
 
1849
- /* Content areas: replace ghost tvw-bg-gray-50 / tvw-border-gray-200 */
1850
- .vanilla-tool-bubble .tvw-border-t,
1851
- .vanilla-reasoning-bubble .tvw-border-t {
1976
+ /* Content areas: themed border and background for tool/reasoning bubbles */
1977
+ .vanilla-tool-bubble .persona-border-t,
1978
+ .vanilla-reasoning-bubble .persona-border-t {
1852
1979
  border-top-color: var(--cw-border, #e5e7eb);
1853
1980
  background-color: var(--cw-container, #f9fafb);
1854
1981
  }
1855
1982
 
1856
- /* Tool bubble code blocks: replace ghost tvw-bg-white / tvw-border-gray-100 */
1983
+ /* Tool bubble code blocks: themed surface and border */
1857
1984
  .vanilla-tool-bubble pre {
1858
1985
  background-color: var(--cw-surface, #ffffff);
1859
1986
  border-color: var(--cw-border, #f1f5f9);
@@ -1879,20 +2006,6 @@
1879
2006
  border-color: var(--cw-border, #e5e7eb);
1880
2007
  }
1881
2008
 
1882
- /* Approval status badges — rgba() so they work on any surface */
1883
- .tvw-approval-badge-approved {
1884
- background-color: rgba(22, 163, 74, 0.12);
1885
- color: #16a34a;
1886
- }
1887
- .tvw-approval-badge-denied {
1888
- background-color: rgba(220, 38, 38, 0.12);
1889
- color: #dc2626;
1890
- }
1891
- .tvw-approval-badge-timeout {
1892
- background-color: rgba(202, 138, 4, 0.12);
1893
- color: #ca8a04;
1894
- }
1895
-
1896
2009
  /* Approval button hover/active states */
1897
2010
  .vanilla-approval-bubble [data-approval-action] {
1898
2011
  transition: opacity 0.15s ease, transform 0.1s ease, background-color 0.15s ease;
@@ -1909,3 +2022,213 @@
1909
2022
  .vanilla-approval-bubble [data-approval-action="deny"]:active {
1910
2023
  transform: scale(0.97);
1911
2024
  }
2025
+
2026
+ /* ============================================
2027
+ Visibility (Tailwind parity — prefix persona-)
2028
+ Shipped widget.css is hand-maintained; these utilities are used in TS but not generated by Tailwind at build time.
2029
+ ============================================ */
2030
+ #persona-root .persona-hidden {
2031
+ display: none !important;
2032
+ }
2033
+
2034
+ @media (min-width: 768px) {
2035
+ #persona-root .md\:persona-hidden {
2036
+ display: none !important;
2037
+ }
2038
+ }
2039
+
2040
+ /* ============================================
2041
+ Artifact sidebar (split pane / mobile drawer)
2042
+ Vars set from TS: --persona-artifact-split-gap, --persona-artifact-pane-width,
2043
+ --persona-artifact-pane-max-width, --persona-artifact-pane-min-width
2044
+ ============================================ */
2045
+ #persona-root .persona-artifact-split-root {
2046
+ gap: var(--persona-artifact-split-gap, 0.5rem);
2047
+ }
2048
+
2049
+ /* Document toolbar preset — optional layout vars: --persona-artifact-doc-toolbar-icon-color, etc. */
2050
+ #persona-root .persona-artifact-toolbar-document .persona-artifact-doc-icon-btn {
2051
+ display: inline-flex;
2052
+ align-items: center;
2053
+ justify-content: center;
2054
+ padding: 0.25rem;
2055
+ border-radius: var(--persona-radius-md, 0.375rem);
2056
+ border: 1px solid var(--persona-border, #e5e7eb);
2057
+ background: var(--persona-surface, #ffffff);
2058
+ color: var(--persona-artifact-doc-toolbar-icon-color, var(--persona-text, #111827));
2059
+ cursor: pointer;
2060
+ line-height: 1;
2061
+ }
2062
+
2063
+ #persona-root .persona-artifact-toolbar-document .persona-artifact-doc-icon-btn:hover {
2064
+ background: var(--persona-container, #f3f4f6);
2065
+ }
2066
+
2067
+ #persona-root .persona-artifact-toolbar-document .persona-artifact-doc-icon-btn[aria-pressed="true"] {
2068
+ background: var(--persona-artifact-doc-toggle-active-bg, var(--persona-container, #f3f4f6));
2069
+ border-color: var(--persona-artifact-doc-toggle-active-border, var(--persona-border, #e5e7eb));
2070
+ }
2071
+
2072
+ #persona-root .persona-artifact-toolbar-document .persona-artifact-doc-copy-btn {
2073
+ display: inline-flex;
2074
+ align-items: center;
2075
+ gap: 0.35rem;
2076
+ padding: 0.25rem 0.5rem;
2077
+ border-radius: var(--persona-radius-md, 0.375rem);
2078
+ border: 1px solid var(--persona-border, #e5e7eb);
2079
+ background: var(--persona-surface, #ffffff);
2080
+ color: var(--persona-artifact-doc-toolbar-icon-color, var(--persona-text, #111827));
2081
+ cursor: pointer;
2082
+ font-size: 0.75rem;
2083
+ line-height: 1.25;
2084
+ }
2085
+
2086
+ #persona-root .persona-artifact-toolbar-document .persona-artifact-doc-copy-btn:hover {
2087
+ background: var(--persona-container, #f3f4f6);
2088
+ }
2089
+
2090
+ #persona-root .persona-artifact-toolbar-document .persona-artifact-doc-copy-label {
2091
+ font-weight: 500;
2092
+ }
2093
+
2094
+ /* Draggable split handle (desktop split only; hidden in drawer / narrow host / small viewport) */
2095
+ #persona-root .persona-artifact-split-handle {
2096
+ width: 6px;
2097
+ flex-shrink: 0;
2098
+ cursor: col-resize;
2099
+ touch-action: none;
2100
+ align-self: stretch;
2101
+ background: transparent;
2102
+ border: none;
2103
+ padding: 0;
2104
+ margin: 0;
2105
+ box-sizing: border-box;
2106
+ }
2107
+
2108
+ #persona-root .persona-artifact-split-handle:hover,
2109
+ #persona-root .persona-artifact-split-handle:focus-visible {
2110
+ background: color-mix(in srgb, var(--persona-border, #e5e7eb) 55%, transparent);
2111
+ outline: none;
2112
+ }
2113
+
2114
+ #persona-root.persona-artifact-narrow-host .persona-artifact-split-handle {
2115
+ display: none !important;
2116
+ }
2117
+
2118
+ @media (max-width: 640px) {
2119
+ #persona-root .persona-artifact-split-handle {
2120
+ display: none !important;
2121
+ }
2122
+ }
2123
+
2124
+ @media (min-width: 641px) {
2125
+ #persona-root .persona-artifact-pane {
2126
+ width: var(--persona-artifact-pane-width, 40%);
2127
+ max-width: var(--persona-artifact-pane-max-width, 28rem);
2128
+ min-width: var(--persona-artifact-pane-min-width, 0);
2129
+ flex-shrink: 0;
2130
+ box-shadow: var(--persona-artifact-pane-shadow, -2px 0 12px rgba(15, 23, 42, 0.06));
2131
+ }
2132
+ }
2133
+
2134
+ /* paneBorderRadius — works on any paneAppearance; overflow clips content to rounded shape */
2135
+ #persona-root .persona-artifact-pane {
2136
+ border-radius: var(--persona-artifact-pane-radius, 0);
2137
+ overflow: hidden;
2138
+ background-color: var(--persona-artifact-pane-bg, var(--persona-surface, #ffffff));
2139
+ }
2140
+
2141
+ /* paneAppearance: 'seamless' — flush with chat, no border/shadow/gap */
2142
+ /* `position: relative` for resizer overlay; gap 0; positioning is applied in ui.ts */
2143
+ #persona-root.persona-artifact-appearance-seamless .persona-artifact-split-root {
2144
+ position: relative;
2145
+ gap: 0 !important;
2146
+ }
2147
+
2148
+ #persona-root.persona-artifact-appearance-seamless .persona-artifact-pane {
2149
+ border-left-width: 0 !important;
2150
+ border-left-color: transparent !important;
2151
+ box-shadow: none !important;
2152
+ background-color: var(--persona-artifact-pane-bg, var(--persona-container, #f8fafc));
2153
+ }
2154
+
2155
+ /* layout.paneBorder / paneBorderLeft — theme overrides (after appearance defaults) */
2156
+ #persona-root.persona-artifact-border-full .persona-artifact-pane {
2157
+ border: var(--persona-artifact-pane-border) !important;
2158
+ }
2159
+
2160
+ #persona-root.persona-artifact-border-left .persona-artifact-pane {
2161
+ border-top: none !important;
2162
+ border-right: none !important;
2163
+ border-bottom: none !important;
2164
+ border-left: var(--persona-artifact-pane-border-left) !important;
2165
+ }
2166
+
2167
+ #persona-root.persona-artifact-appearance-seamless.persona-artifact-border-left .persona-artifact-pane {
2168
+ border-left: var(--persona-artifact-pane-border-left) !important;
2169
+ }
2170
+
2171
+ #persona-root.persona-artifact-appearance-seamless.persona-artifact-border-full .persona-artifact-pane {
2172
+ border: var(--persona-artifact-pane-border) !important;
2173
+ }
2174
+
2175
+ /*
2176
+ * Unified split chrome: one visual shell (desktop split only; narrowed via :not(.narrow-host) + breakpoint).
2177
+ * Main chat card (.persona-widget-container) loses inner-right rounding; artifact gains matching outer-right.
2178
+ */
2179
+ @media (min-width: 641px) {
2180
+ #persona-root:not(.persona-artifact-narrow-host).persona-artifact-unified-split .persona-widget-container {
2181
+ border-top-right-radius: 0 !important;
2182
+ border-bottom-right-radius: 0 !important;
2183
+ }
2184
+
2185
+ #persona-root:not(.persona-artifact-narrow-host).persona-artifact-unified-split .persona-artifact-pane {
2186
+ border-top-left-radius: 0 !important;
2187
+ border-bottom-left-radius: 0 !important;
2188
+ border-top-right-radius: var(--persona-artifact-unified-outer-radius, var(--persona-radius-lg, 1rem)) !important;
2189
+ border-bottom-right-radius: var(--persona-artifact-unified-outer-radius, var(--persona-radius-lg, 1rem)) !important;
2190
+ overflow: hidden;
2191
+ }
2192
+ }
2193
+
2194
+ /* Narrow floating panel: drawer inside panel (class toggled by JS from panel width) */
2195
+ #persona-root.persona-artifact-narrow-host .persona-artifact-backdrop {
2196
+ position: absolute !important;
2197
+ inset: 0 !important;
2198
+ z-index: 55 !important;
2199
+ }
2200
+
2201
+ @media (min-width: 641px) {
2202
+ #persona-root.persona-artifact-narrow-host .persona-artifact-pane {
2203
+ position: absolute;
2204
+ top: 0;
2205
+ right: 0;
2206
+ bottom: 0;
2207
+ width: min(calc(100% - 1rem), 22rem) !important;
2208
+ max-width: 22rem !important;
2209
+ z-index: 60;
2210
+ transform: translateX(100%);
2211
+ transition: transform 0.2s ease;
2212
+ box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);
2213
+ }
2214
+ #persona-root.persona-artifact-narrow-host .persona-artifact-pane.persona-artifact-drawer-open {
2215
+ transform: translateX(0);
2216
+ }
2217
+ }
2218
+
2219
+ @media (max-width: 640px) {
2220
+ #persona-root .persona-artifact-pane {
2221
+ position: fixed;
2222
+ top: 0;
2223
+ right: 0;
2224
+ bottom: 0;
2225
+ width: min(100vw - 1.5rem, 22rem);
2226
+ z-index: 60;
2227
+ transform: translateX(100%);
2228
+ transition: transform 0.2s ease;
2229
+ box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);
2230
+ }
2231
+ #persona-root .persona-artifact-pane.persona-artifact-drawer-open {
2232
+ transform: translateX(0);
2233
+ }
2234
+ }