@devchitchat/chat 4.4.3 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +412 -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,16 @@ details summary {
|
|
|
429
438
|
border-top: 1px solid var(--border);
|
|
430
439
|
display: flex;
|
|
431
440
|
flex-direction: column;
|
|
432
|
-
gap:
|
|
441
|
+
gap: 10px;
|
|
442
|
+
position: sticky;
|
|
443
|
+
bottom: 0;
|
|
444
|
+
background: var(--bg-sidebar);
|
|
433
445
|
}
|
|
434
446
|
|
|
435
447
|
.sidebar-username {
|
|
436
|
-
font-size:
|
|
437
|
-
|
|
448
|
+
font-size: 13px;
|
|
449
|
+
font-weight: 500;
|
|
450
|
+
color: var(--text-secondary);
|
|
438
451
|
padding: 0 2px;
|
|
439
452
|
}
|
|
440
453
|
|
|
@@ -446,35 +459,35 @@ details summary {
|
|
|
446
459
|
.sidebar-footer-controls select {
|
|
447
460
|
flex: 1;
|
|
448
461
|
min-width: 0;
|
|
449
|
-
font-size:
|
|
450
|
-
padding:
|
|
451
|
-
border-radius: var(--radius-
|
|
462
|
+
font-size: 13px;
|
|
463
|
+
padding: 5px 8px;
|
|
464
|
+
border-radius: var(--radius-md);
|
|
452
465
|
border: 1px solid var(--border);
|
|
453
466
|
background: var(--bg-input);
|
|
454
467
|
color: var(--text-secondary);
|
|
455
468
|
cursor: pointer;
|
|
456
469
|
}
|
|
457
470
|
.btn-sm {
|
|
458
|
-
font-size:
|
|
459
|
-
padding:
|
|
471
|
+
font-size: 13px;
|
|
472
|
+
padding: 5px 10px;
|
|
460
473
|
white-space: nowrap;
|
|
461
474
|
}
|
|
462
475
|
|
|
463
476
|
.btn-new-hub {
|
|
464
477
|
width: 100%;
|
|
465
|
-
padding:
|
|
466
|
-
border-radius:
|
|
467
|
-
border: 1px
|
|
478
|
+
padding: 8px 10px;
|
|
479
|
+
border-radius: var(--radius-md);
|
|
480
|
+
border: 1px solid var(--border);
|
|
468
481
|
background: transparent;
|
|
469
|
-
color: var(--
|
|
470
|
-
font-size:
|
|
482
|
+
color: var(--accent);
|
|
483
|
+
font-size: 14px;
|
|
484
|
+
font-weight: 500;
|
|
471
485
|
cursor: pointer;
|
|
472
486
|
text-align: left;
|
|
487
|
+
transition: background var(--transition);
|
|
473
488
|
}
|
|
474
489
|
.btn-new-hub:hover {
|
|
475
|
-
background: var(--bg-
|
|
476
|
-
color: var(--text-primary);
|
|
477
|
-
border-color: var(--accent);
|
|
490
|
+
background: var(--bg-hover);
|
|
478
491
|
}
|
|
479
492
|
|
|
480
493
|
.btn-enable-push {
|
|
@@ -540,10 +553,23 @@ details summary {
|
|
|
540
553
|
|
|
541
554
|
/* ── Chat panel ──────────────────────────────────────────────────────────── */
|
|
542
555
|
.chat-panel { flex: 1; display: flex; flex-direction: column; min-height: 0; position: relative; }
|
|
543
|
-
.chat-header {
|
|
556
|
+
.chat-header {
|
|
557
|
+
padding: 12px 20px;
|
|
558
|
+
padding-top: calc(12px + env(safe-area-inset-top));
|
|
559
|
+
border-bottom: 1px solid var(--border);
|
|
560
|
+
display: flex;
|
|
561
|
+
align-items: center;
|
|
562
|
+
gap: 12px;
|
|
563
|
+
background: var(--bg-topbar);
|
|
564
|
+
backdrop-filter: blur(20px);
|
|
565
|
+
-webkit-backdrop-filter: blur(20px);
|
|
566
|
+
flex-shrink: 0;
|
|
567
|
+
}
|
|
544
568
|
.chat-title {
|
|
545
|
-
font-size:
|
|
546
|
-
|
|
569
|
+
font-size: 16px;
|
|
570
|
+
font-weight: 600;
|
|
571
|
+
letter-spacing: -0.2px;
|
|
572
|
+
margin-bottom: 0;
|
|
547
573
|
}
|
|
548
574
|
.chat-topic {
|
|
549
575
|
color: var(--text-secondary);
|
|
@@ -569,23 +595,41 @@ details summary {
|
|
|
569
595
|
padding: 16px 20px;
|
|
570
596
|
display: flex;
|
|
571
597
|
flex-direction: column;
|
|
572
|
-
gap:
|
|
598
|
+
gap: 2px;
|
|
573
599
|
scroll-behavior: smooth;
|
|
574
600
|
}
|
|
575
601
|
|
|
576
602
|
.message {
|
|
577
|
-
|
|
603
|
+
display: grid;
|
|
604
|
+
grid-template-columns: auto 1fr;
|
|
605
|
+
column-gap: 8px;
|
|
606
|
+
row-gap: 2px;
|
|
607
|
+
padding: 3px 0;
|
|
578
608
|
}
|
|
579
609
|
.message pre {
|
|
580
610
|
padding: 1rem;
|
|
581
|
-
font-family:
|
|
611
|
+
font-family: var(--font-mono);
|
|
582
612
|
font-size: .8rem;
|
|
583
613
|
background: var(--code-background);
|
|
584
614
|
}
|
|
585
|
-
.message-handle {
|
|
615
|
+
.message-handle {
|
|
616
|
+
font-size: 14px;
|
|
617
|
+
font-weight: 600;
|
|
618
|
+
color: var(--text-primary);
|
|
619
|
+
grid-column: 1;
|
|
620
|
+
grid-row: 1;
|
|
621
|
+
letter-spacing: -0.1px;
|
|
622
|
+
}
|
|
586
623
|
.message-handle.dm-trigger { cursor: pointer; }
|
|
587
|
-
.message-handle.dm-trigger:hover {
|
|
588
|
-
.message-time {
|
|
624
|
+
.message-handle.dm-trigger:hover { color: var(--accent); }
|
|
625
|
+
.message-time {
|
|
626
|
+
font-size: 11px;
|
|
627
|
+
color: var(--text-muted);
|
|
628
|
+
grid-column: 2;
|
|
629
|
+
grid-row: 1;
|
|
630
|
+
align-self: center;
|
|
631
|
+
text-align: right;
|
|
632
|
+
}
|
|
589
633
|
.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
634
|
.message-text p { white-space: pre-wrap; margin: 0 0 4px; }
|
|
591
635
|
.message-text p:last-child { margin-bottom: 0; }
|
|
@@ -611,28 +655,27 @@ details summary {
|
|
|
611
655
|
flex-wrap: wrap;
|
|
612
656
|
gap: 4px;
|
|
613
657
|
margin-top: 4px;
|
|
658
|
+
grid-column: 1 / -1; /* span full width in message grid */
|
|
614
659
|
}
|
|
615
660
|
.reaction-pill {
|
|
616
661
|
display: inline-flex;
|
|
617
662
|
align-items: center;
|
|
618
|
-
gap:
|
|
619
|
-
background:
|
|
620
|
-
border:
|
|
621
|
-
border-radius:
|
|
622
|
-
padding:
|
|
663
|
+
gap: 4px;
|
|
664
|
+
background: var(--fill-quaternary);
|
|
665
|
+
border: none;
|
|
666
|
+
border-radius: var(--radius-pill);
|
|
667
|
+
padding: 3px 9px;
|
|
623
668
|
font-size: 13px;
|
|
624
669
|
cursor: pointer;
|
|
625
670
|
color: var(--text-secondary);
|
|
626
|
-
transition:
|
|
671
|
+
transition: background var(--transition);
|
|
627
672
|
line-height: 1.4;
|
|
628
673
|
}
|
|
629
674
|
.reaction-pill:hover {
|
|
630
|
-
|
|
631
|
-
background: color-mix(in srgb, var(--accent) 8%, transparent);
|
|
675
|
+
background: var(--fill-tertiary);
|
|
632
676
|
}
|
|
633
677
|
.reaction-pill.reacted {
|
|
634
|
-
|
|
635
|
-
background: color-mix(in srgb, var(--accent) 15%, transparent);
|
|
678
|
+
background: color-mix(in srgb, var(--accent) 18%, transparent);
|
|
636
679
|
color: var(--accent);
|
|
637
680
|
font-weight: 600;
|
|
638
681
|
}
|
|
@@ -641,53 +684,56 @@ details summary {
|
|
|
641
684
|
display: inline-flex;
|
|
642
685
|
align-items: center;
|
|
643
686
|
justify-content: center;
|
|
644
|
-
background:
|
|
645
|
-
border:
|
|
646
|
-
border-radius:
|
|
647
|
-
padding:
|
|
687
|
+
background: var(--fill-quaternary);
|
|
688
|
+
border: none;
|
|
689
|
+
border-radius: var(--radius-pill);
|
|
690
|
+
padding: 3px 9px;
|
|
648
691
|
font-size: 13px;
|
|
649
692
|
cursor: pointer;
|
|
650
693
|
color: var(--text-muted);
|
|
651
|
-
transition:
|
|
694
|
+
transition: background var(--transition), color var(--transition);
|
|
652
695
|
line-height: 1.4;
|
|
653
696
|
}
|
|
654
|
-
.reaction-add:hover {
|
|
697
|
+
.reaction-add:hover { background: var(--fill-tertiary); color: var(--accent); }
|
|
655
698
|
|
|
656
|
-
/* ── Message context menu (right-click)
|
|
699
|
+
/* ── Message context menu (right-click) — Apple-style popover ────────────── */
|
|
657
700
|
.msg-context-menu {
|
|
658
701
|
position: absolute;
|
|
659
702
|
background: var(--bg-sidebar);
|
|
660
|
-
border:
|
|
661
|
-
border-radius: var(--radius-
|
|
662
|
-
box-shadow:
|
|
703
|
+
border: none;
|
|
704
|
+
border-radius: var(--radius-lg);
|
|
705
|
+
box-shadow: var(--shadow-md);
|
|
663
706
|
z-index: 300;
|
|
664
|
-
min-width:
|
|
707
|
+
min-width: 160px;
|
|
665
708
|
overflow: hidden;
|
|
666
709
|
}
|
|
667
710
|
.msg-context-menu-item {
|
|
668
711
|
display: block;
|
|
669
712
|
width: 100%;
|
|
670
|
-
padding: 0
|
|
671
|
-
height:
|
|
713
|
+
padding: 0 16px;
|
|
714
|
+
height: 40px;
|
|
672
715
|
background: none;
|
|
673
716
|
border: none;
|
|
717
|
+
border-top: 0.5px solid var(--border);
|
|
674
718
|
cursor: pointer;
|
|
675
719
|
text-align: left;
|
|
676
720
|
color: var(--text-primary);
|
|
677
|
-
font-size:
|
|
721
|
+
font-size: 15px;
|
|
722
|
+
transition: background var(--transition);
|
|
678
723
|
}
|
|
679
|
-
.msg-context-menu-item:
|
|
724
|
+
.msg-context-menu-item:first-child { border-top: none; }
|
|
725
|
+
.msg-context-menu-item:hover { background: var(--bg-hover); }
|
|
680
726
|
.msg-context-menu-item--danger { color: var(--color-danger); }
|
|
681
|
-
.msg-context-menu-item--danger:hover { background: color-mix(in srgb, var(--color-danger)
|
|
727
|
+
.msg-context-menu-item--danger:hover { background: color-mix(in srgb, var(--color-danger) 8%, transparent); }
|
|
682
728
|
|
|
683
729
|
/* ── Emoji picker ────────────────────────────────────────────────────────── */
|
|
684
730
|
.emoji-picker {
|
|
685
731
|
max-width: 320px;
|
|
686
732
|
width: 320px;
|
|
687
733
|
background: var(--bg-sidebar);
|
|
688
|
-
border:
|
|
689
|
-
border-radius: var(--radius-
|
|
690
|
-
box-shadow:
|
|
734
|
+
border: none;
|
|
735
|
+
border-radius: var(--radius-lg);
|
|
736
|
+
box-shadow: var(--shadow-lg);
|
|
691
737
|
overflow: hidden;
|
|
692
738
|
display: flex;
|
|
693
739
|
flex-direction: column;
|
|
@@ -764,31 +810,35 @@ details summary {
|
|
|
764
810
|
flex-wrap: wrap;
|
|
765
811
|
align-items: flex-end;
|
|
766
812
|
gap: 8px;
|
|
767
|
-
padding:
|
|
813
|
+
padding: 12px 16px;
|
|
768
814
|
padding-bottom: calc(12px + env(safe-area-inset-bottom));
|
|
769
815
|
border-top: 1px solid var(--border);
|
|
770
|
-
background: var(--bg-
|
|
816
|
+
background: var(--bg-topbar);
|
|
817
|
+
backdrop-filter: blur(20px);
|
|
818
|
+
-webkit-backdrop-filter: blur(20px);
|
|
771
819
|
position: relative;
|
|
772
820
|
}
|
|
773
821
|
.composer textarea {
|
|
774
822
|
flex: 1;
|
|
775
|
-
padding:
|
|
776
|
-
border-radius: var(--radius-
|
|
823
|
+
padding: 9px 14px;
|
|
824
|
+
border-radius: var(--radius-pill);
|
|
777
825
|
border: 1px solid var(--border);
|
|
778
826
|
background: var(--bg-input);
|
|
779
827
|
color: var(--text-primary);
|
|
780
828
|
font-family: var(--font-sans);
|
|
781
829
|
resize: none;
|
|
782
830
|
line-height: 1.5;
|
|
783
|
-
height: calc(1.5em +
|
|
831
|
+
height: calc(1.5em + 18px); /* lock to 1 row; iOS Safari expands textarea when placeholder wraps */
|
|
784
832
|
max-height: 160px;
|
|
785
833
|
overflow-y: auto;
|
|
834
|
+
transition: border-color var(--transition);
|
|
786
835
|
}
|
|
787
|
-
.composer textarea:focus { outline: none; border-color: var(--accent); }
|
|
836
|
+
.composer textarea:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 15%, transparent); }
|
|
788
837
|
.composer textarea::placeholder {
|
|
789
838
|
white-space: nowrap;
|
|
790
839
|
overflow: hidden;
|
|
791
840
|
text-overflow: ellipsis;
|
|
841
|
+
color: var(--text-muted);
|
|
792
842
|
}
|
|
793
843
|
/* Urgent toggle button */
|
|
794
844
|
.btn-urgent-toggle {
|
|
@@ -914,8 +964,8 @@ details summary {
|
|
|
914
964
|
.date-separator {
|
|
915
965
|
display: flex;
|
|
916
966
|
align-items: center;
|
|
917
|
-
gap:
|
|
918
|
-
margin:
|
|
967
|
+
gap: 10px;
|
|
968
|
+
margin: 20px 0 10px;
|
|
919
969
|
color: var(--text-muted);
|
|
920
970
|
font-size: 12px;
|
|
921
971
|
}
|
|
@@ -923,13 +973,14 @@ details summary {
|
|
|
923
973
|
.date-separator::after {
|
|
924
974
|
content: '';
|
|
925
975
|
flex: 1;
|
|
926
|
-
height:
|
|
976
|
+
height: 0.5px;
|
|
927
977
|
background: var(--border);
|
|
928
978
|
}
|
|
929
979
|
.date-separator-label {
|
|
930
980
|
white-space: nowrap;
|
|
931
981
|
padding: 0 6px;
|
|
932
982
|
font-weight: 500;
|
|
983
|
+
letter-spacing: 0.02em;
|
|
933
984
|
}
|
|
934
985
|
|
|
935
986
|
/* ── @mention inline highlight ───────────────────────────────────────────── */
|
|
@@ -939,13 +990,13 @@ details summary {
|
|
|
939
990
|
/* ── @mention picker popup ───────────────────────────────────────────────── */
|
|
940
991
|
.mention-picker {
|
|
941
992
|
position: absolute;
|
|
942
|
-
bottom: calc(100% +
|
|
993
|
+
bottom: calc(100% + 8px);
|
|
943
994
|
left: 0;
|
|
944
995
|
right: 0;
|
|
945
996
|
background: var(--bg-sidebar);
|
|
946
|
-
border:
|
|
947
|
-
border-radius:
|
|
948
|
-
box-shadow:
|
|
997
|
+
border: none;
|
|
998
|
+
border-radius: var(--radius-lg);
|
|
999
|
+
box-shadow: var(--shadow-lg);
|
|
949
1000
|
z-index: 200;
|
|
950
1001
|
max-height: 240px;
|
|
951
1002
|
overflow-y: auto;
|
|
@@ -953,81 +1004,142 @@ details summary {
|
|
|
953
1004
|
.mention-option {
|
|
954
1005
|
display: flex;
|
|
955
1006
|
align-items: center;
|
|
956
|
-
gap:
|
|
1007
|
+
gap: 10px;
|
|
957
1008
|
width: 100%;
|
|
958
|
-
padding:
|
|
1009
|
+
padding: 10px 14px;
|
|
959
1010
|
background: none;
|
|
960
1011
|
border: none;
|
|
1012
|
+
border-top: 0.5px solid var(--border);
|
|
961
1013
|
cursor: pointer;
|
|
962
1014
|
text-align: left;
|
|
963
1015
|
color: var(--text-primary);
|
|
964
|
-
font-size:
|
|
1016
|
+
font-size: 15px;
|
|
1017
|
+
transition: background var(--transition);
|
|
965
1018
|
}
|
|
1019
|
+
.mention-option:first-child { border-top: none; }
|
|
966
1020
|
.mention-option:hover,
|
|
967
|
-
.mention-option.selected { background:
|
|
1021
|
+
.mention-option.selected { background: var(--bg-hover); }
|
|
968
1022
|
.mention-option-name { font-weight: 600; color: var(--text-primary); }
|
|
969
|
-
.mention-option-handle { color: var(--text-
|
|
1023
|
+
.mention-option-handle { color: var(--text-secondary); font-size: 13px; }
|
|
970
1024
|
|
|
971
|
-
/* ── Auth page
|
|
1025
|
+
/* ── Auth page — Apple-style centered card ───────────────────────────────── */
|
|
972
1026
|
.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:
|
|
1027
|
+
.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); }
|
|
1028
|
+
.auth-brand h1 { font-weight: 700; color: var(--accent); letter-spacing: -0.5px; }
|
|
1029
|
+
.auth-brand p { color: var(--text-secondary); margin-top: 4px; margin-bottom: 28px; font-size: 15px; }
|
|
1030
|
+
.auth-tabs { display: flex; gap: 0; margin-bottom: 24px; border-bottom: 1px solid var(--border); }
|
|
1031
|
+
.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
1032
|
.auth-tabs a[aria-selected="true"] { color: var(--accent); border-bottom-color: var(--accent); }
|
|
979
1033
|
|
|
980
1034
|
.auth-form { display: flex; flex-direction: column; gap: 16px; }
|
|
981
1035
|
.field { display: flex; flex-direction: column; gap: 6px; }
|
|
982
|
-
.field label { font-weight:
|
|
1036
|
+
.field label { font-size: 13px; font-weight: 500; color: var(--text-secondary); }
|
|
983
1037
|
.field input {
|
|
984
|
-
padding:
|
|
1038
|
+
padding: 11px 14px;
|
|
1039
|
+
border-radius: var(--radius-md);
|
|
1040
|
+
border: 1px solid var(--border);
|
|
1041
|
+
background: var(--bg-input);
|
|
1042
|
+
color: var(--text-primary);
|
|
1043
|
+
font-size: 16px; /* 16px prevents iOS zoom on focus */
|
|
1044
|
+
transition: border-color var(--transition), box-shadow var(--transition);
|
|
1045
|
+
}
|
|
1046
|
+
.field input:focus {
|
|
1047
|
+
outline: none;
|
|
1048
|
+
border-color: var(--accent);
|
|
1049
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 15%, transparent);
|
|
985
1050
|
}
|
|
986
|
-
.field input:focus { outline: none; border-color: var(--accent); }
|
|
987
1051
|
|
|
988
|
-
/* ── Buttons
|
|
1052
|
+
/* ── Buttons — Apple HIG button styles ───────────────────────────────────── */
|
|
989
1053
|
.btn-primary {
|
|
990
|
-
padding: 10px 20px;
|
|
991
|
-
|
|
992
|
-
|
|
1054
|
+
padding: 10px 20px;
|
|
1055
|
+
border: none;
|
|
1056
|
+
border-radius: var(--radius-pill);
|
|
1057
|
+
background: var(--accent);
|
|
1058
|
+
color: white;
|
|
1059
|
+
font-weight: 600;
|
|
1060
|
+
font-size: 15px;
|
|
1061
|
+
cursor: pointer;
|
|
1062
|
+
transition: opacity var(--transition);
|
|
1063
|
+
min-height: 44px;
|
|
993
1064
|
}
|
|
994
1065
|
.btn-primary:hover { opacity: 0.85; }
|
|
1066
|
+
.btn-primary:active { opacity: 0.75; transform: scale(0.98); }
|
|
995
1067
|
.btn-ghost {
|
|
996
1068
|
border: none;
|
|
997
|
-
padding:
|
|
998
|
-
border-radius: var(--radius-
|
|
999
|
-
color: var(--
|
|
1069
|
+
padding: 8px 14px;
|
|
1070
|
+
border-radius: var(--radius-md);
|
|
1071
|
+
color: var(--accent);
|
|
1000
1072
|
cursor: pointer;
|
|
1073
|
+
font-size: 15px;
|
|
1074
|
+
font-weight: 400;
|
|
1075
|
+
background: none;
|
|
1076
|
+
transition: background var(--transition), opacity var(--transition);
|
|
1001
1077
|
}
|
|
1002
|
-
.btn-ghost:hover { background: var(--bg-hover);
|
|
1078
|
+
.btn-ghost:hover { background: var(--bg-hover); }
|
|
1003
1079
|
.btn-icon {
|
|
1004
|
-
background: none;
|
|
1080
|
+
background: none;
|
|
1081
|
+
border: none;
|
|
1082
|
+
padding: 8px;
|
|
1083
|
+
border-radius: var(--radius-md);
|
|
1084
|
+
color: var(--text-secondary);
|
|
1085
|
+
cursor: pointer;
|
|
1086
|
+
min-width: 36px;
|
|
1087
|
+
min-height: 36px;
|
|
1088
|
+
display: inline-flex;
|
|
1089
|
+
align-items: center;
|
|
1090
|
+
justify-content: center;
|
|
1091
|
+
transition: background var(--transition), color var(--transition);
|
|
1005
1092
|
}
|
|
1006
1093
|
.btn-icon:hover { background: var(--bg-hover); color: var(--text-primary); }
|
|
1094
|
+
.btn-icon:active { background: var(--fill-secondary); }
|
|
1007
1095
|
.btn-icon.active { color: var(--accent); }
|
|
1008
1096
|
.btn-call-join {
|
|
1009
|
-
padding:
|
|
1010
|
-
|
|
1097
|
+
padding: 8px 18px;
|
|
1098
|
+
background: var(--color-success);
|
|
1099
|
+
color: white;
|
|
1100
|
+
border: none;
|
|
1101
|
+
border-radius: var(--radius-pill);
|
|
1102
|
+
font-weight: 600;
|
|
1103
|
+
cursor: pointer;
|
|
1011
1104
|
}
|
|
1012
1105
|
.btn-call-leave {
|
|
1013
|
-
padding:
|
|
1014
|
-
|
|
1106
|
+
padding: 8px 18px;
|
|
1107
|
+
background: var(--color-danger);
|
|
1108
|
+
color: white;
|
|
1109
|
+
border: none;
|
|
1110
|
+
border-radius: var(--radius-pill);
|
|
1111
|
+
font-weight: 600;
|
|
1112
|
+
cursor: pointer;
|
|
1113
|
+
}
|
|
1114
|
+
.btn-send {
|
|
1115
|
+
padding: 8px 18px;
|
|
1116
|
+
background: var(--accent);
|
|
1117
|
+
color: white;
|
|
1118
|
+
border: none;
|
|
1119
|
+
border-radius: var(--radius-pill);
|
|
1120
|
+
font-size: 15px;
|
|
1121
|
+
font-weight: 600;
|
|
1122
|
+
cursor: pointer;
|
|
1123
|
+
min-height: 36px;
|
|
1124
|
+
transition: opacity var(--transition);
|
|
1015
1125
|
}
|
|
1016
|
-
.btn-send {
|
|
1126
|
+
.btn-send:hover { opacity: 0.85; }
|
|
1127
|
+
.btn-send:active { opacity: 0.75; }
|
|
1017
1128
|
|
|
1018
|
-
/* ── Alerts
|
|
1129
|
+
/* ── Alerts — Apple HIG toast notifications ──────────────────────────────── */
|
|
1019
1130
|
.alert {
|
|
1020
|
-
padding: 10px
|
|
1021
|
-
border-radius: var(--radius-
|
|
1131
|
+
padding: 10px 16px;
|
|
1132
|
+
border-radius: var(--radius-lg);
|
|
1022
1133
|
margin: 0 auto;
|
|
1023
1134
|
position: absolute;
|
|
1024
1135
|
top: 3.5rem;
|
|
1136
|
+
box-shadow: var(--shadow-md);
|
|
1025
1137
|
}
|
|
1026
1138
|
|
|
1027
1139
|
.alert-error {
|
|
1028
|
-
background: color-mix(in srgb, var(--color-danger)
|
|
1140
|
+
background: color-mix(in srgb, var(--color-danger) 12%, var(--bg-sidebar));
|
|
1029
1141
|
color: var(--color-danger);
|
|
1030
|
-
border:
|
|
1142
|
+
border: none;
|
|
1031
1143
|
opacity: 1;
|
|
1032
1144
|
animation: fadeOut 2s forwards;
|
|
1033
1145
|
}
|
|
@@ -1048,7 +1160,12 @@ details summary {
|
|
|
1048
1160
|
|
|
1049
1161
|
/* ── Theme picker ────────────────────────────────────────────────────────── */
|
|
1050
1162
|
select#theme-picker {
|
|
1051
|
-
padding:
|
|
1163
|
+
padding: 5px 10px;
|
|
1164
|
+
border-radius: var(--radius-md);
|
|
1165
|
+
border: 1px solid var(--border);
|
|
1166
|
+
background: var(--bg-input);
|
|
1167
|
+
color: var(--text-primary);
|
|
1168
|
+
font-size: 13px;
|
|
1052
1169
|
cursor: pointer;
|
|
1053
1170
|
}
|
|
1054
1171
|
|
|
@@ -1103,7 +1220,7 @@ mark { background: color-mix(in srgb, var(--accent) 30%, transparent); color: va
|
|
|
1103
1220
|
height: 100dvh;
|
|
1104
1221
|
width: 100%;
|
|
1105
1222
|
transform: translateX(0);
|
|
1106
|
-
transition: transform
|
|
1223
|
+
transition: transform 300ms cubic-bezier(0.32, 0.72, 0, 1);
|
|
1107
1224
|
overflow-y: auto;
|
|
1108
1225
|
}
|
|
1109
1226
|
|
|
@@ -1115,7 +1232,7 @@ mark { background: color-mix(in srgb, var(--accent) 30%, transparent); color: va
|
|
|
1115
1232
|
height: 100dvh;
|
|
1116
1233
|
width: 100%;
|
|
1117
1234
|
transform: translateX(100%);
|
|
1118
|
-
transition: transform
|
|
1235
|
+
transition: transform 300ms cubic-bezier(0.32, 0.72, 0, 1);
|
|
1119
1236
|
overflow: hidden;
|
|
1120
1237
|
}
|
|
1121
1238
|
|
|
@@ -1136,21 +1253,22 @@ mark { background: color-mix(in srgb, var(--accent) 30%, transparent); color: va
|
|
|
1136
1253
|
transform: translateX(100%);
|
|
1137
1254
|
}
|
|
1138
1255
|
|
|
1139
|
-
/* Show back button */
|
|
1256
|
+
/* Show back button — Apple chevron style */
|
|
1140
1257
|
.btn-back-mobile {
|
|
1141
1258
|
display: flex;
|
|
1142
1259
|
align-items: center;
|
|
1143
|
-
|
|
1260
|
+
gap: 3px;
|
|
1144
1261
|
background: none;
|
|
1145
1262
|
border: none;
|
|
1146
1263
|
cursor: pointer;
|
|
1147
|
-
color: var(--
|
|
1148
|
-
padding: 6px
|
|
1149
|
-
font-size:
|
|
1150
|
-
|
|
1264
|
+
color: var(--accent);
|
|
1265
|
+
padding: 6px 8px 6px 4px;
|
|
1266
|
+
font-size: 15px;
|
|
1267
|
+
font-weight: 400;
|
|
1268
|
+
border-radius: var(--radius-md);
|
|
1151
1269
|
flex-shrink: 0;
|
|
1152
1270
|
}
|
|
1153
|
-
.btn-back-mobile:hover {
|
|
1271
|
+
.btn-back-mobile:hover { opacity: 0.75; }
|
|
1154
1272
|
|
|
1155
1273
|
/* Hover toolbar: no hover on touch — always visible, tucked inside message */
|
|
1156
1274
|
.message-hover-actions {
|
|
@@ -1358,15 +1476,19 @@ mark { background: color-mix(in srgb, var(--accent) 30%, transparent); color: va
|
|
|
1358
1476
|
.thread-panel-header {
|
|
1359
1477
|
display: flex;
|
|
1360
1478
|
align-items: center;
|
|
1361
|
-
padding:
|
|
1479
|
+
padding: 12px 16px;
|
|
1362
1480
|
border-bottom: 1px solid var(--border);
|
|
1363
1481
|
background: var(--bg-topbar);
|
|
1482
|
+
backdrop-filter: blur(20px);
|
|
1483
|
+
-webkit-backdrop-filter: blur(20px);
|
|
1364
1484
|
flex-shrink: 0;
|
|
1485
|
+
gap: 8px;
|
|
1365
1486
|
}
|
|
1366
1487
|
.thread-panel-title {
|
|
1367
1488
|
flex: 1;
|
|
1368
|
-
font-size:
|
|
1489
|
+
font-size: 15px;
|
|
1369
1490
|
font-weight: 600;
|
|
1491
|
+
letter-spacing: -0.1px;
|
|
1370
1492
|
}
|
|
1371
1493
|
.thread-panel-close {
|
|
1372
1494
|
font-size: 14px;
|
|
@@ -1431,27 +1553,33 @@ mark { background: color-mix(in srgb, var(--accent) 30%, transparent); color: va
|
|
|
1431
1553
|
.thread-textarea {
|
|
1432
1554
|
width: 100%;
|
|
1433
1555
|
box-sizing: border-box;
|
|
1434
|
-
padding:
|
|
1435
|
-
background: var(--bg-input
|
|
1556
|
+
padding: 9px 12px;
|
|
1557
|
+
background: var(--bg-input);
|
|
1436
1558
|
border: 1px solid var(--border);
|
|
1437
|
-
border-radius: var(--radius-
|
|
1438
|
-
color: var(--
|
|
1559
|
+
border-radius: var(--radius-pill);
|
|
1560
|
+
color: var(--text-primary);
|
|
1439
1561
|
font-family: inherit;
|
|
1440
|
-
font-size:
|
|
1562
|
+
font-size: 15px;
|
|
1441
1563
|
resize: none;
|
|
1442
|
-
min-height:
|
|
1564
|
+
min-height: 38px;
|
|
1565
|
+
transition: border-color var(--transition), box-shadow var(--transition);
|
|
1566
|
+
}
|
|
1567
|
+
.thread-textarea:focus {
|
|
1568
|
+
outline: none;
|
|
1569
|
+
border-color: var(--accent);
|
|
1570
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 15%, transparent);
|
|
1443
1571
|
}
|
|
1444
|
-
.thread-textarea:focus { outline: none; border-color: var(--color-accent); }
|
|
1445
1572
|
.thread-send-btn { align-self: flex-end; }
|
|
1446
1573
|
|
|
1447
1574
|
/* "View N replies" link under messages */
|
|
1448
1575
|
.thread-replies-link {
|
|
1449
1576
|
display: inline-block;
|
|
1450
1577
|
font-size: 12px;
|
|
1451
|
-
color: var(--
|
|
1578
|
+
color: var(--accent);
|
|
1452
1579
|
margin: 2px 0 0;
|
|
1453
1580
|
cursor: pointer;
|
|
1454
1581
|
text-decoration: none;
|
|
1582
|
+
grid-column: 1 / -1; /* span full width in message grid */
|
|
1455
1583
|
}
|
|
1456
1584
|
.thread-replies-link:hover { text-decoration: underline; }
|
|
1457
1585
|
|
|
@@ -1484,15 +1612,16 @@ mark { background: color-mix(in srgb, var(--accent) 30%, transparent); color: va
|
|
|
1484
1612
|
display: flex;
|
|
1485
1613
|
align-items: center;
|
|
1486
1614
|
gap: 10px;
|
|
1487
|
-
padding:
|
|
1488
|
-
background: var(--bg-topbar);
|
|
1615
|
+
padding: 8px 16px;
|
|
1616
|
+
background: color-mix(in srgb, var(--color-success) 8%, var(--bg-topbar));
|
|
1489
1617
|
border-bottom: 1px solid var(--border);
|
|
1490
|
-
font-size:
|
|
1618
|
+
font-size: 14px;
|
|
1491
1619
|
}
|
|
1492
1620
|
.call-status[hidden] { display: none; }
|
|
1493
1621
|
.call-status-dot {
|
|
1494
1622
|
width: 8px; height: 8px; border-radius: 50%;
|
|
1495
|
-
background: var(--color-success
|
|
1623
|
+
background: var(--color-success); flex-shrink: 0;
|
|
1624
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-success) 30%, transparent);
|
|
1496
1625
|
}
|
|
1497
1626
|
.call-status-info { flex: 1; color: var(--text-secondary); }
|
|
1498
1627
|
.call-status-avatars { display: flex; }
|
|
@@ -1517,10 +1646,15 @@ mark { background: color-mix(in srgb, var(--accent) 30%, transparent); color: va
|
|
|
1517
1646
|
.call-peer-count { color: var(--text-muted); font-size: 13px; }
|
|
1518
1647
|
.btn-leave {
|
|
1519
1648
|
margin-left: auto;
|
|
1520
|
-
padding:
|
|
1521
|
-
background: var(--color-danger, #
|
|
1522
|
-
color: white;
|
|
1523
|
-
|
|
1649
|
+
padding: 6px 14px;
|
|
1650
|
+
background: var(--color-danger, #FF453A);
|
|
1651
|
+
color: white;
|
|
1652
|
+
border: none;
|
|
1653
|
+
border-radius: var(--radius-pill);
|
|
1654
|
+
font-weight: 600;
|
|
1655
|
+
cursor: pointer;
|
|
1656
|
+
font-size: 13px;
|
|
1657
|
+
transition: opacity var(--transition);
|
|
1524
1658
|
}
|
|
1525
1659
|
.btn-leave:hover { opacity: 0.85; }
|
|
1526
1660
|
|
|
@@ -1776,12 +1910,20 @@ body:has(.admin-topbar) main {
|
|
|
1776
1910
|
.form-row input[type="text"],
|
|
1777
1911
|
.form-row input[type="password"],
|
|
1778
1912
|
.form-row input[type="number"] {
|
|
1779
|
-
padding:
|
|
1780
|
-
border-radius:
|
|
1913
|
+
padding: 9px 12px;
|
|
1914
|
+
border-radius: var(--radius-md);
|
|
1781
1915
|
border: 1px solid var(--border);
|
|
1782
1916
|
background: var(--bg-input);
|
|
1783
1917
|
color: var(--text-primary);
|
|
1784
|
-
font-size:
|
|
1918
|
+
font-size: 15px;
|
|
1919
|
+
transition: border-color var(--transition), box-shadow var(--transition);
|
|
1920
|
+
}
|
|
1921
|
+
.form-row input[type="text"]:focus,
|
|
1922
|
+
.form-row input[type="password"]:focus,
|
|
1923
|
+
.form-row input[type="number"]:focus {
|
|
1924
|
+
outline: none;
|
|
1925
|
+
border-color: var(--accent);
|
|
1926
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 15%, transparent);
|
|
1785
1927
|
}
|
|
1786
1928
|
|
|
1787
1929
|
.checkbox-label {
|
|
@@ -1985,23 +2127,25 @@ form.inline { display: inline; }
|
|
|
1985
2127
|
.attachment-image {
|
|
1986
2128
|
max-width: min(400px, 100%);
|
|
1987
2129
|
max-height: 300px;
|
|
1988
|
-
border-radius: var(--radius-
|
|
2130
|
+
border-radius: var(--radius-lg);
|
|
1989
2131
|
object-fit: contain;
|
|
1990
2132
|
display: block;
|
|
1991
2133
|
}
|
|
1992
2134
|
.attachment-file {
|
|
1993
2135
|
display: inline-flex;
|
|
1994
2136
|
align-items: center;
|
|
1995
|
-
gap:
|
|
2137
|
+
gap: 8px;
|
|
1996
2138
|
margin-top: 6px;
|
|
1997
|
-
padding:
|
|
1998
|
-
border-radius: var(--radius-
|
|
2139
|
+
padding: 8px 14px;
|
|
2140
|
+
border-radius: var(--radius-lg);
|
|
1999
2141
|
background: var(--bg-input);
|
|
2000
|
-
border:
|
|
2142
|
+
border: none;
|
|
2143
|
+
box-shadow: var(--shadow-sm);
|
|
2001
2144
|
text-decoration: none;
|
|
2002
2145
|
color: var(--text-secondary);
|
|
2003
|
-
font-size:
|
|
2146
|
+
font-size: 14px;
|
|
2004
2147
|
max-width: 340px;
|
|
2148
|
+
transition: background var(--transition);
|
|
2005
2149
|
}
|
|
2006
2150
|
.attachment-file:hover { background: var(--bg-hover); color: var(--text-primary); }
|
|
2007
2151
|
.attachment-file-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
@@ -2021,14 +2165,15 @@ form.inline { display: inline; }
|
|
|
2021
2165
|
bottom: 60px;
|
|
2022
2166
|
left: 12px;
|
|
2023
2167
|
right: 12px;
|
|
2024
|
-
padding:
|
|
2025
|
-
background: var(--bg-topbar);
|
|
2026
|
-
border:
|
|
2027
|
-
border-radius: var(--radius-
|
|
2168
|
+
padding: 10px 14px;
|
|
2169
|
+
background: var(--bg-elevated, var(--bg-topbar));
|
|
2170
|
+
border: none;
|
|
2171
|
+
border-radius: var(--radius-lg);
|
|
2028
2172
|
font-size: 13px;
|
|
2029
2173
|
color: var(--text-primary);
|
|
2030
2174
|
z-index: 200;
|
|
2031
|
-
|
|
2175
|
+
box-shadow: var(--shadow-md);
|
|
2176
|
+
animation: toast-in 0.2s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
2032
2177
|
}
|
|
2033
2178
|
@keyframes toast-in {
|
|
2034
2179
|
from { opacity: 0; transform: translateY(8px); }
|
|
@@ -2046,9 +2191,10 @@ form.inline { display: inline; }
|
|
|
2046
2191
|
.message-edit-wrap {
|
|
2047
2192
|
grid-column: 1 / -1;
|
|
2048
2193
|
border: 1px solid var(--accent);
|
|
2049
|
-
border-radius: var(--radius-
|
|
2194
|
+
border-radius: var(--radius-lg);
|
|
2050
2195
|
overflow: hidden;
|
|
2051
2196
|
background: var(--bg-input, var(--bg-sidebar));
|
|
2197
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 12%, transparent);
|
|
2052
2198
|
}
|
|
2053
2199
|
|
|
2054
2200
|
.message-edit-tabs {
|
|
@@ -2119,45 +2265,48 @@ form.inline { display: inline; }
|
|
|
2119
2265
|
font-size: 13px;
|
|
2120
2266
|
}
|
|
2121
2267
|
|
|
2122
|
-
/* Hover action toolbar — floats above the message on hover
|
|
2268
|
+
/* Hover action toolbar — floats above the message on hover */
|
|
2123
2269
|
article.message { position: relative; }
|
|
2124
2270
|
.message-hover-actions {
|
|
2125
2271
|
position: absolute;
|
|
2126
|
-
top: -
|
|
2272
|
+
top: -22px;
|
|
2127
2273
|
right: 4px;
|
|
2128
2274
|
display: flex;
|
|
2129
|
-
gap:
|
|
2275
|
+
gap: 0;
|
|
2130
2276
|
align-items: center;
|
|
2131
2277
|
opacity: 0;
|
|
2132
2278
|
pointer-events: none;
|
|
2133
|
-
transition: opacity
|
|
2279
|
+
transition: opacity 150ms;
|
|
2134
2280
|
background: var(--bg-sidebar);
|
|
2135
|
-
border:
|
|
2136
|
-
border-radius: var(--radius-
|
|
2137
|
-
padding:
|
|
2138
|
-
box-shadow:
|
|
2281
|
+
border: none;
|
|
2282
|
+
border-radius: var(--radius-lg);
|
|
2283
|
+
padding: 3px;
|
|
2284
|
+
box-shadow: var(--shadow-md);
|
|
2139
2285
|
z-index: 10;
|
|
2140
2286
|
}
|
|
2141
2287
|
article.message:hover .message-hover-actions { opacity: 1; pointer-events: auto; }
|
|
2142
2288
|
.quick-picks { display: contents; }
|
|
2143
|
-
.quick-picks:not(:empty) + .btn-react { border-left:
|
|
2289
|
+
.quick-picks:not(:empty) + .btn-react { border-left: 0.5px solid var(--border); margin-left: 2px; padding-left: 6px; }
|
|
2144
2290
|
.btn-quick-react,
|
|
2145
2291
|
.btn-react,
|
|
2146
2292
|
.btn-msg-actions {
|
|
2147
2293
|
background: none;
|
|
2148
2294
|
border: none;
|
|
2149
2295
|
cursor: pointer;
|
|
2150
|
-
padding:
|
|
2151
|
-
border-radius:
|
|
2296
|
+
padding: 4px 8px;
|
|
2297
|
+
border-radius: var(--radius-md);
|
|
2152
2298
|
font-size: 15px;
|
|
2153
2299
|
line-height: 1;
|
|
2154
2300
|
color: var(--text-secondary);
|
|
2155
2301
|
transition: background var(--transition), color var(--transition);
|
|
2302
|
+
min-height: 30px;
|
|
2303
|
+
display: inline-flex;
|
|
2304
|
+
align-items: center;
|
|
2156
2305
|
}
|
|
2157
2306
|
.btn-quick-react:hover,
|
|
2158
2307
|
.btn-react:hover,
|
|
2159
2308
|
.btn-msg-actions:hover {
|
|
2160
|
-
background:
|
|
2309
|
+
background: var(--bg-hover);
|
|
2161
2310
|
color: var(--text-primary);
|
|
2162
2311
|
}
|
|
2163
2312
|
|
|
@@ -2187,38 +2336,42 @@ article.message:hover .message-hover-actions { opacity: 1; pointer-events: auto;
|
|
|
2187
2336
|
.msg-context-menu-item--danger { color: var(--color-danger, #e74c3c); }
|
|
2188
2337
|
.msg-context-menu-item--danger:hover { background: color-mix(in srgb, var(--color-danger, #e74c3c) 12%, transparent); }
|
|
2189
2338
|
|
|
2190
|
-
/* Bottom sheet (mobile long-press) */
|
|
2339
|
+
/* Bottom sheet (mobile long-press) — Apple iOS style */
|
|
2191
2340
|
.action-sheet {
|
|
2192
2341
|
position: fixed;
|
|
2193
2342
|
bottom: 0;
|
|
2194
2343
|
left: 0;
|
|
2195
2344
|
right: 0;
|
|
2196
2345
|
background: var(--bg-sidebar);
|
|
2197
|
-
border-top:
|
|
2198
|
-
border-radius:
|
|
2346
|
+
border-top: none;
|
|
2347
|
+
border-radius: 20px 20px 0 0;
|
|
2199
2348
|
z-index: 400;
|
|
2200
2349
|
transform: translateY(100%);
|
|
2201
|
-
transition: transform
|
|
2202
|
-
padding-bottom: env(safe-area-inset-bottom,
|
|
2350
|
+
transition: transform 300ms cubic-bezier(0.32, 0.72, 0, 1);
|
|
2351
|
+
padding-bottom: env(safe-area-inset-bottom, 0px);
|
|
2352
|
+
box-shadow: var(--shadow-lg);
|
|
2203
2353
|
}
|
|
2204
2354
|
.action-sheet.open { transform: translateY(0); }
|
|
2205
2355
|
.action-sheet-handle {
|
|
2206
|
-
width:
|
|
2356
|
+
width: 36px;
|
|
2207
2357
|
height: 4px;
|
|
2208
2358
|
background: var(--border);
|
|
2209
2359
|
border-radius: 2px;
|
|
2210
2360
|
margin: 10px auto 6px;
|
|
2211
2361
|
}
|
|
2212
|
-
.action-sheet-body { padding:
|
|
2362
|
+
.action-sheet-body { padding: 0 0 4px; }
|
|
2213
2363
|
.action-sheet-item {
|
|
2214
2364
|
display: block;
|
|
2215
2365
|
width: 100%;
|
|
2216
|
-
padding:
|
|
2366
|
+
padding: 16px 20px;
|
|
2217
2367
|
text-align: left;
|
|
2218
2368
|
background: none;
|
|
2219
2369
|
border: none;
|
|
2370
|
+
border-top: 0.5px solid var(--border);
|
|
2220
2371
|
color: var(--text-primary);
|
|
2221
|
-
font-size:
|
|
2372
|
+
font-size: 17px;
|
|
2222
2373
|
cursor: pointer;
|
|
2374
|
+
transition: background var(--transition);
|
|
2223
2375
|
}
|
|
2224
|
-
.action-sheet-item:
|
|
2376
|
+
.action-sheet-item:first-of-type { border-top: none; }
|
|
2377
|
+
.action-sheet-item:hover { background: var(--bg-hover); }
|