deepcode-hku 1.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. cli/__init__.py +18 -0
  2. cli/cli_app.py +296 -0
  3. cli/cli_interface.py +744 -0
  4. cli/cli_launcher.py +155 -0
  5. cli/main_cli.py +243 -0
  6. cli/workflows/__init__.py +11 -0
  7. cli/workflows/cli_workflow_adapter.py +336 -0
  8. deepcode.py +219 -0
  9. deepcode_hku-1.0.1.dist-info/METADATA +695 -0
  10. deepcode_hku-1.0.1.dist-info/RECORD +44 -0
  11. deepcode_hku-1.0.1.dist-info/WHEEL +5 -0
  12. deepcode_hku-1.0.1.dist-info/entry_points.txt +2 -0
  13. deepcode_hku-1.0.1.dist-info/licenses/LICENSE +21 -0
  14. deepcode_hku-1.0.1.dist-info/top_level.txt +6 -0
  15. tools/__init__.py +0 -0
  16. tools/code_implementation_server.py +1045 -0
  17. tools/code_indexer.py +1657 -0
  18. tools/code_reference_indexer.py +486 -0
  19. tools/command_executor.py +324 -0
  20. tools/git_command.py +356 -0
  21. tools/pdf_converter.py +640 -0
  22. tools/pdf_downloader.py +1370 -0
  23. tools/pdf_utils.py +52 -0
  24. ui/__init__.py +43 -0
  25. ui/app.py +13 -0
  26. ui/components.py +1450 -0
  27. ui/handlers.py +773 -0
  28. ui/layout.py +106 -0
  29. ui/streamlit_app.py +38 -0
  30. ui/styles.py +2116 -0
  31. utils/__init__.py +17 -0
  32. utils/cli_interface.py +459 -0
  33. utils/dialogue_logger.py +671 -0
  34. utils/file_processor.py +426 -0
  35. utils/simple_llm_logger.py +198 -0
  36. workflows/__init__.py +31 -0
  37. workflows/agent_orchestration_engine.py +1371 -0
  38. workflows/agents/__init__.py +13 -0
  39. workflows/agents/code_implementation_agent.py +1093 -0
  40. workflows/agents/memory_agent_concise.py +923 -0
  41. workflows/agents/memory_agent_concise_index.py +935 -0
  42. workflows/code_implementation_workflow.py +924 -0
  43. workflows/code_implementation_workflow_index.py +931 -0
  44. workflows/codebase_index_workflow.py +726 -0
ui/styles.py ADDED
@@ -0,0 +1,2116 @@
1
+ """
2
+ Streamlit UI Styles Module
3
+
4
+ Contains all CSS style definitions for the application
5
+ """
6
+
7
+
8
+ def get_main_styles() -> str:
9
+ """
10
+ Get main CSS styles
11
+
12
+ Returns:
13
+ CSS styles string
14
+ """
15
+ return """
16
+ <style>
17
+ @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;700&family=Inter:wght@300;400;600;700&display=swap');
18
+
19
+ :root {
20
+ --primary-bg: #0a0e27;
21
+ --secondary-bg: #1a1f3a;
22
+ --accent-bg: #2d3748;
23
+ --card-bg: rgba(45, 55, 72, 0.9);
24
+ --glass-bg: rgba(255, 255, 255, 0.08);
25
+ --glass-border: rgba(255, 255, 255, 0.12);
26
+ --primary-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
27
+ --accent-gradient: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
28
+ --neon-blue: #64b5f6;
29
+ --neon-cyan: #4dd0e1;
30
+ --neon-green: #81c784;
31
+ --neon-purple: #ba68c8;
32
+ --text-primary: #ffffff;
33
+ --text-secondary: #e3f2fd;
34
+ --text-muted: #90caf9;
35
+ --border-color: rgba(100, 181, 246, 0.2);
36
+ }
37
+
38
+ /* Global app background and text */
39
+ .stApp {
40
+ background: linear-gradient(135deg, var(--primary-bg) 0%, var(--secondary-bg) 100%);
41
+ color: var(--text-primary);
42
+ font-family: 'Inter', sans-serif;
43
+ }
44
+
45
+ /* Force high contrast for all text elements */
46
+ .stApp * {
47
+ color: var(--text-primary) !important;
48
+ }
49
+
50
+ /* Sidebar redesign - dark tech theme */
51
+ .css-1d391kg {
52
+ background: linear-gradient(180deg, #0d1117 0%, #161b22 50%, #21262d 100%) !important;
53
+ border-right: 2px solid var(--neon-cyan) !important;
54
+ box-shadow: 0 0 20px rgba(77, 208, 225, 0.3) !important;
55
+ }
56
+
57
+ .css-1d391kg * {
58
+ color: var(--text-primary) !important;
59
+ font-weight: 500 !important;
60
+ }
61
+
62
+ .css-1d391kg h3 {
63
+ color: var(--neon-cyan) !important;
64
+ font-weight: 700 !important;
65
+ font-size: 1.2rem !important;
66
+ text-shadow: 0 0 15px rgba(77, 208, 225, 0.6) !important;
67
+ border-bottom: 1px solid rgba(77, 208, 225, 0.3) !important;
68
+ padding-bottom: 0.5rem !important;
69
+ margin-bottom: 1rem !important;
70
+ }
71
+
72
+ .css-1d391kg p, .css-1d391kg div {
73
+ color: var(--text-primary) !important;
74
+ font-weight: 600 !important;
75
+ }
76
+
77
+ /* Sidebar info boxes - dark tech style */
78
+ .css-1d391kg .stAlert,
79
+ .css-1d391kg .stInfo,
80
+ .css-1d391kg .stSuccess,
81
+ .css-1d391kg .stWarning,
82
+ .css-1d391kg .stError {
83
+ background: linear-gradient(135deg, #0d1117 0%, #161b22 100%) !important;
84
+ border: 2px solid var(--neon-cyan) !important;
85
+ color: var(--text-primary) !important;
86
+ font-weight: 700 !important;
87
+ border-radius: 12px !important;
88
+ box-shadow: 0 0 15px rgba(77, 208, 225, 0.3) !important;
89
+ backdrop-filter: blur(10px) !important;
90
+ margin: 0.5rem 0 !important;
91
+ padding: 1rem !important;
92
+ }
93
+
94
+ /* Force white text for sidebar info boxes */
95
+ .css-1d391kg .stInfo div,
96
+ .css-1d391kg .stInfo p,
97
+ .css-1d391kg .stInfo span {
98
+ color: #ffffff !important;
99
+ font-weight: 700 !important;
100
+ font-size: 0.9rem !important;
101
+ }
102
+
103
+ /* ================================
104
+ AI ANIMATION EFFECTS & LOGOS
105
+ ================================ */
106
+
107
+ /* AI Brain Logo Animation */
108
+ .ai-brain-logo {
109
+ position: absolute;
110
+ width: 80px;
111
+ height: 80px;
112
+ z-index: 1;
113
+ }
114
+
115
+ .brain-node {
116
+ position: absolute;
117
+ width: 12px;
118
+ height: 12px;
119
+ background: var(--neon-cyan);
120
+ border-radius: 50%;
121
+ box-shadow: 0 0 15px var(--neon-cyan);
122
+ animation: brainPulse 2s ease-in-out infinite;
123
+ }
124
+
125
+ .brain-node.node-1 {
126
+ top: 10px;
127
+ left: 20px;
128
+ animation-delay: 0s;
129
+ }
130
+
131
+ .brain-node.node-2 {
132
+ top: 30px;
133
+ right: 15px;
134
+ animation-delay: 0.7s;
135
+ }
136
+
137
+ .brain-node.node-3 {
138
+ bottom: 15px;
139
+ left: 30px;
140
+ animation-delay: 1.4s;
141
+ }
142
+
143
+ .brain-connection {
144
+ position: absolute;
145
+ background: linear-gradient(45deg, transparent, var(--neon-cyan), transparent);
146
+ height: 2px;
147
+ border-radius: 1px;
148
+ animation: connectionFlow 3s ease-in-out infinite;
149
+ }
150
+
151
+ .brain-connection.conn-1 {
152
+ width: 30px;
153
+ top: 20px;
154
+ left: 25px;
155
+ transform: rotate(45deg);
156
+ }
157
+
158
+ .brain-connection.conn-2 {
159
+ width: 25px;
160
+ top: 40px;
161
+ left: 15px;
162
+ transform: rotate(-30deg);
163
+ animation-delay: 1s;
164
+ }
165
+
166
+ @keyframes brainPulse {
167
+ 0%, 100% {
168
+ transform: scale(1);
169
+ opacity: 0.7;
170
+ box-shadow: 0 0 15px var(--neon-cyan);
171
+ }
172
+ 50% {
173
+ transform: scale(1.3);
174
+ opacity: 1;
175
+ box-shadow: 0 0 25px var(--neon-cyan), 0 0 35px var(--neon-cyan);
176
+ }
177
+ }
178
+
179
+ @keyframes connectionFlow {
180
+ 0% {
181
+ opacity: 0;
182
+ background: linear-gradient(45deg, transparent, transparent, transparent);
183
+ }
184
+ 50% {
185
+ opacity: 1;
186
+ background: linear-gradient(45deg, transparent, var(--neon-cyan), transparent);
187
+ }
188
+ 100% {
189
+ opacity: 0;
190
+ background: linear-gradient(45deg, transparent, transparent, transparent);
191
+ }
192
+ }
193
+
194
+ /* Multi-Agent Logo Animation */
195
+ .multi-agent-logo {
196
+ position: absolute;
197
+ width: 80px;
198
+ height: 80px;
199
+ z-index: 1;
200
+ }
201
+
202
+ .agent-node {
203
+ position: absolute;
204
+ width: 20px;
205
+ height: 20px;
206
+ background: rgba(186, 104, 200, 0.2);
207
+ border: 2px solid var(--neon-purple);
208
+ border-radius: 50%;
209
+ display: flex;
210
+ align-items: center;
211
+ justify-content: center;
212
+ font-size: 10px;
213
+ animation: agentOrbit 4s linear infinite;
214
+ }
215
+
216
+ .agent-node.agent-1 {
217
+ top: 5px;
218
+ left: 30px;
219
+ animation-delay: 0s;
220
+ }
221
+
222
+ .agent-node.agent-2 {
223
+ top: 30px;
224
+ right: 5px;
225
+ animation-delay: 1.3s;
226
+ }
227
+
228
+ .agent-node.agent-3 {
229
+ bottom: 5px;
230
+ left: 15px;
231
+ animation-delay: 2.6s;
232
+ }
233
+
234
+ .agent-connection {
235
+ position: absolute;
236
+ background: linear-gradient(90deg, transparent, var(--neon-purple), transparent);
237
+ height: 1px;
238
+ animation: agentSync 3s ease-in-out infinite;
239
+ }
240
+
241
+ .agent-connection.conn-12 {
242
+ width: 25px;
243
+ top: 20px;
244
+ left: 40px;
245
+ transform: rotate(30deg);
246
+ }
247
+
248
+ .agent-connection.conn-23 {
249
+ width: 30px;
250
+ top: 45px;
251
+ left: 25px;
252
+ transform: rotate(-45deg);
253
+ animation-delay: 1s;
254
+ }
255
+
256
+ .agent-connection.conn-13 {
257
+ width: 20px;
258
+ top: 25px;
259
+ left: 25px;
260
+ transform: rotate(90deg);
261
+ animation-delay: 2s;
262
+ }
263
+
264
+ @keyframes agentOrbit {
265
+ 0% { transform: rotate(0deg) translateX(15px) rotate(0deg); }
266
+ 100% { transform: rotate(360deg) translateX(15px) rotate(-360deg); }
267
+ }
268
+
269
+ @keyframes agentSync {
270
+ 0%, 100% { opacity: 0.3; }
271
+ 50% { opacity: 1; }
272
+ }
273
+
274
+ /* Future Vision Orbit Logo */
275
+ .future-logo {
276
+ position: absolute;
277
+ width: 80px;
278
+ height: 80px;
279
+ z-index: 1;
280
+ }
281
+
282
+ .orbit {
283
+ position: absolute;
284
+ border: 1px solid rgba(129, 199, 132, 0.3);
285
+ border-radius: 50%;
286
+ animation: orbitRotation 8s linear infinite;
287
+ }
288
+
289
+ .orbit-1 {
290
+ width: 60px;
291
+ height: 60px;
292
+ top: 10px;
293
+ left: 10px;
294
+ }
295
+
296
+ .orbit-2 {
297
+ width: 40px;
298
+ height: 40px;
299
+ top: 20px;
300
+ left: 20px;
301
+ animation-direction: reverse;
302
+ animation-duration: 6s;
303
+ }
304
+
305
+ .orbit-node {
306
+ position: absolute;
307
+ top: -8px;
308
+ left: 50%;
309
+ transform: translateX(-50%);
310
+ width: 16px;
311
+ height: 16px;
312
+ background: var(--neon-green);
313
+ border-radius: 50%;
314
+ display: flex;
315
+ align-items: center;
316
+ justify-content: center;
317
+ font-size: 8px;
318
+ box-shadow: 0 0 10px var(--neon-green);
319
+ }
320
+
321
+ .orbit-center {
322
+ position: absolute;
323
+ top: 50%;
324
+ left: 50%;
325
+ transform: translate(-50%, -50%);
326
+ width: 20px;
327
+ height: 20px;
328
+ background: radial-gradient(circle, var(--neon-green), var(--neon-cyan));
329
+ border-radius: 50%;
330
+ display: flex;
331
+ align-items: center;
332
+ justify-content: center;
333
+ font-size: 10px;
334
+ animation: centerPulse 2s ease-in-out infinite;
335
+ }
336
+
337
+ @keyframes orbitRotation {
338
+ 0% { transform: rotate(0deg); }
339
+ 100% { transform: rotate(360deg); }
340
+ }
341
+
342
+ @keyframes centerPulse {
343
+ 0%, 100% {
344
+ transform: translate(-50%, -50%) scale(1);
345
+ box-shadow: 0 0 15px var(--neon-green);
346
+ }
347
+ 50% {
348
+ transform: translate(-50%, -50%) scale(1.2);
349
+ box-shadow: 0 0 25px var(--neon-green), 0 0 35px var(--neon-cyan);
350
+ }
351
+ }
352
+
353
+ /* Open Source Logo Animation */
354
+ .opensource-logo {
355
+ position: absolute;
356
+ width: 80px;
357
+ height: 80px;
358
+ z-index: 1;
359
+ }
360
+
361
+ .github-stars {
362
+ position: absolute;
363
+ width: 100%;
364
+ height: 100%;
365
+ }
366
+
367
+ .star {
368
+ position: absolute;
369
+ font-size: 14px;
370
+ animation: starTwinkle 3s ease-in-out infinite;
371
+ }
372
+
373
+ .star-1 {
374
+ top: 10px;
375
+ left: 15px;
376
+ animation-delay: 0s;
377
+ }
378
+
379
+ .star-2 {
380
+ top: 15px;
381
+ right: 10px;
382
+ animation-delay: 1s;
383
+ }
384
+
385
+ .star-3 {
386
+ bottom: 10px;
387
+ left: 25px;
388
+ animation-delay: 2s;
389
+ }
390
+
391
+ .community-nodes {
392
+ position: absolute;
393
+ width: 100%;
394
+ height: 100%;
395
+ }
396
+
397
+ .community-node {
398
+ position: absolute;
399
+ width: 18px;
400
+ height: 18px;
401
+ background: rgba(100, 181, 246, 0.2);
402
+ border: 1px solid var(--neon-blue);
403
+ border-radius: 50%;
404
+ display: flex;
405
+ align-items: center;
406
+ justify-content: center;
407
+ font-size: 10px;
408
+ animation: communityFloat 4s ease-in-out infinite;
409
+ }
410
+
411
+ .community-node:nth-child(1) {
412
+ top: 35px;
413
+ left: 5px;
414
+ animation-delay: 0s;
415
+ }
416
+
417
+ .community-node:nth-child(2) {
418
+ top: 25px;
419
+ right: 8px;
420
+ animation-delay: 1.3s;
421
+ }
422
+
423
+ .community-node:nth-child(3) {
424
+ bottom: 20px;
425
+ left: 30px;
426
+ animation-delay: 2.6s;
427
+ }
428
+
429
+ @keyframes starTwinkle {
430
+ 0%, 100% {
431
+ opacity: 0.5;
432
+ transform: scale(1);
433
+ }
434
+ 50% {
435
+ opacity: 1;
436
+ transform: scale(1.3);
437
+ }
438
+ }
439
+
440
+ @keyframes communityFloat {
441
+ 0%, 100% {
442
+ transform: translateY(0);
443
+ opacity: 0.7;
444
+ }
445
+ 50% {
446
+ transform: translateY(-5px);
447
+ opacity: 1;
448
+ }
449
+ }
450
+
451
+ /* Typing number animation */
452
+ .typing-number {
453
+ animation: numberCount 2s ease-out;
454
+ }
455
+
456
+ @keyframes numberCount {
457
+ 0% {
458
+ opacity: 0;
459
+ transform: scale(0.5);
460
+ }
461
+ 100% {
462
+ opacity: 1;
463
+ transform: scale(1);
464
+ }
465
+ }
466
+
467
+ /* Sidebar buttons - tech style */
468
+ .css-1d391kg .stButton button {
469
+ background: linear-gradient(135deg, var(--neon-cyan) 0%, var(--neon-blue) 100%) !important;
470
+ color: #000000 !important;
471
+ font-weight: 800 !important;
472
+ border: 2px solid var(--neon-cyan) !important;
473
+ border-radius: 10px !important;
474
+ box-shadow: 0 0 20px rgba(77, 208, 225, 0.4) !important;
475
+ text-shadow: none !important;
476
+ transition: all 0.3s ease !important;
477
+ }
478
+
479
+ .css-1d391kg .stButton button:hover {
480
+ box-shadow: 0 0 30px rgba(77, 208, 225, 0.6) !important;
481
+ transform: translateY(-2px) !important;
482
+ }
483
+
484
+ /* Sidebar expanders - dark tech theme */
485
+ .css-1d391kg .streamlit-expanderHeader {
486
+ background: linear-gradient(135deg, #0d1117 0%, #161b22 100%) !important;
487
+ color: var(--text-primary) !important;
488
+ border: 2px solid var(--neon-purple) !important;
489
+ font-weight: 700 !important;
490
+ border-radius: 10px !important;
491
+ box-shadow: 0 0 10px rgba(186, 104, 200, 0.3) !important;
492
+ }
493
+
494
+ .css-1d391kg .streamlit-expanderContent {
495
+ background: linear-gradient(135deg, #0d1117 0%, #161b22 100%) !important;
496
+ border: 2px solid var(--neon-purple) !important;
497
+ color: var(--text-primary) !important;
498
+ border-radius: 0 0 10px 10px !important;
499
+ box-shadow: 0 0 10px rgba(186, 104, 200, 0.2) !important;
500
+ }
501
+
502
+ /* Force high contrast for all sidebar text elements */
503
+ .css-1d391kg span,
504
+ .css-1d391kg p,
505
+ .css-1d391kg div,
506
+ .css-1d391kg label,
507
+ .css-1d391kg strong,
508
+ .css-1d391kg b {
509
+ color: #ffffff !important;
510
+ font-weight: 600 !important;
511
+ }
512
+
513
+ /* Sidebar markdown content */
514
+ .css-1d391kg [data-testid="stMarkdownContainer"] p {
515
+ color: #ffffff !important;
516
+ font-weight: 600 !important;
517
+ background: none !important;
518
+ }
519
+
520
+ /* Sidebar special styles - system info boxes */
521
+ .css-1d391kg .element-container {
522
+ background: none !important;
523
+ }
524
+
525
+ .css-1d391kg .element-container div {
526
+ background: linear-gradient(135deg, #0d1117 0%, #161b22 100%) !important;
527
+ border: 1px solid var(--neon-cyan) !important;
528
+ border-radius: 8px !important;
529
+ padding: 0.8rem !important;
530
+ box-shadow: 0 0 10px rgba(77, 208, 225, 0.2) !important;
531
+ margin: 0.3rem 0 !important;
532
+ }
533
+
534
+ /* Processing History special handling */
535
+ .css-1d391kg .stExpander {
536
+ background: linear-gradient(135deg, #0d1117 0%, #161b22 100%) !important;
537
+ border: 2px solid var(--neon-green) !important;
538
+ border-radius: 12px !important;
539
+ box-shadow: 0 0 15px rgba(129, 199, 132, 0.3) !important;
540
+ margin: 0.5rem 0 !important;
541
+ }
542
+
543
+ /* Ensure all text is visible on dark background */
544
+ .css-1d391kg .stExpander div,
545
+ .css-1d391kg .stExpander p,
546
+ .css-1d391kg .stExpander span {
547
+ color: #ffffff !important;
548
+ font-weight: 600 !important;
549
+ background: none !important;
550
+ }
551
+
552
+ /* Main header area - enhanced version */
553
+ .main-header {
554
+ position: relative;
555
+ background: linear-gradient(135deg,
556
+ rgba(100, 181, 246, 0.12) 0%,
557
+ rgba(77, 208, 225, 0.10) 30%,
558
+ rgba(186, 104, 200, 0.12) 70%,
559
+ rgba(129, 199, 132, 0.10) 100%);
560
+ backdrop-filter: blur(25px);
561
+ border: 1px solid transparent;
562
+ background-clip: padding-box;
563
+ padding: 4rem 2rem;
564
+ border-radius: 25px;
565
+ margin-bottom: 3rem;
566
+ text-align: center;
567
+ overflow: hidden;
568
+ box-shadow:
569
+ 0 20px 60px rgba(0, 0, 0, 0.4),
570
+ 0 8px 32px rgba(100, 181, 246, 0.2),
571
+ inset 0 1px 0 rgba(255, 255, 255, 0.1);
572
+ }
573
+
574
+ .main-header::before {
575
+ content: '';
576
+ position: absolute;
577
+ top: 0;
578
+ left: 0;
579
+ right: 0;
580
+ bottom: 0;
581
+ background: linear-gradient(45deg,
582
+ var(--neon-cyan) 0%,
583
+ var(--neon-purple) 25%,
584
+ var(--neon-blue) 50%,
585
+ var(--neon-green) 75%,
586
+ var(--neon-cyan) 100%);
587
+ background-size: 400% 400%;
588
+ border-radius: 25px;
589
+ padding: 1px;
590
+ margin: -1px;
591
+ z-index: -1;
592
+ animation: borderGlow 6s ease-in-out infinite;
593
+ }
594
+
595
+ .main-header::after {
596
+ content: '';
597
+ position: absolute;
598
+ top: 50%;
599
+ left: 50%;
600
+ width: 300%;
601
+ height: 300%;
602
+ background: radial-gradient(circle, transparent 30%, rgba(77, 208, 225, 0.03) 60%, transparent 70%);
603
+ transform: translate(-50%, -50%);
604
+ animation: headerPulse 8s ease-in-out infinite;
605
+ pointer-events: none;
606
+ }
607
+
608
+ @keyframes headerPulse {
609
+ 0%, 100% {
610
+ opacity: 0.3;
611
+ transform: translate(-50%, -50%) scale(1);
612
+ }
613
+ 50% {
614
+ opacity: 0.7;
615
+ transform: translate(-50%, -50%) scale(1.1);
616
+ }
617
+ }
618
+
619
+ .main-header h1 {
620
+ font-family: 'JetBrains Mono', monospace !important;
621
+ font-size: 3.8rem !important;
622
+ font-weight: 800 !important;
623
+ background: linear-gradient(135deg, var(--neon-blue) 0%, var(--neon-cyan) 40%, #90caf9 80%, var(--neon-blue) 100%) !important;
624
+ background-size: 200% 200% !important;
625
+ -webkit-background-clip: text !important;
626
+ -webkit-text-fill-color: transparent !important;
627
+ background-clip: text !important;
628
+ text-shadow: 0 0 25px rgba(100, 181, 246, 0.4) !important;
629
+ margin-bottom: 1.2rem !important;
630
+ animation: titleGlow 4s ease-in-out infinite alternate, gradientShift 3s ease-in-out infinite !important;
631
+ position: relative;
632
+ z-index: 2;
633
+ }
634
+
635
+ @keyframes titleGlow {
636
+ 0% {
637
+ filter: drop-shadow(0 0 10px rgba(100, 181, 246, 0.3)) drop-shadow(0 0 15px rgba(100, 181, 246, 0.2));
638
+ text-shadow: 0 0 25px rgba(100, 181, 246, 0.4);
639
+ }
640
+ 33% {
641
+ filter: drop-shadow(0 0 12px rgba(77, 208, 225, 0.4)) drop-shadow(0 0 18px rgba(77, 208, 225, 0.25));
642
+ text-shadow: 0 0 30px rgba(77, 208, 225, 0.5);
643
+ }
644
+ 66% {
645
+ filter: drop-shadow(0 0 14px rgba(144, 202, 249, 0.35)) drop-shadow(0 0 20px rgba(144, 202, 249, 0.2));
646
+ text-shadow: 0 0 35px rgba(144, 202, 249, 0.45);
647
+ }
648
+ 100% {
649
+ filter: drop-shadow(0 0 10px rgba(100, 181, 246, 0.3)) drop-shadow(0 0 15px rgba(100, 181, 246, 0.2));
650
+ text-shadow: 0 0 25px rgba(100, 181, 246, 0.4);
651
+ }
652
+ }
653
+
654
+ @keyframes gradientShift {
655
+ 0%, 100% { background-position: 0% 50%; }
656
+ 50% { background-position: 100% 50%; }
657
+ }
658
+
659
+ .main-header h3 {
660
+ font-family: 'Inter', sans-serif !important;
661
+ font-size: 1.2rem !important;
662
+ font-weight: 400 !important;
663
+ color: var(--text-secondary) !important;
664
+ letter-spacing: 2px !important;
665
+ margin-bottom: 0.5rem !important;
666
+ }
667
+
668
+ .main-header p {
669
+ font-family: 'JetBrains Mono', monospace !important;
670
+ font-size: 0.9rem !important;
671
+ color: var(--neon-green) !important;
672
+ letter-spacing: 1px !important;
673
+ font-weight: 600 !important;
674
+ }
675
+
676
+ /* Streamlit component style overrides */
677
+ .stMarkdown h3 {
678
+ color: var(--neon-cyan) !important;
679
+ font-family: 'Inter', sans-serif !important;
680
+ font-weight: 700 !important;
681
+ font-size: 1.5rem !important;
682
+ text-shadow: 0 0 10px rgba(77, 208, 225, 0.3) !important;
683
+ }
684
+
685
+ /* Radio button styles */
686
+ .stRadio > div {
687
+ background: var(--card-bg) !important;
688
+ border: 1px solid var(--border-color) !important;
689
+ border-radius: 12px !important;
690
+ padding: 1rem !important;
691
+ backdrop-filter: blur(10px) !important;
692
+ }
693
+
694
+ .stRadio label {
695
+ color: var(--text-primary) !important;
696
+ font-weight: 600 !important;
697
+ font-size: 1rem !important;
698
+ }
699
+
700
+ .stRadio > div > div > div > label {
701
+ color: var(--text-secondary) !important;
702
+ font-weight: 500 !important;
703
+ font-size: 1rem !important;
704
+ }
705
+
706
+ /* File uploader */
707
+ .stFileUploader > div {
708
+ background: var(--card-bg) !important;
709
+ border: 2px dashed var(--border-color) !important;
710
+ border-radius: 15px !important;
711
+ transition: all 0.3s ease !important;
712
+ backdrop-filter: blur(10px) !important;
713
+ }
714
+
715
+ .stFileUploader > div:hover {
716
+ border-color: var(--neon-cyan) !important;
717
+ box-shadow: 0 0 20px rgba(77, 208, 225, 0.3) !important;
718
+ }
719
+
720
+ .stFileUploader label {
721
+ color: var(--text-primary) !important;
722
+ font-weight: 600 !important;
723
+ }
724
+
725
+ .stFileUploader span {
726
+ color: var(--text-secondary) !important;
727
+ font-weight: 500 !important;
728
+ }
729
+
730
+ /* Text input fields */
731
+ .stTextInput > div > div > input {
732
+ background: var(--card-bg) !important;
733
+ border: 1px solid var(--border-color) !important;
734
+ border-radius: 10px !important;
735
+ color: var(--text-primary) !important;
736
+ font-weight: 500 !important;
737
+ backdrop-filter: blur(10px) !important;
738
+ }
739
+
740
+ .stTextInput > div > div > input:focus {
741
+ border-color: var(--neon-cyan) !important;
742
+ box-shadow: 0 0 0 1px var(--neon-cyan) !important;
743
+ }
744
+
745
+ .stTextInput label {
746
+ color: var(--text-primary) !important;
747
+ font-weight: 600 !important;
748
+ }
749
+
750
+ /* Button styles */
751
+ .stButton > button {
752
+ width: 100% !important;
753
+ background: var(--primary-gradient) !important;
754
+ color: white !important;
755
+ border: none !important;
756
+ border-radius: 12px !important;
757
+ padding: 0.8rem 2rem !important;
758
+ font-family: 'Inter', sans-serif !important;
759
+ font-weight: 600 !important;
760
+ font-size: 1rem !important;
761
+ letter-spacing: 0.5px !important;
762
+ transition: all 0.3s ease !important;
763
+ box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3) !important;
764
+ }
765
+
766
+ .stButton > button:hover {
767
+ transform: translateY(-2px) !important;
768
+ box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4) !important;
769
+ }
770
+
771
+ /* Status message styles */
772
+ .status-success, .stSuccess {
773
+ background: linear-gradient(135deg, rgba(129, 199, 132, 0.15) 0%, rgba(129, 199, 132, 0.05) 100%) !important;
774
+ color: var(--neon-green) !important;
775
+ padding: 1rem 1.5rem !important;
776
+ border-radius: 10px !important;
777
+ border: 1px solid rgba(129, 199, 132, 0.3) !important;
778
+ backdrop-filter: blur(10px) !important;
779
+ font-weight: 600 !important;
780
+ }
781
+
782
+ .status-error, .stError {
783
+ background: linear-gradient(135deg, rgba(244, 67, 54, 0.15) 0%, rgba(244, 67, 54, 0.05) 100%) !important;
784
+ color: #ff8a80 !important;
785
+ padding: 1rem 1.5rem !important;
786
+ border-radius: 10px !important;
787
+ border: 1px solid rgba(244, 67, 54, 0.3) !important;
788
+ backdrop-filter: blur(10px) !important;
789
+ font-weight: 600 !important;
790
+ }
791
+
792
+ .status-warning, .stWarning {
793
+ background: linear-gradient(135deg, rgba(255, 193, 7, 0.15) 0%, rgba(255, 193, 7, 0.05) 100%) !important;
794
+ color: #ffcc02 !important;
795
+ padding: 1rem 1.5rem !important;
796
+ border-radius: 10px !important;
797
+ border: 1px solid rgba(255, 193, 7, 0.3) !important;
798
+ backdrop-filter: blur(10px) !important;
799
+ font-weight: 600 !important;
800
+ }
801
+
802
+ .status-info, .stInfo {
803
+ background: linear-gradient(135deg, rgba(77, 208, 225, 0.15) 0%, rgba(77, 208, 225, 0.05) 100%) !important;
804
+ color: var(--neon-cyan) !important;
805
+ padding: 1rem 1.5rem !important;
806
+ border-radius: 10px !important;
807
+ border: 1px solid rgba(77, 208, 225, 0.3) !important;
808
+ backdrop-filter: blur(10px) !important;
809
+ font-weight: 600 !important;
810
+ }
811
+
812
+ /* Progress bar */
813
+ .progress-container {
814
+ margin: 1.5rem 0;
815
+ padding: 2rem;
816
+ background: var(--card-bg);
817
+ backdrop-filter: blur(15px);
818
+ border: 1px solid var(--border-color);
819
+ border-radius: 15px;
820
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
821
+ }
822
+
823
+ .stProgress > div > div > div {
824
+ background: var(--accent-gradient) !important;
825
+ border-radius: 10px !important;
826
+ }
827
+
828
+ /* Text area */
829
+ .stTextArea > div > div > textarea {
830
+ background: var(--card-bg) !important;
831
+ border: 1px solid var(--border-color) !important;
832
+ border-radius: 10px !important;
833
+ color: var(--text-primary) !important;
834
+ font-family: 'JetBrains Mono', monospace !important;
835
+ backdrop-filter: blur(10px) !important;
836
+ }
837
+
838
+ /* Expander */
839
+ .streamlit-expanderHeader {
840
+ background: var(--card-bg) !important;
841
+ color: var(--text-primary) !important;
842
+ border: 1px solid var(--border-color) !important;
843
+ font-weight: 600 !important;
844
+ }
845
+
846
+ .streamlit-expanderContent {
847
+ background: var(--card-bg) !important;
848
+ border: 1px solid var(--border-color) !important;
849
+ }
850
+
851
+ /* Ensure all Markdown content is visible */
852
+ [data-testid="stMarkdownContainer"] p {
853
+ color: var(--text-secondary) !important;
854
+ font-weight: 500 !important;
855
+ }
856
+
857
+ /* Dividers */
858
+ hr {
859
+ border-color: var(--border-color) !important;
860
+ opacity: 0.5 !important;
861
+ }
862
+
863
+ /* Scrollbars */
864
+ ::-webkit-scrollbar {
865
+ width: 8px;
866
+ }
867
+
868
+ ::-webkit-scrollbar-track {
869
+ background: var(--accent-bg);
870
+ border-radius: 10px;
871
+ }
872
+
873
+ ::-webkit-scrollbar-thumb {
874
+ background: var(--accent-gradient);
875
+ border-radius: 10px;
876
+ }
877
+
878
+ ::-webkit-scrollbar-thumb:hover {
879
+ background: var(--primary-gradient);
880
+ }
881
+
882
+ /* Placeholder text */
883
+ ::placeholder {
884
+ color: var(--text-muted) !important;
885
+ opacity: 0.7 !important;
886
+ }
887
+
888
+ /* ================================
889
+ AI AGENT CAPABILITIES DISPLAY
890
+ ================================ */
891
+
892
+ /* AI Capabilities section - simplified to avoid conflicts with main header */
893
+ .ai-capabilities-section {
894
+ position: relative;
895
+ background: linear-gradient(135deg,
896
+ rgba(77, 208, 225, 0.08) 0%,
897
+ rgba(186, 104, 200, 0.06) 50%,
898
+ rgba(129, 199, 132, 0.08) 100%);
899
+ backdrop-filter: blur(15px);
900
+ border: 1px solid rgba(77, 208, 225, 0.2);
901
+ padding: 2rem 1.5rem;
902
+ border-radius: 20px;
903
+ margin: 2rem 0;
904
+ text-align: center;
905
+ overflow: hidden;
906
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
907
+ }
908
+
909
+ .ai-capabilities-section::before {
910
+ content: '';
911
+ position: absolute;
912
+ top: 0;
913
+ left: 0;
914
+ right: 0;
915
+ bottom: 0;
916
+ background: linear-gradient(90deg,
917
+ transparent 0%,
918
+ rgba(77, 208, 225, 0.1) 50%,
919
+ transparent 100%);
920
+ animation: shimmer 3s ease-in-out infinite;
921
+ }
922
+
923
+ @keyframes shimmer {
924
+ 0% { transform: translateX(-100%); }
925
+ 100% { transform: translateX(100%); }
926
+ }
927
+
928
+ @keyframes borderGlow {
929
+ 0%, 100% { background-position: 0% 50%; }
930
+ 50% { background-position: 100% 50%; }
931
+ }
932
+
933
+ /* Neural network animation */
934
+ .neural-network {
935
+ position: absolute;
936
+ top: 1rem;
937
+ right: 2rem;
938
+ display: flex;
939
+ gap: 0.5rem;
940
+ }
941
+
942
+ .neuron {
943
+ width: 12px;
944
+ height: 12px;
945
+ border-radius: 50%;
946
+ background: var(--neon-cyan);
947
+ box-shadow: 0 0 10px var(--neon-cyan);
948
+ animation-duration: 2s;
949
+ animation-iteration-count: infinite;
950
+ animation-timing-function: ease-in-out;
951
+ }
952
+
953
+ .pulse-1 { animation-name: neuronPulse; animation-delay: 0s; }
954
+ .pulse-2 { animation-name: neuronPulse; animation-delay: 0.3s; }
955
+ .pulse-3 { animation-name: neuronPulse; animation-delay: 0.6s; }
956
+
957
+ @keyframes neuronPulse {
958
+ 0%, 100% {
959
+ transform: scale(1);
960
+ opacity: 0.7;
961
+ box-shadow: 0 0 10px var(--neon-cyan);
962
+ }
963
+ 50% {
964
+ transform: scale(1.3);
965
+ opacity: 1;
966
+ box-shadow: 0 0 20px var(--neon-cyan), 0 0 30px var(--neon-cyan);
967
+ }
968
+ }
969
+
970
+ .capabilities-title {
971
+ font-family: 'Inter', sans-serif !important;
972
+ font-size: 2rem !important;
973
+ font-weight: 700 !important;
974
+ background: linear-gradient(135deg, var(--neon-cyan), var(--neon-purple), var(--neon-green));
975
+ background-clip: text;
976
+ -webkit-background-clip: text;
977
+ -webkit-text-fill-color: transparent;
978
+ text-shadow: 0 0 20px rgba(77, 208, 225, 0.3);
979
+ margin-bottom: 0.5rem !important;
980
+ letter-spacing: -0.5px;
981
+ }
982
+
983
+ .capabilities-subtitle {
984
+ font-family: 'JetBrains Mono', monospace !important;
985
+ color: var(--neon-cyan) !important;
986
+ font-size: 0.9rem !important;
987
+ letter-spacing: 1.5px !important;
988
+ font-weight: 500 !important;
989
+ text-transform: uppercase;
990
+ opacity: 0.8;
991
+ }
992
+
993
+ /* Enhanced feature card system - ensure alignment */
994
+ .feature-card {
995
+ position: relative;
996
+ background: var(--card-bg);
997
+ backdrop-filter: blur(20px);
998
+ border: 1px solid var(--border-color);
999
+ padding: 2.5rem;
1000
+ border-radius: 20px;
1001
+ margin: 1.5rem 0;
1002
+ transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
1003
+ box-shadow: 0 8px 40px rgba(0, 0, 0, 0.3);
1004
+ overflow: hidden;
1005
+ /* Ensure card alignment */
1006
+ min-height: 420px;
1007
+ display: flex;
1008
+ flex-direction: column;
1009
+ justify-content: space-between;
1010
+ }
1011
+
1012
+ /* NEW VERTICAL LAYOUT FEATURE CARDS */
1013
+ .feature-card-vertical {
1014
+ position: relative;
1015
+ background: linear-gradient(135deg, var(--card-bg) 0%, rgba(45, 55, 72, 0.8) 100%);
1016
+ backdrop-filter: blur(25px);
1017
+ border: 1px solid var(--border-color);
1018
+ padding: 0;
1019
+ border-radius: 24px;
1020
+ margin: 2.5rem 0;
1021
+ transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
1022
+ box-shadow: 0 12px 60px rgba(0, 0, 0, 0.4);
1023
+ overflow: hidden;
1024
+ min-height: 500px;
1025
+ }
1026
+
1027
+ .feature-card-vertical:hover {
1028
+ transform: translateY(-8px) scale(1.01);
1029
+ box-shadow: 0 20px 80px rgba(0, 0, 0, 0.5);
1030
+ }
1031
+
1032
+ /* Card glow effect for vertical cards */
1033
+ .card-glow-vertical {
1034
+ position: absolute;
1035
+ top: -50%;
1036
+ left: -50%;
1037
+ width: 200%;
1038
+ height: 200%;
1039
+ background: radial-gradient(circle, transparent 30%, rgba(77, 208, 225, 0.03) 60%, transparent 80%);
1040
+ opacity: 0;
1041
+ transition: opacity 0.5s ease;
1042
+ pointer-events: none;
1043
+ animation: verticalGlowPulse 8s ease-in-out infinite;
1044
+ }
1045
+
1046
+ .feature-card-vertical:hover .card-glow-vertical {
1047
+ opacity: 1;
1048
+ }
1049
+
1050
+ @keyframes verticalGlowPulse {
1051
+ 0%, 100% {
1052
+ transform: rotate(0deg) scale(1);
1053
+ opacity: 0.3;
1054
+ }
1055
+ 50% {
1056
+ transform: rotate(180deg) scale(1.1);
1057
+ opacity: 0.7;
1058
+ }
1059
+ }
1060
+
1061
+ /* Feature header section */
1062
+ .feature-header {
1063
+ display: flex;
1064
+ align-items: center;
1065
+ padding: 2.5rem 3rem 1.5rem 3rem;
1066
+ background: linear-gradient(135deg, rgba(77, 208, 225, 0.08) 0%, rgba(186, 104, 200, 0.06) 100%);
1067
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
1068
+ gap: 2rem;
1069
+ }
1070
+
1071
+ .feature-logo-container {
1072
+ position: relative;
1073
+ display: flex;
1074
+ align-items: center;
1075
+ justify-content: center;
1076
+ width: 80px;
1077
+ height: 80px;
1078
+ flex-shrink: 0;
1079
+ }
1080
+
1081
+ .feature-icon-large {
1082
+ font-size: 3.5rem;
1083
+ z-index: 2;
1084
+ filter: drop-shadow(0 0 15px rgba(77, 208, 225, 0.5));
1085
+ }
1086
+
1087
+ .feature-header-content {
1088
+ flex: 1;
1089
+ }
1090
+
1091
+ .feature-title-large {
1092
+ font-family: 'Inter', sans-serif !important;
1093
+ color: var(--text-primary) !important;
1094
+ font-size: 2rem !important;
1095
+ font-weight: 700 !important;
1096
+ margin-bottom: 0.5rem !important;
1097
+ text-shadow: 0 0 20px rgba(255, 255, 255, 0.3);
1098
+ background: linear-gradient(135deg, var(--neon-cyan), var(--neon-blue));
1099
+ background-clip: text;
1100
+ -webkit-background-clip: text;
1101
+ -webkit-text-fill-color: transparent;
1102
+ }
1103
+
1104
+ .feature-subtitle {
1105
+ color: var(--text-secondary) !important;
1106
+ font-size: 1rem !important;
1107
+ font-weight: 500 !important;
1108
+ opacity: 0.9;
1109
+ }
1110
+
1111
+ .feature-stats {
1112
+ display: flex;
1113
+ flex-direction: column;
1114
+ gap: 1rem;
1115
+ align-items: flex-end;
1116
+ }
1117
+
1118
+ .stat-item {
1119
+ text-align: center;
1120
+ padding: 0.8rem 1.2rem;
1121
+ background: rgba(77, 208, 225, 0.1);
1122
+ border: 1px solid rgba(77, 208, 225, 0.3);
1123
+ border-radius: 12px;
1124
+ backdrop-filter: blur(10px);
1125
+ min-width: 80px;
1126
+ }
1127
+
1128
+ .stat-number {
1129
+ display: block;
1130
+ font-family: 'JetBrains Mono', monospace !important;
1131
+ color: var(--neon-cyan) !important;
1132
+ font-size: 1.5rem !important;
1133
+ font-weight: 700 !important;
1134
+ text-shadow: 0 0 10px rgba(77, 208, 225, 0.5);
1135
+ }
1136
+
1137
+ .stat-label {
1138
+ display: block;
1139
+ color: var(--text-secondary) !important;
1140
+ font-size: 0.75rem !important;
1141
+ font-weight: 500 !important;
1142
+ text-transform: uppercase;
1143
+ letter-spacing: 0.5px;
1144
+ margin-top: 0.2rem;
1145
+ }
1146
+
1147
+ /* Feature content section */
1148
+ .feature-content {
1149
+ display: flex;
1150
+ padding: 2.5rem 3rem;
1151
+ gap: 3rem;
1152
+ align-items: flex-start;
1153
+ }
1154
+
1155
+ .content-left {
1156
+ flex: 1.2;
1157
+ }
1158
+
1159
+ .content-right {
1160
+ flex: 1;
1161
+ display: flex;
1162
+ justify-content: center;
1163
+ align-items: center;
1164
+ }
1165
+
1166
+ .feature-description-large {
1167
+ color: var(--text-secondary) !important;
1168
+ font-size: 1.1rem !important;
1169
+ line-height: 1.7 !important;
1170
+ font-weight: 500 !important;
1171
+ margin-bottom: 2rem;
1172
+ }
1173
+
1174
+ /* Card glow effect */
1175
+ .card-glow {
1176
+ position: absolute;
1177
+ top: -50%;
1178
+ left: -50%;
1179
+ width: 200%;
1180
+ height: 200%;
1181
+ background: radial-gradient(circle, transparent 20%, rgba(77, 208, 225, 0.05) 50%, transparent 70%);
1182
+ opacity: 0;
1183
+ transition: opacity 0.4s ease;
1184
+ pointer-events: none;
1185
+ }
1186
+
1187
+ .feature-card:hover .card-glow {
1188
+ opacity: 1;
1189
+ animation: glowRotate 3s linear infinite;
1190
+ }
1191
+
1192
+ @keyframes glowRotate {
1193
+ 0% { transform: rotate(0deg); }
1194
+ 100% { transform: rotate(360deg); }
1195
+ }
1196
+
1197
+ /* Different themed card styles */
1198
+ .feature-card.primary {
1199
+ border-color: var(--neon-cyan);
1200
+ background: linear-gradient(135deg,
1201
+ rgba(77, 208, 225, 0.1) 0%,
1202
+ rgba(45, 55, 72, 0.95) 30%);
1203
+ }
1204
+
1205
+ .feature-card.primary:hover {
1206
+ transform: translateY(-8px) scale(1.02);
1207
+ border-color: var(--neon-cyan);
1208
+ box-shadow:
1209
+ 0 20px 60px rgba(77, 208, 225, 0.3),
1210
+ 0 0 50px rgba(77, 208, 225, 0.2);
1211
+ }
1212
+
1213
+ .feature-card.secondary {
1214
+ border-color: var(--neon-purple);
1215
+ background: linear-gradient(135deg,
1216
+ rgba(186, 104, 200, 0.1) 0%,
1217
+ rgba(45, 55, 72, 0.95) 30%);
1218
+ }
1219
+
1220
+ .feature-card.secondary:hover {
1221
+ transform: translateY(-8px) scale(1.02);
1222
+ border-color: var(--neon-purple);
1223
+ box-shadow:
1224
+ 0 20px 60px rgba(186, 104, 200, 0.3),
1225
+ 0 0 50px rgba(186, 104, 200, 0.2);
1226
+ }
1227
+
1228
+ .feature-card.accent {
1229
+ border-color: var(--neon-green);
1230
+ background: linear-gradient(135deg,
1231
+ rgba(129, 199, 132, 0.1) 0%,
1232
+ rgba(45, 55, 72, 0.95) 30%);
1233
+ }
1234
+
1235
+ .feature-card.accent:hover {
1236
+ transform: translateY(-8px) scale(1.02);
1237
+ border-color: var(--neon-green);
1238
+ box-shadow:
1239
+ 0 20px 60px rgba(129, 199, 132, 0.3),
1240
+ 0 0 50px rgba(129, 199, 132, 0.2);
1241
+ }
1242
+
1243
+ .feature-card.tech {
1244
+ border-color: var(--neon-blue);
1245
+ background: linear-gradient(135deg,
1246
+ rgba(100, 181, 246, 0.1) 0%,
1247
+ rgba(45, 55, 72, 0.95) 30%);
1248
+ }
1249
+
1250
+ .feature-card.tech:hover {
1251
+ transform: translateY(-8px) scale(1.02);
1252
+ border-color: var(--neon-blue);
1253
+ box-shadow:
1254
+ 0 20px 60px rgba(100, 181, 246, 0.3),
1255
+ 0 0 50px rgba(100, 181, 246, 0.2);
1256
+ }
1257
+
1258
+ /* Feature icons */
1259
+ .feature-icon {
1260
+ font-size: 3rem;
1261
+ margin-bottom: 1rem;
1262
+ text-align: center;
1263
+ filter: drop-shadow(0 0 10px rgba(77, 208, 225, 0.5));
1264
+ flex-shrink: 0;
1265
+ }
1266
+
1267
+ /* Feature titles */
1268
+ .feature-title {
1269
+ font-family: 'Inter', sans-serif !important;
1270
+ color: var(--text-primary) !important;
1271
+ font-size: 1.3rem !important;
1272
+ font-weight: 700 !important;
1273
+ margin-bottom: 1rem !important;
1274
+ text-align: center;
1275
+ text-shadow: 0 0 15px rgba(255, 255, 255, 0.3);
1276
+ flex-shrink: 0;
1277
+ }
1278
+
1279
+ /* Feature descriptions */
1280
+ .feature-description {
1281
+ color: var(--text-secondary) !important;
1282
+ line-height: 1.6 !important;
1283
+ font-weight: 500 !important;
1284
+ flex: 1;
1285
+ display: flex;
1286
+ flex-direction: column;
1287
+ justify-content: space-between;
1288
+ }
1289
+
1290
+ /* Typing animation effect */
1291
+ .typing-text {
1292
+ font-family: 'JetBrains Mono', monospace !important;
1293
+ font-size: 0.95rem !important;
1294
+ margin-bottom: 1.5rem;
1295
+ border-right: 2px solid var(--neon-cyan);
1296
+ white-space: nowrap;
1297
+ overflow: hidden;
1298
+ animation: typing 3s steps(60, end), blink 1s infinite;
1299
+ }
1300
+
1301
+ @keyframes typing {
1302
+ from { width: 0; }
1303
+ to { width: 100%; }
1304
+ }
1305
+
1306
+ @keyframes blink {
1307
+ 0%, 50% { border-color: var(--neon-cyan); }
1308
+ 51%, 100% { border-color: transparent; }
1309
+ }
1310
+
1311
+ /* Technology tags */
1312
+ .tech-specs {
1313
+ display: flex;
1314
+ flex-wrap: wrap;
1315
+ gap: 0.5rem;
1316
+ margin-top: 1rem;
1317
+ }
1318
+
1319
+ .spec-tag {
1320
+ background: linear-gradient(135deg, var(--neon-cyan), var(--neon-blue));
1321
+ color: #000 !important;
1322
+ padding: 0.3rem 0.8rem;
1323
+ border-radius: 15px;
1324
+ font-size: 0.8rem;
1325
+ font-weight: 600;
1326
+ letter-spacing: 0.5px;
1327
+ box-shadow: 0 2px 10px rgba(77, 208, 225, 0.3);
1328
+ }
1329
+
1330
+ /* Progress bar animation */
1331
+ .progress-bar {
1332
+ width: 100%;
1333
+ height: 6px;
1334
+ background: rgba(255, 255, 255, 0.1);
1335
+ border-radius: 3px;
1336
+ overflow: hidden;
1337
+ margin-top: 1rem;
1338
+ }
1339
+
1340
+ .progress-fill {
1341
+ height: 100%;
1342
+ background: linear-gradient(90deg, var(--neon-purple), var(--neon-cyan), var(--neon-green));
1343
+ background-size: 200% 100%;
1344
+ border-radius: 3px;
1345
+ animation: progressMove 2s ease-in-out infinite;
1346
+ width: 75%;
1347
+ }
1348
+
1349
+ @keyframes progressMove {
1350
+ 0% { background-position: -200% 0; }
1351
+ 100% { background-position: 200% 0; }
1352
+ }
1353
+
1354
+ /* Code preview area */
1355
+ .code-preview {
1356
+ background: rgba(0, 0, 0, 0.4);
1357
+ border: 1px solid var(--neon-green);
1358
+ border-radius: 10px;
1359
+ padding: 1rem;
1360
+ margin-top: 1rem;
1361
+ font-family: 'JetBrains Mono', monospace;
1362
+ }
1363
+
1364
+ .code-line {
1365
+ font-size: 0.85rem;
1366
+ line-height: 1.6;
1367
+ margin-bottom: 0.5rem;
1368
+ color: var(--neon-green) !important;
1369
+ }
1370
+
1371
+ .code-line.generating {
1372
+ color: var(--neon-cyan) !important;
1373
+ animation: textGlow 2s ease-in-out infinite;
1374
+ }
1375
+
1376
+ @keyframes textGlow {
1377
+ 0%, 100% { text-shadow: 0 0 5px var(--neon-cyan); }
1378
+ 50% { text-shadow: 0 0 15px var(--neon-cyan), 0 0 25px var(--neon-cyan); }
1379
+ }
1380
+
1381
+ /* Progress dots */
1382
+ .code-progress {
1383
+ margin-top: 1rem;
1384
+ }
1385
+
1386
+ .progress-dots {
1387
+ display: flex;
1388
+ gap: 0.5rem;
1389
+ justify-content: center;
1390
+ }
1391
+
1392
+ .dot {
1393
+ width: 8px;
1394
+ height: 8px;
1395
+ border-radius: 50%;
1396
+ background: rgba(255, 255, 255, 0.3);
1397
+ transition: all 0.3s ease;
1398
+ }
1399
+
1400
+ .dot.active {
1401
+ background: var(--neon-green);
1402
+ box-shadow: 0 0 10px var(--neon-green);
1403
+ animation: dotPulse 1.5s ease-in-out infinite;
1404
+ }
1405
+
1406
+ @keyframes dotPulse {
1407
+ 0%, 100% { transform: scale(1); }
1408
+ 50% { transform: scale(1.3); }
1409
+ }
1410
+
1411
+ /* Technology stack display */
1412
+ .tech-stack {
1413
+ display: flex;
1414
+ flex-direction: column;
1415
+ gap: 0.8rem;
1416
+ }
1417
+
1418
+ .stack-item {
1419
+ display: flex;
1420
+ align-items: center;
1421
+ gap: 0.8rem;
1422
+ padding: 0.8rem;
1423
+ background: rgba(255, 255, 255, 0.05);
1424
+ border: 1px solid rgba(255, 255, 255, 0.1);
1425
+ border-radius: 10px;
1426
+ transition: all 0.3s ease;
1427
+ }
1428
+
1429
+ .stack-item:hover {
1430
+ background: rgba(255, 255, 255, 0.1);
1431
+ border-color: var(--neon-blue);
1432
+ transform: translateX(5px);
1433
+ }
1434
+
1435
+ .stack-icon {
1436
+ font-size: 1.2rem;
1437
+ filter: drop-shadow(0 0 8px rgba(100, 181, 246, 0.6));
1438
+ }
1439
+
1440
+ .stack-name {
1441
+ font-family: 'JetBrains Mono', monospace !important;
1442
+ color: var(--text-primary) !important;
1443
+ font-weight: 600 !important;
1444
+ font-size: 0.9rem;
1445
+ }
1446
+
1447
+ /* Responsive design */
1448
+ @media (max-width: 768px) {
1449
+ .main-header {
1450
+ padding: 2.5rem 1.5rem;
1451
+ margin-bottom: 2rem;
1452
+ border-radius: 20px;
1453
+ }
1454
+
1455
+ .main-header h1 {
1456
+ font-size: 2.5rem !important;
1457
+ }
1458
+
1459
+ .main-header h3 {
1460
+ font-size: 1rem !important;
1461
+ letter-spacing: 1.5px !important;
1462
+ }
1463
+
1464
+ .main-header p {
1465
+ font-size: 0.8rem !important;
1466
+ letter-spacing: 0.5px !important;
1467
+ }
1468
+
1469
+ .ai-capabilities-section {
1470
+ padding: 1.5rem 1rem;
1471
+ margin: 1.5rem 0;
1472
+ border-radius: 15px;
1473
+ }
1474
+
1475
+ .capabilities-title {
1476
+ font-size: 1.6rem !important;
1477
+ }
1478
+
1479
+ .capabilities-subtitle {
1480
+ font-size: 0.8rem !important;
1481
+ letter-spacing: 1px !important;
1482
+ }
1483
+
1484
+ .feature-card {
1485
+ padding: 1.5rem;
1486
+ margin: 1rem 0;
1487
+ height: auto;
1488
+ min-height: 350px;
1489
+ border-radius: 15px;
1490
+ }
1491
+
1492
+ .neural-network {
1493
+ top: 0.5rem;
1494
+ right: 1rem;
1495
+ }
1496
+
1497
+ .typing-text {
1498
+ white-space: normal;
1499
+ border-right: none;
1500
+ animation: none;
1501
+ font-size: 0.85rem !important;
1502
+ }
1503
+
1504
+ .feature-icon {
1505
+ font-size: 2.5rem;
1506
+ }
1507
+
1508
+ .feature-title {
1509
+ font-size: 1.1rem !important;
1510
+ }
1511
+ }
1512
+ /* ================================
1513
+ CONTENT COMPONENT STYLES
1514
+ ================================ */
1515
+
1516
+ /* Feature Flow Animation */
1517
+ .feature-flow {
1518
+ display: flex;
1519
+ align-items: center;
1520
+ gap: 1rem;
1521
+ flex-wrap: wrap;
1522
+ margin-top: 1.5rem;
1523
+ }
1524
+
1525
+ .flow-step {
1526
+ display: flex;
1527
+ align-items: center;
1528
+ gap: 0.5rem;
1529
+ padding: 0.8rem 1.2rem;
1530
+ background: rgba(77, 208, 225, 0.1);
1531
+ border: 1px solid rgba(77, 208, 225, 0.3);
1532
+ border-radius: 25px;
1533
+ transition: all 0.3s ease;
1534
+ }
1535
+
1536
+ .flow-step.active {
1537
+ background: rgba(77, 208, 225, 0.2);
1538
+ border-color: var(--neon-cyan);
1539
+ box-shadow: 0 0 15px rgba(77, 208, 225, 0.3);
1540
+ }
1541
+
1542
+ .flow-icon {
1543
+ font-size: 1.2rem;
1544
+ }
1545
+
1546
+ .flow-arrow {
1547
+ color: var(--neon-cyan);
1548
+ font-size: 1.2rem;
1549
+ animation: arrowFlow 2s ease-in-out infinite;
1550
+ }
1551
+
1552
+ @keyframes arrowFlow {
1553
+ 0%, 100% { transform: translateX(0); opacity: 0.7; }
1554
+ 50% { transform: translateX(5px); opacity: 1; }
1555
+ }
1556
+
1557
+ /* Code Simulation */
1558
+ .code-simulation {
1559
+ background: rgba(0, 0, 0, 0.6);
1560
+ border: 1px solid var(--neon-cyan);
1561
+ border-radius: 12px;
1562
+ padding: 1.5rem;
1563
+ font-family: 'JetBrains Mono', monospace;
1564
+ width: 100%;
1565
+ max-width: 400px;
1566
+ }
1567
+
1568
+ .code-header {
1569
+ display: flex;
1570
+ justify-content: space-between;
1571
+ align-items: center;
1572
+ margin-bottom: 1rem;
1573
+ padding-bottom: 0.5rem;
1574
+ border-bottom: 1px solid rgba(77, 208, 225, 0.3);
1575
+ }
1576
+
1577
+ .code-lang {
1578
+ color: var(--neon-cyan);
1579
+ font-weight: 600;
1580
+ font-size: 0.9rem;
1581
+ }
1582
+
1583
+ .code-status.generating {
1584
+ color: var(--neon-green);
1585
+ font-size: 0.8rem;
1586
+ animation: statusPulse 2s ease-in-out infinite;
1587
+ }
1588
+
1589
+ @keyframes statusPulse {
1590
+ 0%, 100% { opacity: 0.7; }
1591
+ 50% { opacity: 1; }
1592
+ }
1593
+
1594
+ .code-lines {
1595
+ display: flex;
1596
+ flex-direction: column;
1597
+ gap: 0.3rem;
1598
+ }
1599
+
1600
+ .code-line {
1601
+ color: var(--text-secondary);
1602
+ font-size: 0.85rem;
1603
+ line-height: 1.4;
1604
+ opacity: 0;
1605
+ }
1606
+
1607
+ .code-line.typing {
1608
+ animation: typeIn 0.8s ease-out forwards;
1609
+ }
1610
+
1611
+ .code-line.delay-1 { animation-delay: 0.8s; }
1612
+ .code-line.delay-2 { animation-delay: 1.6s; }
1613
+ .code-line.delay-3 { animation-delay: 2.4s; }
1614
+ .code-line.delay-4 { animation-delay: 3.2s; }
1615
+
1616
+ @keyframes typeIn {
1617
+ 0% {
1618
+ opacity: 0;
1619
+ transform: translateX(-10px);
1620
+ }
1621
+ 100% {
1622
+ opacity: 1;
1623
+ transform: translateX(0);
1624
+ }
1625
+ }
1626
+
1627
+ /* Agent Grid */
1628
+ .agent-grid {
1629
+ display: grid;
1630
+ grid-template-columns: repeat(2, 1fr);
1631
+ gap: 1rem;
1632
+ margin-top: 1.5rem;
1633
+ }
1634
+
1635
+ .agent-card {
1636
+ padding: 1rem;
1637
+ background: rgba(186, 104, 200, 0.1);
1638
+ border: 1px solid rgba(186, 104, 200, 0.3);
1639
+ border-radius: 12px;
1640
+ text-align: center;
1641
+ transition: all 0.3s ease;
1642
+ }
1643
+
1644
+ .agent-card.active {
1645
+ background: rgba(186, 104, 200, 0.2);
1646
+ border-color: var(--neon-purple);
1647
+ box-shadow: 0 0 15px rgba(186, 104, 200, 0.3);
1648
+ }
1649
+
1650
+ .agent-avatar {
1651
+ font-size: 1.5rem;
1652
+ margin-bottom: 0.5rem;
1653
+ }
1654
+
1655
+ .agent-card h4 {
1656
+ color: var(--text-primary) !important;
1657
+ font-size: 0.9rem !important;
1658
+ font-weight: 600 !important;
1659
+ margin-bottom: 0.3rem !important;
1660
+ }
1661
+
1662
+ .agent-card p {
1663
+ color: var(--text-secondary) !important;
1664
+ font-size: 0.75rem !important;
1665
+ margin: 0 !important;
1666
+ }
1667
+
1668
+ /* Collaboration Visualization */
1669
+ .collaboration-viz {
1670
+ position: relative;
1671
+ width: 300px;
1672
+ height: 300px;
1673
+ margin: 0 auto;
1674
+ }
1675
+
1676
+ .collaboration-center {
1677
+ position: absolute;
1678
+ top: 50%;
1679
+ left: 50%;
1680
+ transform: translate(-50%, -50%);
1681
+ text-align: center;
1682
+ z-index: 2;
1683
+ }
1684
+
1685
+ .center-node {
1686
+ width: 60px;
1687
+ height: 60px;
1688
+ background: linear-gradient(135deg, var(--neon-purple), var(--neon-cyan));
1689
+ border-radius: 50%;
1690
+ display: flex;
1691
+ align-items: center;
1692
+ justify-content: center;
1693
+ font-size: 1.5rem;
1694
+ margin: 0 auto 0.5rem;
1695
+ animation: centerRotate 4s linear infinite;
1696
+ }
1697
+
1698
+ .collaboration-center span {
1699
+ color: var(--text-primary) !important;
1700
+ font-size: 0.8rem !important;
1701
+ font-weight: 600 !important;
1702
+ }
1703
+
1704
+ .collaboration-agents {
1705
+ position: relative;
1706
+ width: 100%;
1707
+ height: 100%;
1708
+ }
1709
+
1710
+ .collab-agent {
1711
+ position: absolute;
1712
+ width: 50px;
1713
+ height: 50px;
1714
+ background: rgba(77, 208, 225, 0.2);
1715
+ border: 2px solid var(--neon-cyan);
1716
+ border-radius: 50%;
1717
+ display: flex;
1718
+ align-items: center;
1719
+ justify-content: center;
1720
+ font-size: 1.2rem;
1721
+ }
1722
+
1723
+ .pulse-ring {
1724
+ position: absolute;
1725
+ width: 60px;
1726
+ height: 60px;
1727
+ border: 2px solid var(--neon-cyan);
1728
+ border-radius: 50%;
1729
+ top: -5px;
1730
+ left: -5px;
1731
+ animation: pulseRing 2s ease-out infinite;
1732
+ }
1733
+
1734
+ .agent-pos-1 {
1735
+ top: 20px;
1736
+ left: 50%;
1737
+ transform: translateX(-50%);
1738
+ animation-delay: 0s;
1739
+ }
1740
+
1741
+ .agent-pos-2 {
1742
+ top: 50%;
1743
+ right: 20px;
1744
+ transform: translateY(-50%);
1745
+ animation-delay: 0.5s;
1746
+ }
1747
+
1748
+ .agent-pos-3 {
1749
+ bottom: 20px;
1750
+ left: 50%;
1751
+ transform: translateX(-50%);
1752
+ animation-delay: 1s;
1753
+ }
1754
+
1755
+ .agent-pos-4 {
1756
+ top: 50%;
1757
+ left: 20px;
1758
+ transform: translateY(-50%);
1759
+ animation-delay: 1.5s;
1760
+ }
1761
+
1762
+ @keyframes centerRotate {
1763
+ 0% { transform: translate(-50%, -50%) rotate(0deg); }
1764
+ 100% { transform: translate(-50%, -50%) rotate(360deg); }
1765
+ }
1766
+
1767
+ @keyframes pulseRing {
1768
+ 0% {
1769
+ transform: scale(0.8);
1770
+ opacity: 1;
1771
+ }
1772
+ 100% {
1773
+ transform: scale(1.4);
1774
+ opacity: 0;
1775
+ }
1776
+ }
1777
+
1778
+ /* Vision Demo */
1779
+ .vision-demo {
1780
+ margin-top: 1.5rem;
1781
+ padding: 1.5rem;
1782
+ background: rgba(129, 199, 132, 0.1);
1783
+ border: 1px solid rgba(129, 199, 132, 0.3);
1784
+ border-radius: 15px;
1785
+ }
1786
+
1787
+ .demo-input {
1788
+ display: flex;
1789
+ align-items: center;
1790
+ gap: 1rem;
1791
+ padding: 1rem;
1792
+ background: rgba(0, 0, 0, 0.3);
1793
+ border-radius: 10px;
1794
+ margin-bottom: 1rem;
1795
+ }
1796
+
1797
+ .input-icon {
1798
+ font-size: 1.5rem;
1799
+ }
1800
+
1801
+ .input-text {
1802
+ flex: 1;
1803
+ color: var(--neon-green) !important;
1804
+ font-family: 'JetBrains Mono', monospace !important;
1805
+ font-size: 0.9rem !important;
1806
+ }
1807
+
1808
+ .input-text.typing {
1809
+ border-right: 2px solid var(--neon-green);
1810
+ animation: inputTyping 4s steps(60, end), inputBlink 1s infinite;
1811
+ }
1812
+
1813
+ @keyframes inputTyping {
1814
+ from { width: 0; }
1815
+ to { width: 100%; }
1816
+ }
1817
+
1818
+ @keyframes inputBlink {
1819
+ 0%, 50% { border-color: var(--neon-green); }
1820
+ 51%, 100% { border-color: transparent; }
1821
+ }
1822
+
1823
+ .demo-arrow {
1824
+ text-align: center;
1825
+ font-size: 1.5rem;
1826
+ color: var(--neon-green);
1827
+ margin: 1rem 0;
1828
+ animation: arrowBounce 2s ease-in-out infinite;
1829
+ }
1830
+
1831
+ @keyframes arrowBounce {
1832
+ 0%, 100% { transform: translateY(0); }
1833
+ 50% { transform: translateY(5px); }
1834
+ }
1835
+
1836
+ .demo-output {
1837
+ padding: 1rem;
1838
+ background: rgba(0, 0, 0, 0.3);
1839
+ border-radius: 10px;
1840
+ }
1841
+
1842
+ .output-items {
1843
+ display: flex;
1844
+ flex-direction: column;
1845
+ gap: 0.5rem;
1846
+ }
1847
+
1848
+ .output-item {
1849
+ padding: 0.5rem 1rem;
1850
+ background: rgba(129, 199, 132, 0.2);
1851
+ border: 1px solid rgba(129, 199, 132, 0.4);
1852
+ border-radius: 8px;
1853
+ color: var(--neon-green) !important;
1854
+ font-size: 0.85rem !important;
1855
+ animation: itemAppear 0.8s ease-out forwards;
1856
+ opacity: 0;
1857
+ }
1858
+
1859
+ .output-item:nth-child(1) { animation-delay: 0.5s; }
1860
+ .output-item:nth-child(2) { animation-delay: 1s; }
1861
+ .output-item:nth-child(3) { animation-delay: 1.5s; }
1862
+ .output-item:nth-child(4) { animation-delay: 2s; }
1863
+
1864
+ @keyframes itemAppear {
1865
+ 0% {
1866
+ opacity: 0;
1867
+ transform: translateX(-20px);
1868
+ }
1869
+ 100% {
1870
+ opacity: 1;
1871
+ transform: translateX(0);
1872
+ }
1873
+ }
1874
+
1875
+ /* Future Timeline */
1876
+ .future-timeline {
1877
+ display: flex;
1878
+ flex-direction: column;
1879
+ gap: 1.5rem;
1880
+ padding: 1rem;
1881
+ max-width: 300px;
1882
+ }
1883
+
1884
+ .timeline-item {
1885
+ display: flex;
1886
+ align-items: center;
1887
+ gap: 1rem;
1888
+ padding: 1rem;
1889
+ border-radius: 12px;
1890
+ transition: all 0.3s ease;
1891
+ }
1892
+
1893
+ .timeline-item.completed {
1894
+ background: rgba(77, 208, 225, 0.1);
1895
+ border: 1px solid rgba(77, 208, 225, 0.3);
1896
+ }
1897
+
1898
+ .timeline-item.active {
1899
+ background: rgba(129, 199, 132, 0.1);
1900
+ border: 1px solid rgba(129, 199, 132, 0.3);
1901
+ box-shadow: 0 0 15px rgba(129, 199, 132, 0.3);
1902
+ }
1903
+
1904
+ .timeline-item.future {
1905
+ background: rgba(186, 104, 200, 0.1);
1906
+ border: 1px solid rgba(186, 104, 200, 0.3);
1907
+ opacity: 0.7;
1908
+ }
1909
+
1910
+ .timeline-marker {
1911
+ width: 40px;
1912
+ height: 40px;
1913
+ background: var(--card-bg);
1914
+ border-radius: 50%;
1915
+ display: flex;
1916
+ align-items: center;
1917
+ justify-content: center;
1918
+ font-size: 1.2rem;
1919
+ flex-shrink: 0;
1920
+ }
1921
+
1922
+ .timeline-content h4 {
1923
+ color: var(--text-primary) !important;
1924
+ font-size: 1rem !important;
1925
+ font-weight: 600 !important;
1926
+ margin-bottom: 0.2rem !important;
1927
+ }
1928
+
1929
+ .timeline-content p {
1930
+ color: var(--text-secondary) !important;
1931
+ font-size: 0.8rem !important;
1932
+ margin: 0 !important;
1933
+ }
1934
+
1935
+ /* Community Features */
1936
+ .community-features {
1937
+ display: flex;
1938
+ flex-direction: column;
1939
+ gap: 1rem;
1940
+ margin-top: 1.5rem;
1941
+ }
1942
+
1943
+ .community-feature {
1944
+ display: flex;
1945
+ align-items: flex-start;
1946
+ gap: 1rem;
1947
+ padding: 1rem;
1948
+ background: rgba(100, 181, 246, 0.1);
1949
+ border: 1px solid rgba(100, 181, 246, 0.3);
1950
+ border-radius: 12px;
1951
+ transition: all 0.3s ease;
1952
+ }
1953
+
1954
+ .community-feature:hover {
1955
+ background: rgba(100, 181, 246, 0.15);
1956
+ border-color: var(--neon-blue);
1957
+ }
1958
+
1959
+ .feature-icon-small {
1960
+ font-size: 1.5rem;
1961
+ flex-shrink: 0;
1962
+ margin-top: 0.2rem;
1963
+ }
1964
+
1965
+ .feature-text h4 {
1966
+ color: var(--text-primary) !important;
1967
+ font-size: 1rem !important;
1968
+ font-weight: 600 !important;
1969
+ margin-bottom: 0.3rem !important;
1970
+ }
1971
+
1972
+ .feature-text p {
1973
+ color: var(--text-secondary) !important;
1974
+ font-size: 0.85rem !important;
1975
+ line-height: 1.4 !important;
1976
+ margin: 0 !important;
1977
+ }
1978
+
1979
+ /* Tech Ecosystem */
1980
+ .tech-ecosystem {
1981
+ position: relative;
1982
+ width: 300px;
1983
+ height: 300px;
1984
+ margin: 0 auto;
1985
+ }
1986
+
1987
+ .ecosystem-center {
1988
+ position: absolute;
1989
+ top: 50%;
1990
+ left: 50%;
1991
+ transform: translate(-50%, -50%);
1992
+ text-align: center;
1993
+ z-index: 2;
1994
+ }
1995
+
1996
+ .center-logo {
1997
+ width: 60px;
1998
+ height: 60px;
1999
+ background: linear-gradient(135deg, var(--neon-blue), var(--neon-cyan));
2000
+ border-radius: 50%;
2001
+ display: flex;
2002
+ align-items: center;
2003
+ justify-content: center;
2004
+ font-size: 1.5rem;
2005
+ margin: 0 auto 0.5rem;
2006
+ animation: logoFloat 3s ease-in-out infinite;
2007
+ }
2008
+
2009
+ .ecosystem-center span {
2010
+ color: var(--text-primary) !important;
2011
+ font-size: 0.9rem !important;
2012
+ font-weight: 600 !important;
2013
+ }
2014
+
2015
+ .ecosystem-ring {
2016
+ position: relative;
2017
+ width: 100%;
2018
+ height: 100%;
2019
+ }
2020
+
2021
+ .ecosystem-item {
2022
+ position: absolute;
2023
+ display: flex;
2024
+ flex-direction: column;
2025
+ align-items: center;
2026
+ gap: 0.3rem;
2027
+ padding: 0.8rem;
2028
+ background: rgba(100, 181, 246, 0.1);
2029
+ border: 1px solid rgba(100, 181, 246, 0.3);
2030
+ border-radius: 12px;
2031
+ animation: ecosystemOrbit 8s linear infinite;
2032
+ }
2033
+
2034
+ .ecosystem-item.item-1 {
2035
+ top: 10px;
2036
+ left: 50%;
2037
+ transform: translateX(-50%);
2038
+ }
2039
+
2040
+ .ecosystem-item.item-2 {
2041
+ top: 50%;
2042
+ right: 10px;
2043
+ transform: translateY(-50%);
2044
+ }
2045
+
2046
+ .ecosystem-item.item-3 {
2047
+ bottom: 10px;
2048
+ left: 50%;
2049
+ transform: translateX(-50%);
2050
+ }
2051
+
2052
+ .ecosystem-item.item-4 {
2053
+ top: 50%;
2054
+ left: 10px;
2055
+ transform: translateY(-50%);
2056
+ }
2057
+
2058
+ .item-icon {
2059
+ font-size: 1.2rem;
2060
+ }
2061
+
2062
+ .ecosystem-item span {
2063
+ color: var(--text-primary) !important;
2064
+ font-size: 0.7rem !important;
2065
+ font-weight: 600 !important;
2066
+ text-align: center;
2067
+ }
2068
+
2069
+ @keyframes logoFloat {
2070
+ 0%, 100% {
2071
+ transform: translate(-50%, -50%) scale(1);
2072
+ }
2073
+ 50% {
2074
+ transform: translate(-50%, -50%) scale(1.05);
2075
+ }
2076
+ }
2077
+
2078
+ @keyframes ecosystemOrbit {
2079
+ 0% {
2080
+ box-shadow: 0 0 10px rgba(100, 181, 246, 0.3);
2081
+ }
2082
+ 50% {
2083
+ box-shadow: 0 0 20px rgba(100, 181, 246, 0.5);
2084
+ }
2085
+ 100% {
2086
+ box-shadow: 0 0 10px rgba(100, 181, 246, 0.3);
2087
+ }
2088
+ }
2089
+
2090
+ /* Responsive adjustments for vertical cards */
2091
+ @media (max-width: 768px) {
2092
+ .feature-content {
2093
+ flex-direction: column;
2094
+ gap: 2rem;
2095
+ }
2096
+
2097
+ .feature-header {
2098
+ flex-direction: column;
2099
+ text-align: center;
2100
+ gap: 1rem;
2101
+ }
2102
+
2103
+ .feature-stats {
2104
+ flex-direction: row;
2105
+ justify-content: center;
2106
+ }
2107
+
2108
+ .collaboration-viz,
2109
+ .tech-ecosystem {
2110
+ width: 250px;
2111
+ height: 250px;
2112
+ }
2113
+ }
2114
+
2115
+ </style>
2116
+ """