smodusermc commited on
Commit
9ee63bf
·
verified ·
1 Parent(s): a9d0c4b

Update static/style.css

Browse files
Files changed (1) hide show
  1. static/style.css +977 -1392
static/style.css CHANGED
@@ -1,1789 +1,1374 @@
1
  /* ============================================= *
2
- * InfinityChat - Design System & Styles *
3
- * Professional, Responsive, Theme-Aware *
4
  * ============================================= */
5
 
6
  /* ---------- CSS Variables (Light Theme Default) ---------- */
7
  :root {
8
- /* Primary Palette */
9
- --primary: #2563EB;
10
- --primary-hover: #1D4ED8;
11
- --primary-light: #DBEAFE;
12
- --primary-dark: #1E40AF;
13
-
14
- /* Neutrals */
15
- --bg: #FFFFFF;
16
- --bg-secondary: #F9FAFB;
17
- --bg-tertiary: #F3F4F6;
18
- --bg-elevated: #FFFFFF;
19
-
20
- /* Text */
21
- --text: #111827;
22
- --text-secondary: #6B7280;
23
- --text-tertiary: #9CA3AF;
24
- --text-inverse: #FFFFFF;
25
-
26
- /* Borders */
27
- --border: #E5E7EB;
28
- --border-light: #F3F4F6;
29
- --border-focus: var(--primary);
30
-
31
- /* Message Bubbles */
32
- --bubble-self: var(--primary);
33
- --bubble-self-text: #FFFFFF;
34
- --bubble-other: var(--bg-tertiary);
35
- --bubble-other-text: var(--text);
36
-
37
- /* Header */
38
- --header-bg: var(--bg-elevated);
39
- --header-border: var(--border);
40
- --header-text: var(--text);
41
-
42
- /* Input */
43
- --input-bg: var(--bg-tertiary);
44
- --input-border: var(--border);
45
- --input-text: var(--text);
46
- --input-placeholder: var(--text-tertiary);
47
-
48
- /* Status */
49
- --success: #10B981;
50
- --warning: #F59E0B;
51
- --error: #EF4444;
52
- --info: #3B82F6;
53
-
54
- /* Shadows */
55
- --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.05);
56
- --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);
57
- --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
58
- --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
59
- --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
60
-
61
- /* Border Radius */
62
- --radius-xs: 4px;
63
- --radius-sm: 6px;
64
- --radius-md: 8px;
65
- --radius-lg: 12px;
66
- --radius-xl: 16px;
67
- --radius-2xl: 20px;
68
- --radius-full: 9999px;
69
-
70
- /* Transitions */
71
- --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
72
- --transition: 200ms cubic-bezier(0.4, 0, 0.2, 1);
73
- --transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);
74
-
75
- /* Typography */
76
- --font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
77
- --font-mono: 'SF Mono', 'Fira Code', 'Fira Mono', monospace;
78
-
79
- /* Spacing */
80
- --space-1: 0.25rem;
81
- --space-2: 0.5rem;
82
- --space-3: 0.75rem;
83
- --space-4: 1rem;
84
- --space-5: 1.25rem;
85
- --space-6: 1.5rem;
86
- --space-8: 2rem;
87
- --space-10: 2.5rem;
88
- --space-12: 3rem;
89
-
90
- /* Layout */
91
- --header-height: 64px;
92
- --compose-min-height: 60px;
93
- --sidebar-width: 320px;
94
  }
95
 
96
  /* ---------- Dark Theme ---------- */
97
  [data-theme="dark"] {
98
- --primary: #60A5FA;
99
- --primary-hover: #3B82F6;
100
- --primary-light: #1E3A5F;
101
- --primary-dark: #1D4ED8;
102
-
103
- --bg: #111827;
104
- --bg-secondary: #1F2937;
105
- --bg-tertiary: #374151;
106
- --bg-elevated: #1F2937;
107
-
108
- --text: #F9FAFB;
109
- --text-secondary: #9CA3AF;
110
- --text-tertiary: #6B7280;
111
- --text-inverse: #111827;
112
-
113
- --border: #374151;
114
- --border-light: #1F2937;
115
-
116
- --bubble-self: var(--primary);
117
- --bubble-self-text: #111827;
118
- --bubble-other: var(--bg-tertiary);
119
- --bubble-other-text: var(--text);
120
-
121
- --header-bg: var(--bg-secondary);
122
- --input-bg: var(--bg-tertiary);
123
- --input-border: var(--border);
124
-
125
- --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.3);
126
- --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.4);
127
- --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.4);
128
- --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.4);
129
- --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.4);
 
 
 
 
 
130
  }
131
 
132
  /* ---------- Custom Theme ---------- */
133
  [data-theme="custom"] {
134
- /* Colors set via JavaScript */
135
  }
136
 
137
  /* ---------- Global Reset ---------- */
138
  *, *::before, *::after {
139
- margin: 0;
140
- padding: 0;
141
- box-sizing: border-box;
142
  }
143
 
144
  html {
145
- font-size: 16px;
146
- -webkit-text-size-adjust: 100%;
147
- -webkit-font-smoothing: antialiased;
148
- -moz-osx-font-smoothing: grayscale;
149
- text-rendering: optimizeLegibility;
150
  }
151
 
152
  body {
153
- font-family: var(--font-family);
154
- font-size: 0.9375rem;
155
- line-height: 1.5;
156
- color: var(--text);
157
- background: var(--bg);
158
- overflow: hidden;
159
- height: 100vh;
160
- height: 100dvh; /* Dynamic viewport for mobile */
161
- width: 100vw;
162
- user-select: none;
163
- }
164
-
165
- /* ---------- Screen Management ---------- */
166
- .screen {
167
- display: none;
168
- width: 100%;
169
- height: 100%;
170
- }
171
-
172
- .screen.active {
173
- display: flex;
174
- }
175
-
176
- #chat-screen {
177
- flex-direction: column;
178
  }
179
 
180
  /* ---------- Scrollbar ---------- */
181
  ::-webkit-scrollbar {
182
- width: 6px;
183
- height: 6px;
184
  }
185
-
186
  ::-webkit-scrollbar-track {
187
- background: transparent;
188
  }
189
-
190
  ::-webkit-scrollbar-thumb {
191
- background: var(--border);
192
- border-radius: var(--radius-full);
193
  }
194
-
195
  ::-webkit-scrollbar-thumb:hover {
196
- background: var(--text-tertiary);
197
  }
198
 
199
  /* ---------- Typography ---------- */
200
  h1, h2, h3, h4, h5, h6 {
201
- font-weight: 600;
202
- line-height: 1.3;
203
- color: var(--text);
204
  }
205
-
206
  p {
207
- color: var(--text-secondary);
208
  }
209
-
210
  a {
211
- color: var(--primary);
212
- text-decoration: none;
213
  }
214
-
215
  a:hover {
216
- text-decoration: underline;
217
  }
218
-
219
  small {
220
- font-size: 0.8125rem;
221
- color: var(--text-tertiary);
222
  }
223
-
224
  .text-secondary { color: var(--text-secondary); }
225
- .text-success { color: var(--success); }
226
- .text-error { color: var(--error); }
227
- .text-warning { color: var(--warning); }
228
- .text-primary { color: var(--primary); }
229
 
230
  /* ---------- Buttons ---------- */
231
  .btn {
232
- display: inline-flex;
233
- align-items: center;
234
- justify-content: center;
235
- gap: var(--space-2);
236
- padding: 0.625rem 1.25rem;
237
- font-size: 0.875rem;
238
- font-weight: 500;
239
- font-family: inherit;
240
- border: 1px solid transparent;
241
- border-radius: var(--radius-md);
242
- cursor: pointer;
243
- transition: all var(--transition-fast);
244
- text-decoration: none;
245
- white-space: nowrap;
246
- line-height: 1.4;
247
- position: relative;
248
- overflow: hidden;
249
  }
250
-
251
  .btn:disabled {
252
- opacity: 0.6;
253
- cursor: not-allowed;
254
- pointer-events: none;
255
  }
256
-
257
  .btn:active {
258
- transform: scale(0.98);
259
  }
260
 
261
  .btn-primary {
262
- background: var(--primary);
263
- color: white;
264
- border-color: var(--primary);
265
- box-shadow: var(--shadow-xs);
266
  }
267
-
268
  .btn-primary:hover:not(:disabled) {
269
- background: var(--primary-hover);
270
- border-color: var(--primary-hover);
271
- box-shadow: var(--shadow-sm);
272
- transform: translateY(-1px);
273
  }
274
 
275
  .btn-secondary {
276
- background: var(--bg-elevated);
277
- color: var(--text);
278
- border-color: var(--border);
279
- box-shadow: var(--shadow-xs);
280
  }
281
-
282
  .btn-secondary:hover:not(:disabled) {
283
- background: var(--bg-tertiary);
284
- border-color: var(--text-tertiary);
285
  }
286
 
287
  .btn-ghost {
288
- background: transparent;
289
- color: var(--text-secondary);
290
- border-color: transparent;
291
  }
292
-
293
  .btn-ghost:hover:not(:disabled) {
294
- background: var(--bg-tertiary);
295
- color: var(--text);
296
  }
297
 
298
  .btn-sm {
299
- padding: 0.375rem 0.75rem;
300
- font-size: 0.8125rem;
301
- border-radius: var(--radius-sm);
302
- }
303
-
304
- .btn-block {
305
- width: 100%;
306
- justify-content: center;
307
  }
 
308
 
309
  .btn-send {
310
- width: 40px;
311
- height: 40px;
312
- padding: 0;
313
- border-radius: var(--radius-full);
314
- background: var(--primary);
315
- color: white;
316
- border: none;
317
- box-shadow: var(--shadow-sm);
318
  }
319
-
320
  .btn-send:hover:not(:disabled) {
321
- background: var(--primary-hover);
322
- box-shadow: var(--shadow-md);
323
- transform: scale(1.05);
324
  }
325
-
326
  .btn-send:disabled {
327
- background: var(--bg-tertiary);
328
- color: var(--text-tertiary);
329
- box-shadow: none;
330
- transform: none;
331
  }
332
 
333
  /* Icon Button */
334
  .btn-icon {
335
- display: inline-flex;
336
- align-items: center;
337
- justify-content: center;
338
- width: 40px;
339
- height: 40px;
340
- background: transparent;
341
- border: none;
342
- border-radius: var(--radius-md);
343
- color: var(--text-secondary);
344
- cursor: pointer;
345
- transition: all var(--transition-fast);
346
- font-size: 1.125rem;
347
- position: relative;
348
  }
349
-
350
  .btn-icon:hover {
351
- background: var(--bg-tertiary);
352
- color: var(--text);
353
  }
354
-
355
  .btn-icon:active {
356
- background: var(--border);
357
- transform: scale(0.95);
358
  }
359
-
360
  .btn-icon-sm {
361
- width: 32px;
362
- height: 32px;
363
- font-size: 0.875rem;
364
  }
365
 
366
  /* Badge */
367
  .badge {
368
- position: absolute;
369
- top: 2px;
370
- right: 2px;
371
- min-width: 18px;
372
- height: 18px;
373
- padding: 0 4px;
374
- background: var(--error);
375
- color: white;
376
- font-size: 0.6875rem;
377
- font-weight: 600;
378
- border-radius: var(--radius-full);
379
- display: flex;
380
- align-items: center;
381
- justify-content: center;
382
- border: 2px solid var(--bg);
383
  }
384
 
385
  /* ---------- Forms ---------- */
386
  .form-group {
387
- margin-bottom: var(--space-4);
388
  }
389
-
390
  .form-group label {
391
- display: block;
392
- margin-bottom: var(--space-1);
393
- font-size: 0.875rem;
394
- font-weight: 500;
395
- color: var(--text);
396
  }
397
-
398
  .form-group label i {
399
- margin-right: var(--space-1);
400
- color: var(--text-secondary);
401
  }
402
 
403
  .input-wrapper {
404
- position: relative;
405
- display: flex;
406
- align-items: center;
407
  }
408
 
409
  .form-input {
410
- width: 100%;
411
- padding: 0.75rem 1rem;
412
- font-size: 0.9375rem;
413
- font-family: inherit;
414
- color: var(--input-text);
415
- background: var(--input-bg);
416
- border: 1px solid var(--input-border);
417
- border-radius: var(--radius-md);
418
- outline: none;
419
- transition: all var(--transition-fast);
420
- line-height: 1.5;
421
  }
422
-
423
  .form-input:focus {
424
- border-color: var(--border-focus);
425
- box-shadow: 0 0 0 3px var(--primary-light);
426
  }
427
-
428
  .form-input:disabled {
429
- opacity: 0.7;
430
- cursor: not-allowed;
431
  }
432
-
433
  .form-input::placeholder {
434
- color: var(--input-placeholder);
435
  }
436
 
437
  .input-toggle {
438
- position: absolute;
439
- right: var(--space-2);
440
- display: flex;
441
- align-items: center;
442
- justify-content: center;
443
- width: 32px;
444
- height: 32px;
445
- background: transparent;
446
- border: none;
447
- color: var(--text-tertiary);
448
- cursor: pointer;
449
- font-size: 0.875rem;
450
- border-radius: var(--radius-sm);
451
  }
452
-
453
  .input-toggle:hover {
454
- color: var(--text);
455
- background: var(--bg-tertiary);
456
  }
457
 
458
  .form-hint {
459
- display: block;
460
- margin-top: var(--space-1);
461
- font-size: 0.75rem;
462
- color: var(--text-tertiary);
463
  }
464
-
465
  .label-hint {
466
- font-weight: 400;
467
- font-size: 0.75rem;
468
- color: var(--text-tertiary);
469
  }
470
 
471
  /* Password Strength */
472
  .password-strength {
473
- margin-top: var(--space-2);
474
- margin-bottom: var(--space-4);
475
- display: flex;
476
- align-items: center;
477
- gap: var(--space-2);
478
  }
479
-
480
  .strength-bar {
481
- flex: 1;
482
- height: 4px;
483
- background: var(--bg-tertiary);
484
- border-radius: var(--radius-full);
485
- overflow: hidden;
486
  }
487
-
488
  .strength-fill {
489
- height: 100%;
490
- width: 0;
491
- background: var(--error);
492
- border-radius: var(--radius-full);
493
- transition: all var(--transition);
494
  }
495
-
496
  .strength-fill.weak { background: var(--error); width: 25%; }
497
  .strength-fill.fair { background: var(--warning); width: 50%; }
498
  .strength-fill.good { background: #3B82F6; width: 75%; }
499
  .strength-fill.strong { background: var(--success); width: 100%; }
500
-
501
  .strength-text {
502
- font-size: 0.75rem;
503
- font-weight: 500;
504
- min-width: 50px;
505
  }
506
 
507
  /* ---------- Alerts ---------- */
508
  .alert {
509
- padding: var(--space-3) var(--space-4);
510
- border-radius: var(--radius-md);
511
- display: flex;
512
- align-items: center;
513
- gap: var(--space-2);
514
- font-size: 0.875rem;
515
- margin-top: var(--space-4);
516
- display: none;
517
  }
518
-
519
  .alert:not(:empty) {
520
- display: flex;
521
  }
522
-
523
  .alert i {
524
- font-size: 1.125rem;
525
  }
526
-
527
  .alert-error {
528
- background: #FEF2F2;
529
- color: var(--error);
530
- border: 1px solid #FCA5A5;
531
  }
532
 
533
  /* ---------- Spinner ---------- */
534
  .spinner {
535
- width: 24px;
536
- height: 24px;
537
- border: 3px solid var(--border);
538
- border-top-color: var(--primary);
539
- border-radius: 50%;
540
- animation: spin 0.8s linear infinite;
541
- }
542
-
543
- .spinner-sm {
544
- width: 16px;
545
- height: 16px;
546
- border-width: 2px;
547
- }
548
-
549
- @keyframes spin {
550
- to { transform: rotate(360deg); }
551
  }
 
 
552
 
553
  /* ========== AUTH SCREEN ========== */
554
  #auth-screen {
555
- background: var(--bg);
556
- position: relative;
557
- overflow: hidden;
558
- justify-content: center;
559
- align-items: center;
560
- padding: var(--space-4);
561
  }
562
-
563
  .auth-bg {
564
- position: absolute;
565
- top: 0;
566
- left: 0;
567
- width: 100%;
568
- height: 100%;
569
- pointer-events: none;
570
- z-index: 0;
571
  }
572
-
573
  .auth-bg-circle {
574
- position: absolute;
575
- border-radius: 50%;
576
- background: var(--primary-light);
577
- opacity: 0.4;
578
- filter: blur(60px);
579
- }
580
-
581
- .auth-bg-circle-1 {
582
- width: 300px;
583
- height: 300px;
584
- top: -100px;
585
- right: -50px;
586
- }
587
-
588
- .auth-bg-circle-2 {
589
- width: 200px;
590
- height: 200px;
591
- bottom: -80px;
592
- left: -50px;
593
- }
594
-
595
- .auth-bg-circle-3 {
596
- width: 150px;
597
- height: 150px;
598
- top: 40%;
599
- left: 40%;
600
  }
 
 
 
601
 
602
  .auth-container {
603
- position: relative;
604
- z-index: 1;
605
- width: 100%;
606
- max-width: 440px;
607
- background: var(--bg-elevated);
608
- border-radius: var(--radius-2xl);
609
- box-shadow: var(--shadow-xl);
610
- padding: var(--space-8);
611
  }
612
-
613
  .auth-header {
614
- text-align: center;
615
- margin-bottom: var(--space-8);
616
  }
617
-
618
  .auth-logo {
619
- width: 64px;
620
- height: 64px;
621
- margin: 0 auto var(--space-4);
622
- background: var(--primary);
623
- color: white;
624
- border-radius: var(--radius-xl);
625
- display: flex;
626
- align-items: center;
627
- justify-content: center;
628
- font-size: 1.75rem;
629
- box-shadow: var(--shadow-lg);
630
  }
631
-
632
  .auth-title {
633
- font-size: 1.75rem;
634
- font-weight: 700;
635
- margin-bottom: var(--space-1);
 
636
  }
637
-
638
  .auth-subtitle {
639
- font-size: 0.875rem;
640
- color: var(--text-secondary);
641
  }
642
-
643
  .auth-tabs {
644
- display: flex;
645
- gap: var(--space-2);
646
- margin-bottom: var(--space-6);
647
- background: var(--bg-tertiary);
648
- padding: var(--space-1);
649
- border-radius: var(--radius-md);
650
  }
651
-
652
  .auth-tab {
653
- flex: 1;
654
- display: flex;
655
- align-items: center;
656
- justify-content: center;
657
- gap: var(--space-2);
658
- padding: var(--space-2) var(--space-4);
659
- font-size: 0.875rem;
660
- font-weight: 500;
661
- color: var(--text-secondary);
662
- background: transparent;
663
- border: none;
664
- border-radius: var(--radius-sm);
665
- cursor: pointer;
666
- transition: all var(--transition-fast);
667
  }
668
-
669
  .auth-tab.active {
670
- background: var(--bg-elevated);
671
- color: var(--text);
672
- box-shadow: var(--shadow-sm);
673
  }
674
-
675
  .auth-form {
676
- display: none;
677
  }
678
-
679
  .auth-form.active {
680
- display: block;
681
  }
682
-
683
  .auth-loading {
684
- display: flex;
685
- align-items: center;
686
- justify-content: center;
687
- gap: var(--space-2);
688
- margin-top: var(--space-4);
689
- color: var(--text-secondary);
690
- }
691
-
692
- .auth-loading.hidden {
693
- display: none;
694
  }
 
695
 
696
  /* ========== CHAT HEADER ========== */
697
  .chat-header {
698
- display: flex;
699
- align-items: center;
700
- justify-content: space-between;
701
- padding: 0 var(--space-4);
702
- height: var(--header-height);
703
- background: var(--header-bg);
704
- border-bottom: 1px solid var(--header-border);
705
- flex-shrink: 0;
706
- z-index: 10;
707
  }
708
-
709
  .header-section {
710
- display: flex;
711
- align-items: center;
712
- gap: var(--space-3);
713
  }
714
-
715
  .header-avatar-img {
716
- width: 40px;
717
- height: 40px;
718
- border-radius: var(--radius-full);
719
- object-fit: cover;
720
- border: 2px solid var(--border);
721
  }
722
-
723
  .header-avatar-img.hidden,
724
  #header-avatar-placeholder.hidden {
725
- display: none;
726
  }
727
-
728
  .header-info {
729
- display: flex;
730
- flex-direction: column;
731
  }
732
-
733
  .header-name {
734
- font-size: 1rem;
735
- font-weight: 600;
736
- line-height: 1.3;
 
737
  }
738
-
739
  .header-status {
740
- font-size: 0.75rem;
741
- color: var(--text-secondary);
742
- display: flex;
743
- align-items: center;
744
- gap: var(--space-1);
745
  }
746
-
747
  .status-dot {
748
- width: 8px;
749
- height: 8px;
750
- border-radius: 50%;
751
- background: var(--text-tertiary);
752
- }
753
-
754
- .status-dot.online {
755
- background: var(--success);
756
  }
 
757
 
758
  /* Connection Status */
759
  .connection-status {
760
- height: 28px;
761
- padding: 0 var(--space-4);
762
- background: var(--bg-secondary);
763
- border-bottom: 1px solid var(--border-light);
764
- display: flex;
765
- align-items: center;
766
- gap: var(--space-2);
767
- font-size: 0.75rem;
768
- color: var(--text-secondary);
769
- }
770
-
771
- .connection-status .fa-wifi {
772
- font-size: 0.875rem;
773
- }
774
-
775
- .connection-status.reconnecting {
776
- color: var(--warning);
777
- }
778
-
779
- .connection-status.connected {
780
- color: var(--success);
781
- }
782
-
783
- .connection-status.disconnected {
784
- color: var(--error);
785
- }
786
 
787
  /* ========== MESSAGES CONTAINER ========== */
788
  .messages-container {
789
- flex: 1;
790
- overflow: hidden;
791
- position: relative;
792
- background: var(--bg);
793
  }
794
-
795
  .messages-scroll {
796
- height: 100%;
797
- overflow-y: auto;
798
- padding: var(--space-4);
799
- scroll-behavior: smooth;
800
  }
801
-
802
  .load-more {
803
- text-align: center;
804
- margin-bottom: var(--space-4);
805
  }
806
-
807
  .load-more .btn {
808
- font-size: 0.8125rem;
809
  }
810
-
811
  .messages-list {
812
- display: flex;
813
- flex-direction: column;
814
- gap: var(--space-2);
815
- min-height: 100%;
816
  }
817
-
818
  .empty-state {
819
- display: flex;
820
- flex-direction: column;
821
- align-items: center;
822
- justify-content: center;
823
- padding: var(--space-12) var(--space-4);
824
- text-align: center;
825
- color: var(--text-secondary);
826
- opacity: 0.7;
827
- height: 100%;
828
  }
829
-
830
  .empty-icon {
831
- font-size: 3rem;
832
- margin-bottom: var(--space-4);
833
- color: var(--text-tertiary);
834
  }
835
-
836
  .empty-state h3 {
837
- margin-bottom: var(--space-1);
838
- font-size: 1.125rem;
 
839
  }
840
-
841
  .empty-state p {
842
- font-size: 0.875rem;
843
  }
844
 
845
- /* Scroll to bottom button */
846
  .scroll-bottom-btn {
847
- position: absolute;
848
- bottom: var(--space-4);
849
- right: var(--space-4);
850
- width: 36px;
851
- height: 36px;
852
- background: var(--bg-elevated);
853
- border: 1px solid var(--border);
854
- border-radius: var(--radius-full);
855
- box-shadow: var(--shadow-md);
856
- display: flex;
857
- align-items: center;
858
- justify-content: center;
859
- cursor: pointer;
860
- transition: all var(--transition-fast);
861
- z-index: 5;
862
- color: var(--text-secondary);
863
  }
864
-
865
  .scroll-bottom-btn:hover {
866
- background: var(--bg-tertiary);
867
- transform: scale(1.05);
868
  }
869
 
870
  /* ========== MESSAGE BUBBLES ========== */
871
  .message-wrapper {
872
- display: flex;
873
- flex-direction: column;
874
- animation: messageSlide 0.3s ease;
875
- }
876
-
877
- .message-wrapper.self {
878
- align-items: flex-end;
879
  }
880
-
881
- .message-wrapper.other {
882
- align-items: flex-start;
883
- }
884
-
885
  .message-sender {
886
- font-size: 0.75rem;
887
- font-weight: 500;
888
- margin-bottom: var(--space-1);
889
- color: var(--primary);
890
- padding: 0 var(--space-3);
891
  }
892
-
893
  .message-bubble {
894
- max-width: 75%;
895
- padding: 0.625rem 1rem;
896
- border-radius: var(--radius-lg);
897
- word-wrap: break-word;
898
- overflow-wrap: break-word;
899
- white-space: pre-wrap;
900
- line-height: 1.5;
901
- position: relative;
902
  }
903
-
904
  .message-self .message-bubble {
905
- background: var(--bubble-self);
906
- color: var(--bubble-self-text);
907
- border-bottom-right-radius: var(--radius-sm);
908
- margin-right: var(--space-1);
909
  }
910
-
911
  .message-other .message-bubble {
912
- background: var(--bubble-other);
913
- color: var(--bubble-other-text);
914
- border-bottom-left-radius: var(--radius-sm);
915
- margin-left: var(--space-1);
916
  }
917
-
918
  .message-bubble.deleted {
919
- opacity: 0.6;
920
- font-style: italic;
 
921
  }
922
-
923
  .message-text {
924
- font-size: 0.9375rem;
925
  }
926
-
927
  .message-meta {
928
- display: flex;
929
- align-items: center;
930
- gap: var(--space-2);
931
- margin-top: var(--space-1);
932
- font-size: 0.6875rem;
933
- }
934
-
935
- .message-self .message-meta {
936
- justify-content: flex-end;
937
- color: var(--bubble-self-text);
938
- opacity: 0.8;
939
- }
940
-
941
- .message-other .message-meta {
942
- color: var(--text-tertiary);
943
- }
944
-
945
- .message-time {
946
- white-space: nowrap;
947
- }
948
-
949
- .message-status {
950
- display: inline-flex;
951
- align-items: center;
952
- gap: 2px;
953
- }
954
-
955
- .message-status .fa-check {
956
- font-size: 0.625rem;
957
- }
958
-
959
- .message-status.read {
960
- color: var(--primary);
961
- }
962
-
963
  .message-actions {
964
- display: flex;
965
- gap: 2px;
966
- margin-top: var(--space-1);
967
- opacity: 0;
968
- transition: opacity var(--transition-fast);
969
  }
970
-
971
- .message-wrapper:hover .message-actions {
972
- opacity: 1;
973
- }
974
-
975
  .message-actions button {
976
- width: 28px;
977
- height: 28px;
978
- background: transparent;
979
- border: none;
980
- border-radius: var(--radius-sm);
981
- color: inherit;
982
- cursor: pointer;
983
- font-size: 0.75rem;
984
- transition: all var(--transition-fast);
985
- display: flex;
986
- align-items: center;
987
- justify-content: center;
988
- }
989
-
990
- .message-other .message-actions button {
991
- color: var(--text-secondary);
992
- }
993
-
994
- .message-other .message-actions button:hover {
995
- background: var(--bg-tertiary);
996
- color: var(--text);
997
- }
998
-
999
- .message-self .message-actions button:hover {
1000
- background: rgba(255,255,255,0.2);
1001
- }
1002
 
1003
  /* Reply Indicator */
1004
  .reply-indicator {
1005
- display: flex;
1006
- align-items: center;
1007
- gap: var(--space-2);
1008
- padding: var(--space-1) var(--space-2);
1009
- margin-bottom: var(--space-2);
1010
- font-size: 0.75rem;
1011
- background: rgba(0,0,0,0.05);
1012
- border-radius: var(--radius-sm);
1013
- border-left: 3px solid var(--primary);
 
1014
  }
1015
-
1016
- .message-self .reply-indicator {
1017
- background: rgba(255,255,255,0.1);
1018
  }
1019
 
1020
  /* Attachments */
1021
- .attachment {
1022
- margin-top: var(--space-2);
1023
- border-radius: var(--radius-md);
1024
- overflow: hidden;
1025
- }
1026
-
1027
  .attachment img {
1028
- max-width: 100%;
1029
- max-height: 300px;
1030
- object-fit: cover;
1031
- border-radius: var(--radius-md);
1032
- cursor: pointer;
1033
- display: block;
1034
  }
1035
-
1036
  .attachment video {
1037
- max-width: 100%;
1038
- max-height: 300px;
1039
- border-radius: var(--radius-md);
1040
- }
1041
-
1042
- .attachment audio {
1043
- width: 100%;
1044
  }
1045
-
1046
  .attachment-file {
1047
- display: flex;
1048
- align-items: center;
1049
- gap: var(--space-2);
1050
- padding: var(--space-2) var(--space-3);
1051
- background: var(--bg-secondary);
1052
- border-radius: var(--radius-md);
1053
- cursor: pointer;
1054
- transition: all var(--transition-fast);
1055
- }
1056
-
1057
- .attachment-file:hover {
1058
- background: var(--bg-tertiary);
1059
- }
1060
-
1061
- .attachment-file .fa-file {
1062
- font-size: 1.5rem;
1063
- color: var(--primary);
1064
- }
1065
-
1066
- .file-info {
1067
- flex: 1;
1068
- min-width: 0;
1069
- }
1070
-
1071
  .file-name {
1072
- font-size: 0.875rem;
1073
- font-weight: 500;
1074
- white-space: nowrap;
1075
- overflow: hidden;
1076
- text-overflow: ellipsis;
1077
- }
1078
-
1079
- .file-size {
1080
- font-size: 0.75rem;
1081
- color: var(--text-tertiary);
1082
- }
1083
-
1084
- .edited-label {
1085
- font-size: 0.6875rem;
1086
- font-style: italic;
1087
- opacity: 0.7;
1088
- margin-left: var(--space-1);
1089
  }
 
 
1090
 
1091
  @keyframes messageSlide {
1092
- from {
1093
- opacity: 0;
1094
- transform: translateY(10px);
1095
- }
1096
- to {
1097
- opacity: 1;
1098
- transform: translateY(0);
1099
- }
1100
  }
1101
 
1102
  /* ========== TYPING INDICATOR ========== */
1103
  .typing-indicator {
1104
- padding: var(--space-2) var(--space-4);
1105
- background: var(--bg-secondary);
1106
- border-top: 1px solid var(--border-light);
1107
- display: flex;
1108
- align-items: center;
1109
- gap: var(--space-2);
1110
- height: 36px;
1111
- flex-shrink: 0;
1112
- }
1113
-
1114
- .typing-dots {
1115
- display: flex;
1116
- gap: 3px;
1117
- }
1118
-
1119
  .typing-dot {
1120
- width: 6px;
1121
- height: 6px;
1122
- border-radius: 50%;
1123
- background: var(--text-tertiary);
1124
- animation: typingBounce 1.4s infinite ease-in-out both;
1125
  }
1126
-
1127
  .typing-dot:nth-child(1) { animation-delay: -0.32s; }
1128
  .typing-dot:nth-child(2) { animation-delay: -0.16s; }
1129
-
1130
- @keyframes typingBounce {
1131
- 0%, 80%, 100% { transform: scale(0); }
1132
- 40% { transform: scale(1); }
1133
- }
1134
-
1135
- .typing-text {
1136
- font-size: 0.8125rem;
1137
- color: var(--text-secondary);
1138
- }
1139
 
1140
  /* ========== REPLY PREVIEW ========== */
1141
  .reply-preview {
1142
- flex-shrink: 0;
1143
- border-top: 1px solid var(--border-light);
1144
  }
1145
-
1146
  .reply-bar {
1147
- display: flex;
1148
- align-items: center;
1149
- gap: var(--space-3);
1150
- padding: var(--space-2) var(--space-4);
1151
- background: var(--bg-secondary);
1152
- }
1153
-
1154
- .reply-icon {
1155
- color: var(--text-secondary);
1156
- flex-shrink: 0;
1157
- }
1158
-
1159
- .reply-content {
1160
- flex: 1;
1161
- min-width: 0;
1162
- }
1163
-
1164
- .reply-label {
1165
- font-size: 0.75rem;
1166
- font-weight: 600;
1167
- color: var(--primary);
1168
- }
1169
-
1170
  .reply-text {
1171
- font-size: 0.8125rem;
1172
- color: var(--text-secondary);
1173
- display: block;
1174
- overflow: hidden;
1175
- text-overflow: ellipsis;
1176
- white-space: nowrap;
1177
  }
1178
 
1179
  /* ========== COMPOSE AREA ========== */
1180
  .compose-area {
1181
- flex-shrink: 0;
1182
- border-top: 1px solid var(--border);
1183
- background: var(--bg-elevated);
1184
  }
1185
-
1186
  .compose-form {
1187
- display: flex;
1188
- align-items: flex-end;
1189
- padding: var(--space-2) var(--space-3);
1190
- gap: var(--space-2);
1191
  }
1192
-
1193
  .compose-tools {
1194
- display: flex;
1195
- flex-direction: column;
1196
- gap: 2px;
1197
- padding-bottom: var(--space-1);
1198
  }
1199
-
1200
- .input-area {
1201
- flex: 1;
1202
- }
1203
-
1204
  .message-input {
1205
- width: 100%;
1206
- resize: none;
1207
- padding: 0.625rem 1rem;
1208
- font-size: 0.9375rem;
1209
- font-family: inherit;
1210
- color: var(--input-text);
1211
- background: var(--input-bg);
1212
- border: 1px solid var(--input-border);
1213
- border-radius: var(--radius-xl);
1214
- outline: none;
1215
- min-height: 40px;
1216
- max-height: 120px;
1217
- line-height: 1.5;
1218
- transition: all var(--transition-fast);
1219
- overflow-y: auto;
1220
  }
1221
-
1222
  .message-input:focus {
1223
- border-color: var(--border-focus);
1224
- box-shadow: 0 0 0 3px var(--primary-light);
1225
- }
1226
-
1227
- .message-input::placeholder {
1228
- color: var(--input-placeholder);
1229
  }
 
1230
 
1231
  .upload-preview {
1232
- display: flex;
1233
- align-items: center;
1234
- justify-content: space-between;
1235
- padding: var(--space-2) var(--space-4);
1236
- background: var(--bg-secondary);
1237
- border-bottom: 1px solid var(--border-light);
 
1238
  }
1239
-
1240
  .upload-info {
1241
- display: flex;
1242
- align-items: center;
1243
- gap: var(--space-2);
1244
- font-size: 0.8125rem;
1245
  }
1246
-
1247
  .upload-progress {
1248
- padding: var(--space-2) var(--space-4);
1249
- background: var(--bg-secondary);
1250
- display: flex;
1251
- align-items: center;
1252
- gap: var(--space-3);
 
1253
  }
1254
-
1255
  .progress-track {
1256
- flex: 1;
1257
- height: 4px;
1258
- background: var(--border);
1259
- border-radius: var(--radius-full);
1260
- overflow: hidden;
1261
  }
1262
-
1263
  .progress-fill {
1264
- height: 100%;
1265
- background: var(--primary);
1266
- border-radius: var(--radius-full);
1267
- transition: width var(--transition);
1268
  }
1269
-
1270
  .progress-text {
1271
- font-size: 0.75rem;
1272
- font-weight: 500;
1273
- color: var(--text-secondary);
1274
- min-width: 36px;
1275
  }
1276
 
1277
  /* ========== MODALS ========== */
1278
  .modal {
1279
- position: fixed;
1280
- inset: 0;
1281
- z-index: 100;
1282
- display: flex;
1283
- align-items: center;
1284
- justify-content: center;
1285
- padding: var(--space-4);
1286
- visibility: hidden;
1287
- opacity: 0;
1288
- transition: all var(--transition);
1289
- }
1290
-
1291
- .modal:not(.hidden) {
1292
- visibility: visible;
1293
- opacity: 1;
1294
- }
1295
-
1296
  .modal-backdrop {
1297
- position: absolute;
1298
- inset: 0;
1299
- background: rgba(0,0,0,0.5);
1300
- backdrop-filter: blur(4px);
1301
  }
1302
-
1303
  .modal-container {
1304
- position: relative;
1305
- width: 100%;
1306
- max-width: 520px;
1307
- max-height: 90vh;
1308
- background: var(--bg-elevated);
1309
- border-radius: var(--radius-xl);
1310
- box-shadow: var(--shadow-xl);
1311
- overflow: hidden;
1312
- display: flex;
1313
- flex-direction: column;
1314
- }
1315
-
1316
- .modal-sm {
1317
- max-width: 400px;
1318
- }
1319
-
1320
  .modal-header {
1321
- display: flex;
1322
- align-items: center;
1323
- justify-content: space-between;
1324
- padding: var(--space-4) var(--space-6);
1325
- border-bottom: 1px solid var(--border);
1326
  }
1327
-
1328
  .modal-header h2 {
1329
- font-size: 1.125rem;
1330
- font-weight: 600;
1331
- }
1332
-
1333
- .modal-header h2 i {
1334
- margin-right: var(--space-2);
1335
- color: var(--primary);
1336
  }
1337
-
1338
  .modal-body {
1339
- padding: var(--space-6);
1340
- overflow-y: auto;
1341
- flex: 1;
1342
  }
1343
-
1344
  .modal-footer {
1345
- padding: var(--space-4) var(--space-6);
1346
- border-top: 1px solid var(--border);
1347
- display: flex;
1348
- justify-content: flex-end;
1349
- gap: var(--space-2);
1350
- background: var(--bg-secondary);
1351
  }
1352
 
1353
  /* Settings Styles */
1354
  .settings-section {
1355
- margin-bottom: var(--space-8);
1356
- }
1357
-
1358
- .settings-section:last-child {
1359
- margin-bottom: 0;
1360
  }
1361
-
1362
  .settings-section h3 {
1363
- font-size: 0.75rem;
1364
- font-weight: 600;
1365
- text-transform: uppercase;
1366
- letter-spacing: 0.05em;
1367
- color: var(--text-secondary);
1368
- margin-bottom: var(--space-4);
1369
- padding-bottom: var(--space-2);
1370
- border-bottom: 1px solid var(--border-light);
1371
- }
1372
-
1373
- .settings-row {
1374
- margin-bottom: var(--space-4);
1375
- }
1376
-
1377
  .avatar-section {
1378
- display: flex;
1379
- align-items: center;
1380
- gap: var(--space-4);
1381
- margin-bottom: var(--space-4);
1382
  }
1383
-
1384
  .settings-avatar {
1385
- width: 72px;
1386
- height: 72px;
1387
- border-radius: var(--radius-full);
1388
- background: var(--bg-tertiary);
1389
- display: flex;
1390
- align-items: center;
1391
- justify-content: center;
1392
- font-size: 2rem;
1393
- color: var(--text-secondary);
1394
- overflow: hidden;
1395
  }
1396
-
1397
  .settings-avatar-img {
1398
- width: 72px;
1399
- height: 72px;
1400
- border-radius: var(--radius-full);
1401
- object-fit: cover;
1402
  }
1403
-
1404
  .theme-selector {
1405
- display: grid;
1406
- grid-template-columns: repeat(3, 1fr);
1407
- gap: var(--space-3);
1408
- margin-top: var(--space-2);
1409
  }
1410
-
1411
  .theme-option {
1412
- display: flex;
1413
- flex-direction: column;
1414
- align-items: center;
1415
- gap: var(--space-2);
1416
- padding: var(--space-3);
1417
- background: var(--bg-secondary);
1418
- border: 2px solid var(--border);
1419
- border-radius: var(--radius-md);
1420
- cursor: pointer;
1421
- transition: all var(--transition-fast);
1422
- font-size: 0.75rem;
1423
- font-weight: 500;
1424
- text-align: center;
 
1425
  }
1426
-
1427
  .theme-option.active {
1428
- border-color: var(--primary);
1429
- background: var(--primary-light);
1430
  }
1431
-
1432
  .theme-preview {
1433
- width: 60px;
1434
- height: 40px;
1435
- border-radius: var(--radius-sm);
1436
- overflow: hidden;
1437
- border: 1px solid var(--border);
1438
- }
1439
-
1440
- .theme-preview-header {
1441
- height: 8px;
1442
- background: var(--bg-secondary);
1443
- }
1444
-
1445
- .theme-preview-body {
1446
- padding: 4px;
1447
- display: flex;
1448
- flex-direction: column;
1449
- gap: 2px;
1450
- }
1451
-
1452
- .theme-preview-message {
1453
- height: 6px;
1454
- border-radius: 3px;
1455
- width: 70%;
1456
- }
1457
-
1458
- .theme-preview-message.self {
1459
- background: var(--primary);
1460
- align-self: flex-end;
1461
- }
1462
-
1463
- .theme-preview-message.other {
1464
- background: var(--bg-tertiary);
1465
- }
1466
-
1467
- .theme-preview-light {
1468
- background: #FFFFFF;
1469
- }
1470
-
1471
- .theme-preview-dark {
1472
- background: #1F2937;
1473
- }
1474
-
1475
  .theme-preview-light .theme-preview-header { background: #F9FAFB; }
1476
  .theme-preview-dark .theme-preview-header { background: #111827; }
1477
-
1478
  .theme-preview-light .theme-preview-message.other { background: #F3F4F6; }
1479
  .theme-preview-dark .theme-preview-message.other { background: #374151; }
1480
 
1481
  .custom-theme-section {
1482
- margin-top: var(--space-4);
1483
- padding: var(--space-4);
1484
- background: var(--bg-secondary);
1485
- border-radius: var(--radius-md);
1486
- border: 1px solid var(--border);
1487
  }
1488
-
1489
  .color-picker-row {
1490
- display: grid;
1491
- grid-template-columns: repeat(3, 1fr);
1492
- gap: var(--space-4);
1493
  }
1494
-
1495
  .color-picker-group label {
1496
- display: block;
1497
- font-size: 0.75rem;
1498
- font-weight: 500;
1499
- margin-bottom: var(--space-2);
 
1500
  }
1501
-
1502
  .color-input-wrapper {
1503
- display: flex;
1504
- align-items: center;
1505
- gap: var(--space-2);
1506
  }
1507
-
1508
  .color-input-wrapper input[type="color"] {
1509
- width: 36px;
1510
- height: 36px;
1511
- border: 1px solid var(--border);
1512
- border-radius: var(--radius-sm);
1513
- padding: 2px;
1514
- cursor: pointer;
1515
- background: none;
1516
  }
1517
-
1518
  .color-hex {
1519
- font-size: 0.75rem;
1520
- font-family: var(--font-mono);
1521
- color: var(--text-secondary);
1522
  }
1523
-
1524
  .about-info {
1525
- display: flex;
1526
- flex-direction: column;
1527
- gap: var(--space-3);
1528
  }
1529
-
1530
  .about-row {
1531
- display: flex;
1532
- justify-content: space-between;
1533
- align-items: center;
1534
- padding: var(--space-2) 0;
1535
- border-bottom: 1px solid var(--border-light);
1536
- font-size: 0.875rem;
1537
- }
1538
-
1539
- .about-row:last-child {
1540
- border-bottom: none;
1541
  }
 
1542
 
1543
  /* Online Users Modal */
1544
  .online-users-list {
1545
- max-height: 300px;
1546
- overflow-y: auto;
1547
  }
1548
-
1549
  .loading-state {
1550
- display: flex;
1551
- align-items: center;
1552
- justify-content: center;
1553
- gap: var(--space-2);
1554
- padding: var(--space-8);
1555
- color: var(--text-secondary);
1556
  }
1557
-
1558
  .user-item {
1559
- display: flex;
1560
- align-items: center;
1561
- gap: var(--space-3);
1562
- padding: var(--space-2) var(--space-4);
1563
- transition: background var(--transition-fast);
1564
- }
1565
-
1566
- .user-item:hover {
1567
- background: var(--bg-secondary);
1568
- }
1569
-
1570
  .user-avatar {
1571
- width: 40px;
1572
- height: 40px;
1573
- border-radius: var(--radius-full);
1574
- background: var(--bg-tertiary);
1575
- display: flex;
1576
- align-items: center;
1577
- justify-content: center;
1578
- color: var(--text-secondary);
1579
- font-size: 1rem;
1580
- overflow: hidden;
1581
- }
1582
-
1583
- .user-avatar img {
1584
- width: 100%;
1585
- height: 100%;
1586
- object-fit: cover;
1587
- }
1588
-
1589
- .user-info {
1590
- flex: 1;
1591
- }
1592
-
1593
- .user-name {
1594
- font-weight: 500;
1595
- font-size: 0.875rem;
1596
- }
1597
-
1598
- .user-status-text {
1599
- font-size: 0.75rem;
1600
- color: var(--text-secondary);
1601
- }
1602
 
1603
  /* Emoji Picker */
1604
  .emoji-picker {
1605
- position: fixed;
1606
- bottom: 100px;
1607
- left: 50%;
1608
- transform: translateX(-50%);
1609
- z-index: 50;
1610
- background: var(--bg-elevated);
1611
- border: 1px solid var(--border);
1612
- border-radius: var(--radius-lg);
1613
- box-shadow: var(--shadow-xl);
1614
- width: 320px;
1615
- max-height: 350px;
1616
- overflow: hidden;
1617
  }
1618
-
1619
  .emoji-header {
1620
- border-bottom: 1px solid var(--border);
1621
- padding: var(--space-2);
1622
- }
1623
-
1624
- .emoji-categories {
1625
- display: flex;
1626
- gap: 2px;
1627
  }
1628
-
1629
  .emoji-cat {
1630
- width: 36px;
1631
- height: 36px;
1632
- border: none;
1633
- background: transparent;
1634
- border-radius: var(--radius-sm);
1635
- cursor: pointer;
1636
- color: var(--text-secondary);
1637
- font-size: 0.875rem;
1638
- transition: all var(--transition-fast);
1639
  }
1640
-
1641
  .emoji-cat.active {
1642
- background: var(--primary-light);
1643
- color: var(--primary);
1644
- }
1645
-
1646
- .emoji-cat:hover {
1647
- background: var(--bg-tertiary);
1648
  }
1649
-
1650
  .emoji-grid {
1651
- padding: var(--space-2);
1652
- display: grid;
1653
- grid-template-columns: repeat(8, 1fr);
1654
- gap: 2px;
1655
- max-height: 280px;
1656
- overflow-y: auto;
1657
  }
1658
-
1659
  .emoji-item {
1660
- width: 36px;
1661
- height: 36px;
1662
- display: flex;
1663
- align-items: center;
1664
- justify-content: center;
1665
- font-size: 1.25rem;
1666
- cursor: pointer;
1667
- border-radius: var(--radius-sm);
1668
- border: none;
1669
- background: transparent;
1670
- transition: background var(--transition-fast);
1671
- }
1672
-
1673
- .emoji-item:hover {
1674
- background: var(--bg-tertiary);
1675
- }
1676
 
1677
  /* Toast Notifications */
1678
  .toast-container {
1679
- position: fixed;
1680
- top: var(--space-4);
1681
- right: var(--space-4);
1682
- z-index: 200;
1683
- display: flex;
1684
- flex-direction: column;
1685
- gap: var(--space-2);
1686
- max-width: 360px;
1687
  }
1688
-
1689
  .toast {
1690
- padding: var(--space-3) var(--space-4);
1691
- background: var(--bg-elevated);
1692
- border: 1px solid var(--border);
1693
- border-radius: var(--radius-md);
1694
- box-shadow: var(--shadow-md);
1695
- display: flex;
1696
- align-items: center;
1697
- gap: var(--space-3);
1698
- animation: toastSlide 0.3s ease;
1699
- font-size: 0.875rem;
1700
- }
1701
-
1702
- .toast.toast-success {
1703
- border-left: 3px solid var(--success);
1704
- }
1705
-
1706
- .toast.toast-error {
1707
- border-left: 3px solid var(--error);
1708
- }
1709
-
1710
- .toast.toast-warning {
1711
- border-left: 3px solid var(--warning);
1712
- }
1713
-
1714
- .toast.toast-info {
1715
- border-left: 3px solid var(--info);
1716
- }
1717
-
1718
- @keyframes toastSlide {
1719
- from {
1720
- transform: translateX(100%);
1721
- opacity: 0;
1722
- }
1723
- to {
1724
- transform: translateX(0);
1725
- opacity: 1;
1726
- }
1727
- }
1728
 
1729
  /* ========== UTILITY ========== */
1730
- .hidden {
1731
- display: none !important;
1732
- }
1733
 
1734
  /* ========== RESPONSIVE ========== */
1735
  @media (max-width: 640px) {
1736
- .auth-container {
1737
- padding: var(--space-6);
1738
- border-radius: var(--radius-xl);
1739
- }
1740
-
1741
- .message-bubble {
1742
- max-width: 85%;
1743
- }
1744
-
1745
- .compose-form {
1746
- padding: var(--space-1) var(--space-2);
1747
- }
1748
-
1749
- .modal {
1750
- padding: 0;
1751
- align-items: flex-end;
1752
- }
1753
-
1754
- .modal-container {
1755
- max-height: 85vh;
1756
- border-radius: var(--radius-xl) var(--radius-xl) 0 0;
1757
- }
1758
-
1759
- .color-picker-row {
1760
- grid-template-columns: 1fr;
1761
- }
1762
-
1763
- .theme-selector {
1764
- grid-template-columns: 1fr;
1765
- }
1766
-
1767
- .emoji-picker {
1768
- left: 8px;
1769
- right: 8px;
1770
- transform: none;
1771
- width: auto;
1772
- }
1773
  }
1774
 
1775
  @media (min-width: 768px) {
1776
- .message-bubble {
1777
- max-width: 65%;
1778
- }
1779
-
1780
- .compose-form {
1781
- padding: var(--space-2) var(--space-4);
1782
- }
1783
  }
1784
 
1785
  @media (min-width: 1024px) {
1786
- .message-bubble {
1787
- max-width: 55%;
1788
- }
1789
  }
 
1
  /* ============================================= *
2
+ * InfinityChat - Complete Design System *
3
+ * Light / Dark / Custom themes *
4
  * ============================================= */
5
 
6
  /* ---------- CSS Variables (Light Theme Default) ---------- */
7
  :root {
8
+ /* Primary Palette */
9
+ --primary: #2563EB;
10
+ --primary-hover: #1D4ED8;
11
+ --primary-light: #DBEAFE;
12
+ --primary-dark: #1E40AF;
13
+
14
+ /* Neutrals (Light) */
15
+ --bg: #FFFFFF;
16
+ --bg-secondary: #F9FAFB;
17
+ --bg-tertiary: #F3F4F6;
18
+ --bg-elevated: #FFFFFF;
19
+
20
+ /* Text */
21
+ --text: #111827;
22
+ --text-secondary: #6B7280;
23
+ --text-tertiary: #9CA3AF;
24
+ --text-inverse: #FFFFFF;
25
+
26
+ /* Borders */
27
+ --border: #E5E7EB;
28
+ --border-light: #F3F4F6;
29
+ --border-focus: var(--primary);
30
+
31
+ /* Message Bubbles */
32
+ --bubble-self: var(--primary);
33
+ --bubble-self-text: var(--text-inverse);
34
+ --bubble-other: var(--bg-tertiary);
35
+ --bubble-other-text: var(--text);
36
+
37
+ /* Header */
38
+ --header-bg: var(--bg-elevated);
39
+ --header-border: var(--border);
40
+ --header-text: var(--text);
41
+
42
+ /* Input */
43
+ --input-bg: var(--bg-tertiary);
44
+ --input-border: var(--border);
45
+ --input-text: var(--text);
46
+ --input-placeholder: var(--text-tertiary);
47
+
48
+ /* Status */
49
+ --success: #10B981;
50
+ --warning: #F59E0B;
51
+ --error: #EF4444;
52
+ --info: #3B82F6;
53
+
54
+ /* Shadows */
55
+ --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.05);
56
+ --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);
57
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
58
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
59
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
60
+
61
+ /* Border Radius */
62
+ --radius-xs: 4px;
63
+ --radius-sm: 6px;
64
+ --radius-md: 8px;
65
+ --radius-lg: 12px;
66
+ --radius-xl: 16px;
67
+ --radius-2xl: 20px;
68
+ --radius-full: 9999px;
69
+
70
+ /* Transitions */
71
+ --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
72
+ --transition: 200ms cubic-bezier(0.4, 0, 0.2, 1);
73
+ --transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);
74
+
75
+ /* Typography */
76
+ --font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
77
+ --font-mono: 'SF Mono', 'Fira Code', monospace;
78
+
79
+ /* Spacing */
80
+ --space-1: 0.25rem;
81
+ --space-2: 0.5rem;
82
+ --space-3: 0.75rem;
83
+ --space-4: 1rem;
84
+ --space-5: 1.25rem;
85
+ --space-6: 1.5rem;
86
+ --space-8: 2rem;
87
+ --space-10: 2.5rem;
88
+ --space-12: 3rem;
89
+
90
+ /* Layout */
91
+ --header-height: 64px;
 
 
92
  }
93
 
94
  /* ---------- Dark Theme ---------- */
95
  [data-theme="dark"] {
96
+ --primary: #60A5FA;
97
+ --primary-hover: #3B82F6;
98
+ --primary-light: #1E3A5F;
99
+ --primary-dark: #1D4ED8;
100
+
101
+ --bg: #111827;
102
+ --bg-secondary: #1F2937;
103
+ --bg-tertiary: #374151;
104
+ --bg-elevated: #1F2937;
105
+
106
+ --text: #F9FAFB;
107
+ --text-secondary: #9CA3AF;
108
+ --text-tertiary: #6B7280;
109
+ --text-inverse: #111827;
110
+
111
+ --border: #374151;
112
+ --border-light: #1F2937;
113
+
114
+ --bubble-self: var(--primary);
115
+ --bubble-self-text: #111827;
116
+ --bubble-other: var(--bg-tertiary);
117
+ --bubble-other-text: var(--text);
118
+
119
+ --header-bg: var(--bg-secondary);
120
+ --header-border: var(--border);
121
+ --header-text: var(--text);
122
+
123
+ --input-bg: var(--bg-tertiary);
124
+ --input-border: var(--border);
125
+ --input-text: var(--text);
126
+ --input-placeholder: var(--text-tertiary);
127
+
128
+ --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.3);
129
+ --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.4), 0 1px 2px rgba(0, 0, 0, 0.3);
130
+ --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.4);
131
+ --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.4);
132
+ --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.4);
133
  }
134
 
135
  /* ---------- Custom Theme ---------- */
136
  [data-theme="custom"] {
137
+ /* Handled via JS inline style setting */
138
  }
139
 
140
  /* ---------- Global Reset ---------- */
141
  *, *::before, *::after {
142
+ margin: 0;
143
+ padding: 0;
144
+ box-sizing: border-box;
145
  }
146
 
147
  html {
148
+ font-size: 16px;
149
+ -webkit-text-size-adjust: 100%;
150
+ -webkit-font-smoothing: antialiased;
151
+ -moz-osx-font-smoothing: grayscale;
152
+ text-rendering: optimizeLegibility;
153
  }
154
 
155
  body {
156
+ font-family: var(--font-family);
157
+ font-size: 0.9375rem;
158
+ line-height: 1.5;
159
+ color: var(--text);
160
+ background: var(--bg);
161
+ overflow: hidden;
162
+ height: 100vh;
163
+ height: 100dvh;
164
+ width: 100vw;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
165
  }
166
 
167
  /* ---------- Scrollbar ---------- */
168
  ::-webkit-scrollbar {
169
+ width: 6px;
170
+ height: 6px;
171
  }
 
172
  ::-webkit-scrollbar-track {
173
+ background: transparent;
174
  }
 
175
  ::-webkit-scrollbar-thumb {
176
+ background: var(--border);
177
+ border-radius: var(--radius-full);
178
  }
 
179
  ::-webkit-scrollbar-thumb:hover {
180
+ background: var(--text-tertiary);
181
  }
182
 
183
  /* ---------- Typography ---------- */
184
  h1, h2, h3, h4, h5, h6 {
185
+ font-weight: 600;
186
+ line-height: 1.3;
187
+ color: var(--text);
188
  }
 
189
  p {
190
+ color: var(--text-secondary);
191
  }
 
192
  a {
193
+ color: var(--primary);
194
+ text-decoration: none;
195
  }
 
196
  a:hover {
197
+ text-decoration: underline;
198
  }
 
199
  small {
200
+ font-size: 0.8125rem;
201
+ color: var(--text-tertiary);
202
  }
 
203
  .text-secondary { color: var(--text-secondary); }
204
+ .text-success { color: var(--success); }
205
+ .text-error { color: var(--error); }
206
+ .text-warning { color: var(--warning); }
207
+ .text-primary { color: var(--primary); }
208
 
209
  /* ---------- Buttons ---------- */
210
  .btn {
211
+ display: inline-flex;
212
+ align-items: center;
213
+ justify-content: center;
214
+ gap: var(--space-2);
215
+ padding: 0.625rem 1.25rem;
216
+ font-size: 0.875rem;
217
+ font-weight: 500;
218
+ font-family: inherit;
219
+ border: 1px solid transparent;
220
+ border-radius: var(--radius-md);
221
+ cursor: pointer;
222
+ transition: all var(--transition-fast);
223
+ text-decoration: none;
224
+ white-space: nowrap;
225
+ line-height: 1.4;
226
+ position: relative;
227
+ overflow: hidden;
228
  }
 
229
  .btn:disabled {
230
+ opacity: 0.6;
231
+ cursor: not-allowed;
232
+ pointer-events: none;
233
  }
 
234
  .btn:active {
235
+ transform: scale(0.98);
236
  }
237
 
238
  .btn-primary {
239
+ background: var(--primary);
240
+ color: white;
241
+ border-color: var(--primary);
242
+ box-shadow: var(--shadow-xs);
243
  }
 
244
  .btn-primary:hover:not(:disabled) {
245
+ background: var(--primary-hover);
246
+ border-color: var(--primary-hover);
247
+ box-shadow: var(--shadow-sm);
248
+ transform: translateY(-1px);
249
  }
250
 
251
  .btn-secondary {
252
+ background: var(--bg-elevated);
253
+ color: var(--text);
254
+ border-color: var(--border);
 
255
  }
 
256
  .btn-secondary:hover:not(:disabled) {
257
+ background: var(--bg-tertiary);
258
+ border-color: var(--text-tertiary);
259
  }
260
 
261
  .btn-ghost {
262
+ background: transparent;
263
+ color: var(--text-secondary);
264
+ border-color: transparent;
265
  }
 
266
  .btn-ghost:hover:not(:disabled) {
267
+ background: var(--bg-tertiary);
268
+ color: var(--text);
269
  }
270
 
271
  .btn-sm {
272
+ padding: 0.375rem 0.75rem;
273
+ font-size: 0.8125rem;
274
+ border-radius: var(--radius-sm);
 
 
 
 
 
275
  }
276
+ .btn-block { width: 100%; justify-content: center; }
277
 
278
  .btn-send {
279
+ width: 40px;
280
+ height: 40px;
281
+ padding: 0;
282
+ border-radius: var(--radius-full);
283
+ background: var(--primary);
284
+ color: white;
285
+ border: none;
286
+ box-shadow: var(--shadow-sm);
287
  }
 
288
  .btn-send:hover:not(:disabled) {
289
+ background: var(--primary-hover);
290
+ box-shadow: var(--shadow-md);
291
+ transform: scale(1.05);
292
  }
 
293
  .btn-send:disabled {
294
+ background: var(--bg-tertiary);
295
+ color: var(--text-tertiary);
296
+ box-shadow: none;
297
+ transform: none;
298
  }
299
 
300
  /* Icon Button */
301
  .btn-icon {
302
+ display: inline-flex;
303
+ align-items: center;
304
+ justify-content: center;
305
+ width: 40px;
306
+ height: 40px;
307
+ background: transparent;
308
+ border: none;
309
+ border-radius: var(--radius-md);
310
+ color: var(--text-secondary);
311
+ cursor: pointer;
312
+ transition: all var(--transition-fast);
313
+ font-size: 1.125rem;
314
+ position: relative;
315
  }
 
316
  .btn-icon:hover {
317
+ background: var(--bg-tertiary);
318
+ color: var(--text);
319
  }
 
320
  .btn-icon:active {
321
+ background: var(--border);
322
+ transform: scale(0.95);
323
  }
 
324
  .btn-icon-sm {
325
+ width: 32px;
326
+ height: 32px;
327
+ font-size: 0.875rem;
328
  }
329
 
330
  /* Badge */
331
  .badge {
332
+ position: absolute;
333
+ top: 2px;
334
+ right: 2px;
335
+ min-width: 18px;
336
+ height: 18px;
337
+ padding: 0 4px;
338
+ background: var(--error);
339
+ color: white;
340
+ font-size: 0.6875rem;
341
+ font-weight: 600;
342
+ border-radius: var(--radius-full);
343
+ display: flex;
344
+ align-items: center;
345
+ justify-content: center;
346
+ border: 2px solid var(--bg);
347
  }
348
 
349
  /* ---------- Forms ---------- */
350
  .form-group {
351
+ margin-bottom: var(--space-4);
352
  }
 
353
  .form-group label {
354
+ display: block;
355
+ margin-bottom: var(--space-1);
356
+ font-size: 0.875rem;
357
+ font-weight: 500;
358
+ color: var(--text);
359
  }
 
360
  .form-group label i {
361
+ margin-right: var(--space-1);
362
+ color: var(--text-secondary);
363
  }
364
 
365
  .input-wrapper {
366
+ position: relative;
367
+ display: flex;
368
+ align-items: center;
369
  }
370
 
371
  .form-input {
372
+ width: 100%;
373
+ padding: 0.75rem 1rem;
374
+ font-size: 0.9375rem;
375
+ font-family: inherit;
376
+ color: var(--input-text);
377
+ background: var(--input-bg);
378
+ border: 1px solid var(--input-border);
379
+ border-radius: var(--radius-md);
380
+ outline: none;
381
+ transition: all var(--transition-fast);
382
+ line-height: 1.5;
383
  }
 
384
  .form-input:focus {
385
+ border-color: var(--border-focus);
386
+ box-shadow: 0 0 0 3px var(--primary-light);
387
  }
 
388
  .form-input:disabled {
389
+ opacity: 0.7;
390
+ cursor: not-allowed;
391
  }
 
392
  .form-input::placeholder {
393
+ color: var(--input-placeholder);
394
  }
395
 
396
  .input-toggle {
397
+ position: absolute;
398
+ right: var(--space-2);
399
+ display: flex;
400
+ align-items: center;
401
+ justify-content: center;
402
+ width: 32px;
403
+ height: 32px;
404
+ background: transparent;
405
+ border: none;
406
+ color: var(--text-tertiary);
407
+ cursor: pointer;
408
+ font-size: 0.875rem;
409
+ border-radius: var(--radius-sm);
410
  }
 
411
  .input-toggle:hover {
412
+ color: var(--text);
413
+ background: var(--bg-tertiary);
414
  }
415
 
416
  .form-hint {
417
+ display: block;
418
+ margin-top: var(--space-1);
419
+ font-size: 0.75rem;
420
+ color: var(--text-tertiary);
421
  }
 
422
  .label-hint {
423
+ font-weight: 400;
424
+ font-size: 0.75rem;
425
+ color: var(--text-tertiary);
426
  }
427
 
428
  /* Password Strength */
429
  .password-strength {
430
+ margin-top: var(--space-2);
431
+ margin-bottom: var(--space-4);
432
+ display: flex;
433
+ align-items: center;
434
+ gap: var(--space-2);
435
  }
 
436
  .strength-bar {
437
+ flex: 1;
438
+ height: 4px;
439
+ background: var(--bg-tertiary);
440
+ border-radius: var(--radius-full);
441
+ overflow: hidden;
442
  }
 
443
  .strength-fill {
444
+ height: 100%;
445
+ width: 0;
446
+ background: var(--error);
447
+ border-radius: var(--radius-full);
448
+ transition: all var(--transition);
449
  }
 
450
  .strength-fill.weak { background: var(--error); width: 25%; }
451
  .strength-fill.fair { background: var(--warning); width: 50%; }
452
  .strength-fill.good { background: #3B82F6; width: 75%; }
453
  .strength-fill.strong { background: var(--success); width: 100%; }
 
454
  .strength-text {
455
+ font-size: 0.75rem;
456
+ font-weight: 500;
457
+ min-width: 50px;
458
  }
459
 
460
  /* ---------- Alerts ---------- */
461
  .alert {
462
+ padding: var(--space-3) var(--space-4);
463
+ border-radius: var(--radius-md);
464
+ display: flex;
465
+ align-items: center;
466
+ gap: var(--space-2);
467
+ font-size: 0.875rem;
468
+ margin-top: var(--space-4);
469
+ display: none;
470
  }
 
471
  .alert:not(:empty) {
472
+ display: flex;
473
  }
 
474
  .alert i {
475
+ font-size: 1.125rem;
476
  }
 
477
  .alert-error {
478
+ background: #FEF2F2;
479
+ color: var(--error);
480
+ border: 1px solid #FCA5A5;
481
  }
482
 
483
  /* ---------- Spinner ---------- */
484
  .spinner {
485
+ width: 24px;
486
+ height: 24px;
487
+ border: 3px solid var(--border);
488
+ border-top-color: var(--primary);
489
+ border-radius: 50%;
490
+ animation: spin 0.8s linear infinite;
 
 
 
 
 
 
 
 
 
 
491
  }
492
+ .spinner-sm { width: 16px; height: 16px; border-width: 2px; }
493
+ @keyframes spin { to { transform: rotate(360deg); } }
494
 
495
  /* ========== AUTH SCREEN ========== */
496
  #auth-screen {
497
+ background: var(--bg);
498
+ position: relative;
499
+ overflow: hidden;
500
+ justify-content: center;
501
+ align-items: center;
502
+ padding: var(--space-4);
503
  }
 
504
  .auth-bg {
505
+ position: absolute;
506
+ top: 0; left: 0; width: 100%; height: 100%;
507
+ pointer-events: none; z-index: 0;
 
 
 
 
508
  }
 
509
  .auth-bg-circle {
510
+ position: absolute;
511
+ border-radius: 50%;
512
+ background: var(--primary-light);
513
+ opacity: 0.4;
514
+ filter: blur(60px);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
515
  }
516
+ .auth-bg-circle-1 { width: 300px; height: 300px; top: -100px; right: -50px; }
517
+ .auth-bg-circle-2 { width: 200px; height: 200px; bottom: -80px; left: -50px; }
518
+ .auth-bg-circle-3 { width: 150px; height: 150px; top: 40%; left: 40%; }
519
 
520
  .auth-container {
521
+ position: relative;
522
+ z-index: 1;
523
+ width: 100%;
524
+ max-width: 440px;
525
+ background: var(--bg-elevated);
526
+ border-radius: var(--radius-2xl);
527
+ box-shadow: var(--shadow-xl);
528
+ padding: var(--space-8);
529
  }
 
530
  .auth-header {
531
+ text-align: center;
532
+ margin-bottom: var(--space-8);
533
  }
 
534
  .auth-logo {
535
+ width: 64px;
536
+ height: 64px;
537
+ margin: 0 auto var(--space-4);
538
+ background: var(--primary);
539
+ color: white;
540
+ border-radius: var(--radius-xl);
541
+ display: flex;
542
+ align-items: center;
543
+ justify-content: center;
544
+ font-size: 1.75rem;
545
+ box-shadow: var(--shadow-lg);
546
  }
 
547
  .auth-title {
548
+ font-size: 1.75rem;
549
+ font-weight: 700;
550
+ margin-bottom: var(--space-1);
551
+ color: var(--text);
552
  }
 
553
  .auth-subtitle {
554
+ font-size: 0.875rem;
555
+ color: var(--text-secondary);
556
  }
 
557
  .auth-tabs {
558
+ display: flex;
559
+ gap: var(--space-2);
560
+ margin-bottom: var(--space-6);
561
+ background: var(--bg-tertiary);
562
+ padding: var(--space-1);
563
+ border-radius: var(--radius-md);
564
  }
 
565
  .auth-tab {
566
+ flex: 1;
567
+ display: flex;
568
+ align-items: center;
569
+ justify-content: center;
570
+ gap: var(--space-2);
571
+ padding: var(--space-2) var(--space-4);
572
+ font-size: 0.875rem;
573
+ font-weight: 500;
574
+ color: var(--text-secondary);
575
+ background: transparent;
576
+ border: none;
577
+ border-radius: var(--radius-sm);
578
+ cursor: pointer;
579
+ transition: all var(--transition-fast);
580
  }
 
581
  .auth-tab.active {
582
+ background: var(--bg-elevated);
583
+ color: var(--text);
584
+ box-shadow: var(--shadow-sm);
585
  }
 
586
  .auth-form {
587
+ display: none;
588
  }
 
589
  .auth-form.active {
590
+ display: block;
591
  }
 
592
  .auth-loading {
593
+ display: flex;
594
+ align-items: center;
595
+ justify-content: center;
596
+ gap: var(--space-2);
597
+ margin-top: var(--space-4);
598
+ color: var(--text-secondary);
 
 
 
 
599
  }
600
+ .auth-loading.hidden { display: none; }
601
 
602
  /* ========== CHAT HEADER ========== */
603
  .chat-header {
604
+ display: flex;
605
+ align-items: center;
606
+ justify-content: space-between;
607
+ padding: 0 var(--space-4);
608
+ height: var(--header-height);
609
+ background: var(--header-bg);
610
+ border-bottom: 1px solid var(--header-border);
611
+ flex-shrink: 0;
612
+ z-index: 10;
613
  }
 
614
  .header-section {
615
+ display: flex;
616
+ align-items: center;
617
+ gap: var(--space-3);
618
  }
 
619
  .header-avatar-img {
620
+ width: 40px;
621
+ height: 40px;
622
+ border-radius: var(--radius-full);
623
+ object-fit: cover;
624
+ border: 2px solid var(--border);
625
  }
 
626
  .header-avatar-img.hidden,
627
  #header-avatar-placeholder.hidden {
628
+ display: none;
629
  }
 
630
  .header-info {
631
+ display: flex;
632
+ flex-direction: column;
633
  }
 
634
  .header-name {
635
+ font-size: 1rem;
636
+ font-weight: 600;
637
+ line-height: 1.3;
638
+ color: var(--text);
639
  }
 
640
  .header-status {
641
+ font-size: 0.75rem;
642
+ color: var(--text-secondary);
643
+ display: flex;
644
+ align-items: center;
645
+ gap: var(--space-1);
646
  }
 
647
  .status-dot {
648
+ width: 8px;
649
+ height: 8px;
650
+ border-radius: 50%;
651
+ background: var(--text-tertiary);
 
 
 
 
652
  }
653
+ .status-dot.online { background: var(--success); }
654
 
655
  /* Connection Status */
656
  .connection-status {
657
+ height: 28px;
658
+ padding: 0 var(--space-4);
659
+ background: var(--bg-secondary);
660
+ border-bottom: 1px solid var(--border-light);
661
+ display: flex;
662
+ align-items: center;
663
+ gap: var(--space-2);
664
+ font-size: 0.75rem;
665
+ color: var(--text-secondary);
666
+ }
667
+ .connection-status.connected { color: var(--success); }
668
+ .connection-status.reconnecting { color: var(--warning); }
669
+ .connection-status.disconnected { color: var(--error); }
 
 
 
 
 
 
 
 
 
 
 
 
 
670
 
671
  /* ========== MESSAGES CONTAINER ========== */
672
  .messages-container {
673
+ flex: 1;
674
+ overflow: hidden;
675
+ position: relative;
676
+ background: var(--bg);
677
  }
 
678
  .messages-scroll {
679
+ height: 100%;
680
+ overflow-y: auto;
681
+ padding: var(--space-4);
682
+ scroll-behavior: smooth;
683
  }
 
684
  .load-more {
685
+ text-align: center;
686
+ margin-bottom: var(--space-4);
687
  }
 
688
  .load-more .btn {
689
+ font-size: 0.8125rem;
690
  }
 
691
  .messages-list {
692
+ display: flex;
693
+ flex-direction: column;
694
+ gap: var(--space-2);
695
+ min-height: 100%;
696
  }
 
697
  .empty-state {
698
+ display: flex;
699
+ flex-direction: column;
700
+ align-items: center;
701
+ justify-content: center;
702
+ padding: var(--space-12) var(--space-4);
703
+ text-align: center;
704
+ color: var(--text-secondary);
705
+ opacity: 0.7;
706
+ height: 100%;
707
  }
 
708
  .empty-icon {
709
+ font-size: 3rem;
710
+ margin-bottom: var(--space-4);
711
+ color: var(--text-tertiary);
712
  }
 
713
  .empty-state h3 {
714
+ margin-bottom: var(--space-1);
715
+ font-size: 1.125rem;
716
+ color: var(--text);
717
  }
 
718
  .empty-state p {
719
+ color: var(--text-secondary);
720
  }
721
 
 
722
  .scroll-bottom-btn {
723
+ position: absolute;
724
+ bottom: var(--space-4);
725
+ right: var(--space-4);
726
+ width: 36px;
727
+ height: 36px;
728
+ background: var(--bg-elevated);
729
+ border: 1px solid var(--border);
730
+ border-radius: var(--radius-full);
731
+ box-shadow: var(--shadow-md);
732
+ display: flex;
733
+ align-items: center;
734
+ justify-content: center;
735
+ cursor: pointer;
736
+ transition: all var(--transition-fast);
737
+ z-index: 5;
738
+ color: var(--text-secondary);
739
  }
 
740
  .scroll-bottom-btn:hover {
741
+ background: var(--bg-tertiary);
742
+ transform: scale(1.05);
743
  }
744
 
745
  /* ========== MESSAGE BUBBLES ========== */
746
  .message-wrapper {
747
+ display: flex;
748
+ flex-direction: column;
749
+ animation: messageSlide 0.3s ease;
 
 
 
 
750
  }
751
+ .message-wrapper.self { align-items: flex-end; }
752
+ .message-wrapper.other { align-items: flex-start; }
 
 
 
753
  .message-sender {
754
+ font-size: 0.75rem;
755
+ font-weight: 500;
756
+ margin-bottom: var(--space-1);
757
+ color: var(--primary);
758
+ padding: 0 var(--space-3);
759
  }
 
760
  .message-bubble {
761
+ max-width: 75%;
762
+ padding: 0.625rem 1rem;
763
+ border-radius: var(--radius-lg);
764
+ word-wrap: break-word;
765
+ overflow-wrap: break-word;
766
+ white-space: pre-wrap;
767
+ line-height: 1.5;
768
+ position: relative;
769
  }
 
770
  .message-self .message-bubble {
771
+ background: var(--bubble-self);
772
+ color: var(--bubble-self-text);
773
+ border-bottom-right-radius: var(--radius-sm);
 
774
  }
 
775
  .message-other .message-bubble {
776
+ background: var(--bubble-other);
777
+ color: var(--bubble-other-text);
778
+ border-bottom-left-radius: var(--radius-sm);
 
779
  }
 
780
  .message-bubble.deleted {
781
+ opacity: 0.6;
782
+ font-style: italic;
783
+ color: var(--text-secondary);
784
  }
 
785
  .message-text {
786
+ font-size: 0.9375rem;
787
  }
 
788
  .message-meta {
789
+ display: flex;
790
+ align-items: center;
791
+ gap: var(--space-2);
792
+ margin-top: var(--space-1);
793
+ font-size: 0.6875rem;
794
+ }
795
+ .message-self .message-meta { justify-content: flex-end; opacity: 0.9; }
796
+ .message-other .message-meta { color: var(--text-tertiary); }
797
+ .message-time { white-space: nowrap; }
798
+ .message-status { display: inline-flex; align-items: center; gap: 2px; }
799
+ .message-status .fa-check { font-size: 0.625rem; }
800
+ .message-status.read { color: var(--primary); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
801
  .message-actions {
802
+ display: flex;
803
+ gap: 2px;
804
+ margin-top: var(--space-1);
805
+ opacity: 0;
806
+ transition: opacity var(--transition-fast);
807
  }
808
+ .message-wrapper:hover .message-actions { opacity: 1; }
 
 
 
 
809
  .message-actions button {
810
+ width: 28px;
811
+ height: 28px;
812
+ background: transparent;
813
+ border: none;
814
+ border-radius: var(--radius-sm);
815
+ color: inherit;
816
+ cursor: pointer;
817
+ font-size: 0.75rem;
818
+ transition: all var(--transition-fast);
819
+ display: flex;
820
+ align-items: center;
821
+ justify-content: center;
822
+ }
823
+ .message-other .message-actions button { color: var(--text-secondary); }
824
+ .message-other .message-actions button:hover { background: var(--bg-tertiary); color: var(--text); }
825
+ .message-self .message-actions button:hover { background: rgba(255,255,255,0.2); }
 
 
 
 
 
 
 
 
 
 
826
 
827
  /* Reply Indicator */
828
  .reply-indicator {
829
+ display: flex;
830
+ align-items: center;
831
+ gap: var(--space-2);
832
+ padding: var(--space-1) var(--space-2);
833
+ margin-bottom: var(--space-2);
834
+ font-size: 0.75rem;
835
+ background: rgba(0,0,0,0.05);
836
+ border-radius: var(--radius-sm);
837
+ border-left: 3px solid var(--primary);
838
+ color: var(--text-secondary);
839
  }
840
+ [data-theme="dark"] .reply-indicator {
841
+ background: rgba(255,255,255,0.05);
 
842
  }
843
 
844
  /* Attachments */
845
+ .attachment { margin-top: var(--space-2); border-radius: var(--radius-md); overflow: hidden; }
 
 
 
 
 
846
  .attachment img {
847
+ max-width: 100%;
848
+ max-height: 300px;
849
+ object-fit: cover;
850
+ border-radius: var(--radius-md);
851
+ cursor: pointer;
852
+ display: block;
853
  }
 
854
  .attachment video {
855
+ max-width: 100%;
856
+ max-height: 300px;
857
+ border-radius: var(--radius-md);
 
 
 
 
858
  }
859
+ .attachment audio { width: 100%; }
860
  .attachment-file {
861
+ display: flex;
862
+ align-items: center;
863
+ gap: var(--space-2);
864
+ padding: var(--space-2) var(--space-3);
865
+ background: var(--bg-secondary);
866
+ border-radius: var(--radius-md);
867
+ cursor: pointer;
868
+ transition: all var(--transition-fast);
869
+ color: var(--text);
870
+ }
871
+ .attachment-file:hover { background: var(--bg-tertiary); }
872
+ .attachment-file .fa-file { font-size: 1.5rem; color: var(--primary); }
873
+ .file-info { flex: 1; min-width: 0; }
 
 
 
 
 
 
 
 
 
 
 
874
  .file-name {
875
+ font-size: 0.875rem;
876
+ font-weight: 500;
877
+ white-space: nowrap;
878
+ overflow: hidden;
879
+ text-overflow: ellipsis;
 
 
 
 
 
 
 
 
 
 
 
 
880
  }
881
+ .file-size { font-size: 0.75rem; color: var(--text-tertiary); }
882
+ .edited-label { font-size: 0.6875rem; font-style: italic; opacity: 0.7; }
883
 
884
  @keyframes messageSlide {
885
+ from { opacity: 0; transform: translateY(10px); }
886
+ to { opacity: 1; transform: translateY(0); }
 
 
 
 
 
 
887
  }
888
 
889
  /* ========== TYPING INDICATOR ========== */
890
  .typing-indicator {
891
+ padding: var(--space-2) var(--space-4);
892
+ background: var(--bg-secondary);
893
+ border-top: 1px solid var(--border-light);
894
+ display: flex;
895
+ align-items: center;
896
+ gap: var(--space-2);
897
+ height: 36px;
898
+ flex-shrink: 0;
899
+ color: var(--text-secondary);
900
+ }
901
+ .typing-dots { display: flex; gap: 3px; }
 
 
 
 
902
  .typing-dot {
903
+ width: 6px;
904
+ height: 6px;
905
+ border-radius: 50%;
906
+ background: var(--text-tertiary);
907
+ animation: typingBounce 1.4s infinite ease-in-out both;
908
  }
 
909
  .typing-dot:nth-child(1) { animation-delay: -0.32s; }
910
  .typing-dot:nth-child(2) { animation-delay: -0.16s; }
911
+ @keyframes typingBounce { 0%, 80%, 100% { transform: scale(0); } 40% { transform: scale(1); } }
912
+ .typing-text { font-size: 0.8125rem; }
 
 
 
 
 
 
 
 
913
 
914
  /* ========== REPLY PREVIEW ========== */
915
  .reply-preview {
916
+ flex-shrink: 0;
917
+ border-top: 1px solid var(--border-light);
918
  }
 
919
  .reply-bar {
920
+ display: flex;
921
+ align-items: center;
922
+ gap: var(--space-3);
923
+ padding: var(--space-2) var(--space-4);
924
+ background: var(--bg-secondary);
925
+ color: var(--text);
926
+ }
927
+ .reply-icon { color: var(--text-secondary); flex-shrink: 0; }
928
+ .reply-content { flex: 1; min-width: 0; }
929
+ .reply-label { font-size: 0.75rem; font-weight: 600; color: var(--primary); }
 
 
 
 
 
 
 
 
 
 
 
 
 
930
  .reply-text {
931
+ font-size: 0.8125rem;
932
+ color: var(--text-secondary);
933
+ display: block;
934
+ overflow: hidden;
935
+ text-overflow: ellipsis;
936
+ white-space: nowrap;
937
  }
938
 
939
  /* ========== COMPOSE AREA ========== */
940
  .compose-area {
941
+ flex-shrink: 0;
942
+ border-top: 1px solid var(--border);
943
+ background: var(--bg-elevated);
944
  }
 
945
  .compose-form {
946
+ display: flex;
947
+ align-items: flex-end;
948
+ padding: var(--space-2) var(--space-3);
949
+ gap: var(--space-2);
950
  }
 
951
  .compose-tools {
952
+ display: flex;
953
+ flex-direction: column;
954
+ gap: 2px;
955
+ padding-bottom: var(--space-1);
956
  }
957
+ .input-area { flex: 1; }
 
 
 
 
958
  .message-input {
959
+ width: 100%;
960
+ resize: none;
961
+ padding: 0.625rem 1rem;
962
+ font-size: 0.9375rem;
963
+ font-family: inherit;
964
+ color: var(--input-text);
965
+ background: var(--input-bg);
966
+ border: 1px solid var(--input-border);
967
+ border-radius: var(--radius-xl);
968
+ outline: none;
969
+ min-height: 40px;
970
+ max-height: 120px;
971
+ line-height: 1.5;
972
+ transition: all var(--transition-fast);
973
+ overflow-y: auto;
974
  }
 
975
  .message-input:focus {
976
+ border-color: var(--border-focus);
977
+ box-shadow: 0 0 0 3px var(--primary-light);
 
 
 
 
978
  }
979
+ .message-input::placeholder { color: var(--input-placeholder); }
980
 
981
  .upload-preview {
982
+ display: flex;
983
+ align-items: center;
984
+ justify-content: space-between;
985
+ padding: var(--space-2) var(--space-4);
986
+ background: var(--bg-secondary);
987
+ border-bottom: 1px solid var(--border-light);
988
+ color: var(--text);
989
  }
 
990
  .upload-info {
991
+ display: flex;
992
+ align-items: center;
993
+ gap: var(--space-2);
994
+ font-size: 0.8125rem;
995
  }
 
996
  .upload-progress {
997
+ padding: var(--space-2) var(--space-4);
998
+ background: var(--bg-secondary);
999
+ display: flex;
1000
+ align-items: center;
1001
+ gap: var(--space-3);
1002
+ color: var(--text);
1003
  }
 
1004
  .progress-track {
1005
+ flex: 1;
1006
+ height: 4px;
1007
+ background: var(--border);
1008
+ border-radius: var(--radius-full);
1009
+ overflow: hidden;
1010
  }
 
1011
  .progress-fill {
1012
+ height: 100%;
1013
+ background: var(--primary);
1014
+ border-radius: var(--radius-full);
1015
+ transition: width var(--transition);
1016
  }
 
1017
  .progress-text {
1018
+ font-size: 0.75rem;
1019
+ font-weight: 500;
1020
+ color: var(--text-secondary);
1021
+ min-width: 36px;
1022
  }
1023
 
1024
  /* ========== MODALS ========== */
1025
  .modal {
1026
+ position: fixed;
1027
+ inset: 0;
1028
+ z-index: 100;
1029
+ display: flex;
1030
+ align-items: center;
1031
+ justify-content: center;
1032
+ padding: var(--space-4);
1033
+ visibility: hidden;
1034
+ opacity: 0;
1035
+ transition: all var(--transition);
1036
+ }
1037
+ .modal:not(.hidden) { visibility: visible; opacity: 1; }
 
 
 
 
 
1038
  .modal-backdrop {
1039
+ position: absolute;
1040
+ inset: 0;
1041
+ background: rgba(0,0,0,0.5);
1042
+ backdrop-filter: blur(4px);
1043
  }
 
1044
  .modal-container {
1045
+ position: relative;
1046
+ width: 100%;
1047
+ max-width: 520px;
1048
+ max-height: 90vh;
1049
+ background: var(--bg-elevated);
1050
+ border-radius: var(--radius-xl);
1051
+ box-shadow: var(--shadow-xl);
1052
+ overflow: hidden;
1053
+ display: flex;
1054
+ flex-direction: column;
1055
+ color: var(--text);
1056
+ }
1057
+ .modal-sm { max-width: 400px; }
 
 
 
1058
  .modal-header {
1059
+ display: flex;
1060
+ align-items: center;
1061
+ justify-content: space-between;
1062
+ padding: var(--space-4) var(--space-6);
1063
+ border-bottom: 1px solid var(--border);
1064
  }
 
1065
  .modal-header h2 {
1066
+ font-size: 1.125rem;
1067
+ font-weight: 600;
1068
+ color: var(--text);
 
 
 
 
1069
  }
1070
+ .modal-header h2 i { margin-right: var(--space-2); color: var(--primary); }
1071
  .modal-body {
1072
+ padding: var(--space-6);
1073
+ overflow-y: auto;
1074
+ flex: 1;
1075
  }
 
1076
  .modal-footer {
1077
+ padding: var(--space-4) var(--space-6);
1078
+ border-top: 1px solid var(--border);
1079
+ display: flex;
1080
+ justify-content: flex-end;
1081
+ gap: var(--space-2);
1082
+ background: var(--bg-secondary);
1083
  }
1084
 
1085
  /* Settings Styles */
1086
  .settings-section {
1087
+ margin-bottom: var(--space-8);
 
 
 
 
1088
  }
1089
+ .settings-section:last-child { margin-bottom: 0; }
1090
  .settings-section h3 {
1091
+ font-size: 0.75rem;
1092
+ font-weight: 600;
1093
+ text-transform: uppercase;
1094
+ letter-spacing: 0.05em;
1095
+ color: var(--text-secondary);
1096
+ margin-bottom: var(--space-4);
1097
+ padding-bottom: var(--space-2);
1098
+ border-bottom: 1px solid var(--border-light);
1099
+ }
1100
+ .settings-row { margin-bottom: var(--space-4); }
 
 
 
 
1101
  .avatar-section {
1102
+ display: flex;
1103
+ align-items: center;
1104
+ gap: var(--space-4);
1105
+ margin-bottom: var(--space-4);
1106
  }
 
1107
  .settings-avatar {
1108
+ width: 72px;
1109
+ height: 72px;
1110
+ border-radius: var(--radius-full);
1111
+ background: var(--bg-tertiary);
1112
+ display: flex;
1113
+ align-items: center;
1114
+ justify-content: center;
1115
+ font-size: 2rem;
1116
+ color: var(--text-secondary);
1117
+ overflow: hidden;
1118
  }
 
1119
  .settings-avatar-img {
1120
+ width: 72px;
1121
+ height: 72px;
1122
+ border-radius: var(--radius-full);
1123
+ object-fit: cover;
1124
  }
 
1125
  .theme-selector {
1126
+ display: grid;
1127
+ grid-template-columns: repeat(3, 1fr);
1128
+ gap: var(--space-3);
1129
+ margin-top: var(--space-2);
1130
  }
 
1131
  .theme-option {
1132
+ display: flex;
1133
+ flex-direction: column;
1134
+ align-items: center;
1135
+ gap: var(--space-2);
1136
+ padding: var(--space-3);
1137
+ background: var(--bg-secondary);
1138
+ border: 2px solid var(--border);
1139
+ border-radius: var(--radius-md);
1140
+ cursor: pointer;
1141
+ transition: all var(--transition-fast);
1142
+ font-size: 0.75rem;
1143
+ font-weight: 500;
1144
+ text-align: center;
1145
+ color: var(--text);
1146
  }
 
1147
  .theme-option.active {
1148
+ border-color: var(--primary);
1149
+ background: var(--primary-light);
1150
  }
 
1151
  .theme-preview {
1152
+ width: 60px;
1153
+ height: 40px;
1154
+ border-radius: var(--radius-sm);
1155
+ overflow: hidden;
1156
+ border: 1px solid var(--border);
1157
+ }
1158
+ .theme-preview-header { height: 8px; background: var(--bg-secondary); }
1159
+ .theme-preview-body { padding: 4px; display: flex; flex-direction: column; gap: 2px; }
1160
+ .theme-preview-message { height: 6px; border-radius: 3px; width: 70%; }
1161
+ .theme-preview-message.self { background: var(--primary); align-self: flex-end; }
1162
+ .theme-preview-message.other { background: var(--bg-tertiary); }
1163
+ .theme-preview-light { background: #FFFFFF; }
1164
+ .theme-preview-dark { background: #1F2937; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1165
  .theme-preview-light .theme-preview-header { background: #F9FAFB; }
1166
  .theme-preview-dark .theme-preview-header { background: #111827; }
 
1167
  .theme-preview-light .theme-preview-message.other { background: #F3F4F6; }
1168
  .theme-preview-dark .theme-preview-message.other { background: #374151; }
1169
 
1170
  .custom-theme-section {
1171
+ margin-top: var(--space-4);
1172
+ padding: var(--space-4);
1173
+ background: var(--bg-secondary);
1174
+ border-radius: var(--radius-md);
1175
+ border: 1px solid var(--border);
1176
  }
 
1177
  .color-picker-row {
1178
+ display: grid;
1179
+ grid-template-columns: repeat(3, 1fr);
1180
+ gap: var(--space-4);
1181
  }
 
1182
  .color-picker-group label {
1183
+ display: block;
1184
+ font-size: 0.75rem;
1185
+ font-weight: 500;
1186
+ margin-bottom: var(--space-2);
1187
+ color: var(--text);
1188
  }
 
1189
  .color-input-wrapper {
1190
+ display: flex;
1191
+ align-items: center;
1192
+ gap: var(--space-2);
1193
  }
 
1194
  .color-input-wrapper input[type="color"] {
1195
+ width: 36px;
1196
+ height: 36px;
1197
+ border: 1px solid var(--border);
1198
+ border-radius: var(--radius-sm);
1199
+ padding: 2px;
1200
+ cursor: pointer;
1201
+ background: none;
1202
  }
 
1203
  .color-hex {
1204
+ font-size: 0.75rem;
1205
+ font-family: var(--font-mono);
1206
+ color: var(--text-secondary);
1207
  }
 
1208
  .about-info {
1209
+ display: flex;
1210
+ flex-direction: column;
1211
+ gap: var(--space-3);
1212
  }
 
1213
  .about-row {
1214
+ display: flex;
1215
+ justify-content: space-between;
1216
+ align-items: center;
1217
+ padding: var(--space-2) 0;
1218
+ border-bottom: 1px solid var(--border-light);
1219
+ font-size: 0.875rem;
1220
+ color: var(--text);
 
 
 
1221
  }
1222
+ .about-row:last-child { border-bottom: none; }
1223
 
1224
  /* Online Users Modal */
1225
  .online-users-list {
1226
+ max-height: 300px;
1227
+ overflow-y: auto;
1228
  }
 
1229
  .loading-state {
1230
+ display: flex;
1231
+ align-items: center;
1232
+ justify-content: center;
1233
+ gap: var(--space-2);
1234
+ padding: var(--space-8);
1235
+ color: var(--text-secondary);
1236
  }
 
1237
  .user-item {
1238
+ display: flex;
1239
+ align-items: center;
1240
+ gap: var(--space-3);
1241
+ padding: var(--space-2) var(--space-4);
1242
+ transition: background var(--transition-fast);
1243
+ color: var(--text);
1244
+ }
1245
+ .user-item:hover { background: var(--bg-secondary); }
 
 
 
1246
  .user-avatar {
1247
+ width: 40px;
1248
+ height: 40px;
1249
+ border-radius: var(--radius-full);
1250
+ background: var(--bg-tertiary);
1251
+ display: flex;
1252
+ align-items: center;
1253
+ justify-content: center;
1254
+ color: var(--text-secondary);
1255
+ font-size: 1rem;
1256
+ overflow: hidden;
1257
+ }
1258
+ .user-avatar img { width: 100%; height: 100%; object-fit: cover; }
1259
+ .user-info { flex: 1; }
1260
+ .user-name { font-weight: 500; font-size: 0.875rem; }
1261
+ .user-status-text { font-size: 0.75rem; color: var(--text-secondary); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1262
 
1263
  /* Emoji Picker */
1264
  .emoji-picker {
1265
+ position: fixed;
1266
+ bottom: 100px;
1267
+ left: 50%;
1268
+ transform: translateX(-50%);
1269
+ z-index: 50;
1270
+ background: var(--bg-elevated);
1271
+ border: 1px solid var(--border);
1272
+ border-radius: var(--radius-lg);
1273
+ box-shadow: var(--shadow-xl);
1274
+ width: 320px;
1275
+ max-height: 350px;
1276
+ overflow: hidden;
1277
  }
 
1278
  .emoji-header {
1279
+ border-bottom: 1px solid var(--border);
1280
+ padding: var(--space-2);
 
 
 
 
 
1281
  }
1282
+ .emoji-categories { display: flex; gap: 2px; }
1283
  .emoji-cat {
1284
+ width: 36px;
1285
+ height: 36px;
1286
+ border: none;
1287
+ background: transparent;
1288
+ border-radius: var(--radius-sm);
1289
+ cursor: pointer;
1290
+ color: var(--text-secondary);
1291
+ font-size: 0.875rem;
1292
+ transition: all var(--transition-fast);
1293
  }
 
1294
  .emoji-cat.active {
1295
+ background: var(--primary-light);
1296
+ color: var(--primary);
 
 
 
 
1297
  }
1298
+ .emoji-cat:hover { background: var(--bg-tertiary); }
1299
  .emoji-grid {
1300
+ padding: var(--space-2);
1301
+ display: grid;
1302
+ grid-template-columns: repeat(8, 1fr);
1303
+ gap: 2px;
1304
+ max-height: 280px;
1305
+ overflow-y: auto;
1306
  }
 
1307
  .emoji-item {
1308
+ width: 36px;
1309
+ height: 36px;
1310
+ display: flex;
1311
+ align-items: center;
1312
+ justify-content: center;
1313
+ font-size: 1.25rem;
1314
+ cursor: pointer;
1315
+ border-radius: var(--radius-sm);
1316
+ border: none;
1317
+ background: transparent;
1318
+ transition: background var(--transition-fast);
1319
+ }
1320
+ .emoji-item:hover { background: var(--bg-tertiary); }
 
 
 
1321
 
1322
  /* Toast Notifications */
1323
  .toast-container {
1324
+ position: fixed;
1325
+ top: var(--space-4);
1326
+ right: var(--space-4);
1327
+ z-index: 200;
1328
+ display: flex;
1329
+ flex-direction: column;
1330
+ gap: var(--space-2);
1331
+ max-width: 360px;
1332
  }
 
1333
  .toast {
1334
+ padding: var(--space-3) var(--space-4);
1335
+ background: var(--bg-elevated);
1336
+ border: 1px solid var(--border);
1337
+ border-radius: var(--radius-md);
1338
+ box-shadow: var(--shadow-md);
1339
+ display: flex;
1340
+ align-items: center;
1341
+ gap: var(--space-3);
1342
+ animation: toastSlide 0.3s ease;
1343
+ font-size: 0.875rem;
1344
+ color: var(--text);
1345
+ }
1346
+ .toast.toast-success { border-left: 3px solid var(--success); }
1347
+ .toast.toast-error { border-left: 3px solid var(--error); }
1348
+ .toast.toast-warning { border-left: 3px solid var(--warning); }
1349
+ .toast.toast-info { border-left: 3px solid var(--info); }
1350
+ @keyframes toastSlide { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1351
 
1352
  /* ========== UTILITY ========== */
1353
+ .hidden { display: none !important; }
 
 
1354
 
1355
  /* ========== RESPONSIVE ========== */
1356
  @media (max-width: 640px) {
1357
+ .auth-container { padding: var(--space-6); border-radius: var(--radius-xl); }
1358
+ .message-bubble { max-width: 85%; }
1359
+ .compose-form { padding: var(--space-1) var(--space-2); }
1360
+ .modal { padding: 0; align-items: flex-end; }
1361
+ .modal-container { max-height: 85vh; border-radius: var(--radius-xl) var(--radius-xl) 0 0; }
1362
+ .color-picker-row { grid-template-columns: 1fr; }
1363
+ .theme-selector { grid-template-columns: 1fr; }
1364
+ .emoji-picker { left: 8px; right: 8px; transform: none; width: auto; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1365
  }
1366
 
1367
  @media (min-width: 768px) {
1368
+ .message-bubble { max-width: 65%; }
1369
+ .compose-form { padding: var(--space-2) var(--space-4); }
 
 
 
 
 
1370
  }
1371
 
1372
  @media (min-width: 1024px) {
1373
+ .message-bubble { max-width: 55%; }
 
 
1374
  }