Docfile commited on
Commit
f5c0144
·
verified ·
1 Parent(s): 09e3f19

Update static/css/style.css

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