Krishna172912 commited on
Commit
76a0948
Β·
unverified Β·
1 Parent(s): 86a637a

Create style.css

Browse files
Files changed (1) hide show
  1. front_end/style.css +1228 -0
front_end/style.css ADDED
@@ -0,0 +1,1228 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ══════════════════════════════════════════════
2
+ WHATREPO β€” style.css v3
3
+ ══════════════════════════════════════════════ */
4
+
5
+ /* ── Variables ── */
6
+ :root {
7
+ --bg: #08090c;
8
+ --surface: #0f1117;
9
+ --surface2: #141720;
10
+ --surface3: #1a1f2e;
11
+ --border: #1e2535;
12
+ --border2: #252d40;
13
+ --accent: #3b82f6;
14
+ --accent-glow: rgba(59, 130, 246, 0.15);
15
+ --accent-soft: rgba(59, 130, 246, 0.08);
16
+ --accent2: #60a5fa;
17
+ --warn: #f59e0b;
18
+ --warn-bg: rgba(245, 158, 11, 0.08);
19
+ --red: #f87171;
20
+ --green: #34d399;
21
+ --text: #e2e8f4;
22
+ --text-dim: #94a3b8;
23
+ --muted: #475569;
24
+ --font-mono: 'Space Mono', monospace;
25
+ --font-head: 'Syne', sans-serif;
26
+ --header-h: 58px;
27
+ --footer-h: 86px;
28
+ --max-chat: 800px;
29
+ --radius: 10px;
30
+ --radius-sm: 6px;
31
+ }
32
+
33
+ /* ── Reset ── */
34
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
35
+ html { height: 100%; }
36
+
37
+ body {
38
+ background: var(--bg);
39
+ color: var(--text);
40
+ font-family: var(--font-mono);
41
+ display: flex;
42
+ flex-direction: column;
43
+ min-height: 100vh;
44
+ overflow-x: hidden;
45
+ -webkit-font-smoothing: antialiased;
46
+ }
47
+
48
+ /* ══════════════ HEADER ══════════════ */
49
+ #header {
50
+ position: fixed;
51
+ top: 0; left: 0; right: 0;
52
+ height: var(--header-h);
53
+ background: rgba(8, 9, 12, 0.8);
54
+ backdrop-filter: blur(20px);
55
+ -webkit-backdrop-filter: blur(20px);
56
+ border-bottom: 1px solid var(--border);
57
+ display: flex;
58
+ align-items: center;
59
+ justify-content: space-between;
60
+ padding: 0 24px;
61
+ z-index: 200;
62
+ }
63
+
64
+ .logo {
65
+ display: flex;
66
+ align-items: center;
67
+ gap: 10px;
68
+ }
69
+
70
+ .logo-mark svg { display: block; }
71
+
72
+ .logo-text {
73
+ font-family: var(--font-head);
74
+ font-weight: 800;
75
+ font-size: 0.95rem;
76
+ letter-spacing: 0.25em;
77
+ color: var(--text);
78
+ }
79
+
80
+ .status-pill {
81
+ display: flex;
82
+ align-items: center;
83
+ gap: 7px;
84
+ background: var(--surface);
85
+ border: 1px solid var(--border);
86
+ border-radius: 100px;
87
+ padding: 5px 12px 5px 9px;
88
+ font-size: 0.68rem;
89
+ letter-spacing: 0.08em;
90
+ text-transform: uppercase;
91
+ color: var(--text-dim);
92
+ transition: border-color 0.3s, background 0.3s;
93
+ }
94
+
95
+ .status-dot {
96
+ width: 6px; height: 6px;
97
+ border-radius: 50%;
98
+ background: var(--muted);
99
+ transition: background 0.4s, box-shadow 0.4s;
100
+ flex-shrink: 0;
101
+ }
102
+
103
+ .status-dot.active {
104
+ background: var(--accent);
105
+ box-shadow: 0 0 6px var(--accent);
106
+ animation: pulse 1.6s ease-in-out infinite;
107
+ }
108
+
109
+ .status-dot.done { background: var(--green); }
110
+ .status-dot.chat { background: var(--accent); box-shadow: 0 0 6px var(--accent); }
111
+
112
+ @keyframes pulse {
113
+ 0%, 100% { opacity: 1; }
114
+ 50% { opacity: 0.35; }
115
+ }
116
+
117
+ /* ══════════════ WARNING BANNER ══════════════ */
118
+ .warning-banner {
119
+ position: fixed;
120
+ top: var(--header-h);
121
+ left: 0; right: 0;
122
+ background: var(--warn-bg);
123
+ border-bottom: 1px solid rgba(245, 158, 11, 0.2);
124
+ color: var(--warn);
125
+ font-size: 0.75rem;
126
+ display: flex;
127
+ align-items: center;
128
+ justify-content: center;
129
+ gap: 9px;
130
+ padding: 9px 20px;
131
+ z-index: 190;
132
+ letter-spacing: 0.04em;
133
+ animation: bannerIn 0.35s cubic-bezier(0.4,0,0.2,1);
134
+ }
135
+
136
+ .warning-banner.hidden { display: none; }
137
+ .warn-icon { font-size: 0.95rem; }
138
+
139
+ #dismissWarning {
140
+ margin-left: auto;
141
+ background: none;
142
+ border: none;
143
+ color: var(--warn);
144
+ cursor: pointer;
145
+ font-size: 0.85rem;
146
+ opacity: 0.5;
147
+ transition: opacity 0.2s;
148
+ line-height: 1;
149
+ padding: 2px 4px;
150
+ }
151
+ #dismissWarning:hover { opacity: 1; }
152
+
153
+ @keyframes bannerIn {
154
+ from { transform: translateY(-100%); opacity: 0; }
155
+ to { transform: translateY(0); opacity: 1; }
156
+ }
157
+
158
+ /* ══════════════ MAIN ══════════════ */
159
+ main {
160
+ flex: 1;
161
+ margin-top: var(--header-h);
162
+ position: relative;
163
+ }
164
+
165
+ .page {
166
+ position: absolute;
167
+ inset: 0;
168
+ opacity: 0;
169
+ pointer-events: none;
170
+ transition: opacity 0.45s cubic-bezier(0.4, 0, 0.2, 1);
171
+ display: flex;
172
+ flex-direction: column;
173
+ }
174
+
175
+ .page.active {
176
+ opacity: 1;
177
+ pointer-events: all;
178
+ position: relative;
179
+ min-height: calc(100vh - var(--header-h));
180
+ }
181
+
182
+ /* ══════════════ PAGE 1: LANDING ══════════════ */
183
+ #landingPage {
184
+ align-items: center;
185
+ justify-content: center;
186
+ overflow: hidden;
187
+ }
188
+
189
+ .noise-overlay {
190
+ position: absolute;
191
+ inset: 0;
192
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E");
193
+ background-size: 200px;
194
+ pointer-events: none;
195
+ z-index: 1;
196
+ opacity: 0.4;
197
+ }
198
+
199
+ .grid-bg {
200
+ position: absolute;
201
+ inset: 0;
202
+ background-image:
203
+ linear-gradient(var(--border) 1px, transparent 1px),
204
+ linear-gradient(90deg, var(--border) 1px, transparent 1px);
205
+ background-size: 56px 56px;
206
+ opacity: 0.25;
207
+ pointer-events: none;
208
+ mask-image: radial-gradient(ellipse 70% 70% at 50% 50%, black 30%, transparent 100%);
209
+ z-index: 1;
210
+ }
211
+
212
+ .glow-orb {
213
+ position: absolute;
214
+ border-radius: 50%;
215
+ pointer-events: none;
216
+ z-index: 1;
217
+ filter: blur(80px);
218
+ opacity: 0.35;
219
+ }
220
+
221
+ .orb-1 {
222
+ width: 500px; height: 500px;
223
+ background: radial-gradient(circle, rgba(59,130,246,0.4) 0%, transparent 70%);
224
+ top: -120px; left: -80px;
225
+ animation: orbDrift 12s ease-in-out infinite alternate;
226
+ }
227
+
228
+ .orb-2 {
229
+ width: 400px; height: 400px;
230
+ background: radial-gradient(circle, rgba(99,102,241,0.3) 0%, transparent 70%);
231
+ bottom: -80px; right: -60px;
232
+ animation: orbDrift 16s ease-in-out infinite alternate-reverse;
233
+ }
234
+
235
+ @keyframes orbDrift {
236
+ from { transform: translate(0, 0) scale(1); }
237
+ to { transform: translate(30px, 20px) scale(1.08); }
238
+ }
239
+
240
+ .landing-inner {
241
+ position: relative;
242
+ z-index: 2;
243
+ display: flex;
244
+ flex-direction: column;
245
+ align-items: center;
246
+ gap: 0;
247
+ padding: 60px 24px 80px;
248
+ text-align: center;
249
+ max-width: 720px;
250
+ width: 100%;
251
+ }
252
+
253
+ .hero-eyebrow {
254
+ display: flex;
255
+ align-items: center;
256
+ gap: 8px;
257
+ font-size: 0.7rem;
258
+ letter-spacing: 0.2em;
259
+ text-transform: uppercase;
260
+ color: var(--accent2);
261
+ margin-bottom: 28px;
262
+ animation: fadeUp 0.6s ease both;
263
+ }
264
+
265
+ .eyebrow-dot {
266
+ width: 5px; height: 5px;
267
+ border-radius: 50%;
268
+ background: var(--accent);
269
+ box-shadow: 0 0 8px var(--accent);
270
+ }
271
+
272
+ .hero-title {
273
+ font-family: var(--font-head);
274
+ font-weight: 800;
275
+ line-height: 1.02;
276
+ letter-spacing: -0.01em;
277
+ margin-bottom: 24px;
278
+ display: flex;
279
+ flex-direction: column;
280
+ gap: 0;
281
+ }
282
+
283
+ .title-line {
284
+ font-size: clamp(3rem, 8vw, 5.5rem);
285
+ color: var(--text);
286
+ display: block;
287
+ animation: fadeUp 0.6s ease both;
288
+ }
289
+
290
+ .title-line:nth-child(1) { animation-delay: 0.05s; }
291
+ .title-line:nth-child(2) { animation-delay: 0.12s; }
292
+ .title-line:nth-child(3) { animation-delay: 0.19s; }
293
+
294
+ .accent-line {
295
+ color: var(--accent);
296
+ position: relative;
297
+ display: inline-block;
298
+ }
299
+
300
+ .hero-sub {
301
+ color: var(--text-dim);
302
+ font-size: 0.88rem;
303
+ line-height: 1.7;
304
+ max-width: 460px;
305
+ letter-spacing: 0.01em;
306
+ margin-bottom: 40px;
307
+ animation: fadeUp 0.6s ease 0.25s both;
308
+ }
309
+
310
+ .input-card {
311
+ width: min(620px, 90vw);
312
+ background: var(--surface);
313
+ border: 1px solid var(--border2);
314
+ border-radius: var(--radius);
315
+ padding: 6px 6px 6px 0;
316
+ display: flex;
317
+ align-items: center;
318
+ gap: 0;
319
+ transition: border-color 0.25s, box-shadow 0.25s;
320
+ animation: fadeUp 0.6s ease 0.32s both;
321
+ margin-bottom: 20px;
322
+ }
323
+
324
+ .input-card:focus-within {
325
+ border-color: var(--accent);
326
+ box-shadow: 0 0 0 3px var(--accent-glow), 0 8px 40px rgba(59,130,246,0.08);
327
+ }
328
+
329
+ .input-wrap {
330
+ flex: 1;
331
+ display: flex;
332
+ align-items: center;
333
+ gap: 0;
334
+ }
335
+
336
+ .input-icon {
337
+ padding: 0 12px 0 16px;
338
+ color: var(--accent);
339
+ display: flex;
340
+ align-items: center;
341
+ flex-shrink: 0;
342
+ }
343
+
344
+ input, textarea {
345
+ -webkit-user-select: auto;
346
+ user-select: auto;
347
+ cursor: text;
348
+ }
349
+
350
+ .input-wrap input {
351
+ flex: 1;
352
+ background: none;
353
+ border: none;
354
+ padding: 13px 12px 13px 0;
355
+ color: var(--text);
356
+ font-family: var(--font-mono);
357
+ font-size: 0.84rem;
358
+ outline: none;
359
+ letter-spacing: 0.01em;
360
+ }
361
+
362
+ .input-wrap input::placeholder { color: var(--muted); }
363
+
364
+ .analyse-btn {
365
+ display: flex;
366
+ align-items: center;
367
+ gap: 8px;
368
+ background: var(--accent);
369
+ color: #fff;
370
+ border: none;
371
+ border-radius: 7px;
372
+ padding: 11px 20px;
373
+ font-family: var(--font-head);
374
+ font-weight: 700;
375
+ font-size: 0.82rem;
376
+ letter-spacing: 0.08em;
377
+ cursor: pointer;
378
+ transition: background 0.2s, transform 0.2s, box-shadow 0.2s;
379
+ flex-shrink: 0;
380
+ white-space: nowrap;
381
+ }
382
+
383
+ .analyse-btn:hover {
384
+ background: var(--accent2);
385
+ transform: translateY(-1px);
386
+ box-shadow: 0 6px 24px rgba(59,130,246,0.35);
387
+ }
388
+
389
+ .analyse-btn:active { transform: translateY(0); }
390
+
391
+ .btn-arrow-icon {
392
+ transition: transform 0.2s;
393
+ }
394
+
395
+ .analyse-btn:hover .btn-arrow-icon { transform: translateX(2px); }
396
+
397
+ .landing-hints {
398
+ display: flex;
399
+ flex-wrap: wrap;
400
+ justify-content: center;
401
+ gap: 8px;
402
+ animation: fadeUp 0.6s ease 0.4s both;
403
+ }
404
+
405
+ .hint-chip {
406
+ background: var(--surface);
407
+ border: 1px solid var(--border);
408
+ border-radius: 100px;
409
+ padding: 5px 13px;
410
+ font-size: 0.72rem;
411
+ color: var(--text-dim);
412
+ letter-spacing: 0.03em;
413
+ transition: border-color 0.2s, color 0.2s;
414
+ cursor: default;
415
+ }
416
+
417
+ .hint-chip:hover {
418
+ border-color: var(--border2);
419
+ color: var(--text);
420
+ }
421
+
422
+ @keyframes fadeUp {
423
+ from { opacity: 0; transform: translateY(18px); }
424
+ to { opacity: 1; transform: translateY(0); }
425
+ }
426
+
427
+ /* ══════════════ PAGE 2: PROCESSING ══════════════ */
428
+ #processingPage {
429
+ align-items: center;
430
+ justify-content: center;
431
+ }
432
+
433
+ .processing-inner {
434
+ display: flex;
435
+ flex-direction: column;
436
+ align-items: stretch;
437
+ gap: 24px;
438
+ padding: 48px 24px;
439
+ width: min(560px, 92vw);
440
+ }
441
+
442
+ .processing-header {
443
+ display: flex;
444
+ align-items: center;
445
+ gap: 18px;
446
+ }
447
+
448
+ .proc-spinner {
449
+ width: 44px;
450
+ height: 44px;
451
+ flex-shrink: 0;
452
+ }
453
+
454
+ .spinner-ring {
455
+ width: 100%;
456
+ height: 100%;
457
+ animation: spinRing 1.1s linear infinite;
458
+ transform-origin: center;
459
+ }
460
+
461
+ @keyframes spinRing {
462
+ to { transform: rotate(360deg); }
463
+ }
464
+
465
+ .proc-meta {
466
+ display: flex;
467
+ flex-direction: column;
468
+ gap: 4px;
469
+ }
470
+
471
+ .proc-title {
472
+ font-family: var(--font-head);
473
+ font-weight: 700;
474
+ font-size: 1.05rem;
475
+ color: var(--text);
476
+ letter-spacing: 0.05em;
477
+ }
478
+
479
+ .proc-subtitle {
480
+ font-size: 0.73rem;
481
+ color: var(--muted);
482
+ letter-spacing: 0.06em;
483
+ text-transform: uppercase;
484
+ transition: opacity 0.3s;
485
+ }
486
+
487
+ /* ── Steps container ── */
488
+ .steps-container {
489
+ display: flex;
490
+ flex-direction: column;
491
+ gap: 8px;
492
+ }
493
+
494
+ /* ── Step box ── */
495
+ .step-box {
496
+ display: flex;
497
+ align-items: center;
498
+ background: var(--surface);
499
+ border: 1px solid var(--border);
500
+ border-radius: var(--radius);
501
+ padding: 14px 18px;
502
+ opacity: 0;
503
+ transform: translateY(8px);
504
+ animation: stepIn 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards;
505
+ /* Only transition the properties we animate manually via JS */
506
+ transition: height 0.38s cubic-bezier(0.4, 0, 0.2, 1),
507
+ padding-top 0.38s cubic-bezier(0.4, 0, 0.2, 1),
508
+ padding-bottom 0.38s cubic-bezier(0.4, 0, 0.2, 1),
509
+ background 0.3s ease,
510
+ border-color 0.3s ease;
511
+ overflow: hidden;
512
+ }
513
+
514
+ .step-box.done-green {
515
+ background: rgba(52, 211, 153, 0.04);
516
+ border-color: rgba(52, 211, 153, 0.18);
517
+ }
518
+
519
+ .step-box.warn-yellow {
520
+ background: var(--warn-bg);
521
+ border-color: rgba(245, 158, 11, 0.22);
522
+ }
523
+
524
+ .step-box.err-red {
525
+ background: rgba(248, 113, 113, 0.05);
526
+ border-color: rgba(248, 113, 113, 0.22);
527
+ }
528
+
529
+ /* ── Step title row ── */
530
+ .step-title {
531
+ font-family: var(--font-head);
532
+ font-weight: 600;
533
+ font-size: 0.82rem;
534
+ letter-spacing: 0.05em;
535
+ display: flex;
536
+ align-items: center;
537
+ gap: 10px;
538
+ height: 22px; /* fixed so collapsed height = padding*2 + 22 = ~46 */
539
+ /* margin-bottom: 10px; */
540
+ }
541
+
542
+ .step-box .sub-items {
543
+ display: flex;
544
+ flex-direction: column;
545
+ gap: 6px;
546
+ transition: opacity 0.2s;
547
+ }
548
+
549
+ /* ── Step icon wrapper ── */
550
+ .step-icon-wrap {
551
+ width: 16px;
552
+ height: 16px;
553
+ flex-shrink: 0;
554
+ display: flex;
555
+ align-items: center;
556
+ justify-content: center;
557
+ }
558
+
559
+ /* CSS ring spinner β€” replaces the old character spinner */
560
+ .step-ring-spinner {
561
+ display: block;
562
+ width: 13px;
563
+ height: 13px;
564
+ border: 1.5px solid var(--border2);
565
+ border-top-color: var(--accent);
566
+ border-radius: 50%;
567
+ animation: spinRing 0.7s linear infinite;
568
+ }
569
+
570
+ /* Status icon that replaces spinner when done */
571
+ .step-status-icon {
572
+ font-size: 11px;
573
+ line-height: 1;
574
+ font-weight: 700;
575
+ display: block;
576
+ }
577
+ .step-status-icon.green { color: var(--green); }
578
+ .step-status-icon.warn { color: var(--warn); }
579
+ .step-status-icon.err { color: var(--red); }
580
+
581
+ /* Collapsed badge (Done / Warning / Error label) */
582
+ .step-collapsed-badge {
583
+ font-size: 0.67rem;
584
+ letter-spacing: 0.04em;
585
+ margin-left: 4px;
586
+ opacity: 0;
587
+ transition: opacity 0.25s ease 0.25s;
588
+ font-family: var(--font-mono);
589
+ }
590
+
591
+ /* Badge becomes visible only when height has settled */
592
+ .step-box.done-green .step-collapsed-badge { color: var(--green); }
593
+ .step-box.warn-yellow .step-collapsed-badge { color: var(--warn); }
594
+ .step-box.err-red .step-collapsed-badge { color: var(--red); }
595
+
596
+ /* We reveal badge via JS after transition ends, not via .collapsed class */
597
+ .step-collapsed-badge.visible { opacity: 1; }
598
+
599
+ @keyframes stepIn {
600
+ to { opacity: 1; transform: translateY(0); }
601
+ }
602
+
603
+ .sub-item {
604
+ display: flex;
605
+ align-items: center;
606
+ gap: 9px;
607
+ font-size: 0.73rem;
608
+ color: var(--muted);
609
+ }
610
+
611
+ .sub-item.done { color: var(--green); }
612
+
613
+ .sub-dot {
614
+ width: 5px; height: 5px;
615
+ border-radius: 50%;
616
+ background: var(--muted);
617
+ flex-shrink: 0;
618
+ }
619
+
620
+ .sub-item.done .sub-dot { background: var(--green); }
621
+
622
+ /* ── Processing action card (error / warning gate) ── */
623
+ .proc-action-card {
624
+ display: flex;
625
+ align-items: flex-start;
626
+ gap: 14px;
627
+ border-radius: var(--radius);
628
+ padding: 18px 20px;
629
+ opacity: 0;
630
+ transform: translateY(8px);
631
+ animation: stepIn 0.35s 0.1s cubic-bezier(0.4, 0, 0.2, 1) forwards;
632
+ margin-top: 4px;
633
+ }
634
+
635
+ .proc-action-card.proc-action-error {
636
+ background: rgba(248, 113, 113, 0.06);
637
+ border: 1px solid rgba(248, 113, 113, 0.25);
638
+ }
639
+
640
+ .proc-action-card.proc-action-warning {
641
+ background: var(--warn-bg);
642
+ border: 1px solid rgba(245, 158, 11, 0.25);
643
+ }
644
+
645
+ .proc-action-icon {
646
+ font-size: 1.1rem;
647
+ flex-shrink: 0;
648
+ margin-top: 2px;
649
+ }
650
+
651
+ .proc-action-card.proc-action-error .proc-action-icon { color: var(--red); }
652
+ .proc-action-card.proc-action-warning .proc-action-icon { color: var(--warn); }
653
+
654
+ .proc-action-body {
655
+ display: flex;
656
+ flex-direction: column;
657
+ gap: 6px;
658
+ }
659
+
660
+ .proc-action-title {
661
+ font-family: var(--font-head);
662
+ font-weight: 700;
663
+ font-size: 0.88rem;
664
+ letter-spacing: 0.04em;
665
+ }
666
+
667
+ .proc-action-card.proc-action-error .proc-action-title { color: var(--red); }
668
+ .proc-action-card.proc-action-warning .proc-action-title { color: var(--warn); }
669
+
670
+ .proc-action-desc {
671
+ font-size: 0.75rem;
672
+ color: var(--text-dim);
673
+ line-height: 1.6;
674
+ letter-spacing: 0.01em;
675
+ }
676
+
677
+ .proc-action-btn {
678
+ margin-top: 10px;
679
+ align-self: flex-start;
680
+ border: none;
681
+ border-radius: var(--radius-sm);
682
+ padding: 9px 18px;
683
+ font-family: var(--font-head);
684
+ font-weight: 700;
685
+ font-size: 0.78rem;
686
+ letter-spacing: 0.06em;
687
+ cursor: pointer;
688
+ transition: opacity 0.2s, transform 0.15s, box-shadow 0.2s;
689
+ }
690
+
691
+ .proc-action-btn:hover { opacity: 0.88; transform: translateY(-1px); }
692
+ .proc-action-btn:active { transform: translateY(0); }
693
+
694
+ .proc-btn-error {
695
+ background: rgba(248, 113, 113, 0.15);
696
+ color: var(--red);
697
+ border: 1px solid rgba(248, 113, 113, 0.3);
698
+ }
699
+
700
+ .proc-btn-error:hover { box-shadow: 0 4px 16px rgba(248, 113, 113, 0.15); }
701
+
702
+ .proc-btn-warning {
703
+ background: rgba(245, 158, 11, 0.12);
704
+ color: var(--warn);
705
+ border: 1px solid rgba(245, 158, 11, 0.3);
706
+ }
707
+
708
+ .proc-btn-warning:hover { box-shadow: 0 4px 16px rgba(245, 158, 11, 0.12); }
709
+
710
+ /* ══════════════ PAGE 3: CHAT ══════════════ */
711
+ #chatPage {
712
+ align-items: stretch;
713
+ }
714
+
715
+ .chat-messages {
716
+ flex: 1;
717
+ width: 100%;
718
+ max-width: var(--max-chat);
719
+ margin: 0 auto;
720
+ padding: 32px 28px calc(var(--footer-h) + 40px);
721
+ display: flex;
722
+ flex-direction: column;
723
+ gap: 24px;
724
+ overflow-y: auto;
725
+ height: calc(100vh - var(--header-h));
726
+ scroll-behavior: smooth;
727
+ }
728
+
729
+ /* Scrollbar */
730
+ .chat-messages::-webkit-scrollbar { width: 4px; }
731
+ .chat-messages::-webkit-scrollbar-track { background: transparent; }
732
+ .chat-messages::-webkit-scrollbar-thumb { background: var(--border2); border-radius: 4px; }
733
+
734
+ /* Welcome state */
735
+ .chat-welcome {
736
+ flex: 1;
737
+ display: flex;
738
+ flex-direction: column;
739
+ align-items: center;
740
+ justify-content: center;
741
+ text-align: center;
742
+ padding: 80px 20px;
743
+ gap: 12px;
744
+ animation: fadeUp 0.5s ease both;
745
+ }
746
+
747
+ .welcome-icon {
748
+ font-size: 2rem;
749
+ margin-bottom: 8px;
750
+ opacity: 0.6;
751
+ }
752
+
753
+ .welcome-title {
754
+ font-family: var(--font-head);
755
+ font-weight: 700;
756
+ font-size: clamp(1.5rem, 4vw, 2.2rem);
757
+ color: var(--text);
758
+ letter-spacing: 0.02em;
759
+ }
760
+
761
+ .welcome-sub {
762
+ color: var(--muted);
763
+ font-size: 0.78rem;
764
+ letter-spacing: 0.06em;
765
+ }
766
+
767
+ .welcome-chips {
768
+ display: flex;
769
+ flex-wrap: wrap;
770
+ gap: 8px;
771
+ justify-content: center;
772
+ margin-top: 20px;
773
+ }
774
+
775
+ .welcome-chip {
776
+ background: var(--surface);
777
+ border: 1px solid var(--border2);
778
+ border-radius: 8px;
779
+ padding: 9px 16px;
780
+ font-size: 0.75rem;
781
+ color: var(--text-dim);
782
+ cursor: pointer;
783
+ transition: border-color 0.2s, color 0.2s, background 0.2s, transform 0.15s;
784
+ letter-spacing: 0.02em;
785
+ }
786
+
787
+ .welcome-chip:hover {
788
+ border-color: var(--accent);
789
+ color: var(--accent2);
790
+ background: var(--accent-soft);
791
+ transform: translateY(-1px);
792
+ }
793
+
794
+ /* ── Message groups ── */
795
+ .msg-group {
796
+ display: flex;
797
+ flex-direction: column;
798
+ gap: 4px;
799
+ animation: msgIn 0.35s cubic-bezier(0.4, 0, 0.2, 1) both;
800
+ }
801
+
802
+ .msg-group.user { align-items: flex-end; }
803
+ .msg-group.bot { align-items: flex-start; }
804
+
805
+ @keyframes msgIn {
806
+ from { opacity: 0; transform: translateY(10px); }
807
+ to { opacity: 1; transform: translateY(0); }
808
+ }
809
+
810
+ .msg-sender {
811
+ font-size: 0.65rem;
812
+ letter-spacing: 0.1em;
813
+ text-transform: uppercase;
814
+ color: var(--muted);
815
+ padding: 0 4px;
816
+ }
817
+
818
+ /* ── User bubble: stays boxed ── */
819
+ .msg-bubble.user {
820
+ max-width: min(520px, 88%);
821
+ padding: 11px 16px;
822
+ border-radius: var(--radius);
823
+ border-bottom-right-radius: 3px;
824
+ font-size: 0.87rem;
825
+ line-height: 1.7;
826
+ background: var(--accent-soft);
827
+ border: 1px solid rgba(59, 130, 246, 0.2);
828
+ color: var(--text);
829
+ word-break: break-word;
830
+ -webkit-user-select: text;
831
+ user-select: text;
832
+ cursor: text;
833
+ }
834
+
835
+ /* ── Bot bubble: transparent, no border ── */
836
+ .msg-bubble.bot {
837
+ background: transparent;
838
+ border: none;
839
+ color: var(--text);
840
+ font-size: 0.87rem;
841
+ line-height: 1.75;
842
+ word-break: break-word;
843
+ -webkit-user-select: text;
844
+ user-select: text;
845
+ cursor: text;
846
+ padding: 2px 0;
847
+ width: 100%;
848
+ }
849
+
850
+ /* ── Markdown elements inside bot bubble ── */
851
+ .msg-bubble.bot p {
852
+ margin-bottom: 0.75em;
853
+ }
854
+ .msg-bubble.bot p:last-child {
855
+ margin-bottom: 0;
856
+ }
857
+
858
+ .msg-bubble.bot h1,
859
+ .msg-bubble.bot h2,
860
+ .msg-bubble.bot h3,
861
+ .msg-bubble.bot h4 {
862
+ font-family: var(--font-head);
863
+ font-weight: 700;
864
+ color: var(--text);
865
+ margin: 1.1em 0 0.45em;
866
+ letter-spacing: 0.02em;
867
+ }
868
+ .msg-bubble.bot h1 { font-size: 1.2rem; }
869
+ .msg-bubble.bot h2 { font-size: 1.05rem; }
870
+ .msg-bubble.bot h3 { font-size: 0.95rem; }
871
+
872
+ .msg-bubble.bot ul,
873
+ .msg-bubble.bot ol {
874
+ padding-left: 1.4em;
875
+ margin-bottom: 0.75em;
876
+ }
877
+ .msg-bubble.bot li { margin-bottom: 0.25em; }
878
+
879
+ .msg-bubble.bot strong { color: var(--text); font-weight: 700; }
880
+ .msg-bubble.bot em { color: var(--text-dim); }
881
+
882
+ .msg-bubble.bot a {
883
+ color: var(--accent2);
884
+ text-decoration: underline;
885
+ text-underline-offset: 3px;
886
+ }
887
+
888
+ .msg-bubble.bot blockquote {
889
+ border-left: 3px solid var(--border2);
890
+ padding-left: 12px;
891
+ color: var(--text-dim);
892
+ margin: 0.75em 0;
893
+ font-style: italic;
894
+ }
895
+
896
+ /* Inline code */
897
+ .msg-bubble.bot :not(pre) > code {
898
+ font-family: var(--font-mono);
899
+ background: var(--surface3);
900
+ border: 1px solid var(--border2);
901
+ border-radius: 4px;
902
+ padding: 1px 6px;
903
+ font-size: 0.8em;
904
+ color: var(--accent2);
905
+ word-break: break-all;
906
+ }
907
+
908
+ /* ── Code block wrapper ── */
909
+ .code-block-wrap {
910
+ margin: 10px 0;
911
+ border: 1px solid var(--border2);
912
+ border-radius: var(--radius);
913
+ overflow: hidden;
914
+ background: var(--surface2);
915
+ }
916
+
917
+ .code-block-header {
918
+ display: flex;
919
+ align-items: center;
920
+ justify-content: space-between;
921
+ padding: 7px 14px;
922
+ background: var(--surface3);
923
+ border-bottom: 1px solid var(--border);
924
+ }
925
+
926
+ .code-lang-label {
927
+ font-size: 0.67rem;
928
+ color: var(--muted);
929
+ letter-spacing: 0.08em;
930
+ text-transform: uppercase;
931
+ font-family: var(--font-mono);
932
+ }
933
+
934
+ .code-copy-btn {
935
+ display: inline-flex;
936
+ align-items: center;
937
+ gap: 5px;
938
+ background: none;
939
+ border: 1px solid var(--border2);
940
+ border-radius: 4px;
941
+ padding: 3px 9px;
942
+ font-size: 0.67rem;
943
+ font-family: var(--font-mono);
944
+ color: var(--muted);
945
+ cursor: pointer;
946
+ letter-spacing: 0.04em;
947
+ transition: color 0.2s, border-color 0.2s, background 0.2s;
948
+ }
949
+
950
+ .code-copy-btn:hover {
951
+ color: var(--text-dim);
952
+ border-color: var(--accent);
953
+ background: var(--accent-soft);
954
+ }
955
+
956
+ .msg-bubble.bot pre {
957
+ margin: 0;
958
+ padding: 14px 16px;
959
+ overflow-x: auto;
960
+ line-height: 1.6;
961
+ border: none;
962
+ border-radius: 0;
963
+ background: transparent;
964
+ }
965
+
966
+ .msg-bubble.bot pre code {
967
+ font-family: var(--font-mono);
968
+ font-size: 0.79rem;
969
+ background: none;
970
+ border: none;
971
+ padding: 0;
972
+ color: var(--text);
973
+ word-break: normal;
974
+ }
975
+
976
+ /* ── Copy response button ── */
977
+ .msg-copy-btn {
978
+ display: inline-flex;
979
+ align-items: center;
980
+ gap: 5px;
981
+ background: none;
982
+ border: 1px solid var(--border);
983
+ border-radius: 5px;
984
+ padding: 4px 10px;
985
+ font-size: 0.65rem;
986
+ font-family: var(--font-mono);
987
+ color: var(--muted);
988
+ cursor: pointer;
989
+ letter-spacing: 0.04em;
990
+ transition: color 0.2s, border-color 0.2s;
991
+ margin-top: 2px;
992
+ align-self: flex-start;
993
+ }
994
+
995
+ .msg-copy-btn:hover {
996
+ color: var(--text-dim);
997
+ border-color: var(--border2);
998
+ }
999
+
1000
+ .msg-meta {
1001
+ font-size: 0.62rem;
1002
+ color: var(--muted);
1003
+ padding: 0 4px;
1004
+ letter-spacing: 0.04em;
1005
+ }
1006
+
1007
+ /* ══════════════ THINKING / TOOL-USE SECTION ══════════════ */
1008
+ .thinking-wrap {
1009
+ display: flex;
1010
+ flex-direction: column;
1011
+ gap: 0;
1012
+ align-self: flex-start;
1013
+ /* Indent + left accent bar to distinguish from main response */
1014
+ padding-left: 14px;
1015
+ border-left: 2px solid var(--border2);
1016
+ margin-left: 2px;
1017
+ width: calc(100% - 16px);
1018
+ animation: msgIn 0.35s cubic-bezier(0.4, 0, 0.2, 1) both;
1019
+ }
1020
+
1021
+ .thinking-toggle {
1022
+ display: inline-flex;
1023
+ align-items: center;
1024
+ gap: 7px;
1025
+ padding: 5px 0;
1026
+ background: transparent;
1027
+ border: none;
1028
+ font-size: 0.7rem;
1029
+ color: var(--muted);
1030
+ cursor: pointer;
1031
+ transition: color 0.2s;
1032
+ user-select: none;
1033
+ letter-spacing: 0.04em;
1034
+ width: 100%;
1035
+ text-align: left;
1036
+ }
1037
+
1038
+ .thinking-toggle:hover { color: var(--text-dim); }
1039
+
1040
+ .thinking-toggle.active { color: var(--accent2); }
1041
+
1042
+ .thinking-spinner {
1043
+ width: 12px;
1044
+ height: 12px;
1045
+ flex-shrink: 0;
1046
+ }
1047
+
1048
+ .thinking-spinner svg {
1049
+ animation: spinRing 0.9s linear infinite;
1050
+ display: block;
1051
+ }
1052
+
1053
+ .thinking-spinner.done svg { animation: none; }
1054
+
1055
+ .thinking-chevron {
1056
+ margin-left: auto;
1057
+ font-size: 0.65rem;
1058
+ transition: transform 0.25s ease;
1059
+ opacity: 0.45;
1060
+ }
1061
+
1062
+ .thinking-toggle.open .thinking-chevron { transform: rotate(180deg); }
1063
+
1064
+ /* Panel */
1065
+ .thinking-steps-panel {
1066
+ overflow: hidden;
1067
+ max-height: 0;
1068
+ transition: max-height 0.35s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.25s ease;
1069
+ opacity: 0;
1070
+ }
1071
+
1072
+ .thinking-steps-panel.open {
1073
+ max-height: 400px;
1074
+ opacity: 1;
1075
+ }
1076
+
1077
+ .thinking-steps-inner {
1078
+ padding: 8px 0 10px;
1079
+ display: flex;
1080
+ flex-direction: column;
1081
+ gap: 7px;
1082
+ overflow-y: auto;
1083
+ max-height: 380px;
1084
+ }
1085
+
1086
+ /* Individual thinking step */
1087
+ .thinking-step {
1088
+ display: flex;
1089
+ align-items: flex-start;
1090
+ gap: 8px;
1091
+ font-size: 0.75rem;
1092
+ color: #ffffff;
1093
+ line-height: 1.55;
1094
+ opacity: 0.75;
1095
+ }
1096
+
1097
+ .thinking-step-dot {
1098
+ width: 4px;
1099
+ height: 4px;
1100
+ border-radius: 50%;
1101
+ background: var(--muted);
1102
+ flex-shrink: 0;
1103
+ margin-top: 6px;
1104
+ }
1105
+
1106
+ .thinking-step-text {
1107
+ flex: 1;
1108
+ }
1109
+
1110
+ .thinking-step.current {
1111
+ color: var(--text-dim);
1112
+ opacity: 1;
1113
+ }
1114
+
1115
+ .thinking-step.current .thinking-step-dot {
1116
+ background: var(--accent);
1117
+ box-shadow: 0 0 4px var(--accent);
1118
+ }
1119
+
1120
+ .thinking-step.done-step {
1121
+ opacity: 0.55;
1122
+ }
1123
+
1124
+ .thinking-step.done-step .thinking-step-dot {
1125
+ background: var(--green);
1126
+ }
1127
+
1128
+ /* ══════════════ FOOTER ══════════════ */
1129
+ #footer {
1130
+ position: fixed;
1131
+ bottom: 0; left: 0; right: 0;
1132
+ padding: 12px 20px 14px;
1133
+ background: rgba(8, 9, 12, 0.85);
1134
+ backdrop-filter: blur(20px);
1135
+ -webkit-backdrop-filter: blur(20px);
1136
+ border-top: 1px solid var(--border);
1137
+ z-index: 200;
1138
+ display: flex;
1139
+ flex-direction: column;
1140
+ align-items: center;
1141
+ gap: 6px;
1142
+ transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1);
1143
+ }
1144
+
1145
+ #footer.hidden { display: none; }
1146
+
1147
+ .chat-input-card {
1148
+ width: min(var(--max-chat), calc(100vw - 40px));
1149
+ background: var(--surface);
1150
+ border: 1px solid var(--border2);
1151
+ border-radius: var(--radius);
1152
+ display: flex;
1153
+ align-items: flex-end;
1154
+ gap: 0;
1155
+ transition: border-color 0.25s, box-shadow 0.25s;
1156
+ padding: 4px 4px 4px 0;
1157
+ }
1158
+
1159
+ .chat-input-card:focus-within {
1160
+ border-color: var(--accent);
1161
+ box-shadow: 0 0 0 3px var(--accent-glow);
1162
+ }
1163
+
1164
+ #chatInput {
1165
+ flex: 1;
1166
+ background: none;
1167
+ border: none;
1168
+ padding: 12px 14px;
1169
+ color: var(--text);
1170
+ font-family: var(--font-mono);
1171
+ font-size: 0.85rem;
1172
+ outline: none;
1173
+ resize: none;
1174
+ line-height: 1.55;
1175
+ max-height: 160px;
1176
+ overflow-y: auto;
1177
+ letter-spacing: 0.01em;
1178
+ }
1179
+
1180
+ #chatInput::placeholder { color: var(--muted); }
1181
+
1182
+ .send-btn {
1183
+ background: var(--accent);
1184
+ color: #fff;
1185
+ border: none;
1186
+ border-radius: 7px;
1187
+ width: 38px;
1188
+ height: 38px;
1189
+ display: flex;
1190
+ align-items: center;
1191
+ justify-content: center;
1192
+ cursor: pointer;
1193
+ flex-shrink: 0;
1194
+ transition: background 0.2s, transform 0.15s, box-shadow 0.2s;
1195
+ margin: 5px 0px;
1196
+ }
1197
+
1198
+ .send-btn:hover {
1199
+ background: var(--accent2);
1200
+ transform: scale(1.05);
1201
+ box-shadow: 0 4px 16px rgba(59,130,246,0.35);
1202
+ }
1203
+
1204
+ .send-btn:active { transform: scale(0.96); }
1205
+
1206
+ .footer-hint {
1207
+ font-size: 0.62rem;
1208
+ color: var(--muted);
1209
+ letter-spacing: 0.06em;
1210
+ }
1211
+
1212
+ kbd {
1213
+ background: var(--surface2);
1214
+ border: 1px solid var(--border2);
1215
+ border-radius: 3px;
1216
+ padding: 1px 5px;
1217
+ font-family: var(--font-mono);
1218
+ font-size: 0.6rem;
1219
+ color: var(--text-dim);
1220
+ }
1221
+
1222
+ /* ══════════════ UTILITIES ══════════════ */
1223
+ .hidden { display: none !important; }
1224
+
1225
+ ::-webkit-scrollbar { width: 5px; height: 5px; }
1226
+ ::-webkit-scrollbar-track { background: transparent; }
1227
+ ::-webkit-scrollbar-thumb { background: var(--border2); border-radius: 4px; }
1228
+ ::-webkit-scrollbar-thumb:hover { background: var(--muted); }