shuv25 commited on
Commit
294b1df
·
verified ·
1 Parent(s): 9da5ed5

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +537 -0
  2. style1.css +466 -0
app.py ADDED
@@ -0,0 +1,537 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+
3
+
4
+
5
+
6
+ import gradio as gr
7
+ import os
8
+ import base64
9
+
10
+
11
+ BASE_DIR = os.path.dirname(os.path.abspath(__file__))
12
+ css_path = os.path.join(BASE_DIR, "style1.css")
13
+
14
+ with open(css_path, "r") as f:
15
+ css = f.read()
16
+
17
+ logo_path = os.path.join(BASE_DIR, "public/linkedin.png")
18
+ email_path = os.path.join(BASE_DIR, "public/email_icon.png")
19
+
20
+ def embed_image_base64(path):
21
+ with open(path, "rb") as f:
22
+ return "data:image/svg;base64," + base64.b64encode(f.read()).decode()
23
+
24
+ linkedin_logo = embed_image_base64(logo_path)
25
+ email_logo = embed_image_base64(email_path)
26
+ # logo_b64 = embed_image_base64(logo_path)
27
+
28
+ AGENT_URLS = {
29
+ "delivery": "https://huggingface.co/spaces/shuv25/optimize_delivery_system",
30
+ "agent2": "https://huggingface.co/spaces/Tamannathakur/SPARKNOVA",
31
+ "agent3": "https://huggingface.co/spaces/Tamannathakur/SparkMart",
32
+ "agent4": "https://huggingface.co/spaces/SparkBrainsAI/AI_Trade_Analyzer"
33
+ }
34
+
35
+ # ---------------------------
36
+ # PREMIUM CARD COMPONENT
37
+ # ---------------------------
38
+ def create_agent_card(title, description, features, url, color, status="active"):
39
+
40
+ if status == "active":
41
+ status_badge = """
42
+ <span style='
43
+ border:2px solid #168c44;
44
+ color:#168c44;
45
+ padding:4px 12px;
46
+ border-radius:12px;
47
+ font-size:0.85em;
48
+ font-weight:600;
49
+ '>
50
+ • ACTIVE
51
+ </span>
52
+ """
53
+ else:
54
+ status_badge = """
55
+ <span style='
56
+ background:#6b7280;
57
+ color:white;
58
+ padding:4px 12px;
59
+ border-radius:12px;
60
+ font-size:0.85em;
61
+ font-weight:600;
62
+ '>
63
+ COMING SOON
64
+ </span>
65
+ """
66
+
67
+ features_html = "".join([f"<li style='margin:6px 0; color:#4b5563;'>{feature}</li>" for feature in features])
68
+
69
+ if status == "active":
70
+ button = f"""
71
+ <a href="{url}" target="_blank" rel="noopener noreferrer"
72
+ style='
73
+ display:block;
74
+ text-align:center;
75
+ padding:14px;
76
+ background:#204C6C;
77
+ color:white;
78
+ text-decoration:none;
79
+ border-radius:16px;
80
+ font-weight:600;
81
+ font-size:1em;
82
+ transition:0.25s ease;
83
+ '
84
+ onmouseover="this.style.transform='scale(1.04)'; this.style.opacity='0.92';"
85
+ onmouseout="this.style.transform='scale(1)'; this.style.opacity='1';">
86
+ Launch Agent
87
+ </a>
88
+ """
89
+ else:
90
+ button = """
91
+ <div style='
92
+ text-align:center;
93
+ padding:14px;
94
+ background:#e5e7eb;
95
+ color:#6b7280;
96
+ border-radius:10px;
97
+ font-weight:600;
98
+ font-size:1em;
99
+ cursor:not-allowed;
100
+ '>
101
+ Coming Soon
102
+ </div>
103
+ """
104
+
105
+ return f"""
106
+ <div style='
107
+ padding:28px;
108
+ margin-top: 20px;
109
+ background:white;
110
+ min-height:400px;
111
+ display:flex;
112
+ width:100%;
113
+ flex-direction:column;
114
+ justify-content:space-between;
115
+ box-shadow:0px 6px 16px rgba(0,0,0,0.07);
116
+ border-top:4px solid #204C6C;
117
+ '>
118
+ <div>
119
+ <div style='display:flex; justify-content:space-between; align-items:center; margin-bottom:14px;'>
120
+ <h2 style='margin:0; color:#1f2937; font-size:1.45em;'>{title}</h2>
121
+ {status_badge}
122
+ </div>
123
+
124
+ <p style='color:#6b7280; margin:10px 0 18px 0; line-height:1.6; font-size:0.95em;'>
125
+ {description}
126
+ </p>
127
+
128
+ <div style='background:#f9fafb; padding:16px; border-radius:10px;'>
129
+ <h4 style='margin:0 0 0px 0; color:#374151; font-size:0.9em; font-weight:600;'>
130
+ KEY FEATURES:
131
+ </h4>
132
+ <ul style='margin:0; padding-left:18px;'>
133
+ {features_html}
134
+ </ul>
135
+ </div>
136
+ </div>
137
+
138
+ <div style='margin-top:20px;'>{button}</div>
139
+ </div>
140
+ """
141
+
142
+
143
+ # ------------------------------------
144
+ # MAIN UI (ENHANCED LAYOUT)
145
+ # ------------------------------------
146
+
147
+ with gr.Blocks(
148
+ theme=gr.themes.Soft(primary_hue="green"),
149
+ title="Spark-Agent System",
150
+ # css="""
151
+ # body, html {
152
+ # margin:0;
153
+ # padding:0;
154
+ # width:100%;
155
+ # overflow-x:hidden;
156
+ # font-family: Georgia, serif;
157
+ # background-color: #17203D;
158
+ # }
159
+
160
+ # .gradio-container {
161
+ # max-width: 1900px !important;
162
+ # # background-color: #17203D;
163
+ # margin:auto !important;
164
+ # }
165
+ # """
166
+ css=css
167
+
168
+ ) as demo:
169
+
170
+ # HEADER SECTION -----------------------------------------------------
171
+ gr.HTML(f"""
172
+ <div style='
173
+ padding:40px 30px;
174
+ background:
175
+ radial-gradient(circle at 20% 10%, rgba(255,255,255,0.25), transparent 55%),
176
+ radial-gradient(circle at 85% 20%, rgba(45,135,255,0.22), transparent 70%),
177
+ linear-gradient(135deg, #0e1a2b, #0f1032, #03011a);
178
+ color:white;
179
+ border-bottom-left-radius:40px;
180
+ border-bottom-right-radius:40px;
181
+ box-shadow:0 50px 90px -20px rgba(0,0,0,0.6);
182
+
183
+ display:flex;
184
+ justify-content:space-;
185
+ align-items:center;
186
+ width:100%;
187
+ '>
188
+
189
+ <!-- LEFT: LOGO -->
190
+ <div style="flex:1; display:flex; justify-content:flex-start; width: 100px;">
191
+ <img src="{''}" width="120" style="margin-bottom:70px; opacity:0.95;">
192
+ </div>
193
+
194
+ <!-- CENTER: TITLE -->
195
+ <div style="flex:1; display:flex; justify-content:center;">
196
+ <h1 style='
197
+ margin:0;
198
+ font-size:2.5em;
199
+ font-weight:800;
200
+ letter-spacing:1px;
201
+ background:linear-gradient(to right, #fff 20%, #dce4ff 40%, #cedcff 60%);
202
+ -webkit-background-clip:text;
203
+ color:transparent;
204
+ '>
205
+ Spark-Agent System
206
+ </h1>
207
+ </div>
208
+
209
+ <div style="flex:1;"></div>
210
+
211
+ </div>
212
+
213
+ <div style='text-align: center;'>
214
+ <p style='margin-top:20px; font-size:1.30em; opacity:0.92; color: white;'>
215
+ Specialized AI Agents Crafted for Precision & Performance
216
+ </p>
217
+
218
+ <p style='margin-top:5px; font-size:1.05em; opacity:0.85; color: white;'>
219
+ Task-focused intelligence working together to deliver accurate, efficient, and context-aware results across different workflows.
220
+ </p>
221
+ </div>
222
+ """)
223
+
224
+
225
+ # --------------------------------------
226
+ # AVAILABLE AGENTS TITLE
227
+ # --------------------------------------
228
+ gr.HTML("""
229
+ <div style='
230
+ font-size:2.2em;
231
+ text-align:center;
232
+ font-weight:800;
233
+ margin:60px 0 60px;
234
+ color: white;
235
+ '>
236
+ Available Agents
237
+ <hr style='margin:0px;'/>
238
+ </div>
239
+ """)
240
+
241
+ # AGENT GRID ---------------------------------------------------------
242
+ with gr.Row(equal_height=True):
243
+
244
+ with gr.Column(scale=1):
245
+ gr.HTML(create_agent_card(
246
+ title="SparkDelivery",
247
+ description="AI-powered logistics assistant that plans optimal routes, analyzes traffic and weather conditions, estimates delivery costs, and optimizes multi-stop deliveries with intelligent vehicle recommendations.",
248
+ features=[
249
+ "Interactive route planning",
250
+ "Multi-destination optimization",
251
+ "Real-time traffic analysis",
252
+ "Weather forecasting",
253
+ "Smart cost estimation"
254
+ ],
255
+ url=AGENT_URLS["delivery"],
256
+ color="#164d8c"
257
+ ))
258
+
259
+ with gr.Column(scale=1):
260
+ gr.HTML(create_agent_card(
261
+ title="SparkNova",
262
+ description="SparkNova is an AI-powered data analysis tool that automatically explores, visualizes, and generates insights from uploaded CSV datasets through natural language queries efficiently.",
263
+ features=[
264
+ "AI-driven Query Understanding",
265
+ "Smart Visualizations",
266
+ "Insight Generation",
267
+ "Time-Efficient Analysis",
268
+ "Decision Support"
269
+ ],
270
+ url=AGENT_URLS["agent2"],
271
+ color="#168c44"
272
+ ))
273
+
274
+ with gr.Column(scale=1):
275
+ gr.HTML(create_agent_card(
276
+ title="SparkMart AI",
277
+ description="""SparkMart AI is a chatbot for e-commerce customer service, automating order tracking, resolving complaints, and offering personalized and specific product recommendations to customers.""",
278
+ features=[
279
+ "Order Management",
280
+ "Personalized Recommendations",
281
+ "Complaint Resolution",
282
+ "Conversational State",
283
+ "Query Assistance"
284
+ ],
285
+ url=AGENT_URLS["agent3"],
286
+ color="#168c44"
287
+ ))
288
+
289
+ with gr.Column(scale=1):
290
+ gr.HTML(create_agent_card(
291
+ title="SparkTrade Analyzer",
292
+ description="""SparkTrade Analyzer is an AI-powered trading intelligence agent that analyzes stock market queries, evaluates technical indicators, and generates actionable intraday insights to support smarter trading decisions.""",
293
+ features=[
294
+ "AI-driven Stock Analysis",
295
+ "Technical Indicator Evaluation",
296
+ "Intraday Trade Signals",
297
+ "Risk & Confidence Scoring",
298
+ "Visual Price Trend Insights"
299
+ ],
300
+ url=AGENT_URLS["agent4"],
301
+ color="#168c44"
302
+ ))
303
+
304
+ with gr.Column(scale=1):
305
+ gr.HTML('')
306
+
307
+ with gr.Column(scale=1):
308
+ gr.HTML('')
309
+
310
+ gr.HTML("""
311
+
312
+ <div style='
313
+ margin-top: 80px;
314
+ padding: 35px;
315
+ background: linear-gradient(135deg, #e8f5ff 0%, #f3fff6 100%);
316
+ border-radius: 18px;
317
+ border-left: 6px solid #204c6c;
318
+ box-shadow: 0px 8px 25px rgba(0,0,0,0.08);
319
+ '>
320
+
321
+ <h3 style='
322
+ margin:0 0 25px 0;
323
+ font-size:1.8em;
324
+ font-weight:800;
325
+ color:#0e1a2b;
326
+ letter-spacing:0.5px;
327
+ '>
328
+ System Status
329
+ </h3>
330
+
331
+ <div style='
332
+ display:flex;
333
+ gap:22px;
334
+ flex-wrap:wrap;
335
+ '>
336
+
337
+ <!-- ACTIVE AGENTS -->
338
+ <div style='
339
+ flex:1;
340
+ min-width:230px;
341
+ text-align:center;
342
+ padding:25px;
343
+ background:rgba(255,255,255,0.75);
344
+ border-radius:16px;
345
+ border:1px solid rgba(32,76,108,0.18);
346
+ backdrop-filter:blur(6px);
347
+ box-shadow:0 4px 14px rgba(32,76,108,0.15);
348
+ transition:0.3s ease;
349
+ '
350
+ onmouseover="this.style.transform='translateY(-6px)'; this.style.boxShadow='0 10px 28px rgba(32,76,108,0.25)';"
351
+ onmouseout="this.style.transform='translateY(0)'; this.style.boxShadow='0 4px 14px rgba(32,76,108,0.15)';"
352
+ >
353
+ <div style='font-size:2.4em; color:#204c6c; font-weight:700;'>4</div>
354
+ <div style='color:#334155; font-size:1em; margin-top:6px;'>Active Agents</div>
355
+ </div>
356
+
357
+ <!-- IN DEVELOPMENT -->
358
+ <div style='
359
+ flex:1;
360
+ min-width:230px;
361
+ text-align:center;
362
+ padding:25px;
363
+ background:rgba(255,255,255,0.75);
364
+ border-radius:16px;
365
+ border:1px solid rgba(32,76,108,0.18);
366
+ backdrop-filter:blur(6px);
367
+ box-shadow:0 4px 14px rgba(32,76,108,0.15);
368
+ transition:0.3s ease;
369
+ '
370
+ onmouseover="this.style.transform='translateY(-6px)'; this.style.boxShadow='0 10px 28px rgba(32,76,108,0.25)';"
371
+ onmouseout="this.style.transform='translateY(0)'; this.style.boxShadow='0 4px 14px rgba(32,76,108,0.15)';"
372
+ >
373
+ <div style='font-size:2.4em; color:#204c6c; font-weight:700;'>0</div>
374
+ <div style='color:#334155; font-size:1em; margin-top:6px;'>In Development</div>
375
+ </div>
376
+
377
+ <!-- TOTAL AGENTS -->
378
+ <div style='
379
+ flex:1;
380
+ min-width:230px;
381
+ text-align:center;
382
+ padding:25px;
383
+ background:rgba(255,255,255,0.75);
384
+ border-radius:16px;
385
+ border:1px solid rgba(32,76,108,0.18);
386
+ backdrop-filter:blur(6px);
387
+ box-shadow:0 4px 14px rgba(32,76,108,0.15);
388
+ transition:0.3s ease;
389
+ '
390
+ onmouseover="this.style.transform='translateY(-6px)'; this.style.boxShadow='0 10px 28px rgba(32,76,108,0.25)';"
391
+ onmouseout="this.style.transform='translateY(0)'; this.style.boxShadow='0 4px 14px rgba(32,76,108,0.15)';"
392
+ >
393
+ <div style='font-size:2.4em; color:#204c6c; font-weight:700;'>4</div>
394
+ <div style='color:#334155; font-size:1em; margin-top:6px;'>Total Agents</div>
395
+ </div>
396
+
397
+ </div>
398
+ </div>
399
+
400
+
401
+ """)
402
+
403
+ # -----------------------------------
404
+ # HOW IT WORKS TITLE
405
+ # -----------------------------------
406
+ gr.HTML("""
407
+ <div style='
408
+ margin-top:60px;
409
+ text-align:center;
410
+ font-size:2.8em;
411
+ font-weight:800;
412
+ letter-spacing:1px;
413
+ color: #ffffff;
414
+ '>
415
+ How It Works
416
+ </div>
417
+ """)
418
+
419
+ with gr.Row():
420
+
421
+ with gr.Column():
422
+ gr.HTML("""
423
+ <div style='padding:20px 40px; text-align:left; margin-left: 130px; color: white;'>
424
+ <h3>Independent Agents</h3>
425
+ <ul>
426
+ <li>Isolated environments</li>
427
+ <li>Scalable + independently upgradable</li>
428
+ <li>Optimized resource allocation</li>
429
+ <li>Specialized task modules</li>
430
+ </ul>
431
+ </div>
432
+ """)
433
+
434
+ with gr.Column():
435
+ gr.HTML("""
436
+ <div style='padding:20px 40px; text-align:left; margin-left: 130px;'>
437
+ <h3>Getting Started</h3>
438
+ <ul>
439
+ <li>Choose your agent</li>
440
+ <li>Click “Launch Agent”</li>
441
+ <li>Enter your query & receive instant results</li>
442
+ <li>Save or download output</li>
443
+ </ul>
444
+ </div>
445
+ """)
446
+
447
+ with gr.Column():
448
+ gr.HTML("""
449
+ <div style='padding:20px 40px; text-align:left; margin-left: 130px;'>
450
+ <h3>Best Practices</h3>
451
+ <ul>
452
+ <li>Be specific with queries</li>
453
+ <li>Add relevant details</li>
454
+ <li>Use examples as guidance</li>
455
+ <li>Use agent-specific features</li>
456
+ </ul>
457
+ </div>
458
+ """)
459
+ # gr.HTML("""
460
+ # <div style="
461
+ # margin: 90px auto 40px;
462
+ # text-align: center;
463
+ # ">
464
+ # <a href="https://sparkbrains.ai" target="_blank" rel="noopener noreferrer"
465
+ # style="
466
+ # display: inline-block;
467
+ # padding: 16px 38px;
468
+ # font-size: 1.1em;
469
+ # font-weight: 700;
470
+ # color: white;
471
+ # text-decoration: none;
472
+ # border-top: 1px solid #168c44
473
+ # border-radius: 999px;
474
+ # background: linear-gradient(135deg, #204C6C, #168c44);
475
+ # box-shadow: 0 10px 30px rgba(32, 76, 108, 0.35);
476
+ # transition: all 0.3s ease;
477
+ # "
478
+ # onmouseover="this.style.transform='translateY(-4px)'; this.style.boxShadow='0 18px 40px rgba(32,76,108,0.45)'"
479
+ # onmouseout="this.style.transform='translateY(0)'; this.style.boxShadow='0 10px 30px rgba(32,76,108,0.35)'"
480
+ # >
481
+ # Visit SparkBrains →
482
+ # </a>
483
+
484
+ # <p style="
485
+ # margin-top: 14px;
486
+ # font-size: 0.9em;
487
+ # color: #cbd5f5;
488
+ # opacity: 0.85;
489
+ # ">
490
+ # Explore our full AI ecosystem, products & research
491
+ # </p>
492
+ # </div>
493
+ # """)
494
+
495
+
496
+
497
+ # FOOTER --------------------------------------------------------------
498
+ gr.HTML(f"""
499
+ <div class="spark-footer">
500
+
501
+ <div class="footer-top">
502
+ <a href="https://www.linkedin.com/company/sparkbrains/"
503
+ target="_blank"
504
+ class="icon-text-wrap">
505
+ <img src="{linkedin_logo}" class="footer-icon"/>
506
+ <span class="linkedin_text">LinkedIn</span>
507
+ </a>
508
+
509
+ <a href="mailto:sales@sparkbrains.in"
510
+ class="icon-text-wrap">
511
+ <img src="{email_logo}" class="footer-icon"/>
512
+ <span class="linkedin_text">sales@sparkbrains.in</span>
513
+ </a>
514
+ </div>
515
+
516
+ <a href="https://sparkbrains.in"
517
+ target="_blank"
518
+ rel="noopener noreferrer"
519
+ class="footer-cta">
520
+ Visit SparkBrains →
521
+ </a>
522
+
523
+ <div class="footer-bottom">
524
+ © 2026 SparkBrains AI · Building Intelligent Systems
525
+ </div>
526
+
527
+ </div>
528
+ """)
529
+
530
+
531
+ if __name__ == "__main__":
532
+ demo.launch(share=True)
533
+ # <h3 style='margin-bottom:10px;'>Built with Modern AI Stack</h3>
534
+ # <p>DeepAgents • LangChain • Groq • OpenStreetMap • Gradio</p>
535
+ # <p style='font-size:0.85em; color:#6b7280; margin-top:10px;'>
536
+ # HuggingFace Spaces | Open Source Architecture
537
+ # </p>
style1.css ADDED
@@ -0,0 +1,466 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* ============================================
2
+ GLOBAL BASE STYLES
3
+ ============================================ */
4
+ body,
5
+ html,
6
+ .gradio-container,
7
+ .contain {
8
+ margin: 0;
9
+ padding: 0;
10
+ position: relative;
11
+ background-size: cover;
12
+ background-attachment: fixed;
13
+ min-height: 100vh;
14
+ overflow-x: hidden;
15
+ }
16
+
17
+ body {
18
+ /* background:
19
+ radial-gradient(circle at 20% 15%, rgba(59, 130, 246, 0.12), transparent 40%),
20
+ radial-gradient(circle at 80% 25%, rgba(23, 194, 106, 0.794), transparent 45%),
21
+ radial-gradient(circle at 50% 70%, rgba(16, 185, 129, 0.08), transparent 50%),
22
+ radial-gradient(circle at 10% 85%, rgba(236, 72, 153, 0.08), transparent 45%),
23
+ linear-gradient(135deg, #0a0e27 0%, #1a1f3a 25%, #0f1629 50%, #189f18 75%, #0d1425 100%) !important;
24
+ background-size: cover;
25
+ background-attachment: fixed; */
26
+ }
27
+
28
+ /* ============================================
29
+ NEXT-GEN TECH GRID BACKGROUND
30
+ ============================================ */
31
+
32
+ body::before {
33
+ content: "";
34
+ position: fixed;
35
+ inset: 0;
36
+ z-index: 0;
37
+ pointer-events: none;
38
+
39
+ /* MICRO GRID */
40
+ background-image: linear-gradient(
41
+ rgba(255, 255, 255, 0.035) 1px,
42
+ transparent 1px
43
+ ),
44
+ linear-gradient(90deg, rgba(255, 255, 255, 0.035) 1px, transparent 1px),
45
+ /* MACRO GRID */
46
+ linear-gradient(rgba(59, 130, 246, 0.08) 1px, transparent 1px),
47
+ linear-gradient(90deg, rgba(59, 130, 246, 0.08) 1px, transparent 1px),
48
+ /* BASE GRADIENT */
49
+ radial-gradient(
50
+ circle at 20% 10%,
51
+ rgba(59, 130, 246, 0.18),
52
+ transparent 45%
53
+ ),
54
+ radial-gradient(
55
+ circle at 80% 20%,
56
+ rgba(139, 92, 246, 0.15),
57
+ transparent 50%
58
+ ),
59
+ radial-gradient(
60
+ circle at 50% 75%,
61
+ rgba(16, 185, 129, 0.12),
62
+ transparent 55%
63
+ ),
64
+ linear-gradient(135deg, #060b1a 0%, #0b1025 35%, #070d1f 60%, #050914 100%);
65
+
66
+ background-size: 24px 24px, /* micro grid */ 24px 24px, 120px 120px,
67
+ /* macro grid */ 120px 120px, auto, auto, auto, auto;
68
+
69
+ background-blend-mode: normal, normal, overlay, overlay, screen, screen,
70
+ screen, normal;
71
+ }
72
+ body::after {
73
+ content: "";
74
+ position: fixed;
75
+ inset: 0;
76
+ z-index: 0;
77
+ pointer-events: none;
78
+
79
+ background-image: radial-gradient(
80
+ circle at 15% 20%,
81
+ rgba(59, 130, 246, 0.25) 1px,
82
+ transparent 1px
83
+ ),
84
+ radial-gradient(
85
+ circle at 40% 35%,
86
+ rgba(139, 92, 246, 0.25) 1px,
87
+ transparent 1px
88
+ ),
89
+ radial-gradient(
90
+ circle at 70% 25%,
91
+ rgba(16, 185, 129, 0.25) 1px,
92
+ transparent 1px
93
+ ),
94
+ radial-gradient(
95
+ circle at 85% 70%,
96
+ rgba(236, 72, 153, 0.22) 1px,
97
+ transparent 1px
98
+ );
99
+
100
+ background-size: 400px 400px;
101
+ opacity: 0.35;
102
+ }
103
+
104
+ /* ============================================
105
+ FLOATING GLOWING ORBS
106
+ ============================================ */
107
+ .contain::before {
108
+ content: "";
109
+ position: fixed;
110
+ top: 10%;
111
+ right: 15%;
112
+ width: 600px;
113
+ height: 600px;
114
+ background: radial-gradient(
115
+ circle,
116
+ rgba(59, 130, 246, 0.15),
117
+ transparent 70%
118
+ );
119
+ border-radius: 50%;
120
+ filter: blur(80px);
121
+ /* animation: floatOrb1 25s ease-in-out infinite; */
122
+ pointer-events: none;
123
+ z-index: 0;
124
+ }
125
+
126
+ .contain::after {
127
+ content: "";
128
+ position: fixed;
129
+ bottom: 15%;
130
+ left: 10%;
131
+ width: 500px;
132
+ height: 500px;
133
+ background: radial-gradient(
134
+ circle,
135
+ rgba(139, 92, 246, 0.12),
136
+ transparent 70%
137
+ );
138
+ border-radius: 50%;
139
+ filter: blur(70px);
140
+ /* animation: floatOrb2 30s ease-in-out infinite; */
141
+ pointer-events: none;
142
+ z-index: 0;
143
+ }
144
+
145
+ /* ============================================
146
+ GRADIO CONTAINER IMPROVEMENTS
147
+ ============================================ */
148
+ .gradio-container {
149
+ max-width: 1519px !important;
150
+ margin: 0 auto !important;
151
+ padding: 20px 40px !important;
152
+ position: relative;
153
+ z-index: 1;
154
+ }
155
+
156
+ /* Ensure all content is above background effects */
157
+ .gradio-container > * {
158
+ position: relative;
159
+ z-index: 1;
160
+ }
161
+
162
+ /* ============================================
163
+ IMPROVED ROW & COLUMN SPACING
164
+ ============================================ */
165
+ .gradio-container .row {
166
+ gap: 24px !important;
167
+ margin-bottom: 30px !important;
168
+ }
169
+
170
+ .gradio-container .column {
171
+ padding: 0 12px !important;
172
+ }
173
+
174
+ /* ============================================
175
+ CARD STYLING ENHANCEMENTS
176
+ ============================================ */
177
+ .gradio-container div[style*="background:white"] {
178
+ border-radius: 20px !important;
179
+ transition: all 0.3s ease !important;
180
+ backdrop-filter: blur(10px);
181
+ border: 1px solid rgba(255, 255, 255, 0.1) !important;
182
+ }
183
+
184
+ .gradio-container div[style*="background:white"]:hover {
185
+ transform: translateY(-8px) !important;
186
+ box-shadow: 0px 20px 40px rgba(0, 0, 0, 0.15) !important;
187
+ }
188
+
189
+ .linkedin_logo {
190
+ transition: all 0.3s ease !important;
191
+ }
192
+ .linkedin_logo:hover {
193
+ transform: translateY(-8px) !important;
194
+ }
195
+
196
+ .linkedin_text {
197
+ font-size: 13px;
198
+ color: #ffffff;
199
+ font-family: "Gill Sans", "Gill Sans MT", Calibri, "Trebuchet MS", sans-serif;
200
+ }
201
+
202
+ /* =========================
203
+ FOOTER
204
+ ========================= */
205
+
206
+ .spark-footer {
207
+ margin-top: 80px;
208
+ padding: 40px 30px 28px;
209
+ background: linear-gradient(135deg, #010f2a, #011433);
210
+ border-top: 2px solid #168c44;
211
+ border-radius: 18px;
212
+ text-align: center;
213
+ }
214
+
215
+ /* Top row */
216
+ .footer-top {
217
+ display: flex;
218
+ gap: 28px;
219
+ justify-content: center;
220
+ align-items: center;
221
+ margin-bottom: 28px;
222
+ }
223
+
224
+ /* Icon + text */
225
+ .icon-text-wrap {
226
+ display: flex;
227
+ align-items: center;
228
+ gap: 10px;
229
+ text-decoration: none;
230
+ color: #e5e7eb;
231
+ font-size: 13px;
232
+ transition: all 0.3s ease;
233
+ }
234
+
235
+ .icon-text-wrap:hover {
236
+ color: #7ee787;
237
+ transform: translateY(-3px);
238
+ }
239
+
240
+ /* Icons */
241
+ .footer-icon {
242
+ width: 22px;
243
+ height: auto;
244
+ transition: transform 0.3s ease;
245
+ }
246
+
247
+ .icon-text-wrap:hover .footer-icon {
248
+ transform: scale(1.15);
249
+ }
250
+
251
+ /* CTA Button */
252
+ .footer-cta {
253
+ display: inline-block;
254
+ padding: 14px 40px;
255
+ font-size: 1.05em;
256
+ font-weight: 700;
257
+ color: white;
258
+ text-decoration: none;
259
+ border-radius: 999px;
260
+ background: linear-gradient(135deg, #204c6c, #168c44);
261
+ box-shadow: 0 12px 32px rgba(32, 76, 108, 0.4);
262
+ transition: all 0.3s ease;
263
+ }
264
+
265
+ .footer-cta:hover {
266
+ transform: translateY(-4px);
267
+ box-shadow: 0 20px 45px rgba(32, 76, 108, 0.55);
268
+ }
269
+
270
+ /* Bottom text */
271
+ .footer-bottom {
272
+ margin-top: 26px;
273
+ font-size: 0.8em;
274
+ color: #9ca3af;
275
+ opacity: 0.85;
276
+ }
277
+
278
+ .icon-text-wrap {
279
+ display: flex;
280
+ gap: 10px;
281
+ align-items: center;
282
+ }
283
+
284
+ /* ============================================
285
+ TEXT STYLING
286
+ ============================================ */
287
+ h1,
288
+ h2,
289
+ h3,
290
+ h4,
291
+ h5,
292
+ h6 {
293
+ letter-spacing: 0.5px;
294
+ line-height: 1.3;
295
+ }
296
+
297
+ ul {
298
+ margin-left: 80px;
299
+ }
300
+
301
+ ul,
302
+ li {
303
+ color: white;
304
+ line-height: 1.8;
305
+ }
306
+
307
+ p {
308
+ line-height: 1.7;
309
+ }
310
+
311
+ /* ============================================
312
+ BUTTON IMPROVEMENTS
313
+ ============================================ */
314
+ a[style*="Launch Agent"],
315
+ button {
316
+ box-shadow: 0 4px 12px rgba(32, 76, 108, 0.3) !important;
317
+ transition: all 0.3s ease !important;
318
+ font-weight: 600 !important;
319
+ }
320
+
321
+ a[style*="Launch Agent"]:hover {
322
+ box-shadow: 0 8px 20px rgba(32, 76, 108, 0.5) !important;
323
+ }
324
+
325
+ /* ============================================
326
+ SYSTEM STATUS BOX REFINEMENT
327
+ ============================================ */
328
+ div[style*="margin-top: 50px"] {
329
+ backdrop-filter: blur(12px) !important;
330
+ border: 1px solid rgba(255, 255, 255, 0.15) !important;
331
+ }
332
+
333
+ /* ============================================
334
+ "HOW IT WORKS" SECTION ALIGNMENT
335
+ ============================================ */
336
+ .gradio-container div[style*="margin-left: 130px"] {
337
+ margin-left: 0px !important;
338
+ padding: 30px 40px !important;
339
+ background: rgba(255, 255, 255, 0.03) !important;
340
+ border-radius: 16px !important;
341
+ border: 1px solid rgba(255, 255, 255, 0.08) !important;
342
+ backdrop-filter: blur(8px) !important;
343
+ transition: all 0.3s ease !important;
344
+ }
345
+
346
+ .gradio-container div[style*="margin-left: 130px"]:hover {
347
+ background: rgba(255, 255, 255, 0.05) !important;
348
+ border-color: rgba(59, 130, 246, 0.3) !important;
349
+ transform: translateY(-4px);
350
+ }
351
+
352
+ .gradio-container div[style*="margin-left: 130px"] h3 {
353
+ color: #ffffff !important;
354
+ font-size: 1.4em !important;
355
+ margin-bottom: 16px !important;
356
+ font-weight: 700 !important;
357
+ background: linear-gradient(to right, #3b82f6, #8b5cf6);
358
+ -webkit-background-clip: text;
359
+ -webkit-text-fill-color: transparent;
360
+ }
361
+
362
+ .gradio-container div[style*="margin-left: 130px"] ul {
363
+ margin: 0 !important;
364
+ padding-left: 24px !important;
365
+ }
366
+
367
+ .gradio-container div[style*="margin-left: 130px"] li {
368
+ margin: 10px 0 !important;
369
+ color: rgba(255, 255, 255, 0.85) !important;
370
+ font-size: 0.95em !important;
371
+ }
372
+
373
+ /* ============================================
374
+ HEADER SECTION REFINEMENT
375
+ ============================================ */
376
+ div[style*="border-bottom-left-radius:40px"] {
377
+ margin-bottom: 40px !important;
378
+ border: 1px solid rgba(255, 255, 255, 0.1) !important;
379
+ }
380
+
381
+ /* ============================================
382
+ RESPONSIVE IMPROVEMENTS
383
+ ============================================ */
384
+ @media (max-width: 1200px) {
385
+ .gradio-container {
386
+ max-width: 95% !important;
387
+ padding: 20px !important;
388
+ }
389
+ }
390
+
391
+ @media (max-width: 768px) {
392
+ .gradio-container div[style*="margin-left: 130px"] {
393
+ padding: 20px !important;
394
+ }
395
+
396
+ div[style*="flex:1; display:flex"] {
397
+ flex-direction: column !important;
398
+ }
399
+ }
400
+
401
+ @keyframes gridScroll {
402
+ 0% {
403
+ transform: translate(0, 0);
404
+ }
405
+ 100% {
406
+ transform: translate(60px, 60px);
407
+ }
408
+ }
409
+
410
+ @keyframes floatOrb1 {
411
+ 0%,
412
+ 100% {
413
+ transform: translate(0, 0) scale(1);
414
+ opacity: 0.4;
415
+ }
416
+ 33% {
417
+ transform: translate(-50px, 40px) scale(1.15);
418
+ opacity: 0.6;
419
+ }
420
+ 66% {
421
+ transform: translate(30px, -30px) scale(0.9);
422
+ opacity: 0.5;
423
+ }
424
+ }
425
+
426
+ @keyframes floatOrb2 {
427
+ 0%,
428
+ 100% {
429
+ transform: translate(0, 0) scale(1);
430
+ opacity: 0.35;
431
+ }
432
+ 33% {
433
+ transform: translate(40px, -50px) scale(0.85);
434
+ opacity: 0.5;
435
+ }
436
+ 66% {
437
+ transform: translate(-35px, 35px) scale(1.1);
438
+ opacity: 0.45;
439
+ }
440
+ }
441
+
442
+ /* ============================================
443
+ SMOOTH SCROLLING
444
+ ============================================ */
445
+ html {
446
+ scroll-behavior: smooth;
447
+ }
448
+
449
+ /* ============================================
450
+ ACCESSIBILITY & POLISH
451
+ ============================================ */
452
+ * {
453
+ -webkit-font-smoothing: antialiased;
454
+ -moz-osx-font-smoothing: grayscale;
455
+ }
456
+
457
+ ::selection {
458
+ background: rgba(59, 130, 246, 0.3);
459
+ color: white;
460
+ }
461
+
462
+ /* Force page header title to stay on one line */
463
+ h1 {
464
+ white-space: nowrap !important;
465
+ width: auto !important;
466
+ }