tacel-chat 1.2.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/chat.css ADDED
@@ -0,0 +1,2573 @@
1
+ /* ═══════════════════════════════════════════════════════════════
2
+ tacel-chat — Full CSS with CSS variable theming
3
+ ═══════════════════════════════════════════════════════════════ */
4
+
5
+ .tacel-chat {
6
+ /* ── Global Layout ─────────────────────────────────────────── */
7
+ --chat-sidebar-width: 320px;
8
+ --chat-font: 'Segoe UI', 'Roboto', sans-serif;
9
+ --chat-font-size: 14px;
10
+ --chat-font-weight: 400;
11
+ --chat-line-height: 1.5;
12
+ --chat-radius: 12px;
13
+ --chat-radius-sm: 8px;
14
+ --chat-radius-lg: 16px;
15
+ --chat-transition-speed: 0.2s;
16
+
17
+ /* ── Global Colors ─────────────────────────────────────────── */
18
+ --chat-bg: #ffffff;
19
+ --chat-sidebar-bg: #ffffff;
20
+ --chat-border: rgba(0, 0, 0, 0.1);
21
+ --chat-border-width: 1px;
22
+ --chat-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
23
+ --chat-text: #333333;
24
+ --chat-text-secondary: #666666;
25
+ --chat-text-muted: #999999;
26
+
27
+ /* ── Accent ────────────────────────────────────────────────── */
28
+ --chat-accent: #1976d2;
29
+ --chat-accent-transparent: rgba(25, 118, 210, 0.1);
30
+ --chat-accent-gradient: linear-gradient(135deg, #1976d2, #1565c0);
31
+
32
+ /* ── Avatar ────────────────────────────────────────────────── */
33
+ --chat-avatar-size: 40px;
34
+ --chat-avatar-radius: 10px;
35
+ --chat-avatar-font-size: 14px;
36
+ --chat-avatar-font-weight: 600;
37
+ --chat-avatar-bg: rgba(25, 118, 210, 0.1);
38
+ --chat-avatar-text: #1976d2;
39
+ --chat-avatar-team-bg: rgba(25, 118, 210, 0.15);
40
+
41
+ /* ── Sidebar ───────────────────────────────────────────────── */
42
+ --chat-sidebar-padding: 16px;
43
+ --chat-sidebar-title-size: 16px;
44
+ --chat-sidebar-title-weight: 600;
45
+ --chat-sidebar-icon-size: 18px;
46
+ --chat-sidebar-section-size: 11px;
47
+ --chat-sidebar-section-weight: 600;
48
+ --chat-sidebar-section-spacing: 0.5px;
49
+ --chat-sidebar-item-padding: 10px 12px;
50
+ --chat-sidebar-item-radius: 10px;
51
+ --chat-sidebar-item-gap: 12px;
52
+ --chat-sidebar-item-border-width: 3px;
53
+ --chat-sidebar-name-size: 14px;
54
+ --chat-sidebar-name-weight: 500;
55
+ --chat-sidebar-time-size: 11px;
56
+ --chat-sidebar-preview-size: 12px;
57
+ --chat-sidebar-new-btn-size: 32px;
58
+ --chat-sidebar-new-btn-radius: 8px;
59
+ --chat-sidebar-new-btn-icon-size: 14px;
60
+ --chat-sidebar-search-padding: 8px 12px;
61
+ --chat-sidebar-search-radius: 8px;
62
+ --chat-sidebar-search-size: 13px;
63
+
64
+ /* ── Presence ──────────────────────────────────────────────── */
65
+ --chat-presence-size: 8px;
66
+ --chat-online-color: #4caf50;
67
+ --chat-online-glow: rgba(76, 175, 80, 0.3);
68
+ --chat-offline-color: rgba(0, 0, 0, 0.3);
69
+
70
+ /* ── Unread Badge ──────────────────────────────────────────── */
71
+ --chat-unread-bg: var(--chat-accent);
72
+ --chat-unread-text: #ffffff;
73
+ --chat-unread-size: 18px;
74
+ --chat-unread-font-size: 11px;
75
+ --chat-unread-font-weight: 600;
76
+ --chat-unread-radius: 999px;
77
+
78
+ /* ── Chat Header ───────────────────────────────────────────── */
79
+ --chat-header-padding: 12px 20px;
80
+ --chat-header-min-height: 56px;
81
+ --chat-header-bg: var(--chat-bg);
82
+ --chat-header-name-size: 15px;
83
+ --chat-header-name-weight: 600;
84
+ --chat-header-status-size: 12px;
85
+
86
+ /* ── Messages Area ─────────────────────────────────────────── */
87
+ --chat-messages-padding: 16px 20px;
88
+ --chat-messages-gap: 4px;
89
+ --chat-msg-max-width: min(70%, 720px);
90
+ --chat-msg-gap: 10px;
91
+
92
+ /* ── Message Bubbles (conversation mode) ───────────────────── */
93
+ --chat-bubble-padding: 8px 14px;
94
+ --chat-bubble-radius: var(--chat-radius);
95
+ --chat-bubble-tail-radius: 4px;
96
+ --chat-bubble-font-size: 14px;
97
+ --chat-own-bubble-bg: rgba(25, 118, 210, 0.1);
98
+ --chat-own-bubble-border: rgba(25, 118, 210, 0.2);
99
+ --chat-own-bubble-text: #333333;
100
+ --chat-other-bubble-bg: rgba(0, 0, 0, 0.03);
101
+ --chat-other-bubble-border: rgba(0, 0, 0, 0.08);
102
+ --chat-other-bubble-text: #333333;
103
+
104
+ /* ── Message Cards (room mode) ─────────────────────────────── */
105
+ --chat-card-padding: 10px 14px;
106
+ --chat-card-radius: var(--chat-radius);
107
+ --chat-card-shadow: var(--chat-shadow);
108
+ --chat-card-bg: var(--chat-bg);
109
+ --chat-card-border: var(--chat-border);
110
+
111
+ /* ── Message Meta ──────────────────────────────────────────── */
112
+ --chat-msg-sender-size: 13px;
113
+ --chat-msg-sender-weight: 600;
114
+ --chat-msg-time-size: 11px;
115
+ --chat-msg-text-size: var(--chat-font-size);
116
+
117
+ /* ── Date Divider ──────────────────────────────────────────── */
118
+ --chat-divider-margin: 16px 0 8px;
119
+ --chat-divider-padding: 4px 14px;
120
+ --chat-divider-font-size: 12px;
121
+ --chat-divider-font-weight: 500;
122
+ --chat-divider-radius: 999px;
123
+ --chat-date-divider-bg: rgba(0, 0, 0, 0.03);
124
+ --chat-date-divider-text: var(--chat-accent);
125
+ --chat-date-divider-border: rgba(0, 0, 0, 0.1);
126
+
127
+ /* ── Seen Indicator ────────────────────────────────────────── */
128
+ --chat-seen-color: var(--chat-accent);
129
+ --chat-seen-font-size: 11px;
130
+
131
+ /* ── Input Area ────────────────────────────────────────────── */
132
+ --chat-input-padding: 12px 20px;
133
+ --chat-input-bg: rgba(0, 0, 0, 0.02);
134
+ --chat-input-border: rgba(0, 0, 0, 0.1);
135
+ --chat-input-focus-border: var(--chat-accent);
136
+ --chat-input-radius: 10px;
137
+ --chat-input-font-size: 14px;
138
+ --chat-input-line-height: 1.4;
139
+ --chat-input-max-height: 120px;
140
+ --chat-input-inner-padding: 10px 14px;
141
+
142
+ /* ── Send Button ───────────────────────────────────────────── */
143
+ --chat-send-size: 40px;
144
+ --chat-send-radius: 10px;
145
+ --chat-send-icon-size: 16px;
146
+ --chat-send-bg: var(--chat-accent-gradient);
147
+ --chat-send-text: #ffffff;
148
+
149
+ /* ── Mentions ──────────────────────────────────────────────── */
150
+ --chat-mention-bg: rgba(25, 118, 210, 0.15);
151
+ --chat-mention-text: var(--chat-accent);
152
+ --chat-mention-radius: 3px;
153
+ --chat-mention-padding: 1px 4px;
154
+ --chat-mention-font-weight: 500;
155
+ --chat-mention-self-bg: rgba(255, 193, 7, 0.25);
156
+ --chat-mention-self-text: #f57f17;
157
+ --chat-mention-popup-max-height: 200px;
158
+ --chat-mention-popup-radius: 8px;
159
+ --chat-mention-popup-shadow: 0 -4px 16px rgba(0, 0, 0, 0.12);
160
+ --chat-mention-item-padding: 8px 12px;
161
+ --chat-mention-item-avatar-size: 28px;
162
+ --chat-mention-item-name-size: 13px;
163
+
164
+ /* ── Attachments ───────────────────────────────────────────── */
165
+ --chat-attachment-bg: rgba(0, 0, 0, 0.04);
166
+ --chat-attachment-radius: 8px;
167
+ --chat-attachment-btn-size: 40px;
168
+ --chat-attachment-btn-radius: 10px;
169
+ --chat-attachment-btn-icon-size: 16px;
170
+ --chat-attachment-btn-bg: #f0f0f0;
171
+ --chat-attachment-btn-hover: #e0e0e0;
172
+ --chat-attachment-active-bg: #4caf50;
173
+ --chat-attachment-active-text: #ffffff;
174
+ --chat-attachment-image-max-width: 300px;
175
+ --chat-attachment-image-max-height: 200px;
176
+
177
+ /* ── Links ─────────────────────────────────────────────────── */
178
+ --chat-link-color: var(--chat-accent);
179
+ --chat-link-decoration: none;
180
+ --chat-link-hover-decoration: underline;
181
+
182
+ /* ── Tabs (room mode) ──────────────────────────────────────── */
183
+ --chat-tab-bg: #f5f5f5;
184
+ --chat-tab-active-bg: #ffffff;
185
+ --chat-tab-active-color: var(--chat-accent);
186
+ --chat-tab-active-border: var(--chat-accent);
187
+ --chat-tab-padding: 12px 20px;
188
+ --chat-tab-font-size: 13px;
189
+ --chat-tab-font-weight: 500;
190
+ --chat-tab-icon-size: 14px;
191
+ --chat-tab-border-width: 3px;
192
+ --chat-tab-hover-bg: rgba(0, 0, 0, 0.03);
193
+ --chat-tab-badge-bg: #ff5252;
194
+ --chat-tab-badge-text: #ffffff;
195
+ --chat-tab-badge-size: 16px;
196
+ --chat-tab-badge-font-size: 10px;
197
+ --chat-tab-title-size: 18px;
198
+ --chat-tab-title-weight: 700;
199
+
200
+ /* ── Modal ─────────────────────────────────────────────────── */
201
+ --chat-modal-backdrop: rgba(0, 0, 0, 0.5);
202
+ --chat-modal-backdrop-blur: 2px;
203
+ --chat-modal-bg: #ffffff;
204
+ --chat-modal-radius: 12px;
205
+ --chat-modal-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
206
+ --chat-modal-width: 400px;
207
+ --chat-modal-max-width: 90vw;
208
+ --chat-modal-max-height: 80vh;
209
+ --chat-modal-header-padding: 16px 20px;
210
+ --chat-modal-title-size: 16px;
211
+ --chat-modal-title-weight: 600;
212
+ --chat-modal-search-margin: 12px 16px;
213
+ --chat-modal-search-padding: 8px 12px;
214
+ --chat-modal-search-radius: 8px;
215
+ --chat-modal-search-size: 13px;
216
+ --chat-modal-user-padding: 10px 12px;
217
+ --chat-modal-user-avatar-size: 36px;
218
+ --chat-modal-user-name-size: 14px;
219
+ --chat-modal-user-name-weight: 500;
220
+ --chat-modal-close-size: 28px;
221
+
222
+ /* ── Context Menu ──────────────────────────────────────────── */
223
+ --chat-ctx-min-width: 180px;
224
+ --chat-ctx-max-width: 260px;
225
+ --chat-ctx-radius: 8px;
226
+ --chat-ctx-padding: 4px 0;
227
+ --chat-ctx-item-padding: 7px 14px;
228
+ --chat-ctx-item-font-size: 13px;
229
+ --chat-ctx-icon-size: 16px;
230
+ --chat-ctx-header-size: 10px;
231
+ --chat-ctx-header-weight: 700;
232
+ --chat-ctx-shortcut-size: 11px;
233
+ --chat-ctx-shadow: var(--chat-modal-shadow);
234
+
235
+ /* ── Loading / Error ───────────────────────────────────────── */
236
+ --chat-spinner-size: 26px;
237
+ --chat-spinner-width: 3px;
238
+ --chat-spinner-color: var(--chat-accent);
239
+ --chat-spinner-track: rgba(0, 0, 0, 0.08);
240
+ --chat-spinner-speed: 0.8s;
241
+ --chat-error-color: #e74c3c;
242
+ --chat-error-icon-size: 48px;
243
+
244
+ /* ── Room mode current user ────────────────────────────────── */
245
+ --chat-current-user-bg: #e8f4fd;
246
+ --chat-current-user-border: #d1e8ff;
247
+ --chat-current-user-avatar: #27ae60;
248
+
249
+ font-family: var(--chat-font);
250
+ font-size: var(--chat-font-size);
251
+ font-weight: var(--chat-font-weight);
252
+ line-height: var(--chat-line-height);
253
+ color: var(--chat-text);
254
+ height: 100%;
255
+ overflow: hidden;
256
+ background: var(--chat-bg);
257
+ position: relative;
258
+ }
259
+
260
+ /* ─── Container Layout ─────────────────────────────────────── */
261
+
262
+ .tc-container {
263
+ display: grid;
264
+ grid-template-columns: var(--chat-sidebar-width) 1fr;
265
+ height: 100%;
266
+ overflow: hidden;
267
+ }
268
+
269
+ .tc-container.tc-room-mode {
270
+ display: flex;
271
+ flex-direction: column;
272
+ grid-template-columns: none;
273
+ }
274
+
275
+ /* ─── Loading / Error States ───────────────────────────────── */
276
+
277
+ .tc-loading-full,
278
+ .tc-error-full {
279
+ display: flex;
280
+ flex-direction: column;
281
+ align-items: center;
282
+ justify-content: center;
283
+ height: 100%;
284
+ gap: 12px;
285
+ color: var(--chat-text-muted);
286
+ }
287
+
288
+ .tc-error-full i {
289
+ font-size: var(--chat-error-icon-size);
290
+ color: var(--chat-error-color);
291
+ }
292
+
293
+ .tc-loading {
294
+ display: flex;
295
+ flex-direction: column;
296
+ align-items: center;
297
+ justify-content: center;
298
+ height: 100%;
299
+ gap: 12px;
300
+ color: var(--chat-text-muted);
301
+ }
302
+
303
+ .tc-spinner {
304
+ width: var(--chat-spinner-size);
305
+ height: var(--chat-spinner-size);
306
+ border: var(--chat-spinner-width) solid var(--chat-spinner-track);
307
+ border-top-color: var(--chat-spinner-color);
308
+ border-radius: 50%;
309
+ animation: tc-spin var(--chat-spinner-speed) linear infinite;
310
+ }
311
+
312
+ .tc-spinner-small {
313
+ width: 16px;
314
+ height: 16px;
315
+ border-width: 2px;
316
+ }
317
+
318
+ @keyframes tc-spin {
319
+ to { transform: rotate(360deg); }
320
+ }
321
+
322
+ .tc-error {
323
+ display: flex;
324
+ flex-direction: column;
325
+ align-items: center;
326
+ justify-content: center;
327
+ height: 100%;
328
+ gap: 8px;
329
+ color: var(--chat-text-muted);
330
+ }
331
+
332
+ .tc-error i {
333
+ font-size: 36px;
334
+ color: var(--chat-error-color);
335
+ }
336
+
337
+ .tc-retry-btn {
338
+ margin-top: 8px;
339
+ padding: 6px 16px;
340
+ border: 1px solid var(--chat-border);
341
+ border-radius: 6px;
342
+ background: var(--chat-bg);
343
+ color: var(--chat-accent);
344
+ cursor: pointer;
345
+ font-size: 13px;
346
+ }
347
+
348
+ .tc-retry-btn:hover {
349
+ background: var(--chat-accent-transparent);
350
+ }
351
+
352
+ /* ─── Sidebar ──────────────────────────────────────────────── */
353
+
354
+ .tc-sidebar {
355
+ display: flex;
356
+ flex-direction: column;
357
+ background: var(--chat-sidebar-bg);
358
+ border-right: 1px solid var(--chat-border);
359
+ overflow: hidden;
360
+ position: relative;
361
+ }
362
+
363
+ /* ─── Sidebar Resize Handle ───────────────────────────────── */
364
+
365
+ .tc-sidebar-resize-handle {
366
+ position: absolute;
367
+ top: 0;
368
+ right: -3px;
369
+ width: 6px;
370
+ height: 100%;
371
+ cursor: col-resize;
372
+ z-index: 10;
373
+ transition: background 0.15s;
374
+ }
375
+
376
+ .tc-sidebar-resize-handle:hover,
377
+ .tc-sidebar-resize-active {
378
+ background: var(--chat-accent);
379
+ opacity: 0.4;
380
+ }
381
+
382
+ .tc-sidebar-resize-active {
383
+ opacity: 0.6;
384
+ }
385
+
386
+ .tc-sidebar-header {
387
+ padding: var(--chat-sidebar-padding);
388
+ border-bottom: var(--chat-border-width) solid var(--chat-border);
389
+ }
390
+
391
+ .tc-sidebar-title-row {
392
+ display: flex;
393
+ align-items: center;
394
+ justify-content: space-between;
395
+ margin-bottom: 12px;
396
+ }
397
+
398
+ .tc-sidebar-title {
399
+ display: flex;
400
+ align-items: center;
401
+ gap: 8px;
402
+ }
403
+
404
+ .tc-sidebar-title i {
405
+ color: var(--chat-accent);
406
+ font-size: var(--chat-sidebar-icon-size);
407
+ }
408
+
409
+ .tc-sidebar-title h2 {
410
+ margin: 0;
411
+ font-size: var(--chat-sidebar-title-size);
412
+ font-weight: var(--chat-sidebar-title-weight);
413
+ color: var(--chat-text);
414
+ }
415
+
416
+ .tc-new-chat-btn {
417
+ width: var(--chat-sidebar-new-btn-size);
418
+ height: var(--chat-sidebar-new-btn-size);
419
+ border: none;
420
+ border-radius: var(--chat-sidebar-new-btn-radius);
421
+ background: var(--chat-accent-transparent);
422
+ color: var(--chat-accent);
423
+ cursor: pointer;
424
+ display: flex;
425
+ align-items: center;
426
+ justify-content: center;
427
+ font-size: var(--chat-sidebar-new-btn-icon-size);
428
+ transition: background var(--chat-transition-speed);
429
+ }
430
+
431
+ .tc-new-chat-btn:hover {
432
+ background: var(--chat-accent);
433
+ color: #fff;
434
+ }
435
+
436
+ .tc-search-container {
437
+ position: relative;
438
+ }
439
+
440
+ .tc-search-input {
441
+ width: 100%;
442
+ padding: var(--chat-sidebar-search-padding);
443
+ border: var(--chat-border-width) solid var(--chat-border);
444
+ border-radius: var(--chat-sidebar-search-radius);
445
+ font-size: var(--chat-sidebar-search-size);
446
+ background: var(--chat-input-bg);
447
+ color: var(--chat-text);
448
+ outline: none;
449
+ box-sizing: border-box;
450
+ transition: border-color var(--chat-transition-speed);
451
+ }
452
+
453
+ .tc-search-input:focus {
454
+ border-color: var(--chat-input-focus-border);
455
+ }
456
+
457
+ .tc-search-input::placeholder {
458
+ color: var(--chat-text-muted);
459
+ }
460
+
461
+ /* ─── Chat List ────────────────────────────────────────────── */
462
+
463
+ .tc-chat-list {
464
+ flex: 1;
465
+ overflow-y: auto;
466
+ padding: 8px;
467
+ }
468
+
469
+ .tc-list-section-header {
470
+ padding: 8px 12px 4px;
471
+ font-size: var(--chat-sidebar-section-size);
472
+ font-weight: var(--chat-sidebar-section-weight);
473
+ text-transform: uppercase;
474
+ letter-spacing: var(--chat-sidebar-section-spacing);
475
+ color: var(--chat-text-muted);
476
+ }
477
+
478
+ .tc-list-empty {
479
+ padding: 24px;
480
+ text-align: center;
481
+ color: var(--chat-text-muted);
482
+ font-size: 13px;
483
+ }
484
+
485
+ .tc-chat-item {
486
+ display: flex;
487
+ align-items: center;
488
+ gap: var(--chat-sidebar-item-gap);
489
+ padding: var(--chat-sidebar-item-padding);
490
+ border-radius: var(--chat-sidebar-item-radius);
491
+ cursor: pointer;
492
+ border-left: var(--chat-sidebar-item-border-width) solid transparent;
493
+ transition: background var(--chat-transition-speed), border-color var(--chat-transition-speed);
494
+ }
495
+
496
+ .tc-chat-item:hover {
497
+ background: var(--chat-accent-transparent);
498
+ }
499
+
500
+ .tc-chat-item-active {
501
+ background: var(--chat-accent-transparent);
502
+ border-left-color: var(--chat-accent);
503
+ }
504
+
505
+ .tc-chat-item-avatar {
506
+ width: var(--chat-avatar-size);
507
+ height: var(--chat-avatar-size);
508
+ min-width: var(--chat-avatar-size);
509
+ border-radius: var(--chat-avatar-radius);
510
+ background: var(--chat-avatar-bg);
511
+ color: var(--chat-avatar-text);
512
+ display: flex;
513
+ align-items: center;
514
+ justify-content: center;
515
+ font-weight: var(--chat-avatar-font-weight);
516
+ font-size: var(--chat-avatar-font-size);
517
+ }
518
+
519
+ .tc-chat-item-avatar-team {
520
+ background: var(--chat-avatar-team-bg);
521
+ }
522
+
523
+ .tc-chat-item-info {
524
+ flex: 1;
525
+ min-width: 0;
526
+ display: flex;
527
+ flex-direction: column;
528
+ gap: 2px;
529
+ }
530
+
531
+ .tc-chat-item-name-row {
532
+ display: flex;
533
+ align-items: center;
534
+ justify-content: space-between;
535
+ gap: 8px;
536
+ }
537
+
538
+ .tc-chat-item-name {
539
+ font-weight: var(--chat-sidebar-name-weight);
540
+ font-size: var(--chat-sidebar-name-size);
541
+ color: var(--chat-text);
542
+ white-space: nowrap;
543
+ overflow: hidden;
544
+ text-overflow: ellipsis;
545
+ display: flex;
546
+ align-items: center;
547
+ gap: 6px;
548
+ }
549
+
550
+ .tc-chat-item-time {
551
+ font-size: var(--chat-sidebar-time-size);
552
+ color: var(--chat-text-muted);
553
+ white-space: nowrap;
554
+ flex-shrink: 0;
555
+ }
556
+
557
+ .tc-chat-item-preview-row {
558
+ display: flex;
559
+ align-items: center;
560
+ justify-content: space-between;
561
+ gap: 8px;
562
+ }
563
+
564
+ .tc-chat-item-preview {
565
+ font-size: var(--chat-sidebar-preview-size);
566
+ color: var(--chat-text-secondary);
567
+ white-space: nowrap;
568
+ overflow: hidden;
569
+ text-overflow: ellipsis;
570
+ }
571
+
572
+ /* ─── Presence Dot ─────────────────────────────────────────── */
573
+
574
+ .tc-presence-dot {
575
+ display: inline-block;
576
+ width: var(--chat-presence-size);
577
+ height: var(--chat-presence-size);
578
+ border-radius: 50%;
579
+ flex-shrink: 0;
580
+ }
581
+
582
+ .tc-online {
583
+ background: var(--chat-online-color);
584
+ box-shadow: 0 0 4px var(--chat-online-glow);
585
+ }
586
+
587
+ .tc-offline {
588
+ background: var(--chat-offline-color);
589
+ }
590
+
591
+ /* ─── Unread Badge ─────────────────────────────────────────── */
592
+
593
+ .tc-unread-badge {
594
+ display: inline-flex;
595
+ align-items: center;
596
+ justify-content: center;
597
+ min-width: var(--chat-unread-size);
598
+ height: var(--chat-unread-size);
599
+ padding: 0 5px;
600
+ border-radius: var(--chat-unread-radius);
601
+ background: var(--chat-unread-bg);
602
+ color: var(--chat-unread-text);
603
+ font-size: var(--chat-unread-font-size);
604
+ font-weight: var(--chat-unread-font-weight);
605
+ flex-shrink: 0;
606
+ }
607
+
608
+ /* ─── Mention Badge ────────────────────────────────────────── */
609
+
610
+ .tc-mention-badge {
611
+ display: inline-flex;
612
+ align-items: center;
613
+ justify-content: center;
614
+ gap: 3px;
615
+ min-width: var(--chat-unread-size);
616
+ height: var(--chat-unread-size);
617
+ padding: 0 6px;
618
+ border-radius: var(--chat-unread-radius);
619
+ background: var(--chat-mention-self-bg, rgba(255,193,7,0.25));
620
+ color: var(--chat-mention-self-text, #f57f17);
621
+ font-size: var(--chat-unread-font-size);
622
+ font-weight: var(--chat-unread-font-weight);
623
+ flex-shrink: 0;
624
+ }
625
+
626
+ .tc-mention-badge i {
627
+ font-size: 9px;
628
+ }
629
+
630
+ /* ─── Main Area ────────────────────────────────────────────── */
631
+
632
+ .tc-main {
633
+ display: flex;
634
+ flex-direction: column;
635
+ overflow: hidden;
636
+ flex: 1;
637
+ }
638
+
639
+ /* ─── Chat Header ──────────────────────────────────────────── */
640
+
641
+ .tc-chat-header {
642
+ display: flex;
643
+ align-items: center;
644
+ gap: var(--chat-sidebar-item-gap);
645
+ padding: var(--chat-header-padding);
646
+ border-bottom: var(--chat-border-width) solid var(--chat-border);
647
+ min-height: var(--chat-header-min-height);
648
+ background: var(--chat-header-bg);
649
+ }
650
+
651
+ .tc-header-avatar {
652
+ width: var(--chat-avatar-size);
653
+ height: var(--chat-avatar-size);
654
+ min-width: var(--chat-avatar-size);
655
+ border-radius: var(--chat-avatar-radius);
656
+ background: var(--chat-avatar-bg);
657
+ color: var(--chat-avatar-text);
658
+ display: flex;
659
+ align-items: center;
660
+ justify-content: center;
661
+ font-weight: var(--chat-avatar-font-weight);
662
+ font-size: var(--chat-avatar-font-size);
663
+ }
664
+
665
+ .tc-header-avatar-team {
666
+ background: var(--chat-avatar-team-bg);
667
+ }
668
+
669
+ .tc-header-info {
670
+ display: flex;
671
+ flex-direction: column;
672
+ gap: 2px;
673
+ }
674
+
675
+ .tc-header-name {
676
+ font-weight: var(--chat-header-name-weight);
677
+ font-size: var(--chat-header-name-size);
678
+ color: var(--chat-text);
679
+ }
680
+
681
+ .tc-header-status {
682
+ font-size: var(--chat-header-status-size);
683
+ color: var(--chat-text-muted);
684
+ }
685
+
686
+ .tc-header-online {
687
+ color: var(--chat-online-color);
688
+ }
689
+
690
+ /* ─── Messages Area ────────────────────────────────────────── */
691
+
692
+ .tc-messages {
693
+ flex: 1;
694
+ overflow-y: auto;
695
+ padding: var(--chat-messages-padding);
696
+ display: flex;
697
+ flex-direction: column;
698
+ gap: var(--chat-messages-gap);
699
+ }
700
+
701
+ .tc-messages-empty {
702
+ display: flex;
703
+ flex-direction: column;
704
+ align-items: center;
705
+ justify-content: center;
706
+ height: 100%;
707
+ color: var(--chat-text-muted);
708
+ text-align: center;
709
+ }
710
+
711
+ /* ─── Date Divider ─────────────────────────────────────────── */
712
+
713
+ .tc-date-divider {
714
+ display: flex;
715
+ align-items: center;
716
+ justify-content: center;
717
+ margin: var(--chat-divider-margin);
718
+ }
719
+
720
+ .tc-date-divider span {
721
+ padding: var(--chat-divider-padding);
722
+ font-size: var(--chat-divider-font-size);
723
+ font-weight: var(--chat-divider-font-weight);
724
+ color: var(--chat-date-divider-text);
725
+ background: var(--chat-date-divider-bg);
726
+ border: var(--chat-border-width) solid var(--chat-date-divider-border);
727
+ border-radius: var(--chat-divider-radius);
728
+ }
729
+
730
+ /* ─── Message Container ────────────────────────────────────── */
731
+
732
+ .tc-msg-container {
733
+ display: flex;
734
+ gap: var(--chat-msg-gap);
735
+ margin-bottom: var(--chat-messages-gap);
736
+ align-items: flex-start;
737
+ }
738
+
739
+ /* Conversation mode: own messages reversed */
740
+ .tc-msg-bubble-mode.tc-msg-own {
741
+ flex-direction: row-reverse;
742
+ }
743
+
744
+ .tc-msg-bubble-mode.tc-msg-own .tc-msg-content {
745
+ align-items: flex-end;
746
+ }
747
+
748
+ .tc-msg-bubble-mode.tc-msg-own .tc-msg-header {
749
+ flex-direction: row-reverse;
750
+ }
751
+
752
+ .tc-msg-bubble-mode.tc-msg-own .tc-reply-ref {
753
+ margin-left: auto;
754
+ }
755
+
756
+ /* Room mode: own messages have different bg */
757
+ .tc-msg-container.tc-msg-own:not(.tc-msg-bubble-mode) .tc-msg-card {
758
+ background: var(--chat-current-user-bg);
759
+ border-color: var(--chat-current-user-border);
760
+ }
761
+
762
+ .tc-msg-container.tc-msg-own:not(.tc-msg-bubble-mode) .tc-msg-avatar {
763
+ background: var(--chat-current-user-avatar);
764
+ color: #fff;
765
+ }
766
+
767
+ /* ─── Message Avatar ───────────────────────────────────────── */
768
+
769
+ .tc-msg-avatar {
770
+ width: var(--chat-avatar-size);
771
+ height: var(--chat-avatar-size);
772
+ min-width: var(--chat-avatar-size);
773
+ border-radius: 50%;
774
+ background: var(--chat-avatar-bg);
775
+ color: var(--chat-avatar-text);
776
+ display: flex;
777
+ align-items: center;
778
+ justify-content: center;
779
+ font-weight: 600;
780
+ font-size: 13px;
781
+ }
782
+
783
+ .tc-msg-avatar-square {
784
+ border-radius: var(--chat-avatar-radius);
785
+ }
786
+
787
+ .tc-msg-avatar-own.tc-msg-avatar-square {
788
+ background: var(--chat-accent-transparent);
789
+ color: var(--chat-accent);
790
+ }
791
+
792
+ /* ─── Message Content ──────────────────────────────────────── */
793
+
794
+ .tc-msg-content {
795
+ max-width: var(--chat-msg-max-width);
796
+ display: flex;
797
+ flex-direction: column;
798
+ gap: 2px;
799
+ }
800
+
801
+ /* Card style (room mode) */
802
+ .tc-msg-card {
803
+ background: var(--chat-card-bg);
804
+ border: var(--chat-border-width) solid var(--chat-card-border);
805
+ border-radius: var(--chat-card-radius);
806
+ padding: var(--chat-card-padding);
807
+ box-shadow: var(--chat-card-shadow);
808
+ }
809
+
810
+ .tc-msg-header {
811
+ display: flex;
812
+ align-items: center;
813
+ gap: 8px;
814
+ margin-bottom: 4px;
815
+ }
816
+
817
+ .tc-msg-sender {
818
+ font-weight: var(--chat-msg-sender-weight);
819
+ font-size: var(--chat-msg-sender-size);
820
+ color: var(--chat-text);
821
+ }
822
+
823
+ .tc-msg-pin-icon {
824
+ color: var(--chat-accent);
825
+ font-size: 11px;
826
+ opacity: 0.7;
827
+ }
828
+
829
+ .tc-msg-time {
830
+ font-size: var(--chat-msg-time-size);
831
+ color: var(--chat-text-muted);
832
+ }
833
+
834
+ .tc-msg-text {
835
+ font-size: var(--chat-msg-text-size);
836
+ line-height: var(--chat-line-height);
837
+ color: var(--chat-text);
838
+ word-wrap: break-word;
839
+ white-space: pre-wrap;
840
+ }
841
+
842
+ /* ─── Bubble Style (conversation mode) ─────────────────────── */
843
+
844
+ .tc-msg-bubble {
845
+ padding: var(--chat-bubble-padding);
846
+ border-radius: var(--chat-bubble-radius);
847
+ font-size: var(--chat-bubble-font-size);
848
+ line-height: var(--chat-line-height);
849
+ word-wrap: break-word;
850
+ white-space: pre-wrap;
851
+ max-width: 100%;
852
+ }
853
+
854
+ .tc-msg-bubble-own {
855
+ background: var(--chat-own-bubble-bg);
856
+ border: 1px solid var(--chat-own-bubble-border);
857
+ color: var(--chat-own-bubble-text);
858
+ border-top-right-radius: var(--chat-bubble-tail-radius);
859
+ }
860
+
861
+ .tc-msg-bubble-other {
862
+ background: var(--chat-other-bubble-bg);
863
+ border: 1px solid var(--chat-other-bubble-border);
864
+ color: var(--chat-other-bubble-text);
865
+ border-top-left-radius: var(--chat-bubble-tail-radius);
866
+ }
867
+
868
+ /* ─── Seen Indicator ───────────────────────────────────────── */
869
+
870
+ .tc-msg-seen {
871
+ font-size: var(--chat-seen-font-size);
872
+ color: var(--chat-seen-color);
873
+ display: flex;
874
+ align-items: center;
875
+ gap: 4px;
876
+ margin-top: 2px;
877
+ cursor: default;
878
+ }
879
+
880
+ .tc-msg-seen-icon {
881
+ font-weight: 700;
882
+ }
883
+
884
+ /* ─── Reply Bar (above input) ──────────────────────────────── */
885
+
886
+ .tc-reply-bar {
887
+ display: flex;
888
+ align-items: stretch;
889
+ border-top: var(--chat-border-width) solid var(--chat-border);
890
+ background: var(--chat-bg);
891
+ animation: tc-reply-slide-in 0.2s ease-out;
892
+ overflow: hidden;
893
+ }
894
+
895
+ @keyframes tc-reply-slide-in {
896
+ from { opacity: 0; max-height: 0; }
897
+ to { opacity: 1; max-height: 80px; }
898
+ }
899
+
900
+ .tc-reply-bar-accent {
901
+ width: 4px;
902
+ flex-shrink: 0;
903
+ background: var(--chat-accent);
904
+ }
905
+
906
+ .tc-reply-bar-body {
907
+ flex: 1;
908
+ min-width: 0;
909
+ padding: 10px 14px;
910
+ display: flex;
911
+ flex-direction: column;
912
+ gap: 3px;
913
+ }
914
+
915
+ .tc-reply-bar-header {
916
+ display: flex;
917
+ align-items: center;
918
+ gap: 6px;
919
+ font-size: 12px;
920
+ }
921
+
922
+ .tc-reply-bar-icon {
923
+ color: var(--chat-accent);
924
+ font-size: 12px;
925
+ }
926
+
927
+ .tc-reply-bar-label {
928
+ color: var(--chat-text-muted);
929
+ }
930
+
931
+ .tc-reply-bar-sender {
932
+ color: var(--chat-accent);
933
+ font-size: 12px;
934
+ }
935
+
936
+ .tc-reply-bar-text {
937
+ font-size: 13px;
938
+ color: var(--chat-text-secondary);
939
+ white-space: nowrap;
940
+ overflow: hidden;
941
+ text-overflow: ellipsis;
942
+ line-height: 1.3;
943
+ }
944
+
945
+ .tc-reply-bar-close {
946
+ width: 40px;
947
+ border: none;
948
+ background: none;
949
+ color: var(--chat-text-muted);
950
+ font-size: 14px;
951
+ cursor: pointer;
952
+ display: flex;
953
+ align-items: center;
954
+ justify-content: center;
955
+ flex-shrink: 0;
956
+ transition: background var(--chat-transition-speed), color var(--chat-transition-speed);
957
+ }
958
+
959
+ .tc-reply-bar-close:hover {
960
+ background: rgba(231, 76, 60, 0.08);
961
+ color: var(--chat-error-color, #e74c3c);
962
+ }
963
+
964
+ /* ─── Reply Reference (on messages) ───────────────────────── */
965
+
966
+ .tc-reply-ref {
967
+ border-left: 3px solid var(--chat-accent);
968
+ border-radius: 0 var(--chat-radius-sm) var(--chat-radius-sm) 0;
969
+ background: var(--chat-accent-transparent);
970
+ padding: 5px 10px;
971
+ margin-bottom: 4px;
972
+ max-width: 280px;
973
+ transition: background var(--chat-transition-speed);
974
+ }
975
+
976
+ .tc-reply-ref:hover {
977
+ background: rgba(0, 0, 0, 0.06);
978
+ }
979
+
980
+ .tc-reply-ref-sender {
981
+ font-size: 12px;
982
+ font-weight: 600;
983
+ color: var(--chat-accent);
984
+ white-space: nowrap;
985
+ overflow: hidden;
986
+ text-overflow: ellipsis;
987
+ line-height: 1.3;
988
+ }
989
+
990
+ .tc-reply-ref-text {
991
+ font-size: 12px;
992
+ color: var(--chat-text-secondary);
993
+ white-space: nowrap;
994
+ overflow: hidden;
995
+ text-overflow: ellipsis;
996
+ line-height: 1.4;
997
+ margin-top: 1px;
998
+ }
999
+
1000
+ /* ─── Message Highlight (scroll-to animation) ─────────────── */
1001
+
1002
+ .tc-msg-highlight {
1003
+ animation: tc-msg-flash 1.5s ease-out;
1004
+ }
1005
+
1006
+ @keyframes tc-msg-flash {
1007
+ 0% { background: var(--chat-accent-transparent); }
1008
+ 30% { background: var(--chat-accent-transparent); }
1009
+ 100% { background: transparent; }
1010
+ }
1011
+
1012
+ /* ─── Input Area ───────────────────────────────────────────── */
1013
+
1014
+ .tc-input-area {
1015
+ display: flex;
1016
+ align-items: flex-end;
1017
+ gap: 8px;
1018
+ padding: var(--chat-input-padding);
1019
+ border-top: var(--chat-border-width) solid var(--chat-border);
1020
+ background: var(--chat-bg);
1021
+ }
1022
+
1023
+ .tc-input-box {
1024
+ flex: 1;
1025
+ padding: var(--chat-input-inner-padding);
1026
+ border: var(--chat-border-width) solid var(--chat-input-border);
1027
+ border-radius: var(--chat-input-radius);
1028
+ font-size: var(--chat-input-font-size);
1029
+ font-family: var(--chat-font);
1030
+ background: var(--chat-input-bg);
1031
+ color: var(--chat-text);
1032
+ resize: none;
1033
+ outline: none;
1034
+ overflow: hidden;
1035
+ max-height: var(--chat-input-max-height);
1036
+ line-height: var(--chat-input-line-height);
1037
+ transition: border-color var(--chat-transition-speed);
1038
+ }
1039
+
1040
+ .tc-input-box:focus {
1041
+ border-color: var(--chat-input-focus-border);
1042
+ }
1043
+
1044
+ .tc-input-box::placeholder {
1045
+ color: var(--chat-text-muted);
1046
+ }
1047
+
1048
+ .tc-send-btn {
1049
+ width: var(--chat-send-size);
1050
+ height: var(--chat-send-size);
1051
+ min-width: var(--chat-send-size);
1052
+ border: none;
1053
+ border-radius: var(--chat-send-radius);
1054
+ background: var(--chat-send-bg);
1055
+ color: var(--chat-send-text);
1056
+ cursor: pointer;
1057
+ display: flex;
1058
+ align-items: center;
1059
+ justify-content: center;
1060
+ font-size: var(--chat-send-icon-size);
1061
+ transition: opacity var(--chat-transition-speed), transform 0.1s;
1062
+ }
1063
+
1064
+ .tc-send-btn:hover {
1065
+ opacity: 0.9;
1066
+ }
1067
+
1068
+ .tc-send-btn:active {
1069
+ transform: scale(0.95);
1070
+ }
1071
+
1072
+ .tc-send-btn:disabled {
1073
+ opacity: 0.5;
1074
+ cursor: not-allowed;
1075
+ }
1076
+
1077
+ /* ─── Drag-and-Drop Overlay ────────────────────────────────── */
1078
+
1079
+ .tc-drop-overlay {
1080
+ position: absolute;
1081
+ inset: 0;
1082
+ background: rgba(var(--chat-accent-rgb, 25, 118, 210), 0.06);
1083
+ border: 2px dashed var(--chat-accent);
1084
+ border-radius: var(--chat-radius);
1085
+ z-index: 50;
1086
+ display: flex;
1087
+ align-items: center;
1088
+ justify-content: center;
1089
+ animation: tc-drop-fade-in 0.15s ease-out;
1090
+ backdrop-filter: blur(2px);
1091
+ }
1092
+
1093
+ @keyframes tc-drop-fade-in {
1094
+ from { opacity: 0; }
1095
+ to { opacity: 1; }
1096
+ }
1097
+
1098
+ .tc-drop-overlay-content {
1099
+ display: flex;
1100
+ flex-direction: column;
1101
+ align-items: center;
1102
+ gap: 8px;
1103
+ pointer-events: none;
1104
+ }
1105
+
1106
+ .tc-drop-overlay-icon {
1107
+ font-size: 48px;
1108
+ color: var(--chat-accent);
1109
+ opacity: 0.7;
1110
+ }
1111
+
1112
+ .tc-drop-overlay-text {
1113
+ font-size: 16px;
1114
+ font-weight: 600;
1115
+ color: var(--chat-accent);
1116
+ }
1117
+
1118
+ .tc-drop-overlay-hint {
1119
+ font-size: 12px;
1120
+ color: var(--chat-text-muted);
1121
+ }
1122
+
1123
+ /* ─── Attachment Preview Bar (above input) ────────────────── */
1124
+
1125
+ .tc-attach-bar {
1126
+ display: flex;
1127
+ align-items: center;
1128
+ justify-content: space-between;
1129
+ gap: 8px;
1130
+ padding: 8px 20px;
1131
+ background: var(--chat-attachment-bg, var(--chat-bg));
1132
+ border-top: var(--chat-border-width) solid var(--chat-border);
1133
+ animation: tc-attach-bar-slide 0.15s ease-out;
1134
+ }
1135
+
1136
+ @keyframes tc-attach-bar-slide {
1137
+ from { opacity: 0; transform: translateY(6px); }
1138
+ to { opacity: 1; transform: translateY(0); }
1139
+ }
1140
+
1141
+ .tc-attach-bar-content {
1142
+ display: flex;
1143
+ align-items: center;
1144
+ gap: 10px;
1145
+ min-width: 0;
1146
+ flex: 1;
1147
+ }
1148
+
1149
+ .tc-attach-bar-icon {
1150
+ width: 36px;
1151
+ height: 36px;
1152
+ border-radius: 8px;
1153
+ background: var(--chat-accent-transparent);
1154
+ color: var(--chat-accent);
1155
+ display: flex;
1156
+ align-items: center;
1157
+ justify-content: center;
1158
+ font-size: 16px;
1159
+ flex-shrink: 0;
1160
+ }
1161
+
1162
+ .tc-attach-bar-info {
1163
+ display: flex;
1164
+ flex-direction: column;
1165
+ gap: 1px;
1166
+ min-width: 0;
1167
+ }
1168
+
1169
+ .tc-attach-bar-name {
1170
+ font-size: 13px;
1171
+ font-weight: 500;
1172
+ color: var(--chat-text);
1173
+ white-space: nowrap;
1174
+ overflow: hidden;
1175
+ text-overflow: ellipsis;
1176
+ }
1177
+
1178
+ .tc-attach-bar-size {
1179
+ font-size: 11px;
1180
+ color: var(--chat-text-muted);
1181
+ }
1182
+
1183
+ .tc-attach-bar-remove {
1184
+ width: 28px;
1185
+ height: 28px;
1186
+ border: none;
1187
+ background: none;
1188
+ color: var(--chat-text-muted);
1189
+ font-size: 20px;
1190
+ cursor: pointer;
1191
+ display: flex;
1192
+ align-items: center;
1193
+ justify-content: center;
1194
+ border-radius: 6px;
1195
+ flex-shrink: 0;
1196
+ transition: background var(--chat-transition-speed), color var(--chat-transition-speed);
1197
+ }
1198
+
1199
+ .tc-attach-bar-remove:hover {
1200
+ background: rgba(231, 76, 60, 0.1);
1201
+ color: var(--chat-error-color);
1202
+ }
1203
+
1204
+ /* ─── Attachment Button ────────────────────────────────────── */
1205
+
1206
+ .tc-attachment-btn {
1207
+ width: var(--chat-attachment-btn-size);
1208
+ height: var(--chat-attachment-btn-size);
1209
+ min-width: var(--chat-attachment-btn-size);
1210
+ border: none;
1211
+ border-radius: var(--chat-attachment-btn-radius);
1212
+ background: var(--chat-attachment-btn-bg);
1213
+ color: var(--chat-text-secondary);
1214
+ cursor: pointer;
1215
+ display: flex;
1216
+ align-items: center;
1217
+ justify-content: center;
1218
+ font-size: var(--chat-attachment-btn-icon-size);
1219
+ transition: background var(--chat-transition-speed), color var(--chat-transition-speed);
1220
+ }
1221
+
1222
+ .tc-attachment-btn:hover {
1223
+ background: var(--chat-attachment-btn-hover);
1224
+ }
1225
+
1226
+ .tc-attachment-active {
1227
+ background: var(--chat-attachment-active-bg) !important;
1228
+ color: var(--chat-attachment-active-text) !important;
1229
+ }
1230
+
1231
+ /* ─── Attachment Card (on messages) ────────────────────────── */
1232
+
1233
+ .tc-msg-attachment {
1234
+ margin-top: 6px;
1235
+ }
1236
+
1237
+ .tc-attachment-card {
1238
+ border-radius: var(--chat-attachment-radius, 8px);
1239
+ overflow: hidden;
1240
+ background: var(--chat-attachment-bg, var(--chat-bg));
1241
+ border: var(--chat-border-width) solid var(--chat-border);
1242
+ }
1243
+
1244
+ .tc-attachment-card-preview {
1245
+ max-width: 320px;
1246
+ overflow: hidden;
1247
+ background: rgba(0,0,0,0.02);
1248
+ }
1249
+
1250
+ .tc-attachment-card-image {
1251
+ max-width: 100%;
1252
+ max-height: 200px;
1253
+ display: block;
1254
+ object-fit: contain;
1255
+ }
1256
+
1257
+ .tc-attachment-card-pdf-wrap {
1258
+ height: 160px;
1259
+ }
1260
+
1261
+ .tc-attachment-card-pdf {
1262
+ width: 100%;
1263
+ height: 100%;
1264
+ display: block;
1265
+ border: none;
1266
+ }
1267
+
1268
+ .tc-attachment-card-pdf-fallback {
1269
+ display: flex;
1270
+ align-items: center;
1271
+ justify-content: center;
1272
+ height: 100%;
1273
+ font-size: 36px;
1274
+ color: var(--chat-text-muted);
1275
+ }
1276
+
1277
+ .tc-attachment-card-row {
1278
+ display: flex;
1279
+ align-items: center;
1280
+ gap: 10px;
1281
+ padding: 10px 12px;
1282
+ }
1283
+
1284
+ .tc-attachment-card-icon {
1285
+ width: 36px;
1286
+ height: 36px;
1287
+ border-radius: 8px;
1288
+ background: var(--chat-accent-transparent);
1289
+ color: var(--chat-accent);
1290
+ display: flex;
1291
+ align-items: center;
1292
+ justify-content: center;
1293
+ font-size: 16px;
1294
+ flex-shrink: 0;
1295
+ }
1296
+
1297
+ .tc-attachment-card-details {
1298
+ flex: 1;
1299
+ min-width: 0;
1300
+ display: flex;
1301
+ flex-direction: column;
1302
+ gap: 1px;
1303
+ }
1304
+
1305
+ .tc-attachment-card-name {
1306
+ font-size: 13px;
1307
+ font-weight: 500;
1308
+ color: var(--chat-text);
1309
+ white-space: nowrap;
1310
+ overflow: hidden;
1311
+ text-overflow: ellipsis;
1312
+ }
1313
+
1314
+ .tc-attachment-card-size {
1315
+ font-size: 11px;
1316
+ color: var(--chat-text-muted);
1317
+ }
1318
+
1319
+ .tc-attachment-card-actions {
1320
+ display: flex;
1321
+ gap: 4px;
1322
+ flex-shrink: 0;
1323
+ }
1324
+
1325
+ .tc-attachment-card-btn {
1326
+ width: 30px;
1327
+ height: 30px;
1328
+ border: var(--chat-border-width) solid var(--chat-border);
1329
+ border-radius: 6px;
1330
+ background: var(--chat-bg);
1331
+ color: var(--chat-text-secondary);
1332
+ font-size: 12px;
1333
+ cursor: pointer;
1334
+ display: flex;
1335
+ align-items: center;
1336
+ justify-content: center;
1337
+ transition: background var(--chat-transition-speed), color var(--chat-transition-speed);
1338
+ }
1339
+
1340
+ .tc-attachment-card-btn:hover {
1341
+ background: var(--chat-accent-transparent);
1342
+ color: var(--chat-accent);
1343
+ }
1344
+
1345
+ /* ─── Body Wrapper (messages + files panel) ───────────────── */
1346
+
1347
+ .tc-body-wrapper {
1348
+ display: flex;
1349
+ flex: 1;
1350
+ min-height: 0;
1351
+ overflow: hidden;
1352
+ }
1353
+
1354
+ .tc-body-wrapper > .tc-messages {
1355
+ flex: 1;
1356
+ min-width: 0;
1357
+ }
1358
+
1359
+ /* ─── Header Actions ──────────────────────────────────────── */
1360
+
1361
+ .tc-header-actions {
1362
+ display: flex;
1363
+ align-items: center;
1364
+ gap: 4px;
1365
+ margin-left: auto;
1366
+ flex-shrink: 0;
1367
+ }
1368
+
1369
+ /* ─── Files Panel Toggle Button ───────────────────────────── */
1370
+
1371
+ .tc-files-toggle-btn {
1372
+ position: relative;
1373
+ width: 32px;
1374
+ height: 32px;
1375
+ border: var(--chat-border-width) solid var(--chat-border);
1376
+ border-radius: 6px;
1377
+ background: var(--chat-bg);
1378
+ color: var(--chat-text-secondary);
1379
+ font-size: 14px;
1380
+ cursor: pointer;
1381
+ display: flex;
1382
+ align-items: center;
1383
+ justify-content: center;
1384
+ transition: background var(--chat-transition-speed), color var(--chat-transition-speed), border-color var(--chat-transition-speed);
1385
+ }
1386
+
1387
+ .tc-files-toggle-btn:hover {
1388
+ background: var(--chat-accent-transparent);
1389
+ color: var(--chat-accent);
1390
+ }
1391
+
1392
+ .tc-files-toggle-active {
1393
+ background: var(--chat-accent-transparent) !important;
1394
+ color: var(--chat-accent) !important;
1395
+ border-color: var(--chat-accent) !important;
1396
+ }
1397
+
1398
+ .tc-files-badge {
1399
+ position: absolute;
1400
+ top: -6px;
1401
+ right: -6px;
1402
+ min-width: 16px;
1403
+ height: 16px;
1404
+ padding: 0 4px;
1405
+ border-radius: 8px;
1406
+ background: var(--chat-accent);
1407
+ color: #fff;
1408
+ font-size: 10px;
1409
+ font-weight: 600;
1410
+ display: flex;
1411
+ align-items: center;
1412
+ justify-content: center;
1413
+ line-height: 1;
1414
+ }
1415
+
1416
+ /* ─── Files Panel ─────────────────────────────────────────── */
1417
+
1418
+ .tc-files-panel {
1419
+ width: 260px;
1420
+ min-width: 260px;
1421
+ border-left: var(--chat-border-width) solid var(--chat-border);
1422
+ background: var(--chat-bg);
1423
+ display: flex;
1424
+ flex-direction: column;
1425
+ animation: tc-files-panel-slide 0.2s ease-out;
1426
+ }
1427
+
1428
+ @keyframes tc-files-panel-slide {
1429
+ from { width: 0; min-width: 0; opacity: 0; }
1430
+ to { width: 260px; min-width: 260px; opacity: 1; }
1431
+ }
1432
+
1433
+ .tc-files-panel-header {
1434
+ display: flex;
1435
+ align-items: center;
1436
+ justify-content: space-between;
1437
+ padding: 12px 14px;
1438
+ border-bottom: var(--chat-border-width) solid var(--chat-border);
1439
+ flex-shrink: 0;
1440
+ }
1441
+
1442
+ .tc-files-panel-title {
1443
+ display: flex;
1444
+ align-items: center;
1445
+ gap: 8px;
1446
+ font-size: 13px;
1447
+ font-weight: 600;
1448
+ color: var(--chat-text);
1449
+ }
1450
+
1451
+ .tc-files-panel-title i {
1452
+ color: var(--chat-accent);
1453
+ font-size: 14px;
1454
+ }
1455
+
1456
+ .tc-files-panel-close {
1457
+ width: 26px;
1458
+ height: 26px;
1459
+ border: none;
1460
+ background: none;
1461
+ color: var(--chat-text-muted);
1462
+ font-size: 14px;
1463
+ cursor: pointer;
1464
+ display: flex;
1465
+ align-items: center;
1466
+ justify-content: center;
1467
+ border-radius: 4px;
1468
+ transition: background var(--chat-transition-speed), color var(--chat-transition-speed);
1469
+ }
1470
+
1471
+ .tc-files-panel-close:hover {
1472
+ background: rgba(231, 76, 60, 0.08);
1473
+ color: var(--chat-error-color, #e74c3c);
1474
+ }
1475
+
1476
+ .tc-files-panel-list {
1477
+ flex: 1;
1478
+ overflow-y: auto;
1479
+ padding: 6px 0;
1480
+ }
1481
+
1482
+ .tc-files-panel-empty {
1483
+ display: flex;
1484
+ flex-direction: column;
1485
+ align-items: center;
1486
+ justify-content: center;
1487
+ padding: 40px 16px;
1488
+ color: var(--chat-text-muted);
1489
+ font-size: 12px;
1490
+ text-align: center;
1491
+ }
1492
+
1493
+ .tc-files-panel-item {
1494
+ display: flex;
1495
+ align-items: center;
1496
+ gap: 10px;
1497
+ padding: 8px 14px;
1498
+ cursor: pointer;
1499
+ transition: background var(--chat-transition-speed);
1500
+ }
1501
+
1502
+ .tc-files-panel-item:hover {
1503
+ background: var(--chat-hover);
1504
+ }
1505
+
1506
+ .tc-files-panel-item-icon {
1507
+ width: 32px;
1508
+ height: 32px;
1509
+ border-radius: 6px;
1510
+ background: var(--chat-accent-transparent);
1511
+ color: var(--chat-accent);
1512
+ display: flex;
1513
+ align-items: center;
1514
+ justify-content: center;
1515
+ font-size: 14px;
1516
+ flex-shrink: 0;
1517
+ }
1518
+
1519
+ .tc-files-panel-item-info {
1520
+ flex: 1;
1521
+ min-width: 0;
1522
+ }
1523
+
1524
+ .tc-files-panel-item-name {
1525
+ font-size: 12px;
1526
+ font-weight: 500;
1527
+ color: var(--chat-text);
1528
+ white-space: nowrap;
1529
+ overflow: hidden;
1530
+ text-overflow: ellipsis;
1531
+ }
1532
+
1533
+ .tc-files-panel-item-meta {
1534
+ font-size: 10px;
1535
+ color: var(--chat-text-muted);
1536
+ white-space: nowrap;
1537
+ overflow: hidden;
1538
+ text-overflow: ellipsis;
1539
+ margin-top: 1px;
1540
+ }
1541
+
1542
+ .tc-files-panel-item-actions {
1543
+ display: flex;
1544
+ gap: 2px;
1545
+ flex-shrink: 0;
1546
+ opacity: 0;
1547
+ transition: opacity var(--chat-transition-speed);
1548
+ }
1549
+
1550
+ .tc-files-panel-item:hover .tc-files-panel-item-actions {
1551
+ opacity: 1;
1552
+ }
1553
+
1554
+ .tc-files-panel-item-btn {
1555
+ width: 24px;
1556
+ height: 24px;
1557
+ border: none;
1558
+ border-radius: 4px;
1559
+ background: none;
1560
+ color: var(--chat-text-muted);
1561
+ font-size: 11px;
1562
+ cursor: pointer;
1563
+ display: flex;
1564
+ align-items: center;
1565
+ justify-content: center;
1566
+ transition: background var(--chat-transition-speed), color var(--chat-transition-speed);
1567
+ }
1568
+
1569
+ .tc-files-panel-item-btn:hover {
1570
+ background: var(--chat-accent-transparent);
1571
+ color: var(--chat-accent);
1572
+ }
1573
+
1574
+ /* ─── Mention Popup ────────────────────────────────────────── */
1575
+
1576
+ .tc-mention-popup {
1577
+ position: absolute;
1578
+ bottom: 100%;
1579
+ left: 0;
1580
+ right: 0;
1581
+ max-height: var(--chat-mention-popup-max-height);
1582
+ overflow-y: auto;
1583
+ background: var(--chat-bg);
1584
+ border: var(--chat-border-width) solid var(--chat-border);
1585
+ border-radius: var(--chat-mention-popup-radius);
1586
+ box-shadow: var(--chat-mention-popup-shadow);
1587
+ z-index: 100;
1588
+ margin-bottom: 4px;
1589
+ }
1590
+
1591
+ .tc-mention-item {
1592
+ display: flex;
1593
+ align-items: center;
1594
+ gap: 10px;
1595
+ padding: var(--chat-mention-item-padding);
1596
+ cursor: pointer;
1597
+ transition: background 0.1s;
1598
+ }
1599
+
1600
+ .tc-mention-item:hover,
1601
+ .tc-mention-item-selected {
1602
+ background: var(--chat-accent-transparent);
1603
+ }
1604
+
1605
+ .tc-mention-item-avatar {
1606
+ width: var(--chat-mention-item-avatar-size);
1607
+ height: var(--chat-mention-item-avatar-size);
1608
+ border-radius: 50%;
1609
+ background: var(--chat-avatar-bg);
1610
+ color: var(--chat-avatar-text);
1611
+ display: flex;
1612
+ align-items: center;
1613
+ justify-content: center;
1614
+ font-size: 11px;
1615
+ font-weight: 600;
1616
+ }
1617
+
1618
+ .tc-mention-item-name {
1619
+ font-size: var(--chat-mention-item-name-size);
1620
+ font-weight: var(--chat-mention-font-weight);
1621
+ color: var(--chat-text);
1622
+ }
1623
+
1624
+ /* ─── Mention Highlight ────────────────────────────────────── */
1625
+
1626
+ .tc-mention {
1627
+ background: var(--chat-mention-bg);
1628
+ color: var(--chat-mention-text);
1629
+ padding: var(--chat-mention-padding);
1630
+ border-radius: var(--chat-mention-radius);
1631
+ font-weight: var(--chat-mention-font-weight);
1632
+ }
1633
+
1634
+ .tc-mention-self {
1635
+ background: var(--chat-mention-self-bg);
1636
+ color: var(--chat-mention-self-text);
1637
+ }
1638
+
1639
+ /* ─── Links ────────────────────────────────────────────────── */
1640
+
1641
+ .tc-chat-link {
1642
+ color: var(--chat-link-color);
1643
+ text-decoration: var(--chat-link-decoration);
1644
+ }
1645
+
1646
+ .tc-chat-link:hover {
1647
+ text-decoration: var(--chat-link-hover-decoration);
1648
+ }
1649
+
1650
+ /* ─── Tab Bar (Room Mode) ──────────────────────────────────── */
1651
+
1652
+ .tc-topbar {
1653
+ background: var(--chat-tab-bg);
1654
+ border-bottom: var(--chat-border-width) solid var(--chat-border);
1655
+ }
1656
+
1657
+ .tc-topbar-content {
1658
+ padding: 12px 20px 0;
1659
+ }
1660
+
1661
+ .tc-topbar-title {
1662
+ margin: 0;
1663
+ font-size: var(--chat-tab-title-size);
1664
+ font-weight: var(--chat-tab-title-weight);
1665
+ color: var(--chat-text);
1666
+ }
1667
+
1668
+ .tc-tabs {
1669
+ display: flex;
1670
+ align-items: center;
1671
+ gap: 0;
1672
+ padding: 0 12px;
1673
+ }
1674
+
1675
+ .tc-tabs-actions {
1676
+ display: flex;
1677
+ align-items: center;
1678
+ gap: 4px;
1679
+ margin-left: auto;
1680
+ flex-shrink: 0;
1681
+ }
1682
+
1683
+ .tc-tab {
1684
+ display: flex;
1685
+ align-items: center;
1686
+ gap: 8px;
1687
+ padding: var(--chat-tab-padding);
1688
+ cursor: pointer;
1689
+ font-size: var(--chat-tab-font-size);
1690
+ font-weight: var(--chat-tab-font-weight);
1691
+ color: var(--chat-text-secondary);
1692
+ border-bottom: var(--chat-tab-border-width) solid transparent;
1693
+ transition: color var(--chat-transition-speed), border-color var(--chat-transition-speed), background var(--chat-transition-speed);
1694
+ position: relative;
1695
+ user-select: none;
1696
+ }
1697
+
1698
+ .tc-tab:hover {
1699
+ color: var(--chat-text);
1700
+ background: var(--chat-tab-hover-bg);
1701
+ }
1702
+
1703
+ .tc-tab-active {
1704
+ color: var(--chat-tab-active-color);
1705
+ border-bottom-color: var(--chat-tab-active-border);
1706
+ background: var(--chat-tab-active-bg);
1707
+ }
1708
+
1709
+ .tc-tab i {
1710
+ font-size: var(--chat-tab-icon-size);
1711
+ }
1712
+
1713
+ .tc-tab-badge {
1714
+ min-width: var(--chat-tab-badge-size);
1715
+ height: var(--chat-tab-badge-size);
1716
+ padding: 0 4px;
1717
+ border-radius: 999px;
1718
+ background: var(--chat-tab-badge-bg);
1719
+ color: var(--chat-tab-badge-text);
1720
+ font-size: var(--chat-tab-badge-font-size);
1721
+ font-weight: 600;
1722
+ display: flex;
1723
+ align-items: center;
1724
+ justify-content: center;
1725
+ }
1726
+
1727
+ .tc-tab-mention-badge {
1728
+ display: flex;
1729
+ align-items: center;
1730
+ justify-content: center;
1731
+ gap: 2px;
1732
+ min-width: var(--chat-tab-badge-size);
1733
+ height: var(--chat-tab-badge-size);
1734
+ padding: 0 5px;
1735
+ border-radius: 999px;
1736
+ background: var(--chat-mention-self-bg, rgba(255,193,7,0.25));
1737
+ color: var(--chat-mention-self-text, #f57f17);
1738
+ font-size: var(--chat-tab-badge-font-size);
1739
+ font-weight: 600;
1740
+ }
1741
+
1742
+ .tc-tab-mention-badge i {
1743
+ font-size: 8px;
1744
+ }
1745
+
1746
+ /* ─── Modal ────────────────────────────────────────────────── */
1747
+
1748
+ .tc-modal-overlay {
1749
+ position: fixed;
1750
+ inset: 0;
1751
+ background: var(--chat-modal-backdrop);
1752
+ display: flex;
1753
+ align-items: center;
1754
+ justify-content: center;
1755
+ z-index: 10000;
1756
+ backdrop-filter: blur(var(--chat-modal-backdrop-blur));
1757
+ }
1758
+
1759
+ .tc-modal {
1760
+ background: var(--chat-modal-bg);
1761
+ border-radius: var(--chat-modal-radius);
1762
+ box-shadow: var(--chat-modal-shadow);
1763
+ width: var(--chat-modal-width);
1764
+ max-width: var(--chat-modal-max-width);
1765
+ max-height: var(--chat-modal-max-height);
1766
+ display: flex;
1767
+ flex-direction: column;
1768
+ overflow: hidden;
1769
+ }
1770
+
1771
+ .tc-modal-header {
1772
+ display: flex;
1773
+ align-items: center;
1774
+ justify-content: space-between;
1775
+ padding: var(--chat-modal-header-padding);
1776
+ border-bottom: var(--chat-border-width) solid var(--chat-border);
1777
+ }
1778
+
1779
+ .tc-modal-title {
1780
+ margin: 0;
1781
+ font-size: var(--chat-modal-title-size);
1782
+ font-weight: var(--chat-modal-title-weight);
1783
+ }
1784
+
1785
+ .tc-modal-close {
1786
+ width: var(--chat-modal-close-size);
1787
+ height: var(--chat-modal-close-size);
1788
+ border: none;
1789
+ background: none;
1790
+ font-size: 20px;
1791
+ cursor: pointer;
1792
+ color: var(--chat-text-muted);
1793
+ display: flex;
1794
+ align-items: center;
1795
+ justify-content: center;
1796
+ border-radius: var(--chat-radius-sm);
1797
+ }
1798
+
1799
+ .tc-modal-close:hover {
1800
+ background: rgba(0, 0, 0, 0.05);
1801
+ color: var(--chat-text);
1802
+ }
1803
+
1804
+ .tc-modal-search {
1805
+ margin: var(--chat-modal-search-margin);
1806
+ padding: var(--chat-modal-search-padding);
1807
+ border: var(--chat-border-width) solid var(--chat-border);
1808
+ border-radius: var(--chat-modal-search-radius);
1809
+ font-size: var(--chat-modal-search-size);
1810
+ outline: none;
1811
+ background: var(--chat-input-bg);
1812
+ color: var(--chat-text);
1813
+ }
1814
+
1815
+ .tc-modal-search:focus {
1816
+ border-color: var(--chat-input-focus-border);
1817
+ }
1818
+
1819
+ .tc-modal-user-list {
1820
+ flex: 1;
1821
+ overflow-y: auto;
1822
+ padding: 0 8px 12px;
1823
+ }
1824
+
1825
+ .tc-modal-empty {
1826
+ padding: 24px;
1827
+ text-align: center;
1828
+ color: var(--chat-text-muted);
1829
+ font-size: 13px;
1830
+ }
1831
+
1832
+ .tc-modal-user-item {
1833
+ display: flex;
1834
+ align-items: center;
1835
+ gap: var(--chat-sidebar-item-gap);
1836
+ padding: var(--chat-modal-user-padding);
1837
+ border-radius: var(--chat-radius-sm);
1838
+ cursor: pointer;
1839
+ transition: background var(--chat-transition-speed);
1840
+ }
1841
+
1842
+ .tc-modal-user-item:hover {
1843
+ background: var(--chat-accent-transparent);
1844
+ }
1845
+
1846
+ .tc-modal-user-avatar {
1847
+ width: var(--chat-modal-user-avatar-size);
1848
+ height: var(--chat-modal-user-avatar-size);
1849
+ border-radius: var(--chat-avatar-radius);
1850
+ background: var(--chat-avatar-bg);
1851
+ color: var(--chat-avatar-text);
1852
+ display: flex;
1853
+ align-items: center;
1854
+ justify-content: center;
1855
+ font-weight: 600;
1856
+ font-size: 13px;
1857
+ }
1858
+
1859
+ .tc-modal-user-info {
1860
+ display: flex;
1861
+ flex-direction: column;
1862
+ gap: 1px;
1863
+ }
1864
+
1865
+ .tc-modal-user-name {
1866
+ font-weight: 500;
1867
+ font-size: 14px;
1868
+ color: var(--chat-text);
1869
+ }
1870
+
1871
+ .tc-modal-user-app {
1872
+ font-size: 11px;
1873
+ color: var(--chat-text-muted);
1874
+ }
1875
+
1876
+ /* ─── Message Attachment in Room Mode ──────────────────────── */
1877
+
1878
+ .tc-msg-attachment {
1879
+ margin-top: 6px;
1880
+ }
1881
+
1882
+ /* ─── Pinned Panel ────────────────────────────────────────── */
1883
+
1884
+ .tc-pinned-panel {
1885
+ width: 260px;
1886
+ min-width: 260px;
1887
+ border-left: var(--chat-border-width) solid var(--chat-border);
1888
+ background: var(--chat-bg);
1889
+ display: flex;
1890
+ flex-direction: column;
1891
+ animation: tc-files-panel-slide 0.2s ease-out;
1892
+ }
1893
+
1894
+ .tc-pinned-panel-header {
1895
+ display: flex;
1896
+ align-items: center;
1897
+ justify-content: space-between;
1898
+ padding: 12px;
1899
+ border-bottom: var(--chat-border-width) solid var(--chat-border);
1900
+ flex-shrink: 0;
1901
+ }
1902
+
1903
+ .tc-pinned-panel-title {
1904
+ display: flex;
1905
+ align-items: center;
1906
+ gap: 8px;
1907
+ font-weight: 600;
1908
+ font-size: 13px;
1909
+ color: var(--chat-text);
1910
+ }
1911
+
1912
+ .tc-pinned-panel-title i {
1913
+ color: var(--chat-accent);
1914
+ font-size: 14px;
1915
+ }
1916
+
1917
+ .tc-pinned-panel-close {
1918
+ width: 26px;
1919
+ height: 26px;
1920
+ border: none;
1921
+ background: none;
1922
+ color: var(--chat-text-muted);
1923
+ cursor: pointer;
1924
+ display: flex;
1925
+ align-items: center;
1926
+ justify-content: center;
1927
+ font-size: 12px;
1928
+ border-radius: 4px;
1929
+ transition: background var(--chat-transition-speed), color var(--chat-transition-speed);
1930
+ }
1931
+
1932
+ .tc-pinned-panel-close:hover {
1933
+ background: rgba(231, 76, 60, 0.08);
1934
+ color: var(--chat-error-color, #e74c3c);
1935
+ }
1936
+
1937
+ .tc-pinned-panel-list {
1938
+ flex: 1;
1939
+ overflow-y: auto;
1940
+ padding: 6px 0;
1941
+ }
1942
+
1943
+ .tc-pinned-panel-empty {
1944
+ display: flex;
1945
+ flex-direction: column;
1946
+ align-items: center;
1947
+ justify-content: center;
1948
+ padding: 32px 16px;
1949
+ color: var(--chat-text-muted);
1950
+ font-size: 12px;
1951
+ text-align: center;
1952
+ }
1953
+
1954
+ .tc-pinned-panel-item {
1955
+ display: flex;
1956
+ align-items: flex-start;
1957
+ gap: 8px;
1958
+ padding: 10px 12px;
1959
+ cursor: pointer;
1960
+ transition: background var(--chat-transition-speed);
1961
+ }
1962
+
1963
+ .tc-pinned-panel-item:hover {
1964
+ background: var(--chat-hover);
1965
+ }
1966
+
1967
+ .tc-pinned-panel-item-info {
1968
+ flex: 1;
1969
+ min-width: 0;
1970
+ }
1971
+
1972
+ .tc-pinned-panel-item-sender {
1973
+ font-size: 12px;
1974
+ font-weight: 600;
1975
+ color: var(--chat-accent);
1976
+ margin-bottom: 2px;
1977
+ }
1978
+
1979
+ .tc-pinned-panel-item-text {
1980
+ font-size: 12px;
1981
+ color: var(--chat-text);
1982
+ white-space: nowrap;
1983
+ overflow: hidden;
1984
+ text-overflow: ellipsis;
1985
+ line-height: 1.4;
1986
+ }
1987
+
1988
+ .tc-pinned-panel-item-time {
1989
+ font-size: 10px;
1990
+ color: var(--chat-text-muted);
1991
+ margin-top: 2px;
1992
+ }
1993
+
1994
+ .tc-pinned-panel-item-actions {
1995
+ display: flex;
1996
+ gap: 2px;
1997
+ flex-shrink: 0;
1998
+ opacity: 0;
1999
+ transition: opacity var(--chat-transition-speed);
2000
+ }
2001
+
2002
+ .tc-pinned-panel-item:hover .tc-pinned-panel-item-actions {
2003
+ opacity: 1;
2004
+ }
2005
+
2006
+ .tc-pinned-panel-item-btn {
2007
+ width: 24px;
2008
+ height: 24px;
2009
+ border: none;
2010
+ background: none;
2011
+ color: var(--chat-text-muted);
2012
+ cursor: pointer;
2013
+ display: flex;
2014
+ align-items: center;
2015
+ justify-content: center;
2016
+ font-size: 11px;
2017
+ border-radius: 4px;
2018
+ transition: background var(--chat-transition-speed), color var(--chat-transition-speed);
2019
+ }
2020
+
2021
+ .tc-pinned-panel-item-btn:hover {
2022
+ background: rgba(231, 76, 60, 0.08);
2023
+ color: var(--chat-error-color, #e74c3c);
2024
+ }
2025
+
2026
+ .tc-pinned-toggle-btn {
2027
+ position: relative;
2028
+ width: 32px;
2029
+ height: 32px;
2030
+ border: var(--chat-border-width) solid var(--chat-border);
2031
+ border-radius: 6px;
2032
+ background: var(--chat-bg);
2033
+ color: var(--chat-text-secondary);
2034
+ font-size: 14px;
2035
+ cursor: pointer;
2036
+ display: flex;
2037
+ align-items: center;
2038
+ justify-content: center;
2039
+ transition: background var(--chat-transition-speed), color var(--chat-transition-speed), border-color var(--chat-transition-speed);
2040
+ }
2041
+
2042
+ .tc-pinned-toggle-btn:hover {
2043
+ background: var(--chat-accent-transparent);
2044
+ color: var(--chat-accent);
2045
+ }
2046
+
2047
+ .tc-pinned-toggle-active {
2048
+ background: var(--chat-accent-transparent) !important;
2049
+ color: var(--chat-accent) !important;
2050
+ border-color: var(--chat-accent) !important;
2051
+ }
2052
+
2053
+ .tc-pinned-badge {
2054
+ position: absolute;
2055
+ top: -6px;
2056
+ right: -6px;
2057
+ min-width: 16px;
2058
+ height: 16px;
2059
+ padding: 0 4px;
2060
+ border-radius: 999px;
2061
+ background: var(--chat-accent);
2062
+ color: #fff;
2063
+ font-size: 9px;
2064
+ font-weight: 700;
2065
+ display: flex;
2066
+ align-items: center;
2067
+ justify-content: center;
2068
+ }
2069
+
2070
+ /* ─── Search Panel ────────────────────────────────────────── */
2071
+
2072
+ .tc-search-panel {
2073
+ width: 260px;
2074
+ min-width: 260px;
2075
+ border-left: var(--chat-border-width) solid var(--chat-border);
2076
+ background: var(--chat-bg);
2077
+ display: flex;
2078
+ flex-direction: column;
2079
+ animation: tc-files-panel-slide 0.2s ease-out;
2080
+ }
2081
+
2082
+ .tc-search-panel-header {
2083
+ display: flex;
2084
+ align-items: center;
2085
+ justify-content: space-between;
2086
+ padding: 12px;
2087
+ border-bottom: var(--chat-border-width) solid var(--chat-border);
2088
+ flex-shrink: 0;
2089
+ }
2090
+
2091
+ .tc-search-panel-title {
2092
+ display: flex;
2093
+ align-items: center;
2094
+ gap: 8px;
2095
+ font-weight: 600;
2096
+ font-size: 13px;
2097
+ color: var(--chat-text);
2098
+ }
2099
+
2100
+ .tc-search-panel-title i {
2101
+ color: var(--chat-accent);
2102
+ font-size: 14px;
2103
+ }
2104
+
2105
+ .tc-search-panel-close {
2106
+ width: 26px;
2107
+ height: 26px;
2108
+ border: none;
2109
+ background: none;
2110
+ color: var(--chat-text-muted);
2111
+ cursor: pointer;
2112
+ display: flex;
2113
+ align-items: center;
2114
+ justify-content: center;
2115
+ font-size: 12px;
2116
+ border-radius: 4px;
2117
+ transition: background var(--chat-transition-speed), color var(--chat-transition-speed);
2118
+ }
2119
+
2120
+ .tc-search-panel-close:hover {
2121
+ background: rgba(231, 76, 60, 0.08);
2122
+ color: var(--chat-error-color, #e74c3c);
2123
+ }
2124
+
2125
+ .tc-search-panel-input {
2126
+ margin: 8px 12px;
2127
+ padding: 8px 10px;
2128
+ border: var(--chat-border-width) solid var(--chat-border);
2129
+ border-radius: var(--chat-radius-sm);
2130
+ background: var(--chat-input-bg);
2131
+ color: var(--chat-text);
2132
+ font-size: 13px;
2133
+ outline: none;
2134
+ transition: border-color var(--chat-transition-speed);
2135
+ }
2136
+
2137
+ .tc-search-panel-input:focus {
2138
+ border-color: var(--chat-input-focus-border);
2139
+ }
2140
+
2141
+ .tc-search-panel-results {
2142
+ flex: 1;
2143
+ overflow-y: auto;
2144
+ padding: 0 0 6px;
2145
+ }
2146
+
2147
+ .tc-search-panel-empty {
2148
+ display: flex;
2149
+ flex-direction: column;
2150
+ align-items: center;
2151
+ justify-content: center;
2152
+ padding: 32px 16px;
2153
+ color: var(--chat-text-muted);
2154
+ font-size: 12px;
2155
+ text-align: center;
2156
+ }
2157
+
2158
+ .tc-search-panel-count {
2159
+ padding: 4px 12px;
2160
+ font-size: 11px;
2161
+ color: var(--chat-text-muted);
2162
+ font-weight: 500;
2163
+ }
2164
+
2165
+ .tc-search-panel-item {
2166
+ padding: 10px 12px;
2167
+ cursor: pointer;
2168
+ transition: background var(--chat-transition-speed);
2169
+ }
2170
+
2171
+ .tc-search-panel-item:hover {
2172
+ background: var(--chat-hover);
2173
+ }
2174
+
2175
+ .tc-search-panel-item-info {
2176
+ min-width: 0;
2177
+ }
2178
+
2179
+ .tc-search-panel-item-sender {
2180
+ display: flex;
2181
+ align-items: center;
2182
+ justify-content: space-between;
2183
+ font-size: 12px;
2184
+ font-weight: 600;
2185
+ color: var(--chat-accent);
2186
+ margin-bottom: 2px;
2187
+ }
2188
+
2189
+ .tc-search-panel-item-time {
2190
+ font-size: 10px;
2191
+ color: var(--chat-text-muted);
2192
+ font-weight: 400;
2193
+ }
2194
+
2195
+ .tc-search-panel-item-text {
2196
+ font-size: 12px;
2197
+ color: var(--chat-text);
2198
+ line-height: 1.4;
2199
+ display: -webkit-box;
2200
+ -webkit-line-clamp: 2;
2201
+ line-clamp: 2;
2202
+ -webkit-box-orient: vertical;
2203
+ overflow: hidden;
2204
+ }
2205
+
2206
+ .tc-search-highlight {
2207
+ background: rgba(255, 193, 7, 0.35);
2208
+ color: inherit;
2209
+ border-radius: 2px;
2210
+ padding: 0 1px;
2211
+ }
2212
+
2213
+ .tc-search-toggle-btn {
2214
+ position: relative;
2215
+ width: 32px;
2216
+ height: 32px;
2217
+ border: var(--chat-border-width) solid var(--chat-border);
2218
+ border-radius: 6px;
2219
+ background: var(--chat-bg);
2220
+ color: var(--chat-text-secondary);
2221
+ font-size: 14px;
2222
+ cursor: pointer;
2223
+ display: flex;
2224
+ align-items: center;
2225
+ justify-content: center;
2226
+ transition: background var(--chat-transition-speed), color var(--chat-transition-speed), border-color var(--chat-transition-speed);
2227
+ }
2228
+
2229
+ .tc-search-toggle-btn:hover {
2230
+ background: var(--chat-accent-transparent);
2231
+ color: var(--chat-accent);
2232
+ }
2233
+
2234
+ .tc-search-toggle-active {
2235
+ background: var(--chat-accent-transparent) !important;
2236
+ color: var(--chat-accent) !important;
2237
+ border-color: var(--chat-accent) !important;
2238
+ }
2239
+
2240
+ /* ─── Confirm Dialog ──────────────────────────────────────── */
2241
+
2242
+ .tc-confirm-overlay {
2243
+ position: fixed;
2244
+ inset: 0;
2245
+ background: var(--chat-modal-backdrop, rgba(0, 0, 0, 0.5));
2246
+ display: flex;
2247
+ align-items: center;
2248
+ justify-content: center;
2249
+ z-index: 10001;
2250
+ backdrop-filter: blur(var(--chat-modal-backdrop-blur, 2px));
2251
+ }
2252
+
2253
+ .tc-confirm-dialog {
2254
+ background: var(--chat-modal-bg);
2255
+ border-radius: var(--chat-modal-radius);
2256
+ box-shadow: var(--chat-modal-shadow);
2257
+ padding: 24px;
2258
+ min-width: 300px;
2259
+ max-width: 400px;
2260
+ text-align: center;
2261
+ animation: tc-confirm-pop 0.15s ease-out;
2262
+ }
2263
+
2264
+ @keyframes tc-confirm-pop {
2265
+ from { transform: scale(0.95); opacity: 0; }
2266
+ to { transform: scale(1); opacity: 1; }
2267
+ }
2268
+
2269
+ .tc-confirm-icon {
2270
+ font-size: 32px;
2271
+ color: var(--chat-accent);
2272
+ margin-bottom: 12px;
2273
+ }
2274
+
2275
+ .tc-confirm-title {
2276
+ font-size: 16px;
2277
+ font-weight: 600;
2278
+ color: var(--chat-text);
2279
+ margin-bottom: 8px;
2280
+ }
2281
+
2282
+ .tc-confirm-message {
2283
+ font-size: 13px;
2284
+ color: var(--chat-text-secondary);
2285
+ line-height: 1.5;
2286
+ margin-bottom: 20px;
2287
+ }
2288
+
2289
+ .tc-confirm-buttons {
2290
+ display: flex;
2291
+ gap: 8px;
2292
+ justify-content: center;
2293
+ }
2294
+
2295
+ .tc-confirm-btn {
2296
+ padding: 8px 20px;
2297
+ border: none;
2298
+ border-radius: 6px;
2299
+ font-size: 13px;
2300
+ font-weight: 500;
2301
+ cursor: pointer;
2302
+ transition: background var(--chat-transition-speed), color var(--chat-transition-speed);
2303
+ }
2304
+
2305
+ .tc-confirm-btn-primary {
2306
+ background: var(--chat-accent);
2307
+ color: #fff;
2308
+ }
2309
+
2310
+ .tc-confirm-btn-primary:hover {
2311
+ filter: brightness(1.1);
2312
+ }
2313
+
2314
+ .tc-confirm-btn-secondary {
2315
+ background: var(--chat-hover);
2316
+ color: var(--chat-text);
2317
+ }
2318
+
2319
+ .tc-confirm-btn-secondary:hover {
2320
+ background: var(--chat-border);
2321
+ }
2322
+
2323
+ /* ─── Scrollbar Styling ────────────────────────────────────── */
2324
+
2325
+ .tc-chat-list::-webkit-scrollbar,
2326
+ .tc-messages::-webkit-scrollbar,
2327
+ .tc-modal-user-list::-webkit-scrollbar,
2328
+ .tc-mention-popup::-webkit-scrollbar,
2329
+ .tc-pinned-panel-list::-webkit-scrollbar,
2330
+ .tc-search-panel-results::-webkit-scrollbar {
2331
+ width: 6px;
2332
+ }
2333
+
2334
+ .tc-chat-list::-webkit-scrollbar-track,
2335
+ .tc-messages::-webkit-scrollbar-track,
2336
+ .tc-modal-user-list::-webkit-scrollbar-track,
2337
+ .tc-mention-popup::-webkit-scrollbar-track,
2338
+ .tc-pinned-panel-list::-webkit-scrollbar-track,
2339
+ .tc-search-panel-results::-webkit-scrollbar-track {
2340
+ background: transparent;
2341
+ }
2342
+
2343
+ .tc-chat-list::-webkit-scrollbar-thumb,
2344
+ .tc-messages::-webkit-scrollbar-thumb,
2345
+ .tc-modal-user-list::-webkit-scrollbar-thumb,
2346
+ .tc-mention-popup::-webkit-scrollbar-thumb,
2347
+ .tc-pinned-panel-list::-webkit-scrollbar-thumb,
2348
+ .tc-search-panel-results::-webkit-scrollbar-thumb {
2349
+ background: rgba(0, 0, 0, 0.15);
2350
+ border-radius: 3px;
2351
+ }
2352
+
2353
+ .tc-chat-list::-webkit-scrollbar-thumb:hover,
2354
+ .tc-messages::-webkit-scrollbar-thumb:hover {
2355
+ background: rgba(0, 0, 0, 0.25);
2356
+ }
2357
+
2358
+ /* ─── Context Menu ────────────────────────────────────────── */
2359
+
2360
+ .tc-ctx-menu {
2361
+ background: var(--chat-modal-bg, var(--chat-bg, #ffffff));
2362
+ border: var(--chat-border-width) solid var(--chat-border, rgba(0,0,0,0.1));
2363
+ border-radius: var(--chat-ctx-radius);
2364
+ box-shadow: var(--chat-ctx-shadow);
2365
+ min-width: var(--chat-ctx-min-width);
2366
+ max-width: var(--chat-ctx-max-width);
2367
+ padding: var(--chat-ctx-padding);
2368
+ overflow: hidden;
2369
+ animation: tc-ctx-fade-in 0.12s ease-out;
2370
+ }
2371
+
2372
+ @keyframes tc-ctx-fade-in {
2373
+ from { opacity: 0; transform: scale(0.96); }
2374
+ to { opacity: 1; transform: scale(1); }
2375
+ }
2376
+
2377
+ .tc-ctx-header {
2378
+ padding: 6px 14px 4px;
2379
+ font-size: var(--chat-ctx-header-size);
2380
+ font-weight: var(--chat-ctx-header-weight);
2381
+ text-transform: uppercase;
2382
+ letter-spacing: 0.5px;
2383
+ color: var(--chat-text-muted, #999);
2384
+ user-select: none;
2385
+ }
2386
+
2387
+ .tc-ctx-separator {
2388
+ height: 1px;
2389
+ background: var(--chat-border, rgba(0,0,0,0.08));
2390
+ margin: 4px 8px;
2391
+ }
2392
+
2393
+ .tc-ctx-item {
2394
+ display: flex;
2395
+ align-items: center;
2396
+ gap: 10px;
2397
+ padding: var(--chat-ctx-item-padding);
2398
+ font-size: var(--chat-ctx-item-font-size);
2399
+ color: var(--chat-text, #333);
2400
+ cursor: pointer;
2401
+ user-select: none;
2402
+ transition: background 0.1s;
2403
+ }
2404
+
2405
+ .tc-ctx-item:hover {
2406
+ background: var(--chat-accent-transparent, rgba(25,118,210,0.08));
2407
+ }
2408
+
2409
+ .tc-ctx-item.tc-ctx-disabled {
2410
+ opacity: 0.4;
2411
+ cursor: default;
2412
+ pointer-events: none;
2413
+ }
2414
+
2415
+ .tc-ctx-item.tc-ctx-danger {
2416
+ color: var(--chat-error-color, #e74c3c);
2417
+ }
2418
+
2419
+ .tc-ctx-item.tc-ctx-danger:hover {
2420
+ background: rgba(231, 76, 60, 0.08);
2421
+ }
2422
+
2423
+ .tc-ctx-icon {
2424
+ width: var(--chat-ctx-icon-size);
2425
+ text-align: center;
2426
+ font-size: var(--chat-ctx-item-font-size);
2427
+ color: var(--chat-text-secondary, #666);
2428
+ flex-shrink: 0;
2429
+ }
2430
+
2431
+ .tc-ctx-item.tc-ctx-danger .tc-ctx-icon {
2432
+ color: var(--chat-error-color, #e74c3c);
2433
+ }
2434
+
2435
+ .tc-ctx-label {
2436
+ flex: 1;
2437
+ white-space: nowrap;
2438
+ overflow: hidden;
2439
+ text-overflow: ellipsis;
2440
+ }
2441
+
2442
+ .tc-ctx-shortcut {
2443
+ font-size: var(--chat-ctx-shortcut-size);
2444
+ color: var(--chat-text-muted, #999);
2445
+ margin-left: auto;
2446
+ padding-left: 16px;
2447
+ flex-shrink: 0;
2448
+ }
2449
+
2450
+ /* ─── Responsive ──────────────────────────────────────────── */
2451
+
2452
+ /* Small containers: tighten sidebar, panels, modals */
2453
+ @media (max-width: 700px) {
2454
+ .tc-container {
2455
+ grid-template-columns: 220px 1fr;
2456
+ }
2457
+
2458
+ .tc-files-panel,
2459
+ .tc-pinned-panel,
2460
+ .tc-search-panel {
2461
+ width: 200px;
2462
+ min-width: 200px;
2463
+ }
2464
+
2465
+ .tc-confirm-dialog {
2466
+ min-width: 240px;
2467
+ max-width: 90vw;
2468
+ padding: 18px;
2469
+ }
2470
+
2471
+ .tc-modal {
2472
+ max-width: 90vw;
2473
+ }
2474
+ }
2475
+
2476
+ @media (max-width: 520px) {
2477
+ .tc-container {
2478
+ grid-template-columns: 1fr;
2479
+ }
2480
+
2481
+ .tc-sidebar {
2482
+ border-right: none;
2483
+ border-bottom: 1px solid var(--chat-border);
2484
+ max-height: 40vh;
2485
+ }
2486
+
2487
+ .tc-sidebar-resize-handle {
2488
+ display: none;
2489
+ }
2490
+
2491
+ .tc-files-panel,
2492
+ .tc-pinned-panel,
2493
+ .tc-search-panel {
2494
+ position: absolute;
2495
+ right: 0;
2496
+ top: 0;
2497
+ bottom: 0;
2498
+ z-index: 50;
2499
+ width: 240px;
2500
+ min-width: 0;
2501
+ box-shadow: -4px 0 12px rgba(0, 0, 0, 0.1);
2502
+ }
2503
+
2504
+ .tc-confirm-dialog {
2505
+ min-width: 200px;
2506
+ max-width: 95vw;
2507
+ padding: 16px;
2508
+ }
2509
+
2510
+ .tc-confirm-icon {
2511
+ font-size: 24px;
2512
+ margin-bottom: 8px;
2513
+ }
2514
+
2515
+ .tc-confirm-title {
2516
+ font-size: 14px;
2517
+ }
2518
+
2519
+ .tc-confirm-message {
2520
+ font-size: 12px;
2521
+ margin-bottom: 14px;
2522
+ }
2523
+
2524
+ .tc-confirm-btn {
2525
+ padding: 6px 14px;
2526
+ font-size: 12px;
2527
+ }
2528
+
2529
+ .tc-topbar-content {
2530
+ padding: 8px 12px;
2531
+ }
2532
+
2533
+ .tc-topbar-title {
2534
+ font-size: 16px;
2535
+ }
2536
+
2537
+ .tc-tabs {
2538
+ padding: 0 6px;
2539
+ }
2540
+
2541
+ .tc-tab {
2542
+ padding: 8px 10px;
2543
+ font-size: 12px;
2544
+ gap: 5px;
2545
+ }
2546
+ }
2547
+
2548
+ /* Very narrow: stack layout, compact everything */
2549
+ @media (max-width: 380px) {
2550
+ .tc-sidebar-header {
2551
+ padding: 8px;
2552
+ }
2553
+
2554
+ .tc-sidebar-title h2 {
2555
+ font-size: 14px;
2556
+ }
2557
+
2558
+ .tc-header-actions {
2559
+ gap: 2px;
2560
+ }
2561
+
2562
+ .tc-files-toggle-btn,
2563
+ .tc-pinned-toggle-btn,
2564
+ .tc-search-toggle-btn {
2565
+ width: 28px;
2566
+ height: 28px;
2567
+ font-size: 12px;
2568
+ }
2569
+
2570
+ .tc-tabs-actions {
2571
+ gap: 2px;
2572
+ }
2573
+ }