@polymorfa/ui 0.1.0-dev.20260922094209

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.
package/dist/styles.js ADDED
@@ -0,0 +1,1223 @@
1
+ /**
2
+ * Stylesheet shared by the chat and template surfaces of `@polymorfa/react`
3
+ * and `@polymorfa/elements`. Both render the same `pmfa-*` class names, so a
4
+ * host restyling one package gets the same result in the other.
5
+ *
6
+ * Colors come from the appearance variables. The dark palette applies to
7
+ * `.pmfa-dark` roots, and to `.pmfa-auto` roots when the system prefers dark;
8
+ * it reads `--pmfa-dark-color-*` first. Every rule sits in the `polymorfa`
9
+ * cascade layer, so unlayered host CSS wins without extra specificity.
10
+ */
11
+ export const COMPONENT_STYLES = `
12
+ @layer polymorfa {
13
+ .pmfa {
14
+ --pmfa-c-bg: var(--pmfa-color-background, #ffffff);
15
+ --pmfa-c-fg: var(--pmfa-color-foreground, #17151f);
16
+ --pmfa-c-muted: var(--pmfa-color-muted, #6d6878);
17
+ --pmfa-c-border: var(--pmfa-color-border, #dedbe5);
18
+ --pmfa-c-primary: var(--pmfa-color-primary, #5b4bf7);
19
+ --pmfa-c-danger: var(--pmfa-color-danger, #c62828);
20
+ --pmfa-c-success: var(--pmfa-color-success, #18794e);
21
+ --pmfa-c-link: color-mix(in srgb, var(--pmfa-c-primary) 82%, var(--pmfa-c-fg));
22
+ --pmfa-c-surface: color-mix(in srgb, var(--pmfa-c-fg) 5%, var(--pmfa-c-bg));
23
+ --pmfa-c-in: var(--pmfa-c-bg);
24
+ --pmfa-c-out: var(--pmfa-c-primary);
25
+ --pmfa-c-on-out: #ffffff;
26
+ --pmfa-c-on-danger: #ffffff;
27
+ --pmfa-c-chat: color-mix(in srgb, var(--pmfa-c-fg) 4%, var(--pmfa-c-bg));
28
+ --pmfa-c-bubble-shadow: 0 1px 1px rgb(0 0 0 / 0.07), 0 0 0 1px color-mix(in srgb, var(--pmfa-c-fg) 5%, transparent);
29
+ --pmfa-r-s: var(--pmfa-radius-small, 6px);
30
+ --pmfa-r-m: var(--pmfa-radius-medium, 10px);
31
+ --pmfa-r-l: var(--pmfa-radius-large, 16px);
32
+ --pmfa-r-bubble: 18px;
33
+ --pmfa-s-s: var(--pmfa-spacing-small, 8px);
34
+ --pmfa-s-m: var(--pmfa-spacing-medium, 12px);
35
+ --pmfa-s-l: var(--pmfa-spacing-large, 20px);
36
+ box-sizing: border-box;
37
+ color: var(--pmfa-c-fg);
38
+ font-family: var(--pmfa-font-family, system-ui, sans-serif);
39
+ font-size: var(--pmfa-font-size-base, 16px);
40
+ line-height: 1.45;
41
+ -webkit-text-size-adjust: 100%;
42
+ -webkit-tap-highlight-color: transparent;
43
+ }
44
+ .pmfa *, .pmfa *::before, .pmfa *::after { box-sizing: border-box; }
45
+ .pmfa-dark {
46
+ --pmfa-c-bg: var(--pmfa-dark-color-background, #17161c);
47
+ --pmfa-c-fg: var(--pmfa-dark-color-foreground, #f1eff6);
48
+ --pmfa-c-muted: var(--pmfa-dark-color-muted, #aaa6b5);
49
+ --pmfa-c-border: var(--pmfa-dark-color-border, #363340);
50
+ --pmfa-c-primary: var(--pmfa-dark-color-primary, var(--pmfa-color-primary, #5b4bf7));
51
+ --pmfa-c-danger: var(--pmfa-dark-color-danger, #ff8a80);
52
+ --pmfa-c-success: var(--pmfa-dark-color-success, #4cc38a);
53
+ --pmfa-c-link: color-mix(in srgb, var(--pmfa-c-primary) 45%, #ffffff);
54
+ --pmfa-c-in: color-mix(in srgb, var(--pmfa-c-fg) 9%, var(--pmfa-c-bg));
55
+ --pmfa-c-chat: color-mix(in srgb, #000000 28%, var(--pmfa-c-bg));
56
+ --pmfa-c-bubble-shadow: none;
57
+ --pmfa-c-on-danger: #1a0b0b;
58
+ color-scheme: dark;
59
+ }
60
+ @media (prefers-color-scheme: dark) {
61
+ .pmfa-auto {
62
+ --pmfa-c-bg: var(--pmfa-dark-color-background, #17161c);
63
+ --pmfa-c-fg: var(--pmfa-dark-color-foreground, #f1eff6);
64
+ --pmfa-c-muted: var(--pmfa-dark-color-muted, #aaa6b5);
65
+ --pmfa-c-border: var(--pmfa-dark-color-border, #363340);
66
+ --pmfa-c-primary: var(--pmfa-dark-color-primary, var(--pmfa-color-primary, #5b4bf7));
67
+ --pmfa-c-danger: var(--pmfa-dark-color-danger, #ff8a80);
68
+ --pmfa-c-success: var(--pmfa-dark-color-success, #4cc38a);
69
+ --pmfa-c-link: color-mix(in srgb, var(--pmfa-c-primary) 45%, #ffffff);
70
+ --pmfa-c-in: color-mix(in srgb, var(--pmfa-c-fg) 9%, var(--pmfa-c-bg));
71
+ --pmfa-c-chat: color-mix(in srgb, #000000 28%, var(--pmfa-c-bg));
72
+ --pmfa-c-bubble-shadow: none;
73
+ --pmfa-c-on-danger: #1a0b0b;
74
+ color-scheme: dark;
75
+ }
76
+ }
77
+ .pmfa-sr {
78
+ position: absolute !important;
79
+ width: 1px;
80
+ height: 1px;
81
+ margin: -1px;
82
+ padding: 0;
83
+ overflow: hidden;
84
+ clip-path: inset(50%);
85
+ white-space: nowrap;
86
+ border: 0;
87
+ }
88
+ .pmfa-icon { flex: none; width: 20px; height: 20px; }
89
+
90
+ /* Controls */
91
+ .pmfa-btn {
92
+ appearance: none;
93
+ display: inline-flex;
94
+ align-items: center;
95
+ justify-content: center;
96
+ gap: 6px;
97
+ min-height: 40px;
98
+ padding: 0 16px;
99
+ border: 1px solid var(--pmfa-c-border);
100
+ border-radius: var(--pmfa-r-m);
101
+ background: var(--pmfa-c-bg);
102
+ color: var(--pmfa-c-fg);
103
+ font: inherit;
104
+ font-size: 0.875em;
105
+ font-weight: 600;
106
+ white-space: nowrap;
107
+ cursor: pointer;
108
+ touch-action: manipulation;
109
+ transition: background-color 120ms ease, border-color 120ms ease, opacity 120ms ease, transform 120ms ease;
110
+ }
111
+ .pmfa-btn:hover:not(:disabled) { background: var(--pmfa-c-surface); }
112
+ .pmfa-btn:active:not(:disabled) { transform: scale(0.96); }
113
+ .pmfa-btn:focus-visible, .pmfa-input:focus-visible, .pmfa-quote:focus-visible,
114
+ .pmfa-att:focus-visible, .pmfa-msg:focus-visible {
115
+ outline: 2px solid var(--pmfa-c-primary);
116
+ outline-offset: 2px;
117
+ }
118
+ .pmfa-btn:disabled { opacity: 0.4; cursor: not-allowed; }
119
+ .pmfa-btn-primary {
120
+ border-color: transparent;
121
+ background: var(--pmfa-c-primary);
122
+ color: #ffffff;
123
+ }
124
+ .pmfa-btn-primary:hover:not(:disabled) {
125
+ background: color-mix(in srgb, var(--pmfa-c-primary) 86%, #000000);
126
+ }
127
+ .pmfa-btn-danger { border-color: transparent; background: var(--pmfa-c-danger); color: var(--pmfa-c-on-danger); }
128
+ .pmfa-btn-danger:hover:not(:disabled) {
129
+ background: color-mix(in srgb, var(--pmfa-c-danger) 88%, #000000);
130
+ }
131
+ .pmfa-btn-ghost { border-color: transparent; background: transparent; color: var(--pmfa-c-muted); }
132
+ .pmfa-btn-ghost:hover:not(:disabled) { color: var(--pmfa-c-fg); }
133
+ .pmfa-btn-icon { width: 40px; padding: 0; border-radius: 999px; }
134
+ .pmfa-input {
135
+ display: block;
136
+ width: 100%;
137
+ min-height: 40px;
138
+ padding: 9px 12px;
139
+ border: 1px solid var(--pmfa-c-border);
140
+ border-radius: var(--pmfa-r-m);
141
+ background: var(--pmfa-c-bg);
142
+ color: var(--pmfa-c-fg);
143
+ font: inherit;
144
+ font-size: max(16px, 0.9375em);
145
+ }
146
+ textarea.pmfa-input { min-height: 72px; resize: vertical; }
147
+ .pmfa-input::placeholder { color: var(--pmfa-c-muted); opacity: 1; }
148
+ .pmfa-error { margin: 0; color: var(--pmfa-c-danger); font-size: 0.875em; }
149
+
150
+ /* Message list */
151
+ .pmfa-list {
152
+ display: flex;
153
+ flex-direction: column;
154
+ margin: 0;
155
+ padding: var(--pmfa-s-m) var(--pmfa-s-m) var(--pmfa-s-l);
156
+ background: var(--pmfa-c-chat);
157
+ overflow-y: auto;
158
+ overscroll-behavior: contain;
159
+ scroll-padding-block: var(--pmfa-s-l);
160
+ }
161
+ .pmfa-items {
162
+ display: flex;
163
+ flex: 1 0 auto;
164
+ flex-direction: column;
165
+ gap: 2px;
166
+ margin: 0;
167
+ padding: 0;
168
+ list-style: none;
169
+ }
170
+ .pmfa-items > li { display: flex; flex-direction: column; min-width: 0; }
171
+ .pmfa-loadmore { align-self: center; margin-bottom: var(--pmfa-s-s); }
172
+ .pmfa-loadmore .pmfa-btn { border-radius: 999px; font-size: 0.8125em; }
173
+ .pmfa-empty {
174
+ align-self: center;
175
+ margin: auto;
176
+ padding: var(--pmfa-s-l);
177
+ color: var(--pmfa-c-muted);
178
+ font-size: 0.875em;
179
+ }
180
+ .pmfa-items > .pmfa-date {
181
+ position: sticky;
182
+ top: 0;
183
+ z-index: 1;
184
+ align-self: center;
185
+ margin: var(--pmfa-s-m) 0 var(--pmfa-s-s);
186
+ padding: 3px 12px;
187
+ border-radius: 999px;
188
+ background: color-mix(in srgb, var(--pmfa-c-bg) 92%, transparent);
189
+ box-shadow: var(--pmfa-c-bubble-shadow);
190
+ color: var(--pmfa-c-muted);
191
+ font-size: 0.75em;
192
+ font-weight: 600;
193
+ -webkit-backdrop-filter: blur(8px);
194
+ backdrop-filter: blur(8px);
195
+ }
196
+ .pmfa-items > .pmfa-date:first-child { margin-top: 0; }
197
+ .pmfa-items > .pmfa-msg { max-width: min(82%, 36em); outline: none; border-radius: var(--pmfa-r-bubble); }
198
+ .pmfa-items > .pmfa-msg-in { align-self: flex-start; align-items: flex-start; }
199
+ .pmfa-items > .pmfa-msg-out { align-self: flex-end; align-items: flex-end; }
200
+ .pmfa-items > .pmfa-msg-start { margin-top: 10px; }
201
+ .pmfa-items > .pmfa-date + .pmfa-msg-start { margin-top: 0; }
202
+ .pmfa-row {
203
+ display: flex;
204
+ align-items: center;
205
+ gap: 2px;
206
+ max-width: 100%;
207
+ min-width: 0;
208
+ }
209
+ .pmfa-msg-out .pmfa-row { flex-direction: row-reverse; }
210
+ .pmfa-bubble {
211
+ display: flex;
212
+ flex-direction: column;
213
+ gap: 6px;
214
+ min-width: 0;
215
+ padding: 7px 12px 8px;
216
+ border-radius: var(--pmfa-r-bubble);
217
+ background: var(--pmfa-c-in);
218
+ box-shadow: var(--pmfa-c-bubble-shadow);
219
+ color: var(--pmfa-c-fg);
220
+ overflow-wrap: anywhere;
221
+ }
222
+ .pmfa-bubble:has(> .pmfa-atts:first-child) { padding-top: 4px; }
223
+ .pmfa-bubble:has(.pmfa-att-media) { max-width: 268px; padding-inline: 4px; }
224
+ .pmfa-bubble:has(.pmfa-att-media) > .pmfa-text { padding-inline: 8px; }
225
+ .pmfa-bubble:has(> .pmfa-atts:only-child) { padding: 4px; }
226
+ .pmfa-text { white-space: pre-wrap; }
227
+ .pmfa-msg-in:not(.pmfa-msg-start) .pmfa-bubble { border-start-start-radius: 6px; }
228
+ .pmfa-msg-in:not(.pmfa-msg-end) .pmfa-bubble { border-end-start-radius: 6px; }
229
+ .pmfa-msg-in.pmfa-msg-end .pmfa-bubble { border-end-start-radius: 4px; }
230
+ .pmfa-msg-out:not(.pmfa-msg-start) .pmfa-bubble { border-start-end-radius: 6px; }
231
+ .pmfa-msg-out:not(.pmfa-msg-end) .pmfa-bubble { border-end-end-radius: 6px; }
232
+ .pmfa-msg-out.pmfa-msg-end .pmfa-bubble { border-end-end-radius: 4px; }
233
+ .pmfa-msg-out .pmfa-bubble {
234
+ background: var(--pmfa-c-out);
235
+ box-shadow: none;
236
+ color: var(--pmfa-c-on-out);
237
+ }
238
+ .pmfa-msg-out .pmfa-bubble a { color: inherit; }
239
+ .pmfa-msg-failed .pmfa-bubble {
240
+ background: color-mix(in srgb, var(--pmfa-c-danger) 12%, var(--pmfa-c-bg));
241
+ color: var(--pmfa-c-fg);
242
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--pmfa-c-danger) 50%, transparent);
243
+ }
244
+ .pmfa-msg-flash .pmfa-bubble { animation: pmfa-flash 1.2s ease-out; }
245
+ @keyframes pmfa-flash {
246
+ 0%, 30% { box-shadow: 0 0 0 3px color-mix(in srgb, var(--pmfa-c-primary) 55%, transparent); }
247
+ }
248
+ .pmfa-meta {
249
+ display: inline-flex;
250
+ align-items: center;
251
+ gap: 4px;
252
+ min-height: 16px;
253
+ margin: 3px 8px 0;
254
+ color: var(--pmfa-c-muted);
255
+ font-size: 0.6875em;
256
+ font-variant-numeric: tabular-nums;
257
+ }
258
+ .pmfa-msg:not(.pmfa-msg-end):not(.pmfa-msg-failed):not(.pmfa-msg-pending) > .pmfa-meta {
259
+ position: absolute;
260
+ width: 1px;
261
+ height: 1px;
262
+ min-height: 0;
263
+ margin: -1px;
264
+ overflow: hidden;
265
+ clip-path: inset(50%);
266
+ }
267
+ .pmfa-meta .pmfa-status { width: 14px; height: 14px; }
268
+ .pmfa-msg-sent .pmfa-status { color: var(--pmfa-c-link); }
269
+ .pmfa-msg-failed .pmfa-meta { color: var(--pmfa-c-danger); font-weight: 600; }
270
+ .pmfa-msg-error { margin: 2px 8px 0; color: var(--pmfa-c-danger); font-size: 0.75em; }
271
+
272
+ /* Reply quote */
273
+ .pmfa-quote {
274
+ appearance: none;
275
+ display: flex;
276
+ flex-direction: column;
277
+ align-items: flex-start;
278
+ gap: 1px;
279
+ max-width: 100%;
280
+ min-width: 0;
281
+ min-height: 40px;
282
+ margin: 0 0 -10px;
283
+ padding: 5px 12px 14px;
284
+ border: 0;
285
+ border-inline-start: 3px solid var(--pmfa-c-primary);
286
+ border-radius: 12px 12px 0 0;
287
+ background: color-mix(in srgb, var(--pmfa-c-fg) 7%, var(--pmfa-c-chat));
288
+ color: var(--pmfa-c-fg);
289
+ font: inherit;
290
+ font-size: 0.8125em;
291
+ text-align: start;
292
+ cursor: pointer;
293
+ }
294
+ .pmfa-quote:hover { background: color-mix(in srgb, var(--pmfa-c-fg) 11%, var(--pmfa-c-chat)); }
295
+ .pmfa-quote-name { color: var(--pmfa-c-link); font-weight: 650; font-size: 0.9375em; }
296
+ .pmfa-quote-text {
297
+ display: -webkit-box;
298
+ -webkit-box-orient: vertical;
299
+ -webkit-line-clamp: 2;
300
+ overflow: hidden;
301
+ color: color-mix(in srgb, var(--pmfa-c-fg) 80%, var(--pmfa-c-bg));
302
+ white-space: pre-wrap;
303
+ overflow-wrap: anywhere;
304
+ }
305
+ .pmfa-quote + .pmfa-row .pmfa-bubble { position: relative; }
306
+
307
+ /* Message actions */
308
+ .pmfa-actions-msg {
309
+ display: flex;
310
+ flex: none;
311
+ opacity: 0;
312
+ transition: opacity 120ms ease;
313
+ }
314
+ .pmfa-msg:hover .pmfa-actions-msg,
315
+ .pmfa-msg:focus-within .pmfa-actions-msg,
316
+ .pmfa-msg-failed .pmfa-actions-msg { opacity: 1; }
317
+ @media (hover: none), (pointer: coarse) {
318
+ .pmfa-actions-msg { opacity: 1; }
319
+ }
320
+ .pmfa-actions-msg .pmfa-btn-icon .pmfa-icon { width: 18px; height: 18px; }
321
+ .pmfa-action-retry { color: var(--pmfa-c-danger); }
322
+
323
+ /* Attachments */
324
+ .pmfa-atts { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
325
+ .pmfa-att {
326
+ display: flex;
327
+ align-items: center;
328
+ gap: 10px;
329
+ min-width: 0;
330
+ min-height: 44px;
331
+ color: inherit;
332
+ text-decoration: none;
333
+ border-radius: 12px;
334
+ }
335
+ .pmfa-att-media {
336
+ display: block;
337
+ overflow: hidden;
338
+ background: color-mix(in srgb, var(--pmfa-c-fg) 8%, transparent);
339
+ }
340
+ .pmfa-att-media { border-radius: 14px; }
341
+ .pmfa-att-media img {
342
+ display: block;
343
+ width: 260px;
344
+ max-width: 100%;
345
+ height: auto;
346
+ max-height: 320px;
347
+ aspect-ratio: 4 / 3;
348
+ object-fit: cover;
349
+ }
350
+ .pmfa-att-file {
351
+ padding-block: 8px;
352
+ padding-inline: 8px 12px;
353
+ background: color-mix(in srgb, currentColor 9%, transparent);
354
+ }
355
+ a.pmfa-att-file:hover { background: color-mix(in srgb, currentColor 15%, transparent); }
356
+ .pmfa-att-icon {
357
+ display: grid;
358
+ place-items: center;
359
+ flex: none;
360
+ width: 36px;
361
+ height: 36px;
362
+ border-radius: 10px;
363
+ background: color-mix(in srgb, currentColor 14%, transparent);
364
+ }
365
+ .pmfa-att-body { display: flex; flex-direction: column; min-width: 0; line-height: 1.3; }
366
+ .pmfa-att-name {
367
+ overflow: hidden;
368
+ font-size: 0.875em;
369
+ font-weight: 600;
370
+ text-overflow: ellipsis;
371
+ white-space: nowrap;
372
+ }
373
+ .pmfa-att-size { font-size: 0.75em; opacity: 0.85; font-variant-numeric: tabular-nums; }
374
+
375
+ /* Composer */
376
+ .pmfa-composer {
377
+ position: relative;
378
+ display: flex;
379
+ flex-direction: column;
380
+ gap: var(--pmfa-s-s);
381
+ margin: 0;
382
+ padding: var(--pmfa-s-s);
383
+ border-top: 1px solid var(--pmfa-c-border);
384
+ background: var(--pmfa-c-bg);
385
+ }
386
+ .pmfa-composer-row { display: flex; align-items: flex-end; gap: 6px; }
387
+ .pmfa-composer .pmfa-input {
388
+ flex: 1;
389
+ min-width: 0;
390
+ min-height: 40px;
391
+ border-radius: 20px;
392
+ padding: 8px 16px;
393
+ background: var(--pmfa-c-surface);
394
+ border-color: transparent;
395
+ line-height: 1.45;
396
+ resize: none;
397
+ field-sizing: content;
398
+ }
399
+ .pmfa-composer .pmfa-input:hover { border-color: var(--pmfa-c-border); }
400
+ .pmfa-composer .pmfa-input:focus-visible { outline-offset: 0; background: var(--pmfa-c-bg); border-color: var(--pmfa-c-border); }
401
+ .pmfa-composer .pmfa-btn { flex: none; }
402
+ .pmfa-send .pmfa-icon { width: 20px; height: 20px; stroke-width: 2.4; }
403
+ .pmfa-composer-standalone {
404
+ border: 1px solid var(--pmfa-c-border);
405
+ border-radius: var(--pmfa-r-l);
406
+ }
407
+ .pmfa-composer[data-dragging] {
408
+ outline: 2px dashed var(--pmfa-c-primary);
409
+ outline-offset: -4px;
410
+ background: color-mix(in srgb, var(--pmfa-c-primary) 8%, var(--pmfa-c-bg));
411
+ }
412
+ .pmfa-drop-hint {
413
+ position: absolute;
414
+ inset: 0;
415
+ z-index: 1;
416
+ display: none;
417
+ place-items: center;
418
+ border-radius: inherit;
419
+ background: color-mix(in srgb, var(--pmfa-c-bg) 80%, transparent);
420
+ color: var(--pmfa-c-link);
421
+ font-size: 0.875em;
422
+ font-weight: 650;
423
+ pointer-events: none;
424
+ }
425
+ .pmfa-composer[data-dragging] .pmfa-drop-hint { display: grid; }
426
+ .pmfa-reply-banner {
427
+ display: flex;
428
+ align-items: center;
429
+ gap: var(--pmfa-s-s);
430
+ min-width: 0;
431
+ padding-block: 4px;
432
+ padding-inline: 12px 4px;
433
+ border-inline-start: 3px solid var(--pmfa-c-primary);
434
+ border-radius: 10px;
435
+ background: var(--pmfa-c-surface);
436
+ }
437
+ .pmfa-reply-body { display: flex; flex: 1; flex-direction: column; min-width: 0; font-size: 0.8125em; line-height: 1.3; }
438
+ .pmfa-reply-name { color: var(--pmfa-c-link); font-weight: 650; }
439
+ .pmfa-reply-text { overflow: hidden; color: var(--pmfa-c-muted); text-overflow: ellipsis; white-space: nowrap; }
440
+ .pmfa-chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 0; padding: 0; list-style: none; }
441
+ .pmfa-chip {
442
+ display: flex;
443
+ align-items: center;
444
+ gap: 8px;
445
+ max-width: 100%;
446
+ min-width: 0;
447
+ padding-block: 4px;
448
+ padding-inline: 10px 2px;
449
+ border: 1px solid var(--pmfa-c-border);
450
+ border-radius: 12px;
451
+ background: var(--pmfa-c-bg);
452
+ font-size: 0.8125em;
453
+ }
454
+ .pmfa-chip .pmfa-icon { width: 18px; height: 18px; color: var(--pmfa-c-muted); }
455
+ .pmfa-chip-body { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
456
+ .pmfa-chip-name { overflow: hidden; max-width: 18ch; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
457
+ .pmfa-chip-status { color: var(--pmfa-c-muted); font-size: 0.875em; }
458
+ .pmfa-chip-failed { border-color: color-mix(in srgb, var(--pmfa-c-danger) 55%, transparent); }
459
+ .pmfa-chip-failed .pmfa-chip-status, .pmfa-chip-failed .pmfa-icon { color: var(--pmfa-c-danger); }
460
+ .pmfa-progress {
461
+ position: relative;
462
+ width: 100%;
463
+ min-width: 72px;
464
+ height: 4px;
465
+ overflow: hidden;
466
+ border-radius: 999px;
467
+ background: color-mix(in srgb, var(--pmfa-c-fg) 12%, transparent);
468
+ }
469
+ .pmfa-progress > span {
470
+ display: block;
471
+ height: 100%;
472
+ border-radius: inherit;
473
+ background: var(--pmfa-c-primary);
474
+ transition: width 160ms ease;
475
+ }
476
+ .pmfa-composer > .pmfa-error { padding-inline: 8px; }
477
+ .pmfa-composer-row { align-items: flex-end; gap: 2px; }
478
+ .pmfa-composer-actions { display: flex; flex: none; align-items: center; gap: 2px; min-height: 40px; }
479
+ .pmfa-composer-actions:empty { display: none; }
480
+ .pmfa-composer-actions > * { flex: none; }
481
+ .pmfa-composer .pmfa-input {
482
+ margin-inline: 4px;
483
+ max-height: calc(var(--pmfa-composer-max-rows, 8) * 1.45em + 18px);
484
+ overflow-y: auto;
485
+ }
486
+ .pmfa-composer .pmfa-btn-ghost[aria-expanded="true"] { color: var(--pmfa-c-primary); background: var(--pmfa-c-surface); }
487
+ .pmfa-send, .pmfa-voice { transition: transform 140ms ease, background-color 120ms ease; }
488
+ .pmfa-voice { color: var(--pmfa-c-muted); }
489
+ .pmfa-composer-row[hidden], .pmfa-recording[hidden] { display: none; }
490
+ @media (max-width: 360px) {
491
+ .pmfa-composer { padding-inline: 4px; }
492
+ .pmfa-composer .pmfa-input { margin-inline: 2px; padding-inline: 12px; }
493
+ }
494
+
495
+ /* Recording bar */
496
+ .pmfa-recording {
497
+ display: flex;
498
+ align-items: center;
499
+ gap: 6px;
500
+ min-height: 40px;
501
+ min-width: 0;
502
+ }
503
+ .pmfa-recording-status {
504
+ display: flex;
505
+ flex: 1;
506
+ align-items: center;
507
+ gap: 10px;
508
+ min-width: 0;
509
+ min-height: 40px;
510
+ padding-inline: 14px;
511
+ border-radius: 20px;
512
+ background: var(--pmfa-c-surface);
513
+ }
514
+ .pmfa-rec-dot {
515
+ flex: none;
516
+ width: 10px;
517
+ height: 10px;
518
+ border-radius: 50%;
519
+ background: var(--pmfa-c-danger);
520
+ animation: pmfa-rec-pulse 1.2s ease-in-out infinite;
521
+ }
522
+ @keyframes pmfa-rec-pulse { 50% { opacity: 0.25; } }
523
+ .pmfa-rec-time { flex: none; min-width: 4ch; font-size: 0.9375em; font-variant-numeric: tabular-nums; }
524
+ .pmfa-rec-level {
525
+ display: flex;
526
+ flex: 1;
527
+ align-items: center;
528
+ gap: 3px;
529
+ min-width: 0;
530
+ height: 24px;
531
+ overflow: hidden;
532
+ }
533
+ .pmfa-rec-level > span {
534
+ flex: 0 0 3px;
535
+ height: 100%;
536
+ border-radius: 2px;
537
+ background: color-mix(in srgb, var(--pmfa-c-muted) 70%, transparent);
538
+ transform: scaleY(var(--pmfa-level, 0.12));
539
+ transition: transform 80ms linear;
540
+ }
541
+ .pmfa-recording .pmfa-rec-cancel { color: var(--pmfa-c-danger); }
542
+
543
+ /* Popovers */
544
+ .pmfa-popover {
545
+ position: fixed;
546
+ z-index: 2147483600;
547
+ display: flex;
548
+ flex-direction: column;
549
+ top: var(--pmfa-pop-top, auto);
550
+ left: var(--pmfa-pop-left, auto);
551
+ max-height: var(--pmfa-pop-max, 420px);
552
+ border: 1px solid var(--pmfa-c-border);
553
+ border-radius: 14px;
554
+ background: var(--pmfa-c-bg);
555
+ color: var(--pmfa-c-fg);
556
+ box-shadow: 0 12px 32px rgb(0 0 0 / 0.18), 0 2px 6px rgb(0 0 0 / 0.08);
557
+ overflow: hidden;
558
+ animation: pmfa-pop 140ms ease-out;
559
+ }
560
+ .pmfa-popover:focus { outline: none; }
561
+ .pmfa-popover[data-measuring] { visibility: hidden; animation: none; }
562
+ .pmfa-popover[data-placement="bottom"] { animation-name: pmfa-pop-down; }
563
+ @keyframes pmfa-pop { from { opacity: 0; transform: translateY(6px) scale(0.98); } }
564
+ @keyframes pmfa-pop-down { from { opacity: 0; transform: translateY(-6px) scale(0.98); } }
565
+ .pmfa-emoji {
566
+ width: 360px;
567
+ height: 400px;
568
+ }
569
+ .pmfa-emoji-search {
570
+ position: relative;
571
+ flex: none;
572
+ padding: 10px 10px 6px;
573
+ }
574
+ .pmfa-emoji-search .pmfa-icon {
575
+ position: absolute;
576
+ inset-inline-start: 22px;
577
+ top: 50%;
578
+ width: 16px;
579
+ height: 16px;
580
+ margin-top: 2px;
581
+ transform: translateY(-50%);
582
+ color: var(--pmfa-c-muted);
583
+ pointer-events: none;
584
+ }
585
+ .pmfa-emoji-search .pmfa-input {
586
+ min-height: 36px;
587
+ padding-block: 6px;
588
+ padding-inline: 36px 12px;
589
+ border-color: transparent;
590
+ border-radius: 10px;
591
+ background: var(--pmfa-c-surface);
592
+ font-size: max(16px, 0.875em);
593
+ }
594
+ .pmfa-emoji-search .pmfa-input:focus-visible { outline-offset: 0; background: var(--pmfa-c-bg); }
595
+ .pmfa-emoji-tabs {
596
+ display: flex;
597
+ flex: none;
598
+ gap: 2px;
599
+ padding: 0 6px;
600
+ border-bottom: 1px solid var(--pmfa-c-border);
601
+ overflow-x: auto;
602
+ scrollbar-width: none;
603
+ }
604
+ .pmfa-emoji-tab {
605
+ appearance: none;
606
+ position: relative;
607
+ display: grid;
608
+ flex: 1 0 34px;
609
+ place-items: center;
610
+ min-width: 34px;
611
+ height: 40px;
612
+ padding: 0;
613
+ border: 0;
614
+ background: none;
615
+ font-size: 18px;
616
+ line-height: 1;
617
+ cursor: pointer;
618
+ filter: grayscale(1);
619
+ opacity: 0.6;
620
+ transition: opacity 120ms ease, filter 120ms ease;
621
+ }
622
+ .pmfa-emoji-tab:hover { opacity: 0.9; }
623
+ .pmfa-emoji-tab[aria-selected="true"] { filter: none; opacity: 1; }
624
+ .pmfa-emoji-tab[aria-selected="true"]::after {
625
+ content: "";
626
+ position: absolute;
627
+ inset-inline: 6px;
628
+ bottom: 0;
629
+ height: 3px;
630
+ border-radius: 3px 3px 0 0;
631
+ background: var(--pmfa-c-primary);
632
+ }
633
+ .pmfa-emoji-tab:focus-visible, .pmfa-emoji-cell:focus-visible, .pmfa-qr-option:focus-visible {
634
+ outline: 2px solid var(--pmfa-c-primary);
635
+ outline-offset: -2px;
636
+ }
637
+ .pmfa-emoji-body { flex: 1; min-height: 0; padding: 6px 8px 8px; overflow-y: auto; overscroll-behavior: contain; }
638
+ .pmfa-emoji-heading {
639
+ margin: 4px 4px 6px;
640
+ color: var(--pmfa-c-muted);
641
+ font-size: 0.75em;
642
+ font-weight: 650;
643
+ }
644
+ .pmfa-emoji-grid { display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); gap: 2px; }
645
+ .pmfa-emoji-cell {
646
+ appearance: none;
647
+ display: grid;
648
+ place-items: center;
649
+ aspect-ratio: 1;
650
+ min-width: 36px;
651
+ min-height: 36px;
652
+ padding: 0;
653
+ border: 0;
654
+ border-radius: 10px;
655
+ background: none;
656
+ font-family: "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", sans-serif;
657
+ font-size: 24px;
658
+ line-height: 1;
659
+ cursor: pointer;
660
+ transition: background-color 80ms ease, transform 80ms ease;
661
+ }
662
+ .pmfa-emoji-cell:hover, .pmfa-emoji-cell:focus-visible { background: var(--pmfa-c-surface); }
663
+ .pmfa-emoji-cell:active { transform: scale(0.9); }
664
+ .pmfa-emoji-empty { margin: 32px 12px; color: var(--pmfa-c-muted); font-size: 0.875em; text-align: center; }
665
+ @media (max-width: 600px) {
666
+ .pmfa-popover.pmfa-emoji {
667
+ top: auto;
668
+ right: 0;
669
+ bottom: 0;
670
+ left: 0;
671
+ width: 100%;
672
+ height: min(360px, 60vh);
673
+ max-height: 60vh;
674
+ padding-bottom: env(safe-area-inset-bottom);
675
+ border-width: 1px 0 0;
676
+ border-radius: 16px 16px 0 0;
677
+ animation-name: pmfa-sheet;
678
+ }
679
+ .pmfa-emoji::before {
680
+ content: "";
681
+ flex: none;
682
+ align-self: center;
683
+ width: 36px;
684
+ height: 4px;
685
+ margin-top: 8px;
686
+ border-radius: 2px;
687
+ background: var(--pmfa-c-border);
688
+ }
689
+ .pmfa-emoji-grid { grid-template-columns: repeat(auto-fill, minmax(40px, 1fr)); }
690
+ }
691
+ @media (max-width: 360px) {
692
+ .pmfa-emoji-tab { flex-basis: 28px; min-width: 28px; font-size: 16px; }
693
+ }
694
+ @keyframes pmfa-sheet { from { transform: translateY(100%); } }
695
+
696
+ /* Quick replies */
697
+ .pmfa-qr {
698
+ position: absolute;
699
+ inset-inline: 8px;
700
+ bottom: calc(100% + 4px);
701
+ z-index: 3;
702
+ max-height: min(280px, 50vh);
703
+ margin: 0;
704
+ padding: 6px;
705
+ list-style: none;
706
+ overflow-y: auto;
707
+ overscroll-behavior: contain;
708
+ border: 1px solid var(--pmfa-c-border);
709
+ border-radius: 12px;
710
+ background: var(--pmfa-c-bg);
711
+ box-shadow: 0 10px 28px rgb(0 0 0 / 0.16);
712
+ animation: pmfa-pop 120ms ease-out;
713
+ }
714
+ .pmfa-qr ul { margin: 0; padding: 0; list-style: none; }
715
+ .pmfa-qr-title { padding: 4px 10px 6px; color: var(--pmfa-c-muted); font-size: 0.75em; font-weight: 650; }
716
+ .pmfa-qr-option {
717
+ display: flex;
718
+ flex-direction: column;
719
+ gap: 1px;
720
+ min-height: 44px;
721
+ justify-content: center;
722
+ padding: 6px 10px;
723
+ border-radius: 8px;
724
+ cursor: pointer;
725
+ }
726
+ .pmfa-qr-option[aria-selected="true"] { background: color-mix(in srgb, var(--pmfa-c-primary) 12%, var(--pmfa-c-bg)); }
727
+ .pmfa-qr-head { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
728
+ .pmfa-qr-shortcut { flex: none; color: var(--pmfa-c-link); font-weight: 650; font-size: 0.875em; }
729
+ .pmfa-qr-description { overflow: hidden; color: var(--pmfa-c-muted); font-size: 0.75em; text-overflow: ellipsis; white-space: nowrap; }
730
+ .pmfa-qr-text {
731
+ overflow: hidden;
732
+ color: color-mix(in srgb, var(--pmfa-c-fg) 85%, var(--pmfa-c-bg));
733
+ font-size: 0.8125em;
734
+ text-overflow: ellipsis;
735
+ white-space: nowrap;
736
+ }
737
+
738
+ /* Drawer */
739
+ .pmfa-drawer {
740
+ position: fixed;
741
+ inset-block: 0;
742
+ inset-inline-end: 0;
743
+ z-index: 2147483000;
744
+ display: flex;
745
+ flex-direction: column;
746
+ width: min(var(--pmfa-drawer-width, 400px), 100%);
747
+ margin: 0;
748
+ padding: 0;
749
+ border-radius: 0;
750
+ background: var(--pmfa-c-bg);
751
+ border-inline-start: 1px solid var(--pmfa-c-border);
752
+ box-shadow: var(--pmfa-shadow-panel, 0 18px 50px rgb(23 21 31 / 0.16));
753
+ animation: pmfa-slide 180ms ease-out;
754
+ }
755
+ .pmfa-drawer:focus { outline: none; }
756
+ .pmfa-drawer-header {
757
+ display: flex;
758
+ align-items: center;
759
+ justify-content: space-between;
760
+ gap: var(--pmfa-s-s);
761
+ min-height: 56px;
762
+ padding-block: max(8px, env(safe-area-inset-top)) 8px;
763
+ padding-inline: var(--pmfa-s-l) 8px;
764
+ border-bottom: 1px solid var(--pmfa-c-border);
765
+ background: var(--pmfa-c-bg);
766
+ }
767
+ .pmfa-drawer-title { margin: 0; font-size: 1.0625em; font-weight: 650; }
768
+ .pmfa-drawer .pmfa-list { flex: 1; min-height: 0; }
769
+ .pmfa-drawer-footer { padding-bottom: env(safe-area-inset-bottom); background: var(--pmfa-c-bg); }
770
+ .pmfa-drawer-footer:empty { display: none; }
771
+ .pmfa-drawer-footer .pmfa-composer { border-top: 1px solid var(--pmfa-c-border); }
772
+ .pmfa-drawer > .pmfa-error { padding: var(--pmfa-s-s) var(--pmfa-s-l); }
773
+ @keyframes pmfa-slide { from { transform: translateX(24px); opacity: 0; } }
774
+ [dir="rtl"] .pmfa-drawer, .pmfa-drawer:dir(rtl) { animation-name: pmfa-slide-rtl; }
775
+ @keyframes pmfa-slide-rtl { from { transform: translateX(-24px); opacity: 0; } }
776
+ @media (max-width: 600px) {
777
+ .pmfa-drawer { width: 100%; border-inline-start: 0; }
778
+ }
779
+
780
+ /* Template builder */
781
+ .pmfa-tb {
782
+ container-type: inline-size;
783
+ padding: var(--pmfa-s-l);
784
+ border: 1px solid var(--pmfa-c-border);
785
+ border-radius: var(--pmfa-r-l);
786
+ background: var(--pmfa-c-bg);
787
+ }
788
+ .pmfa-tb-title { margin: 0 0 var(--pmfa-s-m); font-size: 1.125em; font-weight: 650; }
789
+ .pmfa-tb-grid { display: grid; gap: var(--pmfa-s-l); grid-template-columns: minmax(0, 1fr); }
790
+ @container (min-width: 680px) {
791
+ .pmfa-tb-grid { grid-template-columns: minmax(0, 1.25fr) minmax(260px, 1fr); }
792
+ .pmfa-tb-aside { position: sticky; top: var(--pmfa-s-m); align-self: start; }
793
+ }
794
+ .pmfa-tb-form { display: flex; flex-direction: column; gap: var(--pmfa-s-m); min-width: 0; }
795
+ .pmfa-field { display: flex; flex-direction: column; gap: 4px; margin: 0; padding: 0; border: 0; min-width: 0; }
796
+ .pmfa-label, .pmfa-field > legend {
797
+ padding: 0;
798
+ color: var(--pmfa-c-muted);
799
+ font-size: 0.8125em;
800
+ font-weight: 600;
801
+ }
802
+ .pmfa-field > legend { margin-bottom: 4px; }
803
+ .pmfa-pairs { display: grid; gap: var(--pmfa-s-s); grid-template-columns: repeat(auto-fit, minmax(min(100%, 180px), 1fr)); }
804
+ .pmfa-pair { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
805
+ .pmfa-pair > span { font-size: 0.75em; color: var(--pmfa-c-muted); font-family: ui-monospace, monospace; }
806
+ .pmfa-actions {
807
+ display: flex;
808
+ flex-wrap: wrap;
809
+ gap: var(--pmfa-s-s);
810
+ padding-top: var(--pmfa-s-s);
811
+ }
812
+ .pmfa-actions .pmfa-btn-primary { margin-inline-end: auto; }
813
+ @container (max-width: 420px) {
814
+ .pmfa-actions .pmfa-btn { flex: 1 1 100%; }
815
+ }
816
+ .pmfa-tb-aside {
817
+ display: flex;
818
+ flex-direction: column;
819
+ gap: var(--pmfa-s-s);
820
+ padding: var(--pmfa-s-m);
821
+ border-radius: var(--pmfa-r-m);
822
+ background: var(--pmfa-c-chat);
823
+ min-width: 0;
824
+ }
825
+ .pmfa-hint { margin: auto 0; padding: var(--pmfa-s-l) var(--pmfa-s-s); color: var(--pmfa-c-muted); font-size: 0.875em; text-align: center; }
826
+ .pmfa-preview {
827
+ display: flex;
828
+ flex-direction: column;
829
+ gap: 4px;
830
+ max-width: 320px;
831
+ width: 100%;
832
+ align-self: flex-start;
833
+ }
834
+ .pmfa-preview-bubble, .pmfa-preview-card {
835
+ display: flex;
836
+ flex-direction: column;
837
+ gap: 4px;
838
+ padding: 8px 10px;
839
+ border-radius: 12px;
840
+ border-start-start-radius: 4px;
841
+ background: var(--pmfa-c-in);
842
+ box-shadow: var(--pmfa-c-bubble-shadow);
843
+ overflow-wrap: anywhere;
844
+ }
845
+ .pmfa-preview-header { font-weight: 700; }
846
+ .pmfa-preview-body { margin: 0; white-space: pre-wrap; font-size: 0.9375em; }
847
+ .pmfa-preview-footer { color: var(--pmfa-c-muted); font-size: 0.8125em; }
848
+ .pmfa-preview-button {
849
+ display: block;
850
+ padding: 8px;
851
+ border-radius: 10px;
852
+ background: var(--pmfa-c-in);
853
+ box-shadow: var(--pmfa-c-bubble-shadow);
854
+ color: var(--pmfa-c-link);
855
+ font-size: 0.875em;
856
+ font-weight: 600;
857
+ text-align: center;
858
+ }
859
+ .pmfa-preview-cards { display: flex; gap: 6px; overflow-x: auto; scroll-snap-type: x mandatory; }
860
+ .pmfa-preview-card { flex: 0 0 80%; scroll-snap-align: start; }
861
+
862
+ /* Inbox */
863
+ .pmfa-inbox {
864
+ container-type: inline-size;
865
+ position: relative;
866
+ display: grid;
867
+ grid-template-columns: minmax(260px, 340px) minmax(0, 1fr);
868
+ grid-template-rows: minmax(0, 1fr);
869
+ height: 100%;
870
+ min-height: 420px;
871
+ overflow: hidden;
872
+ border: 1px solid var(--pmfa-c-border);
873
+ border-radius: var(--pmfa-r-l);
874
+ background: var(--pmfa-c-bg);
875
+ }
876
+ .pmfa-inbox[data-contact-open] { grid-template-columns: minmax(260px, 340px) minmax(0, 1fr) minmax(240px, 300px); }
877
+ .pmfa-inbox-list {
878
+ display: flex;
879
+ flex-direction: column;
880
+ min-width: 0;
881
+ min-height: 0;
882
+ border-inline-end: 1px solid var(--pmfa-c-border);
883
+ background: var(--pmfa-c-bg);
884
+ }
885
+ .pmfa-inbox-head {
886
+ display: flex;
887
+ flex-direction: column;
888
+ gap: var(--pmfa-s-s);
889
+ padding: var(--pmfa-s-m) var(--pmfa-s-m) var(--pmfa-s-s);
890
+ }
891
+ .pmfa-inbox-title { margin: 0; padding-inline: 4px; font-size: 1.25em; font-weight: 700; letter-spacing: -0.01em; }
892
+ .pmfa-search { position: relative; display: flex; align-items: center; }
893
+ .pmfa-search .pmfa-icon {
894
+ position: absolute;
895
+ inset-inline-start: 11px;
896
+ width: 16px;
897
+ height: 16px;
898
+ color: var(--pmfa-c-muted);
899
+ pointer-events: none;
900
+ }
901
+ .pmfa-search .pmfa-input {
902
+ min-height: 38px;
903
+ padding-inline-start: 34px;
904
+ border-color: transparent;
905
+ border-radius: 999px;
906
+ background: var(--pmfa-c-surface);
907
+ font-size: 0.9375em;
908
+ }
909
+ .pmfa-search .pmfa-input:focus-visible { outline-offset: 0; background: var(--pmfa-c-bg); border-color: var(--pmfa-c-border); }
910
+ .pmfa-convs {
911
+ flex: 1;
912
+ min-height: 0;
913
+ margin: 0;
914
+ padding: 0 6px 6px;
915
+ overflow-y: auto;
916
+ overscroll-behavior: contain;
917
+ list-style: none;
918
+ }
919
+ .pmfa-conv {
920
+ appearance: none;
921
+ display: grid;
922
+ grid-template-columns: auto minmax(0, 1fr) auto;
923
+ grid-template-areas: "avatar name time" "avatar preview badge";
924
+ column-gap: 12px;
925
+ row-gap: 2px;
926
+ align-items: center;
927
+ width: 100%;
928
+ min-height: 68px;
929
+ padding: 10px;
930
+ border: 0;
931
+ border-radius: var(--pmfa-r-m);
932
+ background: transparent;
933
+ color: inherit;
934
+ font: inherit;
935
+ text-align: start;
936
+ cursor: pointer;
937
+ touch-action: manipulation;
938
+ transition: background-color 120ms ease;
939
+ }
940
+ .pmfa-conv:hover { background: var(--pmfa-c-surface); }
941
+ .pmfa-conv:focus-visible { outline: 2px solid var(--pmfa-c-primary); outline-offset: -2px; }
942
+ .pmfa-conv[aria-current="true"] { background: color-mix(in srgb, var(--pmfa-c-primary) 11%, var(--pmfa-c-bg)); }
943
+ .pmfa-conv > .pmfa-avatar { grid-area: avatar; }
944
+ .pmfa-conv-name {
945
+ grid-area: name;
946
+ overflow: hidden;
947
+ font-weight: 600;
948
+ text-overflow: ellipsis;
949
+ white-space: nowrap;
950
+ }
951
+ .pmfa-conv-time {
952
+ grid-area: time;
953
+ color: var(--pmfa-c-muted);
954
+ font-size: 0.75em;
955
+ font-variant-numeric: tabular-nums;
956
+ white-space: nowrap;
957
+ }
958
+ .pmfa-conv-preview {
959
+ grid-area: preview;
960
+ overflow: hidden;
961
+ color: var(--pmfa-c-muted);
962
+ font-size: 0.875em;
963
+ text-overflow: ellipsis;
964
+ white-space: nowrap;
965
+ }
966
+ .pmfa-conv[data-unread] .pmfa-conv-name { font-weight: 700; }
967
+ .pmfa-conv[data-unread] .pmfa-conv-time { color: var(--pmfa-c-primary); font-weight: 600; }
968
+ .pmfa-conv[data-unread] .pmfa-conv-preview { color: var(--pmfa-c-fg); }
969
+ .pmfa-badge {
970
+ grid-area: badge;
971
+ justify-self: end;
972
+ min-width: 20px;
973
+ height: 20px;
974
+ padding: 0 6px;
975
+ border-radius: 999px;
976
+ background: var(--pmfa-c-primary);
977
+ color: var(--pmfa-c-on-out);
978
+ font-size: 0.6875em;
979
+ font-weight: 700;
980
+ line-height: 20px;
981
+ text-align: center;
982
+ font-variant-numeric: tabular-nums;
983
+ }
984
+ .pmfa-avatar {
985
+ display: grid;
986
+ flex: none;
987
+ place-items: center;
988
+ width: 44px;
989
+ height: 44px;
990
+ overflow: hidden;
991
+ border-radius: 999px;
992
+ background: color-mix(in srgb, hsl(var(--pmfa-avatar-hue, 250) 70% 55%) 22%, var(--pmfa-c-bg));
993
+ color: color-mix(in srgb, hsl(var(--pmfa-avatar-hue, 250) 70% 40%) 85%, var(--pmfa-c-fg));
994
+ font-size: 0.9375em;
995
+ font-weight: 650;
996
+ letter-spacing: 0.02em;
997
+ user-select: none;
998
+ }
999
+ .pmfa-avatar img { width: 100%; height: 100%; object-fit: cover; }
1000
+ .pmfa-avatar-s { width: 36px; height: 36px; font-size: 0.8125em; }
1001
+ .pmfa-avatar-l { width: 72px; height: 72px; font-size: 1.375em; }
1002
+ .pmfa-inbox-state {
1003
+ display: flex;
1004
+ flex: 1;
1005
+ flex-direction: column;
1006
+ align-items: center;
1007
+ justify-content: center;
1008
+ gap: var(--pmfa-s-s);
1009
+ padding: var(--pmfa-s-l);
1010
+ color: var(--pmfa-c-muted);
1011
+ font-size: 0.9375em;
1012
+ text-align: center;
1013
+ }
1014
+ .pmfa-inbox-state > .pmfa-icon { width: 32px; height: 32px; opacity: 0.6; }
1015
+ .pmfa-skeleton { display: flex; flex-direction: column; gap: 4px; padding: 0 6px; }
1016
+ .pmfa-skeleton > span {
1017
+ display: block;
1018
+ height: 68px;
1019
+ border-radius: var(--pmfa-r-m);
1020
+ background: linear-gradient(90deg, var(--pmfa-c-surface), color-mix(in srgb, var(--pmfa-c-fg) 9%, var(--pmfa-c-bg)), var(--pmfa-c-surface));
1021
+ background-size: 200% 100%;
1022
+ animation: pmfa-shimmer 1.4s ease-in-out infinite;
1023
+ }
1024
+ @keyframes pmfa-shimmer { from { background-position: 100% 0; } to { background-position: -100% 0; } }
1025
+ .pmfa-thread {
1026
+ display: flex;
1027
+ flex-direction: column;
1028
+ min-width: 0;
1029
+ min-height: 0;
1030
+ background: var(--pmfa-c-chat);
1031
+ }
1032
+ .pmfa-thread > .pmfa-list { flex: 1; min-height: 0; }
1033
+ .pmfa-thread-head {
1034
+ display: flex;
1035
+ align-items: center;
1036
+ gap: 10px;
1037
+ min-height: 60px;
1038
+ padding: 8px 8px 8px var(--pmfa-s-m);
1039
+ border-bottom: 1px solid var(--pmfa-c-border);
1040
+ background: var(--pmfa-c-bg);
1041
+ }
1042
+ .pmfa-thread-who { display: flex; flex: 1; flex-direction: column; min-width: 0; line-height: 1.25; }
1043
+ .pmfa-thread-name { overflow: hidden; font-weight: 650; text-overflow: ellipsis; white-space: nowrap; }
1044
+ .pmfa-thread-sub { overflow: hidden; color: var(--pmfa-c-muted); font-size: 0.8125em; text-overflow: ellipsis; white-space: nowrap; }
1045
+ .pmfa-thread-actions { display: flex; flex: none; align-items: center; gap: 2px; }
1046
+ .pmfa-thread-actions .pmfa-btn-ghost[aria-expanded="true"] { color: var(--pmfa-c-primary); background: var(--pmfa-c-surface); }
1047
+ .pmfa-back { display: none; }
1048
+ .pmfa-back .pmfa-icon { width: 22px; height: 22px; }
1049
+ [dir="rtl"] .pmfa-back .pmfa-icon, .pmfa-back:dir(rtl) .pmfa-icon { transform: scaleX(-1); }
1050
+ .pmfa-thread-foot { border-top: 1px solid var(--pmfa-c-border); background: var(--pmfa-c-bg); }
1051
+ .pmfa-readonly { margin: 0; padding: 14px var(--pmfa-s-l); color: var(--pmfa-c-muted); font-size: 0.875em; text-align: center; }
1052
+ .pmfa-contact {
1053
+ display: flex;
1054
+ flex-direction: column;
1055
+ min-width: 0;
1056
+ min-height: 0;
1057
+ overflow-y: auto;
1058
+ border-inline-start: 1px solid var(--pmfa-c-border);
1059
+ background: var(--pmfa-c-bg);
1060
+ }
1061
+ .pmfa-contact-head {
1062
+ display: flex;
1063
+ align-items: center;
1064
+ justify-content: space-between;
1065
+ min-height: 60px;
1066
+ padding: 8px 8px 8px var(--pmfa-s-l);
1067
+ border-bottom: 1px solid var(--pmfa-c-border);
1068
+ }
1069
+ .pmfa-contact-head h3 { margin: 0; font-size: 1em; font-weight: 650; }
1070
+ .pmfa-contact-card {
1071
+ display: flex;
1072
+ flex-direction: column;
1073
+ align-items: center;
1074
+ gap: 6px;
1075
+ padding: var(--pmfa-s-l) var(--pmfa-s-m);
1076
+ text-align: center;
1077
+ }
1078
+ .pmfa-contact-name { margin: 6px 0 0; font-size: 1.0625em; font-weight: 650; overflow-wrap: anywhere; }
1079
+ .pmfa-contact-phone { color: var(--pmfa-c-muted); font-size: 0.875em; font-variant-numeric: tabular-nums; }
1080
+ .pmfa-contact-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; margin-top: 6px; }
1081
+ .pmfa-contact-fields { display: flex; flex-direction: column; margin: 0; padding: 0 var(--pmfa-s-l) var(--pmfa-s-l); }
1082
+ .pmfa-contact-fields > div { display: flex; flex-direction: column; gap: 2px; padding: 10px 0; border-top: 1px solid var(--pmfa-c-border); }
1083
+ .pmfa-contact-fields dt { color: var(--pmfa-c-muted); font-size: 0.75em; font-weight: 600; }
1084
+ .pmfa-contact-fields dd { margin: 0; font-size: 0.9375em; overflow-wrap: anywhere; }
1085
+ /* Container queries match the inbox's children; the inbox is the container. */
1086
+ @container (max-width: 1023px) {
1087
+ .pmfa-inbox > .pmfa-thread { grid-column: 2 / -1; }
1088
+ .pmfa-inbox .pmfa-contact {
1089
+ position: absolute;
1090
+ inset-block: 0;
1091
+ inset-inline-end: 0;
1092
+ z-index: 2;
1093
+ width: min(320px, 100%);
1094
+ box-shadow: var(--pmfa-shadow-panel, 0 18px 50px rgb(23 21 31 / 0.16));
1095
+ animation: pmfa-slide 180ms ease-out;
1096
+ }
1097
+ }
1098
+ @container (max-width: 699px) {
1099
+ .pmfa-inbox > .pmfa-inbox-list, .pmfa-inbox > .pmfa-thread { grid-column: 1 / -1; grid-row: 1; border-inline-end: 0; }
1100
+ .pmfa-inbox[data-view="thread"] .pmfa-inbox-list { display: none; }
1101
+ .pmfa-inbox[data-view="list"] .pmfa-thread { display: none; }
1102
+ .pmfa-inbox .pmfa-back { display: inline-flex; }
1103
+ .pmfa-inbox .pmfa-contact { width: 100%; border-inline-start: 0; }
1104
+ .pmfa-thread-head { padding-inline-start: 4px; }
1105
+ }
1106
+
1107
+ /* Connect, status, call */
1108
+ .pmfa-connect .pmfa-icon { width: 18px; height: 18px; }
1109
+ .pmfa-connect[aria-busy="true"] { cursor: progress; }
1110
+ .pmfa-session {
1111
+ display: inline-flex;
1112
+ align-items: center;
1113
+ gap: 8px;
1114
+ min-height: 28px;
1115
+ padding: 0 12px 0 10px;
1116
+ border: 1px solid var(--pmfa-c-border);
1117
+ border-radius: 999px;
1118
+ background: var(--pmfa-c-bg);
1119
+ color: var(--pmfa-c-fg);
1120
+ font-size: 0.8125em;
1121
+ font-weight: 600;
1122
+ white-space: nowrap;
1123
+ }
1124
+ .pmfa-session-dot { flex: none; width: 8px; height: 8px; border-radius: 999px; background: var(--pmfa-c-muted); }
1125
+ .pmfa-session[data-status="ready"] .pmfa-session-dot, .pmfa-session[data-status="refreshing"] .pmfa-session-dot { background: var(--pmfa-c-success); box-shadow: 0 0 0 3px color-mix(in srgb, var(--pmfa-c-success) 22%, transparent); }
1126
+ .pmfa-session[data-status="loading"] .pmfa-session-dot, .pmfa-session[data-status="retrying"] .pmfa-session-dot { background: #d9a400; animation: pmfa-pulse 1.2s ease-in-out infinite; }
1127
+ .pmfa-session[data-status="error"] .pmfa-session-dot, .pmfa-session[data-status="unauthenticated"] .pmfa-session-dot { background: var(--pmfa-c-danger); }
1128
+ .pmfa-session .pmfa-btn { min-height: 22px; margin-inline-end: -8px; padding: 0 8px; border-radius: 999px; font-size: 0.9em; }
1129
+ @keyframes pmfa-pulse { 50% { opacity: 0.35; } }
1130
+
1131
+ /* Template manager */
1132
+ .pmfa-tm {
1133
+ container-type: inline-size;
1134
+ display: flex;
1135
+ flex-direction: column;
1136
+ gap: var(--pmfa-s-m);
1137
+ }
1138
+ .pmfa-tm-head { display: flex; align-items: center; justify-content: space-between; gap: var(--pmfa-s-s); }
1139
+ .pmfa-tm-head h2 { margin: 0; font-size: 1.25em; font-weight: 700; }
1140
+ .pmfa-tm-list {
1141
+ display: grid;
1142
+ gap: var(--pmfa-s-s);
1143
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 240px), 1fr));
1144
+ margin: 0;
1145
+ padding: 0;
1146
+ list-style: none;
1147
+ }
1148
+ .pmfa-tm-item {
1149
+ appearance: none;
1150
+ display: flex;
1151
+ flex-direction: column;
1152
+ align-items: flex-start;
1153
+ gap: 6px;
1154
+ width: 100%;
1155
+ height: 100%;
1156
+ padding: var(--pmfa-s-m);
1157
+ border: 1px solid var(--pmfa-c-border);
1158
+ border-radius: var(--pmfa-r-m);
1159
+ background: var(--pmfa-c-bg);
1160
+ color: inherit;
1161
+ font: inherit;
1162
+ text-align: start;
1163
+ cursor: pointer;
1164
+ transition: border-color 120ms ease, box-shadow 120ms ease;
1165
+ }
1166
+ .pmfa-tm-item:hover { border-color: color-mix(in srgb, var(--pmfa-c-primary) 45%, var(--pmfa-c-border)); }
1167
+ .pmfa-tm-item:focus-visible { outline: 2px solid var(--pmfa-c-primary); outline-offset: 2px; }
1168
+ .pmfa-tm-name { font-weight: 650; overflow-wrap: anywhere; }
1169
+ .pmfa-tm-body {
1170
+ display: -webkit-box;
1171
+ overflow: hidden;
1172
+ color: var(--pmfa-c-muted);
1173
+ font-size: 0.875em;
1174
+ -webkit-box-orient: vertical;
1175
+ -webkit-line-clamp: 2;
1176
+ }
1177
+ .pmfa-tm-meta { display: flex; flex-wrap: wrap; gap: 6px; margin-top: auto; }
1178
+ .pmfa-tag {
1179
+ padding: 2px 8px;
1180
+ border-radius: 999px;
1181
+ background: var(--pmfa-c-surface);
1182
+ color: var(--pmfa-c-muted);
1183
+ font-size: 0.6875em;
1184
+ font-weight: 650;
1185
+ letter-spacing: 0.03em;
1186
+ text-transform: uppercase;
1187
+ }
1188
+ .pmfa-tag[data-status="APPROVED"], .pmfa-tag[data-status="approved"] { background: color-mix(in srgb, var(--pmfa-c-success) 15%, var(--pmfa-c-bg)); color: var(--pmfa-c-success); }
1189
+ .pmfa-tag[data-status="REJECTED"], .pmfa-tag[data-status="rejected"] { background: color-mix(in srgb, var(--pmfa-c-danger) 13%, var(--pmfa-c-bg)); color: var(--pmfa-c-danger); }
1190
+
1191
+ @media (prefers-reduced-motion: reduce) {
1192
+ .pmfa *, .pmfa *::before, .pmfa *::after, .pmfa-drawer, .pmfa-popover {
1193
+ animation-duration: 0.01ms !important;
1194
+ transition-duration: 0.01ms !important;
1195
+ scroll-behavior: auto !important;
1196
+ }
1197
+ }
1198
+ }
1199
+ `;
1200
+ const STYLE_TAG_ID = "pmfa-component-styles";
1201
+ /**
1202
+ * Add the shared component stylesheet to a document once. Does nothing
1203
+ * without a document, so server rendering is unaffected.
1204
+ */
1205
+ export function injectComponentStyles(target = globalThis.document) {
1206
+ if (target === undefined)
1207
+ return;
1208
+ if (target.getElementById(STYLE_TAG_ID) !== null)
1209
+ return;
1210
+ const tag = target.createElement("style");
1211
+ tag.id = STYLE_TAG_ID;
1212
+ tag.textContent = COMPONENT_STYLES;
1213
+ target.head.appendChild(tag);
1214
+ }
1215
+ /** Root class names for a component: base class plus the theme modifier. */
1216
+ export function themeClassName(theme) {
1217
+ return theme === "dark"
1218
+ ? "pmfa pmfa-dark"
1219
+ : theme === "system"
1220
+ ? "pmfa pmfa-auto"
1221
+ : "pmfa";
1222
+ }
1223
+ //# sourceMappingURL=styles.js.map