Docfile commited on
Commit
ec5f15b
·
verified ·
1 Parent(s): 9f671a2

Upload style.css

Browse files
Files changed (1) hide show
  1. static/css/style.css +31 -1044
static/css/style.css CHANGED
@@ -1,1073 +1,60 @@
1
- /**
2
- * File: static/css/style.css
3
- * Description: Stylesheet for the Mariam AI Chatbot Web Application.
4
- * Version: Enhanced with PWA support and improved responsiveness.
5
- */
6
-
7
- /* PWA Specific Styles */
8
- @media (display-mode: standalone) {
9
- /* Adjustments for standalone mode (when installed as PWA) */
10
- body {
11
- /* Add safe area insets for mobile devices */
12
- padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
13
- /* Better touch handling */
14
- touch-action: manipulation;
15
- }
16
-
17
- /* Hide browser UI when installed as PWA */
18
- .top-bar {
19
- padding-top: max(12px, env(safe-area-inset-top));
20
- }
21
-
22
- /* Ensure content doesn't get hidden beneath the bottom nav bar on iOS */
23
- .input-area {
24
- padding-bottom: env(safe-area-inset-bottom);
25
- }
26
- }
27
-
28
- /* Offline indicator for PWA */
29
- .offline-indicator {
30
- position: fixed;
31
- top: 0;
32
- left: 0;
33
- right: 0;
34
- background-color: #FFC107;
35
- color: #212121;
36
- text-align: center;
37
- padding: 8px;
38
- font-size: 14px;
39
- z-index: 9999;
40
- display: none; /* Hidden by default, shown via JS when offline */
41
- }
42
-
43
- .offline-indicator.visible {
44
- display: block;
45
- }
46
-
47
- /* Base Styles */
48
- * {
49
- margin: 0;
50
- padding: 0;
51
- box-sizing: border-box;
52
- }
53
-
54
- html {
55
- height: 100%; /* Ensure html takes full height */
56
- }
57
 
58
  body {
59
- font-family: 'Inter', sans-serif;
60
- background-color: #FFFFFF; /* Base background */
61
- color: #212121;
62
- height: 100%; /* Take full height from html */
63
- overflow-x: hidden; /* Prevent horizontal scroll */
64
- overflow-y: hidden; /* Prevent body from scrolling itself */
65
- margin: 0; /* Remove default body margins */
66
- }
67
-
68
- /* App Container - Main flex container */
69
- .app-container {
70
- display: flex;
71
- height: 100%;
72
- width: 100%;
73
- position: relative; /* For absolute positioning of side nav on mobile */
74
- overflow: hidden; /* Contain side nav */
75
- }
76
-
77
- /* Side Navigation Bar */
78
- .side-nav {
79
- width: 280px;
80
- height: 100%;
81
- background-color: #FFFFFF;
82
- border-right: 1px solid #EEEEEE;
83
- display: flex;
84
- flex-direction: column;
85
- position: absolute; /* Mobile first: hidden off-screen */
86
- top: 0;
87
- left: -280px;
88
- transition: left 0.3s ease;
89
- z-index: 1000;
90
- box-shadow: 2px 0 10px rgba(0, 0, 0, 0.1);
91
- flex-shrink: 0; /* Prevent shrinking */
92
- }
93
-
94
- .side-nav.active {
95
- left: 0; /* Slide in when active */
96
- }
97
-
98
- .side-nav-header {
99
- display: flex;
100
- align-items: center;
101
- padding: 16px;
102
- border-bottom: 1px solid #EEEEEE;
103
- position: relative; /* For close button positioning */
104
- flex-shrink: 0; /* Prevent header shrinking */
105
- }
106
-
107
- .side-nav-header .logo {
108
- display: flex;
109
- align-items: center;
110
- justify-content: center;
111
- width: 36px;
112
- height: 36px;
113
- background-color: #E3F2FD;
114
- border-radius: 50%;
115
- margin-right: 12px;
116
- color: #2196F3;
117
- flex-shrink: 0;
118
- }
119
-
120
- .side-nav-header h1 {
121
- font-size: 20px;
122
- font-weight: 600;
123
- color: #424242;
124
- margin: 0;
125
- white-space: nowrap;
126
- overflow: hidden;
127
- text-overflow: ellipsis;
128
- }
129
-
130
- .close-button {
131
- position: absolute;
132
- right: 12px;
133
- top: 50%;
134
- transform: translateY(-50%);
135
- background-color: transparent;
136
- color: #9E9E9E;
137
- border: none;
138
- width: 32px;
139
- height: 32px;
140
- border-radius: 50%;
141
- display: flex;
142
- align-items: center;
143
- justify-content: center;
144
- cursor: pointer;
145
- transition: all 0.2s ease;
146
- flex-shrink: 0;
147
- }
148
-
149
- .close-button:hover {
150
- background-color: #F5F5F5;
151
- color: #757575;
152
- }
153
-
154
- .side-nav-section {
155
- flex: 1; /* Take remaining vertical space */
156
- overflow-y: auto; /* Allow scrolling if history is long */
157
- padding: 16px 0;
158
- border-bottom: 1px solid #EEEEEE;
159
  display: flex;
160
  flex-direction: column;
161
  }
162
 
163
- .section-header {
164
- display: flex;
165
- justify-content: space-between;
166
- align-items: center;
167
- padding: 0 16px 12px;
168
- flex-shrink: 0; /* Prevent shrinking */
169
- }
170
-
171
- .section-header h3 {
172
- font-size: 16px;
173
- font-weight: 600;
174
- color: #424242;
175
- margin: 0;
176
- }
177
-
178
- .action-button-small {
179
- background-color: transparent;
180
- color: #2196F3;
181
- border: 1px solid #2196F3;
182
- border-radius: 4px;
183
- width: 32px;
184
- height: 32px;
185
- display: flex;
186
- align-items: center;
187
- justify-content: center;
188
- cursor: pointer;
189
- transition: all 0.2s ease;
190
- flex-shrink: 0;
191
- }
192
-
193
- .action-button-small:hover {
194
- background-color: #E3F2FD;
195
- }
196
-
197
- .history-list {
198
- /* max-height: 100%; Removed, parent (.side-nav-section) handles overflow */
199
- overflow-y: auto; /* Allows scrolling within this specific list if needed */
200
- flex-grow: 1; /* Allows the list to grow */
201
- }
202
-
203
- .chat-history-item {
204
- padding: 12px 16px;
205
- cursor: pointer;
206
- display: flex;
207
- align-items: center;
208
- transition: background-color 0.2s ease;
209
- border-radius: 8px;
210
- margin: 0 8px 8px;
211
- }
212
-
213
- .chat-history-item:hover {
214
- background-color: #F5F5F5;
215
- }
216
-
217
- .chat-history-item .icon {
218
- margin-right: 12px;
219
- color: #757575;
220
- flex-shrink: 0;
221
- }
222
-
223
- .chat-history-item .details {
224
  flex: 1;
225
- overflow: hidden; /* Prevent text overflow issues */
226
- }
227
-
228
- .chat-history-item .timestamp {
229
- font-size: 12px;
230
- color: #9E9E9E;
231
- margin-top: 4px;
232
- white-space: nowrap;
233
- overflow: hidden;
234
- text-overflow: ellipsis;
235
- }
236
-
237
- .empty-state {
238
- padding: 24px 16px;
239
- text-align: center;
240
- color: #9E9E9E;
241
- font-size: 14px;
242
- }
243
-
244
- .side-nav-footer {
245
- padding: 16px;
246
- display: flex;
247
- flex-direction: column;
248
- gap: 8px;
249
- flex-shrink: 0; /* Prevent shrinking */
250
- border-top: 1px solid #EEEEEE; /* Separator */
251
- }
252
-
253
- .nav-button {
254
- display: flex;
255
- align-items: center;
256
- padding: 10px 16px;
257
- background-color: transparent;
258
- color: #616161;
259
- border: none;
260
- border-radius: 8px;
261
- cursor: pointer;
262
- transition: all 0.2s ease;
263
- font-size: 14px;
264
- text-align: left;
265
- }
266
-
267
- .nav-button i {
268
- margin-right: 12px;
269
- font-size: 16px;
270
- flex-shrink: 0;
271
- }
272
-
273
- .nav-button:hover {
274
- background-color: #F5F5F5;
275
- }
276
-
277
- .nav-button#clearButtonNav:hover {
278
- color: #F44336;
279
- }
280
-
281
- /* Main Content Area */
282
- .main-content {
283
- flex: 1; /* Takes remaining horizontal space */
284
- display: flex;
285
- flex-direction: column; /* Stack top-bar and chat-container */
286
- height: 100%; /* Crucial for nested flex children height */
287
- overflow: hidden; /* Prevent main content from overflowing */
288
- position: relative; /* Keep for nav transition */
289
- left: 0;
290
- transition: left 0.3s ease;
291
- }
292
-
293
- /* Apply shift when nav is open on mobile/tablet */
294
- .main-content.nav-open {
295
- /* This selector might need adjustment based on how 'nav-open' is applied */
296
- /* Typically applied on body or app-container in JS */
297
- }
298
-
299
- @media (max-width: 991px) {
300
- .main-content.nav-open {
301
- left: 280px;
302
- }
303
- }
304
-
305
-
306
- /* Top Bar */
307
- .top-bar {
308
- display: flex;
309
- justify-content: space-between;
310
- align-items: center;
311
- padding: 12px 16px;
312
- background-color: #2196F3;
313
- color: white;
314
- height: 60px; /* Fixed height */
315
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
316
- z-index: 10;
317
- flex-shrink: 0; /* Prevent shrinking */
318
- }
319
-
320
- .top-bar-left {
321
- display: flex;
322
- align-items: center;
323
- }
324
-
325
- .menu-button {
326
- background-color: transparent;
327
- color: white;
328
- border: none;
329
- width: 42px;
330
- height: 42px;
331
- border-radius: 50%;
332
- display: flex; /* Changed to flex for desktop */
333
- align-items: center;
334
- justify-content: center;
335
- cursor: pointer;
336
- margin-right: 16px;
337
- font-size: 24px;
338
- transition: background-color 0.2s ease;
339
- }
340
-
341
- .menu-button:hover {
342
- background-color: rgba(255, 255, 255, 0.1);
343
- }
344
-
345
- .top-bar h1 {
346
- font-size: 20px;
347
- font-weight: 500;
348
- margin: 0;
349
- color: white;
350
- white-space: nowrap;
351
- }
352
-
353
- .top-bar-right {
354
- display: flex;
355
- align-items: center;
356
- }
357
-
358
- .icon-button {
359
- background-color: transparent;
360
- color: white;
361
- border: none;
362
- width: 40px;
363
- height: 40px;
364
- border-radius: 50%;
365
- display: flex;
366
- align-items: center;
367
- justify-content: center;
368
- cursor: pointer;
369
- transition: background-color 0.2s ease;
370
- }
371
-
372
- .icon-button:hover {
373
- background-color: rgba(255, 255, 255, 0.1);
374
- }
375
-
376
- /* Chat Container - Takes remaining space below top-bar */
377
- .chat-container {
378
- display: flex;
379
- flex-direction: column; /* Stack chat-window and input-area */
380
- flex: 1; /* Crucial: takes remaining vertical space in main-content */
381
- overflow: hidden; /* Contains children */
382
- background-color: #FAFAFA;
383
- /* height: calc(100% - 60px); Removed, flex: 1 handles this */
384
- }
385
-
386
- /* Scrollable Chat Window */
387
- .chat-window {
388
- flex: 1; /* Crucial: takes remaining space IN chat-container */
389
- overflow-y: auto; /* Enables vertical scrolling for content */
390
- padding: 16px;
391
- scrollbar-width: thin; /* Firefox scrollbar styling */
392
- scrollbar-color: #E0E0E0 #FAFAFA; /* Firefox scrollbar styling */
393
- -webkit-overflow-scrolling: touch; /* Smooth scrolling on iOS */
394
- }
395
-
396
- /* Webkit scrollbar styling */
397
- .chat-window::-webkit-scrollbar {
398
- width: 6px;
399
- }
400
-
401
- .chat-window::-webkit-scrollbar-track {
402
- background: #FAFAFA;
403
- }
404
-
405
- .chat-window::-webkit-scrollbar-thumb {
406
- background-color: #E0E0E0;
407
- border-radius: 10px;
408
- }
409
-
410
- /* Welcome Container with Suggestion Bubbles */
411
- .welcome-container {
412
- display: flex;
413
- flex-direction: column;
414
- align-items: center;
415
- justify-content: center;
416
- height: 100%; /* Tries to fill the chat-window initially */
417
- padding: 24px;
418
- text-align: center;
419
- }
420
-
421
- /* Hide welcome if messages exist (handled by JS) */
422
- .welcome-container.hidden {
423
- display: none;
424
- }
425
-
426
- .welcome-logo {
427
- display: flex;
428
- align-items: center;
429
- justify-content: center;
430
- width: 64px;
431
- height: 64px;
432
- background-color: #E3F2FD;
433
- border-radius: 50%;
434
- margin-bottom: 24px;
435
- color: #2196F3;
436
- flex-shrink: 0;
437
- }
438
-
439
- .welcome-logo i {
440
- font-size: 32px;
441
- }
442
-
443
- .welcome-header h2 {
444
- font-size: 28px;
445
- font-weight: 600;
446
- color: #212121;
447
- margin-bottom: 12px;
448
- }
449
-
450
- .welcome-subtitle {
451
- font-size: 16px;
452
- color: #757575;
453
- margin-bottom: 32px;
454
- }
455
-
456
- .suggestion-bubbles {
457
- display: flex;
458
- flex-direction: column;
459
- gap: 16px;
460
- max-width: 500px;
461
- width: 100%;
462
- }
463
-
464
- .suggestion-bubble {
465
- display: flex;
466
- align-items: center;
467
- padding: 16px;
468
- background-color: #F5F5F5;
469
- border-radius: 12px;
470
- cursor: pointer;
471
- transition: all 0.2s ease;
472
- text-align: left;
473
- }
474
-
475
- .suggestion-bubble i {
476
- font-size: 20px;
477
- color: #2196F3;
478
- margin-right: 16px;
479
- flex-shrink: 0;
480
- }
481
-
482
- .suggestion-bubble span {
483
- font-size: 15px;
484
- color: #424242;
485
- }
486
-
487
- .suggestion-bubble:hover {
488
- background-color: #E3F2FD;
489
- transform: translateY(-2px);
490
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05);
491
- }
492
-
493
-
494
- /* Input Area Container */
495
- .input-area {
496
- border-top: 1px solid #EEEEEE;
497
- background-color: #FFFFFF;
498
- flex-shrink: 0; /* Prevent shrinking */
499
- /* Removed position:sticky from mobile - handled by flex layout */
500
- box-shadow: 0 -2px 5px rgba(0, 0, 0, 0.05); /* Keep shadow for visual separation */
501
- }
502
-
503
- /* Image Preview Area */
504
- .image-preview-area {
505
- padding: 8px 16px;
506
- background-color: #F8F9FA;
507
- border-bottom: 1px solid #EEEEEE;
508
- max-height: 130px; /* Limit height */
509
- overflow-y: auto; /* Allow scroll if many images */
510
- }
511
-
512
- .image-preview-area.hidden {
513
- display: none;
514
  }
515
 
516
- .image-preview-list {
517
- display: flex;
518
- flex-wrap: wrap; /* Wrap images */
519
- gap: 10px;
520
- padding: 5px 0;
521
- }
522
-
523
- .image-preview-container {
524
- position: relative;
525
- display: inline-block;
526
- width: 100px;
527
- height: 100px;
528
- border-radius: 8px;
529
- overflow: hidden;
530
- border: 1px solid #EEEEEE;
531
- flex-shrink: 0;
532
- }
533
-
534
- .image-preview-container img {
535
- width: 100%;
536
- height: 100%;
537
- display: block;
538
- object-fit: cover;
539
- }
540
-
541
- .remove-image-button {
542
- position: absolute;
543
- top: 4px;
544
- right: 4px;
545
- background-color: rgba(0, 0, 0, 0.5);
546
- color: white;
547
- border: none;
548
- border-radius: 50%;
549
- width: 24px;
550
- height: 24px;
551
- display: flex;
552
- align-items: center;
553
- justify-content: center;
554
- cursor: pointer;
555
- transition: background-color 0.2s ease;
556
- z-index: 1; /* Above image */
557
- }
558
-
559
- .remove-image-button:hover {
560
- background-color: rgba(0, 0, 0, 0.7);
561
- }
562
-
563
- /* Message Containers */
564
- .message-container {
565
- display: flex;
566
- margin: 12px 0;
567
- width: 100%; /* Ensure it takes full width for alignment */
568
- }
569
-
570
- .message-container.user {
571
- justify-content: flex-end; /* Align user messages to the right */
572
- }
573
-
574
- .message-container.bot {
575
- justify-content: flex-start; /* Align bot messages to the left */
576
- }
577
-
578
- /* Message Bubbles */
579
- .message-bubble {
580
- max-width: 80%; /* Limit bubble width */
581
- padding: 14px 18px;
582
- border-radius: 18px;
583
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
584
- word-wrap: break-word; /* Allow long words to break */
585
- overflow-wrap: break-word; /* Better word breaking */
586
- position: relative; /* For absolute positioning of action buttons */
587
- }
588
-
589
- .message-container.user .message-bubble {
590
- background-color: #E3F2FD; /* Light blue for user */
591
- border-top-right-radius: 4px; /* Flat corner for speech bubble effect */
592
- color: #1E4A72; /* Darker text for contrast */
593
- }
594
-
595
- .message-container.bot .message-bubble {
596
- background-color: #FFFFFF; /* White for bot */
597
- border-top-left-radius: 4px; /* Flat corner */
598
- border: 1px solid #EEEEEE; /* Subtle border */
599
- color: #212121; /* Default text color */
600
- }
601
-
602
- /* Message Text and Images */
603
- .message-bubble p {
604
- margin: 0;
605
- line-height: 1.5;
606
- font-size: 15px;
607
- white-space: pre-wrap; /* Preserve whitespace and newlines */
608
- }
609
-
610
- .message-bubble .image-container {
611
- margin-bottom: 8px;
612
- }
613
-
614
- .message-bubble .chat-image {
615
- max-width: 100%;
616
- border-radius: 8px;
617
- margin-bottom: 8px;
618
- max-height: 300px; /* Limit image height */
619
- object-fit: contain; /* Prevent distortion */
620
- display: block; /* Ensure it behaves like a block */
621
- }
622
-
623
- /* Markdown Styling */
624
- .message-bubble ul,
625
- .message-bubble ol {
626
- margin-left: 25px; /* Indent lists */
627
- margin-top: 8px;
628
- margin-bottom: 8px;
629
- padding-left: 0; /* Reset default padding */
630
- }
631
-
632
- .message-bubble li {
633
- margin-bottom: 4px;
634
- }
635
-
636
- .message-bubble h1,
637
- .message-bubble h2,
638
- .message-bubble h3,
639
- .message-bubble h4,
640
- .message-bubble h5,
641
- .message-bubble h6 {
642
- margin-top: 16px;
643
- margin-bottom: 8px;
644
- font-weight: 600;
645
- line-height: 1.3;
646
- }
647
-
648
- .message-bubble code:not(pre > code) { /* Inline code */
649
- background-color: #f0f0f0; /* Slightly different background */
650
- padding: 2px 5px;
651
- border-radius: 4px;
652
- font-family: 'Courier New', monospace;
653
- font-size: 14px;
654
- color: #C7254E; /* Pinkish color */
655
- border: 1px solid #e0e0e0;
656
  }
657
 
658
- .message-bubble pre { /* Code blocks */
659
- background-color: #2d2d2d; /* Dark background for code blocks */
660
- color: #f8f8f2; /* Light text */
661
- padding: 16px;
662
- border-radius: 8px;
663
- overflow-x: auto; /* Allow horizontal scroll for long lines */
664
- margin: 12px 0;
665
- font-family: 'Courier New', monospace;
666
- font-size: 14px;
667
- line-height: 1.4;
668
- white-space: pre; /* Maintain whitespace */
669
- }
670
-
671
- .message-bubble pre code {
672
- background-color: transparent; /* Code inside pre doesn't need its own bg */
673
- padding: 0;
674
- color: inherit; /* Inherit color from pre */
675
- border: none;
676
- font-size: inherit;
677
- font-family: inherit;
678
- display: block; /* Ensure it takes block space */
679
- white-space: inherit; /* Inherit whitespace handling */
680
- }
681
-
682
- .message-bubble a {
683
- color: #1976D2; /* Link color */
684
- text-decoration: underline;
685
- }
686
-
687
- .message-bubble a:hover {
688
- color: #1565C0;
689
- }
690
-
691
- .message-bubble table {
692
- border-collapse: collapse;
693
  width: 100%;
694
- margin: 12px 0;
695
- border: 1px solid #dddddd;
696
- }
697
-
698
- .message-bubble th,
699
- .message-bubble td {
700
- border: 1px solid #dddddd;
701
- padding: 10px;
702
- text-align: left;
703
- }
704
-
705
- .message-bubble th {
706
- background-color: #f9f9f9;
707
- font-weight: 600;
708
- }
709
-
710
- .message-bubble blockquote {
711
- border-left: 4px solid #ccc;
712
- margin: 10px 0;
713
- padding-left: 16px;
714
- color: #666;
715
- }
716
-
717
- /* Error Message Styling */
718
- .message-container.error .message-bubble {
719
- background-color: #FFEBEE; /* Light red */
720
- border: 1px solid #FFCDD2;
721
- color: #B71C1C; /* Dark red text */
722
- }
723
-
724
- .retry-button {
725
- display: inline-block;
726
- margin-top: 8px;
727
- padding: 6px 12px;
728
- background-color: #F44336;
729
- color: white;
730
- border: none;
731
- border-radius: 4px;
732
- cursor: pointer;
733
- font-size: 14px;
734
- transition: background-color 0.2s ease;
735
- }
736
-
737
- .retry-button:hover {
738
- background-color: #D32F2F;
739
- }
740
-
741
- /* Message actions (copy button, etc.) */
742
- .message-actions {
743
- position: absolute;
744
- top: 8px;
745
- right: 8px;
746
- display: flex;
747
- gap: 5px;
748
- opacity: 0;
749
- transition: opacity 0.2s ease;
750
- }
751
-
752
- .message-bubble:hover .message-actions {
753
- opacity: 1;
754
- }
755
-
756
- .copy-button {
757
- background-color: rgba(255, 255, 255, 0.8);
758
- color: #616161;
759
- border: none;
760
- border-radius: 4px;
761
- width: 28px;
762
- height: 28px;
763
- display: flex;
764
- align-items: center;
765
- justify-content: center;
766
- cursor: pointer;
767
- transition: all 0.2s ease;
768
- }
769
-
770
- .copy-button:hover {
771
- background-color: #E3F2FD;
772
- color: #2196F3;
773
- }
774
-
775
- /* Loading Animation */
776
- .message-bubble.loading {
777
- display: flex; /* Use flex for alignment */
778
- align-items: center;
779
- justify-content: center; /* Center dots */
780
- min-width: 60px; /* Ensure some width */
781
- padding: 14px 18px; /* Match normal bubble padding */
782
- background-color: #FFFFFF; /* Match bot background */
783
- border: 1px solid #EEEEEE; /* Match bot border */
784
- border-top-left-radius: 4px; /* Match bot radius */
785
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); /* Match bubble shadow */
786
- }
787
-
788
- .dot-typing {
789
- position: relative;
790
- width: 6px;
791
- height: 6px;
792
- border-radius: 50%;
793
- background-color: #9E9E9E;
794
- color: #9E9E9E; /* For ::before/::after color */
795
- animation: dotTyping 1.5s infinite linear;
796
- animation-delay: 0.25s; /* Stagger start */
797
- }
798
-
799
- .dot-typing::before,
800
- .dot-typing::after {
801
- content: '';
802
- display: inline-block;
803
- position: absolute;
804
- top: 0;
805
- width: 6px;
806
- height: 6px;
807
- border-radius: 50%;
808
- background-color: #9E9E9E;
809
- color: #9E9E9E;
810
- }
811
-
812
- .dot-typing::before {
813
- left: -12px; /* Position left dot */
814
- animation: dotTypingBefore 1.5s infinite linear;
815
- animation-delay: 0s;
816
  }
817
 
818
- .dot-typing::after {
819
- left: 12px; /* Position right dot */
820
- animation: dotTypingAfter 1.5s infinite linear;
821
- animation-delay: 0.5s; /* Stagger start */
822
  }
823
 
824
- @keyframes dotTyping {
825
- 0%, 60%, 100% { transform: scale(1); opacity: 0.6; }
826
- 30% { transform: scale(1.3); opacity: 1; }
827
  }
828
 
829
- @keyframes dotTypingBefore {
830
- 0%, 60%, 100% { transform: scale(1); opacity: 0.6; }
831
- 30% { transform: scale(1.3); opacity: 1; }
 
832
  }
833
 
834
- @keyframes dotTypingAfter {
835
- 0%, 60%, 100% { transform: scale(1); opacity: 0.6; }
836
- 30% { transform: scale(1.3); opacity: 1; }
 
 
837
  }
838
 
839
- /* Input Bar at the bottom */
840
- .input-bar {
841
- padding: 16px;
842
- display: flex;
843
- align-items: flex-end; /* Align items to bottom for multiline textarea */
844
- background-color: #FFFFFF; /* Match area background */
845
- }
846
-
847
- .upload-button {
848
- background-color: transparent;
849
- color: #616161;
850
- border: none;
851
- border-radius: 50%;
852
- width: 42px;
853
- height: 42px;
854
- display: flex;
855
- align-items: center;
856
- justify-content: center;
857
- cursor: pointer;
858
- transition: all 0.2s ease;
859
- margin-right: 8px;
860
- flex-shrink: 0;
861
- }
862
-
863
- .upload-button:hover {
864
- background-color: #F5F5F5;
865
- color: #2196F3;
866
- }
867
-
868
- .input-container {
869
- flex: 1; /* Take remaining space */
870
- display: flex;
871
- align-items: flex-end; /* Align textarea and button */
872
- background-color: #F5F5F5;
873
- border-radius: 24px;
874
- padding: 6px 8px 6px 16px; /* Adjusted padding */
875
- transition: box-shadow 0.3s ease;
876
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
877
- min-height: 48px; /* Minimum height */
878
- }
879
-
880
- .input-container:focus-within {
881
- box-shadow: 0 0 0 2px #42A5F5; /* Focus outline */
882
- }
883
-
884
- /* Text Area */
885
- #userInput {
886
- flex: 1; /* Take available space */
887
- border: none;
888
- background: transparent;
889
- padding: 8px 0; /* Vertical padding */
890
- max-height: 120px; /* Limit height before scroll */
891
- resize: none; /* Disable manual resize */
892
- font-family: inherit;
893
- font-size: 15px;
894
- line-height: 1.4; /* Better line spacing */
895
- outline: none;
896
- color: #212121;
897
- overflow-y: auto; /* Allow scroll within textarea if needed */
898
- }
899
-
900
- #userInput::placeholder {
901
- color: #9E9E9E;
902
- }
903
-
904
- /* Send Button */
905
- .send-button {
906
- background-color: #2196F3;
907
- color: white;
908
- border: none;
909
- border-radius: 50%;
910
- width: 40px;
911
- height: 40px;
912
- display: flex;
913
- align-items: center;
914
- justify-content: center;
915
- cursor: pointer;
916
- transition: all 0.2s ease;
917
- margin-left: 8px;
918
- flex-shrink: 0; /* Prevent shrinking */
919
- }
920
-
921
- .send-button:hover {
922
- background-color: #1976D2;
923
- transform: scale(1.05);
924
- }
925
-
926
- .send-button:disabled {
927
- background-color: #BDBDBD;
928
- cursor: not-allowed;
929
- transform: none;
930
- opacity: 0.7;
931
- }
932
-
933
- /* Overlay when side nav is open on mobile */
934
- .overlay {
935
- display: none;
936
- position: fixed;
937
- top: 0;
938
- left: 0;
939
- right: 0;
940
- bottom: 0;
941
- background-color: rgba(0, 0, 0, 0.5);
942
- z-index: 999; /* Below side nav, above content */
943
- }
944
-
945
- .overlay.active {
946
- display: block;
947
  }
948
 
949
  /* Responsive adjustments */
950
-
951
- /* Desktop styles */
952
- @media (min-width: 992px) {
953
- .side-nav {
954
- position: relative; /* Static position in flex layout */
955
- left: 0;
956
- width: 280px;
957
- box-shadow: none; /* No shadow needed if static */
958
- }
959
-
960
- .main-content {
961
- /* width: calc(100% - 280px); Not needed with flex: 1 */
962
- left: 0 !important; /* Ensure it's not shifted */
963
- }
964
-
965
- .menu-button {
966
- display: none; /* Hide hamburger on desktop */
967
- }
968
-
969
- .overlay {
970
- display: none !important; /* Never show overlay on desktop */
971
- }
972
- }
973
-
974
- /* Tablet and Mobile styles */
975
- @media (max-width: 991px) {
976
- /* Keep side nav absolute/hidden by default */
977
- /* .main-content.nav-open style handles the shift */
978
- }
979
-
980
  @media (max-width: 768px) {
981
- /* Small tablets and large phones */
982
- .message-bubble {
983
- max-width: 85%;
984
  }
985
-
986
- .suggestion-bubbles {
987
- max-width: 100%;
988
- }
989
-
990
- .welcome-logo {
991
- width: 56px;
992
- height: 56px;
993
- }
994
-
995
- .welcome-logo i {
996
- font-size: 28px;
997
- }
998
-
999
- .welcome-header h2 {
1000
- font-size: 24px;
1001
  }
1002
  }
1003
-
1004
- @media (max-width: 480px) {
1005
- /* Mobile phones */
1006
- .side-nav {
1007
- width: 85%; /* Make nav wider on small screens */
1008
- }
1009
-
1010
- .message-bubble {
1011
- max-width: 90%;
1012
- padding: 12px 16px; /* Slightly smaller padding */
1013
- }
1014
-
1015
- .chat-window {
1016
- padding: 12px; /* Less padding */
1017
- }
1018
-
1019
- .input-bar {
1020
- padding: 12px 8px; /* Less padding */
1021
- }
1022
-
1023
- .input-container {
1024
- padding: 6px 8px 6px 12px; /* Adjust padding */
1025
- min-height: 44px;
1026
- }
1027
-
1028
- #userInput {
1029
- font-size: 14px;
1030
- }
1031
-
1032
- .top-bar {
1033
- padding: 10px 12px;
1034
- height: 56px; /* Slightly shorter */
1035
- }
1036
-
1037
- .top-bar h1 {
1038
- font-size: 18px;
1039
- }
1040
-
1041
- .menu-button {
1042
- margin-right: 12px;
1043
- }
1044
-
1045
- .welcome-header h2 {
1046
- font-size: 22px;
1047
- }
1048
-
1049
- .welcome-subtitle {
1050
- font-size: 14px;
1051
- }
1052
-
1053
- .suggestion-bubble {
1054
- padding: 12px;
1055
- }
1056
-
1057
- .suggestion-bubble i {
1058
- font-size: 18px;
1059
- margin-right: 12px;
1060
- }
1061
-
1062
- .suggestion-bubble span {
1063
- font-size: 14px;
1064
- }
1065
-
1066
- /* Ensure welcome container content is centered but allows scroll */
1067
- .welcome-container {
1068
- justify-content: flex-start; /* Align to top */
1069
- padding-top: 40px; /* Add some top padding */
1070
- height: auto; /* Allow it to take content height */
1071
- min-height: 100%; /* Ensure it tries to fill if content is short */
1072
- }
1073
- }
 
1
+ /* Custom styling for the application */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  body {
4
+ min-height: 100vh;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  display: flex;
6
  flex-direction: column;
7
  }
8
 
9
+ .container {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  flex: 1;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  }
12
 
13
+ /* Add a bit of spacing around the audio player */
14
+ #audioPlayerContainer {
15
+ padding: 10px 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  }
17
 
18
+ /* Make the audio player responsive */
19
+ audio {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  width: 100%;
21
+ border-radius: 0.25rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  }
23
 
24
+ /* Fade in animation for the audio card */
25
+ @keyframes fadeIn {
26
+ 0% { opacity: 0; transform: translateY(20px); }
27
+ 100% { opacity: 1; transform: translateY(0); }
28
  }
29
 
30
+ .fade-in {
31
+ animation: fadeIn 0.5s ease forwards;
 
32
  }
33
 
34
+ /* Style for the text area */
35
+ #textInput {
36
+ resize: vertical;
37
+ min-height: 150px;
38
  }
39
 
40
+ /* Little pulse effect for the loading spinner */
41
+ @keyframes pulse {
42
+ 0% { transform: scale(1); }
43
+ 50% { transform: scale(1.1); }
44
+ 100% { transform: scale(1); }
45
  }
46
 
47
+ .spinner-border {
48
+ animation: spinner-border 0.75s linear infinite, pulse 2s ease infinite;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  }
50
 
51
  /* Responsive adjustments */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  @media (max-width: 768px) {
53
+ h1.display-4 {
54
+ font-size: 2.5rem;
 
55
  }
56
+
57
+ .lead {
58
+ font-size: 1.1rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  }
60
  }