Nischal Subedi commited on
Commit
38f68bc
·
1 Parent(s): b2577ee
Files changed (1) hide show
  1. app.py +68 -71
app.py CHANGED
@@ -239,7 +239,7 @@ Answer:"""
239
  logging.error(f"Failed to load or process PDF '{pdf_path}': {str(e)}", exc_info=True)
240
  raise RuntimeError(f"Failed to process PDF '{pdf_path}': {e}") from e
241
 
242
- # --- GRADIO INTERFACE (NEW UI DESIGN BASED ON IMAGE) ---
243
  def gradio_interface(self):
244
  def query_interface_wrapper(api_key: str, query: str, state: str) -> str:
245
  if not api_key or not api_key.strip() or not api_key.startswith("sk-"):
@@ -286,43 +286,41 @@ Answer:"""
286
  example_queries.append(["What basic rights do tenants have?", "California"])
287
 
288
 
289
- # Custom CSS for the dark theme based on the provided image and latest requests
290
  custom_css = """
291
  /* Import legible fonts from Google Fonts */
292
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Poppins:wght@600;700;800&display=swap');
293
 
294
- /* Root variables for consistent theming - based on image's dark theme */
295
  :root {
296
- --primary-color: hsl(150, 60%, 50%); /* Vibrant Seafoam Green for highlights (Submit button, focus) */
297
- --primary-hover: hsl(150, 60%, 45%);
298
- --accent-orange: hsl(30, 90%, 55%); /* Vibrant Orange for specific highlights (Disclaimer) */
299
 
300
- --background-app: hsl(210, 15%, 15%); /* Dark charcoal/navy for overall background */
301
- --background-card: hsl(210, 30%, 20%); /* Deep blue for main content cards (image primary blue) */
302
- --background-input-output: hsl(0, 0%, 100%); /* PURE WHITE for input/output elements (as per latest request) */
 
303
 
304
- --text-on-dark: hsl(0, 0%, 95%); /* Very light text (white/light gray) for dark backgrounds */
305
- --text-dark: hsl(210, 20%, 20%); /* Dark text for light backgrounds (input/output text) */
306
 
307
- --text-muted-on-dark: hsl(210, 10%, 70%); /* Muted light text for secondary info on dark backgrounds */
308
- --text-muted-on-input: hsl(210, 15%, 55%); /* Muted blue-gray for placeholders on white input fields */
309
 
310
- --border-card: hsl(210, 10%, 65%); /* Light gray for outer card borders (from image) */
311
- --border-input: hsl(210, 15%, 45%); /* Mid-tone blue-gray for borders on inner elements (original image) */
312
- --border-white-input: hsl(210, 5%, 80%); /* Light gray border for white input fields (new) */
313
 
314
- --shadow-sm: 0 1px 3px rgba(0,0,0,0.15);
315
- --shadow-md: 0 4px 10px rgba(0,0,0,0.3);
316
- --shadow-lg: 0 10px 20px rgba(0,0,0,0.4);
317
 
318
- --error-bg: hsl(0, 70%, 20%);
319
- --error-border: hsl(0, 70%, 35%);
320
- --error-text: hsl(0, 90%, 80%);
321
 
322
- --button-secondary-bg: hsl(0, 0%, 85%); /* Light gray button */
323
- --button-secondary-text: hsl(210, 30%, 20%); /* Dark text for secondary button */
324
-
325
- --link-footer-color: var(--primary-color); /* GREEN for footer links (as per latest request, overrides image) */
326
  }
327
 
328
  /* Body and Gradio Container */
@@ -335,15 +333,14 @@ Answer:"""
335
  padding: 1.5rem !important;
336
  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;
337
  background-color: var(--background-app) !important; /* Overall background */
338
- box-shadow: none !important;
339
- border: 2px solid var(--border-card) !important; /* Outer border as per image */
340
  border-radius: 16px !important;
341
  }
342
 
343
- /* Header Styling (title box) - background matches other cards, not different */
344
  .app-header-wrapper {
345
- background: var(--background-card) !important; /* Consistent deep blue with other cards (as per image) */
346
- border: 2px solid var(--border-card) !important; /* Border for header is the same as card border */
347
  border-radius: 16px !important;
348
  padding: 2.5rem 1.5rem !important;
349
  margin-bottom: 1.5rem !important;
@@ -351,7 +348,7 @@ Answer:"""
351
  box-shadow: var(--shadow-md) !important;
352
  position: relative;
353
  overflow: hidden;
354
- color: var(--text-on-dark) !important;
355
  }
356
  .app-header-wrapper::before { /* Subtle background pattern */
357
  content: '';
@@ -360,8 +357,8 @@ Answer:"""
360
  left: 0;
361
  width: 100%;
362
  height: 100%;
363
- background: radial-gradient(circle at top left, rgba(60,179,113,0.08) 0%, transparent 40%),
364
- radial-gradient(circle at bottom right, rgba(60,179,113,0.08) 0%, transparent 40%);
365
  z-index: 0;
366
  opacity: 0.8;
367
  pointer-events: none;
@@ -370,7 +367,7 @@ Answer:"""
370
  font-size: 4.5rem !important; /* Larger icon */
371
  margin-bottom: 0.75rem !important;
372
  display: block !important;
373
- color: var(--border-card) !important; /* Light gray for icon as per image */
374
  position: relative;
375
  z-index: 1;
376
  animation: float-icon 3s ease-in-out infinite alternate;
@@ -384,7 +381,7 @@ Answer:"""
384
  font-family: 'Poppins', sans-serif !important;
385
  font-size: 3rem !important;
386
  font-weight: 800 !important; /* Bold */
387
- color: var(--text-on-dark) !important; /* White for title */
388
  margin: 0 0 0.75rem 0 !important;
389
  line-height: 1.1 !important;
390
  letter-spacing: -0.03em !important;
@@ -393,7 +390,7 @@ Answer:"""
393
  }
394
  .app-header-tagline {
395
  font-size: 1.25rem !important;
396
- color: var(--text-on-dark) !important; /* White for tagline */
397
  font-weight: 400 !important;
398
  margin: 0 !important;
399
  max-width: 700px;
@@ -410,50 +407,50 @@ Answer:"""
410
  gap: 1.25rem !important;
411
  }
412
  .dashboard-card-section {
413
- background: var(--background-card) !important; /* Deep blue for content cards */
414
- border: 2px solid var(--border-card) !important; /* Border for all cards */
415
  border-radius: 12px !important;
416
  padding: 1.75rem !important;
417
  box-shadow: var(--shadow-sm) !important;
418
  transition: all 0.3s ease-out !important;
419
  cursor: default;
420
- color: var(--text-on-dark) !important; /* Ensure card content text is light */
421
  }
422
  .dashboard-card-section:hover {
423
  box-shadow: var(--shadow-md) !important;
424
  transform: translateY(-3px) !important;
425
  }
426
 
427
- /* Section Titles (e.g., "Welcome & Disclaimer") - now centered */
428
  .sub-section-title {
429
  font-family: 'Poppins', sans-serif !important;
430
  font-size: 1.7rem !important;
431
  font-weight: 700 !important; /* Bold */
432
- color: var(--text-on-dark) !important; /* White for titles */
433
- text-align: center !important; /* CENTERED as per latest request */
434
  margin: 0 0 1.25rem 0 !important;
435
  padding-bottom: 0.75rem !important;
436
- border-bottom: 1px dashed rgba(255, 255, 255, 0.15) !important; /* Subtle light dashed line as separator */
437
  display: block !important;
438
  letter-spacing: -0.01em !important;
439
  }
440
  .dashboard-card-section p {
441
  line-height: 1.7 !important;
442
- color: var(--text-on-dark) !important; /* Text on dark cards is white */
443
  font-size: 1rem !important;
444
  }
445
  .dashboard-card-section strong {
446
  color: var(--accent-orange) !important; /* Orange for specific strong text (e.g., Disclaimer) */
447
  }
448
 
449
- /* Input Styling (textboxes, dropdowns) - now pure white backgrounds */
450
  .gradio-textbox textarea,
451
  .gradio-textbox input,
452
  .gradio-dropdown > div > input[type="text"],
453
  .gradio-dropdown .primary-wrap,
454
  .gradio-dropdown .scroll-hide {
455
- background: var(--background-input-output) !important; /* PURE WHITE background for inputs */
456
- border: 2px solid var(--border-white-input) !important; /* Light gray border for white inputs */
457
  border-radius: 8px !important;
458
  padding: 0.85rem 1rem !important;
459
  font-size: 0.98rem !important;
@@ -464,7 +461,7 @@ Answer:"""
464
  }
465
  .gradio-textbox textarea::placeholder,
466
  .gradio-textbox input::placeholder {
467
- color: var(--text-muted-on-input) !important; /* Muted blue-gray placeholder text */
468
  opacity: 0.7;
469
  }
470
  .gradio-textbox textarea:focus,
@@ -472,13 +469,13 @@ Answer:"""
472
  .gradio-dropdown > div > input[type="text"]:focus,
473
  .gradio-dropdown .primary-wrap.focused {
474
  outline: none !important;
475
- border-color: var(--primary-color) !important; /* Green border on focus */
476
- box-shadow: 0 0 0 4px rgba(60, 179, 113, 0.3) !important; /* Green glow on focus */
477
  }
478
  .gradio-textbox label,
479
  .gradio-dropdown label {
480
  font-weight: 600 !important;
481
- color: var(--text-on-dark) !important; /* Labels (on dark card background) are white */
482
  font-size: 1rem !important;
483
  margin-bottom: 0.6rem !important;
484
  display: block !important;
@@ -486,7 +483,7 @@ Answer:"""
486
  .gradio-textbox .gr-form,
487
  .gradio-dropdown .gr-form {
488
  font-size: 0.9rem !important;
489
- color: var(--text-muted-on-dark) !important; /* Info text (on dark card background) is muted light */
490
  margin-top: 0.4rem !important;
491
  }
492
  .input-row {
@@ -532,10 +529,10 @@ Answer:"""
532
  .gr-button-secondary {
533
  background: var(--button-secondary-bg) !important; /* Light gray button */
534
  color: var(--button-secondary-text) !important; /* Dark text */
535
- border-color: var(--border-card) !important; /* Border matches general card border */
536
  }
537
  .gr-button-secondary:hover {
538
- background: hsl(0, 0%, 75%) !important; /* Darker gray on hover */
539
  border-color: var(--primary-color) !important; /* Green border on hover */
540
  transform: translateY(-2px) !important;
541
  }
@@ -544,10 +541,10 @@ Answer:"""
544
  box-shadow: none !important;
545
  }
546
 
547
- /* Output Styling - now pure white background */
548
  .output-content-wrapper {
549
- background: var(--background-input-output) !important; /* PURE WHITE background for output box */
550
- border: 2px dashed var(--border-input) !important; /* Dashed light blue-gray border */
551
  border-radius: 8px !important;
552
  padding: 1.5rem !important;
553
  min-height: 150px !important;
@@ -586,7 +583,7 @@ Answer:"""
586
  }
587
  .divider {
588
  border: none !important;
589
- border-top: 1px dashed var(--border-input) !important; /* Dashed light blue-gray divider */
590
  margin: 1rem 0 !important;
591
  }
592
  .error-message {
@@ -621,19 +618,19 @@ Answer:"""
621
  opacity: 0.8;
622
  }
623
  .placeholder {
624
- background: var(--background-input-output) !important; /* PURE WHITE background for placeholder */
625
- border: 2px dashed var(--border-input) !important; /* Dashed light blue-gray border */
626
  border-radius: 8px !important;
627
  padding: 2.5rem 1.5rem !important;
628
  text-align: center !important;
629
- color: var(--text-muted-on-input) !important; /* Muted blue-gray text for placeholder */
630
  font-style: italic !important;
631
  font-size: 1.1rem !important;
632
  width: 100%;
633
  box-sizing: border-box;
634
  }
635
 
636
- /* Examples Table Styling - now pure white background rows */
637
  .examples-section .gr-samples-table {
638
  border: 2px solid var(--border-card) !important; /* Outer table border matches cards */
639
  border-radius: 8px !important;
@@ -648,14 +645,14 @@ Answer:"""
648
  text-align: left !important;
649
  }
650
  .examples-section .gr-samples-table th {
651
- background: var(--background-card) !important; /* Deep blue for example header */
652
  font-weight: 700 !important;
653
- color: var(--text-on-dark) !important; /* White text for header */
654
  }
655
  .examples-section .gr-samples-table td {
656
- background: var(--background-input-output) !important; /* PURE WHITE for example rows */
657
  color: var(--text-dark) !important; /* Dark text for example rows */
658
- border-top: 1px solid var(--border-input) !important; /* Mid-tone blue-gray border between rows */
659
  cursor: pointer !important;
660
  transition: background 0.2s ease, transform 0.1s ease !important;
661
  }
@@ -671,22 +668,22 @@ Answer:"""
671
 
672
  /* Footer Styling */
673
  .app-footer-wrapper {
674
- background: var(--background-card) !important; /* Deep blue for footer */
675
  border: 2px solid var(--border-card) !important;
676
  border-radius: 12px !important;
677
  padding: 1.75rem !important;
678
  margin-top: 1.5rem !important;
679
  text-align: center !important;
680
- color: var(--text-muted-on-dark) !important; /* Muted light text for footer */
681
  }
682
  .app-footer p {
683
  margin: 0.6rem 0 !important;
684
  font-size: 0.95rem !important;
685
- color: var(--text-muted-on-dark) !important; /* Muted light text */
686
  line-height: 1.6 !important;
687
  }
688
  .app-footer a {
689
- color: var(--link-footer-color) !important; /* GREEN highlight for links (as per latest request) */
690
  text-decoration: none !important;
691
  font-weight: 600 !important;
692
  transition: text-decoration 0.2s ease, text-decoration-color 0.2s ease !important;
 
239
  logging.error(f"Failed to load or process PDF '{pdf_path}': {str(e)}", exc_info=True)
240
  raise RuntimeError(f"Failed to process PDF '{pdf_path}': {e}") from e
241
 
242
+ # --- GRADIO INTERFACE (NEW UI DESIGN BASED ON VERBAL REQUIREMENTS) ---
243
  def gradio_interface(self):
244
  def query_interface_wrapper(api_key: str, query: str, state: str) -> str:
245
  if not api_key or not api_key.strip() or not api_key.startswith("sk-"):
 
286
  example_queries.append(["What basic rights do tenants have?", "California"])
287
 
288
 
289
+ # Custom CSS for the light theme with clear boxes and dynamic effects
290
  custom_css = """
291
  /* Import legible fonts from Google Fonts */
292
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Poppins:wght@600;700;800&display=swap');
293
 
294
+ /* Root variables for consistent theming - based on verbal instructions */
295
  :root {
296
+ --primary-color: hsl(150, 60%, 35%); /* Darker Seafoam Green (for text, links, primary button) */
297
+ --primary-hover: hsl(150, 60%, 30%);
298
+ --accent-orange: hsl(30, 90%, 55%); /* Vibrant Orange for Disclaimer */
299
 
300
+ --background-app: hsl(180, 20%, 98%); /* Very light, off-white seafoam for overall background */
301
+ --background-header: hsl(150, 40%, 92%); /* Slightly more saturated light seafoam for header */
302
+ --background-card: hsl(0, 0%, 100%); /* Pure white for content cards */
303
+ --background-input-output: hsl(0, 0%, 100%); /* Pure white for input/output elements */
304
 
305
+ --text-dark: hsl(210, 20%, 20%); /* Dark text for readability on light backgrounds */
306
+ --text-light: hsl(210, 10%, 30%); /* Slightly lighter dark for general text on white cards */
307
 
308
+ --text-muted: hsl(210, 10%, 50%); /* Muted gray for secondary info/placeholders */
 
309
 
310
+ --border-card: hsl(210, 10%, 85%); /* Light gray border for cards */
311
+ --border-input: hsl(210, 10%, 75%); /* Slightly darker gray for input borders */
312
+ --border-focus: var(--primary-color); /* Primary color for focus borders */
313
 
314
+ --shadow-sm: 0 1px 3px rgba(0,0,0,0.08);
315
+ --shadow-md: 0 4px 10px rgba(0,0,0,0.15);
316
+ --shadow-lg: 0 10px 20px rgba(0,0,0,0.25);
317
 
318
+ --error-bg: hsl(0, 80%, 95%);
319
+ --error-border: hsl(0, 70%, 80%);
320
+ --error-text: hsl(0, 70%, 40%);
321
 
322
+ --button-secondary-bg: hsl(210, 10%, 92%); /* Light gray for secondary button */
323
+ --button-secondary-text: hsl(210, 20%, 30%); /* Dark text for secondary button */
 
 
324
  }
325
 
326
  /* Body and Gradio Container */
 
333
  padding: 1.5rem !important;
334
  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;
335
  background-color: var(--background-app) !important; /* Overall background */
336
+ box-shadow: none !important; /* Remove outer shadow */
 
337
  border-radius: 16px !important;
338
  }
339
 
340
+ /* Header Styling (title box) - distinct background */
341
  .app-header-wrapper {
342
+ background: var(--background-header) !important; /* Distinct light seafoam background */
343
+ border: 2px solid var(--border-card) !important; /* Consistent border with cards */
344
  border-radius: 16px !important;
345
  padding: 2.5rem 1.5rem !important;
346
  margin-bottom: 1.5rem !important;
 
348
  box-shadow: var(--shadow-md) !important;
349
  position: relative;
350
  overflow: hidden;
351
+ color: var(--text-dark) !important; /* Dark text on light header */
352
  }
353
  .app-header-wrapper::before { /* Subtle background pattern */
354
  content: '';
 
357
  left: 0;
358
  width: 100%;
359
  height: 100%;
360
+ background: radial-gradient(circle at top left, rgba(60,179,113,0.05) 0%, transparent 40%),
361
+ radial-gradient(circle at bottom right, rgba(60,179,113,0.05) 0%, transparent 40%);
362
  z-index: 0;
363
  opacity: 0.8;
364
  pointer-events: none;
 
367
  font-size: 4.5rem !important; /* Larger icon */
368
  margin-bottom: 0.75rem !important;
369
  display: block !important;
370
+ color: var(--primary-color) !important; /* Primary color for icon */
371
  position: relative;
372
  z-index: 1;
373
  animation: float-icon 3s ease-in-out infinite alternate;
 
381
  font-family: 'Poppins', sans-serif !important;
382
  font-size: 3rem !important;
383
  font-weight: 800 !important; /* Bold */
384
+ color: var(--primary-color) !important; /* Primary color for title */
385
  margin: 0 0 0.75rem 0 !important;
386
  line-height: 1.1 !important;
387
  letter-spacing: -0.03em !important;
 
390
  }
391
  .app-header-tagline {
392
  font-size: 1.25rem !important;
393
+ color: var(--text-light) !important; /* Muted text for tagline */
394
  font-weight: 400 !important;
395
  margin: 0 !important;
396
  max-width: 700px;
 
407
  gap: 1.25rem !important;
408
  }
409
  .dashboard-card-section {
410
+ background: var(--background-card) !important; /* Pure white for content cards */
411
+ border: 2px solid var(--border-card) !important; /* Clear light gray border */
412
  border-radius: 12px !important;
413
  padding: 1.75rem !important;
414
  box-shadow: var(--shadow-sm) !important;
415
  transition: all 0.3s ease-out !important;
416
  cursor: default;
417
+ color: var(--text-light) !important; /* Dark text on white cards */
418
  }
419
  .dashboard-card-section:hover {
420
  box-shadow: var(--shadow-md) !important;
421
  transform: translateY(-3px) !important;
422
  }
423
 
424
+ /* Section Titles (e.g., "Welcome & Disclaimer") - now centered and bold */
425
  .sub-section-title {
426
  font-family: 'Poppins', sans-serif !important;
427
  font-size: 1.7rem !important;
428
  font-weight: 700 !important; /* Bold */
429
+ color: var(--primary-color) !important; /* Primary color for titles */
430
+ text-align: center !important; /* CENTERED */
431
  margin: 0 0 1.25rem 0 !important;
432
  padding-bottom: 0.75rem !important;
433
+ border-bottom: 2px solid var(--primary-color) !important; /* Consistent "blue line" (now green) */
434
  display: block !important;
435
  letter-spacing: -0.01em !important;
436
  }
437
  .dashboard-card-section p {
438
  line-height: 1.7 !important;
439
+ color: var(--text-light) !important; /* General text on white cards */
440
  font-size: 1rem !important;
441
  }
442
  .dashboard-card-section strong {
443
  color: var(--accent-orange) !important; /* Orange for specific strong text (e.g., Disclaimer) */
444
  }
445
 
446
+ /* Input Styling (textboxes, dropdowns) - pure white backgrounds */
447
  .gradio-textbox textarea,
448
  .gradio-textbox input,
449
  .gradio-dropdown > div > input[type="text"],
450
  .gradio-dropdown .primary-wrap,
451
  .gradio-dropdown .scroll-hide {
452
+ background: var(--background-input-output) !important; /* Pure white background for inputs */
453
+ border: 2px solid var(--border-input) !important; /* Light gray border for inputs */
454
  border-radius: 8px !important;
455
  padding: 0.85rem 1rem !important;
456
  font-size: 0.98rem !important;
 
461
  }
462
  .gradio-textbox textarea::placeholder,
463
  .gradio-textbox input::placeholder {
464
+ color: var(--text-muted) !important; /* Muted gray placeholder text */
465
  opacity: 0.7;
466
  }
467
  .gradio-textbox textarea:focus,
 
469
  .gradio-dropdown > div > input[type="text"]:focus,
470
  .gradio-dropdown .primary-wrap.focused {
471
  outline: none !important;
472
+ border-color: var(--border-focus) !important; /* Primary color border on focus */
473
+ box-shadow: 0 0 0 4px rgba(60, 179, 113, 0.2) !important; /* Green glow on focus */
474
  }
475
  .gradio-textbox label,
476
  .gradio-dropdown label {
477
  font-weight: 600 !important;
478
+ color: var(--text-light) !important; /* Labels on white cards */
479
  font-size: 1rem !important;
480
  margin-bottom: 0.6rem !important;
481
  display: block !important;
 
483
  .gradio-textbox .gr-form,
484
  .gradio-dropdown .gr-form {
485
  font-size: 0.9rem !important;
486
+ color: var(--text-muted) !important; /* Info text on white cards */
487
  margin-top: 0.4rem !important;
488
  }
489
  .input-row {
 
529
  .gr-button-secondary {
530
  background: var(--button-secondary-bg) !important; /* Light gray button */
531
  color: var(--button-secondary-text) !important; /* Dark text */
532
+ border-color: var(--border-input) !important; /* Border matches input fields */
533
  }
534
  .gr-button-secondary:hover {
535
+ background: hsl(210, 10%, 85%) !important; /* Darker gray on hover */
536
  border-color: var(--primary-color) !important; /* Green border on hover */
537
  transform: translateY(-2px) !important;
538
  }
 
541
  box-shadow: none !important;
542
  }
543
 
544
+ /* Output Styling - pure white background */
545
  .output-content-wrapper {
546
+ background: var(--background-input-output) !important; /* Pure white background for output box */
547
+ border: 2px dashed var(--border-input) !important; /* Dashed gray border */
548
  border-radius: 8px !important;
549
  padding: 1.5rem !important;
550
  min-height: 150px !important;
 
583
  }
584
  .divider {
585
  border: none !important;
586
+ border-top: 1px dashed var(--border-input) !important; /* Dashed light gray divider */
587
  margin: 1rem 0 !important;
588
  }
589
  .error-message {
 
618
  opacity: 0.8;
619
  }
620
  .placeholder {
621
+ background: var(--background-input-output) !important; /* Pure white background for placeholder */
622
+ border: 2px dashed var(--border-input) !important; /* Dashed light gray border */
623
  border-radius: 8px !important;
624
  padding: 2.5rem 1.5rem !important;
625
  text-align: center !important;
626
+ color: var(--text-muted) !important; /* Muted gray text for placeholder */
627
  font-style: italic !important;
628
  font-size: 1.1rem !important;
629
  width: 100%;
630
  box-sizing: border-box;
631
  }
632
 
633
+ /* Examples Table Styling - pure white background rows */
634
  .examples-section .gr-samples-table {
635
  border: 2px solid var(--border-card) !important; /* Outer table border matches cards */
636
  border-radius: 8px !important;
 
645
  text-align: left !important;
646
  }
647
  .examples-section .gr-samples-table th {
648
+ background: var(--background-card) !important; /* White for example header */
649
  font-weight: 700 !important;
650
+ color: var(--primary-color) !important; /* Primary color for header text */
651
  }
652
  .examples-section .gr-samples-table td {
653
+ background: var(--background-input-output) !important; /* Pure white for example rows */
654
  color: var(--text-dark) !important; /* Dark text for example rows */
655
+ border-top: 1px solid var(--border-input) !important; /* Light gray border between rows */
656
  cursor: pointer !important;
657
  transition: background 0.2s ease, transform 0.1s ease !important;
658
  }
 
668
 
669
  /* Footer Styling */
670
  .app-footer-wrapper {
671
+ background: var(--background-card) !important; /* White for footer */
672
  border: 2px solid var(--border-card) !important;
673
  border-radius: 12px !important;
674
  padding: 1.75rem !important;
675
  margin-top: 1.5rem !important;
676
  text-align: center !important;
677
+ color: var(--text-muted) !important; /* Muted text for footer */
678
  }
679
  .app-footer p {
680
  margin: 0.6rem 0 !important;
681
  font-size: 0.95rem !important;
682
+ color: var(--text-muted) !important; /* Muted text */
683
  line-height: 1.6 !important;
684
  }
685
  .app-footer a {
686
+ color: var(--link-footer-color) !important; /* GREEN highlight for links (same as submit button) */
687
  text-decoration: none !important;
688
  font-weight: 600 !important;
689
  transition: text-decoration 0.2s ease, text-decoration-color 0.2s ease !important;