@runtypelabs/persona 1.47.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 (73) 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 +1093 -25
  5. package/dist/index.d.ts +1093 -25
  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 +852 -505
  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 +173 -7
  44. package/src/styles/tailwind.css +1 -1
  45. package/src/styles/widget.css +852 -505
  46. package/src/types/theme.ts +354 -0
  47. package/src/types.ts +348 -16
  48. package/src/ui.docked.test.ts +104 -0
  49. package/src/ui.ts +1093 -244
  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
  70. package/src/voice/audio-playback-manager.ts +187 -0
  71. package/src/voice/runtype-voice-provider.ts +305 -69
  72. package/src/voice/voice-activity-detector.ts +90 -0
  73. package/src/voice/voice.test.ts +6 -5
@@ -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,12 +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;
1087
+ }
1088
+
1089
+ .persona-voice-recording svg {
1090
+ animation: persona-voice-recording-pulse 1.5s ease-in-out infinite;
1057
1091
  }
1058
1092
 
1059
- .tvw-voice-recording svg {
1060
- animation: tvw-voice-recording-pulse 1.5s ease-in-out infinite;
1093
+ /* Voice processing animation (spinner) */
1094
+ @keyframes persona-voice-processing-spin {
1095
+ from { transform: rotate(0deg); }
1096
+ to { transform: rotate(360deg); }
1097
+ }
1098
+
1099
+ .persona-voice-processing svg {
1100
+ animation: persona-voice-processing-spin 1.2s linear infinite;
1101
+ }
1102
+
1103
+ /* Voice speaking animation (gentle pulse — slower/subtler than recording) */
1104
+ @keyframes persona-voice-speaking-pulse {
1105
+ 0%, 100% { opacity: 1; transform: scale(1); }
1106
+ 50% { opacity: 0.85; transform: scale(1.03); }
1107
+ }
1108
+
1109
+ .persona-voice-speaking {
1110
+ animation: persona-voice-speaking-pulse 2s ease-in-out infinite;
1111
+ }
1112
+
1113
+ .persona-voice-speaking svg {
1114
+ animation: persona-voice-speaking-pulse 2s ease-in-out infinite;
1061
1115
  }
1062
1116
 
1063
1117
  /* Markdown content overflow handling */
@@ -1067,14 +1121,14 @@
1067
1121
  word-wrap: break-word;
1068
1122
  word-break: break-word;
1069
1123
  white-space: pre-wrap;
1070
- background-color: var(--cw-md-code-block-bg);
1071
- color: var(--cw-md-code-block-text-color);
1072
- padding: var(--cw-md-code-block-padding);
1073
- 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);
1074
1128
  margin: 0.5rem 0;
1075
- font-size: var(--cw-md-code-block-font-size);
1129
+ font-size: var(--persona-md-code-block-font-size);
1076
1130
  line-height: 1.5;
1077
- border: 1px solid var(--cw-md-code-block-border-color);
1131
+ border: 1px solid var(--persona-md-code-block-border-color);
1078
1132
  }
1079
1133
 
1080
1134
  .vanilla-message-bubble code {
@@ -1098,7 +1152,56 @@
1098
1152
  height: auto;
1099
1153
  display: block;
1100
1154
  margin: 0.5rem 0;
1101
- 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;
1102
1205
  }
1103
1206
 
1104
1207
  /* Ensure all links in chat bubbles have underlines */
@@ -1127,6 +1230,10 @@
1127
1230
  text-decoration: underline;
1128
1231
  }
1129
1232
 
1233
+ #persona-root .vanilla-message-assistant-bubble a {
1234
+ color: var(--persona-md-link-color, var(--persona-accent, #3b82f6));
1235
+ }
1236
+
1130
1237
  /* Markdown paragraph styles */
1131
1238
  .vanilla-message-bubble p {
1132
1239
  margin: 0;
@@ -1207,51 +1314,57 @@
1207
1314
  /* ============================================
1208
1315
  Markdown Header Styles
1209
1316
  ============================================ */
1210
- .vanilla-message-bubble h1 {
1211
- font-size: var(--cw-md-h1-size);
1212
- font-weight: var(--cw-md-h1-weight);
1213
- margin: var(--cw-md-h1-margin);
1214
- 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);
1215
1323
  color: inherit;
1216
1324
  }
1217
1325
 
1218
- .vanilla-message-bubble h2 {
1219
- font-size: var(--cw-md-h2-size);
1220
- font-weight: var(--cw-md-h2-weight);
1221
- margin: var(--cw-md-h2-margin);
1222
- 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);
1223
1332
  color: inherit;
1224
1333
  }
1225
1334
 
1226
- .vanilla-message-bubble h3 {
1227
- font-size: var(--cw-md-h3-size);
1228
- font-weight: var(--cw-md-h3-weight);
1229
- margin: var(--cw-md-h3-margin);
1230
- 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);
1231
1341
  color: inherit;
1232
1342
  }
1233
1343
 
1234
- .vanilla-message-bubble h4 {
1235
- font-size: var(--cw-md-h4-size);
1236
- font-weight: var(--cw-md-h4-weight);
1237
- margin: var(--cw-md-h4-margin);
1238
- 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);
1239
1350
  color: inherit;
1240
1351
  }
1241
1352
 
1242
- .vanilla-message-bubble h5 {
1243
- font-size: var(--cw-md-h5-size);
1244
- font-weight: var(--cw-md-h5-weight);
1245
- margin: var(--cw-md-h5-margin);
1246
- 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);
1247
1359
  color: inherit;
1248
1360
  }
1249
1361
 
1250
- .vanilla-message-bubble h6 {
1251
- font-size: var(--cw-md-h6-size);
1252
- font-weight: var(--cw-md-h6-weight);
1253
- margin: var(--cw-md-h6-margin);
1254
- 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);
1255
1368
  color: inherit;
1256
1369
  }
1257
1370
 
@@ -1274,24 +1387,24 @@
1274
1387
  margin: 0.5rem 0;
1275
1388
  font-size: 0.875rem;
1276
1389
  overflow: hidden;
1277
- border-radius: var(--cw-md-table-border-radius);
1278
- 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);
1279
1392
  }
1280
1393
 
1281
1394
  .vanilla-message-bubble thead {
1282
- background-color: var(--cw-md-table-header-bg);
1395
+ background-color: var(--persona-md-table-header-bg);
1283
1396
  }
1284
1397
 
1285
1398
  .vanilla-message-bubble th {
1286
- font-weight: var(--cw-md-table-header-weight);
1399
+ font-weight: var(--persona-md-table-header-weight);
1287
1400
  text-align: left;
1288
- padding: var(--cw-md-table-cell-padding);
1289
- 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);
1290
1403
  }
1291
1404
 
1292
1405
  .vanilla-message-bubble td {
1293
- padding: var(--cw-md-table-cell-padding);
1294
- 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);
1295
1408
  text-align: left;
1296
1409
  }
1297
1410
 
@@ -1308,21 +1421,21 @@
1308
1421
  ============================================ */
1309
1422
  .vanilla-message-bubble hr {
1310
1423
  border: none;
1311
- height: var(--cw-md-hr-height);
1312
- background-color: var(--cw-md-hr-color);
1313
- 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);
1314
1427
  }
1315
1428
 
1316
1429
  /* ============================================
1317
1430
  Markdown Blockquote Styles
1318
1431
  ============================================ */
1319
1432
  .vanilla-message-bubble blockquote {
1320
- border-left: var(--cw-md-blockquote-border-width) solid var(--cw-md-blockquote-border-color);
1321
- padding: var(--cw-md-blockquote-padding);
1322
- margin: var(--cw-md-blockquote-margin);
1323
- background-color: var(--cw-md-blockquote-bg);
1324
- color: var(--cw-md-blockquote-text-color);
1325
- 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);
1326
1439
  }
1327
1440
 
1328
1441
  .vanilla-message-bubble blockquote p {
@@ -1342,10 +1455,11 @@
1342
1455
  Markdown Inline Code Styles (not in pre)
1343
1456
  ============================================ */
1344
1457
  .vanilla-message-bubble code:not(pre code) {
1345
- background-color: var(--cw-md-inline-code-bg);
1346
- padding: var(--cw-md-inline-code-padding);
1347
- border-radius: var(--cw-md-inline-code-border-radius);
1348
- 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);
1349
1463
  }
1350
1464
 
1351
1465
  /* ============================================
@@ -1353,12 +1467,12 @@
1353
1467
  ============================================ */
1354
1468
  .vanilla-message-bubble strong,
1355
1469
  .vanilla-message-bubble b {
1356
- font-weight: var(--cw-md-strong-weight);
1470
+ font-weight: var(--persona-md-strong-weight);
1357
1471
  }
1358
1472
 
1359
1473
  .vanilla-message-bubble em,
1360
1474
  .vanilla-message-bubble i {
1361
- font-style: var(--cw-md-em-style);
1475
+ font-style: var(--persona-md-em-style);
1362
1476
  }
1363
1477
 
1364
1478
  /* ============================================
@@ -1415,7 +1529,7 @@
1415
1529
  }
1416
1530
 
1417
1531
  /* Fade-in animation for action buttons */
1418
- @keyframes tvw-message-actions-fade-in {
1532
+ @keyframes persona-message-actions-fade-in {
1419
1533
  from {
1420
1534
  opacity: 0;
1421
1535
  }
@@ -1425,37 +1539,74 @@
1425
1539
  }
1426
1540
 
1427
1541
  /* Base action bar styles */
1428
- .tvw-message-actions {
1542
+ .persona-message-actions {
1429
1543
  display: flex;
1430
1544
  align-items: center;
1431
1545
  gap: 0.25rem;
1432
1546
  margin-top: 0.5rem;
1433
1547
  padding-top: 0.5rem;
1434
- border-top: 1px solid var(--cw-divider, #f1f5f9);
1548
+ border-top: 1px solid var(--persona-divider, #f1f5f9);
1435
1549
  }
1436
1550
 
1437
1551
  /* Fade in animation only for "always" visibility mode (not hover) */
1438
1552
  /* forwards ensures final state is kept, idiomorph preserves element so animation only plays once */
1439
- .tvw-message-actions:not(.tvw-message-actions-hover) {
1440
- 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;
1441
1555
  }
1442
1556
 
1443
1557
  /* Action bar alignment */
1444
- .tvw-message-actions-left {
1558
+ .persona-message-actions-left {
1445
1559
  justify-content: flex-start;
1446
1560
  }
1447
1561
 
1448
- .tvw-message-actions-center {
1562
+ .persona-message-actions-center {
1449
1563
  justify-content: center;
1450
1564
  }
1451
1565
 
1452
- .tvw-message-actions-right {
1566
+ .persona-message-actions-right {
1453
1567
  justify-content: flex-end;
1454
1568
  }
1455
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
+
1456
1607
  /* Hover visibility mode - overlay on desktop */
1457
1608
  @media (hover: hover) {
1458
- .tvw-message-actions-hover {
1609
+ .persona-message-actions-hover {
1459
1610
  /* Hidden by default */
1460
1611
  opacity: 0;
1461
1612
  pointer-events: none;
@@ -1463,38 +1614,38 @@
1463
1614
  }
1464
1615
 
1465
1616
  /* Pill layout - compact floating pill */
1466
- .tvw-message-actions-hover.tvw-message-actions-pill {
1617
+ .persona-message-actions-hover.persona-message-actions-pill {
1467
1618
  position: absolute;
1468
1619
  bottom: 0.5rem;
1469
1620
  margin-top: 0;
1470
1621
  padding: 0.25rem;
1471
1622
  border-top: none;
1472
1623
  width: fit-content;
1473
- background-color: var(--cw-surface, #ffffff);
1474
- border: 1px solid var(--cw-divider, #f1f5f9);
1475
- 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);
1476
1627
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
1477
1628
  }
1478
1629
 
1479
1630
  /* Pill layout - position based on alignment */
1480
- .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 {
1481
1632
  left: 0.75rem;
1482
1633
  right: auto;
1483
1634
  }
1484
1635
 
1485
- .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 {
1486
1637
  left: 50%;
1487
1638
  right: auto;
1488
1639
  transform: translateX(-50%);
1489
1640
  }
1490
1641
 
1491
- .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 {
1492
1643
  right: 0.75rem;
1493
1644
  left: auto;
1494
1645
  }
1495
1646
 
1496
1647
  /* Row layout - full-width bar at bottom */
1497
- .tvw-message-actions-hover.tvw-message-actions-row {
1648
+ .persona-message-actions-hover.persona-message-actions-row {
1498
1649
  position: absolute;
1499
1650
  bottom: 0;
1500
1651
  left: 0;
@@ -1504,14 +1655,14 @@
1504
1655
  border-top: none;
1505
1656
  background: linear-gradient(
1506
1657
  to top,
1507
- var(--cw-surface, #ffffff) 70%,
1658
+ var(--persona-surface, #ffffff) 70%,
1508
1659
  transparent
1509
1660
  );
1510
- 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);
1511
1662
  }
1512
1663
 
1513
- .vanilla-message-bubble:hover .tvw-message-actions-hover,
1514
- .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 {
1515
1666
  opacity: 1;
1516
1667
  pointer-events: auto;
1517
1668
  }
@@ -1519,7 +1670,7 @@
1519
1670
 
1520
1671
  /* On touch devices (no hover support), show inline and always visible */
1521
1672
  @media (hover: none) {
1522
- .tvw-message-actions-hover {
1673
+ .persona-message-actions-hover {
1523
1674
  /* Keep normal flow positioning on mobile */
1524
1675
  position: static;
1525
1676
  opacity: 1;
@@ -1527,7 +1678,7 @@
1527
1678
  }
1528
1679
 
1529
1680
  /* Action button base styles */
1530
- .tvw-message-action-btn {
1681
+ .persona-message-action-btn {
1531
1682
  display: inline-flex;
1532
1683
  align-items: center;
1533
1684
  justify-content: center;
@@ -1535,60 +1686,60 @@
1535
1686
  height: 28px;
1536
1687
  padding: 0;
1537
1688
  border: none;
1538
- border-radius: 6px;
1689
+ border-radius: var(--persona-radius-sm, 0.125rem);
1539
1690
  background-color: transparent;
1540
- color: var(--cw-muted, #6b7280);
1691
+ color: var(--persona-muted, #6b7280);
1541
1692
  cursor: pointer;
1542
1693
  transition: background-color 0.15s ease, color 0.15s ease, transform 0.1s ease;
1543
1694
  }
1544
1695
 
1545
- .tvw-message-action-btn:hover {
1546
- background-color: var(--cw-container, #f8fafc);
1547
- color: var(--cw-primary, #111827);
1696
+ .persona-message-action-btn:hover {
1697
+ background-color: var(--persona-container, #f8fafc);
1698
+ color: var(--persona-primary, #111827);
1548
1699
  }
1549
1700
 
1550
- .tvw-message-action-btn:active {
1701
+ .persona-message-action-btn:active {
1551
1702
  transform: scale(0.95);
1552
1703
  }
1553
1704
 
1554
- .tvw-message-action-btn:focus {
1705
+ .persona-message-action-btn:focus {
1555
1706
  outline: none;
1556
- box-shadow: 0 0 0 2px var(--cw-accent, #1d4ed8);
1707
+ box-shadow: 0 0 0 2px var(--persona-accent, #1d4ed8);
1557
1708
  }
1558
1709
 
1559
- .tvw-message-action-btn:focus:not(:focus-visible) {
1710
+ .persona-message-action-btn:focus:not(:focus-visible) {
1560
1711
  box-shadow: none;
1561
1712
  }
1562
1713
 
1563
- .tvw-message-action-btn:focus-visible {
1564
- 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);
1565
1716
  }
1566
1717
 
1567
1718
  /* Active state (voted) */
1568
- .tvw-message-action-btn.tvw-message-action-active {
1569
- background-color: var(--cw-accent, #1d4ed8);
1719
+ .persona-message-action-btn.persona-message-action-active {
1720
+ background-color: var(--persona-accent, #1d4ed8);
1570
1721
  color: #ffffff;
1571
1722
  }
1572
1723
 
1573
- .tvw-message-action-btn.tvw-message-action-active:hover {
1574
- background-color: var(--cw-accent, #1d4ed8);
1724
+ .persona-message-action-btn.persona-message-action-active:hover {
1725
+ background-color: var(--persona-accent, #1d4ed8);
1575
1726
  color: #ffffff;
1576
1727
  opacity: 0.9;
1577
1728
  }
1578
1729
 
1579
1730
  /* Success state (after copy) */
1580
- .tvw-message-action-btn.tvw-message-action-success {
1731
+ .persona-message-action-btn.persona-message-action-success {
1581
1732
  background-color: #10b981;
1582
1733
  color: #ffffff;
1583
1734
  }
1584
1735
 
1585
- .tvw-message-action-btn.tvw-message-action-success:hover {
1736
+ .persona-message-action-btn.persona-message-action-success:hover {
1586
1737
  background-color: #10b981;
1587
1738
  color: #ffffff;
1588
1739
  }
1589
1740
 
1590
1741
  /* Icon styling within buttons */
1591
- .tvw-message-action-btn svg {
1742
+ .persona-message-action-btn svg {
1592
1743
  width: 14px;
1593
1744
  height: 14px;
1594
1745
  flex-shrink: 0;
@@ -1598,18 +1749,18 @@
1598
1749
  * Feedback UI Components (CSAT/NPS)
1599
1750
  * ============================================================================ */
1600
1751
 
1601
- .tvw-feedback-container {
1602
- background: var(--cw-surface, #ffffff);
1603
- border: 1px solid var(--cw-border, #e5e7eb);
1604
- 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);
1605
1756
  box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
1606
1757
  padding: 1.25rem;
1607
1758
  max-width: 100%;
1608
1759
  margin: 0.75rem;
1609
- animation: tvw-feedback-fade-in 0.3s ease-out;
1760
+ animation: persona-feedback-fade-in 0.3s ease-out;
1610
1761
  }
1611
1762
 
1612
- @keyframes tvw-feedback-fade-in {
1763
+ @keyframes persona-feedback-fade-in {
1613
1764
  from {
1614
1765
  opacity: 0;
1615
1766
  transform: translateY(10px);
@@ -1620,83 +1771,83 @@
1620
1771
  }
1621
1772
  }
1622
1773
 
1623
- .tvw-feedback-content {
1774
+ .persona-feedback-content {
1624
1775
  display: flex;
1625
1776
  flex-direction: column;
1626
1777
  gap: 1rem;
1627
1778
  }
1628
1779
 
1629
- .tvw-feedback-header {
1780
+ .persona-feedback-header {
1630
1781
  text-align: center;
1631
1782
  }
1632
1783
 
1633
- .tvw-feedback-title {
1784
+ .persona-feedback-title {
1634
1785
  margin: 0 0 0.25rem 0;
1635
1786
  font-size: 1rem;
1636
1787
  font-weight: 600;
1637
- color: var(--cw-primary, #111827);
1788
+ color: var(--persona-primary, #111827);
1638
1789
  }
1639
1790
 
1640
- .tvw-feedback-subtitle {
1791
+ .persona-feedback-subtitle {
1641
1792
  margin: 0;
1642
1793
  font-size: 0.875rem;
1643
- color: var(--cw-muted, #6b7280);
1794
+ color: var(--persona-muted, #6b7280);
1644
1795
  }
1645
1796
 
1646
1797
  /* CSAT Star Rating */
1647
- .tvw-feedback-rating-csat {
1798
+ .persona-feedback-rating-csat {
1648
1799
  display: flex;
1649
1800
  justify-content: center;
1650
1801
  gap: 0.5rem;
1651
1802
  }
1652
1803
 
1653
- .tvw-feedback-star-btn {
1804
+ .persona-feedback-star-btn {
1654
1805
  background: transparent;
1655
1806
  border: none;
1656
1807
  cursor: pointer;
1657
1808
  padding: 0.25rem;
1658
- color: var(--cw-border, #d1d5db);
1809
+ color: var(--persona-border, #d1d5db);
1659
1810
  transition: color 0.2s ease, transform 0.15s ease;
1660
1811
  }
1661
1812
 
1662
- .tvw-feedback-star-btn:hover {
1813
+ .persona-feedback-star-btn:hover {
1663
1814
  transform: scale(1.15);
1664
1815
  }
1665
1816
 
1666
- .tvw-feedback-star-btn.selected {
1817
+ .persona-feedback-star-btn.selected {
1667
1818
  color: #fbbf24;
1668
1819
  }
1669
1820
 
1670
- .tvw-feedback-star-btn .tvw-feedback-star {
1821
+ .persona-feedback-star-btn .persona-feedback-star {
1671
1822
  width: 32px;
1672
1823
  height: 32px;
1673
1824
  }
1674
1825
 
1675
- .tvw-feedback-star-btn.selected .tvw-feedback-star {
1826
+ .persona-feedback-star-btn.selected .persona-feedback-star {
1676
1827
  fill: #fbbf24;
1677
1828
  }
1678
1829
 
1679
1830
  /* NPS Number Rating */
1680
- .tvw-feedback-rating-nps {
1831
+ .persona-feedback-rating-nps {
1681
1832
  display: flex;
1682
1833
  flex-direction: column;
1683
1834
  gap: 0.5rem;
1684
1835
  }
1685
1836
 
1686
- .tvw-feedback-labels {
1837
+ .persona-feedback-labels {
1687
1838
  display: flex;
1688
1839
  justify-content: space-between;
1689
1840
  font-size: 0.75rem;
1690
- color: var(--cw-muted, #6b7280);
1841
+ color: var(--persona-muted, #6b7280);
1691
1842
  }
1692
1843
 
1693
- .tvw-feedback-numbers {
1844
+ .persona-feedback-numbers {
1694
1845
  display: flex;
1695
1846
  gap: 0.25rem;
1696
1847
  justify-content: center;
1697
1848
  }
1698
1849
 
1699
- .tvw-feedback-number-btn {
1850
+ .persona-feedback-number-btn {
1700
1851
  width: 28px;
1701
1852
  height: 28px;
1702
1853
  display: flex;
@@ -1704,132 +1855,132 @@
1704
1855
  justify-content: center;
1705
1856
  font-size: 0.75rem;
1706
1857
  font-weight: 500;
1707
- border-radius: var(--tvw-cw-radius-sm, 6px);
1708
- border: 1px solid var(--cw-border, #e5e7eb);
1709
- background: var(--cw-surface, #ffffff);
1710
- 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);
1711
1862
  cursor: pointer;
1712
1863
  transition: all 0.2s ease;
1713
1864
  }
1714
1865
 
1715
- .tvw-feedback-number-btn:hover {
1716
- border-color: var(--cw-accent, #1d4ed8);
1717
- background: var(--cw-container, #f3f4f6);
1866
+ .persona-feedback-number-btn:hover {
1867
+ border-color: var(--persona-accent, #1d4ed8);
1868
+ background: var(--persona-container, #f3f4f6);
1718
1869
  }
1719
1870
 
1720
- .tvw-feedback-number-btn.selected {
1871
+ .persona-feedback-number-btn.selected {
1721
1872
  color: #ffffff;
1722
1873
  }
1723
1874
 
1724
1875
  /* NPS Color coding */
1725
- .tvw-feedback-number-btn.tvw-feedback-detractor.selected {
1876
+ .persona-feedback-number-btn.persona-feedback-detractor.selected {
1726
1877
  background: #ef4444;
1727
1878
  border-color: #ef4444;
1728
1879
  }
1729
1880
 
1730
- .tvw-feedback-number-btn.tvw-feedback-passive.selected {
1881
+ .persona-feedback-number-btn.persona-feedback-passive.selected {
1731
1882
  background: #f59e0b;
1732
1883
  border-color: #f59e0b;
1733
1884
  }
1734
1885
 
1735
- .tvw-feedback-number-btn.tvw-feedback-promoter.selected {
1886
+ .persona-feedback-number-btn.persona-feedback-promoter.selected {
1736
1887
  background: #22c55e;
1737
1888
  border-color: #22c55e;
1738
1889
  }
1739
1890
 
1740
1891
  /* Comment textarea */
1741
- .tvw-feedback-comment-container {
1892
+ .persona-feedback-comment-container {
1742
1893
  width: 100%;
1743
1894
  }
1744
1895
 
1745
- .tvw-feedback-comment {
1896
+ .persona-feedback-comment {
1746
1897
  width: 100%;
1747
1898
  padding: 0.625rem;
1748
1899
  font-size: 0.875rem;
1749
1900
  font-family: inherit;
1750
- border: 1px solid var(--cw-border, #e5e7eb);
1751
- border-radius: var(--tvw-cw-radius-sm, 6px);
1752
- background: var(--cw-surface, #ffffff);
1753
- 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);
1754
1905
  resize: vertical;
1755
1906
  box-sizing: border-box;
1756
1907
  }
1757
1908
 
1758
- .tvw-feedback-comment:focus {
1909
+ .persona-feedback-comment:focus {
1759
1910
  outline: none;
1760
- border-color: var(--cw-accent, #1d4ed8);
1911
+ border-color: var(--persona-accent, #1d4ed8);
1761
1912
  box-shadow: 0 0 0 2px rgba(29, 78, 216, 0.15);
1762
1913
  }
1763
1914
 
1764
- .tvw-feedback-comment::placeholder {
1765
- color: var(--cw-muted, #9ca3af);
1915
+ .persona-feedback-comment::placeholder {
1916
+ color: var(--persona-muted, #9ca3af);
1766
1917
  }
1767
1918
 
1768
1919
  /* Action buttons */
1769
- .tvw-feedback-actions {
1920
+ .persona-feedback-actions {
1770
1921
  display: flex;
1771
1922
  gap: 0.5rem;
1772
1923
  justify-content: flex-end;
1773
1924
  }
1774
1925
 
1775
- .tvw-feedback-btn {
1926
+ .persona-feedback-btn {
1776
1927
  padding: 0.5rem 1rem;
1777
1928
  font-size: 0.875rem;
1778
1929
  font-weight: 500;
1779
- border-radius: var(--tvw-cw-radius-sm, 6px);
1930
+ border-radius: var(--persona-radius-sm, 0.125rem);
1780
1931
  cursor: pointer;
1781
1932
  transition: all 0.2s ease;
1782
1933
  }
1783
1934
 
1784
- .tvw-feedback-btn-skip {
1935
+ .persona-feedback-btn-skip {
1785
1936
  background: transparent;
1786
- border: 1px solid var(--cw-border, #e5e7eb);
1787
- color: var(--cw-muted, #6b7280);
1937
+ border: 1px solid var(--persona-border, #e5e7eb);
1938
+ color: var(--persona-muted, #6b7280);
1788
1939
  }
1789
1940
 
1790
- .tvw-feedback-btn-skip:hover {
1791
- background: var(--cw-container, #f3f4f6);
1792
- color: var(--cw-primary, #111827);
1941
+ .persona-feedback-btn-skip:hover {
1942
+ background: var(--persona-container, #f3f4f6);
1943
+ color: var(--persona-primary, #111827);
1793
1944
  }
1794
1945
 
1795
- .tvw-feedback-btn-submit {
1796
- background: var(--cw-accent, #1d4ed8);
1797
- 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);
1798
1949
  color: #ffffff;
1799
1950
  }
1800
1951
 
1801
- .tvw-feedback-btn-submit:hover:not(:disabled) {
1952
+ .persona-feedback-btn-submit:hover:not(:disabled) {
1802
1953
  opacity: 0.9;
1803
1954
  }
1804
1955
 
1805
- .tvw-feedback-btn-submit:disabled {
1956
+ .persona-feedback-btn-submit:disabled {
1806
1957
  opacity: 0.6;
1807
1958
  cursor: not-allowed;
1808
1959
  }
1809
1960
 
1810
1961
  /* Shake animation for validation */
1811
- @keyframes tvw-feedback-shake {
1962
+ @keyframes persona-feedback-shake {
1812
1963
  0%, 100% { transform: translateX(0); }
1813
1964
  10%, 30%, 50%, 70%, 90% { transform: translateX(-4px); }
1814
1965
  20%, 40%, 60%, 80% { transform: translateX(4px); }
1815
1966
  }
1816
1967
 
1817
- .tvw-feedback-shake {
1818
- animation: tvw-feedback-shake 0.5s ease-in-out;
1968
+ .persona-feedback-shake {
1969
+ animation: persona-feedback-shake 0.5s ease-in-out;
1819
1970
  }
1820
1971
 
1821
1972
  /* ============================================
1822
1973
  Tool & Reasoning Bubble Theme Styles
1823
1974
  ============================================ */
1824
1975
 
1825
- /* Content areas: replace ghost tvw-bg-gray-50 / tvw-border-gray-200 */
1826
- .vanilla-tool-bubble .tvw-border-t,
1827
- .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 {
1828
1979
  border-top-color: var(--cw-border, #e5e7eb);
1829
1980
  background-color: var(--cw-container, #f9fafb);
1830
1981
  }
1831
1982
 
1832
- /* Tool bubble code blocks: replace ghost tvw-bg-white / tvw-border-gray-100 */
1983
+ /* Tool bubble code blocks: themed surface and border */
1833
1984
  .vanilla-tool-bubble pre {
1834
1985
  background-color: var(--cw-surface, #ffffff);
1835
1986
  border-color: var(--cw-border, #f1f5f9);
@@ -1855,20 +2006,6 @@
1855
2006
  border-color: var(--cw-border, #e5e7eb);
1856
2007
  }
1857
2008
 
1858
- /* Approval status badges — rgba() so they work on any surface */
1859
- .tvw-approval-badge-approved {
1860
- background-color: rgba(22, 163, 74, 0.12);
1861
- color: #16a34a;
1862
- }
1863
- .tvw-approval-badge-denied {
1864
- background-color: rgba(220, 38, 38, 0.12);
1865
- color: #dc2626;
1866
- }
1867
- .tvw-approval-badge-timeout {
1868
- background-color: rgba(202, 138, 4, 0.12);
1869
- color: #ca8a04;
1870
- }
1871
-
1872
2009
  /* Approval button hover/active states */
1873
2010
  .vanilla-approval-bubble [data-approval-action] {
1874
2011
  transition: opacity 0.15s ease, transform 0.1s ease, background-color 0.15s ease;
@@ -1885,3 +2022,213 @@
1885
2022
  .vanilla-approval-bubble [data-approval-action="deny"]:active {
1886
2023
  transform: scale(0.97);
1887
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
+ }