vectorplasticity commited on
Commit
bffe968
·
verified ·
1 Parent(s): 22878e2

Add dashboard CSS styling

Browse files
Files changed (1) hide show
  1. app/static/css/style.css +549 -0
app/static/css/style.css ADDED
@@ -0,0 +1,549 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Universal Model Trainer - Dashboard Styles */
2
+
3
+ :root {
4
+ --primary-color: #6366f1;
5
+ --primary-hover: #4f46e5;
6
+ --secondary-color: #8b5cf6;
7
+ --success-color: #10b981;
8
+ --warning-color: #f59e0b;
9
+ --danger-color: #ef4444;
10
+ --info-color: #3b82f6;
11
+ --dark-bg: #0f172a;
12
+ --card-bg: #1e293b;
13
+ --card-border: #334155;
14
+ --text-primary: #f1f5f9;
15
+ --text-secondary: #94a3b8;
16
+ --text-muted: #64748b;
17
+ --border-color: #334155;
18
+ --gradient-1: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
19
+ --gradient-2: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #a855f7 100%);
20
+ }
21
+
22
+ /* Base Styles */
23
+ * {
24
+ margin: 0;
25
+ padding: 0;
26
+ box-sizing: border-box;
27
+ }
28
+
29
+ body {
30
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
31
+ background-color: var(--dark-bg);
32
+ color: var(--text-primary);
33
+ min-height: 100vh;
34
+ line-height: 1.6;
35
+ }
36
+
37
+ /* Navbar */
38
+ .navbar {
39
+ background: linear-gradient(135deg, rgba(99, 102, 241, 0.1) 0%, rgba(139, 92, 246, 0.1) 100%);
40
+ backdrop-filter: blur(10px);
41
+ border-bottom: 1px solid var(--card-border);
42
+ padding: 1rem 2rem;
43
+ position: sticky;
44
+ top: 0;
45
+ z-index: 1000;
46
+ }
47
+
48
+ .navbar-brand {
49
+ font-weight: 700;
50
+ font-size: 1.5rem;
51
+ background: var(--gradient-2);
52
+ -webkit-background-clip: text;
53
+ -webkit-text-fill-color: transparent;
54
+ background-clip: text;
55
+ }
56
+
57
+ .nav-link {
58
+ color: var(--text-secondary) !important;
59
+ font-weight: 500;
60
+ padding: 0.5rem 1rem !important;
61
+ border-radius: 0.5rem;
62
+ transition: all 0.3s ease;
63
+ }
64
+
65
+ .nav-link:hover, .nav-link.active {
66
+ color: var(--text-primary) !important;
67
+ background: rgba(99, 102, 241, 0.2);
68
+ }
69
+
70
+ /* Main Content */
71
+ .main-content {
72
+ padding: 2rem;
73
+ max-width: 1600px;
74
+ margin: 0 auto;
75
+ }
76
+
77
+ /* Cards */
78
+ .card {
79
+ background: var(--card-bg);
80
+ border: 1px solid var(--card-border);
81
+ border-radius: 1rem;
82
+ overflow: hidden;
83
+ transition: all 0.3s ease;
84
+ }
85
+
86
+ .card:hover {
87
+ border-color: var(--primary-color);
88
+ box-shadow: 0 0 30px rgba(99, 102, 241, 0.1);
89
+ }
90
+
91
+ .card-header {
92
+ background: rgba(99, 102, 241, 0.1);
93
+ border-bottom: 1px solid var(--card-border);
94
+ padding: 1rem 1.5rem;
95
+ font-weight: 600;
96
+ }
97
+
98
+ .card-body {
99
+ padding: 1.5rem;
100
+ }
101
+
102
+ /* Stats Cards */
103
+ .stat-card {
104
+ background: linear-gradient(135deg, rgba(30, 41, 59, 0.8) 0%, rgba(30, 41, 59, 0.4) 100%);
105
+ border: 1px solid var(--card-border);
106
+ border-radius: 1rem;
107
+ padding: 1.5rem;
108
+ text-align: center;
109
+ transition: all 0.3s ease;
110
+ }
111
+
112
+ .stat-card:hover {
113
+ transform: translateY(-5px);
114
+ box-shadow: 0 10px 40px rgba(99, 102, 241, 0.2);
115
+ }
116
+
117
+ .stat-card .stat-icon {
118
+ font-size: 2.5rem;
119
+ margin-bottom: 1rem;
120
+ }
121
+
122
+ .stat-card .stat-value {
123
+ font-size: 2.5rem;
124
+ font-weight: 700;
125
+ background: var(--gradient-2);
126
+ -webkit-background-clip: text;
127
+ -webkit-text-fill-color: transparent;
128
+ background-clip: text;
129
+ }
130
+
131
+ .stat-card .stat-label {
132
+ color: var(--text-secondary);
133
+ font-size: 0.9rem;
134
+ margin-top: 0.5rem;
135
+ }
136
+
137
+ /* Buttons */
138
+ .btn-primary {
139
+ background: var(--gradient-2);
140
+ border: none;
141
+ border-radius: 0.5rem;
142
+ padding: 0.75rem 1.5rem;
143
+ font-weight: 600;
144
+ transition: all 0.3s ease;
145
+ }
146
+
147
+ .btn-primary:hover {
148
+ transform: translateY(-2px);
149
+ box-shadow: 0 5px 20px rgba(99, 102, 241, 0.4);
150
+ }
151
+
152
+ .btn-secondary {
153
+ background: var(--card-bg);
154
+ border: 1px solid var(--border-color);
155
+ color: var(--text-primary);
156
+ border-radius: 0.5rem;
157
+ padding: 0.75rem 1.5rem;
158
+ font-weight: 500;
159
+ }
160
+
161
+ .btn-secondary:hover {
162
+ background: rgba(99, 102, 241, 0.2);
163
+ border-color: var(--primary-color);
164
+ color: var(--text-primary);
165
+ }
166
+
167
+ .btn-danger {
168
+ background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
169
+ border: none;
170
+ }
171
+
172
+ .btn-success {
173
+ background: linear-gradient(135deg, #10b981 0%, #059669 100%);
174
+ border: none;
175
+ }
176
+
177
+ .btn-warning {
178
+ background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
179
+ border: none;
180
+ color: #000;
181
+ }
182
+
183
+ /* Forms */
184
+ .form-control, .form-select {
185
+ background: var(--dark-bg);
186
+ border: 1px solid var(--border-color);
187
+ color: var(--text-primary);
188
+ border-radius: 0.5rem;
189
+ padding: 0.75rem 1rem;
190
+ }
191
+
192
+ .form-control:focus, .form-select:focus {
193
+ background: var(--dark-bg);
194
+ border-color: var(--primary-color);
195
+ color: var(--text-primary);
196
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.2);
197
+ }
198
+
199
+ .form-control::placeholder {
200
+ color: var(--text-muted);
201
+ }
202
+
203
+ .form-label {
204
+ font-weight: 600;
205
+ color: var(--text-secondary);
206
+ margin-bottom: 0.5rem;
207
+ }
208
+
209
+ .form-text {
210
+ color: var(--text-muted);
211
+ font-size: 0.85rem;
212
+ }
213
+
214
+ /* Tables */
215
+ .table {
216
+ color: var(--text-primary);
217
+ }
218
+
219
+ .table thead th {
220
+ background: rgba(99, 102, 241, 0.1);
221
+ border-bottom: 2px solid var(--primary-color);
222
+ font-weight: 600;
223
+ padding: 1rem;
224
+ }
225
+
226
+ .table tbody td {
227
+ border-bottom: 1px solid var(--card-border);
228
+ padding: 1rem;
229
+ vertical-align: middle;
230
+ }
231
+
232
+ .table tbody tr:hover {
233
+ background: rgba(99, 102, 241, 0.05);
234
+ }
235
+
236
+ /* Badges */
237
+ .badge {
238
+ padding: 0.5rem 0.75rem;
239
+ font-weight: 500;
240
+ border-radius: 0.5rem;
241
+ }
242
+
243
+ .badge-queued {
244
+ background: rgba(100, 116, 139, 0.3);
245
+ color: #cbd5e1;
246
+ }
247
+
248
+ .badge-running {
249
+ background: rgba(59, 130, 246, 0.2);
250
+ color: #60a5fa;
251
+ }
252
+
253
+ .badge-completed {
254
+ background: rgba(16, 185, 129, 0.2);
255
+ color: #34d399;
256
+ }
257
+
258
+ .badge-failed {
259
+ background: rgba(239, 68, 68, 0.2);
260
+ color: #f87171;
261
+ }
262
+
263
+ .badge-cancelled {
264
+ background: rgba(245, 158, 11, 0.2);
265
+ color: #fbbf24;
266
+ }
267
+
268
+ .badge-paused {
269
+ background: rgba(139, 92, 246, 0.2);
270
+ color: #a78bfa;
271
+ }
272
+
273
+ /* Progress Bar */
274
+ .progress {
275
+ background: var(--dark-bg);
276
+ border-radius: 1rem;
277
+ height: 0.75rem;
278
+ overflow: hidden;
279
+ }
280
+
281
+ .progress-bar {
282
+ background: var(--gradient-2);
283
+ transition: width 0.5s ease;
284
+ }
285
+
286
+ /* Modal */
287
+ .modal-content {
288
+ background: var(--card-bg);
289
+ border: 1px solid var(--card-border);
290
+ border-radius: 1rem;
291
+ }
292
+
293
+ .modal-header {
294
+ border-bottom: 1px solid var(--card-border);
295
+ padding: 1.5rem;
296
+ }
297
+
298
+ .modal-title {
299
+ font-weight: 700;
300
+ }
301
+
302
+ .modal-body {
303
+ padding: 1.5rem;
304
+ }
305
+
306
+ .modal-footer {
307
+ border-top: 1px solid var(--card-border);
308
+ padding: 1rem 1.5rem;
309
+ }
310
+
311
+ .btn-close {
312
+ filter: invert(1);
313
+ }
314
+
315
+ /* Alerts */
316
+ .alert {
317
+ border-radius: 0.75rem;
318
+ border: 1px solid;
319
+ }
320
+
321
+ .alert-info {
322
+ background: rgba(59, 130, 246, 0.1);
323
+ border-color: rgba(59, 130, 246, 0.3);
324
+ color: #60a5fa;
325
+ }
326
+
327
+ .alert-success {
328
+ background: rgba(16, 185, 129, 0.1);
329
+ border-color: rgba(16, 185, 129, 0.3);
330
+ color: #34d399;
331
+ }
332
+
333
+ .alert-warning {
334
+ background: rgba(245, 158, 11, 0.1);
335
+ border-color: rgba(245, 158, 11, 0.3);
336
+ color: #fbbf24;
337
+ }
338
+
339
+ .alert-danger {
340
+ background: rgba(239, 68, 68, 0.1);
341
+ border-color: rgba(239, 68, 68, 0.3);
342
+ color: #f87171;
343
+ }
344
+
345
+ /* Log Terminal */
346
+ .log-terminal {
347
+ background: #000;
348
+ border-radius: 0.5rem;
349
+ padding: 1rem;
350
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
351
+ font-size: 0.85rem;
352
+ max-height: 400px;
353
+ overflow-y: auto;
354
+ }
355
+
356
+ .log-terminal .log-entry {
357
+ padding: 0.25rem 0;
358
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
359
+ }
360
+
361
+ .log-terminal .log-info { color: #60a5fa; }
362
+ .log-terminal .log-warning { color: #fbbf24; }
363
+ .log-terminal .log-error { color: #f87171; }
364
+ .log-terminal .log-success { color: #34d399; }
365
+
366
+ /* Tabs */
367
+ .nav-tabs {
368
+ border-bottom: 1px solid var(--card-border);
369
+ }
370
+
371
+ .nav-tabs .nav-link {
372
+ border: none;
373
+ border-bottom: 2px solid transparent;
374
+ color: var(--text-secondary);
375
+ }
376
+
377
+ .nav-tabs .nav-link.active {
378
+ background: transparent;
379
+ border-bottom: 2px solid var(--primary-color);
380
+ color: var(--text-primary);
381
+ }
382
+
383
+ /* Tooltips */
384
+ .tooltip-inner {
385
+ background: var(--card-bg);
386
+ border: 1px solid var(--card-border);
387
+ color: var(--text-primary);
388
+ }
389
+
390
+ /* Dropdown */
391
+ .dropdown-menu {
392
+ background: var(--card-bg);
393
+ border: 1px solid var(--card-border);
394
+ border-radius: 0.5rem;
395
+ padding: 0.5rem;
396
+ }
397
+
398
+ .dropdown-item {
399
+ color: var(--text-primary);
400
+ border-radius: 0.25rem;
401
+ padding: 0.5rem 1rem;
402
+ }
403
+
404
+ .dropdown-item:hover {
405
+ background: rgba(99, 102, 241, 0.2);
406
+ color: var(--text-primary);
407
+ }
408
+
409
+ /* Spinner */
410
+ .spinner-grow {
411
+ width: 1rem;
412
+ height: 1rem;
413
+ }
414
+
415
+ /* Animations */
416
+ @keyframes pulse {
417
+ 0%, 100% { opacity: 1; }
418
+ 50% { opacity: 0.5; }
419
+ }
420
+
421
+ .animate-pulse {
422
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
423
+ }
424
+
425
+ @keyframes spin {
426
+ from { transform: rotate(0deg); }
427
+ to { transform: rotate(360deg); }
428
+ }
429
+
430
+ .animate-spin {
431
+ animation: spin 1s linear infinite;
432
+ }
433
+
434
+ /* Scrollbar */
435
+ ::-webkit-scrollbar {
436
+ width: 8px;
437
+ height: 8px;
438
+ }
439
+
440
+ ::-webkit-scrollbar-track {
441
+ background: var(--dark-bg);
442
+ }
443
+
444
+ ::-webkit-scrollbar-thumb {
445
+ background: var(--card-border);
446
+ border-radius: 4px;
447
+ }
448
+
449
+ ::-webkit-scrollbar-thumb:hover {
450
+ background: var(--text-muted);
451
+ }
452
+
453
+ /* Responsive */
454
+ @media (max-width: 768px) {
455
+ .main-content {
456
+ padding: 1rem;
457
+ }
458
+
459
+ .stat-card {
460
+ padding: 1rem;
461
+ }
462
+
463
+ .stat-card .stat-value {
464
+ font-size: 2rem;
465
+ }
466
+ }
467
+
468
+ /* Code blocks */
469
+ pre {
470
+ background: var(--dark-bg);
471
+ border: 1px solid var(--card-border);
472
+ border-radius: 0.5rem;
473
+ padding: 1rem;
474
+ overflow-x: auto;
475
+ }
476
+
477
+ code {
478
+ color: #a78bfa;
479
+ font-family: 'Monaco', 'Menlo', monospace;
480
+ }
481
+
482
+ /* Search results */
483
+ .search-result {
484
+ padding: 1rem;
485
+ border: 1px solid var(--card-border);
486
+ border-radius: 0.5rem;
487
+ margin-bottom: 0.5rem;
488
+ cursor: pointer;
489
+ transition: all 0.2s;
490
+ }
491
+
492
+ .search-result:hover {
493
+ background: rgba(99, 102, 241, 0.1);
494
+ border-color: var(--primary-color);
495
+ }
496
+
497
+ .search-result .result-title {
498
+ font-weight: 600;
499
+ color: var(--text-primary);
500
+ }
501
+
502
+ .search-result .result-meta {
503
+ font-size: 0.85rem;
504
+ color: var(--text-muted);
505
+ }
506
+
507
+ /* Loading overlay */
508
+ .loading-overlay {
509
+ position: fixed;
510
+ top: 0;
511
+ left: 0;
512
+ right: 0;
513
+ bottom: 0;
514
+ background: rgba(15, 23, 42, 0.9);
515
+ display: flex;
516
+ align-items: center;
517
+ justify-content: center;
518
+ z-index: 9999;
519
+ }
520
+
521
+ .loading-content {
522
+ text-align: center;
523
+ }
524
+
525
+ .loading-spinner {
526
+ width: 50px;
527
+ height: 50px;
528
+ border: 3px solid var(--card-border);
529
+ border-top-color: var(--primary-color);
530
+ border-radius: 50%;
531
+ animation: spin 1s linear infinite;
532
+ margin: 0 auto 1rem;
533
+ }
534
+
535
+ /* Feature badges */
536
+ .feature-badge {
537
+ display: inline-flex;
538
+ align-items: center;
539
+ padding: 0.25rem 0.75rem;
540
+ background: rgba(99, 102, 241, 0.1);
541
+ border-radius: 2rem;
542
+ font-size: 0.75rem;
543
+ color: var(--primary-color);
544
+ margin: 0.25rem;
545
+ }
546
+
547
+ .feature-badge i {
548
+ margin-right: 0.25rem;
549
+ }