CaffeinatedCoding commited on
Commit
0bbd462
·
verified ·
1 Parent(s): 2be8380

Update frontend/style.css

Browse files
Files changed (1) hide show
  1. frontend/style.css +504 -204
frontend/style.css CHANGED
@@ -1,121 +1,217 @@
 
1
  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
2
 
3
  :root {
4
- --navy: #1a2540;
5
- --navy-dark: #111827;
6
- --navy-mid: #1e2d47;
7
- --gold: #c9a84c;
8
- --gold-light: #e8c97a;
9
- --cream: #f5f0e8;
10
- --text-primary: #e8e4dc;
11
- --text-secondary: #9aa3b2;
12
- --text-muted: #5a6478;
13
- --border: #2a3550;
14
- --bubble-user: #1e3a5f;
15
- --bubble-ai: #1a2540;
16
- --success: #2d6a4f;
17
- --warning: #7c4f00;
18
- }
 
 
 
 
 
 
 
19
 
20
  body {
21
  font-family: 'DM Sans', sans-serif;
22
- background: var(--navy-dark);
23
- color: var(--text-primary);
24
- height: 100vh;
25
- overflow: hidden;
26
  }
27
 
 
28
  .app-layout {
29
  display: flex;
30
  height: 100vh;
 
31
  }
32
 
33
  /* ── Sidebar ── */
34
  .sidebar {
35
- width: 260px;
36
- background: var(--navy);
37
  border-right: 1px solid var(--border);
38
  display: flex;
39
  flex-direction: column;
40
- padding: 24px 16px;
41
  flex-shrink: 0;
 
42
  }
43
 
44
- .sidebar-logo {
45
  display: flex;
46
  align-items: center;
47
- gap: 10px;
48
- margin-bottom: 6px;
 
49
  }
50
 
51
- .logo-icon { font-size: 22px; }
 
 
 
 
 
 
 
 
 
 
 
 
52
 
53
- .logo-text {
54
  font-family: 'Cormorant Garamond', serif;
55
- font-size: 22px;
56
  font-weight: 700;
57
  color: var(--gold);
58
- letter-spacing: 0.5px;
 
59
  }
60
 
61
- .sidebar-tagline {
62
- font-size: 11px;
63
- color: var(--text-muted);
64
- margin-left: 32px;
65
- margin-bottom: 20px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  }
67
 
68
- .sidebar-divider {
69
- height: 1px;
70
- background: var(--border);
71
- margin-bottom: 16px;
72
  }
73
 
74
- .sidebar-label {
 
 
 
75
  font-size: 10px;
76
  font-weight: 600;
77
- color: var(--text-muted);
78
- letter-spacing: 1.2px;
79
- margin-bottom: 10px;
 
 
 
 
 
80
  }
81
 
82
- .history-list { flex: 1; overflow-y: auto; }
 
83
 
84
- .history-empty {
 
85
  font-size: 12px;
86
- color: var(--text-muted);
87
  font-style: italic;
88
  }
89
 
90
- .history-item {
91
- font-size: 12px;
92
- color: var(--text-secondary);
93
- padding: 8px 10px;
94
- border-radius: 6px;
 
95
  cursor: pointer;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
  white-space: nowrap;
97
  overflow: hidden;
98
  text-overflow: ellipsis;
99
- margin-bottom: 4px;
100
- transition: background 0.15s;
101
  }
102
 
103
- .history-item:hover { background: var(--navy-mid); }
104
 
105
- .sidebar-footer { margin-top: auto; padding-top: 16px; }
 
 
 
 
106
 
107
- .disclaimer-badge {
 
 
 
 
 
 
 
 
 
 
 
108
  font-size: 11px;
109
- color: #c9a84c99;
110
- background: #c9a84c11;
111
- border: 1px solid #c9a84c33;
112
- border-radius: 6px;
113
- padding: 8px 10px;
114
- text-align: center;
115
  }
116
 
117
- /* ── Main content ── */
118
- .main-content {
 
 
 
 
 
 
 
 
119
  flex: 1;
120
  display: flex;
121
  flex-direction: column;
@@ -123,107 +219,205 @@ body {
123
  position: relative;
124
  }
125
 
126
- /* ── Welcome screen ── */
127
- .welcome-screen {
128
- flex: 1;
 
129
  display: flex;
130
- flex-direction: column;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
  align-items: center;
132
  justify-content: center;
133
  padding: 40px 24px 120px;
 
134
  }
135
 
136
- .welcome-title {
137
- font-family: 'Cormorant Garamond', serif;
 
 
 
 
 
 
 
 
 
 
 
138
  font-size: 48px;
 
 
 
 
 
 
 
139
  font-weight: 700;
140
- color: var(--gold);
141
- margin-bottom: 12px;
 
142
  }
143
 
144
- .welcome-subtitle {
145
  font-size: 15px;
146
- color: var(--text-secondary);
147
- text-align: center;
148
- line-height: 1.6;
149
  margin-bottom: 40px;
150
  }
151
 
152
  .suggestion-grid {
153
  display: grid;
154
  grid-template-columns: 1fr 1fr;
155
- gap: 12px;
156
- max-width: 700px;
157
- width: 100%;
158
  }
159
 
160
- .suggestion-card {
161
- background: var(--navy);
162
  border: 1px solid var(--border);
163
  border-radius: 10px;
164
- padding: 14px 16px;
 
165
  font-size: 13px;
166
- color: var(--text-secondary);
167
  cursor: pointer;
168
- transition: all 0.2s;
169
  line-height: 1.5;
 
170
  }
171
 
172
- .suggestion-card:hover {
173
- border-color: var(--gold);
174
- color: var(--text-primary);
175
- background: var(--navy-mid);
 
176
  }
177
 
178
- /* ── Chat area ── */
179
- .chat-area {
 
 
180
  flex: 1;
181
  overflow-y: auto;
182
- padding: 32px 40px 20px;
183
  }
184
 
185
- .messages { display: flex; flex-direction: column; gap: 24px; max-width: 800px; margin: 0 auto; }
 
186
 
187
- /* ── Message bubbles ── */
188
- .message { display: flex; flex-direction: column; gap: 6px; }
189
-
190
- .message-user {
191
- align-items: flex-end;
 
 
192
  }
193
 
194
- .message-ai {
195
- align-items: flex-start;
196
- }
 
 
197
 
198
  .bubble-user {
199
- background: var(--bubble-user);
200
- border: 1px solid #2a4a70;
201
  border-radius: 16px 16px 4px 16px;
202
  padding: 12px 16px;
 
 
203
  font-size: 14px;
204
- max-width: 75%;
205
  line-height: 1.6;
206
- color: var(--text-primary);
207
  }
208
 
209
  .bubble-ai {
210
- background: var(--bubble-ai);
211
  border: 1px solid var(--border);
212
  border-left: 3px solid var(--gold);
213
  border-radius: 4px 16px 16px 16px;
214
- padding: 16px 18px;
 
 
215
  font-size: 14px;
216
- max-width: 85%;
217
- line-height: 1.7;
218
- color: var(--text-primary);
219
  position: relative;
220
  }
221
 
222
- .bubble-ai p { margin-bottom: 10px; }
223
  .bubble-ai p:last-child { margin-bottom: 0; }
224
 
225
- /* Verification badge */
226
- .verification-badge {
 
 
 
 
 
 
 
 
 
 
227
  display: inline-flex;
228
  align-items: center;
229
  gap: 5px;
@@ -231,156 +425,262 @@ body {
231
  font-weight: 600;
232
  padding: 3px 10px;
233
  border-radius: 20px;
234
- margin-top: 8px;
235
  }
236
 
237
- .badge-verified {
238
- background: #1a3d2b;
239
- color: #4caf82;
240
- border: 1px solid #2d6a4f;
241
  }
242
 
243
- .badge-unverified {
244
- background: #3d2a00;
245
- color: #e8a020;
246
- border: 1px solid #7c4f00;
247
  }
248
 
249
- /* Sources section */
250
- .sources-section { margin-top: 14px; }
251
-
252
- .sources-toggle {
253
- font-size: 12px;
 
254
  color: var(--gold);
 
 
 
 
255
  cursor: pointer;
256
- background: none;
257
- border: none;
258
- padding: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
259
  display: flex;
260
  align-items: center;
261
- gap: 5px;
 
 
 
262
  }
263
 
264
- .sources-toggle:hover { color: var(--gold-light); }
 
 
 
 
 
 
 
 
 
265
 
266
- .sources-list {
267
- margin-top: 10px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
268
  display: flex;
269
  flex-direction: column;
270
- gap: 8px;
271
  }
272
 
 
 
 
273
  .source-card {
274
- background: var(--navy-dark);
275
  border: 1px solid var(--border);
276
- border-radius: 8px;
277
- padding: 10px 12px;
 
278
  }
279
 
280
- .source-meta {
281
- font-size: 11px;
 
 
 
282
  font-weight: 600;
283
  color: var(--gold);
284
  margin-bottom: 4px;
285
  }
286
 
 
 
 
 
 
 
287
  .source-excerpt {
288
  font-size: 12px;
289
- color: var(--text-muted);
290
- line-height: 1.5;
291
- display: -webkit-box;
292
- -webkit-line-clamp: 2;
293
- -webkit-box-orient: vertical;
294
- overflow: hidden;
295
  }
296
 
297
- /* Loading bubble */
298
- .bubble-loading {
299
- display: flex;
300
  align-items: center;
301
- gap: 8px;
302
- padding: 14px 18px;
303
- font-size: 13px;
304
- color: var(--text-muted);
305
- }
306
-
307
- .loading-dots span {
308
- display: inline-block;
309
- width: 6px;
310
- height: 6px;
311
- background: var(--gold);
312
  border-radius: 50%;
313
- animation: bounce 1.2s infinite;
 
 
314
  }
315
 
316
- .loading-dots span:nth-child(2) { animation-delay: 0.2s; }
317
- .loading-dots span:nth-child(3) { animation-delay: 0.4s; }
318
-
319
- @keyframes bounce {
320
- 0%, 60%, 100% { transform: translateY(0); opacity: 0.4; }
321
- 30% { transform: translateY(-6px); opacity: 1; }
322
  }
323
 
324
- /* ── Input bar ── */
325
- .input-bar {
326
  display: flex;
327
  align-items: flex-end;
328
  gap: 10px;
329
- padding: 16px 40px 12px;
330
- background: linear-gradient(transparent, var(--navy-dark) 40%);
 
 
 
331
  }
332
 
333
- .query-input {
 
 
334
  flex: 1;
335
- background: var(--navy);
336
- border: 1px solid var(--border);
337
- border-radius: 12px;
338
- padding: 12px 16px;
339
  font-family: 'DM Sans', sans-serif;
340
  font-size: 14px;
341
- color: var(--text-primary);
342
  resize: none;
343
- outline: none;
344
- max-height: 120px;
345
- overflow-y: auto;
346
- line-height: 1.5;
347
- transition: border-color 0.2s;
348
  }
349
 
350
- .query-input::placeholder { color: var(--text-muted); }
351
- .query-input:focus { border-color: var(--gold); }
352
 
353
  .send-btn {
354
- width: 42px;
355
- height: 42px;
356
  background: var(--gold);
357
  border: none;
358
- border-radius: 10px;
359
- color: var(--navy-dark);
360
- font-size: 18px;
361
- font-weight: 700;
362
  cursor: pointer;
363
- flex-shrink: 0;
364
- transition: background 0.2s, transform 0.1s;
365
  display: flex;
366
  align-items: center;
367
  justify-content: center;
 
 
368
  }
369
 
370
- .send-btn:hover { background: var(--gold-light); transform: scale(1.05); }
371
- .send-btn:disabled { background: var(--text-muted); cursor: not-allowed; transform: none; }
372
 
373
- .input-footer {
374
  text-align: center;
375
  font-size: 11px;
376
- color: var(--text-muted);
377
- padding: 0 40px 14px;
378
- }
379
-
380
- /* ── Utilities ── */
381
- .hidden { display: none !important; }
382
-
383
- /* Scrollbar */
384
- ::-webkit-scrollbar { width: 4px; }
385
- ::-webkit-scrollbar-track { background: transparent; }
386
- ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 2px; }
 
1
+ /* ── Reset & Variables ── */
2
  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
3
 
4
  :root {
5
+ --navy: #0f1724;
6
+ --navy-2: #161f30;
7
+ --navy-3: #1c2840;
8
+ --navy-4: #243050;
9
+ --gold: #c8a84b;
10
+ --gold-dim: #9a7d34;
11
+ --gold-glow: rgba(200,168,75,0.15);
12
+ --text-1: #e8e2d4;
13
+ --text-2: #9ba8bc;
14
+ --text-3: #576070;
15
+ --border: rgba(255,255,255,0.07);
16
+ --border-gold: rgba(200,168,75,0.3);
17
+ --red-soft: #e05252;
18
+ --green-soft: #4caf82;
19
+ --sidebar-w: 272px;
20
+ --topbar-h: 56px;
21
+ --input-h: 96px;
22
+ --radius: 12px;
23
+ --transition: 0.2s ease;
24
+ }
25
+
26
+ html, body { height: 100%; overflow: hidden; }
27
 
28
  body {
29
  font-family: 'DM Sans', sans-serif;
30
+ background: var(--navy);
31
+ color: var(--text-1);
32
+ font-size: 14px;
33
+ line-height: 1.6;
34
  }
35
 
36
+ /* ── Layout ── */
37
  .app-layout {
38
  display: flex;
39
  height: 100vh;
40
+ overflow: hidden;
41
  }
42
 
43
  /* ── Sidebar ── */
44
  .sidebar {
45
+ width: var(--sidebar-w);
46
+ background: var(--navy-2);
47
  border-right: 1px solid var(--border);
48
  display: flex;
49
  flex-direction: column;
 
50
  flex-shrink: 0;
51
+ overflow: hidden;
52
  }
53
 
54
+ .sidebar-brand {
55
  display: flex;
56
  align-items: center;
57
+ gap: 12px;
58
+ padding: 20px 18px 16px;
59
+ border-bottom: 1px solid var(--border);
60
  }
61
 
62
+ .brand-mark {
63
+ width: 38px;
64
+ height: 38px;
65
+ background: var(--gold-glow);
66
+ border: 1px solid var(--border-gold);
67
+ border-radius: 10px;
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: center;
71
+ font-size: 18px;
72
+ color: var(--gold);
73
+ flex-shrink: 0;
74
+ }
75
 
76
+ .brand-name {
77
  font-family: 'Cormorant Garamond', serif;
78
+ font-size: 20px;
79
  font-weight: 700;
80
  color: var(--gold);
81
+ display: block;
82
+ line-height: 1.1;
83
  }
84
 
85
+ .brand-sub {
86
+ font-size: 10px;
87
+ color: var(--text-3);
88
+ display: block;
89
+ letter-spacing: 0.8px;
90
+ text-transform: uppercase;
91
+ }
92
+
93
+ .new-chat-btn {
94
+ margin: 14px 14px 10px;
95
+ padding: 10px 14px;
96
+ background: var(--gold-glow);
97
+ border: 1px solid var(--border-gold);
98
+ border-radius: 9px;
99
+ color: var(--gold);
100
+ font-family: 'DM Sans', sans-serif;
101
+ font-size: 13px;
102
+ font-weight: 500;
103
+ cursor: pointer;
104
+ display: flex;
105
+ align-items: center;
106
+ gap: 8px;
107
+ transition: background var(--transition), border-color var(--transition);
108
+ width: calc(100% - 28px);
109
  }
110
 
111
+ .new-chat-btn:hover {
112
+ background: rgba(200,168,75,0.22);
113
+ border-color: var(--gold);
 
114
  }
115
 
116
+ .new-chat-icon { font-size: 16px; font-weight: 300; }
117
+
118
+ .sidebar-section-label {
119
+ padding: 10px 18px 6px;
120
  font-size: 10px;
121
  font-weight: 600;
122
+ color: var(--text-3);
123
+ letter-spacing: 1px;
124
+ }
125
+
126
+ .sessions-list {
127
+ flex: 1;
128
+ overflow-y: auto;
129
+ padding: 0 8px;
130
  }
131
 
132
+ .sessions-list::-webkit-scrollbar { width: 3px; }
133
+ .sessions-list::-webkit-scrollbar-thumb { background: var(--navy-4); border-radius: 2px; }
134
 
135
+ .sessions-empty {
136
+ padding: 12px 10px;
137
  font-size: 12px;
138
+ color: var(--text-3);
139
  font-style: italic;
140
  }
141
 
142
+ .session-item {
143
+ display: flex;
144
+ align-items: center;
145
+ gap: 10px;
146
+ padding: 9px 10px;
147
+ border-radius: 8px;
148
  cursor: pointer;
149
+ transition: background var(--transition);
150
+ margin-bottom: 2px;
151
+ position: relative;
152
+ }
153
+
154
+ .session-item:hover { background: var(--navy-3); }
155
+
156
+ .session-item.active {
157
+ background: var(--navy-4);
158
+ border: 1px solid var(--border-gold);
159
+ }
160
+
161
+ .session-dot {
162
+ width: 6px;
163
+ height: 6px;
164
+ border-radius: 50%;
165
+ background: var(--gold-dim);
166
+ flex-shrink: 0;
167
+ }
168
+
169
+ .session-item.active .session-dot { background: var(--gold); }
170
+
171
+ .session-label {
172
+ font-size: 12px;
173
+ color: var(--text-2);
174
  white-space: nowrap;
175
  overflow: hidden;
176
  text-overflow: ellipsis;
177
+ flex: 1;
 
178
  }
179
 
180
+ .session-item.active .session-label { color: var(--text-1); }
181
 
182
+ .session-count {
183
+ font-size: 10px;
184
+ color: var(--text-3);
185
+ flex-shrink: 0;
186
+ }
187
 
188
+ .sidebar-footer {
189
+ padding: 14px 16px;
190
+ border-top: 1px solid var(--border);
191
+ display: flex;
192
+ flex-direction: column;
193
+ gap: 8px;
194
+ }
195
+
196
+ .footer-disclaimer {
197
+ display: flex;
198
+ gap: 8px;
199
+ align-items: flex-start;
200
  font-size: 11px;
201
+ color: var(--text-3);
202
+ line-height: 1.4;
 
 
 
 
203
  }
204
 
205
+ .disclaimer-icon { color: var(--gold-dim); flex-shrink: 0; }
206
+
207
+ .footer-meta {
208
+ font-size: 10px;
209
+ color: var(--text-3);
210
+ line-height: 1.5;
211
+ }
212
+
213
+ /* ── Main wrapper ── */
214
+ .main-wrapper {
215
  flex: 1;
216
  display: flex;
217
  flex-direction: column;
 
219
  position: relative;
220
  }
221
 
222
+ /* ── Topbar ── */
223
+ .topbar {
224
+ height: var(--topbar-h);
225
+ border-bottom: 1px solid var(--border);
226
  display: flex;
227
+ align-items: center;
228
+ justify-content: space-between;
229
+ padding: 0 24px;
230
+ flex-shrink: 0;
231
+ background: var(--navy);
232
+ }
233
+
234
+ .topbar-title {
235
+ font-family: 'Cormorant Garamond', serif;
236
+ font-size: 17px;
237
+ font-weight: 600;
238
+ color: var(--text-1);
239
+ white-space: nowrap;
240
+ overflow: hidden;
241
+ text-overflow: ellipsis;
242
+ max-width: 500px;
243
+ }
244
+
245
+ .status-pill {
246
+ display: flex;
247
+ align-items: center;
248
+ gap: 6px;
249
+ background: var(--navy-2);
250
+ border: 1px solid var(--border);
251
+ border-radius: 20px;
252
+ padding: 5px 12px;
253
+ font-size: 12px;
254
+ color: var(--text-2);
255
+ }
256
+
257
+ .status-dot {
258
+ width: 6px;
259
+ height: 6px;
260
+ border-radius: 50%;
261
+ background: var(--green-soft);
262
+ transition: background var(--transition);
263
+ }
264
+
265
+ .status-pill.loading .status-dot {
266
+ background: var(--gold);
267
+ animation: pulse 1s infinite;
268
+ }
269
+
270
+ .status-pill.error .status-dot { background: var(--red-soft); }
271
+
272
+ @keyframes pulse {
273
+ 0%, 100% { opacity: 1; }
274
+ 50% { opacity: 0.3; }
275
+ }
276
+
277
+ /* ── Screens ── */
278
+ .screen {
279
+ display: none;
280
+ flex: 1;
281
+ overflow: hidden;
282
+ }
283
+
284
+ .screen.active { display: flex; }
285
+
286
+ /* ── Welcome screen ── */
287
+ .screen-welcome {
288
  align-items: center;
289
  justify-content: center;
290
  padding: 40px 24px 120px;
291
+ flex-direction: column;
292
  }
293
 
294
+ .welcome-inner {
295
+ max-width: 640px;
296
+ width: 100%;
297
+ text-align: center;
298
+ animation: fadeUp 0.5s ease;
299
+ }
300
+
301
+ @keyframes fadeUp {
302
+ from { opacity: 0; transform: translateY(16px); }
303
+ to { opacity: 1; transform: translateY(0); }
304
+ }
305
+
306
+ .welcome-emblem {
307
  font-size: 48px;
308
+ margin-bottom: 20px;
309
+ opacity: 0.7;
310
+ }
311
+
312
+ .welcome-heading {
313
+ font-family: 'Cormorant Garamond', serif;
314
+ font-size: 52px;
315
  font-weight: 700;
316
+ color: var(--text-1);
317
+ margin-bottom: 14px;
318
+ line-height: 1.1;
319
  }
320
 
321
+ .welcome-body {
322
  font-size: 15px;
323
+ color: var(--text-2);
324
+ line-height: 1.7;
 
325
  margin-bottom: 40px;
326
  }
327
 
328
  .suggestion-grid {
329
  display: grid;
330
  grid-template-columns: 1fr 1fr;
331
+ gap: 10px;
 
 
332
  }
333
 
334
+ .suggestion-pill {
335
+ background: var(--navy-2);
336
  border: 1px solid var(--border);
337
  border-radius: 10px;
338
+ padding: 13px 16px;
339
+ font-family: 'DM Sans', sans-serif;
340
  font-size: 13px;
341
+ color: var(--text-2);
342
  cursor: pointer;
343
+ text-align: left;
344
  line-height: 1.5;
345
+ transition: all var(--transition);
346
  }
347
 
348
+ .suggestion-pill:hover {
349
+ background: var(--navy-3);
350
+ border-color: var(--border-gold);
351
+ color: var(--text-1);
352
+ transform: translateY(-1px);
353
  }
354
 
355
+ /* ── Chat screen ── */
356
+ .screen-chat { flex-direction: column; }
357
+
358
+ .messages-container {
359
  flex: 1;
360
  overflow-y: auto;
361
+ padding: 32px 0 16px;
362
  }
363
 
364
+ .messages-container::-webkit-scrollbar { width: 4px; }
365
+ .messages-container::-webkit-scrollbar-thumb { background: var(--navy-4); border-radius: 2px; }
366
 
367
+ .messages-list {
368
+ max-width: 760px;
369
+ margin: 0 auto;
370
+ padding: 0 24px;
371
+ display: flex;
372
+ flex-direction: column;
373
+ gap: 28px;
374
  }
375
 
376
+ /* ── Message bubbles ── */
377
+ .msg { display: flex; flex-direction: column; gap: 8px; animation: fadeUp 0.3s ease; }
378
+
379
+ .msg-user { align-items: flex-end; }
380
+ .msg-ai { align-items: flex-start; }
381
 
382
  .bubble-user {
383
+ background: var(--navy-4);
384
+ border: 1px solid var(--border);
385
  border-radius: 16px 16px 4px 16px;
386
  padding: 12px 16px;
387
+ max-width: 72%;
388
+ color: var(--text-1);
389
  font-size: 14px;
 
390
  line-height: 1.6;
 
391
  }
392
 
393
  .bubble-ai {
394
+ background: var(--navy-2);
395
  border: 1px solid var(--border);
396
  border-left: 3px solid var(--gold);
397
  border-radius: 4px 16px 16px 16px;
398
+ padding: 18px 20px;
399
+ max-width: 88%;
400
+ color: var(--text-1);
401
  font-size: 14px;
402
+ line-height: 1.75;
 
 
403
  position: relative;
404
  }
405
 
406
+ .bubble-ai p { margin-bottom: 12px; }
407
  .bubble-ai p:last-child { margin-bottom: 0; }
408
 
409
+ /* AI bubble meta row */
410
+ .bubble-meta {
411
+ display: flex;
412
+ align-items: center;
413
+ gap: 10px;
414
+ flex-wrap: wrap;
415
+ margin-top: 14px;
416
+ padding-top: 12px;
417
+ border-top: 1px solid var(--border);
418
+ }
419
+
420
+ .verify-badge {
421
  display: inline-flex;
422
  align-items: center;
423
  gap: 5px;
 
425
  font-weight: 600;
426
  padding: 3px 10px;
427
  border-radius: 20px;
 
428
  }
429
 
430
+ .verify-badge.verified {
431
+ background: rgba(76,175,130,0.12);
432
+ color: var(--green-soft);
433
+ border: 1px solid rgba(76,175,130,0.3);
434
  }
435
 
436
+ .verify-badge.unverified {
437
+ background: rgba(224,82,82,0.1);
438
+ color: #e8a060;
439
+ border: 1px solid rgba(224,82,82,0.3);
440
  }
441
 
442
+ .sources-btn {
443
+ display: inline-flex;
444
+ align-items: center;
445
+ gap: 6px;
446
+ font-size: 11px;
447
+ font-weight: 500;
448
  color: var(--gold);
449
+ background: var(--gold-glow);
450
+ border: 1px solid var(--border-gold);
451
+ border-radius: 20px;
452
+ padding: 3px 12px;
453
  cursor: pointer;
454
+ transition: background var(--transition);
455
+ }
456
+
457
+ .sources-btn:hover { background: rgba(200,168,75,0.22); }
458
+
459
+ .latency-label {
460
+ font-size: 11px;
461
+ color: var(--text-3);
462
+ margin-left: auto;
463
+ }
464
+
465
+ .truncated-note {
466
+ font-size: 11px;
467
+ color: var(--text-3);
468
+ margin-top: 8px;
469
+ font-style: italic;
470
+ }
471
+
472
+ /* Loading bubble */
473
+ .bubble-loading {
474
  display: flex;
475
  align-items: center;
476
+ gap: 12px;
477
+ color: var(--text-3);
478
+ font-size: 13px;
479
+ padding: 14px 18px;
480
  }
481
 
482
+ .dots { display: flex; gap: 4px; }
483
+ .dots span {
484
+ width: 5px;
485
+ height: 5px;
486
+ border-radius: 50%;
487
+ background: var(--gold);
488
+ animation: dotBounce 1.2s infinite;
489
+ }
490
+ .dots span:nth-child(2) { animation-delay: 0.2s; }
491
+ .dots span:nth-child(3) { animation-delay: 0.4s; }
492
 
493
+ @keyframes dotBounce {
494
+ 0%, 60%, 100% { transform: translateY(0); opacity: 0.3; }
495
+ 30% { transform: translateY(-6px); opacity: 1; }
496
+ }
497
+
498
+ /* Error bubble */
499
+ .bubble-error {
500
+ background: rgba(224,82,82,0.08);
501
+ border: 1px solid rgba(224,82,82,0.25);
502
+ border-left: 3px solid var(--red-soft);
503
+ border-radius: 4px 16px 16px 16px;
504
+ padding: 14px 18px;
505
+ color: #e8a0a0;
506
+ font-size: 13px;
507
+ max-width: 80%;
508
+ }
509
+
510
+ /* ── Sources side panel ── */
511
+ .sources-overlay {
512
+ display: none;
513
+ position: fixed;
514
+ inset: 0;
515
+ background: rgba(0,0,0,0.4);
516
+ z-index: 100;
517
+ }
518
+
519
+ .sources-panel {
520
+ display: none;
521
+ position: fixed;
522
+ top: 0;
523
+ right: 0;
524
+ width: 380px;
525
+ height: 100vh;
526
+ background: var(--navy-2);
527
+ border-left: 1px solid var(--border);
528
+ z-index: 101;
529
+ flex-direction: column;
530
+ transform: translateX(100%);
531
+ transition: transform 0.3s ease;
532
+ }
533
+
534
+ .sources-panel.open,
535
+ .sources-overlay.open {
536
+ display: flex;
537
+ }
538
+
539
+ .sources-panel.open { transform: translateX(0); }
540
+
541
+ .sources-panel-header {
542
+ display: flex;
543
+ align-items: center;
544
+ justify-content: space-between;
545
+ padding: 18px 20px;
546
+ border-bottom: 1px solid var(--border);
547
+ flex-shrink: 0;
548
+ }
549
+
550
+ .sources-panel-title {
551
+ font-family: 'Cormorant Garamond', serif;
552
+ font-size: 18px;
553
+ font-weight: 600;
554
+ color: var(--text-1);
555
+ }
556
+
557
+ .sources-panel-close {
558
+ background: none;
559
+ border: none;
560
+ color: var(--text-3);
561
+ font-size: 16px;
562
+ cursor: pointer;
563
+ padding: 4px 8px;
564
+ border-radius: 6px;
565
+ transition: color var(--transition);
566
+ }
567
+
568
+ .sources-panel-close:hover { color: var(--text-1); }
569
+
570
+ .sources-panel-body {
571
+ flex: 1;
572
+ overflow-y: auto;
573
+ padding: 16px;
574
  display: flex;
575
  flex-direction: column;
576
+ gap: 12px;
577
  }
578
 
579
+ .sources-panel-body::-webkit-scrollbar { width: 3px; }
580
+ .sources-panel-body::-webkit-scrollbar-thumb { background: var(--navy-4); }
581
+
582
  .source-card {
583
+ background: var(--navy-3);
584
  border: 1px solid var(--border);
585
+ border-radius: 10px;
586
+ padding: 14px;
587
+ transition: border-color var(--transition);
588
  }
589
 
590
+ .source-card:hover { border-color: var(--border-gold); }
591
+
592
+ .source-id {
593
+ font-family: 'Cormorant Garamond', serif;
594
+ font-size: 14px;
595
  font-weight: 600;
596
  color: var(--gold);
597
  margin-bottom: 4px;
598
  }
599
 
600
+ .source-year {
601
+ font-size: 11px;
602
+ color: var(--text-3);
603
+ margin-bottom: 10px;
604
+ }
605
+
606
  .source-excerpt {
607
  font-size: 12px;
608
+ color: var(--text-2);
609
+ line-height: 1.6;
610
+ border-left: 2px solid var(--border-gold);
611
+ padding-left: 10px;
 
 
612
  }
613
 
614
+ .source-num {
615
+ display: inline-flex;
 
616
  align-items: center;
617
+ justify-content: center;
618
+ width: 20px;
619
+ height: 20px;
620
+ background: var(--navy-4);
 
 
 
 
 
 
 
621
  border-radius: 50%;
622
+ font-size: 10px;
623
+ color: var(--text-3);
624
+ margin-bottom: 6px;
625
  }
626
 
627
+ /* ── Input zone ── */
628
+ .input-zone {
629
+ padding: 12px 24px 14px;
630
+ background: linear-gradient(transparent, var(--navy) 30%);
631
+ flex-shrink: 0;
 
632
  }
633
 
634
+ .input-box {
 
635
  display: flex;
636
  align-items: flex-end;
637
  gap: 10px;
638
+ background: var(--navy-2);
639
+ border: 1px solid var(--border);
640
+ border-radius: 14px;
641
+ padding: 10px 10px 10px 16px;
642
+ transition: border-color var(--transition);
643
  }
644
 
645
+ .input-box:focus-within { border-color: var(--border-gold); }
646
+
647
+ .query-textarea {
648
  flex: 1;
649
+ background: none;
650
+ border: none;
651
+ outline: none;
 
652
  font-family: 'DM Sans', sans-serif;
653
  font-size: 14px;
654
+ color: var(--text-1);
655
  resize: none;
656
+ max-height: 140px;
657
+ line-height: 1.6;
658
+ padding: 2px 0;
 
 
659
  }
660
 
661
+ .query-textarea::placeholder { color: var(--text-3); }
 
662
 
663
  .send-btn {
664
+ width: 38px;
665
+ height: 38px;
666
  background: var(--gold);
667
  border: none;
668
+ border-radius: 9px;
669
+ color: var(--navy);
 
 
670
  cursor: pointer;
 
 
671
  display: flex;
672
  align-items: center;
673
  justify-content: center;
674
+ flex-shrink: 0;
675
+ transition: background var(--transition), transform 0.1s;
676
  }
677
 
678
+ .send-btn:hover { background: #dbb95c; transform: scale(1.04); }
679
+ .send-btn:disabled { background: var(--navy-4); color: var(--text-3); cursor: not-allowed; transform: none; }
680
 
681
+ .input-disclaimer {
682
  text-align: center;
683
  font-size: 11px;
684
+ color: var(--text-3);
685
+ margin-top: 8px;
686
+ }