@devchitchat/chat 4.4.3 → 4.4.4
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/package.json +2 -2
- package/pages/public/client/islands/call.js +81 -3
- package/pages/public/client/shared/messages.js +6 -3
- package/pages/public/themes/base.css +409 -259
- package/pages/public/themes/dark.css +37 -16
- package/pages/public/themes/forest.css +13 -3
- package/pages/public/themes/light.css +37 -17
- package/pages/public/themes/ocean.css +13 -3
- package/pages/public/themes/rose.css +13 -3
- package/src/services/MessageService.js +4 -1
|
@@ -9,18 +9,25 @@
|
|
|
9
9
|
input, textarea, select, button { font: inherit; }
|
|
10
10
|
|
|
11
11
|
:root {
|
|
12
|
-
--font-sans:
|
|
13
|
-
--font-mono: 'Cascadia Code', 'Fira Code', 'JetBrains Mono', monospace;
|
|
14
|
-
--font-size:
|
|
15
|
-
--radius-sm:
|
|
16
|
-
--radius-md:
|
|
17
|
-
--radius-lg:
|
|
18
|
-
|
|
19
|
-
--
|
|
12
|
+
--font-sans: -apple-system, 'SF Pro Text', system-ui, 'Segoe UI', sans-serif;
|
|
13
|
+
--font-mono: 'SF Mono', ui-monospace, 'Cascadia Code', 'Fira Code', 'JetBrains Mono', monospace;
|
|
14
|
+
--font-size: 16px;
|
|
15
|
+
--radius-sm: 6px;
|
|
16
|
+
--radius-md: 10px;
|
|
17
|
+
--radius-lg: 14px;
|
|
18
|
+
--radius-xl: 20px;
|
|
19
|
+
--radius-pill: 999px;
|
|
20
|
+
|
|
21
|
+
--sidebar-width: 260px;
|
|
20
22
|
--composer-height: 80px;
|
|
21
23
|
--call-bar-height: 0px; /* expands when a call is active */
|
|
22
24
|
|
|
23
|
-
--transition:
|
|
25
|
+
--transition: 200ms cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
26
|
+
|
|
27
|
+
/* Fallback shadows for themes that don't define them */
|
|
28
|
+
--shadow-sm: 0 1px 3px rgba(0,0,0,0.12);
|
|
29
|
+
--shadow-md: 0 4px 16px rgba(0,0,0,0.12);
|
|
30
|
+
--shadow-lg: 0 10px 40px rgba(0,0,0,0.14);
|
|
24
31
|
}
|
|
25
32
|
|
|
26
33
|
html, body { height: 100%; font-family: var(--font-sans); }
|
|
@@ -57,26 +64,29 @@ details summary {
|
|
|
57
64
|
padding-top: env(safe-area-inset-top);
|
|
58
65
|
}
|
|
59
66
|
|
|
60
|
-
.hub-group { padding:
|
|
67
|
+
.hub-group { padding: 0 0 4px; }
|
|
61
68
|
.hub-header {
|
|
62
|
-
padding
|
|
63
|
-
font-weight: 700;
|
|
64
|
-
text-transform: uppercase;
|
|
65
|
-
letter-spacing: 0.8px;
|
|
66
|
-
color: var(--text-muted);
|
|
69
|
+
/* <details> container — no visual padding of its own */
|
|
67
70
|
}
|
|
68
71
|
.channel-list {
|
|
69
72
|
list-style: none;
|
|
70
73
|
text-transform: none;
|
|
74
|
+
padding: 2px 0;
|
|
71
75
|
}
|
|
72
76
|
|
|
73
77
|
.hub-name {
|
|
74
78
|
display: flex;
|
|
75
79
|
align-items: center;
|
|
76
80
|
gap: 2px;
|
|
81
|
+
padding: 16px 16px 4px;
|
|
82
|
+
font-size: 12px;
|
|
83
|
+
font-weight: 600;
|
|
84
|
+
letter-spacing: 0.02em;
|
|
85
|
+
color: var(--text-secondary);
|
|
77
86
|
user-select: none;
|
|
78
87
|
-webkit-user-select: none;
|
|
79
88
|
-webkit-touch-callout: none;
|
|
89
|
+
cursor: pointer;
|
|
80
90
|
}
|
|
81
91
|
.hub-name > span { flex: 1; }
|
|
82
92
|
|
|
@@ -93,11 +103,12 @@ details summary {
|
|
|
93
103
|
text-decoration: none;
|
|
94
104
|
flex: 1;
|
|
95
105
|
min-width: 0;
|
|
96
|
-
height:
|
|
106
|
+
height: 34px;
|
|
97
107
|
display: block;
|
|
98
|
-
line-height:
|
|
99
|
-
padding
|
|
100
|
-
|
|
108
|
+
line-height: 34px;
|
|
109
|
+
padding: 0 8px;
|
|
110
|
+
margin: 0 6px;
|
|
111
|
+
border-radius: var(--radius-md);
|
|
101
112
|
user-select: none;
|
|
102
113
|
-webkit-user-select: none;
|
|
103
114
|
-webkit-touch-callout: none;
|
|
@@ -105,30 +116,23 @@ details summary {
|
|
|
105
116
|
overflow: hidden;
|
|
106
117
|
white-space: nowrap;
|
|
107
118
|
text-overflow: ellipsis;
|
|
119
|
+
font-size: 15px;
|
|
108
120
|
}
|
|
109
121
|
|
|
110
122
|
.channel-item a:hover {
|
|
111
123
|
color: var(--text-primary);
|
|
124
|
+
background: var(--bg-hover);
|
|
112
125
|
}
|
|
113
126
|
|
|
114
127
|
.channel-item.active a {
|
|
115
128
|
color: var(--text-primary);
|
|
116
129
|
background: var(--bg-active);
|
|
117
130
|
font-weight: 600;
|
|
118
|
-
border-radius: var(--radius-sm);
|
|
119
131
|
}
|
|
120
132
|
|
|
121
|
-
/*
|
|
133
|
+
/* No left accent bar — Apple uses full-width pill selection */
|
|
122
134
|
.channel-item.active::before {
|
|
123
|
-
content:
|
|
124
|
-
position: absolute;
|
|
125
|
-
left: 0;
|
|
126
|
-
top: 50%;
|
|
127
|
-
transform: translateY(-50%);
|
|
128
|
-
width: 3px;
|
|
129
|
-
height: 1.4rem;
|
|
130
|
-
background: var(--accent);
|
|
131
|
-
border-radius: 0 2px 2px 0;
|
|
135
|
+
content: none;
|
|
132
136
|
}
|
|
133
137
|
|
|
134
138
|
/* ── Channel + hub drag-and-drop reordering (desktop) ───────────────────── */
|
|
@@ -162,33 +166,23 @@ details summary {
|
|
|
162
166
|
/* ── Direct Messages section ─────────────────────────────────────────────── */
|
|
163
167
|
.dm-section {
|
|
164
168
|
margin-top: 4px;
|
|
165
|
-
padding:
|
|
169
|
+
padding: 4px 0 8px;
|
|
166
170
|
border-top: 1px solid var(--border);
|
|
167
171
|
}
|
|
168
172
|
|
|
169
173
|
.dm-section-title {
|
|
170
|
-
padding:
|
|
171
|
-
font-size:
|
|
172
|
-
font-weight:
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
color: var(--text-muted);
|
|
174
|
+
padding: 20px 16px 5px;
|
|
175
|
+
font-size: 12px;
|
|
176
|
+
font-weight: 600;
|
|
177
|
+
letter-spacing: 0.02em;
|
|
178
|
+
color: var(--text-secondary);
|
|
176
179
|
display: flex;
|
|
177
180
|
align-items: center;
|
|
178
181
|
gap: 6px;
|
|
179
182
|
}
|
|
180
183
|
|
|
181
|
-
/*
|
|
182
|
-
.dm-section-title::before {
|
|
183
|
-
content: '';
|
|
184
|
-
display: inline-block;
|
|
185
|
-
width: 6px;
|
|
186
|
-
height: 6px;
|
|
187
|
-
border-radius: 50%;
|
|
188
|
-
background: var(--accent);
|
|
189
|
-
opacity: 0.6;
|
|
190
|
-
flex-shrink: 0;
|
|
191
|
-
}
|
|
184
|
+
/* No decorative bullet — Apple sidebars use clean section headers */
|
|
185
|
+
.dm-section-title::before { display: none; }
|
|
192
186
|
|
|
193
187
|
.dm-list {
|
|
194
188
|
list-style: none;
|
|
@@ -205,11 +199,13 @@ details summary {
|
|
|
205
199
|
align-items: center;
|
|
206
200
|
gap: 8px;
|
|
207
201
|
flex: 1;
|
|
208
|
-
height:
|
|
209
|
-
padding: 0
|
|
202
|
+
height: 34px;
|
|
203
|
+
padding: 0 8px;
|
|
204
|
+
margin: 0 6px;
|
|
205
|
+
border-radius: var(--radius-md);
|
|
210
206
|
color: var(--text-secondary);
|
|
211
207
|
text-decoration: none;
|
|
212
|
-
font-size:
|
|
208
|
+
font-size: 15px;
|
|
213
209
|
user-select: none;
|
|
214
210
|
-webkit-user-select: none;
|
|
215
211
|
-webkit-touch-callout: none;
|
|
@@ -227,17 +223,9 @@ details summary {
|
|
|
227
223
|
font-weight: 600;
|
|
228
224
|
}
|
|
229
225
|
|
|
230
|
-
/*
|
|
226
|
+
/* No left accent bar — pill selection matches channel items */
|
|
231
227
|
.dm-item.dm-selected::before {
|
|
232
|
-
content:
|
|
233
|
-
position: absolute;
|
|
234
|
-
left: 0;
|
|
235
|
-
top: 50%;
|
|
236
|
-
transform: translateY(-50%);
|
|
237
|
-
width: 3px;
|
|
238
|
-
height: 1.4rem;
|
|
239
|
-
background: var(--accent);
|
|
240
|
-
border-radius: 0 2px 2px 0;
|
|
228
|
+
content: none;
|
|
241
229
|
}
|
|
242
230
|
|
|
243
231
|
.dm-name {
|
|
@@ -282,15 +270,17 @@ details summary {
|
|
|
282
270
|
flex-shrink: 0;
|
|
283
271
|
}
|
|
284
272
|
|
|
285
|
-
/* ── Action sheet (mobile + iPad)
|
|
273
|
+
/* ── Action sheet (mobile + iPad) — Apple iOS style ─────────────────────── */
|
|
286
274
|
.action-sheet-backdrop {
|
|
287
275
|
position: fixed;
|
|
288
276
|
inset: 0;
|
|
289
277
|
z-index: 200;
|
|
290
|
-
background: rgba(0, 0, 0, 0.
|
|
278
|
+
background: rgba(0, 0, 0, 0.40);
|
|
291
279
|
opacity: 0;
|
|
292
280
|
pointer-events: none;
|
|
293
281
|
transition: opacity var(--transition);
|
|
282
|
+
backdrop-filter: blur(2px);
|
|
283
|
+
-webkit-backdrop-filter: blur(2px);
|
|
294
284
|
}
|
|
295
285
|
.action-sheet-backdrop.open {
|
|
296
286
|
opacity: 1;
|
|
@@ -302,14 +292,15 @@ details summary {
|
|
|
302
292
|
left: 0; right: 0; bottom: 0;
|
|
303
293
|
z-index: 201;
|
|
304
294
|
background: var(--bg-sidebar);
|
|
305
|
-
border-top:
|
|
306
|
-
border-radius:
|
|
307
|
-
padding:
|
|
308
|
-
padding-bottom: env(safe-area-inset-bottom,
|
|
295
|
+
border-top: none;
|
|
296
|
+
border-radius: 20px 20px 0 0;
|
|
297
|
+
padding: 0;
|
|
298
|
+
padding-bottom: env(safe-area-inset-bottom, 0px);
|
|
309
299
|
transform: translateY(100%);
|
|
310
|
-
transition: transform
|
|
300
|
+
transition: transform 300ms cubic-bezier(0.32, 0.72, 0, 1);
|
|
311
301
|
max-width: 640px;
|
|
312
302
|
margin: 0 auto;
|
|
303
|
+
box-shadow: var(--shadow-lg);
|
|
313
304
|
}
|
|
314
305
|
.action-sheet.open { transform: translateY(0); }
|
|
315
306
|
|
|
@@ -317,47 +308,51 @@ details summary {
|
|
|
317
308
|
width: 36px; height: 4px;
|
|
318
309
|
background: var(--border);
|
|
319
310
|
border-radius: 2px;
|
|
320
|
-
margin:
|
|
311
|
+
margin: 10px auto 6px;
|
|
321
312
|
}
|
|
322
313
|
|
|
323
314
|
.action-sheet-label {
|
|
324
|
-
padding:
|
|
325
|
-
font-size:
|
|
326
|
-
font-weight:
|
|
327
|
-
text-
|
|
328
|
-
|
|
329
|
-
color: var(--text-muted);
|
|
315
|
+
padding: 6px 20px 10px;
|
|
316
|
+
font-size: 13px;
|
|
317
|
+
font-weight: 400;
|
|
318
|
+
color: var(--text-secondary);
|
|
319
|
+
text-align: center;
|
|
330
320
|
}
|
|
331
321
|
|
|
332
322
|
.action-sheet-item {
|
|
333
323
|
display: flex;
|
|
334
324
|
align-items: center;
|
|
335
325
|
width: 100%;
|
|
336
|
-
padding:
|
|
326
|
+
padding: 16px 20px;
|
|
337
327
|
background: none;
|
|
338
328
|
border: none;
|
|
329
|
+
border-top: 0.5px solid var(--border);
|
|
339
330
|
color: var(--text-primary);
|
|
340
|
-
font-size:
|
|
331
|
+
font-size: 17px;
|
|
341
332
|
text-align: left;
|
|
342
333
|
cursor: pointer;
|
|
334
|
+
transition: background var(--transition);
|
|
343
335
|
}
|
|
336
|
+
.action-sheet-item:first-of-type { border-top: none; }
|
|
344
337
|
.action-sheet-item:hover,
|
|
345
338
|
.action-sheet-item:active { background: var(--bg-hover); }
|
|
346
339
|
.action-sheet-item.danger { color: var(--color-danger); }
|
|
347
340
|
.action-sheet-item:disabled { color: var(--text-muted); cursor: default; opacity: 0.45; pointer-events: none; }
|
|
348
341
|
|
|
349
|
-
/* ── Modal (desktop)
|
|
342
|
+
/* ── Modal (desktop) — Apple sheet / alert style ─────────────────────────── */
|
|
350
343
|
.modal-backdrop {
|
|
351
344
|
position: fixed;
|
|
352
345
|
inset: 0;
|
|
353
346
|
z-index: 200;
|
|
354
|
-
background: rgba(0, 0, 0, 0.
|
|
347
|
+
background: rgba(0, 0, 0, 0.50);
|
|
355
348
|
display: flex;
|
|
356
349
|
align-items: center;
|
|
357
350
|
justify-content: center;
|
|
358
351
|
opacity: 0;
|
|
359
352
|
pointer-events: none;
|
|
360
353
|
transition: opacity var(--transition);
|
|
354
|
+
backdrop-filter: blur(4px);
|
|
355
|
+
-webkit-backdrop-filter: blur(4px);
|
|
361
356
|
}
|
|
362
357
|
.modal-backdrop.open {
|
|
363
358
|
opacity: 1;
|
|
@@ -366,30 +361,42 @@ details summary {
|
|
|
366
361
|
|
|
367
362
|
.modal {
|
|
368
363
|
background: var(--bg-sidebar);
|
|
369
|
-
border:
|
|
370
|
-
border-radius: var(--radius-
|
|
364
|
+
border: none;
|
|
365
|
+
border-radius: var(--radius-xl);
|
|
371
366
|
width: 100%;
|
|
372
367
|
max-width: 480px;
|
|
373
368
|
padding: 28px 32px;
|
|
374
369
|
display: flex;
|
|
375
370
|
flex-direction: column;
|
|
376
371
|
gap: 20px;
|
|
377
|
-
|
|
378
|
-
|
|
372
|
+
box-shadow: var(--shadow-lg);
|
|
373
|
+
transform: scale(0.95) translateY(8px);
|
|
374
|
+
transition: transform 300ms cubic-bezier(0.32, 0.72, 0, 1);
|
|
379
375
|
}
|
|
380
|
-
.modal-backdrop.open .modal { transform: scale(1); }
|
|
376
|
+
.modal-backdrop.open .modal { transform: scale(1) translateY(0); }
|
|
381
377
|
|
|
382
378
|
.modal-header {
|
|
383
379
|
display: flex;
|
|
384
380
|
align-items: center;
|
|
385
381
|
justify-content: space-between;
|
|
386
382
|
}
|
|
387
|
-
.modal-title { font-size:
|
|
383
|
+
.modal-title { font-size: 17px; font-weight: 600; letter-spacing: -0.2px; }
|
|
388
384
|
.modal-close {
|
|
389
|
-
background:
|
|
390
|
-
|
|
385
|
+
background: var(--bg-hover);
|
|
386
|
+
border: none;
|
|
387
|
+
cursor: pointer;
|
|
388
|
+
color: var(--text-secondary);
|
|
389
|
+
font-size: 14px;
|
|
390
|
+
padding: 6px;
|
|
391
|
+
border-radius: var(--radius-pill);
|
|
392
|
+
width: 28px;
|
|
393
|
+
height: 28px;
|
|
394
|
+
display: flex;
|
|
395
|
+
align-items: center;
|
|
396
|
+
justify-content: center;
|
|
397
|
+
transition: background var(--transition), color var(--transition);
|
|
391
398
|
}
|
|
392
|
-
.modal-close:hover { color: var(--text-primary); }
|
|
399
|
+
.modal-close:hover { background: var(--fill-secondary); color: var(--text-primary); }
|
|
393
400
|
|
|
394
401
|
.modal-body { display: flex; flex-direction: column; gap: 16px; }
|
|
395
402
|
|
|
@@ -412,15 +419,17 @@ details summary {
|
|
|
412
419
|
.modal-danger-zone p { font-size: 13px; color: var(--text-muted); }
|
|
413
420
|
.btn-danger {
|
|
414
421
|
align-self: flex-start;
|
|
415
|
-
padding: 8px
|
|
416
|
-
border:
|
|
417
|
-
border-radius: var(--radius-
|
|
418
|
-
background:
|
|
422
|
+
padding: 8px 18px;
|
|
423
|
+
border: none;
|
|
424
|
+
border-radius: var(--radius-pill);
|
|
425
|
+
background: color-mix(in srgb, var(--color-danger) 12%, transparent);
|
|
419
426
|
color: var(--color-danger);
|
|
420
|
-
font-
|
|
427
|
+
font-size: 15px;
|
|
428
|
+
font-weight: 500;
|
|
421
429
|
cursor: pointer;
|
|
430
|
+
transition: background var(--transition);
|
|
422
431
|
}
|
|
423
|
-
.btn-danger:hover { background: color-mix(in srgb, var(--color-danger)
|
|
432
|
+
.btn-danger:hover { background: color-mix(in srgb, var(--color-danger) 20%, transparent); }
|
|
424
433
|
|
|
425
434
|
.sidebar-footer {
|
|
426
435
|
margin-top: auto;
|
|
@@ -429,12 +438,13 @@ details summary {
|
|
|
429
438
|
border-top: 1px solid var(--border);
|
|
430
439
|
display: flex;
|
|
431
440
|
flex-direction: column;
|
|
432
|
-
gap:
|
|
441
|
+
gap: 10px;
|
|
433
442
|
}
|
|
434
443
|
|
|
435
444
|
.sidebar-username {
|
|
436
|
-
font-size:
|
|
437
|
-
|
|
445
|
+
font-size: 13px;
|
|
446
|
+
font-weight: 500;
|
|
447
|
+
color: var(--text-secondary);
|
|
438
448
|
padding: 0 2px;
|
|
439
449
|
}
|
|
440
450
|
|
|
@@ -446,35 +456,35 @@ details summary {
|
|
|
446
456
|
.sidebar-footer-controls select {
|
|
447
457
|
flex: 1;
|
|
448
458
|
min-width: 0;
|
|
449
|
-
font-size:
|
|
450
|
-
padding:
|
|
451
|
-
border-radius: var(--radius-
|
|
459
|
+
font-size: 13px;
|
|
460
|
+
padding: 5px 8px;
|
|
461
|
+
border-radius: var(--radius-md);
|
|
452
462
|
border: 1px solid var(--border);
|
|
453
463
|
background: var(--bg-input);
|
|
454
464
|
color: var(--text-secondary);
|
|
455
465
|
cursor: pointer;
|
|
456
466
|
}
|
|
457
467
|
.btn-sm {
|
|
458
|
-
font-size:
|
|
459
|
-
padding:
|
|
468
|
+
font-size: 13px;
|
|
469
|
+
padding: 5px 10px;
|
|
460
470
|
white-space: nowrap;
|
|
461
471
|
}
|
|
462
472
|
|
|
463
473
|
.btn-new-hub {
|
|
464
474
|
width: 100%;
|
|
465
|
-
padding:
|
|
466
|
-
border-radius:
|
|
467
|
-
border: 1px
|
|
475
|
+
padding: 8px 10px;
|
|
476
|
+
border-radius: var(--radius-md);
|
|
477
|
+
border: 1px solid var(--border);
|
|
468
478
|
background: transparent;
|
|
469
|
-
color: var(--
|
|
470
|
-
font-size:
|
|
479
|
+
color: var(--accent);
|
|
480
|
+
font-size: 14px;
|
|
481
|
+
font-weight: 500;
|
|
471
482
|
cursor: pointer;
|
|
472
483
|
text-align: left;
|
|
484
|
+
transition: background var(--transition);
|
|
473
485
|
}
|
|
474
486
|
.btn-new-hub:hover {
|
|
475
|
-
background: var(--bg-
|
|
476
|
-
color: var(--text-primary);
|
|
477
|
-
border-color: var(--accent);
|
|
487
|
+
background: var(--bg-hover);
|
|
478
488
|
}
|
|
479
489
|
|
|
480
490
|
.btn-enable-push {
|
|
@@ -540,10 +550,23 @@ details summary {
|
|
|
540
550
|
|
|
541
551
|
/* ── Chat panel ──────────────────────────────────────────────────────────── */
|
|
542
552
|
.chat-panel { flex: 1; display: flex; flex-direction: column; min-height: 0; position: relative; }
|
|
543
|
-
.chat-header {
|
|
553
|
+
.chat-header {
|
|
554
|
+
padding: 12px 20px;
|
|
555
|
+
padding-top: calc(12px + env(safe-area-inset-top));
|
|
556
|
+
border-bottom: 1px solid var(--border);
|
|
557
|
+
display: flex;
|
|
558
|
+
align-items: center;
|
|
559
|
+
gap: 12px;
|
|
560
|
+
background: var(--bg-topbar);
|
|
561
|
+
backdrop-filter: blur(20px);
|
|
562
|
+
-webkit-backdrop-filter: blur(20px);
|
|
563
|
+
flex-shrink: 0;
|
|
564
|
+
}
|
|
544
565
|
.chat-title {
|
|
545
|
-
font-size:
|
|
546
|
-
|
|
566
|
+
font-size: 16px;
|
|
567
|
+
font-weight: 600;
|
|
568
|
+
letter-spacing: -0.2px;
|
|
569
|
+
margin-bottom: 0;
|
|
547
570
|
}
|
|
548
571
|
.chat-topic {
|
|
549
572
|
color: var(--text-secondary);
|
|
@@ -569,23 +592,41 @@ details summary {
|
|
|
569
592
|
padding: 16px 20px;
|
|
570
593
|
display: flex;
|
|
571
594
|
flex-direction: column;
|
|
572
|
-
gap:
|
|
595
|
+
gap: 2px;
|
|
573
596
|
scroll-behavior: smooth;
|
|
574
597
|
}
|
|
575
598
|
|
|
576
599
|
.message {
|
|
577
|
-
|
|
600
|
+
display: grid;
|
|
601
|
+
grid-template-columns: auto 1fr;
|
|
602
|
+
column-gap: 8px;
|
|
603
|
+
row-gap: 2px;
|
|
604
|
+
padding: 3px 0;
|
|
578
605
|
}
|
|
579
606
|
.message pre {
|
|
580
607
|
padding: 1rem;
|
|
581
|
-
font-family:
|
|
608
|
+
font-family: var(--font-mono);
|
|
582
609
|
font-size: .8rem;
|
|
583
610
|
background: var(--code-background);
|
|
584
611
|
}
|
|
585
|
-
.message-handle {
|
|
612
|
+
.message-handle {
|
|
613
|
+
font-size: 14px;
|
|
614
|
+
font-weight: 600;
|
|
615
|
+
color: var(--text-primary);
|
|
616
|
+
grid-column: 1;
|
|
617
|
+
grid-row: 1;
|
|
618
|
+
letter-spacing: -0.1px;
|
|
619
|
+
}
|
|
586
620
|
.message-handle.dm-trigger { cursor: pointer; }
|
|
587
|
-
.message-handle.dm-trigger:hover {
|
|
588
|
-
.message-time {
|
|
621
|
+
.message-handle.dm-trigger:hover { color: var(--accent); }
|
|
622
|
+
.message-time {
|
|
623
|
+
font-size: 11px;
|
|
624
|
+
color: var(--text-muted);
|
|
625
|
+
grid-column: 2;
|
|
626
|
+
grid-row: 1;
|
|
627
|
+
align-self: center;
|
|
628
|
+
text-align: right;
|
|
629
|
+
}
|
|
589
630
|
.message-text { grid-column: 1 / -1; grid-row: 2; line-height: 1.5; color: var(--text-primary); word-break: break-word; overflow-wrap: anywhere; }
|
|
590
631
|
.message-text p { white-space: pre-wrap; margin: 0 0 4px; }
|
|
591
632
|
.message-text p:last-child { margin-bottom: 0; }
|
|
@@ -611,28 +652,27 @@ details summary {
|
|
|
611
652
|
flex-wrap: wrap;
|
|
612
653
|
gap: 4px;
|
|
613
654
|
margin-top: 4px;
|
|
655
|
+
grid-column: 1 / -1; /* span full width in message grid */
|
|
614
656
|
}
|
|
615
657
|
.reaction-pill {
|
|
616
658
|
display: inline-flex;
|
|
617
659
|
align-items: center;
|
|
618
|
-
gap:
|
|
619
|
-
background:
|
|
620
|
-
border:
|
|
621
|
-
border-radius:
|
|
622
|
-
padding:
|
|
660
|
+
gap: 4px;
|
|
661
|
+
background: var(--fill-quaternary);
|
|
662
|
+
border: none;
|
|
663
|
+
border-radius: var(--radius-pill);
|
|
664
|
+
padding: 3px 9px;
|
|
623
665
|
font-size: 13px;
|
|
624
666
|
cursor: pointer;
|
|
625
667
|
color: var(--text-secondary);
|
|
626
|
-
transition:
|
|
668
|
+
transition: background var(--transition);
|
|
627
669
|
line-height: 1.4;
|
|
628
670
|
}
|
|
629
671
|
.reaction-pill:hover {
|
|
630
|
-
|
|
631
|
-
background: color-mix(in srgb, var(--accent) 8%, transparent);
|
|
672
|
+
background: var(--fill-tertiary);
|
|
632
673
|
}
|
|
633
674
|
.reaction-pill.reacted {
|
|
634
|
-
|
|
635
|
-
background: color-mix(in srgb, var(--accent) 15%, transparent);
|
|
675
|
+
background: color-mix(in srgb, var(--accent) 18%, transparent);
|
|
636
676
|
color: var(--accent);
|
|
637
677
|
font-weight: 600;
|
|
638
678
|
}
|
|
@@ -641,53 +681,56 @@ details summary {
|
|
|
641
681
|
display: inline-flex;
|
|
642
682
|
align-items: center;
|
|
643
683
|
justify-content: center;
|
|
644
|
-
background:
|
|
645
|
-
border:
|
|
646
|
-
border-radius:
|
|
647
|
-
padding:
|
|
684
|
+
background: var(--fill-quaternary);
|
|
685
|
+
border: none;
|
|
686
|
+
border-radius: var(--radius-pill);
|
|
687
|
+
padding: 3px 9px;
|
|
648
688
|
font-size: 13px;
|
|
649
689
|
cursor: pointer;
|
|
650
690
|
color: var(--text-muted);
|
|
651
|
-
transition:
|
|
691
|
+
transition: background var(--transition), color var(--transition);
|
|
652
692
|
line-height: 1.4;
|
|
653
693
|
}
|
|
654
|
-
.reaction-add:hover {
|
|
694
|
+
.reaction-add:hover { background: var(--fill-tertiary); color: var(--accent); }
|
|
655
695
|
|
|
656
|
-
/* ── Message context menu (right-click)
|
|
696
|
+
/* ── Message context menu (right-click) — Apple-style popover ────────────── */
|
|
657
697
|
.msg-context-menu {
|
|
658
698
|
position: absolute;
|
|
659
699
|
background: var(--bg-sidebar);
|
|
660
|
-
border:
|
|
661
|
-
border-radius: var(--radius-
|
|
662
|
-
box-shadow:
|
|
700
|
+
border: none;
|
|
701
|
+
border-radius: var(--radius-lg);
|
|
702
|
+
box-shadow: var(--shadow-md);
|
|
663
703
|
z-index: 300;
|
|
664
|
-
min-width:
|
|
704
|
+
min-width: 160px;
|
|
665
705
|
overflow: hidden;
|
|
666
706
|
}
|
|
667
707
|
.msg-context-menu-item {
|
|
668
708
|
display: block;
|
|
669
709
|
width: 100%;
|
|
670
|
-
padding: 0
|
|
671
|
-
height:
|
|
710
|
+
padding: 0 16px;
|
|
711
|
+
height: 40px;
|
|
672
712
|
background: none;
|
|
673
713
|
border: none;
|
|
714
|
+
border-top: 0.5px solid var(--border);
|
|
674
715
|
cursor: pointer;
|
|
675
716
|
text-align: left;
|
|
676
717
|
color: var(--text-primary);
|
|
677
|
-
font-size:
|
|
718
|
+
font-size: 15px;
|
|
719
|
+
transition: background var(--transition);
|
|
678
720
|
}
|
|
679
|
-
.msg-context-menu-item:
|
|
721
|
+
.msg-context-menu-item:first-child { border-top: none; }
|
|
722
|
+
.msg-context-menu-item:hover { background: var(--bg-hover); }
|
|
680
723
|
.msg-context-menu-item--danger { color: var(--color-danger); }
|
|
681
|
-
.msg-context-menu-item--danger:hover { background: color-mix(in srgb, var(--color-danger)
|
|
724
|
+
.msg-context-menu-item--danger:hover { background: color-mix(in srgb, var(--color-danger) 8%, transparent); }
|
|
682
725
|
|
|
683
726
|
/* ── Emoji picker ────────────────────────────────────────────────────────── */
|
|
684
727
|
.emoji-picker {
|
|
685
728
|
max-width: 320px;
|
|
686
729
|
width: 320px;
|
|
687
730
|
background: var(--bg-sidebar);
|
|
688
|
-
border:
|
|
689
|
-
border-radius: var(--radius-
|
|
690
|
-
box-shadow:
|
|
731
|
+
border: none;
|
|
732
|
+
border-radius: var(--radius-lg);
|
|
733
|
+
box-shadow: var(--shadow-lg);
|
|
691
734
|
overflow: hidden;
|
|
692
735
|
display: flex;
|
|
693
736
|
flex-direction: column;
|
|
@@ -764,31 +807,35 @@ details summary {
|
|
|
764
807
|
flex-wrap: wrap;
|
|
765
808
|
align-items: flex-end;
|
|
766
809
|
gap: 8px;
|
|
767
|
-
padding:
|
|
810
|
+
padding: 12px 16px;
|
|
768
811
|
padding-bottom: calc(12px + env(safe-area-inset-bottom));
|
|
769
812
|
border-top: 1px solid var(--border);
|
|
770
|
-
background: var(--bg-
|
|
813
|
+
background: var(--bg-topbar);
|
|
814
|
+
backdrop-filter: blur(20px);
|
|
815
|
+
-webkit-backdrop-filter: blur(20px);
|
|
771
816
|
position: relative;
|
|
772
817
|
}
|
|
773
818
|
.composer textarea {
|
|
774
819
|
flex: 1;
|
|
775
|
-
padding:
|
|
776
|
-
border-radius: var(--radius-
|
|
820
|
+
padding: 9px 14px;
|
|
821
|
+
border-radius: var(--radius-pill);
|
|
777
822
|
border: 1px solid var(--border);
|
|
778
823
|
background: var(--bg-input);
|
|
779
824
|
color: var(--text-primary);
|
|
780
825
|
font-family: var(--font-sans);
|
|
781
826
|
resize: none;
|
|
782
827
|
line-height: 1.5;
|
|
783
|
-
height: calc(1.5em +
|
|
828
|
+
height: calc(1.5em + 18px); /* lock to 1 row; iOS Safari expands textarea when placeholder wraps */
|
|
784
829
|
max-height: 160px;
|
|
785
830
|
overflow-y: auto;
|
|
831
|
+
transition: border-color var(--transition);
|
|
786
832
|
}
|
|
787
|
-
.composer textarea:focus { outline: none; border-color: var(--accent); }
|
|
833
|
+
.composer textarea:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 15%, transparent); }
|
|
788
834
|
.composer textarea::placeholder {
|
|
789
835
|
white-space: nowrap;
|
|
790
836
|
overflow: hidden;
|
|
791
837
|
text-overflow: ellipsis;
|
|
838
|
+
color: var(--text-muted);
|
|
792
839
|
}
|
|
793
840
|
/* Urgent toggle button */
|
|
794
841
|
.btn-urgent-toggle {
|
|
@@ -914,8 +961,8 @@ details summary {
|
|
|
914
961
|
.date-separator {
|
|
915
962
|
display: flex;
|
|
916
963
|
align-items: center;
|
|
917
|
-
gap:
|
|
918
|
-
margin:
|
|
964
|
+
gap: 10px;
|
|
965
|
+
margin: 20px 0 10px;
|
|
919
966
|
color: var(--text-muted);
|
|
920
967
|
font-size: 12px;
|
|
921
968
|
}
|
|
@@ -923,13 +970,14 @@ details summary {
|
|
|
923
970
|
.date-separator::after {
|
|
924
971
|
content: '';
|
|
925
972
|
flex: 1;
|
|
926
|
-
height:
|
|
973
|
+
height: 0.5px;
|
|
927
974
|
background: var(--border);
|
|
928
975
|
}
|
|
929
976
|
.date-separator-label {
|
|
930
977
|
white-space: nowrap;
|
|
931
978
|
padding: 0 6px;
|
|
932
979
|
font-weight: 500;
|
|
980
|
+
letter-spacing: 0.02em;
|
|
933
981
|
}
|
|
934
982
|
|
|
935
983
|
/* ── @mention inline highlight ───────────────────────────────────────────── */
|
|
@@ -939,13 +987,13 @@ details summary {
|
|
|
939
987
|
/* ── @mention picker popup ───────────────────────────────────────────────── */
|
|
940
988
|
.mention-picker {
|
|
941
989
|
position: absolute;
|
|
942
|
-
bottom: calc(100% +
|
|
990
|
+
bottom: calc(100% + 8px);
|
|
943
991
|
left: 0;
|
|
944
992
|
right: 0;
|
|
945
993
|
background: var(--bg-sidebar);
|
|
946
|
-
border:
|
|
947
|
-
border-radius:
|
|
948
|
-
box-shadow:
|
|
994
|
+
border: none;
|
|
995
|
+
border-radius: var(--radius-lg);
|
|
996
|
+
box-shadow: var(--shadow-lg);
|
|
949
997
|
z-index: 200;
|
|
950
998
|
max-height: 240px;
|
|
951
999
|
overflow-y: auto;
|
|
@@ -953,81 +1001,142 @@ details summary {
|
|
|
953
1001
|
.mention-option {
|
|
954
1002
|
display: flex;
|
|
955
1003
|
align-items: center;
|
|
956
|
-
gap:
|
|
1004
|
+
gap: 10px;
|
|
957
1005
|
width: 100%;
|
|
958
|
-
padding:
|
|
1006
|
+
padding: 10px 14px;
|
|
959
1007
|
background: none;
|
|
960
1008
|
border: none;
|
|
1009
|
+
border-top: 0.5px solid var(--border);
|
|
961
1010
|
cursor: pointer;
|
|
962
1011
|
text-align: left;
|
|
963
1012
|
color: var(--text-primary);
|
|
964
|
-
font-size:
|
|
1013
|
+
font-size: 15px;
|
|
1014
|
+
transition: background var(--transition);
|
|
965
1015
|
}
|
|
1016
|
+
.mention-option:first-child { border-top: none; }
|
|
966
1017
|
.mention-option:hover,
|
|
967
|
-
.mention-option.selected { background:
|
|
1018
|
+
.mention-option.selected { background: var(--bg-hover); }
|
|
968
1019
|
.mention-option-name { font-weight: 600; color: var(--text-primary); }
|
|
969
|
-
.mention-option-handle { color: var(--text-
|
|
1020
|
+
.mention-option-handle { color: var(--text-secondary); font-size: 13px; }
|
|
970
1021
|
|
|
971
|
-
/* ── Auth page
|
|
1022
|
+
/* ── Auth page — Apple-style centered card ───────────────────────────────── */
|
|
972
1023
|
.auth-page { display: flex; align-items: center; justify-content: center; min-height: 100vh; }
|
|
973
|
-
.auth-shell { width: 100%; max-width: 420px; padding: 40px 32px; background: var(--bg-sidebar); border-radius: var(--radius-
|
|
974
|
-
.auth-brand h1 { font-weight:
|
|
975
|
-
.auth-brand p { color: var(--text-
|
|
976
|
-
.auth-tabs { display: flex; gap:
|
|
977
|
-
.auth-tabs a { background: none; border: none; padding:
|
|
1024
|
+
.auth-shell { width: 100%; max-width: 420px; padding: 40px 32px; background: var(--bg-sidebar); border-radius: var(--radius-xl); border: none; box-shadow: var(--shadow-lg); }
|
|
1025
|
+
.auth-brand h1 { font-weight: 700; color: var(--accent); letter-spacing: -0.5px; }
|
|
1026
|
+
.auth-brand p { color: var(--text-secondary); margin-top: 4px; margin-bottom: 28px; font-size: 15px; }
|
|
1027
|
+
.auth-tabs { display: flex; gap: 0; margin-bottom: 24px; border-bottom: 1px solid var(--border); }
|
|
1028
|
+
.auth-tabs a { background: none; border: none; padding: 10px 16px; font-size: 15px; font-weight: 500; cursor: pointer; color: var(--text-secondary); border-bottom: 2px solid transparent; margin-bottom: -1px; transition: color var(--transition), border-color var(--transition); }
|
|
978
1029
|
.auth-tabs a[aria-selected="true"] { color: var(--accent); border-bottom-color: var(--accent); }
|
|
979
1030
|
|
|
980
1031
|
.auth-form { display: flex; flex-direction: column; gap: 16px; }
|
|
981
1032
|
.field { display: flex; flex-direction: column; gap: 6px; }
|
|
982
|
-
.field label { font-weight:
|
|
1033
|
+
.field label { font-size: 13px; font-weight: 500; color: var(--text-secondary); }
|
|
983
1034
|
.field input {
|
|
984
|
-
padding:
|
|
1035
|
+
padding: 11px 14px;
|
|
1036
|
+
border-radius: var(--radius-md);
|
|
1037
|
+
border: 1px solid var(--border);
|
|
1038
|
+
background: var(--bg-input);
|
|
1039
|
+
color: var(--text-primary);
|
|
1040
|
+
font-size: 16px; /* 16px prevents iOS zoom on focus */
|
|
1041
|
+
transition: border-color var(--transition), box-shadow var(--transition);
|
|
1042
|
+
}
|
|
1043
|
+
.field input:focus {
|
|
1044
|
+
outline: none;
|
|
1045
|
+
border-color: var(--accent);
|
|
1046
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 15%, transparent);
|
|
985
1047
|
}
|
|
986
|
-
.field input:focus { outline: none; border-color: var(--accent); }
|
|
987
1048
|
|
|
988
|
-
/* ── Buttons
|
|
1049
|
+
/* ── Buttons — Apple HIG button styles ───────────────────────────────────── */
|
|
989
1050
|
.btn-primary {
|
|
990
|
-
padding: 10px 20px;
|
|
991
|
-
|
|
992
|
-
|
|
1051
|
+
padding: 10px 20px;
|
|
1052
|
+
border: none;
|
|
1053
|
+
border-radius: var(--radius-pill);
|
|
1054
|
+
background: var(--accent);
|
|
1055
|
+
color: white;
|
|
1056
|
+
font-weight: 600;
|
|
1057
|
+
font-size: 15px;
|
|
1058
|
+
cursor: pointer;
|
|
1059
|
+
transition: opacity var(--transition);
|
|
1060
|
+
min-height: 44px;
|
|
993
1061
|
}
|
|
994
1062
|
.btn-primary:hover { opacity: 0.85; }
|
|
1063
|
+
.btn-primary:active { opacity: 0.75; transform: scale(0.98); }
|
|
995
1064
|
.btn-ghost {
|
|
996
1065
|
border: none;
|
|
997
|
-
padding:
|
|
998
|
-
border-radius: var(--radius-
|
|
999
|
-
color: var(--
|
|
1066
|
+
padding: 8px 14px;
|
|
1067
|
+
border-radius: var(--radius-md);
|
|
1068
|
+
color: var(--accent);
|
|
1000
1069
|
cursor: pointer;
|
|
1070
|
+
font-size: 15px;
|
|
1071
|
+
font-weight: 400;
|
|
1072
|
+
background: none;
|
|
1073
|
+
transition: background var(--transition), opacity var(--transition);
|
|
1001
1074
|
}
|
|
1002
|
-
.btn-ghost:hover { background: var(--bg-hover);
|
|
1075
|
+
.btn-ghost:hover { background: var(--bg-hover); }
|
|
1003
1076
|
.btn-icon {
|
|
1004
|
-
background: none;
|
|
1077
|
+
background: none;
|
|
1078
|
+
border: none;
|
|
1079
|
+
padding: 8px;
|
|
1080
|
+
border-radius: var(--radius-md);
|
|
1081
|
+
color: var(--text-secondary);
|
|
1082
|
+
cursor: pointer;
|
|
1083
|
+
min-width: 36px;
|
|
1084
|
+
min-height: 36px;
|
|
1085
|
+
display: inline-flex;
|
|
1086
|
+
align-items: center;
|
|
1087
|
+
justify-content: center;
|
|
1088
|
+
transition: background var(--transition), color var(--transition);
|
|
1005
1089
|
}
|
|
1006
1090
|
.btn-icon:hover { background: var(--bg-hover); color: var(--text-primary); }
|
|
1091
|
+
.btn-icon:active { background: var(--fill-secondary); }
|
|
1007
1092
|
.btn-icon.active { color: var(--accent); }
|
|
1008
1093
|
.btn-call-join {
|
|
1009
|
-
padding:
|
|
1010
|
-
|
|
1094
|
+
padding: 8px 18px;
|
|
1095
|
+
background: var(--color-success);
|
|
1096
|
+
color: white;
|
|
1097
|
+
border: none;
|
|
1098
|
+
border-radius: var(--radius-pill);
|
|
1099
|
+
font-weight: 600;
|
|
1100
|
+
cursor: pointer;
|
|
1011
1101
|
}
|
|
1012
1102
|
.btn-call-leave {
|
|
1013
|
-
padding:
|
|
1014
|
-
|
|
1103
|
+
padding: 8px 18px;
|
|
1104
|
+
background: var(--color-danger);
|
|
1105
|
+
color: white;
|
|
1106
|
+
border: none;
|
|
1107
|
+
border-radius: var(--radius-pill);
|
|
1108
|
+
font-weight: 600;
|
|
1109
|
+
cursor: pointer;
|
|
1110
|
+
}
|
|
1111
|
+
.btn-send {
|
|
1112
|
+
padding: 8px 18px;
|
|
1113
|
+
background: var(--accent);
|
|
1114
|
+
color: white;
|
|
1115
|
+
border: none;
|
|
1116
|
+
border-radius: var(--radius-pill);
|
|
1117
|
+
font-size: 15px;
|
|
1118
|
+
font-weight: 600;
|
|
1119
|
+
cursor: pointer;
|
|
1120
|
+
min-height: 36px;
|
|
1121
|
+
transition: opacity var(--transition);
|
|
1015
1122
|
}
|
|
1016
|
-
.btn-send {
|
|
1123
|
+
.btn-send:hover { opacity: 0.85; }
|
|
1124
|
+
.btn-send:active { opacity: 0.75; }
|
|
1017
1125
|
|
|
1018
|
-
/* ── Alerts
|
|
1126
|
+
/* ── Alerts — Apple HIG toast notifications ──────────────────────────────── */
|
|
1019
1127
|
.alert {
|
|
1020
|
-
padding: 10px
|
|
1021
|
-
border-radius: var(--radius-
|
|
1128
|
+
padding: 10px 16px;
|
|
1129
|
+
border-radius: var(--radius-lg);
|
|
1022
1130
|
margin: 0 auto;
|
|
1023
1131
|
position: absolute;
|
|
1024
1132
|
top: 3.5rem;
|
|
1133
|
+
box-shadow: var(--shadow-md);
|
|
1025
1134
|
}
|
|
1026
1135
|
|
|
1027
1136
|
.alert-error {
|
|
1028
|
-
background: color-mix(in srgb, var(--color-danger)
|
|
1137
|
+
background: color-mix(in srgb, var(--color-danger) 12%, var(--bg-sidebar));
|
|
1029
1138
|
color: var(--color-danger);
|
|
1030
|
-
border:
|
|
1139
|
+
border: none;
|
|
1031
1140
|
opacity: 1;
|
|
1032
1141
|
animation: fadeOut 2s forwards;
|
|
1033
1142
|
}
|
|
@@ -1048,7 +1157,12 @@ details summary {
|
|
|
1048
1157
|
|
|
1049
1158
|
/* ── Theme picker ────────────────────────────────────────────────────────── */
|
|
1050
1159
|
select#theme-picker {
|
|
1051
|
-
padding:
|
|
1160
|
+
padding: 5px 10px;
|
|
1161
|
+
border-radius: var(--radius-md);
|
|
1162
|
+
border: 1px solid var(--border);
|
|
1163
|
+
background: var(--bg-input);
|
|
1164
|
+
color: var(--text-primary);
|
|
1165
|
+
font-size: 13px;
|
|
1052
1166
|
cursor: pointer;
|
|
1053
1167
|
}
|
|
1054
1168
|
|
|
@@ -1103,7 +1217,7 @@ mark { background: color-mix(in srgb, var(--accent) 30%, transparent); color: va
|
|
|
1103
1217
|
height: 100dvh;
|
|
1104
1218
|
width: 100%;
|
|
1105
1219
|
transform: translateX(0);
|
|
1106
|
-
transition: transform
|
|
1220
|
+
transition: transform 300ms cubic-bezier(0.32, 0.72, 0, 1);
|
|
1107
1221
|
overflow-y: auto;
|
|
1108
1222
|
}
|
|
1109
1223
|
|
|
@@ -1115,7 +1229,7 @@ mark { background: color-mix(in srgb, var(--accent) 30%, transparent); color: va
|
|
|
1115
1229
|
height: 100dvh;
|
|
1116
1230
|
width: 100%;
|
|
1117
1231
|
transform: translateX(100%);
|
|
1118
|
-
transition: transform
|
|
1232
|
+
transition: transform 300ms cubic-bezier(0.32, 0.72, 0, 1);
|
|
1119
1233
|
overflow: hidden;
|
|
1120
1234
|
}
|
|
1121
1235
|
|
|
@@ -1136,21 +1250,22 @@ mark { background: color-mix(in srgb, var(--accent) 30%, transparent); color: va
|
|
|
1136
1250
|
transform: translateX(100%);
|
|
1137
1251
|
}
|
|
1138
1252
|
|
|
1139
|
-
/* Show back button */
|
|
1253
|
+
/* Show back button — Apple chevron style */
|
|
1140
1254
|
.btn-back-mobile {
|
|
1141
1255
|
display: flex;
|
|
1142
1256
|
align-items: center;
|
|
1143
|
-
|
|
1257
|
+
gap: 3px;
|
|
1144
1258
|
background: none;
|
|
1145
1259
|
border: none;
|
|
1146
1260
|
cursor: pointer;
|
|
1147
|
-
color: var(--
|
|
1148
|
-
padding: 6px
|
|
1149
|
-
font-size:
|
|
1150
|
-
|
|
1261
|
+
color: var(--accent);
|
|
1262
|
+
padding: 6px 8px 6px 4px;
|
|
1263
|
+
font-size: 15px;
|
|
1264
|
+
font-weight: 400;
|
|
1265
|
+
border-radius: var(--radius-md);
|
|
1151
1266
|
flex-shrink: 0;
|
|
1152
1267
|
}
|
|
1153
|
-
.btn-back-mobile:hover {
|
|
1268
|
+
.btn-back-mobile:hover { opacity: 0.75; }
|
|
1154
1269
|
|
|
1155
1270
|
/* Hover toolbar: no hover on touch — always visible, tucked inside message */
|
|
1156
1271
|
.message-hover-actions {
|
|
@@ -1358,15 +1473,19 @@ mark { background: color-mix(in srgb, var(--accent) 30%, transparent); color: va
|
|
|
1358
1473
|
.thread-panel-header {
|
|
1359
1474
|
display: flex;
|
|
1360
1475
|
align-items: center;
|
|
1361
|
-
padding:
|
|
1476
|
+
padding: 12px 16px;
|
|
1362
1477
|
border-bottom: 1px solid var(--border);
|
|
1363
1478
|
background: var(--bg-topbar);
|
|
1479
|
+
backdrop-filter: blur(20px);
|
|
1480
|
+
-webkit-backdrop-filter: blur(20px);
|
|
1364
1481
|
flex-shrink: 0;
|
|
1482
|
+
gap: 8px;
|
|
1365
1483
|
}
|
|
1366
1484
|
.thread-panel-title {
|
|
1367
1485
|
flex: 1;
|
|
1368
|
-
font-size:
|
|
1486
|
+
font-size: 15px;
|
|
1369
1487
|
font-weight: 600;
|
|
1488
|
+
letter-spacing: -0.1px;
|
|
1370
1489
|
}
|
|
1371
1490
|
.thread-panel-close {
|
|
1372
1491
|
font-size: 14px;
|
|
@@ -1431,27 +1550,33 @@ mark { background: color-mix(in srgb, var(--accent) 30%, transparent); color: va
|
|
|
1431
1550
|
.thread-textarea {
|
|
1432
1551
|
width: 100%;
|
|
1433
1552
|
box-sizing: border-box;
|
|
1434
|
-
padding:
|
|
1435
|
-
background: var(--bg-input
|
|
1553
|
+
padding: 9px 12px;
|
|
1554
|
+
background: var(--bg-input);
|
|
1436
1555
|
border: 1px solid var(--border);
|
|
1437
|
-
border-radius: var(--radius-
|
|
1438
|
-
color: var(--
|
|
1556
|
+
border-radius: var(--radius-pill);
|
|
1557
|
+
color: var(--text-primary);
|
|
1439
1558
|
font-family: inherit;
|
|
1440
|
-
font-size:
|
|
1559
|
+
font-size: 15px;
|
|
1441
1560
|
resize: none;
|
|
1442
|
-
min-height:
|
|
1561
|
+
min-height: 38px;
|
|
1562
|
+
transition: border-color var(--transition), box-shadow var(--transition);
|
|
1563
|
+
}
|
|
1564
|
+
.thread-textarea:focus {
|
|
1565
|
+
outline: none;
|
|
1566
|
+
border-color: var(--accent);
|
|
1567
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 15%, transparent);
|
|
1443
1568
|
}
|
|
1444
|
-
.thread-textarea:focus { outline: none; border-color: var(--color-accent); }
|
|
1445
1569
|
.thread-send-btn { align-self: flex-end; }
|
|
1446
1570
|
|
|
1447
1571
|
/* "View N replies" link under messages */
|
|
1448
1572
|
.thread-replies-link {
|
|
1449
1573
|
display: inline-block;
|
|
1450
1574
|
font-size: 12px;
|
|
1451
|
-
color: var(--
|
|
1575
|
+
color: var(--accent);
|
|
1452
1576
|
margin: 2px 0 0;
|
|
1453
1577
|
cursor: pointer;
|
|
1454
1578
|
text-decoration: none;
|
|
1579
|
+
grid-column: 1 / -1; /* span full width in message grid */
|
|
1455
1580
|
}
|
|
1456
1581
|
.thread-replies-link:hover { text-decoration: underline; }
|
|
1457
1582
|
|
|
@@ -1484,15 +1609,16 @@ mark { background: color-mix(in srgb, var(--accent) 30%, transparent); color: va
|
|
|
1484
1609
|
display: flex;
|
|
1485
1610
|
align-items: center;
|
|
1486
1611
|
gap: 10px;
|
|
1487
|
-
padding:
|
|
1488
|
-
background: var(--bg-topbar);
|
|
1612
|
+
padding: 8px 16px;
|
|
1613
|
+
background: color-mix(in srgb, var(--color-success) 8%, var(--bg-topbar));
|
|
1489
1614
|
border-bottom: 1px solid var(--border);
|
|
1490
|
-
font-size:
|
|
1615
|
+
font-size: 14px;
|
|
1491
1616
|
}
|
|
1492
1617
|
.call-status[hidden] { display: none; }
|
|
1493
1618
|
.call-status-dot {
|
|
1494
1619
|
width: 8px; height: 8px; border-radius: 50%;
|
|
1495
|
-
background: var(--color-success
|
|
1620
|
+
background: var(--color-success); flex-shrink: 0;
|
|
1621
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-success) 30%, transparent);
|
|
1496
1622
|
}
|
|
1497
1623
|
.call-status-info { flex: 1; color: var(--text-secondary); }
|
|
1498
1624
|
.call-status-avatars { display: flex; }
|
|
@@ -1517,10 +1643,15 @@ mark { background: color-mix(in srgb, var(--accent) 30%, transparent); color: va
|
|
|
1517
1643
|
.call-peer-count { color: var(--text-muted); font-size: 13px; }
|
|
1518
1644
|
.btn-leave {
|
|
1519
1645
|
margin-left: auto;
|
|
1520
|
-
padding:
|
|
1521
|
-
background: var(--color-danger, #
|
|
1522
|
-
color: white;
|
|
1523
|
-
|
|
1646
|
+
padding: 6px 14px;
|
|
1647
|
+
background: var(--color-danger, #FF453A);
|
|
1648
|
+
color: white;
|
|
1649
|
+
border: none;
|
|
1650
|
+
border-radius: var(--radius-pill);
|
|
1651
|
+
font-weight: 600;
|
|
1652
|
+
cursor: pointer;
|
|
1653
|
+
font-size: 13px;
|
|
1654
|
+
transition: opacity var(--transition);
|
|
1524
1655
|
}
|
|
1525
1656
|
.btn-leave:hover { opacity: 0.85; }
|
|
1526
1657
|
|
|
@@ -1776,12 +1907,20 @@ body:has(.admin-topbar) main {
|
|
|
1776
1907
|
.form-row input[type="text"],
|
|
1777
1908
|
.form-row input[type="password"],
|
|
1778
1909
|
.form-row input[type="number"] {
|
|
1779
|
-
padding:
|
|
1780
|
-
border-radius:
|
|
1910
|
+
padding: 9px 12px;
|
|
1911
|
+
border-radius: var(--radius-md);
|
|
1781
1912
|
border: 1px solid var(--border);
|
|
1782
1913
|
background: var(--bg-input);
|
|
1783
1914
|
color: var(--text-primary);
|
|
1784
|
-
font-size:
|
|
1915
|
+
font-size: 15px;
|
|
1916
|
+
transition: border-color var(--transition), box-shadow var(--transition);
|
|
1917
|
+
}
|
|
1918
|
+
.form-row input[type="text"]:focus,
|
|
1919
|
+
.form-row input[type="password"]:focus,
|
|
1920
|
+
.form-row input[type="number"]:focus {
|
|
1921
|
+
outline: none;
|
|
1922
|
+
border-color: var(--accent);
|
|
1923
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 15%, transparent);
|
|
1785
1924
|
}
|
|
1786
1925
|
|
|
1787
1926
|
.checkbox-label {
|
|
@@ -1985,23 +2124,25 @@ form.inline { display: inline; }
|
|
|
1985
2124
|
.attachment-image {
|
|
1986
2125
|
max-width: min(400px, 100%);
|
|
1987
2126
|
max-height: 300px;
|
|
1988
|
-
border-radius: var(--radius-
|
|
2127
|
+
border-radius: var(--radius-lg);
|
|
1989
2128
|
object-fit: contain;
|
|
1990
2129
|
display: block;
|
|
1991
2130
|
}
|
|
1992
2131
|
.attachment-file {
|
|
1993
2132
|
display: inline-flex;
|
|
1994
2133
|
align-items: center;
|
|
1995
|
-
gap:
|
|
2134
|
+
gap: 8px;
|
|
1996
2135
|
margin-top: 6px;
|
|
1997
|
-
padding:
|
|
1998
|
-
border-radius: var(--radius-
|
|
2136
|
+
padding: 8px 14px;
|
|
2137
|
+
border-radius: var(--radius-lg);
|
|
1999
2138
|
background: var(--bg-input);
|
|
2000
|
-
border:
|
|
2139
|
+
border: none;
|
|
2140
|
+
box-shadow: var(--shadow-sm);
|
|
2001
2141
|
text-decoration: none;
|
|
2002
2142
|
color: var(--text-secondary);
|
|
2003
|
-
font-size:
|
|
2143
|
+
font-size: 14px;
|
|
2004
2144
|
max-width: 340px;
|
|
2145
|
+
transition: background var(--transition);
|
|
2005
2146
|
}
|
|
2006
2147
|
.attachment-file:hover { background: var(--bg-hover); color: var(--text-primary); }
|
|
2007
2148
|
.attachment-file-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
@@ -2021,14 +2162,15 @@ form.inline { display: inline; }
|
|
|
2021
2162
|
bottom: 60px;
|
|
2022
2163
|
left: 12px;
|
|
2023
2164
|
right: 12px;
|
|
2024
|
-
padding:
|
|
2025
|
-
background: var(--bg-topbar);
|
|
2026
|
-
border:
|
|
2027
|
-
border-radius: var(--radius-
|
|
2165
|
+
padding: 10px 14px;
|
|
2166
|
+
background: var(--bg-elevated, var(--bg-topbar));
|
|
2167
|
+
border: none;
|
|
2168
|
+
border-radius: var(--radius-lg);
|
|
2028
2169
|
font-size: 13px;
|
|
2029
2170
|
color: var(--text-primary);
|
|
2030
2171
|
z-index: 200;
|
|
2031
|
-
|
|
2172
|
+
box-shadow: var(--shadow-md);
|
|
2173
|
+
animation: toast-in 0.2s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
2032
2174
|
}
|
|
2033
2175
|
@keyframes toast-in {
|
|
2034
2176
|
from { opacity: 0; transform: translateY(8px); }
|
|
@@ -2046,9 +2188,10 @@ form.inline { display: inline; }
|
|
|
2046
2188
|
.message-edit-wrap {
|
|
2047
2189
|
grid-column: 1 / -1;
|
|
2048
2190
|
border: 1px solid var(--accent);
|
|
2049
|
-
border-radius: var(--radius-
|
|
2191
|
+
border-radius: var(--radius-lg);
|
|
2050
2192
|
overflow: hidden;
|
|
2051
2193
|
background: var(--bg-input, var(--bg-sidebar));
|
|
2194
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 12%, transparent);
|
|
2052
2195
|
}
|
|
2053
2196
|
|
|
2054
2197
|
.message-edit-tabs {
|
|
@@ -2119,45 +2262,48 @@ form.inline { display: inline; }
|
|
|
2119
2262
|
font-size: 13px;
|
|
2120
2263
|
}
|
|
2121
2264
|
|
|
2122
|
-
/* Hover action toolbar — floats above the message on hover
|
|
2265
|
+
/* Hover action toolbar — floats above the message on hover */
|
|
2123
2266
|
article.message { position: relative; }
|
|
2124
2267
|
.message-hover-actions {
|
|
2125
2268
|
position: absolute;
|
|
2126
|
-
top: -
|
|
2269
|
+
top: -22px;
|
|
2127
2270
|
right: 4px;
|
|
2128
2271
|
display: flex;
|
|
2129
|
-
gap:
|
|
2272
|
+
gap: 0;
|
|
2130
2273
|
align-items: center;
|
|
2131
2274
|
opacity: 0;
|
|
2132
2275
|
pointer-events: none;
|
|
2133
|
-
transition: opacity
|
|
2276
|
+
transition: opacity 150ms;
|
|
2134
2277
|
background: var(--bg-sidebar);
|
|
2135
|
-
border:
|
|
2136
|
-
border-radius: var(--radius-
|
|
2137
|
-
padding:
|
|
2138
|
-
box-shadow:
|
|
2278
|
+
border: none;
|
|
2279
|
+
border-radius: var(--radius-lg);
|
|
2280
|
+
padding: 3px;
|
|
2281
|
+
box-shadow: var(--shadow-md);
|
|
2139
2282
|
z-index: 10;
|
|
2140
2283
|
}
|
|
2141
2284
|
article.message:hover .message-hover-actions { opacity: 1; pointer-events: auto; }
|
|
2142
2285
|
.quick-picks { display: contents; }
|
|
2143
|
-
.quick-picks:not(:empty) + .btn-react { border-left:
|
|
2286
|
+
.quick-picks:not(:empty) + .btn-react { border-left: 0.5px solid var(--border); margin-left: 2px; padding-left: 6px; }
|
|
2144
2287
|
.btn-quick-react,
|
|
2145
2288
|
.btn-react,
|
|
2146
2289
|
.btn-msg-actions {
|
|
2147
2290
|
background: none;
|
|
2148
2291
|
border: none;
|
|
2149
2292
|
cursor: pointer;
|
|
2150
|
-
padding:
|
|
2151
|
-
border-radius:
|
|
2293
|
+
padding: 4px 8px;
|
|
2294
|
+
border-radius: var(--radius-md);
|
|
2152
2295
|
font-size: 15px;
|
|
2153
2296
|
line-height: 1;
|
|
2154
2297
|
color: var(--text-secondary);
|
|
2155
2298
|
transition: background var(--transition), color var(--transition);
|
|
2299
|
+
min-height: 30px;
|
|
2300
|
+
display: inline-flex;
|
|
2301
|
+
align-items: center;
|
|
2156
2302
|
}
|
|
2157
2303
|
.btn-quick-react:hover,
|
|
2158
2304
|
.btn-react:hover,
|
|
2159
2305
|
.btn-msg-actions:hover {
|
|
2160
|
-
background:
|
|
2306
|
+
background: var(--bg-hover);
|
|
2161
2307
|
color: var(--text-primary);
|
|
2162
2308
|
}
|
|
2163
2309
|
|
|
@@ -2187,38 +2333,42 @@ article.message:hover .message-hover-actions { opacity: 1; pointer-events: auto;
|
|
|
2187
2333
|
.msg-context-menu-item--danger { color: var(--color-danger, #e74c3c); }
|
|
2188
2334
|
.msg-context-menu-item--danger:hover { background: color-mix(in srgb, var(--color-danger, #e74c3c) 12%, transparent); }
|
|
2189
2335
|
|
|
2190
|
-
/* Bottom sheet (mobile long-press) */
|
|
2336
|
+
/* Bottom sheet (mobile long-press) — Apple iOS style */
|
|
2191
2337
|
.action-sheet {
|
|
2192
2338
|
position: fixed;
|
|
2193
2339
|
bottom: 0;
|
|
2194
2340
|
left: 0;
|
|
2195
2341
|
right: 0;
|
|
2196
2342
|
background: var(--bg-sidebar);
|
|
2197
|
-
border-top:
|
|
2198
|
-
border-radius:
|
|
2343
|
+
border-top: none;
|
|
2344
|
+
border-radius: 20px 20px 0 0;
|
|
2199
2345
|
z-index: 400;
|
|
2200
2346
|
transform: translateY(100%);
|
|
2201
|
-
transition: transform
|
|
2202
|
-
padding-bottom: env(safe-area-inset-bottom,
|
|
2347
|
+
transition: transform 300ms cubic-bezier(0.32, 0.72, 0, 1);
|
|
2348
|
+
padding-bottom: env(safe-area-inset-bottom, 0px);
|
|
2349
|
+
box-shadow: var(--shadow-lg);
|
|
2203
2350
|
}
|
|
2204
2351
|
.action-sheet.open { transform: translateY(0); }
|
|
2205
2352
|
.action-sheet-handle {
|
|
2206
|
-
width:
|
|
2353
|
+
width: 36px;
|
|
2207
2354
|
height: 4px;
|
|
2208
2355
|
background: var(--border);
|
|
2209
2356
|
border-radius: 2px;
|
|
2210
2357
|
margin: 10px auto 6px;
|
|
2211
2358
|
}
|
|
2212
|
-
.action-sheet-body { padding:
|
|
2359
|
+
.action-sheet-body { padding: 0 0 4px; }
|
|
2213
2360
|
.action-sheet-item {
|
|
2214
2361
|
display: block;
|
|
2215
2362
|
width: 100%;
|
|
2216
|
-
padding:
|
|
2363
|
+
padding: 16px 20px;
|
|
2217
2364
|
text-align: left;
|
|
2218
2365
|
background: none;
|
|
2219
2366
|
border: none;
|
|
2367
|
+
border-top: 0.5px solid var(--border);
|
|
2220
2368
|
color: var(--text-primary);
|
|
2221
|
-
font-size:
|
|
2369
|
+
font-size: 17px;
|
|
2222
2370
|
cursor: pointer;
|
|
2371
|
+
transition: background var(--transition);
|
|
2223
2372
|
}
|
|
2224
|
-
.action-sheet-item:
|
|
2373
|
+
.action-sheet-item:first-of-type { border-top: none; }
|
|
2374
|
+
.action-sheet-item:hover { background: var(--bg-hover); }
|