jomasego commited on
Commit
0c6a182
·
verified ·
1 Parent(s): ba5fa26

Upload static/css/style.css with huggingface_hub

Browse files
Files changed (1) hide show
  1. static/css/style.css +1091 -73
static/css/style.css CHANGED
@@ -1,104 +1,1097 @@
1
- body { font-family: 'Segoe UI', Arial, sans-serif; background: linear-gradient(135deg, #e3e9f6 0%, #f6f8fa 100%); margin: 0; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  .card, .container {
4
- background: #fff;
5
- border-radius: 16px;
6
- box-shadow: 0 4px 24px rgba(25,118,210,0.09), 0 1.5px 7px rgba(44,62,80,0.05);
7
- padding: 2.2em 2em;
8
- margin: 40px auto;
9
- max-width: 820px;
10
- transition: box-shadow 0.2s;
 
11
  }
 
12
  .card:hover, .container:hover {
13
- box-shadow: 0 8px 32px rgba(25,118,210,0.13), 0 2px 10px rgba(44,62,80,0.08);
14
  }
15
 
16
- h1, h3 { text-align: center; color: #1976d2; letter-spacing: 0.01em; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
- form label { display: block; margin-top: 1.2em; color: #34495e; font-weight: 500; }
19
- form input, form button, form select {
20
- width: 100%; padding: 0.55em; margin-top: 0.2em;
21
- border: 1px solid #bfc9db; border-radius: 6px;
22
- font-size: 1em; background: #f9fbff;
23
- transition: border 0.18s, box-shadow 0.18s;
24
  }
25
- form input:focus, form select:focus {
26
- border: 1.5px solid #1976d2;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  outline: none;
28
- box-shadow: 0 0 0 2px #e3e9f6;
29
  }
30
- form button {
31
- background: linear-gradient(90deg, #1976d2 70%, #42a5f5 100%);
32
- color: #fff;
33
- font-weight: bold;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  border: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  cursor: pointer;
36
- margin-top: 1.5em;
37
- box-shadow: 0 2px 8px rgba(25,118,210,0.09);
38
- transition: background 0.18s, box-shadow 0.18s, transform 0.12s;
39
- letter-spacing: 0.03em;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  form button:hover {
42
- background: linear-gradient(90deg, #1565c0 70%, #64b5f6 100%);
43
- transform: translateY(-2px) scale(1.03);
44
- box-shadow: 0 4px 16px rgba(25,118,210,0.13);
45
  }
46
- #results, #predictionResults, #exportsCountryResults, #importsCountryResults, #exportsProductResults, #importsProductResults, #rankingsResults, #bilateralResults, #dataDownloadStatus {
47
- margin-top: 2em;
48
- font-size: 1.08em;
49
  }
50
- .alert { padding: 1em; border-radius: 8px; margin-bottom: 1em; font-weight: bold; }
51
- .alert-danger { background: #ffe5e5; color: #c0392b; border: 1px solid #e74c3c; }
52
- .alert-success { background: #e5ffe5; color: #27ae60; border: 1px solid #2ecc71; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  .spinner {
54
- border: 6px solid #f3f3f3;
55
- border-top: 6px solid #1976d2;
56
  border-radius: 50%;
57
- width: 44px;
58
- height: 44px;
59
  animation: spin 1s linear infinite;
60
- margin: 2em auto;
61
  display: block;
62
  }
 
63
  @keyframes spin {
64
  0% { transform: rotate(0deg); }
65
  100% { transform: rotate(360deg); }
66
  }
 
 
67
  table {
68
- width: 100%; border-collapse: separate; border-spacing: 0;
69
- margin-top: 2em; min-width: 600px;
70
- background: #fff; border-radius: 10px;
 
 
 
71
  overflow: hidden;
72
- box-shadow: 0 2px 10px rgba(25,118,210,0.07);
73
- font-size: 1.07em;
74
  }
 
75
  thead {
76
- background: linear-gradient(90deg, #1976d2 70%, #42a5f5 100%);
77
- color: #fff;
 
78
  }
79
- th, td {
80
- padding: 0.65em 0.6em;
81
- border: 1px solid #e3e9f6;
82
  text-align: left;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  }
84
- tr:nth-child(even) { background: #f6f8fa; }
85
- tr:hover { background: #e3e9f6; transition: background 0.18s; }
86
- #tradeChart, #predictionChart, #exportsCountryChart, #importsCountryChart, #exportsProductChart, #importsProductChart, #rankingsChart, #bilateralChart {
87
- max-width: 100%; margin-top: 2em; background: #fff; border-radius: 10px; box-shadow: 0 2px 10px rgba(25,118,210,0.07);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  @media (max-width: 900px) {
90
- .container, .card { max-width: 98vw; padding: 1.2em 0.5em; }
91
- table { min-width: 350px; font-size: 0.97em; }
92
- }
93
- .container { max-width: 700px; margin: 40px auto; background: #fff; padding: 2em; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.08); }
94
- h1 { text-align: center; color: #2c3e50; }
95
- form label { display: block; margin-top: 1em; color: #34495e; }
96
- form input, form button, form select { width: 100%; padding: 0.5em; margin-top: 0.2em; border: 1px solid #ccc; border-radius: 4px; }
97
- form button { background: #3498db; color: #fff; font-weight: bold; border: none; cursor: pointer; margin-top: 1em; }
98
- form button:hover { background: #217dbb; }
99
- #results { margin-top: 2em; }
100
- .alert { padding: 1em; border-radius: 5px; margin-bottom: 1em; font-weight: bold; }
101
- .alert-danger { background: #ffe5e5; color: #c0392b; border: 1px solid #e74c3c; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  .alert-success { background: #e5ffe5; color: #27ae60; border: 1px solid #2ecc71; }
103
  .spinner {
104
  border: 6px solid #f3f3f3;
@@ -114,9 +1107,34 @@ form button:hover { background: #217dbb; }
114
  0% { transform: rotate(0deg); }
115
  100% { transform: rotate(360deg); }
116
  }
117
- table { width: 100%; border-collapse: collapse; margin-top: 2em; min-width: 600px; }
118
- thead { background: #3498db; color: #fff; }
119
- th, td { padding: 0.5em; border: 1px solid #ddd; text-align: left; }
120
- tr:nth-child(even) { background: #f2f2f2; }
121
- #results { margin-top: 2em; }
122
- #tradeChart { max-width: 100%; margin-top: 2em; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Base styles for modern clean UI design - Anyformat inspired */
2
+ :root {
3
+ --primary-color: #0067df;
4
+ --primary-light: #e6f0ff;
5
+ --primary-dark: #004db3;
6
+ --success-color: #10b981;
7
+ --warning-color: #f59e0b;
8
+ --danger-color: #ef4444;
9
+ --info-color: #3b82f6;
10
+ --text-color: #333333;
11
+ --text-secondary: #666666;
12
+ --text-light: #8b949e;
13
+ --border-color: #e0e4e8;
14
+ --background-light: #ffffff;
15
+ --background-grey: #f8f9fa;
16
+ --background-light-hover: #f5f8fc;
17
+ --shadow-sm: 0 1px 3px rgba(0,0,0,0.06);
18
+ --shadow-md: 0 4px 6px rgba(0,0,0,0.1);
19
+ --radius-sm: 4px;
20
+ --radius-md: 8px;
21
+ --radius-lg: 12px;
22
+ --transition-fast: 150ms ease;
23
+ --transition-normal: 250ms ease;
24
+ --font-xs: 12px;
25
+ --font-sm: 14px;
26
+ --font-md: 16px;
27
+ --font-lg: 18px;
28
+ --font-xl: 20px;
29
+ --font-xxl: 24px;
30
+ --spacing-xs: 4px;
31
+ --spacing-sm: 8px;
32
+ --spacing-md: 16px;
33
+ --spacing-lg: 24px;
34
+ --spacing-xl: 32px;
35
+ }
36
+
37
+ body {
38
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
39
+ background-color: var(--background-light);
40
+ color: var(--text-color);
41
+ margin: 0;
42
+ padding: 0;
43
+ line-height: 1.5;
44
+ font-size: var(--font-md);
45
+ }
46
+
47
+ /* Header and Navigation */
48
+ .header {
49
+ background-color: var(--background-light);
50
+ border-bottom: 1px solid var(--border-color);
51
+ box-shadow: var(--shadow-sm);
52
+ position: sticky;
53
+ top: 0;
54
+ z-index: 100;
55
+ width: 100%;
56
+ }
57
+
58
+ .header-container {
59
+ display: flex;
60
+ justify-content: space-between;
61
+ align-items: center;
62
+ padding: var(--spacing-md) var(--spacing-xl);
63
+ max-width: 1200px;
64
+ margin: 0 auto;
65
+ }
66
+
67
+ .app-logo {
68
+ display: flex;
69
+ align-items: center;
70
+ font-size: var(--font-xl);
71
+ font-weight: 600;
72
+ color: var(--text-color);
73
+ text-decoration: none;
74
+ }
75
+
76
+ .app-logo i {
77
+ color: var(--primary-color);
78
+ font-size: 24px;
79
+ margin-right: 10px;
80
+ }
81
+
82
+ .header-actions {
83
+ display: flex;
84
+ align-items: center;
85
+ gap: var(--spacing-md);
86
+ }
87
+
88
+ .huggingface-link {
89
+ display: flex;
90
+ align-items: center;
91
+ text-decoration: none;
92
+ color: var(--text-secondary);
93
+ font-size: var(--font-sm);
94
+ transition: var(--transition-fast);
95
+ }
96
+
97
+ .huggingface-link:hover {
98
+ color: var(--primary-color);
99
+ }
100
+
101
+ .huggingface-link img {
102
+ height: 20px;
103
+ margin-right: 6px;
104
+ }
105
 
106
+ .info-banner {
107
+ background: var(--background-grey);
108
+ border-bottom: 1px solid var(--border-color);
109
+ padding: var(--spacing-xs) var(--spacing-xl);
110
+ font-size: var(--font-sm);
111
+ color: var(--text-secondary);
112
+ display: flex;
113
+ justify-content: space-between;
114
+ align-items: center;
115
+ }
116
+
117
+ .info-sources {
118
+ display: flex;
119
+ align-items: center;
120
+ gap: var(--spacing-sm);
121
+ flex-wrap: wrap;
122
+ }
123
+
124
+ .source-label,
125
+ .limit-label {
126
+ font-weight: 600;
127
+ color: var(--text-color);
128
+ }
129
+
130
+ .info-divider {
131
+ margin: 0 var(--spacing-sm);
132
+ color: var(--border-color);
133
+ }
134
+
135
+ .powered-by {
136
+ display: flex;
137
+ align-items: center;
138
+ gap: var(--spacing-xs);
139
+ }
140
+
141
+ .huggingface-badge {
142
+ display: flex;
143
+ align-items: center;
144
+ }
145
+
146
+ .huggingface-badge img {
147
+ height: 16px;
148
+ }
149
+
150
+ /* Layout containers */
151
+ .app-container {
152
+ display: flex;
153
+ flex-direction: column;
154
+ min-height: 100vh;
155
+ }
156
+
157
+ .main-content {
158
+ flex: 1;
159
+ padding: var(--spacing-lg) var(--spacing-xl);
160
+ max-width: 1100px;
161
+ margin: 0 auto;
162
+ width: 100%;
163
+ }
164
+
165
+ /* Tab Navigation */
166
+ .tab-navigation {
167
+ margin-bottom: var(--spacing-lg);
168
+ overflow-x: auto;
169
+ }
170
+
171
+ .tab-bar {
172
+ display: flex;
173
+ list-style: none;
174
+ padding: 0;
175
+ margin: 0;
176
+ border-bottom: 2px solid var(--border-color);
177
+ width: 100%;
178
+ }
179
+
180
+ .tab {
181
+ padding: var(--spacing-md) var(--spacing-lg);
182
+ cursor: pointer;
183
+ font-weight: 500;
184
+ color: var(--text-secondary);
185
+ transition: var(--transition-fast);
186
+ border-bottom: 2px solid transparent;
187
+ margin-bottom: -2px;
188
+ white-space: nowrap;
189
+ }
190
+
191
+ .tab:hover {
192
+ color: var(--primary-color);
193
+ background-color: var(--background-light-hover);
194
+ }
195
+
196
+ .tab.active {
197
+ color: var(--primary-color);
198
+ border-bottom: 2px solid var(--primary-color);
199
+ font-weight: 600;
200
+ }
201
+
202
+ .tab .badge {
203
+ background-color: var(--primary-color);
204
+ color: white;
205
+ font-size: var(--font-xs);
206
+ padding: 2px 6px;
207
+ border-radius: var(--radius-sm);
208
+ margin-left: var(--spacing-xs);
209
+ font-weight: 600;
210
+ }
211
+
212
+ /* Content Cards */
213
  .card, .container {
214
+ background: var(--background-light);
215
+ border-radius: var(--radius-md);
216
+ border: 1px solid var(--border-color);
217
+ box-shadow: var(--shadow-sm);
218
+ padding: var(--spacing-lg);
219
+ margin: 0 auto var(--spacing-lg) auto;
220
+ transition: box-shadow 0.2s ease;
221
+ max-width: 950px;
222
  }
223
+
224
  .card:hover, .container:hover {
225
+ box-shadow: var(--shadow-md);
226
  }
227
 
228
+ .section-heading {
229
+ margin-bottom: var(--spacing-lg);
230
+ }
231
+
232
+ .section-heading h2 {
233
+ font-size: var(--font-xl);
234
+ font-weight: 600;
235
+ margin: 0 0 var(--spacing-xs) 0;
236
+ }
237
+
238
+ .section-heading h3 {
239
+ font-size: var(--font-lg);
240
+ font-weight: 600;
241
+ margin: 0 0 var(--spacing-xs) 0;
242
+ }
243
 
244
+ .section-description {
245
+ color: var(--text-secondary);
246
+ margin: var(--spacing-xs) 0 0 0;
 
 
 
247
  }
248
+
249
+ /* Form Elements */
250
+ .form-row {
251
+ display: flex;
252
+ flex-wrap: wrap;
253
+ margin: 0 -8px;
254
+ max-width: 900px;
255
+ }
256
+
257
+ .form-group {
258
+ margin-bottom: var(--spacing-md);
259
+ padding: 0 8px;
260
+ flex: 1;
261
+ }
262
+
263
+ .col-md-6 {
264
+ width: 50%;
265
+ flex: 0 0 50%;
266
+ }
267
+
268
+ .col-md-4 {
269
+ width: 33.333333%;
270
+ flex: 0 0 33.333333%;
271
+ }
272
+
273
+ @media (max-width: 768px) {
274
+ .col-md-6, .col-md-4 {
275
+ width: 100%;
276
+ flex: 0 0 100%;
277
+ }
278
+ }
279
+
280
+ label {
281
+ display: block;
282
+ margin-bottom: var(--spacing-xs);
283
+ color: var(--text-secondary);
284
+ font-weight: 500;
285
+ font-size: var(--font-sm);
286
+ }
287
+
288
+ .input-field,
289
+ input[type="text"],
290
+ input[type="number"],
291
+ input[type="email"],
292
+ input[type="password"],
293
+ textarea {
294
+ width: 100%;
295
+ padding: 10px 14px;
296
+ border: 1px solid var(--border-color);
297
+ border-radius: var(--radius-sm);
298
+ font-size: var(--font-md);
299
+ transition: var(--transition-fast);
300
  outline: none;
301
+ box-sizing: border-box;
302
  }
303
+
304
+ .input-field:focus,
305
+ input[type="text"]:focus,
306
+ input[type="number"]:focus,
307
+ input[type="email"]:focus,
308
+ input[type="password"]:focus,
309
+ textarea:focus {
310
+ border-color: var(--primary-color);
311
+ box-shadow: 0 0 0 3px rgba(0, 103, 223, 0.15);
312
+ }
313
+
314
+ .select-field,
315
+ select {
316
+ width: 100%;
317
+ padding: 10px 14px;
318
+ border: 1px solid var(--border-color);
319
+ border-radius: var(--radius-sm);
320
+ background-color: white;
321
+ font-size: var(--font-md);
322
+ transition: var(--transition-fast);
323
+ outline: none;
324
+ appearance: none;
325
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M8 11L3 6H13L8 11Z' fill='%23666666'/%3E%3C/svg%3E");
326
+ background-repeat: no-repeat;
327
+ background-position: right 14px center;
328
+ box-sizing: border-box;
329
+ }
330
+
331
+ .select-field:focus,
332
+ select:focus {
333
+ border-color: var(--primary-color);
334
+ box-shadow: 0 0 0 3px rgba(0, 103, 223, 0.15);
335
+ }
336
+
337
+ /* Buttons */
338
+ .btn-primary,
339
+ button[type="submit"] {
340
+ background-color: var(--primary-color);
341
+ color: white;
342
  border: none;
343
+ border-radius: var(--radius-sm);
344
+ padding: 10px 16px;
345
+ font-weight: 600;
346
+ font-size: var(--font-md);
347
+ cursor: pointer;
348
+ transition: var(--transition-fast);
349
+ }
350
+
351
+ .btn-primary:hover,
352
+ button[type="submit"]:hover {
353
+ background-color: var(--primary-dark);
354
+ }
355
+
356
+ .btn-secondary {
357
+ background-color: var(--background-grey);
358
+ color: var(--text-color);
359
+ border: 1px solid var(--border-color);
360
+ border-radius: var(--radius-sm);
361
+ padding: 10px 16px;
362
+ font-weight: 500;
363
+ font-size: var(--font-md);
364
+ cursor: pointer;
365
+ transition: var(--transition-fast);
366
+ }
367
+
368
+ .btn-secondary:hover {
369
+ background-color: var(--border-color);
370
+ }
371
+
372
+ .btn-success {
373
+ background-color: var(--success-color);
374
+ color: white;
375
+ }
376
+
377
+ .btn-danger {
378
+ background-color: var(--danger-color);
379
+ color: white;
380
+ }
381
+
382
+ .btn-info {
383
+ background-color: var(--info-color);
384
+ color: white;
385
+ }
386
+
387
+ .btn-icon {
388
+ display: inline-flex;
389
+ align-items: center;
390
+ gap: var(--spacing-xs);
391
+ }
392
+
393
+ .btn-icon i {
394
+ font-size: var(--font-md);
395
+ }
396
+
397
+ .form-actions {
398
+ display: flex;
399
+ gap: var(--spacing-md);
400
+ margin-top: var(--spacing-md);
401
+ }
402
+
403
+ /* Results and Visualization */
404
+ .results-section,
405
+ .results-container {
406
+ margin-top: var(--spacing-lg);
407
+ }
408
+
409
+ .chart-container,
410
+ .chart-area,
411
+ .visualization-container {
412
+ background-color: white;
413
+ border-radius: var(--radius-md);
414
+ padding: var(--spacing-md);
415
+ margin: var(--spacing-md) auto;
416
+ max-width: 850px;
417
+ }
418
+
419
+ .trade-flow-map {
420
+ margin: var(--spacing-md) auto;
421
+ border: 1px solid var(--border-color);
422
+ border-radius: var(--radius-md);
423
+ overflow: hidden;
424
+ max-width: 850px;
425
+ background-color: #ffffff;
426
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
427
+ }
428
+
429
+ /* Map container for Leaflet */
430
+ .leaflet-container {
431
+ border-radius: var(--radius-md);
432
+ border: 1px solid var(--border-color);
433
+ overflow: hidden;
434
+ width: 100%;
435
+ max-width: 850px !important;
436
+ margin: 0 auto;
437
+ }
438
+
439
+ .chart-controls,
440
+ .chart-control-buttons {
441
+ display: flex;
442
+ flex-wrap: wrap;
443
+ gap: var(--spacing-sm);
444
+ margin-bottom: var(--spacing-md);
445
+ }
446
+
447
+ .chart-type-btn {
448
+ background-color: var(--background-grey);
449
+ border: 1px solid var(--border-color);
450
+ border-radius: var(--radius-sm);
451
+ padding: 8px 14px;
452
+ font-size: var(--font-sm);
453
+ font-weight: 500;
454
+ cursor: pointer;
455
+ transition: var(--transition-fast);
456
+ display: inline-flex;
457
+ align-items: center;
458
+ gap: 6px;
459
+ }
460
+
461
+ .chart-type-btn:hover {
462
+ background-color: var(--background-light-hover);
463
+ }
464
+
465
+ .chart-type-btn.active {
466
+ background-color: var(--primary-color);
467
+ color: white;
468
+ border-color: var(--primary-color);
469
+ }
470
+
471
+ .chart-type-btn i {
472
+ font-size: var(--font-md);
473
+ }
474
+
475
+ /* AI Assistant Styles */
476
+ .model-badge {
477
+ display: flex;
478
+ align-items: center;
479
+ gap: var(--spacing-xs);
480
+ font-size: var(--font-sm);
481
+ color: var(--text-secondary);
482
+ margin-top: var(--spacing-xs);
483
+ }
484
+
485
+ .hf-logo {
486
+ height: 18px;
487
+ }
488
+
489
+ .chat-container {
490
+ border: 1px solid var(--border-color);
491
+ border-radius: var(--radius-md);
492
+ display: flex;
493
+ flex-direction: column;
494
+ overflow: hidden;
495
+ height: 500px;
496
+ background-color: var(--background-grey);
497
+ }
498
+
499
+ .chat-messages {
500
+ flex: 1;
501
+ overflow-y: auto;
502
+ padding: var(--spacing-md);
503
+ }
504
+
505
+ .message {
506
+ margin-bottom: var(--spacing-md);
507
+ max-width: 85%;
508
+ }
509
+
510
+ .message-assistant {
511
+ align-self: flex-start;
512
+ }
513
+
514
+ .message-user {
515
+ align-self: flex-end;
516
+ margin-left: auto;
517
+ }
518
+
519
+ .message-content {
520
+ background-color: white;
521
+ border-radius: var(--radius-md);
522
+ padding: var(--spacing-md);
523
+ box-shadow: var(--shadow-sm);
524
+ }
525
+
526
+ .message-assistant .message-content {
527
+ border-bottom-left-radius: 0;
528
+ }
529
+
530
+ .message-user .message-content {
531
+ background-color: var(--primary-light);
532
+ border-bottom-right-radius: 0;
533
+ }
534
+
535
+ .chat-input-container {
536
+ display: flex;
537
+ padding: var(--spacing-md);
538
+ background-color: white;
539
+ border-top: 1px solid var(--border-color);
540
+ gap: var(--spacing-sm);
541
+ }
542
+
543
+ .chat-input {
544
+ flex: 1;
545
+ padding: 12px 16px;
546
+ border: 1px solid var(--border-color);
547
+ border-radius: var(--radius-md);
548
+ font-size: var(--font-md);
549
+ resize: none;
550
+ }
551
+
552
+ .quick-questions-container {
553
+ margin-top: var(--spacing-lg);
554
+ }
555
+
556
+ .section-title {
557
+ font-size: var(--font-lg);
558
+ font-weight: 600;
559
+ margin-bottom: var(--spacing-md);
560
+ color: var(--text-color);
561
+ }
562
+
563
+ .quick-question-chips {
564
+ display: flex;
565
+ flex-wrap: wrap;
566
+ gap: var(--spacing-sm);
567
+ margin-bottom: var(--spacing-lg);
568
+ }
569
+
570
+ .quick-question-chip {
571
+ background-color: var(--background-light);
572
+ border: 1px solid var(--border-color);
573
+ border-radius: 50px;
574
+ padding: 8px 16px;
575
+ font-size: var(--font-sm);
576
  cursor: pointer;
577
+ transition: var(--transition-fast);
578
+ }
579
+
580
+ .quick-question-chip:hover {
581
+ background-color: var(--primary-light);
582
+ border-color: var(--primary-color);
583
+ color: var(--primary-color);
584
+ }
585
+
586
+ .assistant-tools {
587
+ margin-top: var(--spacing-xl);
588
+ }
589
+
590
+ .tools-grid {
591
+ display: grid;
592
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
593
+ gap: var(--spacing-md);
594
+ margin-top: var(--spacing-md);
595
+ }
596
+
597
+ .tool-card {
598
+ border: 1px solid var(--border-color);
599
+ border-radius: var(--radius-md);
600
+ overflow: hidden;
601
+ }
602
+
603
+ .tool-header {
604
+ background-color: var(--background-grey);
605
+ padding: var(--spacing-md);
606
+ display: flex;
607
+ align-items: center;
608
+ gap: var(--spacing-sm);
609
+ border-bottom: 1px solid var(--border-color);
610
+ }
611
+
612
+ .tool-header i {
613
+ color: var(--primary-color);
614
+ font-size: var(--font-lg);
615
+ }
616
+
617
+ .tool-header h4 {
618
+ margin: 0;
619
+ font-size: var(--font-md);
620
+ font-weight: 600;
621
+ }
622
+
623
+ .tool-content {
624
+ padding: var(--spacing-md);
625
+ }
626
+
627
+ .form-group {
628
+ margin-bottom: var(--spacing-md);
629
+ }
630
+
631
+ .input-with-button {
632
+ display: flex;
633
+ gap: var(--spacing-sm);
634
+ }
635
+
636
+ .input-with-button input {
637
+ flex: 1;
638
+ }
639
+
640
+ /* Cache Management */
641
+ .cache-control-header {
642
+ display: flex;
643
+ justify-content: space-between;
644
+ align-items: center;
645
+ margin-bottom: var(--spacing-md);
646
+ }
647
+
648
+ .panel-title {
649
+ font-size: var(--font-lg);
650
+ font-weight: 600;
651
+ margin: 0;
652
+ }
653
+
654
+ .action-buttons {
655
+ display: flex;
656
+ gap: var(--spacing-sm);
657
+ }
658
+
659
+ .cached-data-container {
660
+ border: 1px solid var(--border-color);
661
+ border-radius: var(--radius-md);
662
+ background-color: var(--background-light);
663
+ min-height: 200px;
664
+ }
665
+
666
+ .loading-indicator {
667
+ display: flex;
668
+ flex-direction: column;
669
+ align-items: center;
670
+ justify-content: center;
671
+ padding: var(--spacing-xl);
672
+ color: var(--text-secondary);
673
+ gap: var(--spacing-md);
674
  }
675
+
676
+ .loading-indicator i {
677
+ font-size: var(--font-xl);
678
+ color: var(--primary-color);
679
+ }
680
+
681
+ /* Typography */
682
+ h1, h2, h3, h4, h5, h6 {
683
+ color: var(--text-color);
684
+ margin-top: 0;
685
+ font-weight: 600;
686
+ line-height: 1.3;
687
+ }
688
+
689
+ h1 { font-size: 28px; margin-bottom: 24px; }
690
+ h2 { font-size: 24px; margin-bottom: 20px; }
691
+ h3 { font-size: 20px; margin-bottom: 16px; }
692
+
693
+ /* Page section headings */
694
+ .section-heading {
695
+ display: flex;
696
+ align-items: center;
697
+ margin-bottom: 20px;
698
+ padding-bottom: 8px;
699
+ border-bottom: 1px solid var(--border-color);
700
+ }
701
+
702
+ /* Form elements */
703
+ form label {
704
+ display: block;
705
+ margin-bottom: 8px;
706
+ color: var(--text-color);
707
+ font-weight: 500;
708
+ font-size: 14px;
709
+ }
710
+
711
+ form input, form select, form textarea {
712
+ width: 100%;
713
+ padding: 10px 12px;
714
+ margin-bottom: 16px;
715
+ border: 1px solid var(--border-color);
716
+ border-radius: var(--radius-sm);
717
+ font-size: 15px;
718
+ background-color: var(--background-light);
719
+ color: var(--text-color);
720
+ transition: all 0.2s ease;
721
+ }
722
+
723
+ form input:focus, form select:focus, form textarea:focus {
724
+ outline: none;
725
+ border-color: var(--primary-color);
726
+ box-shadow: 0 0 0 2px rgba(0, 103, 223, 0.15);
727
+ }
728
+
729
+ /* Buttons */
730
+ .btn {
731
+ display: inline-flex;
732
+ align-items: center;
733
+ justify-content: center;
734
+ padding: 8px 16px;
735
+ font-size: 14px;
736
+ font-weight: 500;
737
+ border-radius: var(--radius-sm);
738
+ cursor: pointer;
739
+ transition: all 0.2s ease;
740
+ text-decoration: none;
741
+ border: 1px solid transparent;
742
+ }
743
+
744
+ .btn-primary {
745
+ background-color: var(--primary-color);
746
+ color: white;
747
+ }
748
+
749
+ .btn-primary:hover {
750
+ background-color: #0055c4;
751
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
752
+ }
753
+
754
+ .btn-secondary {
755
+ background-color: white;
756
+ border-color: var(--border-color);
757
+ color: var(--text-color);
758
+ }
759
+
760
+ .btn-secondary:hover {
761
+ background-color: var(--background-grey);
762
+ border-color: #ccd0d5;
763
+ }
764
+
765
+ /* Form buttons inherit btn styles */
766
+ form button {
767
+ width: auto;
768
+ padding: 10px 16px;
769
+ font-weight: 500;
770
+ display: inline-flex;
771
+ align-items: center;
772
+ justify-content: center;
773
+ margin-top: 8px;
774
+ border-radius: var(--radius-sm);
775
+ cursor: pointer;
776
+ transition: all 0.2s ease;
777
+ background-color: var(--primary-color);
778
+ color: white;
779
+ border: none;
780
+ }
781
+
782
  form button:hover {
783
+ background-color: #0055c4;
784
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
 
785
  }
786
+ /* Results and content sections */
787
+ .results-section {
788
+ margin-top: 24px;
789
  }
790
+
791
+ #results,
792
+ #predictionResults,
793
+ #exportsCountryResults,
794
+ #importsCountryResults,
795
+ #exportsProductResults,
796
+ #importsProductResults,
797
+ #rankingsResults,
798
+ #bilateralResults,
799
+ #dataDownloadStatus {
800
+ margin-top: 16px;
801
+ font-size: 15px;
802
+ }
803
+
804
+ /* Alerts and notifications */
805
+ .alert {
806
+ padding: 12px 16px;
807
+ border-radius: var(--radius-sm);
808
+ margin-bottom: 16px;
809
+ font-weight: 500;
810
+ font-size: 14px;
811
+ display: flex;
812
+ align-items: center;
813
+ }
814
+
815
+ .alert-icon {
816
+ margin-right: 12px;
817
+ flex-shrink: 0;
818
+ }
819
+
820
+ .alert-danger {
821
+ background-color: #FEEFEF;
822
+ color: #B42318;
823
+ border: 1px solid #FDE2E2;
824
+ }
825
+
826
+ .alert-success {
827
+ background-color: #ECFDF3;
828
+ color: #027A48;
829
+ border: 1px solid #D1FADF;
830
+ }
831
+
832
+ .alert-info {
833
+ background-color: #EFF8FF;
834
+ color: #175CD3;
835
+ border: 1px solid #D1E9FF;
836
+ }
837
+
838
+ .alert-warning {
839
+ background-color: #FFFAEB;
840
+ color: #B54708;
841
+ border: 1px solid #FEF0C7;
842
+ }
843
+
844
+ /* Loading indicators */
845
  .spinner {
846
+ border: 3px solid rgba(0, 103, 223, 0.1);
847
+ border-top: 3px solid var(--primary-color);
848
  border-radius: 50%;
849
+ width: 24px;
850
+ height: 24px;
851
  animation: spin 1s linear infinite;
852
+ margin: 16px auto;
853
  display: block;
854
  }
855
+
856
  @keyframes spin {
857
  0% { transform: rotate(0deg); }
858
  100% { transform: rotate(360deg); }
859
  }
860
+
861
+ /* Tables */
862
  table {
863
+ width: 100%;
864
+ border-collapse: separate;
865
+ border-spacing: 0;
866
+ margin-bottom: 24px;
867
+ background: var(--background-light);
868
+ border-radius: var(--radius-sm);
869
  overflow: hidden;
870
+ font-size: 14px;
871
+ border: 1px solid var(--border-color);
872
  }
873
+
874
  thead {
875
+ background-color: var(--background-grey);
876
+ color: var(--text-color);
877
+ font-weight: 600;
878
  }
879
+
880
+ th {
881
+ padding: 12px 16px;
882
  text-align: left;
883
+ font-weight: 600;
884
+ border-bottom: 1px solid var(--border-color);
885
+ }
886
+
887
+ td {
888
+ padding: 12px 16px;
889
+ border-bottom: 1px solid var(--border-color);
890
+ color: var(--text-secondary);
891
+ }
892
+
893
+ tr:last-child td {
894
+ border-bottom: none;
895
+ }
896
+
897
+ tr:hover {
898
+ background-color: var(--background-grey);
899
+ }
900
+ /* Header and Navigation */
901
+ .header {
902
+ background-color: var(--background-light);
903
+ border-bottom: 1px solid var(--border-color);
904
+ padding: 16px 0;
905
+ position: sticky;
906
+ top: 0;
907
+ z-index: 100;
908
+ }
909
+
910
+ .header-container {
911
+ display: flex;
912
+ align-items: center;
913
+ justify-content: space-between;
914
+ max-width: 1200px;
915
+ margin: 0 auto;
916
+ padding: 0 16px;
917
+ }
918
+
919
+ .app-logo {
920
+ display: flex;
921
+ align-items: center;
922
+ font-weight: 600;
923
+ font-size: 18px;
924
+ color: var(--text-color);
925
+ text-decoration: none;
926
+ }
927
+
928
+ .app-logo img {
929
+ height: 32px;
930
+ margin-right: 8px;
931
+ }
932
+
933
+ /* Info banner */
934
+ .info-banner {
935
+ background-color: var(--background-grey);
936
+ border-bottom: 1px solid var(--border-color);
937
+ padding: 8px 16px;
938
+ font-size: 13px;
939
+ color: var(--text-secondary);
940
+ display: flex;
941
+ justify-content: space-between;
942
+ align-items: center;
943
+ }
944
+
945
+ /* Tab Navigation */
946
+ .tab-navigation {
947
+ border-bottom: 1px solid var(--border-color);
948
+ margin-bottom: 24px;
949
+ }
950
+
951
+ .tab-bar {
952
+ display: flex;
953
+ flex-wrap: wrap;
954
+ list-style: none;
955
+ padding: 0;
956
+ margin: 0;
957
+ gap: 4px;
958
+ }
959
+
960
+ .tab {
961
+ padding: 12px 16px;
962
+ font-size: 14px;
963
+ font-weight: 500;
964
+ color: var(--text-secondary);
965
+ cursor: pointer;
966
+ border-bottom: 2px solid transparent;
967
+ transition: all 0.2s ease;
968
+ background: none;
969
+ border-radius: 0;
970
+ }
971
+
972
+ .tab:hover {
973
+ color: var(--primary-color);
974
+ background-color: var(--primary-light);
975
+ }
976
+
977
+ .tab.active {
978
+ color: var(--primary-color);
979
+ border-bottom-color: var(--primary-color);
980
+ font-weight: 600;
981
+ }
982
+
983
+ .tab-content {
984
+ display: none;
985
+ padding: 16px 0;
986
  }
987
+
988
+ .tab-content.active {
989
+ display: block;
990
+ }
991
+
992
+ /* Badges */
993
+ .badge {
994
+ display: inline-flex;
995
+ align-items: center;
996
+ justify-content: center;
997
+ padding: 2px 8px;
998
+ font-size: 12px;
999
+ font-weight: 500;
1000
+ border-radius: 16px;
1001
+ margin-left: 6px;
1002
+ background-color: var(--primary-light);
1003
+ color: var(--primary-color);
1004
+ }
1005
+
1006
+ /* Charts */
1007
+ .chart-container {
1008
+ background-color: var(--background-light);
1009
+ border-radius: var(--radius-md);
1010
+ border: 1px solid var(--border-color);
1011
+ padding: 16px;
1012
+ margin-bottom: 24px;
1013
+ width: 100%;
1014
+ }
1015
+
1016
+ #tradeChart,
1017
+ #predictionChart,
1018
+ #exportsCountryChart,
1019
+ #importsCountryChart,
1020
+ #exportsProductChart,
1021
+ #importsProductChart,
1022
+ #rankingsChart,
1023
+ #bilateralChart {
1024
+ max-width: 100%;
1025
+ margin-top: 16px;
1026
+ background: var(--background-light);
1027
+ border-radius: var(--radius-sm);
1028
+ }
1029
+
1030
+ /* Chart controls */
1031
+ .chart-controls {
1032
+ display: flex;
1033
+ flex-wrap: wrap;
1034
+ gap: 8px;
1035
+ margin-bottom: 16px;
1036
  }
1037
+
1038
+ .chart-type-btn {
1039
+ display: inline-flex;
1040
+ align-items: center;
1041
+ padding: 6px 12px;
1042
+ font-size: 13px;
1043
+ font-weight: 500;
1044
+ border-radius: var(--radius-sm);
1045
+ border: 1px solid var(--border-color);
1046
+ background-color: var(--background-light);
1047
+ color: var(--text-secondary);
1048
+ cursor: pointer;
1049
+ transition: all 0.2s ease;
1050
+ }
1051
+
1052
+ .chart-type-btn:hover,
1053
+ .chart-type-btn.active {
1054
+ background-color: var(--primary-light);
1055
+ color: var(--primary-color);
1056
+ border-color: var(--primary-color);
1057
+ }
1058
+
1059
+ .chart-type-btn i {
1060
+ margin-right: 6px;
1061
+ }
1062
+
1063
+ /* Responsive adjustments */
1064
  @media (max-width: 900px) {
1065
+ .container, .card {
1066
+ width: calc(100% - 32px);
1067
+ padding: 16px;
1068
+ margin: 16px;
1069
+ }
1070
+
1071
+ .tab-bar {
1072
+ overflow-x: auto;
1073
+ white-space: nowrap;
1074
+ -webkit-overflow-scrolling: touch;
1075
+ scrollbar-width: none; /* Firefox */
1076
+ }
1077
+
1078
+ .tab-bar::-webkit-scrollbar {
1079
+ display: none; /* Chrome/Safari/Opera */
1080
+ }
1081
+
1082
+ .tab {
1083
+ padding: 12px 10px;
1084
+ font-size: 13px;
1085
+ }
1086
+
1087
+ table {
1088
+ font-size: 13px;
1089
+ }
1090
+
1091
+ th, td {
1092
+ padding: 8px 12px;
1093
+ }
1094
+ }
1095
  .alert-success { background: #e5ffe5; color: #27ae60; border: 1px solid #2ecc71; }
1096
  .spinner {
1097
  border: 6px solid #f3f3f3;
 
1107
  0% { transform: rotate(0deg); }
1108
  100% { transform: rotate(360deg); }
1109
  }
1110
+ /* Custom styles for specific components */
1111
+ .trade-data-visualization {
1112
+ margin-top: 24px;
1113
+ }
1114
+
1115
+ .ai-assistant-container {
1116
+ border-radius: var(--radius-md);
1117
+ border: 1px solid var(--border-color);
1118
+ background-color: var(--background-light);
1119
+ padding: 16px;
1120
+ margin-bottom: 24px;
1121
+ }
1122
+
1123
+ .chat-message {
1124
+ padding: 12px 16px;
1125
+ margin-bottom: 12px;
1126
+ border-radius: var(--radius-md);
1127
+ max-width: 80%;
1128
+ }
1129
+
1130
+ .chat-message-user {
1131
+ background-color: var(--primary-light);
1132
+ color: var(--text-color);
1133
+ margin-left: auto;
1134
+ }
1135
+
1136
+ .chat-message-assistant {
1137
+ background-color: var(--background-grey);
1138
+ color: var(--text-color);
1139
+ margin-right: auto;
1140
+ }