Dhruv Pawar commited on
Commit
a43361e
·
1 Parent(s): 5c8f91b

dark-theme

Browse files
Files changed (2) hide show
  1. src/ui/components.py +64 -15
  2. src/ui/styles.py +677 -36
src/ui/components.py CHANGED
@@ -16,19 +16,33 @@ class UIComponents:
16
  @staticmethod
17
  def get_header_html() -> str:
18
  """
19
- 📋 GENERATE HEADER HTML
20
  """
21
  return """
22
  <div class="research-header">
23
- <h1>🧠 Advanced AI Reasoning System Pro</h1>
24
- <p><strong>Research-Backed Implementation:</strong> Tree of Thoughts + Constitutional AI + Multi-Agent Validation + Performance Optimization</p>
25
- <div style="margin-top: 1rem;">
26
- <span class="badge">🌳 Yao et al. 2023 - Tree of Thoughts</span>
27
- <span class="badge">🛡️ Bai et al. 2022 - Constitutional AI</span>
28
- <span class="badge">🔬 6 Advanced Reasoning Modes</span>
29
- <span class="badge">⚡ Cache + Rate Limiting</span>
30
- <span class="badge">🎛️ Collapsible Sidebar</span>
31
- <span class="badge">📊 Real-Time Analytics</span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  </div>
33
  </div>
34
  """
@@ -64,12 +78,47 @@ class UIComponents:
64
  @staticmethod
65
  def get_empty_analytics_html() -> str:
66
  """
67
- 📊 GENERATE EMPTY ANALYTICS HTML
68
  """
69
- return """<div class="analytics-panel">
70
- <h3>📊 No Analytics Data Yet</h3>
71
- <p>Start a conversation to see detailed analytics and insights!</p>
72
- <p style="margin-top: 1rem; font-size: 0.9em;">Metrics tracked: tokens, speed, reasoning depth, confidence scores, and more.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
  </div>"""
74
 
75
  @staticmethod
 
16
  @staticmethod
17
  def get_header_html() -> str:
18
  """
19
+ 📋 GENERATE ENHANCED HEADER HTML
20
  """
21
  return """
22
  <div class="research-header">
23
+ <div class="header-branding">
24
+ <div class="logo-section">
25
+ <div class="logo-circle">🧠</div>
26
+ <div class="brand-text">
27
+ <h1>Advanced AI Reasoning System Pro</h1>
28
+ <span class="brand-tagline">Next-Generation AI Research Platform</span>
29
+ </div>
30
+ </div>
31
+ <div class="status-indicator">
32
+ <span class="status-dot"></span>
33
+ <span class="status-text">System Active</span>
34
+ </div>
35
+ </div>
36
+ <div class="header-subtitle">
37
+ <p><strong>🚀 Research-Backed Implementation:</strong> Tree of Thoughts + Constitutional AI + Multi-Agent Validation + Performance Optimization</p>
38
+ </div>
39
+ <div class="feature-badges">
40
+ <span class="badge feature-badge">🌳 Tree of Thoughts (Yao '23)</span>
41
+ <span class="badge feature-badge">🛡️ Constitutional AI (Bai '22)</span>
42
+ <span class="badge feature-badge">🔬 6 Reasoning Modes</span>
43
+ <span class="badge feature-badge">⚡ Smart Caching + Rate Limiting</span>
44
+ <span class="badge feature-badge">🎛️ Dynamic Configuration</span>
45
+ <span class="badge feature-badge">📊 Real-Time Analytics</span>
46
  </div>
47
  </div>
48
  """
 
78
  @staticmethod
79
  def get_empty_analytics_html() -> str:
80
  """
81
+ 📊 GENERATE ENHANCED EMPTY ANALYTICS HTML
82
  """
83
+ return """
84
+ <div class="analytics-panel-welcome">
85
+ <div class="analytics-header">
86
+ <div class="analytics-icon">📊</div>
87
+ <div class="analytics-text">
88
+ <h3>Analytics Dashboard</h3>
89
+ <p class="analytics-subtitle">Performance insights & conversation metrics</p>
90
+ </div>
91
+ </div>
92
+
93
+ <div class="analytics-placeholder">
94
+ <div class="placeholder-icon">🚀</div>
95
+ <h4>No Data Available Yet</h4>
96
+ <p>Start a conversation to begin collecting detailed performance analytics and usage insights.</p>
97
+
98
+ <div class="metrics-preview">
99
+ <div class="metric-item">
100
+ <span class="metric-emoji">⚡</span>
101
+ <span class="metric-label">Inference Speed</span>
102
+ </div>
103
+ <div class="metric-item">
104
+ <span class="metric-emoji">🧠</span>
105
+ <span class="metric-label">Reasoning Depth</span>
106
+ </div>
107
+ <div class="metric-item">
108
+ <span class="metric-emoji">✨</span>
109
+ <span class="metric-label">Confidence Score</span>
110
+ </div>
111
+ <div class="metric-item">
112
+ <span class="metric-emoji">💾</span>
113
+ <span class="metric-label">Cache Performance</span>
114
+ </div>
115
+ </div>
116
+
117
+ <div class="get-started">
118
+ <div class="arrow-icon">👆</div>
119
+ <span>Navigate to the "Reasoning Workspace" tab to get started!</span>
120
+ </div>
121
+ </div>
122
  </div>"""
123
 
124
  @staticmethod
src/ui/styles.py CHANGED
@@ -3,26 +3,29 @@ CSS styles for the Gradio interface
3
  """
4
 
5
  CUSTOM_CSS = """
6
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap');
7
  :root {
8
- --bg-primary: #0f0f0f;
9
- --bg-secondary: #1a1a1a;
10
- --bg-tertiary: #2d2d2d;
11
- --bg-card: #1e1e1e;
 
12
  --text-primary: #ffffff;
13
- --text-secondary: #b0b0b0;
14
- --text-tertiary: #888888;
15
- --accent-primary: #3b82f6;
16
- --accent-secondary: #60a5fa;
17
- --accent-gradient: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
 
 
18
  --success: #10b981;
19
  --warning: #f59e0b;
20
  --error: #ef4444;
21
- --border-color: #333333;
22
- --border-light: #404040;
23
- --shadow-dark: 0 4px 6px -1px rgba(0, 0, 0, 0.6);
24
- --shadow-medium: 0 2px 4px rgba(0, 0, 0, 0.4);
25
- --shadow-light: 0 1px 2px rgba(0, 0, 0, 0.3);
26
  --border-radius: 12px;
27
  --border-radius-lg: 16px;
28
  --transition: all 0.3s ease;
@@ -37,12 +40,171 @@ CUSTOM_CSS = """
37
  max-width: 1400px !important;
38
  margin: 0 auto !important;
39
  padding: 20px !important;
 
 
 
40
  }
41
 
42
  * {
43
  color: var(--text-primary) !important;
44
  }
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  /* ==================== ENHANCED HEADER ==================== */
47
 
48
  .research-header {
@@ -62,24 +224,174 @@ CUSTOM_CSS = """
62
  top: 0;
63
  left: 0;
64
  right: 0;
65
- height: 3px;
66
  background: var(--accent-gradient);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  }
68
 
69
- .research-header h1 {
 
70
  font-size: 2.5rem !important;
71
- font-weight: 700 !important;
72
- margin-bottom: 1rem !important;
73
  color: var(--text-primary) !important;
74
- background: none !important;
75
- -webkit-text-fill-color: var(--text-primary) !important;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  }
77
 
78
- .research-header .subtitle {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  font-size: 1.1rem !important;
80
  color: var(--text-secondary) !important;
81
- margin-bottom: 1.5rem !important;
82
  line-height: 1.6 !important;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  }
84
 
85
  /* ==================== CLEAN BADGES ==================== */
@@ -174,6 +486,158 @@ CUSTOM_CSS = """
174
  font-weight: 600 !important;
175
  }
176
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
  /* ==================== STATUS INDICATORS ==================== */
178
 
179
  .status-active {
@@ -229,6 +693,87 @@ CUSTOM_CSS = """
229
  color: var(--text-tertiary) !important;
230
  }
231
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
232
  /* ==================== MARKDOWN TEXT FIXES ==================== */
233
 
234
  .gr-markdown {
@@ -391,38 +936,79 @@ CUSTOM_CSS = """
391
  .gradio-container {
392
  padding: 1rem !important;
393
  }
394
-
395
  .research-header {
396
  padding: 2rem 1.5rem !important;
397
  }
398
-
399
- .research-header h1 {
400
- font-size: 2rem !important;
401
  }
402
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
403
  .badge {
404
  font-size: 0.8rem !important;
405
  padding: 0.4rem 0.8rem !important;
406
  }
407
-
408
  .metrics-card {
409
  padding: 1.25rem !important;
410
  }
411
-
412
  .analytics-panel {
413
  padding: 1.5rem !important;
414
  }
415
  }
416
 
417
  @media (max-width: 480px) {
418
- .research-header h1 {
419
- font-size: 1.75rem !important;
420
  }
421
-
422
- .research-header .subtitle {
 
 
 
 
 
 
 
 
 
423
  font-size: 1rem !important;
424
  }
425
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
426
  .metrics-card {
427
  padding: 1rem !important;
428
  font-size: 0.9rem !important;
@@ -493,6 +1079,61 @@ textarea:focus-visible {
493
  .gr-code .token.string { color: var(--success) !important; }
494
  .gr-code .token.comment { color: var(--text-tertiary) !important; }
495
  .gr-code .token.function { color: var(--accent-primary) !important; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
496
  """
497
 
498
- SIDEBAR_CSS = CUSTOM_CSS
 
3
  """
4
 
5
  CUSTOM_CSS = """
6
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500;600;700&family=Space+Grotesk:wght@300;400;500;600;700&display=swap');
7
  :root {
8
+ --bg-primary: #0a0c0f;
9
+ --bg-secondary: #161b22;
10
+ --bg-tertiary: #21262d;
11
+ --bg-card: #161b22;
12
+ --bg-accent: #1f2426;
13
  --text-primary: #ffffff;
14
+ --text-secondary: #f0f6fc;
15
+ --text-tertiary: #c9d1d9;
16
+ --text-muted: #8b949e;
17
+ --text-accent: #58a6ff;
18
+ --accent-primary: #8b5cf6;
19
+ --accent-secondary: #6366f1;
20
+ --accent-gradient: linear-gradient(135deg, #8b5cf6 0%, #6366f1 100%);
21
  --success: #10b981;
22
  --warning: #f59e0b;
23
  --error: #ef4444;
24
+ --border-color: #cbd5e1;
25
+ --border-light: #e2e8f0;
26
+ --shadow-dark: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
27
+ --shadow-medium: 0 2px 4px rgba(0, 0, 0, 0.08);
28
+ --shadow-light: 0 1px 2px rgba(0, 0, 0, 0.05);
29
  --border-radius: 12px;
30
  --border-radius-lg: 16px;
31
  --transition: all 0.3s ease;
 
40
  max-width: 1400px !important;
41
  margin: 0 auto !important;
42
  padding: 20px !important;
43
+ line-height: 1.5 !important;
44
+ font-size: 14px !important;
45
+ font-weight: 400 !important;
46
  }
47
 
48
  * {
49
  color: var(--text-primary) !important;
50
  }
51
 
52
+ /* ==================== BEAUTIFUL TYPOGRAPHY ==================== */
53
+
54
+ /* Headlines */
55
+ .gr-markdown h1,
56
+ h1 {
57
+ font-family: 'Space Grotesk', 'Inter', sans-serif !important;
58
+ font-size: 2.25rem !important;
59
+ font-weight: 700 !important;
60
+ line-height: 1.2 !important;
61
+ letter-spacing: -0.025em !important;
62
+ color: var(--text-primary) !important;
63
+ margin-bottom: 1rem !important;
64
+ }
65
+
66
+ .gr-markdown h2,
67
+ h2 {
68
+ font-family: 'Space Grotesk', 'Inter', sans-serif !important;
69
+ font-size: 1.875rem !important;
70
+ font-weight: 600 !important;
71
+ line-height: 1.3 !important;
72
+ letter-spacing: -0.02em !important;
73
+ color: var(--text-primary) !important;
74
+ margin-top: 1.5rem !important;
75
+ margin-bottom: 0.75rem !important;
76
+ }
77
+
78
+ .gr-markdown h3,
79
+ h3 {
80
+ font-family: 'Space Grotesk', 'Inter', sans-serif !important;
81
+ font-size: 1.5rem !important;
82
+ font-weight: 600 !important;
83
+ line-height: 1.4 !important;
84
+ letter-spacing: -0.015em !important;
85
+ color: var(--text-primary) !important;
86
+ margin-top: 1.25rem !important;
87
+ margin-bottom: 0.75rem !important;
88
+ }
89
+
90
+ .gr-markdown h4,
91
+ h4 {
92
+ font-family: 'Inter', sans-serif !important;
93
+ font-size: 1.25rem !important;
94
+ font-weight: 600 !important;
95
+ line-height: 1.4 !important;
96
+ letter-spacing: -0.01em !important;
97
+ color: var(--text-primary) !important;
98
+ margin-bottom: 0.5rem !important;
99
+ }
100
+
101
+ /* Body text */
102
+ .gr-markdown p,
103
+ p {
104
+ font-family: 'Inter', sans-serif !important;
105
+ font-size: 15px !important;
106
+ font-weight: 400 !important;
107
+ line-height: 1.6 !important;
108
+ color: var(--text-secondary) !important;
109
+ margin-bottom: 1rem !important;
110
+ }
111
+
112
+ /* Small text */
113
+ .gr-markdown small,
114
+ small {
115
+ font-family: 'Inter', sans-serif !important;
116
+ font-size: 13px !important;
117
+ font-weight: 400 !important;
118
+ line-height: 1.5 !important;
119
+ color: var(--text-tertiary) !important;
120
+ }
121
+
122
+ /* Code and monospace */
123
+ .gr-markdown code,
124
+ code {
125
+ font-family: 'JetBrains Mono', monospace !important;
126
+ font-size: 14px !important;
127
+ font-weight: 500 !important;
128
+ background: var(--bg-secondary) !important;
129
+ color: var(--text-accent) !important;
130
+ padding: 0.125rem 0.375rem !important;
131
+ border-radius: 4px !important;
132
+ border: 1px solid var(--border-color) !important;
133
+ }
134
+
135
+ .gr-markdown pre code,
136
+ pre code {
137
+ background: var(--bg-secondary) !important;
138
+ border: 1px solid var(--border-color) !important;
139
+ color: var(--text-primary) !important;
140
+ }
141
+
142
+ /* Blockquotes */
143
+ .gr-markdown blockquote,
144
+ blockquote {
145
+ font-family: 'Inter', sans-serif !important;
146
+ font-size: 16px !important;
147
+ font-weight: 500 !important;
148
+ font-style: italic !important;
149
+ line-height: 1.5 !important;
150
+ color: var(--text-tertiary) !important;
151
+ border-left: 4px solid var(--accent-primary) !important;
152
+ padding-left: 1rem !important;
153
+ margin: 1.5rem 0 !important;
154
+ background: rgba(139, 92, 246, 0.05) !important;
155
+ padding: 1rem 1.5rem !important;
156
+ border-radius: 0 8px 8px 0 !important;
157
+ }
158
+
159
+ /* Lists */
160
+ .gr-markdown ul,
161
+ .gr-markdown ol,
162
+ ul, ol {
163
+ font-family: 'Inter', sans-serif !important;
164
+ font-size: 15px !important;
165
+ line-height: 1.6 !important;
166
+ color: var(--text-secondary) !important;
167
+ }
168
+
169
+ .gr-markdown li,
170
+ li {
171
+ margin-bottom: 0.5rem !important;
172
+ }
173
+
174
+ /* Links */
175
+ .gr-markdown a,
176
+ a {
177
+ font-family: 'Inter', sans-serif !important;
178
+ color: var(--text-accent) !important;
179
+ font-weight: 500 !important;
180
+ text-decoration: none !important;
181
+ transition: all 0.2s ease !important;
182
+ border-bottom: 1px solid transparent !important;
183
+ }
184
+
185
+ .gr-markdown a:hover,
186
+ a:hover {
187
+ color: var(--accent-primary) !important;
188
+ border-bottom-color: var(--accent-primary) !important;
189
+ }
190
+
191
+ /* Emphasized text */
192
+ .gr-markdown strong,
193
+ .gr-markdown b,
194
+ strong, b {
195
+ font-family: 'Inter', sans-serif !important;
196
+ font-weight: 700 !important;
197
+ color: var(--text-primary) !important;
198
+ }
199
+
200
+ .gr-markdown em,
201
+ .gr-markdown i,
202
+ em, i {
203
+ font-family: 'Inter', sans-serif !important;
204
+ font-style: italic !important;
205
+ color: var(--text-secondary) !important;
206
+ }
207
+
208
  /* ==================== ENHANCED HEADER ==================== */
209
 
210
  .research-header {
 
224
  top: 0;
225
  left: 0;
226
  right: 0;
227
+ height: 4px;
228
  background: var(--accent-gradient);
229
+ animation: shimmer 3s infinite;
230
+ }
231
+
232
+ @keyframes shimmer {
233
+ 0% { background-position: -200% center; }
234
+ 100% { background-position: 200% center; }
235
+ }
236
+
237
+ .header-branding {
238
+ display: flex !important;
239
+ align-items: center !important;
240
+ justify-content: space-between !important;
241
+ margin-bottom: 2rem !important;
242
+ flex-wrap: wrap !important;
243
+ gap: 1rem !important;
244
+ }
245
+
246
+ .logo-section {
247
+ display: flex !important;
248
+ align-items: center !important;
249
+ gap: 1.5rem !important;
250
+ }
251
+
252
+ .logo-circle {
253
+ width: 3.5rem !important;
254
+ height: 3.5rem !important;
255
+ border-radius: 50% !important;
256
+ background: var(--accent-gradient) !important;
257
+ display: flex !important;
258
+ align-items: center !important;
259
+ justify-content: center !important;
260
+ font-size: 1.5rem !important;
261
+ box-shadow: var(--shadow-dark) !important;
262
+ animation: pulse 2s infinite;
263
+ }
264
+
265
+ @keyframes pulse {
266
+ 0% { transform: scale(1); }
267
+ 50% { transform: scale(1.05); }
268
+ 100% { transform: scale(1); }
269
  }
270
 
271
+ .brand-text h1 {
272
+ font-family: 'Space Grotesk', 'Inter', sans-serif !important;
273
  font-size: 2.5rem !important;
274
+ font-weight: 800 !important;
275
+ margin: 0 !important;
276
  color: var(--text-primary) !important;
277
+ -webkit-font-smoothing: antialiased !important;
278
+ -moz-osx-font-smoothing: grayscale !important;
279
+ text-rendering: optimizeLegibility !important;
280
+ letter-spacing: -0.01em !important;
281
+ line-height: 1.1 !important;
282
+ border: 2px solid transparent !important;
283
+ border-image: linear-gradient(135deg, rgba(139, 92, 246, 0.6), rgba(99, 102, 241, 0.6)) 1 !important;
284
+ padding: 0.2rem 0.5rem !important;
285
+ background: rgba(139, 92, 246, 0.08) !important;
286
+ border-radius: 12px !important;
287
+ }
288
+
289
+ .brand-tagline {
290
+ font-size: 0.95rem !important;
291
+ color: var(--text-secondary) !important;
292
+ font-weight: 500 !important;
293
+ letter-spacing: 0.5px !important;
294
  }
295
 
296
+ .status-indicator {
297
+ display: flex !important;
298
+ align-items: center !important;
299
+ gap: 0.5rem !important;
300
+ padding: 0.5rem 1rem !important;
301
+ background: rgba(16, 185, 129, 0.1) !important;
302
+ border: 1px solid rgba(16, 185, 129, 0.2) !important;
303
+ border-radius: 20px !important;
304
+ }
305
+
306
+ .status-dot {
307
+ width: 8px !important;
308
+ height: 8px !important;
309
+ background: var(--success) !important;
310
+ border-radius: 50% !important;
311
+ animation: pulse-green 2s infinite;
312
+ }
313
+
314
+ @keyframes pulse-green {
315
+ 0%, 100% { opacity: 1; }
316
+ 50% { opacity: 0.5; }
317
+ }
318
+
319
+ .status-text {
320
+ font-size: 0.85rem !important;
321
+ font-weight: 600 !important;
322
+ color: var(--success) !important;
323
+ letter-spacing: 0.5px !important;
324
+ }
325
+
326
+ .header-subtitle {
327
+ margin-bottom: 2rem !important;
328
+ }
329
+
330
+ .header-subtitle p {
331
  font-size: 1.1rem !important;
332
  color: var(--text-secondary) !important;
 
333
  line-height: 1.6 !important;
334
+ margin: 0 !important;
335
+ }
336
+
337
+ .header-subtitle strong {
338
+ color: var(--accent-primary) !important;
339
+ }
340
+
341
+ .feature-badges {
342
+ display: flex !important;
343
+ flex-wrap: wrap !important;
344
+ gap: 0.75rem !important;
345
+ }
346
+
347
+ .feature-badge {
348
+ background: linear-gradient(135deg, rgba(139, 92, 246, 0.08) 0%, rgba(99, 102, 241, 0.08) 100%) !important;
349
+ border: 1px solid rgba(139, 92, 246, 0.25) !important;
350
+ color: var(--accent-primary) !important;
351
+ font-weight: 600 !important;
352
+ font-size: 0.85rem !important;
353
+ padding: 0.6rem 1.2rem !important;
354
+ border-radius: 25px !important;
355
+ transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1) !important;
356
+ position: relative !important;
357
+ overflow: hidden !important;
358
+ cursor: pointer !important;
359
+ font-family: 'Inter', sans-serif !important;
360
+ letter-spacing: 0.3px !important;
361
+ backdrop-filter: blur(10px) !important;
362
+ }
363
+
364
+ .feature-badge::before {
365
+ content: '';
366
+ position: absolute;
367
+ top: 0;
368
+ left: -100%;
369
+ width: 100%;
370
+ height: 100%;
371
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent) !important;
372
+ transition: left 0.6s !important;
373
+ }
374
+
375
+ .feature-badge:hover::before {
376
+ left: 100% !important;
377
+ }
378
+
379
+ .feature-badge:hover {
380
+ background: linear-gradient(135deg, rgba(139, 92, 246, 0.15) 0%, rgba(99, 102, 241, 0.15) 100%) !important;
381
+ border-color: rgba(139, 92, 246, 0.4) !important;
382
+ color: var(--accent-secondary) !important;
383
+ transform: translateY(-3px) !important;
384
+ box-shadow:
385
+ 0 10px 25px rgba(139, 92, 246, 0.2),
386
+ 0 0 20px rgba(139, 92, 246, 0.1) !important;
387
+ text-shadow: 0 0 8px rgba(139, 92, 246, 0.3) !important;
388
+ }
389
+
390
+ .feature-badge:active {
391
+ transform: translateY(-1px) scale(0.98) !important;
392
+ box-shadow:
393
+ 0 5px 15px rgba(139, 92, 246, 0.15),
394
+ 0 0 10px rgba(139, 92, 246, 0.1) !important;
395
  }
396
 
397
  /* ==================== CLEAN BADGES ==================== */
 
486
  font-weight: 600 !important;
487
  }
488
 
489
+ /* ==================== ENHANCED ANALYTICS WELCOME ==================== */
490
+
491
+ .analytics-panel-welcome {
492
+ background: var(--bg-card) !important;
493
+ border: 1px solid var(--border-color) !important;
494
+ border-radius: var(--border-radius-lg) !important;
495
+ padding: 3rem !important;
496
+ box-shadow: var(--shadow-dark) !important;
497
+ text-align: center !important;
498
+ position: relative !important;
499
+ overflow: hidden !important;
500
+ }
501
+
502
+ .analytics-panel-welcome::before {
503
+ content: '';
504
+ position: absolute;
505
+ top: 0;
506
+ left: 0;
507
+ right: 0;
508
+ height: 4px;
509
+ background: var(--accent-gradient);
510
+ animation: shimmer 4s infinite;
511
+ }
512
+
513
+ .analytics-header {
514
+ display: flex !important;
515
+ align-items: center !important;
516
+ justify-content: center !important;
517
+ gap: 1rem !important;
518
+ margin-bottom: 2rem !important;
519
+ }
520
+
521
+ .analytics-icon {
522
+ font-size: 3rem !important;
523
+ animation: bounce-in 1s ease-out;
524
+ }
525
+
526
+ @keyframes bounce-in {
527
+ 0% { transform: scale(0) rotate(-45deg); opacity: 0; }
528
+ 50% { transform: scale(1.1) rotate(-5deg); opacity: 0.7; }
529
+ 100% { transform: scale(1) rotate(0deg); opacity: 1; }
530
+ }
531
+
532
+ .analytics-text h3 {
533
+ font-size: 2rem !important;
534
+ font-weight: 700 !important;
535
+ margin: 0 !important;
536
+ background: var(--accent-gradient);
537
+ -webkit-background-clip: text !important;
538
+ -webkit-text-fill-color: transparent !important;
539
+ background-clip: text !important;
540
+ }
541
+
542
+ .analytics-subtitle {
543
+ font-size: 1.1rem !important;
544
+ color: var(--text-secondary) !important;
545
+ margin: 0.5rem 0 0 0 !important;
546
+ font-weight: 500 !important;
547
+ }
548
+
549
+ .analytics-placeholder {
550
+ max-width: 600px !important;
551
+ margin: 0 auto !important;
552
+ }
553
+
554
+ .placeholder-icon {
555
+ font-size: 4rem !important;
556
+ margin-bottom: 1.5rem !important;
557
+ animation: float 3s ease-in-out infinite;
558
+ }
559
+
560
+ @keyframes float {
561
+ 0%, 100% { transform: translateY(0px); }
562
+ 50% { transform: translateY(-10px); }
563
+ }
564
+
565
+ .analytics-placeholder h4 {
566
+ font-size: 1.5rem !important;
567
+ font-weight: 600 !important;
568
+ color: var(--text-primary) !important;
569
+ margin-bottom: 1rem !important;
570
+ }
571
+
572
+ .analytics-placeholder p {
573
+ font-size: 1.1rem !important;
574
+ line-height: 1.6 !important;
575
+ color: var(--text-secondary) !important;
576
+ margin-bottom: 2rem !important;
577
+ }
578
+
579
+ .metrics-preview {
580
+ display: grid !important;
581
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)) !important;
582
+ gap: 1rem !important;
583
+ margin: 2.5rem 0 !important;
584
+ }
585
+
586
+ .metric-item {
587
+ display: flex !important;
588
+ align-items: center !important;
589
+ gap: 0.75rem !important;
590
+ padding: 1rem !important;
591
+ background: linear-gradient(135deg, rgba(139, 92, 246, 0.05) 0%, rgba(99, 102, 241, 0.05) 100%) !important;
592
+ border: 1px solid rgba(139, 92, 246, 0.1) !important;
593
+ border-radius: var(--border-radius) !important;
594
+ transition: all 0.3s ease !important;
595
+ }
596
+
597
+ .metric-item:hover {
598
+ transform: translateY(-2px) !important;
599
+ box-shadow: var(--shadow-medium) !important;
600
+ border-color: rgba(139, 92, 246, 0.3) !important;
601
+ }
602
+
603
+ .metric-emoji {
604
+ font-size: 1.5rem !important;
605
+ }
606
+
607
+ .metric-label {
608
+ font-weight: 500 !important;
609
+ color: var(--text-primary) !important;
610
+ }
611
+
612
+ .get-started {
613
+ display: flex !important;
614
+ align-items: center !important;
615
+ justify-content: center !important;
616
+ gap: 0.75rem !important;
617
+ margin-top: 2rem !important;
618
+ padding: 1rem !important;
619
+ background: rgba(16, 185, 129, 0.1) !important;
620
+ border: 1px solid rgba(16, 185, 129, 0.2) !important;
621
+ border-radius: var(--border-radius) !important;
622
+ }
623
+
624
+ .arrow-icon {
625
+ font-size: 1.5rem !important;
626
+ animation: bounce 2s infinite;
627
+ }
628
+
629
+ @keyframes bounce {
630
+ 0%, 20%, 53%, 80%, 100% { transform: translate3d(0,0,0); }
631
+ 40%, 43% { transform: translate3d(0,-8px,0); }
632
+ 70% { transform: translate3d(0,-4px,0); }
633
+ 90% { transform: translate3d(0,-2px,0); }
634
+ }
635
+
636
+ .get-started span {
637
+ font-weight: 600 !important;
638
+ color: var(--success) !important;
639
+ }
640
+
641
  /* ==================== STATUS INDICATORS ==================== */
642
 
643
  .status-active {
 
693
  color: var(--text-tertiary) !important;
694
  }
695
 
696
+ /* ==================== ENHANCED TABS ==================== */
697
+
698
+ .gr-tabs {
699
+ background: var(--bg-card) !important;
700
+ border: 1px solid var(--border-color) !important;
701
+ border-radius: var(--border-radius-lg) !important;
702
+ box-shadow: var(--shadow-medium) !important;
703
+ margin-bottom: 2rem !important;
704
+ overflow: hidden !important;
705
+ }
706
+
707
+ .gr-tabs .tab-nav {
708
+ background: linear-gradient(135deg, rgba(139, 92, 246, 0.05) 0%, rgba(99, 102, 241, 0.05) 100%) !important;
709
+ border-bottom: 1px solid var(--border-color) !important;
710
+ padding: 0 !important;
711
+ }
712
+
713
+ .gr-tabs .tab-nav button {
714
+ background: transparent !important;
715
+ border: none !important;
716
+ padding: 1.25rem 1.5rem !important;
717
+ margin: 0 !important;
718
+ font-size: 1rem !important;
719
+ font-weight: 500 !important;
720
+ color: var(--text-secondary) !important;
721
+ position: relative !important;
722
+ transition: all 0.3s ease !important;
723
+ border-radius: 0 !important;
724
+ font-family: 'Inter', sans-serif !important;
725
+ min-width: 180px !important;
726
+ display: flex !important;
727
+ align-items: center !important;
728
+ justify-content: center !important;
729
+ gap: 0.5rem !important;
730
+ }
731
+
732
+ .gr-tabs .tab-nav button:hover {
733
+ background: rgba(139, 92, 246, 0.1) !important;
734
+ color: var(--accent-primary) !important;
735
+ }
736
+
737
+ .gr-tabs .tab-nav button.selected {
738
+ background: var(--accent-gradient) !important;
739
+ color: white !important;
740
+ font-weight: 600 !important;
741
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important;
742
+ }
743
+
744
+ .gr-tabs .tab-nav button.selected::after {
745
+ content: '';
746
+ position: absolute;
747
+ bottom: 0;
748
+ left: 20%;
749
+ right: 20%;
750
+ height: 3px;
751
+ background: currentColor;
752
+ border-radius: 2px;
753
+ }
754
+
755
+ .gr-tabs .tab-content {
756
+ padding: 2rem !important;
757
+ background: var(--bg-card) !important;
758
+ }
759
+
760
+ /* Tab-specific styling for better visual hierarchy */
761
+ .tab-content .gr-markdown h2,
762
+ .tab-content .gr-markdown h3 {
763
+ color: var(--text-primary) !important;
764
+ font-weight: 600 !important;
765
+ margin-top: 2rem !important;
766
+ margin-bottom: 1rem !important;
767
+ }
768
+
769
+ .tab-content .gr-markdown h2 {
770
+ font-size: 1.4rem !important;
771
+ }
772
+
773
+ .tab-content .gr-markdown h3 {
774
+ font-size: 1.2rem !important;
775
+ }
776
+
777
  /* ==================== MARKDOWN TEXT FIXES ==================== */
778
 
779
  .gr-markdown {
 
936
  .gradio-container {
937
  padding: 1rem !important;
938
  }
939
+
940
  .research-header {
941
  padding: 2rem 1.5rem !important;
942
  }
943
+
944
+ .brand-text h1 {
945
+ font-size: 2.2rem !important;
946
  }
947
+
948
+ .header-branding {
949
+ flex-direction: column !important;
950
+ text-align: center !important;
951
+ gap: 1.5rem !important;
952
+ }
953
+
954
+ .logo-section {
955
+ justify-content: center !important;
956
+ }
957
+
958
+ .status-indicator {
959
+ margin: 0 auto !important;
960
+ }
961
+
962
+ .feature-badges {
963
+ justify-content: center !important;
964
+ }
965
+
966
  .badge {
967
  font-size: 0.8rem !important;
968
  padding: 0.4rem 0.8rem !important;
969
  }
970
+
971
  .metrics-card {
972
  padding: 1.25rem !important;
973
  }
974
+
975
  .analytics-panel {
976
  padding: 1.5rem !important;
977
  }
978
  }
979
 
980
  @media (max-width: 480px) {
981
+ .research-header {
982
+ padding: 1.5rem 1rem !important;
983
  }
984
+
985
+ .brand-text h1 {
986
+ font-size: 1.8rem !important;
987
+ line-height: 1.2 !important;
988
+ }
989
+
990
+ .brand-tagline {
991
+ font-size: 0.9rem !important;
992
+ }
993
+
994
+ .header-subtitle p {
995
  font-size: 1rem !important;
996
  }
997
+
998
+ .logo-circle {
999
+ width: 3rem !important;
1000
+ height: 3rem !important;
1001
+ }
1002
+
1003
+ .feature-badges {
1004
+ gap: 0.5rem !important;
1005
+ }
1006
+
1007
+ .feature-badge {
1008
+ font-size: 0.8rem !important;
1009
+ padding: 0.5rem 1rem !important;
1010
+ }
1011
+
1012
  .metrics-card {
1013
  padding: 1rem !important;
1014
  font-size: 0.9rem !important;
 
1079
  .gr-code .token.string { color: var(--success) !important; }
1080
  .gr-code .token.comment { color: var(--text-tertiary) !important; }
1081
  .gr-code .token.function { color: var(--accent-primary) !important; }
1082
+
1083
+ /* ==================== FINAL POLISH ==================== */
1084
+
1085
+ .gr-chatbot .message {
1086
+ border-radius: var(--border-radius) !important;
1087
+ box-shadow: var(--shadow-light) !important;
1088
+ border: 1px solid var(--border-light) !important;
1089
+ margin: 0.75rem 0 !important;
1090
+ }
1091
+
1092
+ .gr-chatbot .message.user {
1093
+ background: linear-gradient(135deg, rgba(139, 92, 246, 0.03) 0%, rgba(99, 102, 241, 0.03) 100%) !important;
1094
+ border-color: rgba(139, 92, 246, 0.15) !important;
1095
+ }
1096
+
1097
+ .gr-chatbot .message.bot {
1098
+ background: var(--bg-card) !important;
1099
+ border-color: var(--border-color) !important;
1100
+ }
1101
+
1102
+ /* Enhanced spacing and typography */
1103
+ .gr-column {
1104
+ margin-bottom: 1rem !important;
1105
+ }
1106
+
1107
+ /* Subtle background pattern for empty states */
1108
+ .analytics-panel-welcome::after {
1109
+ content: '';
1110
+ position: absolute;
1111
+ top: 20%;
1112
+ right: 10%;
1113
+ width: 60px;
1114
+ height: 60px;
1115
+ background: radial-gradient(circle, rgba(139, 92, 246, 0.1) 0%, transparent 70%);
1116
+ border-radius: 50%;
1117
+ z-index: -1;
1118
+ }
1119
+
1120
+ .analytics-panel-welcome::before {
1121
+ background: var(--accent-gradient) !important;
1122
+ }
1123
+
1124
+ /* Professional logo background pattern */
1125
+ .research-header::after {
1126
+ content: '';
1127
+ position: absolute;
1128
+ top: 50%;
1129
+ right: 5%;
1130
+ width: 150px;
1131
+ height: 150px;
1132
+ background: radial-gradient(ellipse, rgba(139, 92, 246, 0.05) 0%, transparent 70%);
1133
+ transform: translateY(-50%);
1134
+ border-radius: 50%;
1135
+ z-index: -1;
1136
+ }
1137
  """
1138
 
1139
+ SIDEBAR_CSS = CUSTOM_CSS