webcodelab commited on
Commit
381e0b5
·
verified ·
1 Parent(s): f472dc2

Create dashboard.css

Browse files
Files changed (1) hide show
  1. app/static/css/dashboard.css +562 -0
app/static/css/dashboard.css ADDED
@@ -0,0 +1,562 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* --- Base layout for dashboard --- */
2
+ .dashboard-wrapper {
3
+ display: flex;
4
+ min-height: 100vh;
5
+ background: var(--bg);
6
+ color: var(--text);
7
+ transition: background var(--transition), color var(--transition);
8
+ }
9
+
10
+ /* --- Sidebar Styles --- */
11
+ .sidebar {
12
+ width: 250px;
13
+ background: var(--card);
14
+ border-right: 1px solid var(--border);
15
+ padding: 1.5rem 1rem;
16
+ display: flex;
17
+ flex-direction: column;
18
+ box-shadow: 2px 0 8px 0 rgba(30,41,59,0.02);
19
+ position: sticky; /* Make it sticky for desktop */
20
+ top: 0;
21
+ height: 100vh; /* Make it full height */
22
+ z-index: 50; /* Below sticky header, above main content on mobile */
23
+ transition: transform var(--transition), box-shadow var(--transition);
24
+ }
25
+
26
+ .sidebar-header {
27
+ display: flex;
28
+ justify-content: space-between;
29
+ align-items: center;
30
+ padding-bottom: 1.5rem;
31
+ border-bottom: 1px solid var(--border);
32
+ margin-bottom: 1.5rem;
33
+ }
34
+
35
+ .sidebar .logo {
36
+ font-size: 1.25rem; /* Slightly smaller than main header logo */
37
+ letter-spacing: 0; /* Remove negative letter spacing for sidebar */
38
+ padding-left: 0.5rem;
39
+ }
40
+
41
+ .close-sidebar {
42
+ display: none; /* Hidden on desktop */
43
+ background: none;
44
+ border: none;
45
+ color: var(--text);
46
+ cursor: pointer;
47
+ font-size: 1.5rem;
48
+ transition: color var(--transition);
49
+ }
50
+ .close-sidebar:hover {
51
+ color: var(--primary);
52
+ }
53
+
54
+ .sidebar-nav {
55
+ display: flex;
56
+ flex-direction: column;
57
+ gap: 0.5rem;
58
+ }
59
+
60
+ .nav-item {
61
+ display: flex;
62
+ align-items: center;
63
+ gap: 0.8rem;
64
+ padding: 0.75rem 1rem;
65
+ border-radius: 0.5rem;
66
+ color: var(--text);
67
+ text-decoration: none;
68
+ font-weight: 500;
69
+ transition: background var(--transition), color var(--transition);
70
+ }
71
+
72
+ .nav-item svg {
73
+ width: 20px;
74
+ height: 20px;
75
+ stroke: currentColor;
76
+ transition: stroke var(--transition);
77
+ }
78
+
79
+ .nav-item:hover {
80
+ background: var(--bg); /* Lighter background on hover */
81
+ color: var(--primary);
82
+ }
83
+
84
+ [data-theme="dark"] .nav-item:hover {
85
+ background: var(--bg-dark); /* Darker background on hover */
86
+ }
87
+
88
+ .nav-item.active {
89
+ background: var(--primary);
90
+ color: var(--text-light);
91
+ box-shadow: 0 2px 8px rgba(37,99,235,0.2);
92
+ }
93
+
94
+ .nav-item.active svg {
95
+ stroke: var(--text-light);
96
+ }
97
+
98
+ .logout-item {
99
+ margin-top: auto; /* Pushes logout to the bottom of the sidebar */
100
+ color: #ef4444; /* Red color for logout */
101
+ }
102
+
103
+ .logout-item:hover {
104
+ background: #fef2f2;
105
+ color: #dc2626;
106
+ }
107
+ [data-theme="dark"] .logout-item:hover {
108
+ background: #450a0a;
109
+ color: #fca5a5;
110
+ }
111
+
112
+
113
+ /* --- Main Content Area --- */
114
+ .main-content-area {
115
+ flex-grow: 1;
116
+ padding: 0; /* Padding handled by .content-padding */
117
+ transition: margin-left var(--transition);
118
+ }
119
+
120
+ .dashboard-header {
121
+ display: flex;
122
+ align-items: center;
123
+ justify-content: space-between;
124
+ padding: 1rem 2rem;
125
+ background: var(--card);
126
+ border-bottom: 1px solid var(--border);
127
+ position: sticky;
128
+ top: 0;
129
+ z-index: 100;
130
+ box-shadow: 0 2px 8px 0 rgba(30,41,59,0.04);
131
+ }
132
+
133
+ .hamburger-dashboard {
134
+ display: none; /* Hidden on desktop */
135
+ background: none;
136
+ border: none;
137
+ cursor: pointer;
138
+ font-size: 1.3rem;
139
+ color: var(--text);
140
+ transition: color var(--transition);
141
+ padding: 0.5rem;
142
+ }
143
+ .hamburger-dashboard span { /* Hamburger icon lines */
144
+ display: block;
145
+ width: 24px;
146
+ height: 3px;
147
+ margin: 3px 0;
148
+ background: var(--text);
149
+ border-radius: 2px;
150
+ transition: all 0.3s;
151
+ }
152
+
153
+ .user-settings {
154
+ display: flex;
155
+ align-items: center;
156
+ gap: 1rem;
157
+ }
158
+
159
+ .user-name {
160
+ font-weight: 600;
161
+ color: var(--text);
162
+ }
163
+
164
+ .user-avatar {
165
+ width: 36px;
166
+ height: 36px;
167
+ border-radius: 50%;
168
+ overflow: hidden;
169
+ background: var(--primary);
170
+ display: flex;
171
+ align-items: center;
172
+ justify-content: center;
173
+ color: var(--text-light);
174
+ font-weight: 600;
175
+ font-size: 0.9rem;
176
+ }
177
+ .user-avatar img {
178
+ width: 100%;
179
+ height: 100%;
180
+ object-fit: cover;
181
+ }
182
+
183
+
184
+ .content-padding {
185
+ padding: 2rem;
186
+ }
187
+
188
+ .welcome-title {
189
+ font-size: 2.2rem;
190
+ font-weight: 700;
191
+ margin-bottom: 0.5rem;
192
+ color: var(--text);
193
+ }
194
+
195
+ .subtitle {
196
+ color: #64748b;
197
+ font-size: 1.1rem;
198
+ margin-bottom: 2rem;
199
+ }
200
+ [data-theme="dark"] .subtitle {
201
+ color: #cbd5e1;
202
+ }
203
+
204
+ /* --- Analytics Grid --- */
205
+ .analytics-grid {
206
+ display: grid;
207
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
208
+ gap: 1.5rem;
209
+ margin-bottom: 2.5rem;
210
+ }
211
+
212
+ .analytics-card {
213
+ background: var(--card);
214
+ border: 1px solid var(--border);
215
+ border-radius: 1rem;
216
+ padding: 1.5rem;
217
+ box-shadow: 0 4px 12px 0 rgba(30,41,59,0.05);
218
+ transition: background var(--transition), border var(--transition);
219
+ }
220
+
221
+ .card-label {
222
+ font-size: 0.9rem;
223
+ color: #64748b;
224
+ margin-bottom: 0.5rem;
225
+ font-weight: 500;
226
+ }
227
+ [data-theme="dark"] .card-label {
228
+ color: #cbd5e1;
229
+ }
230
+
231
+ .card-value {
232
+ font-size: 2rem;
233
+ font-weight: 700;
234
+ color: var(--primary);
235
+ }
236
+
237
+ /* --- Section Cards (for API Key, Upload, Recent Uploads) --- */
238
+ .section-card {
239
+ background: var(--card);
240
+ border: 1px solid var(--border);
241
+ border-radius: 1rem;
242
+ padding: 2rem;
243
+ box-shadow: 0 4px 12px 0 rgba(30,41,59,0.05);
244
+ margin-bottom: 2rem;
245
+ transition: background var(--transition), border var(--transition);
246
+ }
247
+
248
+ .section-title {
249
+ font-size: 1.5rem;
250
+ font-weight: 700;
251
+ margin-bottom: 0.75rem;
252
+ color: var(--text);
253
+ }
254
+
255
+ .section-description {
256
+ color: #64748b;
257
+ font-size: 1rem;
258
+ margin-bottom: 1.5rem;
259
+ }
260
+ [data-theme="dark"] .section-description {
261
+ color: #cbd5e1;
262
+ }
263
+
264
+ /* --- API Key Section --- */
265
+ .api-key-section .input-group {
266
+ display: flex;
267
+ gap: 0.5rem;
268
+ margin-bottom: 1rem;
269
+ }
270
+
271
+ .api-key-section .form-input {
272
+ flex-grow: 1;
273
+ cursor: text; /* Allow selection */
274
+ }
275
+
276
+ .api-key-form {
277
+ margin-bottom: 1rem;
278
+ }
279
+
280
+ .docs-link {
281
+ font-size: 0.95rem;
282
+ }
283
+
284
+ /* --- Buttons (reusing styles from login/register) --- */
285
+ .btn {
286
+ padding: 0.75rem 1.25rem;
287
+ border-radius: 0.5rem;
288
+ font-size: 0.95rem;
289
+ font-weight: 600;
290
+ cursor: pointer;
291
+ transition: background var(--transition), color var(--transition), border-color var(--transition);
292
+ text-decoration: none; /* For anchor tags styled as buttons */
293
+ display: inline-flex;
294
+ align-items: center;
295
+ justify-content: center;
296
+ gap: 0.5rem;
297
+ }
298
+
299
+ .primary-btn {
300
+ background: var(--primary);
301
+ color: #fff;
302
+ border: none;
303
+ }
304
+ .primary-btn:hover {
305
+ background: var(--accent);
306
+ }
307
+
308
+ .secondary-btn {
309
+ background: var(--card);
310
+ color: var(--text);
311
+ border: 1px solid var(--border);
312
+ }
313
+ .secondary-btn:hover {
314
+ background: var(--bg);
315
+ border-color: var(--primary);
316
+ }
317
+ [data-theme="dark"] .secondary-btn:hover {
318
+ background: var(--bg-dark);
319
+ }
320
+
321
+ .small-btn {
322
+ padding: 0.5rem 1rem;
323
+ font-size: 0.85rem;
324
+ }
325
+
326
+
327
+ /* --- Upload Section --- */
328
+ .drop-area {
329
+ border: 2px dashed var(--border);
330
+ border-radius: 0.75rem;
331
+ padding: 2.5rem;
332
+ text-align: center;
333
+ cursor: pointer;
334
+ color: #64748b;
335
+ font-size: 1rem;
336
+ transition: border-color var(--transition), background var(--transition);
337
+ }
338
+ .drop-area:hover, .drop-area.drag-over {
339
+ border-color: var(--primary);
340
+ background: rgba(37,99,235,0.05);
341
+ }
342
+ [data-theme="dark"] .drop-area:hover, [data-theme="dark"] .drop-area.drag-over {
343
+ background: rgba(60, 165, 250, 0.1);
344
+ }
345
+
346
+ .drop-area .browse-link {
347
+ color: var(--primary);
348
+ font-weight: 600;
349
+ text-decoration: underline;
350
+ }
351
+
352
+ .uploaded-files-list {
353
+ list-style: none;
354
+ padding: 0;
355
+ margin-top: 1rem;
356
+ text-align: left;
357
+ color: var(--text);
358
+ font-size: 0.95rem;
359
+ }
360
+ .uploaded-files-list li {
361
+ background: var(--bg);
362
+ padding: 0.5rem 1rem;
363
+ border-radius: 0.5rem;
364
+ margin-bottom: 0.5rem;
365
+ border: 1px solid var(--border);
366
+ }
367
+ [data-theme="dark"] .uploaded-files-list li {
368
+ background: var(--card-dark);
369
+ }
370
+
371
+ .upload-now-btn {
372
+ margin-top: 1.5rem;
373
+ width: 100%;
374
+ }
375
+
376
+
377
+ /* --- Recent Uploads Table --- */
378
+ .table-responsive {
379
+ overflow-x: auto; /* Makes table scrollable on small screens */
380
+ width: 100%; /* Ensures it takes full width */
381
+ }
382
+
383
+ .data-table {
384
+ width: 100%;
385
+ border-collapse: collapse;
386
+ margin-top: 1rem;
387
+ }
388
+
389
+ .data-table th, .data-table td {
390
+ text-align: left;
391
+ padding: 1rem;
392
+ border-bottom: 1px solid var(--border);
393
+ }
394
+
395
+ .data-table th {
396
+ background: var(--bg);
397
+ font-weight: 600;
398
+ color: var(--text);
399
+ font-size: 0.9rem;
400
+ text-transform: uppercase;
401
+ }
402
+ [data-theme="dark"] .data-table th {
403
+ background: var(--bg-dark);
404
+ }
405
+
406
+ .data-table td {
407
+ color: var(--text);
408
+ background: var(--card);
409
+ }
410
+ [data-theme="dark"] .data-table td {
411
+ background: var(--card-dark);
412
+ }
413
+
414
+ .data-table tbody tr:last-child td {
415
+ border-bottom: none;
416
+ }
417
+
418
+ .data-table tbody tr:hover td {
419
+ background: var(--bg);
420
+ }
421
+ [data-theme="dark"] .data-table tbody tr:hover td {
422
+ background: var(--card-dark);
423
+ }
424
+
425
+ .no-data-message {
426
+ text-align: center;
427
+ color: #64748b;
428
+ padding: 1.5rem;
429
+ background: var(--bg);
430
+ border-radius: 0.75rem;
431
+ border: 1px solid var(--border);
432
+ font-style: italic;
433
+ }
434
+ [data-theme="dark"] .no-data-message {
435
+ background: var(--bg-dark);
436
+ }
437
+
438
+ /* --- Responsive Adjustments --- */
439
+ @media (max-width: 900px) {
440
+ .dashboard-wrapper {
441
+ flex-direction: column; /* Stack sidebar and main content */
442
+ }
443
+
444
+ .sidebar {
445
+ position: fixed; /* Fixed position for mobile sidebar */
446
+ top: 0;
447
+ left: 0;
448
+ height: 100%;
449
+ width: 250px; /* Adjust as needed */
450
+ transform: translateX(-100%); /* Hidden by default */
451
+ box-shadow: 4px 0 15px rgba(0,0,0,0.1); /* Stronger shadow when open */
452
+ border-right: none;
453
+ z-index: 150; /* Above everything when open */
454
+ }
455
+
456
+ .sidebar.open {
457
+ transform: translateX(0); /* Slide in */
458
+ }
459
+
460
+ .sidebar-header {
461
+ justify-content: space-between;
462
+ padding-right: 1rem; /* Adjust padding for close button */
463
+ }
464
+
465
+ .close-sidebar {
466
+ display: block; /* Show close button on mobile */
467
+ }
468
+
469
+ .hamburger-dashboard {
470
+ display: flex; /* Show hamburger to open sidebar */
471
+ }
472
+
473
+ .main-content-area.shifted {
474
+ /* Optional: Add a slight shift or overlay to main content when sidebar is open */
475
+ margin-left: 250px; /* Matches sidebar width */
476
+ filter: brightness(0.8); /* Dim background */
477
+ pointer-events: none; /* Prevent interaction with main content */
478
+ }
479
+
480
+ .dashboard-header {
481
+ padding: 0.75rem 1.5rem; /* Reduce header height */
482
+ }
483
+
484
+ .user-name {
485
+ display: none; /* Hide full name on small screens */
486
+ }
487
+
488
+ .content-padding {
489
+ padding: 1.5rem; /* Reduce overall padding */
490
+ }
491
+
492
+ .welcome-title {
493
+ font-size: 1.8rem;
494
+ }
495
+ .subtitle {
496
+ font-size: 1rem;
497
+ }
498
+
499
+ .analytics-grid {
500
+ grid-template-columns: 1fr; /* Stack analytics cards vertically */
501
+ }
502
+
503
+ .section-card {
504
+ padding: 1.5rem; /* Reduce section card padding */
505
+ }
506
+
507
+ /* Mobile table adjustments */
508
+ .data-table thead {
509
+ display: none; /* Hide table headers on mobile */
510
+ }
511
+
512
+ .data-table, .data-table tbody, .data-table tr, .data-table td {
513
+ display: block; /* Make table elements act like blocks */
514
+ width: 100%; /* Full width */
515
+ }
516
+
517
+ .data-table tr {
518
+ margin-bottom: 1rem;
519
+ border: 1px solid var(--border);
520
+ border-radius: 0.75rem;
521
+ overflow: hidden;
522
+ padding: 1rem;
523
+ display: flex;
524
+ flex-direction: column;
525
+ background: var(--card);
526
+ box-shadow: 0 2px 8px rgba(30,41,59,0.05);
527
+ }
528
+
529
+ .data-table td {
530
+ border-bottom: none; /* Remove individual cell borders */
531
+ text-align: right; /* Align value to the right */
532
+ padding: 0.5rem 0; /* Adjust padding */
533
+ position: relative;
534
+ padding-left: 50%; /* Make space for data-label */
535
+ }
536
+
537
+ .data-table td::before {
538
+ content: attr(data-label); /* Use data-label for custom label */
539
+ position: absolute;
540
+ left: 0;
541
+ width: 45%;
542
+ padding-left: 1rem;
543
+ font-weight: 600;
544
+ text-align: left;
545
+ color: #64748b;
546
+ }
547
+ [data-theme="dark"] .data-table td::before {
548
+ color: #cbd5e1;
549
+ }
550
+ }
551
+
552
+ @media (max-width: 600px) {
553
+ .dashboard-header {
554
+ padding: 0.5rem 1rem; /* Further reduce header height */
555
+ }
556
+ .content-padding {
557
+ padding: 1rem; /* Smallest padding */
558
+ }
559
+ .analytics-card, .section-card, .data-table tr {
560
+ border-radius: 0.75rem; /* Maintain rounded corners */
561
+ }
562
+ }