smodusermc commited on
Commit
d7f1272
·
verified ·
1 Parent(s): 656c709

Update static/style.css

Browse files
Files changed (1) hide show
  1. static/style.css +1258 -520
static/style.css CHANGED
@@ -1,108 +1,140 @@
1
- /* =============================================
2
- InfinityChat - Professional Design System
3
- ============================================= */
 
4
 
5
- /* CSS Variables - Theme System */
6
  :root {
7
- /* Base Colors */
8
- --color-primary: #2563EB;
9
- --color-primary-dark: #1D4ED8;
10
- --color-primary-light: #DBEAFE;
 
11
 
12
- --color-bg: #FFFFFF;
13
- --color-bg-secondary: #F9FAFB;
14
- --color-bg-tertiary: #F3F4F6;
 
 
15
 
16
- --color-text: #111827;
17
- --color-text-secondary: #6B7280;
18
- --color-text-tertiary: #9CA3AF;
 
 
19
 
20
- --color-border: #E5E7EB;
21
- --color-border-light: #F3F4F6;
 
 
22
 
23
- /* Bubble Colors */
24
- --bubble-self: var(--color-primary);
25
  --bubble-self-text: #FFFFFF;
26
- --bubble-other: var(--color-bg-tertiary);
27
- --bubble-other-text: var(--color-text);
28
 
29
  /* Header */
30
- --header-bg: var(--color-bg);
31
- --header-border: var(--color-border);
 
32
 
33
  /* Input */
34
- --input-bg: var(--color-bg-tertiary);
35
- --input-border: var(--color-border);
36
- --input-focus: var(--color-primary);
 
37
 
38
- /* Shadows */
39
- --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
40
- --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07);
41
- --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);
42
-
43
- /* Typography */
44
- --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
45
- --font-mono: 'SF Mono', 'Fira Code', monospace;
46
 
47
- /* Spacing */
48
- --space-xs: 0.25rem;
49
- --space-sm: 0.5rem;
50
- --space-md: 1rem;
51
- --space-lg: 1.5rem;
52
- --space-xl: 2rem;
53
 
54
  /* Border Radius */
 
55
  --radius-sm: 6px;
56
  --radius-md: 8px;
57
  --radius-lg: 12px;
58
  --radius-xl: 16px;
 
59
  --radius-full: 9999px;
60
 
61
  /* Transitions */
62
- --transition-fast: 150ms ease;
63
- --transition-normal: 250ms ease;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  }
65
 
66
- /* Dark Theme */
67
  [data-theme="dark"] {
68
- --color-primary: #60A5FA;
69
- --color-primary-dark: #3B82F6;
70
- --color-primary-light: #1E3A5F;
 
71
 
72
- --color-bg: #111827;
73
- --color-bg-secondary: #1F2937;
74
- --color-bg-tertiary: #374151;
 
75
 
76
- --color-text: #F9FAFB;
77
- --color-text-secondary: #9CA3AF;
78
- --color-text-tertiary: #6B7280;
 
79
 
80
- --color-border: #374151;
81
- --color-border-light: #1F2937;
82
 
83
- --bubble-self: var(--color-primary);
84
  --bubble-self-text: #111827;
85
- --bubble-other: var(--color-bg-tertiary);
86
- --bubble-other-text: var(--color-text);
87
 
88
- --header-bg: var(--color-bg-secondary);
89
- --header-border: var(--color-border);
 
90
 
91
- --input-bg: var(--color-bg-tertiary);
92
- --input-border: var(--color-border);
93
-
94
- --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
95
  --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.4);
 
 
96
  }
97
 
98
- /* Custom Theme */
99
  [data-theme="custom"] {
100
- /* Values set by JavaScript */
101
  }
102
 
103
- /* =============================================
104
- Reset & Base Styles
105
- ============================================= */
106
  *, *::before, *::after {
107
  margin: 0;
108
  padding: 0;
@@ -112,171 +144,521 @@
112
  html {
113
  font-size: 16px;
114
  -webkit-text-size-adjust: 100%;
 
 
 
115
  }
116
 
117
  body {
118
- font-family: var(--font-sans);
119
- background: var(--color-bg);
120
- color: var(--color-text);
 
 
 
121
  height: 100vh;
 
122
  width: 100vw;
123
- overflow: hidden;
124
- line-height: 1.5;
125
- -webkit-font-smoothing: antialiased;
126
  }
127
 
128
- /* =============================================
129
- Buttons
130
- ============================================= */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
  .btn {
132
  display: inline-flex;
133
  align-items: center;
134
  justify-content: center;
 
135
  padding: 0.625rem 1.25rem;
136
  font-size: 0.875rem;
137
  font-weight: 500;
138
- border: none;
 
139
  border-radius: var(--radius-md);
140
  cursor: pointer;
141
  transition: all var(--transition-fast);
142
  text-decoration: none;
143
- gap: var(--space-sm);
 
 
 
144
  }
145
 
146
  .btn:disabled {
147
- opacity: 0.5;
148
  cursor: not-allowed;
 
 
 
 
 
149
  }
150
 
151
  .btn-primary {
152
- background: var(--color-primary);
153
  color: white;
154
- box-shadow: var(--shadow-sm);
 
155
  }
156
 
157
  .btn-primary:hover:not(:disabled) {
158
- background: var(--color-primary-dark);
159
- box-shadow: var(--shadow-md);
 
160
  transform: translateY(-1px);
161
  }
162
 
163
  .btn-secondary {
164
- background: var(--color-bg-secondary);
165
- color: var(--color-text);
166
- border: 1px solid var(--color-border);
 
167
  }
168
 
169
  .btn-secondary:hover:not(:disabled) {
170
- background: var(--color-bg-tertiary);
 
 
 
 
 
 
 
 
 
 
 
 
171
  }
172
 
173
- /* =============================================
174
- Forms & Inputs
175
- ============================================= */
176
- .input-group {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
  display: flex;
178
- flex-direction: column;
179
- gap: var(--space-xs);
180
- margin-bottom: var(--space-md);
 
 
 
 
 
181
  }
182
 
183
- .input-group label {
 
 
184
  font-size: 0.875rem;
185
  font-weight: 500;
186
- color: var(--color-text);
 
 
 
 
 
 
 
 
 
 
 
187
  }
188
 
189
- .input {
190
  width: 100%;
191
  padding: 0.75rem 1rem;
192
  font-size: 0.9375rem;
193
  font-family: inherit;
194
- color: var(--color-text);
195
  background: var(--input-bg);
196
  border: 1px solid var(--input-border);
197
  border-radius: var(--radius-md);
198
  outline: none;
199
  transition: all var(--transition-fast);
 
200
  }
201
 
202
- .input:focus {
203
- border-color: var(--input-focus);
204
- box-shadow: 0 0 0 3px var(--color-primary-light);
205
  }
206
 
207
- .input::placeholder {
208
- color: var(--color-text-tertiary);
 
209
  }
210
 
211
- select.input {
212
- appearance: none;
213
- background-image: url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1L5 5L9 1' stroke='%236B7280' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
214
- background-repeat: no-repeat;
215
- background-position: right 1rem center;
216
- padding-right: 2.5rem;
 
 
 
 
 
 
 
 
 
217
  cursor: pointer;
 
 
218
  }
219
 
220
- /* =============================================
221
- Auth Screen
222
- ============================================= */
223
- #auth-screen {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
224
  display: flex;
225
  align-items: center;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
226
  justify-content: center;
227
- min-height: 100vh;
228
- background: linear-gradient(135deg, var(--color-bg-secondary) 0%, var(--color-bg) 100%);
229
- padding: var(--space-xl);
230
  }
231
 
232
- .auth-container {
 
 
 
233
  width: 100%;
234
- max-width: 420px;
235
- background: var(--color-bg);
236
- border-radius: var(--radius-xl);
237
- box-shadow: var(--shadow-lg);
238
- padding: var(--space-xl);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
239
  position: relative;
240
  z-index: 1;
 
 
 
 
 
 
241
  }
242
 
243
- .auth-logo {
244
  text-align: center;
245
- margin-bottom: var(--space-xl);
246
  }
247
 
248
- .auth-logo svg {
249
- color: var(--color-primary);
250
- margin-bottom: var(--space-sm);
 
 
 
 
 
 
 
 
 
251
  }
252
 
253
- .auth-logo h1 {
254
  font-size: 1.75rem;
255
  font-weight: 700;
256
- color: var(--color-text);
257
- margin-bottom: var(--space-xs);
258
  }
259
 
260
  .auth-subtitle {
261
  font-size: 0.875rem;
262
- color: var(--color-text-secondary);
263
  }
264
 
265
  .auth-tabs {
266
  display: flex;
267
- gap: var(--space-xs);
268
- margin-bottom: var(--space-xl);
269
- background: var(--color-bg-tertiary);
270
- padding: var(--space-xs);
271
  border-radius: var(--radius-md);
272
  }
273
 
274
  .auth-tab {
275
  flex: 1;
276
- padding: var(--space-sm) var(--space-md);
 
 
 
 
277
  font-size: 0.875rem;
278
  font-weight: 500;
279
- color: var(--color-text-secondary);
280
  background: transparent;
281
  border: none;
282
  border-radius: var(--radius-sm);
@@ -285,8 +667,8 @@ select.input {
285
  }
286
 
287
  .auth-tab.active {
288
- background: var(--color-bg);
289
- color: var(--color-text);
290
  box-shadow: var(--shadow-sm);
291
  }
292
 
@@ -298,280 +680,357 @@ select.input {
298
  display: block;
299
  }
300
 
301
- .auth-form .btn {
302
- width: 100%;
303
- margin-top: var(--space-md);
304
- }
305
-
306
- .error-message {
307
- margin-top: var(--space-md);
308
- padding: var(--space-sm) var(--space-md);
309
- background: #FEF2F2;
310
- color: #DC2626;
311
- border: 1px solid #FCA5A5;
312
- border-radius: var(--radius-md);
313
- font-size: 0.875rem;
314
- display: none;
315
- }
316
-
317
- .error-message:not(:empty) {
318
- display: block;
319
  }
320
 
321
- /* =============================================
322
- Chat Screen
323
- ============================================= */
324
- #chat-screen {
325
  display: none;
326
- height: 100vh;
327
- flex-direction: column;
328
  }
329
 
330
- #chat-screen.active {
331
- display: flex;
332
- }
333
-
334
- /* Header */
335
  .chat-header {
336
  display: flex;
337
  align-items: center;
338
  justify-content: space-between;
339
- padding: var(--space-md) var(--space-lg);
 
340
  background: var(--header-bg);
341
  border-bottom: 1px solid var(--header-border);
342
- min-height: 64px;
343
  flex-shrink: 0;
 
344
  }
345
 
346
- .header-center {
347
- text-align: center;
 
 
348
  }
349
 
350
- .chat-title {
351
- font-size: 1.0625rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
352
  font-weight: 600;
353
  line-height: 1.3;
354
  }
355
 
356
- .online-count {
357
  font-size: 0.75rem;
358
- color: var(--color-text-secondary);
 
 
 
359
  }
360
 
361
- .icon-btn {
362
- display: inline-flex;
363
- align-items: center;
364
- justify-content: center;
365
- width: 40px;
366
- height: 40px;
367
- background: transparent;
368
- border: none;
369
- border-radius: var(--radius-md);
370
- color: var(--color-text-secondary);
371
- cursor: pointer;
372
- transition: all var(--transition-fast);
373
  }
374
 
375
- .icon-btn:hover {
376
- background: var(--color-bg-tertiary);
377
- color: var(--color-text);
378
  }
379
 
380
- /* Typing Indicator */
381
- .typing-indicator {
382
  height: 28px;
 
 
 
383
  display: flex;
384
  align-items: center;
385
- padding: 0 var(--space-lg);
386
- font-size: 0.8125rem;
387
- color: var(--color-text-secondary);
388
- background: var(--color-bg);
389
- border-bottom: 1px solid var(--color-border-light);
390
- flex-shrink: 0;
 
391
  }
392
 
393
- /* Messages Container */
 
 
 
 
 
 
 
 
 
 
 
 
394
  .messages-container {
395
  flex: 1;
 
 
 
 
 
 
 
396
  overflow-y: auto;
397
- padding: var(--space-md);
398
- background: var(--color-bg);
399
- display: flex;
400
- flex-direction: column;
 
 
 
 
 
 
 
401
  }
402
 
403
  .messages-list {
404
  display: flex;
405
  flex-direction: column;
406
- gap: var(--space-xs);
407
- padding-bottom: var(--space-md);
408
  }
409
 
410
- .load-more {
 
 
 
 
 
411
  text-align: center;
412
- padding: var(--space-md);
 
 
413
  }
414
 
415
- .load-more .btn {
416
- font-size: 0.8125rem;
417
- padding: var(--space-sm) var(--space-md);
 
418
  }
419
 
420
- /* Message Bubbles */
421
- .message-bubble {
422
- max-width: 75%;
423
- margin-bottom: var(--space-xs);
424
- animation: messageSlideIn 0.3s ease;
425
  }
426
 
427
- @keyframes messageSlideIn {
428
- from {
429
- opacity: 0;
430
- transform: translateY(8px);
431
- }
432
- to {
433
- opacity: 1;
434
- transform: translateY(0);
435
- }
436
  }
437
 
438
- .message-self {
439
- align-self: flex-end;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
440
  }
441
 
442
- .message-other {
443
- align-self: flex-start;
 
444
  }
445
 
446
- .message-content {
447
- position: relative;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
448
  padding: 0.625rem 1rem;
449
  border-radius: var(--radius-lg);
450
  word-wrap: break-word;
 
451
  white-space: pre-wrap;
 
 
452
  }
453
 
454
- .message-self .message-content {
455
  background: var(--bubble-self);
456
  color: var(--bubble-self-text);
457
  border-bottom-right-radius: var(--radius-sm);
 
458
  }
459
 
460
- .message-other .message-content {
461
  background: var(--bubble-other);
462
  color: var(--bubble-other-text);
463
  border-bottom-left-radius: var(--radius-sm);
 
464
  }
465
 
466
- .message-info {
467
- display: flex;
468
- align-items: center;
469
- gap: var(--space-sm);
470
- margin-bottom: var(--space-xs);
471
- font-size: 0.75rem;
472
  }
473
 
474
- .message-self .message-info {
475
- justify-content: flex-end;
476
  }
477
 
478
- .sender-name {
479
- font-weight: 600;
480
- color: var(--color-primary);
 
 
 
481
  }
482
 
483
- .message-other .sender-name {
484
- color: var(--color-text);
 
 
485
  }
486
 
487
- .timestamp {
488
- color: var(--color-text-tertiary);
489
- font-size: 0.6875rem;
490
  }
491
 
492
- .message-text {
493
- font-size: 0.9375rem;
494
- line-height: 1.5;
495
  }
496
 
497
  .message-status {
498
  display: inline-flex;
499
  align-items: center;
500
- margin-left: var(--space-xs);
501
- font-size: 0.75rem;
502
- color: var(--color-text-tertiary);
 
 
503
  }
504
 
505
  .message-status.read {
506
- color: var(--color-primary);
507
  }
508
 
509
  .message-actions {
510
  display: flex;
511
- gap: var(--space-xs);
512
- margin-top: var(--space-xs);
513
  opacity: 0;
514
  transition: opacity var(--transition-fast);
515
  }
516
 
517
- .message-bubble:hover .message-actions {
518
  opacity: 1;
519
  }
520
 
521
  .message-actions button {
522
- display: inline-flex;
523
- align-items: center;
524
- justify-content: center;
525
  width: 28px;
526
  height: 28px;
527
- background: var(--color-bg-secondary);
528
- border: 1px solid var(--color-border);
529
  border-radius: var(--radius-sm);
530
- color: var(--color-text-secondary);
531
  cursor: pointer;
532
  font-size: 0.75rem;
533
  transition: all var(--transition-fast);
 
 
 
534
  }
535
 
536
- .message-actions button:hover {
537
- background: var(--color-bg-tertiary);
538
- color: var(--color-text);
 
 
 
 
 
 
 
 
539
  }
540
 
541
  /* Reply Indicator */
542
  .reply-indicator {
543
  display: flex;
544
  align-items: center;
545
- gap: var(--space-sm);
546
- padding: var(--space-xs) var(--space-sm);
547
- margin-bottom: var(--space-xs);
548
- font-size: 0.8125rem;
549
- color: var(--color-text-secondary);
550
- background: var(--color-bg-tertiary);
551
  border-radius: var(--radius-sm);
552
- border-left: 3px solid var(--color-primary);
553
  }
554
 
555
- .reply-arrow {
556
- font-size: 0.75rem;
557
- line-height: 1;
558
  }
559
 
560
  /* Attachments */
561
  .attachment {
562
- margin-top: var(--space-sm);
 
 
563
  }
564
 
565
  .attachment img {
566
  max-width: 100%;
567
  max-height: 300px;
 
568
  border-radius: var(--radius-md);
569
  cursor: pointer;
570
- transition: transform var(--transition-fast);
571
- }
572
-
573
- .attachment img:hover {
574
- transform: scale(1.02);
575
  }
576
 
577
  .attachment video {
@@ -582,67 +1041,122 @@ select.input {
582
 
583
  .attachment audio {
584
  width: 100%;
585
- margin-top: var(--space-xs);
586
  }
587
 
588
- .attachment .file-preview {
589
  display: flex;
590
  align-items: center;
591
- gap: var(--space-sm);
592
- padding: var(--space-sm) var(--space-md);
593
- background: var(--color-bg-secondary);
594
- border: 1px solid var(--color-border);
595
  border-radius: var(--radius-md);
596
  cursor: pointer;
597
  transition: all var(--transition-fast);
598
  }
599
 
600
- .attachment .file-preview:hover {
601
- background: var(--color-bg-tertiary);
602
- border-color: var(--color-primary);
603
  }
604
 
605
- .file-icon {
606
- font-size: 1.25rem;
607
- line-height: 1;
 
 
 
 
 
608
  }
609
 
610
  .file-name {
611
  font-size: 0.875rem;
612
- color: var(--color-primary);
613
- text-decoration: underline;
 
 
614
  }
615
 
616
- .edited-label {
617
  font-size: 0.75rem;
 
 
 
 
 
618
  font-style: italic;
619
  opacity: 0.7;
620
- margin-left: var(--space-xs);
621
  }
622
 
623
- .deleted-message {
624
- font-style: italic;
625
- color: var(--color-text-tertiary);
626
- padding: 0.5rem 1rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
627
  }
628
 
629
- /* =============================================
630
- Reply Preview
631
- ============================================= */
632
  .reply-preview {
 
 
 
 
 
633
  display: flex;
634
  align-items: center;
635
- justify-content: space-between;
636
- padding: var(--space-sm) var(--space-lg);
637
- background: var(--color-bg-secondary);
638
- border-top: 1px solid var(--color-border);
 
 
 
639
  flex-shrink: 0;
640
  }
641
 
642
  .reply-content {
643
- display: flex;
644
- flex-direction: column;
645
- gap: var(--space-xs);
646
  flex: 1;
647
  min-width: 0;
648
  }
@@ -650,387 +1164,611 @@ select.input {
650
  .reply-label {
651
  font-size: 0.75rem;
652
  font-weight: 600;
653
- color: var(--color-primary);
654
  }
655
 
656
  .reply-text {
657
  font-size: 0.8125rem;
658
- color: var(--color-text-secondary);
 
659
  overflow: hidden;
660
  text-overflow: ellipsis;
661
- white-space: nowrap;
662
- }
663
-
664
- .cancel-reply {
665
- display: inline-flex;
666
- align-items: center;
667
- justify-content: center;
668
- width: 32px;
669
- height: 32px;
670
- background: transparent;
671
- border: none;
672
- border-radius: var(--radius-sm);
673
- color: var(--color-text-secondary);
674
- cursor: pointer;
675
- flex-shrink: 0;
676
- transition: all var(--transition-fast);
677
- }
678
-
679
- .cancel-reply:hover {
680
- background: var(--color-bg-tertiary);
681
- color: var(--color-text);
682
  }
683
 
684
- /* =============================================
685
- Compose Area
686
- ============================================= */
687
- .compose-container {
688
  flex-shrink: 0;
689
- border-top: 1px solid var(--color-border);
690
- background: var(--color-bg);
691
  }
692
 
693
  .compose-form {
694
  display: flex;
695
  align-items: flex-end;
696
- gap: var(--space-sm);
697
- padding: var(--space-sm) var(--space-md);
698
  }
699
 
700
- .attach-btn {
701
- display: inline-flex;
702
- align-items: center;
703
- justify-content: center;
704
- width: 40px;
705
- height: 40px;
706
- background: transparent;
707
- border: none;
708
- border-radius: var(--radius-full);
709
- color: var(--color-text-secondary);
710
- cursor: pointer;
711
- flex-shrink: 0;
712
- transition: all var(--transition-fast);
713
  }
714
 
715
- .attach-btn:hover {
716
- background: var(--color-bg-tertiary);
717
- color: var(--color-text);
718
  }
719
 
720
  .message-input {
721
- flex: 1;
722
  resize: none;
723
  padding: 0.625rem 1rem;
724
  font-size: 0.9375rem;
725
  font-family: inherit;
726
- color: var(--color-text);
727
  background: var(--input-bg);
728
  border: 1px solid var(--input-border);
729
  border-radius: var(--radius-xl);
730
  outline: none;
731
  min-height: 40px;
732
  max-height: 120px;
733
- transition: all var(--transition-fast);
734
  line-height: 1.5;
 
 
735
  }
736
 
737
  .message-input:focus {
738
- border-color: var(--input-focus);
739
- box-shadow: 0 0 0 3px var(--color-primary-light);
740
  }
741
 
742
  .message-input::placeholder {
743
- color: var(--color-text-tertiary);
744
  }
745
 
746
- .send-btn {
747
- display: inline-flex;
748
  align-items: center;
749
- justify-content: center;
750
- width: 40px;
751
- height: 40px;
752
- background: var(--color-primary);
753
- border: none;
754
- border-radius: var(--radius-full);
755
- color: white;
756
- cursor: pointer;
757
- flex-shrink: 0;
758
- transition: all var(--transition-fast);
759
- box-shadow: var(--shadow-sm);
760
- }
761
-
762
- .send-btn:hover:not(:disabled) {
763
- background: var(--color-primary-dark);
764
- box-shadow: var(--shadow-md);
765
- transform: scale(1.05);
766
  }
767
 
768
- .send-btn:disabled {
769
- opacity: 0.5;
770
- cursor: not-allowed;
 
 
771
  }
772
 
773
- /* Upload Progress */
774
  .upload-progress {
 
 
775
  display: flex;
776
  align-items: center;
777
- gap: var(--space-sm);
778
- padding: var(--space-sm) var(--space-md);
779
- background: var(--color-bg-secondary);
780
- }
781
-
782
- .upload-progress.hidden {
783
- display: none;
784
  }
785
 
786
- .progress-bar {
787
  flex: 1;
788
  height: 4px;
789
- background: var(--color-bg-tertiary);
790
  border-radius: var(--radius-full);
791
  overflow: hidden;
792
  }
793
 
794
  .progress-fill {
795
  height: 100%;
796
- background: var(--color-primary);
797
  border-radius: var(--radius-full);
798
- transition: width var(--transition-normal);
799
  }
800
 
801
- .upload-filename {
802
- font-size: 0.8125rem;
803
- color: var(--color-text-secondary);
804
- white-space: nowrap;
805
- overflow: hidden;
806
- text-overflow: ellipsis;
807
  }
808
 
809
- /* =============================================
810
- Modal
811
- ============================================= */
812
  .modal {
813
  position: fixed;
814
- top: 0;
815
- left: 0;
816
- width: 100%;
817
- height: 100%;
818
  display: flex;
819
  align-items: center;
820
  justify-content: center;
821
- z-index: 1000;
822
- padding: var(--space-md);
 
 
823
  }
824
 
825
- .modal.hidden {
826
- display: none;
 
827
  }
828
 
829
- .modal-overlay {
830
  position: absolute;
831
- top: 0;
832
- left: 0;
833
- width: 100%;
834
- height: 100%;
835
- background: rgba(0, 0, 0, 0.5);
836
  backdrop-filter: blur(4px);
837
  }
838
 
839
- .modal-content {
840
  position: relative;
841
  width: 100%;
842
- max-width: 480px;
843
- max-height: 85vh;
844
- background: var(--color-bg);
845
  border-radius: var(--radius-xl);
846
- box-shadow: var(--shadow-lg);
847
  overflow: hidden;
848
- animation: modalSlideIn 0.2s ease;
 
849
  }
850
 
851
- @keyframes modalSlideIn {
852
- from {
853
- opacity: 0;
854
- transform: scale(0.95) translateY(10px);
855
- }
856
- to {
857
- opacity: 1;
858
- transform: scale(1) translateY(0);
859
- }
860
  }
861
 
862
  .modal-header {
863
  display: flex;
864
  align-items: center;
865
  justify-content: space-between;
866
- padding: var(--space-lg);
867
- border-bottom: 1px solid var(--color-border);
868
  }
869
 
870
  .modal-header h2 {
871
- font-size: 1.25rem;
872
  font-weight: 600;
873
  }
874
 
 
 
 
 
 
875
  .modal-body {
876
- padding: var(--space-lg);
877
  overflow-y: auto;
878
- max-height: calc(85vh - 140px);
879
  }
880
 
881
  .modal-footer {
 
 
882
  display: flex;
883
  justify-content: flex-end;
884
- padding: var(--space-md) var(--space-lg);
885
- border-top: 1px solid var(--color-border);
886
- background: var(--color-bg-secondary);
887
  }
888
 
889
- .setting-section {
890
- margin-bottom: var(--space-xl);
 
891
  }
892
 
893
- .setting-section:last-child {
894
  margin-bottom: 0;
895
  }
896
 
897
- .setting-section h3 {
898
- font-size: 0.875rem;
899
  font-weight: 600;
900
- color: var(--color-text-secondary);
901
  text-transform: uppercase;
902
  letter-spacing: 0.05em;
903
- margin-bottom: var(--space-md);
904
- padding-bottom: var(--space-sm);
905
- border-bottom: 1px solid var(--color-border-light);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
906
  }
907
 
908
- .setting-item {
909
- margin-bottom: var(--space-md);
910
  }
911
 
912
- .setting-item label {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
913
  display: block;
914
- font-size: 0.875rem;
915
  font-weight: 500;
916
- margin-bottom: var(--space-xs);
917
- color: var(--color-text);
918
  }
919
 
920
  .color-input-wrapper {
921
  display: flex;
922
  align-items: center;
923
- gap: var(--space-sm);
924
  }
925
 
926
  .color-input-wrapper input[type="color"] {
927
- width: 40px;
928
- height: 40px;
 
 
929
  padding: 2px;
930
- border: 1px solid var(--color-border);
931
- border-radius: var(--radius-md);
932
  cursor: pointer;
933
  background: none;
934
  }
935
 
936
- .color-input-wrapper input[type="color"]::-webkit-color-swatch-wrapper {
937
- padding: 0;
 
 
938
  }
939
 
940
- .color-input-wrapper input[type="color"]::-webkit-color-swatch {
941
- border: none;
942
- border-radius: var(--radius-sm);
 
943
  }
944
 
945
- .avatar-upload {
946
  display: flex;
 
947
  align-items: center;
948
- gap: var(--space-md);
 
 
949
  }
950
 
951
- .avatar-preview {
952
- width: 64px;
953
- height: 64px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
954
  border-radius: var(--radius-full);
 
 
 
 
 
 
 
 
 
 
 
 
955
  object-fit: cover;
956
- border: 2px solid var(--color-border);
957
  }
958
 
959
- .avatar-preview:not([style*="display: block"]) {
960
- display: none;
961
  }
962
 
963
- .custom-theme {
964
- padding: var(--space-md);
965
- background: var(--color-bg-secondary);
966
- border-radius: var(--radius-md);
967
- margin-top: var(--space-sm);
968
  }
969
 
970
- /* =============================================
971
- Utility Classes
972
- ============================================= */
973
- .hidden {
974
- display: none !important;
975
  }
976
 
977
- .screen {
978
- display: none;
979
- height: 100vh;
 
 
 
 
 
 
 
 
 
 
 
980
  }
981
 
982
- .screen.active {
 
 
 
 
 
983
  display: flex;
 
984
  }
985
 
986
- /* =============================================
987
- Scrollbar Styles
988
- ============================================= */
989
- .messages-container::-webkit-scrollbar {
990
- width: 6px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
991
  }
992
 
993
- .messages-container::-webkit-scrollbar-track {
 
 
 
 
 
 
 
 
 
994
  background: transparent;
 
995
  }
996
 
997
- .messages-container::-webkit-scrollbar-thumb {
998
- background: var(--color-border);
999
- border-radius: var(--radius-full);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1000
  }
1001
 
1002
- .messages-container::-webkit-scrollbar-thumb:hover {
1003
- background: var(--color-text-tertiary);
 
1004
  }
1005
 
1006
- /* =============================================
1007
- Responsive Design
1008
- ============================================= */
1009
  @media (max-width: 640px) {
1010
  .auth-container {
1011
- padding: var(--space-lg);
1012
- border-radius: var(--radius-lg);
1013
- }
1014
-
1015
- .chat-header {
1016
- padding: var(--space-sm) var(--space-md);
1017
  }
1018
 
1019
  .message-bubble {
1020
  max-width: 85%;
1021
  }
1022
 
 
 
 
 
1023
  .modal {
1024
  padding: 0;
 
 
 
 
 
 
 
 
 
 
1025
  }
1026
 
1027
- .modal-content {
1028
- max-height: 100vh;
1029
- border-radius: 0;
1030
  }
1031
 
1032
- .modal-body {
1033
- max-height: calc(100vh - 140px);
 
 
 
1034
  }
1035
  }
1036
 
@@ -1040,7 +1778,7 @@ select.input {
1040
  }
1041
 
1042
  .compose-form {
1043
- padding: var(--space-sm) var(--space-lg);
1044
  }
1045
  }
1046
 
 
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;
 
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);
 
667
  }
668
 
669
  .auth-tab.active {
670
+ background: var(--bg-elevated);
671
+ color: var(--text);
672
  box-shadow: var(--shadow-sm);
673
  }
674
 
 
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 {
 
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
  }
 
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
 
 
1778
  }
1779
 
1780
  .compose-form {
1781
+ padding: var(--space-2) var(--space-4);
1782
  }
1783
  }
1784