AlBaraa63 commited on
Commit
04926a9
Β·
1 Parent(s): 05df09f

Enhance UI for mobile responsiveness and improve styling across components

Browse files
Files changed (1) hide show
  1. app.py +175 -56
app.py CHANGED
@@ -305,7 +305,7 @@ def load_sample_json():
305
  # GRADIO INTERFACE
306
  # ============================================================================
307
 
308
- # Custom CSS for beautiful UI
309
  custom_css = """
310
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
311
 
@@ -313,26 +313,40 @@ custom_css = """
313
  font-family: 'Inter', sans-serif !important;
314
  max-width: 1400px !important;
315
  margin: 0 auto !important;
 
316
  }
317
 
318
- /* Header styling */
319
  .gradio-container h1 {
320
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
321
  -webkit-background-clip: text;
322
  -webkit-text-fill-color: transparent;
323
  background-clip: text;
324
- font-size: 3em !important;
325
  font-weight: 700 !important;
326
  text-align: center;
327
  margin-bottom: 0.5em;
 
 
 
 
 
 
 
 
 
 
 
328
  }
329
 
330
- /* Tab styling */
331
  .tab-nav {
332
  border-radius: 12px !important;
333
  background: linear-gradient(to right, #f8f9fa, #e9ecef) !important;
334
  padding: 8px !important;
335
  margin-bottom: 20px !important;
 
 
336
  }
337
 
338
  button.selected {
@@ -341,19 +355,25 @@ button.selected {
341
  border-radius: 8px !important;
342
  font-weight: 600 !important;
343
  box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4) !important;
 
 
344
  }
345
 
346
- /* Button styling */
347
  .primary-btn {
348
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important;
349
  border: none !important;
350
  color: white !important;
351
  font-weight: 600 !important;
352
  border-radius: 10px !important;
353
- padding: 12px 24px !important;
354
  font-size: 16px !important;
355
  transition: all 0.3s ease !important;
356
  box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4) !important;
 
 
 
 
357
  }
358
 
359
  .primary-btn:hover {
@@ -361,26 +381,35 @@ button.selected {
361
  box-shadow: 0 6px 20px rgba(102, 126, 234, 0.6) !important;
362
  }
363
 
364
- /* Input fields */
 
 
 
 
365
  textarea, input[type="text"] {
366
  border-radius: 10px !important;
367
  border: 2px solid #e9ecef !important;
368
  padding: 12px !important;
369
- font-size: 15px !important;
370
  transition: border-color 0.3s ease !important;
 
 
371
  }
372
 
373
  textarea:focus, input[type="text"]:focus {
374
  border-color: #667eea !important;
375
  box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1) !important;
 
376
  }
377
 
378
- /* Output boxes */
379
  .output-class {
380
  background: linear-gradient(to bottom, #ffffff, #f8f9fa) !important;
381
  border-radius: 12px !important;
382
- padding: 20px !important;
383
  border: 2px solid #e9ecef !important;
 
 
384
  }
385
 
386
  /* Cards and containers */
@@ -390,54 +419,144 @@ textarea:focus, input[type="text"]:focus {
390
  box-shadow: 0 2px 8px rgba(0,0,0,0.05) !important;
391
  }
392
 
393
- /* Labels */
394
  label {
395
  font-weight: 600 !important;
396
  color: #495057 !important;
397
- font-size: 14px !important;
398
  margin-bottom: 8px !important;
 
399
  }
400
 
401
- /* Examples */
402
  .gr-samples-table {
403
  border-radius: 10px !important;
404
- overflow: hidden !important;
 
405
  }
406
 
407
- /* Footer */
408
  .footer {
409
  text-align: center;
410
- padding: 30px;
411
  background: linear-gradient(to right, #f8f9fa, #e9ecef);
412
  border-radius: 12px;
413
  margin-top: 30px;
414
  }
415
 
416
- /* Image display */
417
  .gr-image {
418
  border-radius: 12px !important;
419
  border: 2px solid #e9ecef !important;
420
  box-shadow: 0 4px 15px rgba(0,0,0,0.1) !important;
 
 
421
  }
422
 
423
- /* Radio buttons and checkboxes */
424
  .gr-radio, .gr-checkbox {
425
- padding: 10px !important;
426
  border-radius: 8px !important;
427
  }
428
 
429
- /* File upload */
 
 
 
 
 
 
 
430
  .gr-file {
431
  border: 2px dashed #667eea !important;
432
  border-radius: 12px !important;
433
  background: linear-gradient(to bottom, #ffffff, #f8f9fa) !important;
434
- padding: 30px !important;
 
435
  }
436
 
437
  .gr-file:hover {
438
  border-color: #764ba2 !important;
439
  background: #f8f9fa !important;
440
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
441
  """
442
 
443
  # Create Gradio interface
@@ -447,9 +566,9 @@ with gr.Blocks(theme=gr.themes.Soft(), css=custom_css, title="MissionControlMCP
447
  gr.Markdown("### Enterprise Automation Tools - Powered by AI")
448
 
449
  gr.HTML("""
450
- <div style="text-align: center; padding: 20px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 15px; color: white; margin-bottom: 30px;">
451
- <h3 style="color: white; margin: 0;">✨ Try all 8 powerful tools in your browser - No installation needed! ✨</h3>
452
- <p style="margin: 10px 0 0 0; opacity: 0.9;">Built for HuggingFace Gradio Hackathon | Claude MCP Integration</p>
453
  </div>
454
  """)
455
 
@@ -830,55 +949,55 @@ with gr.Blocks(theme=gr.themes.Soft(), css=custom_css, title="MissionControlMCP
830
  # Footer
831
  gr.HTML("""
832
  <div class="footer">
833
- <h2 style="margin-bottom: 20px;">🎯 About MissionControlMCP</h2>
834
 
835
- <p style="font-size: 18px; margin-bottom: 20px;">
836
  <strong>8 enterprise-grade automation tools</strong> integrated with Claude Desktop via Model Context Protocol (MCP)
837
  </p>
838
 
839
- <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; margin: 30px 0;">
840
- <div style="padding: 15px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
841
- <strong>πŸ“„ PDF Reader</strong><br/>
842
- <small>Extract text from documents</small>
843
  </div>
844
- <div style="padding: 15px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
845
- <strong>πŸ“ Text Extractor</strong><br/>
846
- <small>Keywords & summaries</small>
847
  </div>
848
- <div style="padding: 15px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
849
- <strong>🌐 Web Fetcher</strong><br/>
850
- <small>Scrape websites</small>
851
  </div>
852
- <div style="padding: 15px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
853
- <strong>πŸ” RAG Search</strong><br/>
854
- <small>Semantic search</small>
855
  </div>
856
- <div style="padding: 15px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
857
- <strong>πŸ“Š Data Visualizer</strong><br/>
858
- <small>Create charts</small>
859
  </div>
860
- <div style="padding: 15px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
861
- <strong>πŸ”„ File Converter</strong><br/>
862
- <small>Format conversions</small>
863
  </div>
864
- <div style="padding: 15px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
865
- <strong>πŸ“§ Email Classifier</strong><br/>
866
- <small>Intent detection</small>
867
  </div>
868
- <div style="padding: 15px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
869
- <strong>πŸ“ˆ KPI Generator</strong><br/>
870
- <small>Business analytics</small>
871
  </div>
872
  </div>
873
 
874
- <div style="margin-top: 30px; padding-top: 20px; border-top: 2px solid #e9ecef;">
875
- <p style="font-size: 16px; margin: 10px 0;">
876
- πŸ”— <a href="https://github.com/AlBaraa-1/CleanEye-Hackathon" target="_blank" style="color: #667eea; text-decoration: none; font-weight: 600;">View on GitHub</a>
877
  </p>
878
- <p style="margin: 10px 0; color: #6c757d;">
879
  πŸ† Built for HuggingFace Gradio x BuildWithMCP Hackathon
880
  </p>
881
- <p style="margin: 10px 0; color: #6c757d;">
882
  Made with ❀️ using Python, Gradio, Claude MCP, FAISS, and Sentence Transformers
883
  </p>
884
  </div>
 
305
  # GRADIO INTERFACE
306
  # ============================================================================
307
 
308
+ # Custom CSS for beautiful UI with mobile responsiveness
309
  custom_css = """
310
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
311
 
 
313
  font-family: 'Inter', sans-serif !important;
314
  max-width: 1400px !important;
315
  margin: 0 auto !important;
316
+ padding: 10px !important;
317
  }
318
 
319
+ /* Header styling - Responsive */
320
  .gradio-container h1 {
321
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
322
  -webkit-background-clip: text;
323
  -webkit-text-fill-color: transparent;
324
  background-clip: text;
325
+ font-size: clamp(1.8em, 5vw, 3em) !important;
326
  font-weight: 700 !important;
327
  text-align: center;
328
  margin-bottom: 0.5em;
329
+ padding: 0 10px !important;
330
+ }
331
+
332
+ /* Mobile-friendly header text */
333
+ .gradio-container h3 {
334
+ font-size: clamp(1em, 3vw, 1.5em) !important;
335
+ line-height: 1.4 !important;
336
+ }
337
+
338
+ .gradio-container h2 {
339
+ font-size: clamp(1.2em, 3.5vw, 2em) !important;
340
  }
341
 
342
+ /* Tab styling - Mobile optimized */
343
  .tab-nav {
344
  border-radius: 12px !important;
345
  background: linear-gradient(to right, #f8f9fa, #e9ecef) !important;
346
  padding: 8px !important;
347
  margin-bottom: 20px !important;
348
+ overflow-x: auto !important;
349
+ -webkit-overflow-scrolling: touch !important;
350
  }
351
 
352
  button.selected {
 
355
  border-radius: 8px !important;
356
  font-weight: 600 !important;
357
  box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4) !important;
358
+ min-width: 120px !important;
359
+ white-space: nowrap !important;
360
  }
361
 
362
+ /* Button styling - Touch-friendly */
363
  .primary-btn {
364
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important;
365
  border: none !important;
366
  color: white !important;
367
  font-weight: 600 !important;
368
  border-radius: 10px !important;
369
+ padding: 14px 24px !important;
370
  font-size: 16px !important;
371
  transition: all 0.3s ease !important;
372
  box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4) !important;
373
+ width: 100% !important;
374
+ min-height: 48px !important;
375
+ cursor: pointer !important;
376
+ -webkit-tap-highlight-color: rgba(102, 126, 234, 0.3) !important;
377
  }
378
 
379
  .primary-btn:hover {
 
381
  box-shadow: 0 6px 20px rgba(102, 126, 234, 0.6) !important;
382
  }
383
 
384
+ .primary-btn:active {
385
+ transform: translateY(0) !important;
386
+ }
387
+
388
+ /* Input fields - Mobile optimized */
389
  textarea, input[type="text"] {
390
  border-radius: 10px !important;
391
  border: 2px solid #e9ecef !important;
392
  padding: 12px !important;
393
+ font-size: 16px !important;
394
  transition: border-color 0.3s ease !important;
395
+ width: 100% !important;
396
+ box-sizing: border-box !important;
397
  }
398
 
399
  textarea:focus, input[type="text"]:focus {
400
  border-color: #667eea !important;
401
  box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1) !important;
402
+ outline: none !important;
403
  }
404
 
405
+ /* Output boxes - Scrollable on mobile */
406
  .output-class {
407
  background: linear-gradient(to bottom, #ffffff, #f8f9fa) !important;
408
  border-radius: 12px !important;
409
+ padding: 15px !important;
410
  border: 2px solid #e9ecef !important;
411
+ overflow-x: auto !important;
412
+ -webkit-overflow-scrolling: touch !important;
413
  }
414
 
415
  /* Cards and containers */
 
419
  box-shadow: 0 2px 8px rgba(0,0,0,0.05) !important;
420
  }
421
 
422
+ /* Labels - Larger for readability */
423
  label {
424
  font-weight: 600 !important;
425
  color: #495057 !important;
426
+ font-size: 15px !important;
427
  margin-bottom: 8px !important;
428
+ display: block !important;
429
  }
430
 
431
+ /* Examples - Mobile scrollable */
432
  .gr-samples-table {
433
  border-radius: 10px !important;
434
+ overflow-x: auto !important;
435
+ -webkit-overflow-scrolling: touch !important;
436
  }
437
 
438
+ /* Footer - Responsive */
439
  .footer {
440
  text-align: center;
441
+ padding: 20px 15px !important;
442
  background: linear-gradient(to right, #f8f9fa, #e9ecef);
443
  border-radius: 12px;
444
  margin-top: 30px;
445
  }
446
 
447
+ /* Image display - Responsive */
448
  .gr-image {
449
  border-radius: 12px !important;
450
  border: 2px solid #e9ecef !important;
451
  box-shadow: 0 4px 15px rgba(0,0,0,0.1) !important;
452
+ max-width: 100% !important;
453
+ height: auto !important;
454
  }
455
 
456
+ /* Radio buttons and checkboxes - Touch-friendly */
457
  .gr-radio, .gr-checkbox {
458
+ padding: 12px !important;
459
  border-radius: 8px !important;
460
  }
461
 
462
+ .gr-radio label, .gr-checkbox label {
463
+ padding: 8px 12px !important;
464
+ min-height: 44px !important;
465
+ display: flex !important;
466
+ align-items: center !important;
467
+ }
468
+
469
+ /* File upload - Mobile optimized */
470
  .gr-file {
471
  border: 2px dashed #667eea !important;
472
  border-radius: 12px !important;
473
  background: linear-gradient(to bottom, #ffffff, #f8f9fa) !important;
474
+ padding: 20px 15px !important;
475
+ min-height: 100px !important;
476
  }
477
 
478
  .gr-file:hover {
479
  border-color: #764ba2 !important;
480
  background: #f8f9fa !important;
481
  }
482
+
483
+ /* Mobile-specific styles */
484
+ @media (max-width: 768px) {
485
+ .gradio-container {
486
+ padding: 8px !important;
487
+ }
488
+
489
+ .tab-nav button {
490
+ font-size: 14px !important;
491
+ padding: 10px 12px !important;
492
+ }
493
+
494
+ .primary-btn {
495
+ font-size: 15px !important;
496
+ padding: 16px 20px !important;
497
+ }
498
+
499
+ .output-class {
500
+ padding: 12px !important;
501
+ font-size: 14px !important;
502
+ }
503
+
504
+ .footer {
505
+ padding: 15px 10px !important;
506
+ }
507
+
508
+ .footer h2 {
509
+ font-size: 1.5em !important;
510
+ margin-bottom: 15px !important;
511
+ }
512
+
513
+ .footer p {
514
+ font-size: 14px !important;
515
+ }
516
+ }
517
+
518
+ /* Small mobile devices */
519
+ @media (max-width: 480px) {
520
+ .gradio-container h1 {
521
+ font-size: 1.5em !important;
522
+ }
523
+
524
+ .tab-nav {
525
+ padding: 5px !important;
526
+ }
527
+
528
+ .tab-nav button {
529
+ font-size: 12px !important;
530
+ padding: 8px 10px !important;
531
+ min-width: 100px !important;
532
+ }
533
+
534
+ textarea, input[type="text"] {
535
+ font-size: 16px !important;
536
+ padding: 10px !important;
537
+ }
538
+
539
+ .output-class {
540
+ font-size: 13px !important;
541
+ padding: 10px !important;
542
+ }
543
+ }
544
+
545
+ /* Landscape mobile */
546
+ @media (max-width: 768px) and (orientation: landscape) {
547
+ .gradio-container h1 {
548
+ font-size: 2em !important;
549
+ margin-bottom: 0.3em !important;
550
+ }
551
+ }
552
+
553
+ /* Touch target improvements */
554
+ @media (hover: none) and (pointer: coarse) {
555
+ button, a, input, select, textarea {
556
+ min-height: 44px !important;
557
+ min-width: 44px !important;
558
+ }
559
+ }
560
  """
561
 
562
  # Create Gradio interface
 
566
  gr.Markdown("### Enterprise Automation Tools - Powered by AI")
567
 
568
  gr.HTML("""
569
+ <div style="text-align: center; padding: 15px 10px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 15px; color: white; margin-bottom: 20px;">
570
+ <h3 style="color: white; margin: 0; font-size: clamp(1em, 3vw, 1.3em); line-height: 1.4;">✨ Try all 8 powerful tools in your browser - No installation needed! ✨</h3>
571
+ <p style="margin: 10px 0 0 0; opacity: 0.9; font-size: clamp(0.8em, 2.5vw, 1em);">Built for HuggingFace Gradio Hackathon | Claude MCP Integration</p>
572
  </div>
573
  """)
574
 
 
949
  # Footer
950
  gr.HTML("""
951
  <div class="footer">
952
+ <h2 style="margin-bottom: 15px; font-size: clamp(1.2em, 4vw, 1.8em);">🎯 About MissionControlMCP</h2>
953
 
954
+ <p style="font-size: clamp(0.9em, 3vw, 1.1em); margin-bottom: 20px; padding: 0 10px;">
955
  <strong>8 enterprise-grade automation tools</strong> integrated with Claude Desktop via Model Context Protocol (MCP)
956
  </p>
957
 
958
+ <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 12px; margin: 20px 0; padding: 0 10px;">
959
+ <div style="padding: 12px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
960
+ <strong style="font-size: clamp(0.9em, 2.5vw, 1em);">πŸ“„ PDF Reader</strong><br/>
961
+ <small style="font-size: clamp(0.75em, 2vw, 0.85em);">Extract text from documents</small>
962
  </div>
963
+ <div style="padding: 12px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
964
+ <strong style="font-size: clamp(0.9em, 2.5vw, 1em);">πŸ“ Text Extractor</strong><br/>
965
+ <small style="font-size: clamp(0.75em, 2vw, 0.85em);">Keywords & summaries</small>
966
  </div>
967
+ <div style="padding: 12px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
968
+ <strong style="font-size: clamp(0.9em, 2.5vw, 1em);">🌐 Web Fetcher</strong><br/>
969
+ <small style="font-size: clamp(0.75em, 2vw, 0.85em);">Scrape websites</small>
970
  </div>
971
+ <div style="padding: 12px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
972
+ <strong style="font-size: clamp(0.9em, 2.5vw, 1em);">πŸ” RAG Search</strong><br/>
973
+ <small style="font-size: clamp(0.75em, 2vw, 0.85em);">Semantic search</small>
974
  </div>
975
+ <div style="padding: 12px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
976
+ <strong style="font-size: clamp(0.9em, 2.5vw, 1em);">πŸ“Š Data Visualizer</strong><br/>
977
+ <small style="font-size: clamp(0.75em, 2vw, 0.85em);">Create charts</small>
978
  </div>
979
+ <div style="padding: 12px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
980
+ <strong style="font-size: clamp(0.9em, 2.5vw, 1em);">πŸ”„ File Converter</strong><br/>
981
+ <small style="font-size: clamp(0.75em, 2vw, 0.85em);">Format conversions</small>
982
  </div>
983
+ <div style="padding: 12px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
984
+ <strong style="font-size: clamp(0.9em, 2.5vw, 1em);">πŸ“§ Email Classifier</strong><br/>
985
+ <small style="font-size: clamp(0.75em, 2vw, 0.85em);">Intent detection</small>
986
  </div>
987
+ <div style="padding: 12px; background: white; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
988
+ <strong style="font-size: clamp(0.9em, 2.5vw, 1em);">πŸ“ˆ KPI Generator</strong><br/>
989
+ <small style="font-size: clamp(0.75em, 2vw, 0.85em);">Business analytics</small>
990
  </div>
991
  </div>
992
 
993
+ <div style="margin-top: 20px; padding-top: 15px; border-top: 2px solid #e9ecef;">
994
+ <p style="font-size: clamp(0.9em, 2.5vw, 1em); margin: 10px 0; padding: 0 10px;">
995
+ πŸ”— <a href="https://github.com/AlBaraa-1/CleanEye-Hackathon" target="_blank" style="color: #667eea; text-decoration: none; font-weight: 600; word-break: break-word;">View on GitHub</a>
996
  </p>
997
+ <p style="margin: 10px 0; color: #6c757d; font-size: clamp(0.8em, 2.2vw, 0.95em); padding: 0 10px;">
998
  πŸ† Built for HuggingFace Gradio x BuildWithMCP Hackathon
999
  </p>
1000
+ <p style="margin: 10px 0; color: #6c757d; font-size: clamp(0.8em, 2.2vw, 0.95em); padding: 0 10px;">
1001
  Made with ❀️ using Python, Gradio, Claude MCP, FAISS, and Sentence Transformers
1002
  </p>
1003
  </div>